/// <summary> /// Initializes a new instance of the WktReader class that reads data from specific stream. /// </summary> /// <param name="input">The stream to read data from.</param> public WktReader(Stream input) { if (input == null) { throw new ArgumentNullException("input", "Input stream cannot be null"); } _inputReader = new StreamReader(input); _tokens = new WktTokensBuffer(WktTokenizer.Tokenize(_inputReader)); }
/// <summary> /// Processes text from TextReader and splits it into tokens. /// </summary> /// <param name="reader">The TextReader to read string from</param> /// <returns>The collection parsed tokens of the input string</returns> public static IEnumerable <WktToken> Tokenize(TextReader reader) { StringBuilder stringBuffer = new StringBuilder(); if (reader.Peek() == -1) { yield break; } char ch = (char)reader.Read(); stringBuffer.Append(ch); TokenType lastToken = WktTokenizer.GetTokenType(ch); while (reader.Peek() != -1) { ch = (char)reader.Read(); TokenType token = WktTokenizer.GetTokenType(ch); // tokens COMMA, LEFT_PARENTHESIS and RIGHT_PARENTHESIS can not be grupped together if ((token != lastToken) || token == TokenType.COMMA || token == TokenType.LEFT_PARENTHESIS || token == TokenType.RIGHT_PARENTHESIS) { yield return(new WktToken() { Type = lastToken, Value = stringBuffer.ToString() }); stringBuffer.Clear(); lastToken = token; } stringBuffer.Append(ch); } yield return(new WktToken() { Type = lastToken, Value = stringBuffer.ToString() }); }
/// <summary> /// Parses a Geometry from WKT string. /// </summary> /// <param name="wkt">The string with WKT representation of a Geometry.</param> /// <returns>The parsed Geometry.</returns> public static Geometry Parse(string wkt) { WktTokensBuffer tokens = new WktTokensBuffer(WktTokenizer.Tokenize(wkt)); return(WktReader.ParseGeometryTaggedText(tokens)); }
/// <summary> /// Initializes a new instance of the WktReader class that reads data from specific file. /// </summary> /// <param name="path">Path to the file to read data from.</param> public WktReader(string path) { _inputFileStream = new FileStream(path, FileMode.Open, FileAccess.Read); _inputReader = new StreamReader(_inputFileStream); _tokens = new WktTokensBuffer(WktTokenizer.Tokenize(_inputReader)); }
/// <summary> /// Splits text to tokens. /// </summary> /// <param name="text">The text to be splitted.</param> /// <returns>The list of parsed tokens of the input string.</returns> public static IEnumerable <WktToken> Tokenize(string text) { StringReader reader = new StringReader(text); return(WktTokenizer.Tokenize(reader)); }