165acc4f3e
- Consolidated all output string definitions enums into `tidyenum.h`, which is where they belong, and where they have proper visibility. - Re-arranged `messages.c/h` with several comments useful to developers. - Properly added the key lookup functions and the language localization functions into tidy.h/tidylib.c with proper name-spacing. - Previous point restored a *lot* of sanity to the #include pollution that's been introduced in light of these. - Note that opaque types have been (properly) introduced. Look at the updated headers for `language.h`. In particular only an opaque structure is passed outside of LibTidy, and so use TidyLangWindowsName and TidyLangPosixName to poll these objects. - Console application updated as a result of this. - Removed dead code: - void TY_(UnknownOption)( TidyDocImpl* doc, char c ); - void TY_(UnknownFile)( TidyDocImpl* doc, ctmbstr program, ctmbstr file ); - Redundant strings were removed with the removal of this dead code. - Several enums were given fixed starting values. YOUR PROGRAMS SHOULD NEVER depend on enum values. `TidyReportLevel` is an example of such. - Some enums were removed as a result of this. `TidyReportLevel` now has matching strings, so the redundant `TidyReportLevelStrings` was removed. - All of the PO's and language header files were regenerated as a result of the string cleanup and header cleanup. - Made the interface to the library version and release date consistent. - CMakeLists.txt now supports SUPPORT_CONSOLE_APP. The intention is to be able to remove console-only code from LibTidy (for LibTidy users). - Updated README/MESSAGES.md, which is *vastly* more simple now.
197 lines
5.7 KiB
C
197 lines
5.7 KiB
C
#ifndef language_h
|
|
#define language_h
|
|
|
|
/*********************************************************************
|
|
* Localization support for HTML Tidy.
|
|
*
|
|
* This header provides the public (within libtidy) interface to
|
|
* basic localization support. To add your own localization, create
|
|
* a new `language_xx.h` file and add it to the struct in
|
|
* `language.c`.
|
|
*
|
|
* (c) 2015 HTACG
|
|
* See `tidy.h` for the copyright notice.
|
|
*********************************************************************/
|
|
|
|
#include "forward.h"
|
|
|
|
|
|
/** @name Exposed Data Structures */
|
|
/** @{ */
|
|
|
|
|
|
/**
|
|
* These enumerations are used within instances of `languageDefinition`
|
|
* structures to provide additional metadata, and are localizable
|
|
* therein.
|
|
*/
|
|
typedef enum {
|
|
|
|
/* Specifies the language code for a particular language. */
|
|
TIDY_LANGUAGE = 400,
|
|
|
|
/* Marker for the last key in the structure. */
|
|
TIDY_MESSAGE_TYPE_LAST
|
|
|
|
} tidyLanguage;
|
|
|
|
|
|
/**
|
|
* Describes a record for a localization string.
|
|
* - key must correspond with one of Tidy's enums (see `tidyMessageTypes`
|
|
* below)
|
|
* - pluralForm corresponds to gettext plural forms case (not singularity).
|
|
* Most entries should be case 0, representing the single case.:
|
|
* https://www.gnu.org/software/gettext/manual/html_node/Plural-forms.html
|
|
*/
|
|
typedef struct languageDictionaryEntry {
|
|
uint key;
|
|
uint pluralForm;
|
|
ctmbstr value;
|
|
} languageDictionaryEntry;
|
|
|
|
|
|
/**
|
|
* For now we'll just use an array to hold all of the dictionary
|
|
* entries. In the future we can convert this to a hash structure
|
|
* which will make looking up strings faster.
|
|
*/
|
|
typedef languageDictionaryEntry const languageDictionary[600];
|
|
|
|
|
|
/**
|
|
* Finally, a complete language definition. The item `pluralForm`
|
|
* is a function pointer that will provide the correct plural
|
|
* form given the value `n`. The actual function is present in
|
|
* each language header and is language dependent.
|
|
*/
|
|
typedef struct languageDefinition {
|
|
uint (*whichPluralForm)(uint n);
|
|
languageDictionary messages;
|
|
} languageDefinition;
|
|
|
|
|
|
/**
|
|
* The function getNextWindowsLanguage() returns pointers to this type;
|
|
* it gives LibTidy implementors the ability to determine how Windows
|
|
* locale names are mapped to POSIX language codes.
|
|
*/
|
|
typedef struct tidyLocaleMapItemImpl {
|
|
ctmbstr winName;
|
|
ctmbstr POSIXName;
|
|
} tidyLocaleMapItemImpl;
|
|
|
|
|
|
/** @} */
|
|
/** @name Localization Related Functions */
|
|
/** @{ */
|
|
|
|
|
|
/**
|
|
** Determines the current locale without affecting the C locale.
|
|
** Tidy has always used the default C locale, and at this point
|
|
** in its development we're not going to tamper with that.
|
|
** @param result The buffer to use to return the string.
|
|
** Returns NULL on failure.
|
|
** @return The same buffer for convenience.
|
|
*/
|
|
tmbstr TY_(tidySystemLocale)(tmbstr result);
|
|
|
|
/**
|
|
* Tells Tidy to use a different language for output.
|
|
* @param languageCode A Windows or POSIX language code, and must match
|
|
* a TIDY_LANGUAGE for an installed language.
|
|
* @result Indicates that a setting was applied, but not necessarily the
|
|
* specific request, i.e., true indicates a language and/or region
|
|
* was applied. If es_mx is requested but not installed, and es is
|
|
* installed, then es will be selected and this function will return
|
|
* true. However the opposite is not true; if es is requested but
|
|
* not present, Tidy will not try to select from the es_XX variants.
|
|
*/
|
|
Bool TY_(tidySetLanguage)( ctmbstr languageCode );
|
|
|
|
/**
|
|
* Gets the current language used by Tidy.
|
|
*/
|
|
ctmbstr TY_(tidyGetLanguage)();
|
|
|
|
/**
|
|
* Provides a string given `messageType` in the current
|
|
* localization for `quantity`.
|
|
*/
|
|
ctmbstr TY_(tidyLocalizedStringN)( uint messageType, uint quantity );
|
|
|
|
/**
|
|
* Provides a string given `messageType` in the current
|
|
* localization for the single case.
|
|
*/
|
|
ctmbstr TY_(tidyLocalizedString)( uint messageType );
|
|
|
|
|
|
/** @} */
|
|
/** @name Documentation Generation */
|
|
/** @{ */
|
|
|
|
|
|
/**
|
|
* Provides a string given `messageType` in the default
|
|
* localization (which is `en`).
|
|
*/
|
|
ctmbstr TY_(tidyDefaultString)( uint messageType );
|
|
|
|
/*
|
|
* Initializes the TidyIterator to point to the first item
|
|
* in Tidy's list of localization string keys. Note that
|
|
* these are provided for documentation generation purposes
|
|
* and probably aren't useful for LibTidy implementors.
|
|
*/
|
|
TidyIterator TY_(getStringKeyList)();
|
|
|
|
/*
|
|
* Provides the next key value in Tidy's list of localized
|
|
* strings. Note that these are provided for documentation
|
|
* generation purposes and probably aren't useful to
|
|
* libtidy implementors.
|
|
*/
|
|
uint TY_(getNextStringKey)( TidyIterator* iter );
|
|
|
|
/**
|
|
* Initializes the TidyIterator to point to the first item
|
|
* in Tidy's structure of Windows<->POSIX local mapping.
|
|
* Items can be retrieved with getNextWindowsLanguage();
|
|
*/
|
|
TidyIterator TY_(getWindowsLanguageList)();
|
|
|
|
/**
|
|
* Returns the next record of type `localeMapItem` in
|
|
* Tidy's structure of Windows<->POSIX local mapping.
|
|
*/
|
|
const tidyLocaleMapItemImpl *TY_(getNextWindowsLanguage)( TidyIterator* iter );
|
|
|
|
/**
|
|
* Given a `tidyLocalMapItemImpl, return the Windows name.
|
|
*/
|
|
const ctmbstr TY_(TidyLangWindowsName)( const tidyLocaleMapItemImpl *item );
|
|
|
|
/**
|
|
* Given a `tidyLocalMapItemImpl, return the POSIX name.
|
|
*/
|
|
const ctmbstr TY_(TidyLangPosixName)( const tidyLocaleMapItemImpl *item );
|
|
|
|
/**
|
|
* Initializes the TidyIterator to point to the first item
|
|
* in Tidy's list of installed language codes.
|
|
* Items can be retrieved with getNextInstalledLanguage();
|
|
*/
|
|
TidyIterator TY_(getInstalledLanguageList)();
|
|
|
|
/**
|
|
* Returns the next installed language.
|
|
*/
|
|
ctmbstr TY_(getNextInstalledLanguage)( TidyIterator* iter );
|
|
|
|
|
|
/** @} */
|
|
|
|
#endif /* language_h */
|