[Tailorization of code/sh/sed tailor@sange.fi**20050628104003 Import of the upstream sources from Repository: /home/atehwa/cvs Module: code/sh/sed Revision: 2003-05-16 21:21:53 by atehwa ] { adddir ./test addfile ./TODO addfile ./blkmarkup addfile ./inlmarkup addfile ./litws addfile ./normlbr addfile ./rmescape addfile ./test/koe.inlmarkup addfile ./test/koe.litws addfile ./test/koe.normlbr addfile ./test/koe.rmescape addfile ./test/res.combined addfile ./test/res.inlmarkup addfile ./test/res.litws addfile ./test/res.normlbr addfile ./test/res.rmescape addfile ./test/test addfile ./txt2html.sed addfile ./w2html.awk hunk ./TODO 1 +Tekemistä erilaisissa softissa + +txt2html.sed: +- korjata peräkkäisten listojen toiminta? + +toteutetut asiat: + +- Monilinjalistat +- määrittelylistat +- korostuskeinot +- kaksi eri otsikkotasoa +- väliviivat +- blockquote +- title + hunk ./blkmarkup 1 +#!/bin/sed -f + +/^\[\[\[.* blkmarkup/,/^\]\]\]/ { +/^\[\[\[/ b pass +/^\]\]\]/ b pass +b process +} +/^\[\[\[/,/^\]\]\]/ { +: pass +p +d +} +: process + +/./! b pass +/\n$/!{ +N +b process +} hunk ./inlmarkup 1 +#!/bin/sed -f + +/^\[\[\[.* inlmarkup/,/^\]\]\]/ { +/^\[\[\[/ b pass +/^\]\]\]/ b pass +b process +} +/^\[\[\[/,/^\]\]\]/ { +: pass +p +d +} +: process + +s#\([ \n("'-]\)/\([^/]*\)/\([ \n,.;:?!)"'-]\)#\1\2\3#g +s#\([ \n("'-]\)_\([^_]*\)_\([ \n,.;:?!)"'-]\)#\1\2\3#g +s#\([ \n("'-]\)\*\([^*]*\)\*\([ \n,.;:?!)"'-]\)#\1\2\3#g +s#\([ \n("'-]\)''\([^']*\)''\([ \n,.;:?!)"'-]\)#\1\2\3#g + +/[ \n("'-]\//,/\/[ \n,.;:?!)"'-]/ { +s#/\([ \n,.;:?!)"'-]\)#\1# +s#\([ \n("'-]\)/#\1# +} + +/[ \n("'-]_/,/_[ \n,.;:?!)"'-]/ { +s#_\([ \n,.;:?!)"'-]\)#\1# +s#\([ \n("'-]\)_#\1# +} + +/[ \n("'-]\*/,/\*[ \n,.;:?!)"'-]/ { +s#\*\([ \n,.;:?!)"'-]\)#\1# +s#\([ \n("'-]\)\*#\1# +} + +/[ \n("-]''/,/''[ \n,.;:?!)"-]/ { +s#''\([ \n,.;:?!)"-]\)#\1# +s#\([ \n("-]\)''#\1# +} + +s#http://\([A-Za-z0-9][A-Za-z0-9]*[^ \n()A-Za-z0-9]~*\?*\)*[A-Za-z0-9][A-Za-z0-9]*/*#&#g +s#img://\(\([A-Za-z0-9][A-Za-z0-9]*[^ \n()A-Za-z0-9]~*\?*\)*[A-Za-z0-9][A-Za-z0-9]*/*\)##g +s#mailto:[A-Za-z0-9][A-Za-z0-9]*\(\.[A-Za-z0-9][A-Za-z0-9]*\)*@[A-Za-z0-9][A-Za-z0-9]*\(\.[A-Za-z0-9][A-Za-z0-9]*\)*#&#g + hunk ./litws 1 +#!/bin/sed -f + +/^\[\[\[.* litws/,/^\]\]\]/ { +/^\[\[\[/ b pass +/^\]\]\]/ b pass +b process +} +/^\[\[\[/,/^\]\]\]/ { +: pass +p +d +} +: process + +s/$/
/ +s/ / /g +s/ /\  /g hunk ./normlbr 1 +#!/bin/sed -f + +: begin + +/^\[\[\[.* normlbr/,/^\]\]\]/ { +/^\[\[\[/ b pass +/^\]\]\]/ b pass +b process +} +/^\[\[\[/,/^\]\]\]/ { +: pass +p +d +} +: process + +s/[ ]* *$// +s/^\n// +/./! { + p + : consume + N + s/^[ \t\n ]*// + /./! b consume + b begin +} hunk ./rmescape 1 +#!/bin/sed -f + +/^\[\[\[.* comment/,/^\]\]\]/ d +/^\[\[\[/ d +/^\]\]\]/ d + hunk ./test/koe.inlmarkup 1 +Ensimmäinen kappale. +Hankalaa. + +Toinen kappale. *Lihavoitu*. +What really makes life _worth +living_? You should say. + +Kolmas kappale. *Yksi lihavointi +ylittää rivin*, /toinen kursivointi +[[[ +escape-sekvenssin (jossa on /oma muotoilu/) +ja _toinen_ +]]] +ja rivin/. Toisen ei kuuluisi tulla mukaan. + +Sitten vielä muutama _muotoilu +[[[ inlmarkup +escape-sekvenssin *sisällä* (huomaa_ /ettei +ulkopuolella aloitettu/ ylitä *rajaa mutta +]]] +sisällä kaikki* toimii niin kuin kuuluukin... + +Viiden kappale. http://c2.com/cgi/wiki?FooBar, mistä +kohtaa linkki katkaistaan? (mailto:atehwa@sange.fi) hunk ./test/koe.litws 1 +Pitäisi tulla +[[[ +Ei pitäisi tulla +]]] +Pitäisi tulla +[[[ litws +Pitäisi tulla +]]] +[[[ +Ei pitäisi tulla +[[[ litws +Pitäisi tulla +]]] +Tuleeko? Hm. +]]] +Tuleeko? Hm. hunk ./test/koe.normlbr 1 +foo +bar + +baz + + +quux +sooz +jfoiewa jwioef aie jfoiwj efa +fa jewoi jfweoij öewai + + + +[[[ +barfoo +bar + + +jogas + +mogr +]]] +Doohickey +[[[ normlbr +fjewiojifew + + + +fjeawoijoifjewa +f +weafjieowjfaweofwa +fwejia jfoiwea oijfawea jfe +]]] + +vielä yksi +[[[ +lopetetaan kesken + + + + + +literaalin hunk ./test/koe.rmescape 1 + +joo jotian jotian +tsegotsego +[[[ foo +fjewoi fw +fw aeioj fwea +f jwieaefwa + + +f wjoeiaojif wea +]]] +fjwaeoij +fewjaoij + +[[[ +Ekspl +[[[ foo comment +Ei tässä oo mitään järkee. Otetaan pois. +]]] +fjiw jj +fwejoi ji +ewjfaoi +]]] hunk ./test/res.combined 1 +Pitäisi  tulla
+Ei pitäisi tulla +Pitäisi  tulla
+Pitäisi      tulla
+Ei pitäisi tulla +Pitäisi    tulla
+Tuleeko? Hm. +Tuleeko?    Hm.
+Ensimmäinen kappale.
+Hankalaa.
+
+Toinen kappale. Lihavoitu.
+What really makes life worth
+living
? You should say.
+
+Kolmas kappale.  Yksi lihavointi
+ylittää rivin
, toinen kursivointi
+escape-sekvenssin (jossa on /oma muotoilu/) +ja _toinen_ +ja rivin
.  Toisen ei kuuluisi tulla mukaan.
+
+Sitten vielä muutama muotoilu
+escape-sekvenssin sisällä (huomaa
ettei +ulkopuolella aloitettu ylitä rajaa mutta +sisällä kaikki toimii niin kuin kuuluukin...
+
+Viiden kappale. http://c2.com/cgi/wiki?FooBar, mistä
+kohtaa linkki katkaistaan? (mailto:atehwa@sange.fi)
hunk ./test/res.inlmarkup 1 +Ensimmäinen kappale. +Hankalaa. + +Toinen kappale. Lihavoitu. +What really makes life worth +living? You should say. + +Kolmas kappale. Yksi lihavointi +ylittää rivin, toinen kursivointi +[[[ +escape-sekvenssin (jossa on /oma muotoilu/) +ja _toinen_ +]]] +ja rivin. Toisen ei kuuluisi tulla mukaan. + +Sitten vielä muutama muotoilu +[[[ inlmarkup +escape-sekvenssin sisällä (huomaa ettei +ulkopuolella aloitettu ylitä rajaa mutta +]]] +sisällä kaikki toimii niin kuin kuuluukin... + +Viiden kappale. http://c2.com/cgi/wiki?FooBar, mistä +kohtaa linkki katkaistaan? (mailto:atehwa@sange.fi) hunk ./test/res.litws 1 +Pitäisi  tulla
+[[[ +Ei pitäisi tulla +]]] +Pitäisi  tulla
+[[[ litws +Pitäisi      tulla
+]]] +[[[ +Ei pitäisi tulla +[[[ litws +Pitäisi    tulla
+]]] +Tuleeko? Hm. +]]] +Tuleeko?    Hm.
hunk ./test/res.normlbr 1 +foo +bar + +baz + +quux +sooz +jfoiewa jwioef aie jfoiwj efa +fa jewoi jfweoij öewai + +[[[ +barfoo +bar + + +jogas + +mogr +]]] +Doohickey +[[[ normlbr +fjewiojifew + +fjeawoijoifjewa +f +weafjieowjfaweofwa +fwejia jfoiwea oijfawea jfe +]]] + +vielä yksi +[[[ +lopetetaan kesken + + + + + +literaalin hunk ./test/res.rmescape 1 + +joo jotian jotian +tsegotsego +fjewoi fw +fw aeioj fwea +f jwieaefwa + + +f wjoeiaojif wea +fjwaeoij +fewjaoij + +Ekspl +fjiw jj +fwejoi ji +ewjfaoi hunk ./test/test 1 +#!/bin/sh + +# TODO merge testing of entify here + +for i in litws normlbr inlmarkup rmescape ; do + echo "Testing $i:" + ../$i koe.$i | diff -u res.$i - +done + +echo "Testing combined:" +cat koe.litws koe.inlmarkup | ../litws | ../inlmarkup | ../rmescape | diff -u res.combined - hunk ./txt2html.sed 1 +#!/bin/sed -f + +1i\ + + +/./{ + s# $## + s# # #g + s#&#\&#g + s#<#\<#g + s#>#\>#g + s#å#\å#g + s#ä#\ä#g + s#ö#\ö#g + s#Å#\Å#g + s#Ä#\Ä#g + s#Ö#\Ö#g + H + $b emit + d +} + +/./!{ + :emit + x + 1,/./{ + /./{ + h + s#^.*$# & #p + s#.*## + x + } + } + /^[ \n]*$/d + /^\n *---* *$/c\ +
+ /^\n *___* *$/c\ +
+ + /^\n\([A-Za-np-z][^\n]*\)\n *[-*o.] .*/{ + h + s##

\1

#p + s#.*## + x + s#^\n[A-Za-np-z][^\n]*## + } + + /^\n[A-Za-np-z]/,/^\n *[-*o.] /{ + /^\n *[-*o.] /i\ +
    + } + /^\n *[-*o.] /,/^\n[A-Za-np-z]/{ + /^\n[A-Za-np-z]/{ + i\ +
+ b eiul + } + $a\ + + s#\n *[-*o.] \([^\n]*\(\n *[^ .o*-][^\n]*\)*\)#
  • \1
  • \ +#g + } + : eiul + + /^\n\([A-Za-z][^\n]*\)\n *[1-9][0-9]*[.):] .*/{ + h + s##

    \1

    #p + s#.*## + x + s#^\n[A-Za-z][^\n]*## + } + + /^\n[A-Za-z]/,/^\n *[1-9][0-9]*[.):] /{ + /^\n *[1-9][0-9]*[.):] /i\ +
      + } + /^\n *[1-9][0-9]*[.):] /,/^\n[A-Za-z]/{ + /^\n[A-Za-z]/{ + i\ +
    + b eiol + } + $a\ + + s#\n *[1-9][0-9]*[.):] \([^\n]*\(\n *[^ 0-9][^\n]*\)*\)#
  • \1
  • \ +#g + } + : eiol + + /^\n[A-Za-z][^\n]*\n[A-Za-z]/,/^\(\n[A-Za-z][^\n]*\)*\n /{ + /^\(\n[A-Za-z][^\n]*\)*\n /i\ +
    + } + /^\(\n[A-Za-z][^\n]*\)*\n /,/^\n[A-Za-z][^\n]*\n[A-Za-z]/{ + /^\n[A-Za-z][^\n]*\n[A-Za-z]/{ + i\ +
    + b eidl + } + $a\ + + s#\n\([A-Za-z][^\n]*\(\n[A-Za-z][^\n]*\)*\)#
    \1
    #g + s#\n\( [^\n<]*\(\n [^\n<]*\)*\)#
    \1
    #g + } + : eidl + + /^\n\([^\n]*: *\)\n>[^\n]*$/{ + h + s##

    \1

    #p + s#.*## + x + s#^\n[^\n]*: *\n#\ +# + } + + /^\(\(\n>[^\n]*\)*\)$/{ + s##
    \1
    # + s#\n> *\n>#\ +
    #g + s#\n>#\ +#g + } + + s#^\n\([^\na-z]*\)\(\n[- =~"]*\)*$#

    \1

    # + s#^\n\([^\n]*\)\(\n[- =~"]*\)*$#

    \1

    # + s#^\n\(.*\)$#

    \1

    # + + s#\([ \n("'-]\)/\([^/]*\)/\([ \n,.;:?!)"'-]\)#\1\2\3#g + s#\([ \n("'-]\)_\([^_]*\)_\([ \n,.;:?!)"'-]\)#\1\2\3#g + s#\([ \n("'-]\)\*\([^*]*\)\*\([ \n,.;:?!)"'-]\)#\1\2\3#g + + s#http://\([A-Za-z0-9][A-Za-z0-9]*[^ \n()A-Za-z0-9]~*\)*[A-Za-z0-9][A-Za-z0-9]*/*#&#g +} + +$a\ + + hunk ./w2html.awk 1 +#!/usr/bin/env mawk -f + +BEGIN { + RS = "\r?\n([ \t]*\r?\n)+" + FS = "\r?\n" + ORS = "\n\n" + OFS = "\n" + enum = "^[ \t]*[0-9]+[.):][ \t]" + list = "^[ \t]*[-*o.][ \t]" + ind = "^(\t| )" + bigind = "^(\t+ | )" + quote = "^[:|>] " + line = "^[ \t]*(---+|===+|___+)[ \t]*$" + hdr = "^[ \t]*#+.+#+[ \t]*$" + norm = "^([A-Za-np-z]|o[a-z])" + state = "norm" + titleprinted = 0 + + print "" +} + +function guess_para_mode() { + if ( /^[ \t\r\n]*$/ ) return "empty" + if ( $1 ~ bigind && $2 ~ bigind ) return "pre" + if ( $1 ~ ind && $2 ~ ind ) return "quote" + if ( $1 ~ norm && $2 ~ norm && $3 ~ ind ) return "defs" + if ( $1 ~ norm && $2 ~ ind ) return "defs" + if ( $2 ~ line && $3 == "" ) return "hdr" + if ( $1 ~ line ) return "sep" + if ( $1 ~ enum || $2 ~ enum ) return "enum" + if ( $1 ~ list || $2 ~ list ) return "list" + if ( $1 ~ quote || $2 ~ quote ) return "quote" + if ( $1 ~ hdr ) return "hdr" + if ( $1 ~ ind ) return "pre" +} + +function peel_explanation() { + if ( ( state == "norm" && $1 ~ norm && $2 ~ enum ) || + ( state == "norm" && $1 ~ norm && $2 ~ list ) || + ( state == "norm" && $1 ~ norm && $2 ~ quote ) ) + { print handle_inlines( $1 ); $1 = "" } +} + +function state_changes() { + ostate = state + state = guess_para_mode() + if ( ostate == "defs" && state != "defs" ) print "" + if ( ostate == "enum" && state != "enum" ) print "" + if ( ostate == "list" && state != "list" ) print "" + if ( ostate != "defs" && state == "defs" ) print "
    " + if ( ostate != "enum" && state == "enum" ) print "
      " + if ( ostate != "list" && state == "list" ) print "
        " +} + +{ + peel_explanation() + state_changes() + if ( state == "empty" ) next + if ( ! titleprinted ) { + print " " escape( $1 ) " " + titleprinted = 1 + } +} + +END { + if ( state == "defs" ) print "
    " + if ( state == "enum" ) print "" + if ( state == "list" ) print "" + + print "" +} }