[sword-svn] r3895 - in trunk: cmake include src/modules/filters
scribe at crosswire.org
scribe at crosswire.org
Tue Apr 23 10:37:57 EDT 2024
Author: scribe
Date: 2024-04-23 10:37:56 -0400 (Tue, 23 Apr 2024)
New Revision: 3895
Added:
trunk/include/rtfplain.h
trunk/src/modules/filters/rtfplain.cpp
Modified:
trunk/cmake/sources.cmake
trunk/src/modules/filters/Makefile.am
Log:
added rtfplain filter
Modified: trunk/cmake/sources.cmake
===================================================================
--- trunk/cmake/sources.cmake 2023-11-22 17:17:51 UTC (rev 3894)
+++ trunk/cmake/sources.cmake 2024-04-23 14:37:56 UTC (rev 3895)
@@ -145,6 +145,7 @@
src/modules/filters/cipherfil.cpp
src/modules/filters/rtfhtml.cpp
+ src/modules/filters/rtfplain.cpp
src/modules/filters/greeklexattribs.cpp
src/modules/filters/papyriplain.cpp
@@ -354,6 +355,7 @@
include/roman.h
include/rtfhtml.h
+ include/rtfplain.h
include/sapphire.h
include/scsuutf8.h
include/strkey.h
Added: trunk/include/rtfplain.h
===================================================================
--- trunk/include/rtfplain.h (rev 0)
+++ trunk/include/rtfplain.h 2024-04-23 14:37:56 UTC (rev 3895)
@@ -0,0 +1,41 @@
+/***************************************************************************
+ *
+ * rtfplain.h - class RTFPlain: a RenderFilter to render plain text from
+ * a very limited subset of RTF
+ *
+ *
+ * $Id: rtfplain.h 3786 2020-08-30 11:35:14Z scribe $
+ *
+ * Copyright 2000-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.
+ *
+ */
+
+#ifndef RTFPLAIN_H
+#define RTFPLAIN_H
+
+#include <swfilter.h>
+
+SWORD_NAMESPACE_START
+
+/** this filter converts RTF text into plain text
+ */
+class SWDLLEXPORT RTFPlain : public SWFilter {
+public:
+ RTFPlain();
+ virtual char processText(SWBuf &text, const SWKey *key = 0, const SWModule *module = 0);
+};
+
+SWORD_NAMESPACE_END
+#endif
Modified: trunk/src/modules/filters/Makefile.am
===================================================================
--- trunk/src/modules/filters/Makefile.am 2023-11-22 17:17:51 UTC (rev 3894)
+++ trunk/src/modules/filters/Makefile.am 2024-04-23 14:37:56 UTC (rev 3895)
@@ -84,6 +84,7 @@
libsword_la_SOURCES += $(filtersdir)/cipherfil.cpp
PLFIL = $(filtersdir)/rtfhtml.cpp
+PLFIL += $(filtersdir)/rtfplain.cpp
PLFIL += $(filtersdir)/greeklexattribs.cpp
PLFIL += $(filtersdir)/papyriplain.cpp
Added: trunk/src/modules/filters/rtfplain.cpp
===================================================================
--- trunk/src/modules/filters/rtfplain.cpp (rev 0)
+++ trunk/src/modules/filters/rtfplain.cpp 2024-04-23 14:37:56 UTC (rev 3895)
@@ -0,0 +1,93 @@
+/***************************************************************************
+ *
+ * rtfplain.cpp - filter to convert RTF to plain text
+ *
+ * $Id: rtfplain.cpp 3749 2020-07-06 23:51:56Z scribe $
+ *
+ * Copyright 1999 The team of Bibletime (info at bibletime.de)
+ * Copyright 2000-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 <rtfplain.h>
+#include <swbuf.h>
+#include <utilstr.h>
+#include <ctype.h>
+#include <sysdata.h>
+
+SWORD_NAMESPACE_START
+
+RTFPlain::RTFPlain()
+{
+}
+
+
+char RTFPlain::processText(SWBuf &text, const SWKey *key, const SWModule *module)
+{
+ bool center = false;
+
+ const char *from;
+ SWBuf orig = text;
+ from = orig.c_str();
+ for (text = ""; *from; from++)
+ {
+ if (*from == '\\') // a RTF command
+ {
+ // \u12345?
+ if ( *(from+1) == 'u' && (*(from+2) == '-' || isdigit(*(from+2)))) {
+ from += 2;
+ const char *end = from;
+ while (isdigit(*++end));
+ SWBuf num;
+ num.append(from, end-from);
+ SW_s16 n = atoi(num.c_str());
+ SW_u32 u = (SW_u16)n;
+ getUTF8FromUniChar(u, &text);
+ from += (end-from);
+ continue;
+ }
+ if (!strncmp(from+1, "pard", 4)) { // switch all modifiers off
+ if (center) {
+ center = false;
+ }
+ from += 4;
+ continue;
+ }
+ if (!strncmp(from+1, "par", 3)) {
+ text += "\n";
+ from += 3;
+ continue;
+ }
+ if (from[1] == ' ') {
+ from += 1;
+ continue;
+ }
+ if (!strncmp(from+1, "qc", 2)) { // center on
+ if (!center) {
+ text += "\t\t";
+ center = true;
+ }
+ from += 2;
+ continue;
+ }
+ }
+
+ text += *from;
+ }
+ return 0;
+}
+
+SWORD_NAMESPACE_END
More information about the sword-cvs
mailing list