| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 /** | 5 /** |
| 6 * Contains a parser for ICU format plural/gender/select format for localized | 6 * Contains a parser for ICU format plural/gender/select format for localized |
| 7 * messages. See extract_to_arb.dart and make_hardcoded_translation.dart. | 7 * messages. See extract_to_arb.dart and make_hardcoded_translation.dart. |
| 8 */ | 8 */ |
| 9 library icu_parser; | 9 library icu_parser; |
| 10 | 10 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 get icuEscapedText => quotedCurly | twoSingleQuotes; | 26 get icuEscapedText => quotedCurly | twoSingleQuotes; |
| 27 get curly => (openCurly | closeCurly); | 27 get curly => (openCurly | closeCurly); |
| 28 get notAllowedInIcuText => curly | char("<"); | 28 get notAllowedInIcuText => curly | char("<"); |
| 29 get icuText => notAllowedInIcuText.neg(); | 29 get icuText => notAllowedInIcuText.neg(); |
| 30 get notAllowedInNormalText => char("{"); | 30 get notAllowedInNormalText => char("{"); |
| 31 get normalText => notAllowedInNormalText.neg(); | 31 get normalText => notAllowedInNormalText.neg(); |
| 32 get messageText => (icuEscapedText | icuText).plus().map((x) => x.join()); | 32 get messageText => (icuEscapedText | icuText).plus().map((x) => x.join()); |
| 33 get nonIcuMessageText => normalText.plus().map((x) => x.join()); | 33 get nonIcuMessageText => normalText.plus().map((x) => x.join()); |
| 34 get twoSingleQuotes => string("''").map((x) => "'"); | 34 get twoSingleQuotes => string("''").map((x) => "'"); |
| 35 get number => digit().plus().flatten().trim().map(int.parse); | 35 get number => digit().plus().flatten().trim().map(int.parse); |
| 36 get id => (letter() & (word() | char("_")).star()).flatten(); | 36 get id => (letter() & (word() | char("_")).star()).flatten().trim(); |
| 37 get comma => char(",").trim(); | 37 get comma => char(",").trim(); |
| 38 | 38 |
| 39 /** | 39 /** |
| 40 * Given a list of possible keywords, return a rule that accepts any of them. | 40 * Given a list of possible keywords, return a rule that accepts any of them. |
| 41 * e.g., given ["male", "female", "other"], accept any of them. | 41 * e.g., given ["male", "female", "other"], accept any of them. |
| 42 */ | 42 */ |
| 43 asKeywords(list) => list.map(string).reduce((a, b) => a | b).flatten().trim(); | 43 asKeywords(list) => list.map(string).reduce((a, b) => a | b).flatten().trim(); |
| 44 | 44 |
| 45 get pluralKeyword => asKeywords( | 45 get pluralKeyword => asKeywords( |
| 46 ["=0", "=1", "=2", "zero", "one", "two", "few", "many", "other"]); | 46 ["=0", "=1", "=2", "zero", "one", "two", "few", "many", "other"]); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 99 | 99 |
| 100 get stuff => (pluralOrGenderOrSelect | empty) | 100 get stuff => (pluralOrGenderOrSelect | empty) |
| 101 .map((chunk) => Message.from(chunk, null)); | 101 .map((chunk) => Message.from(chunk, null)); |
| 102 | 102 |
| 103 IcuParser() { | 103 IcuParser() { |
| 104 // There is a cycle here, so we need the explicit set to avoid | 104 // There is a cycle here, so we need the explicit set to avoid |
| 105 // infinite recursion. | 105 // infinite recursion. |
| 106 interiorText.set(contents.plus() | empty); | 106 interiorText.set(contents.plus() | empty); |
| 107 } | 107 } |
| 108 } | 108 } |
| OLD | NEW |