[sword-svn] r517 - branches/BCB5
scribe at crosswire.org
scribe at crosswire.org
Fri Jul 24 03:30:17 EDT 2020
Author: scribe
Date: 2020-07-24 03:30:17 -0400 (Fri, 24 Jul 2020)
New Revision: 517
Modified:
branches/BCB5/swdisprtfchap.cpp
Log:
Restored swdisprtfchap.cpp due to a corrupt file commit
Modified: branches/BCB5/swdisprtfchap.cpp
===================================================================
--- branches/BCB5/swdisprtfchap.cpp 2020-07-24 07:29:18 UTC (rev 516)
+++ branches/BCB5/swdisprtfchap.cpp 2020-07-24 07:30:17 UTC (rev 517)
@@ -1 +1,229 @@
-
\ No newline at end of file
+
+//---------------------------------------------------------------------------
+#include <vcl\vcl.h>
+#pragma hdrstop
+
+#include "biblecsmgr.h"
+#include "swdisprtfchap.h"
+#include <winbase.h>
+#include <unicodertf.h>
+#include <versekey.h>
+#include <stdio.h>
+
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <io.h>
+#include <utilstr.h>
+
+//using namespace std;
+
+//---------------------------------------------------------------------------
+static inline SWDispRTFChap *ValidCtrCheck()
+{
+ return new SWDispRTFChap(NULL);
+}
+
+char SWDispRTFChap::platformID = 0;
+
+class SWDispRTFChap_init {
+public:
+ SWDispRTFChap_init() {
+ OSVERSIONINFO osvi;
+ memset(&osvi, 0, sizeof(OSVERSIONINFO));
+ osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ GetVersionEx(&osvi);
+ SWDispRTFChap::platformID = osvi.dwPlatformId;
+ }
+} SWDispRTFChap::_init;
+
+
+//---------------------------------------------------------------------------
+__fastcall SWDispRTFChap::SWDispRTFChap(TWinControl *Owner)
+ : SWDispRTF(Owner)
+{
+}
+
+__fastcall SWDispRTFChap::~SWDispRTFChap()
+{
+}
+
+
+void __fastcall SWDispRTFChap::Loaded(void)
+{
+ SWDispRTF::Loaded();
+}
+
+// Display for biblical text
+char SWDispRTFChap::Display(SWModule &Module) {
+ int testmt, book, chap, verse, versepos;
+ char buf[254];
+ System::AnsiString newtext, tmptext, tmptext2;
+
+ static bool hebarLang;
+ static char* hebarLanguages[] = {"he", "ar", "fa", "ug", "ur", 0};
+
+ VerseKey *key = (VerseKey *)Module.getKey();
+ key->setIntros(true);
+ testmt = key->getTestament();
+ book = key->getBook();
+ chap = key->getChapter();
+ verse = key->getVerse();
+ key->setAutoNormalize(false);
+ key->setVerse(0);
+ if (chap == 1) {
+ key->setChapter(0);
+ if (book == 1) {
+ key->setBook(0);
+ if (testmt == 1) key->setTestament(0);
+ }
+ }
+ key->setAutoNormalize(false);
+
+ module = &Module;
+ type = "Default";
+
+ //Windows of various flavors has odd behavior with Hebrew & Arabic, which are only partially supported as RTL scripts.
+ //This snippet determines whether the module is set up to use one of these languages and is tagged as RTL.
+ hebarLang = false;
+ if (Module.getDirection() == DIRECTION_RTL && Module.getLanguage()) {
+ for (unsigned char l = 0; hebarLanguages[l]; l++) {
+ if (!strnicmp(Module.getLanguage(), hebarLanguages[l], 2)) { //change the length variable if we ever get any 3-char language codes
+ hebarLang = true;
+ }
+ }
+ }
+ recalcAppearance();
+
+ newtext = RTFHeader;
+ newtext = newtext + RTFChapterMarkPre + IntToStr(chap) + RTFChapterMarkPost;
+ newtext = newtext + "\\pard\\f0\\nowidctlpar\\cf7 ";
+ if (Module.getDirection() == DIRECTION_RTL) {
+ newtext = newtext + "\\qr ";
+ }
+ if (platformID == VER_PLATFORM_WIN32_NT && hebarLang) {
+ newtext = newtext + "\\rtlpar ";
+ }
+
+ Module.popError(); // clear error;
+ SWBuf lastEntry = "something the first entry will never be";
+ while (((!key->getBook())||(key->getBook() == book)) && ((!key->getChapter())||(key->getChapter() == chap)) && (Module.popError() == 0)) {
+ SWBuf rawText = Module.getRawEntry();
+
+ // strip off any leading and ending whitespace
+ rawText.trim();
+
+ if (lastEntry == rawText) {
+ Module++;
+ continue;
+ }
+ newtext = newtext + "{";
+
+ tmptext = "";
+ lastEntry = rawText;
+ SWBuf renderedText = Module.renderText();
+ for (const char *loop = renderedText.c_str(); *loop; loop++) {
+ if (*loop == '\n') {
+ tmptext += "\\par ";
+ }
+ else tmptext += *loop;
+ }
+ if (tmptext.Length() > 3) { // make sure we have an entry
+ int pvHeading = 0;
+ do {
+ sprintf(buf, "%i", pvHeading++);
+ SWBuf preverseHeading = module->getEntryAttributes()["Heading"]["Preverse"][buf].c_str();
+ preverseHeading = Module.renderText(preverseHeading);
+ if (preverseHeading.length()) {
+ newtext += ((AnsiString)"\\par\\par {\\i1\\b1 ") + preverseHeading.c_str() + "\\par}";
+ }
+ else break;
+ } while (true);
+ if (Module.getDirection() == DIRECTION_RTL && (platformID == VER_PLATFORM_WIN32_WINDOWS || !hebarLang)) {
+ newtext = newtext + RTFVersePre;
+ if ((key->getVerse() == verse) && (dispAttribs.markCurrentVerse)) {
+ newtext = newtext + "\\cf2 "; // \cf2 = second color in color table
+ }
+ newtext += tmptext + RTFVersePost;
+ if (key->getVerse())
+ newtext = newtext + RTFVerseMarkPre + /*"<a href=\"\">" +*/ IntToStr(key->getVerse()) /*+ "</a>"*/ + RTFVerseMarkPost;
+
+ if (!dispAttribs.verseNewLine)
+ newtext = newtext + "\\par ";
+ }
+ else {
+ if (key->getVerse())
+ newtext = newtext + RTFVerseMarkPre + /*"<a href=\"\">" +*/ IntToStr(key->getVerse()) /*+ "</a>"*/ + RTFVerseMarkPost;
+ newtext = newtext + RTFVersePre;
+ if ((key->getVerse() == verse) && (dispAttribs.markCurrentVerse)) {
+ newtext = newtext + "\\cf2 "; // \cf2 = second color in color table
+ }
+ newtext += tmptext + RTFVersePost;
+ }
+ // check for headings and add a couple new lines, if so.
+ if ((!key->getVerse()) || (!key->getChapter()) || (!key->getBook()) || (!key->getTestament())) {
+ if (rawText.size())
+ newtext = newtext + "\\par\\par";
+ }
+ // we don't want to add too many newlines if this display option is turned on, so this is in an else.
+ else {
+ if (dispAttribs.verseNewLine) {
+ newtext += "\\par ";
+ }
+ }
+ }
+ if (key->getVerse() == verse) {
+ tmptext = newtext + RTFTrailer + "}";
+ RTFStream->Clear();
+ RTFStream->WriteBuffer(tmptext.c_str(), tmptext.Length());
+ RTFStream->Position = 0;
+ Lines->LoadFromStream(RTFStream);
+ makeLinks();
+ makeImages();
+ versepos = GetTextLen() - 3;
+ }
+ newtext = newtext + "}";
+ Module++;
+ }
+ newtext = newtext + RTFTrailer;
+
+ makeBracketsEven(newtext);
+
+ key->setVerse(1); //{ When setting chapter: if (verse !in new chapter range) don't autonormalize. (we could've just turned the autonormalize option off then back on, but this is cooler) }
+ key->setChapter(1);
+ key->setBook(1);
+ key->setTestament(testmt);
+ key->setBook(book);
+ key->setChapter(chap);
+ key->setVerse(verse);
+
+ RTFStream->Clear();
+ RTFStream->WriteBuffer(newtext.c_str(), newtext.Length());
+// int fd = open("rtfout.txt", O_CREAT|O_RDWR|O_TRUNC, S_IREAD|S_IWRITE);
+// write(fd, newtext.c_str(), newtext.Length());
+// close(fd);
+ RTFStream->Position = 0;
+ Lines->LoadFromStream(RTFStream);
+
+ makeLinks();
+ makeImages();
+
+ //{ Position control text at current verse }
+ this->SetFocus();
+ SelStart = 1;
+ SendMessage(Handle, EM_SCROLLCARET, 0, 0);
+ SelStart = versepos;
+ SendMessage(Handle, EM_SCROLLCARET, 0, 0);
+ return 0;
+}
+
+
+//---------------------------------------------------------------------------
+namespace Swdisprtfchap
+{
+ void __fastcall Register()
+ {
+ TComponentClass classes[1] = {__classid(SWDispRTFChap)};
+ RegisterComponents("SWORD", classes, 0);
+ }
+}
+//---------------------------------------------------------------------------
More information about the sword-cvs
mailing list