module /** */ import { many } from "../combinators/many" ; import { stringify } from "../combinators/stringify" ; import { stringLen } from "./string-len" ; import { charWhere } from "./char-where" ; import { Parjser } from "../parjser" ; import { isLetter , isDigit , uniIsDecimal , uniIsLetter , uniIsLower , isHex , isUpper , isLower , isSpace , isNewline , uniIsUpper } from "char-info" ; import { must } from "../combinators/must" ; /**
 * Returns a parser that parses any single character. Equivalent
 * to `stringLen(1)`.
 */ export function anyChar ( ) { return stringLen ( 1 ) ; } /**
 * Returns a parser that parses a single ASCII inline space.
 */ export function space ( ) { return charWhere ( x => isSpace ( x ) || { reason : "expecting a space" } ) ; } /**
 * Returns a parser that parses at least one ASCII inline space.
 */ export function spaces1 ( ) { return space ( ) . pipe ( many ( ) , must ( x => x . length > 0 || { kind : "Soft" } ) , stringify ( ) ) ; } param options export function anyCharOf ( options ) { return charWhere ( c => options . includes ( c ) || { reason : `any char of ${ options }` } ) ; } param exclusions export function noCharOf ( exclusions ) { return charWhere ( c => ! exclusions . includes ( c ) || { reason : `no char of: ${ exclusions }` } ) ; } /**
 * Returns a parser that parses a single ASCII letter.
 */ export function letter ( ) { return charWhere ( x => isLetter ( x ) || { reason : "expecting a letter" } ) ; } /**
 * Returns a parser that parses a single Unicode letter.
 */ export function uniLetter ( ) { return charWhere ( x => uniIsLetter . char ( x ) || { reason : "expecting a Unicode letter" } ) ; } /**
 * Returns a parser that parses a single digit in base `base`.
 */ export function digit ( base = 10 ) { return charWhere ( x => isDigit ( x , base ) || { reason : `expecting a digit in base ${ base }` } ) ; } /**
 * Returns a parser that parses a single Unicode decimal digit.
 */ export function uniDecimal ( ) { return charWhere ( x => uniIsDecimal . char ( x ) || { reason : `expecting a Unicode decimal digit` } ) ; } /**
 * Returns a parser that parses a single Unicode upper-case character.
 */ export function uniUpper ( ) { return charWhere ( x => uniIsUpper . char ( x ) || { reason : `expecting a Unicode upper-case letter` } ) ; } /**
 * Returns a parser that parses a single hex digit.
 */ export function hex ( ) { return charWhere ( x => isHex ( x ) || { reason : "expecting a hex digit" } ) ; } /**
 * Returns a parser that parses a single ASCII lowercase letter.
 */ export function lower ( ) { return charWhere ( x => isLower ( x ) || { reason : "expecting a lowercase letter" } ) ; } /**
 * Returns a parser that parses a single uppercase ASCII letter.
 */ export function upper ( ) { return charWhere ( x => isUpper ( x ) || { reason : "expecting an uppercase letter" } ) ; } /**
 * Returns a parser that parses a single lowercase Unicode letter.
 */ export function uniLower ( ) { return charWhere ( x => uniIsLower . char ( x ) || { reason : "expecting a Unicode lowercase letter" } ) ; } /**
 * Returns a parser that parses any amount of ASCII whitespace characters
 * and yields the parsed text.
 */ export function whitespace ( ) { return charWhere ( char => isSpace ( char ) || isNewline ( char ) || { reason : "expecting a whitespaced character" } ) . pipe ( many ( ) , stringify ( ) ) ; }