#!/bin/sed -f
# HTMTEX 1.0: XHTML+TEX to XHTML Converter
# Marjan Divjak / 2013-04-05


# ============================================================
# Join lines ending with \
# ============================================================
:a
/\\$/N; s/\\\n//; ta

# ============================================================
# Delete comments
# ============================================================

# Delete line comment
s:<!-- .* -->::g

# Delete block comment
/<!--/,/-->/d


# ============================================================
# Annulate escapes
# ============================================================

# Escaped HTMTEX escapes \ and '
s/\\\\/BSLASH/g
s/\\'/QUOTE/g

# Escaped TEX markup $ ^ _ { } ~ `
s/\\\$/DOLLAR/g
s/\\\^/CARET/g
s/\\_/ULINE/g
s/\\~/TILDE/g
s/\\`/BQUOTE/g
s/\\{/LBRACE/g
s/\\}/\RBRACE/g

# Escaped MATH symbols \- \* \@
s/\\-/HYPHEN/g
s/\\\*/ASTERIX/g
s/\\@/ATSIGN/g


# ============================================================
# Process tables
# ============================================================

# Change first line of div.data to table.data
s:<div class="data">:<table class="data">:g

# Change subsequent div's preformatted lines to table's rows
/<table/,/<\/div>/s:<pre>\[:<tr class="head"><td>:g
/<table/,/<\/div>/s:\]</pre>:</td></tr>:g
/<table/,/<\/div>/s:<pre>(:<tr class="sect"><td>:g
/<table/,/<\/div>/s:)</pre>:</td></tr>:g
/<table/,/<\/div>/s:<pre> :<tr class="item"><td>:g
/<table/,/<\/div>/s:</pre>:</td></tr>:g
/<table/,/<\/div>/s:|:</td><td>:g
/<table/,/<\/div>/s:!:</td><td class="num">:g

# Change last line of div.data to table.data
/<table/,/<\/div>/s:</div>:</table>:g


# ============================================================
# Process mathematics
# ============================================================

# Change tensors ~~{...} and ~~. to <u>...</u>
s:\(~~{\)\([^}]*\)\(}\):<u>\2</u>:g
s:\(~~\)\(.\):<u>\2</u>:g

# Change vectors ~{...} and ~. into <b>...</b>
s:\(~{\)\([^}]*\)\(}\):<b>\2</b>:g
s:\(~\)\([^=]\):<b>\2</b>:g

# Change scalars `{...} and `. into <i>...</i>
s:\(`{\)\([^}]*\)\(}\):<i>\2</i>:g
s:\(`\)\(.\):<i>\2</i>:g

# Change subscripts _{...} and _. into <sub>...</sub>
s:\(_{\)\([^}]*\)\(}\):<sub>\2</sub>:g
s:\(_\)\(.\):<sub>\2</sub>:g

# Change superscripts ^{...} and ^. into <sup>...</sup>
s:\(\^{\)\([^}]*\)\(}\):<sup>\2</sup>:g
s:\(\^\)\(.\):<sup>\2</sup>:g

# Change each displayed math line into table.math
s:<p>\$:<table class="math"><tr>\
            <td>:g
s:\({\)\([^:]*\)\(\:\)\([^:}]*\)\(}\):</td>\
            <td><p class="nom">\2</p>\
                <p class="den">\4</p></td>\
            <td>:g
s-\({\)\([^:}]*\)\(:\)\([^:}]*\)\(:\)\([^}]*\)\(}\)-</td>\
            <td><p class="top">\2</p>\
                <p class="mid">\4</p>\
                <p class="bot">\6</p></td>\
            <td>-g
/\[\[/s:|:</p>\
                <p class="mtr">:g
s:\]\[:</p></td>\
            <td><p class="mtr">:g
s:\[\[:</td>\
            <td class="left"></td>\
            <td><p class="mtr">:g
s:\]\]:</p></td>\
            <td class="right"></td>\
            <td>:g

s:<td></td>::g
s:\$</p>:</td></tr></table>:g

# Change inline math segments $...$ into span.math
s:\(\$\)\([^$]*\)\(\$\):<span class="math">\2</span>:g


# ============================================================
# Insert Unicode
# ============================================================

# Slovenian characters
s/c'/č/g 
s/s'/š/g
s/z'/ž/g 
s/C'/Č/g  
s/S'/Š/g   
s/Z'/Ž/g  

# Croatian characters
s/Q'/Ć/g  
s/q'/ć/g  
s/D'/Đ/g   
s/d'/đ/g   

# German characters
s/U'/Ü/g  
s/u'/ü/g  
s/O'/Ö/g  
s/o'/ö/g 
s/A'/Ä/g 
s/a'/ä/g  

# Upper Greek letters
s/\\Gamma/Γ/g
s/\\Delta/Δ/g
s/\\Theta/Θ/g
s/\\Lambda/Λ/g
s/\\Xi/Ξ/g
s/\\Pi/Π/g
s/\\Sigma/Σ/g
s/\\Phi/Φ/g
s/\\Psi/Ψ/g
s/\\Omega/Ω/g

# Lower Greek letters
s/\\alpha/α/g
s/\\beta/β/g
s/\\gamma/γ/g
s/\\delta/δ/g
s/\\epsilon/ε/g
s/\\zeta/ζ/g
s/\\eta/η/g
s/\\theta/θ/g
s/\\kappa/κ/g
s/\\lambda/λ/g
s/\\mu/μ/g
s/\\nu/ν/g
s/\\xi/ξ/g
s/\\pi/π/g
s/\\chi/χ/g
s/\\rho/ρ/g
s/\\sigma/σ/g
s/\\tau/τ/g
s/\\phi/φ/g
s/\\varphi/ϕ/g
s/\\psi/ψ/g
s/\\omega/ω/g

# Typographic symbols
s/\.\.\./\\hellip/g
s/---/\\emdash/g
s/--/\\endash/g

s/\\figdash/‒/g
s/\\endash/–/g
s/\\emdash/—/g
s/\\hellip/…/g
s/\\sect/§/g
s/\\copyright/©/g
s/\\registered/®/g
s/\\square/■/g
s/\\wsquare/□/g
s/\\diamond/♦/g
s/\\wdiamond/♢/g
s/\\loz/◊/g 
s/\\ / /g
 
# Make some chars big
s:\\Int:<big>\\int</big>:g
s:\\Oint:<big>\\oint</big>:g
s:\\Sum:<big>\\sum</big>:g
s:\\Prod:<big>\\prod</big>:g
s:\\Root:<big>\\root</big>:g

# Mathematical symbols
s/-/\\minus/g
s/\*/\\times/g
s/@/\\partial/g
s/ \. / \\middot /g

s/==/\\equiv/g   
s/!=/\\ne/g
s/%=/\\approx/g   
s/~=/\\sim/g
s/:=/\\propto/g   
s/+-/\\pm/g 
s/-+/\\mp/g  
s/-|/\\perp/g  
s/||/\\parto/g   

s/\\Lag/ℒ/g
s/\\Ham/ℋ/g
s/\\hbar/ħ/g
s/\\infty/∞/g
s/\\permil/‰/g
s/\\deg/°/g
s/\\minus/−/g
s/\\min/′/g
s/\\sec/″/g
s/\\prime/′/g
s/\\pprime/″/g
s/\\pm/±/g
s/\\mp/∓/g
s/\\oplus/⊕/g
s/\\middot/·/g
s/\\times/×/g
s/\\divide/÷/g
s:\\fract:∕:g
s/\\bull/•/g
s/\\fras/⁄/g
s/\\root/√/g
s/\\sum/∑/g
s/\\prod/∏/g
s/\\partial/∂/g
s/\\del/∇/g
s/\\int/∫/g
s/\\oint/∮/g
s/\\equiv/≡/g
s/\\eq/=/g
s/\\ne/≠/g
s/\\sim/∼/g
s/\\approx/≈/g
s/\\propto/∝/g
# s/\\gt/>/g
s/\\ge/≥/g
s/\\gg/≫/g
# s/\\lt/</g
s/\\le/≤/g
s/\\ll/≪/g
s/\\ls/≲/g
s/\\gs/≳/g
s/\\isin/∈/g

s/\\abs/|/g
s/\\bra/〈/g
s/\\ket/〉/g
s/\\perp/⊥/g
s/\\parto/∥/g
s/\\oline/‾/g

s/\\larr/←/g
s/\\uarr/↑/g
s/\\rarr/→/g
s/\\darr/↓/g
s/\\harr/↔/g
s/\\varr/↕/g

s/\\lArr/⇐/g
s/\\uArr/⇑/g
s/\\rArr/⇒/g
s/\\dArr/↓/g
s/\\hArr/⇔/g
s/\\vArr/⇕/g

s/\\LArr/⟸/g
s/\\RArr/⟹/g
s/\\HArr/⟺/g

# Diacritics
s/\\hat/̂/g
s/\\tld/̃/g
s/\\bar/̄/g
s/\\ddot/̈/g
s/\\dot/̇/g


# ============================================================
# Restore escapes
# ============================================================

s/BSLASH/\\/g
s/BQUOTE/`/g
s/QUOTE/'/g

s/DOLLAR/\$/g
s/CARET/\^/g
s/ULINE/_/g
s/TILDE/~/g
s/LBRACE/{/g
s/RBRACE/}/g

s/HYPHEN/-/g
s/ASTERIX/\*/g
s/ATSIGN/@/g

# end
