lish2html

Richard Suchenwirth 2000-03-17 -- Want to produce internationalized HTML documents with little effort? Having transliterators from The Lish family, you can write HTML with embedded foreign language sections (e.g. Arabic) in transliteration like this

 <HTML><HEAD></HEAD><BODY>
 Germany   [ar AlmAnyA]
 </BODY></HTML>

and feed the resulting file through lish2html below. The resulting file looks like

 <HTML><HEAD></HEAD><BODY>
 Germany   &#65166;&#65268;&#65255;&#65166;&#65252;&#65247;&#65165;
 </BODY></HTML>

Not exactly readable, but the HTML way to express Unicodes. Given a browser that accepts Unicodes (turned on e.g. Netscape 4.6 with View/Character set/Unicodes (UTF-8)) and has a font that contains the wanted characters, bingo! Arabic on your web page.

This script substitutes what it can, not only [..] calls, but $.. and \u.... as well. When something goes wrong in one source line, that line is sent unchanged to output.


 #!/bin/sh
 # -*-Tcl-*- Time-stamp: "lish2html: 2000-03-17,14:36:24 (suchenwi@jaguar)" \
 exec tclsh8.3 "$0" ${1+"$@"}

 # assume the required *lish files are in the same directory as this
 # modify to anything fancier if needed 

 set this [file join [pwd] [info script]]
 if ![catch {file readlink $this} res] {set this $res}
 lappend auto_path [file dirname $this]

 ;proc usage {} {
        puts "usage: lish2html \[infile \[outfile\]\]
 Substitutes *lish phrases to &#nnnn; HTML Unicodes"
 }
 ;proc u2html {s} {
    set res ""
    foreach u [split $s ""] {
        scan $u %c t
        if {$t>127} {
            append res "&#$t;"
        } else {
            append res $u
        }
    }
    set res
 } ;# RS
 #------------------------------------ main routine
 set infile stdin
 set outfile stdout
 set argc [llength $argv]
 if {$argc>2} {usage; exit}
 if {$argc} {
    set inname [lindex $argv 0]
    if {![file readable $inname]} {
        usage; exit
    }
    set infile [open $inname r]
    if {$argc==2} {
        set outfile [open [lindex $argv 1] w]
    }
 }
 while {[gets $infile line]>=0} {
    if [catch {u2html [subst $line]} res] {
        puts $outfile $line
    } else {
        puts $outfile $res
    }
 }
 if {$outfile!="stdout"} {close $outfile}