1 // pest. The Elegant Parser
2 // Copyright (c) 2018 Dragoș Tiselice
3 //
4 // Licensed under the Apache License, Version 2.0
5 // <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT
6 // license <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
7 // option. All files in the project carrying such notice may not be copied,
8 // modified, or distributed except according to those terms.
9 
10 #![allow(clippy::range_plus_one)]
11 
12 extern crate maplit;
13 #[cfg(test)]
14 #[macro_use]
15 extern crate pest;
16 #[cfg(not(test))]
17 extern crate pest;
18 
19 use std::fmt::Display;
20 
21 pub mod ast;
22 pub mod optimizer;
23 pub mod parser;
24 pub mod validator;
25 
unwrap_or_report<T, E>(result: Result<T, E>) -> T where E: IntoIterator, E::Item: Display,26 pub fn unwrap_or_report<T, E>(result: Result<T, E>) -> T
27 where
28     E: IntoIterator,
29     E::Item: Display,
30 {
31     result.unwrap_or_else(|e| {
32         panic!(
33             "grammar error\n\n".to_owned()
34                 + &e.into_iter()
35                     .map(|error| format!("{}", error))
36                     .collect::<Vec<_>>()
37                     .join("\n\n")
38         )
39     })
40 }
41 
42 #[doc(hidden)]
43 pub static UNICODE_PROPERTY_NAMES: &[&str] = &[
44     /* BINARY */ "ALPHABETIC",
45     "BIDI_CONTROL",
46     "CASE_IGNORABLE",
47     "CASED",
48     "CHANGES_WHEN_CASEFOLDED",
49     "CHANGES_WHEN_CASEMAPPED",
50     "CHANGES_WHEN_LOWERCASED",
51     "CHANGES_WHEN_TITLECASED",
52     "CHANGES_WHEN_UPPERCASED",
53     "DASH",
54     "DEFAULT_IGNORABLE_CODE_POINT",
55     "DEPRECATED",
56     "DIACRITIC",
57     "EXTENDER",
58     "GRAPHEME_BASE",
59     "GRAPHEME_EXTEND",
60     "GRAPHEME_LINK",
61     "HEX_DIGIT",
62     "HYPHEN",
63     "IDS_BINARY_OPERATOR",
64     "IDS_TRINARY_OPERATOR",
65     "ID_CONTINUE",
66     "ID_START",
67     "IDEOGRAPHIC",
68     "JOIN_CONTROL",
69     "LOGICAL_ORDER_EXCEPTION",
70     "LOWERCASE",
71     "MATH",
72     "NONCHARACTER_CODE_POINT",
73     "OTHER_ALPHABETIC",
74     "OTHER_DEFAULT_IGNORABLE_CODE_POINT",
75     "OTHER_GRAPHEME_EXTEND",
76     "OTHER_ID_CONTINUE",
77     "OTHER_ID_START",
78     "OTHER_LOWERCASE",
79     "OTHER_MATH",
80     "OTHER_UPPERCASE",
81     "PATTERN_SYNTAX",
82     "PATTERN_WHITE_SPACE",
83     "PREPENDED_CONCATENATION_MARK",
84     "QUOTATION_MARK",
85     "RADICAL",
86     "REGIONAL_INDICATOR",
87     "SENTENCE_TERMINAL",
88     "SOFT_DOTTED",
89     "TERMINAL_PUNCTUATION",
90     "UNIFIED_IDEOGRAPH",
91     "UPPERCASE",
92     "VARIATION_SELECTOR",
93     "WHITE_SPACE",
94     "XID_CONTINUE",
95     "XID_START",
96     /* CATEGORY */ "CASED_LETTER",
97     "CLOSE_PUNCTUATION",
98     "CONNECTOR_PUNCTUATION",
99     "CONTROL",
100     "CURRENCY_SYMBOL",
101     "DASH_PUNCTUATION",
102     "DECIMAL_NUMBER",
103     "ENCLOSING_MARK",
104     "FINAL_PUNCTUATION",
105     "FORMAT",
106     "INITIAL_PUNCTUATION",
107     "LETTER",
108     "LETTER_NUMBER",
109     "LINE_SEPARATOR",
110     "LOWERCASE_LETTER",
111     "MARK",
112     "MATH_SYMBOL",
113     "MODIFIER_LETTER",
114     "MODIFIER_SYMBOL",
115     "NONSPACING_MARK",
116     "NUMBER",
117     "OPEN_PUNCTUATION",
118     "OTHER",
119     "OTHER_LETTER",
120     "OTHER_NUMBER",
121     "OTHER_PUNCTUATION",
122     "OTHER_SYMBOL",
123     "PARAGRAPH_SEPARATOR",
124     "PRIVATE_USE",
125     "PUNCTUATION",
126     "SEPARATOR",
127     "SPACE_SEPARATOR",
128     "SPACING_MARK",
129     "SURROGATE",
130     "SYMBOL",
131     "TITLECASE_LETTER",
132     "UNASSIGNED",
133     "UPPERCASE_LETTER",
134 ];
135