| /* liblouis Braille Translation and Back-Translation |
| Library |
| |
| Based on the Linux screenreader BRLTTY, copyright (C) 1999-2006 by |
| The BRLTTY Team |
| |
| Copyright (C) 2004, 2005, 2006 |
| ViewPlus Technologies, Inc. www.viewplus.com |
| and |
| JJB Software, Inc. www.jjb-software.com |
| All rights reserved |
| |
| This file is free software; you can redistribute it and/or modify it |
| under the terms of the Lesser or Library GNU General Public License |
| as published by the |
| Free Software Foundation; either version 3, or (at your option) any |
| later version. |
| |
| This file is distributed in the hope that it will be useful, but |
| WITHOUT ANY WARRANTY; without even the implied warranty of |
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| Library GNU General Public License for more details. |
| |
| You should have received a copy of the Library GNU General Public |
| License along with this program; see the file COPYING. If not, write to |
| the Free Software Foundation, 51 Franklin Street, Fifth Floor, |
| Boston, MA 02110-1301, USA. |
| |
| Maintained by John J. Boyer john.boyer@jjb-software.com |
| */ |
| |
| #ifndef __LOUIS_H_ |
| #define __LOUIS_H_ |
| |
| #ifdef __cplusplus |
| extern "C" |
| { |
| #endif /* __cplusplus */ |
| |
| #include "liblouis.h" |
| |
| #ifdef _WIN32 |
| #define strcasecmp _stricmp |
| #endif |
| |
| #define NUMSWAPS 50 |
| #define NUMVAR 50 |
| #define LETSIGNSIZE 128 |
| #define CHARSIZE sizeof(widechar) |
| #define DEFAULTRULESIZE 50 |
| #define ENDSEGMENT 0xffff |
| |
| /*Definitions of braille dots*/ |
| #define B1 0X01 |
| #define B2 0X02 |
| #define B3 0X04 |
| #define B4 0X08 |
| #define B5 0X10 |
| #define B6 0X20 |
| #define B7 0X40 |
| #define B8 0X80 |
| #define B9 0X100 |
| #define B10 0X200 |
| #define B11 0X400 |
| #define B12 0X800 |
| #define B13 0X1000 |
| #define B14 0X2000 |
| #define B15 0X4000 |
| #define B16 0X8000 |
| |
| /*HASHNUM must be prime */ |
| #define HASHNUM 1123 |
| |
| #define MAXSTRING 512 |
| |
| typedef unsigned int TranslationTableOffset; |
| #define OFFSETSIZE sizeof (TranslationTableOffset) |
| |
| typedef enum |
| { |
| CTC_Space = 0X01, |
| CTC_Letter = 0X02, |
| CTC_Digit = 0X04, |
| CTC_Punctuation = 0X08, |
| CTC_UpperCase = 0X10, |
| CTC_LowerCase = 0X20, |
| CTC_Math = 0X40, |
| CTC_Sign = 0X80, |
| CTC_LitDigit = 0X100, |
| CTC_Class1 = 0X200, |
| CTC_Class2 = 0X400, |
| CTC_Class3 = 0X800, |
| CTC_Class4 = 0X1000 |
| } TranslationTableCharacterAttribute; |
| |
| typedef enum |
| { |
| pass_first = '`', |
| pass_last = '~', |
| pass_lookback = '_', |
| pass_string = '\"', |
| pass_dots = '@', |
| pass_omit = '?', |
| pass_startReplace = '[', |
| pass_endReplace = ']', |
| pass_startGroup = '{', |
| pass_endGroup = '}', |
| pass_variable = '#', |
| pass_not = '!', |
| pass_search = '/', |
| pass_any = 'a', |
| pass_digit = 'd', |
| pass_litDigit = 'D', |
| pass_letter = 'l', |
| pass_math = 'm', |
| pass_punctuation = 'p', |
| pass_sign = 'S', |
| pass_space = 's', |
| pass_uppercase = 'U', |
| pass_lowercase = 'u', |
| pass_class1 = 'w', |
| pass_class2 = 'x', |
| pass_class3 = 'y', |
| pass_class4 = 'z', |
| pass_attributes = '$', |
| pass_groupstart = '{', |
| pass_groupend = '}', |
| pass_groupreplace = ';', |
| pass_swap = '%', |
| pass_hyphen = '-', |
| pass_until = '.', |
| pass_eq = '=', |
| pass_lt = '<', |
| pass_gt = '>', |
| pass_endTest = 32, |
| pass_plus = '+', |
| pass_copy = '*', |
| pass_leftParen = '(', |
| pass_rightParen = ')', |
| pass_comma = ',', |
| pass_lteq = 130, |
| pass_gteq = 131, |
| pass_invalidToken = 132, |
| pass_noteq = 133, |
| pass_and = 134, |
| pass_or = 135, |
| pass_nameFound = 136, |
| pass_numberFound = 137, |
| pass_boolean = 138, |
| pass_class = 139, |
| pass_define = 140, |
| pass_emphasis = 141, |
| pass_group = 142, |
| pass_mark = 143, |
| pass_repGroup = 143, |
| pass_script = 144, |
| pass_noMoreTokens = 145, |
| pass_replace = 146, |
| pass_if = 147, |
| pass_then = 148, |
| pass_all = 255 |
| } |
| pass_Codes; |
| |
| typedef unsigned int TranslationTableCharacterAttributes; |
| |
| typedef struct |
| { |
| TranslationTableOffset next; |
| widechar lookFor; |
| widechar found; |
| } CharOrDots; |
| |
| typedef struct |
| { |
| TranslationTableOffset next; |
| TranslationTableOffset definitionRule; |
| TranslationTableOffset otherRules; |
| TranslationTableCharacterAttributes attributes; |
| widechar realchar; |
| widechar uppercase; |
| widechar lowercase; |
| #if UNICODEBITS == 16 |
| widechar padding; |
| #endif |
| } TranslationTableCharacter; |
| |
| typedef enum |
| { /*Op codes */ |
| CTO_IncludeFile, |
| CTO_Locale, /*Deprecated, do not use */ |
| CTO_Undefined, |
| CTO_CapitalSign, |
| CTO_BeginCapitalSign, |
| CTO_LenBegcaps, |
| CTO_EndCapitalSign, |
| CTO_FirstWordCaps, |
| CTO_LastWordCapsBefore, |
| CTO_LastWordCapsAfter, |
| CTO_LenCapsPhrase, |
| CTO_LetterSign, |
| CTO_NoLetsignBefore, |
| CTO_NoLetsign, |
| CTO_NoLetsignAfter, |
| CTO_NumberSign, |
| CTO_FirstWordItal, |
| CTO_ItalSign, |
| CTO_LastWordItalBefore, |
| CTO_LastWordItalAfter, |
| CTO_BegItal, |
| CTO_FirstLetterItal, |
| CTO_EndItal, |
| CTO_LastLetterItal, |
| CTO_SingleLetterItal, |
| CTO_ItalWord, |
| CTO_LenItalPhrase, |
| CTO_FirstWordBold, |
| CTO_BoldSign, |
| CTO_LastWordBoldBefore, |
| CTO_LastWordBoldAfter, |
| CTO_BegBold, |
| CTO_FirstLetterBold, |
| CTO_EndBold, |
| CTO_LastLetterBold, |
| CTO_SingleLetterBold, |
| CTO_BoldWord, |
| CTO_LenBoldPhrase, |
| CTO_FirstWordUnder, |
| CTO_UnderSign, |
| CTO_LastWordUnderBefore, |
| CTO_LastWordUnderAfter, |
| CTO_BegUnder, |
| CTO_FirstLetterUnder, |
| CTO_EndUnder, |
| CTO_LastLetterUnder, |
| CTO_SingleLetterUnder, |
| CTO_UnderWord, |
| CTO_LenUnderPhrase, |
| CTO_BegComp, |
| CTO_CompBegEmph1, |
| CTO_CompEndEmph1, |
| CTO_CompBegEmph2, |
| CTO_CompEndEmph2, |
| CTO_CompBegEmph3, |
| CTO_CompEndEmph3, |
| CTO_CompCapSign, |
| CTO_CompBegCaps, |
| CTO_CompEndCaps, |
| CTO_EndComp, |
| CTO_MultInd, |
| CTO_CompDots, |
| CTO_Comp6, |
| CTO_Class, /*define a character class */ |
| CTO_After, /*only match if after character in class */ |
| CTO_Before, /*only match if before character in class 30 */ |
| CTO_NoBack, |
| CTO_NoFor, |
| CTO_SwapCc, |
| CTO_SwapCd, |
| CTO_SwapDd, |
| CTO_Space, |
| CTO_Digit, |
| CTO_Punctuation, |
| CTO_Math, |
| CTO_Sign, |
| CTO_Letter, |
| CTO_UpperCase, |
| CTO_LowerCase, |
| CTO_Grouping, |
| CTO_UpLow, |
| CTO_LitDigit, |
| CTO_Display, |
| CTO_Replace, |
| CTO_Context, |
| CTO_Correct, |
| CTO_Pass2, |
| CTO_Pass3, |
| CTO_Pass4, |
| CTO_Repeated, |
| CTO_RepWord, |
| CTO_CapsNoCont, |
| CTO_Always, |
| CTO_ExactDots, |
| CTO_NoCross, |
| CTO_Syllable, |
| CTO_NoCont, |
| CTO_CompBrl, |
| CTO_Literal, |
| CTO_LargeSign, |
| CTO_WholeWord, |
| CTO_PartWord, |
| CTO_JoinNum, |
| CTO_JoinableWord, |
| CTO_LowWord, |
| CTO_Contraction, |
| CTO_SuffixableWord, /*whole word or beginning of word */ |
| CTO_PrefixableWord, /*whole word or end of word */ |
| CTO_BegWord, /*beginning of word only */ |
| CTO_BegMidWord, /*beginning or middle of word */ |
| CTO_MidWord, /*middle of word only 20 */ |
| CTO_MidEndWord, /*middle or end of word */ |
| CTO_EndWord, /*end of word only */ |
| CTO_PrePunc, /*punctuation in string at beginning of word */ |
| CTO_PostPunc, /*punctuation in string at end of word */ |
| CTO_BegNum, /*beginning of number */ |
| CTO_MidNum, /*middle of number, e.g., decimal point */ |
| CTO_EndNum, /*end of number */ |
| CTO_DecPoint, |
| CTO_Hyphen, |
| CTO_NoBreak, |
| CTO_None, |
| /*Internal opcodes */ |
| CTO_CapitalRule, |
| CTO_BeginCapitalRule, |
| CTO_EndCapitalRule, |
| CTO_FirstWordCapsRule, |
| CTO_LastWordCapsBeforeRule, |
| CTO_LastWordCapsAfterRule, |
| CTO_LetterRule, |
| CTO_NumberRule, |
| CTO_FirstWordItalRule, |
| CTO_LastWordItalBeforeRule, |
| CTO_LastWordItalAfterRule, |
| CTO_FirstLetterItalRule, |
| CTO_LastLetterItalRule, |
| CTO_SingleLetterItalRule, |
| CTO_ItalWordRule, |
| CTO_FirstWordBoldRule, |
| CTO_LastWordBoldBeforeRule, |
| CTO_LastWordBoldAfterRule, |
| CTO_FirstLetterBoldRule, |
| CTO_LastLetterBoldRule, |
| CTO_SingleLetterBoldRule, |
| CTO_BoldWordRule, |
| CTO_FirstWordUnderRule, |
| CTO_LastWordUnderBeforeRule, |
| CTO_LastWordUnderAfterRule, |
| CTO_FirstLetterUnderRule, |
| CTO_LastLetterUnderRule, |
| CTO_SingleLetterUnderRule, |
| CTO_UnderWordRule, |
| CTO_BegCompRule, |
| CTO_CompBegEmph1Rule, |
| CTO_CompEndEmph1Rule, |
| CTO_CompBegEmph2Rule, |
| CTO_CompEndEmrh2Rule, |
| CTO_CompBegEmph3Rule, |
| CTO_CompEndEmph3Rule, |
| CTO_CompCapSignRule, |
| CTO_CompBegCapsRule, |
| CTO_CompEndCapsRule, |
| CTO_EndCompRule, |
| CTO_CapsNoContRule, |
| CTO_All |
| } TranslationTableOpcode; |
| |
| typedef struct |
| { |
| TranslationTableOffset charsnext; /*next chars entry */ |
| TranslationTableOffset dotsnext; /*next dots entry */ |
| TranslationTableCharacterAttributes after; /*character types which must foollow */ |
| TranslationTableCharacterAttributes before; /*character types which must |
| precede */ |
| TranslationTableOpcode opcode; /*rule for testing validity of replacement */ |
| short charslen; /*length of string to be replaced */ |
| short dotslen; /*length of replacement string */ |
| widechar charsdots[DEFAULTRULESIZE]; /*find and replacement |
| strings */ |
| } TranslationTableRule; |
| |
| typedef struct /*state transition */ |
| { |
| widechar ch; |
| widechar newState; |
| } HyphenationTrans; |
| |
| typedef union |
| { |
| HyphenationTrans *pointer; |
| TranslationTableOffset offset; |
| } PointOff; |
| |
| typedef struct /*one state */ |
| { |
| PointOff trans; |
| TranslationTableOffset hyphenPattern; |
| widechar fallbackState; |
| widechar numTrans; |
| } HyphenationState; |
| |
| /*Translation table header */ |
| typedef struct |
| { /*translation table */ |
| int capsNoCont; |
| int numPasses; |
| int corrections; |
| int syllables; |
| TranslationTableOffset tableSize; |
| TranslationTableOffset bytesUsed; |
| TranslationTableOffset noBreak; |
| TranslationTableOffset undefined; |
| TranslationTableOffset letterSign; |
| TranslationTableOffset numberSign; |
| /*Do not change the order of the following emphasis rule pointers! |
| */ |
| TranslationTableOffset firstWordItal; |
| TranslationTableOffset lastWordItalBefore; |
| TranslationTableOffset lastWordItalAfter; |
| TranslationTableOffset firstLetterItal; |
| TranslationTableOffset lastLetterItal; |
| TranslationTableOffset singleLetterItal; |
| TranslationTableOffset italWord; |
| TranslationTableOffset lenItalPhrase; |
| TranslationTableOffset firstWordBold; |
| TranslationTableOffset lastWordBoldBefore; |
| TranslationTableOffset lastWordBoldAfter; |
| TranslationTableOffset firstLetterBold; |
| TranslationTableOffset lastLetterBold; |
| TranslationTableOffset singleLetterBold; |
| TranslationTableOffset boldWord; |
| TranslationTableOffset lenBoldPhrase; |
| TranslationTableOffset firstWordUnder; |
| TranslationTableOffset lastWordUnderBefore; |
| TranslationTableOffset lastWordUnderAfter; |
| TranslationTableOffset firstLetterUnder; |
| TranslationTableOffset lastLetterUnder; |
| TranslationTableOffset singleLetterUnder; |
| TranslationTableOffset underWord; |
| TranslationTableOffset lenUnderPhrase; |
| TranslationTableOffset firstWordCaps; |
| TranslationTableOffset lastWordCapsBefore; |
| TranslationTableOffset lastWordCapsAfter; |
| TranslationTableOffset beginCapitalSign; |
| TranslationTableOffset endCapitalSign; /*end capitals sign */ |
| TranslationTableOffset capitalSign; |
| TranslationTableOffset CapsWord; |
| TranslationTableOffset lenCapsPhrase; |
| /* End of ordered emphasis rule poiinters */ |
| TranslationTableOffset lenBeginCaps; |
| TranslationTableOffset begComp; |
| TranslationTableOffset compBegEmph1; |
| TranslationTableOffset compEndEmph1; |
| TranslationTableOffset compBegEmph2; |
| TranslationTableOffset compEndEmph2; |
| TranslationTableOffset compBegEmph3; |
| TranslationTableOffset compEndEmph3; |
| TranslationTableOffset compCapSign; |
| TranslationTableOffset compBegCaps; |
| TranslationTableOffset compEndCaps; |
| TranslationTableOffset endComp; |
| TranslationTableOffset hyphenStatesArray; |
| widechar noLetsignBefore[LETSIGNSIZE]; |
| int noLetsignBeforeCount; |
| widechar noLetsign[LETSIGNSIZE]; |
| int noLetsignCount; |
| widechar noLetsignAfter[LETSIGNSIZE]; |
| int noLetsignAfterCount; |
| TranslationTableOffset characters[HASHNUM]; /*Character |
| definitions */ |
| TranslationTableOffset dots[HASHNUM]; /*Dot definitions */ |
| TranslationTableOffset charToDots[HASHNUM]; |
| TranslationTableOffset dotsToChar[HASHNUM]; |
| TranslationTableOffset compdotsPattern[256]; |
| TranslationTableOffset swapDefinitions[NUMSWAPS]; |
| TranslationTableOffset attribOrSwapRules[5]; |
| TranslationTableOffset forRules[HASHNUM]; /*chains of forward rules */ |
| TranslationTableOffset backRules[HASHNUM]; /*Chains of backward rules */ |
| TranslationTableOffset ruleArea[1]; /*Space for storing all |
| rules and values */ |
| } TranslationTableHeader; |
| typedef enum |
| { |
| alloc_typebuf, |
| alloc_destSpacing, |
| alloc_passbuf1, |
| alloc_passbuf2, |
| alloc_srcMapping, |
| alloc_prevSrcMapping |
| } AllocBuf; |
| /* The following function definitions are hooks into |
| * compileTranslationTable.c. Some are used by other library modules. |
| * Others are used by tools like lou_allround.c and lou_debug.c. */ |
| |
| widechar getDotsForChar (widechar c); |
| /* Returns the single-cell dot pattern corresponding to a character. */ |
| |
| widechar getCharFromDots (widechar d); |
| /* Returns the character corresponding to a single-cell dot pattern. */ |
| |
| void *liblouis_allocMem (AllocBuf buffer, int srcmax, int destmax); |
| /* used by lou_translateString.c and lou_backTranslateString.c ONLY to |
| * allocate memory for internal buffers. */ |
| |
| void *get_table (const char *name); |
| /* Checks tables for errors and compiles shem. returns a pointer to the |
| * table. */ |
| |
| int stringHash (const widechar * c); |
| /* Hash function for character strings */ |
| |
| int charHash (widechar c); |
| /* Hash function for single characters */ |
| |
| char *showString (widechar const *chars, int length); |
| /* Returns a string in the same format as the characters operand in |
| * opcodes */ |
| |
| char *showDots (widechar const *dots, int length); |
| /* Returns a character string in the format of the dots operand */ |
| |
| char *showAttributes (TranslationTableCharacterAttributes a); |
| /* Returns a character string where the attributes are indicated by the |
| * attribute letters used in multipass opcodes */ |
| |
| TranslationTableOpcode findOpcodeNumber (const char *tofind); |
| /* Returns the number of the opcode in the string toFind */ |
| |
| const char *findOpcodeName (TranslationTableOpcode opcode); |
| /* Returns the name of the opcode associated with an opcode number*/ |
| |
| int extParseChars (const char *inString, widechar * outString); |
| /* Takes a character string and produces a sequence of wide characters. |
| * Opposite of showString. |
| * Returns the length of the widechar sequence. |
| */ |
| |
| int extParseDots (const char *inString, widechar * outString); |
| /* Takes a character string and produces a sequence of wide characters |
| * containing dot patterns. Opposite of showDots. |
| * Returns the length of the widechar sequence. |
| */ |
| |
| int other_translate (const char *trantab, const widechar |
| * inbuf, |
| int *inlen, widechar * outbuf, int *outlen, |
| formtype *typeform, char *spacing, int |
| *outputPos, int |
| *inputPos, int *cursorPos, int mode); |
| |
| /*Call wrappers for other translators */ |
| int other_backTranslate (const char *trantab, const widechar |
| * inbuf, |
| int *inlen, widechar * outbuf, int *outlen, |
| formtype *typeform, char *spacing, int |
| *outputPos, int |
| *inputPos, int *cursorPos, int mode); |
| /*Call wrappers for other back-translators.*/ |
| |
| int other_dotsToChar (const char *trantab, widechar * inbuf, |
| widechar * outbuf, int length, int mode); |
| int other_charToDots (const char *trantab, const widechar |
| * inbuf, widechar * outbuf, int length, int mode); |
| |
| int trace_translate (const char* tableList, const widechar* inbuf, |
| int* inlen, widechar* outbuf, int* outlen, |
| formtype* typeform, char* spacing, int* |
| outputPos, |
| int* inputPos, int* cursorPos, |
| const TranslationTableRule** rules, int* rulesLen, |
| int mode); |
| |
| char * getLastTableList(); |
| void debugHook (); |
| /* Can be inserted in code to be used as a breakpoint in gdb */ |
| void outOfMemory (); |
| /* Priknts an out-of-memory message and exits*/ |
| |
| void logWidecharBuf(int level, const char *msg, widechar *wbuf, int wlen); |
| /* Helper for logging a widechar buffer */ |
| |
| #ifdef __cplusplus |
| } |
| #endif /* __cplusplus */ |
| |
| #endif /* __LOUIS_H */ |