1#! /bin/sh 2# this is the sh/sed variant of the mksite script. It is largely 3# derived from snippets that I was using to finish doc pages for 4# website publishing. For the mksite project the functionaliy has 5# been expanded of course. Still this one does only use simple unix 6# commands like sed, date, and test. And it still works. :-)=) 7# http://zziplib.sf.net/mksite/ 8# THE MKSITE.SH (ZLIB/LIBPNG) LICENSE 9# Copyright (c) 2004 Guido U. Draheim <guidod@gmx.de> 10# This software is provided 'as-is', without any express or implied warranty 11# In no event will the authors be held liable for any damages arising 12# from the use of this software. 13# Permission is granted to anyone to use this software for any purpose, 14# including commercial applications, and to alter it and redistribute it 15# freely, subject to the following restrictions: 16# 1. The origin of this software must not be misrepresented; you must not 17# claim that you wrote the original software. If you use this software 18# in a product, an acknowledgment in the product documentation would be 19# appreciated but is not required. 20# 2. Altered source versions must be plainly marked as such, and must not 21# be misrepresented as being the original software. 22# 3. This notice may not be removed or altered from any source distribution. 23# $Id: mksite.sh,v 1.5 2006-09-22 00:33:22 guidod Exp $ 24 25# Zsh is not Bourne compatible without the following: (seen in autobook) 26if test -n "$ZSH_VERSION"; then 27 emulate sh 28 NULLCMD=: 29fi 30 31# initialize some defaults 32test ".$SITEFILE" = "." && test -f "site.htm" && SITEFILE="site.htm" 33test ".$SITEFILE" = "." && test -f "site.html" && SITEFILE="site.html" 34test ".$SITEFILE" = "." && SITEFILE="site.htm" 35MK="-mksite" # note the "-" at the start 36SED="sed" 37CAT="cat" # "sed -e n" would be okay too 38GREP="grep" 39DATE_NOW="date" # should be available on all posix systems 40DATE_R="date -r" # gnu date has it / solaris date not 41STAT_R="stat" # gnu linux 42LS_L="ls -l" # linux uses one less char than solaris 43 44DATA="~~" # extension for meta data files 45HEAD="~head~" # extension for head sed script 46BODY="~body~" # extension for body sed script 47FOOT="~foot~" # append to body text (non sed) 48 49NULL="/dev/null" # to divert stdout/stderr 50CATNULL="$CAT $NULL" # to create 0-byte files 51SED_LONGSCRIPT="$SED -f" 52 53Q='q class=' 54QX='/q' 55LOWER="abcdefghijklmnopqrstuvwxyz" 56UPPER="ABCDEFGHIJKLMNOPQRSTUVWXYZ" 57az="$LOWER" # some old sed tools can not 58AZ="$UPPER" # use char-ranges in the 59NN="0123456789" # match expressions so that 60AA="_$NN$AZ$az" # we use their unrolled 61AX="$AA.+-" # definition here 62AP="|" # (pipe symbol in char-range) 63AK="[" # (open range in char-range) 64 65LANG="C" ; LANGUAGE="C" ; LC_COLLATE="C" # these are needed for proper 66export LANG LANGUAGE LC_COLLATE # lowercasing as some collate 67 # treat A-Z to include a-z 68 69HTMLTAGS=" a p h1 h2 h3 h4 h5 h6 dl dd dt ul ol li pre code table tr td th" 70HTMLTAGS=" $HTMLTAGS b u i s q em strong strike cite big small sup sub tt" 71HTMLTAGS=" $HTMLTAGS thead tbody center hr br nobr wbr" 72HTMLTAGS=" $HTMLTAGS span div img adress blockquote" 73HTMLTAGS2=" html head body title meta http-equiv style link" 74 75# ========================================================================== 76if "${SHELL-/bin/sh}" -c 'foo () { exit 0; }; foo' 2>$NULL ; then : ; else 77echo "!! sorry, this shell '$SHELL' does not support shell functions" ; exit 1 78fi 79 80error () 81{ 82 echo "ERROR:" "$@" 1>&2 83} 84 85warn () 86{ 87 echo "WARN:" "$@" 1>&2 88} 89 90note () 91{ 92 echo "NOTE:" "$@" 1>&2 93} 94 95hint=":" 96 97init () 98{ 99 if test -d DEBUG 100 then hint="note" 101 fi 102 if test "$SED" = "sed" ; then 103 if gsed --version 2>$NULL | $GREP "GNU sed" >$NULL ; then 104 SED="gsed" 105 $hint "using 'gsed' as SED" 106 fi 107 fi 108 if $SED --version 2>$NULL | $GREP "GNU sed" >$NULL ; then 109 az="a-z" # but if we have GNU sed 110 AZ="A-Z" # then we assume there are 111 NN="0-9" # char-ranges available 112 AA="_$NN$AZ$az" # that makes the resulting 113 AX="$AA.+-" # script more readable 114 $hint "found GNU sed - good" 115 elif uname -s | $GREP HP-UX >$NULL ; then 116 SED_LONGSCRIPT="sed_longscript" # due to 100 sed lines limit 117 $hint "weird sed - hpux sed has a limit of 100 lines" \ 118 "- using sed_longscript mode" 119 fi 120 if echo "TEST" | sed -e "s%[:[]*TEST%OK%" | grep OK 2>&1 > $NULL 121 then : 122 elif echo "TEST" | sed -e "s%[:\\[]*TEST%OK%" | grep OK 2>&1 > $NULL 123 then AK="\\[" ; $hint "AK=\\[" 124 else AK="" ; warn "buggy sed - disabled [ in char-ranges / fileref-tests" 125 fi 126 if echo "TEST" | sed -e "s%[:|]*TEST%OK%" | grep OK 2>&1 > $NULL 127 then : 128 elif echo "TEST" | sed -e "s%[:\\|]*TEST%OK%" | grep OK 2>&1 > $NULL 129 then AP="\\[" ; $hint "AP=\\|" 130 else AP="" ; warn "buggy sed - disabled | in char-ranges / fileref-tests" 131 fi 132} 133 134init "NOW!!!" 135 136sed_debug () 137{ 138 $note "sed" "$@" >&2 139 sed "$@" 140} 141 142# ========================================================================== 143# reading options from the command line GETOPT 144opt_variables="files" 145opt_fileseparator="?" 146opt_files="" 147opt_main_file="" 148opt_formatter="$0" 149opt="" 150for arg in "$@" # this variant should allow to embed spaces in $arg 151do if test ".$opt" != "." ; then 152 eval "export opt_$opt='$arg'" 153 opt="" 154 else 155 case "$arg" in 156 -*=*) 157 opt=`echo "$arg" | $SED -e "s/-*\\([$AA][$AA-]*\\).*/\\1/" -e y/-/_/` 158 if test ".$opt" = "." ; then 159 error "invalid option $arg" 160 else 161 arg=`echo "$arg" | $SED -e "s/^[^=]*=//"` 162 eval "export opt_$opt='$arg'" 163 opt_variables="$opt_variables $opt" 164 fi 165 opt="" ;; 166 -*?-*) : an option with an argument --main-file=x or --main-file x 167 opt=`echo "$arg" | $SED -e "s/-*\\([$AA][$AA-]*\\).*/\\1/" -e y/-/_/` 168 if test ".$opt" = "." ; then 169 error "invalid option $arg" 170 opt="" 171 else : 172 # keep the option for next round 173 fi ;; 174 -*) : a simple option --filelist or --debug or --verbose 175 opt=`echo "$arg" | $SED -e "s/^-*\\([$AA][$AA-]*\\).*/\\1/" -e y/-/_/` 176 if test ".$opt" = "." ; then 177 error "invalid option $arg" 178 else 179 arg=`echo "$arg" | $SED -e "s/^[^=]*=//"` 180 eval "export opt_$opt=' '" 181 fi 182 opt="" ;; 183 *) $hint "<$arg>" 184 if test ".$opt_main_file" = "." ; then opt_main_file="$arg" ; else 185 test ".$opt_files" != "." && opt_files="$opt_files$opt_fileseparator" 186 opt_files="$opt_files$arg" ; fi 187 opt="" ;; 188 esac 189 fi 190done ; if test ".$opt" != "." ; then 191 eval "export opt_$opt='$arg'" 192 opt="" 193fi 194### env | grep ^opt 195 196test ".$opt_main_file" != "." && test -f "$opt_main_file" && \ 197SITEFILE="$opt_main_file" 198test ".$opt_site_file" != "." && test -f "$opt_site_file" && \ 199SITEFILE="$opt_site_file" 200test "$opt_debug" && \ 201hint="note" 202 203if test ".$opt_help" != "." ; then 204 F="$SITEFILE" 205 echo "$0 [sitefile]"; 206 echo " default sitefile = $F"; 207 echo "options:"; 208 echo " --filelist : show list of target files as ectracted from $F" 209 echo " --src-dir xx : if source files are not where mksite is executed" 210 echo " --tmp-dir xx : use temp instead of local directory" 211 echo " --tmp : use automatic temp directory in ${TEMP-/tmp}/mksite.*" 212 exit; 213 echo " internal:" 214 echo "--fileseparator=x : for building the internal filelist (default '?')" 215 echo "--files xx : for list of additional files to be processed" 216 echo "--main-file xx : for the main sitefile to take file list from" 217fi 218 219if test ".$SITEFILE" = "." ; then 220 error "no SITEFILE found (default would be 'site.htm')" 221 exit 1 222else 223 $hint "sitefile:" `ls -s $SITEFILE` 224fi 225 226tmp="." ; if test ".$opt_tmp_dir" != "." ; then tmp="$opt_tmp_dir" ; fi 227if test ".$opt_tmp_dir" = "." && test ".$opt_tmp" != "." ; then 228tmp="${TEMP-/tmp}/mksite.$$" ; fi 229 230# we use external files to store mappings - kind of relational tables 231MK_TAGS="$tmp/$MK.tags.tmp.sed" 232MK_VARS="$tmp/$MK.vars.tmp.sed" 233MK_SPAN="$tmp/$MK.span.tmp.sed" 234MK_META="$tmp/$MK.meta.tmp.htm" 235MK_METT="$tmp/$MK.mett.tmp.htm" 236MK_TEST="$tmp/$MK.test.tmp.htm" 237MK_FAST="$tmp/$MK.fast.tmp.sed" 238MK_GETS="$tmp/$MK.gets.tmp.sed" 239MK_PUTS="$tmp/$MK.puts.tmp.sed" 240MK_SITE="$tmp/$MK.site.tmp.sed" 241MK_SECT1="$tmp/$MK.sect1.tmp.sed" 242MK_SECT2="$tmp/$MK.sect2.tmp.sed" 243MK_SECT3="$tmp/$MK.sect3.tmp.sed" 244MK_STYLE="$tmp/$MK.style.tmp.sed" 245MK_DATA="$tmp/$MK.$DATA.tmp.htm" 246 247# ======================================================================== 248# ======================================================================== 249# ======================================================================== 250# MAGIC VARS 251# IN $SITEFILE 252printerfriendly="" 253sectionlayout="list" 254sitemaplayout="list" 255attribvars=" " # <x ref="${varname:=default}"> 256updatevars=" " # <!--$varname:=-->default 257expandvars=" " # <!--$varname--> 258commentvars=" " # $updatevars && $expandsvars 259sectiontab=" " # highlight ^<td class=...>...href="$section" 260currenttab=" " # highlight ^<br>..<a href="$topic"> 261headsection="no" 262tailsection="no" 263sectioninfo="no" # using <h2> title <h2> = info text 264emailfooter="no" 265 266if $GREP "<!--multi-->" $SITEFILE >$NULL ; then 267echo \ 268"WARNING: do not use <!--multi-->, change to <!--mksite:multi--> " "$SITEFILE" 269echo \ 270"warning: or <!--mksite:multisectionlayout--> <!--mksite:multisitemaplayout-->" 271sectionlayout="multi" 272sitemaplayout="multi" 273fi 274if $GREP "<!--mksite:multi-->" $SITEFILE >$NULL ; then 275sectionlayout="multi" 276sitemaplayout="multi" 277fi 278if $GREP "<!--mksite:multilayout-->" $SITEFILE >$NULL ; then 279sectionlayout="multi" 280sitemaplayout="multi" 281fi 282 283mksite_magic_option () 284{ 285 # $1 is word/option to check for 286 INP="$2" ; test ".$INP" = "." && INP="$SITEFILE" 287 $SED \ 288 -e "s/\\(<!--mksite:\\)\\($1\\)-->/\\1\\2: -->/g" \ 289 -e "s/\\(<!--mksite:\\)\\([$AA][$AA]*\\)\\($1\\)-->/\\1\\3:\\2-->/g" \ 290 -e "/<!--mksite:$1:/!d" \ 291 -e "s/.*<!--mksite:$1:\\([^<>]*\\)-->.*/\\1/" \ 292 -e "s/.*<!--mksite:$1:\\([^-]*\\)-->.*/\\1/" \ 293 -e "/<!--mksite:$1:/d" -e q $INP # $++ 294} 295 296x=`mksite_magic_option sectionlayout` ; case "$x" in 297 "list"|"multi") sectionlayout="$x" ;; esac 298x=`mksite_magic_option sitemaplayout` ; case "$x" in 299 "list"|"multi") sitemaplayout="$x" ;; esac 300x=`mksite_magic_option attribvars` ; case "$x" in 301 " "|"no"|"warn") attribvars="$x" ;; esac 302x=`mksite_magic_option updatevars` ; case "$x" in 303 " "|"no"|"warn") updatevars="$x" ;; esac 304x=`mksite_magic_option expandvars` ; case "$x" in 305 " "|"no"|"warn") expandvars="$x" ;; esac 306x=`mksite_magic_option commentvars` ; case "$x" in 307 " "|"no"|"warn") commentvars="$x" ;; esac 308x=`mksite_magic_option printerfriendly` ; case "$x" in 309 " "|".*"|"-*") printerfriendly="$x" ;; esac 310x=`mksite_magic_option sectiontab` ; case "$x" in 311 " "|"no"|"warn") sectiontab="$x" ;; esac 312x=`mksite_magic_option currenttab` ; case "$x" in 313 " "|"no"|"warn") currenttab="$x" ;; esac 314x=`mksite_magic_option sectioninfo` ; case "$x" in 315 " "|"no"|"[=:-]") sectioninfo="$x" ;; esac 316x=`mksite_magic_option emailfooter` 317 test ".$x" != "." && emailfooter="$x" 318 319test ".$opt_print" != "." && printerfriendly="$opt_print" 320test ".$commentvars" = ".no" && updatevars="no" # duplicated into 321test ".$commentvars" = ".no" && expandvars="no" # info2vars_sed () 322 323 324$hint "'$sectionlayout'sectionlayout '$sitemaplayout'sitemaplayout" 325$hint "'$attribvars'attribvars '$updatevars'updatevars" 326$hint "'$expandvars'expandvars '$commentvars'commentvars " 327$hint "'$currenttab'currenttab '$sectiontab'sectiontab" 328$hint "'$headsection'headsection '$tailsection'tailsection" 329 330if ($STAT_R "$SITEFILE" >$NULL) 2>$NULL ; then : ; else STAT_R=":" ; fi 331# ========================================================================== 332# init a few global variables 333# 0. INIT 334 335mkpathdir () { 336 if test -n "$1" && test ! -d "$1" ; then 337 echo "!! mkdir '$1'" ; mkdir "$1" 338 test ! -d "$1" || mkdir -p "$1" 339 fi 340} 341 342mkpathfile () { 343 dirname=`echo "$1" | $SED -e "s:/[^/][^/]*\$::"` 344 if test ".$1" != ".$dirname" && test ".$dirname" != "." ; 345 then mkpathdir "$dirname"; fi 346} 347 348mknewfile () { 349 mkpathfile "$1" 350 $CATNULL > "$1" 351} 352 353tmp_dir_was_created="no" 354if test ! -d "$tmp" ; then mkpathdir "$tmp" ; tmp_dir_was_created="yes" ; fi 355 356# $MK_TAGS - originally, we would use a lambda execution on each 357# uppercased html tag to replace <P> with <p class="P">. Here we just 358# walk over all the known html tags and make an sed script that does 359# the very same conversion. There would be a chance to convert a single 360# tag via "h;y;x" or something we do want to convert all the tags on 361# a single line of course. 362mknewfile "$MK_TAGS" 363for M in `echo $HTMLTAGS` 364do P=`echo "$M" | $SED -e "y/$LOWER/$UPPER/"` 365 echo "s|<$P>|<$M class=\"$P\">|g" >> "$MK_TAGS" 366 echo "s|<$P |<$M class=\"$P\" |g" >> "$MK_TAGS" 367 echo "s|</$P>|</$M>|g" >> "$MK_TAGS" 368done 369 echo "s|<>|\\ \\;|g" >> "$MK_TAGS" 370 echo "s|<->|<WBR />|g" >> "$MK_TAGS" 371 echo "s|<c>|<code>|g" >> "$MK_TAGS" 372 echo "s|</c>|</code>|g" >> "$MK_TAGS" 373 echo "s|<section>||g" >> "$MK_TAGS" 374 echo "s|</section>||g" >> "$MK_TAGS" 375 echo "s|<\\(a [^<>]*\\) />|<\\1></a>|g" >> "$MK_TAGS" 376 _ulink_="<a href=\"\\1\" remap=\"url\">\\1</a>" 377 echo "s|<a>\\([$az$AZ][$az$AZ]*://[^<>]*\\)</a>|$_ulink_|g" >> "$MK_TAGS" 378# also make sure that some non-html entries are cleaned away that 379# we are generally using to inject meta information. We want to see 380# that meta ino in the *.htm browser view during editing but they 381# shall not get present in the final html page for publishing. 382DC_VARS="contributor date source language coverage identifier" 383DC_VARS="$DC_VARS rights relation creator subject description" 384DC_VARS="$DC_VARS publisher DCMIType" 385_EQUIVS="refresh expires content-type cache-control" 386_EQUIVS="$_EQUIVS redirect charset" # mapped to refresh / content-type 387_EQUIVS="$_EQUIVS content-language content-script-type content-style-type" 388for P in $DC_VARS $_EQUIVS ; do # dublin core embedded 389 echo "s|<$P>[^<>]*</$P>||g" >> "$MK_TAGS" 390done 391 test ".$opt_keepsect" = "." && \ 392 echo "s|<a sect=\"[$AZ$NN]\"|<a|g" >> "$MK_TAGS" 393 echo "s|<!--[$AX]*[?]-->||g" >> "$MK_TAGS" 394 echo "s|<!--\\\$[$AX]*[?]:-->||g" >> "$MK_TAGS" 395 echo "s|<!--\\\$[$AX]*:[?=]-->||g" >> "$MK_TAGS" 396 echo "s|\\(<[^<>]*\\)\\\${[$AX]*:[?=]\\([^<{}>]*\\)}\\([^<>]*>\\)|\\1\\2\\3|g" >>$MK_TAGS 397 398# see overview at www.metatab.de - http-equivs are 399# <refresh>5; url=target</reresh> or <redirect>target</redirect> 400# <content-type>text/html; charset=koi8-r</content-type> iso-8859-1/UTF-8 401# <content-language>de</content-language> <charset>UTF-8</charset> 402# <content-script-type>text/javascript</content-script-type> /jscript/vbscript 403# <content-style-type>text/css</content-style-type> 404# <cache-control>no-cache</cache-control> 405 406trimm () 407{ 408 echo "$1" | $SED -e "s:^ *::" -e "s: *\$::"; 409} 410trimmm () 411{ 412 echo "$1" | $SED -e "s:^ *::" -e "s: *\$::" -e "s:[ ][ ]*: :g"; 413} 414 415timezone () 416{ 417 # +%z is an extension while +%Z is supposed to be posix 418 _timezone=`$DATE_NOW +%z` 419 case "$_timezone" in 420 *+*) echo "$_timezone" ;; 421 *-*) echo "$_timezone" ;; 422 *) $DATE_NOW +%Z 423 esac 424} 425timetoday () 426{ 427 $DATE_NOW +%Y-%m-%d 428} 429timetodays () 430{ 431 $DATE_NOW +%Y-%m%d 432} 433 434# ====================================================================== 435# FUNCS 436 437sed_longscript () 438{ 439 # hpux sed has a limit of 100 entries per sed script ! 440 $SED -e "100q" "$1" > "$1~1~" 441 $SED -e "1,100d" -e "200q" "$1" > "$1~2~" 442 $SED -e "1,200d" -e "300q" "$1" > "$1~3~" 443 $SED -e "1,300d" -e "400q" "$1" > "$1~4~" 444 $SED -e "1,400d" -e "500q" "$1" > "$1~5~" 445 $SED -e "1,500d" -e "600q" "$1" > "$1~6~" 446 $SED -e "1,600d" -e "700q" "$1" > "$1~7~" 447 $SED -e "1,700d" -e "800q" "$1" > "$1~8~" 448 $SED -e "1,800d" -e "900q" "$1" > "$1~9~" 449 $SED -f "$1~1~" -f "$1~2~" -f "$1~3~" -f "$1~4~" -f "$1~5~" \ 450 -f "$1~6~" -f "$1~7~" -f "$1~8~" -f "$1~9~" "$2" 451} 452 453sed_escape_key () 454{ 455 $SED -e "s|\\.|\\\\&|g" -e "s|\\[|\\\\&|g" -e "s|\\]|\\\\&|g" "$@" 456} 457 458sed_slash_key () # helper to escape chars special in /anchor/ regex 459{ # currently escaping "/" "[" "]" "." 460 echo "$1" | sed_escape_key -e "s|/|\\\\&|g" 461} 462sed_piped_key () # helper to escape chars special in s|anchor|| regex 463{ # currently escaping "|" "[" "]" "." 464 echo "$1" | sed_escape_key -e "s/|/\\\\&/g" 465} 466 467back_path () # helper to get the series of "../" for a given path 468{ 469 echo "$1" | $SED -e "/\\//!d" -e "s|/[^/]*\$|/|" -e "s|[^/]*/|../|g" 470} 471 472dir_name () 473{ 474 echo "$1" | $SED -e "s:/[^/][^/]*\$::" 475} 476 477piped_value="s/|/\\\\|/g" 478amp_value="s|&|\\\\&|g" 479info2vars_sed () # generate <!--$vars--> substition sed addon script 480{ 481 INP="$1" ; test ".$INP" = "." && INP="$tmp/$F.$DATA" 482 V8=" *\\([^ ][^ ]*\\) \\(.*\\)<$QX>" 483 V9=" *DC[.]\\([^ ][^ ]*\\) \\(.*\\)<$QX>" 484 N8=" *\\([^ ][^ ]*\\) \\([$NN].*\\)<$QX>" 485 N9=" *DC[.]\\([^ ][^ ]*\\) \\([$NN].*\\)<$QX>" 486 V0="\\\\([<]*\\\\)\\\\\\\$" 487 V1="\\\\([^<>]*\\\\)\\\\\\\$" 488 V2="\\\\([^{<>}]*\\\\)" 489 V3="\\\\([^<>]*\\\\)" 490 SS="<""<>"">" # spacer so value="2004" does not make for s|\(...\)|\12004| 491 test ".$commentvars" = ".no" && updatevars="no" # duplicated from 492 test ".$commentvars" = ".no" && expandvars="no" # option handling 493 test ".$expandvars" != ".no" && \ 494 $SED -e "/^=....=formatter /d" -e "$piped_value" \ 495 -e "/^<$Q'name'>/s,<$Q'name'>$V9,s|<!--$V0\\1[?]-->|- \\2|," \ 496 -e "/^<$Q'Name'>/s,<$Q'Name'>$V9,s|<!--$V0\\1[?]-->|(\\2)|," \ 497 -e "/^<$Q'name'>/s,<$Q'name'>$V8,s|<!--$V0\\1[?]-->|- \\2|," \ 498 -e "/^<$Q'Name'>/s,<$Q'Name'>$V8,s|<!--$V0\\1[?]-->|(\\2)|," \ 499 -e "/^<$Q/d" -e "/^<!/d" -e "$amp_value" $INP # $++ 500 test ".$expandvars" != ".no" && \ 501 $SED -e "/^=....=formatter /d" -e "$piped_value" \ 502 -e "/^<$Q'text'>/s,<$Q'text'>$V9,s|<!--$V1\\1-->|\\\\1$SS\\2|," \ 503 -e "/^<$Q'Text'>/s,<$Q'Text'>$V9,s|<!--$V1\\1-->|\\\\1$SS\\2|," \ 504 -e "/^<$Q'name'>/s,<$Q'name'>$V9,s|<!--$V1\\1[?]-->|\\\\1$SS\\2|," \ 505 -e "/^<$Q'Name'>/s,<$Q'Name'>$V9,s|<!--$V1\\1[?]-->|\\\\1$SS\\2|," \ 506 -e "/^<$Q'text'>/s,<$Q'text'>$V8,s|<!--$V1\\1-->|\\\\1$SS\\2|," \ 507 -e "/^<$Q'Text'>/s,<$Q'Text'>$V8,s|<!--$V1\\1-->|\\\\1$SS\\2|," \ 508 -e "/^<$Q'name'>/s,<$Q'name'>$V8,s|<!--$V1\\1[?]-->|\\\\1$SS\\2|," \ 509 -e "/^<$Q'Name'>/s,<$Q'Name'>$V8,s|<!--$V1\\1[?]-->|\\\\1$SS\\2|," \ 510 -e "/^<$Q/d" -e "/^<!/d" -e "$amp_value" $INP # $++ 511 test ".$updatevars" != ".no" && \ 512 $SED -e "/^=....=formatter /d" -e "$piped_value" \ 513 -e "/^<$Q'name'>/s,<$Q'name'>$V9,s|<!--$V0\\1:[?]-->[^<>]*|- \\2|," \ 514 -e "/^<$Q'Name'>/s,<$Q'Name'>$V9,s|<!--$V0\\1:[?]-->[^<>]*|(\\2)|," \ 515 -e "/^<$Q'name'>/s,<$Q'name'>$V8,s|<!--$V0\\1:[?]-->[^<>]*|- \\2|," \ 516 -e "/^<$Q'Name'>/s,<$Q'Name'>$V8,s|<!--$V0\\1:[?]-->[^<>]*|(\\2)|," \ 517 -e "/^<$Q/d" -e "/^<!/d" -e "$amp_value" $INP # $++ 518 test ".$updatevars" != ".no" && \ 519 $SED -e "/^=....=formatter /d" -e "$piped_value" \ 520 -e "/^<$Q'text'>/s,<$Q'text'>$V9,s|<!--$V1\\1:[=]-->[^<>]*|\\\\1$SS\\2|," \ 521 -e "/^<$Q'Text'>/s,<$Q'Text'>$V9,s|<!--$V1\\1:[=]-->[^<>]*|\\\\1$SS\\2|," \ 522 -e "/^<$Q'name'>/s,<$Q'name'>$V9,s|<!--$V1\\1:[?]-->[^<>]*|\\\\1$SS\\2|," \ 523 -e "/^<$Q'Name'>/s,<$Q'Name'>$V9,s|<!--$V1\\1:[?]-->[^<>]*|\\\\1$SS\\2|," \ 524 -e "/^<$Q'text'>/s,<$Q'text'>$V8,s|<!--$V1\\1:[=]-->[^<>]*|\\\\1$SS\\2|," \ 525 -e "/^<$Q'Text'>/s,<$Q'Text'>$V8,s|<!--$V1\\1:[=]-->[^<>]*|\\\\1$SS\\2|," \ 526 -e "/^<$Q'name'>/s,<$Q'name'>$V8,s|<!--$V1\\1:[?]-->[^<>]*|\\\\1$SS\\2|," \ 527 -e "/^<$Q'Name'>/s,<$Q'Name'>$V8,s|<!--$V1\\1:[?]-->[^<>]*|\\\\1$SS\\2|," \ 528 -e "/^<$Q/d" -e "/^<!/d" -e "$amp_value" $INP # $++ 529 test ".$attribvars" != ".no" && \ 530 $SED -e "/^=....=formatter /d" -e "$piped_value" \ 531 -e "/^<$Q'text'>/s,<$Q'text'>$V9,s|<$V1{\\1:[=]$V2}$V3>|<\\\\1$SS\\2\\\\3>|," \ 532 -e "/^<$Q'Text'>/s,<$Q'Text'>$V9,s|<$V1{\\1:[=]$V2}$V3>|<\\\\1$SS\\2\\\\3>|," \ 533 -e "/^<$Q'name'>/s,<$Q'name'>$V9,s|<$V1{\\1:[?]$V2}$V3>|<\\\\1$SS\\2\\\\3>|," \ 534 -e "/^<$Q'Name'>/s,<$Q'Name'>$V9,s|<$V1{\\1:[?]$V2}$V3>|<\\\\1$SS\\2\\\\3>|," \ 535 -e "/^<$Q'text'>/s,<$Q'text'>$V8,s|<$V1{\\1:[=]$V2}$V3>|<\\\\1$SS\\2\\\\3>|," \ 536 -e "/^<$Q'Text'>/s,<$Q'Text'>$V8,s|<$V1{\\1:[=]$V2}$V3>|<\\\\1$SS\\2\\\\3>|," \ 537 -e "/^<$Q'name'>/s,<$Q'name'>$V8,s|<$V1{\\1:[?]$V2}$V3>|<\\\\1$SS\\2\\\\3>|," \ 538 -e "/^<$Q'Name'>/s,<$Q'Name'>$V8,s|<$V1{\\1:[?]$V2}$V3>|<\\\\1$SS\\2\\\\3>|," \ 539 -e "/^<$Q/d" -e "/^<!/d" -e "$amp_value" $INP # $++ 540 # if value="2004" then generated sed might be "\\12004" which is bad 541 # instead we generate an edited value of "\\1$SS$value" and cut out 542 # the spacer now after expanding the variable values: 543 echo "s|$SS||g" # $++ 544} 545 546info2meta_sed () # generate <meta name..> text portion 547{ 548 # http://www.metatab.de/meta_tags/DC_type.htm 549 INP="$1" ; test ".$INP" = "." && INP="$tmp/$F.$DATA" 550 V6=" *HTTP[.]\\([^ ][^ ]*\\) \\(.*\\)<$QX>" 551 V7=" *DC[.]\\([^ ][^ ]*\\) \\(.*\\)<$QX>" 552 V8=" *\\([^ ][^ ]*\\) \\(.*\\)<$QX>" 553 DATA_META_TYPE_SCHEME="name=\"DC.type\" content=\"\\2\" scheme=\"\\1\"" 554 DATA_META_DCMI="name=\"\\1\" content=\"\\2\" scheme=\"DCMIType\"" 555 DATA_META_NAME_TZ="name=\"\\1\" content=\"\\2 `timezone`\"" 556 DATA_META_NAME="name=\"\\1\" content=\"\\2\"" 557 DATA_META_HTTP="http-equiv=\"\\1\" content=\"\\2\"" 558 $SED -e "/=....=today /d" \ 559 -e "/<$Q'meta'>HTTP[.]/s,<$Q'meta'>$V6, <meta $DATA_META_HTTP />," \ 560 -e "/<$Q'meta'>DC[.]DCMIType /s,<$Q'meta'>$V7, <meta $DATA_META_TYPE_SCHEME />," \ 561 -e "/<$Q'meta'>DC[.]type Collection$/s,<$Q'meta'>$V8, <meta $DATA_META_DCMI />," \ 562 -e "/<$Q'meta'>DC[.]type Dataset$/s,<$Q'meta'>$V8, <meta $DATA_META_DCMI />," \ 563 -e "/<$Q'meta'>DC[.]type Event$/s,<$Q'meta'>$V8, <meta $DATA_META_DCMI />," \ 564 -e "/<$Q'meta'>DC[.]type Image$/s,<$Q'meta'>$V8, <meta $DATA_META_DCMI />," \ 565 -e "/<$Q'meta'>DC[.]type Service$/s,<$Q'meta'>$V8, <meta $DATA_META_DCMI />," \ 566 -e "/<$Q'meta'>DC[.]type Software$/s,<$Q'meta'>$V8, <meta $DATA_META_DCMI />," \ 567 -e "/<$Q'meta'>DC[.]type Sound$/s,<$Q'meta'>$V8, <meta $DATA_META_DCMI />," \ 568 -e "/<$Q'meta'>DC[.]type Text$/s,<$Q'meta'>$V8, <meta $DATA_META_DCMI />," \ 569 -e "/<$Q'meta'>DC[.]date[.].*[+]/s,<$Q'meta'>$V8, <meta $DATA_META_NAME />," \ 570 -e "/<$Q'meta'>DC[.]date[.].*[:]/s,<$Q'meta'>$V8, <meta $DATA_META_NAME_TZ />," \ 571 -e "/<$Q'meta'>/s,<$Q'meta'>$V8, <meta $DATA_META_NAME />," \ 572 -e "/<meta name=\"[^\"]*\" content=\"\" /d" \ 573 -e "/<meta http-equiv=\"[^\"]*\" content=\"\" /d" \ 574 -e "/^<$Q/d" -e "/^<!/d" $INP # $++ 575} 576 577info_get_entry () # get the first <!--vars--> value known so far 578{ 579 TXT="$1" ; test ".$TXT" = "." && TXT="sect" 580 INP="$2" ; test ".$INP" = "." && INP="$tmp/$F.$DATA" 581 $SED -e "/<$Q'text'>$TXT /!d" \ 582 -e "s|<$Q'text'>$TXT ||" -e "s|<$QX>||" -e "q" $INP # $++ 583} 584 585info1grep () # test for a <!--vars--> substition to be already present 586{ 587 TXT="$1" ; test ".$TXT" = "." && TXT="sect" 588 INP="$2" ; test ".$INP" = "." && INP="$tmp/$F.$DATA" 589 $GREP "^<$Q'text'>$TXT " $INP >$NULL 590 return $? 591} 592 593dx_init() 594{ 595 mkpathdir "$tmp" 596 dx_meta formatter `basename $opt_formatter` > "$tmp/$F.$DATA" 597 for opt in $opt_variables ; do case "$opt" in # commandline --def=value 598 *_*) op_=`echo "$opt" | sed -e "y/_/-/"` # makes for <!--$def--> 599 dx_meta "$op_" `eval echo "\\\$opt_$opt"` ;; 600 *) dx_text "$opt" `eval echo "\\\$opt_$opt"` ;; 601 esac ; done 602} 603 604dx_line () 605{ 606 echo "<$Q$1>$2 "`trimmm "$3"`"<$QX>" >> "$tmp/$F.$DATA" 607} 608 609DX_line () 610{ 611 dx_val_=`echo "$3" | sed -e "s/<[^<>]*>//g"` 612 dx_line "$1" "$2" "$dx_val_" 613} 614 615dx_text () 616{ 617 dx_line "'text'" "$1" "$2" 618} 619 620DX_text () # add a <!--vars--> substition includings format variants 621{ 622 N=`trimm "$1"` ; T=`trimm "$2"` 623 if test ".$N" != "." ; then 624 if test ".$T" != "." ; then 625 text=`echo "$T" | $SED -e "y/$UPPER/$LOWER/" -e "s/<[^<>]*>//g"` 626 dx_line "'text'" "$N" "$T" 627 dx_line "'name'" "$N" "$text" 628 varname=`echo "$N" | $SED -e 's/.*[.]//'` # cut out front part 629 if test ".$N" != ".$varname" ; then 630 text=`echo "$varname $T" | $SED -e "y/$UPPER/$LOWER/" -e "s/<[^<>]*>//g"` 631 dx_line "'Text'" "$varname" "$T" 632 dx_line "'Name'" "$varname" "$text" 633 fi 634 fi 635 fi 636} 637 638dx_meta () 639{ 640 DX_line "'meta'" "$1" "$2" 641} 642 643DX_meta () # add simple meta entry and its <!--vars--> subsitution 644{ 645 DX_line "'meta'" "$1" "$2" 646 DX_text "$1" "$2" 647} 648 649DC_meta () # add new DC.meta entry plus two <!--vars--> substitutions 650{ 651 DX_line "'meta'" "DC.$1" "$2" 652 DX_text "DC.$1" "$2" 653 DX_text "$1" "$2" 654} 655 656HTTP_meta () # add new HTTP.meta entry plus two <!--vars--> substitutions 657{ 658 DX_line "'meta'" "HTTP.$1" "$2" 659 DX_text "HTTP.$1" "$2" 660 DX_text "$1" "$2" 661} 662 663DC_VARS_Of () # check DC vars as listed in $DC_VARS global and generate DC_meta 664{ # the results will be added to .meta.tmp and .vars.tmp later 665 FILENAME="$1" ; test ".$FILENAME" = "." && FILENAME="$SOURCEFILE" 666 for M in $DC_VARS title ; do 667 # scan for a <markup> of this name 668 part=`$SED -e "/<$M>/!d" -e "s|.*<$M>||" -e "s|</$M>.*||" -e q $FILENAME` 669 part=`trimm "$part"` 670 text=`echo "$part" | $SED -e "s|^[$AA]*:||"` 671 text=`trimm "$text"` 672 test ".$text" = "." && continue 673 # <mark:part> will be <meta name="mark.part"> 674 if test ".$text" != ".$part" ; then 675 N=`echo "$part" | $SED -e "s/:.*//"` 676 DC_meta "$M.$N" "$text" 677 elif test ".$M" = ".date" ; then 678 DC_meta "$M.issued" "$text" # "<date>" -> "<date>issued:" 679 else 680 DC_meta "$M" "$text" 681 fi 682 done 683} 684 685HTTP_VARS_Of () # check HTTP-EQUIVs as listed in $_EQUIV global then 686{ # generate meta tags that are http-equiv= instead of name= 687 FILENAME="$1" ; test ".$FILENAME" = "." && FILENAME="$SOURCEFILE" 688 for M in $_EQUIVS ; do 689 # scan for a <markup> of this name 690 part=`$SED -e "/<$M>/!d" -e "s|.*<$M>||" -e "s|</$M>.*||" -e q $FILENAME` 691 part=`trimm "$part"` 692 text=`echo "$part" | $SED -e "s|^[$AA]*:||"` 693 text=`trimm "$text"` 694 test ".$text" = "." && continue 695 if test ".$M" = ".redirect" ; then 696 HTTP_meta "refresh" "5; url=$text" ; DX_text "$M" "$text" 697 elif test ".$M" = ".charset" ; then 698 HTTP_meta "content-type" "text/html; charset=$text" 699 else 700 HTTP_meta "$M" "$text" 701 fi 702 done 703} 704 705DC_isFormatOf () # make sure there is this DC.relation.isFormatOf tag 706{ # choose argument for a fallback (usually $SOURCEFILE) 707 NAME="$1" ; test ".$NAME" = "." && NAME="$SOURCEFILE" 708 info1grep DC.relation.isFormatOf || DC_meta relation.isFormatOf "$NAME" 709} 710 711DC_publisher () # make sure there is this DC.publisher meta tag 712{ # choose argument for a fallback (often $USER) 713 NAME="$1" ; test ".$NAME" = "." && NAME="$USER" 714 info1grep DC.publisher || DC_meta publisher "$NAME" 715} 716 717DC_modified () # make sure there is a DC.date.modified meta tag 718{ # maybe choose from filesystem dates if possible 719 ZZ="$1" # target file 720 if info1grep DC.date.modified ; then : 721 else 722 _42_chars="........................................." 723 cut_42_55="s/^$_42_chars\\(.............\\).*/\\1/" # i.e.`cut -b 42-55` 724 text=`$STAT_R $ZZ 2>$NULL | $SED -e '/odify:/!d' -e 's|.*fy:||' -e q` 725 text=`echo "$text" | $SED -e "s/:..[.][$NN]*//"` 726 text=`trimm "$text"` 727 test ".$text" = "." && \ 728 text=`$DATE_R "$ZZ" +%Y-%m-%d 2>$NULL` # GNU sed 729 test ".$text" = "." && 730 text=`$LS_L "$ZZ" | $SED -e "$cut_42_55" -e "s/^ *//g" -e "q"` 731 text=`echo "$text" | $SED -e "s/[$NN]*:.*//"` # cut way seconds 732 DC_meta date.modified `trimm "$text"` 733 fi 734} 735 736DC_date () # make sure there is this DC.date meta tag 737{ # choose from one of the available DC.date.* specials 738 ZZ="$1" # source file 739 if info1grep DC.date 740 then DX_text issue "dated `info_get_entry DC.date`" 741 DX_text updated "`info_get_entry DC.date`" 742 else text="" 743 for kind in available issued modified created ; do 744 text=`info_get_entry DC.date.$kind` 745 # test ".$text" != "." && echo "$kind = date = $text ($ZZ)" 746 test ".$text" != "." && break 747 done 748 if test ".$text" = "." ; then 749 M="date" 750 part=`$SED -e "/<$M>/!d" -e "s|.*<$M>||" -e "s|</$M>.*||" -e q $ZZ` 751 part=`trimm "$part"` 752 text=`echo "$part" | $SED -e "s|^[$AA]*:||"` 753 text=`trimm "$text"` 754 fi 755 if test ".$text" = "." ; then 756 M="!--date:*=*--" # takeover updateable variable... 757 part=`$SED -e "/<$M>/!d" -e "s|.*<$M>||" -e "s|</.*||" -e q $ZZ` 758 part=`trimm "$part"` 759 text=`echo "$part" | $SED -e "s|^[$AA]*:||" -e "s|\\&.*||"` 760 text=`trimm "$text"` 761 fi 762 text=`echo "$text" | $SED -e "s/[$NN]*:.*//"` # cut way seconds 763 DX_text updated "$text" 764 text1=`echo "$text" | $SED -e "s|^.* *updated ||"` 765 if test ".$text" != ".$text1" ; then 766 kind="modified" ; text=`echo "$text1" | $SED -e "s|,.*||"` 767 fi 768 text1=`echo "$text" | $SED -e "s|^.* *modified ||"` 769 if test ".$text" != ".$text1" ; then 770 kind="modified" ; text=`echo "$text1" | $SED -e "s|,.*||"` 771 fi 772 text1=`echo "$text" | $SED -e "s|^.* *created ||"` 773 if test ".$text" != ".$text1" ; then 774 kind="created" ; text=`echo "$text1" | $SED -e "s|,.*||"` 775 fi 776 text=`echo "$text" | $SED -e "s/[$NN]*:.*//"` # cut way seconds 777 DC_meta date `trimm "$text"` 778 DX_text issue `trimm "$kind $text"` 779 fi 780} 781 782DC_title () 783{ 784 # choose a title for the document, either an explicit title-tag 785 # or one of the section headers in the document or fallback to filename 786 ZZ="$1" # target file 787 if info1grep DC.title ; then : 788 else 789 for M in TITLE title H1 h1 H2 h2 H3 H3 H4 H4 H5 h5 H6 h6 ; do 790 text=`$SED -e "/<$M>/!d" -e "s|.*<$M>||" -e "s|</$M>.*||" -e q $ZZ` 791 text=`trimm "$text"` ; test ".$text" != "." && break 792 MM="$M [^<>]*" 793 text=`$SED -e "/<$MM>/!d" -e "s|.*<$MM>||" -e "s|</$M>.*||" -e q $ZZ` 794 text=`trimm "$text"` ; test ".$text" != "." && break 795 done 796 if test ".text" = "." ; then 797 text=`basename $ZZ .html` 798 text=`basename $text .htm | $SED -e 'y/_/ /' -e "s/\\$/ info/"` 799 fi 800 term=`echo "$text" | $SED -e 's/.*[(]//' -e 's/[)].*//'` 801 text=`echo "$text" | $SED -e 's/[(][^()]*[)]//'` 802 if test ".$term" = "." || test ".$term" = ".$text" ; then 803 DC_meta title "$text" 804 else 805 DC_meta title "$term - $text" 806 fi 807 fi 808} 809 810site_get_section () # return parent section page of given page 811{ 812 _F_=`sed_slash_key "$1"` 813 $SED -e "/^<$Q'sect'>$_F_ /!d" \ 814 -e "s|^<$Q'sect'>$_F_ ||" -e "s|<$QX>||" \ 815 -e q "$MK_DATA" # $++ 816} 817 818DC_section () # not really a DC relation (shall we use isPartOf ?) 819{ # each document should know its section father 820 sectn=`site_get_section "$F"` 821 if test ".$sectn" != "." ; then 822 DC_meta relation.section "$sectn" 823 fi 824} 825 826info_get_entry_section() 827{ 828 info_get_entry DC.relation.section # $++ 829} 830 831site_get_selected () # return section of given page 832{ 833 _F_=`sed_slash_key "$1"` 834 $SED -e "/<$Q'use.'>$_F_ /!d" \ 835 -e "s|<$Q'use.'>[^ ]* ||" -e "s|<$QX>||" \ 836 -e q "$MK_DATA" # $++ 837} 838 839DC_selected () # not really a DC title (shall we use alternative ?) 840{ 841 # each document might want to highlight the currently selected item 842 short=`site_get_selected "$F"` 843 if test ".$short" != "." ; then 844 DC_meta title.selected "$short" 845 fi 846} 847 848info_get_entry_selected () 849{ 850 info_get_entry DC.title.selected # $++ 851} 852 853site_get_rootsections () # return all sections from root of nav tree 854{ 855 $SED -e "/^<$Q'use1'>/!d" \ 856 -e "s|^<$Q'use.'>\\([^ ]*\\) .*|\\1|" "$MK_DATA" # $++ 857} 858 859site_get_sectionpages () # return all children pages in the given section 860{ 861 _F_=`sed_slash_key "$1"` 862 $SED -e "/^<$Q'sect'>[^ ]* $_F_<[^<>]*>\$/!d" \ 863 -e "s|^<$Q'sect'>||" -e "s|<$QX>||" \ 864 -e "s/ .*//" "$MK_DATA" # $++ 865} 866 867site_get_subpages () # return all page children of given page 868{ 869 _F_=`sed_slash_key "$1"` 870 $SED -e "/^<$Q'node'>[^ ]* $_F_<[^<>]*>\$/!d" \ 871 -e "s|^<$Q'node'>||" -e "s|<$QX>||" \ 872 -e "s/ .*//" "$MK_DATA" 873 # $++ 874} 875 876site_get_parentpage () # return parent page for given page (".." for sections) 877{ 878 _F_=`sed_slash_key "$1"` 879 $SED -e "/^<$Q'node'>$_F_ /!d" \ 880 -e "s|^<$Q'node'>[^ ]* ||" -e "s|<$QX>||" \ 881 -e "q" "$MK_DATA" # $++ 882} 883 884DX_alternative () # detect wether page asks for alternative style 885{ # which is generally a shortpage variant 886 x=`mksite_magic_option alternative $1 | sed -e "s/^ *//" -e "s/ .*//"` 887 if test ".$x" != "." ; then 888 DX_text alternative "$x" 889 fi 890} 891 892info2head_sed () # append alternative handling script to $HEAD 893{ 894 have=`info_get_entry alternative` 895 if test ".$have" != "." ; then 896 echo "/<!--mksite:alternative:$have .*-->/{" # $++ 897 echo "s/<!--mksite:alternative:$have\\( .*\\)-->/\\1/" # $++ 898 echo "q" # $++ 899 echo "}" # $++ 900 fi 901} 902info2body_sed () # append alternative handling script to $BODY 903{ 904 have=`info_get_entry alternative` 905 if test ".$have" != "." ; then 906 echo "s/<!--mksite:alternative:$have\\( .*\\)-->/\\1/" # $++ 907 fi 908} 909 910bodymaker_for_sectioninfo () 911{ 912 test ".$sectioninfo" = ".no" && return 913 _x_="<!--mksite:sectioninfo::-->" 914 _q_="\\([^<>]*[$AX][^<>]*\\)" 915 test ".$sectioninfo" != ". " && _q_="[ ][ ]*$sectioninfo\\([ ]\\)" 916 echo "s|\\(^<[hH][$NN][ >].*</[hH][$NN]>\\)$_q_|\\1$_x_\\2|" # $++ 917 echo "/$_x_/s|^|<table width=\"100%\"><tr valign=\"bottom\"><td>|" # $++ 918 echo "/$_x_/s|</[hH][$NN]>|&</td><td align=\"right\"><i>|" # $++ 919 echo "/$_x_/s|\$|</i></td></tr></table>|" # $++ 920 echo "s|$_x_||" # $++ 921} 922 923fast_href () # args "$FILETOREFERENCE" "$FROMCURRENTFILE:$F" 924{ # prints path to $FILETOREFERENCE href-clickable in $FROMCURRENTFILE 925 # if no subdirectoy then output is the same as input $FILETOREFERENCE 926 R="$2" ; test ".$R" = "." && R="$F" 927 S=`back_path "$R"` 928 if test ".$S" = "." 929 then echo "$1" # $++ 930 else _1_=`echo "$1" | \ 931 $SED -e "/^ *\$/d" -e "/^\\//d" -e "/^[.][.]/d" -e "/^[$AA]*:/d" ` 932 if test ".$_1_" = "." # don't move any in the pattern above 933 then echo "$1" # $++ 934 else echo "$S$1" # $++ prefixed with backpath 935 fi fi 936} 937 938make_back_path () # "$FILE" 939{ 940 R="$1" ; test ".$R" = "." && R="$F" 941 S=`back_path "$R"` 942 if test ".$S" != "." ; then 943 echo "s|\\(<[^<>]* href=\\\"\\)\\([$AA][^<>:]*\\\"[^<>]*>\\)|\\1$S\\2|g" 944 echo "s|\\(<[^<>]* src=\\\"\\)\\([$AA][^<>:]*\\\"[^<>]*>\\)|\\1$S\\2|g" 945 fi 946} 947 948# ============================================================== SITE MAP DATA 949# each entry needs atleast a list-title, a long-title, and a list-date 950# these are the basic information to be printed in the sitemap file 951# where it is bound the hierarchy of sect/subsect of the entries. 952 953site_map_list_title() # $file $text 954{ 955 echo "<$Q'list'>$1 $2<$QX>" >> "$MK_DATA" 956} 957info_map_list_title() # $file $text 958{ 959 echo "<$Q'list'>$2<$QX>" >> "$tmp/$1.$DATA" 960} 961site_map_long_title() # $file $text 962{ 963 echo "<$Q'long'>$1 $2<$QX>" >> "$MK_DATA" 964} 965info_map_long_title() # $file $text 966{ 967 echo "<$Q'long'>$2<$QX>" >> "$tmp/$1.$DATA" 968} 969site_map_list_date() # $file $text 970{ 971 echo "<$Q'date'>$1 $2<$QX>" >> "$MK_DATA" 972} 973info_map_list_date() # $file $text 974{ 975 echo "<$Q'date'>$2<$QX>" >> "$tmp/$1.$DATA" 976} 977 978siteinfo2sitemap () # generate <name><page><date> addon sed scriptlet 979{ # the resulting script will act on each item/line 980 # containing <!--"filename"--> and expand any following 981 # reference of <!--name--> or <!--date--> or <!--long--> 982 INP="$1" ; test ".$INP" = "." && INP="$MK_DATA" 983 _list_="s|\\\\(<!--\"\\1\"-->.*\\\\)<name href=[^<>]*>.*</name>|\\\\1<name href=\"\\1\">\\2</name>|" 984 _date_="s|\\\\(<!--\"\\1\"-->.*\\\\)<date>.*</date>|\\\\1<date>\\2</date>|" 985 _long_="s|\\\\(<!--\"\\1\"-->.*\\\\)<long>.*</long>|\\\\1<long>\\2</long>|" 986 $SED -e "s:&:\\\\&:g" \ 987 -e "s:<$Q'list'>\\([^ ]*\\) \\(.*\\)<$QX>:$_list_:" \ 988 -e "s:<$Q'date'>\\([^ ]*\\) \\(.*\\)<$QX>:$_date_:" \ 989 -e "s:<$Q'long'>\\([^ ]*\\) \\(.*\\)<$QX>:$_long_:" \ 990 -e "/^s|/!d" $INP # $++ 991} 992 993make_multisitemap () 994{ # each category gets its own column along with the usual entries 995 INPUTS="$1" ; test ".$INPUTS" = "." && INPUTS="$MK_DATA" 996 siteinfo2sitemap > "$MK_SITE" # have <name><long><date> addon-sed 997 _form_="<!--\"\\2\"--><!--use\\1--><long>\\3</long><!--end\\1-->" 998 _form_="$_form_<br><name href=\"\\2\">\\3</name><date>......</date>" 999 _tiny_="small><small><small" ; _tinyX_="small></small></small " 1000 _tabb_="<br><$_tiny_> </$_tinyX_>" ; _bigg_="<big> </big>" 1001 echo "<table width=\"100%\"><tr><td> " # $++ 1002 $SED -e "/^<$Q'[Uu]se.'>/!d" \ 1003 -e "/>[$AZ$az][$AZ$az][$AZ$az][$AZ$az]*:/d" \ 1004 -e "s|^<$Q'[Uu]se\\(.\\)'>\\([^ ]*\\) \\(.*\\)<$QX>|$_form_|" \ 1005 -f "$MK_SITE" -e "/<name/!d" \ 1006 -e "s|<!--use1-->|</td><td valign=\"top\"><b>|" \ 1007 -e "s|<!--end1-->|</b>|" \ 1008 -e "s|<!--use2-->|<br>|" \ 1009 -e "s|<!--use.-->|<br>|" -e "s/<!--[^<>]*-->/ /g" \ 1010 -e "s|<name |<$_tiny_><a |" -e "s|</name>||" \ 1011 -e "s|<date>|<small style=\"date\">|" \ 1012 -e "s|</date>|</small></a><br></$_tinyX_>|" \ 1013 -e "s|<long>|<!--long-->|" -e "s|</long>|<!--/long-->|" \ 1014 $INPUTS # $++ 1015 echo "</td><tr></table>" # $++ 1016} 1017 1018make_listsitemap () 1019{ # traditional - the body contains a list with date and title extras 1020 INPUTS="$1" ; test ".$INPUTS" = "." && INPUTS="$MK_DATA" 1021 siteinfo2sitemap > "$MK_SITE" # have <name><long><date> addon-sed 1022 _form_="<!--\"\\2\"--><!--use\\1--><name href=\"\\2\">\\3</name>" 1023 _form_="$_form_<date>......</date><long>\\3</long>" 1024 _tabb_="<td>\\ \\;</td>" 1025 echo "<table cellspacing=\"0\" cellpadding=\"0\">" # $++ 1026 $SED -e "/^<$Q'[Uu]se.'>/!d" \ 1027 -e "/>[$AZ$az][$AZ$az][$AZ$az][$AZ$az]*:/d" \ 1028 -e "s|^<$Q'[Uu]se\\(.\\)'>\\([^ ]*\\) \\(.*\\)<$QX>|$_form_|" \ 1029 -f "$MK_SITE" -e "/<name/!d" \ 1030 -e "s|<!--use\\(1\\)-->|<tr class=\"listsitemap\\1\"><td>*</td>|" \ 1031 -e "s|<!--use\\(2\\)-->|<tr class=\"listsitemap\\1\"><td>-</td>|" \ 1032 -e "s|<!--use\\(.\\)-->|<tr class=\"listsitemap\\1\"><td> </td>|" \ 1033 -e "/<tr.class=\"listsitemap3\">/s|<name [^<>]*>|&- |" \ 1034 -e "s|<!--[^<>]*-->| |g" \ 1035 -e "s|<name href=\"name:sitemap:|<name href=\"|" \ 1036 -e "s|<name |<td><a |" -e "s|</name>|</a></td>$_tabb_|" \ 1037 -e "s|<date>|<td><small style=\"date\">|" \ 1038 -e "s|</date>|</small></td>$_tabb_|" \ 1039 -e "s|<long>|<td><em><!--long-->|" \ 1040 -e "s|</long>|<!--/long--></em></td></tr>|" \ 1041 "$INPUTS" # $++ 1042 for xx in `grep "^<$Q'use.'>name:sitemap:" $INPUTS` ; do 1043 xx=`echo $xx | sed -e "s/^<$Q'use.'>name:sitemap://" -e "s|<$QX>||"` 1044 if test -f "$xx" ; then 1045 grep "<tr.class=\"listsitemap[$NN]\">" $xx # $++ 1046 fi 1047 done 1048 echo "</table>" # $++ 1049} 1050 1051_xi_include_=`echo \ 1052 "<xi:include xmlns:xi=\"http://www.w3.org/2001/XInclude\" parse=\"xml\""` 1053make_xmlsitemap () 1054{ # traditional - the body contains a list with date and title extras 1055 INPUTS="$1" ; test ".$INPUTS" = "." && INPUTS="$MK_DATA" 1056 siteinfo2sitemap > "$MK_SITE" # have <name><long><date> addon-sed 1057 _form_="<!--\"\\2\"--><name href=\"\\2\">\\3</name>" 1058 _sitefile_=`sed_slash_key "$SITEFILE"` 1059 $SED -e "/^<$Q'[Uu]se.'>/!d" \ 1060 -e "/>[$AZ$az][$AZ$az][$AZ$az][$AZ$az]*:/d" \ 1061 -e "s|^<$Q'[Uu]se\\(.\\)'>\\([^ ]*\\) \\(.*\\)<$QX>|$_form_|" \ 1062 -f "$MK_SITE" -e "/<name/!d" \ 1063 -e "/${_sitefile_}/d" \ 1064 -e "/${_sitefile_}l/d" \ 1065 -e "s|\\(href=\"[^<>]*\\)\\.html\\(\"\\)|\\1.xml\\2|g" \ 1066 -e "s|.*<name|$_xi_include_\\n |" \ 1067 -e "s|>.*</name>| />|" \ 1068 "$INPUTS" # $++ 1069} 1070 1071print_extension () 1072{ 1073 ARG="$1" ; test ".$ARG" = "." && ARG="$opt_print" 1074 case "$ARG" in 1075 -*|.*) echo "$ARG" ;; # $++ 1076 *) echo ".print" ;; # $++ 1077 esac 1078} 1079 1080from_sourcefile () 1081{ 1082 if test -f "$1" 1083 then echo "$1" 1084 elif test -f "$opt_srcdir/$1" 1085 then echo "$opt_srcdir/$1" 1086 else echo "$1" 1087 fi 1088} 1089 1090html_sourcefile () # generally just cut away the trailing "l" (ell) 1091{ # making "page.html" argument into "page.htm" return 1092 # (as a new addtion the source may be in ".dbk" xml) 1093 _SRCFILE_=`echo "$1" | $SED -e "s/l\\$//"` 1094 _XMLFILE_=`echo "$1" | $SED -e "s/\\.html/.dbk/"` 1095 if test -f "$_SRCFILE_" 1096 then echo "$_SRCFILE_" # $++ 1097 elif test -f "$_XMLFILE_" 1098 then echo "$_XMLFILE_" # $++ 1099 elif test -f "$opt_src_dir/$_SRCFILE_" 1100 then echo "$opt_src_dir/$_SRCFILE_" # $++ 1101 elif test -f "$opt_src_dir/$_XMLFILE_" 1102 then echo "$opt_src_dir/$_XMLFILE_" # $++ 1103 else echo ".//$_SRCFILE_" # $++ (not found?) 1104 fi 1105} 1106html_printerfile_sourcefile () 1107{ 1108 if test ".$printerfriendly" = "." 1109 then 1110 echo "$1" | sed -e "s/l\$//" # $++ 1111 else 1112 _ext_=`print_extension "$printerfriendly"` 1113 _ext_=`sed_slash_key "$_ext_"` 1114 echo "$1" | sed -e "s/l\$//" -e "s/$_ext_\\([.][$AA]*\\)\$/\\1/" # $++ 1115 fi 1116} 1117 1118fast_html_printerfile () { 1119 x=`html_printerfile "$1"` ; basename "$x" # $++ 1120# x=`html_printerfile "$1"` ; fast_href "$x" $2 # $++ 1121} 1122 1123html_printerfile () # generate the printerfile for a given normal output 1124{ 1125 _ext_=`print_extension "$printerfriendly" | sed -e "s/&/\\\\&/"` 1126 echo "$1" | sed -e "s/\\([.][$AA]*\\)\$/$_ext_\\1/" # $++ 1127} 1128 1129make_printerfile_fast () # generate s/file.html/file.print.html/ for hrefs 1130{ # we do that only for the $FILELIST 1131 ALLPAGES="$1" ; # ="$FILELIST" 1132 for p in $ALLPAGES ; do 1133 a=`sed_slash_key "$p"` 1134 b=`html_printerfile "$p"` 1135 if test "$b" != "$p" ; then 1136 b=`html_printerfile "$p" | sed -e "s:&:\\\\&:g" -e "s:/:\\\\\\/:g"` 1137 echo "s/<a href=\"$a\">/<a href=\"$b\">/" # $++ 1138 echo "s/<a href=\"$a\" /<a href=\"$b\" /" # $++ 1139 fi 1140 done 1141} 1142 1143echo_printsitefile_style () 1144{ 1145 _bold_="text-decoration : none ; font-weight : bold ; " 1146 echo " <style>" # $+++ 1147 echo " a:link { $_bold_ color : #000060 ; }" # $+++ 1148 echo " a:visited { $_bold_ color : #000040 ; }" # $+++ 1149 echo " body { background-color : white ; }" # $+++ 1150 echo " </style>" # $+++ 1151} 1152 1153make_printsitefile_head() # $sitefile 1154{ 1155 echo_printsitefile_style > "$MK_STYLE" 1156 $SED -e "/<title>/p" -e "/<title>/d" \ 1157 -e "/<head>/p" -e "/<head>/d" \ 1158 -e "/<\/head>/p" -e "/<\/head>/d" \ 1159 -e "/<body>/p" -e "/<body>/d" \ 1160 -e "/^.*<link [^<>]*rel=\"shortcut icon\"[^<>]*>.*\$/p" \ 1161 -e "d" $SITEFILE | $SED -e "/<head>/r $MK_STYLE" # $+++ 1162} 1163 1164 1165# ------------------------------------------------------------------------ 1166# The printsitefile is a long text containing html href markups where 1167# each of the href lines in the file is being prefixed with the section 1168# relation. During a secondary call the printsitefile can grepp'ed for 1169# those lines that match a given output fast-file. The result is a 1170# navigation header with 1...3 lines matching the nesting level 1171 1172# these alt-texts will be only visible in with a text-mode browser: 1173printsitefile_square="width=\"8\" height=\"8\" border=\"0\"" 1174printsitefile_img_1="<img alt=\"|go text:\" $printsitefile_square />" 1175printsitefile_img_2="<img alt=\"||topics:\" $printsitefile_square />" 1176printsitefile_img_3="<img alt=\"|||pages:\" $printsitefile_square />" 1177_SECT="mksite:sect:" 1178 1179echo_current_line () # $sect $extra 1180{ 1181 echo "<!--$_SECT\"$1\"-->$2" # $++ 1182} 1183make_current_entry () # $sect $file ## requires $MK_SITE 1184{ 1185 S="$1" ; R="$2" 1186 SSS=`sed_slash_key "$S"` 1187 sep=" - " ; _left_=" [ " ; _right_=" ] " 1188 echo_current_line "$S" "<!--\"$R\"--><name href=\"$R\">$R</name>$sep" \ 1189 | $SED -f "$MK_SITE" \ 1190 -e "s|<!--[^<>]*--><name |<a |" -e "s|</name>|</a>|" \ 1191 -e "/<a href=\"$SSS\"/s/<a href/$_left_&/" \ 1192 -e "/<a href=\"$SSS\"/s/<\\/a>/&$_right_/" # $+++ 1193} 1194echo_subpage_line () # $sect $extra 1195{ 1196 echo "<!--$_SECT*:\"$1\"-->$2" # $++ 1197} 1198 1199make_subpage_entry () 1200{ 1201 S="$1" ; R="$2" 1202 RR=`sed_slash_key "$R"` 1203 sep=" - " ; 1204 echo_subpage_line "$S" "<!--\"$R\"--><name href=\"$R\">$R</name>$sep" \ 1205 | $SED -f "$MK_SITE" \ 1206 -e "s|<!--[^<>]*--><name |<a |" -e "s|</name>|</a>|" # $+++ 1207} 1208 1209make_printsitefile () 1210{ 1211 # building the printsitefile looks big but its really a loop over sects 1212 INPUTS="$1" ; test ".$INPUTS" = "." && INPUTS="$MK_DATA" 1213 siteinfo2sitemap > "$MK_SITE" # have <name><long><date> addon-sed 1214 if test -d DEBUG && test -f "$MK_SITE" 1215 then FFFF=`echo "$F" | sed -e "s,/,:,g"` 1216 cp "$MK_DATA" "DEBUG/$FFFF.SITE.tmp.sed" 1217 fi 1218 1219 make_printsitefile_head $SITEFILE # $++ 1220 sep=" - " 1221 _sect1="<a href=\"#.\" title=\"section\">$printsitefile_img_1</a> ||$sep" 1222 _sect2="<a href=\"#.\" title=\"topics\">$printsitefile_img_2</a> ||$sep" 1223 _sect3="<a href=\"#.\" title=\"pages\">$printsitefile_img_3</a> ||$sep" 1224 site_get_rootsections > "$MK_SECT1" 1225 # round one - for each root section print a current menu 1226 for r in `cat "$MK_SECT1"` ; do 1227 echo_current_line "$r" "<!--mksite:sect1:A--><br>$_sect1" # $++ 1228 for s in `cat "$MK_SECT1"` ; do 1229 make_current_entry "$r" "$s" # $++ 1230 done 1231 echo_current_line "$r" "<!--mksite:sect1:Z-->" # $++ 1232 done # "$r" 1233 1234 # round two - for each subsection print a current and subpage menu 1235 for r in `cat "$MK_SECT1"` ; do 1236 site_get_subpages "$r" > "$MK_SECT2" 1237 for s in `cat "$MK_SECT2"` ; do test "$r" = "$s" && continue 1238 echo_current_line "$s" "<!--mksite:sect2:A--><br>$_sect2" # $++ 1239 for t in `cat "$MK_SECT2"` ; do test "$r" = "$t" && continue 1240 make_current_entry "$s" "$t" # $++ 1241 done # "$t" 1242 echo_current_line "$s" "<!--mksite:sect2:Z-->" # $++ 1243 done # "$s" 1244 _have_children_="0" 1245 for t in `cat "$MK_SECT2"` ; do test "$r" = "$t" && continue 1246 test "$_have_children_" = "0" && _have_children_="1" && \ 1247 echo_subpage_line "$r" "<!--mksite:sect2:A--><br>$_sect2" # $++ 1248 make_subpage_entry "$r" "$t" # $++ 1249 done # "$t" 1250 test "$_have_children_" = "1" && \ 1251 echo_subpage_line "$r" "<!--mksite:sect2:Z-->" # $++ 1252 done # "$r" 1253 1254 # round three - for each subsubsection print a current and subpage menu 1255 for r in `cat "$MK_SECT1"` ; do 1256 site_get_subpages "$r" > "$MK_SECT2" 1257 for s in `cat "$MK_SECT2"` ; do test "$r" = "$s" && continue 1258 site_get_subpages "$s" > "$MK_SECT3" 1259 for t in `cat "$MK_SECT3"` ; do test "$s" = "$t" && continue 1260 echo_current_line "$t" "<!--mksite:sect3:A--><br>$_sect3" # $++ 1261 for u in `cat "$MK_SECT3"` ; do test "$s" = "$u" && continue 1262 make_current_entry "$t" "$u" # $++ 1263 done # "$u" 1264 echo_current_line "$t" "<!--mksite:sect3:Z-->" # $++ 1265 done # "$t" 1266 _have_children_="0" 1267 for u in `cat "$MK_SECT3"` ; do test "$u" = "$s" && continue 1268 test "$_have_children_" = "0" && _have_children_="1" && \ 1269 echo_subpage_line "$s" "<!--mksite:sect3:A--><br>$_sect3" # $++ 1270 make_subpage_entry "$s" "$u" # $++ 1271 done # "$u" 1272 test "$_have_children_" = "1" && \ 1273 echo_subpage_line "$s" "<!--mksite:sect3:Z-->" # $++ 1274 done # "$s" 1275 done # "$r" 1276 echo "<a name=\".\"></a>" # $++ 1277 echo "</body></html>" # $++ 1278} 1279 1280# create a selector that can grep a printsitefile for the matching entries 1281select_in_printsitefile () # arg = "page" : return to stdout >> $P.$HEAD 1282{ 1283 _selected_="$1" ; test ".$_selected_" = "." && _selected_="$F" 1284 _section_=`sed_slash_key "$_selected_"` 1285 echo "s/^<!--$_SECT\"$_section_\"-->//" # sect3 1286 echo "s/^<!--$_SECT[*]:\"$_section_\"-->//" # children 1287 _selected_=`site_get_parentpage "$_selected_"` 1288 _section_=`sed_slash_key "$_selected_"` 1289 echo "s/^<!--$_SECT\"$_section_\"-->//" # sect2 1290 _selected_=`site_get_parentpage "$_selected_"` 1291 _section_=`sed_slash_key "$_selected_"` 1292 echo "s/^<!--$_SECT\"$_section_\"-->//" # sect1 1293 echo "/^<!--$_SECT\"[^\"]*\"-->/d" 1294 echo "/^<!--$_SECT[*]:\"[^\"]*\"-->/d" 1295 echo "s/^<!--mksite:sect[$NN]:[$AZ]-->//" 1296} 1297 1298body_for_emailfooter () 1299{ 1300 test ".$emailfooter" = ".no" && return 1301 _email_=`echo "$emailfooter" | sed -e "s|[?].*||"` 1302 _dated_=`info_get_entry updated` 1303 echo "<hr><table border=\"0\" width=\"100%\"><tr><td>" 1304 echo "<a href=\"mailto:$emailfooter\">$_email_</a>" 1305 echo "</td><td align=\"right\">" 1306 echo "$_dated_</td></tr></table>" 1307} 1308 1309# =================================================================== CSS 1310# There was another project to support sitemap build from xml files. 1311# The source format was using .dbk+xml with embedded references to .css 1312# files for visual preview in a browser. An docbook xml file with semantic 1313# outlines is far better suited for quality documentation than any html 1314# source. It happens that the xml/css support in browsers is still not 1315# very portable - especially embedded css style blocks are a nightmare. 1316# Instead we (a) grab all non-html xml markup tags (b) grab all referenced 1317# css stylesheets (c) cut out css defs from [b] that are known by [a] and 1318# (d) append those to the <style> tag in the output html file as well as 1319# (e) reformatting the defs as well as markups from tags to tag classes. 1320# Input dbk/htm 1321# <?xml-stylesheet type="text/css" href="html.css" ?> <!-- dbk/xml --> 1322# <link rel="stylesheet" type="text/css" href="sdocbook.css" /> <!-- xhtml --> 1323# <article><para> 1324# Using some <command>exe</command> 1325# </para></article> 1326# Input css: 1327# article { .. ; display : block } 1328# para { .. ; display : block } 1329# command { .. ; display : inline } 1330# Output html: 1331# <html><style type="text/css"> 1332# div .article { .. } 1333# div .para { .. } 1334# span .command { .. } 1335# </style> 1336# <div class="article"><div class="para> 1337# Using some <span class="command">exe</span> 1338# </div></div> 1339 1340css_sourcefile () 1341{ 1342 if test -f "$1" ; then echo "$1" 1343 elif test -f "$opt_src_dir/$1" ; then echo "$opt_src_dir/$1" 1344 elif echo "$1" | grep "^/" > $NULL ; then echo "$1" 1345 else echo "./$1" 1346 fi 1347} 1348 1349css_xmltags () # $SOURCEFILE 1350{ 1351 X=`echo $SOURCEFILE | sed -e "y:/:~:"` 1352 S="$SOURCEFILE" 1353 cat "$S" | $SED -e "s|>[^<>]*<|><|g" -e "s|^[^<>]*<|<|" \ 1354 -e "s|>[^<>]*\$|>|" -e "s|<|\\n|g" \ 1355 | $SED -e "/^\\//d" -e "/^ *\$/d" -e "/>/!d" -e "s|>.*||" \ 1356 | sort | uniq > "$tmp/$MK.$X.xmltags.tmp.txt" 1357} 1358 1359css_xmlstyles () # $SOURCEFILE 1360{ 1361 X=`echo $SOURCEFILE | sed -e "y:/:~:"` 1362 S="$SOURCEFILE" 1363 cat "$S" "$SITEFILE" \ 1364 | sed \ 1365 -e "s|<link *rel=['\"]*stylesheet|<?xml-stylesheet |" \ 1366 -e "/<.xml-stylesheet/!d" -e "/href/!N" -e "/href/!N" \ 1367 -e "s|^.*<.xml-stylesheet||" -e 's|^.*href="||' -e 's|".*||' \ 1368 | sort | uniq > "$tmp/$MK.$X.xmlstylesheets.tmp.txt" 1369} 1370 1371css_xmlstyles_sed () # $SOURCEFILE 1372{ 1373 X=`echo $SOURCEFILE | sed -e "y:/:~:"` 1374 S="$tmp/$MK.$X.xmltags.tmp.txt" 1375 R="$tmp/$MK.$X.xmltags.tmp.sed" 1376 rm -f "$R" 1377 { 1378 for x in 1 2 3 4 5 6 7 8 9 ; do echo "/}/d" ; echo "/{/!N" ; done 1379 echo "s|\\r||g" 1380 $SED "/^[$AZ$az$NN]/!d" "$S" | { while read xmltag ; do 1381 xmltag=`echo "$xmltag" | sed -e "s/ .*//"` 1382 _xmltag=`sed_slash_key "$xmltag"` 1383 if echo " title section " | grep " $xmltag " > $NULL ; then 1384 test "$xmltag" = "section" && continue; 1385 echo "/^ *$_xmltag *[,\\n{]/bfound" >> "$R" 1386 echo "/[,\\n] *$_xmltag *[,\\n{]/bfound" >> "$R" 1387 $SED "/^[$AZ$az$NN]/!d" "$S" | { while read xmlparent ; do 1388 xmlparent=`echo "$xmlparent" | sed -e "s/ .*//"` 1389 _xmlparent=`sed_slash_key "$xmlparent"` 1390 echo "/^ *$_xmlparent *$_xmltag *[,\\n{]/bfound" 1391 echo "/[ ,\\n] *$_xmlparent *$_xmltag *[,\\n{]/bfound" 1392 done } 1393 else 1394 echo "/^ *$_xmltag *[ ,\\n{]/bfound" 1395 echo "/[ ,\\n] *$_xmltag *[ ,\\n{]/bfound" 1396 fi 1397 done } 1398 echo "d" ; echo ":found" 1399 for x in 1 2 3 4 5 6 7 8 9 ; do echo "/}/!N" ; done 1400 $SED "/^[$AZ$az$NN]/!d" "$S" | { while read xmltag ; do 1401 xmltag=`echo "$xmltag" | sed -e "s/ .*//"` 1402 if echo " $HTMLTAGS $HTMLTAGS2" | grep " $xmltag " > $NULL ; then 1403 continue # keep html tags 1404 fi 1405 echo "s|^\\( *\\)\\($xmltag *[ ,\\n{]\\)|\\1.\\2|g" 1406 echo "s|\\([ ,\\n] *\\)\\($xmltag *[ ,\\n{]\\)|\\1.\\2|g" 1407 done } 1408 } > "$R" 1409} 1410 1411css_xmltags_css () # $SOURCEFILE 1412{ 1413 X=`echo $SOURCEFILE | sed -e "y:/:~:"` 1414 S="$tmp/$MK.$X.xmltags.tmp.sed" 1415 R="$tmp/$MK.$X.xmltags.tmp.css" 1416 { 1417 cat "$tmp/$MK.$X.xmlstylesheets.tmp.txt" | { while read xmlstylesheet ; do 1418 stylesheet=`css_sourcefile "$xmlstylesheet"` 1419 if test -f "$stylesheet" ; then 1420 echo "/* $xmlstylesheet */" 1421 cat "$stylesheet" | $SED -f "$S" 1422 else 1423 error "$xmlstylesheet : ERROR, no such stylesheet" 1424 fi 1425 done } 1426 } > "$R" 1427} 1428 1429css_xmlmapping_sed () # $SOURCEFILE 1430{ 1431 X=`echo $SOURCEFILE | sed -e "y:/:~:"` 1432 S="$tmp/$MK.$X.xmltags.tmp.txt" 1433 R="$tmp/$MK.$X.xmlmapping.tmp.sed" 1434 rm -f "$R" 1435 { 1436 for x in 1 2 3 4 5 6 7 8 9 ; do echo "/}/d" ; echo "/{/!N" ; done 1437 echo "s|\\r||g" 1438 $SED "/^[$AZ$az$NN]/!d" "$S" | { while read xmltag ; do 1439 xmltag=`echo "$xmltag" | sed -e "s/ .*//"` 1440 xmltag=`sed_slash_key "$xmltag"` 1441 echo "/^ *\\.$xmltag *[ ,\\n{]/bfound" 1442 echo "/[ ,\\n] *\\.$xmltag *[,\\n{]/bfound" 1443 done } 1444 echo "d" ; echo ":found" 1445 for x in 1 2 3 4 5 6 7 8 9 ; do echo "/}/!N" ; done 1446 echo "s/^/>>/" 1447 echo "/[\\n ]display *: *list-item/s|^.*>>|li>>|" 1448 echo "/[\\n ]display *: *table-caption/s|^.*>>|caption>>|" 1449 echo "/[\\n ]display *: *table-cell/s|^.*>>|td>>|" 1450 echo "/[\\n ]display *: *table-row/s|^.*>>|tr>>|" 1451 echo "/[\\n ]display *: *table/s|^.*>>|table>>|" 1452 echo "/[\\n ]display *: *block/s|^.*>>|div>>|" 1453 echo "/[\\n ]display *: *inline/s|^.*>>|span>>|" 1454 echo "/[\\n ]display *: *none/s|^.*>>|small>>|" 1455 echo "/^div>>.*[\\n ]list-style-type *: *disc/s|^.*>>|ul>>|" 1456 echo "/^div>>.*[\\n ]list-style-type *: *decimal/s|^.*>>|ol>>|" 1457 echo "/^span>>.*[\\n ]font-family *: *monospace/s|^.*>>|tt>>|" 1458 echo "/^span>>.*[\\n ]font-style *: *italic/s|^.*>>|em>>|" 1459 echo "/^span>>.*[\\n ]font-weight *: *bold/s|^.*>>|b>>|" 1460 echo "/^div>>.*[\\n ]white-space *: *pre/s|^.*>>|pre>>|" 1461 echo "/^div>>.*[\\n ]margin-left *: *[$NN]/s|^.*>>|blockquote>>|" 1462 $SED "/^[$AZ$az$NN]/!d" "$S" | { while read xmltag ; do 1463 xmltag=`echo "$xmltag" | sed -e "s/ .*//"` 1464 echo "s|^\\(.*\\)>> *\\.$xmltag *[ ,\\n{].*|\\1 .$xmltag|" 1465 echo "s|^\\(.*\\)>>.*[ ,\\n] *\\.$xmltag *[ ,\\n{].*|\\1 .$xmltag|" 1466 done } 1467 echo "s/^div \\.para\$/p .para/" 1468 echo "s/^span \\.ulink\$/a .ulink/" 1469 } > "$R" 1470} 1471 1472css_xmlmapping () # $SOURCEFILE 1473{ 1474 X=`echo $SOURCEFILE | sed -e "y:/:~:"` 1475 cat "$tmp/$MK.$X.xmltags.tmp.css" | \ 1476 $SED -f "$tmp/$MK.$X.xmlmapping.tmp.sed" \ 1477 > "$tmp/$MK.$X.xmlmapping.tmp.txt" 1478} 1479 1480css_scan() # $SOURCEFILE 1481{ 1482 css_xmltags 1483 css_xmlstyles 1484 css_xmlstyles_sed 1485 css_xmltags_css 1486 css_xmlmapping_sed 1487 css_xmlmapping 1488} 1489 1490tags2span_sed() # $SOURCEFILE > $++ 1491{ 1492 X=`echo $SOURCEFILE | sed -e "y:/:~:"` 1493 S="$tmp/$MK.$X.xmltags.tmp.txt" 1494 R="$tmp/$MK.$X.xmltags.tmp.css" 1495 echo "s|<[?]xml-stylesheet[^<>]*[?]>||" 1496 echo "s|<link *rel=['\"]*stylesheet[^<>]*>||" 1497 echo "s|<section[^<>]*>||g" 1498 echo "s|</section>||g" 1499 $SED "/^[$AZ$az$NN]/!d" "$S" | { while read xmltag ; do 1500 # note "xmltag=$xmltag" 1501 xmltag=`echo "$xmltag" | sed -e "s/ .*//"` 1502 if echo " $HTMLTAGS $HTMLTAGS2" | grep " $xmltag " > $NULL ; then 1503 continue # keep html tags 1504 fi 1505 _xmltag=`sed_slash_key "$xmltag"` 1506 _span_=`$SED -e "/ \\.$_xmltag\$/!d" -e "s/ .*//" -e q \ 1507 < "$tmp/$MK.$X.xmlmapping.tmp.txt"` 1508 test ".$_span_" = "." && _span_="span" 1509 _xmltag=`sed_piped_key "$xmltag"` 1510 echo "s|<$xmltag\\([\\n\\t ][^<>]*\\)url=|<$_span_ class=\"$xmltag\"\\1href=|g" 1511 echo "s|<$xmltag\\([\\n\\t >]\\)|<$_span_ class=\"$xmltag\"\\1|g" 1512 echo "s|</$xmltag\\([\\n\\t >]\\)|</$_span_\\1|g" 1513 done } 1514 cat "$tmp/$MK.$X.xmlstylesheets.tmp.txt" | { while read xmlstylesheet ; do 1515 if test -f "$xmlstylesheet" ; then 1516 R="[^<>]*href=['"'"'"]$xmlstylesheet['"'"'"][^<>]*" 1517 echo "s|<[?]xml-stylesheet$R>||" 1518 echo "s|<link[^<>]* rel=['"'"'"]*stylesheet['"'"'" ]$R>||" 1519 fi 1520 done } 1521} 1522 1523tags2meta_sed() # $SOURCEFILE > $++ 1524{ 1525 X=`echo $SOURCEFILE | sed -e "y:/:~:"` 1526 S="$tmp/$MK.$X.xmlstylesheets.tmp.txt" 1527 R="$tmp/$MK.$X.xmltags.tmp.css" 1528 cat "$tmp/$MK.$X.xmlstylesheets.tmp.txt" | { while read xmlstylesheet ; do 1529 if test -f "$xmlstylesheet" ; then 1530 echo " <style type=\"text/css\"><!--" 1531 $SED -e "s/^/ /" < "$R" 1532 echo " --></style>" 1533 break 1534 fi 1535 done } 1536} 1537 1538# ========================================================================== 1539# xml/docbook support is taking an dbk input file converting any html DBK 1540# syntax into pure docbook tagging. Each file is being given a docbook 1541# doctype so that an xml/docbook viewer can render it correctly - that 1542# is needed atleast since docbook files do not embed stylesheet infos. 1543# Most of the processing is related to remap html markup and some other 1544# shortcut markup into correct docbook markup. The result is NOT checked 1545# for being well-formed or even matching the docbook schema DTD at all. 1546 1547scan_xml_rootnode () 1548{ 1549 rootnode=`cat "$SOURCEFILE" | \ 1550 $SED -e "/<[$AZ$az$NN]/!d" -e "s/<\\([$AZ$az$NN]*\\).*/\\1/" -e q` 1551 echo "<$Q'root'>$F $rootnode<$QX>" >> "$MK_DATA" 1552} 1553 1554get_xml_rootnode () 1555{ 1556 _file_=`sed_slash_key "$F"` 1557 $SED -e "/^<$Q'root'>$_file_ /!d" \ 1558 -e "s|.* ||" -e "s|<.*||" -e q "$MK_DATA" # + 1559} 1560 1561xml_sourcefile () 1562{ 1563 _XMLFILE_=`echo "$1" | $SED -e "s/\\.xml\\$/.dbk/"` 1564 _SRCFILE_=`echo "$1" | $SED -e "s/\\.xml\\$/.htm/"` 1565 test "$1" = "$_XMLFILE_" && _XMLFILE_="///" 1566 test "$1" = "$_SRCFILE_" && _SRCFILE_="///" 1567 if test -f "$_XMLFILE_" 1568 then echo "$_XMLFILE_" # $++ 1569 elif test -f "$_SRCFILE_" 1570 then echo "$_SRCFILE_" # $++ 1571 elif test -f "$opt_src_dir/$_XMLFILE_" 1572 then echo "$opt_src_dir/$_XMLFILE_" # $++ 1573 elif test -f "$opt_src_dir/$_SRCFILE_" 1574 then echo "$opt_src_dir/$_SRCFILE_" # $++ 1575 else echo ".//$_XMLFILE_" # $++ (not found?) 1576 fi 1577} 1578 1579scan_xmlfile() 1580{ 1581 SOURCEFILE=`xml_sourcefile "$F"` 1582 $hint "'$SOURCEFILE': scanning xml -> '$F'" 1583 scan_xml_rootnode 1584 rootnode=`get_xml_rootnode | sed -e "/^h[$NN]/s|\$| <?section?>|"` 1585 $hint "'$SOURCEFILE': rootnode ('$rootnode')" 1586} 1587 1588make_xmlfile() 1589{ 1590 SOURCEFILE=`xml_sourcefile "$F"` 1591 X=`echo $SOURCEFILE | sed -e "y:/:~:"` 1592 article=`get_xml_rootnode` 1593 test ".$article" = "." && article="article" 1594 echo '<!DOCTYPE '$article' PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"' \ 1595 > "$F" 1596 echo ' "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">' \ 1597 >> "$F" 1598 cat "$tmp/$MK.$X.xmlstylesheets.tmp.txt" | { while read stylesheet ; do 1599 echo "<?xml-stylesheet type=\"text/css\" href=\"$stylesheet\" ?>" \ 1600 >> "$F" 1601 done } 1602 __secinfo="\\1<sectioninfo>\\2</sectioninfo>" 1603 cat "$SOURCEFILE" | $SED \ 1604 -e "s!<>!\ \;!g" \ 1605 -e "s!\\(&\\)\\(&\\)!\\1amp;\\2amp;!g" \ 1606 -e "s!\\(<[^<>]*\\)\\(width\\)\\(=\\)\\([$NN]*\%*\\)!\\1\\2\\3\"\\4\"!g" \ 1607 -e "s!\\(<[^<>]*\\)\\(cellpadding\\)\\(=\\)\\([$NN]*\%*\\)!\\1\\2\\3\"\\4\"!g" \ 1608 -e "s!\\(<[^<>]*\\)\\(border\\)\\(=\\)\\([$NN]*\%*\\)!\\1\\2\\3\"\\4\"!g" \ 1609 -e "s!<[?]xml-stylesheet[^<>]*>!!" \ 1610 -e "s!<link[^<>]* rel=[\'\"]*stylesheet[^<>]*>!!" \ 1611 -e "s!<[hH][$NN]!<title!g" \ 1612 -e "s!</[hH][$NN]!</title!g" \ 1613 -e "s!\\(</title> *\\)\\([^<>]*[$AZ$az$NN][^<>\r\n]*\\)\$!\\1<sub>\\2</sub>!" \ 1614 -e "s!\\(</title>.*\\)<sub>!\\1<subtitle>!g" \ 1615 -e "s!\\(</title>.*\\)</sub>!\\1</subtitle>!g" \ 1616 -e "s!\\(<section>[^<>]*\\)\\(<date>.*</date>[^<>]*\\)\$!\\1<sectioninfo>\\2</sectioninfo>!g" \ 1617 -e "s!<em>!<emphasis>!g" \ 1618 -e "s!</em>!</emphasis>!g" \ 1619 -e "s!<i>!<emphasis>!g" \ 1620 -e "s!</i>!</emphasis>!g" \ 1621 -e "s!<b>!<emphasis role=\"bold\">!g" \ 1622 -e "s!</b>!</emphasis>!g" \ 1623 -e "s!<u>!<emphasis role=\"underline\">!g" \ 1624 -e "s!</u>!</emphasis>!g" \ 1625 -e "s!<big>!<emphasis role=\"strong\">!g" \ 1626 -e "s!</big>!</emphasis>!g" \ 1627 -e "s!<\\(strike\\)>!<emphasis role=\"strikethrough\">!g" \ 1628 -e "s!<\\(s\\)>!<emphasis role=\"strikethrough\">!g" \ 1629 -e "s!</\\(strike\\)>!</emphasis>!g" \ 1630 -e "s!</\\(s\\)>!</emphasis>!g" \ 1631 -e "s!<center>!<blockquote><para>!g" \ 1632 -e "s!</center>!</para></blockquote>!g" \ 1633 -e "s!<p align=\\(\"[$AZ$az$NN]*\"\\)>!<para role=\\1>!g" \ 1634 -e "s!<[pP]>!<para>!g" \ 1635 -e "s!</[pP]>!</para>!g" \ 1636 -e "s!<\\(pre\\)>!<screen>!g" \ 1637 -e "s!<\\(PRE\\)>!<screen>!g" \ 1638 -e "s!</\\(pre\\)>!</screen>!g" \ 1639 -e "s!</\\(PRE\\)>!</screen>!g" \ 1640 -e "s!<a\\( [^<>]*\\)name=\\([^<>]*\\)/>!<anchor \\1id=\\2/>!g" \ 1641 -e "s!<a\\( [^<>]*\\)name=\\([^<>]*\\)>!<anchor \\1id=\\2/>!g" \ 1642 -e "s!<a\\( [^<>]*\\)href=!<ulink\\1url=!g" \ 1643 -e "s!</a>!</ulink>!g" \ 1644 -e "s! remap=\"url\">[^<>]*</ulink>! />!g" \ 1645 -e "s!<\\(/*\\)span\\([ ][^<>]*\\)>!<\\1phrase\\2>!g" \ 1646 -e "s!<\\(/*\\)span>!<\\1phrase>!g" \ 1647 -e "s!<small\\([ ][^<>]*\\)>!<phrase role=\"small\"\\1>!g" \ 1648 -e "s!<small>!<phrase role=\"small\">!g" \ 1649 -e "s!</small>!</phrase>!g" \ 1650 -e "s!<\\(/*\\)\\(sup\\)>!<\\1superscript>!g" \ 1651 -e "s!<\\(/*\\)\\(sub\\)>!<\\1subscript>!g" \ 1652 -e "s!\\(<\\)\\(li\\)\\(><\\)!\\1listitem\\3!g" \ 1653 -e "s!\\(></\\)\\(li\\)\\(>\\)!\\1listitem\\3!g" \ 1654 -e "s!\\(<\\)\\(li\\)\\(>\\)!\\1listitem\\3<para>!g" \ 1655 -e "s!\\(</\\)\\(li\\)\\(>\\)!</para>\\1listitem\\3!g" \ 1656 -e "s!\\(</*\\)\\(ul\\)>!\\1itemizedlist>!g" \ 1657 -e "s!\\(</*\\)\\(ol\\)>!\\1orderedlist>!g" \ 1658 -e "s!\\(</*\\)\\(dl\\)>!\\1variablelist>!g" \ 1659 -e "s!<\\(/*\\)DT>!<\\1dt>!g" \ 1660 -e "s!<\\(/*\\)DD>!<\\1dd>!g" \ 1661 -e "s!<\\(/*\\)DL>!<\\1dl>!g" \ 1662 -e "s!<BLOCKQUOTE>!<blockquote><para>!g" \ 1663 -e "s!</BLOCKQUOTE>!</para></blockquote>!g" \ 1664 -e "s!<\\(/*\\)dl>!<\\1variablelist>!g" \ 1665 -e "s!<dt\\( [^<>]*\\)>!<varlistentry\\1><term>!g" \ 1666 -e "s!<dt>!<varlistentry><term>!g" \ 1667 -e "s!</dt>!</term>!g" \ 1668 -e "s!<dd\\( [^<>]*\\)><!<listitem\\1><!g" \ 1669 -e "s!<dd><!<listitem><!g" \ 1670 -e "s!></dd>!></listitem></varlistentry>!g" \ 1671 -e "s!<dd\\( [^<>]*\\)>!<listitem\\1><para>!g" \ 1672 -e "s!<dd>!<listitem><para>!g" \ 1673 -e "s!</dd>!</para></listitem></varlistentry>!g" \ 1674 -e "s!<table[^<>]*><tr><td>\\(<table[^<>]*>\\)!\\1!" \ 1675 -e "s!\\(</table>\\)</td></tr></table>!\\1!" \ 1676 -e "s!<table\\( [^<>]*\\)>!<informaltable\\1><tgroup cols=\"2\"><tbody>!g" \ 1677 -e "s!<table>!<informaltable><tgroup cols=\"2\"><tbody>!g" \ 1678 -e "s!</table>!</tbody></tgroup></informaltable>!g" \ 1679 -e "s!\\(</*\\)tr\\([ ][^<>]*\\)>!\\1row\\2>!g" \ 1680 -e "s!\\(</*\\)tr>!\\1row>!g" \ 1681 -e "s!\\(</*\\)td\\([ ][^<>]*\\)>!\\1entry\\2>!g" \ 1682 -e "s!\\(</*\\)td>!\\1entry>!g" \ 1683 -e "s!\\(<informaltable[^<>]*[ ]width=\"100\%\"\\)!\\1 pgwide=\"1\"!g" \ 1684 -e "s!\\(<tgroup[<>]*[ ]cols=\"2\">\\)\\(<tbody>\\)!\\1<colspec colwidth=\"1*\" /><colspec colwidth=\"1*\" />\\2!g" \ 1685 -e "s!\\(<entry[^<>]*[ ]\\)width=\\(\"[$NN]*\%*\"\\)!\\1remap=\\2!g" \ 1686 -e "s!<nobr>\\([\'\`]*\\)<tt>!<cmdsynopsis><command>\\1!g" \ 1687 -e "s!</tt>\\([\'\`]*\\)</nobr>!\\1</command></cmdsynopsis>!g" \ 1688 -e "s!<nobr><\\(code\\)>\\([\`\"\']\\)!<cmdsynopsis><command>\\2!g" \ 1689 -e "s!<\\(code\\)><nobr>\\([\`\"\']\\)!<cmdsynopsis><command>\\2!g" \ 1690 -e "s!\\([\`\"\']\\)</\\(code\\)></nobr>!\\1</command></cmdsynopsis>!g" \ 1691 -e "s!\\([\`\"\']\\)</nobr></\\(code\\)>!\\1</command></cmdsynopsis>!g" \ 1692 -e "s!<nobr><\\(tt\\)>\\([\`\"\']\\)!<cmdsynopsis><command>\\2!g" \ 1693 -e "s!<\\(tt\\)><nobr>\\([\`\"\']\\)!<cmdsynopsis><command>\\2!g" \ 1694 -e "s!\\([\`\"\']\\)</\\(tt\\)></nobr>!\\1</command></cmdsynopsis>!g" \ 1695 -e "s!\\([\`\"\']\\)</nobr></\\(tt\\)>!\\1</command></cmdsynopsis>!g" \ 1696 -e "s!\\(</*\\)tt>!\\1constant>!g" \ 1697 -e "s!\\(</*\\)code>!\\1literal>!g" \ 1698 -e "s!<br>!<br />!g" \ 1699 -e "s!<br */>!<screen role=\"linebreak\">\n</screen>!g" \ 1700 >> "$F" 1701 echo "'$SOURCEFILE': " `ls -s $SOURCEFILE` ">>" `ls -s $F` 1702} 1703 1704make_xmlmaster () 1705{ 1706 SOURCEFILE=`xml_sourcefile "$F"` 1707 X=`echo $SOURCEFILE | sed -e "y:/:~:"` 1708 article="section" # book? chapter? 1709 echo '<!DOCTYPE' $article 'PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"' >$F 1710 echo ' "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">' >>$F 1711 cat "$tmp/$MK.$X.xmlstylesheets.tmp.txt" | { while read stylesheet ; do 1712 echo "<?xml-stylesheet type=\"text/css\" href=\"$stylesheet\" ?>" \ 1713 >> "$F" 1714 done } 1715 echo "<section><title>Documentation</title>" >>$F 1716 make_xmlsitemap >> $F 1717 echo "</section>" >> $F 1718 echo "'$SOURCEFILE': " `ls -s $SOURCEFILE` ">*>" `ls -s $F` 1719} 1720 1721# ========================================================================== 1722# 1723# During processing we will create a series of intermediate files that 1724# store relations. They all have the same format being 1725# =relationtype=key value 1726# where key is usually s filename or an anchor. For mere convenience 1727# we assume that the source html text does not have lines that start 1728# off with =xxxx= (btw, ye remember perl section notation...). Of course 1729# any other format would be usuable as well. 1730# 1731 1732# we scan the SITEFILE for href references to be converted 1733# - in the new variant we use a ".gets.tmp" sed script that SECTS 1734# marks all interesting lines so they can be checked later 1735# with an sed anchor of sect="[$NN]" (or sect="[$AZ]") 1736S="\\ \\;" 1737# S="[&]nbsp[;]" 1738 1739# HR and EM style markups must exist in input - BR sometimes left out 1740# these routines in(ter)ject hardspace before, between, after markups 1741# note that "<br>" is sometimes used with HR - it must exist in input 1742echo_HR_EM_PP () 1743{ 1744 echo "s%^\\($1$2$3*<a\\) \\(href=\\)%\\1 $4 \\2%" 1745 echo "s%^\\(<>$1$2$3*<a\\) \\(href=\\)%\\1 $4 \\2%" 1746 echo "s%^\\($S$1$2$3*<a\\) \\(href=\\)%\\1 $4 \\2%" 1747 echo "s%^\\($1<>$2$3*<a\\) \\(href=\\)%\\1 $4 \\2%" 1748 echo "s%^\\($1$S$2$3*<a\\) \\(href=\\)%\\1 $4 \\2%" 1749 echo "s%^\\($1$2<>$3*<a\\) \\(href=\\)%\\1 $4 \\2%" 1750 echo "s%^\\($1$2$S$3*<a\\) \\(href=\\)%\\1 $4 \\2%" 1751} 1752 1753echo_br_EM_PP () 1754{ 1755 echo_HR_EM_PP "$1" "$2" "$3" "$4" 1756 echo "s%^\\($2$3*<a\\) \\(href=\\)%\\1 $4 \\2%" 1757 echo "s%^\\(<>$2$3*<a\\) \\(href=\\)%\\1 $4 \\2%" 1758 echo "s%^\\($S$2$3*<a\\) \\(href=\\)%\\1 $4 \\2%" 1759 echo "s%^\\($2<>$3*<a\\) \\(href=\\)%\\1 $4 \\2%" 1760 echo "s%^\\($2$S$3*<a\\) \\(href=\\)%\\1 $4 \\2%" 1761 echo "s%^\\($2$3*<><a\\) \\(href=\\)%\\1 $4 \\2%" 1762 echo "s%^\\($2$3*$S<a\\) \\(href=\\)%\\1 $4 \\2%" 1763} 1764 1765echo_HR_PP () 1766{ 1767 echo "s%^\\($1<a\\) \\(href=\\)%\\1 $3 \\2%" 1768 echo "s%^\\($1$2*<a\\) \\(href=\\)%\\1 $3 \\2%" 1769 echo "s%^\\(<>$1$2*<a\\) \\(href=\\)%\\1 $3 \\2%" 1770 echo "s%^\\($S$1$2*<a\\) \\(href=\\)%\\1 $3 \\2%" 1771 echo "s%^\\($1<>$2*<a\\) \\(href=\\)%\\1 $3 \\2%" 1772 echo "s%^\\($1$S$2*<a\\) \\(href=\\)%\\1 $3 \\2%" 1773} 1774echo_br_PP () 1775{ 1776 echo_HR_PP "$1" "$2" "$3" 1777 echo "s%^\\($2*<a\\) \\(href=\\)%\\1 $3 \\2%" 1778 echo "s%^\\(<>$2*<a\\) \\(href=\\)%\\1 $3 \\2%" 1779 echo "s%^\\($S$2*<a\\) \\(href=\\)%\\1 $3 \\2%" 1780} 1781echo_sp_PP () 1782{ 1783 echo "s%^\\(<>$1*<a\\) \\(href=\\)%\\1 $2 \\2%" 1784 echo "s%^\\($S$1*<a\\) \\(href=\\)%\\1 $2 \\2%" 1785 echo "s%^\\(<><>$1*<a\\) \\(href=\\)%\\1 $2 \\2%" 1786 echo "s%^\\($S$S$1*<a\\) \\(href=\\)%\\1 $2 \\2%" 1787 echo "s%^\\(<>$1<>*<a\\) \\(href=\\)%\\1 $2 \\2%" 1788 echo "s%^\\($S$1$S*<a\\) \\(href=\\)%\\1 $2 \\2%" 1789 echo "s%^\\($1<><>*<a\\) \\(href=\\)%\\1 $2 \\2%" 1790 echo "s%^\\($1$S$S*<a\\) \\(href=\\)%\\1 $2 \\2%" 1791 echo "s%^\\($1<>*<a\\) \\(href=\\)%\\1 $2 \\2%" 1792 echo "s%^\\($1$S*<a\\) \\(href=\\)%\\1 $2 \\2%" 1793} 1794 1795echo_sp_SP () 1796{ 1797 echo "s%^\\($1<a\\) \\(href=\\)%\\1 $2 \\2%" 1798 echo "s%^\\(<>$1<a\\) \\(href=\\)%\\1 $2 \\2%" 1799 echo "s%^\\($S$1<a\\) \\(href=\\)%\\1 $2 \\2%" 1800 echo "s%^\\(<><>$1<a\\) \\(href=\\)%\\1 $2 \\2%" 1801 echo "s%^\\($S$S$1<a\\) \\(href=\\)%\\1 $2 \\2%" 1802 echo "s%^\\(<>$1<><a\\) \\(href=\\)%\\1 $2 \\2%" 1803 echo "s%^\\($S$1$S<a\\) \\(href=\\)%\\1 $2 \\2%" 1804 echo "s%^\\($1<><><a\\) \\(href=\\)%\\1 $2 \\2%" 1805 echo "s%^\\($1$S$S<a\\) \\(href=\\)%\\1 $2 \\2%" 1806 echo "s%^\\($1<><a\\) \\(href=\\)%\\1 $2 \\2%" 1807 echo "s%^\\($1$S<a\\) \\(href=\\)%\\1 $2 \\2%" 1808} 1809 1810echo_sp_sp () 1811{ 1812 echo "s%^\\($1<a\\) \\(name=\\)%\\1 $2 \\2%" 1813 echo "s%^\\(<>$1<a\\) \\(name=\\)%\\1 $2 \\2%" 1814 echo "s%^\\($S$1<a\\) \\(name=\\)%\\1 $2 \\2%" 1815 echo "s%^\\(<><>$1<a\\) \\(name=\\)%\\1 $2 \\2%" 1816 echo "s%^\\($S$S$1<a\\) \\(name=\\)%\\1 $2 \\2%" 1817 echo "s%^\\(<>$1<><a\\) \\(name=\\)%\\1 $2 \\2%" 1818 echo "s%^\\($S$1$S<a\\) \\(name=\\)%\\1 $2 \\2%" 1819 echo "s%^\\($1<><><a\\) \\(name=\\)%\\1 $2 \\2%" 1820 echo "s%^\\($1$S$S<a\\) \\(name=\\)%\\1 $2 \\2%" 1821 echo "s%^\\($1<><a\\) \\(name=\\)%\\1 $2 \\2%" 1822 echo "s%^\\($1$S<a\\) \\(name=\\)%\\1 $2 \\2%" 1823} 1824 1825make_sitemap_init() 1826{ 1827 # build a list of detectors that map site.htm entries to a section table 1828 # note that the resulting .gets.tmp / .puts.tmp are real sed-script 1829 h1="[-$AP$AK]" 1830 b1="[*=]" 1831 b2="[-$AP$AK]" 1832 b3="[:/]" 1833 q3="[:/,$AK]" 1834 echo_HR_PP "<hr>" "$h1" "sect=\"1\"" > "$MK_GETS" 1835 echo_HR_EM_PP "<hr>" "<em>" "$h1" "sect=\"1\"" >> "$MK_GETS" 1836 echo_HR_EM_PP "<hr>" "<strong>" "$h1" "sect=\"1\"" >> "$MK_GETS" 1837 echo_HR_PP "<br>" "$b1$b1" "sect=\"1\"" >> "$MK_GETS" 1838 echo_HR_PP "<br>" "$b2$b2" "sect=\"2\"" >> "$MK_GETS" 1839 echo_HR_PP "<br>" "$b3$b3" "sect=\"3\"" >> "$MK_GETS" 1840 echo_br_PP "<br>" "$b2$b2" "sect=\"2\"" >> "$MK_GETS" 1841 echo_br_PP "<br>" "$b3$b3" "sect=\"3\"" >> "$MK_GETS" 1842 echo_br_EM_PP "<br>" "<small>" "$q3" "sect=\"3\"" >> "$MK_GETS" 1843 echo_br_EM_PP "<br>" "<em>" "$q3" "sect=\"3\"" >> "$MK_GETS" 1844 echo_br_EM_PP "<br>" "<u>" "$q3" "sect=\"3\"" >> "$MK_GETS" 1845 echo_HR_PP "<br>" "$q3" "sect=\"3\"" >> "$MK_GETS" 1846 echo_br_PP "<u>" "$b2" "sect=\"2\"" >> "$MK_GETS" 1847 echo_sp_PP "$q3" "sect=\"3\"" >> "$MK_GETS" 1848 echo_sp_SP "" "sect=\"2\"" >> "$MK_GETS" 1849 echo_sp_sp "$q3" "sect=\"9\"" >> "$MK_GETS" 1850 echo_sp_sp "<br>" "sect=\"9\"" >> "$MK_GETS" 1851 $SED -e "s/\\(>\\)\\(\\[\\)/\\1 *\\2/" "$MK_GETS" > "$MK_PUTS" 1852 # the .puts.tmp variant is used to <b><a href=..></b> some hrefs which 1853 # shall not be used otherwise for being generated - this is nice for 1854 # some quicklinks somewhere. The difference: a whitspace "<hr> <a...>" 1855 echo "" > "$MK_DATA" # fresh start 1856} 1857 1858_uses_="<$Q'use\\1'>\\2 \\3<$QX>" 1859_name_="<$Q'use\\1'>name:\\2 \\3<$QX>" ; 1860 1861make_sitemap_list() 1862{ 1863 _sitefile_="$1" ; test ".$_sitefile_" = "." && _sitefile_="$SITEFILE" 1864 # scan sitefile for references pages - store as "=use+=href+ anchortext" 1865 $SED -f "$MK_GETS" -e "/<a sect=\"[$NN]\"/!d" \ 1866 -e "s|.*<a sect=\"\\([^\"]*\\)\" href=\"\\([^\"]*\\)\"[^<>]*>\\(.*\\)</a>.*|$_uses_|" \ 1867 -e "s|.*<a sect=\"\\([^\"]*\\)\" name=\"\\([^\"]*\\)\"[^<>]*>\\(.*\\)</a>.*|$_name_|" \ 1868 -e "s|.*<a sect=\"\\([^\"]*\\)\" name=\"\\([^\"]*\\)\"[^<>]*>\\(.*\\)|$_name_|" \ 1869 -e "/^<$Q/!d" -e "/^<!/d" \ 1870 "$_sitefile_" >> "$MK_DATA" 1871} 1872 1873_Uses_="<$Q'Use\\1'>\\2 \\3<$QX>" 1874_Name_="<$Q'Use\\1'>name:\\2 \\3<$QX>" ; 1875 1876make_subsitemap_list() 1877{ 1878 _sitefile_="$1" ; test ".$_sitefile_" = "." && _sitefile_="$SITEFILE" 1879 # scan sitefile for references pages - store as "=use+=href+ anchortext" 1880 $SED -f "$MK_GETS" -e "/<a sect=\"[$NN]\"/!d" \ 1881 -e "s|.*<a sect=\"\\([^\"]*\\)\" href=\"\\([^\"]*\\)\"[^<>]*>\\(.*\\)</a>.*|$_Uses_|" \ 1882 -e "s|.*<a sect=\"\\([^\"]*\\)\" name=\"\\([^\"]*\\)\"[^<>]*>\\(.*\\)</a>.*|$_Name_|" \ 1883 -e "s|.*<a sect=\"\\([^\"]*\\)\" name=\"\\([^\"]*\\)\"[^<>]*>\\(.*\\)|$_Name_|" \ 1884 -e "/^<$Q/!d" -e "/^<!/d" \ 1885 -e "s|>\\([^:./][^:./]*[./]\\)|>$2\\1|" \ 1886 "$_sitefile_" >> "$MK_DATA" 1887} 1888 1889make_sitemap_sect() 1890{ 1891 # scan used pages and store prime section group relation 'sect' and 'node' 1892 # (A) each "use1" creates "'sect'>href+ href1" for all following non-"use1" 1893 # (B) each "use1" creates "'node'>href2 href1" for all following "use2" 1894 $SED -e "/^<$Q'use.'>/!d" \ 1895 -e "/^<$Q'use1'>/{" \ 1896 -e "h" -e "s|^<$Q'use1'>\\([^ ]*\\) .*|\\1|" \ 1897 -e "x" -e "}" \ 1898 -e "s|^<$Q'use.'>\\([^ ]*\\) .*|<$Q'sect'>\\1|" \ 1899 -e G -e "s|\\n| |" -e "s|\$|<$QX>|" "$MK_DATA" >> "$MK_DATA" 1900 $SED -e "/^<$Q'use.'>/!d" \ 1901 -e "/^<$Q'use1'>/{" \ 1902 -e "h" -e "s|^<$Q'use1'>\\([^ ]*\\) .*|\\1|" \ 1903 -e "x" -e "}" \ 1904 -e "/^<$Q'use[13456789]'>/d" \ 1905 -e "s|<$Q'use.'>\\([^ ]*\\) .*|<$Q'node'>\\1|" \ 1906 -e G -e "s|\\n| |" -e "s|\$|<$QX>|" "$MK_DATA" >> "$MK_DATA" 1907} 1908 1909make_sitemap_page() 1910{ 1911 # scan used pages and store secondary group relation 'page' and 'node' 1912 # the parenting 'node' for use3 is usually a use2 (or use1 if none there) 1913 $SED -e "/^<$Q'use.'>/!d" \ 1914 -e "/^<$Q'use1'>/{" \ 1915 -e "h" -e "s|^<$Q'use1'>\\([^ ]*\\) .*|\\1|" \ 1916 -e "x" -e "}" \ 1917 -e "/^<$Q'use2'>/{" \ 1918 -e "h" -e "s|^<$Q'use2'>\\([^ ]*\\) .*|\\1|" \ 1919 -e "x" -e "}" \ 1920 -e "/^<$Q'use1'>/d" \ 1921 -e "s|^<$Q'use.'>\\([^ ]*\\) .*|<$Q'page'>\\1<$QX>|" \ 1922 -e G -e "s|\\n| |" "$MK_DATA" >> "$MK_DATA" 1923 $SED -e "/^<$Q'use.'>/!d" \ 1924 -e "/^<$Q'use1'>/{" \ 1925 -e "h" -e "s|^<$Q'use1'>\\([^ ]*\\) .*|\\1|" \ 1926 -e "x" -e "}" \ 1927 -e "/^<$Q'use2'>/{" \ 1928 -e "h" -e "s|^<$Q'use2'>\\([^ ]*\\) .*|\\1|" \ 1929 -e "x" -e "}" \ 1930 -e "/^<$Q'use[12456789]'>/d" \ 1931 -e "s|^<$Q'use.'>\\([^ ]*\\) .*|<$Q'node'>\\1<$QX>|" \ 1932 -e G -e "s|\\n| |" "$MK_DATA" >> "$MK_DATA" 1933 # and for the root sections we register ".." as the parenting group 1934 $SED -e "/^<$Q'use1'>/!d" \ 1935 -e "s|^<$Q'use.'>\\([^ ]*\\) .*|<$Q'node'>\\1 ..<$QX>|" "$MK_DATA" >> "$MK_DATA" 1936} 1937 1938echo_site_filelist() 1939{ 1940 $SED -e "/^<$Q'use.'>/!d" \ 1941 -e "s|^<$Q'use.'>||" -e "s| .*||" "$MK_DATA" 1942} 1943 1944# ========================================================================== 1945# originally this was a one-pass compiler but the more information 1946# we were scanning out the more slower the system ran - since we 1947# were rescanning files for things like section information. Now 1948# we scan the files first for global information. 1949# 1.PASS 1950 1951scan_sitefile () # $F 1952{ 1953 SOURCEFILE=`html_sourcefile "$F"` 1954 $hint "'$SOURCEFILE': scanning -> sitefile" 1955 if test "$SOURCEFILE" != "$F" ; then 1956 dx_init "$F" 1957 dx_text today "`timetoday`" 1958 short=`echo "$F" | $SED -e "s:.*/::" -e "s:[.].*::"` # basename for all exts 1959 short="$short ~" 1960 DC_meta title "$short" 1961 DC_meta date.available "`timetoday`" 1962 DC_meta subject sitemap 1963 DC_meta DCMIType Collection 1964 DC_VARS_Of "$SOURCEFILE" ; HTTP_VARS_Of "$SOURCEFILE" 1965 DC_modified "$SOURCEFILE" ; DC_date "$SOURCEFILE" 1966 DC_section "$F" 1967 DX_text date.formatted `timetoday` 1968 test ".$printerfriendly" != "." && \ 1969 DX_text "printerfriendly" `fast_html_printerfile "$F"` 1970 test ".$USER" != "." && DC_publisher "$USER" 1971 echo "'$SOURCEFILE': $short (sitemap)" 1972 site_map_list_title "$F" "$short" 1973 site_map_long_title "$F" "generated sitemap index" 1974 site_map_list_date "$F" "`timetoday`" 1975 fi 1976} 1977 1978scan_htmlfile() # "$F" 1979{ 1980 SOURCEFILE=`html_sourcefile "$F"` # SCAN : 1981 $hint "'$SOURCEFILE': scanning -> $F" # HTML : 1982 if test "$SOURCEFILE" != "$F" ; then : 1983 if test -f "$SOURCEFILE" ; then 1984 dx_init "$F" 1985 dx_text today "`timetoday`" 1986 dx_text todays "`timetodays`" 1987 DC_VARS_Of "$SOURCEFILE" ; HTTP_VARS_Of "$SOURCEFILE" 1988 DC_title "$SOURCEFILE" 1989 DC_isFormatOf "$SOURCEFILE" 1990 DC_modified "$SOURCEFILE" ; DC_date "$SOURCEFILE" ; DC_date "$SITEFILE" 1991 DC_section "$F" ; DC_selected "$F" ; DX_alternative "$SOURCEFILE" 1992 test ".$USER" != "." && DC_publisher "$USER" 1993 DX_text date.formatted "`timetoday`" 1994 test ".$printerfriendly" != "." && \ 1995 DX_text "printerfriendly" `fast_html_printerfile "$F"` 1996 sectn=`info_get_entry DC.relation.section` 1997 short=`info_get_entry DC.title.selected` 1998 site_map_list_title "$F" "$short" 1999 info_map_list_title "$F" "$short" 2000 title=`info_get_entry DC.title` 2001 site_map_long_title "$F" "$title" 2002 info_map_long_title "$F" "$title" 2003 edate=`info_get_entry DC.date` 2004 issue=`info_get_entry issue` 2005 site_map_list_date "$F" "$edate" 2006 info_map_list_date "$F" "$edate" 2007 css_scan 2008 echo "'$SOURCEFILE': '$title' ('$short') @ '$issue' ('$sectn')" 2009 else 2010 echo "'$SOURCEFILE': does not exist" 2011 site_map_list_title "$F" "$F" 2012 site_map_long_title "$F" "$F (no source)" 2013 fi ; else 2014 echo "<$F> - skipped" 2015 fi 2016} 2017 2018scan_subsitemap_long () 2019{ 2020 grep "<a href=\"[^\"]*\">" "$1" | { 2021 while read _line_ ; do 2022 _href_=`echo "$_line_" | $SED -e "s|.*<a href=\"\\([^\"]*\\)\">.*|\\1|"` 2023 _date_=`echo "$_line_" | $SED -e "s|.*<small style=\"date\">\\([^<>]*\\)</small>.*|\\1|" -e "/<a href=\"[^\"]*\">/d"` 2024 _long_=`echo "$_line_" | $SED -e "s|.*<!--long-->\\([^<>]*\\)<!--/long-->.*|\\1|" -e "/<a href=\"[^\"]*\">/d"` 2025 if test ".$_href_" != "." && test ".$_date_" != "." ; then 2026 site_map_list_date "$2$_href_" "$_date_" 2027 fi 2028 if test ".$_href_" != "." && test ".$_long_" != "." ; then 2029 site_map_long_title "$2$_href_" "$_long_" 2030 fi 2031 done 2032 } 2033} 2034 2035scan_namespec () 2036{ 2037 # nothing so far 2038 case "$1" in 2039 name:sitemap:*) 2040 short=`echo "$F" | $SED -e "s:.*/::" -e "s:[.].*::"` 2041 short=`echo "$short ~" | $SED -e "s/name:sitemap://"` 2042 site_map_list_title "$F" "$short" 2043 site_map_long_title "$F" "external sitemap index" 2044 site_map_list_date "$F" "`timetoday`" 2045 echo "'$F' external sitemap index$n" 2046 ;; 2047 name:*.htm|name:*.html) 2048 FF=`echo "$1" | $SED -e "s|name:||"` 2049 FFF=`echo "$FF" | $SED -e "s|/[^/]*\$|/|"` # dirname 2050 case "$FFF" in */*) : ;; *) FFF="" ;; esac 2051 make_subsitemap_list "$FF" "$FFF" 2052 scan_subsitemap_long "$FF" "$FFF" 2053 ;; 2054 esac 2055} 2056scan_httpspec () 2057{ 2058 # nothing so far 2059 return; 2060} 2061 2062skip_namespec () 2063{ 2064 # nothing so far 2065 return; 2066} 2067skip_httpspec () 2068{ 2069 # nothing so far 2070 return; 2071} 2072 2073# ========================================================================== 2074# and now generate the output pages 2075# 2.PASS 2076 2077head_sed_sitemap() # $filename $section 2078{ 2079 FF=`sed_piped_key "$1"` 2080 SECTION=`sed_slash_key "$2"` 2081 SECTS="sect=\"[$NN$AZ]\"" ; SECTN="sect=\"[$NN]\"" # lines with hrefs 2082 echo "s|\\(<a $SECTS href=\"$FF\">.*</a>\\)|<b>\\1</b>|" # $++ 2083 test ".$sectiontab" != ".no" && \ 2084 echo "/ href=\"$SECTION\"/s|^<td class=\"[^\"]*\"|<td |" # $++ 2085} 2086 2087head_sed_listsection() # $filename $section 2088{ 2089 # traditional.... the sitefile is the full navigation bar 2090 FF=`sed_piped_key "$1"` 2091 SECTION=`sed_slash_key "$2"` 2092 SECTS="sect=\"[$NN$AZ]\"" ; SECTN="sect=\"[$NN]\"" # lines with hrefs 2093 echo "s|\\(<a $SECTS href=\"$FF\">.*</a>\\)|<b>\\1</b>|" # $++ 2094 test ".$sectiontab" != ".no" && \ 2095 echo "/ href=\"$SECTION\"/s|^<td class=\"[^\"]*\"|<td |" # $++ 2096} 2097 2098head_sed_multisection() # $filename $section 2099{ 2100 # sitefile navigation bar is split into sections 2101 FF=`sed_piped_key "$1"` 2102 SECTION=`sed_slash_key "$2"` 2103 SECTS="sect=\"[$NN$AZ]\"" ; SECTN="sect=\"[$NN]\"" # lines with hrefs 2104 # grep all pages with a class='sect' relation to current $SECTION and 2105 # build foreach an sed line "s|$SECTS\(<a href=$F>\)|<!--sectX-->\1|" 2106 # after that all the (still) numeric SECTNs are deactivated / killed. 2107 for section in $SECTION $headsection $tailsection ; do 2108 test ".$section" = ".no" && continue 2109 $SED -e "/^<$Q'sect'>[^ ]* $section/!d" \ 2110 -e "s|<$Q'sect'>||" -e "s| .*||" \ 2111 -e "s/.*/s|<a $SECTS \\\\(href=\"&\"\\\\)|<a sect=\"X\" \\\\1|/" \ 2112 "$MK_DATA" # $++ 2113 $SED -e "/^<$Q'sect'>name:[^ ]* $section/!d" \ 2114 -e "s|<$Q'sect'>name:||" -e "s| .*||" \ 2115 -e "s/.*/s|<a $SECTS \\\\(name=\"&\"\\\\)|<a sect=\"X\" \\\\1|/" \ 2116 "$MK_DATA" # $++ 2117 done 2118 echo "s|.*<a \\($SECTN href=[^<>]*\\)>.*|<!-- \\1 -->|" # $++ 2119 echo "s|.*<a \\($SECTN name=[^<>]*\\)>.*|<!-- \\1 -->|" # $++ 2120 echo "s|\\(<a $SECTS href=\"$FF\">\\)|<b>\\1</b>|" # $++ 2121 test ".$sectiontab" != ".no" && \ 2122 echo "/ href=\"$SECTION\"/s|^<td class=\"[^\"]*\"|<td |" # $++ 2123} 2124 2125make_sitefile () # "$F" 2126{ 2127 SOURCEFILE=`html_sourcefile "$F"` 2128 if test "$SOURCEFILE" != "$F" ; then 2129 if test -f "$SOURCEFILE" ; then 2130 # remember that in this case "${SITEFILE}l" = "$F" = "${SOURCEFILE}l" 2131 info2vars_sed > $MK_VARS # have <!--title--> vars substituted 2132 info2meta_sed > $MK_META # add <meta name="DC.title"> values 2133 F_HEAD="$tmp/$F.$HEAD" ; F_FOOT="$tmp/$F.$FOOT" 2134 $CAT "$MK_PUTS" > "$F_HEAD" 2135 head_sed_sitemap "$F" "`info_get_entry_section`" >> "$F_HEAD" 2136 echo "/<head>/r $MK_META" >> "$F_HEAD" 2137 $CAT "$MK_VARS" "$MK_TAGS" >> "$F_HEAD" 2138 echo "/<\\/body>/d" >> "$F_HEAD" 2139 case "$sitemaplayout" in 2140 multi) make_multisitemap > "$F_FOOT" ;; # here we use ~foot~ to 2141 *) make_listsitemap > "$F_FOOT" ;; # hold the main text 2142 esac 2143 2144 mkpathfile "$F" 2145 $SED_LONGSCRIPT "$F_HEAD" "$SITEFILE" > $F # ~head~ 2146 $CAT "$F_FOOT" >> $F # ~body~ 2147 $SED -e "/<\\/body>/!d" -f "$MK_VARS" "$SITEFILE" >> $F #</body> 2148 echo "'$SOURCEFILE': " `ls -s $SOURCEFILE` ">->" `ls -s $F` "(sitemap)" 2149 else 2150 echo "'$SOURCEFILE': does not exist" 2151 fi fi 2152} 2153 2154make_htmlfile() # "$F" 2155{ 2156 SOURCEFILE=`html_sourcefile "$F"` # 2.PASS 2157 if test "$SOURCEFILE" != "$F" ; then 2158 if test -f "$SOURCEFILE" ; then 2159 if grep '<meta name="formatter"' "$SOURCEFILE" > $NULL ; then 2160 echo "'$SOURCEFILE': SKIP, this sourcefile looks like a formatted file" 2161 echo "'$SOURCEFILE': (may be a sourcefile in place of a targetfile?)" 2162 return 2163 fi 2164 info2vars_sed > $MK_VARS # have <!--$title--> vars substituted 2165 info2meta_sed > $MK_META # add <meta name="DC.title"> values 2166 tags2span_sed > $MK_SPAN # extern text/css -> intern css classes 2167 tags2meta_sed >>$MK_META # extern text/css -> intern css classes 2168 F_HEAD="$tmp/$F.$HEAD" ; F_BODY="$tmp/$F.$BODY" ; F_FOOT="$tmp/$F.$FOOT" 2169 $CAT "$MK_PUTS" > "$F_HEAD" 2170 case "$sectionlayout" in 2171 multi) head_sed_multisection "$F" "`info_get_entry_section`" >> "$F_HEAD" ;; 2172 *) head_sed_listsection "$F" "`info_get_entry_section`" >> "$F_HEAD" ;; 2173 esac 2174 $CAT "$MK_VARS" "$MK_TAGS" "$MK_SPAN" >> "$F_HEAD" #tag and vars 2175 echo "/<\\/body>/d" >> "$F_HEAD" #cut lastline 2176 echo "/<head>/r $MK_META" >> "$F_HEAD" #add metatags 2177 echo "/<title>/d" > "$F_BODY" #not that line 2178 $CAT "$MK_VARS" "$MK_TAGS" "$MK_SPAN" >> "$F_BODY" #tag and vars 2179 bodymaker_for_sectioninfo >> "$F_BODY" #if sectioninfo 2180 info2body_sed >> "$F_BODY" #cut early 2181 info2head_sed >> "$F_HEAD" 2182 make_back_path "$F" >> "$F_HEAD" 2183 test ".$emailfooter" != ".no" && \ 2184 body_for_emailfooter > "$F_FOOT" 2185 2186 mkpathfile "$F" 2187 $SED_LONGSCRIPT "$F_HEAD" $SITEFILE > $F # ~head~ 2188 $SED_LONGSCRIPT "$F_BODY" $SOURCEFILE >> $F # ~body~ 2189 test -f "$F_FOOT" && $CAT "$F_FOOT" >> $F # ~foot~ 2190 $SED -e "/<\\/body>/!d" -f "$MK_VARS" "$SITEFILE" >> $F #</body> 2191 echo "'$SOURCEFILE': " `ls -s $SOURCEFILE` "->" `ls -s $F` 2192 else # test -f $SOURDEFILE 2193 echo "'$SOURCEFILE': does not exist" 2194 fi ; else 2195 echo "<$F> - skipped" 2196 fi 2197} 2198 2199make_printerfriendly () # "$F" 2200{ # PRINTER 2201 printsitefile="0" # FRIENDLY 2202 P=`html_printerfile "$F"` 2203 P_HEAD="$tmp/$P.$HEAD" 2204 P_BODY="$tmp/$P.$BODY" 2205 case "$F" in 2206 ${SITEFILE}|${SITEFILE}l) 2207 printsitefile=">=>" ; BODY_TXT="$tmp/$F.$FOOT" ;; 2208 *.html) printsitefile="=>" ; BODY_TXT="$SOURCEFILE" ;; 2209 esac 2210 if grep '<meta name="formatter"' "$BODY_TXT" > $NULL ; then return; fi 2211 if test ".$printsitefile" != ".0" && test -f "$SOURCEFILE" ; then 2212 make_printerfile_fast "$FILELIST" > ./$MK_FAST 2213 $CAT "$MK_VARS" "$MK_TAGS" "$MK_FAST" > "$P_HEAD" 2214 $SED -e "/DC.relation.isFormatOf/s|content=\"[^\"]*\"|content=\"$F\"|" \ 2215 "$MK_META" > "$MK_METT" 2216 echo "/<head>/r $MK_METT" >> "$P_HEAD" # meta 2217 echo "/<\\/body>/d" >> "$P_HEAD" 2218 select_in_printsitefile "$F" >> "$P_HEAD" 2219 _ext_=`print_extension "$printerfriendly"` # head- 2220 # line_=`sed_slash_key "$printsitefile_img_2"` # back- 2221 echo "/||topics:/s| href=\"[#][.]\"| href=\"$F\"|" >> "$P_HEAD" 2222 echo "/|||pages:/s| href=\"[#][.]\"| href=\"$F\"|" >> "$P_HEAD" 2223 make_back_path "$F" >> "$P_HEAD" 2224 $CAT "$MK_VARS" "$MK_TAGS" "$MK_FAST" > "$P_BODY" 2225 make_back_path "$F" >> "$P_BODY" 2226 2227 mkpathfile "$P" 2228 $SED_LONGSCRIPT "$P_HEAD" $PRINTSITEFILE > $P # ~head~ 2229 $SED_LONGSCRIPT "$P_BODY" $BODY_TXT >> $P # ~body~ 2230 $SED -e "/<\\/body>/!d" -f $MK_VARS $PRINTSITEFILE >> $P #</body> 2231 echo "'$SOURCEFILE': " `ls -s $SOURCEFILE` "$printsitefile" `ls -s $P` 2232 fi 2233} 2234 2235 2236# ======================================================================== 2237# ======================================================================== 2238# ======================================================================== 2239 2240# ======================================================================== 2241# #### 0. INIT 2242make_sitemap_init 2243make_sitemap_list 2244make_sitemap_sect 2245make_sitemap_page 2246 2247if test -d DEBUG && test -f "$MK_DATA" 2248then FFFF=`echo "$F" | sed -e "s,/,:,g"` 2249 cp "$MK_DATA" "DEBUG/$FFFF.DATA.tmp.htm" 2250fi 2251 2252FILELIST=`echo_site_filelist` 2253if test ".$opt_filelist" != "." || test ".$opt_list" = ".file"; then 2254 for F in $FILELIST; do echo "$F" ; done ; exit # --filelist 2255fi 2256if test ".$opt_files" != "." ; then FILELIST="$opt_files" ; fi # --files 2257if test ".$FILELIST" = "."; then warn "nothing to do (no --filelist)" ; fi 2258if test ".$FILELIST" = ".SITEFILE" ; then warn "only '$SITEFILE'?!" ; fi 2259 2260for F in $FILELIST ; do case "$F" in #### 1. PASS 2261name:*) scan_namespec "$F" ;; 2262http:*|https:*|ftp:*|mailto:*|telnet:*|news:*|gopher:*|wais:*) 2263 scan_httpspec "$F" ;; 2264${SITEFILE}|${SITEFILE}l) scan_sitefile "$F" ;; # ........... SCAN SITE 2265*@*.de) 2266 echo "!! -> '$F' (skipping malformed mailto:-link)" 2267 ;; 2268../*) 2269 echo "!! -> '$F' (skipping topdir build)" 2270 ;; 2271# */*.html) 2272# echo "!! -> '$F' (skipping subdir build)" 2273# ;; 2274# */*/*/|*/*/|*/|*/index.htm|*/index.html) 2275# echo "!! -> '$F' (skipping subdir index.html)" 2276# ;; 2277*.html) scan_htmlfile "$F" # ........... SCAN HTML 2278 if test ".$opt_xml" != "." ; then 2279 F=`echo "$F" | sed -e "s/\\.html$/.xml/"` 2280 scan_xmlfile "$F" 2281 fi ;; 2282*.xml) scan_xmlfile "$F" ;; 2283*/) echo "'$F' : directory - skipped" 2284 site_map_list_title "$F" "`sed_slash_key $F`" 2285 site_map_long_title "$F" "(directory)" 2286 ;; 2287*) echo "?? -> '$F'" 2288 ;; 2289esac done 2290 2291if test ".$printerfriendly" != "." ; then # .......... PRINT VERSION 2292 _ext_=`print_extension "$printerfriendly" | sed -e "s/&/\\\\&/"` 2293 PRINTSITEFILE=`echo "$SITEFILE" | sed -e "s/\\.[$AA]*\$/$_ext_&/"` 2294 echo "NOTE: going to create printer-friendly sitefile $PRINTSITEFILE" 2295 make_printsitefile > "$PRINTSITEFILE" 2296fi 2297 2298for F in $FILELIST ; do case "$F" in #### 2. PASS 2299name:*) skip_namespec "$F" ;; 2300http:*|https:*|ftp:*|mailto:*|telnet:*|news:*|gopher:*|wais:*) 2301 skip_httpspec "$F" ;; 2302${SITEFILE}|${SITEFILE}l) make_sitefile "$F" # ........ SITE FILE 2303 if test ".$printerfriendly" != "." ; then make_printerfriendly "$F" ; fi 2304 if test ".$opt_xml" != "." ; then _old_F_="$F" 2305 F=`echo "$F" | sed -e "s/\\.html$/.xml/"` 2306 make_xmlmaster "$F" ;F="$_old_F_" 2307 fi ;; 2308*@*.de) 2309 echo "!! -> '$F' (skipping malformed mailto:-link)" 2310 ;; 2311../*) 2312 echo "!! -> '$F' (skipping topdir build)" 2313 ;; 2314# */*.html) 2315# echo "!! -> '$F' (skipping subdir build)" 2316# ;; 2317# */*/*/|*/*/|*/|*/index.htm|*/index.html) 2318# echo "!! -> '$F' (skipping subdir index.html)" 2319# ;; 2320*.html) make_htmlfile "$F" # .................. HTML FILES 2321 test ".$printerfriendly" != "." && make_printerfriendly "$F" 2322 if test ".$opt_xml" != "." ; then _old_F_="$F" 2323 F=`echo "$F" | sed -e "s/\\.html$/.xml/"` 2324 make_xmlfile "$F" ;F="$_old_F_" 2325 fi ;; 2326*.xml) make_xmlfile "$F" ;; 2327*/) echo "'$F' : directory - skipped" 2328 ;; 2329*) echo "?? -> '$F'" 2330 ;; 2331esac 2332# .............. debug .................... 2333 if test -d DEBUG && test -f "./$F" ; then 2334 FFFF=`echo "$F" | sed -e "s,/,:,g"` 2335 test -f "$tmp/$F.$DATA" && cp "$tmp/$F.$DATA" DEBUG/$FFFF.data.tmp.htm 2336 test -f "$tmp/$F.$HEAD" && cp "$tmp/$F.$HEAD" DEBUG/$FFFF.head.tmp.sed 2337 test -f "$tmp/$F.$BODY" && cp "$tmp/$F.$BODY" DEBUG/$FFFF.body.tmp.sed 2338 test -f "$tmp/$F.$FOOT" && cp "$tmp/$F.$FOOT" DEBUG/$FFFF.foot.tmp.sed 2339 for P in tags vars span meta page date list html sect \ 2340 data head body foot fast xmlmapping \ 2341 gets puts site mett sect1 sect2 sect3 style ; do 2342 test -f $tmp/$MK.$P.tmp.htm && cp $tmp/$MK.$P.tmp.htm DEBUG/$FFFF.$P.tmp.htm 2343 test -f $tmp/$MK.$P.tmp.sed && cp $tmp/$MK.$P.tmp.sed DEBUG/$FFFF.$P.tmp.sed 2344 done 2345 fi 2346done 2347 2348if test ".$opt_keeptmpfiles" = "." ; then 2349 for i in $tmp/$MK.*.tmp.htm $tmp/$MK.*.tmp.sed \ 2350 $tmp/$MK.*.tmp.css $tmp/$MK.*.tmp.txt 2351 do test -f "$i" && rm "$i" 2352 done 2353fi 2354if test ".$tmp_dir_was_created" != ".no" ; then rm $tmp/* ; rmdir $tmp ; fi 2355exit 0 2356