#include "CFHtmlTidy.h"
#include "tidybuffio.h"
#include "tidy-int.h"
CCFHtmlTidy::CCFHtmlTidy(void)
{
}
CCFHtmlTidy::~CCFHtmlTidy(void)
{
}
bool CCFHtmlTidy::TidyMain(const char* pSourceIn, const char* pOptions, std::string &strOut, std::string &strErr)
{
TidyBuffer output;
TidyBuffer errbuf;
int rc = -1;
Bool ok = yes;
TidyDoc tdoc = tidyCreate(); // Initialize "document"
tidyBufInit(&output);
tidyBufInit(&errbuf);
TidyOptionsSet(tidyDocToImpl(tdoc), pOptions);
if (ok)
rc = tidySetErrorBuffer(tdoc, &errbuf); // Capture diagnostics
if (rc >= 0)
rc = tidyParseString(tdoc, pSourceIn); // Parse the input
if (rc >= 0)
rc = tidyCleanAndRepair(tdoc); // Tidy it up!
if (rc >= 0)
rc = tidyRunDiagnostics(tdoc); // Kvetch
//if ( rc > 1 ) // If error, force output.
// rc = ( tidyOptSetBool(tdoc, TidyForceOutput, yes) ? rc : -1 );
if (rc >= 0)
rc = tidySaveBuffer(tdoc, &output); // Pretty Print
if (rc >= 0)
{
if (output.bp)
{
strOut = reinterpret_cast(output.bp);
}
}
strErr = reinterpret_cast(errbuf.bp);
std::string strEmpty = "No warnings or errors were found.\n\n";
if (0 == strEmpty.compare(strErr))
{
strErr.clear();
}
tidyBufFree(&output);
tidyBufFree(&errbuf);
tidyRelease(tdoc);
return true;
}
void CCFHtmlTidy::InitTidyDefault()
{
TidyDoc formatter = tidyImplToDoc(tidy);
tidyOptSetBool(formatter, TidyShowMarkup, no);
tidyOptSetBool(formatter, TidyShowWarnings, no);
tidyOptSetBool(formatter, TidyDropEmptyParas, no);
tidyOptSetBool(formatter, TidyFixComments, no);
tidyOptSetBool(formatter, TidyQuoteNbsp, no);
tidyOptSetBool(formatter, TidyQuoteAmpersand, no);
tidyOptSetBool(formatter, TidyWrapSection, no);
tidyOptSetBool(formatter, TidyWrapAsp, no);
tidyOptSetBool(formatter, TidyWrapJste, no);
tidyOptSetBool(formatter, TidyWrapPhp, no);
tidyOptSetBool(formatter, TidyFixBackslash, no);
tidyOptSetBool(formatter, TidyMark, no);
tidyOptSetBool(formatter, TidyFixUri, no);
tidyOptSetBool(formatter, TidyLowerLiterals, no);
tidyOptSetBool(formatter, TidyJoinStyles, no);
tidyOptSetBool(formatter, TidyNCR, no);
tidyOptSetBool(formatter, TidyAnchorAsName, no);
tidyOptSetInt(formatter, TidyNewline, 0);
tidyOptSetBool(formatter, TidyCoerceEndTags, no);
tidyOptSetBool(formatter, TidyDropEmptyElems, no);
tidyOptSetBool(formatter, TidyMergeEmphasis, no);
tidyOptSetBool(formatter, TidySkipNested, no);
tidyOptSetBool(formatter, TidyShowInfo, no);
tidyOptSetBool(formatter, TidyEscapeScripts, no);
}
void CCFHtmlTidy::SetTidyProp(const std::string& strParam, int nNumValue, const std::string& /*strNumValue*/, const std::string& strTextValue)
{
TidyDoc formatter = tidyImplToDoc(tidy);
if ("axd" == strParam)
{
tidyOptSetBool(formatter, TidyXmlDecl, yes);
}
else if ("axs" == strParam)
{
tidyOptSetBool(formatter, TidyXmlSpace, yes);
}
else if ("aan" == strParam)
{
tidyOptSetBool(formatter, TidyAnchorAsName, yes);
}
else if ("axp" == strParam)
{
tidyOptSetBool(formatter, TidyXmlPIs, yes);
}
else if ("b" == strParam)
{
tidyOptSetBool(formatter, TidyMakeBare, yes);
}
else if ("c" == strParam)
{
tidyOptSetBool(formatter, TidyMakeClean, yes);
}
else if ("cet" == strParam)
{
tidyOptSetBool(formatter, TidyCoerceEndTags, yes);
}
else if ("diu" == strParam)
{
tidyOptSetBool(formatter, TidyDecorateInferredUL, yes);
}
else if ("dee" == strParam)
{
tidyOptSetBool(formatter, TidyDropEmptyElems, yes);
}
else if ("dep" == strParam)
{
tidyOptSetBool(formatter, TidyDropEmptyParas, yes);
}
else if ("dft" == strParam)
{
tidyOptSetBool(formatter, TidyDropFontTags, yes);
}
else if ("dpa" == strParam)
{
tidyOptSetBool(formatter, TidyDropPropAttrs, yes);
}
else if ("ebt" == strParam)
{
tidyOptSetBool(formatter, TidyEncloseBlockText, yes);
}
else if ("et" == strParam)
{
tidyOptSetBool(formatter, TidyEncloseBodyText, yes);
}
else if ("ec" == strParam)
{
tidyOptSetBool(formatter, TidyEscapeCdata, yes);
}
else if ("fb" == strParam)
{
tidyOptSetBool(formatter, TidyFixBackslash, yes);
}
else if ("fbc" == strParam)
{
tidyOptSetBool(formatter, TidyFixComments, yes);
}
else if ("fu" == strParam)
{
tidyOptSetBool(formatter, TidyFixUri, yes);
}
else if ("gdc" == strParam)
{
tidyOptSetBool(formatter, TidyGDocClean, yes);
}
else if ("hc" == strParam)
{
tidyOptSetBool(formatter, TidyHideComments, yes);
}
else if ("he" == strParam)
{
tidyOptSetBool(formatter, TidyHideEndTags, yes);
}
else if ("ic" == strParam)
{
tidyOptSetBool(formatter, TidyIndentCdata, yes);
}
else if ("ix" == strParam)
{
tidyOptSetBool(formatter, TidyXmlTags, yes);
}
else if ("jc" == strParam)
{
tidyOptSetBool(formatter, TidyJoinClasses, yes);
}
else if ("js" == strParam)
{
tidyOptSetBool(formatter, TidyJoinStyles, yes);
}
else if ("la" == strParam)
{
tidyOptSetBool(formatter, TidyLiteralAttribs, yes);
}
else if ("le" == strParam)
{
tidyOptSetBool(formatter, TidyLogicalEmphasis, yes);
}
else if ("ll" == strParam)
{
tidyOptSetBool(formatter, TidyLowerLiterals, yes);
}
else if ("n" == strParam)
{
tidyOptSetBool(formatter, TidyNCR, yes);
}
else if ("ne" == strParam)
{
tidyOptSetBool(formatter, TidyNumEntities, yes);
}
else if ("oot" == strParam)
{
tidyOptSetBool(formatter, TidyOmitOptionalTags, yes);
}
else if ("oh" == strParam)
{
tidyOptSetBool(formatter, TidyHtmlOut, yes);
}
else if ("ox" == strParam)
{
tidyOptSetBool(formatter, TidyXhtmlOut, yes);
}
else if ("oxm" == strParam)
{
tidyOptSetBool(formatter, TidyXmlOut, yes);
}
else if ("pe" == strParam)
{
tidyOptSetBool(formatter, TidyPreserveEntities, yes);
}
else if ("qa" == strParam)
{
tidyOptSetBool(formatter, TidyQuoteAmpersand, yes);
}
else if ("qm" == strParam)
{
tidyOptSetBool(formatter, TidyQuoteMarks, yes);
}
else if ("qn" == strParam)
{
tidyOptSetBool(formatter, TidyQuoteNbsp, yes);
}
else if ("rc" == strParam)
{
tidyOptSetBool(formatter, TidyReplaceColor, yes);
}
else if ("sn" == strParam)
{
tidyOptSetBool(formatter, TidySkipNested, yes);
}
else if ("sta" == strParam)
{
tidyOptSetBool(formatter, TidyStrictTagsAttr, yes);
}
else if ("ua" == strParam)
{
tidyOptSetBool(formatter, TidyUpperCaseAttrs, yes);
}
else if ("ut" == strParam)
{
tidyOptSetBool(formatter, TidyUpperCaseTags, yes);
}
else if ("wo" == strParam)
{
tidyOptSetBool(formatter, TidyWord2000, yes);
}
else if ("bbb" == strParam)
{
tidyOptSetBool(formatter, TidyBreakBeforeBR, yes);
}
else if ("es" == strParam)
{
tidyOptSetBool(formatter, TidyEscapeScripts, yes);
}
else if ("ia" == strParam)
{
tidyOptSetBool(formatter, TidyIndentAttributes, yes);
}
else if ("tb" == strParam)
{
tidyOptSetBool(formatter, TidyPPrintTabs, yes);
}
else if ("m" == strParam)
{
tidyOptSetBool(formatter, TidyShowMarkup, yes);
}
else if ("pw" == strParam)
{
tidyOptSetBool(formatter, TidyPunctWrap, yes);
}
else if ("vs" == strParam)
{
tidyOptSetBool(formatter, TidyVertSpace, yes);
}
else if ("wa" == strParam)
{
tidyOptSetBool(formatter, TidyWrapAsp, yes);
}
else if ("wat" == strParam)
{
tidyOptSetBool(formatter, TidyWrapAttVals, yes);
}
else if ("wj" == strParam)
{
tidyOptSetBool(formatter, TidyWrapJste, yes);
}
else if ("wp" == strParam)
{
tidyOptSetBool(formatter, TidyWrapPhp, yes);
}
else if ("wsl" == strParam)
{
tidyOptSetBool(formatter, TidyWrapScriptlets, yes);
}
else if ("ws" == strParam)
{
tidyOptSetBool(formatter, TidyWrapSection, yes);
}
else if ("ac" == strParam)
{
tidyOptSetBool(formatter, TidyAsciiChars, yes);
}
else if ("sw" == strParam)
{
tidyOptSetBool(formatter, TidyShowWarnings, yes);
}
else if ("fo" == strParam)
{
tidyOptSetBool(formatter, TidyForceOutput, yes);
}
else if ("i" == strParam)
{
tidyOptSetInt(formatter, TidyIndentContent, abs(nNumValue - 2) % 3);
}
else if ("md" == strParam)
{
tidyOptSetInt(formatter, TidyMergeDivs, abs(nNumValue - 2) % 3);
}
else if ("me" == strParam)
{
tidyOptSetBool(formatter, TidyMergeEmphasis, yes);
}
else if ("ms" == strParam)
{
tidyOptSetInt(formatter, TidyMergeSpans, abs(nNumValue - 2) % 3);
}
else if ("sbo" == strParam)
{
tidyOptSetInt(formatter, TidyBodyOnly, abs(nNumValue - 2) % 3);
}
else if ("d" == strParam)
{
ulong val = (nNumValue - 1) % 5;
if (nNumValue == 5)
{
val = 0;
}
tidyOptSetInt(formatter, TidyDoctypeMode, val);
}
else if ("du" == strParam)
{
tidyOptSetValue(formatter, TidyDoctype, strTextValue.c_str());
}
else if ("ra" == strParam)
{
tidyOptSetInt(formatter, TidyDuplicateAttrs, nNumValue % 2);
}
else if ("sa" == strParam)
{
tidyOptSetInt(formatter, TidySortAttributes, nNumValue % 2);
}
else if ("ce" == strParam)
{
tidySetCharEncoding(formatter, TY_(GetEncodingOptNameFromTidyId)(nNumValue));
}
else if ("ie" == strParam)
{
tidySetInCharEncoding(formatter, TY_(GetEncodingOptNameFromTidyId)(nNumValue));
}
else if ("oe" == strParam)
{
tidySetOutCharEncoding(formatter, TY_(GetEncodingOptNameFromTidyId)(nNumValue));
}
else if ("se" == strParam)
{
tidyOptSetInt(formatter, TidyShowErrors, nNumValue);
}
else if ("si" == strParam)
{
tidyOptSetBool(formatter, TidyShowInfo, yes);
}
else if ("is" == strParam)
{
tidyOptSetInt(formatter, TidyIndentSpaces, nNumValue);
}
else if ("ts" == strParam)
{
tidyOptSetInt(formatter, TidyTabSize, nNumValue);
}
else if ("w" == strParam)
{
tidyOptSetInt(formatter, TidyWrapLen, nNumValue);
}
else if ("at" == strParam)
{
tidyOptSetValue(formatter, TidyAltText, strTextValue.c_str());
}
else if ("cp" == strParam)
{
tidyOptSetValue(formatter, TidyCSSPrefix, strTextValue.c_str());
}
else if ("nbt" == strParam)
{
tidyOptSetValue(formatter, TidyBlockTags, strTextValue.c_str());
}
else if ("net" == strParam)
{
tidyOptSetValue(formatter, TidyEmptyTags, strTextValue.c_str());
}
else if ("nit" == strParam)
{
tidyOptSetValue(formatter, TidyInlineTags, strTextValue.c_str());
}
else if ("npt" == strParam)
{
tidyOptSetValue(formatter, TidyPreTags, strTextValue.c_str());
}
}