forked from gentoo-utils/gentoo-utils
update mon and use new ascii parsers
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
use core::option::Option::None;
|
||||
|
||||
use mon::{Parser, ParserIter, alphanumeric, eof, r#if, input::InputIter, numeric1, one_of, tag};
|
||||
use mon::{
|
||||
Parser, ParserIter, ascii_alphanumeric, ascii_numeric1, eof, r#if, input::InputIter, one_of,
|
||||
tag,
|
||||
};
|
||||
|
||||
use crate::{
|
||||
Parseable,
|
||||
@@ -40,7 +43,7 @@ impl<'a> Parseable<'a, &'a str> for VersionNumber {
|
||||
type Parser = impl Parser<&'a str, Output = Self>;
|
||||
|
||||
fn parser() -> Self::Parser {
|
||||
numeric1().map(|output: &str| VersionNumber(output.to_string()))
|
||||
ascii_numeric1().map(|output: &str| VersionNumber(output.to_string()))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -115,8 +118,11 @@ impl<'a> Parseable<'a, &'a str> for Category {
|
||||
type Parser = impl Parser<&'a str, Output = Self>;
|
||||
|
||||
fn parser() -> Self::Parser {
|
||||
let start = alphanumeric().or(one_of("_".chars()));
|
||||
let rest = alphanumeric().or(one_of("+_.-".chars())).repeated().many();
|
||||
let start = ascii_alphanumeric().or(one_of("_".chars()));
|
||||
let rest = ascii_alphanumeric()
|
||||
.or(one_of("+_.-".chars()))
|
||||
.repeated()
|
||||
.many();
|
||||
|
||||
start
|
||||
.and(rest)
|
||||
@@ -129,19 +135,19 @@ impl<'a> Parseable<'a, &'a str> for Name {
|
||||
type Parser = impl Parser<&'a str, Output = Self>;
|
||||
|
||||
fn parser() -> Self::Parser {
|
||||
let start = || alphanumeric().or(one_of("_".chars()));
|
||||
let start = || ascii_alphanumeric().or(one_of("_".chars()));
|
||||
|
||||
let rest = alphanumeric()
|
||||
let rest = ascii_alphanumeric()
|
||||
.or(one_of("_+".chars()))
|
||||
.or(one_of("-".chars()).and_not(
|
||||
Version::parser()
|
||||
.preceded_by(tag("-"))
|
||||
.followed_by(alphanumeric().or(one_of("_+-".chars())).not()),
|
||||
.followed_by(ascii_alphanumeric().or(one_of("_+-".chars())).not()),
|
||||
))
|
||||
.repeated()
|
||||
.many();
|
||||
|
||||
let verify = alphanumeric()
|
||||
let verify = ascii_alphanumeric()
|
||||
.or(one_of("_+".chars()))
|
||||
.or(one_of("-".chars())
|
||||
.and_not(Version::parser().preceded_by(tag("-")).followed_by(eof())))
|
||||
@@ -172,8 +178,11 @@ impl<'a> Parseable<'a, &'a str> for SlotName {
|
||||
type Parser = impl Parser<&'a str, Output = Self>;
|
||||
|
||||
fn parser() -> Self::Parser {
|
||||
let start = alphanumeric().or(one_of("_".chars()));
|
||||
let rest = alphanumeric().or(one_of("+_.-".chars())).repeated().many();
|
||||
let start = ascii_alphanumeric().or(one_of("_".chars()));
|
||||
let rest = ascii_alphanumeric()
|
||||
.or(one_of("+_.-".chars()))
|
||||
.repeated()
|
||||
.many();
|
||||
|
||||
start
|
||||
.and(rest)
|
||||
@@ -215,8 +224,11 @@ impl<'a> Parseable<'a, &'a str> for Repo {
|
||||
type Parser = impl Parser<&'a str, Output = Self>;
|
||||
|
||||
fn parser() -> Self::Parser {
|
||||
let start = alphanumeric().or(one_of("_".chars()));
|
||||
let rest = alphanumeric().or(one_of("+_-".chars())).repeated().many();
|
||||
let start = ascii_alphanumeric().or(one_of("_".chars()));
|
||||
let rest = ascii_alphanumeric()
|
||||
.or(one_of("+_-".chars()))
|
||||
.repeated()
|
||||
.many();
|
||||
|
||||
start
|
||||
.and(rest)
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
use std::path::PathBuf;
|
||||
|
||||
use mon::{Parser, ParserIter, alpha1, alphanumeric, r#if, one_of, tag, whitespace1};
|
||||
use mon::{
|
||||
Parser, ParserIter, ascii_alpha1, ascii_alphanumeric, ascii_whitespace1, r#if, one_of, tag,
|
||||
};
|
||||
|
||||
use crate::{
|
||||
Parseable,
|
||||
@@ -22,7 +24,7 @@ impl<'a> Parseable<'a, &'a str> for Uri {
|
||||
type Parser = impl Parser<&'a str, Output = Self>;
|
||||
|
||||
fn parser() -> Self::Parser {
|
||||
let protocol = alpha1::<&str>()
|
||||
let protocol = ascii_alpha1::<&str>()
|
||||
.followed_by(tag("://"))
|
||||
.map(|output: &str| output.to_string());
|
||||
let path = r#if(|c: &char| !c.is_ascii_whitespace())
|
||||
@@ -67,8 +69,11 @@ impl<'a> Parseable<'a, &'a str> for License {
|
||||
type Parser = impl Parser<&'a str, Output = Self>;
|
||||
|
||||
fn parser() -> Self::Parser {
|
||||
let start = alphanumeric().or(one_of("_".chars()));
|
||||
let rest = alphanumeric().or(one_of("+_.-".chars())).repeated().many();
|
||||
let start = ascii_alphanumeric().or(one_of("_".chars()));
|
||||
let rest = ascii_alphanumeric()
|
||||
.or(one_of("+_.-".chars()))
|
||||
.repeated()
|
||||
.many();
|
||||
|
||||
start
|
||||
.and(rest)
|
||||
@@ -81,8 +86,11 @@ impl<'a> Parseable<'a, &'a str> for Eapi {
|
||||
type Parser = impl Parser<&'a str, Output = Self>;
|
||||
|
||||
fn parser() -> Self::Parser {
|
||||
let start = alphanumeric().or(one_of("_".chars()));
|
||||
let rest = alphanumeric().or(one_of("+_.-".chars())).repeated().many();
|
||||
let start = ascii_alphanumeric().or(one_of("_".chars()));
|
||||
let rest = ascii_alphanumeric()
|
||||
.or(one_of("+_.-".chars()))
|
||||
.repeated()
|
||||
.many();
|
||||
|
||||
start
|
||||
.and(rest)
|
||||
@@ -116,23 +124,23 @@ where
|
||||
|it| {
|
||||
let exprs = || {
|
||||
Depend::parser()
|
||||
.separated_by_with_trailing(whitespace1())
|
||||
.separated_by_with_trailing(ascii_whitespace1())
|
||||
.at_least(1)
|
||||
.delimited_by(tag("(").followed_by(whitespace1()), tag(")"))
|
||||
.delimited_by(tag("(").followed_by(ascii_whitespace1()), tag(")"))
|
||||
};
|
||||
|
||||
let all_of_group = exprs().map(|exprs| Depend::AllOf(exprs));
|
||||
|
||||
let any_of_group = exprs()
|
||||
.preceded_by(tag("||").followed_by(whitespace1()))
|
||||
.preceded_by(tag("||").followed_by(ascii_whitespace1()))
|
||||
.map(|exprs| Depend::AnyOf(exprs));
|
||||
|
||||
let one_of_group = exprs()
|
||||
.preceded_by(tag("^^").followed_by(whitespace1()))
|
||||
.preceded_by(tag("^^").followed_by(ascii_whitespace1()))
|
||||
.map(|exprs| Depend::OneOf(exprs));
|
||||
|
||||
let conditional_group = Conditional::parser()
|
||||
.followed_by(whitespace1())
|
||||
.followed_by(ascii_whitespace1())
|
||||
.and(exprs())
|
||||
.map(|(conditional, exprs)| Depend::ConditionalGroup(conditional, exprs));
|
||||
|
||||
@@ -189,7 +197,7 @@ mod test {
|
||||
let it = InputIter::new("flag? ( || ( foo/bar foo/bar ) )");
|
||||
|
||||
Depend::<Atom>::parser()
|
||||
.separated_by(whitespace1())
|
||||
.separated_by(ascii_whitespace1())
|
||||
.many()
|
||||
.check_finished(it)
|
||||
.unwrap();
|
||||
|
||||
@@ -5,7 +5,7 @@ use std::{
|
||||
|
||||
use get::Get;
|
||||
|
||||
use mon::{Parser, ParserIter, input::InputIter, tag, whitespace1};
|
||||
use mon::{Parser, ParserIter, ascii_whitespace1, input::InputIter, tag};
|
||||
|
||||
use crate::{
|
||||
Parseable,
|
||||
@@ -208,7 +208,7 @@ fn read_src_uri(input: &str) -> Option<Result<Vec<Depend<SrcUri>>, Error>> {
|
||||
.find_map(|line| line.strip_prefix("SRC_URI="))?;
|
||||
|
||||
match Depend::<SrcUri>::parser()
|
||||
.separated_by(whitespace1())
|
||||
.separated_by(ascii_whitespace1())
|
||||
.many()
|
||||
.parse_finished(InputIter::new(line))
|
||||
{
|
||||
@@ -232,7 +232,7 @@ fn read_inherit(input: &str) -> Option<Result<Vec<Eclass>, Error>> {
|
||||
.find_map(|line| line.strip_prefix("INHERIT="))?;
|
||||
|
||||
match Eclass::parser()
|
||||
.separated_by(whitespace1())
|
||||
.separated_by(ascii_whitespace1())
|
||||
.many()
|
||||
.parse_finished(InputIter::new(line))
|
||||
{
|
||||
@@ -245,7 +245,7 @@ fn read_iuse(input: &str) -> Option<Result<Vec<IUseFlag>, Error>> {
|
||||
let line = input.lines().find_map(|line| line.strip_prefix("IUSE="))?;
|
||||
|
||||
match IUseFlag::parser()
|
||||
.separated_by(whitespace1())
|
||||
.separated_by(ascii_whitespace1())
|
||||
.many()
|
||||
.parse_finished(InputIter::new(line))
|
||||
{
|
||||
@@ -260,7 +260,7 @@ fn read_license(input: &str) -> Option<Result<Vec<Depend<License>>, Error>> {
|
||||
.find_map(|line| line.strip_suffix("LICENSE="))?;
|
||||
|
||||
match Depend::<License>::parser()
|
||||
.separated_by(whitespace1())
|
||||
.separated_by(ascii_whitespace1())
|
||||
.many()
|
||||
.parse_finished(InputIter::new(line))
|
||||
{
|
||||
@@ -309,7 +309,7 @@ fn read_idepend(input: &str) -> Option<Result<Vec<Depend<Atom>>, Error>> {
|
||||
|
||||
fn parse_depends(line: &str) -> Result<Vec<Depend<Atom>>, Error> {
|
||||
Depend::<Atom>::parser()
|
||||
.separated_by(whitespace1())
|
||||
.separated_by(ascii_whitespace1())
|
||||
.many()
|
||||
.parse_finished(InputIter::new(line))
|
||||
.map_err(|_| Error::Parser(line.to_string()))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use mon::{Parser, ParserIter, alphanumeric, one_of, tag};
|
||||
use mon::{Parser, ParserIter, ascii_alphanumeric, one_of, tag};
|
||||
|
||||
use crate::{
|
||||
Parseable,
|
||||
@@ -9,8 +9,11 @@ impl<'a> Parseable<'a, &'a str> for UseFlag {
|
||||
type Parser = impl Parser<&'a str, Output = Self>;
|
||||
|
||||
fn parser() -> Self::Parser {
|
||||
let start = alphanumeric();
|
||||
let rest = alphanumeric().or(one_of("+_@-".chars())).repeated().many();
|
||||
let start = ascii_alphanumeric();
|
||||
let rest = ascii_alphanumeric()
|
||||
.or(one_of("+_@-".chars()))
|
||||
.repeated()
|
||||
.many();
|
||||
|
||||
start
|
||||
.and(rest)
|
||||
|
||||
Reference in New Issue
Block a user