private static MediaQuery ParseQuery(string value, IPosition forPositon) { int i = value.IndexOf(' '); if (i == -1) { i = value.Length; } var mediaType = value.Substring(0, i); Media media; if (!Enum.TryParse <Media>(mediaType, ignoreCase: true, result: out media)) { Current.RecordError(ErrorType.Parser, forPositon, "Unrecognized media type '" + mediaType + "'"); throw new StoppedParsingException(); } var clauses = new List <MediaQuery>(); var rest = value.Substring(i).Trim(); while (rest.StartsWith("and ", StringComparison.InvariantCultureIgnoreCase)) { int j = rest.IndexOf(" and ", "and ".Length, StringComparison.InvariantCultureIgnoreCase); if (j == -1) { j = rest.Length; } var clause = rest.Substring("and ".Length, j - "and ".Length).Trim(); clauses.Add(ParseMediaClause(clause, forPositon)); rest = rest.Substring(j).Trim(); } if (rest.Length != 0) { Current.RecordError(ErrorType.Parser, forPositon, "Unexpected tail on media query, found '" + rest + "'"); throw new StoppedParsingException(); } var mediaClause = new MediaType(media, forPositon); if (clauses.Count == 0) { return(mediaClause); } MediaQuery ret = mediaClause; foreach (var clause in clauses) { ret = new AndMedia(ret, clause, forPositon); } return(ret); }
private static MediaQuery ParseQuery(string value, IPosition forPositon) { int i = value.IndexOf(' '); if (i == -1) i = value.Length; var mediaType = value.Substring(0, i); Media media; if (!Enum.TryParse<Media>(mediaType, ignoreCase: true, result: out media)) { Current.RecordError(ErrorType.Parser, forPositon, "Unrecognized media type '" + mediaType + "'"); throw new StoppedParsingException(); } var clauses = new List<MediaQuery>(); var rest = value.Substring(i).Trim(); while (rest.StartsWith("and ", StringComparison.InvariantCultureIgnoreCase)) { int j = rest.IndexOf(" and ", "and ".Length, StringComparison.InvariantCultureIgnoreCase); if (j == -1) j = rest.Length; var clause = rest.Substring("and ".Length, j - "and ".Length).Trim(); clauses.Add(ParseMediaClause(clause, forPositon)); rest = rest.Substring(j).Trim(); } if (rest.Length != 0) { Current.RecordError(ErrorType.Parser, forPositon, "Unexpected tail on media query, found '" + rest + "'"); throw new StoppedParsingException(); } var mediaClause = new MediaType(media, forPositon); if (clauses.Count == 0) return mediaClause; MediaQuery ret = mediaClause; foreach (var clause in clauses) { ret = new AndMedia(ret, clause, forPositon); } return ret; }