// 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
}
}