ref: 825b7e6424d8bed086c576f79997bf8704143bb8
dir: /txt2ebook/
#!/bin/awk -f # if someone wants to use that: # ‥text‥ to print italic # ‥‥text‥‥ to print bold function parsed(a){ if(dontparse) return a gsub(/‥‥[^‥]+‥‥/, "<b>&</b>", a) gsub(/‥‥/, "", a) gsub(/‥[^‥]+‥/, "<i>&</i>", a) gsub(/‥/, "", a) return a } BEGIN { print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" print "<html xmlns=\"http://www.w3.org/1999/xhtml\"" print " xmlns:epub=\"http://www.idpf.org/2007/ops\"" print " xml:lang=\"en\">" print "<!-- end defs -->" } firstheader && NR == 1 { Title = parsed($0) print "<!-- begin header -->" print "<head>" printf " <title>%s</title>\n", Title print "</head>" print "<!-- end header -->" print "<!-- begin body -->" print "<body>" printf "<h1>%s</h1>\n", Title next } $1 ~ /^\[\[\[ebook/ { isebookblock = 1 next } $1 ~ /^\[\[\[/ { ignore = 1 next } $1 ~ /^\]\]\]/ { ignore = 0 isebookblock = 0 next } ignore { next } isebookblock { print next } $1 ~ /^#+$/ { l = length($1) $1 = "" sub(/^[ \t]*/, "") if (isparagraph) print " </p>" while (issection >= l){ printf " </section><!-- %d -->\n", issection issection-- } if (l == 1) printf " <section epub:type=\"chapter\"><!-- %d -->\n", l if (l >= 2) printf " <section><!-- %d -->\n", l printf " <h%d>%s</h%d>\n\n", l+1, parsed($0), l+1 istitle = 1 issection = l next } $1 ~ /^-/ { $1 = "" sub(/^[ \t]*/, "") if (!isitem) print "<ul>" printf "<li>%s</li>\n", parsed($0) isitem = 1 next } /^$/ { istitle = 0 previousempty = 1 if (isitem) { print "</ul>" isitem = 0 } if (isparagraph) { print " </p>" isparagraph = 0 } next } previousempty { printf " <p>" print parsed($0) previousempty = 0 isparagraph = 1 next } !previousempty { printf " %s\n", parsed($0) } END { print "<!-- END everything -->" if (isparagraph) print " </p>" while (issection > 0){ printf " </section><!-- %d -->\n", issection issection-- } print "</body>" print "</html>" }