private PartRules ParsePartRulesList() { PartRules result = new PartRules(); m_parser.AssertNextTokenTypeAndConsume(JsonParser.TokenType.ObjectStart); while (!m_parser.CheckNextTokenTypeAndConsumeIfTrue(JsonParser.TokenType.ObjectEnd)) { bool ruleGroupIsSuffix; string ruleGroupName = m_parser.GetNextPropertyName(); switch (ruleGroupName) { case "exceptions": ruleGroupIsSuffix = false; break; case "suffixes": ruleGroupIsSuffix = true; break; default: throw new ParseException("Unexpected rule group '" + ruleGroupName + "'"); } m_parser.AssertNextTokenTypeAndConsume(JsonParser.TokenType.ArrayStart); while (!m_parser.CheckNextTokenTypeAndConsumeIfTrue(JsonParser.TokenType.ArrayEnd)) { IRule rule = ParseRule(ruleGroupIsSuffix); result.Add(rule); } } return(result); }
private void ParseRuleSet() { string rulePartName = m_parser.GetNextPropertyName(); NamePart rulePart = ParseNamePart(rulePartName); PartRules rules = ParsePartRulesList(); m_data[rulePart] = rules; }
public string Inflect(string namePartValue, NamePart namePart, Case targetCase, Gender?gender = null) { if (namePartValue == null) { throw new ArgumentNullException(nameof(namePartValue)); } if (gender == null) { gender = GetGender(namePartValue, namePart); } PartRules partRules = m_rules[namePart]; string[] chunks = namePartValue.Split(NAME_CHUNK_SPLIT); for (int i = 0; i < chunks.Length; ++i) { Tags tags = i == 0 ? Tags.FirstWord : Tags.None; chunks[i] = partRules.InflectChunk(chunks[i], gender.Value, tags, targetCase); } return(String.Join("-", chunks)); }