#delim ; prog def htmlopen; version 14.0; /* Open a file for output using HTML. *|Author: Roger Newson *!Date: 18 December 2018 */ syntax name using/ [ , replace ATtributes(string) HEad HEADAttributes(string) HEADFrom(string) TItle(string) BOdy BODYAttributes(string) BOM(string) ]; /* replace specifies that the output must replace an existing file of the same name. attributes specifies document attributes to be passed to the tag. head specifies that a head will be generated for the output HTML file. headattributes() specifies the attributes for the tag. headfrom() specifies an existing file, from which the HTML head (or part of it) will be input. title() specifies a title for the document. body specifies that a tag will be written to the output file, initiating a HTML body. bodyattributes() specifies attributes for the tag. bom() specifies a type of byte order marker (BOM) to enable non-ASCII output files. */ * Check byte order marker (BOM) *; local bom=lower(`"`bom'"'); if `"`bom'"'=="" {; local bomvalue=""; }; else if `"`bom'"'=="utf-8" {; local bomvalue=ustrunescape("\uFEFF"); }; else {; disp as error `"Invalid bom(`bom')"'; error 498; }; * Set head and body options if the headattributes() or title() options and the bodyattributes() option (respectively) are specified *; if `"`headattributes'"'!="" | `"`title'"'!="" {; local head="head"; }; if `"`bodyattributes'"'!="" {; local body="body"; }; * Open and output HTML tag *; file open `namelist' using `"`using'"' , text write `replace'; file write `namelist' `"`bomvalue'"' _n; if `"`attributes'"'=="" {; file write `namelist' "" _n; }; else {; file write `namelist' `""' _n; }; * Output HTML head *; if "`head'"!="" {; if `"`headattributes'"'!="" {; file write `namelist' `""' _n; }; else {; file write `namelist' "" _n; }; }; if `"`headfrom'"'!="" {; * Input HTML head from file *; cap noi {; conf file `"`headfrom'"'; tempname inbuff scurline; file open `inbuff' using `"`headfrom'"', read text; file read `inbuff' curline; while !r(eof) {; mata: st_strscalar("`scurline'",st_local("curline")); file write `namelist' (`scurline') _n; file read `inbuff' curline; }; file close `inbuff'; }; }; if `"`title'"'!="" {; file write `namelist' `"`title'"' _n; }; if "`head'"!="" {; file write `namelist' "" _n; }; * Initiate HTML body if specified *; if "`body'"!="" {; if `"`bodyattributes'"'!="" {; file write `namelist' `""' _n; }; else {; file write `namelist' "" _n; }; }; end;