/* Developed by E. F. Haghish (2014) Center for Medical Biometry and Medical Informatics University of Freiburg, Germany haghish@imbi.uni-freiburg.de * MarkDoc comes with no warranty * markdown program ================ This program is a part of MarkDoc package, a general purpose program for literate programming in Stata. This program generates converts Markdown syntax to SMCL, by returning an rclass named r(md) 3.6.7 February, 2016 */ program define markdown, rclass local version = int(`c(stata_version)') if `version' <= 13 { local trim trim local version 11 } if `version' > 13 { local trim ustrltrim local version 14 } version `version' // Avoid string quotations and also grave accesnts // ------------------------------------------------------------------------- *local 0 : subinstr local 0 `"""' "{c 34}", all local 0 : subinstr local 0 "`" "{c 96}", all local 0 : subinstr local 0 "'" "{c 39}", all *local 0 : subinstr local 0 "=" "{c 61}", all // Text styling // ------------------------------------------------------------------------- forvalues i = 1/27 { local 0 : subinstr local 0 "___" "{ul:" local 0 : subinstr local 0 "___" "}" } forvalues i = 1/27 { local 0 : subinstr local 0 "__" "{bf:" local 0 : subinstr local 0 "__" "}" } forvalues i = 1/27 { local 0 : subinstr local 0 "_" "{it:" local 0 : subinstr local 0 "_" "}" } // Secondary syntax for headers // ------------------------------------------------------------------------- if substr(`trim'(`"`macval(line)'"'),1,2) == "# " { local 0 : subinstr local 0 "# " "", all local 0 "{title:`0'}" } else if substr(`trim'(`"`macval(line)'"'),1,3) == "## " { local 0 : subinstr local 0 "## " "", all local 0 "{title:`0'}" } // Simple ASCII to SMCL tables // ------------------------------------------------------------------------- /* local 0 : subinstr local 0 "|" "{c |}", all local 0 : subinstr local 0 "-+-" "{c -}{c +}{c -}", all //THIS IS SMARTER, BUT SLOWER local i 80 while `i' > 1 { local line : display _dup(`i') "-" local 0 : subinstr local 0 "`line'" "{hline `i'}" local i `--i' } */ // Create Markdown Horizontal line // ------------------------------------------------------------------------- if `trim'(`"`macval(0)'"') == "- - -" { local 0 : subinstr local 0 "- - -" " {hline}" } // Create SMCL Tab // ------------------------------------------------------------------------- if `trim'(`"`macval(0)'"') != "- - -" & /// substr(`trim'(`"`macval(0)'"'),1,5) == "- - -" { local 0 : subinstr local 0 "- - -" "{dlgtab:" local 0 = `"`macval(0)' "' + "}" } return local md `0' end