Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/api-doc-tools.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Martinez <joelmartinez@gmail.com>2017-02-02 23:58:12 +0300
committerJoel Martinez <joelmartinez@gmail.com>2017-02-03 23:27:54 +0300
commitad2c3d943ceb2c962aef7e42872ff689a6e72791 (patch)
treee934ad99e5c343531ca270242366fa73b4dd610c
parent42950d5b1af0b7107118a0ef8f4e74218cc1dfba (diff)
New top level solution, makefile targets, and submodule dependencies.
You can `make prepare all check` to compile and run unit tests. Additionally, you can open `apidoctools.sln` in Visual Studio to develop and debug. _Please Note:_ You will have to `make prepare all CONFIGURATION=Debug` for VS to work, as this compiles external dependencies, and copies them to the `bin/Debug` folder, where VS will be expecting them.
-rw-r--r--.gitignore7
-rw-r--r--.gitmodules9
-rw-r--r--Makefile38
-rw-r--r--apidoctools.sln32
m---------external/Lucene.Net.Light0
m---------external/Mono.Cecil0
m---------external/SharpZipLib0
-rw-r--r--mdoc/.gitignore6
-rw-r--r--mdoc/Consts.cs9
-rw-r--r--mdoc/Makefile134
-rw-r--r--mdoc/Mono.Documentation/monodocer.cs2
-rw-r--r--mdoc/Options.cs1504
-rw-r--r--mdoc/mdoc.csproj30
-rw-r--r--mdoc/mdoc.sln20
-rw-r--r--monodoc/Makefile150
-rw-r--r--monodoc/Monodoc.Ecma/prebuilt/EcmaUrlParser.cs1007
-rw-r--r--monodoc/Monodoc/Node.cs2
-rw-r--r--monodoc/Properties/AssemblyInfo.cs6
-rw-r--r--monodoc/Resources/monodoc.xml7
-rw-r--r--monodoc/Test/Monodoc.Generators/RawGeneratorTests.cs16
-rw-r--r--monodoc/Test/Monodoc.Test.csproj56
-rw-r--r--monodoc/Test/Monodoc/HelpSourceTests.cs21
-rw-r--r--monodoc/Test/Monodoc/NodeTest.cs13
-rw-r--r--monodoc/Test/Monodoc/RootTreeTest.cs13
-rw-r--r--monodoc/Test/Monodoc/TreeTest.cs13
-rw-r--r--monodoc/Test/monodoc_test/sources/netdocs.source5
-rw-r--r--monodoc/Test/monodoc_test/sources/netdocs.treebin0 -> 3041375 bytes
-rw-r--r--monodoc/Test/monodoc_test/sources/netdocs.zipbin0 -> 16733077 bytes
-rw-r--r--monodoc/Test/packages.config4
-rw-r--r--monodoc/monodoc.csproj711
-rw-r--r--monodoc/monodoc.dll.config (renamed from monodoc/monodoc.dll.config.in)3
31 files changed, 3542 insertions, 276 deletions
diff --git a/.gitignore b/.gitignore
index a1077aa9..a17c4e70 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,10 @@
/Test/DocTest.*
/.v2.txt
/.v0.txt
+packages
+NUnit.*
+TestResult.xml
+*.userprefs
+*.user
+bin
+obj
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 00000000..80fce332
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,9 @@
+[submodule "external/SharpZipLib"]
+ path = external/SharpZipLib
+ url = https://github.com/icsharpcode/SharpZipLib.git
+[submodule "external/Lucene.Net.Light"]
+ path = external/Lucene.Net.Light
+ url = https://github.com/mono/Lucene.Net.Light.git
+[submodule "external/Mono.Cecil"]
+ path = external/Mono.Cecil
+ url = https://github.com/mono/cecil.git
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..2188a3e3
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,38 @@
+MSBUILD = xbuild
+CONFIGURATION = Release
+BIN = bin/$(CONFIGURATION)
+MDOC = $(BIN)/mdoc.exe
+
+all: build
+
+build: $(MDOC)
+
+$(MDOC): $(BIN)/ICSharpCode.SharpZipLib.dll $(BIN)/Mono.Cecil.dll
+ $(MSBUILD) apidoctools.sln /p:Configuration=$(CONFIGURATION)
+
+prepare:
+ -mkdir -p bin/$(CONFIGURATION)
+ git submodule update --init --recursive
+ nuget install NUnit.Console -version 3.6.0 -NoCache -o packages
+
+$(BIN)/ICSharpCode.SharpZipLib.dll:
+ $(MSBUILD) external/SharpZipLib/ICSharpCode.SharpZipLib.NET45/ICSharpCode.SharpZipLib.csproj /p:Configuration=Release
+ cp external/SharpZipLib/bin/Release/ICSharpCode.SharpZipLib.* $(BIN)/
+
+$(BIN)/Mono.Cecil.dll:
+ $(MSBUILD) external/Mono.Cecil/Mono.Cecil.sln /p:Configuration=net_4_5_Release
+ cp external/Mono.Cecil/bin/net_4_0_Release/Mono.Cecil*.dll $(BIN)/
+
+clean:
+ $(MSBUILD) apidoctools.sln /t:clean
+ $(MSBUILD) external/SharpZipLib/ICSharpCode.SharpZipLib.NET45/ICSharpCode.SharpZipLib.csproj /t:clean
+ $(MSBUILD) external/Mono.Cecil/Mono.Cecil.sln /t:clean
+ rm -rf bin/$(CONFIGURATION)
+
+check: build check-monodoc check-mdoc
+
+check-mdoc:
+ cd mdoc; $(MAKE) check
+
+check-monodoc:
+ cd monodoc; $(MAKE) check
diff --git a/apidoctools.sln b/apidoctools.sln
new file mode 100644
index 00000000..1da52bb8
--- /dev/null
+++ b/apidoctools.sln
@@ -0,0 +1,32 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mdoc", "mdoc\mdoc.csproj", "{7DA7CD97-614F-4BCD-A2FA-B379590CEA48}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "monodoc", "monodoc\monodoc.csproj", "{6E644802-B579-4037-9809-9CF4C7172C9D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Monodoc.Test", "monodoc\Test\Monodoc.Test.csproj", "{1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x86 = Debug|x86
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Debug|x86.ActiveCfg = Debug|x86
+ {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Debug|x86.Build.0 = Debug|x86
+ {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Release|x86.ActiveCfg = Release|x86
+ {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Release|x86.Build.0 = Release|x86
+ {6E644802-B579-4037-9809-9CF4C7172C9D}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {6E644802-B579-4037-9809-9CF4C7172C9D}.Debug|x86.Build.0 = Debug|Any CPU
+ {6E644802-B579-4037-9809-9CF4C7172C9D}.Release|x86.ActiveCfg = Release|Any CPU
+ {6E644802-B579-4037-9809-9CF4C7172C9D}.Release|x86.Build.0 = Release|Any CPU
+ {1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Debug|x86.Build.0 = Debug|Any CPU
+ {1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Release|x86.ActiveCfg = Release|Any CPU
+ {1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Release|x86.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(MonoDevelopProperties) = preSolution
+ StartupItem = mdoc.csproj
+ EndGlobalSection
+EndGlobal
diff --git a/external/Lucene.Net.Light b/external/Lucene.Net.Light
new file mode 160000
+Subproject 85978b7eb94738f516824341213d5e94060f528
diff --git a/external/Mono.Cecil b/external/Mono.Cecil
new file mode 160000
+Subproject 272feac16778a07efc32096eea07fe6db82575f
diff --git a/external/SharpZipLib b/external/SharpZipLib
new file mode 160000
+Subproject 9ad7f5845222c99ff009a1daddedc051d25a06b
diff --git a/mdoc/.gitignore b/mdoc/.gitignore
new file mode 100644
index 00000000..26820987
--- /dev/null
+++ b/mdoc/.gitignore
@@ -0,0 +1,6 @@
+/Test/en.*/
+/Test/html.*/
+/Test/DocTest.*
+/Test/*.dll*
+/.v2.txt
+/.v0.txt \ No newline at end of file
diff --git a/mdoc/Consts.cs b/mdoc/Consts.cs
new file mode 100644
index 00000000..13674483
--- /dev/null
+++ b/mdoc/Consts.cs
@@ -0,0 +1,9 @@
+using System;
+namespace Mono.Documentation
+{
+ public static class Consts
+ {
+ // this is only a placeholder
+ public static string MonoVersion = "0.0.0.0";
+ }
+}
diff --git a/mdoc/Makefile b/mdoc/Makefile
index 17ed9971..b29454bc 100644
--- a/mdoc/Makefile
+++ b/mdoc/Makefile
@@ -1,6 +1,8 @@
-thisdir = tools/mdoc
-SUBDIRS =
-include ../../build/rules.make
+CONFIGURATION = Release
+PROGRAM = ../bin/$(CONFIGURATION)/mdoc.exe
+MONO = mono
+CSCOMPILE = mcs
+TEST_CSCFLAGS = -target:library
MDOC_COMMON_FLAGS = \
/resource:../../class/monodoc/Resources/mdoc-html-format.xsl,mdoc-html-format.xsl \
@@ -13,23 +15,6 @@ MDOC_COMMON_FLAGS = \
/resource:Resources/overview.xsl,overview.xsl \
/resource:Resources/stylesheet.xsl,stylesheet.xsl \
-LIB_REFS = monodoc System System.Xml System.Core Mono.Cecil ICSharpCode.SharpZipLib System.Xml.Linq System.Web
-
-LOCAL_MCS_FLAGS = $(MDOC_COMMON_FLAGS)
-PROGRAM = $(topdir)/class/lib/$(PROFILE)/mdoc.exe
-PROGRAM_DEPS = $(topdir)/class/lib/$(PROFILE)/monodoc.dll
-
-ifdef NET
-all : copy-with-deps
-
-copy-with-deps:
- -mkdir mdoc-net
- cp $(PROGRAM) mdoc-net
- cp $(topdir)/class/lib/$(PROFILE)/Commons.Xml.Relaxng.dll mdoc-net
- cp $(topdir)/class/lib/$(PROFILE)/ICSharpCode.SharpZipLib.dll mdoc-net
- cp $(topdir)/class/lib/$(PROFILE)/Mono.Cecil.dll mdoc-net
- cp $(topdir)/class/lib/$(PROFILE)/monodoc.dll mdoc-net
-endif
MONODOC_RESOURCES = \
../../class/monodoc/Resources/mdoc-html-utils.xsl \
@@ -60,16 +45,6 @@ EXTRA_DISTFILES = \
MULTI-CLASSIC = Test/DocTest-DropNS-classic.dll Test/DocTest-DropNS-classic-multitest.dll
MULTI-UNIFIED = Test/DocTest-DropNS-unified.dll Test/DocTest-DropNS-unified-multitest.dll
-$(PROGRAM) : $(MDOC_RESOURCES) $(MONODOC_RESOURCES) $(PROGRAM_DEPS)
-
-PROGRAM_COMPILE = $(CSCOMPILE) -platform:x86
-
-include ../../build/executable.make
-
-MONO = \
- MONO_PATH="$(topdir)/class/lib/$(PROFILE)$(PLATFORM_PATH_SEPARATOR)$$MONO_PATH" \
- $(RUNTIME) $(RUNTIME_FLAGS)
-
DIFF = diff -rup
DIFF_QUIET = diff --brief
ifeq ($(PLATFORM), win32)
@@ -77,86 +52,73 @@ DIFF = diff -rupZ
DIFF_QUIET = diff --brief -Z
endif
-dist-local: dist-default dist-tests
-
-dist-tests:
- find Test/en.expected* -name '*.xml' > .files
- find Test/html.expected* -name '*.html' >> .files
- tar cTf .files - | (cd $(distdir); tar xf -)
- rm .files ; \
-
-test-local: $(PROGRAM)
-
-clean-local: cleanup
-
cleanup:
-rm -Rf Test/en.actual Test/html.actual
- -rm -f monodocer1.exe*
Test/DocTest-addNonGeneric.dll:
- $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -target:library -out:$@ Test/DocTest-addNonGeneric.cs
+ $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -debug -optimize -target:library -out:$@ Test/DocTest-addNonGeneric.cs
Test/DocTest-addNonGeneric-v2.dll:
- $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -target:library -out:$@ Test/DocTest-addNonGeneric.cs /define:V2
+ $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -debug -optimize -target:library -out:$@ Test/DocTest-addNonGeneric.cs /define:V2
Test/DocTest-DropNS-classic-secondary.dll:
@echo $(value @)
- $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -target:library -out:$@ Test/DocTest-DropNS-classic-secondary.cs
+ $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -debug -optimize -target:library -out:$@ Test/DocTest-DropNS-classic-secondary.cs
Test/DocTest-DropNS-classic.dll:
@echo $(value @)
- $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -target:library -out:$@ Test/DocTest-DropNS-classic.cs
+ $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -debug -optimize -target:library -out:$@ Test/DocTest-DropNS-classic.cs
Test/DocTest-DropNS-unified.dll:
- $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -target:library -out:$@ Test/DocTest-DropNS-unified.cs
+ $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -debug -optimize -target:library -out:$@ Test/DocTest-DropNS-unified.cs
Test/DocTest-DropNS-unified-multitest.dll:
rm -f $@
- $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -target:library -out:$@ Test/DocTest-DropNS-unified.cs /define:MULTITEST
+ $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -debug -optimize -target:library -out:$@ Test/DocTest-DropNS-unified.cs /define:MULTITEST
Test/DocTest-DropNS-classic-multitest.dll:
rm -f $@
- $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -target:library -out:$@ Test/DocTest-DropNS-classic.cs /define:MULTITEST
+ $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -debug -optimize -target:library -out:$@ Test/DocTest-DropNS-classic.cs /define:MULTITEST
Test/DocTest-DropNS-unified-deletetest.dll:
rm -f Test/DocTest-DropNS-unified-deletetest.dll
- $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -target:library -out:$@ Test/DocTest-DropNS-unified.cs /define:DELETETEST
+ $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -debug -optimize -target:library -out:$@ Test/DocTest-DropNS-unified.cs /define:DELETETEST
Test/DocTest-DropNS-unified-deletetest-V2.dll:
rm -f Test/DocTest-DropNS-unified-deletetest.dll
- $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -target:library -out:Test/DocTest-DropNS-unified-deletetest.dll Test/DocTest-DropNS-unified.cs /define:DELETETEST,V2
+ $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -debug -optimize -target:library -out:Test/DocTest-DropNS-unified-deletetest.dll Test/DocTest-DropNS-unified.cs /define:DELETETEST,V2
Test/DocTest-DropNS-classic-deletetest.dll:
rm -f Test/DocTest-DropNS-classic-deletetest.dll
- $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -target:library -out:$@ Test/DocTest-DropNS-classic.cs /define:DELETETEST
+ $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -debug -optimize -target:library -out:$@ Test/DocTest-DropNS-classic.cs /define:DELETETEST
Test/DocTest-DropNS-classic-deletetest-V2.dll:
rm -f Test/DocTest-DropNS-classic-deletetest.dll
- $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -target:library -out:Test/DocTest-DropNS-classic-deletetest.dll Test/DocTest-DropNS-classic.cs /define:DELETETEST,V2
+ $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -debug -optimize -target:library -out:Test/DocTest-DropNS-classic-deletetest.dll Test/DocTest-DropNS-classic.cs /define:DELETETEST,V2
Test/DocTest.dll:
- $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -target:library -out:$@ Test/DocTest.cs -r:$(topdir)/class/lib/$(PROFILE)/System.Core.dll -r:$(topdir)/class/lib/$(PROFILE)/Microsoft.CSharp.dll
+ $(CSCOMPILE) $(TEST_CSCFLAGS) -debug -optimize -unsafe -target:library -out:$@ Test/DocTest.cs -r:System.Core.dll -r:Microsoft.CSharp.dll
Test/DocTest-InternalInterface.dll:
- $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -target:library -out:$@ Test/DocTest-InternalInterface.cs
+ $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -debug -optimize -target:library -out:$@ Test/DocTest-InternalInterface.cs
Test/DocTest.dll-v1:
-rm -f Test/DocTest.cs
cp Test/DocTest-v1.cs Test/DocTest.cs
-rm -f Test/DocTest.dll
- $(MAKE) TEST_CSCFLAGS=$(TEST_CSCFLAGS) Test/DocTest.dll
+ $(MAKE) Test/DocTest.dll
Test/DocTest.dll-v2:
-rm -f Test/DocTest.cs
cp Test/DocTest-v1.cs Test/DocTest.cs
cd Test && patch -p0 < DocTest-v2.patch
-rm -f Test/DocTest.dll
- $(MAKE) TEST_CSCFLAGS=$(TEST_CSCFLAGS) Test/DocTest.dll
+ $(MAKE) Test/DocTest.dll
Test/DocTest-enumerations.dll:
- $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -target:library -out:$@ Test/DocTest-enumerations.cs
+ $(CSCOMPILE) $(TEST_CSCFLAGS) -unsafe -debug -optimize -target:library -out:$@ Test/DocTest-enumerations.cs
-check-monodocer-addNonGeneric: $(PROGRAM)
+check-monodocer-addNonGeneric:
-rm -Rf Test/en.actual
# first, make a docset with the generic method
$(MAKE) Test/DocTest-addNonGeneric.dll
@@ -169,7 +131,7 @@ check-monodocer-addNonGeneric: $(PROGRAM)
$(MONO) $(PROGRAM) update --exceptions=all -o Test/en.actual Test/DocTest-addNonGeneric-v2.dll
$(DIFF) Test/en.expected-addNonGeneric Test/en.actual
-check-monodocer-dropns-classic: $(PROGRAM)
+check-monodocer-dropns-classic:
# tests the simplest --dropns case, a single class where the root namespace was dropped.
-rm -Rf Test/en.actual
$(MAKE) Test/DocTest-DropNS-classic.dll
@@ -177,7 +139,7 @@ check-monodocer-dropns-classic: $(PROGRAM)
$(MAKE) update-monodocer-dropns-unified
$(DIFF) Test/en.expected-dropns-classic-v1 Test/en.actual
-check-monodocer-dropns-multi: $(PROGRAM)
+check-monodocer-dropns-multi:
-rm -Rf Test/en.actual
$(MAKE) Test/DocTest-DropNS-classic.dll
$(MAKE) Test/DocTest-DropNS-unified.dll
@@ -195,7 +157,7 @@ check-monodocer-dropns-multi: $(PROGRAM)
$(DIFF) Test/en.expected-dropns-multi Test/en.actual
-check-monodocer-dropns-multi-withexisting: $(PROGRAM)
+check-monodocer-dropns-multi-withexisting:
-rm -Rf Test/en.actual
$(MAKE) Test/DocTest-DropNS-classic.dll
$(MAKE) Test/DocTest-DropNS-unified.dll
@@ -212,7 +174,7 @@ check-monodocer-dropns-multi-withexisting: $(PROGRAM)
$(DIFF) Test/en.expected-dropns-multi-withexisting Test/en.actual
-check-monodocer-dropns-delete: $(PROGRAM)
+check-monodocer-dropns-delete:
-rm -Rf Test/en.actual
rm -Rf Test/DocTest-DropNS-classic-deletetest.dll
rm -Rf Test/DocTest-DropNS-unified-deletetest.dll
@@ -226,7 +188,7 @@ check-monodocer-dropns-delete: $(PROGRAM)
$(MONO) $(PROGRAM) update --delete --exceptions=all -o Test/en.actual Test/DocTest-DropNS-unified-deletetest.dll --api-style=unified --dropns Test/DocTest-DropNS-unified-deletetest.dll=MyFramework
$(DIFF) Test/en.expected-dropns-delete Test/en.actual
-check-monodocer-dropns-classic-withsecondary: $(PROGRAM)
+check-monodocer-dropns-classic-withsecondary:
# tests case where a secondary assembly is included with a --dropns parameter
-rm -Rf Test/en.actual
$(MAKE) Test/DocTest-DropNS-classic.dll
@@ -235,37 +197,37 @@ check-monodocer-dropns-classic-withsecondary: $(PROGRAM)
$(MAKE) update-monodocer-dropns-unified-withsecondary
$(DIFF) Test/en.expected-dropns-classic-withsecondary Test/en.actual
-update-monodocer-dropns-unified: $(PROGRAM)
+update-monodocer-dropns-unified:
$(MAKE) Test/DocTest-DropNS-unified.dll
$(MONO) $(PROGRAM) update --debug --exceptions=all -o Test/en.actual Test/DocTest-DropNS-unified.dll --api-style=unified --dropns Test/DocTest-DropNS-unified.dll=MyFramework
-update-monodocer-dropns-unified-withsecondary: $(PROGRAM)
+update-monodocer-dropns-unified-withsecondary:
$(MAKE) Test/DocTest-DropNS-unified.dll
$(MONO) $(PROGRAM) update --exceptions=all -o Test/en.actual Test/DocTest-DropNS-unified.dll Test/DocTest-DropNS-classic-secondary.dll --api-style=unified --dropns Test/DocTest-DropNS-unified.dll=MyFramework
-update-monodocer-dropns-classic-secondary: $(PROGRAM)
+update-monodocer-dropns-classic-secondary:
$(MAKE) Test/DocTest-DropNS-classic-secondary.dll
$(MONO) $(PROGRAM) update --exceptions=all -o Test/en.actual Test/DocTest-DropNS-classic-secondary.dll --api-style=classic
-check-monodocer-internal-interface: $(PROGRAM)
+check-monodocer-internal-interface:
# Tests to make sure internal interfaces that are explicitly implemented are not documented
-rm -Rf Test/en.actual
$(MAKE) Test/DocTest-InternalInterface.dll
$(MONO) $(PROGRAM) update --exceptions=all -o Test/en.actual Test/DocTest-InternalInterface.dll
$(DIFF) Test/en.expected-internal-interface Test/en.actual
-check-monodocer-enumerations: $(PROGRAM)
+check-monodocer-enumerations:
-rm -Rf Test/en.actual
$(MAKE) Test/DocTest-enumerations.dll
$(MONO) $(PROGRAM) update --exceptions=all -o Test/en.actual Test/DocTest-enumerations.dll
$(DIFF) Test/en.expected-enumerations Test/en.actual
-check-monodocer-update: $(PROGRAM)
+check-monodocer-update:
find Test/en.expected -name \*.xml -exec rm "{}" \;
$(MAKE) Test/DocTest.dll-v1
$(MONO) $(PROGRAM) update --exceptions=all -o Test/en.expected Test/DocTest.dll
-check-monodocer: $(PROGRAM)
+check-monodocer:
-rm -Rf Test/en.actual
$(MAKE) Test/DocTest.dll-v1
$(MONO) $(PROGRAM) update --debug --exceptions=all -o Test/en.actual Test/DocTest.dll
@@ -273,7 +235,7 @@ check-monodocer: $(PROGRAM)
$(MONO) $(PROGRAM) update --debug --exceptions=all -o Test/en.actual Test/DocTest.dll
$(DIFF) Test/en.expected Test/en.actual
-check-monodocer-since-update: $(PROGRAM)
+check-monodocer-since-update:
find Test/en.expected.since -name \*.xml -exec rm "{}" \;
$(MAKE) Test/DocTest.dll-v1
$(MONO) $(PROGRAM) update --exceptions=all -o Test/en.expected.since Test/DocTest.dll
@@ -281,7 +243,7 @@ check-monodocer-since-update: $(PROGRAM)
$(MONO) $(PROGRAM) update --exceptions=all --since="Version 2.0" \
-o Test/en.expected.since Test/DocTest.dll
-check-monodocer-since: $(PROGRAM)
+check-monodocer-since:
rm -Rf Test/en.actual
$(MAKE) Test/DocTest.dll-v1
$(MONO) $(PROGRAM) --debug update --exceptions=all -o Test/en.actual Test/DocTest.dll
@@ -290,7 +252,7 @@ check-monodocer-since: $(PROGRAM)
-o Test/en.actual Test/DocTest.dll
$(DIFF) Test/en.expected.since Test/en.actual
-check-monodocer-delete-update: $(PROGRAM)
+check-monodocer-delete-update:
find Test/en.expected.delete -type f -exec rm "{}" \;
$(MAKE) Test/DocTest.dll-v1
$(MONO) $(PROGRAM) update --exceptions=all -o Test/en.expected.delete Test/DocTest.dll
@@ -300,7 +262,7 @@ check-monodocer-delete-update: $(PROGRAM)
$(MONO) $(PROGRAM) update -fno-assembly-versions --delete --exceptions=all \
-o Test/en.expected.delete Test/DocTest.dll
-check-monodocer-delete: $(PROGRAM)
+check-monodocer-delete:
rm -Rf Test/en.actual
$(MAKE) Test/DocTest.dll-v1
$(MONO) $(PROGRAM) --debug update --exceptions=all -o Test/en.actual Test/DocTest.dll
@@ -310,20 +272,20 @@ check-monodocer-delete: $(PROGRAM)
$(MONO) $(PROGRAM) --debug update -fno-assembly-versions --delete --exceptions=all -o Test/en.actual Test/DocTest.dll
$(DIFF) Test/en.expected.delete Test/en.actual
-check-monodocer-importslashdoc-update: $(PROGRAM)
+check-monodocer-importslashdoc-update:
find Test/en.expected.importslashdoc -name \*.xml -exec rm "{}" \;
$(MAKE) Test/DocTest.dll-v1 TEST_CSCFLAGS=-doc:Test/DocTest.xml
$(MONO) $(PROGRAM) --debug update --exceptions=all -i Test/DocTest.xml \
-o Test/en.expected.importslashdoc Test/DocTest.dll
-check-monodocer-importslashdoc: $(PROGRAM)
+check-monodocer-importslashdoc:
rm -Rf Test/en.actual
$(MAKE) Test/DocTest.dll-v1 TEST_CSCFLAGS=-doc:Test/DocTest.xml
$(MONO) $(PROGRAM) --debug update --exceptions=all -i Test/DocTest.xml \
-o Test/en.actual Test/DocTest.dll
$(DIFF) Test/en.expected.importslashdoc Test/en.actual
-check-monodocer-importecmadoc-update: $(PROGRAM)
+check-monodocer-importecmadoc-update:
find Test/en.expected.importecmadoc -name \*.xml -exec rm "{}" \;
$(MAKE) Test/DocTest.dll-v1
$(MONO) $(PROGRAM) --debug update --exceptions=all -i Test/TestEcmaDocs.xml \
@@ -331,7 +293,7 @@ check-monodocer-importecmadoc-update: $(PROGRAM)
--type=System.Environment --type=System.Array \
-o Test/en.expected.importecmadoc Test/DocTest.dll
-check-monodocer-importecmadoc: $(PROGRAM)
+check-monodocer-importecmadoc:
rm -Rf Test/en.actual
$(MAKE) Test/DocTest.dll-v1
$(MONO) $(PROGRAM) --debug update --exceptions=all -i Test/TestEcmaDocs.xml \
@@ -340,18 +302,18 @@ check-monodocer-importecmadoc: $(PROGRAM)
-o Test/en.actual Test/DocTest.dll
$(DIFF) Test/en.expected.importecmadoc Test/en.actual
-check-mdoc-export-html-update: $(PROGRAM)
+check-mdoc-export-html-update:
find Test/html.expected -name \*.html -exec rm "{}" \;
$(MONO) $(PROGRAM) export-html -o Test/html.expected \
Test/en.expected.importslashdoc
-check-mdoc-export-html: check-monodocer $(PROGRAM)
+check-mdoc-export-html: check-monodocer
rm -Rf Test/html.actual
$(MONO) $(PROGRAM) export-html -o Test/html.actual \
Test/en.expected.importslashdoc
$(DIFF) Test/html.expected Test/html.actual
-check-mdoc-export-html-with-version: $(PROGRAM)
+check-mdoc-export-html-with-version:
rm -Rf Test/html.actual.v0 Test/html.actual.since-with-v0 .v0.txt .v2.txt
$(MONO) $(PROGRAM) export-html -o Test/html.actual.v0 \
Test/en.expected
@@ -361,7 +323,7 @@ check-mdoc-export-html-with-version: $(PROGRAM)
(cd Test/html.actual.since-with-v0 && find . -type f) | sort > .v2.txt
$(DIFF) .v0.txt .v2.txt # assert no types added
-check-md-html-dir: $(PROGRAM)
+check-md-html-dir:
rm -Rf Test/html.actual
$(MONO) $(PROGRAM) export-html -dest:Test/html.actual $(DIR)
$(DIFF) Test/html.expected Test/html.actual
@@ -376,7 +338,7 @@ check-mdoc-export-msxdoc:
my_abs_top_srcdir = $(shell cd . && pwd)
-check-mdoc-validate-update: $(PROGRAM)
+check-mdoc-validate-update:
$(MONO) $(PROGRAM) validate -f ecma Test/en.expected 2>&1 | \
sed 's#file://$(my_abs_top_srcdir)/##g' > \
Test/validate.check.monodocer
@@ -387,7 +349,7 @@ check-mdoc-validate-update: $(PROGRAM)
sed 's#file://$(my_abs_top_srcdir)/##g' > \
Test/validate.check.monodocer.since
-check-mdoc-validate: $(PROGRAM)
+check-mdoc-validate:
$(MONO) $(PROGRAM) validate -f ecma Test/en.expected 2>&1 | \
sed 's#file://$(my_abs_top_srcdir)/##g' | \
$(DIFF_QUIET) - Test/validate.check.monodocer
diff --git a/mdoc/Mono.Documentation/monodocer.cs b/mdoc/Mono.Documentation/monodocer.cs
index 8b5b5ab0..24d4c6b9 100644
--- a/mdoc/Mono.Documentation/monodocer.cs
+++ b/mdoc/Mono.Documentation/monodocer.cs
@@ -6047,4 +6047,4 @@ class ApplePlatformEnumFormatter : AttributeValueFormatter {
subminor = (int)((encodedBits & 0x000000FF) >> 0);
}
}
-}
+} \ No newline at end of file
diff --git a/mdoc/Options.cs b/mdoc/Options.cs
new file mode 100644
index 00000000..cc5c1e26
--- /dev/null
+++ b/mdoc/Options.cs
@@ -0,0 +1,1504 @@
+//
+// Options.cs
+//
+// Authors:
+// Jonathan Pryor <jpryor@novell.com>
+// Federico Di Gregorio <fog@initd.org>
+// Rolf Bjarne Kvinge <rolf@xamarin.com>
+//
+// Copyright (C) 2008 Novell (http://www.novell.com)
+// Copyright (C) 2009 Federico Di Gregorio.
+// Copyright (C) 2012 Xamarin Inc (http://www.xamarin.com)
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+// Compile With:
+// gmcs -debug+ -r:System.Core Options.cs -o:NDesk.Options.dll
+// gmcs -debug+ -d:LINQ -r:System.Core Options.cs -o:NDesk.Options.dll
+//
+// The LINQ version just changes the implementation of
+// OptionSet.Parse(IEnumerable<string>), and confers no semantic changes.
+
+//
+// A Getopt::Long-inspired option parsing library for C#.
+//
+// NDesk.Options.OptionSet is built upon a key/value table, where the
+// key is a option format string and the value is a delegate that is
+// invoked when the format string is matched.
+//
+// Option format strings:
+// Regex-like BNF Grammar:
+// name: .+
+// type: [=:]
+// sep: ( [^{}]+ | '{' .+ '}' )?
+// aliases: ( name type sep ) ( '|' name type sep )*
+//
+// Each '|'-delimited name is an alias for the associated action. If the
+// format string ends in a '=', it has a required value. If the format
+// string ends in a ':', it has an optional value. If neither '=' or ':'
+// is present, no value is supported. `=' or `:' need only be defined on one
+// alias, but if they are provided on more than one they must be consistent.
+//
+// Each alias portion may also end with a "key/value separator", which is used
+// to split option values if the option accepts > 1 value. If not specified,
+// it defaults to '=' and ':'. If specified, it can be any character except
+// '{' and '}' OR the *string* between '{' and '}'. If no separator should be
+// used (i.e. the separate values should be distinct arguments), then "{}"
+// should be used as the separator.
+//
+// Options are extracted either from the current option by looking for
+// the option name followed by an '=' or ':', or is taken from the
+// following option IFF:
+// - The current option does not contain a '=' or a ':'
+// - The current option requires a value (i.e. not a Option type of ':')
+//
+// The `name' used in the option format string does NOT include any leading
+// option indicator, such as '-', '--', or '/'. All three of these are
+// permitted/required on any named option.
+//
+// Option bundling is permitted so long as:
+// - '-' is used to start the option group
+// - all of the bundled options are a single character
+// - at most one of the bundled options accepts a value, and the value
+// provided starts from the next character to the end of the string.
+//
+// This allows specifying '-a -b -c' as '-abc', and specifying '-D name=value'
+// as '-Dname=value'.
+//
+// Option processing is disabled by specifying "--". All options after "--"
+// are returned by OptionSet.Parse() unchanged and unprocessed.
+//
+// Unprocessed options are returned from OptionSet.Parse().
+//
+// Examples:
+// int verbose = 0;
+// OptionSet p = new OptionSet ()
+// .Add ("v", v => ++verbose)
+// .Add ("name=|value=", v => Console.WriteLine (v));
+// p.Parse (new string[]{"-v", "--v", "/v", "-name=A", "/name", "B", "extra"});
+//
+// The above would parse the argument string array, and would invoke the
+// lambda expression three times, setting `verbose' to 3 when complete.
+// It would also print out "A" and "B" to standard output.
+// The returned array would contain the string "extra".
+//
+// C# 3.0 collection initializers are supported and encouraged:
+// var p = new OptionSet () {
+// { "h|?|help", v => ShowHelp () },
+// };
+//
+// System.ComponentModel.TypeConverter is also supported, allowing the use of
+// custom data types in the callback type; TypeConverter.ConvertFromString()
+// is used to convert the value option to an instance of the specified
+// type:
+//
+// var p = new OptionSet () {
+// { "foo=", (Foo f) => Console.WriteLine (f.ToString ()) },
+// };
+//
+// Random other tidbits:
+// - Boolean options (those w/o '=' or ':' in the option format string)
+// are explicitly enabled if they are followed with '+', and explicitly
+// disabled if they are followed with '-':
+// string a = null;
+// var p = new OptionSet () {
+// { "a", s => a = s },
+// };
+// p.Parse (new string[]{"-a"}); // sets v != null
+// p.Parse (new string[]{"-a+"}); // sets v != null
+// p.Parse (new string[]{"-a-"}); // sets v == null
+//
+
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.ComponentModel;
+using System.Globalization;
+using System.IO;
+using System.Runtime.Serialization;
+#if PCL
+using System.Reflection;
+#else
+using System.Security.Permissions;
+#endif
+using System.Text;
+using System.Text.RegularExpressions;
+
+#if LINQ
+using System.Linq;
+#endif
+
+#if TEST
+using NDesk.Options;
+#endif
+
+#if PCL
+using MessageLocalizerConverter = System.Func<string, string>;
+#else
+using MessageLocalizerConverter = System.Converter<string, string>;
+#endif
+
+#if NDESK_OPTIONS
+namespace NDesk.Options
+#else
+namespace Mono.Options
+#endif
+{
+ static class StringCoda
+ {
+
+ public static IEnumerable<string> WrappedLines(string self, params int[] widths)
+ {
+ IEnumerable<int> w = widths;
+ return WrappedLines(self, w);
+ }
+
+ public static IEnumerable<string> WrappedLines(string self, IEnumerable<int> widths)
+ {
+ if (widths == null)
+ throw new ArgumentNullException("widths");
+ return CreateWrappedLinesIterator(self, widths);
+ }
+
+ private static IEnumerable<string> CreateWrappedLinesIterator(string self, IEnumerable<int> widths)
+ {
+ if (string.IsNullOrEmpty(self))
+ {
+ yield return string.Empty;
+ yield break;
+ }
+ using (IEnumerator<int> ewidths = widths.GetEnumerator())
+ {
+ bool? hw = null;
+ int width = GetNextWidth(ewidths, int.MaxValue, ref hw);
+ int start = 0, end;
+ do
+ {
+ end = GetLineEnd(start, width, self);
+ char c = self[end - 1];
+ if (char.IsWhiteSpace(c))
+ --end;
+ bool needContinuation = end != self.Length && !IsEolChar(c);
+ string continuation = "";
+ if (needContinuation)
+ {
+ --end;
+ continuation = "-";
+ }
+ string line = self.Substring(start, end - start) + continuation;
+ yield return line;
+ start = end;
+ if (char.IsWhiteSpace(c))
+ ++start;
+ width = GetNextWidth(ewidths, width, ref hw);
+ } while (start < self.Length);
+ }
+ }
+
+ private static int GetNextWidth(IEnumerator<int> ewidths, int curWidth, ref bool? eValid)
+ {
+ if (!eValid.HasValue || (eValid.HasValue && eValid.Value))
+ {
+ curWidth = (eValid = ewidths.MoveNext()).Value ? ewidths.Current : curWidth;
+ // '.' is any character, - is for a continuation
+ const string minWidth = ".-";
+ if (curWidth < minWidth.Length)
+ throw new ArgumentOutOfRangeException("widths",
+ string.Format("Element must be >= {0}, was {1}.", minWidth.Length, curWidth));
+ return curWidth;
+ }
+ // no more elements, use the last element.
+ return curWidth;
+ }
+
+ private static bool IsEolChar(char c)
+ {
+ return !char.IsLetterOrDigit(c);
+ }
+
+ private static int GetLineEnd(int start, int length, string description)
+ {
+ int end = System.Math.Min(start + length, description.Length);
+ int sep = -1;
+ for (int i = start; i < end; ++i)
+ {
+ if (description[i] == '\n')
+ return i + 1;
+ if (IsEolChar(description[i]))
+ sep = i + 1;
+ }
+ if (sep == -1 || end == description.Length)
+ return end;
+ return sep;
+ }
+ }
+
+ public class OptionValueCollection : IList, IList<string>
+ {
+
+ List<string> values = new List<string>();
+ OptionContext c;
+
+ internal OptionValueCollection(OptionContext c)
+ {
+ this.c = c;
+ }
+
+ #region ICollection
+ void ICollection.CopyTo(Array array, int index) { (values as ICollection).CopyTo(array, index); }
+ bool ICollection.IsSynchronized { get { return (values as ICollection).IsSynchronized; } }
+ object ICollection.SyncRoot { get { return (values as ICollection).SyncRoot; } }
+ #endregion
+
+ #region ICollection<T>
+ public void Add(string item) { values.Add(item); }
+ public void Clear() { values.Clear(); }
+ public bool Contains(string item) { return values.Contains(item); }
+ public void CopyTo(string[] array, int arrayIndex) { values.CopyTo(array, arrayIndex); }
+ public bool Remove(string item) { return values.Remove(item); }
+ public int Count { get { return values.Count; } }
+ public bool IsReadOnly { get { return false; } }
+ #endregion
+
+ #region IEnumerable
+ IEnumerator IEnumerable.GetEnumerator() { return values.GetEnumerator(); }
+ #endregion
+
+ #region IEnumerable<T>
+ public IEnumerator<string> GetEnumerator() { return values.GetEnumerator(); }
+ #endregion
+
+ #region IList
+ int IList.Add(object value) { return (values as IList).Add(value); }
+ bool IList.Contains(object value) { return (values as IList).Contains(value); }
+ int IList.IndexOf(object value) { return (values as IList).IndexOf(value); }
+ void IList.Insert(int index, object value) { (values as IList).Insert(index, value); }
+ void IList.Remove(object value) { (values as IList).Remove(value); }
+ void IList.RemoveAt(int index) { (values as IList).RemoveAt(index); }
+ bool IList.IsFixedSize { get { return false; } }
+ object IList.this[int index] { get { return this[index]; } set { (values as IList)[index] = value; } }
+ #endregion
+
+ #region IList<T>
+ public int IndexOf(string item) { return values.IndexOf(item); }
+ public void Insert(int index, string item) { values.Insert(index, item); }
+ public void RemoveAt(int index) { values.RemoveAt(index); }
+
+ private void AssertValid(int index)
+ {
+ if (c.Option == null)
+ throw new InvalidOperationException("OptionContext.Option is null.");
+ if (index >= c.Option.MaxValueCount)
+ throw new ArgumentOutOfRangeException("index");
+ if (c.Option.OptionValueType == OptionValueType.Required &&
+ index >= values.Count)
+ throw new OptionException(string.Format(
+ c.OptionSet.MessageLocalizer("Missing required value for option '{0}'."), c.OptionName),
+ c.OptionName);
+ }
+
+ public string this[int index]
+ {
+ get
+ {
+ AssertValid(index);
+ return index >= values.Count ? null : values[index];
+ }
+ set
+ {
+ values[index] = value;
+ }
+ }
+ #endregion
+
+ public List<string> ToList()
+ {
+ return new List<string>(values);
+ }
+
+ public string[] ToArray()
+ {
+ return values.ToArray();
+ }
+
+ public override string ToString()
+ {
+ return string.Join(", ", values.ToArray());
+ }
+ }
+
+ public class OptionContext
+ {
+ private Option option;
+ private string name;
+ private int index;
+ private OptionSet set;
+ private OptionValueCollection c;
+
+ public OptionContext(OptionSet set)
+ {
+ this.set = set;
+ this.c = new OptionValueCollection(this);
+ }
+
+ public Option Option
+ {
+ get { return option; }
+ set { option = value; }
+ }
+
+ public string OptionName
+ {
+ get { return name; }
+ set { name = value; }
+ }
+
+ public int OptionIndex
+ {
+ get { return index; }
+ set { index = value; }
+ }
+
+ public OptionSet OptionSet
+ {
+ get { return set; }
+ }
+
+ public OptionValueCollection OptionValues
+ {
+ get { return c; }
+ }
+ }
+
+ public enum OptionValueType
+ {
+ None,
+ Optional,
+ Required,
+ }
+
+ public abstract class Option
+ {
+ string prototype, description;
+ string[] names;
+ OptionValueType type;
+ int count;
+ string[] separators;
+ bool hidden;
+
+ protected Option(string prototype, string description)
+ : this(prototype, description, 1, false)
+ {
+ }
+
+ protected Option(string prototype, string description, int maxValueCount)
+ : this(prototype, description, maxValueCount, false)
+ {
+ }
+
+ protected Option(string prototype, string description, int maxValueCount, bool hidden)
+ {
+ if (prototype == null)
+ throw new ArgumentNullException("prototype");
+ if (prototype.Length == 0)
+ throw new ArgumentException("Cannot be the empty string.", "prototype");
+ if (maxValueCount < 0)
+ throw new ArgumentOutOfRangeException("maxValueCount");
+
+ this.prototype = prototype;
+ this.description = description;
+ this.count = maxValueCount;
+ this.names = (this is OptionSet.Category)
+ // append GetHashCode() so that "duplicate" categories have distinct
+ // names, e.g. adding multiple "" categories should be valid.
+ ? new[] { prototype + this.GetHashCode() }
+ : prototype.Split('|');
+
+ if (this is OptionSet.Category)
+ return;
+
+ this.type = ParsePrototype();
+ this.hidden = hidden;
+
+ if (this.count == 0 && type != OptionValueType.None)
+ throw new ArgumentException(
+ "Cannot provide maxValueCount of 0 for OptionValueType.Required or " +
+ "OptionValueType.Optional.",
+ "maxValueCount");
+ if (this.type == OptionValueType.None && maxValueCount > 1)
+ throw new ArgumentException(
+ string.Format("Cannot provide maxValueCount of {0} for OptionValueType.None.", maxValueCount),
+ "maxValueCount");
+ if (Array.IndexOf(names, "<>") >= 0 &&
+ ((names.Length == 1 && this.type != OptionValueType.None) ||
+ (names.Length > 1 && this.MaxValueCount > 1)))
+ throw new ArgumentException(
+ "The default option handler '<>' cannot require values.",
+ "prototype");
+ }
+
+ public string Prototype { get { return prototype; } }
+ public string Description { get { return description; } }
+ public OptionValueType OptionValueType { get { return type; } }
+ public int MaxValueCount { get { return count; } }
+ public bool Hidden { get { return hidden; } }
+
+ public string[] GetNames()
+ {
+ return (string[])names.Clone();
+ }
+
+ public string[] GetValueSeparators()
+ {
+ if (separators == null)
+ return new string[0];
+ return (string[])separators.Clone();
+ }
+
+ protected static T Parse<T>(string value, OptionContext c)
+ {
+ Type tt = typeof(T);
+#if PCL
+ TypeInfo ti = tt.GetTypeInfo ();
+#else
+ Type ti = tt;
+#endif
+ bool nullable =
+ ti.IsValueType &&
+ ti.IsGenericType &&
+ !ti.IsGenericTypeDefinition &&
+ ti.GetGenericTypeDefinition() == typeof(Nullable<>);
+#if PCL
+ Type targetType = nullable ? tt.GenericTypeArguments [0] : tt;
+#else
+ Type targetType = nullable ? tt.GetGenericArguments()[0] : tt;
+#endif
+ T t = default(T);
+ try
+ {
+ if (value != null)
+ {
+#if PCL
+ if (targetType.GetTypeInfo ().IsEnum)
+ t = (T) Enum.Parse (targetType, value, true);
+ else
+ t = (T) Convert.ChangeType (value, targetType);
+#else
+ TypeConverter conv = TypeDescriptor.GetConverter(targetType);
+ t = (T)conv.ConvertFromString(value);
+#endif
+ }
+ }
+ catch (Exception e)
+ {
+ throw new OptionException(
+ string.Format(
+ c.OptionSet.MessageLocalizer("Could not convert string `{0}' to type {1} for option `{2}'."),
+ value, targetType.Name, c.OptionName),
+ c.OptionName, e);
+ }
+ return t;
+ }
+
+ internal string[] Names { get { return names; } }
+ internal string[] ValueSeparators { get { return separators; } }
+
+ static readonly char[] NameTerminator = new char[] { '=', ':' };
+
+ private OptionValueType ParsePrototype()
+ {
+ char type = '\0';
+ List<string> seps = new List<string>();
+ for (int i = 0; i < names.Length; ++i)
+ {
+ string name = names[i];
+ if (name.Length == 0)
+ throw new ArgumentException("Empty option names are not supported.", "prototype");
+
+ int end = name.IndexOfAny(NameTerminator);
+ if (end == -1)
+ continue;
+ names[i] = name.Substring(0, end);
+ if (type == '\0' || type == name[end])
+ type = name[end];
+ else
+ throw new ArgumentException(
+ string.Format("Conflicting option types: '{0}' vs. '{1}'.", type, name[end]),
+ "prototype");
+ AddSeparators(name, end, seps);
+ }
+
+ if (type == '\0')
+ return OptionValueType.None;
+
+ if (count <= 1 && seps.Count != 0)
+ throw new ArgumentException(
+ string.Format("Cannot provide key/value separators for Options taking {0} value(s).", count),
+ "prototype");
+ if (count > 1)
+ {
+ if (seps.Count == 0)
+ this.separators = new string[] { ":", "=" };
+ else if (seps.Count == 1 && seps[0].Length == 0)
+ this.separators = null;
+ else
+ this.separators = seps.ToArray();
+ }
+
+ return type == '=' ? OptionValueType.Required : OptionValueType.Optional;
+ }
+
+ private static void AddSeparators(string name, int end, ICollection<string> seps)
+ {
+ int start = -1;
+ for (int i = end + 1; i < name.Length; ++i)
+ {
+ switch (name[i])
+ {
+ case '{':
+ if (start != -1)
+ throw new ArgumentException(
+ string.Format("Ill-formed name/value separator found in \"{0}\".", name),
+ "prototype");
+ start = i + 1;
+ break;
+ case '}':
+ if (start == -1)
+ throw new ArgumentException(
+ string.Format("Ill-formed name/value separator found in \"{0}\".", name),
+ "prototype");
+ seps.Add(name.Substring(start, i - start));
+ start = -1;
+ break;
+ default:
+ if (start == -1)
+ seps.Add(name[i].ToString());
+ break;
+ }
+ }
+ if (start != -1)
+ throw new ArgumentException(
+ string.Format("Ill-formed name/value separator found in \"{0}\".", name),
+ "prototype");
+ }
+
+ public void Invoke(OptionContext c)
+ {
+ OnParseComplete(c);
+ c.OptionName = null;
+ c.Option = null;
+ c.OptionValues.Clear();
+ }
+
+ protected abstract void OnParseComplete(OptionContext c);
+
+ public override string ToString()
+ {
+ return Prototype;
+ }
+ }
+
+ public abstract class ArgumentSource
+ {
+
+ protected ArgumentSource()
+ {
+ }
+
+ public abstract string[] GetNames();
+ public abstract string Description { get; }
+ public abstract bool GetArguments(string value, out IEnumerable<string> replacement);
+
+#if !PCL
+ public static IEnumerable<string> GetArgumentsFromFile(string file)
+ {
+ return GetArguments(File.OpenText(file), true);
+ }
+#endif
+
+ public static IEnumerable<string> GetArguments(TextReader reader)
+ {
+ return GetArguments(reader, false);
+ }
+
+ // Cribbed from mcs/driver.cs:LoadArgs(string)
+ static IEnumerable<string> GetArguments(TextReader reader, bool close)
+ {
+ try
+ {
+ StringBuilder arg = new StringBuilder();
+
+ string line;
+ while ((line = reader.ReadLine()) != null)
+ {
+ int t = line.Length;
+
+ for (int i = 0; i < t; i++)
+ {
+ char c = line[i];
+
+ if (c == '"' || c == '\'')
+ {
+ char end = c;
+
+ for (i++; i < t; i++)
+ {
+ c = line[i];
+
+ if (c == end)
+ break;
+ arg.Append(c);
+ }
+ }
+ else if (c == ' ')
+ {
+ if (arg.Length > 0)
+ {
+ yield return arg.ToString();
+ arg.Length = 0;
+ }
+ }
+ else
+ arg.Append(c);
+ }
+ if (arg.Length > 0)
+ {
+ yield return arg.ToString();
+ arg.Length = 0;
+ }
+ }
+ }
+ finally
+ {
+ if (close)
+ reader.Dispose();
+ }
+ }
+ }
+
+#if !PCL
+ public class ResponseFileSource : ArgumentSource
+ {
+
+ public override string[] GetNames()
+ {
+ return new string[] { "@file" };
+ }
+
+ public override string Description
+ {
+ get { return "Read response file for more options."; }
+ }
+
+ public override bool GetArguments(string value, out IEnumerable<string> replacement)
+ {
+ if (string.IsNullOrEmpty(value) || !value.StartsWith("@"))
+ {
+ replacement = null;
+ return false;
+ }
+ replacement = ArgumentSource.GetArgumentsFromFile(value.Substring(1));
+ return true;
+ }
+ }
+#endif
+
+#if !PCL
+ [Serializable]
+#endif
+ public class OptionException : Exception
+ {
+ private string option;
+
+ public OptionException()
+ {
+ }
+
+ public OptionException(string message, string optionName)
+ : base(message)
+ {
+ this.option = optionName;
+ }
+
+ public OptionException(string message, string optionName, Exception innerException)
+ : base(message, innerException)
+ {
+ this.option = optionName;
+ }
+
+#if !PCL
+ protected OptionException(SerializationInfo info, StreamingContext context)
+ : base(info, context)
+ {
+ this.option = info.GetString("OptionName");
+ }
+#endif
+
+ public string OptionName
+ {
+ get { return this.option; }
+ }
+
+#if !PCL
+#pragma warning disable 618 // SecurityPermissionAttribute is obsolete
+ [SecurityPermission(SecurityAction.LinkDemand, SerializationFormatter = true)]
+#pragma warning restore 618
+ public override void GetObjectData(SerializationInfo info, StreamingContext context)
+ {
+ base.GetObjectData(info, context);
+ info.AddValue("OptionName", option);
+ }
+#endif
+ }
+
+ public delegate void OptionAction<TKey, TValue>(TKey key, TValue value);
+
+ public class OptionSet : KeyedCollection<string, Option>
+ {
+ public OptionSet()
+ : this(delegate (string f) { return f; })
+ {
+ }
+
+ public OptionSet(MessageLocalizerConverter localizer)
+ {
+ this.localizer = localizer;
+ this.roSources = new ReadOnlyCollection<ArgumentSource>(sources);
+ }
+
+ MessageLocalizerConverter localizer;
+
+ public MessageLocalizerConverter MessageLocalizer
+ {
+ get { return localizer; }
+ }
+
+ List<ArgumentSource> sources = new List<ArgumentSource>();
+ ReadOnlyCollection<ArgumentSource> roSources;
+
+ public ReadOnlyCollection<ArgumentSource> ArgumentSources
+ {
+ get { return roSources; }
+ }
+
+
+ protected override string GetKeyForItem(Option item)
+ {
+ if (item == null)
+ throw new ArgumentNullException("option");
+ if (item.Names != null && item.Names.Length > 0)
+ return item.Names[0];
+ // This should never happen, as it's invalid for Option to be
+ // constructed w/o any names.
+ throw new InvalidOperationException("Option has no names!");
+ }
+
+ [Obsolete("Use KeyedCollection.this[string]")]
+ protected Option GetOptionForName(string option)
+ {
+ if (option == null)
+ throw new ArgumentNullException("option");
+ try
+ {
+ return base[option];
+ }
+ catch (KeyNotFoundException)
+ {
+ return null;
+ }
+ }
+
+ protected override void InsertItem(int index, Option item)
+ {
+ base.InsertItem(index, item);
+ AddImpl(item);
+ }
+
+ protected override void RemoveItem(int index)
+ {
+ Option p = Items[index];
+ base.RemoveItem(index);
+ // KeyedCollection.RemoveItem() handles the 0th item
+ for (int i = 1; i < p.Names.Length; ++i)
+ {
+ Dictionary.Remove(p.Names[i]);
+ }
+ }
+
+ protected override void SetItem(int index, Option item)
+ {
+ base.SetItem(index, item);
+ AddImpl(item);
+ }
+
+ private void AddImpl(Option option)
+ {
+ if (option == null)
+ throw new ArgumentNullException("option");
+ List<string> added = new List<string>(option.Names.Length);
+ try
+ {
+ // KeyedCollection.InsertItem/SetItem handle the 0th name.
+ for (int i = 1; i < option.Names.Length; ++i)
+ {
+ Dictionary.Add(option.Names[i], option);
+ added.Add(option.Names[i]);
+ }
+ }
+ catch (Exception)
+ {
+ foreach (string name in added)
+ Dictionary.Remove(name);
+ throw;
+ }
+ }
+
+ public OptionSet Add(string header)
+ {
+ if (header == null)
+ throw new ArgumentNullException("header");
+ Add(new Category(header));
+ return this;
+ }
+
+ internal sealed class Category : Option
+ {
+
+ // Prototype starts with '=' because this is an invalid prototype
+ // (see Option.ParsePrototype(), and thus it'll prevent Category
+ // instances from being accidentally used as normal options.
+ public Category(string description)
+ : base("=:Category:= " + description, description)
+ {
+ }
+
+ protected override void OnParseComplete(OptionContext c)
+ {
+ throw new NotSupportedException("Category.OnParseComplete should not be invoked.");
+ }
+ }
+
+
+ public new OptionSet Add(Option option)
+ {
+ base.Add(option);
+ return this;
+ }
+
+ sealed class ActionOption : Option
+ {
+ Action<OptionValueCollection> action;
+
+ public ActionOption(string prototype, string description, int count, Action<OptionValueCollection> action)
+ : this(prototype, description, count, action, false)
+ {
+ }
+
+ public ActionOption(string prototype, string description, int count, Action<OptionValueCollection> action, bool hidden)
+ : base(prototype, description, count, hidden)
+ {
+ if (action == null)
+ throw new ArgumentNullException("action");
+ this.action = action;
+ }
+
+ protected override void OnParseComplete(OptionContext c)
+ {
+ action(c.OptionValues);
+ }
+ }
+
+ public OptionSet Add(string prototype, Action<string> action)
+ {
+ return Add(prototype, null, action);
+ }
+
+ public OptionSet Add(string prototype, string description, Action<string> action)
+ {
+ return Add(prototype, description, action, false);
+ }
+
+ public OptionSet Add(string prototype, string description, Action<string> action, bool hidden)
+ {
+ if (action == null)
+ throw new ArgumentNullException("action");
+ Option p = new ActionOption(prototype, description, 1,
+ delegate (OptionValueCollection v) { action(v[0]); }, hidden);
+ base.Add(p);
+ return this;
+ }
+
+ public OptionSet Add(string prototype, OptionAction<string, string> action)
+ {
+ return Add(prototype, null, action);
+ }
+
+ public OptionSet Add(string prototype, string description, OptionAction<string, string> action)
+ {
+ return Add(prototype, description, action, false);
+ }
+
+ public OptionSet Add(string prototype, string description, OptionAction<string, string> action, bool hidden)
+ {
+ if (action == null)
+ throw new ArgumentNullException("action");
+ Option p = new ActionOption(prototype, description, 2,
+ delegate (OptionValueCollection v) { action(v[0], v[1]); }, hidden);
+ base.Add(p);
+ return this;
+ }
+
+ sealed class ActionOption<T> : Option
+ {
+ Action<T> action;
+
+ public ActionOption(string prototype, string description, Action<T> action)
+ : base(prototype, description, 1)
+ {
+ if (action == null)
+ throw new ArgumentNullException("action");
+ this.action = action;
+ }
+
+ protected override void OnParseComplete(OptionContext c)
+ {
+ action(Parse<T>(c.OptionValues[0], c));
+ }
+ }
+
+ sealed class ActionOption<TKey, TValue> : Option
+ {
+ OptionAction<TKey, TValue> action;
+
+ public ActionOption(string prototype, string description, OptionAction<TKey, TValue> action)
+ : base(prototype, description, 2)
+ {
+ if (action == null)
+ throw new ArgumentNullException("action");
+ this.action = action;
+ }
+
+ protected override void OnParseComplete(OptionContext c)
+ {
+ action(
+ Parse<TKey>(c.OptionValues[0], c),
+ Parse<TValue>(c.OptionValues[1], c));
+ }
+ }
+
+ public OptionSet Add<T>(string prototype, Action<T> action)
+ {
+ return Add(prototype, null, action);
+ }
+
+ public OptionSet Add<T>(string prototype, string description, Action<T> action)
+ {
+ return Add(new ActionOption<T>(prototype, description, action));
+ }
+
+ public OptionSet Add<TKey, TValue>(string prototype, OptionAction<TKey, TValue> action)
+ {
+ return Add(prototype, null, action);
+ }
+
+ public OptionSet Add<TKey, TValue>(string prototype, string description, OptionAction<TKey, TValue> action)
+ {
+ return Add(new ActionOption<TKey, TValue>(prototype, description, action));
+ }
+
+ public OptionSet Add(ArgumentSource source)
+ {
+ if (source == null)
+ throw new ArgumentNullException("source");
+ sources.Add(source);
+ return this;
+ }
+
+ protected virtual OptionContext CreateOptionContext()
+ {
+ return new OptionContext(this);
+ }
+
+ public List<string> Parse(IEnumerable<string> arguments)
+ {
+ if (arguments == null)
+ throw new ArgumentNullException("arguments");
+ OptionContext c = CreateOptionContext();
+ c.OptionIndex = -1;
+ bool process = true;
+ List<string> unprocessed = new List<string>();
+ Option def = Contains("<>") ? this["<>"] : null;
+ ArgumentEnumerator ae = new ArgumentEnumerator(arguments);
+ foreach (string argument in ae)
+ {
+ ++c.OptionIndex;
+ if (argument == "--")
+ {
+ process = false;
+ continue;
+ }
+ if (!process)
+ {
+ Unprocessed(unprocessed, def, c, argument);
+ continue;
+ }
+ if (AddSource(ae, argument))
+ continue;
+ if (!Parse(argument, c))
+ Unprocessed(unprocessed, def, c, argument);
+ }
+ if (c.Option != null)
+ c.Option.Invoke(c);
+ return unprocessed;
+ }
+
+ class ArgumentEnumerator : IEnumerable<string>
+ {
+ List<IEnumerator<string>> sources = new List<IEnumerator<string>>();
+
+ public ArgumentEnumerator(IEnumerable<string> arguments)
+ {
+ sources.Add(arguments.GetEnumerator());
+ }
+
+ public void Add(IEnumerable<string> arguments)
+ {
+ sources.Add(arguments.GetEnumerator());
+ }
+
+ public IEnumerator<string> GetEnumerator()
+ {
+ do
+ {
+ IEnumerator<string> c = sources[sources.Count - 1];
+ if (c.MoveNext())
+ yield return c.Current;
+ else
+ {
+ c.Dispose();
+ sources.RemoveAt(sources.Count - 1);
+ }
+ } while (sources.Count > 0);
+ }
+
+ IEnumerator IEnumerable.GetEnumerator()
+ {
+ return GetEnumerator();
+ }
+ }
+
+ bool AddSource(ArgumentEnumerator ae, string argument)
+ {
+ foreach (ArgumentSource source in sources)
+ {
+ IEnumerable<string> replacement;
+ if (!source.GetArguments(argument, out replacement))
+ continue;
+ ae.Add(replacement);
+ return true;
+ }
+ return false;
+ }
+
+ private static bool Unprocessed(ICollection<string> extra, Option def, OptionContext c, string argument)
+ {
+ if (def == null)
+ {
+ extra.Add(argument);
+ return false;
+ }
+ c.OptionValues.Add(argument);
+ c.Option = def;
+ c.Option.Invoke(c);
+ return false;
+ }
+
+ private readonly Regex ValueOption = new Regex(
+ @"^(?<flag>--|-|/)(?<name>[^:=]+)((?<sep>[:=])(?<value>.*))?$");
+
+ protected bool GetOptionParts(string argument, out string flag, out string name, out string sep, out string value)
+ {
+ if (argument == null)
+ throw new ArgumentNullException("argument");
+
+ flag = name = sep = value = null;
+ Match m = ValueOption.Match(argument);
+ if (!m.Success)
+ {
+ return false;
+ }
+ flag = m.Groups["flag"].Value;
+ name = m.Groups["name"].Value;
+ if (m.Groups["sep"].Success && m.Groups["value"].Success)
+ {
+ sep = m.Groups["sep"].Value;
+ value = m.Groups["value"].Value;
+ }
+ return true;
+ }
+
+ protected virtual bool Parse(string argument, OptionContext c)
+ {
+ if (c.Option != null)
+ {
+ ParseValue(argument, c);
+ return true;
+ }
+
+ string f, n, s, v;
+ if (!GetOptionParts(argument, out f, out n, out s, out v))
+ return false;
+
+ Option p;
+ if (Contains(n))
+ {
+ p = this[n];
+ c.OptionName = f + n;
+ c.Option = p;
+ switch (p.OptionValueType)
+ {
+ case OptionValueType.None:
+ c.OptionValues.Add(n);
+ c.Option.Invoke(c);
+ break;
+ case OptionValueType.Optional:
+ case OptionValueType.Required:
+ ParseValue(v, c);
+ break;
+ }
+ return true;
+ }
+ // no match; is it a bool option?
+ if (ParseBool(argument, n, c))
+ return true;
+ // is it a bundled option?
+ if (ParseBundledValue(f, string.Concat(n + s + v), c))
+ return true;
+
+ return false;
+ }
+
+ private void ParseValue(string option, OptionContext c)
+ {
+ if (option != null)
+ foreach (string o in c.Option.ValueSeparators != null
+ ? option.Split(c.Option.ValueSeparators, c.Option.MaxValueCount - c.OptionValues.Count, StringSplitOptions.None)
+ : new string[] { option })
+ {
+ c.OptionValues.Add(o);
+ }
+ if (c.OptionValues.Count == c.Option.MaxValueCount ||
+ c.Option.OptionValueType == OptionValueType.Optional)
+ c.Option.Invoke(c);
+ else if (c.OptionValues.Count > c.Option.MaxValueCount)
+ {
+ throw new OptionException(localizer(string.Format(
+ "Error: Found {0} option values when expecting {1}.",
+ c.OptionValues.Count, c.Option.MaxValueCount)),
+ c.OptionName);
+ }
+ }
+
+ private bool ParseBool(string option, string n, OptionContext c)
+ {
+ Option p;
+ string rn;
+ if (n.Length >= 1 && (n[n.Length - 1] == '+' || n[n.Length - 1] == '-') &&
+ Contains((rn = n.Substring(0, n.Length - 1))))
+ {
+ p = this[rn];
+ string v = n[n.Length - 1] == '+' ? option : null;
+ c.OptionName = option;
+ c.Option = p;
+ c.OptionValues.Add(v);
+ p.Invoke(c);
+ return true;
+ }
+ return false;
+ }
+
+ private bool ParseBundledValue(string f, string n, OptionContext c)
+ {
+ if (f != "-")
+ return false;
+ for (int i = 0; i < n.Length; ++i)
+ {
+ Option p;
+ string opt = f + n[i].ToString();
+ string rn = n[i].ToString();
+ if (!Contains(rn))
+ {
+ if (i == 0)
+ return false;
+ throw new OptionException(string.Format(localizer(
+ "Cannot use unregistered option '{0}' in bundle '{1}'."), rn, f + n), null);
+ }
+ p = this[rn];
+ switch (p.OptionValueType)
+ {
+ case OptionValueType.None:
+ Invoke(c, opt, n, p);
+ break;
+ case OptionValueType.Optional:
+ case OptionValueType.Required:
+ {
+ string v = n.Substring(i + 1);
+ c.Option = p;
+ c.OptionName = opt;
+ ParseValue(v.Length != 0 ? v : null, c);
+ return true;
+ }
+ default:
+ throw new InvalidOperationException("Unknown OptionValueType: " + p.OptionValueType);
+ }
+ }
+ return true;
+ }
+
+ private static void Invoke(OptionContext c, string name, string value, Option option)
+ {
+ c.OptionName = name;
+ c.Option = option;
+ c.OptionValues.Add(value);
+ option.Invoke(c);
+ }
+
+ private const int OptionWidth = 29;
+ private const int Description_FirstWidth = 80 - OptionWidth;
+ private const int Description_RemWidth = 80 - OptionWidth - 2;
+
+ public void WriteOptionDescriptions(TextWriter o)
+ {
+ foreach (Option p in this)
+ {
+ int written = 0;
+
+ if (p.Hidden)
+ continue;
+
+ Category c = p as Category;
+ if (c != null)
+ {
+ WriteDescription(o, p.Description, "", 80, 80);
+ continue;
+ }
+
+ if (!WriteOptionPrototype(o, p, ref written))
+ continue;
+
+ if (written < OptionWidth)
+ o.Write(new string(' ', OptionWidth - written));
+ else
+ {
+ o.WriteLine();
+ o.Write(new string(' ', OptionWidth));
+ }
+
+ WriteDescription(o, p.Description, new string(' ', OptionWidth + 2),
+ Description_FirstWidth, Description_RemWidth);
+ }
+
+ foreach (ArgumentSource s in sources)
+ {
+ string[] names = s.GetNames();
+ if (names == null || names.Length == 0)
+ continue;
+
+ int written = 0;
+
+ Write(o, ref written, " ");
+ Write(o, ref written, names[0]);
+ for (int i = 1; i < names.Length; ++i)
+ {
+ Write(o, ref written, ", ");
+ Write(o, ref written, names[i]);
+ }
+
+ if (written < OptionWidth)
+ o.Write(new string(' ', OptionWidth - written));
+ else
+ {
+ o.WriteLine();
+ o.Write(new string(' ', OptionWidth));
+ }
+
+ WriteDescription(o, s.Description, new string(' ', OptionWidth + 2),
+ Description_FirstWidth, Description_RemWidth);
+ }
+ }
+
+ void WriteDescription(TextWriter o, string value, string prefix, int firstWidth, int remWidth)
+ {
+ bool indent = false;
+ foreach (string line in GetLines(localizer(GetDescription(value)), firstWidth, remWidth))
+ {
+ if (indent)
+ o.Write(prefix);
+ o.WriteLine(line);
+ indent = true;
+ }
+ }
+
+ bool WriteOptionPrototype(TextWriter o, Option p, ref int written)
+ {
+ string[] names = p.Names;
+
+ int i = GetNextOptionIndex(names, 0);
+ if (i == names.Length)
+ return false;
+
+ if (names[i].Length == 1)
+ {
+ Write(o, ref written, " -");
+ Write(o, ref written, names[0]);
+ }
+ else
+ {
+ Write(o, ref written, " --");
+ Write(o, ref written, names[0]);
+ }
+
+ for (i = GetNextOptionIndex(names, i + 1);
+ i < names.Length; i = GetNextOptionIndex(names, i + 1))
+ {
+ Write(o, ref written, ", ");
+ Write(o, ref written, names[i].Length == 1 ? "-" : "--");
+ Write(o, ref written, names[i]);
+ }
+
+ if (p.OptionValueType == OptionValueType.Optional ||
+ p.OptionValueType == OptionValueType.Required)
+ {
+ if (p.OptionValueType == OptionValueType.Optional)
+ {
+ Write(o, ref written, localizer("["));
+ }
+ Write(o, ref written, localizer("=" + GetArgumentName(0, p.MaxValueCount, p.Description)));
+ string sep = p.ValueSeparators != null && p.ValueSeparators.Length > 0
+ ? p.ValueSeparators[0]
+ : " ";
+ for (int c = 1; c < p.MaxValueCount; ++c)
+ {
+ Write(o, ref written, localizer(sep + GetArgumentName(c, p.MaxValueCount, p.Description)));
+ }
+ if (p.OptionValueType == OptionValueType.Optional)
+ {
+ Write(o, ref written, localizer("]"));
+ }
+ }
+ return true;
+ }
+
+ static int GetNextOptionIndex(string[] names, int i)
+ {
+ while (i < names.Length && names[i] == "<>")
+ {
+ ++i;
+ }
+ return i;
+ }
+
+ static void Write(TextWriter o, ref int n, string s)
+ {
+ n += s.Length;
+ o.Write(s);
+ }
+
+ private static string GetArgumentName(int index, int maxIndex, string description)
+ {
+ if (description == null)
+ return maxIndex == 1 ? "VALUE" : "VALUE" + (index + 1);
+ string[] nameStart;
+ if (maxIndex == 1)
+ nameStart = new string[] { "{0:", "{" };
+ else
+ nameStart = new string[] { "{" + index + ":" };
+ for (int i = 0; i < nameStart.Length; ++i)
+ {
+ int start, j = 0;
+ do
+ {
+ start = description.IndexOf(nameStart[i], j);
+ } while (start >= 0 && j != 0 ? description[j++ - 1] == '{' : false);
+ if (start == -1)
+ continue;
+ int end = description.IndexOf("}", start);
+ if (end == -1)
+ continue;
+ return description.Substring(start + nameStart[i].Length, end - start - nameStart[i].Length);
+ }
+ return maxIndex == 1 ? "VALUE" : "VALUE" + (index + 1);
+ }
+
+ private static string GetDescription(string description)
+ {
+ if (description == null)
+ return string.Empty;
+ StringBuilder sb = new StringBuilder(description.Length);
+ int start = -1;
+ for (int i = 0; i < description.Length; ++i)
+ {
+ switch (description[i])
+ {
+ case '{':
+ if (i == start)
+ {
+ sb.Append('{');
+ start = -1;
+ }
+ else if (start < 0)
+ start = i + 1;
+ break;
+ case '}':
+ if (start < 0)
+ {
+ if ((i + 1) == description.Length || description[i + 1] != '}')
+ throw new InvalidOperationException("Invalid option description: " + description);
+ ++i;
+ sb.Append("}");
+ }
+ else
+ {
+ sb.Append(description.Substring(start, i - start));
+ start = -1;
+ }
+ break;
+ case ':':
+ if (start < 0)
+ goto default;
+ start = i + 1;
+ break;
+ default:
+ if (start < 0)
+ sb.Append(description[i]);
+ break;
+ }
+ }
+ return sb.ToString();
+ }
+
+ private static IEnumerable<string> GetLines(string description, int firstWidth, int remWidth)
+ {
+ return StringCoda.WrappedLines(description, firstWidth, remWidth);
+ }
+ }
+}
diff --git a/mdoc/mdoc.csproj b/mdoc/mdoc.csproj
index ee453b30..edb21d8b 100644
--- a/mdoc/mdoc.csproj
+++ b/mdoc/mdoc.csproj
@@ -15,7 +15,7 @@
<DebugSymbols>True</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>False</Optimize>
- <OutputPath>bin\Debug</OutputPath>
+ <OutputPath>..\bin\Debug</OutputPath>
<DefineConstants>DEBUG;NET_4_5</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
@@ -25,7 +25,7 @@
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<DebugType>none</DebugType>
<Optimize>False</Optimize>
- <OutputPath>bin\Release</OutputPath>
+ <OutputPath>..\bin\Release</OutputPath>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<PlatformTarget>x86</PlatformTarget>
@@ -37,21 +37,21 @@
<Reference Include="System.Xml.Linq" />
<Reference Include="ICSharpCode.SharpZipLib" />
<Reference Include="System.Xml" />
- <Reference Include="monodoc">
- <HintPath>..\..\class\lib\net_4_x\monodoc.dll</HintPath>
+ <Reference Include="Mono.Cecil.Rocks">
+ <HintPath>..\bin\$(Configuration)\Mono.Cecil.Rocks.dll</HintPath>
+ </Reference>
+ <Reference Include="Mono.Cecil.Mdb">
+ <HintPath>..\bin\$(Configuration)\Mono.Cecil.Mdb.dll</HintPath>
+ </Reference>
+ <Reference Include="Mono.Cecil.Pdb">
+ <HintPath>..\bin\$(Configuration)\Mono.Cecil.Pdb.dll</HintPath>
</Reference>
<Reference Include="Mono.Cecil">
- <HintPath>..\..\class\lib\net_4_x\Mono.Cecil.dll</HintPath>
+ <HintPath>..\bin\$(Configuration)\Mono.Cecil.dll</HintPath>
</Reference>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<ItemGroup>
- <Compile Include="..\..\build\common\Consts.cs">
- <Link>Build\Common\Consts.cs</Link>
- </Compile>
- <Compile Include="..\..\class\Mono.Options\Mono.Options\Options.cs">
- <Link>Mono.Options\Options.cs</Link>
- </Compile>
<Compile Include="Mono.Rocks\ObjectRocks.cs" />
<Compile Include="Mono.Rocks\StreamRocks.cs" />
<Compile Include="Mono.Documentation\assembler.cs" />
@@ -70,6 +70,8 @@
<Compile Include="Mono.Documentation\exceptions.cs" />
<Compile Include="Mono.Documentation\index.cs" />
<Compile Include="Mono.Documentation\preserver.cs" />
+ <Compile Include="Consts.cs" />
+ <Compile Include="Options.cs" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources\defaulttemplate.xsl">
@@ -102,4 +104,10 @@
<Link>Resources\mono-ecma-css.xsl</Link>
</None>
</ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\monodoc\monodoc.csproj">
+ <Project>{6E644802-B579-4037-9809-9CF4C7172C9D}</Project>
+ <Name>monodoc</Name>
+ </ProjectReference>
+ </ItemGroup>
</Project> \ No newline at end of file
diff --git a/mdoc/mdoc.sln b/mdoc/mdoc.sln
deleted file mode 100644
index b79381cb..00000000
--- a/mdoc/mdoc.sln
+++ /dev/null
@@ -1,20 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual Studio 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "mdoc", "mdoc.csproj", "{7DA7CD97-614F-4BCD-A2FA-B379590CEA48}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|x86 = Debug|x86
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Debug|x86.ActiveCfg = Debug|x86
- {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Debug|x86.Build.0 = Debug|x86
- {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Release|x86.ActiveCfg = Release|x86
- {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Release|x86.Build.0 = Release|x86
- EndGlobalSection
- GlobalSection(MonoDevelopProperties) = preSolution
- StartupItem = mdoc.csproj
- EndGlobalSection
-EndGlobal
diff --git a/monodoc/Makefile b/monodoc/Makefile
index 50f84cfd..eb6989f9 100644
--- a/monodoc/Makefile
+++ b/monodoc/Makefile
@@ -1,148 +1,4 @@
-thisdir = class/monodoc
-SUBDIRS =
-include ../../build/rules.make
+CONFIGURATION = Release
-LIBRARY = monodoc.dll
-LIBRARY_PACKAGE = monodoc
-# Remove a bunch of "obsolete"-type warning for Lucene.NET
-# also activate legacy mode to compile old monodoc.dll api
-LOCAL_MCS_FLAGS = /nowarn:618,612,672,809 /define:LEGACY_MODE
-
-JAY_FLAGS = -ct
-
-IMAGES = \
- Resources/images/bc_bg.png \
- Resources/images/bc_separator.png \
- Resources/images/error.png \
- Resources/images/hatch.png \
- Resources/images/headerbg.png \
- Resources/images/help.png \
- Resources/images/house.png \
- Resources/images/members.png \
- Resources/images/namespace.png \
- Resources/images/privclass.png \
- Resources/images/privdelegate.png \
- Resources/images/privenumeration.png \
- Resources/images/privevent.png \
- Resources/images/privextension.png \
- Resources/images/privfield.png \
- Resources/images/privinterface.png \
- Resources/images/privmethod.png \
- Resources/images/privproperty.png \
- Resources/images/privstructure.png \
- Resources/images/protclass.png \
- Resources/images/protdelegate.png \
- Resources/images/protenumeration.png \
- Resources/images/protevent.png \
- Resources/images/protextension.png \
- Resources/images/protfield.png \
- Resources/images/protinterface.png \
- Resources/images/protmethod.png \
- Resources/images/protproperty.png \
- Resources/images/protstructure.png \
- Resources/images/pubclass.png \
- Resources/images/pubdelegate.png \
- Resources/images/pubenumeration.png \
- Resources/images/pubevent.png \
- Resources/images/pubextension.png \
- Resources/images/pubfield.png \
- Resources/images/pubinterface.png \
- Resources/images/pubmethod.png \
- Resources/images/pubproperty.png \
- Resources/images/pubstructure.png \
- Resources/images/reference.png \
- Resources/images/treebg.png
-
-IMAGE_RESOURCE_COMMAND = $(foreach file,$(IMAGES),/resource:$(file),$(notdir $(file)))
-
-RESOURCE_FILES = \
- ../../docs/monodoc.xml \
- Resources/base.css \
- Resources/ecmaspec-html-css.xsl \
- Resources/ecmaspec-html.xsl \
- Resources/ecmaspec.css \
- Resources/helper.js \
- Resources/home.html \
- Resources/Lminus.gif \
- Resources/Lplus.gif \
- Resources/creativecommons.png \
- Resources/mdoc-html-format.xsl \
- Resources/mdoc-html-utils.xsl \
- Resources/mdoc-sections-css.xsl \
- Resources/mdoc-sections.xsl \
- Resources/mono-ecma-css.xsl \
- Resources/mono-ecma-impl.xsl \
- Resources/mono-ecma.css \
- Resources/mono-ecma.xsl \
- Resources/toc-html.xsl \
- $(IMAGES)
-
-EXTRA_DISTFILES = \
- jay.sh \
- monodoc.dll.config.in \
- $(RESOURCE_FILES) \
- Monodoc.Ecma/EcmaUrlParser.jay \
- Test/monodoc_test/monodoc.xml \
- Test/monodoc_test/trees/tree-from-2-10.tree \
- Test/monodoc_test/trees/tree-from-3-0-old.tree \
- Test/monodoc_test/trees/tree-from-3-0.tree
-
-LIB_REFS = ICSharpCode.SharpZipLib System System.Core System.Xml System.Xml.Linq System.Configuration
-LIB_MCS_FLAGS = \
- /unsafe \
- /nowarn:169,164,162,168,219,618,612 \
- /resource:../../docs/monodoc.xml,monodoc.xml \
- /resource:Resources/base.css,base.css \
- /resource:Resources/ecmaspec-html-css.xsl,ecmaspec-html-css.xsl \
- /resource:Resources/ecmaspec-html.xsl,ecmaspec-html.xsl \
- /resource:Resources/ecmaspec.css,ecmaspec.css \
- /resource:Resources/helper.js,helper.js \
- /resource:Resources/home.html,home.html \
- /resource:Resources/Lminus.gif,Lminus.gif \
- /resource:Resources/Lplus.gif,Lplus.gif \
- /resource:Resources/creativecommons.png,creativecommons.png \
- /resource:Resources/mdoc-html-format.xsl,mdoc-html-format.xsl \
- /resource:Resources/mdoc-html-utils.xsl,mdoc-html-utils.xsl \
- /resource:Resources/mdoc-sections-css.xsl,mdoc-sections-css.xsl \
- /resource:Resources/mdoc-sections.xsl,mdoc-sections.xsl \
- /resource:Resources/mono-ecma-css.xsl,mono-ecma-css.xsl \
- /resource:Resources/mono-ecma-impl.xsl,mono-ecma-impl.xsl \
- /resource:Resources/mono-ecma.css,mono-ecma.css \
- /resource:Resources/mono-ecma.xsl,mono-ecma.xsl \
- /resource:Resources/toc-html.xsl,toc-html.xsl \
- $(IMAGE_RESOURCE_COMMAND) \
- /publicsign
-
-CLEAN_FILES += $(the_lib).config
-
-TEST_MCS_FLAGS =
-TEST_LIB_REFS = System System.Core System.Xml
-
-DOC_SOURCE_DIRS = \
- ../../docs \
- ../../../docs
-
-DOC_SOURCES = $(foreach dir,$(DOC_SOURCE_DIRS),$(wildcard $(dir)/*.source $(dir)/*.tree $(dir)/*.zip))
-
-include ../../build/library.make
-
-$(the_lib): Makefile $(RESOURCE_FILES)
-
-all-local: $(the_lib).config Monodoc.Ecma/EcmaUrlParser.cs
-
-test-local: setup-doc-sources
-
-dist-local: Monodoc.Ecma/EcmaUrlParser.cs
-
-$(the_lib).config: Makefile monodoc.dll.config.in
- sed 's,@monodoc_refdir@,$(mono_libdir)/monodoc,g' monodoc.dll.config.in > $@
-
-Monodoc.Ecma/EcmaUrlParser.cs: Monodoc.Ecma/EcmaUrlParser.jay $(topdir)/jay/skeleton.cs jay.sh
- $(topdir)/$(thisdir)/jay.sh $(topdir) $< $@ $(JAY_FLAGS)
-
-parser.exe: Monodoc.Ecma/EcmaUrlParser.cs Monodoc.Ecma/EcmaUrlTokenizer.cs Monodoc.Ecma/EcmaUrlParserDriver.cs Monodoc.Ecma/EcmaDesc.cs
- mcs /out:$@ /debug $^
-
-setup-doc-sources: $(DOC_SOURCES)
- mkdir -p ./Test/monodoc_test/sources/
- cp $(DOC_SOURCES) ./Test/monodoc_test/sources/
+check:
+ mono ../packages/NUnit.ConsoleRunner.3.6.0/tools/nunit3-console.exe Test/bin/$(CONFIGURATION)/Monodoc.Test.dll
diff --git a/monodoc/Monodoc.Ecma/prebuilt/EcmaUrlParser.cs b/monodoc/Monodoc.Ecma/prebuilt/EcmaUrlParser.cs
new file mode 100644
index 00000000..1965cd0b
--- /dev/null
+++ b/monodoc/Monodoc.Ecma/prebuilt/EcmaUrlParser.cs
@@ -0,0 +1,1007 @@
+// created by jay 0.7 (c) 1998 Axel.Schreiner@informatik.uni-osnabrueck.de
+
+#line 2 "Monodoc.Ecma/EcmaUrlParser.jay"
+using System.Text;
+using System.IO;
+using System;
+using System.Linq;
+using System.Collections.Generic;
+
+namespace Monodoc.Ecma
+{
+ public class EcmaUrlParser
+ {
+ int yacc_verbose_flag = 0;
+
+ public void IsValid (string input)
+ {
+ var lexer = new EcmaUrlTokenizer (input);
+ this.yyparse (lexer);
+ }
+
+ public EcmaDesc Parse (string input)
+ {
+ var lexer = new EcmaUrlTokenizer (input);
+ return (EcmaDesc)this.yyparse (lexer);
+ }
+
+ public bool TryParse (string input, out EcmaDesc desc)
+ {
+ desc = null;
+ try {
+ desc = Parse (input);
+ } catch {
+ return false;
+ }
+ return true;
+ }
+
+ EcmaDesc SetEcmaDescType (object result, EcmaDesc.Kind kind)
+ {
+ var desc = result as EcmaDesc;
+ desc.DescKind = kind;
+ return desc;
+ }
+
+ List<T> SafeReverse<T> (List<T> input)
+ {
+ if (input == null)
+ return null;
+ input.Reverse ();
+ return input;
+ }
+#line default
+
+ /** error output stream.
+ It should be changeable.
+ */
+ public System.IO.TextWriter ErrorOutput = System.Console.Out;
+
+ /** simplified error message.
+ @see <a href="#yyerror(java.lang.String, java.lang.String[])">yyerror</a>
+ */
+ public void yyerror (string message) {
+ yyerror(message, null);
+ }
+#pragma warning disable 649
+ /* An EOF token */
+ public int eof_token;
+#pragma warning restore 649
+ /** (syntax) error message.
+ Can be overwritten to control message format.
+ @param message text to be displayed.
+ @param expected vector of acceptable tokens, if available.
+ */
+ public void yyerror (string message, string[] expected) {
+ if ((yacc_verbose_flag > 0) && (expected != null) && (expected.Length > 0)) {
+ ErrorOutput.Write (message+", expecting");
+ for (int n = 0; n < expected.Length; ++ n)
+ ErrorOutput.Write (" "+expected[n]);
+ ErrorOutput.WriteLine ();
+ } else
+ ErrorOutput.WriteLine (message);
+ }
+
+ /** debugging support, requires the package jay.yydebug.
+ Set to null to suppress debugging messages.
+ */
+ internal yydebug.yyDebug debug;
+
+ protected const int yyFinal = 9;
+ // Put this array into a separate class so it is only initialized if debugging is actually used
+ // Use MarshalByRefObject to disable inlining
+ class YYRules : MarshalByRefObject {
+ public static readonly string [] yyRule = {
+ "$accept : expression",
+ "expression : 'T' COLON type_expression",
+ "expression : 'N' COLON namespace_expression",
+ "expression : 'M' COLON method_expression",
+ "expression : 'F' COLON simple_member_expression",
+ "expression : 'C' COLON constructor_expression",
+ "expression : 'P' COLON property_expression",
+ "expression : 'E' COLON simple_member_expression",
+ "expression : 'O' COLON operator_expression",
+ "dot_expression : IDENTIFIER",
+ "dot_expression : IDENTIFIER DOT dot_expression",
+ "namespace_expression : dot_expression",
+ "type_expression : dot_expression type_expression_suffix",
+ "reduced_type_expression : IDENTIFIER type_expression_suffix",
+ "type_expression_suffix : opt_generic_type_suffix opt_inner_type_description opt_array_definition opt_etc",
+ "opt_inner_type_description :",
+ "opt_inner_type_description : INNER_TYPE_SEPARATOR reduced_type_expression",
+ "opt_generic_type_suffix :",
+ "opt_generic_type_suffix : OP_GENERICS_BACKTICK DIGIT",
+ "opt_generic_type_suffix : OP_GENERICS_LT generic_type_arg_list OP_GENERICS_GT",
+ "generic_type_arg_list : type_expression",
+ "generic_type_arg_list : generic_type_arg_list COMMA type_expression",
+ "opt_array_definition :",
+ "opt_array_definition : OP_ARRAY_OPEN opt_array_definition_list OP_ARRAY_CLOSE opt_array_definition",
+ "opt_array_definition_list :",
+ "opt_array_definition_list : COMMA opt_array_definition_list",
+ "opt_etc :",
+ "opt_etc : SLASH_SEPARATOR etc_identifier",
+ "opt_etc : SLASH_SEPARATOR etc_identifier SLASH_SEPARATOR reduced_member_expression",
+ "etc_identifier : STAR",
+ "etc_identifier : IDENTIFIER",
+ "method_expression : type_expression DOT IDENTIFIER opt_generic_type_suffix opt_arg_list_suffix",
+ "method_expression : dot_expression opt_generic_type_suffix opt_arg_list_suffix",
+ "method_expression : type_expression EXPLICIT_IMPL_SEP method_expression",
+ "reduced_member_expression : IDENTIFIER opt_generic_type_suffix",
+ "reduced_member_expression : IDENTIFIER opt_generic_type_suffix DOT reduced_member_expression",
+ "arg_type_expression : type_expression opt_arg_type_suffix",
+ "opt_arg_type_suffix :",
+ "opt_arg_type_suffix : STAR",
+ "opt_arg_type_suffix : REF_ARG",
+ "opt_arg_type_suffix : OUT_ARG",
+ "type_expression_list :",
+ "type_expression_list : arg_type_expression",
+ "type_expression_list : arg_type_expression COMMA type_expression_list",
+ "simple_member_expression : dot_expression",
+ "simple_member_expression : type_expression DOT IDENTIFIER",
+ "simple_member_expression : type_expression EXPLICIT_IMPL_SEP simple_member_expression",
+ "constructor_expression : method_expression",
+ "operator_expression : method_expression",
+ "property_expression : simple_member_expression opt_property_indexer",
+ "opt_property_indexer : opt_arg_list_suffix",
+ "opt_arg_list_suffix :",
+ "opt_arg_list_suffix : OP_OPEN_PAREN type_expression_list OP_CLOSE_PAREN",
+ };
+ public static string getRule (int index) {
+ return yyRule [index];
+ }
+}
+ protected static readonly string [] yyNames = {
+ "end-of-file",null,null,null,null,null,null,null,null,null,null,null,
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+ null,null,null,null,null,null,null,null,null,null,null,null,null,
+ "'C'",null,"'E'","'F'",null,null,null,null,null,null,"'M'","'N'",
+ "'O'","'P'",null,null,null,"'T'",null,null,null,null,null,null,null,
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+ null,null,null,null,null,null,null,null,null,null,null,null,null,null,
+ null,null,null,null,null,null,null,null,null,null,null,"ERROR",
+ "IDENTIFIER","DIGIT","DOT","COMMA","COLON","INNER_TYPE_SEPARATOR",
+ "OP_GENERICS_LT","OP_GENERICS_GT","OP_GENERICS_BACKTICK",
+ "OP_OPEN_PAREN","OP_CLOSE_PAREN","OP_ARRAY_OPEN","OP_ARRAY_CLOSE",
+ "SLASH_SEPARATOR","STAR","REF_ARG","OUT_ARG","EXPLICIT_IMPL_SEP",
+ };
+
+ /** index-checked interface to yyNames[].
+ @param token single character or %token value.
+ @return token name or [illegal] or [unknown].
+ */
+ public static string yyname (int token) {
+ if ((token < 0) || (token > yyNames.Length)) return "[illegal]";
+ string name;
+ if ((name = yyNames[token]) != null) return name;
+ return "[unknown]";
+ }
+
+#pragma warning disable 414
+ int yyExpectingState;
+#pragma warning restore 414
+ /** computes list of expected tokens on error by tracing the tables.
+ @param state for which to compute the list.
+ @return list of token names.
+ */
+ protected int [] yyExpectingTokens (int state){
+ int token, n, len = 0;
+ bool[] ok = new bool[yyNames.Length];
+ if ((n = yySindex[state]) != 0)
+ for (token = n < 0 ? -n : 0;
+ (token < yyNames.Length) && (n+token < yyTable.Length); ++ token)
+ if (yyCheck[n+token] == token && !ok[token] && yyNames[token] != null) {
+ ++ len;
+ ok[token] = true;
+ }
+ if ((n = yyRindex[state]) != 0)
+ for (token = n < 0 ? -n : 0;
+ (token < yyNames.Length) && (n+token < yyTable.Length); ++ token)
+ if (yyCheck[n+token] == token && !ok[token] && yyNames[token] != null) {
+ ++ len;
+ ok[token] = true;
+ }
+ int [] result = new int [len];
+ for (n = token = 0; n < len; ++ token)
+ if (ok[token]) result[n++] = token;
+ return result;
+ }
+ protected string[] yyExpecting (int state) {
+ int [] tokens = yyExpectingTokens (state);
+ string [] result = new string[tokens.Length];
+ for (int n = 0; n < tokens.Length; n++)
+ result[n++] = yyNames[tokens [n]];
+ return result;
+ }
+
+ /** the generated parser, with debugging messages.
+ Maintains a state and a value stack, currently with fixed maximum size.
+ @param yyLex scanner.
+ @param yydebug debug message writer implementing yyDebug, or null.
+ @return result of the last reduction, if any.
+ @throws yyException on irrecoverable parse error.
+ */
+ internal Object yyparse (yyParser.yyInput yyLex, Object yyd)
+ {
+ this.debug = (yydebug.yyDebug)yyd;
+ return yyparse(yyLex);
+ }
+
+ /** initial size and increment of the state/value stack [default 256].
+ This is not final so that it can be overwritten outside of invocations
+ of yyparse().
+ */
+ protected int yyMax;
+
+ /** executed at the beginning of a reduce action.
+ Used as $$ = yyDefault($1), prior to the user-specified action, if any.
+ Can be overwritten to provide deep copy, etc.
+ @param first value for $1, or null.
+ @return first.
+ */
+ protected Object yyDefault (Object first) {
+ return first;
+ }
+
+ static int[] global_yyStates;
+ static object[] global_yyVals;
+#pragma warning disable 649
+ protected bool use_global_stacks;
+#pragma warning restore 649
+ object[] yyVals; // value stack
+ object yyVal; // value stack ptr
+ int yyToken; // current input
+ int yyTop;
+
+ /** the generated parser.
+ Maintains a state and a value stack, currently with fixed maximum size.
+ @param yyLex scanner.
+ @return result of the last reduction, if any.
+ @throws yyException on irrecoverable parse error.
+ */
+ internal Object yyparse (yyParser.yyInput yyLex)
+ {
+ if (yyMax <= 0) yyMax = 256; // initial size
+ int yyState = 0; // state stack ptr
+ int [] yyStates; // state stack
+ yyVal = null;
+ yyToken = -1;
+ int yyErrorFlag = 0; // #tks to shift
+ if (use_global_stacks && global_yyStates != null) {
+ yyVals = global_yyVals;
+ yyStates = global_yyStates;
+ } else {
+ yyVals = new object [yyMax];
+ yyStates = new int [yyMax];
+ if (use_global_stacks) {
+ global_yyVals = yyVals;
+ global_yyStates = yyStates;
+ }
+ }
+
+ /*yyLoop:*/ for (yyTop = 0;; ++ yyTop) {
+ if (yyTop >= yyStates.Length) { // dynamically increase
+ global::System.Array.Resize (ref yyStates, yyStates.Length+yyMax);
+ global::System.Array.Resize (ref yyVals, yyVals.Length+yyMax);
+ }
+ yyStates[yyTop] = yyState;
+ yyVals[yyTop] = yyVal;
+ if (debug != null) debug.push(yyState, yyVal);
+
+ /*yyDiscarded:*/ while (true) { // discarding a token does not change stack
+ int yyN;
+ if ((yyN = yyDefRed[yyState]) == 0) { // else [default] reduce (yyN)
+ if (yyToken < 0) {
+ yyToken = yyLex.advance() ? yyLex.token() : 0;
+ if (debug != null)
+ debug.lex(yyState, yyToken, yyname(yyToken), yyLex.value());
+ }
+ if ((yyN = yySindex[yyState]) != 0 && ((yyN += yyToken) >= 0)
+ && (yyN < yyTable.Length) && (yyCheck[yyN] == yyToken)) {
+ if (debug != null)
+ debug.shift(yyState, yyTable[yyN], yyErrorFlag-1);
+ yyState = yyTable[yyN]; // shift to yyN
+ yyVal = yyLex.value();
+ yyToken = -1;
+ if (yyErrorFlag > 0) -- yyErrorFlag;
+ goto continue_yyLoop;
+ }
+ if ((yyN = yyRindex[yyState]) != 0 && (yyN += yyToken) >= 0
+ && yyN < yyTable.Length && yyCheck[yyN] == yyToken)
+ yyN = yyTable[yyN]; // reduce (yyN)
+ else
+ switch (yyErrorFlag) {
+
+ case 0:
+ yyExpectingState = yyState;
+ // yyerror(String.Format ("syntax error, got token `{0}'", yyname (yyToken)), yyExpecting(yyState));
+ if (debug != null) debug.error("syntax error");
+ if (yyToken == 0 /*eof*/ || yyToken == eof_token) throw new yyParser.yyUnexpectedEof ();
+ goto case 1;
+ case 1: case 2:
+ yyErrorFlag = 3;
+ do {
+ if ((yyN = yySindex[yyStates[yyTop]]) != 0
+ && (yyN += Token.yyErrorCode) >= 0 && yyN < yyTable.Length
+ && yyCheck[yyN] == Token.yyErrorCode) {
+ if (debug != null)
+ debug.shift(yyStates[yyTop], yyTable[yyN], 3);
+ yyState = yyTable[yyN];
+ yyVal = yyLex.value();
+ goto continue_yyLoop;
+ }
+ if (debug != null) debug.pop(yyStates[yyTop]);
+ } while (-- yyTop >= 0);
+ if (debug != null) debug.reject();
+ throw new yyParser.yyException("irrecoverable syntax error");
+
+ case 3:
+ if (yyToken == 0) {
+ if (debug != null) debug.reject();
+ throw new yyParser.yyException("irrecoverable syntax error at end-of-file");
+ }
+ if (debug != null)
+ debug.discard(yyState, yyToken, yyname(yyToken),
+ yyLex.value());
+ yyToken = -1;
+ goto continue_yyDiscarded; // leave stack alone
+ }
+ }
+ int yyV = yyTop + 1-yyLen[yyN];
+ if (debug != null)
+ debug.reduce(yyState, yyStates[yyV-1], yyN, YYRules.getRule (yyN), yyLen[yyN]);
+ yyVal = yyV > yyTop ? null : yyVals[yyV]; // yyVal = yyDefault(yyV > yyTop ? null : yyVals[yyV]);
+ switch (yyN) {
+case 1:
+#line 78 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = SetEcmaDescType (yyVals[0+yyTop], EcmaDesc.Kind.Type); }
+ break;
+case 2:
+#line 79 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = SetEcmaDescType (yyVals[0+yyTop], EcmaDesc.Kind.Namespace); }
+ break;
+case 3:
+#line 80 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = SetEcmaDescType (yyVals[0+yyTop], EcmaDesc.Kind.Method); }
+ break;
+case 4:
+#line 81 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = SetEcmaDescType (yyVals[0+yyTop], EcmaDesc.Kind.Field); }
+ break;
+case 5:
+#line 82 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = SetEcmaDescType (yyVals[0+yyTop], EcmaDesc.Kind.Constructor); }
+ break;
+case 6:
+#line 83 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = SetEcmaDescType (yyVals[0+yyTop], EcmaDesc.Kind.Property); }
+ break;
+case 7:
+#line 84 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = SetEcmaDescType (yyVals[0+yyTop], EcmaDesc.Kind.Event); }
+ break;
+case 8:
+#line 85 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = SetEcmaDescType (yyVals[0+yyTop], EcmaDesc.Kind.Operator); }
+ break;
+case 9:
+#line 89 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = new List<string> { (string)yyVals[0+yyTop] }; }
+ break;
+case 10:
+#line 90 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { ((ICollection<string>)yyVals[0+yyTop]).Add ((string)yyVals[-2+yyTop]); yyVal = yyVals[0+yyTop]; }
+ break;
+case 11:
+#line 93 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = new EcmaDesc { Namespace = string.Join (".", ((IEnumerable<string>)yyVals[0+yyTop]).Reverse ()) }; }
+ break;
+case 12:
+ case_12();
+ break;
+case 13:
+ case_13();
+ break;
+case 14:
+ case_14();
+ break;
+case 15:
+#line 133 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = null; }
+ break;
+case 16:
+#line 134 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = yyVals[0+yyTop]; }
+ break;
+case 17:
+#line 137 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = null; }
+ break;
+case 18:
+#line 138 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = Enumerable.Repeat<EcmaDesc> (null, (int)yyVals[0+yyTop]).ToList (); }
+ break;
+case 19:
+#line 139 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = yyVals[-1+yyTop]; }
+ break;
+case 20:
+#line 142 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = new List<EcmaDesc> () { (EcmaDesc)yyVals[0+yyTop] }; }
+ break;
+case 21:
+#line 143 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { ((List<EcmaDesc>)yyVals[-2+yyTop]).Add ((EcmaDesc)yyVals[0+yyTop]); yyVal = yyVals[-2+yyTop]; }
+ break;
+case 22:
+#line 146 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = null; }
+ break;
+case 23:
+ case_23();
+ break;
+case 24:
+#line 154 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = 1; }
+ break;
+case 25:
+#line 155 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = ((int)yyVals[0+yyTop]) + 1; }
+ break;
+case 26:
+#line 158 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = null; }
+ break;
+case 27:
+#line 159 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = Tuple.Create<char, string> (((string)yyVals[0+yyTop])[0], null); }
+ break;
+case 28:
+#line 160 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = Tuple.Create<char, string> (((string)yyVals[-2+yyTop])[0], (string)yyVals[0+yyTop]); }
+ break;
+case 29:
+#line 164 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = "*"; }
+ break;
+case 30:
+#line 165 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = yyVals[0+yyTop]; }
+ break;
+case 31:
+ case_31();
+ break;
+case 32:
+ case_32();
+ break;
+case 33:
+ case_33();
+ break;
+case 34:
+#line 193 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = (string)yyVals[-1+yyTop] + (yyVals[0+yyTop] == null ? string.Empty : "<" + string.Join (",", ((IEnumerable<EcmaDesc>)yyVals[0+yyTop]).Select (t => t.ToCompleteTypeName ())) + ">"); }
+ break;
+case 35:
+ case_35();
+ break;
+case 36:
+#line 201 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { var desc = (EcmaDesc)yyVals[-1+yyTop]; desc.DescModifier = (EcmaDesc.Mod)yyVals[0+yyTop]; yyVal = desc; }
+ break;
+case 37:
+#line 204 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = EcmaDesc.Mod.Normal; }
+ break;
+case 38:
+#line 205 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = EcmaDesc.Mod.Pointer; }
+ break;
+case 39:
+#line 206 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = EcmaDesc.Mod.Ref; }
+ break;
+case 40:
+#line 207 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = EcmaDesc.Mod.Out; }
+ break;
+case 41:
+#line 210 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = null; }
+ break;
+case 42:
+#line 211 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = new List<EcmaDesc> () { (EcmaDesc)yyVals[0+yyTop] }; }
+ break;
+case 43:
+#line 212 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { ((List<EcmaDesc>)yyVals[0+yyTop]).Add ((EcmaDesc)yyVals[-2+yyTop]); yyVal = yyVals[0+yyTop]; }
+ break;
+case 44:
+ case_44();
+ break;
+case 45:
+ case_45();
+ break;
+case 46:
+ case_46();
+ break;
+case 47:
+#line 237 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = yyVals[0+yyTop]; }
+ break;
+case 48:
+#line 240 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = yyVals[0+yyTop]; }
+ break;
+case 49:
+ case_49();
+ break;
+case 50:
+#line 250 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = yyVals[0+yyTop]; }
+ break;
+case 51:
+#line 258 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = null; }
+ break;
+case 52:
+#line 259 "Monodoc.Ecma/EcmaUrlParser.jay"
+ { yyVal = yyVals[-1+yyTop]; }
+ break;
+#line default
+ }
+ yyTop -= yyLen[yyN];
+ yyState = yyStates[yyTop];
+ int yyM = yyLhs[yyN];
+ if (yyState == 0 && yyM == 0) {
+ if (debug != null) debug.shift(0, yyFinal);
+ yyState = yyFinal;
+ if (yyToken < 0) {
+ yyToken = yyLex.advance() ? yyLex.token() : 0;
+ if (debug != null)
+ debug.lex(yyState, yyToken,yyname(yyToken), yyLex.value());
+ }
+ if (yyToken == 0) {
+ if (debug != null) debug.accept(yyVal);
+ return yyVal;
+ }
+ goto continue_yyLoop;
+ }
+ if (((yyN = yyGindex[yyM]) != 0) && ((yyN += yyState) >= 0)
+ && (yyN < yyTable.Length) && (yyCheck[yyN] == yyState))
+ yyState = yyTable[yyN];
+ else
+ yyState = yyDgoto[yyM];
+ if (debug != null) debug.shift(yyStates[yyTop], yyState);
+ goto continue_yyLoop;
+ continue_yyDiscarded: ; // implements the named-loop continue: 'continue yyDiscarded'
+ }
+ continue_yyLoop: ; // implements the named-loop continue: 'continue yyLoop'
+ }
+ }
+
+/*
+ All more than 3 lines long rules are wrapped into a method
+*/
+void case_12()
+#line 96 "Monodoc.Ecma/EcmaUrlParser.jay"
+{
+ var dotExpr = ((List<string>)yyVals[-1+yyTop]);
+ dotExpr.Reverse ();
+ var desc = yyVals[0+yyTop] as EcmaDesc;
+ desc.DescKind = EcmaDesc.Kind.Type;
+ desc.Namespace = string.Join (".", dotExpr.Take (dotExpr.Count - 1));
+ desc.TypeName = dotExpr.Last ();
+ yyVal = desc;
+ }
+
+void case_13()
+#line 108 "Monodoc.Ecma/EcmaUrlParser.jay"
+{
+ var desc = yyVals[0+yyTop] as EcmaDesc;
+ desc.DescKind = EcmaDesc.Kind.Type;
+ desc.TypeName = yyVals[-1+yyTop] as string;
+ yyVal = desc;
+ }
+
+void case_14()
+#line 116 "Monodoc.Ecma/EcmaUrlParser.jay"
+{
+ bool nestedDescHasEtc = yyVals[-2+yyTop] != null && ((EcmaDesc)yyVals[-2+yyTop]).IsEtc;
+ EcmaDesc nestedType = (EcmaDesc)yyVals[-2+yyTop];
+ yyVal = new EcmaDesc {
+ GenericTypeArguments = yyVals[-3+yyTop] as List<EcmaDesc>,
+ NestedType = nestedType,
+ ArrayDimensions = SafeReverse (yyVals[-1+yyTop] as List<int>),
+ Etc = yyVals[0+yyTop] != null ? ((Tuple<char, string>)yyVals[0+yyTop]).Item1 : nestedDescHasEtc ? nestedType.Etc : (char)0,
+ EtcFilter = yyVals[0+yyTop] != null ? ((Tuple<char, string>)yyVals[0+yyTop]).Item2 : nestedDescHasEtc ? nestedType.EtcFilter : null
+ };
+ if (nestedDescHasEtc) {
+ nestedType.Etc = (char)0;
+ nestedType.EtcFilter = null;
+ }
+ }
+
+void case_23()
+#line 147 "Monodoc.Ecma/EcmaUrlParser.jay"
+{
+ var dims = ((IList<int>)yyVals[0+yyTop]) ?? new List<int> (2);
+ dims.Add ((int)yyVals[-2+yyTop]);
+ yyVal = dims;
+ }
+
+void case_31()
+#line 168 "Monodoc.Ecma/EcmaUrlParser.jay"
+{
+ var desc = yyVals[-4+yyTop] as EcmaDesc;
+ desc.MemberName = yyVals[-2+yyTop] as string;
+ desc.GenericMemberArguments = yyVals[-1+yyTop] as List<EcmaDesc>;
+ desc.MemberArguments = SafeReverse (yyVals[0+yyTop] as List<EcmaDesc>);
+ yyVal = desc;
+ }
+
+void case_32()
+#line 175 "Monodoc.Ecma/EcmaUrlParser.jay"
+{
+ var dotExpr = ((List<string>)yyVals[-2+yyTop]);
+ yyVal = new EcmaDesc {
+ Namespace = string.Join (".", dotExpr.Skip (2).DefaultIfEmpty (string.Empty).Reverse ()),
+ TypeName = dotExpr.Skip (1).First (),
+ MemberName = dotExpr.First (),
+ GenericMemberArguments = yyVals[-1+yyTop] as List<EcmaDesc>,
+ MemberArguments = SafeReverse (yyVals[0+yyTop] as List<EcmaDesc>)
+ };
+ }
+
+void case_33()
+#line 185 "Monodoc.Ecma/EcmaUrlParser.jay"
+{
+ var desc = yyVals[-2+yyTop] as EcmaDesc;
+ desc.ExplicitImplMember = yyVals[0+yyTop] as EcmaDesc;
+ yyVal = desc;
+ }
+
+void case_35()
+#line 194 "Monodoc.Ecma/EcmaUrlParser.jay"
+{
+ var existing = yyVals[0+yyTop] as string;
+ var expr = (string)yyVals[-3+yyTop] + (yyVals[-2+yyTop] == null ? string.Empty : "<" + string.Join (",", ((IEnumerable<EcmaDesc>)yyVals[-2+yyTop]).Select (t => t.ToCompleteTypeName ())) + ">");
+ yyVal = expr + "." + existing;
+ }
+
+void case_44()
+#line 215 "Monodoc.Ecma/EcmaUrlParser.jay"
+{
+ var dotExpr = ((List<string>)yyVals[0+yyTop]);
+ dotExpr.Reverse ();
+
+ yyVal = new EcmaDesc {
+ Namespace = dotExpr.Count > 2 ? string.Join (".", dotExpr.Take (dotExpr.Count - 2)) : string.Empty,
+ TypeName = dotExpr.Count > 1 ? dotExpr[dotExpr.Count - 2] : string.Empty,
+ MemberName = dotExpr[dotExpr.Count - 1]
+ };
+ }
+
+void case_45()
+#line 225 "Monodoc.Ecma/EcmaUrlParser.jay"
+{
+ var desc = yyVals[-2+yyTop] as EcmaDesc;
+ desc.MemberName = yyVals[0+yyTop] as string;
+ yyVal = desc;
+ }
+
+void case_46()
+#line 230 "Monodoc.Ecma/EcmaUrlParser.jay"
+{
+ var desc = yyVals[-2+yyTop] as EcmaDesc;
+ desc.ExplicitImplMember = yyVals[0+yyTop] as EcmaDesc;
+ yyVal = desc;
+ }
+
+void case_49()
+#line 243 "Monodoc.Ecma/EcmaUrlParser.jay"
+{
+ var desc = yyVals[-1+yyTop] as EcmaDesc;
+ (desc.ExplicitImplMember ?? desc).MemberArguments = SafeReverse (yyVals[0+yyTop] as List<EcmaDesc>);
+ yyVal = desc;
+ }
+
+#line default
+ static readonly short [] yyLhs = { -1,
+ 0, 0, 0, 0, 0, 0, 0, 0, 8, 8,
+ 2, 1, 10, 9, 12, 12, 11, 11, 11, 15,
+ 15, 13, 13, 16, 16, 14, 14, 14, 17, 17,
+ 3, 3, 3, 18, 18, 20, 21, 21, 21, 21,
+ 22, 22, 22, 4, 4, 4, 5, 7, 6, 23,
+ 19, 19,
+ };
+ static readonly short [] yyLen = { 2,
+ 3, 3, 3, 3, 3, 3, 3, 3, 1, 3,
+ 1, 2, 2, 4, 0, 2, 0, 2, 3, 1,
+ 3, 0, 4, 0, 2, 0, 2, 4, 1, 1,
+ 5, 3, 3, 2, 4, 2, 0, 1, 1, 1,
+ 0, 1, 3, 1, 3, 3, 1, 1, 2, 1,
+ 0, 3,
+ };
+ static readonly short [] yyDefRed = { 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
+ 2, 11, 0, 3, 0, 0, 4, 0, 47, 5,
+ 0, 6, 7, 48, 8, 0, 0, 0, 12, 0,
+ 0, 0, 0, 0, 0, 0, 50, 49, 10, 20,
+ 0, 18, 0, 0, 0, 33, 32, 45, 46, 0,
+ 0, 0, 0, 19, 0, 16, 0, 0, 0, 38,
+ 39, 40, 36, 0, 52, 21, 13, 0, 0, 0,
+ 14, 31, 43, 25, 0, 30, 29, 0, 23, 0,
+ 0, 28, 0, 0, 35,
+ };
+ protected static readonly short [] yyDgoto = { 9,
+ 23, 21, 24, 27, 30, 32, 35, 20, 39, 66,
+ 40, 54, 68, 81, 51, 79, 88, 92, 47, 61,
+ 73, 62, 48,
+ };
+ protected static readonly short [] yySindex = { -32,
+ -231, -228, -202, -201, -200, -199, -198, -195, 0, -190,
+ -190, -190, -190, -190, -190, -190, -190, -189, 0, -207,
+ 0, 0, -257, 0, -207, -248, 0, -207, 0, 0,
+ -197, 0, 0, 0, 0, -190, -190, -187, 0, -188,
+ -185, -190, -224, -184, -190, -190, 0, 0, 0, 0,
+ -210, 0, -182, -192, -207, 0, 0, 0, 0, -259,
+ -183, -186, -190, 0, -207, 0, -181, -180, -197, 0,
+ 0, 0, 0, -190, 0, 0, 0, -181, -191, -216,
+ 0, 0, 0, 0, -192, 0, 0, -178, 0, -175,
+ -207, 0, -176, -175, 0,
+ };
+ protected static readonly short [] yyRindex = { 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 1, 0, 144,
+ 0, 0, 0, 0, 128, 0, 0, 129, 0, 0,
+ 85, 0, 0, 0, 0, 0, 0, 0, 0, 33,
+ 0, 0, 92, 0, 0, -179, 0, 0, 0, 0,
+ 0, 0, 0, 65, 4, 0, 0, 0, 0, -252,
+ -174, 0, 0, 0, 17, 0, -172, 81, 85, 0,
+ 0, 0, 0, -179, 0, 0, 0, -172, 0, 0,
+ 0, 0, 0, 0, 65, 0, 0, 97, 0, 0,
+ 49, 0, 112, 0, 0,
+ };
+ protected static readonly short [] yyGindex = { 0,
+ -5, 0, 12, -9, 0, 0, 0, 8, 21, 0,
+ -25, 0, 2, 0, 0, 10, 0, -4, -41, 0,
+ 0, 22, 0,
+ };
+ protected static readonly short [] yyTable = { 43,
+ 9, 57, 41, 17, 19, 31, 33, 26, 37, 26,
+ 26, 44, 70, 71, 72, 37, 17, 42, 22, 25,
+ 28, 25, 28, 28, 25, 29, 45, 82, 34, 69,
+ 10, 50, 15, 11, 5, 59, 7, 4, 53, 26,
+ 60, 86, 46, 49, 3, 2, 8, 6, 17, 25,
+ 63, 1, 28, 56, 64, 87, 37, 76, 38, 12,
+ 13, 14, 15, 16, 22, 93, 17, 18, 60, 46,
+ 36, 52, 55, 58, 53, 65, 67, 74, 85, 78,
+ 26, 75, 91, 94, 51, 77, 89, 84, 41, 95,
+ 80, 51, 90, 42, 0, 83, 27, 24, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 34, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 17, 44, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 17, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 9, 0, 9, 9, 9, 9, 9, 9, 9,
+ 17, 9, 9, 9, 9, 9, 17, 17, 0, 17,
+ 0, 17, 0, 0, 17, 17, 0, 17, 17, 17,
+ 17, 17, 15, 15, 0, 0, 0, 15, 0, 0,
+ 15, 15, 0, 15, 15, 15, 15, 15, 17, 17,
+ 0, 0, 0, 17, 0, 0, 17, 17, 0, 17,
+ 17, 17, 17, 17, 22, 22, 0, 0, 0, 22,
+ 0, 0, 22, 0, 0, 22, 22, 22, 22, 22,
+ 26, 26, 0, 0, 0, 26, 0, 0, 26, 26,
+ 0, 15, 26, 26, 26, 26, 27, 27, 0, 0,
+ 15, 27, 15, 0, 27, 27, 15, 0, 27, 27,
+ 27, 27, 34, 0, 0, 0, 34, 0, 0, 34,
+ 34, 0, 34, 34, 34, 34, 34, 17, 17, 0,
+ 17, 17, 0, 0, 17, 44, 17, 17, 17, 17,
+ 0, 0, 17, 17, 17, 0, 17, 0, 17, 0,
+ 0, 17, 17, 0, 17, 17, 17, 17,
+ };
+ protected static readonly short [] yyCheck = { 25,
+ 0, 43, 260, 0, 10, 15, 16, 13, 261, 15,
+ 16, 260, 272, 273, 274, 268, 0, 275, 11, 12,
+ 13, 14, 15, 16, 17, 14, 275, 69, 17, 55,
+ 262, 37, 0, 262, 67, 45, 69, 70, 263, 45,
+ 46, 258, 267, 36, 77, 78, 79, 80, 0, 42,
+ 261, 84, 45, 42, 265, 272, 264, 63, 266, 262,
+ 262, 262, 262, 262, 0, 91, 262, 258, 74, 267,
+ 260, 259, 258, 258, 263, 258, 269, 261, 270, 261,
+ 0, 268, 258, 260, 0, 65, 85, 78, 268, 94,
+ 271, 0, 271, 268, -1, 74, 0, 270, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 0, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 0, 0, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 0, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 261, -1, 263, 264, 265, 266, 267, 268, 269,
+ 267, 271, 272, 273, 274, 275, 260, 261, -1, 263,
+ -1, 265, -1, -1, 268, 269, -1, 271, 272, 273,
+ 274, 275, 260, 261, -1, -1, -1, 265, -1, -1,
+ 268, 269, -1, 271, 272, 273, 274, 275, 260, 261,
+ -1, -1, -1, 265, -1, -1, 268, 269, -1, 271,
+ 272, 273, 274, 275, 260, 261, -1, -1, -1, 265,
+ -1, -1, 268, -1, -1, 271, 272, 273, 274, 275,
+ 260, 261, -1, -1, -1, 265, -1, -1, 268, 269,
+ -1, 260, 272, 273, 274, 275, 260, 261, -1, -1,
+ 269, 265, 271, -1, 268, 269, 275, -1, 272, 273,
+ 274, 275, 261, -1, -1, -1, 265, -1, -1, 268,
+ 269, -1, 271, 272, 273, 274, 275, 260, 260, -1,
+ 263, 263, -1, -1, 267, 267, 269, 269, 271, 271,
+ -1, -1, 275, 275, 261, -1, 263, -1, 265, -1,
+ -1, 268, 269, -1, 271, 272, 273, 274,
+ };
+
+#line 262 "Monodoc.Ecma/EcmaUrlParser.jay"
+
+}
+#line default
+namespace yydebug {
+ using System;
+ internal interface yyDebug {
+ void push (int state, Object value);
+ void lex (int state, int token, string name, Object value);
+ void shift (int from, int to, int errorFlag);
+ void pop (int state);
+ void discard (int state, int token, string name, Object value);
+ void reduce (int from, int to, int rule, string text, int len);
+ void shift (int from, int to);
+ void accept (Object value);
+ void error (string message);
+ void reject ();
+ }
+
+ class yyDebugSimple : yyDebug {
+ void println (string s){
+ Console.Error.WriteLine (s);
+ }
+
+ public void push (int state, Object value) {
+ println ("push\tstate "+state+"\tvalue "+value);
+ }
+
+ public void lex (int state, int token, string name, Object value) {
+ println("lex\tstate "+state+"\treading "+name+"\tvalue "+value);
+ }
+
+ public void shift (int from, int to, int errorFlag) {
+ switch (errorFlag) {
+ default: // normally
+ println("shift\tfrom state "+from+" to "+to);
+ break;
+ case 0: case 1: case 2: // in error recovery
+ println("shift\tfrom state "+from+" to "+to
+ +"\t"+errorFlag+" left to recover");
+ break;
+ case 3: // normally
+ println("shift\tfrom state "+from+" to "+to+"\ton error");
+ break;
+ }
+ }
+
+ public void pop (int state) {
+ println("pop\tstate "+state+"\ton error");
+ }
+
+ public void discard (int state, int token, string name, Object value) {
+ println("discard\tstate "+state+"\ttoken "+name+"\tvalue "+value);
+ }
+
+ public void reduce (int from, int to, int rule, string text, int len) {
+ println("reduce\tstate "+from+"\tuncover "+to
+ +"\trule ("+rule+") "+text);
+ }
+
+ public void shift (int from, int to) {
+ println("goto\tfrom state "+from+" to "+to);
+ }
+
+ public void accept (Object value) {
+ println("accept\tvalue "+value);
+ }
+
+ public void error (string message) {
+ println("error\t"+message);
+ }
+
+ public void reject () {
+ println("reject");
+ }
+
+ }
+}
+// %token constants
+ class Token {
+ public const int ERROR = 257;
+ public const int IDENTIFIER = 258;
+ public const int DIGIT = 259;
+ public const int DOT = 260;
+ public const int COMMA = 261;
+ public const int COLON = 262;
+ public const int INNER_TYPE_SEPARATOR = 263;
+ public const int OP_GENERICS_LT = 264;
+ public const int OP_GENERICS_GT = 265;
+ public const int OP_GENERICS_BACKTICK = 266;
+ public const int OP_OPEN_PAREN = 267;
+ public const int OP_CLOSE_PAREN = 268;
+ public const int OP_ARRAY_OPEN = 269;
+ public const int OP_ARRAY_CLOSE = 270;
+ public const int SLASH_SEPARATOR = 271;
+ public const int STAR = 272;
+ public const int REF_ARG = 273;
+ public const int OUT_ARG = 274;
+ public const int EXPLICIT_IMPL_SEP = 275;
+ public const int yyErrorCode = 256;
+ }
+ namespace yyParser {
+ using System;
+ /** thrown for irrecoverable syntax errors and stack overflow.
+ */
+ internal class yyException : System.Exception {
+ public yyException (string message) : base (message) {
+ }
+ }
+ internal class yyUnexpectedEof : yyException {
+ public yyUnexpectedEof (string message) : base (message) {
+ }
+ public yyUnexpectedEof () : base ("") {
+ }
+ }
+
+ /** must be implemented by a scanner object to supply input to the parser.
+ */
+ internal interface yyInput {
+ /** move on to next token.
+ @return false if positioned beyond tokens.
+ @throws IOException on input error.
+ */
+ bool advance (); // throws java.io.IOException;
+ /** classifies current token.
+ Should not be called if advance() returned false.
+ @return current %token or single character.
+ */
+ int token ();
+ /** associated with current token.
+ Should not be called if advance() returned false.
+ @return value for token().
+ */
+ Object value ();
+ }
+ }
+} // close outermost namespace, that MUST HAVE BEEN opened in the prolog
diff --git a/monodoc/Monodoc/Node.cs b/monodoc/Monodoc/Node.cs
index 08452f8c..181c7900 100644
--- a/monodoc/Monodoc/Node.cs
+++ b/monodoc/Monodoc/Node.cs
@@ -110,6 +110,7 @@ namespace Monodoc
childrenLookup[child.element] = child;
}
+ #if LEGACY_MODE
[Obsolete ("Use ChildNodes")]
public ArrayList Nodes {
get {
@@ -118,6 +119,7 @@ namespace Monodoc
return legacyNodes;
}
}
+ #endif
public IList<Node> ChildNodes {
get {
diff --git a/monodoc/Properties/AssemblyInfo.cs b/monodoc/Properties/AssemblyInfo.cs
new file mode 100644
index 00000000..ddca343c
--- /dev/null
+++ b/monodoc/Properties/AssemblyInfo.cs
@@ -0,0 +1,6 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+
+[assembly:AssemblyVersion("1.0.0.0")]
+[assembly:AssemblyDelaySign(false)]
+
diff --git a/monodoc/Resources/monodoc.xml b/monodoc/Resources/monodoc.xml
new file mode 100644
index 00000000..94a4b222
--- /dev/null
+++ b/monodoc/Resources/monodoc.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0"?>
+<node label="Mono Documentation" name="libraries">
+ <node label="Commands and Files" name="man" />
+ <node label="Languages" name="languages" />
+ <node label="Tools" name="tools" />
+ <node label="Various" name="various" />
+</node>
diff --git a/monodoc/Test/Monodoc.Generators/RawGeneratorTests.cs b/monodoc/Test/Monodoc.Generators/RawGeneratorTests.cs
index 9af81920..db68971f 100644
--- a/monodoc/Test/Monodoc.Generators/RawGeneratorTests.cs
+++ b/monodoc/Test/Monodoc.Generators/RawGeneratorTests.cs
@@ -14,14 +14,26 @@ namespace MonoTests.Monodoc.Generators
[TestFixture]
public class RawGeneratorTests
{
- const string BaseDir = "../../class/monodoc/Test/monodoc_test/";
+ string BaseDir
+ {
+ get
+ {
+ var baseDir = "../../monodoc_test/";
+ var assemblyLocation = this.GetType ().Assembly.Location;
+ return Path.GetFullPath (
+ Path.Combine (
+ Path.GetDirectoryName (assemblyLocation),
+ baseDir));
+ }
+ }
+
RootTree rootTree;
RawGenerator generator = new RawGenerator ();
[SetUp]
public void Setup ()
{
- rootTree = RootTree.LoadTree (Path.GetFullPath (BaseDir), false);
+ rootTree = RootTree.LoadTree (BaseDir, false);
}
void AssertValidXml (string xml)
diff --git a/monodoc/Test/Monodoc.Test.csproj b/monodoc/Test/Monodoc.Test.csproj
new file mode 100644
index 00000000..fc1a7ccf
--- /dev/null
+++ b/monodoc/Test/Monodoc.Test.csproj
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ <ProjectGuid>{1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <RootNamespace>Monodoc.Test</RootNamespace>
+ <AssemblyName>Monodoc.Test</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>bin\Debug</OutputPath>
+ <DefineConstants>DEBUG;</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <Optimize>true</Optimize>
+ <OutputPath>bin\Release</OutputPath>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="nunit.framework">
+ <HintPath>..\..\packages\NUnit.3.6.0\lib\net45\nunit.framework.dll</HintPath>
+ </Reference>
+ <Reference Include="System.Xml" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="packages.config" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="Monodoc\EcmaDocTests.cs" />
+ <Compile Include="Monodoc\HelpSourceTests.cs" />
+ <Compile Include="Monodoc\NodeTest.cs" />
+ <Compile Include="Monodoc\RootTreeTest.cs" />
+ <Compile Include="Monodoc\SettingsTest.cs" />
+ <Compile Include="Monodoc\TreeTest.cs" />
+ <Compile Include="Monodoc.Ecma\EcmaUrlTests.cs" />
+ <Compile Include="Monodoc.Generators\RawGeneratorTests.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="..\monodoc.csproj">
+ <Project>{6E644802-B579-4037-9809-9CF4C7172C9D}</Project>
+ <Name>monodoc</Name>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+</Project> \ No newline at end of file
diff --git a/monodoc/Test/Monodoc/HelpSourceTests.cs b/monodoc/Test/Monodoc/HelpSourceTests.cs
index 867c9b79..675c31cd 100644
--- a/monodoc/Test/Monodoc/HelpSourceTests.cs
+++ b/monodoc/Test/Monodoc/HelpSourceTests.cs
@@ -17,7 +17,18 @@ namespace MonoTests.Monodoc
[TestFixture]
public class HelpSourceTest
{
- const string BaseDir = "../../class/monodoc/Test/monodoc_test/";
+ string BaseDir
+ {
+ get
+ {
+ var baseDir = "../../monodoc_test/";
+ var assemblyLocation = this.GetType ().Assembly.Location;
+ return Path.GetFullPath (
+ Path.Combine (
+ Path.GetDirectoryName (assemblyLocation),
+ baseDir));
+ }
+ }
class CheckGenerator : IDocGenerator<bool>
{
@@ -67,7 +78,7 @@ namespace MonoTests.Monodoc
[Test]
public void ReachabilityTest ()
{
- var rootTree = RootTree.LoadTree (Path.GetFullPath (BaseDir), false);
+ var rootTree = RootTree.LoadTree (BaseDir, false);
Node result;
var generator = new CheckGenerator ();
int errorCount = 0;
@@ -108,7 +119,7 @@ namespace MonoTests.Monodoc
[Test]
public void ReachabilityWithShortGenericNotationTest ()
{
- var rootTree = RootTree.LoadTree (Path.GetFullPath (BaseDir), false);
+ var rootTree = RootTree.LoadTree (BaseDir, false);
Node result;
var generator = new CheckGenerator ();
@@ -142,7 +153,7 @@ namespace MonoTests.Monodoc
[Test]
public void AspNetStyleUrlReachabilityTest ()
{
- var rootTree = RootTree.LoadTree (Path.GetFullPath (BaseDir), false);
+ var rootTree = RootTree.LoadTree (BaseDir, false);
Node result;
var generator = new CheckGenerator ();
@@ -159,7 +170,7 @@ namespace MonoTests.Monodoc
{
// Unattached help source have no root:/ URL attributed
var hs = new EcmaHelpSource (Path.Combine (BaseDir, "sources", "netdocs"), false);
- var rootTree = RootTree.LoadTree (Path.GetFullPath (BaseDir), false);
+ var rootTree = RootTree.LoadTree (BaseDir, false);
hs.RootTree = rootTree;
Assert.IsNull (hs.Tree.RootNode.PublicUrl);
var nsChildUrl = hs.Tree.RootNode.ChildNodes.First ().PublicUrl;
diff --git a/monodoc/Test/Monodoc/NodeTest.cs b/monodoc/Test/Monodoc/NodeTest.cs
index d7640da9..b3a96cdd 100644
--- a/monodoc/Test/Monodoc/NodeTest.cs
+++ b/monodoc/Test/Monodoc/NodeTest.cs
@@ -12,7 +12,18 @@ namespace MonoTests.Monodoc
[TestFixture]
public class NodeTest
{
- const string BaseDir = "../../class/monodoc/Test/monodoc_test/";
+ string BaseDir
+ {
+ get
+ {
+ var baseDir = "../../monodoc_test/";
+ var assemblyLocation = this.GetType ().Assembly.Location;
+ return Path.GetFullPath (
+ Path.Combine (
+ Path.GetDirectoryName (assemblyLocation),
+ baseDir));
+ }
+ }
[Test]
public void LegacyNodesTest_30 ()
diff --git a/monodoc/Test/Monodoc/RootTreeTest.cs b/monodoc/Test/Monodoc/RootTreeTest.cs
index ea751e32..064dc24f 100644
--- a/monodoc/Test/Monodoc/RootTreeTest.cs
+++ b/monodoc/Test/Monodoc/RootTreeTest.cs
@@ -13,7 +13,18 @@ namespace MonoTests.Monodoc
[TestFixture]
public class RootTreeTest
{
- const string BaseDir = "../../class/monodoc/Test/monodoc_test/";
+ string BaseDir
+ {
+ get
+ {
+ var baseDir = "../../monodoc_test/";
+ var assemblyLocation = this.GetType().Assembly.Location;
+ return Path.GetFullPath(
+ Path.Combine(
+ Path.GetDirectoryName(assemblyLocation),
+ baseDir));
+ }
+ }
RootTree root;
HtmlGenerator generator;
diff --git a/monodoc/Test/Monodoc/TreeTest.cs b/monodoc/Test/Monodoc/TreeTest.cs
index e386e474..c2d1155b 100644
--- a/monodoc/Test/Monodoc/TreeTest.cs
+++ b/monodoc/Test/Monodoc/TreeTest.cs
@@ -12,7 +12,18 @@ namespace MonoTests.Monodoc
[TestFixture]
public class TreeTest
{
- const string BaseDir = "../../class/monodoc/Test/monodoc_test/";
+ string BaseDir
+ {
+ get
+ {
+ var baseDir = "../../monodoc_test/";
+ var assemblyLocation = this.GetType ().Assembly.Location;
+ return Path.GetFullPath (
+ Path.Combine (
+ Path.GetDirectoryName (assemblyLocation),
+ baseDir));
+ }
+ }
[Test]
public void TestLoadingTree_2_10 ()
diff --git a/monodoc/Test/monodoc_test/sources/netdocs.source b/monodoc/Test/monodoc_test/sources/netdocs.source
new file mode 100644
index 00000000..18da2a72
--- /dev/null
+++ b/monodoc/Test/monodoc_test/sources/netdocs.source
@@ -0,0 +1,5 @@
+<?xml version="1.0"?>
+<monodoc>
+ <node label="Base Class Library" name="classlib" parent="libraries" />
+ <source provider="ecma" basefile="netdocs" path="classlib"/>
+</monodoc>
diff --git a/monodoc/Test/monodoc_test/sources/netdocs.tree b/monodoc/Test/monodoc_test/sources/netdocs.tree
new file mode 100644
index 00000000..8ef6521f
--- /dev/null
+++ b/monodoc/Test/monodoc_test/sources/netdocs.tree
Binary files differ
diff --git a/monodoc/Test/monodoc_test/sources/netdocs.zip b/monodoc/Test/monodoc_test/sources/netdocs.zip
new file mode 100644
index 00000000..8e0078f7
--- /dev/null
+++ b/monodoc/Test/monodoc_test/sources/netdocs.zip
Binary files differ
diff --git a/monodoc/Test/packages.config b/monodoc/Test/packages.config
new file mode 100644
index 00000000..f31b731a
--- /dev/null
+++ b/monodoc/Test/packages.config
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+ <package id="NUnit" version="3.6.0" targetFramework="net45" />
+</packages> \ No newline at end of file
diff --git a/monodoc/monodoc.csproj b/monodoc/monodoc.csproj
new file mode 100644
index 00000000..38731c8e
--- /dev/null
+++ b/monodoc/monodoc.csproj
@@ -0,0 +1,711 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <PropertyGroup>
+ <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+ <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+ <ProjectGuid>{6E644802-B579-4037-9809-9CF4C7172C9D}</ProjectGuid>
+ <OutputType>Library</OutputType>
+ <RootNamespace>monodoc</RootNamespace>
+ <AssemblyName>monodoc</AssemblyName>
+ <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
+ <ProductVersion>8.0.30703</ProductVersion>
+ <SchemaVersion>2.0</SchemaVersion>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+ <DebugSymbols>true</DebugSymbols>
+ <DebugType>full</DebugType>
+ <Optimize>false</Optimize>
+ <OutputPath>..\bin\Debug</OutputPath>
+ <DefineConstants>DEBUG;LEGACY_MODE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <ConsolePause>false</ConsolePause>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ </PropertyGroup>
+ <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+ <Optimize>true</Optimize>
+ <OutputPath>..\bin\Release</OutputPath>
+ <DefineConstants>LEGACY_MODE</DefineConstants>
+ <ErrorReport>prompt</ErrorReport>
+ <WarningLevel>4</WarningLevel>
+ <ConsolePause>false</ConsolePause>
+ <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
+ </PropertyGroup>
+ <ItemGroup>
+ <Reference Include="System" />
+ <Reference Include="System.Xml" />
+ <Reference Include="System.Xml.Linq" />
+ <Reference Include="System.Core" />
+ <Reference Include="System.Configuration" />
+ <Reference Include="ICSharpCode.SharpZipLib">
+ <HintPath>..\bin\$(Configuration)\ICSharpCode.SharpZipLib.dll</HintPath>
+ </Reference>
+ </ItemGroup>
+ <ItemGroup>
+ <Folder Include="Properties\" />
+ <Folder Include="Assembly\" />
+ </ItemGroup>
+ <ItemGroup>
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Analyzer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\ASCIIFoldingFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\BaseCharFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\CachingTokenFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\CharArraySet.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\CharFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\CharReader.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\CharStream.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\CharTokenizer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\ISOLatin1AccentFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\KeywordAnalyzer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\KeywordTokenizer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\LengthFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\LetterTokenizer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\LowerCaseFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\LowerCaseTokenizer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\MappingCharFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\NormalizeCharMap.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\NumericTokenStream.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\PerFieldAnalyzerWrapper.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\PorterStemFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\PorterStemmer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\SimpleAnalyzer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Standard\StandardAnalyzer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Standard\StandardFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Standard\StandardTokenizer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Standard\StandardTokenizerImpl.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\StopAnalyzer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\StopFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\TeeSinkTokenFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Token.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Tokenattributes\FlagsAttribute.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Tokenattributes\IFlagsAttribute.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Tokenattributes\IOffsetAttribute.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Tokenattributes\IPayloadAttribute.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Tokenattributes\IPositionIncrementAttribute.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Tokenattributes\ITermAttribute.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Tokenattributes\ITypeAttribute.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Tokenattributes\OffsetAttribute.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Tokenattributes\PayloadAttribute.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Tokenattributes\PositionIncrementAttribute.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Tokenattributes\TermAttribute.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Tokenattributes\TypeAttribute.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\TokenFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\Tokenizer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\TokenStream.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\WhitespaceAnalyzer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\WhitespaceTokenizer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Analysis\WordlistLoader.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Document\AbstractField.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Document\CompressionTools.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Document\DateField.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Document\DateTools.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Document\Document.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Document\Field.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Document\Fieldable.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Document\FieldSelector.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Document\FieldSelectorResult.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Document\LoadFirstFieldSelector.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Document\MapFieldSelector.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Document\NumberTools.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Document\NumericField.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Document\SetBasedFieldSelector.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\AbstractAllTermDocs.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\AllTermDocs.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\BufferedDeletes.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\ByteBlockPool.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\ByteSliceReader.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\ByteSliceWriter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\CharBlockPool.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\CheckIndex.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\CompoundFileReader.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\CompoundFileWriter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\ConcurrentMergeScheduler.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\CorruptIndexException.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DefaultSkipListReader.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DefaultSkipListWriter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DirectoryReader.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DocConsumer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DocConsumerPerThread.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DocFieldConsumer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DocFieldConsumerPerField.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DocFieldConsumerPerThread.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DocFieldConsumers.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DocFieldConsumersPerField.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DocFieldConsumersPerThread.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DocFieldProcessor.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DocFieldProcessorPerField.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DocFieldProcessorPerThread.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DocInverter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DocInverterPerField.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DocInverterPerThread.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DocumentsWriter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\DocumentsWriterThreadState.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FieldInfo.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FieldInfos.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FieldInvertState.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FieldReaderException.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FieldSortedTermVectorMapper.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FieldsReader.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FieldsWriter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FilterIndexReader.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FormatPostingsDocsConsumer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FormatPostingsDocsWriter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FormatPostingsFieldsConsumer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FormatPostingsFieldsWriter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FormatPostingsPositionsConsumer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FormatPostingsPositionsWriter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FormatPostingsTermsConsumer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FormatPostingsTermsWriter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FreqProxFieldMergeState.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FreqProxTermsWriter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FreqProxTermsWriterPerField.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\FreqProxTermsWriterPerThread.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\IndexCommit.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\IndexDeletionPolicy.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\IndexFileDeleter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\IndexFileNameFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\IndexFileNames.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\IndexReader.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\IndexWriter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\IntBlockPool.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\InvertedDocConsumer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\InvertedDocConsumerPerField.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\InvertedDocConsumerPerThread.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\InvertedDocEndConsumer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\InvertedDocEndConsumerPerField.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\InvertedDocEndConsumerPerThread.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\KeepOnlyLastCommitDeletionPolicy.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\LogByteSizeMergePolicy.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\LogDocMergePolicy.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\LogMergePolicy.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\MergeDocIDRemapper.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\MergePolicy.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\MergeScheduler.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\MultiLevelSkipListReader.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\MultiLevelSkipListWriter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\MultipleTermPositions.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\MultiReader.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\NormsWriter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\NormsWriterPerField.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\NormsWriterPerThread.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\ParallelReader.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\Payload.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\PositionBasedTermVectorMapper.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\RawPostingList.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\ReadOnlyDirectoryReader.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\ReadOnlySegmentReader.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\ReusableStringReader.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\SegmentInfo.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\SegmentInfos.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\SegmentMergeInfo.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\SegmentMergeQueue.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\SegmentMerger.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\SegmentReader.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\SegmentTermDocs.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\SegmentTermEnum.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\SegmentTermPositions.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\SegmentTermPositionVector.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\SegmentTermVector.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\SegmentWriteState.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\SerialMergeScheduler.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\SnapshotDeletionPolicy.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\SortedTermVectorMapper.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\StaleReaderException.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\StoredFieldsWriter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\StoredFieldsWriterPerThread.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\Term.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermBuffer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermDocs.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermEnum.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermFreqVector.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermInfo.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermInfosReader.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermInfosWriter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermPositions.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermPositionVector.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermsHash.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermsHashConsumer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermsHashConsumerPerField.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermsHashConsumerPerThread.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermsHashPerField.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermsHashPerThread.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermVectorEntry.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermVectorEntryFreqSortedComparator.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermVectorMapper.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermVectorOffsetInfo.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermVectorsReader.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermVectorsTermsWriter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermVectorsTermsWriterPerField.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermVectorsTermsWriterPerThread.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Index\TermVectorsWriter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\LucenePackage.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\LZOCompressor.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Messages\INLSException.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Messages\Message.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Messages\MessageImpl.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Messages\NLS.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\QueryParser\CharStream.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\QueryParser\FastCharStream.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\QueryParser\MultiFieldQueryParser.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\QueryParser\ParseException.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\QueryParser\QueryParser.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\QueryParser\QueryParserConstants.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\QueryParser\QueryParserTokenManager.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\QueryParser\Token.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\QueryParser\TokenMgrError.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\BooleanClause.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\BooleanQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\BooleanScorer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\BooleanScorer2.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\CachingSpanFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\CachingWrapperFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Collector.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\ComplexExplanation.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\ConjunctionScorer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\ConstantScoreQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\DefaultSimilarity.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\DisjunctionMaxQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\DisjunctionMaxScorer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\DisjunctionSumScorer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\DocIdSet.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\DocIdSetIterator.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\ExactPhraseScorer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Explanation.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\FieldCache.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\FieldCacheImpl.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\FieldCacheRangeFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\FieldCacheTermsFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\FieldComparator.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\FieldComparatorSource.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\FieldDoc.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\FieldDocSortedHitQueue.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\FieldValueHitQueue.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Filter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\FilteredDocIdSet.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\FilteredDocIdSetIterator.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\FilteredQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\FilteredTermEnum.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\FilterManager.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Function\ByteFieldSource.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Function\CustomScoreProvider.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Function\CustomScoreQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Function\DocValues.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Function\FieldCacheSource.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Function\FieldScoreQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Function\FloatFieldSource.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Function\IntFieldSource.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Function\OrdFieldSource.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Function\ReverseOrdFieldSource.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Function\ShortFieldSource.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Function\ValueSource.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Function\ValueSourceQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\FuzzyQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\FuzzyTermEnum.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\HitQueue.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\IndexSearcher.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\MatchAllDocsQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\MultiPhraseQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\MultiSearcher.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\MultiTermQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\MultiTermQueryWrapperFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\NumericRangeFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\NumericRangeQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\ParallelMultiSearcher.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Payloads\AveragePayloadFunction.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Payloads\MaxPayloadFunction.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Payloads\MinPayloadFunction.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Payloads\PayloadFunction.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Payloads\PayloadNearQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Payloads\PayloadSpanUtil.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Payloads\PayloadTermQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\PhrasePositions.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\PhraseQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\PhraseQueue.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\PhraseScorer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\PositiveScoresOnlyCollector.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\PrefixFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\PrefixQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\PrefixTermEnum.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Query.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\QueryTermVector.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\QueryWrapperFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\ReqExclScorer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\ReqOptSumScorer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\ScoreCachingWrappingScorer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\ScoreDoc.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Scorer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Searchable.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Searcher.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Similarity.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\SimilarityDelegator.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\SingleTermEnum.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\SloppyPhraseScorer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Sort.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\SortField.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\SpanFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\SpanFilterResult.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\SpanQueryFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Spans\FieldMaskingSpanQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Spans\NearSpansOrdered.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Spans\NearSpansUnordered.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Spans\SpanFirstQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Spans\SpanNearQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Spans\SpanNotQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Spans\SpanOrQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Spans\SpanQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Spans\Spans.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Spans\SpanScorer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Spans\SpanTermQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Spans\SpanWeight.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Spans\TermSpans.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\TermQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\TermRangeFilter.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\TermRangeQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\TermRangeTermEnum.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\TermScorer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\TimeLimitingCollector.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\TopDocs.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\TopDocsCollector.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\TopFieldCollector.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\TopFieldDocs.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\TopScoreDocCollector.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\Weight.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\WildcardQuery.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Search\WildcardTermEnum.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\AlreadyClosedException.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\BufferedIndexInput.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\BufferedIndexOutput.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\CheckSumIndexInput.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\CheckSumIndexOutput.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\Directory.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\FileSwitchDirectory.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\FSDirectory.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\FSLockFactory.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\IndexInput.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\IndexOutput.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\Lock.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\LockFactory.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\LockObtainFailedException.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\LockReleaseFailedException.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\LockStressTest.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\LockVerifyServer.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\MMapDirectory.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\NativeFSLockFactory.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\NIOFSDirectory.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\NoLockFactory.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\NoSuchDirectoryException.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\RAMDirectory.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\RAMFile.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\RAMInputStream.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\RAMOutputStream.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\SimpleFSDirectory.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\SimpleFSLockFactory.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\SingleInstanceLockFactory.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Store\VerifyingLockFactory.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\AppSettings.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\AttributeImplItem.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\BitSetSupport.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\BuildType.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\Character.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\CloseableThreadLocalProfiler.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\CollectionsHelper.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\Compare.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\Compatibility\ConcurrentDictionary.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\Compatibility\Func.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\Compatibility\ISet.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\Compatibility\SetFactory.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\Compatibility\SortedSet.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\Compatibility\ThreadLocal.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\Compatibility\WrappedHashSet.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\CRC32.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\Cryptography.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\Deflater.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\Double.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\EquatableList.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\FileSupport.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\GeneralKeyedCollection.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\HashMap.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\IChecksum.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\Inflater.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\IThreadRunnable.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\Number.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\OS.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\SharpZipLib.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\Single.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\TextSupport.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\ThreadClass.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\ThreadLock.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Support\WeakDictionary.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\ArrayUtil.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\Attribute.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\AttributeSource.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\AverageGuessMemoryModel.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\BitUtil.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\BitVector.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\Cache\Cache.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\Cache\SimpleLRUCache.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\Cache\SimpleMapCache.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\CloseableThreadLocal.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\Constants.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\DocIdBitSet.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\FieldCacheSanityChecker.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\IAttribute.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\IdentityDictionary.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\IndexableBinaryStringTools.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\MapOfSets.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\MemoryModel.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\NumericUtils.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\OpenBitSet.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\OpenBitSetDISI.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\OpenBitSetIterator.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\PriorityQueue.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\RamUsageEstimator.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\ReaderUtil.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\ScorerDocQueue.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\SimpleStringInterner.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\SmallFloat.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\SortedVIntList.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\SorterTemplate.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\StringHelper.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\StringInterner.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\ToStringUtils.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\UnicodeUtil.cs" />
+ <Compile Include="..\external\Lucene.Net.Light\src\core\Util\Version.cs" />
+ <Compile Include="Mono.Documentation\ManifestResourceResolver.cs" />
+ <Compile Include="Mono.Documentation\XmlDocUtils.cs" />
+ <Compile Include="Mono.Utilities\LRUCache.cs" />
+ <Compile Include="Mono.Utilities\colorizer.cs" />
+ <Compile Include="Monodoc\HelpSource.cs" />
+ <Compile Include="Monodoc\HelpSource_Legacy.cs" />
+ <Compile Include="Monodoc\Node.cs" />
+ <Compile Include="Monodoc\Node_Legacy.cs" />
+ <Compile Include="Monodoc\Provider.cs" />
+ <Compile Include="Monodoc\RootTree.cs" />
+ <Compile Include="Monodoc\RootTree_Legacy.cs" />
+ <Compile Include="Monodoc\SearchableDocument.cs" />
+ <Compile Include="Monodoc\SearchableIndex.cs" />
+ <Compile Include="Monodoc\Tree.cs" />
+ <Compile Include="Monodoc\TypeUtils.cs" />
+ <Compile Include="Monodoc\cache.cs" />
+ <Compile Include="Monodoc\generator.cs" />
+ <Compile Include="Monodoc\index.cs" />
+ <Compile Include="Monodoc\settings.cs" />
+ <Compile Include="Monodoc\settings_Legacy.cs" />
+ <Compile Include="Monodoc\storage.cs" />
+ <Compile Include="Monodoc\caches\FileCache.cs" />
+ <Compile Include="Monodoc\caches\NullCache.cs" />
+ <Compile Include="Monodoc\generators\HtmlGenerator.cs" />
+ <Compile Include="Monodoc\generators\RawGenerator.cs" />
+ <Compile Include="Monodoc\generators\html\Addin2Html.cs" />
+ <Compile Include="Monodoc\generators\html\Ecma2Html.cs" />
+ <Compile Include="Monodoc\generators\html\Ecmaspec2Html.cs" />
+ <Compile Include="Monodoc\generators\html\Error2Html.cs" />
+ <Compile Include="Monodoc\generators\html\Idem.cs" />
+ <Compile Include="Monodoc\generators\html\Man2Html.cs" />
+ <Compile Include="Monodoc\generators\html\MonoBook2Html.cs" />
+ <Compile Include="Monodoc\generators\html\Toc2Html.cs" />
+ <Compile Include="Monodoc\providers\EcmaDoc.cs" />
+ <Compile Include="Monodoc\providers\addins-provider.cs" />
+ <Compile Include="Monodoc\providers\ecma-provider.cs" />
+ <Compile Include="Monodoc\providers\ecmaspec-provider.cs" />
+ <Compile Include="Monodoc\providers\ecmauncompiled-provider.cs" />
+ <Compile Include="Monodoc\providers\error-provider.cs" />
+ <Compile Include="Monodoc\providers\man-provider.cs" />
+ <Compile Include="Monodoc\providers\xhtml-provider.cs" />
+ <Compile Include="Monodoc\storage\NullStorage.cs" />
+ <Compile Include="Monodoc\storage\UncompiledDocStorage.cs" />
+ <Compile Include="Monodoc\storage\ZipStorage.cs" />
+ <Compile Include="Monodoc.Ecma\EcmaDesc.cs" />
+ <Compile Include="Monodoc.Ecma\EcmaUrlTokenizer.cs" />
+ <Compile Include="Monodoc.Ecma\prebuilt\EcmaUrlParser.cs" />
+ <Compile Include="Properties\AssemblyInfo.cs" />
+ </ItemGroup>
+ <ItemGroup>
+ <EmbeddedResource Include="Resources/monodoc.xml">
+ <LogicalName>monodoc.xml</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/base.css">
+ <LogicalName>base.css</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/ecmaspec-html-css.xsl">
+ <LogicalName>ecmaspec-html-css.xsl</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/ecmaspec-html.xsl">
+ <LogicalName>ecmaspec-html.xsl</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/ecmaspec.css">
+ <LogicalName>ecmaspec.css</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/helper.js">
+ <LogicalName>helper.js</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/home.html">
+ <LogicalName>home.html</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/Lminus.gif">
+ <LogicalName>Lminus.gif</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/Lplus.gif">
+ <LogicalName>Lplus.gif</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/creativecommons.png">
+ <LogicalName>creativecommons.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/mdoc-html-format.xsl">
+ <LogicalName>mdoc-html-format.xsl</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/mdoc-html-utils.xsl">
+ <LogicalName>mdoc-html-utils.xsl</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/mdoc-sections-css.xsl">
+ <LogicalName>mdoc-sections-css.xsl</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/mdoc-sections.xsl">
+ <LogicalName>mdoc-sections.xsl</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/mono-ecma-css.xsl">
+ <LogicalName>mono-ecma-css.xsl</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/mono-ecma-impl.xsl">
+ <LogicalName>mono-ecma-impl.xsl</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/mono-ecma.css">
+ <LogicalName>mono-ecma.css</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/mono-ecma.xsl">
+ <LogicalName>mono-ecma.xsl</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/toc-html.xsl">
+ <LogicalName>toc-html.xsl</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/bc_bg.png">
+ <LogicalName>bc_bg.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/bc_separator.png">
+ <LogicalName>bc_separator.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/error.png">
+ <LogicalName>error.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/hatch.png">
+ <LogicalName>hatch.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/headerbg.png">
+ <LogicalName>headerbg.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/help.png">
+ <LogicalName>help.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/house.png">
+ <LogicalName>house.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/members.png">
+ <LogicalName>members.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/namespace.png">
+ <LogicalName>namespace.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/privclass.png">
+ <LogicalName>privclass.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/privdelegate.png">
+ <LogicalName>privdelegate.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/privenumeration.png">
+ <LogicalName>privenumeration.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/privevent.png">
+ <LogicalName>privevent.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/privextension.png">
+ <LogicalName>privextension.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/privfield.png">
+ <LogicalName>privfield.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/privinterface.png">
+ <LogicalName>privinterface.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/privmethod.png">
+ <LogicalName>privmethod.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/privproperty.png">
+ <LogicalName>privproperty.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/privstructure.png">
+ <LogicalName>privstructure.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/protclass.png">
+ <LogicalName>protclass.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/protdelegate.png">
+ <LogicalName>protdelegate.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/protenumeration.png">
+ <LogicalName>protenumeration.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/protevent.png">
+ <LogicalName>protevent.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/protextension.png">
+ <LogicalName>protextension.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/protfield.png">
+ <LogicalName>protfield.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/protinterface.png">
+ <LogicalName>protinterface.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/protmethod.png">
+ <LogicalName>protmethod.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/protproperty.png">
+ <LogicalName>protproperty.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/protstructure.png">
+ <LogicalName>protstructure.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/pubclass.png">
+ <LogicalName>pubclass.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/pubdelegate.png">
+ <LogicalName>pubdelegate.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/pubenumeration.png">
+ <LogicalName>pubenumeration.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/pubevent.png">
+ <LogicalName>pubevent.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/pubextension.png">
+ <LogicalName>pubextension.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/pubfield.png">
+ <LogicalName>pubfield.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/pubinterface.png">
+ <LogicalName>pubinterface.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/pubmethod.png">
+ <LogicalName>pubmethod.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/pubproperty.png">
+ <LogicalName>pubproperty.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/pubstructure.png">
+ <LogicalName>pubstructure.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/reference.png">
+ <LogicalName>reference.png</LogicalName>
+ </EmbeddedResource>
+ <EmbeddedResource Include="Resources/images/treebg.png">
+ <LogicalName>treebg.png</LogicalName>
+ </EmbeddedResource>
+ </ItemGroup>
+ <ItemGroup>
+ <Content Include="monodoc.dll.config">
+ <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+ </Content>
+ </ItemGroup>
+ <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
+</Project> \ No newline at end of file
diff --git a/monodoc/monodoc.dll.config.in b/monodoc/monodoc.dll.config
index 5115f4cc..20055ea6 100644
--- a/monodoc/monodoc.dll.config.in
+++ b/monodoc/monodoc.dll.config
@@ -1,7 +1,8 @@
-<configuration>
+<configuration>
<appSettings>
<add key="docPath" value="@monodoc_refdir@" />
<add key="docExternalPath" value="" />
<!-- <add key="cache" value="file,~/path/to/cache/directory" /> -->
</appSettings>
</configuration>
+c \ No newline at end of file