Exemple #1
0
            public static DiffRange Parse(IStringReader reader)
            {
                var range = new DiffRange();

                reader.Skip("@@");
                reader.SkipWhitespace();
                reader.Skip('-');
                range.LeftFrom = reader.ReadInt();
                if (reader.Skip(','))
                {
                    range.LeftTo = range.LeftFrom + reader.ReadInt();
                }
                else
                {
                    range.LeftTo = range.LeftFrom;
                }
                reader.SkipWhitespace();
                reader.Skip('+');
                range.RightFrom = reader.ReadInt();
                if (reader.Skip(','))
                {
                    range.RightTo = range.RightFrom + reader.ReadInt();
                }
                else
                {
                    range.RightTo = range.RightFrom;
                }
                reader.SkipWhitespace();
                reader.Skip("@@");
                return(range);
            }
Exemple #2
0
        internal static IEnumerable <FileStatus> ParseStatus(IStringReader reader)
        {
            reader.SkipWhitespace();

            while (!reader.Done)
            {
                var    subReader = reader.ReadLine().AsReader();
                string status    = subReader.ReadUntilWhitespace().Trim();
                string path      = subReader.ReadLine().Trim();
                yield return(new FileStatus(path, ConvertStatus(status)));

                reader.SkipWhitespace();
            }
        }
        public ReadResults Parse(out ICoordinates result)
        {
            result = default;

            ReadResults readResults = ReadDouble(out double left);

            if (!readResults.Successful)
            {
                return(readResults);
            }
            if (UseBedrock)
            {
                StringReader.SkipWhitespace();
            }
            else
            {
                if (!StringReader.AtEndOfArgument())
                {
                    StringReader.SetCursor(Start);
                    return(ReadResults.Failure(CommandError.Vec3CoordinatesIncomplete().WithContext(StringReader)));
                }
                StringReader.Skip();
            }

            readResults = ReadDouble(out double up);
            if (!readResults.Successful)
            {
                return(readResults);
            }
            if (UseBedrock)
            {
                StringReader.SkipWhitespace();
            }
            else
            {
                if (!StringReader.AtEndOfArgument())
                {
                    StringReader.SetCursor(Start);
                    return(ReadResults.Failure(CommandError.Vec3CoordinatesIncomplete().WithContext(StringReader)));
                }
                StringReader.Skip();
            }

            readResults = ReadDouble(out double forwards);
            if (readResults.Successful)
            {
                result = new LocalCoordinates(left, up, forwards);
            }
            return(readResults);
        }
        internal static void ParseSummary(IStringReader reader, ChangeSetDetail detail)
        {
            reader.SkipWhitespace();

            while (!reader.Done)
            {
                string line = reader.ReadLine();

                if (ParserHelpers.IsSingleNewLine(line))
                {
                    break;
                }
                else if (line.Contains('\t'))
                {
                    // n	n	path
                    string[] parts = line.Split('\t');
                    int      insertions;
                    Int32.TryParse(parts[0], out insertions);
                    int deletions;
                    Int32.TryParse(parts[1], out deletions);
                    string path = parts[2].TrimEnd();

                    detail.Files[path] = new FileInfo {
                        Insertions = insertions,
                        Deletions  = deletions,
                        Binary     = parts[0] == "-" && parts[1] == "-"
                    };
                }
                else
                {
                    // n files changed, n insertions(+), n deletions(-)
                    ParserHelpers.ParseSummaryFooter(line, detail);
                }
            }
        }
Exemple #5
0
        public ReadResults ReadValue(out INbtTag result)
        {
            result = default;
            Reader.SkipWhitespace();
            if (!Reader.CanRead())
            {
                return(ReadResults.Failure(CommandError.ExpectedValue().WithContext(Reader)));
            }
            char c = Reader.Peek();

            if (c == '{')
            {
                return(ReadCompound(out result));
            }
            if (c == '[')
            {
                return(ReadList(out result));
            }
            return(ReadTypedValue(out result));
        }
        private static ReadResults ReadScores(EntitySelectorParser parser, IStringReader reader)
        {
            ReadResults readResults = reader.Expect('{');

            if (!readResults.Successful)
            {
                return(readResults);
            }

            reader.SkipWhitespace();
            while (reader.CanRead() && reader.Peek() != '}')
            {
                reader.SkipWhitespace();
                readResults = reader.ReadUnquotedString(out _);
                if (!readResults.Successful)
                {
                    return(readResults);
                }

                reader.SkipWhitespace();
                readResults = reader.Expect('=');
                if (!readResults.Successful)
                {
                    return(readResults);
                }

                reader.SkipWhitespace();
                readResults = new RangeParser <int>(reader).Read(int.TryParse, CommandError.InvalidInteger, int.MinValue, int.MaxValue, false, out Range <int> range);
                if (!readResults.Successful)
                {
                    return(readResults);
                }

                parser.AddArgument(new ParsedArgument <Range <int> >(range, false));
                reader.SkipWhitespace();
                if (reader.CanRead())
                {
                    char c = reader.Read();
                    if (c == ',')
                    {
                        continue;
                    }
                    if (c == '}')
                    {
                        return(ReadResults.Success());
                    }
                }
                return(ReadResults.Failure(CommandError.ExpectedCharacter('}').WithContext(reader)));
            }

            reader.SkipWhitespace();
            return(reader.Expect('}'));
        }
        public ReadResults ParseInteger(out ICoordinates result)
        {
            result = default;
            WorldCoordinateParser worldCoordinateParser = new WorldCoordinateParser(StringReader, UseBedrock);

            ReadResults readResults = worldCoordinateParser.ReadInteger(out WorldCoordinate x);

            if (!readResults.Successful)
            {
                return(readResults);
            }
            if (UseBedrock)
            {
                StringReader.SkipWhitespace();
            }
            else
            {
                if (!StringReader.AtEndOfArgument())
                {
                    StringReader.SetCursor(Start);
                    return(ReadResults.Failure(CommandError.Vec3CoordinatesIncomplete().WithContext(StringReader)));
                }
                StringReader.Skip();
            }

            readResults = worldCoordinateParser.ReadInteger(out WorldCoordinate y);
            if (!readResults.Successful)
            {
                return(readResults);
            }
            if (UseBedrock)
            {
                StringReader.SkipWhitespace();
            }
            else
            {
                if (!StringReader.AtEndOfArgument())
                {
                    StringReader.SetCursor(Start);
                    return(ReadResults.Failure(CommandError.Vec3CoordinatesIncomplete().WithContext(StringReader)));
                }
                StringReader.Skip();
            }

            readResults = worldCoordinateParser.ReadInteger(out WorldCoordinate z);
            if (readResults.Successful)
            {
                result = new WorldCoordinates(x, y, z);
            }
            return(readResults);
        }
        internal static ChangeSet ParseCommit(IStringReader reader)
        {
            // commit hash
            reader.ReadUntilWhitespace();
            reader.SkipWhitespace();
            string id = reader.ReadUntilWhitespace();

            // Merges will have (from hash) so we're skipping that
            reader.ReadLine();

            string author = null;
            string email  = null;
            string date   = null;

            while (!reader.Done)
            {
                string line = reader.ReadLine();

                if (ParserHelpers.IsSingleNewLine(line))
                {
                    break;
                }

                var    subReader = line.AsReader();
                string key       = subReader.ReadUntil(':');
                // Skip :
                subReader.Skip();
                subReader.SkipWhitespace();
                string value = subReader.ReadToEnd().Trim();

                if (key.Equals("Author", StringComparison.OrdinalIgnoreCase))
                {
                    // Author <email>
                    var authorReader = value.AsReader();
                    author = authorReader.ReadUntil('<').Trim();
                    authorReader.Skip();
                    email = authorReader.ReadUntil('>');
                }
                else if (key.Equals("Date", StringComparison.OrdinalIgnoreCase))
                {
                    date = value;
                }
            }

            var messageBuilder = new StringBuilder();

            while (!reader.Done)
            {
                string line = reader.ReadLine();

                if (ParserHelpers.IsSingleNewLine(line))
                {
                    break;
                }
                messageBuilder.Append(line);
            }

            string message = messageBuilder.ToString().Trim();

            return(new ChangeSet(id, author, email, message, DateTimeOffset.ParseExact(date, "ddd MMM d HH:mm:ss yyyy zzz", CultureInfo.InvariantCulture)));
        }
Exemple #9
0
 public static DiffRange Parse(IStringReader reader)
 {
     var range = new DiffRange();
     reader.Skip("@@");
     reader.SkipWhitespace();
     reader.Skip('-');
     range.LeftFrom = reader.ReadInt();
     if (reader.Skip(','))
     {
         range.LeftTo = range.LeftFrom + reader.ReadInt();
     }
     else
     {
         range.LeftTo = range.LeftFrom;
     }
     reader.SkipWhitespace();
     reader.Skip('+');
     range.RightFrom = reader.ReadInt();
     if (reader.Skip(','))
     {
         range.RightTo = range.RightFrom + reader.ReadInt();
     }
     else
     {
         range.RightTo = range.RightFrom;
     }
     reader.SkipWhitespace();
     reader.Skip("@@");
     return range;
 }
Exemple #10
0
        internal static void ParseSummary(IStringReader reader, ChangeSetDetail detail)
        {
            reader.SkipWhitespace();

            while (!reader.Done)
            {
                string line = reader.ReadLine();

                if (ParserHelpers.IsSingleNewLine(line))
                {
                    break;
                }
                else if (line.Contains('\t'))
                {
                    // n	n	path
                    string[] parts = line.Split('\t');
                    int insertions;
                    Int32.TryParse(parts[0], out insertions);
                    int deletions;
                    Int32.TryParse(parts[1], out deletions);
                    string path = parts[2].TrimEnd();

                    detail.Files[path] = new FileInfo
                    {
                        Insertions = insertions,
                        Deletions = deletions,
                        Binary = parts[0] == "-" && parts[1] == "-"
                    };
                }
                else
                {
                    // n files changed, n insertions(+), n deletions(-)
                    ParserHelpers.ParseSummaryFooter(line, detail);
                }
            }
        }
Exemple #11
0
        internal static IEnumerable<FileStatus> ParseStatus(IStringReader reader)
        {
            reader.SkipWhitespace();

            while (!reader.Done)
            {
                var subReader = reader.ReadLine().AsReader();
                string status = subReader.ReadUntilWhitespace().Trim();
                string path = subReader.ReadLine().Trim();
                yield return new FileStatus(path, ConvertStatus(status));
                reader.SkipWhitespace();
            }
        }
Exemple #12
0
        internal static ChangeSet ParseCommit(IStringReader reader)
        {
            // commit hash
            reader.ReadUntilWhitespace();
            reader.SkipWhitespace();
            string id = reader.ReadUntilWhitespace();

            // Merges will have (from hash) so we're skipping that
            reader.ReadLine();

            string author = null;
            string email = null;
            string date = null;

            while (!reader.Done)
            {
                string line = reader.ReadLine();

                if (ParserHelpers.IsSingleNewLine(line))
                {
                    break;
                }

                var subReader = line.AsReader();
                string key = subReader.ReadUntil(':');
                // Skip :
                subReader.Skip();
                subReader.SkipWhitespace();
                string value = subReader.ReadToEnd().Trim();

                if (key.Equals("Author", StringComparison.OrdinalIgnoreCase))
                {
                    // Author <email>
                    var authorReader = value.AsReader();
                    author = authorReader.ReadUntil('<').Trim();
                    authorReader.Skip();
                    email = authorReader.ReadUntil('>');
                }
                else if (key.Equals("Date", StringComparison.OrdinalIgnoreCase))
                {
                    date = value;
                }
            }

            var messageBuilder = new StringBuilder();
            while (!reader.Done)
            {
                string line = reader.ReadLine();

                if (ParserHelpers.IsSingleNewLine(line))
                {
                    break;
                }
                messageBuilder.Append(line);
            }

            string message = messageBuilder.ToString();
            return new ChangeSet(id, author, email, message, DateTimeOffset.ParseExact(date, "ddd MMM d HH:mm:ss yyyy zzz", CultureInfo.InvariantCulture));
        }
        private static ReadResults ReadAdvancements(EntitySelectorParser parser, IStringReader reader)
        {
            ReadResults readResults = reader.Expect('{');

            if (!readResults.Successful)
            {
                return(readResults);
            }

            reader.SkipWhitespace();
            while (reader.CanRead() && reader.Peek() != '}')
            {
                reader.SkipWhitespace();
                readResults = ResourceLocation.TryRead(reader, out ResourceLocation advancement);
                if (!readResults.Successful)
                {
                    return(readResults);
                }

                reader.SkipWhitespace();
                readResults = reader.Expect('=');
                if (!readResults.Successful)
                {
                    return(readResults);
                }

                reader.SkipWhitespace();
                if (reader.CanRead() && reader.Peek() == '{')
                {
                    reader.Skip();
                    reader.SkipWhitespace();
                    while (reader.CanRead() && reader.Peek() != '}')
                    {
                        reader.SkipWhitespace();
                        readResults = reader.ReadUnquotedString(out _);
                        if (!readResults.Successful)
                        {
                            return(readResults);
                        }

                        reader.SkipWhitespace();
                        readResults = reader.Expect('=');
                        if (!readResults.Successful)
                        {
                            return(readResults);
                        }

                        reader.SkipWhitespace();
                        readResults = reader.ReadBoolean(out _);
                        if (!readResults.Successful)
                        {
                            return(readResults);
                        }

                        reader.SkipWhitespace();
                        if (reader.CanRead())
                        {
                            char c = reader.Read();
                            if (c == ',')
                            {
                                continue;
                            }
                            if (c == '}')
                            {
                                break;
                            }
                        }
                    }
                }
                else
                {
                    readResults = reader.ReadBoolean(out _);
                    if (!readResults.Successful)
                    {
                        return(readResults);
                    }
                }

                parser.AddArgument(new ParsedArgument <Advancement>(new Advancement(advancement), false));
                reader.SkipWhitespace();
                if (reader.CanRead())
                {
                    char c = reader.Read();
                    if (c == ',')
                    {
                        continue;
                    }
                    if (c == '}')
                    {
                        return(ReadResults.Success());
                    }
                }
                return(ReadResults.Failure(CommandError.ExpectedCharacter('}').WithContext(reader)));
            }

            reader.SkipWhitespace();
            return(reader.Expect('}'));
        }
        private ReadResults ReadBlockStates(out Dictionary <string, string> result)
        {
            result = new Dictionary <string, string>();

            ReadResults readResults = StringReader.Expect('[');

            if (!readResults.Successful)
            {
                return(readResults);
            }
            StringReader.SkipWhitespace();

            while (StringReader.CanRead() && StringReader.Peek() != ']')
            {
                StringReader.SkipWhitespace();
                int start = StringReader.GetCursor();

                readResults = StringReader.ReadString(out string property);
                if (!readResults.Successful)
                {
                    return(readResults);
                }
                if (result.ContainsKey(property))
                {
                    StringReader.SetCursor(start);
                    return(ReadResults.Failure(CommandError.DuplicateBlockProperty(Block, property).WithContext(StringReader)));
                }

                if (!IsTag && !Resources.Blocks.ContainsProperty(Block, property))
                {
                    StringReader.SetCursor(start);
                    return(ReadResults.Failure(CommandError.UnknownBlockProperty(Block, property).WithContext(StringReader)));
                }

                StringReader.SkipWhitespace();
                start = StringReader.GetCursor();

                if (!StringReader.CanRead() || StringReader.Peek() != '=')
                {
                    return(ReadResults.Failure(CommandError.ExpectedValueForBlockProperty(Block, property)));
                }
                StringReader.Skip();

                StringReader.SkipWhitespace();
                readResults = StringReader.ReadString(out string value);
                if (!readResults.Successful)
                {
                    return(readResults);
                }

                if (!IsTag && !Resources.Blocks.PropertyContainsValue(Block, property, value))
                {
                    StringReader.SetCursor(start);
                    return(ReadResults.Failure(CommandError.UnknownBlockPropertyValue(Block, property, value).WithContext(StringReader)));
                }

                result.Add(property, value);

                StringReader.SkipWhitespace();
                if (StringReader.CanRead() && StringReader.Peek() == ',')
                {
                    StringReader.Skip();
                    continue;
                }
                break;
            }

            if (!StringReader.CanRead() || StringReader.Peek() != ']')
            {
                return(ReadResults.Failure(CommandError.UnclosedBlockStateProperties().WithContext(StringReader)));
            }
            StringReader.Skip();

            return(ReadResults.Success());
        }
        private ReadResults ParseSelector()
        {
            if (!Reader.CanRead())
            {
                Reader.SetCursor(Start);
                return(ReadResults.Failure(CommandError.MissingSelectorType().WithContext(Reader)));
            }
            int  currentPosition = Reader.GetCursor();
            char c = Reader.Read();

            switch (c)
            {
            case 'p':
                MaxResults       = 1;
                IncludesEntities = false;
                IsSelf           = false;
                SelectorType     = SelectorType.NearestPlayer;
                TypeLimited      = true;
                Sorted           = false;
                break;

            case 'a':
                MaxResults       = int.MaxValue;
                IncludesEntities = false;
                IsSelf           = false;
                SelectorType     = SelectorType.AllPlayers;
                TypeLimited      = true;
                Sorted           = false;
                break;

            case 'r':
                MaxResults       = 1;
                IncludesEntities = false;
                IsSelf           = false;
                SelectorType     = SelectorType.RandomPlayer;
                TypeLimited      = true;
                Sorted           = false;
                break;

            case 's':
                MaxResults       = 1;
                IncludesEntities = false;
                IsSelf           = true;
                SelectorType     = SelectorType.Self;
                TypeLimited      = false;
                Sorted           = true;
                break;

            case 'e':
                MaxResults       = int.MaxValue;
                IncludesEntities = true;
                IsSelf           = false;
                SelectorType     = SelectorType.AllEntities;
                TypeLimited      = false;
                Sorted           = false;
                break;

            default:
                Reader.SetCursor(currentPosition);
                return(ReadResults.Failure(CommandError.UnknownSelectorType(c).WithContext(Reader)));
            }
            if (UseBedrock)
            {
                currentPosition = Reader.GetCursor();
                Reader.SkipWhitespace();
                if (!Reader.CanRead() || Reader.Peek() != '[')
                {
                    Reader.SetCursor(currentPosition);
                }
            }
            if (Reader.CanRead() && Reader.Peek() == '[')
            {
                Reader.Skip();
                ReadResults readResults = ParseOptions();
                if (!readResults.Successful)
                {
                    return(readResults);
                }
            }
            return(ReadResults.Success());
        }