Advertisement
Francoo

HTML to LaTeX translator [ad hoc]

Jun 20th, 2015
513
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Awk 4.87 KB | None | 0 0
  1. #!/bin/gawk -E
  2.  
  3. {
  4.     parsed = $0
  5.  
  6.     if( $0 ~ /<section .*>/) {
  7.         if( $0 ~ /<section [a-zA-Z ]+>/) {
  8.             parsed = gensub(/<section ([a-zA-Z ]+)>/,"\\\\chapter*{\\1}","g",parsed);
  9.         }
  10.         if( $0 ~ /<section [0-9]+ &ndash; .*>/) {
  11.             parsed = gensub(/<section [0-9]+ \&ndash; (.*)>/,"\\\\chapter{\\1}","g",parsed);
  12.         }
  13.         if( $0 ~ /<section [0-9]+.[0-9]+ &ndash; .*>/) {
  14.             parsed = gensub(/<section [0-9]+.[0-9]+ \&ndash; (.*)>/,"\\\\section{\\1}","g",parsed);
  15.         }
  16.         if( $0 ~ /<section [0-9]+.[0-9]+.[0-9]+ &ndash; .*>/) {
  17.             parsed = gensub(/<section [0-9]+.[0-9]+.[0-9]+ \&ndash; (.*)>/,"\\\\subsection{\\1}","g",parsed);
  18.         }
  19.     }
  20.  
  21.     # parsed = gensub(/(<code>[^<>]*)\\\\([^<>]*<\/code>)/, "\\1\\\\\\\\\\\\\\2", "g", parsed);
  22.     # parsed = gensub(/(<code>[^<>]*)\\([^<>\\]*<\/code>)/, "\\1\\\\\\\\\\2", "g", parsed);
  23.     # parsed = gensub(/(<code>[^<>]*)\}([^<>]*<\/code>)/, "\\1\\\\}\\2", "g", parsed);
  24.     # parsed = gensub(/(<code>[^<>]*)\{([^<>]*<\/code>)/, "\\1\\\\{\\2", "g", parsed);
  25.     # parsed = gensub(/(<code>[^<>]*)\#([^<>]*<\/code>)/, "\\1\\\\#\\2", "g", parsed);
  26.     parsed = gensub(/<code>([^<>]*)<em>([^<>]*)<\/em>([^<>]*)<\/code>/, "<code>\\1\\2\\3</code>", "g", parsed);
  27.     parsed = gensub(/<code>/, "\\\\lstinline|", "g", parsed);
  28.     parsed = gensub(/<\/code>/, "|", "g", parsed);
  29.  
  30.     parsed = gensub(/<p>/                   , "\\\\par "                                               , "g", parsed);
  31.     parsed = gensub(/<B>/                   , "\\\\textbf{"                                            , "g", parsed);
  32.     parsed = gensub(/<\/B>/                 , "}"                                                      , "g", parsed);
  33.     parsed = gensub(/<b>/                   , "\\\\textbf{"                                            , "g", parsed);
  34.     parsed = gensub(/<\/b>/                 , "}"                                                      , "g", parsed);
  35.     parsed = gensub(/<a [^>]*>/             , ""                                                       , "g", parsed);
  36.     parsed = gensub(/<\/a>/                 , ""                                                       , "g", parsed);
  37.     parsed = gensub(/<table .*>/            , "\\\\begin{table}[H]\\\\centering\\\\begin{tabular}{ccc}", "g", parsed);
  38.     parsed = gensub(/<\/table>/             , "\\\\end{tabular}\\\\end{table}"                         , "g", parsed);
  39.     parsed = gensub(/<td>/                  , ""                                                       , "g", parsed);
  40.     parsed = gensub(/<\/td>/                , " \\& "                                                  , "g", parsed);
  41.     parsed = gensub(/<tr>/                  , ""                                                       , "g", parsed);
  42.     parsed = gensub(/<\/tr>/                , "\\\\\\\\"                                               , "g", parsed);
  43.     parsed = gensub(/<ul>/                  , "\\\\begin{itemize}"                                     , "g", parsed);
  44.     parsed = gensub(/<\/ul>/                , "\\\\end{itemize}"                                       , "g", parsed);
  45.     parsed = gensub(/<li>/                  , "\\\\item "                                              , "g", parsed);
  46.     parsed = gensub(/<font colors?="(\w+)">/, "\\\\textcolor{\\1}{"                                    , "g", parsed);
  47.     parsed = gensub(/<\/font>/              , "}"                                                      , "g", parsed);
  48.     parsed = gensub(/<pre>/                 , "\\\\begin{lstlisting}"                                  , "g", parsed);
  49.     parsed = gensub(/<\/pre>/               , "\\\\end{lstlisting}"                                    , "g", parsed);
  50.    
  51.     if( $0 ~ /.*<em>.*<SUB>.*<\/em>.*/) {
  52.         parsed = gensub(/<em>(.*<SUB>.*)<\/em>/,"$ \\1 $","g",parsed);
  53.         parsed = gensub(/<SUB>([^<>]+)<\/SUB>/,"_{\\1}","g",parsed);
  54.     }
  55.     if( $0 ~ /.*<em>[a-zA-Z ]{3,}<\/em>.*/) {
  56.         parsed = gensub(/<em>([\w ]{3,})<\/em>/, "\\\\emph{\\1}", "g", parsed);
  57.     }
  58.     if( $0 ~ /.*<em>[a-zA-Z]{1,2}<\/em>.*/  ) {
  59.         parsed = gensub(/<em>(\w{1,2})<\/em>/,"$ \\1 $","g",parsed);
  60.     }
  61.     if( $0 ~ /.*<em>([^<>]*[0-9=\#\&][^<>]*)<\/em>.*/ ) {
  62.         parsed = gensub(/<em>([^<>]*[0-9=\#\&][^<>]*)<\/em>/,"$ \\1 $","g",parsed);
  63.     }
  64.     parsed = gensub(/<em>/, "\\\\emph{", "g", parsed);
  65.     parsed = gensub(/<\/em>/, "}", "g", parsed);
  66.  
  67.  
  68.     parsed = gensub(/\&acute;/, "'", "g", parsed);
  69.     parsed = gensub(/\&aacute;/, "á", "g", parsed);
  70.     parsed = gensub(/\&eacute;/, "é", "g", parsed);
  71.     parsed = gensub(/\&iacute;/, "í", "g", parsed);
  72.     parsed = gensub(/\&ccedil;/, "ç", "g", parsed);
  73.     parsed = gensub(/\&Ccedil;/, "Ç", "g", parsed);
  74.     parsed = gensub(/\&atilde;/, "ã", "g", parsed);
  75.     parsed = gensub(/\&Atilde;/, "Ã", "g", parsed);
  76.     parsed = gensub(/\&ecirc;/, "ê", "g", parsed);
  77.     parsed = gensub(/\&lt;/, "<", "g", parsed);
  78.     parsed = gensub(/\&amp;/, "\\\\\\&", "g", parsed);
  79.     parsed = gensub(/\&#060;=/, "\\\\leq", "g", parsed);
  80.     parsed = gensub(/%/, "\\\\%", "g", parsed);
  81.  
  82.     printf("%s\n",parsed);
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement