/*

					   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 *

	
	
	sthlp program
	===============
	
	This program is a part of MarkDoc package and generates dynamic Stata help 
	files within source code, in ".sthlp" file format. 
 
	3.6.9  April,  2016
*/

program define sthlp

	// NOTE:
	// Stata 14 introduces ustrltrim() function for removing Unicode whitespace 
	// characters and blanks. The previous trim() function cannot remove unicode 
	// whitespace. The program is updated to function for all versions of Stata, 
	// but yet, there is a slight chance of "unreliable" behavior from MarkDoc 
	// in older versions of Stata, if the string has a unicode whitespace...
	// =========================================================================
	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'
	
	
    syntax anything(name=script id="The script file name is")					/// 
	[, 				 ///
	replace 	 	 /// replaces the current sthlp file, if it already exists
	TEMPlate(str)	 /// If template(empty), avoid appending the template
	Export(name) 	 /// specifies the exported format 
	ASCIItable		 /// convert ASCII tables to SMCL in dynamic help files
	TITle(str)   	 /// specifies the title of the document (for styling)
	AUthor(str)  	 /// specifies the author of mthe document (for styling)
	AFFiliation(str) /// specifies author affiliation (for styling)
	ADDress(str) 	 /// specifies author contact information (for styling)
	Date			 /// Add the document generation date to the document
	SUMmary(str)     /// writing the summary or abstract of the report
	]
	
	
	// -------------------------------------------------------------------------
	// Syntax Processing
	// =========================================================================
	if missing("`export'") local export sthlp
	
	local input `script'
		
	if (index(lower("`input'"),".ado")) {
		local name : subinstr local input ".ado" ""
		local convert "`name'.`export'"
		local extension ado
	}
	else if (index(lower("`input'"),".mata")) {
		local name : subinstr local input ".mata" ""
		local convert  "`name'.`export'"
		local extension mata
	} 
	else if (index(lower("`input'"),".do")) {
		local name : subinstr local input ".do" ""
		local convert  "`name'.`export'"
		local extension do
	}
	
	// assume it's an ADO file
	capture confirm file "`script'.ado"
	if _rc == 0 {
		local name : subinstr local input ".ado" ""
		local convert "`name'.`export'"
		local script `script'.ado
		local extension ado
	}
	
	if missing("`extension'") {
		di as err "{p}file extension not recognized; MarkDoc can generate "		///
		"dynamic Stata help files from {bf:do}, {bf:ado}, and {bf:mata} files" _n
		exit 198
	}
	
	confirm file "`script'"
	
	// If the template is not "empty", then make sure other locals are ""
	if "`template'" != "empty" {
		local author 
		local affiliation
		local address
		local title
		local summary
	}
	
	************************************************************************	
	*
	* MAIN ENGINE 
	* -----------
	*
	* Part 1- Adding the template
	* Part 2- Processing the template
	* Part 3- Converting to STHLP or SMCL file
	************************************************************************
	
	
	// -------------------------------------------------------------------------
	// Part 1: Adding the template 
	// =========================================================================
	tempfile tmp 
	tempname hitch knot 
	qui file open `hitch' using `"`script'"', read
	qui file open `knot' using `"`tmp'"', write replace
	file read `hitch' line
	
	if "`template'" != "empty" & substr(`trim'(`"`macval(line)'"'),1,26) != 		///
	"/*** DO NOT EDIT THIS LINE" {
		file write `knot' 														///
		"/*** DO NOT EDIT THIS LINE -----------------------------------------------------" _n ///
		"" _n																	///
		"Version: 0.0.0" _n														///
		"" _n(2)																///																
		"Intro Description" _n													///
		"=================" _n(2)												///
		"packagename -- A new module for ... "	_n(3)							/// 
		"Author(s)" _n															///
		"=================" _n(2)												///
		"Author name ..." _n													///
		"Author affiliation ..." _n												///
		"to add more authors, leave an empty line between authors' information" _n(2) ///
		"Second author ..." _n													///
		`"For more information visit {browse "http://www.haghish.com/markdoc":MarkDoc homepage}"' _n(3) ///
		"Syntax" _n																///
		"=================" _n(2)												///
		"{opt exam:ple} {depvar} [{indepvars}] {ifin} using " _n				///
		"[{it:{help filename:filename}}]" _n									///
		"[{cmd:,} {it:options}]" _n(2)											///
		"{synoptset 20 tabbed}{...}" _n											///
		"{synopthdr}" _n														///
		"{synoptline}" _n														///
		"{synopt :{opt rep:lace}}replace this example{p_end}" _n				///
		"{synopt :{opt app:end}}work further on this help file{p_end}" _n 		///
		"{synopt :{opt addmore}}you can add more description for the options; Moreover, " _n ///
		"	the text you write can be placed in multiple lines {p_end}" _n		///
		"{synopt :{opt learn:smcl}}you won't make a loss learning" _n			///
		"{help smcl:SMCL Language} {p_end}" _n 									///
		"{synoptline}" _n														///
		"----------------------------------------------------- DO NOT EDIT THIS LINE ***/" _n(2) ///
		`"* Note: If you like to leave the "Intro Description" or "Author(s) section"' _n ///
		 "* 		empty, erase the text but KEEP THE HEADINGS" _n(4)			
		 
		 
		file write `knot' `"`macval(line)'"' _n 
		
		while r(eof) == 0 {
			file read `hitch' line
			file write `knot' `"`macval(line)'"' _n 
		}

		file write `knot' 														///
		"/***" _n 																///															
		"Example" _n															///
		"=================" _n(2)												///
		"    explain what it does" _n											///
		"        . example command" _n(2)										///
		"    second explanation" _n												///
		"        . example command" _n											///
		"***/" _n(4)
		
		file close `knot'
		capture copy "`tmp'" "`script'", replace public
		
		if _rc != 0 {
		
			local k 1
			local oldname
			while missing("`oldname'") {
				capture confirm file "`name'_`k'.`extension'"
				if _rc != 0 {
					capture copy "`tmp'" "`name'_`k'.`extension'", replace public
					local oldname `script'
					local script "`name'_`k'.`extension'"
				}
				local k `++k'
			}
			
			di as txt "{p}It seems your operating system does not allow "		///
			"{help MarkDoc} to replace your script file. This probably means "  ///
			"that you are a Microsoft Windows user. MarkDoc created " 			///
			"{browse `script'} instead, so you can work further on this file "	///
			"or replace it yourself. The original error was:" _n
		
			di as err  "{p 4 4 2}"												///
			"file `oldname' cannot be modified or erased; likely cause "		///
			"is read-only directory or file {help r(608)}" _n	
		}
	}

	
	// -------------------------------------------------------------------------
	// Part 2: Reading the template and the ado-file documentation! 
	// =========================================================================
	tempfile tmp 
	tempname hitch knot 
	qui file open `hitch' using `"`script'"', read
	qui file open `knot' using `"`tmp'"', write replace
	file write `knot'  "{smcl}" _n 
	file read `hitch' line
	
	local i 0
	local i2 0
	
	//Reading the header, if the HEADER EXISTS and the TEMPLATE IS NOT EMPTY
	if substr(`trim'(`"`macval(line)'"'),1,26) == "/*** DO NOT EDIT THIS LINE" 	///
	& "`template'" != "empty" {
		
		while substr(`trim'(`"`macval(line)'"'),55,21) != "DO NOT EDIT THIS LINE" ///
		& r(eof) == 0 & missing("`exitloop'") {
			
			// Version
			if substr(`trim'(`"`macval(line)'"'),1,8) == "Version:" {
				local line : subinstr local line "Version:" ""
				local v = `trim'("`line'")
				local version "version `v'"
			}
			
			//Description
			if substr(`trim'(`"`macval(line)'"'),1,17) == "Intro Description" {
				file read `hitch' line
				if substr(`"`macval(line)'"',1,3) == "===" {
					file read `hitch' line
				}
				
				while missing(`"`macval(line)'"') {
					file read `hitch' line
				}
				
				while substr(`trim'(`"`macval(line)'"'),1,6) 					///
				!= "Author" & r(eof) == 0 {
					local line2 = `trim'(`"`macval(line)'"')
					local description "`description' `line2'"
					file read `hitch' line
				}
				
				// Edit the package description
				// -------------------------------------------------------------
				tokenize `"`macval(description)'"', parse("--")
				local description : subinstr local description "`1'" "{bf:`1'}"
				local description : subinstr local description "--" "{hline 2}"
				
				
				markdown `description'
				local description `r(md)'
				
				/*
				// Markdown styling syntax
				forvalues i = 1/27 {
					local preline : subinstr local preline "___" "{ul:"
					local preline : subinstr local preline "___" "}"
				}
				forvalues i = 1/27 {
					local preline : subinstr local preline "__" "{bf:"
					local preline : subinstr local preline "__" "}"
				}							
				forvalues i = 1/27 {
					local preline : subinstr local preline "_" "{it:"
					local preline : subinstr local preline "_" "}"
				}
				*/
			}
			
			//Authors
			if substr(`trim'(`"`macval(line)'"'),1,6) == "Author" {
				file read `hitch' line
				if substr(`"`macval(line)'"',1,3) == "===" {
					file read `hitch' line
				}
				while missing(`trim'(`"`macval(line)'"')) {
					file read `hitch' line
				}
				
				//make sure it's not empty
				if substr(`trim'(`"`macval(line)'"'),1,6) != "Syntax" {
					
					while substr(`trim'(`"`macval(line)'"'),1,6) 			///
					!= "Syntax" {

						if !missing("`author0'") & missing(`"`macval(line)'"') {
							
							while missing(`trim'(`"`macval(line)'"')) {
								file read `hitch' line
							}
							
							if substr(`trim'(`"`macval(line)'"'),1,6) 		///
							!= "Syntax" {
								local author`i' = `trim'("{p 4 4 2}")
								local i `++i'
							}	
						}
						
						if substr(`trim'(`"`macval(line)'"'),1,6) 			///
						!= "Syntax" {
							
							markdown `line'
							local line `r(md)'
							
							

							local author`i' = `trim'(`"`macval(line)'"')
							file read `hitch' line	
							local i `++i'
						}	
					}
				}
			}
			
			
			//Syntax
			if substr(`trim'(`"`macval(line)'"'),1,6) == "Syntax" {
				file read `hitch' line
				if substr(`"`macval(line)'"',1,3) == "===" {
					file read `hitch' line
				}
				while missing(`"`macval(line)'"') {
					file read `hitch' line
				}
				
				//make sure it's not empty
				if substr(`trim'(`"`macval(line)'"'),55,21) != 					///
				"DO NOT EDIT THIS LINE" {
					
					while substr(`trim'(`"`macval(line)'"'),55,21) 				///
					!= "DO NOT EDIT THIS LINE" {
						
						local syntax`i2' = `trim'(`"`macval(line)'"')
						file read `hitch' line
						local i2 `++i2'
						
						local exitloop 1
					}
				}
			}
			
		file read `hitch' line
		}
	}
	
	// If the template is in use
	if "`template'" != "empty" {
		if !missing("`date'") {
			local releasDate: di c(current_date)
			file write `knot' "{right:`version', `releasDate'}" _n
		}
		else file write `knot' "{right:`version'}" _n
		
		if !missing(`"`macval(description)'"') {
			file write `knot' "{title:Title}" _n(2) "{phang}" _n				///
			`"`macval(description)'"'
		}
		
		if !missing("`author0'") {
			file write `knot' _n(3) "{title:Author}" _n "`author'" _n 			///
			"{p 4 4 2}" _n 
			
			local i `--i'
			forval j = 0/`i' {
				if `"`macval(author`j')'"' == "{p 4 4 2}"  file write `knot' _n ///
				"{p 4 4 2}" _n
				
				else file write `knot' `"`macval(author`j')'{break}"'  _n
			}
		}
		
		if !missing("`syntax0'") {
			file write `knot' _n(2) "{title:Syntax}" _n(2) 						///
			"{p 8 16 2}" _n 
			
			forval j = 0/`i2' {
				if "`syntax`j''" == "{p 8 16 2}"  file write `knot' _n
				file write `knot' `"`macval(syntax`j')'"'  _n
			}
		}
	}	
	
	// If the template is NOT in use
	if "`template'" == "empty" {
		if !missing("`date'") {
			local releasDate: di c(current_date)
			file write `knot' "{right:`releasDate'}" _n
		}
		if !missing("`title'") | !missing("`summary'") {
			
			if missing("`title'") local title commandname
			if missing("`summary'") local summary describe the comand...
			
			file write `knot' "{title:Title}" _n(2) "{phang}" _n				///
			`"`title' {hline 2} `summary'"' _n(2)
		}
		
		if !missing("`author'") | !missing("`affiliation'") | 					///
		!missing("`address'") {
			
			file write `knot' _n "{title:Author}" _n(2) "{p 4 4 2}" _n			
			
			if !missing("`author'") file write `knot' `"`author'{break}"' _n
			if !missing("`affiliation'") file write `knot' 						///
			`"`affiliation'{break}"' _n
			if !missing("`address'") file write `knot' `"`address'{break}"' _n
		}
	}
	
	
	
	
	
	// -------------------------------------------------------------------------
	// Part 3: Prepare ASCII to SMCL table conversion
	// =========================================================================
	
	while r(eof) == 0 {	
		
		if substr(`trim'(`"`macval(line)'"'),1,4) == "/***" &				///
		substr(`trim'(`"`macval(line)'"'),1,26) != 							///
		"/*** DO NOT EDIT THIS LINE" | 											///
		substr(`trim'(`"`macval(line)'"'),1,5) == "/***$" {
			
			file read `hitch' line
			
			//remove white space in old-fashion way!
			cap local m : display "`line'"
			if _rc == 0 & missing(trim("`m'")) {
				local line ""
				*di as err ">`line'<"
			}
			
			while r(eof) == 0 & substr(`trim'(`"`macval(line)'"'),1,4) 		///
			!= "***/" {
				
				//IF MISSING line, forward to the next non-missing line
				while missing(`"`macval(line)'"') & r(eof) == 0 {
					file write `knot' `"`macval(line)'"' _n
					file read `hitch' line
					
					//remove white space in old-fashion way!
					cap local m : display "`line'"
					if _rc == 0 & missing(trim("`m'")) {
						local line ""
						*di as err ">`line'<"
					}
				}
				
				////////////////////////////////////////////////////////////////
				// -------------------------------------------------------------
				
				
				//Interpret 3 lines at the time, for Markdown headings
				*local prepreline `"`macval(preline)'"'
				local preline `"`macval(line)'"'
				file read `hitch' line
				//local currentline `"`macval(line)'"'
				//file read `hitch' line
				//local postline `"`macval(line)'"'
				//local line `"`macval(currentline)'"' //stay on the current line
				
				
				if _rc == 0 & missing(trim("`m'")) {
					local line ""
					*di as err ">`line'<"
				}
					
				//remove white space in old-fashion way!
				cap local m : display "`line'"
				if _rc == 0 & missing(trim("`m'")) {
					local line ""
				}
		
				// -------------------------------------------------------------
				// IF MARKDOWN HEADING IS FOUND 
				// -------------------------------------------------------------
				if substr(`trim'(`"`macval(line)'"'),1,3) == "===" {
					file write `knot' _n `"{title:`macval(preline)'}"' _n 
				}
				
				// -------------------------------------------------------------
				// IF HEADING NOT FOUND
				// -------------------------------------------------------------
				else {
					
					// check for Markdown paragraph syntax 
					// ---------------------------------------------------------
					if substr(`trim'(`"`macval(preline)'"'),1,4) != "***/" &	///
					substr(`trim'(`"`macval(preline)'"'),1,3) != "===" {
						
						//Check for Paragraph code
						if substr(`trim'(`"`macval(preline)'"'),1,1) == ":" 	///
						| substr(`trim'(`"`macval(preline)'"'),1,1) == ">" {
							
							if substr(`trim'(`"`macval(preline)'"'),1,1) 	///
							== ">" {
								file write `knot' "{p 4 4 2}" _n
								local preline : subinstr local preline ">" "" 
							}
							else if substr(`trim'(`"`macval(preline)'"'),1,1) ///
							== ":" {
								file write `knot' "{p}" _n
								local preline : subinstr local preline ":" "" 
							}
							
							

							if !missing(`"`macval(line)'"') {
								local preline = `"`macval(preline)' "' + 		///
								`"`macval(line)'"'
						
								while !missing(`"`macval(line)'"') &			///
								substr(`trim'(`"`macval(line)'"'),1,4) 		///
								!= "***/" {
									file read `hitch' line
									
									//remove white space in old-fashion way!
									cap local m : display "`line'"
									if _rc == 0 & missing(trim("`m'")) {
										local line ""
									}
									
									local preline = `"`macval(preline)' "' + 	///
									`"`macval(line)'"'
								}
							}
							
							// Run Markdown
							// ---------------------------------------------
							*di as err `"p2:`preline'"'
							markdown `preline'
							if _rc == 0 local preline `r(md)'
							else {
								di as err "markdown.ado engine failed on "	///
								"the following line:" _n(2)
								di as txt `"`macval(preline)'"'
							}
							
							/*
							// Markdown styling syntax
							forvalues i = 1/27 {
								local preline : subinstr local preline "___" "{ul:"
								local preline : subinstr local preline "___" "}"
							}
							forvalues i = 1/27 {
								local preline : subinstr local preline "__" "{bf:"
								local preline : subinstr local preline "__" "}"
							}							
							forvalues i = 1/27 {
								local preline : subinstr local preline "_" "{it:"
								local preline : subinstr local preline "_" "}"
							}
							
							*/
							
						}
						
						*di as err "p3{bf:`preline'}"
						*di as err "p4{bf:`line'}"
						
						// this part is independent of the Marjdown engine
						// Create Markdown Horizontal line
						// =====================================================
						
						// CREATING THE ASCIITABLE, start with line
						
						//di as err "pre:`preline'"
						//di  `"cur:`line'"'
						//di  `"cur:`postline'"'
						
						*di as err "p :: `preline'"
						*di as err "  :: `line'"
						
						*di as err  "ppp:: `preprepreline'"
						*di as err "pp :: `prepreline'"
						*di as err "p  :: `preline'"
						*di as err "   :: `line'"
						local n = `c(linesize)' + 80
						
						while `n' > 0 & !missing("`asciitable'") {
							
							// Handling + in the line
							// =================================================
							if substr(`"`preline'"',`n',3) == "-+-" {
								// full + connected from above and below
								if substr(`"`line'"',`n'+1,1) == "|" &			///
								substr(`"`prepreline'"',`n'+1,1) == "|" {
									local preline1 = substr(`"`macval(preline)'"',1,`n'-1)
									local preline2 = substr(`"`macval(preline)'"',`n', .)
									//local preline2 : subinstr local preline2 "-+-" "-{c +}-"
									local preline2 : subinstr local preline2 "-+-" "-|-"
									local preline : di `"`macval(preline1)'"' `"`macval(preline2)'"'
								}
								* -|- -+- 
								
								// + connected above
								if substr(`"`prepreline'"',`n'+1,1) == "|" &			///
								substr(`"`line'"',`n'+1,1) != "|" {
									local preline1 = substr(`"`macval(preline)'"',1,`n'-1)
									local preline2 = substr(`"`macval(preline)'"',`n', .)
									//local preline2 : subinstr local preline2 "-+-" "-{c BT}-"
									local preline2 : subinstr local preline2 "-+-" "-B-"
									local preline : di `"`macval(preline1)'"' `"`macval(preline2)'"'
								}
								* -B- -{c BT}- 
								
								
								// + connected below
								if substr(`"`line'"',`n'+1,1) == "|" &			///
								substr(`"`prepreline'"',`n'+1,1) != "|" {
									local preline1 = substr(`"`macval(preline)'"',1,`n'-1)
									local preline2 = substr(`"`macval(preline)'"',`n', .)
									//local preline2 : subinstr local preline2 "-+-" "-{c TT}-"
									local preline2 : subinstr local preline2 "-+-" "-T-"
									local preline : di `"`macval(preline1)'"' `"`macval(preline2)'"'
								}
								* -T- -{c TT}- 
							}
							
							
							
							// Handling + in the corners
							// =================================================
							if substr(`"`preline'"',`n',2) == "-+"  &			///
							substr(`"`preline'"',`n',3) != "-+-"{
							
								
								if substr(`"`line'"',`n'+1,1) == "|" &			///
								substr(`"`prepreline'"',`n'+1,1) == "|" {
								
									local preline1 = substr(`"`macval(preline)'"',1,`n'-1)
									
									local preline2 = substr(`"`macval(preline)'"',`n', .)
									//local preline2 : subinstr local preline2 "-+" "-{c RT}"
									local preline2 : subinstr local preline2 "-+" "-!"
									local preline : di `"`macval(preline1)'"' `"`macval(preline2)'"'
								}
								* -! -{c RT} 
								
								
								// + connected above
								if substr(`"`prepreline'"',`n'+1,1) == "|" &			///
								substr(`"`line'"',`n'+1,1) != "|" {
									local preline1 = substr(`"`macval(preline)'"',1,`n'-1)
									local preline2 = substr(`"`macval(preline)'"',`n', .)
									//local preline2 : subinstr local preline2 "-+" "-{c BRC}"
									local preline2 : subinstr local preline2 "-+" "-;"
									local preline : di `"`macval(preline1)'"' `"`macval(preline2)'"'
								}
								* -2 -{c BRC} 
								
								
								// + connected below
								if substr(`"`line'"',`n'+1,1) == "|" &			///
								substr(`"`prepreline'"',`n'+1,1) != "|" {
									local preline1 = substr(`"`macval(preline)'"',1,`n'-1)
									local preline2 = substr(`"`macval(preline)'"',`n', .)
									//local preline2 : subinstr local preline2 "-+" "-{c TRC}"
									local preline2 : subinstr local preline2 "-+" "-]"
									local preline : di `"`macval(preline1)'"' `"`macval(preline2)'"'
									* -3 -{c TRC} 
								}
								
								
							}
							
							if substr(`"`preline'"',`n',2) == "+-" &			///
							substr(`"`preline'"',`n'-1,3) != "-+-"{
								
								// BOTH CONNECTIONS
								
								if substr(`"`line'"',`n',1) == "|" &			///
								substr(`"`prepreline'"',`n',1) == "|" {
								
									local preline1 = substr(`"`macval(preline)'"',1,`n'-1)
									local preline2 = substr(`"`macval(preline)'"',`n', .)
									//local preline2 : subinstr local preline2 "+" "{c LT}"
									local preline2 : subinstr local preline2 "+" "!"
									
									local preline : di `"`macval(preline1)'"' `"`macval(preline2)'"'
									* ! {c LT}
								}
								
								
								
								// + connected above
								if substr(`"`prepreline'"',`n',1) == "|" &			///
								substr(`"`line'"',`n',1) != "|" {
								
									local preline1 = substr(`"`macval(preline)'"',1,`n'-1)
									local preline2 = substr(`"`macval(preline)'"',`n', .)
									//local preline2 : subinstr local preline2 "+-" "{c BLC}-"
									local preline2 : subinstr local preline2 "+-" ":-"
									local preline : di `"`macval(preline1)'"' `"`macval(preline2)'"'
								}
								
								// + connected below
								if substr(`"`line'"',`n',1) == "|" &			///
								substr(`"`prepreline'"',`n',1) != "|" {
									local preline1 = substr(`"`macval(preline)'"',1,`n'-1)
									local preline2 = substr(`"`macval(preline)'"',`n', .)
									//local preline2 : subinstr local preline2 "+-" "{c TLC}-"
									local preline2 : subinstr local preline2 "+-" "[-"
									local preline : di `"`macval(preline1)'"' `"`macval(preline2)'"'
								}							
							}
							
							// Handling + in the corners
							// =================================================
							if substr(`"`line'"',`n'-1,3) == " | " &			///
							substr(`"`preline'"',`n'-1,3) == "---" {
								local preline1 = substr(`"`macval(preline)'"',1,`n'-1)
								local preline2 = substr(`"`macval(preline)'"',`n', .)
								local preline2 : subinstr local preline2 "-" "T"
								local preline : di `"`macval(preline1)'"' `"`macval(preline2)'"'
							}
							
							if substr(`"`preline'"',`n'-1,3) == " | " &			///
							substr(`"`line'"',`n'-1,3) == "---" {
								local line1 = substr(`"`macval(line)'"',1,`n'-1)
								local line2 = substr(`"`macval(line)'"',`n', .)
								local line2 : subinstr local line2 "-" "B"
								local line : di `"`macval(line1)'"' `"`macval(line2)'"'
							}
							
							
				
							
							local n `--n'
						}
						
						
						file write `knot' `"`macval(preline)'"' _n
					}
					
				
					if substr(`trim'(`"`macval(line)'"'),1,4) != "***/"  {
						
						local preprepreline `"`macval(prepreline)'"'
						local prepreline `"`macval(preline)'"'
						local preline `"`macval(line)'"'
						
						
						
*						file write `knot' `"`macval(line)'"' _n
						*file read `hitch' line
						
						//remove white space in old-fashion way!
						cap local m : display "`line'"
						if _rc == 0 & missing(trim("`m'")) {
							local line ""
						}
						
					}	
				}
			
			*local preprepreline `"`macval(prepreline)'"'
			*local prepreline `"`macval(preline)'"'
			
			}
		}
		
		// code line 
		
		file read `hitch' line
		
	}
	file close `knot'
	
	
	tempfile tmp1
	quietly copy "`tmp'" "`tmp1'", replace
	quietly copy "`tmp'" me.txt, replace
	
	
	
	// -----------------------------------------------------------------
	// Create the ASCII tables
	// ================================================================= 
	tempname hitch knot 
	qui file open `hitch' using `"`tmp1'"', read
	qui file open `knot' using `"`tmp'"', write replace
	file read `hitch' line
	while r(eof) == 0 {	
		
		if !missing("`asciitable'") {
			local line : subinstr local line "-|-" "-{c +}-"
			local line : subinstr local line "-B-" "-{c BT}-"
			local line : subinstr local line "-T-" "-{c TT}-", all
			local line : subinstr local line  "!-" "{c LT}-", all
			local line : subinstr local line "-!" "-{c RT}", all 
			local line : subinstr local line ":-" "{c BLC}-", all
			local line : subinstr local line "-;" "-{c BRC}", all
			local line : subinstr local line "[-" "{c TLC}-", all
			local line : subinstr local line  "-]" "-{c TRC}", all
			
			local line : subinstr local line "-| " "-{c RT} ", all
			local line : subinstr local line " |-" " {c LT}-", all
			local line : subinstr local line "|" "{c |}", all
		}
		
		foreach l in line {
							
			// Create SMCL Tab
			// -----------------------------------------------------
			if `trim'(`"`macval(`l')'"') != "- - -" &			///
				substr(`trim'(`"`macval(`l')'"'),1,5) == "- - -" {
				local `l' : subinstr local `l' "- - -" "{dlgtab:" 
				local `l' = `"`macval(`l')'"' + "}"
			}
							
			// Create Markdown Horizontal line
			// -----------------------------------------------------
			if substr(`trim'(`"`macval(`l')'"'),1,5) == "- - -" ///
			& `trim'(`"`macval(`l')'"') == "- - -" {
				local `l' : subinstr local `l' "- - -" "    {hline}" 
			}
						
							
			// Secondary syntax for headers
			// -----------------------------------------------------
			cap if substr(`trim'(`"`macval(`l')'"'),1,2) == "# " {
				local `l' : subinstr local `l' "# " "", all
				local `l'  "{title:`l'}"
			}
			else if substr(`trim'(`"`macval(`l')'"'),1,3) == "## " {
				local `l' : subinstr local `l' "## " "", all
				local `l'  "{title:`l'}"
			}
							
							
							// Markdown styling syntax
								forvalues i = 1/27 {
									local `l' : subinstr local `l' "___" "{ul:"
									local `l' : subinstr local `l' "___" "}"
								}
								forvalues i = 1/27 {
									local `l' : subinstr local `l' "__" "{bf:"
									local `l' : subinstr local `l' "__" "}"
								}							
								forvalues i = 1/27 {
									local `l' : subinstr local `l' "_" "{it:"
									local `l' : subinstr local `l' "_" "}"
								}
							
							//local `l' : subinstr local `l' "|" "{c |}", all
							//local `l' : subinstr local `l' "-+-" "-{c +}-", all
							//local `l' : subinstr local `l' "+-" "{c TLC}-", all 
							//local `l' : subinstr local `l' "-+" "-{c TRC}", all 
							*local `l' : subinstr local `l' "-" "{c -}", all
							
							
							//Make it nicer
							local i 90
							while `i' > 1 {
								local j : display _dup(`i') "-"
								local `l' : subinstr local `l' "`j'" "{hline `i'}", all
								local i `--i'
							}
							
					}		
							
		file write `knot' `"`macval(line)'"' _n
		file read `hitch' line
	}
	file close `knot'
	quietly copy "`tmp'" "`tmp1'", replace
	quietly copy "`tmp'" me2.txt, replace
	
	
	
	
	
	
	
	
	
	quietly copy "`tmp'" "`convert'", `replace'	
	//quietly copy "`tmp'" "$localfile", `replace'	
	capture macro drop localfile
	
	// -----------------------------------------------------------------
	// Print the output 
	// ================================================================= 
	confirm file "`convert'"
	if _rc == 0 {
		di as txt "{p}(MarkDoc created "`"{bf:{browse "`convert'"}})"' _n
	}
	else display as err "MarkDoc could not produce `convert'" _n
		
end


//markdoc figure.ado, replace export(sthlp) template(empty) asciitable