def quoted(char=anychar, quot=charclass('\'"'), esc=lit('\\')): charseq = seq(but(state.check), char) if esc: escseq = seq(skip(esc), alter(quot, esc)) charseq = alter(escseq, charseq) return wrap_parser('quoted')( surround(pipe(star(charseq), join), state.push(quot), state.pop) )
def braced(char=anychar, left=lit('('), right=lit(')'), esc=lit('\\')): charseq = seq(but(right), char) if esc: escseq = seq(skip(esc), alter(right, esc)) charseq = alter(escseq, charseq) return wrap_parser('braced')( surround(pipe(star(charseq), join), left, right) )
def word(w, border='\t '): from greencss.lexer.parsers.compound import seq, star border = star(charclass(border)) return wrap_parser('word', w)( seq(border, lit(w), border) )
def surround(parser, left=lit('('), right=lit(')')): return wrap_parser('surround')( seq(skip(left), parser, skip(right)))
def commalist(parser, comma=lit(','), wsp=charclass('\t ')): delim = seq(star(wsp), comma, star(wsp)) return wrap_parser('commalist')( seq(parser, star(seq(skip(delim), parser))))
def plus(parser): ''' One or more parser ''' return wrap_parser('plus', parser)(seq(parser, star(parser)))
def plus(parser): """ One or more parser """ return wrap_parser("plus", parser)(seq(parser, star(parser)))