mirror of
https://github.com/unicode-org/icu.git
synced 2025-04-14 17:24:01 +00:00
Merge remote-tracking branch 'upstream/master' into unit-id
This commit is contained in:
commit
881ae36b94
3291 changed files with 35696 additions and 13921 deletions
|
@ -3,12 +3,6 @@
|
|||
# Note: The exhaustive test configuration is in a separate file
|
||||
# so that it can be run independently from the regular builds.
|
||||
#
|
||||
|
||||
resources:
|
||||
- repo: self
|
||||
lfs: true
|
||||
fetchDepth: 1
|
||||
|
||||
# Only run the exhaustive tests on the master and maint branches, and
|
||||
# also batch up any pending changes so that we will only have at most
|
||||
# one build running at a given time (since they take a long time).
|
||||
|
@ -17,7 +11,7 @@ trigger:
|
|||
branches:
|
||||
include:
|
||||
- master
|
||||
- maint/*
|
||||
- maint/maint-*
|
||||
|
||||
jobs:
|
||||
#-------------------------------------------------------------------------
|
||||
|
@ -30,15 +24,19 @@ jobs:
|
|||
vmImage: 'Ubuntu 16.04'
|
||||
demands: ant
|
||||
steps:
|
||||
- checkout: self
|
||||
lfs: true
|
||||
fetchDepth: 1
|
||||
- script: |
|
||||
echo "Building ICU4J" && cd icu4j && ant init && ant exhaustiveCheck
|
||||
displayName: 'Build and Exhaustive Tests'
|
||||
env:
|
||||
BUILD: ICU4J
|
||||
- script: |
|
||||
cat `find out/junit-results -name "*.txt" -exec grep -l FAILED {} \;`
|
||||
[ -d icu4j/out/junit-results ] && cd icu4j && cat `find out/junit-results -name "*.txt" -exec grep -l FAILED {} \;`
|
||||
condition: failed() # only run if the build fails.
|
||||
displayName: 'List failures (if any)'
|
||||
timeoutInMinutes: 2
|
||||
#-------------------------------------------------------------------------
|
||||
# Note: The exhaustive tests take roughly 65 mins to complete on the
|
||||
# Azure VMs.
|
||||
|
@ -48,6 +46,9 @@ jobs:
|
|||
pool:
|
||||
vmImage: 'Ubuntu 16.04'
|
||||
steps:
|
||||
- checkout: self
|
||||
lfs: true
|
||||
fetchDepth: 1
|
||||
- script: |
|
||||
cd icu4c/source && ./runConfigureICU Linux && make -j2
|
||||
displayName: 'Build'
|
||||
|
|
|
@ -1,10 +1,5 @@
|
|||
# Azure Pipelines (VSTS) configuration for CI builds for ICU.
|
||||
|
||||
resources:
|
||||
- repo: self
|
||||
lfs: true
|
||||
fetchDepth: 1
|
||||
|
||||
jobs:
|
||||
#-------------------------------------------------------------------------
|
||||
- job: ICU4J_OpenJDK_Ubuntu_1604
|
||||
|
@ -14,13 +9,16 @@ jobs:
|
|||
vmImage: 'Ubuntu 16.04'
|
||||
demands: ant
|
||||
steps:
|
||||
- checkout: self
|
||||
lfs: true
|
||||
fetchDepth: 1
|
||||
- script: |
|
||||
echo "Building ICU4J" && cd icu4j && ant init && ant check
|
||||
displayName: 'Build and Test'
|
||||
env:
|
||||
BUILD: ICU4J
|
||||
- script: |
|
||||
cd icu4j && cat `find out/junit-results -name "*.txt" -exec grep -l FAILED {} \;`
|
||||
[ -d icu4j/out/junit-results ] && cd icu4j && cat `find out/junit-results -name "*.txt" -exec grep -l FAILED {} \;`
|
||||
condition: failed() # only run if the build fails.
|
||||
displayName: 'List failures (if any)'
|
||||
#-------------------------------------------------------------------------
|
||||
|
@ -30,6 +28,9 @@ jobs:
|
|||
pool:
|
||||
vmImage: 'Ubuntu 16.04'
|
||||
steps:
|
||||
- checkout: self
|
||||
lfs: true
|
||||
fetchDepth: 1
|
||||
- script: |
|
||||
cd icu4c/source && ./runConfigureICU Linux && make -j2 check
|
||||
displayName: 'Build and Test'
|
||||
|
@ -43,6 +44,9 @@ jobs:
|
|||
pool:
|
||||
vmImage: 'Ubuntu 16.04'
|
||||
steps:
|
||||
- checkout: self
|
||||
lfs: true
|
||||
fetchDepth: 1
|
||||
- script: |
|
||||
export CPPFLAGS="-Werror -Wall -Wextra -Wextra-semi -Wundef -Wnon-virtual-dtor" && cd icu4c/source && ./runConfigureICU Linux && make -j2 tests
|
||||
displayName: 'Build only (WarningsAsErrors)'
|
||||
|
@ -56,6 +60,9 @@ jobs:
|
|||
pool:
|
||||
vmImage: 'Ubuntu 16.04'
|
||||
steps:
|
||||
- checkout: self
|
||||
lfs: true
|
||||
fetchDepth: 1
|
||||
- script: |
|
||||
cd icu4c/source && \
|
||||
ICU_DATA_FILTER_FILE=../../.ci-builds/data-filter.json ./runConfigureICU Linux && \
|
||||
|
@ -77,6 +84,9 @@ jobs:
|
|||
- visualstudio
|
||||
- Cmd
|
||||
steps:
|
||||
- checkout: self
|
||||
lfs: true
|
||||
fetchDepth: 1
|
||||
- task: VSBuild@1
|
||||
displayName: 'Build Solution'
|
||||
inputs:
|
||||
|
@ -111,6 +121,9 @@ jobs:
|
|||
- visualstudio
|
||||
- Cmd
|
||||
steps:
|
||||
- checkout: self
|
||||
lfs: true
|
||||
fetchDepth: 1
|
||||
- task: VSBuild@1
|
||||
displayName: 'Build Solution'
|
||||
inputs:
|
||||
|
@ -140,6 +153,9 @@ jobs:
|
|||
- visualstudio
|
||||
- Cmd
|
||||
steps:
|
||||
- checkout: self
|
||||
lfs: true
|
||||
fetchDepth: 1
|
||||
- task: VSBuild@1
|
||||
displayName: 'Build Solution'
|
||||
inputs:
|
||||
|
@ -181,6 +197,9 @@ jobs:
|
|||
- visualstudio
|
||||
- Cmd
|
||||
steps:
|
||||
- checkout: self
|
||||
lfs: true
|
||||
fetchDepth: 1
|
||||
- powershell: |
|
||||
$filterPath = $Env:BUILD_SOURCESDIRECTORY + "\.ci-builds\data-filter.json"
|
||||
$vstsCommandString = "vso[task.setvariable variable=ICU_DATA_FILTER_FILE]" + $filterPath
|
||||
|
@ -203,6 +222,9 @@ jobs:
|
|||
- visualstudio
|
||||
- Cmd
|
||||
steps:
|
||||
- checkout: self
|
||||
lfs: true
|
||||
fetchDepth: 1
|
||||
- task: VSBuild@1
|
||||
displayName: 'Build Solution'
|
||||
inputs:
|
||||
|
@ -215,41 +237,6 @@ jobs:
|
|||
filename: icu4c/source/allinone/icucheck.bat
|
||||
arguments: 'x86 Debug'
|
||||
#-------------------------------------------------------------------------
|
||||
# Using a manual install of Python 3, until the vs2015 image has it
|
||||
# by default.
|
||||
#
|
||||
- job: ICU4C_MSVC_x64_Release_VS2015
|
||||
displayName: 'C: MSVC 64-bit Release (VS 2015)'
|
||||
timeoutInMinutes: 30
|
||||
pool:
|
||||
vmImage: 'vs2015-win2012r2'
|
||||
demands:
|
||||
- msbuild
|
||||
- visualstudio
|
||||
- Cmd
|
||||
steps:
|
||||
- powershell: 'Invoke-WebRequest https://www.python.org/ftp/python/3.7.2/python-3.7.2-amd64-webinstall.exe -OutFile c:\py3-setup.exe'
|
||||
- script: |
|
||||
c:\py3-setup.exe /quiet PrependPath=1 InstallAllUsers=1 Include_launcher=1 InstallLauncherAllUsers=1 Include_test=0 Include_doc=0 Include_dev=0 Include_debug=0 Include_tcltk=0 TargetDir=c:\py3
|
||||
- script: |
|
||||
@echo ##vso[task.prependpath]C:\py3
|
||||
@echo ##vso[task.prependpath]C:\py3\Scripts
|
||||
- script: |
|
||||
python --version
|
||||
py -3 --version
|
||||
- task: VSBuild@1
|
||||
displayName: 'Build Solution'
|
||||
inputs:
|
||||
solution: icu4c/source/allinone/allinone.sln
|
||||
platform: x64
|
||||
configuration: Release
|
||||
msbuildArgs: '/p:SkipUWP=true'
|
||||
- task: BatchScript@1
|
||||
displayName: 'Run Tests (icucheck.bat)'
|
||||
inputs:
|
||||
filename: icu4c/source/allinone/icucheck.bat
|
||||
arguments: 'x64 Release'
|
||||
#-------------------------------------------------------------------------
|
||||
- job: ICU4C_MSYS2_GCC_x86_64_Release
|
||||
displayName: 'C: MSYS2 GCC x86_64 Release'
|
||||
timeoutInMinutes: 45
|
||||
|
@ -258,6 +245,9 @@ jobs:
|
|||
demands:
|
||||
- Cmd
|
||||
steps:
|
||||
- checkout: self
|
||||
lfs: true
|
||||
fetchDepth: 1
|
||||
- script: |
|
||||
choco install -y msys2
|
||||
rem refreshenv
|
||||
|
@ -288,6 +278,9 @@ jobs:
|
|||
pool:
|
||||
vmImage: 'macOS-10.14'
|
||||
steps:
|
||||
- checkout: self
|
||||
lfs: true
|
||||
fetchDepth: 1
|
||||
- script: |
|
||||
export CPPFLAGS="-Werror -Wall -Wextra -Wextra-semi -Wundef -Wnon-virtual-dtor" && cd icu4c/source && ./runConfigureICU MacOSX && make -j2 tests
|
||||
displayName: 'Build only (WarningsAsErrors)'
|
||||
|
|
73
.ci-builds/.azure-valgrind.yml
Normal file
73
.ci-builds/.azure-valgrind.yml
Normal file
|
@ -0,0 +1,73 @@
|
|||
# Azure Pipelines configuration for Valgrind for ICU4C.
|
||||
#
|
||||
# Note: The valgrind test configuration is in a separate file
|
||||
# so that it can be run independently from the regular builds.
|
||||
#
|
||||
# The Ubuntu images don't have valgrind installed by default, so we need
|
||||
# install it first.
|
||||
#
|
||||
# Only run valgrind on the master and maint branches, and
|
||||
# batch up any pending changes so that we will only have at most
|
||||
# one build running at a given time (since it takes time).
|
||||
trigger:
|
||||
batch: true
|
||||
branches:
|
||||
include:
|
||||
- master
|
||||
- maint/maint-*
|
||||
paths:
|
||||
include:
|
||||
- '*'
|
||||
exclude:
|
||||
- docs/*
|
||||
- icu4j/*
|
||||
- tools/*
|
||||
- vendor/*
|
||||
- .appveyor.xml
|
||||
- .cpyskip.txt
|
||||
- .travis.yml
|
||||
- KEYS
|
||||
- README.md
|
||||
|
||||
jobs:
|
||||
#-------------------------------------------------------------------------
|
||||
- job: ICU4C_Clang_Valgrind_Ubuntu_1604
|
||||
displayName: 'C: Linux Clang Valgrind (Ubuntu 16.04)'
|
||||
timeoutInMinutes: 60
|
||||
pool:
|
||||
vmImage: 'Ubuntu 16.04'
|
||||
steps:
|
||||
- checkout: self
|
||||
lfs: true
|
||||
fetchDepth: 1
|
||||
- script: |
|
||||
set -ex
|
||||
sudo apt -y update
|
||||
sudo apt install -y valgrind
|
||||
displayName: 'Install valgrind'
|
||||
timeoutInMinutes: 5
|
||||
- script: |
|
||||
cd icu4c/source && ./runConfigureICU --enable-debug Linux --disable-renaming --disable-layout --disable-layoutex && make -j2 tests
|
||||
displayName: 'Build'
|
||||
timeoutInMinutes: 10
|
||||
env:
|
||||
CC: clang
|
||||
CXX: clang++
|
||||
- script: |
|
||||
cd icu4c/source/test/intltest && LD_LIBRARY_PATH=../../lib:../../stubdata:../../tools/ctestfw:$LD_LIBRARY_PATH valgrind --tool=memcheck --error-exitcode=1 --leak-check=full --show-reachable=yes ./intltest
|
||||
displayName: 'Valgrind intltest'
|
||||
timeoutInMinutes: 45
|
||||
- script: |
|
||||
cd icu4c/source/test/cintltst && LD_LIBRARY_PATH=../../lib:../../stubdata:../../tools/ctestfw:$LD_LIBRARY_PATH valgrind --tool=memcheck --error-exitcode=1 --leak-check=full --show-reachable=yes ./cintltst
|
||||
displayName: 'Valgrind cintltst'
|
||||
timeoutInMinutes: 15
|
||||
- script: |
|
||||
cd icu4c/source/test/iotest && LD_LIBRARY_PATH=../../lib:../../stubdata:../../tools/ctestfw:$LD_LIBRARY_PATH valgrind --tool=memcheck --error-exitcode=1 --leak-check=full --show-reachable=yes ./iotest
|
||||
displayName: 'Valgrind iotest'
|
||||
timeoutInMinutes: 5
|
||||
- script: |
|
||||
cd icu4c/source/tools/icuinfo && LD_LIBRARY_PATH=../../lib:../../stubdata:../../tools/ctestfw:$LD_LIBRARY_PATH valgrind --tool=memcheck --error-exitcode=1 --leak-check=full --show-reachable=yes ./icuinfo
|
||||
displayName: 'Valgrind icuinfo'
|
||||
timeoutInMinutes: 5
|
||||
|
||||
#-------------------------------------------------------------------------
|
83
KEYS
83
KEYS
|
@ -815,3 +815,86 @@ mrLU2gvbaFZtV1HwYC3bCNqlx68rchjSQwOI5sdocwWsWbvJ28yi5I0PcBmyBa0Y
|
|||
TMuS5W4GIP4f7uR1uQ==
|
||||
=Veoq
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
pub rsa4096 2020-02-24 [SC] [caduca: 2021-02-23]
|
||||
4569BBC09DA846FC91CBD21CE1BBA44593CF2AE0
|
||||
uid [ absoluta ] Steven R. Loomis (codesign-qormi) <srloomis@us.ibm.com>
|
||||
sig 3 E1BBA44593CF2AE0 2020-02-24 Steven R. Loomis (codesign-qormi) <srloomis@us.ibm.com>
|
||||
sig 44CE7BF2825EA2CD 2020-02-28 ICU Project @IBM (International Components for Unicode Development at IBM) <icuintl@us.ibm.com>
|
||||
uid [ absoluta ] Steven R. Loomis (qormi signing key) <srl295@gmail.com>
|
||||
sig 3 E1BBA44593CF2AE0 2020-02-24 Steven R. Loomis (codesign-qormi) <srloomis@us.ibm.com>
|
||||
sig 44CE7BF2825EA2CD 2020-02-28 ICU Project @IBM (International Components for Unicode Development at IBM) <icuintl@us.ibm.com>
|
||||
sub rsa2048 2020-02-24 [E] [caduca: 2021-02-23]
|
||||
sig E1BBA44593CF2AE0 2020-02-24 Steven R. Loomis (codesign-qormi) <srloomis@us.ibm.com>
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
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
|
||||
=DEHc
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
|
|
@ -8,13 +8,14 @@ The ICU project is under the stewardship of [The Unicode Consortium](https://www
|
|||
|
||||

|
||||
|
||||
### Build Status (master branch)
|
||||
### Build Status (`master` branch)
|
||||
|
||||
Build | Status
|
||||
------|-------
|
||||
TravisCI | [](https://travis-ci.org/unicode-org/icu)
|
||||
Azure Pipelines | [](https://unicode-icu.visualstudio.com/ICU/_build/latest?definitionId=21&branchName=master)
|
||||
Azure Pipelines (Exhaustive Tests) | [](https://unicode-icu.visualstudio.com/ICU/_build/latest?definitionId=24&branchName=master)
|
||||
Azure Pipelines | [](https://unicode-icu.visualstudio.com/ICU/_build/latest?definitionId=21&branchName=master)
|
||||
Azure Pipelines (Exhaustive Tests) | [](https://unicode-icu.visualstudio.com/ICU/_build/latest?definitionId=24&branchName=master)
|
||||
Azure Pipelines (Valgrind ICU4C) | [](https://unicode-icu.visualstudio.com/ICU/_build/latest?definitionId=30&branchName=master)
|
||||
AppVeyor | [](https://ci.appveyor.com/project/unicode-org/icu)
|
||||
Fuzzing | [](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:icu)
|
||||
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
-->
|
||||
<head>
|
||||
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<title>ICU4C API Comparison: ICU 65 with ICU 66 (preview)</title>
|
||||
<title>ICU4C API Comparison: ICU 65 with ICU 66</title>
|
||||
<link type="text/css" href="icu4c.css" rel="stylesheet">
|
||||
</head>
|
||||
<body>
|
||||
<a name="#_top"></a>
|
||||
<h1>ICU4C API Comparison: ICU 65 with ICU 66 (preview)</h1>
|
||||
<h1>ICU4C API Comparison: ICU 65 with ICU 66</h1>
|
||||
<div id="toc">
|
||||
<ul>
|
||||
<li>
|
||||
|
@ -1501,7 +1501,7 @@
|
|||
<a href="#_top">(jump back to top)</a>
|
||||
<hr>
|
||||
<p>
|
||||
<i><font size="-1">Contents generated by StableAPI tool on Tue Dec 03 15:47:14 PST 2019<br>
|
||||
<i><font size="-1">Contents generated by StableAPI tool on Wed Feb 19 10:40:34 PST 2020<br>
|
||||
Copyright © 2017 and later: Unicode, Inc. and others.<br>
|
||||
License & terms of use: http://www.unicode.org/copyright.html
|
||||
</font></i>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
License & terms of use: http://www.unicode.org/copyright.html
|
||||
-->
|
||||
|
||||
# ICU4C API Comparison: ICU 65 with ICU 66 (preview)
|
||||
# ICU4C API Comparison: ICU 65 with ICU 66
|
||||
|
||||
> _Note_ Markdown format of this document is new for ICU 65.
|
||||
|
||||
|
@ -520,7 +520,7 @@ This section shows cases where the signature was "simplified" for the sake of co
|
|||
|
||||
## Colophon
|
||||
|
||||
Contents generated by StableAPI tool on Tue Dec 03 15:19:41 PST 2019
|
||||
Contents generated by StableAPI tool on Wed Feb 19 10:40:39 PST 2020
|
||||
|
||||
Copyright © 2019 and later: Unicode, Inc. and others.
|
||||
License & terms of use: http://www.unicode.org/copyright.html
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later)
|
||||
|
||||
Copyright © 1991-2019 Unicode, Inc. All rights reserved.
|
||||
Copyright © 1991-2020 Unicode, Inc. All rights reserved.
|
||||
Distributed under the Terms of Use in https://www.unicode.org/copyright.html.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
|
||||
<html lang="en-US" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US">
|
||||
<head>
|
||||
<title>ReadMe for ICU 66.0.1</title>
|
||||
<title>ReadMe for ICU 66.1</title>
|
||||
<meta name="COPYRIGHT" content=
|
||||
"Copyright (C) 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html"/>
|
||||
<!-- meta name="COPYRIGHT" content=
|
||||
|
@ -24,7 +24,7 @@
|
|||
-->
|
||||
|
||||
<!-- <body> -->
|
||||
<body class="milestone">
|
||||
<body class="rc">
|
||||
<p class="only-draft"><b>Note:</b> This is a draft readme.</p>
|
||||
|
||||
<h1>
|
||||
|
@ -33,7 +33,7 @@
|
|||
<span class="only-rc">Release Candidate</span>
|
||||
<!-- <span class="only-milestone">(Milestone Release)</span> -->
|
||||
<span class="only-milestone">(Preview Release)</span>
|
||||
<abbr title="International Components for Unicode">ICU</abbr> 66.0.1 ReadMe
|
||||
<abbr title="International Components for Unicode">ICU</abbr> 66.1 ReadMe
|
||||
</h1>
|
||||
|
||||
<!-- Most of the time we shouldn't need to comment/uncomment this paragraph, just change the body class -->
|
||||
|
@ -47,7 +47,7 @@
|
|||
<p class="note only-rc">This is a release candidate version of ICU4C.
|
||||
It is not recommended for production use.</p>
|
||||
|
||||
<p>Last updated: 2019-Nov-27<br/>
|
||||
<p>Last updated: 2020-Feb-12<br/>
|
||||
Copyright © 2016 and later: Unicode, Inc. and others. License & terms of use:
|
||||
<a href="http://www.unicode.org/copyright.html">http://www.unicode.org/copyright.html</a><br/>
|
||||
Copyright © 1997-2016 International Business Machines Corporation and others.
|
||||
|
|
|
@ -38,6 +38,7 @@
|
|||
#include "uresimp.h"
|
||||
#include "uassert.h"
|
||||
#include "ubrkimpl.h"
|
||||
#include "utracimp.h"
|
||||
#include "charstr.h"
|
||||
|
||||
// *****************************************************************************
|
||||
|
@ -412,14 +413,23 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status)
|
|||
BreakIterator *result = NULL;
|
||||
switch (kind) {
|
||||
case UBRK_CHARACTER:
|
||||
result = BreakIterator::buildInstance(loc, "grapheme", status);
|
||||
{
|
||||
UTRACE_ENTRY(UTRACE_UBRK_CREATE_CHARACTER);
|
||||
result = BreakIterator::buildInstance(loc, "grapheme", status);
|
||||
UTRACE_EXIT_STATUS(status);
|
||||
}
|
||||
break;
|
||||
case UBRK_WORD:
|
||||
result = BreakIterator::buildInstance(loc, "word", status);
|
||||
{
|
||||
UTRACE_ENTRY(UTRACE_UBRK_CREATE_WORD);
|
||||
result = BreakIterator::buildInstance(loc, "word", status);
|
||||
UTRACE_EXIT_STATUS(status);
|
||||
}
|
||||
break;
|
||||
case UBRK_LINE:
|
||||
uprv_strcpy(lbType, "line");
|
||||
{
|
||||
UTRACE_ENTRY(UTRACE_UBRK_CREATE_LINE);
|
||||
uprv_strcpy(lbType, "line");
|
||||
char lbKeyValue[kKeyValueLenMax] = {0};
|
||||
UErrorCode kvStatus = U_ZERO_ERROR;
|
||||
int32_t kLen = loc.getKeywordValue("lb", lbKeyValue, kKeyValueLenMax, kvStatus);
|
||||
|
@ -427,13 +437,17 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status)
|
|||
uprv_strcat(lbType, "_");
|
||||
uprv_strcat(lbType, lbKeyValue);
|
||||
}
|
||||
result = BreakIterator::buildInstance(loc, lbType, status);
|
||||
|
||||
UTRACE_DATA1(UTRACE_INFO, "lb=%s", lbKeyValue);
|
||||
UTRACE_EXIT_STATUS(status);
|
||||
}
|
||||
result = BreakIterator::buildInstance(loc, lbType, status);
|
||||
break;
|
||||
case UBRK_SENTENCE:
|
||||
result = BreakIterator::buildInstance(loc, "sentence", status);
|
||||
#if !UCONFIG_NO_FILTERED_BREAK_ITERATION
|
||||
{
|
||||
UTRACE_ENTRY(UTRACE_UBRK_CREATE_SENTENCE);
|
||||
result = BreakIterator::buildInstance(loc, "sentence", status);
|
||||
#if !UCONFIG_NO_FILTERED_BREAK_ITERATION
|
||||
char ssKeyValue[kKeyValueLenMax] = {0};
|
||||
UErrorCode kvStatus = U_ZERO_ERROR;
|
||||
int32_t kLen = loc.getKeywordValue("ss", ssKeyValue, kKeyValueLenMax, kvStatus);
|
||||
|
@ -444,11 +458,16 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status)
|
|||
delete fbiBuilder;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
UTRACE_EXIT_STATUS(status);
|
||||
}
|
||||
break;
|
||||
case UBRK_TITLE:
|
||||
result = BreakIterator::buildInstance(loc, "title", status);
|
||||
{
|
||||
UTRACE_ENTRY(UTRACE_UBRK_CREATE_TITLE);
|
||||
result = BreakIterator::buildInstance(loc, "title", status);
|
||||
UTRACE_EXIT_STATUS(status);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
status = U_ILLEGAL_ARGUMENT_ERROR;
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
#include "unicode/uniset.h"
|
||||
#include "unicode/chariter.h"
|
||||
#include "unicode/ubrk.h"
|
||||
#include "utracimp.h"
|
||||
#include "uvectr32.h"
|
||||
#include "uvector.h"
|
||||
#include "uassert.h"
|
||||
|
@ -194,6 +195,8 @@ ThaiBreakEngine::ThaiBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode
|
|||
: DictionaryBreakEngine(),
|
||||
fDictionary(adoptDictionary)
|
||||
{
|
||||
UTRACE_ENTRY(UTRACE_UBRK_CREATE_BREAK_ENGINE);
|
||||
UTRACE_DATA1(UTRACE_INFO, "dictbe=%s", "Thai");
|
||||
fThaiWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Thai:]&[:LineBreak=SA:]]"), status);
|
||||
if (U_SUCCESS(status)) {
|
||||
setCharacters(fThaiWordSet);
|
||||
|
@ -213,6 +216,7 @@ ThaiBreakEngine::ThaiBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode
|
|||
fEndWordSet.compact();
|
||||
fBeginWordSet.compact();
|
||||
fSuffixSet.compact();
|
||||
UTRACE_EXIT_STATUS(status);
|
||||
}
|
||||
|
||||
ThaiBreakEngine::~ThaiBreakEngine() {
|
||||
|
@ -436,6 +440,8 @@ LaoBreakEngine::LaoBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &s
|
|||
: DictionaryBreakEngine(),
|
||||
fDictionary(adoptDictionary)
|
||||
{
|
||||
UTRACE_ENTRY(UTRACE_UBRK_CREATE_BREAK_ENGINE);
|
||||
UTRACE_DATA1(UTRACE_INFO, "dictbe=%s", "Laoo");
|
||||
fLaoWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Laoo:]&[:LineBreak=SA:]]"), status);
|
||||
if (U_SUCCESS(status)) {
|
||||
setCharacters(fLaoWordSet);
|
||||
|
@ -452,6 +458,7 @@ LaoBreakEngine::LaoBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCode &s
|
|||
fMarkSet.compact();
|
||||
fEndWordSet.compact();
|
||||
fBeginWordSet.compact();
|
||||
UTRACE_EXIT_STATUS(status);
|
||||
}
|
||||
|
||||
LaoBreakEngine::~LaoBreakEngine() {
|
||||
|
@ -632,6 +639,8 @@ BurmeseBreakEngine::BurmeseBreakEngine(DictionaryMatcher *adoptDictionary, UErro
|
|||
: DictionaryBreakEngine(),
|
||||
fDictionary(adoptDictionary)
|
||||
{
|
||||
UTRACE_ENTRY(UTRACE_UBRK_CREATE_BREAK_ENGINE);
|
||||
UTRACE_DATA1(UTRACE_INFO, "dictbe=%s", "Mymr");
|
||||
fBurmeseWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Mymr:]&[:LineBreak=SA:]]"), status);
|
||||
if (U_SUCCESS(status)) {
|
||||
setCharacters(fBurmeseWordSet);
|
||||
|
@ -645,6 +654,7 @@ BurmeseBreakEngine::BurmeseBreakEngine(DictionaryMatcher *adoptDictionary, UErro
|
|||
fMarkSet.compact();
|
||||
fEndWordSet.compact();
|
||||
fBeginWordSet.compact();
|
||||
UTRACE_EXIT_STATUS(status);
|
||||
}
|
||||
|
||||
BurmeseBreakEngine::~BurmeseBreakEngine() {
|
||||
|
@ -825,6 +835,8 @@ KhmerBreakEngine::KhmerBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCod
|
|||
: DictionaryBreakEngine(),
|
||||
fDictionary(adoptDictionary)
|
||||
{
|
||||
UTRACE_ENTRY(UTRACE_UBRK_CREATE_BREAK_ENGINE);
|
||||
UTRACE_DATA1(UTRACE_INFO, "dictbe=%s", "Khmr");
|
||||
fKhmerWordSet.applyPattern(UNICODE_STRING_SIMPLE("[[:Khmr:]&[:LineBreak=SA:]]"), status);
|
||||
if (U_SUCCESS(status)) {
|
||||
setCharacters(fKhmerWordSet);
|
||||
|
@ -850,6 +862,7 @@ KhmerBreakEngine::KhmerBreakEngine(DictionaryMatcher *adoptDictionary, UErrorCod
|
|||
fEndWordSet.compact();
|
||||
fBeginWordSet.compact();
|
||||
// fSuffixSet.compact();
|
||||
UTRACE_EXIT_STATUS(status);
|
||||
}
|
||||
|
||||
KhmerBreakEngine::~KhmerBreakEngine() {
|
||||
|
@ -1045,6 +1058,8 @@ foundBest:
|
|||
static const uint32_t kuint32max = 0xFFFFFFFF;
|
||||
CjkBreakEngine::CjkBreakEngine(DictionaryMatcher *adoptDictionary, LanguageType type, UErrorCode &status)
|
||||
: DictionaryBreakEngine(), fDictionary(adoptDictionary) {
|
||||
UTRACE_ENTRY(UTRACE_UBRK_CREATE_BREAK_ENGINE);
|
||||
UTRACE_DATA1(UTRACE_INFO, "dictbe=%s", "Hani");
|
||||
// Korean dictionary only includes Hangul syllables
|
||||
fHangulWordSet.applyPattern(UNICODE_STRING_SIMPLE("[\\uac00-\\ud7a3]"), status);
|
||||
fHanWordSet.applyPattern(UNICODE_STRING_SIMPLE("[:Han:]"), status);
|
||||
|
@ -1066,6 +1081,7 @@ CjkBreakEngine::CjkBreakEngine(DictionaryMatcher *adoptDictionary, LanguageType
|
|||
setCharacters(cjSet);
|
||||
}
|
||||
}
|
||||
UTRACE_EXIT_STATUS(status);
|
||||
}
|
||||
|
||||
CjkBreakEngine::~CjkBreakEngine(){
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
#include "unicode/localematcher.h"
|
||||
#include "unicode/locid.h"
|
||||
#include "unicode/stringpiece.h"
|
||||
#include "unicode/uloc.h"
|
||||
#include "unicode/uobject.h"
|
||||
#include "cstring.h"
|
||||
#include "localeprioritylist.h"
|
||||
|
@ -20,6 +21,7 @@
|
|||
#include "lsr.h"
|
||||
#include "uassert.h"
|
||||
#include "uhash.h"
|
||||
#include "ustr_imp.h"
|
||||
#include "uvector.h"
|
||||
|
||||
#define UND_LSR LSR("und", "", "", LSR::EXPLICIT_LSR)
|
||||
|
@ -308,20 +310,22 @@ UBool compareLSRs(const UHashTok t1, const UHashTok t2) {
|
|||
return *lsr1 == *lsr2;
|
||||
}
|
||||
|
||||
bool putIfAbsent(UHashtable *lsrToIndex, const LSR &lsr, int32_t i, UErrorCode &errorCode) {
|
||||
if (U_FAILURE(errorCode)) { return false; }
|
||||
U_ASSERT(i > 0);
|
||||
int32_t index = uhash_geti(lsrToIndex, &lsr);
|
||||
if (index != 0) {
|
||||
return false;
|
||||
} else {
|
||||
uhash_puti(lsrToIndex, const_cast<LSR *>(&lsr), i, &errorCode);
|
||||
return U_SUCCESS(errorCode);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int32_t LocaleMatcher::putIfAbsent(const LSR &lsr, int32_t i, int32_t suppLength,
|
||||
UErrorCode &errorCode) {
|
||||
if (U_FAILURE(errorCode)) { return suppLength; }
|
||||
int32_t index = uhash_geti(supportedLsrToIndex, &lsr);
|
||||
if (index == 0) {
|
||||
uhash_puti(supportedLsrToIndex, const_cast<LSR *>(&lsr), i + 1, &errorCode);
|
||||
if (U_SUCCESS(errorCode)) {
|
||||
supportedLSRs[suppLength] = &lsr;
|
||||
supportedIndexes[suppLength++] = i;
|
||||
}
|
||||
}
|
||||
return suppLength;
|
||||
}
|
||||
|
||||
LocaleMatcher::LocaleMatcher(const Builder &builder, UErrorCode &errorCode) :
|
||||
likelySubtags(*XLikelySubtags::getSingleton(errorCode)),
|
||||
localeDistance(*LocaleDistance::getSingleton(errorCode)),
|
||||
|
@ -331,15 +335,27 @@ LocaleMatcher::LocaleMatcher(const Builder &builder, UErrorCode &errorCode) :
|
|||
supportedLocales(nullptr), lsrs(nullptr), supportedLocalesLength(0),
|
||||
supportedLsrToIndex(nullptr),
|
||||
supportedLSRs(nullptr), supportedIndexes(nullptr), supportedLSRsLength(0),
|
||||
ownedDefaultLocale(nullptr), defaultLocale(nullptr), defaultLocaleIndex(-1) {
|
||||
ownedDefaultLocale(nullptr), defaultLocale(nullptr) {
|
||||
if (U_FAILURE(errorCode)) { return; }
|
||||
if (thresholdDistance < 0) {
|
||||
thresholdDistance = localeDistance.getDefaultScriptDistance();
|
||||
}
|
||||
const Locale *def = builder.defaultLocale_;
|
||||
LSR builderDefaultLSR;
|
||||
const LSR *defLSR = nullptr;
|
||||
if (def != nullptr) {
|
||||
ownedDefaultLocale = def->clone();
|
||||
if (ownedDefaultLocale == nullptr) {
|
||||
errorCode = U_MEMORY_ALLOCATION_ERROR;
|
||||
return;
|
||||
}
|
||||
def = ownedDefaultLocale;
|
||||
builderDefaultLSR = getMaximalLsrOrUnd(likelySubtags, *def, errorCode);
|
||||
if (U_FAILURE(errorCode)) { return; }
|
||||
defLSR = &builderDefaultLSR;
|
||||
}
|
||||
supportedLocalesLength = builder.supportedLocales_ != nullptr ?
|
||||
builder.supportedLocales_->size() : 0;
|
||||
const Locale *def = builder.defaultLocale_;
|
||||
int32_t idef = -1;
|
||||
if (supportedLocalesLength > 0) {
|
||||
// Store the supported locales in input order,
|
||||
// so that when different types are used (e.g., language tag strings)
|
||||
|
@ -356,15 +372,6 @@ LocaleMatcher::LocaleMatcher(const Builder &builder, UErrorCode &errorCode) :
|
|||
}
|
||||
// If the constructor fails partway, we need null pointers for destructibility.
|
||||
uprv_memset(supportedLocales, 0, supportedLocalesLength * sizeof(const Locale *));
|
||||
// Also find the first supported locale whose LSR is
|
||||
// the same as that for the default locale.
|
||||
LSR builderDefaultLSR;
|
||||
const LSR *defLSR = nullptr;
|
||||
if (def != nullptr) {
|
||||
builderDefaultLSR = getMaximalLsrOrUnd(likelySubtags, *def, errorCode);
|
||||
if (U_FAILURE(errorCode)) { return; }
|
||||
defLSR = &builderDefaultLSR;
|
||||
}
|
||||
for (int32_t i = 0; i < supportedLocalesLength; ++i) {
|
||||
const Locale &locale = *static_cast<Locale *>(builder.supportedLocales_->elementAt(i));
|
||||
supportedLocales[i] = locale.clone();
|
||||
|
@ -376,31 +383,14 @@ LocaleMatcher::LocaleMatcher(const Builder &builder, UErrorCode &errorCode) :
|
|||
LSR &lsr = lsrs[i] = getMaximalLsrOrUnd(likelySubtags, supportedLocale, errorCode);
|
||||
lsr.setHashCode();
|
||||
if (U_FAILURE(errorCode)) { return; }
|
||||
if (idef < 0 && defLSR != nullptr && lsr == *defLSR) {
|
||||
idef = i;
|
||||
defLSR = &lsr; // owned pointer to put into supportedLsrToIndex
|
||||
if (*def == supportedLocale) {
|
||||
def = &supportedLocale; // owned pointer to keep
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// We need an unordered map from LSR to first supported locale with that LSR,
|
||||
// and an ordered list of (LSR, supported index).
|
||||
// We insert the supported locales in the following order:
|
||||
// and an ordered list of (LSR, supported index) for
|
||||
// the supported locales in the following order:
|
||||
// 1. Default locale, if it is supported.
|
||||
// 2. Priority locales (aka "paradigm locales") in builder order.
|
||||
// 3. Remaining locales in builder order.
|
||||
// In Java, we use a LinkedHashMap for both map & ordered lists.
|
||||
// In C++, we use separate structures.
|
||||
//
|
||||
// We allocate arrays of LSRs and indexes,
|
||||
// with as many slots as supported locales, for simplicity.
|
||||
// We write the default and paradigm LSRs starting from the front of the arrays,
|
||||
// and others starting from the back.
|
||||
// At the end we reverse the non-paradigm LSRs.
|
||||
// We end up wasting as many array slots as there are duplicate supported LSRs,
|
||||
// but the amount of wasted space is small as long as there are few duplicates.
|
||||
supportedLsrToIndex = uhash_openSize(hashLSR, compareLSRs, uhash_compareLong,
|
||||
supportedLocalesLength, &errorCode);
|
||||
if (U_FAILURE(errorCode)) { return; }
|
||||
|
@ -412,79 +402,53 @@ LocaleMatcher::LocaleMatcher(const Builder &builder, UErrorCode &errorCode) :
|
|||
errorCode = U_MEMORY_ALLOCATION_ERROR;
|
||||
return;
|
||||
}
|
||||
int32_t paradigmIndex = 0;
|
||||
int32_t otherIndex = supportedLocalesLength;
|
||||
if (idef >= 0) {
|
||||
uhash_puti(supportedLsrToIndex, const_cast<LSR *>(defLSR), idef + 1, &errorCode);
|
||||
supportedLSRs[0] = defLSR;
|
||||
supportedIndexes[0] = idef;
|
||||
paradigmIndex = 1;
|
||||
int32_t suppLength = 0;
|
||||
// Determine insertion order.
|
||||
// Add locales immediately that are equivalent to the default.
|
||||
MaybeStackArray<int8_t, 100> order(supportedLocalesLength);
|
||||
if (order.getAlias() == nullptr) {
|
||||
errorCode = U_MEMORY_ALLOCATION_ERROR;
|
||||
return;
|
||||
}
|
||||
int32_t numParadigms = 0;
|
||||
for (int32_t i = 0; i < supportedLocalesLength; ++i) {
|
||||
if (i == idef) { continue; }
|
||||
const Locale &locale = *supportedLocales[i];
|
||||
const LSR &lsr = lsrs[i];
|
||||
if (defLSR == nullptr) {
|
||||
U_ASSERT(i == 0);
|
||||
def = &locale;
|
||||
defLSR = &lsr;
|
||||
idef = 0;
|
||||
uhash_puti(supportedLsrToIndex, const_cast<LSR *>(&lsr), 0 + 1, &errorCode);
|
||||
supportedLSRs[0] = &lsr;
|
||||
supportedIndexes[0] = 0;
|
||||
paradigmIndex = 1;
|
||||
} else if (idef >= 0 && lsr == *defLSR) {
|
||||
// lsr == *defLSR means that this supported locale is
|
||||
// a duplicate of the default locale.
|
||||
// Either an explicit default locale is supported, and we added it before the loop,
|
||||
// or there is no explicit default locale, and this is
|
||||
// a duplicate of the first supported locale.
|
||||
// In both cases, idef >= 0 now, so otherwise we can skip the comparison.
|
||||
// For a duplicate, putIfAbsent() is a no-op, so nothing to do.
|
||||
suppLength = putIfAbsent(lsr, 0, suppLength, errorCode);
|
||||
} else if (lsr.isEquivalentTo(*defLSR)) {
|
||||
suppLength = putIfAbsent(lsr, i, suppLength, errorCode);
|
||||
} else if (localeDistance.isParadigmLSR(lsr)) {
|
||||
order[i] = 2;
|
||||
++numParadigms;
|
||||
} else {
|
||||
if (putIfAbsent(supportedLsrToIndex, lsr, i + 1, errorCode)) {
|
||||
if (localeDistance.isParadigmLSR(lsr)) {
|
||||
supportedLSRs[paradigmIndex] = &lsr;
|
||||
supportedIndexes[paradigmIndex++] = i;
|
||||
} else {
|
||||
supportedLSRs[--otherIndex] = &lsr;
|
||||
supportedIndexes[otherIndex] = i;
|
||||
}
|
||||
}
|
||||
order[i] = 3;
|
||||
}
|
||||
if (U_FAILURE(errorCode)) { return; }
|
||||
}
|
||||
// Reverse the non-paradigm LSRs to be in order, right after the paradigm LSRs.
|
||||
// First fill the unused slots between paradigm LSRs and other LSRs.
|
||||
// This gap is as large as the number of locales with duplicate LSRs.
|
||||
int32_t i = paradigmIndex;
|
||||
int32_t j = supportedLocalesLength - 1;
|
||||
while (i < otherIndex && otherIndex <= j) {
|
||||
supportedLSRs[i] = supportedLSRs[j];
|
||||
supportedIndexes[i++] = supportedIndexes[j--];
|
||||
// Add supported paradigm locales.
|
||||
int32_t paradigmLimit = suppLength + numParadigms;
|
||||
for (int32_t i = 0; i < supportedLocalesLength && suppLength < paradigmLimit; ++i) {
|
||||
if (order[i] == 2) {
|
||||
suppLength = putIfAbsent(lsrs[i], i, suppLength, errorCode);
|
||||
}
|
||||
}
|
||||
// Swap remaining non-paradigm LSRs in place.
|
||||
while (i < j) {
|
||||
const LSR *tempLSR = supportedLSRs[i];
|
||||
supportedLSRs[i] = supportedLSRs[j];
|
||||
supportedLSRs[j] = tempLSR;
|
||||
int32_t tempIndex = supportedIndexes[i];
|
||||
supportedIndexes[i++] = supportedIndexes[j];
|
||||
supportedIndexes[j--] = tempIndex;
|
||||
// Add remaining supported locales.
|
||||
for (int32_t i = 0; i < supportedLocalesLength; ++i) {
|
||||
if (order[i] == 3) {
|
||||
suppLength = putIfAbsent(lsrs[i], i, suppLength, errorCode);
|
||||
}
|
||||
}
|
||||
supportedLSRsLength = supportedLocalesLength - (otherIndex - paradigmIndex);
|
||||
supportedLSRsLength = suppLength;
|
||||
// If supportedLSRsLength < supportedLocalesLength then
|
||||
// we waste as many array slots as there are duplicate supported LSRs,
|
||||
// but the amount of wasted space is small as long as there are few duplicates.
|
||||
}
|
||||
|
||||
if (def != nullptr && (idef < 0 || def != supportedLocales[idef])) {
|
||||
ownedDefaultLocale = def->clone();
|
||||
if (ownedDefaultLocale == nullptr) {
|
||||
errorCode = U_MEMORY_ALLOCATION_ERROR;
|
||||
return;
|
||||
}
|
||||
def = ownedDefaultLocale;
|
||||
}
|
||||
defaultLocale = def;
|
||||
defaultLocaleIndex = idef;
|
||||
|
||||
if (builder.demotion_ == ULOCMATCH_DEMOTION_REGION) {
|
||||
demotionPerDesiredLocale = localeDistance.getDefaultDemotionPerDesiredLocale();
|
||||
|
@ -503,8 +467,7 @@ LocaleMatcher::LocaleMatcher(LocaleMatcher &&src) U_NOEXCEPT :
|
|||
supportedLSRs(src.supportedLSRs),
|
||||
supportedIndexes(src.supportedIndexes),
|
||||
supportedLSRsLength(src.supportedLSRsLength),
|
||||
ownedDefaultLocale(src.ownedDefaultLocale), defaultLocale(src.defaultLocale),
|
||||
defaultLocaleIndex(src.defaultLocaleIndex) {
|
||||
ownedDefaultLocale(src.ownedDefaultLocale), defaultLocale(src.defaultLocale) {
|
||||
src.supportedLocales = nullptr;
|
||||
src.lsrs = nullptr;
|
||||
src.supportedLocalesLength = 0;
|
||||
|
@ -514,7 +477,6 @@ LocaleMatcher::LocaleMatcher(LocaleMatcher &&src) U_NOEXCEPT :
|
|||
src.supportedLSRsLength = 0;
|
||||
src.ownedDefaultLocale = nullptr;
|
||||
src.defaultLocale = nullptr;
|
||||
src.defaultLocaleIndex = -1;
|
||||
}
|
||||
|
||||
LocaleMatcher::~LocaleMatcher() {
|
||||
|
@ -544,7 +506,6 @@ LocaleMatcher &LocaleMatcher::operator=(LocaleMatcher &&src) U_NOEXCEPT {
|
|||
supportedLSRsLength = src.supportedLSRsLength;
|
||||
ownedDefaultLocale = src.ownedDefaultLocale;
|
||||
defaultLocale = src.defaultLocale;
|
||||
defaultLocaleIndex = src.defaultLocaleIndex;
|
||||
|
||||
src.supportedLocales = nullptr;
|
||||
src.lsrs = nullptr;
|
||||
|
@ -555,7 +516,6 @@ LocaleMatcher &LocaleMatcher::operator=(LocaleMatcher &&src) U_NOEXCEPT {
|
|||
src.supportedLSRsLength = 0;
|
||||
src.ownedDefaultLocale = nullptr;
|
||||
src.defaultLocale = nullptr;
|
||||
src.defaultLocaleIndex = -1;
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
@ -642,13 +602,13 @@ const Locale *LocaleMatcher::getBestMatchForListString(
|
|||
LocaleMatcher::Result LocaleMatcher::getBestMatchResult(
|
||||
const Locale &desiredLocale, UErrorCode &errorCode) const {
|
||||
if (U_FAILURE(errorCode)) {
|
||||
return Result(nullptr, defaultLocale, -1, defaultLocaleIndex, FALSE);
|
||||
return Result(nullptr, defaultLocale, -1, -1, FALSE);
|
||||
}
|
||||
int32_t suppIndex = getBestSuppIndex(
|
||||
getMaximalLsrOrUnd(likelySubtags, desiredLocale, errorCode),
|
||||
nullptr, errorCode);
|
||||
if (U_FAILURE(errorCode) || suppIndex < 0) {
|
||||
return Result(nullptr, defaultLocale, -1, defaultLocaleIndex, FALSE);
|
||||
return Result(nullptr, defaultLocale, -1, -1, FALSE);
|
||||
} else {
|
||||
return Result(&desiredLocale, supportedLocales[suppIndex], 0, suppIndex, FALSE);
|
||||
}
|
||||
|
@ -657,12 +617,12 @@ LocaleMatcher::Result LocaleMatcher::getBestMatchResult(
|
|||
LocaleMatcher::Result LocaleMatcher::getBestMatchResult(
|
||||
Locale::Iterator &desiredLocales, UErrorCode &errorCode) const {
|
||||
if (U_FAILURE(errorCode) || !desiredLocales.hasNext()) {
|
||||
return Result(nullptr, defaultLocale, -1, defaultLocaleIndex, FALSE);
|
||||
return Result(nullptr, defaultLocale, -1, -1, FALSE);
|
||||
}
|
||||
LocaleLsrIterator lsrIter(likelySubtags, desiredLocales, ULOCMATCH_TEMPORARY_LOCALES);
|
||||
int32_t suppIndex = getBestSuppIndex(lsrIter.next(errorCode), &lsrIter, errorCode);
|
||||
if (U_FAILURE(errorCode) || suppIndex < 0) {
|
||||
return Result(nullptr, defaultLocale, -1, defaultLocaleIndex, FALSE);
|
||||
return Result(nullptr, defaultLocale, -1, -1, FALSE);
|
||||
} else {
|
||||
return Result(lsrIter.orphanRemembered(), supportedLocales[suppIndex],
|
||||
lsrIter.getBestDesiredIndex(), suppIndex, TRUE);
|
||||
|
@ -696,8 +656,7 @@ int32_t LocaleMatcher::getBestSuppIndex(LSR desiredLSR, LocaleLsrIterator *remai
|
|||
remainingIter->rememberCurrent(desiredIndex, errorCode);
|
||||
if (U_FAILURE(errorCode)) { return -1; }
|
||||
}
|
||||
bestSupportedLsrIndex = bestIndexAndDistance >= 0 ?
|
||||
LocaleDistance::getIndex(bestIndexAndDistance) : -1;
|
||||
bestSupportedLsrIndex = LocaleDistance::getIndex(bestIndexAndDistance);
|
||||
}
|
||||
if ((bestShiftedDistance -= LocaleDistance::shiftDistance(demotionPerDesiredLocale)) <= 0) {
|
||||
break;
|
||||
|
@ -731,4 +690,97 @@ double LocaleMatcher::internalMatch(const Locale &desired, const Locale &support
|
|||
|
||||
U_NAMESPACE_END
|
||||
|
||||
// uloc_acceptLanguage() --------------------------------------------------- ***
|
||||
|
||||
U_NAMESPACE_USE
|
||||
|
||||
namespace {
|
||||
|
||||
class LocaleFromTag {
|
||||
public:
|
||||
LocaleFromTag() : locale(Locale::getRoot()) {}
|
||||
const Locale &operator()(const char *tag) { return locale = Locale(tag); }
|
||||
|
||||
private:
|
||||
// Store the locale in the converter, rather than return a reference to a temporary,
|
||||
// or a value which could go out of scope with the caller's reference to it.
|
||||
Locale locale;
|
||||
};
|
||||
|
||||
int32_t acceptLanguage(UEnumeration &supportedLocales, Locale::Iterator &desiredLocales,
|
||||
char *dest, int32_t capacity, UAcceptResult *acceptResult,
|
||||
UErrorCode &errorCode) {
|
||||
if (U_FAILURE(errorCode)) { return 0; }
|
||||
LocaleMatcher::Builder builder;
|
||||
const char *locString;
|
||||
while ((locString = uenum_next(&supportedLocales, nullptr, &errorCode)) != nullptr) {
|
||||
Locale loc(locString);
|
||||
if (loc.isBogus()) {
|
||||
errorCode = U_ILLEGAL_ARGUMENT_ERROR;
|
||||
return 0;
|
||||
}
|
||||
builder.addSupportedLocale(loc);
|
||||
}
|
||||
LocaleMatcher matcher = builder.build(errorCode);
|
||||
LocaleMatcher::Result result = matcher.getBestMatchResult(desiredLocales, errorCode);
|
||||
if (U_FAILURE(errorCode)) { return 0; }
|
||||
if (result.getDesiredIndex() >= 0) {
|
||||
if (acceptResult != nullptr) {
|
||||
*acceptResult = *result.getDesiredLocale() == *result.getSupportedLocale() ?
|
||||
ULOC_ACCEPT_VALID : ULOC_ACCEPT_FALLBACK;
|
||||
}
|
||||
const char *bestStr = result.getSupportedLocale()->getName();
|
||||
int32_t bestLength = (int32_t)uprv_strlen(bestStr);
|
||||
if (bestLength <= capacity) {
|
||||
uprv_memcpy(dest, bestStr, bestLength);
|
||||
}
|
||||
return u_terminateChars(dest, capacity, bestLength, &errorCode);
|
||||
} else {
|
||||
if (acceptResult != nullptr) {
|
||||
*acceptResult = ULOC_ACCEPT_FAILED;
|
||||
}
|
||||
return u_terminateChars(dest, capacity, 0, &errorCode);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
U_CAPI int32_t U_EXPORT2
|
||||
uloc_acceptLanguage(char *result, int32_t resultAvailable,
|
||||
UAcceptResult *outResult,
|
||||
const char **acceptList, int32_t acceptListCount,
|
||||
UEnumeration *availableLocales,
|
||||
UErrorCode *status) {
|
||||
if (U_FAILURE(*status)) { return 0; }
|
||||
if ((result == nullptr ? resultAvailable != 0 : resultAvailable < 0) ||
|
||||
(acceptList == nullptr ? acceptListCount != 0 : acceptListCount < 0) ||
|
||||
availableLocales == nullptr) {
|
||||
*status = U_ILLEGAL_ARGUMENT_ERROR;
|
||||
return 0;
|
||||
}
|
||||
LocaleFromTag converter;
|
||||
Locale::ConvertingIterator<const char **, LocaleFromTag> desiredLocales(
|
||||
acceptList, acceptList + acceptListCount, converter);
|
||||
return acceptLanguage(*availableLocales, desiredLocales,
|
||||
result, resultAvailable, outResult, *status);
|
||||
}
|
||||
|
||||
U_CAPI int32_t U_EXPORT2
|
||||
uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable,
|
||||
UAcceptResult *outResult,
|
||||
const char *httpAcceptLanguage,
|
||||
UEnumeration *availableLocales,
|
||||
UErrorCode *status) {
|
||||
if (U_FAILURE(*status)) { return 0; }
|
||||
if ((result == nullptr ? resultAvailable != 0 : resultAvailable < 0) ||
|
||||
httpAcceptLanguage == nullptr || availableLocales == nullptr) {
|
||||
*status = U_ILLEGAL_ARGUMENT_ERROR;
|
||||
return 0;
|
||||
}
|
||||
LocalePriorityList list(httpAcceptLanguage, *status);
|
||||
LocalePriorityList::Iterator desiredLocales = list.iterator();
|
||||
return acceptLanguage(*availableLocales, desiredLocales,
|
||||
result, resultAvailable, outResult, *status);
|
||||
}
|
||||
|
||||
#endif // __LOCMATCHER_H__
|
||||
|
|
|
@ -133,7 +133,7 @@ LocalePriorityList::LocalePriorityList(StringPiece s, UErrorCode &errorCode) {
|
|||
if (U_FAILURE(errorCode)) { return; }
|
||||
Locale locale = Locale(tag.data());
|
||||
if (locale.isBogus()) {
|
||||
errorCode = U_MEMORY_ALLOCATION_ERROR;
|
||||
errorCode = U_ILLEGAL_ARGUMENT_ERROR;
|
||||
return;
|
||||
}
|
||||
int32_t weight = WEIGHT_ONE;
|
||||
|
|
|
@ -1117,7 +1117,7 @@ static icu::UInitOnce gRBBIInitOnce = U_INITONCE_INITIALIZER;
|
|||
* Release all static memory held by breakiterator.
|
||||
*/
|
||||
U_CDECL_BEGIN
|
||||
static UBool U_CALLCONV rbbi_cleanup(void) {
|
||||
UBool U_CALLCONV rbbi_cleanup(void) {
|
||||
delete gLanguageBreakFactories;
|
||||
gLanguageBreakFactories = nullptr;
|
||||
delete gEmptyString;
|
||||
|
|
|
@ -192,6 +192,8 @@ private:
|
|||
|
||||
U_NAMESPACE_END
|
||||
|
||||
U_CFUNC UBool rbbi_cleanup(void);
|
||||
|
||||
#endif /* C++ */
|
||||
|
||||
#endif
|
||||
|
|
|
@ -323,7 +323,7 @@ static const uint16_t ubidi_props_trieIndex[12536]={
|
|||
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
|
||||
1,1,0xb1,0xb1,0xb1,0xb1,1,0xb1,0xb1,0xb1,0xb1,0xb1,0x81,0x41,0x41,0x41,
|
||||
0x41,0x41,0x81,0x81,0x41,0x81,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,
|
||||
0x81,0x41,1,1,1,0xb1,0xb1,0xb1,1,1,1,1,0x4d,0xd,0x4d,0x4d,
|
||||
0x81,0x41,0x81,0x81,0x81,0xb1,0xb1,0xb1,1,1,1,1,0x4d,0xd,0x4d,0x4d,
|
||||
0x4d,0x4d,0xd,0x8d,0x4d,0x8d,0x8d,0xd,0xd,0xd,0xd,0xd,1,1,1,1,
|
||||
1,1,1,1,1,1,1,1,1,1,1,1,0xb1,0xb1,5,0xb1,
|
||||
0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,
|
||||
|
|
|
@ -304,7 +304,7 @@ static const uint16_t ucase_props_trieIndex[12356]={
|
|||
0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,0x92,0xff91,
|
||||
0x92,0xff91,0x92,0xff91,0,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,
|
||||
0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0x1812,0,
|
||||
0,4,0,0,0,0,0,0,1,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
|
||||
0,4,0,0,0,0,0,4,1,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
|
||||
0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,
|
||||
0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0xe811,0x1719,1,0,0,0,
|
||||
0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x44,0x64,0x64,
|
||||
|
|
|
@ -687,13 +687,13 @@ void toUpper(uint32_t options,
|
|||
if (change) {
|
||||
ByteSinkUtil::appendTwoBytes(upper, sink);
|
||||
if ((data & HAS_EITHER_DIALYTIKA) != 0) {
|
||||
sink.Append(u8"\u0308", 2); // restore or add a dialytika
|
||||
sink.Append(reinterpret_cast<const char*>(u8"\u0308"), 2); // restore or add a dialytika
|
||||
}
|
||||
if (addTonos) {
|
||||
sink.Append(u8"\u0301", 2);
|
||||
sink.Append(reinterpret_cast<const char*>(u8"\u0301"), 2);
|
||||
}
|
||||
while (numYpogegrammeni > 0) {
|
||||
sink.Append(u8"\u0399", 2);
|
||||
sink.Append(reinterpret_cast<const char*>(u8"\u0399"), 2);
|
||||
--numYpogegrammeni;
|
||||
}
|
||||
}
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -866,7 +866,7 @@ getCurrencyNameCount(const char* loc, int32_t* total_currency_name_count, int32_
|
|||
*total_currency_name_count = 0;
|
||||
*total_currency_symbol_count = 0;
|
||||
const UChar* s = NULL;
|
||||
char locale[ULOC_FULLNAME_CAPACITY];
|
||||
char locale[ULOC_FULLNAME_CAPACITY] = "";
|
||||
uprv_strcpy(locale, loc);
|
||||
const icu::Hashtable *currencySymbolsEquiv = getCurrSymbolsEquiv();
|
||||
for (;;) {
|
||||
|
@ -941,7 +941,7 @@ collectCurrencyNames(const char* locale,
|
|||
// Look up the Currencies resource for the given locale.
|
||||
UErrorCode ec2 = U_ZERO_ERROR;
|
||||
|
||||
char loc[ULOC_FULLNAME_CAPACITY];
|
||||
char loc[ULOC_FULLNAME_CAPACITY] = "";
|
||||
uloc_getName(locale, loc, sizeof(loc), &ec2);
|
||||
if (U_FAILURE(ec2) || ec2 == U_STRING_NOT_TERMINATED_WARNING) {
|
||||
ec = U_ILLEGAL_ARGUMENT_ERROR;
|
||||
|
|
|
@ -157,7 +157,7 @@ static const char * const LANGUAGES[] = {
|
|||
"nnh", "no", "nog", "non", "nov", "nqo", "nr", "nso",
|
||||
"nus", "nv", "nwc", "ny", "nym", "nyn", "nyo", "nzi",
|
||||
"oc", "oj", "om", "or", "os", "osa", "ota",
|
||||
"pa", "pag", "pal", "pam", "pap", "pau", "pcd", "pdc",
|
||||
"pa", "pag", "pal", "pam", "pap", "pau", "pcd", "pcm", "pdc",
|
||||
"pdt", "peo", "pfl", "phn", "pi", "pl", "pms", "pnt",
|
||||
"pon", "prg", "pro", "ps", "pt",
|
||||
"qu", "quc", "qug",
|
||||
|
@ -274,7 +274,7 @@ static const char * const LANGUAGES_3[] = {
|
|||
"nnh", "nor", "nog", "non", "nov", "nqo", "nbl", "nso",
|
||||
"nus", "nav", "nwc", "nya", "nym", "nyn", "nyo", "nzi",
|
||||
"oci", "oji", "orm", "ori", "oss", "osa", "ota",
|
||||
"pan", "pag", "pal", "pam", "pap", "pau", "pcd", "pdc",
|
||||
"pan", "pag", "pal", "pam", "pap", "pau", "pcd", "pcm", "pdc",
|
||||
"pdt", "peo", "pfl", "phn", "pli", "pol", "pms", "pnt",
|
||||
"pon", "prg", "pro", "pus", "por",
|
||||
"que", "quc", "qug",
|
||||
|
@ -2127,301 +2127,6 @@ uloc_getISOCountries()
|
|||
return COUNTRIES;
|
||||
}
|
||||
|
||||
|
||||
/* this function to be moved into cstring.c later */
|
||||
static char gDecimal = 0;
|
||||
|
||||
static /* U_CAPI */
|
||||
double
|
||||
/* U_EXPORT2 */
|
||||
_uloc_strtod(const char *start, char **end) {
|
||||
char *decimal;
|
||||
char *myEnd;
|
||||
char buf[30];
|
||||
double rv;
|
||||
if (!gDecimal) {
|
||||
char rep[5];
|
||||
/* For machines that decide to change the decimal on you,
|
||||
and try to be too smart with localization.
|
||||
This normally should be just a '.'. */
|
||||
sprintf(rep, "%+1.1f", 1.0);
|
||||
gDecimal = rep[2];
|
||||
}
|
||||
|
||||
if(gDecimal == '.') {
|
||||
return uprv_strtod(start, end); /* fall through to OS */
|
||||
} else {
|
||||
uprv_strncpy(buf, start, 29);
|
||||
buf[29]=0;
|
||||
decimal = uprv_strchr(buf, '.');
|
||||
if(decimal) {
|
||||
*decimal = gDecimal;
|
||||
} else {
|
||||
return uprv_strtod(start, end); /* no decimal point */
|
||||
}
|
||||
rv = uprv_strtod(buf, &myEnd);
|
||||
if(end) {
|
||||
*end = (char*)(start+(myEnd-buf)); /* cast away const (to follow uprv_strtod API.) */
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
|
||||
typedef struct {
|
||||
float q;
|
||||
int32_t dummy; /* to avoid uninitialized memory copy from qsort */
|
||||
char locale[ULOC_FULLNAME_CAPACITY+1];
|
||||
} _acceptLangItem;
|
||||
|
||||
static int32_t U_CALLCONV
|
||||
uloc_acceptLanguageCompare(const void * /*context*/, const void *a, const void *b)
|
||||
{
|
||||
const _acceptLangItem *aa = (const _acceptLangItem*)a;
|
||||
const _acceptLangItem *bb = (const _acceptLangItem*)b;
|
||||
|
||||
int32_t rc = 0;
|
||||
if(bb->q < aa->q) {
|
||||
rc = -1; /* A > B */
|
||||
} else if(bb->q > aa->q) {
|
||||
rc = 1; /* A < B */
|
||||
} else {
|
||||
rc = 0; /* A = B */
|
||||
}
|
||||
|
||||
if(rc==0) {
|
||||
rc = uprv_stricmp(aa->locale, bb->locale);
|
||||
}
|
||||
|
||||
#if defined(ULOC_DEBUG)
|
||||
/* fprintf(stderr, "a:[%s:%g], b:[%s:%g] -> %d\n",
|
||||
aa->locale, aa->q,
|
||||
bb->locale, bb->q,
|
||||
rc);*/
|
||||
#endif
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
mt-mt, ja;q=0.76, en-us;q=0.95, en;q=0.92, en-gb;q=0.89, fr;q=0.87, iu-ca;q=0.84, iu;q=0.82, ja-jp;q=0.79, mt;q=0.97, de-de;q=0.74, de;q=0.71, es;q=0.68, it-it;q=0.66, it;q=0.63, vi-vn;q=0.61, vi;q=0.58, nl-nl;q=0.55, nl;q=0.53
|
||||
*/
|
||||
|
||||
U_CAPI int32_t U_EXPORT2
|
||||
uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult *outResult,
|
||||
const char *httpAcceptLanguage,
|
||||
UEnumeration* availableLocales,
|
||||
UErrorCode *status)
|
||||
{
|
||||
MaybeStackArray<_acceptLangItem, 4> items; // Struct for collecting items.
|
||||
char tmp[ULOC_FULLNAME_CAPACITY +1];
|
||||
int32_t n = 0;
|
||||
const char *itemEnd;
|
||||
const char *paramEnd;
|
||||
const char *s;
|
||||
const char *t;
|
||||
int32_t res;
|
||||
int32_t i;
|
||||
int32_t l = (int32_t)uprv_strlen(httpAcceptLanguage);
|
||||
|
||||
if(U_FAILURE(*status)) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
for(s=httpAcceptLanguage;s&&*s;) {
|
||||
while(isspace(*s)) /* eat space at the beginning */
|
||||
s++;
|
||||
itemEnd=uprv_strchr(s,',');
|
||||
paramEnd=uprv_strchr(s,';');
|
||||
if(!itemEnd) {
|
||||
itemEnd = httpAcceptLanguage+l; /* end of string */
|
||||
}
|
||||
if(paramEnd && paramEnd<itemEnd) {
|
||||
/* semicolon (;) is closer than end (,) */
|
||||
t = paramEnd+1;
|
||||
if(*t=='q') {
|
||||
t++;
|
||||
}
|
||||
while(isspace(*t)) {
|
||||
t++;
|
||||
}
|
||||
if(*t=='=') {
|
||||
t++;
|
||||
}
|
||||
while(isspace(*t)) {
|
||||
t++;
|
||||
}
|
||||
items[n].q = (float)_uloc_strtod(t,NULL);
|
||||
} else {
|
||||
/* no semicolon - it's 1.0 */
|
||||
items[n].q = 1.0f;
|
||||
paramEnd = itemEnd;
|
||||
}
|
||||
items[n].dummy=0;
|
||||
/* eat spaces prior to semi */
|
||||
for(t=(paramEnd-1);(paramEnd>s)&&isspace(*t);t--)
|
||||
;
|
||||
int32_t slen = static_cast<int32_t>(((t+1)-s));
|
||||
if(slen > ULOC_FULLNAME_CAPACITY) {
|
||||
*status = U_BUFFER_OVERFLOW_ERROR;
|
||||
return -1; // too big
|
||||
}
|
||||
uprv_strncpy(items[n].locale, s, slen);
|
||||
items[n].locale[slen]=0; // terminate
|
||||
int32_t clen = uloc_canonicalize(items[n].locale, tmp, UPRV_LENGTHOF(tmp)-1, status);
|
||||
if(U_FAILURE(*status)) return -1;
|
||||
if((clen!=slen) || (uprv_strncmp(items[n].locale, tmp, slen))) {
|
||||
// canonicalization had an effect- copy back
|
||||
uprv_strncpy(items[n].locale, tmp, clen);
|
||||
items[n].locale[clen] = 0; // terminate
|
||||
}
|
||||
#if defined(ULOC_DEBUG)
|
||||
/*fprintf(stderr,"%d: s <%s> q <%g>\n", n, j[n].locale, j[n].q);*/
|
||||
#endif
|
||||
n++;
|
||||
s = itemEnd;
|
||||
while(*s==',') { /* eat duplicate commas */
|
||||
s++;
|
||||
}
|
||||
if(n>=items.getCapacity()) { // If we need more items
|
||||
if(NULL == items.resize(items.getCapacity()*2, items.getCapacity())) {
|
||||
*status = U_MEMORY_ALLOCATION_ERROR;
|
||||
return -1;
|
||||
}
|
||||
#if defined(ULOC_DEBUG)
|
||||
fprintf(stderr,"malloced at size %d\n", items.getCapacity());
|
||||
#endif
|
||||
}
|
||||
}
|
||||
uprv_sortArray(items.getAlias(), n, sizeof(items[0]), uloc_acceptLanguageCompare, NULL, TRUE, status);
|
||||
if (U_FAILURE(*status)) {
|
||||
return -1;
|
||||
}
|
||||
LocalMemory<const char*> strs(NULL);
|
||||
if (strs.allocateInsteadAndReset(n) == NULL) {
|
||||
*status = U_MEMORY_ALLOCATION_ERROR;
|
||||
return -1;
|
||||
}
|
||||
for(i=0;i<n;i++) {
|
||||
#if defined(ULOC_DEBUG)
|
||||
/*fprintf(stderr,"%d: s <%s> q <%g>\n", i, j[i].locale, j[i].q);*/
|
||||
#endif
|
||||
strs[i]=items[i].locale;
|
||||
}
|
||||
res = uloc_acceptLanguage(result, resultAvailable, outResult,
|
||||
strs.getAlias(), n, availableLocales, status);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
U_CAPI int32_t U_EXPORT2
|
||||
uloc_acceptLanguage(char *result, int32_t resultAvailable,
|
||||
UAcceptResult *outResult, const char **acceptList,
|
||||
int32_t acceptListCount,
|
||||
UEnumeration* availableLocales,
|
||||
UErrorCode *status)
|
||||
{
|
||||
int32_t i,j;
|
||||
int32_t len;
|
||||
int32_t maxLen=0;
|
||||
char tmp[ULOC_FULLNAME_CAPACITY+1];
|
||||
const char *l;
|
||||
char **fallbackList;
|
||||
if(U_FAILURE(*status)) {
|
||||
return -1;
|
||||
}
|
||||
fallbackList = static_cast<char **>(uprv_malloc((size_t)(sizeof(fallbackList[0])*acceptListCount)));
|
||||
if(fallbackList==NULL) {
|
||||
*status = U_MEMORY_ALLOCATION_ERROR;
|
||||
return -1;
|
||||
}
|
||||
for(i=0;i<acceptListCount;i++) {
|
||||
#if defined(ULOC_DEBUG)
|
||||
fprintf(stderr,"%02d: %s\n", i, acceptList[i]);
|
||||
#endif
|
||||
while((l=uenum_next(availableLocales, NULL, status)) != NULL) {
|
||||
#if defined(ULOC_DEBUG)
|
||||
fprintf(stderr," %s\n", l);
|
||||
#endif
|
||||
len = (int32_t)uprv_strlen(l);
|
||||
if(!uprv_strcmp(acceptList[i], l)) {
|
||||
if(outResult) {
|
||||
*outResult = ULOC_ACCEPT_VALID;
|
||||
}
|
||||
#if defined(ULOC_DEBUG)
|
||||
fprintf(stderr, "MATCH! %s\n", l);
|
||||
#endif
|
||||
if(len>0) {
|
||||
uprv_strncpy(result, l, uprv_min(len, resultAvailable));
|
||||
}
|
||||
for(j=0;j<i;j++) {
|
||||
uprv_free(fallbackList[j]);
|
||||
}
|
||||
uprv_free(fallbackList);
|
||||
return u_terminateChars(result, resultAvailable, len, status);
|
||||
}
|
||||
if(len>maxLen) {
|
||||
maxLen = len;
|
||||
}
|
||||
}
|
||||
uenum_reset(availableLocales, status);
|
||||
/* save off parent info */
|
||||
if(uloc_getParent(acceptList[i], tmp, UPRV_LENGTHOF(tmp), status)!=0) {
|
||||
fallbackList[i] = uprv_strdup(tmp);
|
||||
} else {
|
||||
fallbackList[i]=0;
|
||||
}
|
||||
}
|
||||
|
||||
for(maxLen--;maxLen>0;maxLen--) {
|
||||
for(i=0;i<acceptListCount;i++) {
|
||||
if(fallbackList[i] && ((int32_t)uprv_strlen(fallbackList[i])==maxLen)) {
|
||||
#if defined(ULOC_DEBUG)
|
||||
fprintf(stderr,"Try: [%s]", fallbackList[i]);
|
||||
#endif
|
||||
while((l=uenum_next(availableLocales, NULL, status)) != NULL) {
|
||||
#if defined(ULOC_DEBUG)
|
||||
fprintf(stderr," %s\n", l);
|
||||
#endif
|
||||
len = (int32_t)uprv_strlen(l);
|
||||
if(!uprv_strcmp(fallbackList[i], l)) {
|
||||
if(outResult) {
|
||||
*outResult = ULOC_ACCEPT_FALLBACK;
|
||||
}
|
||||
#if defined(ULOC_DEBUG)
|
||||
fprintf(stderr, "fallback MATCH! %s\n", l);
|
||||
#endif
|
||||
if(len>0) {
|
||||
uprv_strncpy(result, l, uprv_min(len, resultAvailable));
|
||||
}
|
||||
for(j=0;j<acceptListCount;j++) {
|
||||
uprv_free(fallbackList[j]);
|
||||
}
|
||||
uprv_free(fallbackList);
|
||||
return u_terminateChars(result, resultAvailable, len, status);
|
||||
}
|
||||
}
|
||||
uenum_reset(availableLocales, status);
|
||||
|
||||
if(uloc_getParent(fallbackList[i], tmp, UPRV_LENGTHOF(tmp), status)!=0) {
|
||||
uprv_free(fallbackList[i]);
|
||||
fallbackList[i] = uprv_strdup(tmp);
|
||||
} else {
|
||||
uprv_free(fallbackList[i]);
|
||||
fallbackList[i]=0;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(outResult) {
|
||||
*outResult = ULOC_ACCEPT_FAILED;
|
||||
}
|
||||
}
|
||||
for(i=0;i<acceptListCount;i++) {
|
||||
uprv_free(fallbackList[i]);
|
||||
}
|
||||
uprv_free(fallbackList);
|
||||
return -1;
|
||||
}
|
||||
|
||||
U_CAPI const char* U_EXPORT2
|
||||
uloc_toUnicodeLocaleKey(const char* keyword)
|
||||
{
|
||||
|
|
0
icu4c/source/common/umutex.h
Executable file → Normal file
0
icu4c/source/common/umutex.h
Executable file → Normal file
|
@ -1519,7 +1519,8 @@ U_CAPI UChar32 U_EXPORT2
|
|||
u_charFromName(UCharNameChoice nameChoice,
|
||||
const char *name,
|
||||
UErrorCode *pErrorCode) {
|
||||
char upper[120], lower[120];
|
||||
char upper[120] = {0};
|
||||
char lower[120] = {0};
|
||||
FindName findName;
|
||||
AlgorithmicRange *algRange;
|
||||
uint32_t *p;
|
||||
|
|
|
@ -574,6 +574,8 @@ private:
|
|||
LocaleMatcher(const LocaleMatcher &other) = delete;
|
||||
LocaleMatcher &operator=(const LocaleMatcher &other) = delete;
|
||||
|
||||
int32_t putIfAbsent(const LSR &lsr, int32_t i, int32_t suppLength, UErrorCode &errorCode);
|
||||
|
||||
int32_t getBestSuppIndex(LSR desiredLSR, LocaleLsrIterator *remainingIter, UErrorCode &errorCode) const;
|
||||
|
||||
const XLikelySubtags &likelySubtags;
|
||||
|
@ -595,7 +597,6 @@ private:
|
|||
int32_t supportedLSRsLength;
|
||||
Locale *ownedDefaultLocale;
|
||||
const Locale *defaultLocale;
|
||||
int32_t defaultLocaleIndex;
|
||||
};
|
||||
|
||||
U_NAMESPACE_END
|
||||
|
|
|
@ -177,6 +177,71 @@ typedef enum UTraceFunctionNumber {
|
|||
UTRACE_RES_DATA_LIMIT,
|
||||
#endif // U_HIDE_INTERNAL_API
|
||||
|
||||
#ifndef U_HIDE_DRAFT_API
|
||||
/**
|
||||
* The lowest break iterator location.
|
||||
* @draft ICU 67
|
||||
*/
|
||||
UTRACE_UBRK_START=0x4000,
|
||||
|
||||
/**
|
||||
* Indicates that a character instance of break iterator was created.
|
||||
*
|
||||
* @draft ICU 67
|
||||
*/
|
||||
UTRACE_UBRK_CREATE_CHARACTER = UTRACE_UBRK_START,
|
||||
|
||||
/**
|
||||
* Indicates that a word instance of break iterator was created.
|
||||
*
|
||||
* @draft ICU 67
|
||||
*/
|
||||
UTRACE_UBRK_CREATE_WORD,
|
||||
|
||||
/**
|
||||
* Indicates that a line instance of break iterator was created.
|
||||
*
|
||||
* Provides one C-style string to UTraceData: the lb value ("",
|
||||
* "loose", "strict", or "normal").
|
||||
*
|
||||
* @draft ICU 67
|
||||
*/
|
||||
UTRACE_UBRK_CREATE_LINE,
|
||||
|
||||
/**
|
||||
* Indicates that a sentence instance of break iterator was created.
|
||||
*
|
||||
* @draft ICU 67
|
||||
*/
|
||||
UTRACE_UBRK_CREATE_SENTENCE,
|
||||
|
||||
/**
|
||||
* Indicates that a title instance of break iterator was created.
|
||||
*
|
||||
* @draft ICU 67
|
||||
*/
|
||||
UTRACE_UBRK_CREATE_TITLE,
|
||||
|
||||
/**
|
||||
* Indicates that an internal dictionary break engine was created.
|
||||
*
|
||||
* Provides one C-style string to UTraceData: the script code of what
|
||||
* the break engine cover ("Hani", "Khmr", "Laoo", "Mymr", or "Thai").
|
||||
*
|
||||
* @draft ICU 67
|
||||
*/
|
||||
UTRACE_UBRK_CREATE_BREAK_ENGINE,
|
||||
|
||||
#endif // U_HIDE_DRAFT_API
|
||||
|
||||
#ifndef U_HIDE_INTERNAL_API
|
||||
/**
|
||||
* One more than the highest normal break iterator trace location.
|
||||
* @internal The numeric value may change over time, see ICU ticket #12420.
|
||||
*/
|
||||
UTRACE_UBRK_LIMIT,
|
||||
#endif // U_HIDE_INTERNAL_API
|
||||
|
||||
} UTraceFunctionNumber;
|
||||
|
||||
/**
|
||||
|
|
|
@ -66,13 +66,13 @@
|
|||
* This value will change in the subsequent releases of ICU
|
||||
* @stable ICU 2.6
|
||||
*/
|
||||
#define U_ICU_VERSION_MINOR_NUM 0
|
||||
#define U_ICU_VERSION_MINOR_NUM 1
|
||||
|
||||
/** The current ICU patchlevel version as an integer.
|
||||
* This value will change in the subsequent releases of ICU
|
||||
* @stable ICU 2.4
|
||||
*/
|
||||
#define U_ICU_VERSION_PATCHLEVEL_NUM 1
|
||||
#define U_ICU_VERSION_PATCHLEVEL_NUM 0
|
||||
|
||||
/** The current ICU build level version as an integer.
|
||||
* This value is for use by ICU clients. It defaults to 0.
|
||||
|
@ -139,7 +139,7 @@
|
|||
* This value will change in the subsequent releases of ICU
|
||||
* @stable ICU 2.4
|
||||
*/
|
||||
#define U_ICU_VERSION "66.0.1"
|
||||
#define U_ICU_VERSION "66.1"
|
||||
|
||||
/**
|
||||
* The current ICU library major version number as a string, for library name suffixes.
|
||||
|
@ -158,7 +158,7 @@
|
|||
/** Data version in ICU4C.
|
||||
* @internal ICU 4.4 Internal Use Only
|
||||
**/
|
||||
#define U_ICU_DATA_VERSION "66.0.1"
|
||||
#define U_ICU_DATA_VERSION "66.1"
|
||||
#endif /* U_HIDE_INTERNAL_API */
|
||||
|
||||
/*===========================================================================
|
||||
|
|
|
@ -2611,8 +2611,8 @@ ures_getFunctionalEquivalent(char *result, int32_t resultCapacity,
|
|||
char defVal[1024] = ""; /* default value for given locale */
|
||||
char defLoc[1024] = ""; /* default value for given locale */
|
||||
char base[1024] = ""; /* base locale */
|
||||
char found[1024];
|
||||
char parent[1024];
|
||||
char found[1024] = "";
|
||||
char parent[1024] = "";
|
||||
char full[1024] = "";
|
||||
UResourceBundle bund1, bund2;
|
||||
UResourceBundle *res = NULL;
|
||||
|
|
|
@ -58,8 +58,8 @@ static int32_t
|
|||
getCodesFromLocale(const char *locale,
|
||||
UScriptCode *scripts, int32_t capacity, UErrorCode *err) {
|
||||
UErrorCode internalErrorCode = U_ZERO_ERROR;
|
||||
char lang[8];
|
||||
char script[8];
|
||||
char lang[8] = {0};
|
||||
char script[8] = {0};
|
||||
int32_t scriptLength;
|
||||
if(U_FAILURE(*err)) { return 0; }
|
||||
// Multi-script languages, equivalent to the LocaleScript data
|
||||
|
|
|
@ -102,7 +102,10 @@ LIBICU = $(STATIC_PREFIX_WHEN_USED)$(ICUPREFIX)
|
|||
#SH#ICULIBS_COMMON_LIB_NAME_A="${LIBICU}${COMMON_STUBNAME}${ICULIBSUFFIX}.${A}"
|
||||
|
||||
#SH#ICULIBS_DATA="-l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
|
||||
#SH#ICULIBS_I18N="-l$(ICUPREFIX)$(I18N_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
|
||||
ICULIBS_DT="-l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
|
||||
ICULIBS_I18N="-l$(ICUPREFIX)$(I18N_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
|
||||
ICULIBS_IO="-l$(ICUPREFIX)$(IO_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
|
||||
ICULIBS_UC="-l$(ICUPREFIX)$(COMMON_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
|
||||
#SH#
|
||||
#SH## ICULIBS is the set of libraries your application should link
|
||||
#SH## with usually. Many applications will want to add ${ICULIBS_I18N} as well.
|
||||
|
|
|
@ -102,7 +102,10 @@ LIBICU = $(STATIC_PREFIX_WHEN_USED)$(ICUPREFIX)
|
|||
#SH#ICULIBS_COMMON_LIB_NAME_A="${LIBICU}${COMMON_STUBNAME}${ICULIBSUFFIX}.${A}"
|
||||
|
||||
#SH#ICULIBS_DATA="-l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
|
||||
#SH#ICULIBS_I18N="-l$(ICUPREFIX)$(I18N_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
|
||||
ICULIBS_DT="-l$(ICUPREFIX)$(DATA_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
|
||||
ICULIBS_I18N="-l$(ICUPREFIX)$(I18N_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
|
||||
ICULIBS_IO="-l$(ICUPREFIX)$(IO_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
|
||||
ICULIBS_UC="-l$(ICUPREFIX)$(COMMON_STUBNAME)$(ICULIBSUFFIX)$(ICULIBSUFFIX_VERSION)"
|
||||
#SH#
|
||||
#SH## ICULIBS is the set of libraries your application should link
|
||||
#SH## with usually. Many applications will want to add ${ICULIBS_I18N} as well.
|
||||
|
|
18
icu4c/source/configure
vendored
18
icu4c/source/configure
vendored
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for ICU 66.0.1.
|
||||
# Generated by GNU Autoconf 2.69 for ICU 66.1.
|
||||
#
|
||||
# Report bugs to <http://icu-project.org/bugs>.
|
||||
#
|
||||
|
@ -582,8 +582,8 @@ MAKEFLAGS=
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='ICU'
|
||||
PACKAGE_TARNAME='International Components for Unicode'
|
||||
PACKAGE_VERSION='66.0.1'
|
||||
PACKAGE_STRING='ICU 66.0.1'
|
||||
PACKAGE_VERSION='66.1'
|
||||
PACKAGE_STRING='ICU 66.1'
|
||||
PACKAGE_BUGREPORT='http://icu-project.org/bugs'
|
||||
PACKAGE_URL='http://icu-project.org'
|
||||
|
||||
|
@ -1362,7 +1362,7 @@ if test "$ac_init_help" = "long"; then
|
|||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures ICU 66.0.1 to adapt to many kinds of systems.
|
||||
\`configure' configures ICU 66.1 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
|
@ -1428,7 +1428,7 @@ fi
|
|||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of ICU 66.0.1:";;
|
||||
short | recursive ) echo "Configuration of ICU 66.1:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
|
@ -1566,7 +1566,7 @@ fi
|
|||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
ICU configure 66.0.1
|
||||
ICU configure 66.1
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
|
@ -2312,7 +2312,7 @@ cat >config.log <<_ACEOF
|
|||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by ICU $as_me 66.0.1, which was
|
||||
It was created by ICU $as_me 66.1, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
|
@ -8532,7 +8532,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
|||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by ICU $as_me 66.0.1, which was
|
||||
This file was extended by ICU $as_me 66.1, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
@ -8586,7 +8586,7 @@ _ACEOF
|
|||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
ICU config.status 66.0.1
|
||||
ICU config.status 66.1
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
|
|
@ -148,7 +148,8 @@ ICUDATA_ARCHIVE = $(firstword $(wildcard $(srcdir)/in/$(ICUDATA_BASENAME_VERSION
|
|||
# and convert it to the current type.
|
||||
ifneq ($(ICUDATA_ARCHIVE),)
|
||||
ICUDATA_SOURCE_ARCHIVE = $(OUTDIR)/$(ICUDATA_PLATFORM_NAME).dat
|
||||
$(ICUDATA_SOURCE_ARCHIVE): $(ICUDATA_ARCHIVE) $(OUTDIR)
|
||||
$(ICUDATA_SOURCE_ARCHIVE): $(ICUDATA_ARCHIVE)
|
||||
$(MKINSTALLDIRS) $(OUTDIR)
|
||||
$(INVOKE) $(TOOLBINDIR)/icupkg -t$(ICUDATA_CHAR) $(ICUDATA_ARCHIVE) $(ICUDATA_SOURCE_ARCHIVE)
|
||||
|
||||
$(OUTDIR):
|
||||
|
|
|
@ -2,5 +2,5 @@
|
|||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
|
||||
{
|
||||
"cldrVersion": "36.1"
|
||||
"cldrVersion": "37"
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
de{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
exceptions{
|
||||
SentenceBreak:array{
|
||||
"Port.",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
el{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
boundaries{
|
||||
sentence:process(dependency){"sent_el.brk"}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
en{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
exceptions{
|
||||
SentenceBreak:array{
|
||||
"L.P.",
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
en_US{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
en_US_POSIX{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
boundaries{
|
||||
word:process(dependency){"word_POSIX.brk"}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
es{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
exceptions{
|
||||
SentenceBreak:array{
|
||||
"Rdos.",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
fr{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
exceptions{
|
||||
SentenceBreak:array{
|
||||
"aux.",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
it{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
exceptions{
|
||||
SentenceBreak:array{
|
||||
"N.B.",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
ja{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
boundaries{
|
||||
line:process(dependency){"line_normal.brk"}
|
||||
line_loose:process(dependency){"line_loose_cj.brk"}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
pt{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
exceptions{
|
||||
SentenceBreak:array{
|
||||
"psicol.",
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
root{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
boundaries{
|
||||
grapheme:process(dependency){"char.brk"}
|
||||
line:process(dependency){"line.brk"}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
ru{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
exceptions{
|
||||
SentenceBreak:array{
|
||||
"\u0440\u0443\u0431.",
|
||||
|
|
|
@ -27,10 +27,12 @@
|
|||
# Character Class Definitions.
|
||||
#
|
||||
|
||||
$Han = [:Han:];
|
||||
|
||||
$CR = [\p{Word_Break = CR}];
|
||||
$LF = [\p{Word_Break = LF}];
|
||||
$Newline = [\p{Word_Break = Newline} ];
|
||||
$Extend = [\p{Word_Break = Extend}];
|
||||
$Newline = [\p{Word_Break = Newline}];
|
||||
$Extend = [\p{Word_Break = Extend}-$Han];
|
||||
$ZWJ = [\p{Word_Break = ZWJ}];
|
||||
$Regional_Indicator = [\p{Word_Break = Regional_Indicator}];
|
||||
$Format = [\p{Word_Break = Format}];
|
||||
|
@ -42,12 +44,11 @@ $Double_Quote = [\p{Word_Break = Double_Quote}];
|
|||
$MidNumLet = [\p{Word_Break = MidNumLet}];
|
||||
$MidLetter = [\p{Word_Break = MidLetter}];
|
||||
$MidNum = [\p{Word_Break = MidNum}];
|
||||
$Numeric = [[\p{Word_Break = Numeric}] [\uFF10-\uff19]]; # Patch for ICU-12079
|
||||
$Numeric = [\p{Word_Break = Numeric}];
|
||||
$ExtendNumLet = [\p{Word_Break = ExtendNumLet}];
|
||||
$WSegSpace = [\p{Word_Break = WSegSpace}];
|
||||
$Extended_Pict = [\p{Extended_Pictographic}];
|
||||
|
||||
$Han = [:Han:];
|
||||
$Hiragana = [:Hiragana:];
|
||||
$Ideographic = [\p{Ideographic}];
|
||||
|
||||
|
|
|
@ -27,10 +27,12 @@
|
|||
# Character Class Definitions.
|
||||
#
|
||||
|
||||
$Han = [:Han:];
|
||||
|
||||
$CR = [\p{Word_Break = CR}];
|
||||
$LF = [\p{Word_Break = LF}];
|
||||
$Newline = [\p{Word_Break = Newline} ];
|
||||
$Extend = [\p{Word_Break = Extend}];
|
||||
$Newline = [\p{Word_Break = Newline}];
|
||||
$Extend = [\p{Word_Break = Extend}-$Han];
|
||||
$ZWJ = [\p{Word_Break = ZWJ}];
|
||||
$Regional_Indicator = [\p{Word_Break = Regional_Indicator}];
|
||||
$Format = [\p{Word_Break = Format}];
|
||||
|
@ -42,12 +44,11 @@ $Double_Quote = [\p{Word_Break = Double_Quote}];
|
|||
$MidNumLet = [\p{Word_Break = MidNumLet} - [.]];
|
||||
$MidLetter = [\p{Word_Break = MidLetter} - [\:]];
|
||||
$MidNum = [\p{Word_Break = MidNum} [.]];
|
||||
$Numeric = [[\p{Word_Break = Numeric}] [\uFF10-\uff19]]; # Patch for ICU-12079
|
||||
$Numeric = [\p{Word_Break = Numeric}];
|
||||
$ExtendNumLet = [\p{Word_Break = ExtendNumLet}];
|
||||
$WSegSpace = [\p{Word_Break = WSegSpace}];
|
||||
$Extended_Pict = [\p{Extended_Pictographic}];
|
||||
|
||||
$Han = [:Han:];
|
||||
$Hiragana = [:Hiragana:];
|
||||
$Ideographic = [\p{Ideographic}];
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
zh{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
boundaries{
|
||||
line:process(dependency){"line_cj.brk"}
|
||||
line_loose:process(dependency){"line_loose_cj.brk"}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
zh_Hant{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
boundaries{
|
||||
line:process(dependency){"line_cj.brk"}
|
||||
line_loose:process(dependency){"line_loose_cj.brk"}
|
||||
|
|
|
@ -414,7 +414,7 @@
|
|||
<exclude name="zone/tzdbNames.txt" />
|
||||
<include name="unit/*.txt" />
|
||||
<include name="unit/resfiles.mk" />
|
||||
</fileset>
|
||||
</fileset>
|
||||
<fileset id="collation" dir="${env.ICU4C_DIR}/source/data/coll">
|
||||
<include name="*.txt" />
|
||||
</fileset>
|
||||
|
|
|
@ -3,12 +3,17 @@
|
|||
# Copyright (C) 2010-2014, International Business Machines Corporation and others.
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Commands for regenerating ICU4C locale data (.txt files) from CLDR.
|
||||
# Commands for regenerating ICU4C locale data (.txt files) from CLDR,
|
||||
# updated to apply to CLDR 37 / ICU 67 and later versions.
|
||||
#
|
||||
# The process requires local copies of
|
||||
# - CLDR (the source of most of the data, and some Java tools)
|
||||
# - ICU4J (used only for checking the converted data)
|
||||
# - ICU4C (the destination for the new data, and the source for some of it)
|
||||
# - The complete ICU source tree, including:
|
||||
# tools - includes the LdmlConverter build tool and associated config files
|
||||
# icu4c - the target for converted CLDR data, and source for ICU4J data;
|
||||
# includes tests for the converted data
|
||||
# icu4j - the target for updated data jars; includes tests for the converted
|
||||
# data
|
||||
#
|
||||
# For an official CLDR data integration into ICU, these should be clean, freshly
|
||||
# checked-out. For released CLDR sources, an alternative to checking out sources
|
||||
|
@ -17,10 +22,10 @@
|
|||
# [http://cldr.unicode.org/index/downloads].
|
||||
#
|
||||
# The versions of each of these must match. Included with the release notes for
|
||||
# ICU is the version number and/or a CLDR svn tag name for the revision of CLDR
|
||||
# ICU is the version number and/or a CLDR git tag name for the revision of CLDR
|
||||
# that was the source of the data for that release of ICU.
|
||||
#
|
||||
# Besides a standard JDK, the process also requires ant
|
||||
# Besides a standard JDK, the process also requires ant and maven
|
||||
# (http://ant.apache.org/),
|
||||
# plus the xml-apis.jar from the Apache xalan package
|
||||
# (http://xml.apache.org/xalan-j/downloads.html).
|
||||
|
@ -50,17 +55,22 @@
|
|||
#
|
||||
# b) CLDR-related variables
|
||||
#
|
||||
# CLDR_DIR: Path to root of CLDR sources, below which are the common and
|
||||
# tools directories.
|
||||
# CLDR_DIR: For most of the process, this is the path to the to root of
|
||||
# standard CLDR sources, below which are the common and
|
||||
# tools directories. For running LdmlConverter, this needs to be
|
||||
# temporarily reset to the parallel root for the production data,
|
||||
# corresponding to $CLDR_TMP_DIR/production (see description of
|
||||
# CLDR_TMP_DIR below).
|
||||
# CLDR_CLASSES: Path to the CLDR Tools classes directory. If not set, defaults
|
||||
# to $CLDR_DIR/tools/java/classes
|
||||
#
|
||||
# CLDR_TMP_DIR: Parent of temporary CLDR production data.
|
||||
# Defaults to $CLDR_DIR/../cldr-aux (sibling to CLDR_DIR).
|
||||
#
|
||||
# *** NOTE ***: In CLDR release-36-beta, the GenerateProductionData
|
||||
# tool no longer generates data into $CLDR_TMP_DIR/production; instead
|
||||
# it generates data into $CLDR_DIR/../cldr-staging/production. However
|
||||
# *** NOTE ***: In CLDR 36 and 37, the GenerateProductionData tool
|
||||
# no longer generates data by default into $CLDR_TMP_DIR/production;
|
||||
# instead it generates data into $CLDR_DIR/../cldr-staging/production
|
||||
# (though there is a command-line option to override this). However
|
||||
# the rest of the build still assumes that the generated data is in
|
||||
# $CLDR_TMP_DIR/production. So CLDR_TMP_DIR must be defined to be
|
||||
# $CLDR_DIR/../cldr-staging
|
||||
|
@ -73,6 +83,9 @@
|
|||
#
|
||||
# ICU4J_ROOT: Path to root of ICU4J sources, below which is the main dir.
|
||||
#
|
||||
# TOOLS_ROOT: Path to root of ICU tools directory, below which is (e.g.) the
|
||||
# cldr and unicodetools dirs.
|
||||
#
|
||||
#----
|
||||
#
|
||||
# If you are adding or removing locales, or specific kinds of locale data,
|
||||
|
@ -80,7 +93,15 @@
|
|||
# files are used in addition to the CLDR files as inputs to the CLDR data build
|
||||
# process for ICU):
|
||||
#
|
||||
# icu4c/source/data/icu-config.xml - Update <locales> to add or remove
|
||||
# The primary file to edit for ICU 67 and later is
|
||||
#
|
||||
# $TOOLS_ROOT/cldr/cldr-to-icu/build-icu-data.xml
|
||||
#
|
||||
# The files used in previous versions are the following. These are not used in
|
||||
# the ICU-67-and-later process, but for now they should be kept up to date to
|
||||
# enable parallel use of the older build process for verification.
|
||||
#
|
||||
# $ICU4C_DIR/source/data/icu-config.xml - Update <locales> to add or remove
|
||||
# CLDR locales for inclusion in ICU. Update <paths> to prefer
|
||||
# alt forms for certain paths, or to exclude certain paths; note
|
||||
# that <paths> items can only have draft or alt attributes.
|
||||
|
@ -91,7 +112,7 @@
|
|||
# should also be included in <locales>, per PMC policy decision
|
||||
# 2012-05-02 (see http://bugs.icu-project.org/trac/ticket/9298).
|
||||
#
|
||||
# icu4c/source/data/build.xml - If you are adding or removing break
|
||||
# $ICU4C_DIR/source/data/build.xml - If you are adding or removing break
|
||||
# iterators, you need to update <fileset id="brkitr" ...> under
|
||||
# <target name="clean" ...> to clean the correct set of files.
|
||||
#
|
||||
|
@ -99,7 +120,7 @@
|
|||
# updated the <remapper> sections to put these in the correct
|
||||
# data subfolder for ICU.
|
||||
#
|
||||
# icu4c/source/data/xml/ - If you are adding a new locale, break
|
||||
# $ICU4C_DIR/source/data/xml/ - If you are adding a new locale, break
|
||||
# iterator, collation tailoring, or rule-based number formatter,
|
||||
# you may need to add a corresponding xml file in (respectively)
|
||||
# the main/, brkitr/, collation/, or rbnf/ subdirectory here.
|
||||
|
@ -123,8 +144,8 @@
|
|||
# keyboards/dtd/ldmlKeyboard.dtd - update cldrVersion
|
||||
# tools/java/org/unicode/cldr/util/CLDRFile.java - update GEN_VERSION
|
||||
#
|
||||
# c) After everything is committed, you will need to tag the CLDR, ICU4J, and
|
||||
# ICU4C sources that ended up being used for the integration; see step 17
|
||||
# c) After everything is committed, you will need to tag the CLDR and ICU
|
||||
# sources that ended up being used for the integration; see step 16
|
||||
# below.
|
||||
#
|
||||
################################################################################
|
||||
|
@ -143,56 +164,103 @@ export CLDR_DIR=$HOME/cldr-myfork
|
|||
|
||||
export ICU4C_DIR=$HOME/icu-myfork/icu4c
|
||||
export ICU4J_ROOT=$HOME/icu-myfork/icu4j
|
||||
export TOOLS_ROOT=$HOME/icu-myfork/tools
|
||||
|
||||
|
||||
# 2. Build the CLDR Java tools and jar
|
||||
|
||||
cd $CLDR_DIR/tools/java
|
||||
ant clean
|
||||
ant all
|
||||
ant jar
|
||||
|
||||
# 2a. Copy the CLDR jars into $TOOLS_ROOT/cldr/cldr-to-icu/lib/ maven repository;
|
||||
# see $TOOLS_ROOT/cldr/cldr-to-icu/lib/README.txt
|
||||
|
||||
cd $TOOLS_ROOT/cldr/cldr-to-icu/lib/
|
||||
mvn install:install-file \
|
||||
-DgroupId=org.unicode.cldr \
|
||||
-DartifactId=cldr-api \
|
||||
-Dversion=0.1-SNAPSHOT \
|
||||
-Dpackaging=jar \
|
||||
-DgeneratePom=true \
|
||||
-DlocalRepositoryPath=. \
|
||||
-Dfile=$CLDR_DIR/tools/java/cldr.jar
|
||||
|
||||
cd $TOOLS_ROOT/cldr/cldr-to-icu/lib/
|
||||
mvn install:install-file \
|
||||
-DgroupId=com.ibm.icu \
|
||||
-DartifactId=icu-utilities \
|
||||
-Dversion=0.1-SNAPSHOT \
|
||||
-Dpackaging=jar \
|
||||
-DgeneratePom=true \
|
||||
-DlocalRepositoryPath=. \
|
||||
-Dfile=$CLDR_DIR/tools/java/libs/utilities.jar
|
||||
|
||||
cd $TOOLS_ROOT/cldr/cldr-to-icu/
|
||||
mvn dependency:purge-local-repository -DsnapshotsOnly=true
|
||||
|
||||
# 3. Configure ICU4C, build and test without new data first, to verify that
|
||||
# there are no pre-existing errors. Here <platform> is the runConfigureICU
|
||||
# code for the platform you are building, e.g. Linux, MacOSX, Cygwin.
|
||||
|
||||
cd $ICU4C_DIR/source
|
||||
./runConfigureICU <platform>
|
||||
make all 2>&1 | tee /tmp/icu4c-oldData-makeAll.txt
|
||||
make clean
|
||||
make check 2>&1 | tee /tmp/icu4c-oldData-makeCheck.txt
|
||||
|
||||
# 4. Build the new ICU4C data files; these include .txt files and .py files.
|
||||
# These new files will replace whatever was already present in the ICU4C sources.
|
||||
# This process uses ant with ICU's data/build.xml and data/icu-config.xml to
|
||||
# operate (via CLDR's ant/CLDRConverterTool.java and ant/CLDRBuild.java) the
|
||||
# necessary CLDR tools including LDML2ICUConverter, ConvertTransforms, etc.
|
||||
# This process will take several minutes.
|
||||
# Keep a log so you can investigate anything that looks suspicious.
|
||||
# 4a. Generate the CLDR production data. This process uses ant with ICU's
|
||||
# data/build.xml
|
||||
#
|
||||
# Running "ant cleanprod" is necessary to clean out the production data directory
|
||||
# (usually $CLDR_TMP_DIR/production ), required if any CLDR data has changed.
|
||||
#
|
||||
# Running "ant setup" is not required, but it will print useful errors to
|
||||
# debug issues with your path when it fails.
|
||||
#
|
||||
|
||||
cd $ICU4C_DIR/source/data
|
||||
ant cleanprod
|
||||
ant setup
|
||||
ant clean
|
||||
ant all 2>&1 | tee /tmp/cldr-newData-buildLog.txt
|
||||
ant proddata 2>&1 | tee /tmp/cldr-newData-proddataLog.txt
|
||||
|
||||
# NOTE: if you change the CLDR data, please run "ant cleanprod" to clean out the
|
||||
# temporary production data directory (usually $CLDR_DIR/../cldr-aux/production )
|
||||
# 4b. Build the new ICU4C data files; these include .txt files and .py files.
|
||||
# These new files will replace whatever was already present in the ICU4C sources.
|
||||
# This process uses the LdmlConverter in $TOOLS_ROOT/cldr/cldr-to-icu/;
|
||||
# see $TOOLS_ROOT/cldr/cldr-to-icu/README.txt
|
||||
#
|
||||
# This process will take several minutes, during most of which there will be no log
|
||||
# output (so do not assume nothing is happening). Keep a log so you can investigate
|
||||
# anything that looks suspicious.
|
||||
#
|
||||
# This also requires temporarily redefining CLDR_DIR.
|
||||
#
|
||||
# Note that "ant clean" should not be run before this. The build-icu-data.xml process
|
||||
# will automatically run its own "clean" step to delete files it cannot determine to
|
||||
# be ones that it would generate, except for pasts listed in <retain> elements such as
|
||||
# coll/de__PHONEBOOK.txt, coll/de_.txt, etc.
|
||||
#
|
||||
# Before this step, make any necessary changes to
|
||||
# build-icu-data.xml$TOOLS_ROOT/cldr/cldr-to-icu/ to add new locales, etc.
|
||||
|
||||
cd $TOOLS_ROOT/cldr/cldr-to-icu/
|
||||
CLDR_DIR=$CLDR_TMP_DIR/production ant -f build-icu-data.xml | tee /tmp/cldr-newData-builddataLog.txt
|
||||
|
||||
# 5. Check which data files have modifications, which have been added or removed
|
||||
# (if there are no changes, you may not need to proceed further). Make sure the
|
||||
# list seems reasonable.
|
||||
|
||||
cd $ICU4C_DIR/source/data
|
||||
git status
|
||||
|
||||
# 6. Fix any errors, investigate any warnings. Currently for example there are
|
||||
# a few warnings of the following form in rbnf files:
|
||||
# [cldr-build] Warning: no version match with: $Revision☹$
|
||||
# 5a. You may also want to check which files were modified in CLDR production data:
|
||||
|
||||
cd $CLDR_TMP_DIR
|
||||
git status
|
||||
|
||||
# 6. Fix any errors, investigate any warnings.
|
||||
#
|
||||
# Fixing may entail modifying CLDR source data or tools - for example,
|
||||
# updating the validSubLocales for collation data (file a bug if appropriate).
|
||||
# Repeat steps 4-5 until there are no build errors and no unexpected
|
||||
# warnings.
|
||||
# Fixing may entail modifying CLDR source data or TOOLS_ROOT config files or
|
||||
# tooling.
|
||||
|
||||
# 7. Now rebuild ICU4C with the new data and run make check tests.
|
||||
# Again, keep a log so you can investigate the errors.
|
||||
|
@ -217,7 +285,9 @@ make check 2>&1 | tee /tmp/icu4c-newData-makeCheck.txt
|
|||
# may fail.
|
||||
# Repeat steps 4-7 until there are no errors.
|
||||
|
||||
# 9. Now run the make check tests in exhaustive mode:
|
||||
# 9. You can also run the make check tests in exhaustive mode (these will also
|
||||
# be run automatically on the master branch after the merge resulting from this
|
||||
# integration):
|
||||
|
||||
cd $ICU4C_DIR/source
|
||||
export INTLTEST_OPTS="-e"
|
||||
|
@ -244,8 +314,8 @@ ICU_DATA_BUILDTOOL_OPTS=--include_uni_core_data ./runConfigureICU <platform>
|
|||
# 12b. Now build the jar files.
|
||||
cd $ICU4C_DIR/source/data
|
||||
# The following 2 lines are required to include the unicore data:
|
||||
make clean
|
||||
make -j6
|
||||
make clean
|
||||
make -j6
|
||||
make icu4j-data-install
|
||||
cd $ICU4C_DIR/source/test/testdata
|
||||
make icu4j-data-install
|
||||
|
@ -283,18 +353,29 @@ ant check 2>&1 | tee /tmp/icu4j-newData-antCheck.txt
|
|||
cd $HOME/icu/
|
||||
cd ..
|
||||
git status
|
||||
# add or remove as necessary
|
||||
# git add or remove as necessary
|
||||
# commit
|
||||
|
||||
# 16. For an official CLDR data integration into ICU, now tag the CLDR and
|
||||
# ICU sources with an appropriate CLDR milestone (you can check previous
|
||||
# tags for format), e.g.:
|
||||
|
||||
svn copy svn+ssh://unicode.org/repos/cldr/trunk \
|
||||
svn+ssh://unicode.org/repos/cldr/tags/release-NNN \
|
||||
--parents -m "cldrbug nnnn: tag cldr sources for NNN"
|
||||
|
||||
cd $HOME/icu/
|
||||
cd $CLDR_DIR
|
||||
git tag ...
|
||||
git push --tags
|
||||
|
||||
cd $HOME/icu
|
||||
git tag ...
|
||||
git push --tags
|
||||
|
||||
# 17. You should also commit and tag the update production data in CLDR_TMP_DIR
|
||||
# using the same tag as for CLDR_DIR above:
|
||||
|
||||
cd $CLDR_TMP_DIR
|
||||
# git add or remove as necessary
|
||||
# commit
|
||||
git tag ...
|
||||
git push --tags
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
|
||||
{
|
||||
"cldrVersion": "36.1",
|
||||
"cldrVersion": "37",
|
||||
"aliases": {
|
||||
"ars": "ar_SA",
|
||||
"in": "id",
|
||||
|
@ -21,12 +21,17 @@
|
|||
"sr_ME": "sr_Cyrl_ME",
|
||||
"sr_RS": "sr_Cyrl_RS",
|
||||
"yue": "zh_Hant",
|
||||
"yue_CN": "yue_Hans_CN",
|
||||
"yue_CN": "zh_Hans",
|
||||
"yue_Hans": "zh_Hans",
|
||||
"yue_Hans_CN": "zh_Hans",
|
||||
"yue_Hant": "zh_Hant",
|
||||
"zh_CN": "zh_Hans_CN",
|
||||
"zh_HK": "zh_Hant_HK",
|
||||
"zh_MO": "zh_Hant_MO",
|
||||
"zh_SG": "zh_Hans_SG",
|
||||
"zh_TW": "zh_Hant_TW"
|
||||
},
|
||||
"parents": {
|
||||
"ff_Adlm": "root"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
af{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{"&N<<<ʼn"}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
am{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{"[reorder Ethi]"}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
ar{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
compat{
|
||||
Sequence{
|
||||
|
@ -9,7 +9,7 @@ ar{
|
|||
"&ت<<ة<<<ﺔ<<<ﺓ"
|
||||
"&ي<<ى<<<ﯨ<<<ﯩ<<<ﻰ<<<ﻯ<<<ﲐ<<<ﱝ"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -397,7 +397,7 @@ ar{
|
|||
"&ۓ=ﮰ=ﮱ"
|
||||
"&ۀ=ﮤ=ﮥ"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
/**
|
||||
* generated alias target
|
||||
*/
|
||||
ja_JP{
|
||||
ar_SA{
|
||||
___{""}
|
||||
}
|
|
@ -1,5 +1,5 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
ars{
|
||||
"%%ALIAS"{"ar"}
|
||||
"%%ALIAS"{"ar_SA"}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
as{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -11,7 +11,7 @@ as{
|
|||
"&[before 1]ত<ৎ=ত্\u200D"
|
||||
"&হ<ক্ষ"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
az{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
search{
|
||||
Sequence{
|
||||
|
@ -9,7 +9,7 @@ az{
|
|||
"[import az-u-co-standard]"
|
||||
"[reorder others]"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -26,7 +26,7 @@ az{
|
|||
"&H<x<<<X"
|
||||
"&Z<w<<<W"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
be{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -9,7 +9,7 @@ be{
|
|||
"&Е<ё<<<Ё"
|
||||
"&у<ў<<<Ў"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
bg{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{"[reorder Cyrl]"}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
bn{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -9,7 +9,7 @@ bn{
|
|||
"[reorder Beng Deva Guru Gujr Orya Taml Telu Knda Mlym Sinh]"
|
||||
"&ঔ<ং<ঃ<ঁ"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
traditional{
|
||||
Sequence{
|
||||
|
@ -629,7 +629,7 @@ bn{
|
|||
"&যৌ<<<য়ৌ"
|
||||
"&য্<<<য়্"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
bo{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
bs{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
search{
|
||||
Sequence{"[import hr-u-co-search]"}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
standard{
|
||||
Sequence{"[import hr]"}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
bs_Cyrl{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{"[import sr]"}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
ca{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
search{
|
||||
Sequence{
|
||||
"[import und-u-co-search]"
|
||||
"&L<ŀ=l·<<<Ŀ=L·"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
ceb{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{"&N<ñ<<<Ñ<ng<<<Ng<<<NG"}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
chr{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{"[reorder Cher]"}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
cs{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -11,7 +11,7 @@ cs{
|
|||
"&S<š<<<Š"
|
||||
"&Z<ž<<<Ž"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
cy{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -14,7 +14,7 @@ cy{
|
|||
"&R<rh<<<Rh<<<RH"
|
||||
"&T<th<<<Th<<<TH"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
da{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
search{
|
||||
Sequence{
|
||||
|
@ -9,7 +9,7 @@ da{
|
|||
"[import da-u-co-standard]"
|
||||
"[caseFirst off]"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -21,7 +21,7 @@ da{
|
|||
"&[before 1]ǀ<æ<<<Æ<<ä<<<Ä<ø<<<Ø<<ö<<<Ö<<ő<<<Ő<å<<<Å<<<aa<<<Aa<<<AA"
|
||||
"&oe<<œ<<<Œ"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
de{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
phonebook{
|
||||
Sequence{
|
||||
|
@ -9,14 +9,14 @@ de{
|
|||
"&OE<<ö<<<Ö"
|
||||
"&UE<<ü<<<Ü"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
search{
|
||||
Sequence{
|
||||
"[import und-u-co-search]"
|
||||
"[import de-u-co-phonebk]"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
de_AT{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
phonebook{
|
||||
Sequence{
|
||||
|
@ -10,7 +10,7 @@ de_AT{
|
|||
"&u<ü<<<Ü"
|
||||
"&ss<ß<<<ẞ"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
dsb{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -14,7 +14,7 @@ dsb{
|
|||
"&S<š<<<Š<ś<<<Ś"
|
||||
"&Z<ž<<<Ž<ź<<<Ź"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
dz{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
ee{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -17,7 +17,7 @@ ee{
|
|||
"&T<ts<<<Ts<<<TS"
|
||||
"&V<ʋ<<<Ʋ"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
el{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{
|
||||
"[normalization on]"
|
||||
"[reorder Grek]"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
en{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
en_US{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
en_US_POSIX{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{
|
||||
"&A<*'\u0020'-'/'<*0-'@'<*ABCDEFGHIJKLMNOPQRSTUVWXYZ<*'['-'`'<*abcdefghijklmnopqrstuvwxyz"
|
||||
"<*'{'-'\u007F'"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
eo{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -12,7 +12,7 @@ eo{
|
|||
"&S<ŝ<<<Ŝ"
|
||||
"&U<ŭ<<<Ŭ"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,18 +1,18 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
es{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
search{
|
||||
Sequence{
|
||||
"[import und-u-co-search]"
|
||||
"&N<ñ<<<Ñ"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
standard{
|
||||
Sequence{"&N<ñ<<<Ñ"}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
traditional{
|
||||
Sequence{
|
||||
|
@ -20,7 +20,7 @@ es{
|
|||
"&C<ch<<<Ch<<<CH"
|
||||
"&l<ll<<<Ll<<<LL"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
et{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{
|
||||
"&[before 1]T<š<<<Š<z<<<Z<ž<<<Ž"
|
||||
"&[before 1]X<õ<<<Õ<ä<<<Ä<ö<<<Ö<ü<<<Ü"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
fa{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -16,7 +16,7 @@ fa{
|
|||
"&ۏ<ه<<ە<<ہ<<ة<<ۃ<<ۀ<<ھ"
|
||||
"&ی<<*ىےيېۑۍێ"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
fa_AF{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{"[import ps]"}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
5
icu4c/source/data/coll/ff.txt
Normal file
5
icu4c/source/data/coll/ff.txt
Normal file
|
@ -0,0 +1,5 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
ff{
|
||||
Version{"37"}
|
||||
}
|
149
icu4c/source/data/coll/ff_Adlm.txt
Normal file
149
icu4c/source/data/coll/ff_Adlm.txt
Normal file
|
@ -0,0 +1,149 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
ff_Adlm{
|
||||
%%Parent{"root"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{
|
||||
"&𞤀<𞤀𞥄"
|
||||
"&𞤀𞥄=𞤀𞤀"
|
||||
"&𞤢<𞤢𞥄"
|
||||
"&𞤢𞥄=𞤢𞤢"
|
||||
"&𞤁<𞤁𞥆"
|
||||
"&𞤁𞥆=𞤁𞤁"
|
||||
"&𞤣<𞤣𞥆"
|
||||
"&𞤣𞥆=𞤣𞤣"
|
||||
"&𞤂<𞤂𞥆"
|
||||
"&𞤂𞥆=𞤂𞤂"
|
||||
"&𞤤<𞤤𞥆"
|
||||
"&𞤤𞥆=𞤤𞤤"
|
||||
"&𞤃<𞤃𞥆"
|
||||
"&𞤃𞥆=𞤃𞤃"
|
||||
"&𞤥<𞤥𞥆"
|
||||
"&𞤥𞥆=𞤥𞤥"
|
||||
"&𞤄<𞤄𞥆"
|
||||
"&𞤄𞥆=𞤄𞤄"
|
||||
"&𞤦<𞤦𞥆"
|
||||
"&𞤦𞥆=𞤦𞤦"
|
||||
"&𞤅<𞤅𞥆"
|
||||
"&𞤅𞥆=𞤅𞤅"
|
||||
"&𞤧<𞤧𞥆"
|
||||
"&𞤧𞥆=𞤧𞤧"
|
||||
"&𞤆<𞤆𞥆"
|
||||
"&𞤆𞥆=𞤆𞤆"
|
||||
"&𞤨<𞤨𞥆"
|
||||
"&𞤨𞥆=𞤨𞤨"
|
||||
"&𞤇<𞤇𞥆"
|
||||
"&𞤇𞥆=𞤇𞤇"
|
||||
"&𞤩<𞤩𞥆"
|
||||
"&𞤩𞥆=𞤩𞤩"
|
||||
"&𞤈<𞤈𞥆"
|
||||
"&𞤈𞥆=𞤈𞤈"
|
||||
"&𞤪<𞤪𞥆"
|
||||
"&𞤪𞥆=𞤪𞤪"
|
||||
"&𞤊<𞤊𞥆"
|
||||
"&𞤊𞥆=𞤊𞤊"
|
||||
"&𞤬<𞤬𞥆"
|
||||
"&𞤬𞥆=𞤬𞤬"
|
||||
"&𞤍<𞤍𞥆"
|
||||
"&𞤍𞥆=𞤍𞤍"
|
||||
"&𞤯<𞤯𞥆"
|
||||
"&𞤯𞥆=𞤯𞤯"
|
||||
"&𞤎<𞤎𞥆"
|
||||
"&𞤎𞥆=𞤎𞤎"
|
||||
"&𞤰<𞤰𞥆"
|
||||
"&𞤰𞥆=𞤰𞤰"
|
||||
"&𞤏<𞤏𞥆"
|
||||
"&𞤏𞥆=𞤏𞤏"
|
||||
"&𞤱<𞤱𞥆"
|
||||
"&𞤱𞥆=𞤱𞤱"
|
||||
"&𞤐<𞤐𞥆"
|
||||
"&𞤐𞥆=𞤐𞤐"
|
||||
"&𞤲<𞤲𞥆"
|
||||
"&𞤲𞥆=𞤲𞤲"
|
||||
"&𞤑<𞤑𞥆"
|
||||
"&𞤑𞥆=𞤑𞤑"
|
||||
"&𞤳<𞤳𞥆"
|
||||
"&𞤳𞥆=𞤳𞤳"
|
||||
"&𞤒<𞤒𞥆"
|
||||
"&𞤒𞥆=𞤒𞤒"
|
||||
"&𞤴<𞤴𞥆"
|
||||
"&𞤴𞥆=𞤴𞤴"
|
||||
"&𞤔<𞤔𞥆"
|
||||
"&𞤔𞥆=𞤔𞤔"
|
||||
"&𞤶<𞤶𞥆"
|
||||
"&𞤶𞥆=𞤶𞤶"
|
||||
"&𞤕<𞤕𞥆"
|
||||
"&𞤕𞥆=𞤕𞤕"
|
||||
"&𞤷<𞤷𞥆"
|
||||
"&𞤷𞥆=𞤷𞤷"
|
||||
"&𞤖<𞤖𞥆"
|
||||
"&𞤖𞥆=𞤖𞤖"
|
||||
"&𞤸<𞤸𞥆"
|
||||
"&𞤸𞥆=𞤸𞤸"
|
||||
"&𞤗<𞤗𞥆"
|
||||
"&𞤗𞥆=𞤗𞤗"
|
||||
"&𞤹<𞤹𞥆"
|
||||
"&𞤹𞥆=𞤹𞤹"
|
||||
"&𞤘<𞤘𞥆"
|
||||
"&𞤘𞥆=𞤘𞤘"
|
||||
"&𞤺<𞤺𞥆"
|
||||
"&𞤺𞥆=𞤺𞤺"
|
||||
"&𞤙<𞤙𞥆"
|
||||
"&𞤙𞥆=𞤙𞤙"
|
||||
"&𞤻<𞤻𞥆"
|
||||
"&𞤻𞥆=𞤻𞤻"
|
||||
"&𞤚<𞤚𞥆"
|
||||
"&𞤚𞥆=𞤚𞤚"
|
||||
"&𞤼<𞤼𞥆"
|
||||
"&𞤼𞥆=𞤼𞤼"
|
||||
"&𞤛<𞤛𞥆"
|
||||
"&𞤛𞥆=𞤛𞤛"
|
||||
"&𞤽<𞤽𞥆"
|
||||
"&𞤽𞥆=𞤽𞤽"
|
||||
"&𞤜<𞤜𞥆"
|
||||
"&𞤜𞥆=𞤜𞤜"
|
||||
"&𞤾<𞤾𞥆"
|
||||
"&𞤾𞥆=𞤾𞤾"
|
||||
"&𞤝<𞤝𞥆"
|
||||
"&𞤝𞥆=𞤝𞤝"
|
||||
"&𞤿<𞤿𞥆"
|
||||
"&𞤿𞥆=𞤿𞤿"
|
||||
"&𞤞<𞤞𞥆"
|
||||
"&𞤞𞥆=𞤞𞤞"
|
||||
"&𞥀<𞥀𞥆"
|
||||
"&𞥀𞥆=𞥀𞥀"
|
||||
"&𞤟<𞤟𞥆"
|
||||
"&𞤟𞥆=𞤟𞤟"
|
||||
"&𞥁<𞥁𞥆"
|
||||
"&𞥁𞥆=𞥁𞥁"
|
||||
"&𞤠<𞤠𞥆"
|
||||
"&𞤠𞥆=𞤠𞤠"
|
||||
"&𞥂<𞥂𞥆"
|
||||
"&𞥂𞥆=𞥂𞥂"
|
||||
"&𞤡<𞤡𞥆"
|
||||
"&𞤡𞥆=𞤡𞤡"
|
||||
"&𞥃<𞥃𞥆"
|
||||
"&𞥃𞥆=𞥃𞥃"
|
||||
"&𞤉<𞤉𞥅"
|
||||
"&𞤉𞥅<<𞤉𞤉"
|
||||
"&𞤫<𞤫𞥅"
|
||||
"&𞤫𞥅<<𞤫𞤫"
|
||||
"&𞤋<𞤋𞥅"
|
||||
"&𞤋𞥅<<𞤋𞤋"
|
||||
"&𞤭<𞤭𞥅"
|
||||
"&𞤭𞥅<<𞤭𞤭"
|
||||
"&𞤌<𞤌𞥅"
|
||||
"&𞤌𞥅<<𞤌𞤌"
|
||||
"&𞤮<𞤮𞥅"
|
||||
"&𞤮𞥅<<𞤮𞤮"
|
||||
"&𞤓<𞤓𞥅"
|
||||
"&𞤓𞥅<<𞤓𞤓"
|
||||
"&𞤵<𞤵𞥅"
|
||||
"&𞤵𞥅<<𞤵𞤵"
|
||||
}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,14 +1,14 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
fi{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
search{
|
||||
Sequence{
|
||||
"[import und-u-co-search]"
|
||||
"[import fi-u-co-trad]"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -20,7 +20,7 @@ fi{
|
|||
"&Z\u0335<<ʒ<<<Ʒ"
|
||||
"&[before 1]ǀ<å<<<Å<ä<<<Ä<<æ<<<Æ<ö<<<Ö<<ø<<<Ø"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
traditional{
|
||||
Sequence{
|
||||
|
@ -31,7 +31,7 @@ fi{
|
|||
"&Y<<ü<<<Ü<<ű<<<Ű"
|
||||
"&[before 1]ǀ<å<<<Å<ä<<<Ä<<æ<<<Æ<ö<<<Ö<<ø<<<Ø<<ő<<<Ő<<õ<<<Õ<<œ<<<Œ"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
fil{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{"&N<ñ<<<Ñ<ng<<<Ng<<<NG"}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
fo{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
search{
|
||||
Sequence{
|
||||
"[import und-u-co-search]"
|
||||
"[import fo-u-co-standard]"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -18,7 +18,7 @@ fo{
|
|||
"&Y<<ü<<<Ü<<ű<<<Ű"
|
||||
"&[before 1]ǀ<æ<<<Æ<<ä<<<Ä<<ę<<<Ę<ø<<<Ø<<ö<<<Ö<<ő<<<Ő<<œ<<<Œ<å<<<Å<<<aa<<<Aa<<<AA"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
fr{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
fr_CA{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{"[backwards 2]"}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
ga{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
gl{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
search{
|
||||
Sequence{"[import es-u-co-search]"}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
standard{
|
||||
Sequence{"[import es]"}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
gu{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -9,7 +9,7 @@ gu{
|
|||
"[reorder Gujr Deva Beng Guru Orya Taml Telu Knda Mlym Sinh]"
|
||||
"&ૐ<ં<<ઁ<ઃ"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
ha{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -12,7 +12,7 @@ ha{
|
|||
"&T<ts<<<Ts<<<TS"
|
||||
"&Y<ƴ<<<ʼy<<<''y<<<Ƴ<<<ʼY<<<''Y"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
haw{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{
|
||||
"&a<e<<<E<i<<<I<o<<<O<u<<<U"
|
||||
"&w<ʻ"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
he{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
search{
|
||||
Sequence{
|
||||
|
@ -11,7 +11,7 @@ he{
|
|||
"&״"
|
||||
"<<'\u0022'"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -20,7 +20,7 @@ he{
|
|||
"&[before 2]''<<׳"
|
||||
"&[before 2]'\u0022'<<״"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
hi{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -9,7 +9,7 @@ hi{
|
|||
"[reorder Deva Beng Guru Gujr Orya Taml Telu Knda Mlym Sinh]"
|
||||
"&ॐ<ं<<ँ<ः"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
// © 2016 and later: Unicode, Inc. and others.
|
||||
// License & terms of use: http://www.unicode.org/copyright.html#License
|
||||
hr{
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
collations{
|
||||
search{
|
||||
Sequence{
|
||||
|
@ -9,7 +9,7 @@ hr{
|
|||
"[import hr-u-co-standard]"
|
||||
"[reorder others]"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
standard{
|
||||
Sequence{
|
||||
|
@ -21,7 +21,7 @@ hr{
|
|||
"&S<š<<<Š"
|
||||
"&Z<ž<<<Ž"
|
||||
}
|
||||
Version{"36.1"}
|
||||
Version{"37"}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue