package require Tcl 8.6
package require http
proc page-url {base-url name} {
return ${base-url}[string map {%20 +} [http::quoteString $name]]
}
proc sitemap urls {
set doc [list \
{<?xml version="1.0" encoding="UTF-8"?>} \
{<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">} \
]
foreach url $urls {
lappend doc <url><loc><!\[CDATA\[$url]]></loc></url>
}
lappend doc </urlset>
return [join $doc \n]
}
proc skip? {name content} {
expr {
[regexp ^special: $name]
|| [regexp {^\s*$} $content]
|| [regexp {^Go to \[.*\]\(.*\)} $content]
}
}
proc generate {base-url args} {
set pages [split [exec fossil wiki ls] \n]
set urls [lmap page $pages {
if {[skip? $page [exec fossil wiki export $page]]} continue
page-url ${base-url} $page
}]
lappend urls {*}$args
puts [sitemap $urls]
}
generate {*}$argv