Sophie

Sophie

distrib > Mandriva > 9.1 > ppc > by-pkgid > a74ec78bdb789d910d054e3918f3f007 > files > 336

libsword1-devel-1.5.5-2mdk.ppc.rpm

<!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>gbfrtf.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>gbfrtf.cpp</h1><div class="fragment"><pre>00001 <font class="comment">/******************************************************************************</font>
00002 <font class="comment"> *</font>
00003 <font class="comment"> * gbfrtf -     SWFilter decendant to convert all GBF tags to RTF tags</font>
00004 <font class="comment"> */</font>
00005 
00006 
00007 <font class="preprocessor">#include &lt;stdlib.h&gt;</font>
00008 <font class="preprocessor">#include &lt;string.h&gt;</font>
00009 <font class="preprocessor">#include &lt;gbfrtf.h&gt;</font>
00010 <font class="preprocessor">#include &lt;ctype.h&gt;</font>
00011 
00012 GBFRTF::GBFRTF() {
00013 }
00014 
00015 
00016 <font class="keywordtype">char</font> GBFRTF::ProcessText(<font class="keywordtype">char</font> *text, <font class="keywordtype">int</font> maxlen, <font class="keyword">const</font> <a class="code" href="class_s_w_key.html">SWKey</a> *key, <font class="keyword">const</font> <a class="code" href="class_s_w_module.html">SWModule</a> *module)
00017 {
00018         <font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> *to, *from;
00019         <font class="keywordtype">char</font> token[2048];
00020         <font class="keywordtype">int</font> tokpos = 0;
00021         <font class="keywordtype">bool</font> intoken = <font class="keyword">false</font>;
00022         <font class="keywordtype">int</font> len;
00023         <font class="keyword">const</font> <font class="keywordtype">char</font> *tok;
00024 
00025         len = strlen(text) + 1;                                         <font class="comment">// shift string to right of buffer</font>
00026         <font class="keywordflow">if</font> (len &lt; maxlen) {
00027                 memmove(&amp;text[maxlen - len], text, len);
00028                 from = (<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> *)&amp;text[maxlen - len];
00029         }
00030         <font class="keywordflow">else</font>    from = (<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> *)text;                                                   <font class="comment">// -------------------------------</font>
00031         <font class="keywordflow">for</font> (to = (<font class="keywordtype">unsigned</font> <font class="keywordtype">char</font> *)text; *from; from++) {
00032                 <font class="keywordflow">if</font> (*from == <font class="charliteral">'&lt;'</font>) {
00033                         intoken = <font class="keyword">true</font>;
00034                         tokpos = 0;
00035                         token[0] = 0;
00036                         token[1] = 0;
00037                         token[2] = 0;
00038                         <font class="keywordflow">continue</font>;
00039                 }
00040                 <font class="keywordflow">if</font> (*from == <font class="charliteral">'&gt;'</font>) {
00041                         intoken = <font class="keyword">false</font>;
00042                                                 <font class="comment">// process desired tokens</font>
00043                         <font class="keywordflow">switch</font> (*token) {
00044                         <font class="keywordflow">case</font> <font class="charliteral">'W'</font>:       <font class="comment">// Strongs</font>
00045                                 <font class="keywordflow">switch</font>(token[1]) {
00046                                 <font class="keywordflow">case</font> <font class="charliteral">'G'</font>:               <font class="comment">// Greek</font>
00047                                 <font class="keywordflow">case</font> <font class="charliteral">'H'</font>:               <font class="comment">// Hebrew</font>
00048                                         *to++ = <font class="charliteral">'{'</font>;
00049                                         *to++ = <font class="charliteral">'\\'</font>;
00050                                         *to++ = <font class="charliteral">'f'</font>;
00051                                         *to++ = <font class="charliteral">'s'</font>;
00052                                         *to++ = <font class="charliteral">'1'</font>;
00053                                         *to++ = <font class="charliteral">'7'</font>;
00054                                         *to++ = <font class="charliteral">' '</font>;
00055                                         *to++ = <font class="charliteral">'&lt;'</font>;
00056                                         <font class="keywordflow">for</font> (tok = token + 2; *tok; tok++)
00057                                                 *to++ = *tok;
00058                                         *to++ = <font class="charliteral">'&gt;'</font>;
00059                                         *to++ = <font class="charliteral">'}'</font>;
00060                                         <font class="keywordflow">continue</font>;
00061 
00062                                 <font class="keywordflow">case</font> <font class="charliteral">'T'</font>:               <font class="comment">// Tense</font>
00063                                         *to++ = <font class="charliteral">'{'</font>;
00064                                         *to++ = <font class="charliteral">'\\'</font>;
00065                                         *to++ = <font class="charliteral">'f'</font>;
00066                                         *to++ = <font class="charliteral">'s'</font>;
00067                                         *to++ = <font class="charliteral">'1'</font>;
00068                                         *to++ = <font class="charliteral">'7'</font>;
00069                                         *to++ = <font class="charliteral">' '</font>;
00070                                         *to++ = <font class="charliteral">'('</font>;
00071                                         <font class="keywordtype">bool</font> separate = <font class="keyword">false</font>;
00072                                         <font class="keywordflow">for</font> (tok = token + 2; *tok; tok++) {
00073                                                 <font class="keywordflow">if</font> (separate) {
00074                                                         *to++ = <font class="charliteral">';'</font>;
00075                                                         *to++ = <font class="charliteral">' '</font>;
00076                                                         separate = <font class="keyword">false</font>;
00077                                                 }
00078                                                 <font class="keywordflow">switch</font> (*tok) {
00079                                                 <font class="keywordflow">case</font> <font class="charliteral">'G'</font>:
00080                                                 <font class="keywordflow">case</font> <font class="charliteral">'H'</font>:
00081                                                         <font class="keywordflow">for</font> (tok++; *tok; tok++) {
00082                                                                 <font class="keywordflow">if</font> (isdigit(*tok)) {
00083                                                                         *to++ = *tok;
00084                                                                         separate = <font class="keyword">true</font>;
00085                                                                 }
00086                                                                 <font class="keywordflow">else</font> {
00087                                                                         tok--;
00088                                                                         <font class="keywordflow">break</font>;
00089                                                                 }
00090                                                         }
00091                                                         <font class="keywordflow">break</font>;
00092                                                 <font class="keywordflow">default</font>:
00093                                                         <font class="keywordflow">for</font> (; *tok; tok++) {
00094                                                                *to++ = *tok;
00095                                                         }
00096                                                 }
00097                                         }
00098                                         *to++ = <font class="charliteral">')'</font>;
00099                                         *to++ = <font class="charliteral">'}'</font>;
00100                                         <font class="keywordflow">continue</font>;
00101                                 }
00102                                 <font class="keywordflow">break</font>;
00103                         <font class="keywordflow">case</font> <font class="charliteral">'R'</font>:
00104                                 <font class="keywordflow">switch</font>(token[1]) {
00105                                 <font class="keywordflow">case</font> <font class="charliteral">'X'</font>:
00106                                   *to++ = <font class="charliteral">'&lt;'</font>;
00107                                   *to++ = <font class="charliteral">'a'</font>;
00108                                   *to++ = <font class="charliteral">' '</font>;
00109                                   *to++ = <font class="charliteral">'h'</font>;
00110                                   *to++ = <font class="charliteral">'r'</font>;
00111                                   *to++ = <font class="charliteral">'e'</font>;
00112                                   *to++ = <font class="charliteral">'f'</font>;
00113                                   *to++ = <font class="charliteral">'='</font>;
00114                                   *to++ = <font class="charliteral">'"'</font>;
00115                                   *to++ = <font class="charliteral">'"'</font>;
00116                                   *to++ = <font class="charliteral">'&gt;'</font>;
00117                                   <font class="keywordflow">continue</font>;
00118                                 <font class="keywordflow">case</font> <font class="charliteral">'x'</font>:
00119                                   *to++ = <font class="charliteral">'&lt;'</font>;
00120                                   *to++ = <font class="charliteral">'/'</font>;
00121                                   *to++ = <font class="charliteral">'a'</font>;
00122                                   *to++ = <font class="charliteral">'&gt;'</font>;
00123                                   <font class="keywordflow">continue</font>;
00124                                 <font class="keywordflow">case</font> <font class="charliteral">'F'</font>:               <font class="comment">// footnote begin</font>
00125                                         *to++ = <font class="charliteral">'{'</font>;
00126                                         *to++ = <font class="charliteral">'\\'</font>;
00127                                         *to++ = <font class="charliteral">'i'</font>;
00128                                         *to++ = <font class="charliteral">'1'</font>;
00129                                         *to++ = <font class="charliteral">' '</font>;
00130                                         *to++ = <font class="charliteral">'\\'</font>;
00131                                         *to++ = <font class="charliteral">'f'</font>;
00132                                         *to++ = <font class="charliteral">'s'</font>;
00133                                         *to++ = <font class="charliteral">'1'</font>;
00134                                         *to++ = <font class="charliteral">'7'</font>;
00135                                         *to++ = <font class="charliteral">' '</font>;
00136                                         *to++ = <font class="charliteral">'('</font>;
00137                                         <font class="keywordflow">continue</font>;
00138                                 <font class="keywordflow">case</font> <font class="charliteral">'f'</font>:               <font class="comment">// footnote end</font>
00139                                         *to++ = <font class="charliteral">')'</font>;
00140                                         *to++ = <font class="charliteral">' '</font>;
00141                                         *to++ = <font class="charliteral">'}'</font>;
00142                                         <font class="keywordflow">continue</font>;
00143                                 }
00144                                 <font class="keywordflow">break</font>;
00145                         <font class="keywordflow">case</font> <font class="charliteral">'F'</font>:                       <font class="comment">// font tags</font>
00146                                 <font class="keywordflow">switch</font>(token[1]) {
00147                                 <font class="keywordflow">case</font> <font class="charliteral">'I'</font>:               <font class="comment">// italic start</font>
00148                                         *to++ = <font class="charliteral">'\\'</font>;
00149                                         *to++ = <font class="charliteral">'i'</font>;
00150                                         *to++ = <font class="charliteral">'1'</font>;
00151                                         *to++ = <font class="charliteral">' '</font>;
00152                                         <font class="keywordflow">continue</font>;
00153                                 <font class="keywordflow">case</font> <font class="charliteral">'i'</font>:               <font class="comment">// italic end</font>
00154                                         *to++ = <font class="charliteral">'\\'</font>;
00155                                         *to++ = <font class="charliteral">'i'</font>;
00156                                         *to++ = <font class="charliteral">'0'</font>;
00157                                         *to++ = <font class="charliteral">' '</font>;
00158                                         <font class="keywordflow">continue</font>;
00159                                 <font class="keywordflow">case</font> <font class="charliteral">'B'</font>:               <font class="comment">// bold start</font>
00160                                         *to++ = <font class="charliteral">'\\'</font>;
00161                                         *to++ = <font class="charliteral">'b'</font>;
00162                                         *to++ = <font class="charliteral">'1'</font>;
00163                                         *to++ = <font class="charliteral">' '</font>;
00164                                         <font class="keywordflow">continue</font>;
00165                                 <font class="keywordflow">case</font> <font class="charliteral">'b'</font>:               <font class="comment">// bold end</font>
00166                                         *to++ = <font class="charliteral">'\\'</font>;
00167                                         *to++ = <font class="charliteral">'b'</font>;
00168                                         *to++ = <font class="charliteral">'0'</font>;
00169                                         *to++ = <font class="charliteral">' '</font>;
00170                                         <font class="keywordflow">continue</font>;
00171                                 <font class="keywordflow">case</font> <font class="charliteral">'N'</font>:
00172                                         *to++ = <font class="charliteral">'{'</font>;
00173                                         <font class="keywordflow">if</font> (!strnicmp(token+2, <font class="stringliteral">"Symbol"</font>, 6)) {
00174                                           *to++ = <font class="charliteral">'\\'</font>;
00175                                           *to++ = <font class="charliteral">'f'</font>;
00176                                           *to++ = <font class="charliteral">'7'</font>;
00177                                           *to++ = <font class="charliteral">' '</font>;
00178                                         }
00179                                         <font class="keywordflow">continue</font>;
00180                                 <font class="keywordflow">case</font> <font class="charliteral">'n'</font>:
00181                                         *to++ = <font class="charliteral">'}'</font>;
00182                                         <font class="keywordflow">continue</font>;
00183                                 <font class="keywordflow">case</font> <font class="charliteral">'S'</font>:
00184                                         *to++ = <font class="charliteral">'{'</font>;
00185                                         *to++ = <font class="charliteral">'\\'</font>;
00186                                         *to++ = <font class="charliteral">'s'</font>;
00187                                         *to++ = <font class="charliteral">'u'</font>;
00188                                         *to++ = <font class="charliteral">'p'</font>;
00189                                         *to++ = <font class="charliteral">'e'</font>;
00190                                         *to++ = <font class="charliteral">'r'</font>;
00191                                         *to++ = <font class="charliteral">' '</font>;
00192                                         <font class="keywordflow">continue</font>;
00193                                 <font class="keywordflow">case</font> <font class="charliteral">'s'</font>:
00194                                         *to++ = <font class="charliteral">'}'</font>;
00195                                         <font class="keywordflow">continue</font>;
00196                                 <font class="keywordflow">case</font> <font class="charliteral">'R'</font>:
00197                                         *to++ = <font class="charliteral">'{'</font>;
00198                                         *to++ = <font class="charliteral">'\\'</font>;
00199                                         *to++ = <font class="charliteral">'c'</font>;
00200                                         *to++ = <font class="charliteral">'f'</font>;
00201                                         *to++ = <font class="charliteral">'6'</font>;
00202                                         *to++ = <font class="charliteral">' '</font>;
00203                                         <font class="keywordflow">continue</font>;
00204                                 <font class="keywordflow">case</font> <font class="charliteral">'r'</font>:
00205                                         *to++ = <font class="charliteral">'}'</font>;
00206                                         <font class="keywordflow">continue</font>;
00207                                 }
00208                                 <font class="keywordflow">break</font>;
00209                         <font class="keywordflow">case</font> <font class="charliteral">'C'</font>:                       <font class="comment">// special character tags</font>
00210                                 <font class="keywordflow">switch</font>(token[1]) {
00211                                 <font class="keywordflow">case</font> <font class="charliteral">'A'</font>:               <font class="comment">// ASCII value</font>
00212                                         *to++ = (char)atoi(&amp;token[2]);
00213                                         <font class="keywordflow">continue</font>;
00214                                 <font class="keywordflow">case</font> <font class="charliteral">'G'</font>:
00215                                         *to++ = <font class="charliteral">'&gt;'</font>;
00216                                         <font class="keywordflow">continue</font>;
00217                                 <font class="keywordflow">case</font> <font class="charliteral">'L'</font>:               <font class="comment">// line break</font>
00218                                         *to++ = <font class="charliteral">'\\'</font>;
00219                                         *to++ = <font class="charliteral">'l'</font>;
00220                                         *to++ = <font class="charliteral">'i'</font>;
00221                                         *to++ = <font class="charliteral">'n'</font>;
00222                                         *to++ = <font class="charliteral">'e'</font>;
00223                                         *to++ = <font class="charliteral">' '</font>;
00224                                         <font class="keywordflow">continue</font>;
00225                                 <font class="keywordflow">case</font> <font class="charliteral">'M'</font>:               <font class="comment">// new paragraph</font>
00226                                         *to++ = <font class="charliteral">'\\'</font>;
00227                                         *to++ = <font class="charliteral">'p'</font>;
00228                                         *to++ = <font class="charliteral">'a'</font>;
00229                                         *to++ = <font class="charliteral">'r'</font>;
00230                                         *to++ = <font class="charliteral">' '</font>;
00231                                         <font class="keywordflow">continue</font>;
00232                                 <font class="keywordflow">case</font> <font class="charliteral">'T'</font>:
00233                                         *to++ = <font class="charliteral">'&lt;'</font>;
00234                                 }
00235                                 <font class="keywordflow">break</font>;
00236                         <font class="keywordflow">case</font> <font class="charliteral">'T'</font>:                       <font class="comment">// title formatting</font>
00237                           <font class="keywordflow">switch</font>(token[1])
00238                             {
00239                             <font class="keywordflow">case</font> <font class="charliteral">'T'</font>:               <font class="comment">// Book title begin</font>
00240                               *to++ = <font class="charliteral">'{'</font>;
00241                               *to++ = <font class="charliteral">'\\'</font>;
00242                               *to++ = <font class="charliteral">'f'</font>;
00243                               *to++ = <font class="charliteral">'s'</font>;
00244                               *to++ = <font class="charliteral">'2'</font>;
00245                               *to++ = <font class="charliteral">'2'</font>;
00246                               *to++ = <font class="charliteral">' '</font>;
00247                               <font class="keywordflow">continue</font>;
00248                             <font class="keywordflow">case</font> <font class="charliteral">'t'</font>:
00249                               *to++ = <font class="charliteral">'}'</font>;
00250                               <font class="keywordflow">continue</font>;
00251                             <font class="keywordflow">case</font> <font class="charliteral">'S'</font>:
00252                               *to++ = <font class="charliteral">'\\'</font>;
00253                               *to++ = <font class="charliteral">'p'</font>;
00254                               *to++ = <font class="charliteral">'a'</font>;
00255                               *to++ = <font class="charliteral">'r'</font>;
00256                               *to++ = <font class="charliteral">' '</font>;
00257                               *to++ = <font class="charliteral">'{'</font>;
00258                               *to++ = <font class="charliteral">'\\'</font>;
00259                               *to++ = <font class="charliteral">'i'</font>;
00260                               *to++ = <font class="charliteral">'1'</font>;
00261                               *to++ = <font class="charliteral">'\\'</font>;
00262                               *to++ = <font class="charliteral">'b'</font>;
00263                               *to++ = <font class="charliteral">'1'</font>;
00264                               *to++ = <font class="charliteral">' '</font>;
00265                               <font class="keywordflow">continue</font>;
00266                             <font class="keywordflow">case</font> <font class="charliteral">'s'</font>:
00267                               *to++ = <font class="charliteral">'}'</font>;
00268                               *to++ = <font class="charliteral">'\\'</font>;
00269                               *to++ = <font class="charliteral">'p'</font>;
00270                               *to++ = <font class="charliteral">'a'</font>;
00271                               *to++ = <font class="charliteral">'r'</font>;
00272                               *to++ = <font class="charliteral">' '</font>;
00273                               <font class="keywordflow">continue</font>;
00274                             }
00275                           <font class="keywordflow">break</font>;
00276 
00277                         }
00278                         <font class="keywordflow">continue</font>;
00279                 }
00280                 <font class="keywordflow">if</font> (intoken) {
00281                         <font class="keywordflow">if</font> (tokpos &lt; 2045)
00282                                 token[tokpos++] = *from;
00283                                 token[tokpos+2] = 0;
00284                 }
00285                 <font class="keywordflow">else</font>    *to++ = *from;
00286         }
00287         *to++ = 0;
00288         *to = 0;
00289         <font class="keywordflow">return</font> 0;
00290 }
</pre></div><hr><address align="right"><small>Generated on Thu Jun 20 22:12:59 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>