예제 #1
0
파일: Modules.cs 프로젝트: W-h-a-t-s/Rant
		public void PackageModules()
		{
			var package = new RantPackage();
			var pattern = RantPattern.FromString("[$[.hello_world]:Hello World]");
			pattern.Name = "pkg_test";
			package.AddPattern(pattern);
			rant.LoadPackage(package);
			Assert.AreEqual("Hello World", rant.Do("[use:pkg_test][$pkg_test.hello_world]").Main);
		}
예제 #2
0
        public void PackageModules()
        {
            var package = new RantPackage();
            var pattern = RantPattern.FromString("[$[.hello_world]:Hello World]");

            pattern.Name = "pkg_test";
            package.AddPattern(pattern);
            rant.LoadPackage(package);
            Assert.AreEqual("Hello World", rant.Do("[use:pkg_test][$pkg_test.hello_world]").Main);
        }
예제 #3
0
        public Rant_Generator()
        {
            rant = new RantEngine();
            rng  = new RNG(Seed);

            Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));

            var package = RantPackage.Load(Package);

            rant.LoadPackage(package);
        }
예제 #4
0
        private static void Pack(RantPackage package, string contentPath)
        {
            foreach (var path in Directory.EnumerateFiles(contentPath, "*.*", SearchOption.AllDirectories)
                     .Where(p => p.EndsWith(".rant") || p.EndsWith(".rants")))
            {
                var    pattern = RantPattern.FromFile(path);
                string relativePath;
                TryGetRelativePath(contentPath, path, out relativePath, true);
                pattern.Name = relativePath;
                package.AddPattern(pattern);
                Console.WriteLine("+ " + pattern.Name);
            }

            foreach (var path in Directory.GetFiles(contentPath, "*.dic", SearchOption.AllDirectories))
            {
                Console.WriteLine("+ " + path);
                var table = RantDictionaryTable.FromFile(path);
                package.AddTable(table);
            }
        }
예제 #5
0
파일: PackCommand.cs 프로젝트: sizzles/Rant
        private static void Pack(RantPackage package, string contentPath)
        {
            foreach (string path in Directory.EnumerateFiles(contentPath, "*.*", SearchOption.AllDirectories)
                     .Where(p => p.EndsWith(".rant") || p.EndsWith(".rants")))
            {
                var    pattern = RantProgram.CompileFile(path);
                string relativePath;
                TryGetRelativePath(contentPath, path, out relativePath, true);
                pattern.Name = relativePath;
                package.AddResource(pattern);
                Console.WriteLine("+ " + pattern.Name);
            }

            foreach (string path in Directory.GetFiles(contentPath, "*.table", SearchOption.AllDirectories))
            {
                Console.WriteLine("+ " + path);
                var table = RantDictionaryTable.FromStream(Path.GetFileNameWithoutExtension(path), File.Open(path, FileMode.Open));
                package.AddResource(table);
            }
        }
예제 #6
0
        public void SaveLoadRun()
        {
            var package = new RantPackage
            {
                ID          = "TestPackage",
                Description = "This is a test.",
                Title       = "Test Package?!",
                Version     = new RantPackageVersion(1, 1, 0)
            };

            package.AddResource(RantDictionaryTable.FromStream("nouns", File.Open("Tables/nouns.table", FileMode.Open)));
            package.AddResource(RantProgram.CompileString("TestProgram", @"[case:title]<noun-food-fruit-yellow> [rs:5;,\s]{[rn]}"));
            package.Save("TestPackage.rantpkg");

            package = RantPackage.Load("TestPackage.rantpkg");
            rant.LoadPackage(package);

            Assert.AreEqual("Banana 1, 2, 3, 4, 5", rant.DoName("TestProgram").Main);
            Assert.AreEqual("TestPackage", package.ID);
            Assert.AreEqual("This is a test.", package.Description);
            Assert.AreEqual("Test Package?!", package.Title);
            Assert.AreEqual("1.1.0", package.Version.ToString());
        }
예제 #7
0
        public static void Run()
        {
            var pkg             = new RantPackage();
            var paths           = GetPaths();
            var compress        = Property("compression", "true") == "true";
            var stringTableMode = int.Parse(Property("string-table", "1"));

            if (stringTableMode < 0 || stringTableMode > 2)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Invalid string table mode.");
                Console.ResetColor();
                return;
            }

            var modeEnum = (BsonStringTableMode)stringTableMode;

            Console.WriteLine("Packing...");

            var contentDir = Path.GetFullPath(paths.Length == 0 ? Environment.CurrentDirectory : paths[0]);

            Pack(pkg, contentDir);

            string outputPath;

            if (!Flag("old"))
            {
                var infoPath = Path.Combine(contentDir, "rantpkg.json");
                if (!File.Exists(infoPath))
                {
                    throw new FileNotFoundException("rantpkg.json missing from root directory.");
                }

                var info = JsonConvert.DeserializeObject <PackInfo>(File.ReadAllText(infoPath));
                pkg.Title       = info.Title;
                pkg.Authors     = info.Authors;
                pkg.Version     = RantPackageVersion.Parse(!String.IsNullOrWhiteSpace(Property("version")) ? Property("version") : info.Version);
                pkg.Description = info.Description;
                pkg.ID          = info.ID;
                pkg.Tags        = info.Tags;
                foreach (var dep in info.Dependencies)
                {
                    pkg.AddDependency(dep);
                }

                if (!String.IsNullOrWhiteSpace(info.OutputPath))
                {
                    outputPath = Path.Combine(contentDir, info.OutputPath, $"{pkg.ID}-{pkg.Version}.rantpkg");
                    Directory.CreateDirectory(Path.GetDirectoryName(outputPath));
                }
                else
                {
                    outputPath = Path.Combine(Directory.GetParent(contentDir).FullName, $"{pkg.ID}-{pkg.Version}.rantpkg");
                }

                Console.WriteLine($"String table mode: {modeEnum}");
                Console.WriteLine($"Compression: {(compress ? "yes" : "no")}");

                Console.WriteLine(compress ? "Compressing and saving..." : "Saving...");
                pkg.Save(outputPath, compress, modeEnum);
            }
            else
            {
                outputPath = Property("out", Path.Combine(
                                          Directory.GetParent(Environment.CurrentDirectory).FullName,
                                          Path.GetFileName(Environment.CurrentDirectory) + ".rantpkg"));
                Console.WriteLine("Saving...");
                pkg.SaveOld(outputPath);
            }

            Console.WriteLine("\nPackage saved to " + outputPath);

            Console.ResetColor();
        }
예제 #8
0
파일: PackCommand.cs 프로젝트: sizzles/Rant
        protected override void OnRun()
        {
            var  pkg      = new RantPackage();
            var  paths    = CmdLine.GetPaths();
            bool compress = !CmdLine.Flag("no-compress");

            Console.WriteLine("Packing...");

            string contentDir = Path.GetFullPath(paths.Length == 0 ? Environment.CurrentDirectory : paths[0]);

            Pack(pkg, contentDir);

            string outputPath;
            string infoPath = Path.Combine(contentDir, "rantpkg.json");

            if (!File.Exists(infoPath))
            {
                throw new FileNotFoundException("rantpkg.json missing from root directory.");
            }

            var info = JsonConvert.DeserializeObject <PackInfo>(File.ReadAllText(infoPath));

            pkg.Title       = info.Title;
            pkg.Authors     = info.Authors;
            pkg.Version     = RantPackageVersion.Parse(!string.IsNullOrWhiteSpace(CmdLine.Property("version")) ? CmdLine.Property("version") : info.Version);
            pkg.Description = info.Description;
            pkg.ID          = info.ID;
            pkg.Tags        = info.Tags;

            foreach (var dep in info.Dependencies)
            {
                pkg.AddDependency(dep);
            }

            // -out property overrides rantpkg.json's output path
            if (!string.IsNullOrWhiteSpace(CmdLine.Property("out")))
            {
                outputPath = Path.Combine(CmdLine.Property("out"), $"{pkg.ID}-{pkg.Version}.rantpkg");
                Directory.CreateDirectory(CmdLine.Property("out"));
            }
            // Otherwise, use rantpkg.json's "out" property
            else if (!string.IsNullOrWhiteSpace(info.OutputPath))
            {
                outputPath = Path.Combine(contentDir, info.OutputPath, $"{pkg.ID}-{pkg.Version}.rantpkg");
                Directory.CreateDirectory(Path.GetDirectoryName(outputPath));
            }
            // If it doesn't have one, put it in the package content directory
            else
            {
                outputPath = Path.Combine(Directory.GetParent(contentDir).FullName, $"{pkg.ID}-{pkg.Version}.rantpkg");
            }

            Console.WriteLine($"Compression: {(compress ? "yes" : "no")}");

            Console.WriteLine(compress ? "Compressing and saving..." : "Saving...");
            pkg.Save(outputPath, compress);

            Console.WriteLine("\nPackage saved to " + outputPath.Replace('\\', '/'));

            Console.ResetColor();
        }