summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Loer <chris.loer@gmail.com>2018-05-31 14:26:41 -0700
committerChris Loer <chris.loer@gmail.com>2018-06-07 14:14:20 -0700
commitb860df3125a444f29377bb2195a3f05795a62689 (patch)
tree055fbc56f0d73ff8a3a547d89e0703937b411133
parentaff80cb4740f05b357d740945316c7193585c5b4 (diff)
downloadqtlocation-mapboxgl-b860df3125a444f29377bb2195a3f05795a62689.tar.gz
Extend "-"/eoi lookahead to all subtags.
-rw-r--r--src/mbgl/text/language_tag.cpp13
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;