diff --git a/selected-markdown-to-bbcode/info.json b/selected-markdown-to-bbcode/info.json new file mode 100644 index 0000000..4a7392a --- /dev/null +++ b/selected-markdown-to-bbcode/info.json @@ -0,0 +1,9 @@ +{ + "name": "Selected Markdown to BBCode", + "identifier": "selected-markdown-to-bbcode", + "script": "selected-markdown-to-bbcode.qml", + "authors": ["@pbek"], + "version": "0.0.1", + "minAppVersion": "17.05.7", + "description" : "With this script you can right click the selected text and convert it to BBCode Code.\n\nDependencies\nPancode\npanbbcode.lua\n\nInstallation\nAfter you have installed Pancode you have to download the lua script panbbcode.lua and configure both paths in the settings." +} diff --git a/selected-markdown-to-bbcode/selected-markdown-to-bbcode.qml b/selected-markdown-to-bbcode/selected-markdown-to-bbcode.qml new file mode 100644 index 0000000..50c5a14 --- /dev/null +++ b/selected-markdown-to-bbcode/selected-markdown-to-bbcode.qml @@ -0,0 +1,95 @@ +import QtQml 2.0 + +/** + * This script creates a menu item and a button that converts the selected Markdown + * text to BBCode in the clipboard + * + * Dependencies: + * http://pandoc.org + * https://github.com/2ion/pandoc-bbcode + */ +QtObject { + property string panbbcodePath; + property string pandocPath; + + // register your settings variables so the user can set them in the script settings + property variant settingsVariables: [ + { + "identifier": "pandocPath", + "name": "Pandoc path", + "description": "Please select the path to your Pandoc executable:", + "type": "file", + "default": "pandoc", + }, + { + "identifier": "panbbcodePath", + "name": "panbbcode path", + "description": "Please select the path to your panbbcode.lua executable:", + "type": "file", + "default": "/opt/scripts/panbbcode.lua", + }, + ]; + + /** + * Initializes the custom action + */ + function init() { + script.registerCustomAction("markdownToBBCode", "Markdown to BBCode", "BBCode", "edit-copy", true, true); + } + + /** + * This function is invoked when a custom action is triggered + * in the menu or via button + * + * @param identifier string the identifier defined in registerCustomAction + */ + function customActionInvoked(identifier) { + if (identifier != "markdownToBBCode") { + return; + } + + // get the selected text from the note text edit + var text = script.noteTextEditSelectedText(); + + // you need pandoc and the BBCode writer from https://github.com/2ion/pandoc-bbcode + // to convert Markdown to BBCode + var params = ["-t", "/opt/scripts/panbbcode.lua", "-f", "markdown"]; + var result = script.startSynchronousProcess("pandoc", params, text); + + // do some code list cleanup + result = replaceAll(result, "[list=*]", "[list]"); + result = replaceAll(result, "[/*]", ""); + + // convert inline code blocks to italic + // do this 10 times to take care of multiple code blocks in a line + for (var i = 0; i < 10; i++) { + result = result.replace(/^(.+?)\[code\](.+?)\[\/code\]/img, "$1[i]$2[/i]"); + } + + // convert headlines to bold + result = replaceAll(result, "[h]", "[b]"); + result = replaceAll(result, "[/h]", "[/b]"); + + // convert `em` to `i` + result = replaceAll(result, "[em]", "[i]"); + result = replaceAll(result, "[/em]", "[/i]"); + + // link some users + result = replaceAll(result, "@Georg", "[USER=1]Georg[/USER]"); + result = replaceAll(result, "@Sören", "[USER=2]Sören[/USER]"); + result = replaceAll(result, "@Robert", "[USER=16]Robert[/USER]"); + result = replaceAll(result, "@Stephan", "[USER=8]Stephan[/USER]"); + result = replaceAll(result, "@Gunnar", "[USER=14]Gunnar[/USER]"); + + // put the result into the clipboard + script.setClipboardText(result); + } + + function replaceAll(str, find, replace) { + return String(str).replace(new RegExp(escapeRegExp(find), 'g'), replace); + } + + function escapeRegExp(str) { + return str.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"); + } +}