summaryrefslogtreecommitdiff
path: root/src/modules/filters/papyriplain.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/filters/papyriplain.cpp')
-rw-r--r--src/modules/filters/papyriplain.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/modules/filters/papyriplain.cpp b/src/modules/filters/papyriplain.cpp
new file mode 100644
index 0000000..423bfda
--- /dev/null
+++ b/src/modules/filters/papyriplain.cpp
@@ -0,0 +1,71 @@
+/******************************************************************************
+ *
+ * papyriplain - SWFilter descendant to strip out all Papyri tags
+ */
+
+
+#include <stdlib.h>
+#include <papyriplain.h>
+
+SWORD_NAMESPACE_START
+
+PapyriPlain::PapyriPlain() {
+}
+
+
+char PapyriPlain::processText (SWBuf &text, const SWKey *key, const SWModule *module)
+{
+ SWBuf orig = text;
+ const char *from = orig.c_str();
+
+ for (text = ""; *from; ++from) {
+
+ // remove hyphen and whitespace if that is all that separates words
+ // also be sure we're not a double hyphen '--'
+ if ((*from == '-') && (text.length() > 0) && (text[text.length()-1] != '-')) {
+ char remove = 0;
+ const char *c;
+ for (c = from+1; *c; c++) {
+ if ((*c == 10) || (*c == 13)) {
+ remove = 1;
+ }
+ if (!strchr(" \t\n", *c)) {
+ if (remove) remove++;
+ break;
+ }
+ }
+ if (remove > 1) {
+ from = c-1;
+ continue;
+ }
+ }
+
+ // remove all newlines
+ if ((*from == 10) || (*from == 13)) {
+ if ((text.length()>1) && (text[text.length()-2] != ' ') && (*(from+1) != ' '))
+ text.append(' ');
+ continue;
+ }
+
+
+ // strip odd characters
+ switch (*from) {
+ case '(':
+ case ')':
+ case '[':
+ case ']':
+ case '{':
+ case '}':
+ case '<':
+ case '>':
+ continue;
+ }
+
+ // if we've made it this far
+ text.append(*from);
+
+ }
+ return 0;
+}
+
+SWORD_NAMESPACE_END