Перейти к содержимому

Google Action Sctipt для DokuWiki

20250324-154440.png

function onOpen() {
DocumentApp.getUi().createMenu('Markdown Converter')
.addItem('Markdown to DokuWiki', 'convertMarkdownToDokuWiki')
.addItem('Markdown to Google Docs', 'convertMarkdownToGoogleDocs')
.addItem('Google Docs to DokuWiki', 'convertGoogleDocsToDokuWiki')
.addToUi();
}
function convertGoogleDocsToDokuWiki() {
var doc = DocumentApp.getActiveDocument();
var body = doc.getBody();
var output = [];
for (var i = 0; i < body.getNumChildren(); i++) {
var element = body.getChild(i);
output.push(parseElementToDokuWiki(element));
}
var dokuwikiText = output.filter(line => line !== "").join("\n\n");
showConvertedText(dokuwikiText);
}
function formatInlineStyles(text, element) {
var textElement = element.editAsText();
var newText = text;
var boldWords = [];
for (var i = 0; i < text.length; i++) {
if (textElement.isBold(i)) {
boldWords.push(i);
}
}
newText = applyFormatting(newText, boldWords, "**");
var italicWords = [];
for (var i = 0; i < text.length; i++) {
if (textElement.isItalic(i)) {
italicWords.push(i);
}
}
newText = applyFormatting(newText, italicWords, "//");
var linkMatches = [...text.matchAll(/\[(.+?)\]\((https?:\/\/[^\s)]+)\)/g)];
linkMatches.forEach(match => {
var linkText = match[1];
var url = match[2];
newText = newText.replace(match[0], "[" + linkText + "](/" + url + "/)");
});
return newText;
}
function applyFormatting(text, indexes, markup) {
if (indexes.length === 0) return text;
var formattedText = "";
var inWord = false;
for (var i = 0; i < text.length; i++) {
if (indexes.includes(i) && !inWord) {
formattedText += markup;
inWord = true;
}
formattedText += text[i];
if (!indexes.includes(i + 1) && inWord) {
formattedText += markup;
inWord = false;
}
}
return formattedText;
}