Address issue #472.
This commit is contained in:
parent
b047e32a18
commit
005127c733
|
@ -52,10 +52,18 @@ typedef enum
|
|||
|
||||
These TidyOptionId are used throughout libtidy, and also
|
||||
have associated localized strings to describe them.
|
||||
|
||||
Ensure struct order is same order as config.c:option_defs structure!
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
TidyUnknownOption = 0, /**< Unknown option! */
|
||||
|
||||
#ifndef DOXYGEN_SHOULD_SKIP_THIS
|
||||
TidyDoctypeMode, /**< Internal use ONLY */
|
||||
TidyEmacsFile, /**< Internal use ONLY */
|
||||
#endif /* DOXYGEN_SHOULD_SKIP_THIS */
|
||||
|
||||
TidyIndentSpaces, /**< Indentation n spaces/tabs */
|
||||
TidyWrapLen, /**< Wrap margin */
|
||||
TidyTabSize, /**< Expand tabs to n spaces */
|
||||
|
@ -65,7 +73,6 @@ typedef enum
|
|||
TidyOutCharEncoding, /**< Output character encoding (if different) */
|
||||
TidyNewline, /**< Output line ending (default to platform) */
|
||||
|
||||
TidyDoctypeMode, /**< See doctype property */
|
||||
TidyDoctype, /**< User specified doctype */
|
||||
|
||||
TidyDuplicateAttrs, /**< Keep first or last duplicate attribute */
|
||||
|
@ -122,7 +129,6 @@ typedef enum
|
|||
TidyWord2000, /**< Draconian cleaning for Word2000 */
|
||||
TidyMark, /**< Add meta element indicating tidied doc */
|
||||
TidyEmacs, /**< If true format error output for GNU Emacs */
|
||||
TidyEmacsFile, /**< Name of current Emacs file */
|
||||
TidyLiteralAttribs, /**< If true attributes may use newlines */
|
||||
TidyBodyOnly, /**< Output BODY content only */
|
||||
TidyFixUri, /**< Applies URI encoding if necessary */
|
||||
|
|
22
src/config.c
22
src/config.c
|
@ -212,9 +212,12 @@ static ParseProperty ParseRepeatAttr;
|
|||
\*/
|
||||
static ParseProperty ParseTabs;
|
||||
|
||||
/* Ensure struct order is same order as tidyenum.h:TidyOptionId! */
|
||||
static const TidyOptionImpl option_defs[] =
|
||||
{
|
||||
{ TidyUnknownOption, MS, "unknown!", IN, 0, NULL, NULL },
|
||||
{ TidyDoctypeMode, MU, "doctype-mode", IN, TidyDoctypeAuto, NULL, doctypePicks },
|
||||
{ TidyEmacsFile, MS, "gnu-emacs-file", ST, 0, ParseString, NULL },
|
||||
{ TidyIndentSpaces, PP, "indent-spaces", IN, 2, ParseInt, NULL },
|
||||
{ TidyWrapLen, PP, "wrap", IN, 68, ParseInt, NULL },
|
||||
{ TidyTabSize, PP, "tab-size", IN, 8, ParseInt, NULL },
|
||||
|
@ -222,7 +225,6 @@ static const TidyOptionImpl option_defs[] =
|
|||
{ TidyInCharEncoding, CE, "input-encoding", IN, UTF8, ParseCharEnc, charEncPicks },
|
||||
{ TidyOutCharEncoding, CE, "output-encoding", IN, UTF8, ParseCharEnc, charEncPicks },
|
||||
{ TidyNewline, CE, "newline", IN, DLF, ParseNewline, newlinePicks },
|
||||
{ TidyDoctypeMode, MU, "doctype-mode", IN, TidyDoctypeAuto, NULL, doctypePicks },
|
||||
{ TidyDoctype, MU, "doctype", ST, 0, ParseDocType, doctypePicks },
|
||||
{ TidyDuplicateAttrs, MU, "repeated-attributes", IN, TidyKeepLast, ParseRepeatAttr, repeatAttrPicks },
|
||||
{ TidyAltText, MU, "alt-text", ST, 0, ParseString, NULL },
|
||||
|
@ -274,7 +276,6 @@ static const TidyOptionImpl option_defs[] =
|
|||
{ TidyWord2000, MU, "word-2000", BL, no, ParseBool, boolPicks },
|
||||
{ TidyMark, MS, "tidy-mark", BL, yes, ParseBool, boolPicks },
|
||||
{ TidyEmacs, MS, "gnu-emacs", BL, no, ParseBool, boolPicks },
|
||||
{ TidyEmacsFile, MS, "gnu-emacs-file", ST, 0, ParseString, NULL },
|
||||
{ TidyLiteralAttribs, MU, "literal-attributes", BL, no, ParseBool, boolPicks },
|
||||
{ TidyBodyOnly, MU, "show-body-only", IN, no, ParseAutoBool, autoBoolPicks },
|
||||
{ TidyFixUri, MU, "fix-uri", BL, yes, ParseBool, boolPicks },
|
||||
|
@ -904,12 +905,25 @@ Bool TY_(ParseConfigOption)( TidyDocImpl* doc, ctmbstr optnam, ctmbstr optval )
|
|||
*/
|
||||
Bool TY_(ParseConfigValue)( TidyDocImpl* doc, TidyOptionId optId, ctmbstr optval )
|
||||
{
|
||||
const TidyOptionImpl* option = option_defs + optId;
|
||||
Bool status = ( optId < N_TIDY_OPTIONS && optval != NULL );
|
||||
const TidyOptionImpl* option = NULL;
|
||||
enum { sizeBuf = 11 };
|
||||
char buffer[sizeBuf];
|
||||
/* #472: fail status if there is a NULL parser. @ralfjunker */
|
||||
Bool status = ( optId < N_TIDY_OPTIONS
|
||||
&& (option = option_defs + optId)->parser
|
||||
&& optval != NULL );
|
||||
|
||||
if ( !status )
|
||||
if ( option )
|
||||
TY_(ReportBadArgument)(doc, option->name);
|
||||
else
|
||||
{
|
||||
/* If optId < N_TIDY_OPTIONS then option remains unassigned,
|
||||
and we have to fall back to an ugly error message. */
|
||||
TY_(tmbsnprintf(buffer, sizeBuf, "%u", optId));
|
||||
TY_(ReportUnknownOption(doc, buffer));
|
||||
}
|
||||
else
|
||||
{
|
||||
TidyBuffer inbuf; /* Set up input source */
|
||||
tidyBufInitWithAllocator( &inbuf, doc->allocator );
|
||||
|
|
Loading…
Reference in a new issue