1
0
Fork 0
mirror of https://github.com/marty-oehme/scripts.git synced 2024-11-16 14:58:08 +00:00
qownnotes-scripts/list-maker/list-maker.qml

130 lines
4.5 KiB
QML
Raw Normal View History

2017-10-12 18:24:19 +00:00
import QtQml 2.2
import QOwnNotesTypes 1.0
/* This script adds toolbar buttons and context menu items to change selected text formatting:
* - make it an ordered list with numbers or letters;
* - make it an unordered list with markers of your choice;
* - clear any list formatting.
*/
Script {
property string orderedLetters
property string unorderedMarkers
property variant settingsVariables: [
{
"identifier": "orderedLetters",
"name": "Letters to use for ordered lists",
"description": "Letters/symbol and their order to use for ordered list",
"type": "string",
"default": "abcdefghijklmnopqrstuvwxyz",
},
{
"identifier": "unorderedMarkers",
"name": "Unordered list item markers",
"description": "Put the symbols you want to use as marked list item markers. Spaces and commas are ignored.",
"type": "string",
"default": "- • ‣",
}
]
property string letters
property string markers
function init() {
script.registerCustomAction("list 123", "1. 2. 3. list", "1.", "", true)
if (orderedLetters) {
letters = orderedLetters.replace(/[\s,;]/g, "")
var orderedLettersListIcon = letters[0] + "."
var orderedLettersListName = "%1. %2. %3. list".arg(letters[0]).arg(letters[1]).arg(letters[2])
script.registerCustomAction("list abc", orderedLettersListName, orderedLettersListIcon, "", true)
}
if (unorderedMarkers) {
markers = unorderedMarkers.replace(/[\s,;]/g, "")
for (var n = 0; n < markers.length; n++) {
if (markers[n] != " " && markers[n] != ",")
script.registerCustomAction("list " + markers[n], markers[n] + " list", markers[n])
}
}
script.registerCustomAction("list " + markers[0], "%1 list".arg(markers[0]), "", "", true, true)
script.registerCustomAction("list clear", "Clear list formatting", "X", "", true)
}
function getListType(text) {
if (text.search(/^\d+\. /) == 0)
var type = "number"
else if (letters.indexOf(text.substring(0, 1)) != -1 && text.substring(1, 3) == ". ")
var type = "letter"
else if (markers.indexOf(text.substring(0, 1)) != -1 && text.substring(1, 2) == " ")
var type = "mark"
else
var type = "none"
return type
}
function clearLine(text) {
var line = text
var lineType = getListType(line)
while (lineType != "none") {
if (lineType == "number")
line = line.replace(/^\d+\. /, "")
else if (lineType == "letter")
line = line.substring(3)
else if (lineType == "mark")
line = line.substring(2)
lineType = getListType(line)
}
return line
}
function customActionInvoked(action) {
if (action.substring(0, 5) == "list ") {
var type = getListType(script.noteTextEditSelectedText())
var lines = script.noteTextEditSelectedText().split("\n")
var newText = []
if (action == "list 123" && type == "number")
number = lines[0].match(/^\d+/) - 1
else if (action == "list abc" && type == "letter")
number = letters.indexOf(lines[0].substring(0, 1))
else
var number = 0
for (var n = 0; n < lines.length; n++) {
if (lines[n] == "" || lines[n].search(/^\s/) != -1) {
newText.push(lines[n])
continue
}
var line = (clearLine(lines[n]))
if (action == "list clear") {
newText.push(line)
continue
}
else if (action == "list 123") {
number++
var mark = number + ". "
}
else if (action == "list abc")
var mark = letters[number++] + ". "
else
var mark = action.substring(5, 6) + " "
newText.push(mark + line)
}
script.noteTextEditWrite(newText.join("\n"))
}
}
}