You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucenenet.apache.org by ni...@apache.org on 2017/07/11 07:42:28 UTC

[03/22] lucenenet git commit: Added lucene-cli + tests - a wrapper console application so we can run the various utilities and demos in .NET on the command line.

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/9e389540/src/tools/lucene-cli/Resources/Strings.Designer.cs
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/Resources/Strings.Designer.cs b/src/tools/lucene-cli/Resources/Strings.Designer.cs
new file mode 100644
index 0000000..0db885c
--- /dev/null
+++ b/src/tools/lucene-cli/Resources/Strings.Designer.cs
@@ -0,0 +1,962 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     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.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace Lucene.Net.Cli.Resources {
+    using System;
+    using System.Reflection;
+    
+    
+    /// <summary>
+    ///    A strongly-typed resource class, for looking up localized strings, etc.
+    /// </summary>
+    // 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.
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    public class Strings {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        internal Strings() {
+        }
+        
+        /// <summary>
+        ///    Returns the cached ResourceManager instance used by this class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        public static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("lucene-cli.Resources.Strings", typeof(Strings).GetTypeInfo().Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///    Overrides the current thread's CurrentUICulture property for all
+        ///    resource lookups using this strongly typed resource class.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        public static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Utilities to manage specialized analyzers..
+        /// </summary>
+        public static string AnalysisCommandDescription {
+            get {
+                return ResourceManager.GetString("AnalysisCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Compiles a stemmer table for the Egothor stemmer..
+        /// </summary>
+        public static string AnalysisStempelCompileStemsCommandDescription {
+            get {
+                return ResourceManager.GetString("AnalysisStempelCompileStemsCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The path to a file containing a stemmer table. Multiple values are allowed..
+        /// </summary>
+        public static string AnalysisStempelCompileStemsCommandStemmerTableFilesDescription {
+            get {
+                return ResourceManager.GetString("AnalysisStempelCompileStemsCommandStemmerTableFilesDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The encoding to use for the stemmer table files..
+        /// </summary>
+        public static string AnalysisStempelCompileStemsCommandStemmerTableFilesEncodingDescription {
+            get {
+                return ResourceManager.GetString("AnalysisStempelCompileStemsCommandStemmerTableFilesEncodingDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The name of the desired stemming algorithm to use..
+        /// </summary>
+        public static string AnalysisStempelCompileStemsCommandStemmingAlgorithmDescription {
+            get {
+                return ResourceManager.GetString("AnalysisStempelCompileStemsCommandStemmingAlgorithmDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Generates patch commands from an already prepared stemmer table..
+        /// </summary>
+        public static string AnalysisStempelPatchStemsCommandDescription {
+            get {
+                return ResourceManager.GetString("AnalysisStempelPatchStemsCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The path to a file containing a stemmer table. Multiple values are allowed..
+        /// </summary>
+        public static string AnalysisStempelPatchStemsCommandStemmerTableFilesDescription {
+            get {
+                return ResourceManager.GetString("AnalysisStempelPatchStemsCommandStemmerTableFilesDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The encoding to use for the stemmer table files..
+        /// </summary>
+        public static string AnalysisStempelPatchStemsCommandStemmerTableFilesEncodingDescription {
+            get {
+                return ResourceManager.GetString("AnalysisStempelPatchStemsCommandStemmerTableFilesEncodingDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Cross check term vectors..
+        /// </summary>
+        public static string CrossCheckTermVectorsDescription {
+            get {
+                return ResourceManager.GetString("CrossCheckTermVectorsDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Shows example usage of category associations..
+        /// </summary>
+        public static string DemoAssociationsFacetsCommandDescription {
+            get {
+                return ResourceManager.GetString("DemoAssociationsFacetsCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Demos for various Lucene.Net functionality including C# code samples..
+        /// </summary>
+        public static string DemoCommandDescription {
+            get {
+                return ResourceManager.GetString("DemoCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Shows simple usage of dynamic range faceting, using the expressions module to calculate distance..
+        /// </summary>
+        public static string DemoDistanceFacetsCommandDescription {
+            get {
+                return ResourceManager.GetString("DemoDistanceFacetsCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Shows facets aggregation by an expression..
+        /// </summary>
+        public static string DemoExpressionAggregationFacetsCommandDescription {
+            get {
+                return ResourceManager.GetString("DemoExpressionAggregationFacetsCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Index all text files under a directory..
+        /// </summary>
+        public static string DemoIndexFilesCommandDescription {
+            get {
+                return ResourceManager.GetString("DemoIndexFilesCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to This demo can be used to learn how to build a Lucene.Net index. After the index is built, you can run the search-files demo to run queries against it..
+        /// </summary>
+        public static string DemoIndexFilesCommandExtendedHelpText {
+            get {
+                return ResourceManager.GetString("DemoIndexFilesCommandExtendedHelpText", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The source directory containing files to index. This operation is recursive..
+        /// </summary>
+        public static string DemoIndexFilesCommandSourceDirectoryDescription {
+            get {
+                return ResourceManager.GetString("DemoIndexFilesCommandSourceDirectoryDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Adds new documents to an existing index. If not supplied, any existing index in the &lt;INDEX_DIRECTORY&gt; will be overwritten..
+        /// </summary>
+        public static string DemoIndexFilesCommandUpdateDescription {
+            get {
+                return ResourceManager.GetString("DemoIndexFilesCommandUpdateDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Demonstrates indexing categories into different indexed fields..
+        /// </summary>
+        public static string DemoMultiCategoryListsFacetsCommandDescription {
+            get {
+                return ResourceManager.GetString("DemoMultiCategoryListsFacetsCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Shows simple usage of dynamic range faceting..
+        /// </summary>
+        public static string DemoRangeFacetsCommandDescription {
+            get {
+                return ResourceManager.GetString("DemoRangeFacetsCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Simple command-line based search demo. Run index-files demo first..
+        /// </summary>
+        public static string DemoSearchFilesCommandDescription {
+            get {
+                return ResourceManager.GetString("DemoSearchFilesCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Run the index-files demo first to create an index to run this command against. You can either use a file containing many queries, a single query on the command line, or omit both options to run queries interactively..
+        /// </summary>
+        public static string DemoSearchFilesCommandExtendedHelpText {
+            get {
+                return ResourceManager.GetString("DemoSearchFilesCommandExtendedHelpText", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The index field to use in the search..
+        /// </summary>
+        public static string DemoSearchFilesCommandFieldDescription {
+            get {
+                return ResourceManager.GetString("DemoSearchFilesCommandFieldDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Hits per page to display..
+        /// </summary>
+        public static string DemoSearchFilesCommandPageSizeDescription {
+            get {
+                return ResourceManager.GetString("DemoSearchFilesCommandPageSizeDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to A file containing the queries to perform..
+        /// </summary>
+        public static string DemoSearchFilesCommandQueriesFileDescription {
+            get {
+                return ResourceManager.GetString("DemoSearchFilesCommandQueriesFileDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to A query to perform..
+        /// </summary>
+        public static string DemoSearchFilesCommandQueryDescription {
+            get {
+                return ResourceManager.GetString("DemoSearchFilesCommandQueryDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Output raw format..
+        /// </summary>
+        public static string DemoSearchFilesCommandRawDescription {
+            get {
+                return ResourceManager.GetString("DemoSearchFilesCommandRawDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Repeat the search and time as a benchmark..
+        /// </summary>
+        public static string DemoSearchFilesCommandRepeatDescription {
+            get {
+                return ResourceManager.GetString("DemoSearchFilesCommandRepeatDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Shows simple usage of faceted indexing and search..
+        /// </summary>
+        public static string DemoSimpleFacetsCommandDescription {
+            get {
+                return ResourceManager.GetString("DemoSimpleFacetsCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Shows simple usage of faceted indexing and search using SortedSetDocValuesFacetField and SortedSetDocValuesFacetCounts..
+        /// </summary>
+        public static string DemoSimpleSortedSetFacetsCommandDescription {
+            get {
+                return ResourceManager.GetString("DemoSimpleSortedSetFacetsCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The FSDirectory implementation to use. Defaults to the optimal FSDirectory for your OS platform..
+        /// </summary>
+        public static string DirectoryTypeOptionDescription {
+            get {
+                return ResourceManager.GetString("DirectoryTypeOptionDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Source code exported to &apos;{0}&apos;..
+        /// </summary>
+        public static string ExportingSourceCodeCompleteMessage {
+            get {
+                return ResourceManager.GetString("ExportingSourceCodeCompleteMessage", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Exporting source code....
+        /// </summary>
+        public static string ExportingSourceCodeMessage {
+            get {
+                return ResourceManager.GetString("ExportingSourceCodeMessage", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to An error occurred:.
+        /// </summary>
+        public static string GeneralExceptionMessage {
+            get {
+                return ResourceManager.GetString("GeneralExceptionMessage", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Specify --help for a list of available options and commands..
+        /// </summary>
+        public static string HelpCommandsMessage {
+            get {
+                return ResourceManager.GetString("HelpCommandsMessage", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Checks an index for problematic segments..
+        /// </summary>
+        public static string IndexCheckCommandDescription {
+            get {
+                return ResourceManager.GetString("IndexCheckCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Only check the specified segment(s). This can be specified multiple times, to check more than one segment, eg --segment _2 --segment _a..
+        /// </summary>
+        public static string IndexCheckCommandSegmentsDescription {
+            get {
+                return ResourceManager.GetString("IndexCheckCommandSegmentsDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Utilities to analyze or maintain an index..
+        /// </summary>
+        public static string IndexCommandDescription {
+            get {
+                return ResourceManager.GetString("IndexCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Copies segments from one index to another index..
+        /// </summary>
+        public static string IndexCopySegmentsCommandDescription {
+            get {
+                return ResourceManager.GetString("IndexCopySegmentsCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to This tool does file-level copying of segments files. This means it&apos;s unable to split apart a single segment into multiple segments. For example if your index is a single segment, this tool won&apos;t help. Also, it does basic file-level copying (using a simple FileStream) so it will not work with non FSDirectory Directory implementations..
+        /// </summary>
+        public static string IndexCopySegmentsCommandExtendedHelpText {
+            get {
+                return ResourceManager.GetString("IndexCopySegmentsCommandExtendedHelpText", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The directory of the index to copy..
+        /// </summary>
+        public static string IndexCopySegmentsCommandInputDirectoryDescription {
+            get {
+                return ResourceManager.GetString("IndexCopySegmentsCommandInputDirectoryDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The directory of the destination index..
+        /// </summary>
+        public static string IndexCopySegmentsCommandOutputDirectoryDescription {
+            get {
+                return ResourceManager.GetString("IndexCopySegmentsCommandOutputDirectoryDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The segments to copy, separated by a space..
+        /// </summary>
+        public static string IndexCopySegmentsCommandSegmentsDescription {
+            get {
+                return ResourceManager.GetString("IndexCopySegmentsCommandSegmentsDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Deletes segments from an index..
+        /// </summary>
+        public static string IndexDeleteSegmentsCommandDescription {
+            get {
+                return ResourceManager.GetString("IndexDeleteSegmentsCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to You can easily accidentally remove segments from your index so be careful! Always make a backup of your index first..
+        /// </summary>
+        public static string IndexDeleteSegmentsCommandExtendedHelpText {
+            get {
+                return ResourceManager.GetString("IndexDeleteSegmentsCommandExtendedHelpText", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The segments to delete, separated by a space..
+        /// </summary>
+        public static string IndexDeleteSegmentsCommandSegmentsDescription {
+            get {
+                return ResourceManager.GetString("IndexDeleteSegmentsCommandSegmentsDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The directory of the index..
+        /// </summary>
+        public static string IndexDirectoryArgumentDescription {
+            get {
+                return ResourceManager.GetString("IndexDirectoryArgumentDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to If omitted, it defaults to the current working directory..
+        /// </summary>
+        public static string IndexDirectoryOptionalArgumentDescription {
+            get {
+                return ResourceManager.GetString("IndexDirectoryOptionalArgumentDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The .cfs file containing words to parse..
+        /// </summary>
+        public static string IndexExtractCfsCommandCFSFileNameDescription {
+            get {
+                return ResourceManager.GetString("IndexExtractCfsCommandCFSFileNameDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Lists sub-files from a .cfs compound file..
+        /// </summary>
+        public static string IndexExtractCfsCommandDescription {
+            get {
+                return ResourceManager.GetString("IndexExtractCfsCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The .cfs compound file format is created using the CompoundFileDirectory from Lucene.Net.Misc..
+        /// </summary>
+        public static string IndexExtractCfsCommandExtendedHelpText {
+            get {
+                return ResourceManager.GetString("IndexExtractCfsCommandExtendedHelpText", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Fixes an index with problematic segments..
+        /// </summary>
+        public static string IndexFixCommandDescription {
+            get {
+                return ResourceManager.GetString("IndexFixCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The .cfs file containing words to parse..
+        /// </summary>
+        public static string IndexListCfsCommandCFSFileNameDescription {
+            get {
+                return ResourceManager.GetString("IndexListCfsCommandCFSFileNameDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Extracts sub-files out of a .cfs compound file..
+        /// </summary>
+        public static string IndexListCfsCommandDescription {
+            get {
+                return ResourceManager.GetString("IndexListCfsCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The .cfs compound file format is created using the CompoundFileDirectory from Lucene.Net.Misc..
+        /// </summary>
+        public static string IndexListCfsCommandExtendedHelpText {
+            get {
+                return ResourceManager.GetString("IndexListCfsCommandExtendedHelpText", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Extracts the top n most frequent terms by document frequency..
+        /// </summary>
+        public static string IndexListHighFreqTermsCommandDescription {
+            get {
+                return ResourceManager.GetString("IndexListHighFreqTermsCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Extracts the top n most frequent terms (by document frequency) from an index and reports thier document frequency..
+        /// </summary>
+        public static string IndexListHighFreqTermsCommandExtendedHelpText {
+            get {
+                return ResourceManager.GetString("IndexListHighFreqTermsCommandExtendedHelpText", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The field to consider. If omitted, considers all fields..
+        /// </summary>
+        public static string IndexListHighFreqTermsCommandFieldDescription {
+            get {
+                return ResourceManager.GetString("IndexListHighFreqTermsCommandFieldDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The number of terms to consider. If omitted, defaults to 100..
+        /// </summary>
+        public static string IndexListHighFreqTermsCommandNumberOfTermsDescription {
+            get {
+                return ResourceManager.GetString("IndexListHighFreqTermsCommandNumberOfTermsDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Specifies that both the document frequency &amp; term frequency are reported, ordered by descending total term frequency..
+        /// </summary>
+        public static string IndexListHighFreqTermsCommandTotalTermFrequencyDescription {
+            get {
+                return ResourceManager.GetString("IndexListHighFreqTermsCommandTotalTermFrequencyDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Lists segments in an index..
+        /// </summary>
+        public static string IndexListSegmentsCommandDescription {
+            get {
+                return ResourceManager.GetString("IndexListSegmentsCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Displays the taxonomy statistical information for a taxonomy index..
+        /// </summary>
+        public static string IndexListTaxonomyStatsDescription {
+            get {
+                return ResourceManager.GetString("IndexListTaxonomyStatsDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Recursively lists all descendent nodes..
+        /// </summary>
+        public static string IndexListTaxonomyStatsShowTreeDescription {
+            get {
+                return ResourceManager.GetString("IndexListTaxonomyStatsShowTreeDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Gets document frequency and total number of occurrences of a term..
+        /// </summary>
+        public static string IndexListTermInfoCommandDescription {
+            get {
+                return ResourceManager.GetString("IndexListTermInfoCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Gets document frequency and total number of occurrences (sum of the term frequency for each document) of a term..
+        /// </summary>
+        public static string IndexListTermInfoCommandExtendedHelpText {
+            get {
+                return ResourceManager.GetString("IndexListTermInfoCommandExtendedHelpText", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The field to consider..
+        /// </summary>
+        public static string IndexListTermInfoCommandFieldDescription {
+            get {
+                return ResourceManager.GetString("IndexListTermInfoCommandFieldDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The directory of the index..
+        /// </summary>
+        public static string IndexListTermInfoCommandIndexDirectoryDescription {
+            get {
+                return ResourceManager.GetString("IndexListTermInfoCommandIndexDirectoryDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The term to consider..
+        /// </summary>
+        public static string IndexListTermInfoCommandTermDescription {
+            get {
+                return ResourceManager.GetString("IndexListTermInfoCommandTermDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Merges multiple indexes into a single index..
+        /// </summary>
+        public static string IndexMergeCommandDescription {
+            get {
+                return ResourceManager.GetString("IndexMergeCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Two or more source index directories separated by a space..
+        /// </summary>
+        public static string IndexMergeCommandInputDirectoryDescription {
+            get {
+                return ResourceManager.GetString("IndexMergeCommandInputDirectoryDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Output directory to merge the indexes into..
+        /// </summary>
+        public static string IndexMergeCommandOutputDirectoryDescription {
+            get {
+                return ResourceManager.GetString("IndexMergeCommandOutputDirectoryDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Splits an index into multiple parts..
+        /// </summary>
+        public static string IndexSplitCommandDescription {
+            get {
+                return ResourceManager.GetString("IndexSplitCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Path to input index. Multiple values can be provided separated by a space..
+        /// </summary>
+        public static string IndexSplitCommandInputDirectoryDescription {
+            get {
+                return ResourceManager.GetString("IndexSplitCommandInputDirectoryDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The number of parts to produce..
+        /// </summary>
+        public static string IndexSplitCommandNumberOfPartsDescription {
+            get {
+                return ResourceManager.GetString("IndexSplitCommandNumberOfPartsDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Path to output directory to contain partial indexes..
+        /// </summary>
+        public static string IndexSplitCommandOutputDirectoryDescription {
+            get {
+                return ResourceManager.GetString("IndexSplitCommandOutputDirectoryDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Sequential docid-range split..
+        /// </summary>
+        public static string IndexSplitCommandSequentialDescription {
+            get {
+                return ResourceManager.GetString("IndexSplitCommandSequentialDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Deletes prior commits..
+        /// </summary>
+        public static string IndexUpgradeCommandDeleteDescription {
+            get {
+                return ResourceManager.GetString("IndexUpgradeCommandDeleteDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Upgrades all segments of an index from previous Lucene.Net versions to the current segment file format..
+        /// </summary>
+        public static string IndexUpgradeCommandDescription {
+            get {
+                return ResourceManager.GetString("IndexUpgradeCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to  This tool keeps only the last commit in an index; for this reason, if the incoming index has more than one commit, the tool refuses to run by default. Specify --delete-prior-commits to override this, allowing the tool to delete all but the last commit. Specify an FSDirectory implementation through the --directory-type option to force its use. If not qualified by an AssemblyName, the Lucene.Net.dll assembly will be used. WARNING: This tool may reorder document IDs! Also, ensure you are using the correct vers [rest of string was truncated]&quot;;.
+        /// </summary>
+        public static string IndexUpgradeCommandExtendedHelpText {
+            get {
+                return ResourceManager.GetString("IndexUpgradeCommandExtendedHelpText", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Utilities for verifying concurrent locking integrity..
+        /// </summary>
+        public static string LockCommandDescription {
+            get {
+                return ResourceManager.GetString("LockCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Number of locking tries..
+        /// </summary>
+        public static string LockStressTestCommandCountDescription {
+            get {
+                return ResourceManager.GetString("LockStressTestCommandCountDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Simple standalone tool that forever acquires &amp; releases a lock using a specific LockFactory..
+        /// </summary>
+        public static string LockStressTestCommandDescription {
+            get {
+                return ResourceManager.GetString("LockStressTestCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to You should run multiple instances of this process, each with its own unique ID, and each pointing to the same lock directory, to verify that locking is working correctly. Make sure you are first running LockVerifyServer..
+        /// </summary>
+        public static string LockStressTestCommandExtendedHelpText {
+            get {
+                return ResourceManager.GetString("LockStressTestCommandExtendedHelpText", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to int value from 0 .. 255 (should be unique for test process)..
+        /// </summary>
+        public static string LockStressTestCommandIDDescription {
+            get {
+                return ResourceManager.GetString("LockStressTestCommandIDDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Path to the lock directory (only set for Simple/NativeFSLockFactory)..
+        /// </summary>
+        public static string LockStressTestCommandLockFactoryNameDescription {
+            get {
+                return ResourceManager.GetString("LockStressTestCommandLockFactoryNameDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Primary LockFactory class that we will use..
+        /// </summary>
+        public static string LockStressTestCommandLockFactoryTypeNameDescription {
+            get {
+                return ResourceManager.GetString("LockStressTestCommandLockFactoryTypeNameDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Milliseconds to pause betweeen each lock obtain/release..
+        /// </summary>
+        public static string LockStressTestCommandSleepTimeMSDescription {
+            get {
+                return ResourceManager.GetString("LockStressTestCommandSleepTimeMSDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Port that LockVerifyServer is listening on..
+        /// </summary>
+        public static string LockStressTestCommandVerfierPortDescription {
+            get {
+                return ResourceManager.GetString("LockStressTestCommandVerfierPortDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Hostname that LockVerifyServer is listening on..
+        /// </summary>
+        public static string LockStressTestCommandVerifierHostDescription {
+            get {
+                return ResourceManager.GetString("LockStressTestCommandVerifierHostDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Simple standalone server that must be running when you use VerifyingLockFactory. This server verifies at most one process holds the lock at a time..
+        /// </summary>
+        public static string LockVerifyServerCommandDescription {
+            get {
+                return ResourceManager.GetString("LockVerifyServerCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Hostname or IP address that LockVerifyServer will listen on..
+        /// </summary>
+        public static string LockVerifyServerCommandIPHostnameDescription {
+            get {
+                return ResourceManager.GetString("LockVerifyServerCommandIPHostnameDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to The maximum number of concurrent clients..
+        /// </summary>
+        public static string LockVerifyServerCommandMaxClientsDescription {
+            get {
+                return ResourceManager.GetString("LockVerifyServerCommandMaxClientsDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to {0} arguments are required..
+        /// </summary>
+        public static string NotEnoughArguments {
+            get {
+                return ResourceManager.GetString("NotEnoughArguments", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Output the source code of the demo to the specified directory..
+        /// </summary>
+        public static string OutputSourceCodeDescription {
+            get {
+                return ResourceManager.GetString("OutputSourceCodeDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Run &apos;demo {0} --view-source-code&apos; to see the C# code or &apos;demo {0} --output-source-code &lt;DIRECTORY&gt;&apos; to export the code to a local directory..
+        /// </summary>
+        public static string OutputSourceCodeMessage {
+            get {
+                return ResourceManager.GetString("OutputSourceCodeMessage", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Utilities and demos for Lucene.Net..
+        /// </summary>
+        public static string RootCommandDescription {
+            get {
+                return ResourceManager.GetString("RootCommandDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to One or more segments, separated by a space..
+        /// </summary>
+        public static string SegmentsArgumentDescription {
+            get {
+                return ResourceManager.GetString("SegmentsArgumentDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to An index segment..
+        /// </summary>
+        public static string SegmentsOptionDescription {
+            get {
+                return ResourceManager.GetString("SegmentsOptionDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Multiple segments are allowed..
+        /// </summary>
+        public static string SegmentsOptionMultipleDescription {
+            get {
+                return ResourceManager.GetString("SegmentsOptionMultipleDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to Verbose output..
+        /// </summary>
+        public static string VerboseOptionDescription {
+            get {
+                return ResourceManager.GetString("VerboseOptionDescription", resourceCulture);
+            }
+        }
+        
+        /// <summary>
+        ///    Looks up a localized string similar to View the source code of the demo..
+        /// </summary>
+        public static string ViewSourceCodeDescription {
+            get {
+                return ResourceManager.GetString("ViewSourceCodeDescription", resourceCulture);
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/9e389540/src/tools/lucene-cli/Resources/Strings.resx
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/Resources/Strings.resx b/src/tools/lucene-cli/Resources/Strings.resx
new file mode 100644
index 0000000..3634369
--- /dev/null
+++ b/src/tools/lucene-cli/Resources/Strings.resx
@@ -0,0 +1,420 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <data name="AnalysisCommandDescription" xml:space="preserve">
+    <value>Utilities to manage specialized analyzers.</value>
+  </data>
+  <data name="AnalysisStempelCompileStemsCommandDescription" xml:space="preserve">
+    <value>Compiles a stemmer table for the Egothor stemmer.</value>
+  </data>
+  <data name="AnalysisStempelCompileStemsCommandStemmerTableFilesDescription" xml:space="preserve">
+    <value>The path to a file containing a stemmer table. Multiple values are allowed.</value>
+  </data>
+  <data name="AnalysisStempelCompileStemsCommandStemmerTableFilesEncodingDescription" xml:space="preserve">
+    <value>The encoding to use for the stemmer table files.</value>
+  </data>
+  <data name="AnalysisStempelCompileStemsCommandStemmingAlgorithmDescription" xml:space="preserve">
+    <value>The name of the desired stemming algorithm to use.</value>
+  </data>
+  <data name="AnalysisStempelPatchStemsCommandDescription" xml:space="preserve">
+    <value>Generates patch commands from an already prepared stemmer table.</value>
+  </data>
+  <data name="AnalysisStempelPatchStemsCommandStemmerTableFilesDescription" xml:space="preserve">
+    <value>The path to a file containing a stemmer table. Multiple values are allowed.</value>
+  </data>
+  <data name="AnalysisStempelPatchStemsCommandStemmerTableFilesEncodingDescription" xml:space="preserve">
+    <value>The encoding to use for the stemmer table files.</value>
+  </data>
+  <data name="CrossCheckTermVectorsDescription" xml:space="preserve">
+    <value>Cross check term vectors.</value>
+  </data>
+  <data name="DemoAssociationsFacetsCommandDescription" xml:space="preserve">
+    <value>Shows example usage of category associations.</value>
+  </data>
+  <data name="DemoCommandDescription" xml:space="preserve">
+    <value>Demos for various Lucene.Net functionality including C# code samples.</value>
+  </data>
+  <data name="DemoDistanceFacetsCommandDescription" xml:space="preserve">
+    <value>Shows simple usage of dynamic range faceting, using the expressions module to calculate distance.</value>
+  </data>
+  <data name="DemoExpressionAggregationFacetsCommandDescription" xml:space="preserve">
+    <value>Shows facets aggregation by an expression.</value>
+  </data>
+  <data name="DemoIndexFilesCommandDescription" xml:space="preserve">
+    <value>Index all text files under a directory.</value>
+  </data>
+  <data name="DemoIndexFilesCommandExtendedHelpText" xml:space="preserve">
+    <value>This demo can be used to learn how to build a Lucene.Net index. After the index is built, you can run the search-files demo to run queries against it.</value>
+  </data>
+  <data name="DemoIndexFilesCommandSourceDirectoryDescription" xml:space="preserve">
+    <value>The source directory containing files to index. This operation is recursive.</value>
+  </data>
+  <data name="DemoIndexFilesCommandUpdateDescription" xml:space="preserve">
+    <value>Adds new documents to an existing index. If not supplied, any existing index in the &lt;INDEX_DIRECTORY&gt; will be overwritten.</value>
+  </data>
+  <data name="DemoMultiCategoryListsFacetsCommandDescription" xml:space="preserve">
+    <value>Demonstrates indexing categories into different indexed fields.</value>
+  </data>
+  <data name="DemoRangeFacetsCommandDescription" xml:space="preserve">
+    <value>Shows simple usage of dynamic range faceting.</value>
+  </data>
+  <data name="DemoSearchFilesCommandDescription" xml:space="preserve">
+    <value>Simple command-line based search demo. Run index-files demo first.</value>
+  </data>
+  <data name="DemoSearchFilesCommandExtendedHelpText" xml:space="preserve">
+    <value>Run the index-files demo first to create an index to run this command against. You can either use a file containing many queries, a single query on the command line, or omit both options to run queries interactively.</value>
+  </data>
+  <data name="DemoSearchFilesCommandFieldDescription" xml:space="preserve">
+    <value>The index field to use in the search.</value>
+  </data>
+  <data name="DemoSearchFilesCommandPageSizeDescription" xml:space="preserve">
+    <value>Hits per page to display.</value>
+  </data>
+  <data name="DemoSearchFilesCommandQueriesFileDescription" xml:space="preserve">
+    <value>A file containing the queries to perform.</value>
+  </data>
+  <data name="DemoSearchFilesCommandQueryDescription" xml:space="preserve">
+    <value>A query to perform.</value>
+  </data>
+  <data name="DemoSearchFilesCommandRawDescription" xml:space="preserve">
+    <value>Output raw format.</value>
+  </data>
+  <data name="DemoSearchFilesCommandRepeatDescription" xml:space="preserve">
+    <value>Repeat the search and time as a benchmark.</value>
+  </data>
+  <data name="DemoSimpleFacetsCommandDescription" xml:space="preserve">
+    <value>Shows simple usage of faceted indexing and search.</value>
+  </data>
+  <data name="DemoSimpleSortedSetFacetsCommandDescription" xml:space="preserve">
+    <value>Shows simple usage of faceted indexing and search using SortedSetDocValuesFacetField and SortedSetDocValuesFacetCounts.</value>
+  </data>
+  <data name="DirectoryTypeOptionDescription" xml:space="preserve">
+    <value>The FSDirectory implementation to use. Defaults to the optimal FSDirectory for your OS platform.</value>
+  </data>
+  <data name="ExportingSourceCodeCompleteMessage" xml:space="preserve">
+    <value>Source code exported to '{0}'.</value>
+  </data>
+  <data name="ExportingSourceCodeMessage" xml:space="preserve">
+    <value>Exporting source code...</value>
+  </data>
+  <data name="GeneralExceptionMessage" xml:space="preserve">
+    <value>An error occurred:</value>
+  </data>
+  <data name="HelpCommandsMessage" xml:space="preserve">
+    <value>Specify --help for a list of available options and commands.</value>
+  </data>
+  <data name="IndexCheckCommandDescription" xml:space="preserve">
+    <value>Checks an index for problematic segments.</value>
+  </data>
+  <data name="IndexCheckCommandSegmentsDescription" xml:space="preserve">
+    <value>Only check the specified segment(s). This can be specified multiple times, to check more than one segment, eg --segment _2 --segment _a.</value>
+  </data>
+  <data name="IndexCommandDescription" xml:space="preserve">
+    <value>Utilities to analyze or maintain an index.</value>
+  </data>
+  <data name="IndexCopySegmentsCommandDescription" xml:space="preserve">
+    <value>Copies segments from one index to another index.</value>
+  </data>
+  <data name="IndexCopySegmentsCommandExtendedHelpText" xml:space="preserve">
+    <value>This tool does file-level copying of segments files. This means it's unable to split apart a single segment into multiple segments. For example if your index is a single segment, this tool won't help. Also, it does basic file-level copying (using a simple FileStream) so it will not work with non FSDirectory Directory implementations.</value>
+  </data>
+  <data name="IndexCopySegmentsCommandInputDirectoryDescription" xml:space="preserve">
+    <value>The directory of the index to copy.</value>
+  </data>
+  <data name="IndexCopySegmentsCommandOutputDirectoryDescription" xml:space="preserve">
+    <value>The directory of the destination index.</value>
+  </data>
+  <data name="IndexCopySegmentsCommandSegmentsDescription" xml:space="preserve">
+    <value>The segments to copy, separated by a space.</value>
+  </data>
+  <data name="IndexDeleteSegmentsCommandDescription" xml:space="preserve">
+    <value>Deletes segments from an index.</value>
+  </data>
+  <data name="IndexDeleteSegmentsCommandExtendedHelpText" xml:space="preserve">
+    <value>You can easily accidentally remove segments from your index so be careful! Always make a backup of your index first.</value>
+  </data>
+  <data name="IndexDeleteSegmentsCommandSegmentsDescription" xml:space="preserve">
+    <value>The segments to delete, separated by a space.</value>
+  </data>
+  <data name="IndexDirectoryArgumentDescription" xml:space="preserve">
+    <value>The directory of the index.</value>
+  </data>
+  <data name="IndexDirectoryOptionalArgumentDescription" xml:space="preserve">
+    <value>If omitted, it defaults to the current working directory.</value>
+  </data>
+  <data name="IndexExtractCfsCommandCFSFileNameDescription" xml:space="preserve">
+    <value>The .cfs file containing words to parse.</value>
+  </data>
+  <data name="IndexExtractCfsCommandDescription" xml:space="preserve">
+    <value>Lists sub-files from a .cfs compound file.</value>
+  </data>
+  <data name="IndexExtractCfsCommandExtendedHelpText" xml:space="preserve">
+    <value>The .cfs compound file format is created using the CompoundFileDirectory from Lucene.Net.Misc.</value>
+  </data>
+  <data name="IndexFixCommandDescription" xml:space="preserve">
+    <value>Fixes an index with problematic segments.</value>
+  </data>
+  <data name="IndexListCfsCommandCFSFileNameDescription" xml:space="preserve">
+    <value>The .cfs file containing words to parse.</value>
+  </data>
+  <data name="IndexListCfsCommandDescription" xml:space="preserve">
+    <value>Extracts sub-files out of a .cfs compound file.</value>
+  </data>
+  <data name="IndexListCfsCommandExtendedHelpText" xml:space="preserve">
+    <value>The .cfs compound file format is created using the CompoundFileDirectory from Lucene.Net.Misc.</value>
+  </data>
+  <data name="IndexListHighFreqTermsCommandDescription" xml:space="preserve">
+    <value>Extracts the top n most frequent terms by document frequency.</value>
+  </data>
+  <data name="IndexListHighFreqTermsCommandExtendedHelpText" xml:space="preserve">
+    <value>Extracts the top n most frequent terms (by document frequency) from an index and reports thier document frequency.</value>
+  </data>
+  <data name="IndexListHighFreqTermsCommandFieldDescription" xml:space="preserve">
+    <value>The field to consider. If omitted, considers all fields.</value>
+  </data>
+  <data name="IndexListHighFreqTermsCommandNumberOfTermsDescription" xml:space="preserve">
+    <value>The number of terms to consider. If omitted, defaults to 100.</value>
+  </data>
+  <data name="IndexListHighFreqTermsCommandTotalTermFrequencyDescription" xml:space="preserve">
+    <value>Specifies that both the document frequency &amp; term frequency are reported, ordered by descending total term frequency.</value>
+  </data>
+  <data name="IndexListSegmentsCommandDescription" xml:space="preserve">
+    <value>Lists segments in an index.</value>
+  </data>
+  <data name="IndexListTaxonomyStatsDescription" xml:space="preserve">
+    <value>Displays the taxonomy statistical information for a taxonomy index.</value>
+  </data>
+  <data name="IndexListTaxonomyStatsShowTreeDescription" xml:space="preserve">
+    <value>Recursively lists all descendent nodes.</value>
+  </data>
+  <data name="IndexListTermInfoCommandDescription" xml:space="preserve">
+    <value>Gets document frequency and total number of occurrences of a term.</value>
+  </data>
+  <data name="IndexListTermInfoCommandExtendedHelpText" xml:space="preserve">
+    <value>Gets document frequency and total number of occurrences (sum of the term frequency for each document) of a term.</value>
+  </data>
+  <data name="IndexListTermInfoCommandFieldDescription" xml:space="preserve">
+    <value>The field to consider.</value>
+  </data>
+  <data name="IndexListTermInfoCommandIndexDirectoryDescription" xml:space="preserve">
+    <value>The directory of the index.</value>
+  </data>
+  <data name="IndexListTermInfoCommandTermDescription" xml:space="preserve">
+    <value>The term to consider.</value>
+  </data>
+  <data name="IndexMergeCommandDescription" xml:space="preserve">
+    <value>Merges multiple indexes into a single index.</value>
+  </data>
+  <data name="IndexMergeCommandInputDirectoryDescription" xml:space="preserve">
+    <value>Two or more source index directories separated by a space.</value>
+  </data>
+  <data name="IndexMergeCommandOutputDirectoryDescription" xml:space="preserve">
+    <value>Output directory to merge the indexes into.</value>
+  </data>
+  <data name="IndexSplitCommandDescription" xml:space="preserve">
+    <value>Splits an index into multiple parts.</value>
+  </data>
+  <data name="IndexSplitCommandInputDirectoryDescription" xml:space="preserve">
+    <value>Path to input index. Multiple values can be provided separated by a space.</value>
+  </data>
+  <data name="IndexSplitCommandNumberOfPartsDescription" xml:space="preserve">
+    <value>The number of parts to produce.</value>
+  </data>
+  <data name="IndexSplitCommandOutputDirectoryDescription" xml:space="preserve">
+    <value>Path to output directory to contain partial indexes.</value>
+  </data>
+  <data name="IndexSplitCommandSequentialDescription" xml:space="preserve">
+    <value>Sequential docid-range split.</value>
+  </data>
+  <data name="IndexUpgradeCommandDeleteDescription" xml:space="preserve">
+    <value>Deletes prior commits.</value>
+  </data>
+  <data name="IndexUpgradeCommandDescription" xml:space="preserve">
+    <value>Upgrades all segments of an index from previous Lucene.Net versions to the current segment file format.</value>
+  </data>
+  <data name="IndexUpgradeCommandExtendedHelpText" xml:space="preserve">
+    <value>This tool keeps only the last commit in an index; for this reason, if the incoming index has more than one commit, the tool refuses to run by default. Specify --delete-prior-commits to override this, allowing the tool to delete all but the last commit. Specify an FSDirectory implementation through the --directory-type option to force its use. If not qualified by an AssemblyName, the Lucene.Net.dll assembly will be used. WARNING: This tool may reorder document IDs! Also, ensure you are using the correct version of this utility to match your application's version of Lucene.Net.</value>
+  </data>
+  <data name="LockCommandDescription" xml:space="preserve">
+    <value>Utilities for verifying concurrent locking integrity.</value>
+  </data>
+  <data name="LockStressTestCommandCountDescription" xml:space="preserve">
+    <value>Number of locking tries.</value>
+  </data>
+  <data name="LockStressTestCommandDescription" xml:space="preserve">
+    <value>Simple standalone tool that forever acquires &amp; releases a lock using a specific LockFactory.</value>
+  </data>
+  <data name="LockStressTestCommandExtendedHelpText" xml:space="preserve">
+    <value>You should run multiple instances of this process, each with its own unique ID, and each pointing to the same lock directory, to verify that locking is working correctly. Make sure you are first running LockVerifyServer.</value>
+  </data>
+  <data name="LockStressTestCommandIDDescription" xml:space="preserve">
+    <value>int value from 0 .. 255 (should be unique for test process).</value>
+  </data>
+  <data name="LockStressTestCommandLockFactoryNameDescription" xml:space="preserve">
+    <value>Path to the lock directory (only set for Simple/NativeFSLockFactory).</value>
+  </data>
+  <data name="LockStressTestCommandLockFactoryTypeNameDescription" xml:space="preserve">
+    <value>Primary LockFactory class that we will use.</value>
+  </data>
+  <data name="LockStressTestCommandSleepTimeMSDescription" xml:space="preserve">
+    <value>Milliseconds to pause betweeen each lock obtain/release.</value>
+  </data>
+  <data name="LockStressTestCommandVerfierPortDescription" xml:space="preserve">
+    <value>Port that LockVerifyServer is listening on.</value>
+  </data>
+  <data name="LockStressTestCommandVerifierHostDescription" xml:space="preserve">
+    <value>Hostname that LockVerifyServer is listening on.</value>
+  </data>
+  <data name="LockVerifyServerCommandDescription" xml:space="preserve">
+    <value>Simple standalone server that must be running when you use VerifyingLockFactory. This server verifies at most one process holds the lock at a time.</value>
+  </data>
+  <data name="LockVerifyServerCommandIPHostnameDescription" xml:space="preserve">
+    <value>Hostname or IP address that LockVerifyServer will listen on.</value>
+  </data>
+  <data name="LockVerifyServerCommandMaxClientsDescription" xml:space="preserve">
+    <value>The maximum number of concurrent clients.</value>
+  </data>
+  <data name="NotEnoughArguments" xml:space="preserve">
+    <value>{0} arguments are required.</value>
+  </data>
+  <data name="OutputSourceCodeDescription" xml:space="preserve">
+    <value>Output the source code of the demo to the specified directory.</value>
+  </data>
+  <data name="OutputSourceCodeMessage" xml:space="preserve">
+    <value>Run 'demo {0} --view-source-code' to see the C# code or 'demo {0} --output-source-code &lt;DIRECTORY&gt;' to export the code to a local directory.</value>
+  </data>
+  <data name="RootCommandDescription" xml:space="preserve">
+    <value>Utilities and demos for Lucene.Net.</value>
+  </data>
+  <data name="SegmentsArgumentDescription" xml:space="preserve">
+    <value>One or more segments, separated by a space.</value>
+  </data>
+  <data name="SegmentsOptionDescription" xml:space="preserve">
+    <value>An index segment.</value>
+  </data>
+  <data name="SegmentsOptionMultipleDescription" xml:space="preserve">
+    <value>Multiple segments are allowed.</value>
+  </data>
+  <data name="VerboseOptionDescription" xml:space="preserve">
+    <value>Verbose output.</value>
+  </data>
+  <data name="ViewSourceCodeDescription" xml:space="preserve">
+    <value>View the source code of the demo.</value>
+  </data>
+</root>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/9e389540/src/tools/lucene-cli/SourceCode/ConsolePager.cs
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/SourceCode/ConsolePager.cs b/src/tools/lucene-cli/SourceCode/ConsolePager.cs
new file mode 100644
index 0000000..101935f
--- /dev/null
+++ b/src/tools/lucene-cli/SourceCode/ConsolePager.cs
@@ -0,0 +1,198 @@
+using Lucene.Net.Support;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+
+namespace Lucene.Net.Cli.SourceCode
+{
+    /*
+     * Licensed to the Apache Software Foundation (ASF) under one or more
+     * contributor license agreements.  See the NOTICE file distributed with
+     * this work for additional information regarding copyright ownership.
+     * The ASF licenses this file to You under the Apache License, Version 2.0
+     * (the "License"); you may not use this file except in compliance with
+     * the License.  You may obtain a copy of the License at
+     *
+     *     http://www.apache.org/licenses/LICENSE-2.0
+     *
+     * Unless required by applicable law or agreed to in writing, software
+     * distributed under the License is distributed on an "AS IS" BASIS,
+     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     * See the License for the specific language governing permissions and
+     * limitations under the License.
+     */
+
+    /// <summary>
+    /// Interactively pages or scrolls through the list of files provided in
+    /// the constructor.
+    /// <para/>
+    /// <b>Commands</b>:
+    /// <list type="table">
+    ///     <listheader>
+    ///         <term>Keys</term>
+    ///         <description>Description</description>
+    ///     </listheader>
+    ///     <item>
+    ///         <term><c>n</c> or Space</term>
+    ///         <description>Pages to the next full screen of text.</description>
+    ///     </item>
+    ///     <item>
+    ///         <term><c>q</c> or <c>x</c></term>
+    ///         <description>Exits the application.</description>
+    ///     </item>
+    ///     <item>
+    ///         <term>Enter</term>
+    ///         <description>
+    ///             Moves to the next line of text. Hold down
+    ///             the Enter key to scroll.
+    ///         </description>
+    ///     </item>
+    /// </list>
+    /// </summary>
+    public class ConsolePager : IDisposable
+    {
+        private readonly MultipleFileLineEnumerator enumerator;
+        private readonly IEnumerable<string> files;
+
+        public ConsolePager(IEnumerable<string> files)
+        {
+            if (files == null)
+                throw new ArgumentNullException("files");
+            this.enumerator = new MultipleFileLineEnumerator(files);
+        }
+
+        public TextWriter Out { get; set; } = Console.Out;
+        public TextReader In { get; set; } = Console.In;
+        public Func<int> GetWindowHeight { get; set; } = () => Console.WindowHeight;
+
+        public void Run()
+        {
+            try
+            {
+                Console.ForegroundColor = ConsoleColor.Yellow;
+                int take = GetWindowHeight();
+                int count = 0;
+                bool done = false;
+                do
+                {
+                    while (count++ < take)
+                    {
+                        done = !enumerator.MoveNext();
+                        if (done) break;
+                        Out.WriteLine(enumerator.Current);
+                    }
+                    count = 0; // Reset
+                    bool valid = false;
+                    while (!valid)
+                    {
+                        var keyInfo = Console.ReadKey(true);
+
+                        switch (keyInfo.KeyChar)
+                        {
+                            case 'q': // quit
+                            case 'x':
+                                done = valid = true;
+                                break;
+                            case 'n':
+                            case ' ':
+                                take = GetWindowHeight(); // Get next page
+                                valid = true;
+                                break;
+                            case (char)13: // ENTER
+                                take = 1; // Get a single line
+                                valid = true;
+                                break;
+                        }
+                    }
+                } while (!done);
+            }
+            finally
+            {
+                Console.ResetColor();
+            }
+        }
+
+        public void Dispose()
+        {
+            this.enumerator?.Dispose();
+        }
+
+        /// <summary>
+        /// Enumerates through a list of files (embedded resources)
+        /// as if they were one contiguous set of text.
+        /// </summary>
+        internal class MultipleFileLineEnumerator : IEnumerator<string>
+        {
+            private static Assembly thisAssembly = typeof(Program).GetTypeInfo().Assembly;
+
+            private readonly IEnumerator<string> fileEnumerator;
+            private TextReader currentFile;
+            private string line = null;
+
+            public MultipleFileLineEnumerator(IEnumerable<string> files)
+            {
+                if (files == null)
+                    throw new ArgumentNullException("files");
+                this.fileEnumerator = files.GetEnumerator();
+                NextFile();
+            }
+
+            private bool NextFile()
+            {
+
+                if (this.fileEnumerator.MoveNext())
+                {
+                    currentFile = new SourceCodeSectionReader(new StreamReader(
+                        thisAssembly.FindAndGetManifestResourceStream(typeof(Program), this.fileEnumerator.Current), 
+                        SourceCodeSectionParser.ENCODING));
+                    return true;
+                }
+                return false;
+            }
+
+            public string Current
+            {
+                get
+                {
+                    return line;
+                }
+            }
+
+            object IEnumerator.Current
+            {
+                get
+                {
+                    return line;
+                }
+            }
+
+            public void Dispose()
+            {
+                this.fileEnumerator?.Dispose();
+                this.currentFile?.Dispose();
+            }
+
+            public bool MoveNext()
+            {
+                line = this.currentFile.ReadLine();
+                if (line == null)
+                {
+                    if (!NextFile())
+                    {
+                        return false;
+                    }
+
+                    line = this.currentFile.ReadLine();
+                }
+                return line != null;
+            }
+
+            public void Reset()
+            {
+                throw new NotSupportedException();
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/9e389540/src/tools/lucene-cli/SourceCode/SourceCodeExporter.cs
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/SourceCode/SourceCodeExporter.cs b/src/tools/lucene-cli/SourceCode/SourceCodeExporter.cs
new file mode 100644
index 0000000..483e7d8
--- /dev/null
+++ b/src/tools/lucene-cli/SourceCode/SourceCodeExporter.cs
@@ -0,0 +1,59 @@
+using Lucene.Net.Support;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+
+namespace Lucene.Net.Cli.SourceCode
+{
+    /*
+     * Licensed to the Apache Software Foundation (ASF) under one or more
+     * contributor license agreements.  See the NOTICE file distributed with
+     * this work for additional information regarding copyright ownership.
+     * The ASF licenses this file to You under the Apache License, Version 2.0
+     * (the "License"); you may not use this file except in compliance with
+     * the License.  You may obtain a copy of the License at
+     *
+     *     http://www.apache.org/licenses/LICENSE-2.0
+     *
+     * Unless required by applicable law or agreed to in writing, software
+     * distributed under the License is distributed on an "AS IS" BASIS,
+     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     * See the License for the specific language governing permissions and
+     * limitations under the License.
+     */
+
+    /// <summary>
+    /// Exports source code files from embedded resources and includes or
+    /// excludes any sections that are marked by comment tokens. See
+    /// <see cref="SourceCodeSectionReader"/> for for the supported tokens.
+    /// </summary>
+    public class SourceCodeExporter
+    {
+        protected SourceCodeSectionParser sectionParser = new SourceCodeSectionParser();
+
+        /// <summary>
+        /// Reads the provided source code <paramref name="files"/> from the 
+        /// embeded resources within this assembly
+        /// and writes them out to the <paramref name="outputPath"/>.
+        /// </summary>
+        /// <param name="files">An <see cref="IEnumerable{T}"/> of files to export.</param>
+        /// <param name="outputPath">A directory where the files will be exported.</param>
+        public void ExportSourceCodeFiles(IEnumerable<string> files, string outputPath)
+        {
+            if (!Directory.Exists(outputPath))
+            {
+                Directory.CreateDirectory(outputPath);
+            }
+            var thisAssembly = this.GetType().GetTypeInfo().Assembly;
+
+            foreach (var file in files)
+            {
+                using (var input = thisAssembly.FindAndGetManifestResourceStream(typeof(Program), file))
+                using (var output = new FileStream(Path.Combine(outputPath, file), FileMode.Create, FileAccess.Write))
+                {
+                    sectionParser.ParseSourceCodeFiles(input, output);
+                }
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/9e389540/src/tools/lucene-cli/SourceCode/SourceCodeSectionParser.cs
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/SourceCode/SourceCodeSectionParser.cs b/src/tools/lucene-cli/SourceCode/SourceCodeSectionParser.cs
new file mode 100644
index 0000000..9d2abcfc
--- /dev/null
+++ b/src/tools/lucene-cli/SourceCode/SourceCodeSectionParser.cs
@@ -0,0 +1,100 @@
+using System.IO;
+using System.Text;
+
+namespace Lucene.Net.Cli.SourceCode
+{
+    /*
+     * Licensed to the Apache Software Foundation (ASF) under one or more
+     * contributor license agreements.  See the NOTICE file distributed with
+     * this work for additional information regarding copyright ownership.
+     * The ASF licenses this file to You under the Apache License, Version 2.0
+     * (the "License"); you may not use this file except in compliance with
+     * the License.  You may obtain a copy of the License at
+     *
+     *     http://www.apache.org/licenses/LICENSE-2.0
+     *
+     * Unless required by applicable law or agreed to in writing, software
+     * distributed under the License is distributed on an "AS IS" BASIS,
+     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     * See the License for the specific language governing permissions and
+     * limitations under the License.
+     */
+
+    /// <summary>
+    /// Idenitifies sections of code based on tokens to transform 
+    /// the output code to either contain extra code sections or
+    /// remove unwanted code sections.
+    /// <para/>
+    /// There are 5 different types of tokens considered:
+    /// <list type="table">
+    ///     <item>
+    ///         <term>// &lt;comment&gt;</term>
+    ///         <description>
+    ///             Beginning of commented block. This line and all lines 
+    ///             until the end of a comment block are ignored.
+    ///             </description>
+    ///     </item>
+    ///     <item>
+    ///         <term>// &lt;\comment&gt;</term>
+    ///         <description>
+    ///             End of a commented block. This line is ignored, but any 
+    ///             lines following will be included.
+    ///         </description>
+    ///     </item>
+    ///     <item>
+    ///         <term>// &lt;include&gt;</term>
+    ///         <description>
+    ///             Beginning of an include block. This line is ignored, but 
+    ///             all lines following will have the //// comment marker 
+    ///             removed from the beginning of the line. Effectively, 
+    ///             it uncomments lines of code that were previously commented 
+    ///             and ignored by the compiler. All normal C# comments (// and ///) 
+    ///             are ignored and left in place.
+    ///         </description>
+    ///     </item>
+    ///     <item>
+    ///         <term>// &lt;\\include&gt;</term>
+    ///         <description>
+    ///             End of an include block. This line is ignored and following
+    ///             lines will be treated normally again. In other words, the ////
+    ///             comment will no longer be removed from following lines.
+    ///         </description>
+    ///     </item>
+    ///     <item>
+    ///         <term>////</term>
+    ///         <description>
+    ///             A double comment. This comment is removed in include blocks
+    ///             to uncomment code that was previously commented and ignored
+    ///             by the compiler. This allows adding using directives, alternate
+    ///             type names, etc. to be output in the demo even if they don't exist
+    ///             in the compiled application.
+    ///         </description>
+    ///     </item>
+    /// </list>
+    /// </summary>
+    public class SourceCodeSectionParser
+    {
+        public static readonly Encoding ENCODING = Encoding.UTF8;
+
+        /// <summary>
+        /// Parses the source code from the <paramref name="input"/> and places the
+        /// valid lines (the lines that are not commented with a token,
+        /// those that are included with a token, and "normal" lines)
+        /// into the <paramref name="output"/>.
+        /// </summary>
+        /// <param name="input">A stream with the input data. This stream will still be open when the call completes.</param>
+        /// <param name="output">A stream where the output data will be sent. This stream will still be open when the call completes.</param>
+        public void ParseSourceCodeFiles(Stream input, Stream output)
+        {
+            using (var reader = new SourceCodeSectionReader(new StreamReader(input, ENCODING, false, 1024, true)))
+            using (TextWriter writer = new StreamWriter(output, ENCODING, 1024, true))
+            {
+                string line;
+                while ((line = reader.ReadLine()) != null)
+                {
+                    writer.WriteLine(line);
+                }
+            }
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/lucenenet/blob/9e389540/src/tools/lucene-cli/SourceCode/SourceCodeSectionReader.cs
----------------------------------------------------------------------
diff --git a/src/tools/lucene-cli/SourceCode/SourceCodeSectionReader.cs b/src/tools/lucene-cli/SourceCode/SourceCodeSectionReader.cs
new file mode 100644
index 0000000..6812037
--- /dev/null
+++ b/src/tools/lucene-cli/SourceCode/SourceCodeSectionReader.cs
@@ -0,0 +1,157 @@
+using System;
+using System.IO;
+using System.Text.RegularExpressions;
+
+namespace Lucene.Net.Cli.SourceCode
+{
+    /*
+     * Licensed to the Apache Software Foundation (ASF) under one or more
+     * contributor license agreements.  See the NOTICE file distributed with
+     * this work for additional information regarding copyright ownership.
+     * The ASF licenses this file to You under the Apache License, Version 2.0
+     * (the "License"); you may not use this file except in compliance with
+     * the License.  You may obtain a copy of the License at
+     *
+     *     http://www.apache.org/licenses/LICENSE-2.0
+     *
+     * Unless required by applicable law or agreed to in writing, software
+     * distributed under the License is distributed on an "AS IS" BASIS,
+     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     * See the License for the specific language governing permissions and
+     * limitations under the License.
+     */
+
+    /// <summary>
+    /// A <see cref="TextReader"/> that conditionally includes or excludes lines 
+    /// of source code based on commented sections in the original
+    /// source.
+    /// </summary>
+    /// <remarks>
+    /// Idenitifies sections of code based on tokens to transform 
+    /// the output code to either contain extra code sections or
+    /// remove unwanted code sections.
+    /// <para/>
+    /// There are 5 different types of tokens considered:
+    /// <list type="table">
+    ///     <item>
+    ///         <term>// &lt;comment&gt;</term>
+    ///         <description>
+    ///             Beginning of commented block. This line and all lines 
+    ///             until the end of a comment block are ignored.
+    ///             </description>
+    ///     </item>
+    ///     <item>
+    ///         <term>// &lt;\comment&gt;</term>
+    ///         <description>
+    ///             End of a commented block. This line is ignored, but any 
+    ///             lines following will be included.
+    ///         </description>
+    ///     </item>
+    ///     <item>
+    ///         <term>// &lt;include&gt;</term>
+    ///         <description>
+    ///             Beginning of an include block. This line is ignored, but 
+    ///             all lines following will have the //// comment marker 
+    ///             removed from the beginning of the line. Effectively, 
+    ///             it uncomments lines of code that were previously commented 
+    ///             and ignored by the compiler. All normal C# comments (// and ///) 
+    ///             are ignored and left in place.
+    ///         </description>
+    ///     </item>
+    ///     <item>
+    ///         <term>// &lt;\\include&gt;</term>
+    ///         <description>
+    ///             End of an include block. This line is ignored and following
+    ///             lines will be treated normally again. In other words, the ////
+    ///             comment will no longer be removed from following lines.
+    ///         </description>
+    ///     </item>
+    ///     <item>
+    ///         <term>////</term>
+    ///         <description>
+    ///             A double comment. This comment is removed in include blocks
+    ///             to uncomment code that was previously commented and ignored
+    ///             by the compiler. This allows adding using directives, alternate
+    ///             type names, etc. to be output in the demo even if they don't exist
+    ///             in the compiled application.
+    ///         </description>
+    ///     </item>
+    /// </list>
+    /// </remarks>
+    public class SourceCodeSectionReader : TextReader
+    {
+        public static readonly Regex COMMENT_START = new Regex(@"//\s*?<comment>", RegexOptions.Compiled);
+        public static readonly Regex COMMENT_END = new Regex(@"//\s*?</comment>", RegexOptions.Compiled);
+        public static readonly Regex INCLUDE_START = new Regex(@"//\s*?<include>", RegexOptions.Compiled);
+        public static readonly Regex INCLUDE_END = new Regex(@"//\s*?</include>", RegexOptions.Compiled);
+        public static readonly Regex TO_UNCOMMENT = new Regex(@"////", RegexOptions.Compiled);
+
+        private bool inComment = false;
+        private bool inInclude = false;
+
+        private readonly TextReader reader;
+
+        public SourceCodeSectionReader(TextReader reader)
+        {
+            if (reader == null)
+                throw new ArgumentNullException("reader");
+            this.reader = reader;
+        }
+
+        public override string ReadLine()
+        {
+            string line;
+            while ((line = reader.ReadLine()) != null)
+            {
+                if (inComment)
+                {
+                    if (COMMENT_END.IsMatch(line))
+                    {
+                        inComment = false;
+                        continue; // Skip this line
+                    }
+                }
+                else
+                {
+                    if (COMMENT_START.IsMatch(line))
+                    {
+                        inComment = true;
+                        continue; // Skip this line
+                    }
+                    else
+                    {
+                        // If not in a comment, consider source code includes.
+                        // In this case, we will remove //// from the beginning of
+                        // each line if it exists.
+                        if (inInclude)
+                        {
+                            if (INCLUDE_END.IsMatch(line))
+                            {
+                                inInclude = false;
+                                continue; // Skip this line
+                            }
+                            line = TO_UNCOMMENT.Replace(line, string.Empty, 1);
+                        }
+                        else if (INCLUDE_START.IsMatch(line))
+                        {
+                            inInclude = true;
+                            continue; // Skip this line
+                        }
+                    }
+
+                    // All other lines, include the line
+                    return line;
+                }
+            }
+            return line;
+        }
+
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing)
+            {
+                this.reader?.Dispose();
+            }
+        }
+    }
+}