diff options
author | Joel Martinez <joelmartinez@gmail.com> | 2017-02-02 23:58:12 +0300 |
---|---|---|
committer | Joel Martinez <joelmartinez@gmail.com> | 2017-02-03 23:27:54 +0300 |
commit | ad2c3d943ceb2c962aef7e42872ff689a6e72791 (patch) | |
tree | e934ad99e5c343531ca270242366fa73b4dd610c | |
parent | 42950d5b1af0b7107118a0ef8f4e74218cc1dfba (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.
31 files changed, 3542 insertions, 276 deletions
@@ -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 Binary files differnew file mode 100644 index 00000000..8ef6521f --- /dev/null +++ b/monodoc/Test/monodoc_test/sources/netdocs.tree diff --git a/monodoc/Test/monodoc_test/sources/netdocs.zip b/monodoc/Test/monodoc_test/sources/netdocs.zip Binary files differnew file mode 100644 index 00000000..8e0078f7 --- /dev/null +++ b/monodoc/Test/monodoc_test/sources/netdocs.zip 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 |