QString CDisplayRendering::finishText(const QString &text, const KeyTree &tree) { BtConstModuleList modules = collectModules(tree); //marking words is very slow, we have to find a better solution /* //mark all words by spans QString text = oldText; QRegExp re("(\\b)(?=\\w)"); //word begin marker int pos = text.find(re, 0); while (pos != -1) { //word begin found //qWarning("found word at %i in %i", pos, text.length()); int endPos = pos + 1; if (!util::tool::inHTMLTag(pos+1, text)) { //the re has a positive look ahead which matches one char before the word start //qWarning("matched %s", text.mid(pos+1, 4).latin1()); //find end of word and put a marker around it endPos = text.find(QRegExp("\\b|[,.:]"), pos+1); if ((endPos != -1) && !util::tool::inHTMLTag(endPos, text) && (endPos - pos >= 3)) { //reuire wordslonger than 3 chars text.insert(endPos, "</span>"); text.insert(pos, "<span class=\"word\">"); endPos += 26; } } pos = text.find(re, endPos); } */ const CLanguageMgr::Language* const lang = (modules.count() >= 1) ? modules.first()->language() : CLanguageMgr::instance()->defaultLanguage(); CDisplayTemplateMgr *tMgr = CDisplayTemplateMgr::instance(); //Q_ASSERT(modules.count() >= 1); CDisplayTemplateMgr::Settings settings; settings.modules = modules; if (modules.count() == 1 && lang->isValid()) settings.langAbbrev = lang->abbrev(); if (modules.count() == 1) settings.textDirection = modules.first()->textDirection(); return tMgr->fillTemplate(CDisplayTemplateMgr::activeTemplateName(), text, settings); }
const QString Rendering::CChapterDisplay::text( const BtConstModuleList &modules, const QString &keyName, const DisplayOptions &displayOptions, const FilterOptions &filterOptions) { using CSBMI = CSwordBibleModuleInfo; BT_ASSERT(modules.count() >= 1); BT_ASSERT(!keyName.isEmpty()); const CSwordModuleInfo *module = modules.first(); if (modules.count() == 1) module->module().setSkipConsecutiveLinks( true ); //skip empty, linked verses CTextRendering::KeyTreeItem::Settings settings; settings.keyRenderingFace = displayOptions.verseNumbers ? CTextRendering::KeyTreeItem::Settings::SimpleKey : CTextRendering::KeyTreeItem::Settings::NoKey; QString startKey = keyName; QString endKey = startKey; //check whether there's an intro we have to include BT_ASSERT((module->type() == CSwordModuleInfo::Bible)); if (module->type() == CSwordModuleInfo::Bible) { // HACK: enable headings for VerseKeys: static_cast<sword::VerseKey *>(module->module().getKey()) ->setIntros(true); BT_ASSERT(dynamic_cast<CSBMI const *>(module)); const CSBMI *bible = static_cast<const CSBMI*>(module); CSwordVerseKey k1(module); k1.setIntros(true); k1.setKey(keyName); if (k1.getChapter() == 1) k1.setChapter(0); // Chapter 1, start with 0:0, otherwise X:0 k1.setVerse(0); startKey = k1.key(); if (k1.getChapter() == 0) k1.setChapter(1); k1.setVerse(bible->verseCount(k1.book(), k1.getChapter())); endKey = k1.key(); } CDisplayRendering render(displayOptions, filterOptions); return render.renderKeyRange( startKey, endKey, modules, keyName, settings ); }
const QString CEntryDisplay::textKeyRendering( const BtConstModuleList &modules, const QString &keyName, const DisplayOptions &displayOptions, const FilterOptions &filterOptions, CTextRendering::KeyTreeItem::Settings::KeyRenderingFace keyRendering, bool introdutions) { if (keyName.isEmpty()) return QString(""); CDisplayRendering render(displayOptions, filterOptions); //no highlighted key and no extra key link in the text CTextRendering::KeyTreeItem::Settings normal_settings(false, keyRendering); const CSwordModuleInfo *module = modules.first(); Rendering::CTextRendering::KeyTree tree; //in Bibles and Commentaries we need to check if 0:0 and X:0 contain something if (introdutions && (module->type() == CSwordModuleInfo::Bible || module->type() == CSwordModuleInfo::Commentary)) { // HACK: enable headings for VerseKeys static_cast<sword::VerseKey *>(module->module()->getKey()) ->setIntros(true); CSwordVerseKey k1(module); k1.setIntros(true); k1.setKey(keyName); // don't print the key CTextRendering::KeyTreeItem::Settings preverse_settings(false, CTextRendering::KeyTreeItem::Settings::NoKey); if (k1.getVerse() == 1) { // X:1, prepend X:0 if (k1.getChapter() == 1) { // 1:1, also prepend 0:0 before that k1.setChapter(0); k1.setVerse(0); if ( k1.rawText().length() > 0 ) { tree.append( new Rendering::CTextRendering::KeyTreeItem(k1.key(), modules, preverse_settings) ); } k1.setChapter(1); } k1.setVerse(0); if ( k1.rawText().length() > 0 ) { tree.append( new Rendering::CTextRendering::KeyTreeItem(k1.key(), modules, preverse_settings) ); } } } tree.append( new Rendering::CTextRendering::KeyTreeItem(keyName, modules, normal_settings) ); return render.renderKeyTree(tree); }