Пример #1
0
        private Unit LoadUnit(Package package, FileRef unitFile)
        {
            var source    = Source.FromFile(unitFile);
            var tokenizer = new PonyTokenizer(Errors, source);

            tokenizer.Tokenize();
            var parser = new PonyParser(Errors, source, tokenizer.Tokens);
            var ptUnit = parser.Unit();
            var unit   = new Unit(ptUnit, unitFile, package);

            foreach (var use in unit.Source.Uses)
            {
                switch (use)
                {
                case PtUseUri useUri:
                    unit.Uses.Add(DecodeUseUri(useUri));
                    break;

                case PtUseFfi useFfi:
                    unit.Uses.Add(DecodeUseFfi(useFfi));
                    break;

                default:
                    throw new System.InvalidOperationException();
                }
            }
            return(unit);
        }
Пример #2
0
        public void TestEvalution()
        {
            string              docPath             = @"E:\桌面工作目录\正在进行的\My Little Pony Novel\无限维度\main.pony";
            ErrorListener       listener            = new ErrorListener();
            GlobalConfiguration globalConfiguration = GlobalConfiguration.Instance;
            PonyLexer           lexer  = new PonyLexer();
            PonyParser          parser = new PonyParser(lexer);

            lexer.errorListener  = globalConfiguration.ParserErrorListener;
            parser.errorListener = globalConfiguration.ParserErrorListener;
            PonyTextStructureBase structureBase = parser.Parse(File.ReadAllText(docPath));

            AssemblyInjectionManager injectionManager = new AssemblyInjectionManager();

            injectionManager.RegisterAssembly("PonyTextRenderer.Pdf", Assembly.GetAssembly(typeof(PdfRenderer)));
            injectionManager.RegisterAssembly("PonyText.Processor", Assembly.GetAssembly(typeof(PonyParser)));

            IProcessorFactory processor         = new ProcessorFactory(new ProcessorExperience(), injectionManager);
            SimpleTextContext simpleTextContext = new SimpleTextContext(processor, new TextElementFactory());

            processor.LoadProcessorFrom("PonyText.Processor");

            structureBase.Evaluate(simpleTextContext);

            PdfRenderer pdfRenderer = new PdfRenderer(simpleTextContext);

            simpleTextContext.GetCurrentContext().Render(pdfRenderer, simpleTextContext);

            using (FileStream fs = new FileStream("out.pdf", FileMode.Create)) {
                pdfRenderer.RenderContentTo(fs);
            }
        }
Пример #3
0
        public static PonyTextStructureBase CreateEvaluable(string ponyTextContent, string ponyTextIdentifier, PonyTextContext ctx)
        {
            ctx.Metadata.DependencyList.AddDependency(ponyTextIdentifier);

            PonyLexer  ponyLexer = new PonyLexer();
            PonyParser parser    = new PonyParser(ponyLexer);

            parser.errorListener    = GlobalConfiguration.Instance.ParserErrorListener;
            ponyLexer.errorListener = parser.errorListener;

            return(parser.Parse(ponyTextContent));
        }
Пример #4
0
        public void TestParser2()
        {
            string        docPath  = @"E:\桌面工作目录\正在进行的\Projects\PonyText\README_PonyText.pony";
            ErrorListener listener = new ErrorListener();
            PonyLexer     lexer    = new PonyLexer();
            PonyParser    parser   = new PonyParser(lexer);

            lexer.errorListener  = listener;
            parser.errorListener = listener;
            PonyTextStructureBase structureBase = parser.Parse(File.ReadAllText(docPath));

            Assert.IsNotNull(structureBase);
        }
Пример #5
0
        public void TestParser1()
        {
            string        docPath  = @"E:\桌面工作目录\正在进行的\My Little Pony Novel\无限维度\chapters\chap1.pony";
            ErrorListener listener = new ErrorListener();
            PonyLexer     lexer    = new PonyLexer();
            PonyParser    parser   = new PonyParser(lexer);

            lexer.errorListener  = listener;
            parser.errorListener = listener;
            PonyTextStructureBase structureBase = parser.Parse(File.ReadAllText(docPath));

            Assert.IsNotNull(structureBase);
        }
Пример #6
0
        public void TestEvalution2()
        {
            string        docPath  = @"E:\桌面工作目录\正在进行的\Projects\PonyText\README_PonyText.pony";
            ErrorListener listener = new ErrorListener();
            PonyLexer     lexer    = new PonyLexer();
            PonyParser    parser   = new PonyParser(lexer);

            lexer.errorListener  = listener;
            parser.errorListener = listener;

            PonyTextStructureBase    structureBase    = parser.Parse(File.ReadAllText(docPath));
            AssemblyInjectionManager injectionManager = new AssemblyInjectionManager();

            injectionManager.RegisterAssembly("PonyTextRenderer.Markdown", Assembly.GetAssembly(typeof(MarkdownRenderer)));
            injectionManager.RegisterAssembly("PonyText.Processor", Assembly.GetAssembly(typeof(PonyParser)));

            IProcessorFactory processor         = new ProcessorFactory(new ProcessorExperience(), injectionManager);
            SimpleTextContext simpleTextContext = new SimpleTextContext(processor, new TextElementFactory());

            processor.LoadProcessorFrom("PonyText.Processor");

            Assert.DoesNotThrow(() => {
                structureBase.Evaluate(simpleTextContext);
            });

            using (FileStream fs = new FileStream("dump.json", FileMode.Create)) {
                using (StreamWriter sw = new StreamWriter(fs)) {
                    sw.Write(simpleTextContext.GetCurrentContext().ToString());
                }
            }

            MarkdownRenderer stringRenderer = new MarkdownRenderer();

            simpleTextContext.GetCurrentContext().Render(stringRenderer, simpleTextContext);

            using (FileStream fs = new FileStream("out.md", FileMode.Create)) {
                stringRenderer.RenderContentTo(fs);
            }
        }
Пример #7
0
        private static bool PonyParse(Errors errors, ref int lines, int no, FileRef ponyFile)
        {
            Console.WriteLine($"{no}. {ponyFile}");

            var source = Source.FromFile(ponyFile);

            lines += source.LineCount;

            var tokenizer = new PonyTokenizer(errors, source);

            try
            {
                tokenizer.Tokenize();
            }
            catch (JokeException joke)
            {
                joke.Error.Description.Describe(Console.Out);

                return(false);
            }

            var parser = new PonyParser(errors, source, tokenizer.Tokens);

            try
            {
                var module = parser.Unit();

                errors.Describe(Console.Out);

                return(errors.NoError());
            }
            catch (JokeException joke)
            {
                joke.Error.Description.Describe(Console.Out);

                return(false);
            }
        }
Пример #8
0
 public Result(PonyParser parser)
 {
     Parser = parser;
 }