/* * NReadability * http://code.google.com/p/nreadability/ * * Copyright 2010 Marek Stój * http://immortal.pl/ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ using System; using System.Text; using System.Text.RegularExpressions; using System.Xml; using System.Xml.Linq; using ReadSharp.Ports.Sgml; using System.IO; namespace ReadSharp.Ports.NReadability { /// /// A class for constructing a DOM from HTML markup. /// public class SgmlDomBuilder { #region Public methods /// /// Constructs a DOM (System.Xml.Linq.XDocument) from HTML markup. /// /// HTML markup from which the DOM is to be constructed. /// System.Linq.Xml.XDocument instance which is a DOM of the provided HTML markup. public XDocument BuildDocument(string htmlContent) { if (htmlContent == null) { throw new ArgumentNullException("htmlContent"); } if (htmlContent.Trim().Length == 0) { return new XDocument(); } // "trim end" htmlContent to ...$ (codinghorror.com puts some scripts after the - sic!) const string htmlEnd = "', indexOfHtmlEnd); if (indexOfHtmlEndBracket != -1) { htmlContent = htmlContent.Substring(0, indexOfHtmlEndBracket + 1); } } XDocument document; try { document = LoadDocument(htmlContent); } catch (InvalidOperationException exc) { // sometimes SgmlReader doesn't handle