Version 0 of A little doxygen converter

Updated 2004-02-18 17:11:54

Richard Suchenwirth 2004-02-18 - I received a document in a markup that I later found out was Doxygen formatting. As I didn't have Doxygen installed, I whipped up this little converter that turns it to HTML (on stdout - best pipe into a file), which was sufficient to make it better readable.

The language of Doxygen is of course much more powerful (see http://www.stack.nl/~dimitri/doxygen/commands.html ), but for my limited needs this was just good enough. If you need to process more Doxygen commands, just add them (and update this page too, if it's some thing useful). No warranties, but enjoy!

  proc xtex2htm {channel filename} {
    while {[gets $channel line]>=0} {
        set line [string map {
            {\li } <li> 
            \\< <i> \\> </i>
            \\verbatim    <pre>
            \\endverbatim </pre>
            <b> <b>   </b> </b>
            & &amp; < &lt; > &gt;
        } $line]
        if {$line eq "/*!"} continue
        if [regexp {\\mainpage (.+)} $line -> l] {
            set line <h1>$l</h1><hr>
        }
        if [regexp {\\section (\S+) (.+)} $line -> l h] {
            set line "<br><br><a name=$l><h2>$h</h2></a>"
            lappend links "<p><b><a href=#$l>$h</a></b>"
        }
        if [regexp {\\subsection (\S+) (.+)} $line -> l h] {
            set line "<p><a name=$l><h3>$h</h3></a>"
            lappend links "<li><a href=#$l>$h</a>"
        }
        if {[string trim $line] eq ""} {set line <p>}
        #--- markup C++ comments in code sections
        if [regexp {^\s*//} $line] {set line <i>$line</i>}

        puts $line
    }
    puts "<hr><h2>Index</h2><p>[join $links \n]"
    puts "<hr><i>Converted from $filename on [clock format [clock sec]]</i>"
 }
 proc prolog {} {
    puts <HTML><HEAD/><BODY>
 }
 proc epilog {} {
    puts </BODY></HTML>
 }

 prolog
 if {[llength $argv]} {
    foreach file $argv {
        set fp [open $file]
        xtex2htm $fp $file
        close $fp
    }
 } else {
    xtex2htm stdin stdin
 }
 epilog

Arts and crafts of Tcl-Tk programming