Exemplo n.º 1
0
        // Group: Functions
        // __________________________________________________________________________


        /* Constructor: Manager
         */
        public Manager(Engine.Instance engineInstance) : base(engineInstance)
        {
            languages      = new IDObjects.Manager <Language>(KeySettingsForLanguageName, false);
            aliases        = new StringTable <Language>(KeySettingsForLanguageName);
            extensions     = new StringTable <Language>(KeySettingsForExtensions);
            shebangStrings = new SortedStringTable <Language>(new ShebangStringComparer(), KeySettingsForShebangStrings);

            predefinedLanguages = new Language[6];

            predefinedLanguages[0]            = new Language(this, "Text File");
            predefinedLanguages[0].Type       = Language.LanguageType.TextFile;
            predefinedLanguages[0].Predefined = true;

            predefinedLanguages[1]            = new Languages.Parsers.ShebangScript(this);
            predefinedLanguages[1].Predefined = true;

            predefinedLanguages[2]            = new Languages.Parsers.CSharp(this);
            predefinedLanguages[2].Predefined = true;

            predefinedLanguages[3]            = new Languages.Parsers.Perl(this);
            predefinedLanguages[3].Predefined = true;

            predefinedLanguages[4]            = new Languages.Parsers.Python(this);
            predefinedLanguages[4].Predefined = true;

            predefinedLanguages[5]            = new Languages.Parsers.Ruby(this);
            predefinedLanguages[5].Predefined = true;
        }
Exemplo n.º 2
0
        // Group: Functions
        // __________________________________________________________________________


        /* Constructor: Config
         */
        public Config()
        {
            languages      = new IDObjects.Manager <Language>(KeySettingsForLanguageName, false);
            aliases        = new StringTable <int>(KeySettingsForLanguageName);
            fileExtensions = new StringTable <int>(KeySettingsForFileExtensions);
            shebangStrings = new SortedStringTable <int>(new ShebangStringComparer(), KeySettingsForShebangStrings);
        }
Exemplo n.º 3
0
        // Group: Saving Functions
        // __________________________________________________________________________


        /* Function: Save
         * Saves the current computed languages into <Languages.nd>.  Throws an exception if unsuccessful.
         */
        public void Save(Path filename, IDObjects.Manager <Language> languages,
                         StringTable <Language> aliases, StringTable <Language> extensions,
                         SortedStringTable <Language> shebangStrings, StringSet ignoredExtensions)
        {
            BinaryFile file = new BinaryFile();

            file.OpenForWriting(filename);

            try
            {
                // [String: Language Name]
                // [Int32: ID]
                // [Byte: Type]
                // [String: Simple Identifier]
                // [Byte: Enum Values]
                // [Byte: Case Sensitive (1 or 0)]
                // [String: Member Operator Symbol]
                // [String: Line Extender Symbol]
                // [String: Line Comment Symbol] [] ... [String: null]
                // [String: Opening Block Comment Symbol] [String: Closing Block Comment Symbo] [] [] ... [String: null]
                // [String: Opening Javadoc Line Comment Symbol] [String: Remainder Javadoc Line Comment Symbol [] ... [String: null]
                // [String: Opening Javadoc Block Comment Symbol] [String: Closing Javadoc Block Comment Symbol] [] [] ... [String: null]
                // [String: XML Line Comment Symbol] [] ... [String: null]

                // [Int32: Comment Type ID]
                // [Byte: Include Line Breaks (0 or 1)]
                // [String: Prototype Ender Symbol] [] ... [String: null]
                // ...
                // [Int32: 0]

                // ...
                // [String: null]

                foreach (Language language in languages)
                {
                    file.WriteString(language.Name);
                    file.WriteInt32(language.ID);
                    file.WriteByte((byte)language.Type);
                    file.WriteString(language.SimpleIdentifier);
                    file.WriteByte((byte)language.EnumValue);
                    file.WriteByte((byte)(language.CaseSensitive ? 1 : 0));
                    file.WriteString(language.MemberOperator);
                    file.WriteString(language.LineExtender);

                    WriteStringArray(file, language.LineCommentStrings);
                    WriteStringArray(file, language.BlockCommentStringPairs);
                    WriteStringArray(file, language.JavadocLineCommentStringPairs);
                    WriteStringArray(file, language.JavadocBlockCommentStringPairs);
                    WriteStringArray(file, language.XMLLineCommentStrings);

                    int[] commentTypes = language.GetCommentTypesWithPrototypeEnders();
                    if (commentTypes != null)
                    {
                        foreach (int commentType in commentTypes)
                        {
                            PrototypeEnders prototypeEnders = language.GetPrototypeEnders(commentType);

                            file.WriteInt32(commentType);
                            file.WriteByte((byte)(prototypeEnders.IncludeLineBreaks ? 1 : 0));
                            WriteStringArray(file, prototypeEnders.Symbols);
                        }
                    }
                    file.WriteInt32(0);
                }

                file.WriteString(null);


                // [String: Alias] [Int32: Language ID] [] [] ... [String: Null]

                foreach (KeyValuePair <string, Language> pair in aliases)
                {
                    file.WriteString(pair.Key);
                    file.WriteInt32(pair.Value.ID);
                }

                file.WriteString(null);


                // [String: Extension] [Int32: Language ID] [] [] ... [String: Null]

                foreach (KeyValuePair <string, Language> pair in extensions)
                {
                    file.WriteString(pair.Key);
                    file.WriteInt32(pair.Value.ID);
                }

                file.WriteString(null);


                // [String: Shebang String] [Int32: Language ID] [] [] ... [String: Null]

                foreach (KeyValuePair <string, Language> pair in shebangStrings)
                {
                    file.WriteString(pair.Key);
                    file.WriteInt32(pair.Value.ID);
                }

                file.WriteString(null);


                // [String: Ignored Extension] [] ... [String: Null]

                foreach (string ignoredExtension in ignoredExtensions)
                {
                    file.WriteString(ignoredExtension);
                }

                file.WriteString(null);
            }

            finally
            {
                file.Close();
            }
        }