// 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; }
// 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); }
// 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(); } }