<!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>swlocale.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>swlocale.cpp</h1><div class="fragment"><pre>00001 <font class="comment">/******************************************************************************</font> 00002 <font class="comment"> * swlocale.cpp - implementation of Class SWLocale used for retrieval</font> 00003 <font class="comment"> * of locale lookups</font> 00004 <font class="comment"> *</font> 00005 <font class="comment"> * $Id: swlocale_8cpp-source.html,v 1.3 2002/06/20 20:23:10 mgruner Exp $</font> 00006 <font class="comment"> *</font> 00007 <font class="comment"> * Copyright 2000 CrossWire Bible Society (http://www.crosswire.org)</font> 00008 <font class="comment"> * CrossWire Bible Society</font> 00009 <font class="comment"> * P. O. Box 2528</font> 00010 <font class="comment"> * Tempe, AZ 85280-2528</font> 00011 <font class="comment"> *</font> 00012 <font class="comment"> * This program is free software; you can redistribute it and/or modify it</font> 00013 <font class="comment"> * under the terms of the GNU General Public License as published by the</font> 00014 <font class="comment"> * Free Software Foundation version 2.</font> 00015 <font class="comment"> *</font> 00016 <font class="comment"> * This program is distributed in the hope that it will be useful, but</font> 00017 <font class="comment"> * WITHOUT ANY WARRANTY; without even the implied warranty of</font> 00018 <font class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</font> 00019 <font class="comment"> * General Public License for more details.</font> 00020 <font class="comment"> *</font> 00021 <font class="comment"> */</font> 00022 00023 <font class="preprocessor">#include <swlocale.h></font> 00024 <font class="preprocessor">#include <utilfuns.h></font> 00025 00026 00027 SWLocale::SWLocale(<font class="keyword">const</font> <font class="keywordtype">char</font> * ifilename) { 00028 ConfigEntMap::iterator confEntry; 00029 00030 name = 0; 00031 description = 0; 00032 bookAbbrevs = 0; 00033 BMAX = 0; 00034 books = 0; 00035 localeSource = <font class="keyword">new</font> <a class="code" href="class_s_w_config.html">SWConfig</a>(ifilename); 00036 00037 confEntry = localeSource->Sections[<font class="stringliteral">"Meta"</font>].find(<font class="stringliteral">"Name"</font>); 00038 <font class="keywordflow">if</font> (confEntry != localeSource->Sections[<font class="stringliteral">"Meta"</font>].end()) 00039 stdstr(&name, (*confEntry).second.c_str()); 00040 00041 confEntry = localeSource->Sections[<font class="stringliteral">"Meta"</font>].find(<font class="stringliteral">"Description"</font>); 00042 <font class="keywordflow">if</font> (confEntry != localeSource->Sections[<font class="stringliteral">"Meta"</font>].end()) 00043 stdstr(&description, (*confEntry).second.c_str()); 00044 } 00045 00046 00047 SWLocale::~SWLocale() { 00048 00049 <font class="keyword">delete</font> localeSource; 00050 00051 <font class="keywordflow">if</font> (description) 00052 <font class="keyword">delete</font> [] description; 00053 00054 <font class="keywordflow">if</font> (name) 00055 <font class="keyword">delete</font> [] name; 00056 00057 <font class="keywordflow">if</font> (bookAbbrevs) 00058 <font class="keyword">delete</font> [] bookAbbrevs; 00059 00060 <font class="keywordflow">if</font> (BMAX) { 00061 <font class="keywordflow">for</font> (<font class="keywordtype">int</font> i = 0; i < 2; i++) 00062 <font class="keyword">delete</font> [] books[i]; 00063 <font class="keyword">delete</font> [] BMAX; 00064 <font class="keyword">delete</font> [] books; 00065 } 00066 } 00067 00068 00069 <font class="keyword">const</font> <font class="keywordtype">char</font> *SWLocale::translate(<font class="keyword">const</font> <font class="keywordtype">char</font> *text) { 00070 LookupMap::iterator entry; 00071 00072 entry = lookupTable.find(text); 00073 00074 <font class="keywordflow">if</font> (entry == lookupTable.end()) { 00075 ConfigEntMap::iterator confEntry; 00076 confEntry = localeSource->Sections[<font class="stringliteral">"Text"</font>].find(text); 00077 <font class="keywordflow">if</font> (confEntry == localeSource->Sections[<font class="stringliteral">"Text"</font>].end()) 00078 lookupTable.insert(LookupMap::value_type(text, text)); 00079 <font class="keywordflow">else</font> lookupTable.insert(LookupMap::value_type(text, (*confEntry).second.c_str())); 00080 entry = lookupTable.find(text); 00081 } 00082 <font class="keywordflow">return</font> (*entry).second.c_str(); 00083 } 00084 00085 <a name="l00086"></a><a class="code" href="class_s_w_locale.html#a2">00086</a> <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="class_s_w_locale.html#a2">SWLocale::getName</a>() { 00087 <font class="keywordflow">return</font> name; 00088 } 00089 00090 <a name="l00091"></a><a class="code" href="class_s_w_locale.html#a3">00091</a> <font class="keyword">const</font> <font class="keywordtype">char</font> *<a class="code" href="class_s_w_locale.html#a3">SWLocale::getDescription</a>() { 00092 <font class="keywordflow">return</font> description; 00093 } 00094 00095 00096 <a class="code" href="class_s_w_locale.html">SWLocale</a> &SWLocale::operator +=(<a class="code" href="class_s_w_locale.html">SWLocale</a> &addFrom) { 00097 *localeSource += *addFrom.<a class="code" href="class_s_w_locale.html#o1">localeSource</a>; 00098 <font class="keywordflow">return</font> *<font class="keyword">this</font>; 00099 } 00100 00101 00102 <font class="keyword">const</font> <font class="keyword">struct </font>abbrev *SWLocale::getBookAbbrevs() { 00103 <font class="keyword">static</font> <font class="keyword">const</font> <font class="keywordtype">char</font> *nullstr = <font class="stringliteral">""</font>; 00104 <font class="keywordflow">if</font> (!bookAbbrevs) { 00105 ConfigEntMap::iterator it; 00106 <font class="keywordtype">int</font> i; 00107 <font class="keywordtype">int</font> size = localeSource->Sections[<font class="stringliteral">"Book Abbrevs"</font>].size(); 00108 bookAbbrevs = <font class="keyword">new</font> <font class="keyword">struct </font>abbrev[size + 1]; 00109 <font class="keywordflow">for</font> (i = 0, it = localeSource->Sections[<font class="stringliteral">"Book Abbrevs"</font>].begin(); it != localeSource->Sections[<font class="stringliteral">"Book Abbrevs"</font>].end(); it++, i++) { 00110 bookAbbrevs[i].ab = (*it).first.c_str(); 00111 bookAbbrevs[i].book = atoi((*it).second.c_str()); 00112 } 00113 bookAbbrevs[i].ab = nullstr; 00114 bookAbbrevs[i].book = -1; 00115 } 00116 00117 <font class="keywordflow">return</font> bookAbbrevs; 00118 } 00119 00120 00121 <font class="keywordtype">void</font> SWLocale::getBooks(<font class="keywordtype">char</font> **iBMAX, <font class="keyword">struct</font> sbook ***ibooks) { 00122 <font class="keywordflow">if</font> (!BMAX) { 00123 BMAX = <font class="keyword">new</font> <font class="keywordtype">char</font> [2]; 00124 BMAX[0] = VerseKey::builtin_BMAX[0]; 00125 BMAX[1] = VerseKey::builtin_BMAX[1]; 00126 00127 books = <font class="keyword">new</font> <font class="keyword">struct </font>sbook *[2]; 00128 books[0] = <font class="keyword">new</font> <font class="keyword">struct </font>sbook[BMAX[0]]; 00129 books[1] = <font class="keyword">new</font> <font class="keyword">struct </font>sbook[BMAX[1]]; 00130 00131 <font class="keywordflow">for</font> (<font class="keywordtype">int</font> i = 0; i < 2; i++) { 00132 <font class="keywordflow">for</font> (<font class="keywordtype">int</font> j = 0; j < BMAX[i]; j++) { 00133 books[i][j] = VerseKey::builtin_books[i][j]; 00134 books[i][j].name = translate(VerseKey::builtin_books[i][j].name); 00135 } 00136 } 00137 } 00138 00139 *iBMAX = BMAX; 00140 *ibooks = books; 00141 } </pre></div><hr><address align="right"><small>Generated on Thu Jun 20 22:13:00 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>