Hier kommt nun ein Skript. Ich muss vorab gestehen, dass ich kein AppleScript-Experte bin und es deshalb bestimmt eine bessere Lösung gibt (mit Regulären Ausdrücken z. B.). Aber es funktioniert!
on performSmartRule(theRecords)
tell application id "DNtp"
repeat with theRecord in theRecords
set thePlainText to the plain text of theRecord
set theParagraphs to paragraphs of thePlainText
-- Dept. Tags:
set theDokuwikitagLine to my findDokuwikitags(theParagraphs)
if (theDokuwikitagLine is not 0) then
set theDokuwikitags to item theDokuwikitagLine of theParagraphs as string
set theDokuwikitags to characters 7 thru ((length of theDokuwikitags) - 3) of theDokuwikitags as string
set theTags to my splitText(theDokuwikitags as string, " ")
set tags of theRecord to theTags
end if
set theParagraphs to my polishUpTheParagraphs(theParagraphs, theDokuwikitagLine)
set theInterimPlaintext to ""
repeat with p from 1 to count of theParagraphs
set theInterimPlaintext to theInterimPlaintext & item p of theParagraphs
end repeat
set thePlainText to theInterimPlaintext
-- Dept. Headings:
set theDokuwikiHeadings to {"======", "=====", "====", "===", "==", "="}
set theMarkdownHeadings to {"#", "##", "###", "####", "#####", "######"}
repeat with h from 1 to 6
set thePlainText to my findAndReplaceInText(thePlainText, item h of theDokuwikiHeadings, item h of theMarkdownHeadings)
end repeat
set plain text of theRecord to thePlainText
end repeat
end tell
end performSmartRule
on findDokuwikitags(theParagraphs)
repeat with p from (count of theParagraphs) to 1 by -1
if (length of item p of theParagraphs > 6) then
if (characters 1 thru 6 of item p of theParagraphs as string is "{{tag>") then return p
end if
end repeat
return 0
end findDokuwikitags
on splitText(theText, theDelimiter)
set AppleScript's text item delimiters to theDelimiter
set theTextItems to every text item of theText
set AppleScript's text item delimiters to ""
return theTextItems
end splitText
on polishUpTheParagraphs(theParagraphs, theDokuwikitagLine)
set theInterimParagraphs to {}
repeat with p from 1 to count of theParagraphs
if ((p is not theDokuwikitagLine) and (item p of theParagraphs is not "")) then set theInterimParagraphs to theInterimParagraphs & item p of theParagraphs & return & return
end repeat
return theInterimParagraphs
end polishUpTheParagraphs
on findAndReplaceInText(theText, theSearchString, theReplacementString)
set AppleScript's text item delimiters to theSearchString
set theTextItems to every text item of theText
set AppleScript's text item delimiters to theReplacementString
set theText to theTextItems as string
set AppleScript's text item delimiters to ""
return theText
end findAndReplaceInText
Dieses Skript ist für eine Smart Rule geschrieben und muss daher auch durch eine solche ausgelöst werden (es ließe sich aber auch leicht umschreiben, um es direkt aus dem Skript-Menü aufzurufen).
Was also zu tun ist: Dieses Skript muss, am besten mit dem Skripteditor im Unterordner “Smart Rules” des Skripte-Ordner von DEVONthink abgespeichert werden. Um an den zu gelangen, in DT oben auf das Skript-Symbol in der Menüleiste klicken und den Menüpunkt “Skriptordner öffnen” (oder so ähnlich – ich verwende DT mit englischer Benutzeroberfläche) wählen.
Dann lässt sich es sich in so einer einfachen Smart Rule aufrufen:

“Process Dokuwiki Test” ist der Name meines Skriptes, Ihres kann natürlich anders heißen. Wenn man “External” wählt, werden alle Skripte im erwähnten Smart-Rule-Ordner angezeigt.
“On Demand” ist die manuelle Auslösung eines Skriptes. Sollte man beim Testen immer so machen. Die Smart Rule könnte aber auch, ausgelöst durch einen Trigger, die Dokuwiki-Dateien z. B. aus einem externen Ordner in DEVONthink bewegen und sie dann umwandeln.
Wenn die ersten Testergebnisse zur Ihrer Zufriedenheit ausfallen – Kopien Ihrer Dokuwiki-Dateien sollten Sie auf jeden Fall haben, trauen Sie mir nicht, ich traue mir auch nicht! –, können Sie die Smart Rule auch auf viele Dateien in einem Rutsch anwenden, einfach markieren und Regel anwerfen.
Aufgabe also gelöst, alles super?
Leider nein. Ich sehe zwei Probleme:
-
Die Umwandlung von txt in md
a. Konvertieren von txt in md: Wenn man die Smart Rule zusätzlich noch konvertieren lässt, dann werden sämtliche Zeichen, die Markdown-Markup bedeuten könnten, mit einem Backslash versehen, damit sie eben kein Markup sind. So funktioniert das Konvertieren in Markup seit Kurzem. Aber das will man ja nicht unbedingt.
b. Umbenennen der Datei in Name
.md: Ebenfalls tricky, denn DEVONthink verhält sich dann seltsam: Die Datei wird im Inspektor als Text und nicht als Markdown angezeigt, aber sie wird gerendert, ist also doch Markdown. Und die Smart Rule erfasst sie auch nicht mehr, was ebenfalls heißt: Sie ist Markdown. Keine Ahnung, was das noch für Folgen haben kann.
Eine Umbenennung vorab und außerhalb von DEVONthink von .txt in .md wäre eine Möglichkeit. Aber da haben andere, die sich besser auskennen, bestimmt auch eine bessere Idee.
-
In Ihrer Beispieldatei stecken viele, viele Links, die innerhalb Ihres Wikis funktioniert haben. Aber funktionieren sie auch in DEVONthink? Bzw.: Ließen auch die sich automatisiert umwandeln, damit sie funktionieren? Ich weiß es nicht. Das sieht weit komplizierter aus als das, was mein Skript macht.