Exemplo n.º 1
0
        private static void ReadCommand(IParser parser, FileContainer.Message.Page page)
        {
            parser.Expect <MappingStart>();

            var    cmdType    = parser.Expect <Scalar>();
            var    type       = (CommandType)Enum.Parse(typeof(CommandType), cmdType.Value);
            string symbol     = string.Empty;
            var    parameters = new List <string>();

            switch (type)
            {
            case CommandType.UNKNOWN_TYPE:
            case CommandType.Other:
                parser.Expect <SequenceStart>();
                symbol = parser.Expect <Scalar>().Value;
                while (parser.Allow <SequenceEnd>() == null)
                {
                    parameters.Add(parser.Expect <Scalar>().Value);
                }
                break;

            case CommandType.Format:
            case CommandType.PageEnd:
                symbol = parser.Expect <Scalar>().Value;
                break;

            default:
                parser.Expect <SequenceStart>();
                while (parser.Allow <SequenceEnd>() == null)
                {
                    parameters.Add(parser.Expect <Scalar>().Value);
                }
                break;
            }

            var cmd = new Command(symbol, parameters.ToArray(), type);

            page.Commands.Add(cmd);
            parser.Expect <MappingEnd>();
        }
Exemplo n.º 2
0
        private static void ReadPage(IParser parser, FileContainer.Message msg)
        {
            var page = new FileContainer.Message.Page();

            //Commands
            parser.Expect <MappingStart>();
            var cmdsName = parser.Expect <Scalar>();

            if (cmdsName.Value != nameof(page.Commands))
            {
                throw new YamlException($"\"{nameof(page.Commands)}\" scalar expected.");
            }

            parser.Expect <SequenceStart>();
            while (parser.Allow <SequenceEnd>() == null)
            {
                ReadCommand(parser, page);
            }
            parser.Expect <MappingEnd>();

            //Comments
            parser.Expect <MappingStart>();
            var commentsName = parser.Expect <Scalar>();

            if (commentsName.Value != nameof(page.Comments))
            {
                throw new YamlException($"\"{nameof(page.Comments)}\" scalar expected.");
            }

            parser.Expect <MappingStart>();
            while (parser.Allow <MappingEnd>() == null)
            {
                var commentIndex   = parser.Expect <Scalar>();
                var commentContent = parser.Expect <Scalar>();

                page.Comments.Add(Convert.ToInt32(commentIndex.Value), commentContent.Value);
            }
            parser.Expect <MappingEnd>();

            //Dialogue
            parser.Expect <MappingStart>();
            var dialogeName = parser.Expect <Scalar>();

            if (dialogeName.Value != nameof(page.SpokenLine))
            {
                throw new YamlException($"\"{nameof(page.SpokenLine)}\" scalar expected.");
            }

            string[] dialogue = parser.Expect <Scalar>().Value.Split(new[] { "\n" }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string str in dialogue)
            {
                page.SpokenLine.Add(str.Trim());
            }

            parser.Expect <MappingEnd>();

            //Page end
            parser.Expect <MappingStart>();
            var pageEnd = parser.Expect <Scalar>();

            if (pageEnd.Value != CommandType.PageEnd.ToString())
            {
                throw new YamlException($"\"{CommandType.PageEnd}\" scalar expected.");
            }

            var symbol = parser.Expect <Scalar>();

            if (symbol.Value != string.Empty)
            {
                var pgEndCmd = new Command(symbol.Value, new string[0], CommandType.PageEnd);
                page.Commands.Add(pgEndCmd);
            }

            parser.Expect <MappingEnd>();
            msg.Pages.Add(page);
        }
Exemplo n.º 3
0
        private static void EmitPage(IEmitter emitter, FileContainer.Message.Page page)
        {
            //Commands
            emitter.Emit(new MappingStart());
            emitter.Emit(new Scalar(nameof(page.Commands)));

            emitter.Emit(new SequenceStart(null, null, true, SequenceStyle.Block));
            foreach (Command cmd in page)
            {
                if (cmd.Type != CommandType.PageEnd)
                {
                    EmitCommand(emitter, cmd);
                }
            }

            emitter.Emit(new SequenceEnd());
            emitter.Emit(new MappingEnd());

            //Comments
            emitter.Emit(new MappingStart());
            emitter.Emit(new Scalar(nameof(page.Comments)));

            emitter.Emit(new MappingStart());
            foreach (KeyValuePair <int, string> entry in page.Comments)
            {
                emitter.Emit(new Scalar(entry.Key.ToString()));
                emitter.Emit(new Scalar(null, null, entry.Value, ScalarStyle.DoubleQuoted, false, true));
            }

            emitter.Emit(new MappingEnd());
            emitter.Emit(new MappingEnd());

            //Dialogue
            emitter.Emit(new MappingStart());
            emitter.Emit(new Scalar(nameof(page.SpokenLine)));

            string line = string.Join(Environment.NewLine, page.SpokenLine);

            emitter.Emit(new Scalar(null, null, line, ScalarStyle.Literal, true, false));

            emitter.Emit(new MappingEnd());

            //Page end
            emitter.Emit(new MappingStart());
            emitter.Emit(new Scalar(CommandType.PageEnd.ToString()));

            foreach (Command cmd in page)
            {
                if (cmd.Type == CommandType.PageEnd)
                {
                    emitter.Emit(new Scalar(cmd.Symbol));
                    emitter.Emit(new MappingEnd());
                    return;
                }
            }

            emitter.Emit(new Scalar(string.Empty));
            emitter.Emit(new MappingEnd());

            foreach (Command cmd in page)
            {
                if (cmd.Type == CommandType.PageEnd)
                {
                    EmitCommand(emitter, cmd);
                }
            }
        }