AdvancePast() публичный Метод

Advance the stream until needle is encountered, then advance past it. If requireFind = true (which is the default) this method throws an error if needle can not be found.
public AdvancePast ( string needle, bool requireFind = true ) : void
needle string
requireFind bool
Результат void
Пример #1
0
        internal static SpriteBlock ParseSpriteDeclaration(ParserStream stream)
        {
            var start = stream.Position;

            stream.AdvancePast("(");

            var ignored = new StringBuilder();
            var adTo    = stream.ScanUntil(ignored, '"', '\'');

            if (ignored.ToString().Any(a => !char.IsWhiteSpace(a)))
            {
                Current.RecordError(ErrorType.Parser, Position.Create(start, stream.Position, Current.CurrentFilePath), "Expected quotation mark");
                throw new StoppedParsingException();
            }

            if (adTo == null)
            {
                Current.RecordError(ErrorType.Parser, Position.Create(start, stream.Position, Current.CurrentFilePath), "Expected quotation mark");
                throw new StoppedParsingException();
            }

            var nameStart = stream.Position;
            var name      = new StringBuilder();

            name.Append(adTo.Value);
            stream.ScanUntil(name, adTo.Value);
            name.Append(adTo.Value);
            var nameStop = stream.Position;

            stream.AdvancePast(")");

            var rules = ParseSpriteRules(stream);

            return(new SpriteBlock((QuotedStringValue)Value.Parse(name.ToString(), nameStart, nameStop, Current.CurrentFilePath), rules, start, stream.Position, Current.CurrentFilePath));
        }
Пример #2
0
        internal static MixinBlock ParseMixinDeclaration(string name, ParserStream stream)
        {
            var start   = stream.Position;
            var @params = new StringBuilder();

            stream.ScanUntil(@params, ')');

            name = name.Trim();

            if (name.Length == 0)
            {
                Current.RecordError(ErrorType.Parser, Position.Create(start, stream.Position, Current.CurrentFilePath), "Expected mixin name");
                throw new StoppedParsingException();
            }


            if (name.ToLower().In(ReservedWords))
            {
                Current.RecordError(ErrorType.Parser, Position.Create(start, stream.Position, Current.CurrentFilePath), "'" + name + "' cannot be the name of a mixin.");
            }

            stream.AdvancePast("{");

            return
                (new MixinBlock(
                     name,
                     ParseMixinDeclarationParameter(@params.ToString(), start),
                     ParseCssRules(InvalidSelector.Singleton, stream),
                     start,
                     stream.Position,
                     Current.CurrentFilePath
                     ));
        }
Пример #3
0
        internal static CssCharset ParseCharsetDirective(ParserStream stream)
        {
            var start = stream.Position;

            var ignored = new StringBuilder();
            var quote   = stream.ScanUntil(ignored, '"', '\'');

            if (quote == null)
            {
                Current.RecordError(ErrorType.Parser, Model.Position.Create(start, stream.Position, Current.CurrentFilePath), "Expected quotation mark");
                throw new StoppedParsingException();
            }

            var isoName = new StringBuilder();

            stream.ScanUntil(isoName, quote.Value);

            stream.AdvancePast(";");

            var isoNameStr = isoName.ToString();

            if (!CssCharset.KnownCharset(isoNameStr))
            {
                Current.RecordWarning(ErrorType.Parser, Model.Position.Create(start, stream.Position, Current.CurrentFilePath), "Unrecognized charset");
            }

            return(new CssCharset(new QuotedStringValue(isoNameStr), start, stream.Position));
        }
Пример #4
0
        internal static SpriteRule ParseSpriteRule(ParserStream stream)
        {
            var start = stream.Position;

            if (stream.Peek() != '@')
            {
                Current.RecordError(ErrorType.Parser, Position.Create(start, stream.Position, Current.CurrentFilePath), "Expected '@'");
                throw new StoppedParsingException();
            }

            stream.Advance(); // Advance past @

            var name = new StringBuilder();

            while (stream.HasMore() && stream.Peek() != '=')
            {
                name.Append(stream.Read());
            }

            stream.AdvancePast("="); // Advance past =

            var ignored = new StringBuilder();
            var quote   = stream.ScanUntil(ignored, '\'', '"');

            if (quote == null)
            {
                Current.RecordError(ErrorType.Parser, Position.Create(start, stream.Position, Current.CurrentFilePath), "Expected quotation mark");
                throw new StoppedParsingException();
            }

            var valueStart = stream.Position;
            var valueStr   = new StringBuilder();

            valueStr.Append(quote.Value);
            stream.ScanUntil(valueStr, quote.Value);
            valueStr.Append(quote.Value);

            stream.AdvancePast(";");

            var value = (QuotedStringValue)Value.Parse(valueStr.ToString(), valueStart, stream.Position, Current.CurrentFilePath);

            return(new SpriteRule(name.ToString().Trim(), value, start, stream.Position, Current.CurrentFilePath));
        }
Пример #5
0
        internal static List <SpriteRule> ParseSpriteRules(ParserStream stream)
        {
            var ret = new List <SpriteRule>();

            stream.AdvancePast("{");

            while (stream.HasMore() && stream.Peek() != '}')
            {
                var c = stream.Peek();

                if (char.IsWhiteSpace(c))
                {
                    stream.AdvancePastWhiteSpace();
                }
                else
                {
                    ret.Add(ParseSpriteRule(stream));
                }
            }

            stream.AdvancePast("}");

            return(ret);
        }
Пример #6
0
        internal static List <Property> ParseCssRules(Selector selector, ParserStream stream)
        {
            var ret = new List <Property>();

            while (stream.HasMore() && stream.Peek() != '}')
            {
                var c = stream.Peek();

                if (char.IsWhiteSpace(c))
                {
                    stream.AdvancePastWhiteSpace();
                }
                else
                {
                    ret.Add(ParseRule(stream));
                }
            }

            stream.AdvancePast("}");
            return(ret);
        }
Пример #7
0
        internal static MixinBlock ParseMixinDeclaration(string name, ParserStream stream)
        {
            var start = stream.Position;
            var @params = new StringBuilder();
            stream.ScanUntil(@params, ')');

            name = name.Trim();

            if (name.Length == 0)
            {
                Current.RecordError(ErrorType.Parser, Position.Create(start, stream.Position, Current.CurrentFilePath), "Expected mixin name");
                throw new StoppedParsingException();
            }

            if (name.ToLower().In(ReservedWords))
            {
                Current.RecordError(ErrorType.Parser, Position.Create(start, stream.Position, Current.CurrentFilePath), "'" + name + "' cannot be the name of a mixin.");
            }

            stream.AdvancePast("{");

            return
                new MixinBlock(
                    name,
                    ParseMixinDeclarationParameter(@params.ToString(), start),
                    ParseCssRules(InvalidSelector.Singleton, stream),
                    start,
                    stream.Position,
                    Current.CurrentFilePath
                );
        }
Пример #8
0
        internal static List<Property> ParseCssRules(Selector selector, ParserStream stream)
        {
            var ret = new List<Property>();

            while (stream.HasMore() && stream.Peek() != '}')
            {
                var c = stream.Peek();

                if (char.IsWhiteSpace(c))
                {
                    stream.AdvancePastWhiteSpace();
                }
                else
                {
                    ret.Add(ParseRule(stream));
                }
            }

            stream.AdvancePast("}");
            return ret;
        }
Пример #9
0
        internal static CssCharset ParseCharsetDirective(ParserStream stream)
        {
            var start = stream.Position;

            var ignored = new StringBuilder();
            var quote = stream.ScanUntil(ignored, '"', '\'');

            if (quote == null)
            {
                Current.RecordError(ErrorType.Parser, Model.Position.Create(start, stream.Position, Current.CurrentFilePath), "Expected quotation mark");
                throw new StoppedParsingException();
            }

            var isoName = new StringBuilder();
            stream.ScanUntil(isoName, quote.Value);

            stream.AdvancePast(";");

            var isoNameStr = isoName.ToString();

            if (!CssCharset.KnownCharset(isoNameStr))
            {
                Current.RecordWarning(ErrorType.Parser, Model.Position.Create(start, stream.Position, Current.CurrentFilePath), "Unrecognized charset");
            }

            return new CssCharset(new QuotedStringValue(isoNameStr), start, stream.Position);
        }
Пример #10
0
        internal static List<SpriteRule> ParseSpriteRules(ParserStream stream)
        {
            var ret = new List<SpriteRule>();

            stream.AdvancePast("{");

            while (stream.HasMore() && stream.Peek() != '}')
            {
                var c = stream.Peek();

                if (char.IsWhiteSpace(c))
                {
                    stream.AdvancePastWhiteSpace();
                }
                else
                {
                    ret.Add(ParseSpriteRule(stream));
                }
            }

            stream.AdvancePast("}");

            return ret;
        }
Пример #11
0
        internal static SpriteRule ParseSpriteRule(ParserStream stream)
        {
            var start = stream.Position;

            if (stream.Peek() != '@')
            {
                Current.RecordError(ErrorType.Parser, Position.Create(start, stream.Position, Current.CurrentFilePath), "Expected '@'");
                throw new StoppedParsingException();
            }

            stream.Advance(); // Advance past @

            var name = new StringBuilder();

            while (stream.HasMore() && stream.Peek() != '=')
            {
                name.Append(stream.Read());
            }

            stream.AdvancePast("="); // Advance past =

            var ignored = new StringBuilder();
            var quote = stream.ScanUntil(ignored, '\'', '"');

            if (quote == null)
            {
                Current.RecordError(ErrorType.Parser, Position.Create(start, stream.Position, Current.CurrentFilePath), "Expected quotation mark");
                throw new StoppedParsingException();
            }

            var valueStart = stream.Position;
            var valueStr = new StringBuilder();
            valueStr.Append(quote.Value);
            stream.ScanUntil(valueStr, quote.Value);
            valueStr.Append(quote.Value);

            stream.AdvancePast(";");

            var value = (QuotedStringValue)Value.Parse(valueStr.ToString(), valueStart, stream.Position, Current.CurrentFilePath);

            return new SpriteRule(name.ToString().Trim(), value, start, stream.Position, Current.CurrentFilePath);
        }
Пример #12
0
        internal static SpriteBlock ParseSpriteDeclaration(ParserStream stream)
        {
            var start = stream.Position;

            stream.AdvancePast("(");

            var ignored = new StringBuilder();
            var adTo = stream.ScanUntil(ignored, '"', '\'');

            if (ignored.ToString().Any(a => !char.IsWhiteSpace(a)))
            {
                Current.RecordError(ErrorType.Parser, Position.Create(start, stream.Position, Current.CurrentFilePath), "Expected quotation mark");
                throw new StoppedParsingException();
            }

            if (adTo == null)
            {
                Current.RecordError(ErrorType.Parser, Position.Create(start, stream.Position, Current.CurrentFilePath), "Expected quotation mark");
                throw new StoppedParsingException();
            }

            var nameStart = stream.Position;
            var name = new StringBuilder();
            name.Append(adTo.Value);
            stream.ScanUntil(name, adTo.Value);
            name.Append(adTo.Value);
            var nameStop = stream.Position;

            stream.AdvancePast(")");

            var rules = ParseSpriteRules(stream);

            return new SpriteBlock((QuotedStringValue)Value.Parse(name.ToString(), nameStart, nameStop, Current.CurrentFilePath), rules, start, stream.Position, Current.CurrentFilePath);
        }