public static BundlerModel Parse(string root, string path, bool includeOptionalFiles, bool includeSample) { if (string.IsNullOrWhiteSpace(path)) { return(null); } BundlerModel model = new BundlerModel(); //Collection<string> files = new Collection<string>(); Collection <KeyValuePair <string, string> > dictionaries = new Collection <KeyValuePair <string, string> >(); string content = File.ReadAllText(path, Encoding.UTF8); string scriptDirectory = string.Empty; string[] lines = content.Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); foreach (string line in lines) { var items = line.Split(':'); var key = items[0].TrimStart('-').Trim(); var value = items[1].Trim(); string defaultLanguage = GetDefaultLanguage(key, value); if (!string.IsNullOrWhiteSpace(GetScriptDirectory(key, value))) { scriptDirectory = GetScriptDirectory(key, value); scriptDirectory = Path.Combine(root, scriptDirectory); if (!Directory.Exists(scriptDirectory)) { scriptDirectory = string.Empty; } } KeyValuePair <string, string> dictionary = GetDictionary(key, value); string outputDirectory = GetOutputDirectory(key, value); if (!string.IsNullOrWhiteSpace(defaultLanguage)) { model.DefaultLanguage = defaultLanguage; } if (!string.IsNullOrWhiteSpace(dictionary.Key) && !string.IsNullOrWhiteSpace(dictionary.Value)) { dictionaries.Add(dictionary); } if (!string.IsNullOrWhiteSpace(outputDirectory)) { model.OutputDirectory = outputDirectory; } } model.OriginalFileName = Path.GetFileNameWithoutExtension(path).Replace(".sqlbundle", ""); model.Files = GetScripts(scriptDirectory, includeOptionalFiles, includeSample); model.Dictionaries = dictionaries; return(model); }
public static void Bundle(string root, Collection <string> files, bool includeOptionalFiles, bool includeSample) { foreach (string file in files) { BundlerModel model = Parser.Parse(root, file, includeOptionalFiles, includeSample); if (model == null) { return; } Collection <SQLBundle> bundles = Processor.Process(root, model); if (bundles == null) { return; } IOHelper.WriteBundles(root, bundles); } }
public static Collection <SQLBundle> Process(string root, BundlerModel model) { if (model == null) { return(null); } StringBuilder script = new StringBuilder(); Collection <SQLBundle> bundles = new Collection <SQLBundle>(); foreach (string fileName in model.Files) { if (!string.IsNullOrWhiteSpace(script.ToString())) { script.Append(Environment.NewLine); } Console.WriteLine("Adding {0} to bundle", fileName); script.Append("-- "); script.Append(Path.GetFileName(fileName)); script.Append(Environment.NewLine); script.Append(File.ReadAllText(fileName, Encoding.UTF8)); script.Append(Environment.NewLine); } if (string.IsNullOrWhiteSpace(script.ToString())) { return(null); } SQLBundle defaultBundle = new SQLBundle(); defaultBundle.FileName = GetBundleFileName(model.OutputDirectory, model.OriginalFileName, model.DefaultLanguage); defaultBundle.Language = model.DefaultLanguage; defaultBundle.Script = script.ToString(); bundles.Add(defaultBundle); foreach (var dictionary in model.Dictionaries) { Console.WriteLine("SQL localization dictionary: {0}", dictionary.Value); SQLBundle bundle = new SQLBundle(); string filePath = Path.Combine(root, dictionary.Value); bundle.FileName = GetBundleFileName(model.OutputDirectory, model.OriginalFileName, dictionary.Key); bundle.Script = script.ToString(); List <string> lines = File.ReadAllText(filePath, Encoding.UTF8).Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).ToList(); foreach (string line in lines) { string find = line.Split('=')[0].Trim(); string replace = line.Split('=')[1].Trim(); bundle.Script = bundle.Script.Replace(find, replace); } bundles.Add(bundle); } return(bundles); }
public static Collection <SQLBundle> Process(string root, BundlerModel model) { if (model == null) { return(null); } var script = new StringBuilder(); var bundles = new Collection <SQLBundle>(); foreach (string fileName in model.Files) { if (!string.IsNullOrWhiteSpace(script.ToString())) { script.Append(Environment.NewLine); } var directories = Path.GetFullPath(root).Split(Path.DirectorySeparatorChar); var pos = directories.TakeWhile(x => x.ToLower() != SOURCE_CANDIDATE).Count(); var start = string.Join(Path.DirectorySeparatorChar.ToString(), directories.Skip(pos)); Console.WriteLine(@"Adding {0} to bundle", fileName); script.Append("-->-->-- "); script.Append((start + Path.GetFullPath(fileName).Replace(Path.GetFullPath(root), "")).Replace("\\", "/")); script.Append(" --<--<--"); script.Append(Environment.NewLine); script.Append(File.ReadAllText(fileName, Encoding.UTF8)); script.Append(Environment.NewLine); } if (string.IsNullOrWhiteSpace(script.ToString())) { return(null); } var defaultBundle = new SQLBundle { FileName = GetBundleFileName(model.OutputDirectory, model.OriginalFileName), Script = script.ToString() }; bundles.Add(defaultBundle); foreach (var dictionary in model.Dictionaries) { Console.WriteLine(@"SQL localization dictionary: {0}", dictionary.Value); var bundle = new SQLBundle(); string filePath = Path.Combine(root, dictionary.Value); bundle.FileName = GetBundleFileName(model.OutputDirectory, model.OriginalFileName); bundle.Script = script.ToString(); var lines = File.ReadAllText(filePath, Encoding.UTF8) .Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries) .ToList(); foreach (string line in lines) { string find = line.Split('=')[0].Trim(); string replace = line.Split('=')[1].Trim(); bundle.Script = bundle.Script.Replace(find, replace); } bundles.Add(bundle); } return(bundles); }