public string FormatSQLTree(XmlDocument sqlTreeDoc) { //thread-safe - each call to FormatSQLTree() gets its own independent state object TSqlStandardFormattingState state = new TSqlStandardFormattingState(HTMLColoring, IndentString, SpacesPerTab, MaxLineWidth, 0); if (sqlTreeDoc.SelectSingleNode(string.Format("/{0}/@{1}[.=1]", SqlXmlConstants.ENAME_SQL_ROOT, SqlXmlConstants.ANAME_ERRORFOUND)) != null) state.AddOutputContent(ErrorOutputPrefix); XmlNodeList rootList = sqlTreeDoc.SelectNodes(string.Format("/{0}/*", SqlXmlConstants.ENAME_SQL_ROOT)); ProcessSqlNodeList(rootList, state); WhiteSpace_BreakAsExpected(state); if (state.SpecialRegionActive == SpecialRegionType.NoFormat) { XmlNode skippedXml = ExtractXmlBetween(state.RegionStartNode, sqlTreeDoc.DocumentElement); TSqlIdentityFormatter tempFormatter = new TSqlIdentityFormatter(HTMLColoring); state.AddOutputContentRaw(tempFormatter.FormatSQLTree(skippedXml)); } else if (state.SpecialRegionActive == SpecialRegionType.Minify) { XmlNode skippedXml = ExtractXmlBetween(state.RegionStartNode, sqlTreeDoc.DocumentElement); TSqlObfuscatingFormatter tempFormatter = new TSqlObfuscatingFormatter(); if (HTMLFormatted) state.AddOutputContentRaw(Utils.HtmlEncode(tempFormatter.FormatSQLTree(skippedXml))); else state.AddOutputContentRaw(tempFormatter.FormatSQLTree(skippedXml)); } return state.DumpOutput(); }
public void Assimilate(TSqlStandardFormattingState partialState) { //TODO: find a way out of the cross-dependent wrapping maze... CurrentLineLength = CurrentLineLength + partialState.CurrentLineLength; CurrentLineHasContent = CurrentLineHasContent || partialState.CurrentLineHasContent; if (SpecialRegionActive == null) _outBuilder.Append(partialState.DumpOutput()); }