[sword-devel] To DM and Troy: Questions about making a module , an extract byte
ZJ Li
lzj369 at gmail.com
Sat Aug 25 15:32:11 MST 2007
Thanks, DM and Troy. I got it. I will also add this extra byte and try again.
Yes. I am writing a new editor for genbook that will allow user write
html(limited tags) in a wysiwyg way. Also, it allows module generating
through the gui and deploy the module to sword genbook location.
I tried to use JNI to reuse c++ lib, but I gave it up because it is hard to
maintain multilple OS. So I am writing the code in Java , maybe it can
benefit Jsword. After I am done, I will release the code.
Eventually, I would like to see a WYSIWYG editor for OSIS. But , it is a
long way to go. so I decide to start from a simple editor.
Troy A. Griffitts wrote:
>
> Dear Zj Li,
>
> If you are looking to write sword modules, the only supported way is to
> use the SWORD engine. We neither encourage nor support manipulation of
> the data files directly. Not to thwart your efforts, but can you not
> merely use a few simple calls to the sword engine to write your data?
> There is a very short, basic console application for interactively
> writing genbook data here:
>
> http://svn.crosswire.org/sword/trunk/utilities/genbookutil.cpp
>
> It exercises every function of genbook editing. If you cannot call the
> C++ engine directly or through any of the many binding swig produces,
> you should easily be able to change the interactive menu at the bottom
> of this short program into command line parameters, creating a simple
> utility you can call from your application.
>
> Regarding your specific question. The null which separates the node
> name from user data associated with the node is written here:
>
> http://svn.crosswire.org/sword/trunk/src/keys/treekeyidx.cpp
> ...
> void TreeKeyIdx::saveTreeNode(TreeNode *node) {
> ...
> datfd->write(node->name, strlen(node->name));
> char null = 0;
> datfd->write(&null, 1);
>
> Which is actually silly; all three lines should be reduced to:
>
> datfd->write(node->name, strlen(node->name)+1);
>
>
> But I guess it does read easier the current way.
>
> Blessings in your work for our Lord!
> -Troy.
>
>
> DM Smith wrote:
>> JZ,
>>
>> I'll have to leave the answer to Troy to answer. I don't know the
>> original reason. My guess would be that it was influenced by C where
>> a byte with a 0 value is a string terminator. Rather than storing a
>> length byte the data starts at the expected location and stops when 0
>> is encountered.
>>
>> May I ask why you want to know this? Is there a bug to fix or a
>> feature you would like to add?
>>
>> DM
>>
>> On Aug 24, 2007, at 1:32 PM, ZJ Li wrote:
>>
>>> DM ,
>>>
>>> I notice that for genbook, we have the following code to read dat
>>> file:
>>>
>>> byte[] buffer = SwordUtil.readRAF(datRaf, offset, 12);
>>> node.setParent(SwordUtil.decodeLittleEndian32(buffer, 0));
>>> node.setNextSibling(SwordUtil.decodeLittleEndian32(buffer, 4));
>>> node.setFirstChild(SwordUtil.decodeLittleEndian32(buffer, 8));
>>>
>>> buffer = SwordUtil.readUntilRAF(datRaf, (byte) 0);
>>> int size = buffer.length;
>>> if (buffer[size - 1] == 0)
>>> {
>>> size--;
>>> }
>>>
>>> Key key = new DefaultKeyList(null, bmd.getName());
>>> // Some of the keys have extraneous whitespace, so remove it.
>>> node.setName(SwordUtil.decode(key, buffer, size,
>>> bmd.getBookCharset()).trim());
>>>
>>> buffer = SwordUtil.readNextRAF(datRaf, 2);
>>>
>>> at this line:
>>> buffer = SwordUtil.readUntilRAF(datRaf, (byte) 0);
>>>
>>> we look for the byte 0 for stop position. so we can get the node name
>>> from data file.
>>>
>>> My question is did we originally put this extract byte after the name?
>>>
>>> Troy, can you confirm this?
>>>
>>> Thx.
>>
>> _______________________________________________
>> sword-devel mailing list: sword-devel at crosswire.org
>> http://www.crosswire.org/mailman/listinfo/sword-devel
>> Instructions to unsubscribe/change your settings at above page
>
>
> _______________________________________________
> sword-devel mailing list: sword-devel at crosswire.org
> http://www.crosswire.org/mailman/listinfo/sword-devel
> Instructions to unsubscribe/change your settings at above page
>
>
--
View this message in context: http://www.nabble.com/To-DM-and-Troy%3A-Questions-about-making-a-module-%2C-an-extract-byte-tf4324550.html#a12330316
Sent from the SWORD Dev mailing list archive at Nabble.com.
More information about the sword-devel
mailing list