diff options
author | Chris Loer <chris.loer@gmail.com> | 2018-05-31 14:26:41 -0700 |
---|---|---|
committer | Chris Loer <chris.loer@gmail.com> | 2018-06-07 14:14:20 -0700 |
commit | b860df3125a444f29377bb2195a3f05795a62689 (patch) | |
tree | 055fbc56f0d73ff8a3a547d89e0703937b411133 | |
parent | aff80cb4740f05b357d740945316c7193585c5b4 (diff) | |
download | qtlocation-mapboxgl-b860df3125a444f29377bb2195a3f05795a62689.tar.gz |
Extend "-"/eoi lookahead to all subtags.
-rw-r--r-- | src/mbgl/text/language_tag.cpp | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/src/mbgl/text/language_tag.cpp b/src/mbgl/text/language_tag.cpp index 9813011b2d..71c9878532 100644 --- a/src/mbgl/text/language_tag.cpp +++ b/src/mbgl/text/language_tag.cpp @@ -130,21 +130,20 @@ struct bcp47_parser : qi::grammar<Iterator> | repeat(4)[alpha] // or reserved for future use | repeat(5,8)[alpha]; // or registered language subtag - // extlang adds a lookahead for "-"/eoi so that a spurious match against the first three - // characters of script doesn't prevent backtracking. + // We add lookaheads for "-"/eoi so that spurious matches on subtags don't prevent backtracking extlang = repeat(3)[alpha] >> (&lit('-') | eoi) >> repeat(0,2)["-" >> repeat(3)[alpha] >> (&lit('-') | eoi)]; - script = repeat(4)[alpha]; + script = repeat(4)[alpha] >> (&lit('-') | eoi); - region = repeat(2)[alpha] | repeat(3)[digit]; + region = (repeat(2)[alpha] | repeat(3)[digit]) >> (&lit('-') | eoi); - variant = repeat(5,8)[alnum] | (digit >> repeat(3,inf)[alnum]); + variant = (repeat(5,8)[alnum] | (digit >> repeat(3,inf)[alnum])) >> (&lit('-') | eoi); - extension = singleton >> +("-" >> repeat(2,8)[alnum]); + extension = singleton >> +("-" >> repeat(2,8)[alnum]) >> (&lit('-') | eoi); singleton = digit | char_('a','w') | char_('y','z'); // "no-case" handles A-W and Y-Z - privateuse = "x" >> +("-" >> repeat(1,8)[alnum]); + privateuse = "x" >> +("-" >> repeat(1,8)[alnum]) >> (&lit('-') | eoi); grandfathered = regular | irregular; |