diff options
author | Roberto C. Sanchez <roberto@connexer.com> | 2014-05-12 08:21:30 -0400 |
---|---|---|
committer | Roberto C. Sanchez <roberto@connexer.com> | 2014-05-12 08:21:30 -0400 |
commit | 7a00574163029c0c2b649878c95d5acbd083564a (patch) | |
tree | c13cc5736025834df2874ed87ee8598070025ea6 /src/modules/filters/osisxlit.cpp | |
parent | b745315323de9f27538edac9453205ca70e6186e (diff) |
Imported Upstream version 1.7.2+dfsg
Diffstat (limited to 'src/modules/filters/osisxlit.cpp')
-rw-r--r-- | src/modules/filters/osisxlit.cpp | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/modules/filters/osisxlit.cpp b/src/modules/filters/osisxlit.cpp new file mode 100644 index 0000000..d5ccbe4 --- /dev/null +++ b/src/modules/filters/osisxlit.cpp @@ -0,0 +1,99 @@ +/****************************************************************************** + * + * osisxlit.cpp - SWFilter descendant to hide or show xlit values + * (encoded transliterations) in an OSIS module + * + * $Id: osisxlit.cpp 2980 2013-09-14 21:51:47Z scribe $ + * + * Copyright 2013 CrossWire Bible Society (http://www.crosswire.org) + * CrossWire Bible Society + * P. O. Box 2528 + * Tempe, AZ 85280-2528 + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation version 2. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + */ + +#include <stdlib.h> +#include <osisxlit.h> +#include <utilxml.h> + + +SWORD_NAMESPACE_START + +namespace { + + static const char oName[] = "Transliterated Forms"; + static const char oTip[] = "Toggles transliterated forms On and Off if they exist"; + + static const StringList *oValues() { + static const SWBuf choices[3] = {"Off", "On", ""}; + static const StringList oVals(&choices[0], &choices[2]); + return &oVals; + } +} + + +OSISXlit::OSISXlit() : SWOptionFilter(oName, oTip, oValues()) { +} + + +OSISXlit::~OSISXlit() { +} + + +char OSISXlit::processText(SWBuf &text, const SWKey *key, const SWModule *module) { + SWBuf token; + bool intoken = false; + + const SWBuf orig = text; + const char * from = orig.c_str(); + + if (!option) { + for (text = ""; *from; ++from) { + if (*from == '<') { + intoken = true; + token = ""; + continue; + } + if (*from == '>') { // process tokens + intoken = false; + if (token.startsWith("w ")) { // Word + XMLTag wtag(token); + const char *l = wtag.getAttribute("xlit"); + if (l) { + wtag.setAttribute("xlit", 0); + token = wtag; + token.trim(); + // drop <> + token << 1; + token--; + } + } + + // keep token in text + text.append('<'); + text.append(token); + text.append('>'); + + continue; + } + if (intoken) { + token += *from; + } + else { + text.append(*from); + } + } + } + return 0; +} + +SWORD_NAMESPACE_END |