package tokenize_test import ( "fmt" "testing" "git.makaay.nl/mauricem/go-parsekit/tokenize" ) func TestSyntacticSugar(t *testing.T) { var a = tokenize.A AssertHandlers(t, []HandlerT{ {"aaaaaa", a.Rune('a').Times(4), true, "aaaa"}, {"ababab", a.Rune('a').Or(a.Rune('b')).Times(4), true, "abab"}, {"ababab", a.Rune('a').Then(a.Rune('b')), true, "ab"}, {"bababa", a.Rune('a').Then(a.Rune('b')), false, ""}, {"cccccc", a.Rune('c').Optional(), true, "c"}, {"dddddd", a.Rune('c').Optional(), true, ""}, {"a,b ,c, d|", a.ASCII.SeparatedBy(a.Space.Optional().Then(a.Comma).Then(a.Space.Optional())), true, "a,b ,c, d"}, }) } func ExampleHandler_Times() { c, a := tokenize.C, tokenize.A phoneNumber := c.Seq(a.Rune('0'), a.Digit.Times(9)) fmt.Println(phoneNumber.Match("0201234567")) // Output: // 0201234567 } func ExampleHandler_Then() { c, a := tokenize.C, tokenize.A phoneNumber := a.Rune('0').Then(c.Rep(9, a.Digit)) fmt.Println(phoneNumber.Match("0208888888")) // Output: // 0208888888 } func ExampleHandler_Or() { c, a := tokenize.C, tokenize.A phoneNumber := c.Seq(a.Str("00").Or(a.Plus), a.Str("31"), a.DigitNotZero, c.Rep(8, a.Digit)) fmt.Println(phoneNumber.Match("+31209876543")) fmt.Println(phoneNumber.Match("0031209876543")) fmt.Println(phoneNumber.Match("0031020991234")) fmt.Println(phoneNumber.Match("0031201234")) // Output: // +31209876543 // 0031209876543 // mismatch at start of file // mismatch at start of file } func ExampleHandler_SeparatedBy() { a, t := tokenize.A, tokenize.T csv := t.Int("number", a.Digits).SeparatedBy(a.Comma) r, _ := csv.Match("123,456,7,8,9") for i, token := range r.Tokens() { fmt.Printf("[%d] %v\n", i, token) } // Output: // [0] number("123", value = (int)123) // [1] number("456", value = (int)456) // [2] number("7", value = (int)7) // [3] number("8", value = (int)8) // [4] number("9", value = (int)9) } func ExampleHandler_Optional() { c, a := tokenize.C, tokenize.A spanish := c.Seq( a.Rune('¿').Optional(), c.OneOrMore(a.AnyRune.Except(a.Question)), a.Rune('?').Optional()) fmt.Println(spanish.Match("¿Habla español María?")) fmt.Println(spanish.Match("Sí, María habla español.")) // Output: // ¿Habla español María? // Sí, María habla español. } func ExampleHandler_Match() { r, err := tokenize.A.IPv4.Match("001.002.003.004") fmt.Println(r, err) r, err = tokenize.A.IPv4.Match("1.2.3") fmt.Println(r, err) // Output: // 1.2.3.4 // mismatch at start of file }