aboutsummaryrefslogblamecommitdiffstats
path: root/doc/api-documentation/html/thmlhtml_8cpp-source.html
blob: 6b1e37dc776d33e62f1b741f1685b071ca34bf66 (plain) (tree)
































































































































































































































                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>thmlhtml.cpp Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.2.15 -->
<center>
<a class="qindex" href="index.html">Main Page</a> &nbsp; <a class="qindex" href="namespaces.html">Namespace List</a> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="classes.html">Alphabetical List</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </center>
<hr><h1>thmlhtml.cpp</h1><div class="fragment"><pre>00001 <font class="comment">/***************************************************************************</font>
00002 <font class="comment">                     thmlhtml.cpp  -  ThML to HTML filter</font>
00003 <font class="comment">                             -------------------</font>
00004 <font class="comment">    begin                : 1999-10-27</font>
00005 <font class="comment">    copyright            : 2001 by CrossWire Bible Society</font>
00006 <font class="comment"> ***************************************************************************/</font>
00007 
00008 <font class="comment">/***************************************************************************</font>
00009 <font class="comment"> *                                                                         *</font>
00010 <font class="comment"> *   This program is free software; you can redistribute it and/or modify  *</font>
00011 <font class="comment"> *   it under the terms of the GNU General Public License as published by  *</font>
00012 <font class="comment"> *   the Free Software Foundation; either version 2 of the License, or     *</font>
00013 <font class="comment"> *   (at your option) any later version.                                   *</font>
00014 <font class="comment"> *                                                                         *</font>
00015 <font class="comment"> ***************************************************************************/</font>
00016 
00017 <font class="preprocessor">#include &lt;stdlib.h&gt;</font>
00018 <font class="preprocessor">#include &lt;string.h&gt;</font>
00019 <font class="preprocessor">#include &lt;thmlhtml.h&gt;</font>
00020 <font class="preprocessor">#include &lt;swmodule.h&gt;</font>
00021 
00022 
00023 ThMLHTML::ThMLHTML() {
00024         setTokenStart(<font class="stringliteral">"&lt;"</font>);
00025         setTokenEnd(<font class="stringliteral">"&gt;"</font>);
00026 <font class="comment">/*</font>
00027 <font class="comment">        setEscapeStart("&amp;");</font>
00028 <font class="comment">        setEscapeEnd(";");</font>
00029 <font class="comment"></font>
00030 <font class="comment">        setEscapeStringCaseSensitive(true);</font>
00031 <font class="comment"></font>
00032 <font class="comment">        addEscapeStringSubstitute("nbsp", " ");</font>
00033 <font class="comment">        addEscapeStringSubstitute("quot", "\"");</font>
00034 <font class="comment">        addEscapeStringSubstitute("amp", "&amp;");</font>
00035 <font class="comment">        addEscapeStringSubstitute("lt", "&lt;");</font>
00036 <font class="comment">        addEscapeStringSubstitute("gt", "&gt;");</font>
00037 <font class="comment">        addEscapeStringSubstitute("brvbar", "|");</font>
00038 <font class="comment">        addEscapeStringSubstitute("sect", "§");</font>
00039 <font class="comment">        addEscapeStringSubstitute("copy", "©");</font>
00040 <font class="comment">        addEscapeStringSubstitute("laquo", "«");</font>
00041 <font class="comment">        addEscapeStringSubstitute("reg", "®");</font>
00042 <font class="comment">        addEscapeStringSubstitute("acute", "´");</font>
00043 <font class="comment">        addEscapeStringSubstitute("para", "¶");</font>
00044 <font class="comment">        addEscapeStringSubstitute("raquo", "»");</font>
00045 <font class="comment"></font>
00046 <font class="comment">        addEscapeStringSubstitute("Aacute", "Á");</font>
00047 <font class="comment">        addEscapeStringSubstitute("Agrave", "À");</font>
00048 <font class="comment">        addEscapeStringSubstitute("Acirc", "Â");</font>
00049 <font class="comment">        addEscapeStringSubstitute("Auml", "Ä");</font>
00050 <font class="comment">        addEscapeStringSubstitute("Atilde", "Ã");</font>
00051 <font class="comment">        addEscapeStringSubstitute("Aring", "Å");</font>
00052 <font class="comment">        addEscapeStringSubstitute("aacute", "á");</font>
00053 <font class="comment">        addEscapeStringSubstitute("agrave", "à");</font>
00054 <font class="comment">        addEscapeStringSubstitute("acirc", "â");</font>
00055 <font class="comment">        addEscapeStringSubstitute("auml", "ä");</font>
00056 <font class="comment">        addEscapeStringSubstitute("atilde", "ã");</font>
00057 <font class="comment">        addEscapeStringSubstitute("aring", "å");</font>
00058 <font class="comment">        addEscapeStringSubstitute("Eacute", "É");</font>
00059 <font class="comment">        addEscapeStringSubstitute("Egrave", "È");</font>
00060 <font class="comment">        addEscapeStringSubstitute("Ecirc", "Ê");</font>
00061 <font class="comment">        addEscapeStringSubstitute("Euml", "Ë");</font>
00062 <font class="comment">        addEscapeStringSubstitute("eacute", "é");</font>
00063 <font class="comment">        addEscapeStringSubstitute("egrave", "è");</font>
00064 <font class="comment">        addEscapeStringSubstitute("ecirc", "ê");</font>
00065 <font class="comment">        addEscapeStringSubstitute("euml", "ë");</font>
00066 <font class="comment">        addEscapeStringSubstitute("Iacute", "Í");</font>
00067 <font class="comment">        addEscapeStringSubstitute("Igrave", "Ì");</font>
00068 <font class="comment">        addEscapeStringSubstitute("Icirc", "Î");</font>
00069 <font class="comment">        addEscapeStringSubstitute("Iuml", "Ï");</font>
00070 <font class="comment">        addEscapeStringSubstitute("iacute", "í");</font>
00071 <font class="comment">        addEscapeStringSubstitute("igrave", "ì");</font>
00072 <font class="comment">        addEscapeStringSubstitute("icirc", "î");</font>
00073 <font class="comment">        addEscapeStringSubstitute("iuml", "ï");</font>
00074 <font class="comment">        addEscapeStringSubstitute("Oacute", "Ó");</font>
00075 <font class="comment">        addEscapeStringSubstitute("Ograve", "Ò");</font>
00076 <font class="comment">        addEscapeStringSubstitute("Ocirc", "Ô");</font>
00077 <font class="comment">        addEscapeStringSubstitute("Ouml", "Ö");</font>
00078 <font class="comment">        addEscapeStringSubstitute("Otilde", "Õ");</font>
00079 <font class="comment">        addEscapeStringSubstitute("oacute", "ó");</font>
00080 <font class="comment">        addEscapeStringSubstitute("ograve", "ò");</font>
00081 <font class="comment">        addEscapeStringSubstitute("ocirc", "ô");</font>
00082 <font class="comment">        addEscapeStringSubstitute("ouml", "ö");</font>
00083 <font class="comment">        addEscapeStringSubstitute("otilde", "õ");</font>
00084 <font class="comment">        addEscapeStringSubstitute("Uacute", "Ú");</font>
00085 <font class="comment">        addEscapeStringSubstitute("Ugrave", "Ù");</font>
00086 <font class="comment">        addEscapeStringSubstitute("Ucirc", "Û");</font>
00087 <font class="comment">        addEscapeStringSubstitute("Uuml", "Ü");</font>
00088 <font class="comment">        addEscapeStringSubstitute("uacute", "ú");</font>
00089 <font class="comment">        addEscapeStringSubstitute("ugrave", "ù");</font>
00090 <font class="comment">        addEscapeStringSubstitute("ucirc", "û");</font>
00091 <font class="comment">        addEscapeStringSubstitute("uuml", "ü");</font>
00092 <font class="comment">        addEscapeStringSubstitute("Yacute", "Ý");</font>
00093 <font class="comment">        addEscapeStringSubstitute("yacute", "ý");</font>
00094 <font class="comment">        addEscapeStringSubstitute("yuml", "ÿ");</font>
00095 <font class="comment"></font>
00096 <font class="comment">        addEscapeStringSubstitute("deg", "°");</font>
00097 <font class="comment">        addEscapeStringSubstitute("plusmn", "±");</font>
00098 <font class="comment">        addEscapeStringSubstitute("sup2", "²");</font>
00099 <font class="comment">        addEscapeStringSubstitute("sup3", "³");</font>
00100 <font class="comment">        addEscapeStringSubstitute("sup1", "¹");</font>
00101 <font class="comment">        addEscapeStringSubstitute("nbsp", "º");</font>
00102 <font class="comment">        addEscapeStringSubstitute("pound", "£");</font>
00103 <font class="comment">        addEscapeStringSubstitute("cent", "¢");</font>
00104 <font class="comment">        addEscapeStringSubstitute("frac14", "¼");</font>
00105 <font class="comment">        addEscapeStringSubstitute("frac12", "½");</font>
00106 <font class="comment">        addEscapeStringSubstitute("frac34", "¾");</font>
00107 <font class="comment">        addEscapeStringSubstitute("iquest", "¿");</font>
00108 <font class="comment">        addEscapeStringSubstitute("iexcl", "¡");</font>
00109 <font class="comment">        addEscapeStringSubstitute("ETH", "Ð");</font>
00110 <font class="comment">        addEscapeStringSubstitute("eth", "ð");</font>
00111 <font class="comment">        addEscapeStringSubstitute("THORN", "Þ");</font>
00112 <font class="comment">        addEscapeStringSubstitute("thorn", "þ");</font>
00113 <font class="comment">        addEscapeStringSubstitute("AElig", "Æ");</font>
00114 <font class="comment">        addEscapeStringSubstitute("aelig", "æ");</font>
00115 <font class="comment">        addEscapeStringSubstitute("Oslash", "Ø");</font>
00116 <font class="comment">        addEscapeStringSubstitute("curren", "¤");</font>
00117 <font class="comment">        addEscapeStringSubstitute("Ccedil", "Ç");</font>
00118 <font class="comment">        addEscapeStringSubstitute("ccedil", "ç");</font>
00119 <font class="comment">        addEscapeStringSubstitute("szlig", "ß");</font>
00120 <font class="comment">        addEscapeStringSubstitute("Ntilde", "Ñ");</font>
00121 <font class="comment">        addEscapeStringSubstitute("ntilde", "ñ");</font>
00122 <font class="comment">        addEscapeStringSubstitute("yen", "¥");</font>
00123 <font class="comment">        addEscapeStringSubstitute("not", "¬");</font>
00124 <font class="comment">        addEscapeStringSubstitute("ordf", "ª");</font>
00125 <font class="comment">        addEscapeStringSubstitute("uml", "¨");</font>
00126 <font class="comment">        addEscapeStringSubstitute("shy", "­");</font>
00127 <font class="comment">        addEscapeStringSubstitute("macr", "¯");</font>
00128 <font class="comment">*/</font>
00129         setTokenCaseSensitive(<font class="keyword">true</font>);
00130 
00131         addTokenSubstitute(<font class="stringliteral">"/scripRef"</font>, <font class="stringliteral">" &lt;/a&gt;"</font>);
00132         addTokenSubstitute(<font class="stringliteral">"note"</font>, <font class="stringliteral">" &lt;font color=\"#800000\"&gt;&lt;small&gt;("</font>);
00133         addTokenSubstitute(<font class="stringliteral">"/note"</font>, <font class="stringliteral">")&lt;/small&gt;&lt;/font&gt; "</font>);
00134 }
00135 
00136 
<a name="l00137"></a><a class="code" href="class_th_m_l_h_t_m_l.html#b0">00137</a> <font class="keywordtype">bool</font> <a class="code" href="class_th_m_l_h_t_m_l.html#b0">ThMLHTML::handleToken</a>(<font class="keywordtype">char</font> **buf, <font class="keyword">const</font> <font class="keywordtype">char</font> *token, DualStringMap &amp;userData) {
00138         <font class="keywordflow">if</font> (!substituteToken(buf, token)) {
00139         <font class="comment">// manually process if it wasn't a simple substitution</font>
00140                 <font class="keywordflow">if</font> (!strncmp(token, <font class="stringliteral">"sync type=\"Strongs\" value=\""</font>, 27)) {
00141                         <font class="keywordflow">if</font> (token[27] == <font class="charliteral">'H'</font> || token[27] == <font class="charliteral">'G'</font> || token[27] == <font class="charliteral">'A'</font>) {
00142                                 <a class="code" href="class_s_w_basic_filter.html#b12">pushString</a>(buf, <font class="stringliteral">"&lt;small&gt;&lt;em&gt;"</font>);
00143                                 <font class="keywordflow">for</font> (<font class="keyword">const</font> <font class="keywordtype">char</font> *tok = token + 5; *tok; tok++)
00144                                         <font class="keywordflow">if</font>(*tok != <font class="charliteral">'\"'</font>)
00145                                                 *(*buf)++ = *tok;
00146                                 <a class="code" href="class_s_w_basic_filter.html#b12">pushString</a>(buf, <font class="stringliteral">"&lt;/em&gt;&lt;/small&gt;"</font>);
00147                         }
00148                         <font class="keywordflow">else</font> <font class="keywordflow">if</font> (token[27] == <font class="charliteral">'T'</font>) {
00149                                 <a class="code" href="class_s_w_basic_filter.html#b12">pushString</a>(buf, <font class="stringliteral">"&lt;small&gt;&lt;i&gt;"</font>);
00150                                 <font class="keywordflow">for</font> (<font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> i = 29; token[i] != <font class="charliteral">'\"'</font>; i++)
00151                                         *(*buf)++ = token[i];
00152                                 <a class="code" href="class_s_w_basic_filter.html#b12">pushString</a>(buf, <font class="stringliteral">"&lt;/i&gt;&lt;/small&gt;"</font>);
00153                         }
00154                 }
00155                 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (!strncmp(token, <font class="stringliteral">"sync type=\"morph\" value=\""</font>, 25)) {
00156                         <a class="code" href="class_s_w_basic_filter.html#b12">pushString</a>(buf, <font class="stringliteral">"&lt;small&gt;&lt;em&gt;"</font>);
00157                         <font class="keywordflow">for</font> (<font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> i = 25; token[i] != <font class="charliteral">'\"'</font>; i++)
00158                                 *(*buf)++ = token[i];
00159                         <a class="code" href="class_s_w_basic_filter.html#b12">pushString</a>(buf, <font class="stringliteral">"&lt;/em&gt;&lt;/small&gt;"</font>);
00160                 }
00161                 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (!strncmp(token, <font class="stringliteral">"sync type=\"lemma\" value=\""</font>, 25)) {
00162                         <a class="code" href="class_s_w_basic_filter.html#b12">pushString</a>(buf, <font class="stringliteral">"&lt;small&gt;&lt;em&gt;("</font>);
00163                         <font class="keywordflow">for</font> (<font class="keywordtype">unsigned</font> <font class="keywordtype">int</font> i = 25; token[i] != <font class="charliteral">'\"'</font>; i++)
00164                                 *(*buf)++ = token[i];
00165                         <a class="code" href="class_s_w_basic_filter.html#b12">pushString</a>(buf, <font class="stringliteral">")&lt;/em&gt;&lt;/small&gt;"</font>);
00166                 }
00167                 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (!strncmp(token, <font class="stringliteral">"scripRef"</font>, 8)) {
00168                         <a class="code" href="class_s_w_basic_filter.html#b12">pushString</a>(buf, <font class="stringliteral">"&lt;a href=\""</font>);
00169                         <font class="keywordflow">for</font> (<font class="keyword">const</font> <font class="keywordtype">char</font> *tok = token + 9; *tok; tok++)
00170                                 <font class="keywordflow">if</font>(*tok != <font class="charliteral">'\"'</font>)
00171                                         *(*buf)++ = *tok;
00172                         *(*buf)++ = <font class="charliteral">'\"'</font>;
00173                         *(*buf)++ = <font class="charliteral">'&gt;'</font>;
00174                 }
00175                 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (!strncmp(token, <font class="stringliteral">"img "</font>, 4)) {
00176                         <font class="keyword">const</font> <font class="keywordtype">char</font> *src = strstr(token, <font class="stringliteral">"src"</font>);
00177                         <font class="keywordflow">if</font> (!src)               <font class="comment">// assert we have a src attribute</font>
00178                                 <font class="keywordflow">return</font> <font class="keyword">false</font>;
00179 
00180                         *(*buf)++ = <font class="charliteral">'&lt;'</font>;
00181                         <font class="keywordflow">for</font> (<font class="keyword">const</font> <font class="keywordtype">char</font> *c = token; *c; c++) {
00182                                 <font class="keywordflow">if</font> (c == src) {
00183                                         <font class="keywordflow">for</font> (;((*c) &amp;&amp; (*c != <font class="charliteral">'"'</font>)); c++)
00184                                                 *(*buf)++ = *c;
00185 
00186                                         <font class="keywordflow">if</font> (!*c) { c--; <font class="keywordflow">continue</font>; }
00187 
00188                                         *(*buf)++ = <font class="charliteral">'"'</font>;
00189                                         <font class="keywordflow">if</font> (*(c+1) == <font class="charliteral">'/'</font>) {
00190                                                 <a class="code" href="class_s_w_basic_filter.html#b12">pushString</a>(buf, <font class="stringliteral">"file:"</font>);
00191                                                 <a class="code" href="class_s_w_basic_filter.html#b12">pushString</a>(buf, module-&gt;<a class="code" href="class_s_w_module.html#a6">getConfigEntry</a>(<font class="stringliteral">"AbsoluteDataPath"</font>));
00192                                                 <font class="keywordflow">if</font> (*((*buf)-1) == <font class="charliteral">'/'</font>)
00193                                                         c++;            <font class="comment">// skip '/'</font>
00194                                         }
00195                                         <font class="keywordflow">continue</font>;
00196                                 }
00197                                 *(*buf)++ = *c;
00198                         }
00199                         *(*buf)++ = <font class="charliteral">'&gt;'</font>;
00200                 }
00201                 <font class="keywordflow">else</font> <font class="keywordflow">if</font>(!strncmp(token, <font class="stringliteral">"note"</font>, 4)) {
00202                         <a class="code" href="class_s_w_basic_filter.html#b12">pushString</a>(buf, <font class="stringliteral">" &lt;font color=\"#800000\"&gt;&lt;small&gt;("</font>);
00203                 }
00204 
00205                 <font class="keywordflow">else</font> {
00206                         <font class="keywordflow">return</font> <font class="keyword">false</font>;  <font class="comment">// we still didn't handle token</font>
00207                 }
00208         }
00209         <font class="keywordflow">return</font> <font class="keyword">true</font>;
00210 }
00211 
</pre></div><hr><address align="right"><small>Generated on Thu Jun 20 22:13:01 2002 for The Sword Project by
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border=0 
width=110 height=53></a>1.2.15 </small></address>
</body>
</html>