Exemplo n.º 1
0
        protected override Maybe <IReportNode> Execute(TextParser p)
        {
            if (!Mem(p.Between("(", ")")))
            {
                return(Error(LastResult));
            }
            var content = LastResult.Value;

            Maybe <int> x = content.SkipWhitespaces().Integer();

            if (!x)
            {
                return(Error(x));
            }

            Maybe <int> y = content.SkipWhitespaces().After(",").SkipWhitespaces().Integer();

            if (!y)
            {
                return(Error(y));
            }

            Maybe <int>    z     = Maybe <int> .NA;
            Maybe <string> label = Maybe <string> .NA;

            if (content.SkipWhitespaces().After(","))
            {
                z = content.SkipWhitespaces().Integer();
                content.SkipWhitespaces();
                label = content.Between("<", ">").AsString();
            }

            content.Try(parser => {
                if (parser.SkipWhitespaces().After(","))
                {
                    z = parser.SkipWhitespaces().Integer();
                    parser.SkipWhitespaces();
                    label = parser.Between("<", ">").AsString();

                    return(new Maybe <object>(null));
                }

                return(Maybe <object> .NA);
            });

            return(Ok(ReportNode.Object(
                          ReportNode.Int("x", x),
                          ReportNode.Int("y", y),
                          z ? ReportNode.Int("z", z) : null,
                          label ? ReportNode.Str("label", label) : null
                          )));
        }
Exemplo n.º 2
0
        protected override Maybe <IReportNode> Execute(TextParser p)
        {
            var weight = p.After("Weight:").SkipWhitespaces().Integer();

            if (!weight)
            {
                return(Error(weight));
            }

            return(Ok(ReportNode.Bag(
                          ReportNode.Int("weight", weight)
                          )));
        }
Exemplo n.º 3
0
        protected override Maybe <IReportNode> Execute(TextParser p)
        {
            var capacities = p.After("Capacity:").SkipWhitespaces();

            if (!capacities)
            {
                return(Error(capacities));
            }

            var flying = capacities.Integer();

            if (!flying)
            {
                return(Error(flying));
            }

            var riding = capacities.After("/").Integer();

            if (!riding)
            {
                return(Error(riding));
            }

            var walking = capacities.After("/").Integer();

            if (!walking)
            {
                return(Error(walking));
            }

            var swimming = capacities.After("/").Integer();

            if (!swimming)
            {
                return(Error(swimming));
            }

            return(Ok(ReportNode.Bag(
                          ReportNode.Key("capacity", ReportNode.Object(
                                             ReportNode.Int("flying", flying),
                                             ReportNode.Int("riding", riding),
                                             ReportNode.Int("walking", walking),
                                             ReportNode.Int("swimming", swimming)
                                             ))
                          )));
        }
Exemplo n.º 4
0
        protected override Maybe <IReportNode> Execute(TextParser p)
        {
            var name = p.Before("[").SkipWhitespacesBackwards().AsString();

            if (!name)
            {
                return(Error(name));
            }

            var code = p.Between("[", "]").AsString();

            if (!code)
            {
                return(Error(code));
            }

            p.PushBookmark();
            var level = p.SkipWhitespaces().Integer();
            var days  = Maybe <int> .NA;

            if (level)
            {
                p.RemoveBookmark();
                days = p.Try(parser => parser.SkipWhitespaces().Between("(", ")").Integer());
            }
            else
            {
                p.PopBookmark();
            }

            return(Ok(ReportNode.Object(
                          ReportNode.Str("name", name),
                          ReportNode.Str("code", code),
                          level ? ReportNode.Int("level", level) : null,
                          days ? ReportNode.Int("days", days) : null
                          )));
        }