From caade373a2920542f5d0b7fbee44a9b3bdecaa02 Mon Sep 17 00:00:00 2001 From: Nick Moore Date: Sat, 11 May 2024 00:04:09 +0100 Subject: [PATCH] Update Sentence Case and Uppercase --- source/SentenceCase.popclipext/Config.js | 7 --- source/SentenceCase.popclipext/Config.json | 20 ++---- .../SentenceCase.popclipext/sentence-case.js | 57 +++++++++--------- .../SentenceCase.popclipext/sentence-case.php | 26 -------- .../SentenceCase.popclipext/sentence-case.png | Bin 8709 -> 0 bytes source/Uppercase.popclipext/Config.js | 18 +++--- source/Uppercase.popclipext/Config.json | 16 ----- source/Uppercase.popclipext/uppercase.png | Bin 9027 -> 0 bytes 8 files changed, 44 insertions(+), 100 deletions(-) delete mode 100644 source/SentenceCase.popclipext/Config.js delete mode 100644 source/SentenceCase.popclipext/sentence-case.php delete mode 100644 source/SentenceCase.popclipext/sentence-case.png delete mode 100644 source/Uppercase.popclipext/Config.json delete mode 100644 source/Uppercase.popclipext/uppercase.png diff --git a/source/SentenceCase.popclipext/Config.js b/source/SentenceCase.popclipext/Config.js deleted file mode 100644 index 869fe1136..000000000 --- a/source/SentenceCase.popclipext/Config.js +++ /dev/null @@ -1,7 +0,0 @@ -define({ - identifier: "com.pilotmoon.popclip.extension.sentence-case", - name: "Sentence Case", - icon: "square filled S", - action: require('sentence-case.js'), - popclipVersion: 3482, -}); \ No newline at end of file diff --git a/source/SentenceCase.popclipext/Config.json b/source/SentenceCase.popclipext/Config.json index 5eca25249..926a1c60f 100644 --- a/source/SentenceCase.popclipext/Config.json +++ b/source/SentenceCase.popclipext/Config.json @@ -1,16 +1,8 @@ { - "Actions" : [ - { - "After" : "paste-result", - "Image File" : "sentence-case.png", - "Script Interpreter" : "\/usr\/bin\/php", - "Shell Script File" : "sentence-case.php", - "Title" : "Sentence Case" - } - ], - "Extension Description" : "Start each selected sentence with a capital letter.", - "Extension Identifier" : "com.pilotmoon.popclip.extension.sentence-case", - "Extension Name" : "Sentence Case", - "Note": "Updated for macOS 12.0 Monterey.", - "popclipVersion" : 3543 + "name" : "Sentence Case", + "identifier" : "com.pilotmoon.popclip.extension.sentence-case", + "description" : "Start each selected sentence with a capital letter.", + "icon": "square filled S", + "popclip version" : 4151, + "module": "sentence-case.js" } \ No newline at end of file diff --git a/source/SentenceCase.popclipext/sentence-case.js b/source/SentenceCase.popclipext/sentence-case.js index 7766ef431..9cc97f3f7 100644 --- a/source/SentenceCase.popclipext/sentence-case.js +++ b/source/SentenceCase.popclipext/sentence-case.js @@ -1,32 +1,31 @@ -function sentenceCase(text) { - const regex=/(^\s*\p{L}{1}|[.?!]\s+\p{L}{1})/gu; // split into something approximating sentences - text = text.toLowerCase(); - return text.replace(regex, (match) => match.toUpperCase()); +function sentenceCase(text) { + const regex = /(^\s*\p{L}{1}|[.?!]\s+\p{L}{1})/gu; // split into something approximating sentences + text = text.toLowerCase(); + return text.replace(regex, (match) => match.toUpperCase()); } -if (typeof(define) !== 'undefined') { // when running in popclip, export the function - define(() => { - return (selection) => { - popclip.pasteText(sentenceCase(selection.text)); - } - }) -} -else { // when running in jsc, perform tests - function test() { - const data=[ - ["blah", "Blah"], - ["BLAH. blah.", "Blah. Blah."], - [" BLAH blah? BHAL.\nff", " Blah blah? Bhal.\nFf"], - ["BLAH (blah-more", "Blah (blah-more"], - ["élan fdf? написанная! OK", "Élan fdf? Написанная! Ok"], - - ["Nick's best dog's fur", "Nick's best dog's fur"], - ]; - data.forEach((pair) => { - const [input, output]=pair; - const result=sentenceCase(input); - print(`${output===result?'pass ':'fail *'} ${input} => ${result} (expected: ${output})`); - }); - } - test(); +exports.action = (input) => { + popclip.pasteText(sentenceCase(input.text)); +}; + +function test() { + const data = [ + ["blah", "Blah"], + ["BLAH. blah.", "Blah. Blah."], + [" BLAH blah? BHAL.\nff", " Blah blah? Bhal.\nFf"], + ["BLAH (blah-more", "Blah (blah-more"], + ["élan fdf? написанная! OK", "Élan fdf? Написанная! Ok"], + + ["Nick's best dog's fur", "Nick's best dog's fur"], + ]; + data.forEach((pair) => { + const [input, output] = pair; + const result = sentenceCase(input); + print( + `${ + output === result ? "pass " : "fail *" + } ${input} => ${result} (expected: ${output})`, + ); + }); } +// test(); diff --git a/source/SentenceCase.popclipext/sentence-case.php b/source/SentenceCase.popclipext/sentence-case.php deleted file mode 100644 index b47e6117a..000000000 --- a/source/SentenceCase.popclipext/sentence-case.php +++ /dev/null @@ -1,26 +0,0 @@ - \ No newline at end of file diff --git a/source/SentenceCase.popclipext/sentence-case.png b/source/SentenceCase.popclipext/sentence-case.png deleted file mode 100644 index aa85278b250b89b83e7b4c174e5aceda7bf9249e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8709 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 { - popclip.pasteText(selection.text.toUpperCase()); - } -}) \ No newline at end of file +// #popclip +// name: Uppercase +// #identifier: com.pilotmoon.popclip.extension.uppercase +// description: Make the selected text ALL UPPERCASE. +// icon: "square filled AB" +// popclip version: 4151 + +exports.action = (input) => { + popclip.pasteText(input.text.toUpperCase()); +}; diff --git a/source/Uppercase.popclipext/Config.json b/source/Uppercase.popclipext/Config.json deleted file mode 100644 index c5d63352a..000000000 --- a/source/Uppercase.popclipext/Config.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "Actions" : [ - { - "After" : "paste-result", - "Image File" : "uppercase.png", - "Script Interpreter" : "\/usr\/bin\/php", - "Shell Script File" : "uppercase.php", - "Title" : "Uppercase" - } - ], - "Extension Description" : "Make the selected text ALL UPPERCASE.", - "Extension Identifier" : "com.pilotmoon.popclip.extension.uppercase", - "Extension Name" : "Uppercase", - "Note" : "Updated for macOS 12.0 Monterey.", - "popclipVersion": 3543 -} \ No newline at end of file diff --git a/source/Uppercase.popclipext/uppercase.png b/source/Uppercase.popclipext/uppercase.png deleted file mode 100644 index cd53951215ff75c97a46cf7f3d48ab124b98661c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9027 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