//conversion between latex and html

function test() {
  var testLines = '\n\n This is a test series in which some vector, $\\vec{E}$, and basic math, $\\alpha = \\Xi/2$ has been produced. A superscript is also here, $2^2=4$. Finally, a collection of additional math markup is included...\n\n Don\'t forget to place double \"Enter\" at the end of your text or manually include the final paragraph closing tag.\n\n A subscript, $\\Lambda_{12} = 7$\\label{subLab} with reference. \n\n The reference call to the subscripted expression, \\ref{sublab}, gets converted into a hyperlinked NAME element.\n\n ';
  var testLocale = document.getElementById("la");
  testLocale.value = testLines;
  getText();
  window.open("http://www.davidpace.com/latex2htmlSAMPLE.htm")
}

function convert(data,doll,vect,superscr,subscr) {
  //replace dollar signs with SPAN math 
  var out = data.replace(/\$(.*?)\$/g,"<span class=\""+doll+"\">$1</span>");  
  
  //replace vectors with B tag
  out = out.replace(/\\vec\{(.+?)\}/g,"<span class=\""+vect+"\">$1</span>");
  //\hat{} vectors
  out = out.replace(/\\hat\{(.+?)\}/g,"<b>$1</b>");
  //chapter to TITLE
  out = out.replace(/\\chapter\{(.+)\}/g,"TITLE: $1");
  //remove index listing
  out = out.replace(/\\index\{(.+)\}/g,"");
  //remove 'fig:', 'eq:' from refs and labels
  out = out.replace(/\{fig:(.+)\}/g,"\{$1\}");
  out = out.replace(/\{eq:(.+)\}/g,"\{$1\}");
  //REF usage
  out = out.replace(/\\ref\{(.+)\}/g,"<a href=\"#$1\">this</a>");
  out = out.replace(/\\eqref\{(.+)\}/g,"<a href=\"#$1\">this</a>");
  //figures
  out = out.replace(/\\begin\{figure\}\[.+\]\s+\\centering\s+\\includegraphics\[.+\]\{(.+)\}/g,"<div align=\"center\">\{mosimage\} NAME: $1");
  out = out.replace(/\\end\{figure\}/g,"</div>");
  //all LABLES become <a name=
  out = out.replace(/\\label\{(.+)\}/g,"<a name=\"$1\">&nbsp;</a>");
  //equation arrays
  out = out.replace(/\\bea/g,"<div align=\"center\">{mosimage}");
  out = out.replace(/\\eea/g,"</div>");
  //subscripts and superscripts
  out = out.replace(/_(\w)/g,"<span class=\""+subscr+"\">$1</span>"); //no curly braces
  out = out.replace(/_\{(\w+?)\}/g,"<span class=\""+subscr+"\">$1</span>");
  out = out.replace(/\^(\w)/g,"<span class=\""+superscr+"\">$1</span>");  //no curly braces
  out = out.replace(/\^\{(\w+?)\}/g,"<span class=\""+superscr+"\">$1</span>");

  //remove math spaces
  out = out.replace(/\\;/g,"");

  //math characters
  out = out.replace(/\\cdot/g,"&middot;");
  out = out.replace(/\\ln/g,"ln");  

  //greek letters
  out = out.replace(/\\phi/ig,"&Phi;"); //always use Phi in html
  out = out.replace(/\\(a)lpha/ig,"&$1lpha;");
  out = out.replace(/\\(b)eta/ig,"&$1eta;");
  out = out.replace(/\\(g)amma/ig,"&$1amma;");
  out = out.replace(/\\(d)elta/ig,"&$1elta;");
  out = out.replace(/\\(e)psilon/ig,"&$1psilon;");
  out = out.replace(/\\(z)eta/ig,"&$1eta;");
  out = out.replace(/\\(e)ta/ig,"&$1ta;");
  out = out.replace(/\\(t)heta/ig,"&$1heta;");
  out = out.replace(/\\(i)ota/ig,"&$1ota;");
  out = out.replace(/\\(k)appa/ig,"&$1appa;");
  out = out.replace(/\\(l)ambda/ig,"&$1ambda;");
  out = out.replace(/\\(m)u/ig,"&$1u;");
  out = out.replace(/\\(n)u/ig,"&$1u;");
  out = out.replace(/\\(x)i/ig,"&$1i;");
  out = out.replace(/\\(o)micron/ig,"&$1micron;");
  out = out.replace(/\\(p)i/ig,"&$1i;");
  out = out.replace(/\\(r)ho/ig,"&$1ho;");
  out = out.replace(/\\(s)igma/ig,"&$1igma;");
  out = out.replace(/\\(t)au/ig,"&$1au;");
  out = out.replace(/\\(u)psilon/ig,"&$1psilon;");
  out = out.replace(/\\(c)hi/ig,"&$1hi;");
  out = out.replace(/\\(p)si/ig,"&$1si;");
  out = out.replace(/\\(o)mega/ig,"&$1mega;");

  //<p> throughout, but only for double line-returns
  out = out.replace(/\n{2}/g,"</p>\n\n<p>");
  out = out.replace(/<\/p>/,""); //remove initial closing tag

  //place output in text area
  document.getElementById("htm").value = out;

}

function getText() {

  //determine user preferences for conversion
  //math surrounded by single dollar signs
  var doll = new String(document.getElementById("dollars").value);
  doll = doll.replace(/\s+/g,"");
  if (doll.length == 0) { doll = "math";}
  //vectors
  var vect = new String(document.getElementById("vectors").value);
  vect = vect.replace(/\s+/g,"");
  if (vect.length == 0) { vect = "vector";}
  //superscripts
  var superscr = new String(document.getElementById("superscript").value);
  superscr = superscr.replace(/\s+/g,"");
  if (superscr.length == 0) { superscr = "superscript";}
  //subscripts
  var subscr = new String(document.getElementById("subscript").value);
  subscr = subscr.replace(/\s+/g,"");
  if (subscr.length == 0) { subscr = "subscript";}
  
  var pp = document.getElementById("la");
  var orig = new String(pp.value);
  convert(orig,doll,vect,superscr,subscr);
}


