=encoding UTF-8 =head1 NAME jspell-dist - RFC for jspell dictionary packages =head1 RATIONALE The Lingua::Jspell binary format (also known as hash file) is architecture dependent (32 vs 64 bit architectures, little-endian vs big-endian architectures). This makes the release of binary formats for each dictionary unmanageable. Also, given that some language dictionaries (namely, the Portuguese dictionary) require some developing tools (bison, flex and gcc), distributing the bootstrap files would be also very complicated. Therefore, this RFC defines a middle-term structure, where just a full Lingua::Jspell installation is needed (together with Perl and some default Lingua::Jspell dependencies). =head1 DESCRIPTION The files that are usually installed for each dictionary are: affix file, hash file, irregular file (if exists) and meta (yaml) file. All these files are text documents, meaning they are architecture independent. Regarding the hash file, it is language dependent but can be built with C, that is delivered with Lingua::Jspell. C requires the affix file (already mentioned above) and the dictionary file. The dictionary file is, also, a textual document, and therefore, architecture independent. While C works with just one dictionary file, some dictionaries are split in different, smaller, files, making the management of the dictionary easier. Instead of requiring a single dictionary file, jspell dictionary packages can handle more than one dictionary file that are concatenated together during the build phase. =head2 PACKAGE CONTENTS The suggested structure for a jspell dictionary package is: =over 4 =item C A C file, just like Perl modules manifest files. It will be used to check for package completeness. =item C The meta-data file is an yaml file. The name can be anything, given that the file extension is C<.yml> or C<.yaml>. Note that there should be B yaml file in the distribution package. This file should include the C section, with the C list. The first element of the list will be the official dictionary name, used when renaming the package files. Nevertheless, the system will try to link the other language names during installation. =item C The affix file should have the C<.aff> extension. Also, there should be B affix file in the distribution package. =item C Some languages might include irregular verbs (or other). They normally result in one or more files with the C<.irr> extension. They will be concatenated together in a single C<.irr> file, sorting filenames alphabetically. =item C All the files with C<.dic> extension are supposed to be dictionary files. They will be concatenated together, using filenames alphabetical order. This means that if there are any kind of macros that should be declared earlier, be sure to include them before any other file. =back =head2 INSTALLATION PROCESS The package installation process will follow the subsequent steps: =over 4 =item 1. The C file is read and the package content files are tested. If any file is missing the installation process will fail. =item 2. The meta-data file (yaml file) is searched. If there is more than one, the system will issue an warning, but follow the process with one of them (the first one on the file glob). That file is read, and the names of the language extracted. Also, the yaml file is renamed to match the first language name with the C<.yaml> extension. If no yaml file is present, the system will issue an warning, but will continue trying to use as language the name of the affix file. =item 3. The affix file is searched, and the name used if no yaml file is present. If the yaml file is present, the affix file will be renamed to the first language name (followed by the C<.aff> extension). =item 4. All the dictionary files (with extension C<.dic>) are sorted, and the files concatenated together. The result will be placed on a file with the language name, followed by the C<.dic> extension. =item 5. The same process will be performed for all C<.irr> file, sorting the files, concatenating them, and putting the result in a file with the language name and the C<.irr> extension. =item 6. The hash file will be created using the C<.aff> file and the C<.dic> file created on step 4. =item 7. The dictionary, irregular, hash, affixes and yaml files are copied to the Lingua::Jspell library directory (usually, ${prefix}/lib/jspell). =item 8. The optional language names will be used to create symlinks for all the files. =back =head1 SEE ALSO Lingua::Jpell(3) =head1 AUTHOR Alberto Manuel Brandão Simões, Eambs@cpan.orgE =head1 COPYRIGHT AND LICENSE Copyright (C) 2010 by Alberto Manuel Brandão Simões =cut