blob: 39003196d3fc90fc221d3d939fc4e10179dcd2b3 [file] [log] [blame]
The "example-lang" directory contains a template for adding a language binding
to Lucy and its object model layer, Clownfish. See the DevGuide for an
overview of Lucy's layers:
http://lucy.apache.org/docs/perl/Lucy/Docs/DevGuide.html
To get started, copy "example-lang" to a directory named after the language
you'd like to bind to:
cp -R example-lang xyz
Most of the C files within the "example-lang/src" directory contain stubs for
routines whose interfaces are defined within "trunk/core".
core/src/Lucy/Index/Inverter.cfh # Declares interface.
core/src/Lucy/Index/Inverter.c # all except Invert_Doc()
example-lang/src/Lucy/Index/Inverter.c # only Invert_Doc()
Once all the stubs have been implemented correctly, Lucy will theoretically
build and pass its tests.
There is one pair of files with an interface *not* defined in core.
example-lang/src/CFBind.h
example-lang/src/CFBind.c
The CFBind files are there to hold conversion routines which are specific to a
language binding. Since it is impractical to impose a generic interface, they
are not defined in core.
You may wish to start by referencing a finished language binding to get a feel
for what should go in the CFBind files.
Some of Lucy's classes really ought to be grouped with Clownfish, as they form
something similar to a free floating "standard library" and are not
search-related. At some point everything under Lucy::Object will probably
migrate to a new namespace:
Lucy::Object::Obj => Clownfish::Obj
Lucy::Object::CharBuf => Clownfish::CharBuf
Lucy::Object::VArray => Clownfish::VArray
Lucy::Object::Hash => Clownfish::Hash
Lucy::Object::BitVector => Clownfish::BitVector
...
Other, search-related classes belong with Lucy itself, but are represented
here because they lack one or more implementing functions:
Lucy::Document::Doc
Lucy::Analysis::RegexTokenizer
Lucy::Index::Inverter
...