summaryrefslogtreecommitdiff
path: root/src/backend/rendering/chtmlexportrendering.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/rendering/chtmlexportrendering.cpp')
-rw-r--r--src/backend/rendering/chtmlexportrendering.cpp362
1 files changed, 181 insertions, 181 deletions
diff --git a/src/backend/rendering/chtmlexportrendering.cpp b/src/backend/rendering/chtmlexportrendering.cpp
index 38a83d3..7a0833a 100644
--- a/src/backend/rendering/chtmlexportrendering.cpp
+++ b/src/backend/rendering/chtmlexportrendering.cpp
@@ -27,208 +27,208 @@ namespace {
*/
void dumpEntryAttributes(sword::SWModule *module) {
- std::cout << "Attributes for key: " << module->getKeyText() << std::endl;
- sword::AttributeTypeList::iterator i1;
- sword::AttributeList::iterator i2;
- sword::AttributeValue::iterator i3;
- for (i1 = module->getEntryAttributes().begin(); i1 != module->getEntryAttributes().end(); i1++) {
- std::cout << "[ " << i1->first << " ]\n";
- for (i2 = i1->second.begin(); i2 != i1->second.end(); i2++) {
- std::cout << "\t[ " << i2->first << " ]\n";
- for (i3 = i2->second.begin(); i3 != i2->second.end(); i3++) {
- std::cout << "\t\t" << i3->first << " = " << i3->second << "\n";
- }
- }
- }
- std::cout << std::endl;
+ std::cout << "Attributes for key: " << module->getKeyText() << std::endl;
+ sword::AttributeTypeList::iterator i1;
+ sword::AttributeList::iterator i2;
+ sword::AttributeValue::iterator i3;
+ for (i1 = module->getEntryAttributes().begin(); i1 != module->getEntryAttributes().end(); i1++) {
+ std::cout << "[ " << i1->first << " ]\n";
+ for (i2 = i1->second.begin(); i2 != i1->second.end(); i2++) {
+ std::cout << "\t[ " << i2->first << " ]\n";
+ for (i3 = i2->second.begin(); i3 != i2->second.end(); i3++) {
+ std::cout << "\t\t" << i3->first << " = " << i3->second << "\n";
+ }
+ }
+ }
+ std::cout << std::endl;
}
}
namespace Rendering {
- CHTMLExportRendering::CHTMLExportRendering(const CHTMLExportRendering::Settings& settings, CSwordBackend::DisplayOptions displayOptions, CSwordBackend::FilterOptions filterOptions)
-: m_displayOptions(displayOptions),
- m_filterOptions(filterOptions),
- m_settings(settings) {}
-
- CHTMLExportRendering::~CHTMLExportRendering() {}
-
- const QString CHTMLExportRendering::renderEntry( const KeyTreeItem& i, CSwordKey* k) {
-
- if (i.hasAlternativeContent()) {
- QString ret = QString(i.settings().highlight ? "<div class=\"currententry\">" : "<div class=\"entry\">");
- ret.append(i.getAlternativeContent());
-
- // Q_ASSERT(i.hasChildItems());
-
- if (!i.childList()->isEmpty()) {
- KeyTree * const tree = i.childList();
-
- const QList<CSwordModuleInfo*> modules = collectModules(tree);
-
- if (modules.count() == 1) { //insert the direction into the sorrounding div
- ret.insert( 5, QString("dir=\"%1\" ").arg((modules.first()->textDirection() == CSwordModuleInfo::LeftToRight) ? "ltr" : "rtl" ));
- }
-
- foreach ( KeyTreeItem* c, (*tree) ) {
- ret.append( renderEntry( *c ) );
- }
- }
-
- ret.append("</div>");
- return ret; //WARNING: Return already here!
- }
-
-
- const QList<CSwordModuleInfo*>& modules( i.modules() );
- if (modules.count() == 0) {
- return QString(""); //no module present for rendering
- }
-
- boost::scoped_ptr<CSwordKey> scoped_key( !k ? CSwordKey::createInstance(modules.first()) : 0 );
- CSwordKey* key = k ? k : scoped_key.get();
- Q_ASSERT(key);
-
- CSwordVerseKey* myVK = dynamic_cast<CSwordVerseKey*>(key);
-
- if ( myVK ) myVK->Headings(1);
-
- QString renderedText( (modules.count() > 1) ? "\n\t\t<tr>\n" : "\n" );
- // Only insert the table stuff if we are displaying parallel.
-
- //declarations out of the loop for optimization
- QString entry;
- QString keyText;
- bool isRTL;
- QString preverseHeading;
- QString langAttr;
- QString key_renderedText;
-
- QList<CSwordModuleInfo*>::const_iterator end_modItr = modules.end();
-
- for (QList<CSwordModuleInfo*>::const_iterator mod_Itr(modules.begin()); mod_Itr != end_modItr; ++mod_Itr) {
- key->module(*mod_Itr);
- key->key( i.key() );
-
- keyText = key->key();
- isRTL = ((*mod_Itr)->textDirection() == CSwordModuleInfo::RightToLeft);
- entry = QString::null;
-
- if ((*mod_Itr)->language()->isValid()) {
- langAttr = QString("xml:lang=\"")
- .append((*mod_Itr)->language()->abbrev())
- .append("\" lang=\"")
- .append((*mod_Itr)->language()->abbrev())
- .append("\"");
- }
- else {
- langAttr = QString("xml:lang=\"")
- .append((*mod_Itr)->module()->Lang())
- .append("\" lang=\"")
- .append((*mod_Itr)->module()->Lang())
- .append("\"");
- }
-
- key_renderedText = key->renderedText();
-
- if (m_filterOptions.headings) {
- (*mod_Itr)->module()->RenderText();
- sword::AttributeValue::const_iterator it =
- (*mod_Itr)->module()->getEntryAttributes()["Heading"]["Preverse"].begin();
- const sword::AttributeValue::const_iterator end =
- (*mod_Itr)->module()->getEntryAttributes()["Heading"]["Preverse"].end();
-
- for (; it != end; ++it) {
- preverseHeading = QString::fromUtf8(it->second.c_str());
- //TODO: Take care of the heading type!
- if (!preverseHeading.isEmpty()) {
- entry.append("<div ")
- .append(langAttr)
- .append(" class=\"sectiontitle\">")
- .append(preverseHeading)
- .append("</div>");
- }
- }
- }
-
- entry.append(m_displayOptions.lineBreaks ? "<div " : "<div style=\"display: inline;\" ");
-
- if (modules.count() == 1) { //insert only the class if we're not in a td
- entry.append( i.settings().highlight ? "class=\"currententry\" " : "class=\"entry\" " );
- }
-
- entry.append(langAttr).append(isRTL ? " dir=\"rtl\"" : " dir=\"ltr\"").append(">");
-
- //keys should normally be left-to-right, but this doesn't apply in all cases
- entry.append("<span class=\"entryname\" dir=\"ltr\">").append(entryLink(i, *mod_Itr)).append("</span>");
-
- if (m_settings.addText) {
- //entry.append( QString::fromLatin1("<span %1>%2</span>").arg(langAttr).arg(key_renderedText) );
- entry.append( key_renderedText );
- }
-
- if (!i.childList()->isEmpty()) {
- KeyTree* tree(i.childList());
-
- foreach (KeyTreeItem* c, (*tree)) {
- entry.append( renderEntry(*c) );
- }
- }
-
- entry.append("</div>");
-
- if (modules.count() == 1) {
- renderedText.append( "\t\t" ).append( entry ).append("\n");
- }
- else {
- renderedText.append("\t\t<td class=\"")
- .append(i.settings().highlight ? "currententry" : "entry")
- .append("\" ")
- .append(langAttr)
- .append(" dir=\"")
- .append(isRTL ? "rtl" : "ltr")
- .append("\">\n")
- .append( "\t\t\t" ).append( entry ).append("\n")
- .append("\t\t</td>\n");
- }
- }
-
- if (modules.count() > 1) {
- renderedText.append("\t\t</tr>\n");
- }
-
- // qDebug("CHTMLExportRendering: %s", renderedText.latin1());
- return renderedText;
+CHTMLExportRendering::CHTMLExportRendering(const CHTMLExportRendering::Settings& settings, CSwordBackend::DisplayOptions displayOptions, CSwordBackend::FilterOptions filterOptions)
+ : m_displayOptions(displayOptions),
+ m_filterOptions(filterOptions),
+ m_settings(settings) {}
+
+CHTMLExportRendering::~CHTMLExportRendering() {}
+
+const QString CHTMLExportRendering::renderEntry( const KeyTreeItem& i, CSwordKey* k) {
+
+ if (i.hasAlternativeContent()) {
+ QString ret = QString(i.settings().highlight ? "<div class=\"currententry\">" : "<div class=\"entry\">");
+ ret.append(i.getAlternativeContent());
+
+ // Q_ASSERT(i.hasChildItems());
+
+ if (!i.childList()->isEmpty()) {
+ KeyTree * const tree = i.childList();
+
+ const QList<CSwordModuleInfo*> modules = collectModules(tree);
+
+ if (modules.count() == 1) { //insert the direction into the sorrounding div
+ ret.insert( 5, QString("dir=\"%1\" ").arg((modules.first()->textDirection() == CSwordModuleInfo::LeftToRight) ? "ltr" : "rtl" ));
+ }
+
+ foreach ( KeyTreeItem* c, (*tree) ) {
+ ret.append( renderEntry( *c ) );
+ }
+ }
+
+ ret.append("</div>");
+ return ret; //WARNING: Return already here!
+ }
+
+
+ const QList<CSwordModuleInfo*>& modules( i.modules() );
+ if (modules.count() == 0) {
+ return QString(""); //no module present for rendering
+ }
+
+ boost::scoped_ptr<CSwordKey> scoped_key( !k ? CSwordKey::createInstance(modules.first()) : 0 );
+ CSwordKey* key = k ? k : scoped_key.get();
+ Q_ASSERT(key);
+
+ CSwordVerseKey* myVK = dynamic_cast<CSwordVerseKey*>(key);
+
+ if ( myVK ) myVK->Headings(1);
+
+ QString renderedText( (modules.count() > 1) ? "\n\t\t<tr>\n" : "\n" );
+ // Only insert the table stuff if we are displaying parallel.
+
+ //declarations out of the loop for optimization
+ QString entry;
+ QString keyText;
+ bool isRTL;
+ QString preverseHeading;
+ QString langAttr;
+ QString key_renderedText;
+
+ QList<CSwordModuleInfo*>::const_iterator end_modItr = modules.end();
+
+ for (QList<CSwordModuleInfo*>::const_iterator mod_Itr(modules.begin()); mod_Itr != end_modItr; ++mod_Itr) {
+ key->module(*mod_Itr);
+ key->key( i.key() );
+
+ keyText = key->key();
+ isRTL = ((*mod_Itr)->textDirection() == CSwordModuleInfo::RightToLeft);
+ entry = QString::null;
+
+ if ((*mod_Itr)->language()->isValid()) {
+ langAttr = QString("xml:lang=\"")
+ .append((*mod_Itr)->language()->abbrev())
+ .append("\" lang=\"")
+ .append((*mod_Itr)->language()->abbrev())
+ .append("\"");
+ }
+ else {
+ langAttr = QString("xml:lang=\"")
+ .append((*mod_Itr)->module()->Lang())
+ .append("\" lang=\"")
+ .append((*mod_Itr)->module()->Lang())
+ .append("\"");
+ }
+
+ key_renderedText = key->renderedText();
+
+ if (m_filterOptions.headings) {
+ (*mod_Itr)->module()->RenderText();
+ sword::AttributeValue::const_iterator it =
+ (*mod_Itr)->module()->getEntryAttributes()["Heading"]["Preverse"].begin();
+ const sword::AttributeValue::const_iterator end =
+ (*mod_Itr)->module()->getEntryAttributes()["Heading"]["Preverse"].end();
+
+ for (; it != end; ++it) {
+ preverseHeading = QString::fromUtf8(it->second.c_str());
+ //TODO: Take care of the heading type!
+ if (!preverseHeading.isEmpty()) {
+ entry.append("<div ")
+ .append(langAttr)
+ .append(" class=\"sectiontitle\">")
+ .append(preverseHeading)
+ .append("</div>");
+ }
+ }
+ }
+
+ entry.append(m_displayOptions.lineBreaks ? "<div " : "<div style=\"display: inline;\" ");
+
+ if (modules.count() == 1) { //insert only the class if we're not in a td
+ entry.append( i.settings().highlight ? "class=\"currententry\" " : "class=\"entry\" " );
+ }
+
+ entry.append(langAttr).append(isRTL ? " dir=\"rtl\"" : " dir=\"ltr\"").append(">");
+
+ //keys should normally be left-to-right, but this doesn't apply in all cases
+ entry.append("<span class=\"entryname\" dir=\"ltr\">").append(entryLink(i, *mod_Itr)).append("</span>");
+
+ if (m_settings.addText) {
+ //entry.append( QString::fromLatin1("<span %1>%2</span>").arg(langAttr).arg(key_renderedText) );
+ entry.append( key_renderedText );
+ }
+
+ if (!i.childList()->isEmpty()) {
+ KeyTree* tree(i.childList());
+
+ foreach (KeyTreeItem* c, (*tree)) {
+ entry.append( renderEntry(*c) );
+ }
+ }
+
+ entry.append("</div>");
+
+ if (modules.count() == 1) {
+ renderedText.append( "\t\t" ).append( entry ).append("\n");
+ }
+ else {
+ renderedText.append("\t\t<td class=\"")
+ .append(i.settings().highlight ? "currententry" : "entry")
+ .append("\" ")
+ .append(langAttr)
+ .append(" dir=\"")
+ .append(isRTL ? "rtl" : "ltr")
+ .append("\">\n")
+ .append( "\t\t\t" ).append( entry ).append("\n")
+ .append("\t\t</td>\n");
+ }
+ }
+
+ if (modules.count() > 1) {
+ renderedText.append("\t\t</tr>\n");
+ }
+
+ // qDebug("CHTMLExportRendering: %s", renderedText.latin1());
+ return renderedText;
}
void CHTMLExportRendering::initRendering() {
- //CPointers::backend()->setDisplayOptions( m_displayOptions );
- CPointers::backend()->setFilterOptions( m_filterOptions );
+ //CPointers::backend()->setDisplayOptions( m_displayOptions );
+ CPointers::backend()->setFilterOptions( m_filterOptions );
}
const QString CHTMLExportRendering::finishText( const QString& text, KeyTree& tree ) {
- const QList<CSwordModuleInfo*> modules = collectModules(&tree);
+ const QList<CSwordModuleInfo*> modules = collectModules(&tree);
- const CLanguageMgr::Language* const lang = modules.first()->language();
+ const CLanguageMgr::Language* const lang = modules.first()->language();
- CDisplayTemplateMgr* tMgr = CPointers::displayTemplateManager();
- CDisplayTemplateMgr::Settings settings;
- settings.modules = modules;
- settings.langAbbrev = ((modules.count() == 1) && lang->isValid()) ? lang->abbrev() : "unknown";
- if (modules.count() == 1)
- settings.pageDirection = ((modules.first()->textDirection() == CSwordModuleInfo::LeftToRight) ? "ltr" : "rtl");
- else
- settings.pageDirection = QString::null;
+ CDisplayTemplateMgr* tMgr = CPointers::displayTemplateManager();
+ CDisplayTemplateMgr::Settings settings;
+ settings.modules = modules;
+ settings.langAbbrev = ((modules.count() == 1) && lang->isValid()) ? lang->abbrev() : "unknown";
+ if (modules.count() == 1)
+ settings.pageDirection = ((modules.first()->textDirection() == CSwordModuleInfo::LeftToRight) ? "ltr" : "rtl");
+ else
+ settings.pageDirection = QString::null;
- return tMgr->fillTemplate(QObject::tr("Export"), text, settings);
+ return tMgr->fillTemplate(QObject::tr("Export"), text, settings);
}
/*!
\fn CHTMLExportRendering::entryLink( KeyTreeItem& item )
*/
const QString CHTMLExportRendering::entryLink( const KeyTreeItem& item, CSwordModuleInfo* ) {
- return item.key();
+ return item.key();
}
}//end of namespace "Rendering"