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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
//! Parser for basic alphabets defined in the table 1 of ISO-10303-21
use super::combinator::*;
use nom::{
branch::alt,
character::complete::{char, satisfy},
Parser,
};
/// latin_codepoint = [space] | [digit] | [lower] | [upper] | [special] | [reverse_solidus] | [apostrophe]
pub fn latin_codepoint(input: &str) -> ParseResult<char> {
alt((
space,
digit,
lower,
upper,
special,
reverse_solidus,
apostrophe,
))
.parse(input)
}
/// space = ` ` .
pub fn space(input: &str) -> ParseResult<char> {
char(' ')(input)
}
/// digit = `0` | `1` | `2` | `3` | `4` | `5` | `6` | `7` | `8` | `9` .
pub fn digit(input: &str) -> ParseResult<char> {
satisfy(|c| matches!(c, '0'..='9')).parse(input)
}
/// lower = `a` | `b` | `c` | `d` | `e` | `f` | `g` | `h`
/// | `i` | `j` | `k` | `l` | `m` | `n` | `o` | `p`
/// | `q` | `r` | `s` | `t` | `u` | `v` | `w` | `x`
/// | `y` | `z` .
pub fn lower(input: &str) -> ParseResult<char> {
satisfy(|c| matches!(c, 'a'..='z')).parse(input)
}
/// upper = `A` | `B` | `C` | `D` | `E` | `F` | `G` | `H`
/// | `I` | `J` | `K` | `L` | `M` | `N` | `O` | `P`
/// | `Q` | `R` | `S` | `T` | `U` | `V` | `W` | `X`
/// | `Y` | `Z` | `_` .
pub fn upper(input: &str) -> ParseResult<char> {
satisfy(|c| matches!(c, 'A'..='Z' | '_')).parse(input)
}
/// special = `!` | `"` | `*` | `$` | `%` | `&` | `.` | `#` | `+` | `,` | `-` | `(` | `)` | `?` | `/` | `:` | `;` | `<` | `=` | `>` | `@` | `[` | `]` | `{` | `|` | `}` | `^` | \` | `~` .
pub fn special(input: &str) -> ParseResult<char> {
satisfy(|c| {
matches!(
c,
'!' | '"'
| '*'
| '$'
| '%'
| '&'
| '.'
| '#'
| '+'
| ','
| '-'
| '('
| ')'
| '?'
| '/'
| ':'
| ';'
| '<'
| '='
| '>'
| '@'
| '['
| ']'
| '{'
| '|'
| '}'
| '^'
| '`'
| '~'
)
})
.parse(input)
}
/// reverse_solidus = `\\` .
pub fn reverse_solidus(input: &str) -> ParseResult<char> {
char('\\')(input)
}
/// apostrophe = `'` .
pub fn apostrophe(input: &str) -> ParseResult<char> {
char('\'')(input)
}