[bt-devel] OSIS crossrefs rendering bug (added by Martin, patch by Troy - BibleTime or Sword bug?)

Troy A. Griffitts scribe at crosswire.org
Sun May 10 22:42:39 MST 2009


Argh!  Ben is correct.  (that 'Argh' was not because Ben is correct, but 
'Argh, entryAttributes ARE cleared on RenderText calls).

Here's the logic which poses the problem:

module->setKey("jn.1.1"); // EntryAttr not yet processed for 
optimization purposes

module->RenderText();     // RenderText processes the entry attributes

SWBuf footnoteBody = module->getEntryAttributes()["Footnote"]["1"]["body"];

SWBuf htmlFootnote = module->RenderText(footnoteBody);
// at this point RenderText was called again to turn the footnote body 
markup into the desired render markup (bt_html for Bibletime) and now 
EntryAttributes will be set to whatever was process from the footnote 
body! ARGH!!!

ok, so this has a simple quick fix, just call RenderText() again, which 
will populate the entry attributes from current key again.

There is probably a more optimized way to do this in BT, and certainly a 
flag we could put on RenderText(SWBuf buf, bool processAttributes = 
false) for future.

Sorry bout this.

	-Troy.




Ben Morgan wrote:
> Rendering the text of the footnotes will clear the entry attributes. You 
> probably need to defer rendering them...
> In general, I don't think you shouldn't call the current module's 
> RenderText in the render filters.
> 
> God Bless,
> Ben
> -------------------------------------------------------------------------------------------
> Multitudes, multitudes,
>    in the valley of decision!
> For the day of the LORD is near
>    in the valley of decision.
> 
> Giôên 3:14 (ESV)
> 
> 
> 
> On Mon, May 11, 2009 at 8:18 AM, Eeli Kaikkonen 
> <eekaikko at mail.student.oulu.fi <mailto:eekaikko at mail.student.oulu.fi>> 
> wrote:
> 
>     Martin Gruner wrote:
> 
>         Hi Eeli,
> 
>         attached you can find the original patch by Troy with the debug
>         method that he used. Good luck!  :-P
> 
> 
>     OK, I added the debug function to bt_osishtml.cpp. It's called like
>     this:
> 
> 
>     #ifdef SWORD_SIMPLERENDER
>            sword::SWBuf footnoteNumber = tag.getAttribute("swordFootnote");
>            qDebug() << "swordFootnote:" << footnoteNumber;
>            dumpEntryAttributes(myModule);
> 
>            sword::SWBuf footnoteBody =
>     myModule->getEntryAttributes()["Footnote"][footnoteNumber]["body"];
>            buf += myModule->RenderText(footnoteBody);
>     #endif
> 
>     In the first time in a verse, when the footnote number is 1, it
>     gives this:
> 
>     (BibleTime 2.0.beta2) Debug: swordFootnote: 1
>     (BibleTime 2.0.beta2) Debug: ENTRY ATTRIBUTES FOR KEY:  Psalms 100:2
>     (BibleTime 2.0.beta2) Debug: [  Footnote  ]
>     (BibleTime 2.0.beta2) Debug:    [  1  ]
>     (BibleTime 2.0.beta2) Debug:             body  =  [<reference
>     osisRef="Ps.2.11">Ps. 2:11</reference>]
>     (BibleTime 2.0.beta2) Debug:             n  =  q
>     (BibleTime 2.0.beta2) Debug:             osisID  =
>     Ps.100.2!crossReference.q
>     (BibleTime 2.0.beta2) Debug:             osisRef  =  Ps.100.2
>     (BibleTime 2.0.beta2) Debug:             refList  =  Ps.2.11
>     (BibleTime 2.0.beta2) Debug:             type  =  crossReference
>     (BibleTime 2.0.beta2) Debug:    [  2  ]
>     (BibleTime 2.0.beta2) Debug:             body  =  [<reference
>     osisRef="Ps.95.2">Ps. 95:2</reference>]
>     (BibleTime 2.0.beta2) Debug:             n  =  r
>     (BibleTime 2.0.beta2) Debug:             osisID  =
>     Ps.100.2!crossReference.r
>     (BibleTime 2.0.beta2) Debug:             osisRef  =  Ps.100.2
>     (BibleTime 2.0.beta2) Debug:             refList  =  Ps.95.2
>     (BibleTime 2.0.beta2) Debug:             type  =  crossReference
>     (BibleTime 2.0.beta2) Debug: ENTRY ATTRIBUTES end
> 
> 
>     But all the rest of the footnotes in the same verse give this:
> 
>     BibleTime 2.0.beta2) Debug: swordFootnote: 2 [or 3 or...]
>     (BibleTime 2.0.beta2) Debug: ENTRY ATTRIBUTES FOR KEY:  Psalms 100:2
>     (BibleTime 2.0.beta2) Debug: ENTRY ATTRIBUTES end
> 
>     So, somewhere between these calls the attributes of the key have
>     disappeared. I have made sure that the objects are the same each time.
> 
> 
> 
>     --Eeli Kaikkonen
> 
>     _______________________________________________
>     bt-devel mailing list
>     bt-devel at crosswire.org <mailto:bt-devel at crosswire.org>
>     http://www.crosswire.org/mailman/listinfo/bt-devel
> 
> 
> 
> ------------------------------------------------------------------------
> 
> _______________________________________________
> bt-devel mailing list
> bt-devel at crosswire.org
> http://www.crosswire.org/mailman/listinfo/bt-devel




More information about the bt-devel mailing list