[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 ""
+}
}