public string Middlename(string name, CASES gcase) { var middlename = (from r in (RULES as YamlMappingNode).Children where (r.Key as YamlScalarNode).Value.Equals("middlename") select r).FirstOrDefault().Value; return Inflect(name, gcase, middlename); }
protected string ModificatorFor(CASES gcase, YamlNode rule) { var mods = (from r in (rule as YamlMappingNode).Children where (r.Key as YamlScalarNode).Value.Equals("mods") select r).FirstOrDefault().Value; switch (gcase) { case CASES.NOMINATIVE: return "."; case CASES.GENITIVE: return ((mods as YamlSequenceNode).Children[0] as YamlScalarNode).Value; case CASES.DATIVE: return ((mods as YamlSequenceNode).Children[1] as YamlScalarNode).Value; case CASES.ACCUSATIVE: return ((mods as YamlSequenceNode).Children[2] as YamlScalarNode).Value; case CASES.INSTRUMENTAL: return ((mods as YamlSequenceNode).Children[3] as YamlScalarNode).Value; case CASES.PREPOSITIONAL: return ((mods as YamlSequenceNode).Children[4] as YamlScalarNode).Value; default: throw new UnknownCaseException(string.Format("Unknown grammatic case: {0}", gcase)); } }
protected string FindAndApply(string name, CASES gcase, YamlNode rules, bool[] features) { try { YamlNode rule = FindFor(name, rules, features); return Apply(name, gcase, rule); } catch (UnknownRuleException ex) { return name; } }
protected string Apply(string name, CASES gcase, YamlNode rule) { foreach (char c in ModificatorFor(gcase, rule)) { switch (c) { case '.': break; case '-': name = name.Substring(0, name.Length - 1); break; default: name += c; break; } } return name; }
protected string Inflect(string name, CASES gcase, YamlNode rules) { int i = 0; string[] parts = name.Split('-'); for (int y = 0; y < parts.Length; y++) { bool firstWord = (i += 1) == 1 && parts.Length > 1; parts[y] = FindAndApply(parts[y], gcase, rules, new bool[] { firstWord }); } return string.Join("-", parts); }
public string Middlename(string name, CASES gcase) { return new Rules(this._gender).Middlename(name, gcase); }
public string Firstname(string name, CASES gcase) { return new Rules(this._gender).Firstname(name, gcase); }