MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ANTLRNoCaseStringStream.java
1 /*
2  * Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
3  *
4  * This program is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; version 2 of the License.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program; if not, write to the Free Software
15  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
16  */
17 
18 /* Please see the following wiki for details of this functionality:
19  * http://www.antlr.org/wiki/pages/viewpage.action?pageId=1782
20  */
21 
22 package com.mysql.clusterj.jdbc.antlr;
23 
24 import java.io.File;
25 import java.io.FileInputStream;
26 import java.io.IOException;
27 import java.io.InputStreamReader;
28 
29 import org.antlr.runtime.ANTLRStringStream;
30 import org.antlr.runtime.CharStream;
31 
32 public class ANTLRNoCaseStringStream extends ANTLRStringStream {
33 
34  transient private String fileName;
35 
36  public ANTLRNoCaseStringStream() {
37  super();
38  }
39 
40  public ANTLRNoCaseStringStream(final String string) {
41  super(string);
42  }
43 
44  public ANTLRNoCaseStringStream(final File file) throws IOException {
45  this(file, null);
46  }
47 
48  public ANTLRNoCaseStringStream(final File file, final String encoding)
49  throws IOException {
50  this.fileName = file.getName();
51  load(file, encoding);
52  }
53 
54  @Override
55  public int LA(final int i) {
56  int idx = i;
57  if (idx == 0) {
58  return 0; // undefined
59  }
60  if (idx < 0) {
61  idx++;
62  if ((p + idx - 1) < 0) {
63  return CharStream.EOF; // invalid; no char before first char
64  }
65  }
66 
67  if ((p + idx - 1) >= n) {
68  return CharStream.EOF;
69  }
70  return Character.toUpperCase(data[p + idx - 1]);
71  }
72 
81  public int trueCaseLA(final int i) {
82  return super.LA(i);
83  }
84 
85  private void load(final File file, final String encoding) throws IOException {
86  if (file == null) {
87  return;
88  }
89  final int size = (int) file.length();
90  InputStreamReader isr;
91  final FileInputStream fis = new FileInputStream(file);
92  if (encoding != null) {
93  isr = new InputStreamReader(fis, encoding);
94  } else {
95  isr = new InputStreamReader(fis);
96  }
97  try {
98  data = new char[size];
99  super.n = isr.read(data);
100  } finally {
101  isr.close();
102  }
103  }
104 
105  public String getSourceName() {
106  return fileName;
107  }
108 }