/// <summary> /// Создает правило /// </summary> /// <param name="sex"> </param> /// <param name="targetPart"> </param> /// <param name="suffix"> </param> /// <param name="padezh"> </param> /// <param name="type"> </param> /// <param name="changer"> </param> public FioTransformerRule(FioSex sex, FioStructPart targetPart, string suffix, Padezh padezh, FioTrasformerRuleType type, string changer) { Part = targetPart; Suffix = suffix; Type = type; Padezh = padezh; Sex = sex; Changer = changer; }
/// <summary> /// Создает вариант /// </summary> /// <param name="fio"> </param> /// <param name="weight"> </param> /// <param name="padezh"> </param> /// <param name="onlyLastName"> </param> /// <param name="addNameUsed"> </param> /// <param name="abbrevated"> </param> /// <param name="lastNameFirst"> </param> public FioVariant(string fio, int weight, Padezh padezh, bool onlyLastName, bool addNameUsed, bool abbrevated, bool lastNameFirst) { Padezh = padezh; Fio = fio; Weight = weight; Abbrevated = abbrevated; LastNameFirst = lastNameFirst; AddNameUsed = addNameUsed; OnlyLastName = onlyLastName; }
/// <summary> /// Возвращает в указанном падеже /// </summary> /// <param name="fioStruct"> </param> /// <param name="transformerOptions"> </param> /// <param name="padezh"> </param> /// <returns> </returns> public FioStruct GetWithPadezh(FioStruct fioStruct, FioTransformerOptions transformerOptions, Padezh padezh) { Rules = Rules ?? FioTransformerRuleSet.Default; if (padezh == Padezh.Imenit) { return fioStruct; } var result = new FioStruct {Name = fioStruct.Name, LastName = fioStruct.LastName, AddName = fioStruct.AddName}; var sex = GetSex(fioStruct, transformerOptions?? new FioTransformerOptions { AutoSex = true, AutoTranslate = true, }); foreach (var p in new[] {FioStructPart.LastName, FioStructPart.Name, FioStructPart.AddName,}) { var rule = Rules.Where( x => (x.Sex == sex || x.Sex == FioSex.Any) && x.Part == p && (x.Padezh == padezh || x.Padezh == Padezh.Any) &&(!x.Rewriter)). FirstOrDefault(x => x.Match(result)); if (null != rule) { rule.Apply(result); } var fixerrules = Rules.Where( x => (x.Sex == sex || x.Sex == FioSex.Any) && x.Part == p && (x.Padezh == padezh || x.Padezh == Padezh.Any) && (x.Rewriter)).Where(x => x.Match(result)); foreach (var fixerrule in fixerrules) { fixerrule.Apply(result); } } return result; }