View Single Post
If the target is MarkDown, this slightly fuller version also tries to capture any *italic* or **bold** sequences in the topics/notes and represent them with Markdown asterisk emphases:

Code:
-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
-- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
-- OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 
-- IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 
-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 
-- TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE 
-- OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

-- IF YOU *REALLY* WANT TO DELETE THE CHILD NOTES AFTER CAPTURING THEIR TEXT
-- CHANGE THE VALUE OF THIS PROPERTY TO TRUE …
-- BUT *ONLY* EXPERIMENT WITH DISPOSABLE COPIES OF MULTIPLY BACKED UP WORK ...

property pVer : "002"

property pblnReallyDeleteDescendants : false

tell application id "OOut"
	set lstDocs to documents
	if length of lstDocs < 1 then return
	
	tell first item of lstDocs
		set lstSeln to selected rows
		if length of lstSeln < 1 then return
		tell first item of lstSeln
			if has subtopics then
				set its note to my MDEmphasis({text, font} of attribute runs of its note) & return & ¬
					return & my GetSubText(its children)
			end if
			set its note expanded to true
		end tell
	end tell
end tell

on GetSubText(lstChiln)
	tell application id "OOut"
		set str to ""
		-- CAPTURE THE TEXT
		repeat with oChild in lstChiln
			tell oChild
				set str to str & my MDEmphasis({text, font} of attribute runs of its topic) & ¬
					return & return & my MDEmphasis({text, font} of attribute runs of its note) & return & return
				if has subtopics of it then set str to str & my GetSubText(its children)
			end tell
		end repeat
		
		-- AND THEN DELETE THE CHILDREN ? 
		if pblnReallyDeleteDescendants then
			repeat with i from length of lstChiln to 1 by -1
				delete item i of lstChiln
			end repeat
		end if
		return str
	end tell
end GetSubText

on MDEmphasis({lstText, lstFont})
	set str to ""
	repeat with i from 1 to length of lstText
		set strText to item i of lstText
		if strText ≠ "" then
			set strFont to item i of lstFont
			if strFont contains "BoldOblique" or strFont contains "BoldItalic" then
				set str to str & my emphasize(strText, "***")
			else if strFont contains "bold" then
				set str to str & my emphasize(strText, "**")
			else if strFont contains "oblique" or strFont contains "italic" then
				set str to str & my emphasize(strText, "*")
			else
				set str to str & strText
			end if
		end if
	end repeat
	return str
end MDEmphasis

-- wrap the trimmed part of the string with MD emphasis markers
-- and restore the end spaces
on emphasize(strText, strMarker)
	set {dlm, my text item delimiters} to {my text item delimiters, space}
	set lstParts to text items of strText
	set lngParts to length of lstParts
	-- The opening marker
	repeat with i from 1 to lngParts
		set strPart to item i of lstParts
		if strPart ≠ "" then
			set item i of lstParts to strMarker & strPart
			exit repeat
		end if
	end repeat
	-- and the closing marker
	repeat with i from lngParts to 1 by -1
		set strPart to item i of lstParts
		if strPart ≠ "" then
			set item i of lstParts to strPart & strMarker
			exit repeat
		end if
	end repeat
	set str to lstParts as string
	set my text item delimiters to dlm
	return str
end emphasize