Imported Upstream version 3.8.0

Former-commit-id: 6a76a29bd07d86e57c6c8da45c65ed5447d38a61
This commit is contained in:
Jo Shields
2014-09-04 09:07:35 +01:00
parent a575963da9
commit fe777c5c82
1062 changed files with 12460 additions and 5983 deletions

View File

@@ -63,14 +63,21 @@ namespace Monodoc.Generators.Html
public string Htmlize (XmlReader ecma_xml, XsltArgumentList args)
{
EnsureTransform ();
var output = new StringBuilder ();
ecma_transform.Transform (ecma_xml,
args,
XmlWriter.Create (output, ecma_transform.OutputSettings),
CreateDocumentResolver ());
return output.ToString ();
try{
EnsureTransform ();
var output = new StringBuilder ();
ecma_transform.Transform (ecma_xml,
args,
XmlWriter.Create (output, ecma_transform.OutputSettings),
CreateDocumentResolver ());
return output.ToString ();
}
catch(Exception x)
{
var msg = x.ToString ();
return msg;
}
}
protected virtual XmlResolver CreateDocumentResolver ()
@@ -81,21 +88,14 @@ namespace Monodoc.Generators.Html
public string Export (Stream stream, Dictionary<string, string> extraArgs)
{
return Htmlize (XmlReader.Create (WrapStream (new StreamReader (stream), extraArgs)), extraArgs);
return Htmlize (XmlReader.Create (new StreamReader(stream)), extraArgs);
}
public string Export (string input, Dictionary<string, string> extraArgs)
{
return Htmlize (XmlReader.Create (WrapStream (new StringReader (input), extraArgs)), extraArgs);
return Htmlize (XmlReader.Create (new StringReader(input)), extraArgs);
}
TextReader WrapStream (TextReader initialReader, Dictionary<string, string> renderArgs)
{
string show;
if (renderArgs.TryGetValue ("show", out show) && show == "namespace")
return new AvoidCDataTextReader (initialReader);
return initialReader;
}
static void EnsureTransform ()
{
@@ -329,81 +329,5 @@ namespace Monodoc.Generators.Html
}
}
}
public class AvoidCDataTextReader : TextReader
{
static readonly char[] CDataPattern = new[] {
'<', '!', '[', 'C', 'D', 'A', 'T', 'A', '['
};
static readonly char[] CDataClosingPattern = new[] {
']', ']', '>'
};
TextReader wrappedReader;
char[] backingArray = new char[9]; // "<![CDATA[".Length
int currentIndex = -1;
int eofIndex = -1;
bool inCData;
public AvoidCDataTextReader (TextReader wrappedReader)
{
this.wrappedReader = wrappedReader;
}
public override int Peek ()
{
if (!EnsureBuffer ())
return -1;
return (int)backingArray[currentIndex];
}
public override int Read ()
{
if (!EnsureBuffer ())
return -1;
var result = (int)backingArray[currentIndex];
var next = wrappedReader.Read ();
if (next == -1 && eofIndex == -1)
eofIndex = currentIndex;
else
backingArray[currentIndex] = (char)next;
currentIndex = (currentIndex + 1) % backingArray.Length;
return result;
}
void ReadLength (int length)
{
for (int i = 0; i < length; i++)
Read ();
}
bool EnsureBuffer ()
{
if (currentIndex == -1) {
currentIndex = 0;
var read = wrappedReader.ReadBlock (backingArray, 0, backingArray.Length);
if (read < backingArray.Length)
eofIndex = read;
return read > 0;
} else if (currentIndex == eofIndex) {
return false;
}
if (!inCData && PatternDetect (CDataPattern)) {
inCData = true;
ReadLength (CDataPattern.Length);
return EnsureBuffer ();
}
if (inCData && PatternDetect (CDataClosingPattern)) {
inCData = false;
ReadLength (CDataClosingPattern.Length);
return EnsureBuffer ();
}
return true;
}
bool PatternDetect (char[] pattern)
{
return backingArray[currentIndex] == pattern[0] && Enumerable.Range (1, pattern.Length - 1).All (i => backingArray[(currentIndex + i) % backingArray.Length] == pattern[i]);
}
}
}

View File

@@ -49,7 +49,7 @@ namespace Monodoc.Providers
ObjectEntryToParams (inner, out caption, out element);
// Don't add if the backing file doesn't exist
if (!File.Exists (element)) {
Console.Error.WriteLine ("File `{0}' referenced in TOC but it doesn't exist.", element);
Console.Error.WriteLine ("Warning: File `{0}' referenced in TOC but it doesn't exist. It will be ignored.", element);
continue;
}
using (var file = File.OpenRead (element))

View File

@@ -1,86 +0,0 @@
using System;
using System.IO;
using System.Linq;
using System.Xml;
using System.Collections.Generic;
using NUnit.Framework;
using Monodoc;
using Monodoc.Generators;
using Monodoc.Generators.Html;
namespace MonoTests.Monodoc.Generators
{
[TestFixture]
public class AvoidCDataTextReaderTest
{
void AssertSameInputOutput (string expected, string input)
{
var processed = new AvoidCDataTextReader (new StringReader (input)).ReadToEnd ();
Assert.AreEqual (expected, processed);
}
[Test]
public void NoCDataXmlTest ()
{
var input = @"<elements><summary>Addressbook APIs.</summary><remarks /><class name=""ABAddressBook"" fullname=""MonoTouch.AddressBook.ABAddressBook"" assembly=""monotouch""><summary>
Provides access to the system Address Book.
</summary></class></elements>";
AssertSameInputOutput (input, input);
}
[Test]
public void WithCDataXmlTest ()
{
var input = @"<elements><summary>Addressbook APIs.</summary><remarks /><class name=""ABAddressBook"" fullname=""MonoTouch.AddressBook.ABAddressBook"" assembly=""monotouch""><summary><![CDATA[
Provides access to the system Address Book.]]>
</summary></class></elements>";
AssertSameInputOutput (input.Replace ("<![CDATA[", string.Empty).Replace ("]]>", string.Empty), input);
}
[Test]
public void PartialCDataXmlTest ()
{
var input = @"<elements><summary>Addressbook APIs.</summary><remarks /><class name=""ABAddressBook"" fullname=""MonoTouch.AddressBook.ABAddressBook"" assembly=""monotouch""><summary><![CDA[
Provides access to the system Address Book.]]>
</summary></class></elements>";
AssertSameInputOutput (input, input);
}
[Test]
public void FinishWithPartialCDataXmlTest ()
{
var input = @"<elements><summary>Addressbook APIs.</summary><remarks /><class name=""ABAddressBook"" fullname=""MonoTouch.AddressBook.ABAddressBook"" assembly=""monotouch""><summary>
Provides access to the system Address Book.
</summary></class></elements><![CDA[";
AssertSameInputOutput (input, input);
}
[Test]
public void FinishWithCDataXmlTest ()
{
var input = @"<elements><summary>Addressbook APIs.</summary><remarks /><class name=""ABAddressBook"" fullname=""MonoTouch.AddressBook.ABAddressBook"" assembly=""monotouch""><summary>
Provides access to the system Address Book.
</summary></class></elements><![CDATA[";
AssertSameInputOutput (input.Replace ("<![CDATA[", string.Empty), input);
}
[Test]
public void EmptyInputTest ()
{
AssertSameInputOutput (string.Empty, string.Empty);
}
[Test]
public void LimitedInputTest ()
{
AssertSameInputOutput ("foo", "foo");
}
}
}

View File

@@ -6,4 +6,3 @@ Monodoc/SettingsTest.cs
Monodoc.Generators/RawGeneratorTests.cs
Monodoc/NodeTest.cs
Monodoc/RootTreeTest.cs
Monodoc.Generators/AvoidCDataTextReaderTests.cs