i've been playing with this quite a bit with some of my markdown sources, including those for one of my blogs. while it does exactly what i hoped it would do for everything i have tested in my fossil wikis, i did find one instance where it screws me up on my markdown-based blog. my static site generator leverages blackfriday for markdown parsing, and pygment-colored code blocks are framed with "```" ... these blocks do not get ignored by your script, and the commented lines inside the code blocks get meddled with. i haven't attempted anything like this within the fossil wikis (and do not know whether it is even possible) so it may well be something you've never seen before - and most likely don't care.
which of course is fine - i'm just reporting back. thanks again for your work on this script! ----- On Aug 21, 2017, at 4:40 PM, Andy Goth <andrew.m.g...@gmail.com> wrote: > It's online now. Also, here's the code: > #!/usr/bin/env tclsh > package require Tcl 8.6 > # Link back to table of contents. > set top {<a href="#table_of_contents" style="font-size: small">[top]</a>} > # Process each named file. > foreach file $argv { > # Read Markdown file. > set chan [open $file] > set data [chan read $chan] > chan close $chan > # Check if the Markdown file contains a TOC. > if {[string first <!--TOC--> $data] >= 0} { > # If so, build the TOC to contain all first- and second-level headings. > # Consider only headings using "#" and "##" marks, not underlines. > set start 0 > set toc <!--TOC--> > append toc "\n<a name=\"table_of_contents\"></a>" > append toc " Table of Contents\n" [string repeat = 50] > while {[regexp -indices -line -start $start {^##?[^#].*} $data match]} { > # Get line from input. > set line [string range $data {*}$match] > # Get heading level. > regexp {^(#*)(.*)} $line _ heading line > # Strip the anchor tag if present. > regsub {^ <a name=".*"></a>} $line {} line > # Strip the link to the TOC if present. > regsub { <a href="#.*".*} $line {} line > # Extract the title. > set title [string trim $line] > # Compute the anchor name and markup. > regsub -all {\W} [string tolower $title] _ name > set anchor "<a name=\"$name\"></a>" > # Build table of contents. > append toc \n > if {$heading eq "##"} { > append toc " " > } > append toc "* \[$title\](#$name)" > # Replace the section header line. > set line "$heading $anchor $title $top" > set data [string replace $data {*}$match $line] > # Update the start index. > set start [expr {[lindex $match 0] + [string length $line]}] > } > append toc \n > # Write Markdown file with the table of contents inserted. > set chan [open $file w] > chan puts -nonewline $chan [regsub -line {^<!--TOC-->$(?:\n.+$)*\n$}\ > $data [string map {& \& \\ \\\\} $toc]] > chan close $chan > } > } > # vim: set sts=4 sw=4 tw=80 et ft=tcl: > On Aug 21, 2017 09:47, "jungle Boogie" < [ mailto:jungleboog...@gmail.com | > jungleboog...@gmail.com ] > wrote: >> On 20 August 2017 at 10:24, Andy Goth < [ mailto:andrew.m.g...@gmail.com | >> andrew.m.g...@gmail.com ] > wrote: >> > On 08/18/17 07:38, Dewey Hylton wrote: >> >> I predict this to be the best email I receive today. >> >> My first thought was "This is like paid support!" >> >> My second thought was "Wait ... paid support has *never* been this good >> >> ..." >> >> Thanks for your work! >> > Since you seem to be really interested, have one more improvement. Now >> > there's no need for an <!--END--> marker. The table of contents extends >> > from <!--TOC--> to the first blank line. Aside from looking cleaner >> > overall, this works around a Markdown rendering oddity which required me to >> > put a blank line between the last line of the TOC list and the <!--END--> >> > line. >>> [ https://chiselapp.com/user/andy/repository/brush/file/doc/toc.tcl | >> > https://chiselapp.com/user/andy/repository/brush/file/doc/toc.tcl ] >> Any chance of using something like [ https://www.pastiebin.com/ | >> https://www.pastiebin.com ] to show the code? >> [ http://chiselapp.com/ | chiselapp.com ] is offline, and it looks like >> that's >> been the case of a >> few days now. >> _______________________________________________ >> fossil-users mailing list >> [ mailto:fossil-users@lists.fossil-scm.org | >> fossil-users@lists.fossil-scm.org ] >> [ http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users | >> http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users ] > _______________________________________________ > fossil-users mailing list > fossil-users@lists.fossil-scm.org > http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users
_______________________________________________ fossil-users mailing list fossil-users@lists.fossil-scm.org http://lists.fossil-scm.org:8080/cgi-bin/mailman/listinfo/fossil-users