From 15aa3017a35bd7d94abaf5f9a67c99d3135bcf9f Mon Sep 17 00:00:00 2001 From: Dan Remollino Date: Mon, 20 Mar 2023 00:21:57 -0400 Subject: [PATCH] initial commit --- .gitignore | 5 + FIGlet Text.novaextension/.gitignore | 1 + FIGlet Text.novaextension/CHANGELOG.md | 27 +++ FIGlet Text.novaextension/README.md | 12 + FIGlet Text.novaextension/Scripts/main.js | 107 +++++++++ FIGlet Text.novaextension/extension.json | 262 +++++++++++++++++++++ FIGlet Text.novaextension/extension.png | Bin 0 -> 1392 bytes FIGlet Text.novaextension/extension@2x.png | Bin 0 -> 2329 bytes README.md | 1 + icon.afdesign | Bin 0 -> 23785 bytes 10 files changed, 415 insertions(+) create mode 100644 .gitignore create mode 100644 FIGlet Text.novaextension/.gitignore create mode 100644 FIGlet Text.novaextension/CHANGELOG.md create mode 100644 FIGlet Text.novaextension/README.md create mode 100644 FIGlet Text.novaextension/Scripts/main.js create mode 100644 FIGlet Text.novaextension/extension.json create mode 100644 FIGlet Text.novaextension/extension.png create mode 100644 FIGlet Text.novaextension/extension@2x.png create mode 120000 README.md create mode 100644 icon.afdesign diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..87a77bc --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +# macOS +.DS_Store + +# editor configs +.nova \ No newline at end of file diff --git a/FIGlet Text.novaextension/.gitignore b/FIGlet Text.novaextension/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/FIGlet Text.novaextension/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/FIGlet Text.novaextension/CHANGELOG.md b/FIGlet Text.novaextension/CHANGELOG.md new file mode 100644 index 0000000..7d4d8a0 --- /dev/null +++ b/FIGlet Text.novaextension/CHANGELOG.md @@ -0,0 +1,27 @@ +## Version 1.5.1 +- added extension to 'formatters' category + +## Version 1.5 +- check for and remove some FIGlet fonts adding lines containing only whitespace at conversion +- refactored FIGlet conversion process + +## Version 1.4 +- added font preview to Font options +- removed unneeded filesystem entitlement + +## Version 1.3 +- added option to prepend and append new lines after conversion +- converted text is now automatically deselected and the cursor is moved to the end of conversion +- updated extension configuration descriptions + +## Version 1.2 +- added Output options to extension configuration + +## Version 1.1.1 +- updated configuration storage keys + +## Version 1.1 +- added Font options to extension configuration + +## Version 1.0 +- initial release diff --git a/FIGlet Text.novaextension/README.md b/FIGlet Text.novaextension/README.md new file mode 100644 index 0000000..5d1540b --- /dev/null +++ b/FIGlet Text.novaextension/README.md @@ -0,0 +1,12 @@ +# Requirements + +## FIGlet +FIGlet Text requires [FIGlet](http://www.figlet.org) to be installed locally. It is recommended to install FIGlet using [Homebrew](https://brew.sh). Once Homebrew is installed, simply run `brew install figlet`. +## Monospaced Fonts +It is recommended to only use a monospaced font in Nova. Not doing so will result in garbled looking FIGlet conversions. + +# How to Use FIGlet Text +FIGlet Text will add a 'Create FIGlet Text from Selection' menu item to the Editor menu. Make one or more selections in the editor and run the command. + +# TODO +- option to auto comment converted text diff --git a/FIGlet Text.novaextension/Scripts/main.js b/FIGlet Text.novaextension/Scripts/main.js new file mode 100644 index 0000000..d97a99b --- /dev/null +++ b/FIGlet Text.novaextension/Scripts/main.js @@ -0,0 +1,107 @@ +/** + * Convert the supplied text to FIGlet format + * + * @param workspace - Workspace, default first argument, see Nova extension docs + https://docs.nova.app/api-reference/commands-registry/#registername-callable-thisvalue + * @param figletArgs - key/value obj, command line arguments for FIGlet configuration + * @param textToConvert - str, the text to convert with FIGlet + * @param postConversion - func, callback to run on the figlet converted text string, + receives the FIGlet converted string as an argument; + output/modification of the FIGlet text should be done here + * @returns a Disposable, see Nova extension docs https://docs.nova.app/api-reference/disposable/ + */ +nova.commands.register('figlet', (workspace, figletArgs, textToConvert, postConversion) => { + let args = ['figlet'] + for (const arg in figletArgs) { + args.push(figletArgs[arg]) + } + args.push(textToConvert) + + const process = new Process('/usr/bin/env', {args}) + + let figTextArr = [] + process.onStdout(line => { + // test if a line contains only whitespace, some + // FIGlet fonts will add a line or two for fun + if (!/^\s+$/.test(line)) { + figTextArr.push(line) + } + }) + + let figTextStr = '' + process.onDidExit(status => { + if (status === 0) { + // the converted text from FIGlet as a string + figTextStr = figTextArr.join('').trimEnd() + postConversion(figTextStr) + } + }) + + process.start() +}) + +// FIGlet convert the selected text in the editor +nova.commands.register('createFigletText', editor => { + // console.log(editor.document.syntax) + + let printNewLines = numOfLines => { + let newLinesStr = '' + while (numOfLines > 0) { + newLinesStr += '\n' + numOfLines-- + } + return newLinesStr + } + + let figConfig = { + font: '-f' + nova.config.get('figlet_text.font', 'string'), + outputWidth: '-w' + nova.config.get('figlet_text.outputWidth', 'number'), + textDirection: nova.config.get('figlet_text.textDirection', 'string'), + justification: nova.config.get('figlet_text.justification', 'string'), + } + + let prependNewLines = nova.config.get('figlet_text.prependNewLines', 'number') + let appendNewLines = nova.config.get('figlet_text.appendNewLines', 'number') + + let selectedRanges = editor.selectedRanges.reverse() + + for (let range of selectedRanges) { + let text = editor.getTextInRange(range) + + nova.commands.invoke('figlet', figConfig, text, figletText => { + // // prepend/append new lines + if (appendNewLines > 0) { figletText = figletText.concat(printNewLines(figConfig.appendNewLines)) } + if (prependNewLines > 0) { figletText = printNewLines(figConfig.prependNewLines).concat(figletText) } + + // replace the selection with the converted FIGlet text + editor.edit(e => { + e.replace(range, figletText) + }) + + editor.moveRight(1) + }) + } +}) + +// FIGlet convert the preview text in the extension config +nova.commands.register('figletTextFontPreview', workspace => { + let figConfig = { + kerning: '-k', + outputWidth: '-w' + 2000, + font: '-f' + nova.config.get('figlet_text.font', 'string') + } + + let text = nova.config.get('figlet_text.previewText', 'string') + + nova.commands.invoke('figlet', figConfig, text, figletText => { + nova.config.set('figlet_text.preview', figletText) + }) +}) +// listen for changes to the Font selection dropdown in the extension config +nova.config.onDidChange('figlet_text.font', (newValue, oldValue) => { + nova.commands.invoke('figletTextFontPreview') +}) +// listen for changes to the Preview Text input in the extension config +nova.config.onDidChange('figlet_text.previewText', (newValue, oldValue) => { + nova.commands.invoke('figletTextFontPreview') +}) diff --git a/FIGlet Text.novaextension/extension.json b/FIGlet Text.novaextension/extension.json new file mode 100644 index 0000000..a38b28e --- /dev/null +++ b/FIGlet Text.novaextension/extension.json @@ -0,0 +1,262 @@ +{ + "identifier": "dev.danremollino.figlettext", + "name": "FIGlet Text", + "organization": "Dan Remollino", + "description": "Convert selected text to FIGlet. Great for adding readable text to the Minimap, creating l33t text headers, and organizing files.", + "version": "1.5.1", + "categories": ["commands", "formatters"], + + "entitlements": { + "clipboard": false, + "process": true, + "requests": false, + "filesystem": false + }, + + "main": "main.js", + + "config": [ + { + "type": "section", + "required": false, + "title": "Font", + "children": [ + { + "key": "figlet_text.font", + "title": "Font", + "description": "The FIGlet font to use when converting text.", + "link": "http://www.figlet.org/examples.html", + "type": "enum", + "radio": false, + "values": [ + "3-d", + "3x5", + "5lineoblique", + "acrobatic", + "alligator", + "alligator2", + "alphabet", + "avatar", + "banner", + "banner3-D", + "banner3", + "banner4", + "barbwire", + "basic", + "bell", + "big", + "bigchief", + "binary", + "block", + "bubble", + "bulbhead", + "calgphy2", + "caligraphy", + "catwalk", + "chunky", + "coinstak", + "colossal", + "computer", + "contessa", + "contrast", + "cosmic", + "cosmike", + "cricket", + "cursive", + "cyberlarge", + "cybermedium", + "cybersmall", + "diamond", + "digital", + "doh", + "doom", + "dotmatrix", + "drpepper", + "eftichess", + "eftifont", + "eftipiti", + "eftirobot", + "eftitalic", + "eftiwall", + "eftiwater", + "epic", + "fender", + "fourtops", + "fuzzy", + "goofy", + "gothic", + "graffiti", + "hollywood", + "invita", + "isometric1", + "isometric2", + "isometric3", + "isometric4", + "italic", + "ivrit", + "jazmine", + "jerusalem", + "katakana", + "kban", + "larry3d", + "lcd", + "lean", + "letters", + "linux", + "lockergnome", + "madrid", + "marquee", + "maxfour", + "mike", + "mini", + "mirror", + "mnemonic", + "morse", + "moscow", + "nancyj-fancy", + "nancyj-underlined", + "nancyj", + "nipples", + "ntgreek", + "o8", + "ogre", + "pawp", + "peaks", + "pebbles", + "pepper", + "poison", + "puffy", + "pyramid", + "rectangles", + "relief", + "relief2", + "rev", + "roman", + "rot13", + "rounded", + "rowancap", + "rozzo", + "runic", + "runyc", + "sblood", + "script", + "serifcap", + "shadow", + "short", + "slant", + "slide", + "slscript", + "small", + "smisome1", + "smkeyboard", + "smscript", + "smshadow", + "smslant", + "smtengwar", + "speed", + "stampatello", + "standard", + "starwars", + "stellar", + "stop", + "straight", + "tanja", + "tengwar", + "term", + "thick", + "thin", + "threepoint", + "ticks", + "ticksslant", + "tinker-toy", + "tombstone", + "trek", + "tsalagi", + "twopoint", + "univers", + "usaflag", + "wavy", + "weird" + ], + "default": "banner3" + }, + { + "key": "figlet_text.previewText", + "title": "Preview Text", + "description": "The text to output in the Preview textbox below.", + "type": "string", + "default": "FIGlet" + }, + { + "key": "figlet_text.preview", + "title": "Preview", + "description": "Admittedly, this isn't the ideal preview as Nova uses a non-monospaced font for the Preview textbox above. Use the (?) link in the Font selection preference above to open the FIGlet examples webpage in an external browser, or copy the text above and paste it into an editor window.", + "type": "text" + } + ] + }, + + { + "type": "section", + "required": false, + "title": "Output", + "children": [ + { + "key": "figlet_text.outputWidth", + "title": "Output Width", + "description": "The screen width FIGlet assumes when formatting its output. FIGlet will wrap text that is rendered larger than this value. An Output Width of 1 is a special value that tells FIGlet to print each non-space FIGcharacter on a separate line. This value will affect text justification.", + "link": "http://www.figlet.org/figlet-man.html", + "type": "number", + "default": 80 + }, + { + "key": "figlet_text.textDirection", + "title": "Text Direction", + "description": "Controls whether FIGlet prints left-to-right or right-to-left. 'Auto' makes FIGlet use whichever is specified in the font file.", + "link": "http://www.figlet.org/figlet-man.html", + "type": "enum", + "radio": false, + "values": [["-X", "Auto"], ["-L", "Left-to-right"], ["-R", "Right-to-left"]], + "default": "-X" + }, + { + "key": "figlet_text.justification", + "title": "Justification", + "description": "Justification of FIGlet output. 'Auto' sets the justification according to the value of Text Direction.", + "link": "http://www.figlet.org/figlet-man.html", + "type": "enum", + "radio": false, + "values": [["-x", "Auto"], ["-l", "Left"], ["-c", "Center"], ["-r", "Right"]], + "default": "-x" + }, + { + "key": "figlet_text.prependNewLines", + "title": "Prepend New Lines", + "description": "Amount of new lines to prepend to the converted text.", + "type": "number", + "default": 0 + }, + { + "key": "figlet_text.appendNewLines", + "title": "Append New Lines", + "description": "Amount of new lines to append to the converted text.", + "type": "number", + "default": 0 + } + ] + } + ], + + "commands": { + "editor": [ + { + "title": "Create FIGlet Text from Selection", + "command": "createFigletText", + "shortcut": "ctrl-opt-cmd-f", + "when": "editorHasSelection" + } + ] + }, + + "bugs": "https://danremollino.dev" +} diff --git a/FIGlet Text.novaextension/extension.png b/FIGlet Text.novaextension/extension.png new file mode 100644 index 0000000000000000000000000000000000000000..9a91577618be49cf7fbe58fff17bee3db16b2820 GIT binary patch literal 1392 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 Nz{1o9+GOmJ_&1UqGf)5k literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 120000 index 0000000..6059fc1 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +FIGlet Text.novaextension/README.md \ No newline at end of file diff --git a/icon.afdesign b/icon.afdesign new file mode 100644 index 0000000000000000000000000000000000000000..65421ef871d38c9035bf7558719a4fb1144df31a GIT binary patch literal 23785 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 Bi{1bL literal 0 HcmV?d00001