I am returning to using the Summarize Highlights feature after some time away, and I now find that this feature seems to add CriticMarkup syntax to each highlight. I would prefer this not happen. Is there an option to disable this? I am already running a script from a smart rule to reformat the file produced by the Summarize Highlights command, but I was not the author of the script so I’m not sure how to edit it to remove the CM syntax, if that’s the only option.
on performSmartRule(theRecords)
tell application id "DNtp"
repeat with theRecord in theRecords
if (type of theRecord as string) = "markdown" then
-- Only process Markdown docs
set newText to {}
-- Set up an empty list to push the paragraphs into)
set currentText to (plain text of theRecord)
-- Get the current text of the document
repeat with thisLine in (paragraphs of currentText)
-- Loop through the document, paragraph by paragraph
if thisLine begins with "##" then
-- If this is an H2 page link
set cachedText to (characters 4 thru -1 of thisLine as string) -- Cache all but the control characters in a variable
else if thisLine begins with "* " then
-- If it's just a bulleted paragraph
copy ((characters 3 thru -1 of thisLine as string) & " (" & (cachedText) & ") " & return) to end of newText
-- Get all but the control characters and concatenate the cachedText.
-- Then push it to the newText list
else
copy thisLine & return to end of newText
-- Anything else, including the H1 line at the top, just push into the newText list
end if
end repeat
set plain text of theRecord to (newText as string)
-- Set the text of the document to the new text
end if
end repeat
end tell
end performSmartRule
Would love some help here @BLUEFROG . Here’s an attempt I made at removing the criticmarkup syntax with AppleScript but no luck:
on performSmartRule(theRecords)
tell application id "DNtp"
repeat with theRecord in theRecords
if (type of theRecord as string) = "markdown" then
-- Only process Markdown docs
set newText to {}
-- Set up an empty list to push the paragraphs into)
set currentText to (plain text of theRecord)
-- Get the current text of the document
repeat with thisLine in (paragraphs of currentText)
-- Loop through the document, paragraph by paragraph
if thisLine begins with "##" then
-- If this is an H2 page link
set cachedText to (characters 4 thru -1 of thisLine as string) -- Cache all but the control characters in a variable
else if thisLine begins with "* " then
-- If it's just a bulleted paragraph
copy ((characters 3 thru -1 of thisLine as string) & " (" & (cachedText) & ") " & return) to end of newText
-- Get all but the control characters and concatenate the cachedText.
-- Then push it to the newText list
else if thisLine contains "{==" then
set thisLine to findAndReplaceInText(thisLine, "{==", "")
copy thisLine & return to end of newText
else if thisLine contains "==}" then
set thisLine to findAndReplaceInText(thisLine, "==}", "")
copy thisLine & return to end of newText
else
copy thisLine & return to end of newText
-- Anything else, including the H1 line at the top, just push into the newText list
end if
end repeat
set plain text of theRecord to (newText as string)
-- Set the text of the document to the new text
end if
end repeat
end tell
end performSmartRule
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
Also, I’m now getting escape characters in my Markdown output (even without using this script and smart rule), e.g.,: \(2000\)
What’s causing this?
Hold the Option key and choose Help > Report bug to start a support ticket. Attach the document and the script. Thanks!
Are you sure that paragraphs of currentText
works with a Markdown file? If I understand Apple’s (as usually a bit terse) documentation, the Text suite requires Rich Text. Anyway, I tried the same approach with JavaScript and it threw an error when I tried to get the paragraphs of a MD plaintext. Here’s what I can offer:
(() => {
// NOT FOR USE IN A SMARTRULE
const app=Application("DEVONthink 3");
const recs = app.selectedRecords();
const collection = [];
recs.forEach(r => {
let txt = r.plainText();
let cache = "";
const lines = txt.split('\n\n');
lines.forEach(line => {
let match_h2 = line.match(/^## (.*)/);
if (match_h2) {
let cache = match_h2[1];
} else {
let match_list = line.match(/^\* (.*)/);
if (match_list) {
collection.push(`${match[1]} ( ${cache} )`);
} else {
collection.push(line.replaceAll(/==\{|\}==/g,""));
}
}
});
console.log(collection.join('\n\n'));
});
})()
No comments, I’m afraid, but I tried to follow your logic. As it is, the script does not modify the original file, it just prints out the new version on the console (so you have to run it in Script Editor). Also, it will not work in a smart rule – that’s not possible with JavaScript, I’m afraid).
I couldn’t test it, because I have neither a sample with Critical Markup nor one with the desired transformation.
Here is a script with a handler that scrapes CriticMarkup syntax from a Markdown file.
The handler can be called as a post-process step, if needed.
Note you must pass the plain text and the cached text item delimiter.
(* Uncomment for testing
tell application id "DNtp"
my performSmartRule(selected records)
end tell *)
on performSmartRule(theFiles)
tell application id "DNtp"
set od to AppleScript's text item delimiters
repeat with thisRecord in theFiles
if (type of thisRecord as string) = "markdown" then
set scrapedText to my scrapeCriticMarkup(plain text of thisRecord, od)
set plain text of thisRecord to scrapedText
end if
end repeat
end tell
end performSmartRule
on scrapeCriticMarkup(recText, od)
set AppleScript's text item delimiters to {"{==", "==}", "{--", "--}", "{++", "++}", "{==", "==}", "{~~", "~>", "~~}", "\\"}
set scrapedText to text items of recText
set AppleScript's text item delimiters to od
return (scrapedText as string)
end scrapeCriticMarkup
And here’s a sample smart rule that would strip the CriticMarkup once a Summary Markdown file is created…
Scrape CriticMarkup.dtSmartRule.zip (1.4 KB)
2 Likes
Works great. Thanks for this!