// input: "VII-VI secolo" or "III-II secolo a.C." // output: { min: 601, max: 800, label: "VII-VI secolo" } public static IYearSpan Match(string input, EnumLanguage language = EnumLanguage.NONE) { Match m = Regex.Match(input.Trim(), GetPattern(language), options); if (!m.Success) { return(null); } string century = ""; int centuryMin = 0; int centuryMax = 0; century = m.Groups["centuryMin"].Value; centuryMin = Regex.IsMatch(century, ROMAN) ? RomanToNumber.Parse(century) : Int32.Parse(century); century = m.Groups["centuryMax"].Value; centuryMax = Regex.IsMatch(century, ROMAN) ? RomanToNumber.Parse(century) : Int32.Parse(century); EnumDatePrefix prefix1 = m.Groups["prefix1"] != null ? Lookup <EnumDatePrefix> .Match(m.Groups["prefix1"].Value, language) : EnumDatePrefix.NONE; EnumDatePrefix prefix2 = m.Groups["prefix2"] != null ? Lookup <EnumDatePrefix> .Match(m.Groups["prefix2"].Value, language) : EnumDatePrefix.NONE; EnumDateSuffix suffix = m.Groups["suffix"] != null ? Lookup <EnumDateSuffix> .Match(m.Groups["suffix"].Value, language) : EnumDateSuffix.NONE; IYearSpan centuryMinSpan = getCenturyYearSpan(centuryMin, prefix1, suffix); IYearSpan centuryMaxSpan = getCenturyYearSpan(centuryMax, prefix2, suffix); return(new YearSpan(Math.Min(centuryMinSpan.min, centuryMaxSpan.min), Math.Max(centuryMinSpan.max, centuryMaxSpan.max), input, "RxFromCenturyToCentury")); }
//public override IYearSpan Match(string input, EnumLanguage language) public static IYearSpan Match(string input, EnumLanguage language = EnumLanguage.NONE) { string pattern = GetPattern(language); Match m = Regex.Match(input.Trim(), pattern, options); // no patterns matched? if (!m.Success) { return(null); } // if we reach here we matched so get the represented year span string centuryString = m.Groups["century"].Value.Trim().ToUpper(); int centuryNo = Regex.IsMatch(centuryString, ROMAN) ? RomanToNumber.Parse(centuryString) : Int32.Parse(centuryString); EnumDatePrefix prefix = m.Groups["prefix"] != null ? Lookup <EnumDatePrefix> .Match(m.Groups["prefix"].Value, language) : EnumDatePrefix.NONE; EnumDateSuffix suffix = m.Groups["suffix"] != null ? Lookup <EnumDateSuffix> .Match(m.Groups["suffix"].Value, language) : EnumDateSuffix.NONE; IYearSpan span = getCenturyYearSpan(centuryNo, prefix, suffix); span.label = input.Trim(); span.note = "RxCardinalCentury"; //this.GetType().Name; return(span); }
// input: "1st millennium" "I millennio a.C." (with language parameter) // output: { min: 1, max: 1000, label: "1st millennium" } public static IYearSpan Match(string input, EnumLanguage language = EnumLanguage.NONE) { string pattern = Pattern(language); Match m = Regex.Match(input, pattern, options); // no patterns matched? if (!m.Success) { return(null); } // if we reach here we matched so get the represented year span string s = m.Groups["millennium"] != null ? m.Groups["millennium"].Value.Trim() : "0"; int millennium = Regex.IsMatch(s, ROMAN) ? RomanToNumber.Parse(s) : Int32.Parse(s); EnumDatePrefix prefix = m.Groups["prefix"] != null ? Lookup <EnumDatePrefix> .Match(m.Groups["prefix"].Value, language) : EnumDatePrefix.NONE; EnumDateSuffix suffix = m.Groups["suffix"] != null ? Lookup <EnumDateSuffix> .Match(m.Groups["suffix"].Value, language) : EnumDateSuffix.NONE; IYearSpan span = getMillenniumYearSpan(millennium, prefix, suffix); span.label = input.Trim(); span.note = "RxOrdinalNumberedMillennium"; return(span); }