<!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>markupfiltmgr.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> <a class="qindex" href="namespaces.html">Namespace List</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="classes.html">Alphabetical List</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> </center> <hr><h1>markupfiltmgr.cpp</h1><div class="fragment"><pre>00001 <font class="comment">/******************************************************************************</font> 00002 <font class="comment"> * swmarkupmgr.cpp - implementaion of class MarkupFilterMgr, subclass of</font> 00003 <font class="comment"> * used to transcode all module text to a requested</font> 00004 <font class="comment"> * markup.</font> 00005 <font class="comment"> *</font> 00006 <font class="comment"> * Copyright 1998 CrossWire Bible Society (http://www.crosswire.org)</font> 00007 <font class="comment"> * CrossWire Bible Society</font> 00008 <font class="comment"> * P. O. Box 2528</font> 00009 <font class="comment"> * Tempe, AZ 85280-2528</font> 00010 <font class="comment"> *</font> 00011 <font class="comment"> * This program is free software; you can redistribute it and/or modify it</font> 00012 <font class="comment"> * under the terms of the GNU General Public License as published by the</font> 00013 <font class="comment"> * Free Software Foundation version 2.</font> 00014 <font class="comment"> *</font> 00015 <font class="comment"> * This program is distributed in the hope that it will be useful, but</font> 00016 <font class="comment"> * WITHOUT ANY WARRANTY; without even the implied warranty of</font> 00017 <font class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</font> 00018 <font class="comment"> * General Public License for more details.</font> 00019 <font class="comment"> *</font> 00020 <font class="comment"> */</font> 00021 00022 <font class="preprocessor">#include <thmlplain.h></font> 00023 <font class="preprocessor">#include <gbfplain.h></font> 00024 <font class="preprocessor">#include <thmlgbf.h></font> 00025 <font class="preprocessor">#include <gbfthml.h></font> 00026 <font class="preprocessor">#include <thmlhtml.h></font> 00027 <font class="preprocessor">#include <gbfhtml.h></font> 00028 <font class="preprocessor">#include <plainhtml.h></font> 00029 <font class="preprocessor">#include <thmlhtmlhref.h></font> 00030 <font class="preprocessor">#include <gbfhtmlhref.h></font> 00031 <font class="preprocessor">#include <thmlrtf.h></font> 00032 <font class="preprocessor">#include <gbfrtf.h></font> 00033 <font class="preprocessor">#include <gbfosis.h></font> 00034 <font class="preprocessor">#include <thmlosis.h></font> 00035 00036 <font class="preprocessor">#include <markupfiltmgr.h></font> 00037 00038 <font class="preprocessor">#include <swmgr.h></font> 00039 00040 00041 <font class="comment">/******************************************************************************</font> 00042 <font class="comment"> * MarkupFilterMgr Constructor - initializes instance of MarkupFilterMgr</font> 00043 <font class="comment"> *</font> 00044 <font class="comment"> * ENT:</font> 00045 <font class="comment"> * enc - Encoding format to emit</font> 00046 <font class="comment"> * mark - Markup format to emit</font> 00047 <font class="comment"> */</font> 00048 <a name="l00049"></a><a class="code" href="class_markup_filter_mgr.html#a0">00049</a> <a class="code" href="class_markup_filter_mgr.html#a0">MarkupFilterMgr::MarkupFilterMgr</a> (<font class="keywordtype">char</font> mark, <font class="keywordtype">char</font> enc) 00050 : <a class="code" href="class_encoding_filter_mgr.html">EncodingFilterMgr</a>(enc) { 00051 00052 markup = mark; 00053 00054 CreateFilters(markup); 00055 } 00056 00057 00058 <font class="comment">/******************************************************************************</font> 00059 <font class="comment"> * MarkupFilterMgr Destructor - Cleans up instance of MarkupFilterMgr</font> 00060 <font class="comment"> */</font> 00061 <a name="l00062"></a><a class="code" href="class_markup_filter_mgr.html#a1">00062</a> <a class="code" href="class_markup_filter_mgr.html#a1">MarkupFilterMgr::~MarkupFilterMgr</a>() { 00063 <font class="keywordflow">if</font> (fromthml) 00064 <font class="keyword">delete</font> (fromthml); 00065 <font class="keywordflow">if</font> (fromgbf) 00066 <font class="keyword">delete</font> (fromgbf); 00067 <font class="keywordflow">if</font> (fromplain) 00068 <font class="keyword">delete</font> (fromplain); 00069 <font class="keywordflow">if</font> (fromosis) 00070 <font class="keyword">delete</font> (fromosis); 00071 } 00072 00073 <font class="comment">/******************************************************************************</font> 00074 <font class="comment"> * MarkupFilterMgr::Markup - sets/gets markup</font> 00075 <font class="comment"> *</font> 00076 <font class="comment"> * ENT: mark - new encoding or 0 to simply get the current markup</font> 00077 <font class="comment"> *</font> 00078 <font class="comment"> * RET: markup</font> 00079 <font class="comment"> */</font> <a name="l00080"></a><a class="code" href="class_markup_filter_mgr.html#a2">00080</a> <font class="keywordtype">char</font> <a class="code" href="class_markup_filter_mgr.html#a2">MarkupFilterMgr::Markup</a>(<font class="keywordtype">char</font> mark) { 00081 <font class="keywordflow">if</font> (mark && mark != markup) { 00082 markup = mark; 00083 ModMap::const_iterator module; 00084 00085 SWFilter * oldplain = fromplain; 00086 SWFilter * oldthml = fromthml; 00087 SWFilter * oldgbf = fromgbf; 00088 SWFilter * oldosis = fromosis; 00089 00090 CreateFilters(markup); 00091 00092 <font class="keywordflow">for</font> (module = getParentMgr()->Modules.begin(); module != getParentMgr()->Modules.end(); module++) 00093 <font class="keywordflow">switch</font> (module->second->Markup()) { 00094 <font class="keywordflow">case</font> FMT_THML: 00095 <font class="keywordflow">if</font> (oldthml != fromthml) { 00096 <font class="keywordflow">if</font> (oldthml) { 00097 <font class="keywordflow">if</font> (!fromthml) { 00098 module->second->RemoveRenderFilter(oldthml); 00099 } 00100 <font class="keywordflow">else</font> { 00101 module->second->ReplaceRenderFilter(oldthml, fromthml); 00102 } 00103 } 00104 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (fromthml) { 00105 module->second->AddRenderFilter(fromthml); 00106 } 00107 } 00108 <font class="keywordflow">break</font>; 00109 <font class="keywordflow">case</font> FMT_GBF: 00110 <font class="keywordflow">if</font> (oldgbf != fromgbf) { 00111 <font class="keywordflow">if</font> (oldgbf) { 00112 <font class="keywordflow">if</font> (!fromgbf) { 00113 module->second->RemoveRenderFilter(oldgbf); 00114 } 00115 <font class="keywordflow">else</font> { 00116 module->second->ReplaceRenderFilter(oldgbf, fromgbf); 00117 } 00118 } 00119 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (fromgbf) { 00120 module->second->AddRenderFilter(fromgbf); 00121 } 00122 <font class="keywordflow">break</font>; 00123 } 00124 <font class="keywordflow">case</font> FMT_PLAIN: 00125 <font class="keywordflow">if</font> (oldplain != fromplain) { 00126 <font class="keywordflow">if</font> (oldplain) { 00127 <font class="keywordflow">if</font> (!fromplain) { 00128 module->second->RemoveRenderFilter(oldplain); 00129 } 00130 <font class="keywordflow">else</font> { 00131 module->second->ReplaceRenderFilter(oldplain, fromplain); 00132 } 00133 } 00134 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (fromplain) { 00135 module->second->AddRenderFilter(fromplain); 00136 } 00137 <font class="keywordflow">break</font>; 00138 } 00139 <font class="keywordflow">case</font> FMT_OSIS: 00140 <font class="keywordflow">if</font> (oldosis != fromosis) { 00141 <font class="keywordflow">if</font> (oldosis) { 00142 <font class="keywordflow">if</font> (!fromosis) { 00143 module->second->RemoveRenderFilter(oldosis); 00144 } 00145 <font class="keywordflow">else</font> { 00146 module->second->ReplaceRenderFilter(oldosis, fromosis); 00147 } 00148 } 00149 <font class="keywordflow">else</font> <font class="keywordflow">if</font> (fromosis) { 00150 module->second->AddRenderFilter(fromosis); 00151 } 00152 <font class="keywordflow">break</font>; 00153 } 00154 } 00155 00156 <font class="keywordflow">if</font> (oldthml) 00157 <font class="keyword">delete</font> oldthml; 00158 <font class="keywordflow">if</font> (oldgbf) 00159 <font class="keyword">delete</font> oldgbf; 00160 <font class="keywordflow">if</font> (oldplain) 00161 <font class="keyword">delete</font> oldplain; 00162 <font class="keywordflow">if</font> (oldosis) 00163 <font class="keyword">delete</font> oldosis; 00164 } 00165 <font class="keywordflow">return</font> markup; 00166 } 00167 <a name="l00168"></a><a class="code" href="class_markup_filter_mgr.html#a3">00168</a> <font class="keywordtype">void</font> <a class="code" href="class_markup_filter_mgr.html#a3">MarkupFilterMgr::AddRenderFilters</a>(<a class="code" href="class_s_w_module.html">SWModule</a> *module, ConfigEntMap &section) { 00169 <font class="keywordflow">switch</font> (module-><a class="code" href="class_s_w_module.html#a20">Markup</a>()) { 00170 <font class="keywordflow">case</font> FMT_THML: 00171 <font class="keywordflow">if</font> (fromthml) 00172 module-><a class="code" href="class_s_w_module.html#a41">AddRenderFilter</a>(fromthml); 00173 <font class="keywordflow">break</font>; 00174 <font class="keywordflow">case</font> FMT_GBF: 00175 <font class="keywordflow">if</font> (fromgbf) 00176 module-><a class="code" href="class_s_w_module.html#a41">AddRenderFilter</a>(fromgbf); 00177 <font class="keywordflow">break</font>; 00178 <font class="keywordflow">case</font> FMT_PLAIN: 00179 <font class="keywordflow">if</font> (fromplain) 00180 module-><a class="code" href="class_s_w_module.html#a41">AddRenderFilter</a>(fromplain); 00181 <font class="keywordflow">break</font>; 00182 <font class="keywordflow">case</font> FMT_OSIS: 00183 <font class="keywordflow">if</font> (fromosis) 00184 module-><a class="code" href="class_s_w_module.html#a41">AddRenderFilter</a>(fromosis); 00185 <font class="keywordflow">break</font>; 00186 } 00187 } 00188 00189 <font class="keywordtype">void</font> MarkupFilterMgr::CreateFilters(<font class="keywordtype">char</font> markup) { 00190 00191 <font class="keywordflow">switch</font> (markup) { 00192 <font class="keywordflow">case</font> FMT_PLAIN: 00193 fromplain = NULL; 00194 fromthml = <font class="keyword">new</font> <a class="code" href="class_th_m_l_plain.html">ThMLPlain</a>(); 00195 fromgbf = <font class="keyword">new</font> <a class="code" href="class_g_b_f_plain.html">GBFPlain</a>(); 00196 fromosis = NULL; 00197 <font class="keywordflow">break</font>; 00198 <font class="keywordflow">case</font> FMT_THML: 00199 fromplain = NULL; 00200 fromthml = NULL; 00201 fromgbf = <font class="keyword">new</font> <a class="code" href="class_g_b_f_th_m_l.html">GBFThML</a>(); 00202 fromosis = NULL; 00203 <font class="keywordflow">break</font>; 00204 <font class="keywordflow">case</font> FMT_GBF: 00205 fromplain = NULL; 00206 fromthml = <font class="keyword">new</font> <a class="code" href="class_th_m_l_g_b_f.html">ThMLGBF</a>(); 00207 fromgbf = NULL; 00208 fromosis = NULL; 00209 <font class="keywordflow">break</font>; 00210 <font class="keywordflow">case</font> FMT_HTML: 00211 fromplain = <font class="keyword">new</font> <a class="code" href="class_p_l_a_i_n_h_t_m_l.html">PLAINHTML</a>(); 00212 fromthml = <font class="keyword">new</font> <a class="code" href="class_th_m_l_h_t_m_l.html">ThMLHTML</a>(); 00213 fromgbf = <font class="keyword">new</font> <a class="code" href="class_g_b_f_h_t_m_l.html">GBFHTML</a>(); 00214 fromosis = NULL; 00215 <font class="keywordflow">break</font>; 00216 <font class="keywordflow">case</font> FMT_HTMLHREF: 00217 fromplain = NULL; 00218 fromthml = <font class="keyword">new</font> <a class="code" href="class_th_m_l_h_t_m_l_h_r_e_f.html">ThMLHTMLHREF</a>(); 00219 fromgbf = <font class="keyword">new</font> <a class="code" href="class_g_b_f_h_t_m_l_h_r_e_f.html">GBFHTMLHREF</a>(); 00220 fromosis = NULL; 00221 <font class="keywordflow">break</font>; 00222 <font class="keywordflow">case</font> FMT_RTF: 00223 fromplain = NULL; 00224 fromthml = <font class="keyword">new</font> <a class="code" href="class_th_m_l_r_t_f.html">ThMLRTF</a>(); 00225 fromgbf = <font class="keyword">new</font> <a class="code" href="class_g_b_f_r_t_f.html">GBFRTF</a>(); 00226 fromosis = NULL; 00227 <font class="keywordflow">break</font>; 00228 <font class="keywordflow">case</font> FMT_OSIS: 00229 fromplain = NULL; 00230 fromthml = <font class="keyword">new</font> <a class="code" href="class_th_m_l_o_s_i_s.html">ThMLOSIS</a>(); 00231 fromgbf = <font class="keyword">new</font> <a class="code" href="class_g_b_f_o_s_i_s.html">GBFOSIS</a>(); 00232 fromosis = NULL; 00233 <font class="keywordflow">break</font>; 00234 } 00235 00236 } </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>