Map levels to html headings
Not logged in

The functionality below is present in Tkoutline 0.93 and later. By default export to html gives list items. With the

 tree set root maxHeader 4

trick, the first 4 levels are output as html headers and any deeper levels are output as list items.


20-Aug-03 Laurent Duperval - Here is a quick hack for mapping levels to headings. It shows one way of doing it. The maxHeader is hard-coded here, but it could conceivable be an option for the document, that is carried along with the outline. I haven't looked at how this could be done elegantly.

Same day Brian Theado - I changed your

    set maxHeader 4

to

    set maxHeader -1
    if {$tree keyexists root -key maxHeader} {
        set maxHeader $tree set root -key maxHeader
    }

Now it isn't hard coded and the value will be carried along with the outline. If you want a value of 4 for a particular outline then execute the following in the console (<F2>) while your outline is active:

 tree set root -key maxHeader 4

Thanks for the modified code, Laurent. I will include this in the next release of tkoutline.

 proc treeToHtml {tree} {
    set html {}
    append html "<html><head></head><body>"
    set bulletType bullet
    if {$tree keyexists root -key bulletType} {
        set bulletType $tree set root -key bulletType
    }
    set maxHeader -1
    if {$tree keyexists root -key maxHeader} {
        set maxHeader $tree set root -key maxHeader
    }
    if {$bulletType == "bullet"} {
        set listTag "ul"
    } else {
        set listTag "ol"
    }
    $tree walk root -order both -command {
        switch %a {
            enter {
                if {%t depth %n <= $maxHeader} {
                   append html "<h%t depth %n>%t set %n</h%t depth %n>"
                } else {
                   if {%t depth %n != 0} {
                    append html "<li>%t set %n\n"
                   }
                   if {!%t isleaf %n} {
                    append html "<$listTag>\n"
                   }
                }
            }
            leave {
                if {!%t isleaf %n} {
                    append html "</$listTag>\n"
                }
            }
        }
    }
    append html "</body></html>"
    return $html
 }