diff --git a/Source/Bind/DocProcessor.cs b/Source/Bind/DocProcessor.cs index fcd69f9b..57afe0cd 100644 --- a/Source/Bind/DocProcessor.cs +++ b/Source/Bind/DocProcessor.cs @@ -14,6 +14,9 @@ namespace Bind static readonly XslCompiledTransform xslt = new XslCompiledTransform(); static readonly XmlReaderSettings settings = new XmlReaderSettings(); + string Text; + string LastFile; + public DocProcessor(string transform_file) { xslt.Load(transform_file); @@ -27,35 +30,40 @@ namespace Bind // Todo: Some files include more than 1 function - find a way to map these extra functions. public string ProcessFile(string file) { - string text = File.ReadAllText(file); + if (LastFile == file) + return Text; - Match m = remove_mathml.Match(text); + LastFile = file; + Text = File.ReadAllText(file); + + Match m = remove_mathml.Match(Text); while (m.Length > 0) { - string removed = text.Substring(m.Index, m.Length); - text = text.Remove(m.Index, m.Length); + string removed = Text.Substring(m.Index, m.Length); + Text = Text.Remove(m.Index, m.Length); int equation = removed.IndexOf("eqn"); if (equation > 0) { - text = text.Insert(m.Index, + Text = Text.Insert(m.Index, "") - equation - 4) + "]]>"); } - m = remove_mathml.Match(text); + m = remove_mathml.Match(Text); } XmlReader doc = null; try { // The pure XmlReader is ~20x faster than the XmlTextReader. - doc = XmlReader.Create(new StringReader(text), settings); + doc = XmlReader.Create(new StringReader(Text), settings); //doc = new XmlTextReader(new StringReader(text)); using (StringWriter sw = new StringWriter()) { xslt.Transform(doc, null, sw); - return sw.ToString().TrimEnd('\n'); + Text = sw.ToString().TrimEnd('\n'); + return Text; } } catch (XmlException e)