+
+ // Repeat //////////////////////////////////////////////////////////////////////////////
+
+ /** repeat zero or one times */
+ public static Element maybe(Element e) { return new Repeat(e, true, false, null, null); }
+ public static Element maybe(Element e, Object tag) { return new Repeat(e, true, false, null, tag); }
+ /** repeat zero or more times */
+ public static Element many0(Element e) { return new Repeat(e, true, true, null, null); }
+ public static Element many0(Element e, Object tag) { return new Repeat(e, true, true, null, tag); }
+ /** repeat zero or more times, separated by <tt>sep</tt> */
+ public static Element many0(Element e, Element sep) { return new Repeat(e, true, true, sep, null); }
+ public static Element many0(Element e, Element sep, Object tag) { return new Repeat(e, true, true, sep, tag); }
+ /** repeat one or more times */
+ public static Element many1(Element e) { return new Repeat(e, false, true, null, null); }
+ public static Element many1(Element e, Object tag) { return new Repeat(e, false, true, null, tag); }
+ /** repeat one or more times, separated by <tt>sep</tt> */
+ public static Element many1(Element e, Element sep) { return new Repeat(e, false, true, sep, null); }
+ public static Element many1(Element e, Element sep, Object tag) { return new Repeat(e, false, true, sep, tag); }
+
+ /** repeat zero or more times, matching a maximal sequence of atoms */
+ public static Element maximal0(Atom e) { return new Repeat.Maximal(e, true, true, null); }
+ public static Element maximal0(Atom e, Object tag) { return new Repeat.Maximal(e, true, true, tag); }
+ /** repeat one or more times, matching a maximal sequence of atoms */
+ public static Element maximal1(Atom e) { return new Repeat.Maximal(e, false, true, null); }
+ public static Element maximal1(Atom e, Object tag) { return new Repeat.Maximal(e, false, true, tag); }
+ /** repeat one or more times, separated by an atom <tt>sep</tt>, matching a maximal sequence */
+ public static Element maximal1(Element e, Atom sep) { return new Repeat.Maximal(e, false, true, sep, null); }
+ public static Element maximal1(Element e, Atom sep, Object tag) { return new Repeat.Maximal(e, false, true, sep, tag); }
+
+ public static Element repeatMaximal(Atom e, boolean zero, boolean many, Object tag) {
+ return new Repeat.Maximal(e, zero, many, tag); }
+ public static Element repeatMaximal(Element e, boolean zero, boolean many, Atom sep, Object tag) {
+ return new Repeat.Maximal(e, zero, many, sep, tag); }
+ public static Element repeat(Element e, boolean zero, boolean many, Object tag) {
+ return new Repeat(e, zero, many, tag); }
+ public static Element repeat(Element e, boolean zero, boolean many, Element sep, Object tag) {
+ return new Repeat(e, zero, many, sep, tag); }