Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            }
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }