// Copyright 2005, 2006 - Morten Nielsen (www.iter.dk) // // This file is part of SharpMap. // SharpMap is free software; you can redistribute it and/or modify // it under the terms of the GNU Lesser General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // SharpMap is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Lesser General Public License for more details. // You should have received a copy of the GNU Lesser General Public License // along with SharpMap; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // SOURCECODE IS MODIFIED FROM ANOTHER WORK AND IS ORIGINALLY BASED ON GeoTools.NET: /* * Copyright (C) 2002 Urban Science Applications, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #region Using using System; using System.IO; using SharpMap.Converters.WellKnownText.IO; #endregion namespace SharpMap.Converters.WellKnownText { /// /// Reads a stream of Well Known Text (wkt) string and returns a stream of tokens. /// internal class WktStreamTokenizer : StreamTokenizer { #region Constructors /// /// Initializes a new instance of the WktStreamTokenizer class. /// /// The WktStreamTokenizer class ais in reading WKT streams. /// A TextReader that contains public WktStreamTokenizer(TextReader reader) : base(reader, true) { if (reader == null) { throw new ArgumentNullException("reader"); } } #endregion #region Methods /// /// Reads a token and checks it is what is expected. /// /// The expected token. internal void ReadToken(string expectedToken) { NextToken(); if (GetStringValue() != expectedToken) { throw new Exception(String.Format(Map.numberFormat_EnUS, "Expecting ('{3}') but got a '{0}' at line {1} column {2}.", GetStringValue(), LineNumber, Column, expectedToken)); } } /// /// Reads a string inside double quotes. /// /// /// White space inside quotes is preserved. /// /// The string inside the double quotes. public string ReadDoubleQuotedWord() { string word = ""; ReadToken("\""); NextToken(false); while (GetStringValue() != "\"") { word = word + GetStringValue(); NextToken(false); } return word; } /// /// Reads the authority and authority code. /// /// String to place the authority in. /// String to place the authority code in. public void ReadAuthority(ref string authority, ref long authorityCode) { //AUTHORITY["EPGS","9102"]] if (GetStringValue() != "AUTHORITY") { ReadToken("AUTHORITY"); } ReadToken("["); authority = ReadDoubleQuotedWord(); ReadToken(","); long.TryParse(ReadDoubleQuotedWord(), out authorityCode); ReadToken("]"); } #endregion } }