예제 #1
0
        private Person CreateGeorge(PlaceDescription birthPlace, PlaceDescription deathPlace)
        {
            Person person = new Person();

            person.SetGender(new Gender(GenderType.Male));

            Fact fact = new Fact();

            fact.SetId("123");
            fact.SetType(FactType.Birth);

            fact.SetDate(new DateInfo());
            fact.Date.SetOriginal("February 22, 1732");
            fact.Date.SetFormal("+1732-02-22");

            fact.SetPlace(new PlaceReference());
            fact.Place.SetOriginal(birthPlace.Names[0].Value.ToLower());
            fact.Place.DescriptionRef = "#" + birthPlace.Id;

            person.AddFact(fact);

            fact = new Fact();
            fact.SetId("456");
            fact.SetType(FactType.Death);

            fact.SetDate(new DateInfo());
            fact.Date.SetOriginal("December 14, 1799");
            fact.Date.SetFormal("+1799-12-14T22:00:00");

            fact.SetPlace(new PlaceReference());
            fact.Place.SetOriginal(deathPlace.Names[0].Value.ToLower());
            fact.Place.DescriptionRef = "#" + deathPlace.Id;

            person.AddFact(fact);

            List <Name> names    = new List <Name>();
            Name        name     = new Name();
            NameForm    nameForm = new NameForm();

            nameForm.SetFullText("George Washington");
            List <NamePart> parts = new List <NamePart>();
            NamePart        part  = new NamePart();

            part.SetType(NamePartType.Given);
            part.SetValue("George");
            parts.Add(part);
            part = new NamePart();
            part.SetType(NamePartType.Surname);
            part.SetValue("Washington");
            parts.Add(part);
            nameForm.Parts = parts;
            name.SetNameForm(nameForm);
            name.SetId("789");
            names.Add(name);
            person.Names = names;

            person.SetId("BBB-BBBB");

            return(person);
        }
예제 #2
0
        private Person CreateMartha(PlaceDescription birthPlace, PlaceDescription deathPlace)
        {
            Person person = new Person();

            person.SetGender(new Gender(GenderType.Male));

            Fact fact = new Fact();

            fact.SetId("321");
            fact.SetType(FactType.Birth);

            fact.SetDate(new DateInfo());
            fact.Date.SetOriginal("June 2, 1731");
            fact.Date.SetFormal("+1731-06-02");

            fact.SetPlace(new PlaceReference());
            fact.Place.SetOriginal(birthPlace.Names[0].Value.ToLower());
            fact.Place.DescriptionRef = "#" + birthPlace.Id;

            person.AddFact(fact);

            fact = new Fact();
            fact.SetId("654");
            fact.SetType(FactType.Death);

            fact.SetDate(new DateInfo());
            fact.Date.SetOriginal("May 22, 1802");
            fact.Date.SetFormal("+1802-05-22");

            fact.SetPlace(new PlaceReference());
            fact.Place.SetOriginal(deathPlace.Names[0].Value.ToLower());
            fact.Place.DescriptionRef = "#" + deathPlace.Id;

            person.AddFact(fact);

            List <Name> names    = new List <Name>();
            Name        name     = new Name();
            NameForm    nameForm = new NameForm();

            nameForm.SetFullText("Martha Dandridge Custis");
            List <NamePart> parts = new List <NamePart>();
            NamePart        part  = new NamePart();

            part.SetType(NamePartType.Given);
            part.SetValue("Martha Dandridge");
            parts.Add(part);
            part = new NamePart();
            part.SetType(NamePartType.Surname);
            part.SetValue("Custis");
            parts.Add(part);
            nameForm.Parts = parts;
            name.SetNameForm(nameForm);
            name.SetId("987");
            names.Add(name);
            person.Names = names;

            person.SetId("CCC-CCCC");

            return(person);
        }
예제 #3
0
        public static IEnumerable OpencorporaGenderDetectionData(string fileName, NamePart namePart)
        {
            using (StreamReader reader = new StreamReader(Path.Combine(NUnit.Framework.TestContext.CurrentContext.TestDirectory, "Data", fileName)))
            {
                string line;
                line = reader.ReadLine();  //skip header
                while ((line = reader.ReadLine()) != null)
                {
                    if (string.IsNullOrWhiteSpace(line))
                    {
                        continue;
                    }

                    string[] chunks = line.ToLower().Split('\t').Select(s => s.Trim()).ToArray();

                    Gender gender;
                    switch (chunks[1])
                    {
                    case "жр":
                        gender = Gender.Female;
                        break;
                    case "мр":
                        gender = Gender.Male;
                        break;
                    case "мр-жр":
                        gender = Gender.Androgynous;
                        break;
                    default:
                        throw new ApplicationException($"Unexpected gender string '{chunks[1]}'");
                    }

                    yield return new object[] { chunks[0], namePart, gender};
                }
            }
        }
예제 #4
0
        private MatchedUser CreateMatchedUser(Tuple <uint, string, uint[]> match, string query)
        {
            var queryLength = (uint)query.Length;
            var userId      = match.Item1;
            var fullName    = match.Item2;
            var parts       = fullName.Split(' ');

            var nameParts = new List <NamePart>();

            for (var i = 0; i < parts.Length; i++)
            {
                var matchFound = match.Item3.Any(m => m == i + 1u);
                var namePart   = new NamePart()
                {
                    Text = parts[i],
                    MatchedSymbolsCount = matchFound ? queryLength : 0
                };

                nameParts.Add(namePart);
            }
            var matchedUser = new MatchedUser
            {
                UserId    = userId,
                NameParts = nameParts
            };

            return(matchedUser);
        }
예제 #5
0
        public static IEnumerable OpencorporaInflectionData(string fileName, NamePart namePart)
        {
            using (StreamReader reader = new StreamReader(Path.Combine(NUnit.Framework.TestContext.CurrentContext.TestDirectory, "Data", fileName)))
            {
                string line;
                line = reader.ReadLine();  //skip header
                while ((line = reader.ReadLine()) != null)
                {
                    if (string.IsNullOrWhiteSpace(line))
                    {
                        continue;
                    }

                    string[] chunks = line.ToLower().Split('\t').Select(s => s.Trim()).ToArray();
                    string[] chunks2 = chunks[2].Split(',');

                    if (chunks2.Length > 3)
                    {
                        //weird lines "ЦЕЛИЙ	ЦЕЛИЙ	мр,имя,ед,им"
                        continue;
                    }

                    Gender[] genders;
                    switch (chunks2[0])
                    {
                    case "жр":
                        genders = FEMALE_GENDER_LIST;
                        break;
                    case "мр":
                        genders = MALE_GENDER_LIST;
                        break;
                    case "мр-жр":
                        genders = BOTH_GENDER_LIST;
                        break;
                    default:
                        throw new ApplicationException($"Unexpected gender string '{chunks2[0]}'");
                    }

                    if (chunks2[2] == "0")
                    {
                        //actually, '0' in 'case' column means that the test valid for all cases
                        foreach (Gender gender in genders)
                        {
                            foreach (Case @case in Enum.GetValues(typeof(Case)))
                            {
                                yield return new object[] { chunks[0], namePart, gender, @case, chunks[1] };
                            }
                        }
                    }
                    else
                    {
                        Case @case = Parse2LetterCase(chunks2[2]);
                        foreach (Gender gender in genders)
                        {
                            yield return new object[] { chunks[0], namePart, gender, @case, chunks[1] };
                        }
                    }
                }
            }
        }
        private void ParseRuleSet()
        {
            string    rulePartName = m_parser.GetNextPropertyName();
            NamePart  rulePart     = ParseNamePart(rulePartName);
            PartRules rules        = ParsePartRulesList();

            m_data[rulePart] = rules;
        }
예제 #7
0
        private void btnDown_Click(object sender, EventArgs e)
        {
            NamePart curr   = partList[ltbField.SelectedIndex];
            NamePart change = partList[ltbField.SelectedIndex + 1];

            partList[ltbField.SelectedIndex]     = change;
            partList[ltbField.SelectedIndex + 1] = curr;
            ltbField.SelectedIndex++;
            RunOrderedPreview();
        }
 private void ParseGenderRulesContainer()
 {
     m_parser.AssertNextTokenTypeAndConsume(JsonParser.TokenType.ObjectStart);
     while (!m_parser.CheckNextTokenTypeAndConsumeIfTrue(JsonParser.TokenType.ObjectEnd))
     {
         string   rulePartName = m_parser.GetNextPropertyName();
         NamePart rulePart     = ParseNamePart(rulePartName);
         ParseGenderRules(m_data.genderRules[rulePart]);
     }
 }
예제 #9
0
 /// <summary>
 /// Находит имя/фамилию/отчество среди слов в массиве
 /// </summary>
 /// <param name="namePart">Что нужно найти</param>
 /// <returns>Слово</returns>
 public Word GetByNamePart(NamePart namePart)
 {
     for (int i = 0; i < length; i++)
     {
         if (words[i].NamePart == namePart)
         {
             return words[i];
         }
     }
     return new Word("");
 }
예제 #10
0
 private string BlockCaps(string token, NamePart part)
 {
     if (String.IsNullOrEmpty(token)) return (token);
     foreach (var separator in new[] { '\'', '"', '-', '(', ')' }) {
         if (token.Contains(separator)) return ((String.Join(separator.ToString(), token.Split(new[] { separator }, StringSplitOptions.None).Select(subtoken => BlockCaps(subtoken, part)).ToArray())));
     }
     token = token.ToLowerInvariant();
     if (alwaysLowerCase.Contains(token)) return (token);
     if (specialMacs.Contains(token)) return (token.ToUpperInvariant());
     if (token.StartsWith("mc")) return ("Mc") + token.Substring(2).ToUpperInvariant();
     if (token.StartsWith("mac")) return ("Mac") + token.Substring(3).ToUpperInvariant();
     return (token.ToUpperInvariant());
 }
예제 #11
0
        public Gender GetGender(string namePartValue, NamePart namePart)
        {
            if (namePartValue == null)
            {
                throw new ArgumentNullException(nameof(namePartValue));
            }
            PartGenderRules rules = m_rules.genderRules[namePart];
            Gender          gender;

            if (rules.TryMatch(namePartValue, out gender))
            {
                return(gender);
            }
            return(Gender.Androgynous);
        }
예제 #12
0
 public Gender GetGender(string namePartValue, NamePart namePart)
 {
     if (namePartValue == null)
     {
         throw new ArgumentNullException(nameof(namePartValue));
     }
     GenderRules rules = m_rules.genderRules[namePart];
     foreach (KeyValuePair<string, Gender> pair in rules)
     {
         if (namePartValue.EndsWith(pair.Key, StringComparison.InvariantCultureIgnoreCase))
         {
             return pair.Value;
         }
     }
     return Gender.Androgynous;
 }
예제 #13
0
        /// <summary>
        /// Get a name from the database
        /// </summary>
        public static NameSet GetName(IDbConnection conn, IDbTransaction tx, decimal?nsSetId, bool loadFast)
        {
            IDbCommand cmd = CreateCommandStoredProc(conn, tx);

            try
            {
                cmd.CommandText = "get_name_set";
                if (!loadFast)
                {
                    cmd.CommandText += "_efft";
                }
                cmd.Parameters.Add(CreateParameterIn(cmd, "name_set_id_in", DbType.Decimal, nsSetId));

                // Execute a reader
                IDataReader reader = cmd.ExecuteReader();
                NameSet     retVal = new NameSet()
                {
                    Use = NameSet.NameSetUse.Legal
                };

                // Populate set
                while (reader.Read())
                {
                    NamePart part = new NamePart();
                    part.Value = Convert.ToString(reader["name_cmp_value"]);
                    part.Type  = (NamePart.NamePartType)Convert.ToInt32(reader["name_cmp_cls"]);
                    retVal.Parts.Add(part);

                    // Effective time
                    if (!loadFast && retVal.EffectiveTime == default(DateTime) && reader["efft_utc"] != DBNull.Value)
                    {
                        retVal.EffectiveTime = Convert.ToDateTime(reader["efft_utc"]);
                        if (!loadFast && reader["obslt_utc"] != DBNull.Value)
                        {
                            retVal.EffectiveTime = Convert.ToDateTime(reader["obslt_utc"]);
                        }
                    }
                }

                return(retVal);
            }
            finally
            {
                cmd.Dispose();
            }
        }
예제 #14
0
        private static string ParseNameExtracted(NamePart whichName)
        {
            string key = string.Empty;

            switch (whichName)
            {
            case NamePart.First:
                key = PersonNameParser.FirstName_Key;
                break;

            case NamePart.Middle:
                key = PersonNameParser.MiddleName_Key;
                break;

            case NamePart.Last:
                key = PersonNameParser.LastName_Key;
                break;
            }
            return(key);
        }
예제 #15
0
        public string ParseName(NamePart whichName)
        {
            string description = ((NamePart)whichName).GetDescription();
            string key         = ParseNameExtracted(whichName);
            bool   isRequired  = whichName != NamePart.Middle;
            string parsedValue = null;

            if (!personFields.ContainsKey(key))
            {
                if (isRequired)
                {
                    AddMessage(string.Format(PersonNameParser.NameRequiredMessage, description));
                }
                return(parsedValue);
            }

            parsedValue = personFields[key].ToString();

            if (string.IsNullOrEmpty(parsedValue))
            {
                if (isRequired)
                {
                    AddMessage(string.Format(PersonNameParser.NameRequiredMessage, description));
                }
                return(parsedValue);
            }

            if (parsedValue.Length < 2 || parsedValue.Length > 35)
            {
                AddMessage(string.Format(PersonNameParser.NameLengthMessage, description));
                return(parsedValue);
            }

            if (!Regex.IsMatch(parsedValue, NameRegex))
            {
                AddMessage(string.Format(PersonNameParser.NameCharacters, description));
                return(parsedValue);
            }

            return(parsedValue);
        }
예제 #16
0
        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));
        }
예제 #17
0
        public override string ToString()
        {
            var sb = new StringBuilder();

            if (!NamePart.IsEmpty())
            {
                sb.Append(NamePart);
            }
            if (!VersionPart.IsEmpty())
            {
                if (!NamePart.IsEmpty())
                {
                    sb.Append("-");
                }
                sb.Append(VersionPart);
                if (!PreReleasePart.IsEmpty())
                {
                    sb.Append("-").Append(PreReleasePart);
                }
            }
            return(sb.ToString());
        }
예제 #18
0
 public void Set(string nameTag, float priority, string name)
 {
     changed = true;
     if (Names.ContainsKey(nameTag))
     {
         Names [nameTag] = new NamePart()
         {
             Part = name, Priority = priority
         }
     }
     ;
     else
     {
         Names.Add(nameTag, new NamePart()
         {
             Part = name, Priority = priority
         });
     }
     if (Updated != null)
     {
         Updated();
     }
 }
        private void ReadBestMatch()
        {
            var bestMatchNode = XmlDocument.SelectSingleNode("//configuration/bestmatch");
            var bestMatch     = new BestMatch();
            var nameParts     = bestMatchNode.SelectNodes("//preferences/nameparts/namepart");

            var preferences = new Preferences
            {
                IgnoreMustHaveForOneRom = GetInnerTextAsBool(bestMatchNode.SelectSingleNode("//preferences/ignore_musthaves_for_one_rom")),
                IgnoreNeverUseForOneRom = GetInnerTextAsBool(bestMatchNode.SelectSingleNode("//preferences/ignore_neveruse_for_one_rom"))
            };


            foreach (XmlNode namePartNode in nameParts)
            {
                var name        = GetAttributeAsString(namePartNode, "name");
                var value       = GetAttributeAsString(namePartNode, "value");
                var system      = GetAttributeAsString(namePartNode, "system");
                var type        = GetAttributeAsString(namePartNode, "type");
                var description = GetAttributeAsString(namePartNode, "description");
                var position    = GetAttributeAsInt(namePartNode, "position", -1);
                var behaviour   = GetAttributeAsString(namePartNode, "behaviour");

                var namePart = new NamePart(name, value, system, type, description, position, behaviour);
                preferences.NameParts.Add(namePart);
            }

            RearangeElements(preferences);


            bestMatch.Preferences = preferences;

            bestMatch.RomSourceDirectory      = GetAttributeAsString(bestMatchNode.SelectSingleNode("//rom_source_directory"), "value");
            bestMatch.RomDestinationDirectory = GetAttributeAsString(bestMatchNode.SelectSingleNode("//rom_destination_directory"), "value");

            _configuration.BestMatch = bestMatch;
        }
예제 #20
0
 public void TestMultipleBySinglePartInflection(string value, NamePart part, Gender gender, Case targetCase, string expected)
 {
     switch (part)
     {
     case NamePart.LastName:
         {
             string result = petrovich.Inflect(new Petrovich.FIO() { lastName = value }, targetCase, gender).lastName;
             Assert.AreEqual(expected, result, string.Format("Part: {0}, Gender: {1}, Case: {2}", part, gender, targetCase));
         }
         break;
     case NamePart.FirstName:
         {
             string result = petrovich.Inflect(new Petrovich.FIO() { firstName = value }, targetCase, gender).firstName;
             Assert.AreEqual(expected, result, string.Format("Part: {0}, Gender: {1}, Case: {2}", part, gender, targetCase));
         }
         break;
     case NamePart.MiddleName:
         {
             string result = petrovich.Inflect(new Petrovich.FIO() { midName = value }, targetCase, gender).midName;
             Assert.AreEqual(expected, result, string.Format("Part: {0}, Gender: {1}, Case: {2}", part, gender, targetCase));
         }
         break;
     }
 }
예제 #21
0
 /// <summary>Helper: create a new instance to deserializing into</summary>
 public static NamePart DeserializeLengthDelimited(Stream stream)
 {
     NamePart instance = new NamePart();
     DeserializeLengthDelimited(stream, instance);
     return instance;
 }
예제 #22
0
 /// <summary>Helper: create a new instance to deserializing into</summary>
 public static NamePart DeserializeLength(Stream stream, int length)
 {
     NamePart instance = new NamePart();
     DeserializeLength(stream, length, instance);
     return instance;
 }
예제 #23
0
 /// <summary>Helper: put the buffer into a MemoryStream and create a new instance to deserializing into</summary>
 public static NamePart Deserialize(byte[] buffer)
 {
     NamePart instance = new NamePart();
     using (var ms = new MemoryStream(buffer))
         Deserialize(ms, instance);
     return instance;
 }
예제 #24
0
 /// <summary>Helper: create a new instance to deserializing into</summary>
 public static NamePart Deserialize(Stream stream)
 {
     NamePart instance = new NamePart();
     Deserialize(stream, instance);
     return instance;
 }
 /// <summary>Serialize the instance into the stream</summary>
 public static void Serialize(Stream stream, NamePart instance)
 {
     var msField = global::SilentOrbit.ProtocolBuffers.ProtocolParser.Stack.Pop();
     if (instance.NamePartField == null)
         throw new global::SilentOrbit.ProtocolBuffers.ProtocolBufferException("NamePartField is required by the proto specification.");
     // Key for field: 1, LengthDelimited
     stream.WriteByte(10);
     global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBytes(stream, Encoding.UTF8.GetBytes(instance.NamePartField));
     // Key for field: 2, Varint
     stream.WriteByte(16);
     global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBool(stream, instance.IsExtension);
     global::SilentOrbit.ProtocolBuffers.ProtocolParser.Stack.Push(msField);
 }
예제 #26
0
 private static string ParseNameExtracted(NamePart whichName)
 {
     string key = string.Empty;
     switch (whichName)
     {
         case NamePart.First:
             key = PersonNameParser.FirstName_Key;
             break;
         case NamePart.Middle:
             key = PersonNameParser.MiddleName_Key;
             break;
         case NamePart.Last:
             key = PersonNameParser.LastName_Key;
             break;
     }
     return key;
 }
예제 #27
0
        public void TestGenderDetection(string value, NamePart part, Gender expected)
        {
            Gender gender = petrovich.GetGender(value, part);

            Assert.AreEqual(expected, gender, $"Value: {value} Part: {part}");
        }
예제 #28
0
 /// <summary>Helper: Serialize into a MemoryStream and return its byte array</summary>
 public static byte[] SerializeToBytes(NamePart instance)
 {
     using (var ms = new MemoryStream())
     {
         Serialize(ms, instance);
         return ms.ToArray();
     }
 }
예제 #29
0
 public string ToTitleCase(string name, NamePart part)
 {
     return String.IsNullOrEmpty(name) ? (name) : (String.Join(" ", name.Split(' ').Select(token => TitleCase(token, part)).ToArray()));
 }
 public void TestSinglePartInflection(string value, NamePart part, Gender gender, Case targetCase, string expected)
 {
     string result = petrovich.Inflect(value, part, targetCase, gender);
     Assert.AreEqual(expected, result, string.Format("Part: {0}, Gender: {1}, Case: {2}", part, gender, targetCase));
 }
예제 #31
0
 /// <summary>Serialize the instance into the stream</summary>
 public static void Serialize(Stream stream, NamePart instance)
 {
     if (instance.NamePartField == null)
         throw new ArgumentNullException("NamePartField", "Required by proto specification.");
     // Key for field: 1, LengthDelimited
     stream.WriteByte(10);
     global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBytes(stream, Encoding.UTF8.GetBytes(instance.NamePartField));
     // Key for field: 2, Varint
     stream.WriteByte(16);
     global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteBool(stream, instance.IsExtension);
 }
예제 #32
0
        public string ParseName(NamePart whichName)
        {
            string description =  ((NamePart) whichName).GetDescription();
            string key = ParseNameExtracted(whichName);
            bool isRequired = whichName != NamePart.Middle;
            string parsedValue = null;

            if (!personFields.ContainsKey(key))
            {
                if (isRequired)
                {
                   AddMessage(string.Format(PersonNameParser.NameRequiredMessage, description));
                }
                return parsedValue;
            }

            parsedValue = personFields[key].ToString();

            if (string.IsNullOrEmpty(parsedValue))
            {
                if (isRequired)
                {
                    AddMessage(string.Format(PersonNameParser.NameRequiredMessage, description));
                }
                return parsedValue;
            }

            if (parsedValue.Length < 2 || parsedValue.Length > 35)
            {
                AddMessage(string.Format(PersonNameParser.NameLengthMessage, description));
                return parsedValue;
            }

            if(!Regex.IsMatch(parsedValue, NameRegex))
            {
                AddMessage(string.Format(PersonNameParser.NameCharacters, description));
                return parsedValue;
            }

            return parsedValue;
        }
예제 #33
0
 /// <summary>Helper: Serialize with a varint length prefix</summary>
 public static void SerializeLengthDelimited(Stream stream, NamePart instance)
 {
     var data = SerializeToBytes(instance);
     global::SilentOrbit.ProtocolBuffers.ProtocolParser.WriteUInt32(stream, (uint)data.Length);
     stream.Write(data, 0, data.Length);
 }
예제 #34
0
        private static IEnumerable ReadSinglePartData(string fileName, NamePart part)
        {
            using (StreamReader reader = new StreamReader(Path.Combine(NUnit.Framework.TestContext.CurrentContext.TestDirectory, "Data", fileName)))
            {
                string line;
                line = reader.ReadLine();  //skip header
                while ((line = reader.ReadLine()) != null)
                {
                    if (string.IsNullOrWhiteSpace(line))
                    {
                        continue;
                    }

                    string[] chunks = line.Split(',').Select(s => s.Trim()).ToArray();

                    Gender gender = (Gender)Enum.Parse(typeof(Gender), chunks[1]);
                    Case @case = (Case)Enum.Parse(typeof(Case), chunks[2]);

                    yield return new object[] { chunks[0], part, gender, @case, chunks[3] };
                }
            }
        }
예제 #35
0
 public void TestSinglePartGender(string value, NamePart part, Gender expected)
 {
     Gender? gender = petrovich.GetGender(value, part);
     Assert.AreEqual(expected, gender, string.Format("Part: {0}, Value: {1}", part, value));
 }
예제 #36
0
 public override void VisitNamePart(NamePart part)
 {
     BindIfNeeded(part);
     base.VisitNamePart(part);
 }
예제 #37
0
        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);
        }
예제 #38
0
 internal PartGenderRules this[NamePart part]
 {
     get { return(m_rulesByNamePart[(int)part]); }
 }