diff --git a/Makefile.am b/Makefile.am index ede7695649..031ef3a116 100644 --- a/Makefile.am +++ b/Makefile.am @@ -50,14 +50,9 @@ noinst_DATA = mono-uninstalled.pc DISTCLEANFILES= mono-uninstalled.pc # building with monolite -mcslib = $(mcs_topdir)/class/lib -monolite_url = https://download.mono-project.com/monolite/monolite-$(MONO_CORLIB_VERSION)-latest.tar.gz .PHONY: get-monolite-latest get-monolite-latest: - -rm -fr $(mcslib)/monolite/$(MONO_CORLIB_VERSION) - -mkdir -p $(mcslib)/monolite - cd $(mcslib) && { (wget -O- $(monolite_url) || curl -L $(monolite_url)) | gzip -d | tar xf - ; } - cd $(mcslib) && mv -f monolite-* monolite/$(MONO_CORLIB_VERSION) + $(MAKE) -C $(mcs_topdir)/class get-monolite-latest if BITCODE BITCODE_CHECK=yes diff --git a/Makefile.in b/Makefile.in index 20b833affd..bfa0c35cba 100644 --- a/Makefile.in +++ b/Makefile.in @@ -298,7 +298,6 @@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MONO_CORLIB_VERSION = @MONO_CORLIB_VERSION@ MONO_DL_NEED_USCORE = @MONO_DL_NEED_USCORE@ -MONO_NACL_ALIGN_MASK_OFF = @MONO_NACL_ALIGN_MASK_OFF@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ @@ -396,7 +395,6 @@ mkdir_p = @mkdir_p@ mono_build_root = @mono_build_root@ mono_cfg_dir = @mono_cfg_dir@ mono_runtime = @mono_runtime@ -nacl_self_host = @nacl_self_host@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ @@ -442,10 +440,6 @@ DISTCHECK_CONFIGURE_FLAGS = EXTERNAL_MCS=false EXTERNAL_RUNTIME=false pkgconfigdir = $(libdir)/pkgconfig noinst_DATA = mono-uninstalled.pc DISTCLEANFILES = mono-uninstalled.pc - -# building with monolite -mcslib = $(mcs_topdir)/class/lib -monolite_url = https://download.mono-project.com/monolite/monolite-$(MONO_CORLIB_VERSION)-latest.tar.gz @BITCODE_TRUE@BITCODE_CHECK = yes all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive @@ -948,12 +942,11 @@ dist-hook: rm -rf `find $(top_distdir)/external -path '*\.git'` rm -f `find $(top_distdir)/external -path '*\.exe' -not -path '*/roslyn-binaries/*'` rm -f `find $(top_distdir)/external -path '*\.dll' -not -path '*/binary-reference-assemblies/*' -not -path '*/roslyn-binaries/*'` + +# building with monolite .PHONY: get-monolite-latest get-monolite-latest: - -rm -fr $(mcslib)/monolite/$(MONO_CORLIB_VERSION) - -mkdir -p $(mcslib)/monolite - cd $(mcslib) && { (wget -O- $(monolite_url) || curl -L $(monolite_url)) | gzip -d | tar xf - ; } - cd $(mcslib) && mv -f monolite-* monolite/$(MONO_CORLIB_VERSION) + $(MAKE) -C $(mcs_topdir)/class get-monolite-latest .PHONY: check-ci check-ci: diff --git a/README.md b/README.md index 87b0113750..bd25f4ab24 100644 --- a/README.md +++ b/README.md @@ -193,22 +193,18 @@ disable the compilation of a Mono runtime with the SGen garbage collector. * On platforms that support it, after building Mono, you will have -both a `mono` binary and a `mono-sgen` binary. `mono` uses Boehm, +both a `mono-boehm` binary and a `mono-sgen` binary. `mono-boehm` uses Boehm, while `mono-sgen` uses the Simple Generational GC. -* `--with-gc=[included, boehm, none]` - Selects the default Boehm +* `--with-libgc=[included, none]` - Selects the default Boehm garbage collector engine to use. * *included*: (*slightly modified Boehm GC*) This is the default value for the Boehm GC, and it's the most feature complete, it will allow Mono to use typed allocations and support the debugger. - * *boehm*: This is used to use a system-install Boehm GC, it is -useful to test new features available in Boehm GC, but we do not -recommend that people use this, as it disables a few features. - * *none*: -Disables the inclusion of a garbage collector. +Disables the inclusion of a Boehm garbage collector. * This defaults to `included`. diff --git a/acceptance-tests/Makefile.in.REMOVED.git-id b/acceptance-tests/Makefile.in.REMOVED.git-id index 2b9eb44151..0acbf3a931 100644 --- a/acceptance-tests/Makefile.in.REMOVED.git-id +++ b/acceptance-tests/Makefile.in.REMOVED.git-id @@ -1 +1 @@ -1d85af9de41fd599926a3a180bdd0b2f2afe2fae \ No newline at end of file +7bda83765428ece9c74652f308a40e471958d84d \ No newline at end of file diff --git a/config.h.in b/config.h.in index 8ef567c3e9..5f858631ca 100644 --- a/config.h.in +++ b/config.h.in @@ -106,9 +106,6 @@ /* Disable SIMD intrinsics related optimizations. */ #undef DISABLE_SIMD -/* Disable sockets support */ -#undef DISABLE_SOCKETS - /* Disable Soft Debugger Agent. */ #undef DISABLE_SOFT_DEBUG @@ -467,9 +464,6 @@ /* Define to 1 if you have the header file. */ #undef HAVE_LIBPROC_H -/* Define to 1 if you have the `unwind' library (-lunwind). */ -#undef HAVE_LIBUNWIND - /* Define to 1 if you have the header file. */ #undef HAVE_LINK_H @@ -527,9 +521,6 @@ /* Have MSG_NOSIGNAL */ #undef HAVE_MSG_NOSIGNAL -/* Define to 1 if you have the header file. */ -#undef HAVE_NACL_NACL_DYNCODE_H - /* Define to 1 if you have the header file. */ #undef HAVE_NETDB_H @@ -545,6 +536,9 @@ /* No GC support. */ #undef HAVE_NULL_GC +/* Some VES is available at runtime */ +#undef HAVE_ONLINE_VES + /* Define to 1 if you have the header file. */ #undef HAVE_PATHCONF_H @@ -1013,9 +1007,6 @@ /* ... */ #undef HOST_ARM64 -/* ... */ -#undef HOST_IA64 - /* ... */ #undef HOST_MIPS @@ -1154,9 +1145,6 @@ /* byte order of target */ #undef TARGET_BYTE_ORDER -/* ... */ -#undef TARGET_IA64 - /* The JIT/AOT targets iOS */ #undef TARGET_IOS @@ -1166,9 +1154,6 @@ /* ... */ #undef TARGET_MIPS -/* ... */ -#undef TARGET_NACL - /* The JIT/AOT targets OSX */ #undef TARGET_OSX @@ -1240,6 +1225,3 @@ /* ... */ #undef __mono_ppc64__ - -/* ... */ -#undef __native_client_codegen__ diff --git a/configure.REMOVED.git-id b/configure.REMOVED.git-id index 4868c172d0..8167da4c8e 100644 --- a/configure.REMOVED.git-id +++ b/configure.REMOVED.git-id @@ -1 +1 @@ -c85570f19627791a8b2715a6dcda5a9801ef05da \ No newline at end of file +4983f549ffc7653871992231faccc651ea216755 \ No newline at end of file diff --git a/configure.ac.REMOVED.git-id b/configure.ac.REMOVED.git-id index 9e01da71e6..64d692c950 100644 --- a/configure.ac.REMOVED.git-id +++ b/configure.ac.REMOVED.git-id @@ -1 +1 @@ -100cd2f08179a21f754d122f515a1708512b0190 \ No newline at end of file +db56ea81331da24e34c3ea02e0cc19e0c3330fb4 \ No newline at end of file diff --git a/data/Makefile.in b/data/Makefile.in index 9f6eaa7ea3..6cd275d0b8 100644 --- a/data/Makefile.in +++ b/data/Makefile.in @@ -321,7 +321,6 @@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MONO_CORLIB_VERSION = @MONO_CORLIB_VERSION@ MONO_DL_NEED_USCORE = @MONO_DL_NEED_USCORE@ -MONO_NACL_ALIGN_MASK_OFF = @MONO_NACL_ALIGN_MASK_OFF@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ @@ -419,7 +418,6 @@ mkdir_p = @mkdir_p@ mono_build_root = @mono_build_root@ mono_cfg_dir = @mono_cfg_dir@ mono_runtime = @mono_runtime@ -nacl_self_host = @nacl_self_host@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ diff --git a/data/net_2_0/Browsers/Makefile.in b/data/net_2_0/Browsers/Makefile.in index 5b52ff52d2..a4001f4f9c 100644 --- a/data/net_2_0/Browsers/Makefile.in +++ b/data/net_2_0/Browsers/Makefile.in @@ -243,7 +243,6 @@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MONO_CORLIB_VERSION = @MONO_CORLIB_VERSION@ MONO_DL_NEED_USCORE = @MONO_DL_NEED_USCORE@ -MONO_NACL_ALIGN_MASK_OFF = @MONO_NACL_ALIGN_MASK_OFF@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ @@ -341,7 +340,6 @@ mkdir_p = @mkdir_p@ mono_build_root = @mono_build_root@ mono_cfg_dir = @mono_cfg_dir@ mono_runtime = @mono_runtime@ -nacl_self_host = @nacl_self_host@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ diff --git a/data/net_2_0/Makefile.in b/data/net_2_0/Makefile.in index 9cb5adfdc5..2da1332b39 100644 --- a/data/net_2_0/Makefile.in +++ b/data/net_2_0/Makefile.in @@ -303,7 +303,6 @@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MONO_CORLIB_VERSION = @MONO_CORLIB_VERSION@ MONO_DL_NEED_USCORE = @MONO_DL_NEED_USCORE@ -MONO_NACL_ALIGN_MASK_OFF = @MONO_NACL_ALIGN_MASK_OFF@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ @@ -401,7 +400,6 @@ mkdir_p = @mkdir_p@ mono_build_root = @mono_build_root@ mono_cfg_dir = @mono_cfg_dir@ mono_runtime = @mono_runtime@ -nacl_self_host = @nacl_self_host@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ diff --git a/data/net_4_0/Browsers/Makefile.in b/data/net_4_0/Browsers/Makefile.in index 347849f623..b3ccb7a304 100644 --- a/data/net_4_0/Browsers/Makefile.in +++ b/data/net_4_0/Browsers/Makefile.in @@ -243,7 +243,6 @@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MONO_CORLIB_VERSION = @MONO_CORLIB_VERSION@ MONO_DL_NEED_USCORE = @MONO_DL_NEED_USCORE@ -MONO_NACL_ALIGN_MASK_OFF = @MONO_NACL_ALIGN_MASK_OFF@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ @@ -341,7 +340,6 @@ mkdir_p = @mkdir_p@ mono_build_root = @mono_build_root@ mono_cfg_dir = @mono_cfg_dir@ mono_runtime = @mono_runtime@ -nacl_self_host = @nacl_self_host@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ diff --git a/data/net_4_0/Makefile.in b/data/net_4_0/Makefile.in index 2866af19d2..d01803997e 100644 --- a/data/net_4_0/Makefile.in +++ b/data/net_4_0/Makefile.in @@ -303,7 +303,6 @@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MONO_CORLIB_VERSION = @MONO_CORLIB_VERSION@ MONO_DL_NEED_USCORE = @MONO_DL_NEED_USCORE@ -MONO_NACL_ALIGN_MASK_OFF = @MONO_NACL_ALIGN_MASK_OFF@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ @@ -401,7 +400,6 @@ mkdir_p = @mkdir_p@ mono_build_root = @mono_build_root@ mono_cfg_dir = @mono_cfg_dir@ mono_runtime = @mono_runtime@ -nacl_self_host = @nacl_self_host@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ diff --git a/data/net_4_5/Browsers/Makefile.in b/data/net_4_5/Browsers/Makefile.in index 29b3625908..aad36a164a 100644 --- a/data/net_4_5/Browsers/Makefile.in +++ b/data/net_4_5/Browsers/Makefile.in @@ -243,7 +243,6 @@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MONO_CORLIB_VERSION = @MONO_CORLIB_VERSION@ MONO_DL_NEED_USCORE = @MONO_DL_NEED_USCORE@ -MONO_NACL_ALIGN_MASK_OFF = @MONO_NACL_ALIGN_MASK_OFF@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ @@ -341,7 +340,6 @@ mkdir_p = @mkdir_p@ mono_build_root = @mono_build_root@ mono_cfg_dir = @mono_cfg_dir@ mono_runtime = @mono_runtime@ -nacl_self_host = @nacl_self_host@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ diff --git a/data/net_4_5/Makefile.in b/data/net_4_5/Makefile.in index 2231b39273..73a01b98a7 100644 --- a/data/net_4_5/Makefile.in +++ b/data/net_4_5/Makefile.in @@ -303,7 +303,6 @@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MONO_CORLIB_VERSION = @MONO_CORLIB_VERSION@ MONO_DL_NEED_USCORE = @MONO_DL_NEED_USCORE@ -MONO_NACL_ALIGN_MASK_OFF = @MONO_NACL_ALIGN_MASK_OFF@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ @@ -401,7 +400,6 @@ mkdir_p = @mkdir_p@ mono_build_root = @mono_build_root@ mono_cfg_dir = @mono_cfg_dir@ mono_runtime = @mono_runtime@ -nacl_self_host = @nacl_self_host@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ diff --git a/docs/Makefile.in b/docs/Makefile.in index f27d60913b..43ad3c846d 100644 --- a/docs/Makefile.in +++ b/docs/Makefile.in @@ -243,7 +243,6 @@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MONO_CORLIB_VERSION = @MONO_CORLIB_VERSION@ MONO_DL_NEED_USCORE = @MONO_DL_NEED_USCORE@ -MONO_NACL_ALIGN_MASK_OFF = @MONO_NACL_ALIGN_MASK_OFF@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ @@ -341,7 +340,6 @@ mkdir_p = @mkdir_p@ mono_build_root = @mono_build_root@ mono_cfg_dir = @mono_cfg_dir@ mono_runtime = @mono_runtime@ -nacl_self_host = @nacl_self_host@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ diff --git a/docs/deploy/mono-api-embedding.html b/docs/deploy/mono-api-embedding.html index 79e20fa403..4d40f910fe 100644 --- a/docs/deploy/mono-api-embedding.html +++ b/docs/deploy/mono-api-embedding.html @@ -873,7 +873,7 @@ mono_set_break_policy (MonoBreakPolicyFunc policy_callback)

Parameters
policy_callback the new callback function
Description
-

Allow embedders to decide wherther to actually obey breakpoint instructions (both break IL instructions and Debugger.Break method calls), for example to not allow an app to be aborted by a perfectly valid IL opcode when executing untrusted or semi-trusted code.

policy_callback will be called every time a break point instruction needs to be inserted with the method argument being the method that calls Debugger.Break or has the IL break instruction. The callback should return MONO_BREAK_POLICY_NEVER if it wants the breakpoint to not be effective in the given method. MONO_BREAK_POLICY_ALWAYS is the default.

+

Allow embedders to decide whether to actually obey breakpoint instructions (both break IL instructions and Debugger.Break method calls), for example to not allow an app to be aborted by a perfectly valid IL opcode when executing untrusted or semi-trusted code.

policy_callback will be called every time a break point instruction needs to be inserted with the method argument being the method that calls Debugger.Break or has the IL break instruction. The callback should return MONO_BREAK_POLICY_NEVER if it wants the breakpoint to not be effective in the given method. MONO_BREAK_POLICY_ALWAYS is the default.

diff --git a/docs/deploy/mono-api-exc.html b/docs/deploy/mono-api-exc.html index 100cb1d8ba..1aeff4837d 100644 --- a/docs/deploy/mono-api-exc.html +++ b/docs/deploy/mono-api-exc.html @@ -242,13 +242,13 @@ mono_raise_exception (MonoException *ex)
Syntax
void -mono_unhandled_exception (MonoObject *exc) +mono_unhandled_exception_checked (MonoObjectHandle exc, MonoError *error)

Parameters
exc exception thrown
Description
-
This is a VM internal routine.

We call this function when we detect an unhandled exception in the default domain.

It invokes the UnhandledException event in AppDomain or prints a warning to the console

+

This is a VM internal routine.

We call this function when we detect an unhandled exception in the default domain.

It invokes the * UnhandledException event in AppDomain or prints a warning to the console

diff --git a/docs/deploy/mono-api-internal.html b/docs/deploy/mono-api-internal.html index 3cf88ad965..b84470ffdf 100644 --- a/docs/deploy/mono-api-internal.html +++ b/docs/deploy/mono-api-internal.html @@ -286,7 +286,7 @@ mono_unicode_from_external (const gchar *in, gsize *bytes)
Syntax
void* -mono_marshal_alloc (gulong size, MonoError *error) +mono_marshal_alloc (gsize size, MonoError *error)

diff --git a/docs/deploy/mono-api-reflection.html b/docs/deploy/mono-api-reflection.html index b768c7b527..97e48f58c6 100644 --- a/docs/deploy/mono-api-reflection.html +++ b/docs/deploy/mono-api-reflection.html @@ -281,7 +281,7 @@ mono_reflection_get_custom_attrs_blob (MonoReflectionAssembly *assembly, MonoObj

Syntax
MonoArray* -mono_reflection_get_custom_attrs_by_type (MonoObject *obj, MonoClass *attr_klass, MonoError *error) +mono_reflection_get_custom_attrs_by_type (MonoObject *obj_raw, MonoClass *attr_klass, MonoError *error)

@@ -306,7 +306,7 @@ mono_reflection_get_custom_attrs_by_type (MonoObject *obj, MonoClass *attr_klass

Syntax
MonoArray* -mono_reflection_get_custom_attrs_data (MonoObject *obj) +mono_reflection_get_custom_attrs_data (MonoObject *obj_raw)

@@ -330,7 +330,7 @@ mono_reflection_get_custom_attrs_data (MonoObject *obj)

Syntax
MonoArray* -mono_reflection_get_custom_attrs (MonoObject *obj) +mono_reflection_get_custom_attrs (MonoObject *obj_raw)

@@ -457,7 +457,7 @@ mono_reflection_type_from_name (char *name, MonoImage *image)

Syntax
MonoCustomAttrInfo* -mono_reflection_get_custom_attrs_info (MonoObject *obj) +mono_reflection_get_custom_attrs_info (MonoObject *obj_raw)

diff --git a/eglib/src/eglib-config.h.in b/eglib/src/eglib-config.h.in index ae7b6d4533..71797575e6 100644 --- a/eglib/src/eglib-config.h.in +++ b/eglib/src/eglib-config.h.in @@ -32,7 +32,7 @@ typedef signed @GSIZE@ gssize; #define G_HAVE_ISO_VARARGS #endif -#if defined (__native_client__) || defined (HOST_WATCHOS) +#if defined (HOST_WATCHOS) #undef G_BREAKPOINT #define G_BREAKPOINT() #endif diff --git a/eglib/src/eglib-remap.h b/eglib/src/eglib-remap.h index 5c918d25da..311c06a210 100644 --- a/eglib/src/eglib-remap.h +++ b/eglib/src/eglib-remap.h @@ -15,6 +15,8 @@ #define g_byte_array_append monoeg_g_byte_array_append #define g_byte_array_free monoeg_g_byte_array_free #define g_byte_array_new monoeg_g_byte_array_new +#define g_byte_array_set_size monoeg_g_byte_array_set_size +#define g_calloc monoeg_g_calloc #define g_clear_error monoeg_g_clear_error #define g_convert monoeg_g_convert #define g_convert_error_quark monoeg_g_convert_error_quark @@ -25,6 +27,7 @@ #define g_mkdir_with_parents monoeg_g_mkdir_with_parents #define g_direct_equal monoeg_g_direct_equal #define g_direct_hash monoeg_g_direct_hash +#define g_ensure_directory_exists monoeg_g_ensure_directory_exists #define g_error_free monoeg_g_error_free #define g_error_new monoeg_g_error_new #define g_error_vnew monoeg_g_error_vnew @@ -48,6 +51,7 @@ #define g_get_tmp_dir monoeg_g_get_tmp_dir #define g_get_user_name monoeg_g_get_user_name #define g_getenv monoeg_g_getenv +#define g_hasenv monoeg_g_hasenv #define g_hash_table_destroy monoeg_g_hash_table_destroy #define g_hash_table_find monoeg_g_hash_table_find #define g_hash_table_foreach monoeg_g_hash_table_foreach @@ -107,6 +111,8 @@ #define g_markup_parse_context_new monoeg_g_markup_parse_context_new #define g_markup_parse_context_parse monoeg_g_markup_parse_context_parse #define g_memdup monoeg_g_memdup +#define g_mem_set_vtable monoeg_g_mem_set_vtable +#define g_mkdtemp monoeg_g_mkdtemp #define g_module_build_path monoeg_g_module_build_path #define g_module_close monoeg_g_module_close #define g_module_error monoeg_g_module_error @@ -251,6 +257,7 @@ #define g_utf8_offset_to_pointer monoeg_g_utf8_offset_to_pointer #define g_utf8_pointer_to_offset monoeg_g_utf8_pointer_to_offset #define g_utf8_to_ucs4_fast monoeg_g_utf8_to_ucs4_fast +#define g_vasprintf monoeg_g_vasprintf #define g_win32_getlocale monoeg_g_win32_getlocale #define g_assertion_message monoeg_assertion_message #define g_malloc monoeg_malloc diff --git a/eglib/src/gfile-posix.c b/eglib/src/gfile-posix.c index 49ee58a142..48a9192ab6 100644 --- a/eglib/src/gfile-posix.c +++ b/eglib/src/gfile-posix.c @@ -154,15 +154,6 @@ g_file_open_tmp (const gchar *tmpl, gchar **name_used, GError **error) gchar * g_get_current_dir (void) { -#ifdef __native_client__ - char *buffer; - if ((buffer = g_getenv("NACL_PWD"))) { - buffer = g_strdup(buffer); - } else { - buffer = g_strdup("."); - } - return buffer; -#else int s = 32; char *buffer = NULL, *r; gboolean fail; @@ -181,5 +172,4 @@ g_get_current_dir (void) * so we return the buffer here since it has a pointer to the valid string */ return buffer; -#endif } diff --git a/external/api-doc-tools/.gitignore b/external/api-doc-tools/.gitignore new file mode 100644 index 0000000000..a17c4e7010 --- /dev/null +++ b/external/api-doc-tools/.gitignore @@ -0,0 +1,12 @@ +/Test/en.*/ +/Test/html.*/ +/Test/DocTest.* +/.v2.txt +/.v0.txt +packages +NUnit.* +TestResult.xml +*.userprefs +*.user +bin +obj diff --git a/external/api-doc-tools/.gitmodules b/external/api-doc-tools/.gitmodules new file mode 100644 index 0000000000..c2dfb35ef2 --- /dev/null +++ b/external/api-doc-tools/.gitmodules @@ -0,0 +1,6 @@ +[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 diff --git a/external/api-doc-tools/Makefile b/external/api-doc-tools/Makefile new file mode 100644 index 0000000000..00dad548ec --- /dev/null +++ b/external/api-doc-tools/Makefile @@ -0,0 +1,27 @@ +MSBUILD = msbuild +CONFIGURATION = Release +BIN = bin/$(CONFIGURATION) +MDOC = $(BIN)/mdoc.exe + +all: build + +build: $(MDOC) + +$(MDOC): + $(MSBUILD) apidoctools.sln /p:Configuration=$(CONFIGURATION) + +prepare: + git submodule update --init --recursive + nuget restore apidoctools.sln + +clean: + $(MSBUILD) apidoctools.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/external/api-doc-tools/README.md b/external/api-doc-tools/README.md new file mode 100644 index 0000000000..d68caa7b86 --- /dev/null +++ b/external/api-doc-tools/README.md @@ -0,0 +1,22 @@ +# `mdoc` and `monodoc` + +This repository contains the source for Mono's [documentation toolchain](http://www.mono-project.com/docs/tools+libraries/tools/monodoc/generating-documentation/). + +## Compiling + +### CLI +If you've got `make` installed, you can run `make prepare all check`. The available targets are: + +- `prepare`: initializes the submodules, and restores the nuget dependency of NUnit +- `all`: compiles everything +- `check`: runs unit tests for _monodoc_ and _mdoc_ +- `check-mdoc`: runs only _mdoc_ tests +- `check-monodoc`: runs only _monodoc_ tests + +You can also control some parameters from the command line: + +If you want to compile in debug mode: `make all CONFIGURATION=Debug` + +### Visual Studio +Once you run `make prepare all` at least once (to restore submodules), you can open the solution in +_Visual Studio_ to compile and debug. diff --git a/external/api-doc-tools/apidoctools.sln b/external/api-doc-tools/apidoctools.sln new file mode 100644 index 0000000000..dd77921dee --- /dev/null +++ b/external/api-doc-tools/apidoctools.sln @@ -0,0 +1,61 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.26206.0 +MinimumVisualStudioVersion = 10.0.40219.1 +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 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpZipLib", "external\SharpZipLib\ICSharpCode.SharpZipLib.NET45\ICSharpCode.SharpZipLib.csproj", "{0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Debug|x86.ActiveCfg = Debug|Any CPU + {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Debug|x86.Build.0 = Debug|Any CPU + {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Release|Any CPU.Build.0 = Release|Any CPU + {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Release|x86.ActiveCfg = Release|Any CPU + {7DA7CD97-614F-4BCD-A2FA-B379590CEA48}.Release|x86.Build.0 = Release|Any CPU + {6E644802-B579-4037-9809-9CF4C7172C9D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6E644802-B579-4037-9809-9CF4C7172C9D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {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|Any CPU.ActiveCfg = Release|Any CPU + {6E644802-B579-4037-9809-9CF4C7172C9D}.Release|Any CPU.Build.0 = Release|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|Any CPU.ActiveCfg = Debug|Any CPU + {1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Debug|Any CPU.Build.0 = Debug|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|Any CPU.ActiveCfg = Release|Any CPU + {1EE70E2C-A289-4C36-AD0A-3D0C6CE56615}.Release|Any CPU.Build.0 = Release|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 + {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Debug|x86.ActiveCfg = Debug|Any CPU + {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Debug|x86.Build.0 = Debug|Any CPU + {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Release|Any CPU.Build.0 = Release|Any CPU + {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Release|x86.ActiveCfg = Release|Any CPU + {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(MonoDevelopProperties) = preSolution + StartupItem = mdoc.csproj + EndGlobalSection +EndGlobal diff --git a/external/Lucene.Net.Light/README.md b/external/api-doc-tools/external/Lucene.Net.Light/README.md similarity index 100% rename from external/Lucene.Net.Light/README.md rename to external/api-doc-tools/external/Lucene.Net.Light/README.md diff --git a/external/Lucene.Net.Light/src/core/Analysis/ASCIIFoldingFilter.cs.REMOVED.git-id b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/ASCIIFoldingFilter.cs.REMOVED.git-id similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/ASCIIFoldingFilter.cs.REMOVED.git-id rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/ASCIIFoldingFilter.cs.REMOVED.git-id diff --git a/external/Lucene.Net.Light/src/core/Analysis/Analyzer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Analyzer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Analyzer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Analyzer.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/BaseCharFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/BaseCharFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/BaseCharFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/BaseCharFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/CachingTokenFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/CachingTokenFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/CachingTokenFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/CachingTokenFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/CharArraySet.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/CharArraySet.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/CharArraySet.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/CharArraySet.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/CharFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/CharFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/CharFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/CharFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/CharReader.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/CharReader.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/CharReader.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/CharReader.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/CharStream.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/CharStream.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/CharStream.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/CharStream.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/CharTokenizer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/CharTokenizer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/CharTokenizer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/CharTokenizer.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/ISOLatin1AccentFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/ISOLatin1AccentFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/ISOLatin1AccentFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/ISOLatin1AccentFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/KeywordAnalyzer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/KeywordAnalyzer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/KeywordAnalyzer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/KeywordAnalyzer.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/KeywordTokenizer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/KeywordTokenizer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/KeywordTokenizer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/KeywordTokenizer.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/LengthFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/LengthFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/LengthFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/LengthFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/LetterTokenizer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/LetterTokenizer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/LetterTokenizer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/LetterTokenizer.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/LowerCaseFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/LowerCaseFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/LowerCaseFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/LowerCaseFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/LowerCaseTokenizer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/LowerCaseTokenizer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/LowerCaseTokenizer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/LowerCaseTokenizer.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/MappingCharFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/MappingCharFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/MappingCharFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/MappingCharFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/NormalizeCharMap.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/NormalizeCharMap.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/NormalizeCharMap.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/NormalizeCharMap.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/NumericTokenStream.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/NumericTokenStream.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/NumericTokenStream.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/NumericTokenStream.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/PerFieldAnalyzerWrapper.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/PerFieldAnalyzerWrapper.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/PerFieldAnalyzerWrapper.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/PerFieldAnalyzerWrapper.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/PorterStemFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/PorterStemFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/PorterStemFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/PorterStemFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/PorterStemmer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/PorterStemmer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/PorterStemmer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/PorterStemmer.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/SimpleAnalyzer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/SimpleAnalyzer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/SimpleAnalyzer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/SimpleAnalyzer.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/Standard/StandardAnalyzer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Standard/StandardAnalyzer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Standard/StandardAnalyzer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Standard/StandardAnalyzer.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/Standard/StandardFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Standard/StandardFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Standard/StandardFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Standard/StandardFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/Standard/StandardTokenizer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Standard/StandardTokenizer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Standard/StandardTokenizer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Standard/StandardTokenizer.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/Standard/StandardTokenizerImpl.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Standard/StandardTokenizerImpl.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Standard/StandardTokenizerImpl.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Standard/StandardTokenizerImpl.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/StopAnalyzer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/StopAnalyzer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/StopAnalyzer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/StopAnalyzer.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/StopFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/StopFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/StopFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/StopFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/TeeSinkTokenFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/TeeSinkTokenFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/TeeSinkTokenFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/TeeSinkTokenFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/Token.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Token.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Token.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Token.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/TokenFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/TokenFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/TokenFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/TokenFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/TokenStream.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/TokenStream.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/TokenStream.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/TokenStream.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/FlagsAttribute.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/FlagsAttribute.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/FlagsAttribute.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/FlagsAttribute.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IFlagsAttribute.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IFlagsAttribute.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IFlagsAttribute.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IFlagsAttribute.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IOffsetAttribute.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IOffsetAttribute.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IOffsetAttribute.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IOffsetAttribute.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IPayloadAttribute.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IPayloadAttribute.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IPayloadAttribute.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IPayloadAttribute.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IPositionIncrementAttribute.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IPositionIncrementAttribute.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IPositionIncrementAttribute.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/IPositionIncrementAttribute.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/ITermAttribute.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/ITermAttribute.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/ITermAttribute.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/ITermAttribute.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/ITypeAttribute.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/ITypeAttribute.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/ITypeAttribute.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/ITypeAttribute.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/OffsetAttribute.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/OffsetAttribute.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/OffsetAttribute.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/OffsetAttribute.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/PayloadAttribute.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/PayloadAttribute.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/PayloadAttribute.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/PayloadAttribute.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/PositionIncrementAttribute.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/PositionIncrementAttribute.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/PositionIncrementAttribute.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/PositionIncrementAttribute.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/TermAttribute.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/TermAttribute.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/TermAttribute.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/TermAttribute.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/TypeAttribute.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/TypeAttribute.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/TypeAttribute.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenattributes/TypeAttribute.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/Tokenizer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenizer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/Tokenizer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/Tokenizer.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/WhitespaceAnalyzer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/WhitespaceAnalyzer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/WhitespaceAnalyzer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/WhitespaceAnalyzer.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/WhitespaceTokenizer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/WhitespaceTokenizer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/WhitespaceTokenizer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/WhitespaceTokenizer.cs diff --git a/external/Lucene.Net.Light/src/core/Analysis/WordlistLoader.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/WordlistLoader.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Analysis/WordlistLoader.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Analysis/WordlistLoader.cs diff --git a/external/Lucene.Net.Light/src/core/Document/AbstractField.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/AbstractField.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Document/AbstractField.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/AbstractField.cs diff --git a/external/Lucene.Net.Light/src/core/Document/CompressionTools.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/CompressionTools.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Document/CompressionTools.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/CompressionTools.cs diff --git a/external/Lucene.Net.Light/src/core/Document/DateField.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/DateField.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Document/DateField.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/DateField.cs diff --git a/external/Lucene.Net.Light/src/core/Document/DateTools.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/DateTools.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Document/DateTools.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/DateTools.cs diff --git a/external/Lucene.Net.Light/src/core/Document/Document.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/Document.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Document/Document.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/Document.cs diff --git a/external/Lucene.Net.Light/src/core/Document/Field.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/Field.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Document/Field.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/Field.cs diff --git a/external/Lucene.Net.Light/src/core/Document/FieldSelector.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/FieldSelector.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Document/FieldSelector.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/FieldSelector.cs diff --git a/external/Lucene.Net.Light/src/core/Document/FieldSelectorResult.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/FieldSelectorResult.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Document/FieldSelectorResult.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/FieldSelectorResult.cs diff --git a/external/Lucene.Net.Light/src/core/Document/Fieldable.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/Fieldable.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Document/Fieldable.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/Fieldable.cs diff --git a/external/Lucene.Net.Light/src/core/Document/LoadFirstFieldSelector.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/LoadFirstFieldSelector.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Document/LoadFirstFieldSelector.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/LoadFirstFieldSelector.cs diff --git a/external/Lucene.Net.Light/src/core/Document/MapFieldSelector.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/MapFieldSelector.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Document/MapFieldSelector.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/MapFieldSelector.cs diff --git a/external/Lucene.Net.Light/src/core/Document/NumberTools.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/NumberTools.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Document/NumberTools.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/NumberTools.cs diff --git a/external/Lucene.Net.Light/src/core/Document/NumericField.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/NumericField.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Document/NumericField.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/NumericField.cs diff --git a/external/Lucene.Net.Light/src/core/Document/SetBasedFieldSelector.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/SetBasedFieldSelector.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Document/SetBasedFieldSelector.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Document/SetBasedFieldSelector.cs diff --git a/external/Lucene.Net.Light/src/core/Index/AbstractAllTermDocs.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/AbstractAllTermDocs.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/AbstractAllTermDocs.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/AbstractAllTermDocs.cs diff --git a/external/Lucene.Net.Light/src/core/Index/AllTermDocs.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/AllTermDocs.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/AllTermDocs.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/AllTermDocs.cs diff --git a/external/Lucene.Net.Light/src/core/Index/BufferedDeletes.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/BufferedDeletes.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/BufferedDeletes.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/BufferedDeletes.cs diff --git a/external/Lucene.Net.Light/src/core/Index/ByteBlockPool.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/ByteBlockPool.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/ByteBlockPool.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/ByteBlockPool.cs diff --git a/external/Lucene.Net.Light/src/core/Index/ByteSliceReader.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/ByteSliceReader.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/ByteSliceReader.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/ByteSliceReader.cs diff --git a/external/Lucene.Net.Light/src/core/Index/ByteSliceWriter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/ByteSliceWriter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/ByteSliceWriter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/ByteSliceWriter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/CharBlockPool.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/CharBlockPool.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/CharBlockPool.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/CharBlockPool.cs diff --git a/external/Lucene.Net.Light/src/core/Index/CheckIndex.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/CheckIndex.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/CheckIndex.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/CheckIndex.cs diff --git a/external/Lucene.Net.Light/src/core/Index/CompoundFileReader.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/CompoundFileReader.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/CompoundFileReader.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/CompoundFileReader.cs diff --git a/external/Lucene.Net.Light/src/core/Index/CompoundFileWriter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/CompoundFileWriter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/CompoundFileWriter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/CompoundFileWriter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/ConcurrentMergeScheduler.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/ConcurrentMergeScheduler.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/ConcurrentMergeScheduler.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/ConcurrentMergeScheduler.cs diff --git a/external/Lucene.Net.Light/src/core/Index/CorruptIndexException.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/CorruptIndexException.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/CorruptIndexException.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/CorruptIndexException.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DefaultSkipListReader.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DefaultSkipListReader.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DefaultSkipListReader.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DefaultSkipListReader.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DefaultSkipListWriter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DefaultSkipListWriter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DefaultSkipListWriter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DefaultSkipListWriter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DirectoryReader.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DirectoryReader.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DirectoryReader.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DirectoryReader.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DocConsumer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocConsumer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DocConsumer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocConsumer.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DocConsumerPerThread.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocConsumerPerThread.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DocConsumerPerThread.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocConsumerPerThread.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DocFieldConsumer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocFieldConsumer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DocFieldConsumer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocFieldConsumer.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DocFieldConsumerPerField.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocFieldConsumerPerField.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DocFieldConsumerPerField.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocFieldConsumerPerField.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DocFieldConsumerPerThread.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocFieldConsumerPerThread.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DocFieldConsumerPerThread.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocFieldConsumerPerThread.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DocFieldConsumers.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocFieldConsumers.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DocFieldConsumers.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocFieldConsumers.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DocFieldConsumersPerField.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocFieldConsumersPerField.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DocFieldConsumersPerField.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocFieldConsumersPerField.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DocFieldConsumersPerThread.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocFieldConsumersPerThread.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DocFieldConsumersPerThread.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocFieldConsumersPerThread.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DocFieldProcessor.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocFieldProcessor.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DocFieldProcessor.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocFieldProcessor.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DocFieldProcessorPerField.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocFieldProcessorPerField.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DocFieldProcessorPerField.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocFieldProcessorPerField.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DocFieldProcessorPerThread.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocFieldProcessorPerThread.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DocFieldProcessorPerThread.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocFieldProcessorPerThread.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DocInverter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocInverter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DocInverter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocInverter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DocInverterPerField.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocInverterPerField.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DocInverterPerField.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocInverterPerField.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DocInverterPerThread.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocInverterPerThread.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DocInverterPerThread.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocInverterPerThread.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DocumentsWriter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocumentsWriter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DocumentsWriter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocumentsWriter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/DocumentsWriterThreadState.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocumentsWriterThreadState.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/DocumentsWriterThreadState.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/DocumentsWriterThreadState.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FieldInfo.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FieldInfo.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FieldInfo.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FieldInfo.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FieldInfos.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FieldInfos.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FieldInfos.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FieldInfos.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FieldInvertState.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FieldInvertState.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FieldInvertState.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FieldInvertState.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FieldReaderException.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FieldReaderException.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FieldReaderException.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FieldReaderException.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FieldSortedTermVectorMapper.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FieldSortedTermVectorMapper.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FieldSortedTermVectorMapper.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FieldSortedTermVectorMapper.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FieldsReader.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FieldsReader.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FieldsReader.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FieldsReader.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FieldsWriter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FieldsWriter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FieldsWriter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FieldsWriter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FilterIndexReader.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FilterIndexReader.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FilterIndexReader.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FilterIndexReader.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FormatPostingsDocsConsumer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FormatPostingsDocsConsumer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FormatPostingsDocsConsumer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FormatPostingsDocsConsumer.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FormatPostingsDocsWriter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FormatPostingsDocsWriter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FormatPostingsDocsWriter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FormatPostingsDocsWriter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FormatPostingsFieldsConsumer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FormatPostingsFieldsConsumer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FormatPostingsFieldsConsumer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FormatPostingsFieldsConsumer.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FormatPostingsFieldsWriter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FormatPostingsFieldsWriter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FormatPostingsFieldsWriter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FormatPostingsFieldsWriter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FormatPostingsPositionsConsumer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FormatPostingsPositionsConsumer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FormatPostingsPositionsConsumer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FormatPostingsPositionsConsumer.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FormatPostingsPositionsWriter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FormatPostingsPositionsWriter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FormatPostingsPositionsWriter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FormatPostingsPositionsWriter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FormatPostingsTermsConsumer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FormatPostingsTermsConsumer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FormatPostingsTermsConsumer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FormatPostingsTermsConsumer.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FormatPostingsTermsWriter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FormatPostingsTermsWriter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FormatPostingsTermsWriter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FormatPostingsTermsWriter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FreqProxFieldMergeState.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FreqProxFieldMergeState.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FreqProxFieldMergeState.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FreqProxFieldMergeState.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FreqProxTermsWriter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FreqProxTermsWriter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FreqProxTermsWriter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FreqProxTermsWriter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FreqProxTermsWriterPerField.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FreqProxTermsWriterPerField.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FreqProxTermsWriterPerField.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FreqProxTermsWriterPerField.cs diff --git a/external/Lucene.Net.Light/src/core/Index/FreqProxTermsWriterPerThread.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FreqProxTermsWriterPerThread.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/FreqProxTermsWriterPerThread.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/FreqProxTermsWriterPerThread.cs diff --git a/external/Lucene.Net.Light/src/core/Index/IndexCommit.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/IndexCommit.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/IndexCommit.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/IndexCommit.cs diff --git a/external/Lucene.Net.Light/src/core/Index/IndexDeletionPolicy.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/IndexDeletionPolicy.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/IndexDeletionPolicy.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/IndexDeletionPolicy.cs diff --git a/external/Lucene.Net.Light/src/core/Index/IndexFileDeleter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/IndexFileDeleter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/IndexFileDeleter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/IndexFileDeleter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/IndexFileNameFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/IndexFileNameFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/IndexFileNameFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/IndexFileNameFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/IndexFileNames.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/IndexFileNames.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/IndexFileNames.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/IndexFileNames.cs diff --git a/external/Lucene.Net.Light/src/core/Index/IndexReader.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/IndexReader.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/IndexReader.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/IndexReader.cs diff --git a/external/Lucene.Net.Light/src/core/Index/IndexWriter.cs.REMOVED.git-id b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/IndexWriter.cs.REMOVED.git-id similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/IndexWriter.cs.REMOVED.git-id rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/IndexWriter.cs.REMOVED.git-id diff --git a/external/Lucene.Net.Light/src/core/Index/IntBlockPool.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/IntBlockPool.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/IntBlockPool.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/IntBlockPool.cs diff --git a/external/Lucene.Net.Light/src/core/Index/InvertedDocConsumer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/InvertedDocConsumer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/InvertedDocConsumer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/InvertedDocConsumer.cs diff --git a/external/Lucene.Net.Light/src/core/Index/InvertedDocConsumerPerField.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/InvertedDocConsumerPerField.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/InvertedDocConsumerPerField.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/InvertedDocConsumerPerField.cs diff --git a/external/Lucene.Net.Light/src/core/Index/InvertedDocConsumerPerThread.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/InvertedDocConsumerPerThread.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/InvertedDocConsumerPerThread.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/InvertedDocConsumerPerThread.cs diff --git a/external/Lucene.Net.Light/src/core/Index/InvertedDocEndConsumer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/InvertedDocEndConsumer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/InvertedDocEndConsumer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/InvertedDocEndConsumer.cs diff --git a/external/Lucene.Net.Light/src/core/Index/InvertedDocEndConsumerPerField.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/InvertedDocEndConsumerPerField.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/InvertedDocEndConsumerPerField.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/InvertedDocEndConsumerPerField.cs diff --git a/external/Lucene.Net.Light/src/core/Index/InvertedDocEndConsumerPerThread.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/InvertedDocEndConsumerPerThread.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/InvertedDocEndConsumerPerThread.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/InvertedDocEndConsumerPerThread.cs diff --git a/external/Lucene.Net.Light/src/core/Index/KeepOnlyLastCommitDeletionPolicy.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/KeepOnlyLastCommitDeletionPolicy.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/KeepOnlyLastCommitDeletionPolicy.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/KeepOnlyLastCommitDeletionPolicy.cs diff --git a/external/Lucene.Net.Light/src/core/Index/LogByteSizeMergePolicy.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/LogByteSizeMergePolicy.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/LogByteSizeMergePolicy.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/LogByteSizeMergePolicy.cs diff --git a/external/Lucene.Net.Light/src/core/Index/LogDocMergePolicy.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/LogDocMergePolicy.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/LogDocMergePolicy.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/LogDocMergePolicy.cs diff --git a/external/Lucene.Net.Light/src/core/Index/LogMergePolicy.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/LogMergePolicy.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/LogMergePolicy.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/LogMergePolicy.cs diff --git a/external/Lucene.Net.Light/src/core/Index/MergeDocIDRemapper.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/MergeDocIDRemapper.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/MergeDocIDRemapper.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/MergeDocIDRemapper.cs diff --git a/external/Lucene.Net.Light/src/core/Index/MergePolicy.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/MergePolicy.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/MergePolicy.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/MergePolicy.cs diff --git a/external/Lucene.Net.Light/src/core/Index/MergeScheduler.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/MergeScheduler.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/MergeScheduler.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/MergeScheduler.cs diff --git a/external/Lucene.Net.Light/src/core/Index/MultiLevelSkipListReader.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/MultiLevelSkipListReader.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/MultiLevelSkipListReader.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/MultiLevelSkipListReader.cs diff --git a/external/Lucene.Net.Light/src/core/Index/MultiLevelSkipListWriter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/MultiLevelSkipListWriter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/MultiLevelSkipListWriter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/MultiLevelSkipListWriter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/MultiReader.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/MultiReader.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/MultiReader.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/MultiReader.cs diff --git a/external/Lucene.Net.Light/src/core/Index/MultipleTermPositions.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/MultipleTermPositions.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/MultipleTermPositions.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/MultipleTermPositions.cs diff --git a/external/Lucene.Net.Light/src/core/Index/NormsWriter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/NormsWriter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/NormsWriter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/NormsWriter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/NormsWriterPerField.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/NormsWriterPerField.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/NormsWriterPerField.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/NormsWriterPerField.cs diff --git a/external/Lucene.Net.Light/src/core/Index/NormsWriterPerThread.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/NormsWriterPerThread.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/NormsWriterPerThread.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/NormsWriterPerThread.cs diff --git a/external/Lucene.Net.Light/src/core/Index/ParallelReader.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/ParallelReader.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/ParallelReader.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/ParallelReader.cs diff --git a/external/Lucene.Net.Light/src/core/Index/Payload.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/Payload.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/Payload.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/Payload.cs diff --git a/external/Lucene.Net.Light/src/core/Index/PositionBasedTermVectorMapper.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/PositionBasedTermVectorMapper.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/PositionBasedTermVectorMapper.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/PositionBasedTermVectorMapper.cs diff --git a/external/Lucene.Net.Light/src/core/Index/RawPostingList.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/RawPostingList.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/RawPostingList.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/RawPostingList.cs diff --git a/external/Lucene.Net.Light/src/core/Index/ReadOnlyDirectoryReader.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/ReadOnlyDirectoryReader.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/ReadOnlyDirectoryReader.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/ReadOnlyDirectoryReader.cs diff --git a/external/Lucene.Net.Light/src/core/Index/ReadOnlySegmentReader.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/ReadOnlySegmentReader.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/ReadOnlySegmentReader.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/ReadOnlySegmentReader.cs diff --git a/external/Lucene.Net.Light/src/core/Index/ReusableStringReader.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/ReusableStringReader.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/ReusableStringReader.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/ReusableStringReader.cs diff --git a/external/Lucene.Net.Light/src/core/Index/SegmentInfo.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentInfo.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/SegmentInfo.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentInfo.cs diff --git a/external/Lucene.Net.Light/src/core/Index/SegmentInfos.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentInfos.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/SegmentInfos.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentInfos.cs diff --git a/external/Lucene.Net.Light/src/core/Index/SegmentMergeInfo.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentMergeInfo.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/SegmentMergeInfo.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentMergeInfo.cs diff --git a/external/Lucene.Net.Light/src/core/Index/SegmentMergeQueue.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentMergeQueue.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/SegmentMergeQueue.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentMergeQueue.cs diff --git a/external/Lucene.Net.Light/src/core/Index/SegmentMerger.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentMerger.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/SegmentMerger.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentMerger.cs diff --git a/external/Lucene.Net.Light/src/core/Index/SegmentReader.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentReader.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/SegmentReader.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentReader.cs diff --git a/external/Lucene.Net.Light/src/core/Index/SegmentTermDocs.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentTermDocs.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/SegmentTermDocs.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentTermDocs.cs diff --git a/external/Lucene.Net.Light/src/core/Index/SegmentTermEnum.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentTermEnum.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/SegmentTermEnum.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentTermEnum.cs diff --git a/external/Lucene.Net.Light/src/core/Index/SegmentTermPositionVector.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentTermPositionVector.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/SegmentTermPositionVector.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentTermPositionVector.cs diff --git a/external/Lucene.Net.Light/src/core/Index/SegmentTermPositions.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentTermPositions.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/SegmentTermPositions.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentTermPositions.cs diff --git a/external/Lucene.Net.Light/src/core/Index/SegmentTermVector.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentTermVector.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/SegmentTermVector.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentTermVector.cs diff --git a/external/Lucene.Net.Light/src/core/Index/SegmentWriteState.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentWriteState.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/SegmentWriteState.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SegmentWriteState.cs diff --git a/external/Lucene.Net.Light/src/core/Index/SerialMergeScheduler.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SerialMergeScheduler.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/SerialMergeScheduler.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SerialMergeScheduler.cs diff --git a/external/Lucene.Net.Light/src/core/Index/SnapshotDeletionPolicy.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SnapshotDeletionPolicy.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/SnapshotDeletionPolicy.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SnapshotDeletionPolicy.cs diff --git a/external/Lucene.Net.Light/src/core/Index/SortedTermVectorMapper.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SortedTermVectorMapper.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/SortedTermVectorMapper.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/SortedTermVectorMapper.cs diff --git a/external/Lucene.Net.Light/src/core/Index/StaleReaderException.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/StaleReaderException.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/StaleReaderException.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/StaleReaderException.cs diff --git a/external/Lucene.Net.Light/src/core/Index/StoredFieldsWriter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/StoredFieldsWriter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/StoredFieldsWriter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/StoredFieldsWriter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/StoredFieldsWriterPerThread.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/StoredFieldsWriterPerThread.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/StoredFieldsWriterPerThread.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/StoredFieldsWriterPerThread.cs diff --git a/external/Lucene.Net.Light/src/core/Index/Term.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/Term.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/Term.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/Term.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermBuffer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermBuffer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermBuffer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermBuffer.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermDocs.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermDocs.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermDocs.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermDocs.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermEnum.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermEnum.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermEnum.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermEnum.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermFreqVector.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermFreqVector.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermFreqVector.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermFreqVector.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermInfo.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermInfo.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermInfo.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermInfo.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermInfosReader.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermInfosReader.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermInfosReader.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermInfosReader.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermInfosWriter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermInfosWriter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermInfosWriter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermInfosWriter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermPositionVector.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermPositionVector.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermPositionVector.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermPositionVector.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermPositions.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermPositions.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermPositions.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermPositions.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermVectorEntry.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermVectorEntry.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermVectorEntry.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermVectorEntry.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermVectorEntryFreqSortedComparator.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermVectorEntryFreqSortedComparator.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermVectorEntryFreqSortedComparator.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermVectorEntryFreqSortedComparator.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermVectorMapper.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermVectorMapper.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermVectorMapper.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermVectorMapper.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermVectorOffsetInfo.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermVectorOffsetInfo.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermVectorOffsetInfo.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermVectorOffsetInfo.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermVectorsReader.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermVectorsReader.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermVectorsReader.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermVectorsReader.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermVectorsTermsWriter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermVectorsTermsWriter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermVectorsTermsWriter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermVectorsTermsWriter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermVectorsTermsWriterPerField.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermVectorsTermsWriterPerField.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermVectorsTermsWriterPerField.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermVectorsTermsWriterPerField.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermVectorsTermsWriterPerThread.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermVectorsTermsWriterPerThread.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermVectorsTermsWriterPerThread.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermVectorsTermsWriterPerThread.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermVectorsWriter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermVectorsWriter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermVectorsWriter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermVectorsWriter.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermsHash.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermsHash.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermsHash.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermsHash.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermsHashConsumer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermsHashConsumer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermsHashConsumer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermsHashConsumer.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermsHashConsumerPerField.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermsHashConsumerPerField.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermsHashConsumerPerField.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermsHashConsumerPerField.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermsHashConsumerPerThread.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermsHashConsumerPerThread.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermsHashConsumerPerThread.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermsHashConsumerPerThread.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermsHashPerField.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermsHashPerField.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermsHashPerField.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermsHashPerField.cs diff --git a/external/Lucene.Net.Light/src/core/Index/TermsHashPerThread.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermsHashPerThread.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Index/TermsHashPerThread.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Index/TermsHashPerThread.cs diff --git a/external/Lucene.Net.Light/src/core/LZOCompressor.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/LZOCompressor.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/LZOCompressor.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/LZOCompressor.cs diff --git a/external/Lucene.Net.Light/src/core/LucenePackage.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/LucenePackage.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/LucenePackage.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/LucenePackage.cs diff --git a/external/Lucene.Net.Light/src/core/Messages/INLSException.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Messages/INLSException.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Messages/INLSException.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Messages/INLSException.cs diff --git a/external/Lucene.Net.Light/src/core/Messages/Message.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Messages/Message.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Messages/Message.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Messages/Message.cs diff --git a/external/Lucene.Net.Light/src/core/Messages/MessageImpl.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Messages/MessageImpl.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Messages/MessageImpl.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Messages/MessageImpl.cs diff --git a/external/Lucene.Net.Light/src/core/Messages/NLS.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Messages/NLS.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Messages/NLS.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Messages/NLS.cs diff --git a/external/Lucene.Net.Light/src/core/QueryParser/CharStream.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/QueryParser/CharStream.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/QueryParser/CharStream.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/QueryParser/CharStream.cs diff --git a/external/Lucene.Net.Light/src/core/QueryParser/FastCharStream.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/QueryParser/FastCharStream.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/QueryParser/FastCharStream.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/QueryParser/FastCharStream.cs diff --git a/external/Lucene.Net.Light/src/core/QueryParser/MultiFieldQueryParser.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/QueryParser/MultiFieldQueryParser.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/QueryParser/MultiFieldQueryParser.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/QueryParser/MultiFieldQueryParser.cs diff --git a/external/Lucene.Net.Light/src/core/QueryParser/ParseException.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/QueryParser/ParseException.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/QueryParser/ParseException.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/QueryParser/ParseException.cs diff --git a/external/Lucene.Net.Light/src/core/QueryParser/QueryParser.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/QueryParser/QueryParser.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/QueryParser/QueryParser.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/QueryParser/QueryParser.cs diff --git a/external/Lucene.Net.Light/src/core/QueryParser/QueryParserConstants.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/QueryParser/QueryParserConstants.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/QueryParser/QueryParserConstants.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/QueryParser/QueryParserConstants.cs diff --git a/external/Lucene.Net.Light/src/core/QueryParser/QueryParserTokenManager.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/QueryParser/QueryParserTokenManager.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/QueryParser/QueryParserTokenManager.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/QueryParser/QueryParserTokenManager.cs diff --git a/external/Lucene.Net.Light/src/core/QueryParser/Token.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/QueryParser/Token.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/QueryParser/Token.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/QueryParser/Token.cs diff --git a/external/Lucene.Net.Light/src/core/QueryParser/TokenMgrError.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/QueryParser/TokenMgrError.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/QueryParser/TokenMgrError.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/QueryParser/TokenMgrError.cs diff --git a/external/Lucene.Net.Light/src/core/Search/BooleanClause.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/BooleanClause.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/BooleanClause.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/BooleanClause.cs diff --git a/external/Lucene.Net.Light/src/core/Search/BooleanQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/BooleanQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/BooleanQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/BooleanQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/BooleanScorer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/BooleanScorer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/BooleanScorer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/BooleanScorer.cs diff --git a/external/Lucene.Net.Light/src/core/Search/BooleanScorer2.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/BooleanScorer2.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/BooleanScorer2.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/BooleanScorer2.cs diff --git a/external/Lucene.Net.Light/src/core/Search/CachingSpanFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/CachingSpanFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/CachingSpanFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/CachingSpanFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Search/CachingWrapperFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/CachingWrapperFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/CachingWrapperFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/CachingWrapperFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Collector.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Collector.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Collector.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Collector.cs diff --git a/external/Lucene.Net.Light/src/core/Search/ComplexExplanation.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/ComplexExplanation.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/ComplexExplanation.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/ComplexExplanation.cs diff --git a/external/Lucene.Net.Light/src/core/Search/ConjunctionScorer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/ConjunctionScorer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/ConjunctionScorer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/ConjunctionScorer.cs diff --git a/external/Lucene.Net.Light/src/core/Search/ConstantScoreQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/ConstantScoreQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/ConstantScoreQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/ConstantScoreQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/DefaultSimilarity.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/DefaultSimilarity.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/DefaultSimilarity.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/DefaultSimilarity.cs diff --git a/external/Lucene.Net.Light/src/core/Search/DisjunctionMaxQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/DisjunctionMaxQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/DisjunctionMaxQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/DisjunctionMaxQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/DisjunctionMaxScorer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/DisjunctionMaxScorer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/DisjunctionMaxScorer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/DisjunctionMaxScorer.cs diff --git a/external/Lucene.Net.Light/src/core/Search/DisjunctionSumScorer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/DisjunctionSumScorer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/DisjunctionSumScorer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/DisjunctionSumScorer.cs diff --git a/external/Lucene.Net.Light/src/core/Search/DocIdSet.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/DocIdSet.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/DocIdSet.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/DocIdSet.cs diff --git a/external/Lucene.Net.Light/src/core/Search/DocIdSetIterator.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/DocIdSetIterator.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/DocIdSetIterator.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/DocIdSetIterator.cs diff --git a/external/Lucene.Net.Light/src/core/Search/ExactPhraseScorer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/ExactPhraseScorer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/ExactPhraseScorer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/ExactPhraseScorer.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Explanation.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Explanation.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Explanation.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Explanation.cs diff --git a/external/Lucene.Net.Light/src/core/Search/FieldCache.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FieldCache.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/FieldCache.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FieldCache.cs diff --git a/external/Lucene.Net.Light/src/core/Search/FieldCacheImpl.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FieldCacheImpl.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/FieldCacheImpl.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FieldCacheImpl.cs diff --git a/external/Lucene.Net.Light/src/core/Search/FieldCacheRangeFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FieldCacheRangeFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/FieldCacheRangeFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FieldCacheRangeFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Search/FieldCacheTermsFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FieldCacheTermsFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/FieldCacheTermsFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FieldCacheTermsFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Search/FieldComparator.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FieldComparator.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/FieldComparator.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FieldComparator.cs diff --git a/external/Lucene.Net.Light/src/core/Search/FieldComparatorSource.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FieldComparatorSource.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/FieldComparatorSource.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FieldComparatorSource.cs diff --git a/external/Lucene.Net.Light/src/core/Search/FieldDoc.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FieldDoc.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/FieldDoc.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FieldDoc.cs diff --git a/external/Lucene.Net.Light/src/core/Search/FieldDocSortedHitQueue.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FieldDocSortedHitQueue.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/FieldDocSortedHitQueue.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FieldDocSortedHitQueue.cs diff --git a/external/Lucene.Net.Light/src/core/Search/FieldValueHitQueue.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FieldValueHitQueue.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/FieldValueHitQueue.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FieldValueHitQueue.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Filter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Filter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Filter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Filter.cs diff --git a/external/Lucene.Net.Light/src/core/Search/FilterManager.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FilterManager.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/FilterManager.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FilterManager.cs diff --git a/external/Lucene.Net.Light/src/core/Search/FilteredDocIdSet.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FilteredDocIdSet.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/FilteredDocIdSet.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FilteredDocIdSet.cs diff --git a/external/Lucene.Net.Light/src/core/Search/FilteredDocIdSetIterator.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FilteredDocIdSetIterator.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/FilteredDocIdSetIterator.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FilteredDocIdSetIterator.cs diff --git a/external/Lucene.Net.Light/src/core/Search/FilteredQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FilteredQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/FilteredQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FilteredQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/FilteredTermEnum.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FilteredTermEnum.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/FilteredTermEnum.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FilteredTermEnum.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Function/ByteFieldSource.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/ByteFieldSource.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Function/ByteFieldSource.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/ByteFieldSource.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Function/CustomScoreProvider.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/CustomScoreProvider.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Function/CustomScoreProvider.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/CustomScoreProvider.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Function/CustomScoreQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/CustomScoreQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Function/CustomScoreQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/CustomScoreQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Function/DocValues.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/DocValues.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Function/DocValues.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/DocValues.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Function/FieldCacheSource.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/FieldCacheSource.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Function/FieldCacheSource.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/FieldCacheSource.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Function/FieldScoreQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/FieldScoreQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Function/FieldScoreQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/FieldScoreQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Function/FloatFieldSource.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/FloatFieldSource.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Function/FloatFieldSource.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/FloatFieldSource.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Function/IntFieldSource.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/IntFieldSource.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Function/IntFieldSource.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/IntFieldSource.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Function/OrdFieldSource.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/OrdFieldSource.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Function/OrdFieldSource.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/OrdFieldSource.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Function/ReverseOrdFieldSource.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/ReverseOrdFieldSource.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Function/ReverseOrdFieldSource.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/ReverseOrdFieldSource.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Function/ShortFieldSource.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/ShortFieldSource.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Function/ShortFieldSource.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/ShortFieldSource.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Function/ValueSource.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/ValueSource.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Function/ValueSource.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/ValueSource.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Function/ValueSourceQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/ValueSourceQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Function/ValueSourceQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Function/ValueSourceQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/FuzzyQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FuzzyQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/FuzzyQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FuzzyQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/FuzzyTermEnum.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FuzzyTermEnum.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/FuzzyTermEnum.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/FuzzyTermEnum.cs diff --git a/external/Lucene.Net.Light/src/core/Search/HitQueue.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/HitQueue.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/HitQueue.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/HitQueue.cs diff --git a/external/Lucene.Net.Light/src/core/Search/IndexSearcher.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/IndexSearcher.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/IndexSearcher.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/IndexSearcher.cs diff --git a/external/Lucene.Net.Light/src/core/Search/MatchAllDocsQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/MatchAllDocsQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/MatchAllDocsQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/MatchAllDocsQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/MultiPhraseQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/MultiPhraseQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/MultiPhraseQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/MultiPhraseQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/MultiSearcher.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/MultiSearcher.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/MultiSearcher.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/MultiSearcher.cs diff --git a/external/Lucene.Net.Light/src/core/Search/MultiTermQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/MultiTermQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/MultiTermQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/MultiTermQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/MultiTermQueryWrapperFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/MultiTermQueryWrapperFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/MultiTermQueryWrapperFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/MultiTermQueryWrapperFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Search/NumericRangeFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/NumericRangeFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/NumericRangeFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/NumericRangeFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Search/NumericRangeQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/NumericRangeQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/NumericRangeQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/NumericRangeQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/ParallelMultiSearcher.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/ParallelMultiSearcher.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/ParallelMultiSearcher.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/ParallelMultiSearcher.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Payloads/AveragePayloadFunction.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Payloads/AveragePayloadFunction.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Payloads/AveragePayloadFunction.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Payloads/AveragePayloadFunction.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Payloads/MaxPayloadFunction.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Payloads/MaxPayloadFunction.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Payloads/MaxPayloadFunction.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Payloads/MaxPayloadFunction.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Payloads/MinPayloadFunction.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Payloads/MinPayloadFunction.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Payloads/MinPayloadFunction.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Payloads/MinPayloadFunction.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Payloads/PayloadFunction.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Payloads/PayloadFunction.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Payloads/PayloadFunction.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Payloads/PayloadFunction.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Payloads/PayloadNearQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Payloads/PayloadNearQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Payloads/PayloadNearQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Payloads/PayloadNearQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Payloads/PayloadSpanUtil.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Payloads/PayloadSpanUtil.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Payloads/PayloadSpanUtil.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Payloads/PayloadSpanUtil.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Payloads/PayloadTermQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Payloads/PayloadTermQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Payloads/PayloadTermQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Payloads/PayloadTermQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/PhrasePositions.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/PhrasePositions.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/PhrasePositions.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/PhrasePositions.cs diff --git a/external/Lucene.Net.Light/src/core/Search/PhraseQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/PhraseQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/PhraseQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/PhraseQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/PhraseQueue.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/PhraseQueue.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/PhraseQueue.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/PhraseQueue.cs diff --git a/external/Lucene.Net.Light/src/core/Search/PhraseScorer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/PhraseScorer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/PhraseScorer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/PhraseScorer.cs diff --git a/external/Lucene.Net.Light/src/core/Search/PositiveScoresOnlyCollector.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/PositiveScoresOnlyCollector.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/PositiveScoresOnlyCollector.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/PositiveScoresOnlyCollector.cs diff --git a/external/Lucene.Net.Light/src/core/Search/PrefixFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/PrefixFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/PrefixFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/PrefixFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Search/PrefixQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/PrefixQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/PrefixQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/PrefixQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/PrefixTermEnum.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/PrefixTermEnum.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/PrefixTermEnum.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/PrefixTermEnum.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Query.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Query.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Query.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Query.cs diff --git a/external/Lucene.Net.Light/src/core/Search/QueryTermVector.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/QueryTermVector.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/QueryTermVector.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/QueryTermVector.cs diff --git a/external/Lucene.Net.Light/src/core/Search/QueryWrapperFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/QueryWrapperFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/QueryWrapperFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/QueryWrapperFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Search/ReqExclScorer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/ReqExclScorer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/ReqExclScorer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/ReqExclScorer.cs diff --git a/external/Lucene.Net.Light/src/core/Search/ReqOptSumScorer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/ReqOptSumScorer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/ReqOptSumScorer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/ReqOptSumScorer.cs diff --git a/external/Lucene.Net.Light/src/core/Search/ScoreCachingWrappingScorer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/ScoreCachingWrappingScorer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/ScoreCachingWrappingScorer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/ScoreCachingWrappingScorer.cs diff --git a/external/Lucene.Net.Light/src/core/Search/ScoreDoc.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/ScoreDoc.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/ScoreDoc.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/ScoreDoc.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Scorer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Scorer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Scorer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Scorer.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Searchable.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Searchable.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Searchable.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Searchable.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Searcher.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Searcher.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Searcher.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Searcher.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Similarity.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Similarity.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Similarity.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Similarity.cs diff --git a/external/Lucene.Net.Light/src/core/Search/SimilarityDelegator.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/SimilarityDelegator.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/SimilarityDelegator.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/SimilarityDelegator.cs diff --git a/external/Lucene.Net.Light/src/core/Search/SingleTermEnum.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/SingleTermEnum.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/SingleTermEnum.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/SingleTermEnum.cs diff --git a/external/Lucene.Net.Light/src/core/Search/SloppyPhraseScorer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/SloppyPhraseScorer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/SloppyPhraseScorer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/SloppyPhraseScorer.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Sort.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Sort.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Sort.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Sort.cs diff --git a/external/Lucene.Net.Light/src/core/Search/SortField.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/SortField.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/SortField.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/SortField.cs diff --git a/external/Lucene.Net.Light/src/core/Search/SpanFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/SpanFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/SpanFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/SpanFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Search/SpanFilterResult.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/SpanFilterResult.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/SpanFilterResult.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/SpanFilterResult.cs diff --git a/external/Lucene.Net.Light/src/core/Search/SpanQueryFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/SpanQueryFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/SpanQueryFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/SpanQueryFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Spans/FieldMaskingSpanQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/FieldMaskingSpanQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Spans/FieldMaskingSpanQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/FieldMaskingSpanQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Spans/NearSpansOrdered.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/NearSpansOrdered.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Spans/NearSpansOrdered.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/NearSpansOrdered.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Spans/NearSpansUnordered.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/NearSpansUnordered.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Spans/NearSpansUnordered.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/NearSpansUnordered.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Spans/SpanFirstQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/SpanFirstQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Spans/SpanFirstQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/SpanFirstQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Spans/SpanNearQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/SpanNearQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Spans/SpanNearQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/SpanNearQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Spans/SpanNotQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/SpanNotQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Spans/SpanNotQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/SpanNotQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Spans/SpanOrQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/SpanOrQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Spans/SpanOrQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/SpanOrQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Spans/SpanQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/SpanQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Spans/SpanQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/SpanQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Spans/SpanScorer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/SpanScorer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Spans/SpanScorer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/SpanScorer.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Spans/SpanTermQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/SpanTermQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Spans/SpanTermQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/SpanTermQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Spans/SpanWeight.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/SpanWeight.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Spans/SpanWeight.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/SpanWeight.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Spans/Spans.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/Spans.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Spans/Spans.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/Spans.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Spans/TermSpans.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/TermSpans.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Spans/TermSpans.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Spans/TermSpans.cs diff --git a/external/Lucene.Net.Light/src/core/Search/TermQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TermQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/TermQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TermQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/TermRangeFilter.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TermRangeFilter.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/TermRangeFilter.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TermRangeFilter.cs diff --git a/external/Lucene.Net.Light/src/core/Search/TermRangeQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TermRangeQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/TermRangeQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TermRangeQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/TermRangeTermEnum.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TermRangeTermEnum.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/TermRangeTermEnum.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TermRangeTermEnum.cs diff --git a/external/Lucene.Net.Light/src/core/Search/TermScorer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TermScorer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/TermScorer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TermScorer.cs diff --git a/external/Lucene.Net.Light/src/core/Search/TimeLimitingCollector.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TimeLimitingCollector.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/TimeLimitingCollector.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TimeLimitingCollector.cs diff --git a/external/Lucene.Net.Light/src/core/Search/TopDocs.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TopDocs.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/TopDocs.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TopDocs.cs diff --git a/external/Lucene.Net.Light/src/core/Search/TopDocsCollector.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TopDocsCollector.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/TopDocsCollector.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TopDocsCollector.cs diff --git a/external/Lucene.Net.Light/src/core/Search/TopFieldCollector.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TopFieldCollector.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/TopFieldCollector.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TopFieldCollector.cs diff --git a/external/Lucene.Net.Light/src/core/Search/TopFieldDocs.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TopFieldDocs.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/TopFieldDocs.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TopFieldDocs.cs diff --git a/external/Lucene.Net.Light/src/core/Search/TopScoreDocCollector.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TopScoreDocCollector.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/TopScoreDocCollector.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/TopScoreDocCollector.cs diff --git a/external/Lucene.Net.Light/src/core/Search/Weight.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Weight.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/Weight.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/Weight.cs diff --git a/external/Lucene.Net.Light/src/core/Search/WildcardQuery.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/WildcardQuery.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/WildcardQuery.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/WildcardQuery.cs diff --git a/external/Lucene.Net.Light/src/core/Search/WildcardTermEnum.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/WildcardTermEnum.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Search/WildcardTermEnum.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Search/WildcardTermEnum.cs diff --git a/external/Lucene.Net.Light/src/core/Store/AlreadyClosedException.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/AlreadyClosedException.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/AlreadyClosedException.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/AlreadyClosedException.cs diff --git a/external/Lucene.Net.Light/src/core/Store/BufferedIndexInput.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/BufferedIndexInput.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/BufferedIndexInput.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/BufferedIndexInput.cs diff --git a/external/Lucene.Net.Light/src/core/Store/BufferedIndexOutput.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/BufferedIndexOutput.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/BufferedIndexOutput.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/BufferedIndexOutput.cs diff --git a/external/Lucene.Net.Light/src/core/Store/CheckSumIndexInput.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/CheckSumIndexInput.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/CheckSumIndexInput.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/CheckSumIndexInput.cs diff --git a/external/Lucene.Net.Light/src/core/Store/CheckSumIndexOutput.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/CheckSumIndexOutput.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/CheckSumIndexOutput.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/CheckSumIndexOutput.cs diff --git a/external/Lucene.Net.Light/src/core/Store/Directory.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/Directory.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/Directory.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/Directory.cs diff --git a/external/Lucene.Net.Light/src/core/Store/FSDirectory.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/FSDirectory.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/FSDirectory.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/FSDirectory.cs diff --git a/external/Lucene.Net.Light/src/core/Store/FSLockFactory.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/FSLockFactory.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/FSLockFactory.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/FSLockFactory.cs diff --git a/external/Lucene.Net.Light/src/core/Store/FileSwitchDirectory.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/FileSwitchDirectory.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/FileSwitchDirectory.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/FileSwitchDirectory.cs diff --git a/external/Lucene.Net.Light/src/core/Store/IndexInput.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/IndexInput.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/IndexInput.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/IndexInput.cs diff --git a/external/Lucene.Net.Light/src/core/Store/IndexOutput.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/IndexOutput.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/IndexOutput.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/IndexOutput.cs diff --git a/external/Lucene.Net.Light/src/core/Store/Lock.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/Lock.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/Lock.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/Lock.cs diff --git a/external/Lucene.Net.Light/src/core/Store/LockFactory.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/LockFactory.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/LockFactory.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/LockFactory.cs diff --git a/external/Lucene.Net.Light/src/core/Store/LockObtainFailedException.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/LockObtainFailedException.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/LockObtainFailedException.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/LockObtainFailedException.cs diff --git a/external/Lucene.Net.Light/src/core/Store/LockReleaseFailedException.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/LockReleaseFailedException.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/LockReleaseFailedException.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/LockReleaseFailedException.cs diff --git a/external/Lucene.Net.Light/src/core/Store/LockStressTest.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/LockStressTest.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/LockStressTest.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/LockStressTest.cs diff --git a/external/Lucene.Net.Light/src/core/Store/LockVerifyServer.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/LockVerifyServer.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/LockVerifyServer.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/LockVerifyServer.cs diff --git a/external/Lucene.Net.Light/src/core/Store/MMapDirectory.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/MMapDirectory.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/MMapDirectory.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/MMapDirectory.cs diff --git a/external/Lucene.Net.Light/src/core/Store/NIOFSDirectory.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/NIOFSDirectory.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/NIOFSDirectory.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/NIOFSDirectory.cs diff --git a/external/Lucene.Net.Light/src/core/Store/NativeFSLockFactory.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/NativeFSLockFactory.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/NativeFSLockFactory.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/NativeFSLockFactory.cs diff --git a/external/Lucene.Net.Light/src/core/Store/NoLockFactory.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/NoLockFactory.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/NoLockFactory.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/NoLockFactory.cs diff --git a/external/Lucene.Net.Light/src/core/Store/NoSuchDirectoryException.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/NoSuchDirectoryException.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/NoSuchDirectoryException.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/NoSuchDirectoryException.cs diff --git a/external/Lucene.Net.Light/src/core/Store/RAMDirectory.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/RAMDirectory.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/RAMDirectory.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/RAMDirectory.cs diff --git a/external/Lucene.Net.Light/src/core/Store/RAMFile.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/RAMFile.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/RAMFile.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/RAMFile.cs diff --git a/external/Lucene.Net.Light/src/core/Store/RAMInputStream.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/RAMInputStream.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/RAMInputStream.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/RAMInputStream.cs diff --git a/external/Lucene.Net.Light/src/core/Store/RAMOutputStream.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/RAMOutputStream.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/RAMOutputStream.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/RAMOutputStream.cs diff --git a/external/Lucene.Net.Light/src/core/Store/SimpleFSDirectory.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/SimpleFSDirectory.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/SimpleFSDirectory.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/SimpleFSDirectory.cs diff --git a/external/Lucene.Net.Light/src/core/Store/SimpleFSLockFactory.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/SimpleFSLockFactory.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/SimpleFSLockFactory.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/SimpleFSLockFactory.cs diff --git a/external/Lucene.Net.Light/src/core/Store/SingleInstanceLockFactory.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/SingleInstanceLockFactory.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/SingleInstanceLockFactory.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/SingleInstanceLockFactory.cs diff --git a/external/Lucene.Net.Light/src/core/Store/VerifyingLockFactory.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/VerifyingLockFactory.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Store/VerifyingLockFactory.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Store/VerifyingLockFactory.cs diff --git a/external/Lucene.Net.Light/src/core/Support/AppSettings.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/AppSettings.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/AppSettings.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/AppSettings.cs diff --git a/external/Lucene.Net.Light/src/core/Support/AttributeImplItem.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/AttributeImplItem.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/AttributeImplItem.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/AttributeImplItem.cs diff --git a/external/Lucene.Net.Light/src/core/Support/BitSetSupport.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/BitSetSupport.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/BitSetSupport.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/BitSetSupport.cs diff --git a/external/Lucene.Net.Light/src/core/Support/BuildType.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/BuildType.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/BuildType.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/BuildType.cs diff --git a/external/Lucene.Net.Light/src/core/Support/CRC32.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/CRC32.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/CRC32.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/CRC32.cs diff --git a/external/Lucene.Net.Light/src/core/Support/Character.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Character.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/Character.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Character.cs diff --git a/external/Lucene.Net.Light/src/core/Support/CloseableThreadLocalProfiler.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/CloseableThreadLocalProfiler.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/CloseableThreadLocalProfiler.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/CloseableThreadLocalProfiler.cs diff --git a/external/Lucene.Net.Light/src/core/Support/CollectionsHelper.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/CollectionsHelper.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/CollectionsHelper.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/CollectionsHelper.cs diff --git a/external/Lucene.Net.Light/src/core/Support/Compare.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Compare.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/Compare.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Compare.cs diff --git a/external/Lucene.Net.Light/src/core/Support/Compatibility/ConcurrentDictionary.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Compatibility/ConcurrentDictionary.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/Compatibility/ConcurrentDictionary.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Compatibility/ConcurrentDictionary.cs diff --git a/external/Lucene.Net.Light/src/core/Support/Compatibility/Func.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Compatibility/Func.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/Compatibility/Func.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Compatibility/Func.cs diff --git a/external/Lucene.Net.Light/src/core/Support/Compatibility/ISet.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Compatibility/ISet.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/Compatibility/ISet.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Compatibility/ISet.cs diff --git a/external/Lucene.Net.Light/src/core/Support/Compatibility/SetFactory.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Compatibility/SetFactory.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/Compatibility/SetFactory.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Compatibility/SetFactory.cs diff --git a/external/Lucene.Net.Light/src/core/Support/Compatibility/SortedSet.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Compatibility/SortedSet.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/Compatibility/SortedSet.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Compatibility/SortedSet.cs diff --git a/external/Lucene.Net.Light/src/core/Support/Compatibility/ThreadLocal.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Compatibility/ThreadLocal.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/Compatibility/ThreadLocal.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Compatibility/ThreadLocal.cs diff --git a/external/Lucene.Net.Light/src/core/Support/Compatibility/WrappedHashSet.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Compatibility/WrappedHashSet.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/Compatibility/WrappedHashSet.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Compatibility/WrappedHashSet.cs diff --git a/external/Lucene.Net.Light/src/core/Support/Cryptography.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Cryptography.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/Cryptography.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Cryptography.cs diff --git a/external/Lucene.Net.Light/src/core/Support/Deflater.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Deflater.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/Deflater.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Deflater.cs diff --git a/external/Lucene.Net.Light/src/core/Support/Double.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Double.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/Double.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Double.cs diff --git a/external/Lucene.Net.Light/src/core/Support/EquatableList.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/EquatableList.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/EquatableList.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/EquatableList.cs diff --git a/external/Lucene.Net.Light/src/core/Support/FileSupport.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/FileSupport.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/FileSupport.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/FileSupport.cs diff --git a/external/Lucene.Net.Light/src/core/Support/GeneralKeyedCollection.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/GeneralKeyedCollection.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/GeneralKeyedCollection.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/GeneralKeyedCollection.cs diff --git a/external/Lucene.Net.Light/src/core/Support/HashMap.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/HashMap.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/HashMap.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/HashMap.cs diff --git a/external/Lucene.Net.Light/src/core/Support/IChecksum.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/IChecksum.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/IChecksum.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/IChecksum.cs diff --git a/external/Lucene.Net.Light/src/core/Support/IThreadRunnable.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/IThreadRunnable.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/IThreadRunnable.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/IThreadRunnable.cs diff --git a/external/Lucene.Net.Light/src/core/Support/Inflater.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Inflater.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/Inflater.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Inflater.cs diff --git a/external/Lucene.Net.Light/src/core/Support/Number.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Number.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/Number.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Number.cs diff --git a/external/Lucene.Net.Light/src/core/Support/OS.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/OS.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/OS.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/OS.cs diff --git a/external/Lucene.Net.Light/src/core/Support/SharpZipLib.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/SharpZipLib.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/SharpZipLib.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/SharpZipLib.cs diff --git a/external/Lucene.Net.Light/src/core/Support/Single.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Single.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/Single.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/Single.cs diff --git a/external/Lucene.Net.Light/src/core/Support/TextSupport.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/TextSupport.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/TextSupport.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/TextSupport.cs diff --git a/external/Lucene.Net.Light/src/core/Support/ThreadClass.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/ThreadClass.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/ThreadClass.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/ThreadClass.cs diff --git a/external/Lucene.Net.Light/src/core/Support/ThreadLock.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/ThreadLock.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/ThreadLock.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/ThreadLock.cs diff --git a/external/Lucene.Net.Light/src/core/Support/WeakDictionary.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/WeakDictionary.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Support/WeakDictionary.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Support/WeakDictionary.cs diff --git a/external/Lucene.Net.Light/src/core/Util/ArrayUtil.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/ArrayUtil.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/ArrayUtil.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/ArrayUtil.cs diff --git a/external/Lucene.Net.Light/src/core/Util/Attribute.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/Attribute.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/Attribute.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/Attribute.cs diff --git a/external/Lucene.Net.Light/src/core/Util/AttributeSource.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/AttributeSource.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/AttributeSource.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/AttributeSource.cs diff --git a/external/Lucene.Net.Light/src/core/Util/AverageGuessMemoryModel.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/AverageGuessMemoryModel.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/AverageGuessMemoryModel.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/AverageGuessMemoryModel.cs diff --git a/external/Lucene.Net.Light/src/core/Util/BitUtil.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/BitUtil.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/BitUtil.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/BitUtil.cs diff --git a/external/Lucene.Net.Light/src/core/Util/BitVector.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/BitVector.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/BitVector.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/BitVector.cs diff --git a/external/Lucene.Net.Light/src/core/Util/Cache/Cache.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/Cache/Cache.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/Cache/Cache.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/Cache/Cache.cs diff --git a/external/Lucene.Net.Light/src/core/Util/Cache/SimpleLRUCache.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/Cache/SimpleLRUCache.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/Cache/SimpleLRUCache.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/Cache/SimpleLRUCache.cs diff --git a/external/Lucene.Net.Light/src/core/Util/Cache/SimpleMapCache.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/Cache/SimpleMapCache.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/Cache/SimpleMapCache.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/Cache/SimpleMapCache.cs diff --git a/external/Lucene.Net.Light/src/core/Util/CloseableThreadLocal.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/CloseableThreadLocal.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/CloseableThreadLocal.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/CloseableThreadLocal.cs diff --git a/external/Lucene.Net.Light/src/core/Util/Constants.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/Constants.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/Constants.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/Constants.cs diff --git a/external/Lucene.Net.Light/src/core/Util/DocIdBitSet.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/DocIdBitSet.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/DocIdBitSet.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/DocIdBitSet.cs diff --git a/external/Lucene.Net.Light/src/core/Util/FieldCacheSanityChecker.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/FieldCacheSanityChecker.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/FieldCacheSanityChecker.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/FieldCacheSanityChecker.cs diff --git a/external/Lucene.Net.Light/src/core/Util/IAttribute.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/IAttribute.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/IAttribute.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/IAttribute.cs diff --git a/external/Lucene.Net.Light/src/core/Util/IdentityDictionary.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/IdentityDictionary.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/IdentityDictionary.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/IdentityDictionary.cs diff --git a/external/Lucene.Net.Light/src/core/Util/IndexableBinaryStringTools.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/IndexableBinaryStringTools.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/IndexableBinaryStringTools.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/IndexableBinaryStringTools.cs diff --git a/external/Lucene.Net.Light/src/core/Util/MapOfSets.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/MapOfSets.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/MapOfSets.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/MapOfSets.cs diff --git a/external/Lucene.Net.Light/src/core/Util/MemoryModel.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/MemoryModel.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/MemoryModel.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/MemoryModel.cs diff --git a/external/Lucene.Net.Light/src/core/Util/NumericUtils.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/NumericUtils.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/NumericUtils.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/NumericUtils.cs diff --git a/external/Lucene.Net.Light/src/core/Util/OpenBitSet.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/OpenBitSet.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/OpenBitSet.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/OpenBitSet.cs diff --git a/external/Lucene.Net.Light/src/core/Util/OpenBitSetDISI.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/OpenBitSetDISI.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/OpenBitSetDISI.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/OpenBitSetDISI.cs diff --git a/external/Lucene.Net.Light/src/core/Util/OpenBitSetIterator.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/OpenBitSetIterator.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/OpenBitSetIterator.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/OpenBitSetIterator.cs diff --git a/external/Lucene.Net.Light/src/core/Util/PriorityQueue.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/PriorityQueue.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/PriorityQueue.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/PriorityQueue.cs diff --git a/external/Lucene.Net.Light/src/core/Util/RamUsageEstimator.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/RamUsageEstimator.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/RamUsageEstimator.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/RamUsageEstimator.cs diff --git a/external/Lucene.Net.Light/src/core/Util/ReaderUtil.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/ReaderUtil.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/ReaderUtil.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/ReaderUtil.cs diff --git a/external/Lucene.Net.Light/src/core/Util/ScorerDocQueue.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/ScorerDocQueue.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/ScorerDocQueue.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/ScorerDocQueue.cs diff --git a/external/Lucene.Net.Light/src/core/Util/SimpleStringInterner.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/SimpleStringInterner.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/SimpleStringInterner.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/SimpleStringInterner.cs diff --git a/external/Lucene.Net.Light/src/core/Util/SmallFloat.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/SmallFloat.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/SmallFloat.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/SmallFloat.cs diff --git a/external/Lucene.Net.Light/src/core/Util/SortedVIntList.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/SortedVIntList.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/SortedVIntList.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/SortedVIntList.cs diff --git a/external/Lucene.Net.Light/src/core/Util/SorterTemplate.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/SorterTemplate.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/SorterTemplate.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/SorterTemplate.cs diff --git a/external/Lucene.Net.Light/src/core/Util/StringHelper.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/StringHelper.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/StringHelper.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/StringHelper.cs diff --git a/external/Lucene.Net.Light/src/core/Util/StringInterner.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/StringInterner.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/StringInterner.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/StringInterner.cs diff --git a/external/Lucene.Net.Light/src/core/Util/ToStringUtils.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/ToStringUtils.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/ToStringUtils.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/ToStringUtils.cs diff --git a/external/Lucene.Net.Light/src/core/Util/UnicodeUtil.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/UnicodeUtil.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/UnicodeUtil.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/UnicodeUtil.cs diff --git a/external/Lucene.Net.Light/src/core/Util/Version.cs b/external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/Version.cs similarity index 100% rename from external/Lucene.Net.Light/src/core/Util/Version.cs rename to external/api-doc-tools/external/Lucene.Net.Light/src/core/Util/Version.cs diff --git a/external/api-doc-tools/external/SharpZipLib/.editorconfig b/external/api-doc-tools/external/SharpZipLib/.editorconfig new file mode 100644 index 0000000000..92cbdb1d69 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/.editorconfig @@ -0,0 +1,35 @@ +# editorconfig.org + +# top-most EditorConfig file +root = true + +# Default settings: +# A newline ending every file +# Use 4 spaces as indentation +[*] +insert_final_newline = true +indent_style = tab +indent_size = 4 + +# C++ Files +[*.{cpp,h,in}] +curly_bracket_next_line = true +indent_brace_style = Allman + +# Xml project files +[*.{csproj,vcxproj,vcxproj.filters,proj,nativeproj,locproj}] +indent_size = 2 + +# Xml files +[*.{xml,stylecop,resx,ruleset}] +indent_size = 2 + +# Xml config files +[*.{props,targets,config,nuspec}] +indent_size = 2 + +# Shell scripts +[*.sh] +end_of_line = lf +[*.{cmd, bat}] +end_of_line = crlf diff --git a/external/api-doc-tools/external/SharpZipLib/.gitattributes b/external/api-doc-tools/external/SharpZipLib/.gitattributes new file mode 100644 index 0000000000..87a3690c01 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/.gitattributes @@ -0,0 +1,67 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain + +# Force bash scripts to always use lf line endings so that if a repo is accessed +# in Unix via a file share from Windows, the scripts will work. +*.sh text eol=lf diff --git a/external/api-doc-tools/external/SharpZipLib/.github/CONTRIBUTING.md b/external/api-doc-tools/external/SharpZipLib/.github/CONTRIBUTING.md new file mode 100644 index 0000000000..f54527ec02 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/.github/CONTRIBUTING.md @@ -0,0 +1,11 @@ +# Contributing to SharpZipLib + +Thanks for helping to improve SharpZipLib. + +In order for your changes to be accepted you can either sign the [Joint Copyright Assignment](http://www.icsharpcode.net/TechNotes/JointCopyrightAssignment.pdf) or add the following statement to your pull request: + +_I certify that I own, and have sufficient rights to contribute, all source code and related material intended to be compiled or integrated with the source code for the SharpZipLib open source product (the "Contribution"). My Contribution is licensed under the MIT License._ + +Unless we have a Joint Copyright Agreement on file or this statement is in your pull request, we cannot accept it. + +More information is available on [joining the team](https://github.com/icsharpcode/SharpDevelop/wiki/Joining-the-Team). diff --git a/external/api-doc-tools/external/SharpZipLib/.github/ISSUE_TEMPLATE.md b/external/api-doc-tools/external/SharpZipLib/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000000..5a6112fdf5 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,25 @@ +### Steps to reproduce +1. +2. +3. + +### Expected behavior +Tell us what should happen + +### Actual behavior +Tell us what happens instead + +### Version of SharpZipLib + +### Obtained from (place an x between the brackets for all that apply) +- [ ] Compiled from source + - branch: _______ + - commit: _______ +- [ ] Downloaded DLL from GitHub +- [ ] Downloaded DLL from SourceForge +- [ ] Downloaded DLL from _______ +- [ ] DLL included as part of +- Package installed using: + - [ ] NuGet + - [ ] MyGet + - [ ] Chocolatey diff --git a/external/api-doc-tools/external/SharpZipLib/.github/PULL_REQUEST_TEMPLATE.md b/external/api-doc-tools/external/SharpZipLib/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000000..d97ce80654 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,4 @@ + +_I certify that I own, and have sufficient rights to contribute, all source code and related material intended to be compiled or integrated with the source code for the SharpZipLib open source product (the "Contribution"). My Contribution is licensed under the MIT License._ diff --git a/external/api-doc-tools/external/SharpZipLib/.gitignore b/external/api-doc-tools/external/SharpZipLib/.gitignore new file mode 100644 index 0000000000..f1e3d20e05 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/.gitignore @@ -0,0 +1,252 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml diff --git a/external/api-doc-tools/external/SharpZipLib/.travis.yml b/external/api-doc-tools/external/SharpZipLib/.travis.yml new file mode 100644 index 0000000000..d404af99a8 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/.travis.yml @@ -0,0 +1,28 @@ +language: csharp +mono: + - latest +os: + - linux + - osx +solution: ICSharpCode.SharpZipLib.sln +install: + - nuget restore ICSharpCode.SharpZipLib.sln +script: + - xbuild /p:Configuration=Debug ICSharpCode.SharpZipLib.sln + - xbuild /p:Configuration=Release ICSharpCode.SharpZipLib.sln + - mono ./packages/NUnit.ConsoleRunner.3.2.1/tools/nunit3-console.exe --framework=mono-4.0 --labels=All --testlist=./ICSharpCode.SharpZipLib.Tests/PassingTests.txt --result=./Documentation/nunit3-test-results-travis.xml ./bin/Release/ICSharpCode.SharpZipLib.Tests.dll +after_script: + - nuget pack Build/ICSharpCode.SharpZipLib.nuspec -BasePath Build -OutputDirectory bin/Release +cache: + directories: + - bin + - Documentation +#deploy: +# provider: releases +# api_key: "GITHUB OAUTH TOKEN" +# file: +# - "bin/Release/ICSharpCode.SharpZipLib.nupkg" +# - "Documentation/nunit3-test-results-travis.xml" +# skip_cleanup: true +# on: +# tags: true diff --git a/external/api-doc-tools/external/SharpZipLib/Build/ICSharpCode.SharpZipLib.nuspec b/external/api-doc-tools/external/SharpZipLib/Build/ICSharpCode.SharpZipLib.nuspec new file mode 100644 index 0000000000..9b6e16fc24 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Build/ICSharpCode.SharpZipLib.nuspec @@ -0,0 +1,34 @@ + + + + ICSharpCode.SharpZipLib-dogfood + 1.0 + SharpZipLib-dogfood + IC#Code + IC#Code + SharpZipLib (#ziplib, formerly NZipLib) is a compression library for Zip, GZip, BZip2, and Tar written entirely in C# for .NET. It is implemented as an assembly (installable in the GAC), and thus can easily be incorporated into other projects (in any .NET language) + Please see https://github.com/icsharpcode/SharpZipLib/wiki/Release-1.0 for more information. +

"Dogfood" builds for testing purposes. Even *I* wouldn't put this code into production :) + en-US + http://icsharpcode.github.io/SharpZipLib/ + + http://icsharpcode.github.io/SharpZipLib/#license + Copyright © 2000-2016 SharpZipLib Contributors + false + + + + Compression Library Zip GZip BZip2 LZW Tar + + + + + + + + + + + + + diff --git a/external/api-doc-tools/external/SharpZipLib/Build/ICSharpCode.SharpZipLib.version b/external/api-doc-tools/external/SharpZipLib/Build/ICSharpCode.SharpZipLib.version new file mode 100644 index 0000000000..6c4d7b5a00 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Build/ICSharpCode.SharpZipLib.version @@ -0,0 +1,4 @@ +nuget_version=1.0.0 +full_version=1.0.0.0 +release_notes_link=https://github.com/icsharpcode/SharpZipLib/wiki/Release-1.0/ +copyright=Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team diff --git a/external/api-doc-tools/external/SharpZipLib/Build/install-fxmicroframework-43-44.ps1 b/external/api-doc-tools/external/SharpZipLib/Build/install-fxmicroframework-43-44.ps1 new file mode 100644 index 0000000000..5b5dc0dbe5 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Build/install-fxmicroframework-43-44.ps1 @@ -0,0 +1,11 @@ +Write-Host "Installing .NET MicroFramework 4.3 ..." +$msiPath = "$($env:USERPROFILE)\MicroFrameworkSDK43.MSI" +(New-Object Net.WebClient).DownloadFile('http://download-codeplex.sec.s-msft.com/Download/Release?ProjectName=netmf&DownloadId=1423116&FileTime=130667921437670000&Build=21031', $msiPath) +cmd /c start /wait msiexec /i $msiPath /quiet +Write-Host "Installed" -ForegroundColor green + +Write-Host "Installing .NET MicroFramework 4.4 ..." +$msiPath = "$($env:USERPROFILE)\MicroFrameworkSDK44.MSI" +(New-Object Net.WebClient).DownloadFile('https://github.com/NETMF/netmf-interpreter/releases/download/v4.4-RTW-20-Oct-2015/MicroFrameworkSDK.MSI', $msiPath) +cmd /c start /wait msiexec /i $msiPath /quiet +Write-Host "Installed" -ForegroundColor green diff --git a/external/api-doc-tools/external/SharpZipLib/Build/installGAC.bat b/external/api-doc-tools/external/SharpZipLib/Build/installGAC.bat new file mode 100644 index 0000000000..18a78618d1 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Build/installGAC.bat @@ -0,0 +1,6 @@ +@echo off +cd bin +echo installing ICSharpCode.SharpZipLib.dll into the GAC +gacutil /i ICSharpCode.SharpZipLib.dll +cd .. + diff --git a/external/api-doc-tools/external/SharpZipLib/Build/run-appveyor-build.ps1 b/external/api-doc-tools/external/SharpZipLib/Build/run-appveyor-build.ps1 new file mode 100644 index 0000000000..039a39ac96 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Build/run-appveyor-build.ps1 @@ -0,0 +1,27 @@ +# Define build command. +$buildCmd = "C:\Program Files (x86)\MSBuild\14.0\bin\msbuild.exe"; +$buildArgs = @( + "ICSharpCode.SharpZipLib.sln" + "/l:C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll", + "/m", + "/p:UseSharedCompilation=false", + "/p:Configuration=Release", + "/p:Platform=Any CPU"); + +# If build is not a scheduled one, then simply build the project with MSBuild. +if ($env:APPVEYOR_SCHEDULED_BUILD -ne "True") { + & $buildCmd $buildArgs +# & nuget pack -OutputDirectory + return # exit script +} + +# Else, build project with Coverity Scan. +$publishCoverityExe = $env:APPVEYOR_BUILD_FOLDER + "\packages\PublishCoverity.0.11.0\tools\PublishCoverity.exe"; +"Building project with Coverity Scan..." +& cov-build --dir Documentation\cov-int $buildCmd $buildArgs; + +# Compress scan data. +& $publishCoverityExe compress -o Documentation\coverity.zip -i Documentation\cov-int; + +# Upload scan data. +& $publishCoverityExe publish -z Documentation\coverity.zip -r McNeight/SharpZipLib -t $env:Coverity_Token -e $env:Coverity_Email -d "AppVeyor scheduled build"; diff --git a/external/api-doc-tools/external/SharpZipLib/Build/run-nunit3-tests-debug.cmd b/external/api-doc-tools/external/SharpZipLib/Build/run-nunit3-tests-debug.cmd new file mode 100644 index 0000000000..e3e51d42ff --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Build/run-nunit3-tests-debug.cmd @@ -0,0 +1 @@ +packages\NUnit.ConsoleRunner.3.2.1\tools\nunit3-console.exe --framework=net-4.5 --domain=Single --testlist=ICSharpCode.SharpZipLib.Tests\PassingTests.txt --result=Documentation\nunit3-test-results-debug.xml bin\Debug\ICSharpCode.SharpZipLib.Tests.dll diff --git a/external/api-doc-tools/external/SharpZipLib/Build/run-nunit3-tests-release.cmd b/external/api-doc-tools/external/SharpZipLib/Build/run-nunit3-tests-release.cmd new file mode 100644 index 0000000000..7a5f6bedf1 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Build/run-nunit3-tests-release.cmd @@ -0,0 +1 @@ +packages\NUnit.ConsoleRunner.3.2.1\tools\nunit3-console.exe --framework=net-4.5 --domain=Single --testlist=ICSharpCode.SharpZipLib.Tests\PassingTests.txt --result=Documentation\nunit3-test-results-release.xml bin\Release\ICSharpCode.SharpZipLib.Tests.dll diff --git a/external/api-doc-tools/external/SharpZipLib/Build/run-opencover.cmd b/external/api-doc-tools/external/SharpZipLib/Build/run-opencover.cmd new file mode 100644 index 0000000000..790f02c8b6 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Build/run-opencover.cmd @@ -0,0 +1 @@ +packages\OpenCover.4.6.519\tools\OpenCover.Console.exe -register:user -filter:+[ICSharpCode.SharpZipLib]* -target:Build\run-nunit3-tests-release.cmd -output:Documentation\opencover-results-release.xml diff --git a/external/api-doc-tools/external/SharpZipLib/Build/run-reportgenerator.cmd b/external/api-doc-tools/external/SharpZipLib/Build/run-reportgenerator.cmd new file mode 100644 index 0000000000..7c1f0f8525 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Build/run-reportgenerator.cmd @@ -0,0 +1 @@ +packages\ReportGenerator.2.4.5.0\tools\ReportGenerator.exe -reports:Documentation\opencover-results-release.xml -targetdir:Documentation\opencover diff --git a/external/api-doc-tools/external/SharpZipLib/Build/sharpziplib.pc b/external/api-doc-tools/external/SharpZipLib/Build/sharpziplib.pc new file mode 100644 index 0000000000..8c69f5c299 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Build/sharpziplib.pc @@ -0,0 +1,8 @@ +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib + +Name: sharpziplib +Description: C# Zip, GZip, Tar and BZip2 library for .NET +Version: 0.86 +Libs: -r:${libdir}/mono/sharpziplib/ICSharpCode.SharpZipLib.dll \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Build/uninstallGAC.bat b/external/api-doc-tools/external/SharpZipLib/Build/uninstallGAC.bat new file mode 100644 index 0000000000..6405ed1e44 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Build/uninstallGAC.bat @@ -0,0 +1 @@ +gacutil /u ICSharpCode.SharpZipLib diff --git a/external/api-doc-tools/external/SharpZipLib/CONTRIBUTING.md b/external/api-doc-tools/external/SharpZipLib/CONTRIBUTING.md new file mode 100644 index 0000000000..f54527ec02 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/CONTRIBUTING.md @@ -0,0 +1,11 @@ +# Contributing to SharpZipLib + +Thanks for helping to improve SharpZipLib. + +In order for your changes to be accepted you can either sign the [Joint Copyright Assignment](http://www.icsharpcode.net/TechNotes/JointCopyrightAssignment.pdf) or add the following statement to your pull request: + +_I certify that I own, and have sufficient rights to contribute, all source code and related material intended to be compiled or integrated with the source code for the SharpZipLib open source product (the "Contribution"). My Contribution is licensed under the MIT License._ + +Unless we have a Joint Copyright Agreement on file or this statement is in your pull request, we cannot accept it. + +More information is available on [joining the team](https://github.com/icsharpcode/SharpDevelop/wiki/Joining-the-Team). diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/Changes.txt b/external/api-doc-tools/external/SharpZipLib/Documentation/Changes.txt new file mode 100644 index 0000000000..e7a4b45b0a --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/Changes.txt @@ -0,0 +1,248 @@ +Changes for 0.86.0 ++ Multi-member gzip files are now supported. Contributed by Geoff Hart. ++ Zero byte files caused ZipOutputStream to create invalid zipfiles. Contributed by Mark Ritchie. ++ ZipFile.CommitUpdate failed on ODT (Open Document) files when updating in memory. Contributed by Dricks. ++ Exceptions occurring within ZipFile.CommitUpdate were being silently discarded. ++ In FastZip, the NameFilter erroneously removed all escapes from regex. Contributed by John Lemberger. + Note: This is a breaking change - if you had detoured this filter bug via doubled-up backslashes, + please halve them - for example change @"\\\\myextract.txt$" to @"\\myextract.txt$", or + change "\\\\\\\\myextract.txt$" to "\\\\myextract.txt$". ++ AES Encryption and Decryption is now supported. ++ TarArchive now has IsStreamOwner property, for use with MemoryStream. ++ Removed exception "Extra data contains Zip64 information but version 2.0 is not high enough" due to rogue zip creators. ++ FastZip.ExtractZip now accepts an Input Stream. ++ Zip input and output streams can now specify buffer sizes. ++ Solved "NTFS Extra data invalid" exception when reading zip files with zero-length NTFS ExtraData entry. ++ Fixed "Size mismatch" exceptions reading zips created by SharpZipLib with an explicit entry CRC and Size. + + +Changes for 0.85.5 ++ Fix for unreferenced ZipFile causing read failure after garbage collection. ++ Fix to ZipInputStream.CloseEntry were skipping could fail for long values. ++ Potential race condition flaw in FastZip event handling fixed up. ++ Wrong exceptions being thrown and wrong arguments for some exceptions fixed. ++ TarArchive handling tweaked so creation of archive with Tar streams is handled cleanly ++ ZipFile Testing now handles directories better. ++ DeflatorEngine altered so TotalIn is long. ++ ZipInputStream handles initial reading for entries with no data better. ++ Updates to unit tests ++ BZip2Constants made internal. A breaking change in theory but no-one should be using these values. ++ BZip2 QSort3 optimised somewhat by changing StackElement from class to struct as per lytico suggestion. ++ Name filters allow quoting of ';' characters using \; ++ Fix GZIP flag checking bug ++ ArgumentNull instead of NullReference in tar header now thrown. ++ WindowsNameTransform now used in fastzip ++ Disposed checking in ZipFile beefed up. ++ Bug in entry handling for stored entries and sizing fixed. ++ Zip entries with zero bytes written optimised. ++ TarBuffer.IsEofBlock made obsolete use static TarBuffer.IsEndOfArchiveBlock instead. ++ GZip Finish and Close no longer add extra footers. Close can be called twice without exception. Writes after finish/close now fail. ++ Fastzip now throws exceptions if they are 'handled' via delegates. + + +Changes for 0.85.4 ++ Fix for encryption going awol in Zip archives sometimes ++ Help files updated and now generated by Sandcastle Help File Builder + ++ Extended unit tests in many areas. ++ Fixed GZip reading of streams larger then 2^32. ++ Windows date time now handled in ExtraData. ++ Extensions to extra data handling. ++ Encrypting stored entries no longer consumes arbitrary amounts of memory. ++ DeflatorOutputStream now uses CryptoTransform ++ ZipInputStream detection of invalid sizes improved. ++ ZipHelperStream reading end of stream values now correctly handled ++ ZipHelperStream now supports reading/writing data descriptors. ++ ZipFile testing data now handles data descriptors. ++ ZipFile adding entries now correctly handles data descriptors. ++ ZipFile now defaults to dynamic use of Zip64. ++ ZipEntryFactory class made public and bugs fixed. ++ ZipEntry DateTime handling cleaned up - Zero is treated as fixed low value and high values checked and handled. ++ Added progress event handling to FastZip. + +Changes for 0.85.2.329 + ++ Minor tweaks for CF, ZipEntryFactory and ZipFile. ++ Fix for zip testing and Zip64 local header patching. ++ FastZip revamped to handle file attributes on extract + other fixes ++ Null ref in path filter fixed. ++ Extra data handling fixes ++ Revamped build and conditional compilation handling ++ Many bug fixes for Zip64. ++ Minor improvements to C# samples. ++ ZIP-1341 Non ascii zip password handling fix. ++ ZIP-355 Fix for zip compression problem at low levels + +Changes for v0.85.1.271 + ++ BREAKING CHANGE: Zip name transform implementations and other classes no longer directly support non-relative paths. ++ Update to Compact Framework handling to cater for CF 2.0 as well as 1.0 (minus encryption for 1.0) ++ Fix for Zip64 descriptor handling. ++ Zip64 handling altered to default to "Zip32" for compatability. ++ Add preliminary implementation for handlng of full unicode names. ++ Fix up encryption handling for ZipFile during updates. ++ Fix for updating bug were comment is the only thing updated. ++ Add IEntryFactory interface and default implementation. Used in FastZip class currently. ++ ZIP-1216 GZipOutputStream header writing delayed allowing the class to be used with HTTP and IIS (via HttpResponse.Filter). This was supposed to be fixed in 0.6 but was ommited. ++ ZIP-149 SVN Revision number incorporated in builds. ++ ZIP-1245 CF Build support added + +Changes for v0.85 ++ Mod time written in gzip header corrected. ++ Fix for ZipInputStream where closing an open entry wasnt handling all cases correctly. ++ Add support for Zip64 handling to both streams and ZipFile classes. ++ Add ability to modify an existing archive to ZipFile class. ++ Limited FxCop cleanups ++ TarArchive and others made IDisposable. ++ TarOutputStream end-of-file garbage data problem fixed. ++ Zip archive no longer performs zero writes which can cause problems. ++ A bundle of minor bug fixes particularly in the Zip area. ++ Enhanced testing facilities in ZipFile class to allow feedback. + +Known issues fixed. ++ ZIP-975 BZip Compress and Decompress stream handling inconsistent. ++ ZIP-517 Stored entry handling were descriptors are specified in flags. ++ ZIP-514 FastZip not firing File/Directory Failure. ++ ZIP-513 HttpResponse exception when writing 0 bytes. ++ ZIP-506 Decryption fails for entry with extended time. ++ ZIP-174 Exception on zero length entries. + + +Changes for v0.84 ++ When skipping to an entry in a zip archive no data is read. This allows password setting after examining the entry to + see if a password is required, and also allows skipping of entries that cannot be extracted. You cannot skip + an entry that cannot be extracted if the length is not in the local header. ++ Refactored decryption to make it robust and remove bugs. ++ Fix for reads of zero length in zip files. ++ Fix encryption bug in DeflatorOutputStream. ++ Fix bug when skipping entries ++ Add FastZip class. + +Changes for v0.83b ++ Added SFX read support to ZipFile class. ++ Added code to test archive contents to ZipFile class. ++ Added SimpleZip to allow direct compression and decompression of zip files. + +Changes for v0.83a ++ Bug with long file names in TAR fixed ++ Calling close on a stream returned by ZipFile.GetInputStream no longer closes main ZipFile stream + +Changes for v0.83 ++ Refactored tests so the main library doesnt require nunit to build. A separate project for tests now exists. ++ GzipOutputStream now has a custom SetLevel method to set the compression level. ++ Unit tests upgraded to Nunit 2.2 style ++ A number of TAR bugs fixes in long names, entry size handling ++ TAR checksums are now actually checked and utilised. ++ Zip Streams now have concept of ownership for underlying stream allowing users to control when they are closed. + +Changes for v0.82 ++ Exception hierarchy altered so all internal library exceptions are derived from the same base class ++ A bug in tar handling where case wasnt correctly preserved has been repaired ++ ZipFile class was failing to set the bit flags field when reading entries, this has been corrected. + +Changes for v0.81 ++ ZipFile test checking for seekable stream shifted so it covers all constructors. ++ Flaw when checking local entry name against central directory name for MCBS strings worked around. ++ Some ZipEntry constructors made internal as they should have been originally ++ Some changes to allow compact framework compilation made. ++ Small alteration to TarEntry.cs to allow 1.0 compilation as well as 1.1 . + +Changes for 0.8 ++ Add functionality to support cleaning of names to Zip file convention added to ZipEntry class ++ External file and attributes are now handled ++ IsDirectory now handles the attributes for archives made on DOS/Windows ++ ZipFile class now has an indexer property ++ ZipFile class has new functionality for searching for entries by name ++ ZipFile class now reads external attributes from central header entries ++ Fixed bug in ZipInputStream class where extra bytes containing unix attributes altered date and time causing checking of password to fail ++ ZipInputStream class now checks version required to extract. ++ ZipOutputStream class version made by is now fixed at 2.0 ++ Cleaned up summary comments all over the place. ++ Some changes to Tar classes to allow Compact Framework compilation. ++ Add checking for invalid entries when scanning through extra data. ++ Decryption of entries from Zip files created on non-seekable output now works. ++ Deflating of zero length files is automatically converted to stored if possible to save a little space. ++ More tests. + +Changes for 0.7 ++ Further encryption problems resolved ++ More tests added ++ More summary comments included ++ ZipFile locating central header optimised for case where file is not a zip file. ++ Add sample sz a commandline cs archiver for Zip files ++ Fix more end of stream return value bugs ++ Some tar bugs fixed + +Changes for 0.6.1 ++ Fix from John Reilly : A couple of things to fix up in TarInputStream. Some Console.WriteLine stuff which should be removed/commented and a fix for handling directories. ++ + +Changes for 0.6 ++ some return -1 bugs fixed ++ added gzipoutputstream mods from ben@blowery.org: +"It writes out the GZip header to the base stream as part of its constructor. +Unfortunately, I cannot write to the underlying stream (the +HttpResponse.Filter) upon construction. I need to delay the header write +until just before the first real write to the GZipOutputStream. I went +ahead and made the modifications to the library and it seems to work +wonderfully." ++ Added patches from John Reilly many, many bugs got fixed. ++ Added unit tests to ensure a certain level of stability + +Changes since 0.51 ++ Support for crypted files (decryption) ++ WinZip can't delete bug fixed (thanx to JackmanG from the SharpDevelop forum) ++ The ZipFile class has now a 'ZipFileComment' property containing the comment for the whole zip file. Contributed by John Carto. + +Changes for 0.4 ++ Compact Framework support ++ Tar bug fixed by Lloyd Dupont ++ Hopefully this time the date bug is fixed :) ++ SharpZipLib is now strong named and installGAC/uninstallGAC scripts are provided + +Changes for 0.31 ++ The Read method in the gzipstream returned still -1 instead of 0 at the eos + +Changes for 0.3 + ++ Problem description: + "The BinaryDeserializer explicitly checks the length of the input stream you hand it, and throws an exception if + you try to deserialize from a stream that reports a length of zero. Unfortunately, InflaterInputStream reports a + length of zero when you first query it." + Fixed by Joel Mueller : + The InflaterInputStream constructor (Stream, Inflater, int) is changed so that InflaterInputStream.len is initialized to + baseInputStream.Length instead of zero. ++ Problem description: + "When you try to get all entries of your ZipFile class over a + foreach(ZipEntry e in zFile) loop, you get all except the first one. + + I think the reason for this is: your index member (ptr) is initialized + with value 0. Because your function MoveNext() first increases ptr and then + the entry is accessed the first entry is skipped. ++ Bugfix date/time bug by Rainer Prem ++ Renamed the library to SharpZipLib (#ZipLib for short) ++ Added bzip2 compression/decompression ++ The Read method returns 0 instead of -1, when the end of the stream is reached. + (this is defined by the .NET library) ++ Added tar support ++ The Date/Time now works better when reading zip files. ++ Fixed a rare compression bug (exception while zip/gzip specific files) + +Changes for 0.2 + ++ Added new property in ZipEntry: DateTime Datetime {get; set;} + (gets/sets datetime of an entry; should be easier to handle than the dos time. (int value)) ++ Added new class: ZipFile + This class allows easy reading of a zipped file and it's entries. ++ Changed the ZipOutputStream behavior: + Now it writes the Size, Crc, Compressed size in the header, if the baseOutputStream is able to + seek (which should be true for all files). Some crunchers had problems unpacking the files which had + the Size, Crc, Compressed size fields in the data descriptor after the file data. ++ CompressionMethod is now an enumeration instead of a int. ++ Changed many internal Get/Set methods into C# properties. ++ The base methods in the Deflater/Inflater Streams are now called correctly; it should + work to use this construct (at least in my CVS library it does): + new InflaterInputStream(new DeflaterOutputStream(new IOStream()); ++ Fixed bug: DeflateFast had a bug which is now (hopefully) gone. This bug was in the original + Java version too. (But please test fast deflate (compression level 1-3)) + diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/SharpZipLib.chm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/SharpZipLib.chm.REMOVED.git-id new file mode 100644 index 0000000000..f3940e9368 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/SharpZipLib.chm.REMOVED.git-id @@ -0,0 +1 @@ +a3ddd7b2a626fbe3a6ded38ce139edc98ba3b8fe \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/SharpZipLib.msha b/external/api-doc-tools/external/SharpZipLib/Documentation/SharpZipLib.msha new file mode 100644 index 0000000000..45123b1469 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/SharpZipLib.msha @@ -0,0 +1,20 @@ + + + ICSharpCode.SharpZipLib Compression Library + + +
+ Vendor Name + en-us + ICSharpCode.SharpZipLib Compression Library + ICSharpCode.SharpZipLib Compression Library +
+
+
+ + SharpZipLib + SharpZipLib.mshc +
+
+ + diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/SharpZipLib.mshc.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/SharpZipLib.mshc.REMOVED.git-id new file mode 100644 index 0000000000..2118298a3f --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/SharpZipLib.mshc.REMOVED.git-id @@ -0,0 +1 @@ +da397dd64b3bc1eaa3458e5e3079156ac6ac70a7 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/SharpZipLibCodeMap.dgml b/external/api-doc-tools/external/SharpZipLib/Documentation/SharpZipLibCodeMap.dgml new file mode 100644 index 0000000000..15a0286133 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/SharpZipLibCodeMap.dgml @@ -0,0 +1,413 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/SharpZipLib_MD.shfbproj b/external/api-doc-tools/external/SharpZipLib/Documentation/SharpZipLib_MD.shfbproj new file mode 100644 index 0000000000..5861fb0a60 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/SharpZipLib_MD.shfbproj @@ -0,0 +1,81 @@ + + + + + Debug + AnyCPU + 2.0 + {3b65ed0d-1572-45b4-ac3a-5dfb2ed3df74} + 2015.6.5.0 + + Documentation + Documentation + Documentation + + .NET Framework 4.5 + help_md\ + SharpZipLib + en-US + #ziplib compression library + Summary, Parameter, Returns, AutoDocumentCtors, Namespace, TypeParameter + InheritedMembers, InheritedFrameworkMembers, Protected, SealedProtected + + + ICSharpCode.SharpZipLib Compression Library + Markdown + + + + + + + The root namespace for this library. + BZip2 compression handling + Checksum Handling + Core Utilities + Encryption handling + GZip compression handling + Tape Archive handling + ZIP archive handling + Zip Compression handling + Zip compression streams. + + AllMessages + SHFB_Build.log + Markdown + False + True + False + True + 1.0.0.0 + 2 + False + Standard + Blank + False + False + HashedMemberName + AboveNamespaces + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/SharpZipLib_VS2013.shfbproj b/external/api-doc-tools/external/SharpZipLib/Documentation/SharpZipLib_VS2013.shfbproj new file mode 100644 index 0000000000..4626ce901a --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/SharpZipLib_VS2013.shfbproj @@ -0,0 +1,81 @@ + + + + + Debug + AnyCPU + 2.0 + {3b65ed0d-1572-45b4-ac3a-5dfb2ed3df74} + 2015.6.5.0 + + Documentation + Documentation + Documentation + + .NET Framework 4.5 + .\help\ + SharpZipLib + en-US + #ziplib compression library + Summary, Parameter, Returns, Value, Remarks, AutoDocumentCtors, Namespace, TypeParameter, IncludeTargets, AutoDocumentDispose + InheritedMembers, InheritedFrameworkMembers, Protected, SealedProtected + + + ICSharpCode.SharpZipLib Compression Library + VS2013 + + + + + + + The root namespace for this library. + BZip2 compression handling + Checksum Handling + Core Utilities + Encryption handling + GZip compression handling + Tape Archive handling + ZIP archive handling + Zip Compression handling + Zip compression streams. + + OnlyWarningsAndErrors + SHFB_Build.log + HtmlHelp1, MSHelpViewer, Website + False + True + False + True + 0.87.0.0 + 2 + False + Standard + Blank + False + False + MemberName + AboveNamespaces + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/future/ARCHIVES.TXT b/external/api-doc-tools/external/SharpZipLib/Documentation/future/ARCHIVES.TXT new file mode 100644 index 0000000000..7b2b7ab730 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/future/ARCHIVES.TXT @@ -0,0 +1,1346 @@ + + + [[[[[[[[[ ARCHIVE FORMATS AND DATA ]]]]]]]]] + + (C) 1989 Raymond Clay + Permision to freely distribute and modify + is granted so long as credit is given + and all of the text through the disclaimer + is retained and unchanged + + October 31, 1989 + +If you want to submit corrections, changes or source code (in plain ASCII), +you can reach me via: + + + CIS : 74730,1344 + GEnie : R.CLAY1 + AppleLink : Raymond6 + StarText : 209287 511 bytes, < 128k DOS 3.3 256 + $3 > 129k HFS 524 + $5 extended file + $D subdirectory + +20 NXCRTIM HEX 000000 ;file creation time and date +23 NXCRDAT HEX 0000000000 +28 NXMDTIM HEX 000000 ;time and date file last modified +2B NXMDDAT HEX 0000000000 +30 NXARCTIM HEX 000000 ;time and date file archived +33 NXARCDAT HEX 0000000000 + . + . + +Any other attributes are added here. NXATRBCNT points to the NXFNL, which +is always the last attribute. + + . + . +NXATRBCNT-2 + NXFNL DW 0000 ;filename length + + +FILENAME SECTION +---------------- + +NXFNL+2 + NXFILE DS NXFNL ;Filename, partial pathname or disk + ;volume name. Names ported across + ;systems may have illegal characters + ;or characteristics. + + + + + + + + + + Page 12 + + +THREAD SECTION +-------------- + +Thread records are 16 byte records which immediately follow the filename and +describe the types of data structures which are included with a given record. +The number of threads is in the attribute section under NXNUMTHR. + + +A thread record can be represented as follows: + +OFFSET LABEL TYP VALUE DESCRIPTION +------ ----------- ---- ----------- ---------------------------------- +00 THRCLASS DW 0000 ;describes the class of the thread + + 0000 CLS_MSG + 0001 CLS__CNTRL + 0002 CLS_DATA + 0003 CLS_SPRSE + +02 THRFRMT DW 0000 ;format of the data within the thread + + 0000 ;Uncompressed + 0001 ;SQueezed (SQ/USQ) + 0002 ;Dynamic LZW [ShrinkIt] + 0003 + . ;RESERVED, contact the author + FFFF + +04 THRKIND DW 0000 ;describes data in thread + + if THRCLS = and THRKIND = THEN THE THREAD CONTAINS: + ---------------- -------------- --------------------------- + CLS_MSG 0000 ASCII text + all others undefined + + CLS_CNTRL 0000 create directory + all others undefined + + CLS_DATA 0000 data_fork of file + 0001 disk image + 0002 resource_fork of file + all others undefined + +06 DS 2 +08 THREOF HEX 00000000 ;length of the uncompressed thread +0C THRCMPEOF HEX 00000000 ;length of the compressed thread + +POSITIONING IN FILE +------------------- + +Start of the thread list = (beginning of header) + NXATRBCNT + NXFNL + +End of the thread list = (beginning of header) + NXATRBCNT + NXFNL + + (16 * NXNUMTHR) + +Start of a data_thread = (beginning of header) + NXATRBCNT + NXFNL + + (16 * NXNUMTHR) + (THRCMPEOF of all threads + in the thread list which are not data prior + to finding a CLS_DATA = 0000) + + + + + Page 13 + + +Start of a resource_thread = (beginning of header) + NXATRBCNT + NXFNL + + (16 * NXNUMTHR) + (THRCMPEOF of all the + threads in the thread list which are not + resources prior to finding a + CLS_DATA = 0002) + +Next record = (beginning of header) + NXATRBCNT + NXFNL + + (16 * NXNUMTHR) + (THRCMPEOF of each thread) + + ************************************************** + + + PACKIT + ====== + +System of Origin : Macintosh + +FILE HEADER +----------- + +OFFSET LABEL TYP VALUE DESCRIPTION +------ ----------- ---- ----------- ---------------------------------- +00 PITFLN HEX 00 ;filename length +01 PITFNAM DS 63 ;filename +40 PITTYP HEX 00000000 ;file type +44 PITCRT HEX 00000000 ;Creator +48 PITFFLG DW 0000 ;Finder flags +4C PITLOK DW 0000 ;locked? +4E PITDSIZ HEX 00000000 ;data fork uncompressed size +52 PITRSIZ HEX 00000000 ;resource fork uncompressed size +56 PITCDSIZ HEX 00000000 ;data fork compressed size +5A PITCRSIZ HEX 00000000 ;resource fork compressed size +5E PITCRC DW 0000 ;CRC + + ************************************************** + + + STUFFIT + ======= + +System of Origin : Macintosh + +Original author : Raymond Lau + +FILE FORMAT +----------- + + Master Header + file header 1 + file 1 resource fork + file 1 data fork + file header 2 + file 2 resource fork + file 2 data fork + . + . + file header n + file n resource fork + file n data fork +EOF + + + + Page 14 + + +MASTER HEADER +------------- + +OFFSET LABEL TYP VALUE DESCRIPTION +------ ----------- ---- ----------- ---------------------------------- +00 SITHSIG ASC 'SIT!' ;STUFFIT archive signature +04 SITHNUM DW 0000 ;number of files in archive +06 SITHLEN HEX 00000000 ;length of entire archive incl hdr +0A SITHID2 ASC 'rLau' ;authors name - R. Lau +0E SITHVER DB 00 ;version number +0F DS 7 ;reserved + + +FILE HEADER +----------- + +OFFSET LABEL TYP VALUE DESCRIPTION +------ ----------- ---- ----------- ---------------------------------- +00 SITFRCMP DB 00 ;rsrc fork compression method +01 SITFDCMP DB 00 ;data fork compression method +02 SITFNL DB 00 ;file name length +03 SITFNAM DS $3F ;filename +41 SITFTYP DB 00000000 ;filetype +45 SITFCR DB 00000000 ;file creator +49 SITFFFL DW 0000 ;Finder flags +4B SITFCRD HEX 00000000 ;creation date +4F SITFMDD HEX 00000000 ;modification date +53 SITFRLN HEX 00000000 ;uncompressed resource fork length +57 SITFDLN HEX 00000000 ;uncompressed data fork length +5B SITFCRLN HEX 00000000 ;compressed resource fork length +5F SITFCDLN HEX 00000000 ;compressed data fork length +61 SITFRCRC DW 0000 ;resource fork CRC +63 SITFDCRC DW 0000 ;data fork CRC +65 SITFRPAD DB 00 ;pad bytes for encrypted files, +66 SITFDPAD DB 00 ;resource and data forks +6A DS 4 ;reserved +6E SITFHCRC DW 0000 ;CRC of file header + + + STUFFIT METHODS + + NAME METHOD DESCRIPTION + ----------- ------ -------------------------------------------- + noComp 0 uncompressed + rleComp 1 RLE compression + lzwComp 2 LZW compression, 18k buffer, 14 bit code size + hufComp 3 Huffman compression + encrypted 16 bit set if encrypted. ex: encrypted+lzwComp + startFolder 32 marks start of a new folder + endFolder 33 marks end of the last folder started + + + + + + + + + + + + + + Page 15 + + +POSITIONING IN FILE +------------------- + +First File Header = SITHSIG + $15 + +Begining of Resource Fork = SITFRCMP + $6F + +Begining of Data Fork = Begining of Resource Fork + SITFCRLN + +Next File Header = Begining of previous Data Fork + SITFCDLN + or + = Previous File Header + $6F + SITFCRLN + SITCDLN + + ************************************************** + + + ZIP + === + +System of Origin : IBM + +Original author : Phil Katz + +FILE FORMAT +----------- + + +Files stored in arbitrary order. Large zipfiles can span multiple +diskette media. + + Local File Header 1 + file 1 extra field + file 1 comment + file data 1 + Local File Header 2 + file 2 extra field + file 2 comment + file data 2 + . + . + . + Local File Header n + file n extra field + file n comment + file data n + Central Directory + central extra field + central comment + End of Central Directory + end comment +EOF + + + + + + + + + + + + + Page 16 + + +LOCAL FILE HEADER +----------------- + +OFFSET LABEL TYP VALUE DESCRIPTION +------ ----------- ---- ----------- ---------------------------------- +00 ZIPLOCSIG HEX 04034B50 ;Local File Header Signature +04 ZIPVER DW 0000 ;Version needed to extract +06 ZIPGENFLG DW 0000 ;General purpose bit flag +08 ZIPMTHD DW 0000 ;Compression method +0A ZIPTIME DW 0000 ;Last mod file time (MS-DOS) +0C ZIPDATE DW 0000 ;Last mod file date (MS-DOS) +0E ZIPCRC HEX 00000000 ;CRC-32 +12 ZIPSIZE HEX 00000000 ;Compressed size +16 ZIPUNCMP HEX 00000000 ;Uncompressed size +1A ZIPFNLN DW 0000 ;Filename length +1C ZIPXTRALN DW 0000 ;Extra field length +1E ZIPNAME DS ZIPFNLN ;filename +-- ZIPXTRA DS ZIPXTRALN ;extra field + +CENTRAL DIRECTORY STRUCTURE +--------------------------- + +OFFSET LABEL TYP VALUE DESCRIPTION +------ ----------- ---- ----------- ---------------------------------- +00 ZIPCENSIG HEX 02014B50 ;Central file header signature +04 ZIPCVER DB 00 ;Version made by +05 ZIPCOS DB 00 ;Host operating system +06 ZIPCVXT DB 00 ;Version needed to extract +07 ZIPCEXOS DB 00 ;O/S of version needed for extraction +08 ZIPCFLG DW 0000 ;General purpose bit flag +0A ZIPCMTHD DW 0000 ;Compression method +0C ZIPCTIM DW 0000 ;Last mod file time (MS-DOS) +0E ZIPCDAT DW 0000 ;Last mod file date (MS-DOS) +10 ZIPCCRC HEX 00000000 ;CRC-32 +14 ZIPCSIZ HEX 00000000 ;Compressed size +18 ZIPCUNC HEX 00000000 ;Uncompressed size +1C ZIPCFNL DW 0000 ;Filename length +1E ZIPCXTL DW 0000 ;Extra field length +20 ZIPCCML DW 0000 ;File comment length +22 ZIPDSK DW 0000 ;Disk number start +24 ZIPINT DW 0000 ;Internal file attributes + + LABEL BIT DESCRIPTION + ----------- --------- ----------------------------------------- + ZIPINT 0 if = 1, file is apparently an ASCII or + text file + 0 if = 0, file apparently contains binary + data + 1-7 unused in version 1.0. + +26 ZIPEXT HEX 00000000 ;External file attributes, host + ;system dependent +2A ZIPOFST HEX 00000000 ;Relative offset of local header + ;from the start of the first disk + ;on which this file appears +2E ZIPCFN DS ZIPCFNL ;Filename or path - should not + ;contain a drive or device letter, + ;or a leading slash. All slashes + ;should be forward slashes '/' +-- ZIPCXTR DS ZIPCXTL ;extra field +-- ZIPCOM DS ZIPCCML ;file comment + + + Page 17 + + +END OF CENTRAL DIR STRUCTURE +---------------------------- + +OFFSET LABEL TYP VALUE DESCRIPTION +------ ----------- ---- ----------- ---------------------------------- +00 ZIPESIG HEX 06064B50 ;End of central dir signature +04 ZIPEDSK DW 0000 ;Number of this disk +06 ZIPECEN DW 0000 ;Number of disk with start central dir +08 ZIPENUM DW 0000 ;Total number of entries in central dir + ;on this disk +0A ZIPECENN DW 0000 ;total number entries in central dir +0C ZIPECSZ HEX 00000000 ;Size of the central directory +10 ZIPEOFST HEX 00000000 ;Offset of start of central directory + ;with respect to the starting disk + ;number +14 ZIPECOML DW 0000 ;zipfile comment length +16 ZIPECOM DS ZIPECOML ;zipfile comment + + +ZIP VALUES LEGEND +----------------- + + HOST O/S + + VALUE DESCRIPTION VALUE DESCRIPTION + ----- -------------------------- ----- ------------------------ + 0 MS-DOS and OS/2 (FAT) 5 Atari ST + 1 Amiga 6 OS/2 1.2 extended file sys + 2 VMS 7 Macintosh + 3 *nix 8 thru + 4 VM/CMS 255 unused + + + GENERAL PURPOSE BIT FLAG + + LABEL BIT DESCRIPTION + ----------- --------- ----------------------------------------- + ZIPGENFLG 0 If set, file is encrypted + or 1 If file Imploded and this bit is set, 8K + ZIPCFLG sliding dictionary was used. If clear, 4K + sliding dictionary was used. + 2 If file Imploded and this bit is set, 3 + Shannon-Fano trees were used. If clear, 2 + Shannon-Fano trees were used. + 3-4 unused + 5-7 used internaly by ZIP + + Note: Bits 1 and 2 are undefined if the compression method is + other than type 6 (Imploding). + + + + + + + + + + + + + + + Page 18 + + + COMPRESSION METHOD + + NAME METHOD DESCRIPTION + ----------- ------ -------------------------------------------- + Stored 0 No compression used + Shrunk 1 LZW, 8K buffer, 9-13 bits with partial clearing + Reduced-1 2 Probalistic compression, L(X) = lower 7 bits + Reduced-2 3 Probalistic compression, L(X) = lower 6 bits + Reduced-3 4 Probalistic compression, L(X) = lower 5 bits + Reduced-4 5 Probalistic compression, L(X) = lower 4 bits + Imploded 6 2 Shanno-Fano trees, 4K sliding dictionary + Imploded 7 3 Shanno-Fano trees, 4K sliding dictionary + Imploded 8 2 Shanno-Fano trees, 8K sliding dictionary + Imploded 9 3 Shanno-Fano trees, 8K sliding dictionary + + + EXTRA FIELD + + OFFSET LABEL TYP VALUE DESCRIPTION + ------ ----------- ---- ---------- ---------------------------- + 00 EX1ID DW 0000 ;0-31 reserved by PKWARE + 02 EX1LN DW 0000 + 04 EX1DAT DS EX1LN ;Specific data for individual + . ;files. Data field should begin + . ;with a s/w specific unique ID + EX1LN+4 + EXnID DW 0000 + EXnLN DW 0000 + EXnDAT DS EXnLN ;entire header may not exceed 64k + + ************************************************** + + + ZOO + === + +System of Origin : IBM + +Original author : Rahul Dhesi + +FILE FORMAT +----------- + + Master Header + file 1 header + file 1 + file 2 header + file 2 + . + . + file n header + file n +EOF + + + + + + + + + + + Page 19 + + +MASTER HEADER +------------- + +OFFSET LABEL TYP VALUE DESCRIPTION +------ ----------- ---- ----------- ---------------------------------- +00 DS 20 +14 ZOOSIG HEX A7DCFDC4 ;File signature +18 ZOO1PTR HEX 00000000 ;pointer to 1st header +1C ZOO? HEX 00000000 ;? +20 ZOOMVER DB 00 ;version making archive +21 ZOOMIN DB 00 ;minimum version needed to extract + + +FILE HEADER +----------- + +OFFSET LABEL TYP VALUE DESCRIPTION +------ ----------- ---- ----------- ---------------------------------- +00 ZOOFSIG HEX A7DCFDC4 ;signature +04 ZOOFTYP DB 00 ;? +06 ZOOFCMP DB 00 ;Compression method +08 ZOOFNXH HEX 00000000 ;Nxt hdr ofst frm Start of ZOO file +0A ZOOFCUR HEX 00000000 ;Offset of this hdr +0E ZOOFDAT DW 0000 ;Last mod file date (MS-DOS) +10 ZOOFTIM DW 0000 ;Last mod file time (MS-DOS) +12 ZOOFCRC DW 0000 ;CRC-16 +14 ZOOFOSZ HEX 00000000 ;Uncompressed size +18 ZOOFNSZ HEX 00000000 ;Compressed size +1C ZOOFMVER DB 00 ;version that made this file +1D ZOOFMIN DB 00 ;minimum version needed to extract +1E Z00FDEL DB 00 ;1 if file deleted from archive +1F ZOOFCMTP HEX 00000000 ;pointer to comment, 0 if none +23 ZOOFCMTL DW 0000 ;length of comment +25 ZOOFNAM DS 13 ;filename + + +ZOO METHOD +---------- + + NAME METHOD DESCRIPTION + ----------- ------ -------------------------------------------- + Stored No compression used + Crunched Packing, LZW, 4K buffer, var len (9-12 bits) + +POSITIONING IN FILE +------------------- + +Begining of 1st File header = Begining of File + ZOO1PTR + or + = Begining of File + $21 + +Begining of File Data = Begining of File Header + $31 + +Begining of Next File = Begining of File + ZOOFNXH + +Begining of File Comment = Begining of File Header + ZOOFCMTP + + ************************************************** + + + + + + Page 20 + + + TIME VALUES + =========== + +MS-DOS TIME FORMAT +------------------ + + LABEL BIT DESCRIPTION + ----------- --------- ----------------------------------------- + DATE 15-9 Year + 8-5 Month + 4-0 Day (all zeroes means no date) + + TIME 15-11 Hours (military) + 10-5 Minutes + 4-0 Seconds + + +ProDOS/SOS TIME FORMAT (APPLE) +------------------------------ + + LABEL BIT DESCRIPTION + ----------- --------- ----------------------------------------- + DATE 15-9 Year (0-99) + 8-5 Month + 4-0 Day + + TIME 15-8 Hour (military time) + 7-0 Minutes + + ************************************************** + + + EXTENDED FILES + -------------- + +Extended files are a storage format used by a variety of operating +systems. The filename information points to a file that points to 2 other +files known as the DATA FORK and the RESOURCE FORK. + +The resource fork contains information about, and/or for the use of, the +data fork. In porting amongst systems the resource fork is probably of +no use. + +The data fork contains the actual file. + + ************************************************** + + + FILENAMES + --------- + +File name lengths, legal characters and format vary amongst the various +operating systems. MS-DOS allows a wider variety of characters while the +Apple operating systems allow longer names with no set format (no +extensions). Any program must be ready to convert a filename into the +current operating system format as well as handle any paths (either by +creating or ignoring them). + + + + + + + Page 21 + + +A suggestion would be to use a more universal standard for the filenames +of files that are likely to be ported (ie; Text, ASCII Source, GIF, ASCII +data files, etc) while making no special effort with executable code +(including tokenized BASIC) filenames. + +Such a standard might be: + + a filename of no more than 13 or less than 6 characters + legal characters A-Z (all uppercase) the '.' and 0-9 + periods to be used only once in a file to make an MS-DOS + type extension (ie; .TXT, .DOC, etc) + the filename MUST start with an alphabetic character (A-Z) + +********************************************************************** + + +Information taken from files by Alex Bamdad, Rahul Dhesi, Jim Dorsey, Don +Elton, Colin James, Phil Katz, Raymond Lau, Gary Little, Andrew Nicholas, +Haruhiko Okumura, Martin Peckham, Mike Sax, Tim Swihart and probably +others. + diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS.DOC b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS.DOC new file mode 100644 index 0000000000..5005033e64 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS.DOC @@ -0,0 +1,162 @@ + + Definition of the data types used in the file format list + +In the file format list, several short mnemonics are used to describe +the structure of the data stored. Here I describe the structure (and +possible conversion) between some of these types. As some types have +different sizes across the platforms, for most types the byte order and +bit size is given to describe it. + +ASCIIZ A sequence of characters(->char), terminated + with the special character with the value 0. + Note that ASCIIZ strings as most structures on + Intel machines should not be larger than + 64Kb due to the ancient segmentation used. +BCD Binary coded decimal + A decimal number is converted into a hexadecimal number + which has the same digits as the decimal number. + (10d becomes 10h, 21d becomes 21h) +Bitmap If a value is declared as bitmapped, that means that + every bit in this value might have a different meaning. + The bytes are numbered from right to left, the least + significant bit has the number 0. After the bit number, + there are either two statements, separated by a + slash("/"), which are the two meanings if the bit is + set / not set, or one single statement, which is the + meaning of this bit, if it is set. +Byte 8 bit unsigned number. Smallest unit a record + consists of. All offsets are in the unit bytes. + (0-255) +Char Synonym for byte, most values are between 32 and + 255. (#0-#255) +DWord 32 bit signed number. Well, maybe some of the + formats use a DWord which is a 32 bit unsigned + number, but as files tend not to be greater than + 2GB, this won't be my concern. To convert + between Intel and Motorola format, you have to + swap bytes #2 & #3 and bytes #1 & #4.(-2Gb-+2Gb) +Int Integer. Signed 16-bit number. + (-32767-+32767) +LString A string which is preceeded by the length. Also + named "counted" string. Used by most Pascal + implementations Maximum length is 255 bytes, but it can + contain any char. +Nybble The upper or lower four bits of a byte. A nybble + is a single hex digit and can have values from + 0 to 15. A signed nybble can have values from + -8 to 7 with bit 3 being the sign bit. +Paragraph A multiple of 16. A paragraph was the resolution of the + Intel chip 64K segments. +Word 16 bit unsigned number. Note that byte order is + important, wether you have a Motorola machine or + an Intel one. Conversion between the two formats + is simply by swapping byte #1 with byte #2. + (0-65535) + + How to identify different files + +While searching for different file formats, I found the following programs +helpful to gather information about different files. They all are DOS programs +since I'm not familiar with other platforms (except Windows). Most of them +should be available on SimTel CDs or via FTP at ftp.cdrom.com, except for my +program TF, which is still in beta. + +LIST.COM v9.0a by Vernon Buerg + List is a file lister which supports both text and hex-view. + +HIEW.EXE v4.18 by Sen + Another file lister with build-in disassembler. + +FILE.EXE v2.0 by Felix von Leitner + File is a file identification program. + +Q.COM v3.01 by SemWare + QEdit is the editor I'm editing the list with. + +TF.EXE v0.38 by me + The program that started it all. A "simple" file identification + program - no more, since it has grown too big by now. + Still unreleased, since it is not really extensible yet. + + The file formats list meta list ;) + +The file format list uses a certain format to make it readable by programs which +convert it into the WinHelp format or create program structures out of the +lists. This format is very similar to the format used by Ralf Brown in his PC +interrupt list but was extended by me to accomodate for the specific needs of +this list : + +Each topic in the list is delimited by a line of 45 chars, in which the +first 8 contain the char '-'. After these, there follows one character which +contains the type of topic. The different topics are described in the list +itself, the char '!' denotes an information topic - like the list of chars and +their meaning. After the topic identifier, there follows another '-' char and +then the topic name, not containing any '-' chars. After the topic name, there +may be some other descriptors like for Motorola byte ordering, guesswork marking +or other purposes, see the main list for further information. The line is ended +with at least one '-' char. Take the following prototype : + +--------?-TEST------------------------------ + +OFFSET Count TYPE Description +EXTENSION: +OCCURENCES: +PROGRAMS: +REFERENCE: +SEE ALSO: +VALIDATION: + +Sub-topics like different records are mostly delimited by three dashes ('-'). +I suggest folding them up and making them available as a popup window. + +Tables have the following format : +(see table 0000) +for a table reference and +(Table 0000) +for the beginning of a table. The end of a table is undefined (yet). + + + A primer on file formats + + Abbrevations +Throughout the list, many abbrevations are used, some in the reference +section. Here some are explained : + +c't +The c't is a german computer magazine, which developed the Borland +Pascal for OS/2 patch. They release source code in files called +CTmmyy.*. Note that comments in the source code and the language in +the issues tend to be german :-) + +DDJxxyy +(Doctor Dobb's Journal) +The DDJ is a monthly publication by M&T/US which is intended for the +professional programmer. The four digits after the name indicate the +month/year of the issue referred to. Most of the sourcecode published +in the issue is available electronically on Compu$erve and other BBSes. +The files have the name DDJyymm. + +PDN +Programmer's Distribution Net +A network dedicated to the distribution of source code useful to +programmers. Often linked with Fido-nodes. + +Contributions to this list were made by : + Ralf Brown (The .EXE file formats from the INTERRUPT List, general layout) + David Dilworth (david.dilworth@sierraclub.org) + Daniel Dissett (ddissett@netcom.com) + Marcus Groeber (marcusg@ph-cip.uni-koeln.de) + Darrel Hankerson (hankedr@mail.auburn.edu) + Carl Hauser (chauser.parc@xerox.com) + Jouni Miettunen (jon@stekt.oulu.fi) + Jan Nicolai Langfeldt (janl@ifi.uio.no) + Mark Ouellet (Telix .FON structures) + Greg Roelofs (roe2@midway.uchicago.edu) + Robert Rothenburg Walking-Owl (wlkngowl@unix.asb.com) + Jesus Villena (CONVERT.EXE, a digital sample conversion program) + Christos Zoulas (christos@deshaw.com) + JAL / Nostalgia + David McDuffee, (75530,2626@compuserve.com) + +Information gleaned from other programs : + Formats for Word and WordPerfect (Selke's filetype) diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS.LST.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS.LST.REMOVED.git-id new file mode 100644 index 0000000000..3b6ca248b5 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS.LST.REMOVED.git-id @@ -0,0 +1 @@ +0669ac7560e19f2f43316461e9118aad3ed77617 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_ARC.md b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_ARC.md new file mode 100644 index 0000000000..4cbb187f5d --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_ARC.md @@ -0,0 +1,98 @@ +ARC +=== + +The ARC files are archive files created by the SEA ARC program. The compression +has been superceded by more recent compression programs. Similar archives can +be created by the PAK and PkPAK programs. There have been many variations +and enhancements to the ARC format though not as many as to the TIFF format. + +You may have to use some (paranoid) checks to ensure that you actually are +processing an ARC file, since other archivers also adopted the idea of putting +a 01Ah byte at offset 0, namely the Hyper archiver. To check if you have a +Hyper-archive, check the next two bytes for "HP" or "ST" (or look below for +"HYP"). Also the ZOO archiver also does put a 01Ah at the start of the file, +see the ZOO entry below. +``` +OFFSET Count TYPE Description +0000h 1 byte ID=1Ah +0001h 1 byte Compression method (see table 0001) +0002h 12 char File name +000Fh 1 dword Compressed file size +0013h 1 dword File date in MS-DOS format (see table 0009) +0017h 1 word 16-bit CRC +0019h 1 dword Original file size + ="SIZ" +``` + +| (Table 0001) | ARC compression types | +|-----------:|:----------------------| +| 0 | End of archive marker +| 1 | unpacked (obsolete) | ARC 1.0 ? +| 2 | unpacked | ARC 3.1 +| 3 | packed (RLE encoding) +| 4 | squeezed (after packing) +| 5 | crunched (obsolete) | ARC 4.0 +| 6 | crunched (after packing) (obsolete) | ARC 4.1 +| 7 | crunched (after packing, using faster hash algorithm) | ARC 4.6 +| 8 | crunched (after packing, using dynamic LZW variations) | ARC 5.0 +| 9 | Squashed c/o Phil Katz (no packing) (var. on crunching) +| 10 | crushed (PAK only) +| 11 | distilled (PAK only) +|12-19 | to 19 unknown (ARC 6.0 or later) | ARC 7.0 (?) +|20-29 | ?informational items? | ARC 6.0 +|30-39 | ?control items? | ARC 6.0 +| 40+ | reserved + +According to SEA's technical memo, the information and control items +were added to ARC 6.0. Information items use the same headers as archived +files, although the original file size (and name?) can be ignored. + +OFFSET Count TYPE Description +0000h 2 byte Length of header (includes "length" + and "type"?) +0002h 1 byte (sub)type +0003h ? byte data + +Informational item types as used by ARC 6.0 : + +Block type Subtype Description + 20 archive info + 0 archive description (ASCIIZ) + 1 name of creator program (ASCIIZ) + 2 name of modifier program (ASCIIZ) + + 21 file info + 0 file description (ASCIIZ) + 1 long name (if not MS-DOS "8.3" filename) + 2 extended date-time info (reserved) + 3 icon (reserved) + 4 file attributes (ASCIIZ) + + Attributes use an uppercase letter to signify the + following: + + R read access + W write access + H hidden file + S system file + N network shareable + + 22 operating system info (reserved) + +(Table 0009) +Format of the MS-DOS time stamp (32-bit) +The MS-DOS time stamp is limited to an even count of seconds, since the +count for seconds is only 5 bits wide. +``` + 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 + |<---- year-1980 --->|<- month ->|<--- day ---->| + + 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + |<--- hour --->|<---- minute --->|<- second/2 ->| + +EXTENSION:ARC,PAK +OCCURENCES:PC +PROGRAMS:SEA ARC,PAK,PkPAK +SEE ALSO:HYP,ZOO +VALIDATION:FileSize="SIZ" +``` diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_ARJ.md b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_ARJ.md new file mode 100644 index 0000000000..10a085e79a --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_ARJ.md @@ -0,0 +1,71 @@ +--------A-ARJ------------------------------- +The ARJ program by Robert K. Jung is a "newcomer" which compares well to PKZip +and LhArc in both compression and speed. An ARJ archive contains two types of +header blocks, one archive main header at the head of the archive and local +file headers before each archived file. + +OFFSET Count TYPE Description +0000h 1 word ID=0EA60h +0002h 1 word Basic header size (0 if end of archive) +0004h 1 byte Size of header including extra data +0005h 1 byte Archiver version number +0006h 1 byte Minimum version needed to extract +0007h 1 byte Host OS (see table 0002) +0008h 1 byte Internal flags, bitmapped : + 0 - no password / password + 1 - reserved + 2 - file continues on next disk + 3 - file start position field is available + 4 - path translation ( "\" to "/" ) +0009h 1 byte Compression method : + 0 - stored + 1 - compressed most + 2 - compressed + 3 - compressed faster + 4 - compressed fastest + Methods 1 to 3 use Lempel-Ziv 77 sliding window + with static Huffman encoding, method 4 uses + Lempel-Ziv 77 sliding window with pointer/ + length unary encoding. +000Ah 1 byte File type : + 0 - binary + 1 - 7-bit text + 2 - comment header + 3 - directory + 4 - volume label +000Bh 1 byte reserved +000Ch 1 dword Date/Time of original file in MS-DOS format +0010h 1 dword Compressed size of file +0014h 1 dword Original size of file +0018h 1 dword Original file's CRC-32 +001Ah 1 word Filespec position in filename +001Ch 1 word File attributes +001Eh 1 word Host data (currently not used) +? 1 dword Extended file starting position when used + (see above) + ? char ASCIIZ file name + ? char Comment +????h 1 dword Basic header CRC-32 +????h 1 word Size of first extended header (0 if none) + ="SIZ" +????h+"SIZ"+2 1 dword Extended header CRC-32 +????h+"SIZ"+6 ? byte Compressed file + +(Table 0002) +ARJ HOST-OS types + 0 - MS-DOS + 1 - PRIMOS + 2 - UNIX + 3 - AMIGA + 4 - MAC-OS (System xx) + 5 - OS/2 + 6 - APPLE GS + 7 - ATARI ST + 8 - NeXT + 9 - VAX VMS +EXTENSION:ARJ +OCCURENCES:PC +PROGRAMS:ARJ.EXE +REFERENCE: +SEE ALSO: +VALIDATION: diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_DWC.md b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_DWC.md new file mode 100644 index 0000000000..572b3832f6 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_DWC.md @@ -0,0 +1,36 @@ +DWC +=== + +The DWC archives seem to be a relict from ancient computing times - I've never +seen any program that dealt with them or could create them. They are yet +included in this compilation for reasons I don't know. But maybe one of you +stumbles over such a file, he might find this documentation helpful. +The DWC archives consist of single file entries with one archive trailer. The +archive entries seem to be at the start of the archive, but maybe they are +stored at the end of the archive, before the trailer. Each file header has the +following format : + +``` +OFFSET Count TYPE Description +0000h 13 char Name of the original file in ASCIIZ. +000Dh 1 dword Size of the original file +0011h 1 dword MS-DOS date and time of the original file +0015h 1 dword Size of the compressed file +0019h 1 dword Offset of compressed data in archive file +001Dh 3 byte reserved +0020h 1 byte Method : + 1 - crunched + 2 - stored + +The trailer at the end of each archive has the following format : +OFFSET Count TYPE Description +0000h 1 word Length of trailer (=27) +0002h 1 word Size of the directory entries (=34)?? +0004h 16 byte reserved +0014h 1 dword Count of the directory entries +0018h 3 char ID="DWC" + +EXTENSION:DWC?? +OCCURENCES:PC?? +PROGRAMS:DWC.EXE?? +``` diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_GZIP.md b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_GZIP.md new file mode 100644 index 0000000000..49f7b67759 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_GZIP.md @@ -0,0 +1,30 @@ +--------A-GZIP------------------------------ +The GNU ZIP program is an archive program mostly for the UNIX machines developed +by the GNU project. +OFFSET Count TYPE Description +0000h 2 char ID='!',139 +0002h 1 byte Method : + 0-7 - reserved + 8 - deflated +0003h 1 byte File flags : + 0 - ASCII-text + 1 - Multi-part file + 2 - Name present + 3 - Comment present + 4 - Encrypted + 5-8 - reserved +0004h 1 dword File date and time (see table 0009) +0008h 1 byte Extra flags +0009h 1 byte Target OS : + 0 - DOS + 1 - Amiga + 2 - VMS + 3 - Unix + 4 - ???? + 5 - Atari + 6 - OS/2 + 7 - MacOS + 10 - TOPS-20 + 11 - Win/32 +EXTENSION:ZIP +PROGRAMS:GNU gzip diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_HA.md b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_HA.md new file mode 100644 index 0000000000..cb09009a10 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_HA.md @@ -0,0 +1,53 @@ +--------A-HA-------------------------------- +HA files (not to be confused with HamarSoft's HAP files [3]) contain a +small archive header with a word count of the number of files in the +archive. The constituent files stored sequentially with a header followed +by the compressed data, as is with most archives. + +The main file header is formatted as follows: +OFFSET Count TYPE Description +0000h 2 char ID='HA' +0002h 1 word Number of files in archive + +Every compressed file has a header before it, like this : + +OFFSET Count TYPE Description +0000h 1 byte Version & compression type +0001h 1 dword Compressed file size +0005h 1 dword Original file size +0009h 1 dword CCITT CRC-32 (same as ZModem/PkZIP) +000Dh 1 dword File time-stamp (Unix format) + ? ? char ASCIIZ pathname + ? ? char ASCIIZ filename +????h 1 byte Length of machine specific information + ? byte Machine specific information + +Note that the path separator for pathnames is the 0FFh (255) character. + +The high nybble of the version & compression type field contains the +version information (0=HA 0.98), the low nybble is the compression type : + +(Table 0012) +HA compression types + 0 "CPY" File is stored (no compression) + 1 "ASC" Default compression method, using a sliding + window dictionary with an arithmetic coder. + 2 "HSC" Compression using a "finite context [sic] + model and arithmetic coder" + 14 "DIR" Directory entry + 15 "SPECIAL" Used with HA 0.99B (?) + + +Machine specific information known: + + 1 byte Machine type (Host-OS) + + 1 = MS DOS + 2 = Linux (Unix) + + ? bytes Information (currently only file-attribute info) + +EXTENSION:HA +OCCURENCES:PC, Linux +PROGRAMS:HA +REFERENCE: diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_HYP.md b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_HYP.md new file mode 100644 index 0000000000..671f8c5365 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_HYP.md @@ -0,0 +1,23 @@ +--------A-HYP------------------------------- +The Hyper archiver is a very fast compression program by P. Sawatzki and K.P. +Nischke, which uses LZW compression techniques for compression. It is not very +widespread - in fact, I've yet to see a package distributed in this format. + +OFFSET Count TYPE Description +0000h 1 byte ID=1Ah +0001h 2 char Compression method + "HP" - compressed + "ST" - stored +0003h 1 byte Version file was compressed by in BCD +0004h 1 dword Compressed file size +0008h 1 dword Original file size +000Ch 1 dword MS-DOS date and time of file (see table 0009) +0010h 1 dword CRC-32 of file +0014h 1 byte MS-DOS file attribute +0015h 1 byte Length of filename + ="LEN" +0016h "LEN" char Filename + +EXTENSION:HYP +OCCURENCES:PC +PROGRAMS:HYPER.EXE diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_Introduction.md b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_Introduction.md new file mode 100644 index 0000000000..2a4cd1ba9e --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_Introduction.md @@ -0,0 +1,137 @@ +File format list Release 3.00 Last change 02/04/96 +This compilation is Copyright (c) 1994,2002 Max Maischein +--------!-CONTACT_INFO---------------------- +If you notice any mistakes or omissions, please let me know! It is only +with YOUR help that the list can continue to grow. Please send +all changes to me rather than distributing a modified version of the list. + +This file has been authored in the style of the INTERxxy.* file list +by Ralf Brown, and uses almost the same format. + +Please read the file FILEFMTS.1ST before asking me any questions. You may find +that they have already been addressed. + + Max Maischein + +corion@corion.net +Corion on #coders@IRC +--------!-DISCLAIMER------------------------ +DISCLAIMER: THIS MATERIAL IS PROVIDED "AS IS". I verify the information +contained in this list to the best of my ability, but I cannot be held +responsible for any problems caused by use or misuse of the information, +especially for those file formats foreign to the PC, like AMIGA or SUN file +formats. If an information it is marked "guesswork" or undocumented, you +should check it carefully to make sure your program will not break with +an unexpected value (and please let me know whether or not it works +the same way). + +Information marked with "???" is known to be incomplete or guesswork. + +Some file formats were not released by their creators, others are regarded +as proprietary, which means that if your programs deal with them, you might +be looking for trouble. I don't care about this. +--------!-FLAGS----------------------------- +One or more letters may follow the file format ID; they have the following +meanings: + Cx - Charset used : + 7 - Unix 7-bit characters + A - Amiga charset (if there is one) + E - EBDIC character format + U - Unicode character set + W - Windows char set + Default is the 8-Bit IBM PC-II Charset. Note that Microsoft + introduced codepages which might be relevant with other + programs. + G - guesswork, incomplete, unreliable etc. + M - Motorola byte order + Default is Intel byte order + O - obsolete, valid only for version noted below + X - Synonym topic. See topic named under see also. +--------!-CATEGORIES------------------------ +The ninth column of the divider line preceding an entry usually contains a +classification code for the application that uses those files. + +The codes currently in use are: + ! - User information ( not really a file format ) + A - Archives (ARC,LZH,ZIP,...) + a - Animations (CEL, FLI, FLT,...) + B - Binary files for compilers etc. (OBJ,TPU) + H - Help file (HLP,NG) + I - Images, bit maps (GIF,BMP,TIFF,...) + D - Data support files (CPI,FON,...) + E - Executable files (EXE,PIF) + f - Generic file format. RIFF and IFF are generic file formats. + F - Font files (TTF) + G - General graphics file + M - Module music file (MIDI,MOD,S3M,...) + R - Resource data files (RES) + S - Sound files (WAV,VOC,ZYX) + T - Text files (DOC,TXT) + W - Spreadsheet and related (WKS) + X - Database files (DBF) +--------!-FIELDS---------------------------- +After a format description, you will sometimes find other keywords. The +meanings of these are : + EXTENSION: + This is the default extension of files of the given type. + On DOS systems, most files have a 3 letter extension. + On Amiga systems, the files are prefixed with something. + The DOS extensions are all uppercase, extensions for other systems + are in lower case chars. On other systems, which do not have the con- + cept of extensions, as the MAC, this is the file type. + OCCURENCES: + Where you are likely to encounter those files. This specifies + machines (like PC,AMIGA) or operating systems (like UNIX). + PROGRAMS: + Programs which either create, use or convert files of this format. + Some might be used for validation or conversion. + REFERENCE: + A reference to a file or an article in a magazine which is mandatory + or recommended for further understanding of the matter. + SEE ALSO: + A cross reference to a topic which might be interesting as well. + VALIDATION: + Methods to validate that the file you have is not corrupt. Normally + this is a method to check the theoretical file size against the + real filesize. Some file formats allow no reliable validation. +--------!-FORMAT---------------------------- + The block oriented files are organized in some other fashion, since the + order of blocks is at best marginally obligatory. + + Each block type starts with the block ID (eg. RIFFblock for a RIFF file) and + in square brackets the character value of the ID field (eg. [WAVE] for RIFF + WAVe sound files). The block itself is descripted in the format description, + that means you will have to look after RIFF or FORM. In the record + description, the header information is omitted ! + + If a record is descripted, the record ends when the next offset is given. + + Bitmapped values have a description for each bit. The value left of the + slash ("/") is for the bit not set (=0), the right sided value applies + if the bit is set. + + A note on the tables section. The tables were added as they were introduced + into Ralf Browns interrupt list - so not everything was pressed into a table. + The tables (should) have unique numbers, but they sure are out of order ! +--------!-MACHINES-------------------------- + Machines that use Intel byte ordering + PC + Machines that use Motorola byte ordering + AMIGA, ATARI ST, MAC, SUN +--------!-HISTORY--------------------------- +History is kept within this file for convenience whilst editing ... +Date format is european/german, just for my convenience. + +Date Who What +14.03.95 MM Introduced tables + Last table number=0012 +05.06.95 MM + PTM format +25.07.95 MM + PIF format + + Paradox format description +11.08.95 MM + MS Compress variants +18.11.95 MM + ARC enhancements, caveats + + HA files +22.11.95 MM + Parts of the .CRD files +01.02.96 MM + PNG structure +02.02.96 MM + More on JPEG + + TARGA entry created diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_LBR.md b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_LBR.md new file mode 100644 index 0000000000..9f5d43136c --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_LBR.md @@ -0,0 +1,44 @@ +LBR +=== + +The LBR files consist of a direcotry and one or more "members". The directory +contains from 4 to 256 entries and each entry describes one member. +The first directory entry describes the directory itself. All space allocations +are in terms of sectors, where a sector is 128 bytes long. Four directory +entries fit in one sector thus the number of directory entries is always evenly +divisible by 4. Different types of LBR files exist, all versions are discussed +here, the directory entry looks like this : + +``` +OFFSET Count TYPE Description +0000h 1 byte File status : + 0 - active + 254 - deleted + 255 - free +0001h 11 char File name in FCB format (8/3, blank padded), + directory name is blanks for old LU, + ID='********DIR' + for LUPC +000Ch 1 word Offset to file data in sectors +000Eh 1 word Length of stored data in sectors + +For the LUPC program, the remaining 16 bytes are used like this : +OFFSET Count TYPE Description +0000h 8 char ASCII date of creation (MM/DD/YY) +0008h 8 char ASCII time of creation (HH:MM:SS) + +For the LU86 program, the remaining 16 bytes are used like this : +OFFSET Count TYPE Description +0000h 1 word CRC-16 or 0 +0002h 1 word Creation date in CP/M format +0004h 1 word Creation time in DOS format +0006h 1 word Date of last modification, CP/M format +0008h 1 word Time of last modification, DOS format +000Ah 1 byte Number of bytes in last sector +000Bh 5 byte reserved (0) + +EXTENSION:LBR +OCCURENCES:PC,CP/M +PROGRAMS:LU.COM, LUU.COM, LU86.COM +SEE ALSO: +``` diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_LZH.md b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_LZH.md new file mode 100644 index 0000000000..8b0264b110 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_LZH.md @@ -0,0 +1,42 @@ +LZH +=== + +The LHArc/LHA archiver is a multi platform archiver made by Haruyasu Yoshizaki, +which has a relatively good compression. It uses more or less the same +technology like the ZIP programs by Phil Katz. There was a hack named "ICE", +which had only the graphic characters displayed on decompression changed. + +``` +OFFSET Count TYPE Description +0000h 1 byte Size of archived file header +0001h 1 byte Checksum of remaining bytes +0002h 3 char ID='-lh' + ID='-lz' +0005h 1 char Compression methods used (see table 0005) +0006h 1 char ID='-' +0007h 1 dword Compressed size +000Bh 1 dword Uncompressed size +000Fh 1 dword Original file date/time (see table 0009) +0013h 1 word File attribute +0015h 1 byte Filename / path length in bytes + ="LEN" +0016h "LEN" char Filename / path +0018h 1 word CRC-16 of original file ++"LEN" + +(Table 0005) +LHArc compression types + "0" - No compression + "1" - LZW, 4K buffer, Huffman for upper 6 bits of position + "2" - unknown + "3" - unknown + "4" - LZW, Arithmetic Encoding + "5" - LZW, Arithmetic Encoding + "s" - LHa 2.x archive? + "\" - LHa 2.x archive? + "d" - LHa 2.x archive? + +EXTENSION:LZH,ICE +OCCURENCES:PC +PROGRAMS:LHArc.EXE, LHA.EXE +``` diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_ZOO.md b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_ZOO.md new file mode 100644 index 0000000000..5f3799c086 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILEFMTS_ZOO.md @@ -0,0 +1,40 @@ +--------A-ZOO------------------------------- +The ZOO archive program by Raoul Dhesi is a file compression program now +superceeded in both compression and speed by most other compression programs. +The archive header looks like this : +OFFSET Count TYPE Description +0000h 20 char Archive header text, ^Z terminated, null padded +0014h 1 dword ID=0FDC4A7DCh +0018h 1 dword Offset of first file in archive +001Ch 1 dword Offset of ???? +0020h 1 byte Version archive was made by +0021h 1 byte Minimum version needed to extract + +Each stored file has its own header, which looks like this : +OFFSET Count TYPE Description +0000h 1 dword ID=0FDC4A7DCh +0004h 1 byte Type of directory entry +0005h 1 byte Compression method : + 0 - stored + 1 - Crunched : LZW, 4K buffer, + var len (9-13 bits) +0006h 1 dword Offset of next directory entry +000Ah 1 dword Offset of next header +000Dh 1 word Original date / time of file (see table 0009) +0012h 1 word CRC-16 of file +0014h 1 dword Uncompressed size of file +0018h 1 dword Compressed size of file +001Ch 1 byte Version this file was compressed by +001Dh 1 byte Minimum version needed to extract +001Eh 1 byte Deleted flag + 0 - file in archive + 1 - file is considered deleted +001Fh 1 dword Offset of comment field, 0 if none +0023h 1 word Length of comment field +0025h ? char ASCIIZ path / filename + +EXTENSION:ZOO +OCCURENCES:PC +PROGRAMS:ZOO.EXE +REFERENCE: +VALIDATION: diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILE_ID.DIZ b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILE_ID.DIZ new file mode 100644 index 0000000000..0096a2aa24 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/future/FILE_ID.DIZ @@ -0,0 +1,11 @@ +File formats Release #03 12/02 + +A documentation of over 100 file +formats covering : + +Modules : (MOD,S3M,669,XM,etc.) +Images : (GIF,LBM,IFF,PCX,etc.) +Binaries: (COM,EXE,Windows,etc.) +Archives: (ARJ,LHA,ZIP,etc.) +Sound : (VOC,WAV,ZYX,.AU,etc.) +DataBase: (DBF) \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/future/README.md b/external/api-doc-tools/external/SharpZipLib/Documentation/future/README.md new file mode 100644 index 0000000000..7ddb6b1553 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/future/README.md @@ -0,0 +1,170 @@ +Future Work +=========== + +C# implementation of older archive file formats. + +Documentation from http://www.corion.net/fileformats/index.html + +File format list Release 3.00 Last change 02/04/96 +This compilation is Copyright (c) 1994,2002 Max Maischein + +## CONTACT_INFO + +If you notice any mistakes or omissions, please let me know! It is only +with YOUR help that the list can continue to grow. Please send +all changes to me rather than distributing a modified version of the list. + +This file has been authored in the style of the INTERxxy.* file list +by Ralf Brown, and uses almost the same format. + +Please read the file FILEFMTS.1ST before asking me any questions. You may find +that they have already been addressed. + + Max Maischein + +corion@corion.net +Corion on #coders@IRC + +## DISCLAIMER + +DISCLAIMER: THIS MATERIAL IS PROVIDED "AS IS". I verify the information +contained in this list to the best of my ability, but I cannot be held +responsible for any problems caused by use or misuse of the information, +especially for those file formats foreign to the PC, like AMIGA or SUN file +formats. If an information it is marked "guesswork" or undocumented, you +should check it carefully to make sure your program will not break with +an unexpected value (and please let me know whether or not it works +the same way). + +Information marked with "???" is known to be incomplete or guesswork. + +Some file formats were not released by their creators, others are regarded +as proprietary, which means that if your programs deal with them, you might +be looking for trouble. I don't care about this. + +## FLAGS + +One or more letters may follow the file format ID; they have the following +meanings: + +``` + Cx - Charset used : + 7 - Unix 7-bit characters + A - Amiga charset (if there is one) + E - EBDIC character format + U - Unicode character set + W - Windows char set + Default is the 8-Bit IBM PC-II Charset. Note that Microsoft + introduced codepages which might be relevant with other + programs. + G - guesswork, incomplete, unreliable etc. + M - Motorola byte order + Default is Intel byte order + O - obsolete, valid only for version noted below + X - Synonym topic. See topic named under see also. +``` + +## CATEGORIES + +The ninth column of the divider line preceding an entry usually contains a +classification code for the application that uses those files. + +The codes currently in use are: +``` +! - User information ( not really a file format ) +A - Archives (ARC,LZH,ZIP,...) +a - Animations (CEL, FLI, FLT,...) +B - Binary files for compilers etc. (OBJ,TPU) +H - Help file (HLP,NG) +I - Images, bit maps (GIF,BMP,TIFF,...) +D - Data support files (CPI,FON,...) +E - Executable files (EXE,PIF) +f - Generic file format. RIFF and IFF are generic file formats. +F - Font files (TTF) +G - General graphics file +M - Module music file (MIDI,MOD,S3M,...) +R - Resource data files (RES) +S - Sound files (WAV,VOC,ZYX) +T - Text files (DOC,TXT) +W - Spreadsheet and related (WKS) +X - Database files (DBF) +``` + +## FIELDS + +After a format description, you will sometimes find other keywords. The +meanings of these are : +### EXTENSION: + This is the default extension of files of the given type. + On DOS systems, most files have a 3 letter extension. + On Amiga systems, the files are prefixed with something. + The DOS extensions are all uppercase, extensions for other systems + are in lower case chars. On other systems, which do not have the con- + cept of extensions, as the MAC, this is the file type. +### OCCURENCES: +Where you are likely to encounter those files. This specifies +machines (like PC,AMIGA) or operating systems (like UNIX). +### PROGRAMS: +Programs which either create, use or convert files of this format. +Some might be used for validation or conversion. +### REFERENCE: +A reference to a file or an article in a magazine which is mandatory +or recommended for further understanding of the matter. +### SEE ALSO: +A cross reference to a topic which might be interesting as well. +### VALIDATION: +Methods to validate that the file you have is not corrupt. Normally +this is a method to check the theoretical file size against the +real filesize. Some file formats allow no reliable validation. + +## FORMAT + +The block oriented files are organized in some other fashion, since the +order of blocks is at best marginally obligatory. + +Each block type starts with the block ID (eg. RIFFblock for a RIFF file) and +in square brackets the character value of the ID field (eg. [WAVE] for RIFF +WAVe sound files). The block itself is descripted in the format description, +that means you will have to look after RIFF or FORM. In the record +description, the header information is omitted ! + +If a record is descripted, the record ends when the next offset is given. + +Bitmapped values have a description for each bit. The value left of the +slash ("/") is for the bit not set (=0), the right sided value applies +if the bit is set. + +A note on the tables section. The tables were added as they were introduced +into Ralf Browns interrupt list - so not everything was pressed into a table. +The tables (should) have unique numbers, but they sure are out of order ! + +## MACHINES + +Machines that use Intel byte ordering +* PC + +Machines that use Motorola byte ordering +* AMIGA +* ATARI ST +* MAC +* SUN + +## HISTORY + +History is kept within this file for convenience whilst editing ... +Date format is european/german, just for my convenience. +``` +Date Who What +14.03.95 MM Introduced tables + Last table number=0012 +05.06.95 MM + PTM format +25.07.95 MM + PIF format + + Paradox format description +11.08.95 MM + MS Compress variants +18.11.95 MM + ARC enhancements, caveats + + HA files +22.11.95 MM + Parts of the .CRD files +01.02.96 MM + PNG structure +02.02.96 MM + More on JPEG + + TARGA entry created +``` diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/future/tar_15.html b/external/api-doc-tools/external/SharpZipLib/Documentation/future/tar_15.html new file mode 100644 index 0000000000..c24f41e9e5 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/future/tar_15.html @@ -0,0 +1,516 @@ + + + + + + +GNU tar 1.28: E. Genfile + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

E. Genfile

+ + +

This appendix describes genfile, an auxiliary program +used in the GNU tar testsuite. If you are not interested in developing +GNU tar, skip this appendix. +

+

Initially, genfile was used to generate data files for +the testsuite, hence its name. However, new operation modes were being +implemented as the testsuite grew more sophisticated, and now +genfile is a multi-purpose instrument. +

+

There are three basic operation modes: +

+
+
File Generation
+

This is the default mode. In this mode, genfile +generates data files. +

+
+
File Status
+

In this mode genfile displays status of specified files. +

+
+
Synchronous Execution.
+

In this mode genfile executes the given program with +`--checkpoint' option and executes a set of actions when +specified checkpoints are reached. +

+
+ + + + + + + +
+ + + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

E.1 Generate Mode

+ +

In this mode genfile creates a data file for the test +suite. The size of the file is given with the `--length' +(`-l') option. By default the file contents is written to the +standard output, this can be changed using `--file' +(`-f') command line option. Thus, the following two commands +are equivalent: +

+
 
genfile --length 100 > outfile
+genfile --length 100 --file outfile
+
+

If `--length' is not given, genfile will +generate an empty (zero-length) file. +

+ +

The command line option `--seek=N' istructs genfile +to skip the given number of bytes (N) in the output file before +writing to it. It is similar to the `seek=N' of the +dd utility. +

+ +

You can instruct genfile to create several files at one +go, by giving it `--files-from' (`-T') option followed +by a name of file containing a list of file names. Using dash +(`-') instead of the file name causes genfile to read +file list from the standard input. For example: +

+
 
# Read file names from file `file.list'
+genfile --files-from file.list
+# Read file names from standard input
+genfile --files-from -
+
+ +

The list file is supposed to contain one file name per line. To +use file lists separated by ASCII NUL character, use `--null' +(`-0') command line option: +

+
 
genfile --null --files-from file.list
+
+ +

The default data pattern for filling the generated file consists +of first 256 letters of ASCII code, repeated enough times to fill the +entire file. This behavior can be changed with `--pattern' +option. This option takes a mandatory argument, specifying pattern +name to use. Currently two patterns are implemented: +

+
+
`--pattern=default'
+

The default pattern as described above. +

+
+
`--pattern=zero'
+

Fills the file with zeroes. +

+
+ +

If no file name was given, the program exits with the code +0. Otherwise, it exits with 0 only if it was able to +create a file of the specified length. +

+ + +

Special option `--sparse' (`-s') instructs +genfile to create a sparse file. Sparse files consist of +data fragments, separated by holes or blocks of zeros. On +many operating systems, actual disk storage is not allocated for +holes, but they are counted in the length of the file. To create a +sparse file, genfile should know where to put data fragments, +and what data to use to fill them. So, when `--sparse' is given +the rest of the command line specifies a so-called file map. +

+

The file map consists of any number of fragment +descriptors. Each descriptor is composed of two values: a number, +specifying fragment offset from the end of the previous fragment or, +for the very first fragment, from the beginning of the file, and +contents string, i.e., a string of characters, specifying the +pattern to fill the fragment with. File offset can be suffixed with +the following quantifiers: +

+
+
`k'
+
`K'
+

The number is expressed in kilobytes. +

+
`m'
+
`M'
+

The number is expressed in megabytes. +

+
`g'
+
`G'
+

The number is expressed in gigabytes. +

+
+ +

For each letter in contents string genfile will generate +a block of data, filled with this letter and will write it to +the fragment. The size of block is given by `--block-size' +option. It defaults to 512. Thus, if the string consists of n +characters, the resulting file fragment will contain +n*block-size of data. +

+

Last fragment descriptor can have only file offset part. In this +case genfile will create a hole at the end of the file up to +the given offset. +

+

For example, consider the following invocation: +

+
 
genfile --sparse --file sparsefile 0 ABCD 1M EFGHI 2000K
+
+ +

It will create 3101184-bytes long file of the following structure: +

+ + + + + + +

Offset

Length

Contents +

0

4*512=2048

Four 512-byte blocks, filled with +letters `A', `B', `C' and `D'. +

2048

1046528

Zero bytes +

1050624

5*512=2560

Five blocks, filled with letters +`E', `F', `G', `H', `I'. +

1053184

2048000

Zero bytes +

+ +

The exit code of genfile --status command is 0 +only if created file is actually sparse. +

+
+ + + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

E.2 Status Mode

+ +

In status mode, genfile prints file system status for +each file specified in the command line. This mode is toggled by +`--stat' (`-S') command line option. An optional argument to this +option specifies output format: a comma-separated list of +struct stat fields to be displayed. This list can contain +following identifiers: +

+
+
name
+

The file name. +

+
+
dev
+
st_dev
+

Device number in decimal. +

+
+
ino
+
st_ino
+

Inode number. +

+
+
mode[.number]
+
st_mode[.number]
+
+

See Should we also support `%' notations as in stat(1)? +

+ +

File mode in octal. Optional number specifies octal mask to +be applied to the mode before outputting. For example, --stat +mode.777 will preserve lower nine bits of it. Notice, that you can +use any punctuation character in place of `.'. +

+
+
nlink
+
st_nlink
+

Number of hard links. +

+
+
uid
+
st_uid
+

User ID of owner. +

+
+
gid
+
st_gid
+

Group ID of owner. +

+
+
size
+
st_size
+

File size in decimal. +

+
+
blksize
+
st_blksize
+

The size in bytes of each file block. +

+
+
blocks
+
st_blocks
+

Number of blocks allocated. +

+
+
atime
+
st_atime
+

Time of last access. +

+
+
mtime
+
st_mtime
+

Time of last modification +

+
+
ctime
+
st_ctime
+

Time of last status change +

+
+
sparse
+

A boolean value indicating whether the file is `sparse'. +

+
+ +

Modification times are displayed in UTC as +UNIX timestamps, unless suffixed with `H' (for +"human-readable"), as in `ctimeH', in which case usual +tar tv output format is used. +

+

The default output format is: `name,dev,ino,mode, +nlink,uid,gid,size,blksize,blocks,atime,mtime,ctime'. +

+

For example, the following command will display file names and +corresponding times of last access for each file in the current working +directory: +

+
 
genfile --stat=name,atime *
+
+
+ + + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

E.3 Exec Mode

+ +

This mode is designed for testing the behavior of paxutils +commands when some of the files change during archiving. It is an +experimental mode. +

+

The `Exec Mode' is toggled by `--run' command line +option (or its alias `-r'). The non-optional arguments to +getopt give the command line to be executed. Normally, +it should contain at least the `--checkpoint' option. +

+

A set of options is provided for defining checkpoint values and +actions to be executed upon reaching them. Checkpoint values are +introduced with the `--checkpoint' command line +option. Argument to this option is the number of checkpoint in decimal. +

+

Any number of actions may be specified after a +checkpoint. Available actions are +

+
+
`--cut file'
+
`--truncate file'
+

Truncate file to the size specified by previous +`--length' option (or 0, if it is not given). +

+
+
`--append file'
+

Append data to file. The size of data and its pattern are +given by previous `--length' and `pattern' options. +

+
+
`--touch file'
+

Update the access and modification times of file. These +timestamps are changed to the current time, unless `--date' +option was given, in which case they are changed to the specified +time. Argument to `--date' option is a date specification in +an almost arbitrary format (see section Date input formats). +

+
+
`--exec command'
+

Execute given shell command. +

+
+
`--unlink file'
+

Unlink the file. +

+
+ +

Option `--verbose' instructs genfile to print on +standard output notifications about checkpoints being executed and to +verbosely describe exit status of the command. +

+

While the command is being executed its standard output remains +connected to descriptor 1. All messages it prints to file descriptor +2, except checkpoint notifications, are forwarded to standard +error. +

+

Genfile exits with the exit status of the executed command. +

+

For compatibility with previous genfile versions, the +`--run' option takes an optional argument. If used this way, +its argument supplies the command line to be executed. There should +be no non-optional arguments in the genfile command line. +

+

The actual command line is constructed by inserting +the `--checkpoint' option between the command name and its +first argument (if any). Due to this, the argument to `--run' +may not use traditional tar option syntax, i.e., the +following is wrong: +

+
 
# Wrong!
+genfile --run='tar cf foo bar'
+
+ + +

Use the following syntax instead: +

+
 
genfile --run='tar -cf foo bar' actions...
+
+

The above command line is equivalent to +

+
 
genfile actions... -- tar -cf foo bar
+
+

Notice, that the use of compatibility mode is deprecated. +

+
+ + + + + + + + + + + + +
[ << ][ >> ]           [Top][Contents][Index][ ? ]
+

+ + This document was generated on July, 28 2014 using texi2html 1.76. + +
+ +

+ + diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/nunit3-test-results-debug.xml.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/nunit3-test-results-debug.xml.REMOVED.git-id new file mode 100644 index 0000000000..2967f855f2 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/nunit3-test-results-debug.xml.REMOVED.git-id @@ -0,0 +1 @@ +ffd4ea06d3dc0b4d66c92c389e17f7ecbeed3ffc \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/nunit3-test-results-release.xml b/external/api-doc-tools/external/SharpZipLib/Documentation/nunit3-test-results-release.xml new file mode 100644 index 0000000000..ccc3edc474 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/nunit3-test-results-release.xml @@ -0,0 +1,800 @@ + + + + + + ICSharpCode.SharpZipLib.Tests.BZip2.BZip2Suite.BasicRoundTrip + ICSharpCode.SharpZipLib.Tests.BZip2.BZip2Suite.CreateEmptyArchive + ICSharpCode.SharpZipLib.Tests.Base.InflaterDeflaterTestSuite.CloseDeflatorWithNestedUsing + ICSharpCode.SharpZipLib.Tests.Base.InflaterDeflaterTestSuite.CloseInflatorWithNestedUsing + ICSharpCode.SharpZipLib.Tests.Base.InflaterDeflaterTestSuite.DeflatorStreamOwnership + ICSharpCode.SharpZipLib.Tests.Base.InflaterDeflaterTestSuite.InflateDeflateNonZlib + ICSharpCode.SharpZipLib.Tests.Base.InflaterDeflaterTestSuite.InflateDeflateZlib + ICSharpCode.SharpZipLib.Tests.Base.InflaterDeflaterTestSuite.InflatorStreamOwnership + ICSharpCode.SharpZipLib.Tests.Checksum.ChecksumTests.Adler_32 + ICSharpCode.SharpZipLib.Tests.Checksum.ChecksumTests.CRC_32 + ICSharpCode.SharpZipLib.Tests.Checksum.ChecksumTests.CRC_32_BZip2 + ICSharpCode.SharpZipLib.Tests.Core.Core.FilterQuoting + ICSharpCode.SharpZipLib.Tests.Core.Core.NullFilter + ICSharpCode.SharpZipLib.Tests.Core.Core.ValidFilter + ICSharpCode.SharpZipLib.Tests.GZip.GZipTestSuite.DelayedHeaderWriteNoData + ICSharpCode.SharpZipLib.Tests.GZip.GZipTestSuite.DelayedHeaderWriteWithData + ICSharpCode.SharpZipLib.Tests.GZip.GZipTestSuite.DoubleClose + ICSharpCode.SharpZipLib.Tests.GZip.GZipTestSuite.DoubleFooter + ICSharpCode.SharpZipLib.Tests.GZip.GZipTestSuite.InputStreamOwnership + ICSharpCode.SharpZipLib.Tests.GZip.GZipTestSuite.OutputStreamOwnership + ICSharpCode.SharpZipLib.Tests.GZip.GZipTestSuite.TestGZip + ICSharpCode.SharpZipLib.Tests.GZip.GZipTestSuite.WriteAfterClose + ICSharpCode.SharpZipLib.Tests.GZip.GZipTestSuite.WriteAfterFinish + ICSharpCode.SharpZipLib.Tests.LZW.LzwTestSuite.InputStreamOwnership + ICSharpCode.SharpZipLib.Tests.LZW.LzwTestSuite.ZeroLengthInputStream + ICSharpCode.SharpZipLib.Tests.Tar.TarTestSuite.BlockFactorHandling + ICSharpCode.SharpZipLib.Tests.Tar.TarTestSuite.Checksum + ICSharpCode.SharpZipLib.Tests.Tar.TarTestSuite.CloningAndUniqueness + ICSharpCode.SharpZipLib.Tests.Tar.TarTestSuite.EmptyTar + ICSharpCode.SharpZipLib.Tests.Tar.TarTestSuite.HeaderEquality + ICSharpCode.SharpZipLib.Tests.Tar.TarTestSuite.InputStreamOwnership + ICSharpCode.SharpZipLib.Tests.Tar.TarTestSuite.InvalidLinkName + ICSharpCode.SharpZipLib.Tests.Tar.TarTestSuite.InvalidMagic + ICSharpCode.SharpZipLib.Tests.Tar.TarTestSuite.InvalidModTime + ICSharpCode.SharpZipLib.Tests.Tar.TarTestSuite.InvalidName + ICSharpCode.SharpZipLib.Tests.Tar.TarTestSuite.InvalidSize + ICSharpCode.SharpZipLib.Tests.Tar.TarTestSuite.InvalidVersionName + ICSharpCode.SharpZipLib.Tests.Tar.TarTestSuite.OutputStreamOwnership + ICSharpCode.SharpZipLib.Tests.Tar.TarTestSuite.TrailerContainsNulls + ICSharpCode.SharpZipLib.Tests.Tar.TarTestSuite.UserAndGroupNames + ICSharpCode.SharpZipLib.Tests.TestSupport.ExerciseBuffer.Basic + ICSharpCode.SharpZipLib.Tests.TestSupport.ExerciseBuffer.Buffered + ICSharpCode.SharpZipLib.Tests.TestSupport.ExerciseBuffer.Threaded + ICSharpCode.SharpZipLib.Tests.Zip.FastZipHandling.Basics + ICSharpCode.SharpZipLib.Tests.Zip.FastZipHandling.Encryption + ICSharpCode.SharpZipLib.Tests.Zip.FastZipHandling.ExtractEmptyDirectories + ICSharpCode.SharpZipLib.Tests.Zip.FastZipHandling.NonAsciiPasswords + ICSharpCode.SharpZipLib.Tests.Zip.FastZipHandling.UnicodeText + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.AddEntryAfterFinish + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.BasicDeflated + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.BasicDeflatedEncrypted + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.BasicDeflatedEncryptedNonSeekable + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.BasicDeflatedNonSeekable + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.BasicStored + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.BasicStoredEncrypted + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.BasicStoredEncryptedNonSeekable + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.BasicStoredNonSeekable + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.CloseOnlyHandled + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.ExerciseGetNextEntry + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.MixedEncryptedAndPlain + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.NameConversion + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.PartialStreamClosing + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.SerializedObject + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.SerializedObjectZeroLength + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.SetCommentOversize + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.SkipEncryptedEntriesWithoutSettingPassword + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.StoredNonSeekableConvertToDeflate + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.StoredNonSeekableKnownSizeNoCrc + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.StoredNonSeekableKnownSizeNoCrcEncrypted + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.Stream_UnicodeEntries + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.UnicodeNameConversion + ICSharpCode.SharpZipLib.Tests.Zip.GeneralHandling.UnsupportedCompressionMethod + ICSharpCode.SharpZipLib.Tests.Zip.StreamHandling.BaseClosedAfterFailure + ICSharpCode.SharpZipLib.Tests.Zip.StreamHandling.BaseClosedWhenOwner + ICSharpCode.SharpZipLib.Tests.Zip.StreamHandling.BaseNotClosedWhenNotOwner + ICSharpCode.SharpZipLib.Tests.Zip.StreamHandling.CreateAndReadEmptyZip + ICSharpCode.SharpZipLib.Tests.Zip.StreamHandling.EmptyZipEntries + ICSharpCode.SharpZipLib.Tests.Zip.StreamHandling.EntryWithNoDataAndZip64 + ICSharpCode.SharpZipLib.Tests.Zip.StreamHandling.ParameterHandling + ICSharpCode.SharpZipLib.Tests.Zip.StreamHandling.ReadAndWriteZip64NonSeekable + ICSharpCode.SharpZipLib.Tests.Zip.StreamHandling.Zip64Descriptor + ICSharpCode.SharpZipLib.Tests.Zip.WindowsNameTransformHandling.LengthBoundaryOk + ICSharpCode.SharpZipLib.Tests.Zip.WindowsNameTransformHandling.NameTooLong + ICSharpCode.SharpZipLib.Tests.Zip.ZipEntryFactoryHandling.Defaults + ICSharpCode.SharpZipLib.Tests.Zip.ZipEntryHandling.CanDecompress + ICSharpCode.SharpZipLib.Tests.Zip.ZipEntryHandling.Cloning + ICSharpCode.SharpZipLib.Tests.Zip.ZipEntryHandling.Copying + ICSharpCode.SharpZipLib.Tests.Zip.ZipEntryHandling.NullEntryComment + ICSharpCode.SharpZipLib.Tests.Zip.ZipEntryHandling.NullNameInConstructor + ICSharpCode.SharpZipLib.Tests.Zip.ZipExtraDataHandling.BasicOperations + ICSharpCode.SharpZipLib.Tests.Zip.ZipExtraDataHandling.Deleting + ICSharpCode.SharpZipLib.Tests.Zip.ZipExtraDataHandling.ExceedSize + ICSharpCode.SharpZipLib.Tests.Zip.ZipExtraDataHandling.IsDataUnique + ICSharpCode.SharpZipLib.Tests.Zip.ZipExtraDataHandling.ReadOverrunInt + ICSharpCode.SharpZipLib.Tests.Zip.ZipExtraDataHandling.ReadOverrunLong + ICSharpCode.SharpZipLib.Tests.Zip.ZipExtraDataHandling.ReadOverrunShort + ICSharpCode.SharpZipLib.Tests.Zip.ZipExtraDataHandling.Skipping + ICSharpCode.SharpZipLib.Tests.Zip.ZipExtraDataHandling.TaggedDataHandling + ICSharpCode.SharpZipLib.Tests.Zip.ZipExtraDataHandling.UnreadCountValid + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.AddAndDeleteEntries + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.AddAndDeleteEntriesMemory + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.AddEncryptedEntriesToExistingArchive + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.AddToEmptyArchive + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.ArchiveTesting + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.BasicEncryption + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.BasicEncryptionToDisk + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.CreateEmptyArchive + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.Crypto_AddEncryptedEntryToExistingArchiveDirect + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.Crypto_AddEncryptedEntryToExistingArchiveSafe + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.EmbeddedArchive + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.FindEntriesInArchiveExtraData + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.FindEntriesInArchiveWithLongComment + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.FindEntry + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.HandlesNoEntries + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.NameFactory + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.NestedArchive + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.NullStreamDetected + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.RoundTrip + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.RoundTripInMemory + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.TestDirectoryEntry + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.TestEncryptedDirectoryEntry + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.UnicodeNames + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.UnreferencedZipFileClosingPartialStream + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.UpdateCommentOnlyInMemory + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.UpdateCommentOnlyOnDisk + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.Zip64Entries + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.Zip64Offset + ICSharpCode.SharpZipLib.Tests.Zip.ZipFileHandling.Zip64Useage + ICSharpCode.SharpZipLib.Tests.Zip.ZipNameTransformHandling.Basic + ICSharpCode.SharpZipLib.Tests.Zip.ZipNameTransformHandling.LengthBoundaryOk + ICSharpCode.SharpZipLib.Tests.Zip.ZipNameTransformHandling.NameTransforms + ICSharpCode.SharpZipLib.Tests.Zip.ZipNameTransformHandling.PathalogicalNames + ICSharpCode.SharpZipLib.Tests.Zip.ZipNameTransformHandling.TooLong + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover-results-release.xml.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover-results-release.xml.REMOVED.git-id new file mode 100644 index 0000000000..bf3335b874 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover-results-release.xml.REMOVED.git-id @@ -0,0 +1 @@ +691c4525fb3f76bc1e23b17874b125e05de94db7 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_Adler32.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_Adler32.htm new file mode 100644 index 0000000000..f7f340d3f1 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_Adler32.htm @@ -0,0 +1,222 @@ + + + + +ICSharpCode.SharpZipLib.Checksum.Adler32 - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Checksum.Adler32
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Checksum\Adler32.cs
Covered lines:35
Uncovered lines:6
Coverable lines:41
Total lines:175
Line coverage:85.3%
Branch coverage:100%
+

Metrics

+ + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()1100100
Reset()1100100
Update(...)100
Update(...)2100100
Update(...)9100100
.cctor()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Checksum\Adler32.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2
 3namespace ICSharpCode.SharpZipLib.Checksum
 4{
 5  /// <summary>
 6  /// Computes Adler32 checksum for a stream of data. An Adler32
 7  /// checksum is not as reliable as a CRC32 checksum, but a lot faster to
 8  /// compute.
 9  ///
 10  /// The specification for Adler32 may be found in RFC 1950.
 11  /// ZLIB Compressed Data Format Specification version 3.3)
 12  ///
 13  ///
 14  /// From that document:
 15  ///
 16  ///      "ADLER32 (Adler-32 checksum)
 17  ///       This contains a checksum value of the uncompressed data
 18  ///       (excluding any dictionary data) computed according to Adler-32
 19  ///       algorithm. This algorithm is a 32-bit extension and improvement
 20  ///       of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073
 21  ///       standard.
 22  ///
 23  ///       Adler-32 is composed of two sums accumulated per byte: s1 is
 24  ///       the sum of all bytes, s2 is the sum of all s1 values. Both sums
 25  ///       are done modulo 65521. s1 is initialized to 1, s2 to zero.  The
 26  ///       Adler-32 checksum is stored as s2*65536 + s1 in most-
 27  ///       significant-byte first (network) order."
 28  ///
 29  ///  "8.2. The Adler-32 algorithm
 30  ///
 31  ///    The Adler-32 algorithm is much faster than the CRC32 algorithm yet
 32  ///    still provides an extremely low probability of undetected errors.
 33  ///
 34  ///    The modulo on unsigned long accumulators can be delayed for 5552
 35  ///    bytes, so the modulo operation time is negligible.  If the bytes
 36  ///    are a, b, c, the second sum is 3a + 2b + c + 3, and so is position
 37  ///    and order sensitive, unlike the first sum, which is just a
 38  ///    checksum.  That 65521 is prime is important to avoid a possible
 39  ///    large class of two-byte errors that leave the check unchanged.
 40  ///    (The Fletcher checksum uses 255, which is not prime and which also
 41  ///    makes the Fletcher check insensitive to single byte changes 0 -
 42  ///    255.)
 43  ///
 44  ///    The sum s1 is initialized to 1 instead of zero to make the length
 45  ///    of the sequence part of s2, so that the length does not have to be
 46  ///    checked separately. (Any sequence of zeroes has a Fletcher
 47  ///    checksum of zero.)"
 48  /// </summary>
 49  /// <see cref="ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream"/>
 50  /// <see cref="ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream"/>
 51  public sealed class Adler32 : IChecksum
 52  {
 53    #region Instance Fields
 54    /// <summary>
 55    /// largest prime smaller than 65536
 56    /// </summary>
 157    readonly static uint BASE = 65521;
 58
 59    /// <summary>
 60    /// The CRC data checksum so far.
 61    /// </summary>
 62    uint checkValue;
 63    #endregion
 64
 65    /// <summary>
 66    /// Initialise a default instance of <see cref="Adler32"></see>
 67    /// </summary>
 70968    public Adler32()
 69    {
 70970      Reset();
 70971    }
 72
 73    /// <summary>
 74    /// Resets the Adler32 data checksum as if no update was ever called.
 75    /// </summary>
 76    public void Reset()
 77    {
 114378      checkValue = 1;
 114379    }
 80
 81    /// <summary>
 82    /// Returns the Adler32 data checksum computed so far.
 83    /// </summary>
 84    public long Value {
 85      get {
 1886        return checkValue;
 87      }
 88    }
 89
 90    /// <summary>
 91    /// Updates the checksum with the byte b.
 92    /// </summary>
 93    /// <param name="bval">
 94    /// The data value to add. The high byte of the int is ignored.
 95    /// </param>
 96    public void Update(int bval)
 97    {
 98      // We could make a length 1 byte array and call update again, but I
 99      // would rather not have that overhead
 0100      uint s1 = checkValue & 0xFFFF;
 0101      uint s2 = checkValue >> 16;
 102
 0103      s1 = (s1 + ((uint)bval & 0xFF)) % BASE;
 0104      s2 = (s1 + s2) % BASE;
 105
 0106      checkValue = (s2 << 16) + s1;
 0107    }
 108
 109    /// <summary>
 110    /// Updates the Adler32 data checksum with the bytes taken from
 111    /// a block of data.
 112    /// </summary>
 113    /// <param name="buffer">Contains the data to update the checksum with.</param>
 114    public void Update(byte[] buffer)
 115    {
 2116       if (buffer == null) {
 1117        throw new ArgumentNullException(nameof(buffer));
 118      }
 119
 1120      Update(buffer, 0, buffer.Length);
 1121    }
 122
 123    /// <summary>
 124    /// Update Adler32 data checksum based on a portion of a block of data
 125    /// </summary>
 126    /// <param name = "buffer">Contains the data to update the CRC with.</param>
 127    /// <param name = "offset">The offset into the buffer where the data starts</param>
 128    /// <param name = "count">The number of data bytes to update the CRC with.</param>
 129    public void Update(byte[] buffer, int offset, int count)
 130    {
 6204131       if (buffer == null) {
 1132        throw new ArgumentNullException(nameof(buffer));
 133      }
 134
 6203135       if (offset < 0) {
 1136        throw new ArgumentOutOfRangeException(nameof(offset), "cannot be less than zero");
 137      }
 138
 6202139       if (offset >= buffer.Length) {
 1140        throw new ArgumentOutOfRangeException(nameof(offset), "not a valid index into buffer");
 141      }
 142
 6201143       if (count < 0) {
 1144        throw new ArgumentOutOfRangeException(nameof(count), "cannot be less than zero");
 145      }
 146
 6200147       if (offset + count > buffer.Length) {
 1148        throw new ArgumentOutOfRangeException(nameof(count), "exceeds buffer size");
 149      }
 150
 151      //(By Per Bothner)
 6199152      uint s1 = checkValue & 0xFFFF;
 6199153      uint s2 = checkValue >> 16;
 154
 13890155       while (count > 0) {
 156        // We can defer the modulo operation:
 157        // s1 maximally grows from 65521 to 65521 + 255 * 3800
 158        // s2 maximally grows by 3800 * median(s1) = 2090079800 < 2^31
 7691159        int n = 3800;
 7691160         if (n > count) {
 6199161          n = count;
 162        }
 7691163        count -= n;
 8355525164         while (--n >= 0) {
 8347834165          s1 = s1 + (uint)(buffer[offset++] & 0xff);
 8347834166          s2 = s2 + s1;
 167        }
 7691168        s1 %= BASE;
 7691169        s2 %= BASE;
 170      }
 171
 6199172      checkValue = (s2 << 16) | s1;
 6199173    }
 174  }
 175}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2.htm new file mode 100644 index 0000000000..80405d9171 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2.htm @@ -0,0 +1,109 @@ + + + + +ICSharpCode.SharpZipLib.BZip2.BZip2 - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.BZip2.BZip2
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\BZip2\BZip2.cs
Covered lines:0
Uncovered lines:20
Coverable lines:20
Total lines:66
Line coverage:0%
Branch coverage:0%
+

Metrics

+ + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
Decompress(...)500
Compress(...)500
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\BZip2\BZip2.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.IO;
 3
 4namespace ICSharpCode.SharpZipLib.BZip2
 5{
 6  /// <summary>
 7  /// An example class to demonstrate compression and decompression of BZip2 streams.
 8  /// </summary>
 9  public static class BZip2
 10  {
 11    /// <summary>
 12    /// Decompress the <paramref name="inStream">input</paramref> writing
 13    /// uncompressed data to the <paramref name="outStream">output stream</paramref>
 14    /// </summary>
 15    /// <param name="inStream">The readable stream containing data to decompress.</param>
 16    /// <param name="outStream">The output stream to receive the decompressed data.</param>
 17    /// <param name="isStreamOwner">Both streams are closed on completion if true.</param>
 18    public static void Decompress(Stream inStream, Stream outStream, bool isStreamOwner)
 19    {
 020       if (inStream == null || outStream == null) {
 021        throw new Exception("Null Stream");
 22      }
 23
 24      try {
 025        using (BZip2InputStream bzipInput = new BZip2InputStream(inStream)) {
 026          bzipInput.IsStreamOwner = isStreamOwner;
 027          Core.StreamUtils.Copy(bzipInput, outStream, new byte[4096]);
 028        }
 29      } finally {
 030         if (isStreamOwner) {
 31          // inStream is closed by the BZip2InputStream if stream owner
 032          outStream.Close();
 33        }
 034      }
 035    }
 36
 37    /// <summary>
 38    /// Compress the <paramref name="inStream">input stream</paramref> sending
 39    /// result data to <paramref name="outStream">output stream</paramref>
 40    /// </summary>
 41    /// <param name="inStream">The readable stream to compress.</param>
 42    /// <param name="outStream">The output stream to receive the compressed data.</param>
 43    /// <param name="isStreamOwner">Both streams are closed on completion if true.</param>
 44    /// <param name="level">Block size acts as compression level (1 to 9) with 1 giving
 45    /// the lowest compression and 9 the highest.</param>
 46    public static void Compress(Stream inStream, Stream outStream, bool isStreamOwner, int level)
 47    {
 048       if (inStream == null || outStream == null) {
 049        throw new Exception("Null Stream");
 50      }
 51
 52      try {
 053        using (BZip2OutputStream bzipOutput = new BZip2OutputStream(outStream, level)) {
 054          bzipOutput.IsStreamOwner = isStreamOwner;
 055          Core.StreamUtils.Copy(inStream, bzipOutput, new byte[4096]);
 056        }
 57      } finally {
 058         if (isStreamOwner) {
 59          // outStream is closed by the BZip2OutputStream if stream owner
 060          inStream.Close();
 61        }
 062      }
 063    }
 64
 65  }
 66}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2Constants.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2Constants.htm new file mode 100644 index 0000000000..b07f504363 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2Constants.htm @@ -0,0 +1,163 @@ + + + + +ICSharpCode.SharpZipLib.BZip2.BZip2Constants - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.BZip2.BZip2Constants
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\BZip2\BZip2Constants.cs
Covered lines:0
Uncovered lines:56
Coverable lines:56
Total lines:121
Line coverage:0%
+

Metrics

+ + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()100
.cctor()100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\BZip2\BZip2Constants.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1namespace ICSharpCode.SharpZipLib.BZip2
 2{
 3  /// <summary>
 4  /// Defines internal values for both compression and decompression
 5  /// </summary>
 6  internal sealed class BZip2Constants
 7  {
 8    /// <summary>
 9    /// Random numbers used to randomise repetitive blocks
 10    /// </summary>
 011    public readonly static int[] RandomNumbers = {
 012      619, 720, 127, 481, 931, 816, 813, 233, 566, 247,
 013      985, 724, 205, 454, 863, 491, 741, 242, 949, 214,
 014      733, 859, 335, 708, 621, 574,  73, 654, 730, 472,
 015      419, 436, 278, 496, 867, 210, 399, 680, 480,  51,
 016      878, 465, 811, 169, 869, 675, 611, 697, 867, 561,
 017      862, 687, 507, 283, 482, 129, 807, 591, 733, 623,
 018      150, 238,  59, 379, 684, 877, 625, 169, 643, 105,
 019      170, 607, 520, 932, 727, 476, 693, 425, 174, 647,
 020       73, 122, 335, 530, 442, 853, 695, 249, 445, 515,
 021      909, 545, 703, 919, 874, 474, 882, 500, 594, 612,
 022      641, 801, 220, 162, 819, 984, 589, 513, 495, 799,
 023      161, 604, 958, 533, 221, 400, 386, 867, 600, 782,
 024      382, 596, 414, 171, 516, 375, 682, 485, 911, 276,
 025       98, 553, 163, 354, 666, 933, 424, 341, 533, 870,
 026      227, 730, 475, 186, 263, 647, 537, 686, 600, 224,
 027      469,  68, 770, 919, 190, 373, 294, 822, 808, 206,
 028      184, 943, 795, 384, 383, 461, 404, 758, 839, 887,
 029      715,  67, 618, 276, 204, 918, 873, 777, 604, 560,
 030      951, 160, 578, 722,  79, 804,  96, 409, 713, 940,
 031      652, 934, 970, 447, 318, 353, 859, 672, 112, 785,
 032      645, 863, 803, 350, 139,  93, 354,  99, 820, 908,
 033      609, 772, 154, 274, 580, 184,  79, 626, 630, 742,
 034      653, 282, 762, 623, 680,  81, 927, 626, 789, 125,
 035      411, 521, 938, 300, 821,  78, 343, 175, 128, 250,
 036      170, 774, 972, 275, 999, 639, 495,  78, 352, 126,
 037      857, 956, 358, 619, 580, 124, 737, 594, 701, 612,
 038      669, 112, 134, 694, 363, 992, 809, 743, 168, 974,
 039      944, 375, 748,  52, 600, 747, 642, 182, 862,  81,
 040      344, 805, 988, 739, 511, 655, 814, 334, 249, 515,
 041      897, 955, 664, 981, 649, 113, 974, 459, 893, 228,
 042      433, 837, 553, 268, 926, 240, 102, 654, 459,  51,
 043      686, 754, 806, 760, 493, 403, 415, 394, 687, 700,
 044      946, 670, 656, 610, 738, 392, 760, 799, 887, 653,
 045      978, 321, 576, 617, 626, 502, 894, 679, 243, 440,
 046      680, 879, 194, 572, 640, 724, 926,  56, 204, 700,
 047      707, 151, 457, 449, 797, 195, 791, 558, 945, 679,
 048      297,  59,  87, 824, 713, 663, 412, 693, 342, 606,
 049      134, 108, 571, 364, 631, 212, 174, 643, 304, 329,
 050      343,  97, 430, 751, 497, 314, 983, 374, 822, 928,
 051      140, 206,  73, 263, 980, 736, 876, 478, 430, 305,
 052      170, 514, 364, 692, 829,  82, 855, 953, 676, 246,
 053      369, 970, 294, 750, 807, 827, 150, 790, 288, 923,
 054      804, 378, 215, 828, 592, 281, 565, 555, 710,  82,
 055      896, 831, 547, 261, 524, 462, 293, 465, 502,  56,
 056      661, 821, 976, 991, 658, 869, 905, 758, 745, 193,
 057      768, 550, 608, 933, 378, 286, 215, 979, 792, 961,
 058       61, 688, 793, 644, 986, 403, 106, 366, 905, 644,
 059      372, 567, 466, 434, 645, 210, 389, 550, 919, 135,
 060      780, 773, 635, 389, 707, 100, 626, 958, 165, 504,
 061      920, 176, 193, 713, 857, 265, 203,  50, 668, 108,
 062      645, 990, 626, 197, 510, 357, 358, 850, 858, 364,
 063      936, 638
 064    };
 65
 66    /// <summary>
 67    /// When multiplied by compression parameter (1-9) gives the block size for compression
 68    /// 9 gives the best compression but uses the most memory.
 69    /// </summary>
 70    public const int BaseBlockSize = 100000;
 71
 72    /// <summary>
 73    /// Backend constant
 74    /// </summary>
 75    public const int MaximumAlphaSize = 258;
 76
 77    /// <summary>
 78    /// Backend constant
 79    /// </summary>
 80    public const int MaximumCodeLength = 23;
 81
 82    /// <summary>
 83    /// Backend constant
 84    /// </summary>
 85    public const int RunA = 0;
 86
 87    /// <summary>
 88    /// Backend constant
 89    /// </summary>
 90    public const int RunB = 1;
 91
 92    /// <summary>
 93    /// Backend constant
 94    /// </summary>
 95    public const int GroupCount = 6;
 96
 97    /// <summary>
 98    /// Backend constant
 99    /// </summary>
 100    public const int GroupSize = 50;
 101
 102    /// <summary>
 103    /// Backend constant
 104    /// </summary>
 105    public const int NumberOfIterations = 4;
 106
 107    /// <summary>
 108    /// Backend constant
 109    /// </summary>
 110    public const int MaximumSelectors = (2 + (900000 / GroupSize));
 111
 112    /// <summary>
 113    /// Backend constant
 114    /// </summary>
 115    public const int OvershootBytes = 20;
 116
 0117    private BZip2Constants()
 118    {
 0119    }
 120  }
 121}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2Crc.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2Crc.htm new file mode 100644 index 0000000000..5777ac3731 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2Crc.htm @@ -0,0 +1,247 @@ + + + + +ICSharpCode.SharpZipLib.Checksum.BZip2Crc - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Checksum.BZip2Crc
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Checksum\BZip2Crc.cs
Covered lines:93
Uncovered lines:0
Coverable lines:93
Total lines:200
Line coverage:100%
Branch coverage:100%
+

Metrics

+ + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()1100100
Reset()1100100
Update(...)1100100
Update(...)2100100
Update(...)7100100
.cctor()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Checksum\BZip2Crc.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2
 3namespace ICSharpCode.SharpZipLib.Checksum
 4{
 5  /// <summary>
 6  /// CRC-32 with unreversed data and reversed output
 7  /// </summary>
 8  /// <remarks>
 9  /// Generate a table for a byte-wise 32-bit CRC calculation on the polynomial:
 10  /// x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x^1+x^0.
 11  ///
 12  /// Polynomials over GF(2) are represented in binary, one bit per coefficient,
 13  /// with the lowest powers in the most significant bit.  Then adding polynomials
 14  /// is just exclusive-or, and multiplying a polynomial by x is a right shift by
 15  /// one.  If we call the above polynomial p, and represent a byte as the
 16  /// polynomial q, also with the lowest power in the most significant bit (so the
 17  /// byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
 18  /// where a mod b means the remainder after dividing a by b.
 19  ///
 20  /// This calculation is done using the shift-register method of multiplying and
 21  /// taking the remainder.  The register is initialized to zero, and for each
 22  /// incoming bit, x^32 is added mod p to the register if the bit is a one (where
 23  /// x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
 24  /// x (which is shifting right by one and adding x^32 mod p if the bit shifted
 25  /// out is a one).  We start with the highest power (least significant bit) of
 26  /// q and repeat for all eight bits of q.
 27  ///
 28  /// The table is simply the CRC of all possible eight bit values.  This is all
 29  /// the information needed to generate CRC's on data a byte at a time for all
 30  /// combinations of CRC register values and incoming bytes.
 31  /// </remarks>
 32  public sealed class BZip2Crc : IChecksum
 33  {
 34    #region Instance Fields
 135    readonly static uint crcInit = 0xFFFFFFFF;
 136    readonly static uint crcXor = 0x00000000;
 37
 138    readonly static uint[] crcTable = {
 139      0X00000000, 0X04C11DB7, 0X09823B6E, 0X0D4326D9,
 140      0X130476DC, 0X17C56B6B, 0X1A864DB2, 0X1E475005,
 141      0X2608EDB8, 0X22C9F00F, 0X2F8AD6D6, 0X2B4BCB61,
 142      0X350C9B64, 0X31CD86D3, 0X3C8EA00A, 0X384FBDBD,
 143      0X4C11DB70, 0X48D0C6C7, 0X4593E01E, 0X4152FDA9,
 144      0X5F15ADAC, 0X5BD4B01B, 0X569796C2, 0X52568B75,
 145      0X6A1936C8, 0X6ED82B7F, 0X639B0DA6, 0X675A1011,
 146      0X791D4014, 0X7DDC5DA3, 0X709F7B7A, 0X745E66CD,
 147      0X9823B6E0, 0X9CE2AB57, 0X91A18D8E, 0X95609039,
 148      0X8B27C03C, 0X8FE6DD8B, 0X82A5FB52, 0X8664E6E5,
 149      0XBE2B5B58, 0XBAEA46EF, 0XB7A96036, 0XB3687D81,
 150      0XAD2F2D84, 0XA9EE3033, 0XA4AD16EA, 0XA06C0B5D,
 151      0XD4326D90, 0XD0F37027, 0XDDB056FE, 0XD9714B49,
 152      0XC7361B4C, 0XC3F706FB, 0XCEB42022, 0XCA753D95,
 153      0XF23A8028, 0XF6FB9D9F, 0XFBB8BB46, 0XFF79A6F1,
 154      0XE13EF6F4, 0XE5FFEB43, 0XE8BCCD9A, 0XEC7DD02D,
 155      0X34867077, 0X30476DC0, 0X3D044B19, 0X39C556AE,
 156      0X278206AB, 0X23431B1C, 0X2E003DC5, 0X2AC12072,
 157      0X128E9DCF, 0X164F8078, 0X1B0CA6A1, 0X1FCDBB16,
 158      0X018AEB13, 0X054BF6A4, 0X0808D07D, 0X0CC9CDCA,
 159      0X7897AB07, 0X7C56B6B0, 0X71159069, 0X75D48DDE,
 160      0X6B93DDDB, 0X6F52C06C, 0X6211E6B5, 0X66D0FB02,
 161      0X5E9F46BF, 0X5A5E5B08, 0X571D7DD1, 0X53DC6066,
 162      0X4D9B3063, 0X495A2DD4, 0X44190B0D, 0X40D816BA,
 163      0XACA5C697, 0XA864DB20, 0XA527FDF9, 0XA1E6E04E,
 164      0XBFA1B04B, 0XBB60ADFC, 0XB6238B25, 0XB2E29692,
 165      0X8AAD2B2F, 0X8E6C3698, 0X832F1041, 0X87EE0DF6,
 166      0X99A95DF3, 0X9D684044, 0X902B669D, 0X94EA7B2A,
 167      0XE0B41DE7, 0XE4750050, 0XE9362689, 0XEDF73B3E,
 168      0XF3B06B3B, 0XF771768C, 0XFA325055, 0XFEF34DE2,
 169      0XC6BCF05F, 0XC27DEDE8, 0XCF3ECB31, 0XCBFFD686,
 170      0XD5B88683, 0XD1799B34, 0XDC3ABDED, 0XD8FBA05A,
 171      0X690CE0EE, 0X6DCDFD59, 0X608EDB80, 0X644FC637,
 172      0X7A089632, 0X7EC98B85, 0X738AAD5C, 0X774BB0EB,
 173      0X4F040D56, 0X4BC510E1, 0X46863638, 0X42472B8F,
 174      0X5C007B8A, 0X58C1663D, 0X558240E4, 0X51435D53,
 175      0X251D3B9E, 0X21DC2629, 0X2C9F00F0, 0X285E1D47,
 176      0X36194D42, 0X32D850F5, 0X3F9B762C, 0X3B5A6B9B,
 177      0X0315D626, 0X07D4CB91, 0X0A97ED48, 0X0E56F0FF,
 178      0X1011A0FA, 0X14D0BD4D, 0X19939B94, 0X1D528623,
 179      0XF12F560E, 0XF5EE4BB9, 0XF8AD6D60, 0XFC6C70D7,
 180      0XE22B20D2, 0XE6EA3D65, 0XEBA91BBC, 0XEF68060B,
 181      0XD727BBB6, 0XD3E6A601, 0XDEA580D8, 0XDA649D6F,
 182      0XC423CD6A, 0XC0E2D0DD, 0XCDA1F604, 0XC960EBB3,
 183      0XBD3E8D7E, 0XB9FF90C9, 0XB4BCB610, 0XB07DABA7,
 184      0XAE3AFBA2, 0XAAFBE615, 0XA7B8C0CC, 0XA379DD7B,
 185      0X9B3660C6, 0X9FF77D71, 0X92B45BA8, 0X9675461F,
 186      0X8832161A, 0X8CF30BAD, 0X81B02D74, 0X857130C3,
 187      0X5D8A9099, 0X594B8D2E, 0X5408ABF7, 0X50C9B640,
 188      0X4E8EE645, 0X4A4FFBF2, 0X470CDD2B, 0X43CDC09C,
 189      0X7B827D21, 0X7F436096, 0X7200464F, 0X76C15BF8,
 190      0X68860BFD, 0X6C47164A, 0X61043093, 0X65C52D24,
 191      0X119B4BE9, 0X155A565E, 0X18197087, 0X1CD86D30,
 192      0X029F3D35, 0X065E2082, 0X0B1D065B, 0X0FDC1BEC,
 193      0X3793A651, 0X3352BBE6, 0X3E119D3F, 0X3AD08088,
 194      0X2497D08D, 0X2056CD3A, 0X2D15EBE3, 0X29D4F654,
 195      0XC5A92679, 0XC1683BCE, 0XCC2B1D17, 0XC8EA00A0,
 196      0XD6AD50A5, 0XD26C4D12, 0XDF2F6BCB, 0XDBEE767C,
 197      0XE3A1CBC1, 0XE760D676, 0XEA23F0AF, 0XEEE2ED18,
 198      0XF0A5BD1D, 0XF464A0AA, 0XF9278673, 0XFDE69BC4,
 199      0X89B8FD09, 0X8D79E0BE, 0X803AC667, 0X84FBDBD0,
 1100      0X9ABC8BD5, 0X9E7D9662, 0X933EB0BB, 0X97FFAD0C,
 1101      0XAFB010B1, 0XAB710D06, 0XA6322BDF, 0XA2F33668,
 1102      0XBCB4666D, 0XB8757BDA, 0XB5365D03, 0XB1F740B4
 1103    };
 104
 105    /// <summary>
 106    /// The CRC data checksum so far.
 107    /// </summary>
 108    uint checkValue;
 109    #endregion
 110
 111    /// <summary>
 112    /// Initialise a default instance of <see cref="BZip2Crc"></see>
 113    /// </summary>
 3114    public BZip2Crc()
 115    {
 3116      Reset();
 3117    }
 118
 119    /// <summary>
 120    /// Resets the CRC data checksum as if no update was ever called.
 121    /// </summary>
 122    public void Reset()
 123    {
 5124      checkValue = crcInit;
 5125    }
 126
 127    /// <summary>
 128    /// Returns the CRC data checksum computed so far.
 129    /// </summary>
 130    /// <remarks>Reversed Out = true</remarks>
 131    public long Value {
 132      get {
 133        // Tehcnically, the output should be:
 134        //return (long)(~checkValue ^ crcXor);
 135        // but x ^ 0 = x, so there is no point in adding
 136        // the XOR operation
 3137        return (long)(~checkValue);
 138      }
 139    }
 140
 141    /// <summary>
 142    /// Updates the checksum with the int bval.
 143    /// </summary>
 144    /// <param name = "bval">
 145    /// the byte is taken as the lower 8 bits of bval
 146    /// </param>
 147    /// <remarks>Reversed Data = false</remarks>
 148    public void Update(int bval)
 149    {
 10150      checkValue = unchecked(crcTable[(byte)(((checkValue >> 24) & 0xFF) ^ bval)] ^ (checkValue << 8));
 10151    }
 152
 153    /// <summary>
 154    /// Updates the CRC data checksum with the bytes taken from
 155    /// a block of data.
 156    /// </summary>
 157    /// <param name="buffer">Contains the data to update the CRC with.</param>
 158    public void Update(byte[] buffer)
 159    {
 2160       if (buffer == null) {
 1161        throw new ArgumentNullException(nameof(buffer));
 162      }
 163
 1164      Update(buffer, 0, buffer.Length);
 1165    }
 166
 167    /// <summary>
 168    /// Update CRC data checksum based on a portion of a block of data
 169    /// </summary>
 170    /// <param name = "buffer">Contains the data to update the CRC with.</param>
 171    /// <param name = "offset">The offset into the buffer where the data starts</param>
 172    /// <param name = "count">The number of data bytes to update the CRC with.</param>
 173    public void Update(byte[] buffer, int offset, int count)
 174    {
 6175       if (buffer == null) {
 1176        throw new ArgumentNullException(nameof(buffer));
 177      }
 178
 5179       if (offset < 0) {
 1180        throw new ArgumentOutOfRangeException(nameof(offset), "cannot be less than zero");
 181      }
 182
 4183       if (offset >= buffer.Length) {
 1184        throw new ArgumentOutOfRangeException(nameof(offset), "not a valid index into buffer");
 185      }
 186
 3187       if (count < 0) {
 1188        throw new ArgumentOutOfRangeException(nameof(count), "cannot be less than zero");
 189      }
 190
 2191       if (offset + count > buffer.Length) {
 1192        throw new ArgumentOutOfRangeException(nameof(count), "exceeds buffer size");
 193      }
 194
 20195       for (int i = 0; i < count; ++i) {
 9196        Update(buffer[offset++]);
 197      }
 1198    }
 199  }
 200}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2Exception.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2Exception.htm new file mode 100644 index 0000000000..878f863cdf --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2Exception.htm @@ -0,0 +1,92 @@ + + + + +ICSharpCode.SharpZipLib.BZip2.BZip2Exception - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.BZip2.BZip2Exception
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\BZip2\BZip2Exception.cs
Covered lines:0
Uncovered lines:8
Coverable lines:8
Total lines:48
Line coverage:0%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor()100
.ctor(...)100
.ctor(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\BZip2\BZip2Exception.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.Runtime.Serialization;
 3
 4namespace ICSharpCode.SharpZipLib.BZip2
 5{
 6  /// <summary>
 7  /// BZip2Exception represents exceptions specific to BZip2 classes and code.
 8  /// </summary>
 9  [Serializable]
 10  public class BZip2Exception : SharpZipBaseException
 11  {
 12    /// <summary>
 13    /// Deserialization constructor
 14    /// </summary>
 15    /// <param name="info"><see cref="SerializationInfo"/> for this constructor</param>
 16    /// <param name="context"><see cref="StreamingContext"/> for this constructor</param>
 17    protected BZip2Exception(SerializationInfo info, StreamingContext context)
 018      : base(info, context)
 19    {
 020    }
 21
 22    /// <summary>
 23    /// Initialise a new instance of <see cref="BZip2Exception" />.
 24    /// </summary>
 025    public BZip2Exception()
 26    {
 027    }
 28
 29    /// <summary>
 30    /// Initialise a new instance of <see cref="BZip2Exception" /> with its message string.
 31    /// </summary>
 32    /// <param name="message">A <see cref="string"/> that describes the error.</param>
 33    public BZip2Exception(string message)
 034      : base(message)
 35    {
 036    }
 37
 38    /// <summary>
 39    /// Initialise a new instance of <see cref="BZip2Exception" />.
 40    /// </summary>
 41    /// <param name="message">A <see cref="string"/> that describes the error.</param>
 42    /// <param name="innerException">The <see cref="Exception"/> that caused this exception.</param>
 43    public BZip2Exception(string message, Exception innerException)
 044      : base(message, innerException)
 45    {
 046    }
 47  }
 48}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2InputStream.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2InputStream.htm.REMOVED.git-id new file mode 100644 index 0000000000..14037bdd30 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2InputStream.htm.REMOVED.git-id @@ -0,0 +1 @@ +b20003e803bb4fe175a40d7183be58e6f37f376b \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2OutputStream.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2OutputStream.htm.REMOVED.git-id new file mode 100644 index 0000000000..1da14c6492 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BZip2OutputStream.htm.REMOVED.git-id @@ -0,0 +1 @@ +6578a992a56fe2c2fefec9245377b2a146a7b121 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BaseArchiveStorage.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BaseArchiveStorage.htm.REMOVED.git-id new file mode 100644 index 0000000000..1595e78f7d --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_BaseArchiveStorage.htm.REMOVED.git-id @@ -0,0 +1 @@ +fc090fd6d33581899c52cab55348f92427bce709 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_CompletedFileHandler.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_CompletedFileHandler.htm new file mode 100644 index 0000000000..2efd904457 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_CompletedFileHandler.htm @@ -0,0 +1,29 @@ + + + + +ICSharpCode.SharpZipLib.Core.CompletedFileHandler - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.CompletedFileHandler
Assembly:ICSharpCode.SharpZipLib
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
+

File(s)

+

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_Crc32.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_Crc32.htm new file mode 100644 index 0000000000..a34b59f503 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_Crc32.htm @@ -0,0 +1,237 @@ + + + + +ICSharpCode.SharpZipLib.Checksum.Crc32 - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Checksum.Crc32
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Checksum\Crc32.cs
Covered lines:82
Uncovered lines:0
Coverable lines:82
Total lines:189
Line coverage:100%
Branch coverage:100%
+

Metrics

+ + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
ComputeCrc32(...)1100100
.ctor()1100100
Reset()1100100
Update(...)1100100
Update(...)2100100
Update(...)7100100
.cctor()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Checksum\Crc32.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2
 3namespace ICSharpCode.SharpZipLib.Checksum
 4{
 5  /// <summary>
 6  /// CRC-32 with reversed data and unreversed output
 7  /// </summary>
 8  /// <remarks>
 9  /// Generate a table for a byte-wise 32-bit CRC calculation on the polynomial:
 10  /// x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x^1+x^0.
 11  ///
 12  /// Polynomials over GF(2) are represented in binary, one bit per coefficient,
 13  /// with the lowest powers in the most significant bit.  Then adding polynomials
 14  /// is just exclusive-or, and multiplying a polynomial by x is a right shift by
 15  /// one.  If we call the above polynomial p, and represent a byte as the
 16  /// polynomial q, also with the lowest power in the most significant bit (so the
 17  /// byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
 18  /// where a mod b means the remainder after dividing a by b.
 19  ///
 20  /// This calculation is done using the shift-register method of multiplying and
 21  /// taking the remainder.  The register is initialized to zero, and for each
 22  /// incoming bit, x^32 is added mod p to the register if the bit is a one (where
 23  /// x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
 24  /// x (which is shifting right by one and adding x^32 mod p if the bit shifted
 25  /// out is a one).  We start with the highest power (least significant bit) of
 26  /// q and repeat for all eight bits of q.
 27  ///
 28  /// The table is simply the CRC of all possible eight bit values.  This is all
 29  /// the information needed to generate CRC's on data a byte at a time for all
 30  /// combinations of CRC register values and incoming bytes.
 31  /// </remarks>
 32  public sealed class Crc32 : IChecksum
 33  {
 34    #region Instance Fields
 135    readonly static uint crcInit = 0xFFFFFFFF;
 136    readonly static uint crcXor = 0xFFFFFFFF;
 37
 138    readonly static uint[] crcTable = {
 139      0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419,
 140      0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4,
 141      0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07,
 142      0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,
 143      0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856,
 144      0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,
 145      0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4,
 146      0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
 147      0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,
 148      0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A,
 149      0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599,
 150      0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,
 151      0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190,
 152      0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F,
 153      0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E,
 154      0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
 155      0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED,
 156      0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,
 157      0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3,
 158      0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,
 159      0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A,
 160      0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5,
 161      0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010,
 162      0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
 163      0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17,
 164      0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6,
 165      0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,
 166      0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,
 167      0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344,
 168      0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,
 169      0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A,
 170      0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
 171      0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1,
 172      0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C,
 173      0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF,
 174      0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,
 175      0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE,
 176      0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31,
 177      0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C,
 178      0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
 179      0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B,
 180      0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,
 181      0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1,
 182      0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,
 183      0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,
 184      0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7,
 185      0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66,
 186      0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
 187      0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605,
 188      0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8,
 189      0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B,
 190      0x2D02EF8D
 191    };
 92
 93    /// <summary>
 94    /// The CRC data checksum so far.
 95    /// </summary>
 96    uint checkValue;
 97    #endregion
 98
 99    internal static uint ComputeCrc32(uint oldCrc, byte bval)
 100    {
 4516642101      return (uint)(Crc32.crcTable[(oldCrc ^ bval) & 0xFF] ^ (oldCrc >> 8));
 102    }
 103
 104    /// <summary>
 105    /// Initialise a default instance of <see cref="Crc32"></see>
 106    /// </summary>
 66290107    public Crc32()
 108    {
 66290109      Reset();
 66290110    }
 111
 112    /// <summary>
 113    /// Resets the CRC data checksum as if no update was ever called.
 114    /// </summary>
 115    public void Reset()
 116    {
 66451117      checkValue = crcInit;
 66451118    }
 119
 120    /// <summary>
 121    /// Returns the CRC data checksum computed so far.
 122    /// </summary>
 123    /// <remarks>Reversed Out = false</remarks>
 124    public long Value {
 125      get {
 66251126        return (long)(checkValue ^ crcXor);
 127      }
 128    }
 129
 130    /// <summary>
 131    /// Updates the checksum with the int bval.
 132    /// </summary>
 133    /// <param name = "bval">
 134    /// the byte is taken as the lower 8 bits of bval
 135    /// </param>
 136    /// <remarks>Reversed Data = true</remarks>
 137    public void Update(int bval)
 138    {
 4528259139      checkValue = unchecked(crcTable[(checkValue ^ bval) & 0xFF] ^ (checkValue >> 8));
 4528259140    }
 141
 142    /// <summary>
 143    /// Updates the CRC data checksum with the bytes taken from
 144    /// a block of data.
 145    /// </summary>
 146    /// <param name="buffer">Contains the data to update the CRC with.</param>
 147    public void Update(byte[] buffer)
 148    {
 2149       if (buffer == null) {
 1150        throw new ArgumentNullException(nameof(buffer));
 151      }
 152
 1153      Update(buffer, 0, buffer.Length);
 1154    }
 155
 156    /// <summary>
 157    /// Update CRC data checksum based on a portion of a block of data
 158    /// </summary>
 159    /// <param name = "buffer">Contains the data to update the CRC with.</param>
 160    /// <param name = "offset">The offset into the buffer where the data starts</param>
 161    /// <param name = "count">The number of data bytes to update the CRC with.</param>
 162    public void Update(byte[] buffer, int offset, int count)
 163    {
 5155164       if (buffer == null) {
 1165        throw new ArgumentNullException(nameof(buffer));
 166      }
 167
 5154168       if (offset < 0) {
 1169        throw new ArgumentOutOfRangeException(nameof(offset), "cannot be less than zero");
 170      }
 171
 5153172       if (offset >= buffer.Length) {
 2173        throw new ArgumentOutOfRangeException(nameof(offset), "not a valid index into buffer");
 174      }
 175
 5151176       if (count < 0) {
 1177        throw new ArgumentOutOfRangeException(nameof(count), "cannot be less than zero");
 178      }
 179
 5150180       if (offset + count > buffer.Length) {
 1181        throw new ArgumentOutOfRangeException(nameof(count), "exceeds buffer size");
 182      }
 183
 9066816184       for (int i = 0; i < count; ++i) {
 4528259185        Update(buffer[offset++]);
 186      }
 5149187    }
 188  }
 189}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_Deflater.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_Deflater.htm.REMOVED.git-id new file mode 100644 index 0000000000..45828f9c49 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_Deflater.htm.REMOVED.git-id @@ -0,0 +1 @@ +f926a7d9a87b6455fc4e02b9536df4b651004ba9 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterConstants.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterConstants.htm new file mode 100644 index 0000000000..5ff6a3b35a --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterConstants.htm @@ -0,0 +1,187 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.DeflaterConstants - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.DeflaterConstants
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\DeflaterConstants.cs
Covered lines:6
Uncovered lines:0
Coverable lines:6
Total lines:146
Line coverage:100%
+

Metrics

+ + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.cctor()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\DeflaterConstants.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2
 3namespace ICSharpCode.SharpZipLib.Zip.Compression
 4{
 5  /// <summary>
 6  /// This class contains constants used for deflation.
 7  /// </summary>
 8  public static class DeflaterConstants
 9  {
 10    /// <summary>
 11    /// Set to true to enable debugging
 12    /// </summary>
 13    public const bool DEBUGGING = false;
 14
 15    /// <summary>
 16    /// Written to Zip file to identify a stored block
 17    /// </summary>
 18    public const int STORED_BLOCK = 0;
 19
 20    /// <summary>
 21    /// Identifies static tree in Zip file
 22    /// </summary>
 23    public const int STATIC_TREES = 1;
 24
 25    /// <summary>
 26    /// Identifies dynamic tree in Zip file
 27    /// </summary>
 28    public const int DYN_TREES = 2;
 29
 30    /// <summary>
 31    /// Header flag indicating a preset dictionary for deflation
 32    /// </summary>
 33    public const int PRESET_DICT = 0x20;
 34
 35    /// <summary>
 36    /// Sets internal buffer sizes for Huffman encoding
 37    /// </summary>
 38    public const int DEFAULT_MEM_LEVEL = 8;
 39
 40    /// <summary>
 41    /// Internal compression engine constant
 42    /// </summary>
 43    public const int MAX_MATCH = 258;
 44
 45    /// <summary>
 46    /// Internal compression engine constant
 47    /// </summary>
 48    public const int MIN_MATCH = 3;
 49
 50    /// <summary>
 51    /// Internal compression engine constant
 52    /// </summary>
 53    public const int MAX_WBITS = 15;
 54
 55    /// <summary>
 56    /// Internal compression engine constant
 57    /// </summary>
 58    public const int WSIZE = 1 << MAX_WBITS;
 59
 60    /// <summary>
 61    /// Internal compression engine constant
 62    /// </summary>
 63    public const int WMASK = WSIZE - 1;
 64
 65    /// <summary>
 66    /// Internal compression engine constant
 67    /// </summary>
 68    public const int HASH_BITS = DEFAULT_MEM_LEVEL + 7;
 69
 70    /// <summary>
 71    /// Internal compression engine constant
 72    /// </summary>
 73    public const int HASH_SIZE = 1 << HASH_BITS;
 74
 75    /// <summary>
 76    /// Internal compression engine constant
 77    /// </summary>
 78    public const int HASH_MASK = HASH_SIZE - 1;
 79
 80    /// <summary>
 81    /// Internal compression engine constant
 82    /// </summary>
 83    public const int HASH_SHIFT = (HASH_BITS + MIN_MATCH - 1) / MIN_MATCH;
 84
 85    /// <summary>
 86    /// Internal compression engine constant
 87    /// </summary>
 88    public const int MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1;
 89
 90    /// <summary>
 91    /// Internal compression engine constant
 92    /// </summary>
 93    public const int MAX_DIST = WSIZE - MIN_LOOKAHEAD;
 94
 95    /// <summary>
 96    /// Internal compression engine constant
 97    /// </summary>
 98    public const int PENDING_BUF_SIZE = 1 << (DEFAULT_MEM_LEVEL + 8);
 99
 100    /// <summary>
 101    /// Internal compression engine constant
 102    /// </summary>
 1103    public static int MAX_BLOCK_SIZE = Math.Min(65535, PENDING_BUF_SIZE - 5);
 104
 105    /// <summary>
 106    /// Internal compression engine constant
 107    /// </summary>
 108    public const int DEFLATE_STORED = 0;
 109
 110    /// <summary>
 111    /// Internal compression engine constant
 112    /// </summary>
 113    public const int DEFLATE_FAST = 1;
 114
 115    /// <summary>
 116    /// Internal compression engine constant
 117    /// </summary>
 118    public const int DEFLATE_SLOW = 2;
 119
 120    /// <summary>
 121    /// Internal compression engine constant
 122    /// </summary>
 1123    public static int[] GOOD_LENGTH = { 0, 4, 4, 4, 4, 8, 8, 8, 32, 32 };
 124
 125    /// <summary>
 126    /// Internal compression engine constant
 127    /// </summary>
 1128    public static int[] MAX_LAZY = { 0, 4, 5, 6, 4, 16, 16, 32, 128, 258 };
 129
 130    /// <summary>
 131    /// Internal compression engine constant
 132    /// </summary>
 1133    public static int[] NICE_LENGTH = { 0, 8, 16, 32, 16, 32, 128, 128, 258, 258 };
 134
 135    /// <summary>
 136    /// Internal compression engine constant
 137    /// </summary>
 1138    public static int[] MAX_CHAIN = { 0, 4, 8, 32, 16, 32, 128, 256, 1024, 4096 };
 139
 140    /// <summary>
 141    /// Internal compression engine constant
 142    /// </summary>
 1143    public static int[] COMPR_FUNC = { 0, 1, 1, 1, 1, 2, 2, 2, 2, 2 };
 144
 145  }
 146}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterEngine.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterEngine.htm.REMOVED.git-id new file mode 100644 index 0000000000..c1214c643e --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterEngine.htm.REMOVED.git-id @@ -0,0 +1 @@ +078abf45e92920f3158044de2317cb246c057f02 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterHuffman.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterHuffman.htm.REMOVED.git-id new file mode 100644 index 0000000000..5abb6f0d0e --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterHuffman.htm.REMOVED.git-id @@ -0,0 +1 @@ +7251b93848af3898978b3b4dbe1d724e0f56bb89 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterOutputStream.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterOutputStream.htm.REMOVED.git-id new file mode 100644 index 0000000000..a1da89f947 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterOutputStream.htm.REMOVED.git-id @@ -0,0 +1 @@ +51246dacc4257e79e18cac605d7d3d9d4993e687 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterPending.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterPending.htm new file mode 100644 index 0000000000..2c5833543f --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DeflaterPending.htm @@ -0,0 +1,58 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.DeflaterPending - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.DeflaterPending
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\DeflaterPending.cs
Covered lines:2
Uncovered lines:0
Coverable lines:2
Total lines:17
Line coverage:100%
+

Metrics

+ + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\DeflaterPending.cs

+ + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1namespace ICSharpCode.SharpZipLib.Zip.Compression
 2{
 3  /// <summary>
 4  /// This class stores the pending output of the Deflater.
 5  ///
 6  /// author of the original java version : Jochen Hoenicke
 7  /// </summary>
 8  public class DeflaterPending : PendingBuffer
 9  {
 10    /// <summary>
 11    /// Construct instance with default buffer size
 12    /// </summary>
 27313    public DeflaterPending() : base(DeflaterConstants.PENDING_BUF_SIZE)
 14    {
 27315    }
 16  }
 17}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DescriptorData.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DescriptorData.htm.REMOVED.git-id new file mode 100644 index 0000000000..cca06b3469 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DescriptorData.htm.REMOVED.git-id @@ -0,0 +1 @@ +46ecdf5be32f237ce680ff0223838c351f7de106 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DirectoryEventArgs.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DirectoryEventArgs.htm.REMOVED.git-id new file mode 100644 index 0000000000..6a349f216b --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DirectoryEventArgs.htm.REMOVED.git-id @@ -0,0 +1 @@ +e90b09ae26a3a082fa974678d3821c488b7d6376 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DirectoryFailureHandler.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DirectoryFailureHandler.htm new file mode 100644 index 0000000000..1e6026acdf --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DirectoryFailureHandler.htm @@ -0,0 +1,29 @@ + + + + +ICSharpCode.SharpZipLib.Core.DirectoryFailureHandler - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.DirectoryFailureHandler
Assembly:ICSharpCode.SharpZipLib
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
+

File(s)

+

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DiskArchiveStorage.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DiskArchiveStorage.htm.REMOVED.git-id new file mode 100644 index 0000000000..dc0ec2170a --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DiskArchiveStorage.htm.REMOVED.git-id @@ -0,0 +1 @@ +85960e1f19a311ad6eb39ec09671df7e76e92026 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DynamicDiskDataSource.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DynamicDiskDataSource.htm.REMOVED.git-id new file mode 100644 index 0000000000..4403d3aa3c --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_DynamicDiskDataSource.htm.REMOVED.git-id @@ -0,0 +1 @@ +661985474cf6761f0792be67b2cef65702756201 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_EntryPatchData.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_EntryPatchData.htm.REMOVED.git-id new file mode 100644 index 0000000000..a8079660c1 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_EntryPatchData.htm.REMOVED.git-id @@ -0,0 +1 @@ +7df2ab8384888a308fef2658fcc59311c802d591 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ExtendedPathFilter.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ExtendedPathFilter.htm new file mode 100644 index 0000000000..09e74b972a --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ExtendedPathFilter.htm @@ -0,0 +1,325 @@ + + + + +ICSharpCode.SharpZipLib.Core.ExtendedPathFilter - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.ExtendedPathFilter
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\PathFilter.cs
Covered lines:0
Uncovered lines:47
Coverable lines:47
Total lines:280
Line coverage:0%
Branch coverage:0%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor(...)100
.ctor(...)100
IsMatch(...)500
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\PathFilter.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.IO;
 3
 4namespace ICSharpCode.SharpZipLib.Core
 5{
 6  /// <summary>
 7  /// PathFilter filters directories and files using a form of <see cref="System.Text.RegularExpressions.Regex">regular 
 8  /// by full path name.
 9  /// See <see cref="NameFilter">NameFilter</see> for more detail on filtering.
 10  /// </summary>
 11  public class PathFilter : IScanFilter
 12  {
 13    #region Constructors
 14    /// <summary>
 15    /// Initialise a new instance of <see cref="PathFilter"></see>.
 16    /// </summary>
 17    /// <param name="filter">The <see cref="NameFilter">filter</see> expression to apply.</param>
 18    public PathFilter(string filter)
 19    {
 20      nameFilter_ = new NameFilter(filter);
 21    }
 22    #endregion
 23
 24    #region IScanFilter Members
 25    /// <summary>
 26    /// Test a name to see if it matches the filter.
 27    /// </summary>
 28    /// <param name="name">The name to test.</param>
 29    /// <returns>True if the name matches, false otherwise.</returns>
 30    /// <remarks><see cref="Path.GetFullPath(string)"/> is used to get the full path before matching.</remarks>
 31    public virtual bool IsMatch(string name)
 32    {
 33      bool result = false;
 34
 35      if (name != null) {
 36        string cooked = (name.Length > 0) ? Path.GetFullPath(name) : "";
 37        result = nameFilter_.IsMatch(cooked);
 38      }
 39      return result;
 40    }
 41
 42    readonly
 43    #endregion
 44
 45    #region Instance Fields
 46    NameFilter nameFilter_;
 47    #endregion
 48  }
 49
 50  /// <summary>
 51  /// ExtendedPathFilter filters based on name, file size, and the last write time of the file.
 52  /// </summary>
 53  /// <remarks>Provides an example of how to customise filtering.</remarks>
 54  public class ExtendedPathFilter : PathFilter
 55  {
 56    #region Constructors
 57    /// <summary>
 58    /// Initialise a new instance of ExtendedPathFilter.
 59    /// </summary>
 60    /// <param name="filter">The filter to apply.</param>
 61    /// <param name="minSize">The minimum file size to include.</param>
 62    /// <param name="maxSize">The maximum file size to include.</param>
 63    public ExtendedPathFilter(string filter,
 64      long minSize, long maxSize)
 065      : base(filter)
 66    {
 067      MinSize = minSize;
 068      MaxSize = maxSize;
 069    }
 70
 71    /// <summary>
 72    /// Initialise a new instance of ExtendedPathFilter.
 73    /// </summary>
 74    /// <param name="filter">The filter to apply.</param>
 75    /// <param name="minDate">The minimum <see cref="DateTime"/> to include.</param>
 76    /// <param name="maxDate">The maximum <see cref="DateTime"/> to include.</param>
 77    public ExtendedPathFilter(string filter,
 78      DateTime minDate, DateTime maxDate)
 079      : base(filter)
 80    {
 081      MinDate = minDate;
 082      MaxDate = maxDate;
 083    }
 84
 85    /// <summary>
 86    /// Initialise a new instance of ExtendedPathFilter.
 87    /// </summary>
 88    /// <param name="filter">The filter to apply.</param>
 89    /// <param name="minSize">The minimum file size to include.</param>
 90    /// <param name="maxSize">The maximum file size to include.</param>
 91    /// <param name="minDate">The minimum <see cref="DateTime"/> to include.</param>
 92    /// <param name="maxDate">The maximum <see cref="DateTime"/> to include.</param>
 93    public ExtendedPathFilter(string filter,
 94      long minSize, long maxSize,
 95      DateTime minDate, DateTime maxDate)
 096      : base(filter)
 97    {
 098      MinSize = minSize;
 099      MaxSize = maxSize;
 0100      MinDate = minDate;
 0101      MaxDate = maxDate;
 0102    }
 103    #endregion
 104
 105    #region IScanFilter Members
 106    /// <summary>
 107    /// Test a filename to see if it matches the filter.
 108    /// </summary>
 109    /// <param name="name">The filename to test.</param>
 110    /// <returns>True if the filter matches, false otherwise.</returns>
 111    /// <exception cref="System.IO.FileNotFoundException">The <see paramref="fileName"/> doesnt exist</exception>
 112    public override bool IsMatch(string name)
 113    {
 0114      bool result = base.IsMatch(name);
 115
 0116       if (result) {
 0117        var fileInfo = new FileInfo(name);
 0118        result =
 0119          (MinSize <= fileInfo.Length) &&
 0120          (MaxSize >= fileInfo.Length) &&
 0121          (MinDate <= fileInfo.LastWriteTime) &&
 0122          (MaxDate >= fileInfo.LastWriteTime)
 0123          ;
 124      }
 0125      return result;
 126    }
 127    #endregion
 128
 129    #region Properties
 130    /// <summary>
 131    /// Get/set the minimum size/length for a file that will match this filter.
 132    /// </summary>
 133    /// <remarks>The default value is zero.</remarks>
 134    /// <exception cref="ArgumentOutOfRangeException">value is less than zero; greater than <see cref="MaxSize"/></excep
 135    public long MinSize {
 0136      get { return minSize_; }
 137      set {
 0138         if ((value < 0) || (maxSize_ < value)) {
 0139          throw new ArgumentOutOfRangeException(nameof(value));
 140        }
 141
 0142        minSize_ = value;
 0143      }
 144    }
 145
 146    /// <summary>
 147    /// Get/set the maximum size/length for a file that will match this filter.
 148    /// </summary>
 149    /// <remarks>The default value is <see cref="System.Int64.MaxValue"/></remarks>
 150    /// <exception cref="ArgumentOutOfRangeException">value is less than zero or less than <see cref="MinSize"/></except
 151    public long MaxSize {
 0152      get { return maxSize_; }
 153      set {
 0154         if ((value < 0) || (minSize_ > value)) {
 0155          throw new ArgumentOutOfRangeException(nameof(value));
 156        }
 157
 0158        maxSize_ = value;
 0159      }
 160    }
 161
 162    /// <summary>
 163    /// Get/set the minimum <see cref="DateTime"/> value that will match for this filter.
 164    /// </summary>
 165    /// <remarks>Files with a LastWrite time less than this value are excluded by the filter.</remarks>
 166    public DateTime MinDate {
 167      get {
 0168        return minDate_;
 169      }
 170
 171      set {
 0172         if (value > maxDate_) {
 0173          throw new ArgumentOutOfRangeException(nameof(value), "Exceeds MaxDate");
 174        }
 175
 0176        minDate_ = value;
 0177      }
 178    }
 179
 180    /// <summary>
 181    /// Get/set the maximum <see cref="DateTime"/> value that will match for this filter.
 182    /// </summary>
 183    /// <remarks>Files with a LastWrite time greater than this value are excluded by the filter.</remarks>
 184    public DateTime MaxDate {
 185      get {
 0186        return maxDate_;
 187      }
 188
 189      set {
 0190         if (minDate_ > value) {
 0191          throw new ArgumentOutOfRangeException(nameof(value), "Exceeds MinDate");
 192        }
 193
 0194        maxDate_ = value;
 0195      }
 196    }
 197    #endregion
 198
 199    #region Instance Fields
 200    long minSize_;
 0201    long maxSize_ = long.MaxValue;
 0202    DateTime minDate_ = DateTime.MinValue;
 0203    DateTime maxDate_ = DateTime.MaxValue;
 204    #endregion
 205  }
 206
 207  /// <summary>
 208  /// NameAndSizeFilter filters based on name and file size.
 209  /// </summary>
 210  /// <remarks>A sample showing how filters might be extended.</remarks>
 211  [Obsolete("Use ExtendedPathFilter instead")]
 212  public class NameAndSizeFilter : PathFilter
 213  {
 214
 215    /// <summary>
 216    /// Initialise a new instance of NameAndSizeFilter.
 217    /// </summary>
 218    /// <param name="filter">The filter to apply.</param>
 219    /// <param name="minSize">The minimum file size to include.</param>
 220    /// <param name="maxSize">The maximum file size to include.</param>
 221    public NameAndSizeFilter(string filter, long minSize, long maxSize)
 222      : base(filter)
 223    {
 224      MinSize = minSize;
 225      MaxSize = maxSize;
 226    }
 227
 228    /// <summary>
 229    /// Test a filename to see if it matches the filter.
 230    /// </summary>
 231    /// <param name="name">The filename to test.</param>
 232    /// <returns>True if the filter matches, false otherwise.</returns>
 233    public override bool IsMatch(string name)
 234    {
 235      bool result = base.IsMatch(name);
 236
 237      if (result) {
 238        var fileInfo = new FileInfo(name);
 239        long length = fileInfo.Length;
 240        result =
 241          (MinSize <= length) &&
 242          (MaxSize >= length);
 243      }
 244      return result;
 245    }
 246
 247    /// <summary>
 248    /// Get/set the minimum size for a file that will match this filter.
 249    /// </summary>
 250    public long MinSize {
 251      get { return minSize_; }
 252      set {
 253        if ((value < 0) || (maxSize_ < value)) {
 254          throw new ArgumentOutOfRangeException(nameof(value));
 255        }
 256
 257        minSize_ = value;
 258      }
 259    }
 260
 261    /// <summary>
 262    /// Get/set the maximum size for a file that will match this filter.
 263    /// </summary>
 264    public long MaxSize {
 265      get { return maxSize_; }
 266      set {
 267        if ((value < 0) || (minSize_ > value)) {
 268          throw new ArgumentOutOfRangeException(nameof(value));
 269        }
 270
 271        maxSize_ = value;
 272      }
 273    }
 274
 275    #region Instance Fields
 276    long minSize_;
 277    long maxSize_ = long.MaxValue;
 278    #endregion
 279  }
 280}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ExtendedUnixData.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ExtendedUnixData.htm.REMOVED.git-id new file mode 100644 index 0000000000..6270f66c58 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ExtendedUnixData.htm.REMOVED.git-id @@ -0,0 +1 @@ +bf33abe793e0abd5e1024d5248dd487df34a0092 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_FastZip.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_FastZip.htm.REMOVED.git-id new file mode 100644 index 0000000000..89ac9d9856 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_FastZip.htm.REMOVED.git-id @@ -0,0 +1 @@ +dee5d59d8a743c6a010cca280bee9d2076d410c7 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_FastZipEvents.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_FastZipEvents.htm.REMOVED.git-id new file mode 100644 index 0000000000..89afbf00a8 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_FastZipEvents.htm.REMOVED.git-id @@ -0,0 +1 @@ +98f6d3671f114060a640a6bd6b7f9fd69f5794d3 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_FileFailureHandler.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_FileFailureHandler.htm new file mode 100644 index 0000000000..9585a8fafb --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_FileFailureHandler.htm @@ -0,0 +1,29 @@ + + + + +ICSharpCode.SharpZipLib.Core.FileFailureHandler - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.FileFailureHandler
Assembly:ICSharpCode.SharpZipLib
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
+

File(s)

+

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_FileSystemScanner.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_FileSystemScanner.htm.REMOVED.git-id new file mode 100644 index 0000000000..8d12fe2987 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_FileSystemScanner.htm.REMOVED.git-id @@ -0,0 +1 @@ +908420467c53928e0a41b8e7f193c79fc62d7a4f \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_GZip.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_GZip.htm new file mode 100644 index 0000000000..b0a579d5f4 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_GZip.htm @@ -0,0 +1,109 @@ + + + + +ICSharpCode.SharpZipLib.GZip.GZip - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.GZip.GZip
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\GZip\GZip.cs
Covered lines:0
Uncovered lines:20
Coverable lines:20
Total lines:66
Line coverage:0%
Branch coverage:0%
+

Metrics

+ + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
Decompress(...)500
Compress(...)500
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\GZip\GZip.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.IO;
 3
 4namespace ICSharpCode.SharpZipLib.GZip
 5{
 6  /// <summary>
 7  /// An example class to demonstrate compression and decompression of GZip streams.
 8  /// </summary>
 9  public static class GZip
 10  {
 11    /// <summary>
 12    /// Decompress the <paramref name="inStream">input</paramref> writing
 13    /// uncompressed data to the <paramref name="outStream">output stream</paramref>
 14    /// </summary>
 15    /// <param name="inStream">The readable stream containing data to decompress.</param>
 16    /// <param name="outStream">The output stream to receive the decompressed data.</param>
 17    /// <param name="isStreamOwner">Both streams are closed on completion if true.</param>
 18    public static void Decompress(Stream inStream, Stream outStream, bool isStreamOwner)
 19    {
 020       if (inStream == null || outStream == null) {
 021        throw new Exception("Null Stream");
 22      }
 23
 24      try {
 025        using (GZipInputStream bzipInput = new GZipInputStream(inStream)) {
 026          bzipInput.IsStreamOwner = isStreamOwner;
 027          Core.StreamUtils.Copy(bzipInput, outStream, new byte[4096]);
 028        }
 29      } finally {
 030         if (isStreamOwner) {
 31          // inStream is closed by the GZipInputStream if stream owner
 032          outStream.Close();
 33        }
 034      }
 035    }
 36
 37    /// <summary>
 38    /// Compress the <paramref name="inStream">input stream</paramref> sending
 39    /// result data to <paramref name="outStream">output stream</paramref>
 40    /// </summary>
 41    /// <param name="inStream">The readable stream to compress.</param>
 42    /// <param name="outStream">The output stream to receive the compressed data.</param>
 43    /// <param name="isStreamOwner">Both streams are closed on completion if true.</param>
 44    /// <param name="level">Block size acts as compression level (1 to 9) with 1 giving
 45    /// the lowest compression and 9 the highest.</param>
 46    public static void Compress(Stream inStream, Stream outStream, bool isStreamOwner, int level)
 47    {
 048       if (inStream == null || outStream == null) {
 049        throw new Exception("Null Stream");
 50      }
 51
 52      try {
 053        using (GZipOutputStream bzipOutput = new GZipOutputStream(outStream, level)) {
 054          bzipOutput.IsStreamOwner = isStreamOwner;
 055          Core.StreamUtils.Copy(inStream, bzipOutput, new byte[4096]);
 056        }
 57      } finally {
 058         if (isStreamOwner) {
 59          // outStream is closed by the GZipOutputStream if stream owner
 060          inStream.Close();
 61        }
 062      }
 063    }
 64
 65  }
 66}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_GZipConstants.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_GZipConstants.htm new file mode 100644 index 0000000000..08e7a5e309 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_GZipConstants.htm @@ -0,0 +1,99 @@ + + + + +ICSharpCode.SharpZipLib.GZip.GZipConstants - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.GZip.GZipConstants
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\GZip\GZipConstants.cs
Covered lines:0
Uncovered lines:2
Coverable lines:2
Total lines:58
Line coverage:0%
+

Metrics

+ + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\GZip\GZipConstants.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1namespace ICSharpCode.SharpZipLib.GZip
 2{
 3  /// <summary>
 4  /// This class contains constants used for gzip.
 5  /// </summary>
 6  sealed public class GZipConstants
 7  {
 8    /// <summary>
 9    /// Magic number found at start of GZIP header
 10    /// </summary>
 11    public const int GZIP_MAGIC = 0x1F8B;
 12
 13    /*  The flag byte is divided into individual bits as follows:
 14
 15      bit 0   FTEXT
 16      bit 1   FHCRC
 17      bit 2   FEXTRA
 18      bit 3   FNAME
 19      bit 4   FCOMMENT
 20      bit 5   reserved
 21      bit 6   reserved
 22      bit 7   reserved
 23     */
 24
 25    /// <summary>
 26    /// Flag bit mask for text
 27    /// </summary>
 28    public const int FTEXT = 0x1;
 29
 30    /// <summary>
 31    /// Flag bitmask for Crc
 32    /// </summary>
 33    public const int FHCRC = 0x2;
 34
 35    /// <summary>
 36    /// Flag bit mask for extra
 37    /// </summary>
 38    public const int FEXTRA = 0x4;
 39
 40    /// <summary>
 41    /// flag bitmask for name
 42    /// </summary>
 43    public const int FNAME = 0x8;
 44
 45    /// <summary>
 46    /// flag bit mask indicating comment is present
 47    /// </summary>
 48    public const int FCOMMENT = 0x10;
 49
 50    /// <summary>
 51    /// Initialise default instance.
 52    /// </summary>
 53    /// <remarks>Constructor is private to prevent instances being created.</remarks>
 054    GZipConstants()
 55    {
 056    }
 57  }
 58}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_GZipException.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_GZipException.htm new file mode 100644 index 0000000000..6599d235c4 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_GZipException.htm @@ -0,0 +1,92 @@ + + + + +ICSharpCode.SharpZipLib.GZip.GZipException - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.GZip.GZipException
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\GZip\GZipException.cs
Covered lines:0
Uncovered lines:8
Coverable lines:8
Total lines:48
Line coverage:0%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor()100
.ctor(...)100
.ctor(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\GZip\GZipException.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.Runtime.Serialization;
 3
 4namespace ICSharpCode.SharpZipLib.GZip
 5{
 6  /// <summary>
 7  /// GZipException represents exceptions specific to GZip classes and code.
 8  /// </summary>
 9  [Serializable]
 10  public class GZipException : SharpZipBaseException
 11  {
 12    /// <summary>
 13    /// Deserialization constructor
 14    /// </summary>
 15    /// <param name="info"><see cref="SerializationInfo"/> for this constructor</param>
 16    /// <param name="context"><see cref="StreamingContext"/> for this constructor</param>
 17    protected GZipException(SerializationInfo info, StreamingContext context)
 018      : base(info, context)
 19    {
 020    }
 21
 22    /// <summary>
 23    /// Initialise a new instance of <see cref="GZipException" />.
 24    /// </summary>
 025    public GZipException()
 26    {
 027    }
 28
 29    /// <summary>
 30    /// Initialise a new instance of <see cref="GZipException" /> with its message string.
 31    /// </summary>
 32    /// <param name="message">A <see cref="string"/> that describes the error.</param>
 33    public GZipException(string message)
 034      : base(message)
 35    {
 036    }
 37
 38    /// <summary>
 39    /// Initialise a new instance of <see cref="GZipException" />.
 40    /// </summary>
 41    /// <param name="message">A <see cref="string"/> that describes the error.</param>
 42    /// <param name="innerException">The <see cref="Exception"/> that caused this exception.</param>
 43    public GZipException(string message, Exception innerException)
 044      : base(message, innerException)
 45    {
 046    }
 47  }
 48}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_GZipInputStream.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_GZipInputStream.htm.REMOVED.git-id new file mode 100644 index 0000000000..90c5914d02 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_GZipInputStream.htm.REMOVED.git-id @@ -0,0 +1 @@ +c3440d2731ad10014d965e6e38f01d9cfcc9ae9e \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_GZipOutputStream.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_GZipOutputStream.htm new file mode 100644 index 0000000000..4a2396cf90 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_GZipOutputStream.htm @@ -0,0 +1,277 @@ + + + + +ICSharpCode.SharpZipLib.GZip.GZipOutputStream - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.GZip.GZipOutputStream
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\GZip\GzipOutputStream.cs
Covered lines:63
Uncovered lines:5
Coverable lines:68
Total lines:227
Line coverage:92.6%
Branch coverage:81.2%
+

Metrics

+ + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
.ctor(...)1100100
Finalize()1100100
SetLevel(...)200
GetLevel()100
Write(...)3100100
Close()3100100
Finish()3100100
WriteHeader()210066.67
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\GZip\GzipOutputStream.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.IO;
 3using ICSharpCode.SharpZipLib.Checksum;
 4using ICSharpCode.SharpZipLib.Zip.Compression;
 5using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 6
 7namespace ICSharpCode.SharpZipLib.GZip
 8{
 9  /// <summary>
 10  /// This filter stream is used to compress a stream into a "GZIP" stream.
 11  /// The "GZIP" format is described in RFC 1952.
 12  ///
 13  /// author of the original java version : John Leuner
 14  /// </summary>
 15  /// <example> This sample shows how to gzip a file
 16  /// <code>
 17  /// using System;
 18  /// using System.IO;
 19  ///
 20  /// using ICSharpCode.SharpZipLib.GZip;
 21  /// using ICSharpCode.SharpZipLib.Core;
 22  ///
 23  /// class MainClass
 24  /// {
 25  ///   public static void Main(string[] args)
 26  ///   {
 27  ///       using (Stream s = new GZipOutputStream(File.Create(args[0] + ".gz")))
 28  ///       using (FileStream fs = File.OpenRead(args[0])) {
 29  ///         byte[] writeData = new byte[4096];
 30  ///         Streamutils.Copy(s, fs, writeData);
 31  ///       }
 32  ///     }
 33  ///   }
 34  /// }
 35  /// </code>
 36  /// </example>
 37  public class GZipOutputStream : DeflaterOutputStream
 38  {
 39    enum OutputState
 40    {
 41      Header,
 42      Footer,
 43      Finished,
 44      Closed,
 45    };
 46
 47    #region Instance Fields
 48    /// <summary>
 49    /// CRC-32 value for uncompressed data
 50    /// </summary>
 951    protected Crc32 crc = new Crc32();
 52    OutputState state_ = OutputState.Header;
 53    #endregion
 54
 55    #region Constructors
 56    /// <summary>
 57    /// Creates a GzipOutputStream with the default buffer size
 58    /// </summary>
 59    /// <param name="baseOutputStream">
 60    /// The stream to read data (to be compressed) from
 61    /// </param>
 62    public GZipOutputStream(Stream baseOutputStream)
 963      : this(baseOutputStream, 4096)
 64    {
 965    }
 66
 67    /// <summary>
 68    /// Creates a GZipOutputStream with the specified buffer size
 69    /// </summary>
 70    /// <param name="baseOutputStream">
 71    /// The stream to read data (to be compressed) from
 72    /// </param>
 73    /// <param name="size">
 74    /// Size of the buffer to use
 75    /// </param>
 976    public GZipOutputStream(Stream baseOutputStream, int size) : base(baseOutputStream, new Deflater(Deflater.DEFAULT_CO
 77    {
 978    }
 79    #endregion
 80
 81    #region Destructor
 82    /// <summary>
 83    /// Ensures that resources are freed and other cleanup operations
 84    /// are performed when the garbage collector reclaims the GZipOutputStream.
 85    /// </summary>
 86    ~GZipOutputStream()
 87    {
 988      Dispose(false);
 1889    }
 90    #endregion
 91
 92    #region Public API
 93    /// <summary>
 94    /// Sets the active compression level (1-9).  The new level will be activated
 95    /// immediately.
 96    /// </summary>
 97    /// <param name="level">The compression level to set.</param>
 98    /// <exception cref="ArgumentOutOfRangeException">
 99    /// Level specified is not supported.
 100    /// </exception>
 101    /// <see cref="Deflater"/>
 102    public void SetLevel(int level)
 103    {
 0104       if (level < Deflater.BEST_SPEED) {
 0105        throw new ArgumentOutOfRangeException(nameof(level));
 106      }
 0107      deflater_.SetLevel(level);
 0108    }
 109
 110    /// <summary>
 111    /// Get the current compression level.
 112    /// </summary>
 113    /// <returns>The current compression level.</returns>
 114    public int GetLevel()
 115    {
 0116      return deflater_.GetLevel();
 117    }
 118    #endregion
 119
 120    #region Stream overrides
 121    /// <summary>
 122    /// Write given buffer to output updating crc
 123    /// </summary>
 124    /// <param name="buffer">Buffer to write</param>
 125    /// <param name="offset">Offset of first byte in buf to write</param>
 126    /// <param name="count">Number of bytes to write</param>
 127    public override void Write(byte[] buffer, int offset, int count)
 128    {
 3129       if (state_ == OutputState.Header) {
 1130        WriteHeader();
 131      }
 132
 3133       if (state_ != OutputState.Footer) {
 2134        throw new InvalidOperationException("Write not permitted in current state");
 135      }
 136
 1137      crc.Update(buffer, offset, count);
 1138      base.Write(buffer, offset, count);
 1139    }
 140
 141    /// <summary>
 142    /// Writes remaining compressed output data to the output stream
 143    /// and closes it.
 144    /// </summary>
 145    public override void Close()
 146    {
 147      try {
 10148        Finish();
 10149      } finally {
 10150         if (state_ != OutputState.Closed) {
 8151          state_ = OutputState.Closed;
 8152           if (IsStreamOwner) {
 7153            baseOutputStream_.Close();
 154          }
 155        }
 10156      }
 10157    }
 158    #endregion
 159
 160    #region DeflaterOutputStream overrides
 161    /// <summary>
 162    /// Finish compression and write any footer information required to stream
 163    /// </summary>
 164    public override void Finish()
 165    {
 166      // If no data has been written a header should be added.
 13167       if (state_ == OutputState.Header) {
 8168        WriteHeader();
 169      }
 170
 13171       if (state_ == OutputState.Footer) {
 9172        state_ = OutputState.Finished;
 9173        base.Finish();
 174
 9175        var totalin = (uint)(deflater_.TotalIn & 0xffffffff);
 9176        var crcval = (uint)(crc.Value & 0xffffffff);
 177
 178        byte[] gzipFooter;
 179
 180        unchecked {
 9181          gzipFooter = new byte[] {
 9182          (byte) crcval, (byte) (crcval >> 8),
 9183          (byte) (crcval >> 16), (byte) (crcval >> 24),
 9184
 9185          (byte) totalin, (byte) (totalin >> 8),
 9186          (byte) (totalin >> 16), (byte) (totalin >> 24)
 9187        };
 188        }
 189
 9190        baseOutputStream_.Write(gzipFooter, 0, gzipFooter.Length);
 191      }
 13192    }
 193    #endregion
 194
 195    #region Support Routines
 196    void WriteHeader()
 197    {
 9198       if (state_ == OutputState.Header) {
 9199        state_ = OutputState.Footer;
 200
 9201        var mod_time = (int)((DateTime.Now.Ticks - new DateTime(1970, 1, 1).Ticks) / 10000000L);  // Ticks give back 100
 9202        byte[] gzipHeader = {
 9203          // The two magic bytes
 9204          (byte) (GZipConstants.GZIP_MAGIC >> 8), (byte) (GZipConstants.GZIP_MAGIC & 0xff),
 9205
 9206          // The compression type
 9207          (byte) Deflater.DEFLATED,
 9208
 9209          // The flags (not set)
 9210          0,
 9211
 9212          // The modification time
 9213          (byte) mod_time, (byte) (mod_time >> 8),
 9214          (byte) (mod_time >> 16), (byte) (mod_time >> 24),
 9215
 9216          // The extra flags
 9217          0,
 9218
 9219          // The OS type (unknown)
 9220          (byte) 255
 9221        };
 9222        baseOutputStream_.Write(gzipHeader, 0, gzipHeader.Length);
 223      }
 9224    }
 225    #endregion
 226  }
 227}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_Inflater.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_Inflater.htm.REMOVED.git-id new file mode 100644 index 0000000000..971bb54023 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_Inflater.htm.REMOVED.git-id @@ -0,0 +1 @@ +204a3f1e775157fb48ca17c397355a210308587a \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterDynHeader.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterDynHeader.htm new file mode 100644 index 0000000000..5255f42ae9 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterDynHeader.htm @@ -0,0 +1,215 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.InflaterDynHeader - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.InflaterDynHeader
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\InflaterDynHeader.cs
Covered lines:63
Uncovered lines:10
Coverable lines:73
Total lines:170
Line coverage:86.3%
Branch coverage:54.2%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
Decode(...)2184.1355.56
BuildLitLenTree()1100100
BuildDistTree()1100100
.cctor()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\InflaterDynHeader.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 3
 4namespace ICSharpCode.SharpZipLib.Zip.Compression
 5{
 6  class InflaterDynHeader
 7  {
 8    #region Constants
 9    const int LNUM = 0;
 10    const int DNUM = 1;
 11    const int BLNUM = 2;
 12    const int BLLENS = 3;
 13    const int LENS = 4;
 14    const int REPS = 5;
 15
 116    static readonly int[] repMin = { 3, 3, 11 };
 117    static readonly int[] repBits = { 2, 3, 7 };
 18
 119    static readonly int[] BL_ORDER =
 120    { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 };
 21    #endregion
 22
 23    public bool Decode(StreamManipulator input)
 24    {
 25      decode_loop:
 26      for (;;) {
 1027         switch (mode) {
 28          case LNUM:
 129            lnum = input.PeekBits(5);
 130             if (lnum < 0) {
 031              return false;
 32            }
 133            lnum += 257;
 134            input.DropBits(5);
 35            //        System.err.println("LNUM: "+lnum);
 136            mode = DNUM;
 37            goto case DNUM; // fall through
 38          case DNUM:
 139            dnum = input.PeekBits(5);
 140             if (dnum < 0) {
 041              return false;
 42            }
 143            dnum++;
 144            input.DropBits(5);
 45            //        System.err.println("DNUM: "+dnum);
 146            num = lnum + dnum;
 147            litdistLens = new byte[num];
 148            mode = BLNUM;
 49            goto case BLNUM; // fall through
 50          case BLNUM:
 151            blnum = input.PeekBits(4);
 152             if (blnum < 0) {
 053              return false;
 54            }
 155            blnum += 4;
 156            input.DropBits(4);
 157            blLens = new byte[19];
 158            ptr = 0;
 59            //        System.err.println("BLNUM: "+blnum);
 160            mode = BLLENS;
 161            goto case BLLENS; // fall through
 62          case BLLENS:
 1963             while (ptr < blnum) {
 1864              int len = input.PeekBits(3);
 1865               if (len < 0) {
 066                return false;
 67              }
 1868              input.DropBits(3);
 69              //      System.err.println("blLens["+BL_ORDER[ptr]+"]: "+len);
 1870              blLens[BL_ORDER[ptr]] = (byte)len;
 1871              ptr++;
 72            }
 173            blTree = new InflaterHuffmanTree(blLens);
 174            blLens = null;
 175            ptr = 0;
 176            mode = LENS;
 177            goto case LENS; // fall through
 78          case LENS: {
 79              int symbol;
 4580               while (((symbol = blTree.GetSymbol(input)) & ~15) == 0) {
 81                /* Normal case: symbol in [0..15] */
 82
 83                //        System.err.println("litdistLens["+ptr+"]: "+symbol);
 3684                litdistLens[ptr++] = lastLen = (byte)symbol;
 85
 3686                 if (ptr == num) {
 87                  /* Finished */
 188                  return true;
 89                }
 90              }
 91
 92              /* need more input ? */
 993               if (symbol < 0) {
 094                return false;
 95              }
 96
 97              /* otherwise repeat code */
 998               if (symbol >= 17) {
 99                /* repeat zero */
 100                //        System.err.println("repeating zero");
 9101                lastLen = 0;
 9102              } else {
 0103                 if (ptr == 0) {
 0104                  throw new SharpZipBaseException();
 105                }
 106              }
 9107              repSymbol = symbol - 16;
 108            }
 9109            mode = REPS;
 110            goto case REPS; // fall through
 111          case REPS: {
 9112              int bits = repBits[repSymbol];
 9113              int count = input.PeekBits(bits);
 9114               if (count < 0) {
 0115                return false;
 116              }
 9117              input.DropBits(bits);
 9118              count += repMin[repSymbol];
 119              //          System.err.println("litdistLens repeated: "+count);
 120
 9121               if (ptr + count > num) {
 0122                throw new SharpZipBaseException();
 123              }
 239124               while (count-- > 0) {
 230125                litdistLens[ptr++] = lastLen;
 126              }
 127
 9128               if (ptr == num) {
 129                /* Finished */
 0130                return true;
 131              }
 132            }
 9133            mode = LENS;
 9134            goto decode_loop;
 135        }
 136      }
 137    }
 138
 139    public InflaterHuffmanTree BuildLitLenTree()
 140    {
 1141      byte[] litlenLens = new byte[lnum];
 1142      Array.Copy(litdistLens, 0, litlenLens, 0, lnum);
 1143      return new InflaterHuffmanTree(litlenLens);
 144    }
 145
 146    public InflaterHuffmanTree BuildDistTree()
 147    {
 1148      byte[] distLens = new byte[dnum];
 1149      Array.Copy(litdistLens, lnum, distLens, 0, dnum);
 1150      return new InflaterHuffmanTree(distLens);
 151    }
 152
 153    #region Instance Fields
 154    byte[] blLens;
 155    byte[] litdistLens;
 156
 157    InflaterHuffmanTree blTree;
 158
 159    /// <summary>
 160    /// The current decode mode
 161    /// </summary>
 162    int mode;
 163    int lnum, dnum, blnum, num;
 164    int repSymbol;
 165    byte lastLen;
 166    int ptr;
 167    #endregion
 168
 169  }
 170}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterHuffmanTree.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterHuffmanTree.htm new file mode 100644 index 0000000000..9ce45e0bad --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterHuffmanTree.htm @@ -0,0 +1,238 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.InflaterHuffmanTree - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.InflaterHuffmanTree
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\InflaterHuffmanTree.cs
Covered lines:65
Uncovered lines:23
Coverable lines:88
Total lines:193
Line coverage:73.8%
Branch coverage:75%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.cctor()690100
.ctor(...)1100100
BuildTree(...)1282.6982.61
GetSymbol(...)741.6746.15
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\InflaterHuffmanTree.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using ICSharpCode.SharpZipLib.Zip.Compression.Streams;
 3
 4namespace ICSharpCode.SharpZipLib.Zip.Compression
 5{
 6  /// <summary>
 7  /// Huffman tree used for inflation
 8  /// </summary>
 9  public class InflaterHuffmanTree
 10  {
 11    #region Constants
 12    const int MAX_BITLEN = 15;
 13    #endregion
 14
 15    #region Instance Fields
 16    short[] tree;
 17    #endregion
 18
 19    /// <summary>
 20    /// Literal length tree
 21    /// </summary>
 22    public static InflaterHuffmanTree defLitLenTree;
 23
 24    /// <summary>
 25    /// Distance tree
 26    /// </summary>
 27    public static InflaterHuffmanTree defDistTree;
 28
 29    static InflaterHuffmanTree()
 30    {
 31      try {
 132        byte[] codeLengths = new byte[288];
 133        int i = 0;
 14534         while (i < 144) {
 14435          codeLengths[i++] = 8;
 36        }
 11337         while (i < 256) {
 11238          codeLengths[i++] = 9;
 39        }
 2540         while (i < 280) {
 2441          codeLengths[i++] = 7;
 42        }
 943         while (i < 288) {
 844          codeLengths[i++] = 8;
 45        }
 146        defLitLenTree = new InflaterHuffmanTree(codeLengths);
 47
 148        codeLengths = new byte[32];
 149        i = 0;
 3350         while (i < 32) {
 3251          codeLengths[i++] = 5;
 52        }
 153        defDistTree = new InflaterHuffmanTree(codeLengths);
 154      } catch (Exception) {
 055        throw new SharpZipBaseException("InflaterHuffmanTree: static tree length illegal");
 56      }
 157    }
 58
 59    #region Constructors
 60    /// <summary>
 61    /// Constructs a Huffman tree from the array of code lengths.
 62    /// </summary>
 63    /// <param name = "codeLengths">
 64    /// the array of code lengths
 65    /// </param>
 566    public InflaterHuffmanTree(byte[] codeLengths)
 67    {
 568      BuildTree(codeLengths);
 569    }
 70    #endregion
 71
 72    void BuildTree(byte[] codeLengths)
 73    {
 574      int[] blCount = new int[MAX_BITLEN + 1];
 575      int[] nextCode = new int[MAX_BITLEN + 1];
 76
 122077       for (int i = 0; i < codeLengths.Length; i++) {
 60578        int bits = codeLengths[i];
 60579         if (bits > 0) {
 35880          blCount[bits]++;
 81        }
 82      }
 83
 584      int code = 0;
 585      int treeSize = 512;
 16086       for (int bits = 1; bits <= MAX_BITLEN; bits++) {
 7587        nextCode[bits] = code;
 7588        code += blCount[bits] << (16 - bits);
 7589         if (bits >= 10) {
 90          /* We need an extra table for bit lengths >= 10. */
 3091          int start = nextCode[bits] & 0x1ff80;
 3092          int end = code & 0x1ff80;
 3093          treeSize += (end - start) >> (16 - bits);
 94        }
 95      }
 96
 97      /* -jr comment this out! doesnt work for dynamic trees and pkzip 2.04g
 98            if (code != 65536)
 99            {
 100              throw new SharpZipBaseException("Code lengths don't add up properly.");
 101            }
 102      */
 103      /* Now create and fill the extra tables from longest to shortest
 104      * bit len.  This way the sub trees will be aligned.
 105      */
 5106      tree = new short[treeSize];
 5107      int treePtr = 512;
 70108       for (int bits = MAX_BITLEN; bits >= 10; bits--) {
 30109        int end = code & 0x1ff80;
 30110        code -= blCount[bits] << (16 - bits);
 30111        int start = code & 0x1ff80;
 60112         for (int i = start; i < end; i += 1 << 7) {
 0113          tree[DeflaterHuffman.BitReverse(i)] = (short)((-treePtr << 4) | bits);
 0114          treePtr += 1 << (bits - 9);
 115        }
 116      }
 117
 1220118       for (int i = 0; i < codeLengths.Length; i++) {
 605119        int bits = codeLengths[i];
 605120         if (bits == 0) {
 121          continue;
 122        }
 358123        code = nextCode[bits];
 358124        int revcode = DeflaterHuffman.BitReverse(code);
 358125         if (bits <= 9) {
 126          do {
 2560127            tree[revcode] = (short)((i << 4) | bits);
 2560128            revcode += 1 << bits;
 2560129           } while (revcode < 512);
 358130        } else {
 0131          int subTree = tree[revcode & 511];
 0132          int treeLen = 1 << (subTree & 15);
 0133          subTree = -(subTree >> 4);
 134          do {
 0135            tree[subTree | (revcode >> 9)] = (short)((i << 4) | bits);
 0136            revcode += 1 << bits;
 0137           } while (revcode < treeLen);
 138        }
 358139        nextCode[bits] = code + (1 << (16 - bits));
 140      }
 141
 5142    }
 143
 144    /// <summary>
 145    /// Reads the next symbol from input.  The symbol is encoded using the
 146    /// huffman tree.
 147    /// </summary>
 148    /// <param name="input">
 149    /// input the input source.
 150    /// </param>
 151    /// <returns>
 152    /// the next symbol, or -1 if not enough input is available.
 153    /// </returns>
 154    public int GetSymbol(StreamManipulator input)
 155    {
 156      int lookahead, symbol;
 9839157       if ((lookahead = input.PeekBits(9)) >= 0) {
 9816158         if ((symbol = tree[lookahead]) >= 0) {
 9816159          input.DropBits(symbol & 15);
 9816160          return symbol >> 4;
 161        }
 0162        int subtree = -(symbol >> 4);
 0163        int bitlen = symbol & 15;
 0164         if ((lookahead = input.PeekBits(bitlen)) >= 0) {
 0165          symbol = tree[subtree | (lookahead >> 9)];
 0166          input.DropBits(symbol & 15);
 0167          return symbol >> 4;
 168        } else {
 0169          int bits = input.AvailableBits;
 0170          lookahead = input.PeekBits(bits);
 0171          symbol = tree[subtree | (lookahead >> 9)];
 0172           if ((symbol & 15) <= bits) {
 0173            input.DropBits(symbol & 15);
 0174            return symbol >> 4;
 175          } else {
 0176            return -1;
 177          }
 178        }
 179      } else {
 23180        int bits = input.AvailableBits;
 23181        lookahead = input.PeekBits(bits);
 23182        symbol = tree[lookahead];
 23183         if (symbol >= 0 && (symbol & 15) <= bits) {
 23184          input.DropBits(symbol & 15);
 23185          return symbol >> 4;
 186        } else {
 0187          return -1;
 188        }
 189      }
 190    }
 191  }
 192}
 193
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterInputBuffer.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterInputBuffer.htm.REMOVED.git-id new file mode 100644 index 0000000000..130c82dbd8 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterInputBuffer.htm.REMOVED.git-id @@ -0,0 +1 @@ +b5886cf83cbba5955591db624f7c954cc34cb9b6 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterInputStream.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterInputStream.htm.REMOVED.git-id new file mode 100644 index 0000000000..fb115db515 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_InflaterInputStream.htm.REMOVED.git-id @@ -0,0 +1 @@ +6570d574b7dba58e0be0873932a7bf05dea23900 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_InvalidHeaderException.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_InvalidHeaderException.htm new file mode 100644 index 0000000000..6ff28f6695 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_InvalidHeaderException.htm @@ -0,0 +1,95 @@ + + + + +ICSharpCode.SharpZipLib.Tar.InvalidHeaderException - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Tar.InvalidHeaderException
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\InvalidHeaderException.cs
Covered lines:0
Uncovered lines:8
Coverable lines:8
Total lines:51
Line coverage:0%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor()100
.ctor(...)100
.ctor(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\InvalidHeaderException.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.Runtime.Serialization;
 3
 4namespace ICSharpCode.SharpZipLib.Tar
 5{
 6  /// <summary>
 7  /// This exception is used to indicate that there is a problem
 8  /// with a TAR archive header.
 9  /// </summary>
 10  [Serializable]
 11  public class InvalidHeaderException : TarException
 12  {
 13
 14    /// <summary>
 15    /// Deserialization constructor
 16    /// </summary>
 17    /// <param name="information"><see cref="SerializationInfo"/> for this constructor</param>
 18    /// <param name="context"><see cref="StreamingContext"/> for this constructor</param>
 19    protected InvalidHeaderException(SerializationInfo information, StreamingContext context)
 020      : base(information, context)
 21
 22    {
 023    }
 24
 25    /// <summary>
 26    /// Initialise a new instance of the InvalidHeaderException class.
 27    /// </summary>
 028    public InvalidHeaderException()
 29    {
 030    }
 31
 32    /// <summary>
 33    /// Initialises a new instance of the InvalidHeaderException class with a specified message.
 34    /// </summary>
 35    /// <param name="message">Message describing the exception cause.</param>
 36    public InvalidHeaderException(string message)
 037      : base(message)
 38    {
 039    }
 40
 41    /// <summary>
 42    /// Initialise a new instance of InvalidHeaderException
 43    /// </summary>
 44    /// <param name="message">Message describing the problem.</param>
 45    /// <param name="exception">The exception that is the cause of the current exception.</param>
 46    public InvalidHeaderException(string message, Exception exception)
 047      : base(message, exception)
 48    {
 049    }
 50  }
 51}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_KeysRequiredEventArgs.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_KeysRequiredEventArgs.htm.REMOVED.git-id new file mode 100644 index 0000000000..c4619e26a3 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_KeysRequiredEventArgs.htm.REMOVED.git-id @@ -0,0 +1 @@ +89a27dd0146dfea2f999a2137d09674ce88015a3 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_LzwConstants.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_LzwConstants.htm new file mode 100644 index 0000000000..264d8f86b8 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_LzwConstants.htm @@ -0,0 +1,102 @@ + + + + +ICSharpCode.SharpZipLib.Lzw.LzwConstants - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Lzw.LzwConstants
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Lzw\LzwConstants.cs
Covered lines:0
Uncovered lines:2
Coverable lines:2
Total lines:61
Line coverage:0%
+

Metrics

+ + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Lzw\LzwConstants.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1namespace ICSharpCode.SharpZipLib.Lzw
 2{
 3  /// <summary>
 4  /// This class contains constants used for LZW
 5  /// </summary>
 6  sealed public class LzwConstants
 7  {
 8    /// <summary>
 9    /// Magic number found at start of LZW header: 0x1f 0x9d
 10    /// </summary>
 11    public const int MAGIC = 0x1f9d;
 12
 13    /// <summary>
 14    /// Maximum number of bits per code
 15    /// </summary>
 16    public const int MAX_BITS = 16;
 17
 18    /* 3rd header byte:
 19         * bit 0..4 Number of compression bits
 20         * bit 5    Extended header
 21         * bit 6    Free
 22         * bit 7    Block mode
 23         */
 24
 25    /// <summary>
 26    /// Mask for 'number of compression bits'
 27    /// </summary>
 28    public const int BIT_MASK = 0x1f;
 29
 30    /// <summary>
 31    /// Indicates the presence of a fourth header byte
 32    /// </summary>
 33    public const int EXTENDED_MASK = 0x20;
 34    //public const int FREE_MASK      = 0x40;
 35
 36    /// <summary>
 37    /// Reserved bits
 38    /// </summary>
 39    public const int RESERVED_MASK = 0x60;
 40
 41    /// <summary>
 42    /// Block compression: if table is full and compression rate is dropping,
 43    /// clear the dictionary.
 44    /// </summary>
 45    public const int BLOCK_MODE_MASK = 0x80;
 46
 47    /// <summary>
 48    /// LZW file header size (in bytes)
 49    /// </summary>
 50    public const int HDR_SIZE = 3;
 51
 52    /// <summary>
 53    /// Initial number of bits per code
 54    /// </summary>
 55    public const int INIT_BITS = 9;
 56
 057    LzwConstants()
 58    {
 059    }
 60  }
 61}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_LzwException.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_LzwException.htm new file mode 100644 index 0000000000..c8bd1e8a0e --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_LzwException.htm @@ -0,0 +1,92 @@ + + + + +ICSharpCode.SharpZipLib.Lzw.LzwException - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Lzw.LzwException
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Lzw\LzwException.cs
Covered lines:0
Uncovered lines:8
Coverable lines:8
Total lines:48
Line coverage:0%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor()100
.ctor(...)100
.ctor(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Lzw\LzwException.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.Runtime.Serialization;
 3
 4namespace ICSharpCode.SharpZipLib.Lzw
 5{
 6  /// <summary>
 7  /// LzwException represents exceptions specific to LZW classes and code.
 8  /// </summary>
 9  [Serializable]
 10  public class LzwException : SharpZipBaseException
 11  {
 12    /// <summary>
 13    /// Deserialization constructor
 14    /// </summary>
 15    /// <param name="info"><see cref="SerializationInfo"/> for this constructor</param>
 16    /// <param name="context"><see cref="StreamingContext"/> for this constructor</param>
 17    protected LzwException(SerializationInfo info, StreamingContext context)
 018      : base(info, context)
 19    {
 020    }
 21
 22    /// <summary>
 23    /// Initialise a new instance of <see cref="LzwException" />.
 24    /// </summary>
 025    public LzwException()
 26    {
 027    }
 28
 29    /// <summary>
 30    /// Initialise a new instance of <see cref="LzwException" /> with its message string.
 31    /// </summary>
 32    /// <param name="message">A <see cref="string"/> that describes the error.</param>
 33    public LzwException(string message)
 034      : base(message)
 35    {
 036    }
 37
 38    /// <summary>
 39    /// Initialise a new instance of <see cref="LzwException" />.
 40    /// </summary>
 41    /// <param name="message">A <see cref="string"/> that describes the error.</param>
 42    /// <param name="innerException">The <see cref="Exception"/> that caused this exception.</param>
 43    public LzwException(string message, Exception innerException)
 044      : base(message, innerException)
 45    {
 046    }
 47  }
 48}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_LzwInputStream.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_LzwInputStream.htm.REMOVED.git-id new file mode 100644 index 0000000000..a5acf917a8 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_LzwInputStream.htm.REMOVED.git-id @@ -0,0 +1 @@ +3645793e8b6ffdfe9bbea8b596449f8e2babee5d \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_MemoryArchiveStorage.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_MemoryArchiveStorage.htm.REMOVED.git-id new file mode 100644 index 0000000000..3eaa2aa6c4 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_MemoryArchiveStorage.htm.REMOVED.git-id @@ -0,0 +1 @@ +575c23086bcc0c5fe9ed6263913158156aedb7b3 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_NTTaggedData.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_NTTaggedData.htm.REMOVED.git-id new file mode 100644 index 0000000000..64f345bdf1 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_NTTaggedData.htm.REMOVED.git-id @@ -0,0 +1 @@ +4209b7bf31f78644894df681f83b466a4d699b31 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_NameAndSizeFilter.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_NameAndSizeFilter.htm new file mode 100644 index 0000000000..77bfa8bd77 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_NameAndSizeFilter.htm @@ -0,0 +1,323 @@ + + + + +ICSharpCode.SharpZipLib.Core.NameAndSizeFilter - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.NameAndSizeFilter
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\PathFilter.cs
Covered lines:0
Uncovered lines:23
Coverable lines:23
Total lines:280
Line coverage:0%
Branch coverage:0%
+

Metrics

+ + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
IsMatch(...)300
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\PathFilter.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.IO;
 3
 4namespace ICSharpCode.SharpZipLib.Core
 5{
 6  /// <summary>
 7  /// PathFilter filters directories and files using a form of <see cref="System.Text.RegularExpressions.Regex">regular 
 8  /// by full path name.
 9  /// See <see cref="NameFilter">NameFilter</see> for more detail on filtering.
 10  /// </summary>
 11  public class PathFilter : IScanFilter
 12  {
 13    #region Constructors
 14    /// <summary>
 15    /// Initialise a new instance of <see cref="PathFilter"></see>.
 16    /// </summary>
 17    /// <param name="filter">The <see cref="NameFilter">filter</see> expression to apply.</param>
 18    public PathFilter(string filter)
 19    {
 20      nameFilter_ = new NameFilter(filter);
 21    }
 22    #endregion
 23
 24    #region IScanFilter Members
 25    /// <summary>
 26    /// Test a name to see if it matches the filter.
 27    /// </summary>
 28    /// <param name="name">The name to test.</param>
 29    /// <returns>True if the name matches, false otherwise.</returns>
 30    /// <remarks><see cref="Path.GetFullPath(string)"/> is used to get the full path before matching.</remarks>
 31    public virtual bool IsMatch(string name)
 32    {
 33      bool result = false;
 34
 35      if (name != null) {
 36        string cooked = (name.Length > 0) ? Path.GetFullPath(name) : "";
 37        result = nameFilter_.IsMatch(cooked);
 38      }
 39      return result;
 40    }
 41
 42    readonly
 43    #endregion
 44
 45    #region Instance Fields
 46    NameFilter nameFilter_;
 47    #endregion
 48  }
 49
 50  /// <summary>
 51  /// ExtendedPathFilter filters based on name, file size, and the last write time of the file.
 52  /// </summary>
 53  /// <remarks>Provides an example of how to customise filtering.</remarks>
 54  public class ExtendedPathFilter : PathFilter
 55  {
 56    #region Constructors
 57    /// <summary>
 58    /// Initialise a new instance of ExtendedPathFilter.
 59    /// </summary>
 60    /// <param name="filter">The filter to apply.</param>
 61    /// <param name="minSize">The minimum file size to include.</param>
 62    /// <param name="maxSize">The maximum file size to include.</param>
 63    public ExtendedPathFilter(string filter,
 64      long minSize, long maxSize)
 65      : base(filter)
 66    {
 67      MinSize = minSize;
 68      MaxSize = maxSize;
 69    }
 70
 71    /// <summary>
 72    /// Initialise a new instance of ExtendedPathFilter.
 73    /// </summary>
 74    /// <param name="filter">The filter to apply.</param>
 75    /// <param name="minDate">The minimum <see cref="DateTime"/> to include.</param>
 76    /// <param name="maxDate">The maximum <see cref="DateTime"/> to include.</param>
 77    public ExtendedPathFilter(string filter,
 78      DateTime minDate, DateTime maxDate)
 79      : base(filter)
 80    {
 81      MinDate = minDate;
 82      MaxDate = maxDate;
 83    }
 84
 85    /// <summary>
 86    /// Initialise a new instance of ExtendedPathFilter.
 87    /// </summary>
 88    /// <param name="filter">The filter to apply.</param>
 89    /// <param name="minSize">The minimum file size to include.</param>
 90    /// <param name="maxSize">The maximum file size to include.</param>
 91    /// <param name="minDate">The minimum <see cref="DateTime"/> to include.</param>
 92    /// <param name="maxDate">The maximum <see cref="DateTime"/> to include.</param>
 93    public ExtendedPathFilter(string filter,
 94      long minSize, long maxSize,
 95      DateTime minDate, DateTime maxDate)
 96      : base(filter)
 97    {
 98      MinSize = minSize;
 99      MaxSize = maxSize;
 100      MinDate = minDate;
 101      MaxDate = maxDate;
 102    }
 103    #endregion
 104
 105    #region IScanFilter Members
 106    /// <summary>
 107    /// Test a filename to see if it matches the filter.
 108    /// </summary>
 109    /// <param name="name">The filename to test.</param>
 110    /// <returns>True if the filter matches, false otherwise.</returns>
 111    /// <exception cref="System.IO.FileNotFoundException">The <see paramref="fileName"/> doesnt exist</exception>
 112    public override bool IsMatch(string name)
 113    {
 114      bool result = base.IsMatch(name);
 115
 116      if (result) {
 117        var fileInfo = new FileInfo(name);
 118        result =
 119          (MinSize <= fileInfo.Length) &&
 120          (MaxSize >= fileInfo.Length) &&
 121          (MinDate <= fileInfo.LastWriteTime) &&
 122          (MaxDate >= fileInfo.LastWriteTime)
 123          ;
 124      }
 125      return result;
 126    }
 127    #endregion
 128
 129    #region Properties
 130    /// <summary>
 131    /// Get/set the minimum size/length for a file that will match this filter.
 132    /// </summary>
 133    /// <remarks>The default value is zero.</remarks>
 134    /// <exception cref="ArgumentOutOfRangeException">value is less than zero; greater than <see cref="MaxSize"/></excep
 135    public long MinSize {
 136      get { return minSize_; }
 137      set {
 138        if ((value < 0) || (maxSize_ < value)) {
 139          throw new ArgumentOutOfRangeException(nameof(value));
 140        }
 141
 142        minSize_ = value;
 143      }
 144    }
 145
 146    /// <summary>
 147    /// Get/set the maximum size/length for a file that will match this filter.
 148    /// </summary>
 149    /// <remarks>The default value is <see cref="System.Int64.MaxValue"/></remarks>
 150    /// <exception cref="ArgumentOutOfRangeException">value is less than zero or less than <see cref="MinSize"/></except
 151    public long MaxSize {
 152      get { return maxSize_; }
 153      set {
 154        if ((value < 0) || (minSize_ > value)) {
 155          throw new ArgumentOutOfRangeException(nameof(value));
 156        }
 157
 158        maxSize_ = value;
 159      }
 160    }
 161
 162    /// <summary>
 163    /// Get/set the minimum <see cref="DateTime"/> value that will match for this filter.
 164    /// </summary>
 165    /// <remarks>Files with a LastWrite time less than this value are excluded by the filter.</remarks>
 166    public DateTime MinDate {
 167      get {
 168        return minDate_;
 169      }
 170
 171      set {
 172        if (value > maxDate_) {
 173          throw new ArgumentOutOfRangeException(nameof(value), "Exceeds MaxDate");
 174        }
 175
 176        minDate_ = value;
 177      }
 178    }
 179
 180    /// <summary>
 181    /// Get/set the maximum <see cref="DateTime"/> value that will match for this filter.
 182    /// </summary>
 183    /// <remarks>Files with a LastWrite time greater than this value are excluded by the filter.</remarks>
 184    public DateTime MaxDate {
 185      get {
 186        return maxDate_;
 187      }
 188
 189      set {
 190        if (minDate_ > value) {
 191          throw new ArgumentOutOfRangeException(nameof(value), "Exceeds MinDate");
 192        }
 193
 194        maxDate_ = value;
 195      }
 196    }
 197    #endregion
 198
 199    #region Instance Fields
 200    long minSize_;
 201    long maxSize_ = long.MaxValue;
 202    DateTime minDate_ = DateTime.MinValue;
 203    DateTime maxDate_ = DateTime.MaxValue;
 204    #endregion
 205  }
 206
 207  /// <summary>
 208  /// NameAndSizeFilter filters based on name and file size.
 209  /// </summary>
 210  /// <remarks>A sample showing how filters might be extended.</remarks>
 211  [Obsolete("Use ExtendedPathFilter instead")]
 212  public class NameAndSizeFilter : PathFilter
 213  {
 214
 215    /// <summary>
 216    /// Initialise a new instance of NameAndSizeFilter.
 217    /// </summary>
 218    /// <param name="filter">The filter to apply.</param>
 219    /// <param name="minSize">The minimum file size to include.</param>
 220    /// <param name="maxSize">The maximum file size to include.</param>
 221    public NameAndSizeFilter(string filter, long minSize, long maxSize)
 0222      : base(filter)
 223    {
 0224      MinSize = minSize;
 0225      MaxSize = maxSize;
 0226    }
 227
 228    /// <summary>
 229    /// Test a filename to see if it matches the filter.
 230    /// </summary>
 231    /// <param name="name">The filename to test.</param>
 232    /// <returns>True if the filter matches, false otherwise.</returns>
 233    public override bool IsMatch(string name)
 234    {
 0235      bool result = base.IsMatch(name);
 236
 0237       if (result) {
 0238        var fileInfo = new FileInfo(name);
 0239        long length = fileInfo.Length;
 0240        result =
 0241          (MinSize <= length) &&
 0242          (MaxSize >= length);
 243      }
 0244      return result;
 245    }
 246
 247    /// <summary>
 248    /// Get/set the minimum size for a file that will match this filter.
 249    /// </summary>
 250    public long MinSize {
 0251      get { return minSize_; }
 252      set {
 0253         if ((value < 0) || (maxSize_ < value)) {
 0254          throw new ArgumentOutOfRangeException(nameof(value));
 255        }
 256
 0257        minSize_ = value;
 0258      }
 259    }
 260
 261    /// <summary>
 262    /// Get/set the maximum size for a file that will match this filter.
 263    /// </summary>
 264    public long MaxSize {
 0265      get { return maxSize_; }
 266      set {
 0267         if ((value < 0) || (minSize_ > value)) {
 0268          throw new ArgumentOutOfRangeException(nameof(value));
 269        }
 270
 0271        maxSize_ = value;
 0272      }
 273    }
 274
 275    #region Instance Fields
 276    long minSize_;
 0277    long maxSize_ = long.MaxValue;
 278    #endregion
 279  }
 280}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_NameFilter.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_NameFilter.htm new file mode 100644 index 0000000000..86343fd9a2 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_NameFilter.htm @@ -0,0 +1,285 @@ + + + + +ICSharpCode.SharpZipLib.Core.NameFilter - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.NameFilter
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\NameFilter.cs
Covered lines:68
Uncovered lines:18
Coverable lines:86
Total lines:235
Line coverage:79%
Branch coverage:73.9%
+

Metrics

+ + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
IsValidExpression(...)100
IsValidFilterExpression(...)78069.23
SplitQuoted(...)89693.33
ToString()100
IsIncluded(...)5100100
IsExcluded(...)45033.33
IsMatch(...)2100100
Compile()87566.67
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\NameFilter.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.Collections;
 3using System.Text;
 4using System.Text.RegularExpressions;
 5
 6namespace ICSharpCode.SharpZipLib.Core
 7{
 8  /// <summary>
 9  /// NameFilter is a string matching class which allows for both positive and negative
 10  /// matching.
 11  /// A filter is a sequence of independant <see cref="Regex">regular expressions</see> separated by semi-colons ';'.
 12  /// To include a semi-colon it may be quoted as in \;. Each expression can be prefixed by a plus '+' sign or
 13  /// a minus '-' sign to denote the expression is intended to include or exclude names.
 14  /// If neither a plus or minus sign is found include is the default.
 15  /// A given name is tested for inclusion before checking exclusions.  Only names matching an include spec
 16  /// and not matching an exclude spec are deemed to match the filter.
 17  /// An empty filter matches any name.
 18  /// </summary>
 19  /// <example>The following expression includes all name ending in '.dat' with the exception of 'dummy.dat'
 20  /// "+\.dat$;-^dummy\.dat$"
 21  /// </example>
 22  public class NameFilter : IScanFilter
 23  {
 24    #region Constructors
 25    /// <summary>
 26    /// Construct an instance based on the filter expression passed
 27    /// </summary>
 28    /// <param name="filter">The filter expression.</param>
 1129    public NameFilter(string filter)
 30    {
 1131      filter_ = filter;
 1132      inclusions_ = new ArrayList();
 1133      exclusions_ = new ArrayList();
 1134      Compile();
 1135    }
 36    #endregion
 37
 38    /// <summary>
 39    /// Test a string to see if it is a valid regular expression.
 40    /// </summary>
 41    /// <param name="expression">The expression to test.</param>
 42    /// <returns>True if expression is a valid <see cref="System.Text.RegularExpressions.Regex"/> false otherwise.</retu
 43    public static bool IsValidExpression(string expression)
 44    {
 045      bool result = true;
 46      try {
 047        var exp = new Regex(expression, RegexOptions.IgnoreCase | RegexOptions.Singleline);
 048      } catch (ArgumentException) {
 049        result = false;
 050      }
 051      return result;
 52    }
 53
 54    /// <summary>
 55    /// Test an expression to see if it is valid as a filter.
 56    /// </summary>
 57    /// <param name="toTest">The filter expression to test.</param>
 58    /// <returns>True if the expression is valid, false otherwise.</returns>
 59    public static bool IsValidFilterExpression(string toTest)
 60    {
 561      bool result = true;
 62
 63      try {
 564         if (toTest != null) {
 465          string[] items = SplitQuoted(toTest);
 1066           for (int i = 0; i < items.Length; ++i) {
 367             if ((items[i] != null) && (items[i].Length > 0)) {
 68              string toCompile;
 69
 370               if (items[i][0] == '+') {
 071                toCompile = items[i].Substring(1, items[i].Length - 1);
 372               } else if (items[i][0] == '-') {
 073                toCompile = items[i].Substring(1, items[i].Length - 1);
 074              } else {
 375                toCompile = items[i];
 76              }
 77
 378              var testRegex = new Regex(toCompile, RegexOptions.IgnoreCase | RegexOptions.Singleline);
 79            }
 80          }
 81        }
 582      } catch (ArgumentException) {
 283        result = false;
 284      }
 85
 586      return result;
 87    }
 88
 89    /// <summary>
 90    /// Split a string into its component pieces
 91    /// </summary>
 92    /// <param name="original">The original string</param>
 93    /// <returns>Returns an array of <see cref="T:System.String"/> values containing the individual filter elements.</re
 94    public static string[] SplitQuoted(string original)
 95    {
 1396      char escape = '\\';
 1397      char[] separators = { ';' };
 98
 1399      var result = new ArrayList();
 100
 13101       if (!string.IsNullOrEmpty(original)) {
 11102        int endIndex = -1;
 11103        var b = new StringBuilder();
 104
 78105         while (endIndex < original.Length) {
 67106          endIndex += 1;
 67107           if (endIndex >= original.Length) {
 11108            result.Add(b.ToString());
 67109           } else if (original[endIndex] == escape) {
 11110            endIndex += 1;
 11111             if (endIndex >= original.Length) {
 0112              throw new ArgumentException("Missing terminating escape character", nameof(original));
 113            }
 114            // include escape if this is not an escaped separator
 11115             if (Array.IndexOf(separators, original[endIndex]) < 0)
 6116              b.Append(escape);
 117
 11118            b.Append(original[endIndex]);
 11119          } else {
 45120             if (Array.IndexOf(separators, original[endIndex]) >= 0) {
 11121              result.Add(b.ToString());
 11122              b.Length = 0;
 11123            } else {
 34124              b.Append(original[endIndex]);
 125            }
 126          }
 127        }
 128      }
 129
 13130      return (string[])result.ToArray(typeof(string));
 131    }
 132
 133    /// <summary>
 134    /// Convert this filter to its string equivalent.
 135    /// </summary>
 136    /// <returns>The string equivalent for this filter.</returns>
 137    public override string ToString()
 138    {
 0139      return filter_;
 140    }
 141
 142    /// <summary>
 143    /// Test a value to see if it is included by the filter.
 144    /// </summary>
 145    /// <param name="name">The value to test.</param>
 146    /// <returns>True if the value is included, false otherwise.</returns>
 147    public bool IsIncluded(string name)
 148    {
 14149149      bool result = false;
 14149150       if (inclusions_.Count == 0) {
 2151        result = true;
 2152      } else {
 56584153        foreach (Regex r in inclusions_) {
 14147154           if (r.IsMatch(name)) {
 4155            result = true;
 4156            break;
 157          }
 158        }
 159      }
 14149160      return result;
 161    }
 162
 163    /// <summary>
 164    /// Test a value to see if it is excluded by the filter.
 165    /// </summary>
 166    /// <param name="name">The value to test.</param>
 167    /// <returns>True if the value is excluded, false otherwise.</returns>
 168    public bool IsExcluded(string name)
 169    {
 5170      bool result = false;
 10171      foreach (Regex r in exclusions_) {
 0172         if (r.IsMatch(name)) {
 0173          result = true;
 0174          break;
 175        }
 176      }
 5177      return result;
 178    }
 179
 180    #region IScanFilter Members
 181    /// <summary>
 182    /// Test a value to see if it matches the filter.
 183    /// </summary>
 184    /// <param name="name">The value to test.</param>
 185    /// <returns>True if the value matches, false otherwise.</returns>
 186    public bool IsMatch(string name)
 187    {
 14148188      return (IsIncluded(name) && !IsExcluded(name));
 189    }
 190    #endregion
 191
 192    /// <summary>
 193    /// Compile this filter.
 194    /// </summary>
 195    void Compile()
 196    {
 197      // TODO: Check to see if combining RE's makes it faster/smaller.
 198      // simple scheme would be to have one RE for inclusion and one for exclusion.
 11199       if (filter_ == null) {
 6200        return;
 201      }
 202
 5203      string[] items = SplitQuoted(filter_);
 20204       for (int i = 0; i < items.Length; ++i) {
 5205         if ((items[i] != null) && (items[i].Length > 0)) {
 5206          bool include = (items[i][0] != '-');
 207          string toCompile;
 208
 5209           if (items[i][0] == '+') {
 0210            toCompile = items[i].Substring(1, items[i].Length - 1);
 5211           } else if (items[i][0] == '-') {
 0212            toCompile = items[i].Substring(1, items[i].Length - 1);
 0213          } else {
 5214            toCompile = items[i];
 215          }
 216
 217          // NOTE: Regular expressions can fail to compile here for a number of reasons that cause an exception
 218          // these are left unhandled here as the caller is responsible for ensuring all is valid.
 219          // several functions IsValidFilterExpression and IsValidExpression are provided for such checking
 5220           if (include) {
 5221            inclusions_.Add(new Regex(toCompile, RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleli
 5222          } else {
 0223            exclusions_.Add(new Regex(toCompile, RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleli
 224          }
 225        }
 226      }
 5227    }
 228
 229    #region Instance Fields
 230    string filter_;
 231    ArrayList inclusions_;
 232    ArrayList exclusions_;
 233    #endregion
 234  }
 235}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_OutputWindow.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_OutputWindow.htm new file mode 100644 index 0000000000..98eea7b90b --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_OutputWindow.htm @@ -0,0 +1,246 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.Streams.OutputWindow - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.Streams.OutputWindow
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\Streams\OutputWindow.cs
Covered lines:46
Uncovered lines:20
Coverable lines:66
Total lines:195
Line coverage:69.6%
Branch coverage:53.3%
+

Metrics

+ + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
Write(...)28066.67
SlowRepeat(...)200
Repeat(...)678.5772.73
CopyStored(...)310080
CopyDict(...)400
GetFreeSpace()1100100
GetAvailable()1100100
CopyOutput(...)493.7585.71
Reset()1100100
.ctor()1100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\Streams\OutputWindow.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2
 3namespace ICSharpCode.SharpZipLib.Zip.Compression.Streams
 4{
 5  /// <summary>
 6  /// Contains the output from the Inflation process.
 7  /// We need to have a window so that we can refer backwards into the output stream
 8  /// to repeat stuff.<br/>
 9  /// Author of the original java version : John Leuner
 10  /// </summary>
 11  public class OutputWindow
 12  {
 13    #region Constants
 14    const int WindowSize = 1 << 15;
 15    const int WindowMask = WindowSize - 1;
 16    #endregion
 17
 18    #region Instance Fields
 43519    byte[] window = new byte[WindowSize]; //The window is 2^15 bytes
 20    int windowEnd;
 21    int windowFilled;
 22    #endregion
 23
 24    /// <summary>
 25    /// Write a byte to this output window
 26    /// </summary>
 27    /// <param name="value">value to write</param>
 28    /// <exception cref="InvalidOperationException">
 29    /// if window is full
 30    /// </exception>
 31    public void Write(int value)
 32    {
 922933       if (windowFilled++ == WindowSize) {
 034        throw new InvalidOperationException("Window full");
 35      }
 922936      window[windowEnd++] = (byte)value;
 922937      windowEnd &= WindowMask;
 922938    }
 39
 40
 41    private void SlowRepeat(int repStart, int length, int distance)
 42    {
 043       while (length-- > 0) {
 044        window[windowEnd++] = window[repStart++];
 045        windowEnd &= WindowMask;
 046        repStart &= WindowMask;
 47      }
 048    }
 49
 50    /// <summary>
 51    /// Append a byte pattern already in the window itself
 52    /// </summary>
 53    /// <param name="length">length of pattern to copy</param>
 54    /// <param name="distance">distance from end of window pattern occurs</param>
 55    /// <exception cref="InvalidOperationException">
 56    /// If the repeated data overflows the window
 57    /// </exception>
 58    public void Repeat(int length, int distance)
 59    {
 9760       if ((windowFilled += length) > WindowSize) {
 061        throw new InvalidOperationException("Window full");
 62      }
 63
 9764      int repStart = (windowEnd - distance) & WindowMask;
 9765      int border = WindowSize - length;
 9766       if ((repStart <= border) && (windowEnd < border)) {
 9767         if (length <= distance) {
 3768          System.Array.Copy(window, repStart, window, windowEnd, length);
 3769          windowEnd += length;
 3770        } else {
 71          // We have to copy manually, since the repeat pattern overlaps.
 1146172           while (length-- > 0) {
 1140173            window[windowEnd++] = window[repStart++];
 74          }
 75        }
 6076      } else {
 077        SlowRepeat(repStart, length, distance);
 78      }
 079    }
 80
 81    /// <summary>
 82    /// Copy from input manipulator to internal window
 83    /// </summary>
 84    /// <param name="input">source of data</param>
 85    /// <param name="length">length of data to copy</param>
 86    /// <returns>the number of bytes copied</returns>
 87    public int CopyStored(StreamManipulator input, int length)
 88    {
 228089      length = Math.Min(Math.Min(length, WindowSize - windowFilled), input.AvailableBytes);
 90      int copied;
 91
 228092      int tailLen = WindowSize - windowEnd;
 228093       if (length > tailLen) {
 9694        copied = input.CopyBytes(window, windowEnd, tailLen);
 9695         if (copied == tailLen) {
 9696          copied += input.CopyBytes(window, 0, length - tailLen);
 97        }
 9698      } else {
 218499        copied = input.CopyBytes(window, windowEnd, length);
 100      }
 101
 2280102      windowEnd = (windowEnd + copied) & WindowMask;
 2280103      windowFilled += copied;
 2280104      return copied;
 105    }
 106
 107    /// <summary>
 108    /// Copy dictionary to window
 109    /// </summary>
 110    /// <param name="dictionary">source dictionary</param>
 111    /// <param name="offset">offset of start in source dictionary</param>
 112    /// <param name="length">length of dictionary</param>
 113    /// <exception cref="InvalidOperationException">
 114    /// If window isnt empty
 115    /// </exception>
 116    public void CopyDict(byte[] dictionary, int offset, int length)
 117    {
 0118       if (dictionary == null) {
 0119        throw new ArgumentNullException(nameof(dictionary));
 120      }
 121
 0122       if (windowFilled > 0) {
 0123        throw new InvalidOperationException();
 124      }
 125
 0126       if (length > WindowSize) {
 0127        offset += length - WindowSize;
 0128        length = WindowSize;
 129      }
 0130      System.Array.Copy(dictionary, offset, window, 0, length);
 0131      windowEnd = length & WindowMask;
 0132    }
 133
 134    /// <summary>
 135    /// Get remaining unfilled space in window
 136    /// </summary>
 137    /// <returns>Number of bytes left in window</returns>
 138    public int GetFreeSpace()
 139    {
 371140      return WindowSize - windowFilled;
 141    }
 142
 143    /// <summary>
 144    /// Get bytes available for output in window
 145    /// </summary>
 146    /// <returns>Number of bytes filled</returns>
 147    public int GetAvailable()
 148    {
 3783149      return windowFilled;
 150    }
 151
 152    /// <summary>
 153    /// Copy contents of window to output
 154    /// </summary>
 155    /// <param name="output">buffer to copy to</param>
 156    /// <param name="offset">offset to start at</param>
 157    /// <param name="len">number of bytes to count</param>
 158    /// <returns>The number of bytes copied</returns>
 159    /// <exception cref="InvalidOperationException">
 160    /// If a window underflow occurs
 161    /// </exception>
 162    public int CopyOutput(byte[] output, int offset, int len)
 163    {
 4523164      int copyEnd = windowEnd;
 4523165       if (len > windowFilled) {
 4401166        len = windowFilled;
 4401167      } else {
 122168        copyEnd = (windowEnd - windowFilled + len) & WindowMask;
 169      }
 170
 4523171      int copied = len;
 4523172      int tailLen = len - copyEnd;
 173
 4523174       if (tailLen > 0) {
 102175        System.Array.Copy(window, WindowSize - tailLen, output, offset, tailLen);
 102176        offset += tailLen;
 102177        len = copyEnd;
 178      }
 4523179      System.Array.Copy(window, copyEnd - len, output, offset, len);
 4523180      windowFilled -= copied;
 4523181       if (windowFilled < 0) {
 0182        throw new InvalidOperationException();
 183      }
 4523184      return copied;
 185    }
 186
 187    /// <summary>
 188    /// Reset by clearing window so <see cref="GetAvailable">GetAvailable</see> returns 0
 189    /// </summary>
 190    public void Reset()
 191    {
 41192      windowFilled = windowEnd = 0;
 41193    }
 194  }
 195}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PathFilter.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PathFilter.htm new file mode 100644 index 0000000000..b72a9e78ed --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PathFilter.htm @@ -0,0 +1,323 @@ + + + + +ICSharpCode.SharpZipLib.Core.PathFilter - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.PathFilter
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\PathFilter.cs
Covered lines:8
Uncovered lines:0
Coverable lines:8
Total lines:280
Line coverage:100%
Branch coverage:50%
+

Metrics

+ + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)1100100
IsMatch(...)410060
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\PathFilter.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.IO;
 3
 4namespace ICSharpCode.SharpZipLib.Core
 5{
 6  /// <summary>
 7  /// PathFilter filters directories and files using a form of <see cref="System.Text.RegularExpressions.Regex">regular 
 8  /// by full path name.
 9  /// See <see cref="NameFilter">NameFilter</see> for more detail on filtering.
 10  /// </summary>
 11  public class PathFilter : IScanFilter
 12  {
 13    #region Constructors
 14    /// <summary>
 15    /// Initialise a new instance of <see cref="PathFilter"></see>.
 16    /// </summary>
 17    /// <param name="filter">The <see cref="NameFilter">filter</see> expression to apply.</param>
 818    public PathFilter(string filter)
 19    {
 820      nameFilter_ = new NameFilter(filter);
 821    }
 22    #endregion
 23
 24    #region IScanFilter Members
 25    /// <summary>
 26    /// Test a name to see if it matches the filter.
 27    /// </summary>
 28    /// <param name="name">The name to test.</param>
 29    /// <returns>True if the name matches, false otherwise.</returns>
 30    /// <remarks><see cref="Path.GetFullPath(string)"/> is used to get the full path before matching.</remarks>
 31    public virtual bool IsMatch(string name)
 32    {
 1414733      bool result = false;
 34
 1414735       if (name != null) {
 1414736         string cooked = (name.Length > 0) ? Path.GetFullPath(name) : "";
 1414737        result = nameFilter_.IsMatch(cooked);
 38      }
 1414739      return result;
 40    }
 41
 42    readonly
 43    #endregion
 44
 45    #region Instance Fields
 46    NameFilter nameFilter_;
 47    #endregion
 48  }
 49
 50  /// <summary>
 51  /// ExtendedPathFilter filters based on name, file size, and the last write time of the file.
 52  /// </summary>
 53  /// <remarks>Provides an example of how to customise filtering.</remarks>
 54  public class ExtendedPathFilter : PathFilter
 55  {
 56    #region Constructors
 57    /// <summary>
 58    /// Initialise a new instance of ExtendedPathFilter.
 59    /// </summary>
 60    /// <param name="filter">The filter to apply.</param>
 61    /// <param name="minSize">The minimum file size to include.</param>
 62    /// <param name="maxSize">The maximum file size to include.</param>
 63    public ExtendedPathFilter(string filter,
 64      long minSize, long maxSize)
 65      : base(filter)
 66    {
 67      MinSize = minSize;
 68      MaxSize = maxSize;
 69    }
 70
 71    /// <summary>
 72    /// Initialise a new instance of ExtendedPathFilter.
 73    /// </summary>
 74    /// <param name="filter">The filter to apply.</param>
 75    /// <param name="minDate">The minimum <see cref="DateTime"/> to include.</param>
 76    /// <param name="maxDate">The maximum <see cref="DateTime"/> to include.</param>
 77    public ExtendedPathFilter(string filter,
 78      DateTime minDate, DateTime maxDate)
 79      : base(filter)
 80    {
 81      MinDate = minDate;
 82      MaxDate = maxDate;
 83    }
 84
 85    /// <summary>
 86    /// Initialise a new instance of ExtendedPathFilter.
 87    /// </summary>
 88    /// <param name="filter">The filter to apply.</param>
 89    /// <param name="minSize">The minimum file size to include.</param>
 90    /// <param name="maxSize">The maximum file size to include.</param>
 91    /// <param name="minDate">The minimum <see cref="DateTime"/> to include.</param>
 92    /// <param name="maxDate">The maximum <see cref="DateTime"/> to include.</param>
 93    public ExtendedPathFilter(string filter,
 94      long minSize, long maxSize,
 95      DateTime minDate, DateTime maxDate)
 96      : base(filter)
 97    {
 98      MinSize = minSize;
 99      MaxSize = maxSize;
 100      MinDate = minDate;
 101      MaxDate = maxDate;
 102    }
 103    #endregion
 104
 105    #region IScanFilter Members
 106    /// <summary>
 107    /// Test a filename to see if it matches the filter.
 108    /// </summary>
 109    /// <param name="name">The filename to test.</param>
 110    /// <returns>True if the filter matches, false otherwise.</returns>
 111    /// <exception cref="System.IO.FileNotFoundException">The <see paramref="fileName"/> doesnt exist</exception>
 112    public override bool IsMatch(string name)
 113    {
 114      bool result = base.IsMatch(name);
 115
 116      if (result) {
 117        var fileInfo = new FileInfo(name);
 118        result =
 119          (MinSize <= fileInfo.Length) &&
 120          (MaxSize >= fileInfo.Length) &&
 121          (MinDate <= fileInfo.LastWriteTime) &&
 122          (MaxDate >= fileInfo.LastWriteTime)
 123          ;
 124      }
 125      return result;
 126    }
 127    #endregion
 128
 129    #region Properties
 130    /// <summary>
 131    /// Get/set the minimum size/length for a file that will match this filter.
 132    /// </summary>
 133    /// <remarks>The default value is zero.</remarks>
 134    /// <exception cref="ArgumentOutOfRangeException">value is less than zero; greater than <see cref="MaxSize"/></excep
 135    public long MinSize {
 136      get { return minSize_; }
 137      set {
 138        if ((value < 0) || (maxSize_ < value)) {
 139          throw new ArgumentOutOfRangeException(nameof(value));
 140        }
 141
 142        minSize_ = value;
 143      }
 144    }
 145
 146    /// <summary>
 147    /// Get/set the maximum size/length for a file that will match this filter.
 148    /// </summary>
 149    /// <remarks>The default value is <see cref="System.Int64.MaxValue"/></remarks>
 150    /// <exception cref="ArgumentOutOfRangeException">value is less than zero or less than <see cref="MinSize"/></except
 151    public long MaxSize {
 152      get { return maxSize_; }
 153      set {
 154        if ((value < 0) || (minSize_ > value)) {
 155          throw new ArgumentOutOfRangeException(nameof(value));
 156        }
 157
 158        maxSize_ = value;
 159      }
 160    }
 161
 162    /// <summary>
 163    /// Get/set the minimum <see cref="DateTime"/> value that will match for this filter.
 164    /// </summary>
 165    /// <remarks>Files with a LastWrite time less than this value are excluded by the filter.</remarks>
 166    public DateTime MinDate {
 167      get {
 168        return minDate_;
 169      }
 170
 171      set {
 172        if (value > maxDate_) {
 173          throw new ArgumentOutOfRangeException(nameof(value), "Exceeds MaxDate");
 174        }
 175
 176        minDate_ = value;
 177      }
 178    }
 179
 180    /// <summary>
 181    /// Get/set the maximum <see cref="DateTime"/> value that will match for this filter.
 182    /// </summary>
 183    /// <remarks>Files with a LastWrite time greater than this value are excluded by the filter.</remarks>
 184    public DateTime MaxDate {
 185      get {
 186        return maxDate_;
 187      }
 188
 189      set {
 190        if (minDate_ > value) {
 191          throw new ArgumentOutOfRangeException(nameof(value), "Exceeds MinDate");
 192        }
 193
 194        maxDate_ = value;
 195      }
 196    }
 197    #endregion
 198
 199    #region Instance Fields
 200    long minSize_;
 201    long maxSize_ = long.MaxValue;
 202    DateTime minDate_ = DateTime.MinValue;
 203    DateTime maxDate_ = DateTime.MaxValue;
 204    #endregion
 205  }
 206
 207  /// <summary>
 208  /// NameAndSizeFilter filters based on name and file size.
 209  /// </summary>
 210  /// <remarks>A sample showing how filters might be extended.</remarks>
 211  [Obsolete("Use ExtendedPathFilter instead")]
 212  public class NameAndSizeFilter : PathFilter
 213  {
 214
 215    /// <summary>
 216    /// Initialise a new instance of NameAndSizeFilter.
 217    /// </summary>
 218    /// <param name="filter">The filter to apply.</param>
 219    /// <param name="minSize">The minimum file size to include.</param>
 220    /// <param name="maxSize">The maximum file size to include.</param>
 221    public NameAndSizeFilter(string filter, long minSize, long maxSize)
 222      : base(filter)
 223    {
 224      MinSize = minSize;
 225      MaxSize = maxSize;
 226    }
 227
 228    /// <summary>
 229    /// Test a filename to see if it matches the filter.
 230    /// </summary>
 231    /// <param name="name">The filename to test.</param>
 232    /// <returns>True if the filter matches, false otherwise.</returns>
 233    public override bool IsMatch(string name)
 234    {
 235      bool result = base.IsMatch(name);
 236
 237      if (result) {
 238        var fileInfo = new FileInfo(name);
 239        long length = fileInfo.Length;
 240        result =
 241          (MinSize <= length) &&
 242          (MaxSize >= length);
 243      }
 244      return result;
 245    }
 246
 247    /// <summary>
 248    /// Get/set the minimum size for a file that will match this filter.
 249    /// </summary>
 250    public long MinSize {
 251      get { return minSize_; }
 252      set {
 253        if ((value < 0) || (maxSize_ < value)) {
 254          throw new ArgumentOutOfRangeException(nameof(value));
 255        }
 256
 257        minSize_ = value;
 258      }
 259    }
 260
 261    /// <summary>
 262    /// Get/set the maximum size for a file that will match this filter.
 263    /// </summary>
 264    public long MaxSize {
 265      get { return maxSize_; }
 266      set {
 267        if ((value < 0) || (minSize_ > value)) {
 268          throw new ArgumentOutOfRangeException(nameof(value));
 269        }
 270
 271        maxSize_ = value;
 272      }
 273    }
 274
 275    #region Instance Fields
 276    long minSize_;
 277    long maxSize_ = long.MaxValue;
 278    #endregion
 279  }
 280}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PendingBuffer.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PendingBuffer.htm new file mode 100644 index 0000000000..44fe308b75 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PendingBuffer.htm @@ -0,0 +1,308 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\PendingBuffer.cs
Covered lines:40
Uncovered lines:18
Coverable lines:58
Total lines:255
Line coverage:68.9%
Branch coverage:90%
+

Metrics

+ + + + + + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()100
.ctor(...)1100100
Reset()1100100
WriteByte(...)100
WriteShort(...)1100100
WriteInt(...)100
WriteBlock(...)1100100
AlignToByte()3100100
WriteBits(...)2100100
WriteShortMSB(...)1100100
Flush(...)376.9280
ToByteArray()100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\PendingBuffer.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2
 3namespace ICSharpCode.SharpZipLib.Zip.Compression
 4{
 5  /// <summary>
 6  /// This class is general purpose class for writing data to a buffer.
 7  ///
 8  /// It allows you to write bits as well as bytes
 9  /// Based on DeflaterPending.java
 10  ///
 11  /// author of the original java version : Jochen Hoenicke
 12  /// </summary>
 13  public class PendingBuffer
 14  {
 15    readonly
 16    #region Instance Fields
 17    /// <summary>
 18    /// Internal work buffer
 19    /// </summary>
 20    byte[] buffer_;
 21
 22    int start;
 23    int end;
 24
 25    uint bits;
 26    int bitCount;
 27    #endregion
 28
 29    #region Constructors
 30    /// <summary>
 31    /// construct instance using default buffer size of 4096
 32    /// </summary>
 033    public PendingBuffer() : this(4096)
 34    {
 035    }
 36
 37    /// <summary>
 38    /// construct instance using specified buffer size
 39    /// </summary>
 40    /// <param name="bufferSize">
 41    /// size to use for internal buffer
 42    /// </param>
 27343    public PendingBuffer(int bufferSize)
 44    {
 27345      buffer_ = new byte[bufferSize];
 27346    }
 47
 48    #endregion
 49
 50    /// <summary>
 51    /// Clear internal state/buffers
 52    /// </summary>
 53    public void Reset()
 54    {
 39255      start = end = bitCount = 0;
 39256    }
 57
 58    /// <summary>
 59    /// Write a byte to buffer
 60    /// </summary>
 61    /// <param name="value">
 62    /// The value to write
 63    /// </param>
 64    public void WriteByte(int value)
 65    {
 66#if DebugDeflation
 67      if (DeflaterConstants.DEBUGGING && (start != 0) )
 68      {
 69        throw new SharpZipBaseException("Debug check: start != 0");
 70      }
 71#endif
 072      buffer_[end++] = unchecked((byte)value);
 073    }
 74
 75    /// <summary>
 76    /// Write a short value to buffer LSB first
 77    /// </summary>
 78    /// <param name="value">
 79    /// The value to write.
 80    /// </param>
 81    public void WriteShort(int value)
 82    {
 83#if DebugDeflation
 84      if (DeflaterConstants.DEBUGGING && (start != 0) )
 85      {
 86        throw new SharpZipBaseException("Debug check: start != 0");
 87      }
 88#endif
 58689      buffer_[end++] = unchecked((byte)value);
 58690      buffer_[end++] = unchecked((byte)(value >> 8));
 58691    }
 92
 93    /// <summary>
 94    /// write an integer LSB first
 95    /// </summary>
 96    /// <param name="value">The value to write.</param>
 97    public void WriteInt(int value)
 98    {
 99#if DebugDeflation
 100      if (DeflaterConstants.DEBUGGING && (start != 0) )
 101      {
 102        throw new SharpZipBaseException("Debug check: start != 0");
 103      }
 104#endif
 0105      buffer_[end++] = unchecked((byte)value);
 0106      buffer_[end++] = unchecked((byte)(value >> 8));
 0107      buffer_[end++] = unchecked((byte)(value >> 16));
 0108      buffer_[end++] = unchecked((byte)(value >> 24));
 0109    }
 110
 111    /// <summary>
 112    /// Write a block of data to buffer
 113    /// </summary>
 114    /// <param name="block">data to write</param>
 115    /// <param name="offset">offset of first byte to write</param>
 116    /// <param name="length">number of bytes to write</param>
 117    public void WriteBlock(byte[] block, int offset, int length)
 118    {
 119#if DebugDeflation
 120      if (DeflaterConstants.DEBUGGING && (start != 0) )
 121      {
 122        throw new SharpZipBaseException("Debug check: start != 0");
 123      }
 124#endif
 293125      System.Array.Copy(block, offset, buffer_, end, length);
 293126      end += length;
 293127    }
 128
 129    /// <summary>
 130    /// The number of bits written to the buffer
 131    /// </summary>
 132    public int BitCount {
 133      get {
 0134        return bitCount;
 135      }
 136    }
 137
 138    /// <summary>
 139    /// Align internal buffer on a byte boundary
 140    /// </summary>
 141    public void AlignToByte()
 142    {
 143#if DebugDeflation
 144      if (DeflaterConstants.DEBUGGING && (start != 0) )
 145      {
 146        throw new SharpZipBaseException("Debug check: start != 0");
 147      }
 148#endif
 598149       if (bitCount > 0) {
 531150        buffer_[end++] = unchecked((byte)bits);
 531151         if (bitCount > 8) {
 174152          buffer_[end++] = unchecked((byte)(bits >> 8));
 153        }
 154      }
 598155      bits = 0;
 598156      bitCount = 0;
 598157    }
 158
 159    /// <summary>
 160    /// Write bits to internal buffer
 161    /// </summary>
 162    /// <param name="b">source of bits</param>
 163    /// <param name="count">number of bits to write</param>
 164    public void WriteBits(int b, int count)
 165    {
 166#if DebugDeflation
 167      if (DeflaterConstants.DEBUGGING && (start != 0) )
 168      {
 169        throw new SharpZipBaseException("Debug check: start != 0");
 170      }
 171
 172      //      if (DeflaterConstants.DEBUGGING) {
 173      //        //Console.WriteLine("writeBits("+b+","+count+")");
 174      //      }
 175#endif
 8954176      bits |= (uint)(b << bitCount);
 8954177      bitCount += count;
 8954178       if (bitCount >= 16) {
 4181179        buffer_[end++] = unchecked((byte)bits);
 4181180        buffer_[end++] = unchecked((byte)(bits >> 8));
 4181181        bits >>= 16;
 4181182        bitCount -= 16;
 183      }
 8954184    }
 185
 186    /// <summary>
 187    /// Write a short value to internal buffer most significant byte first
 188    /// </summary>
 189    /// <param name="s">value to write</param>
 190    public void WriteShortMSB(int s)
 191    {
 192#if DebugDeflation
 193      if (DeflaterConstants.DEBUGGING && (start != 0) )
 194      {
 195        throw new SharpZipBaseException("Debug check: start != 0");
 196      }
 197#endif
 42198      buffer_[end++] = unchecked((byte)(s >> 8));
 42199      buffer_[end++] = unchecked((byte)s);
 42200    }
 201
 202    /// <summary>
 203    /// Indicates if buffer has been flushed
 204    /// </summary>
 205    public bool IsFlushed {
 206      get {
 10175207        return end == 0;
 208      }
 209    }
 210
 211    /// <summary>
 212    /// Flushes the pending buffer into the given output array.  If the
 213    /// output array is to small, only a partial flush is done.
 214    /// </summary>
 215    /// <param name="output">The output array.</param>
 216    /// <param name="offset">The offset into output array.</param>
 217    /// <param name="length">The maximum number of bytes to store.</param>
 218    /// <returns>The number of bytes flushed.</returns>
 219    public int Flush(byte[] output, int offset, int length)
 220    {
 13248221       if (bitCount >= 8) {
 0222        buffer_[end++] = unchecked((byte)bits);
 0223        bits >>= 8;
 0224        bitCount -= 8;
 225      }
 226
 13248227       if (length > end - start) {
 5183228        length = end - start;
 5183229        System.Array.Copy(buffer_, start, output, offset, length);
 5183230        start = 0;
 5183231        end = 0;
 5183232      } else {
 8065233        System.Array.Copy(buffer_, start, output, offset, length);
 8065234        start += length;
 235      }
 13248236      return length;
 237    }
 238
 239    /// <summary>
 240    /// Convert internal buffer to byte array.
 241    /// Buffer is empty on completion
 242    /// </summary>
 243    /// <returns>
 244    /// The internal buffer contents converted to a byte array.
 245    /// </returns>
 246    public byte[] ToByteArray()
 247    {
 0248      byte[] result = new byte[end - start];
 0249      System.Array.Copy(buffer_, start, result, 0, result.Length);
 0250      start = 0;
 0251      end = 0;
 0252      return result;
 253    }
 254  }
 255}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassic.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassic.htm.REMOVED.git-id new file mode 100644 index 0000000000..b9a28c7916 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassic.htm.REMOVED.git-id @@ -0,0 +1 @@ +cccf63232c909630174797dcfc10d2052e7db878 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicCryptoBase.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicCryptoBase.htm.REMOVED.git-id new file mode 100644 index 0000000000..908f796d7c --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicCryptoBase.htm.REMOVED.git-id @@ -0,0 +1 @@ +b846bbe8d3a667dd6314af914313371b90c20832 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicDecryptCryptoTransform.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicDecryptCryptoTransform.htm.REMOVED.git-id new file mode 100644 index 0000000000..0f5dbfd070 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicDecryptCryptoTransform.htm.REMOVED.git-id @@ -0,0 +1 @@ +ef82a6e096cb0a28abd960b29739ae86f6ee1954 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicEncryptCryptoTransform.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicEncryptCryptoTransform.htm.REMOVED.git-id new file mode 100644 index 0000000000..c55db4391c --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicEncryptCryptoTransform.htm.REMOVED.git-id @@ -0,0 +1 @@ +03a234a440d8fbf6afa884369151ac012892909a \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicManaged.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicManaged.htm.REMOVED.git-id new file mode 100644 index 0000000000..7a87f2eb97 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_PkzipClassicManaged.htm.REMOVED.git-id @@ -0,0 +1 @@ +0db63705dff5eec043034d85cd651e3ad6b1ff75 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ProcessFileHandler.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ProcessFileHandler.htm new file mode 100644 index 0000000000..76a26ebdbd --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ProcessFileHandler.htm @@ -0,0 +1,29 @@ + + + + +ICSharpCode.SharpZipLib.Core.ProcessFileHandler - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.ProcessFileHandler
Assembly:ICSharpCode.SharpZipLib
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
+

File(s)

+

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ProgressEventArgs.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ProgressEventArgs.htm.REMOVED.git-id new file mode 100644 index 0000000000..b22d83cafc --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ProgressEventArgs.htm.REMOVED.git-id @@ -0,0 +1 @@ +00cc0b5b473879775d81b7ad68bacb9eb40c79d6 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ProgressHandler.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ProgressHandler.htm new file mode 100644 index 0000000000..5180ae3a9f --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ProgressHandler.htm @@ -0,0 +1,29 @@ + + + + +ICSharpCode.SharpZipLib.Core.ProgressHandler - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.ProgressHandler
Assembly:ICSharpCode.SharpZipLib
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
+

File(s)

+

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ProgressMessageHandler.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ProgressMessageHandler.htm new file mode 100644 index 0000000000..1d12148d5c --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ProgressMessageHandler.htm @@ -0,0 +1,29 @@ + + + + +ICSharpCode.SharpZipLib.Tar.ProgressMessageHandler - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Tar.ProgressMessageHandler
Assembly:ICSharpCode.SharpZipLib
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
+

File(s)

+

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_RawTaggedData.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_RawTaggedData.htm.REMOVED.git-id new file mode 100644 index 0000000000..67779e36ff --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_RawTaggedData.htm.REMOVED.git-id @@ -0,0 +1 @@ +9585e12fe1e0262bc8e89025d8409cebe5f37649 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ScanEventArgs.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ScanEventArgs.htm.REMOVED.git-id new file mode 100644 index 0000000000..d70cdad95b --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ScanEventArgs.htm.REMOVED.git-id @@ -0,0 +1 @@ +b00a12c010da41b686336f73a6b57ebdd70f161c \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ScanFailureEventArgs.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ScanFailureEventArgs.htm.REMOVED.git-id new file mode 100644 index 0000000000..5df3c6c28b --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ScanFailureEventArgs.htm.REMOVED.git-id @@ -0,0 +1 @@ +13ec860b5e8a934458d9ebe49c83749544ab0bbe \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_SharpZipBaseException.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_SharpZipBaseException.htm new file mode 100644 index 0000000000..986d556ceb --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_SharpZipBaseException.htm @@ -0,0 +1,96 @@ + + + + +ICSharpCode.SharpZipLib.SharpZipBaseException - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.SharpZipBaseException
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\SharpZipBaseException.cs
Covered lines:2
Uncovered lines:6
Coverable lines:8
Total lines:52
Line coverage:25%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor()100
.ctor(...)1100100
.ctor(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\SharpZipBaseException.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.Runtime.Serialization;
 3
 4namespace ICSharpCode.SharpZipLib
 5{
 6  /// <summary>
 7  /// SharpZipBaseException is the base exception class for SharpZipLib.
 8  /// All library exceptions are derived from this.
 9  /// </summary>
 10  /// <remarks>NOTE: Not all exceptions thrown will be derived from this class.
 11  /// A variety of other exceptions are possible for example <see cref="ArgumentNullException"></see></remarks>
 12  [Serializable]
 13  public class SharpZipBaseException : Exception
 14  {
 15    /// <summary>
 16    /// Deserialization constructor
 17    /// </summary>
 18    /// <param name="info"><see cref="System.Runtime.Serialization.SerializationInfo"/> for this constructor</param>
 19    /// <param name="context"><see cref="StreamingContext"/> for this constructor</param>
 20    protected SharpZipBaseException(SerializationInfo info, StreamingContext context)
 021      : base(info, context)
 22    {
 023    }
 24
 25    /// <summary>
 26    /// Initializes a new instance of the SharpZipBaseException class.
 27    /// </summary>
 028    public SharpZipBaseException()
 29    {
 030    }
 31
 32    /// <summary>
 33    /// Initializes a new instance of the SharpZipBaseException class with a specified error message.
 34    /// </summary>
 35    /// <param name="message">A message describing the exception.</param>
 36    public SharpZipBaseException(string message)
 1537      : base(message)
 38    {
 1539    }
 40
 41    /// <summary>
 42    /// Initializes a new instance of the SharpZipBaseException class with a specified
 43    /// error message and a reference to the inner exception that is the cause of this exception.
 44    /// </summary>
 45    /// <param name="message">A message describing the exception.</param>
 46    /// <param name="innerException">The inner exception</param>
 47    public SharpZipBaseException(string message, Exception innerException)
 048      : base(message, innerException)
 49    {
 050    }
 51  }
 52}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_StaticDiskDataSource.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_StaticDiskDataSource.htm.REMOVED.git-id new file mode 100644 index 0000000000..8b02c674c2 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_StaticDiskDataSource.htm.REMOVED.git-id @@ -0,0 +1 @@ +dfb94ee0c5898580acc575f168cf0b30043477ed \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_StreamManipulator.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_StreamManipulator.htm new file mode 100644 index 0000000000..51145b39a0 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_StreamManipulator.htm @@ -0,0 +1,289 @@ + + + + +ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\Streams\StreamManipulator.cs
Covered lines:51
Uncovered lines:12
Coverable lines:63
Total lines:241
Line coverage:80.9%
Branch coverage:67.6%
+

Metrics

+ + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
PeekBits(...)3100100
DropBits(...)1100100
GetBits(...)200
SkipToByteBoundary()1100100
CopyBytes(...)886.3680
Reset()1100100
SetInput(...)872.2260
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\Compression\Streams\StreamManipulator.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2
 3namespace ICSharpCode.SharpZipLib.Zip.Compression.Streams
 4{
 5  /// <summary>
 6  /// This class allows us to retrieve a specified number of bits from
 7  /// the input buffer, as well as copy big byte blocks.
 8  ///
 9  /// It uses an int buffer to store up to 31 bits for direct
 10  /// manipulation.  This guarantees that we can get at least 16 bits,
 11  /// but we only need at most 15, so this is all safe.
 12  ///
 13  /// There are some optimizations in this class, for example, you must
 14  /// never peek more than 8 bits more than needed, and you must first
 15  /// peek bits before you may drop them.  This is not a general purpose
 16  /// class but optimized for the behaviour of the Inflater.
 17  ///
 18  /// authors of the original java version : John Leuner, Jochen Hoenicke
 19  /// </summary>
 20  public class StreamManipulator
 21  {
 22    /// <summary>
 23    /// Get the next sequence of bits but don't increase input pointer.  bitCount must be
 24    /// less or equal 16 and if this call succeeds, you must drop
 25    /// at least n - 8 bits in the next call.
 26    /// </summary>
 27    /// <param name="bitCount">The number of bits to peek.</param>
 28    /// <returns>
 29    /// the value of the bits, or -1 if not enough bits available.  */
 30    /// </returns>
 31    public int PeekBits(int bitCount)
 32    {
 1162033       if (bitsInBuffer_ < bitCount) {
 628734         if (windowStart_ == windowEnd_) {
 39635          return -1; // ok
 36        }
 589137        buffer_ |= (uint)((window_[windowStart_++] & 0xff |
 589138                 (window_[windowStart_++] & 0xff) << 8) << bitsInBuffer_);
 589139        bitsInBuffer_ += 16;
 40      }
 1122441      return (int)(buffer_ & ((1 << bitCount) - 1));
 42    }
 43
 44    /// <summary>
 45    /// Drops the next n bits from the input.  You should have called PeekBits
 46    /// with a bigger or equal n before, to make sure that enough bits are in
 47    /// the bit buffer.
 48    /// </summary>
 49    /// <param name="bitCount">The number of bits to drop.</param>
 50    public void DropBits(int bitCount)
 51    {
 1122452      buffer_ >>= bitCount;
 1122453      bitsInBuffer_ -= bitCount;
 1122454    }
 55
 56    /// <summary>
 57    /// Gets the next n bits and increases input pointer.  This is equivalent
 58    /// to <see cref="PeekBits"/> followed by <see cref="DropBits"/>, except for correct error handling.
 59    /// </summary>
 60    /// <param name="bitCount">The number of bits to retrieve.</param>
 61    /// <returns>
 62    /// the value of the bits, or -1 if not enough bits available.
 63    /// </returns>
 64    public int GetBits(int bitCount)
 65    {
 066      int bits = PeekBits(bitCount);
 067       if (bits >= 0) {
 068        DropBits(bitCount);
 69      }
 070      return bits;
 71    }
 72
 73    /// <summary>
 74    /// Gets the number of bits available in the bit buffer.  This must be
 75    /// only called when a previous PeekBits() returned -1.
 76    /// </summary>
 77    /// <returns>
 78    /// the number of bits available.
 79    /// </returns>
 80    public int AvailableBits {
 81      get {
 2382        return bitsInBuffer_;
 83      }
 84    }
 85
 86    /// <summary>
 87    /// Gets the number of bytes available.
 88    /// </summary>
 89    /// <returns>
 90    /// The number of bytes available.
 91    /// </returns>
 92    public int AvailableBytes {
 93      get {
 232794        return windowEnd_ - windowStart_ + (bitsInBuffer_ >> 3);
 95      }
 96    }
 97
 98    /// <summary>
 99    /// Skips to the next byte boundary.
 100    /// </summary>
 101    public void SkipToByteBoundary()
 102    {
 303103      buffer_ >>= (bitsInBuffer_ & 7);
 303104      bitsInBuffer_ &= ~7;
 303105    }
 106
 107    /// <summary>
 108    /// Returns true when SetInput can be called
 109    /// </summary>
 110    public bool IsNeedingInput {
 111      get {
 3355112        return windowStart_ == windowEnd_;
 113      }
 114    }
 115
 116    /// <summary>
 117    /// Copies bytes from input buffer to output buffer starting
 118    /// at output[offset].  You have to make sure, that the buffer is
 119    /// byte aligned.  If not enough bytes are available, copies fewer
 120    /// bytes.
 121    /// </summary>
 122    /// <param name="output">
 123    /// The buffer to copy bytes to.
 124    /// </param>
 125    /// <param name="offset">
 126    /// The offset in the buffer at which copying starts
 127    /// </param>
 128    /// <param name="length">
 129    /// The length to copy, 0 is allowed.
 130    /// </param>
 131    /// <returns>
 132    /// The number of bytes copied, 0 if no bytes were available.
 133    /// </returns>
 134    /// <exception cref="ArgumentOutOfRangeException">
 135    /// Length is less than zero
 136    /// </exception>
 137    /// <exception cref="InvalidOperationException">
 138    /// Bit buffer isnt byte aligned
 139    /// </exception>
 140    public int CopyBytes(byte[] output, int offset, int length)
 141    {
 2376142       if (length < 0) {
 0143        throw new ArgumentOutOfRangeException(nameof(length));
 144      }
 145
 2376146       if ((bitsInBuffer_ & 7) != 0) {
 147        // bits_in_buffer may only be 0 or a multiple of 8
 0148        throw new InvalidOperationException("Bit buffer is not byte aligned!");
 149      }
 150
 2376151      int count = 0;
 2600152       while ((bitsInBuffer_ > 0) && (length > 0)) {
 224153        output[offset++] = (byte)buffer_;
 224154        buffer_ >>= 8;
 224155        bitsInBuffer_ -= 8;
 224156        length--;
 224157        count++;
 158      }
 159
 2376160       if (length == 0) {
 996161        return count;
 162      }
 163
 1380164      int avail = windowEnd_ - windowStart_;
 1380165       if (length > avail) {
 0166        length = avail;
 167      }
 1380168      System.Array.Copy(window_, windowStart_, output, offset, length);
 1380169      windowStart_ += length;
 170
 1380171       if (((windowStart_ - windowEnd_) & 1) != 0) {
 172        // We always want an even number of bytes in input, see peekBits
 210173        buffer_ = (uint)(window_[windowStart_++] & 0xff);
 210174        bitsInBuffer_ = 8;
 175      }
 1380176      return count + length;
 177    }
 178
 179    /// <summary>
 180    /// Resets state and empties internal buffers
 181    /// </summary>
 182    public void Reset()
 183    {
 41184      buffer_ = 0;
 41185      windowStart_ = windowEnd_ = bitsInBuffer_ = 0;
 41186    }
 187
 188    /// <summary>
 189    /// Add more input for consumption.
 190    /// Only call when IsNeedingInput returns true
 191    /// </summary>
 192    /// <param name="buffer">data to be input</param>
 193    /// <param name="offset">offset of first byte of input</param>
 194    /// <param name="count">number of bytes of input to add.</param>
 195    public void SetInput(byte[] buffer, int offset, int count)
 196    {
 1433197       if (buffer == null) {
 0198        throw new ArgumentNullException(nameof(buffer));
 199      }
 200
 1433201       if (offset < 0) {
 0202        throw new ArgumentOutOfRangeException(nameof(offset), "Cannot be negative");
 203      }
 204
 1433205       if (count < 0) {
 0206        throw new ArgumentOutOfRangeException(nameof(count), "Cannot be negative");
 207      }
 208
 1433209       if (windowStart_ < windowEnd_) {
 0210        throw new InvalidOperationException("Old input was not completely processed");
 211      }
 212
 1433213      int end = offset + count;
 214
 215      // We want to throw an ArrayIndexOutOfBoundsException early.
 216      // Note the check also handles integer wrap around.
 1433217       if ((offset > end) || (end > buffer.Length)) {
 0218        throw new ArgumentOutOfRangeException(nameof(count));
 219      }
 220
 1433221       if ((count & 1) != 0) {
 222        // We always want an even number of bytes in input, see PeekBits
 214223        buffer_ |= (uint)((buffer[offset++] & 0xff) << bitsInBuffer_);
 214224        bitsInBuffer_ += 8;
 225      }
 226
 1433227      window_ = buffer;
 1433228      windowStart_ = offset;
 1433229      windowEnd_ = end;
 1433230    }
 231
 232    #region Instance Fields
 233    private byte[] window_;
 234    private int windowStart_;
 235    private int windowEnd_;
 236
 237    private uint buffer_;
 238    private int bitsInBuffer_;
 239    #endregion
 240  }
 241}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_StreamUtils.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_StreamUtils.htm new file mode 100644 index 0000000000..dbc5102fb9 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_StreamUtils.htm @@ -0,0 +1,255 @@ + + + + +ICSharpCode.SharpZipLib.Core.StreamUtils - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.StreamUtils
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\StreamUtils.cs
Covered lines:25
Uncovered lines:53
Coverable lines:78
Total lines:208
Line coverage:32%
Branch coverage:34%
+

Metrics

+ + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
ReadFully(...)1100100
ReadFully(...)966.6758.82
Copy(...)776.4769.23
Copy(...)100
Copy(...)1200
.ctor()100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\StreamUtils.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.IO;
 3
 4namespace ICSharpCode.SharpZipLib.Core
 5{
 6  /// <summary>
 7  /// Provides simple <see cref="Stream"/>" utilities.
 8  /// </summary>
 9  public sealed class StreamUtils
 10  {
 11    /// <summary>
 12    /// Read from a <see cref="Stream"/> ensuring all the required data is read.
 13    /// </summary>
 14    /// <param name="stream">The stream to read.</param>
 15    /// <param name="buffer">The buffer to fill.</param>
 16    /// <seealso cref="ReadFully(Stream,byte[],int,int)"/>
 17    static public void ReadFully(Stream stream, byte[] buffer)
 18    {
 26378919      ReadFully(stream, buffer, 0, buffer.Length);
 26378920    }
 21
 22    /// <summary>
 23    /// Read from a <see cref="Stream"/>" ensuring all the required data is read.
 24    /// </summary>
 25    /// <param name="stream">The stream to read data from.</param>
 26    /// <param name="buffer">The buffer to store data in.</param>
 27    /// <param name="offset">The offset at which to begin storing data.</param>
 28    /// <param name="count">The number of bytes of data to store.</param>
 29    /// <exception cref="ArgumentNullException">Required parameter is null</exception>
 30    /// <exception cref="ArgumentOutOfRangeException"><paramref name="offset"/> and or <paramref name="count"/> are inva
 31    /// <exception cref="EndOfStreamException">End of stream is encountered before all the data has been read.</exceptio
 32    static public void ReadFully(Stream stream, byte[] buffer, int offset, int count)
 33    {
 32974534       if (stream == null) {
 035        throw new ArgumentNullException(nameof(stream));
 36      }
 37
 32974538       if (buffer == null) {
 039        throw new ArgumentNullException(nameof(buffer));
 40      }
 41
 42      // Offset can equal length when buffer and count are 0.
 32974543       if ((offset < 0) || (offset > buffer.Length)) {
 044        throw new ArgumentOutOfRangeException(nameof(offset));
 45      }
 46
 32974547       if ((count < 0) || (offset + count > buffer.Length)) {
 048        throw new ArgumentOutOfRangeException(nameof(count));
 49      }
 50
 52767851       while (count > 0) {
 19793352        int readCount = stream.Read(buffer, offset, count);
 19793353         if (readCount <= 0) {
 054          throw new EndOfStreamException();
 55        }
 19793356        offset += readCount;
 19793357        count -= readCount;
 58      }
 32974559    }
 60
 61    /// <summary>
 62    /// Copy the contents of one <see cref="Stream"/> to another.
 63    /// </summary>
 64    /// <param name="source">The stream to source data from.</param>
 65    /// <param name="destination">The stream to write data to.</param>
 66    /// <param name="buffer">The buffer to use during copying.</param>
 67    static public void Copy(Stream source, Stream destination, byte[] buffer)
 68    {
 869       if (source == null) {
 070        throw new ArgumentNullException(nameof(source));
 71      }
 72
 873       if (destination == null) {
 074        throw new ArgumentNullException(nameof(destination));
 75      }
 76
 877       if (buffer == null) {
 078        throw new ArgumentNullException(nameof(buffer));
 79      }
 80
 81      // Ensure a reasonable size of buffer is used without being prohibitive.
 882       if (buffer.Length < 128) {
 083        throw new ArgumentException("Buffer is too small", nameof(buffer));
 84      }
 85
 886      bool copying = true;
 87
 2488       while (copying) {
 1689        int bytesRead = source.Read(buffer, 0, buffer.Length);
 1690         if (bytesRead > 0) {
 891          destination.Write(buffer, 0, bytesRead);
 892        } else {
 893          destination.Flush();
 894          copying = false;
 95        }
 96      }
 897    }
 98
 99    /// <summary>
 100    /// Copy the contents of one <see cref="Stream"/> to another.
 101    /// </summary>
 102    /// <param name="source">The stream to source data from.</param>
 103    /// <param name="destination">The stream to write data to.</param>
 104    /// <param name="buffer">The buffer to use during copying.</param>
 105    /// <param name="progressHandler">The <see cref="ProgressHandler">progress handler delegate</see> to use.</param>
 106    /// <param name="updateInterval">The minimum <see cref="TimeSpan"/> between progress updates.</param>
 107    /// <param name="sender">The source for this event.</param>
 108    /// <param name="name">The name to use with the event.</param>
 109    /// <remarks>This form is specialised for use within #Zip to support events during archive operations.</remarks>
 110    static public void Copy(Stream source, Stream destination,
 111      byte[] buffer, ProgressHandler progressHandler, TimeSpan updateInterval, object sender, string name)
 112    {
 0113      Copy(source, destination, buffer, progressHandler, updateInterval, sender, name, -1);
 0114    }
 115
 116    /// <summary>
 117    /// Copy the contents of one <see cref="Stream"/> to another.
 118    /// </summary>
 119    /// <param name="source">The stream to source data from.</param>
 120    /// <param name="destination">The stream to write data to.</param>
 121    /// <param name="buffer">The buffer to use during copying.</param>
 122    /// <param name="progressHandler">The <see cref="ProgressHandler">progress handler delegate</see> to use.</param>
 123    /// <param name="updateInterval">The minimum <see cref="TimeSpan"/> between progress updates.</param>
 124    /// <param name="sender">The source for this event.</param>
 125    /// <param name="name">The name to use with the event.</param>
 126    /// <param name="fixedTarget">A predetermined fixed target value to use with progress updates.
 127    /// If the value is negative the target is calculated by looking at the stream.</param>
 128    /// <remarks>This form is specialised for use within #Zip to support events during archive operations.</remarks>
 129    static public void Copy(Stream source, Stream destination,
 130      byte[] buffer,
 131      ProgressHandler progressHandler, TimeSpan updateInterval,
 132      object sender, string name, long fixedTarget)
 133    {
 0134       if (source == null) {
 0135        throw new ArgumentNullException(nameof(source));
 136      }
 137
 0138       if (destination == null) {
 0139        throw new ArgumentNullException(nameof(destination));
 140      }
 141
 0142       if (buffer == null) {
 0143        throw new ArgumentNullException(nameof(buffer));
 144      }
 145
 146      // Ensure a reasonable size of buffer is used without being prohibitive.
 0147       if (buffer.Length < 128) {
 0148        throw new ArgumentException("Buffer is too small", nameof(buffer));
 149      }
 150
 0151       if (progressHandler == null) {
 0152        throw new ArgumentNullException(nameof(progressHandler));
 153      }
 154
 0155      bool copying = true;
 156
 0157      DateTime marker = DateTime.Now;
 0158      long processed = 0;
 0159      long target = 0;
 160
 0161       if (fixedTarget >= 0) {
 0162        target = fixedTarget;
 0163       } else if (source.CanSeek) {
 0164        target = source.Length - source.Position;
 165      }
 166
 167      // Always fire 0% progress..
 0168      var args = new ProgressEventArgs(name, processed, target);
 0169      progressHandler(sender, args);
 170
 0171      bool progressFired = true;
 172
 0173       while (copying) {
 0174        int bytesRead = source.Read(buffer, 0, buffer.Length);
 0175         if (bytesRead > 0) {
 0176          processed += bytesRead;
 0177          progressFired = false;
 0178          destination.Write(buffer, 0, bytesRead);
 0179        } else {
 0180          destination.Flush();
 0181          copying = false;
 182        }
 183
 0184         if (DateTime.Now - marker > updateInterval) {
 0185          progressFired = true;
 0186          marker = DateTime.Now;
 0187          args = new ProgressEventArgs(name, processed, target);
 0188          progressHandler(sender, args);
 189
 0190          copying = args.ContinueRunning;
 191        }
 192      }
 193
 0194       if (!progressFired) {
 0195        args = new ProgressEventArgs(name, processed, target);
 0196        progressHandler(sender, args);
 197      }
 0198    }
 199
 200    /// <summary>
 201    /// Initialise an instance of <see cref="StreamUtils"></see>
 202    /// </summary>
 0203    private StreamUtils()
 204    {
 205      // Do nothing.
 0206    }
 207  }
 208}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarArchive.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarArchive.htm.REMOVED.git-id new file mode 100644 index 0000000000..b12d836155 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarArchive.htm.REMOVED.git-id @@ -0,0 +1 @@ +c29f4984725012728c5d4f66246836ac45193fa1 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarBuffer.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarBuffer.htm.REMOVED.git-id new file mode 100644 index 0000000000..55722fa1e9 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarBuffer.htm.REMOVED.git-id @@ -0,0 +1 @@ +dc727f8d1647243b4dc22ba687f9fa6bda0997e8 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarEntry.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarEntry.htm.REMOVED.git-id new file mode 100644 index 0000000000..49a16032a1 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarEntry.htm.REMOVED.git-id @@ -0,0 +1 @@ +6c370704bec2768901094ae6a9c20fdd0a61443c \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarException.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarException.htm new file mode 100644 index 0000000000..36647d0783 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarException.htm @@ -0,0 +1,92 @@ + + + + +ICSharpCode.SharpZipLib.Tar.TarException - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Tar.TarException
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\TarException.cs
Covered lines:2
Uncovered lines:6
Coverable lines:8
Total lines:48
Line coverage:25%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor()100
.ctor(...)1100100
.ctor(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Tar\TarException.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.Runtime.Serialization;
 3
 4namespace ICSharpCode.SharpZipLib.Tar
 5{
 6  /// <summary>
 7  /// TarException represents exceptions specific to Tar classes and code.
 8  /// </summary>
 9  [Serializable]
 10  public class TarException : SharpZipBaseException
 11  {
 12    /// <summary>
 13    /// Deserialization constructor
 14    /// </summary>
 15    /// <param name="info"><see cref="SerializationInfo"/> for this constructor</param>
 16    /// <param name="context"><see cref="StreamingContext"/> for this constructor</param>
 17    protected TarException(SerializationInfo info, StreamingContext context)
 018      : base(info, context)
 19    {
 020    }
 21
 22    /// <summary>
 23    /// Initialise a new instance of <see cref="TarException" />.
 24    /// </summary>
 025    public TarException()
 26    {
 027    }
 28
 29    /// <summary>
 30    /// Initialise a new instance of <see cref="TarException" /> with its message string.
 31    /// </summary>
 32    /// <param name="message">A <see cref="string"/> that describes the error.</param>
 33    public TarException(string message)
 134      : base(message)
 35    {
 136    }
 37
 38    /// <summary>
 39    /// Initialise a new instance of <see cref="TarException" />.
 40    /// </summary>
 41    /// <param name="message">A <see cref="string"/> that describes the error.</param>
 42    /// <param name="innerException">The <see cref="Exception"/> that caused this exception.</param>
 43    public TarException(string message, Exception innerException)
 044      : base(message, innerException)
 45    {
 046    }
 47  }
 48}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarHeader.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarHeader.htm.REMOVED.git-id new file mode 100644 index 0000000000..8f3f9e3d0e --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarHeader.htm.REMOVED.git-id @@ -0,0 +1 @@ +0b6d2fa9a8851088dc7c84f08c6d2f19b7858ca7 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarInputStream.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarInputStream.htm.REMOVED.git-id new file mode 100644 index 0000000000..4a395d9214 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarInputStream.htm.REMOVED.git-id @@ -0,0 +1 @@ +2c6cec30a84c95969398dccc23c7ce68d88502b2 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarOutputStream.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarOutputStream.htm.REMOVED.git-id new file mode 100644 index 0000000000..42106009d0 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TarOutputStream.htm.REMOVED.git-id @@ -0,0 +1 @@ +7cf123c3afc46049982fdacec67b374d86617a35 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TestStatus.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TestStatus.htm.REMOVED.git-id new file mode 100644 index 0000000000..6f0123f5aa --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_TestStatus.htm.REMOVED.git-id @@ -0,0 +1 @@ +dca53c13e0bc39dfc0dcc731bf397dae561b36b7 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_WindowsNameTransform.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_WindowsNameTransform.htm new file mode 100644 index 0000000000..ff2ab33ca6 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_WindowsNameTransform.htm @@ -0,0 +1,274 @@ + + + + +ICSharpCode.SharpZipLib.Zip.WindowsNameTransform - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.WindowsNameTransform
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\WindowsNameTransform.cs
Covered lines:42
Uncovered lines:35
Coverable lines:77
Total lines:226
Line coverage:54.5%
Branch coverage:42.8%
+

Metrics

+ + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)283.3366.67
.ctor()1100100
TransformDirectory(...)371.4360
TransformFile(...)477.7871.43
IsValidName(...)300
.cctor()1100100
MakeValidName(...)115052.38
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\WindowsNameTransform.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.IO;
 3using System.Text;
 4using ICSharpCode.SharpZipLib.Core;
 5
 6namespace ICSharpCode.SharpZipLib.Zip
 7{
 8  /// <summary>
 9  /// WindowsNameTransform transforms <see cref="ZipFile"/> names to windows compatible ones.
 10  /// </summary>
 11  public class WindowsNameTransform : INameTransform
 12  {
 13    /// <summary>
 14    /// Initialises a new instance of <see cref="WindowsNameTransform"/>
 15    /// </summary>
 16    /// <param name="baseDirectory"></param>
 117    public WindowsNameTransform(string baseDirectory)
 18    {
 119       if (baseDirectory == null) {
 020        throw new ArgumentNullException(nameof(baseDirectory), "Directory name is invalid");
 21      }
 22
 123      BaseDirectory = baseDirectory;
 124    }
 25
 26    /// <summary>
 27    /// Initialise a default instance of <see cref="WindowsNameTransform"/>
 28    /// </summary>
 229    public WindowsNameTransform()
 30    {
 31      // Do nothing.
 232    }
 33
 34    /// <summary>
 35    /// Gets or sets a value containing the target directory to prefix values with.
 36    /// </summary>
 37    public string BaseDirectory {
 038      get { return _baseDirectory; }
 39      set {
 140         if (value == null) {
 041          throw new ArgumentNullException(nameof(value));
 42        }
 43
 144        _baseDirectory = Path.GetFullPath(value);
 145      }
 46    }
 47
 48    /// <summary>
 49    /// Gets or sets a value indicating wether paths on incoming values should be removed.
 50    /// </summary>
 51    public bool TrimIncomingPaths {
 052      get { return _trimIncomingPaths; }
 053      set { _trimIncomingPaths = value; }
 54    }
 55
 56    /// <summary>
 57    /// Transform a Zip directory name to a windows directory name.
 58    /// </summary>
 59    /// <param name="name">The directory name to transform.</param>
 60    /// <returns>The transformed name.</returns>
 61    public string TransformDirectory(string name)
 62    {
 363      name = TransformFile(name);
 264       if (name.Length > 0) {
 265         while (name.EndsWith(Path.DirectorySeparatorChar.ToString(), StringComparison.Ordinal)) {
 066          name = name.Remove(name.Length - 1, 1);
 67        }
 268      } else {
 069        throw new ZipException("Cannot have an empty directory name");
 70      }
 271      return name;
 72    }
 73
 74    /// <summary>
 75    /// Transform a Zip format file name to a windows style one.
 76    /// </summary>
 77    /// <param name="name">The file name to transform.</param>
 78    /// <returns>The transformed name.</returns>
 79    public string TransformFile(string name)
 80    {
 381       if (name != null) {
 382        name = MakeValidName(name, _replacementChar);
 83
 284         if (_trimIncomingPaths) {
 085          name = Path.GetFileName(name);
 86        }
 87
 88        // This may exceed windows length restrictions.
 89        // Combine will throw a PathTooLongException in that case.
 290         if (_baseDirectory != null) {
 191          name = Path.Combine(_baseDirectory, name);
 92        }
 193      } else {
 094        name = string.Empty;
 95      }
 296      return name;
 97    }
 98
 99    /// <summary>
 100    /// Test a name to see if it is a valid name for a windows filename as extracted from a Zip archive.
 101    /// </summary>
 102    /// <param name="name">The name to test.</param>
 103    /// <returns>Returns true if the name is a valid zip name; false otherwise.</returns>
 104    /// <remarks>The filename isnt a true windows path in some fundamental ways like no absolute paths, no rooted paths 
 105    public static bool IsValidName(string name)
 106    {
 0107      bool result =
 0108        (name != null) &&
 0109        (name.Length <= MaxPath) &&
 0110        (string.Compare(name, MakeValidName(name, '_'), StringComparison.Ordinal) == 0)
 0111        ;
 112
 0113      return result;
 114    }
 115
 116    /// <summary>
 117    /// Initialise static class information.
 118    /// </summary>
 119    static WindowsNameTransform()
 120    {
 121      char[] invalidPathChars;
 122
 1123      invalidPathChars = Path.GetInvalidPathChars();
 1124      int howMany = invalidPathChars.Length + 3;
 125
 1126      InvalidEntryChars = new char[howMany];
 1127      Array.Copy(invalidPathChars, 0, InvalidEntryChars, 0, invalidPathChars.Length);
 1128      InvalidEntryChars[howMany - 1] = '*';
 1129      InvalidEntryChars[howMany - 2] = '?';
 1130      InvalidEntryChars[howMany - 3] = ':';
 1131    }
 132
 133    /// <summary>
 134    /// Force a name to be valid by replacing invalid characters with a fixed value
 135    /// </summary>
 136    /// <param name="name">The name to make valid</param>
 137    /// <param name="replacement">The replacement character to use for any invalid characters.</param>
 138    /// <returns>Returns a valid name</returns>
 139    public static string MakeValidName(string name, char replacement)
 140    {
 3141       if (name == null) {
 0142        throw new ArgumentNullException(nameof(name));
 143      }
 144
 3145      name = WindowsPathUtils.DropPathRoot(name.Replace("/", Path.DirectorySeparatorChar.ToString()));
 146
 147      // Drop any leading slashes.
 3148       while ((name.Length > 0) && (name[0] == Path.DirectorySeparatorChar)) {
 0149        name = name.Remove(0, 1);
 150      }
 151
 152      // Drop any trailing slashes.
 4153       while ((name.Length > 0) && (name[name.Length - 1] == Path.DirectorySeparatorChar)) {
 1154        name = name.Remove(name.Length - 1, 1);
 155      }
 156
 157      // Convert consecutive \\ characters to \
 3158      int index = name.IndexOf(string.Format("{0}{0}", Path.DirectorySeparatorChar), StringComparison.Ordinal);
 3159       while (index >= 0) {
 0160        name = name.Remove(index, 1);
 0161        index = name.IndexOf(Path.DirectorySeparatorChar);
 162      }
 163
 164      // Convert any invalid characters using the replacement one.
 3165      index = name.IndexOfAny(InvalidEntryChars);
 3166       if (index >= 0) {
 0167        var builder = new StringBuilder(name);
 168
 0169         while (index >= 0) {
 0170          builder[index] = replacement;
 171
 0172           if (index >= name.Length) {
 0173            index = -1;
 0174          } else {
 0175            index = name.IndexOfAny(InvalidEntryChars, index + 1);
 176          }
 177        }
 0178        name = builder.ToString();
 179      }
 180
 181      // Check for names greater than MaxPath characters.
 182      // TODO: Were is CLR version of MaxPath defined?  Can't find it in Environment.
 3183       if (name.Length > MaxPath) {
 1184        throw new PathTooLongException();
 185      }
 186
 2187      return name;
 188    }
 189
 190    /// <summary>
 191    /// Gets or set the character to replace invalid characters during transformations.
 192    /// </summary>
 193    public char Replacement {
 0194      get { return _replacementChar; }
 195      set {
 0196         for (int i = 0; i < InvalidEntryChars.Length; ++i) {
 0197           if (InvalidEntryChars[i] == value) {
 0198            throw new ArgumentException("invalid path character");
 199          }
 200        }
 201
 0202         if ((value == Path.DirectorySeparatorChar) || (value == Path.AltDirectorySeparatorChar)) {
 0203          throw new ArgumentException("invalid replacement character");
 204        }
 205
 0206        _replacementChar = value;
 0207      }
 208    }
 209
 210    /// <summary>
 211    ///  The maximum windows path name permitted.
 212    /// </summary>
 213    /// <remarks>This may not valid for all windows systems - CE?, etc but I cant find the equivalent in the CLR.</remar
 214    const int MaxPath = 260;
 215
 216    #region Instance Fields
 217    string _baseDirectory;
 218    bool _trimIncomingPaths;
 3219    char _replacementChar = '_';
 220    #endregion
 221
 222    #region Class Fields
 223    static readonly char[] InvalidEntryChars;
 224    #endregion
 225  }
 226}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_WindowsPathUtils.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_WindowsPathUtils.htm new file mode 100644 index 0000000000..28022755ea --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_WindowsPathUtils.htm @@ -0,0 +1,100 @@ + + + + +ICSharpCode.SharpZipLib.Core.WindowsPathUtils - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Core.WindowsPathUtils
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\WindowsPathUtils.cs
Covered lines:19
Uncovered lines:3
Coverable lines:22
Total lines:57
Line coverage:86.3%
Branch coverage:76.6%
+

Metrics

+ + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()100
DropPathRoot(...)179077.42
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Core\WindowsPathUtils.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1namespace ICSharpCode.SharpZipLib.Core
 2{
 3  /// <summary>
 4  /// WindowsPathUtils provides simple utilities for handling windows paths.
 5  /// </summary>
 6  public abstract class WindowsPathUtils
 7  {
 8    /// <summary>
 9    /// Initializes a new instance of the <see cref="WindowsPathUtils"/> class.
 10    /// </summary>
 011    internal WindowsPathUtils()
 12    {
 013    }
 14
 15    /// <summary>
 16    /// Remove any path root present in the path
 17    /// </summary>
 18    /// <param name="path">A <see cref="string"/> containing path information.</param>
 19    /// <returns>The path with the root removed if it was present; path otherwise.</returns>
 20    /// <remarks>Unlike the <see cref="System.IO.Path"/> class the path isnt otherwise checked for validity.</remarks>
 21    public static string DropPathRoot(string path)
 22    {
 6593023      string result = path;
 24
 6593025       if (!string.IsNullOrEmpty(path)) {
 6593026         if ((path[0] == '\\') || (path[0] == '/')) {
 27          // UNC name ?
 628           if ((path.Length > 1) && ((path[1] == '\\') || (path[1] == '/'))) {
 129            int index = 2;
 130            int elements = 2;
 31
 32            // Scan for two separate elements \\machine\share\restofpath
 1133             while ((index <= path.Length) &&
 1134              (((path[index] != '\\') && (path[index] != '/')) || (--elements > 0))) {
 1035              index++;
 36            }
 37
 138            index++;
 39
 140             if (index < path.Length) {
 141              result = path.Substring(index);
 142            } else {
 043              result = "";
 44            }
 45          }
 6592446         } else if ((path.Length > 1) && (path[1] == ':')) {
 1047          int dropCount = 2;
 1048           if ((path.Length > 2) && ((path[2] == '\\') || (path[2] == '/'))) {
 949            dropCount = 3;
 50          }
 1051          result = result.Remove(0, dropCount);
 52        }
 53      }
 6593054      return result;
 55    }
 56  }
 57}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipAESStream.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipAESStream.htm new file mode 100644 index 0000000000..a93ed14621 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipAESStream.htm @@ -0,0 +1,178 @@ + + + + +ICSharpCode.SharpZipLib.Encryption.ZipAESStream - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Encryption.ZipAESStream
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Encryption\ZipAESStream.cs
Covered lines:0
Uncovered lines:50
Coverable lines:50
Total lines:134
Line coverage:0%
Branch coverage:0%
+

Metrics

+ + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)200
Read(...)900
Write(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Encryption\ZipAESStream.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.IO;
 3using System.Security.Cryptography;
 4
 5namespace ICSharpCode.SharpZipLib.Encryption
 6{
 7  /// <summary>
 8  /// Encrypts and decrypts AES ZIP
 9  /// </summary>
 10  /// <remarks>
 11  /// Based on information from http://www.winzip.com/aes_info.htm
 12  /// and http://www.gladman.me.uk/cryptography_technology/fileencrypt/
 13  /// </remarks>
 14  internal class ZipAESStream : CryptoStream
 15  {
 16
 17    /// <summary>
 18    /// Constructor
 19    /// </summary>
 20    /// <param name="stream">The stream on which to perform the cryptographic transformation.</param>
 21    /// <param name="transform">Instance of ZipAESTransform</param>
 22    /// <param name="mode">Read or Write</param>
 23    public ZipAESStream(Stream stream, ZipAESTransform transform, CryptoStreamMode mode)
 024      : base(stream, transform, mode)
 25    {
 26
 027      _stream = stream;
 028      _transform = transform;
 029      _slideBuffer = new byte[1024];
 30
 031      _blockAndAuth = CRYPTO_BLOCK_SIZE + AUTH_CODE_LENGTH;
 32
 33      // mode:
 34      //  CryptoStreamMode.Read means we read from "stream" and pass decrypted to our Read() method.
 35      //  Write bypasses this stream and uses the Transform directly.
 036       if (mode != CryptoStreamMode.Read) {
 037        throw new Exception("ZipAESStream only for read");
 38      }
 039    }
 40
 41    // The final n bytes of the AES stream contain the Auth Code.
 42    private const int AUTH_CODE_LENGTH = 10;
 43
 44    private Stream _stream;
 45    private ZipAESTransform _transform;
 46    private byte[] _slideBuffer;
 47    private int _slideBufStartPos;
 48    private int _slideBufFreePos;
 49    // Blocksize is always 16 here, even for AES-256 which has transform.InputBlockSize of 32.
 50    private const int CRYPTO_BLOCK_SIZE = 16;
 51    private int _blockAndAuth;
 52
 53    /// <summary>
 54    /// Reads a sequence of bytes from the current CryptoStream into buffer,
 55    /// and advances the position within the stream by the number of bytes read.
 56    /// </summary>
 57    public override int Read(byte[] buffer, int offset, int count)
 58    {
 059      int nBytes = 0;
 060       while (nBytes < count) {
 61        // Calculate buffer quantities vs read-ahead size, and check for sufficient free space
 062        int byteCount = _slideBufFreePos - _slideBufStartPos;
 63
 64        // Need to handle final block and Auth Code specially, but don't know total data length.
 65        // Maintain a read-ahead equal to the length of (crypto block + Auth Code).
 66        // When that runs out we can detect these final sections.
 067        int lengthToRead = _blockAndAuth - byteCount;
 068         if (_slideBuffer.Length - _slideBufFreePos < lengthToRead) {
 69          // Shift the data to the beginning of the buffer
 070          int iTo = 0;
 071           for (int iFrom = _slideBufStartPos; iFrom < _slideBufFreePos; iFrom++, iTo++) {
 072            _slideBuffer[iTo] = _slideBuffer[iFrom];
 73          }
 074          _slideBufFreePos -= _slideBufStartPos;      // Note the -=
 075          _slideBufStartPos = 0;
 76        }
 077        int obtained = _stream.Read(_slideBuffer, _slideBufFreePos, lengthToRead);
 078        _slideBufFreePos += obtained;
 79
 80        // Recalculate how much data we now have
 081        byteCount = _slideBufFreePos - _slideBufStartPos;
 082         if (byteCount >= _blockAndAuth) {
 83          // At least a 16 byte block and an auth code remains.
 084          _transform.TransformBlock(_slideBuffer,
 085                        _slideBufStartPos,
 086                        CRYPTO_BLOCK_SIZE,
 087                        buffer,
 088                        offset);
 089          nBytes += CRYPTO_BLOCK_SIZE;
 090          offset += CRYPTO_BLOCK_SIZE;
 091          _slideBufStartPos += CRYPTO_BLOCK_SIZE;
 092        } else {
 93          // Last round.
 094           if (byteCount > AUTH_CODE_LENGTH) {
 95            // At least one byte of data plus auth code
 096            int finalBlock = byteCount - AUTH_CODE_LENGTH;
 097            _transform.TransformBlock(_slideBuffer,
 098                          _slideBufStartPos,
 099                          finalBlock,
 0100                          buffer,
 0101                          offset);
 102
 0103            nBytes += finalBlock;
 0104            _slideBufStartPos += finalBlock;
 0105           } else if (byteCount < AUTH_CODE_LENGTH)
 0106            throw new Exception("Internal error missed auth code"); // Coding bug
 107                                        // Final block done. Check Auth code.
 0108          byte[] calcAuthCode = _transform.GetAuthCode();
 0109           for (int i = 0; i < AUTH_CODE_LENGTH; i++) {
 0110             if (calcAuthCode[i] != _slideBuffer[_slideBufStartPos + i]) {
 0111              throw new Exception("AES Authentication Code does not match. This is a super-CRC check on the data in the 
 0112                + "The file may be damaged.");
 113            }
 114          }
 115
 0116          break;  // Reached the auth code
 117        }
 118      }
 0119      return nBytes;
 120    }
 121
 122    /// <summary>
 123    /// Writes a sequence of bytes to the current stream and advances the current position within this stream by the num
 124    /// </summary>
 125    /// <param name="buffer">An array of bytes. This method copies count bytes from buffer to the current stream. </para
 126    /// <param name="offset">The byte offset in buffer at which to begin copying bytes to the current stream. </param>
 127    /// <param name="count">The number of bytes to be written to the current stream. </param>
 128    public override void Write(byte[] buffer, int offset, int count)
 129    {
 130      // ZipAESStream is used for reading but not for writing. Writing uses the ZipAESTransform directly.
 0131      throw new NotImplementedException();
 132    }
 133  }
 134}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipAESTransform.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipAESTransform.htm new file mode 100644 index 0000000000..d02a5f9508 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipAESTransform.htm @@ -0,0 +1,229 @@ + + + + +ICSharpCode.SharpZipLib.Encryption.ZipAESTransform - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Encryption.ZipAESTransform
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Encryption\ZipAESTransform.cs
Covered lines:0
Uncovered lines:47
Coverable lines:47
Total lines:183
Line coverage:0%
Branch coverage:0%
+

Metrics

+ + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)400
TransformBlock(...)600
GetAuthCode()200
TransformFinalBlock(...)100
Dispose()100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Encryption\ZipAESTransform.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.Security.Cryptography;
 3
 4namespace ICSharpCode.SharpZipLib.Encryption
 5{
 6  /// <summary>
 7  /// Transforms stream using AES in CTR mode
 8  /// </summary>
 9  internal class ZipAESTransform : ICryptoTransform
 10  {
 11    private const int PWD_VER_LENGTH = 2;
 12
 13    // WinZip use iteration count of 1000 for PBKDF2 key generation
 14    private const int KEY_ROUNDS = 1000;
 15
 16    // For 128-bit AES (16 bytes) the encryption is implemented as expected.
 17    // For 256-bit AES (32 bytes) WinZip do full 256 bit AES of the nonce to create the encryption
 18    // block but use only the first 16 bytes of it, and discard the second half.
 19    private const int ENCRYPT_BLOCK = 16;
 20
 21    private int _blockSize;
 22    private readonly ICryptoTransform _encryptor;
 23    private readonly byte[] _counterNonce;
 24    private byte[] _encryptBuffer;
 25    private int _encrPos;
 26    private byte[] _pwdVerifier;
 27    private HMACSHA1 _hmacsha1;
 28    private bool _finalised;
 29
 30    private bool _writeMode;
 31
 32    /// <summary>
 33    /// Constructor.
 34    /// </summary>
 35    /// <param name="key">Password string</param>
 36    /// <param name="saltBytes">Random bytes, length depends on encryption strength.
 37    /// 128 bits = 8 bytes, 192 bits = 12 bytes, 256 bits = 16 bytes.</param>
 38    /// <param name="blockSize">The encryption strength, in bytes eg 16 for 128 bits.</param>
 39    /// <param name="writeMode">True when creating a zip, false when reading. For the AuthCode.</param>
 40    ///
 041    public ZipAESTransform(string key, byte[] saltBytes, int blockSize, bool writeMode)
 42    {
 43
 044       if (blockSize != 16 && blockSize != 32) // 24 valid for AES but not supported by Winzip
 045        throw new Exception("Invalid blocksize " + blockSize + ". Must be 16 or 32.");
 046       if (saltBytes.Length != blockSize / 2)
 047        throw new Exception("Invalid salt len. Must be " + blockSize / 2 + " for blocksize " + blockSize);
 48      // initialise the encryption buffer and buffer pos
 049      _blockSize = blockSize;
 050      _encryptBuffer = new byte[_blockSize];
 051      _encrPos = ENCRYPT_BLOCK;
 52
 53      // Performs the equivalent of derive_key in Dr Brian Gladman's pwd2key.c
 054      var pdb = new Rfc2898DeriveBytes(key, saltBytes, KEY_ROUNDS);
 055      var rm = new RijndaelManaged();
 056      rm.Mode = CipherMode.ECB;           // No feedback from cipher for CTR mode
 057      _counterNonce = new byte[_blockSize];
 058      byte[] byteKey1 = pdb.GetBytes(_blockSize);
 059      byte[] byteKey2 = pdb.GetBytes(_blockSize);
 060      _encryptor = rm.CreateEncryptor(byteKey1, byteKey2);
 061      _pwdVerifier = pdb.GetBytes(PWD_VER_LENGTH);
 62      //
 063      _hmacsha1 = new HMACSHA1(byteKey2);
 064      _writeMode = writeMode;
 065    }
 66
 67    /// <summary>
 68    /// Implement the ICryptoTransform method.
 69    /// </summary>
 70    public int TransformBlock(byte[] inputBuffer, int inputOffset, int inputCount, byte[] outputBuffer, int outputOffset
 71    {
 72
 73      // Pass the data stream to the hash algorithm for generating the Auth Code.
 74      // This does not change the inputBuffer. Do this before decryption for read mode.
 075       if (!_writeMode) {
 076        _hmacsha1.TransformBlock(inputBuffer, inputOffset, inputCount, inputBuffer, inputOffset);
 77      }
 78      // Encrypt with AES in CTR mode. Regards to Dr Brian Gladman for this.
 079      int ix = 0;
 080       while (ix < inputCount) {
 081         if (_encrPos == ENCRYPT_BLOCK) {
 82          /* increment encryption nonce   */
 083          int j = 0;
 084           while (++_counterNonce[j] == 0) {
 085            ++j;
 86          }
 87          /* encrypt the nonce to form next xor buffer    */
 088          _encryptor.TransformBlock(_counterNonce, 0, _blockSize, _encryptBuffer, 0);
 089          _encrPos = 0;
 90        }
 091        outputBuffer[ix + outputOffset] = (byte)(inputBuffer[ix + inputOffset] ^ _encryptBuffer[_encrPos++]);
 92        //
 093        ix++;
 94      }
 095       if (_writeMode) {
 96        // This does not change the buffer.
 097        _hmacsha1.TransformBlock(outputBuffer, outputOffset, inputCount, outputBuffer, outputOffset);
 98      }
 099      return inputCount;
 100    }
 101
 102    /// <summary>
 103    /// Returns the 2 byte password verifier
 104    /// </summary>
 105    public byte[] PwdVerifier {
 106      get {
 0107        return _pwdVerifier;
 108      }
 109    }
 110
 111    /// <summary>
 112    /// Returns the 10 byte AUTH CODE to be checked or appended immediately following the AES data stream.
 113    /// </summary>
 114    public byte[] GetAuthCode()
 115    {
 116      // We usually don't get advance notice of final block. Hash requres a TransformFinal.
 0117       if (!_finalised) {
 0118        byte[] dummy = new byte[0];
 0119        _hmacsha1.TransformFinalBlock(dummy, 0, 0);
 0120        _finalised = true;
 121      }
 0122      return _hmacsha1.Hash;
 123    }
 124
 125    #region ICryptoTransform Members
 126
 127    /// <summary>
 128    /// Not implemented.
 129    /// </summary>
 130    public byte[] TransformFinalBlock(byte[] inputBuffer, int inputOffset, int inputCount)
 131    {
 132
 0133      throw new NotImplementedException("ZipAESTransform.TransformFinalBlock");
 134    }
 135
 136    /// <summary>
 137    /// Gets the size of the input data blocks in bytes.
 138    /// </summary>
 139    public int InputBlockSize {
 140      get {
 0141        return _blockSize;
 142      }
 143    }
 144
 145    /// <summary>
 146    /// Gets the size of the output data blocks in bytes.
 147    /// </summary>
 148    public int OutputBlockSize {
 149      get {
 0150        return _blockSize;
 151      }
 152    }
 153
 154    /// <summary>
 155    /// Gets a value indicating whether multiple blocks can be transformed.
 156    /// </summary>
 157    public bool CanTransformMultipleBlocks {
 158      get {
 0159        return true;
 160      }
 161    }
 162
 163    /// <summary>
 164    /// Gets a value indicating whether the current transform can be reused.
 165    /// </summary>
 166    public bool CanReuseTransform {
 167      get {
 0168        return true;
 169      }
 170    }
 171
 172    /// <summary>
 173    /// Cleanup internal state.
 174    /// </summary>
 175    public void Dispose()
 176    {
 0177      _encryptor.Dispose();
 0178    }
 179
 180    #endregion
 181
 182  }
 183}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipConstants.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipConstants.htm.REMOVED.git-id new file mode 100644 index 0000000000..7b59160908 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipConstants.htm.REMOVED.git-id @@ -0,0 +1 @@ +7992a53411ee51fce1a567dd914963b375629cb8 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipEntry.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipEntry.htm.REMOVED.git-id new file mode 100644 index 0000000000..ef442775db --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipEntry.htm.REMOVED.git-id @@ -0,0 +1 @@ +8e988a2848794baecc058f21e20db07e4d12d195 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipEntryFactory.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipEntryFactory.htm.REMOVED.git-id new file mode 100644 index 0000000000..beefae0dc2 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipEntryFactory.htm.REMOVED.git-id @@ -0,0 +1 @@ +514410af1b6477a75057437b637912ae73188f75 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipException.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipException.htm new file mode 100644 index 0000000000..bcc7392a7e --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipException.htm @@ -0,0 +1,92 @@ + + + + +ICSharpCode.SharpZipLib.Zip.ZipException - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.ZipException
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipException.cs
Covered lines:2
Uncovered lines:6
Coverable lines:8
Total lines:48
Line coverage:25%
+

Metrics

+ + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor(...)100
.ctor()100
.ctor(...)1100100
.ctor(...)100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipException.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.Runtime.Serialization;
 3
 4namespace ICSharpCode.SharpZipLib.Zip
 5{
 6  /// <summary>
 7  /// ZipException represents exceptions specific to Zip classes and code.
 8  /// </summary>
 9  [Serializable]
 10  public class ZipException : SharpZipBaseException
 11  {
 12    /// <summary>
 13    /// Deserialization constructor
 14    /// </summary>
 15    /// <param name="info"><see cref="SerializationInfo"/> for this constructor</param>
 16    /// <param name="context"><see cref="StreamingContext"/> for this constructor</param>
 17    protected ZipException(SerializationInfo info, StreamingContext context)
 018      : base(info, context)
 19    {
 020    }
 21
 22    /// <summary>
 23    /// Initialise a new instance of <see cref="ZipException" />.
 24    /// </summary>
 025    public ZipException()
 26    {
 027    }
 28
 29    /// <summary>
 30    /// Initialise a new instance of <see cref="ZipException" /> with its message string.
 31    /// </summary>
 32    /// <param name="message">A <see cref="string"/> that describes the error.</param>
 33    public ZipException(string message)
 1434      : base(message)
 35    {
 1436    }
 37
 38    /// <summary>
 39    /// Initialise a new instance of <see cref="ZipException" />.
 40    /// </summary>
 41    /// <param name="message">A <see cref="string"/> that describes the error.</param>
 42    /// <param name="innerException">The <see cref="Exception"/> that caused this exception.</param>
 43    public ZipException(string message, Exception innerException)
 044      : base(message, innerException)
 45    {
 046    }
 47  }
 48}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipExtraData.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipExtraData.htm.REMOVED.git-id new file mode 100644 index 0000000000..9827111c47 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipExtraData.htm.REMOVED.git-id @@ -0,0 +1 @@ +441e6589025575aa0145793ccc4274c61426983a \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipFile.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipFile.htm.REMOVED.git-id new file mode 100644 index 0000000000..c7d64c0520 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipFile.htm.REMOVED.git-id @@ -0,0 +1 @@ +cba4fbe77e02740723aa58e73fd75010a742f6b1 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipHelperStream.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipHelperStream.htm.REMOVED.git-id new file mode 100644 index 0000000000..ae8c028dc2 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipHelperStream.htm.REMOVED.git-id @@ -0,0 +1 @@ +a45baa0923464023dc61a81d745bee500b5259c4 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipInputStream.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipInputStream.htm.REMOVED.git-id new file mode 100644 index 0000000000..7ac9b27eee --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipInputStream.htm.REMOVED.git-id @@ -0,0 +1 @@ +deb2b1ef01fa123cc65cd6cf1a72e86714cd6501 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipNameTransform.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipNameTransform.htm new file mode 100644 index 0000000000..5f58e073af --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipNameTransform.htm @@ -0,0 +1,269 @@ + + + + +ICSharpCode.SharpZipLib.Zip.ZipNameTransform - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.ZipNameTransform
Assembly:ICSharpCode.SharpZipLib
File(s):C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipNameTransform.cs
Covered lines:66
Uncovered lines:11
Coverable lines:77
Total lines:220
Line coverage:85.7%
Branch coverage:67.6%
+

Metrics

+ + + + + + + + + + + + +
MethodCyclomatic ComplexitySequence CoverageBranch Coverage
.ctor()1100100
.ctor(...)1100100
.cctor()1100100
TransformDirectory(...)385.7160
TransformFile(...)977.7870.59
MakeValidName(...)584.6288.89
IsValidName(...)485.7160
IsValidName(...)3100100
+

File(s)

+

C:\Users\Neil\Documents\Visual Studio 2015\Projects\icsharpcode\SZL_master\ICSharpCode.SharpZipLib\Zip\ZipNameTransform.cs

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#LineLine coverage
 1using System;
 2using System.IO;
 3using System.Text;
 4using ICSharpCode.SharpZipLib.Core;
 5
 6namespace ICSharpCode.SharpZipLib.Zip
 7{
 8  /// <summary>
 9  /// ZipNameTransform transforms names as per the Zip file naming convention.
 10  /// </summary>
 11  /// <remarks>The use of absolute names is supported although its use is not valid
 12  /// according to Zip naming conventions, and should not be used if maximum compatability is desired.</remarks>
 13  public class ZipNameTransform : INameTransform
 14  {
 15    #region Constructors
 16    /// <summary>
 17    /// Initialize a new instance of <see cref="ZipNameTransform"></see>
 18    /// </summary>
 10119    public ZipNameTransform()
 20    {
 10121    }
 22
 23    /// <summary>
 24    /// Initialize a new instance of <see cref="ZipNameTransform"></see>
 25    /// </summary>
 26    /// <param name="trimPrefix">The string to trim from the front of paths if found.</param>
 527    public ZipNameTransform(string trimPrefix)
 28    {
 529      TrimPrefix = trimPrefix;
 530    }
 31    #endregion
 32
 33    /// <summary>
 34    /// Static constructor.
 35    /// </summary>
 36    static ZipNameTransform()
 37    {
 38      char[] invalidPathChars;
 139      invalidPathChars = Path.GetInvalidPathChars();
 140      int howMany = invalidPathChars.Length + 2;
 41
 142      InvalidEntryCharsRelaxed = new char[howMany];
 143      Array.Copy(invalidPathChars, 0, InvalidEntryCharsRelaxed, 0, invalidPathChars.Length);
 144      InvalidEntryCharsRelaxed[howMany - 1] = '*';
 145      InvalidEntryCharsRelaxed[howMany - 2] = '?';
 46
 147      howMany = invalidPathChars.Length + 4;
 148      InvalidEntryChars = new char[howMany];
 149      Array.Copy(invalidPathChars, 0, InvalidEntryChars, 0, invalidPathChars.Length);
 150      InvalidEntryChars[howMany - 1] = ':';
 151      InvalidEntryChars[howMany - 2] = '\\';
 152      InvalidEntryChars[howMany - 3] = '*';
 153      InvalidEntryChars[howMany - 4] = '?';
 154    }
 55
 56    /// <summary>
 57    /// Transform a windows directory name according to the Zip file naming conventions.
 58    /// </summary>
 59    /// <param name="name">The directory name to transform.</param>
 60    /// <returns>The transformed name.</returns>
 61    public string TransformDirectory(string name)
 62    {
 563      name = TransformFile(name);
 464       if (name.Length > 0) {
 465         if (!name.EndsWith("/", StringComparison.Ordinal)) {
 466          name += "/";
 67        }
 468      } else {
 069        throw new ZipException("Cannot have an empty directory name");
 70      }
 471      return name;
 72    }
 73
 74    /// <summary>
 75    /// Transform a windows file name according to the Zip file naming conventions.
 76    /// </summary>
 77    /// <param name="name">The file name to transform.</param>
 78    /// <returns>The transformed name.</returns>
 79    public string TransformFile(string name)
 80    {
 6592781       if (name != null) {
 6592782        string lowerName = name.ToLower();
 6592783         if ((trimPrefix_ != null) && (lowerName.IndexOf(trimPrefix_, StringComparison.Ordinal) == 0)) {
 784          name = name.Substring(trimPrefix_.Length);
 85        }
 86
 6592787        name = name.Replace(@"\", "/");
 6592788        name = WindowsPathUtils.DropPathRoot(name);
 89
 90        // Drop any leading slashes.
 6593291         while ((name.Length > 0) && (name[0] == '/')) {
 592          name = name.Remove(0, 1);
 93        }
 94
 95        // Drop any trailing slashes.
 6592796         while ((name.Length > 0) && (name[name.Length - 1] == '/')) {
 097          name = name.Remove(name.Length - 1, 1);
 98        }
 99
 100        // Convert consecutive // characters to /
 65927101        int index = name.IndexOf("//", StringComparison.Ordinal);
 65927102         while (index >= 0) {
 0103          name = name.Remove(index, 1);
 0104          index = name.IndexOf("//", StringComparison.Ordinal);
 105        }
 106
 65927107        name = MakeValidName(name, '_');
 65926108      } else {
 0109        name = string.Empty;
 110      }
 65926111      return name;
 112    }
 113
 114    /// <summary>
 115    /// Get/set the path prefix to be trimmed from paths if present.
 116    /// </summary>
 117    /// <remarks>The prefix is trimmed before any conversion from
 118    /// a windows path is done.</remarks>
 119    public string TrimPrefix {
 0120      get { return trimPrefix_; }
 121      set {
 5122        trimPrefix_ = value;
 5123         if (trimPrefix_ != null) {
 5124          trimPrefix_ = trimPrefix_.ToLower();
 125        }
 5126      }
 127    }
 128
 129    /// <summary>
 130    /// Force a name to be valid by replacing invalid characters with a fixed value
 131    /// </summary>
 132    /// <param name="name">The name to force valid</param>
 133    /// <param name="replacement">The replacement character to use.</param>
 134    /// <returns>Returns a valid name</returns>
 135    static string MakeValidName(string name, char replacement)
 136    {
 65927137      int index = name.IndexOfAny(InvalidEntryChars);
 65927138       if (index >= 0) {
 2139        var builder = new StringBuilder(name);
 140
 5141         while (index >= 0) {
 3142          builder[index] = replacement;
 143
 3144           if (index >= name.Length) {
 0145            index = -1;
 0146          } else {
 3147            index = name.IndexOfAny(InvalidEntryChars, index + 1);
 148          }
 149        }
 2150        name = builder.ToString();
 151      }
 152
 65927153       if (name.Length > 0xffff) {
 1154        throw new PathTooLongException();
 155      }
 156
 65926157      return name;
 158    }
 159
 160    /// <summary>
 161    /// Test a name to see if it is a valid name for a zip entry.
 162    /// </summary>
 163    /// <param name="name">The name to test.</param>
 164    /// <param name="relaxed">If true checking is relaxed about windows file names and absolute paths.</param>
 165    /// <returns>Returns true if the name is a valid zip name; false otherwise.</returns>
 166    /// <remarks>Zip path names are actually in Unix format, and should only contain relative paths.
 167    /// This means that any path stored should not contain a drive or
 168    /// device letter, or a leading slash.  All slashes should forward slashes '/'.
 169    /// An empty name is valid for a file where the input comes from standard input.
 170    /// A null name is not considered valid.
 171    /// </remarks>
 172    public static bool IsValidName(string name, bool relaxed)
 173    {
 65916174      bool result = (name != null);
 175
 65916176       if (result) {
 65916177         if (relaxed) {
 65916178          result = name.IndexOfAny(InvalidEntryCharsRelaxed) < 0;
 65916179        } else {
 0180          result =
 0181            (name.IndexOfAny(InvalidEntryChars) < 0) &&
 0182            (name.IndexOf('/') != 0);
 183        }
 184      }
 185
 65916186      return result;
 187    }
 188
 189    /// <summary>
 190    /// Test a name to see if it is a valid name for a zip entry.
 191    /// </summary>
 192    /// <param name="name">The name to test.</param>
 193    /// <returns>Returns true if the name is a valid zip name; false otherwise.</returns>
 194    /// <remarks>Zip path names are actually in unix format,
 195    /// and should only contain relative paths if a path is present.
 196    /// This means that the path stored should not contain a drive or
 197    /// device letter, or a leading slash.  All slashes should forward slashes '/'.
 198    /// An empty name is valid where the input comes from standard input.
 199    /// A null name is not considered valid.
 200    /// </remarks>
 201    public static bool IsValidName(string name)
 202    {
 2203      bool result =
 2204        (name != null) &&
 2205        (name.IndexOfAny(InvalidEntryChars) < 0) &&
 2206        (name.IndexOf('/') != 0)
 2207        ;
 1208      return result;
 209    }
 210
 211    #region Instance Fields
 212    string trimPrefix_;
 213    #endregion
 214
 215    #region Class Fields
 216    static readonly char[] InvalidEntryChars;
 217    static readonly char[] InvalidEntryCharsRelaxed;
 218    #endregion
 219  }
 220}
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipOutputStream.htm.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipOutputStream.htm.REMOVED.git-id new file mode 100644 index 0000000000..53b2300f03 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipOutputStream.htm.REMOVED.git-id @@ -0,0 +1 @@ +92cd8d99abd94df1eb25e256dfaa162feb256ac8 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipTestResultHandler.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipTestResultHandler.htm new file mode 100644 index 0000000000..3528bdd56b --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/ICSharpCode.SharpZipLib_ZipTestResultHandler.htm @@ -0,0 +1,29 @@ + + + + +ICSharpCode.SharpZipLib.Zip.ZipTestResultHandler - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + +
Class:ICSharpCode.SharpZipLib.Zip.ZipTestResultHandler
Assembly:ICSharpCode.SharpZipLib
File(s):
Covered lines:0
Uncovered lines:0
Coverable lines:0
Total lines:0
Line coverage:
+

File(s)

+

No files found. This usually happens if a file isn't covered by a test or the class does not contain any sequence points (e.g. a class that only contains auto properties).

+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/combined.js.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/combined.js.REMOVED.git-id new file mode 100644 index 0000000000..518006c55e --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/combined.js.REMOVED.git-id @@ -0,0 +1 @@ +e57ae76927b150d11015c8bc7b0ff0ae060e00f5 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/index.htm b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/index.htm new file mode 100644 index 0000000000..f351056fe5 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/index.htm @@ -0,0 +1,141 @@ + + + + +Summary - Coverage Report + +
+

Summary

+ ++++ + + + + + + + + + + + + + +
Generated on:5/17/2016 - 5:03:19 PM
Parser:OpenCoverParser
Assemblies:1
Classes:89
Files:58
Covered lines:4828
Uncovered lines:3758
Coverable lines:8586
Total lines:66022
Line coverage:56.2%
Branch coverage:47.3%
+

Assemblies

+
+
+
+
+ +++++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameCoveredUncoveredCoverableTotalLine coverageBranch coverage
ICSharpCode.SharpZipLib4828375885866602256.2%
  
47.3%
  
ICSharpCode.SharpZipLib.BZip2.BZip202020660%
 
0%
 
ICSharpCode.SharpZipLib.BZip2.BZip2Constants056561210%
 
 
ICSharpCode.SharpZipLib.BZip2.BZip2Exception088480%
 
 
ICSharpCode.SharpZipLib.BZip2.BZip2InputStream11131542690926%
  
15.7%
  
ICSharpCode.SharpZipLib.BZip2.BZip2OutputStream107794901179311.8%
  
3.6%
  
ICSharpCode.SharpZipLib.Checksum.Adler323564117585.3%
  
100%
 
ICSharpCode.SharpZipLib.Checksum.BZip2Crc93093200100%
 
100%
 
ICSharpCode.SharpZipLib.Checksum.Crc3282082189100%
 
100%
 
ICSharpCode.SharpZipLib.Core.CompletedFileHandler0000
 
 
ICSharpCode.SharpZipLib.Core.DirectoryEventArgs0444750%
 
 
ICSharpCode.SharpZipLib.Core.DirectoryFailureHandler0000
 
 
ICSharpCode.SharpZipLib.Core.ExtendedPathFilter047472800%
 
0%
 
ICSharpCode.SharpZipLib.Core.FileFailureHandler0000
 
 
ICSharpCode.SharpZipLib.Core.FileSystemScanner33498247540.2%
  
32.3%
  
ICSharpCode.SharpZipLib.Core.NameAndSizeFilter023232800%
 
0%
 
ICSharpCode.SharpZipLib.Core.NameFilter68188623579%
  
73.9%
  
ICSharpCode.SharpZipLib.Core.PathFilter808280100%
 
50%
  
ICSharpCode.SharpZipLib.Core.ProcessFileHandler0000
 
 
ICSharpCode.SharpZipLib.Core.ProgressEventArgs016164750%
 
0%
 
ICSharpCode.SharpZipLib.Core.ProgressHandler0000
 
 
ICSharpCode.SharpZipLib.Core.ScanEventArgs61747585.7%
  
 
ICSharpCode.SharpZipLib.Core.ScanFailureEventArgs0994750%
 
 
ICSharpCode.SharpZipLib.Core.StreamUtils25537820832%
  
34%
  
ICSharpCode.SharpZipLib.Core.WindowsPathUtils193225786.3%
  
76.6%
  
ICSharpCode.SharpZipLib.Encryption.PkzipClassic2622844592.8%
  
66.6%
  
ICSharpCode.SharpZipLib.Encryption.PkzipClassicCryptoBase1822044590%
  
50%
  
ICSharpCode.SharpZipLib.Encryption.PkzipClassicDecryptCryptoTransform1431744582.3%
  
100%
 
ICSharpCode.SharpZipLib.Encryption.PkzipClassicEncryptCryptoTransform1341744576.4%
  
100%
 
ICSharpCode.SharpZipLib.Encryption.PkzipClassicManaged6222844521.4%
  
12.5%
  
ICSharpCode.SharpZipLib.Encryption.ZipAESStream050501340%
 
0%
 
ICSharpCode.SharpZipLib.Encryption.ZipAESTransform047471830%
 
0%
 
ICSharpCode.SharpZipLib.GZip.GZip02020660%
 
0%
 
ICSharpCode.SharpZipLib.GZip.GZipConstants022580%
 
 
ICSharpCode.SharpZipLib.GZip.GZipException088480%
 
 
ICSharpCode.SharpZipLib.GZip.GZipInputStream41041083303.7%
  
0%
 
ICSharpCode.SharpZipLib.GZip.GZipOutputStream6356822792.6%
  
81.2%
  
ICSharpCode.SharpZipLib.Lzw.LzwConstants022610%
 
 
ICSharpCode.SharpZipLib.Lzw.LzwException088480%
 
 
ICSharpCode.SharpZipLib.Lzw.LzwInputStream01941945590%
 
0%
 
ICSharpCode.SharpZipLib.SharpZipBaseException2685225%
  
 
ICSharpCode.SharpZipLib.Tar.InvalidHeaderException088510%
 
 
ICSharpCode.SharpZipLib.Tar.ProgressMessageHandler0000
 
 
ICSharpCode.SharpZipLib.Tar.TarArchive4622326983017.1%
  
13.6%
  
ICSharpCode.SharpZipLib.Tar.TarBuffer965014655165.7%
  
50%
  
ICSharpCode.SharpZipLib.Tar.TarEntry616112249650%
  
21.4%
  
ICSharpCode.SharpZipLib.Tar.TarException2684825%
  
 
ICSharpCode.SharpZipLib.Tar.TarHeader20963272107776.8%
  
66.9%
  
ICSharpCode.SharpZipLib.Tar.TarInputStream4011815862625.3%
  
22%
  
ICSharpCode.SharpZipLib.Tar.TarOutputStream645411844254.2%
  
58.3%
  
ICSharpCode.SharpZipLib.Zip.BaseArchiveStorage4044263100%
 
 
ICSharpCode.SharpZipLib.Zip.Compression.Deflater69299852170.4%
  
68%
  
ICSharpCode.SharpZipLib.Zip.Compression.DeflaterConstants606146100%
 
 
ICSharpCode.SharpZipLib.Zip.Compression.DeflaterEngine2383727581286.5%
  
84.4%
  
ICSharpCode.SharpZipLib.Zip.Compression.DeflaterHuffman349935886597.4%
  
91.1%
  
ICSharpCode.SharpZipLib.Zip.Compression.DeflaterPending20217100%
 
 
ICSharpCode.SharpZipLib.Zip.Compression.Inflater1735723078875.2%
  
59.8%
  
ICSharpCode.SharpZipLib.Zip.Compression.InflaterDynHeader63107317086.3%
  
54.2%
  
ICSharpCode.SharpZipLib.Zip.Compression.InflaterHuffmanTree65238819373.8%
  
75%
  
ICSharpCode.SharpZipLib.Zip.Compression.PendingBuffer40185825568.9%
  
90%
  
ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream762810447673%
  
71.4%
  
ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputBuffer72148666283.7%
  
71%
  
ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream38367466251.3%
  
39.4%
  
ICSharpCode.SharpZipLib.Zip.Compression.Streams.OutputWindow46206619569.6%
  
53.3%
  
ICSharpCode.SharpZipLib.Zip.Compression.Streams.StreamManipulator51126324180.9%
  
67.6%
  
ICSharpCode.SharpZipLib.Zip.DescriptorData606560100%
 
 
ICSharpCode.SharpZipLib.Zip.DiskArchiveStorage551570426378.5%
  
62.5%
  
ICSharpCode.SharpZipLib.Zip.DynamicDiskDataSource4044263100%
 
100%
 
ICSharpCode.SharpZipLib.Zip.EntryPatchData0445600%
 
 
ICSharpCode.SharpZipLib.Zip.ExtendedUnixData32306289651.6%
  
30%
  
ICSharpCode.SharpZipLib.Zip.FastZip859918464846.1%
  
28.3%
  
ICSharpCode.SharpZipLib.Zip.FastZipEvents038386480%
 
0%
 
ICSharpCode.SharpZipLib.Zip.KeysRequiredEventArgs0101042630%
 
 
ICSharpCode.SharpZipLib.Zip.MemoryArchiveStorage151227426355.5%
  
50%
  
ICSharpCode.SharpZipLib.Zip.NTTaggedData4595489683.3%
  
50%
  
ICSharpCode.SharpZipLib.Zip.RawTaggedData013138960%
 
0%
 
ICSharpCode.SharpZipLib.Zip.StaticDiskDataSource04442630%
 
 
ICSharpCode.SharpZipLib.Zip.TestStatus71320426335%
  
 
ICSharpCode.SharpZipLib.Zip.WindowsNameTransform42357722654.5%
  
42.8%
  
ICSharpCode.SharpZipLib.Zip.ZipConstants2983759178.3%
  
63.3%
  
ICSharpCode.SharpZipLib.Zip.ZipEntry21969288117576%
  
59.5%
  
ICSharpCode.SharpZipLib.Zip.ZipEntryFactory515010134150.4%
  
35%
  
ICSharpCode.SharpZipLib.Zip.ZipException2684825%
  
 
ICSharpCode.SharpZipLib.Zip.ZipExtraData1211914089686.4%
  
67.2%
  
ICSharpCode.SharpZipLib.Zip.ZipFile9533561309426372.8%
  
58.6%
  
ICSharpCode.SharpZipLib.Zip.ZipHelperStream1068819456054.6%
  
42.8%
  
ICSharpCode.SharpZipLib.Zip.ZipInputStream1624420661078.6%
  
67.3%
  
ICSharpCode.SharpZipLib.Zip.ZipNameTransform66117722085.7%
  
67.6%
  
ICSharpCode.SharpZipLib.Zip.ZipOutputStream2854833381685.5%
  
78.4%
  
ICSharpCode.SharpZipLib.Zip.ZipTestResultHandler0000
 
 
+
+ + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch0.png b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch0.png new file mode 100644 index 0000000000..7d61df081e Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch0.png differ diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch10.png b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch10.png new file mode 100644 index 0000000000..23480a9765 Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch10.png differ diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch100.png b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch100.png new file mode 100644 index 0000000000..5c5d8ad851 Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch100.png differ diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch20.png b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch20.png new file mode 100644 index 0000000000..181b20934d Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch20.png differ diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch30.png b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch30.png new file mode 100644 index 0000000000..68bef4c9fd Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch30.png differ diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch40.png b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch40.png new file mode 100644 index 0000000000..066b8965c7 Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch40.png differ diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch50.png b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch50.png new file mode 100644 index 0000000000..7f36e791a7 Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch50.png differ diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch60.png b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch60.png new file mode 100644 index 0000000000..60565e8695 Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch60.png differ diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch70.png b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch70.png new file mode 100644 index 0000000000..13a8d1bfc3 Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch70.png differ diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch80.png b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch80.png new file mode 100644 index 0000000000..fad3d4352c Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch80.png differ diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch90.png b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch90.png new file mode 100644 index 0000000000..d31be85c23 Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_branch90.png differ diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_collapsed.png b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_collapsed.png new file mode 100644 index 0000000000..aa92c479bb Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_collapsed.png differ diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_expanded.png b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_expanded.png new file mode 100644 index 0000000000..f4cd5a26a4 Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_expanded.png differ diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_pin_pinned.png b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_pin_pinned.png new file mode 100644 index 0000000000..ac776a1852 Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_pin_pinned.png differ diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_pin_unpinned.png b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_pin_unpinned.png new file mode 100644 index 0000000000..c9dd9720bb Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_pin_unpinned.png differ diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_sortactive_asc.png b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_sortactive_asc.png new file mode 100644 index 0000000000..21b1c26dcd Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_sortactive_asc.png differ diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_sortactive_desc.png b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_sortactive_desc.png new file mode 100644 index 0000000000..6dcef5d60f Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_sortactive_desc.png differ diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_sortinactive.png b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_sortinactive.png new file mode 100644 index 0000000000..31ef9ce526 Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/pic_sortinactive.png differ diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/report.css b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/report.css new file mode 100644 index 0000000000..e7780ce03f --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/opencover/report.css @@ -0,0 +1,208 @@ +html { font-family: sans-serif; margin: 20px; font-size: 0.9em; background-color: #f5f5f5; } +h1 { font-size: 1.2em; font-weight: bold; margin: 20px 0 15px 0; padding: 0; } +h2 { font-size: 1.0em; font-weight: bold; margin: 10px 0 15px 0; padding: 0; } +h3 { font-size: 1.0em; font-weight: bold; margin: 0 0 10px 0; padding: 0; display: inline-block; } +a { color: #c00; text-decoration: none; } +a:hover { color: #000; text-decoration: none; } + +.container { margin: auto; max-width: 1200px; width: 90%; border: solid 1px #a7bac5; padding: 0 20px 20px 20px; background-color: #fff; } +.footer { font-size: 0.7em; text-align: center; margin-top: 35px; } + +th { text-align: left; } +.overview { border: solid 1px #a7bac5; border-collapse: collapse; width: 100%; word-wrap: break-word; table-layout:fixed; } +.overview th { border: solid 1px #a7bac5; border-collapse: collapse; padding: 2px 5px 2px 5px; background-color: #d2dbe1; } +.overview tr.namespace th { background-color: #dcdcdc; } +.overview thead th { background-color: #c4ced4; } +.overview th a { color: #000; } +.overview tr.namespace a, .overview tr.namespace span { margin-left: 15px; } +.overview td { border: solid 1px #a7bac5; border-collapse: collapse; padding: 2px 5px 2px 5px; } +.coverage { border: solid 1px #a7bac5; border-collapse: collapse; font-size: 5px; height: 10px; } +.coverage td { padding: 0; border: none; } + +.customizebox { font-size: 0.75em; margin-bottom: 7px; } +.customizebox div { width: 33.33%; display: inline-block; } +.customizebox input { font-size: 0.8em; width: 150px; } +#namespaceslider { width: 200px; display: inline-block; margin-left: 8px; } + +a.sortactive_asc { background-image: url(pic_sortactive_asc.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAC5SURBVCiRlZGrbgJRFEXXgVF8Cwoa/gFDCAmyKAS+tpZvqW/CR5AQFIrKagSmAiazEFyaAW5IZpvz2PvkvEKlCVqN1EABsInomvwaYQWVYBuqM5QD3RepzUhY1guqZCP5LfgElqFCRGxhJQxzYwR892CMet1BLeEd+M3of4QZ6Tr/Sw/0AEyBU038J0z6erwl7q7U17XwcYuFxZvu7sbL/WEb8QUce7p45Ion9TU570CZ47IdXqHxpy+g6Uhxn5HjPwAAAABJRU5ErkJggg==); background-position-y:center; background-repeat: no-repeat; padding-left: 15px; } +a.sortactive_desc { background-image: url(pic_sortactive_desc.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAGCAYAAAD68A/GAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACESURBVAiZbcw9jkEBGEbh53MlU/lJ0M+sQTQKnUZtBXpbEWuRybSjvi6djVAp+DRGromTvNU5eSMz1akiFkF3mLl6EZn53IFJxaXiumNWd/H3WEZ8FZToPz5ON8ajzCM0YB/RKfiuRdBusCkjehC/NFv8YOo92zPTYska85qIf+HnB4M7auMxO7A99QMAAAAASUVORK5CYII=); background-position-y:center; background-repeat: no-repeat; padding-left: 15px; } +a.sortinactive_asc { background-image: url(pic_sortinactive.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAACKSURBVCiRlZExCgIxEEXfFzsLC6+xvaext/AEeiDrbTzMlt7AwmJB/DaTZdQ1mIGQCf89GDKyTUstmmhgCSCpK30qA890P2wPxEjHCGrnZJsiCLhU4B7QJIS0Aa4z8ACsJ640IW2BMcF3oHtj8iOkQxJ2n7nm9iDpDNxs77+yH8IqvnH8S6hV86ZfVkN9/+MF4OEAAAAASUVORK5CYII=); background-position-y:center; background-repeat: no-repeat; padding-left: 15px; } + +a.expanded { background-image: url(pic_expanded.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAClJREFUKFNj+P//PwMpmCTFIIMHo4YzQFeRghlIUQxSOxg9TUoskxVxAAc+kbB1wVv5AAAAAElFTkSuQmCC); background-position-y:center; background-repeat: no-repeat; padding-left: 15px; } +a.collapsed { background-image: url(pic_collapsed.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAACdJREFUKFNj+P//PwM6ZmBg+A/CWOWGgwaYB0mgISFCNB4OoUSqHwDx71a4nIsouAAAAABJRU5ErkJggg==); background-position-y:center; background-repeat: no-repeat; padding-left: 15px; } + +#testmethods { position: fixed; right: 0; top: 200px; background-color: #fff; width: 0; height: 300px; -webkit-transition:all .5s linear;-moz-transition:all .5s linear;transition:all .5s; border-left: solid 25px #a7bac5; border-top: solid 1px #a7bac5; border-bottom: solid 1px #a7bac5; } +#testmethods:hover, #testmethods.pinned { width: 600px; } +#testmethods h2 { -moz-transform: rotate(270deg); -o-transform: rotate(270deg); -webkit-transform: rotate(270deg); transform: rotate(270deg); text-align: center; width: 300px; padding: 0; margin: 0; position: absolute; left: -162px; top:140px; } +#testmethods div { margin: 10px; overflow: auto; height: 280px; font-size: 0.9em; } +#testmethods span { max-width: 580px; white-space: nowrap; display: block; } +#pin { position: absolute; left: -25px; width: 25px; height: 300px; background-position: 4px 2px; background-repeat: no-repeat; background-image: url(pic_pin_unpinned.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAPCAYAAAAGRPQsAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAOVJREFUOE+dkzsShCAMhr0TR7GxsKW1sPUAVngCWofK2hn6PVeWwPBMmGW2+Bwh5CcvJgBIGHuDFAIEslyg7cdtZ/sv0o8+1yBSMJ+vM1GnHv5j9E6EPNvtzLwjR50ag9TjqZL0pGbEiwjNc8HRuWA6luyENeJqx7ODaho0+SjczcYZxoUCbYOqyDxuJNSgKBHjOolF73a4gIiVCySmigex2HMjkFnheJqalYtIEsFa9iJkXkglUqI2KoDpp/3/xUJKtNv1eBCRSHAMIjg2SdyPUT3Y8ZWwQoixL9RjQ4fUn0v1veELzKqo/wKmCB4AAAAASUVORK5CYII=);} +#pin:hover { cursor: pointer; background-position: 4px 4px; } +#testmethods.pinned #pin { background-image: url(pic_pin_pinned.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAAPCAYAAAAGRPQsAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAadEVYdFNvZnR3YXJlAFBhaW50Lk5FVCB2My41LjEwMPRyoQAAAOVJREFUOE+dkzsShCAMhrmZhTex8gx2HsHSE2CtHVYWFM7snbIEBkxImHW2+Bwh5CcvDAAUrFvBGwMfpJvhcD5sP/ZflJ9j6pMI4Z72YJJOLeLHLqMQigxrMOuOGjw1Bb+8T1Wk5xdFnERotxmuxgXm6h4nrJFWO50RzqpBJkYRbrbB8F4oUTeIRRYJI3G+FBViWiex6M0OE4QYXSA5VTyIxb6JM6eHa6tqRheZIoK1bEWovBAmQjkHKYDpl/3/xVJKstt8PIRIJjkmERybIh7HiA92fiWqEGLdDnxs5JDGc6W+K3wBefLG3rZ60jAAAAAASUVORK5CYII=);} + +.branch0 { width: 13px; background-repeat: no-repeat; background-repeat: no-repeat; background-image: url(pic_branch0.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7CAAAOwgEVKEqAAAAAP1BMVEVMaXEREREZGRkxMTE3NzdpaWlKSkqDg4NdXV0iIiJGRkb/AAArKyuJiYlPT08eHh5+fn4lJSVxcXE+Pj5hYWHbSELyAAAAAXRSTlMAQObYZgAAAGJJREFUeAF1z0mKw0AMhtGnKs+Ohwz3P2swJoWg6W/3VvpFbl2p5czuRnN2YYHpdbvvphnl3HeXPQMGyu1HcKEfsrc4ZIt3tjm25s9QI6rmqwW/e9GDtqf83fv/P7pjzIbkLwNnA3Y85ZObAAAAAElFTkSuQmCC); } +.branch10 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch10.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7CAAAOwgEVKEqAAAAASFBMVEVMaXEREREZGRkxMTE3NzdpaWlKSkqDg4NdXV0iIiL/AAA9wRj3BwEA/yGJiYlPT08eHh5+fn4lJSVGRkZxcXErKys+Pj5hYWGqWMNpAAAAAXRSTlMAQObYZgAAAGdJREFUeAFtz0kOwjAUBNHq7yFx5oHA/W+KcIRlS6nd23XTNAzgbK/tO1JtgxOgf90Ovk+A7euazSGACHb7yjZCrL1oozZ6N05aij/RSY7iXyd/H1LIKHvsae/jn2kCv3XF40jTPH8BKiQDwdoE+8kAAAAASUVORK5CYII=); } +.branch20 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch20.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7CAAAOwgEVKEqAAAAARVBMVEVMaXEREREZGRlKSko3NzdpaWkxMTGDg4NdXV1olhMiIiKJiYlPT08A/yH/AABGRkYeHh5+fn4lJSUrKys+Pj5xcXFhYWF0ULtDAAAAAXRSTlMAQObYZgAAAGVJREFUeAFdz0cSgzAQRNHfowCIjMP9j+qyKKtG/ru366Zr2yDb6R0HirfBDjC+bqc4FsDOZanmEkAAu/2oNlLwnnXgjZ6di+bmd8hSpvnbzs+XlCraHvvf2zxN/Z91hXgMnQHnD2B+BBMy/cNnAAAAAElFTkSuQmCC); } +.branch30 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch30.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7CAAAOwgEVKEqAAAAARVBMVEVMaXEZGRkRERFpaWk3NzdKSkoxMTEiIiL/AAAA/yFGRkaDg4NdXV2WaA2JiYlPT08eHh5+fn4lJSUrKys+Pj5xcXFhYWEgqDmeAAAAAXRSTlMAQObYZgAAAGZJREFUeAFNz0cOwzAMRNFPqrgXy0nuf9SAEGzM3z1wMwRtHKHapc4Lg9pgBli/3SmvcbfrOAjTHKCAdd8OgVTUu5+o8Q/qwffXv1LdK6+jmcfNPUFv22KP8TRNfa84/lGTz0Uthf/9tgNxOP/NUQAAAABJRU5ErkJggg==); } +.branch40 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch40.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7CAAAOwgEVKEqAAAAASFBMVEVMaXEZGRkRERFpaWk3NzdKSkoxMTEiIiIA/yH/AABGRkaDg4NdXV3APggH9x+JiYlPT08eHh5+fn4lJSUrKys+Pj5xcXFhYWFonEahAAAAAXRSTlMAQObYZgAAAGhJREFUeAFNz0eORDEMA9GyHPxz+B3m/jcdEAYarN1bicJjnqGlx11WujvBArB9h3PZOpCe65LhFQAV0vA7QMjVfcaNm/i46XH+/FdbRAPYd1ktqOPQvciMmCbtSZi1161/3JR7dSvzPx4tA5oZXK5zAAAAAElFTkSuQmCC); } +.branch50 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch50.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7CAAAOwgEVKEqAAAAASFBMVEVMaXEREREZGRlpaWk3NzdKSkoxMTFGRkYiIiIA/yH/AACDg4NdXV0d4R3hHQOJiYlPT08eHh5+fn4lJSUrKys+Pj5xcXFhYWFLWFD2AAAAAXRSTlMAQObYZgAAAGlJREFUeAFNz0kKw1AMBNHSH77n2Unuf9PQGEPX7qFNC49xhJZOd5no3Qk6gPn7OJdZ93TuuwxXAFRIj+8AIVf3Fgdu4gOs6+s+NmBZ5F9tEQ1gGGTV8fqKyChk7UmYtdft/8iUY3Ir8x8pawOmgEiktgAAAABJRU5ErkJggg==); } +.branch60 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch60.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7CAAAOwgEVKEqAAAAASFBMVEVMaXEREREZGRk3NzdpaWkxMTFKSkpdXV0+wBgiIiL/AAAA/yFGRkaDg4P3BwGJiYlPT08eHh5+fn4lJSUrKys+Pj5xcXFhYWHS0KQCAAAAAXRSTlMAQObYZgAAAGlJREFUeAFNz0cOw0AMQ9EvTbHHvaTc/6bJwCCgv3s7EmLTBMWv6LTSoh0WgOHzOKehAX4dRzfcBlDBH78MOnKFbZN3O4FxlLE3MM9ysx35W4tZAbm3IN9mGZD/e5xg7ZX1RyadazRA8A8wiQPJIy0rHgAAAABJRU5ErkJggg==); } +.branch70 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch70.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7CAAAOwgEVKEqAAAAARVBMVEVMaXEREREZGRlpaWk3NzcxMTFKSkpGRkYiIiKDg4NdXV3/AAAA/yFolhOJiYlPT08eHh5+fn4lJSU+Pj4rKytxcXFhYWEH3YW7AAAAAXRSTlMAQObYZgAAAGdJREFUeAFVz0cWhDAQA9HqdsDkMOH+Rx0Ynnh27f5OomkcIfleO/aU2g4dwPC5HeJQAN/X9W8OA8jgMM/wvnwiZJgmebGN2tircbHl8Tcns8Tjqw75MAuAfO5xKmuvrD8ycesb38k/NDwDzrEiRywAAAAASUVORK5CYII=); } +.branch80 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch80.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAARVBMVEVMaXEZGRkRERFpaWk3NzdKSkoxMTEiIiIA/yFdXV3/AACDg4OWaA2JiYlPT08eHh5+fn4lJSVGRkYrKys+Pj5xcXFhYWEQqOEsAAAAAXRSTlMAQObYZgAAAGRJREFUeAFNz0kOwkAMRcFqZ55DGO5/VNQSRH67Wvmb3DzTlzO7XQzZhQumN9ZV004DyrnvjCOPgI5C9TOoaLrsLQ7Z4pVtiO32p+sjerdrF/73osHPdU+RXLiy8z/V2mORjeQvDAcDdiAsiv4AAAAASUVORK5CYII=); } +.branch90 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch90.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAASFBMVEVMaXEREREZGRkxMTE3NzdpaWlKSkqDg4MiIiJdXV3/AADBPQgH9x+JiYkA/yFPT08eHh5+fn5GRkYrKyslJSVxcXE+Pj5hYWEblV3lAAAAAXRSTlMAQObYZgAAAGdJREFUeAFNz0cOwzAMRcGh3HtJyf1vGhiGBb3drPhJ2ThSpSN7mtSdPnueJU4YPlhXTT30SMe2XeYd0JJuv4ILTVt6iV1p8VW6jyX711YRleyrE8+9aEDekxS+92bnfx6r9640FP4DXWwEJsNw3ucAAAAASUVORK5CYII=); } +.branch100 { width: 13px; background-repeat: no-repeat; background-image: url(pic_branch100.png), url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAASCAMAAACzQHQ9AAAACXBIWXMAAA7DAAAOwwHHb6hkAAAAP1BMVEVMaXEREREZGRkxMTE3NzdpaWlKSkqDg4NdXV0iIiJGRkYA/yErKyuJiYlPT08eHh5+fn4lJSVxcXE+Pj5hYWFOIeuDAAAAAXRSTlMAQObYZgAAAGJJREFUeAF1z0mKw0AMhtGnKs+Ohwz3P2swJoWg6W/3VvpFbl2p5czuRnN2YYHpdbvvphnl3HeXPQMGyu1HcKEfsrc4ZIt3tjm25s9QI6rmqwW/e9GDtqf83fv/P7pjzIbkLwNnA3Y85ZObAAAAAElFTkSuQmCC); } + +.hidden, .ng-hide { display: none; } +.right { text-align: right; } +.center { text-align: center; } +.rightmargin { padding-right: 8px; } +.leftmargin { padding-left: 5px; } +.green { background-color: #00ff21; } +.lightgreen { background-color: #dcf4dc; } +.red { background-color: #f00; } +.lightred { background-color: #f7dede; } +.gray { background-color: #dcdcdc; } +.lightgray { color: #888888; } + +.ct-chart { position: relative; } +.ct-chart .ct-line { stroke-width: 2px !important; } +.ct-chart .ct-point { stroke-width: 6px !important; transition: stroke-width .2s; } +.ct-chart .ct-point:hover { stroke-width: 10px !important; } +.ct-chart .ct-series.ct-series-a .ct-line, .ct-chart .ct-series.ct-series-a .ct-point { stroke: #c00 !important;} +.ct-chart .ct-series.ct-series-b .ct-line, .ct-chart .ct-series.ct-series-b .ct-point { stroke: #1c2298 !important;} + +.tinylinecoveragechart, .tinybranchcoveragechart { margin-left: -3px; float: left; border: solid 1px #a7bac5; width: 30px; height: 18px; } + +.tinylinecoveragechart .ct-line, .tinybranchcoveragechart .ct-line { stroke-width: 1px !important; } +.tinybranchcoveragechart .ct-series.ct-series-a .ct-line { stroke: #1c2298 !important; } + +.linecoverage { background-color: #c00; width: 10px; height: 8px; border: 1px solid #000; display: inline-block; } +.branchcoverage { background-color: #1c2298; width: 10px; height: 8px; border: 1px solid #000; display: inline-block; } + +.tooltip { position: absolute; display: none; padding: 5px; background: #F4C63D;color: #453D3F; pointer-events: none; z-index: 1; } +.tooltip:after { content: ""; position: absolute; top: 100%; left: 50%; width: 0; height: 0; margin-left: -15px; border: 15px solid transparent; border-top-color: #F4C63D; } + +.column60 { width: 60px; } +.column70 { width: 70px; } +.column90 { width: 90px; } +.column98 { width: 98px; } +.column100 { width: 100px; } +.column105 { width: 105px; } +.column112 { width: 112px; } +.column135 { width: 135px; } + +.covered0 { width: 0px; } +.covered1 { width: 1px; } +.covered2 { width: 2px; } +.covered3 { width: 3px; } +.covered4 { width: 4px; } +.covered5 { width: 5px; } +.covered6 { width: 6px; } +.covered7 { width: 7px; } +.covered8 { width: 8px; } +.covered9 { width: 9px; } +.covered10 { width: 10px; } +.covered11 { width: 11px; } +.covered12 { width: 12px; } +.covered13 { width: 13px; } +.covered14 { width: 14px; } +.covered15 { width: 15px; } +.covered16 { width: 16px; } +.covered17 { width: 17px; } +.covered18 { width: 18px; } +.covered19 { width: 19px; } +.covered20 { width: 20px; } +.covered21 { width: 21px; } +.covered22 { width: 22px; } +.covered23 { width: 23px; } +.covered24 { width: 24px; } +.covered25 { width: 25px; } +.covered26 { width: 26px; } +.covered27 { width: 27px; } +.covered28 { width: 28px; } +.covered29 { width: 29px; } +.covered30 { width: 30px; } +.covered31 { width: 31px; } +.covered32 { width: 32px; } +.covered33 { width: 33px; } +.covered34 { width: 34px; } +.covered35 { width: 35px; } +.covered36 { width: 36px; } +.covered37 { width: 37px; } +.covered38 { width: 38px; } +.covered39 { width: 39px; } +.covered40 { width: 40px; } +.covered41 { width: 41px; } +.covered42 { width: 42px; } +.covered43 { width: 43px; } +.covered44 { width: 44px; } +.covered45 { width: 45px; } +.covered46 { width: 46px; } +.covered47 { width: 47px; } +.covered48 { width: 48px; } +.covered49 { width: 49px; } +.covered50 { width: 50px; } +.covered51 { width: 51px; } +.covered52 { width: 52px; } +.covered53 { width: 53px; } +.covered54 { width: 54px; } +.covered55 { width: 55px; } +.covered56 { width: 56px; } +.covered57 { width: 57px; } +.covered58 { width: 58px; } +.covered59 { width: 59px; } +.covered60 { width: 60px; } +.covered61 { width: 61px; } +.covered62 { width: 62px; } +.covered63 { width: 63px; } +.covered64 { width: 64px; } +.covered65 { width: 65px; } +.covered66 { width: 66px; } +.covered67 { width: 67px; } +.covered68 { width: 68px; } +.covered69 { width: 69px; } +.covered70 { width: 70px; } +.covered71 { width: 71px; } +.covered72 { width: 72px; } +.covered73 { width: 73px; } +.covered74 { width: 74px; } +.covered75 { width: 75px; } +.covered76 { width: 76px; } +.covered77 { width: 77px; } +.covered78 { width: 78px; } +.covered79 { width: 79px; } +.covered80 { width: 80px; } +.covered81 { width: 81px; } +.covered82 { width: 82px; } +.covered83 { width: 83px; } +.covered84 { width: 84px; } +.covered85 { width: 85px; } +.covered86 { width: 86px; } +.covered87 { width: 87px; } +.covered88 { width: 88px; } +.covered89 { width: 89px; } +.covered90 { width: 90px; } +.covered91 { width: 91px; } +.covered92 { width: 92px; } +.covered93 { width: 93px; } +.covered94 { width: 94px; } +.covered95 { width: 95px; } +.covered96 { width: 96px; } +.covered97 { width: 97px; } +.covered98 { width: 98px; } +.covered99 { width: 99px; } +.covered100 { width: 100px; } + + @media print { + html, body { background-color: #fff; margin: 0; } + .container { max-width: 100%; width: 100%; border: none; padding: 0; } + .overview colgroup col:first-child { width: 300px; } + #testmethods { display: none; } +} + +/* Chartist.js 0.6.0 + * Copyright © 2015 Gion Kunz + * Free to use under the WTFPL license. + * http://www.wtfpl.net/ + */ + .ct-chart .ct-label,.ct-chart .ct-label.ct-horizontal{display:block;width:100%;height:100%;fill:rgba(0,0,0,.4);color:rgba(0,0,0,.4);font-size:.75rem;text-align:left}.ct-chart .ct-label.ct-vertical{display:block;width:100%;height:100%;fill:rgba(0,0,0,.4);color:rgba(0,0,0,.4);font-size:.75rem;text-align:right}.ct-chart .ct-grid{stroke:rgba(0,0,0,.2);stroke-width:1px;stroke-dasharray:2px}.ct-chart .ct-point{stroke-width:10px;stroke-linecap:round}.ct-chart .ct-line{fill:none;stroke-width:4px}.ct-chart .ct-area{stroke:none;fill-opacity:.1}.ct-chart .ct-bar{fill:none;stroke-width:10px}.ct-chart .ct-slice.ct-donut{fill:none;stroke-width:60px}.ct-chart .ct-series.ct-series-a .ct-bar,.ct-chart .ct-series.ct-series-a .ct-line,.ct-chart .ct-series.ct-series-a .ct-point,.ct-chart .ct-series.ct-series-a .ct-slice.ct-donut{stroke:#d70206}.ct-chart .ct-series.ct-series-a .ct-area,.ct-chart .ct-series.ct-series-a .ct-slice:not(.ct-donut){fill:#d70206}.ct-chart .ct-series.ct-series-b .ct-bar,.ct-chart .ct-series.ct-series-b .ct-line,.ct-chart .ct-series.ct-series-b .ct-point,.ct-chart .ct-series.ct-series-b .ct-slice.ct-donut{stroke:#f05b4f}.ct-chart .ct-series.ct-series-b .ct-area,.ct-chart .ct-series.ct-series-b .ct-slice:not(.ct-donut){fill:#f05b4f}.ct-chart .ct-series.ct-series-c .ct-bar,.ct-chart .ct-series.ct-series-c .ct-line,.ct-chart .ct-series.ct-series-c .ct-point,.ct-chart .ct-series.ct-series-c .ct-slice.ct-donut{stroke:#f4c63d}.ct-chart .ct-series.ct-series-c .ct-area,.ct-chart .ct-series.ct-series-c .ct-slice:not(.ct-donut){fill:#f4c63d}.ct-chart .ct-series.ct-series-d .ct-bar,.ct-chart .ct-series.ct-series-d .ct-line,.ct-chart .ct-series.ct-series-d .ct-point,.ct-chart .ct-series.ct-series-d .ct-slice.ct-donut{stroke:#d17905}.ct-chart .ct-series.ct-series-d .ct-area,.ct-chart .ct-series.ct-series-d .ct-slice:not(.ct-donut){fill:#d17905}.ct-chart .ct-series.ct-series-e .ct-bar,.ct-chart .ct-series.ct-series-e .ct-line,.ct-chart .ct-series.ct-series-e .ct-point,.ct-chart .ct-series.ct-series-e .ct-slice.ct-donut{stroke:#453d3f}.ct-chart .ct-series.ct-series-e .ct-area,.ct-chart .ct-series.ct-series-e .ct-slice:not(.ct-donut){fill:#453d3f}.ct-chart .ct-series.ct-series-f .ct-bar,.ct-chart .ct-series.ct-series-f .ct-line,.ct-chart .ct-series.ct-series-f .ct-point,.ct-chart .ct-series.ct-series-f .ct-slice.ct-donut{stroke:#59922b}.ct-chart .ct-series.ct-series-f .ct-area,.ct-chart .ct-series.ct-series-f .ct-slice:not(.ct-donut){fill:#59922b}.ct-chart .ct-series.ct-series-g .ct-bar,.ct-chart .ct-series.ct-series-g .ct-line,.ct-chart .ct-series.ct-series-g .ct-point,.ct-chart .ct-series.ct-series-g .ct-slice.ct-donut{stroke:#0544d3}.ct-chart .ct-series.ct-series-g .ct-area,.ct-chart .ct-series.ct-series-g .ct-slice:not(.ct-donut){fill:#0544d3}.ct-chart .ct-series.ct-series-h .ct-bar,.ct-chart .ct-series.ct-series-h .ct-line,.ct-chart .ct-series.ct-series-h .ct-point,.ct-chart .ct-series.ct-series-h .ct-slice.ct-donut{stroke:#6b0392}.ct-chart .ct-series.ct-series-h .ct-area,.ct-chart .ct-series.ct-series-h .ct-slice:not(.ct-donut){fill:#6b0392}.ct-chart .ct-series.ct-series-i .ct-bar,.ct-chart .ct-series.ct-series-i .ct-line,.ct-chart .ct-series.ct-series-i .ct-point,.ct-chart .ct-series.ct-series-i .ct-slice.ct-donut{stroke:#f05b4f}.ct-chart .ct-series.ct-series-i .ct-area,.ct-chart .ct-series.ct-series-i .ct-slice:not(.ct-donut){fill:#f05b4f}.ct-chart .ct-series.ct-series-j .ct-bar,.ct-chart .ct-series.ct-series-j .ct-line,.ct-chart .ct-series.ct-series-j .ct-point,.ct-chart .ct-series.ct-series-j .ct-slice.ct-donut{stroke:#dda458}.ct-chart .ct-series.ct-series-j .ct-area,.ct-chart .ct-series.ct-series-j .ct-slice:not(.ct-donut){fill:#dda458}.ct-chart .ct-series.ct-series-k .ct-bar,.ct-chart .ct-series.ct-series-k .ct-line,.ct-chart .ct-series.ct-series-k .ct-point,.ct-chart .ct-series.ct-series-k .ct-slice.ct-donut{stroke:#eacf7d}.ct-chart .ct-series.ct-series-k .ct-area,.ct-chart .ct-series.ct-series-k .ct-slice:not(.ct-donut){fill:#eacf7d}.ct-chart .ct-series.ct-series-l .ct-bar,.ct-chart .ct-series.ct-series-l .ct-line,.ct-chart .ct-series.ct-series-l .ct-point,.ct-chart .ct-series.ct-series-l .ct-slice.ct-donut{stroke:#86797d}.ct-chart .ct-series.ct-series-l .ct-area,.ct-chart .ct-series.ct-series-l .ct-slice:not(.ct-donut){fill:#86797d}.ct-chart .ct-series.ct-series-m .ct-bar,.ct-chart .ct-series.ct-series-m .ct-line,.ct-chart .ct-series.ct-series-m .ct-point,.ct-chart .ct-series.ct-series-m .ct-slice.ct-donut{stroke:#b2c326}.ct-chart .ct-series.ct-series-m .ct-area,.ct-chart .ct-series.ct-series-m .ct-slice:not(.ct-donut){fill:#b2c326}.ct-chart .ct-series.ct-series-n .ct-bar,.ct-chart .ct-series.ct-series-n .ct-line,.ct-chart .ct-series.ct-series-n .ct-point,.ct-chart .ct-series.ct-series-n .ct-slice.ct-donut{stroke:#6188e2}.ct-chart .ct-series.ct-series-n .ct-area,.ct-chart .ct-series.ct-series-n .ct-slice:not(.ct-donut){fill:#6188e2}.ct-chart .ct-series.ct-series-o .ct-bar,.ct-chart .ct-series.ct-series-o .ct-line,.ct-chart .ct-series.ct-series-o .ct-point,.ct-chart .ct-series.ct-series-o .ct-slice.ct-donut{stroke:#a748ca}.ct-chart .ct-series.ct-series-o .ct-area,.ct-chart .ct-series.ct-series-o .ct-slice:not(.ct-donut){fill:#a748ca}.ct-chart.ct-square{display:block;position:relative;width:100%}.ct-chart.ct-square:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:100%}.ct-chart.ct-square:after{content:"";display:table;clear:both}.ct-chart.ct-square>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-minor-second{display:block;position:relative;width:100%}.ct-chart.ct-minor-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:93.75%}.ct-chart.ct-minor-second:after{content:"";display:table;clear:both}.ct-chart.ct-minor-second>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-major-second{display:block;position:relative;width:100%}.ct-chart.ct-major-second:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:88.8888888889%}.ct-chart.ct-major-second:after{content:"";display:table;clear:both}.ct-chart.ct-major-second>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-minor-third{display:block;position:relative;width:100%}.ct-chart.ct-minor-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:83.3333333333%}.ct-chart.ct-minor-third:after{content:"";display:table;clear:both}.ct-chart.ct-minor-third>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-major-third{display:block;position:relative;width:100%}.ct-chart.ct-major-third:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:80%}.ct-chart.ct-major-third:after{content:"";display:table;clear:both}.ct-chart.ct-major-third>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-perfect-fourth{display:block;position:relative;width:100%}.ct-chart.ct-perfect-fourth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:75%}.ct-chart.ct-perfect-fourth:after{content:"";display:table;clear:both}.ct-chart.ct-perfect-fourth>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-perfect-fifth{display:block;position:relative;width:100%}.ct-chart.ct-perfect-fifth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:66.6666666667%}.ct-chart.ct-perfect-fifth:after{content:"";display:table;clear:both}.ct-chart.ct-perfect-fifth>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-minor-sixth{display:block;position:relative;width:100%}.ct-chart.ct-minor-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:62.5%}.ct-chart.ct-minor-sixth:after{content:"";display:table;clear:both}.ct-chart.ct-minor-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-golden-section{display:block;position:relative;width:100%}.ct-chart.ct-golden-section:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:61.804697157%}.ct-chart.ct-golden-section:after{content:"";display:table;clear:both}.ct-chart.ct-golden-section>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-major-sixth{display:block;position:relative;width:100%}.ct-chart.ct-major-sixth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:60%}.ct-chart.ct-major-sixth:after{content:"";display:table;clear:both}.ct-chart.ct-major-sixth>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-minor-seventh{display:block;position:relative;width:100%}.ct-chart.ct-minor-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:56.25%}.ct-chart.ct-minor-seventh:after{content:"";display:table;clear:both}.ct-chart.ct-minor-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-major-seventh{display:block;position:relative;width:100%}.ct-chart.ct-major-seventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:53.3333333333%}.ct-chart.ct-major-seventh:after{content:"";display:table;clear:both}.ct-chart.ct-major-seventh>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-octave{display:block;position:relative;width:100%}.ct-chart.ct-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:50%}.ct-chart.ct-octave:after{content:"";display:table;clear:both}.ct-chart.ct-octave>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-major-tenth{display:block;position:relative;width:100%}.ct-chart.ct-major-tenth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:40%}.ct-chart.ct-major-tenth:after{content:"";display:table;clear:both}.ct-chart.ct-major-tenth>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-major-eleventh{display:block;position:relative;width:100%}.ct-chart.ct-major-eleventh:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:37.5%}.ct-chart.ct-major-eleventh:after{content:"";display:table;clear:both}.ct-chart.ct-major-eleventh>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-major-twelfth{display:block;position:relative;width:100%}.ct-chart.ct-major-twelfth:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:33.3333333333%}.ct-chart.ct-major-twelfth:after{content:"";display:table;clear:both}.ct-chart.ct-major-twelfth>svg{display:block;position:absolute;top:0;left:0}.ct-chart.ct-double-octave{display:block;position:relative;width:100%}.ct-chart.ct-double-octave:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:25%}.ct-chart.ct-double-octave:after{content:"";display:table;clear:both}.ct-chart.ct-double-octave>svg{display:block;position:absolute;top:0;left:0} \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/specification/README.md b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/README.md new file mode 100644 index 0000000000..c6ba9ff371 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/README.md @@ -0,0 +1,14 @@ +SharpZipLib Specifications +========================== + +| Spec | Title |Version| +|:------:|:----------------------------------------------------|-------| +|[bzip2 Manual](bzip2-manual-1.0.5.html)|Manual for bzip2 and libbzip2|1.0.5| +|[RFC 1950](rfc1950.txt)|ZLIB Compressed Data Format Specification|3.3| +|[RFC 1951](rfc1951.txt)|DEFLATE Compressed Data Format Specification|1.3| +|[RFC 1952](rfc1952.txt)|GZIP file format specification|4.3| +|[gzip format](format.txt)|Provides additional information not in the RFCs|| +|[gzip algorithm](algorithm.txt)|Brief description of the algorithms used by gzip|| +|[tar chapter 8](tar_8.html)|GNU tar manual, "Controlling the Archive Format"|1.28| +|[tar appendix d](tar_14.html)|GNU tar manual, "Tar Internals"|1.28| +|[zip appnote](appnote.txt)|ZIP File Format Specification|6.3.4| diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/specification/algorithm.txt b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/algorithm.txt new file mode 100644 index 0000000000..3e8bf876fe --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/algorithm.txt @@ -0,0 +1,213 @@ +1. Compression algorithm (deflate) + +The deflation algorithm used by gzip (also zip and zlib) is a variation of +LZ77 (Lempel-Ziv 1977, see reference below). It finds duplicated strings in +the input data. The second occurrence of a string is replaced by a +pointer to the previous string, in the form of a pair (distance, +length). Distances are limited to 32K bytes, and lengths are limited +to 258 bytes. When a string does not occur anywhere in the previous +32K bytes, it is emitted as a sequence of literal bytes. (In this +description, `string' must be taken as an arbitrary sequence of bytes, +and is not restricted to printable characters.) + +Literals or match lengths are compressed with one Huffman tree, and +match distances are compressed with another tree. The trees are stored +in a compact form at the start of each block. The blocks can have any +size (except that the compressed data for one block must fit in +available memory). A block is terminated when deflate() determines that +it would be useful to start another block with fresh trees. (This is +somewhat similar to the behavior of LZW-based _compress_.) + +Duplicated strings are found using a hash table. All input strings of +length 3 are inserted in the hash table. A hash index is computed for +the next 3 bytes. If the hash chain for this index is not empty, all +strings in the chain are compared with the current input string, and +the longest match is selected. + +The hash chains are searched starting with the most recent strings, to +favor small distances and thus take advantage of the Huffman encoding. +The hash chains are singly linked. There are no deletions from the +hash chains, the algorithm simply discards matches that are too old. + +To avoid a worst-case situation, very long hash chains are arbitrarily +truncated at a certain length, determined by a runtime option (level +parameter of deflateInit). So deflate() does not always find the longest +possible match but generally finds a match which is long enough. + +deflate() also defers the selection of matches with a lazy evaluation +mechanism. After a match of length N has been found, deflate() searches for +a longer match at the next input byte. If a longer match is found, the +previous match is truncated to a length of one (thus producing a single +literal byte) and the process of lazy evaluation begins again. Otherwise, +the original match is kept, and the next match search is attempted only N +steps later. + +The lazy match evaluation is also subject to a runtime parameter. If +the current match is long enough, deflate() reduces the search for a longer +match, thus speeding up the whole process. If compression ratio is more +important than speed, deflate() attempts a complete second search even if +the first match is already long enough. + +The lazy match evaluation is not performed for the fastest compression +modes (level parameter 1 to 3). For these fast modes, new strings +are inserted in the hash table only when no match was found, or +when the match is not too long. This degrades the compression ratio +but saves time since there are both fewer insertions and fewer searches. + + +2. Decompression algorithm (inflate) + +2.1 Introduction + +The real question is, given a Huffman tree, how to decode fast. The most +important realization is that shorter codes are much more common than +longer codes, so pay attention to decoding the short codes fast, and let +the long codes take longer to decode. + +inflate() sets up a first level table that covers some number of bits of +input less than the length of longest code. It gets that many bits from the +stream, and looks it up in the table. The table will tell if the next +code is that many bits or less and how many, and if it is, it will tell +the value, else it will point to the next level table for which inflate() +grabs more bits and tries to decode a longer code. + +How many bits to make the first lookup is a tradeoff between the time it +takes to decode and the time it takes to build the table. If building the +table took no time (and if you had infinite memory), then there would only +be a first level table to cover all the way to the longest code. However, +building the table ends up taking a lot longer for more bits since short +codes are replicated many times in such a table. What inflate() does is +simply to make the number of bits in the first table a variable, and set it +for the maximum speed. + +inflate() sends new trees relatively often, so it is possibly set for a +smaller first level table than an application that has only one tree for +all the data. For inflate, which has 286 possible codes for the +literal/length tree, the size of the first table is nine bits. Also the +distance trees have 30 possible values, and the size of the first table is +six bits. Note that for each of those cases, the table ended up one bit +longer than the ``average'' code length, i.e. the code length of an +approximately flat code which would be a little more than eight bits for +286 symbols and a little less than five bits for 30 symbols. It would be +interesting to see if optimizing the first level table for other +applications gave values within a bit or two of the flat code size. + + +2.2 More details on the inflate table lookup + +Ok, you want to know what this cleverly obfuscated inflate tree actually +looks like. You are correct that it's not a Huffman tree. It is simply a +lookup table for the first, let's say, nine bits of a Huffman symbol. The +symbol could be as short as one bit or as long as 15 bits. If a particular +symbol is shorter than nine bits, then that symbol's translation is duplicated +in all those entries that start with that symbol's bits. For example, if the +symbol is four bits, then it's duplicated 32 times in a nine-bit table. If a +symbol is nine bits long, it appears in the table once. + +If the symbol is longer than nine bits, then that entry in the table points +to another similar table for the remaining bits. Again, there are duplicated +entries as needed. The idea is that most of the time the symbol will be short +and there will only be one table look up. (That's whole idea behind data +compression in the first place.) For the less frequent long symbols, there +will be two lookups. If you had a compression method with really long +symbols, you could have as many levels of lookups as is efficient. For +inflate, two is enough. + +So a table entry either points to another table (in which case nine bits in +the above example are gobbled), or it contains the translation for the symbol +and the number of bits to gobble. Then you start again with the next +ungobbled bit. + +You may wonder: why not just have one lookup table for how ever many bits the +longest symbol is? The reason is that if you do that, you end up spending +more time filling in duplicate symbol entries than you do actually decoding. +At least for deflate's output that generates new trees every several 10's of +kbytes. You can imagine that filling in a 2^15 entry table for a 15-bit code +would take too long if you're only decoding several thousand symbols. At the +other extreme, you could make a new table for every bit in the code. In fact, +that's essentially a Huffman tree. But then you spend two much time +traversing the tree while decoding, even for short symbols. + +So the number of bits for the first lookup table is a trade of the time to +fill out the table vs. the time spent looking at the second level and above of +the table. + +Here is an example, scaled down: + +The code being decoded, with 10 symbols, from 1 to 6 bits long: + +A: 0 +B: 10 +C: 1100 +D: 11010 +E: 11011 +F: 11100 +G: 11101 +H: 11110 +I: 111110 +J: 111111 + +Let's make the first table three bits long (eight entries): + +000: A,1 +001: A,1 +010: A,1 +011: A,1 +100: B,2 +101: B,2 +110: -> table X (gobble 3 bits) +111: -> table Y (gobble 3 bits) + +Each entry is what the bits decode to and how many bits that is, i.e. how +many bits to gobble. Or the entry points to another table, with the number of +bits to gobble implicit in the size of the table. + +Table X is two bits long since the longest code starting with 110 is five bits +long: + +00: C,1 +01: C,1 +10: D,2 +11: E,2 + +Table Y is three bits long since the longest code starting with 111 is six +bits long: + +000: F,2 +001: F,2 +010: G,2 +011: G,2 +100: H,2 +101: H,2 +110: I,3 +111: J,3 + +So what we have here are three tables with a total of 20 entries that had to +be constructed. That's compared to 64 entries for a single table. Or +compared to 16 entries for a Huffman tree (six two entry tables and one four +entry table). Assuming that the code ideally represents the probability of +the symbols, it takes on the average 1.25 lookups per symbol. That's compared +to one lookup for the single table, or 1.66 lookups per symbol for the +Huffman tree. + +There, I think that gives you a picture of what's going on. For inflate, the +meaning of a particular symbol is often more than just a letter. It can be a +byte (a "literal"), or it can be either a length or a distance which +indicates a base value and a number of bits to fetch after the code that is +added to the base value. Or it might be the special end-of-block code. The +data structures created in inftrees.c try to encode all that information +compactly in the tables. + + +Jean-loup Gailly Mark Adler +gzip@prep.ai.mit.edu madler@alumni.caltech.edu + + +References: + +[LZ77] Ziv J., Lempel A., ``A Universal Algorithm for Sequential Data +Compression,'' IEEE Transactions on Information Theory, Vol. 23, No. 3, +pp. 337-343. + +``DEFLATE Compressed Data Format Specification'' available in +ftp://ds.internic.net/rfc/rfc1951.txt diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/specification/appnote.txt.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/appnote.txt.REMOVED.git-id new file mode 100644 index 0000000000..cb88969abd --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/appnote.txt.REMOVED.git-id @@ -0,0 +1 @@ +8cf4bb73a75eb4a518c130afcb365d71292b593b \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/specification/bzip2-manual-1.0.5.html.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/bzip2-manual-1.0.5.html.REMOVED.git-id new file mode 100644 index 0000000000..69452ccca3 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/bzip2-manual-1.0.5.html.REMOVED.git-id @@ -0,0 +1 @@ +bd9eac85914e905ab2bba64290bf96594d840314 \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/specification/format.txt b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/format.txt new file mode 100644 index 0000000000..290820505f --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/format.txt @@ -0,0 +1,168 @@ + The gzip file format + +The data format used by gzip is described by RFCs (Request for Comments) +1951 and 1952 in the files http://www.ietf.org/rfc/rfc1951.txt (deflate +format) and rfc1952.txt (gzip format). These documents are also available in +other formats from ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html + +This file provides additional information not provided in the RFCs. The +RFCs must be read first. + +The format was designed to allow single pass compression without any +backwards seek, and without a priori knowledge of the uncompressed +input size or the available size on the output media. If input does +not come from a regular disk file, the file modification time is set +to the time at which compression started. + +The gzip format allows multiple compression methods (although gzip +currently supports only the 'deflate' method). It must be possible to +detect the end of the compressed data with any compression method, +regardless of the actual size of the compressed data. In particular, +the decompressor must be able to detect and skip extra data appended +to a valid compressed file on a record-oriented file system, or when +the compressed data can only be read from a device in multiples of a +certain block size. (This condition is not fulfilled by the 'compress' +program, which has no way of determining the end of compressed data +from the data itself.) + +gzip emits a warning when detecting trailing garbage, except when +the --quiet option is used, or when the trailing garbage starts with +a zero byte. The latter case is not flagged as a warning to help +"tar --gzip" and file transfers from record oriented systems, which +can both append zeroes to a valid .gz file. [The zero byte feature is +not present in gzip 1.2.4] + +The time stamp is useful mainly when one gzip file is transferred over +a network. In this case it would not help to keep ownership +attributes. In the local case, the ownership attributes are preserved +by gzip when compressing/decompressing the file. A time stamp of zero +is ignored. + +Compression is always performed, even if the compressed file is +slightly larger than the original. The worst case expansion is +a few bytes for the gzip file header, plus 5 bytes every 32K block, +or an expansion ratio of 0.015% for large files. Note that the actual +number of used disk blocks almost never increases. + +OS codes: + +The following codes are defined; they are the same as those used by +zip & unzip http://www.info-zip.org, see unzpriv.h in the unzip package. + + 0 - FAT file system (DOS, OS/2, NT) + PKZIPW 2.50 VFAT, NTFS + 1 - Amiga + 2 - VMS (VAX or Alpha AXP) + 3 - Unix + 4 - VM/CMS + 5 - Atari + 6 - HPFS file system (OS/2, NT 3.x) + 7 - Macintosh + 8 - Z-System + 9 - CP/M + 10 - TOPS-20 + 11 - NTFS file system (NT) + 12 - SMS/QDOS + 13 - Acorn RISC OS + 14 - VFAT file system (Win95, NT) + 15 - MVS (code also taken for PRIMOS) + 16 - BeOS (BeBox or PowerMac) + 17 - Tandem/NSK + 18 - THEOS + +Extra fields: + +The following extra-field ids are currently defined (send requests for +other ids to support@gzip.org). See appendix A for the details. + + AC (0x41, 0x43) : Acorn RISC OS/BBC MOS file type information + Kevin Bracey + Ap (0x41, 0x70) : Apollo file type information + David Sundstrom + cp (0x63, 0x70) : file compressed by cpio + Geoffrey Dairiki + GS (0x1D, 0x53) : gzsig + http://www.monkey.org/~dugsong/gzsig-0.1.tar.gz + Dug Song + KN (0x4b, 0x4e) : KeyNote assertion (RFC 2704) + http://www.cis.upenn.edu/~keynote/ + Dug Song + Mc (0x4d, 0x63) : Macintosh info (Type and Creator values) + Cary Scofield + RO (0x52, 0x4F) : Acorn Risc OS file type information + Adam Goodfellow + +Jean-loup Gailly +jloup@gzip.org + +last modification: 2 July 2002 + + +Appendix A. Description of the extra-fields + +A.1) Acorn RISC OS extra field + + AC (0x41, 0x43) : Acorn RISC OS/BBC MOS file type information + Kevin Bracey + +The AC subfield is 28 bytes long, consisting of 7 little-endian 32-bit +words: + + Word 0: Load address (OS_File 5 R2) + Word 1: Execution address (OS_File 5 R3) + Word 2: Object attributes (OS_File 5 R5) + Word 3: Object length (OS_File 5 R4) + Words 4-6: reserved (0) + +The notes in brackets show how these values correspond to the output of the +RISC OS call OS_File 5 ("Read catalogue information for a named object"). + +Object attributes is a bitfield: + + bit 0 Object has owner read access + bit 1 Object has owner write acces + bit 2 Reserved (0) + bit 3 Object is locked against deletion + bit 4 Object has public read access + bit 5 Object has public write access + bits 6-31 Reserved (0) + +The load and execution addresses say where to load the file into memory, and +where the entry point is (if it is run as an executable). They are very +rarely actually used for that now - this dates back to the days of the BBC +micro (1980-87). Instead they usually store filetype and date stamp +information: + + Load address 0xFFFtttdd + Execution address 0xdddddddd + +The FFF at the top of the load address is a magic marker saying that the +rest of the fields contain the filetype (ttt) and timestamp (dddddddddd). + +The timestamp is a 40-bit unsigned number which is the number of centiseconds +since 00:00:00 on 1st January 1900 (UTC). The most significant byte +is in the load address. + +Filetypes are allocated by Acorn. Allocations include: + + FFF Text + FFD Data + FFB BASIC program + FF8 Absolute (executable to be loaded and entered at 0x8000) + FF5 Postscript + FAF HTML + F83 MNG + F89 gzip + C85 JPEG + C46 Tar + B60 PNG + AE4 Java class file + ADF PDF + 695 GIF + + +A.2) cpio extra-field + + cp (0x63, 0x70) : file compressed by cpio + Geoffrey Dairiki + + 2 extra bytes: length of FNAME field diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/specification/rfc-deflate.txt b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/rfc-deflate.txt new file mode 100644 index 0000000000..403c8c722f --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/rfc-deflate.txt @@ -0,0 +1,955 @@ + + + + + + +Network Working Group P. Deutsch +Request for Comments: 1951 Aladdin Enterprises +Category: Informational May 1996 + + + DEFLATE Compressed Data Format Specification version 1.3 + +Status of This Memo + + This memo provides information for the Internet community. This memo + does not specify an Internet standard of any kind. Distribution of + this memo is unlimited. + +IESG Note: + + The IESG takes no position on the validity of any Intellectual + Property Rights statements contained in this document. + +Notices + + Copyright (c) 1996 L. Peter Deutsch + + Permission is granted to copy and distribute this document for any + purpose and without charge, including translations into other + languages and incorporation into compilations, provided that the + copyright notice and this notice are preserved, and that any + substantive changes or deletions from the original are clearly + marked. + + A pointer to the latest version of this and related documentation in + HTML format can be found at the URL + . + +Abstract + + This specification defines a lossless compressed data format that + compresses data using a combination of the LZ77 algorithm and Huffman + coding, with efficiency comparable to the best currently available + general-purpose compression methods. The data can be produced or + consumed, even for an arbitrarily long sequentially presented input + data stream, using only an a priori bounded amount of intermediate + storage. The format can be implemented readily in a manner not + covered by patents. + + + + + + + + +Deutsch Informational [Page 1] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +Table of Contents + + 1. Introduction ................................................... 2 + 1.1. Purpose ................................................... 2 + 1.2. Intended audience ......................................... 3 + 1.3. Scope ..................................................... 3 + 1.4. Compliance ................................................ 3 + 1.5. Definitions of terms and conventions used ................ 3 + 1.6. Changes from previous versions ............................ 4 + 2. Compressed representation overview ............................. 4 + 3. Detailed specification ......................................... 5 + 3.1. Overall conventions ....................................... 5 + 3.1.1. Packing into bytes .................................. 5 + 3.2. Compressed block format ................................... 6 + 3.2.1. Synopsis of prefix and Huffman coding ............... 6 + 3.2.2. Use of Huffman coding in the "deflate" format ....... 7 + 3.2.3. Details of block format ............................. 9 + 3.2.4. Non-compressed blocks (BTYPE=00) ................... 11 + 3.2.5. Compressed blocks (length and distance codes) ...... 11 + 3.2.6. Compression with fixed Huffman codes (BTYPE=01) .... 12 + 3.2.7. Compression with dynamic Huffman codes (BTYPE=10) .. 13 + 3.3. Compliance ............................................... 14 + 4. Compression algorithm details ................................. 14 + 5. References .................................................... 16 + 6. Security Considerations ....................................... 16 + 7. Source code ................................................... 16 + 8. Acknowledgements .............................................. 16 + 9. Author's Address .............................................. 17 + +1. Introduction + + 1.1. Purpose + + The purpose of this specification is to define a lossless + compressed data format that: + * Is independent of CPU type, operating system, file system, + and character set, and hence can be used for interchange; + * Can be produced or consumed, even for an arbitrarily long + sequentially presented input data stream, using only an a + priori bounded amount of intermediate storage, and hence + can be used in data communications or similar structures + such as Unix filters; + * Compresses data with efficiency comparable to the best + currently available general-purpose compression methods, + and in particular considerably better than the "compress" + program; + * Can be implemented readily in a manner not covered by + patents, and hence can be practiced freely; + + + +Deutsch Informational [Page 2] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + * Is compatible with the file format produced by the current + widely used gzip utility, in that conforming decompressors + will be able to read data produced by the existing gzip + compressor. + + The data format defined by this specification does not attempt to: + + * Allow random access to compressed data; + * Compress specialized data (e.g., raster graphics) as well + as the best currently available specialized algorithms. + + A simple counting argument shows that no lossless compression + algorithm can compress every possible input data set. For the + format defined here, the worst case expansion is 5 bytes per 32K- + byte block, i.e., a size increase of 0.015% for large data sets. + English text usually compresses by a factor of 2.5 to 3; + executable files usually compress somewhat less; graphical data + such as raster images may compress much more. + + 1.2. Intended audience + + This specification is intended for use by implementors of software + to compress data into "deflate" format and/or decompress data from + "deflate" format. + + The text of the specification assumes a basic background in + programming at the level of bits and other primitive data + representations. Familiarity with the technique of Huffman coding + is helpful but not required. + + 1.3. Scope + + The specification specifies a method for representing a sequence + of bytes as a (usually shorter) sequence of bits, and a method for + packing the latter bit sequence into bytes. + + 1.4. Compliance + + Unless otherwise indicated below, a compliant decompressor must be + able to accept and decompress any data set that conforms to all + the specifications presented here; a compliant compressor must + produce data sets that conform to all the specifications presented + here. + + 1.5. Definitions of terms and conventions used + + Byte: 8 bits stored or transmitted as a unit (same as an octet). + For this specification, a byte is exactly 8 bits, even on machines + + + +Deutsch Informational [Page 3] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + which store a character on a number of bits different from eight. + See below, for the numbering of bits within a byte. + + String: a sequence of arbitrary bytes. + + 1.6. Changes from previous versions + + There have been no technical changes to the deflate format since + version 1.1 of this specification. In version 1.2, some + terminology was changed. Version 1.3 is a conversion of the + specification to RFC style. + +2. Compressed representation overview + + A compressed data set consists of a series of blocks, corresponding + to successive blocks of input data. The block sizes are arbitrary, + except that non-compressible blocks are limited to 65,535 bytes. + + Each block is compressed using a combination of the LZ77 algorithm + and Huffman coding. The Huffman trees for each block are independent + of those for previous or subsequent blocks; the LZ77 algorithm may + use a reference to a duplicated string occurring in a previous block, + up to 32K input bytes before. + + Each block consists of two parts: a pair of Huffman code trees that + describe the representation of the compressed data part, and a + compressed data part. (The Huffman trees themselves are compressed + using Huffman encoding.) The compressed data consists of a series of + elements of two types: literal bytes (of strings that have not been + detected as duplicated within the previous 32K input bytes), and + pointers to duplicated strings, where a pointer is represented as a + pair . The representation used in the + "deflate" format limits distances to 32K bytes and lengths to 258 + bytes, but does not limit the size of a block, except for + uncompressible blocks, which are limited as noted above. + + Each type of value (literals, distances, and lengths) in the + compressed data is represented using a Huffman code, using one code + tree for literals and lengths and a separate code tree for distances. + The code trees for each block appear in a compact form just before + the compressed data for that block. + + + + + + + + + + +Deutsch Informational [Page 4] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +3. Detailed specification + + 3.1. Overall conventions In the diagrams below, a box like this: + + +---+ + | | <-- the vertical bars might be missing + +---+ + + represents one byte; a box like this: + + +==============+ + | | + +==============+ + + represents a variable number of bytes. + + Bytes stored within a computer do not have a "bit order", since + they are always treated as a unit. However, a byte considered as + an integer between 0 and 255 does have a most- and least- + significant bit, and since we write numbers with the most- + significant digit on the left, we also write bytes with the most- + significant bit on the left. In the diagrams below, we number the + bits of a byte so that bit 0 is the least-significant bit, i.e., + the bits are numbered: + + +--------+ + |76543210| + +--------+ + + Within a computer, a number may occupy multiple bytes. All + multi-byte numbers in the format described here are stored with + the least-significant byte first (at the lower memory address). + For example, the decimal number 520 is stored as: + + 0 1 + +--------+--------+ + |00001000|00000010| + +--------+--------+ + ^ ^ + | | + | + more significant byte = 2 x 256 + + less significant byte = 8 + + 3.1.1. Packing into bytes + + This document does not address the issue of the order in which + bits of a byte are transmitted on a bit-sequential medium, + since the final data format described here is byte- rather than + + + +Deutsch Informational [Page 5] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + bit-oriented. However, we describe the compressed block format + in below, as a sequence of data elements of various bit + lengths, not a sequence of bytes. We must therefore specify + how to pack these data elements into bytes to form the final + compressed byte sequence: + + * Data elements are packed into bytes in order of + increasing bit number within the byte, i.e., starting + with the least-significant bit of the byte. + * Data elements other than Huffman codes are packed + starting with the least-significant bit of the data + element. + * Huffman codes are packed starting with the most- + significant bit of the code. + + In other words, if one were to print out the compressed data as + a sequence of bytes, starting with the first byte at the + *right* margin and proceeding to the *left*, with the most- + significant bit of each byte on the left as usual, one would be + able to parse the result from right to left, with fixed-width + elements in the correct MSB-to-LSB order and Huffman codes in + bit-reversed order (i.e., with the first bit of the code in the + relative LSB position). + + 3.2. Compressed block format + + 3.2.1. Synopsis of prefix and Huffman coding + + Prefix coding represents symbols from an a priori known + alphabet by bit sequences (codes), one code for each symbol, in + a manner such that different symbols may be represented by bit + sequences of different lengths, but a parser can always parse + an encoded string unambiguously symbol-by-symbol. + + We define a prefix code in terms of a binary tree in which the + two edges descending from each non-leaf node are labeled 0 and + 1 and in which the leaf nodes correspond one-for-one with (are + labeled with) the symbols of the alphabet; then the code for a + symbol is the sequence of 0's and 1's on the edges leading from + the root to the leaf labeled with that symbol. For example: + + + + + + + + + + + +Deutsch Informational [Page 6] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + /\ Symbol Code + 0 1 ------ ---- + / \ A 00 + /\ B B 1 + 0 1 C 011 + / \ D 010 + A /\ + 0 1 + / \ + D C + + A parser can decode the next symbol from an encoded input + stream by walking down the tree from the root, at each step + choosing the edge corresponding to the next input bit. + + Given an alphabet with known symbol frequencies, the Huffman + algorithm allows the construction of an optimal prefix code + (one which represents strings with those symbol frequencies + using the fewest bits of any possible prefix codes for that + alphabet). Such a code is called a Huffman code. (See + reference [1] in Chapter 5, references for additional + information on Huffman codes.) + + Note that in the "deflate" format, the Huffman codes for the + various alphabets must not exceed certain maximum code lengths. + This constraint complicates the algorithm for computing code + lengths from symbol frequencies. Again, see Chapter 5, + references for details. + + 3.2.2. Use of Huffman coding in the "deflate" format + + The Huffman codes used for each alphabet in the "deflate" + format have two additional rules: + + * All codes of a given bit length have lexicographically + consecutive values, in the same order as the symbols + they represent; + + * Shorter codes lexicographically precede longer codes. + + + + + + + + + + + + +Deutsch Informational [Page 7] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + We could recode the example above to follow this rule as + follows, assuming that the order of the alphabet is ABCD: + + Symbol Code + ------ ---- + A 10 + B 0 + C 110 + D 111 + + I.e., 0 precedes 10 which precedes 11x, and 110 and 111 are + lexicographically consecutive. + + Given this rule, we can define the Huffman code for an alphabet + just by giving the bit lengths of the codes for each symbol of + the alphabet in order; this is sufficient to determine the + actual codes. In our example, the code is completely defined + by the sequence of bit lengths (2, 1, 3, 3). The following + algorithm generates the codes as integers, intended to be read + from most- to least-significant bit. The code lengths are + initially in tree[I].Len; the codes are produced in + tree[I].Code. + + 1) Count the number of codes for each code length. Let + bl_count[N] be the number of codes of length N, N >= 1. + + 2) Find the numerical value of the smallest code for each + code length: + + code = 0; + bl_count[0] = 0; + for (bits = 1; bits <= MAX_BITS; bits++) { + code = (code + bl_count[bits-1]) << 1; + next_code[bits] = code; + } + + 3) Assign numerical values to all codes, using consecutive + values for all codes of the same length with the base + values determined at step 2. Codes that are never used + (which have a bit length of zero) must not be assigned a + value. + + for (n = 0; n <= max_code; n++) { + len = tree[n].Len; + if (len != 0) { + tree[n].Code = next_code[len]; + next_code[len]++; + } + + + +Deutsch Informational [Page 8] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + } + + Example: + + Consider the alphabet ABCDEFGH, with bit lengths (3, 3, 3, 3, + 3, 2, 4, 4). After step 1, we have: + + N bl_count[N] + - ----------- + 2 1 + 3 5 + 4 2 + + Step 2 computes the following next_code values: + + N next_code[N] + - ------------ + 1 0 + 2 0 + 3 2 + 4 14 + + Step 3 produces the following code values: + + Symbol Length Code + ------ ------ ---- + A 3 010 + B 3 011 + C 3 100 + D 3 101 + E 3 110 + F 2 00 + G 4 1110 + H 4 1111 + + 3.2.3. Details of block format + + Each block of compressed data begins with 3 header bits + containing the following data: + + first bit BFINAL + next 2 bits BTYPE + + Note that the header bits do not necessarily begin on a byte + boundary, since a block does not necessarily occupy an integral + number of bytes. + + + + + +Deutsch Informational [Page 9] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + BFINAL is set if and only if this is the last block of the data + set. + + BTYPE specifies how the data are compressed, as follows: + + 00 - no compression + 01 - compressed with fixed Huffman codes + 10 - compressed with dynamic Huffman codes + 11 - reserved (error) + + The only difference between the two compressed cases is how the + Huffman codes for the literal/length and distance alphabets are + defined. + + In all cases, the decoding algorithm for the actual data is as + follows: + + do + read block header from input stream. + if stored with no compression + skip any remaining bits in current partially + processed byte + read LEN and NLEN (see next section) + copy LEN bytes of data to output + otherwise + if compressed with dynamic Huffman codes + read representation of code trees (see + subsection below) + loop (until end of block code recognized) + decode literal/length value from input stream + if value < 256 + copy value (literal byte) to output stream + otherwise + if value = end of block (256) + break from loop + otherwise (value = 257..285) + decode distance from input stream + + move backwards distance bytes in the output + stream, and copy length bytes from this + position to the output stream. + end loop + while not last block + + Note that a duplicated string reference may refer to a string + in a previous block; i.e., the backward distance may cross one + or more block boundaries. However a distance cannot refer past + the beginning of the output stream. (An application using a + + + +Deutsch Informational [Page 10] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + preset dictionary might discard part of the output stream; a + distance can refer to that part of the output stream anyway) + Note also that the referenced string may overlap the current + position; for example, if the last 2 bytes decoded have values + X and Y, a string reference with + adds X,Y,X,Y,X to the output stream. + + We now specify each compression method in turn. + + 3.2.4. Non-compressed blocks (BTYPE=00) + + Any bits of input up to the next byte boundary are ignored. + The rest of the block consists of the following information: + + 0 1 2 3 4... + +---+---+---+---+================================+ + | LEN | NLEN |... LEN bytes of literal data...| + +---+---+---+---+================================+ + + LEN is the number of data bytes in the block. NLEN is the + one's complement of LEN. + + 3.2.5. Compressed blocks (length and distance codes) + + As noted above, encoded data blocks in the "deflate" format + consist of sequences of symbols drawn from three conceptually + distinct alphabets: either literal bytes, from the alphabet of + byte values (0..255), or pairs, + where the length is drawn from (3..258) and the distance is + drawn from (1..32,768). In fact, the literal and length + alphabets are merged into a single alphabet (0..285), where + values 0..255 represent literal bytes, the value 256 indicates + end-of-block, and values 257..285 represent length codes + (possibly in conjunction with extra bits following the symbol + code) as follows: + + + + + + + + + + + + + + + + +Deutsch Informational [Page 11] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + Extra Extra Extra + Code Bits Length(s) Code Bits Lengths Code Bits Length(s) + ---- ---- ------ ---- ---- ------- ---- ---- ------- + 257 0 3 267 1 15,16 277 4 67-82 + 258 0 4 268 1 17,18 278 4 83-98 + 259 0 5 269 2 19-22 279 4 99-114 + 260 0 6 270 2 23-26 280 4 115-130 + 261 0 7 271 2 27-30 281 5 131-162 + 262 0 8 272 2 31-34 282 5 163-194 + 263 0 9 273 3 35-42 283 5 195-226 + 264 0 10 274 3 43-50 284 5 227-257 + 265 1 11,12 275 3 51-58 285 0 258 + 266 1 13,14 276 3 59-66 + + The extra bits should be interpreted as a machine integer + stored with the most-significant bit first, e.g., bits 1110 + represent the value 14. + + Extra Extra Extra + Code Bits Dist Code Bits Dist Code Bits Distance + ---- ---- ---- ---- ---- ------ ---- ---- -------- + 0 0 1 10 4 33-48 20 9 1025-1536 + 1 0 2 11 4 49-64 21 9 1537-2048 + 2 0 3 12 5 65-96 22 10 2049-3072 + 3 0 4 13 5 97-128 23 10 3073-4096 + 4 1 5,6 14 6 129-192 24 11 4097-6144 + 5 1 7,8 15 6 193-256 25 11 6145-8192 + 6 2 9-12 16 7 257-384 26 12 8193-12288 + 7 2 13-16 17 7 385-512 27 12 12289-16384 + 8 3 17-24 18 8 513-768 28 13 16385-24576 + 9 3 25-32 19 8 769-1024 29 13 24577-32768 + + 3.2.6. Compression with fixed Huffman codes (BTYPE=01) + + The Huffman codes for the two alphabets are fixed, and are not + represented explicitly in the data. The Huffman code lengths + for the literal/length alphabet are: + + Lit Value Bits Codes + --------- ---- ----- + 0 - 143 8 00110000 through + 10111111 + 144 - 255 9 110010000 through + 111111111 + 256 - 279 7 0000000 through + 0010111 + 280 - 287 8 11000000 through + 11000111 + + + +Deutsch Informational [Page 12] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + The code lengths are sufficient to generate the actual codes, + as described above; we show the codes in the table for added + clarity. Literal/length values 286-287 will never actually + occur in the compressed data, but participate in the code + construction. + + Distance codes 0-31 are represented by (fixed-length) 5-bit + codes, with possible additional bits as shown in the table + shown in Paragraph 3.2.5, above. Note that distance codes 30- + 31 will never actually occur in the compressed data. + + 3.2.7. Compression with dynamic Huffman codes (BTYPE=10) + + The Huffman codes for the two alphabets appear in the block + immediately after the header bits and before the actual + compressed data, first the literal/length code and then the + distance code. Each code is defined by a sequence of code + lengths, as discussed in Paragraph 3.2.2, above. For even + greater compactness, the code length sequences themselves are + compressed using a Huffman code. The alphabet for code lengths + is as follows: + + 0 - 15: Represent code lengths of 0 - 15 + 16: Copy the previous code length 3 - 6 times. + The next 2 bits indicate repeat length + (0 = 3, ... , 3 = 6) + Example: Codes 8, 16 (+2 bits 11), + 16 (+2 bits 10) will expand to + 12 code lengths of 8 (1 + 6 + 5) + 17: Repeat a code length of 0 for 3 - 10 times. + (3 bits of length) + 18: Repeat a code length of 0 for 11 - 138 times + (7 bits of length) + + A code length of 0 indicates that the corresponding symbol in + the literal/length or distance alphabet will not occur in the + block, and should not participate in the Huffman code + construction algorithm given earlier. If only one distance + code is used, it is encoded using one bit, not zero bits; in + this case there is a single code length of one, with one unused + code. One distance code of zero bits means that there are no + distance codes used at all (the data is all literals). + + We can now define the format of the block: + + 5 Bits: HLIT, # of Literal/Length codes - 257 (257 - 286) + 5 Bits: HDIST, # of Distance codes - 1 (1 - 32) + 4 Bits: HCLEN, # of Code Length codes - 4 (4 - 19) + + + +Deutsch Informational [Page 13] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + (HCLEN + 4) x 3 bits: code lengths for the code length + alphabet given just above, in the order: 16, 17, 18, + 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 + + These code lengths are interpreted as 3-bit integers + (0-7); as above, a code length of 0 means the + corresponding symbol (literal/length or distance code + length) is not used. + + HLIT + 257 code lengths for the literal/length alphabet, + encoded using the code length Huffman code + + HDIST + 1 code lengths for the distance alphabet, + encoded using the code length Huffman code + + The actual compressed data of the block, + encoded using the literal/length and distance Huffman + codes + + The literal/length symbol 256 (end of data), + encoded using the literal/length Huffman code + + The code length repeat codes can cross from HLIT + 257 to the + HDIST + 1 code lengths. In other words, all code lengths form + a single sequence of HLIT + HDIST + 258 values. + + 3.3. Compliance + + A compressor may limit further the ranges of values specified in + the previous section and still be compliant; for example, it may + limit the range of backward pointers to some value smaller than + 32K. Similarly, a compressor may limit the size of blocks so that + a compressible block fits in memory. + + A compliant decompressor must accept the full range of possible + values defined in the previous section, and must accept blocks of + arbitrary size. + +4. Compression algorithm details + + While it is the intent of this document to define the "deflate" + compressed data format without reference to any particular + compression algorithm, the format is related to the compressed + formats produced by LZ77 (Lempel-Ziv 1977, see reference [2] below); + since many variations of LZ77 are patented, it is strongly + recommended that the implementor of a compressor follow the general + algorithm presented here, which is known not to be patented per se. + The material in this section is not part of the definition of the + + + +Deutsch Informational [Page 14] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + specification per se, and a compressor need not follow it in order to + be compliant. + + The compressor terminates a block when it determines that starting a + new block with fresh trees would be useful, or when the block size + fills up the compressor's block buffer. + + The compressor uses a chained hash table to find duplicated strings, + using a hash function that operates on 3-byte sequences. At any + given point during compression, let XYZ be the next 3 input bytes to + be examined (not necessarily all different, of course). First, the + compressor examines the hash chain for XYZ. If the chain is empty, + the compressor simply writes out X as a literal byte and advances one + byte in the input. If the hash chain is not empty, indicating that + the sequence XYZ (or, if we are unlucky, some other 3 bytes with the + same hash function value) has occurred recently, the compressor + compares all strings on the XYZ hash chain with the actual input data + sequence starting at the current point, and selects the longest + match. + + The compressor searches the hash chains starting with the most recent + strings, to favor small distances and thus take advantage of the + Huffman encoding. The hash chains are singly linked. There are no + deletions from the hash chains; the algorithm simply discards matches + that are too old. To avoid a worst-case situation, very long hash + chains are arbitrarily truncated at a certain length, determined by a + run-time parameter. + + To improve overall compression, the compressor optionally defers the + selection of matches ("lazy matching"): after a match of length N has + been found, the compressor searches for a longer match starting at + the next input byte. If it finds a longer match, it truncates the + previous match to a length of one (thus producing a single literal + byte) and then emits the longer match. Otherwise, it emits the + original match, and, as described above, advances N bytes before + continuing. + + Run-time parameters also control this "lazy match" procedure. If + compression ratio is most important, the compressor attempts a + complete second search regardless of the length of the first match. + In the normal case, if the current match is "long enough", the + compressor reduces the search for a longer match, thus speeding up + the process. If speed is most important, the compressor inserts new + strings in the hash table only when no match was found, or when the + match is not "too long". This degrades the compression ratio but + saves time since there are both fewer insertions and fewer searches. + + + + + +Deutsch Informational [Page 15] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +5. References + + [1] Huffman, D. A., "A Method for the Construction of Minimum + Redundancy Codes", Proceedings of the Institute of Radio + Engineers, September 1952, Volume 40, Number 9, pp. 1098-1101. + + [2] Ziv J., Lempel A., "A Universal Algorithm for Sequential Data + Compression", IEEE Transactions on Information Theory, Vol. 23, + No. 3, pp. 337-343. + + [3] Gailly, J.-L., and Adler, M., ZLIB documentation and sources, + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [4] Gailly, J.-L., and Adler, M., GZIP documentation and sources, + available as gzip-*.tar in ftp://prep.ai.mit.edu/pub/gnu/ + + [5] Schwartz, E. S., and Kallick, B. "Generating a canonical prefix + encoding." Comm. ACM, 7,3 (Mar. 1964), pp. 166-169. + + [6] Hirschberg and Lelewer, "Efficient decoding of prefix codes," + Comm. ACM, 33,4, April 1990, pp. 449-459. + +6. Security Considerations + + Any data compression method involves the reduction of redundancy in + the data. Consequently, any corruption of the data is likely to have + severe effects and be difficult to correct. Uncompressed text, on + the other hand, will probably still be readable despite the presence + of some corrupted bytes. + + It is recommended that systems using this data format provide some + means of validating the integrity of the compressed data. See + reference [3], for example. + +7. Source code + + Source code for a C language implementation of a "deflate" compliant + compressor and decompressor is available within the zlib package at + ftp://ftp.uu.net/pub/archiving/zip/zlib/. + +8. Acknowledgements + + Trademarks cited in this document are the property of their + respective owners. + + Phil Katz designed the deflate format. Jean-Loup Gailly and Mark + Adler wrote the related software described in this specification. + Glenn Randers-Pehrson converted this document to RFC and HTML format. + + + +Deutsch Informational [Page 16] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +9. Author's Address + + L. Peter Deutsch + Aladdin Enterprises + 203 Santa Margarita Ave. + Menlo Park, CA 94025 + + Phone: (415) 322-0103 (AM only) + FAX: (415) 322-1734 + EMail: + + Questions about the technical content of this specification can be + sent by email to: + + Jean-Loup Gailly and + Mark Adler + + Editorial comments on this specification can be sent by email to: + + L. Peter Deutsch and + Glenn Randers-Pehrson + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Deutsch Informational [Page 17] + diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/specification/rfc-gzip.txt b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/rfc-gzip.txt new file mode 100644 index 0000000000..a8e51b4567 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/rfc-gzip.txt @@ -0,0 +1,675 @@ + + + + + + +Network Working Group P. Deutsch +Request for Comments: 1952 Aladdin Enterprises +Category: Informational May 1996 + + + GZIP file format specification version 4.3 + +Status of This Memo + + This memo provides information for the Internet community. This memo + does not specify an Internet standard of any kind. Distribution of + this memo is unlimited. + +IESG Note: + + The IESG takes no position on the validity of any Intellectual + Property Rights statements contained in this document. + +Notices + + Copyright (c) 1996 L. Peter Deutsch + + Permission is granted to copy and distribute this document for any + purpose and without charge, including translations into other + languages and incorporation into compilations, provided that the + copyright notice and this notice are preserved, and that any + substantive changes or deletions from the original are clearly + marked. + + A pointer to the latest version of this and related documentation in + HTML format can be found at the URL + . + +Abstract + + This specification defines a lossless compressed data format that is + compatible with the widely used GZIP utility. The format includes a + cyclic redundancy check value for detecting data corruption. The + format presently uses the DEFLATE method of compression but can be + easily extended to use other compression methods. The format can be + implemented readily in a manner not covered by patents. + + + + + + + + + + +Deutsch Informational [Page 1] + +RFC 1952 GZIP File Format Specification May 1996 + + +Table of Contents + + 1. Introduction ................................................... 2 + 1.1. Purpose ................................................... 2 + 1.2. Intended audience ......................................... 3 + 1.3. Scope ..................................................... 3 + 1.4. Compliance ................................................ 3 + 1.5. Definitions of terms and conventions used ................. 3 + 1.6. Changes from previous versions ............................ 3 + 2. Detailed specification ......................................... 4 + 2.1. Overall conventions ....................................... 4 + 2.2. File format ............................................... 5 + 2.3. Member format ............................................. 5 + 2.3.1. Member header and trailer ........................... 6 + 2.3.1.1. Extra field ................................... 8 + 2.3.1.2. Compliance .................................... 9 + 3. References .................................................. 9 + 4. Security Considerations .................................... 10 + 5. Acknowledgements ........................................... 10 + 6. Author's Address ........................................... 10 + 7. Appendix: Jean-Loup Gailly's gzip utility .................. 11 + 8. Appendix: Sample CRC Code .................................. 11 + +1. Introduction + + 1.1. Purpose + + The purpose of this specification is to define a lossless + compressed data format that: + + * Is independent of CPU type, operating system, file system, + and character set, and hence can be used for interchange; + * Can compress or decompress a data stream (as opposed to a + randomly accessible file) to produce another data stream, + using only an a priori bounded amount of intermediate + storage, and hence can be used in data communications or + similar structures such as Unix filters; + * Compresses data with efficiency comparable to the best + currently available general-purpose compression methods, + and in particular considerably better than the "compress" + program; + * Can be implemented readily in a manner not covered by + patents, and hence can be practiced freely; + * Is compatible with the file format produced by the current + widely used gzip utility, in that conforming decompressors + will be able to read data produced by the existing gzip + compressor. + + + + +Deutsch Informational [Page 2] + +RFC 1952 GZIP File Format Specification May 1996 + + + The data format defined by this specification does not attempt to: + + * Provide random access to compressed data; + * Compress specialized data (e.g., raster graphics) as well as + the best currently available specialized algorithms. + + 1.2. Intended audience + + This specification is intended for use by implementors of software + to compress data into gzip format and/or decompress data from gzip + format. + + The text of the specification assumes a basic background in + programming at the level of bits and other primitive data + representations. + + 1.3. Scope + + The specification specifies a compression method and a file format + (the latter assuming only that a file can store a sequence of + arbitrary bytes). It does not specify any particular interface to + a file system or anything about character sets or encodings + (except for file names and comments, which are optional). + + 1.4. Compliance + + Unless otherwise indicated below, a compliant decompressor must be + able to accept and decompress any file that conforms to all the + specifications presented here; a compliant compressor must produce + files that conform to all the specifications presented here. The + material in the appendices is not part of the specification per se + and is not relevant to compliance. + + 1.5. Definitions of terms and conventions used + + byte: 8 bits stored or transmitted as a unit (same as an octet). + (For this specification, a byte is exactly 8 bits, even on + machines which store a character on a number of bits different + from 8.) See below for the numbering of bits within a byte. + + 1.6. Changes from previous versions + + There have been no technical changes to the gzip format since + version 4.1 of this specification. In version 4.2, some + terminology was changed, and the sample CRC code was rewritten for + clarity and to eliminate the requirement for the caller to do pre- + and post-conditioning. Version 4.3 is a conversion of the + specification to RFC style. + + + +Deutsch Informational [Page 3] + +RFC 1952 GZIP File Format Specification May 1996 + + +2. Detailed specification + + 2.1. Overall conventions + + In the diagrams below, a box like this: + + +---+ + | | <-- the vertical bars might be missing + +---+ + + represents one byte; a box like this: + + +==============+ + | | + +==============+ + + represents a variable number of bytes. + + Bytes stored within a computer do not have a "bit order", since + they are always treated as a unit. However, a byte considered as + an integer between 0 and 255 does have a most- and least- + significant bit, and since we write numbers with the most- + significant digit on the left, we also write bytes with the most- + significant bit on the left. In the diagrams below, we number the + bits of a byte so that bit 0 is the least-significant bit, i.e., + the bits are numbered: + + +--------+ + |76543210| + +--------+ + + This document does not address the issue of the order in which + bits of a byte are transmitted on a bit-sequential medium, since + the data format described here is byte- rather than bit-oriented. + + Within a computer, a number may occupy multiple bytes. All + multi-byte numbers in the format described here are stored with + the least-significant byte first (at the lower memory address). + For example, the decimal number 520 is stored as: + + 0 1 + +--------+--------+ + |00001000|00000010| + +--------+--------+ + ^ ^ + | | + | + more significant byte = 2 x 256 + + less significant byte = 8 + + + +Deutsch Informational [Page 4] + +RFC 1952 GZIP File Format Specification May 1996 + + + 2.2. File format + + A gzip file consists of a series of "members" (compressed data + sets). The format of each member is specified in the following + section. The members simply appear one after another in the file, + with no additional information before, between, or after them. + + 2.3. Member format + + Each member has the following structure: + + +---+---+---+---+---+---+---+---+---+---+ + |ID1|ID2|CM |FLG| MTIME |XFL|OS | (more-->) + +---+---+---+---+---+---+---+---+---+---+ + + (if FLG.FEXTRA set) + + +---+---+=================================+ + | XLEN |...XLEN bytes of "extra field"...| (more-->) + +---+---+=================================+ + + (if FLG.FNAME set) + + +=========================================+ + |...original file name, zero-terminated...| (more-->) + +=========================================+ + + (if FLG.FCOMMENT set) + + +===================================+ + |...file comment, zero-terminated...| (more-->) + +===================================+ + + (if FLG.FHCRC set) + + +---+---+ + | CRC16 | + +---+---+ + + +=======================+ + |...compressed blocks...| (more-->) + +=======================+ + + 0 1 2 3 4 5 6 7 + +---+---+---+---+---+---+---+---+ + | CRC32 | ISIZE | + +---+---+---+---+---+---+---+---+ + + + + +Deutsch Informational [Page 5] + +RFC 1952 GZIP File Format Specification May 1996 + + + 2.3.1. Member header and trailer + + ID1 (IDentification 1) + ID2 (IDentification 2) + These have the fixed values ID1 = 31 (0x1f, \037), ID2 = 139 + (0x8b, \213), to identify the file as being in gzip format. + + CM (Compression Method) + This identifies the compression method used in the file. CM + = 0-7 are reserved. CM = 8 denotes the "deflate" + compression method, which is the one customarily used by + gzip and which is documented elsewhere. + + FLG (FLaGs) + This flag byte is divided into individual bits as follows: + + bit 0 FTEXT + bit 1 FHCRC + bit 2 FEXTRA + bit 3 FNAME + bit 4 FCOMMENT + bit 5 reserved + bit 6 reserved + bit 7 reserved + + If FTEXT is set, the file is probably ASCII text. This is + an optional indication, which the compressor may set by + checking a small amount of the input data to see whether any + non-ASCII characters are present. In case of doubt, FTEXT + is cleared, indicating binary data. For systems which have + different file formats for ascii text and binary data, the + decompressor can use FTEXT to choose the appropriate format. + We deliberately do not specify the algorithm used to set + this bit, since a compressor always has the option of + leaving it cleared and a decompressor always has the option + of ignoring it and letting some other program handle issues + of data conversion. + + If FHCRC is set, a CRC16 for the gzip header is present, + immediately before the compressed data. The CRC16 consists + of the two least significant bytes of the CRC32 for all + bytes of the gzip header up to and not including the CRC16. + [The FHCRC bit was never set by versions of gzip up to + 1.2.4, even though it was documented with a different + meaning in gzip 1.2.4.] + + If FEXTRA is set, optional extra fields are present, as + described in a following section. + + + +Deutsch Informational [Page 6] + +RFC 1952 GZIP File Format Specification May 1996 + + + If FNAME is set, an original file name is present, + terminated by a zero byte. The name must consist of ISO + 8859-1 (LATIN-1) characters; on operating systems using + EBCDIC or any other character set for file names, the name + must be translated to the ISO LATIN-1 character set. This + is the original name of the file being compressed, with any + directory components removed, and, if the file being + compressed is on a file system with case insensitive names, + forced to lower case. There is no original file name if the + data was compressed from a source other than a named file; + for example, if the source was stdin on a Unix system, there + is no file name. + + If FCOMMENT is set, a zero-terminated file comment is + present. This comment is not interpreted; it is only + intended for human consumption. The comment must consist of + ISO 8859-1 (LATIN-1) characters. Line breaks should be + denoted by a single line feed character (10 decimal). + + Reserved FLG bits must be zero. + + MTIME (Modification TIME) + This gives the most recent modification time of the original + file being compressed. The time is in Unix format, i.e., + seconds since 00:00:00 GMT, Jan. 1, 1970. (Note that this + may cause problems for MS-DOS and other systems that use + local rather than Universal time.) If the compressed data + did not come from a file, MTIME is set to the time at which + compression started. MTIME = 0 means no time stamp is + available. + + XFL (eXtra FLags) + These flags are available for use by specific compression + methods. The "deflate" method (CM = 8) sets these flags as + follows: + + XFL = 2 - compressor used maximum compression, + slowest algorithm + XFL = 4 - compressor used fastest algorithm + + OS (Operating System) + This identifies the type of file system on which compression + took place. This may be useful in determining end-of-line + convention for text files. The currently defined values are + as follows: + + + + + + +Deutsch Informational [Page 7] + +RFC 1952 GZIP File Format Specification May 1996 + + + 0 - FAT filesystem (MS-DOS, OS/2, NT/Win32) + 1 - Amiga + 2 - VMS (or OpenVMS) + 3 - Unix + 4 - VM/CMS + 5 - Atari TOS + 6 - HPFS filesystem (OS/2, NT) + 7 - Macintosh + 8 - Z-System + 9 - CP/M + 10 - TOPS-20 + 11 - NTFS filesystem (NT) + 12 - QDOS + 13 - Acorn RISCOS + 255 - unknown + + XLEN (eXtra LENgth) + If FLG.FEXTRA is set, this gives the length of the optional + extra field. See below for details. + + CRC32 (CRC-32) + This contains a Cyclic Redundancy Check value of the + uncompressed data computed according to CRC-32 algorithm + used in the ISO 3309 standard and in section 8.1.1.6.2 of + ITU-T recommendation V.42. (See http://www.iso.ch for + ordering ISO documents. See gopher://info.itu.ch for an + online version of ITU-T V.42.) + + ISIZE (Input SIZE) + This contains the size of the original (uncompressed) input + data modulo 2^32. + + 2.3.1.1. Extra field + + If the FLG.FEXTRA bit is set, an "extra field" is present in + the header, with total length XLEN bytes. It consists of a + series of subfields, each of the form: + + +---+---+---+---+==================================+ + |SI1|SI2| LEN |... LEN bytes of subfield data ...| + +---+---+---+---+==================================+ + + SI1 and SI2 provide a subfield ID, typically two ASCII letters + with some mnemonic value. Jean-Loup Gailly + is maintaining a registry of subfield + IDs; please send him any subfield ID you wish to use. Subfield + IDs with SI2 = 0 are reserved for future use. The following + IDs are currently defined: + + + +Deutsch Informational [Page 8] + +RFC 1952 GZIP File Format Specification May 1996 + + + SI1 SI2 Data + ---------- ---------- ---- + 0x41 ('A') 0x70 ('P') Apollo file type information + + LEN gives the length of the subfield data, excluding the 4 + initial bytes. + + 2.3.1.2. Compliance + + A compliant compressor must produce files with correct ID1, + ID2, CM, CRC32, and ISIZE, but may set all the other fields in + the fixed-length part of the header to default values (255 for + OS, 0 for all others). The compressor must set all reserved + bits to zero. + + A compliant decompressor must check ID1, ID2, and CM, and + provide an error indication if any of these have incorrect + values. It must examine FEXTRA/XLEN, FNAME, FCOMMENT and FHCRC + at least so it can skip over the optional fields if they are + present. It need not examine any other part of the header or + trailer; in particular, a decompressor may ignore FTEXT and OS + and always produce binary output, and still be compliant. A + compliant decompressor must give an error indication if any + reserved bit is non-zero, since such a bit could indicate the + presence of a new field that would cause subsequent data to be + interpreted incorrectly. + +3. References + + [1] "Information Processing - 8-bit single-byte coded graphic + character sets - Part 1: Latin alphabet No.1" (ISO 8859-1:1987). + The ISO 8859-1 (Latin-1) character set is a superset of 7-bit + ASCII. Files defining this character set are available as + iso_8859-1.* in ftp://ftp.uu.net/graphics/png/documents/ + + [2] ISO 3309 + + [3] ITU-T recommendation V.42 + + [4] Deutsch, L.P.,"DEFLATE Compressed Data Format Specification", + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [5] Gailly, J.-L., GZIP documentation, available as gzip-*.tar in + ftp://prep.ai.mit.edu/pub/gnu/ + + [6] Sarwate, D.V., "Computation of Cyclic Redundancy Checks via Table + Look-Up", Communications of the ACM, 31(8), pp.1008-1013. + + + + +Deutsch Informational [Page 9] + +RFC 1952 GZIP File Format Specification May 1996 + + + [7] Schwaderer, W.D., "CRC Calculation", April 85 PC Tech Journal, + pp.118-133. + + [8] ftp://ftp.adelaide.edu.au/pub/rocksoft/papers/crc_v3.txt, + describing the CRC concept. + +4. Security Considerations + + Any data compression method involves the reduction of redundancy in + the data. Consequently, any corruption of the data is likely to have + severe effects and be difficult to correct. Uncompressed text, on + the other hand, will probably still be readable despite the presence + of some corrupted bytes. + + It is recommended that systems using this data format provide some + means of validating the integrity of the compressed data, such as by + setting and checking the CRC-32 check value. + +5. Acknowledgements + + Trademarks cited in this document are the property of their + respective owners. + + Jean-Loup Gailly designed the gzip format and wrote, with Mark Adler, + the related software described in this specification. Glenn + Randers-Pehrson converted this document to RFC and HTML format. + +6. Author's Address + + L. Peter Deutsch + Aladdin Enterprises + 203 Santa Margarita Ave. + Menlo Park, CA 94025 + + Phone: (415) 322-0103 (AM only) + FAX: (415) 322-1734 + EMail: + + Questions about the technical content of this specification can be + sent by email to: + + Jean-Loup Gailly and + Mark Adler + + Editorial comments on this specification can be sent by email to: + + L. Peter Deutsch and + Glenn Randers-Pehrson + + + +Deutsch Informational [Page 10] + +RFC 1952 GZIP File Format Specification May 1996 + + +7. Appendix: Jean-Loup Gailly's gzip utility + + The most widely used implementation of gzip compression, and the + original documentation on which this specification is based, were + created by Jean-Loup Gailly . Since this + implementation is a de facto standard, we mention some more of its + features here. Again, the material in this section is not part of + the specification per se, and implementations need not follow it to + be compliant. + + When compressing or decompressing a file, gzip preserves the + protection, ownership, and modification time attributes on the local + file system, since there is no provision for representing protection + attributes in the gzip file format itself. Since the file format + includes a modification time, the gzip decompressor provides a + command line switch that assigns the modification time from the file, + rather than the local modification time of the compressed input, to + the decompressed output. + +8. Appendix: Sample CRC Code + + The following sample code represents a practical implementation of + the CRC (Cyclic Redundancy Check). (See also ISO 3309 and ITU-T V.42 + for a formal specification.) + + The sample code is in the ANSI C programming language. Non C users + may find it easier to read with these hints: + + & Bitwise AND operator. + ^ Bitwise exclusive-OR operator. + >> Bitwise right shift operator. When applied to an + unsigned quantity, as here, right shift inserts zero + bit(s) at the left. + ! Logical NOT operator. + ++ "n++" increments the variable n. + 0xNNN 0x introduces a hexadecimal (base 16) constant. + Suffix L indicates a long value (at least 32 bits). + + /* Table of CRCs of all 8-bit messages. */ + unsigned long crc_table[256]; + + /* Flag: has the table been computed? Initially false. */ + int crc_table_computed = 0; + + /* Make the table for a fast CRC. */ + void make_crc_table(void) + { + unsigned long c; + + + +Deutsch Informational [Page 11] + +RFC 1952 GZIP File Format Specification May 1996 + + + int n, k; + for (n = 0; n < 256; n++) { + c = (unsigned long) n; + for (k = 0; k < 8; k++) { + if (c & 1) { + c = 0xedb88320L ^ (c >> 1); + } else { + c = c >> 1; + } + } + crc_table[n] = c; + } + crc_table_computed = 1; + } + + /* + Update a running crc with the bytes buf[0..len-1] and return + the updated crc. The crc should be initialized to zero. Pre- and + post-conditioning (one's complement) is performed within this + function so it shouldn't be done by the caller. Usage example: + + unsigned long crc = 0L; + + while (read_buffer(buffer, length) != EOF) { + crc = update_crc(crc, buffer, length); + } + if (crc != original_crc) error(); + */ + unsigned long update_crc(unsigned long crc, + unsigned char *buf, int len) + { + unsigned long c = crc ^ 0xffffffffL; + int n; + + if (!crc_table_computed) + make_crc_table(); + for (n = 0; n < len; n++) { + c = crc_table[(c ^ buf[n]) & 0xff] ^ (c >> 8); + } + return c ^ 0xffffffffL; + } + + /* Return the CRC of the bytes buf[0..len-1]. */ + unsigned long crc(unsigned char *buf, int len) + { + return update_crc(0L, buf, len); + } + + + + +Deutsch Informational [Page 12] + diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/specification/rfc-zlib.txt b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/rfc-zlib.txt new file mode 100644 index 0000000000..ce6428a0f2 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/rfc-zlib.txt @@ -0,0 +1,619 @@ + + + + + + +Network Working Group P. Deutsch +Request for Comments: 1950 Aladdin Enterprises +Category: Informational J-L. Gailly + Info-ZIP + May 1996 + + + ZLIB Compressed Data Format Specification version 3.3 + +Status of This Memo + + This memo provides information for the Internet community. This memo + does not specify an Internet standard of any kind. Distribution of + this memo is unlimited. + +IESG Note: + + The IESG takes no position on the validity of any Intellectual + Property Rights statements contained in this document. + +Notices + + Copyright (c) 1996 L. Peter Deutsch and Jean-Loup Gailly + + Permission is granted to copy and distribute this document for any + purpose and without charge, including translations into other + languages and incorporation into compilations, provided that the + copyright notice and this notice are preserved, and that any + substantive changes or deletions from the original are clearly + marked. + + A pointer to the latest version of this and related documentation in + HTML format can be found at the URL + . + +Abstract + + This specification defines a lossless compressed data format. The + data can be produced or consumed, even for an arbitrarily long + sequentially presented input data stream, using only an a priori + bounded amount of intermediate storage. The format presently uses + the DEFLATE compression method but can be easily extended to use + other compression methods. It can be implemented readily in a manner + not covered by patents. This specification also defines the ADLER-32 + checksum (an extension and improvement of the Fletcher checksum), + used for detection of data corruption, and provides an algorithm for + computing it. + + + + +Deutsch & Gailly Informational [Page 1] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +Table of Contents + + 1. Introduction ................................................... 2 + 1.1. Purpose ................................................... 2 + 1.2. Intended audience ......................................... 3 + 1.3. Scope ..................................................... 3 + 1.4. Compliance ................................................ 3 + 1.5. Definitions of terms and conventions used ................ 3 + 1.6. Changes from previous versions ............................ 3 + 2. Detailed specification ......................................... 3 + 2.1. Overall conventions ....................................... 3 + 2.2. Data format ............................................... 4 + 2.3. Compliance ................................................ 7 + 3. References ..................................................... 7 + 4. Source code .................................................... 8 + 5. Security Considerations ........................................ 8 + 6. Acknowledgements ............................................... 8 + 7. Authors' Addresses ............................................. 8 + 8. Appendix: Rationale ............................................ 9 + 9. Appendix: Sample code ..........................................10 + +1. Introduction + + 1.1. Purpose + + The purpose of this specification is to define a lossless + compressed data format that: + + * Is independent of CPU type, operating system, file system, + and character set, and hence can be used for interchange; + + * Can be produced or consumed, even for an arbitrarily long + sequentially presented input data stream, using only an a + priori bounded amount of intermediate storage, and hence can + be used in data communications or similar structures such as + Unix filters; + + * Can use a number of different compression methods; + + * Can be implemented readily in a manner not covered by + patents, and hence can be practiced freely. + + The data format defined by this specification does not attempt to + allow random access to compressed data. + + + + + + + +Deutsch & Gailly Informational [Page 2] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + 1.2. Intended audience + + This specification is intended for use by implementors of software + to compress data into zlib format and/or decompress data from zlib + format. + + The text of the specification assumes a basic background in + programming at the level of bits and other primitive data + representations. + + 1.3. Scope + + The specification specifies a compressed data format that can be + used for in-memory compression of a sequence of arbitrary bytes. + + 1.4. Compliance + + Unless otherwise indicated below, a compliant decompressor must be + able to accept and decompress any data set that conforms to all + the specifications presented here; a compliant compressor must + produce data sets that conform to all the specifications presented + here. + + 1.5. Definitions of terms and conventions used + + byte: 8 bits stored or transmitted as a unit (same as an octet). + (For this specification, a byte is exactly 8 bits, even on + machines which store a character on a number of bits different + from 8.) See below, for the numbering of bits within a byte. + + 1.6. Changes from previous versions + + Version 3.1 was the first public release of this specification. + In version 3.2, some terminology was changed and the Adler-32 + sample code was rewritten for clarity. In version 3.3, the + support for a preset dictionary was introduced, and the + specification was converted to RFC style. + +2. Detailed specification + + 2.1. Overall conventions + + In the diagrams below, a box like this: + + +---+ + | | <-- the vertical bars might be missing + +---+ + + + + +Deutsch & Gailly Informational [Page 3] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + represents one byte; a box like this: + + +==============+ + | | + +==============+ + + represents a variable number of bytes. + + Bytes stored within a computer do not have a "bit order", since + they are always treated as a unit. However, a byte considered as + an integer between 0 and 255 does have a most- and least- + significant bit, and since we write numbers with the most- + significant digit on the left, we also write bytes with the most- + significant bit on the left. In the diagrams below, we number the + bits of a byte so that bit 0 is the least-significant bit, i.e., + the bits are numbered: + + +--------+ + |76543210| + +--------+ + + Within a computer, a number may occupy multiple bytes. All + multi-byte numbers in the format described here are stored with + the MOST-significant byte first (at the lower memory address). + For example, the decimal number 520 is stored as: + + 0 1 + +--------+--------+ + |00000010|00001000| + +--------+--------+ + ^ ^ + | | + | + less significant byte = 8 + + more significant byte = 2 x 256 + + 2.2. Data format + + A zlib stream has the following structure: + + 0 1 + +---+---+ + |CMF|FLG| (more-->) + +---+---+ + + + + + + + + +Deutsch & Gailly Informational [Page 4] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + (if FLG.FDICT set) + + 0 1 2 3 + +---+---+---+---+ + | DICTID | (more-->) + +---+---+---+---+ + + +=====================+---+---+---+---+ + |...compressed data...| ADLER32 | + +=====================+---+---+---+---+ + + Any data which may appear after ADLER32 are not part of the zlib + stream. + + CMF (Compression Method and flags) + This byte is divided into a 4-bit compression method and a 4- + bit information field depending on the compression method. + + bits 0 to 3 CM Compression method + bits 4 to 7 CINFO Compression info + + CM (Compression method) + This identifies the compression method used in the file. CM = 8 + denotes the "deflate" compression method with a window size up + to 32K. This is the method used by gzip and PNG (see + references [1] and [2] in Chapter 3, below, for the reference + documents). CM = 15 is reserved. It might be used in a future + version of this specification to indicate the presence of an + extra field before the compressed data. + + CINFO (Compression info) + For CM = 8, CINFO is the base-2 logarithm of the LZ77 window + size, minus eight (CINFO=7 indicates a 32K window size). Values + of CINFO above 7 are not allowed in this version of the + specification. CINFO is not defined in this specification for + CM not equal to 8. + + FLG (FLaGs) + This flag byte is divided as follows: + + bits 0 to 4 FCHECK (check bits for CMF and FLG) + bit 5 FDICT (preset dictionary) + bits 6 to 7 FLEVEL (compression level) + + The FCHECK value must be such that CMF and FLG, when viewed as + a 16-bit unsigned integer stored in MSB order (CMF*256 + FLG), + is a multiple of 31. + + + + +Deutsch & Gailly Informational [Page 5] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + FDICT (Preset dictionary) + If FDICT is set, a DICT dictionary identifier is present + immediately after the FLG byte. The dictionary is a sequence of + bytes which are initially fed to the compressor without + producing any compressed output. DICT is the Adler-32 checksum + of this sequence of bytes (see the definition of ADLER32 + below). The decompressor can use this identifier to determine + which dictionary has been used by the compressor. + + FLEVEL (Compression level) + These flags are available for use by specific compression + methods. The "deflate" method (CM = 8) sets these flags as + follows: + + 0 - compressor used fastest algorithm + 1 - compressor used fast algorithm + 2 - compressor used default algorithm + 3 - compressor used maximum compression, slowest algorithm + + The information in FLEVEL is not needed for decompression; it + is there to indicate if recompression might be worthwhile. + + compressed data + For compression method 8, the compressed data is stored in the + deflate compressed data format as described in the document + "DEFLATE Compressed Data Format Specification" by L. Peter + Deutsch. (See reference [3] in Chapter 3, below) + + Other compressed data formats are not specified in this version + of the zlib specification. + + ADLER32 (Adler-32 checksum) + This contains a checksum value of the uncompressed data + (excluding any dictionary data) computed according to Adler-32 + algorithm. This algorithm is a 32-bit extension and improvement + of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073 + standard. See references [4] and [5] in Chapter 3, below) + + Adler-32 is composed of two sums accumulated per byte: s1 is + the sum of all bytes, s2 is the sum of all s1 values. Both sums + are done modulo 65521. s1 is initialized to 1, s2 to zero. The + Adler-32 checksum is stored as s2*65536 + s1 in most- + significant-byte first (network) order. + + + + + + + + +Deutsch & Gailly Informational [Page 6] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + 2.3. Compliance + + A compliant compressor must produce streams with correct CMF, FLG + and ADLER32, but need not support preset dictionaries. When the + zlib data format is used as part of another standard data format, + the compressor may use only preset dictionaries that are specified + by this other data format. If this other format does not use the + preset dictionary feature, the compressor must not set the FDICT + flag. + + A compliant decompressor must check CMF, FLG, and ADLER32, and + provide an error indication if any of these have incorrect values. + A compliant decompressor must give an error indication if CM is + not one of the values defined in this specification (only the + value 8 is permitted in this version), since another value could + indicate the presence of new features that would cause subsequent + data to be interpreted incorrectly. A compliant decompressor must + give an error indication if FDICT is set and DICTID is not the + identifier of a known preset dictionary. A decompressor may + ignore FLEVEL and still be compliant. When the zlib data format + is being used as a part of another standard format, a compliant + decompressor must support all the preset dictionaries specified by + the other format. When the other format does not use the preset + dictionary feature, a compliant decompressor must reject any + stream in which the FDICT flag is set. + +3. References + + [1] Deutsch, L.P.,"GZIP Compressed Data Format Specification", + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [2] Thomas Boutell, "PNG (Portable Network Graphics) specification", + available in ftp://ftp.uu.net/graphics/png/documents/ + + [3] Deutsch, L.P.,"DEFLATE Compressed Data Format Specification", + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [4] Fletcher, J. G., "An Arithmetic Checksum for Serial + Transmissions," IEEE Transactions on Communications, Vol. COM-30, + No. 1, January 1982, pp. 247-252. + + [5] ITU-T Recommendation X.224, Annex D, "Checksum Algorithms," + November, 1993, pp. 144, 145. (Available from + gopher://info.itu.ch). ITU-T X.244 is also the same as ISO 8073. + + + + + + + +Deutsch & Gailly Informational [Page 7] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +4. Source code + + Source code for a C language implementation of a "zlib" compliant + library is available at ftp://ftp.uu.net/pub/archiving/zip/zlib/. + +5. Security Considerations + + A decoder that fails to check the ADLER32 checksum value may be + subject to undetected data corruption. + +6. Acknowledgements + + Trademarks cited in this document are the property of their + respective owners. + + Jean-Loup Gailly and Mark Adler designed the zlib format and wrote + the related software described in this specification. Glenn + Randers-Pehrson converted this document to RFC and HTML format. + +7. Authors' Addresses + + L. Peter Deutsch + Aladdin Enterprises + 203 Santa Margarita Ave. + Menlo Park, CA 94025 + + Phone: (415) 322-0103 (AM only) + FAX: (415) 322-1734 + EMail: + + + Jean-Loup Gailly + + EMail: + + Questions about the technical content of this specification can be + sent by email to + + Jean-Loup Gailly and + Mark Adler + + Editorial comments on this specification can be sent by email to + + L. Peter Deutsch and + Glenn Randers-Pehrson + + + + + + +Deutsch & Gailly Informational [Page 8] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +8. Appendix: Rationale + + 8.1. Preset dictionaries + + A preset dictionary is specially useful to compress short input + sequences. The compressor can take advantage of the dictionary + context to encode the input in a more compact manner. The + decompressor can be initialized with the appropriate context by + virtually decompressing a compressed version of the dictionary + without producing any output. However for certain compression + algorithms such as the deflate algorithm this operation can be + achieved without actually performing any decompression. + + The compressor and the decompressor must use exactly the same + dictionary. The dictionary may be fixed or may be chosen among a + certain number of predefined dictionaries, according to the kind + of input data. The decompressor can determine which dictionary has + been chosen by the compressor by checking the dictionary + identifier. This document does not specify the contents of + predefined dictionaries, since the optimal dictionaries are + application specific. Standard data formats using this feature of + the zlib specification must precisely define the allowed + dictionaries. + + 8.2. The Adler-32 algorithm + + The Adler-32 algorithm is much faster than the CRC32 algorithm yet + still provides an extremely low probability of undetected errors. + + The modulo on unsigned long accumulators can be delayed for 5552 + bytes, so the modulo operation time is negligible. If the bytes + are a, b, c, the second sum is 3a + 2b + c + 3, and so is position + and order sensitive, unlike the first sum, which is just a + checksum. That 65521 is prime is important to avoid a possible + large class of two-byte errors that leave the check unchanged. + (The Fletcher checksum uses 255, which is not prime and which also + makes the Fletcher check insensitive to single byte changes 0 <-> + 255.) + + The sum s1 is initialized to 1 instead of zero to make the length + of the sequence part of s2, so that the length does not have to be + checked separately. (Any sequence of zeroes has a Fletcher + checksum of zero.) + + + + + + + + +Deutsch & Gailly Informational [Page 9] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +9. Appendix: Sample code + + The following C code computes the Adler-32 checksum of a data buffer. + It is written for clarity, not for speed. The sample code is in the + ANSI C programming language. Non C users may find it easier to read + with these hints: + + & Bitwise AND operator. + >> Bitwise right shift operator. When applied to an + unsigned quantity, as here, right shift inserts zero bit(s) + at the left. + << Bitwise left shift operator. Left shift inserts zero + bit(s) at the right. + ++ "n++" increments the variable n. + % modulo operator: a % b is the remainder of a divided by b. + + #define BASE 65521 /* largest prime smaller than 65536 */ + + /* + Update a running Adler-32 checksum with the bytes buf[0..len-1] + and return the updated checksum. The Adler-32 checksum should be + initialized to 1. + + Usage example: + + unsigned long adler = 1L; + + while (read_buffer(buffer, length) != EOF) { + adler = update_adler32(adler, buffer, length); + } + if (adler != original_adler) error(); + */ + unsigned long update_adler32(unsigned long adler, + unsigned char *buf, int len) + { + unsigned long s1 = adler & 0xffff; + unsigned long s2 = (adler >> 16) & 0xffff; + int n; + + for (n = 0; n < len; n++) { + s1 = (s1 + buf[n]) % BASE; + s2 = (s2 + s1) % BASE; + } + return (s2 << 16) + s1; + } + + /* Return the adler32 of the bytes buf[0..len-1] */ + + + + +Deutsch & Gailly Informational [Page 10] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + unsigned long adler32(unsigned char *buf, int len) + { + return update_adler32(1L, buf, len); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Deutsch & Gailly Informational [Page 11] + diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/specification/rfc1950.txt b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/rfc1950.txt new file mode 100644 index 0000000000..ce6428a0f2 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/rfc1950.txt @@ -0,0 +1,619 @@ + + + + + + +Network Working Group P. Deutsch +Request for Comments: 1950 Aladdin Enterprises +Category: Informational J-L. Gailly + Info-ZIP + May 1996 + + + ZLIB Compressed Data Format Specification version 3.3 + +Status of This Memo + + This memo provides information for the Internet community. This memo + does not specify an Internet standard of any kind. Distribution of + this memo is unlimited. + +IESG Note: + + The IESG takes no position on the validity of any Intellectual + Property Rights statements contained in this document. + +Notices + + Copyright (c) 1996 L. Peter Deutsch and Jean-Loup Gailly + + Permission is granted to copy and distribute this document for any + purpose and without charge, including translations into other + languages and incorporation into compilations, provided that the + copyright notice and this notice are preserved, and that any + substantive changes or deletions from the original are clearly + marked. + + A pointer to the latest version of this and related documentation in + HTML format can be found at the URL + . + +Abstract + + This specification defines a lossless compressed data format. The + data can be produced or consumed, even for an arbitrarily long + sequentially presented input data stream, using only an a priori + bounded amount of intermediate storage. The format presently uses + the DEFLATE compression method but can be easily extended to use + other compression methods. It can be implemented readily in a manner + not covered by patents. This specification also defines the ADLER-32 + checksum (an extension and improvement of the Fletcher checksum), + used for detection of data corruption, and provides an algorithm for + computing it. + + + + +Deutsch & Gailly Informational [Page 1] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +Table of Contents + + 1. Introduction ................................................... 2 + 1.1. Purpose ................................................... 2 + 1.2. Intended audience ......................................... 3 + 1.3. Scope ..................................................... 3 + 1.4. Compliance ................................................ 3 + 1.5. Definitions of terms and conventions used ................ 3 + 1.6. Changes from previous versions ............................ 3 + 2. Detailed specification ......................................... 3 + 2.1. Overall conventions ....................................... 3 + 2.2. Data format ............................................... 4 + 2.3. Compliance ................................................ 7 + 3. References ..................................................... 7 + 4. Source code .................................................... 8 + 5. Security Considerations ........................................ 8 + 6. Acknowledgements ............................................... 8 + 7. Authors' Addresses ............................................. 8 + 8. Appendix: Rationale ............................................ 9 + 9. Appendix: Sample code ..........................................10 + +1. Introduction + + 1.1. Purpose + + The purpose of this specification is to define a lossless + compressed data format that: + + * Is independent of CPU type, operating system, file system, + and character set, and hence can be used for interchange; + + * Can be produced or consumed, even for an arbitrarily long + sequentially presented input data stream, using only an a + priori bounded amount of intermediate storage, and hence can + be used in data communications or similar structures such as + Unix filters; + + * Can use a number of different compression methods; + + * Can be implemented readily in a manner not covered by + patents, and hence can be practiced freely. + + The data format defined by this specification does not attempt to + allow random access to compressed data. + + + + + + + +Deutsch & Gailly Informational [Page 2] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + 1.2. Intended audience + + This specification is intended for use by implementors of software + to compress data into zlib format and/or decompress data from zlib + format. + + The text of the specification assumes a basic background in + programming at the level of bits and other primitive data + representations. + + 1.3. Scope + + The specification specifies a compressed data format that can be + used for in-memory compression of a sequence of arbitrary bytes. + + 1.4. Compliance + + Unless otherwise indicated below, a compliant decompressor must be + able to accept and decompress any data set that conforms to all + the specifications presented here; a compliant compressor must + produce data sets that conform to all the specifications presented + here. + + 1.5. Definitions of terms and conventions used + + byte: 8 bits stored or transmitted as a unit (same as an octet). + (For this specification, a byte is exactly 8 bits, even on + machines which store a character on a number of bits different + from 8.) See below, for the numbering of bits within a byte. + + 1.6. Changes from previous versions + + Version 3.1 was the first public release of this specification. + In version 3.2, some terminology was changed and the Adler-32 + sample code was rewritten for clarity. In version 3.3, the + support for a preset dictionary was introduced, and the + specification was converted to RFC style. + +2. Detailed specification + + 2.1. Overall conventions + + In the diagrams below, a box like this: + + +---+ + | | <-- the vertical bars might be missing + +---+ + + + + +Deutsch & Gailly Informational [Page 3] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + represents one byte; a box like this: + + +==============+ + | | + +==============+ + + represents a variable number of bytes. + + Bytes stored within a computer do not have a "bit order", since + they are always treated as a unit. However, a byte considered as + an integer between 0 and 255 does have a most- and least- + significant bit, and since we write numbers with the most- + significant digit on the left, we also write bytes with the most- + significant bit on the left. In the diagrams below, we number the + bits of a byte so that bit 0 is the least-significant bit, i.e., + the bits are numbered: + + +--------+ + |76543210| + +--------+ + + Within a computer, a number may occupy multiple bytes. All + multi-byte numbers in the format described here are stored with + the MOST-significant byte first (at the lower memory address). + For example, the decimal number 520 is stored as: + + 0 1 + +--------+--------+ + |00000010|00001000| + +--------+--------+ + ^ ^ + | | + | + less significant byte = 8 + + more significant byte = 2 x 256 + + 2.2. Data format + + A zlib stream has the following structure: + + 0 1 + +---+---+ + |CMF|FLG| (more-->) + +---+---+ + + + + + + + + +Deutsch & Gailly Informational [Page 4] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + (if FLG.FDICT set) + + 0 1 2 3 + +---+---+---+---+ + | DICTID | (more-->) + +---+---+---+---+ + + +=====================+---+---+---+---+ + |...compressed data...| ADLER32 | + +=====================+---+---+---+---+ + + Any data which may appear after ADLER32 are not part of the zlib + stream. + + CMF (Compression Method and flags) + This byte is divided into a 4-bit compression method and a 4- + bit information field depending on the compression method. + + bits 0 to 3 CM Compression method + bits 4 to 7 CINFO Compression info + + CM (Compression method) + This identifies the compression method used in the file. CM = 8 + denotes the "deflate" compression method with a window size up + to 32K. This is the method used by gzip and PNG (see + references [1] and [2] in Chapter 3, below, for the reference + documents). CM = 15 is reserved. It might be used in a future + version of this specification to indicate the presence of an + extra field before the compressed data. + + CINFO (Compression info) + For CM = 8, CINFO is the base-2 logarithm of the LZ77 window + size, minus eight (CINFO=7 indicates a 32K window size). Values + of CINFO above 7 are not allowed in this version of the + specification. CINFO is not defined in this specification for + CM not equal to 8. + + FLG (FLaGs) + This flag byte is divided as follows: + + bits 0 to 4 FCHECK (check bits for CMF and FLG) + bit 5 FDICT (preset dictionary) + bits 6 to 7 FLEVEL (compression level) + + The FCHECK value must be such that CMF and FLG, when viewed as + a 16-bit unsigned integer stored in MSB order (CMF*256 + FLG), + is a multiple of 31. + + + + +Deutsch & Gailly Informational [Page 5] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + FDICT (Preset dictionary) + If FDICT is set, a DICT dictionary identifier is present + immediately after the FLG byte. The dictionary is a sequence of + bytes which are initially fed to the compressor without + producing any compressed output. DICT is the Adler-32 checksum + of this sequence of bytes (see the definition of ADLER32 + below). The decompressor can use this identifier to determine + which dictionary has been used by the compressor. + + FLEVEL (Compression level) + These flags are available for use by specific compression + methods. The "deflate" method (CM = 8) sets these flags as + follows: + + 0 - compressor used fastest algorithm + 1 - compressor used fast algorithm + 2 - compressor used default algorithm + 3 - compressor used maximum compression, slowest algorithm + + The information in FLEVEL is not needed for decompression; it + is there to indicate if recompression might be worthwhile. + + compressed data + For compression method 8, the compressed data is stored in the + deflate compressed data format as described in the document + "DEFLATE Compressed Data Format Specification" by L. Peter + Deutsch. (See reference [3] in Chapter 3, below) + + Other compressed data formats are not specified in this version + of the zlib specification. + + ADLER32 (Adler-32 checksum) + This contains a checksum value of the uncompressed data + (excluding any dictionary data) computed according to Adler-32 + algorithm. This algorithm is a 32-bit extension and improvement + of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073 + standard. See references [4] and [5] in Chapter 3, below) + + Adler-32 is composed of two sums accumulated per byte: s1 is + the sum of all bytes, s2 is the sum of all s1 values. Both sums + are done modulo 65521. s1 is initialized to 1, s2 to zero. The + Adler-32 checksum is stored as s2*65536 + s1 in most- + significant-byte first (network) order. + + + + + + + + +Deutsch & Gailly Informational [Page 6] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + 2.3. Compliance + + A compliant compressor must produce streams with correct CMF, FLG + and ADLER32, but need not support preset dictionaries. When the + zlib data format is used as part of another standard data format, + the compressor may use only preset dictionaries that are specified + by this other data format. If this other format does not use the + preset dictionary feature, the compressor must not set the FDICT + flag. + + A compliant decompressor must check CMF, FLG, and ADLER32, and + provide an error indication if any of these have incorrect values. + A compliant decompressor must give an error indication if CM is + not one of the values defined in this specification (only the + value 8 is permitted in this version), since another value could + indicate the presence of new features that would cause subsequent + data to be interpreted incorrectly. A compliant decompressor must + give an error indication if FDICT is set and DICTID is not the + identifier of a known preset dictionary. A decompressor may + ignore FLEVEL and still be compliant. When the zlib data format + is being used as a part of another standard format, a compliant + decompressor must support all the preset dictionaries specified by + the other format. When the other format does not use the preset + dictionary feature, a compliant decompressor must reject any + stream in which the FDICT flag is set. + +3. References + + [1] Deutsch, L.P.,"GZIP Compressed Data Format Specification", + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [2] Thomas Boutell, "PNG (Portable Network Graphics) specification", + available in ftp://ftp.uu.net/graphics/png/documents/ + + [3] Deutsch, L.P.,"DEFLATE Compressed Data Format Specification", + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [4] Fletcher, J. G., "An Arithmetic Checksum for Serial + Transmissions," IEEE Transactions on Communications, Vol. COM-30, + No. 1, January 1982, pp. 247-252. + + [5] ITU-T Recommendation X.224, Annex D, "Checksum Algorithms," + November, 1993, pp. 144, 145. (Available from + gopher://info.itu.ch). ITU-T X.244 is also the same as ISO 8073. + + + + + + + +Deutsch & Gailly Informational [Page 7] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +4. Source code + + Source code for a C language implementation of a "zlib" compliant + library is available at ftp://ftp.uu.net/pub/archiving/zip/zlib/. + +5. Security Considerations + + A decoder that fails to check the ADLER32 checksum value may be + subject to undetected data corruption. + +6. Acknowledgements + + Trademarks cited in this document are the property of their + respective owners. + + Jean-Loup Gailly and Mark Adler designed the zlib format and wrote + the related software described in this specification. Glenn + Randers-Pehrson converted this document to RFC and HTML format. + +7. Authors' Addresses + + L. Peter Deutsch + Aladdin Enterprises + 203 Santa Margarita Ave. + Menlo Park, CA 94025 + + Phone: (415) 322-0103 (AM only) + FAX: (415) 322-1734 + EMail: + + + Jean-Loup Gailly + + EMail: + + Questions about the technical content of this specification can be + sent by email to + + Jean-Loup Gailly and + Mark Adler + + Editorial comments on this specification can be sent by email to + + L. Peter Deutsch and + Glenn Randers-Pehrson + + + + + + +Deutsch & Gailly Informational [Page 8] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +8. Appendix: Rationale + + 8.1. Preset dictionaries + + A preset dictionary is specially useful to compress short input + sequences. The compressor can take advantage of the dictionary + context to encode the input in a more compact manner. The + decompressor can be initialized with the appropriate context by + virtually decompressing a compressed version of the dictionary + without producing any output. However for certain compression + algorithms such as the deflate algorithm this operation can be + achieved without actually performing any decompression. + + The compressor and the decompressor must use exactly the same + dictionary. The dictionary may be fixed or may be chosen among a + certain number of predefined dictionaries, according to the kind + of input data. The decompressor can determine which dictionary has + been chosen by the compressor by checking the dictionary + identifier. This document does not specify the contents of + predefined dictionaries, since the optimal dictionaries are + application specific. Standard data formats using this feature of + the zlib specification must precisely define the allowed + dictionaries. + + 8.2. The Adler-32 algorithm + + The Adler-32 algorithm is much faster than the CRC32 algorithm yet + still provides an extremely low probability of undetected errors. + + The modulo on unsigned long accumulators can be delayed for 5552 + bytes, so the modulo operation time is negligible. If the bytes + are a, b, c, the second sum is 3a + 2b + c + 3, and so is position + and order sensitive, unlike the first sum, which is just a + checksum. That 65521 is prime is important to avoid a possible + large class of two-byte errors that leave the check unchanged. + (The Fletcher checksum uses 255, which is not prime and which also + makes the Fletcher check insensitive to single byte changes 0 <-> + 255.) + + The sum s1 is initialized to 1 instead of zero to make the length + of the sequence part of s2, so that the length does not have to be + checked separately. (Any sequence of zeroes has a Fletcher + checksum of zero.) + + + + + + + + +Deutsch & Gailly Informational [Page 9] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +9. Appendix: Sample code + + The following C code computes the Adler-32 checksum of a data buffer. + It is written for clarity, not for speed. The sample code is in the + ANSI C programming language. Non C users may find it easier to read + with these hints: + + & Bitwise AND operator. + >> Bitwise right shift operator. When applied to an + unsigned quantity, as here, right shift inserts zero bit(s) + at the left. + << Bitwise left shift operator. Left shift inserts zero + bit(s) at the right. + ++ "n++" increments the variable n. + % modulo operator: a % b is the remainder of a divided by b. + + #define BASE 65521 /* largest prime smaller than 65536 */ + + /* + Update a running Adler-32 checksum with the bytes buf[0..len-1] + and return the updated checksum. The Adler-32 checksum should be + initialized to 1. + + Usage example: + + unsigned long adler = 1L; + + while (read_buffer(buffer, length) != EOF) { + adler = update_adler32(adler, buffer, length); + } + if (adler != original_adler) error(); + */ + unsigned long update_adler32(unsigned long adler, + unsigned char *buf, int len) + { + unsigned long s1 = adler & 0xffff; + unsigned long s2 = (adler >> 16) & 0xffff; + int n; + + for (n = 0; n < len; n++) { + s1 = (s1 + buf[n]) % BASE; + s2 = (s2 + s1) % BASE; + } + return (s2 << 16) + s1; + } + + /* Return the adler32 of the bytes buf[0..len-1] */ + + + + +Deutsch & Gailly Informational [Page 10] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + unsigned long adler32(unsigned char *buf, int len) + { + return update_adler32(1L, buf, len); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Deutsch & Gailly Informational [Page 11] + diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/specification/rfc1951.txt b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/rfc1951.txt new file mode 100644 index 0000000000..403c8c722f --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/rfc1951.txt @@ -0,0 +1,955 @@ + + + + + + +Network Working Group P. Deutsch +Request for Comments: 1951 Aladdin Enterprises +Category: Informational May 1996 + + + DEFLATE Compressed Data Format Specification version 1.3 + +Status of This Memo + + This memo provides information for the Internet community. This memo + does not specify an Internet standard of any kind. Distribution of + this memo is unlimited. + +IESG Note: + + The IESG takes no position on the validity of any Intellectual + Property Rights statements contained in this document. + +Notices + + Copyright (c) 1996 L. Peter Deutsch + + Permission is granted to copy and distribute this document for any + purpose and without charge, including translations into other + languages and incorporation into compilations, provided that the + copyright notice and this notice are preserved, and that any + substantive changes or deletions from the original are clearly + marked. + + A pointer to the latest version of this and related documentation in + HTML format can be found at the URL + . + +Abstract + + This specification defines a lossless compressed data format that + compresses data using a combination of the LZ77 algorithm and Huffman + coding, with efficiency comparable to the best currently available + general-purpose compression methods. The data can be produced or + consumed, even for an arbitrarily long sequentially presented input + data stream, using only an a priori bounded amount of intermediate + storage. The format can be implemented readily in a manner not + covered by patents. + + + + + + + + +Deutsch Informational [Page 1] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +Table of Contents + + 1. Introduction ................................................... 2 + 1.1. Purpose ................................................... 2 + 1.2. Intended audience ......................................... 3 + 1.3. Scope ..................................................... 3 + 1.4. Compliance ................................................ 3 + 1.5. Definitions of terms and conventions used ................ 3 + 1.6. Changes from previous versions ............................ 4 + 2. Compressed representation overview ............................. 4 + 3. Detailed specification ......................................... 5 + 3.1. Overall conventions ....................................... 5 + 3.1.1. Packing into bytes .................................. 5 + 3.2. Compressed block format ................................... 6 + 3.2.1. Synopsis of prefix and Huffman coding ............... 6 + 3.2.2. Use of Huffman coding in the "deflate" format ....... 7 + 3.2.3. Details of block format ............................. 9 + 3.2.4. Non-compressed blocks (BTYPE=00) ................... 11 + 3.2.5. Compressed blocks (length and distance codes) ...... 11 + 3.2.6. Compression with fixed Huffman codes (BTYPE=01) .... 12 + 3.2.7. Compression with dynamic Huffman codes (BTYPE=10) .. 13 + 3.3. Compliance ............................................... 14 + 4. Compression algorithm details ................................. 14 + 5. References .................................................... 16 + 6. Security Considerations ....................................... 16 + 7. Source code ................................................... 16 + 8. Acknowledgements .............................................. 16 + 9. Author's Address .............................................. 17 + +1. Introduction + + 1.1. Purpose + + The purpose of this specification is to define a lossless + compressed data format that: + * Is independent of CPU type, operating system, file system, + and character set, and hence can be used for interchange; + * Can be produced or consumed, even for an arbitrarily long + sequentially presented input data stream, using only an a + priori bounded amount of intermediate storage, and hence + can be used in data communications or similar structures + such as Unix filters; + * Compresses data with efficiency comparable to the best + currently available general-purpose compression methods, + and in particular considerably better than the "compress" + program; + * Can be implemented readily in a manner not covered by + patents, and hence can be practiced freely; + + + +Deutsch Informational [Page 2] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + * Is compatible with the file format produced by the current + widely used gzip utility, in that conforming decompressors + will be able to read data produced by the existing gzip + compressor. + + The data format defined by this specification does not attempt to: + + * Allow random access to compressed data; + * Compress specialized data (e.g., raster graphics) as well + as the best currently available specialized algorithms. + + A simple counting argument shows that no lossless compression + algorithm can compress every possible input data set. For the + format defined here, the worst case expansion is 5 bytes per 32K- + byte block, i.e., a size increase of 0.015% for large data sets. + English text usually compresses by a factor of 2.5 to 3; + executable files usually compress somewhat less; graphical data + such as raster images may compress much more. + + 1.2. Intended audience + + This specification is intended for use by implementors of software + to compress data into "deflate" format and/or decompress data from + "deflate" format. + + The text of the specification assumes a basic background in + programming at the level of bits and other primitive data + representations. Familiarity with the technique of Huffman coding + is helpful but not required. + + 1.3. Scope + + The specification specifies a method for representing a sequence + of bytes as a (usually shorter) sequence of bits, and a method for + packing the latter bit sequence into bytes. + + 1.4. Compliance + + Unless otherwise indicated below, a compliant decompressor must be + able to accept and decompress any data set that conforms to all + the specifications presented here; a compliant compressor must + produce data sets that conform to all the specifications presented + here. + + 1.5. Definitions of terms and conventions used + + Byte: 8 bits stored or transmitted as a unit (same as an octet). + For this specification, a byte is exactly 8 bits, even on machines + + + +Deutsch Informational [Page 3] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + which store a character on a number of bits different from eight. + See below, for the numbering of bits within a byte. + + String: a sequence of arbitrary bytes. + + 1.6. Changes from previous versions + + There have been no technical changes to the deflate format since + version 1.1 of this specification. In version 1.2, some + terminology was changed. Version 1.3 is a conversion of the + specification to RFC style. + +2. Compressed representation overview + + A compressed data set consists of a series of blocks, corresponding + to successive blocks of input data. The block sizes are arbitrary, + except that non-compressible blocks are limited to 65,535 bytes. + + Each block is compressed using a combination of the LZ77 algorithm + and Huffman coding. The Huffman trees for each block are independent + of those for previous or subsequent blocks; the LZ77 algorithm may + use a reference to a duplicated string occurring in a previous block, + up to 32K input bytes before. + + Each block consists of two parts: a pair of Huffman code trees that + describe the representation of the compressed data part, and a + compressed data part. (The Huffman trees themselves are compressed + using Huffman encoding.) The compressed data consists of a series of + elements of two types: literal bytes (of strings that have not been + detected as duplicated within the previous 32K input bytes), and + pointers to duplicated strings, where a pointer is represented as a + pair . The representation used in the + "deflate" format limits distances to 32K bytes and lengths to 258 + bytes, but does not limit the size of a block, except for + uncompressible blocks, which are limited as noted above. + + Each type of value (literals, distances, and lengths) in the + compressed data is represented using a Huffman code, using one code + tree for literals and lengths and a separate code tree for distances. + The code trees for each block appear in a compact form just before + the compressed data for that block. + + + + + + + + + + +Deutsch Informational [Page 4] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +3. Detailed specification + + 3.1. Overall conventions In the diagrams below, a box like this: + + +---+ + | | <-- the vertical bars might be missing + +---+ + + represents one byte; a box like this: + + +==============+ + | | + +==============+ + + represents a variable number of bytes. + + Bytes stored within a computer do not have a "bit order", since + they are always treated as a unit. However, a byte considered as + an integer between 0 and 255 does have a most- and least- + significant bit, and since we write numbers with the most- + significant digit on the left, we also write bytes with the most- + significant bit on the left. In the diagrams below, we number the + bits of a byte so that bit 0 is the least-significant bit, i.e., + the bits are numbered: + + +--------+ + |76543210| + +--------+ + + Within a computer, a number may occupy multiple bytes. All + multi-byte numbers in the format described here are stored with + the least-significant byte first (at the lower memory address). + For example, the decimal number 520 is stored as: + + 0 1 + +--------+--------+ + |00001000|00000010| + +--------+--------+ + ^ ^ + | | + | + more significant byte = 2 x 256 + + less significant byte = 8 + + 3.1.1. Packing into bytes + + This document does not address the issue of the order in which + bits of a byte are transmitted on a bit-sequential medium, + since the final data format described here is byte- rather than + + + +Deutsch Informational [Page 5] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + bit-oriented. However, we describe the compressed block format + in below, as a sequence of data elements of various bit + lengths, not a sequence of bytes. We must therefore specify + how to pack these data elements into bytes to form the final + compressed byte sequence: + + * Data elements are packed into bytes in order of + increasing bit number within the byte, i.e., starting + with the least-significant bit of the byte. + * Data elements other than Huffman codes are packed + starting with the least-significant bit of the data + element. + * Huffman codes are packed starting with the most- + significant bit of the code. + + In other words, if one were to print out the compressed data as + a sequence of bytes, starting with the first byte at the + *right* margin and proceeding to the *left*, with the most- + significant bit of each byte on the left as usual, one would be + able to parse the result from right to left, with fixed-width + elements in the correct MSB-to-LSB order and Huffman codes in + bit-reversed order (i.e., with the first bit of the code in the + relative LSB position). + + 3.2. Compressed block format + + 3.2.1. Synopsis of prefix and Huffman coding + + Prefix coding represents symbols from an a priori known + alphabet by bit sequences (codes), one code for each symbol, in + a manner such that different symbols may be represented by bit + sequences of different lengths, but a parser can always parse + an encoded string unambiguously symbol-by-symbol. + + We define a prefix code in terms of a binary tree in which the + two edges descending from each non-leaf node are labeled 0 and + 1 and in which the leaf nodes correspond one-for-one with (are + labeled with) the symbols of the alphabet; then the code for a + symbol is the sequence of 0's and 1's on the edges leading from + the root to the leaf labeled with that symbol. For example: + + + + + + + + + + + +Deutsch Informational [Page 6] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + /\ Symbol Code + 0 1 ------ ---- + / \ A 00 + /\ B B 1 + 0 1 C 011 + / \ D 010 + A /\ + 0 1 + / \ + D C + + A parser can decode the next symbol from an encoded input + stream by walking down the tree from the root, at each step + choosing the edge corresponding to the next input bit. + + Given an alphabet with known symbol frequencies, the Huffman + algorithm allows the construction of an optimal prefix code + (one which represents strings with those symbol frequencies + using the fewest bits of any possible prefix codes for that + alphabet). Such a code is called a Huffman code. (See + reference [1] in Chapter 5, references for additional + information on Huffman codes.) + + Note that in the "deflate" format, the Huffman codes for the + various alphabets must not exceed certain maximum code lengths. + This constraint complicates the algorithm for computing code + lengths from symbol frequencies. Again, see Chapter 5, + references for details. + + 3.2.2. Use of Huffman coding in the "deflate" format + + The Huffman codes used for each alphabet in the "deflate" + format have two additional rules: + + * All codes of a given bit length have lexicographically + consecutive values, in the same order as the symbols + they represent; + + * Shorter codes lexicographically precede longer codes. + + + + + + + + + + + + +Deutsch Informational [Page 7] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + We could recode the example above to follow this rule as + follows, assuming that the order of the alphabet is ABCD: + + Symbol Code + ------ ---- + A 10 + B 0 + C 110 + D 111 + + I.e., 0 precedes 10 which precedes 11x, and 110 and 111 are + lexicographically consecutive. + + Given this rule, we can define the Huffman code for an alphabet + just by giving the bit lengths of the codes for each symbol of + the alphabet in order; this is sufficient to determine the + actual codes. In our example, the code is completely defined + by the sequence of bit lengths (2, 1, 3, 3). The following + algorithm generates the codes as integers, intended to be read + from most- to least-significant bit. The code lengths are + initially in tree[I].Len; the codes are produced in + tree[I].Code. + + 1) Count the number of codes for each code length. Let + bl_count[N] be the number of codes of length N, N >= 1. + + 2) Find the numerical value of the smallest code for each + code length: + + code = 0; + bl_count[0] = 0; + for (bits = 1; bits <= MAX_BITS; bits++) { + code = (code + bl_count[bits-1]) << 1; + next_code[bits] = code; + } + + 3) Assign numerical values to all codes, using consecutive + values for all codes of the same length with the base + values determined at step 2. Codes that are never used + (which have a bit length of zero) must not be assigned a + value. + + for (n = 0; n <= max_code; n++) { + len = tree[n].Len; + if (len != 0) { + tree[n].Code = next_code[len]; + next_code[len]++; + } + + + +Deutsch Informational [Page 8] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + } + + Example: + + Consider the alphabet ABCDEFGH, with bit lengths (3, 3, 3, 3, + 3, 2, 4, 4). After step 1, we have: + + N bl_count[N] + - ----------- + 2 1 + 3 5 + 4 2 + + Step 2 computes the following next_code values: + + N next_code[N] + - ------------ + 1 0 + 2 0 + 3 2 + 4 14 + + Step 3 produces the following code values: + + Symbol Length Code + ------ ------ ---- + A 3 010 + B 3 011 + C 3 100 + D 3 101 + E 3 110 + F 2 00 + G 4 1110 + H 4 1111 + + 3.2.3. Details of block format + + Each block of compressed data begins with 3 header bits + containing the following data: + + first bit BFINAL + next 2 bits BTYPE + + Note that the header bits do not necessarily begin on a byte + boundary, since a block does not necessarily occupy an integral + number of bytes. + + + + + +Deutsch Informational [Page 9] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + BFINAL is set if and only if this is the last block of the data + set. + + BTYPE specifies how the data are compressed, as follows: + + 00 - no compression + 01 - compressed with fixed Huffman codes + 10 - compressed with dynamic Huffman codes + 11 - reserved (error) + + The only difference between the two compressed cases is how the + Huffman codes for the literal/length and distance alphabets are + defined. + + In all cases, the decoding algorithm for the actual data is as + follows: + + do + read block header from input stream. + if stored with no compression + skip any remaining bits in current partially + processed byte + read LEN and NLEN (see next section) + copy LEN bytes of data to output + otherwise + if compressed with dynamic Huffman codes + read representation of code trees (see + subsection below) + loop (until end of block code recognized) + decode literal/length value from input stream + if value < 256 + copy value (literal byte) to output stream + otherwise + if value = end of block (256) + break from loop + otherwise (value = 257..285) + decode distance from input stream + + move backwards distance bytes in the output + stream, and copy length bytes from this + position to the output stream. + end loop + while not last block + + Note that a duplicated string reference may refer to a string + in a previous block; i.e., the backward distance may cross one + or more block boundaries. However a distance cannot refer past + the beginning of the output stream. (An application using a + + + +Deutsch Informational [Page 10] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + preset dictionary might discard part of the output stream; a + distance can refer to that part of the output stream anyway) + Note also that the referenced string may overlap the current + position; for example, if the last 2 bytes decoded have values + X and Y, a string reference with + adds X,Y,X,Y,X to the output stream. + + We now specify each compression method in turn. + + 3.2.4. Non-compressed blocks (BTYPE=00) + + Any bits of input up to the next byte boundary are ignored. + The rest of the block consists of the following information: + + 0 1 2 3 4... + +---+---+---+---+================================+ + | LEN | NLEN |... LEN bytes of literal data...| + +---+---+---+---+================================+ + + LEN is the number of data bytes in the block. NLEN is the + one's complement of LEN. + + 3.2.5. Compressed blocks (length and distance codes) + + As noted above, encoded data blocks in the "deflate" format + consist of sequences of symbols drawn from three conceptually + distinct alphabets: either literal bytes, from the alphabet of + byte values (0..255), or pairs, + where the length is drawn from (3..258) and the distance is + drawn from (1..32,768). In fact, the literal and length + alphabets are merged into a single alphabet (0..285), where + values 0..255 represent literal bytes, the value 256 indicates + end-of-block, and values 257..285 represent length codes + (possibly in conjunction with extra bits following the symbol + code) as follows: + + + + + + + + + + + + + + + + +Deutsch Informational [Page 11] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + Extra Extra Extra + Code Bits Length(s) Code Bits Lengths Code Bits Length(s) + ---- ---- ------ ---- ---- ------- ---- ---- ------- + 257 0 3 267 1 15,16 277 4 67-82 + 258 0 4 268 1 17,18 278 4 83-98 + 259 0 5 269 2 19-22 279 4 99-114 + 260 0 6 270 2 23-26 280 4 115-130 + 261 0 7 271 2 27-30 281 5 131-162 + 262 0 8 272 2 31-34 282 5 163-194 + 263 0 9 273 3 35-42 283 5 195-226 + 264 0 10 274 3 43-50 284 5 227-257 + 265 1 11,12 275 3 51-58 285 0 258 + 266 1 13,14 276 3 59-66 + + The extra bits should be interpreted as a machine integer + stored with the most-significant bit first, e.g., bits 1110 + represent the value 14. + + Extra Extra Extra + Code Bits Dist Code Bits Dist Code Bits Distance + ---- ---- ---- ---- ---- ------ ---- ---- -------- + 0 0 1 10 4 33-48 20 9 1025-1536 + 1 0 2 11 4 49-64 21 9 1537-2048 + 2 0 3 12 5 65-96 22 10 2049-3072 + 3 0 4 13 5 97-128 23 10 3073-4096 + 4 1 5,6 14 6 129-192 24 11 4097-6144 + 5 1 7,8 15 6 193-256 25 11 6145-8192 + 6 2 9-12 16 7 257-384 26 12 8193-12288 + 7 2 13-16 17 7 385-512 27 12 12289-16384 + 8 3 17-24 18 8 513-768 28 13 16385-24576 + 9 3 25-32 19 8 769-1024 29 13 24577-32768 + + 3.2.6. Compression with fixed Huffman codes (BTYPE=01) + + The Huffman codes for the two alphabets are fixed, and are not + represented explicitly in the data. The Huffman code lengths + for the literal/length alphabet are: + + Lit Value Bits Codes + --------- ---- ----- + 0 - 143 8 00110000 through + 10111111 + 144 - 255 9 110010000 through + 111111111 + 256 - 279 7 0000000 through + 0010111 + 280 - 287 8 11000000 through + 11000111 + + + +Deutsch Informational [Page 12] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + The code lengths are sufficient to generate the actual codes, + as described above; we show the codes in the table for added + clarity. Literal/length values 286-287 will never actually + occur in the compressed data, but participate in the code + construction. + + Distance codes 0-31 are represented by (fixed-length) 5-bit + codes, with possible additional bits as shown in the table + shown in Paragraph 3.2.5, above. Note that distance codes 30- + 31 will never actually occur in the compressed data. + + 3.2.7. Compression with dynamic Huffman codes (BTYPE=10) + + The Huffman codes for the two alphabets appear in the block + immediately after the header bits and before the actual + compressed data, first the literal/length code and then the + distance code. Each code is defined by a sequence of code + lengths, as discussed in Paragraph 3.2.2, above. For even + greater compactness, the code length sequences themselves are + compressed using a Huffman code. The alphabet for code lengths + is as follows: + + 0 - 15: Represent code lengths of 0 - 15 + 16: Copy the previous code length 3 - 6 times. + The next 2 bits indicate repeat length + (0 = 3, ... , 3 = 6) + Example: Codes 8, 16 (+2 bits 11), + 16 (+2 bits 10) will expand to + 12 code lengths of 8 (1 + 6 + 5) + 17: Repeat a code length of 0 for 3 - 10 times. + (3 bits of length) + 18: Repeat a code length of 0 for 11 - 138 times + (7 bits of length) + + A code length of 0 indicates that the corresponding symbol in + the literal/length or distance alphabet will not occur in the + block, and should not participate in the Huffman code + construction algorithm given earlier. If only one distance + code is used, it is encoded using one bit, not zero bits; in + this case there is a single code length of one, with one unused + code. One distance code of zero bits means that there are no + distance codes used at all (the data is all literals). + + We can now define the format of the block: + + 5 Bits: HLIT, # of Literal/Length codes - 257 (257 - 286) + 5 Bits: HDIST, # of Distance codes - 1 (1 - 32) + 4 Bits: HCLEN, # of Code Length codes - 4 (4 - 19) + + + +Deutsch Informational [Page 13] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + (HCLEN + 4) x 3 bits: code lengths for the code length + alphabet given just above, in the order: 16, 17, 18, + 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 + + These code lengths are interpreted as 3-bit integers + (0-7); as above, a code length of 0 means the + corresponding symbol (literal/length or distance code + length) is not used. + + HLIT + 257 code lengths for the literal/length alphabet, + encoded using the code length Huffman code + + HDIST + 1 code lengths for the distance alphabet, + encoded using the code length Huffman code + + The actual compressed data of the block, + encoded using the literal/length and distance Huffman + codes + + The literal/length symbol 256 (end of data), + encoded using the literal/length Huffman code + + The code length repeat codes can cross from HLIT + 257 to the + HDIST + 1 code lengths. In other words, all code lengths form + a single sequence of HLIT + HDIST + 258 values. + + 3.3. Compliance + + A compressor may limit further the ranges of values specified in + the previous section and still be compliant; for example, it may + limit the range of backward pointers to some value smaller than + 32K. Similarly, a compressor may limit the size of blocks so that + a compressible block fits in memory. + + A compliant decompressor must accept the full range of possible + values defined in the previous section, and must accept blocks of + arbitrary size. + +4. Compression algorithm details + + While it is the intent of this document to define the "deflate" + compressed data format without reference to any particular + compression algorithm, the format is related to the compressed + formats produced by LZ77 (Lempel-Ziv 1977, see reference [2] below); + since many variations of LZ77 are patented, it is strongly + recommended that the implementor of a compressor follow the general + algorithm presented here, which is known not to be patented per se. + The material in this section is not part of the definition of the + + + +Deutsch Informational [Page 14] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + specification per se, and a compressor need not follow it in order to + be compliant. + + The compressor terminates a block when it determines that starting a + new block with fresh trees would be useful, or when the block size + fills up the compressor's block buffer. + + The compressor uses a chained hash table to find duplicated strings, + using a hash function that operates on 3-byte sequences. At any + given point during compression, let XYZ be the next 3 input bytes to + be examined (not necessarily all different, of course). First, the + compressor examines the hash chain for XYZ. If the chain is empty, + the compressor simply writes out X as a literal byte and advances one + byte in the input. If the hash chain is not empty, indicating that + the sequence XYZ (or, if we are unlucky, some other 3 bytes with the + same hash function value) has occurred recently, the compressor + compares all strings on the XYZ hash chain with the actual input data + sequence starting at the current point, and selects the longest + match. + + The compressor searches the hash chains starting with the most recent + strings, to favor small distances and thus take advantage of the + Huffman encoding. The hash chains are singly linked. There are no + deletions from the hash chains; the algorithm simply discards matches + that are too old. To avoid a worst-case situation, very long hash + chains are arbitrarily truncated at a certain length, determined by a + run-time parameter. + + To improve overall compression, the compressor optionally defers the + selection of matches ("lazy matching"): after a match of length N has + been found, the compressor searches for a longer match starting at + the next input byte. If it finds a longer match, it truncates the + previous match to a length of one (thus producing a single literal + byte) and then emits the longer match. Otherwise, it emits the + original match, and, as described above, advances N bytes before + continuing. + + Run-time parameters also control this "lazy match" procedure. If + compression ratio is most important, the compressor attempts a + complete second search regardless of the length of the first match. + In the normal case, if the current match is "long enough", the + compressor reduces the search for a longer match, thus speeding up + the process. If speed is most important, the compressor inserts new + strings in the hash table only when no match was found, or when the + match is not "too long". This degrades the compression ratio but + saves time since there are both fewer insertions and fewer searches. + + + + + +Deutsch Informational [Page 15] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +5. References + + [1] Huffman, D. A., "A Method for the Construction of Minimum + Redundancy Codes", Proceedings of the Institute of Radio + Engineers, September 1952, Volume 40, Number 9, pp. 1098-1101. + + [2] Ziv J., Lempel A., "A Universal Algorithm for Sequential Data + Compression", IEEE Transactions on Information Theory, Vol. 23, + No. 3, pp. 337-343. + + [3] Gailly, J.-L., and Adler, M., ZLIB documentation and sources, + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [4] Gailly, J.-L., and Adler, M., GZIP documentation and sources, + available as gzip-*.tar in ftp://prep.ai.mit.edu/pub/gnu/ + + [5] Schwartz, E. S., and Kallick, B. "Generating a canonical prefix + encoding." Comm. ACM, 7,3 (Mar. 1964), pp. 166-169. + + [6] Hirschberg and Lelewer, "Efficient decoding of prefix codes," + Comm. ACM, 33,4, April 1990, pp. 449-459. + +6. Security Considerations + + Any data compression method involves the reduction of redundancy in + the data. Consequently, any corruption of the data is likely to have + severe effects and be difficult to correct. Uncompressed text, on + the other hand, will probably still be readable despite the presence + of some corrupted bytes. + + It is recommended that systems using this data format provide some + means of validating the integrity of the compressed data. See + reference [3], for example. + +7. Source code + + Source code for a C language implementation of a "deflate" compliant + compressor and decompressor is available within the zlib package at + ftp://ftp.uu.net/pub/archiving/zip/zlib/. + +8. Acknowledgements + + Trademarks cited in this document are the property of their + respective owners. + + Phil Katz designed the deflate format. Jean-Loup Gailly and Mark + Adler wrote the related software described in this specification. + Glenn Randers-Pehrson converted this document to RFC and HTML format. + + + +Deutsch Informational [Page 16] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +9. Author's Address + + L. Peter Deutsch + Aladdin Enterprises + 203 Santa Margarita Ave. + Menlo Park, CA 94025 + + Phone: (415) 322-0103 (AM only) + FAX: (415) 322-1734 + EMail: + + Questions about the technical content of this specification can be + sent by email to: + + Jean-Loup Gailly and + Mark Adler + + Editorial comments on this specification can be sent by email to: + + L. Peter Deutsch and + Glenn Randers-Pehrson + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Deutsch Informational [Page 17] + diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/specification/rfc1952.txt b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/rfc1952.txt new file mode 100644 index 0000000000..a8e51b4567 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/rfc1952.txt @@ -0,0 +1,675 @@ + + + + + + +Network Working Group P. Deutsch +Request for Comments: 1952 Aladdin Enterprises +Category: Informational May 1996 + + + GZIP file format specification version 4.3 + +Status of This Memo + + This memo provides information for the Internet community. This memo + does not specify an Internet standard of any kind. Distribution of + this memo is unlimited. + +IESG Note: + + The IESG takes no position on the validity of any Intellectual + Property Rights statements contained in this document. + +Notices + + Copyright (c) 1996 L. Peter Deutsch + + Permission is granted to copy and distribute this document for any + purpose and without charge, including translations into other + languages and incorporation into compilations, provided that the + copyright notice and this notice are preserved, and that any + substantive changes or deletions from the original are clearly + marked. + + A pointer to the latest version of this and related documentation in + HTML format can be found at the URL + . + +Abstract + + This specification defines a lossless compressed data format that is + compatible with the widely used GZIP utility. The format includes a + cyclic redundancy check value for detecting data corruption. The + format presently uses the DEFLATE method of compression but can be + easily extended to use other compression methods. The format can be + implemented readily in a manner not covered by patents. + + + + + + + + + + +Deutsch Informational [Page 1] + +RFC 1952 GZIP File Format Specification May 1996 + + +Table of Contents + + 1. Introduction ................................................... 2 + 1.1. Purpose ................................................... 2 + 1.2. Intended audience ......................................... 3 + 1.3. Scope ..................................................... 3 + 1.4. Compliance ................................................ 3 + 1.5. Definitions of terms and conventions used ................. 3 + 1.6. Changes from previous versions ............................ 3 + 2. Detailed specification ......................................... 4 + 2.1. Overall conventions ....................................... 4 + 2.2. File format ............................................... 5 + 2.3. Member format ............................................. 5 + 2.3.1. Member header and trailer ........................... 6 + 2.3.1.1. Extra field ................................... 8 + 2.3.1.2. Compliance .................................... 9 + 3. References .................................................. 9 + 4. Security Considerations .................................... 10 + 5. Acknowledgements ........................................... 10 + 6. Author's Address ........................................... 10 + 7. Appendix: Jean-Loup Gailly's gzip utility .................. 11 + 8. Appendix: Sample CRC Code .................................. 11 + +1. Introduction + + 1.1. Purpose + + The purpose of this specification is to define a lossless + compressed data format that: + + * Is independent of CPU type, operating system, file system, + and character set, and hence can be used for interchange; + * Can compress or decompress a data stream (as opposed to a + randomly accessible file) to produce another data stream, + using only an a priori bounded amount of intermediate + storage, and hence can be used in data communications or + similar structures such as Unix filters; + * Compresses data with efficiency comparable to the best + currently available general-purpose compression methods, + and in particular considerably better than the "compress" + program; + * Can be implemented readily in a manner not covered by + patents, and hence can be practiced freely; + * Is compatible with the file format produced by the current + widely used gzip utility, in that conforming decompressors + will be able to read data produced by the existing gzip + compressor. + + + + +Deutsch Informational [Page 2] + +RFC 1952 GZIP File Format Specification May 1996 + + + The data format defined by this specification does not attempt to: + + * Provide random access to compressed data; + * Compress specialized data (e.g., raster graphics) as well as + the best currently available specialized algorithms. + + 1.2. Intended audience + + This specification is intended for use by implementors of software + to compress data into gzip format and/or decompress data from gzip + format. + + The text of the specification assumes a basic background in + programming at the level of bits and other primitive data + representations. + + 1.3. Scope + + The specification specifies a compression method and a file format + (the latter assuming only that a file can store a sequence of + arbitrary bytes). It does not specify any particular interface to + a file system or anything about character sets or encodings + (except for file names and comments, which are optional). + + 1.4. Compliance + + Unless otherwise indicated below, a compliant decompressor must be + able to accept and decompress any file that conforms to all the + specifications presented here; a compliant compressor must produce + files that conform to all the specifications presented here. The + material in the appendices is not part of the specification per se + and is not relevant to compliance. + + 1.5. Definitions of terms and conventions used + + byte: 8 bits stored or transmitted as a unit (same as an octet). + (For this specification, a byte is exactly 8 bits, even on + machines which store a character on a number of bits different + from 8.) See below for the numbering of bits within a byte. + + 1.6. Changes from previous versions + + There have been no technical changes to the gzip format since + version 4.1 of this specification. In version 4.2, some + terminology was changed, and the sample CRC code was rewritten for + clarity and to eliminate the requirement for the caller to do pre- + and post-conditioning. Version 4.3 is a conversion of the + specification to RFC style. + + + +Deutsch Informational [Page 3] + +RFC 1952 GZIP File Format Specification May 1996 + + +2. Detailed specification + + 2.1. Overall conventions + + In the diagrams below, a box like this: + + +---+ + | | <-- the vertical bars might be missing + +---+ + + represents one byte; a box like this: + + +==============+ + | | + +==============+ + + represents a variable number of bytes. + + Bytes stored within a computer do not have a "bit order", since + they are always treated as a unit. However, a byte considered as + an integer between 0 and 255 does have a most- and least- + significant bit, and since we write numbers with the most- + significant digit on the left, we also write bytes with the most- + significant bit on the left. In the diagrams below, we number the + bits of a byte so that bit 0 is the least-significant bit, i.e., + the bits are numbered: + + +--------+ + |76543210| + +--------+ + + This document does not address the issue of the order in which + bits of a byte are transmitted on a bit-sequential medium, since + the data format described here is byte- rather than bit-oriented. + + Within a computer, a number may occupy multiple bytes. All + multi-byte numbers in the format described here are stored with + the least-significant byte first (at the lower memory address). + For example, the decimal number 520 is stored as: + + 0 1 + +--------+--------+ + |00001000|00000010| + +--------+--------+ + ^ ^ + | | + | + more significant byte = 2 x 256 + + less significant byte = 8 + + + +Deutsch Informational [Page 4] + +RFC 1952 GZIP File Format Specification May 1996 + + + 2.2. File format + + A gzip file consists of a series of "members" (compressed data + sets). The format of each member is specified in the following + section. The members simply appear one after another in the file, + with no additional information before, between, or after them. + + 2.3. Member format + + Each member has the following structure: + + +---+---+---+---+---+---+---+---+---+---+ + |ID1|ID2|CM |FLG| MTIME |XFL|OS | (more-->) + +---+---+---+---+---+---+---+---+---+---+ + + (if FLG.FEXTRA set) + + +---+---+=================================+ + | XLEN |...XLEN bytes of "extra field"...| (more-->) + +---+---+=================================+ + + (if FLG.FNAME set) + + +=========================================+ + |...original file name, zero-terminated...| (more-->) + +=========================================+ + + (if FLG.FCOMMENT set) + + +===================================+ + |...file comment, zero-terminated...| (more-->) + +===================================+ + + (if FLG.FHCRC set) + + +---+---+ + | CRC16 | + +---+---+ + + +=======================+ + |...compressed blocks...| (more-->) + +=======================+ + + 0 1 2 3 4 5 6 7 + +---+---+---+---+---+---+---+---+ + | CRC32 | ISIZE | + +---+---+---+---+---+---+---+---+ + + + + +Deutsch Informational [Page 5] + +RFC 1952 GZIP File Format Specification May 1996 + + + 2.3.1. Member header and trailer + + ID1 (IDentification 1) + ID2 (IDentification 2) + These have the fixed values ID1 = 31 (0x1f, \037), ID2 = 139 + (0x8b, \213), to identify the file as being in gzip format. + + CM (Compression Method) + This identifies the compression method used in the file. CM + = 0-7 are reserved. CM = 8 denotes the "deflate" + compression method, which is the one customarily used by + gzip and which is documented elsewhere. + + FLG (FLaGs) + This flag byte is divided into individual bits as follows: + + bit 0 FTEXT + bit 1 FHCRC + bit 2 FEXTRA + bit 3 FNAME + bit 4 FCOMMENT + bit 5 reserved + bit 6 reserved + bit 7 reserved + + If FTEXT is set, the file is probably ASCII text. This is + an optional indication, which the compressor may set by + checking a small amount of the input data to see whether any + non-ASCII characters are present. In case of doubt, FTEXT + is cleared, indicating binary data. For systems which have + different file formats for ascii text and binary data, the + decompressor can use FTEXT to choose the appropriate format. + We deliberately do not specify the algorithm used to set + this bit, since a compressor always has the option of + leaving it cleared and a decompressor always has the option + of ignoring it and letting some other program handle issues + of data conversion. + + If FHCRC is set, a CRC16 for the gzip header is present, + immediately before the compressed data. The CRC16 consists + of the two least significant bytes of the CRC32 for all + bytes of the gzip header up to and not including the CRC16. + [The FHCRC bit was never set by versions of gzip up to + 1.2.4, even though it was documented with a different + meaning in gzip 1.2.4.] + + If FEXTRA is set, optional extra fields are present, as + described in a following section. + + + +Deutsch Informational [Page 6] + +RFC 1952 GZIP File Format Specification May 1996 + + + If FNAME is set, an original file name is present, + terminated by a zero byte. The name must consist of ISO + 8859-1 (LATIN-1) characters; on operating systems using + EBCDIC or any other character set for file names, the name + must be translated to the ISO LATIN-1 character set. This + is the original name of the file being compressed, with any + directory components removed, and, if the file being + compressed is on a file system with case insensitive names, + forced to lower case. There is no original file name if the + data was compressed from a source other than a named file; + for example, if the source was stdin on a Unix system, there + is no file name. + + If FCOMMENT is set, a zero-terminated file comment is + present. This comment is not interpreted; it is only + intended for human consumption. The comment must consist of + ISO 8859-1 (LATIN-1) characters. Line breaks should be + denoted by a single line feed character (10 decimal). + + Reserved FLG bits must be zero. + + MTIME (Modification TIME) + This gives the most recent modification time of the original + file being compressed. The time is in Unix format, i.e., + seconds since 00:00:00 GMT, Jan. 1, 1970. (Note that this + may cause problems for MS-DOS and other systems that use + local rather than Universal time.) If the compressed data + did not come from a file, MTIME is set to the time at which + compression started. MTIME = 0 means no time stamp is + available. + + XFL (eXtra FLags) + These flags are available for use by specific compression + methods. The "deflate" method (CM = 8) sets these flags as + follows: + + XFL = 2 - compressor used maximum compression, + slowest algorithm + XFL = 4 - compressor used fastest algorithm + + OS (Operating System) + This identifies the type of file system on which compression + took place. This may be useful in determining end-of-line + convention for text files. The currently defined values are + as follows: + + + + + + +Deutsch Informational [Page 7] + +RFC 1952 GZIP File Format Specification May 1996 + + + 0 - FAT filesystem (MS-DOS, OS/2, NT/Win32) + 1 - Amiga + 2 - VMS (or OpenVMS) + 3 - Unix + 4 - VM/CMS + 5 - Atari TOS + 6 - HPFS filesystem (OS/2, NT) + 7 - Macintosh + 8 - Z-System + 9 - CP/M + 10 - TOPS-20 + 11 - NTFS filesystem (NT) + 12 - QDOS + 13 - Acorn RISCOS + 255 - unknown + + XLEN (eXtra LENgth) + If FLG.FEXTRA is set, this gives the length of the optional + extra field. See below for details. + + CRC32 (CRC-32) + This contains a Cyclic Redundancy Check value of the + uncompressed data computed according to CRC-32 algorithm + used in the ISO 3309 standard and in section 8.1.1.6.2 of + ITU-T recommendation V.42. (See http://www.iso.ch for + ordering ISO documents. See gopher://info.itu.ch for an + online version of ITU-T V.42.) + + ISIZE (Input SIZE) + This contains the size of the original (uncompressed) input + data modulo 2^32. + + 2.3.1.1. Extra field + + If the FLG.FEXTRA bit is set, an "extra field" is present in + the header, with total length XLEN bytes. It consists of a + series of subfields, each of the form: + + +---+---+---+---+==================================+ + |SI1|SI2| LEN |... LEN bytes of subfield data ...| + +---+---+---+---+==================================+ + + SI1 and SI2 provide a subfield ID, typically two ASCII letters + with some mnemonic value. Jean-Loup Gailly + is maintaining a registry of subfield + IDs; please send him any subfield ID you wish to use. Subfield + IDs with SI2 = 0 are reserved for future use. The following + IDs are currently defined: + + + +Deutsch Informational [Page 8] + +RFC 1952 GZIP File Format Specification May 1996 + + + SI1 SI2 Data + ---------- ---------- ---- + 0x41 ('A') 0x70 ('P') Apollo file type information + + LEN gives the length of the subfield data, excluding the 4 + initial bytes. + + 2.3.1.2. Compliance + + A compliant compressor must produce files with correct ID1, + ID2, CM, CRC32, and ISIZE, but may set all the other fields in + the fixed-length part of the header to default values (255 for + OS, 0 for all others). The compressor must set all reserved + bits to zero. + + A compliant decompressor must check ID1, ID2, and CM, and + provide an error indication if any of these have incorrect + values. It must examine FEXTRA/XLEN, FNAME, FCOMMENT and FHCRC + at least so it can skip over the optional fields if they are + present. It need not examine any other part of the header or + trailer; in particular, a decompressor may ignore FTEXT and OS + and always produce binary output, and still be compliant. A + compliant decompressor must give an error indication if any + reserved bit is non-zero, since such a bit could indicate the + presence of a new field that would cause subsequent data to be + interpreted incorrectly. + +3. References + + [1] "Information Processing - 8-bit single-byte coded graphic + character sets - Part 1: Latin alphabet No.1" (ISO 8859-1:1987). + The ISO 8859-1 (Latin-1) character set is a superset of 7-bit + ASCII. Files defining this character set are available as + iso_8859-1.* in ftp://ftp.uu.net/graphics/png/documents/ + + [2] ISO 3309 + + [3] ITU-T recommendation V.42 + + [4] Deutsch, L.P.,"DEFLATE Compressed Data Format Specification", + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [5] Gailly, J.-L., GZIP documentation, available as gzip-*.tar in + ftp://prep.ai.mit.edu/pub/gnu/ + + [6] Sarwate, D.V., "Computation of Cyclic Redundancy Checks via Table + Look-Up", Communications of the ACM, 31(8), pp.1008-1013. + + + + +Deutsch Informational [Page 9] + +RFC 1952 GZIP File Format Specification May 1996 + + + [7] Schwaderer, W.D., "CRC Calculation", April 85 PC Tech Journal, + pp.118-133. + + [8] ftp://ftp.adelaide.edu.au/pub/rocksoft/papers/crc_v3.txt, + describing the CRC concept. + +4. Security Considerations + + Any data compression method involves the reduction of redundancy in + the data. Consequently, any corruption of the data is likely to have + severe effects and be difficult to correct. Uncompressed text, on + the other hand, will probably still be readable despite the presence + of some corrupted bytes. + + It is recommended that systems using this data format provide some + means of validating the integrity of the compressed data, such as by + setting and checking the CRC-32 check value. + +5. Acknowledgements + + Trademarks cited in this document are the property of their + respective owners. + + Jean-Loup Gailly designed the gzip format and wrote, with Mark Adler, + the related software described in this specification. Glenn + Randers-Pehrson converted this document to RFC and HTML format. + +6. Author's Address + + L. Peter Deutsch + Aladdin Enterprises + 203 Santa Margarita Ave. + Menlo Park, CA 94025 + + Phone: (415) 322-0103 (AM only) + FAX: (415) 322-1734 + EMail: + + Questions about the technical content of this specification can be + sent by email to: + + Jean-Loup Gailly and + Mark Adler + + Editorial comments on this specification can be sent by email to: + + L. Peter Deutsch and + Glenn Randers-Pehrson + + + +Deutsch Informational [Page 10] + +RFC 1952 GZIP File Format Specification May 1996 + + +7. Appendix: Jean-Loup Gailly's gzip utility + + The most widely used implementation of gzip compression, and the + original documentation on which this specification is based, were + created by Jean-Loup Gailly . Since this + implementation is a de facto standard, we mention some more of its + features here. Again, the material in this section is not part of + the specification per se, and implementations need not follow it to + be compliant. + + When compressing or decompressing a file, gzip preserves the + protection, ownership, and modification time attributes on the local + file system, since there is no provision for representing protection + attributes in the gzip file format itself. Since the file format + includes a modification time, the gzip decompressor provides a + command line switch that assigns the modification time from the file, + rather than the local modification time of the compressed input, to + the decompressed output. + +8. Appendix: Sample CRC Code + + The following sample code represents a practical implementation of + the CRC (Cyclic Redundancy Check). (See also ISO 3309 and ITU-T V.42 + for a formal specification.) + + The sample code is in the ANSI C programming language. Non C users + may find it easier to read with these hints: + + & Bitwise AND operator. + ^ Bitwise exclusive-OR operator. + >> Bitwise right shift operator. When applied to an + unsigned quantity, as here, right shift inserts zero + bit(s) at the left. + ! Logical NOT operator. + ++ "n++" increments the variable n. + 0xNNN 0x introduces a hexadecimal (base 16) constant. + Suffix L indicates a long value (at least 32 bits). + + /* Table of CRCs of all 8-bit messages. */ + unsigned long crc_table[256]; + + /* Flag: has the table been computed? Initially false. */ + int crc_table_computed = 0; + + /* Make the table for a fast CRC. */ + void make_crc_table(void) + { + unsigned long c; + + + +Deutsch Informational [Page 11] + +RFC 1952 GZIP File Format Specification May 1996 + + + int n, k; + for (n = 0; n < 256; n++) { + c = (unsigned long) n; + for (k = 0; k < 8; k++) { + if (c & 1) { + c = 0xedb88320L ^ (c >> 1); + } else { + c = c >> 1; + } + } + crc_table[n] = c; + } + crc_table_computed = 1; + } + + /* + Update a running crc with the bytes buf[0..len-1] and return + the updated crc. The crc should be initialized to zero. Pre- and + post-conditioning (one's complement) is performed within this + function so it shouldn't be done by the caller. Usage example: + + unsigned long crc = 0L; + + while (read_buffer(buffer, length) != EOF) { + crc = update_crc(crc, buffer, length); + } + if (crc != original_crc) error(); + */ + unsigned long update_crc(unsigned long crc, + unsigned char *buf, int len) + { + unsigned long c = crc ^ 0xffffffffL; + int n; + + if (!crc_table_computed) + make_crc_table(); + for (n = 0; n < len; n++) { + c = crc_table[(c ^ buf[n]) & 0xff] ^ (c >> 8); + } + return c ^ 0xffffffffL; + } + + /* Return the CRC of the bytes buf[0..len-1]. */ + unsigned long crc(unsigned char *buf, int len) + { + return update_crc(0L, buf, len); + } + + + + +Deutsch Informational [Page 12] + diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/specification/tar_14.html b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/tar_14.html new file mode 100644 index 0000000000..039390f1c6 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/tar_14.html @@ -0,0 +1,1327 @@ + + + + + + +GNU tar 1.28: D. Tar Internals + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

D. Tar Internals

+ + + + + + + + + + +
+ + + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

Basic Tar Format

+

(This message will disappear, once this node revised.) +

+ + +

While an archive may contain many files, the archive itself is a +single ordinary file. Like any other file, an archive file can be +written to a storage device such as a tape or disk, sent through a +pipe or over a network, saved on the active file system, or even +stored in another archive. An archive file is not easy to read or +manipulate without using the tar utility or Tar mode in +GNU Emacs. +

+

Physically, an archive consists of a series of file entries terminated +by an end-of-archive entry, which consists of two 512 blocks of zero +bytes. A file +entry usually describes one of the files in the archive (an +archive member), and consists of a file header and the contents +of the file. File headers contain file names and statistics, checksum +information which tar uses to detect file corruption, and +information about file types. +

+

Archives are permitted to have more than one member with the same +member name. One way this situation can occur is if more than one +version of a file has been stored in the archive. For information +about adding new versions of a file to an archive, see Updating an Archive. +

+

In addition to entries describing archive members, an archive may +contain entries which tar itself uses to store information. +See section Including a Label in the Archive, for an example of such an archive entry. +

+

A tar archive file contains a series of blocks. Each block +contains BLOCKSIZE bytes. Although this format may be thought +of as being on magnetic tape, other media are often used. +

+

Each file archived is represented by a header block which describes +the file, followed by zero or more blocks which give the contents +of the file. At the end of the archive file there are two 512-byte blocks +filled with binary zeros as an end-of-file marker. A reasonable system +should write such end-of-file marker at the end of an archive, but +must not assume that such a block exists when reading an archive. In +particular GNU tar always issues a warning if it does not encounter it. +

+

The blocks may be blocked for physical I/O operations. +Each record of n blocks (where n is set by the +`--blocking-factor=512-size' (`-b 512-size') option to tar) is written with a single +`write ()' operation. On magnetic tapes, the result of +such a write is a single record. When writing an archive, +the last record of blocks should be written at the full size, with +blocks after the zero block containing all zeros. When reading +an archive, a reasonable system should properly handle an archive +whose last record is shorter than the rest, or which contains garbage +records after a zero block. +

+

The header block is defined in C as follows. In the GNU tar +distribution, this is part of file `src/tar.h': +

+
 
+
+/* tar Header Block, from POSIX 1003.1-1990.  */
+
+/* POSIX header.  */
+
+struct posix_header
+{                              /* byte offset */
+  char name[100];               /*   0 */
+  char mode[8];                 /* 100 */
+  char uid[8];                  /* 108 */
+  char gid[8];                  /* 116 */
+  char size[12];                /* 124 */
+  char mtime[12];               /* 136 */
+  char chksum[8];               /* 148 */
+  char typeflag;                /* 156 */
+  char linkname[100];           /* 157 */
+  char magic[6];                /* 257 */
+  char version[2];              /* 263 */
+  char uname[32];               /* 265 */
+  char gname[32];               /* 297 */
+  char devmajor[8];             /* 329 */
+  char devminor[8];             /* 337 */
+  char prefix[155];             /* 345 */
+                                /* 500 */
+};
+
+#define TMAGIC   "ustar"        /* ustar and a null */
+#define TMAGLEN  6
+#define TVERSION "00"           /* 00 and no null */
+#define TVERSLEN 2
+
+/* Values used in typeflag field.  */
+#define REGTYPE  '0'            /* regular file */
+#define AREGTYPE '\0'           /* regular file */
+#define LNKTYPE  '1'            /* link */
+#define SYMTYPE  '2'            /* reserved */
+#define CHRTYPE  '3'            /* character special */
+#define BLKTYPE  '4'            /* block special */
+#define DIRTYPE  '5'            /* directory */
+#define FIFOTYPE '6'            /* FIFO special */
+#define CONTTYPE '7'            /* reserved */
+
+#define XHDTYPE  'x'            /* Extended header referring to the
+                                   next file in the archive */
+#define XGLTYPE  'g'            /* Global extended header */
+
+/* Bits used in the mode field, values in octal.  */
+#define TSUID    04000          /* set UID on execution */
+#define TSGID    02000          /* set GID on execution */
+#define TSVTX    01000          /* reserved */
+                                /* file permissions */
+#define TUREAD   00400          /* read by owner */
+#define TUWRITE  00200          /* write by owner */
+#define TUEXEC   00100          /* execute/search by owner */
+#define TGREAD   00040          /* read by group */
+#define TGWRITE  00020          /* write by group */
+#define TGEXEC   00010          /* execute/search by group */
+#define TOREAD   00004          /* read by other */
+#define TOWRITE  00002          /* write by other */
+#define TOEXEC   00001          /* execute/search by other */
+
+/* tar Header Block, GNU extensions.  */
+
+/* In GNU tar, SYMTYPE is for to symbolic links, and CONTTYPE is for
+   contiguous files, so maybe disobeying the "reserved" comment in POSIX
+   header description.  I suspect these were meant to be used this way, and
+   should not have really been "reserved" in the published standards.  */
+
+/* *BEWARE* *BEWARE* *BEWARE* that the following information is still
+   boiling, and may change.  Even if the OLDGNU format description should be
+   accurate, the so-called GNU format is not yet fully decided.  It is
+   surely meant to use only extensions allowed by POSIX, but the sketch
+   below repeats some ugliness from the OLDGNU format, which should rather
+   go away.  Sparse files should be saved in such a way that they do *not*
+   require two passes at archive creation time.  Huge files get some POSIX
+   fields to overflow, alternate solutions have to be sought for this.  */
+
+/* Descriptor for a single file hole.  */
+
+struct sparse
+{                              /* byte offset */
+  char offset[12];              /*   0 */
+  char numbytes[12];            /*  12 */
+                                /*  24 */
+};
+
+/* Sparse files are not supported in POSIX ustar format.  For sparse files
+   with a POSIX header, a GNU extra header is provided which holds overall
+   sparse information and a few sparse descriptors.  When an old GNU header
+   replaces both the POSIX header and the GNU extra header, it holds some
+   sparse descriptors too.  Whether POSIX or not, if more sparse descriptors
+   are still needed, they are put into as many successive sparse headers as
+   necessary.  The following constants tell how many sparse descriptors fit
+   in each kind of header able to hold them.  */
+
+#define SPARSES_IN_EXTRA_HEADER  16
+#define SPARSES_IN_OLDGNU_HEADER 4
+#define SPARSES_IN_SPARSE_HEADER 21
+
+/* Extension header for sparse files, used immediately after the GNU extra
+   header, and used only if all sparse information cannot fit into that
+   extra header.  There might even be many such extension headers, one after
+   the other, until all sparse information has been recorded.  */
+
+struct sparse_header
+{                              /* byte offset */
+  struct sparse sp[SPARSES_IN_SPARSE_HEADER];
+                                /*   0 */
+  char isextended;              /* 504 */
+                                /* 505 */
+};
+
+/* The old GNU format header conflicts with POSIX format in such a way that
+   POSIX archives may fool old GNU tar's, and POSIX tar's might well be
+   fooled by old GNU tar archives.  An old GNU format header uses the space
+   used by the prefix field in a POSIX header, and cumulates information
+   normally found in a GNU extra header.  With an old GNU tar header, we
+   never see any POSIX header nor GNU extra header.  Supplementary sparse
+   headers are allowed, however.  */
+
+struct oldgnu_header
+{                              /* byte offset */
+  char unused_pad1[345];        /*   0 */
+  char atime[12];               /* 345 Incr. archive: atime of the file */
+  char ctime[12];               /* 357 Incr. archive: ctime of the file */
+  char offset[12];              /* 369 Multivolume archive: the offset of
+                                   the start of this volume */
+  char longnames[4];            /* 381 Not used */
+  char unused_pad2;             /* 385 */
+  struct sparse sp[SPARSES_IN_OLDGNU_HEADER];
+                                /* 386 */
+  char isextended;              /* 482 Sparse file: Extension sparse header
+                                   follows */
+  char realsize[12];            /* 483 Sparse file: Real size*/
+                                /* 495 */
+};
+
+/* OLDGNU_MAGIC uses both magic and version fields, which are contiguous.
+   Found in an archive, it indicates an old GNU header format, which will be
+   hopefully become obsolescent.  With OLDGNU_MAGIC, uname and gname are
+   valid, though the header is not truly POSIX conforming.  */
+#define OLDGNU_MAGIC "ustar  "  /* 7 chars and a null */
+
+/* The standards committee allows only capital A through capital Z for
+   user-defined expansion.  Other letters in use include:
+
+   'A' Solaris Access Control List
+   'E' Solaris Extended Attribute File
+   'I' Inode only, as in 'star'
+   'N' Obsolete GNU tar, for file names that do not fit into the main header.
+   'X' POSIX 1003.1-2001 eXtended (VU version)  */
+
+/* This is a dir entry that contains the names of files that were in the
+   dir at the time the dump was made.  */
+#define GNUTYPE_DUMPDIR 'D'
+
+/* Identifies the *next* file on the tape as having a long linkname.  */
+#define GNUTYPE_LONGLINK 'K'
+
+/* Identifies the *next* file on the tape as having a long name.  */
+#define GNUTYPE_LONGNAME 'L'
+
+/* This is the continuation of a file that began on another volume.  */
+#define GNUTYPE_MULTIVOL 'M'
+
+/* This is for sparse files.  */
+#define GNUTYPE_SPARSE 'S'
+
+/* This file is a tape/volume header.  Ignore it on extraction.  */
+#define GNUTYPE_VOLHDR 'V'
+
+/* Solaris extended header */
+#define SOLARIS_XHDTYPE 'X'
+
+/* Jörg Schilling star header */
+
+struct star_header
+{                              /* byte offset */
+  char name[100];               /*   0 */
+  char mode[8];                 /* 100 */
+  char uid[8];                  /* 108 */
+  char gid[8];                  /* 116 */
+  char size[12];                /* 124 */
+  char mtime[12];               /* 136 */
+  char chksum[8];               /* 148 */
+  char typeflag;                /* 156 */
+  char linkname[100];           /* 157 */
+  char magic[6];                /* 257 */
+  char version[2];              /* 263 */
+  char uname[32];               /* 265 */
+  char gname[32];               /* 297 */
+  char devmajor[8];             /* 329 */
+  char devminor[8];             /* 337 */
+  char prefix[131];             /* 345 */
+  char atime[12];               /* 476 */
+  char ctime[12];               /* 488 */
+                                /* 500 */
+};
+
+#define SPARSES_IN_STAR_HEADER      4
+#define SPARSES_IN_STAR_EXT_HEADER  21
+
+struct star_in_header
+{
+  char fill[345];       /*   0  Everything that is before t_prefix */
+  char prefix[1];       /* 345  t_name prefix */
+  char fill2;           /* 346  */
+  char fill3[8];        /* 347  */
+  char isextended;      /* 355  */
+  struct sparse sp[SPARSES_IN_STAR_HEADER]; /* 356  */
+  char realsize[12];    /* 452  Actual size of the file */
+  char offset[12];      /* 464  Offset of multivolume contents */
+  char atime[12];       /* 476  */
+  char ctime[12];       /* 488  */
+  char mfill[8];        /* 500  */
+  char xmagic[4];       /* 508  "tar" */
+};
+
+struct star_ext_header
+{
+  struct sparse sp[SPARSES_IN_STAR_EXT_HEADER];
+  char isextended;
+};
+
+
+

All characters in header blocks are represented by using 8-bit +characters in the local variant of ASCII. Each field within the +structure is contiguous; that is, there is no padding used within +the structure. Each character on the archive medium is stored +contiguously. +

+

Bytes representing the contents of files (after the header block +of each file) are not translated in any way and are not constrained +to represent characters in any character set. The tar format +does not distinguish text files from binary files, and no translation +of file contents is performed. +

+

The name, linkname, magic, uname, and +gname are null-terminated character strings. All other fields +are zero-filled octal numbers in ASCII. Each numeric field of width +w contains w minus 1 digits, and a null. +

+

The name field is the file name of the file, with directory names +(if any) preceding the file name, separated by slashes. +

+

See how big a name before field overflows? +

+ +

The mode field provides nine bits specifying file permissions +and three bits to specify the Set UID, Set GID, and Save Text +(sticky) modes. Values for these bits are defined above. +When special permissions are required to create a file with a given +mode, and the user restoring files from the archive does not hold such +permissions, the mode bit(s) specifying those special permissions +are ignored. Modes which are not supported by the operating system +restoring files from the archive will be ignored. Unsupported modes +should be faked up when creating or updating an archive; e.g., the +group permission could be copied from the other permission. +

+

The uid and gid fields are the numeric user and group +ID of the file owners, respectively. If the operating system does +not support numeric user or group IDs, these fields should +be ignored. +

+

The size field is the size of the file in bytes; linked files +are archived with this field specified as zero. +

+

The mtime field is the data modification time of the file at +the time it was archived. It is the ASCII representation of the octal +value of the last time the file's contents were modified, represented +as an integer number of +seconds since January 1, 1970, 00:00 Coordinated Universal Time. +

+

The chksum field is the ASCII representation of the octal value +of the simple sum of all bytes in the header block. Each 8-bit +byte in the header is added to an unsigned integer, initialized to +zero, the precision of which shall be no less than seventeen bits. +When calculating the checksum, the chksum field is treated as +if it were all blanks. +

+

The typeflag field specifies the type of file archived. If a +particular implementation does not recognize or permit the specified +type, the file will be extracted as if it were a regular file. As this +action occurs, tar issues a warning to the standard error. +

+

The atime and ctime fields are used in making incremental +backups; they store, respectively, the particular file's access and +status change times. +

+

The offset is used by the `--multi-volume' (`-M') option, when +making a multi-volume archive. The offset is number of bytes into +the file that we need to restart at to continue the file on the next +tape, i.e., where we store the location that a continued file is +continued at. +

+

The following fields were added to deal with sparse files. A file +is sparse if it takes in unallocated blocks which end up being +represented as zeros, i.e., no useful data. A test to see if a file +is sparse is to look at the number blocks allocated for it versus the +number of characters in the file; if there are fewer blocks allocated +for the file than would normally be allocated for a file of that +size, then the file is sparse. This is the method tar uses to +detect a sparse file, and once such a file is detected, it is treated +differently from non-sparse files. +

+

Sparse files are often dbm files, or other database-type files +which have data at some points and emptiness in the greater part of +the file. Such files can appear to be very large when an `ls +-l' is done on them, when in truth, there may be a very small amount +of important data contained in the file. It is thus undesirable +to have tar think that it must back up this entire file, as +great quantities of room are wasted on empty blocks, which can lead +to running out of room on a tape far earlier than is necessary. +Thus, sparse files are dealt with so that these empty blocks are +not written to the tape. Instead, what is written to the tape is a +description, of sorts, of the sparse file: where the holes are, how +big the holes are, and how much data is found at the end of the hole. +This way, the file takes up potentially far less room on the tape, +and when the file is extracted later on, it will look exactly the way +it looked beforehand. The following is a description of the fields +used to handle a sparse file: +

+

The sp is an array of struct sparse. Each struct +sparse contains two 12-character strings which represent an offset +into the file and a number of bytes to be written at that offset. +The offset is absolute, and not relative to the offset in preceding +array element. +

+

The header can hold four of these struct sparse at the moment; +if more are needed, they are not stored in the header. +

+

The isextended flag is set when an extended_header +is needed to deal with a file. Note that this means that this flag +can only be set when dealing with a sparse file, and it is only set +in the event that the description of the file will not fit in the +allotted room for sparse structures in the header. In other words, +an extended_header is needed. +

+

The extended_header structure is used for sparse files which +need more sparse structures than can fit in the header. The header can +fit 4 such structures; if more are needed, the flag isextended +gets set and the next block is an extended_header. +

+

Each extended_header structure contains an array of 21 +sparse structures, along with a similar isextended flag +that the header had. There can be an indeterminate number of such +extended_headers to describe a sparse file. +

+
+
REGTYPE
+
AREGTYPE
+

These flags represent a regular file. In order to be compatible +with older versions of tar, a typeflag value of +AREGTYPE should be silently recognized as a regular file. +New archives should be created using REGTYPE. Also, for +backward compatibility, tar treats a regular file whose name +ends with a slash as a directory. +

+
+
LNKTYPE
+

This flag represents a file linked to another file, of any type, +previously archived. Such files are identified in Unix by each +file having the same device and inode number. The linked-to name is +specified in the linkname field with a trailing null. +

+
+
SYMTYPE
+

This represents a symbolic link to another file. The linked-to name +is specified in the linkname field with a trailing null. +

+
+
CHRTYPE
+
BLKTYPE
+

These represent character special files and block special files +respectively. In this case the devmajor and devminor +fields will contain the major and minor device numbers respectively. +Operating systems may map the device specifications to their own +local specification, or may ignore the entry. +

+
+
DIRTYPE
+

This flag specifies a directory or sub-directory. The directory +name in the name field should end with a slash. On systems where +disk allocation is performed on a directory basis, the size field +will contain the maximum number of bytes (which may be rounded to +the nearest disk block allocation unit) which the directory may +hold. A size field of zero indicates no such limiting. Systems +which do not support limiting in this manner should ignore the +size field. +

+
+
FIFOTYPE
+

This specifies a FIFO special file. Note that the archiving of a +FIFO file archives the existence of this file and not its contents. +

+
+
CONTTYPE
+

This specifies a contiguous file, which is the same as a normal +file except that, in operating systems which support it, all its +space is allocated contiguously on the disk. Operating systems +which do not allow contiguous allocation should silently treat this +type as a normal file. +

+
+
AZ
+

These are reserved for custom implementations. Some of these are +used in the GNU modified format, as described below. +

+
+
+ +

Other values are reserved for specification in future revisions of +the P1003 standard, and should not be used by any tar program. +

+

The magic field indicates that this archive was output in +the P1003 archive format. If this field contains TMAGIC, +the uname and gname fields will contain the ASCII +representation of the owner and group of the file respectively. +If found, the user and group IDs are used rather than the values in +the uid and gid fields. +

+

For references, see ISO/IEC 9945-1:1990 or IEEE Std 1003.1-1990, pages +169-173 (section 10.1) for Archive/Interchange File Format; and +IEEE Std 1003.2-1992, pages 380-388 (section 4.48) and pages 936-940 +(section E.4.48) for pax - Portable archive interchange. +

+
+ + + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

GNU Extensions to the Archive Format

+

(This message will disappear, once this node revised.) +

+ + +

The GNU format uses additional file types to describe new types of +files in an archive. These are listed below. +

+
+
GNUTYPE_DUMPDIR
+
'D'
+

This represents a directory and a list of files created by the +`--incremental' (`-G') option. The size field gives the total +size of the associated list of files. Each file name is preceded by +either a `Y' (the file should be in this archive) or an `N'. +(The file is a directory, or is not stored in the archive.) Each file +name is terminated by a null. There is an additional null after the +last file name. +

+
+
GNUTYPE_MULTIVOL
+
'M'
+

This represents a file continued from another volume of a multi-volume +archive created with the `--multi-volume' (`-M') option. The original +type of the file is not given here. The size field gives the +maximum size of this piece of the file (assuming the volume does +not end before the file is written out). The offset field +gives the offset from the beginning of the file where this part of +the file begins. Thus size plus offset should equal +the original size of the file. +

+
+
GNUTYPE_SPARSE
+
'S'
+

This flag indicates that we are dealing with a sparse file. Note +that archiving a sparse file requires special operations to find +holes in the file, which mark the positions of these holes, along +with the number of bytes of data to be found after the hole. +

+
+
GNUTYPE_VOLHDR
+
'V'
+

This file type is used to mark the volume header that was given with +the `--label=archive-label' (`-V archive-label') option when the archive was created. The name +field contains the name given after the `--label=archive-label' (`-V archive-label') option. +The size field is zero. Only the first file in each volume +of an archive should have this type. +

+
+
+ +

You may have trouble reading a GNU format archive on a +non-GNU system if the options `--incremental' (`-G'), +`--multi-volume' (`-M'), `--sparse' (`-S'), or `--label=archive-label' (`-V archive-label') were +used when writing the archive. In general, if tar does not +use the GNU-added fields of the header, other versions of +tar should be able to read the archive. Otherwise, the +tar program will give an error, the most likely one being a +checksum error. +

+
+ + + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

Storing Sparse Files

+ + +

The notion of sparse file, and the ways of handling it from the point +of view of GNU tar user have been described in detail in +Archiving Sparse Files. This chapter describes the internal format GNU tar +uses to store such files. +

+

The support for sparse files in GNU tar has a long history. The +earliest version featuring this support that I was able to find was 1.09, +released in November, 1990. The format introduced back then is called +old GNU sparse format and in spite of the fact that its design +contained many flaws, it was the only format GNU tar supported +until version 1.14 (May, 2004), which introduced initial support for +sparse archives in PAX archives (see section GNU tar and POSIX tar). This +format was not free from design flaws, either and it was subsequently +improved in versions 1.15.2 (November, 2005) and 1.15.92 (June, +2006). +

+

In addition to GNU sparse format, GNU tar is able to read and +extract sparse files archived by star. +

+

The following subsections describe each format in detail. +

+ + + + + + +
+ + + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

D.0.1 Old GNU Format

+ +

The format introduced in November 1990 (v. 1.09) was +designed on top of standard ustar headers in such an +unfortunate way that some of its fields overwrote fields required by +POSIX. +

+

An old GNU sparse header is designated by type `S' +(GNUTYPE_SPARSE) and has the following layout: +

+ + + + + + + + + + + +

Offset

Size

Name

Data type

Contents +

0

345

N/A

Not used. +

345

12

atime

Number

atime of the file. +

357

12

ctime

Number

ctime of the file . +

369

12

offset

Number

For +multivolume archives: the offset of the start of this volume. +

381

4

N/A

Not used. +

385

1

N/A

Not used. +

386

96

sp

sparse_header

(4 entries) File map. +

482

1

isextended

Bool

1 if an +extension sparse header follows, 0 otherwise. +

483

12

realsize

Number

Real size of the file. +

+ +

Each of sparse_header object at offset 386 describes a single +data chunk. It has the following structure: +

+ + + + +

Offset

Size

Data type

Contents +

0

12

Number

Offset of the +beginning of the chunk. +

12

12

Number

Size of the chunk. +

+ +

If the member contains more than four chunks, the isextended +field of the header has the value 1 and the main header is +followed by one or more extension headers. Each such header has +the following structure: +

+ + + + +

Offset

Size

Name

Data type

Contents +

0

21

sp

sparse_header

+

(21 entries) File map. +

504

1

isextended

Bool

1 if an +extension sparse header follows, or 0 otherwise. +

+ +

A header with isextended=0 ends the map. +

+
+ + + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

D.0.2 PAX Format, Versions 0.0 and 0.1

+ +

There are two formats available in this branch. The version 0.0 +is the initial version of sparse format used by tar +versions 1.14-1.15.1. The sparse file map is kept in extended +(x) PAX header variables: +

+
+
GNU.sparse.size
+

Real size of the stored file; +

+
+
GNU.sparse.numblocks
+

Number of blocks in the sparse map; +

+
+
GNU.sparse.offset
+

Offset of the data block; +

+
+
GNU.sparse.numbytes
+

Size of the data block. +

+
+ +

The latter two variables repeat for each data block, so the overall +structure is like this: +

+
 
GNU.sparse.size=size
+GNU.sparse.numblocks=numblocks
+repeat numblocks times
+  GNU.sparse.offset=offset
+  GNU.sparse.numbytes=numbytes
+end repeat
+
+

This format presented the following two problems: +

+
    +
  1. +Whereas the POSIX specification allows a variable to appear multiple +times in a header, it requires that only the last occurrence be +meaningful. Thus, multiple occurrences of GNU.sparse.offset and +GNU.sparse.numbytes are conflicting with the POSIX specs. + +
  2. +Attempting to extract such archives using a third-party's tar +results in extraction of sparse files in condensed form. If +the tar implementation in question does not support POSIX +format, it will also extract a file containing extension header +attributes. This file can be used to expand the file to its original +state. However, posix-aware tars will usually ignore the +unknown variables, which makes restoring the file more +difficult. See Extraction of sparse members in v.0.0 format, for the detailed description of how to +restore such members using non-GNU tars. +
+ + +

GNU tar 1.15.2 introduced sparse format version 0.1, which +attempted to solve these problems. As its predecessor, this format +stores sparse map in the extended POSIX header. It retains +GNU.sparse.size and GNU.sparse.numblocks variables, but +instead of GNU.sparse.offset/GNU.sparse.numbytes pairs +it uses a single variable: +

+
+
GNU.sparse.map
+

Map of non-null data chunks. It is a string consisting of +comma-separated values "offset,size[,offset-1,size-1...]" +

+
+ +

To address the 2nd problem, the name field in ustar +is replaced with a special name, constructed using the following pattern: +

+
 
%d/GNUSparseFile.%p/%f
+
+

The real name of the sparse file is stored in the variable +GNU.sparse.name. Thus, those tar implementations +that are not aware of GNU extensions will at least extract the files +into separate directories, giving the user a possibility to expand it +afterwards. See Extraction of sparse members in v.0.1 format, for the detailed description of how to +restore such members using non-GNU tars. +

+

The resulting GNU.sparse.map string can be very long. +Although POSIX does not impose any limit on the length of a x +header variable, this possibly can confuse some tars. +

+
+ + + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

D.0.3 PAX Format, Version 1.0

+ +

The version 1.0 of sparse format was introduced with GNU tar +1.15.92. Its main objective was to make the resulting file +extractable with little effort even by non-posix aware tar +implementations. Starting from this version, the extended header +preceding a sparse member always contains the following variables that +identify the format being used: +

+
+
GNU.sparse.major
+

Major version +

+
+
GNU.sparse.minor
+

Minor version +

+
+ +

The name field in ustar header contains a special name, +constructed using the following pattern: +

+
 
%d/GNUSparseFile.%p/%f
+
+

The real name of the sparse file is stored in the variable +GNU.sparse.name. The real size of the file is stored in the +variable GNU.sparse.realsize. +

+

The sparse map itself is stored in the file data block, preceding the actual +file data. It consists of a series of octal numbers of arbitrary length, delimited +by newlines. The map is padded with nulls to the nearest block boundary. +

+

The first number gives the number of entries in the map. Following are map entries, +each one consisting of two numbers giving the offset and size of the +data block it describes. +

+

The format is designed in such a way that non-posix aware tars and tars not +supporting GNU.sparse.* keywords will extract each sparse file +in its condensed form with the file map prepended and will place it +into a separate directory. Then, using a simple program it would be +possible to expand the file to its original form even without GNU tar. +See section Extracting Sparse Members, for the detailed information on how to extract +sparse members without GNU tar. +

+
+ + + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

Format of the Incremental Snapshot Files

+ + +

A snapshot file (or directory file) is created during +incremental backups (see section Using tar to Perform Incremental Dumps). It +contains the status of the file system at the time of the dump and is +used to determine which files were modified since the last backup. +

+

GNU tar version 1.28 supports three snapshot file +formats. The first format, called format 0, is the one used by +GNU tar versions up to and including 1.15.1. The second format, called +format 1 is an extended version of this format, that contains more +metadata and allows for further extensions. It was used by alpha release +version 1.15.90. For alpha version 1.15.91 and stable releases +version 1.16 up through 1.28, the format 2 is used. +

+

GNU tar is able to read all three formats, but will create +snapshots only in format 2. +

+

This appendix describes all three formats in detail. +

+
    +
  1. + +
  2. + `Format 0' snapshot file begins with a line containing a +decimal number that represents a UNIX timestamp of the +beginning of the last archivation. This line is followed by directory +metadata descriptions, one per line. Each description has the +following format: + +
     
    [nfs]dev inode name
    +
    + +

    where: +

    +
    +
    nfs
    +

    A single plus character (`+'), if this directory is located on +an NFS-mounted partition, otherwise empty. +

    +

    (That is, for non-NFS directories, the first character on the +description line contains the start of the dev field.) +

    +
    +
    dev
    +

    Device number of the directory; +

    +
    +
    inode
    +

    I-node number of the directory; +

    +
    +
    name
    +

    Name of the directory. Any special characters (white-space, +backslashes, etc.) are quoted. +

    +
    + + + +
  3. + `Format 1' snapshot file begins with a line specifying the +format of the file. This line has the following structure: + +
     
    `GNU tar-'tar-version`-'incr-format-version
    +
    + +

    where tar-version is the version number of GNU tar +implementation that created this snapshot, and +incr-format-version is the version number of the snapshot format +(in this case `1'). +

    +

    Next line contains two decimal numbers, representing the +time of the last backup. First number is the number of seconds, the +second one is the number of nanoseconds, since the beginning of the +epoch. +

    +

    Lines that follow contain directory metadata, one line per +directory. Each line is formatted as follows: +

    +
     
    [nfs]mtime-sec mtime-nsec dev inode name
    +
    + +

    where mtime-sec and mtime-nsec represent last +modification time of this directory with nanosecond precision; +nfs, dev, inode and name have the same meaning +as with `format 0'. +

    + + +
  4. + `Format 2' snapshot file begins with a format identifier, as described for +version 1, e.g.: + +
     
    GNU tar-1.28-2
    +
    +

    This line is followed by newline. Rest of file consists of +records, separated by null (ASCII 0) +characters. Thus, in contrast to the previous formats, format 2 +snapshot is a binary file. +

    +

    First two records are decimal integers, representing the +time of the last backup. First number is the number of seconds, the +second one is the number of nanoseconds, since the beginning of the +epoch. These are followed by arbitrary number of directory records. +

    +

    Each directory record contains a set of metadata describing a +particular directory. Parts of a directory record are delimited with +ASCII 0 characters. The following table describes each +part. The Number type in this table stands for a decimal integer +in ASCII notation. (Negative values are preceeded with a "-" +character, while positive values have no leading punctuation.) +

    + + + + + + + + + + +

    Field

    Type

    Description +

    nfs

    Character

    `1' if the directory is located on +an NFS-mounted partition, or `0' otherwise; +

    timestamp_sec

    Number

    Modification time, seconds; +

    timestamp_nsec

    Number

    Modification time, nanoseconds; +

    dev

    Number

    Device number; +

    ino

    Number

    I-node number; +

    name

    String

    Directory name; in contrast to the +previous versions it is not quoted; +

    contents

    Dumpdir

    Contents of the directory; +See section Dumpdir, for a description of its format. +

    +
    + +

    Dumpdirs stored in snapshot files contain only records of types +`Y', `N' and `D'. +

    + + +

    The specific range of values allowed in each of the Number fields +depends on the underlying C datatypes as determined when tar +is compiled. To see the specific ranges allowed for a particular +tar binary, you can use the +`--show-snapshot-field-ranges' option: +

    +
     
    $ tar --show-shapshot-field-ranges
    +This tar's snapshot file field ranges are
    +   (field name      => [ min, max ]):
    +
    +    nfs             => [ 0, 1 ],
    +    timestamp_sec   => [ -9223372036854775808, 9223372036854775807 ],
    +    timestamp_nsec  => [ 0, 999999999 ],
    +    dev             => [ 0, 18446744073709551615 ],
    +    ino             => [ 0, 18446744073709551615 ],
    +
    +

    (This example is from a GNU/Linux x86_64 system.) +

    +
+ + +
+ + + + + + + + + + + + + + + + + +
[ < ][ > ]   [ << ][ Up ][ >> ]         [Top][Contents][Index][ ? ]
+

Dumpdir

+ + +

Incremental archives keep information about contents of each +dumped directory in special data blocks called dumpdirs. +

+

Dumpdir is a sequence of entries of the following form: +

+
 
C filename \0
+
+ +

where C is one of the control codes described below, +filename is the name of the file C operates upon, and +`\0' represents a nul character (ASCII 0). The white space +characters were added for readability, real dumpdirs do not contain +them. +

+

Each dumpdir ends with a single nul character. +

+

The following table describes control codes and their meanings: +

+
+
`Y'
+

filename is contained in the archive. +

+
+
`N'
+

filename was present in the directory at the time the archive +was made, yet it was not dumped to the archive, because it had not +changed since the last backup. +

+
+
`D'
+

filename is a directory. +

+
+
`R'
+

This code requests renaming of the filename to the name +specified with the `T' command, that immediately follows it. +

+
+
`T'
+

Specify target file name for `R' command (see below). +

+
+
`X'
+

Specify temporary directory name for a rename operation (see below). +

+
+ +

Codes `Y', `N' and `D' require filename argument +to be a relative file name to the directory this dumpdir describes, +whereas codes `R', `T' and `X' require their argument +to be an absolute file name. +

+

The three codes `R', `T' and `X' specify a +renaming operation. In the simplest case it is: +

+
 
R`source'\0T`dest'\0
+
+ +

which means "rename file `source' to file `dest'". +

+

However, there are cases that require using a temporary +directory. For example, consider the following scenario: +

+
    +
  1. +Previous run dumped a directory `foo' which contained the +following three directories: + +
     
    a
    +b
    +c
    +
    +
  2. +They were renamed cyclically, so that: + +
     
    `a' became `b'
    +`b' became `c'
    +`c' became `a'
    +
    +
  3. +New incremental dump was made. +
+ +

This case cannot be handled by three successive renames, since +renaming `a' to `b' will destroy the existing directory. +To correctly process it, GNU tar needs a temporary directory, so +it creates the following dumpdir (newlines have been added for +readability): +

+
 
Xfoo\0
+Rfoo/a\0T\0
+Rfoo/b\0Tfoo/c\0
+Rfoo/c\0Tfoo/a\0
+R\0Tfoo/a\0
+
+

The first command, `Xfoo\0', instructs the extractor to create a +temporary directory in the directory `foo'. Second command, +`Rfoo/aT\0', says "rename file `foo/a' to the temporary +directory that has just been created" (empty file name after a +command means use temporary directory). Third and fourth commands +work as usual, and, finally, the last command, `R\0Tfoo/a\0' +tells tar to rename the temporary directory to `foo/a'. +

+

The exact placement of a dumpdir in the archive depends on the +archive format (see section Controlling the Archive Format): +

+
    +
  • PAX archives + +

    In PAX archives, dumpdir is stored in the extended header of the +corresponding directory, in variable GNU.dumpdir. +

    +
  • GNU and old GNU archives + +

    These formats implement special header type `D', which is similar +to ustar header `5' (directory), except that it precedes a data +block containing the dumpdir. +

+ + +
+ + + + + + + + + + + + +
[ << ][ >> ]           [Top][Contents][Index][ ? ]
+

+ + This document was generated on July, 28 2014 using texi2html 1.76. + +
+ +

+ + diff --git a/external/api-doc-tools/external/SharpZipLib/Documentation/specification/tar_8.html.REMOVED.git-id b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/tar_8.html.REMOVED.git-id new file mode 100644 index 0000000000..1849f825be --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/Documentation/specification/tar_8.html.REMOVED.git-id @@ -0,0 +1 @@ +f4d18f7ab1b264d480350de7ab92376dc9f6eafa \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/GlobalAssemblyInfo.cs b/external/api-doc-tools/external/SharpZipLib/GlobalAssemblyInfo.cs new file mode 100644 index 0000000000..e116e6a783 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/GlobalAssemblyInfo.cs @@ -0,0 +1,48 @@ +using System.Reflection; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyCompany("ICSharpCode")] +[assembly: AssemblyProduct("SharpZipLib (#ziplib)")] +[assembly: AssemblyCopyright("Copyright © 2000-2016 SharpZipLib Contributors")] +[assembly: AssemblyTrademark("")] + +#if DEBUG +[assembly: AssemblyConfiguration("Debug")] +#else +[assembly: AssemblyConfiguration("Release")] +#endif + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] + +// https://blogs.msdn.microsoft.com/carloc/2008/02/22/version-numbers-in-a-compiled-assembly/ +// +// Build: the number of days since 1.1.2000 (you can modify this start date by setting Software\\Microsoft\\ALink\\VersionStartDate). i.e. 1879 = 02.22.2005 +// +// Revision: the number of two second intervals since midnight in local time; i.e. 31308 = 17:23:36 local time. + +// Specifies the version of the assembly being attributed. +[assembly: AssemblyVersion("1.0.*")] + +// Instructs a compiler to use a specific version number for the Win32 file version resource. +// The Win32 file version is not required to be the same as the assembly's version number. +[assembly: AssemblyFileVersion("1.0")] + +// Defines additional version information for an assembly manifest. +[assembly: AssemblyInformationalVersion("1.0")] diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.NET45/ICSharpCode.SharpZipLib.csproj b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.NET45/ICSharpCode.SharpZipLib.csproj new file mode 100644 index 0000000000..cb0691ba5b --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.NET45/ICSharpCode.SharpZipLib.csproj @@ -0,0 +1,288 @@ + + + + + Release + AnyCPU + 2.0 + {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD} + ICSharpCode.SharpZipLib + ICSharpCode.SharpZipLib + Library + + 4 + + false + false + OnBuildSuccess + + + ..\bin\ICSharpCode.SharpZipLib.xml + v4.5 + + + + + + + false + true + false + false + ..\bin\Release\ + false + pdbonly + false + ..\bin\Release\ICSharpCode.SharpZipLib.xml + true + MinimumRecommendedRules.ruleset + TRACE;NET45;CODE_ANALYSIS;CODE_ANALYSIS + 0 + prompt + + + true + false + false + false + ..\bin\Debug\ + false + Full + false + ..\bin\Debug\ICSharpCode.SharpZipLib.xml + TRACE;DEBUG;NET45;CODE_ANALYSIS;CODE_ANALYSIS + true + AllRules.ruleset + prompt + + + false + Auto + 4194304 + AnyCPU + 4096 + + + true + + + ..\ICSharpCode.SharpZipLib.snk + + + + + + + + GlobalAssemblyInfo.cs + + + Properties\AssemblyInfo.cs + + + SharpZipBaseException.cs + + + BZip2\BZip2.cs + + + BZip2\BZip2Constants.cs + + + BZip2\BZip2Exception.cs + + + BZip2\BZip2InputStream.cs + + + BZip2\BZip2OutputStream.cs + + + Checksum\Adler32.cs + + + Checksum\BZip2Crc.cs + + + Checksum\Crc32.cs + + + Checksum\IChecksum.cs + + + Core\FileSystemScanner.cs + + + Core\INameTransform.cs + + + Core\IScanFilter.cs + + + Core\NameFilter.cs + + + Core\PathFilter.cs + + + Core\StreamUtils.cs + + + Core\WindowsPathUtils.cs + + + Encryption\PkzipClassic.cs + + + Encryption\ZipAESStream.cs + + + Encryption\ZipAESTransform.cs + + + GZip\GZip.cs + + + GZip\GZipConstants.cs + + + GZip\GZipException.cs + + + GZip\GzipInputStream.cs + + + GZip\GzipOutputStream.cs + + + Lzw\LzwConstants.cs + + + Lzw\LzwException.cs + + + Lzw\LzwInputStream.cs + + + Tar\InvalidHeaderException.cs + + + Tar\TarArchive.cs + + + Tar\TarBuffer.cs + + + Tar\TarEntry.cs + + + Tar\TarException.cs + + + Tar\TarHeader.cs + + + Tar\TarInputStream.cs + + + Tar\TarOutputStream.cs + + + Zip\FastZip.cs + + + Zip\IEntryFactory.cs + + + Zip\WindowsNameTransform.cs + + + Zip\ZipConstants.cs + + + Zip\ZipEntry.cs + + + Zip\ZipEntryFactory.cs + + + Zip\ZipException.cs + + + Zip\ZipExtraData.cs + + + Zip\ZipFile.cs + + + Zip\ZipHelperStream.cs + + + Zip\ZipInputStream.cs + + + Zip\ZipNameTransform.cs + + + Zip\ZipOutputStream.cs + + + Zip\Compression\Deflater.cs + + + Zip\Compression\DeflaterConstants.cs + + + Zip\Compression\DeflaterEngine.cs + + + Zip\Compression\DeflaterHuffman.cs + + + Zip\Compression\DeflaterPending.cs + + + Zip\Compression\Inflater.cs + + + Zip\Compression\InflaterDynHeader.cs + + + Zip\Compression\InflaterHuffmanTree.cs + + + Zip\Compression\PendingBuffer.cs + + + Zip\Compression\Streams\DeflaterOutputStream.cs + + + Zip\Compression\Streams\InflaterInputStream.cs + + + Zip\Compression\Streams\OutputWindow.cs + + + Zip\Compression\Streams\StreamManipulator.cs + + + + + SharpZipLibCodeMap.dgml + + + ICSharpCode.SharpZipLib.snk + + + + + + + + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.NETStandard/ICSharpCode.SharpZipLib.NetStandard.csproj b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.NETStandard/ICSharpCode.SharpZipLib.NetStandard.csproj new file mode 100644 index 0000000000..e0f66359e0 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.NETStandard/ICSharpCode.SharpZipLib.NetStandard.csproj @@ -0,0 +1,244 @@ + + + + + 14.0 + Debug + AnyCPU + {BF51C1EA-5CED-4A08-A57D-FDF2E425DB70} + Library + Properties + ICSharpCode.SharpZipLib + ICSharpCode.SharpZipLib + en-US + 512 + {786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} + + + v5.0 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + + + GlobalAssemblyInfo.cs + + + Properties\AssemblyInfo.cs + + + SharpZipBaseException.cs + + + BZip2\BZip2.cs + + + BZip2\BZip2Constants.cs + + + BZip2\BZip2Exception.cs + + + BZip2\BZip2InputStream.cs + + + BZip2\BZip2OutputStream.cs + + + Checksum\Adler32.cs + + + Checksum\BZip2Crc.cs + + + Checksum\Crc32.cs + + + Checksum\IChecksum.cs + + + Core\FileSystemScanner.cs + + + Core\INameTransform.cs + + + Core\IScanFilter.cs + + + Core\NameFilter.cs + + + Core\PathFilter.cs + + + Core\StreamUtils.cs + + + Core\WindowsPathUtils.cs + + + Encryption\PkzipClassic.cs + + + Encryption\ZipAESStream.cs + + + Encryption\ZipAESTransform.cs + + + GZip\GZip.cs + + + GZip\GZipConstants.cs + + + GZip\GZipException.cs + + + GZip\GzipInputStream.cs + + + GZip\GzipOutputStream.cs + + + Lzw\LzwConstants.cs + + + Lzw\LzwException.cs + + + Lzw\LzwInputStream.cs + + + Tar\InvalidHeaderException.cs + + + Tar\TarArchive.cs + + + Tar\TarBuffer.cs + + + Tar\TarEntry.cs + + + Tar\TarException.cs + + + Tar\TarHeader.cs + + + Tar\TarInputStream.cs + + + Tar\TarOutputStream.cs + + + Zip\FastZip.cs + + + Zip\IEntryFactory.cs + + + Zip\WindowsNameTransform.cs + + + Zip\ZipConstants.cs + + + Zip\ZipEntry.cs + + + Zip\ZipEntryFactory.cs + + + Zip\ZipException.cs + + + Zip\ZipExtraData.cs + + + Zip\ZipFile.cs + + + Zip\ZipHelperStream.cs + + + Zip\ZipInputStream.cs + + + Zip\ZipNameTransform.cs + + + Zip\ZipOutputStream.cs + + + Zip\Compression\Deflater.cs + + + Zip\Compression\DeflaterConstants.cs + + + Zip\Compression\DeflaterEngine.cs + + + Zip\Compression\DeflaterHuffman.cs + + + Zip\Compression\DeflaterPending.cs + + + Zip\Compression\Inflater.cs + + + Zip\Compression\InflaterDynHeader.cs + + + Zip\Compression\InflaterHuffmanTree.cs + + + Zip\Compression\PendingBuffer.cs + + + Zip\Compression\Streams\DeflaterOutputStream.cs + + + Zip\Compression\Streams\InflaterInputStream.cs + + + Zip\Compression\Streams\OutputWindow.cs + + + Zip\Compression\Streams\StreamManipulator.cs + + + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.NETStandard/project.json b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.NETStandard/project.json new file mode 100644 index 0000000000..a4437d3c28 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.NETStandard/project.json @@ -0,0 +1,10 @@ +{ + "supports": {}, + "dependencies": { + "Microsoft.NETCore.Portable.Compatibility": "1.0.2", + "NETStandard.Library": "1.6.0" + }, + "frameworks": { + "netstandard1.3": {} + } +} diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/Samples.sln b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/Samples.sln new file mode 100644 index 0000000000..d1e96c4241 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/Samples.sln @@ -0,0 +1,158 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25123.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "CS", "CS", "{07E37AC9-4F01-4D1D-B5CB-6524CA36D22A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "VB", "VB", "{F2D07126-17F2-4EBE-910D-B3838DA7C6D3}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "CreateZipFile", "vb\CreateZipFile\CreateZipFile.vbproj", "{1B2FD768-E530-45B7-B14F-AE5D07B24485}" + ProjectSection(ProjectDependencies) = postProject + {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD} = {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD} + EndProjectSection +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "minibzip2", "vb\minibzip2\minibzip2.vbproj", "{E4AFB41C-DDBB-44AD-9D64-304B7FEE66C9}" + ProjectSection(ProjectDependencies) = postProject + {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD} = {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD} + EndProjectSection +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ViewZipFile", "vb\viewzipfile\ViewZipFile.vbproj", "{DB53264C-64AD-4B43-91A9-F5325561C77B}" + ProjectSection(ProjectDependencies) = postProject + {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD} = {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD} + EndProjectSection +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "ZipFileTest", "vb\zipfiletest\ZipFileTest.vbproj", "{54057AFD-35E2-48C3-8419-45D57C351C1F}" + ProjectSection(ProjectDependencies) = postProject + {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD} = {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD} + EndProjectSection +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "WpfCreateZipFile", "vb\WpfCreateZipFile\WpfCreateZipFile.vbproj", "{2B42AA12-DD23-4EB8-A1CD-5D0F4B772895}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpZipLib", "..\ICSharpCode.SharpZipLib\ICSharpCode.SharpZipLib.csproj", "{0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WPFFolderBrowser", "..\..\wpffolderbrowser\WPFFolderBrowser.csproj", "{CE304F35-FABF-4A24-AC48-5710670A82BE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CreateZipFile", "cs\CreateZipFile\CreateZipFile.csproj", "{DF63551E-BB6C-4A8D-9B01-DB94F721E74A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FastZip", "cs\FastZip\FastZip.csproj", "{61BE8DBC-149A-4564-B891-9EEA4A09ED12}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "sz", "cs\sz\sz.csproj", "{CE0CEA62-CC91-4D17-BC57-A5FCACCA6A1F}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "zf", "cs\zf\zf.csproj", "{90E83588-261C-45A3-964F-4B707357D437}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnZipFile", "cs\unzipfile\UnZipFile.csproj", "{DE6AA83B-1EFA-41B0-85D9-49DA1B0202BC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ViewZipFile", "cs\viewzipfile\ViewZipFile.csproj", "{F356B460-0DEA-4F7D-9CD8-7475B9BEC1F7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cmd_BZip2", "cs\Cmd_BZip2\Cmd_BZip2.csproj", "{7520CE0B-F1D4-4148-8427-BB03669D7672}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cmd_GZip", "cs\Cmd_GZip\Cmd_GZip.csproj", "{301EF496-ED72-4448-A98E-A60D6BF6E0AE}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cmd_Tar", "cs\Cmd_Tar\Cmd_Tar.csproj", "{12C2AD0C-B815-426D-AFF1-7787C2DCA0F0}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cmd_ZipInfo", "cs\Cmd_ZipInfo\Cmd_ZipInfo.csproj", "{4C2CF0B1-FA7B-4FB6-83BA-24A9549AAB02}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Cmd_Checksum", "cs\Cmd_Checksum\Cmd_Checksum.csproj", "{82724A84-3399-4C27-91D2-2B2629B9E3F6}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {1B2FD768-E530-45B7-B14F-AE5D07B24485}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1B2FD768-E530-45B7-B14F-AE5D07B24485}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1B2FD768-E530-45B7-B14F-AE5D07B24485}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1B2FD768-E530-45B7-B14F-AE5D07B24485}.Release|Any CPU.Build.0 = Release|Any CPU + {E4AFB41C-DDBB-44AD-9D64-304B7FEE66C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E4AFB41C-DDBB-44AD-9D64-304B7FEE66C9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E4AFB41C-DDBB-44AD-9D64-304B7FEE66C9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E4AFB41C-DDBB-44AD-9D64-304B7FEE66C9}.Release|Any CPU.Build.0 = Release|Any CPU + {DB53264C-64AD-4B43-91A9-F5325561C77B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DB53264C-64AD-4B43-91A9-F5325561C77B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DB53264C-64AD-4B43-91A9-F5325561C77B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DB53264C-64AD-4B43-91A9-F5325561C77B}.Release|Any CPU.Build.0 = Release|Any CPU + {54057AFD-35E2-48C3-8419-45D57C351C1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {54057AFD-35E2-48C3-8419-45D57C351C1F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {54057AFD-35E2-48C3-8419-45D57C351C1F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {54057AFD-35E2-48C3-8419-45D57C351C1F}.Release|Any CPU.Build.0 = Release|Any CPU + {2B42AA12-DD23-4EB8-A1CD-5D0F4B772895}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2B42AA12-DD23-4EB8-A1CD-5D0F4B772895}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2B42AA12-DD23-4EB8-A1CD-5D0F4B772895}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2B42AA12-DD23-4EB8-A1CD-5D0F4B772895}.Release|Any CPU.Build.0 = Release|Any CPU + {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD}.Release|Any CPU.Build.0 = Release|Any CPU + {CE304F35-FABF-4A24-AC48-5710670A82BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CE304F35-FABF-4A24-AC48-5710670A82BE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CE304F35-FABF-4A24-AC48-5710670A82BE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CE304F35-FABF-4A24-AC48-5710670A82BE}.Release|Any CPU.Build.0 = Release|Any CPU + {DF63551E-BB6C-4A8D-9B01-DB94F721E74A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DF63551E-BB6C-4A8D-9B01-DB94F721E74A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DF63551E-BB6C-4A8D-9B01-DB94F721E74A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DF63551E-BB6C-4A8D-9B01-DB94F721E74A}.Release|Any CPU.Build.0 = Release|Any CPU + {61BE8DBC-149A-4564-B891-9EEA4A09ED12}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {61BE8DBC-149A-4564-B891-9EEA4A09ED12}.Debug|Any CPU.Build.0 = Debug|Any CPU + {61BE8DBC-149A-4564-B891-9EEA4A09ED12}.Release|Any CPU.ActiveCfg = Release|Any CPU + {61BE8DBC-149A-4564-B891-9EEA4A09ED12}.Release|Any CPU.Build.0 = Release|Any CPU + {CE0CEA62-CC91-4D17-BC57-A5FCACCA6A1F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CE0CEA62-CC91-4D17-BC57-A5FCACCA6A1F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CE0CEA62-CC91-4D17-BC57-A5FCACCA6A1F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CE0CEA62-CC91-4D17-BC57-A5FCACCA6A1F}.Release|Any CPU.Build.0 = Release|Any CPU + {90E83588-261C-45A3-964F-4B707357D437}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {90E83588-261C-45A3-964F-4B707357D437}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90E83588-261C-45A3-964F-4B707357D437}.Release|Any CPU.ActiveCfg = Release|Any CPU + {90E83588-261C-45A3-964F-4B707357D437}.Release|Any CPU.Build.0 = Release|Any CPU + {DE6AA83B-1EFA-41B0-85D9-49DA1B0202BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DE6AA83B-1EFA-41B0-85D9-49DA1B0202BC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DE6AA83B-1EFA-41B0-85D9-49DA1B0202BC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DE6AA83B-1EFA-41B0-85D9-49DA1B0202BC}.Release|Any CPU.Build.0 = Release|Any CPU + {F356B460-0DEA-4F7D-9CD8-7475B9BEC1F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F356B460-0DEA-4F7D-9CD8-7475B9BEC1F7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F356B460-0DEA-4F7D-9CD8-7475B9BEC1F7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F356B460-0DEA-4F7D-9CD8-7475B9BEC1F7}.Release|Any CPU.Build.0 = Release|Any CPU + {7520CE0B-F1D4-4148-8427-BB03669D7672}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7520CE0B-F1D4-4148-8427-BB03669D7672}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7520CE0B-F1D4-4148-8427-BB03669D7672}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7520CE0B-F1D4-4148-8427-BB03669D7672}.Release|Any CPU.Build.0 = Release|Any CPU + {301EF496-ED72-4448-A98E-A60D6BF6E0AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {301EF496-ED72-4448-A98E-A60D6BF6E0AE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {301EF496-ED72-4448-A98E-A60D6BF6E0AE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {301EF496-ED72-4448-A98E-A60D6BF6E0AE}.Release|Any CPU.Build.0 = Release|Any CPU + {12C2AD0C-B815-426D-AFF1-7787C2DCA0F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {12C2AD0C-B815-426D-AFF1-7787C2DCA0F0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {12C2AD0C-B815-426D-AFF1-7787C2DCA0F0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {12C2AD0C-B815-426D-AFF1-7787C2DCA0F0}.Release|Any CPU.Build.0 = Release|Any CPU + {4C2CF0B1-FA7B-4FB6-83BA-24A9549AAB02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4C2CF0B1-FA7B-4FB6-83BA-24A9549AAB02}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4C2CF0B1-FA7B-4FB6-83BA-24A9549AAB02}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4C2CF0B1-FA7B-4FB6-83BA-24A9549AAB02}.Release|Any CPU.Build.0 = Release|Any CPU + {82724A84-3399-4C27-91D2-2B2629B9E3F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {82724A84-3399-4C27-91D2-2B2629B9E3F6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {82724A84-3399-4C27-91D2-2B2629B9E3F6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {82724A84-3399-4C27-91D2-2B2629B9E3F6}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {1B2FD768-E530-45B7-B14F-AE5D07B24485} = {F2D07126-17F2-4EBE-910D-B3838DA7C6D3} + {E4AFB41C-DDBB-44AD-9D64-304B7FEE66C9} = {F2D07126-17F2-4EBE-910D-B3838DA7C6D3} + {DB53264C-64AD-4B43-91A9-F5325561C77B} = {F2D07126-17F2-4EBE-910D-B3838DA7C6D3} + {54057AFD-35E2-48C3-8419-45D57C351C1F} = {F2D07126-17F2-4EBE-910D-B3838DA7C6D3} + {2B42AA12-DD23-4EB8-A1CD-5D0F4B772895} = {F2D07126-17F2-4EBE-910D-B3838DA7C6D3} + {DF63551E-BB6C-4A8D-9B01-DB94F721E74A} = {07E37AC9-4F01-4D1D-B5CB-6524CA36D22A} + {61BE8DBC-149A-4564-B891-9EEA4A09ED12} = {07E37AC9-4F01-4D1D-B5CB-6524CA36D22A} + {CE0CEA62-CC91-4D17-BC57-A5FCACCA6A1F} = {07E37AC9-4F01-4D1D-B5CB-6524CA36D22A} + {90E83588-261C-45A3-964F-4B707357D437} = {07E37AC9-4F01-4D1D-B5CB-6524CA36D22A} + {DE6AA83B-1EFA-41B0-85D9-49DA1B0202BC} = {07E37AC9-4F01-4D1D-B5CB-6524CA36D22A} + {F356B460-0DEA-4F7D-9CD8-7475B9BEC1F7} = {07E37AC9-4F01-4D1D-B5CB-6524CA36D22A} + {7520CE0B-F1D4-4148-8427-BB03669D7672} = {07E37AC9-4F01-4D1D-B5CB-6524CA36D22A} + {301EF496-ED72-4448-A98E-A60D6BF6E0AE} = {07E37AC9-4F01-4D1D-B5CB-6524CA36D22A} + {12C2AD0C-B815-426D-AFF1-7787C2DCA0F0} = {07E37AC9-4F01-4D1D-B5CB-6524CA36D22A} + {4C2CF0B1-FA7B-4FB6-83BA-24A9549AAB02} = {07E37AC9-4F01-4D1D-B5CB-6524CA36D22A} + {82724A84-3399-4C27-91D2-2B2629B9E3F6} = {07E37AC9-4F01-4D1D-B5CB-6524CA36D22A} + EndGlobalSection +EndGlobal diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/Cmd_BZip2.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/Cmd_BZip2.cs new file mode 100644 index 0000000000..31ade65a43 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/Cmd_BZip2.cs @@ -0,0 +1,185 @@ +using System; +using System.IO; +using ICSharpCode.SharpZipLib.BZip2; + +class Cmd_BZip2 +{ + static void ShowHelp() + { + Console.Error.WriteLine("bzip2, a block-sorting file compressor."); + Console.Error.WriteLine("Version {0} using SharpZipLib {1}", + typeof(Cmd_BZip2).Assembly.GetName().Version, + typeof(BZip2).Assembly.GetName().Version); + Console.Error.WriteLine("\n usage: {0} [flags and input files in any order]\n", + // Environment.GetCommandLineArgs()[0] + System.AppDomain.CurrentDomain.FriendlyName); + Console.Error.WriteLine(""); + Console.Error.WriteLine(" -h --help print this message"); + Console.Error.WriteLine(" -d --decompress force decompression"); + Console.Error.WriteLine(" -z --compress force compression"); + Console.Error.WriteLine(" -1 .. -9 set block size to 100k .. 900k"); + Console.Error.WriteLine(" --fast alias for -1"); + Console.Error.WriteLine(" --best alias for -9"); + } + + #region Command parsing + enum Command + { + Nothing, + Help, + Compress, + Decompress, + Stop, + } + + class ArgumentParser + { + public ArgumentParser(string[] args) + { + if (System.AppDomain.CurrentDomain.FriendlyName.Contains("bzip2")) { + SetCommand(Command.Compress); + } else if (System.AppDomain.CurrentDomain.FriendlyName.Contains("bunzip2")) { + SetCommand(Command.Decompress); + } + + foreach (string argument in args) { + switch (argument) { + case "-?": // for backwards compatibility + case "-h": + case "--help": + SetCommand(Command.Help); + break; + case "-d": + case "--decompress": + SetCommand(Command.Decompress); + break; + case "-c": // for backwards compatibility + case "-z": + case "--compress": + SetCommand(Command.Compress); + break; + case "-1": + case "-2": + case "-3": + case "-4": + case "-5": + case "-6": + case "-7": + case "-8": + case "-9": + SetLevel((int)argument[1] - 48); + break; + case "--fast": + SetLevel(1); + break; + case "--best": + SetLevel(9); + break; + default: + if (argument[0] == '-') { + Console.Error.WriteLine("Unknown argument {0}", argument); + command_ = Command.Stop; + } else if (file_ == null) { + file_ = argument; + + if (!System.IO.File.Exists(file_)) { + Console.Error.WriteLine("File not found '{0}'", file_); + command_ = Command.Stop; + } + } else { + Console.Error.WriteLine("File has already been specified"); + command_ = Command.Stop; + } + break; + } + } + + if (command_ == Command.Nothing) { + if (file_ == null) { + command_ = Command.Help; + } else { + command_ = Command.Compress; + } + } + } + + void SetCommand(Command command) + { + if ((command_ != Command.Nothing) && (command_ != Command.Stop)) { + Console.Error.WriteLine("Command already specified"); + command_ = Command.Stop; + } else { + command_ = command; + } + } + + void SetLevel(int level) + { + if (level_ != 0) { + Console.Error.WriteLine("Level already specified"); + level_ = 0; + } else { + level_ = level; + } + } + + public string Source { + get { return file_; } + } + + public string Target { + get { + string result; + if (command_ == Command.Compress) { + result = file_ + ".bz"; + } else { + result = Path.GetFileNameWithoutExtension(file_); + } + return result; + } + } + + public Command Command { + get { return command_; } + } + + public int Level { + get { return level_; } + } + + #region Instance Fields + Command command_ = Command.Nothing; + string file_; + int level_; + #endregion + } + #endregion + + public static int Main(string[] args) + { + if (args.Length == 0) { + ShowHelp(); + return 1; + } + + var parser = new ArgumentParser(args); + + switch (parser.Command) { + case Command.Help: + ShowHelp(); + break; + + case Command.Compress: + Console.WriteLine("Compressing {0} to {1} at level {2}", parser.Source, parser.Target, parser.Level); + BZip2.Compress(File.OpenRead(parser.Source), File.Create(parser.Target), true, parser.Level); + break; + + case Command.Decompress: + Console.WriteLine("Decompressing {0} to {1}", parser.Source, parser.Target); + BZip2.Decompress(File.OpenRead(parser.Source), File.Create(parser.Target), true); + break; + } + + return 0; + } +} diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/Cmd_BZip2.csproj b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/Cmd_BZip2.csproj new file mode 100644 index 0000000000..61f3779336 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/Cmd_BZip2.csproj @@ -0,0 +1,110 @@ + + + + Debug + AnyCPU + 2.0 + {7520CE0B-F1D4-4148-8427-BB03669D7672} + ICSharpCode.SharpZipLib.Samples + Cmd_BZip2 + Exe + + 4 + Cmd_BZip2 + False + False + OnSuccessfulBuild + + copy Cmd_BZip2.exe bzip2.exe +copy Cmd_BZip2.exe bunzip2.exe + v4.6.1 + + + + + 2.0 + + false + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + + + true + false + False + True + bin\ + false + Full + false + TRACE;DEBUG + prompt + true + AllRules.ruleset + 2048 + + + True + True + False + True + TRACE + ..\bin\ + False + false + ..\bin\Cmd_BZip2.XML + prompt + pdbonly + true + 2048 + + + False + Auto + 4194304 + AnyCPU + 4096 + + + + + + + Properties\GlobalAssemblyInfo.cs + + + + + + + + + + False + .NET Framework 3.5 SP1 + true + + + + + + + + {0e7413ff-eb9e-4714-acf2-be3a6a7b2ffd} + ICSharpCode.SharpZipLib + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/Properties/AssemblyInfo.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..573f3dc458 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/Properties/AssemblyInfo.cs @@ -0,0 +1,8 @@ +using System.Reflection; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Cmd_BZip2")] +[assembly: AssemblyDescription("bzip2 based file compression")] +[assembly: AssemblyCulture("")] diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/app.config b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/app.config new file mode 100644 index 0000000000..fd3b41004a --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/app.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/readme.txt b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/readme.txt new file mode 100644 index 0000000000..de1aed2074 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_BZip2/readme.txt @@ -0,0 +1,15 @@ +minibzip2 +--------- + +Usage: + + + minibzip2 [filename] + + Will create (or overwrite) a file [filename].bz2 with the bzipped + contents of [filename] + + minibzip2 -d [filename].bz2 + + Will create (or overwrite) a file [filename] with the bunzipped + contents of [filename] \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/Cmd_Checksum.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/Cmd_Checksum.cs new file mode 100644 index 0000000000..49426af692 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/Cmd_Checksum.cs @@ -0,0 +1,160 @@ +using System; +using System.IO; +using ICSharpCode.SharpZipLib.Checksum; + +class Cmd_Checksum +{ + static void ShowHelp() + { + Console.Error.WriteLine("Compress or uncompress FILEs (by default, compress FILES in-place)."); + Console.Error.WriteLine("Version {0} using SharpZipLib {1}", + typeof(Cmd_Checksum).Assembly.GetName().Version, + typeof(IChecksum).Assembly.GetName().Version); + Console.Error.WriteLine(""); + Console.Error.WriteLine("Mandatory arguments to long options are mandatory for short options too."); + Console.Error.WriteLine(""); + Console.Error.WriteLine(" -a, --adler decompress"); + Console.Error.WriteLine(" -b, --bzip2 give this help"); + Console.Error.WriteLine(" -c, --crc32 compress"); + Console.Error.WriteLine(" -1, --fast compress faster"); + Console.Error.WriteLine(" -9, --best compress better"); + } + + #region Instance Fields + private static Command command_ = Command.Nothing; + private static string file_; + #endregion + + #region Command parsing + enum Command + { + Nothing, + Help, + Adler, + BZip2, + Crc32, + Stop + } + + class ArgumentParser + { + public ArgumentParser(string[] args) + { + foreach (string argument in args) { + switch (argument) { + case "-?": // for backwards compatibility + case "-h": + case "--help": + SetCommand(Command.Help); + break; + case "--adler32": + SetCommand(Command.Adler); + break; + case "--bzip2": + SetCommand(Command.BZip2); + break; + case "--crc32": + SetCommand(Command.Crc32); + break; + default: + if (argument[0] == '-') { + Console.Error.WriteLine("Unknown argument {0}", argument); + command_ = Command.Stop; + } else if (file_ == null) { + file_ = argument; + + if (!System.IO.File.Exists(file_)) { + Console.Error.WriteLine("File not found '{0}'", file_); + command_ = Command.Stop; + } + } else { + Console.Error.WriteLine("File has already been specified"); + command_ = Command.Stop; + } + break; + } + } + + if (command_ == Command.Nothing) { + if (file_ == null) { + command_ = Command.Help; + } else { + command_ = Command.Crc32; + } + } + } + + void SetCommand(Command command) + { + if ((command_ != Command.Nothing) && (command_ != Command.Stop)) { + Console.Error.WriteLine("Command already specified"); + command_ = Command.Stop; + } else { + command_ = command; + } + } + + public string Source { + get { return file_; } + } + + public Command Command { + get { return command_; } + } + } + #endregion + + public static int Main(string[] args) + { + if (args.Length == 0) { + ShowHelp(); + return 1; + } + + var parser = new ArgumentParser(args); + + if (!File.Exists(file_)) { + Console.Error.WriteLine("Cannot find file {0}", file_); + ShowHelp(); + return 1; + } + + using (FileStream checksumStream = File.OpenRead(file_)) { + + byte[] buffer = new byte[4096]; + int bytesRead; + + switch (parser.Command) { + case Command.Help: + ShowHelp(); + break; + + case Command.Crc32: + var currentCrc = new Crc32(); + while ((bytesRead = checksumStream.Read(buffer, 0, buffer.Length)) > 0) { + currentCrc.Update(buffer, 0, bytesRead); + } + Console.WriteLine("CRC32 for {0} is 0x{1:X8}", args[0], currentCrc.Value); + break; + + case Command.BZip2: + var currentBZip2Crc = new BZip2Crc(); + while ((bytesRead = checksumStream.Read(buffer, 0, buffer.Length)) > 0) { + currentBZip2Crc.Update(buffer, 0, bytesRead); + } + Console.WriteLine("BZip2CRC32 for {0} is 0x{1:X8}", args[0], currentBZip2Crc.Value); + break; + + case Command.Adler: + var currentAdler = new Adler32(); + while ((bytesRead = checksumStream.Read(buffer, 0, buffer.Length)) > 0) { + currentAdler.Update(buffer, 0, bytesRead); + } + Console.WriteLine("Adler32 for {0} is 0x{1:X8}", args[0], currentAdler.Value); + break; + } + } + return 0; + } +} + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/Cmd_Checksum.csproj b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/Cmd_Checksum.csproj new file mode 100644 index 0000000000..f11eba746e --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/Cmd_Checksum.csproj @@ -0,0 +1,104 @@ + + + + Debug + AnyCPU + 2.0 + {82724A84-3399-4C27-91D2-2B2629B9E3F6} + ICSharpCode.SharpZipLib.Samples + Cmd_Checksum + Exe + + 4 + + Cmd_Checksum + False + False + OnSuccessfulBuild + + + + v4.6.1 + + + + + 2.0 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + True + false + False + True + TRACE;DEBUG + bin\ + false + false + prompt + full + 2048 + true + AllRules.ruleset + + + True + True + False + True + + ..\bin\ + false + false + ..\bin\Cmd_Checksum.xml + prompt + 2048 + pdbonly + true + + + + + + + Properties\GlobalAssemblyInfo.cs + + + + + + + + + + False + .NET Framework 3.5 SP1 + true + + + + + + + + {0e7413ff-eb9e-4714-acf2-be3a6a7b2ffd} + ICSharpCode.SharpZipLib + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/Properties/AssemblyInfo.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..fb389add67 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/Properties/AssemblyInfo.cs @@ -0,0 +1,5 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Cmd_Checksum")] +[assembly: AssemblyDescription("file checksum generator")] +[assembly: AssemblyCulture("")] diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/app.config b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/app.config new file mode 100644 index 0000000000..3dbff35f48 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/app.config @@ -0,0 +1,3 @@ + + + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/readme.txt b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/readme.txt new file mode 100644 index 0000000000..eface07ed7 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Checksum/readme.txt @@ -0,0 +1,17 @@ +minigzip +-------- + +Usage: + + + minigzip [filename] + + Will create (or overwrite) a file [filename].gz with the gzipped + contents of [filename] + + minigzip -d [filename].gz + + Will create (or overwrite) a file [filename] with the gunzipped + contents of [filename] + + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/Cmd_GZip.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/Cmd_GZip.cs new file mode 100644 index 0000000000..88b270fea0 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/Cmd_GZip.cs @@ -0,0 +1,178 @@ +using System; +using System.IO; +using ICSharpCode.SharpZipLib.GZip; + +class Cmd_GZip +{ + static void ShowHelp() + { + Console.Error.WriteLine("Compress or uncompress FILEs (by default, compress FILES in-place)."); + Console.Error.WriteLine("Version {0} using SharpZipLib {1}", + typeof(Cmd_GZip).Assembly.GetName().Version, + typeof(GZip).Assembly.GetName().Version); + Console.Error.WriteLine(""); + Console.Error.WriteLine("Mandatory arguments to long options are mandatory for short options too."); + Console.Error.WriteLine(""); + Console.Error.WriteLine(" -d, --decompress decompress"); + Console.Error.WriteLine(" -h, --help give this help"); + Console.Error.WriteLine(" -z, --compress compress"); + Console.Error.WriteLine(" -1, --fast compress faster"); + Console.Error.WriteLine(" -9, --best compress better"); + } + + #region Command parsing + enum Command + { + Nothing, + Help, + Compress, + Decompress, + Stop, + } + + class ArgumentParser + { + public ArgumentParser(string[] args) + { + foreach (string argument in args) { + switch (argument) { + case "-?": // for backwards compatibility + case "-h": + case "--help": + SetCommand(Command.Help); + break; + case "-d": + case "--decompress": + SetCommand(Command.Decompress); + break; + case "-c": // for backwards compatibility + case "-z": + case "--compress": + SetCommand(Command.Compress); + break; + case "-1": + case "-2": + case "-3": + case "-4": + case "-5": + case "-6": + case "-7": + case "-8": + case "-9": + SetLevel((int)argument[1] - 48); + break; + case "--fast": + SetLevel(1); + break; + case "--best": + SetLevel(9); + break; + default: + if (argument[0] == '-') { + Console.Error.WriteLine("Unknown argument {0}", argument); + command_ = Command.Stop; + } else if (file_ == null) { + file_ = argument; + + if (!System.IO.File.Exists(file_)) { + Console.Error.WriteLine("File not found '{0}'", file_); + command_ = Command.Stop; + } + } else { + Console.Error.WriteLine("File has already been specified"); + command_ = Command.Stop; + } + break; + } + } + + if (command_ == Command.Nothing) { + if (file_ == null) { + command_ = Command.Help; + } else { + command_ = Command.Compress; + } + } + } + + void SetCommand(Command command) + { + if ((command_ != Command.Nothing) && (command_ != Command.Stop)) { + Console.Error.WriteLine("Command already specified"); + command_ = Command.Stop; + } else { + command_ = command; + } + } + + void SetLevel(int level) + { + if (level_ != 0) { + Console.Error.WriteLine("Level already specified"); + level_ = 0; + } else { + level_ = level; + } + } + + public string Source { + get { return file_; } + } + + public string Target { + get { + string result; + if (command_ == Command.Compress) { + result = file_ + ".gz"; + } else { + result = Path.GetFileNameWithoutExtension(file_); + } + return result; + } + } + + public Command Command { + get { return command_; } + } + + public int Level { + get { return level_; } + } + + #region Instance Fields + Command command_ = Command.Nothing; + string file_; + int level_; + #endregion + } + #endregion + + + public static int Main(string[] args) + { + if (args.Length == 0) { + ShowHelp(); + return 1; + } + + var parser = new ArgumentParser(args); + + switch (parser.Command) { + case Command.Help: + ShowHelp(); + break; + + case Command.Compress: + Console.WriteLine("Compressing {0} to {1} at level {2}", parser.Source, parser.Target, parser.Level); + GZip.Compress(File.OpenRead(parser.Source), File.Create(parser.Target), true, parser.Level); + break; + + case Command.Decompress: + Console.WriteLine("Decompressing {0} to {1}", parser.Source, parser.Target); + GZip.Decompress(File.OpenRead(parser.Source), File.Create(parser.Target), true); + break; + } + + return 0; + } +} diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/Cmd_GZip.csproj b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/Cmd_GZip.csproj new file mode 100644 index 0000000000..daa1c23d61 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/Cmd_GZip.csproj @@ -0,0 +1,104 @@ + + + + Debug + AnyCPU + 2.0 + {301EF496-ED72-4448-A98E-A60D6BF6E0AE} + ICSharpCode.SharpZipLib.Samples + Cmd_GZip + Exe + + 4 + + Cmd_GZip + False + False + OnSuccessfulBuild + + copy Cmd_GZip.exe gzip.exe +copy Cmd_GZip.exe gunzip.exe + v4.6.1 + + + + + 2.0 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + True + false + False + True + TRACE;DEBUG + bin\ + false + false + prompt + full + 2048 + true + AllRules.ruleset + + + True + True + False + True + + ..\bin\ + false + false + ..\bin\Cmd_GZip.XML + prompt + 2048 + pdbonly + true + + + + + + + Properties\GlobalAssemblyInfo.cs + + + + + + + + + + False + .NET Framework 3.5 SP1 + true + + + + + + + + {0e7413ff-eb9e-4714-acf2-be3a6a7b2ffd} + ICSharpCode.SharpZipLib + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/Properties/AssemblyInfo.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..602eb750c5 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/Properties/AssemblyInfo.cs @@ -0,0 +1,5 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Cmd_GZip")] +[assembly: AssemblyDescription("gzip based file compression")] +[assembly: AssemblyCulture("")] diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/app.config b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/app.config new file mode 100644 index 0000000000..3dbff35f48 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/app.config @@ -0,0 +1,3 @@ + + + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/readme.txt b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/readme.txt new file mode 100644 index 0000000000..eface07ed7 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_GZip/readme.txt @@ -0,0 +1,17 @@ +minigzip +-------- + +Usage: + + + minigzip [filename] + + Will create (or overwrite) a file [filename].gz with the gzipped + contents of [filename] + + minigzip -d [filename].gz + + Will create (or overwrite) a file [filename] with the gunzipped + contents of [filename] + + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Tar/Cmd_Tar.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Tar/Cmd_Tar.cs new file mode 100644 index 0000000000..4b0df6e021 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Tar/Cmd_Tar.cs @@ -0,0 +1,612 @@ +using System; +using System.IO; +using ICSharpCode.SharpZipLib.Zip.Compression.Streams; +using ICSharpCode.SharpZipLib.GZip; +using ICSharpCode.SharpZipLib.BZip2; +using ICSharpCode.SharpZipLib.Tar; + +/// +/// The tar class implements a simplistic version of the +/// traditional UNIX tar command. It currently supports +/// creating, listing, and extracting from archives. +/// It supports GZIP, unix compress and bzip2 compression +/// GNU long filename extensions are supported, POSIX extensions are not yet supported... +/// See the help (-? or --help) for option details. +/// +public class Cmd_Tar +{ + /// + /// The compresion to use when creating archives. + /// + enum Compression + { + None, + Compress, + Gzip, + Bzip2 + } + + /// + /// Operation to perform on archive + /// + enum Operation + { + List, + Create, + Extract + } + + #region Instance Fields + /// + /// Flag that determines if verbose feedback is to be provided. + /// + bool verbose; + + /// + /// What kind of to use. + /// + Compression compression = Compression.None; + + /// + /// The to perform. + /// + Operation operation = Operation.List; + + /// + /// True if we are not to overwrite existing files. (Unix noKlobber option) + /// + bool keepOldFiles; + + /// + /// True if we are to convert ASCII text files from local line endings + /// to the UNIX standard '\n'. + /// + bool asciiTranslate; + + /// + /// The archive name provided on the command line, '-' if stdio. + /// + string archiveName; + + /// + /// The blocking factor to use for the tar archive IO. Set by the '-b' option. + /// + int blockingFactor; + + /// + /// The userId to use for files written to archives. Set by '-U' option. + /// + int userId; + + /// + /// The userName to use for files written to archives. Set by '-u' option. + /// + string userName; + + /// + /// The groupId to use for files written to archives. Set by '-G' option. + /// + int groupId; + + /// + /// The groupName to use for files written to archives. Set by '-g' option. + /// + string groupName; + #endregion + + /// + /// Initialise default instance of . + /// Sets up the default userName with the system 'UserName' property. + /// + public Cmd_Tar() + { + blockingFactor = TarBuffer.DefaultBlockFactor; + userId = 0; + + string sysUserName = Environment.UserName; + userName = ((sysUserName == null) ? "" : sysUserName); + + groupId = 0; + groupName = "None"; + } + + /// + /// The main entry point of the tar class. + /// + public static void Main(string[] argv) + { + var tarApp = new Cmd_Tar(); + tarApp.InstanceMain(argv); + } + + /// + /// This is the "real" main. The class main() instantiates a tar object + /// for the application and then calls this method. Process the arguments + /// and perform the requested operation. + /// + public void InstanceMain(string[] argv) + { + TarArchive archive = null; + + int argIdx = this.ProcessArguments(argv); + + if (this.archiveName != null && !this.archiveName.Equals("-")) { + if (operation == Operation.Create) { + string dirName = Path.GetDirectoryName(archiveName); + if ((dirName.Length > 0) && !Directory.Exists(dirName)) { + Console.Error.WriteLine("Directory for archive doesnt exist"); + return; + } + } else { + if (File.Exists(this.archiveName) == false) { + Console.Error.WriteLine("File does not exist " + this.archiveName); + return; + } + } + } + + if (operation == Operation.Create) { // WRITING + Stream outStream = Console.OpenStandardOutput(); + + if (this.archiveName != null && !this.archiveName.Equals("-")) { + outStream = File.Create(archiveName); + } + + if (outStream != null) { + switch (this.compression) { + case Compression.Compress: + outStream = new DeflaterOutputStream(outStream); + break; + + case Compression.Gzip: + outStream = new GZipOutputStream(outStream); + break; + + case Compression.Bzip2: + outStream = new BZip2OutputStream(outStream, 9); + break; + } + archive = TarArchive.CreateOutputTarArchive(outStream, this.blockingFactor); + } + } else { // EXTRACTING OR LISTING + Stream inStream = Console.OpenStandardInput(); + + if (this.archiveName != null && !this.archiveName.Equals("-")) { + inStream = File.OpenRead(archiveName); + } + + if (inStream != null) { + switch (this.compression) { + case Compression.Compress: + inStream = new InflaterInputStream(inStream); + break; + + case Compression.Gzip: + inStream = new GZipInputStream(inStream); + break; + + case Compression.Bzip2: + inStream = new BZip2InputStream(inStream); + break; + } + archive = TarArchive.CreateInputTarArchive(inStream, this.blockingFactor); + } + } + + if (archive != null) { // SET ARCHIVE OPTIONS + archive.SetKeepOldFiles(this.keepOldFiles); + archive.AsciiTranslate = this.asciiTranslate; + + archive.SetUserInfo(this.userId, this.userName, this.groupId, this.groupName); + } + + if (archive == null) { + Console.Error.WriteLine("no processing due to errors"); + } else if (operation == Operation.Create) { // WRITING + if (verbose) { + archive.ProgressMessageEvent += ShowTarProgressMessage; + } + + for (; argIdx < argv.Length; ++argIdx) { + string[] fileNames = GetFilesForSpec(argv[argIdx]); + if (fileNames.Length > 0) { + foreach (string name in fileNames) { + TarEntry entry = TarEntry.CreateEntryFromFile(name); + archive.WriteEntry(entry, true); + } + } else { + Console.Error.Write("No files for " + argv[argIdx]); + } + } + } else if (operation == Operation.List) { // LISTING + archive.ProgressMessageEvent += ShowTarProgressMessage; + archive.ListContents(); + } else { // EXTRACTING + string userDir = Environment.CurrentDirectory; + if (verbose) { + archive.ProgressMessageEvent += ShowTarProgressMessage; + } + + if (userDir != null) { + archive.ExtractContents(userDir); + } + } + + if (archive != null) { // CLOSE ARCHIVE + archive.Close(); + } + } + + /// + /// Display progress information on console + /// + public void ShowTarProgressMessage(TarArchive archive, TarEntry entry, string message) + { + if (entry.TarHeader.TypeFlag != TarHeader.LF_NORMAL && entry.TarHeader.TypeFlag != TarHeader.LF_OLDNORM) { + Console.WriteLine("Entry type " + (char)entry.TarHeader.TypeFlag + " found!"); + } + + if (message != null) + Console.Write(entry.Name + " " + message); + else { + if (this.verbose) { + string modeString = DecodeType(entry.TarHeader.TypeFlag, entry.Name.EndsWith("/")) + DecodeMode(entry.TarHeader.Mode); + string userString = (string.IsNullOrEmpty(entry.UserName)) ? entry.UserId.ToString() : entry.UserName; + string groupString = (string.IsNullOrEmpty(entry.GroupName)) ? entry.GroupId.ToString() : entry.GroupName; + + Console.WriteLine(string.Format("{0} {1}/{2} {3,8} {4:yyyy-MM-dd HH:mm:ss} {5}", modeString, userString, groupString, entry.Size, entry.ModTime.ToLocalTime(), entry.Name)); + } else { + Console.WriteLine(entry.Name); + } + } + } + + /// + /// + /// Process arguments, handling options, and return the index of the + /// first non-option argument. + /// + /// + /// The index of the first non-option argument. + /// + int ProcessArguments(string[] args) + { + int idx = 0; + bool bailOut = false; + bool gotOP = false; + + for (; idx < args.Length; ++idx) { + string arg = args[idx]; + + if (!arg.StartsWith("-")) { + break; + } + + if (arg.StartsWith("--")) { + int valuePos = arg.IndexOf('='); + string argValue = null; + + if (valuePos >= 0) { + argValue = arg.Substring(valuePos + 1); + arg = arg.Substring(0, valuePos); + } + + if (arg.Equals("--help")) { + ShowHelp(); + Environment.Exit(1); + } else if (arg.Equals("--version")) { + Version(); + Environment.Exit(1); + } else if (arg.Equals("--extract")) { + gotOP = true; + operation = Operation.Extract; + } else if (arg.Equals("--list")) { + gotOP = true; + operation = Operation.List; + } else if (arg.Equals("--create")) { + gotOP = true; + operation = Operation.Create; + } else if (arg.Equals("--gzip")) { + compression = Compression.Gzip; + } else if (arg.Equals("--bzip2")) { + compression = Compression.Bzip2; + } else if (arg.Equals("--compress")) { + compression = Compression.Compress; + } else if (arg.Equals("--blocking-factor")) { + if (string.IsNullOrEmpty(argValue)) + Console.Error.WriteLine("expected numeric blocking factor"); + else { + try { + this.blockingFactor = Int32.Parse(argValue); + if (blockingFactor <= 0) { + Console.Error.WriteLine("Blocking factor {0} is invalid", blockingFactor); + bailOut = true; + } + } catch { + Console.Error.WriteLine("invalid blocking factor"); + } + } + } else if (arg.Equals("--verbose")) { + verbose = true; + } else if (arg.Equals("--keep-old-files")) { + keepOldFiles = true; + } else if (arg.Equals("--record-size")) { + if (string.IsNullOrEmpty(argValue)) { + Console.Error.WriteLine("expected numeric record size"); + bailOut = true; + } else { + int size; + try { + size = Int32.Parse(argValue); + if (size % TarBuffer.BlockSize != 0) { + Console.Error.WriteLine("Record size must be a multiple of " + TarBuffer.BlockSize.ToString()); + bailOut = true; + } else + blockingFactor = size / TarBuffer.BlockSize; + } catch { + Console.Error.WriteLine("non-numeric record size"); + bailOut = true; + } + } + } else { + Console.Error.WriteLine("unknown option: " + arg); + ShowHelp(); + Environment.Exit(1); + } + } else { + for (int cIdx = 1; cIdx < arg.Length; ++cIdx) { + switch (arg[cIdx]) { + case '?': + ShowHelp(); + Environment.Exit(1); + break; + + case 'f': + this.archiveName = args[++idx]; + break; + + case 'j': + compression = Compression.Bzip2; + break; + + case 'z': + compression = Compression.Gzip; + break; + + case 'Z': + compression = Compression.Compress; + break; + + case 'e': + asciiTranslate = true; + break; + + case 'c': + gotOP = true; + operation = Operation.Create; + break; + + case 'x': + gotOP = true; + operation = Operation.Extract; + break; + + case 't': + gotOP = true; + operation = Operation.List; + break; + + case 'k': + keepOldFiles = true; + break; + + case 'b': + blockingFactor = Int32.Parse(args[++idx]); + break; + + case 'u': + userName = args[++idx]; + break; + + case 'U': + userId = Int32.Parse(args[++idx]); + break; + + case 'g': + groupName = args[++idx]; + break; + + case 'G': + groupId = Int32.Parse(args[++idx]); + break; + + case 'v': + verbose = true; + break; + + default: + Console.Error.WriteLine("unknown option: " + arg[cIdx]); + ShowHelp(); + Environment.Exit(1); + break; + } + } + } + } + + if (!gotOP) { + Console.Error.WriteLine("you must specify an operation option (c, x, or t)"); + Console.Error.WriteLine("Try tar --help"); + bailOut = true; + } + + if (bailOut == true) { + Environment.Exit(1); + } + return idx; + } + + static string[] GetFilesForSpec(string spec) + { + string dir = Path.GetDirectoryName(spec); + if (string.IsNullOrEmpty(dir)) + dir = Directory.GetCurrentDirectory(); + + return System.IO.Directory.GetFiles(dir, Path.GetFileName(spec)); + } + + static string DecodeType(int type, bool slashTerminated) + { + string result = "?"; + switch (type) { + case TarHeader.LF_OLDNORM: // -jr- TODO this decoding is incomplete, not all possible known values are decoded... + case TarHeader.LF_NORMAL: + case TarHeader.LF_LINK: + if (slashTerminated) + result = "d"; + else + result = "-"; + break; + + case TarHeader.LF_DIR: + result = "d"; + break; + + case TarHeader.LF_GNU_VOLHDR: + result = "V"; + break; + + case TarHeader.LF_GNU_MULTIVOL: + result = "M"; + break; + + case TarHeader.LF_CONTIG: + result = "C"; + break; + + case TarHeader.LF_FIFO: + result = "p"; + break; + + case TarHeader.LF_SYMLINK: + result = "l"; + break; + + case TarHeader.LF_CHR: + result = "c"; + break; + + case TarHeader.LF_BLK: + result = "b"; + break; + } + + return result; + } + + static string DecodeMode(int mode) + { + + const int S_ISUID = 0x0800; + const int S_ISGID = 0x0400; + const int S_ISVTX = 0x0200; + + const int S_IRUSR = 0x0100; + const int S_IWUSR = 0x0080; + const int S_IXUSR = 0x0040; + + const int S_IRGRP = 0x0020; + const int S_IWGRP = 0x0010; + const int S_IXGRP = 0x0008; + + const int S_IROTH = 0x0004; + const int S_IWOTH = 0x0002; + const int S_IXOTH = 0x0001; + + + var result = new System.Text.StringBuilder(); + result.Append((mode & S_IRUSR) != 0 ? 'r' : '-'); + result.Append((mode & S_IWUSR) != 0 ? 'w' : '-'); + result.Append((mode & S_ISUID) != 0 + ? ((mode & S_IXUSR) != 0 ? 's' : 'S') + : ((mode & S_IXUSR) != 0 ? 'x' : '-')); + result.Append((mode & S_IRGRP) != 0 ? 'r' : '-'); + result.Append((mode & S_IWGRP) != 0 ? 'w' : '-'); + result.Append((mode & S_ISGID) != 0 + ? ((mode & S_IXGRP) != 0 ? 's' : 'S') + : ((mode & S_IXGRP) != 0 ? 'x' : '-')); + result.Append((mode & S_IROTH) != 0 ? 'r' : '-'); + result.Append((mode & S_IWOTH) != 0 ? 'w' : '-'); + result.Append((mode & S_ISVTX) != 0 + ? ((mode & S_IXOTH) != 0 ? 't' : 'T') + : ((mode & S_IXOTH) != 0 ? 'x' : '-')); + + return result.ToString(); + } + + static string SharpZipVersion() + { + System.Reflection.Assembly zipAssembly = System.Reflection.Assembly.GetAssembly(new TarHeader().GetType()); + Version v = zipAssembly.GetName().Version; + return "#ZipLib v" + v.Major + "." + v.Minor + "." + v.Build + "." + v.Revision; + } + + /// + /// Print version information. + /// + static void Version() + { + Console.Error.WriteLine("tar 2.0.6.2"); + Console.Error.WriteLine(""); + Console.Error.WriteLine("{0}", SharpZipVersion()); + Console.Error.WriteLine("Copyright © 2000-2016 SharpZipLib Contributors"); + } + + /// + /// Print help information. + /// + static private void ShowHelp() + { + Console.Error.WriteLine("Usage: tar [option]... [file]..."); + Console.Error.WriteLine(""); + Console.Error.WriteLine("Examples:"); + Console.Error.WriteLine(" tar -cf archive.tar foo bar # create archive.tar from files foo and bar"); + Console.Error.WriteLine(" tar -tvf archive.tar # List all files in archive tar verbosely"); + Console.Error.WriteLine(" tar -xvf archive.tar # Extract all files from archive.tar"); + Console.Error.WriteLine(""); + + Console.Error.WriteLine("Main operation mode:"); + Console.Error.WriteLine(" -t, --list list the contents of an archive"); + Console.Error.WriteLine(" -x, --extract extract files from an archive"); + Console.Error.WriteLine(" -c, --create create a new archive"); + Console.Error.WriteLine(""); + + Console.Error.WriteLine("Options:"); + Console.Error.WriteLine(" -f file, use 'file' as the tar archive"); + Console.Error.WriteLine(" -e, Turn on ascii translation"); + Console.Error.WriteLine(" -z, --gzip use gzip compression"); + Console.Error.WriteLine(" -Z, --compress use unix compress"); + Console.Error.WriteLine(" -j, --bzip2 use bzip2 compression"); + Console.Error.WriteLine(" -k, --keep-old-files dont overwrite existing files when extracting"); + Console.Error.WriteLine(" -b blks, set blocking factor (blks * 512 bytes per record)"); + Console.Error.WriteLine(" --record-size=SIZE SIZE bytes per record, multiple of 512"); + Console.Error.WriteLine(" -u name, set user name to 'name'"); + Console.Error.WriteLine(" -U id, set user id to 'id'"); + Console.Error.WriteLine(" -g name, set group name to 'name'"); + Console.Error.WriteLine(" -G id, set group id to 'id'"); + + Console.Error.WriteLine(""); + Console.Error.WriteLine("Informative output:"); + Console.Error.WriteLine(" -?, --help print this help then exit"); + Console.Error.WriteLine(" --version, print tar program version information"); + Console.Error.WriteLine(" -v, --verbose verbosely list files processed"); + Console.Error.WriteLine(""); + Console.Error.WriteLine("The translation option -e will translate from local line"); + Console.Error.WriteLine("endings to UNIX line endings of '\\n' when writing tar"); + Console.Error.WriteLine("archives, and from UNIX line endings into local line endings"); + Console.Error.WriteLine("when extracting archives."); + Console.Error.WriteLine(""); + Console.Error.WriteLine("This tar defaults to -b " + TarBuffer.DefaultBlockFactor.ToString()); + Environment.Exit(1); + } +} diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Tar/Cmd_Tar.csproj b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Tar/Cmd_Tar.csproj new file mode 100644 index 0000000000..bfe06d65d3 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Tar/Cmd_Tar.csproj @@ -0,0 +1,100 @@ + + + + Debug + AnyCPU + {12C2AD0C-B815-426D-AFF1-7787C2DCA0F0} + 9.0.30729 + 2.0 + Exe + false + Tar + v4.6.1 + 512 + ICSharpCode.SharpZipLib.Samples + + + + + 3.5 + + false + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + bin\Debug\Tar.XML + true + true + AllRules.ruleset + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + false + bin\Release\Tar.XML + true + true + + + Cmd_Tar + + + + + + + + + + + Properties\GlobalAssemblyInfo.cs + + + + + + + {0E7413FF-EB9E-4714-ACF2-BE3A6A7B2FFD} + ICSharpCode.SharpZipLib + + + + + + + + False + .NET Framework 3.5 SP1 + true + + + + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Tar/Properties/AssemblyInfo.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Tar/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..c4f6ef4640 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Tar/Properties/AssemblyInfo.cs @@ -0,0 +1,11 @@ +using System.Reflection; + +// Information about this assembly is defined by the following +// attributes. +// +// change them to the information which is associated with the assembly +// you compile. + +[assembly: AssemblyTitle("Tar Sharp Sample")] +[assembly: AssemblyDescription("A simple tar application")] +[assembly: AssemblyCulture("")] diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Tar/app.config b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Tar/app.config new file mode 100644 index 0000000000..3dbff35f48 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_Tar/app.config @@ -0,0 +1,3 @@ + + + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/Cmd_ZipInfo.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/Cmd_ZipInfo.cs new file mode 100644 index 0000000000..07bbc25aca --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/Cmd_ZipInfo.cs @@ -0,0 +1,148 @@ +using System; +using System.IO; +using ICSharpCode.SharpZipLib.Zip; + +class Cmd_ZipInfo +{ + static void ShowHelp() + { + Console.Error.WriteLine("Compress or uncompress FILEs (by default, compress FILES in-place)."); + Console.Error.WriteLine("Version {0} using SharpZipLib {1}", + typeof(Cmd_ZipInfo).Assembly.GetName().Version, + typeof(ZipFile).Assembly.GetName().Version); + Console.Error.WriteLine(""); + Console.Error.WriteLine("Mandatory arguments to long options are mandatory for short options too."); + Console.Error.WriteLine(""); + Console.Error.WriteLine(" -d, --decompress decompress"); + Console.Error.WriteLine(" -h, --help give this help"); + Console.Error.WriteLine(" -z, --compress compress"); + Console.Error.WriteLine(" -1, --fast compress faster"); + Console.Error.WriteLine(" -9, --best compress better"); + } + + #region Command parsing + enum Command + { + Nothing, + Help, + Compress, + Decompress, + Stop, + } + + class ArgumentParser + { + public ArgumentParser(string[] args) + { + foreach (string argument in args) { + switch (argument) { + case "-?": // for backwards compatibility + case "-h": + case "--help": + SetCommand(Command.Help); + break; + case "-d": + case "--decompress": + SetCommand(Command.Decompress); + break; + case "-c": // for backwards compatibility + case "-z": + case "--compress": + SetCommand(Command.Compress); + break; + default: + if (argument[0] == '-') { + Console.Error.WriteLine("Unknown argument {0}", argument); + command_ = Command.Stop; + } else if (file_ == null) { + file_ = argument; + + if (!System.IO.File.Exists(file_)) { + Console.Error.WriteLine("File not found '{0}'", file_); + command_ = Command.Stop; + } + } else { + Console.Error.WriteLine("File has already been specified"); + command_ = Command.Stop; + } + break; + } + } + + if (command_ == Command.Nothing) { + if (file_ == null) { + command_ = Command.Help; + } else { + command_ = Command.Compress; + } + } + } + + void SetCommand(Command command) + { + if ((command_ != Command.Nothing) && (command_ != Command.Stop)) { + Console.Error.WriteLine("Command already specified"); + command_ = Command.Stop; + } else { + command_ = command; + } + } + public Command Command { + get { return command_; } + } + + public int Level { + get { return level_; } + } + + #region Instance Fields + Command command_ = Command.Nothing; + string file_; + int level_; + #endregion + } + #endregion + + + public static int Main(string[] args) + { + if (args.Length == 0) { + ShowHelp(); + return 1; + } + + if (!File.Exists(args[0])) { + Console.Error.WriteLine("Cannot find file {0}", args[0]); + ShowHelp(); + return 1; + } + + var parser = new ArgumentParser(args); + + using (ZipFile zFile = new ZipFile(args[0])) { + Console.WriteLine("Listing of : " + zFile.Name); + Console.WriteLine(""); + if (false) { + Console.WriteLine("Raw Size Size Date Time Name"); + Console.WriteLine("-------- -------- ----------- ------ ---------"); + foreach (ZipEntry e in zFile) { + DateTime d = e.DateTime; + Console.WriteLine("{0, -10}{1, -10}{2} {3} {4}", e.Size, e.CompressedSize, + d.ToString("dd MMM yyyy"), d.ToString("HH:mm"), + e.Name); + } + } else { + Console.WriteLine("Raw Size,Size,Date,Time,Name"); + foreach (ZipEntry e in zFile) { + DateTime d = e.DateTime; + Console.WriteLine("{0, -10}{1, -10}{2} {3} {4}", e.Size, e.CompressedSize, + d.ToString("dd MMM yyyy"), d.ToString("HH:mm"), + e.Name); + } + + } + } + + return 0; + } +} diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/Cmd_ZipInfo.csproj b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/Cmd_ZipInfo.csproj new file mode 100644 index 0000000000..46dc4d57e4 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/Cmd_ZipInfo.csproj @@ -0,0 +1,103 @@ + + + + Debug + AnyCPU + 2.0 + {4C2CF0B1-FA7B-4FB6-83BA-24A9549AAB02} + ICSharpCode.SharpZipLib.Samples + Cmd_ZipInfo + Exe + + 4 + + Cmd_ZipInfo + False + False + OnSuccessfulBuild + + copy Cmd_ZipInfo.exe zipinfo.exe + v4.6.1 + + + + + 2.0 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + True + false + False + True + TRACE;DEBUG + bin\ + False + false + prompt + 2048 + full + true + AllRules.ruleset + + + True + True + False + True + + ..\bin\ + False + false + ..\bin\Cmd_ZipInfo.XML + prompt + 2048 + pdbonly + true + + + + + + + Properties\GlobalAssemblyInfo.cs + + + + + + + + + + False + .NET Framework 3.5 SP1 + true + + + + + + + + {0e7413ff-eb9e-4714-acf2-be3a6a7b2ffd} + ICSharpCode.SharpZipLib + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/Properties/AssemblyInfo.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..7a4e924199 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/Properties/AssemblyInfo.cs @@ -0,0 +1,5 @@ +using System.Reflection; + +[assembly: AssemblyTitle("Cmd_ZipInfo")] +[assembly: AssemblyDescription("list detailed information about a ZIP archive")] +[assembly: AssemblyCulture("")] diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/app.config b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/app.config new file mode 100644 index 0000000000..3dbff35f48 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/app.config @@ -0,0 +1,3 @@ + + + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/readme.txt b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/readme.txt new file mode 100644 index 0000000000..eef30ef8b6 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/Cmd_ZipInfo/readme.txt @@ -0,0 +1,9 @@ +ziplist +------- + +Usage: + + + ziplist [filename] + + will view the headers of the zipfile [filename] \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/CreateZipFile.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/CreateZipFile.cs new file mode 100644 index 0000000000..00e800b90e --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/CreateZipFile.cs @@ -0,0 +1,80 @@ +using System; +using System.IO; +using ICSharpCode.SharpZipLib.Zip; + +class CreateZipFile +{ + public static void Main(string[] args) + { + // Perform some simple parameter checking. More could be done + // like checking the target file name is ok, disk space, and lots + // of other things, but for a demo this covers some obvious traps. + if (args.Length < 2) { + Console.WriteLine("Usage: CreateZipFile Path ZipFile"); + return; + } + + if (!Directory.Exists(args[0])) { + Console.WriteLine("Cannot find directory '{0}'", args[0]); + return; + } + + try { + // Depending on the directory this could be very large and would require more attention + // in a commercial package. + string[] filenames = Directory.GetFiles(args[0]); + + // 'using' statements guarantee the stream is closed properly which is a big source + // of problems otherwise. Its exception safe as well which is great. + using (ZipOutputStream s = new ZipOutputStream(File.Create(args[1]))) + { + + s.SetLevel(9); // 0 - store only to 9 - means best compression + + byte[] buffer = new byte[4096]; + + foreach (string file in filenames) + { + + // Using GetFileName makes the result compatible with XP + // as the resulting path is not absolute. + var entry = new ZipEntry(Path.GetFileName(file)); + + // Setup the entry data as required. + + // Crc and size are handled by the library for seakable streams + // so no need to do them here. + + // Could also use the last write time or similar for the file. + entry.DateTime = DateTime.Now; + s.PutNextEntry(entry); + + using (FileStream fs = File.OpenRead(file)) { + + // Using a fixed size buffer here makes no noticeable difference for output + // but keeps a lid on memory usage. + int sourceBytes; + do + { + sourceBytes = fs.Read(buffer, 0, buffer.Length); + s.Write(buffer, 0, sourceBytes); + } while (sourceBytes > 0); + } + } + + // Finish/Close arent needed strictly as the using statement does this automatically + + // Finish is important to ensure trailing information for a Zip file is appended. Without this + // the created file would be invalid. + s.Finish(); + + // Close is important to wrap things up and unlock the file. + s.Close(); + } + } catch (Exception ex) { + Console.WriteLine("Exception during processing {0}", ex); + + // No need to rethrow the exception as for our purposes its handled. + } + } +} diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/CreateZipFile.csproj b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/CreateZipFile.csproj new file mode 100644 index 0000000000..0ddde07bbc --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/CreateZipFile.csproj @@ -0,0 +1,111 @@ + + + + Debug + AnyCPU + 2.0 + {DF63551E-BB6C-4A8D-9B01-DB94F721E74A} + ICSharpCode.SharpZipLib.Samples + CreateZipFile + Exe + + 4 + CreateZipFile + False + False + OnSuccessfulBuild + + + v4.6.1 + + + + + 2.0 + + false + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + + + true + false + False + True + bin\Debug\ + false + Full + false + TRACE;DEBUG + bin\Debug\CreateZipFile.XML + prompt + true + AllRules.ruleset + + + True + True + False + True + bin\Release\ + False + false + bin\Release\CreateZipFile.XML + prompt + pdbonly + true + + + False + Auto + 4194304 + AnyCPU + 4096 + + + + + + + + + + + Properties\GlobalAssemblyInfo.cs + + + + + + + + + + False + .NET Framework 3.5 SP1 + true + + + + + + + + {0e7413ff-eb9e-4714-acf2-be3a6a7b2ffd} + ICSharpCode.SharpZipLib + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/Properties/AssemblyInfo.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..39cbac5d94 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/Properties/AssemblyInfo.cs @@ -0,0 +1,8 @@ +using System.Reflection; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("CreateZipFile")] +[assembly: AssemblyDescription("A SharpZipLib sample program")] +[assembly: AssemblyCulture("")] diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/app.config b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/app.config new file mode 100644 index 0000000000..fd9961fb25 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/app.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/readme.txt b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/readme.txt new file mode 100644 index 0000000000..4a86bab3af --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/CreateZipFile/readme.txt @@ -0,0 +1,13 @@ +createzipfile +------------- + +Usage: + + createzipfile [directoryname] [zipfilename] + + will create zipfilename and store all files in the directory [directoryname] + in it. + + (btw. [directoryname] is a directoryname like C:\testdir not *.* or other + wildcards) + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/FastZip/FastZip.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/FastZip/FastZip.cs new file mode 100644 index 0000000000..28c3eeb178 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/FastZip/FastZip.cs @@ -0,0 +1,335 @@ +using System; +using System.IO; +using ICSharpCode.SharpZipLib.Core; +using ICSharpCode.SharpZipLib.Zip; + +class FastZipDemo +{ + enum Operation + { + Unknown, + Create, + Extract, + List, + Error + }; + + static void ListZipFile(string fileName, string fileFilter, string directoryFilter) + { + using (ZipFile zipFile = new ZipFile(fileName)) { + var localFileFilter = new PathFilter(fileFilter); + var localDirFilter = new PathFilter(directoryFilter); + + if (zipFile.Count == 0) { + Console.WriteLine("No entries to list"); + } else { + for (int i = 0; i < zipFile.Count; ++i) { + ZipEntry e = zipFile[i]; + if (e.IsFile) { + string path = Path.GetDirectoryName(e.Name); + if (localDirFilter.IsMatch(path)) { + if (localFileFilter.IsMatch(Path.GetFileName(e.Name))) { + Console.WriteLine(e.Name); + } + } + } else if (e.IsDirectory) { + if (localDirFilter.IsMatch(e.Name)) { + Console.WriteLine(e.Name); + } + } else { + Console.WriteLine(e.Name); + } + } + } + } + } + + void ListFile(object sender, ScanEventArgs e) + { + Console.WriteLine("{0}", e.Name); + } + + void ListDir(object sender, DirectoryEventArgs e) + { + if (!e.HasMatchingFiles) { + Console.WriteLine("Dir:{0}", e.Name); + } + } + + void ListFileSystem(string directory, bool recurse, string fileFilter, string directoryFilter) + { + var scanner = new FileSystemScanner(fileFilter, directoryFilter); + scanner.ProcessDirectory += ListDir; + scanner.ProcessFile += ListFile; + scanner.Scan(directory, recurse); + } + + void ShowProgress(object sender, ProgressEventArgs e) + { + // Very ugly but this is a sample! + Console.WriteLine("{0}%", e.PercentComplete); + } + + void ProcessFile(object sender, ScanEventArgs e) + { + Console.WriteLine(e.Name); + } + + void ProcessDirectory(object sender, DirectoryEventArgs e) + { + if (!e.HasMatchingFiles) { + Console.WriteLine(e.Name); + } + } + + bool ConfirmOverwrite(string file) + { + Console.WriteLine("Overwrite file {0} Y/N", file); + string yesNo = Console.ReadLine(); + return (yesNo != null) && string.Compare(yesNo.Trim(), "y", true) == 0; + } + + void Run(string[] args) + { + bool recurse = false; + string arg1 = null; + string arg2 = null; + string fileFilter = null; + string dirFilter = null; + bool verbose = false; + bool restoreDates = false; + bool restoreAttributes = false; + bool progress = false; + TimeSpan interval = TimeSpan.FromSeconds(1); + + bool createEmptyDirs = false; + FastZip.Overwrite overwrite = FastZip.Overwrite.Always; + FastZip.ConfirmOverwriteDelegate confirmOverwrite = null; + + Operation op = Operation.Unknown; + int argCount = 0; + + for (int i = 0; i < args.Length; ++i) { + if (args[i][0] == '-') { + string option = args[i].Substring(1).ToLower(); + string optArg = ""; + + int parameterIndex = option.IndexOf('='); + + if (parameterIndex >= 0) { + if (parameterIndex < option.Length - 1) { + optArg = option.Substring(parameterIndex + 1); + } + option = option.Substring(0, parameterIndex); + } + + switch (option) { + case "e": + case "empty": + createEmptyDirs = true; + break; + + case "x": + case "extract": + if (op == Operation.Unknown) { + op = Operation.Extract; + } else { + Console.WriteLine("Only one operation at a time is permitted"); + op = Operation.Error; + } + break; + + case "c": + case "create": + if (op == Operation.Unknown) { + op = Operation.Create; + } else { + Console.WriteLine("Only one operation at a time is permitted"); + op = Operation.Error; + } + break; + + case "l": + case "list": + if (op == Operation.Unknown) { + op = Operation.List; + } else { + Console.WriteLine("Only one operation at a time is permitted"); + op = Operation.Error; + } + break; + + + case "p": + case "progress": + progress = true; + verbose = true; + break; + + case "r": + case "recurse": + recurse = true; + break; + + case "v": + case "verbose": + verbose = true; + break; + + case "i": + if (optArg.Length > 0) { + interval = TimeSpan.FromSeconds(int.Parse(optArg)); + } + break; + + case "file": + if (NameFilter.IsValidFilterExpression(optArg)) { + fileFilter = optArg; + } else { + Console.WriteLine("File filter expression contains an invalid regular expression"); + op = Operation.Error; + } + break; + + case "dir": + if (NameFilter.IsValidFilterExpression(optArg)) { + dirFilter = optArg; + } else { + Console.WriteLine("Path filter expression contains an invalid regular expression"); + op = Operation.Error; + } + break; + + case "o": + case "overwrite": + switch (optArg) { + case "always": + overwrite = FastZip.Overwrite.Always; + confirmOverwrite = null; + break; + + case "never": + overwrite = FastZip.Overwrite.Never; + confirmOverwrite = null; + break; + + case "prompt": + overwrite = FastZip.Overwrite.Prompt; + confirmOverwrite = new FastZip.ConfirmOverwriteDelegate(ConfirmOverwrite); + break; + + default: + Console.WriteLine("Invalid overwrite option"); + op = Operation.Error; + break; + } + break; + + case "oa": + restoreAttributes = true; + break; + + case "od": + restoreDates = true; + break; + + default: + Console.WriteLine("Unknown option {0}", args[i]); + op = Operation.Error; + break; + } + } else if (arg1 == null) { + arg1 = args[i]; + ++argCount; + } else if (arg2 == null) { + arg2 = args[i]; + ++argCount; + } + } + + FastZipEvents events = null; + + if (verbose) { + events = new FastZipEvents(); + //events.ProcessDirectory = new ProcessDirectoryHandler(ProcessDirectory); + events.ProcessDirectory += new EventHandler(ProcessDirectory); + events.ProcessFile = new ProcessFileHandler(ProcessFile); + + if (progress) { + events.Progress = new ProgressHandler(ShowProgress); + events.ProgressInterval = interval; + } + } + + var fastZip = new FastZip(events); + fastZip.CreateEmptyDirectories = createEmptyDirs; + fastZip.RestoreAttributesOnExtract = restoreAttributes; + fastZip.RestoreDateTimeOnExtract = restoreDates; + + switch (op) { + case Operation.Create: + if (argCount == 2) { + Console.WriteLine("Creating Zip"); + + fastZip.CreateZip(arg1, arg2, recurse, fileFilter, dirFilter); + } else + Console.WriteLine("Invalid arguments"); + break; + + case Operation.Extract: + if (argCount == 2) { + Console.WriteLine("Extracting Zip"); + fastZip.ExtractZip(arg1, arg2, overwrite, confirmOverwrite, fileFilter, dirFilter, restoreDates); + } else + Console.WriteLine("zipfile and target directory not specified"); + break; + + case Operation.List: + if (File.Exists(arg1)) { + ListZipFile(arg1, fileFilter, dirFilter); + } else if (Directory.Exists(arg1)) { + ListFileSystem(arg1, recurse, fileFilter, dirFilter); + } else { + Console.WriteLine("No valid list file or directory"); + } + break; + + case Operation.Unknown: + Console.WriteLine( + "FastZip v0.5\n" + + " Usage: FastZip {options} operation args\n" + + "Operation Options: (only one permitted)\n" + + " -x zipfile targetdir : Extract files from Zip\n" + + " -c zipfile sourcedir : Create zip file\n" + + " -l zipfile|dir : List elements\n" + + "\n" + + "Behavioural options:\n" + + " -dir={dirFilter}\n" + + " -file={fileFilter}\n" + + " -e Process empty directories\n" + + " -i Progress interval in seconds\n" + + " -p Show file progress\n" + + " -r Recurse directories\n" + + " -v Verbose output\n" + + " -oa Restore file attributes on extract\n" + + " -ot Restore file date time on extract\n" + + " -overwrite=prompt|always|never : Overwrite on extract handling\n" + ); + break; + + case Operation.Error: + // Do nothing for now... + break; + } + } + + /// + /// Main entry point for FastZip sample. + /// + /// The arguments provided to this process. + public static void Main(string[] args) + { + var main = new FastZipDemo(); + main.Run(args); + } +} diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/FastZip/FastZip.csproj b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/FastZip/FastZip.csproj new file mode 100644 index 0000000000..442366ab6e --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/FastZip/FastZip.csproj @@ -0,0 +1,94 @@ + + + + Release + AnyCPU + 2.0 + {61BE8DBC-149A-4564-B891-9EEA4A09ED12} + ICSharpCode.SharpZipLib.Samples + FastZip + Exe + + 4 + + FastZipDemo + False + False + OnSuccessfulBuild + + + v4.6.1 + + + + + 2.0 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + True + False + False + True + TRACE;DEBUG + bin\Debug\ + False + false + bin\Debug\FastZip.XML + prompt + full + + + False + True + False + False + + ..\bin\ + False + false + ..\bin\FastZip.XML + + + + + + + Properties\GlobalAssemblyInfo.cs + + + + + + + + + + False + .NET Framework 3.5 SP1 + true + + + + + {0e7413ff-eb9e-4714-acf2-be3a6a7b2ffd} + ICSharpCode.SharpZipLib + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/FastZip/Properties/AssemblyInfo.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/FastZip/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..070e54484a --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/FastZip/Properties/AssemblyInfo.cs @@ -0,0 +1,8 @@ +using System.Reflection; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("FastZip sample")] +[assembly: AssemblyDescription("A SharpZipLib sample program")] +[assembly: AssemblyCulture("")] diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/FastZip/app.config b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/FastZip/app.config new file mode 100644 index 0000000000..3dbff35f48 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/FastZip/app.config @@ -0,0 +1,3 @@ + + + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/SampleAssemblyInfo.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/SampleAssemblyInfo.cs new file mode 100644 index 0000000000..9b0289fb64 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/SampleAssemblyInfo.cs @@ -0,0 +1,58 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly: AssemblyTitle("ZF")] +[assembly: AssemblyDescription("ZF A SharpZipLib Sample")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("")] +[assembly: AssemblyCopyright("Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly: AssemblyVersion("0.85.4.369")] + +// +// In order to sign your assembly you must specify a key to use. Refer to the +// Microsoft .NET Framework documentation for more information on assembly signing. +// +// Use the attributes below to control which key is used for signing. +// +// Notes: +// (*) If no key is specified, the assembly is not signed. +// (*) KeyName refers to a key that has been installed in the Crypto Service +// Provider (CSP) on your machine. KeyFile refers to a file which contains +// a key. +// (*) If the KeyFile and the KeyName values are both specified, the +// following processing occurs: +// (1) If the KeyName can be found in the CSP, that key is used. +// (2) If the KeyName does not exist and the KeyFile does exist, the key +// in the KeyFile is installed into the CSP and used. +// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility. +// When specifying the KeyFile, the location of the KeyFile should be +// relative to the project output directory which is +// %Project Directory%\obj\. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/sz/Properties/AssemblyInfo.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/sz/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..38fd02d393 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/sz/Properties/AssemblyInfo.cs @@ -0,0 +1,8 @@ +using System.Reflection; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("SZ")] +[assembly: AssemblyDescription("A SharpZipLib sample program")] +[assembly: AssemblyCulture("")] diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/sz/app.config b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/sz/app.config new file mode 100644 index 0000000000..3dbff35f48 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/sz/app.config @@ -0,0 +1,3 @@ + + + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/sz/sz.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/sz/sz.cs new file mode 100644 index 0000000000..d928f89072 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/sz/sz.cs @@ -0,0 +1,1342 @@ +using System; +using System.Collections; +using System.Globalization; +using System.IO; +using System.Reflection; +using System.Text; +using ICSharpCode.SharpZipLib.Core; +using ICSharpCode.SharpZipLib.Zip; +using ICSharpCode.SharpZipLib.Zip.Compression; + +namespace ICSharpCode.SharpZipLib.Samples.SZ +{ + /// + /// A command line archiver using the SharpZipLib compression library + /// + public class SharpZipArchiver { + + /// + /// Options for handling overwriting of files. + /// + enum Overwrite { + Prompt, + Never, + Always + } + + /// + /// The operations that can be performed. + /// + enum Operation + { + Create, // add files to new archive + Extract, // extract files from existing archive + List, // show contents of existing archive + Delete, // Delete from archive + Add, // Add to archive. + Test, // Test the archive for validity. + } + + /// + /// Interpret attributes based on the operating system they are from. + /// + /// The operating system to base interpretation of attributes on. + /// The external attributes. + /// A string representation of the attributres passed. + static string InterpretExternalAttributes(int operatingSystem, int attributes) + { + string result = string.Empty; + if ((operatingSystem == 0) || (operatingSystem == 10)) { + // Directory + if ((attributes & 0x10) != 0) + result = result + "D"; + else + result = result + "-"; + + // Volume + if ((attributes & 0x08) != 0) + result = result + "V"; + else + result = result + "-"; + + // Read-only + if ((attributes & 0x01) != 0) + result = result + "r"; + else + result = result + "-"; + + // Archive + if ((attributes & 0x20) != 0) + result = result + "a"; + else + result = result + "-"; + + // System + if ((attributes & 0x04) != 0) + result = result + "s"; + else + result = result + "-"; + + // Hidden + if ((attributes & 0x02) != 0) + result = result + "h"; + else + result = result + "-"; + + // Device + if ((attributes & 0x4) != 0) + result = result + "d"; + else + result = result + "-"; + + // OS is NTFS + if ( operatingSystem == 10 ) + { + // Encrypted + if ( (attributes & 0x4000) != 0 ) { + result += "E"; + } + else { + result += "-"; + } + + // Not content indexed + if ( (attributes & 0x2000) != 0 ) { + result += "n"; + } + else { + result += "-"; + } + + // Offline + if ( (attributes & 0x1000) != 0 ) { + result += "O"; + } + else { + result += "-"; + } + + // Compressed + if ( (attributes & 0x0800) != 0 ) { + result += "C"; + } + else { + result += "-"; + } + + // Reparse point + if ( (attributes & 0x0400) != 0 ) { + result += "R"; + } + else { + result += "-"; + } + + // Sparse + if ( (attributes & 0x0200) != 0 ) { + result += "S"; + } + else { + result += "-"; + } + + // Temporary + if ( (attributes & 0x0100) != 0 ) { + result += "T"; + } + else { + result += "-"; + } + } + } + return result; + } + + /// + /// Determine if string is numeric [0-9]+ + /// + /// string to test + /// true iff rhs is numeric + static bool IsNumeric(string rhs) + { + bool result; + if (!string.IsNullOrEmpty(rhs)) { + result = true; + for (int i = 0; result && (i < rhs.Length); ++i) { + if (!char.IsDigit(rhs[i])) { + result = false; + } + } + } else { + result = false; + } + return result; + } + + /// + /// Parse command line arguments. + /// This is fairly flexible without using any custom classes. Arguments and options can appear + /// in any order and are case insensitive. Arguments for options are indicated with an '=' + /// as in -demo=argument, sometimes the '=' can be omitted as well secretly. + /// Grouping of single character options is supported. + /// + /// The actual arguments and their handling is however a grab bag of ad-hoc things and its a bit messy. Could be a + /// bit more rigorous about how things are done. Up side is almost anything is/can be allowed + /// + /// + /// true if arguments are valid such that processing should continue + /// + bool SetArgs(string[] args) { + bool result = true; + int argIndex = 0; + + while (argIndex < args.Length) { + if (args[argIndex][0] == '-' || args[argIndex][0] == '/') { + + string option = args[argIndex].Substring(1).ToLower(); + string optArg = ""; + + int parameterIndex = option.IndexOf('='); + + if (parameterIndex >= 0) { + if (parameterIndex < option.Length - 1) { + optArg = option.Substring(parameterIndex + 1); + } + option = option.Substring(0, parameterIndex); + } + + if (option.Length == 0) { + Console.WriteLine("Invalid argument {0}", args[argIndex]); + result = false; + } + else { + int optionIndex = 0; + while (optionIndex < option.Length) { + switch(option[optionIndex]) { + case '-': // long option + optionIndex = option.Length; + + switch (option) { + case "-abs": + relativePathInfo = false; + break; + + case "-add": + operation = Operation.Add; + break; + + case "-create": + operation = Operation.Create; + break; + + case "-list": + operation = Operation.List; + useZipFileWhenListing = true; + break; + + case "-extract": + operation = Operation.Extract; + if (optArg.Length > 0) { + targetOutputDirectory = optArg; + } + break; + + case "-delete": + operation = Operation.Delete; + break; + + case "-test": + operation = Operation.Test; + break; + + case "-info": + ShowEnvironment(); + break; + + case "-emptydirs": + addEmptyDirectoryEntries = true; + break; + + case "-data": + testData = true; + break; + + case "-extractdir": + if (optArg.Length > 0) { + targetOutputDirectory = optArg; + } else { + result = false; + Console.WriteLine("Invalid extractdir " + args[argIndex]); + } + break; + + case "-zip64": + if ( optArg.Length > 0 ) { + switch ( optArg ) { + case "on": + useZip64_ = UseZip64.On; + break; + + case "off": + useZip64_ = UseZip64.Off; + break; + + case "auto": + useZip64_ = UseZip64.Dynamic; + break; + } + } + break; + + case "-encoding": + if (optArg.Length > 0) { + if (IsNumeric(optArg)) { + try { + int enc = int.Parse(optArg); + if (Encoding.GetEncoding(enc) != null) { + ZipConstants.DefaultCodePage = enc; + } else { + result = false; + Console.WriteLine("Invalid encoding " + args[argIndex]); + } + } + catch (Exception) { + result = false; + Console.WriteLine("Invalid encoding " + args[argIndex]); + } + } else { + try { + ZipConstants.DefaultCodePage = Encoding.GetEncoding(optArg).CodePage; + } + catch (Exception) { + result = false; + Console.WriteLine("Invalid encoding " + args[argIndex]); + } + } + } else { + result = false; + Console.WriteLine("Missing encoding parameter"); + } + break; + + case "-store": + useZipStored = true; + break; + + case "-deflate": + useZipStored = false; + break; + + case "-version": + ShowVersion(); + break; + + case "-help": + ShowHelp(); + break; +#if !NETCF + case "-restore-dates": + restoreDateTime = true; + break; +#endif + + default: + Console.WriteLine("Invalid long argument " + args[argIndex]); + result = false; + break; + } + break; + + case '?': + ShowHelp(); + break; + + case 's': + if (optionIndex != 0) { + result = false; + Console.WriteLine("-s cannot be in a group"); + } else { + if (optArg.Length > 0) { + password = optArg; + } else if (option.Length > 1) { + password = option.Substring(1); + } else { + Console.WriteLine("Missing argument to " + args[argIndex]); + } + } + optionIndex = option.Length; + break; + + case 'c': + operation = Operation.Create; + break; + + case 'l': + if (optionIndex != 0) { + result = false; + Console.WriteLine("-l cannot be in a group"); + } else { + if (optArg.Length > 0) { + try { + compressionLevel = int.Parse(optArg); + } + catch (Exception) { + Console.WriteLine("Level invalid"); + } + } + } + optionIndex = option.Length; + break; + + case 'o': + optionIndex += 1; + overwriteFiles = (optionIndex < option.Length) ? (option[optionIndex] == '+') ? Overwrite.Always : Overwrite.Never : Overwrite.Never; + break; + + case 'p': + relativePathInfo = true; + break; + + case 'q': + silent = true; + if (overwriteFiles == Overwrite.Prompt) { + overwriteFiles = Overwrite.Never; + } + break; + + case 'r': + recursive = true; + break; + + case 'v': + operation = Operation.List; + break; + + case 'x': + if (optionIndex != 0) { + result = false; + Console.WriteLine("-x cannot be in a group"); + } else { + operation = Operation.Extract; + if (optArg.Length > 0) { + targetOutputDirectory = optArg; + } + } + optionIndex = option.Length; + break; + + default: + Console.WriteLine("Invalid argument: " + args[argIndex]); + result = false; + break; + } + ++optionIndex; + } + } + } + else { + fileSpecs.Add(args[argIndex]); + } + ++argIndex; + } + + if (fileSpecs.Count > 0 && operation == Operation.Create) { + var checkPath = (string)fileSpecs[0]; + int deviceCheck = checkPath.IndexOf(':'); +#if NETCF_1_0 + if (checkPath.IndexOfAny(Path.InvalidPathChars) >= 0 +#else + if (checkPath.IndexOfAny(Path.GetInvalidPathChars()) >= 0 +#endif + || checkPath.IndexOf('*') >= 0 || checkPath.IndexOf('?') >= 0 + || (deviceCheck >= 0 && deviceCheck != 1)) { + Console.WriteLine("There are invalid characters in the specified zip file name"); + result = false; + } + } + return result && (fileSpecs.Count > 0); + } + + /// + /// Show encoding/locale information + /// + void ShowEnvironment() + { + seenHelp = true; +#if !NETCF_1_0 + Console.WriteLine( + "Current encoding is {0}, code page {1}, windows code page {2}", + Console.Out.Encoding.EncodingName, + Console.Out.Encoding.CodePage, + Console.Out.Encoding.WindowsCodePage); + + Console.WriteLine("Default code page is {0}", + Encoding.Default.CodePage); + + Console.WriteLine( "Current culture LCID 0x{0:X}, {1}", CultureInfo.CurrentCulture.LCID, CultureInfo.CurrentCulture.EnglishName); + Console.WriteLine( "Current thread OEM codepage {0}", System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.OEMCodePage); + Console.WriteLine( "Current thread Mac codepage {0}", System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.MacCodePage); + Console.WriteLine( "Current thread Ansi codepage {0}", System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ANSICodePage); +#endif + } + + /// + /// Display version information + /// + void ShowVersion() { + seenHelp = true; + Console.WriteLine("SharpZip Archiver v0.37"); + Console.WriteLine("Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team"); +#if !NETCF + Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); + + foreach (Assembly assembly in assemblies) { + if (assembly.GetName().Name == "ICSharpCode.SharpZipLib") { + Console.WriteLine("#ZipLib v{0} {1}", assembly.GetName().Version, + assembly.GlobalAssemblyCache ? "Running from GAC" : "Running from DLL" + ); + } + } +#endif + } + + /// + /// Show help on possible options and arguments + /// + void ShowHelp() + { + if (seenHelp) { + return; + } + + seenHelp = true; + ShowVersion(); + Console.WriteLine("usage sz {options} archive files"); + Console.WriteLine(""); + Console.WriteLine("Options:"); + Console.WriteLine("-abs Store absolute path info"); + Console.WriteLine("-?, --help Show this help"); + Console.WriteLine("-c --create Create new archive"); + Console.WriteLine("-v List archive contents (default)"); + Console.WriteLine("--list List archive contents extended format"); + Console.WriteLine("-x{=dir}, --extract{=dir} Extract archive contents to dir(default .)"); + Console.WriteLine("--extractdir=path Set extract directory (default .)"); + Console.WriteLine("--info Show current environment information" ); + Console.WriteLine("--store Store entries (default=deflate)"); + Console.WriteLine("--version Show version information"); + Console.WriteLine("--emptydirs Create entries for empty directories"); + Console.WriteLine("--encoding=codepage|name Set code page for encoding by name or number"); + Console.WriteLine("--zip64=on|off|auto Set use zip64 flag (default is auto)"); +#if !NETCF + Console.WriteLine("--restore-dates Restore dates on extraction"); +#endif + Console.WriteLine("--delete Delete files from archive"); + Console.WriteLine("--test Test archive for validity"); + Console.WriteLine("--data Test archive data"); + Console.WriteLine("--add Add files to archive"); + Console.WriteLine("-o+ Overwrite files without prompting"); + Console.WriteLine("-o- Never overwrite files"); + Console.WriteLine("-p Store relative path info (default)"); + Console.WriteLine("-r Recurse sub-folders"); + Console.WriteLine("-q Quiet mode"); + Console.WriteLine("-s=password Set archive password"); + Console.WriteLine("-l=level Use compression level (0-9) when compressing"); + Console.WriteLine(""); + + } + + /// + /// Calculate compression ratio as a percentage + /// Doesnt allow for expansion (ratio > 100) as the resulting strings can get huge easily + /// + static int GetCompressionRatio(long packedSize, long unpackedSize) + { + int result = 0; + if (unpackedSize > 0 && unpackedSize >= packedSize) { + result = (int) Math.Round((1.0 - ((double)packedSize / (double)unpackedSize)) * 100.0); + } + return result; + } + + /// + /// List zip file contents using stream + /// + /// File to list contents of + void ListZip(string fileName) { + try { + // TODO for asian/non-latin/non-proportional fonts string lengths dont work so output may not line up + const string headerTitles = "Name Length Ratio Size Date & time CRC-32"; + const string headerUnderline = "--------------- ---------- ----- ---------- ------------------- --------"; + + var fileInfo = new FileInfo(fileName); + + if (fileInfo.Exists == false) { + Console.WriteLine("No such file exists {0}", fileName); + return; + } + + Console.WriteLine(fileName); + + using (FileStream fileStream = File.OpenRead(fileName)) { + using (ZipInputStream stream = new ZipInputStream(fileStream)) { + if (!string.IsNullOrEmpty(password)) { + stream.Password = password; + } + + int entryCount = 0; + long totalSize = 0; + + ZipEntry theEntry; + + while ((theEntry = stream.GetNextEntry()) != null) { + + if ( theEntry.IsDirectory ) { + Console.WriteLine("Directory {0}", theEntry.Name); + continue; + } + + if ( !theEntry.IsFile ) { + Console.WriteLine("Non file entry {0}", theEntry.Name); + continue; + } + + if (entryCount == 0) { + Console.WriteLine(headerTitles); + Console.WriteLine(headerUnderline); + } + + ++entryCount; + int ratio = GetCompressionRatio(theEntry.CompressedSize, theEntry.Size); + totalSize += theEntry.Size; + + if (theEntry.Name.Length > 15) { + Console.WriteLine(theEntry.Name); + Console.WriteLine( + "{0,-15} {1,10:0} {2,3}% {3,10:0} {4,10:d} {4:hh:mm:ss} {5,8:x}", + "", theEntry.Size, ratio, theEntry.CompressedSize, theEntry.DateTime, theEntry.Crc); + } else { + Console.WriteLine( + "{0,-15} {1,10:0} {2,3}% {3,10:0} {4,10:d} {4:hh:mm:ss} {5,8:x}", + theEntry.Name, theEntry.Size, ratio, theEntry.CompressedSize, theEntry.DateTime, theEntry.Crc); + } + } + + if (entryCount == 0) { + Console.WriteLine("Archive is empty!"); + } else { + Console.WriteLine(headerUnderline); + Console.WriteLine( + "{0,-15} {1,10:0} {2,3}% {3,10:0} {4,10:d} {4:hh:mm:ss}", + entryCount + " entries", totalSize, GetCompressionRatio(fileInfo.Length, totalSize), fileInfo.Length, fileInfo.LastWriteTime); + } + } + } + } + catch(Exception exception) + { + Console.WriteLine("Exception during list operation: {0}", exception.Message); + } + } + + /// + /// List zip file contents using class + /// + /// File to list contents of + void ListZipViaZipFile(string fileName) { + try { + const string headerTitles = "Name Length Ratio Size Date & time CRC-32 Attr"; + const string headerUnderline = "------------ ---------- ----- ---------- ------------------- -------- ------"; + + var fileInfo = new FileInfo(fileName); + + if (fileInfo.Exists == false) { + Console.WriteLine("No such file exists {0}", fileName); + return; + } + + Console.WriteLine(fileName); + + int entryCount = 0; + long totalSize = 0; + + using (ZipFile zipFile = new ZipFile(fileName)) { + foreach (ZipEntry theEntry in zipFile) { + + if ( theEntry.IsDirectory ) { + Console.WriteLine("Directory {0}", theEntry.Name); + } + else if ( !theEntry.IsFile ) { + Console.WriteLine("Non file entry {0}", theEntry.Name); + continue; + } + else { + if (entryCount == 0) { + Console.WriteLine(headerTitles); + Console.WriteLine(headerUnderline); + } + + ++entryCount; + int ratio = GetCompressionRatio(theEntry.CompressedSize, theEntry.Size); + totalSize += theEntry.Size; + + if (theEntry.Name.Length > 12) { + Console.WriteLine(theEntry.Name); + Console.WriteLine( + "{0,-12} {1,10:0} {2,3}% {3,10:0} {4,10:d} {4:hh:mm:ss} {5,8:x} {6,4}", + "", theEntry.Size, ratio, theEntry.CompressedSize, theEntry.DateTime, theEntry.Crc, + InterpretExternalAttributes(theEntry.HostSystem, theEntry.ExternalFileAttributes)); + } + else { + Console.WriteLine( + "{0,-12} {1,10:0} {2,3}% {3,10:0} {4,10:d} {4:hh:mm:ss} {5,8:x} {6,4}", + theEntry.Name, theEntry.Size, ratio, theEntry.CompressedSize, theEntry.DateTime, theEntry.Crc, + InterpretExternalAttributes(theEntry.HostSystem, theEntry.ExternalFileAttributes)); + } + } + } + } + + if (entryCount == 0) { + Console.WriteLine("Archive is empty!"); + } else { + Console.WriteLine(headerUnderline); + Console.WriteLine( + "{0,-12} {1,10:0} {2,3}% {3,10:0} {4,10:d} {4:hh:mm:ss}", + entryCount + " entries", totalSize, GetCompressionRatio(fileInfo.Length, totalSize), fileInfo.Length, fileInfo.LastWriteTime); + } + } + catch(Exception exception) { + Console.WriteLine("Exception during list operation: {0}", exception.Message); + } + } + + /// + /// Execute List operation + /// Currently only Zip files are supported + /// + /// Files to list + void List(ArrayList fileSpecifications) + { + foreach (string spec in fileSpecifications) { + string [] names; + string pathName = Path.GetDirectoryName(spec); + + if ( string.IsNullOrEmpty(pathName)) { + pathName = @".\"; + } + names = Directory.GetFiles(pathName, Path.GetFileName(spec)); + + if (names.Length == 0) { + Console.WriteLine("No files found matching {0}", spec); + } + else { + foreach (string file in names) { + if (useZipFileWhenListing) { + ListZipViaZipFile(file); + } else { + ListZip(file); + } + Console.WriteLine(""); + } + } + } + } + + /// + /// 'Cook' a name making it acceptable as a zip entry name. + /// + /// name to cook + /// String to remove from front of name if present + /// Make names relative if true or absolute if false + static public string CookZipEntryName(string name, string stripPrefix, bool relativePath) + { +#if TEST + Console.WriteLine("Cooking '{0}' prefix is '{1}'", name, stripPrefix); +#endif + if (name == null) { + return ""; + } + + if (!string.IsNullOrEmpty(stripPrefix)&& name.IndexOf(stripPrefix, 0) == 0) { + name = name.Substring(stripPrefix.Length); + } + + if (Path.IsPathRooted(name)) { + // NOTE: + // for UNC names... \\machine\share\zoom\beet.txt gives \zoom\beet.txt + name = name.Substring(Path.GetPathRoot(name).Length); +#if TEST + Console.WriteLine("Removing root info {0}", name); +#endif + } + + name = name.Replace(@"\", "/"); + + if (relativePath) { + if (name.Length > 0 && (name[0] == Path.AltDirectorySeparatorChar || name[0] == Path.DirectorySeparatorChar)) { + name = name.Remove(0, 1); + } + } else { + if (name.Length > 0 && name[0] != Path.AltDirectorySeparatorChar && name[0] != Path.DirectorySeparatorChar) { + name = name.Insert(0, "/"); + } + } +#if TEST + Console.WriteLine("Cooked value '{0}'", name); +#endif + return name; + } + + /// + /// Make string into something acceptable as an entry name + /// + /// Name to 'cook' + string CookZipEntryName(string name) + { + return CookZipEntryName(name, removablePathPrefix, relativePathInfo); + } + + // TODO: Add equivalent for non-seekable output + /// + /// Add a file were the output is seekable + /// + void AddFileSeekableOutput(string file, string entryPath) + { + var entry = new ZipEntry(entryPath); + var fileInfo = new FileInfo(file); + entry.DateTime = fileInfo.LastWriteTime; // or DateTime.Now or whatever, for now use the file + entry.ExternalFileAttributes = (int)fileInfo.Attributes; + entry.Size = fileInfo.Length; + + if (useZipStored) { + entry.CompressionMethod = CompressionMethod.Stored; + } else { + entry.CompressionMethod = CompressionMethod.Deflated; + } + + using (FileStream fileStream = File.OpenRead(file)) { + outputStream.PutNextEntry(entry); + StreamUtils.Copy(fileStream, outputStream, GetBuffer()); + } + } + + byte[] GetBuffer() + { + if ( buffer == null ) { + buffer = new byte[bufferSize_]; + } + return buffer; + + } + + /// + /// Add file to archive + /// + /// file to add + void AddFile(string fileName) { +#if TEST + Console.WriteLine("AddFile {0}", fileName); +#endif + + if (File.Exists(fileName)) { + string entryName = CookZipEntryName(fileName); + + if (silent == false) { + Console.Write(" " + entryName); + } + + AddFileSeekableOutput(fileName, entryName); + + if (silent == false) { + Console.WriteLine(""); + } + } else { + Console.WriteLine("No such file exists {0}", fileName); + } + } + + /// + /// Add an entry for a folder or directory + /// + /// The name of the folder to add + void AddFolder(string folderName) + { +#if TEST + Console.WriteLine("AddFolder {0}", folderName); +#endif + folderName = CookZipEntryName(folderName); + if (folderName.Length == 0 || folderName[folderName.Length - 1] != '/') { + folderName = folderName + '/'; + } + + var zipEntry = new ZipEntry(folderName); + outputStream.PutNextEntry(zipEntry); + } + + /// + /// Compress contents of folder + /// + /// The folder to compress + /// If true process recursively + /// Pattern to match for files + /// Number of entries added + int CompressFolder(string basePath, bool recursiveSearch, string searchPattern) + { + int result = 0; +#if TEST + Console.WriteLine("CompressFolder basepath {0} pattern {1}", basePath, searchPattern); +#endif + string [] names = Directory.GetFiles(basePath, searchPattern); + + foreach (string fileName in names) { + AddFile(fileName); + ++result; + } + + if (names.Length == 0 && addEmptyDirectoryEntries) { + AddFolder(basePath); + ++result; + } + + if (recursiveSearch) { + names = Directory.GetDirectories(basePath); + foreach (string folderName in names) { + result += CompressFolder(folderName, true, searchPattern); + } + } + return result; + } + + /// + /// Create archives based on specifications passed and internal state + /// + void Create(ArrayList fileSpecifications) + { + var zipFileName = fileSpecifications[0] as string; + if (Path.GetExtension(zipFileName).Length == 0) { + zipFileName = Path.ChangeExtension(zipFileName, ".zip"); + } + + fileSpecifications.RemoveAt(0); + + if (overwriteFiles == Overwrite.Never && File.Exists(zipFileName)) { + Console.WriteLine("File {0} already exists", zipFileName); + return; + } + + int totalEntries = 0; + + using (FileStream stream = File.Create(zipFileName)) { + using (outputStream = new ZipOutputStream(stream)) { + if (!string.IsNullOrEmpty(password)) { + outputStream.Password = password; + } + + outputStream.UseZip64 = useZip64_; + outputStream.SetLevel(compressionLevel); + foreach(string spec in fileSpecifications) { + string fileName = Path.GetFileName(spec); + string pathName = Path.GetDirectoryName(spec); + + if (string.IsNullOrEmpty(pathName)) { + pathName = Path.GetFullPath("."); + if (relativePathInfo == true) { + removablePathPrefix = pathName; + } + } else { + pathName = Path.GetFullPath(pathName); + // TODO: for paths like ./txt/*.txt the prefix should be fullpath for . + // for z:txt/*.txt should be fullpath for z:. + if (relativePathInfo == true) { + removablePathPrefix = pathName; + } + } + + + // TODO wildcards arent full supported by this + if (recursive || fileName.IndexOf('*') >= 0 || fileName.IndexOf('?') >= 0) { + + // TODO this allows possible conflicts in filenames that are added to Zip file + // as part of different file specs. + totalEntries += CompressFolder(pathName, recursive, fileName); + } else { + AddFile(pathName + @"\" + fileName); + ++totalEntries; + } + } + + if (totalEntries == 0) { + Console.WriteLine("File created has no entries!"); + } + } + } + } + + bool ExtractFile(ZipInputStream inputStream, ZipEntry theEntry, string targetDir) + { + // try and sort out the correct place to save this entry + string entryFileName; + + if (Path.IsPathRooted(theEntry.Name)) { + string workName = Path.GetPathRoot(theEntry.Name); + workName = theEntry.Name.Substring(workName.Length); + entryFileName = Path.Combine(Path.GetDirectoryName(workName), Path.GetFileName(theEntry.Name)); + } + else { + entryFileName = theEntry.Name; + } + + string targetName = Path.Combine(targetDir, entryFileName); + + string fullPath = Path.GetDirectoryName(Path.GetFullPath(targetName)); +#if TEST + Console.WriteLine("Decompress targetfile name " + entryFileName); + Console.WriteLine("Decompress targetpath " + fullPath); +#endif + + // Could be an option or parameter to allow failure or try creation + if (Directory.Exists(fullPath) == false) { + try { + Directory.CreateDirectory(fullPath); + } + catch { + return false; + } + } + else if (overwriteFiles == Overwrite.Prompt) { + if (File.Exists(targetName) == true) { + Console.Write("File " + targetName + " already exists. Overwrite? "); + + // TODO sort out the complexities of Read so single key presses can be used + string readValue; + try { + readValue = Console.ReadLine(); + } + catch { + readValue = null; + } + + if (readValue == null || readValue.ToLower() != "y") { +#if TEST + Console.WriteLine("Skipped!"); +#endif + return true; + } + } + } + + + if (entryFileName.Length > 0) { +#if TEST + Console.WriteLine("Extracting..."); +#endif + using (FileStream streamWriter = File.Create(targetName)) { + byte[] data = new byte[4096]; + int size; + + do { + size = inputStream.Read(data, 0, data.Length); + streamWriter.Write(data, 0, size); + } while (size > 0); + } +#if !NETCF + if (restoreDateTime) { + File.SetLastWriteTime(targetName, theEntry.DateTime); + } +#endif + } + return true; + } + + void ExtractDirectory(ZipInputStream inputStream, ZipEntry theEntry, string targetDir) + { + // For now do nothing. + } + + /// + /// Decompress a file + /// + /// File to decompress + /// Directory to create output in + /// true iff all has been done successfully + bool DecompressFile(string fileName, string targetDir) + { + bool result = true; + + + try { + using (ZipInputStream inputStream = new ZipInputStream(File.OpenRead(fileName))) { + if (password != null) { + inputStream.Password = password; + } + + ZipEntry theEntry; + + while ((theEntry = inputStream.GetNextEntry()) != null) { + if ( theEntry.IsFile ) { + ExtractFile(inputStream, theEntry, targetDir); + } + else if ( theEntry.IsDirectory ) + { + ExtractDirectory(inputStream, theEntry, targetDir); + } + } + } + } + catch (Exception except) { + result = false; + Console.WriteLine(except.Message + " Failed to unzip file"); + } + + return result; + } + + /// + /// Extract archives based on user input + /// Allows simple wildcards to specify multiple archives + /// + void Extract(ArrayList fileSpecifications) + { + if (string.IsNullOrEmpty(targetOutputDirectory)) { + targetOutputDirectory = @".\"; + } + + foreach(string spec in fileSpecifications) { + + string [] names; + if (spec.IndexOf('*') >= 0 || spec.IndexOf('?') >= 0) { + string pathName = Path.GetDirectoryName(spec); + + if (string.IsNullOrEmpty(pathName)) { + pathName = @".\"; + } + names = Directory.GetFiles(pathName, Path.GetFileName(spec)); + } else { + names = new string[] { spec }; + } + + foreach (string fileName in names) { + if (File.Exists(fileName) == false) { + Console.WriteLine("No such file exists {0}", spec); + } else { + DecompressFile(fileName, targetOutputDirectory); + } + } + } + } + + void Test(ArrayList fileSpecs) + { + var zipFileName = fileSpecs[0] as string; + if (Path.GetExtension(zipFileName).Length == 0) { + zipFileName = Path.ChangeExtension(zipFileName, ".zip"); + } + + using (ZipFile zipFile = new ZipFile(zipFileName)) { + if ( zipFile.TestArchive(testData) ) { + Console.WriteLine("Archive test passed"); + } else { + Console.WriteLine("Archive test failure"); + } + } + } + + /// + /// Delete entries from an archive + /// + /// The file specs to operate on. + void Delete(ArrayList fileSpecs) + { + var zipFileName = fileSpecs[0] as string; + if (Path.GetExtension(zipFileName).Length == 0) { + zipFileName = Path.ChangeExtension(zipFileName, ".zip"); + } + + using (ZipFile zipFile = new ZipFile(zipFileName)) { + zipFile.BeginUpdate(); + for ( int i = 1; i < fileSpecs.Count; ++i ) { + zipFile.Delete((string)fileSpecs[i]); + } + zipFile.CommitUpdate(); + } + } + + void Add(ArrayList fileSpecs) + { + var zipFileName = fileSpecs[0] as string; + if (Path.GetExtension(zipFileName).Length == 0) { + zipFileName = Path.ChangeExtension(zipFileName, ".zip"); + } + + using (ZipFile zipFile = new ZipFile(zipFileName)) { + zipFile.BeginUpdate(); + for ( int i = 1; i < fileSpecs.Count; ++i ) { + zipFile.Add((string)fileSpecs[i]); + } + zipFile.CommitUpdate(); + } + } + + /// + /// Parse command line arguments and 'execute' them. + /// + void Execute(string[] args) { + if (SetArgs(args)) { + if (fileSpecs.Count == 0) { + if (!silent) { + Console.WriteLine("Nothing to do"); + } + } + else { + switch (operation) { + case Operation.List: + List(fileSpecs); + break; + + case Operation.Create: + Create(fileSpecs); + break; + + case Operation.Extract: + Extract(fileSpecs); + break; + + case Operation.Delete: + Delete(fileSpecs); + break; + + case Operation.Add: + Add(fileSpecs); + break; + + case Operation.Test: + Test(fileSpecs); + break; + } + } + } else { + if (!silent) { + ShowHelp(); + } + } + } + + /// + /// Entry point for program, creates archiver and runs it + /// + /// + /// Command line argument to process + /// + public static void Main(string[] args) { + + var sza = new SharpZipArchiver(); + sza.Execute(args); + } + + #region Instance Fields + /// + /// The Zip64 extension use to apply. + /// + UseZip64 useZip64_ = UseZip64.Off; + + /// + /// Has user already seen help output? + /// + bool seenHelp; + + /// + /// The size of the buffer to use when copying. + /// + int bufferSize_ = 8192; + + /// + /// Buffer for use when copying between streams. + /// + byte[] buffer; + + /// + /// File specification possibly with wildcards from command line + /// + ArrayList fileSpecs = new ArrayList(); + + /// + /// Deflate compression level + /// + int compressionLevel = Deflater.DEFAULT_COMPRESSION; + + /// + /// Create entries for directories with no files + /// + bool addEmptyDirectoryEntries; + + /// + /// Apply operations recursively + /// + bool recursive; + + /// + /// Use ZipFile class for listing entries + /// + bool useZipFileWhenListing; + + /// + /// Use relative path information + /// + bool relativePathInfo = true; + + /// + /// Operate silently + /// + bool silent; + + /// + /// Use store rather than deflate when adding files, not likely to be used much + /// but it does exercise the option as the library supports it + /// + bool useZipStored; + +#if !NETCF + /// + /// Restore file date and time to that stored in zip file on extraction + /// + bool restoreDateTime; +#endif + + /// + /// Overwrite files handling + /// + Overwrite overwriteFiles = Overwrite.Prompt; + + /// + /// Optional password for archive + /// + string password; + + /// + /// prefix to remove when creating relative path names + /// + string removablePathPrefix; + + /// + /// Where things will go + /// + string targetOutputDirectory; + + /// + /// What to do based on parsed command line arguments + /// + Operation operation = Operation.List; + + /// + /// Flag indicating wether entry data should be included when testing. + /// + bool testData; + + /// + /// stream used when creating archives. + /// + ZipOutputStream outputStream; + + #endregion + } +} diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/sz/sz.csproj b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/sz/sz.csproj new file mode 100644 index 0000000000..307073fd1d --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/sz/sz.csproj @@ -0,0 +1,89 @@ + + + + Debug + AnyCPU + 2.0 + {CE0CEA62-CC91-4D17-BC57-A5FCACCA6A1F} + ICSharpCode.SharpZipLib.Samples.SZ + sz + Exe + 4 + False + False + OnSuccessfulBuild + False + Auto + 4194304 + AnyCPU + 4096 + v4.6.1 + + + + + 2.0 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + True + False + True + ..\bin\ + false + Full + false + + + True + True + False + True + bin\Release\ + True + false + + + + + + + Properties\GlobalAssemblyInfo.cs + + + + + + + + + + False + .NET Framework 3.5 SP1 + true + + + + + {0e7413ff-eb9e-4714-acf2-be3a6a7b2ffd} + ICSharpCode.SharpZipLib + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/App.config b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/App.config new file mode 100644 index 0000000000..731f6de6c2 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/Properties/AssemblyInfo.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..12c8fa697c --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/Properties/AssemblyInfo.cs @@ -0,0 +1,8 @@ +using System.Reflection; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("UnZipFile")] +[assembly: AssemblyDescription("A SharpZipLib sample program")] +[assembly: AssemblyCulture("")] diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/UnZipFile.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/UnZipFile.cs new file mode 100644 index 0000000000..46c7d69f95 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/UnZipFile.cs @@ -0,0 +1,54 @@ +using System; +using System.IO; +using ICSharpCode.SharpZipLib.Zip; + + +class UnZipFileClass +{ + public static void Main(string[] args) + { + // Perform simple parameter checking. + if ( args.Length < 1 ) { + Console.WriteLine("Usage UnzipFile NameOfFile"); + return; + } + + if ( !File.Exists(args[0]) ) { + Console.WriteLine("Cannot find file '{0}'", args[0]); + return; + } + + using (ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]))) { + + ZipEntry theEntry; + while ((theEntry = s.GetNextEntry()) != null) { + + Console.WriteLine(theEntry.Name); + + string directoryName = Path.GetDirectoryName(theEntry.Name); + string fileName = Path.GetFileName(theEntry.Name); + + // create directory + if ( directoryName.Length > 0 ) { + Directory.CreateDirectory(directoryName); + } + + if (fileName != String.Empty) { + using (FileStream streamWriter = File.Create(theEntry.Name)) { + + int size = 2048; + byte[] data = new byte[2048]; + while (true) { + size = s.Read(data, 0, data.Length); + if (size > 0) { + streamWriter.Write(data, 0, size); + } else { + break; + } + } + } + } + } + } + } +} diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/readme.txt b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/readme.txt new file mode 100644 index 0000000000..7514817155 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/readme.txt @@ -0,0 +1,9 @@ +viewzipfile +----------- + +Usage: + + + unzipfile [filename] + + will unzip the contents of the zipfile [filename] \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/unzipfile.csproj b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/unzipfile.csproj new file mode 100644 index 0000000000..34beb77ba4 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/unzipfile/unzipfile.csproj @@ -0,0 +1,75 @@ + + + + + Debug + AnyCPU + {DE6AA83B-1EFA-41B0-85D9-49DA1B0202BC} + Exe + Properties + ICSharpCode.SharpZipLib.Samples + UnZipFile + v4.6.1 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + UnZipFileClass + + + + + + + + + + + + + + Properties\GlobalAssemblyInfo.cs + + + + + + + + + + + + + {0e7413ff-eb9e-4714-acf2-be3a6a7b2ffd} + ICSharpCode.SharpZipLib + + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/App.config b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/App.config new file mode 100644 index 0000000000..731f6de6c2 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/Properties/AssemblyInfo.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..155e43183e --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/Properties/AssemblyInfo.cs @@ -0,0 +1,8 @@ +using System.Reflection; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ViewZipFile")] +[assembly: AssemblyDescription("A SharpZipLib sample program")] +[assembly: AssemblyCulture("")] diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/ViewZipFile.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/ViewZipFile.cs new file mode 100644 index 0000000000..ac9ef390ce --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/ViewZipFile.cs @@ -0,0 +1,58 @@ +using System; +using System.IO; +using System.Text; +using ICSharpCode.SharpZipLib.Zip; + + +class ViewZipFileClass +{ + public static void Main(string[] args) + { + // Perform simple parameter checking. + if ( args.Length < 1 ) { + Console.WriteLine("Usage ViewZipFile NameOfFile"); + return; + } + + if ( !File.Exists(args[0]) ) { + Console.WriteLine("Cannot find file '{0}'", args[0]); + return; + } + + // For IO there should be exception handling but in this case its been ommitted + + byte[] data = new byte[4096]; + + using (ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]))) { + + ZipEntry theEntry; + while ((theEntry = s.GetNextEntry()) != null) { + Console.WriteLine("Name : {0}", theEntry.Name); + Console.WriteLine("Date : {0}", theEntry.DateTime); + Console.WriteLine("Size : (-1, if the size information is in the footer)"); + Console.WriteLine(" Uncompressed : {0}", theEntry.Size); + Console.WriteLine(" Compressed : {0}", theEntry.CompressedSize); + + if ( theEntry.IsFile ) { + + // Assuming the contents are text may be ok depending on what you are doing + // here its fine as its shows how data can be read from a Zip archive. + Console.Write("Show entry text (y/n) ?"); + + if (Console.ReadLine() == "y") { + int size = s.Read(data, 0, data.Length); + while (size > 0) { + Console.Write(Encoding.ASCII.GetString(data, 0, size)); + size = s.Read(data, 0, data.Length); + } + } + Console.WriteLine(); + } + } + + // Close can be ommitted as the using statement will do it automatically + // but leaving it here reminds you that is should be done. + s.Close(); + } + } +} diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/readme.txt b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/readme.txt new file mode 100644 index 0000000000..a401c4c5d1 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/readme.txt @@ -0,0 +1,9 @@ +viewzipfile +----------- + +Usage: + + + viewzipfile [filename] + + will view the contents of the zipfile [filename] \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/viewzipfile.csproj b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/viewzipfile.csproj new file mode 100644 index 0000000000..92a9f27464 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/viewzipfile/viewzipfile.csproj @@ -0,0 +1,75 @@ + + + + + Debug + AnyCPU + {F356B460-0DEA-4F7D-9CD8-7475B9BEC1F7} + Exe + Properties + ICSharpCode.SharpZipLib.Samples + ViewZipFile + v4.6.1 + 512 + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + ViewZipFileClass + + + + + + + + + + + + + + Properties\GlobalAssemblyInfo.cs + + + + + + + + + + + + + {0e7413ff-eb9e-4714-acf2-be3a6a7b2ffd} + ICSharpCode.SharpZipLib + + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/zf/Properties/AssemblyInfo.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/zf/Properties/AssemblyInfo.cs new file mode 100644 index 0000000000..11a6f5b5a2 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/zf/Properties/AssemblyInfo.cs @@ -0,0 +1,8 @@ +using System.Reflection; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("ZF")] +[assembly: AssemblyDescription("A SharpZipLib sample program")] +[assembly: AssemblyCulture("")] diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/zf/app.config b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/zf/app.config new file mode 100644 index 0000000000..3dbff35f48 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/zf/app.config @@ -0,0 +1,3 @@ + + + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/zf/zf.cs b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/zf/zf.cs new file mode 100644 index 0000000000..88cd628ea1 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/zf/zf.cs @@ -0,0 +1,1490 @@ +//------------------------------------------------------------------------------ +// +// zf - A command line archiver using the ZipFile class from SharpZipLib +// for compression +// +// Copyright © 2000-2016 SharpZipLib Contributors +// +//------------------------------------------------------------------------------ +// Version History +// 1 Initial version ported from sz sample. Some stuff is not used or commented still +// 2 Display files during extract. --env Now shows .NET version information. +// 3 Add usezip64 option as a testing aid. +// 4 Fix format bug in output, remove unused code and other minor refactoring + + +using System; +using System.IO; +using System.Collections; +using System.Text; +using System.Globalization; +using System.Reflection; + +using ICSharpCode.SharpZipLib.Zip; +using ICSharpCode.SharpZipLib.Core; + +namespace ICSharpCode.SharpZipLib.Samples.CS.ZF +{ + + /// + /// A command line archiver using the class from the SharpZipLib compression library + /// + public class ZipFileArchiver + { + #region Enumerations + + /// + /// Options for handling overwriting of files. + /// + enum Overwrite + { + Prompt, + Never, + Always + } + + /// + /// Operations that can be performed + /// + enum Operation + { + Create, // add files to new archive + Extract, // extract files from existing archive + List, // show contents of existing archive + Delete, // Delete from archive + Add, // Add to archive. + Test, // Test the archive for validity. + } + #endregion + + #region Constructors + + /// + /// Initializes a new instance of the class. + /// + public ZipFileArchiver() + { + // Do nothing. + } + + #endregion + + #region Argument Parsing + + /// + /// Parse command line arguments. + /// This is fairly flexible without using any custom classes. Arguments and options can appear + /// in any order and are case insensitive. Arguments for options are signalled with an '=' + /// as in -demo=argument, sometimes the '=' can be omitted as well secretly. + /// Grouping of single character options is supported. + /// + /// + /// true if arguments are valid such that processing should continue + /// + bool SetArgs(string[] args) + { + bool result = true; + int argIndex = 0; + + while (argIndex < args.Length) + { + if (args[argIndex][0] == '-' || args[argIndex][0] == '/') + { + + string option = args[argIndex].Substring(1).ToLower(); + string optArg = ""; + + int parameterIndex = option.IndexOf('='); + + if (parameterIndex >= 0) + { + if (parameterIndex < option.Length - 1) + { + optArg = option.Substring(parameterIndex + 1); + } + option = option.Substring(0, parameterIndex); + } + +#if OPTIONTEST + Console.WriteLine("args index [{0}] option [{1}] argument [{2}]", argIndex, option, optArg); +#endif + if (option.Length == 0) + { + Console.Error.WriteLine("Invalid argument '{0}'", args[argIndex]); + result = false; + } + else + { + int optionIndex = 0; + while (optionIndex < option.Length) + { +#if OPTIONTEST + Console.WriteLine("optionIndex {0}", optionIndex); +#endif + switch(option[optionIndex]) + { + case '-': // long option + optionIndex = option.Length; + + switch (option) + { + case "-add": + operation_ = Operation.Add; + break; + + case "-create": + operation_ = Operation.Create; + break; + + case "-list": + operation_ = Operation.List; + break; + + case "-extract": + operation_ = Operation.Extract; + if (optArg.Length > 0) + { + targetOutputDirectory_ = optArg; + } + break; + + case "-delete": + operation_ = Operation.Delete; + break; + + case "-test": + operation_ = Operation.Test; + break; + + case "-dryrun": + dryRun_ = true; + break; + + case "-env": + ShowEnvironment(); + break; + + case "-emptydirs": + addEmptyDirectoryEntries_ = true; + break; + + case "-data": + testData_ = true; + break; + + case "-zip64": + if ( optArg.Length > 0 ) + { + switch ( optArg ) + { + case "on": + useZip64_ = UseZip64.On; + break; + + case "off": + useZip64_ = UseZip64.Off; + break; + + case "auto": + useZip64_ = UseZip64.Dynamic; + break; + } + } + break; + + case "-encoding": + if (optArg.Length > 0) + { + if (IsNumeric(optArg)) + { + try + { + int enc = int.Parse(optArg); + if (Encoding.GetEncoding(enc) != null) + { + #if OPTIONTEST + Console.WriteLine("Encoding set to {0}", enc); + #endif + ZipConstants.DefaultCodePage = enc; + } + else + { + result = false; + Console.Error.WriteLine("Invalid encoding " + args[argIndex]); + } + } + catch (Exception) + { + result = false; + Console.Error.WriteLine("Invalid encoding " + args[argIndex]); + } + } + else + { + try + { + ZipConstants.DefaultCodePage = Encoding.GetEncoding(optArg).CodePage; + } + catch (Exception) + { + result = false; + Console.Error.WriteLine("Invalid encoding " + args[argIndex]); + } + } + } + else + { + result = false; + Console.Error.WriteLine("Missing encoding parameter"); + } + break; + + case "-version": + ShowVersion(); + break; + + case "-help": + ShowHelp(); + break; + + case "-restore-dates": + restoreDateTime_ = true; + break; + + default: + Console.Error.WriteLine("Invalid long argument " + args[argIndex]); + result = false; + break; + } + break; + + case '?': + ShowHelp(); + break; + + case 's': + if (optionIndex != 0) + { + result = false; + Console.Error.WriteLine("-s cannot be in a group"); + } + else + { + if (optArg.Length > 0) + { + password_ = optArg; + } + else if (option.Length > 1) + { + password_ = option.Substring(1); + } + else + { + Console.Error.WriteLine("Missing argument to " + args[argIndex]); + } + } + optionIndex = option.Length; + break; + + case 't': + operation_ = Operation.Test; + break; + + case 'c': + operation_ = Operation.Create; + break; + + case 'o': + optionIndex += 1; + overwriteFiles = optionIndex < option.Length ? (option[optionIndex] == '+') ? Overwrite.Always : Overwrite.Never : Overwrite.Never; + break; + + case 'q': + silent_ = true; + if (overwriteFiles == Overwrite.Prompt) + { + overwriteFiles = Overwrite.Never; + } + break; + + case 'r': + recursive_ = true; + break; + + case 'v': + operation_ = Operation.List; + break; + + case 'x': + if (optionIndex != 0) + { + result = false; + Console.Error.WriteLine("-x cannot be in a group"); + } + else + { + operation_ = Operation.Extract; + if (optArg.Length > 0) + { + targetOutputDirectory_ = optArg; + } + } + optionIndex = option.Length; + break; + + default: + Console.Error.WriteLine("Invalid argument: " + args[argIndex]); + result = false; + break; + } + ++optionIndex; + } + } + } + else + { +#if OPTIONTEST + Console.WriteLine("file spec {0} = '{1}'", argIndex, args[argIndex]); +#endif + fileSpecs_.Add(args[argIndex]); + } + ++argIndex; + } + + if (fileSpecs_.Count > 0) + { + var checkPath = (string)fileSpecs_[0]; + int deviceCheck = checkPath.IndexOf(':'); +#if NET_VER_1 + if (checkPath.IndexOfAny(Path.InvalidPathChars) >= 0 +#else + if (checkPath.IndexOfAny(Path.GetInvalidPathChars()) >= 0 +#endif + || checkPath.IndexOf('*') >= 0 || checkPath.IndexOf('?') >= 0 + || ((deviceCheck >= 0) && (deviceCheck != 1))) + { + Console.WriteLine("There are invalid characters in the specified zip file name"); + result = false; + } + } + return result && (fileSpecs_.Count > 0); + } + + #endregion + + #region Show - Help/Environment/Version + + /// + /// Show encoding/locale information + /// + void ShowEnvironment() + { + seenHelp_ = true; + Console.Out.WriteLine(""); + Console.Out.WriteLine( + "Current encoding is {0}, code page {1}, windows code page {2}", + Console.Out.Encoding.EncodingName, + Console.Out.Encoding.CodePage, + Console.Out.Encoding.WindowsCodePage); + + Console.WriteLine("Default code page is {0}", + Encoding.Default.CodePage); + + Console.WriteLine( "Current culture LCID 0x{0:X}, {1}", CultureInfo.CurrentCulture.LCID, CultureInfo.CurrentCulture.EnglishName); + Console.WriteLine( "Current thread OEM codepage {0}", System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.OEMCodePage); + Console.WriteLine( "Current thread Mac codepage {0}", System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.MacCodePage); + Console.WriteLine( "Current thread Ansi codepage {0}", System.Threading.Thread.CurrentThread.CurrentCulture.TextInfo.ANSICodePage); + Console.WriteLine(".NET version {0}", Environment.Version); + } + + /// + /// Display version information + /// + void ShowVersion() + { + seenHelp_ = true; + Console.Out.WriteLine("ZipFile Archiver v0.3"); + Console.Out.WriteLine("Copyright © 2000-2016 AlphaSierraPapa for the SharpZipLib Team"); + + Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); + + foreach (Assembly assembly in assemblies) + { + if (assembly.GetName().Name == "ICSharpCode.SharpZipLib") + { + Console.Out.WriteLine("#ZipLib v{0} {1}", assembly.GetName().Version, + assembly.GlobalAssemblyCache ? "Running from GAC" : "Running from DLL" + ); + } + } + Console.Out.WriteLine(); + } + + /// + /// Show help on possible options and arguments + /// + void ShowHelp() + { + if (seenHelp_) + { + return; + } + + seenHelp_ = true; + ShowVersion(); + Console.Out.WriteLine("usage zf {options} archive files"); + Console.Out.WriteLine(""); + Console.Out.WriteLine("Options:"); + + Console.Out.WriteLine("--add Add files to archive"); + Console.Out.WriteLine("--create Create new archive"); + Console.Out.WriteLine("--data Test archive data"); + Console.Out.WriteLine("--delete Delete files from archive"); + Console.Out.WriteLine("--encoding=codepage|name Set code page for encoding by name or number"); + Console.Out.WriteLine("--extract{=dir} Extract archive contents to dir(default .)"); + Console.Out.WriteLine("--help Show this help"); + Console.Out.WriteLine("--env Show current environment information" ); + Console.Out.WriteLine("--list List archive contents extended format"); + Console.Out.WriteLine("--test Test archive for validity"); + Console.Out.WriteLine("--version Show version information"); + Console.Out.WriteLine("-r Recurse sub-folders"); + Console.Out.WriteLine("-s=password Set archive password"); + Console.Out.WriteLine("--zip64=[on|off|auto] Zip64 extension handling to use"); + + + /* + Console.Out.WriteLine("--store Store entries (default=deflate)"); + Console.Out.WriteLine("--emptydirs Create entries for empty directories"); + Console.Out.WriteLine("--restore-dates Restore dates on extraction"); + Console.Out.WriteLine("-o+ Overwrite files without prompting"); + Console.Out.WriteLine("-o- Never overwrite files"); + Console.Out.WriteLine("-q Quiet mode"); + */ + Console.Out.WriteLine(""); + } + + #endregion + + #region Archive Listing + + void ListArchiveContents(ZipFile zipFile, FileInfo fileInfo) + { + const string headerTitles = "Name Length Ratio Size Date & time CRC-32 Attr"; + const string headerUnderline = "------------ ---------- ----- ---------- ------------------- -------- ------"; + + int entryCount = 0; + long totalCompressedSize = 0; + long totalSize = 0; + + foreach (ZipEntry theEntry in zipFile) + { + + if ( theEntry.IsDirectory ) + { + Console.Out.WriteLine("Directory {0}", theEntry.Name); + } + else if ( !theEntry.IsFile ) + { + Console.Out.WriteLine("Non file entry {0}", theEntry.Name); + continue; + } + else + { + if (entryCount == 0) + { + Console.Out.WriteLine(headerTitles); + Console.Out.WriteLine(headerUnderline); + } + + ++entryCount; + int ratio = GetCompressionRatio(theEntry.CompressedSize, theEntry.Size); + totalSize += theEntry.Size; + totalCompressedSize += theEntry.CompressedSize; + + char cryptoDisplay = ( theEntry.IsCrypted ) ? '*' : ' '; + + if (theEntry.Name.Length > 12) + { + Console.Out.WriteLine(theEntry.Name); + Console.Out.WriteLine( + "{0,-12}{7} {1,10:0} {2,3}% {3,10:0} {4,10:d} {4:hh:mm:ss} {5,8:x} {6,4}", + "", theEntry.Size, ratio, theEntry.CompressedSize, theEntry.DateTime, theEntry.Crc, + InterpretExternalAttributes(theEntry.HostSystem, theEntry.ExternalFileAttributes), + cryptoDisplay); + } + else + { + Console.Out.WriteLine( + "{0,-12}{7} {1,10:0} {2,3}% {3,10:0} {4,10:d} {4:hh:mm:ss} {5,8:x} {6,4}", + theEntry.Name, theEntry.Size, ratio, theEntry.CompressedSize, theEntry.DateTime, theEntry.Crc, + InterpretExternalAttributes(theEntry.HostSystem, theEntry.ExternalFileAttributes), + cryptoDisplay); + } + } + } + + if (entryCount == 0) + { + Console.Out.WriteLine("Archive is empty!"); + } + else + { + Console.Out.WriteLine(headerUnderline); + Console.Out.WriteLine( + "{0,-12} {1,10:0} {2,3}% {3,10:0} {4,10:d} {4:hh:mm:ss}", + entryCount + " entries", totalSize, GetCompressionRatio(totalCompressedSize, totalSize), fileInfo.Length, fileInfo.LastWriteTime); + } + } + + /// + /// List zip file contents using ZipFile class + /// + /// File to list contents of + void ListArchiveContents(string fileName) + { + try + { + var fileInfo = new FileInfo(fileName); + + if (!fileInfo.Exists) + { + Console.Error.WriteLine("No such file exists {0}", fileName); + } + else + { + + Console.Out.WriteLine(fileName); + + try + { + using (ZipFile zipFile = new ZipFile(fileName)) + { + ListArchiveContents(zipFile, fileInfo); + } + } + catch(Exception ex) + { + Console.Out.WriteLine("Problem reading archive - '{0}'", ex.Message); + } + } + } + catch(Exception exception) + { + Console.Error.WriteLine("Exception during list operation: {0}", exception.Message); + } + } + + /// + /// Execute List operation + /// Currently only Zip files are supported + /// + /// Files to list + void List(ArrayList fileSpecs) + { + foreach (string spec in fileSpecs) + { + string pathName = Path.GetDirectoryName(spec); + + if ( string.IsNullOrEmpty(pathName)) + { + pathName = @".\"; + } + + string[] names = Directory.GetFiles(pathName, Path.GetFileName(spec)); + + if (names.Length == 0) + { + Console.Error.WriteLine("No files found matching {0}", spec); + } + else + { + foreach (string file in names) + { + ListArchiveContents(file); + } + Console.Out.WriteLine(""); + } + } + } + + #endregion + + #region Creation + + /// + /// Create archives based on specifications passed and internal state + /// + void Create(ArrayList fileSpecs) + { + var zipFileName = fileSpecs[0] as string; + if (Path.GetExtension(zipFileName).Length == 0) + { + zipFileName = Path.ChangeExtension(zipFileName, ".zip"); + } + + fileSpecs.RemoveAt(0); + + if ( (overwriteFiles == Overwrite.Never) && File.Exists(zipFileName)) + { + Console.Error.WriteLine("File {0} already exists", zipFileName); + return; + } + + try + { + using (ZipFile zf = ZipFile.Create(zipFileName) ) + { + zf.Password = password_; + zf.UseZip64 = useZip64_; + + zf.BeginUpdate(); + + activeZipFile_ = zf; + + foreach (string spec in fileSpecs) + { + // This can fail with wildcards in spec... + string path = Path.GetDirectoryName(Path.GetFullPath(spec)); + string fileSpec = Path.GetFileName(spec); + + zf.NameTransform = new ZipNameTransform(path); + + var scanner = new FileSystemScanner(WildcardToRegex(fileSpec)); + scanner.ProcessFile = new ProcessFileHandler(ProcessFile); + scanner.ProcessDirectory += new EventHandler(ProcessDirectory); + scanner.Scan(path, recursive_); + } + + zf.CommitUpdate(); + } + } + catch (Exception ex) + { + Console.WriteLine("Problem creating archive - '{0}'", ex.Message); + } + } + + #endregion + + #region Extraction + + /// + /// Extract a file storing its contents. + /// + /// The input stream to source file contents from. + /// The representing the stored file details + /// The directory to store the output. + /// True if operation is successful; false otherwise. + bool ExtractFile(Stream inputStream, ZipEntry theEntry, string targetDir) + { + if (inputStream == null) + { + throw new ArgumentNullException("inputStream"); + } + + if (theEntry == null) + { + throw new ArgumentNullException("theEntry"); + } + + if (!theEntry.IsFile) + { + throw new ArgumentException("Not a file", "theEntry"); + } + + if (targetDir == null) + { + throw new ArgumentNullException("targetDir"); + } + + // try and sort out the correct place to save this entry + + bool result = true; + bool process = theEntry.Name.Length > 0; + + if (!process) + { + // A fuller program would generate or prompt for a filename here... + if (!silent_) + { + Console.WriteLine("Ignoring empty name"); + } + + return false; + } + + string entryFileName; + + if (Path.IsPathRooted(theEntry.Name)) + { + string workName = Path.GetPathRoot(theEntry.Name); + workName = theEntry.Name.Substring(workName.Length); + entryFileName = Path.Combine(Path.GetDirectoryName(workName), Path.GetFileName(theEntry.Name)); + } + else + { + entryFileName = theEntry.Name; + } + + string targetName = Path.Combine(targetDir, entryFileName); + string fullDirectoryName = Path.GetDirectoryName(Path.GetFullPath(targetName)); + +#if TEST + Console.WriteLine("Decompress targetfile name " + entryFileName); + Console.WriteLine("Decompress targetpath " + fullDirectoryName); +#endif + + // Could be an option or parameter to allow failure or try creation + if (process) + { + if (Directory.Exists(fullDirectoryName) == false) + { + try + { + Directory.CreateDirectory(fullDirectoryName); + } + catch (Exception ex) + { + if (!silent_) + { + Console.Write("Exception creating directory '{0}' - {1}", fullDirectoryName, ex.Message); + } + + result = false; + process = false; + } + } + else if (overwriteFiles == Overwrite.Prompt) + { + if (File.Exists(targetName)) + { + Console.Write("File " + targetName + " already exists. Overwrite? "); + + string readValue; + try + { + readValue = Console.ReadLine(); + } + catch + { + readValue = null; + } + + if ((readValue == null) || (readValue.ToLower() != "y")) + { + process = false; + } + } + } + } + + if (process) + { + if ( !silent_ ) + { + Console.Write("{0}", targetName); + } + + if (!dryRun_) + { + using (FileStream outputStream = File.Create(targetName)) + { + StreamUtils.Copy(inputStream, outputStream, GetBuffer()); + } + + if (restoreDateTime_) + { + File.SetLastWriteTime(targetName, theEntry.DateTime); + } + } + + if ( !silent_ ) + { + Console.WriteLine(" OK"); + } + } + return result; + } + + /// + /// Decompress a file + /// + /// File to decompress + /// Directory to create output in + /// true iff all has been done successfully + bool DecompressArchive(string fileName, string targetDir) + { + bool result = true; + + try + { + using (ZipFile zf = new ZipFile(fileName)) + { + zf.Password = password_; + foreach ( ZipEntry entry in zf ) + { + if (entry.IsFile) + { + if (!ExtractFile(zf.GetInputStream(entry), entry, targetDir)) + { + if (!silent_) + { + Console.WriteLine("Extraction failed {0}", entry.Name); + } + } + } + else + { + if (!silent_) + { + Console.WriteLine("Skipping {0}", entry.Name); + } + } + } + + if ( !silent_ ) + { + Console.WriteLine("Done"); + } + } + } + catch(Exception ex) + { + Console.WriteLine("Exception decompressing - '{0}'", ex); + result = false; + } + return result; + } + + /// + /// Extract archives based on user input + /// Allows simple wildcards to specify multiple archives + /// + void Extract(ArrayList fileSpecs) + { + if ( string.IsNullOrEmpty(targetOutputDirectory_)) + { + targetOutputDirectory_ = @".\"; + } + + foreach(string spec in fileSpecs) + { + + string [] names; + if ( (spec.IndexOf('*') >= 0) || (spec.IndexOf('?') >= 0) ) + { + string pathName = Path.GetDirectoryName(spec); + + if ( string.IsNullOrEmpty(pathName)) + { + pathName = @".\"; + } + names = Directory.GetFiles(pathName, Path.GetFileName(spec)); + } + else + { + names = new string[] { spec }; + } + + foreach (string fileName in names) + { + if (File.Exists(fileName) == false) + { + Console.Error.WriteLine("No such file exists {0}", fileName); + } + else + { + DecompressArchive(fileName, targetOutputDirectory_); + } + } + } + } + + #endregion + + #region Testing + + /// + /// Handler for test result callbacks. + /// + /// The current . + /// The message applicable for this result. + void TestResultHandler(TestStatus status, string message) + { + switch ( status.Operation ) + { + case TestOperation.Initialising: + Console.WriteLine("Testing"); + break; + + case TestOperation.Complete: + Console.WriteLine("Testing complete"); + break; + + case TestOperation.EntryHeader: + // Not an error if message is null. + if ( message == null ) + { + Console.Write("{0} - ", status.Entry.Name); + } + else + { + Console.WriteLine(message); + } + break; + + case TestOperation.EntryData: + if ( message != null ) + { + Console.WriteLine(message); + } + break; + + case TestOperation.EntryComplete: + if ( status.EntryValid ) + { + Console.WriteLine("OK"); + } + break; + + case TestOperation.MiscellaneousTests: + if ( message != null ) + { + Console.WriteLine(message); + } + break; + } + } + + /// + /// Test an archive to see if its valid. + /// + /// The files to test. + void Test(ArrayList fileSpecs) + { + var zipFileName = fileSpecs[0] as string; + if (Path.GetExtension(zipFileName).Length == 0) + { + zipFileName = Path.ChangeExtension(zipFileName, ".zip"); + } + + try + { + using (ZipFile zipFile = new ZipFile(zipFileName)) + { + zipFile.Password = password_; + if ( zipFile.TestArchive(testData_, TestStrategy.FindAllErrors, + new ZipTestResultHandler(TestResultHandler)) ) + { + Console.Out.WriteLine("Archive test passed"); + } + else + { + Console.Out.WriteLine("Archive test failure"); + } + } + } + catch(Exception ex) + { + Console.Out.WriteLine("Error list files - '{0}'", ex.Message); + } + } + + #endregion + + #region Deleting + + /// + /// Delete entries from an archive + /// + /// The file specs to operate on. + void Delete(ArrayList fileSpecs) + { + var zipFileName = fileSpecs[0] as string; + if (Path.GetExtension(zipFileName).Length == 0) + { + zipFileName = Path.ChangeExtension(zipFileName, ".zip"); + } + + try + { + using (ZipFile zipFile = new ZipFile(zipFileName)) + { + zipFile.BeginUpdate(); + for ( int i = 1; i < fileSpecs.Count; ++i ) + { + zipFile.Delete((string)fileSpecs[i]); + } + zipFile.CommitUpdate(); + } + } + catch(Exception ex) + { + Console.WriteLine("Problem deleting files - '{0}'", ex.Message); + } + } + + #endregion + + #region Adding + + /// + /// Callback for adding a new file. + /// + /// The scanner calling this delegate. + /// The event arguments. + void ProcessFile(object sender, ScanEventArgs args) + { + if ( !silent_ ) + { + Console.WriteLine(args.Name); + } + activeZipFile_.Add(args.Name); + } + + /// + /// Callback for adding a new directory. + /// + /// The scanner calling this delegate. + /// The event arguments. + /// Directories are only added if they are empty and + /// the user has specified that empty directories are to be added. + void ProcessDirectory(object sender, DirectoryEventArgs args) + { + if ( !args.HasMatchingFiles && addEmptyDirectoryEntries_ ) + { + activeZipFile_.AddDirectory(args.Name); + } + } + + /// + /// Add files to an archive + /// + /// The specification for files to add. + void Add(ArrayList fileSpecs) + { + var zipFileName = fileSpecs[0] as string; + if (Path.GetExtension(zipFileName).Length == 0) + { + zipFileName = Path.ChangeExtension(zipFileName, ".zip"); + } + + fileSpecs.RemoveAt(0); + + ZipFile zipFile; + + try + { + if ( File.Exists(zipFileName) ) + { + zipFile = new ZipFile(zipFileName); + } + else + { + zipFile = ZipFile.Create(zipFileName); + } + + using (zipFile) + { + zipFile.Password = password_; + zipFile.UseZip64 = useZip64_; + + zipFile.BeginUpdate(); + + activeZipFile_ = zipFile; + + foreach (string spec in fileSpecs) + { + string path = Path.GetDirectoryName(Path.GetFullPath(spec)); + string fileSpec = Path.GetFileName(spec); + + zipFile.NameTransform = new ZipNameTransform(path); + + var scanner = new FileSystemScanner(WildcardToRegex(fileSpec)); + scanner.ProcessFile = new ProcessFileHandler(ProcessFile); + scanner.ProcessDirectory += new EventHandler(ProcessDirectory); + scanner.Scan(path, recursive_); + } + zipFile.CommitUpdate(); + } + } + catch(Exception ex) + { + Console.WriteLine("Problem adding to archive - '{0}'", ex.Message); + } + } + + #endregion + + #region Class Execute Command + + /// + /// Parse command line arguments and 'execute' them. + /// + void Execute(string[] args) + { + if (SetArgs(args)) + { + if (fileSpecs_.Count == 0) + { + if (!silent_) + { + Console.Out.WriteLine("Nothing to do"); + } + } + else + { + switch (operation_) + { + case Operation.List: + List(fileSpecs_); + break; + + case Operation.Create: + Create(fileSpecs_); + break; + + case Operation.Extract: + Extract(fileSpecs_); + break; + + case Operation.Delete: + Delete(fileSpecs_); + break; + + case Operation.Add: + Add(fileSpecs_); + break; + + case Operation.Test: + Test(fileSpecs_); + break; + } + } + } + else + { + if ( !silent_ ) + { + ShowHelp(); + } + } + } + + #endregion + + #region Support Routines + + byte[] GetBuffer() + { + if ( buffer_ == null ) + { + buffer_ = new byte[bufferSize_]; + } + + return buffer_; + } + #endregion + + #region Static support routines + + /// + /// Calculate compression ratio as a percentage + /// This wont allow for expansion (ratio > 100) as the resulting strings can get huge easily + /// + static int GetCompressionRatio(long packedSize, long unpackedSize) + { + int result = 0; + if ( (unpackedSize > 0) && (unpackedSize >= packedSize) ) + { + result = (int) Math.Round((1.0 - ((double)packedSize / (double)unpackedSize)) * 100.0); + } + return result; + } + + /// + /// Interpret attributes in conjunction with operatingSystem + /// + /// The operating system. + /// The external attributes. + /// A string representation of the attributres passed. + static string InterpretExternalAttributes(int operatingSystem, int attributes) + { + string result = string.Empty; + if ((operatingSystem == 0) || (operatingSystem == 10)) + { + if ((attributes & 0x10) != 0) + result = result + "D"; + else + result = result + "-"; + + if ((attributes & 0x08) != 0) + result = result + "V"; + else + result = result + "-"; + + if ((attributes & 0x01) != 0) + result = result + "r"; + else + result = result + "-"; + + if ((attributes & 0x20) != 0) + result = result + "a"; + else + result = result + "-"; + + if ((attributes & 0x04) != 0) + result = result + "s"; + else + result = result + "-"; + + if ((attributes & 0x02) != 0) + result = result + "h"; + else + result = result + "-"; + + // Device + if ((attributes & 0x4) != 0) + result = result + "d"; + else + result = result + "-"; + + // OS is NTFS + if ( operatingSystem == 10 ) + { + // Encrypted + if ( (attributes & 0x4000) != 0 ) + { + result += "E"; + } + else + { + result += "-"; + } + + // Not content indexed + if ( (attributes & 0x2000) != 0 ) + { + result += "n"; + } + else + { + result += "-"; + } + + // Offline + if ( (attributes & 0x1000) != 0 ) + { + result += "O"; + } + else + { + result += "-"; + } + + // Compressed + if ( (attributes & 0x0800) != 0 ) + { + result += "C"; + } + else + { + result += "-"; + } + + // Reparse point + if ( (attributes & 0x0400) != 0 ) + { + result += "R"; + } + else + { + result += "-"; + } + + // Sparse + if ( (attributes & 0x0200) != 0 ) + { + result += "S"; + } + else + { + result += "-"; + } + + // Temporary + if ( (attributes & 0x0100) != 0 ) + { + result += "T"; + } + else + { + result += "-"; + } + } + } + return result; + } + + /// + /// Determine if string is numeric [0-9]+ + /// + /// string to test + /// true iff rhs is numeric + static bool IsNumeric(string rhs) + { + bool result; + if (!string.IsNullOrEmpty(rhs)) + { + result = true; + for (int i = 0; i < rhs.Length; ++i) + { + if (!char.IsDigit(rhs[i])) + { + result = false; + break; + } + } + } + else + { + result = false; + } + return result; + } + + /// + /// Make external attributes suitable for a + /// + /// The to convert + /// Returns External Attributes for Zip use + static int MakeExternalAttributes(FileInfo info) + { + return (int)info.Attributes; + } + + /// + /// Convert a wildcard expression to a regular expression + /// + /// The wildcard expression to convert. + /// A regular expression representing the converted wildcard expression. + static string WildcardToRegex(string wildcard) + { + int dotPos = wildcard.IndexOf('.'); + bool dotted = (dotPos >= 0) && (dotPos < wildcard.Length - 1); + string converted = wildcard.Replace(".", @"\."); + converted = converted.Replace("?", "."); + converted = converted.Replace("*", ".*"); + converted = converted.Replace("(", @"\("); + converted = converted.Replace(")", @"\)"); + if ( dotted ) + { + converted += "$"; + } + + return converted; + } + + #endregion + + #region Main + + /// + /// Entry point for program, creates archiver and runs it + /// + /// + /// Command line argument to process + /// + public static void Main(string[] args) + { + var zf = new ZipFileArchiver(); + zf.Execute(args); + } + + #endregion + + #region Instance Fields + + /// + /// Has user already seen help output? + /// + bool seenHelp_; + + /// + /// File specifications possibly with wildcards from command line + /// + ArrayList fileSpecs_ = new ArrayList(); + + /// + /// Create entries for directories with no files + /// + bool addEmptyDirectoryEntries_; + + /// + /// Apply operations recursively + /// + bool recursive_; + + /// + /// Operate silently + /// + bool silent_; + + /// + /// Restore file date and time to that stored in zip file on extraction + /// + bool restoreDateTime_; + + /// + /// Overwrite files handling + /// + Overwrite overwriteFiles = Overwrite.Prompt; + + /// + /// Optional password for archive + /// + string password_; + + /// + /// Where things will go when decompressed. + /// + string targetOutputDirectory_; + + /// + /// What to do based on parsed command line arguments + /// + Operation operation_ = Operation.List; + + /// + /// Flag whose value is true if data should be tested; false if it should not. + /// + bool testData_; + + /// + /// Dont extract or compress just display what would be done - testing + /// + private bool dryRun_; + + /// + /// The currently active . + /// + /// Used for callbacks/delegates + ZipFile activeZipFile_; + + /// + /// Buffer used during some operations + /// + byte[] buffer_; + + /// + /// The size of buffer to provide. + /// + int bufferSize_ = 4096; + + /// + /// The Zip64 extension use to apply. + /// + UseZip64 useZip64_ = UseZip64.Off; + #endregion + } +} diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/zf/zf.csproj b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/zf/zf.csproj new file mode 100644 index 0000000000..13524660c3 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/cs/zf/zf.csproj @@ -0,0 +1,89 @@ + + + + Debug + AnyCPU + 2.0 + {90E83588-261C-45A3-964F-4B707357D437} + ICSharpCode.SharpZipLib.Samples.CS.ZF + zf + Exe + 4 + False + False + OnSuccessfulBuild + False + Auto + 4194304 + AnyCPU + 4096 + v4.6.1 + + + + + 2.0 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + true + False + False + True + bin\Debug\ + false + Full + false + + + False + True + False + False + bin\Release\ + False + false + + + + + + + Properties\GlobalAssemblyInfo.cs + + + + + + + + + + False + .NET Framework 3.5 SP1 + true + + + + + {0e7413ff-eb9e-4714-acf2-be3a6a7b2ffd} + ICSharpCode.SharpZipLib + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/CreateZipFile.MainForm.resources b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/CreateZipFile.MainForm.resources new file mode 100644 index 0000000000..f694350dbf Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/CreateZipFile.MainForm.resources differ diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/CreateZipFile.vbproj b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/CreateZipFile.vbproj new file mode 100644 index 0000000000..bb94d39c67 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/CreateZipFile.vbproj @@ -0,0 +1,105 @@ + + + + Debug + AnyCPU + 2.0 + {1B2FD768-E530-45B7-B14F-AE5D07B24485} + ICSharpCode.SharpZipLib.Samples + CreateZipFile + WinExe + + + + ICSharpCode.SharpZipLib.Samples.CreateZipFile.CreateZipFileForm + + + OnSuccessfulBuild + + + v4.6.1 + + + + + 2.0 + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + True + True + + True + + bin\Debug\ + False + 42353,42354,42355 + false + AllRules.ruleset + + + False + True + + False + + bin\Release\ + False + 42353,42354,42355 + false + + + + + + + + + + SampleAssemblyInfo.vb + + + Form + + + + + Designer + CreateZipFileForm.vb + + + + + + + + + + False + .NET Framework 3.5 SP1 + true + + + + + {0e7413ff-eb9e-4714-acf2-be3a6a7b2ffd} + ICSharpCode.SharpZipLib + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/CreateZipFileForm.resx b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/CreateZipFileForm.resx new file mode 100644 index 0000000000..7677db7965 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/CreateZipFileForm.resx @@ -0,0 +1,123 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/CreateZipFileForm.vb b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/CreateZipFileForm.vb new file mode 100644 index 0000000000..9df25d4772 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/CreateZipFileForm.vb @@ -0,0 +1,184 @@ +Imports System +Imports System.IO +Imports System.Drawing +Imports System.Windows.Forms + +Imports ICSharpCode.SharpZipLib.Core +Imports ICSharpCode.SharpZipLib.Zip + +Namespace CreateZipFile + + Public Class CreateZipFileForm + Inherits System.Windows.Forms.Form + Private label2 As System.Windows.Forms.Label + Private label1 As System.Windows.Forms.Label + Private txtSourceDir As System.Windows.Forms.TextBox + Private folderBrowserDialog As System.Windows.Forms.FolderBrowserDialog + Friend WithEvents btnBrowseForFolder As System.Windows.Forms.Button + Friend WithEvents btnZipIt As System.Windows.Forms.Button + Private txtZipFileName As System.Windows.Forms.TextBox + + Public Shared Sub Main() + Dim fMainForm As New CreateZipFileForm + fMainForm.ShowDialog() + End Sub + + Public Sub New() + MyBase.New() + ' + ' The Me.InitializeComponent call is required for Windows Forms designer support. + ' + Me.InitializeComponent() + End Sub + +#Region " Windows Forms Designer generated code " + ' This method is required for Windows Forms designer support. + ' Do not change the method contents inside the source code editor. The Forms designer might + ' not be able to load this method if it was changed manually. + Private Sub InitializeComponent() + Me.txtZipFileName = New System.Windows.Forms.TextBox + Me.folderBrowserDialog = New System.Windows.Forms.FolderBrowserDialog + Me.txtSourceDir = New System.Windows.Forms.TextBox + Me.label1 = New System.Windows.Forms.Label + Me.label2 = New System.Windows.Forms.Label + Me.btnBrowseForFolder = New System.Windows.Forms.Button + Me.btnZipIt = New System.Windows.Forms.Button + Me.SuspendLayout() + ' + 'txtZipFileName + ' + Me.txtZipFileName.Location = New System.Drawing.Point(16, 37) + Me.txtZipFileName.Name = "txtZipFileName" + Me.txtZipFileName.Size = New System.Drawing.Size(100, 20) + Me.txtZipFileName.TabIndex = 2 + Me.txtZipFileName.Text = "Demo.Zip" + ' + 'txtSourceDir + ' + Me.txtSourceDir.Location = New System.Drawing.Point(144, 37) + Me.txtSourceDir.Name = "txtSourceDir" + Me.txtSourceDir.Size = New System.Drawing.Size(256, 20) + Me.txtSourceDir.TabIndex = 3 + ' + 'label1 + ' + Me.label1.Location = New System.Drawing.Point(144, 7) + Me.label1.Name = "label1" + Me.label1.Size = New System.Drawing.Size(224, 22) + Me.label1.TabIndex = 1 + Me.label1.Text = "Source directory:" + Me.label1.TextAlign = System.Drawing.ContentAlignment.BottomLeft + ' + 'label2 + ' + Me.label2.Location = New System.Drawing.Point(16, 7) + Me.label2.Name = "label2" + Me.label2.Size = New System.Drawing.Size(100, 22) + Me.label2.TabIndex = 0 + Me.label2.Text = "Zip File Name:" + Me.label2.TextAlign = System.Drawing.ContentAlignment.BottomLeft + ' + 'btnBrowseForFolder + ' + Me.btnBrowseForFolder.Location = New System.Drawing.Point(406, 37) + Me.btnBrowseForFolder.Name = "btnBrowseForFolder" + Me.btnBrowseForFolder.Size = New System.Drawing.Size(32, 21) + Me.btnBrowseForFolder.TabIndex = 6 + Me.btnBrowseForFolder.Text = "..." + Me.btnBrowseForFolder.UseVisualStyleBackColor = True + ' + 'btnZipIt + ' + Me.btnZipIt.Location = New System.Drawing.Point(455, 37) + Me.btnZipIt.Name = "btnZipIt" + Me.btnZipIt.Size = New System.Drawing.Size(75, 20) + Me.btnZipIt.TabIndex = 7 + Me.btnZipIt.Text = "Zip It" + Me.btnZipIt.UseVisualStyleBackColor = True + ' + 'MainForm + ' + Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) + Me.ClientSize = New System.Drawing.Size(552, 86) + Me.Controls.Add(Me.btnZipIt) + Me.Controls.Add(Me.btnBrowseForFolder) + Me.Controls.Add(Me.label2) + Me.Controls.Add(Me.label1) + Me.Controls.Add(Me.txtSourceDir) + Me.Controls.Add(Me.txtZipFileName) + Me.Name = "MainForm" + Me.Text = "Create Zip File Sample" + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub +#End Region + + Private Sub BtnBrowseForFolderClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowseForFolder.Click + If folderBrowserDialog.ShowDialog() = Windows.Forms.DialogResult.OK Then + txtSourceDir.Text = folderBrowserDialog.SelectedPath + End If + End Sub + + Private Sub BtnZipItClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnZipIt.Click + Dim sourceDir As String = txtSourceDir.Text.Trim() + + ' Simple sanity checks + If sourceDir.Length = 0 Then + MessageBox.Show("Please specify a directory") + Return + Else + If Not Directory.Exists(sourceDir) Then + MessageBox.Show(sourceDir, "Directory not found") + Return + End If + End If + + Dim targetName As String = txtZipFileName.Text.Trim() + If targetName.Length = 0 Then + MessageBox.Show("No name specified", "Zip file name error") + Return + End If + + Dim astrFileNames() As String = Directory.GetFiles(sourceDir) + Dim strmZipOutputStream As ZipOutputStream + + strmZipOutputStream = New ZipOutputStream(File.Create(targetName)) + + Try + + REM Compression Level: 0-9 + REM 0: no(Compression) + REM 9: maximum compression + strmZipOutputStream.SetLevel(9) + + Dim strFile As String + Dim abyBuffer(4096) As Byte + + For Each strFile In astrFileNames + Dim strmFile As FileStream = File.OpenRead(strFile) + Try + + Dim objZipEntry As ZipEntry = New ZipEntry(strFile) + + objZipEntry.DateTime = DateTime.Now + objZipEntry.Size = strmFile.Length + + strmZipOutputStream.PutNextEntry(objZipEntry) + StreamUtils.Copy(strmFile, strmZipOutputStream, abyBuffer) + Finally + strmFile.Close() + End Try + Next + + strmZipOutputStream.Finish() + + Finally + strmZipOutputStream.Close() + End Try + + MessageBox.Show("Operation complete") + End Sub + + End Class +End Namespace diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/MainForm.resources b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/MainForm.resources new file mode 100644 index 0000000000..f694350dbf Binary files /dev/null and b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/MainForm.resources differ diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/My Project/AssemblyInfo.vb b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/My Project/AssemblyInfo.vb new file mode 100644 index 0000000000..af333e614f --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/My Project/AssemblyInfo.vb @@ -0,0 +1,14 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/app.config b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/app.config new file mode 100644 index 0000000000..3ca9114e97 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/CreateZipFile/app.config @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/SampleAssemblyInfo.vb b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/SampleAssemblyInfo.vb new file mode 100644 index 0000000000..0b17604b4e --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/SampleAssemblyInfo.vb @@ -0,0 +1,30 @@ +Imports System.Reflection +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + + + + + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' +' You can specify all the values or you can default the Build and Revision Numbers +' by using the '*' as shown below: +' + + + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/App.config b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/App.config new file mode 100644 index 0000000000..bae5d6d814 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/Application.xaml b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/Application.xaml new file mode 100644 index 0000000000..a4a6ff2acb --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/Application.xaml @@ -0,0 +1,9 @@ + + + + + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/Application.xaml.vb b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/Application.xaml.vb new file mode 100644 index 0000000000..084cbe917e --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/Application.xaml.vb @@ -0,0 +1,6 @@ +Class Application + + ' Application-level events, such as Startup, Exit, and DispatcherUnhandledException + ' can be handled in this file. + +End Class diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/AssemblyInfo.vb b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/AssemblyInfo.vb new file mode 100644 index 0000000000..798a0f93ae --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/AssemblyInfo.vb @@ -0,0 +1,37 @@ +Imports System.Reflection +Imports System.Resources +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + +' Review the values of the assembly attributes + + + + +'In order to begin building localizable applications, set +'CultureYouAreCodingWith in your .vbproj file +'inside a . For example, if you are using US english +'in your source files, set the to "en-US". Then uncomment the +'NeutralResourceLanguage attribute below. Update the "en-US" in the line +'below to match the UICulture setting in the project file. + + + + +'The ThemeInfo attribute describes where any theme specific and generic resource dictionaries can be found. +'1st parameter: where theme specific resource dictionaries are located +'(used if a resource is not found in the page, +' or application resource dictionaries) + +'2nd parameter: where the generic resource dictionary is located +'(used if a resource is not found in the page, +'app, and any theme specific resource dictionaries) + + + + +'The following GUID is for the ID of the typelib if this project is exposed to COM + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/MyExtensions/MyWpfExtension.vb b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/MyExtensions/MyWpfExtension.vb new file mode 100644 index 0000000000..22f84b7da5 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/MyExtensions/MyWpfExtension.vb @@ -0,0 +1,121 @@ +#If _MyType <> "Empty" Then + +Namespace My + ''' + ''' Module used to define the properties that are available in the My Namespace for WPF + ''' + ''' + _ + Module MyWpfExtension + Private s_Computer As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Devices.Computer) + Private s_User As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.ApplicationServices.User) + Private s_Windows As New ThreadSafeObjectProvider(Of MyWindows) + Private s_Log As New ThreadSafeObjectProvider(Of Global.Microsoft.VisualBasic.Logging.Log) + ''' + ''' Returns the application object for the running application + ''' + _ + Friend ReadOnly Property Application() As Application + Get + Return CType(Global.System.Windows.Application.Current, Application) + End Get + End Property + ''' + ''' Returns information about the host computer. + ''' + _ + Friend ReadOnly Property Computer() As Global.Microsoft.VisualBasic.Devices.Computer + Get + Return s_Computer.GetInstance() + End Get + End Property + ''' + ''' Returns information for the current user. If you wish to run the application with the current + ''' Windows user credentials, call My.User.InitializeWithWindowsUser(). + ''' + _ + Friend ReadOnly Property User() As Global.Microsoft.VisualBasic.ApplicationServices.User + Get + Return s_User.GetInstance() + End Get + End Property + ''' + ''' Returns the application log. The listeners can be configured by the application's configuration file. + ''' + _ + Friend ReadOnly Property Log() As Global.Microsoft.VisualBasic.Logging.Log + Get + Return s_Log.GetInstance() + End Get + End Property + + ''' + ''' Returns the collection of Windows defined in the project. + ''' + _ + Friend ReadOnly Property Windows() As MyWindows + _ + Get + Return s_Windows.GetInstance() + End Get + End Property + _ + _ + Friend NotInheritable Class MyWindows + _ + Private Shared Function Create__Instance__(Of T As {New, Global.System.Windows.Window})(ByVal Instance As T) As T + If Instance Is Nothing Then + If s_WindowBeingCreated IsNot Nothing Then + If s_WindowBeingCreated.ContainsKey(GetType(T)) = True Then + Throw New Global.System.InvalidOperationException("The window cannot be accessed via My.Windows from the Window constructor.") + End If + Else + s_WindowBeingCreated = New Global.System.Collections.Hashtable() + End If + s_WindowBeingCreated.Add(GetType(T), Nothing) + Return New T() + s_WindowBeingCreated.Remove(GetType(T)) + Else + Return Instance + End If + End Function + _ + _ + Private Sub Dispose__Instance__(Of T As Global.System.Windows.Window)(ByRef instance As T) + instance = Nothing + End Sub + _ + _ + Public Sub New() + MyBase.New() + End Sub + Private Shared s_WindowBeingCreated As Global.System.Collections.Hashtable + Public Overrides Function Equals(ByVal o As Object) As Boolean + Return MyBase.Equals(o) + End Function + Public Overrides Function GetHashCode() As Integer + Return MyBase.GetHashCode + End Function + _ + _ + Friend Overloads Function [GetType]() As Global.System.Type + Return GetType(MyWindows) + End Function + Public Overrides Function ToString() As String + Return MyBase.ToString + End Function + End Class + End Module +End Namespace +Partial Class Application + Inherits Global.System.Windows.Application + _ + _ + Friend ReadOnly Property Info() As Global.Microsoft.VisualBasic.ApplicationServices.AssemblyInfo + _ + Get + Return New Global.Microsoft.VisualBasic.ApplicationServices.AssemblyInfo(Global.System.Reflection.Assembly.GetExecutingAssembly()) + End Get + End Property +End Class +#End If \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/Resources.Designer.vb b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/Resources.Designer.vb new file mode 100644 index 0000000000..5ea8ce9912 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/Resources.Designer.vb @@ -0,0 +1,63 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System + +Namespace My.Resources + + 'This class was auto-generated by the StronglyTypedResourceBuilder + 'class via a tool like ResGen or Visual Studio. + 'To add or remove a member, edit your .ResX file then rerun ResGen + 'with the /str option, or rebuild your VS project. + ''' + ''' A strongly-typed resource class, for looking up localized strings, etc. + ''' + _ + Friend Module Resources + + Private resourceMan As Global.System.Resources.ResourceManager + + Private resourceCulture As Global.System.Globalization.CultureInfo + + ''' + ''' Returns the cached ResourceManager instance used by this class. + ''' + _ + Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager + Get + If Object.ReferenceEquals(resourceMan, Nothing) Then + Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("ICSharpCode.SharpZipLib.Samples.Resources", GetType(Resources).Assembly) + resourceMan = temp + End If + Return resourceMan + End Get + End Property + + ''' + ''' Overrides the current thread's CurrentUICulture property for all + ''' resource lookups using this strongly typed resource class. + ''' + _ + Friend Property Culture() As Global.System.Globalization.CultureInfo + Get + Return resourceCulture + End Get + Set + resourceCulture = value + End Set + End Property + End Module +End Namespace diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/Resources.resx b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/Resources.resx new file mode 100644 index 0000000000..af7dbebbac --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/Settings.Designer.vb b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/Settings.Designer.vb new file mode 100644 index 0000000000..1382e494ca --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/Settings.Designer.vb @@ -0,0 +1,71 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' Runtime Version:4.0.30319.42000 +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + + + + _ +Partial Friend NotInheritable Class MySettings + Inherits Global.System.Configuration.ApplicationSettingsBase + + Private Shared defaultInstance As MySettings = CType(Global.System.Configuration.ApplicationSettingsBase.Synchronized(New MySettings()),MySettings) + +#Region "My.Settings Auto-Save Functionality" +#If _MyType = "WindowsForms" Then + Private Shared addedHandler As Boolean + + Private Shared addedHandlerLockObject As New Object + + _ + Private Shared Sub AutoSaveSettings(ByVal sender As Global.System.Object, ByVal e As Global.System.EventArgs) + If My.Application.SaveMySettingsOnExit Then + My.Settings.Save() + End If + End Sub +#End If +#End Region + + Public Shared ReadOnly Property [Default]() As MySettings + Get + +#If _MyType = "WindowsForms" Then + If Not addedHandler Then + SyncLock addedHandlerLockObject + If Not addedHandler Then + AddHandler My.Application.Shutdown, AddressOf AutoSaveSettings + addedHandler = True + End If + End SyncLock + End If +#End If + Return defaultInstance + End Get + End Property +End Class + +Namespace My + + _ + Friend Module MySettingsProperty + + _ + Friend ReadOnly Property Settings() As Global.ICSharpCode.SharpZipLib.Samples.MySettings + Get + Return Global.ICSharpCode.SharpZipLib.Samples.MySettings.Default + End Get + End Property + End Module +End Namespace diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/Settings.settings b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/Settings.settings new file mode 100644 index 0000000000..40ed9fdbad --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/app.manifest b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/app.manifest new file mode 100644 index 0000000000..a6b46bb755 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/My Project/app.manifest @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/WpfCreateZipFile.vbproj b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/WpfCreateZipFile.vbproj new file mode 100644 index 0000000000..f56b548c93 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/WpfCreateZipFile.vbproj @@ -0,0 +1,177 @@ + + + + + Debug + AnyCPU + {2B42AA12-DD23-4EB8-A1CD-5D0F4B772895} + {60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + WinExe + ICSharpCode.SharpZipLib.Samples + WpfCreateZipFile + v4.6.1 + Custom + true + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + false + true + + + AnyCPU + true + full + true + true + true + bin\Debug\ + WpfCreateZipFile.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 + true + AllRules.ruleset + + + AnyCPU + pdbonly + false + false + true + false + true + bin\Release\ + WpfCreateZipFile.xml + 41999,42016,42017,42018,42019,42020,42021,42022,42032,42036,42314 + true + + + On + + + Binary + + + Off + + + On + + + My Project\app.manifest + + + + + + + + + 4.0 + + + + + + + + MSBuild:Compile + Designer + + + MSBuild:Compile + Designer + + + SampleAssemblyInfo.vb + + + Application.xaml + Code + + + WpfCreateZipFileWindow.xaml + Code + + + + + + + + + + + + + + + + + + + + + + + + Code + + + Microsoft.VisualBasic.WPF.MyExtension + 1.0.0.0 + + + True + True + Resources.resx + + + True + Settings.settings + True + + + VbMyResourcesResXFileCodeGenerator + Resources.Designer.vb + My.Resources + + + + SettingsSingleFileGenerator + Settings.Designer.vb + + + + + + + + + {ce304f35-fabf-4a24-ac48-5710670a82be} + WPFFolderBrowser + + + {0e7413ff-eb9e-4714-acf2-be3a6a7b2ffd} + ICSharpCode.SharpZipLib + + + + + False + .NET Framework 3.5 SP1 + false + + + + \ No newline at end of file diff --git a/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/WpfCreateZipFileWindow.xaml b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/WpfCreateZipFileWindow.xaml new file mode 100644 index 0000000000..df8cc5bd07 --- /dev/null +++ b/external/api-doc-tools/external/SharpZipLib/ICSharpCode.SharpZipLib.Samples/vb/WpfCreateZipFile/WpfCreateZipFileWindow.xaml @@ -0,0 +1,23 @@ + + + + + + + +