private static NotepadPlusLanguages NppLangsToXml(Dictionary<string, NppLanguage> langs) { NotepadPlusLanguages xmlType = new NotepadPlusLanguages(); var xmlLangs = new List<Language>(langs.Count); foreach (var lang in langs) { if (lang.Key == UserDefined) continue; var value = lang.Value; var xmlLang = new Language { Name = value.Name, Extension = string.Join(" ", value.Extensions), CommentLine = value.CommentLine, CommentStart = value.CommentStart, CommentEnd = value.CommentEnd, }; if (value.Keywords.Count != 0) { var xmlKeywords = new List<Keywords>(value.Keywords.Count); foreach (var keywords in value.Keywords) { xmlKeywords.Add(new Keywords { Name = keywords.Key, Value = string.Join(" ", keywords.Value) }); } xmlLang.Keywords = xmlKeywords.ToArray(); } xmlLangs.Add(xmlLang); } xmlType.Languages = xmlLangs.ToArray(); return xmlType; }
private static Dictionary<string, NppLanguage> XmlToNppLangs(NotepadPlusLanguages xmlLangs, NotepadPlusStylers xmlStylers) { var result = new Dictionary<string, NppLanguage>(xmlLangs.Languages.Length); var splitChars = new char[] { ' ' }; foreach (var xmlLang in xmlLangs.Languages) { var lang = new NppLanguage { Name = xmlLang.Name, Extensions = xmlLang.Extension.Split(splitChars, StringSplitOptions.RemoveEmptyEntries).ToList(), CommentLine = xmlLang.CommentLine, CommentStart = xmlLang.CommentStart, CommentEnd = xmlLang.CommentEnd, }; var lexerType = xmlStylers.LexerStyles.FirstOrDefault(style => style.Name == xmlLang.Name); if (lexerType != null) lang.Description = lexerType.Description; else { if (lang.Name == "normal") lang.Description = "Normal Text"; else lang.Description = lang.Name; } LangType langType; if (Enum.TryParse("L_" + lang.Name.ToUpperInvariant(), out langType)) lang.LangType = langType; else { switch (lang.Name) { case "actionscript": lang.LangType = LangType.L_FLASH; break; case "autoit": lang.LangType = LangType.L_AU3; break; case "coffeescript": lang.LangType = LangType.L_EXTERNAL; break; case "javascript": lang.LangType = LangType.L_JS; break; case "nfo": lang.LangType = LangType.L_ASCII; break; case "normal": lang.LangType = LangType.L_TEXT; break; case "postscript": lang.LangType = LangType.L_PS; break; } } lang.Keywords = new Dictionary<string, List<string>>(); if (xmlLang.Keywords != null) foreach (var keyword in xmlLang.Keywords) lang.Keywords.Add(keyword.Name, keyword.Value == null ? new List<string>() : keyword.Value.Split(' ').ToList()); result.Add(lang.Name, lang); } result.Add(UserDefined, new NppLanguage { Name = UserDefined, LangType = LangType.L_USER, Extensions = new List<string>(), Keywords = new Dictionary<string,List<string>>(), Description = "User-Defined" }); return result; }