Merge remote-tracking branch 'upstream/master' into racefix2
This commit is contained in:
commit
eee59b9f7f
|
@ -82,7 +82,7 @@ Make sure to use two-stage parsing. See example in [bug report](https://github.c
|
|||
|
||||
```Java
|
||||
|
||||
CharStream input = new ANTLRFileStream(args[0]);
|
||||
CharStream input = CharStreams.fromPath(Paths.get(args[0]));
|
||||
ExprLexer lexer = new ExprLexer(input);
|
||||
CommonTokenStream tokens = new CommonTokenStream(lexer);
|
||||
ExprParser parser = new ExprParser(tokens);
|
||||
|
|
|
@ -30,7 +30,7 @@ public static ParseTree parse(String fileName,
|
|||
throws IOException
|
||||
{
|
||||
final Grammar g = Grammar.load(combinedGrammarFileName);
|
||||
LexerInterpreter lexEngine = g.createLexerInterpreter(new ANTLRFileStream(fileName));
|
||||
LexerInterpreter lexEngine = g.createLexerInterpreter(CharStreams.fromPath(Paths.get(fileName)));
|
||||
CommonTokenStream tokens = new CommonTokenStream(lexEngine);
|
||||
ParserInterpreter parser = g.createParserInterpreter(tokens);
|
||||
ParseTree t = parser.parse(g.getRule(startRule).index);
|
||||
|
@ -58,7 +58,7 @@ public static ParseTree parse(String fileNameToParse,
|
|||
{
|
||||
final LexerGrammar lg = (LexerGrammar) Grammar.load(lexerGrammarFileName);
|
||||
final Grammar pg = Grammar.load(parserGrammarFileName, lg);
|
||||
ANTLRFileStream input = new ANTLRFileStream(fileNameToParse);
|
||||
CharStream input = CharStreams.fromPath(Paths.get(fileNameToParse));
|
||||
LexerInterpreter lexEngine = lg.createLexerInterpreter(input);
|
||||
CommonTokenStream tokens = new CommonTokenStream(lexEngine);
|
||||
ParserInterpreter parser = pg.createParserInterpreter(tokens);
|
||||
|
|
|
@ -0,0 +1,68 @@
|
|||
# Lexers and Unicode text
|
||||
|
||||
Until ANTLR 4.7, generated lexers only supported part of the Unicode standard
|
||||
(code points up to `U+FFFF`).
|
||||
|
||||
With ANTLR 4.7 and later, lexers as well as all languages' runtimes
|
||||
support the full range of Unicode code points up to `U+10FFFF`, as
|
||||
long as the input `CharStream` is opened using `CharStreams.fromPath()`
|
||||
or the equivalent method for your runtime's language.
|
||||
|
||||
# Unicode Code Points in Lexer Grammars
|
||||
|
||||
To refer to Unicode [code points](https://en.wikipedia.org/wiki/Code_point)
|
||||
in lexer grammars, use the `\u` string escape. For example, to create
|
||||
a lexer rule for a single Cyrillic character by creating a range from
|
||||
`U+0400` to `U+04FF`:
|
||||
|
||||
```ANTLR
|
||||
CYRILLIC = ('\u0400'..'\u04FF');
|
||||
```
|
||||
|
||||
Unicode literals larger than U+FFFF must use the extended `\u{12345}` syntax.
|
||||
For example, to create a lexer rule for a selection of smiley faces
|
||||
from the [Emoticons Unicode block](http://www.unicode.org/charts/PDF/U1F600.pdf):
|
||||
|
||||
```ANTLR
|
||||
EMOTICONS = ('\u{1F600}' | '\u{1F602}' | '\u{1F615}');
|
||||
```
|
||||
|
||||
Finally, lexer char sets can include Unicode properties:
|
||||
|
||||
```ANTLR
|
||||
EMOJI = [\p{Emoji}];
|
||||
JAPANESE = [\p{Script=Hiragana}\p{Script=Katakana}\p{Script=Han}];
|
||||
NOT_CYRILLIC = [\P{Script=Cyrillic}];
|
||||
```
|
||||
|
||||
See [lexer-rules.md](lexer-rules.md#lexer-rule-elements) for more detail on Unicode
|
||||
escapes in lexer rules.
|
||||
|
||||
# CharStreams and UTF-8
|
||||
|
||||
If your lexer grammar contains code points larger than `U+FFFF`, your
|
||||
lexer client code must open the file using `CharStreams.fromPath()` or
|
||||
equivalent in your runtime's language, or input values larger than
|
||||
`U+FFFF` will *not* match.
|
||||
|
||||
For backwards compatibility, the existing `ANTLRInputStream` and
|
||||
`ANTLRFileStream` APIs only support Unicode code points up to `U+FFFF`.
|
||||
|
||||
The existing `TestRig` command-line interface supports all Unicode
|
||||
code points.
|
||||
|
||||
# Example
|
||||
|
||||
If you have generated a lexer named `UnicodeLexer`:
|
||||
|
||||
```Java
|
||||
public static void main(String[] args) {
|
||||
CharStream charStream = CharStreams.fromPath(Paths.get(args[0]));
|
||||
Lexer lexer = new UnicodeLexer(charStream);
|
||||
CommonTokenStream tokens = new CommonTokenStream(lexer);
|
||||
tokens.fill();
|
||||
for (Token token : tokens.getTokens()) {
|
||||
System.out.println("Got token: " + token.toString());
|
||||
}
|
||||
}
|
||||
```
|
|
@ -923,7 +923,7 @@ public class BaseJavaTest implements RuntimeTestSupport {
|
|||
"\n" +
|
||||
"public class Test {\n" +
|
||||
" public static void main(String[] args) throws Exception {\n" +
|
||||
" CharStream input = CharStreams.createWithUTF8(Paths.get(args[0]));\n" +
|
||||
" CharStream input = CharStreams.fromPath(Paths.get(args[0]));\n" +
|
||||
" <lexerName> lex = new <lexerName>(input);\n" +
|
||||
" CommonTokenStream tokens = new CommonTokenStream(lex);\n" +
|
||||
" <createParser>\n"+
|
||||
|
@ -980,7 +980,7 @@ public class BaseJavaTest implements RuntimeTestSupport {
|
|||
"\n" +
|
||||
"public class Test {\n" +
|
||||
" public static void main(String[] args) throws Exception {\n" +
|
||||
" CharStream input = CharStreams.createWithUTF8(Paths.get(args[0]));\n" +
|
||||
" CharStream input = CharStreams.fromPath(Paths.get(args[0]));\n" +
|
||||
" <lexerName> lex = new <lexerName>(input);\n" +
|
||||
" CommonTokenStream tokens = new CommonTokenStream(lex);\n" +
|
||||
" tokens.fill();\n" +
|
||||
|
|
|
@ -10,6 +10,7 @@ import static org.junit.Assert.assertEquals;
|
|||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.Reader;
|
||||
|
||||
import java.nio.channels.SeekableByteChannel;
|
||||
import java.nio.charset.CharacterCodingException;
|
||||
|
@ -20,6 +21,7 @@ import java.nio.file.Path;
|
|||
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.antlr.v4.runtime.CharStream;
|
||||
import org.antlr.v4.runtime.CharStreams;
|
||||
import org.antlr.v4.runtime.CodePointCharStream;
|
||||
|
||||
|
@ -36,16 +38,16 @@ public class TestCharStreams {
|
|||
public ExpectedException thrown = ExpectedException.none();
|
||||
|
||||
@Test
|
||||
public void createWithBMPStringHasExpectedSize() {
|
||||
CodePointCharStream s = CharStreams.createWithString("hello");
|
||||
public void fromBMPStringHasExpectedSize() {
|
||||
CharStream s = CharStreams.fromString("hello");
|
||||
assertEquals(5, s.size());
|
||||
assertEquals(0, s.index());
|
||||
assertEquals("hello", s.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createWithSMPStringHasExpectedSize() {
|
||||
CodePointCharStream s = CharStreams.createWithString(
|
||||
public void fromSMPStringHasExpectedSize() {
|
||||
CharStream s = CharStreams.fromString(
|
||||
"hello \uD83C\uDF0E");
|
||||
assertEquals(7, s.size());
|
||||
assertEquals(0, s.index());
|
||||
|
@ -53,10 +55,10 @@ public class TestCharStreams {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void createWithBMPUTF8PathHasExpectedSize() throws Exception {
|
||||
public void fromBMPUTF8PathHasExpectedSize() throws Exception {
|
||||
Path p = folder.newFile().toPath();
|
||||
Files.write(p, "hello".getBytes(StandardCharsets.UTF_8));
|
||||
CodePointCharStream s = CharStreams.createWithUTF8(p);
|
||||
CharStream s = CharStreams.fromPath(p);
|
||||
assertEquals(5, s.size());
|
||||
assertEquals(0, s.index());
|
||||
assertEquals("hello", s.toString());
|
||||
|
@ -64,10 +66,10 @@ public class TestCharStreams {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void createWithSMPUTF8PathHasExpectedSize() throws Exception {
|
||||
public void fromSMPUTF8PathHasExpectedSize() throws Exception {
|
||||
Path p = folder.newFile().toPath();
|
||||
Files.write(p, "hello \uD83C\uDF0E".getBytes(StandardCharsets.UTF_8));
|
||||
CodePointCharStream s = CharStreams.createWithUTF8(p);
|
||||
CharStream s = CharStreams.fromPath(p);
|
||||
assertEquals(7, s.size());
|
||||
assertEquals(0, s.index());
|
||||
assertEquals("hello \uD83C\uDF0E", s.toString());
|
||||
|
@ -75,11 +77,11 @@ public class TestCharStreams {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void createWithBMPUTF8InputStreamHasExpectedSize() throws Exception {
|
||||
public void fromBMPUTF8InputStreamHasExpectedSize() throws Exception {
|
||||
Path p = folder.newFile().toPath();
|
||||
Files.write(p, "hello".getBytes(StandardCharsets.UTF_8));
|
||||
try (InputStream is = Files.newInputStream(p)) {
|
||||
CodePointCharStream s = CharStreams.createWithUTF8Stream(is);
|
||||
CharStream s = CharStreams.fromStream(is);
|
||||
assertEquals(5, s.size());
|
||||
assertEquals(0, s.index());
|
||||
assertEquals("hello", s.toString());
|
||||
|
@ -87,11 +89,11 @@ public class TestCharStreams {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void createWithSMPUTF8InputStreamHasExpectedSize() throws Exception {
|
||||
public void fromSMPUTF8InputStreamHasExpectedSize() throws Exception {
|
||||
Path p = folder.newFile().toPath();
|
||||
Files.write(p, "hello \uD83C\uDF0E".getBytes(StandardCharsets.UTF_8));
|
||||
try (InputStream is = Files.newInputStream(p)) {
|
||||
CodePointCharStream s = CharStreams.createWithUTF8Stream(is);
|
||||
CharStream s = CharStreams.fromStream(is);
|
||||
assertEquals(7, s.size());
|
||||
assertEquals(0, s.index());
|
||||
assertEquals("hello \uD83C\uDF0E", s.toString());
|
||||
|
@ -99,11 +101,11 @@ public class TestCharStreams {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void createWithBMPUTF8ChannelHasExpectedSize() throws Exception {
|
||||
public void fromBMPUTF8ChannelHasExpectedSize() throws Exception {
|
||||
Path p = folder.newFile().toPath();
|
||||
Files.write(p, "hello".getBytes(StandardCharsets.UTF_8));
|
||||
try (SeekableByteChannel c = Files.newByteChannel(p)) {
|
||||
CodePointCharStream s = CharStreams.createWithUTF8Channel(
|
||||
CharStream s = CharStreams.fromChannel(
|
||||
c, 4096, CodingErrorAction.REPLACE, "foo");
|
||||
assertEquals(5, s.size());
|
||||
assertEquals(0, s.index());
|
||||
|
@ -113,11 +115,11 @@ public class TestCharStreams {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void createWithSMPUTF8ChannelHasExpectedSize() throws Exception {
|
||||
public void fromSMPUTF8ChannelHasExpectedSize() throws Exception {
|
||||
Path p = folder.newFile().toPath();
|
||||
Files.write(p, "hello \uD83C\uDF0E".getBytes(StandardCharsets.UTF_8));
|
||||
try (SeekableByteChannel c = Files.newByteChannel(p)) {
|
||||
CodePointCharStream s = CharStreams.createWithUTF8Channel(
|
||||
CharStream s = CharStreams.fromChannel(
|
||||
c, 4096, CodingErrorAction.REPLACE, "foo");
|
||||
assertEquals(7, s.size());
|
||||
assertEquals(0, s.index());
|
||||
|
@ -127,13 +129,13 @@ public class TestCharStreams {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void createWithInvalidUTF8BytesChannelReplacesWithSubstCharInReplaceMode()
|
||||
public void fromInvalidUTF8BytesChannelReplacesWithSubstCharInReplaceMode()
|
||||
throws Exception {
|
||||
Path p = folder.newFile().toPath();
|
||||
byte[] toWrite = new byte[] { (byte)0xCA, (byte)0xFE, (byte)0xFE, (byte)0xED };
|
||||
Files.write(p, toWrite);
|
||||
try (SeekableByteChannel c = Files.newByteChannel(p)) {
|
||||
CodePointCharStream s = CharStreams.createWithUTF8Channel(
|
||||
CharStream s = CharStreams.fromChannel(
|
||||
c, 4096, CodingErrorAction.REPLACE, "foo");
|
||||
assertEquals(3, s.size());
|
||||
assertEquals(0, s.index());
|
||||
|
@ -142,22 +144,22 @@ public class TestCharStreams {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void createWithInvalidUTF8BytesThrowsInReportMode() throws Exception {
|
||||
public void fromInvalidUTF8BytesThrowsInReportMode() throws Exception {
|
||||
Path p = folder.newFile().toPath();
|
||||
byte[] toWrite = new byte[] { (byte)0xCA, (byte)0xFE };
|
||||
Files.write(p, toWrite);
|
||||
try (SeekableByteChannel c = Files.newByteChannel(p)) {
|
||||
thrown.expect(CharacterCodingException.class);
|
||||
CharStreams.createWithUTF8Channel(c, 4096, CodingErrorAction.REPORT, "foo");
|
||||
CharStreams.fromChannel(c, 4096, CodingErrorAction.REPORT, "foo");
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createWithSMPUTF8SequenceStraddlingBufferBoundary() throws Exception {
|
||||
public void fromSMPUTF8SequenceStraddlingBufferBoundary() throws Exception {
|
||||
Path p = folder.newFile().toPath();
|
||||
Files.write(p, "hello \uD83C\uDF0E".getBytes(StandardCharsets.UTF_8));
|
||||
try (SeekableByteChannel c = Files.newByteChannel(p)) {
|
||||
CodePointCharStream s = CharStreams.createWithUTF8Channel(
|
||||
CharStream s = CharStreams.fromChannel(
|
||||
c,
|
||||
// Note this buffer size ensures the SMP code point
|
||||
// straddles the boundary of two buffers
|
||||
|
@ -169,4 +171,40 @@ public class TestCharStreams {
|
|||
assertEquals("hello \uD83C\uDF0E", s.toString());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void fromFileName() throws Exception {
|
||||
Path p = folder.newFile().toPath();
|
||||
Files.write(p, "hello \uD83C\uDF0E".getBytes(StandardCharsets.UTF_8));
|
||||
CharStream s = CharStreams.fromFileName(p.toString());
|
||||
assertEquals(7, s.size());
|
||||
assertEquals(0, s.index());
|
||||
assertEquals("hello \uD83C\uDF0E", s.toString());
|
||||
assertEquals(p.toString(), s.getSourceName());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void fromFileNameWithLatin1() throws Exception {
|
||||
Path p = folder.newFile().toPath();
|
||||
Files.write(p, "hello \u00CA\u00FE".getBytes(StandardCharsets.ISO_8859_1));
|
||||
CharStream s = CharStreams.fromFileName(p.toString(), StandardCharsets.ISO_8859_1);
|
||||
assertEquals(8, s.size());
|
||||
assertEquals(0, s.index());
|
||||
assertEquals("hello \u00CA\u00FE", s.toString());
|
||||
assertEquals(p.toString(), s.getSourceName());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void fromReader() throws Exception {
|
||||
Path p = folder.newFile().toPath();
|
||||
Files.write(p, "hello \uD83C\uDF0E".getBytes(StandardCharsets.UTF_8));
|
||||
try (Reader r = Files.newBufferedReader(p, StandardCharsets.UTF_8)) {
|
||||
CharStream s = CharStreams.fromReader(r);
|
||||
assertEquals(7, s.size());
|
||||
assertEquals(0, s.index());
|
||||
assertEquals("hello \uD83C\uDF0E", s.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,21 +26,21 @@ public class TestCodePointCharStream {
|
|||
|
||||
@Test
|
||||
public void emptyBytesHasSize0() {
|
||||
CodePointCharStream s = CharStreams.createWithString("");
|
||||
CodePointCharStream s = CharStreams.fromString("");
|
||||
assertEquals(0, s.size());
|
||||
assertEquals(0, s.index());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void emptyBytesLookAheadReturnsEOF() {
|
||||
CodePointCharStream s = CharStreams.createWithString("");
|
||||
CodePointCharStream s = CharStreams.fromString("");
|
||||
assertEquals(IntStream.EOF, s.LA(1));
|
||||
assertEquals(0, s.index());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void consumingEmptyStreamShouldThrow() {
|
||||
CodePointCharStream s = CharStreams.createWithString("");
|
||||
CodePointCharStream s = CharStreams.fromString("");
|
||||
thrown.expect(IllegalStateException.class);
|
||||
thrown.expectMessage("cannot consume EOF");
|
||||
s.consume();
|
||||
|
@ -48,13 +48,13 @@ public class TestCodePointCharStream {
|
|||
|
||||
@Test
|
||||
public void singleLatinCodePointHasSize1() {
|
||||
CodePointCharStream s = CharStreams.createWithString("X");
|
||||
CodePointCharStream s = CharStreams.fromString("X");
|
||||
assertEquals(1, s.size());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void consumingSingleLatinCodePointShouldMoveIndex() {
|
||||
CodePointCharStream s = CharStreams.createWithString("X");
|
||||
CodePointCharStream s = CharStreams.fromString("X");
|
||||
assertEquals(0, s.index());
|
||||
s.consume();
|
||||
assertEquals(1, s.index());
|
||||
|
@ -62,7 +62,7 @@ public class TestCodePointCharStream {
|
|||
|
||||
@Test
|
||||
public void consumingPastSingleLatinCodePointShouldThrow() {
|
||||
CodePointCharStream s = CharStreams.createWithString("X");
|
||||
CodePointCharStream s = CharStreams.fromString("X");
|
||||
s.consume();
|
||||
thrown.expect(IllegalStateException.class);
|
||||
thrown.expectMessage("cannot consume EOF");
|
||||
|
@ -71,14 +71,14 @@ public class TestCodePointCharStream {
|
|||
|
||||
@Test
|
||||
public void singleLatinCodePointLookAheadShouldReturnCodePoint() {
|
||||
CodePointCharStream s = CharStreams.createWithString("X");
|
||||
CodePointCharStream s = CharStreams.fromString("X");
|
||||
assertEquals('X', s.LA(1));
|
||||
assertEquals(0, s.index());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void multipleLatinCodePointsLookAheadShouldReturnCodePoints() {
|
||||
CodePointCharStream s = CharStreams.createWithString("XYZ");
|
||||
CodePointCharStream s = CharStreams.fromString("XYZ");
|
||||
assertEquals('X', s.LA(1));
|
||||
assertEquals(0, s.index());
|
||||
assertEquals('Y', s.LA(2));
|
||||
|
@ -89,20 +89,20 @@ public class TestCodePointCharStream {
|
|||
|
||||
@Test
|
||||
public void singleLatinCodePointLookAheadPastEndShouldReturnEOF() {
|
||||
CodePointCharStream s = CharStreams.createWithString("X");
|
||||
CodePointCharStream s = CharStreams.fromString("X");
|
||||
assertEquals(IntStream.EOF, s.LA(2));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void singleCJKCodePointHasSize1() {
|
||||
CodePointCharStream s = CharStreams.createWithString("\u611B");
|
||||
CodePointCharStream s = CharStreams.fromString("\u611B");
|
||||
assertEquals(1, s.size());
|
||||
assertEquals(0, s.index());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void consumingSingleCJKCodePointShouldMoveIndex() {
|
||||
CodePointCharStream s = CharStreams.createWithString("\u611B");
|
||||
CodePointCharStream s = CharStreams.fromString("\u611B");
|
||||
assertEquals(0, s.index());
|
||||
s.consume();
|
||||
assertEquals(1, s.index());
|
||||
|
@ -110,7 +110,7 @@ public class TestCodePointCharStream {
|
|||
|
||||
@Test
|
||||
public void consumingPastSingleCJKCodePointShouldThrow() {
|
||||
CodePointCharStream s = CharStreams.createWithString("\u611B");
|
||||
CodePointCharStream s = CharStreams.fromString("\u611B");
|
||||
s.consume();
|
||||
thrown.expect(IllegalStateException.class);
|
||||
thrown.expectMessage("cannot consume EOF");
|
||||
|
@ -119,21 +119,21 @@ public class TestCodePointCharStream {
|
|||
|
||||
@Test
|
||||
public void singleCJKCodePointLookAheadShouldReturnCodePoint() {
|
||||
CodePointCharStream s = CharStreams.createWithString("\u611B");
|
||||
CodePointCharStream s = CharStreams.fromString("\u611B");
|
||||
assertEquals(0x611B, s.LA(1));
|
||||
assertEquals(0, s.index());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void singleCJKCodePointLookAheadPastEndShouldReturnEOF() {
|
||||
CodePointCharStream s = CharStreams.createWithString("\u611B");
|
||||
CodePointCharStream s = CharStreams.fromString("\u611B");
|
||||
assertEquals(IntStream.EOF, s.LA(2));
|
||||
assertEquals(0, s.index());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void singleEmojiCodePointHasSize1() {
|
||||
CodePointCharStream s = CharStreams.createWithString(
|
||||
CodePointCharStream s = CharStreams.fromString(
|
||||
new StringBuilder().appendCodePoint(0x1F4A9).toString());
|
||||
assertEquals(1, s.size());
|
||||
assertEquals(0, s.index());
|
||||
|
@ -141,7 +141,7 @@ public class TestCodePointCharStream {
|
|||
|
||||
@Test
|
||||
public void consumingSingleEmojiCodePointShouldMoveIndex() {
|
||||
CodePointCharStream s = CharStreams.createWithString(
|
||||
CodePointCharStream s = CharStreams.fromString(
|
||||
new StringBuilder().appendCodePoint(0x1F4A9).toString());
|
||||
assertEquals(0, s.index());
|
||||
s.consume();
|
||||
|
@ -150,7 +150,7 @@ public class TestCodePointCharStream {
|
|||
|
||||
@Test
|
||||
public void consumingPastEndOfEmojiCodePointWithShouldThrow() {
|
||||
CodePointCharStream s = CharStreams.createWithString(
|
||||
CodePointCharStream s = CharStreams.fromString(
|
||||
new StringBuilder().appendCodePoint(0x1F4A9).toString());
|
||||
assertEquals(0, s.index());
|
||||
s.consume();
|
||||
|
@ -162,7 +162,7 @@ public class TestCodePointCharStream {
|
|||
|
||||
@Test
|
||||
public void singleEmojiCodePointLookAheadShouldReturnCodePoint() {
|
||||
CodePointCharStream s = CharStreams.createWithString(
|
||||
CodePointCharStream s = CharStreams.fromString(
|
||||
new StringBuilder().appendCodePoint(0x1F4A9).toString());
|
||||
assertEquals(0x1F4A9, s.LA(1));
|
||||
assertEquals(0, s.index());
|
||||
|
@ -170,7 +170,7 @@ public class TestCodePointCharStream {
|
|||
|
||||
@Test
|
||||
public void singleEmojiCodePointLookAheadPastEndShouldReturnEOF() {
|
||||
CodePointCharStream s = CharStreams.createWithString(
|
||||
CodePointCharStream s = CharStreams.fromString(
|
||||
new StringBuilder().appendCodePoint(0x1F4A9).toString());
|
||||
assertEquals(IntStream.EOF, s.LA(2));
|
||||
assertEquals(0, s.index());
|
||||
|
@ -178,19 +178,19 @@ public class TestCodePointCharStream {
|
|||
|
||||
@Test
|
||||
public void getTextWithLatin() {
|
||||
CodePointCharStream s = CharStreams.createWithString("0123456789");
|
||||
CodePointCharStream s = CharStreams.fromString("0123456789");
|
||||
assertEquals("34567", s.getText(Interval.of(3, 7)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getTextWithCJK() {
|
||||
CodePointCharStream s = CharStreams.createWithString("01234\u40946789");
|
||||
CodePointCharStream s = CharStreams.fromString("01234\u40946789");
|
||||
assertEquals("34\u409467", s.getText(Interval.of(3, 7)));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void getTextWithEmoji() {
|
||||
CodePointCharStream s = CharStreams.createWithString(
|
||||
CodePointCharStream s = CharStreams.fromString(
|
||||
new StringBuilder("01234")
|
||||
.appendCodePoint(0x1F522)
|
||||
.append("6789")
|
||||
|
@ -200,19 +200,19 @@ public class TestCodePointCharStream {
|
|||
|
||||
@Test
|
||||
public void toStringWithLatin() {
|
||||
CodePointCharStream s = CharStreams.createWithString("0123456789");
|
||||
CodePointCharStream s = CharStreams.fromString("0123456789");
|
||||
assertEquals("0123456789", s.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void toStringWithCJK() {
|
||||
CodePointCharStream s = CharStreams.createWithString("01234\u40946789");
|
||||
CodePointCharStream s = CharStreams.fromString("01234\u40946789");
|
||||
assertEquals("01234\u40946789", s.toString());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void toStringWithEmoji() {
|
||||
CodePointCharStream s = CharStreams.createWithString(
|
||||
CodePointCharStream s = CharStreams.fromString(
|
||||
new StringBuilder("01234")
|
||||
.appendCodePoint(0x1F522)
|
||||
.append("6789")
|
||||
|
@ -222,19 +222,19 @@ public class TestCodePointCharStream {
|
|||
|
||||
@Test
|
||||
public void lookAheadWithLatin() {
|
||||
CodePointCharStream s = CharStreams.createWithString("0123456789");
|
||||
CodePointCharStream s = CharStreams.fromString("0123456789");
|
||||
assertEquals('5', s.LA(6));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void lookAheadWithCJK() {
|
||||
CodePointCharStream s = CharStreams.createWithString("01234\u40946789");
|
||||
CodePointCharStream s = CharStreams.fromString("01234\u40946789");
|
||||
assertEquals(0x4094, s.LA(6));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void lookAheadWithEmoji() {
|
||||
CodePointCharStream s = CharStreams.createWithString(
|
||||
CodePointCharStream s = CharStreams.fromString(
|
||||
new StringBuilder("01234")
|
||||
.appendCodePoint(0x1F522)
|
||||
.append("6789")
|
||||
|
@ -244,21 +244,21 @@ public class TestCodePointCharStream {
|
|||
|
||||
@Test
|
||||
public void seekWithLatin() {
|
||||
CodePointCharStream s = CharStreams.createWithString("0123456789");
|
||||
CodePointCharStream s = CharStreams.fromString("0123456789");
|
||||
s.seek(5);
|
||||
assertEquals('5', s.LA(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void seekWithCJK() {
|
||||
CodePointCharStream s = CharStreams.createWithString("01234\u40946789");
|
||||
CodePointCharStream s = CharStreams.fromString("01234\u40946789");
|
||||
s.seek(5);
|
||||
assertEquals(0x4094, s.LA(1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void seekWithEmoji() {
|
||||
CodePointCharStream s = CharStreams.createWithString(
|
||||
CodePointCharStream s = CharStreams.fromString(
|
||||
new StringBuilder("01234")
|
||||
.appendCodePoint(0x1F522)
|
||||
.append("6789")
|
||||
|
@ -269,21 +269,21 @@ public class TestCodePointCharStream {
|
|||
|
||||
@Test
|
||||
public void lookBehindWithLatin() {
|
||||
CodePointCharStream s = CharStreams.createWithString("0123456789");
|
||||
CodePointCharStream s = CharStreams.fromString("0123456789");
|
||||
s.seek(6);
|
||||
assertEquals('5', s.LA(-1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void lookBehindWithCJK() {
|
||||
CodePointCharStream s = CharStreams.createWithString("01234\u40946789");
|
||||
CodePointCharStream s = CharStreams.fromString("01234\u40946789");
|
||||
s.seek(6);
|
||||
assertEquals(0x4094, s.LA(-1));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void lookBehindWithEmoji() {
|
||||
CodePointCharStream s = CharStreams.createWithString(
|
||||
CodePointCharStream s = CharStreams.fromString(
|
||||
new StringBuilder("01234")
|
||||
.appendCodePoint(0x1F522)
|
||||
.append("6789")
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,306 @@
|
|||
package org.antlr.v4.test.runtime.java.api.perf;
|
||||
|
||||
import org.antlr.v4.runtime.ANTLRFileStream;
|
||||
import org.antlr.v4.runtime.CharStream;
|
||||
import org.antlr.v4.runtime.CharStreams;
|
||||
import org.antlr.v4.runtime.CommonTokenStream;
|
||||
import org.antlr.v4.runtime.Lexer;
|
||||
import org.antlr.v4.test.runtime.java.api.JavaLexer;
|
||||
|
||||
import java.net.URL;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/** Test how fast we can lex Java and some unicode graphemes using old and
|
||||
* new unicode stream mechanism. It also tests load time for ASCII
|
||||
* and unicode code points beyond 0xFFFF.
|
||||
*
|
||||
* Sample output on OS X with 4 GHz Intel Core i7 (us == microseconds, 1/1000 of a millisecond):
|
||||
*
|
||||
Warming up Java compiler....
|
||||
load_legacy_java_ascii average time 53us over 3500 loads of 29038 symbols from Parser.java
|
||||
load_legacy_java_utf8 average time 42us over 3500 loads of 29038 symbols from Parser.java
|
||||
load_legacy_java_utf8 average time 121us over 3500 loads of 13379 symbols from udhr_hin.txt
|
||||
load_new_utf8 average time 193us over 3500 loads of 29038 symbols from Parser.java
|
||||
load_new_utf8 average time 199us over 3500 loads of 13379 symbols from udhr_hin.txt
|
||||
|
||||
lex_legacy_java_ascii average time 399us over 2000 runs of 29038 symbols
|
||||
lex_legacy_java_ascii average time 918us over 2000 runs of 29038 symbols DFA cleared
|
||||
lex_legacy_java_utf8 average time 377us over 2000 runs of 29038 symbols
|
||||
lex_legacy_java_utf8 average time 925us over 2000 runs of 29038 symbols DFA cleared
|
||||
lex_new_java_utf8 average time 460us over 2000 runs of 29038 symbols
|
||||
lex_new_java_utf8 average time 989us over 2000 runs of 29038 symbols DFA cleared
|
||||
|
||||
lex_legacy_grapheme_utf8 average time 6862us over 400 runs of 6614 symbols from udhr_kor.txt
|
||||
lex_legacy_grapheme_utf8 average time 7023us over 400 runs of 6614 symbols from udhr_kor.txt DFA cleared
|
||||
lex_legacy_grapheme_utf8 average time 6290us over 400 runs of 13379 symbols from udhr_hin.txt
|
||||
lex_legacy_grapheme_utf8 average time 6238us over 400 runs of 13379 symbols from udhr_hin.txt DFA cleared
|
||||
lex_new_grapheme_utf8 average time 6863us over 400 runs of 6614 symbols from udhr_kor.txt
|
||||
lex_new_grapheme_utf8 average time 7014us over 400 runs of 6614 symbols from udhr_kor.txt DFA cleared
|
||||
lex_new_grapheme_utf8 average time 6187us over 400 runs of 13379 symbols from udhr_hin.txt
|
||||
lex_new_grapheme_utf8 average time 6284us over 400 runs of 13379 symbols from udhr_hin.txt DFA cleared
|
||||
lex_new_grapheme_utf8 average time 99us over 400 runs of 85 symbols from emoji.txt
|
||||
lex_new_grapheme_utf8 average time 111us over 400 runs of 85 symbols from emoji.txt DFA cleared
|
||||
*
|
||||
* The "DFA cleared" indicates that the lexer was returned to initial conditions
|
||||
* before the tokenizing of each file. As the ALL(*) lexer encounters new input,
|
||||
* it records how it tokenized the chars. The next time it sees that input,
|
||||
* it will more quickly recognize the token.
|
||||
*
|
||||
* Lexing times have the top 20% stripped off before doing the average
|
||||
* to account for issues with the garbage collection and compilation pauses;
|
||||
* other OS tasks could also pop in randomly.
|
||||
*
|
||||
* Load times are too fast to measure with a microsecond clock using an SSD
|
||||
* so the average load time is computed as the overall time to load
|
||||
* n times divided by n (rather then summing up the individual times).
|
||||
*
|
||||
* @since 4.7
|
||||
*/
|
||||
public class TimeLexerSpeed { // don't call it Test else it'll run during "mvn test"
|
||||
public static final String Parser_java_file = "Java/src/org/antlr/v4/runtime/Parser.java";
|
||||
public static final String PerfDir = "org/antlr/v4/test/runtime/java/api/perf";
|
||||
|
||||
public boolean output = true;
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
TimeLexerSpeed tests = new TimeLexerSpeed();
|
||||
|
||||
tests.compilerWarmUp(100);
|
||||
|
||||
int n = 3500;
|
||||
URL sampleJavaFile = TimeLexerSpeed.class.getClassLoader().getResource(Parser_java_file);
|
||||
URL sampleFile = TimeLexerSpeed.class.getClassLoader().getResource(PerfDir+"/udhr_hin.txt");
|
||||
tests.load_legacy_java_ascii(n);
|
||||
tests.load_legacy_java_utf8(sampleJavaFile.getFile(), n);
|
||||
tests.load_legacy_java_utf8(sampleFile.getFile(), n);
|
||||
tests.load_new_utf8(sampleJavaFile.getFile(), n);
|
||||
tests.load_new_utf8(sampleFile.getFile(), n);
|
||||
System.out.println();
|
||||
|
||||
n = 2000;
|
||||
tests.lex_legacy_java_ascii(n, false);
|
||||
tests.lex_legacy_java_ascii(n, true);
|
||||
tests.lex_legacy_java_utf8(n, false);
|
||||
tests.lex_legacy_java_utf8(n, true);
|
||||
tests.lex_new_java_utf8(n, false);
|
||||
tests.lex_new_java_utf8(n, true);
|
||||
System.out.println();
|
||||
|
||||
n = 400;
|
||||
tests.lex_legacy_grapheme_utf8("udhr_kor.txt", n, false);
|
||||
tests.lex_legacy_grapheme_utf8("udhr_kor.txt", n, true);
|
||||
tests.lex_legacy_grapheme_utf8("udhr_hin.txt", n, false);
|
||||
tests.lex_legacy_grapheme_utf8("udhr_hin.txt", n, true);
|
||||
// legacy can't handle the emoji (32 bit stuff)
|
||||
|
||||
tests.lex_new_grapheme_utf8("udhr_kor.txt", n, false);
|
||||
tests.lex_new_grapheme_utf8("udhr_kor.txt", n, true);
|
||||
tests.lex_new_grapheme_utf8("udhr_hin.txt", n, false);
|
||||
tests.lex_new_grapheme_utf8("udhr_hin.txt", n, true);
|
||||
tests.lex_new_grapheme_utf8("emoji.txt", n, false);
|
||||
tests.lex_new_grapheme_utf8("emoji.txt", n, true);
|
||||
}
|
||||
|
||||
public void compilerWarmUp(int n) throws Exception {
|
||||
System.out.print("Warming up Java compiler");
|
||||
output = false;
|
||||
lex_new_java_utf8(n, false);
|
||||
System.out.print('.');
|
||||
lex_legacy_java_utf8(n, false);
|
||||
System.out.print('.');
|
||||
lex_legacy_java_ascii(n, false);
|
||||
System.out.print('.');
|
||||
lex_legacy_grapheme_utf8("udhr_hin.txt", n, false);
|
||||
System.out.print('.');
|
||||
lex_new_grapheme_utf8("udhr_hin.txt", n, false);
|
||||
System.out.println();
|
||||
output = true;
|
||||
}
|
||||
|
||||
public void load_legacy_java_ascii(int n) throws Exception {
|
||||
URL sampleJavaFile = TimeLexerSpeed.class.getClassLoader().getResource(Parser_java_file);
|
||||
long start = System.nanoTime();
|
||||
CharStream input = null;
|
||||
for (int i = 0; i<n; i++) {
|
||||
input = new ANTLRFileStream(sampleJavaFile.getFile());
|
||||
}
|
||||
long stop = System.nanoTime();
|
||||
long tus = (stop-start)/1000;
|
||||
int size = input.size();
|
||||
String currentMethodName = new Exception().getStackTrace()[0].getMethodName();
|
||||
if ( output ) System.out.printf("%25s average time %5dus over %4d loads of %5d symbols from %s\n",
|
||||
currentMethodName,
|
||||
tus/n,
|
||||
n,
|
||||
size,
|
||||
basename(sampleJavaFile.getFile()));
|
||||
}
|
||||
|
||||
public void load_legacy_java_utf8(String fileName, int n) throws Exception {
|
||||
long start = System.nanoTime();
|
||||
CharStream input = null;
|
||||
for (int i = 0; i<n; i++) {
|
||||
input = new ANTLRFileStream(fileName, "UTF-8");
|
||||
}
|
||||
long stop = System.nanoTime();
|
||||
long tus = (stop-start)/1000;
|
||||
int size = input.size();
|
||||
String currentMethodName = new Exception().getStackTrace()[0].getMethodName();
|
||||
if ( output ) System.out.printf("%25s average time %5dus over %4d loads of %5d symbols from %s\n",
|
||||
currentMethodName,
|
||||
tus/n,
|
||||
n,
|
||||
size,
|
||||
basename(fileName));
|
||||
}
|
||||
|
||||
public void load_new_utf8(String fileName, int n) throws Exception {
|
||||
long start = System.nanoTime();
|
||||
CharStream input = null;
|
||||
for (int i = 0; i<n; i++) {
|
||||
input = CharStreams.fromFileName(fileName);
|
||||
}
|
||||
long stop = System.nanoTime();
|
||||
long tus = (stop-start)/1000;
|
||||
int size = input.size();
|
||||
String currentMethodName = new Exception().getStackTrace()[0].getMethodName();
|
||||
if ( output ) System.out.printf("%25s average time %5dus over %4d loads of %5d symbols from %s\n",
|
||||
currentMethodName,
|
||||
tus/n,
|
||||
n,
|
||||
size,
|
||||
basename(fileName));
|
||||
}
|
||||
|
||||
public void lex_legacy_java_ascii(int n, boolean clearLexerDFACache) throws Exception {
|
||||
URL sampleJavaFile = TimeLexerSpeed.class.getClassLoader().getResource(Parser_java_file);
|
||||
CharStream input = new ANTLRFileStream(sampleJavaFile.getFile());
|
||||
JavaLexer lexer = new JavaLexer(input);
|
||||
double avg = tokenize(lexer, n, clearLexerDFACache);
|
||||
String currentMethodName = new Exception().getStackTrace()[0].getMethodName();
|
||||
if ( output ) System.out.printf("%25s average time %5dus over %4d runs of %5d symbols%s\n",
|
||||
currentMethodName,
|
||||
(int)avg,
|
||||
n,
|
||||
input.size(),
|
||||
clearLexerDFACache ? " DFA cleared" : "");
|
||||
}
|
||||
|
||||
public void lex_legacy_java_utf8(int n, boolean clearLexerDFACache) throws Exception {
|
||||
URL sampleJavaFile = TimeLexerSpeed.class.getClassLoader().getResource(Parser_java_file);
|
||||
CharStream input = new ANTLRFileStream(sampleJavaFile.getFile(), "UTF-8");
|
||||
JavaLexer lexer = new JavaLexer(input);
|
||||
double avg = tokenize(lexer, n, clearLexerDFACache);
|
||||
String currentMethodName = new Exception().getStackTrace()[0].getMethodName();
|
||||
if ( output ) System.out.printf("%25s average time %5dus over %4d runs of %5d symbols%s\n",
|
||||
currentMethodName,
|
||||
(int)avg,
|
||||
n,
|
||||
input.size(),
|
||||
clearLexerDFACache ? " DFA cleared" : "");
|
||||
}
|
||||
|
||||
public void lex_new_java_utf8(int n, boolean clearLexerDFACache) throws Exception {
|
||||
URL sampleJavaFile = TimeLexerSpeed.class.getClassLoader().getResource(Parser_java_file);
|
||||
CharStream input = CharStreams.fromPath(Paths.get(sampleJavaFile.getFile()));
|
||||
JavaLexer lexer = new JavaLexer(input);
|
||||
double avg = tokenize(lexer, n, clearLexerDFACache);
|
||||
String currentMethodName = new Exception().getStackTrace()[0].getMethodName();
|
||||
if ( output ) System.out.printf("%25s average time %5dus over %4d runs of %5d symbols%s\n",
|
||||
currentMethodName,
|
||||
(int)avg,
|
||||
n,
|
||||
input.size(),
|
||||
clearLexerDFACache ? " DFA cleared" : "");
|
||||
}
|
||||
|
||||
public void lex_legacy_grapheme_utf8(String fileName, int n, boolean clearLexerDFACache) throws Exception {
|
||||
URL sampleFile = TimeLexerSpeed.class.getClassLoader().getResource(PerfDir+"/"+fileName);
|
||||
CharStream input = new ANTLRFileStream(sampleFile.getFile(), "UTF-8");
|
||||
graphemesLexer lexer = new graphemesLexer(input);
|
||||
double avg = tokenize(lexer, n, clearLexerDFACache);
|
||||
String currentMethodName = new Exception().getStackTrace()[0].getMethodName();
|
||||
if ( output ) System.out.printf("%25s average time %5dus over %4d runs of %5d symbols from %s%s\n",
|
||||
currentMethodName,
|
||||
(int)avg,
|
||||
n,
|
||||
input.size(),
|
||||
fileName,
|
||||
clearLexerDFACache ? " DFA cleared" : "");
|
||||
}
|
||||
|
||||
public void lex_new_grapheme_utf8(String fileName, int n, boolean clearLexerDFACache) throws Exception {
|
||||
URL sampleJavaFile = TimeLexerSpeed.class.getClassLoader().getResource(PerfDir+"/"+fileName);
|
||||
CharStream input = CharStreams.fromPath(Paths.get(sampleJavaFile.getFile()));
|
||||
graphemesLexer lexer = new graphemesLexer(input);
|
||||
double avg = tokenize(lexer, n, clearLexerDFACache);
|
||||
String currentMethodName = new Exception().getStackTrace()[0].getMethodName();
|
||||
if ( output ) System.out.printf("%25s average time %5dus over %4d runs of %5d symbols from %s%s\n",
|
||||
currentMethodName,
|
||||
(int)avg,
|
||||
n,
|
||||
input.size(),
|
||||
fileName,
|
||||
clearLexerDFACache ? " DFA cleared" : "");
|
||||
}
|
||||
|
||||
public double tokenize(Lexer lexer, int n, boolean clearLexerDFACache) {
|
||||
// always wipe the DFA before we begin tests so previous tests
|
||||
// don't affect this run!
|
||||
lexer.getInterpreter().clearDFA();
|
||||
long[] times = new long[n];
|
||||
for (int i = 0; i<n; i++) {
|
||||
lexer.reset();
|
||||
if ( clearLexerDFACache ) {
|
||||
lexer.getInterpreter().clearDFA();
|
||||
}
|
||||
long start = System.nanoTime();
|
||||
CommonTokenStream tokens = new CommonTokenStream(lexer);
|
||||
tokens.fill(); // lex whole file.
|
||||
// int size = lexer.getInputStream().size();
|
||||
long stop = System.nanoTime();
|
||||
times[i] = (stop-start)/1000;
|
||||
// if ( output ) System.out.printf("Tokenized %d char in %dus\n", size, times[i]);
|
||||
}
|
||||
Arrays.sort(times);
|
||||
times = Arrays.copyOfRange(times, 0, times.length-(int)(n*.2)); // drop highest 20% of times
|
||||
return avg(times);
|
||||
}
|
||||
|
||||
public double avg(long[] values) {
|
||||
double sum = 0.0;
|
||||
for (Long v : values) {
|
||||
sum += v;
|
||||
}
|
||||
return sum / values.length;
|
||||
}
|
||||
|
||||
public double std(double mean, List<Long> values) { // unbiased std dev
|
||||
double sum = 0.0;
|
||||
for (Long v : values) {
|
||||
sum += (v-mean)*(v-mean);
|
||||
}
|
||||
return Math.sqrt(sum / (values.size() - 1));
|
||||
}
|
||||
|
||||
public static String basename(String fullyQualifiedFileName) {
|
||||
Path path = Paths.get(fullyQualifiedFileName);
|
||||
return basename(path);
|
||||
}
|
||||
|
||||
public static String dirname(String fullyQualifiedFileName) {
|
||||
Path path = Paths.get(fullyQualifiedFileName);
|
||||
return dirname(path);
|
||||
}
|
||||
|
||||
public static String basename(Path path) {
|
||||
return path.getName(path.getNameCount()-1).toString();
|
||||
}
|
||||
|
||||
public static String dirname(Path path) {
|
||||
return path.getName(0).toString();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
😀🖖💩
|
||||
👴🏽🖖🏿👦🏼
|
||||
👮♀️👷♀️👯♂️
|
||||
🙇🏻♀️👼🏽🎅🏿
|
||||
01234
|
||||
0️⃣1️⃣2️⃣3️⃣4️⃣
|
||||
™©®
|
||||
™️©️®️
|
||||
🇨🇨🇧🇬🇯🇲
|
||||
🏳️🌈
|
||||
🏴☠️
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
grammar graphemes;
|
||||
|
||||
Extend: [\p{Grapheme_Cluster_Break=Extend}];
|
||||
ZWJ: '\u200D';
|
||||
SpacingMark: [\p{Grapheme_Cluster_Break=SpacingMark}];
|
||||
fragment VS15: '\uFE0E';
|
||||
fragment VS16: '\uFE0F';
|
||||
fragment NonspacingMark: [\p{Nonspacing_Mark}];
|
||||
fragment TextPresentationCharacter: [\p{EmojiPresentation=TextDefault}];
|
||||
fragment EmojiPresentationCharacter: [\p{EmojiPresentation=EmojiDefault}];
|
||||
fragment TextPresentationSequence: EmojiPresentationCharacter VS15;
|
||||
fragment EmojiPresentationSequence: TextPresentationCharacter VS16;
|
||||
fragment EmojiModifierSequence:
|
||||
[\p{Grapheme_Cluster_Break=E_Base}\p{Grapheme_Cluster_Break=E_Base_GAZ}] [\p{Grapheme_Cluster_Break=E_Modifier}];
|
||||
fragment EmojiFlagSequence:
|
||||
[\p{Grapheme_Cluster_Break=Regional_Indicator}] [\p{Grapheme_Cluster_Break=Regional_Indicator}];
|
||||
fragment ExtendedPictographic: [\p{Extended_Pictographic}];
|
||||
fragment EmojiNRK: [\p{EmojiNRK}];
|
||||
fragment EmojiCombiningSequence:
|
||||
( EmojiPresentationSequence
|
||||
| TextPresentationSequence
|
||||
| EmojiPresentationCharacter )
|
||||
NonspacingMark*;
|
||||
EmojiCoreSequence:
|
||||
EmojiModifierSequence
|
||||
| EmojiCombiningSequence
|
||||
| EmojiFlagSequence;
|
||||
fragment EmojiZWJElement:
|
||||
EmojiModifierSequence
|
||||
| EmojiPresentationSequence
|
||||
| EmojiPresentationCharacter
|
||||
| ExtendedPictographic
|
||||
| EmojiNRK;
|
||||
EmojiZWJSequence:
|
||||
EmojiZWJElement (ZWJ EmojiZWJElement)+;
|
||||
emoji_sequence:
|
||||
( EmojiZWJSequence
|
||||
| EmojiCoreSequence )
|
||||
( Extend | ZWJ | SpacingMark )*;
|
||||
|
||||
Prepend: [\p{Grapheme_Cluster_Break=Prepend}];
|
||||
NonControl: [\P{Grapheme_Cluster_Break=Control}];
|
||||
CRLF: [\p{Grapheme_Cluster_Break=CR}][\p{Grapheme_Cluster_Break=LF}];
|
||||
HangulSyllable:
|
||||
[\p{Grapheme_Cluster_Break=L}]* [\p{Grapheme_Cluster_Break=V}]+ [\p{Grapheme_Cluster_Break=T}]*
|
||||
| [\p{Grapheme_Cluster_Break=L}]* [\p{Grapheme_Cluster_Break=LV}] [\p{Grapheme_Cluster_Break=V}]* [\p{Grapheme_Cluster_Break=T}]*
|
||||
| [\p{Grapheme_Cluster_Break=L}]* [\p{Grapheme_Cluster_Break=LVT}] [\p{Grapheme_Cluster_Break=T}]*
|
||||
| [\p{Grapheme_Cluster_Break=L}]+
|
||||
| [\p{Grapheme_Cluster_Break=T}]+;
|
||||
|
||||
grapheme_cluster:
|
||||
CRLF
|
||||
| Prepend* ( emoji_sequence | HangulSyllable | NonControl ) ( Extend | ZWJ | SpacingMark )*;
|
||||
|
||||
graphemes: grapheme_cluster* EOF;
|
|
@ -0,0 +1,222 @@
|
|||
Universal Declaration of Human Rights - Hindi
|
||||
© 1996 – 2009 The Office of the High Commissioner for Human Rights
|
||||
This plain text version prepared by the “UDHR in Unicode”
|
||||
project, http://www.unicode.org/udhr.
|
||||
---
|
||||
|
||||
मानव अधिकारों की सार्वभौम घोषणा
|
||||
१० दिसम्बर १९४८ को यूनाइटेड नेशन्स की जनरल असेम्बली ने मानव अधिकारों की सार्वभौम घोषणा को स्वीकृत और घोषित किया । इसका पूर्ण पाठ आगे के पृष्ठों में दिया गया है । इस ऐतिहासिक कार्य के बाद ही असेम्बली ने सभी सदस्य देशों से अपील की कि वे इस घोषणा का प्रचार करें और देशों अथवा प्रदेशों की राजनैतिक स्थिति पर आधारित भेदभाव का विचार किए बिना, विशेषतः स्कूलों और अन्य शिक्षा संस्थाओं में इसके प्रचार, प्रदर्शन, पठन और व्याख्या का प्रबन्ध करें ।
|
||||
इसी घोषणा का सरकारी पाठ संयुक्त राष्ट्रों की इन पांच भाषाओं में प्राप्य हैः—अंग्रेजी, चीनी, फ्रांसीसी, रूसी और स्पेनिश । अनुवाद का जो पाठ यहां दिया गया है, वह भारत सरकार द्वारा स्वीकृत है ।
|
||||
|
||||
प्रस्तावना
|
||||
चूंकि मानव परिवार के सभी सदस्यों के जन्मजात गौरव और समान तथा अविच्छिन्न अधिकार की स्वीकृति ही विश्व-शान्ति, न्याय और स्वतन्त्रता की बुनियाद है,
|
||||
चूंकि मानव अधिकारों के प्रति उपेक्षा और घृणा के फलस्वरूप ही ऐसे बर्बर कार्य हुए जिनसे मनुष्य की आत्मा पर अत्याचार किया गया, चूंकि एक ऐसी विश्व-व्यवस्था की उस स्थापना को ( जिसमें लोगों को भाषण और धर्म की आज़ादी तथा भय और अभाव से मुक्ति मिलेगी ) सर्वसाधारण के लिए सर्वोच्च आकांक्षा घोषित किया गया है,
|
||||
चूंकि अगर अन्याययुक्त शासन और जुल्म के विरुद्घ लोगों को विद्रोह करने के लिए—उसे ही अन्तिम उपाय समझ कर—मजबूर नहीं हो जाना है, तो कानून द्वारा नियम बनाकर मानव अधिकारों की रक्षा करना अनिवार्य है,
|
||||
चूंकि राष्ट्रों के बीच मैत्रीपूर्ण सम्बन्धों को बढ़ाना ज़रूरी है,
|
||||
चूंकि संयुक्त राष्ट्रों के सदस्य देशों की जनताओं ने बुनियादी मानव अधिकारों में, मानव व्यक्तित्व के गौरव और योग्यता में और नरनारियों के समान अधिकारों में अपने विश्वास को अधिकार-पत्र में दुहराया है और यह निश्चय किया है कि अधिक व्यापक स्वतन्त्रता के अन्तर्गत सामाजिक प्रगति एवं जीवन के बेहतर स्तर को ऊंचा किया जाया,
|
||||
चूंकि सदस्य देशों ने यह प्रतिज्ञा को है कि वे संयुक्त राष्ट्रों के सहयोग से मानव अधिकारों और बुनियादी आज़ादियों के प्रति सार्वभौम सम्मान की वृद्घि करेंगे,
|
||||
चूंकि इस प्रतिज्ञा को पूरी तरह से निभाने के लिए इन अधिकारों और आज़ादियों का स्वरूप ठीक-ठीक समझना सबसे अधिक ज़रूरी है । इसलिए, अब,
|
||||
सामान्य सभा
|
||||
घोषित करती है कि
|
||||
मानव अधिकारों की यह सार्वभौम घोषणा सभी देशों और सभी लोगों की समान सफलता है । इसका उद्देश्य यह है कि प्रत्येक व्यक्ति और समाज का प्रत्येक भाग इस घोषणा को लगातार दृष्टि में रखते हुए अध्यापन और शिक्षा के द्वारा यह प्रयत्न करेगा कि इन अधिकारों और आज़ादियों के प्रति सम्मान की भावना जाग्रत हो, और उत्तरोत्तर ऐसे राष्ट्रीय तथा अन्तर्राष्ट्रीय उपाय किये जाएं जिनसे सदस्य देशों की जनता तथा उनके द्वारा अधिकृत प्रदेशों की जनता इन अधिकारों की सार्वभौम और प्रभावोत्पादक स्वीकृति दे और उनका पालन करावे ।
|
||||
|
||||
अनुच्छेद १.
|
||||
सभी मनुष्यों को गौरव और अधिकारों के मामले में जन्मजात स्वतन्त्रता और समानता प्राप्त है । उन्हें बुद्धि और अन्तरात्मा की देन प्राप्त है और परस्पर उन्हें भाईचारे के भाव से बर्ताव करना चाहिए ।
|
||||
|
||||
अनुच्छेद २.
|
||||
सभी को इस घोषणा में सन्निहित सभी अधिकारों और आज़ादियों को प्राप्त करने का हक़ है और इस मामले में जाति, वर्ण, लिंग, भाषा, धर्म, राजनीति या अन्य विचार-प्रणाली, किसी देश या समाज विशेष में जन्म, सम्पत्ति या किसी प्रकार की अन्य मर्यादा आदि के कारण भेदभाव का विचार न किया जाएगा ।
|
||||
इसके अतिरिक्त, चाहे कोई देश या प्रदेश स्वतन्त्र हो, संरक्षित हो, या स्त्रशासन रहित हो या परिमित प्रभुसत्ता वाला हो, उस देश या प्रदेश की राजनैतिक, क्षेत्रीय या अन्तर्राष्ट्रीय स्थिति के आधार पर वहां के निवासियों के प्रति कोई फ़रक़ न रखा जाएगा ।
|
||||
|
||||
अनुच्छेद ३.
|
||||
प्रत्येक व्यक्ति को जीवन, स्वाधीनता और वैयक्तिक सुरक्षा का अधिकार है ।
|
||||
|
||||
अनुच्छेद ४.
|
||||
कोई भी ग़ुलामी या दासता की हालत में न रखा जाएगा, ग़ुलामी-प्रथा और ग़ुलामों का व्यापार अपने सभी रूपों में निषिद्ध होगा ।
|
||||
|
||||
अनुच्छेद ५.
|
||||
किसी को भी शारीरिक यातना न दी जाएगी और न किसी के भी प्रति निर्दय, अमानुषिक या अपमानजनक व्यवहार होगा ।
|
||||
|
||||
अनुच्छेद ६.
|
||||
हर किसी को हर जगह क़ानून की निग़ाह में व्यक्ति के रूप में स्वीकृति-प्राप्ति का अधिकार है ।
|
||||
|
||||
अनुच्छेद ७.
|
||||
क़ानून की निग़ाह में सभी समान हैं और सभी बिना भेदभाव के समान क़ानूनी सुरक्षा के अधिकारी हैं । यदि इस घोषणा का अतिक्रमण करके कोई भी भेद-भाव किया जाया उस प्रकार के भेद-भाव को किसी प्रकार से उकसाया जाया, तो उसके विरुद्ध समान संरक्षण का अधिकार सभी को प्राप्त है ।
|
||||
|
||||
अनुच्छेद ८.
|
||||
सभी को संविधान या क़ानून द्वारा प्राप्त बुनियादी अधिकारों का अतिक्रमण करने वाले कार्यों के विरुद्ध समुचित राष्ट्रीय अदालतों की कारगर सहायता पाने का हक़ है ।
|
||||
|
||||
अनुच्छेद ९.
|
||||
किसी को भी मनमाने ढंग से गिरफ़्तार, नज़रबन्द या देश-निष्कासित न किया जाएगा ।
|
||||
|
||||
अनुच्छेद १०.
|
||||
सभी को पूर्णत: समान रूप से हक़ है कि उनके अधिकारों और कर्तव्यों के निश्चय करने के मामले में और उन पर आरोपित फौज़दारी के किसी मामले में उनकी सुनवाई न्यायोचित और सार्वजनिक रूप से निरपेक्ष एवं निष्पक्ष अदालत द्वारा हो ।
|
||||
|
||||
अनुच्छेद ११.
|
||||
|
||||
|
||||
प्रत्येक व्यक्ति, जिस पर दण्डनीय अपराध का आरोप किया गया हो, तब तक निरपराध माना जाएगा, जब तक उसे ऐसी खुली अदालत में, जहां उसे अपनी सफ़ाई की सभी आवश्यक सुविधाएं प्राप्त हों, कानून के अनुसार अपराधी न सिद्ध कर दिया जाया ।
|
||||
|
||||
|
||||
कोई भी व्यक्ति किसी भी ऐसे कृत या अकृत (अपराध) के कारण उस दण्डनीय अपराध का अपराधी न माना जाएगा, जिसे तत्कालीन प्रचलित राष्ट्रीय या अन्तर्राष्ट्रीय क़ानून के अनुसार दण्डनीय अपराध न माना जाए और न उससे अधिक भारी दण्ड दिया जा सकेगा, जो उस समय दिया जाता जिस समय वह दण्डनीय अपराध किया गया था ।
|
||||
|
||||
|
||||
|
||||
अनुच्छेद १२.
|
||||
किसी व्यक्ति की एकान्तता, परिवार, घर या पत्रव्यवहार के प्रति कोई मनमाना हस्तक्षेप न किया जाएगा, न किसी के सम्मान और ख्याति पर कोई आक्षेप हो सकेगा । ऐसे हस्तक्षेप या आधेपों के विरुद्ध प्रत्येक को क़ानूनी रक्षा का अधिकार प्राप्त है ।
|
||||
|
||||
अनुच्छेद १३.
|
||||
|
||||
|
||||
प्रत्येक व्यक्ति को प्रत्येक देश की सीपाओं के अन्दर स्वतन्त्रतापूर्वक आने, जाने और बसने का अधिकार है ।
|
||||
|
||||
|
||||
प्रत्येक व्यक्ति को अपने या पराये किसी भी देश को छोड़नो और अपने देश को वापस आनो का अधिकार है ।
|
||||
|
||||
|
||||
|
||||
अनुच्छेद १४.
|
||||
|
||||
|
||||
प्रत्येक व्यक्ति को सताये जाने पर दूसरे देशों में शरण लेने और रहने का अधिकार है ।
|
||||
|
||||
|
||||
इस अधिकार का लाभ ऐसे मामलों में नहीं मिलेगा जो वास्तव में गैर-राजनीतिक अपराधों से सम्बन्धित हैं, या जो संयुक्त राष्ट्रों के उद्देश्यों और सिद्धान्तों के विरुद्ध कार्य हैं ।
|
||||
|
||||
|
||||
|
||||
अनुच्छेद १५.
|
||||
|
||||
|
||||
प्रत्येक व्यक्ति को किसी भी राष्ट्र-विशेष को नागरिकता का अधिकार है ।
|
||||
|
||||
|
||||
किसी को भी मनमाने ढंग से अपने राष्ट्र की नागरिकता से वंचित न किया जाएगा या नागरिकता का यरिवर्तन करने से मना न किया जाएगा ।
|
||||
|
||||
|
||||
|
||||
अनुच्छेद १६.
|
||||
|
||||
|
||||
बालिग़ स्त्री-पुरुषों को बिना किसी जाति, राष्ट्रीयता या धर्म की रुकावटों के आपस में विवाह करने और परिवार को स्थापन करने का अधिकार है । उन्हें विवाह के विषय में वैवाहिक जीवन में, तथा विवाह विच्छेड के बारे में समान अधिकार है ।
|
||||
|
||||
|
||||
विवाह का इरादा रखने वाले स्त्री-पुरुषों की पूर्ण और स्वतन्त्र सहमित पर ही विवाह हो सकेगा ।
|
||||
|
||||
|
||||
परिवार समाज की स्वाभाविक और बुनियादी सामूहिक इकाई है और उसे समाज तथा राज्य द्वारा संरक्षण पाने का अधिकार है ।
|
||||
|
||||
|
||||
|
||||
अनुच्छेद १७.
|
||||
|
||||
|
||||
प्रत्येक व्यक्ति को अकेले और दूसरों के साथ मिलकर सम्मति रखने का अधिकार है ।
|
||||
|
||||
|
||||
किसी को भी मनमाने ढंग से अपनी सम्मति से वंचित न किया जाएगा ।
|
||||
|
||||
|
||||
|
||||
अनुच्छेद १८.
|
||||
प्रत्येक व्यक्ति को विचार, अन्तरात्मा और धर्म की आज़ादी का अधिकार है । इस अधिकार के अन्तर्गत अपना धर्म या विश्वास बदलने और अकेले या दूसरों के साथ मिलकर तथा सार्वजनिक रूप में अथवा निजी तोर पर अपने धर्म या विश्वास को शिक्षा, क्रिया, उपासना, तथा व्यवहार के द्वारा प्रकट करने की स्वतन्त्रता है ।
|
||||
|
||||
अनुच्छेद १९.
|
||||
प्रत्येक व्यक्ति को विचार और उसकी अभिव्यक्ति की स्वतन्त्रता का अधिकार है । इसके अन्तर्गत बिना हस्तक्षेप के कोई राय रखना और किसी भी माध्यम के ज़रिए से तथा सीमाओं की परवाह न कर के किसी की मूचना और धारणा का अन्वेषण, प्रहण तथा प्रदान सम्मिलित है ।
|
||||
|
||||
अनुच्छेद २०.
|
||||
|
||||
|
||||
प्रत्येक व्यक्ति को शान्ति पूर्ण सभा करने या समिति बनाने की स्वतन्त्रता का अधिकार है ।
|
||||
|
||||
|
||||
किसी को भी किसी संस्था का सदस्य बनने के लिए मजबूर नहीं किया जा सकता ।
|
||||
|
||||
|
||||
|
||||
अनुच्छेद २१.
|
||||
|
||||
|
||||
प्रत्येक व्यक्ति को अपने देश के शासन में प्रत्यक्ष रूप से या स्वतन्त्र रूप से चुने गए प्रतिनिधियों के ज़रिए हिस्सा लेने का अधिकार है ।
|
||||
|
||||
|
||||
प्रत्येक व्यक्ति को अपने देश की सरकारी नौकरियों को प्राप्त करने का समान अधिकार है ।
|
||||
|
||||
|
||||
सरकार की सत्ता का आधार जनता की दच्छा होगी । इस इच्छा का प्रकटन समय-समय पर और असली चुनावों द्वारा होगा । ये चुनाव सार्वभौम और समान मताधिकार द्वारा होंगे और गुप्त मतदान द्वारा या किमी अन्य समान स्वतन्त्र मतदान पद्धति से कराये जाएंगे ।
|
||||
|
||||
|
||||
|
||||
अनुच्छेद २२.
|
||||
समाज के एक सदस्य के रूप में प्रत्येक व्यक्ति को सामाजिक सुरक्षा का अधिकार है और प्रत्येक व्यक्ति को अपने व्यक्तित्व के उस स्वतन्त्र विकास तथा गोरव के लिए—जो राष्ट्रीय प्रयत्न या अन्तर्राष्ट्रीय सहयोग तथा प्रत्येक राज्य के संगठन एवं साधनों के अनुकूल हो—अनिकार्यतः आवश्यक आर्थिक, सामाजिक, और सांस्कृतिक अधिकारों की प्राप्ति का हक़ है ।
|
||||
|
||||
अनुच्छेद २३.
|
||||
|
||||
|
||||
प्रत्येक व्यक्ति को काम करने, इच्छानुमार रोज़गार के चुनाव, काम की उचित और सुविधाजनक परिस्थितियों को प्राप्त करने और बेकारी से संरक्षण पाने का हक़ है ।
|
||||
|
||||
|
||||
प्रत्येक व्यक्ति को समान कार्य के लिए बिना किसी भेदभाव के समान मज़दूरी पाने का अधिकार है ।
|
||||
|
||||
|
||||
प्रत्येक व्यक्ति को जो काम करता है, अधिकार है कि वह इतनी उचित और अनुकूल मज़दूरी पाए, जिससे वह अपने लिए और अपने परिवार के लिए ऐसी आजीविका का प्रबन्ध कर मके, जो मानवीय गौरव के योग्य हो तथा आवश्यकता होने पर उसकी पूर्ति अन्य प्रकार के सामाजिक संरक्षणों द्वारा हो सके ।
|
||||
|
||||
|
||||
प्रत्येक व्यक्ति को अपने हितों की रक्षा के लिए श्रमजीवी संघ बनाने और उनमें भाग लेने का अधिकार है ।
|
||||
|
||||
|
||||
|
||||
अनुच्छेद २४.
|
||||
प्रत्येक व्यक्ति को विश्राम और अवकाश का अधिकार है । इसके अन्तर्गत काम के घंटों की उचित हदबन्दी और समय-समय पर मज़दूरी सहित छुट्टियां सम्मिलित है ।
|
||||
|
||||
अनुच्छेद २५.
|
||||
|
||||
|
||||
प्रत्येक व्यक्ति को ऐसे जीवनस्तर को प्राप्त करने का अधिकार है जो उसे और उसके परिवार के स्वास्थ्य एवं कल्याण के लिए पर्याप्त हो । इसके अन्तर्गत खाना, कपड़ा, मकान, चिकित्सा-सम्बन्धी सुविधाएं और आवश्यक सामाजिक सेवाएं सम्मिलित है । सभी को बेकारी, बीमारी, असमर्थता, वैधव्य, बुढापे या अन्य किसी ऐसी परिस्थिति में आजीविका का साधन न होने पर जो उसके क़ाबू के बाहर हो, सुरक्षा का अधिकार प्राप्त है ।
|
||||
|
||||
|
||||
जच्चा और बच्चा को खास सहायता और सुविधा का हक़ है । प्रत्येक बच्चे को चाहे वह विवाहिता माता से जन्मा हो या अविवाहिता से, समान सासाजिक संरक्षण प्राप्त होगा ।
|
||||
|
||||
|
||||
|
||||
अनुच्छेद २६.
|
||||
|
||||
|
||||
प्रत्येक व्यक्ति को शिक्षा का अधिकार है । शिक्षा कम से कम प्रारम्भिक और बुनियादी अवस्थाओं में निःशुल्क होगी । प्रारम्भिक शिक्षा अनिवार्य होगी । टेक्निकल, यांत्रिक और पेशों-सम्बन्धी शिक्षा साधारण रूप से प्राप्त होगी और उच्चतर शिक्षा सभी को योग्यता के आधार पर समान रूप से उपलब्ध होगी ।
|
||||
|
||||
|
||||
शिक्षा का उद्देश्य होगा मानव व्यक्तित्व का पूर्ण विकास और मानाव अधिकारों तथा बुनियादी स्वतन्त्रताओं के प्रति सम्मान को पुष्टि । शिक्षा द्वारा राष्ट्रों, जातियों अथवा घार्मिक समूहों के बीच आपसी सद्भावना, सहिष्णुता और मंत्री का विकास होगा और शांति बनाए रखने के लिए संयुक्त राष्ट्रों के प्रयत्नों के आगे बढ़ाया जाएगा ।
|
||||
|
||||
|
||||
माता-पिता को सबसे पहले इस बात का अक्षिकार है कि वे चुनाव कर सकें कि किस क़िस्म की शिक्षा उनके बच्चों को दी जाएगी ।
|
||||
|
||||
|
||||
|
||||
अनुच्छेद २७.
|
||||
|
||||
|
||||
प्रत्येक व्यक्ति को स्वतन्त्रतापूर्वक समाज के सांस्कृतिक जीवन में हिस्सा लेने, कलाओं का आनन्द लेने, तथा वैज्ञानिक उन्नति और उसकी सुविधाओं में भाग लेने का हक़ है ।
|
||||
|
||||
|
||||
प्रत्येक व्यक्ति को किसी भी ऐसी वैज्ञानिक, साहित्यिक या कलास्मक कृति मे उत्पन्न नैतिक और आर्थिक हितों की रक्षा का अधिकार है जिसका रचयिता वह स्वयं हो ।
|
||||
|
||||
|
||||
|
||||
अनुच्छेद २८.
|
||||
प्रत्येक व्यक्ति को ऐसी सामाजिक और अन्तर्राष्ट्रीय व्यवस्था की प्राप्ति का अधिकार है जिसमें इस घोषणा में उल्लिखित अधिकारों और स्वतन्त्रताओं को पूर्णतः प्राप्त किया जा सके ।
|
||||
|
||||
अनुच्छेद २९.
|
||||
|
||||
|
||||
प्रत्येक व्यक्ति का उसी समाज के प्रति कर्तव्य है जिसमें रहकर उसके व्यक्तित्व का स्वतन्त्र और पूर्ण विकास संभव हो ।
|
||||
|
||||
|
||||
अपने अधिकारों और स्वतन्त्रताओं का उपयोग करते हुए प्रत्येक व्यक्ति केवल ऐसी ही सीमाओं द्वारा बद्ध होगा, जो कानून द्वारा निश्चित की जाएंगी और जिनका एकमात्र उद्देश्य दूसरों के अधिकारों और स्वतन्त्रताओं के लिये आदर और समुचित स्वीकृति की प्राप्ति होगा तथा जिनकी आवश्यकता एक प्रजातन्त्रात्मक समाज में नैतिकता, सार्वजनिक व्यवस्था और सामान्य कल्याण की उचित आवश्यकताओं को पूरा करना होगा ।
|
||||
|
||||
|
||||
इन अधिकारों और स्वतन्त्रताओं का उपयोग किसी प्रकार से भी संयुक्त राष्ट्रों के सिद्धान्तों और उद्देश्यों के विरुद्ध नहीं किया जायगा ।
|
||||
|
||||
|
||||
|
||||
अनुच्छेद ३०.
|
||||
इस घोषणा में उल्लिखित किसी भी बात का यह अर्थ नहीं लगाना चाहिए जिससे यह प्रतीत हो कि किसी भी राज्य, समूह, या व्यक्ति की किसी ऐसे प्रयत्न में संलग्न होने या ऐसा कार्य करने का अधिकार है, जिसका उद्देश्य यहां बताये गए अधिकारों और स्वतन्त्रताओं में मे किसी का भी विनाश करना हो ।
|
||||
|
|
@ -0,0 +1,219 @@
|
|||
Universal Declaration of Human Rights - Korean
|
||||
© 1996 – 2009 The Office of the High Commissioner for Human Rights
|
||||
This plain text version prepared by the “UDHR in Unicode”
|
||||
project, http://www.unicode.org/udhr.
|
||||
---
|
||||
|
||||
세 계 인 권 선 언
|
||||
전 문
|
||||
모든 인류 구성원의 천부의 존엄성과 동등하고 양도할 수 없는 권리를 인정하는 것이 세계의 자유, 정의 및 평화의 기초이며,
|
||||
인권에 대한 무시와 경멸이 인류의 양심을 격분시키는 만행을 초래하였으며, 인간이 언론과 신앙의 자유, 그리고 공포와 결핍으로부터의 자유를 누릴 수 있는 세계의 도래가 모든 사람들의 지고한 열망으로서 천명되어 왔으며,
|
||||
인간이 폭정과 억압에 대항하는 마지막 수단으로서 반란을 일으키도록 강요받지 않으려면, 법에 의한 통치에 의하여 인권이 보호되어야 하는 것이 필수적이며,
|
||||
국가간에 우호관계의 발전을 증진하는 것이 필수적이며,
|
||||
국제연합의 모든 사람들은 그 헌장에서 기본적 인권, 인간의 존엄과 가치, 그리고 남녀의 동등한 권리에 대한 신념을 재확인하였으며, 보다 폭넓은 자유속에서 사회적 진보와 보다 나은 생활수준을 증진하기로 다짐하였고,
|
||||
회원국들은 국제연합과 협력하여 인권과 기본적 자유의 보편적 존중과 준수를 증진할 것을 스스로 서약하였으며,
|
||||
이러한 권리와 자유에 대한 공통의 이해가 이 서약의 완전한 이행을 위하여 가장 중요하므로,
|
||||
이에,
|
||||
국제연합총회는,
|
||||
모든 개인과 사회 각 기관이 이 선언을 항상 유념하면서 학습 및 교육을 통하여 이러한 권리와 자유에 대한 존중을 증진하기 위하여 노력하며, 국내적 그리고 국제적인 점진적 조치를 통하여 회원국 국민들 자신과 그 관할 영토의 국민들 사이에서 이러한 권리와 자유가 보편적이고 효과적으로 인식되고 준수되도록 노력하도록 하기 위하여, 모든 사람과 국가가 성취하여야 할 공통의 기준으로서 이 세계인권선언을 선포한다.
|
||||
|
||||
제 1 조
|
||||
모든 인간은 태어날 때부터 자유로우며 그 존엄과 권리에 있어 동등하다. 인간은 천부적으로 이성과 양심을 부여받았으며 서로 형제애의 정신으로 행동하여야 한다.
|
||||
|
||||
제 2 조
|
||||
모든 사람은 인종, 피부색, 성, 언어, 종교, 정치적 또는 기타의 견해, 민족적 또는 사회적 출신, 재산, 출생 또는 기타의 신분과 같은 어떠한 종류의 차별이 없이, 이 선언에 규정된 모든 권리와 자유를 향유할 자격이 있다.
|
||||
더 나아가 개인이 속한 국가 또는 영토가 독립국, 신탁통치지역, 비자치지역이거나 또는 주권에 대한 여타의 제약을 받느냐에 관계없이, 그 국가 또는 영토의 정치적, 법적 또는 국제적 지위에 근거하여 차별이 있어서는 아니된다.
|
||||
|
||||
제 3 조
|
||||
모든 사람은 생명과 신체의 자유와 안전에 대한 권리를 가진다.
|
||||
|
||||
제 4 조
|
||||
어느 누구도 노예상태 또는 예속상태에 놓여지지 아니한다. 모든 형태의 노예제도와 노예매매는 금지된다.
|
||||
|
||||
제 5 조
|
||||
어느 누구도 고문, 또는 잔혹하거나 비인도적이거나 굴욕적인 처우 또는 형벌을 받지 아니한다.
|
||||
|
||||
제 6 조
|
||||
모든 사람은 어디에서나 법 앞에 인간으로서 인정받을 권리를 가진다.
|
||||
|
||||
제 7 조
|
||||
모든 사람은 법 앞에 평등하며 어떠한 차별도 없이 법의 동등한 보호를 받을 권리를 가진다. 모든 사람은 이 선언에 위반되는 어떠한 차별과 그러한 차별의 선동으로부터 동등한 보호를 받을 권리를 가진다.
|
||||
|
||||
제 8 조
|
||||
모든 사람은 헌법 또는 법률이 부여한 기본적 권리를 침해하는 행위에 대하여 권한있는 국내법정에서 실효성 있는 구제를 받을 권리를 가진다.
|
||||
|
||||
제 9 조
|
||||
어느 누구도 자의적으로 체포, 구금 또는 추방되지 아니한다.
|
||||
|
||||
제 10 조
|
||||
모든 사람은 자신의 권리, 의무 그리고 자신에 대한 형사상 혐의에 대한 결정에 있어 독립적이며 공평한 법정에서 완전히 평등하게 공정하고 공개된 재판을 받을 권리를 가진다.
|
||||
|
||||
제 11 조
|
||||
|
||||
|
||||
모든 형사피의자는 자신의 변호에 필요한 모든 것이 보장된 공개 재판에서 법률에 따라 유죄로 입증될 때까지 무죄로 추정받을 권리를 가진다.
|
||||
|
||||
|
||||
어느 누구도 행위시에 국내법 또는 국제법에 의하여 범죄를 구성하지 아니하는 작위 또는 부작위를 이유로 유죄로 되지 아니한다. 또한 범죄 행위시에 적용될 수 있었던 형벌보다 무거운 형벌이 부과되지 아니한다.
|
||||
|
||||
|
||||
|
||||
제 12 조
|
||||
어느 누구도 그의 사생활, 가정, 주거 또는 통신에 대하여 자의적인 간섭을 받거나 또는 그의 명예와 명성에 대한 비난을 받지 아니한다. 모든 사람은 이러한 간섭이나 비난에 대하여 법의 보호를 받을 권리를 가진다.
|
||||
|
||||
제 13 조
|
||||
|
||||
|
||||
모든 사람은 자국내에서 이동 및 거주의 자유에 대한 권리를 가진다.
|
||||
|
||||
|
||||
모든 사람은 자국을 포함하여 어떠한 나라를 떠날 권리와 또한 자국으로 돌아올 권리를 가진다.
|
||||
|
||||
|
||||
|
||||
제 14 조
|
||||
|
||||
|
||||
모든 사람은 박해를 피하여 다른 나라에서 비호를 구하거나 비호를 받을 권리를 가진다.
|
||||
|
||||
|
||||
이러한 권리는 진실로 비정치적 범죄 또는 국제연합의 목적과 원칙에 위배되는 행위로 인하여 기소된 경우에는 주장될 수 없다.
|
||||
|
||||
|
||||
|
||||
제 15 조
|
||||
|
||||
|
||||
모든 사람은 국적을 가질 권리를 가진다.
|
||||
|
||||
|
||||
어느 누구도 자의적으로 자신의 국적을 박탈당하지 아니하며 자신의 국적을 변경할 권리가 부인되지 아니한다.
|
||||
|
||||
|
||||
|
||||
제 16 조
|
||||
|
||||
|
||||
성인 남녀는 인종, 국적 또는 종교에 따른 어떠한 제한도 없이 혼인하고 가정을 이룰 권리를 가진다. 그들은 혼인에 대하여, 혼인기간중 그리고 혼인해소시에 동등한 권리를 향유할 자격이 있다.
|
||||
|
||||
|
||||
혼인은 장래 배우자들의 자유롭고 완전한 동의하에서만 성립된다.
|
||||
|
||||
|
||||
가정은 사회의 자연적이고 기초적인 단위이며, 사회와 국가의 보호를 받을 권리가 있다.
|
||||
|
||||
|
||||
|
||||
제 17 조
|
||||
|
||||
|
||||
모든 사람은 단독으로 뿐만 아니라 다른 사람과 공동으로 재산을 소유할 권리를 가진다.
|
||||
|
||||
|
||||
어느 누구도 자의적으로 자신의 재산을 박탈당하지 아니한다.
|
||||
|
||||
|
||||
|
||||
제 18 조
|
||||
모든 사람은 사상, 양심 및 종교의 자유에 대한 권리를 가진다. 이러한 권리는 종교 또는 신념을 변경할 자유와, 단독으로 또는 다른 사람과 공동으로 그리고 공적으로 또는 사적으로 선교, 행사, 예배 및 의식에 의하여 자신의 종교나 신념을 표명하는 자유를 포함한다.
|
||||
|
||||
제 19 조
|
||||
모든 사람은 의견의 자유와 표현의 자유에 대한 권리를 가진다. 이러한 권리는 간섭없이 의견을 가질 자유와 국경에 관계없이 어떠한 매체를 통해서도 정보와 사상을 추구하고, 얻으며, 전달하는 자유를 포함한다.
|
||||
|
||||
제 20 조
|
||||
|
||||
|
||||
모든 사람은 평화적인 집회 및 결사의 자유에 대한 권리를 가진다.
|
||||
|
||||
|
||||
어느 누구도 어떤 결사에 참여하도록 강요받지 아니한다.
|
||||
|
||||
|
||||
|
||||
제 21 조
|
||||
|
||||
|
||||
모든 사람은 직접 또는 자유로이 선출된 대표를 통하여 자국의 정부에 참여할 권리를 가진다.
|
||||
|
||||
|
||||
모든 사람은 자국에서 동등한 공무담임권을 가진다.
|
||||
|
||||
|
||||
국민의 의사가 정부 권능의 기반이다. 이러한 의사는 보통·평등 선거권에 따라 비밀 또는 그에 상당한 자유 투표절차에 의한 정기적이고 진정한 선거에 의하여 표현된다.
|
||||
|
||||
|
||||
|
||||
제 22 조
|
||||
모든 사람은 사회의 일원으로서 사회보장을 받을 권리를 가지며, 국가적 노력과 국제적 협력을 통하여, 그리고 각 국가의 조직과 자원에 따라서 자신의 존엄과 인격의 자유로운 발전에 불가결한 경제적, 사회적 및 문화적 권리들을 실현할 권리를 가진다.
|
||||
|
||||
제 23 조
|
||||
|
||||
|
||||
모든 사람은 일, 직업의 자유로운 선택, 정당하고 유리한 노동 조건, 그리고 실업에 대한 보호의 권리를 가진다.
|
||||
|
||||
|
||||
모든 사람은 아무런 차별없이 동일한 노동에 대하여 동등한 보수를 받을 권리를 가진다.
|
||||
|
||||
|
||||
노동을 하는 모든 사람은 자신과 가족에게 인간의 존엄에 부합하는 생존을 보장하며, 필요한 경우에 다른 사회보장방법으로 보충되는 정당하고 유리한 보수에 대한 권리를 가진다.
|
||||
|
||||
|
||||
모든 사람은 자신의 이익을 보호하기 위하여 노동조합을 결성하고, 가입할 권리를 가진다.
|
||||
|
||||
|
||||
|
||||
제 24 조
|
||||
모든 사람은 노동시간의 합리적 제한과 정기적인 유급휴가를 포함하여 휴식과 여가의 권리를 가진다.
|
||||
|
||||
제 25 조
|
||||
|
||||
|
||||
모든 사람은 의식주, 의료 및 필요한 사회복지를 포함하여 자신과 가족의 건강과 안녕에 적합한 생활수준을 누릴 권리와, 실업, 질병, 장애, 배우자 사망, 노령 또는 기타 불가항력의 상황으로 인한 생계 결핍의 경우에 보장을 받을 권리를 가진다.
|
||||
|
||||
|
||||
어머니와 아동은 특별한 보호와 지원을 받을 권리를 가진다. 모든 아동은 적서에 관계없이 동일한 사회적 보호를 누린다.
|
||||
|
||||
|
||||
|
||||
제 26 조
|
||||
|
||||
|
||||
모든 사람은 교육을 받을 권리를 가진다. 교육은 최소한 초등 및 기초단계에서는 무상이어야 한다. 초등교육은 의무적이어야 한다. 기술 및 직업교육은 일반적으로 접근이 가능하여야 하며, 고등교육은 모든 사람에게 실력에 근거하여 동등하게 접근 가능하여야 한다.
|
||||
|
||||
|
||||
교육은 인격의 완전한 발전과 인권과 기본적 자유에 대한 존중의 강화를 목표로 한다. 교육은 모든 국가, 인종 또는 종교 집단간에 이해, 관용 및 우의를 증진하며, 평화의 유지를 위한 국제연합의 활동을 촉진하여야 한다.
|
||||
|
||||
|
||||
부모는 자녀에게 제공되는 교육의 종류를 선택할 우선권을 가진다.
|
||||
|
||||
|
||||
|
||||
제 27 조
|
||||
|
||||
|
||||
모든 사람은 공동체의 문화생활에 자유롭게 참여하며 예술을 향유하고 과학의 발전과 그 혜택을 공유할 권리를 가진다.
|
||||
|
||||
|
||||
모든 사람은 자신이 창작한 과학적, 문학적 또는 예술적 산물로부터 발생하는 정신적, 물질적 이익을 보호받을 권리를 가진다.
|
||||
|
||||
|
||||
|
||||
제 28 조
|
||||
모든 사람은 이 선언에 규정된 권리와 자유가 완전히 실현될 수 있도록 사회적, 국제적 질서에 대한 권리를 가진다.
|
||||
|
||||
제 29 조
|
||||
|
||||
|
||||
모든 사람은 그 안에서만 자신의 인격이 자유롭고 완전하게 발전할 수 있는 공동체에 대하여 의무를 가진다.
|
||||
|
||||
|
||||
모든 사람은 자신의 권리와 자유를 행사함에 있어, 다른 사람의 권리와 자유를 당연히 인정하고 존중하도록 하기 위한 목적과, 민주사회의 도덕, 공공질서 및 일반적 복리에 대한 정당한 필요에 부응하기 위한 목적을 위해서만 법에 따라 정하여진 제한을 받는다.
|
||||
|
||||
|
||||
이러한 권리와 자유는 어떠한 경우에도 국제연합의 목적과 원칙에 위배되어 행사되어서는 아니된다.
|
||||
|
||||
|
||||
|
||||
제 30 조
|
||||
이 선언의 어떠한 규정도 어떤 국가, 집단 또는 개인에게 이 선언에 규정된 어떠한 권리와 자유를 파괴하기 위한 활동에 가담하거나 또는 행위를 할 수 있는 권리가 있는 것으로 해석되어서는 아니된다.
|
||||
|
|
@ -7,19 +7,25 @@ package org.antlr.v4.runtime;
|
|||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.Reader;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.nio.IntBuffer;
|
||||
import java.nio.charset.CodingErrorAction;
|
||||
import java.nio.channels.Channels;
|
||||
import java.nio.channels.FileChannel;
|
||||
import java.nio.channels.ReadableByteChannel;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.CodingErrorAction;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
/**
|
||||
* Utility class to create {@link CodePointCharStream}s from
|
||||
* various sources of Unicode data.
|
||||
* Utility class to create {@link CharStream}s from various sources of
|
||||
* string data.
|
||||
*
|
||||
* Main entry points are the factory methods {@code CharStreams.fromPath()},
|
||||
* {@code CharStreams.fromString()}, etc.
|
||||
*/
|
||||
public final class CharStreams {
|
||||
private static final int DEFAULT_BUFFER_SIZE = 4096;
|
||||
|
@ -28,14 +34,221 @@ public final class CharStreams {
|
|||
private CharStreams() { }
|
||||
|
||||
/**
|
||||
* Convenience method to create a {@link CodePointCharStream}
|
||||
* for the Unicode code points in a Java {@link String}.
|
||||
* Creates a {@link CharStream} given a path to a UTF-8
|
||||
* encoded file on disk.
|
||||
*
|
||||
* Reads the entire contents of the file into the result before returning.
|
||||
*/
|
||||
public static CodePointCharStream createWithString(String s) {
|
||||
return createWithString(s, IntStream.UNKNOWN_SOURCE_NAME);
|
||||
public static CharStream fromPath(Path path) throws IOException {
|
||||
return fromPath(path, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
public static CodePointCharStream createWithString(String s, String sourceName) {
|
||||
/**
|
||||
* Creates a {@link CharStream} given a path to a file on disk and the
|
||||
* charset of the bytes contained in the file.
|
||||
*
|
||||
* Reads the entire contents of the file into the result before returning.
|
||||
*
|
||||
* For sources encoded in UTF-8, supports the full Unicode code point
|
||||
* range.
|
||||
*
|
||||
* For other sources, only supports Unicode code points up to U+FFFF.
|
||||
*/
|
||||
public static CharStream fromPath(Path path, Charset charset) throws IOException {
|
||||
if (charset.equals(StandardCharsets.UTF_8)) {
|
||||
try (ReadableByteChannel channel = Files.newByteChannel(path)) {
|
||||
return fromChannel(
|
||||
channel,
|
||||
DEFAULT_BUFFER_SIZE,
|
||||
CodingErrorAction.REPLACE,
|
||||
path.toString());
|
||||
}
|
||||
}
|
||||
else {
|
||||
return new ANTLRFileStream(path.toString(), charset.toString());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link CharStream} given a string containing a
|
||||
* path to a UTF-8 file on disk.
|
||||
*
|
||||
* Reads the entire contents of the file into the result before returning.
|
||||
*/
|
||||
public static CharStream fromFileName(String fileName) throws IOException {
|
||||
return fromPath(Paths.get(fileName), StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link CharStream} given a string containing a
|
||||
* path to a file on disk and the charset of the bytes
|
||||
* contained in the file.
|
||||
*
|
||||
* Reads the entire contents of the file into the result before returning.
|
||||
*
|
||||
* For sources encoded in UTF-8, supports the full Unicode code point
|
||||
* range.
|
||||
*
|
||||
* For other sources, only supports Unicode code points up to U+FFFF.
|
||||
*/
|
||||
public static CharStream fromFileName(String fileName, Charset charset) throws IOException {
|
||||
return fromPath(Paths.get(fileName), charset);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Creates a {@link CharStream} given an opened {@link InputStream}
|
||||
* containing UTF-8 bytes.
|
||||
*
|
||||
* Reads the entire contents of the {@code InputStream} into
|
||||
* the result before returning, then closes the {@code InputStream}.
|
||||
*/
|
||||
public static CharStream fromStream(InputStream is) throws IOException {
|
||||
return fromStream(is, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link CharStream} given an opened {@link InputStream} and the
|
||||
* charset of the bytes contained in the stream.
|
||||
*
|
||||
* Reads the entire contents of the {@code InputStream} into
|
||||
* the result before returning, then closes the {@code InputStream}.
|
||||
*
|
||||
* For sources encoded in UTF-8, supports the full Unicode code point
|
||||
* range.
|
||||
*
|
||||
* For other sources, only supports Unicode code points up to U+FFFF.
|
||||
*/
|
||||
public static CharStream fromStream(InputStream is, Charset charset) throws IOException {
|
||||
if (charset.equals(StandardCharsets.UTF_8)) {
|
||||
try (ReadableByteChannel channel = Channels.newChannel(is)) {
|
||||
return fromChannel(
|
||||
channel,
|
||||
DEFAULT_BUFFER_SIZE,
|
||||
CodingErrorAction.REPLACE,
|
||||
IntStream.UNKNOWN_SOURCE_NAME);
|
||||
}
|
||||
}
|
||||
else {
|
||||
try (InputStreamReader isr = new InputStreamReader(is, charset)) {
|
||||
return new ANTLRInputStream(isr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link CharStream} given an opened {@link ReadableByteChannel}
|
||||
* containing UTF-8 bytes.
|
||||
*
|
||||
* Reads the entire contents of the {@code channel} into
|
||||
* the result before returning, then closes the {@code channel}.
|
||||
*/
|
||||
public static CharStream fromChannel(ReadableByteChannel channel) throws IOException {
|
||||
return fromChannel(channel, StandardCharsets.UTF_8);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link CharStream} given an opened {@link ReadableByteChannel} and the
|
||||
* charset of the bytes contained in the channel.
|
||||
*
|
||||
* Reads the entire contents of the {@code channel} into
|
||||
* the result before returning, then closes the {@code channel}.
|
||||
*
|
||||
* For sources encoded in UTF-8, supports the full Unicode code point
|
||||
* range.
|
||||
*
|
||||
* For other sources, only supports Unicode code points up to U+FFFF.
|
||||
*/
|
||||
public static CharStream fromChannel(ReadableByteChannel channel, Charset charset) throws IOException {
|
||||
if (charset.equals(StandardCharsets.UTF_8)) {
|
||||
return fromChannel(
|
||||
channel,
|
||||
DEFAULT_BUFFER_SIZE,
|
||||
CodingErrorAction.REPLACE,
|
||||
IntStream.UNKNOWN_SOURCE_NAME);
|
||||
}
|
||||
else {
|
||||
try (InputStreamReader isr = new InputStreamReader(Channels.newInputStream(channel), charset)) {
|
||||
return new ANTLRInputStream(isr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link CharStream} given a {@link Reader}. Closes
|
||||
* the reader before returning.
|
||||
*/
|
||||
public static CodePointCharStream fromReader(Reader r) throws IOException {
|
||||
return fromReader(r, IntStream.UNKNOWN_SOURCE_NAME);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link CharStream} given a {@link Reader} and its
|
||||
* source name. Closes the reader before returning.
|
||||
*/
|
||||
public static CodePointCharStream fromReader(Reader r, String sourceName) throws IOException {
|
||||
IntBuffer codePointBuffer = IntBuffer.allocate(DEFAULT_BUFFER_SIZE);
|
||||
int highSurrogate = -1;
|
||||
int curCodeUnit;
|
||||
try {
|
||||
while ((curCodeUnit = r.read()) != -1) {
|
||||
if (!codePointBuffer.hasRemaining()) {
|
||||
// Grow the code point buffer size by 2.
|
||||
IntBuffer newBuffer = IntBuffer.allocate(codePointBuffer.capacity() * 2);
|
||||
codePointBuffer.flip();
|
||||
newBuffer.put(codePointBuffer);
|
||||
codePointBuffer = newBuffer;
|
||||
}
|
||||
if (Character.isHighSurrogate((char) curCodeUnit)) {
|
||||
if (highSurrogate != -1) {
|
||||
// Dangling high surrogate followed by another high surrogate.
|
||||
codePointBuffer.put(highSurrogate);
|
||||
}
|
||||
highSurrogate = curCodeUnit;
|
||||
}
|
||||
else if (Character.isLowSurrogate((char) curCodeUnit)) {
|
||||
if (highSurrogate == -1) {
|
||||
// Low surrogate not preceded by high surrogate.
|
||||
codePointBuffer.put(curCodeUnit);
|
||||
}
|
||||
else {
|
||||
codePointBuffer.put(Character.toCodePoint((char) highSurrogate, (char) curCodeUnit));
|
||||
highSurrogate = -1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (highSurrogate != -1) {
|
||||
// Dangling high surrogate followed by a non-surrogate.
|
||||
codePointBuffer.put(highSurrogate);
|
||||
highSurrogate = -1;
|
||||
}
|
||||
codePointBuffer.put(curCodeUnit);
|
||||
}
|
||||
}
|
||||
if (highSurrogate != -1) {
|
||||
// Dangling high surrogate at end of file.
|
||||
codePointBuffer.put(highSurrogate);
|
||||
}
|
||||
codePointBuffer.flip();
|
||||
return new CodePointCharStream(codePointBuffer, sourceName);
|
||||
}
|
||||
finally {
|
||||
r.close();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link CharStream} given a {@link String}.
|
||||
*/
|
||||
public static CodePointCharStream fromString(String s) {
|
||||
return fromString(s, IntStream.UNKNOWN_SOURCE_NAME);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a {@link CharStream} given a {@link String} and the {@code sourceName}
|
||||
* from which it came.
|
||||
*/
|
||||
public static CodePointCharStream fromString(String s, String sourceName) {
|
||||
// Initial guess assumes no code points > U+FFFF: one code
|
||||
// point for each code unit in the string
|
||||
IntBuffer codePointBuffer = IntBuffer.allocate(s.length());
|
||||
|
@ -56,48 +269,41 @@ public final class CharStreams {
|
|||
return new CodePointCharStream(codePointBuffer, sourceName);
|
||||
}
|
||||
|
||||
public static CodePointCharStream createWithUTF8(Path path) throws IOException {
|
||||
try (ReadableByteChannel channel = Files.newByteChannel(path)) {
|
||||
return createWithUTF8Channel(
|
||||
channel,
|
||||
DEFAULT_BUFFER_SIZE,
|
||||
CodingErrorAction.REPLACE,
|
||||
path.toString());
|
||||
}
|
||||
}
|
||||
|
||||
public static CodePointCharStream createWithUTF8Stream(InputStream is) throws IOException {
|
||||
try (ReadableByteChannel channel = Channels.newChannel(is)) {
|
||||
return createWithUTF8Channel(
|
||||
channel,
|
||||
DEFAULT_BUFFER_SIZE,
|
||||
CodingErrorAction.REPLACE,
|
||||
IntStream.UNKNOWN_SOURCE_NAME);
|
||||
}
|
||||
}
|
||||
|
||||
public static CodePointCharStream createWithUTF8Channel(
|
||||
ReadableByteChannel channel,
|
||||
int bufferSize,
|
||||
CodingErrorAction decodingErrorAction,
|
||||
String sourceName
|
||||
) throws IOException {
|
||||
ByteBuffer utf8BytesIn = ByteBuffer.allocateDirect(bufferSize);
|
||||
IntBuffer codePointsOut = IntBuffer.allocate(bufferSize);
|
||||
boolean endOfInput = false;
|
||||
UTF8CodePointDecoder decoder = new UTF8CodePointDecoder(decodingErrorAction);
|
||||
while (!endOfInput) {
|
||||
int bytesRead = channel.read(utf8BytesIn);
|
||||
endOfInput = (bytesRead == -1);
|
||||
utf8BytesIn.flip();
|
||||
codePointsOut = decoder.decodeCodePointsFromBuffer(
|
||||
/**
|
||||
* Creates a {@link CharStream} given an opened {@link ReadableByteChannel}
|
||||
* containing UTF-8 bytes.
|
||||
*
|
||||
* Reads the entire contents of the {@code channel} into
|
||||
* the result before returning, then closes the {@code channel}.
|
||||
*/
|
||||
public static CodePointCharStream fromChannel(
|
||||
ReadableByteChannel channel,
|
||||
int bufferSize,
|
||||
CodingErrorAction decodingErrorAction,
|
||||
String sourceName)
|
||||
throws IOException
|
||||
{
|
||||
try {
|
||||
ByteBuffer utf8BytesIn = ByteBuffer.allocateDirect(bufferSize);
|
||||
IntBuffer codePointsOut = IntBuffer.allocate(bufferSize);
|
||||
boolean endOfInput = false;
|
||||
UTF8CodePointDecoder decoder = new UTF8CodePointDecoder(decodingErrorAction);
|
||||
while (!endOfInput) {
|
||||
int bytesRead = channel.read(utf8BytesIn);
|
||||
endOfInput = (bytesRead == -1);
|
||||
utf8BytesIn.flip();
|
||||
codePointsOut = decoder.decodeCodePointsFromBuffer(
|
||||
utf8BytesIn,
|
||||
codePointsOut,
|
||||
endOfInput);
|
||||
utf8BytesIn.compact();
|
||||
utf8BytesIn.compact();
|
||||
}
|
||||
codePointsOut.limit(codePointsOut.position());
|
||||
codePointsOut.flip();
|
||||
return new CodePointCharStream(codePointsOut, sourceName);
|
||||
}
|
||||
finally {
|
||||
channel.close();
|
||||
}
|
||||
codePointsOut.limit(codePointsOut.position());
|
||||
codePointsOut.flip();
|
||||
return new CodePointCharStream(codePointsOut, sourceName);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -381,7 +381,7 @@ public class TestATNLexerInterpreter extends BaseJavaToolTest {
|
|||
|
||||
protected void checkLexerMatches(LexerGrammar lg, String inputString, String expecting) {
|
||||
ATN atn = createATN(lg, true);
|
||||
CharStream input = CharStreams.createWithString(inputString);
|
||||
CharStream input = CharStreams.fromString(inputString);
|
||||
ATNState startState = atn.modeNameToStartState.get("DEFAULT_MODE");
|
||||
DOTGenerator dot = new DOTGenerator(lg);
|
||||
// System.out.println(dot.getDOT(startState, true));
|
||||
|
|
|
@ -161,7 +161,7 @@ public class TestUnicodeGrammar extends BaseJavaToolTest {
|
|||
String inputText) throws Exception {
|
||||
Grammar grammar = new Grammar(grammarText);
|
||||
LexerInterpreter lexEngine = grammar.createLexerInterpreter(
|
||||
CharStreams.createWithString(inputText));
|
||||
CharStreams.fromString(inputText));
|
||||
CommonTokenStream tokens = new CommonTokenStream(lexEngine);
|
||||
GrammarParserInterpreter parser = grammar.createGrammarParserInterpreter(tokens);
|
||||
ParseTree parseTree = parser.parse(grammar.rules.get(rootRule).index);
|
||||
|
|
|
@ -1145,6 +1145,7 @@ csIdentifier ::= [
|
|||
"ushort" : "@ushort",
|
||||
"using" : "@using",
|
||||
"virtual" : "@virtual",
|
||||
"values" : "@values",
|
||||
"void" : "@void",
|
||||
"volatile" : "@volatile",
|
||||
"while" : "@while",
|
||||
|
|
|
@ -26,7 +26,6 @@ import java.lang.reflect.Constructor;
|
|||
import java.lang.reflect.InvocationTargetException;
|
||||
import java.lang.reflect.Method;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
@ -157,28 +156,12 @@ public class TestRig {
|
|||
|
||||
Charset charset = ( encoding == null ? Charset.defaultCharset () : Charset.forName(encoding) );
|
||||
if ( inputFiles.size()==0 ) {
|
||||
CharStream charStream;
|
||||
if ( charset.equals(StandardCharsets.UTF_8)) {
|
||||
charStream = CharStreams.createWithUTF8Stream(System.in);
|
||||
}
|
||||
else {
|
||||
try ( InputStreamReader r = new InputStreamReader(System.in, charset) ) {
|
||||
charStream = new ANTLRInputStream(r);
|
||||
}
|
||||
}
|
||||
CharStream charStream = CharStreams.fromStream(System.in, charset);
|
||||
process(lexer, parserClass, parser, charStream);
|
||||
return;
|
||||
}
|
||||
for (String inputFile : inputFiles) {
|
||||
CharStream charStream;
|
||||
if ( charset.equals(StandardCharsets.UTF_8) ) {
|
||||
charStream = CharStreams.createWithUTF8(Paths.get(inputFile));
|
||||
}
|
||||
else {
|
||||
try ( InputStreamReader r = new InputStreamReader(System.in, charset) ) {
|
||||
charStream = new ANTLRInputStream(r);
|
||||
}
|
||||
}
|
||||
CharStream charStream = CharStreams.fromPath(Paths.get(inputFile), charset);
|
||||
if ( inputFiles.size()>1 ) {
|
||||
System.err.println(inputFile);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue