summaryrefslogtreecommitdiffstats
path: root/third_party
diff options
context:
space:
mode:
authorplundblad <plundblad@chromium.org>2014-09-24 08:47:33 -0700
committerCommit bot <commit-bot@chromium.org>2014-09-24 15:47:42 +0000
commit9cebaadae0237f7fcf7285cbb74903732ab1c194 (patch)
treea6f296c037c3a228c476be7d3a5668498ecd1ce8 /third_party
parentc84602a0c635053a14fc0e06d4dd0b8e1ce043fa (diff)
downloadchromium_src-9cebaadae0237f7fcf7285cbb74903732ab1c194.zip
chromium_src-9cebaadae0237f7fcf7285cbb74903732ab1c194.tar.gz
chromium_src-9cebaadae0237f7fcf7285cbb74903732ab1c194.tar.bz2
Make undefined Unicode characters show up in a nicer way in braille.
Instead of a cryptic Unicode code point, this makes characters that are not defined by the current braille table show up as dot 8, which should be a rarely used cell in most or all braille tables. While it might be nice to give users more information than a single 'unknown character' dot, this is the only feasable alternative to the hexadecimal number (\xHHHH). BUG=321715 Review URL: https://codereview.chromium.org/589133002 Cr-Commit-Position: refs/heads/master@{#296424}
Diffstat (limited to 'third_party')
-rw-r--r--third_party/liblouis/README.chromium4
-rw-r--r--third_party/liblouis/cvox-common.cti15
-rwxr-xr-xthird_party/liblouis/liblouis_list_tables.py9
-rw-r--r--third_party/liblouis/liblouis_nacl.gyp2
-rw-r--r--third_party/liblouis/nacl_wrapper/liblouis_instance.cc34
-rw-r--r--third_party/liblouis/nacl_wrapper/liblouis_instance.h4
-rw-r--r--third_party/liblouis/nacl_wrapper/liblouis_wrapper.cc10
-rw-r--r--third_party/liblouis/nacl_wrapper/liblouis_wrapper.h4
-rw-r--r--third_party/liblouis/nacl_wrapper/translation_params.h2
-rw-r--r--third_party/liblouis/tables.json136
10 files changed, 121 insertions, 99 deletions
diff --git a/third_party/liblouis/README.chromium b/third_party/liblouis/README.chromium
index 63d17d1..a40a4e4 100644
--- a/third_party/liblouis/README.chromium
+++ b/third_party/liblouis/README.chromium
@@ -19,5 +19,7 @@ Local Modifications:
* Add manually created liblouis.h with compiler warning fix.
* Add minimal config.h.
-* Add tables.json a list of tables with metadata.
+* Add tables.json, a list of tables with metadata.
+* Add cvox-common.cti with common definitions for all tables mentioned in
+ tables.json.
* Add a wrapper to expose the library in native client.
diff --git a/third_party/liblouis/cvox-common.cti b/third_party/liblouis/cvox-common.cti
new file mode 100644
index 0000000..b9b2347
--- /dev/null
+++ b/third_party/liblouis/cvox-common.cti
@@ -0,0 +1,15 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# Common definitions appended to all braille tables used by liblouis
+# in ChromeVox.
+
+# All tables get the Unicode braille patterns. They are included by some
+# tables, but not consistently, and adding them again is harmless.
+include braille-patterns.cti
+
+# Use dot 8 to represent undefined Unicode characters.
+# While not ideal, this is much preferable to the built-in default of
+# the code point value preceded by a backslash.
+undefined 8
diff --git a/third_party/liblouis/liblouis_list_tables.py b/third_party/liblouis/liblouis_list_tables.py
index e42e5da..9cd3fb8 100755
--- a/third_party/liblouis/liblouis_list_tables.py
+++ b/third_party/liblouis/liblouis_list_tables.py
@@ -66,7 +66,9 @@ def DoMain(argv):
parser.prog = 'liblouis_list_tables'
parser.set_usage('usage: %prog [options] listfile')
parser.add_option('-D', '--directory', dest='directories',
- action='append', help='Where to search for table files')
+ action='append', help='Where to search for table files')
+ parser.add_option('-e', '--extra_file', dest='extra_files', action='append',
+ default=[], help='Extra liblouis table file to process')
(options, args) = parser.parse_args(argv)
if len(args) != 1:
@@ -77,7 +79,10 @@ def DoMain(argv):
tables = LoadTablesFile(args[0])
output_set = set()
for table in tables:
- ProcessFile(output_set, table['fileName'], options.directories)
+ for name in table['fileNames'].split(','):
+ ProcessFile(output_set, name, options.directories)
+ for name in options.extra_files:
+ ProcessFile(output_set, name, options.directories)
return '\n'.join(output_set)
diff --git a/third_party/liblouis/liblouis_nacl.gyp b/third_party/liblouis/liblouis_nacl.gyp
index e41855b..f7ada94 100644
--- a/third_party/liblouis/liblouis_nacl.gyp
+++ b/third_party/liblouis/liblouis_nacl.gyp
@@ -7,7 +7,7 @@
'braille_test_data_dir': '<(PRODUCT_DIR)/chromevox_test_data/braille',
'braille_chromevox_dir': '<(PRODUCT_DIR)/resources/chromeos/chromevox/chromevox/background/braille',
'table_files': [
- '>!@pymod_do_main(liblouis_list_tables -D overrides/tables -D src/tables tables.json)',
+ '>!@pymod_do_main(liblouis_list_tables -D . -D src/tables -e cvox-common.cti tables.json)',
],
},
# x86 targets build both 32 and 64 bit binaries by default. We only need
diff --git a/third_party/liblouis/nacl_wrapper/liblouis_instance.cc b/third_party/liblouis/nacl_wrapper/liblouis_instance.cc
index e92b9a0..7346a0f 100644
--- a/third_party/liblouis/nacl_wrapper/liblouis_instance.cc
+++ b/third_party/liblouis/nacl_wrapper/liblouis_instance.cc
@@ -104,7 +104,7 @@ static const char kCommandKey[] = "command";
static const char kMessageIdKey[] = "message_id";
static const char kInReplyToKey[] = "in_reply_to";
static const char kErrorKey[] = "error";
-static const char kTableNameKey[] = "table_name";
+static const char kTableNamesKey[] = "table_names";
static const char kSuccessKey[] = "success";
static const char kTextKey[] = "text";
static const char kCellsKey[] = "cells";
@@ -208,23 +208,23 @@ void LibLouisInstance::PostError(const std::string& error_message,
void LibLouisInstance::HandleCheckTable(const Json::Value& message,
const std::string& message_id) {
- Json::Value table_name = message[kTableNameKey];
- if (!table_name.isString()) {
- PostError("expected table_name to be a string", message_id);
+ Json::Value table_names = message[kTableNamesKey];
+ if (!table_names.isString()) {
+ PostError("expected table_names to be a string", message_id);
return;
}
PostWorkToBackground(cc_factory_.NewCallback(
&LibLouisInstance::CheckTableInBackground,
- table_name.asString(), message_id));
+ table_names.asString(), message_id));
}
void LibLouisInstance::CheckTableInBackground(int32_t result,
- const std::string& table_name, const std::string& message_id) {
+ const std::string& table_names, const std::string& message_id) {
if (result != PP_OK) {
PostError("failed to transfer call to background thread", message_id);
return;
}
- bool success = liblouis_.CheckTable(table_name);
+ bool success = liblouis_.CheckTable(table_names);
Json::Value reply(Json::objectValue);
reply[kSuccessKey] = success;
PostReply(reply, message_id);
@@ -232,11 +232,11 @@ void LibLouisInstance::CheckTableInBackground(int32_t result,
void LibLouisInstance::HandleTranslate(const Json::Value& message,
const std::string& message_id) {
- Json::Value table_name = message[kTableNameKey];
+ Json::Value table_names = message[kTableNamesKey];
Json::Value text = message[kTextKey];
Json::Value cursor_position = message[kCursorPositionKey];
- if (!table_name.isString()) {
- PostError("expected table_name to be a string", message_id);
+ if (!table_names.isString()) {
+ PostError("expected table_names to be a string", message_id);
return;
} else if (!text.isString()) {
PostError("expected text to be a string", message_id);
@@ -246,7 +246,7 @@ void LibLouisInstance::HandleTranslate(const Json::Value& message,
return;
}
TranslationParams params;
- params.table_name = table_name.asString();
+ params.table_names = table_names.asString();
params.text = text.asString();
params.cursor_position = cursor_position.isIntegral() ?
cursor_position.asInt() : -1;
@@ -284,10 +284,10 @@ void LibLouisInstance::TranslateInBackground(int32_t result,
void LibLouisInstance::HandleBackTranslate(const Json::Value& message,
const std::string& message_id) {
- Json::Value table_name = message[kTableNameKey];
+ Json::Value table_names = message[kTableNamesKey];
Json::Value cells = message[kCellsKey];
- if (!table_name.isString()) {
- PostError("expected table_name to be a string", message_id);
+ if (!table_names.isString()) {
+ PostError("expected table_names to be a string", message_id);
return;
} else if (!cells.isString()) {
PostError("expected cells to be a string", message_id);
@@ -300,18 +300,18 @@ void LibLouisInstance::HandleBackTranslate(const Json::Value& message,
}
PostWorkToBackground(cc_factory_.NewCallback(
&LibLouisInstance::BackTranslateInBackground,
- table_name.asString(), cells_vector, message_id));
+ table_names.asString(), cells_vector, message_id));
}
void LibLouisInstance::BackTranslateInBackground(int32_t result,
- const std::string& table_name, const std::vector<unsigned char>& cells,
+ const std::string& table_names, const std::vector<unsigned char>& cells,
const std::string& message_id) {
if (result != PP_OK) {
PostError("failed to transfer call to background thread", message_id);
return;
}
std::string text;
- bool success = liblouis_.BackTranslate(table_name, cells, &text);
+ bool success = liblouis_.BackTranslate(table_names, cells, &text);
Json::Value reply(Json::objectValue);
reply[kSuccessKey] = success;
if (success) {
diff --git a/third_party/liblouis/nacl_wrapper/liblouis_instance.h b/third_party/liblouis/nacl_wrapper/liblouis_instance.h
index d202a76..e106405 100644
--- a/third_party/liblouis/nacl_wrapper/liblouis_instance.h
+++ b/third_party/liblouis/nacl_wrapper/liblouis_instance.h
@@ -60,7 +60,7 @@ class LibLouisInstance : public pp::Instance {
const std::string& message_id);
// Called to check a table on a background thread.
- void CheckTableInBackground(int32_t result, const std::string& table_name,
+ void CheckTableInBackground(int32_t result, const std::string& table_names,
const std::string& message_id);
// Parses and executes a translation command.
@@ -77,7 +77,7 @@ class LibLouisInstance : public pp::Instance {
// Called to back-translate text on a background thread.
void BackTranslateInBackground(int32_t result,
- const std::string& table_name, const std::vector<unsigned char>& cells,
+ const std::string& table_names, const std::vector<unsigned char>& cells,
const std::string& message_id);
LibLouisWrapper liblouis_;
diff --git a/third_party/liblouis/nacl_wrapper/liblouis_wrapper.cc b/third_party/liblouis/nacl_wrapper/liblouis_wrapper.cc
index 2fff14e..e3384a8 100644
--- a/third_party/liblouis/nacl_wrapper/liblouis_wrapper.cc
+++ b/third_party/liblouis/nacl_wrapper/liblouis_wrapper.cc
@@ -109,8 +109,8 @@ const char* LibLouisWrapper::tables_dir() const {
return "/liblouis/tables";
}
-bool LibLouisWrapper::CheckTable(const std::string& table_name) {
- return lou_getTable(table_name.c_str()) != NULL;
+bool LibLouisWrapper::CheckTable(const std::string& table_names) {
+ return lou_getTable(table_names.c_str()) != NULL;
}
bool LibLouisWrapper::Translate(const TranslationParams& params,
@@ -152,7 +152,7 @@ bool LibLouisWrapper::Translate(const TranslationParams& params,
outlen = outalloc;
outbuf.resize(outalloc);
braille_to_text.resize(outalloc);
- int result = lou_translate(params.table_name.c_str(),
+ int result = lou_translate(params.table_names.c_str(),
&inbuf[0], &inlen, &outbuf[0], &outlen,
NULL /* typeform */, NULL /* spacing */,
&text_to_braille[0], &braille_to_text[0],
@@ -188,7 +188,7 @@ bool LibLouisWrapper::Translate(const TranslationParams& params,
return true;
}
-bool LibLouisWrapper::BackTranslate(const std::string& table_name,
+bool LibLouisWrapper::BackTranslate(const std::string& table_names,
const std::vector<unsigned char>& cells, std::string* out) {
std::vector<widechar> inbuf;
inbuf.reserve(cells.size());
@@ -215,7 +215,7 @@ bool LibLouisWrapper::BackTranslate(const std::string& table_name,
outbuf.resize(outalloc);
int result = lou_backTranslateString(
- table_name.c_str(), &inbuf[0], &inlen, &outbuf[0], &outlen,
+ table_names.c_str(), &inbuf[0], &inlen, &outbuf[0], &outlen,
NULL /* typeform */, NULL /* spacing */, dotsIO /* mode */);
if (result == 0) {
// TODO(jbroman): log this
diff --git a/third_party/liblouis/nacl_wrapper/liblouis_wrapper.h b/third_party/liblouis/nacl_wrapper/liblouis_wrapper.h
index dac2b4a..46c4816 100644
--- a/third_party/liblouis/nacl_wrapper/liblouis_wrapper.h
+++ b/third_party/liblouis/nacl_wrapper/liblouis_wrapper.h
@@ -40,13 +40,13 @@ class LibLouisWrapper {
// Loads, checks, and compiles the requested table.
// Returns true on success.
- bool CheckTable(const std::string& table_name);
+ bool CheckTable(const std::string& table_names);
// Translates the given text and cursor position into braille.
bool Translate(const TranslationParams& params, TranslationResult* out);
// Translates the given braille cells into text.
- bool BackTranslate(const std::string& table_name,
+ bool BackTranslate(const std::string& table_names,
const std::vector<unsigned char>& cells, std::string* out);
private:
diff --git a/third_party/liblouis/nacl_wrapper/translation_params.h b/third_party/liblouis/nacl_wrapper/translation_params.h
index 3505520..cb1938e 100644
--- a/third_party/liblouis/nacl_wrapper/translation_params.h
+++ b/third_party/liblouis/nacl_wrapper/translation_params.h
@@ -22,7 +22,7 @@ namespace liblouis_nacl {
// Struct containing the parameters of translation.
struct TranslationParams {
public:
- std::string table_name;
+ std::string table_names;
std::string text;
int cursor_position;
};
diff --git a/third_party/liblouis/tables.json b/third_party/liblouis/tables.json
index a93e9ac..0d4ceca 100644
--- a/third_party/liblouis/tables.json
+++ b/third_party/liblouis/tables.json
@@ -4,128 +4,128 @@
"locale": "ar",
"dots": "6",
"grade": "1",
- "fileName": "ar-ar-g1.utb"
+ "fileNames": "ar-ar-g1.utb"
},
{
"id": "bg-comp8",
"locale": "bg",
"dots": "8",
- "fileName": "bg.ctb"
+ "fileNames": "bg.ctb"
},
{
"id": "ca-g1",
"locale": "ca",
"dots": "6",
"grade": "1",
- "fileName": "ca-g1.ctb"
+ "fileNames": "ca-g1.ctb"
},
{
"id": "cs-g1",
"locale": "cs",
"dots": "6",
"grade": "1",
- "fileName": "cs-g1.ctb"
+ "fileNames": "cs-g1.ctb"
},
{
"id": "da-comp8",
"locale": "da",
"dots": "8",
- "fileName": "da-dk-g18.utb"
+ "fileNames": "da-dk-g18.utb"
},
{
"id": "da-g1",
"locale": "da",
"dots": "6",
"grade": 1,
- "fileName": "da-dk-g16.utb"
+ "fileNames": "da-dk-g16.utb"
},
{
"id": "da-g2",
"locale": "da",
"dots": "6",
"grade": 2,
- "fileName": "da-dk-g26.ctb"
+ "fileNames": "da-dk-g26.ctb"
},
{
"id": "de-CH-g0",
"locale": "de_CH",
"dots": "6",
"grade": "0",
- "fileName": "de-ch-g0.utb"
+ "fileNames": "de-ch-g0.utb"
},
{
"id": "de-CH-g1",
"locale": "de_CH",
"dots": "6",
"grade": "1",
- "fileName": "de-ch-g1.ctb"
+ "fileNames": "de-ch-g1.ctb"
},
{
"id": "de-CH-g2",
"locale": "de_CH",
"dots": "6",
"grade": "2",
- "fileName": "de-ch-g2.ctb"
+ "fileNames": "de-ch-g2.ctb"
},
{
"id": "de-DE-g0",
"locale": "de_DE",
"dots": "6",
"grade": "0",
- "fileName": "de-de-g0.utb"
+ "fileNames": "de-de-g0.utb"
},
{
"id": "de-DE-g1",
"locale": "de_DE",
"dots": "6",
"grade": "1",
- "fileName": "de-de-g1.ctb"
+ "fileNames": "de-de-g1.ctb"
},
{
"id": "de-DE-g2",
"locale": "de_DE",
"dots": "6",
"grade": "2",
- "fileName": "de-de-g2.ctb"
+ "fileNames": "de-de-g2.ctb"
},
{
"id": "de-comp8",
"locale": "de",
"dots": "8",
- "fileName": "de-de-comp8.ctb"
+ "fileNames": "de-de-comp8.ctb"
},
{
"id": "el-g1",
"locale": "el",
"dots": "6",
"grade": "1",
- "fileName": "gr-gr-g1.utb"
+ "fileNames": "gr-gr-g1.utb"
},
{
"id": "en-CA-comp8",
"locale": "en_CA",
"dots": "8",
- "fileName": "en_CA.ctb"
+ "fileNames": "en_CA.ctb"
},
{
"id": "en-GB-comp8",
"locale": "en_GB",
"dots": "8",
- "fileName": "en-gb-comp8.ctb"
+ "fileNames": "en-gb-comp8.ctb"
},
{
"id": "en-GB-g1",
"locale": "en_GB",
"dots": "6",
"grade": "1",
- "fileName": "en-gb-g1.utb"
+ "fileNames": "en-gb-g1.utb"
},
{
"id": "en-GB-g2",
"locale": "en_GB",
"dots": "6",
"grade": "2",
- "fileName": "en-GB-g2.ctb"
+ "fileNames": "en-GB-g2.ctb"
},
{
"id": "en-UEB-g1",
@@ -133,7 +133,7 @@
"variant": "UEB",
"dots": "6",
"grade": 1,
- "fileName": "en-ueb-g1.ctb"
+ "fileNames": "en-ueb-g1.ctb"
},
{
"id": "en-UEB-g2",
@@ -141,314 +141,314 @@
"variant": "UEB",
"dots": "6",
"grade": 2,
- "fileName": "en-ueb-g2.ctb"
+ "fileNames": "en-ueb-g2.ctb"
},
{
"id": "en-US-comp8",
"locale": "en_US",
"dots": "8",
- "fileName": "en-us-comp8.ctb"
+ "fileNames": "en-us-comp8.ctb"
},
{
"id": "en-US-g1",
"locale": "en_US",
"dots": "6",
"grade": "1",
- "fileName": "en-us-g1.ctb"
+ "fileNames": "en-us-g1.ctb"
},
{
"id": "en-US-g2",
"locale": "en_US",
"dots": "6",
"grade": "2",
- "fileName": "en-us-g2.ctb"
+ "fileNames": "en-us-g2.ctb"
},
{
"id": "es-comp8",
"locale": "es",
"dots": "8",
- "fileName": "Es-Es-G0.utb"
+ "fileNames": "Es-Es-G0.utb"
},
{
"id": "es-g1",
"locale": "es",
"dots": "6",
"grade": "1",
- "fileName": "es-g1.ctb"
+ "fileNames": "es-g1.ctb"
},
{
"id": "et-comp8",
"locale": "et",
"dots": "8",
- "fileName": "et-g0.utb"
+ "fileNames": "et-g0.utb"
},
{
"id": "fr-CA-g1",
"locale": "fr_CA",
"dots": "6",
"grade": "1",
- "fileName": "fr-ca-g1.utb"
+ "fileNames": "fr-ca-g1.utb"
},
{
"id": "fr-CA-g2",
"locale": "fr_CA",
"dots": "6",
"grade": "2",
- "fileName": "Fr-Ca-g2.ctb"
+ "fileNames": "Fr-Ca-g2.ctb"
},
{
"id": "fr-FR-g1",
"locale": "fr_FR",
"dots": "6",
"grade": "1",
- "fileName": "fr-fr-g1.utb"
+ "fileNames": "fr-fr-g1.utb"
},
{
"id": "fr-FR-g2",
"locale": "fr_FR",
"dots": "6",
"grade": "2",
- "fileName": "Fr-Fr-g2.ctb"
+ "fileNames": "Fr-Fr-g2.ctb"
},
{
"id": "fr-comp8",
"locale": "fr",
"dots": "8",
- "fileName": "fr-2007.ctb"
+ "fileNames": "fr-2007.ctb"
},
{
"id": "fi-comp8",
"locale": "fi",
"dots": "8",
- "fileName": "fi-fi-8dot.ctb"
+ "fileNames": "fi-fi-8dot.ctb"
},
{
"id": "he-comp8",
"locale": "he",
"dots": "8",
- "fileName": "he.ctb"
+ "fileNames": "he.ctb"
},
{
"id": "hi-g1",
"locale": "hi",
"dots": "6",
"grade": "1",
- "fileName": "hi-in-g1.utb"
+ "fileNames": "hi-in-g1.utb"
},
{
"id": "hr-comp8",
"locale": "hr",
"dots": "8",
- "fileName": "hr.ctb"
+ "fileNames": "hr.ctb"
},
{
"id": "hu-comp8",
"locale": "hu",
"dots": "8",
- "fileName": "hu-hu-comp8.ctb"
+ "fileNames": "hu-hu-comp8.ctb"
},
{
"id": "hu-g1",
"locale": "hu",
"dots": "6",
"grade": "1",
- "fileName": "hu-hu-g1.ctb"
+ "fileNames": "hu-hu-g1.ctb"
},
{
"id": "is-comp8",
"locale": "is",
"dots": "8",
- "fileName": "is.ctb"
+ "fileNames": "is.ctb"
},
{
"id": "it-comp8",
"locale": "it",
"dots": "8",
- "fileName": "it-it-comp8.utb"
+ "fileNames": "it-it-comp8.utb"
},
{
"id": "it-g1",
"locale": "it",
"dots": "6",
"grade": "1",
- "fileName": "it-it-comp6.utb"
+ "fileNames": "it-it-comp6.utb"
},
{
"id": "ko-g1",
"locale": "ko",
"dots": "6",
"grade": 1,
- "fileName": "ko-g1.ctb"
+ "fileNames": "ko-g1.ctb"
},
{
"id": "ko-g2",
"locale": "ko",
"dots": "6",
"grade": 2,
- "fileName": "ko-g2.ctb"
+ "fileNames": "ko-g2.ctb"
},
{
"id": "lv-g1",
"locale": "lv",
"dots": "6",
"grade": "1",
- "fileName": "Lv-Lv-g1.utb"
+ "fileNames": "Lv-Lv-g1.utb"
},
{
"id": "lt-comp8",
"locale": "lt",
"dots": "8",
- "fileName": "lt.ctb"
+ "fileNames": "lt.ctb"
},
{
"id": "nb-comp8",
"locale": "nb",
"dots": "8",
- "fileName": "no-no.ctb"
+ "fileNames": "no-no.ctb"
},
{
"id": "nb-g0",
"locale": "nb",
"dots": "6",
"grade": "0",
- "fileName": "no-no-g0.utb"
+ "fileNames": "no-no-g0.utb"
},
{
"id": "nb-g1",
"locale": "nb",
"dots": "6",
"grade": "1",
- "fileName": "no-no-g1.ctb"
+ "fileNames": "no-no-g1.ctb"
},
{
"id": "nb-g2",
"locale": "nb",
"dots": "6",
"grade": "2",
- "fileName": "no-no-g2.ctb"
+ "fileNames": "no-no-g2.ctb"
},
{
"id": "nb-g3",
"locale": "nb",
"dots": "6",
"grade": "3",
- "fileName": "no-no-g3.ctb"
+ "fileNames": "no-no-g3.ctb"
},
{
"id": "nl-g1",
"locale": "nl",
"dots": "6",
"grade": "1",
- "fileName": "Nl-Nl-g1.utb"
+ "fileNames": "Nl-Nl-g1.utb"
},
{
"id": "pl-g1",
"locale": "pl",
"dots": "6",
"grade": "1",
- "fileName": "Pl-Pl-g1.utb"
+ "fileNames": "Pl-Pl-g1.utb"
},
{
"id": "pt-comp8",
"locale": "pt",
"dots": "8",
- "fileName": "pt-pt-comp8.ctb"
+ "fileNames": "pt-pt-comp8.ctb"
},
{
"id": "pt-g1",
"locale": "pt",
"dots": "6",
"grade": "1",
- "fileName": "pt-pt-g1.utb"
+ "fileNames": "pt-pt-g1.utb"
},
{
"id": "pt-g2",
"locale": "pt",
"dots": "6",
"grade": "2",
- "fileName": "pt-pt-g2.ctb"
+ "fileNames": "pt-pt-g2.ctb"
},
{
"id": "ro-comp8",
"locale": "ro",
"dots": "8",
- "fileName": "ro.ctb"
+ "fileNames": "ro.ctb"
},
{
"id": "ru-comp8",
"locale": "ru",
"dots": "8",
- "fileName": "ru-compbrl.ctb"
+ "fileNames": "ru-compbrl.ctb"
},
{
"id": "ru-g1",
"locale": "ru",
"dots": "6",
"grade": "1",
- "fileName": "ru-litbrl.ctb"
+ "fileNames": "ru-litbrl.ctb"
},
{
"id": "sk-g1",
"locale": "sk",
"dots": "6",
"grade": "1",
- "fileName": "sk-sk-g1.utb"
+ "fileNames": "sk-sk-g1.utb"
},
{
"id": "sl-comp8",
"locale": "sl",
"dots": "8",
- "fileName": "sl-si-comp8.ctb"
+ "fileNames": "sl-si-comp8.ctb"
},
{
"id": "sl-g1",
"locale": "sl",
"dots": "6",
"grade": "1",
- "fileName": "sl-si-g1.utb"
+ "fileNames": "sl-si-g1.utb"
},
{
"id": "sr-g1",
"locale": "sr",
"dots": "6",
"grade": "1",
- "fileName": "sr-g1.ctb"
+ "fileNames": "sr-g1.ctb"
},
{
"id": "sv-comp8",
"locale": "sv",
"dots": "8",
- "fileName": "sv-1996.ctb"
+ "fileNames": "sv-1996.ctb"
},
{
"id": "sv-g1",
"locale": "sv",
"dots": "6",
"grade": "1",
- "fileName": "Se-Se-g1.utb"
+ "fileNames": "Se-Se-g1.utb"
},
{
"id": "tr-comp8",
"locale": "tr",
"dots": "8",
- "fileName": "tr.ctb"
+ "fileNames": "tr.ctb"
},
{
"id": "vi-comp8",
"locale": "vi",
"dots": "8",
- "fileName": "vi.ctb"
+ "fileNames": "vi.ctb"
},
{
"id": "zh-TW-comp8",
"locale": "zh_TW",
"dots": "8",
- "fileName": "zh-tw.ctb"
+ "fileNames": "zh-tw.ctb"
},
{
"id": "zh-comp8",
"locale": "zh",
"dots": "8",
- "fileName": "zh-hk.ctb"
+ "fileNames": "zh-hk.ctb"
}
]