ICU-13634 Merging trunk to branch

X-SVN-Rev: 41162
This commit is contained in:
Shane Carr 2018-03-28 01:08:47 +00:00
commit 1b4670fd29
191 changed files with 1089 additions and 656 deletions

153
.gitattributes vendored
View file

@ -115,78 +115,6 @@ icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_3.6/com.ibm
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_3.6/com.ibm.icu.util.TimeZone.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_3.6/com.ibm.icu.util.ULocale.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_3.6/com.ibm.icu.util.UResourceTypeMismatchException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.impl.DateNumberFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.impl.IllegalIcuArgumentException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.impl.InvalidFormatException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.impl.JavaTimeZone.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.impl.OlsonTimeZone.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.impl.RelativeDateFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.impl.TZDBTimeZoneNames.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.impl.TimeZoneAdapter.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.impl.TimeZoneGenericNames.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.impl.TimeZoneNamesImpl.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.impl.duration.BasicDurationFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.impl.locale.LocaleSyntaxException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.math.BigDecimal.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.math.MathContext.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.ArabicShapingException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.ChineseDateFormat$Field.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.ChineseDateFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.ChineseDateFormatSymbols.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.CompactDecimalFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.CurrencyPluralInfo.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.DateFormat$Field.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.DateFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.DateFormatSymbols.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.DateIntervalFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.DateIntervalInfo$PatternInfo.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.DateIntervalInfo.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.DecimalFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.DecimalFormatSymbols.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.MeasureFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.MessageFormat$Field.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.MessageFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.NumberFormat$Field.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.NumberFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.PluralFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.PluralRules.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.RuleBasedNumberFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.SelectFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.SimpleDateFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.StringPrepParseException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.TimeUnitFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.text.TimeZoneFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.AnnualTimeZoneRule.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.BuddhistCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.Calendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.ChineseCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.CopticCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.Currency.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.DangiCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.DateInterval.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.DateTimeRule.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.EthiopicCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.GregorianCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.HebrewCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.ICUCloneNotSupportedException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.ICUException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.ICUUncheckedIOException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.IllformedLocaleException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.IndianCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.InitialTimeZoneRule.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.IslamicCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.JapaneseCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.MeasureUnit.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.PersianCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.RuleBasedTimeZone.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.SimpleTimeZone.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.TaiwanCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.TimeArrayTimeZoneRule.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.TimeUnit.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.TimeZone.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.ULocale.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.UResourceTypeMismatchException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_56.1/com.ibm.icu.util.VTimeZone.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_57.1/com.ibm.icu.impl.DateNumberFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_57.1/com.ibm.icu.impl.IllegalIcuArgumentException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_57.1/com.ibm.icu.impl.InvalidFormatException.dat -text
@ -480,6 +408,82 @@ icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_60.1/com.ib
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_60.1/com.ibm.icu.util.ULocale.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_60.1/com.ibm.icu.util.UResourceTypeMismatchException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_60.1/com.ibm.icu.util.VTimeZone.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.impl.DateNumberFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.impl.IllegalIcuArgumentException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.impl.InvalidFormatException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.impl.JavaTimeZone.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.impl.OlsonTimeZone.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.impl.RelativeDateFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.impl.TZDBTimeZoneNames.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.impl.TimeZoneAdapter.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.impl.TimeZoneGenericNames.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.impl.TimeZoneNamesImpl.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.impl.duration.BasicDurationFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.impl.locale.LocaleSyntaxException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.impl.number.CustomSymbolCurrency.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.impl.number.DecimalFormatProperties.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.impl.number.Properties.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.math.BigDecimal.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.math.MathContext.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.ArabicShapingException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.ChineseDateFormat$Field.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.ChineseDateFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.ChineseDateFormatSymbols.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.CompactDecimalFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.CurrencyPluralInfo.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.DateFormat$Field.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.DateFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.DateFormatSymbols.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.DateIntervalFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.DateIntervalInfo$PatternInfo.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.DateIntervalInfo.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.DecimalFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.DecimalFormatSymbols.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.MeasureFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.MessageFormat$Field.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.MessageFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.NumberFormat$Field.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.NumberFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.PluralFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.PluralRules.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.RuleBasedNumberFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.SelectFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.SimpleDateFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.StringPrepParseException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.TimeUnitFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.text.TimeZoneFormat.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.AnnualTimeZoneRule.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.BuddhistCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.Calendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.ChineseCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.CopticCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.Currency.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.DangiCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.DateInterval.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.DateTimeRule.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.EthiopicCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.GregorianCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.HebrewCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.ICUCloneNotSupportedException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.ICUException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.ICUUncheckedIOException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.IllformedLocaleException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.IndianCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.InitialTimeZoneRule.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.IslamicCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.JapaneseCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.MeasureUnit.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.NoUnit.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.PersianCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.RuleBasedTimeZone.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.SimpleTimeZone.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.TaiwanCalendar.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.TimeArrayTimeZoneRule.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.TimeUnit.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.TimeZone.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.ULocale.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.UResourceTypeMismatchException.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/serializable/data/ICU_61.1/com.ibm.icu.util.VTimeZone.dat -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/Trie2Test.setRanges1.16.tri2 -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/Trie2Test.setRanges1.32.tri2 -text
icu4j/main/tests/core/src/com/ibm/icu/dev/test/util/Trie2Test.setRanges2.16.tri2 -text
@ -498,10 +502,6 @@ icu4j/samples/src/com/ibm/icu/samples/iuc/data/reshello/es.res -text
icu4j/samples/src/com/ibm/icu/samples/iuc/data/reshello/mt.res -text
icu4j/samples/src/com/ibm/icu/samples/iuc/data/reshello/res_index.res -text
icu4j/samples/src/com/ibm/icu/samples/iuc/data/reshello/root.res -text
icu4j/tools/build/icu4j48.api3.gz -text
icu4j/tools/build/icu4j49.api3.gz -text
icu4j/tools/build/icu4j50.api3.gz -text
icu4j/tools/build/icu4j51.api3.gz -text
icu4j/tools/build/icu4j52.api3.gz -text
icu4j/tools/build/icu4j53.api3.gz -text
icu4j/tools/build/icu4j54.api3.gz -text
@ -511,6 +511,7 @@ icu4j/tools/build/icu4j57.api3.gz -text
icu4j/tools/build/icu4j58.api3.gz -text
icu4j/tools/build/icu4j59.api3.gz -text
icu4j/tools/build/icu4j60.api3.gz -text
icu4j/tools/build/icu4j61.api3.gz -text
tools/multi/c/Makefile-c.inc -text
tools/multi/c/patch/3_0 -text
tools/multi/c/patch/3_2 -text

View file

@ -50,11 +50,11 @@
<span class=""><span></span></span></td>
</tr>
<tr class="row0">
<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptSymbols(const NumberingSystem*)</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>
<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptSymbols(const NumberingSystem*)</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>actually, just<br>removed “const”<br>from one param<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row1">
<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptUnit(const icu::MeasureUnit*)</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>
<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptUnit(const icu::MeasureUnit*)</td><td class="">Draft<br>ICU 60</td><td>(missing)<br>actually, just<br>removed “const”<br>from one param<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row0">
@ -74,11 +74,11 @@
<span class=""><span></span></span></td>
</tr>
<tr class="row0">
<td class="file">utrans.h</td><td class="proto">void utrans_trans(const UTransliterator*, UReplaceable*, UReplaceableCallbacks*, int32_t, int32_t*, UErrorCode*)</td><td class="stabchange">Stable<br>ICU 2.0</td><td>(missing) actually,<br>just added “const”<br>to one parameter<br>
<td class="file">utrans.h</td><td class="proto">void utrans_trans(const UTransliterator*, UReplaceable*, UReplaceableCallbacks*, int32_t, int32_t*, UErrorCode*)</td><td class="stabchange">Stable<br>ICU 2.0</td><td>(missing)<br>actually, just<br>added “const”<br>to one param<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row1">
<td class="file">utrans.h</td><td class="proto">void utrans_transIncremental(const UTransliterator*, UReplaceable*, UReplaceableCallbacks*, UTransPosition*, UErrorCode*)</td><td class="stabchange">Stable<br>ICU 2.0</td><td>(missing) actually,<br>just added “const”<br>to one paramete<br>
<td class="file">utrans.h</td><td class="proto">void utrans_transIncremental(const UTransliterator*, UReplaceable*, UReplaceableCallbacks*, UTransPosition*, UErrorCode*)</td><td class="stabchange">Stable<br>ICU 2.0</td><td>(missing)<br>actually, just<br>added “const”<br>to one param<br>
<span class=""><span></span></span></td>
</tr>
</table>
@ -93,6 +93,9 @@
<th>File</th><th>API</th><th>ICU 60</th><th>ICU 61</th>
</tr>
</THEAD>
<tr>
<td></td><td></td><td></td><td></td>
</tr>
</table>
<P></P>
<a href="#_top">(jump back to top)</a>
@ -172,85 +175,81 @@
<td class="file">char16ptr.h</td><td class="proto">icu::ConstChar16Ptr::~ConstChar16Ptr()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row1">
<td class="file">dcfmtsym.h</td><td class="proto">const UnicodeString&amp; icu::DecimalFormatSymbols::getConstSymbol(ENumberFormatSymbol)</td><td class="">Internal</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
<tr class="row0">
<td class="file">edits.h</td><td class="proto">Iterator icu::Edits::getCoarseChangesIterator()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">edits.h</td><td class="proto">Iterator icu::Edits::getCoarseIterator()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">edits.h</td><td class="proto">Iterator icu::Edits::getFineChangesIterator()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">edits.h</td><td class="proto">Iterator icu::Edits::getFineIterator()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">edits.h</td><td class="proto">UBool icu::Edits::copyErrorTo(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">edits.h</td><td class="proto">UBool icu::Edits::hasChanges()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">edits.h</td><td class="proto">icu::Edits::Edits()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">edits.h</td><td class="proto">icu::Edits::~Edits()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">edits.h</td><td class="proto">int32_t icu::Edits::lengthDelta()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">edits.h</td><td class="proto">void icu::Edits::addReplace(int32_t, int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">edits.h</td><td class="proto">void icu::Edits::addUnchanged(int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">edits.h</td><td class="proto">void icu::Edits::reset()</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit* icu::MeasureUnit::createPoint(UErrorCode&amp;)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">ubrk.h</td><td class="proto">UBreakIterator* ubrk_openBinaryRules(const uint8_t*, int32_t, const UChar*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">ubrk.h</td><td class="proto">int32_t ubrk_getBinaryRules(UBreakIterator*, uint8_t*, int32_t, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">unistr.h</td><td class="proto">UNISTR_FROM_STRING_EXPLICIT icu::UnicodeString::UnicodeString(const uint16_t*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">unistr.h</td><td class="proto">UNISTR_FROM_STRING_EXPLICIT icu::UnicodeString::UnicodeString(const wchar_t*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(const std::nullptr_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(const std::nullptr_t, int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(const uint16_t*, int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(const wchar_t*, int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(std::nullptr_t, int32_t, int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(uint16_t*, int32_t, int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">unistr.h</td><td class="proto">icu::UnicodeString::UnicodeString(wchar_t*, int32_t, int32_t)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">unum.h</td><td class="proto">int32_t unum_formatDoubleForFields(const UNumberFormat*, double, UChar*, int32_t, UFieldPositionIterator*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">upluralrules.h</td><td class="proto">UEnumeration* uplrules_getKeywords(const UPluralRules*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
</table>
@ -410,11 +409,11 @@
<td class="file">upluralrules.h</td><td class="proto">UEnumeration* uplrules_getKeywords(const UPluralRules*, UErrorCode*)</td><td class="" colspan="2" align="center">Draft&rarr;Stable<br>ICU 59</td>
</tr>
<tr class="row1">
<td class="file">utrans.h</td><td class="proto">void utrans_trans(const UTransliterator*, UReplaceable*, const UReplaceableCallbacks*, int32_t, int32_t*, UErrorCode*)</td><td class="">(missing) old version<br>(stable) lacked “const”<br>on one parameter</td><td>Stable<br>
<td class="file">utrans.h</td><td class="proto">void utrans_trans(const UTransliterator*, UReplaceable*, const UReplaceableCallbacks*, int32_t, int32_t*, UErrorCode*)</td><td class="">(missing)<br>old version (stable)<br>lacked “const”<br>on one param</td><td>Stable<br>
<span class=""><span>ICU 2.0</span></span></td>
</tr>
<tr class="row0">
<td class="file">utrans.h</td><td class="proto">void utrans_transIncremental(const UTransliterator*, UReplaceable*, const UReplaceableCallbacks*, UTransPosition*, UErrorCode*)</td><td class="">(missing) old version<br>(stable) lacked “const”<br>on one parameter</td><td>Stable<br>
<td class="file">utrans.h</td><td class="proto">void utrans_transIncremental(const UTransliterator*, UReplaceable*, const UReplaceableCallbacks*, UTransPosition*, UErrorCode*)</td><td class="">(missing)<br>old version (stable)<br>lacked “const”<br>on one param</td><td>Stable<br>
<span class=""><span>ICU 2.0</span></span></td>
</tr>
</table>
@ -437,118 +436,114 @@
<td class="file">dcfmtsym.h</td><td class="proto">const UnicodeString&amp; icu::DecimalFormatSymbols::getConstDigitSymbol(int32_t)</td><td class="">(missing)</td><td>Internal<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">dtptngen.h</td><td class="proto">UnicodeString icu::DateTimePatternGenerator::getFieldDisplayName(UDateTimePatternField, UDateTimePGDisplayWidth)</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">measunit.h</td><td class="proto"><tt>static</tt> MeasureUnit icu::MeasureUnit::resolveUnitPerUnit(const MeasureUnit&amp;, const MeasureUnit&amp;, bool*)</td><td class="">(missing)</td><td>Internal<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptPerUnit(icu::MeasureUnit*)</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
<tr class="row1">
<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptSymbols(NumberingSystem*)</td><td class="">(missing)</td><td>Draft<br>
<tr class="row0">
<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptSymbols(NumberingSystem*)</td><td class="">(missing)<br>old version<br>had “const”<br>on param</td><td>Draft<br>
<span class=""><span>ICU 60</span>
<br>
<b class="bigwarn" title="A draft API has the wrong version.">(should be ICU 61)</b></span></td>
<b class="bigwarn" title="A draft API has the wrong version.">(should be ICU 61)</b><br>decided to keep draft ICU 60</span></td>
</tr>
<tr class="row1">
<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptUnit(icu::MeasureUnit*)</td><td class="">(missing)<br>old version<br>had “const”<br>on param</td><td>Draft<br>
<span class=""><span>ICU 60</span>
<br>
<b class="bigwarn" title="A draft API has the wrong version.">(should be ICU 61)</b><br>decided to keep draft ICU 60</span></td>
</tr>
<tr class="row0">
<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::adoptUnit(icu::MeasureUnit*)</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 60</span>
<br>
<b class="bigwarn" title="A draft API has the wrong version.">(should be ICU 61)</b></span></td>
</tr>
<tr class="row1">
<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::grouping(const UGroupingStrategy&amp;)</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">numberformatter.h</td><td class="proto">Derived icu::number::NumberFormatterSettings&lt; Derived &gt;::perUnit(const icu::MeasureUnit&amp;)</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UGroupingStrategy::UNUM_GROUPING_AUTO</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UGroupingStrategy::UNUM_GROUPING_MIN2</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UGroupingStrategy::UNUM_GROUPING_OFF</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UGroupingStrategy::UNUM_GROUPING_ON_ALIGNED</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UGroupingStrategy::UNUM_GROUPING_THOUSANDS</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_ACCOUNTING_EXCEPT_ZERO</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">numberformatter.h</td><td class="proto"><tt>enum</tt> UNumberSignDisplay::UNUM_SIGN_EXCEPT_ZERO</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">numberformatter.h</td><td class="proto">icu::number::impl::Grouper::Grouper(int16_t, int16_t, int16_t)</td><td class="">(missing)</td><td>Internal<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">numberformatter.h</td><td class="proto"><tt>static</tt> Grouper icu::number::impl::Grouper::forStrategy(UGroupingStrategy)</td><td class="">(missing)</td><td>Internal<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">rbbi.h</td><td class="proto">void icu::RuleBasedBreakIterator::dumpTables()</td><td class="">(missing)</td><td>Internal<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">ucurr.h</td><td class="proto"><tt>enum</tt> UCurrNameStyle::UCURR_NARROW_SYMBOL_NAME</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">udatpg.h</td><td class="proto"><tt>enum</tt> UDateTimePGDisplayWidth::UDATPG_ABBREVIATED</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">udatpg.h</td><td class="proto"><tt>enum</tt> UDateTimePGDisplayWidth::UDATPG_NARROW</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">udatpg.h</td><td class="proto"><tt>enum</tt> UDateTimePGDisplayWidth::UDATPG_WIDE</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">udatpg.h</td><td class="proto">int32_t udatpg_getFieldDisplayName(const UDateTimePatternGenerator*, UDateTimePatternField, UDateTimePGDisplayWidth, UChar*, int32_t, UErrorCode*)</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">utf8.h</td><td class="proto"><tt>#define</tt> U8_INTERNAL_NEXT_OR_SUB</td><td class="">(missing)</td><td>Internal<br>
<span class=""><span></span></span></td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">utf8.h</td><td class="proto"><tt>#define</tt> U8_TRUNCATE_IF_INCOMPLETE</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
<tr class="row0">
<tr class="row1">
<td class="file">utrans.h</td><td class="proto">void utrans_trans(const UTransliterator*, UReplaceable*, const UReplaceableCallbacks*, int32_t, int32_t*, UErrorCode*)</td><td class="">(missing) old version<br>(stable) lacked “const”<br>on one parameter</td><td>Stable<br>
<span class=""><span>ICU 2.0</span></span></td>
</tr>
<tr class="row1">
<tr class="row0">
<td class="file">utrans.h</td><td class="proto">void utrans_transIncremental(const UTransliterator*, UReplaceable*, const UReplaceableCallbacks*, UTransPosition*, UErrorCode*)</td><td class="">(missing) old version<br>(stable) lacked “const”<br>on one parameter</td><td>Stable<br>
<span class=""><span>ICU 2.0</span></span></td>
</tr>
<tr class="row0">
<td class="file">utypes.h</td><td class="proto"><tt>enum</tt> UErrorCode::U_NUMBER_ARG_OUTOFBOUNDS_ERROR</td><td class="">(missing)</td><td>Draft<br>
<span class=""><span>ICU 61</span></span></td>
</tr>
</table>
<P></P>
<a href="#_top">(jump back to top)</a>
@ -903,13 +898,12 @@
<i>This section shows cases where the signature was "simplified" for the sake of comparison. The simplified form is in bold, followed by
all possible variations in "original" form.</i>
<div class="other">
<ul></ul>
</div>
<P></P>
<a href="#_top">(jump back to top)</a>
<hr>
<p>
<i><font size="-1">Contents generated by StableAPI tool on Thu Mar 01 06:18:25 UTC 2018<br>Copyright (C) 2018, International Business Machines Corporation, All Rights Reserved.</font></i>
<i><font size="-1">Contents generated by StableAPI tool on Wed Mar 07 19:18:25 UTC 2018<br>Copyright (C) 2018, International Business Machines Corporation, All Rights Reserved.</font></i>
</p>
</body>
</html>

View file

@ -1,7 +1,7 @@
COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later)
Copyright © 1991-2017 Unicode, Inc. All rights reserved.
Distributed under the Terms of Use in http://www.unicode.org/copyright.html
Copyright © 1991-2018 Unicode, Inc. All rights reserved.
Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Unicode data files and any associated documentation

View file

@ -693,6 +693,11 @@ FilteredBreakIteratorBuilder::createInstance(const Locale& where, UErrorCode& st
return (U_SUCCESS(status))? ret.orphan(): NULL;
}
FilteredBreakIteratorBuilder *
FilteredBreakIteratorBuilder::createInstance(UErrorCode &status) {
return createEmptyInstance(status);
}
FilteredBreakIteratorBuilder *
FilteredBreakIteratorBuilder::createEmptyInstance(UErrorCode& status) {
if(U_FAILURE(status)) return NULL;

View file

@ -154,7 +154,6 @@ private:
const char *s;
};
// don't use #ifndef U_HIDE_INTERNAL_API with private class members or virtual methods.
virtual Node *createLinearMatchNode(int32_t i, int32_t byteIndex, int32_t length,
Node *nextNode) const;

View file

@ -64,9 +64,7 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject {
* @deprecated ICU 60 use createEmptyInstance instead
* @see createEmptyInstance()
*/
static inline FilteredBreakIteratorBuilder *createInstance(UErrorCode &status) {
return createEmptyInstance(status);
}
static FilteredBreakIteratorBuilder *createInstance(UErrorCode &status);
#endif /* U_HIDE_DEPRECATED_API */
#ifndef U_HIDE_DRAFT_API
@ -105,7 +103,6 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject {
*/
virtual UBool unsuppressBreakAfter(const UnicodeString& string, UErrorCode& status) = 0;
#ifndef U_HIDE_DEPRECATED_API
/**
* This function has been deprecated in favor of wrapIteratorWithFilter()
* The behavior is identical.
@ -116,7 +113,6 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject {
* @see wrapBreakIteratorWithFilter()
*/
virtual BreakIterator *build(BreakIterator* adoptBreakIterator, UErrorCode& status) = 0;
#endif /* U_HIDE_DEPRECATED_API */
#ifndef U_HIDE_DRAFT_API
/**

View file

@ -102,8 +102,10 @@ typedef enum UCurrNameStyle {
* currency, such as "US Dollar" for USD.
* @stable ICU 2.6
*/
UCURR_LONG_NAME,
UCURR_LONG_NAME
#ifndef U_HIDE_DRAFT_API
,
/**
* Selector for getName() indicating the narrow currency symbol.
* The narrow currency symbol is similar to the regular currency
@ -113,6 +115,7 @@ typedef enum UCurrNameStyle {
* @draft ICU 61
*/
UCURR_NARROW_SYMBOL_NAME
#endif // U_HIDE_DRAFT_API
} UCurrNameStyle;
#if !UCONFIG_NO_SERVICE

View file

@ -609,6 +609,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i);
} \
}
#ifndef U_HIDE_DRAFT_API
/**
* If the string ends with a UTF-8 byte sequence that is valid so far
* but incomplete, then reduce the length of the string to end before
@ -657,6 +658,7 @@ utf8_back1SafeBody(const uint8_t *s, int32_t start, int32_t i);
} \
} \
}
#endif // U_HIDE_DRAFT_API
/* definitions with backward iteration -------------------------------------- */

View file

@ -539,13 +539,15 @@ typedef enum UErrorCode {
U_DEFAULT_KEYWORD_MISSING, /**< Missing DEFAULT rule in plural rules */
U_DECIMAL_NUMBER_SYNTAX_ERROR, /**< Decimal number syntax error */
U_FORMAT_INEXACT_ERROR, /**< Cannot format a number exactly and rounding mode is ROUND_UNNECESSARY @stable ICU 4.8 */
#ifndef U_HIDE_DRAFT_API
U_NUMBER_ARG_OUTOFBOUNDS_ERROR, /**< The argument to a NumberFormatter helper method was out of bounds; the bounds are usually 0 to 999. @draft ICU 61 */
#endif // U_HIDE_DRAFT_API
#ifndef U_HIDE_DEPRECATED_API
/**
* One more than the highest normal formatting API error code.
* @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420.
*/
U_FMT_PARSE_ERROR_LIMIT,
U_FMT_PARSE_ERROR_LIMIT = 0x10113,
#endif // U_HIDE_DEPRECATED_API
/*

View file

@ -263,13 +263,10 @@ UBool UnifiedCache::_flush(UBool all) const {
int32_t UnifiedCache::_computeCountOfItemsToEvict() const {
int32_t totalItems = uhash_count(fHashtable);
int32_t evictableItems = totalItems - fNumValuesInUse;
U_ASSERT(totalItems >= fNumValuesInUse);
U_ASSERT(totalItems >= evictableItems);
int32_t unusedLimitByPercentage = fNumValuesInUse * fMaxPercentageOfInUse / 100;
int32_t unusedLimit = std::max(unusedLimitByPercentage, fMaxUnused);
int32_t countOfItemsToEvict = std::max(0, evictableItems - unusedLimit);
U_ASSERT(countOfItemsToEvict >= 0 && countOfItemsToEvict <= evictableItems);
return countOfItemsToEvict;
}

View file

@ -1,4 +1,4 @@
//---------------------------------------------------------
//---------------------------------------------------------
// Copyright (C) 2016 and later: Unicode, Inc. and others.
// License & terms of use: http://www.unicode.org/copyright.html
//---------------------------------------------------------
@ -6,7 +6,7 @@
// Corporation and others. All Rights Reserved.
//---------------------------------------------------------
// Build tool: com.ibm.icu.dev.tool.currency.NumericCodeData
// Build date: 2017-09-28T21:49:02Z
// Build date: 2018-03-06T17:38:16Z
//---------------------------------------------------------
// >> !!! >> THIS IS A MACHINE-GENERATED FILE << !!! <<
// >> !!! >>> DO NOT EDIT <<< !!! <<
@ -179,6 +179,7 @@ currencyNumericCodes:table(nofallback){
MNT:int{496}
MOP:int{446}
MRO:int{478}
MRU:int{929}
MTL:int{470}
MTP:int{470}
MUR:int{480}
@ -239,6 +240,7 @@ currencyNumericCodes:table(nofallback){
SRG:int{740}
SSP:int{728}
STD:int{678}
STN:int{930}
SUR:int{810}
SVC:int{222}
SYP:int{760}

View file

@ -437,15 +437,19 @@ DecimalFormatSymbols::initialize(const Locale& loc, UErrorCode& status,
sink.resolveMissingMonetarySeparators(fSymbols);
// Resolve codePointZero
const UnicodeString& stringZero = getConstDigitSymbol(0);
UChar32 tempCodePointZero = stringZero.char32At(0);
if (u_isdigit(tempCodePointZero) && stringZero.countChar32() == 1) {
for (int32_t i=0; i<=9; i++) {
const UnicodeString& stringDigit = getConstDigitSymbol(i);
if (stringDigit.char32At(0) != tempCodePointZero + i || stringDigit.countChar32() != 1) {
tempCodePointZero = -1;
break;
}
UChar32 tempCodePointZero;
for (int32_t i=0; i<=9; i++) {
const UnicodeString& stringDigit = getConstDigitSymbol(i);
if (stringDigit.countChar32() != 1) {
tempCodePointZero = -1;
break;
}
UChar32 cp = stringDigit.char32At(0);
if (i == 0) {
tempCodePointZero = cp;
} else if (cp != tempCodePointZero + i) {
tempCodePointZero = -1;
break;
}
}
fCodePointZero = tempCodePointZero;

View file

@ -30,6 +30,10 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// ICU PATCH: ifdef around UCONFIG_NO_FORMATTING
#include "unicode/utypes.h"
#if !UCONFIG_NO_FORMATTING
#include <math.h>
// ICU PATCH: Customize header file paths for ICU.
@ -39,6 +43,9 @@
#include "double-conversion-bignum.h"
#include "double-conversion-ieee.h"
// ICU PATCH: Wrap in ICU namespace
U_NAMESPACE_BEGIN
namespace double_conversion {
static int NormalizedExponent(uint64_t significand, int exponent) {
@ -646,3 +653,7 @@ static void FixupMultiply10(int estimated_power, bool is_even,
}
} // namespace double_conversion
// ICU PATCH: Close ICU namespace
U_NAMESPACE_END
#endif // ICU PATCH: close #if !UCONFIG_NO_FORMATTING

View file

@ -30,6 +30,10 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// ICU PATCH: ifdef around UCONFIG_NO_FORMATTING
#include "unicode/utypes.h"
#if !UCONFIG_NO_FORMATTING
#ifndef DOUBLE_CONVERSION_BIGNUM_DTOA_H_
#define DOUBLE_CONVERSION_BIGNUM_DTOA_H_
@ -37,6 +41,9 @@
#include "double-conversion-utils.h"
// ICU PATCH: Wrap in ICU namespace
U_NAMESPACE_BEGIN
namespace double_conversion {
enum BignumDtoaMode {
@ -88,4 +95,8 @@ void BignumDtoa(double v, BignumDtoaMode mode, int requested_digits,
} // namespace double_conversion
// ICU PATCH: Close ICU namespace
U_NAMESPACE_END
#endif // DOUBLE_CONVERSION_BIGNUM_DTOA_H_
#endif // ICU PATCH: close #if !UCONFIG_NO_FORMATTING

View file

@ -30,11 +30,18 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// ICU PATCH: ifdef around UCONFIG_NO_FORMATTING
#include "unicode/utypes.h"
#if !UCONFIG_NO_FORMATTING
// ICU PATCH: Customize header file paths for ICU.
#include "double-conversion-bignum.h"
#include "double-conversion-utils.h"
// ICU PATCH: Wrap in ICU namespace
U_NAMESPACE_BEGIN
namespace double_conversion {
Bignum::Bignum()
@ -771,3 +778,7 @@ void Bignum::SubtractTimes(const Bignum& other, int factor) {
} // namespace double_conversion
// ICU PATCH: Close ICU namespace
U_NAMESPACE_END
#endif // ICU PATCH: close #if !UCONFIG_NO_FORMATTING

View file

@ -30,6 +30,10 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// ICU PATCH: ifdef around UCONFIG_NO_FORMATTING
#include "unicode/utypes.h"
#if !UCONFIG_NO_FORMATTING
#ifndef DOUBLE_CONVERSION_BIGNUM_H_
#define DOUBLE_CONVERSION_BIGNUM_H_
@ -37,6 +41,9 @@
#include "double-conversion-utils.h"
// ICU PATCH: Wrap in ICU namespace
U_NAMESPACE_BEGIN
namespace double_conversion {
class Bignum {
@ -148,4 +155,8 @@ class Bignum {
} // namespace double_conversion
// ICU PATCH: Close ICU namespace
U_NAMESPACE_END
#endif // DOUBLE_CONVERSION_BIGNUM_H_
#endif // ICU PATCH: close #if !UCONFIG_NO_FORMATTING

View file

@ -30,6 +30,10 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// ICU PATCH: ifdef around UCONFIG_NO_FORMATTING
#include "unicode/utypes.h"
#if !UCONFIG_NO_FORMATTING
#include <stdarg.h>
#include <limits.h>
#include <math.h>
@ -40,6 +44,9 @@
#include "double-conversion-cached-powers.h"
// ICU PATCH: Wrap in ICU namespace
U_NAMESPACE_BEGIN
namespace double_conversion {
struct CachedPower {
@ -180,3 +187,7 @@ void PowersOfTenCache::GetCachedPowerForDecimalExponent(int requested_exponent,
}
} // namespace double_conversion
// ICU PATCH: Close ICU namespace
U_NAMESPACE_END
#endif // ICU PATCH: close #if !UCONFIG_NO_FORMATTING

View file

@ -30,6 +30,10 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// ICU PATCH: ifdef around UCONFIG_NO_FORMATTING
#include "unicode/utypes.h"
#if !UCONFIG_NO_FORMATTING
#ifndef DOUBLE_CONVERSION_CACHED_POWERS_H_
#define DOUBLE_CONVERSION_CACHED_POWERS_H_
@ -37,6 +41,9 @@
#include "double-conversion-diy-fp.h"
// ICU PATCH: Wrap in ICU namespace
U_NAMESPACE_BEGIN
namespace double_conversion {
class PowersOfTenCache {
@ -68,4 +75,8 @@ class PowersOfTenCache {
} // namespace double_conversion
// ICU PATCH: Close ICU namespace
U_NAMESPACE_END
#endif // DOUBLE_CONVERSION_CACHED_POWERS_H_
#endif // ICU PATCH: close #if !UCONFIG_NO_FORMATTING

View file

@ -30,12 +30,18 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// ICU PATCH: ifdef around UCONFIG_NO_FORMATTING
#include "unicode/utypes.h"
#if !UCONFIG_NO_FORMATTING
// ICU PATCH: Customize header file paths for ICU.
#include "double-conversion-diy-fp.h"
#include "double-conversion-utils.h"
// ICU PATCH: Wrap in ICU namespace
U_NAMESPACE_BEGIN
namespace double_conversion {
void DiyFp::Multiply(const DiyFp& other) {
@ -62,3 +68,7 @@ void DiyFp::Multiply(const DiyFp& other) {
}
} // namespace double_conversion
// ICU PATCH: Close ICU namespace
U_NAMESPACE_END
#endif // ICU PATCH: close #if !UCONFIG_NO_FORMATTING

View file

@ -30,6 +30,10 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// ICU PATCH: ifdef around UCONFIG_NO_FORMATTING
#include "unicode/utypes.h"
#if !UCONFIG_NO_FORMATTING
#ifndef DOUBLE_CONVERSION_DIY_FP_H_
#define DOUBLE_CONVERSION_DIY_FP_H_
@ -37,6 +41,9 @@
#include "double-conversion-utils.h"
// ICU PATCH: Wrap in ICU namespace
U_NAMESPACE_BEGIN
namespace double_conversion {
// This "Do It Yourself Floating Point" class implements a floating-point number
@ -122,4 +129,8 @@ class DiyFp {
} // namespace double_conversion
// ICU PATCH: Close ICU namespace
U_NAMESPACE_END
#endif // DOUBLE_CONVERSION_DIY_FP_H_
#endif // ICU PATCH: close #if !UCONFIG_NO_FORMATTING

View file

@ -30,6 +30,10 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// ICU PATCH: ifdef around UCONFIG_NO_FORMATTING
#include "unicode/utypes.h"
#if !UCONFIG_NO_FORMATTING
// ICU PATCH: Customize header file paths for ICU.
#include "double-conversion-fast-dtoa.h"
@ -38,6 +42,9 @@
#include "double-conversion-diy-fp.h"
#include "double-conversion-ieee.h"
// ICU PATCH: Wrap in ICU namespace
U_NAMESPACE_BEGIN
namespace double_conversion {
// The minimal and maximal target exponent define the range of w's binary
@ -670,3 +677,7 @@ bool FastDtoa(double v,
}
} // namespace double_conversion
// ICU PATCH: Close ICU namespace
U_NAMESPACE_END
#endif // ICU PATCH: close #if !UCONFIG_NO_FORMATTING

View file

@ -30,6 +30,10 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// ICU PATCH: ifdef around UCONFIG_NO_FORMATTING
#include "unicode/utypes.h"
#if !UCONFIG_NO_FORMATTING
#ifndef DOUBLE_CONVERSION_FAST_DTOA_H_
#define DOUBLE_CONVERSION_FAST_DTOA_H_
@ -37,6 +41,9 @@
#include "double-conversion-utils.h"
// ICU PATCH: Wrap in ICU namespace
U_NAMESPACE_BEGIN
namespace double_conversion {
enum FastDtoaMode {
@ -92,4 +99,8 @@ bool FastDtoa(double d,
} // namespace double_conversion
// ICU PATCH: Close ICU namespace
U_NAMESPACE_END
#endif // DOUBLE_CONVERSION_FAST_DTOA_H_
#endif // ICU PATCH: close #if !UCONFIG_NO_FORMATTING

View file

@ -30,6 +30,10 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// ICU PATCH: ifdef around UCONFIG_NO_FORMATTING
#include "unicode/utypes.h"
#if !UCONFIG_NO_FORMATTING
#ifndef DOUBLE_CONVERSION_DOUBLE_H_
#define DOUBLE_CONVERSION_DOUBLE_H_
@ -37,6 +41,9 @@
#include "double-conversion-diy-fp.h"
// ICU PATCH: Wrap in ICU namespace
U_NAMESPACE_BEGIN
namespace double_conversion {
// We assume that doubles and uint64_t have the same endianness.
@ -406,4 +413,8 @@ class Single {
} // namespace double_conversion
// ICU PATCH: Close ICU namespace
U_NAMESPACE_END
#endif // DOUBLE_CONVERSION_DOUBLE_H_
#endif // ICU PATCH: close #if !UCONFIG_NO_FORMATTING

View file

@ -30,6 +30,10 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// ICU PATCH: ifdef around UCONFIG_NO_FORMATTING
#include "unicode/utypes.h"
#if !UCONFIG_NO_FORMATTING
#ifndef DOUBLE_CONVERSION_UTILS_H_
#define DOUBLE_CONVERSION_UTILS_H_
@ -159,6 +163,9 @@ typedef uint16_t uc16;
DISALLOW_COPY_AND_ASSIGN(TypeName)
#endif
// ICU PATCH: Wrap in ICU namespace
U_NAMESPACE_BEGIN
namespace double_conversion {
static const int kCharSize = sizeof(char);
@ -344,4 +351,8 @@ inline Dest BitCast(Source* source) {
} // namespace double_conversion
// ICU PATCH: Close ICU namespace
U_NAMESPACE_END
#endif // DOUBLE_CONVERSION_UTILS_H_
#endif // ICU PATCH: close #if !UCONFIG_NO_FORMATTING

View file

@ -30,6 +30,10 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// ICU PATCH: ifdef around UCONFIG_NO_FORMATTING
#include "unicode/utypes.h"
#if !UCONFIG_NO_FORMATTING
#include <limits.h>
#include <math.h>
@ -43,6 +47,9 @@
#include "double-conversion-ieee.h"
#include "double-conversion-utils.h"
// ICU PATCH: Wrap in ICU namespace
U_NAMESPACE_BEGIN
namespace double_conversion {
#if 0 // not needed for ICU
@ -992,3 +999,7 @@ float StringToDoubleConverter::StringToFloat(
#endif // not needed for ICU
} // namespace double_conversion
// ICU PATCH: Close ICU namespace
U_NAMESPACE_END
#endif // ICU PATCH: close #if !UCONFIG_NO_FORMATTING

View file

@ -30,6 +30,10 @@
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// ICU PATCH: ifdef around UCONFIG_NO_FORMATTING
#include "unicode/utypes.h"
#if !UCONFIG_NO_FORMATTING
#ifndef DOUBLE_CONVERSION_DOUBLE_CONVERSION_H_
#define DOUBLE_CONVERSION_DOUBLE_CONVERSION_H_
@ -37,6 +41,9 @@
#include "double-conversion-utils.h"
// ICU PATCH: Wrap in ICU namespace
U_NAMESPACE_BEGIN
namespace double_conversion {
class DoubleToStringConverter {
@ -552,4 +559,8 @@ class StringToDoubleConverter {
} // namespace double_conversion
// ICU PATCH: Close ICU namespace
U_NAMESPACE_END
#endif // DOUBLE_CONVERSION_DOUBLE_CONVERSION_H_
#endif // ICU PATCH: close #if !UCONFIG_NO_FORMATTING

View file

@ -271,6 +271,8 @@ static const char* const CLDR_FIELD_WIDTH[] = { // [UDATPG_WIDTH_COUNT]
"", "-short", "-narrow"
};
// TODO(ticket:13619): remove when definition uncommented in dtptngen.h.
static const int32_t UDATPG_WIDTH_COUNT = UDATPG_NARROW + 1;
static constexpr UDateTimePGDisplayWidth UDATPG_WIDTH_APPENDITEM = UDATPG_WIDE;
static constexpr int32_t UDATPG_FIELD_KEY_MAX = 24; // max length of CLDR field tag (type + width)

View file

@ -22,7 +22,7 @@ using namespace icu;
using namespace icu::number;
using namespace icu::number::impl;
using double_conversion::DoubleToStringConverter;
using icu::double_conversion::DoubleToStringConverter;
namespace {

View file

@ -438,7 +438,7 @@ RegexMatcher &RegexMatcher::appendReplacement(UText *dest,
status = U_REGEX_INVALID_CAPTURE_GROUP_NAME;
}
}
} else if (u_isdigit(nextChar)) {
// $n Scan for a capture group number
int32_t numCaptureGroups = fPattern->fGroupMap->size();
@ -459,7 +459,7 @@ RegexMatcher &RegexMatcher::appendReplacement(UText *dest,
break;
}
(void)UTEXT_NEXT32(replacement);
groupNum=groupNum*10 + nextDigitVal;
groupNum=groupNum*10 + nextDigitVal;
++numDigits;
}
} else {
@ -2187,7 +2187,7 @@ int32_t RegexMatcher::split(UText *input,
break;
}
i++;
dest[i] = utext_extract_replace(fInputText, dest[i],
dest[i] = utext_extract_replace(fInputText, dest[i],
start64(groupNum, status), end64(groupNum, status), &status);
}
@ -5469,7 +5469,7 @@ GC_Done:
if (lbStartIdx < 0) {
// First time through loop.
lbStartIdx = fp->fInputIdx - minML;
if (lbStartIdx > 0) {
if (lbStartIdx > 0 && lbStartIdx < fInputLength) {
U16_SET_CP_START(inputBuf, 0, lbStartIdx);
}
} else {
@ -5546,7 +5546,7 @@ GC_Done:
if (lbStartIdx < 0) {
// First time through loop.
lbStartIdx = fp->fInputIdx - minML;
if (lbStartIdx > 0) {
if (lbStartIdx > 0 && lbStartIdx < fInputLength) {
U16_SET_CP_START(inputBuf, 0, lbStartIdx);
}
} else {
@ -5818,3 +5818,4 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RegexMatcher)
U_NAMESPACE_END
#endif // !UCONFIG_NO_REGULAR_EXPRESSIONS

View file

@ -16,7 +16,7 @@
#include "unicode/utypes.h"
/**
* \file
* \brief C++ API: Formats decimal numbers in compact form.
* \brief C++ API: Compatibility APIs for compact decimal number formatting.
*/
#if !UCONFIG_NO_FORMATTING
@ -30,6 +30,11 @@ U_NAMESPACE_BEGIN
class PluralRules;
/**
* <p><strong>IMPORTANT:</strong> New users are strongly encouraged to see if
* numberformatter.h fits their use case. Although not deprecated, this header
* is provided for backwards compatibility only.
* <hr/>
*
* The CompactDecimalFormat produces abbreviated numbers, suitable for display in
* environments will limited real estate. For example, 'Hits: 1.2B' instead of
* 'Hits: 1,200,000,000'. The format will be appropriate for the given language,
@ -56,6 +61,9 @@ public:
/**
* Returns a compact decimal instance for specified locale.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* @param inLocale the given locale.
* @param style whether to use short or long style.
* @param status error code returned here.

View file

@ -411,7 +411,7 @@ public:
*
* @param symbol Constant to indicate a number format symbol.
* @return the format symbol by the param 'symbol'
* @draft ICU 61
* @internal
*/
inline const UnicodeString& getConstSymbol(ENumberFormatSymbol symbol) const;
@ -501,7 +501,7 @@ DecimalFormatSymbols::getSymbol(ENumberFormatSymbol symbol) const {
return *strPtr;
}
// See comments above for this function. Not hidden with #ifndef U_HIDE_INTERNAL_API
// See comments above for this function. Not hidden with #ifdef U_HIDE_INTERNAL_API
inline const UnicodeString &
DecimalFormatSymbols::getConstSymbol(ENumberFormatSymbol symbol) const {
const UnicodeString *strPtr;
@ -513,6 +513,7 @@ DecimalFormatSymbols::getConstSymbol(ENumberFormatSymbol symbol) const {
return *strPtr;
}
#ifndef U_HIDE_INTERNAL_API
inline const UnicodeString& DecimalFormatSymbols::getConstDigitSymbol(int32_t digit) const {
if (digit < 0 || digit > 9) {
digit = 0;
@ -523,6 +524,7 @@ inline const UnicodeString& DecimalFormatSymbols::getConstDigitSymbol(int32_t di
ENumberFormatSymbol key = static_cast<ENumberFormatSymbol>(kOneDigitSymbol + digit - 1);
return fSymbols[key];
}
#endif
// -------------------------------------

View file

@ -90,7 +90,7 @@ template class U_I18N_API EnumSet<UNumberFormatAttribute,
/**
* <p><strong>IMPORTANT:</strong> New users are strongly encouraged to see if
* numberformatter.h fits their use case. Although not deprecated, this header
* is on life support and is provided for backwards compatibility only.
* is provided for backwards compatibility only.
* <hr/>
*
* DecimalFormat is a concrete subclass of NumberFormat that formats decimal
@ -704,6 +704,9 @@ class U_I18N_API DecimalFormat : public NumberFormat {
* on NumberFormat such as createInstance. These factories will
* return the most appropriate sub-class of NumberFormat for a given
* locale.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of DecimalFormat.
* @param status Output param set to success/failure code. If the
* pattern is invalid this will be set to a failure code.
* @stable ICU 2.0
@ -719,6 +722,9 @@ class U_I18N_API DecimalFormat : public NumberFormat {
* on NumberFormat such as createInstance. These factories will
* return the most appropriate sub-class of NumberFormat for a given
* locale.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of DecimalFormat.
* @param pattern A non-localized pattern string.
* @param status Output param set to success/failure code. If the
* pattern is invalid this will be set to a failure code.
@ -736,6 +742,9 @@ class U_I18N_API DecimalFormat : public NumberFormat {
* createInstance or createCurrencyInstance. If you need only minor adjustments
* to a standard format, you can modify the format returned by
* a NumberFormat factory method.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of DecimalFormat.
*
* @param pattern a non-localized pattern string
* @param symbolsToAdopt the set of symbols to be used. The caller should not
@ -841,6 +850,9 @@ class U_I18N_API DecimalFormat : public NumberFormat {
* createInstance or createCurrencyInstance. If you need only minor adjustments
* to a standard format, you can modify the format returned by
* a NumberFormat factory method.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of DecimalFormat.
*
* @param pattern a non-localized pattern string
* @param symbolsToAdopt the set of symbols to be used. The caller should not
@ -863,6 +875,9 @@ class U_I18N_API DecimalFormat : public NumberFormat {
* createInstance or createCurrencyInstance. If you need only minor adjustments
* to a standard format, you can modify the format returned by
* a NumberFormat factory method.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of DecimalFormat.
*
* @param pattern a non-localized pattern string
* @param symbols the set of symbols to be used

View file

@ -522,7 +522,8 @@ private:
*/
DateTimePatternGenerator& operator=(const DateTimePatternGenerator& other);
static const int32_t UDATPG_WIDTH_COUNT = UDATPG_NARROW + 1;
// TODO(ticket:13619): re-enable when UDATPG_NARROW no longer in draft mode.
// static const int32_t UDATPG_WIDTH_COUNT = UDATPG_NARROW + 1;
Locale pLocale; // pattern locale
FormatParser *fp;
@ -530,7 +531,8 @@ private:
DistanceInfo *distanceInfo;
PatternMap *patternMap;
UnicodeString appendItemFormats[UDATPG_FIELD_COUNT];
UnicodeString fieldDisplayNames[UDATPG_FIELD_COUNT][UDATPG_WIDTH_COUNT];
// TODO(ticket:13619): [3] -> UDATPG_WIDTH_COUNT
UnicodeString fieldDisplayNames[UDATPG_FIELD_COUNT][3];
UnicodeString dateTimeFormat;
UnicodeString decimal;
DateTimeMatcher *skipMatcher;
@ -560,9 +562,11 @@ private:
void setDateTimeFromCalendar(const Locale& locale, UErrorCode& status);
void setDecimalSymbols(const Locale& locale, UErrorCode& status);
UDateTimePatternField getAppendFormatNumber(const char* field) const;
#ifndef U_HIDE_DRAFT_API
UDateTimePatternField getFieldAndWidthIndices(const char* key, UDateTimePGDisplayWidth* widthP) const;
void setFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width, const UnicodeString& value);
UnicodeString& getMutableFieldDisplayName(UDateTimePatternField field, UDateTimePGDisplayWidth width);
#endif // U_HIDE_DRAFT_API
void getAppendName(UDateTimePatternField field, UnicodeString& value);
UnicodeString mapSkeletonMetacharacters(const UnicodeString& patternForm, int32_t* flags, UErrorCode& status);
int32_t getCanonicalIndex(const UnicodeString& field);

View file

@ -89,7 +89,7 @@ class DateFormat;
/**
* <p><strong>IMPORTANT:</strong> New users are strongly encouraged to see if
* numberformatter.h fits their use case. Although not deprecated, this header
* is on life support and is provided for backwards compatibility only.
* is provided for backwards compatibility only.
*
* @see Format
* @author Alan Liu
@ -102,6 +102,9 @@ class U_I18N_API MeasureFormat : public Format {
/**
* Constructor.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* @stable ICU 53
*/
MeasureFormat(
@ -109,6 +112,9 @@ class U_I18N_API MeasureFormat : public Format {
/**
* Constructor.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* @stable ICU 53
*/
MeasureFormat(
@ -228,6 +234,9 @@ class U_I18N_API MeasureFormat : public Format {
/**
* Return a formatter for CurrencyAmount objects in the given
* locale.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* @param locale desired locale
* @param ec input-output error code
* @return a formatter object, or NULL upon error
@ -239,6 +248,9 @@ class U_I18N_API MeasureFormat : public Format {
/**
* Return a formatter for CurrencyAmount objects in the default
* locale.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* @param ec input-output error code
* @return a formatter object, or NULL upon error
* @stable ICU 3.0

View file

@ -106,6 +106,7 @@ class IntegerWidth;
namespace impl {
#ifndef U_HIDE_INTERNAL_API
/**
* Datatype for minimum/maximum fraction digits. Must be able to hold kMaxIntFracSig.
*
@ -120,6 +121,7 @@ typedef int16_t digits_t;
* @internal
*/
static constexpr int32_t DEFAULT_THRESHOLD = 3;
#endif // U_HIDE_INTERNAL_API
// Forward declarations:
class Padder;
@ -966,6 +968,7 @@ class U_I18N_API IntegerWidth : public UMemory {
namespace impl {
// Do not enclose entire SymbolsWrapper with #ifndef U_HIDE_INTERNAL_API, needed for a protected field
/** @internal */
class U_I18N_API SymbolsWrapper : public UMemory {
public:
@ -987,6 +990,8 @@ class U_I18N_API SymbolsWrapper : public UMemory {
/** @internal */
SymbolsWrapper &operator=(SymbolsWrapper&& src) U_NOEXCEPT;
#ifndef U_HIDE_INTERNAL_API
/**
* The provided object is copied, but we do not adopt it.
* @internal
@ -1035,6 +1040,8 @@ class U_I18N_API SymbolsWrapper : public UMemory {
return FALSE;
}
#endif // U_HIDE_INTERNAL_API
private:
enum SymbolsPointerType {
SYMPTR_NONE, SYMPTR_DFS, SYMPTR_NS
@ -1052,9 +1059,11 @@ class U_I18N_API SymbolsWrapper : public UMemory {
void doCleanup();
};
// Do not enclose entire Grouper with #ifndef U_HIDE_INTERNAL_API, needed for a protected field
/** @internal */
class U_I18N_API Grouper : public UMemory {
public:
#ifndef U_HIDE_INTERNAL_API
/** @internal */
static Grouper forStrategy(UGroupingStrategy grouping);
@ -1072,6 +1081,7 @@ class U_I18N_API Grouper : public UMemory {
fGrouping2(grouping2),
fMinGrouping(minGrouping),
fStrategy(strategy) {}
#endif // U_HIDE_INTERNAL_API
/** @internal */
int16_t getPrimary() const;
@ -1131,14 +1141,17 @@ class U_I18N_API Grouper : public UMemory {
friend class impl::GeneratorHelpers;
};
// Do not enclose entire Padder with #ifndef U_HIDE_INTERNAL_API, needed for a protected field
/** @internal */
class U_I18N_API Padder : public UMemory {
public:
#ifndef U_HIDE_INTERNAL_API
/** @internal */
static Padder none();
/** @internal */
static Padder codePoints(UChar32 cp, int32_t targetWidth, UNumberFormatPadPosition position);
#endif // U_HIDE_INTERNAL_API
/** @internal */
static Padder forProperties(const DecimalFormatProperties& properties);
@ -1194,6 +1207,7 @@ class U_I18N_API Padder : public UMemory {
friend class impl::GeneratorHelpers;
};
// Do not enclose entire MacroProps with #ifndef U_HIDE_INTERNAL_API, needed for a protected field
/** @internal */
class U_I18N_API Multiplier : public UMemory {
public:
@ -2329,4 +2343,3 @@ U_NAMESPACE_END
#endif // __NUMBERFORMATTER_H__
#endif /* #if !UCONFIG_NO_FORMATTING */

View file

@ -55,7 +55,7 @@ class StringEnumeration;
/**
* <p><strong>IMPORTANT:</strong> New users are strongly encouraged to see if
* numberformatter.h fits their use case. Although not deprecated, this header
* is on life support and is provided for backwards compatibility only.
* is provided for backwards compatibility only.
* <hr/>
*
* Abstract base class for all number formats. Provides interface for
@ -708,6 +708,9 @@ public:
/**
* Create a default style NumberFormat for the current default locale.
* The default formatting style is locale dependent.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* @stable ICU 2.0
*/
static NumberFormat* U_EXPORT2 createInstance(UErrorCode&);
@ -716,6 +719,9 @@ public:
* Create a default style NumberFormat for the specified locale.
* The default formatting style is locale dependent.
* @param inLocale the given locale.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* @stable ICU 2.0
*/
static NumberFormat* U_EXPORT2 createInstance(const Locale& inLocale,
@ -723,6 +729,9 @@ public:
/**
* Create a specific style NumberFormat for the specified locale.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* @param desiredLocale the given locale.
* @param style the given style.
* @param errorCode Output param filled with success/failure status.
@ -759,12 +768,18 @@ public:
/**
* Returns a currency format for the current default locale.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* @stable ICU 2.0
*/
static NumberFormat* U_EXPORT2 createCurrencyInstance(UErrorCode&);
/**
* Returns a currency format for the specified locale.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* @param inLocale the given locale.
* @stable ICU 2.0
*/
@ -773,12 +788,18 @@ public:
/**
* Returns a percentage format for the current default locale.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* @stable ICU 2.0
*/
static NumberFormat* U_EXPORT2 createPercentInstance(UErrorCode&);
/**
* Returns a percentage format for the specified locale.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* @param inLocale the given locale.
* @stable ICU 2.0
*/
@ -787,12 +808,18 @@ public:
/**
* Returns a scientific format for the current default locale.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* @stable ICU 2.0
*/
static NumberFormat* U_EXPORT2 createScientificInstance(UErrorCode&);
/**
* Returns a scientific format for the specified locale.
* <p>
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* @param inLocale the given locale.
* @stable ICU 2.0
*/

View file

@ -1465,8 +1465,10 @@ int32_t RegexCImpl::appendReplacement(RegularExpression *regexp,
int32_t groupNum = 0;
U_ASSERT(c == DOLLARSIGN);
UChar32 c32;
U16_GET(replacementText, 0, replIdx, replacementLength, c32);
UChar32 c32 = -1;
if (replIdx < replacementLength) {
U16_GET(replacementText, 0, replIdx, replacementLength, c32);
}
if (u_isdigit(c32)) {
int32_t numDigits = 0;
int32_t numCaptureGroups = m->fPattern->fGroupMap->size();

View file

@ -20,14 +20,17 @@
/**
* Opaque datatype representing an array of font runs
* @internal
*/
typedef void pl_fontRuns;
/**
* Opaque datatype representing an array of value runs
* @internal
*/
typedef void pl_valueRuns;
/**
* Opaque datatype representing an array of locale runs
* @internal
*/
typedef void pl_localeRuns;

View file

@ -757,6 +757,14 @@ static void TestFwdBack() {
}
}
/**
* Ticket #13636 - Visual Studio 2017 has problems optimizing this function.
* As a workaround, we will turn off optimization just for this function on VS2017 and above.
*/
#if defined(_MSC_VER) && (_MSC_VER > 1900)
#pragma optimize( "", off )
#endif
static void TestFwdBackUnsafe() {
/*
* Use a (mostly) well-formed UTF-8 string and test at code point boundaries.
@ -842,6 +850,13 @@ static void TestFwdBackUnsafe() {
}
}
/**
* Ticket #13636 - Turn optimization back on.
*/
#if defined(_MSC_VER) && (_MSC_VER > 1900)
#pragma optimize( "", on )
#endif
static void TestSetChar() {
static const uint8_t input[]
= {0x61, 0xe4, 0xba, 0x8c, 0x7f, 0xfe, 0x62, 0xc5, 0x7f, 0x61, 0x80, 0x80, 0xe0, 0x00 };

View file

@ -736,7 +736,11 @@ void AlphabeticIndexTest::testHasBuckets() {
void AlphabeticIndexTest::checkHasBuckets(const Locale &locale, UScriptCode script) {
IcuTestErrorCode errorCode(*this, "checkHasBuckets");
AlphabeticIndex aindex(locale, errorCode);
LocalPointer<AlphabeticIndex::ImmutableIndex> index(aindex.buildImmutableIndex(errorCode));
LocalPointer<AlphabeticIndex::ImmutableIndex> index(aindex.buildImmutableIndex(errorCode), errorCode);
if (U_FAILURE(errorCode)) {
dataerrln("%s %d Error in index creation", __FILE__, __LINE__);
return;
}
UnicodeString loc = locale.getName();
assertTrue(loc + u" at least 3 buckets", index->getBucketCount() >= 3);
const AlphabeticIndex::Bucket *bucket = index->getBucket(1);

View file

@ -106,8 +106,13 @@ void PatternModifierTest::testPatternWithNoPlaceholder() {
nsb.append(u"x123y", UNUM_FIELD_COUNT, status);
assertSuccess("Spot 5", status);
MicroProps micros;
LocalPointer<ImmutablePatternModifier> imod(mod.createImmutable(status));
assertSuccess("Spot 6", status);
LocalPointer<ImmutablePatternModifier> imod(mod.createImmutable(status), status);
if (U_FAILURE(status)) {
dataerrln("%s %d Error in ImmutablePatternModifier creation",
__FILE__, __LINE__);
assertSuccess("Spot 6", status);
return;
}
DecimalQuantity quantity;
imod->applyToMicros(micros, quantity);
micros.modMiddle->apply(nsb, 1, 4, status);

View file

@ -8927,8 +8927,12 @@ void NumberFormatTest::Test11035_FormatCurrencyAmount() {
// Test two ways to set a currency via API
Locale loc1 = Locale("pt_PT");
LocalPointer<NumberFormat> fmt1(NumberFormat::createCurrencyInstance(loc1, status));
assertSuccess("Creating fmt1", status);
LocalPointer<NumberFormat> fmt1(NumberFormat::createCurrencyInstance("loc1", status),
status);
if (U_FAILURE(status)) {
dataerrln("%s %d NumberFormat instance fmt1 is null", __FILE__, __LINE__);
return;
}
fmt1->setCurrency(u"PTE", status);
assertSuccess("Setting currency on fmt1", status);
UnicodeString actualSetCurrency;
@ -8940,7 +8944,7 @@ void NumberFormatTest::Test11035_FormatCurrencyAmount() {
UnicodeString actualLocaleString;
fmt2->format(amount, actualLocaleString);
// TODO: The following test fill fail until DecimalFormat wraps NumberFormatter.
// TODO: The following test will fail until DecimalFormat wraps NumberFormatter.
if (!logKnownIssue("13574")) {
assertEquals("Custom Currency Pattern, Set Currency", expected, actualSetCurrency);
}
@ -8948,7 +8952,11 @@ void NumberFormatTest::Test11035_FormatCurrencyAmount() {
void NumberFormatTest::Test11318_DoubleConversion() {
IcuTestErrorCode status(*this, "Test11318_DoubleConversion");
LocalPointer<NumberFormat> nf(NumberFormat::createInstance("en", status));
LocalPointer<NumberFormat> nf(NumberFormat::createInstance("en", status), status);
if (U_FAILURE(status)) {
dataerrln("%s %d Error in NumberFormat instance creation", __FILE__, __LINE__);
return;
}
nf->setMaximumFractionDigits(40);
nf->setMaximumIntegerDigits(40);
UnicodeString appendTo;

View file

@ -39,6 +39,7 @@
#include "unicode/ustring.h"
#include "unicode/utext.h"
#include "unicode/utf16.h"
#include "cstr.h"
#include "regextst.h"
#include "regexcmp.h"
#include "uvector.h"
@ -101,6 +102,8 @@ void RegexTest::runIndexedTest( int32_t index, UBool exec, const char* &name, ch
TESTCASE_AUTO(NamedCapture);
TESTCASE_AUTO(NamedCaptureLimits);
TESTCASE_AUTO(TestBug12884);
TESTCASE_AUTO(TestBug13631);
TESTCASE_AUTO(TestBug13632);
TESTCASE_AUTO_END;
}
@ -5806,4 +5809,46 @@ void RegexTest::TestBug12884() {
REGEX_ASSERT(status == U_REGEX_TIME_OUT);
}
// Bug 13631. A find() of a pattern with a zero length look-behind assertions
// can cause a read past the end of the input text.
// The failure is seen when running this test with Clang's Addresss Sanitizer.
void RegexTest::TestBug13631() {
const UChar *pats[] = { u"(?<!^)",
u"(?<=^)",
nullptr
};
for (const UChar **pat=pats; *pat; ++pat) {
UErrorCode status = U_ZERO_ERROR;
UnicodeString upat(*pat);
RegexMatcher matcher(upat, 0, status);
const UChar s =u'a';
UText *ut = utext_openUChars(nullptr, &s, 1, &status);
REGEX_CHECK_STATUS;
matcher.reset(ut);
while (matcher.find()) {
}
utext_close(ut);
}
}
// Bug 13632 Out of bounds memory reference if a replacement string ends with a '$',
// where a following group specification would be expected.
// Failure shows when running the test under Clang's Address Sanitizer.
void RegexTest::TestBug13632() {
UErrorCode status = U_ZERO_ERROR;
URegularExpression *re = uregex_openC(" ", 0, nullptr, &status);
const char16_t *sourceString = u"Hello, world.";
uregex_setText(re, sourceString, u_strlen(sourceString), &status);
const int32_t destCap = 20;
char16_t dest[destCap] = {};
const char16_t replacement[] = {u'x', u'$'}; // Not nul terminated string.
uregex_replaceAll(re, replacement, 2, dest, destCap, &status);
assertEquals("", U_REGEX_INVALID_CAPTURE_GROUP_NAME, status);
uregex_close(re);
}
#endif /* !UCONFIG_NO_REGULAR_EXPRESSIONS */

View file

@ -57,7 +57,9 @@ public:
virtual void TestBug11371();
virtual void TestBug11480();
virtual void TestBug12884();
virtual void TestBug13631();
virtual void TestBug13632();
// The following functions are internal to the regexp tests.
virtual void assertUText(const char *expected, UText *actual, const char *file, int line);
virtual void assertUTextInvariant(const char *invariant, UText *actual, const char *file, int line);

View file

@ -45,6 +45,7 @@ MultithreadTest::~MultithreadTest()
#include <stdio.h>
#include <string.h>
#include <ctype.h> // tolower, toupper
#include <memory>
#include "unicode/putil.h"
@ -62,82 +63,24 @@ void MultithreadTest::runIndexedTest( int32_t index, UBool exec,
const char* &name, char* /*par*/ ) {
if (exec)
logln("TestSuite MultithreadTest: ");
switch (index) {
case 0:
name = "TestThreads";
if (exec)
TestThreads();
break;
case 1:
name = "TestMutex";
if (exec)
TestMutex();
break;
case 2:
name = "TestThreadedIntl";
TESTCASE_AUTO_BEGIN;
TESTCASE_AUTO(TestThreads);
TESTCASE_AUTO(TestMutex);
#if !UCONFIG_NO_FORMATTING
if (exec) {
TestThreadedIntl();
}
TESTCASE_AUTO(TestThreadedIntl);
#endif
break;
case 3:
name = "TestCollators";
#if !UCONFIG_NO_COLLATION
if (exec) {
TestCollators();
}
TESTCASE_AUTO(TestCollators);
#endif /* #if !UCONFIG_NO_COLLATION */
break;
case 4:
name = "TestString";
if (exec) {
TestString();
}
break;
case 5:
name = "TestArabicShapingThreads";
if (exec) {
TestArabicShapingThreads();
}
break;
case 6:
name = "TestAnyTranslit";
if (exec) {
TestAnyTranslit();
}
break;
case 7:
name = "TestConditionVariables";
if (exec) {
TestConditionVariables();
}
break;
case 8:
name = "TestUnifiedCache";
if (exec) {
TestUnifiedCache();
}
break;
#if !UCONFIG_NO_TRANSLITERATION
case 9:
name = "TestBreakTranslit";
if (exec) {
TestBreakTranslit();
}
break;
#endif
default:
name = "";
break; //needed to end loop
}
TESTCASE_AUTO(TestString);
TESTCASE_AUTO(TestArabicShapingThreads);
TESTCASE_AUTO(TestAnyTranslit);
TESTCASE_AUTO(TestConditionVariables);
TESTCASE_AUTO(TestUnifiedCache);
TESTCASE_AUTO(TestBreakTranslit);
TESTCASE_AUTO(TestIncDec);
TESTCASE_AUTO_END
}
@ -1572,4 +1515,36 @@ void MultithreadTest::TestBreakTranslit() {
gTranslitExpected = NULL;
}
class TestIncDecThread : public SimpleThread {
public:
TestIncDecThread() { };
virtual void run();
};
static u_atomic_int32_t gIncDecCounter;
void TestIncDecThread::run() {
umtx_atomic_inc(&gIncDecCounter);
for (int32_t i=0; i<5000000; ++i) {
umtx_atomic_inc(&gIncDecCounter);
umtx_atomic_dec(&gIncDecCounter);
}
}
void MultithreadTest::TestIncDec()
{
static constexpr int NUM_THREADS = 4;
gIncDecCounter = 0;
TestIncDecThread threads[NUM_THREADS];
for (auto &thread:threads) {
thread.start();
}
for (auto &thread:threads) {
thread.join();
}
assertEquals("TestIncDec", NUM_THREADS, gIncDecCounter);
}
#endif /* !UCONFIG_NO_TRANSLITERATION */

View file

@ -52,7 +52,7 @@ public:
void TestConditionVariables();
void TestUnifiedCache();
void TestBreakTranslit();
void TestIncDec();
};
#endif

View file

@ -9,25 +9,24 @@
#include <iostream>
#include <fstream>
// Include this even though we aren't linking against it.
// We only use U8_* macros, which are entirely inline.
#include "unicode/utf8.h"
// Include this here, to avoid needing to compile and link part of common lib
// (bootstrapping problem)
#include "utf_impl.cpp"
// This contains a codepage and ISO 14882:1998 illegality table.
// Use "make gen-table" to rebuild it.
#include "cptbl.h"
/**
* What is this?
* or even:
* what IS this??
*
*
* "This" is a preprocessor that makes an attempt to convert fully valid C++11 source code
* in utf-8 into.. something else. Something consumable by certain compilers (Solaris, xlC)
* which aren't quite there.
* in utf-8 into something consumable by certain compilers (Solaris, xlC)
* which aren't quite standards compliant.
*
* - u"<unicode>" or u'<unicode>' gets converted to u"\uNNNN" or u'\uNNNN'
* - u8"<unicode>" gets converted to "\xAA\xBB\xCC\xDD" etc.
* - if the system is EBCDIC-based, well, that's taken into account.
* (some compilers do not support the u8 prefix correctly.)
* - if the system is EBCDIC-based, that is used to correct the input characters.
*
* Usage:
* escapesrc infile.cpp outfile.cpp
@ -38,8 +37,8 @@
* %.o: _%.cpp
* $(COMPILE.cc) ... $@ $<
*
* Naturally, 'escapesrc' has to be excluded from said build rule.
* In the Makefiles, SKIP_ESCAPING=YES is used to prevent escapesrc.cpp
* from being itself escaped.
*/
@ -49,10 +48,6 @@ static const char
kLF = 0x0A,
kCR = 0x0D;
// This contains a codepage and ISO 14882:1998 illegality table.
// Use "make gen-table" to rebuild it.
# include "cptbl.h"
// For convenience
# define cp1047_to_8859(c) cp1047_8859_1[c]

View file

@ -85,8 +85,7 @@ public class StringSegment implements CharSequence {
}
/**
* Returns the first code point in the string segment, or -1 if the string starts with an invalid
* code point.
* Returns the first code point in the string segment.
*
* <p>
* <strong>Important:</strong> Most of the time, you should use {@link #startsWith}, which handles

View file

@ -23,8 +23,7 @@ import com.ibm.icu.util.ULocale;
* <p>
* <strong>IMPORTANT:</strong> New users are strongly encouraged to see if
* {@link NumberFormatter} fits their use case. Although not deprecated, this
* class, CompactDecimalFormat, is on life support and is provided for
* backwards compatibility only.
* class, CompactDecimalFormat, is provided for backwards compatibility only.
* <hr>
*
* The CompactDecimalFormat produces abbreviated numbers, suitable for display in environments will
@ -80,6 +79,9 @@ public class CompactDecimalFormat extends DecimalFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* Creates a CompactDecimalFormat appropriate for a locale. The result may be affected by the
* number system in the locale, such as ar-u-nu-latn.
*
@ -92,6 +94,9 @@ public class CompactDecimalFormat extends DecimalFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* Creates a CompactDecimalFormat appropriate for a locale. The result may be affected by the
* number system in the locale, such as ar-u-nu-latn.
*

View file

@ -39,8 +39,7 @@ import com.ibm.icu.util.ULocale.Category;
* <p>
* <strong>IMPORTANT:</strong> New users are strongly encouraged to see if
* {@link NumberFormatter} fits their use case. Although not deprecated, this
* class, DecimalFormat, is on life support and is only provided for
* java.text.DecimalFormat compatibility.
* class, DecimalFormat, is only provided for java.text.DecimalFormat compatibility.
* <hr>
*
* <code>DecimalFormat</code> is the primary

View file

@ -58,8 +58,7 @@ import com.ibm.icu.util.UResourceBundle;
* <p>
* <strong>IMPORTANT:</strong> New users are strongly encouraged to see if
* {@link NumberFormatter} fits their use case. Although not deprecated, this
* class, MeasureFormat, is on life support and is provided for
* backwards compatibility only.
* class, MeasureFormat, is provided for backwards compatibility only.
* <hr>
*
* <p>

View file

@ -39,8 +39,7 @@ import com.ibm.icu.util.UResourceBundle;
* <p>
* <strong>IMPORTANT:</strong> New users are strongly encouraged to see if
* {@link NumberFormatter} fits their use case. Although not deprecated, this
* class, NumberFormat, is on life support and is only provided for
* java.text.NumberFormat compatibility.
* class, NumberFormat, is only provided for java.text.NumberFormat compatibility.
* <hr>
*
* <code>NumberFormat</code> is the abstract base class for all number
@ -585,6 +584,9 @@ public abstract class NumberFormat extends UFormat {
//============== Locale Stuff =====================
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* Returns the default number format for the current default <code>FORMAT</code> locale.
* The default format is one of the styles provided by the other
* factory methods: getNumberInstance, getIntegerInstance,
@ -599,6 +601,9 @@ public abstract class NumberFormat extends UFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* Returns the default number format for the specified locale.
* The default format is one of the styles provided by the other
* factory methods: getNumberInstance, getCurrencyInstance or getPercentInstance.
@ -610,6 +615,9 @@ public abstract class NumberFormat extends UFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* {@icu} Returns the default number format for the specified locale.
* The default format is one of the styles provided by the other
* factory methods: getNumberInstance, getCurrencyInstance or getPercentInstance.
@ -621,6 +629,9 @@ public abstract class NumberFormat extends UFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* {@icu} Returns a specific style number format for default <code>FORMAT</code> locale.
* @param style number format style
* @see Category#FORMAT
@ -631,6 +642,9 @@ public abstract class NumberFormat extends UFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* {@icu} Returns a specific style number format for a specific locale.
* @param inLocale the specific locale.
* @param style number format style
@ -642,6 +656,9 @@ public abstract class NumberFormat extends UFormat {
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* Returns a general-purpose number format for the current default <code>FORMAT</code> locale.
* @see Category#FORMAT
* @stable ICU 2.0
@ -651,6 +668,9 @@ public abstract class NumberFormat extends UFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* Returns a general-purpose number format for the specified locale.
* @stable ICU 2.0
*/
@ -659,6 +679,9 @@ public abstract class NumberFormat extends UFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* {@icu} Returns a general-purpose number format for the specified locale.
* @stable ICU 3.2
*/
@ -667,6 +690,9 @@ public abstract class NumberFormat extends UFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* Returns an integer number format for the current default <code>FORMAT</code> locale. The
* returned number format is configured to round floating point numbers
* to the nearest integer using IEEE half-even rounding (see {@link
@ -684,6 +710,9 @@ public abstract class NumberFormat extends UFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* Returns an integer number format for the specified locale. The
* returned number format is configured to round floating point numbers
* to the nearest integer using IEEE half-even rounding (see {@link
@ -701,6 +730,9 @@ public abstract class NumberFormat extends UFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* {@icu} Returns an integer number format for the specified locale. The
* returned number format is configured to round floating point numbers
* to the nearest integer using IEEE half-even rounding (see {@link
@ -717,6 +749,9 @@ public abstract class NumberFormat extends UFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* Returns a currency format for the current default <code>FORMAT</code> locale.
* @return a number format for currency
* @see Category#FORMAT
@ -727,6 +762,9 @@ public abstract class NumberFormat extends UFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* Returns a currency format for the specified locale.
* @return a number format for currency
* @stable ICU 2.0
@ -736,6 +774,9 @@ public abstract class NumberFormat extends UFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* {@icu} Returns a currency format for the specified locale.
* @return a number format for currency
* @stable ICU 3.2
@ -745,6 +786,9 @@ public abstract class NumberFormat extends UFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* Returns a percentage format for the current default <code>FORMAT</code> locale.
* @return a number format for percents
* @see Category#FORMAT
@ -755,6 +799,9 @@ public abstract class NumberFormat extends UFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* Returns a percentage format for the specified locale.
* @return a number format for percents
* @stable ICU 2.0
@ -764,6 +811,9 @@ public abstract class NumberFormat extends UFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* {@icu} Returns a percentage format for the specified locale.
* @return a number format for percents
* @stable ICU 3.2
@ -773,6 +823,9 @@ public abstract class NumberFormat extends UFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* {@icu} Returns a scientific format for the current default <code>FORMAT</code> locale.
* @return a scientific number format
* @see Category#FORMAT
@ -783,6 +836,9 @@ public abstract class NumberFormat extends UFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* {@icu} Returns a scientific format for the specified locale.
* @return a scientific number format
* @stable ICU 2.0
@ -792,6 +848,9 @@ public abstract class NumberFormat extends UFormat {
}
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* {@icu} Returns a scientific format for the specified locale.
* @return a scientific number format
* @stable ICU 3.2
@ -1345,6 +1404,9 @@ public abstract class NumberFormat extends UFormat {
/**
* <strong>NOTE:</strong> New users are strongly encouraged to use
* {@link NumberFormatter} instead of NumberFormat.
* <hr>
* Returns a specific style number format for a specific locale.
* @param desiredLocale the specific locale.
* @param choice number format style

View file

@ -9,9 +9,10 @@
package com.ibm.icu.text;
import java.io.DataOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.Arrays;
import com.ibm.icu.impl.ICUBinary;
import com.ibm.icu.impl.ICUBinary.Authenticate;
@ -20,13 +21,140 @@ import com.ibm.icu.impl.Trie2;
/**
* <p>Internal class used for Rule Based Break Iterators.</p>
* <p>This class provides access to the compiled break rule data, as
* it is stored in a .brk file.
* it is stored in a .brk file. Refer to the file common/rbbidata.h from
* ICU4C for further details.
* Not intended for public use; declared public for testing purposes only.
* @internal
* @deprecated This API is ICU internal only.
*/
@Deprecated
public final class RBBIDataWrapper {
/**
* A RBBI State Transition table, the form of the data used at run time in Java.
* These can be created from stored ICU data, or built from rules.
* The structure corresponds closely to struct RBBIStateTable in ICU4C.
* Not intended for public use; declared public for testing purposes only.
* @internal
* @deprecated This API is ICU internal only.
*/
@Deprecated
static public class RBBIStateTable {
/**
* Number of states (rows) in this table.
* @internal
* @deprecated This API is ICU internal only.
*/
@Deprecated
public int fNumStates;
/**
* Length of a table row in bytes. Note mismatch with table data, which is short[].
* @internal
* @deprecated This API is ICU internal only.
*/
@Deprecated
public int fRowLen;
/**
* Option Flags for this state table.
* @internal
* @deprecated This API is ICU internal only.
*/
@Deprecated
public int fFlags;
/**
* Option Flags for this state table.
* @internal
* @deprecated This API is ICU internal only.
*/
@Deprecated
public int fReserved;
/**
* Linear array of next state values, accessed as short[state, char_class]
* @internal
* @deprecated This API is ICU internal only.
*/
@Deprecated
public short[] fTable;
RBBIStateTable() {
}
static RBBIStateTable get(ByteBuffer bytes, int length) throws IOException {
if (length == 0) {
return null;
}
if (length < 16) {
throw new IOException("Invalid RBBI state table length.");
}
RBBIStateTable This = new RBBIStateTable();
This.fNumStates = bytes.getInt();
This.fRowLen = bytes.getInt();
This.fFlags = bytes.getInt();
This.fReserved = bytes.getInt();
int lengthOfShorts = length - 16; // length in bytes.
This.fTable = ICUBinary.getShorts(bytes, lengthOfShorts / 2, lengthOfShorts & 1);
return This;
}
int put(DataOutputStream bytes) throws IOException {
bytes.writeInt(fNumStates);
bytes.writeInt(fRowLen);
bytes.writeInt(fFlags);
bytes.writeInt(fReserved);
int tableLen = fRowLen * fNumStates / 2; // fRowLen is bytes.
for (int i = 0; i < tableLen; i++) {
bytes.writeShort(fTable[i]);
}
int bytesWritten = 16 + fRowLen * fNumStates; // total bytes written,
// including 16 for the header.
while (bytesWritten % 8 != 0) {
bytes.writeByte(0);
++bytesWritten;
}
return bytesWritten;
}
/**
* {@inheritDoc}
* @internal
* @deprecated This API is ICU internal only.
*/
@Deprecated
@Override
public boolean equals (Object other) {
if (other == this) {
return true;
}
if (!(other instanceof RBBIStateTable)) {
return false;
}
RBBIStateTable otherST = (RBBIStateTable)other;
if (fNumStates != otherST.fNumStates) return false;
if (fRowLen != otherST.fRowLen) return false;
if (fFlags != otherST.fFlags) return false;
if (fReserved != otherST.fReserved) return false;
return Arrays.equals(fTable, otherST.fTable);
}
}
/**
* Equals helper for state tables, including null handling.
* Not intended for public use; declared public for testing purposes only.
* @internal
* @deprecated This API is ICU internal only.
*/
@Deprecated
static public boolean equals(RBBIStateTable left, RBBIStateTable right) {
if (left == right) {
return true;
}
if (left == null || right == null) {
return false;
}
return left.equals(right);
}
//
// These fields are the ready-to-use compiled rule data, as
// read from the file.
@ -42,31 +170,30 @@ public final class RBBIDataWrapper {
* @deprecated This API is ICU internal only.
*/
@Deprecated
public short fFTable[];
public RBBIStateTable fFTable;
/**
* @internal
* @deprecated This API is ICU internal only.
*/
@Deprecated
public short fRTable[];
public RBBIStateTable fRTable;
/**
* @internal
* @deprecated This API is ICU internal only.
*/
@Deprecated
public short fSFTable[];
public RBBIStateTable fSFTable;
/**
* @internal
* @deprecated This API is ICU internal only.
*/
@Deprecated
public short fSRTable[];
public RBBIStateTable fSRTable;
Trie2 fTrie;
String fRuleSource;
int fStatusTable[];
private boolean isBigEndian;
static final int DATA_FORMAT = 0x42726b20; // "Brk "
static final int FORMAT_VERSION = 0x04000000; // 4.0.0.0
@ -138,15 +265,6 @@ public final class RBBIDataWrapper {
@Deprecated
public final static int NEXTSTATES = 4;
// Index offsets to header fields of a state table
// struct RBBIStateTable {... in the C version.
//
static final int NUMSTATES = 0;
static final int ROWLEN = 2;
static final int FLAGS = 4;
//ivate static final int RESERVED_2 = 6;
private static final int ROW_DATA = 8;
// Bit selectors for the "FLAGS" field of the state table header
// enum RBBIStateTableFlags in the C version.
//
@ -212,7 +330,7 @@ public final class RBBIDataWrapper {
*/
@Deprecated
public int getRowIndex(int state){
return ROW_DATA + state * (fHeader.fCatCount + 4);
return state * (fHeader.fCatCount + 4);
}
RBBIDataWrapper() {
@ -226,7 +344,6 @@ public final class RBBIDataWrapper {
RBBIDataWrapper This = new RBBIDataWrapper();
ICUBinary.readHeader(bytes, DATA_FORMAT, IS_ACCEPTABLE);
This.isBigEndian = bytes.order() == ByteOrder.BIG_ENDIAN;
// Read in the RBBI data header...
This.fHeader = new RBBIDataHeader();
@ -274,8 +391,7 @@ public final class RBBIDataWrapper {
ICUBinary.skipBytes(bytes, This.fHeader.fFTable - pos);
pos = This.fHeader.fFTable;
This.fFTable = ICUBinary.getShorts(
bytes, This.fHeader.fFTableLen / 2, This.fHeader.fFTableLen & 1);
This.fFTable = RBBIStateTable.get(bytes, This.fHeader.fFTableLen);
pos += This.fHeader.fFTableLen;
//
@ -287,8 +403,7 @@ public final class RBBIDataWrapper {
pos = This.fHeader.fRTable;
// Create & fill the table itself.
This.fRTable = ICUBinary.getShorts(
bytes, This.fHeader.fRTableLen / 2, This.fHeader.fRTableLen & 1);
This.fRTable = RBBIStateTable.get(bytes, This.fHeader.fRTableLen);
pos += This.fHeader.fRTableLen;
//
@ -300,8 +415,7 @@ public final class RBBIDataWrapper {
pos = This.fHeader.fSFTable;
// Create & fill the table itself.
This.fSFTable = ICUBinary.getShorts(
bytes, This.fHeader.fSFTableLen / 2, This.fHeader.fSFTableLen & 1);
This.fSFTable = RBBIStateTable.get(bytes, This.fHeader.fSFTableLen);
pos += This.fHeader.fSFTableLen;
}
@ -314,8 +428,7 @@ public final class RBBIDataWrapper {
pos = This.fHeader.fSRTable;
// Create & fill the table itself.
This.fSRTable = ICUBinary.getShorts(
bytes, This.fHeader.fSRTableLen / 2, This.fHeader.fSRTableLen & 1);
This.fSRTable = RBBIStateTable.get(bytes, This.fHeader.fSRTableLen);
pos += This.fHeader.fSRTableLen;
}
@ -381,25 +494,6 @@ public final class RBBIDataWrapper {
return This;
}
/**
* Getters for fields from the state table header
* @internal
* @deprecated This API is ICU internal only.
*/
@Deprecated
public int getStateTableNumStates(short table[]) {
if (isBigEndian) {
return (table[NUMSTATES] << 16) | (table[NUMSTATES+1] & 0xffff);
} else {
return (table[NUMSTATES+1] << 16) | (table[NUMSTATES] & 0xffff);
}
}
int getStateTableFlags(short table[]) {
// This works for up to 15 flags bits.
return table[isBigEndian ? FLAGS + 1 : FLAGS];
}
///CLOVER:OFF
/* Debug function to display the break iterator data. */
/**
@ -408,7 +502,7 @@ public final class RBBIDataWrapper {
*/
@Deprecated
public void dump(java.io.PrintStream out) {
if (fFTable.length == 0) {
if (fFTable == null) {
// There is no table. Fail early for testing purposes.
throw new NullPointerException();
}
@ -465,8 +559,8 @@ public final class RBBIDataWrapper {
///CLOVER:OFF
/** Dump a state table. (A full set of RBBI rules has 4 state tables.) */
private void dumpTable(java.io.PrintStream out, short table[]) {
if (table == null || table.length == 0) {
private void dumpTable(java.io.PrintStream out, RBBIStateTable table) {
if (table == null || table.fTable.length == 0) {
out.println(" -- null -- ");
} else {
int n;
@ -480,7 +574,7 @@ public final class RBBIDataWrapper {
out.print("-");
}
out.println();
for (state=0; state< getStateTableNumStates(table); state++) {
for (state=0; state < table.fNumStates; state++) {
dumpRow(out, table, state);
}
out.println();
@ -494,24 +588,24 @@ public final class RBBIDataWrapper {
* @param table
* @param state
*/
private void dumpRow(java.io.PrintStream out, short table[], int state) {
private void dumpRow(java.io.PrintStream out, RBBIStateTable table, int state) {
StringBuilder dest = new StringBuilder(fHeader.fCatCount*5 + 20);
dest.append(intToString(state, 4));
int row = getRowIndex(state);
if (table[row+ACCEPTING] != 0) {
dest.append(intToString(table[row+ACCEPTING], 5));
if (table.fTable[row+ACCEPTING] != 0) {
dest.append(intToString(table.fTable[row+ACCEPTING], 5));
}else {
dest.append(" ");
}
if (table[row+LOOKAHEAD] != 0) {
dest.append(intToString(table[row+LOOKAHEAD], 5));
if (table.fTable[row+LOOKAHEAD] != 0) {
dest.append(intToString(table.fTable[row+LOOKAHEAD], 5));
}else {
dest.append(" ");
}
dest.append(intToString(table[row+TAGIDX], 5));
dest.append(intToString(table.fTable[row+TAGIDX], 5));
for (int col=0; col<fHeader.fCatCount; col++) {
dest.append(intToString(table[row+NEXTSTATES+col], 5));
dest.append(intToString(table.fTable[row+NEXTSTATES+col], 5));
}
out.println(dest);

View file

@ -253,13 +253,9 @@ class RBBIRuleBuilder {
}
// Write out the actual state tables.
short[] tableData;
tableData = fForwardTables.exportTable();
Assert.assrt(outputPos == header[4]);
for (i = 0; i < tableData.length; i++) {
dos.writeShort(tableData[i]);
outputPos += 2;
}
RBBIDataWrapper.RBBIStateTable table = fForwardTables.exportTable();
assert(outputPos == header[4]);
outputPos += table.put(dos);
/* do not write the reverse table
tableData = fReverseTables.exportTable();
@ -281,16 +277,13 @@ class RBBIRuleBuilder {
// Write the safe reverse table.
// If not present, write the plain reverse table (old style rule compatibility)
Assert.assrt(outputPos == header[10]);
assert(outputPos == header[10]);
if (safeRevTableSize > 0) {
tableData = fSafeRevTables.exportTable();
table = fSafeRevTables.exportTable();
} else {
tableData = fReverseTables.exportTable();
}
for (i = 0; i < tableData.length; i++) {
dos.writeShort(tableData[i]);
outputPos += 2;
table = fReverseTables.exportTable();
}
outputPos += table.put(dos);
// write out the Trie table
Assert.assrt(outputPos == header[12]);

View file

@ -978,118 +978,70 @@ class RBBITableBuilder {
}
//-----------------------------------------------------------------------------
//
// getTableSize() Calculate the size in bytes of the runtime form of this
// state transition table.
//
// Note: Refer to common/rbbidata.h from ICU4C for the declarations
// of the structures being matched by this calculation.
//
//-----------------------------------------------------------------------------
/**
* Calculate the size in bytes of the serialized form of this state transition table,
* which is identical to the ICU4C runtime form.
* Refer to common/rbbidata.h from ICU4C for the declarations of the structures
* being matched by this calculation.
*/
int getTableSize() {
int size = 0;
int numRows;
int numCols;
int rowSize;
if (fRB.fTreeRoots[fRootIx] == null) {
return 0;
}
size = /*sizeof(RBBIStateTable) - 4 */ 16; // The header, with no rows to the table.
numRows = fDStates.size();
numCols = fRB.fSetBuilder.getNumCharCategories();
// Note The declaration of RBBIStateTableRow is for a table of two columns.
// Therefore we subtract two from numCols when determining
// how much storage to add to a row for the total columns.
// rowSize = sizeof(RBBIStateTableRow) + sizeof(uint16_t)*(numCols-2);
rowSize = 8 + 2*numCols;
int size = 16; // The header of 4 ints, with no rows to the table.
int numRows = fDStates.size();
int numCols = fRB.fSetBuilder.getNumCharCategories();
int rowSize = 8 + 2*numCols;
size += numRows * rowSize;
while (size % 8 > 0) { // Size must be multiple of 8 bytes in size.
size++;
}
size = (size + 7) & ~7; // round up to a multiple of 8 bytes
return size;
}
//-----------------------------------------------------------------------------
//
// exportTable() export the state transition table in the ICU4C format.
//
// Most of the table is 16 bit shorts. This function exports
// the whole thing as an array of shorts.
//
// The size of the array must be rounded up to a multiple of
// 8 bytes.
//
// See struct RBBIStateTable in ICU4C, common/rbbidata.h
//
//-----------------------------------------------------------------------------
short [] exportTable() {
/**
* Create a RBBIDataWrapper.RBBIStateTable for a newly compiled table.
* RBBIDataWrapper.RBBIStateTable is similar to struct RBBIStateTable in ICU4C,
* in common/rbbidata.h
*/
RBBIDataWrapper.RBBIStateTable exportTable() {
int state;
int col;
RBBIDataWrapper.RBBIStateTable table = new RBBIDataWrapper.RBBIStateTable();
if (fRB.fTreeRoots[fRootIx] == null) {
return new short[0];
return table;
}
Assert.assrt(fRB.fSetBuilder.getNumCharCategories() < 0x7fff &&
fDStates.size() < 0x7fff);
int numStates = fDStates.size();
table.fNumStates = fDStates.size();
// Size of table size in shorts.
// the "4" is the size of struct RBBIStateTableRow, the row header part only.
int rowLen = 4 + fRB.fSetBuilder.getNumCharCategories(); // Row Length in shorts.
int tableSize = getTableSize() / 2;
int tableSize = (getTableSize() - 16) / 2; // fTable length in shorts.
table.fTable = new short[tableSize];
table.fRowLen = rowLen * 2; // Row length in bytes.
short [] table = new short[tableSize];
//
// Fill in the header fields.
// Note that NUMSTATES, ROWLEN and FLAGS are ints, not shorts.
// ICU data created from Java is always big endian format, so
// order the halves of the 32 bit fields into the short[] data accordingly.
// TODO: ticket 13598 restructure so that ints are represented as ints directly.
//
// RBBIStateTable.fNumStates
table[RBBIDataWrapper.NUMSTATES] = (short)(numStates >>> 16);
table[RBBIDataWrapper.NUMSTATES+1] = (short)(numStates & 0x0000ffff);
// RBBIStateTable.fRowLen. In bytes.
int rowLenInBytes = rowLen * 2;
table[RBBIDataWrapper.ROWLEN] = (short)(rowLenInBytes >>> 16);
table[RBBIDataWrapper.ROWLEN+1] = (short)(rowLenInBytes & 0x0000ffff);
// RBBIStateTable.fFlags
int flags = 0;
if (fRB.fLookAheadHardBreak) {
flags |= RBBIDataWrapper.RBBI_LOOKAHEAD_HARD_BREAK;
table.fFlags |= RBBIDataWrapper.RBBI_LOOKAHEAD_HARD_BREAK;
}
if (fRB.fSetBuilder.sawBOF()) {
flags |= RBBIDataWrapper.RBBI_BOF_REQUIRED;
table.fFlags |= RBBIDataWrapper.RBBI_BOF_REQUIRED;
}
table[RBBIDataWrapper.FLAGS] = (short)(flags >>> 16);
table[RBBIDataWrapper.FLAGS+1] = (short)(flags & 0x0000ffff);
int numCharCategories = fRB.fSetBuilder.getNumCharCategories();
for (state=0; state<numStates; state++) {
for (state=0; state<table.fNumStates; state++) {
RBBIStateDescriptor sd = fDStates.get(state);
int row = 8 + state*rowLen;
int row = state*rowLen;
Assert.assrt (-32768 < sd.fAccepting && sd.fAccepting <= 32767);
Assert.assrt (-32768 < sd.fLookAhead && sd.fLookAhead <= 32767);
table[row + RBBIDataWrapper.ACCEPTING] = (short)sd.fAccepting;
table[row + RBBIDataWrapper.LOOKAHEAD] = (short)sd.fLookAhead;
table[row + RBBIDataWrapper.TAGIDX] = (short)sd.fTagsIdx;
table.fTable[row + RBBIDataWrapper.ACCEPTING] = (short)sd.fAccepting;
table.fTable[row + RBBIDataWrapper.LOOKAHEAD] = (short)sd.fLookAhead;
table.fTable[row + RBBIDataWrapper.TAGIDX] = (short)sd.fTagsIdx;
for (col=0; col<numCharCategories; col++) {
table[row + RBBIDataWrapper.NEXTSTATES + col] = (short)sd.fDtran[col];
table.fTable[row + RBBIDataWrapper.NEXTSTATES + col] = (short)sd.fDtran[col];
}
}
return table;

View file

@ -805,7 +805,7 @@ public class RuleBasedBreakIterator extends BreakIterator {
CharacterIterator text = fText;
Trie2 trie = fRData.fTrie;
short[] stateTable = fRData.fFTable;
short[] stateTable = fRData.fFTable.fTable;
int initialPosition = fPosition;
text.setIndex(initialPosition);
int result = initialPosition;
@ -824,7 +824,7 @@ public class RuleBasedBreakIterator extends BreakIterator {
int state = START_STATE;
int row = fRData.getRowIndex(state);
short category = 3;
int flagsState = fRData.getStateTableFlags(stateTable);
int flagsState = fRData.fFTable.fFlags;
int mode = RBBI_RUN;
if ((flagsState & RBBIDataWrapper.RBBI_BOF_REQUIRED) != 0) {
category = 2;
@ -984,7 +984,7 @@ public class RuleBasedBreakIterator extends BreakIterator {
int result = 0;
int initialPosition = fromPosition;
fLookAheadMatches.reset();
short[] stateTable = fRData.fSRTable;
short[] stateTable = fRData.fSRTable.fTable;
CISetIndex32(fText, fromPosition);
if (fromPosition == fText.getBeginIndex()) {
return BreakIterator.DONE;
@ -999,7 +999,7 @@ public class RuleBasedBreakIterator extends BreakIterator {
row = fRData.getRowIndex(state);
category = 3; // TODO: obsolete? from the old start/run mode scheme?
mode = RBBI_RUN;
if ((fRData.getStateTableFlags(stateTable) & RBBIDataWrapper.RBBI_BOF_REQUIRED) != 0) {
if ((fRData.fSRTable.fFlags & RBBIDataWrapper.RBBI_BOF_REQUIRED) != 0) {
category = 2;
mode = RBBI_START;
}

View file

@ -568,7 +568,7 @@ public final class VersionInfo implements Comparable<VersionInfo>
UNICODE_10_0 = getInstance(10, 0, 0, 0);
ICU_VERSION = getInstance(61, 1, 0, 0);
ICU_DATA_VERSION = getInstance(61, 0, 1, 0);
ICU_DATA_VERSION = ICU_VERSION;
UNICODE_VERSION = UNICODE_10_0;
UCOL_RUNTIME_VERSION = getInstance(9);

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:5c858f2079eace62ae56dc51e99996e1c5dd99d7f22f3582d7186f51caae0eb2
size 12505738
oid sha256:3eb8332f908b83c82671f2b652d0bfdcc1c8da416884d0e358464af42af4f959
size 12505745

View file

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c02de21dd86cf635e3a1d809efc402c412f884354a2c37c9233bf2477b5ff635
oid sha256:d95bab418a9b465de9415e4e9f878330dbc5f7d6cddc416c492ad871f514fa82
size 92763

View file

@ -1,7 +1,7 @@
COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later)
Copyright © 1991-2017 Unicode, Inc. All rights reserved.
Distributed under the Terms of Use in http://www.unicode.org/copyright.html
Copyright © 1991-2018 Unicode, Inc. All rights reserved.
Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Unicode data files and any associated documentation
@ -383,3 +383,32 @@ Database section 7.
# by ICANN or the IETF Trust on the database or the code. Any person
# making a contribution to the database or code waives all rights to
# future claims in that contribution or in the TZ Database.
6. Google double-conversion
Copyright 2006-2011, the V8 project authors. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View file

@ -13,7 +13,7 @@
// https://docs.google.com/document/d/1T2P0p953_Lh1pRwo-5CuPVrHlIBa_wcXElG-Hhg_WHM/edit?usp=sharing
test plus sign
set locale ar
set locale ar-EG
set pattern +0;-#
begin
format output breaks

View file

@ -18,7 +18,6 @@ package com.ibm.icu.dev.test.rbbi;
// or simply retired if it is no longer interesting.
import java.text.CharacterIterator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
@ -574,16 +573,16 @@ public class RBBITest extends TestFmwk {
// Build a break iterator from source rules.
// Want to check the rule builder in Java, not the pre-built rules that are imported from ICU4C.
RBBIDataWrapper dw = bi.fRData;
short[] fwtbl = dw.fFTable;
RBBIDataWrapper.RBBIStateTable fwtbl = dw.fFTable;
int numCharClasses = dw.fHeader.fCatCount;
// Check for duplicate columns (character categories)
List<String> columns = new ArrayList<String>();
for (int column=0; column<numCharClasses; column++) {
StringBuilder s = new StringBuilder();
for (int r = 1; r < dw.getStateTableNumStates(fwtbl); r++) {
for (int r = 1; r < fwtbl.fNumStates; r++) {
int row = dw.getRowIndex(r);
short tableVal = fwtbl[row + RBBIDataWrapper.NEXTSTATES + column];
short tableVal = fwtbl.fTable[row + RBBIDataWrapper.NEXTSTATES + column];
s.append((char)tableVal);
}
columns.add(s.toString());
@ -600,22 +599,22 @@ public class RBBITest extends TestFmwk {
// Check for duplicate states.
List<String> rows = new ArrayList<String>();
for (int r=0; r<dw.getStateTableNumStates(fwtbl); r++) {
for (int r=0; r<fwtbl.fNumStates; r++) {
StringBuilder s = new StringBuilder();
int row = dw.getRowIndex(r);
assertTrue("Accepting < -1", fwtbl[row + RBBIDataWrapper.ACCEPTING] >= -1);
s.append(fwtbl[row + RBBIDataWrapper.ACCEPTING]);
s.append(fwtbl[row + RBBIDataWrapper.LOOKAHEAD]);
s.append(fwtbl[row + RBBIDataWrapper.TAGIDX]);
assertTrue("Accepting < -1", fwtbl.fTable[row + RBBIDataWrapper.ACCEPTING] >= -1);
s.append(fwtbl.fTable[row + RBBIDataWrapper.ACCEPTING]);
s.append(fwtbl.fTable[row + RBBIDataWrapper.LOOKAHEAD]);
s.append(fwtbl.fTable[row + RBBIDataWrapper.TAGIDX]);
for (int column=0; column<numCharClasses; column++) {
short tableVal = fwtbl[row + RBBIDataWrapper.NEXTSTATES + column];
short tableVal = fwtbl.fTable[row + RBBIDataWrapper.NEXTSTATES + column];
s.append((char)tableVal);
}
rows.add(s.toString());
}
for (int r1=0; r1 < dw.getStateTableNumStates(fwtbl); r1++) {
for (int r2= r1+1; r2 < dw.getStateTableNumStates(fwtbl); r2++) {
for (int r1=0; r1 < fwtbl.fNumStates; r1++) {
for (int r2= r1+1; r2 < fwtbl.fNumStates; r2++) {
assertFalse(String.format("Duplicate states (%d, %d)", r1, r2), rows.get(r1).equals(rows.get(r2)));
// if (rows.get(r1).equals(rows.get(r2))) {
// System.out.printf("Duplicate states (%d, %d)\n", r1, r2);
@ -652,11 +651,10 @@ public class RBBITest extends TestFmwk {
for (RuleBasedBreakIterator bi: breakIterators) {
String rules = bi.toString();
RuleBasedBreakIterator bi2 = new RuleBasedBreakIterator(rules);
assertTrue("Forward Table", Arrays.equals(bi.fRData.fFTable, bi2.fRData.fFTable));
assertTrue("Reverse Table", Arrays.equals(bi.fRData.fRTable, bi2.fRData.fRTable));
assertTrue("Safe Forward Table", Arrays.equals(bi.fRData.fSFTable, bi2.fRData.fSFTable));
assertTrue("SafeForward Table", Arrays.equals(bi.fRData.fSRTable, bi2.fRData.fSRTable));
assertTrue("Forward Table", RBBIDataWrapper.equals(bi.fRData.fFTable, bi2.fRData.fFTable));
assertTrue("Reverse Table", RBBIDataWrapper.equals(bi.fRData.fRTable, bi2.fRData.fRTable));
assertTrue("Safe Forward Table", RBBIDataWrapper.equals(bi.fRData.fSFTable, bi2.fRData.fSFTable));
assertTrue("SafeForward Table", RBBIDataWrapper.equals(bi.fRData.fSRTable, bi2.fRData.fSRTable));
}
}
}

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:52254032982876a6e09c5a944fd616cb38b9ef0bf77fc96d676b16f085b232e7
size 1326

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4b1629d477faf37e068645dbd7bdd3f296b84bb9e9af7857b191d0758645d646
size 7789

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3b71a1aa6334661bafe78b40cdd292172639a4983f620a6aeafd8157451010fd
size 2543

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a99aba3a360ed13aee933cbaee252b7486da617e8e0cf3f98015c49d447a0d64
size 20881

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:bc02ee6f798fb5a63e6f9c1bc37787b3e88b2dc9d548b8e0544bd1b61cd260bb
size 11139

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:42f57461449643a68e5390f9d1e0d9afef4932f660dcd7adbf6fc367b7e20780
size 21314

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:467a7d6c89e76f9eb4a513d62192984eeafc3fee81d0f401c377a9318cd94cdc
size 1616

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f659a4b818664f61566f7e64e73a26c7c4ec826b06dff489ba3d087c7ff7f359
size 7789

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e8b0bb3b15f7e40c8dfc49601039333c5d6a6cc592999538a8d87d58d1950c78
size 187867

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1e2b661b1469752d405eba96246b8837ee9440fd977ee9d277d8beacc800b17d
size 40465

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1217ef9cd1162e28bfd1867e216a003ea7b8c5327b69dd591163fd4d8620e314
size 1186

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3fb58afc6c2a264f7844fe58128111e2644fb343fce887b123a5046ba83611b1
size 42240

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:d867f33f71bb49653e1a0c9a83f80783a3696bfe2027f43a9327252421793684
size 26889

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:95ed3c962d6efb1ab00257a63845592703eee2ea39e0cdf3d1d69a8f34e493fd
size 10730

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:875bb8966aff03b29eac45bf77914c14365ffb416d7c61da37098372c6bc9160
size 568

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:2785ebb976af3f8c8f9434ec296b7d84ddba73ce2dd73cc42a192d8418cea38d
size 10640

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:24cdde3696db1f6a2feb44eec7bd94e00a043aa8253b8af7b7c906b04e35d6bd
size 5298

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e2ae0ec0fe6d0470bf06d65f6ec1cfdb3186b021d249db45ec51654e4116a623
size 3692

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:581715d958bcbba2f229dd6679c2c891390ee0dfc44580e8c9c416f87ccb4f79
size 4238

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6cd9ecc9387f78d1f155378e588f7518c3e6d022d1043f74f358eaee8183c617
size 3582

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3e41842affa91bd0d5aef2bd95f546d22fdff59f32181bfc6cd50ac788a0ffdd
size 44566

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:683de991c6c19e48a3eb14ef2e8790721218bfd9a083c64d7454c8bfefb31e94
size 84226

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:66507ed5132b223e9a685071d0b58ee601ffb14a48af6ffbfb7ffdac26506f3f
size 12324

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9a5d31a69b543f7e9fff358b0e15a1ebff3f1a35bfffe48f0168026d93ea3f16
size 3226

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6ab8358a3b8086624b52607073ab6b0f000eff3e9fff79c2aff9fdd1c5a84703
size 2672

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4129426033dc89387b59fc26793cd494e00bba2bd2d51be9672de8552c18749d
size 4090

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9ee50c904b7299aa5231cf3305ede35663979ae8951d71b6c02709d91132177e
size 3152

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:81cde1a3c81c6903b40bbf774b6d2ea350ed218aad0aa9cfec32359b677585d5
size 3328

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:4749c561e70fae7aa9e25c56fac53fb2c154285452e9f16466b15459984952c2
size 3538

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0af7860147c0471f76693fc447c511eb39ce8c1e1fb31fca6b00966899534e39
size 2621

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0dff05da6620db99b4cf3d1de51deae4883727886052a73abd7130c0dfb687cb
size 4099

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c3928c3b09855591e40160b12ba24cce9bcd042fa6af47b88670094235974df3
size 3647

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:0746a48c4146985c594ded58f22f589e4230082d97d3ae3c6b4219897b28c315
size 2976

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1dd56dfbec495e034ed2fe3fe14ce2c74ac2d13eb641b59daf0b49e75acb2597
size 2881

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:180601978bacbc685d519ab0583a14b29291b1eb387ceb65eb09d4a9d6ca6071
size 2914

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f7a25bb8d755c096fca551f0869a11daeccecf9c503043acd9111ea27043a515
size 1616

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9b18b919178557e2666a3b9ca7f94c4b376a11d567e2fce60a93e556b14f5582
size 2493

View file

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:b634c9a6176dff02fad7e91af0dc654ef9d50b00015b42b09ff292df8c7e62a0
size 3876

Some files were not shown because too many files have changed in this diff Show more