mirror of
https://gitlab.com/mbunkus/mkvtoolnix.git
synced 2024-12-26 04:42:04 +00:00
5d04e5bfd5
It's much faster than using the initializer lists. See previous commits for more details.
70 lines
1.9 KiB
Ruby
70 lines
1.9 KiB
Ruby
def create_iso3166_country_list_file
|
|
cpp_file_name = "src/common/iso3166_country_list.cpp"
|
|
iso3166_1 = JSON.parse(IO.readlines("/usr/share/iso-codes/json/iso_3166-1.json").join(''))
|
|
rows = iso3166_1["3166-1"].
|
|
map do |entry|
|
|
[ entry["alpha_2"].upcase.to_cpp_string,
|
|
entry["alpha_3"].upcase.to_cpp_string,
|
|
sprintf('%03s', entry["numeric"].gsub(%r{^0+}, '')),
|
|
entry["name"].to_u8_cpp_string,
|
|
(entry["official_name"] || '').to_u8_cpp_string,
|
|
]
|
|
end
|
|
|
|
entries = Mtx::IANALanguageSubtagRegistry.fetch_registry
|
|
entries["region"].
|
|
select { |region| %r{^\d+$}.match(region[:subtag]) }.
|
|
each do |region|
|
|
|
|
rows << [
|
|
'""s', '""s',
|
|
sprintf('%03s', region[:subtag].gsub(%r{^0+}, '')),
|
|
region[:description].to_u8_cpp_string,
|
|
'""s',
|
|
]
|
|
end
|
|
|
|
header = <<EOT
|
|
/*
|
|
mkvmerge -- utility for splicing together matroska files
|
|
from component media subtypes
|
|
|
|
Distributed under the GPL v2
|
|
see the file COPYING for details
|
|
or visit https://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
|
|
ISO 3166 countries & UN M.49 regions
|
|
|
|
Written by Moritz Bunkus <moritz@bunkus.org>.
|
|
*/
|
|
|
|
// ------------------------------------------------------------------------
|
|
// NOTE: this file is auto-generated by the "dev:iso3166_list" rake target.
|
|
// ------------------------------------------------------------------------
|
|
|
|
#include "common/common_pch.h"
|
|
|
|
#include "common/iso3166.h"
|
|
|
|
namespace mtx::iso3166 {
|
|
|
|
std::vector<region_t> g_regions;
|
|
|
|
void
|
|
init() {
|
|
g_regions.reserve(#{rows.size});
|
|
|
|
EOT
|
|
|
|
footer = <<EOT
|
|
}
|
|
|
|
} // namespace mtx::iso3166
|
|
EOT
|
|
|
|
rows = rows.sort_by { |row| [ row[0], row[1], row[3] ].join('::') }
|
|
content = header + format_table(rows, :column_suffix => ',', :row_prefix => " g_regions.emplace_back(", :row_suffix => ");").join("\n") + "\n" + footer
|
|
|
|
runq("write", cpp_file_name) { IO.write("#{$source_dir}/#{cpp_file_name}", content); 0 }
|
|
end
|