Merge pull request #1775 from bhamiltoncx/csharp-char-streams
New C# CharStreams static factory class
This commit is contained in:
commit
828461337f
|
@ -725,13 +725,11 @@ public class BaseCSharpTest implements RuntimeTestSupport /*, SpecialRuntimeTest
|
||||||
"\n" +
|
"\n" +
|
||||||
"public class Test {\n" +
|
"public class Test {\n" +
|
||||||
" public static void Main(string[] args) {\n" +
|
" public static void Main(string[] args) {\n" +
|
||||||
" string inputData = File.ReadAllText(args[0], Encoding.UTF8);\n" +
|
" var input = CharStreams.fromPath(args[0]);\n" +
|
||||||
" using (FileStream fsOut = new FileStream(args[1], FileMode.Create, FileAccess.Write))\n" +
|
" using (FileStream fsOut = new FileStream(args[1], FileMode.Create, FileAccess.Write))\n" +
|
||||||
" using (FileStream fsErr = new FileStream(args[2], FileMode.Create, FileAccess.Write))\n" +
|
" using (FileStream fsErr = new FileStream(args[2], FileMode.Create, FileAccess.Write))\n" +
|
||||||
" using (TextWriter output = new StreamWriter(fsOut),\n" +
|
" using (TextWriter output = new StreamWriter(fsOut),\n" +
|
||||||
" errorOutput = new StreamWriter(fsErr)) {\n" +
|
" errorOutput = new StreamWriter(fsErr)) {\n" +
|
||||||
" CodePointCharStream input = new CodePointCharStream(inputData);\n" +
|
|
||||||
" input.name = args[0];\n" +
|
|
||||||
" <lexerName> lex = new <lexerName>(input, output, errorOutput);\n" +
|
" <lexerName> lex = new <lexerName>(input, output, errorOutput);\n" +
|
||||||
" CommonTokenStream tokens = new CommonTokenStream(lex);\n" +
|
" CommonTokenStream tokens = new CommonTokenStream(lex);\n" +
|
||||||
" <createParser>\n"+
|
" <createParser>\n"+
|
||||||
|
@ -780,8 +778,7 @@ public class BaseCSharpTest implements RuntimeTestSupport /*, SpecialRuntimeTest
|
||||||
"\n" +
|
"\n" +
|
||||||
"public class Test {\n" +
|
"public class Test {\n" +
|
||||||
" public static void Main(string[] args) {\n" +
|
" public static void Main(string[] args) {\n" +
|
||||||
" string inputData = File.ReadAllText(args[0], Encoding.UTF8);\n" +
|
" var input = CharStreams.fromPath(args[0]);\n" +
|
||||||
" ICharStream input = new CodePointCharStream(inputData);\n" +
|
|
||||||
" using (FileStream fsOut = new FileStream(args[1], FileMode.Create, FileAccess.Write))\n" +
|
" using (FileStream fsOut = new FileStream(args[1], FileMode.Create, FileAccess.Write))\n" +
|
||||||
" using (FileStream fsErr = new FileStream(args[2], FileMode.Create, FileAccess.Write))\n" +
|
" using (FileStream fsErr = new FileStream(args[2], FileMode.Create, FileAccess.Write))\n" +
|
||||||
" using (TextWriter output = new StreamWriter(fsOut),\n" +
|
" using (TextWriter output = new StreamWriter(fsOut),\n" +
|
||||||
|
|
|
@ -52,6 +52,7 @@
|
||||||
<Compile Include="Atn\ATNDeserializationOptions.cs" />
|
<Compile Include="Atn\ATNDeserializationOptions.cs" />
|
||||||
<Compile Include="Atn\ATNDeserializer.cs" />
|
<Compile Include="Atn\ATNDeserializer.cs" />
|
||||||
<Compile Include="Atn\ConflictInfo.cs" />
|
<Compile Include="Atn\ConflictInfo.cs" />
|
||||||
|
<Compile Include="CharStreams.cs" />
|
||||||
<Compile Include="Dfa\AcceptStateInfo.cs" />
|
<Compile Include="Dfa\AcceptStateInfo.cs" />
|
||||||
<Compile Include="IVocabulary.cs" />
|
<Compile Include="IVocabulary.cs" />
|
||||||
<Compile Include="Vocabulary.cs" />
|
<Compile Include="Vocabulary.cs" />
|
||||||
|
|
|
@ -54,6 +54,7 @@
|
||||||
<Compile Include="Atn\ATNDeserializationOptions.cs" />
|
<Compile Include="Atn\ATNDeserializationOptions.cs" />
|
||||||
<Compile Include="Atn\ATNDeserializer.cs" />
|
<Compile Include="Atn\ATNDeserializer.cs" />
|
||||||
<Compile Include="Atn\ConflictInfo.cs" />
|
<Compile Include="Atn\ConflictInfo.cs" />
|
||||||
|
<Compile Include="CharStreams.cs" />
|
||||||
<Compile Include="Dfa\AbstractEdgeMap.cs" />
|
<Compile Include="Dfa\AbstractEdgeMap.cs" />
|
||||||
<Compile Include="Dfa\AcceptStateInfo.cs" />
|
<Compile Include="Dfa\AcceptStateInfo.cs" />
|
||||||
<Compile Include="Dfa\ArrayEdgeMap.cs" />
|
<Compile Include="Dfa\ArrayEdgeMap.cs" />
|
||||||
|
|
|
@ -0,0 +1,93 @@
|
||||||
|
/* Copyright (c) 2012-2016 The ANTLR Project. All rights reserved.
|
||||||
|
* Use of this file is governed by the BSD 3-clause license that
|
||||||
|
* can be found in the LICENSE.txt file in the project root.
|
||||||
|
*/
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
using Antlr4.Runtime;
|
||||||
|
using Antlr4.Runtime.Misc;
|
||||||
|
using Antlr4.Runtime.Sharpen;
|
||||||
|
|
||||||
|
namespace Antlr4.Runtime
|
||||||
|
{
|
||||||
|
/// <summary>Utility class to create <see cref="ICharStream"/>s from various sources of
|
||||||
|
/// string data.
|
||||||
|
///
|
||||||
|
/// The methods in this utility class support the full range of
|
||||||
|
/// Unicode code points up to U+10FFFF, unlike <see cref="AntlrInputStream"/>,
|
||||||
|
/// which is limited to 16-bit Unicode code units up to U+FFFF.
|
||||||
|
/// </summary>
|
||||||
|
public static class CharStreams
|
||||||
|
{
|
||||||
|
/// <summary>Creates an <see cref="ICharStream"/> given a path to a UTF-8
|
||||||
|
/// encoded file on disk.
|
||||||
|
///
|
||||||
|
/// Reads the entire contents of the file into the result before returning.
|
||||||
|
/// </summary>
|
||||||
|
public static ICharStream fromPath(string path)
|
||||||
|
{
|
||||||
|
return fromPath(path, Encoding.UTF8);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Creates an <see cref="ICharStream"/> given a path to a
|
||||||
|
/// file on disk and the encoding of the bytes contained in the file.
|
||||||
|
///
|
||||||
|
/// Reads the entire contents of the file into the result before returning.
|
||||||
|
/// </summary>
|
||||||
|
public static ICharStream fromPath(string path, Encoding encoding)
|
||||||
|
{
|
||||||
|
var pathContents = File.ReadAllText(path, encoding);
|
||||||
|
var result = new CodePointCharStream(pathContents);
|
||||||
|
result.name = path;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Creates an <see cref="ICharStream"/> given an opened
|
||||||
|
/// <see cref="TextReader"/>.
|
||||||
|
///
|
||||||
|
/// Reads the entire contents of the TextReader then closes the reader before returning.
|
||||||
|
/// </summary>
|
||||||
|
public static ICharStream fromTextReader(TextReader textReader)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
var textReaderContents = textReader.ReadToEnd();
|
||||||
|
return new CodePointCharStream(textReaderContents);
|
||||||
|
} finally {
|
||||||
|
textReader.Dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Creates an <see cref="ICharStream"/> given an opened
|
||||||
|
/// <see cref="Stream"/> from which UTF-8 encoded bytes can be read.
|
||||||
|
///
|
||||||
|
/// Reads the entire contents of the stream into the result then
|
||||||
|
/// closes the stream before returning.
|
||||||
|
/// </summary>
|
||||||
|
public static ICharStream fromStream(Stream stream)
|
||||||
|
{
|
||||||
|
return fromStream(stream, Encoding.UTF8);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Creates an <see cref="ICharStream"/> given an opened
|
||||||
|
/// <see cref="Stream"/> as well as the encoding of the bytes
|
||||||
|
/// to be read from the stream.
|
||||||
|
///
|
||||||
|
/// Reads the entire contents of the stream into the result then
|
||||||
|
/// closes the stream before returning.
|
||||||
|
/// </summary>
|
||||||
|
public static ICharStream fromStream(Stream stream, Encoding encoding)
|
||||||
|
{
|
||||||
|
using (StreamReader sr = new StreamReader(stream, encoding, false)) {
|
||||||
|
return fromTextReader(sr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>Creates an <see cref="ICharStream"/> given a <see cref="string"/>.
|
||||||
|
/// </summary>
|
||||||
|
public static ICharStream fromstring(string s)
|
||||||
|
{
|
||||||
|
return new CodePointCharStream(s);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue