public AdvancePast ( string needle, bool requireFind = true ) : void | ||
needle | string | |
requireFind | bool | |
Результат | void |
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)); }
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 )); }
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)); }
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)); }
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); }
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); }
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 ); }
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; }
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); }
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; }
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); }
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); }