*! version 1.2.8 11nov2019 Ben Jann
program webdoc
version 10.1
gettoken subcmd 0 : 0, parse(",: ")
local length = length(`"`subcmd'"')
if `"`subcmd'"'==substr("write", 1, max(`length', 1)) {
if `"${WebDoc_docname}"'=="" {
di as txt "(webdoc not initialized; nothing to do)"
exit
}
_webdoc_write write`macval(0)'
exit
}
if `"`subcmd'"'=="put" {
if `"${WebDoc_docname}"'=="" {
di as txt "(webdoc not initialized; nothing to do)"
exit
}
_webdoc_put put`macval(0)'
exit
}
if `"`subcmd'"'==substr("append", 1, max(`length', 1)) {
webdoc_append`macval(0)'
exit
}
if `"`subcmd'"'=="append_snippet" {
webdoc_append_snippet`macval(0)'
exit
}
if `"`subcmd'"'==substr("local", 1, max(`length', 3)) {
if `"${WebDoc_docname}"'=="" { // webdoc not initialized
c_local`macval(0)'
exit
}
if `"${WebDoc_stfilename0}"'=="" {
di as txt "(no stlog name available; skipping backup)"
c_local`macval(0)'
exit
}
gettoken mname 0 : 0, parse(" =:")
if `"${WebDoc_stnodo}"'=="" {
local meval`macval(0)'
webdoc_local_put `mname' `"`macval(meval)'"'
}
else {
capt webdoc_local_get `mname'
if _rc di as txt "(backup of `mname' not found)"
}
c_local `mname' `"`macval(meval)'"'
exit
}
if `"`subcmd'"'=="set" {
if `"${WebDoc_dofile}"'=="" {
di as txt "(webdoc do not running; nothing to do)"
exit
}
webdoc_set`macval(0)'
exit
}
if `"`subcmd'"'=="toc" {
webdoc_toc`macval(0)'
exit
}
if `"`subcmd'"'==substr("substitute", 1, max(`length', 3)) {
webdoc_substitute`macval(0)'
exit
}
if `"`subcmd'"'==substr("init", 1, max(`length', 1)) {
webdoc_init`macval(0)'
exit
}
if `"`subcmd'"'==substr("close", 1, max(`length', 1)) {
if `"${WebDoc_ststatus}"'!="" {
di as err "webdoc close not allowed within stlog section"
di as err "type {stata webdoc stlog close} to close the stlog section"
exit 499
}
webdoc_close`macval(0)'
exit
}
if `"`subcmd'"'==substr("stlog", 1, max(`length', 1)) {
local caller : di _caller()
version `caller': webdoc_stlog`macval(0)'
exit
}
if `"`subcmd'"'==substr("graph", 1, max(`length', 2)) {
webdoc_graph`macval(0)'
exit
}
if `"`subcmd'"'=="strip" {
webdoc_strip`macval(0)'
exit
}
if `"`subcmd'"'=="do" {
if `"${WebDoc_ststatus}"'!="" {
di as err "webdoc do not allowed within stlog section"
di as err "type {stata webdoc stlog close} to close the stlog section"
exit 499
}
local caller : di _caller()
local do_globals snippets replace append md logdir logdir2 noprefix ///
prefix prefix2 stpath stpath2 logall nodo nolog cmdlog dosave ///
nokeep custom plain raw cmdstrip lbstrip gtstrip matastrip ///
nooutput noltrim gropts grdir mark tag certify linesize ///
dodir header header2
local set_globals stlog _stlog stcmd _stcmd sthlp _sthlp ///
stinp _stinp stres _stres stcmt _stcmt stoom stcnp ///
figure _figure fcap flink _flink img _img svg _svg
local init_globals nodo nolog cmdlog dosave nokeep custom plain raw ///
cmdstrip lbstrip gtstrip matastrip nooutput noltrim gropts grdir ///
mark tag certify linesize dodir stpath prefix prefix0 logdir path0 ///
path logall footer md basename docname0 docname docname_FH substitute
local st_globals nodo nolog cmdlog dosave nokeep custom plain raw ///
cmdstrip lbstrip gtstrip matastrip nooutput noltrim indent ///
grcounter filename filename0 webname webname0 id name0 name mark ///
tag certify linesize linesize0 status loc
local nested = `"${WebDoc_dofile}"'!=""
if `nested' { // backup current settings
local do_dofile `"${WebDoc_dofile}"'
foreach g of local do_globals {
mata: st_local("do_`g'", st_global("WebDoc_do_`g'"))
}
foreach g of local set_globals {
mata: st_local("set_`g'", st_global("WebDoc_set_`g'"))
}
local init_stcounter `"${WebDoc_stcounter}"'
foreach g of local init_globals {
mata: st_local("init_`g'", st_global("WebDoc_`g'"))
}
foreach g of local st_globals {
mata: st_local("st_`g'", st_global("WebDoc_st`g'"))
}
}
_webdoc_do_parse`macval(0)' // returns cd
if "`cd'"!="" {
local pwd `"`c(pwd)'"'
}
nobreak {
capt n break {
version `caller': webdoc_do`macval(0)'
}
if _rc {
local rc = _rc
_webdoc_cleanup
_webdoc_cleanup_do
if "`cd'"!="" {
qui cd `pwd'
di as txt `"(cd `pwd')"'
}
exit `rc'
}
if `nested' {
mata: rmexternal("WebDoc_do_snippets")
if `"${WebDoc_docname}"'=="" {
// docname closed (or not yet initialized): skip webdoc
// close and restore previous settings
global WebDoc_stcounter `"`init_stcounter'"'
foreach g of local st_globals {
global WebDoc_st`g' `"`macval(st_`g')'"'
}
}
else if `"`init_docname'"'==`"${WebDoc_docname}"' {
// still same docname: skip webdoc close, keep stcounter
// and settings from last stlog, but restore stloc
global WebDoc_stloc `"`macval(st_loc)'"'
}
else if `"${WebDoc_docname}"'!="" {
// docname has been (re)initialized: apply webdoc close
// and restore previous settings
webdoc_close
global WebDoc_stcounter `"`init_stcounter'"'
foreach g of local st_globals {
global WebDoc_st`g' `"`macval(st_`g')'"'
}
}
// reset init globals
foreach g of local init_globals {
global WebDoc_`g' `"`macval(init_`g')'"'
}
// reset set globals
foreach g of local set_globals {
global WebDoc_set_`g' `"`macval(set_`g')'"'
}
// reset webdoc do globals
global WebDoc_dofile `"`do_dofile'"'
foreach g of local do_globals {
global WebDoc_do_`g' `"`macval(do_`g')'"'
}
}
else {
if `"${WebDoc_docname}"'!="" {
webdoc_close
}
_webdoc_cleanup_do
}
if "`cd'"!="" {
qui cd `pwd'
di as txt `"(cd `pwd')"'
}
}
exit
}
di as err `"`subcmd' invalid subcommand"'
exit 198
end
program _webdoc_do_parse
_parse comma fn 0 : 0
syntax [, cd * ]
c_local cd `cd'
end
program _webdoc_cleanup
// clear webdoc stlog globals
_webdoc_cleanup_stlog
// close file handle
capture mata: webdoc_closeout_fh(${WebDoc_docname_FH})
// clear webdoc init globals
foreach g in nodo nolog cmdlog dosave nokeep custom plain raw cmdstrip ///
lbstrip gtstrip matastrip nooutput noltrim gropts grdir mark tag ///
certify linesize dodir stcounter stpath prefix prefix0 logdir path0 ///
path logall footer md basename docname0 docname docname_FH substitute {
global WebDoc_`g' ""
}
end
program _webdoc_cleanup_stlog
// clear webdoc stlog globals
foreach g in nodo nolog cmdlog dosave nokeep custom plain raw ///
cmdstrip lbstrip gtstrip matastrip nooutput noltrim indent ///
grcounter filename filename0 webname webname0 id name0 name mark ///
tag certify linesize linesize0 status loc {
global WebDoc_st`g' ""
}
end
program _webdoc_cleanup_do
// close log if still open
capt log close WebDoc_stlog
// clear webdoc set globals
foreach s in stlog _stlog stcmd _stcmd sthlp _sthlp stinp _stinp ///
stres _stres stcmt _stcmt stoom stcnp figure _figure fcap ///
flink _flink img _img svg _svg {
global WebDoc_set_`s' ""
}
// clear webdoc do globals
foreach g in snippets replace append md logdir logdir2 noprefix prefix ///
prefix2 stpath stpath2 logall nodo nolog cmdlog dosave nokeep custom ///
plain raw cmdstrip lbstrip gtstrip matastrip nooutput noltrim ///
gropts grdir mark tag certify linesize dodir header header2 {
global WebDoc_do_`g' ""
}
global WebDoc_dofile ""
mata: rmexternal("WebDoc_do_snippets")
end
program _webdoc_makelink
args fn
if c(os)=="Unix" {
c_local openlink `"stata `"!xdg-open "`fn'" >& /dev/null &"'"'
}
// else if c(os)=="MacOSX" {
// c_local openlink `"stata `"!open "`fn'""'"'
// }
// else if c(os)=="Windows" {
// c_local openlink `"stata `"!start "`fn'""'"'
// }
else {
c_local openlink `"browse `"`fn'"'"'
}
end
program _webdoc_write
mata: fwrite(${WebDoc_docname_FH}, substr(st_local("0"), 7, .))
end
program _webdoc_put
mata: fput(${WebDoc_docname_FH}, substr(st_local("0"), 5, .))
end
program webdoc_append
if `"${WebDoc_docname}"'=="" {
di as txt "(webdoc not initialized; nothing to do)"
exit
}
local 0 `"using `macval(0)'"'
syntax using/ [, SUBstitute(str asis) drop(numlist >0 integer) ]
nobreak {
capt n break {
mata: webdoc_instance_fh("fh")
mata: webdoc_append(${WebDoc_docname_FH}, `fh'=.)
}
local rc = _rc
capture mata: webdoc_closeout_fh(`fh')
capture mata: mata drop `fh'
if `rc' exit `rc'
}
di as txt `"(`using' appended)"'
end
program webdoc_append_snippet
if `"${WebDoc_docname}"'=="" | `"${WebDoc_dofile}"'=="" {
exit
}
nobreak {
capt n break {
mata: webdoc_instance_fh("fh")
mata: webdoc_append_snippet(${WebDoc_docname_FH}, `fh'=.)
}
local rc = _rc
capture mata: webdoc_closeout_fh(`fh')
capture mata: mata drop `fh'
if `rc' exit `rc'
}
end
program webdoc_local_put
args mname meval
nobreak {
capt n break {
mata: webdoc_instance_fh("fh")
mata: webdoc_local_put(`fh'=.)
}
local rc = _rc
capture mata: webdoc_closeout_fh(`fh')
capture mata: mata drop `fh'
if `rc' exit `rc'
}
end
program webdoc_local_get
args mname
nobreak {
capt n break {
mata: webdoc_instance_fh("fh")
mata: webdoc_local_get(`fh'=.)
}
local rc = _rc
capture mata: webdoc_closeout_fh(`fh')
capture mata: mata drop `fh'
if `rc' exit `rc'
}
c_local meval `"`macval(meval)'"'
end
program webdoc_set
if `"`0'"'=="" { // set defaults
global WebDoc_set_stlog
global WebDoc_set__stlog
global WebDoc_set_stcmd
global WebDoc_set__stcmd
global WebDoc_set_sthlp
global WebDoc_set__sthlp
global WebDoc_set_stinp
global WebDoc_set__stinp
global WebDoc_set_stres
global WebDoc_set__stres
global WebDoc_set_stcmt
global WebDoc_set__stcmt
global WebDoc_set_stoom (output omitted)
global WebDoc_set_stcnp /*
*/ (continued on next page)
global WebDoc_set_figure
global WebDoc_set_fcap \`macval(caption)'
global WebDoc_set_flink
global WebDoc_set__flink
global WebDoc_set_img `""'
global WebDoc_set_svg
global WebDoc_set__svg
exit
}
gettoken set def : 0
local rc 1
foreach s in stlog _stlog stcmd _stcmd sthlp _sthlp stinp _stinp ///
stres _stres stcmt _stcmt stoom stcnp figure _figure fcap ///
flink _flink img _img svg _svg {
if `"`set'"'=="`s'" {
local rc 0
continue, break
}
}
if `rc' {
di as err `"`set' not allowed"'
exit 198
}
global WebDoc_set_`set' `macval(def)'
end
program webdoc_toc
if `"${WebDoc_docname}"'=="" {
di as txt "(webdoc not initialized; nothing to do)"
exit
}
syntax [anything] [, Numbered md ]
gettoken level anything : anything
gettoken offset anything : anything
if `"`anything'"'!="" error 198
if `"`offset'"'!="" {
capt confirm integer number `offset'
if _rc error 198
if (`offset'<0 | `offset'>5) {
di as err "offset must be in [0,5]"
exit 198
}
}
else local offset 0
if `"`level'"'!="" {
capt confirm integer number `level'
if _rc error 198
if (`level'<1 | `level'>(6-`offset')) {
di as err "level must be in [1,6-offset]"
exit 198
}
}
webdoc_append_snippet 2
end
program webdoc_substitute
syntax [anything(equalok everything)] [, Add ]
if `"${WebDoc_docname}"'=="" exit
mata: webdoc_substitute()
end
program webdoc_init
if `"${WebDoc_dofile}"'=="" {
di as txt "(webdoc do not running; nothing to do)"
exit
}
if `"${WebDoc_ststatus}"'!="" {
di as err "webdoc init not allowed within stlog section"
di as err "type {stata webdoc stlog close} to close the stlog section"
exit 499
}
syntax [anything(id="document name")] [, MD ///
Replace Append NOLOGDIR logdir LOGDIR2(str) NOLOGALL LOGALL ///
NOPrefix Prefix Prefix2(str) NOSTPATH stpath STPATH2(str) ///
NODO DO NOLOG LOG NOCMDLog CMDLog NODOSave DOSave NOKeep Keep ///
NOCustom Custom NOPLAIN PLAIN NORAW RAW NOCMDStrip CMDStrip NOLBStrip ///
LBStrip NOGTStrip GTStrip NOMatastrip Matastrip NOOutput Output ///
NOLTRIM LTRIM GRopts(str asis) grdir(str) mark(str asis) tag(str asis) ///
NOCERTify CERTify LInesize(numlist int max=1 >=40 <=255) ///
dodir(str) HEADer HEADer2(str) ]
if "`replace'"!="" & "`append'"!="" {
di as err "replace and append not both allowed"
exit 198
}
if "`nolog'"!="" & "`cmdlog'"!="" {
di as err "nolog and cmdlog not both allowed"
exit 198
}
if "`nolog'"!="" local nocmdlog nocmdlog
if "`cmdlog'"!="" local log log
foreach opt in logdir prefix stpath {
if "``opt''``opt'2'"!="" & "`no`opt''"!="" {
di as err "`opt'() and no`opt' not both allowed"
exit 198
}
}
foreach opt in logall do log cmdlog dosave keep custom plain raw ///
cmdstrip lbstrip gtstrip matastrip output ltrim certify {
if "``opt''"!="" & "`no`opt''"!="" {
di as err "`opt' and no`opt' not both allowed"
exit 198
}
}
if `"`anything'"'!="" {
gettoken anything rest : anything // get rid of quotes around filename
if `"`rest'"'!="" error 198
if `"`anything'"'=="" error 198
// read global defaults if -webdoc do- is running
local prefix0
if `"${WebDoc_dofile}"'!=""{
if "`md'"=="" {
local md `"${WebDoc_do_md}"'
}
if `"`replace'`append'"'=="" {
local replace `"${WebDoc_do_replace}"'
local append `"${WebDoc_do_append}"'
}
if `"`nologdir'`logdir'`logdir2'"'=="" {
local logdir `"${WebDoc_do_logdir}"'
local logdir2 `"${WebDoc_do_logdir2}"'
}
if `"`noprefix'`prefix'`prefix2'"'=="" {
local noprefix `"${WebDoc_do_noprefix}"'
local prefix `"${WebDoc_do_prefix}"'
local prefix2 `"${WebDoc_do_prefix2}"'
}
if `"`noprefix'`prefix'`prefix2'"'!="" local prefix0 prefix0
if `"`nostpath'`stpath'`stpath2'"'=="" {
local stpath `"${WebDoc_do_stpath}"'
local stpath2 `"${WebDoc_do_stpath2}"'
}
foreach opt in do log keep output ltrim {
if "``opt''`no`opt''"=="" local no`opt' `"${WebDoc_do_no`opt'}"'
}
foreach opt in logall cmdlog dosave custom cmdstrip plain raw ///
lbstrip gtstrip matastrip certify {
if "``opt''`no`opt''"=="" local `opt' `"${WebDoc_do_`opt'}"'
}
if `"`grdir'"'=="" local grdir `"${WebDoc_do_grdir}"'
if `"`dodir'"'=="" local dodir `"${WebDoc_do_dodir}"'
if `"`header'"'=="" local header `"${WebDoc_do_header}"'
foreach opt in gropts mark tag linesize header2 {
if `"`macval(`opt')'"'=="" {
mata: st_local("`opt'", st_global("WebDoc_do_`opt'"))
}
}
}
// initialize globals
_webdoc_cleanup_stlog
mata: webdoc_init()
// initialize webdoc output file
// - prepare file
tempname fh
qui file open `fh' using `"${WebDoc_docname}"', write `replace' `append'
file close `fh'
di as txt `"(webdoc output file is ${WebDoc_docname0})"'
// - provide Mata file handle in global macro
mata: st_global("WebDoc_docname_FH", ///
strofreal(fopen(st_global("WebDoc_docname"), "a")))
}
else if `"${WebDoc_docname}"'!="" {
// update globals
if `"`prefix'`prefix2'`noprefix'"'!="" {
local prefix0 prefix0
global WebDoc_prefix0 "prefix0"
}
else {
local prefix0 `"${WebDoc_prefix0}"'
}
if `"`logdir'`logdir2'`nologdir'"'!="" {
if `"`prefix0'"'=="" {
if `"${WebDoc_logdir}"'=="" {
if `"`logdir2'`logdir'"'!="" local noprefix noprefix
}
else {
if "`nologdir'"!="" local prefix prefix
}
}
if (`"`logdir2'"'!="") global WebDoc_logdir `"`logdir2'"'
else if ("`logdir'"!="") {
mata: st_global("WebDoc_logdir", ///
pathrmsuffix(st_global("WebDoc_basename")))
}
else global WebDoc_logdir ""
if `"${WebDoc_logdir}"'!="" {
mata: webdoc_mkdir(pathjoin(st_global("WebDoc_path"), ///
st_global("WebDoc_logdir")))
}
}
if `"`prefix'`prefix2'`noprefix'"'!="" {
if ("`noprefix'"!="") global WebDoc_prefix ""
else if (`"`prefix2'"'!="") global WebDoc_prefix `"`prefix2'"'
else {
mata: st_global("WebDoc_prefix", ///
pathrmsuffix(st_global("WebDoc_basename")) + "_")
}
}
if "`stpath'`stpath2'`nostpath'"!="" {
if (`"`stpath2'"'!="") global WebDoc_stpath `"`stpath2'"'
else if ("`stpath'"!="") global WebDoc_stpath `"${WebDoc_path0}"'
else global WebDoc_stpath ""
}
foreach opt in do log keep output ltrim {
if "``opt''`no`opt''"!="" global WebDoc_no`opt' `no`opt''
}
foreach opt in logall cmdlog dosave custom plain raw ///
cmdstrip lbstrip gtstrip matastrip certify {
if "``opt''`no`opt''"!="" global WebDoc_`opt' ``opt''
}
if `"`grdir'"'!="" global WebDoc_grdir `"`grdir'"'
if `"${WebDoc_grdir}"'!="" {
mata: webdoc_mkdir(pathjoin(st_global("WebDoc_path"), ///
st_global("WebDoc_grdir")))
}
foreach opt in gropts mark tag linesize {
if `"``opt''"'!="" {
global WebDoc_`opt' `"`macval(`opt')'"'
}
}
if `"`dodir'"'!="" global WebDoc_dodir `"`dodir'"'
if `"${WebDoc_dodir}"'!="" {
mata: webdoc_mkdir(pathjoin(st_global("WebDoc_path"), ///
st_global("WebDoc_dodir")))
}
}
else {
di as txt "(webdoc not initialized; nothing to do)"
exit
}
// write a header if requested
if `"`header'`macval(header2)'"'!="" {
_webdoc_header , `macval(header2)'
}
// clear s-returns (will be filled by webdoc close)
sreturn clear
end
program _webdoc_header
syntax [, Title(str) Author(str) date(str) DEScription(str) Keywords(str) ///
Language(str) CHARset(str) BStheme BStheme2(str) INCLude(str) ///
STscheme(str) Width(str) NOFOOTer ]
if `"`macval(title)'"'=="" local title `"${WebDoc_basename}"'
if `"`macval(language)'"'=="" local language "en"
if `"`macval(charset)'"'=="" {
local charset "utf-8"
if c(stata_version)<14 {
if c(os)=="MacOSX" local charset "mac"
else local charset "iso-8859-1"
}
}
if `"`bstheme'`bstheme2'"'!="" {
_webdoc_header_bstheme `bstheme2'
}
if `"`stscheme'"'!="" {
_webdoc_header_stscheme, `stscheme'
}
if "`nofooter'"=="" {
if "`jscript'"!="" global WebDoc_footer jscript`selfcontained'
else global WebDoc_footer footer
}
nobreak {
capt n break {
mata: webdoc_instance_fh("fh")
mata: webdoc_header(${WebDoc_docname_FH}, `fh'=.)
}
local rc = _rc
capture mata: webdoc_closeout_fh(`fh')
capture mata: mata drop `fh'
if `rc' exit `rc'
}
end
program _webdoc_header_bstheme
syntax [anything] [, Selfcontained JScript ]
if `"`anything'"'=="" local anything default
c_local bstheme `"`anything'"'
c_local selfcontained "`selfcontained'"
c_local jscript "`jscript'"
end
program _webdoc_header_stscheme
syntax [, Standard STUdio Classic Desert Mountain Ocean ///
SImple bg(str) fg(str) rfg(str) cfg(str) rbf cbf LCom ]
local stscheme `standard' `studio' `classic' `desert' `mountain' ///
`ocean' `simple'
if `:list sizeof stscheme'>1 {
di as err "stscheme(): only one of standard, studio, classic, " _c
di as err "desert, mountain, ocean, or simple allowed"
exit 198
}
if "`stscheme'"=="standard" {
if `"`bg'"'=="" local bg "#FFFFFF" // white
if `"`fg'"'=="" local fg "#000000" // black
if `"`rfg'"'=="" local rfg "#000000" // black
if `"`cfg'"'=="" local cfg "#000000" // black
if "`rbf'"=="" local rbf rbf
if "`cbf'"=="" local cbf cbf
}
else if "`stscheme'"=="studio" {
if `"`bg'"'=="" local bg "#FFFFFF" // white
if `"`fg'"'=="" local fg "#000000" // black
if `"`rfg'"'=="" local rfg "#000080" // blue
if `"`cfg'"'=="" local cfg "#000000" // black
if "`rbf'"=="" local rbf
if "`cbf'"=="" local cbf cbf
}
else if "`stscheme'"=="classic" {
if `"`bg'"'=="" local bg "#000000" // black
if `"`fg'"'=="" local fg "#00FF00" // green
if `"`rfg'"'=="" local rfg "#FFFF00" // yellow
if `"`cfg'"'=="" local cfg "#FFFFFF" // white
if "`rbf'"=="" local rbf
if "`cbf'"=="" local cbf
}
else if "`stscheme'"=="desert" {
if `"`bg'"'=="" local bg "#FBF9F7" // almost white
if `"`fg'"'=="" local fg "#000000" // black
if `"`rfg'"'=="" local rfg "#804000" // brown
if `"`cfg'"'=="" local cfg "#000000" // black
if "`rbf'"=="" local rbf
if "`cbf'"=="" local cbf cbf
}
else if "`stscheme'"=="mountain" {
if `"`bg'"'=="" local bg "#FFFFFF" // white
if `"`fg'"'=="" local fg "#000000" // black
if `"`rfg'"'=="" local rfg "#005000" // green
if `"`cfg'"'=="" local cfg "#000000" // black
if "`rbf'"=="" local rbf
if "`cbf'"=="" local cbf cbf
}
else if "`stscheme'"=="ocean" {
if `"`bg'"'=="" local bg "#F0F3F9" // blue
if `"`fg'"'=="" local fg "#000000" // black
if `"`rfg'"'=="" local rfg "#324F58" // blue
if `"`cfg'"'=="" local cfg "#000000" // black
if "`rbf'"=="" local rbf
if "`cbf'"=="" local cbf cbf
}
else if "`stscheme'"=="simple" {
if `"`bg'"'=="" local bg "#FFFFFF" // white
if `"`fg'"'=="" local fg "#464646" // gray
if `"`rfg'"'=="" local rfg "#000000" // black
if `"`cfg'"'=="" local cfg "#000000" // black
if "`rbf'"=="" local rbf
if "`cbf'"=="" local cbf cbf
}
if `"`bg'"'!="" c_local st_bg `"background-color: `bg'; "'
if `"`fg'"'!="" c_local st_fg `"color: `fg'; "'
if `"`rfg'"'!="" c_local st_rfg `"color: `rfg'; "'
if `"`cfg'"'!="" c_local st_cfg `"color: `cfg'; "'
if `"`rbf'"'!="" c_local st_rbf `"font-weight: bold; "'
if `"`cbf'"'!="" c_local st_cbf `"font-weight: bold; "'
c_local st_lcom `lcom'
end
program webdoc_close, sclass
if `"${WebDoc_docname}"'=="" {
di as txt "(webdoc not initialized; nothing to do)"
exit
}
if `"`macval(0)'"'!="" error 198
if `"${WebDoc_footer}"'!="" {
if `"${WebDoc_footer}"'=="jscript" {
_webdoc_put put
_webdoc_put put
}
else if `"${WebDoc_footer}"'=="jscriptselfcontained" {
if c(stata_version)>=13 local protocol "https://"
else local protocol "http://"
_webdoc_put put
_webdoc_put put
}
_webdoc_put put