diff --git a/src/language.c b/src/language.c index 1959409..ec87c1a 100644 --- a/src/language.c +++ b/src/language.c @@ -223,16 +223,6 @@ static const tidyLocaleMapItem localeMappings[] = { }; -/** - * Provides the mapping for LibTidy users to map between an opaque key - * and an error message value. See `tidyErrorFilterKeys[]`, below. - */ -typedef struct tidyErrorFilterKeyItem { - ctmbstr key; - int value; -} tidyErrorFilterKeyItem; - - /** * LibTidy users may want to use `TidyReportFilter3` to enable their own * localization lookup features. Because Tidy's errors codes are enums the @@ -906,3 +896,53 @@ ctmbstr getNextInstalledLanguage( TidyIterator* iter ) *iter = (TidyIterator)( itemIndex <= TY_(tidyInstalledLanguageListSize)() ? itemIndex : (size_t)0 ); return item; } + + +/** + * Determines the number of error codes used by Tidy. + */ +const uint TY_(tidyErrorCodeListSize)() +{ + static uint array_size = 0; + + if ( array_size == 0 ) + { + while ( tidyErrorFilterKeysStruct[array_size].key ) { + array_size++; + } + } + + return array_size; +} + +/** + * Initializes the TidyIterator to point to the first item + * in Tidy's list of error codes that can be return with + * `TidyReportFilter3`. + * Items can be retrieved with getNextErrorCode(); + */ +TidyIterator getErrorCodeList() +{ + return (TidyIterator)(size_t)1; +} + +/** + * Returns the next error code. + */ +const tidyErrorFilterKeyItem *getNextErrorCode( TidyIterator* iter ) +{ + const tidyErrorFilterKeyItem *item = NULL; + size_t itemIndex; + assert( iter != NULL ); + + itemIndex = (size_t)*iter; + + if ( itemIndex > 0 && itemIndex <= TY_(tidyErrorCodeListSize)() ) + { + item = &tidyErrorFilterKeysStruct[itemIndex - 1]; + itemIndex++; + } + + *iter = (TidyIterator)( itemIndex <= TY_(tidyErrorCodeListSize)() ? itemIndex : (size_t)0 ); + return item; +} diff --git a/src/language.h b/src/language.h index 6212033..6e78582 100644 --- a/src/language.h +++ b/src/language.h @@ -66,6 +66,22 @@ typedef struct tidyLocaleMapItem { } tidyLocaleMapItem; +/** + * The function getNextErrorCode() returns pointers to this type; it gives + * LibTidy implementors the ability to know what errors can be returned + * via `TidyReportFilter3`. + * Provides the mapping for LibTidy users to map between an opaque key + * and an error message value. See `tidyErrorFilterKeys[]` in `language.c`. + * The `key` string is guaranteed by the API (unless deleted entirely). The + * `value` is suitable for use in looking up Tidy's strings, but its value + * is not guaranteed between releases. + */ +typedef struct tidyErrorFilterKeyItem { + ctmbstr key; + int value; +} tidyErrorFilterKeyItem; + + /** * Defines all of the possible dictionary keys. * The starting value is arbitrary but must prevent overlaps @@ -296,6 +312,20 @@ TidyIterator getInstalledLanguageList(); ctmbstr getNextInstalledLanguage( TidyIterator* iter ); +/** + * Initializes the TidyIterator to point to the first item + * in Tidy's list of error codes that can be return with + * `TidyReportFilter3`. + * Items can be retrieved with getNextErrorCode(); + */ +TidyIterator getErrorCodeList(); + +/** + * Returns the next error code. + */ +const tidyErrorFilterKeyItem *getNextErrorCode( TidyIterator* iter ); + + /** @} */ #endif /* language_h */