libbgl Code
Status: Alpha
Brought to you by:
rupan
| File | Date | Author | Commit |
|---|---|---|---|
| examples | 2009-07-17 | rupan | [r21] first try at StarDict IFO creation & handling c... |
| src | 2009-07-22 | rupan | [r22] rework utf8 conversion |
| Makefile | 2009-06-25 | rupan | [r1] initial commit |
| bgl_writer.make | 2009-07-02 | rupan | [r12] import some values from bgl-reverse / Google Co... |
| libbgl.make | 2009-07-02 | rupan | [r12] import some values from bgl-reverse / Google Co... |
| license.txt | 2009-06-25 | rupan | [r1] initial commit |
| premake4.lua | 2009-06-25 | rupan | [r1] initial commit |
| readme.txt | 2009-06-28 | rupan | [r8] updates for type information found from google ... |
libbgl is released to the public under the terms of the GNU GPL version 3 or later.
All use is subject to its terms.
Glossary specifications were obtained from a number of sources, including:
http://code.google.com/p/bgl-reverse/
Google
numerous forum postings
my own time examining glossaries in a hex editor
Babylon glossaries (versions 1 and 2) are supported. Sample Japanese <-> English:
http://www.babylon.com/files/Babylon6/genius_unabridged_eng_jap_eng_gen_jap_eng.exe
http://www.babylon.com/files/premium/taishukan/meikyo_jpn_jpn.bgl
http://info.babylon.com/glossaries/38B/Babylon_English_Japanese.BGL
http://info.babylon.com/glossaries/4E9/Babylon_Japanese_English_dicti.BGL
The API is simple, please see bgl_api.h for more complete documentation.
Each Babylon glossary is a collection of records of a certain set of types. libbgl
simply reads the glossary and exports the raw data in a digestable format. It is
not possible to "rewind" a glossary descriptor; you must close and reopen it. Here
is a quick walkthrough of the API:
First declare some pointers:
BGL *gloss;
bgl_record *rec;
Next open a BGL handle for a given glossary:
gloss = bgl_open("Babylon_English_Japanese.BGL");
if(!gloss) ... handle the fault
Now iterate through all records in the glossary:
while( bgl_hasMoreRecords(gloss) ) {
rec = bgl_getNextRecord(gloss);
if(!rec) ... handle the fault
/* do something useful [see below] */
bgl_freeRecord(rec);
}
Finally close the glossary:
bgl_close(gloss);
----------------------------------------------------------------------------------
FAQ
----------------------------------------------------------------------------------
(Q) What? I need to actually DO something with each record??
(A) Well, yes. Every record in a Babylon glossary has a type. Some types are not
well understood, but enough is known (or can be guessed) to make the glossary useful.
Overview of types:
Find out what type a record is by looking at rec->type. Using this information,
cast rec->parsed to the appropriate data type as described below:
[This information may be out of date]
0: (none)
It is not known what these records are used for.
1: record_entry_t
This is an entry. It contains a headword, a definition, and
possibly other information. It will be described in more
detail below.
2: record_resource_t
These records contain named resources used in the glossary.
For example, html files or jpeg/gif images.
3: record_raw_t
These records contain information about the glossary,
such as hte author's email address or a text description
of the glossary's contents.
4: (none)
This record indicates that there are no more records.
6: (none)
Only one record of this type per dictionary.
Its purpose is unknown and it always has 0 data size.
(Q) Whats the deal with entries?
(A) Entries consist of:
(1) a headword
(2) the definition
(3) 0 or more "items"
Often there is additional information encoded in either (1), (2), or both.
The headword may be concatenated with a number enclosed by '$' symbols.
The definition may be concatenated with flags, most of which are not understood.
"items" can be a number of things, for example verb conjugations
libbgl is copyright (c) 2008, 2009 Michael Mohr <akihana@gmail.com>