mirror of
https://github.com/marty-oehme/scripts.git
synced 2024-11-16 23:08:08 +00:00
157 lines
5.6 KiB
QML
157 lines
5.6 KiB
QML
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 setLetters
|
|
property string setMarkers
|
|
|
|
property variant settingsVariables: [
|
|
{
|
|
"identifier": "setLetters",
|
|
"name": "Letters to use for ordered lists",
|
|
"description": "Letters/symbol and their order to use for ordered list",
|
|
"type": "string",
|
|
"default": "abcdefghijklmnopqrstuvwxyz",
|
|
},
|
|
{
|
|
"identifier": "setMarkers",
|
|
"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 (setLetters) {
|
|
letters = setLetters.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 (setMarkers) {
|
|
markers = setMarkers.replace(/[\s,;]/g, "")
|
|
for (var n = 0; n < markers.length; 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)
|
|
}
|
|
|
|
// This will return the type of a list of the first line of text
|
|
function getListType(text) {
|
|
text = text.replace(/^ */, "")
|
|
if (text.search(/\d[\.\d]*\. /) != -1)
|
|
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
|
|
}
|
|
|
|
// This will clear the text of all list formatting the script uses
|
|
function clearLine(text) {
|
|
var line = text
|
|
var lineType = getListType(line)
|
|
|
|
while (lineType != "none") {
|
|
if (lineType == "number")
|
|
line = line.replace(/\d[\.\d]*\. /, "")
|
|
else if (lineType == "letter")
|
|
line = line.replace(/[^ ]\. /, "")
|
|
else if (lineType == "mark")
|
|
line = line.replace(/[^ ] /, "")
|
|
|
|
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 = []
|
|
lines[0] = lines[0].replace(/^ */, "")
|
|
|
|
if (action == "list 123" && type == "number") {
|
|
|
|
// Continue the list for nested and flat numbered list
|
|
if (lines[0].search(/\d+\.\d+\. /) != -1) {
|
|
var number = lines[0].match(/^\d*/)
|
|
lines[0] = lines[0].replace(number + ".", "")
|
|
var subnumber = lines[0].match(/^\d*/) - 1
|
|
lines[0] = " " + lines[0]
|
|
}
|
|
else {
|
|
var number = lines[0].match(/\d*/) - 1
|
|
var subnumber = 0
|
|
}
|
|
}
|
|
else if (action == "list abc" && type == "letter") {
|
|
var number = letters.indexOf(lines[0].substring(0, 1))
|
|
var subnumber = 0
|
|
}
|
|
else {
|
|
var number = 0
|
|
var subnumber = 0
|
|
}
|
|
|
|
for (var n = 0; n < lines.length; n++) {
|
|
|
|
if (lines[n] == "" || lines[n].substring(0, 1) == "\t") {
|
|
newText.push(lines[n])
|
|
continue
|
|
}
|
|
|
|
var line = (clearLine(lines[n]))
|
|
|
|
if (action == "list clear") {
|
|
newText.push(line.replace(/^ */, ""))
|
|
continue
|
|
}
|
|
else if (action == "list 123") {
|
|
|
|
if (line.substring(0, 1) == " ") {
|
|
subnumber++
|
|
var mark = " " + number + "." + subnumber + ". "
|
|
}
|
|
else {
|
|
subnumber = 0
|
|
number++
|
|
var mark = number + ". "
|
|
}
|
|
}
|
|
else if (action == "list abc") {
|
|
var mark = letters[number++] + ". "
|
|
}
|
|
else {
|
|
var mark = action.substring(5, 6) + " "
|
|
}
|
|
|
|
newText.push(mark + line.replace(/^ */, ""))
|
|
}
|
|
|
|
script.noteTextEditWrite(newText.join("\n"))
|
|
}
|
|
}
|
|
}
|
|
|