# Copyright 2023 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import("//build/config/chromeos/ui_mode.gni")
import("//mojo/public/tools/bindings/mojom.gni")
import("//tools/grit/grit_rule.gni")
assert(is_chromeos_ash, "Non-Chrome-OS builds must not depend on //ash")
mojom("mojo_bindings") {
sources = [ "emoji_search.mojom" ]
public_deps = [ "//mojo/public/mojom/base" ]
webui_module_path = "/"
}
source_set("unit_tests") {
testonly = true
deps = [
":emoji",
":resources",
"//base/test:test_support",
"//build:branding_buildflags",
"//testing/gtest",
"//ui/base:test_support",
]
sources = [ "emoji_search_unittest.cc" ]
}
action_foreach("emoji_data") {
script = "tools/emoji_data.py"
metadata_json = [
"//third_party/emoji-metadata/src/emoji_15_0_ordering.json",
"./emoji_test_ordering.json",
]
keyword_xmls = [
# later keywords will override earlier keywords for a particular emoji.
"//third_party/cldr/src/common/annotations/en.xml",
"//third_party/cldr/src/common/annotations/en_001.xml",
"//third_party/cldr/src/common/annotationsDerived/en.xml",
"//third_party/cldr/src/common/annotationsDerived/en_001.xml",
]
merged_json = "$target_gen_dir/{{source_name_part}}_start.json"
sources = metadata_json
inputs = keyword_xmls
outputs = [ merged_json ]
args = [
"--firstgroup",
"True",
"--metadata",
"{{source}}",
"--output",
rebase_path(merged_json, root_build_dir),
"--keywords",
] + rebase_path(keyword_xmls, root_build_dir)
}
action_foreach("emoji_data_remaining") {
script = "tools/emoji_data.py"
metadata_json = [
"//third_party/emoji-metadata/src/emoji_15_0_ordering.json",
"./emoji_test_ordering.json",
]
keyword_xmls = [
# later keywords will override earlier keywords for a particular emoji.
"//third_party/cldr/src/common/annotations/en.xml",
"//third_party/cldr/src/common/annotations/en_001.xml",
"//third_party/cldr/src/common/annotationsDerived/en.xml",
"//third_party/cldr/src/common/annotationsDerived/en_001.xml",
]
merged_json = "$target_gen_dir/{{source_name_part}}_remaining.json"
sources = metadata_json
inputs = keyword_xmls
outputs = [ merged_json ]
args = [
"--firstgroup",
"False",
"--metadata",
"{{source}}",
"--output",
rebase_path(merged_json, root_build_dir),
"--keywords",
] + rebase_path(keyword_xmls, root_build_dir)
}
action_foreach("emoticon_data") {
script = "tools/emoticon_data.py"
merged_json = "$target_gen_dir/{{source_name_part}}.json"
sources = [
"./emoticon_test_ordering.json",
"//third_party/emoji-metadata/src/emoticon_ordering.json",
]
outputs = [ merged_json ]
args = [
"--metadata",
"{{source}}",
"--output",
rebase_path(merged_json, root_build_dir),
]
}
action("symbol_data") {
script = "tools/symbol_data.py"
outputs = [ "$target_gen_dir/symbol_ordering.json" ]
deps = [
":emoji_data",
":emoji_data_remaining",
]
args = [
"--output",
rebase_path(outputs[0], root_build_dir),
]
args +=
[ "--filter-data-paths" ] +
rebase_path(get_target_outputs(":emoji_data"), root_build_dir) +
rebase_path(get_target_outputs(":emoji_data_remaining"), root_build_dir)
}
copy("symbol_test_data") {
sources = [ "./symbol_test_ordering.json" ]
outputs = [ "$target_gen_dir/symbol_test_ordering.json" ]
}
# I18n emoji data.
# TODO(b/346457889): Use a script to loop through languages.
# This is used to generate the emoji in a specific order
emoji_metadata = [ "//third_party/emoji-metadata/src/emoji_15_0_ordering.json" ]
emoji_script = "tools/emoji_data.py"
# German emoji keywords
de_keyword_xmls = [
"//third_party/cldr/src/common/annotations/de.xml",
"//third_party/cldr/src/common/annotationsDerived/de.xml",
]
action("emoji_data_de") {
firstgroup = "True"
outputs = [ "$target_gen_dir/emoji_de_start.json" ]
inputs = de_keyword_xmls
# Shared for all emoji scripts
script = emoji_script
sources = emoji_metadata
args = [
"--firstgroup",
firstgroup,
"--output",
] + rebase_path(outputs, root_build_dir)
args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}
action("emoji_data_de_remaining") {
firstgroup = "False"
outputs = [ "$target_gen_dir/emoji_de_remaining.json" ]
inputs = de_keyword_xmls
# Shared for all emoji scripts
script = emoji_script
sources = emoji_metadata
args = [
"--firstgroup",
firstgroup,
"--output",
] + rebase_path(outputs, root_build_dir)
args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}
action("symbol_data_de") {
script = "tools/symbol_data.py"
outputs = [ "$target_gen_dir/symbols_de.json" ]
deps = [
":emoji_data_de",
":emoji_data_de_remaining",
]
args = [
"--output",
rebase_path(outputs[0], root_build_dir),
]
args += [ "--filter-data-paths" ] +
rebase_path(get_target_outputs(":emoji_data_de"), root_build_dir) +
rebase_path(get_target_outputs(":emoji_data_de_remaining"),
root_build_dir)
args += [ "--cldr_data_path" ] + rebase_path(de_keyword_xmls, root_build_dir)
}
# Japanese keywords.
ja_keyword_xmls = [
"//third_party/cldr/src/common/annotations/ja.xml",
"//third_party/cldr/src/common/annotationsDerived/ja.xml",
]
action("emoji_data_ja") {
firstgroup = "True"
outputs = [ "$target_gen_dir/emoji_ja_start.json" ]
inputs = ja_keyword_xmls
# Shared for all emoji scripts
script = emoji_script
sources = emoji_metadata
args = [
"--firstgroup",
firstgroup,
"--output",
] + rebase_path(outputs, root_build_dir)
args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}
action("emoji_data_ja_remaining") {
firstgroup = "False"
outputs = [ "$target_gen_dir/emoji_ja_remaining.json" ]
inputs = ja_keyword_xmls
# Shared for all emoji scripts
script = emoji_script
sources = emoji_metadata
args = [
"--firstgroup",
firstgroup,
"--output",
] + rebase_path(outputs, root_build_dir)
args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}
action("symbol_data_ja") {
script = "tools/symbol_data.py"
outputs = [ "$target_gen_dir/symbols_ja.json" ]
deps = [
":emoji_data_ja",
":emoji_data_ja_remaining",
]
args = [
"--output",
rebase_path(outputs[0], root_build_dir),
]
args += [ "--filter-data-paths" ] +
rebase_path(get_target_outputs(":emoji_data_ja"), root_build_dir) +
rebase_path(get_target_outputs(":emoji_data_ja_remaining"),
root_build_dir)
args += [ "--cldr_data_path" ] + rebase_path(ja_keyword_xmls, root_build_dir)
}
# Spanish keywords.
es_keyword_xmls = [
"//third_party/cldr/src/common/annotations/es.xml",
"//third_party/cldr/src/common/annotationsDerived/es.xml",
]
action("emoji_data_es") {
firstgroup = "True"
outputs = [ "$target_gen_dir/emoji_es_start.json" ]
inputs = es_keyword_xmls
# Shared for all emoji scripts
script = emoji_script
sources = emoji_metadata
args = [
"--firstgroup",
firstgroup,
"--output",
] + rebase_path(outputs, root_build_dir)
args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}
action("emoji_data_es_remaining") {
firstgroup = "False"
outputs = [ "$target_gen_dir/emoji_es_remaining.json" ]
inputs = es_keyword_xmls
# Shared for all emoji scripts
script = emoji_script
sources = emoji_metadata
args = [
"--firstgroup",
firstgroup,
"--output",
] + rebase_path(outputs, root_build_dir)
args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}
action("symbol_data_es") {
script = "tools/symbol_data.py"
outputs = [ "$target_gen_dir/symbols_es.json" ]
deps = [
":emoji_data_es",
":emoji_data_es_remaining",
]
args = [
"--output",
rebase_path(outputs[0], root_build_dir),
]
args += [ "--filter-data-paths" ] +
rebase_path(get_target_outputs(":emoji_data_es"), root_build_dir) +
rebase_path(get_target_outputs(":emoji_data_es_remaining"),
root_build_dir)
args += [ "--cldr_data_path" ] + rebase_path(es_keyword_xmls, root_build_dir)
}
# Swedish keywords.
sv_keyword_xmls = [
"//third_party/cldr/src/common/annotations/sv.xml",
"//third_party/cldr/src/common/annotationsDerived/sv.xml",
]
action("emoji_data_sv") {
firstgroup = "True"
outputs = [ "$target_gen_dir/emoji_sv_start.json" ]
inputs = sv_keyword_xmls
# Shared for all emoji scripts
script = emoji_script
sources = emoji_metadata
args = [
"--firstgroup",
firstgroup,
"--output",
] + rebase_path(outputs, root_build_dir)
args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}
action("emoji_data_sv_remaining") {
firstgroup = "False"
outputs = [ "$target_gen_dir/emoji_sv_remaining.json" ]
inputs = sv_keyword_xmls
# Shared for all emoji scripts
script = emoji_script
sources = emoji_metadata
args = [
"--firstgroup",
firstgroup,
"--output",
] + rebase_path(outputs, root_build_dir)
args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}
action("symbol_data_sv") {
script = "tools/symbol_data.py"
outputs = [ "$target_gen_dir/symbols_sv.json" ]
deps = [
":emoji_data_sv",
":emoji_data_sv_remaining",
]
args = [
"--output",
rebase_path(outputs[0], root_build_dir),
]
args += [ "--filter-data-paths" ] +
rebase_path(get_target_outputs(":emoji_data_sv"), root_build_dir) +
rebase_path(get_target_outputs(":emoji_data_sv_remaining"),
root_build_dir)
args += [ "--cldr_data_path" ] + rebase_path(sv_keyword_xmls, root_build_dir)
}
# Norwegian keywords.
no_keyword_xmls = [
"//third_party/cldr/src/common/annotations/no.xml",
"//third_party/cldr/src/common/annotationsDerived/no.xml",
]
action("emoji_data_no") {
firstgroup = "True"
outputs = [ "$target_gen_dir/emoji_no_start.json" ]
inputs = no_keyword_xmls
# Shared for all emoji scripts
script = emoji_script
sources = emoji_metadata
args = [
"--firstgroup",
firstgroup,
"--output",
] + rebase_path(outputs, root_build_dir)
args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}
action("emoji_data_no_remaining") {
firstgroup = "False"
outputs = [ "$target_gen_dir/emoji_no_remaining.json" ]
inputs = no_keyword_xmls
# Shared for all emoji scripts
script = emoji_script
sources = emoji_metadata
args = [
"--firstgroup",
firstgroup,
"--output",
] + rebase_path(outputs, root_build_dir)
args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}
action("symbol_data_no") {
script = "tools/symbol_data.py"
outputs = [ "$target_gen_dir/symbols_no.json" ]
deps = [
":emoji_data_no",
":emoji_data_no_remaining",
]
args = [
"--output",
rebase_path(outputs[0], root_build_dir),
]
args += [ "--filter-data-paths" ] +
rebase_path(get_target_outputs(":emoji_data_no"), root_build_dir) +
rebase_path(get_target_outputs(":emoji_data_no_remaining"),
root_build_dir)
args += [ "--cldr_data_path" ] + rebase_path(no_keyword_xmls, root_build_dir)
}
# Finnish keywords.
fi_keyword_xmls = [
"//third_party/cldr/src/common/annotations/fi.xml",
"//third_party/cldr/src/common/annotationsDerived/fi.xml",
]
action("emoji_data_fi") {
firstgroup = "True"
outputs = [ "$target_gen_dir/emoji_fi_start.json" ]
inputs = fi_keyword_xmls
# Shared for all emoji scripts
script = emoji_script
sources = emoji_metadata
args = [
"--firstgroup",
firstgroup,
"--output",
] + rebase_path(outputs, root_build_dir)
args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}
action("emoji_data_fi_remaining") {
firstgroup = "False"
outputs = [ "$target_gen_dir/emoji_fi_remaining.json" ]
inputs = fi_keyword_xmls
# Shared for all emoji scripts
script = emoji_script
sources = emoji_metadata
args = [
"--firstgroup",
firstgroup,
"--output",
] + rebase_path(outputs, root_build_dir)
args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}
action("symbol_data_fi") {
script = "tools/symbol_data.py"
outputs = [ "$target_gen_dir/symbols_fi.json" ]
deps = [
":emoji_data_fi",
":emoji_data_fi_remaining",
]
args = [
"--output",
rebase_path(outputs[0], root_build_dir),
]
args += [ "--filter-data-paths" ] +
rebase_path(get_target_outputs(":emoji_data_fi"), root_build_dir) +
rebase_path(get_target_outputs(":emoji_data_fi_remaining"),
root_build_dir)
args += [ "--cldr_data_path" ] + rebase_path(fi_keyword_xmls, root_build_dir)
}
# Danish keywords.
da_keyword_xmls = [
"//third_party/cldr/src/common/annotations/da.xml",
"//third_party/cldr/src/common/annotationsDerived/da.xml",
]
action("emoji_data_da") {
firstgroup = "True"
outputs = [ "$target_gen_dir/emoji_da_start.json" ]
inputs = da_keyword_xmls
# Shared for all emoji scripts
script = emoji_script
sources = emoji_metadata
args = [
"--firstgroup",
firstgroup,
"--output",
] + rebase_path(outputs, root_build_dir)
args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}
action("emoji_data_da_remaining") {
firstgroup = "False"
outputs = [ "$target_gen_dir/emoji_da_remaining.json" ]
inputs = da_keyword_xmls
# Shared for all emoji scripts
script = emoji_script
sources = emoji_metadata
args = [
"--firstgroup",
firstgroup,
"--output",
] + rebase_path(outputs, root_build_dir)
args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}
action("symbol_data_da") {
script = "tools/symbol_data.py"
outputs = [ "$target_gen_dir/symbols_da.json" ]
deps = [
":emoji_data_da",
":emoji_data_da_remaining",
]
args = [
"--output",
rebase_path(outputs[0], root_build_dir),
]
args += [ "--filter-data-paths" ] +
rebase_path(get_target_outputs(":emoji_data_da"), root_build_dir) +
rebase_path(get_target_outputs(":emoji_data_da_remaining"),
root_build_dir)
args += [ "--cldr_data_path" ] + rebase_path(da_keyword_xmls, root_build_dir)
}
# French keywords.
fr_keyword_xmls = [
"//third_party/cldr/src/common/annotations/fr.xml",
"//third_party/cldr/src/common/annotationsDerived/fr.xml",
]
action("emoji_data_fr") {
firstgroup = "True"
outputs = [ "$target_gen_dir/emoji_fr_start.json" ]
inputs = fr_keyword_xmls
# Shared for all emoji scripts
script = emoji_script
sources = emoji_metadata
args = [
"--firstgroup",
firstgroup,
"--output",
] + rebase_path(outputs, root_build_dir)
args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}
action("emoji_data_fr_remaining") {
firstgroup = "False"
outputs = [ "$target_gen_dir/emoji_fr_remaining.json" ]
inputs = fr_keyword_xmls
# Shared for all emoji scripts
script = emoji_script
sources = emoji_metadata
args = [
"--firstgroup",
firstgroup,
"--output",
] + rebase_path(outputs, root_build_dir)
args += [ "--metadata" ] + rebase_path(sources, root_build_dir)
args += [ "--keywords" ] + rebase_path(inputs, root_build_dir)
}
action("symbol_data_fr") {
script = "tools/symbol_data.py"
outputs = [ "$target_gen_dir/symbols_fr.json" ]
deps = [
":emoji_data_fr",
":emoji_data_fr_remaining",
]
args = [
"--output",
rebase_path(outputs[0], root_build_dir),
]
args += [ "--filter-data-paths" ] +
rebase_path(get_target_outputs(":emoji_data_fr"), root_build_dir) +
rebase_path(get_target_outputs(":emoji_data_fr_remaining"),
root_build_dir)
args += [ "--cldr_data_path" ] + rebase_path(fr_keyword_xmls, root_build_dir)
}
# Resources used by chrome://picker.
grit("resources") {
source = "emoji.grd"
deps = [
":emoji_data",
":emoji_data_da",
":emoji_data_da_remaining",
":emoji_data_de",
":emoji_data_de_remaining",
":emoji_data_es",
":emoji_data_es_remaining",
":emoji_data_fi",
":emoji_data_fi_remaining",
":emoji_data_fr",
":emoji_data_fr_remaining",
":emoji_data_ja",
":emoji_data_ja_remaining",
":emoji_data_no",
":emoji_data_no_remaining",
":emoji_data_remaining",
":emoji_data_sv",
":emoji_data_sv_remaining",
":emoticon_data",
":symbol_data",
":symbol_data_da",
":symbol_data_de",
":symbol_data_es",
":symbol_data_fi",
":symbol_data_fr",
":symbol_data_ja",
":symbol_data_no",
":symbol_data_sv",
":symbol_test_data",
]
outputs = [
"grit/emoji.h",
"grit/emoji_map.cc",
"grit/emoji_map.h",
"emoji.pak",
]
}
source_set("emoji") {
deps = [
":resources",
"//base",
"//build:branding_buildflags",
"//ui/base",
]
sources = [
"emoji_search.cc",
"emoji_search.h",
]
}