#!/usr/bin/ksh93 ################################################################ function usagemsg_txt2html_k93 { print " Program: txt2html_k93 Convert preformatted text into HTML. Similar in function to "Grutatxt" Perl module. Usage: ${1##*/} [-?] [-vV] [file...] Where: Default -a align = Table data cell alignment (left) -A vertAlign = Table data cell vertical alignment (middle) -b color = Table data cell background color (white) -B color = Table header cell background color (lightgrey) -d color = Table data cell font color (black) -D color = Table header cell font color (black) -o list = Ordered list numbering scheme (1aiAI) -C = Center all tables on the page -H = Mark the first row of all tables as a header row -v = Verbose Mode -V = Very Verbose Mode Example: txt2html_k93 file1.txt Author: Dana French (dfrench@mtxia.com) Copyright 2006 by Dana French \"AutoContent\" enabled " return 0 } ################################################################ #### #### Description: #### #### Assumptions: #### #### Dependencies: #### #### Products: #### #### Configured Usage: #### #### Details: #### #### [:space:] = whitespace (space, tab, newline) #### [:blank:] = space or tab #### #### ################################################################ function txt2html_k93 { typeset VERSION="1.0" typeset TRUE="0" typeset FALSE="1" typeset VERBOSE="${FALSE}" typeset VERYVERB="${FALSE}" typeset SPACES=$'\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\ \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20' typeset OLSCHEME="1aiAI" typeset ULFLAG="${FALSE}" typeset PREFLAG="${FALSE}" typeset CITEFLAG="${FALSE}" typeset CODEFLAG="${FALSE}" typeset HTMLFLAG="${FALSE}" typeset CLR_TDBG="white" typeset CLR_THBG="lightgrey" typeset CLR_TDFG="black" typeset CLR_THFG="darkblue" typeset SIZ_TBLBDR="1" typeset TBLHDRROW="${FALSE}" typeset TBLALIGN="left" typeset TBLVALIGN="middle" typeset TBLCENTER="${FALSE}" FPATH="/home/dfrench/src/shunix/shellutils-ksh/shellutils-ksh.latest/functions" while getopts ":vV" OPTION do case "${OPTION}" in 'v') VERBOSE="${TRUE}";; 'V') VERYVERB="${TRUE}";; [?:#]) usagemsg_txt2html_k93 "${0}" && return 1 ;; esac done shift $(( ${OPTIND} - 1 )) typeset OLTYPE="0" typeset ICNT=0 for (( ICNT=0; ICNT<=10; ++ICNT )) do OLTYPE="${OLTYPE}${OLSCHEME}" done ################################################################ typeset STDIN="${1:+${FALSE}}" [[ "_${1}" == '_-' ]] && STDIN="${TRUE}" STDIN="${STDIN:-${TRUE}}" #### Read in the data either from STDIN or one or more files if (( STDIN == TRUE )) then set -- - fi for FNAME in "${@}" do if (( STDIN == FALSE )) && [[ ! -e "${FNAME}" ]] then print -u 2 "${0##*/}: ${FNAME}: No such file or directory" continue fi LCNT="0" cat_k93 -- "${FNAME}" | while IFS="" read -r -- LINE do TXTARRY[LCNT]="${LINE}" #### Paragraph separator if [[ "_${LINE}" == "_" ]] then ULFLAG="${FALSE}" TAGTYPE[LCNT]="P" fi #### Horizontal Rule [[ "_${LINE}" == _\#\#\#\#*(\#) ]] && TAGTYPE[LCNT]="HR" #### Headers if (( LCNT > 0 )) then [[ "_${LINE}" == _*([[:blank:]])+([=]) ]] && TAGTYPE[LCNT-1]="H1" [[ "_${LINE}" == _*([[:blank:]])+([-]) ]] && TAGTYPE[LCNT-1]="H2" [[ "_${LINE}" == _*([[:blank:]])+([\~]) ]] && TAGTYPE[LCNT-1]="H3" [[ "_${LINE}" == _*([[:blank:]])+([=\-\~]) ]] && TAGTYPE[LCNT]="DELETE" fi #### Imbedded HTML if (( HTMLFLAG == TRUE )) then TAGTYPE[LCNT]="HTML" fi if [[ "_${LINE}" == _*@('<<'|'>>')* ]] then if [[ "_${LINE}" == _*'<<'* ]] then HTMLFLAG="${TRUE}" TAGTYPE[LCNT]="HTML" fi if [[ "_${LINE}" == _*'>>'* ]] then HTMLFLAG="${FALSE}" TAGTYPE[LCNT]="HTML" fi fi #### Preformatted Text segments if [[ "_${LINE}" == _+([[:blank:]])* ]] then TAGTYPE[LCNT]="PRE" [[ "${TAGTYPE[LCNT-1]}" == "CITE" ]] && TAGTYPE[LCNT]="CITE" fi #### Cite Text segments if [[ "_${LINE}" == _+([[:blank:]])\"* ]] then TAGTYPE[LCNT]="CITE" fi #### Programming Code segments if [[ "_${LINE}" == _*([[:blank:]])\$* ]] then TAGTYPE[LCNT]="CODE" #### TXTARRY[LCNT]="${LINE##*([[:blank:]])\$*([[:blank:]])}" fi #### Unordered/Ordered Lists if (( ULFLAG == TRUE )) then TAGTYPE[LCNT]="LI" LSTTYPE[LCNT]="${TAGTYPE[LCNT-1]}" ULSPACE[LCNT]="${ULSPACE[LCNT-1]:-0}" ULLEVEL[LCNT]="${ULLEVEL[LCNT-1]:-0}" fi if [[ "_${LINE}" == _*([[:blank:]])[\*\#]* ]] then ULFLAG="${TRUE}" [[ "_${LINE}" == _*([[:blank:]])\*[!\*]* ]] && TAGTYPE[LCNT]="UL" [[ "_${LINE}" == _*([[:blank:]])\#[!\#]* ]] && TAGTYPE[LCNT]="OL" TMPNBR="${LINE%%[!$' \t\n']*}" ULSPACE[LCNT]="${#TMPNBR}" ULDELTA="0" (( ${ULSPACE[LCNT]} > ${ULSPACE[LCNT-1]:-0} )) && ULDELTA="+1" (( ${ULSPACE[LCNT]} < ${ULSPACE[LCNT-1]:-0} )) && ULDELTA="-1" ULLEVEL[LCNT]="$(( ${ULLEVEL[LCNT-1]:-0} + ${ULDELTA} ))" LSTTYPE[LCNT]="${TAGTYPE[LCNT]}" fi #### Definition Lists if [[ "_${LINE}" == _*([[:blank:]])\**:* ]] then TAGTYPE[LCNT]="DL" ULFLAG="${FALSE}" LSTTYPE[LCNT]="" ULSPACE[LCNT]="" ULLEVEL[LCNT]="" fi #### Tables and rows [[ "_${LINE}" == _*([[:blank:]])\+-* ]] && TAGTYPE[LCNT]="TABLE" [[ "_${LINE}" == _*([[:blank:]])\|* ]] && TAGTYPE[LCNT]="ROW" [[ "_${LINE}" == _*([[:blank:]])\|\!* ]] && TAGTYPE[LCNT]="HEADER" #### Array element counter for lines read in (( ++LCNT )) done ################################################################ TABLEFLAG="${FALSE}" print -- "
" for IDX in "${!TXTARRY[@]}" do TEXTLINE="${TXTARRY[IDX]}" #### Imbedded HTML if [[ "${TAGTYPE[IDX]}" == "HTML" ]] then TEXTLINE="${TEXTLINE//'<<'/}" TEXTLINE="${TEXTLINE//'>>'/}" fi #### CODE HTML TAG output if [[ "${TAGTYPE[IDX]}" == "CODE" ]] && (( CODEFLAG == FALSE )) then print -- "\n
<${TAGTYPE[IDX]}>" CODEFLAG="${FALSE}" fi #### CITE Text HTML TAG output if [[ "${TAGTYPE[IDX]}" == "CITE" ]] && (( CITEFLAG == FALSE )) then print -- "" CITEFLAG="${TRUE}" fi if [[ "${TAGTYPE[IDX]}" != "CITE" ]] && (( CITEFLAG == TRUE )) then print -- "" CITEFLAG="${FALSE}" fi #### Preformatted Text HTML TAG output if [[ "${TAGTYPE[IDX]}" == "PRE" ]] && (( PREFLAG == FALSE )) then print -- "" CODEFLAG="${TRUE}" fi if [[ "${TAGTYPE[IDX]}" == "CODE" ]] then TEXTLINE="${TEXTLINE/#*([[:blank:]])\$*([[:blank:]])}" fi if [[ "${TAGTYPE[IDX]}" != "CODE" ]] && (( CODEFLAG == TRUE )) then print -- "${TAGTYPE[IDX]}>
" PREFLAG="${TRUE}" fi if [[ "${TAGTYPE[IDX]}" != "PRE" ]] && (( PREFLAG == TRUE )) then print -- "" PREFLAG="${FALSE}" fi #### Horizontal Rule HTML TAG output if [[ "${TAGTYPE[IDX]}" == "HR" ]] then print -- "<${TAGTYPE[IDX]}>" continue fi #### Table and Row HTML TAG output if [[ "${TAGTYPE[IDX]}" == "TABLE" ]] then if (( TABLEFLAG == FALSE )) then if (( TBLCENTER == TRUE )) then print -- "