diff options
author | Roberto C. Sanchez <roberto@connexer.com> | 2014-03-29 10:53:59 -0400 |
---|---|---|
committer | Roberto C. Sanchez <roberto@connexer.com> | 2014-03-29 10:53:59 -0400 |
commit | 03134fa5f6f25d92724ce4c183f9bbe12a9e37dc (patch) | |
tree | 847326a4de82f0241ac87cbbc427a1b92a696a02 /src/modules/filters/osismorph.cpp | |
parent | d7469385b05b9510338407fa123e9ad090f80af6 (diff) |
Imported Upstream version 1.5.11
Diffstat (limited to 'src/modules/filters/osismorph.cpp')
-rw-r--r-- | src/modules/filters/osismorph.cpp | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/src/modules/filters/osismorph.cpp b/src/modules/filters/osismorph.cpp new file mode 100644 index 0000000..69d44d5 --- /dev/null +++ b/src/modules/filters/osismorph.cpp @@ -0,0 +1,85 @@ +/****************************************************************************** + * + * osismorph - SWFilter descendant to hide or show morph tags + * in a OSIS module. + */ + + +#include <stdlib.h> +#include <osismorph.h> + +SWORD_NAMESPACE_START + +const char oName[] = "Morphological Tags"; +const char oTip[] = "Toggles Morphological Tags On and Off if they exist"; + +const SWBuf choices[3] = {"Off", "On", ""}; +const StringList oValues(&choices[0], &choices[2]); + +OSISMorph::OSISMorph() : SWOptionFilter(oName, oTip, &oValues) { + setOptionValue("Off"); +} + + +OSISMorph::~OSISMorph() { +} + + +char OSISMorph::processText(SWBuf &text, const SWKey *key, const SWModule *module) { + if (!option) { // if we don't want morph tags + char token[2048]; // cheese. Fix. + int tokpos = 0; + bool intoken = false; + bool lastspace = false; + SWBuf orig = text; + const char *from = orig.c_str(); + + //taken out of the loop for speed + const char* start = 0; + const char* end = 0; + + for (text = ""; *from; ++from) { + if (*from == '<') { + intoken = true; + tokpos = 0; + token[0] = 0; + continue; + } + if (*from == '>') { // process tokens + intoken = false; + + if ((*token == 'w') && (token[1] == ' ')) { + start = strstr(token+2, "morph=\""); //we leave out "w " at the start + end = start ? strchr(start+7, '"') : 0; //search the end of the morph value + + if (start && end) { //start and end of the morph tag found + text.append('<'); + text.append(token, start-token); //the text before the morph attr + text.append(end+1); //text after the morph attr + text.append('>'); + + continue; //next loop + } + } + + text.append('<'); + text.append(token); + text.append('>'); + + continue; + } + if (intoken) { + if (tokpos < 2045) + token[tokpos++] = *from; + token[tokpos] = 0; + } + else { + text.append(*from); + lastspace = (*from == ' '); + } + } + } + return 0; +} + +SWORD_NAMESPACE_END |