blob: 3ffdc6d8b5c7fbb6bc77a4004ad7dfaab7f55495 [file] [log] [blame] [edit]
/*
* BRLTTY - A background process providing access to the console screen (when in
* text mode) for a blind person using a refreshable braille display.
*
* Copyright (C) 1995-2023 by The BRLTTY Developers.
*
* BRLTTY comes with ABSOLUTELY NO WARRANTY.
*
* This is free software, placed under the terms of the
* GNU Lesser General Public License, as published by the Free Software
* Foundation; either version 2.1 of the License, or (at your option) any
* later version. Please see the file LICENSE-LGPL for details.
*
* Web Page: http://brltty.app/
*
* This software is maintained by Dave Mielke <dave@mielke.cc>.
*/
#ifndef BRLTTY_INCLUDED_CTB_INTERNAL
#define BRLTTY_INCLUDED_CTB_INTERNAL
#include <stdio.h>
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
#define BYTE unsigned char
#define HASHNUM 1087
#define CTH(x) (((x[0]<<8)+x[1])%HASHNUM)
typedef uint32_t ContractionTableOffset;
typedef enum {
CTC_Space = 0X01,
CTC_Letter = 0X02,
CTC_Digit = 0X04,
CTC_Punctuation = 0X08,
CTC_UpperCase = 0X10,
CTC_LowerCase = 0X20
} ContractionTableCharacterAttribute;
typedef uint32_t ContractionTableCharacterAttributes;
typedef struct {
wchar_t value;
ContractionTableOffset rules;
ContractionTableOffset always;
ContractionTableCharacterAttributes attributes;
} ContractionTableCharacter;
typedef enum {
CTO_CapitalSign, /*dot pattern for capital sign*/
CTO_BeginCapitalSign, /*dot pattern for beginning capital block*/
CTO_EndCapitalSign, /*dot pattern for ending capital block*/
CTO_LetterSign, /*dot pattern for letter sign*/
CTO_NumberSign, /*number sign*/
CTO_Literal, /*don't translate this string*/
CTO_Always, /*always use this contraction*/
CTO_Repeatable, /*take just the first, i.e. multiple blanks*/
CTO_LargeSign, /*and, for, of, the, with*/
CTO_LastLargeSign, /*a*/
CTO_WholeWord, /*whole word contraction*/
CTO_JoinedWord, /*to, by, into*/
CTO_LowWord, /*enough, were, was, etc.*/
CTO_Contraction, /*multiletter word sign that needs letsign*/
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*/
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_Class, /*define a character class*/
CTO_After, /*only match if after character in class*/
CTO_Before, /*only match if before character in class*/
CTO_Replace, /*replace text*/
CTO_None /*for internal use only*/
} ContractionTableOpcode;
extern const wchar_t *getContractionTableOpcodeName (ContractionTableOpcode opcode);
typedef struct {
ContractionTableOffset next; /*next entry*/
ContractionTableOpcode opcode; /*rule for testing validity of replacement*/
ContractionTableCharacterAttributes after; /*character types which must foollow*/
ContractionTableCharacterAttributes before; /*character types which must precede*/
BYTE findlen; /*length of string to be replaced*/
BYTE replen; /*length of replacement string*/
wchar_t findrep[]; /*find and replacement strings*/
} ContractionTableRule;
typedef struct {
ContractionTableOffset capitalSign; /*capitalization sign*/
ContractionTableOffset beginCapitalSign; /*begin capitals sign*/
ContractionTableOffset endCapitalSign; /*end capitals sign*/
ContractionTableOffset letterSign; /*letter sign*/
ContractionTableOffset numberSign; /*number sign*/
ContractionTableOffset characters;
uint32_t characterCount;
ContractionTableOffset rules[HASHNUM]; /*locations of multi-character rules in table*/
} ContractionTableHeader;
typedef struct {
const ContractionTableRule *always;
ContractionTableCharacterAttributes attributes;
wchar_t value;
wchar_t uppercase;
wchar_t lowercase;
} CharacterEntry;
typedef struct {
void (*destroy) (ContractionTable *table);
} ContractionTableManagementMethods;
typedef struct ContractionTableTranslationMethodsStruct ContractionTableTranslationMethods;
typedef const ContractionTableTranslationMethods *GetContractionTableTranslationMethodsFunction (void);
extern GetContractionTableTranslationMethodsFunction getContractionTableTranslationMethods_native;
extern GetContractionTableTranslationMethodsFunction getContractionTableTranslationMethods_external;
extern GetContractionTableTranslationMethodsFunction getContractionTableTranslationMethods_louis;
typedef struct {
union {
ContractionTableHeader *fields;
const unsigned char *bytes;
} header;
size_t size;
} InternalContractionTable;
struct ContractionTableStruct {
const ContractionTableManagementMethods *managementMethods;
const ContractionTableTranslationMethods *translationMethods;
struct {
CharacterEntry *array;
unsigned int size;
unsigned int count;
} characters;
struct {
ContractionTableRule **array;
unsigned int size;
unsigned int count;
} rules;
union {
InternalContractionTable internal;
struct {
char *command;
FILE *standardInput;
FILE *standardOutput;
unsigned commandStarted:1;
struct {
char *buffer;
size_t size;
} input;
} external;
#ifdef LOUIS_TABLES_DIRECTORY
struct {
char *tableList;
} louis;
#endif /* LOUIS_TABLES_DIRECTORY */
} data;
};
extern int startContractionCommand (ContractionTable *table);
extern void stopContractionCommand (ContractionTable *table);
extern const unsigned char *getInternalContractionTableBytes (void);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* BRLTTY_INCLUDED_CTB_INTERNAL */