static void *php_tidy_get_opt_val(PHPTidyDoc *ptdoc, TidyOption opt, TidyOptionType *type) { *type = tidyOptGetType(opt); switch (*type) { case TidyString: { char *val = (char *) tidyOptGetValue(ptdoc->doc, tidyOptGetId(opt)); if (val) { return (void *) zend_string_init(val, strlen(val), 0); } else { return (void *) ZSTR_EMPTY_ALLOC(); } } break; case TidyInteger: return (void *) (uintptr_t) tidyOptGetInt(ptdoc->doc, tidyOptGetId(opt)); break; case TidyBoolean: return (void *) tidyOptGetBool(ptdoc->doc, tidyOptGetId(opt)); break; } /* should not happen */ return NULL; }
static html_valid_status_t html_valid_set_option (html_valid_t * htv, SV * option, SV * value) { TidyOption to; TidyOptionType tot; TidyOptionId ti; const char * coption; STRLEN coption_length; CHECK_INIT (htv); coption = SvPV (option, coption_length); to = tidyGetOptionByName(htv->tdoc, coption); if (to == 0) { warn ("unknown option %s", coption); return html_valid_unknown_option; } ti = tidyOptGetId (to); tot = tidyOptGetType (to); switch (tot) { case TidyString: CALL (set_string_option (htv, coption, ti, value)); break; case TidyInteger: CALL (set_number_option (htv, coption, ti, value)); break; case TidyBoolean: tidyOptSetBool (htv->tdoc, ti, SvTRUE (value)); break; default: fprintf (stderr, "%s:%d: bad option type %d from tidy library.\n", __FILE__, __LINE__, tot); return html_valid_bad_option_type; } return html_valid_ok; }
TidyIterator TIDY_CALL tidyOptGetDocLinksList( TidyDoc ARG_UNUSED(tdoc), TidyOption opt ) { const TidyOptionId optId = tidyOptGetId( opt ); const TidyOptionDoc* docDesc = TY_(OptGetDocDesc)( optId ); if (docDesc && docDesc->links) return (TidyIterator)docDesc->links; return (TidyIterator)NULL; }
static void printOptionValues( TidyDoc ARG_UNUSED(tdoc), TidyOption topt, OptionDesc *d ) { TidyOptionId optId = tidyOptGetId( topt ); ctmbstr ro = tidyOptIsReadOnly( topt ) ? "*" : "" ; switch ( optId ) { case TidyInlineTags: case TidyBlockTags: case TidyEmptyTags: case TidyPreTags: { TidyIterator pos = tidyOptGetDeclTagList( tdoc ); while ( pos ) { d->def = tidyOptGetNextDeclTag(tdoc, optId, &pos); if ( pos ) { if ( *d->name ) printf( valfmt, d->name, d->type, ro, d->def ); else printf( fmt, d->name, d->type, d->def ); d->name = ""; d->type = ""; } } } break; case TidyNewline: d->def = tidyOptGetCurrPick( tdoc, optId ); break; default: break; } /* fix for http://tidy.sf.net/bug/873921 */ if ( *d->name || *d->type || (d->def && *d->def) ) { if ( ! d->def ) d->def = ""; if ( *d->name ) printf( valfmt, d->name, d->type, ro, d->def ); else printf( fmt, d->name, d->type, d->def ); } }
static int _php_tidy_set_tidy_opt(TidyDoc doc, char *optname, zval *value) { TidyOption opt = tidyGetOptionByName(doc, optname); zval conv; ZVAL_COPY_VALUE(&conv, value); if (!opt) { php_error_docref(NULL, E_NOTICE, "Unknown Tidy Configuration Option '%s'", optname); return FAILURE; } if (tidyOptIsReadOnly(opt)) { php_error_docref(NULL, E_NOTICE, "Attempting to set read-only option '%s'", optname); return FAILURE; } switch(tidyOptGetType(opt)) { case TidyString: if (Z_TYPE(conv) != IS_STRING) { zval_copy_ctor(&conv); convert_to_string(&conv); } if (tidyOptSetValue(doc, tidyOptGetId(opt), Z_STRVAL(conv))) { if (Z_TYPE(conv) != Z_TYPE_P(value)) { zval_dtor(&conv); } return SUCCESS; } if (Z_TYPE(conv) != Z_TYPE_P(value)) { zval_dtor(&conv); } break; case TidyInteger: if (Z_TYPE(conv) != IS_LONG) { zval_copy_ctor(&conv); convert_to_long(&conv); } if (tidyOptSetInt(doc, tidyOptGetId(opt), Z_LVAL(conv))) { return SUCCESS; } break; case TidyBoolean: if (Z_TYPE(conv) != IS_LONG) { zval_copy_ctor(&conv); convert_to_long(&conv); } if (tidyOptSetBool(doc, tidyOptGetId(opt), Z_LVAL(conv))) { return SUCCESS; } break; default: php_error_docref(NULL, E_WARNING, "Unable to determine type of configuration option"); break; } return FAILURE; }
ctmbstr TIDY_CALL tidyOptGetDoc( TidyDoc ARG_UNUSED(tdoc), TidyOption opt ) { const TidyOptionId optId = tidyOptGetId( opt ); const TidyOptionDoc* docDesc = TY_(OptGetDocDesc)( optId ); return docDesc ? docDesc->doc : NULL; }
/* Create description "d" related to "opt" */ static void GetOption( TidyDoc tdoc, TidyOption topt, OptionDesc *d ) { TidyOptionId optId = tidyOptGetId( topt ); TidyOptionType optTyp = tidyOptGetType( topt ); d->name = tidyOptGetName( topt ); d->cat = ConfigCategoryName( tidyOptGetCategory( topt ) ); d->vals = NULL; d->def = NULL; d->haveVals = yes; /* Handle special cases first. */ switch ( optId ) { case TidyDuplicateAttrs: case TidySortAttributes: case TidyNewline: case TidyAccessibilityCheckLevel: d->type = "enum"; d->vals = NULL; d->def = optId==TidyNewline ? "<em>Platform dependent</em>" :tidyOptGetCurrPick( tdoc, optId ); break; case TidyDoctype: d->type = "DocType"; d->vals = NULL; { ctmbstr sdef = NULL; sdef = tidyOptGetCurrPick( tdoc, TidyDoctypeMode ); if ( !sdef || *sdef == '*' ) sdef = tidyOptGetValue( tdoc, TidyDoctype ); d->def = sdef; } break; case TidyInlineTags: case TidyBlockTags: case TidyEmptyTags: case TidyPreTags: d->type = "Tag names"; d->vals = "tagX, tagY, ..."; d->def = NULL; break; case TidyCharEncoding: case TidyInCharEncoding: case TidyOutCharEncoding: d->type = "Encoding"; d->def = tidyOptGetEncName( tdoc, optId ); if (!d->def) d->def = "?"; d->vals = NULL; break; /* General case will handle remaining */ default: switch ( optTyp ) { case TidyBoolean: d->type = "Boolean"; d->vals = "y/n, yes/no, t/f, true/false, 1/0"; d->def = tidyOptGetCurrPick( tdoc, optId ); break; case TidyInteger: if (isAutoBool(topt)) { d->type = "AutoBool"; d->vals = "auto, y/n, yes/no, t/f, true/false, 1/0"; d->def = tidyOptGetCurrPick( tdoc, optId ); } else { uint idef; d->type = "Integer"; if ( optId == TidyWrapLen ) d->vals = "0 (no wrapping), 1, 2, ..."; else d->vals = "0, 1, 2, ..."; idef = tidyOptGetInt( tdoc, optId ); sprintf(d->tempdefs, "%u", idef); d->def = d->tempdefs; } break; case TidyString: d->type = "String"; d->vals = NULL; d->haveVals = no; d->def = tidyOptGetValue( tdoc, optId ); break; } } }