summaryrefslogtreecommitdiff
path: root/support/texlab
diff options
context:
space:
mode:
Diffstat (limited to 'support/texlab')
-rw-r--r--support/texlab/CHANGELOG.md81
-rw-r--r--support/texlab/Cargo.lock1791
-rw-r--r--support/texlab/Cargo.toml140
-rw-r--r--support/texlab/README.md27
-rw-r--r--support/texlab/benches/bench_main.rs7
-rw-r--r--support/texlab/benches/benchmarks/completion.rs135
-rw-r--r--support/texlab/benches/benchmarks/mod.rs1
-rw-r--r--support/texlab/build.rs8
-rw-r--r--support/texlab/crates/bibutils/Cargo.toml13
-rw-r--r--support/texlab/crates/bibutils_sys/Cargo.toml10
-rw-r--r--support/texlab/crates/bibutils_sys/build.rs71
-rw-r--r--support/texlab/crates/bibutils_sys/src/Copying340
-rw-r--r--support/texlab/crates/bibutils_sys/src/adsout.c679
-rw-r--r--support/texlab/crates/bibutils_sys/src/adsout_journals.c4510
-rw-r--r--support/texlab/crates/bibutils_sys/src/bibcore.c1079
-rw-r--r--support/texlab/crates/bibutils_sys/src/bibformats.h35
-rw-r--r--support/texlab/crates/bibutils_sys/src/bibl.c104
-rw-r--r--support/texlab/crates/bibutils_sys/src/bibl.h29
-rw-r--r--support/texlab/crates/bibutils_sys/src/biblatexin.c1340
-rw-r--r--support/texlab/crates/bibutils_sys/src/bibtexin.c1517
-rw-r--r--support/texlab/crates/bibutils_sys/src/bibtexout.c855
-rw-r--r--support/texlab/crates/bibutils_sys/src/bibtextypes.c687
-rw-r--r--support/texlab/crates/bibutils_sys/src/bibutils.c49
-rw-r--r--support/texlab/crates/bibutils_sys/src/bibutils.h145
-rw-r--r--support/texlab/crates/bibutils_sys/src/bltypes.c1071
-rw-r--r--support/texlab/crates/bibutils_sys/src/bu_auth.c63
-rw-r--r--support/texlab/crates/bibutils_sys/src/bu_auth.h17
-rw-r--r--support/texlab/crates/bibutils_sys/src/charsets.c34627
-rw-r--r--support/texlab/crates/bibutils_sys/src/charsets.h25
-rw-r--r--support/texlab/crates/bibutils_sys/src/copacin.c321
-rw-r--r--support/texlab/crates/bibutils_sys/src/copactypes.c49
-rw-r--r--support/texlab/crates/bibutils_sys/src/ebiin.c763
-rw-r--r--support/texlab/crates/bibutils_sys/src/endin.c620
-rw-r--r--support/texlab/crates/bibutils_sys/src/endout.c777
-rw-r--r--support/texlab/crates/bibutils_sys/src/endtypes.c1257
-rw-r--r--support/texlab/crates/bibutils_sys/src/endxmlin.c587
-rw-r--r--support/texlab/crates/bibutils_sys/src/entities.c406
-rw-r--r--support/texlab/crates/bibutils_sys/src/entities.h16
-rw-r--r--support/texlab/crates/bibutils_sys/src/fields.c573
-rw-r--r--support/texlab/crates/bibutils_sys/src/fields.h97
-rw-r--r--support/texlab/crates/bibutils_sys/src/gb18030.c184
-rw-r--r--support/texlab/crates/bibutils_sys/src/gb18030.h15
-rw-r--r--support/texlab/crates/bibutils_sys/src/gb18030_enumeration.c30746
-rw-r--r--support/texlab/crates/bibutils_sys/src/generic.c106
-rw-r--r--support/texlab/crates/bibutils_sys/src/generic.h27
-rw-r--r--support/texlab/crates/bibutils_sys/src/intlist.c590
-rw-r--r--support/texlab/crates/bibutils_sys/src/intlist.h52
-rw-r--r--support/texlab/crates/bibutils_sys/src/is_ws.c48
-rw-r--r--support/texlab/crates/bibutils_sys/src/is_ws.h18
-rw-r--r--support/texlab/crates/bibutils_sys/src/isiin.c420
-rw-r--r--support/texlab/crates/bibutils_sys/src/isiout.c363
-rw-r--r--support/texlab/crates/bibutils_sys/src/isitypes.c192
-rw-r--r--support/texlab/crates/bibutils_sys/src/iso639_1.c211
-rw-r--r--support/texlab/crates/bibutils_sys/src/iso639_1.h9
-rw-r--r--support/texlab/crates/bibutils_sys/src/iso639_2.c647
-rw-r--r--support/texlab/crates/bibutils_sys/src/iso639_2.h10
-rw-r--r--support/texlab/crates/bibutils_sys/src/iso639_3.c8431
-rw-r--r--support/texlab/crates/bibutils_sys/src/iso639_3.h10
-rw-r--r--support/texlab/crates/bibutils_sys/src/latex.c597
-rw-r--r--support/texlab/crates/bibutils_sys/src/latex.h17
-rw-r--r--support/texlab/crates/bibutils_sys/src/lib.rs4261
-rw-r--r--support/texlab/crates/bibutils_sys/src/marc_auth.c458
-rw-r--r--support/texlab/crates/bibutils_sys/src/marc_auth.h20
-rw-r--r--support/texlab/crates/bibutils_sys/src/medin.c645
-rw-r--r--support/texlab/crates/bibutils_sys/src/modsin.c1139
-rw-r--r--support/texlab/crates/bibutils_sys/src/modsout.c1177
-rw-r--r--support/texlab/crates/bibutils_sys/src/modstypes.c57
-rw-r--r--support/texlab/crates/bibutils_sys/src/modstypes.h24
-rw-r--r--support/texlab/crates/bibutils_sys/src/msvc_fix.h7
-rw-r--r--support/texlab/crates/bibutils_sys/src/mycvout.c614
-rw-r--r--support/texlab/crates/bibutils_sys/src/name.c535
-rw-r--r--support/texlab/crates/bibutils_sys/src/name.h26
-rw-r--r--support/texlab/crates/bibutils_sys/src/nbibin.c536
-rw-r--r--support/texlab/crates/bibutils_sys/src/nbibout.c556
-rw-r--r--support/texlab/crates/bibutils_sys/src/nbibtypes.c70
-rw-r--r--support/texlab/crates/bibutils_sys/src/notes.c103
-rw-r--r--support/texlab/crates/bibutils_sys/src/notes.h17
-rw-r--r--support/texlab/crates/bibutils_sys/src/pages.c87
-rw-r--r--support/texlab/crates/bibutils_sys/src/pages.h16
-rw-r--r--support/texlab/crates/bibutils_sys/src/reftypes.c72
-rw-r--r--support/texlab/crates/bibutils_sys/src/reftypes.h63
-rw-r--r--support/texlab/crates/bibutils_sys/src/risin.c582
-rw-r--r--support/texlab/crates/bibutils_sys/src/risout.c793
-rw-r--r--support/texlab/crates/bibutils_sys/src/ristypes.c1594
-rw-r--r--support/texlab/crates/bibutils_sys/src/serialno.c56
-rw-r--r--support/texlab/crates/bibutils_sys/src/serialno.h16
-rw-r--r--support/texlab/crates/bibutils_sys/src/slist.c946
-rw-r--r--support/texlab/crates/bibutils_sys/src/slist.h112
-rw-r--r--support/texlab/crates/bibutils_sys/src/str.c1126
-rw-r--r--support/texlab/crates/bibutils_sys/src/str.h137
-rw-r--r--support/texlab/crates/bibutils_sys/src/str_conv.c204
-rw-r--r--support/texlab/crates/bibutils_sys/src/str_conv.h23
-rw-r--r--support/texlab/crates/bibutils_sys/src/strsearch.c41
-rw-r--r--support/texlab/crates/bibutils_sys/src/strsearch.h15
-rw-r--r--support/texlab/crates/bibutils_sys/src/title.c100
-rw-r--r--support/texlab/crates/bibutils_sys/src/title.h20
-rw-r--r--support/texlab/crates/bibutils_sys/src/type.c87
-rw-r--r--support/texlab/crates/bibutils_sys/src/type.h27
-rw-r--r--support/texlab/crates/bibutils_sys/src/unicode.c333
-rw-r--r--support/texlab/crates/bibutils_sys/src/unicode.h22
-rw-r--r--support/texlab/crates/bibutils_sys/src/url.c316
-rw-r--r--support/texlab/crates/bibutils_sys/src/url.h30
-rw-r--r--support/texlab/crates/bibutils_sys/src/utf8.c188
-rw-r--r--support/texlab/crates/bibutils_sys/src/utf8.h22
-rw-r--r--support/texlab/crates/bibutils_sys/src/vplist.c387
-rw-r--r--support/texlab/crates/bibutils_sys/src/vplist.h86
-rw-r--r--support/texlab/crates/bibutils_sys/src/wordin.c322
-rw-r--r--support/texlab/crates/bibutils_sys/src/wordout.c693
-rw-r--r--support/texlab/crates/bibutils_sys/src/wrapper.h3
-rw-r--r--support/texlab/crates/bibutils_sys/src/xml.c420
-rw-r--r--support/texlab/crates/bibutils_sys/src/xml.h43
-rw-r--r--support/texlab/crates/bibutils_sys/src/xml_encoding.c78
-rw-r--r--support/texlab/crates/bibutils_sys/src/xml_encoding.h14
-rw-r--r--support/texlab/crates/futures_boxed/Cargo.toml14
-rw-r--r--support/texlab/crates/futures_boxed/src/lib.rs69
-rw-r--r--support/texlab/crates/jsonrpc/Cargo.toml17
-rw-r--r--support/texlab/crates/jsonrpc/src/client.rs17
-rw-r--r--support/texlab/crates/jsonrpc/src/lib.rs73
-rw-r--r--support/texlab/crates/jsonrpc/src/server.rs68
-rw-r--r--support/texlab/crates/jsonrpc/src/types.rs20
-rw-r--r--support/texlab/crates/jsonrpc_derive/Cargo.toml6
-rw-r--r--support/texlab/crates/jsonrpc_derive/src/lib.rs21
-rw-r--r--support/texlab/crates/tex/Cargo.toml18
-rw-r--r--support/texlab/crates/tex/src/compile.rs87
-rw-r--r--support/texlab/crates/tex/src/language.rs23
-rw-r--r--support/texlab/crates/tex/src/lib.rs106
-rw-r--r--support/texlab/crates/tex/src/miktex.rs18
-rw-r--r--support/texlab/crates/tex/src/tectonic.rs32
-rw-r--r--support/texlab/crates/tex/src/texlive.rs18
-rw-r--r--support/texlab/data/components.json (renamed from support/texlab/src/completion/data.json)0
-rw-r--r--support/texlab/data/lang_data.json (renamed from support/texlab/src/syntax/language.json)14
-rw-r--r--support/texlab/src/action.rs37
-rw-r--r--support/texlab/src/build.rs348
-rw-r--r--support/texlab/src/capabilities.rs46
-rw-r--r--support/texlab/src/citeproc/bibutils.rs (renamed from support/texlab/crates/bibutils/src/lib.rs)19
-rw-r--r--support/texlab/src/citeproc/mod.rs192
-rw-r--r--support/texlab/src/citeproc/name/mod.rs41
-rw-r--r--support/texlab/src/citeproc/name/parser.lalrpop4
-rw-r--r--support/texlab/src/citeproc/ris.rs6
-rw-r--r--support/texlab/src/completion/bibtex/cmd.rs177
-rw-r--r--support/texlab/src/completion/bibtex/command.rs112
-rw-r--r--support/texlab/src/completion/bibtex/entry_type.rs255
-rw-r--r--support/texlab/src/completion/bibtex/field_name.rs308
-rw-r--r--support/texlab/src/completion/bibtex/mod.rs2
-rw-r--r--support/texlab/src/completion/factory.rs439
-rw-r--r--support/texlab/src/completion/latex/argument.rs282
-rw-r--r--support/texlab/src/completion/latex/begin_cmd.rs70
-rw-r--r--support/texlab/src/completion/latex/begin_command.rs30
-rw-r--r--support/texlab/src/completion/latex/citation.rs371
-rw-r--r--support/texlab/src/completion/latex/color.rs139
-rw-r--r--support/texlab/src/completion/latex/color_model.rs169
-rw-r--r--support/texlab/src/completion/latex/combinators.rs169
-rw-r--r--support/texlab/src/completion/latex/component.rs557
-rw-r--r--support/texlab/src/completion/latex/glossary.rs149
-rw-r--r--support/texlab/src/completion/latex/import.rs244
-rw-r--r--support/texlab/src/completion/latex/include.rs190
-rw-r--r--support/texlab/src/completion/latex/label.rs338
-rw-r--r--support/texlab/src/completion/latex/mod.rs6
-rw-r--r--support/texlab/src/completion/latex/theorem.rs163
-rw-r--r--support/texlab/src/completion/latex/tikz.rs90
-rw-r--r--support/texlab/src/completion/latex/tikz_lib.rs138
-rw-r--r--support/texlab/src/completion/latex/user.rs324
-rw-r--r--support/texlab/src/completion/mod.rs471
-rw-r--r--support/texlab/src/completion/preselect.rs55
-rw-r--r--support/texlab/src/completion/quality.rs125
-rw-r--r--support/texlab/src/completion/types.rs150
-rw-r--r--support/texlab/src/completion/util.rs121
-rw-r--r--support/texlab/src/components.rs (renamed from support/texlab/src/completion/data.rs)37
-rw-r--r--support/texlab/src/config.rs103
-rw-r--r--support/texlab/src/definition/bibtex_string.rs225
-rw-r--r--support/texlab/src/definition/latex_citation.rs161
-rw-r--r--support/texlab/src/definition/latex_cmd.rs154
-rw-r--r--support/texlab/src/definition/latex_command.rs106
-rw-r--r--support/texlab/src/definition/latex_label.rs192
-rw-r--r--support/texlab/src/definition/mod.rs32
-rw-r--r--support/texlab/src/diagnostics/bibtex.rs197
-rw-r--r--support/texlab/src/diagnostics/build.rs1048
-rw-r--r--support/texlab/src/diagnostics/latex.rs86
-rw-r--r--support/texlab/src/diagnostics/mod.rs28
-rw-r--r--support/texlab/src/feature.rs405
-rw-r--r--support/texlab/src/folding/bibtex_decl.rs159
-rw-r--r--support/texlab/src/folding/bibtex_declaration.rs160
-rw-r--r--support/texlab/src/folding/latex_env.rs80
-rw-r--r--support/texlab/src/folding/latex_environment.rs74
-rw-r--r--support/texlab/src/folding/latex_section.rs145
-rw-r--r--support/texlab/src/folding/mod.rs28
-rw-r--r--support/texlab/src/formatting/bibtex.rs376
-rw-r--r--support/texlab/src/formatting/mod.rs1
-rw-r--r--support/texlab/src/forward_search.rs81
-rw-r--r--support/texlab/src/highlight/latex_label.rs144
-rw-r--r--support/texlab/src/highlight/mod.rs17
-rw-r--r--support/texlab/src/hover/bibtex/entry_type.rs116
-rw-r--r--support/texlab/src/hover/bibtex/field.rs111
-rw-r--r--support/texlab/src/hover/bibtex/mod.rs3
-rw-r--r--support/texlab/src/hover/bibtex/string_reference.rs165
-rw-r--r--support/texlab/src/hover/bibtex_entry_type.rs111
-rw-r--r--support/texlab/src/hover/bibtex_field.rs108
-rw-r--r--support/texlab/src/hover/bibtex_string_reference.rs106
-rw-r--r--support/texlab/src/hover/latex/citation.rs179
-rw-r--r--support/texlab/src/hover/latex/component.rs95
-rw-r--r--support/texlab/src/hover/latex/label.rs118
-rw-r--r--support/texlab/src/hover/latex/mod.rs6
-rw-r--r--support/texlab/src/hover/latex/preview.rs338
-rw-r--r--support/texlab/src/hover/latex_citation.rs79
-rw-r--r--support/texlab/src/hover/latex_component.rs39
-rw-r--r--support/texlab/src/hover/latex_include.rs104
-rw-r--r--support/texlab/src/hover/latex_label.rs71
-rw-r--r--support/texlab/src/hover/latex_preview.rs357
-rw-r--r--support/texlab/src/hover/mod.rs50
-rw-r--r--support/texlab/src/lib.rs30
-rw-r--r--support/texlab/src/link/latex_import.rs99
-rw-r--r--support/texlab/src/link/latex_include.rs137
-rw-r--r--support/texlab/src/link/mod.rs25
-rw-r--r--support/texlab/src/main.rs112
-rw-r--r--support/texlab/src/outline.rs437
-rw-r--r--support/texlab/src/protocol/capabilities.rs145
-rw-r--r--support/texlab/src/protocol/client.rs (renamed from support/texlab/src/client.rs)8
-rw-r--r--support/texlab/src/protocol/codec.rs (renamed from support/texlab/src/codec.rs)44
-rw-r--r--support/texlab/src/protocol/edit.rs12
-rw-r--r--support/texlab/src/protocol/mod.rs71
-rw-r--r--support/texlab/src/protocol/options.rs104
-rw-r--r--support/texlab/src/protocol/range.rs97
-rw-r--r--support/texlab/src/protocol/uri.rs (renamed from support/texlab/src/workspace/uri.rs)36
-rw-r--r--support/texlab/src/range.rs32
-rw-r--r--support/texlab/src/reference/bibtex_entry.rs339
-rw-r--r--support/texlab/src/reference/bibtex_string.rs394
-rw-r--r--support/texlab/src/reference/latex_label.rs307
-rw-r--r--support/texlab/src/reference/mod.rs21
-rw-r--r--support/texlab/src/rename/bibtex_entry.rs272
-rw-r--r--support/texlab/src/rename/latex_cmd.rs128
-rw-r--r--support/texlab/src/rename/latex_command.rs114
-rw-r--r--support/texlab/src/rename/latex_env.rs157
-rw-r--r--support/texlab/src/rename/latex_environment.rs137
-rw-r--r--support/texlab/src/rename/latex_label.rs181
-rw-r--r--support/texlab/src/rename/mod.rs30
-rw-r--r--support/texlab/src/server.rs835
-rw-r--r--support/texlab/src/symbol/bibtex_entry.rs216
-rw-r--r--support/texlab/src/symbol/bibtex_string.rs115
-rw-r--r--support/texlab/src/symbol/latex_section/enumeration.rs84
-rw-r--r--support/texlab/src/symbol/latex_section/equation.rs36
-rw-r--r--support/texlab/src/symbol/latex_section/float.rs46
-rw-r--r--support/texlab/src/symbol/latex_section/mod.rs781
-rw-r--r--support/texlab/src/symbol/latex_section/theorem.rs68
-rw-r--r--support/texlab/src/symbol/mod.rs231
-rw-r--r--support/texlab/src/symbol/project_order.rs179
-rw-r--r--support/texlab/src/symbol/types.rs104
-rw-r--r--support/texlab/src/syntax/bibtex/ast.rs686
-rw-r--r--support/texlab/src/syntax/bibtex/finder.rs110
-rw-r--r--support/texlab/src/syntax/bibtex/formatter.rs329
-rw-r--r--support/texlab/src/syntax/bibtex/lexer.rs135
-rw-r--r--support/texlab/src/syntax/bibtex/mod.rs431
-rw-r--r--support/texlab/src/syntax/bibtex/parser.rs372
-rw-r--r--support/texlab/src/syntax/generic_ast.rs51
-rw-r--r--support/texlab/src/syntax/lang_data.rs (renamed from support/texlab/src/syntax/language.rs)4
-rw-r--r--support/texlab/src/syntax/latex/analysis.rs913
-rw-r--r--support/texlab/src/syntax/latex/ast.rs529
-rw-r--r--support/texlab/src/syntax/latex/env.rs123
-rw-r--r--support/texlab/src/syntax/latex/finder.rs74
-rw-r--r--support/texlab/src/syntax/latex/glossary.rs58
-rw-r--r--support/texlab/src/syntax/latex/lexer.rs117
-rw-r--r--support/texlab/src/syntax/latex/math.rs199
-rw-r--r--support/texlab/src/syntax/latex/mod.rs912
-rw-r--r--support/texlab/src/syntax/latex/parser.rs177
-rw-r--r--support/texlab/src/syntax/latex/printer.rs77
-rw-r--r--support/texlab/src/syntax/latex/structure.rs250
-rw-r--r--support/texlab/src/syntax/latexindent.rs21
-rw-r--r--support/texlab/src/syntax/lsp_kind.rs (renamed from support/texlab/src/lsp_kind.rs)4
-rw-r--r--support/texlab/src/syntax/mod.rs37
-rw-r--r--support/texlab/src/syntax/text.rs42
-rw-r--r--support/texlab/src/test/client.rs73
-rw-r--r--support/texlab/src/test/mod.rs632
-rw-r--r--support/texlab/src/test/server.rs87
-rw-r--r--support/texlab/src/tex/compile.rs97
-rw-r--r--support/texlab/src/tex/kpsewhich.rs112
-rw-r--r--support/texlab/src/tex/miktex.rs108
-rw-r--r--support/texlab/src/tex/mod.rs154
-rw-r--r--support/texlab/src/tex/tectonic.rs36
-rw-r--r--support/texlab/src/tex/texlive.rs71
-rw-r--r--support/texlab/src/workspace.rs987
-rw-r--r--support/texlab/src/workspace/feature.rs246
-rw-r--r--support/texlab/src/workspace/mod.rs417
-rw-r--r--support/texlab/src/workspace/outline.rs438
-rw-r--r--support/texlab/tests/integration/completion.rs1227
-rw-r--r--support/texlab/tests/integration/definition.rs482
-rw-r--r--support/texlab/tests/integration/document_symbol.rs424
-rw-r--r--support/texlab/tests/integration/folding.rs126
-rw-r--r--support/texlab/tests/integration/highlight.rs83
-rw-r--r--support/texlab/tests/integration/hover.rs86
-rw-r--r--support/texlab/tests/integration/issues.rs350
-rw-r--r--support/texlab/tests/integration/link.rs173
-rw-r--r--support/texlab/tests/integration/main.rs12
-rw-r--r--support/texlab/tests/integration/prepare_rename.rs151
-rw-r--r--support/texlab/tests/integration/reference.rs150
-rw-r--r--support/texlab/tests/integration/rename.rs236
-rw-r--r--support/texlab/tests/integration/workspace_symbol.rs228
-rw-r--r--support/texlab/tests/logs/bad-box.log84
-rw-r--r--support/texlab/tests/logs/child-error.log65
-rw-r--r--support/texlab/tests/logs/citation-warning.log67
-rw-r--r--support/texlab/tests/logs/package-error.log86
-rw-r--r--support/texlab/tests/logs/package-warning.log387
-rw-r--r--support/texlab/tests/logs/tex-error.log125
-rw-r--r--support/texlab/tests/scenarios/completion/bibtex/command/foo.bib7
-rw-r--r--support/texlab/tests/scenarios/completion/bibtex/field/foo.bib6
-rw-r--r--support/texlab/tests/scenarios/completion/bibtex/type/foo.bib3
-rw-r--r--support/texlab/tests/scenarios/completion/bibtex/word/foo.bib8
-rw-r--r--support/texlab/tests/scenarios/completion/latex/citation/bar.bib7
-rw-r--r--support/texlab/tests/scenarios/completion/latex/citation/foo.tex8
-rw-r--r--support/texlab/tests/scenarios/completion/latex/color/foo.tex3
-rw-r--r--support/texlab/tests/scenarios/completion/latex/component/foo.tex8
-rw-r--r--support/texlab/tests/scenarios/completion/latex/include/bar.tex0
-rw-r--r--support/texlab/tests/scenarios/completion/latex/include/bibliography.bib0
-rw-r--r--support/texlab/tests/scenarios/completion/latex/include/foo.tex7
-rw-r--r--support/texlab/tests/scenarios/completion/latex/include/qux/baz.tex0
-rw-r--r--support/texlab/tests/scenarios/completion/latex/label/bar.aux25
-rw-r--r--support/texlab/tests/scenarios/completion/latex/label/bar.tex6
-rw-r--r--support/texlab/tests/scenarios/completion/latex/label/foo.aux10
-rw-r--r--support/texlab/tests/scenarios/completion/latex/label/foo.tex36
-rw-r--r--support/texlab/tests/scenarios/completion/latex/preselect/foo.tex3
-rw-r--r--support/texlab/tests/scenarios/completion/latex/theorem/foo.tex5
-rw-r--r--support/texlab/tests/scenarios/completion/latex/tikz/foo.tex3
-rw-r--r--support/texlab/tests/scenarios/completion/latex/user/foo.tex5
-rw-r--r--support/texlab/tests/scenarios/definition/bibtex/string/foo.bib7
-rw-r--r--support/texlab/tests/scenarios/definition/latex/citation/bar.bib3
-rw-r--r--support/texlab/tests/scenarios/definition/latex/citation/baz.bib3
-rw-r--r--support/texlab/tests/scenarios/definition/latex/citation/foo.tex2
-rw-r--r--support/texlab/tests/scenarios/definition/latex/command/foo.tex3
-rw-r--r--support/texlab/tests/scenarios/definition/latex/label/default.tex2
-rw-r--r--support/texlab/tests/scenarios/definition/latex/label/equation.tex6
-rw-r--r--support/texlab/tests/scenarios/definition/latex/label/float.tex7
-rw-r--r--support/texlab/tests/scenarios/definition/latex/label/item.tex7
-rw-r--r--support/texlab/tests/scenarios/definition/latex/label/section.tex7
-rw-r--r--support/texlab/tests/scenarios/definition/latex/label/theorem.tex9
-rw-r--r--support/texlab/tests/scenarios/definition/latex/math_operator/foo.tex3
-rw-r--r--support/texlab/tests/scenarios/diagnostics/bibtex/foo.bib1
-rw-r--r--support/texlab/tests/scenarios/diagnostics/build/foo.log59
-rw-r--r--support/texlab/tests/scenarios/diagnostics/build/foo.tex6
-rw-r--r--support/texlab/tests/scenarios/folding/bar.bib24
-rw-r--r--support/texlab/tests/scenarios/folding/foo.tex13
-rw-r--r--support/texlab/tests/scenarios/formatting/bibtex/default/formatted.bib4
-rw-r--r--support/texlab/tests/scenarios/formatting/bibtex/default/unformatted.bib1
-rw-r--r--support/texlab/tests/scenarios/formatting/bibtex/infinite_line_length/formatted.bib3
-rw-r--r--support/texlab/tests/scenarios/formatting/bibtex/infinite_line_length/unformatted.bib1
-rw-r--r--support/texlab/tests/scenarios/hover/bibtex/field/foo.bib4
-rw-r--r--support/texlab/tests/scenarios/hover/bibtex/string_reference/foo.bib6
-rw-r--r--support/texlab/tests/scenarios/hover/bibtex/type/foo.bib5
-rw-r--r--support/texlab/tests/scenarios/hover/latex/citation/foo.bib5
-rw-r--r--support/texlab/tests/scenarios/hover/latex/citation/foo.tex4
-rw-r--r--support/texlab/tests/scenarios/hover/latex/component/foo.tex4
-rw-r--r--support/texlab/tests/scenarios/hover/latex/label/section.tex5
-rw-r--r--support/texlab/tests/scenarios/symbol/hierarchical/enumerate.aux3
-rw-r--r--support/texlab/tests/scenarios/symbol/hierarchical/enumerate.tex12
-rw-r--r--support/texlab/tests/scenarios/symbol/hierarchical/equation.aux2
-rw-r--r--support/texlab/tests/scenarios/symbol/hierarchical/equation.tex17
-rw-r--r--support/texlab/tests/scenarios/symbol/hierarchical/float.aux5
-rw-r--r--support/texlab/tests/scenarios/symbol/hierarchical/float.tex24
-rw-r--r--support/texlab/tests/scenarios/symbol/hierarchical/section.aux4
-rw-r--r--support/texlab/tests/scenarios/symbol/hierarchical/section.tex11
-rw-r--r--support/texlab/tests/scenarios/symbol/hierarchical/theorem.aux3
-rw-r--r--support/texlab/tests/scenarios/symbol/hierarchical/theorem.tex23
-rw-r--r--support/texlab/tests/scenarios/symbol/workspace/bar.bib3
-rw-r--r--support/texlab/tests/scenarios/symbol/workspace/foo.aux17
-rw-r--r--support/texlab/tests/scenarios/symbol/workspace/foo.tex38
-rw-r--r--support/texlab/tests/support/mod.rs635
-rw-r--r--support/texlab/tests/test_completion_bibtex_command.rs19
-rw-r--r--support/texlab/tests/test_completion_bibtex_field.rs19
-rw-r--r--support/texlab/tests/test_completion_bibtex_type.rs26
-rw-r--r--support/texlab/tests/test_completion_bibtex_word.rs20
-rw-r--r--support/texlab/tests/test_completion_latex_citation.rs26
-rw-r--r--support/texlab/tests/test_completion_latex_color.rs23
-rw-r--r--support/texlab/tests/test_completion_latex_component.rs68
-rw-r--r--support/texlab/tests/test_completion_latex_include.rs29
-rw-r--r--support/texlab/tests/test_completion_latex_label.rs34
-rw-r--r--support/texlab/tests/test_completion_latex_preselect.rs11
-rw-r--r--support/texlab/tests/test_completion_latex_theorem.rs12
-rw-r--r--support/texlab/tests/test_completion_latex_tikz.rs21
-rw-r--r--support/texlab/tests/test_completion_latex_user.rs19
-rw-r--r--support/texlab/tests/test_definition_bibtex_string.rs18
-rw-r--r--support/texlab/tests/test_definition_latex_citation.rs27
-rw-r--r--support/texlab/tests/test_definition_latex_command.rs18
-rw-r--r--support/texlab/tests/test_definition_latex_label.rs73
-rw-r--r--support/texlab/tests/test_definition_latex_math_operator.rs18
-rw-r--r--support/texlab/tests/test_diagnostics_bibtex.rs36
-rw-r--r--support/texlab/tests/test_diagnostics_build.rs25
-rw-r--r--support/texlab/tests/test_folding.rs66
-rw-r--r--support/texlab/tests/test_formatting_bibtex.rs34
-rw-r--r--support/texlab/tests/test_hover_bibtex_field.rs28
-rw-r--r--support/texlab/tests/test_hover_bibtex_string_reference.rs24
-rw-r--r--support/texlab/tests/test_hover_bibtex_type.rs28
-rw-r--r--support/texlab/tests/test_hover_latex_citation.rs24
-rw-r--r--support/texlab/tests/test_hover_latex_component.rs27
-rw-r--r--support/texlab/tests/test_hover_latex_label.rs59
-rw-r--r--support/texlab/tests/test_symbol_hierarchical.rs167
-rw-r--r--support/texlab/tests/test_symbol_workspace.rs48
-rw-r--r--support/texlab/texlab.148
-rw-r--r--support/texlab/texlab.pdfbin0 -> 84894 bytes
395 files changed, 21999 insertions, 130149 deletions
diff --git a/support/texlab/CHANGELOG.md b/support/texlab/CHANGELOG.md
index 419e13b755..94e2a872a0 100644
--- a/support/texlab/CHANGELOG.md
+++ b/support/texlab/CHANGELOG.md
@@ -5,6 +5,87 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [2.2.0] - 27.05.2020
+
+### Added
+
+- Fuzzy matching now works with Visual Studio Code
+
+### Changed
+
+- Improve performance of completion
+
+### Fixed
+
+- Fix the ordering of completion items when using `lsp-mode` ([#227](https://github.com/latex-lsp/texlab/issues/227))
+- Fix preview when using custom class files ([#228](https://github.com/latex-lsp/texlab/issues/228))
+
+## [2.1.0] - 10.05.2020
+
+### Added
+
+- Add a new setting `latex.build.forwardSearchAfter` to trigger the forward search after building.
+- Add option to write the log output to a log file
+
+### Fixed
+
+- Fix crash in symbols when encountering theorem descriptions ([#220](https://github.com/latex-lsp/texlab/issues/220))
+- Fix a parsing error that caused `texlab` to take 100% CPU usage in some cases ([#212](https://github.com/latex-lsp/texlab/issues/212))
+- Prevent building the same file multiple times at once
+
+## [2.0.0] - 20.04.2020
+
+### Added
+
+- Add basic support for the `import` package
+- Allow LaTeX and BibTeX formatting via `latexindent`.
+ The built-in BibTeX formatter is still available via `"bibtex.formatting.formatter": "texlab"` ([#151](https://github.com/latex-lsp/texlab/issues/151))
+
+### Fixed
+
+- Handle `subfiles` package when executing forward search ([#208](https://github.com/latex-lsp/texlab/issues/208))
+- Fix detection of terminated builds
+- Ensure that there is at most one instance of ChkTeX running
+- Fix deserialization of incoming JSON-RPC errors
+- Fix preview when including packages in a child file
+
+### Changed
+
+- **Breaking change**: `latex.build.args` now uses placeholders like the forward search.
+ The filename (`%f`) is no longer implicitly appended to the end of the argument list.
+- **Breaking change**: Update the LSP types to accommodate newer LSP clients ([#200](https://github.com/latex-lsp/texlab/issues/200))
+- Improve performance of completion (when completing LaTeX commands)
+- Improve workspace detection algorithm
+
+## [1.10.0] - 11.02.2020
+
+### Added
+
+- Add a new setting `latex.build.outputDirectory` to specify the directory containing the build artifacts.
+ This setting can be used in combination with the `-outdir` flag of `latexmk`
+ ([#147](https://github.com/latex-lsp/texlab/issues/147))
+- Add basic support for push-based configuration via `workspace/didChangeConfiguration` ([#123](https://github.com/latex-lsp/texlab/issues/123))
+
+### Fixed
+
+- Show all digits of chktex warning number ([#160](https://github.com/latex-lsp/texlab/issues/160))
+
+## [1.9.0] - 30.12.2019
+
+### Added
+
+- Provide completion for local packages if `kpsewhich` is installed
+- Add `.def` and `.bibtex` to the list of supported extensions
+- Add basic support for `tectonic`
+
+### Fixed
+
+- Fix rendering of citations with DOIs ([#117](https://github.com/latex-lsp/texlab/issues/117))
+- Fix building of LaTeX files without `\begin{document}` ([#122](https://github.com/latex-lsp/texlab/issues/122))
+- Do not crash when editing remote files
+- Run LaTeX linter when opening a file if enabled
+- Handle `\hyphen` when rendering citations
+
## [1.8.0] - 01.12.2019
### Added
diff --git a/support/texlab/Cargo.lock b/support/texlab/Cargo.lock
index 1aa1e0fe74..86bcca68ff 100644
--- a/support/texlab/Cargo.lock
+++ b/support/texlab/Cargo.lock
@@ -7,10 +7,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "aho-corasick"
-version = "0.7.6"
+version = "0.7.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -22,13 +22,22 @@ dependencies = [
]
[[package]]
+name = "aovec"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "parking_lot 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "arc-swap"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "arrayref"
-version = "0.3.5"
+version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -58,46 +67,34 @@ dependencies = [
]
[[package]]
-name = "atty"
-version = "0.2.13"
+name = "async-trait"
+version = "0.1.31"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "autocfg"
-version = "0.1.7"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
-name = "backtrace"
-version = "0.3.40"
+name = "atty"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)",
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
+ "termion 1.5.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "backtrace-sys"
-version = "0.1.32"
+name = "autocfg"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
-]
[[package]]
-name = "base64"
-version = "0.10.1"
+name = "autocfg"
+version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
-]
[[package]]
name = "base64"
@@ -105,20 +102,16 @@ version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
-name = "bibutils"
-version = "0.1.0"
-dependencies = [
- "bibutils-sys 0.1.0",
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
- "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
+name = "base64"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "bibutils-sys"
version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -141,12 +134,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "blake2b_simd"
-version = "0.5.9"
+version = "0.5.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "arrayref 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
"arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -156,7 +149,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
"byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -169,35 +162,52 @@ dependencies = [
]
[[package]]
+name = "bstr"
+version = "0.2.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-automata 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "bumpalo"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "byte-tools"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "bytemuck"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "byteorder"
-version = "1.3.2"
+version = "1.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "bytes"
-version = "0.4.12"
+version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
-]
[[package]]
-name = "c2-chacha"
+name = "cast"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "cc"
-version = "1.0.47"
+version = "1.0.52"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -220,42 +230,33 @@ dependencies = [
]
[[package]]
-name = "chrono"
-version = "0.4.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
name = "citeproc"
version = "0.0.1"
-source = "git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29#796ea0382392ae1befdc39f21162ed83b640ac29"
+source = "git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221#68c7a7c16088b5d7751641ab37299ad064cdb221"
dependencies = [
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "citeproc-db 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)",
- "citeproc-io 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)",
- "citeproc-proc 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)",
- "csl 0.0.1 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)",
- "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "citeproc-db 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)",
+ "citeproc-io 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)",
+ "citeproc-proc 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)",
+ "csl 0.0.1 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)",
+ "fnv 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "rayon 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"salsa 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thiserror 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "citeproc-db"
version = "0.1.0"
-source = "git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29#796ea0382392ae1befdc39f21162ed83b640ac29"
+source = "git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221#68c7a7c16088b5d7751641ab37299ad064cdb221"
dependencies = [
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "citeproc-io 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)",
- "csl 0.0.1 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)",
- "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "citeproc-io 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)",
+ "csl 0.0.1 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)",
+ "fnv 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"salsa 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -263,44 +264,48 @@ dependencies = [
[[package]]
name = "citeproc-io"
version = "0.1.0"
-source = "git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29#796ea0382392ae1befdc39f21162ed83b640ac29"
+source = "git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221#68c7a7c16088b5d7751641ab37299ad064cdb221"
dependencies = [
- "csl 0.0.1 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)",
- "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "csl 0.0.1 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)",
+ "fnv 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
"html5ever 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)",
"itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "nom 5.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
+ "nom 5.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "once_cell 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "phf 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
"stringreader 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unic-segment 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"v_htmlescape 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "citeproc-proc"
version = "0.1.0"
-source = "git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29#796ea0382392ae1befdc39f21162ed83b640ac29"
+source = "git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221#68c7a7c16088b5d7751641ab37299ad064cdb221"
dependencies = [
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "citeproc-db 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)",
- "citeproc-io 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)",
- "csl 0.0.1 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)",
- "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "generational-arena 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "citeproc-db 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)",
+ "citeproc-io 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)",
+ "csl 0.0.1 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)",
+ "fnv 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "generational-arena 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)",
"itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "nom 5.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "nom 5.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"petgraph 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)",
"salsa 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
"strum 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "ucd-trie 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ucd-trie 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -309,11 +314,11 @@ version = "2.33.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
"textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
"vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -336,115 +341,119 @@ version = "3.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"ascii 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "constant_time_eq"
-version = "0.1.4"
+version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
-name = "copy_dir"
-version = "0.1.2"
+name = "crc32fast"
+version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "walkdir 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "crc32fast"
-version = "1.2.0"
+name = "criterion"
+version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cast 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "criterion-plot 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "csv 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itertools 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "oorandom 11.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "plotters 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tinytemplate 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "crossbeam"
-version = "0.7.3"
+name = "criterion-plot"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-channel 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cast 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itertools 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "crossbeam-channel"
-version = "0.3.9"
+name = "crossbeam"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-channel 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-epoch 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-queue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "crossbeam-channel"
-version = "0.4.0"
+version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "crossbeam-deque"
-version = "0.7.2"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-epoch 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "crossbeam-epoch"
-version = "0.8.0"
+version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "crossbeam-queue"
-version = "0.1.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "crossbeam-queue"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "crossbeam-utils"
-version = "0.6.6"
+version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "crossbeam-utils"
-version = "0.7.0"
+version = "0.7.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -452,27 +461,47 @@ dependencies = [
[[package]]
name = "csl"
version = "0.0.1"
-source = "git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29#796ea0382392ae1befdc39f21162ed83b640ac29"
+source = "git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221#68c7a7c16088b5d7751641ab37299ad064cdb221"
dependencies = [
- "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fnv 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "nom 5.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "nom 5.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"roxmltree 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
"semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
"string_cache 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)",
"strum 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
"strum_macros 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
+name = "csv"
+version = "1.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bstr 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)",
+ "csv-core 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "csv-core"
+version = "0.1.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "deflate"
-version = "0.7.20"
+version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -480,14 +509,14 @@ name = "derive-new"
version = "0.5.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "diff"
-version = "0.1.11"
+version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -503,8 +532,8 @@ name = "dirs"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
- "redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
+ "redox_users 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -514,9 +543,9 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
- "strsim 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "strsim 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -534,45 +563,38 @@ dependencies = [
[[package]]
name = "error-chain"
-version = "0.12.1"
+version = "0.12.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "failure"
-version = "0.1.6"
+name = "fake-simd"
+version = "0.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)",
- "failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
[[package]]
-name = "failure_derive"
-version = "0.1.6"
+name = "fern"
+version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "fake-simd"
-version = "0.1.2"
+name = "fixedbitset"
+version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "fixedbitset"
-version = "0.1.9"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "fnv"
-version = "1.0.6"
+version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -600,81 +622,106 @@ version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "new_debug_unreachable 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "new_debug_unreachable 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "futures-boxed"
-version = "0.1.0"
+name = "futures"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-channel 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-executor 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-io 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-sink 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-task 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-util 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "futures-channel-preview"
-version = "0.3.0-alpha.19"
+name = "futures-channel"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "futures-core-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-sink-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-sink 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "futures-core-preview"
-version = "0.3.0-alpha.19"
+name = "futures-core"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
-name = "futures-executor-preview"
-version = "0.3.0-alpha.19"
+name = "futures-executor"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "futures-core-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-util-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-task 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-util 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "futures-io-preview"
-version = "0.3.0-alpha.19"
+name = "futures-io"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
-name = "futures-preview"
-version = "0.3.0-alpha.19"
+name = "futures-macro"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "futures-channel-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-executor-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-io-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-sink-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-util-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "futures-sink-preview"
-version = "0.3.0-alpha.19"
+name = "futures-sink"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "futures-task"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "once_cell 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
[[package]]
-name = "futures-util-preview"
-version = "0.3.0-alpha.19"
+name = "futures-util"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "futures-channel-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-io-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-sink-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-channel 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-io 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-macro 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-sink 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-task 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pin-project 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pin-utils 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro-nested 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
"slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
+name = "fuzzy-matcher"
+version = "0.3.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "generational-arena"
-version = "0.2.6"
+version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -690,12 +737,12 @@ dependencies = [
[[package]]
name = "getrandom"
-version = "0.1.13"
+version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
- "wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
+ "wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -717,10 +764,10 @@ dependencies = [
[[package]]
name = "hermit-abi"
-version = "0.1.3"
+version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -732,7 +779,7 @@ dependencies = [
"jni 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -756,19 +803,9 @@ dependencies = [
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"markup5ever 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "idna"
-version = "0.1.5"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-normalization 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -778,51 +815,52 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-normalization 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "image"
-version = "0.22.3"
+version = "0.23.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytemuck 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"gif 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "jpeg-decoder 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-rational 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "png 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "jpeg-decoder 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-iter 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-rational 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "png 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)",
"scoped_threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "tiff 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tiff 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "indexmap"
-version = "1.3.0"
+version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "indoc"
-version = "0.3.4"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "indoc-impl 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "indoc-impl 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
"proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "indoc-impl"
-version = "0.3.4"
+version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
"unindent 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -839,7 +877,7 @@ name = "iovec"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -851,8 +889,16 @@ dependencies = [
]
[[package]]
+name = "itertools"
+version = "0.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "itoa"
-version = "0.4.4"
+version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -862,10 +908,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cesu8 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"combine 3.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "error-chain 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
"jni-sys 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
+ "walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -875,34 +921,41 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "jpeg-decoder"
-version = "0.1.16"
+version = "0.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "rayon 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "js-sys"
+version = "0.3.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "jsonrpc"
version = "0.1.0"
dependencies = [
+ "async-trait 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)",
"chashmap 2.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-boxed 0.1.0",
- "futures-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_repr 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "jsonrpc-derive"
version = "0.1.0"
dependencies = [
- "futures-boxed 0.1.0",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -916,64 +969,64 @@ dependencies = [
[[package]]
name = "lalrpop"
-version = "0.17.2"
+version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"ascii-canvas 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "diff 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "diff 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
"docopt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"ena 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)",
"itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "lalrpop-util 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lalrpop-util 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)",
"petgraph 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
- "sha2 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "sha2 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
"string_cache 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)",
"term 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "lalrpop-util"
-version = "0.17.2"
+version = "0.18.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+]
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
-]
[[package]]
name = "lexical-core"
-version = "0.4.6"
+version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"arrayvec 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
"static_assertions 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "libc"
-version = "0.2.65"
+version = "0.2.67"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "lock_api"
-version = "0.3.1"
+version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -986,14 +1039,15 @@ dependencies = [
[[package]]
name = "lsp-types"
-version = "0.61.0"
+version = "0.74.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
+ "base64 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_repr 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1013,9 +1067,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
"phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)",
"string_cache 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)",
"string_cache_codegen 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
"tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1029,9 +1083,9 @@ dependencies = [
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
"phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)",
"string_cache 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)",
"string_cache_codegen 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
"tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1049,7 +1103,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "memchr"
-version = "2.2.1"
+version = "2.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -1061,15 +1115,24 @@ dependencies = [
]
[[package]]
+name = "miniz_oxide"
+version = "0.3.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "mio"
-version = "0.6.19"
+version = "0.6.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1083,7 +1146,7 @@ version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)",
"miow 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1094,8 +1157,8 @@ version = "0.6.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1124,13 +1187,13 @@ version = "0.2.33"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "new_debug_unreachable"
-version = "1.0.3"
+version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -1143,79 +1206,79 @@ name = "nom"
version = "4.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "nom"
-version = "5.0.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "lexical-core 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "num-derive"
-version = "0.2.5"
+version = "5.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lexical-core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "num-integer"
-version = "0.1.41"
+version = "0.1.42"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "num-iter"
-version = "0.1.39"
+version = "0.1.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "num-rational"
-version = "0.2.2"
+version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "num-traits"
-version = "0.2.10"
+version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "num_cpus"
-version = "1.11.1"
+version = "1.12.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
+name = "numtoa"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "once_cell"
-version = "1.2.0"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "oorandom"
+version = "11.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -1250,7 +1313,7 @@ name = "parking_lot"
version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "lock_api 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lock_api 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1260,7 +1323,7 @@ name = "parking_lot_core"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1273,7 +1336,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
"cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
"redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
"rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1281,11 +1344,6 @@ dependencies = [
]
[[package]]
-name = "path-clean"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
name = "percent-encoding"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1305,6 +1363,17 @@ dependencies = [
]
[[package]]
+name = "petgraph"
+version = "0.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "fixedbitset 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "phf"
version = "0.7.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1313,6 +1382,16 @@ dependencies = [
]
[[package]]
+name = "phf"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "phf_macros 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "phf_codegen"
version = "0.7.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1331,6 +1410,28 @@ dependencies = [
]
[[package]]
+name = "phf_generator"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "phf_macros"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "phf_generator 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "phf_shared"
version = "0.7.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1339,36 +1440,60 @@ dependencies = [
]
[[package]]
+name = "phf_shared"
+version = "0.8.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "siphasher 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "pin-project"
-version = "0.4.6"
+version = "0.4.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "pin-project-internal 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pin-project-internal 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "pin-project-internal"
-version = "0.4.6"
+version = "0.4.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
+name = "pin-project-lite"
+version = "0.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "pin-utils"
-version = "0.1.0-alpha.4"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "plotters"
+version = "0.2.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "js-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
+ "wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)",
+ "web-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)",
+]
[[package]]
name = "png"
-version = "0.15.1"
+version = "0.16.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "deflate 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)",
+ "deflate 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)",
"inflate 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1383,16 +1508,45 @@ version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "proc-macro-error"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro-error-attr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "proc-macro-error-attr"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn-mid 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "proc-macro-hack"
version = "0.5.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
+name = "proc-macro-nested"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "proc-macro2"
version = "0.4.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1402,7 +1556,7 @@ dependencies = [
[[package]]
name = "proc-macro2"
-version = "1.0.6"
+version = "1.0.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1418,10 +1572,10 @@ dependencies = [
[[package]]
name = "quote"
-version = "1.0.2"
+version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1430,7 +1584,7 @@ version = "0.4.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1442,7 +1596,7 @@ version = "0.6.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_hc 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1456,12 +1610,12 @@ dependencies = [
[[package]]
name = "rand"
-version = "0.7.2"
+version = "0.7.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_hc 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_pcg 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1478,10 +1632,10 @@ dependencies = [
[[package]]
name = "rand_chacha"
-version = "0.2.1"
+version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1503,7 +1657,7 @@ name = "rand_core"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1535,7 +1689,7 @@ name = "rand_jitter"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1547,7 +1701,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
"fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
"rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1580,24 +1734,24 @@ dependencies = [
[[package]]
name = "rayon"
-version = "1.2.1"
+version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
"either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "rayon-core 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rayon-core 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "rayon-core"
-version = "1.6.1"
+version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-queue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1614,30 +1768,45 @@ version = "0.1.56"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "redox_termios"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "redox_users"
-version = "0.3.1"
+version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand_os 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)",
"redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
- "rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rust-argon2 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "regex"
-version = "1.3.1"
+version = "1.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.1.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "regex-syntax"
-version = "0.6.12"
+version = "0.6.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -1658,26 +1827,19 @@ dependencies = [
[[package]]
name = "rust-argon2"
-version = "0.5.1"
+version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "blake2b_simd 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "blake2b_simd 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "rustc-demangle"
-version = "0.1.16"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
name = "rustc-hash"
-version = "1.0.1"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
-]
[[package]]
name = "rustc_version"
@@ -1689,7 +1851,7 @@ dependencies = [
[[package]]
name = "ryu"
-version = "1.0.2"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -1699,11 +1861,11 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"crossbeam 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
"derive-new 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rustc-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"salsa-macros 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)",
"smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1714,17 +1876,17 @@ version = "0.13.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "same-file"
-version = "1.0.5"
+version = "1.0.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1734,7 +1896,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "scopeguard"
-version = "1.0.0"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -1752,30 +1914,30 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "serde"
-version = "1.0.103"
+version = "1.0.110"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "serde_derive"
-version = "1.0.103"
+version = "1.0.110"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "serde_json"
-version = "1.0.42"
+version = "1.0.53"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1783,14 +1945,14 @@ name = "serde_repr"
version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "sha2"
-version = "0.8.0"
+version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1805,7 +1967,7 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"arc-swap 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1814,12 +1976,22 @@ version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "siphasher"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "slab"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "smallvec"
+version = "0.4.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "smallvec"
version = "0.6.13"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
@@ -1828,7 +2000,7 @@ dependencies = [
[[package]]
name = "smallvec"
-version = "1.0.0"
+version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -1837,17 +2009,12 @@ version = "0.3.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
"redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "spin"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-
-[[package]]
name = "stable_deref_trait"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1858,26 +2025,15 @@ version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
-name = "stderrlog"
-version = "0.4.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "termcolor 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
name = "string_cache"
version = "0.7.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "new_debug_unreachable 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "new_debug_unreachable 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)",
"phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
"precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
"string_cache_codegen 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)",
"string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1889,8 +2045,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
"phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
"string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@@ -1911,10 +2067,32 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "strsim"
-version = "0.9.2"
+version = "0.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "structopt"
+version = "0.3.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "structopt-derive 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "structopt-derive"
+version = "0.4.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro-error 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "strum"
version = "0.15.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1942,23 +2120,22 @@ dependencies = [
[[package]]
name = "syn"
-version = "1.0.8"
+version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
"unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "synstructure"
-version = "0.12.3"
+name = "syn-mid"
+version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -1967,8 +2144,8 @@ version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
- "rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
"redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
"remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -1989,77 +2166,69 @@ name = "term"
version = "0.5.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"dirs 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "termcolor"
-version = "0.3.6"
+name = "termion"
+version = "1.5.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "wincolor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "tex"
-version = "0.1.0"
-dependencies = [
- "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-boxed 0.1.0",
- "futures-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)",
- "tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-net 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
+ "numtoa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
+ "redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "texlab"
-version = "1.8.0"
-dependencies = [
- "base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "bibutils 0.1.0",
- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "citeproc 0.0.1 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)",
- "citeproc-db 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)",
- "citeproc-io 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)",
- "clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "copy_dir 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "csl 0.0.1 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)",
- "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-boxed 0.1.0",
- "futures-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
+version = "2.2.0"
+dependencies = [
+ "aovec 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "async-trait 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)",
+ "base64 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bibutils-sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "chashmap 2.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "citeproc 0.0.1 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)",
+ "citeproc-db 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)",
+ "citeproc-io 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)",
+ "criterion 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "csl 0.0.1 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)",
+ "fern 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fnv 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "fuzzy-matcher 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"html2md 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "image 0.22.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "indoc 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "image 0.23.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "indoc 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "itertools 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
"jsonrpc 0.1.0",
"jsonrpc-derive 0.1.0",
- "lalrpop 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "lalrpop-util 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lalrpop 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lalrpop-util 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "lsp-types 0.61.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "nom 5.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "once_cell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "path-clean 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "petgraph 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)",
- "regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lsp-types 0.74.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "nom 5.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "once_cell 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "petgraph 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)",
"serde_repr 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "stderrlog 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "structopt 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)",
"tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "tex 0.1.0",
- "tokio 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-net 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "url_serde 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thiserror 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)",
+ "titlecase 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
+ "url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -2067,215 +2236,159 @@ name = "textwrap"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "thread_local"
-version = "0.3.6"
+name = "thiserror"
+version = "1.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "thiserror-impl 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "tiff"
-version = "0.3.1"
+name = "thiserror-impl"
+version = "1.0.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-derive 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "time"
-version = "0.1.42"
+name = "thread_local"
+version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
- "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "tokio"
-version = "0.2.0-alpha.6"
+name = "tiff"
+version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-sink-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-util-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-codec 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-executor 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-fs 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-io 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-macros 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-net 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-sync 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-timer 0.3.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tracing-core 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "miniz_oxide 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "tokio-codec"
-version = "0.2.0-alpha.6"
+name = "tinytemplate"
+version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-sink-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-io 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "tokio-executor"
-version = "0.2.0-alpha.6"
+name = "titlecase"
+version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "crossbeam-channel 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-util-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-sync 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tracing 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "tokio-fs"
-version = "0.2.0-alpha.6"
+name = "tokio"
+version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "futures-core-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-util-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-executor 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-io 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-sync 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)",
+ "memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio-named-pipes 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "signal-hook-registry 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio-macros 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "tokio-io"
-version = "0.2.0-alpha.6"
+name = "tokio-macros"
+version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "pin-project 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "tokio-macros"
-version = "0.2.0-alpha.6"
+name = "tokio-util"
+version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "futures-sink 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
+ "tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "tokio-net"
-version = "0.2.0-alpha.6"
+name = "typenum"
+version = "1.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-sink-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-util-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio-named-pipes 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)",
- "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)",
- "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "signal-hook-registry 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-codec 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-executor 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-io 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-sync 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tracing 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
-]
[[package]]
-name = "tokio-sync"
-version = "0.2.0-alpha.6"
+name = "ucd-trie"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-sink-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-util-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
-]
[[package]]
-name = "tokio-timer"
-version = "0.3.0-alpha.6"
+name = "unic-char-property"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-core-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "futures-util-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)",
- "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-executor 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "tokio-sync 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unic-char-range 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "tracing"
-version = "0.1.10"
+name = "unic-char-range"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
- "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "tracing-attributes 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "tracing-core 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
-]
[[package]]
-name = "tracing-attributes"
-version = "0.1.5"
+name = "unic-common"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
-]
[[package]]
-name = "tracing-core"
-version = "0.1.7"
+name = "unic-segment"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unic-ucd-segment 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "typenum"
-version = "1.11.2"
+name = "unic-ucd-segment"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unic-char-property 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unic-char-range 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "unic-ucd-version 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
[[package]]
-name = "ucd-trie"
-version = "0.1.2"
+name = "unic-ucd-version"
+version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "unic-common 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)",
+]
[[package]]
name = "unicode-bidi"
@@ -2287,10 +2400,10 @@ dependencies = [
[[package]]
name = "unicode-normalization"
-version = "0.1.11"
+version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "smallvec 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "smallvec 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -2300,7 +2413,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "unicode-width"
-version = "0.1.6"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@@ -2328,32 +2441,13 @@ dependencies = [
[[package]]
name = "url"
-version = "1.7.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "url"
-version = "2.1.0"
+version = "2.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)",
"percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
- "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
-name = "url_serde"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)",
- "url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -2366,7 +2460,7 @@ name = "uuid"
version = "0.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -2383,9 +2477,9 @@ version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)",
- "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
- "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@@ -2408,35 +2502,89 @@ version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "version_check"
+version = "0.9.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
name = "void"
version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "walkdir"
-version = "0.1.8"
+version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "walkdir"
-version = "2.2.9"
+name = "wasi"
+version = "0.9.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
+[[package]]
+name = "wasm-bindgen"
+version = "0.2.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
- "same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
- "winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
+ "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)",
+ "wasm-bindgen-macro 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
-name = "wasi"
-version = "0.7.0"
+name = "wasm-bindgen-backend"
+version = "0.2.59"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "bumpalo 3.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
+ "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "wasm-bindgen-shared 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.59"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "wasm-bindgen-macro-support 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.59"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)",
+ "quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)",
+ "syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)",
+ "wasm-bindgen-backend 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)",
+ "wasm-bindgen-shared 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
+name = "web-sys"
+version = "0.3.36"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "js-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)",
+ "wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
name = "winapi"
version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2462,7 +2610,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "winapi-util"
-version = "0.1.2"
+version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -2474,14 +2622,6 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
-name = "wincolor"
-version = "0.1.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-dependencies = [
- "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
-]
-
-[[package]]
name = "ws2_32-sys"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2497,137 +2637,147 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[metadata]
"checksum adler32 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5d2e7343e7fc9de883d1b0341e0b13970f764c14101234857d2ddafa1cb1cac2"
-"checksum aho-corasick 0.7.6 (registry+https://github.com/rust-lang/crates.io-index)" = "58fb5e95d83b38284460a5fda7d6470aa0b8844d283a0b614b8535e880800d2d"
+"checksum aho-corasick 0.7.10 (registry+https://github.com/rust-lang/crates.io-index)" = "8716408b8bc624ed7f65d223ddb9ac2d044c0547b6fa4b0d554f3a9540496ada"
"checksum ansi_term 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
+"checksum aovec 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e6cfde8df73bd42d9bcbfd8fa4578d4d2a37512efe0436351739e025ab791cd9"
"checksum arc-swap 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "d7b8a9123b8027467bce0099fe556c628a53c8d83df0507084c31e9ba2e39aff"
-"checksum arrayref 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0d382e583f07208808f6b1249e60848879ba3543f57c32277bf52d69c2f0f0ee"
+"checksum arrayref 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a4c527152e37cf757a3f78aae5a06fbeefdb07ccc535c980a3208ee3060dd544"
"checksum arrayvec 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "cd9fd44efafa8690358b7408d253adf110036b88f55672a933f01d616ad9b1b9"
"checksum arrayvec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cff77d8686867eceff3105329d4698d96c2391c176d5d03adc90c7389162b5b8"
"checksum ascii 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e"
"checksum ascii-canvas 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff8eb72df928aafb99fe5d37b383f2fe25bd2a765e3e5f7c365916b6f2463a29"
-"checksum atty 0.2.13 (registry+https://github.com/rust-lang/crates.io-index)" = "1803c647a3ec87095e7ae7acfca019e98de5ec9a7d01343f611cf3152ed71a90"
+"checksum async-trait 0.1.31 (registry+https://github.com/rust-lang/crates.io-index)" = "26c4f3195085c36ea8d24d32b2f828d23296a9370a28aa39d111f6f16bef9f3b"
+"checksum atty 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "9a7d5b8723950951411ee34d271d99dddcc2035a16ab25310ea2c8cfd4369652"
"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2"
-"checksum backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "924c76597f0d9ca25d762c25a4d369d51267536465dc5064bdf0eb073ed477ea"
-"checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491"
-"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
+"checksum autocfg 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f8aac770f1885fd7e387acedd76065302551364496e46b3dd00860b2f8359b9d"
"checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
+"checksum base64 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "53d1ccbaf7d9ec9537465a97bf19edc1a4e158ecb49fc16178202238c569cc42"
+"checksum bibutils-sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "819e96544dd4aadc8416a2fdd0205a886664b6eb0c17704de46c836373e9c515"
"checksum bit-set 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e84c238982c4b1e1ee668d136c510c67a13465279c0cb367ea6baf6310620a80"
"checksum bit-vec 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f59bbe95d4e52a6398ec21238d31577f2b28a9d86807f06ca59d191d8440d0bb"
"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693"
-"checksum blake2b_simd 0.5.9 (registry+https://github.com/rust-lang/crates.io-index)" = "b83b7baab1e671718d78204225800d6b170e648188ac7dc992e9d6bddf87d0c0"
+"checksum blake2b_simd 0.5.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d8fb2d74254a3a0b5cac33ac9f8ed0e44aa50378d9dbb2e5d83bd21ed1dc2c8a"
"checksum block-buffer 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c0940dc441f31689269e10ac70eb1002a3a1d3ad1390e030043662eb7fe4688b"
"checksum block-padding 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "fa79dedbb091f449f1f39e53edf88d5dbe95f895dae6135a8d7b881fb5af73f5"
+"checksum bstr 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "2889e6d50f394968c8bf4240dc3f2a7eb4680844d27308f798229ac9d4725f41"
+"checksum bumpalo 3.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1f359dc14ff8911330a51ef78022d376f25ed00248912803b58f00cb1c27f742"
"checksum byte-tools 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e3b5ca7a04898ad4bcd41c90c5285445ff5b791899bb1b0abdd2a2aa791211d7"
-"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5"
-"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c"
-"checksum c2-chacha 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "214238caa1bf3a496ec3392968969cab8549f96ff30652c9e56885329315f6bb"
-"checksum cc 1.0.47 (registry+https://github.com/rust-lang/crates.io-index)" = "aa87058dce70a3ff5621797f1506cb837edd02ac4c0ae642b4542dce802908b8"
+"checksum bytemuck 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "37fa13df2292ecb479ec23aa06f4507928bef07839be9ef15281411076629431"
+"checksum byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de"
+"checksum bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)" = "130aac562c0dd69c56b3b1cc8ffd2e17be31d0b6c25b61c96b76231aa23e39e1"
+"checksum cast 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4b9434b9a5aa1450faa3f9cb14ea0e8c53bb5d2b3c1bfd1ab4fc03e9f33fbfb0"
+"checksum cc 1.0.52 (registry+https://github.com/rust-lang/crates.io-index)" = "c3d87b23d6a92cd03af510a5ade527033f6aa6fa92161e2d5863a907d4c5e31d"
"checksum cesu8 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6d43a04d8753f35258c91f8ec639f792891f748a1edbd759cf1dcea3382ad83c"
"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
"checksum chashmap 2.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ff41a3c2c1e39921b9003de14bf0439c7b63a9039637c291e1a64925d8ddfa45"
-"checksum chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "31850b4a4d6bae316f7a09e691c944c28299298837edc0a03f755618c23cbc01"
-"checksum citeproc 0.0.1 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)" = "<none>"
-"checksum citeproc-db 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)" = "<none>"
-"checksum citeproc-io 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)" = "<none>"
-"checksum citeproc-proc 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)" = "<none>"
+"checksum citeproc 0.0.1 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)" = "<none>"
+"checksum citeproc-db 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)" = "<none>"
+"checksum citeproc-io 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)" = "<none>"
+"checksum citeproc-proc 0.1.0 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)" = "<none>"
"checksum clap 2.33.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5067f5bb2d80ef5d68b4c87db81601f0b75bca627bc2ef76b141d7b846a3c6d9"
"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
"checksum color_quant 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0dbbb57365263e881e805dc77d94697c9118fd94d8da011240555aa7b23445bd"
"checksum combine 3.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680"
-"checksum constant_time_eq 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "995a44c877f9212528ccc74b21a232f66ad69001e40ede5bcee2ac9ef2657120"
-"checksum copy_dir 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6e4281031634644843bd2f5aa9c48cf98fc48d6b083bd90bb11becf10deaf8b0"
+"checksum constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
+"checksum criterion 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "63f696897c88b57f4ffe3c69d8e1a0613c7d0e6c4833363c8560fbde9c47b966"
+"checksum criterion-plot 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ddeaf7989f00f2e1d871a26a110f3ed713632feac17f65f03ca938c542618b60"
"checksum crossbeam 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "69323bff1fb41c635347b8ead484a5ca6c3f11914d784170b158d8449ab07f8e"
-"checksum crossbeam-channel 0.3.9 (registry+https://github.com/rust-lang/crates.io-index)" = "c8ec7fcd21571dc78f96cc96243cab8d8f035247c3efd16c687be154c3fa9efa"
-"checksum crossbeam-channel 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "acec9a3b0b3559f15aee4f90746c4e5e293b701c0f7d3925d24e01645267b68c"
-"checksum crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca"
-"checksum crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac"
-"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b"
-"checksum crossbeam-queue 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "dfd6515864a82d2f877b42813d4553292c6659498c9a2aa31bab5a15243c2700"
-"checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6"
-"checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4"
-"checksum csl 0.0.1 (git+https://github.com/cormacrelf/citeproc-rs?rev=796ea0382392ae1befdc39f21162ed83b640ac29)" = "<none>"
-"checksum deflate 0.7.20 (registry+https://github.com/rust-lang/crates.io-index)" = "707b6a7b384888a70c8d2e8650b3e60170dfc6a67bb4aa67b6dfca57af4bedb4"
+"checksum crossbeam-channel 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "cced8691919c02aac3cb0a1bc2e9b73d89e832bf9a06fc579d4e71b68a2da061"
+"checksum crossbeam-deque 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "9f02af974daeee82218205558e51ec8768b48cf524bd01d550abe5573a608285"
+"checksum crossbeam-epoch 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "058ed274caafc1f60c4997b5fc07bf7dc7cca454af7c6e81edffe5f33f70dace"
+"checksum crossbeam-queue 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c695eeca1e7173472a32221542ae469b3e9aac3a4fc81f7696bcad82029493db"
+"checksum crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3c7c73a2d1e9fc0886a08b93e98eb643461230d5f1925e4036204d5f2e261a8"
+"checksum csl 0.0.1 (git+https://github.com/cormacrelf/citeproc-rs?rev=68c7a7c16088b5d7751641ab37299ad064cdb221)" = "<none>"
+"checksum csv 1.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "00affe7f6ab566df61b4be3ce8cf16bc2576bca0963ceb0955e45d514bf9a279"
+"checksum csv-core 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
+"checksum deflate 0.8.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e7e5d2a2273fed52a7f947ee55b092c4057025d7a3e04e5ecdbd25d6c3fb1bd7"
"checksum derive-new 0.5.8 (registry+https://github.com/rust-lang/crates.io-index)" = "71f31892cd5c62e414316f2963c5689242c43d8e7bbcaaeca97e5e28c95d91d9"
-"checksum diff 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "3c2b69f912779fbb121ceb775d74d51e915af17aaebc38d28a592843a2dd0a3a"
+"checksum diff 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "0e25ea47919b1560c4e3b7fe0aaab9becf5b84a10325ddf7db0f0ba5e1026499"
"checksum digest 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f3d0c8c8752312f9713efd397ff63acb9f85585afbf179282e720e7704954dd5"
"checksum dirs 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3fd78930633bd1c6e35c4b42b1df7b0cbc6bc191146e512bb3bedf243fcc3901"
"checksum docopt 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7f525a586d310c87df72ebcd98009e57f1cc030c8c268305287a476beb653969"
"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3"
"checksum ena 0.13.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8944dc8fa28ce4a38f778bd46bf7d923fe73eed5a439398507246c8e017e6f36"
-"checksum error-chain 0.12.1 (registry+https://github.com/rust-lang/crates.io-index)" = "3ab49e9dcb602294bc42f9a7dfc9bc6e936fca4418ea300dbfb84fe16de0b7d9"
-"checksum failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9"
-"checksum failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08"
+"checksum error-chain 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d371106cc88ffdfb1eabd7111e432da544f16f3e2d7bf1dfe8bf575f1df045cd"
"checksum fake-simd 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e88a8acf291dafb59c2d96e8f59828f3838bb1a70398823ade51a84de6a6deed"
+"checksum fern 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8c9a4820f0ccc8a7afd67c39a0f1a0f4b07ca1725164271a64939d7aeb9af065"
"checksum fixedbitset 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "86d4de0081402f5e88cdac65c8dcdcc73118c1a7a465e2a05f0da05843a8ea33"
-"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3"
+"checksum fixedbitset 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "37ab347416e802de484e4d03c7316c48f1ecb56574dfd4a46a80f173ce1de04d"
+"checksum fnv 1.0.7 (registry+https://github.com/rust-lang/crates.io-index)" = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
"checksum fuchsia-cprng 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "a06f77d526c1a601b7c4cdd98f54b5eaabffc14d5f2f0296febdc7f357c6d3ba"
"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82"
"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7"
"checksum futf 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7c9c1ce3fa9336301af935ab852c437817d14cd33690446569392e65170aac3b"
-"checksum futures-channel-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)" = "d5e5f4df964fa9c1c2f8bddeb5c3611631cacd93baf810fc8bb2fb4b495c263a"
-"checksum futures-core-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)" = "b35b6263fb1ef523c3056565fa67b1d16f0a8604ff12b11b08c25f28a734c60a"
-"checksum futures-executor-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)" = "75236e88bd9fe88e5e8bfcd175b665d0528fe03ca4c5207fabc028c8f9d93e98"
-"checksum futures-io-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)" = "f4914ae450db1921a56c91bde97a27846287d062087d4a652efc09bb3a01ebda"
-"checksum futures-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)" = "3b1dce2a0267ada5c6ff75a8ba864b4e679a9e2aa44262af7a3b5516d530d76e"
-"checksum futures-sink-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)" = "86f148ef6b69f75bb610d4f9a2336d4fc88c4b5b67129d1a340dd0fd362efeec"
-"checksum futures-util-preview 0.3.0-alpha.19 (registry+https://github.com/rust-lang/crates.io-index)" = "5ce968633c17e5f97936bd2797b6e38fb56cf16a7422319f7ec2e30d3c470e8d"
-"checksum generational-arena 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "675c9623fbcdb4b402176db720bf5d95883a36303703ed1bd3a03482382f735a"
+"checksum futures 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1e05b85ec287aac0dc34db7d4a569323df697f9c55b99b15d6b4ef8cde49f613"
+"checksum futures-channel 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f366ad74c28cca6ba456d95e6422883cfb4b252a83bed929c83abfdbbf2967d5"
+"checksum futures-core 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "59f5fff90fd5d971f936ad674802482ba441b6f09ba5e15fd8b39145582ca399"
+"checksum futures-executor 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "10d6bb888be1153d3abeb9006b11b02cf5e9b209fda28693c31ae1e4e012e314"
+"checksum futures-io 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "de27142b013a8e869c14957e6d2edeef89e97c289e69d042ee3a49acd8b51789"
+"checksum futures-macro 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d0b5a30a4328ab5473878237c447333c093297bded83a4983d10f4deea240d39"
+"checksum futures-sink 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "3f2032893cb734c7a05d85ce0cc8b8c4075278e93b24b66f9de99d6eb0fa8acc"
+"checksum futures-task 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "bdb66b5f09e22019b1ab0830f7785bcea8e7a42148683f99214f73f8ec21a626"
+"checksum futures-util 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "8764574ff08b701a084482c3c7031349104b07ac897393010494beaa18ce32c6"
+"checksum fuzzy-matcher 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "75a03d6d8629fcd151ece9d3a7f59a87fc38a620ab0290bf2888c2ad73821170"
+"checksum generational-arena 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "0e40d0cee2e2fb4fba18b55a27bf96faf49fa86d49f178695bd3bf4500b156b4"
"checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec"
-"checksum getrandom 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)" = "e7db7ca94ed4cd01190ceee0d8a8052f08a247aa1b469a7f68c6a3b71afcf407"
+"checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
"checksum gif 0.10.3 (registry+https://github.com/rust-lang/crates.io-index)" = "471d90201b3b223f3451cd4ad53e34295f16a1df17b1edf3736d47761c3981af"
"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
-"checksum hermit-abi 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "307c3c9f937f38e3534b1d6447ecf090cafcc9744e4a6360e8b037b2cf5af120"
+"checksum hermit-abi 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "1010591b26bbfe835e9faeabeb11866061cc7dcebffd56ad7d0942d0e61aefd8"
"checksum html2md 0.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "e3f40515ebe18a0e23fa35cfce0694e681474a29c6cf0ebe510c05ad6cf2233c"
"checksum html5ever 0.22.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c213fa6a618dc1da552f54f85cba74b05d8e883c92ec4e89067736938084c26e"
"checksum html5ever 0.24.1 (registry+https://github.com/rust-lang/crates.io-index)" = "025483b0a1e4577bb28578318c886ee5f817dda6eb62473269349044406644cb"
-"checksum idna 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "38f09e0f0b1fb55fdee1f17470ad800da77af5186a1a76c026b679358b7e844e"
"checksum idna 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "02e2673c30ee86b5b96a9cb52ad15718aa1f966f5ab9ad54a8b95d5ca33120a9"
-"checksum image 0.22.3 (registry+https://github.com/rust-lang/crates.io-index)" = "7b4be8aaefbe7545dc42ae925afb55a0098f226a3fe5ef721872806f44f57826"
-"checksum indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712d7b3ea5827fcb9d4fda14bf4da5f136f0db2ae9c8f4bd4e2d1c6fde4e6db2"
-"checksum indoc 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "3f9553c1e16c114b8b77ebeb329e5f2876eed62a8d51178c8bc6bff0d65f98f8"
-"checksum indoc-impl 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b714fc08d0961716390977cdff1536234415ac37b509e34e5a983def8340fb75"
+"checksum image 0.23.4 (registry+https://github.com/rust-lang/crates.io-index)" = "9117f4167a8f21fa2bb3f17a652a760acd7572645281c98e3b612a26242c96ee"
+"checksum indexmap 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "076f042c5b7b98f31d205f1249267e12a6518c1481e9dae9764af19b707d2292"
+"checksum indoc 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "79255cf29f5711995ddf9ec261b4057b1deb34e66c90656c201e41376872c544"
+"checksum indoc-impl 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "54554010aa3d17754e484005ea0022f1c93839aabc627c2c55f3d7b47206134c"
"checksum inflate 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "1cdb29978cc5797bd8dcc8e5bf7de604891df2a8dc576973d71a281e916db2ff"
"checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
"checksum itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"
-"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f"
+"checksum itertools 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "284f18f85651fe11e8a991b2adb42cb078325c996ed026d994719efcfca1d54b"
+"checksum itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "b8b7a7c0c47db5545ed3fef7468ee7bb5b74691498139e4b3f6a20685dc6dd8e"
"checksum jni 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "294eca097d1dc0bf59de5ab9f7eafa5f77129e9f6464c957ed3ddeb705fb4292"
"checksum jni-sys 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8eaf4bc02d17cbdd7ff4c7438cafcdf7fb9a4613313ad11b4f8fefe7d3fa0130"
-"checksum jpeg-decoder 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "c1aae18ffeeae409c6622c3b6a7ee49792a7e5a062eea1b135fbb74e301792ba"
+"checksum jpeg-decoder 0.1.18 (registry+https://github.com/rust-lang/crates.io-index)" = "0256f0aec7352539102a9efbcb75543227b7ab1117e0f95450023af730128451"
+"checksum js-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)" = "1cb931d43e71f560c81badb0191596562bafad2be06a3f9025b845c847c60df5"
"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d"
-"checksum lalrpop 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)" = "64dc3698e75d452867d9bd86f4a723f452ce9d01fe1d55990b79f0c790aa67db"
-"checksum lalrpop-util 0.17.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c277d18683b36349ab5cd030158b54856fca6bb2d5dc5263b06288f486958b7c"
+"checksum lalrpop 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)" = "de5e019883a6e9734d093f34216a3857160c6bc2a9a1ec196a177aaa737c74af"
+"checksum lalrpop-util 0.18.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7d6e9bc1801eb54529fd6a020aaf9514e8193bb6b42d96d0fe7da99187efa93d"
"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
-"checksum lexical-core 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2304bccb228c4b020f3a4835d247df0a02a7c4686098d4167762cfbbe4c5cb14"
-"checksum libc 0.2.65 (registry+https://github.com/rust-lang/crates.io-index)" = "1a31a0627fdf1f6a39ec0dd577e101440b7db22672c0901fe00a9a6fbb5c24e8"
-"checksum lock_api 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f8912e782533a93a167888781b836336a6ca5da6175c05944c86cf28c31104dc"
+"checksum lexical-core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d7043aa5c05dd34fb73b47acb8c3708eac428de4545ea3682ed2f11293ebd890"
+"checksum libc 0.2.67 (registry+https://github.com/rust-lang/crates.io-index)" = "eb147597cdf94ed43ab7a9038716637d2d1bf2bc571da995d0028dec06bd3018"
+"checksum lock_api 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "79b2de95ecb4691949fea4716ca53cdbcfccb2c612e19644a8bad05edcf9f47b"
"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
-"checksum lsp-types 0.61.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fa3268fbe8beb2795c2fb327bf44f4f3d24f5fe9ebc18d7e2980afd444d72bcf"
+"checksum lsp-types 0.74.1 (registry+https://github.com/rust-lang/crates.io-index)" = "57c0e6a2b8837d27b29deb3f3e6dc1c6d2f57947677f9be1024e482ec5b59525"
"checksum lzw 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7d947cbb889ed21c2a84be6ffbaebf5b4e0f4340638cba0444907e38b56be084"
"checksum mac 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4"
"checksum markup5ever 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "897636f9850c3eef4905a5540683ed53dc9393860f0846cab2c2ddf9939862ff"
"checksum markup5ever 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "65381d9d47506b8592b97c4efd936afcf673b09b059f2bef39c7211ee78b9d03"
"checksum matches 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7ffc5c5338469d4d3ea17d269fa8ea3512ad247247c30bd2df69e68309ed0a08"
"checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
-"checksum memchr 2.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "88579771288728879b57485cc7d6b07d648c9f0141eb955f8ab7f9d45394468e"
+"checksum memchr 2.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3728d817d99e5ac407411fa471ff9800a778d88a24685968b36824eaf4bee400"
"checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9"
-"checksum mio 0.6.19 (registry+https://github.com/rust-lang/crates.io-index)" = "83f51996a3ed004ef184e16818edc51fadffe8e7ca68be67f9dee67d84d0ff23"
+"checksum miniz_oxide 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "aa679ff6578b1cddee93d7e82e263b94a575e0bfced07284eb0c037c1d2416a5"
+"checksum mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)" = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f"
"checksum mio-named-pipes 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f5e374eff525ce1c5b7687c4cef63943e7686524a387933ad27ca7ec43779cb3"
"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125"
"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919"
"checksum miow 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "396aa0f2003d7df8395cb93e09871561ccc3e785f0acb369170e8cc74ddf9226"
"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88"
-"checksum new_debug_unreachable 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f40f005c60db6e03bae699e414c58bf9aa7ea02a2d0b9bfbcf19286cc4c82b30"
+"checksum new_debug_unreachable 1.0.4 (registry+https://github.com/rust-lang/crates.io-index)" = "e4a24736216ec316047a1fc4252e27dabb04218aa4a3f37c6e7ddbf1f9782b54"
"checksum nodrop 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
"checksum nom 4.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6"
-"checksum nom 5.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "c618b63422da4401283884e6668d39f819a106ef51f5f59b81add00075da35ca"
-"checksum num-derive 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "eafd0b45c5537c3ba526f79d3e75120036502bebacbb3f3220914067ce39dbf2"
-"checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09"
-"checksum num-iter 0.1.39 (registry+https://github.com/rust-lang/crates.io-index)" = "76bd5272412d173d6bf9afdf98db8612bbabc9a7a830b7bfc9c188911716132e"
-"checksum num-rational 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f2885278d5fe2adc2f75ced642d52d879bffaceb5a2e0b1d4309ffdfb239b454"
-"checksum num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c81ffc11c212fa327657cb19dd85eb7419e163b5b076bede2bdb5c974c07e4"
-"checksum num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72"
-"checksum once_cell 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "891f486f630e5c5a4916c7e16c4b24a53e78c860b646e9f8e005e4f16847bfed"
+"checksum nom 5.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b471253da97532da4b61552249c521e01e736071f71c1a4f7ebbfbf0a06aad6"
+"checksum num-integer 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba"
+"checksum num-iter 0.1.40 (registry+https://github.com/rust-lang/crates.io-index)" = "dfb0800a0291891dd9f4fe7bd9c19384f98f7fbe0cd0f39a2c6b88b9868bbc00"
+"checksum num-rational 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5c000134b5dbf44adc5cb772486d335293351644b801551abe8f75c84cfa4aef"
+"checksum num-traits 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
+"checksum num_cpus 1.12.0 (registry+https://github.com/rust-lang/crates.io-index)" = "46203554f085ff89c235cd12f7075f3233af9b11ed7c9e16dfe2560d03313ce6"
+"checksum numtoa 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b8f8bdf33df195859076e54ab11ee78a1b208382d3a26ec40d142ffc1ecc49ef"
+"checksum once_cell 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0b631f7e854af39a1739f401cf34a8a013dfe09eac4fa4dba91e9768bd28168d"
+"checksum oorandom 11.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ebcec7c9c2a95cacc7cd0ecb89d8a8454eca13906f6deb55258ffff0adeb9405"
"checksum opaque-debug 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2839e79665f131bdb5782e51f2c6c9599c133c6098982a54c794358bf432529c"
"checksum ordermap 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a86ed3f5f244b372d6b1a00b72ef7f8876d0bc6a78a4c9985c53614041512063"
"checksum owning_ref 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37"
@@ -2635,30 +2785,39 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
"checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252"
"checksum parking_lot_core 0.2.14 (registry+https://github.com/rust-lang/crates.io-index)" = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa"
"checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b"
-"checksum path-clean 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ecba01bf2678719532c5e3059e0b5f0811273d94b397088b82e3bd0a78c78fdd"
"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
"checksum petgraph 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)" = "9c3659d1ee90221741f65dd128d9998311b0e40c5d3c23a62445938214abce4f"
+"checksum petgraph 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "29c127eea4a29ec6c85d153c59dc1213f33ec74cead30fe4730aecc88cc1fd92"
"checksum phf 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b3da44b85f8e8dfaec21adae67f95d93244b2ecf6ad2a692320598dcc8e6dd18"
+"checksum phf 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "3dfb61232e34fcb633f43d12c58f83c1df82962dcdfa565a4e866ffc17dafe12"
"checksum phf_codegen 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "b03e85129e324ad4166b06b2c7491ae27fe3ec353af72e72cd1654c7225d517e"
"checksum phf_generator 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "09364cc93c159b8b06b1f4dd8a4398984503483891b0c26b867cf431fb132662"
+"checksum phf_generator 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "17367f0cc86f2d25802b2c26ee58a7b23faeccf78a396094c13dced0d0182526"
+"checksum phf_macros 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7f6fde18ff429ffc8fe78e2bf7f8b7a5a5a6e2a8b58bc5a9ac69198bbda9189c"
"checksum phf_shared 0.7.24 (registry+https://github.com/rust-lang/crates.io-index)" = "234f71a15de2288bcb7e3b6515828d22af7ec8598ee6d24c3b526fa0a80b67a0"
-"checksum pin-project 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "94b90146c7216e4cb534069fb91366de4ea0ea353105ee45ed297e2d1619e469"
-"checksum pin-project-internal 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "44ca92f893f0656d3cba8158dd0f2b99b94de256a4a54e870bd6922fcc6c8355"
-"checksum pin-utils 0.1.0-alpha.4 (registry+https://github.com/rust-lang/crates.io-index)" = "5894c618ce612a3fa23881b152b608bafb8c56cfc22f434a3ba3120b40f7b587"
-"checksum png 0.15.1 (registry+https://github.com/rust-lang/crates.io-index)" = "1f00ec9242f8e01119e83117dbadf34c5228ac2f1c4ddcd92bffa340d52291de"
+"checksum phf_shared 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c00cf8b9eafe68dde5e9eaa2cef8ee84a9336a47d566ec55ca16589633b65af7"
+"checksum pin-project 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)" = "81d480cb4e89522ccda96d0eed9af94180b7a5f93fb28f66e1fd7d68431663d1"
+"checksum pin-project-internal 0.4.16 (registry+https://github.com/rust-lang/crates.io-index)" = "a82996f11efccb19b685b14b5df818de31c1edcee3daa256ab5775dd98e72feb"
+"checksum pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "237844750cfbb86f67afe27eee600dfbbcb6188d734139b534cbfbf4f96792ae"
+"checksum pin-utils 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
+"checksum plotters 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "4e3bb8da247d27ae212529352020f3e5ee16e83c0c258061d27b08ab92675eeb"
+"checksum png 0.16.2 (registry+https://github.com/rust-lang/crates.io-index)" = "910f09135b1ed14bb16be445a8c23ddf0777eca485fbfc7cee00d81fecab158a"
"checksum ppv-lite86 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)" = "74490b50b9fbe561ac330df47c08f3f33073d2d00c150f719147d7c54522fa1b"
"checksum precomputed-hash 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c"
+"checksum proc-macro-error 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "98e9e4b82e0ef281812565ea4751049f1bdcdfccda7d3f459f2e138a40c08678"
+"checksum proc-macro-error-attr 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4f5444ead4e9935abd7f27dc51f7e852a0569ac888096d5ec2499470794e2e53"
"checksum proc-macro-hack 0.5.11 (registry+https://github.com/rust-lang/crates.io-index)" = "ecd45702f76d6d3c75a80564378ae228a85f0b59d2f3ed43c91b4a69eb2ebfc5"
+"checksum proc-macro-nested 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "369a6ed065f249a159e06c45752c780bda2fb53c995718f9e484d08daa9eb42e"
"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759"
-"checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27"
+"checksum proc-macro2 1.0.13 (registry+https://github.com/rust-lang/crates.io-index)" = "53f5ffe53a6b28e37c9c1ce74893477864d64f74778a93a4beb43c8fa167f639"
"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1"
-"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe"
+"checksum quote 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "54a21852a652ad6f610c9510194f398ff6f8692e334fd1145fed931f7fbe44ea"
"checksum rand 0.4.6 (registry+https://github.com/rust-lang/crates.io-index)" = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
"checksum rand 0.6.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6d71dacdc3c88c1fde3885a3be3fbab9f35724e6ce99467f7d9c5026132184ca"
-"checksum rand 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "3ae1b169243eaf61759b8475a998f0a385e42042370f3a7dbaf35246eacc8412"
+"checksum rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
"checksum rand_chacha 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "556d3a1ca6600bfcbab7c7c91ccb085ac7fbbcd70e008a98742e7847f4f7bcef"
-"checksum rand_chacha 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "03a2a90da8c7523f554344f921aa97283eadf6ac484a6d2a7d0212fa7f8d6853"
+"checksum rand_chacha 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
"checksum rand_core 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6fdeb83b075e8266dcc8762c22776f6877a63111121f5f8c7411e5be7eed4b"
"checksum rand_core 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "9c33a3c44ca05fa6f1807d8e6743f3824e8509beca625669633be0acbdf509dc"
"checksum rand_core 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
@@ -2670,86 +2829,87 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
"checksum rand_pcg 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "abf9b09b01790cfe0364f52bf32995ea3c39f4d2dd011eac241d2914146d0b44"
"checksum rand_pcg 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "16abd0c1b639e9eb4d7c50c0b8100b0d0f849be2349829c740fe8e6eb4816429"
"checksum rand_xorshift 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cbf7e9e623549b0e21f6e97cf8ecf247c1a8fd2e8a992ae265314300b2455d5c"
-"checksum rayon 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "43739f8831493b276363637423d3622d4bd6394ab6f0a9c4a552e208aeb7fddd"
-"checksum rayon-core 1.6.1 (registry+https://github.com/rust-lang/crates.io-index)" = "f8bf17de6f23b05473c437eb958b9c850bfc8af0961fe17b4cc92d5a627b4791"
+"checksum rayon 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "db6ce3297f9c85e16621bb8cca38a06779ffc31bb8184e1be4bed2be4678a098"
+"checksum rayon-core 1.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08a89b46efaf957e52b18062fb2f4660f8b8a4dde1807ca002690868ef2c85a9"
"checksum rdrand 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "678054eb77286b51581ba43620cc911abf02758c91f93f479767aed0f90458b2"
"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84"
-"checksum redox_users 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ecedbca3bf205f8d8f5c2b44d83cd0690e39ee84b951ed649e9f1841132b66d"
-"checksum regex 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dc220bd33bdce8f093101afe22a037b8eb0e5af33592e6a9caafff0d4cb81cbd"
-"checksum regex-syntax 0.6.12 (registry+https://github.com/rust-lang/crates.io-index)" = "11a7e20d1cce64ef2fed88b66d347f88bd9babb82845b2b858f3edbf59a4f716"
+"checksum redox_termios 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7e891cfe48e9100a70a3b6eb652fef28920c117d366339687bd5576160db0f76"
+"checksum redox_users 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "09b23093265f8d200fa7b4c2c76297f47e681c655f6f1285a8780d6a022f7431"
+"checksum regex 1.3.7 (registry+https://github.com/rust-lang/crates.io-index)" = "a6020f034922e3194c711b82a627453881bc4682166cabb07134a10c26ba7692"
+"checksum regex-automata 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "ae1ded71d66a4a97f5e961fd0cb25a5f366a42a41570d16a763a69c092c26ae4"
+"checksum regex-syntax 0.6.17 (registry+https://github.com/rust-lang/crates.io-index)" = "7fe5bd57d1d7414c6b5ed48563a2c855d995ff777729dcd91c369ec7fea395ae"
"checksum remove_dir_all 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "4a83fa3702a688b9359eccba92d153ac33fd2e8462f9e0e3fdf155239ea7792e"
"checksum roxmltree 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0852407257c1b696a0c66b9db3ffe7769c2744a2fa725c8050e6f3e5a823c02b"
-"checksum rust-argon2 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4ca4eaef519b494d1f2848fc602d18816fed808a981aedf4f1f00ceb7c9d32cf"
-"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
-"checksum rustc-hash 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "7540fc8b0c49f096ee9c961cda096467dce8084bec6bdca2fc83895fd9b28cb8"
+"checksum rust-argon2 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2bc8af4bda8e1ff4932523b94d3dd20ee30a87232323eda55903ffd71d2fb017"
+"checksum rustc-hash 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
-"checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8"
+"checksum ryu 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "535622e6be132bccd223f4bb2b8ac8d53cda3c7a6394944d3b2b33fb974f9d76"
"checksum salsa 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)" = "ec0865bdd9d8e614686a0cbb76979c735810131d287eb1683e91e4e64a58c387"
"checksum salsa-macros 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)" = "cac182212d3a1db75ddc42399ff1461b258a694b8318ee7e0baf6c976e39efee"
-"checksum same-file 1.0.5 (registry+https://github.com/rust-lang/crates.io-index)" = "585e8ddcedc187886a30fa705c47985c3fa88d06624095856b36ca0b82ff4421"
+"checksum same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
"checksum scoped_threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8"
-"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d"
+"checksum scopeguard 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
-"checksum serde 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)" = "1217f97ab8e8904b57dd22eb61cde455fa7446a9c1cf43966066da047c1f3702"
-"checksum serde_derive 1.0.103 (registry+https://github.com/rust-lang/crates.io-index)" = "a8c6faef9a2e64b0064f48570289b4bf8823b7581f1d6157c1b52152306651d0"
-"checksum serde_json 1.0.42 (registry+https://github.com/rust-lang/crates.io-index)" = "1a3351dcbc1f067e2c92ab7c3c1f288ad1a4cffc470b5aaddb4c2e0a3ae80043"
+"checksum serde 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)" = "99e7b308464d16b56eba9964e4972a3eee817760ab60d88c3f86e1fecb08204c"
+"checksum serde_derive 1.0.110 (registry+https://github.com/rust-lang/crates.io-index)" = "818fbf6bfa9a42d3bfcaca148547aa00c7b915bec71d1757aa2d44ca68771984"
+"checksum serde_json 1.0.53 (registry+https://github.com/rust-lang/crates.io-index)" = "993948e75b189211a9b31a7528f950c6adc21f9720b6438ff80a7fa2f864cea2"
"checksum serde_repr 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "cd02c7587ec314570041b2754829f84d873ced14a96d1fd1823531e11db40573"
-"checksum sha2 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7b4d8bfd0e469f417657573d8451fb33d16cfe0989359b93baf3a1ffc639543d"
+"checksum sha2 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "27044adfd2e1f077f649f59deb9490d3941d674002f7d062870a60ebe9bd47a0"
"checksum signal-hook-registry 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94f478ede9f64724c5d173d7bb56099ec3e2d9fc2774aac65d34b8b890405f41"
"checksum siphasher 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "0b8de496cf83d4ed58b6be86c3a275b8602f6ffe98d3024a869e124147a9a3ac"
+"checksum siphasher 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "83da420ee8d1a89e640d0948c646c1c088758d3a3c538f943bfa97bdac17929d"
"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
+"checksum smallvec 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f90c5e5fe535e48807ab94fc611d323935f39d4660c52b26b96446a7b33aef10"
"checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6"
-"checksum smallvec 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4ecf3b85f68e8abaa7555aa5abdb1153079387e60b718283d732f03897fcfc86"
+"checksum smallvec 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c7cb5678e1615754284ec264d9bb5b4c27d2018577fd90ac0ceb578591ed5ee4"
"checksum socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "e8b74de517221a2cb01a53349cf54182acdc31a074727d3079068448c0676d85"
-"checksum spin 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
"checksum stable_deref_trait 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8"
"checksum static_assertions 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "7f3eb36b47e512f8f1c9e3d10c2c1965bc992bd9cdb024fa581e2194501c83d3"
-"checksum stderrlog 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "61dc66b7ae72b65636dbf36326f9638fb3ba27871bb737a62e2c309b87d91b70"
"checksum string_cache 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "89c058a82f9fd69b1becf8c274f412281038877c553182f1d02eb027045a2d67"
"checksum string_cache_codegen 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f0f45ed1b65bf9a4bf2f7b7dc59212d1926e9eaf00fa998988e420fd124467c6"
"checksum string_cache_shared 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b1884d1bc09741d466d9b14e6d37ac89d6909cbcac41dd9ae982d4d063bbedfc"
"checksum stringreader 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "913e7b03d63752f6cdd2df77da36749d82669904798fe8944b9ec3d23f159905"
"checksum strsim 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a"
-"checksum strsim 0.9.2 (registry+https://github.com/rust-lang/crates.io-index)" = "032c03039aae92b350aad2e3779c352e104d919cb192ba2fabbd7b831ce4f0f6"
+"checksum strsim 0.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "6446ced80d6c486436db5c078dde11a9f73d42b57fb273121e160b84f63d894c"
+"checksum structopt 0.3.14 (registry+https://github.com/rust-lang/crates.io-index)" = "863246aaf5ddd0d6928dfeb1a9ca65f505599e4e1b399935ef7e75107516b4ef"
+"checksum structopt-derive 0.4.7 (registry+https://github.com/rust-lang/crates.io-index)" = "d239ca4b13aee7a2142e6795cbd69e457665ff8037aed33b3effdc430d2f927a"
"checksum strum 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e5d1c33039533f051704951680f1adfd468fd37ac46816ded0d9ee068e60f05f"
"checksum strum_macros 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "47cd23f5c7dee395a00fa20135e2ec0fffcdfa151c56182966d7a3261343432e"
"checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5"
-"checksum syn 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)" = "661641ea2aa15845cddeb97dad000d22070bb5c1fb456b96c1cba883ec691e92"
-"checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545"
+"checksum syn 1.0.24 (registry+https://github.com/rust-lang/crates.io-index)" = "f87bc5b2815ebb664de0392fdf1b95b6d10e160f86d9f64ff65e5679841ca06a"
+"checksum syn-mid 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7be3539f6c128a931cf19dcee741c1af532c7fd387baa739c03dd2e96479338a"
"checksum tempfile 3.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"
"checksum tendril 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "707feda9f2582d5d680d733e38755547a3e8fb471e7ba11452ecfd9ce93a5d3b"
"checksum term 0.5.2 (registry+https://github.com/rust-lang/crates.io-index)" = "edd106a334b7657c10b7c540a0106114feadeb4dc314513e97df481d5d966f42"
-"checksum termcolor 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "adc4587ead41bf016f11af03e55a624c06568b5a19db4e90fde573d805074f83"
+"checksum termion 1.5.5 (registry+https://github.com/rust-lang/crates.io-index)" = "c22cec9d8978d906be5ac94bceb5a010d885c626c4c8855721a4dbd20e3ac905"
"checksum textwrap 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060"
-"checksum thread_local 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)" = "c6b53e329000edc2b34dbe8545fd20e55a333362d0a321909685a19bd28c3f1b"
-"checksum tiff 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d7b7c2cfc4742bd8a32f2e614339dd8ce30dbcf676bb262bd63a2327bc5df57d"
-"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f"
-"checksum tokio 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)" = "1f17f5d6ab0f35c1506678b28fb1798bdf74fcb737e9843c7b17b73e426eba38"
-"checksum tokio-codec 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9f5d22fd1e84bd4045d28813491cb7d7caae34d45c80517c2213f09a85e8787a"
-"checksum tokio-executor 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9ee9ceecf69145923834ea73f32ba40c790fd877b74a7817dd0b089f1eb9c7c8"
-"checksum tokio-fs 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0bf85e16971e06e680c622e0c1b455be94b086275c5ddcd6d4a83a2bfbb83cda"
-"checksum tokio-io 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)" = "112784d5543df30660b04a72ca423bfbd90e8bb32f94dcf610f15401218b22c5"
-"checksum tokio-macros 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)" = "86b616374bcdadd95974e1f0dfca07dc913f1163c53840c0d664aca35114964e"
-"checksum tokio-net 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a441682cd32f3559383112c4a7f372f5c9fa1950c5cf8c8dd05274a2ce8c2654"
-"checksum tokio-sync 0.2.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)" = "4f1aaeb685540f7407ea0e27f1c9757d258c7c6bf4e3eb19da6fc59b747239d2"
-"checksum tokio-timer 0.3.0-alpha.6 (registry+https://github.com/rust-lang/crates.io-index)" = "b97c1587fe71018eb245a4a9daa13a5a3b681bbc1f7fdadfe24720e141472c13"
-"checksum tracing 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "ff4e4f59e752cb3beb5b61c6d5e11191c7946231ba84faec2902c9efdd8691c5"
-"checksum tracing-attributes 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "a4263b12c3d3c403274493eb805966093b53214124796552d674ca1dd5d27c2b"
-"checksum tracing-core 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "bc913647c520c959b6d21e35ed8fa6984971deca9f0a2fcb8c51207e0c56af1d"
+"checksum thiserror 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)" = "b13f926965ad00595dd129fa12823b04bbf866e9085ab0a5f2b05b850fbfc344"
+"checksum thiserror-impl 1.0.19 (registry+https://github.com/rust-lang/crates.io-index)" = "893582086c2f98cde18f906265a65b5030a074b1046c674ae898be6519a7f479"
+"checksum thread_local 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d40c6d1b69745a6ec6fb1ca717914848da4b44ae29d9b3080cbee91d72a69b14"
+"checksum tiff 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "002351e428db1eb1d8656d4ca61947c3519ac3191e1c804d4600cd32093b77ad"
+"checksum tinytemplate 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "57a3c6667d3e65eb1bc3aed6fd14011c6cbc3a0665218ab7f5daf040b9ec371a"
+"checksum titlecase 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f565e410cfc24c2f2a89960b023ca192689d7f77d3f8d4f4af50c2d8affe1117"
+"checksum tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)" = "d099fa27b9702bed751524694adbe393e18b36b204da91eb1cbbbbb4a5ee2d58"
+"checksum tokio-macros 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c3acc6aa564495a0f2e1d59fab677cd7f81a19994cfc7f3ad0e64301560389"
+"checksum tokio-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499"
"checksum typenum 1.11.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6d2783fe2d6b8c1101136184eb41be8b1ad379e4657050b8aaff0c79ee7575f9"
-"checksum ucd-trie 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8f00ed7be0c1ff1e24f46c3d2af4859f7e863672ba3a6e92e7cff702bf9f06c2"
+"checksum ucd-trie 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "56dee185309b50d1f11bfedef0fe6d036842e3fb77413abef29f8f8d1c5d4c1c"
+"checksum unic-char-property 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221"
+"checksum unic-char-range 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc"
+"checksum unic-common 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc"
+"checksum unic-segment 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23"
+"checksum unic-ucd-segment 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700"
+"checksum unic-ucd-version 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4"
"checksum unicode-bidi 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "49f2bd0c6468a8230e1db229cff8029217cf623c767ea5d60bfbd42729ea54d5"
-"checksum unicode-normalization 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "b561e267b2326bb4cebfc0ef9e68355c7abe6c6f522aeac2f5bf95d56c59bdcf"
+"checksum unicode-normalization 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5479532badd04e128284890390c1e876ef7a993d0570b3597ae43dfa1d59afa4"
"checksum unicode-segmentation 1.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e83e153d1053cbb5a118eeff7fd5be06ed99153f00dbcd8ae310c5fb2b22edc0"
-"checksum unicode-width 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7007dbd421b92cc6e28410fe7362e2e0a2503394908f417b68ec8d1c364c4e20"
+"checksum unicode-width 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "caaa9d531767d1ff2150b9332433f32a24622147e5ebb1f26409d5da67afd479"
"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c"
"checksum unindent 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "63f18aa3b0e35fed5a0048f029558b1518095ffe2a0a31fb87c93dece93a4993"
"checksum unreachable 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56"
-"checksum url 1.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "dd4e7c0d531266369519a4aa4f399d748bd37043b00bde1e4ff1f60a120b355a"
-"checksum url 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "75b414f6c464c879d7f9babf951f23bc3743fb7313c081b2e6ca719067ea9d61"
-"checksum url_serde 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "74e7d099f1ee52f823d4bdd60c93c3602043c728f5db3b97bdb548467f7bddea"
+"checksum url 2.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "829d4a8476c35c9bf0bbce5a3b23f4106f79728039b726d292bb93bc106787cb"
"checksum utf-8 0.7.5 (registry+https://github.com/rust-lang/crates.io-index)" = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7"
"checksum uuid 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "9fde2f6a4bea1d6e007c4ad38c6839fa71cbb63b6dbf5b595aa38dc9b1093c11"
"checksum v_escape 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)" = "660b101c07b5d0863deb9e7fb3138777e858d6d2a79f9e6049a27d1cc77c6da6"
@@ -2757,16 +2917,21 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
"checksum v_htmlescape 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "e33e939c0d8cf047514fb6ba7d5aac78bc56677a6938b2ee67000b91f2e97e41"
"checksum vec_map 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "05c78687fb1a80548ae3250346c3db86a80a7cdd77bda190189f2d0a0987c81a"
"checksum version_check 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd"
+"checksum version_check 0.9.1 (registry+https://github.com/rust-lang/crates.io-index)" = "078775d0255232fb988e6fccf26ddc9d1ac274299aaedcedce21c6f72cc533ce"
"checksum void 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
-"checksum walkdir 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "c66c0b9792f0a765345452775f3adbd28dde9d33f30d13e5dcc5ae17cf6f3780"
-"checksum walkdir 2.2.9 (registry+https://github.com/rust-lang/crates.io-index)" = "9658c94fa8b940eab2250bd5a457f9c48b748420d71293b165c8cdbe2f55f71e"
-"checksum wasi 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b89c3ce4ce14bdc6fb6beaf9ec7928ca331de5df7e5ea278375642a2f478570d"
+"checksum walkdir 2.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "777182bc735b6424e1a57516d35ed72cb8019d85c8c9bf536dccb3445c1a2f7d"
+"checksum wasi 0.9.0+wasi-snapshot-preview1 (registry+https://github.com/rust-lang/crates.io-index)" = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
+"checksum wasm-bindgen 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "3557c397ab5a8e347d434782bcd31fc1483d927a6826804cec05cc792ee2519d"
+"checksum wasm-bindgen-backend 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "e0da9c9a19850d3af6df1cb9574970b566d617ecfaf36eb0b706b6f3ef9bd2f8"
+"checksum wasm-bindgen-macro 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "0f6fde1d36e75a714b5fe0cffbb78978f222ea6baebb726af13c78869fdb4205"
+"checksum wasm-bindgen-macro-support 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "25bda4168030a6412ea8a047e27238cadf56f0e53516e1e83fec0a8b7c786f6d"
+"checksum wasm-bindgen-shared 0.2.59 (registry+https://github.com/rust-lang/crates.io-index)" = "fc9f36ad51f25b0219a3d4d13b90eb44cd075dff8b6280cca015775d7acaddd8"
+"checksum web-sys 0.3.36 (registry+https://github.com/rust-lang/crates.io-index)" = "721c6263e2c66fd44501cc5efbfa2b7dfa775d13e4ea38c46299646ed1f9c70a"
"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a"
"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6"
"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc"
"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
-"checksum winapi-util 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7168bab6e1daee33b4557efd0e95d5ca70a03706d39fa5f3fe7a236f584b03c9"
+"checksum winapi-util 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "4ccfbf554c6ad11084fb7517daca16cfdcaccbdadba4fc336f032a8b12c2ad80"
"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
-"checksum wincolor 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eeb06499a3a4d44302791052df005d5232b927ed1a9658146d842165c4de7767"
"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e"
"checksum xmlparser 0.10.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8110496c5bcc0d966b0b2da38d5a791aa139eeb0b80e7840a7463c2b806921eb"
diff --git a/support/texlab/Cargo.toml b/support/texlab/Cargo.toml
index 9c516ea864..56e90a2aa0 100644
--- a/support/texlab/Cargo.toml
+++ b/support/texlab/Cargo.toml
@@ -1,67 +1,111 @@
[package]
name = "texlab"
description = "LaTeX Language Server"
-version = "1.8.0"
-license = "GPLv3"
+version = "2.2.0"
+license = "GPL-3.0"
readme = "README.md"
authors = [
- "Eric Förster <efoerster@users.noreply.github.com>",
- "Patrick Förster <pfoerster@users.noreply.github.com>"]
+ "Eric Förster <eric.foerster@outlook.com>",
+ "Patrick Förster <patrick.foerster@outlook.de>",
+]
edition = "2018"
+homepage = "https://texlab.netlify.app"
[workspace]
-members = [
- "crates/bibutils",
- "crates/bibutils_sys",
- "crates/futures_boxed",
- "crates/jsonrpc",
- "crates/jsonrpc_derive",
- "crates/tex"]
+members = ["crates/*"]
+
+[lib]
+doctest = false
+
+[features]
+default = [
+ "citation",
+ "server",
+ "test",
+]
+citation = [
+ "bibutils-sys",
+ "citeproc",
+ "citeproc-db",
+ "citeproc-io",
+ "csl",
+ "fnv",
+ "html2md",
+ "lalrpop/lexer",
+ "lalrpop-util",
+]
+server = [
+ "bytes",
+ "jsonrpc",
+ "jsonrpc-derive",
+ "nom",
+ "tokio-util/codec",
+]
+test = [
+ "server",
+ "aovec",
+]
+
+[[bin]]
+name = "texlab"
+required-features = ["server"]
+
+[[test]]
+name = "integration"
+required-features = ["test"]
[dependencies]
-base64 = "0.11.0"
-bibutils = { path = "crates/bibutils" }
-bytes = "0.4.12"
-citeproc = { git = "https://github.com/cormacrelf/citeproc-rs", rev = "796ea0382392ae1befdc39f21162ed83b640ac29" }
-citeproc-db = { git = "https://github.com/cormacrelf/citeproc-rs", rev = "796ea0382392ae1befdc39f21162ed83b640ac29" }
-citeproc-io = { git = "https://github.com/cormacrelf/citeproc-rs", rev = "796ea0382392ae1befdc39f21162ed83b640ac29" }
-clap = "2.33"
-csl = { git = "https://github.com/cormacrelf/citeproc-rs", rev = "796ea0382392ae1befdc39f21162ed83b640ac29" }
-fnv = "1.0.3"
-futures-boxed = { path = "crates/futures_boxed" }
-futures-preview = "0.3.0-alpha.18"
-html2md = "0.2.9"
-image = "0.22.3"
-itertools = "0.8.2"
-jsonrpc = { path = "crates/jsonrpc" }
-jsonrpc-derive = { path = "crates/jsonrpc_derive" }
-lalrpop-util = "0.17.2"
-log = "0.4.6"
-lsp-types = { version = "0.61.0", features = ["proposed"] }
-nom = "5.0.1"
-once_cell = "1.2.0"
-path-clean = "0.1.0"
-petgraph = "0.4.13"
-regex = "1.3.1"
-serde = { version = "1.0.103", features = ["derive", "rc"] }
-serde_json = "1.0.42"
+async-trait = "0.1"
+aovec = { version = "1.1", optional = true }
+base64 = "0.12"
+bibutils-sys = { version = "0.1", optional = true }
+byteorder = "1.3"
+bytes = { version = "0.5", optional = true }
+chashmap = "2.2"
+cfg-if = "0.1"
+citeproc = { git = "https://github.com/cormacrelf/citeproc-rs", rev = "68c7a7c16088b5d7751641ab37299ad064cdb221", optional = true }
+citeproc-db = { git = "https://github.com/cormacrelf/citeproc-rs", rev = "68c7a7c16088b5d7751641ab37299ad064cdb221", optional = true }
+citeproc-io = { git = "https://github.com/cormacrelf/citeproc-rs", rev = "68c7a7c16088b5d7751641ab37299ad064cdb221", optional = true }
+csl = { git = "https://github.com/cormacrelf/citeproc-rs", rev = "68c7a7c16088b5d7751641ab37299ad064cdb221", optional = true }
+fern = "0.6"
+fnv = { version = "1.0", optional = true }
+futures = "0.3"
+fuzzy-matcher = "0.3"
+html2md = { version = "0.2", optional = true }
+image = "0.23"
+itertools = "0.9"
+jsonrpc = { path = "crates/jsonrpc", optional = true }
+jsonrpc-derive = { path = "crates/jsonrpc_derive", optional = true }
+lalrpop-util = { version = "0.18", optional = true }
+log = "0.4"
+lsp-types = { version = "0.74.1" }
+nom = { version = "5.1", optional = true }
+once_cell = "1.4"
+petgraph = { version = "0.5", features = ["serde-1"] }
+rayon = "1.3"
+regex = "1.3"
+serde = { version = "1.0", features = ["derive", "rc"] }
+serde_json = "1.0"
serde_repr = "0.1"
-stderrlog = "0.4.1"
-tempfile = "3"
-tex = { path = "crates/tex" }
-tokio = "0.2.0-alpha.6"
-tokio-net = { version = "0.2.0-alpha.6", features = ["process"]}
+structopt = "0.3"
+tempfile = "3.1"
+thiserror = "1.0"
+titlecase = "1.1"
+tokio = { version = "0.2", features = ["fs", "io-std", "macros", "process", "rt-core", "time"] }
+tokio-util = { version = "0.3", optional = true }
+url = "2.1"
uuid = { version = "0.8", features = ["v4"] }
-url = "2.0.0"
-url_serde = "0.2.0"
-walkdir = "2"
[dev-dependencies]
-copy_dir = "0.1.2"
-indoc = "0.3.4"
+criterion = "0.3"
+indoc = "0.3"
[build-dependencies]
-lalrpop = "0.17.2"
+lalrpop = { version = "0.18", optional = true }
[profile.release]
lto = true
+
+[[bench]]
+name = "bench_main"
+harness = false
diff --git a/support/texlab/README.md b/support/texlab/README.md
index 24634bbd3f..c87618bb8e 100644
--- a/support/texlab/README.md
+++ b/support/texlab/README.md
@@ -1,21 +1,27 @@
-[![GitHub release](https://img.shields.io/github/release/latex-lsp/texlab)](https://github.com/latex-lsp/texlab/releases)
-[![Arch Linux](https://img.shields.io/archlinux/v/community/x86_64/texlab)](https://www.archlinux.org/packages/community/x86_64/texlab/)
+[![CI](https://github.com/latex-lsp/texlab/workflows/CI/badge.svg)](https://github.com/latex-lsp/texlab/actions)
+[![Coverage](https://codecov.io/gh/latex-lsp/texlab/branch/master/graph/badge.svg)](https://codecov.io/gh/latex-lsp/texlab)
[![Rust](https://img.shields.io/badge/rustc-1.39%2B-blue)](https://blog.rust-lang.org/2019/11/07/Rust-1.39.0.html)
-[![Build Status](https://dev.azure.com/latex-lsp/texlab/_apis/build/status/latex-lsp.texlab?branchName=master)](https://dev.azure.com/latex-lsp/texlab/_build/latest?definitionId=8&branchName=master)
-[![Coverage](https://img.shields.io/azure-devops/coverage/latex-lsp/texlab/8.svg?logo=azuredevops)](https://dev.azure.com/latex-lsp/texlab/_build/latest?definitionId=8&branchName=master)
[![Dependabot](https://api.dependabot.com/badges/status?host=github&repo=latex-lsp/texlab)](https://dependabot.com)
+[![GitHub release](https://img.shields.io/github/release/latex-lsp/texlab?label=github)](https://github.com/latex-lsp/texlab/releases)
+[![CTAN](https://img.shields.io/ctan/v/texlab)](https://ctan.org/pkg/texlab)
+[![Arch Linux](https://repology.org/badge/version-for-repo/arch/texlab.svg?header=arch%20linux)](https://www.archlinux.org/packages/community/x86_64/texlab/)
+[![NixOS Stable](https://repology.org/badge/version-for-repo/nix_stable/texlab.svg?header=nixos%20stable)](https://nixos.org/nixos/packages.html?channel=nixos-20.03&query=texlab)
+[![NixOS Unstable](https://repology.org/badge/version-for-repo/nix_unstable/texlab.svg?header=nixos%20unstable)](https://nixos.org/nixos/packages.html?channel=nixpkgs-unstable&query=texlab)
+[![Homebrew](https://repology.org/badge/version-for-repo/homebrew/texlab.svg?header=homebrew)](https://formulae.brew.sh/formula/texlab)
+[![Scoop](https://repology.org/badge/version-for-repo/scoop/texlab.svg?header=scoop)](https://scoop.sh/)
+
# TexLab
A cross-platform implementation of the [Language Server Protocol](https://microsoft.github.io/language-server-protocol)
providing rich cross-editing support for the [LaTeX](https://www.latex-project.org/) typesetting system.
We provide an [extension](https://github.com/latex-lsp/texlab-vscode) for [Visual Studio Code](https://code.visualstudio.com).
-Learn more about the project on our [website](https://texlab.netlify.com).
+Learn more about the project on our [website](https://texlab.netlify.app).
## Getting Started
-See the [installation chapter](https://texlab.netlify.com/docs) from our docs.
+See the [installation chapter](https://texlab.netlify.app/docs) from our docs.
## Building from Source
@@ -29,6 +35,13 @@ Then run the following command in the project folder:
cargo build --release
```
+Alternatively, Rust users can run the following command
+without having to clone this repository:
+
+```shell
+cargo install --git https://github.com/latex-lsp/texlab.git
+```
+
## Development
You can create a debug build by building the server without the `--release` flag.
@@ -38,7 +51,7 @@ by adding the absolute path of the `target/debug` folder to your `PATH` environm
TexLab has an extensive test suite of unit and integration tests. You can run them by executing
```shell
-cargo test --all
+cargo test
```
in the project folder.
diff --git a/support/texlab/benches/bench_main.rs b/support/texlab/benches/bench_main.rs
new file mode 100644
index 0000000000..a73dbc1aa9
--- /dev/null
+++ b/support/texlab/benches/bench_main.rs
@@ -0,0 +1,7 @@
+mod benchmarks;
+
+use criterion::criterion_main;
+
+criterion_main! {
+ benchmarks::completion::benches
+}
diff --git a/support/texlab/benches/benchmarks/completion.rs b/support/texlab/benches/benchmarks/completion.rs
new file mode 100644
index 0000000000..4653102460
--- /dev/null
+++ b/support/texlab/benches/benchmarks/completion.rs
@@ -0,0 +1,135 @@
+use criterion::criterion_group;
+use criterion::{BenchmarkId, Criterion};
+use futures::executor::block_on;
+use indoc::indoc;
+use std::time::Duration;
+use texlab::{completion::CompletionProvider, feature::FeatureTester};
+
+fn criterion_benchmark(criterion: &mut Criterion) {
+ criterion.bench_with_input(
+ BenchmarkId::new("Completion", "LaTeX Word"),
+ &LATEX_CODE,
+ |b, code| {
+ b.iter(|| {
+ block_on(async {
+ FeatureTester::new()
+ .file("main.tex", *code)
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion(CompletionProvider::new())
+ .await
+ });
+ });
+ },
+ );
+
+ criterion.bench_with_input(
+ BenchmarkId::new("Completion", "LaTeX Command (Filtered)"),
+ &LATEX_CODE,
+ |b, code| {
+ b.iter(|| {
+ block_on(async {
+ FeatureTester::new()
+ .file("main.tex", *code)
+ .main("main.tex")
+ .position(0, 1)
+ .test_completion(CompletionProvider::new())
+ .await
+ });
+ });
+ },
+ );
+
+ criterion.bench_with_input(
+ BenchmarkId::new("Completion", "LaTeX Command (Unfiltered)"),
+ &LATEX_CODE,
+ |b, code| {
+ b.iter(|| {
+ block_on(async {
+ FeatureTester::new()
+ .file("main.tex", *code)
+ .main("main.tex")
+ .position(30, 1)
+ .test_completion(CompletionProvider::new())
+ .await
+ });
+ });
+ },
+ );
+
+ criterion.bench_with_input(
+ BenchmarkId::new("Completion", "LaTeX Environment"),
+ &LATEX_CODE,
+ |b, code| {
+ b.iter(|| {
+ block_on(async {
+ FeatureTester::new()
+ .file("main.tex", *code)
+ .main("main.tex")
+ .position(9, 9)
+ .test_completion(CompletionProvider::new())
+ .await
+ });
+ })
+ },
+ );
+
+ criterion.bench_with_input(
+ BenchmarkId::new("Completion", "LaTeX Label"),
+ &LATEX_CODE,
+ |b, code| {
+ b.iter(|| {
+ block_on(async {
+ FeatureTester::new()
+ .file("main.tex", *code)
+ .main("main.tex")
+ .position(15, 7)
+ .test_completion(CompletionProvider::new())
+ .await
+ });
+ })
+ },
+ );
+}
+
+criterion_group! {
+ name = benches;
+ config = Criterion::default().measurement_time(Duration::from_secs(60));
+ targets = criterion_benchmark
+}
+
+static LATEX_CODE: &str = indoc!(
+ r#"
+ \documentclass{article}
+ \usepackage{amsmath}
+ \usepackage{lipsum}
+ \usepackage{geometry}
+ \usepackage[utf8]{inputenc}
+ \newcommand{\foo}{foo}
+ \DeclareMathOperator{\bar}{bar}
+ \include{child1}
+ \input{child2.tex}
+ \begin{document}
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
+ \begin{equation*}\label{eq:foo}
+ e^{i \pi} + 1 = 0
+ \end{equation*}
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
+ \ref{eq:foo}
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
+ \section{Foo}\label{sec:foo}
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
+ \subsection{Bar}\label{sec:bar}
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
+ \include{foo}
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
+ \input{bar.tex}
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
+ \cite{foo, bar, baz}
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
+ \nocite{*}
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec fermentum lectus placerat, suscipit ligula quis.
+ \end{document}
+ \
+ "#
+);
diff --git a/support/texlab/benches/benchmarks/mod.rs b/support/texlab/benches/benchmarks/mod.rs
new file mode 100644
index 0000000000..c893d109ab
--- /dev/null
+++ b/support/texlab/benches/benchmarks/mod.rs
@@ -0,0 +1 @@
+pub mod completion;
diff --git a/support/texlab/build.rs b/support/texlab/build.rs
index 228a42992c..5283240997 100644
--- a/support/texlab/build.rs
+++ b/support/texlab/build.rs
@@ -1,6 +1,6 @@
fn main() {
- lalrpop::Configuration::new()
- .generate_in_source_tree()
- .process()
- .unwrap();
+ println!("cargo:rerun-if-changed=src/citeproc/name/parser.lalrpop");
+
+ #[cfg(feature = "citation")]
+ lalrpop::process_root().unwrap();
}
diff --git a/support/texlab/crates/bibutils/Cargo.toml b/support/texlab/crates/bibutils/Cargo.toml
deleted file mode 100644
index 42ad371abf..0000000000
--- a/support/texlab/crates/bibutils/Cargo.toml
+++ /dev/null
@@ -1,13 +0,0 @@
-[package]
-name = "bibutils"
-version = "0.1.0"
-authors = [
- "Eric Förster <efoerster@users.noreply.github.com>",
- "Patrick Förster <pfoerster@users.noreply.github.com>"]
-edition = "2018"
-
-[dependencies]
-bibutils-sys = { path = "../bibutils_sys" }
-libc = "0.2"
-tempfile = "3"
-tokio = "0.2.0-alpha.6"
diff --git a/support/texlab/crates/bibutils_sys/Cargo.toml b/support/texlab/crates/bibutils_sys/Cargo.toml
deleted file mode 100644
index 4f117e8cb8..0000000000
--- a/support/texlab/crates/bibutils_sys/Cargo.toml
+++ /dev/null
@@ -1,10 +0,0 @@
-[package]
-name = "bibutils-sys"
-version = "0.1.0"
-authors = [
- "Eric Förster <efoerster@users.noreply.github.com>",
- "Patrick Förster <pfoerster@users.noreply.github.com>"]
-edition = "2018"
-
-[build-dependencies]
-cc = "1.0"
diff --git a/support/texlab/crates/bibutils_sys/build.rs b/support/texlab/crates/bibutils_sys/build.rs
deleted file mode 100644
index ebd333eec9..0000000000
--- a/support/texlab/crates/bibutils_sys/build.rs
+++ /dev/null
@@ -1,71 +0,0 @@
-fn main() {
- cc::Build::new()
- .warnings(false)
- .extra_warnings(false)
- .define("_CRT_SECURE_NO_WARNINGS", None)
- .file("src/adsout.c")
- .file("src/adsout_journals.c")
- .file("src/bibcore.c")
- .file("src/bibl.c")
- .file("src/biblatexin.c")
- .file("src/bibtexin.c")
- .file("src/bibtexout.c")
- .file("src/bibtextypes.c")
- .file("src/bibutils.c")
- .file("src/bltypes.c")
- .file("src/bu_auth.c")
- .file("src/charsets.c")
- .file("src/copacin.c")
- .file("src/copactypes.c")
- .file("src/ebiin.c")
- .file("src/endin.c")
- .file("src/endout.c")
- .file("src/endtypes.c")
- .file("src/endxmlin.c")
- .file("src/entities.c")
- .file("src/fields.c")
- .file("src/gb18030.c")
- // .file("src/gb18030_enumeration.c")
- .file("src/generic.c")
- .file("src/intlist.c")
- .file("src/isiin.c")
- .file("src/isiout.c")
- .file("src/isitypes.c")
- .file("src/iso639_1.c")
- .file("src/iso639_2.c")
- .file("src/iso639_3.c")
- .file("src/is_ws.c")
- .file("src/latex.c")
- .file("src/marc_auth.c")
- .file("src/medin.c")
- .file("src/modsin.c")
- .file("src/modsout.c")
- .file("src/modstypes.c")
- // .file("src/mycvout.c")
- .file("src/name.c")
- .file("src/nbibin.c")
- .file("src/nbibout.c")
- .file("src/nbibtypes.c")
- .file("src/notes.c")
- .file("src/pages.c")
- .file("src/reftypes.c")
- .file("src/risin.c")
- .file("src/risout.c")
- .file("src/ristypes.c")
- .file("src/serialno.c")
- .file("src/slist.c")
- .file("src/str.c")
- .file("src/strsearch.c")
- .file("src/str_conv.c")
- .file("src/title.c")
- .file("src/type.c")
- .file("src/unicode.c")
- .file("src/url.c")
- .file("src/utf8.c")
- .file("src/vplist.c")
- .file("src/wordin.c")
- .file("src/wordout.c")
- .file("src/xml.c")
- .file("src/xml_encoding.c")
- .compile("bibutils");
-}
diff --git a/support/texlab/crates/bibutils_sys/src/Copying b/support/texlab/crates/bibutils_sys/src/Copying
deleted file mode 100644
index 7a1fb3f001..0000000000
--- a/support/texlab/crates/bibutils_sys/src/Copying
+++ /dev/null
@@ -1,340 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/support/texlab/crates/bibutils_sys/src/adsout.c b/support/texlab/crates/bibutils_sys/src/adsout.c
deleted file mode 100644
index dbb6381dda..0000000000
--- a/support/texlab/crates/bibutils_sys/src/adsout.c
+++ /dev/null
@@ -1,679 +0,0 @@
-/*
- * adsout.c
- *
- * Copyright (c) Richard Mathar 2007-2019
- * Copyright (c) Chris Putnam 2007-2019
- *
- * Program and source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
-#include <ctype.h>
-#include "utf8.h"
-#include "str.h"
-#include "strsearch.h"
-#include "fields.h"
-#include "generic.h"
-#include "name.h"
-#include "title.h"
-#include "type.h"
-#include "url.h"
-#include "bibformats.h"
-#include "msvc_fix.h"
-
-/*****************************************************
- PUBLIC: int adsout_initparams()
-*****************************************************/
-
-static int adsout_write( fields *in, FILE *fp, param *p, unsigned long refnum );
-static int adsout_assemble( fields *in, fields *out, param *pm, unsigned long refnum );
-
-int
-adsout_initparams( param *pm, const char *progname )
-{
- pm->writeformat = BIBL_ADSABSOUT;
- pm->format_opts = 0;
- pm->charsetout = BIBL_CHARSET_DEFAULT;
- pm->charsetout_src = BIBL_SRC_DEFAULT;
- pm->latexout = 0;
- pm->utf8out = BIBL_CHARSET_UTF8_DEFAULT;
- pm->utf8bom = BIBL_CHARSET_BOM_DEFAULT;
- pm->xmlout = BIBL_XMLOUT_FALSE;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->singlerefperfile = 0;
-
- if ( pm->charsetout == BIBL_CHARSET_UNICODE ) {
- pm->utf8out = pm->utf8bom = 1;
- }
-
- pm->headerf = generic_writeheader;
- pm->footerf = NULL;
- pm->assemblef = adsout_assemble;
- pm->writef = adsout_write;
-
- if ( !pm->progname ) {
- if ( !progname ) pm->progname=NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int adsout_assemble()
-*****************************************************/
-
-enum {
- TYPE_UNKNOWN = 0,
- TYPE_GENERIC,
- TYPE_ARTICLE,
- TYPE_MAGARTICLE,
- TYPE_BOOK,
- TYPE_INBOOK,
- TYPE_INPROCEEDINGS,
- TYPE_HEARING,
- TYPE_BILL,
- TYPE_CASE,
- TYPE_NEWSPAPER,
- TYPE_COMMUNICATION,
- TYPE_BROADCAST,
- TYPE_MANUSCRIPT,
- TYPE_REPORT,
- TYPE_THESIS,
- TYPE_MASTERSTHESIS,
- TYPE_PHDTHESIS,
- TYPE_DIPLOMATHESIS,
- TYPE_DOCTORALTHESIS,
- TYPE_HABILITATIONTHESIS,
- TYPE_LICENTIATETHESIS,
- TYPE_PATENT,
- TYPE_PROGRAM
-};
-
-static int
-get_type( fields *in )
-{
- match_type genre_matches[] = {
- { "academic journal", TYPE_ARTICLE, LEVEL_ANY },
- { "communication", TYPE_COMMUNICATION, LEVEL_ANY },
- { "conference publication", TYPE_INPROCEEDINGS, LEVEL_ANY },
- { "Diploma thesis", TYPE_DIPLOMATHESIS, LEVEL_ANY },
- { "Doctoral thesis", TYPE_DOCTORALTHESIS, LEVEL_ANY },
- { "Habilitation thesis", TYPE_HABILITATIONTHESIS, LEVEL_ANY },
- { "hearing", TYPE_HEARING, LEVEL_ANY },
- { "legal case and case notes", TYPE_CASE, LEVEL_ANY },
- { "legislation", TYPE_BILL, LEVEL_ANY },
- { "Licentiate thesis", TYPE_LICENTIATETHESIS, LEVEL_ANY },
- { "magazine", TYPE_MAGARTICLE, LEVEL_ANY },
- { "manuscript", TYPE_MANUSCRIPT, LEVEL_ANY },
- { "Masters thesis", TYPE_MASTERSTHESIS, LEVEL_ANY },
- { "newspaper", TYPE_NEWSPAPER, LEVEL_ANY },
- { "patent", TYPE_PATENT, LEVEL_ANY },
- { "Ph.D. thesis", TYPE_PHDTHESIS, LEVEL_ANY },
- { "report", TYPE_REPORT, LEVEL_ANY },
- { "technical report", TYPE_REPORT, LEVEL_ANY },
- { "unpublished", TYPE_MANUSCRIPT, LEVEL_ANY },
- { "periodical", TYPE_ARTICLE, LEVEL_ANY },
- { "thesis", TYPE_THESIS, LEVEL_ANY },
- { "book", TYPE_BOOK, LEVEL_MAIN },
- { "book", TYPE_INBOOK, LEVEL_ANY },
- { "collection", TYPE_BOOK, LEVEL_MAIN },
- { "collection", TYPE_INBOOK, LEVEL_ANY },
- };
- int ngenre_matches = sizeof( genre_matches ) / sizeof( genre_matches[0] );
-
- match_type resource_matches[] = {
- { "moving image", TYPE_BROADCAST, LEVEL_ANY },
- { "software, multimedia", TYPE_PROGRAM, LEVEL_ANY },
- };
- int nresource_matches = sizeof( resource_matches ) /sizeof( resource_matches[0] );
-
- match_type issuance_matches[] = {
- { "monographic", TYPE_BOOK, LEVEL_MAIN },
- { "monographic", TYPE_INBOOK, LEVEL_ANY },
- };
- int nissuance_matches = sizeof( issuance_matches ) /sizeof( issuance_matches[0] );
-
- int type;
-
- type = type_from_mods_hints( in, TYPE_FROM_GENRE, genre_matches, ngenre_matches, TYPE_UNKNOWN );
- if ( type==TYPE_UNKNOWN ) type = type_from_mods_hints( in, TYPE_FROM_RESOURCE, resource_matches, nresource_matches, TYPE_UNKNOWN );
- if ( type==TYPE_UNKNOWN ) type = type_from_mods_hints( in, TYPE_FROM_ISSUANCE, issuance_matches, nissuance_matches, TYPE_UNKNOWN );
- if ( type==TYPE_UNKNOWN ) type = TYPE_GENERIC;
-
- return type;
-}
-
-static int
-append_title( fields *in, char *ttl, char *sub, char *adstag, int level, fields *out, int *status )
-{
- str fulltitle, *title, *subtitle, *vol, *iss, *sn, *en, *ar;
- int fstatus, output = 0;
-
- str_init( &fulltitle );
-
- title = fields_findv( in, level, FIELDS_STRP, ttl );
- subtitle = fields_findv( in, level, FIELDS_STRP, sub );
-
- if ( str_has_value( title ) ) {
-
- output = 1;
-
- title_combine( &fulltitle, title, subtitle );
-
- vol = fields_findv( in, LEVEL_ANY, FIELDS_STRP, "VOLUME" );
- if ( str_has_value( vol ) ) {
- str_strcatc( &fulltitle, ", vol. " );
- str_strcat( &fulltitle, vol );
- }
-
- iss = fields_findv_firstof( in, LEVEL_ANY, FIELDS_STRP, "ISSUE",
- "NUMBER", NULL );
- if ( str_has_value( iss ) ) {
- str_strcatc( &fulltitle, ", no. " );
- str_strcat( &fulltitle, iss );
- }
-
- sn = fields_findv( in, LEVEL_ANY, FIELDS_STRP, "PAGES:START" );
- en = fields_findv( in, LEVEL_ANY, FIELDS_STRP, "PAGES:STOP" );
- ar = fields_findv( in, LEVEL_ANY, FIELDS_STRP, "ARTICLENUMBER" );
-
- if ( str_has_value( sn ) ) {
- if ( str_has_value( en ) ) {
- str_strcatc( &fulltitle, ", pp. " );
- } else {
- str_strcatc( &fulltitle, ", p. " );
- }
- str_strcat( &fulltitle, sn );
- } else if ( str_has_value( ar ) ) {
- str_strcatc( &fulltitle, ", p. " );
- str_strcat( &fulltitle, ar );
- }
- if ( str_has_value( en ) ) {
- str_addchar( &fulltitle, '-' );
- str_strcat( &fulltitle, en );
- }
-
- if ( str_memerr( &fulltitle ) ) {
- *status = BIBL_ERR_MEMERR;
- goto out;
- }
-
- fstatus = fields_add( out, adstag, str_cstr( &fulltitle ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
-
- }
-
-out:
- str_free( &fulltitle );
-
- return output;
-}
-
-static void
-append_titles( fields *in, int type, fields *out, int *status )
-{
- int added;
- if ( type==TYPE_ARTICLE || type==TYPE_MAGARTICLE ) {
- added = append_title( in, "TITLE", "SUBTITLE", "%J", LEVEL_HOST, out, status );
- if ( added==0 )
- (void) append_title( in, "SHORTTITLE", "SHORTSUBTITLE", "%J", LEVEL_HOST, out, status );
- }
-}
-
-static void
-append_people( fields *in, char *tag1, char *tag2, char *tag3, char *adstag, int level, fields *out, int *status )
-{
- str oneperson, allpeople;
- vplist_index i;
- int fstatus;
- vplist a;
-
- str_init( &oneperson );
- str_init( &allpeople );
- vplist_init( &a );
-
- fields_findv_eachof( in, level, FIELDS_CHRP, &a, tag1, tag2, tag3, NULL );
- if ( a.n ) {
- for ( i=0; i<a.n; ++i ) {
- if ( i!=0 ) str_strcatc( &allpeople, "; " );
- name_build_withcomma( &oneperson, (char *) vplist_get( &a, i) );
- str_strcat( &allpeople, &oneperson );
- }
- fstatus = fields_add( out, adstag, str_cstr( &allpeople ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-
- vplist_free( &a );
- str_free( &oneperson );
- str_free( &allpeople );
-}
-
-static void
-append_pages( fields *in, fields *out, int *status )
-{
- str *sn, *en, *ar;
- int fstatus;
-
- sn = fields_findv( in, LEVEL_ANY, FIELDS_STRP, "PAGES:START" );
- en = fields_findv( in, LEVEL_ANY, FIELDS_STRP, "PAGES:STOP" );
- ar = fields_findv( in, LEVEL_ANY, FIELDS_STRP, "ARTICLENUMBER" );
-
- if ( str_has_value( sn ) ) {
- fstatus = fields_add( out, "%P", str_cstr( sn ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- *status = BIBL_ERR_MEMERR;
- return;
- }
- }
-
- else if ( str_has_value( ar ) ) {
- fstatus = fields_add( out, "%P", str_cstr( ar ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- *status = BIBL_ERR_MEMERR;
- return;
- }
- }
-
- if ( str_has_value( en ) ) {
- fstatus = fields_add( out, "%L", str_cstr( en ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- *status = BIBL_ERR_MEMERR;
- return;
- }
- }
-}
-
-static int
-mont2mont( const char *m )
-{
- static char *monNames[]= { "jan", "feb", "mar", "apr", "may",
- "jun", "jul", "aug", "sep", "oct", "nov", "dec" };
- int i;
- if ( isdigit( (unsigned char)m[0] ) ) return atoi( m );
- else {
- for ( i=0; i<12; i++ ) {
- if ( !strncasecmp( m, monNames[i], 3 ) ) return i+1;
- }
- }
- return 0;
-}
-
-static int
-get_month( fields *in, int level )
-{
- str *month;
-
- month = fields_findv_firstof( in, level, FIELDS_STRP, "DATE:MONTH", "PARTDATE:MONTH", NULL );
- if ( str_has_value( month ) ) return mont2mont( str_cstr( month ) );
- else return 0;
-}
-
-static void
-append_date( fields *in, char *adstag, int level, fields *out, int *status )
-{
- int month, fstatus;
- char outstr[1000];
- str *year;
-
- year = fields_findv_firstof( in, level, FIELDS_STRP, "DATE:YEAR", "PARTDATE:YEAR", NULL );
- if ( str_has_value( year ) ) {
- month = get_month( in, level );
- sprintf( outstr, "%02d/%s", month, str_cstr( year ) );
- fstatus = fields_add( out, adstag, outstr, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-}
-
-#include "adsout_journals.c"
-
-static void
-output_4digit_value( char *pos, long long n )
-{
- char buf[6];
- n = n % 10000; /* truncate to 0->9999, will fit in buf[6] */
-#ifdef WIN32
- sprintf( buf, "%I64d", n );
-#else
- sprintf( buf, "%lld", n );
-#endif
- if ( n < 10 ) strncpy( pos+3, buf, 1 );
- else if ( n < 100 ) strncpy( pos+2, buf, 2 );
- else if ( n < 1000 ) strncpy( pos+1, buf, 3 );
- else strncpy( pos, buf, 4 );
-}
-
-static char
-initial_ascii( const char *name )
-{
- int b1, b2;
-
- if ( isascii( name[0] ) )
- return name[0];
-
- b1 = name[0]+256;
- b2 = name[1]+256;
-
- switch( b1 ) {
-
- case 0xc3:
- if ( b2 >= 0x80 && b2 <= 0x86 ) return 'A';
- else if ( b2 == 0x87 ) return 'C';
- else if ( b2 >= 0x88 && b2 <= 0x8b ) return 'E';
- else if ( b2 >= 0x8c && b2 <= 0x8f ) return 'I';
- else if ( b2 == 0x90 ) return 'D';
- else if ( b2 == 0x91 ) return 'N';
- else if ( b2 >= 0x92 && b2 <= 0x98 ) return 'O';
- else if ( b2 >= 0x99 && b2 <= 0x9c ) return 'U';
- else if ( b2 == 0x9d ) return 'Y';
- else if ( b2 == 0x9f ) return 'S';
- else if ( b2 >= 0xa0 && b2 <= 0xa6 ) return 'A';
- else if ( b2 == 0xa7 ) return 'C';
- else if ( b2 >= 0xa8 && b2 <= 0xab ) return 'E';
- else if ( b2 >= 0xac && b2 <= 0xaf ) return 'I';
- else if ( b2 == 0xb0 ) return 'D';
- else if ( b2 == 0xb1 ) return 'N';
- else if ( b2 >= 0xb2 && b2 <= 0xb8 ) return 'O';
- else if ( b2 >= 0xb9 && b2 <= 0xbc ) return 'U';
- else if ( b2 >= 0xbd && b2 <= 0xbf ) return 'Y';
- break;
-
- case 0xc4:
- if ( b2 >= 0x80 && b2 <= 0x85 ) return 'A';
- else if ( b2 >= 0x86 && b2 <= 0x8d ) return 'C';
- else if ( b2 >= 0x8e || b2 <= 0x91 ) return 'D';
- else if ( b2 >= 0x92 && b2 <= 0x9b ) return 'E';
- else if ( b2 >= 0x9c && b2 <= 0xa3 ) return 'G';
- else if ( b2 >= 0xa4 && b2 <= 0xa7 ) return 'H';
- else if ( b2 >= 0xa8 && b2 <= 0xb3 ) return 'I';
- else if ( b2 >= 0xb4 && b2 <= 0xb5 ) return 'J';
- else if ( b2 >= 0xb6 && b2 <= 0xb8 ) return 'K';
- else if ( b2 >= 0xb9 && b2 <= 0xbf ) return 'L';
- break;
-
- case 0xc5:
- if ( b2 >= 0x80 && b2 <= 0x82 ) return 'L';
- else if ( b2 >= 0x83 && b2 <= 0x8b ) return 'N';
- else if ( b2 >= 0x8c || b2 <= 0x93 ) return 'O';
- else if ( b2 >= 0x94 && b2 <= 0x99 ) return 'R';
- else if ( b2 >= 0x9a && b2 <= 0xa1 ) return 'S';
- else if ( b2 >= 0xa2 && b2 <= 0xa7 ) return 'T';
- else if ( b2 >= 0xa8 && b2 <= 0xb3 ) return 'U';
- else if ( b2 >= 0xb4 && b2 <= 0xb5 ) return 'W';
- else if ( b2 >= 0xb6 && b2 <= 0xb8 ) return 'Y';
- else if ( b2 >= 0xb9 && b2 <= 0xbf ) return 'Z';
- break;
-
- case 0xc6:
- if ( b2 >= 0x80 && b2 <= 0x85 ) return 'B';
- else if ( b2 >= 0x86 && b2 <= 0x88 ) return 'C';
- else if ( b2 >= 0x89 || b2 <= 0x8d ) return 'D';
- else if ( b2 >= 0x8e && b2 <= 0x90 ) return 'E';
- else if ( b2 >= 0x91 && b2 <= 0x92 ) return 'F';
- else if ( b2 >= 0x93 && b2 <= 0x94 ) return 'G';
- else if ( b2 == 0x95 ) return 'H';
- else if ( b2 >= 0x96 && b2 <= 0x97 ) return 'I';
- else if ( b2 >= 0x98 && b2 <= 0x99 ) return 'K';
- else if ( b2 >= 0xba && b2 <= 0x9b ) return 'L';
- else if ( b2 == 0xbc ) return 'M';
- else if ( b2 >= 0x9d && b2 <= 0x9e ) return 'N';
- else if ( b2 >= 0x9f && b2 <= 0xa3 ) return 'O';
- else if ( b2 >= 0xa4 && b2 <= 0xa5 ) return 'P';
- else if ( b2 == 0xa6 ) return 'R';
- else if ( b2 >= 0xa7 && b2 <= 0xaa ) return 'S';
- else if ( b2 >= 0xab && b2 <= 0xae ) return 'T';
- else if ( b2 >= 0xaf && b2 <= 0xb1 ) return 'U';
- else if ( b2 == 0xb2 ) return 'V';
- else if ( b2 >= 0xb3 && b2 <= 0xb4 ) return 'Y';
- else if ( b2 >= 0xb5 && b2 <= 0xbe ) return 'Z';
- break;
-
- }
-
- return '.';
-}
-
-static char
-get_firstinitial( fields *in )
-{
- char *name;
- int n;
-
- n = fields_find( in, "AUTHOR", LEVEL_MAIN );
- if ( n==FIELDS_NOTFOUND ) n = fields_find( in, "AUTHOR", LEVEL_ANY );
-
- if ( n!=FIELDS_NOTFOUND ) {
- name = fields_value( in, n, FIELDS_CHRP );
- return initial_ascii( name );
- } else return '\0';
-}
-
-static int
-get_journalabbr( fields *in )
-{
- char *jrnl;
- int n, j;
-
- n = fields_find( in, "TITLE", LEVEL_HOST );
- if ( n!=FIELDS_NOTFOUND ) {
- jrnl = fields_value( in, n, FIELDS_CHRP );
- for ( j=0; j<njournals; j++ ) {
- if ( !strcasecmp( jrnl, journals[j]+6 ) )
- return j;
- }
- }
- return -1;
-}
-
-static void
-append_Rtag( fields *in, char *adstag, int type, fields *out, int *status )
-{
- char outstr[20], ch;
- int n, i, fstatus;
- long long page;
-
- strcpy( outstr, "..................." );
-
- /** YYYY */
- n = fields_find( in, "DATE:YEAR", LEVEL_ANY );
- if ( n==FIELDS_NOTFOUND ) n = fields_find( in, "PARTDATE:YEAR", LEVEL_ANY );
- if ( n!=FIELDS_NOTFOUND ) output_4digit_value( outstr, atoi( fields_value( in, n, FIELDS_CHRP ) ) );
-
- /** JJJJ */
- n = get_journalabbr( in );
- if ( n!=-1 ) {
- i = 0;
- while ( i<5 && journals[n][i]!=' ' && journals[n][i]!='\t' ) {
- outstr[4+i] = journals[n][i];
- i++;
- }
- }
-
- /** VVVV */
- n = fields_find( in, "VOLUME", LEVEL_ANY );
- if ( n!=FIELDS_NOTFOUND ) output_4digit_value( outstr+9, atoi( fields_value( in, n, FIELDS_CHRP ) ) );
-
- /** MPPPP */
- n = fields_find( in, "PAGES:START", LEVEL_ANY );
- if ( n==FIELDS_NOTFOUND ) n = fields_find( in, "ARTICLENUMBER", LEVEL_ANY );
- if ( n!=FIELDS_NOTFOUND ) {
- page = atoll( fields_value( in, n, FIELDS_CHRP ) );
- output_4digit_value( outstr+14, page );
- if ( page>=10000 ) {
- ch = 'a' + (page/10000);
- outstr[13] = ch;
- }
- }
-
- /** A */
- ch = toupper( (unsigned char) get_firstinitial( in ) );
- if ( ch!='\0' ) outstr[18] = ch;
-
- fstatus = fields_add( out, adstag, outstr, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
-}
-
-static void
-append_easyall( fields *in, char *tag, char *adstag, int level, fields *out, char *prefix, int *status )
-{
- vplist_index i;
- int fstatus;
- str output;
- char *val;
- vplist a;
-
- vplist_init( &a );
- if ( prefix ) str_init( &output );
-
- fields_findv_each( in, level, FIELDS_CHRP, &a, tag );
-
- for ( i=0; i<a.n; ++i ) {
- val = ( char * ) vplist_get( &a, i );
- if ( prefix ) {
- str_strcpyc( &output, prefix );
- str_strcatc( &output, val );
- val = str_cstr( &output );
- }
- fstatus = fields_add( out, adstag, val, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- *status = BIBL_ERR_MEMERR;
- goto out;
- }
- }
-out:
- if ( prefix ) str_free( &output );
- vplist_free( &a );
-}
-
-static void
-append_easy( fields *in, char *tag, char *adstag, int level, fields *out, int *status )
-{
- char *value;
- int fstatus;
-
- value = fields_findv( in, level, FIELDS_CHRP, tag );
- if ( value && value[0]!='\0' ) {
- fstatus = fields_add( out, adstag, value, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-}
-
-static void
-append_keys( fields *in, char *tag, char *adstag, int level, fields *out, int *status )
-{
- vplist_index i;
- str allkeys;
- int fstatus;
- vplist a;
-
- str_init( &allkeys );
- vplist_init( &a );
-
- fields_findv_each( in, level, FIELDS_CHRP, &a, tag );
-
- if ( a.n ) {
- for ( i=0; i<a.n; ++i ) {
- if ( i>0 ) str_strcatc( &allkeys, ", " );
- str_strcatc( &allkeys, (char *) vplist_get( &a, i ) );
- }
- fstatus = fields_add( out, adstag, str_cstr( &allkeys ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-
- str_free( &allkeys );
- vplist_free( &a );
-}
-
-static void
-append_urls( fields *in, fields *out, int *status )
-{
- int lstatus;
- slist types;
-
- /* skip DOI as we'll add that separately */
- lstatus = slist_init_valuesc( &types, "URL", "PMID", "PMC", "ARXIV", "JSTOR", "MRNUMBER", "FILEATTACH", "FIGATTACH", NULL );
- if ( lstatus!=SLIST_OK ) {
- *status = BIBL_ERR_MEMERR;
- return;
- }
-
- *status = urls_merge_and_add( in, LEVEL_ANY, out, "%U", LEVEL_MAIN, &types );
-
- slist_free( &types );
-}
-
-static void
-append_trailer( fields *out, int *status )
-{
- int fstatus;
-
- fstatus = fields_add( out, "%W", "PHY", LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- *status = BIBL_ERR_MEMERR;
- return;
- }
-
- fstatus = fields_add( out, "%G", "AUTHOR", LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- *status = BIBL_ERR_MEMERR;
- return;
- }
-}
-
-static int
-adsout_assemble( fields *in, fields *out, param *pm, unsigned long refnum )
-{
- int type, status = BIBL_OK;
-
- fields_clearused( in );
- type = get_type( in );
-
- append_Rtag ( in, "%R", type, out, &status );
- append_people ( in, "AUTHOR", "AUTHOR:ASIS", "AUTHOR:CORP", "%A", LEVEL_MAIN, out, &status );
- append_people ( in, "EDITOR", "EDITOR:ASIS", "EDITOR:CORP", "%E", LEVEL_ANY, out, &status );
- append_easy ( in, "TITLE", "%T", LEVEL_ANY, out, &status );
- append_titles ( in, type, out, &status );
- append_date ( in, "%D", LEVEL_ANY, out, &status );
- append_easy ( in, "VOLUME", "%V", LEVEL_ANY, out, &status );
- append_easy ( in, "ISSUE", "%N", LEVEL_ANY, out, &status );
- append_easy ( in, "NUMBER", "%N", LEVEL_ANY, out, &status );
- append_easy ( in, "LANGUAGE", "%M", LEVEL_ANY, out, &status );
- append_easyall( in, "NOTES", "%X", LEVEL_ANY, out, NULL, &status );
- append_easy ( in, "ABSTRACT", "%B", LEVEL_ANY, out, &status );
- append_keys ( in, "KEYWORD", "%K", LEVEL_ANY, out, &status );
- append_urls ( in, out, &status );
- append_pages ( in, out, &status );
- append_easyall( in, "DOI", "%Y", LEVEL_ANY, out, "DOI:", &status );
- append_trailer( out, &status );
-
- return status;
-}
-
-/*****************************************************
- PUBLIC: int adsout_write()
-*****************************************************/
-
-static int
-adsout_write( fields *out, FILE *fp, param *p, unsigned long refnum )
-{
- const char *tag, *value;
- int i;
-
- for ( i=0; i<out->n; ++i ) {
- tag = fields_tag( out, i, FIELDS_CHRP );
- value = fields_value( out, i, FIELDS_CHRP );
- fprintf( fp, "%s %s\n", tag, value );
- }
-
- fprintf( fp, "\n" );
- fflush( fp );
- return BIBL_OK;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/adsout_journals.c b/support/texlab/crates/bibutils_sys/src/adsout_journals.c
deleted file mode 100644
index 4d2eafb68e..0000000000
--- a/support/texlab/crates/bibutils_sys/src/adsout_journals.c
+++ /dev/null
@@ -1,4510 +0,0 @@
-/* http://adsabs.harvard.edu/abs_doc/journals1.html
- * download URL source then parse with
- * fgrep setfields journals1.html | awk -F ';' '{printf "%s\n",$2}'
- * | cut -c 7-12,24- | sed 's/"//g' | awk '{printf "\"%s\",\n",$0}'
- * | sort -k 2
- *
- */
-static const char *journals[] = {
-"TDR.. 3D Research",
-"AASHS AAS Hist. Ser.",
-"AASPB AAS Photo Bulletin",
-"AAN.. AAVSO Alert Notice",
-"AAVSC AAVSO Circular",
-"AAVSN AAVSO Newsletter",
-"AAVSB AAVSO Solar Bulletin",
-"AbaOB Abastumanskaia Astrofizicheskaia Observatoriia Byulleten",
-"AbbOO Abbadia Observatory Observations",
-"AADDR Abhandlungen Akad. Wiss. DDR",
-"AAGot Abhandlungen Akad. Wiss. Göttingen",
-"ABWG. Abh. Braunschweigische Wissenschaftliche Ges.",
-"AbhP. Abh. der Preuß. Akademie der Wissenschaften Jahrg",
-"AbhKP Abh. Konigl. Preuss. Akad. Wissenschaften Jahre 1906,92, Berlin,1907",
-"AbhBr Abh. naturwiss. Verein Bremen",
-"AbApA Abstract and Applied Analysis",
-"ASFAS Academia Scientiarum Fennica Annales Series Physica",
-"AOIJ. Academic Open Internet Journal",
-"CR2.. Academie des Sciences Comptes Rendus Serie Mecanique Physique Chimie Sciences de la Terre et de l Univers",
-"CRAS. Academie des Sciences Paris Comptes Rendus",
-"CRASB Academie des Sciences Paris Comptes Rendus Serie B Sciences Physiques",
-"CRASG Academie des Sciences Paris Comptes Rendus Serie Generale La Vie des Sciences",
-"CRASP Academie des Sciences Paris Comptes Rendus Serie Physique Astrophysique",
-"CRASM Academie des Sciences Paris Comptes Rendus Serie Sciences Mathematiques",
-"CRASA Academie des Sciences Paris Comptes Rendus Vie Academique Semester Supplement",
-"MeARB Academie Royale de Belgique Classe des Sciences Memoires",
-"ASSAB Academie Serbe des Sciences et des Arts Bulletin Classe des Sciences Techniques",
-"ASLLR Accademia di Scienze e Lettere Istituto Lombardo Rendiconti Serie della Classe di Scienze Matematiche e Naturali Sezione Scienze Matematiche Fisiche Chimiche e Geologiche",
-"ANLAM Accademia Nazionale dei Lincei Atti Rendiconti Classe di Matematica e Applicazioni",
-"ANLAF Accademia Nazionale dei Lincei Atti Rendiconti Classe di Scienze Fisiche e Naturali",
-"ANLAR Accademia Nazionale dei Lincei Atti Rendiconti Classe di Scienze Fisiche Matematiche e Naturali",
-"AcChR Accounts Chem. Res.",
-"AcBu. Acoust. Bull.",
-"AIH.. Acoustical Imaging and Holography",
-"APhy. Acoustical Physics",
-"ASAJ. Acoustical Society of America Journal",
-"AcouL Acoustics Letters",
-"AcAcu Acta Acustica",
-"AcAer Acta Aerodynamica Sinica",
-"AcAAS Acta Aeronautica et Astronautica Sinica",
-"AcAM. Acta Applicandae Mathematicae",
-"AcAri Acta Arithmetica",
-"AcArm Acta Armamentarii",
-"AcAau Acta Astronautica",
-"AcA.. Acta Astronomica",
-"AcASn Acta Astronomica Sinica",
-"AcAS. Acta Astronomica Supplementa",
-"AcApS Acta Astrophysica Sinica",
-"AcAuS Acta Automatica Sinica",
-"AcBAS Acta Biochimica and Biophysica Academiae Scientarium Hungarica",
-"AcBBH Acta Biochimica et Biophysica Hungarica",
-"AcBBS Acta Biochimica et Biophysica Sinica",
-"AcBio Acta Biotheoretica",
-"AcCS. Acta Chemica Scandinavica Series A",
-"ACIP. Acta Cienc. Indica Phys.",
-"AcC.. Acta Cosmologica",
-"AcCrA Acta Crystallographica Section A",
-"AcCrB Acta Crystallographica Section B",
-"AcCrC Acta Crystallographica Section C",
-"AcCrD Acta Crystallographica Section D",
-"AcElc Acta Electrochimica",
-"AcEle Acta Electronica",
-"AcElS Acta Electronica Sinica",
-"AcESn Acta Electron. Sinica",
-"AcFre Acta Frequenza",
-"AcGG. Acta Geod. Geophys.",
-"AcGeo Acta Geophysica",
-"AcGeP Acta Geophysica Polonica",
-"AcGSn Acta Geophys. Sinica",
-"AcHA. Acta Historica Astronomiae",
-"AcMCS Acta Materiae Compositae Sinica",
-"AcMat Acta Materialia",
-"AcMa. Acta Mathematica",
-"AcMaH Acta Mathematica Hungarica",
-"AcMaS Acta Mathematica Sinica",
-"AcMSw Acta Mathematica Sweden",
-"AcMec Acta Mechanica",
-"AcMSn Acta Mechanica Sinica",
-"AcMSS Acta Mechanica Solida Sinica",
-"AcMet Acta Metallurgica",
-"AcMMS Acta Metallurgica et Materialia Supplement",
-"AcMeS Acta Meteorologica Sinica",
-"AcNum Acta Numerica",
-"AcOSi Acta Oceanica Sinica",
-"AcOdS Acta Odontologica Scandinavica",
-"AcO.. Acta Oecologica",
-"AcOpS Acta Optica Sinica",
-"AcOrS Acta Orthopaedica Scandinavica",
-"AcPSi Acta Photonica Sinica",
-"AcPhy Acta Physica",
-"APASH Acta Physica Academiae Scientiarum Hungaricae",
-"AcPhA Acta Physica Austriaca",
-"AcPAS Acta Physica Austriaca Supplement",
-"AcPhC Acta Physica et Chemica",
-"AcPhH Acta Physica Hungarica",
-"APHHI Acta Physica Hungarica Heavy Ion Physics",
-"APHQE Acta Physica Hungarica Quantum Electronics",
-"AcPP. Acta Physica Polonica",
-"AcPPA Acta Physica Polonica A",
-"AcPPB Acta Physica Polonica B",
-"AcPSn Acta Physica Sinica",
-"AcPSl Acta Physica Slovaca",
-"AcPhS Acta Physiologica Scandinavica",
-"AcPol Acta Polytechnica",
-"AcPSc Acta Polytechnica Scandinavica Applied Physics Series",
-"AcPSP Acta Polytechnica Scandinavica Physics",
-"AcSSn Acta Seismologica Sinica",
-"ASSF. Acta Societatis Scientarum Fennicae",
-"ASSFA Acta Societatis Scientarum Fennicae Series A",
-"AcTec Acta Technica",
-"AcUni Acta Universitaria",
-"AcMPh Acta Universitatis Caroliae. Mathematica et Physica",
-"AcMPS Acta Universitatis Caroliae. Mathematica et Physica Supplement",
-"APEC. Active and Passive Electronic Components",
-"Acu.. Acustica",
-"AdBeh Adaptive Behaviour",
-"AdAs. Ad Astra",
-"ARPM. Adgeziia Rasplavov i Paika Materialov",
-"Adsor Adsorption",
-"AdCM. Advanced Ceramic Materials",
-"AdCoL Advanced Composites Letters",
-"AMP.. Advanced Materials and Processes",
-"APM.. Advanced Performance Materials",
-"ASL.. Advanced Science Letters",
-"AdSAC Advanced Series in Astrophysics and Cosmology",
-"AdSMP Advanced Series in Mathematical Physics",
-"ASDHE Advanced Series on Directions in High Energy Physics",
-"AdTPh Advanced Texts in Physics",
-"AdAeS Advances in Aeronautical Sciences",
-"AdApM Advances in Applied Mathematics",
-"AdAst Advances in Astronomy",
-"AASP. Advances in Astronomy and Space Physics",
-"AdAtS Advances in Atmospheric Sciences",
-"AdAMP Advances in Atomic and Molecular Physics",
-"AAMOP Advances in Atomic Molecular and Optical Physics",
-"AdBMP Advances in Biological and Medical Physics",
-"AdBio Advances in Biophysics",
-"AdCP. Advances in Cardiovascular Physics",
-"AdChP Advances in Chemical Physics",
-"AdCIS Advances in Colloid and Interface Science",
-"AdCoM Advances in Computational Mathematics",
-"AdCMP Advances in Condensed Matter Physics",
-"AdEPS Advances in Earth and Planetary Sciences",
-"AdEOA Advances in Earth Oriented Applications and Space Technology",
-"AEEP. Advances in Electronics and Electron Physics",
-"AEEPS Advances in Electronics and Electron Physics Supplement",
-"AdExG Advances in Exploration Geophysics",
-"AdGDP Advances in Geophysical Data Processing",
-"AdGR. Advances in Geophysical Research",
-"AdGeo Advances in Geophysics",
-"AdGeS Advances in Geophysics Supplement",
-"AdG.. Advances in Geosciences",
-"AdHEP Advances in High Energy Physics",
-"ADIEP Advances in Imaging and Electron Physics",
-"AdMRe Advances in Magnetic Resonance",
-"AdMPC Advances in Materials Physics and Chemistry",
-"AdMS. Advances in Materials Science",
-"AdMSE Advances in Materials Science and Engineering",
-"AdMaP Advances in Mathematical Physics",
-"AdMat Advances in Mathematics",
-"AdMPS Advances in Mechanics and Physics of Surfaces",
-"AdMUM Advances in Mechanics Uspekhi Mekhaniki",
-"AdMet Advances in Meteorology",
-"AdNOp Advances in Nonlinear Optics",
-"AdNuP Advances in Nuclear Physics",
-"AdPhG Advances in Physical Geochemistry",
-"AdPhy Advances in Physics",
-"AdPlP Advances in Plasma Physics",
-"AdPPR Advances in Plasma Physics Research",
-"AdPoS Advances in Polymer Science",
-"AdQC. Advances in Quantum Chemistry",
-"AdRS. Advances in Radio Science",
-"AdSR. Advances in Science and Research",
-"AdSSP Advances in Solid State Physics",
-"AdSpR Advances in Space Research",
-"AdAnS Advances in the Astronautical Sciences",
-"AdTAM Advances in Theoretical and Applied Mechanics",
-"AdTMP Advances in Theoretical and Mathematical Physics",
-"AdThP Advances in Theoretical Physics",
-"AdWR. Advances in Water Resources",
-"AAMS. Adv. Appl. Mech. Suppl.",
-"ATTM. AEG Telefunken Technische Mitteilungen",
-"AeoRe Aeolian Research",
-"Aekv. Aerodinamika kanalov i ventiliatorov",
-"AeRaG Aerodinamika Razrezhennykh Gazov",
-"AerTe Aerojet Technology",
-"AeIBu Aerokosmicheski Izsledvaniia B lgariia",
-"AeJ.. Aeronautical Journal",
-"AeQ.. Aeronautical Quarterly",
-"AeSIJ Aeronautical Society India Journal",
-"AerST Aerosol Science Technology",
-"AeAm. Aerospace America",
-"AeCh. Aerospace China",
-"AeCM. Aerospace Composites and Materials",
-"AeDy. Aerospace Dynamics",
-"AeEn. Aerospace Engineering",
-"AeMat Aerospace Materials",
-"AeMed Aerospace Medicine",
-"ARBl. Aerospace Research in Bulgaria",
-"AeTJa Aerospace Technology Japan",
-"Aero. Aerospace UK",
-"AFGL. AFGL-TR-0208 Environemental Research papers",
-"AfrSk African Skies",
-"AGUFM AGU Fall Meeting Abstracts",
-"AGUSM AGU Spring Meeting Abstracts",
-"AIAAJ AIAA Journal",
-"AIASJ AIAA Student Journal",
-"AIChE AIChE Journal",
-"EDAM. AI EDAM",
-"AIHAJ AIHA Journal",
-"AIPA. AIP Advances",
-"AirSp Air and Space",
-"AirE. Aircraft Engineering",
-"AirCo Air et Cosmos",
-"AFMa. Air Force Magazine",
-"AiInt Air International",
-"APCAJ Air Pollution Control Association Journal",
-"AkAtP Akademia Athenon Praktika",
-"DoArm Akademiia Nauk Armianskoi SSR Doklady",
-"DoAze Akademiia Nauk Azerbaidzhanskoi SSR Doklady",
-"IzAze Akademiia Nauk Azerbaidzhanskoi SSR Izvestiia Seriia Fiziko Tekhnicheskikh i Matematicheskikh Nauk",
-"IFBel Akademiia Nauk Belorusskoi SSR Institut Fiziki Nauchnaia Sessiia Minsk Belorussian SSR Zhurnal Prikladnoi Spektroskopii",
-"DoBel Akademiia Nauk BSSR Doklady",
-"SoGru Akademiia Nauk Gruzii Soobshcheniia",
-"VeKaz Akademiia Nauk Kazakhskoi SSR Vestnik",
-"IzLat Akademiia Nauk Latviiskoi SSR Izvestiia Seriia Fizicheskikh i Tekhnicheskikh Nauk",
-"IzMol Akademiia Nauk Moldavskoi SSR Izvestiia Seriia Fiziko Tekhnicheskikh i Matematicheskikh Nauk",
-"DoSSR Akademiia Nauk SSSR Doklady",
-"FizAO Akademiia Nauk SSSR Fizika Atmosfery i Okeana",
-"InSSR Akademiia Nauk SSSR Investiia Mekhanika Zhidkosti i Gaza",
-"IzFZ. Akademiia Nauk SSSR, Izvestiia, Fizika Zemli",
-"IzSSR Akademiia Nauk SSSR Izvestiia Seriia Fizicheskaia",
-"MeSSR Akademiia Nauk SSSR Mekhanika Zhidkosti i Gaza",
-"FiMos Akademiia Nauk SSSR Otdelenie Obshchei Fiziki i Astronomii Nauchnaia Sessiia Moscow USSR Uspekhi Fizicheskikh Nauk",
-"IzSib Akademiia Nauk SSSR Sibirskoe Otdelenie Izvestiia",
-"SiSSR Akademiia Nauk SSSR Sibirskoe Otdelenie Izvestiia Seriia Tekhnicheskie Nauki",
-"KzSib Akademiia Nauk SSSR Sibirskoi Otdelenie Izvestiia Seriia Tekhnicheskikh Nauk",
-"VeSSR Akademiia Nauk SSSR Vestnik",
-"DoTad Akademiia Nauk Tadzhikskoi SSR Doklady",
-"FiSSR Akademiia Nauk Tadzhikskoi SSR Fiziko Tekhnicheskii Institut Dyushambe Tadzhik SSR Akademiia Nauk Tadzhikskoi SSR Doklady",
-"ABTad Akademiia Nauk Tadzhikskoi SSR Institut Astrofiziki Biulleten",
-"IzTur Akademiia Nauk Turkmenskoi SSR Izvestiia Seriia Fiziko Tekhnicheskikh Khimicheskikh i Geologicheskikh Nauk",
-"IzUkr Akademiia Nauk Ukrainian SSSR Izvestiia Seriia Fizicheskaia",
-"PrUkr Akademiia Nauk Ukrains koi RSR Dopovidi Matematika Prirodoznavstvo Tekhnichni Nauki",
-"FiUkr Akademiia Nauk Ukrain skoi RSR Dopovidi Seriia Fiziko Matematichni ta Tekhnichni Nauki",
-"DoUkr Akademiia Nauk Ukrains koi RSR Dopovidi Seriia Fiziko Matematichni ta Tekhnichni Nauki",
-"ViUkr Akademiia Nauk Ukrains koi RSR Visnik",
-"MGUkr Akademiia Nauk Ukrainskoi SSR Morskie Gidrofizicheskie Issledovaniia",
-"DoUzb Akademiia Nauk Uzbekskoi SSR Doklady",
-"IzUzb Akademiia Nauk Uzbekskoi SSR Izvestiia Seriia Fiziko Matematicheskikh Nauk",
-"VeNav Akademiia Navuk BSSR Vestsi Seryia Fizika Tekhnichnykh Navuk",
-"AkZh. Akusticheskii Zhurnal",
-"AkTek Akustika i Ul trazvukovaia Tekhnika",
-"AAIzN Alma Ata Izdatel Nauka",
-"ALMAN ALMA Newsletter",
-"AlFr. Alta Frequenza",
-"AFRE. Alta Frequenza Rivista di Elettronica",
-"Ambio Ambio",
-"AVSOA American Association of Variable Stars Observers Abstracts",
-"AVSOM American Association of Variable Stars Observers Monographs",
-"AVSOQ American Association of Variable Stars Observers Quarterly Reports",
-"AVSOR American Association of Variable Stars Observers Reports",
-"ACSB. American Ceramic Society Bulletin",
-"ACSC. American Ceramic Society Communications",
-"ACSJ. American Ceramic Society Journal",
-"AHSJ. American Helicopter Society Journal",
-"AmJC. American Journal of Cardiology",
-"AmJM. American Journal of Mathematics",
-"AmJPh American Journal of Physics",
-"AmJS. American Journal of Science",
-"AmJSA American Journal of Science and Arts",
-"AMSBu American Meteorological Society Bulletin",
-"AmMin American Mineralogist",
-"AmSci American Scientist",
-"ASME. American Society of Mechanical Engineers",
-"AnCoi Anais do Observatorio Astronomico da Universidade de Coimbra",
-"AnFis Anales de Fisica",
-"AICSP Analog Integrated Circuits and Signal Processing",
-"AnMP. Analysis and Mathematical Physics",
-"AnBio Analytical Biochemistry",
-"AnaCh Analytical Chemistry",
-"AnaIn Analytical Instrumentation",
-"BSSR. AN BSSR Institut Teplo i Massoobmena Vsesoiuznaia Konferentsiia Teplomassoobmenu Minsk Belorussian SSR Preprint",
-"AAONw Anglo-Australian Observatory Epping Newsletter",
-"AAOPr Anglo-Australian Observatory Epping Preprint",
-"ARIJ. An Interdisciplinary Journal of Physical and Engineering Sciences",
-"CSMPA Ankara Universite Faculte des Sciences Communications Serie Mathematiques Physique et Astronomie",
-"AASF. Ann. Acad. Sci. Fennicae",
-"AnStr Annalen der Kaiserlichen Universitats-Sternwarte in Strassburg",
-"AnWie Annalen der K.K. Sternwarte Wien",
-"AnSWi Annalen der K.K. Universitaets-Sternwarte in Wien (Waehring)",
-"AnMun Annalen der Koeniglichen Sternwarte bei Muenchen",
-"AnP.. Annalen der Physik",
-"AnWiD Annalen der Universitaets-Sternwarte Wien, Dritter Folge",
-"AnMet Annalen Meteorologie",
-"AnLei Annalen van de Sterrewacht te Leiden",
-"AnAp. Annales d'Astrophysique",
-"AnCPh Annales de Chimie et de Physique",
-"AnG.. Annales de Geophysique",
-"AFLB. Annales de la Fondation Louis de Broglie",
-"ASSB. Annales de la Societe Scietifique de Bruxelles",
-"AnIHP Annales de L'Institut Henri Poincare Section Physique Theorique",
-"AnTou Annales de l'Observatoire Astron. et Meteo. de Toulouse",
-"AnAIK Annales de l'Observatoire astronomique de l'Université imériale de Kharkow",
-"AOTok Annales de l'Observatoire astronomique de Tokyo",
-"AnZoC Annales de l'Observatoire astronomique de Zô-sè (Chine)",
-"AnAPM Annales de l'Observatoire d'astronomie physique de Paris, Section d'astrophysique, à Meudon",
-"AnBes Annales de l'Observatoire de Besancon",
-"AnBor Annales de l'Observatoire de Bordeaux",
-"AnNic Annales de l'Observatoire de Nice",
-"AnPar Annales de l'Observatoire de Paris",
-"AnPOb Annales de l'Observatoire de Paris. Observations",
-"AnOSt Annales de l'Observatoire de Strasbourg",
-"AnRio Annales de l'Observatoire Imperial de Rio de Janeiro",
-"AnAth Annales de l'Observatoire national d'Athènes",
-"AnOB. Annales de l'Observatoire Royal de Belgique",
-"AnOBN Annales de l'Observatoire Royal de Belgique Nouvelle serie",
-"AnBru Annales de l'Observatoire Royal de Bruxelles",
-"AnPh. Annales de Physique",
-"AnPBM Annales de Physique Biologique et Medicale",
-"AnPCS Annales de Physique Colloque Supplement",
-"AnTel Annales des Telecommunications",
-"AnGVP Annales du Bureau des Longitudes, Gauthier-Villars, Paris",
-"AFChr Annales Francaises de Chronometrie",
-"AnGeo Annales Geophysicae",
-"AnGeA Annales Geophysicae Series A Upper Atmosphere and Space Sciences",
-"AnGeB Annales Geophysicae Series B Terrestrial and Planetary Physics",
-"AnHP. Annales Henri Poincaré",
-"AnTec Annales Tectonicae",
-"AUGGM Annales UMCS, Geographia, Geologia, Mineralogia et Petrographia",
-"AUSPh Annales UMCS, Sectio AAA: PHYSICA",
-"AnApS Annals of Applied Statistics",
-"AGp.. Annals of Geophysics",
-"AnGla Annals of Glaciology",
-"AnGAG Annals of Global Analysis Geometry",
-"AnHar Annals of Harvard College Observatory",
-"AnMat Annals of Mathematics",
-"AnMAI Annals of Mathematics and Artificial Intelligence",
-"AnOR. Annals of Operations Research",
-"AnPhy Annals of Physics",
-"AnREE Annals of Research on Engineering Education",
-"AnCGH Annals of Royal Observatory, Cape of Good Hope",
-"AnSci Annals of Science",
-"AnSta Annals of Statistics",
-"AnSAO Annals of the Astrophysical Observatory of the Smithsonian Institution",
-"AnBos Annals of the Bosscha Observatory Lembang (Java) Indonesia",
-"AnCap Annals of the Cape Observatory",
-"AnDea Annals of the Dearborn Observatory",
-"AnDud Annals of the Dudley Observatory",
-"AnISM Annals of the Institute of Statistical Mathematics",
-"AIQSY Annals of the IQSY",
-"AnIPS Annals of the Israel Physical Society",
-"AnLow Annals of the Lowell Observatory",
-"NYASA Annals of the New York Academy of Sciences",
-"AnLL. Annals of the Observatory of Lucien Libert",
-"AnLun Annals of the Observatory of Lund",
-"AnLuS Annals of the Observatory of Lund Supplement",
-"AnOLL Annals of the Private Observatory of Lucien Libert",
-"AnEdi Annals of the Royal Observatory, Edinburgh",
-"AnSPC Annals of the Solar Physics Observatory Cambridge England",
-"AnTok Annals of the Tokyo Astronomical Observatory",
-"AnUCP Annals of the University of Craiova Physics AUC",
-"AnRev Ann Rev",
-"AnBSJ Annual Bulletin of the Societe Jersiaise",
-"YalAR Annual Report of the Astronomer of the Winchester Observatory of Yale College",
-"ARKod Annual Report of the Kodaikanal Observatory",
-"MMAAR Annual Report of the Maria Mitchell Association",
-"ARAOJ Annual Report of the National Astronomical Observatory of Japan",
-"AnRSI Annual Report of the Smithsonian Institution",
-"WinAR Annual Report of the Windsor Observatory, New South Wales",
-"ARAC. Annual Review of Analytical Chemistry",
-"ARCMP Annual Review of Condensed Matter Physics",
-"AREPS Annual Review of Earth and Planetary Sciences",
-"AnRE. Annual Review of Energy",
-"AnRFM Annual Review of Fluid Mechanics",
-"ARIST Annual Review of Information Science and Technology",
-"ARMS. Annual Review of Marine Science",
-"AnRMS Annual Review of Materials Science",
-"ARNPS Annual Review of Nuclear and Particle Science",
-"ARPC. Annual Review of Physical Chemistry",
-"ARCP. Annual Reviews of Computational Physics",
-"AnMN. Antarctic Meteorite Newsletter",
-"AMR.. Antarctic Meteorite Research",
-"Antk. Antarktika",
-"Anten Antenny",
-"AnCan Anticancer Research",
-"IORA. Anuario publicado pelo Imperial Observatorio do Rio de Janeiro",
-"IORAS Anuario publicado pelo Imperial Observatorio do Rio de Janeiro Suplemento",
-"ApAN. Apatity Akademiia Nauk SSSR",
-"ApKF. Apatity Kol skii Filial AN SSSR",
-"Apei. Apeiron",
-"ApMat Aplikace Matematiky, Applied Mathematics",
-"AppAn Applicable Analysis",
-"ApMa. Applications of Mathematics",
-"ApAc. Applied Acoustics",
-"ApAI. Applied Artificial Intelligence",
-"ApCM. Applied Composite Materials",
-"ACESJ Applied Computational Electromagnetics Society Journal",
-"ApEn. Applied Energy",
-"ApEnM Applied Environmental Microbiology",
-"ApGeo Applied Geophysics",
-"ApMF. Applied Mathematical Finance",
-"AMat. Applied Mathematics",
-"ApMM. Applied Mathematics and Mechanics",
-"ApMaC Applied Mathematics Computation",
-"ApMaL Applied Mathematics Letters",
-"ApMaM Applied Mathematics Mechanics English Edition",
-"ApMaO Applied Mathematics Optimization",
-"AMM.. Applied Mechanics and Materials",
-"ApMRv Applied Mechanics Reviews",
-"ApMic Applied Microbiology",
-"ApMT. Applied Microgravity Technology",
-"ApNan Applied Nanoscience",
-"ApNM. Applied Numerical Mathematics",
-"ApOpt Applied Optics",
-"ApPhy Applied Physics",
-"ApPhA Applied Physics A: Materials Science &amp",
-"ApPhB Applied Physics B: Lasers and Optics",
-"ApPPL Applied Physics B Photophysics Laser Chemistry",
-"ApPhC Applied Physics Communications",
-"APExp Applied Physics Express",
-"ApPhL Applied Physics Letters",
-"ApPhR Applied Physics Research",
-"ApScR Applied Scientific Research",
-"ApSRA Applied Scientific Research Section A",
-"ApSRB Applied Scientific Research Section B",
-"ApSpe Applied Spectroscopy",
-"ApSRv Applied Spectroscopy Reviews",
-"ApSup Applied Superconductivity",
-"ApSS. Applied Surface Science",
-"ApWS. Applied Water Science",
-"APS.. APS Meeting Abstracts",
-"ACMFE Aquatic Conservation: Marine and Freshwater Ecosystems",
-"AJSE. Arabian Journal of Science Engineering",
-"Arch. Archaeoastronomy",
-"ArchS Archaeoastronomy Supplement",
-"Archa Archaeometry",
-"ASBTV Archenhold-Sternwarte Berlin-Treptow, Vortrage Schr.",
-"ArApM Archive Applied Mechanics",
-"AHES. Archive for History of Exact Sciences",
-"ArRMA Archive for Rational Mechanics and Analysis",
-"ArElU Archiv Elektronik und Uebertragungstechnik",
-"AAM.. Archive of Applied Mechanics",
-"ArApM Archive of Applied Mechanics",
-"ArBB. Archive of Biochemistry and Biophysics",
-"ArAco Archives Acoustics",
-"ArS.. Archives des Sciences",
-"ArSPN Archives des Sciences Physiques et Naturelles",
-"AMGBA Archives for Meteorology Geophysics and Bioclimatology Series A Meteorology and Atmopsheric Physics",
-"AMGBB Archives for Meteorology Geophysics and Bioclimatology Series B Theoretical and Applied Climatology",
-"AIPBB Archives Internationales de Physiologie de Biochimie et de Biophysique",
-"ArNSc Archives Neerlandaises des Sciences Exactes et Naturelles",
-"ArMaN Archiv for Mathematik og Naturvidenskab",
-"AMGBK Archiv Meteorologie Geophysik und Bioklimatologie Serie B Klimatologie und Umweltmeteorologie Strahlungsforschung",
-"AMGBS Archiv Meteorologie Geophysik und Bioklimatologie Serie Meteorologie und Geophysik",
-"ArMeS Archiv of Mechanics, Archiwum Mechaniki Stosowanej",
-"ArCom Archivum Combustionis",
-"ArAku Archiwum Akustyki",
-"ArAuT Archiwum Automatyki i Telemechaniki",
-"ArBuM Archiwum Budowy Maszyn",
-"ArEle Archiwum Elektrotechniki",
-"ArMeS Archiwum Mechaniki Stosowanej",
-"ArPSp Archiwum Procesow Spalania",
-"ArTSp Archiwum Termodynamiki i Spalania",
-"AAAR. Arctic, Antarctic and Alpine Research",
-"ArA.. Arkiv for Astronomi",
-"ArM.. Arkiv for Matematik",
-"ArMAF Arkiv for Matematik, Astronomi och Fysik",
-"ArmOL Armagh Observatory Leaflet",
-"ArJPh Armenian Journal of Physics",
-"ArtSa Artificial Satellites",
-"astro ArXiv Astrophysics e-prints",
-"cs... ArXiv Computer Science e-prints",
-"arXiv ArXiv e-prints",
-"gr.qc ArXiv General Relativity and Quantum Cosmology eprints",
-"hepex ArXiv High Energy Physics - Experiment e-prints",
-"hepla ArXiv High Energy Physics - Lattice e-prints",
-"hepph ArXiv High Energy Physics - Phenomenology e-prints",
-"hepth ArXiv High Energy Physics - Theory e-prints",
-"mathp ArXiv Mathematical Physics e-prints",
-"math. ArXiv Mathematics e-prints",
-"nlin. ArXiv Nonlinear Sciences e-prints",
-"nucle ArXiv Nuclear Experiment e-prints",
-"nuclt ArXiv Nuclear Theory e-prints",
-"physicArXiv Physics e-prints",
-"ASHRA ASHRAE Journal",
-"AsJPh Asian Journal of Physics",
-"Aslib Aslib Proceedings: new information perspectives",
-"ATJEM ASME Transactions Journal Engineering Materials and Technology",
-"ATJDS ASME Transactions Journal of Dynamic Systems and Measurement Control B",
-"ATJEl ASME Transactions Journal of Electronic Packaging",
-"ATJEG ASME Transactions Journal of Engineering Gas Turbines and Power",
-"ATJEP ASME Transactions Journal of Engineering Power",
-"ATJFE ASME Transactions Journal of Fluids Engineering",
-"ATJHT ASME Transactions Journal of Heat Transfer",
-"ATJLT ASME Transactions Journal of Lubrication Technology",
-"ATJSE ASME Transactions Journal of Solar Energy and Engineering",
-"ATJTr ASME Transactions Journal of Tribology",
-"ATJTu ASME Transactions Journal of Turbomachinery",
-"ATJVA ASME Transactions Journal of Vibration Acoustics",
-"ATJAM ASME Transactions Series E Journal of Applied Mechanics",
-"ATJEP ASME Transactions Series Journal of Engineering Power",
-"AsAut Assembly Automation",
-"ATMAB Association Technique Maritime et Aeronautique Bulletin",
-"ATMAS Association Technique Maritime et Aeronautique Session Paris France ONERA TP",
-"AVSVB Associazione Veneta Osservatori di Stelle Variabili Bulletin",
-"Aster Aster",
-"StNws ASTM Standardization News",
-"AsBio Astrobiology",
-"AISAO Astrofizicheskie Issledovaniia Izvestiya Spetsial'noj Astrofizicheskoj Observatorii",
-"AISof Astrofizicheskie Issledovaniya Sofia",
-"Afz.. Astrofizika",
-"AAfz. Astrometriia i Astrofizika",
-"AsAc. Astronautica Acta",
-"AsAcS Astronautica Acta Supplement",
-"AsAer Astronautics Aeronautics",
-"Asnau Astronautik",
-"AUBas Astron. Inst. Univ. Basel",
-"Anews ASTRON Newsletter",
-"AsUAI Astronomia. La rivista dell' Unione Astrofili Italiani",
-"Astnm Astronomia UAI",
-"USNOM Astronomical and Meteorological Observations made at the U.S. Naval Observatory",
-"ACiCh Astronomical Circular",
-"ACMan Astronomical Contributions from the University of Manchester",
-"TamCo Astronomical Contributions from the University of South Florida Tampa",
-"adass Astronomical Data Analysis Software and Systems",
-"ADCBu Astronomical Data Center Bulletin",
-"AstHe Astronomical Herald",
-"AstLt Astronomical Letters",
-"ANote Astronomical Notes University of Gothenburg Sweden Section of Astronomy",
-"USNOA Astronomical Observations made at the U.S. Naval Observatory",
-"UCLAP Astronomical Papers University of California Los Angeles",
-"AReg. Astronomical Register",
-"ASSA. Astronomical Society of South Africa, Cape Centre",
-"AVest Astronomicheskii Vestnik",
-"AVISS Astronomicheskii Vestnik Issledovaniia Solnechnoi Sistemy",
-"AZh.. Astronomicheskii Zhurnal",
-"ATsir Astronomicheskij Tsirkulyar",
-"KazOB Astronomicheskoj Observatorii Kazan Byulleten",
-"AsSch Astronomie in der Schule",
-"AAAN. Astronomische Abhandlungen als Erganzungshefte zu den Astronomische Nachrichten",
-"AAHam Astronomische Abhandlungen der Hamburger Sternwarte",
-"ABMun Astronomische Beobachtungen angestellt auf der K. Sternwarte zu Bogenhausen bei Muenchen",
-"ABSBe Astronomische Beobachtungen auf der Koniglichen Sternwarte zu Berlin",
-"ABKie Astronomische Beobachtungen auf der Sternwarte der Koeniglichen Christian-Albrechts-Universitaet zu Kiel",
-"MiZur Astronomische Mitteilungen der Eidgenössischen Sternwarte Zurich",
-"MiBre Astronomische Mitteilungen der Koeniglichen Universitaets-Sternwarte zu Breslau",
-"MiGoe Astronomische Mitteilungen der Universitaets-Sternwarte zu Goettingen",
-"AN... Astronomische Nachrichten",
-"ANS.. Astronomische Nachrichten Supplement",
-"MitSZ Astronomischen Mitteilungen Eidgen. Sternwarte Zurich",
-"AJB.. Astronomischer Jahresbericht",
-"MiARI Astronomisches Rechen-Institut Heidelberg Mitteilungen Serie A",
-"MiARB Astronomisches Rechen-Institut Heidelberg Mitteilungen Serie B",
-"ATi.. Astronomisk Tidsskrift",
-"Ast.. Astronomy",
-"Astro Astronomy",
-"AstAp Astronomy and Astro-Physics (formerly The Sidereal Messenger)",
-"ADIL. Astronomy Data Image Library",
-"AEdRv Astronomy Education Review",
-"AExpr Astronomy Express",
-"AstL. Astronomy Letters",
-"AsNow Astronomy Now",
-"AstQ. Astronomy Quarterly",
-"ARep. Astronomy Reports",
-"AASPP Astrononomy and Astrophysics Series",
-"APh.. Astroparticle Physics",
-"AstBu Astrophysical Bulletin",
-"ApInv Astrophysical Investigations",
-"ApL.. Astrophysical Letters",
-"ApNr. Astrophysica Norvegica",
-"Ap... Astrophysics",
-"ASPRv Astrophysics and Space Physics Reviews",
-"ApSSP Astrophysics and Space Science Proceedings",
-"ASTRA Astrophysics and Space Sciences Transactions",
-"ApSSS Astrophysics and Space Science Supplement",
-"MKAtl Astrophysics monographs University of Chicago Press",
-"ArBei Astrophysics Reports Publications of the Beijing Astronomical Observatory",
-"ApT.. Astrophysics Today",
-"AstPo Astropolitics",
-"AsAna Asymptotic Analysis",
-"BLabR AT&amp",
-"AJSEd Atlas Journal of Science Education",
-"AtlVS Atlas Poiskovykh Kart Peremennykh Zvezd",
-"Atmos Atmosphere",
-"AtO.. Atmosphere Ocean",
-"AtOpt Atmosphere Optics",
-"ACP.. Atmospheric Chemistry &amp",
-"ACPD. Atmospheric Chemistry &amp",
-"AtmEn Atmospheric Environment",
-"AMT.. Atmospheric Measurement Techniques",
-"AMTD. Atmospheric Measurement Techniques Discussions",
-"AtmRe Atmospheric Research",
-"AtSc. Atmospheric Science",
-"AtScL Atmospheric Science Letters",
-"AtmTe Atmospheric Technology",
-"atnfp ATNF Proposal",
-"Atom. Atom",
-"AD... Atomic Data",
-"ADNDT Atomic Data and Nuclear Data Tables",
-"AtERv Atomic Energy Review",
-"AMOP. Atomic Molecular and Optical Physics",
-"AtPhy Atomic Physics",
-"AtST. Atomisation Spray Technology",
-"AtKe. Atomkernenergie",
-"AtEn. Atomnaia Energiia",
-"AVET. Atomno Vodorodnaia Energetika i Tekhnologiia",
-"ATR.. ATR Australian Telecommunication Research",
-"AALST Atti Accad. Ligure Sci. Lett.",
-"AAPon Atti Accad. Pontaniana",
-"AAST. Atti Accad. Sco. Torino I",
-"ATTTJ AT T Technical Journal",
-"AurPh Auroral physics",
-"AuJAR Australian Journal of Agricultural Research",
-"AuJA. Australian Journal of Astronomy",
-"AuJCE Australian Journal of Chemical Education",
-"AJCh. Australian Journal of Chemistry",
-"AuJES Australian Journal of Earth Sciences",
-"AuJPh Australian Journal of Physics",
-"AuJPA Australian Journal of Physics Astrophysical Supplement",
-"AuSRA Australian Journal of Scientific Research A Physical Sciences",
-"AJSR. Australian Journal of Soil Research",
-"AuMSJ Australian Mathematical Society Journal Series B -- Applied Mathematics",
-"AuMM. Australian Meteorological Magazine",
-"Autom Automatica",
-"ACTAp Automatic Control Theory Applications",
-"AuRob Autonomous Robots",
-"AvSeM Aviation Space and Environmental Medicine",
-"AvWST Aviation Week Space Technology",
-"AvKos Aviatsiia i Kosmonavtika",
-"AvTek Aviatsionnaia Tekhnika",
-"AvTel Avtomatika i Telemekhanika",
-"AvPE. Avtomatizatsiia Proektirovaniia Elektronike",
-"Avtme Avtometriia",
-"BBUSS Babes Bolyai Universitas Studia Series Mathematica",
-"BBUSM Babes Bolyai Universitas Studia Series Physica",
-"BaPhL Balkan Physics Letters",
-"BaltA Baltic Astronomy",
-"BamKV Bamberg Kleine Veroeffentlichungen der Remeis-Sternwarte",
-"BAVRu BAV Rundbrief",
-"BAVSR BAV Rundbrief - Mitteilungsblatt der Berliner Arbeits-gemeinschaft fuer Veraenderliche Sterne",
-"BAWMN Bayerische Akademie Wissenschaften mathematisch naturwissenschaftliche Klasse Sitzungsberichte",
-"BayAn Bayesian Analysis",
-"BBCEn BBC Engineering",
-"BRMIC Behavior Research Methods Instruments and Computers",
-"BIT.. Behaviour &amp",
-"BUAAJ Beijing University Aeronautics and Astronautics Journal",
-"BePl. Beitraege Plasmaphysik",
-"BeiGe Beitraege zur Geophysik",
-"BeiMP Beitraege zur Mineralogie und Petrographie",
-"BROGS Belgian Royal Observatory Communications Series Geophysics Series",
-"BKAD. Beobachtungen der Kaiserlichen Universitaets-Sternwarte Dorpat",
-"BKUJ. Beobachtungen der Kaiserlichen Universitaets-Sternwarte Jurjew",
-"BESBe Beobachtungs-Ergebnisse der Koniglichen Sternwarte zu Berlin",
-"ANZi. Beobachtungs-Zirkular der Astronomischen Nachrichten",
-"BBGPC Berichte der Bunsen-Gesellschaft Physical Chemistry Chemical Physics Berichte",
-"BADPG Berlin East Germany Akademie Verlag GmbH Ergebnisse Plasmaphysik und Gaselektronik",
-"BAVMM Berlin East Germany Akademie Verlag GmbH Shriftenreihe des Zentralinstituts Mathematik und Mechanik",
-"BAVSM Berliner Arbeitsgemeinschaft fuer Veraenderliche Sterne - Mitteilungen",
-"BGBGM Berlin Gebrueder Borntraeger Geoexploration Monographs Series",
-"Bern. Bernoulli",
-"BeElM Beskontaktnye Elektricheskie Mashiny",
-"BeSN. Be Star Newsletter",
-"BGIBI BGI Bulletin d'Information",
-"AstBa Biblioteca Astrei Basarabene",
-"BEPM. Bielefeld Encounters in Physics and Mathematics",
-"BiLuf Bildmessung und Luftbildwessen",
-"BBRC. Biochemical and Biophysical Research Communications",
-"BioJ. Biochemical Journal",
-"BCB.. Biochemistry and Cell Biology",
-"AcBB. Biochimica et Biophysica Acta",
-"BioFa Biofabrication",
-"BGeo. Biogeosciences",
-"BGD.. Biogeosciences Discussions",
-"BMNAS Biographical Memoirs National Academy of Sciences",
-"BMFRS Biographical Memoirs of Fellows of the Royal Society",
-"BiBi. Bioinspiration and Biomimetics",
-"BMP.. Biological and Medical Physics",
-"BPS.. Biological Physics Series",
-"BRCPS Biological Reviews of the Cambridge Philosophical Society",
-"BioMa Biomedical Materials",
-"BioMi Biomedical Microdevices",
-"Biome Biometrika",
-"Bion. Bionika",
-"BioCh Biophysical Chemistry",
-"BpJ.. Biophysical Journal",
-"BpBeS Biophysics and Bioengineering Series",
-"BioSM Biophysics of Structure and Mechanism",
-"Bioph Biophysics USSR",
-"Biopk Biophysik",
-"Biorh Biorheology",
-"BioSc BioScience",
-"BiotL Biotechnology Letters",
-"BOTor Biuletyn Obserwatoium Astronomicznego Uniwersytetu M. Kopernika w Toruniu",
-"BITad Biulletini of the Astronomical Institute Akademiia Nauk Tadzhikskoi",
-"BIAst Bjull. Inst. Astrofizikii",
-"BlazD BLAZAR Data",
-"BAAA. Boletin de la Asociacion Argentina de Astronomia La Plata Argentina",
-"BAOM. Boletin de la Astronomico Observatorio de Madrid",
-"BIMAF Boletin del Instituto de Matematica Astronomica y Fisica Universidad Nacional de Cordoba Argentina",
-"BITon Boletin del Instituto de Tonantzintla",
-"BOTT. Boletin de los Observatorios Tonantzintla y Tacubaya",
-"BMOE. Boletin mensual del Observatorio del Ebro",
-"BlDok Bolgarska Akademiia Nauk Doklady",
-"BSVit Bolletino della Societa dei Variabilisti Italiani",
-"BoSAI Bollettino della Societa Astronomica Italiana",
-"BGSA. Bollettino Geod. Scienzi Affini",
-"BonD. Bonner Durchmusterung",
-"BoLMe Boundary-Layer Meteorology",
-"Brain Brain",
-"BVVSA Bratislava Veda Vydavatelstvo Slovenskej Akademie Vied",
-"BFWSG Braunschweig Friedr Vieweg und Sohn GmbH",
-"BTUM. Braunschweig Technische Universitaet Mitteilungen",
-"BrJPh Brazilian Journal of Physics",
-"BrWK. Brennstoff Waerme Kraft",
-"BJAP. British Journal of Applied Physics",
-"BJET. British Journal of Educational Technology",
-"BJMSP British Journal of Mathematical and Statistical Psychology",
-"BJP.. British Journal of Psychology",
-"BTE.. British Telecommunications Engineering",
-"BIRM. Brussels Institute Royal Meteorologique de Belgique",
-"BuAkK Budapest Akademiai Kiado",
-"BlgAJ Bulgarian Astronomical Journal",
-"BlGJ. Bulgarian Geophysical Journal",
-"BlJMH Bulgarian Journal of Meteorology and Hydrology",
-"BlJPh Bulgarian Journal of Physics",
-"BlJPS Bulgarian Journal of Physics Supplement",
-"BlGeo Bulgarska Akademiia Naukite Geofizichni Institut Izvestiia",
-"BlTek Bulgarska Akademiia Naukite Institut Tekhnicheska Kibernetika Izvestiia",
-"BlMat Bulgarska Akademiia Naukite Matematicheski Institut Izvestiia",
-"BlSpi Bulgarska Akademiia Naukite Spisanie",
-"BlTse Bulgarska Akademiia Naukite Tsentralna Laboratoriia Geodeziia Izvestiia",
-"BlGSp Bulgarsko Geofizichno Spisanie",
-"BAFOE Bulletin Association Fran. Obs. Etoiles Variables",
-"BuAst Bulletin Astronomique",
-"BABel Bulletin Astronomique de Belgrade",
-"BuAsR Bulletin Astronomique, Revue Generale des Travaux Astronomiques",
-"BuAsI Bulletin Astronomique, Serie I",
-"BuChr Bulletin Chronometrique (Besancon)",
-"BCSAB Bulletin Cl. Science Academy Royal de Belgique",
-"BCrAO Bulletin Crimean Astrophysical Observatory",
-"BAPSS Bulletin de l'Academie Polonaise des Sciences Series des Sciences Mathematiques Astronomiques et Physiques",
-"BARB. Bulletin de l'Academie Royale de Belgique",
-"BSAF. Bulletin de la Societe Astronomique de France",
-"BSAFR Bulletin de la Societe Astronomique de France et Revue Mensuelle d'Astronomie, de Meteorologie et de Physique du Globe",
-"BSAL. Bulletin de la Societe Astronomique de Liege",
-"BSBA. Bulletin de la Societe Belge d'Astronomie",
-"BSRSL Bulletin de la Societe Royale des Sciences de Liege",
-"AFOEV Bulletin de l'Association Francaise d'Observateurs d'Etoiles Variables",
-"BMai. Bulletin de la Station Astrophotographique de Mainterne",
-"BOBeo Bulletin de l'Observatoire Astronomique de Belgrade",
-"BuLyo Bulletin de l'Observatoire de Lyon",
-"BBSAG Bulletin der Bedeckungsveraenderlichen-Beobachter der Schweizerischen Astronomischen Gesellschaft",
-"BIEBe Bulletin d'Information d'Etoiles Be",
-"BIM.. Bulletin d'Information des Marees Terrestres",
-"BIBGI Bulletin d'Information du Bureau Gravimetrique International",
-"BICDS Bulletin d'Information du Centre de Donnees Stellaires",
-"BCFHT Bulletin d'information du telescope Canada-France-Hawaii",
-"BGeod Bulletin Geodesique",
-"BGNS. Bulletin Geodesique, Nouvelle Series",
-"BuBIH Bulletin Horaire du Bureau International de l'Heure",
-"BOPul Bulletin (Izvestiya) de l'Observatoire Central a Poulkovo",
-"BuMat Bulletin Mathematique",
-"BKoAS Bulletin of Korean Astronomical Society",
-"BMBio Bulletin of Mathematical Biology",
-"BMBp. Bulletin of Mathematical Biophysics",
-"BPAS. Bulletin of Pure and Applied Science (Physics)",
-"BAAPG Bulletin of the American Association of Petroleum Geologists",
-"BAVSO Bulletin of the American Association of Variable Stars Observers",
-"BAAS. Bulletin of the American Astronomical Society",
-"BAMaS Bulletin of the American Mathematical Society",
-"BAMS. Bulletin of the American Meteorological Society",
-"BAPS. Bulletin of the American Physical Society",
-"BAICz Bulletin of the Astronomical Institutes of Czechoslovakia",
-"BAN.. Bulletin of the Astronomical Institutes of the Netherlands",
-"BANS. Bulletin of the Astronomical Institutes of the Netherlands Supplement Series",
-"BAORB Bulletin of the Astronomical Observatoire Royale de Belgique",
-"IllOB Bulletin of the Astronomical Observatory of the University of Illinois",
-"BASBr Bulletin of the Astronomical Society of Brazil",
-"BASI. Bulletin of the Astronomical Society of India",
-"BCAIC Bulletin of the Central Astronomical Institute of Czechoslovakia",
-"BuGSA Bulletin of the Geological Society of America",
-"BIMIA Bulletin of the Institute of Mathematics and Its Applications",
-"BuIPS Bulletin of the Israel Physical Society",
-"BKobO Bulletin of the Kobe Marine Observatory Kobe Japan",
-"BLPI. Bulletin of the Lebedev Physics Institute",
-"BuLMS Bulletin of the London Mathematical Society",
-"BRASP Bulletin of the Russian Academy of Science, Phys.",
-"BSAst Bulletin of the Section of Astronomy",
-"BSAE. Bulletin of the Soviet Antarctic Expedition",
-"BuONC Bulletin of the Special Astrophysical Observatory, Northern Caucasus",
-"BSAO. Bulletin of the Special Astrophysics Observatory",
-"BTasO Bulletin of the Tashkent Observatory",
-"BTok. Bulletin of the Tokyo Astronomical Observatory",
-"BToIT Bulletin of the Tokyo Institute of Technology",
-"BUBes Bulletin of the University of Besancon Observatory",
-"BYam. Bulletin of the Yamagata University Yamagata Japan",
-"YerOB Bulletin of the Yerkes Observatory of the University of Chicago",
-"BVol. Bulletin of Volcanology",
-"BCNRS Bulletin Signaletique - Centre National de la Recherche Scientifique",
-"BSAO. Bull. Special Astrophys. Obs.",
-"BIHCD Bureau Internationale Heure, Paris, Circulaire",
-"BDus. Byulleten' Instituta Astrofiziki Dushanbe Akademiya Nauk Tadzhikskoj SSR",
-"BITA. Byulleten' Instituta Teoreticheskoj Astronomii (Leningrad)",
-"BStaO Byulleten' Stalinabadskoj Astronomicheskoj Observatorii Akademiya Nauk Tadzhikskoj SSR",
-"ByuRe Byurakan Astrophysical Observatory Armenia USSR Reprints",
-"ByuPr Byurakanskaya Astrofizicheskaya Observatoriya Preprint",
-"CahPh Cahiers de Physique",
-"CAS.. Cambridge Astrophysics Series",
-"CCA.. Cambridge Contemporary Astrophysics",
-"CamRe Cambridge Observatories Reprints",
-"CMPNC Cambridge Monographs on Particle Physics, Nuclear Physics and Cosmology",
-"CMPPh Cambridge Monographs on Plasma Physics",
-"CSLPT Cambridge Studies in Low Temperature Physics",
-"CTMPC Cambridge Topics in Mineral Physics and Chemistry",
-"BCNRC Canada National Research Council Division Mechanical Engineering National Aeronautical Establishment Quarterly Bulletin",
-"CASJ. Canadian Aeronautics and Space Journal",
-"CASJQ Canadian Aeronautics and Space Journal Quarter",
-"CEEJ. Canadian Electrical Engineering Journal",
-"CaGeJ Canadian Geotechnical Journal",
-"CIPSG Canadian Information Processing Society Graphics Interface",
-"CJChE Canadian Journal of Chemical Engineering",
-"CaJCh Canadian Journal of Chemistry",
-"CaJCE Canadian Journal of Civil Engineering",
-"CaJES Canadian Journal of Earth Sciences",
-"CJECE Canadian Journal of Electrical Computer Engineering",
-"CJMat Canadian Journal of Mathematics",
-"CaJPh Canadian Journal of Physics",
-"CaJPS Canadian Journal of Physics Supplement",
-"CaJRS Canadian Journal of Remote Sensing",
-"CJRA. Canadian Journal of Research Section A",
-"CJSMT Canadian Journal of Science Mathematics and Technology Education",
-"CaJSS Canadian Journal of Soil Science",
-"CaRes Cancer Research",
-"CPhD. Cape Photographic Durchmusterung",
-"CarR. Caries Research",
-"GCRV. Carnegie Institute Washington D.C. Publication",
-"CarOB Carter Observatory Wellington New Zealand Astronomical Bulletins",
-"CarRe Carter Observatory Wellington New Zealand Reprints",
-"CasRe Case Western Reserve University Warner and Swasey Observatory Cleveland Ohio Reprints",
-"CASI. CASI Transactions",
-"CSVS. Catalogue of suspected variable stars. Acad. of Sciences USSR Shternberg.",
-"CatL. Catalysis Letters",
-"CarRv Catalysis Reviews",
-"Catt. CATTECH",
-"CCDA. CCD Astronomy",
-"CEGB. CEGB Research",
-"CeMec Celestial Mechanics",
-"CeMDA Celestial Mechanics and Dynamical Astronomy",
-"Cell. Cell",
-"Cellu Cellulose",
-"Cent. Centaurus",
-"CfAPr Center for Astrophysics Cambridge Mass Preprint Series",
-"CBET. Central Bureau Electronic Telegrams",
-"CEAB. Central European Astrophysical Bulletin",
-"CEJE. Central European Journal of Engineering",
-"CEJG. Central European Journal of Geosciences",
-"CEJPh Central European Journal of Physics",
-"CPH.. Centre de Physique des Houches",
-"CCpFS Ceskoslovensky Casopis pro Fyziku Sekce",
-"CFDAA CFD Advances Applications",
-"CKH.. Chagyo Kenkyu Hokoku (Tea Research Journal)",
-"ChNew Chandra News",
-"Chaos Chaos",
-"CSF.. Chaos Solitons and Fractals",
-"ChCom Chemical Communications",
-"ChEdu Chemical Educator",
-"ChEnC Chemical Engineering Communications",
-"ChEnN Chemical Engineering News",
-"CERDA Chemical Engineering Research &amp",
-"ChEnS Chemical Engineering Science",
-"ChGeo Chemical Geology",
-"CP... Chemical Physics",
-"CPL.. Chemical Physics Letters",
-"CPSS. Chemical Physics of Solid Surfaces",
-"CPSSH Chemical Physics of Solid Surfaces and Heterogeneous Catalysis",
-"CPR.. Chemical Physics Reports",
-"ChSRv Chemical Society Reviews",
-"ChEG. Chemie der Erde / Geochemistry",
-"CEJ.. Chemistry A European Journal",
-"CPCar Chemistry and Physics of Carbon",
-"CPLip Chemistry and Physics of Lipids",
-"ChUDA Chile Universidad Departamento de Astronomia Publicaciones",
-"ChOE. China Ocean Engineering",
-"ChRST China Rept Sci Technol JPRS CST",
-"ChA.. Chinese Astronomy",
-"ChIEJ Chinese Institute of Engineers Journal",
-"ChJA. Chinese Journal of Aeronautics",
-"ChJAA Chinese Journal of Astronomy and Astrophysics",
-"ChJAS Chinese Journal of Astronomy and Astrophysics Supplement",
-"ChJCP Chinese Journal of Chemical Physics",
-"ChJG. Chinese Journal of Geophysics",
-"ChJIR Chinese Journal of Infrared Research",
-"ChJL. Chinese Journal of Lasers",
-"ChJLB Chinese Journal of Lasers B",
-"CJLTP Chinese Journal of Low Temperature Physics",
-"ChJME Chinese Journal of Mechanical Engineering",
-"ChJNP Chinese Journal of Nuclear Physics",
-"ChJOL Chinese Journal of Oceanology and Limnology",
-"ChJPh Chinese Journal of Physics",
-"ChJPR Chinese Journal of Polar Research",
-"ChJS. Chinese Journal of Semiconductors",
-"ChJSS Chinese Journal of Space Science",
-"ChOpL Chinese Optics Letters",
-"ChPhy Chinese Physics",
-"ChPhB Chinese Physics B",
-"ChPhC Chinese Physics C",
-"ChPhL Chinese Physics Letters",
-"ChSBu Chinese Science Bulletin",
-"ChSAJ Chinese Society of Astronautics Journal",
-"ChSMJ Chinese Society of Mechanical Engineers Journal",
-"ChSST Chinese Space Science Technology",
-"CMDRG Chislennye Metody Dinamike Razrezhennykh Gazov",
-"CHOCS CHOCS",
-"CITM. Chubu Institute Technology Memoirs",
-"CIDA. CIDA",
-"CTE.. Ciencias de la Tierra y del Espacio",
-"CiInf Circ. Inf.",
-"CiSSV Circolare Interna della Sezione Stelle Variabili dell'Unione Astrofili Italiani",
-"CSSP. Circuits Systems and Signal Processing",
-"CirW. Circuit World",
-"CAFOE Circulaire de l'Association Francaise d'Observateurs d'Etoiles Variables",
-"CiBAA Circular of the British Astronomical Association",
-"CiUO. Circular of the Union Observatory Johannesburg",
-"CiPoJ Circumpolar Journal",
-"CQGra Classical and Quantum Gravity",
-"CQGrS Classical and Quantum Gravity Supplement",
-"CRMMP Classical Reviews in Mathematics and Mathematical Physics",
-"CTPhy Classical Theoretical Physics",
-"CCM.. Clays and Clay Minerals",
-"ClDy. Climate Dynamics",
-"CliPa Climate of the Past",
-"CliPD Climate of the Past Discussions",
-"ClCh. Climatic Change",
-"COIR. Clinical Oral Implants Research",
-"CPPM. Clinical Physics and Physiological Measurement",
-"CNRAe CNR Aeritalia S",
-"CODAB CODATA Bulletin",
-"Coel. Coelum Periodico Bimestrale per la Divulgazione dell'Astronomia",
-"AeSc. Collection of Papers on Aerospace Science",
-"ColJ. Colloid Journal",
-"ColSu Colloids and Surfaces",
-"CPC.. Combinatorics, Probability and Computing",
-"CoFl. Combustion and Flame",
-"CST.. Combustion Science and Technology",
-"CTM.. Combustion Theory Modelling",
-"CNSMP Comet News Service, McDonnell Planetarium",
-"CPMCM Commentationes Physico-Mathematicae et Chemico-Medicae",
-"ComMP Comments in Modern Physics",
-"ComAp Comments on Astrophysics",
-"CoASP Comments on Astrophysics and Space Physics",
-"CoAMP Comments on Atomic and Molecular Physics",
-"CoCMP Comments on Condensed Matter Physics",
-"CoNPP Comments on Nuclear and Particle Physics",
-"CoPPC Comments on Plasma Physics and Controlled Fusion",
-"ComSp Commercial Space",
-"CoKon Commmunications of the Konkoly Observatory Hungary",
-"CAPJ. Communication Astronomy with the Public Journal",
-"ComBr Communication Broadcasting",
-"CoSSC Communication in Statistics - Simulation and Computation",
-"CoSTM Communication in Statistics - Theory and Methods",
-"Commu Communications",
-"CoORB Communications de l'Observatoire Royal de Belgique",
-"MonAP Communications du Departement d'Astrophysique de la Faculte des Sciences de Mons Mons Astrophysical Papers",
-"CoDDO Communications from the David Dunlap Observatory",
-"CoMtW Communications from the Mount Wilson Solar Observatory to the National Academy of Sciences",
-"CoRad Communications from the Radcliffe Observatory Pretoria South Africa",
-"CoROE Communications from the Royal Observatory Edinburgh",
-"CoOxf Communications from the University Observatory Oxford",
-"CoStA Communications from the University Observatory St Andrews Scotland",
-"CEST. Communications Gillies Inc Electronic Systems in Transportation",
-"CoAlg Communications in Algebra",
-"CANM. Communications in Applied Numerical Methods",
-"CoAst Communications in Asteroseismology",
-"CCoPh Communications in Computational Physics",
-"CMaPh Communications in Mathematical Physics",
-"CNSNS Communications in Nonlinear Science and Numerical Simulations",
-"CNME. Communications in Numerical Methods in Engineering",
-"CoPDE Communications in Partial Differential Equations",
-"CPAM. Communications in Pure Applied Mathematics",
-"CoTPh Communications in Theoretical Physics",
-"CoAnk Communications of the Department of Astronomy of Ankara University",
-"CoLPL Communications of the Lunar and Planetary Laboratory",
-"CoLon Communications of the University of London Observatory",
-"CPhy. Communications on Physics",
-"CRLJ. Communications Research Laboratory Journal",
-"CRLRv Communications Research Laboratory Review",
-"ComSo Communications Society",
-"Compe COMPEL: The International Journal for Computation and Mathematics in Electrical and Electronic Engineering",
-"CoVar Complex Variables",
-"Compo Composites",
-"CmpEn Composites Engineering",
-"CmpMa Composites Manufacturing",
-"ComST Composites Science Technology",
-"CmpSt Composite Structures",
-"CoMat Compositio Mathematica",
-"CRSPH Compte Rendu des Seances de la Societe de Physique et d'Histoire Naturelle de Genere",
-"CR... Comptes Rendus Academie des Sciences (serie non specifiee)",
-"CRABS Comptes Rendus de l'Academie Bulgare des Sciences",
-"CRASE Comptes Rendus de l'Académie des Sciences - Series IIA - Earth and Planetary Science",
-"CRGeo Comptes Rendus Geoscience",
-"CRMat Comptes Rendus Mathematique",
-"CRMec Comptes Rendus Mecanique",
-"CRPhy Comptes Rendus Physique",
-"CAMP. Computational and Applied Mathematical Physics",
-"ComMS Computational Materials Science",
-"CMMPh Computational Mathematics and Mathematical Physics",
-"CompM Computational Mechanics",
-"COA.. Computational Optimization and Applications",
-"CSMA. Computational Structural Mechanics and Applications",
-"Compr Computer",
-"CAD.. Computer-Aided Design",
-"CGIP. Computer Graphics Image Processing",
-"CMAME Computer Methods in Applied Mechanics and Engineering",
-"CoPhC Computer Physics Communications",
-"CoPhR Computer Physics Reports",
-"CBR.. Computers and Biomedical Research",
-"CEE.. Computers and Electrical Engineering",
-"CF... Computers and Fluids",
-"CG... Computers and Geosciences",
-"CMwA. Computers and Mathematics with Applications",
-"CoStr Computers and Structures",
-"CSEd. Computer Science Education",
-"ComPh Computers in Physics",
-"CVIU. Computer Vision and Image Understanding",
-"CVGIP Computer Vision Graphics and Image Processing",
-"Compu Computing",
-"CSE.. Computing in Science and Engineering",
-"ComSE Computing Systems in Engineering",
-"COMTR COMSAT Technical Review",
-"CoCoi Comunicacoes do Observatonio Astronomico da Universidade de Coimbra",
-"CoMRA Concepts in Magnetic Resonances A",
-"CoMRB Concepts in Magnetic Resonances B",
-"CMPhy Condensed Matter Physics",
-"CGDAM Conformal Geometry and Dynamics of the American Mathematical Society",
-"CDT.. Connaissance des Temps",
-"ConSc Connection Science",
-"CoFra Consiglio Nazionale delle Ricerche Italia. Laboratorio di Astrofisica Frascati Roma Contributi",
-"ConCP Contemporary Concepts in Physics",
-"ConFP Contemporary Fundamental Physics",
-"ConPh Contemporary Physics",
-"CSR.. Continental Shelf Research",
-"CMT.. Continuum Mechanics and Thermodynamics",
-"CoIAP Contributions de l'Institut d'Astrophysique de Paris Serie A",
-"CoIAB Contributions de l'Institut d'Astrophysique de Paris Serie B",
-"CoAsi Contributions dell'Osservatorio Astrofisica dell'Universita di Padova in Asiago",
-"CoMil Contributions dell'Osservatorio Astrononia di Milano-Merate",
-"CoArm Contributions from the Armagh Observatory",
-"CoThe Contributions from the Astronomical Department of the University of Thessaloniki",
-"CoBos Contributions from the Bosscha Observervatory",
-"CoCam Contributions from the Cambridge Observatory England",
-"CoTol Contributions from the Cerro Tololo Inter-American Observatory",
-"CoTok Contributions from the Department of Astronomy University of Tokyo",
-"CoDAO Contributions from the Dominion Astrophysical Observatory in Victoria",
-"CoDun Contributions from the Dunsink Observatory Dublin Ireland",
-"CoKyo Contributions from the Institute of Astrophysics and Kwasan Observatory Kyoto",
-"CoKit Contributions from the Kitt Peak National Observatory",
-"CoKwa Contributions from the Kwasan and Hida Observatories University of Kyoto",
-"CoIoa Contributions from the Laboratory of Astronomy - University of Ioannina Greece",
-"CoMcD Contributions from the McDonald Observatory University of Texas Fort Davis",
-"CMWCI Contributions from the Mount Wilson Observatory / Carnegie Institution of Washington",
-"CoPri Contributions from the Princeton University Observatory",
-"CoRut Contributions from the Rutherford Observatory of Columbia University New York",
-"CoWas Contributions from the Washburn Observatory of the University of Wisconsin",
-"CoAth Contributions from the Wroclaw Astronomical Observatory",
-"CoLic Contributions of Lick Observatory",
-"CLic2 Contributions of Lick Observatory, Series II",
-"CoPer Contributions of Perkins Observatory",
-"CoSka Contributions of the Astronomical Observatory Skalnate Pleso",
-"CoSkL Contributions of the Astronomical Observatory Skalnate Pleso Letters",
-"CoSkS Contributions of the Astronomical Observatory Skalnate Pleso Supplement",
-"CoLou Contributions of the Louisiana State University Observatory Baton Rouge Louisiana",
-"CoNMx Contributions of the Observatory of New Mexico State University Las Cruces New Mexico",
-"CoBrn Contributions of the Public Observatory and Planetarium in Brno",
-"CSASG Contributions of the Slovak Academy Sciences Geophysical Institute",
-"CoWat Contributions of the University of Waterloo Observatory",
-"CoVVO Contributions of the Van Vleck Observatory",
-"ConAP Contributions to Atmospheric Physics/Beitraege zur Physik Atmosphaere",
-"CoGG. Contributions to Geophysics and Geodesy",
-"CoMP. Contributions to Mineralogy and Petrology",
-"CoPP. Contributions to Plasma Physics",
-"CoUCL Contributions Universite Catholique de Louvain",
-"CoSte Contributions University of Arizona Steward Observatory Tucson Arizona",
-"CoRHO Contributions University of Florida Rosemary Hill Observatory Gainesville",
-"CoCom Control and Computers",
-"CopRe Copenhagen University Observatory Reprints",
-"CorRe Coral Reefs",
-"CorD. Cordoba Durchmusterung",
-"CAGHS Correspondance Astronomique, Geographique, Hydrographique et statistique",
-"CosEl Cosmic Electrodynamics",
-"CosRe Cosmic Research",
-"CosSe Cosmic Search",
-"CTP.. Course of Theoretical Physics",
-"CRB.. C.R. Acad. Sci. Ser. B1",
-"CraRe Cracow Observatory Reprints",
-"CRSSM Critical Reviews in Solid State &amp",
-"Cryo. Cryogenics",
-"CryRp Crystallography Reports",
-"CSSE. Cultural Studies of Science Education",
-"CuCo. Culture and Cosmos",
-"CAP.. Current Applied Physics",
-"CCPCE Current Contents Physical Chemical and Earth Sciences",
-"CEyeR Current Eye Research",
-"CNan. Current Nanoscience",
-"COSSM Current Opinion in Solid State and Materials Science",
-"CSci. Current Science",
-"CySys Cybernetics and Systems",
-"CzJPh Czechoslovak Journal of Physics",
-"CzJPB Czechoslovak Journal of Physics B",
-"CzJPS Czechoslovak Journal of Physics Supplement",
-"CzMJ. Czechoslovak Mathematical Journal",
-"DTr.. Dalton Transactions",
-"DMKD. Data Mining and Knowledge Discovery",
-"DatSJ Data Science Journal",
-"DDORe David Dunlap Observatory Richmond Hill Reprints",
-"DeaCo Dearborn Observatory Contributions",
-"DSR.. Deep Sea Research Part II: Topical Studies in Oceanography",
-"DSRI. Deep Sea Research Part I: Oceanographic Research",
-"DSNPR Deep Space Network Progress Report",
-"Defek Defektoskopiia",
-"DefEl Defense Electronics",
-"DMJ.. Defense Management Journal",
-"DeScE Defense Science Electronics",
-"DSJ.. Defense Science Journal",
-"DSRMC Defense Systems Review Military Communications",
-"DSSN. Delta Scuti Star Newsletter",
-"Sterb Der Sternenbote Monatsschrift fuer Oesterreichs Amateur-astronomen",
-"DGKBA Deutsche Geodaetische Kommission Bayer. Akad. Wiss.",
-"DGKBB Deutsche Geodaetische Kommission Bayer. Akad. Wiss. B",
-"DGKGN Deutsche Geodaetische Kommission Gravity Network West Germany DSGN Data Adjustment",
-"DeHyZ Deutsche Hydrographische Zeitschrift",
-"DPhyG Deutsche Physikalische Gesellschaft",
-"DSEG. Developments in Solid Earth Geophysics",
-"DFVLR DFVLR",
-"DRM.. Diamond and Related Materials",
-"Stern Die Sterne",
-"Welt. Die Weltall",
-"DnU.. Differentsial nye Uravneniia",
-"DSP.. Digital Signal Processing",
-"Dimen Dimensions",
-"DiSis Dinamicheskie Sistemy",
-"DPM.. Dinamika i Prochnost Mashin",
-"DiRaG Dinamika razrezhennykh gazov",
-"DIO.. DIO",
-"DCMP. Directions in Condensed Matter Physics",
-"DISA. DISA Information",
-"Disc. Discover",
-"DImTe Display Imaging Technology",
-"Displ Displays",
-"DSE.. Distributed Systems Engineering",
-"DLGRM DLGR Magnetofluiddyn",
-"Dlib. D-Lib Magazine",
-"DLRNa DLR Nachrichten",
-"DOCi. Documentation des Observateurs Circulaire",
-"DOIAP Documentation des Observateurs Institut d'Astrophysique de Paris",
-"DoANT Doklady Akademiia Nauk TadzhSSR",
-"DokAN Doklady Akad Nauk Minerologia USSR",
-"DoBan Doklady Bolgarskoi Akademiia Nauk",
-"DokES Doklady Earth Sciences",
-"DokPC Doklady Physical Chemistry",
-"DAOAR Dominion Astrophysical Observatory Annual Report",
-"DorPo Dornier Post",
-"DSO.. Double Star Observer",
-"DSSC. Double Star Section Circulars",
-"DudOR Dudley Observatory Reports",
-"PODE. Dun Echt Observatory Publications",
-"DunOP Dunsink Observatory Publications",
-"DunRe Dunsink Observatory Reprints",
-"DurOO Durham Observatory Observations",
-"IzDus Dushanbe Izdatel Donish",
-"DyeRe Dyer Observatory Reprints",
-"DySys Dynamical Systems: An International Journal",
-"DynCo Dynamics and Control",
-"DSSys Dynamics and Stability of Systems",
-"DyAtO Dynamics of Atmospheres and Oceans",
-"EESC. Earth and Environmental Science Conference Series",
-"EaEvS Earth and Evolution Sciences",
-"EExSc Earth and Extraterrestrial Sciences",
-"EaInt Earth Interactions",
-"EOAST Earth-Oriented Applications and Space Technology",
-"EEEV. Earthquake Engineering and Engineering Vibration",
-"EaSci Earthquake Science",
-"ESRv. Earth Science Reviews",
-"ESPL. Earth Surface Processes and Landforms",
-"ESD.. Earth System Dynamics",
-"ESDD. Earth System Dynamics Discussion",
-"ESSD. Earth System Science Data",
-"ESSDD Earth System Science Data Discussions",
-"EERST East European Rept Sci. Technol. JPRS ESA",
-"EERSA East Europe Rept Sci Affairs JPRS",
-"EBCi. Eclipsing Binaries Circulars",
-"EcGH. Eclogae geologae Helvetii",
-"Ecogr Ecography",
-"EcGou Ecole de Goutelas",
-"Earth eEarth",
-"EartD eEarth Discussions",
-"ETATF Eesti NSV Teaduste Akadeemia Toimetised Fuusika Matemaatika",
-"IzmP. Ege University Izmir Publications of the Department of Astronomy",
-"EJSM. e-Journal of Soft Materials",
-"Elast Elastic",
-"ECLRv Electrical Communication Laboratories Review",
-"JElEn Electrical Engineering of Japan",
-"EMPS. Electric Machines and Power Systems",
-"Elecm Electromagnetics",
-"EJSEd Electronic Journal of Science Education",
-"EJSta Electronic Journal of Statistics",
-"EJTP. Electronic Journal of Theoretical Physics",
-"EML.. Electronic Materials Letters",
-"ElPro Electronic Progress",
-"JElCo Electronics Communications of Japan",
-"ElL.. Electronics Letters",
-"ElP.. Electronics Power",
-"EOSD. Electro Optical Systems Design",
-"ElLC. Electrotechnical Laboratory Circulars",
-"ElLR. Electrotechnical Laboratory Researches",
-"ElW.. Electrowaerme International",
-"ElBah Elektrische Bahnen",
-"Elem. Elektromekhanika",
-"Elek. Elektronika",
-"ElTA. Elektronnaia Tekhnika Avtomatike",
-"ElMod Elektronnoe Modelirovanie",
-"ETRE. Elektrosviaz Telecommunications Radio Engineering Telecommunications",
-"EVest Elektrotehniski Vestnik",
-"OED.. El Observador de Estrellas Dobles",
-"ElUn. El Universo",
-"EMCT. EMC Technology",
-"EBBT. Emerging Biochemical and Biophysical Techniques",
-"EAA.. Encyclopedia of Astronomy and Astrophysics",
-"Endvr Endeavour",
-"Energ Energetika",
-"EnAt. Energia es Atomtechnika",
-"EnUK. Energy",
-"EnC.. Energy Conversion",
-"ECM.. Energy Conversion Management",
-"EnS.. Energy Sources",
-"EnTR. Energy Technology Review",
-"EnUK. Energy UK",
-"EngAn Engineering Analysis",
-"EnSci Engineering and Science",
-"EngCo Engineering Computations",
-"EnFM. Engineering Fracture Mechanics",
-"EnOp. Engineering Optimization",
-"CEnTp Engineering Thermophysics China",
-"Entro Entropie",
-"Entrp Entropy",
-"EnAPC Environmental Analytical and Physical Chemistry Series",
-"EES.. Environmental Earth Sciences",
-"EnEng Environmental Engineering",
-"EFM.. Environmental Fluid Mechanics",
-"EnGeo Environmental Geology",
-"EnMan Environmental Management",
-"EnP.. Environmental Pollution Series B Chemical and Physical",
-"ER... Environmental Research",
-"ERL.. Environmental Research Letters",
-"EnST. Environmental Science Technology",
-"EnTox Environmental Toxicology",
-"ETWQ. Environmental Toxicology and Water Quality",
-"Env.. Environmentrics",
-"EOSTr EOS Transactions",
-"EL... EPL (Europhysics Letters)",
-"EPRIJ EPRI Journal",
-"AnErg Ergaenzungshefte zu den Astronomischen Nachrichten",
-"ErNW. Ergebnisse der exakten Naturwissenschaften",
-"ETDS. Ergodic Theory and Dynamical Systems",
-"Ergo. Ergonomics",
-"ESABu ESA Bulletin",
-"ESAHR ESA History Study Reports",
-"EIUEN ESA IUE Newsletter",
-"ESAJ. ESA Journal",
-"ESASM ESA Scientific &amp",
-"ESAST ESA Scientific Technical Review",
-"ESATM ESA Training Manual",
-"EssPh Essays in Physics",
-"ECSS. Estuarine Coastal and Shelf Science",
-"EUCAS EUCASS Proceedings Series",
-"EurSS Eurasian Soil Science",
-"EJASP EURASIP Journal on Applied Signal Processing",
-"EBioJ European Biophysics Journal",
-"EJAM. European Journal of Applied Mathematics",
-"EJBio European Journal of Biochemistry",
-"EJC.. European Journal of Combinatorics",
-"EJEE. European Journal of Engineering Education",
-"EJMF. European Journal of Mechanics B Fluids",
-"EJMS. European Journal of Mechanics Solids",
-"EJPh. European Journal of Physics",
-"EPJA. European Physical Journal A",
-"EPJAP European Physical Journal Applied Physics",
-"EPJAS European Physical Journal A Supplement",
-"EPJB. European Physical Journal B",
-"EPJC. European Physical Journal C",
-"EPJCS European Physical Journal C Supplement",
-"EPJD. European Physical Journal D",
-"EPJE. European Physical Journal E",
-"EPJH. European Physical Journal H",
-"EPJP. European Physical Journal Plus",
-"EPJST European Physical Journal Special Topics",
-"EuRv. European Review",
-"ESN.. European Science Notes",
-"ESOAR European Southern Observatory Annual Reports",
-"ESOB. European Southern Observatory ESO Bulletin",
-"ESOSP European Southern Observatory Scientific Preprints",
-"ESOSR European Southern Observatory Scientific Report",
-"ETTRT European Transactions Telecommunications Related Technologies",
-"ERST. Europe Report Science Technology",
-"EL... Europhysics Letters",
-"ENews Europhysics News",
-"EXOSA EXOSAT Express",
-"ExA.. Experimental Astronomy",
-"EEyeR Experimental Eye Research",
-"ExHT. Experimental Heat Transfer",
-"ExM.. Experimental Mechanics",
-"ExMPS Experimental Methods in the Physical Sciences",
-"ExT.. Experimental Techniques",
-"ExTFS Experimental Thermal Fluid Science",
-"ExFl. Experiments in Fluids",
-"ExG.. Exploration Geophysics",
-"Extr. Extraction",
-"PMtv. Facultad de Humanidades y Ciencias Universidad de la Republica Montevideo",
-"FaDi. Faraday Discussions",
-"FaTr. Faraday Transactions",
-"FFEMS Fatigue and Fracture of Engineering Materials and Structures",
-"FerNo Fermilab Note",
-"Fer.. Ferroelectrics",
-"FerLS Ferroelectrics Letters Section",
-"FBS.. Few-Body Systems",
-"FiIO. Fiber and Integrated Optics",
-"Filom Filomat",
-"FeMik Finommechanika Mikrotechnika",
-"FiBr. First Break",
-"FizEl Fizicheskaia Elektronika",
-"FiMek Fizicheskaia Mekhanika",
-"Fiz.. Fizika",
-"FizA. Fizika A",
-"FizAS Fizika Aerodispersnykh Sistem",
-"FizB. Fizika B",
-"FizGV Fizika Goreniia i Vzryva",
-"FizKO Fizika i Khimiia Obrabotki Materialov",
-"FizTV Fizika i Tekhnika Vysokikh Davlenii",
-"FizMM Fizika Metallov i Metallovedenie",
-"FizMS Fizika Mnogochastichnykh Sistem",
-"FizNT Fizika Nizkikh Temperatur",
-"FizPl Fizika Plazmy",
-"FizSz Fizika Sz.",
-"FizTT Fizika Tverdogo Tela",
-"FizZS Fizika Zhidkogo Sostoianiia",
-"FizAt Fiziki Atmosfery",
-"FizKM Fiziko Khimicheskaia Mekhanika Materialov",
-"FizCh Fizyki i Chemii Seria Fizyka",
-"FliIn Flight International",
-"FNL.. Fluctuation and Noise Letters",
-"FRFI. Flug Revue Flugwelt International",
-"FlDy. Fluid Dynamics",
-"FlDyR Fluid Dynamics Research",
-"FlDyT Fluid Dynamics Transactions",
-"Fluid Fluidika",
-"FMAG. Fluid Mechanics of Astrophysics and Geophysics",
-"FlMSR Fluid Mechanics Soviet Research",
-"FluQ. Fluids Quarterly",
-"FBP.. Food and Bioproducts Processing. Part C, Transactions of the Institution of Chemical Engineers",
-"ForPh Fortschritte der Physik",
-"FoGeo Fotointerpretacja w Geografii",
-"FoPh. Foundations of Physics",
-"FoPhL Foundations of Physics Letters",
-"Fract Fractals",
-"Freq. Frequenz",
-"FrES. Frontiers of Earth Science",
-"FrMS. Frontiers of Materials Science",
-"FrME. Frontiers of Mechanical Engineering",
-"FrPhy Frontiers of Physics",
-"FrPhC Frontiers of Physics in China",
-"IzFru Frunze Izdatel Ilim",
-"FSTJ. Fujitsu Scientific Technical Journal",
-"FST.. Fullerene Science and Technology",
-"FAAp. Functional Analysis and Its Applications",
-"FML.. Functional Materials Letters",
-"FACM. Functiones et Approximatio Commentarii Mathematici",
-"FInfo Fundamenta Informaticae",
-"FANP. Fundamental and Applied Nuclear Physics Series",
-"OOPS. Fundamental nye Osnovy Opticheskoi Pamiati i Sredy",
-"FCPh. Fundamentals of Cosmic Physics",
-"FTP.. Fundamental Theories of Physics",
-"Futur Future Spring",
-"GCNew Galactic Center Newsletter",
-"galxp GALEX Proposal",
-"GalEl Galilean Electrodynamics",
-"GEB.. Games and Economic Behavior",
-"GGMit Gauss-Gesellschaft e.V. Göttingen, Mitteilungen",
-"GVPOO Gauthier-Villars Paris Observatory Observations",
-"GazA. Gazette Astronomique",
-"GazAM Gazette Astronomique Memoires",
-"GazT. Gazodinamika i Teploobmen",
-"GCNR. GCN Report",
-"GECJR GEC Journal Research",
-"Gelio Geliotekhnika",
-"Gemin GEMINI Newsletter Royal Greenwich Observatory",
-"GHA.. General History of Astronomy",
-"GPB.. General Physiology and Biophysics",
-"GReGr General Relativity and Gravitation",
-"Gen.. Genetica",
-"GeoIn Geocarto International",
-"GeocJ Geochemical Journal",
-"Geoch Geochemistry",
-"GGG.. Geochemistry, Geophysics, Geosystems",
-"GeocI Geochemistry International",
-"GeCoA Geochimica et Cosmochimica Acta",
-"GeCAS Geochimica et Cosmochimica Acta Supplement",
-"GeCar Geodesy and Cartography",
-"GeAer Geodeziia i Aerofotos",
-"GeKar Geodeziia i Kartografiia",
-"GKA.. Geodeziia i Kartografiia Aehrofotosemka, L'vov",
-"GeKaA Geodeziia Kartografiia i Aerofotos",
-"GeoK. Geodezja i Kartografia",
-"GeoAc Geodinamica Acta",
-"GeofI Geofisica Internacional",
-"GeoPA Geofisica Pura e Applicata",
-"GeoSb Geofizicheskii Sbornik",
-"GeoZh Geofizicheskii Zhurnal",
-"GeoAA Geografiska Annaler, Series A: Physical Geography",
-"GeoAB Geografiska Annaler, Series B: Human Geography",
-"GeIss Geoinformation Issues",
-"Geokh Geokhimiia",
-"GCarp Geologica Carpathica",
-"GeolJ Geological Journal",
-"GeoM. Geological Magazine",
-"GeoSJ Geological Society Journal",
-"GSAMB Geological Society of America Bulletin",
-"GSAMm Geological Society of America Memoir",
-"GSASP Geological Society of America Special Papers",
-"GSLSP Geological Society of London Special Publications",
-"Geolo Geologija",
-"GeoRu Geologische Rundschau",
-"Geolg Geologos",
-"Geo.. Geology",
-"GeoOD Geology of Ore Deposits",
-"GeoIs Geomagnitnye Issledovaniia",
-"GML.. Geo-Marine Letters",
-"GeoD. Geometriae Dedicata",
-"GeomJ Geomicrobiology Journal",
-"Geomo Geomorphology",
-"Geoph Geophysica",
-"GeGe. Geophysica et Geodaetica",
-"GApFD Geophysical and Astrophysical Fluid Dynamics",
-"GDS.. Geophysical Developments Series",
-"GeoJ. Geophysical Journal",
-"GeoJI Geophysical Journal International",
-"GeopP Geophysical Prospecting",
-"GeopR Geophysical References",
-"GeoRL Geophysical Research Letters",
-"GeoSu Geophysical Surveys",
-"GeoNr Geophysica Norvegica",
-"Geop. Geophysics",
-"GAM.. Geophysics and Astrophysics Monographs",
-"GeoOM Georgetown Observatory Monogram",
-"GeoRe Georgetown Observatory Reprints",
-"GMD.. Geoscientific Model Development",
-"GMDD. Geoscientific Model Development Discussions",
-"GEOCE GEOS Circular on Eclipsing Binaries",
-"GEOCR GEOS Circular on RR Lyr Type Variables",
-"GEOCA GEOS Circular on Small-Amplitude Variables",
-"GEOSN GEOS Note Circulaire",
-"Geote Geotectonics",
-"TrGRC Geothermal Resources Council Transactions",
-"Geoth Geothermics",
-"Geot. Geotimes",
-"Gerb. Gerbertvs, International Academic Publication on History of Medieval Science",
-"GBzG. Gerlands Beitraege zur Geophysik",
-"GUL.. Geschichte und Lichtwechsel der Veraenderlichen Sterne (Potsdam)",
-"GATAN Gesellschaft Aerosolforschung Tagung ueber Aerosole Naturwissenschaft Medizin und Technik Messtechnik und technische Anwendung",
-"GMMWJ Gesellschaft angewandte Mathematik und Mechanik Jahrestagung Goettingen West Germany Zeitschrift Flugwissenschaften",
-"GaMuM Gesellschaft Angewandte Mathematik und Mechanik Workshop Paris France",
-"GMuD. Gesellschaft Mathematik und Datenverarbeitung mbH Multigrid Methods Special Topics Applications",
-"GVMK. Gibridnye Vychislitel nye Mashiny i Kompleksy",
-"Gidro Gidromekhanika",
-"GiGi. Gidroprivod i Gidropnevmoavtomatika",
-"GiSan Gigiena i Sanitariia",
-"GTPZ. Gigiena Truda i Professional nye Zabolevaniia",
-"GAst. Giornale di Astronomia",
-"GlMaJ Glasgow Mathematical Journal",
-"GPC.. Global and Planetary Change",
-"GBioC Global Biogeochemical Cycles",
-"GLORe Goethe Link Observatory Reprints",
-"GPSW. GPS World",
-"GMIP. Graphical Models and Image Processing",
-"GrCo. Gravitation and Cosmology",
-"GrCoS Gravitation and Cosmology Supplement",
-"GrTOn Gravitatsiia i Teoriia Otnositel nosti",
-"GCN.. GRB Coordinates Network",
-"GGMM. Greenhouse Gas Measurement &amp",
-"GriO. Griffith Observer",
-"GrAeH Grumman Aerospace Horizons",
-"Grund Grundwasser",
-"GICi. Gruppo Italiano RV Tauri Circolare",
-"HalRe Hale Observatories Reprints",
-"HadJ. Hadronic Journal",
-"HadJS Hadronic Journal Supplement",
-"BSD.. Hamburger Sternwarte Bergedorf",
-"HamS. Hamburger Sternwarte Sonderdrucke",
-"LS... Hamburger Sternw. Warner &amp",
-"HAAG. Handbook of Astronomy Astrophysics and Geophysics",
-"HBP.. Handbook of Biological Physics",
-"HGE.. Handbook of Geophysical Exploration",
-"HPlPh Handbook of Plasma Physics",
-"HPCRE Handbook on the Physics and Chemistry of Rare Earths",
-"HDA.. Handbuch der Astrophysik",
-"HDP.. Handbuch der Physik",
-"HarZi Harthaer Beobachtungs-Zirkular",
-"HarAC Harvard College Observatory Announcement Card",
-"HarAR Harvard College Observatory Annual Report",
-"BHarO Harvard College Observatory Bulletin",
-"HarCi Harvard College Observatory Circular",
-"HarPa Harvard College Observatory Papers",
-"HarRe Harvard College Observatory Reprints",
-"HarMi Harvard Observatory Mimeograms",
-"HarMo Harvard Observatory Monographs",
-"HeaPh Health Physics",
-"HMT.. Heat and Mass Transfer",
-"HTrEn Heat Transfer Engineering",
-"HTJR. Heat Transfer Japanese Research",
-"HTSR. Heat Transfer Soviet Research",
-"Heavn Heavens",
-"HWM.. Helgoländer Wissenschaftliche Meeresuntersuchungen",
-"HMR.. Helgoland Marine Research",
-"AcHCh Helvetica Chimica Acta",
-"AcHPh Helvetica Physica Acta",
-"AcHPS Helvetica Physica Acta Supplementum",
-"HelOB Helwan Institute of Astronomy and Geophysics Bulletins",
-"HemD. Hemel en Dampkring",
-"HECh. High Energy Chemistry",
-"HEDP. High Energy Density Physics",
-"HEPNP High Energy Physics and Nuclear Physics",
-"HiA.. Highlights of Astronomy",
-"HPP.. High Performance Polymers",
-"HPR.. High Pressure Research",
-"HiTec High Technology",
-"HTHP. High Temperatures and High Pressures",
-"HTemS High Temperature Science",
-"HARSB Histoire de l'Academie Royale des Sciences et des Belles-Lettres de Berlin",
-"HSPBS Historical Studies in the Physical and Biological Sciences",
-"HGeo. History of Geophysics",
-"HGSS. History of Geo- and Space Sciences",
-"HisSc History of Science",
-"HUFEB Hokkaido University Faculty Engineering Bulletin",
-"HUFEM Hokkaido University Faculty Engineering Memoirs",
-"Holz. Holzforschung",
-"HBB.. Horizons in Biochemistry and Biophysics",
-"HWP.. Horizons in World Physics",
-"HCHy. Hovering Craft and Hydrofoil",
-"HGT.. Human Gene Therapy",
-"HvaOB Hvar Observatory Bulletin",
-"HvOBS Hvar Observatory Bulletin Supplement",
-"HyBio Hydrobiologia",
-"HydJ. Hydrogeology Journal",
-"HyPr. Hydrological Processes",
-"HESS. Hydrology and Earth System Sciences",
-"HESSD Hydrology and Earth System Sciences Discussions",
-"HyInt Hyperfine Interactions",
-"IadEn Iadernaia Energiia",
-"IAGBu IAGA Bulletin",
-"IaIaF Iakutsk Iakutskii Filial SO AN SSSR",
-"BSEEA Iasi Institutul Politehnic Buletinul Sectia Electrotehnica Electronica Automatizari",
-"BSMMT Iasi Institutul Politehnic Buletinul Sectia Matematica Mecanica Teoretica Fizica",
-"BSMT. Iasi Institutul Politehnic Buletinul Sectia Mecanica Tehnica",
-"IAUCB IAU Commission on Close Binary Stars",
-"IAUDS IAU Commission on Double Stars",
-"IAUIn IAU Commission on Instruments",
-"IAUGA IAU General Assembly",
-"IAUIB IAU Information Bulletin",
-"IAUSS IAU Special Session",
-"WFINw IAU Working Group on Wide-Field Imaging, Newsletter",
-"IBMJ. IBM Journal of Research and Development",
-"ICAOB ICAO Bulletin",
-"Icar. Icarus",
-"IAESM IEEE Aerospace Electronic Systems Magazine",
-"IAWPL IEEE Antennas and Wireless Propagation Letters",
-"IAPM. IEEE Antennas Propagation Magazine",
-"IASSP IEEE ASSP Magazine",
-"ICiSM IEEE Circuits Systems Magazine",
-"IComM IEEE Communications Magazine",
-"ICSEn IEEE Computational Science and Engineering",
-"ICGA. IEEE Computer Graphics Applications",
-"ICSM. IEEE Computer Systems Magazine",
-"IDTC. IEEE Design Test Computers",
-"IEDL. IEEE Electron Device Letters",
-"IExp. IEEE Expert",
-"IGRSL IEEE Geoscience and Remote Sensing Letters",
-"IISys IEEE Intelligent Systems",
-"IJOE. IEEE Journal of Oceanic Engineering",
-"IJQE. IEEE Journal of Quantum Electronics",
-"IJRA. IEEE Journal of Robotics Automation",
-"ISTSP IEEE Journal of Selected Topics in Signal Processing",
-"IJSSC IEEE Journal of Solid-State Circuits",
-"IJSAC IEEE Journal on Selected Areas in Communications",
-"ILCSM IEEE LCS Magazine",
-"ILTS. IEEE LTS",
-"IMGWL IEEE Microwave and Guided Wave Letters",
-"IMMag IEEE Microwave Magazine",
-"IEEEN IEEE Network",
-"IPTL. IEEE Photonics Technology Letters",
-"IEEEP IEEE Proceedings",
-"ISPL. IEEE Signal Processing Letters",
-"ISPM. IEEE Signal Processing Magazine",
-"IEEES IEEE Spectrum",
-"ISysJ IEEE Systems Journal",
-"ITASS IEEE Transactions on Acoustics Speech and Signal Processing",
-"ITAES IEEE Transactions on Aerospace Electronic Systems",
-"ITAP. IEEE Transactions on Antennas and Propagation",
-"ITAS. IEEE Transactions on Applied Superconductivity",
-"ITAC. IEEE Transactions on Automatic Control",
-"ITBE. IEEE Transactions on Biomedical Engineering",
-"ITB.. IEEE Transactions on Broadcasting",
-"ITCS. IEEE Transactions on Circuits Systems",
-"ITCom IEEE Transactions on Communications",
-"ITCHM IEEE Transactions on Components Hybrids and Manufacturing Technology",
-"ITCAD IEEE Transactions on Computer Aided Design",
-"ITCmp IEEE Transactions on Computers",
-"ITDEI IEEE Transactions on Dielectrics and Electrical Insulation",
-"ITEdu IEEE Transactions on Education",
-"ITEI. IEEE Transactions on Electrical Insulation",
-"ITElC IEEE Transactions on Electromagnetic Compatibility",
-"ITED. IEEE Transactions on Electron Devices",
-"ITEnC IEEE Transactions on Energy Conversion",
-"ITEM. IEEE Transactions on Engineering Management",
-"ITGRS IEEE Transactions on Geoscience and Remote Sensing",
-"ITGE. IEEE Transactions on Geoscience Electronics",
-"ITIP. IEEE Transactions on Image Processing",
-"ITIE. IEEE Transactions on Industrial Electronics",
-"ITIEC IEEE Transactions on Industrial Electronics and Control Instrumentation",
-"ITIA. IEEE Transactions on Industry Applications",
-"ITIT. IEEE Transactions on Information Theory",
-"ITIM. IEEE Transactions on Instrumentation Measurement",
-"ITM.. IEEE Transactions on Magnetics",
-"ITMI. IEEE Transactions on Medical Imaging",
-"ITMTT IEEE Transactions on Microwave Theory Techniques",
-"ITME. IEEE Transactions on Military Electronics",
-"ITNan IEEE Transactions on Nanotechnology",
-"ITNN. IEEE Transactions on Neural Networks",
-"ITNS. IEEE Transactions on Nuclear Science",
-"ITPHP IEEE Transactions on Parts Hybrids and Packaging",
-"ITPAM IEEE Transactions on Pattern Analysis and Machine Intelligence",
-"ITPS. IEEE Transactions on Plasma Science",
-"ITPAS IEEE Transactions on Power Apparatus Systems",
-"ITPD. IEEE Transactions on Power Delivery",
-"ITPE. IEEE Transactions on Power Electronics",
-"ITR.. IEEE Transactions on Reliability",
-"ITRA. IEEE Transactions on Robotics Automation",
-"ITSTQ IEEE Transactions on Selected Topics in Quantum Electronics",
-"ITSM. IEEE Transactions on Semiconduct M",
-"ITSP. IEEE Transactions on Signal Processing",
-"ITSE. IEEE Transactions on Software Engineering",
-"ITSU. IEEE Transactions on Sonics Ultrasonics",
-"ITSMC IEEE Transactions on Systems Man and Cybernetics",
-"ITUFF IEEE Transactions on Ultrasonics Ferroelectrics and Frequency Control",
-"ITVT. IEEE Transactions on Vehicular Technology",
-"JMOA. IEE Journal of Microwaves Optics and Acoustics",
-"JSSED IEE Journal of Solid-State Electron Devices",
-"ITEIS IEEJ Transactions on Electronics, Information and Systems",
-"IJTFM IEEJ Transactions on Fundamentals and Materials",
-"IJTIA IEEJ Transactions on Industry Applications",
-"IJTPE IEEJ Transactions on Power and Energy",
-"IJTSM IEEJ Transactions on Sensors and Micromachines",
-"IPEPA IEE Proceedings B: Electric Power Applications",
-"IPGTD IEE Proceedings C: Generation Transmission Distribution",
-"IPCSV IEE Proceedings: Communications Speech and Vision",
-"IPCTA IEE Proceedings D: Control Theory Applications",
-"IPCDT IEE Proceedings E: Computers and Digital Techniques",
-"IPCRS IEE Proceedings F: Communications Radar and Signal Processing",
-"IPRSP IEE Proceedings F: Radar and Signal Processing",
-"IPMAP IEE Proceedings H: Microwaves Antennas and Propagation",
-"IPMOA IEE Proceedings H: Microwaves Optics and Antennas",
-"IPOpt IEE Proceedings J: Optoelectronics",
-"IPPSM IEE Proceedings: Physical Science Measurement and Instrumentation Management and Education Reviews",
-"IPSSE IEE Proceedings: Solid-State Electron Devices",
-"IEERv IEE Reviews",
-"IEIEE IEICE Electronics Express",
-"ESSFR IEICE ESS Fundamentals Review",
-"IEITC IEICE Transactions on Communications",
-"IEITE IEICE Transactions on Electronics",
-"IEITF IEICE Transactions on Fundamentals of Electronics Communications and Computer Sciences",
-"IEITI IEICE Transactions on Information and Systems",
-"ITN.. IERS Technical Note",
-"IESJ. IES Journal",
-"IHWN. IHW Newsletter",
-"JApMa IMA Journal of Applied Mathematics",
-"IJNA. IMA Journal of Numerical Analysis",
-"IVMA. IMA Volumes in Mathematics and its Applications",
-"IMEPA IME Proceedings. Part A: Journal of Power and Energy",
-"IMEPB IME Proceedings. Part B: Journal of Engineering Manufacture",
-"IMEPC IME Proceedings. Part C: Journal of Mechanical Engineering Science",
-"IMEPD IME Proceedings. Part D: Journal of Automobile Engineering",
-"IMEPE IME Proceedings. Part E: Journal of Process Mechanical Engineering",
-"IMEPG IME Proceedings. Part G: Journal of Aerospace Engineering",
-"IMEPH IME Proceedings. Part H: Journal of Engineering in Medicine",
-"IMEPI IME Proceedings. Part I: Journal of Systems and Control Engineering",
-"IMEPK IME Proceedings. Part K: Journal of Multibody Dynamics",
-"ICSE. Impact of Computing in Science and Engineering",
-"InEPS Indian Academy of Sciences Proceedings: Earth and Planetary Sciences",
-"InMS. Indian Academy of Sciences Proceedings Mathematical Sciences",
-"InASP Indian Academy of Sciences Proceedings Section",
-"InES. Indian Academy of Sciences Proceedings: Section C Engineering Sciences",
-"IUMJ. Indiana University Mathematics Journal",
-"IIApN Indian Institute of Astrophysics Newsletter",
-"InISJ Indian Institute of Science Journal",
-"InISA Indian Institute of Science Journal of Aeronomical Society of India",
-"ITJSE Indian Institute of Technology Journal on Section Engineering Technology",
-"InJAE Indian Journal of Aerospace Engineering Division",
-"InJBB Indian Journal of Biochemistry and Biophysics",
-"InJET Indian Journal of Electronics Telecommunication Engineering Division",
-"InJME Indian Journal of Mechanical Engineering Division",
-"IJMHG Indian Journal of Meteorology Hydrology and Geophysics",
-"InJPh Indian Journal of Physics",
-"InJP. Indian Journal of Physics and Proceedings of the Indian Assocatiation for the Cultivation of Science",
-"InJPA Indian Journal of Physics Section A",
-"InJPB Indian Journal of Physics Section B",
-"IJPAM Indian Journal of Pure and Applied Mathematics",
-"IJPAP Indian Journal of Pure and Applied Physics",
-"IJRSP Indian Journal of Radio and Space Physics",
-"InJHS Indian Journal of the History of Science",
-"InJTP Indian Journal of Theoretical Physics",
-"INSAP Indian National Science Academy Proceedings Supplement",
-"IDAQP Infinite Dimensional Analysis, Quantum Probability and Related Topics",
-"IBSH. Informational Bulletin of the Southern Hemisphere",
-"IBUAA Informational Bulletin of the Ukrainian Astronomical Association",
-"InCo. Information and Computation",
-"IBVS. Information Bulletin on Variable Stars",
-"InfCo Information Control",
-"InfD. Information Display",
-"IPM.. Information Processing and Management",
-"IPL.. Information Processing Letters",
-"ISNL. Information Systems Newsletter",
-"IRA.. Infrared Astronomy",
-"InfPh Infrared Physics",
-"InPhT Infrared Physics and Technology",
-"Ingeg Ingegneria",
-"IngAr Ingenieur Archiv",
-"InCh. Inorganic Chemistry",
-"IAL1K Institut d'Astronomie de Lausanne",
-"IMA.. Institute for Mathematics and Its Applications",
-"InFuJ Institute Fuel Journal",
-"JIECE Institute of Electronics Communication Engineers of Japan Transactions Section E English",
-"IPASA Institute of Physics Academia Sinica Annual Report",
-"ISASS Institute of Space and Astronautical Science Report",
-"ITABO Institute of Theoretical Astrophysics, Blindern-Oslo",
-"OslR. Institute of Theoretical Astrophysics Blindern Oslo Reports",
-"IEAEE Institution Engineers Australia Electrical Engineering Transactions",
-"IEEP. Institution of Electrical Engineers Proceedings",
-"IEREJ Institution of Electronic Radio Engineers Journal",
-"IETE. Institution of Electronics Telecommunication Engineers",
-"IAFET Instituto de Astronomia y Fisica del Espacio Buenos Aires",
-"MerRe Instituto Venezolano de Astronomia Merida Venezuela",
-"IRMBP Institut Royal Meteorologique de Belgique Publications Serie",
-"ITAB. Institut Teoreticheskoi Astronomii Byulleten",
-"TrITA Institut Teoreticheskoi Astronomii Trudy",
-"IET.. Instruments and Experimental Techniques",
-"InLoP Instytut Lotnictwa Prace",
-"InMPP Instytut Maszyn Przeplywowych Prace",
-"IntaC Inta Conie",
-"ITSF. Integral Transforms and Special Functions",
-"ICAE. Integrated Computer-Aided Engineering",
-"InFer Integrated Ferroelectrics",
-"Inter Interavia",
-"IntSM Interavia Space Markets",
-"ISRv. Interdisciplinary Science Reviews",
-"IFB.. Interfaces and Free Boundaries",
-"IPAUC INTERKOSMOS Prague Astronomicky Ustav Ceskoslovenske Akademie Ved",
-"IANT. International Advances in Nondestructive Testing",
-"IntAg International Agrophysics",
-"IAPPP International Amateur-Professional Photoelectric Photometry Communications",
-"IAM.. International Applied Mechanics",
-"IAUC. International Astronomical Union Circular",
-"ICQ.. International Comet Quarterly",
-"ICHMT International Communications in Heat and Mass Transfer",
-"IrPH. International Conference Infrared Physics Zurich Switzerland",
-"ICML. International Conference on Machine Learning",
-"IER.. Internationale Elektronische Rundschau",
-"InGeo International Geophysics Series",
-"IJCEM International Journal for Computational Methods in Engineering Science and Mechanics",
-"IJNAM International Journal for Numerical and Analytical Methods in Geomechanics",
-"IJNME International Journal for Numerical Methods in Engineering",
-"IJNMF International Journal for Numerical Methods in Fluids",
-"IJRPC International Journal for Radiation Physics and Chemistry",
-"IJACS International Journal of Adaptive Control and Signal Processing",
-"IJAdA International Journal of Adhesion Adhesives",
-"IJASS International Journal of Aeronautical and Space Sciences",
-"IJAEM International Journal of Analytical and Experimental Modal Analysis",
-"IJAEO International Journal of Applied Earth Observation and Geoinformation",
-"IJApE International Journal of Electromagnetics and Mechanics",
-"IJAIS International Journal of Applied Information Systems",
-"IJAM. International Journal of Applied Mechanics",
-"IJAsB International Journal of Astrobiology",
-"IJAA. International Journal of Astronomy and Astrophysics",
-"IJAP. International Journal of Aviation Psychology",
-"IJBC. International Journal of Bifurcation and Chaos",
-"IJBB. International Journal of Bioclimatology Biometeorology",
-"IJBm. International Journal of Biometeorology",
-"IJCli International Journal of Climatology",
-"IJCES International Journal of Computational Engineering Science",
-"IJCFD International Journal of Computational Fluid Dynamics",
-"IJCMS International Journal of Computational Materials Science and Engineering",
-"IJCA. International Journal of Computer Applications",
-"IJCAT International Journal of Computer Applications and Technology",
-"IJCMB International Journal of Computer Mathematics Section B",
-"IJCV. International Journal of Computer Vision",
-"IJC.. International Journal of Control",
-"IJDM. International Journal of Damage Mechanics",
-"IJDE. International Journal of Digital Earth",
-"IJDF. International Journal of Dynamics of Fluids",
-"IJEaS International Journal of Earth Sciences",
-"IJE.. International Journal of Electronics",
-"IJER. International Journal of Energy Research",
-"IJEFM International Journal of Engineering and Fluid Mechanics Spring",
-"IJES. International Journal of Engineering Science",
-"IJFa. International Journal of Fatigue",
-"IJFD. International Journal of Fluid Dynamics",
-"IJFr. International Journal of Fracture",
-"IJFE. International Journal of Fusion Energy",
-"IJGS. International Journal of General Systems",
-"IJGA. International Journal of Geomagnetism and Aeronomy",
-"IJGMM International Journal of Geometric Methods in Modern Physics",
-"IJGeo International Journal of Geophysics",
-"IJGNP International Journal of Green Nanotechnology Physics and Chemistry",
-"IJHFF International Journal of Heat and Fluid Flow",
-"IJHMT International Journal of Heat and Mass Transfer",
-"IJHSC International Journal of High Speed Computing",
-"IJHSE International Journal of High Speed Electronics and Systems",
-"IJHM. International Journal of Hybrid Microelectronics Fall",
-"IJHE. International Journal of Hydrogen Energy",
-"IJHy. International Journal of Hyperthermia",
-"IJIDF International Journal of Image and Data Fusion",
-"IJIG. International Journal of Image and Graphics",
-"IJIST International Journal of Imaging Systems Technology",
-"IJIE. International Journal of Impact Engineering",
-"IJIMW International Journal of Infrared and Millimeter Waves",
-"IJICS International Journal of Intelligent Control and Systems",
-"IJMSE International Journal of Mars Science and Exploration",
-"IJMSp International Journal of Mass Spectrometry",
-"IJMSI International Journal of Mass Spectrometry and Ion Processes",
-"IJMES International Journal of Mathematical Education in Science and Technology",
-"IJM.. International Journal of Mathematics",
-"IJMS. International Journal of Mechanical Sciences",
-"IJMW. International Journal of Mine Water",
-"IJMM. International Journal of Mini Microcomputers",
-"IJMoS International Journal of Modelling and Simulation",
-"IJMPA International Journal of Modern Physics A",
-"IJMPB International Journal of Modern Physics B",
-"IJMPC International Journal of Modern Physics C",
-"IJMPS International Journal of Modern Physics Conference Series",
-"IJMPD International Journal of Modern Physics D",
-"IJMPE International Journal of Modern Physics E",
-"IJMF. International Journal of Multiphase Flow",
-"IJN.. International Journal of Nanoscience",
-"IJNT. International Journal of Nanotechnology",
-"IJNS. International Journal of Neural Systems",
-"IJNLM International Journal of Non Linear Mechanics",
-"IJNOP International Journal of Nonlinear Optical Physics",
-"IJNMH International Journal of Numerical Methods for Heat &amp",
-"IJOpt International Journal of Optics",
-"IJOMS International Journal of Oral and Maxillofacial Surgery",
-"IJPRS International Journal of Photogrammetry and Remote Sensing",
-"IJPES International Journal of Physical and Engineering Sciences",
-"IJP.. International Journal of Plasticity",
-"IJPM. International Journal of Polymeric Materials",
-"IJPG. International Journal of Population Geography",
-"IJPR. International Journal of Production Research",
-"IJQC. International Journal of Quantum Chemistry",
-"IJRAI International Journal of Radiation Applications and Instrumentation D Nuclear Tracks and Radiation Measurements",
-"IJRB. International Journal of Radiation Biology",
-"IJRQS International Journal of Reliability, Quality and Safety Engineering",
-"IJRS. International Journal of Remote Sensing",
-"IJRR. International Journal of Robotics Research",
-"IJSC. International Journal of Satellite Communications",
-"IJSME International Journal of Science and Mathematics Education",
-"IJSEd International Journal of Science Education",
-"IJSE. International Journal of Solar Energy",
-"IJSS. International Journal of Solids and Structures",
-"IJSSD International Journal of Structural Stability and Dynamics",
-"IJScA International Journal of Supercomputer Applications",
-"IJSyS International Journal of Systems Science",
-"IJTP. International Journal of Theoretical Physics",
-"IJT.. International Journal of Thermophysics",
-"IJTJE International Journal of Turbo Jet Engines",
-"IMRv. International Materials Reviews",
-"IMeRv International Metals Reviews",
-"IREdu International Review of Education",
-"IRH.. International Review of Hydrobiology",
-"IRNP. International Review of Nuclear Physics",
-"IRPC. International Reviews in Physical Chemistry",
-"ISBRv International Space Business Review",
-"IUGG. International Union of Geodesy and Geophysics General Assembly",
-"IPNPR Interplanetary Network Progress Report",
-"IMPA. Interscience Monographs in Physics and Astronomy",
-"ITPA. Interscience Tracts on Physics and Astronomy",
-"InMat Inventiones Mathematicae",
-"InvPr Inverse Problems",
-"IGeo. Investigations in Geophysics",
-"InFiZ Inzhenerno Fizicheskii Zhurnal",
-"IonIs Ionosfernye Issledovaniia",
-"Iono. Ionosphere",
-"Ippa. Ipparchos",
-"IrJST Iranian Journal of Science Technology",
-"IRETE IRE Transactions on Education",
-"IrAJ. Irish Astronomical Journal",
-"IrAJS Irish Astronomical Journal Supplement",
-"ISAP. ISA Proceedings",
-"ISAT. ISA Transactions",
-"IHERv Ishikawajima Harima Engineering Review",
-"Isis. Isis. Journal of the History of Science Society",
-"IPBS. Isotopes in the Physical and Biomedical Sciences",
-"IsJT. Israel Journal of Technology",
-"IsSRT Israel Space Research and Technology Information Bulletin",
-"ISRAA ISRN Astronomy and Astrophysics",
-"ISCJS ISRO Satellite Centre Journal of Spacecraft Technology",
-"ISSIR ISSI Scientific Reports Series",
-"ISSIR ISSI Scientific Reports Series",
-"IssZK Issledovanie Zemli Fiz Kosmosa",
-"IGAFS Issledovaniia Geomagnetizmu Aeronomii i Fizike Solntsa",
-"IsMTD Issledovaniia Mekhanike i Teploobmenu Dvukhfaznykh Sred",
-"IssUP Issledovaniia Uprugosti i Plastichnosti",
-"ISKZ. Issledovaniya Solntsa i Krasnykh Zvezd",
-"IST.. Issues in Science and Technology",
-"IsJAP Istanbul University Faculty of Science Journal of Astronomy Physics",
-"IsRvC Istanbul University Faculty Science Review Serie C",
-"IINA. Istituto Italiano di Navigazione Atti",
-"IAIss Istoriko-Astronomicheskie Issledovaniya",
-"ITCJ. ITC Journal",
-"INTSA Itogi Nauki i Tekhniki Seriia Astronomiia",
-"INTSF Itogi Nauki i Tekhniki Seriia Fizika Plazmy",
-"INTSI Itogi Nauki i Tekhniki Seriia Issledovanie Kosmicheskogo Prostranstva",
-"INTMK Itogi Nauki i Tekhniki Seriia Meteorologiia i Klimatologiia",
-"INTSO Itogi Nauki i Tekhniki Seriia Okeanologiia",
-"INTSR Itogi Nauki i Tekhniki Seriia Radiotekhnika",
-"INTSS Itogi Nauki i Tekhniki Seriia Sovremennye Problemy Matematiki",
-"INTSV Itogi Nauki i Tekhniki Seriia Vozdushnyi Transport",
-"ITUTJ ITU Telecommunication Journal",
-"IUEEN IUE ESA Newsletter",
-"IUENN IUE NASA Newsletter",
-"IzTad Izvestiia Akademiia Nauk TadzhSSR",
-"IzSF. Izvestiia Akademii Nauk Seriya Fizicheskaya",
-"IzGla Izvestiia Glavnoi rossiiskoi astronomicheskoi observatorii",
-"IzVGA Izvestiia vuzov. Geodeziia Aehrofotosemka",
-"IzVF. Izvestiia Vysshaia Uchebn. Zaved., Fizika",
-"IzVUZ Izvestiia Vysshaia Uchebn. Zaved., Radiofizika",
-"IzAsh Izvestiya Akademii Nauk Turkmenskoj SSR Ashkhabad",
-"IzArm Izvestiya Akademiya Nauk Armyanskoi",
-"IzAlm Izvestiya Astrofizicheskogo Instituta Alma-Ata",
-"IzEhn Izvestiya Astronomicheskoj Engel'gardt obskoj Observatorii Kazan",
-"IzAOP Izvestiya Atmospheric and Oceanic Physics",
-"IzKie Izvestiya Glavnoj Astronomicheskoj Observatorii Kiev",
-"IzPul Izvestiya Glavnoj Astronomicheskoj Observatorii v Pulkove",
-"IzMat Izvestiya: Mathematics",
-"IzAne Izvestiya na Fizicheskiya Institut s Aneb",
-"IzKry Izvestiya Ordena Trudovogo Krasnogo Znameni Krymskoj Astrofizicheskoj Observatorii",
-"IzPSE Izvestiya Physics of the Solid Earth",
-"IzAvT Izvestiya VUZ Aviatsionnaya Tekhnika",
-"IzRad Izvestiya VUZ Radiofizika",
-"IzNic Izviestiia Nikolaevskoi glavnoi astronomicheskoi observatorii",
-"JWUDF Jahns Wöchentliche Unterhaltungen Für Dilettanten und Freunde der Astronomie, Georgraphie und Witterungskunde",
-"JRE.. Jahrbuch der Radioaktivität und Elektronik",
-"JASAC Japan Astronomical Study Association Circulars",
-"JaJAP Japanese Journal of Applied Physics",
-"JJAPL Japanese Journal of Applied Physics Letters B",
-"JJAPR Japanese Journal of Applied Physics Regular Papers Short Notes and Review Papers",
-"JJAPS Japanese Journal of Applied Physics Supplement",
-"JaJAG Japanese Journal of Astronomy and Geophysics",
-"JMMPS Japanese Magazine of Mineralogical and Petrological Sciences",
-"JaIMJ Japan Institute of Metals Journal",
-"JSASS Japan Society of Aeronautical Space Sciences",
-"JSAST Japan Society of Aeronautical Space Sciences Transactions",
-"JSAPJ Japan Society of Air Pollution Journal",
-"JSCMJ Japan Society of Composite Materials Journal",
-"JSLEJ Japan Society of Lubrication Engineers Journal",
-"JSMSJ Japan Society of Materials Science Journal",
-"JSPS. Japan Society of Promotion Science",
-"JSMAJ JASMA Japan Society of Microgravity Application Journal",
-"JMeOp Jemna Mechanika Optika",
-"JenRu Jenaer Rundschau",
-"JenRv Jena Review",
-"JBAn. Jodrell Bank Annals",
-"JBASP Jodrell Bank Ann Ser Pt",
-"JBRe. Jodrell Bank Reprints",
-"JHATD Johns Hopkins APL Technical Digest",
-"JOM.. JOM - Journal of the Minerals, Metals and Materials Society",
-"RSNSW Journal and Proceedings of the Royal Society of New South Wales",
-"JAco. Journal d'Acoustique",
-"JCP.. Journal de Chimie Physique",
-"JCPPC Journal de Chimie Physique et de Physico-Chimie Biologique",
-"JMec. Journal de Mecanique",
-"JMecA Journal de Mecanique Appliquee",
-"JMecT Journal de Mecanique Theorique et Appliquee",
-"JMTAS Journal de Mecanique Theorique et Appliquee Supplement",
-"JPhys Journal de Physique",
-"JPhyC Journal de Physique Colloque",
-"JPR.. Journal de Physique et le Radium",
-"JPhy1 Journal de Physique I",
-"JPhy2 Journal de Physique II",
-"JPhy3 Journal de Physique III",
-"JPhy4 Journal de Physique IV",
-"JPhyL Journal de Physique Lettres",
-"JPhTA Journal de Physique Theorique et Apliquee",
-"JReAt Journal de Recherches Atmospheriques",
-"JAF.. Journal des Astronomes Francais",
-"JO... Journal des Observateurs",
-"JOp.. Journal d'Optique",
-"JTP.. Journal for Technology of Plasticity",
-"JHA.. Journal for the History of Astronomy",
-"JHAS. Journal for the History of Astronomy Supplement",
-"JRAM. Journal fur die reine und angewandte Mathematik",
-"JNanU Journal Nanjing Univ",
-"JNIRE Journal NIRE",
-"JAE.. Journal of Acoustic Emission",
-"JAMDS Journal of Advanced Mechanical Design, Systems, and Manufacturing",
-"JAMES Journal of Advances in Modeling Earth Systems",
-"JAerS Journal of Aerosol Science",
-"JAerE Journal of Aerospace Engineering",
-"JAerP Journal of Aerospace Power",
-"JAfES Journal of African Earth Sciences",
-"JAER. Journal of Agricultural Engineering Research",
-"JAir. Journal of Aircraft",
-"JAlg. Journal of Algebra",
-"JAlgC Journal of Algebraic Combinatorics",
-"JAlgo Journal of Algorithms",
-"JAllC Journal of Alloys and Compounds",
-"JACS. Journal of American Ceramic Society",
-"JAAS. Journal of Analytical Atomic Spectrometry",
-"JApCr Journal of Applied Crystallography",
-"JApEl Journal of Applied Electrochemistry",
-"JAG.. Journal of Applied Geophysics",
-"JApMM Journal of Applied Mathematics and Mechanics",
-"JAM.. Journal of Applied Mechanics",
-"JAMTP Journal of Applied Mechanics and Technical Physics",
-"JApMw Journal of Applied Metalworking",
-"JApMe Journal of Applied Meteorology",
-"JApMC Journal of Applied Meteorology and Climatology",
-"JAPE. Journal of Applied Photographic Engineering",
-"JAP.. Journal of Applied Physics",
-"JAPh. Journal of Applied Physiology",
-"JARS. Journal of Applied Remote Sensing",
-"JASE. Journal of Applied Science and Engineering Section on Electrical Power and Information Systems",
-"JApSc Journal of Applied Sciences",
-"JApSp Journal of Applied Spectroscopy",
-"JApS. Journal of Applied Statistics",
-"JApT. Journal of Approximation Theory",
-"JAESc Journal of Asian Earth Sciences",
-"JAD.. Journal of Astronomical Data",
-"JAHH. Journal of Astronomical History and Heritage",
-"JAI.. Journal of Astronomical Instrumentation",
-"JAsPh Journal of Astronomy and Physics (Turkey)",
-"JASS. Journal of Astronomy and Space Sciences",
-"JApA. Journal of Astrophysics and Astronomy",
-"JApAS Journal of Astrophysics and Astronomy Supplement",
-"JAtOT Journal of Atmospheric and Oceanic Technology",
-"JASTP Journal of Atmospheric and Solar-Terrestrial Physics",
-"JATP. Journal of Atmospheric and Terrestrial Physics",
-"JAtC. Journal of Atmospheric Chemistry",
-"JAtS. Journal of Atmospheric Sciences",
-"JAMOP Journal of Atomic, Molecular and Optical Physics",
-"JAES. Journal of Audio Engineering Society",
-"JAuGG Journal of Australian Geology and Geophysics",
-"JAuR. Journal of Automated Reasoning",
-"JBall Journal of Ballistics",
-"JBBM. Journal of Biochemical and Biophysical Methods",
-"JBB.. Journal of Bioenergetics and Biomembranes",
-"JBC.. Journal of Biological Chemistry",
-"JBP.. Journal of Biological Physics",
-"JBiom Journal of Biomechanics",
-"JBO.. Journal of Biomedical Optics",
-"JBNMR Journal of Biomolecular NMR",
-"JBBC. Journal of Biophysical and Biochemical Cytology",
-"JBiop Journal of Biophysics",
-"JBiBi Journal of Biophysique et Biomecanique",
-"JBMN. Journal of Biophysique et Medecine Nucleaire",
-"JBMR. Journal of Bone and Mineral Research",
-"JBR.. Journal of Breath Research",
-"JCat. Journal of Catalysis",
-"JChEd Journal of Chemical Education",
-"JChPh Journal of Chemical Physics",
-"JChS. Journal of Chromatographic Science",
-"JCh.. Journal of Chromatography",
-"JCSC. Journal of Circuits, Systems and Computers",
-"JCli. Journal of Climate",
-"JCAM. Journal of Climate and Applied Meteorology",
-"JClim Journal of Climatology",
-"JCS.. Journal of Clinical Microbiology",
-"JClP. Journal of Clinical Pharmacology",
-"JCS.. Journal of Cluster Science",
-"JCScT Journal of College Science Teaching",
-"JCIS. Journal of Colloid and Interface Science",
-"JCoSc Journal of Colloid Science",
-"JCTA. Journal of Combinatorial Theory, Series A",
-"JCTB. Journal of Combinatorial Theory, Series B",
-"JCom. Journal of Communications",
-"CoNet Journal of Communications and Networks",
-"JComp Journal of Complexity",
-"JCoMa Journal of Composite Materials",
-"JCTR. Journal of Composites and Technology Research",
-"JCA.. Journal of Computational Acoustics",
-"JTCN. Journal of Computational and Theoretical Nanoscience",
-"JCoAM Journal of Computational and Applied Mathematics",
-"JCoB. Journal of Computational Biology",
-"JCoCh Journal of Computational Chemistry",
-"JCM.. Journal of Computational Mathematics",
-"JCoN. Journal of Computational Neuroscience",
-"JCoPh Journal of Computational Physics",
-"JCST. Journal of Computational Science and Technology",
-"JCMD. Journal of Computer-Aided Materials Design",
-"JCAMD Journal of Computer-Aided Molecular Design",
-"JCoSS Journal of Computer and System Sciences",
-"JCHyd Journal of Contaminant Hydrology",
-"JConP Journal of Contemporary Physics (Armenian Academy of Sciences)",
-"JCos. Journal of Cosmology",
-"JCAP. Journal of Cosmology and Astro-Particle Physics",
-"JCrGr Journal of Crystal Growth",
-"JDR.. Journal of Dairy Research",
-"JDE.. Journal of Differential Equations",
-"JDGeo Journal of Differential Geometry",
-"JoDI. Journal of Digital Information",
-"JDST. Journal of Dispersion Science and Technology",
-"JDisT Journal of Display Technology",
-"JDSO. Journal of Double Star Observations",
-"JDCS. Journal of Dynamical and Control Systems",
-"JDDE. Journal of Dynamics and Differential Equations",
-"JESS. Journal of Earth System Science",
-"JElas Journal of Elasticity",
-"JEEEA Journal of Electrical and Electronics Engineering Australia",
-"JEE.. Journal of Electrical Engineering",
-"JElec Journal of Electroceramics",
-"JEAA. Journal of Electromagnetic Analysis and Application",
-"JEWA. Journal of Electromagnetic Waves and Applications",
-"JECS. Journal of Electronic Circuits and Systems",
-"JEI.. Journal of Electronic Imaging",
-"JEMat Journal of Electronic Materials",
-"JEPub Journal of Electronic Publishing",
-"JECTC Journal of Electronics Cooling and Thermal Control",
-"JElM. Journal of Electronics Manufacturing",
-"JEMT. Journal of Electron Microscopy Technique",
-"JESRP Journal of Electron Spectroscopy and Related Phenomena",
-"JESEd Journal of Elementary Science Education",
-"JEner Journal of Energy",
-"JEAS. Journal of Engineering and Applied Sciences",
-"JEnMa Journal of Engineering and Mathematics",
-"JEngM Journal of Engineering and Mechanics",
-"JETh. Journal of Engineering and Thermophysics",
-"JEER. Journal of Engineering Education Research",
-"JEP.. Journal of Engineering Physics",
-"JEPT. Journal of Engineering Physics and Thermophysics",
-"JEngS Journal of Engineering Sciences",
-"JEEM. Journal of Environmental and Economics Management",
-"JECE. Journal of Environmental Conservation Engineering",
-"JEnvS Journal of Environmental Sciences",
-"JExB. Journal of Experimental Botany",
-"JENan Journal of Experimental Nanoscience",
-"JFF.. Journal of Fire Flammability",
-"JFC.. Journal of Fluid Control",
-"JFM.. Journal of Fluid Mechanics",
-"JFS.. Journal of Fluids and Structures",
-"JFST. Journal of Fluid Science and Technology",
-"JFlu. Journal of Fluorescence",
-"JFAA. Journal of Fourier Analysis and Applications",
-"JFuA. Journal of Functional Analysis",
-"JGeod Journal of Geodesy",
-"JGeo. Journal of Geodynamics",
-"JGS.. Journal of Geographical Systems",
-"JGIS. Journal of Geographic Information System",
-"JG... Journal of Geology",
-"JGG.. Journal of Geomagnetism and Geoelectricity",
-"JGGS. Journal of Geomagnetism and Geoelectricity Supplement",
-"JGP.. Journal of Geometry and Physics",
-"JGR.. Journal of Geophysical Research",
-"JGRD. Journal of Geophysical Research (Atmospheres)",
-"JGRG. Journal of Geophysical Research (Biogeosciences)",
-"JGRF. Journal of Geophysical Research (Earth Surface)",
-"JGRC. Journal of Geophysical Research (Oceans)",
-"JGRE. Journal of Geophysical Research (Planets)",
-"JGRB. Journal of Geophysical Research (Solid Earth)",
-"JGRA. Journal of Geophysical Research (Space Physics)",
-"JGRS. Journal of Geophysical Research Supplement",
-"JGE.. Journal of Geophysics and Engineering",
-"JGZG. Journal of Geophysics Zeitschrift Geophysik",
-"JGeEd Journal of Geoscience Education",
-"JGlac Journal of Glaciology",
-"JGO.. Journal of Global Optimization",
-"JGrPh Journal of Gravitational Physics",
-"JGHyd Journal of Groundwater Hydrology",
-"JGuC. Journal of Guidance Control",
-"JGCD. Journal of Guidance Control Dynamics",
-"JHeu. Journal of Heuristics",
-"JHENP Journal of High Energy and Nuclear Physics",
-"JHEP. Journal of High Energy Physics",
-"JHEPC Journal of High Energy Physics Conference Proceedings",
-"JHSN. Journal of High Speed Networks",
-"JHTS. Journal of High Temperature Society",
-"JHyd. Journal of Hydrology",
-"JHyMe Journal of Hydrometeorology",
-"JHyn. Journal of Hydronautics",
-"JIST. Journal of Imaging Science and Technology",
-"JIPM. Journal of Information Processing and Management",
-"JInfo Journal of Informetrics",
-"JIMW. Journal of Infrared and Millimeter Waves",
-"JInst Journal of Instrumentation",
-"JIntS Journal of Integer Sequences",
-"JIEq. Journal of Integral Equations",
-"JIRS. Journal of Intelligent and Robotic Systems",
-"JIMSS Journal of Intelligent Material Systems and Structures",
-"JIEx. Journal of Ion Exchange",
-"JJAEE Journal of Japan Association for Earthquake Engineering",
-"JJAHS Journal of Japanese Association of Hydrological Sciences",
-"JJSEE Journal of Japanese Society for Engineering Education",
-"JSCSE Journal of Japan Society of Civil Engineers, Ser. A1 (Structural Engineering &amp",
-"JSCAM Journal of Japan Society of Civil Engineers, Ser. A2 (Applied Mechanics (AM))",
-"JSCHE Journal of Japan Society of Civil Engineers, Ser. B1 (Hydraulic Engineering)",
-"JSCGE Journal of Japan Society of Civil Engineers, Ser. C (Geosphere Engineering)",
-"JSCAI Journal of Japan Society of Civil Engineers, Ser. D1 (Architecture of Infrastructure and Environment)",
-"JSCHS Journal of Japan Society of Civil Engineers, Ser. D2 (Historical Studies in Civil Engineering)",
-"JSCIP Journal of Japan Society of Civil Engineers, Ser. D3 (Infrastructure Planning and Management)",
-"JSCPE Journal of Japan Society of Civil Engineers, Ser. E1 (Pavement Engineering)",
-"JSCMC Journal of Japan Society of Civil Engineers, Ser. E2 (Materials and Concrete Structures)",
-"JSCTE Journal of Japan Society of Civil Engineers, Ser. F1 (Tunnel Engineering)",
-"JSCUS Journal of Japan Society of Civil Engineers, Ser. F2 (Underground Space Research)",
-"JSCCE Journal of Japan Society of Civil Engineers, Ser. F3 (Civil Engineering Informatics)",
-"JSCCM Journal of Japan Society of Civil Engineers, Ser. F4 (Construction and Management)",
-"JSCPP Journal of Japan Society of Civil Engineers, Ser. F5 (Professional Practices in Civil Engineering)",
-"JSCSP Journal of Japan Society of Civil Engineers, Ser. F6 (Safety Problem)",
-"JSCER Journal of Japan Society of Civil Engineers, Ser. G (Environmental Research)",
-"JKTR. Journal of Knot Theory and its Ramifications",
-"JKAS. Journal of Korean Astronomical Society",
-"JKASS Journal of Korean Astronomical Society Supplement",
-"JKPS. Journal of Korean Physical Society",
-"JLCMe Journal of Laboratory and Clinical Medicine",
-"JLasA Journal of Laser Applications",
-"JLCM. Journal of Less Common Metals",
-"JLVEn Journal of Light &amp",
-"JLwT. Journal of Lightwave Technology",
-"JLTP. Journal of Low Temperature Physics",
-"JLum. Journal of Luminescence",
-"JMSB. Journal of Macromolecular Science, Part B: Physics",
-"JMSC. Journal of Macromolecular Science, Part C: Reviews in Macromolecular Chemistry and Physics",
-"JMagR Journal of Magnetic Resonance",
-"JMMM. Journal of Magnetism and Magnetic Materials",
-"JMR.. Journal of Marine Research",
-"JMSA. Journal of Marine Science and Application",
-"JMS.. Journal of Marine Systems",
-"JMarA Journal of Maritime Archaeology",
-"JMES. Journal of Materials and Energy Systems",
-"JMCh. Journal of Materials Chemistry",
-"JMEP. Journal of Materials Engineering and Performance",
-"JMPMS Journal of Materials Processing and Manufacturing Science",
-"JMatR Journal of Materials Research",
-"JMatS Journal of Materials Science",
-"JMSME Journal of Materials Science and Materials Electronics",
-"JMSL. Journal of Materials Science Letters",
-"JMSMM Journal of Materials Science: Materials in Medicine",
-"JMSP. Journal of Materials Synthesis and Processing",
-"JMAA. Journal of Mathematical Analysis and Applications",
-"JMCS. Journal of Mathematical and Computational Science",
-"JMPS. Journal of Mathematical and Physical Sciences",
-"JMaCh Journal of Mathematical Chemistry",
-"JMFM. Journal of Mathematical Fluid Mechanics",
-"JMIV. Journal of Mathematical Imaging and Vision",
-"JMP.. Journal of Mathematical Physics",
-"JMPsy Journal of Mathematical Psychology",
-"JMaSc Journal of Mathematical Sciences",
-"JMSo. Journal of Mathematical Sociology",
-"JMaMe Journal of Mathematics and Mechanics",
-"JMaPh Journal of Mathematics and Physics",
-"JMecE Journal of Mechanical and Engineering Science",
-"JMBM. Journal of Mechanical Behavior and Materials",
-"JMSTL Journal of Mechanical Systems for Transportation and Logistics",
-"JMPSo Journal of Mechanics Physics of Solids",
-"JMNB. Journal of Medecine Nucleaire et Biophysique",
-"JMet. Journal of Metals",
-"JMemS Journal of Microelectromechanical Systems",
-"JMiMi Journal of Micromechanics and Microengineering",
-"JMic. Journal of Microscopy",
-"JMPeS Journal of Mineralogical and Petrological Sciences",
-"JMOp. Journal of Modern Optics",
-"JMPh. Journal of Modern Physics",
-"JMBio Journal of Molecular Biology",
-"JMoEl Journal of Molecular Electronics",
-"JMolE Journal of Molecular Evolution",
-"JMoSp Journal of Molecular Spectroscopy",
-"JMoSt Journal of Molecular Structure",
-"JMA.. Journal of Multivariate Analysis",
-"JNUNS Journal of Nanjing University (Natural Sciences)",
-"JNR.. Journal of Nanoparticle Research",
-"JNano Journal of Nanophotonics",
-"JNav. Journal of Navigation",
-"JNIS. Journal of Near Infrared Spectroscopy",
-"JNEng Journal of Neural Engineering",
-"JNeur Journal of Neurochemistry",
-"JNO.. Journal of Neuro-Oncology",
-"JNCS. Journal of Non Crystalline Solids",
-"JNE.. Journal of Nondestructive Evaluation",
-"JNET. Journal of Non Equilibrium Thermodynamics",
-"JNMP. Journal of Nonlinear Mathematical Physics",
-"JNLM. Journal of Non Linear Mechanics",
-"JNOPM Journal of Nonlinear Optical Physics and Materials",
-"JNS.. Journal of NonLinear Science",
-"JNuE. Journal of Nuclear Energy",
-"JNuM. Journal of Nuclear Materials",
-"JNT.. Journal of Number Theory",
-"JOUC. Journal of Ocean University of China",
-"JOC.. Journal of Optical Communications",
-"JON.. Journal of Optical Networking",
-"JOptT Journal of Optical Technology",
-"JOpt. Journal of Optics",
-"JOptA Journal of Optics A: Pure and Applied Optics",
-"JOptB Journal of Optics B: Quantum and Semiclassical Optics",
-"JOTA. Journal of Optimization Theory Applications",
-"JOMS. Journal of Oral and Maxillofacial Surgery",
-"JOR.. Journal of Oral Rehabilitation",
-"JPal. Journal of Paleontology",
-"JPDC. Journal of Parallel and Distributed Computing",
-"JPet. Journal of Petrology",
-"JPhPh Journal of Pharmacy and Pharmacology",
-"JPCRD Journal of Physical and Chemical Reference Data",
-"JPCC. Journal of Physical and Colloid Chemistry",
-"JPhCh Journal of Physical Chemistry",
-"JPCA. Journal of Physical Chemistry A",
-"JPCB. Journal of Physical Chemistry B",
-"JPO.. Journal of Physical Oceanography",
-"JPhSt Journal of Physical Studies",
-"JPhA. Journal of Physics A Mathematical General",
-"JPCS. Journal of Physics and Chemistry of Solids",
-"JPhB. Journal of Physics B Atomic Molecular Physics",
-"JPCM. Journal of Physics Condensed Matter",
-"JPhCS Journal of Physics Conference Series",
-"JPhC. Journal of Physics C Solid State Physics",
-"JPhD. Journal of Physics D Applied Physics",
-"JPhE. Journal of Physics E Scientific Instruments",
-"JPhF. Journal of Physics F Metal Physics",
-"JPhG. Journal of Physics G Nuclear Physics",
-"JPhGS Journal of Physics G Nuclear Physics Supplement",
-"JPE.. Journal of Physics of the Earth",
-"JPTEO Journal of Physics Teacher Education Online",
-"JPhsg Journal of Physiology",
-"JPFR. Journal of Plasma and Fusion Research",
-"JPlPh Journal of Plasma Physics",
-"JPoSc Journal of Polymer Science",
-"JPoSA Journal of Polymer Science A Polymer Chemistry",
-"JPoSB Journal of Polymer Science B Polymer Physics",
-"JPoSL Journal of Polymer Science: Polymer Letters Edition",
-"JPMat Journal of Porous Materials",
-"JPES. Journal of Power and Energy Systems",
-"JPS.. Journal of Power Sources",
-"JPAS. Journal of Practical Applications in Space",
-"JPP.. Journal of Propulsion and Power",
-"JPT.. Journal of Propulsion Technology",
-"JPrCh Journal of Protein Chemistry",
-"JPApS Journal of Pure Applied Sciences",
-"JQT.. Journal of Quality Technology",
-"JQSRT Journal of Quantitative Spectroscopy and Radiative Transfer",
-"JQS.. Journal of Quaternary Science",
-"JRNC. Journal of Radioanalytical and Nuclear Chemistry",
-"JRAC. Journal of Radioanalytical Chemistry",
-"JRP.. Journal of Radiological Protection",
-"JRSp. Journal of Raman Spectroscopy",
-"JRPC. Journal of Reinforced Plastics and Composites",
-"JRes. Journal of Research",
-"JRPhy Journal of Research in Physics",
-"JRScT Journal of Research in Science Teaching",
-"JRIST Journal of Research Institute of Science and Technology, College of Science and Technology, Nihon University",
-"JRNBS Journal of Research of the National Bureau of Standards",
-"JRNBA Journal of Research of the National Bureau of Standards A Physica and Chemsitry",
-"JRNBB Journal of Research of the National Bureau of Standards B Mathematical Sciences",
-"JRTEd Journal of Research on Technology in Education",
-"JResB Journal of Research Section B Mathematical Sciences B",
-"JRheo Journal of Rheology",
-"JRoS. Journal of Robotic Systems",
-"JRLR. Journal of Russian Laser Research",
-"JSEdT Journal of Science Education and Technology",
-"JSTEd Journal of Science Teacher Education",
-"JSCom Journal of Scientific Computing",
-"JScI. Journal of Scientific Instruments",
-"JSIPI Journal of Scientific Instruments and of Physics in Industry",
-"JSR.. Journal of Sea Research",
-"JSedR Journal of Sedimentary Research",
-"JSeis Journal of Seismology",
-"JSemi Journal of Semiconductors",
-"JSGeo Journal of Series Geophysics",
-"JShR. Journal of Ship Research",
-"JSGST Journal of Sol-Gel Science and Technology",
-"JSMME Journal of Solid Mechanics and Materials Engineering",
-"JSSCh Journal of Solid State Chemistry France",
-"JSCh. Journal of Solution Chemistry",
-"JSV.. Journal of Sound Vibration",
-"JSAES Journal of South American Earth Sciences",
-"JSLR. Journal of Soviet Laser Research",
-"JSAR. Journal of Space Astronomy Research",
-"JSpRo Journal of Spacecraft and Rockets",
-"JSpT. Journal of Spacecraft Technology",
-"JSpEn Journal of Space Engineering",
-"JSWSC Journal of Space Weather and Space Climate",
-"JSCS. Journal of Statistical Computation and Simulation",
-"JSMTE Journal of Statistical Mechanics: Theory and Experiment",
-"JSP.. Journal of Statistical Physics",
-"JStA. Journal of Strain Analysis and Engineering Design",
-"JSG.. Journal of Structural Geology",
-"JSM.. Journal of Structural Mechanics",
-"JSup. Journal of Superconductivity",
-"JSymC Journal of Symbolic Computation",
-"JSDD. Journal of System Design and Dynamics",
-"JTePh Journal of Technical Physics",
-"JTech Journal of Technology",
-"JTeEv Journal of Testing Evaluation",
-"JASJa Journal of the Acoustical Society of Japan",
-"JAVSO Journal of the American Association of Variable Star Observers (JAAVSO)",
-"JAChS Journal of the American Chemical Society",
-"JAMS. Journal of the American Mathematical Society",
-"JASIS Journal of the American Society for Information Science and Technology",
-"JASCE Journal of the American Society of Civil Engineers",
-"JAWRA Journal of the American Water Resources Association",
-"JALPO Journal of the Association of Lunar and Planetary Observers, the Strolling Astronomer",
-"JAnSc Journal of the Astronautical Sciences",
-"JASEg Journal of the Astronomical Society of Egypt",
-"JASSA Journal of the Astronomical Society of Southern Africa",
-"JASV. Journal of the Astronomical Society of Victoria Melbourne",
-"JASWA Journal of the Astronomical Society of Western Australia",
-"JBAA. Journal of the British Astronomical Association",
-"JBAS. Journal of the British Astronomical Society",
-"JBIS. Journal of the British Interplanetary Society",
-"JCSS. Journal of the Chinese Silicate Society",
-"JElS. Journal of the Electrochemical Society",
-"FrInJ Journal of The Franklin Institute",
-"JGSJ. Journal of the Geodetic Society of Japan",
-"JIISB Journal of the Indian Institute of Science Section B Physical and Chemical Series",
-"JIEEJ Journal of The Institute of Electrical Engineers of Japan",
-"JIMIA Journal of the Institute of Mathematics and Its Applications",
-"JIPNT Journal of the Institute of Positioning, Navigation and Timing of Japan",
-"JIETE Journal of the Institution of Electronics and Telecommunication Engineers",
-"JJSMS Journal of the Japan Society for Marine Surveys and Technology",
-"JLMS. Journal of the London Mathematical Society",
-"JORS. Journal of the Operational Research Society",
-"JOSA. Journal of the Optical Society of America (1917-1983)",
-"JOSAA Journal of the Optical Society of America A",
-"JOSAB Journal of the Optical Society of America B Optical Physics",
-"JTAM. Journal of Theoretical and Applied Mechanics",
-"JTBio Journal of Theoretical Biology",
-"JPSJ. Journal of the Physical Society of Japan",
-"JPSJS Journal of the Physical Society of Japan Supplement",
-"JTAC. Journal of Thermal Analysis and Calorimetry",
-"JThSc Journal of Thermal Science",
-"JJTST Journal of Thermal Science and Technology",
-"JTST. Journal of Thermal Spray Technology",
-"JThSt Journal of Thermal Stresses",
-"JTh.. Journal of Thermodynamics",
-"JTHT. Journal of Thermophysics and Heat Transfer",
-"JThCM Journal of Thermoplastic Composite Materials",
-"JRASA Journal of the Royal Aeronautical Society of London",
-"JRASC Journal of the Royal Astronomical Society of Canada",
-"JRASN Journal of the Royal Astronomical Society of New Zealand",
-"JRCSE Journal of the Royal College of Surgeons of Edinburgh",
-"JRSSD Journal of the Royal Statistical Society: Series D (The Statistician)",
-"JSRP. Journal of the Society for Radiological Protection",
-"JSPST Journal of The Society of Photographic Science and Technology of Japan",
-"JSARA Journal of the Southeastern Association for Research in Astronomy",
-"JSD.. Journal of the Structural Division, American Society of Civil Engineers",
-"JVSJ Journal of the Vacuum Society of Japan",
-"JWasA Journal of the Washington Academy of Sciences",
-"JTF.. Journal of Time and Frequency",
-"JTurb Journal of Turbulence",
-"JVST. Journal of Vacuum Science Technology",
-"JVSTA Journal of Vacuum Science Technology A: Vacuum Surfaces and Films",
-"JVSTB Journal of Vacuum Science Technology B: Microelectronics and Nanometer Structures",
-"JVC.. Journal of Vibration and Control",
-"JVE.. Journal of Vibration Engineering",
-"JVCIR Journal of Visual Communication and Image Representation",
-"JVGR. Journal of Volcanology and Geothermal Research",
-"JWMSE Journal of Women and Minorities in Science and Engineering",
-"JXST. Journal of X-Ray Science and Technology",
-"RpScT JPRS Report Science Technology USSR Space",
-"JSMB. JSME Bulletin",
-"JSMEJ JSME International Journal",
-"JSMEA JSME International Journal Series A",
-"JSMEB JSME International Journal Series B",
-"JSMEC JSME International Journal Series C",
-"JSMET JSME Transactions",
-"KKR.. Kagaku Kogaku Ronbunshu",
-"MmKMO Kakioka Magnetic Observatory Memoirs",
-"KEIJ. Kansei Engineering International Journal",
-"GroR. Kapteyn Astronomical Laboratory Groningen Reports",
-"KIzKU Kazan Izdatel Kazanskogo Universiteta",
-"MeeRe Kenneth Mees Observatory Reprints",
-"KernR Kernforschungsanlage Rept Res Results Solid State Nucl Phys",
-"KexT. Kexue Tongbao",
-"Khago Khagol",
-"KharI Kharkov Izdanie IRE AN USSR",
-"KTTM. Khimiia i Tekhnologiia Topliv i Masel",
-"KhPl. Khimiia Plazmy",
-"KVnT. Kibernetika i Vychislitel naia Tekhnika",
-"KiInF Kiev Institut Fiziki AN USSR",
-"KiInM Kiev Institut Matematiki AN USSR",
-"KIPME Kiev Institut Problem Modelirovaniia Energetike AN USSR",
-"KIzIM Kiev Izdanie Instituta Matematiki AN USSR",
-"KiIND Kiev Izdatel Naukova Dumka",
-"KiIzT Kiev Izdatel Tekhnika",
-"KIzVS Kiev Izdatel Vishcha Shkola",
-"KiePr Kievskij Ordena Lenina Gosudarstvennyj Universitet Shevchenko Astronomicheskaya Observatoriya - Preprint",
-"KPCB. Kinematics and Physics of Celestial Bodies",
-"KPCBS Kinematics and Physics of Celestial Bodies, Supplement",
-"KFNT. Kinematika i Fizika Nebesnykh Tel",
-"KFNTS Kinematika i Fizika Nebesnykh Tel Supplement",
-"KiCat Kinetics and Catalysis",
-"KIzS. Kishinev Izdatel Shtiintsa",
-"KPNON Kitt Peak National Observatory Newsletter",
-"KVeBB Kleine Veroeffentlichungen der Universitaetssternwarte zu Berlin Babelsberg",
-"KlBer Kleinheubacher Berichte",
-"KodOB Kodaikanal Observatory Bulletins",
-"KodRe Kodaikanal Observatory Reprints",
-"KomTs Kometnyj Tsirkulyar",
-"KomMe Komety i Meteory",
-"KNAB. Koninklijke Nederlandse Akademie van Weteschappen Proceedings Series B Physical Sciences",
-"KIMMJ Korean Institute of Metals and Materials Journal",
-"KNT.. Kosmicheskaia Nauka i Tekhnika",
-"KosIs Kosmicheskie Issledovaniia",
-"KosIU Kosmicheskie Issledovaniia Ukraine",
-"KosLu Kosmicheskie Luchi",
-"KosNT Kosmichna Nauka i Tekhnologiya",
-"Kozmo Kozmos",
-"KT... K-Theory",
-"KSVH. Kungl. Svenska Vetenskapsakademiens Handlingar",
-"KvanE Kvantovaia Elektronika Moscow",
-"Kyb.. Kybernetes",
-"KyoMe Kyoto University Faculty Engineering Memoirs",
-"KyITB Kyushu Institute Technology Bulletin",
-"KUFEM Kyushu University Faculty Engineering Memoirs",
-"KyUAM Kyushu University Research Institute Applied Mechanics Reports",
-"KyUSR Kyushu University Research Institute Industrial Science Reports",
-"KyUTR Kyushu University Technology Reports",
-"LChip Lab on a Chip",
-"AerAs L'Aeronautique et L'Astronautique",
-"AerMS L'Aerotecnica Missili e Spazio",
-"LHBl. La Houille Blanche",
-"Meteo La Meteorologie",
-"LDD.. Land Degradation &amp",
-"LanB. Landolt Börnstein",
-"Langm Langmuir",
-"LaJ.. Lapidary Journal",
-"Rech. La Recherche",
-"ReAer La Recherche Aerospatiale",
-"ReAeB La Recherche Aerospatiale Bimonthly Bulletin ESA",
-"ReSp. La Recherche Spatiale",
-"LPB.. Laser and Particle Beams",
-"LaEO. Laser Elektro Optik",
-"LaFoc Laser Focus",
-"LasJ. Laser Journal",
-"LaPhy Laser Physics",
-"LaPhL Laser Physics Letters",
-"LaPhR Laser Physics Review",
-"Astrf L'Astrofilo Bolletino Trimestral del Gruppo Astrofili Villaggio Sereno Brescia",
-"LAstr L'Astronomie",
-"LTerm La Termotecnica",
-"LatJP Latvian Journal of Physics and Technical Sciences",
-"LatME Latviiskii Matematicheskii Ezhegodnik",
-"LawOB Laws Observatory Bulletin, University of Missouri",
-"LBLRR LBL Research Review",
-"ASPL. Leaflet of the Astronomical Society of the Pacific",
-"ASPLS Leaflet of the Astronomical Society of the Pacific (Supplement)",
-"LePub Learned Publishing",
-"LERec L'Echo des Recherches",
-"Ciel. Le Ciel",
-"LNEA. Lecture Notes and Essays in Astrophysics",
-"LNSP. Lecture Notes and Supplements in Physics",
-"LNCS. Lecture Notes in Computer Science",
-"LNES. Lecture Notes in Earth Sciences, Berlin Springer Verlag",
-"LNEn. Lecture Notes in Engineering, Berlin Springer Verlag",
-"LNM.. Lecture Notes in Mathematics, Berlin Springer Verlag",
-"LNP.. Lecture Notes in Physics, Berlin Springer Verlag",
-"LNPAM Lecture Notes in Pure and Applied Mathematics",
-"LeBAN Leningrad Biblioteka Akademii Nauk SSSR",
-"LeEne Leningrad Energoizdat",
-"LeGid Leningrad Gidrometeoizdat",
-"PrAtO Leningrad Gidrometeoizdat Sovremennye Problemy Atmosfernoi Optiki",
-"LeIzE Leningrad Izdatel Energiia",
-"LeIzG Leningrad Izdatel Gidrometeoizdat",
-"LeIzK Leningrad Izdatel Khimiia",
-"LeIzU Leningrad Izdatel Leningradskogo Universiteta",
-"LeIzM Leningrad Izdatel Mashinostroenie",
-"LeIzN Leningrad Izdatel Nauka",
-"LIzNe Leningrad Izdatel Nedra",
-"IzLen Leningrad, Izdatel'stvo Nauka",
-"LeIzS Leningrad Izdatel Sudostroenie",
-"LeLen Leningrad Lenizdat",
-"LGUPM Leningradskii Gosudarstvennyi Universitet Problemy Matematicheskoi Fiziki",
-"VeLen Leningradskii Universitet Vestnik Matematika Mekhanika Astronomiia",
-"LeRad Le Radium",
-"Leo.. Leonardo",
-"LFTR. LEST Foundation, Technical Report",
-"LHMT. Letters Heat Mass Transfer",
-"LAES. Letters in Applied and Engineering Sciences",
-"LMaPh Letters in Mathematical Physics",
-"LicOB Lick Observatory Bulletin",
-"LFR.. Lietuvos Fizikos Rinkinys",
-"LDA.. Lifetime Data Analysis",
-"LLabJ Lincoln Laboratory Journal",
-"LiCr. Liquid Crystals",
-"Litho Lithos",
-"LitJP Lithuanian Journal of Physics and Technical Sciences",
-"LRR.. Living Reviews in Relativity",
-"LRSP. Living Reviews in Solar Physics",
-"LockH Lockheed Horizons",
-"LOEle L'Onde Electrique",
-"LowOB Lowell Observatory Bulletin",
-"LTP.. Low Temperature Physics",
-"LPIBu LPI Bulletin",
-"LPICo LPI Contributions",
-"LubEn Lubrication Engineering",
-"LR... Luft und Raumfahrt",
-"LuRaQ Luft und Raumfahrt Quarter",
-"LPSC. Lunar and Planetary Science Conference Proceedings",
-"LCEC. Luxembourg Commission European Communities",
-"LIVS. Lvov Izdatel Vishcha Shkola",
-"LvoTs L'vovskij Ordena Lenina Gosudarstvennyj Universitet Tsirkulyar",
-"MaDes Machine Design",
-"MLear Machine Learning",
-"MmCP. Macromolecular Chemistry and Physics",
-"MaMol Macromolecules",
-"MadOO Madras Observatory Astronomical Observations",
-"MadOb Madras Observatory Observations",
-"MagFE Magnetic Fusion Energy",
-"MRMed Magnetic Resonance in Medicine",
-"MRMPB Magnetic Resonance Materials in Physics Biology and Medicine",
-"MRRev Magnetic Resonance Review",
-"MHD.. Magnetohydrodynamics",
-"MagGi Magnitnaia Gidrodinamika",
-"MagIs Magnitosfernye Issledovaniia",
-"MTACI Magyar Tudomanyos Akademia Csillagvizsgalo Intezetenek koezlemenyei",
-"MAWMN Mainz Akademie Wissenschaften Mathematisch Naturwissenschaftliche Klasse",
-"Lapa. Majalah LAPAN",
-"MWGBI Mannheim West Germany Bibliographisches Institut AG",
-"MaTeJ ManTech Journal",
-"MGeo. Manuscr. Geod.",
-"ManGe Manuscripta Geodaetica",
-"MarRv Marconi Review",
-"MarGe Marine Geodesy",
-"MarGR Marine Geophysical Research",
-"MarPG Marine Petroleum Geology",
-"Mars. Mars",
-"Mashi Mashinostroenie",
-"MsT.. Masters Thesis",
-"MaFiz Matematicheskaia Fizika",
-"MFiNM Matematicheskaia Fizika i Nelineinaia Mekhanika",
-"MatIs Matematicheskie Issledovaniia",
-"MMFMP Matematicheskie Metody i Fiziko Mekhanicheskie Polia",
-"MISTr Matematicheskii Institut imeni Steklova Trudy",
-"MMTET Matematicheskoe Modelirovanie i Teoriia Elektricheskikh Tsepei",
-"MatVe Matematichki Vesnik",
-"Mater Materialpruefung",
-"Mate. Materials",
-"MMP.. Materials and Manufacturing Processes",
-"MCP.. Materials Chemistry and Physics",
-"MaHT. Materials at High Temperatures",
-"MatEv Materials Evaluation",
-"MatL. Materials Letters",
-"MaRBu Materials Research Bulletin",
-"MRSSP Materials Research Society Symposia Proceedings",
-"MSEng Materials Science and Engineering",
-"MSEnA Materials Science and Engineering A",
-"MSEnB Materials Science and Engineering B",
-"MSEnC Materials Science and Engineering C",
-"MSEnR Materials Science and Engineering R Reports",
-"MSTec Materials Science and Technology",
-"MSF.. Materials Science Forum",
-"MatSP Materials Science Poland",
-"MatST Materials Science Technology",
-"MatTr Materials Transactions JIM",
-"MatTe Materiaux et Techniques",
-"MComM Mathematical and Computer Modelling",
-"MEI.. Mathematical Engineering Industry",
-"MaFi. Mathematical Finance",
-"MatG. Mathematical Geology",
-"MMAS. Mathematical Methods in the Applied Sciences",
-"MatM. Mathematical Modelling",
-"MMNA. Mathematical Modelling Numerical Analysis",
-"M3AS. Mathematical Models and Methods in Applied Sciences",
-"MPAG. Mathematical Physics, Analysis and Geometry",
-"MPAM. Mathematical Physics and Applied Mathematics",
-"MaPEJ Mathematical Physics Electronic Journal",
-"MaPhS Mathematical Physics Studies",
-"MaPr. Mathematical Proceedings",
-"MPCPS Mathematical Proceedings of the Cambridge Philosophical Society",
-"MatPr Mathematical Programming",
-"MatRv Mathematical Reviews",
-"MMS.. Mathematics and Mechanics of Solids",
-"MEdRJ Mathematics Education Research Journal",
-"MaCom Mathematics of Computation",
-"Mat.. Mathematika",
-"MatAn Mathematische Annalen",
-"MatNa Mathematische Nachrichten",
-"MatZe Mathematische Zeitschrift",
-"MitAe Max Planck Institut Aeronomie Mitteilungen",
-"MPARp Max Planck Institut fur Astrophysik Report",
-"Meas. Measurements",
-"MeScT Measurement Science and Technology",
-"MeScR Measurement Science Review",
-"Mecc. Meccanica",
-"MecEn Mechanical Engineering",
-"MSSP. Mechanical Systems and Signal Processing",
-"MPDS. Mechanics and Physics of Discrete Systems",
-"MCMS. Mechanics of Composite Materials",
-"MSM.. Mechanics of Structures and Machines",
-"MTDM. Mechanics of Time-Dependent Materials",
-"MeReC Mechanics Research Communications",
-"MeTeS Mechanika Teoretyczna i Stosowana",
-"MeMaT Mechanism and Machine Theory",
-"MeUpp Meddelanden fran Astronomiska Observatorium Uppsala",
-"MeLu1 Meddelanden fran Lunds Astronomiska Observatorium Serie I",
-"MeLu2 Meddelanden fran Lunds Astronomiska Observatorium Serie II",
-"MeAar Meddelser fra Ole Romer Observatoriet Aarhus",
-"MeGen Mededelingen Universiteit te Gent Sterrenkundig Instituut",
-"MeLeu Mededelingen van het Astronomisch Instituut van de Katholieke Universiteit Leuven",
-"MedPh Medical Physics",
-"MekGS Mekhanika Giroskopicheskikh Sistem",
-"MekKM Mekhanika Kompozitnykh Materialov",
-"MekP. Mekhanika Polimerov",
-"MekTT Mekhanika Tverdogo Tela",
-"MelAR Melbourne Observatory Annual Report",
-"MelOO Melbourne Observatory Observations",
-"MmEbr Memoires de l'Observatoire de l'Ebre",
-"MmARB Memoires of the Academie Royale de Belgique",
-"MmMtS Memoires of the Mount Stromlo Observervatory",
-"MSRSL Memoires of the Societe Royale des Sciences de Liege",
-"MeSRM Memoires Scientifiques de la Revue de Metallurgie",
-"MmKyo Memoirs Faculty of Sciences University of Kyoto",
-"MmASI Memoirs of the Astronomical Society of India",
-"MmBAA Memoirs of the British Astronomical Association",
-"MmRAS Memoirs of the Royal Astronomical Society",
-"MmSAI Memorie della Societa Astronomica Italiana",
-"MSAIS Memorie della Societa Astronomica Italiana Supplementi",
-"MmSSI Memorie della Societa Degli Spettroscopisti Italiani",
-"MmSS. Memorie della Societa Degli Spettroscopisti Italiani, serie 2",
-"MmSGI Memorie della Societa Geologica Italiana",
-"MmNap Memorie del R. Osservatorio di Capodimonte in Napoli",
-"MeCom Mendeleev Communications",
-"Mercu Mercury",
-"MeAut Meres es Automatika",
-"MeRAu Mesures Regulation Automatisme",
-"Metal Metallofizika",
-"MTObM Metallovedenie i Termicheskaia Obrabotka Metallov",
-"MMTA. Metallurgical and Materials Transactions A",
-"MMTB. Metallurgical and Materials Transactions B",
-"MTA.. Metallurgical Transactions A",
-"MTB.. Metallurgical Transactions B",
-"MTPMM Metallurgical Transactions Physical Metallurgy Materials Science",
-"MetaM Metamaterials",
-"MTRMA Meteor Forschungsergebnisse Reihe B Meteorologie und Aeronomie",
-"Metit Meteorites",
-"Met.. Meteorite - The International Quarterly of Meteorites and Meteorite Science",
-"Metic Meteoritics",
-"Metik Meteoritika",
-"MetRR Meteornoe Rasprostranenie Radiovoln",
-"MetIs Meteornye Issledovaniia",
-"MeApp Meteorological Applications",
-"MetMa Meteorological Magazine",
-"MetMo Meteorological Monographs",
-"MSCTN Meteorological Satellite Center Technical Note",
-"MeSJJ Meteorological Society of Japan Journal",
-"MetZp Meteorologicke Zpravy",
-"MeGid Meteorologiia i Gidrologiia",
-"MetRu Meteorologische Rundschau",
-"MetZe Meteorologische Zeitschrift",
-"MAP.. Meteorology and Atmospheric Physics",
-"MetAP Meteorology Atmospheric Physics",
-"MetHy Meteorology Hydrology JPRS",
-"MeRR. Meteor. rasprostr. radiovoln, Kazan",
-"MVMP. Methoden und Verfahren der Mathematischen Physik",
-"MCME. Methods: A Companion to Methods in Enzymology",
-"MApAn Methods and Applications of Analysis",
-"MComP Methods in Computational Physics",
-"MGG.. Methods in Geochemistry and Geophysics",
-"MSB.. Methods in Subnuclear Physics",
-"MExP. Methods of Experimental Physics",
-"MetVy Metody Vychislenii",
-"Metro Metrologia",
-"MicEc Microbial Ecology",
-"MPFD. Microdevices: Physics and Fabrication Technologies",
-"MiEng Microelectronic Engineering",
-"MiI.. Microelectronics International",
-"MiRe. Microelectronics Reliability",
-"MicgQ Microgravity Quarterly",
-"MiST. Microgravity Science and Technology",
-"MTEng Microscale Thermophysical Engineering",
-"MiMic Microscopy and Microanalysis",
-"MiOTL Microwave and Optical Technology Letters",
-"MiJo. Microwave Journal",
-"MicWa Microwaves",
-"AcMik Mikrochimica Acta",
-"Mikro Mikroelektronika",
-"MikSb Mikroelektronika Sbornik",
-"MAIMT Milan Associazione Italiana di Meccanica Teorica ed Applicata",
-"MSMFR Milano Seminario Matematico e Fisico Rendiconti",
-"MiElC Military Electronics Countermeasures",
-"MiLa. Mind and Language",
-"MinDe Mineralium Deposita",
-"Miner Mineralogia",
-"MinM. Mineralogical Magazine",
-"MinPe Mineralogy and Petrology",
-"MinPh Mineral Physics",
-"MWE.. Mine Water and The Environment",
-"MPBu. Minor Planet Bulletin",
-"MPC.. Minor Planet Circulars",
-"MPEC. Minor Planet Electronic Circulars",
-"IzMin Minsk Izdatel BGU",
-"MiINT Minsk Izdatel Nauka i Tekhnika",
-"MisSp Missiles Spacecraft",
-"MAPSE Mission Analysis Program Solar Electric Propulsion MAPSEP",
-"MHITR Mitsubishi Heavy Industries Technical Review",
-"MitAG Mitteilungen der Astronomischen Gesellschaft Hamburg",
-"MiBon Mitteilungen der Astronomischen Institute der Universitaet Bonn",
-"MiBas Mitteilungen der Astronomisch-Meteorologischen Anstalt der Universitaet Basel Astronomische Reihe",
-"MiHar Mitteilungen der Bruno-H.-Buergel-Sternwarte Hartha DDR",
-"MiHam Mitteilungen der Hamburger Sternwarte in Bergedorf",
-"MiKon Mitteilungen der Konkoly Sternwarte Budapest-Szabadsaghegy",
-"MiPul Mitteilungen der Nikolai-Hauptsternwarte zu Pulkowo",
-"MiBud Mitteilungen der Sternwarte der Ungarischen Akademie der Wissenschaften Budapest",
-"MiInn Mitteilungen der Sternwarte Innsbruck",
-"MiMun Mitteilungen der Sternwarte Munchen",
-"MiSon Mitteilungen der Sternwarte zu Sonneberg",
-"MiGra Mitteilungen der Universitaets-Sternwarte Graz",
-"MiWie Mitteilungen der Universitaets-Sternwarte Wien",
-"MiJen Mitteilungen der Universitaets-Sternwarte zu Jena",
-"MiTue Mitteilungen des Astronomischen Instituts der Universitaet Tuebingen",
-"MiMue Mitteilungen des Astronomischen Instituts des Universitaet Munster",
-"MiPot Mitteilungen des Astrophysikalischen Observatoriums Potsdam",
-"MiGIR Mitteilungen Geod. Institut Rheinischen Friedrich-Wilhelms-Universitaets. Bonn",
-"MSMSE Modelling Simul. Mater. Sci. Eng.",
-"MAG.. Modern Approaches in Geophysics",
-"ModGe Modern Geology",
-"ModIn Modern Instrumentation",
-"MIMPE Modern Instrumentation and Measurements in Physics and Engineering",
-"ModPh Modern Physics",
-"MPLA. Modern Physics Letters A",
-"MPLB. Modern Physics Letters B",
-"MJPS. Moldavian Journal of the Physical Sciences",
-"MBB.. Molecular Biology and Biophysics",
-"MBBB. Molecular Biology Biochemistry and Biophysics",
-"MCLC. Molecular Crystals and Liquid Crystals",
-"MGM.. Molecular Genetics and Metabolism",
-"MolPh Molecular Physics",
-"MoPhR Molecular Physics Reports",
-"MoSim Molecular Simulation",
-"MCBEH Monatliche Correspondenz zur Beforderung der Erd- und Himmels-kunde",
-"WisBB Monatsber. Deutsch. Akad Wissenschaftliche Berlin",
-"MEEP. Monographs on Environment, Earth and Planets",
-"MNSSJ Monthly notes of the Astronomical Society of South Africa",
-"MNSSA Monthly Notes of the Astronomical Society of South Africa",
-"MNRAS Monthly Notices of the Royal Astronomical Society",
-"MWRv. Monthly Weather Review",
-"Moon. Moon",
-"MorGI Morskie Gidrofizicheskie Issledovaniia",
-"MAtom Moscow Atomizdat",
-"MoEBA Moscow Energoatomizdat Biblioteka Automatike",
-"MEner Moscow Energoizdat",
-"MoGid Moscow Gidrometeoizdat",
-"MoIKI Moscow Institut Kosmicheskikh Issledovanii AN SSSR",
-"MoIPM Moscow Institut Prikladnoi Matematiki AN SSSR",
-"MoIzA Moscow Izdatel Atomizdat",
-"MoIzE Moscow Izdatel Energiia",
-"MIEBA Moscow Izdatel Energiia Biblioteka Avtomatike",
-"MIEBR Moscow Izdatel Energiia Biblioteka Radioelektronike",
-"MoIzK Moscow Izdatel Khimiia",
-"MIzLI Moscow Izdatel Legkaia Industriia",
-"MIzMa Moscow Izdatel Mashinostroenie",
-"MIzMe Moscow Izdatel Metallurgiia",
-"MoIzM Moscow Izdatel Moskovskogo Universiteta",
-"MIzMU Moscow Izdatel Moskovskogo Universiteta Pt",
-"MoIzN Moscow Izdatel Nauka",
-"MINFI Moscow Izdatel Nauka AN SSR Fizicheskii Institut Trudy",
-"MINCV Moscow Izdatel Nauka AN SSSR Chteniia imeni Vernadskogo",
-"MoINA Moscow Izdatel Nauka AN SSSR Fizicheskii Institut Trudy",
-"MINGI Moscow Izdatel Nauka AN SSSR Geologicheskoi Institut Trudy",
-"MINMI Moscow Izdatel Nauka AN SSSR Matematicheskii Institut Trudy",
-"MoINI Moscow Izdatel Nauka Issledovaniia Geomagnetizmu Aeronomii i Fizike Solntsa",
-"MINTF Moscow Izdatel Nauka Teoreticheskaia Fizika",
-"MINVS Moscow Izdatel Nauka Vychislitel naia Seismologiia",
-"MIzNe Moscow Izdatel Nedra",
-"MIzRS Moscow Izdatel Radio Sviaz",
-"MIzSR Moscow Izdatel Sovetskoe Radio",
-"MISRI Moscow Izdatel Sovetskoe Radio Ionosfernye Issledovaniia",
-"MoIzS Moscow Izdatel Sviaz",
-"MISST Moscow Izdatel Sviaz Statisticheskaia Teoriia sviazi",
-"MoIzT Moscow Izdatel Transport",
-"MoIzV Moscow Izdatel VINITI",
-"MIzVS Moscow Izdatel Vysshaia Shkola",
-"MoIzZ Moscow Izdatel Znanie",
-"MIZNZ Moscow Izdatel Znanie Novoe Zhizni Nauke Tekhnike Seriia Fizika",
-"MosIZ Moscow IZMIRAN",
-"MoMTN Moscow Mezhdunarodnyi Tsentr Nauchnoi i Tekhnicheskoi Informatsii",
-"MoMGK Moscow Mezhduvedomstvennyi Geofizicheskii Komitet",
-"MUPB. Moscow University Physics Bulletin",
-"MoVIN Moscow VINITI",
-"MosVo Moscow Voenizdat",
-"MosVI Moscow Voennoe Izdatel",
-"MoVNT Moscow Vychislitel nyi Tsentr AN SSSR",
-"MoVyS Moscow Vysshaia Shkola",
-"MoLLP Moshchnye lazery i lazernaia plazma",
-"MoEIT Moskovskii Energeticheskii Institut Trudy",
-"MGUMN Moskovskii Gosudarstvennyi Universitet Institut Mekhaniki Nauchnye Trudy",
-"MGIMO Moskovskii Gosudarstvennyi Universitet Institut Mekhaniki Otchet",
-"MVSFA Moskovskii Universitet Vestnik Seriia Fizika Astronomiia",
-"MUVSK Moskovskii Universitet Vestnik Seriia Khimiia",
-"MVSMM Moskovskii Universitet Vestnik Seriia Matematika Mekhanika",
-"MGTVM Moskovskij Gosudarstvennyj Tekhnicheskij Universitet Vestnik Seriya Mashinostroenie",
-"MGTVP Moskovskij Gosudarstvennyj Tekhnicheskij Universitet Vestnik Seriya Priborostroenie",
-"MotZe Motortechnische Zeitschrift",
-"MtSOM Mount Stromlo Observatory Mimeographs",
-"MtSRe Mount Stromlo Observatory Reprints",
-"MtWAR Mount Wilson and Palomar Observatory Annual Report",
-"MtWRe Mount Wilson and Palomar Observatory Reprints",
-"MWOAR Mount Wilson Observatory Annual Report",
-"MPERp MPE Report",
-"MRSBu MRS Bulletin",
-"MUSS. Muenchen Universitaets Schriften Serie",
-"MROVG Munich R Oldenbourg Verlag GmbH",
-"NISZ. Nabliudeniia Iskusstvennykh Sputnikov Zemli",
-"NINT. Nablyud. Iskusstvennykh Nebesnykh Tel",
-"NAZ.. Nachrichtenblatt der Astronomischen Zentralstelle Heidelberg",
-"NVS.. Nachrichtenblatt der Vereinigung der Sternfreunde",
-"NacEl Nachrichten Elektronik",
-"NGFAW Nachrichtentechnische Gesellschaft Fachtagung ueber Antennen",
-"NacZe Nachrichtentechnische Zeitschrift",
-"NOGB. Nachr. Olbers-Ges. Bremen",
-"NUFEM Nagoya University Faculty Engineering Memoirs",
-"NURIA Nagoya University Research Institute of Atmospherics Proceedings",
-"NUSEM Nagoya University School Engineering Memoirs",
-"NaAIJ Nanjing Aeronautical Institute Journal",
-"NUAAJ Nanjing University Aeronautics and Astronautics Journal",
-"NanoL Nano Letters",
-"Nanos Nanoscale",
-"NRL.. Nanoscale Research Letters",
-"Nanot Nanotechnology",
-"NIUNA Napoli Istituto Universitario Navale Annali",
-"NASCL NASA Circular Letter",
-"PDSS. NASA Planetary Data System",
-"NASRP NASA Reference Publication",
-"NASSP NASA Special Publication",
-"STIA. NASA STI/Recon Technical Report A",
-"STIN. NASA STI/Recon Technical Report N",
-"NASTM NASA Technical Memo",
-"NBSSP National Bureau of Standards Special Publication",
-"NBSTN National Bureau of Standards Technical Note",
-"NaGe. National Geographic",
-"NISTJ National Institute of Standards and Technology Journal of Research",
-"PolRe National Institute Polar Research Memoirs",
-"BAth. National Observatory of Athens Greece Bulletin of the Astronomical Institute",
-"NRAON National Radio Astronomy Observatory Newsletter",
-"NRAOR National Radio Astronomy Observatory Reprints",
-"NRAOW National Radio Astronomy Observatory Workshop",
-"NUDTJ National University Defense Technology Journal",
-"NHESS Natural Hazards and Earth System Sciences",
-"NatH. Natural History",
-"NatSc Natural Science",
-"Natur Nature",
-"NatBi Nature Biotechnology",
-"NatCh Nature Chemistry",
-"NatCC Nature Climate Change",
-"NatCo Nature Communications",
-"NatGe Nature Geoscience",
-"NatMa Nature Materials",
-"NatNa Nature Nanotechnology",
-"NaPho Nature Photonics",
-"NPhS. Nature Physical Science",
-"NatPh Nature Physics",
-"NatSR Nature Scientific Reports",
-"NW... Naturwissenschaften",
-"NInfo Nauchnye Informatsii",
-"NRRv. Naval Research Reviews",
-"Navig Navigation",
-"NavAu Navigation Australia",
-"NavPa Navigation Paris",
-"NVVSR Nederlandse Vereiniging voor Weer en Sterrenkunde Werkgroep veranderlijke Sterren Reports",
-"NCNS. Network: Computation in Neural Systems",
-"NSpEc Networks and Spatial Economics",
-"AnBog Neue Annalen der Koeniglichen Sternwarte in Bogenhausen bei Muenchen",
-"NJMM. Neues Jahrbuch Mineralogie Monatshefte",
-"NeCom Neural Computation",
-"NN... Neural Networks",
-"NeuL. Neuroscience Letters",
-"NPNDS Neutron Physics and Nuclear Data in Science and Technology",
-"NewA. New Astronomy",
-"NewAR New Astronomy Reviews",
-"NJCh. New Journal of Chemistry",
-"NJPh. New Journal of Physics",
-"NewSc New Scientist",
-"ASNYN News Letter of the Astronomical Society of New York",
-"ICHIN Newsletters of the Interdivisional Commission on History of the IAGA",
-"NTN.. New Technology News",
-"NZJGG New Zealand Journal Geology and Geophysics",
-"NZJS. New Zealand Journal of Science",
-"NKG.. Nihon Kessho Gakkaishi",
-"NOHIC Nizamiah JAPAL Rangapur Observatories Hyderabad India Contributions",
-"NizRe Nizamiah Observatory Reprints",
-"NCE.. Noise Control Engineering Journal",
-"NTE.. Nondestructive Testing and Evaluation",
-"NDTI. Nondestructive Testing and Evaluation International",
-"NTCo. Nondestructive Testing Communications",
-"NPPSB Nonequilibrium Problems in the Physical Sciences and Biology",
-"NATM. Nonlinear Analysis Theory Methods Applications",
-"Nonli Nonlinearity",
-"NlOpt Nonlinear Optics",
-"NPGeo Nonlinear Processes in Geophysics",
-"NSAP. Nonlinear, Statistical and Applied Physics",
-"NTA.. Nonlinear Theory and Its Applications, IEICE",
-"NATi. Nordisk Astronomisk Tidsskrift",
-"SApMM North Holland Series Applied Mathematical Mechanics",
-"NHCWP North Hollywood Calif Western Periodicals Co",
-"NPUJ. Northwestern Polytechnical University Journal",
-"NoDef Not Defined",
-"NoPar Notes et Informations",
-"NROpt Nouvelle Revue d'Optique",
-"NROA. Nouvelle Revue d'Optique Appliquee",
-"UGC.. Nova Acta Regiae Soc. Sci. Upsaliensis Ser. V",
-"NTvA. Novaya tekhn. v astron.",
-"NoIGG Novosibirsk Institut Geologii i Geofiziki SO AN SSSR",
-"NovIG Novosibirsk Institut Gidrodinamiki SO AN SSSR Dinamika Sploshnoi Sredy",
-"NoIzN Novosibirsk Izdatel Nauka",
-"NSSDC NSSDC Publication",
-"NTTRv NTT Review",
-"NDS.. Nuclear Data Sheets",
-"NDT.. Nuclear Data Tables",
-"NuEnD Nuclear Engineering and Design",
-"NucFu Nuclear Fusion",
-"NucFS Nuclear Fusion Special Supplement",
-"NuGeo Nuclear Geophysics",
-"NucIM Nuclear Instruments and Methods",
-"NIMPR Nuclear Instruments and Methods in Physics Research",
-"NIMPA Nuclear Instruments and Methods in Physics Research A",
-"NIMPB Nuclear Instruments and Methods in Physics Research B",
-"NucPh Nuclear Physics",
-"NuPhA Nuclear Physics A",
-"NuPhB Nuclear Physics B",
-"NuPhS Nuclear Physics B Proceedings Supplements",
-"NSE.. Nuclear Science Engineering",
-"NucTe Nuclear Technology",
-"NucTF Nuclear Technology Fusion",
-"NAR.. Nucleic Acids Research",
-"NuAlg Numerical Algorithms",
-"NFAO. Numerical Functional Analysis and Optimization",
-"NumHT Numerical Heat Transfer",
-"NHTA. Numerical Heat Transfer Part A - Applications",
-"NHTB. Numerical Heat Transfer Part B - Fundamentals",
-"NuMat Numerische Mathematik",
-"NCimA Nuovo Cimento A Serie",
-"NCimB Nuovo Cimento B Serie",
-"NCimC Nuovo Cimento C Geophysics Space Physics C",
-"NCimD Nuovo Cimento D Serie",
-"NCimL Nuovo Cimento Lettere",
-"NCimR Nuovo Cimento Rivista Serie",
-"NCimS Nuovo Cimento Serie",
-"OCSC. OAA Compututer Section Circular",
-"OSUC. Observationes Astronomicas Insitutas in Specula Universitatis Caesareae Dorpatensis",
-"OVS.. Observation of Variable Stars",
-"Obser Observation pi",
-"OAORP Observations astronomiques faites a l'Observatoire royal de Paris",
-"USNOO Observations made at the U.S. Naval Observatory",
-"OOVRO Observations Owens Valley Radio Observatory",
-"Bes1K Observatoire de Besancon",
-"OBN1K Observatoire de Besancon - CNES",
-"Gen1K Observatoire de Geneve",
-"OSFOT Observatoire de la Société Astronomique de France Observations et Travaux",
-"LyoRe Observatoire de Lyon Reprints",
-"Meu1K Observatoire de Meudon",
-"Nic1K Observatoire de Nice",
-"CORB. Observatoire Royal de Belgique Communications Serie B",
-"LPlaC Observatorio Astronomico de La Plata Circular",
-"LPlaS Observatorio Astronomico de La Plata Separata Astronomica",
-"RosOB Observatorio Astronomico Municipal de Rosario Argentia Boletin",
-"RioB. Observatorio Nacional Publicacoes do Servico Astronomico Rio de Janeiro",
-"HelR. Observatory and Astrophysics Laboratory University of Helsinki Report",
-"PLPla Observatory Astronomical La Plata Series Astronomies",
-"ObVyS Obzory Vysokotemperaturnoi Sverkhprovodimosti",
-"ONRAS Occasional Notes of the Royal Astronomical Society",
-"ORROE Occasional Reports of the Royal Observatory Edinburgh",
-"OccN. Occultation Newsletter, International Occultation Timing Association (IOTA)",
-"OcDyn Ocean Dynamics",
-"OcEng Ocean Engineering",
-"OcMod Ocean Modelling",
-"OSJaJ Oceanographical Society of Japan Journal",
-"AcOC. Oceanologica Acta",
-"Ocgy. Oceanology",
-"OcPhE Ocean Physics and Engineering",
-"OcSci Ocean Science",
-"OcScD Ocean Science Discussions",
-"OSJ.. Ocean Science Journal",
-"Ocean Oceanus Summer",
-"OAP.. Odessa Astronomical Publications",
-"BOOde Odesskij Gosudarstvennyi Universitet im. I. I. Mechnikova Byulletin Astronomicheskoj Observatorii",
-"IzOde Odesskij Gosudarstvennyi Universitet im. I. I. Mechnikova Izvestiya Astronomicheskoj Observatorii",
-"OAWMN Oesterreichische Akademie Wissenschaften Mathematisch naturwissenschaftliche Klasse Sitzungsberichte Abteilung",
-"Oikos Oikos",
-"Okean Okeanologiia",
-"ONCP. Old and New Concepts of Physics",
-"OCzAS Ondrejov Czechoslovakia Czechoslovak Academy Sciences CAS Astronomical Institute Publications",
-"ONERA ONERA TP",
-"OEJV. Open European Journal on Variable Stars",
-"OJA.. Open Journal of Acoustics",
-"OJAS. Open Journal of Applied Sciences",
-"OJBp. Open Journal of Biophysics",
-"OJFD. Open Journal of Fluid Dynamics",
-"OJGeo Open Journal of Geology",
-"OJMic Open Journal of Microphysics",
-"OLear Open Learning",
-"OSID. Open Systems and Information Dynamics",
-"AcOpt Optica Acta",
-"OQE.. Optical and Quantum Electronics",
-"OptEn Optical Engineering",
-"OptFT Optical Fiber Technology",
-"OptMa Optical Materials",
-"OptPE Optical Physics and Engineering",
-"OptQE Optical Quantum Electronics",
-"OptRv Optical Review",
-"OpSCN Optical Sciences Center Newsletter",
-"OSAJI Optical Society of America Journal Optics and Image Science",
-"OptPN Optics &amp",
-"OptLE Optics and Lasers in Engineering",
-"OPJ.. Optics and Photonics Journal",
-"OptSp Optics and Spectroscopy",
-"OptCo Optics Communications",
-"OExpr Optics Express",
-"OptLT Optics Laser Technology",
-"OptL. Optics Letters",
-"OptN. Optics News",
-"Optik Optik",
-"OpAt. Optika Atmosfery",
-"OpAtO Optika Atmosfery i Okeana",
-"OpSp. Optika i Spektroskopiia",
-"OpMeP Optiko Mekhanicheskaia Promyshlennost",
-"OCAM. Optimal Control Applications and Methods",
-"OptEL Optoelectronics Letters",
-"OERv. Opto-Electronics Review",
-"OpPuT Optoelektronika i Poluprovodnikovaia Tekhnika",
-"OrGeo Organic Geochemistry",
-"OrLi. Origins of Life",
-"OLEB. Origins of Life and Evolution of the Biosphere",
-"Ori.. Orione",
-"Orion Orion: Zeitschrift für Amateur-Astronomie",
-"IGS.. Orlando FL Academic Press Inc International Geophysics Series",
-"OrNav Ortung und Navigation",
-"BuENS Osaka Prefecture University Bulletin Series Engineering Natural Sciences",
-"OsUTR Osaka University Technology Reports",
-"Osir. Osiris",
-"NapCo Osservatorio Astronomico di Capodimonte Napoli Contributi Astronomici",
-"TerCo Osservatorio Astronomico di Collurania Teramo Contributi",
-"TerMm Osservatorio Astronomico di Collurania Teramo Memorie ed Osservazioni",
-"TerNC Osservatorio Astronomico di Collurania Teramo Note e Comunicazioni",
-"PadCR Osservatorio Astronomico di Padova Comunicazioni e Rassegne",
-"RomCo Osservatorio Astronomico di Roma su Monte Mario Contributi Scientifici",
-"TriP. Osservatorio Astronomico di Trieste Pubblicazioni",
-"TreP. Osservatorio Privato Specola Ariel Treviso Italia Pubblicazione",
-"MmArc Osservazioni e memorie dell'Osservatorio astrofisico di Arcetri",
-"MmArS Osservazioni e memorie dell'Osservatorio astrofisico di Arcetri - Appendici",
-"OsCar Osteoarthritis and Cartilage",
-"OtObI Otbor i Obrabotka Informatsii",
-"OtPI. Otbor i Peredacha Informatsii",
-"OISNP Oxford Pergamon Press International Series on Natural Philosophy",
-"OISTS Oxford Pergamon Press International Tables Selected Constants",
-"OxfOO Oxford University Observatory Observations",
-"OxM.. Oxidation of Metals",
-"OzSE. Ozone: Science &amp",
-"Palb. Paleobiology",
-"PalOc Paleoceanography",
-"PMetR Papers in Meteorological Research",
-"PPh.. Papers in Physics",
-"PMG.. Papers Meteorology Geophysics",
-"PGC.. Papers on Global Change IGBP",
-"ParC. Parallel Computing",
-"Paras Parasitology",
-"ParAc Particle Accelerators",
-"PPhI. Particle Physics Insights",
-"PaReL Pattern Recognition Letters",
-"PerMS Perceptual Motor Skills",
-"PZ... Peremennye Zvezdy",
-"PZP.. Peremennye Zvezdy Prilozhenie",
-"PMHu. Periodica Mathematica Hungarica",
-"PPEE. Periodica Polytechnica Electrical Engineering",
-"PPME. Periodica Polytechnica Mechanical Engineering",
-"PPTE. Periodica Polytechnica Transportation Engineering",
-"PerCo Perkins Observatory Contributions",
-"PMO.. Perth Meridien Observations",
-"PTMJ. Phase Transitions: A Multinational Journal",
-"PhDT. Ph.D. Thesis",
-"PhiJR Philips Journal Research",
-"PhiRR Philips Research Reports",
-"PhiTR Philips Technical Review",
-"PMag. Philosophical Magazine",
-"PMagL Philosophical Magazine Letters",
-"PMagA Philosophical Magazine, Part A",
-"PMagB Philosophical Magazine, Part B",
-"PFP.. Philosophy and Foundations of Physics",
-"Phoen Phoenix Mitteilungsblatt fuer Veraenderlichenbeobachter",
-"PcPb. Photochemistry and Photobiology",
-"Pg... Photogrammetria",
-"PgE.. Photogrammetric Engineering",
-"PgERS Photogrammetric Engineering and Remote Sensing",
-"PhInt Photo Interpretation",
-"PhNan Photonics and Nanostructures",
-"PhSen Photonic Sensors",
-"PhoSp Photonics Spectra",
-"PsynR Photosynthesis Research",
-"Psyn. Photosynthetica",
-"PhyOJ Physcs Online Journal",
-"Phy.. Physica",
-"PhyA. Physica A Statistical Mechanics and its Applications",
-"PhyBC Physica B+C",
-"PhyB. Physica B Condensed Matter",
-"PhyC. Physica C Superconductivity",
-"PhyD. Physica D Nonlinear Phenomena",
-"PhyE. Physica E Low-Dimensional Systems and Nanostructures",
-"PEFPN Physica Energiae Fortis et Physica Nuclearis",
-"PhAco Physical Acoustics",
-"PhBio Physical Biology",
-"PCESR Physical Chemical and Earth Sciences Research Reports",
-"PCCP. Physical Chemistry Chemical Physics (Incorporating Faraday Transactions)",
-"PCSE. Physical Chemistry: Science and Engineering",
-"PhGeo Physical Geography",
-"PPHTS Physical Properties of High Temperature Superconductors",
-"PhyR. Physical Research",
-"PhRv. Physical Review",
-"PhRvA Physical Review A",
-"PhRvB Physical Review B",
-"PhRvC Physical Review C",
-"PhRvD Physical Review D",
-"PhRvE Physical Review E",
-"PhRvL Physical Review Letters",
-"PhRvI Physical Review Series I",
-"PhRvS Physical Review Special Topics Accelerators and Beams",
-"PRSTP Physical Review Special Topics Physics Education",
-"PhRvX Physical Review X",
-"PSD.. Physical Sciences Data",
-"PSCEC Physical Sciences Series of the Commission of European Communities",
-"PhyNr Physica Norvegica",
-"PhyS. Physica Scripta",
-"PhySB Physica Scripta B",
-"PhST. Physica Scripta Volume T",
-"PSSAR Physica Status Solidi Applied Research",
-"PSSBR Physica Status Solidi B Basic Research",
-"PSSCR Physica Status Solidi C Current Topics",
-"PSSRR Physica Status Solidi Rapid Research Letters",
-"PhySS Physica Status Solids",
-"PhyL. Physic Letters",
-"PhChH PhysicoChemical Hydrodynamics",
-"Physi Physics",
-"PCS.. Physics and Chemistry in Space",
-"PhChE Physics and Chemistry of Earth",
-"PCL.. Physics and Chemistry of Liquids",
-"PCMLD Physics and Chemistry of Materials with Low-Dimensional Structures",
-"PCMLA Physics and Chemistry of Materials with Low-Dimensional Structures Series A",
-"PCMLB Physics and Chemistry of Materials with Low-Dimensional Structures Series B",
-"PCMLC Physics and Chemistry of Materials with Low-Dimensional Structures Series C",
-"PCM.. Physics and Chemistry of Minerals",
-"PCE.. Physics and Chemistry of the Earth",
-"PCEA. Physics and Chemistry of the Earth A",
-"PCEB. Physics and Chemistry of the Earth B",
-"PCEC. Physics and Chemistry of the Earth C",
-"PCED. Physics and Chemistry of the Earth Delta",
-"PEEI. Physics and Evolution of the Earth's Interior",
-"PhApp Physics and its Applications",
-"PTPPB Physics and Technology of Particle and Photon Beams",
-"PhB.. Physics Bulletin",
-"DokPh Physics - Doklady",
-"PhyEd Physics Education",
-"PhyEs Physics Essays",
-"PCHEI Physics in Collision: High-Energy ee/ep/pp Interactions",
-"PMB.. Physics in Medicine and Biology",
-"PhP.. Physics in Perspective",
-"PhTec Physics in Technology",
-"PhyIn Physics International",
-"PhLF. Physics Laser Fusion",
-"PhL.. Physics Letters",
-"PhLA. Physics Letters A",
-"PhLB. Physics Letters B",
-"PhLC. Physics Letters Section C Physics Reports C",
-"PhyNY Physics New York",
-"PhyN. Physics Notes",
-"PAN.. Physics of Atomic Nuclei",
-"PAM.. Physics of Atoms and Molecules",
-"PhFl. Physics of Fluids",
-"PhFlB Physics of Fluids B",
-"PhLRv Physics of Life Reviews",
-"PLDS. Physics of Low-Dimensional Structures",
-"PhMet Physics of Metals",
-"PMM.. Physics of Metals and Metallography",
-"PPN.. Physics of Particles and Nuclei",
-"PPNL. Physics of Particles and Nuclei Letters",
-"PhPl. Physics of Plasmas",
-"PhQE. Physics of Quantum Electronics",
-"PSL.. Physics of Solids and Liquids",
-"PEPI. Physics of the Earth and Planetary Interiors",
-"PhSS. Physics of the Solid State",
-"PTF.. Physics of Thin Films",
-"PWP.. Physics of Wave Phenomena",
-"PhR.. Physics Reports",
-"PRI.. Physics Research International",
-"PhT.. Physics Today",
-"PhyU. Physics Uspekhi",
-"PhyW. Physics World",
-"PCTM. Physikalisch-Chemische Trenn- und Messmethoden",
-"PhyBl Physikalische Blötter",
-"PhyG. Physikalische Gesellschaft",
-"PhyGZ Physikalische Gesellschaft Zürich",
-"PhyZ. Physikalische Zeitschrift",
-"PKM.. Physik der Kondensierten Materie",
-"PhuZ. Physik in unserer Zeit",
-"PhyCP Physiological Chemistry and Physics",
-"PhyM. Physiological Measurement",
-"PhylS Physiologist Supplement",
-"PAZh. Pis ma Astronomicheskii Zhurnal",
-"PZETF Pis ma Zhurnal Eksperimental noi i Teoreticheskoi Fiziki",
-"PZhTF Pis ma Zhurnal Tekhnischeskoi Fiziki",
-"PlAst Planetary Astronomy",
-"PlR.. Planetary Report",
-"PlSci Planetary Science",
-"PSRD. Planetary Science Research Discoveries",
-"PCPhy Plant and Cell Physiology",
-"PFR.. Plasma and Fusion Research",
-"PCPP. Plasma Chemistry and Plasma Processing",
-"PlPh. Plasma Physics",
-"PPCF. Plasma Physics and Controlled Fusion",
-"PlPhR Plasma Physics Reports",
-"PlPo. Plasmas and Polymers",
-"PlST. Plasma Science and Technology",
-"PSST. Plasma Sources Science Technology",
-"PRFVT Plastiques Renforces Fibres de Verre Textile",
-"PLoSB PLoS Biology",
-"PLoSC PLoS Clinical Trials",
-"PLSCB PLoS Computational Biology",
-"PLoSG PLoS Genetics",
-"PLoSM PLoS Medicine",
-"PLoSN PLoS Neglected Tropical Diseases",
-"PLoSO PLoS ONE",
-"PLoSP PLoS Pathogens",
-"PMCPA PMC Physics A",
-"PMCPB PMC Physics B",
-"PMCPC PMC Physics C",
-"PMTF. PMTF Zhurnal Prikladnoi Mekhaniki i Tekhnicheskoi Fiziki",
-"nraop National Radio Astronomy Observatory Press Release",
-"PnGid Pnevmatika i Gidravlika",
-"noaop NOAO Proposal",
-"PolSc Polar Science",
-"PolSi Poliarnye Siianiia",
-"PSSNN Poliarnye Siianiia i Svechenie Nochnogo Neba",
-"PASAM Polish Academy of Science Arch Mech",
-"PASAS Polish Academy of Science Artificial Satellites",
-"PASIG Polish Academy of Sciences Institute of Geophysics Publications",
-"PASTA Polish Academy of Sciences Theory Aggregation Coagulation",
-"PJMPE Polish Journal of Medical Physics And Engineering",
-"PCZNN Politechnika Czestochowska Zeszyty Naukowe Nauki Techniczne Mechanika",
-"PGZNM Politechnika Gdanska Zeszyty Naukowe Mechanika",
-"PSZNM Politechnika Slaska Zeszyty Naukowe Mechanika",
-"PolAt Pollution Atmospherique",
-"CraR. Polskie Towarzyslwo Milosnikow Astronomii",
-"PolTM Poluprovodnikovaia Tekhnika i Mikroelektronika",
-"PolPP Poluprovodnikovye Pribory i ikh Primenenie",
-"Poly. Polymer",
-"PoCom Polymer Composites",
-"PolPh Polymer Physics",
-"PPTEn Polymer-Plastics Technology and Engineering",
-"PomAK Pomiary Automatyka Kontrola",
-"PATi. Popular Astronomisk Tidsskrift",
-"PA... Popular Astronomy",
-"PorMe Poroshkovaia Metallurgiia",
-"PoAn. Postepy Astronautyki",
-"PoAst Postepy Astronomii Krakow",
-"PSci. Pour la Science",
-"PDiff Powder Diffraction",
-"PUAMA Poznan Uniwersytet im Adama Mickiewicza Seria Akustyka",
-"PUAMF Poznan Uniwersytet im Adama Mickiewicza Seria Fizyka",
-"PrAst Practical Astronomy",
-"NaiRe Pradesh State Observatory Naini Tal Insia Reprints",
-"PraAc Prague Academia",
-"Prama Pramana",
-"PreR. Precambrian Research",
-"Prib. Priborostroenie",
-"PriTE Pribory i Tekhnika Eksperimenta",
-"PriMM Prikladnaia Matematika i Mekhanika",
-"PriMP Prikladnaia Matematika i Programmirovanie",
-"PriM. Prikladnaia Mekhanika",
-"PPPLR Princeton Plasma Physics Laboratory Report",
-"Prir. Priroda",
-"Priv. Private Communication",
-"PrEM. Probabilistic Engineering Mechanics",
-"PrAiA Problemy Arktiki i Antarktiki",
-"PrBio Problemy Bioniki",
-"PrDRV Problemy Difraktsii i Rasprostraneniia Voln",
-"PrFA. Problemy Fiziki Atmosfery",
-"PrFKL Problemy Iadernoi Fiziki i Kosmicheskikh Luchei",
-"PrKFi Problemy Kosmicheskoi Fiziki",
-"PrMas Problemy Mashinostroeniia",
-"PrPro Problemy Prochnosti",
-"PrSP. Problemy Sluchainogo Poiska",
-"PrTE. Problemy Tekhnicheskoi Elektrodinamiki",
-"PrTGE Problemy Teorii Gravitatsii i Elementarnykh Chastits",
-"PrTPT Problemy Teploenergetiki i Prikladnoi Teplofiziki",
-"PJA.. Proceeding of the Japan Academy",
-"PJAA. Proceeding of the Japan Academy, Series A",
-"PJAB. Proceeding of the Japan Academy, Series B",
-"PBioS Proceedings: Biological Sciences",
-"PMPES Proceedings: Mathematical, Physical and Engineering Sciences",
-"PAMS. Proceedings of the American Mathematical Society",
-"PAPhS Proceedings of the American Philosophical Society",
-"PASAu Proceedings of the Astronomical Society of Australia",
-"PCAS. Proceedings of the California Academy of Sciences",
-"PCPS. Proceedings of the Cambridge Philosophical Society",
-"PEMS. Proceedings of the Edinburgh Mathematical Society",
-"PIASE Proceedings of the Indian Academy of Science, Earth and Planetary Sciences",
-"PINSA Proceedings of the Indian National Science Academy Part A",
-"PINSB Proceedings of the Indian National Science Academy Part B",
-"PIGP. Proceedings of the Institute of General Physics, Adademy of the Sciences of Russia",
-"PILOM Proceedings of the International Latitude Observatory at Mizusawa",
-"PIRE. Proceedings of the IRE",
-"PNAS. Proceedings of the National Academy of Sciences",
-"PNAS. Proceedings of the National Academy of Sciences USA",
-"PNAS. Proceedings of the National Academy of Sciences of the USA",
-"PNSC. Proceedings of the National Science Council",
-"PNSBP Proceedings of the National Society of Black Physicists",
-"PPS.. Proceedings of the Physical Society",
-"PPSA. Proceedings of the Physical Society A",
-"PPSB. Proceedings of the Physical Society B",
-"PPSL. Proceedings of the Physical Society of London",
-"PRIAN Proceedings of the Research Institute of Atmospherics, Nagoya University",
-"PRIAA Proceedings of the Royal Irish Academy Section A",
-"PRNAS Proceedings of the Royal Netherlands Academy of Arts and Sciences",
-"PSEBM Proceedings of the Society for Experimental Biology and Medicine",
-"PrVP. Proceedings of Vibration Problems",
-"PELIS Program: electronic library &amp",
-"PrAeS Progress in Aerospace Sciences",
-"PrAA. Progress in Astronautics and Aeronautics",
-"PrA.. Progress in Astronomy",
-"PABei Progress in Astronomy",
-"PBB.. Progress in Biochemistry and Biophysics",
-"PBBC. Progress in Biophysics and Biophysical Chemistry",
-"PBMB. Progress in Biophysics and Molecular Biology",
-"PrECS Progress in Energy and Combustion Science",
-"PLTP. Progress in Low Temperature Physics",
-"PrMS. Progress in Materials Science",
-"PMatP Progress in Mathematical Physics",
-"PMRP. Progress in Medical Radiation Physics",
-"PMetP Progress in Metal Physics",
-"PNSci Progress in Natural Science",
-"PrOce Progress in Oceanography",
-"POrCo Progress in Organic Coatings",
-"PrPNP Progress in Particle and Nuclear Physics",
-"PPcPp Progress in Photochemistry and Photophysics",
-"PPGeo Progress in Physical Geography",
-"PrPh. Progress in Physics",
-"PQE.. Progress in Quantum Electronics",
-"PrSS. Progress In Surface Science",
-"PTCP. Progress in Theoretical Chemistry and Physics",
-"PTEP. Progress of Theoretical and Experimental Physics",
-"PThPh Progress of Theoretical Physics",
-"PThPS Progress of Theoretical Physics Supplement",
-"ProTe Promyshlennaia Teplotekhnika",
-"PrEx. Propellants and Explosives",
-"PrExP Propellants and Explosives Pyrotechnics",
-"PMMin Proper Motion Survey, University of Minnesota",
-"rxte pRXTE Proposal",
-"sptz pSpitzer Proposal",
-"suba pSubaru Proposal",
-"PUFir Pubblicazioni della R. Universita degli studi di Firenze",
-"PSAIL Pubblicazioni della Stazione Astronomica Internazionale di Latitudine",
-"POMil Pubblicazioni dell'Osservatorio Astronomico di Milano-Merate",
-"POPad Pubblicazioni dell'Osservatorio Astronomico di Padova",
-"POPal Pubblicazioni dell'Osservatorio Astronomico di Palermo",
-"POTor Pubblicazioni Varie Fuori Serie dell'Osservatorio Astronomico di Torino",
-"PKCat Publ. House Czech. Acad. Sci.",
-"PMad. Publicacion Facultad de Ciencias Madrid",
-"POClu Publicatiile Observatorului Astronomical Universitatii din Cluj",
-"POPar Publication de l'Observatoire de Paris Notes et Informations",
-"POStr Publication de l'Observatoire de Strasbourg",
-"PUSK. Publication der Koeniglichen Sternwarte in Kiel",
-"PULei Publicationen der K. Universitoats-Sternwarte zu Leipzig",
-"PCARS Publication of COMU Astrophysics Research Center",
-"PKAS. Publication of Korean Astronomical Society",
-"PPCAS Publication of the Pomona College Astronomical Society",
-"PIAGL Publications de l'Institut d'Astronomie et de Geophysique Georges Lemaitre",
-"POBeo Publications de l'Observatoire Astronomique de Beograd",
-"POBor Publications de l'Observatoire de l'Universite de Bordeaux",
-"POTou Publications de l'Observatoire de Toulouse",
-"PLAGL Publications du Laboratoire d'Astronomie et de Geodesie de l'Universite de Louvain",
-"PDHO. Publications of Debrecen Heliophysical Observatory",
-"POBol Publications of dell'Osservatorio Astronomie de Bologna",
-"PLawO Publications of Laws Observatory, University of Missouri",
-"PLicO Publications of Lick Observatory",
-"POMic Publications of Michigan Observatory",
-"PCat. Publications of Osservatorio Astrofisico di Catania",
-"PASK. Publications of the Academy of Science Kasakstan Sect. Astrobotanics",
-"PAllO Publications of the Allegheny Observatory of the University of Pittsburgh",
-"PAASA Publications of the Astronomical and Astrophysical Society of America",
-"PAICU Publications of the Astronomical Institute of the Charles University",
-"PAICz Publications of the Astronomical Institute of the Czechoslovak Academy of Sciences",
-"PUAms Publications of the Astronomical Institute of the University of Amsterdam",
-"PBrn. Publications of the Astronomical Institute of the University of Borneo",
-"POHel Publications of the Astronomical Observatory Helsinki",
-"PAOS. Publications of the Astronomical Observatory of Sarajevo",
-"POMin Publications of the Astronomical Observatory University of Minnesota",
-"PASA. Publications of the Astronomical Society of Australia",
-"PASJ. Publications of the Astronomical Society of Japan",
-"PASP. Publications of the Astronomical Society of the Pacific",
-"PASPS Publications of the Astronomical Society of the Pacific Supplement",
-"PASRB Publications of the Astronomical Society Rudjer Boskovic",
-"PADEU Publications of the Astronomy Department of the Eotvos Lorand University",
-"PAIB. Publications of the Astronomy Institute of Bonn",
-"PAB.. Publications of The Astrophysics Branch Ottawa",
-"PBeiO Publications of the Beijing Astronomical Observatory",
-"PBosO Publications of the Bosscha Observatory Lembang Indonesia",
-"PCinO Publications of the Cincinnati Observatory",
-"PCooO Publications of the Cook Observatory",
-"PDDO. Publications of the David Dunlap Observatory",
-"PDAUC Publications of the Department of Astronomy University of Chile",
-"PDAO. Publications of the Dominion Astrophysical Observatory Victoria",
-"PDO.. Publications of the Dominion Observatory Ottawa",
-"PDreO Publications of the Dresden Observatory",
-"PFAO. Publications of the Flower Astronomical Observatory",
-"PGLO. Publications of the Goethe Link Observatory",
-"PGooO Publications of the Goodsell Observatory, Carleton College",
-"ILOMP Publications of the International Latitude Observatory at Mizusawa",
-"PIstO Publications of the Istanbul University Observatory",
-"PGro. Publications of the Kapteyn Astronomical Laboratory Groningen",
-"PKirO Publications of the Kirkwood Observatory of Indiana University",
-"PAth. Publications of the Laborotory of Astronomy University of Athens",
-"PMcCO Publications of the Leander McCormick Observatory",
-"PManO Publications of the Manila Observatory",
-"PMunO Publications of the Munich Observatory",
-"PNAOC Publications of the National Astronomical Observatories of China",
-"PNAOJ Publications of the National Astronomical Observatory of Japan",
-"POLyo Publications of the Observatoire de Lyon",
-"PGenA Publications of the Observatoire Geneve Series A",
-"PGenB Publications of the Observatoire Geneve Series B",
-"POHP. Publications of the Observatoire Haute-Provence",
-"POANC Publications of the Observatorie Astronomie Nacional Cerro Calan",
-"POIst Publications of the Observatory Astronomie University Istambul",
-"POslO Publications of the Oslo Observatory",
-"POVRO Publications of the Owens Valley Observatory",
-"PPMtO Publications of the Purple Mountain Observatory",
-"PRCO. Publications of the Riverview College Observatory",
-"PROE. Publications of the Royal Observatory of Edinburgh",
-"PSAO. Publications of the Shaanxi Astronomical Observatory",
-"PShaO Publications of the Shaanxi Astronomy Observatory",
-"PSprO Publications of the Sproul Observatory",
-"PSSAI Publications of the Sternberg State Astronomical Institute",
-"PTarO Publications of the Tartu Astrofizica Observatory",
-"PTasO Publications of the Tashkent Astronomical Observatory",
-"PUPFA Publications of the University of Pennsylvania Flower Astronomical Observatory",
-"PUSNO Publications of the U.S. Naval Observatory Second Series",
-"PVVO. Publications of the Van Vleck Observatory",
-"PVasO Publications of the Vassar College Observatory",
-"PWasO Publications of the Washburn Observatory",
-"PYerO Publications of the Yerkes Observatory",
-"PYunO Publications of the Yunnan Observatory",
-"PWHHO Publications of West Hendon House Observatory, Sunderland",
-"PSCDS Publication Speciale du Centre de Donnees Stellaires",
-"POxf. Publications University of Oxford Department of Astrophysics",
-"PUS.. Public Understanding of Science",
-"PKUJ. Publikationen der Kaiserlichen Universitaets-Sternwarte Jurjew",
-"PAIKH Publikationen des Astrophysikalischen Instituts Koenigstuhl-Heidelberg",
-"POPot Publikationen des Astrophysikalischen Observatoriums zu Potsdam",
-"PCopO Publikationer og mindre Meddeler fra Kobenhavns Observatorium",
-"PGAOI Pulkovo Glavnaia Astronomicheskaia Observatoriia Izvestiia",
-"PApCh Pure &amp",
-"PApGe Pure and Applied Geophysics",
-"PApPh Pure and Applied Physics",
-"PApOp Pure Applied Optics",
-"QUnJ. Qinghua University Journal",
-"xmm.. XMM-Newton Press Release",
-"xmm.. XMM-Newton Proposal",
-"QREI. Quality Reliability Engineering International",
-"QuFin Quantitative Finance",
-"QuSOp Quantum and Semiclassical Optics",
-"QuEle Quantum Electronics",
-"QuIP. Quantum Information Processing",
-"QuOpt Quantum Optics",
-"QBSA. Quarterly Bulletin on Solar Activity",
-"QJMAM Quarterly Journal of Mechanics and Applied Mathematics",
-"QJRAS Quarterly Journal of the Royal Astronomical Society",
-"QJRMS Quarterly Journal of the Royal Meteorological Society",
-"QApMa Quarterly of Applied Mathematics",
-"QRBio Quarterly Reviews of Biophysics",
-"QuInt Quaternary International",
-"QuRes Quaternary Research",
-"QSRv. Quaternary Science Reviews",
-"Quest Quest",
-"RadRe Radcliffe Observatory Pretoria South Africa Reprints",
-"Rad.. Radiant, Journal of the Dutch Meteor Society",
-"REB.. Radiation and Environmental Biophysics",
-"RadEf Radiation Effects",
-"REDS. Radiation Effects and Defects in Solids",
-"RaPC. Radiation Physics and Chemistry",
-"RaRe. Radiation Research",
-"RaEE. Radio and Electronic Engineer",
-"Radel Radioehlektronika",
-"REEP. Radio Engineering and Electronic Physics",
-"RaF.. Radiofizika",
-"RaSol Radioizluchenie Solntsa",
-"RPRA. Radio Physics and Radio Astronomy",
-"RaRLJ Radio Research Laboratory, Journal",
-"RaRLR Radio Research Laboratory, Review",
-"RaSc. Radio Science",
-"RaScB Radio Science Bulletin",
-"RaScS Radio Science Supplement",
-"RaT.. Radioteknika",
-"RaEl. Radiotekhnika i Elektronika",
-"RERE. Radiotekhnika i Elektronika Radio Engineering Electronic Physics",
-"RatK. Radiotekhnika Kharkov",
-"RTRE. Radiotekhnika Tecommunications Radio Engineering Radio Engineering",
-"RaPro Raschety Prochnost",
-"RF... Raumfahrtforschung",
-"RCAEn RCA Engineer",
-"RCARv RCA Review",
-"RTI.. Real-Time Imaging",
-"RDCMP Recent Development in Condensed Matter Physics",
-"RRDAP Recent Research Development in Applied Physics",
-"RRDBC Recent Research Development in Biophysical Chemistry",
-"RRDBB Recent Research Development in Biophysics and Biochemistry",
-"RRDCP Recent Research Development in Chemical Physics",
-"RRDPC Recent Research Development in Physical Chemistry",
-"RRDP. Recent Research Development in Physics",
-"RRDPF Recent Research Development in Physics of Fluids",
-"RRDSP Recent Research Development in Statistical Physics",
-"ReAA. Recherches Aeronautiques et Aerospatiales",
-"RAOU. Recherches Astronomiques de l'Observatoire d'Utrecht",
-"RZh.. Referationyj Zhurnal",
-"RJEHM Regional Journal of Energy Heat and Mass Transfer",
-"RCD.. Regular and Chaotic Dynamics",
-"RemS. Remote Sensing",
-"RSEMS Remote Sensing Electro Magnetic Spectrum",
-"RSEnv Remote Sensing of Environment",
-"RSQ.. Remote Sensing Quarterly",
-"Renor Renormalization",
-"RISRJ Report Ionosphere Space Research Japan",
-"HarOR Report of the Committee of the Overseers of Harvard College appointed to visit the Observatory",
-"RNAOJ Report of the National Astronomical Observatory of Japan",
-"RSPUT Report Series of the Department of Physics and Science, University of Turku",
-"YalRY Reports for the year presented by the Board of Managers of the Observatory of Yale University to the President and Fellows",
-"ROLun Reports of the Lund Observatory",
-"RpMP. Reports on Mathematical Physics",
-"RPPh. Reports on Progress in Physics",
-"RTAMS Representation Theory of the American Mathematical Society",
-"BeiRe Reprints Beijing Astronomical Observatory Academia Sinica",
-"ROCi. Republic Observatory Johannesburg Circular",
-"ChPAS Republic of China National Science Council Proceedings Applied Sciences",
-"RBSEJ Research Based Science Education Journal",
-"RAA.. Research in Astronomy and Astrophysics",
-"ReNEv Research in Nondestructive Evaluation",
-"RSTEd Research in Science and Technological Education",
-"RScEd Research in Science Education",
-"RJPh. Research Journal of Physics",
-"RLEMR Research Laboratory Engineering Materials Report",
-"RLPME Research Laboratory Precision Machinery Electronics Bulletin",
-"RLOpt Research Letters in Optics",
-"RLPhy Research Letters in Physics",
-"RMA.. Research Measurement Approach",
-"RNOST Research News &amp",
-"RPFSU Research Papers Faculty of Materials Science and Technology Slovak University of Technology",
-"RRP.. Research Reports in Physics",
-"RTP.. Research Trends in Physics",
-"RNAO. Resultados del Observatorio Nacional Argentino",
-"ROCor Resultados del Observatorio Nacional Argentino en Cordoba",
-"ResPh Results in Physics",
-"RAROC Results of Astronomical Observations made at the Royal Observatory, Cape of Good Hope",
-"RMROC Results of Meridian Observations made at the Royal Observatory, Cape of Good Hope",
-"RDR.. Review of Derivatives Research",
-"RvPCJ Review of Physical Chemistry of Japan",
-"RvPT. Review of Physics in Technology",
-"RScI. Review of Scientific Instruments",
-"RvAqS Reviews in Aquatic Sciences",
-"RvMaP Reviews in Mathematical Physics",
-"RvMA. Reviews in Modern Astronomy",
-"RvGeo Reviews of Geophysics",
-"RvGSP Reviews of Geophysics and Space Physics",
-"RvGeS Reviews of Geophysics Supplement",
-"RvMin Reviews of Mineralogy",
-"RvMP. Reviews of Modern Physics",
-"RvMPS Reviews of Modern Physics Supplement",
-"RvOp. Reviews of Optics",
-"RvPP. Reviews of Plasma Physics",
-"RvRRL Reviews of the Radio Research Laboratory",
-"RvA.. Revista Astronomica Organo de la Asociacion Argengina Amigos de la Astronomia Buenos Aires",
-"RBrFi Revista Brasileira de Fisica",
-"RvCF. Revista Colombiana de Fisica",
-"IORP. Revista do observatorio : publicacao mensal do Imperial Observatorio do Rio de Janeiro",
-"RMxAA Revista Mexicana de Astronomia y Astrofisica",
-"RMxF. Revista Mexicana de Fisica",
-"RMxFE Revista Mexicana de Fisica E",
-"RMxFS Revista Mexicana de Fisica Supplement",
-"RvMad Revista Real Acad. Ciencias Exact. Fis. Nat. Madrid",
-"RTrTe Revista Transporturilor si Telecomunicatiilor",
-"AerRv Revue Aerospatiale",
-"RvAc. Revue d'Acoustique",
-"RvGPG Revue de Geographie Physique et de Geologie Dynamique",
-"RvGDG Revue de Geologie Dynamique et de Geographie Physique",
-"RvPA. Revue de Physique Appliquee",
-"RvPD. Revue du Palais de la Decouverte",
-"RvFEQ Revue Francaise de l'Electricite Quarter",
-"RFrM. Revue Francaise de Mecanique",
-"RFrMQ Revue Francaise de Mecanique Quarter",
-"RRMPA Revue Roumaine de Mathematiques Pures et Appliquees",
-"RvRP. Revue Roumaine de Physique",
-"RvRST Revue Roumaine des Sciences Techniques Serie de Mecanique Appliquee",
-"RST.. Revue Scientifique et Technique CECLES CERS",
-"RvT.. Revue Technique Thomson CSF",
-"RNISZ Rezul taty Nabliudenii Iskusstvennykh Sputnikov Zemli",
-"RWTHA Rheinisch Westfaelische Technische Hochschule Aerodynamisches Institut Abhandlungen",
-"AcRhe Rheologica Acta",
-"RA... Ricerche Astronomiche",
-"RIzZi Riga Izdatel Zinatne",
-"Rise. Rise Hvezd",
-"RRA.. River Research and Applications",
-"RIG.. Rivista Italiana di Geofisica",
-"RIGSA Rivista Italiana di Geofisica e Scienze Affini",
-"RvTS. Rivista Tecnica Selenia",
-"Robot Robotica",
-"RMRE. Rock Mechanics and Rock Engineering",
-"RMFMR Rock Mechanics Felsmechanik Mecanique des Roches",
-"Roczn Rocznik Astronomiczny Observatorjum Krakowskiego Krakow",
-"RoAJ. Romanian Astronomical Journal",
-"RoJPh Romanian Journal of Physics",
-"RoRPh Romanian Reports in Physics",
-"RoIE. Rossiiskaia Akademiia Nauk Izvestiia Energetika",
-"RoIMZ Rossiiskaia Akademiia Nauk Izvestiia Mekhanika Zhidkosti i Gaza",
-"RoISF Rossiiskaia Akademiia Nauk Izvestiia Seriia Fizicheskaia",
-"RoDok Rossijskaya Akademiya Nauk Doklady",
-"RoIMT Rossijskaya Akademiya Nauk Izvestiya Mekhanika Tverdogo Tela",
-"RoIzF Rossijskaya Akademiya Nauk Izvestiya Seriya Fizicheskaya",
-"RWPWZ Rostock Wilhelm Pieck Universitaet Wissenschaftliche Zeitschrift Mathematisch Naturwissenschaftliche Reihe",
-"PVSS. Royal Astronomical Society of New Zealand Publications of Variable Star Section",
-"VSSCi Royal Astronomical Society of New Zealand Variable Star Section Circulars",
-"VSSRe Royal Astronomical Society of New Zealand Variable Star Section Reprints",
-"VSSSC Royal Astronomical Society of New Zealand Variable Star Section Special Circulars",
-"RGOB. Royal Greenwich Observatory Bulletin",
-"RGOO. Royal Greenwich Observatory Observations",
-"ROAn. Royal Observatory Annals",
-"CapMi Royal Observatory Cape Mimeogram",
-"CoRSE Royal Society Edinburgh Communications Physical Sciences",
-"RSCT. Royal Society of Canada Transactions",
-"RSEPS Royal Society of Edinburgh Proceedings Section",
-"RSET. Royal Society of Edinburgh Transactions",
-"RSPTA Royal Society of London Philosophical Transactions Series A",
-"RSPTB Royal Society of London Philosophical Transactions Series B",
-"RSPT. Royal Society of London Philosophical Transactions Series I",
-"RSPSA Royal Society of London Proceedings Series A",
-"RSPSB Royal Society of London Proceedings Series B",
-"RSPS. Royal Society of London Proceedings Series I",
-"RoIn. Rozprawy Inzynierskie",
-"RoIET Rozprawy Inzynierskie Engineering Transactions",
-"asc.. Space Telescope ASC Instrument Science Report",
-"nicm. Space Telescope NICMOS Instrument Science Report",
-"stis. Space Telescope STIS Instrument Science Report",
-"wfc.. Space Telescope WFC Instrument Science Report",
-"wfpc. Space Telescope WFPC2 Instrument Science Report",
-"Ruimt Ruimtevaart",
-"RuCRv Russian Chemical Reviews",
-"RuGG. Russian Geology and Geophysics",
-"RJET. Russian Journal of Engineering Thermophysics",
-"RJMP. Russian Journal of Mathematical Physics",
-"RJPC. Russian Journal Physical Chemistry",
-"RJPCA Russian Journal Physical Chemistry A",
-"RJTAM Russian Journal Theoretical and Applied Mechanics",
-"RuMaS Russian Mathematical Surveys",
-"RuMet Russian Metallurgy",
-"RuPhJ Russian Physics Journal",
-"RALR. Rutherford Appleton Laboratory Report",
-"Sadha Sadhana",
-"STVF. Samoletostroenie Tekhnika Vozdushnogo Flota",
-"SAMPJ SAMPE Journal",
-"SAMPQ SAMPE Quarterly",
-"UISTS San Diego CA Univelt Inc Science Technology Series",
-"MaMeA Sankt Peterburgskii Universitet Vestnik Seriia Matematika Mekhanika Astronomiia",
-"SAOSR SAO Special Report",
-"asd.. Astrophysics Software Database",
-"ascl. Astrophysics Source Code Library",
-"SatCo Satellite Communications",
-"SBARM SBARMO Bulletin",
-"SbMat Sbornik: Mathematics",
-"SJMet Scandinavian Journal of Metallurgy",
-"SUVSR Scandinavian Union of Amateur Astronomers Variable Star Section",
-"ScReE Scholarly Research Exchange",
-"SNG.. Schweizerische Naturforschende Gesellschaft",
-"Sci.. Science",
-"SCSA. Science and Culture Series: Astrophysics",
-"SCSP. Science and Culture Series: Physics",
-"SECM. Science and Engineering of Composite Materials",
-"STAdM Science and Technology of Advanced Materials",
-"SCSMP Science China Series Mathematics Physics Astronomy Technological Sciences",
-"SciDi Science Dimension",
-"SciEd Science Education",
-"ScEdR Science Education Research",
-"SFCh. Science Foundation in China",
-"ScChA Science in China A: Mathematics",
-"ScChB Science in China B: Chemistry",
-"ScChC Science in China C: Life Sciences",
-"ScChD Science in China D: Earth Sciences",
-"ScChE Science in China E: Technological Sciences",
-"ScChF Science in China F: Information Sciences",
-"ScChG Science in China G: Physics and Astronomy",
-"SISN. Science Information Systems Newsletter",
-"SciN. Science News",
-"ScTEn Science of the Total Environment",
-"ScPr. Science Progress",
-"Scis. Sciences",
-"SciB. Scientia (Bologna)",
-"SciSn Scientia Sinica",
-"SSPMA Scientia Sinica Physica, Mechanica &amp",
-"SSSMP Scientia Sinica Series Mathematical Physical Technical Sciences",
-"SciAm Scientific American",
-"SMS.. Scientific Modeling and Simulation SMNS",
-"Scim. Scientometrics",
-"SRToh Sci. Rep. Tohoku Univ. Eighth Ser.",
-"SFSN. Scripta Faculty Science Nat. Ujep Brunensis Physica",
-"ScM.. Scripta Metallurgica",
-"ScMM. Scripta Metallurgica et Materialia",
-"SedG. Sedimentary Geology",
-"Sedim Sedimentology",
-"SeiKa Seikei-Kakou",
-"BSSA. Seismological Society America Bulletin",
-"SEGeo Seismology and Exploration Geophysics",
-"STSSP Selected Topics in Solid State Physics",
-"Semic Semiconductors",
-"SeScT Semiconductor Science Technology",
-"SeSTS Semiconductor Science Technology Supplement",
-"TrKra Seminar Kraevym Zadacham Trudy",
-"SCB.. Seminars in Cancer Biology",
-"SDia. Seminars in Dialysis",
-"GEOCS Semi-Regular Variables",
-"SenAR Sendai Astronomiaj Raportoj",
-"SenIm Sensing and Imaging",
-"SPTS. Sensor Physics and Technology Series",
-"SeRv. Sensor Review",
-"SeAc. Sensors and Actuators",
-"SeAcA Sensors and Actuators A Physical",
-"SeAcB Sensors and Actuators B Chemical",
-"SAERI Seoul Korea Atomic Energy Research Institute",
-"SanS. Separata Universidad de Chile Departamento de Astronomia Santiago",
-"SerAJ Serbian Astronomical Journal",
-"AnShO Shanghai Observatory Annals",
-"SV... Shock and Vibration",
-"SVD.. Shock Vibration Digest",
-"SVICB Shock Vibration Information Center Shock Vibration Bulletin",
-"SVICP Shock Vibration Information Center Shock Vibration Computer Programs",
-"SVICD Shock Vibration Information Center Shock Vibration Digest",
-"SVICI Shock Vibration Information Center Shock Vibration Inform Digest",
-"ShWav Shock Waves",
-"SJAM. SIAM Journal of Applied Mathematics",
-"SJCO. SIAM Journal of Control Optimization",
-"SJMA. SIAM Journal of Mathematical Analysis",
-"SJADS SIAM Journal on Applied Dynamical Systems",
-"SJNA. SIAM Journal on Numerical Analysis",
-"SIAMR SIAM Review",
-"SiMaJ Siberian Mathematical Journal",
-"SiFTZ Sibirskii Fiziko Tekhnicheskii Zhurnal",
-"JCMSI SICE Journal of Control, Measurement, and System Integration",
-"SidM. Sidereal Messenger",
-"SIDPQ SID Proceedings Quarter",
-"SiFoE Siemens Forschungs und Entwicklungsberichte",
-"SIGMA SIGMA",
-"Sig.. Signal",
-"SigPr Signal Processing",
-"Simul Simulation",
-"SiMol Single Molecules",
-"SZPA. SIRIUS. Zeitschrift fuer Populaere Astronomie",
-"Situ. Situ",
-"SkInq Skeptical Inquirer",
-"SRT.. Skin Research and Technology",
-"SkyN. Sky News",
-"SlaOb Slaboproudy Obzor",
-"SJCE. Slovak Journal of Civil Engineering",
-"SBE.. Small Business Economics",
-"SMaS. Smart Material Structures",
-"Smith Smithsonian",
-"SCoA. Smithsonian Contributions to Astrophysics",
-"SCoK. Smithsonian Contributions to Knowledge",
-"SmCES Smithsonian Contributions to the Earth Sciences",
-"SSS.. Social Studies of Science",
-"MSAIQ Societa Astronomica Italiana Memorie Quarter",
-"SFPTB Societe Francaise de Photogrammetrie et de Teledetection Bulletin",
-"SASS. Society for Astronomical Sciences Annual Symposium",
-"SEEJ. Society of Environmental Engineers Journal",
-"SIAM. Society of Industrial and Applied Mathematics",
-"SIBAN Sofia Izdatel Bolgarskoi Akademii Nauk",
-"SMat. Soft Matter",
-"SSSAJ Soil Science Society of America Journal",
-"SoCe. Solar Cells",
-"SoEn. Solar Energy",
-"SoEnM Solar Energy Materials",
-"SoPh. Solar Physics",
-"SoSyR Solar System Research",
-"STERJ Solar Terrestrial and Environmental Research Japan",
-"SolE. Solid Earth",
-"SolED Solid Earth Discussions",
-"SMArc Solid Mechanics Archives",
-"SSCom Solid State Communications",
-"SSEle Solid State Electronics",
-"SSIon Solid State Ionics",
-"SSNMR Solid State Nuclear Magnetic Resonance",
-"SSPAR Solid State Physics Advances in Research and Applications",
-"SSPAS Solid State Physics Advances in Research and Applications Supplement",
-"SSSci Solid State Sciences",
-"SSTec Solid State Technology",
-"BSolD Solnechnye Dann. Bull. Akad. Nauk SSSR",
-"SoKie Sonderdrucke der Sternwarte Kiel",
-"SoMue Sonderdrucke Universitaet Muenster Astronomisches Institut",
-"Sonne Sonne",
-"SoShe Soobshchenie Shemakhinskoj Astrofizicheskoj Observatorii",
-"SoByu Soobshcheniya Byurakanskoj Observatorii Akademiya Nauk Armyanskoj SSR Erevan",
-"SoSht Soobshcheniya Gosudarstvennogo Astronomicheskogo Instituta",
-"SoSAO Soobshcheniya Spetsial'noj Astrofizicheskoj Observatorii",
-"SMTS. Soprotivlenie Materialov i Teoriia Sooruzhenii",
-"SSHMP Sources and Studies in the History of Mathematics and Physical Sciences",
-"SHMPS Sources in the History of Mathematics and Physical Sciences",
-"SAAOC South African Astronomical Observatory Circular",
-"SAAOR South African Astronomical Observatory Republic",
-"SAJPh South African Journal of Physics",
-"SAJSc South African Journal of Science",
-"SouSt Southern Stars",
-"IBSAE Sovetskaia Antarkticheskaia Ekspeditsiia Informatsionnyi Byulleten",
-"SovAe Soviet Aeronomii",
-"SvApM Soviet Applied Mechanics",
-"SvA.. Soviet Astronomy",
-"SvAL. Soviet Astronomy Letters",
-"JETP. Soviet Journal of Experimental and Theoretical Physics",
-"JETPL Soviet Journal of Experimental and Theoretical Physics Letters",
-"SvJNP Soviet Journal of Nuclear Physics",
-"SvJOT Soviet Journal of Optical Technology",
-"SvJPP Soviet Journal of Plasma Physics",
-"SvJQE Soviet Journal of Quantum Electronics",
-"SvPAC Soviet Physics Acoustics",
-"SvPhA Soviet Physics Astronomy",
-"SvPC. Soviet Physics Crystallography",
-"SPhD. Soviet Physics Doklady",
-"SvPhJ Soviet Physics Journal",
-"SvPS. Soviet Physics Semiconductors",
-"SvPSS Soviet Physics Solid State",
-"SPTP. Soviet Physics Technical Physics",
-"SvPhU Soviet Physics Uspekhi",
-"SvRP. Soviet Radiophysics",
-"SSRvA Soviet Scientific Reviews A Physics Reviews",
-"SSRvC Soviet Scientific Reviews C Mathematical Physics Reviews",
-"SSRvD Soviet Scientific Reviews D Physicochemical Biology Reviews",
-"SSRvE Soviet Scientific Reviews E Astrophysics and Space Physics Reviews",
-"SvTRv Soviet Technology Reviews",
-"Space Space",
-"SSPRv Space and Solar Power Review",
-"SpCoB Space Communication Broadcasting",
-"SpCom Space Communications",
-"SpEd. Space Education",
-"SpFl. Spaceflight",
-"SLSci Space Life Sciences",
-"SpMar Space Markets",
-"SpMME Space Medicine Medical Engineering",
-"SpPol Space Policy",
-"SpPow Space Power",
-"SPRMD Space Power - Resources, Manufacturing and Development",
-"SpRBu Space Research Bulgaria",
-"SpReT Space Research Today",
-"SSI.. Space Science Instrumentation",
-"SSRv. Space Science Reviews",
-"SpT.. Space Technology",
-"STICA Space Technology Industrial and Commercial Applications",
-"STECF Space Telescope European Coordinating Facility Newsletter",
-"Spvw. Spaceview",
-"SpWea Space Weather",
-"SpWd. Space World",
-"SpWdU Space World U",
-"SpWdW Space World W",
-"SpWdY Space World Y",
-"Spark Spark, the AAS Education Newsletter",
-"VatAR Specola Astronomica Vaticana Annual Reports",
-"AtlSV Specola Astronomica Vaticana Atlas Stellarum Variabilium",
-"VatCo Specola Astronomica Vaticana Comunicazione",
-"VatMA Specola Astronomica Vaticana Miscellanea Astronomica",
-"VatPS Specola Astronomica Vaticana Pubblicazioni Serie Seconda",
-"VatRS Specola Astronomica Vaticana Ricerche Spettroscopiche",
-"VatRA Specola Astronomica Vaticana Richerche Astronomiche",
-"AcSpe Spectrochimica Acta",
-"AcSpA Spectrochimica Acta Part A: Molecular Spectroscopy",
-"SpecL Spectroscopy Letters",
-"SRMO. Specula Regia Monachiensi Observationes astronomicae",
-"SScT. Speculations in Science and Technology",
-"Spika Spika",
-"SpEng Sports Engineering",
-"SSSSc Springer Series in Surface Sciences",
-"STMP. Springer Tracts in Modern Physics",
-"SSCP. Springer Verlag Springer Series on Chemical Physics",
-"SSEp. Springer Verlag Springer Series on Electrophysics",
-"SSGSR Springer Verlag Springer Series on Group Geophysics Space Research",
-"SSOS. Springer Verlag Springer Series on Optical Sciences",
-"SVPCS Springer Verlag Springer Series on Physics Chemistry Space",
-"SSSSS Springer Verlag Springer Series on Solid State Sciences",
-"SSSyn Springer Verlag Springer Series on Synergetics",
-"SSWP. Springer Verlag Springer Series on Wave Phenomena",
-"SprRe Sproul Observatory Reprints",
-"SrLJP Sri Lankan Journal of Physics",
-"SANUG Srpska Akademiia Nauka i Umetnosti Glas Odeljenje Tekhnichkikh Nauka",
-"SRXPh SRX Physics",
-"StarD StarDate Magazine",
-"StSky Star Sky",
-"StMet Statistical Methodology",
-"StaSc Statistical Science",
-"StCom Statistics and Computing",
-"StReL Staub Reinhaltung Luft",
-"SMSPS Stephan Mueller Special Publication Series",
-"Sterz Sternzeit Mitteilungen der Astrnomischen Vereinigungen Aachen",
-"IEWS. Stevenage Herts England Peter Peregrinus Ltd IEE Electromagnetic Waves Series",
-"SteRe Steward Observatory Reprints",
-"TriTr STLE Tribology Transactions",
-"SAA.. Stochastic Analysis and Applications",
-"SHH.. Stochastic Hydrology and Hydraulics",
-"SSRp. Stochastics and Stochastics Reports",
-"StoAn Stockholms Observatoriums Annaler",
-"StoMe Stockholms Observatoriums Meddelande",
-"StoOR Stockholms Observatoriums Reports",
-"Strab Strabismus",
-"Strai Strain",
-"SGC.. Stratigraphy and Geological Correlation",
-"Stroj Strojarstvo",
-"StAst Strolling Astronomer",
-"StrOp Structural Optimization",
-"SASn. Studia Astronomica Sinica",
-"StBio Studia Biophysica",
-"StGG. Studia Geophysica et Geodaetica",
-"StuMa Studia Mathematica",
-"SSTor Studia Societatis Scientiarum Torunensis Sectio F Astronomia",
-"StAM. Studies in Applied Mathematics",
-"SCMP. Studies in Condensed Matter Physics",
-"SGORS Studies in Geophysical Optics and Remote Sensing",
-"StGeo Studies in Geophysics",
-"StHEP Studies in High Energy Physics",
-"StHCG Studies in High Energy Physics Cosmology and Gravitation",
-"StMaP Studies in Mathematical Physics",
-"StPTC Studies in Physical and Theoretical Chemistry",
-"SScEd Studies in Science Education",
-"StHPM Studies in the History and Philosophy of Modern Physics",
-"StHMP Studies in the History of Mathematics and the Physical Sciences",
-"Sttur Studies in turbulence",
-"SCA.. Studii si Cercetari de Astronomie Bucuresti",
-"StCeF Studii si Cercetari de Fizica",
-"StCeM Studii si Cercetari Matematice",
-"StCMA Studii si Cercetary de Mecanica Aplicata",
-"SSTA. Subsurface Sensing Technologies and Applications",
-"SunGe Sun and Geosphere",
-"Sunwo Sunworld",
-"SuScT Superconductor Science Technology",
-"SuMi. Superlattices and Microstructures",
-"JPhSu Supplement au Journal de Physique",
-"AnMuS Supplementband zu den Annalen der Munchener Sternwarte",
-"SAnAp Supplements aux Annales d'Astrophysique",
-"SuCT. Surface and Coatings Technology",
-"SurIA Surface and Interface Analysis",
-"SRL.. Surface Review and Letters",
-"SurSc Surface Science",
-"SurSL Surface Science Letter",
-"SurSR Surface Science Reports",
-"SurSS Surface Science Spectra",
-"SGeo. Surveys in Geophysics",
-"SHEP. Surveys in High Energy Physics",
-"SvPro Svarochnoe Proizvodstvo",
-"SvUNT Sverdlovsk Ural skii Nauchnyi Tsentr AN SSSR",
-"SydOP Sydney Observatory Papers",
-"SynMe Synthetic Metals",
-"SAMS. Systems Analysis Modelling Simulation",
-"SyTec Systems Technology",
-"TMPGO Tagung ueber Mathematische Probleme Geodaesie Oberwolfach West Germany Bulleting Geodesique",
-"TANEs Tartu Akademiia Nauk Estonskoi SSR",
-"TarPr Tartu Astrofizicheskoj Observatorii Preprint",
-"TarOT Tartu Astrofuusika Observatoorium Teated",
-"IzTas Tashkent Izdatel Fan",
-"IzGeo Tbilisi Georgian SSR Izdatel Metsniereba",
-"TIzSS Tbilisi Izdatel Sabchota Sakartvelo",
-"TecN. Technical News",
-"TePhL Technical Physics Letters",
-"TeLoA Technika Lotnicza i Astronautyczna",
-"TBBM. Techniques of Biochemical and Biophysical Morphology",
-"TPhy. Techniques of Physics",
-"TMKF. Technische Mitteilungen Krupp Forschungsberichte",
-"TUnGG Technische Univ Geodesy Global Geodyn",
-"ToIzL Technisch oekonomische Informationen zivilen Luftfahrt",
-"Tech. Technology",
-"TeCu. Technology and Culture",
-"TecRv Technology Review",
-"Tecto Tectonics",
-"Tectp Tectonophysics",
-"TekEl Tekhnicheskaia Elektrodinamika",
-"TJAu. Telecommunication Journal of Australia",
-"TDAPR Telecommunications and Data Acquisition Progress Report",
-"TMOPR Telecommunications and Mission Operations Progress Report",
-"TRET. Telecommunications and Radio Engineering Telecommunications",
-"TelIn Telematics Informatics",
-"Telet Telettra S",
-"Tell. Tellus",
-"TellA Tellus Series A",
-"TellB Tellus Series B Chemical and Physical Meteorology B",
-"TSDMO Tellus Series Dynamic Meteorology and Oceanography",
-"TeoEl Teoreticheskaia Elektrotekhnika",
-"TeoPM Teoreticheskaia i Prikladnaia Mekhanika",
-"TFFAP Teoriia Funktsii Funktsional nyi Analiz i ikh Prilozheniia",
-"TeoVP Teoriia Veroiatnostei i ee Primeneniia",
-"Teplo Teploenergetika",
-"Tepsg Teplofizicheskie svoistva gazov",
-"TepT. Teplofizika i Teplotekhnika",
-"TepVT Teplofizika Vysokikh Temperatur",
-"TFizG Teploobmen i Fizicheskaia Gazodinamika",
-"TNEK. Teplovye Napriazheniia Elementakh Konstruktsii",
-"TeMAE Terrestrial Magnetism and Atmospheric Electricity (Journal of Geophysical Research)",
-"TeMag Terrestrial Magnetism (Journal of Geophysical Research)",
-"Tesla TESLA Electronics",
-"TTPhy Teubner Texte zur Physik",
-"TexMi Textures and Microstructures",
-"Ana.. The Analyst",
-"Agrph The Astrograph",
-"Astr. The Astronomer",
-"ATel. The Astronomer's Telegram",
-"AJ... The Astronomical Journal",
-"AJS.. The Astronomical Journal Supplement",
-"AstRv The Astronomical Review",
-"ApJ.. The Astrophysical Journal",
-"ApJL. The Astrophysical Journal Letters",
-"ApJS. The Astrophysical Journal Supplement Series",
-"BJHS. The British Journal for the History of Science",
-"BJPS. The British Journal for the Philosophy of Science",
-"BuSSA The Bulletin of the Seismological Society of America",
-"ComRv The Communication Review",
-"CompJ The Computer Journal",
-"TCD.. The Cryosphere Discussions",
-"EMBO. The EMBO Journal",
-"JAS.. The Journal of Agricultural Science",
-"JChTh The Journal of Chemical Thermodynamics",
-"JFin. The Journal of Finance",
-"MatMo The Mathematical Monthly",
-"Msngr The Messenger",
-"Neuro The Neuroscientist",
-"INGN. The Newsletter of the Isaac Newton Group of Telescopes",
-"Obs.. The Observatory",
-"OAcJ. The Open Acoustics Journal",
-"OAeEJ The Open Aerospace Engineering Journal",
-"OAPJ. The Open Applied Physics Journal",
-"OAJ.. The Open Astronomy Journal",
-"OASJ. The Open Atmospheric Science Journal",
-"OCPJ. The Open Chemical Physics Journal",
-"OCMPJ The Open Condensed Matter Physics Journal",
-"OGC.. The Open Geology Journal",
-"OHJ.. The Open Hydrology Journal",
-"OMEJ. The Open Mechanical Engineering Journal",
-"OMJ.. The Open Mechanics Journal",
-"OMnJ. The Open Mineralogy Journal",
-"OMPJ. The Open Mineral Processing Journal",
-"ONJ.. The Open Nanoscience Journal",
-"ONPPJ The Open Nuclear &amp",
-"ONMJ. The Open Numerical Methods Journal",
-"OOcJ. The Open Oceanagraphy Journalurnal",
-"OOEJ. The Open Ocean Engineering Journal",
-"OOJ.. The Open Optics Journal",
-"OPalJ The Open Paleontology Journal",
-"OPCJ. The Open Physical Chemistry Journal",
-"OPPJ. The Open Plasma Physics Journal",
-"ORSJ. The Open Remote Sensing Journal",
-"OREJ. The Open Renewable Energy Journal",
-"OSPJ. The Open Signal Processing Journal",
-"OSpeJ The Open Spectroscopy Journal",
-"OSuJ. The Open Superconductors Journal",
-"OSSJ. The Open Surface Science Journal",
-"AcTC. Theoretica Chimica Acta",
-"ThApC Theoretical and Applied Climatology",
-"ThAFM Theoretical and Applied Fracture Mechanics",
-"TAM.. Theoretical and Applied Mechanics",
-"ThCFD Theoretical and Computational Fluid Dynamics",
-"TMP.. Theoretical and Mathematical Physics",
-"ThAst Theoretical Astrophysics",
-"TPAG. Theory and Practice of Applied Geophysics",
-"PhTea The Physics Teacher",
-"PlJ.. The Plant Journal",
-"QJMat The Quarterly Journal of Mathematics",
-"QJPAM The Quarterly Journal of Pure and Applied Mathematics",
-"RamJ. The Ramaujan Journal",
-"RvES. The Review of Economic Studies",
-"ThEng Thermal Engineering",
-"TSE.. Thermal Science and Engineering",
-"SJCLI The Scandinavian Journal of Clinical and Laboratory Investigation",
-"SciMo The Scientific Monthly",
-"TSF.. Thin Solid Films",
-"TETB. Thyssen Edelstahl Technische Berichte",
-"TrTIM Tiflis Izdatel Metsniereba Akademiia Nauk Gruzinskoi SSR Institut Geofiziki Trudy",
-"TrGru Tiflis Izdatel Metsniereba Akademiia Nauk Gruzinskoi SSR Matematicheskii Institut Trudy",
-"IzTif Tiflis Izdatel Tbilisskogo Universiteta",
-"CorTi Tirada Aparte Universidad Nacional de Cordoba Argentina Observatorio Astronomico",
-"TiEng Tissue Engineering",
-"TNKS. Tochnost i Nadezhnost Kiberneticheskikh Sistem",
-"TSRSG Tohoku University Science Reports Series Geophysics",
-"TokAB Tokyo Astronomical Bulletin",
-"TokRe Tokyo Astronomical Observatory Reprints",
-"TUFER Tokyo Denki University Faculty of Engineering Research Reports",
-"TAEMm Tokyo Metropolitan College Aeronautical Engineering Memoirs",
-"TUFEJ Tokyo University Faculty of Engineering Journal Series",
-"TUISR Tokyo University Institute Industrial Science Report",
-"TUASB Tokyo University Institute of Space and Aeronautical Science Bulletin",
-"TUASR Tokyo University Institute of Space and Aeronautical Science Report",
-"TIOA. Tomsk Institut Optiki Atmosfery CO AN SSSR",
-"TApPh Topics in Applied Physics",
-"TAASS Topics in Astrophysics, Astrononmy, and Space Science",
-"ToCat Topics in Catalysis",
-"TCPh. Topics in Current Physics",
-"TPhCh Topics in Physical Chemistry",
-"ToASC Torino Accademia delle Scienze Classe di Scienze Fisiche Matematiche e Naturali Atti",
-"TosRv Toshiba Review",
-"TouCE Toulouse Cepadues Editions",
-"TrSpT Transactions of Space Technology Japan",
-"TAGU. Transactions of the American Geophysical Union",
-"TAMS. Transactions of the American Mathematical Society",
-"TAPS. Transactions of the American Philosophical Society",
-"TOYal Transactions of the Astronomical Observatory of Yale University",
-"TCaPS Transactions of the Cambridge Philosophical Society",
-"TIMC. Transactions of the Institute of Measurement and Control",
-"TISCI Transactions of the Institute of Systems, Control and Information Engineers",
-"IAUTA Transactions of the International Astronomical Union, Series A",
-"IAUTB Transactions of the International Astronomical Union, Series B",
-"TIUCS Transactions of the International Union for Cooperation in Solar Research",
-"TJSAI Transactions of the Japanese Society for Artificial Intelligence",
-"TATJ. Transactions of the Japanese Society for Artificial Intelligence, Aerospace Technology Japan",
-"TJSIE Transactions of The Japanese Society of Irrigation, Drainage and Rural Engineering",
-"TRACE Transactions of the Japan Society of Refrigerating and Air Conditioning Engineers",
-"TLHSQ Transactions of the Literary and Historical Society of Quebec",
-"TrOS. Transactions of the Optical Society",
-"TSICE Transactions of the Society of Instrument and Control Engineers",
-"TPM.. Transport in Porous Media",
-"TTSP. Transport Theory and Statistical Physics",
-"TvOC. Transvaal Observatory Circular",
-"TSSLW Travaux de la Societe des Sciences et des Letters de Wroclaw",
-"TOMar Travaux de l'Observatoire de Marseille",
-"TraGe Travaux Geophysiques",
-"TrGeo Treatise on Geochemistry",
-"TTP.. Trends in Theoretical Physics",
-"TriL. Tribology Letters",
-"TrLit Trudy Akademiia Nauk Litovskoi",
-"TrSSR Trudy Akademiia Nauk SSSR Fizicheskii Institut",
-"TrAlm Trudy Astrofizicheskogo Instituta Alma-Ata",
-"TrRig Trudy Astrofiz. Lab. Riga",
-"TrLen Trudy Astronomicheskoj Observatorii Leningrad",
-"TrPul Trudy Glavnoj Astronomicheskoj Observatorii v Pulkovo",
-"TrSht Trudy Gosudarstvennogo Astronomicheskogo Instituta",
-"TrDus Trudy Instituta Astrofiziki Dushanbe",
-"TrSta Trudy Instituta Astrofiziki Stalinabad",
-"TrKaz Trudy Kazanskaia Gorodkoj Astronomicheskoj Observatorii",
-"TrMMO Trudy Moskovskoe Matematicheskoe Obshchestvo",
-"TrPet Trudy Seminar imeni G Petrovskogo",
-"TrTas Trudy Tashkentskoj Astronomicheskoj Observatorii",
-"TrTsA TsAGI Trudy",
-"ZaTsA TsAGI Uchenye Zapiski",
-"TrTsI TsIAM Trudy",
-"TsHUJ Tsing Hua University Journal",
-"TITas Tsirkulyar Astronomicheskogo Instituta Akademiya Nauk Uzbekskoj SSR",
-"TsLvo Tsirkulyar Astronomicheskoj Observatorii Lvov",
-"TsShe Tsirkulyar Shemakhinskoj Astrofizicheskoj Observatorii",
-"TsSta Tsirkulyar Stalinabadskoj Astronomicheskoj Observatorii",
-"TsTas Tsirkulyar Tashkentskoj Astronomicheskoj Observatorii",
-"TsVse Tsirkulyar Vses. astron.-geod. o-va",
-"TsPul Tsirkulyary Glavnoj Astronomicheskoj Observatorii i Pulkove",
-"TUAID Tuebingen Universitaet Astronomisches Institut Diplomarbeit",
-"TJJPT Tuijin Jishu Journal of Propulsion Technology",
-"TurTe Turbulentnye techeniia",
-"TJPh. Turkish Journal of Physics",
-"UkJPO Ukrainian Journal of Physical Optics",
-"UkFiZ Ukrainskii Fizicheskii Zhurnal",
-"UkMaZ Ukrainskii Matematicheskii Zhurnal",
-"Ultmi Ultramicroscopy",
-"UltIm Ultrasonic Imaging",
-"Ultra Ultrasonics",
-"Umsch Umschau",
-"USOC. Unified System Orbit Computation USOC",
-"UMIB. Unione Matematica Italiana Bollettino",
-"UNPSA United Nations Programme on Space Applications",
-"UniCl Universe Classroom",
-"UNAer Universita di Napoli Aeritalia S",
-"UCAFR Universitas Comeniana Acta Facultatis Rerum Naturalium Physica",
-"UMt1K Universite de Montpellier",
-"UECBu University Electro Communications Bulletin",
-"UnECR University Electro Communications Reports",
-"StARe University Observatory St. Andrews Scotland Reprints",
-"HawRe University of Hawaii Reprints",
-"ADUrb University of Illinois Astronomy Department Urbana Illinois",
-"MicRe University of Michigan Observatory Reprints",
-"XXFD. University of Minnesota 1969 (XXFD)",
-"LP... University of Minnesota Minneapolis",
-"OklRe University of Oklahoma Observatory Reprints",
-"MAUTx University of Texas Monographs in Astronomy",
-"PAUTx University of Texas Publications in Astronomy",
-"Unpub Unpublished",
-"UAPET Updates in Applied Physics and Electrical Technology",
-"UppAn Uppsala Astronomical Observatory Annals",
-"UppOR Uppsala Astronomical Observatory Reports",
-"USM.. Upravliaiushchie Sistemy i Mashiny",
-"UrBar Urania (Bracelona)",
-"Urani Urania (Krakow)",
-"UrMad Urania (Madrid)",
-"UGSJR U S Geological Survey Journal Research",
-"USNOC U.S. Naval Observatory Circulars",
-"USNOR U.S. Naval Observatory Reports",
-"UsFiN Uspekhi Fizicheskikh Nauk",
-"UMAM. Uspekhi Mekhaniki Advances Mechanics",
-"RpCCA USSR Report Cybernetics Computers Automation Technology JPRS UCC",
-"RpESc USSR Report Earth Sciences JPRS UES",
-"RpSpR USSR Report Space",
-"RpBAM USSR Report Space Biology Aerospace Medicine JPRS USB",
-"RpEEE USSR Rept Electron Elec Eng JPRS UEE",
-"RpEn. USSR Rept Energy JPRS UEN",
-"RpEE. USSR Rept Eng Equipment JPRS UEQ",
-"RLSBB USSR Rept Life Sci Biomed Behavioral Sci JPRS",
-"RMTME USSR Rept Machine Tools Metalworking Equipment JPRS UMM",
-"RpMSM USSR Rept Mater Sci Met JPRS",
-"RpPhM USSR Rept Phys Math JPRS UPM",
-"RSBAM USSR Rept Space Biol Aerospace Med Jun JPRS",
-"RpSBA USSR Rept Space Biol Aerospace Med Sep",
-"RpTr. USSR Rept Transportation JPRS UTR",
-"UtMat Utilitas Mathematica",
-"UtrOv Utrechtse Sterrekundige Overdrukken",
-"Vacuu Vacuum",
-"VVORe Van Vleck Observatory Reprints",
-"VSOLB Variable Star Observers League in Japan - Bulletin",
-"Vasio Vasiona",
-"VatOP Vatican Observatory Publications",
-"VDIF. VDI Forschungsheft",
-"VDIZ. VDI Z",
-"VDIZF VDI Zeitschriften Fortschritt Berichte Reihe Stroemungstechnik",
-"VSD.. Vehicle System Dynamics",
-"VKAWA Verhandelingen der Koninklijke Akademie van Wetenschappen te Amsterdam",
-"Verme Vermessungstechnik",
-"VeWFS Veroeffentlichung der Wilhelm Foerster Sterwarte",
-"ViHei Veroeffentlichungen der Badischen Landes-Sternwarte zu Heidelberg",
-"VeHei Veroeffentlichungen der Badischen Sternwarte zu Heidelberg",
-"VeGG. Veroeffentlichungen der Geod. Geophys",
-"VeKar Veroeffentlichungen der Grossherzoglichen Sternwarte zu Karlsruhe",
-"VeBam Veroeffentlichungen der Remeis-Sternwarte zu Bamberg",
-"VeBab Veroeffentlichungen der Sternwarte Babelsberg",
-"VeMun Veroeffentlichungen der Sternwarte Munchen",
-"VeSon Veroeffentlichungen der Sternwarte Sonneberg",
-"VeKie Veroeffentlichungen der Universitaets-Sternwarte Kiel",
-"VeKoe Veroeffentlichungen der Universitaets-Sternwarte Koenigsberg Pr.",
-"VeBB. Veroeffentlichungen der Universitaetssternwarte zu Berlin-Babelsberg",
-"VeGoe Veroeffentlichungen der Universitaets-Sternwarte zu Goettingen",
-"VeJen Veroeffentlichungen der Universitaets-Sternwarte zu Jena",
-"VeLei Veroeffentlichungen der Universitaetssternwarte zu Leipzig",
-"VeBoc Veroeffentlichungen des Astronomischen Instituts der Ruhr-Universitaet Bochum",
-"VeARI Veroeffentlichungen des Astronomischen Rechen-Instituts Heidelberg",
-"VeABD Veroeffentlichungen des Astronomischen Rechen-Instituts zu Berlin-Dahlem",
-"VeBon Veroeffentlichungen des Astronomisches Institute der Universitaet Bonn",
-"VeFra Veroeffentlichungen des Astronomisches Institute der Universitaet Frankfurt",
-"VeBKI Veroeffentlichungen des Bayerische Kommission Int. Erdmessung",
-"VeKAB Veroeffentlichungen des Koeniglichen Astronomischen Rechen-Instituts zu Berlin",
-"VeZPE Veroffentlichungen des Zentralinstituts Physik der Erde",
-"VMKAN Verslagen en Mededeelingen der Kon. Academie van Wetenschappen, Afd. Natuurkunde",
-"VeLdn Verslag van den staat der Sterrewacht te Leiden",
-"Vert. Vertica",
-"Vertf Vertiflite",
-"Vesmi Vesmir",
-"VKha. Vestnik Khar'kovskogo Universiteta",
-"VeKha Vestnik Khar'kov Universitet",
-"VKie. Vestnik Kievskogo Universiteta Seriya Astronomii",
-"VeLGU Vestnik LGU",
-"VeMos Vestnik Moskovskogo Universiteta Seriya 3 Fizika Astronomiya",
-"VISBD Vibration Inst Shock Vibration Digest",
-"VIAEA Vienna International Atomic Energy Agency",
-"VAG.. Vierteljahresschrift der Astronomischen Gesellschaft",
-"VMed. Vierteljahrschrift für Gerichtliche Medizin und Öffentliches Sanitätswesen",
-"VNG.. Vierteljahrsschrift der Naturforschenden Gesellschaft in Zürich",
-"VilCo Villanova University Observatory Contributions",
-"VilOB Vilnius Astronomijos Observatorijos Biuletenis",
-"IzVil Vilnius Izdatel Mokslas",
-"VJS.. Virginia Journal of Science",
-"VisKi Visnik Kiiv. Univ., Fiz.-Mat. Nauki, Astron",
-"ViGeo Vissha Geodeziia",
-"VA... Vistas in Astronomy",
-"VTJ.. Vitro Technical Journal",
-"yCat. VizieR Online Data Catalog",
-"yCatp VizieR Online Data Catalog",
-"VADVS VKI Advanced Design of Ventilation Systems",
-"VICFD VKI An Introduction to Computational Fluid Dynamics",
-"VIMT. VKI An Introduction to Modeling Turbulence",
-"VAFC. VKI Axial Flow Compressors",
-"VBLT. VKI Boundary Layers in Turbomachines",
-"VCCPP VKI Combined Cycles for Power Plants",
-"VCFD. VKI Computational Fluid Dynamics",
-"VCFDI VKI Computational Fluid Dynamics for Industrial Flows",
-"VCGFV VKI Computer Graphics Flow Visualization and Computational Fluid Dynamics",
-"VGTET VKI Gas Turbine Engine Transient Behaviour",
-"VIHE. VKI Industrial Heat Exchangers",
-"VKILV VKI Laser Velocimetry",
-"VKIMT VKI Measurement and Techniques",
-"VMTA. VKI Measurement Techniques in Aerodynamics",
-"VMHT. VKI Methodology Hypersonic Testing",
-"VMATP VKI Modeling and Applications of Transport Phenomena in Porous Media",
-"VADMT VKI New Approaches in the Description and Modeling of Turbulence",
-"VNGG. VKI Numerical Grid Generation",
-"VNMFT VKI Numerical Methods for Flows in Turbomachinery",
-"VPIDV VKI Particle Image Displacement Velocimetry",
-"VKIRT VKI Radial Turbines",
-"VKISP VKI Spacecraft Propulsion",
-"VTSF. VKI Turbulent Shear Flows",
-"VVRD. VKI Vibration Rotor Dynamics",
-"VLSID VLSI Design",
-"VAC.. Voies Aviation Civile Fall Winter",
-"VANTS Voprosy Atomnoi Nauki i Tekhniki Seriia Fizika Plazmy i Problemy Upravliaemykh Termoiadernykh Reaktsii",
-"VopDP Voprosy Dinamiki i Prochnosti",
-"VETT. Voprosy Elektroniki Tverdogo Tela",
-"VopGA Voprosy Gidrodinamiki Atmosfery",
-"VopK. Voprosy Kibernetiki",
-"VMOIP Voprosy Metrologicheskogo Obespecheniia Izmereniia Parametrov Tekhnologicheskikh Lazerov",
-"VoTAS Voprosy Teorii Atomnykh Stolknovenii",
-"VopTP Voprosy Teorii Plazmy",
-"VTSAU Voprosy Teorii Sistem Avtomaticheskogo Upravleniia",
-"VossZ Vossische Zeitung",
-"IzYak Vsesoiuznaia Konferentsiia Kosmicheskim Lucham Yakutsk USSR Akademiia Nauk SSSR Izvestiia Seriia Fizicheskaia",
-"IzYer Vsesoiuznaia Konferentsiia Kosmicheskim Lucham Yerevan Armenian SSR Aademiia Nauk SSSR Izvestiia Seriia Fizicheskaia",
-"RaUkr Vsesoiuznyi Simpozium Difraktsii i Rasprostraneniiu Voln Lvov Ukrainian SSR Radiofizika",
-"VnPM. Vychislitel naia i Prikladnaia Matematika",
-"VnMP. Vychislitel nye Metody i Programmirovanie",
-"VyGeo Vyssha Geodeziia",
-"WarRe Warsaw University Reprints",
-"WasOA Washburn Observatory Astrophysics",
-"GMS.. Washington DC American Geophysical Union Geophysical Monograph Series",
-"WRR.. Water Resources Research",
-"WavEl Wave Electronics",
-"WaMot Wave Motion",
-"WRCM. Waves in Random and Complex Media",
-"WRM.. Waves in Random Media",
-"Wear. Wear",
-"WearB Wear B",
-"Wthr. Weather",
-"WtFor Weather and Forecasting",
-"WeiEn Weight Engineering",
-"WeldJ Welding Journal",
-"Werk. Werkgroepnieuws",
-"JIMO. WGN, Journal of the International Meteor Organization",
-"WilOO Williamstown Observatory Observations",
-"WiEn. Wind Energy",
-"WiEng Wind Engineering",
-"WisBT Wissenschaftliche Berichte AEG Telefunken",
-"WisZe Wissenschaftliche Zeitschrift",
-"WSAAA Workshop Series of the Asociacion Argentina de Astronomia",
-"WCRp. World Climate Report",
-"WJCMP World Journal of Condensed Matter Physics",
-"WJM.. World Journal of Mechanics",
-"WJNSE World Journal of Nano Science and Engineering",
-"WJNST World Journal of Nuclear Science and Technology",
-"WroRe Wroclaw Astronomical Observatory Reprints",
-"Wuli. Wuli",
-"YaFiz Yadernaya Fizika",
-"YalOY Yale University Observatory Reports for the Year",
-"YUFEM Yamaguchi University Faculty of Engineering Memoirs",
-"YUTR. Yamaguchi University Technology Reports",
-"YamC. Yamamoto Circular",
-"ZaDN. Zagadnienia Drgan Nieliniowych",
-"JAMP. ZAMP Journal of Applied Mathematics and Physics",
-"ZaLab Zavodskaia Laboratoriia",
-"ZaMM. Zeitschrift Angewandte Mathematik und Mechanik",
-"ZaMP. Zeitschrift Angewandte Mathematik und Physik",
-"ZFHDG Zeitschrift der Fachsektion Hydrogeologie in der Deutschen Geologischen Gesellschaft",
-"ZeIE. Zeitschrift elektrische Informations und Energietechnik",
-"ZAGeo Zeitschrift fur Angewandte Geographie",
-"ZAPhy Zeitschrift fur Angewandte Physik",
-"ZAAC. Zeitschrift fur Anorganische und Allgemeine Chemie",
-"ZA... Zeitschrift fur Astrophysik",
-"ZEVGA Zeitschrift fur Eisenbahnwesen und Verkehrstechnik Glasers Annalen",
-"ZEAPC Zeitschrift für Elektrochemie und Angewandte Physikalische Chemie",
-"ZFlu. Zeitschrift fur Flugwissenschaften",
-"ZFlWe Zeitschrift fur Flugwissenschaften und Weltraumforschung",
-"ZGm.. Zeitschrift fur Geomorphologie",
-"ZGmS. Zeitschrift fur Geomorphologie Supplement",
-"ZGeo. Zeitschrift fur Geophysik",
-"ZGlGl Zeitschrift fur Gletscherkunde und Glazialgeologie",
-"ZK... Zeitschrift fur Kristallographie",
-"ZKMP. Zeitschrift fur Kristallographie Mineralogie und Petrographie",
-"ZKS.. Zeitschrift fur Kristallographie Supplements",
-"ZMP.. Zeitschrift für Mathematik und Physik",
-"ZMetl Zeitschrift fur Metallkunde",
-"ZeMet Zeitschrift fur Meteorologie",
-"ZPhy. Zeitschrift fur Physik",
-"ZPhyA Zeitschrift fur Physik A Hadrons and Nuclei",
-"ZPC.. Zeitschrift fur Physikalische Chemie",
-"ZPCF. Zeitschrift fur Physikalische Chemie Frankfurt",
-"ZPCL. Zeitschrift fur Physikalische Chemie Leipzig",
-"ZPCNF Zeitschrift fur Physikalische Chemie Neue Folge",
-"ZPCW. Zeitschrift fur Physikalische Chemie Wiesbaden",
-"ZPhyB Zeitschrift fur Physik B Condensed Matter",
-"ZPhyC Zeitschrift fur Physik C Particles and Fields",
-"ZPhyD Zeitschrift fur Physik D Atoms Molecules Clusters",
-"ZNatA Zeitschrift Naturforschung Teil A",
-"ZNatB Zeitschrift Naturforschung Teil B",
-"ZePAN Zeitschrift Physik Atomic Nuclei",
-"ZVer. Zeitschrift Vermessungswes.",
-"ZWer. Zeitschrift Werkstofftechnik",
-"ZemVs Zemlia i Vselennaia",
-"Zenit Zenit",
-"MiTau Zentralinstitut fuer Astrophysik Mitteilungen des Karl-Schwarzschild-Observatoriums Tautenburg",
-"MitVS Zentralinstitut fuer Astrophysik Sternwarte Sonneberg Mitteilungen ueber Veraenderliche Sterne",
-"ZhPmR ZhETF Pis ma Redaktsiiu",
-"ZhETF Zhurnal Eksperimental noi i Teoreticheskoi Fiziki",
-"ZhFK. Zhurnal Fizicheskoi Khimii",
-"ZNPFK Zhurnal Nauchnoi i Prikladnoi Fotografii i Kinematografii",
-"ZhPhy Zhurnal Physik",
-"ZhPS. Zhurnal Prikladnoi Spektroskopii",
-"ZhTFi Zhurnal Tekhnicheskoi Fiziki",
-"ZVMMF Zhurnal Vychislitel noi Matematiki i Matematicheskoi Fiziki",
-"ZiZa. Ziran Zazhi",
-"Zprav Zpravodaj VZLU",
-"ZvDeb Zvaigsnota Debess",
-};
-static const int njournals = sizeof( journals ) / sizeof( journals[0] );
diff --git a/support/texlab/crates/bibutils_sys/src/bibcore.c b/support/texlab/crates/bibutils_sys/src/bibcore.c
deleted file mode 100644
index eeab581941..0000000000
--- a/support/texlab/crates/bibutils_sys/src/bibcore.c
+++ /dev/null
@@ -1,1079 +0,0 @@
-/*
- * bibcore.c
- *
- * Copyright (c) Chris Putnam 2005-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include "bibutils.h"
-
-/* internal includes */
-#include "reftypes.h"
-#include "charsets.h"
-#include "str_conv.h"
-#include "is_ws.h"
-#include "msvc_fix.h"
-
-/* illegal modes to pass in, but use internally for consistency */
-#define BIBL_INTERNALIN (BIBL_LASTIN+1)
-#define BIBL_INTERNALOUT (BIBL_LASTOUT+1)
-
-#define debug_set( p ) ( p->verbose > 1 )
-#define verbose_set( p ) ( p->verbose )
-
-static void
-report_params( FILE *fp, const char *f, param *p )
-{
- fprintf( fp, "-------------------params start for %s\n", f );
- fprintf( fp, "\tprogname='%s'\n\n", p->progname );
-
- fprintf( fp, "\treadformat=%d", p->readformat );
- switch ( p->readformat ) {
- case BIBL_INTERNALIN: fprintf( fp, " (BIBL_INTERNALIN)\n" ); break;
- case BIBL_MODSIN: fprintf( fp, " (BIBL_MODSIN)\n" ); break;
- case BIBL_BIBTEXIN: fprintf( fp, " (BIBL_BIBTEXIN)\n" ); break;
- case BIBL_RISIN: fprintf( fp, " (BIBL_RISIN)\n" ); break;
- case BIBL_ENDNOTEIN: fprintf( fp, " (BIBL_ENDNOTEIN)\n" ); break;
- case BIBL_COPACIN: fprintf( fp, " (BIBL_COPACIN)\n" ); break;
- case BIBL_ISIIN: fprintf( fp, " (BIBL_ISIIN)\n" ); break;
- case BIBL_MEDLINEIN: fprintf( fp, " (BIBL_MEDLINEIN)\n" ); break;
- case BIBL_ENDNOTEXMLIN: fprintf( fp, " (BIBL_ENDNOTEXMLIN)\n" ); break;
- case BIBL_BIBLATEXIN: fprintf( fp, " (BIBL_BIBLATEXIN)\n" ); break;
- case BIBL_EBIIN: fprintf( fp, " (BIBL_EBIIN)\n" ); break;
- case BIBL_WORDIN: fprintf( fp, " (BIBL_WORDIN)\n" ); break;
- case BIBL_NBIBIN: fprintf( fp, " (BIBL_NBIBIN)\n" ); break;
- default: fprintf( fp, " (Illegal value)\n" ); break;
- }
- fprintf( fp, "\tcharsetin=%d\n", p->charsetin );
- fprintf( fp, "\tcharsetin_src=%d", p->charsetin_src );
- switch ( p->charsetin_src ) {
- case BIBL_SRC_DEFAULT: fprintf( fp, " (BIBL_SRC_DEFAULT)\n" ); break;
- case BIBL_SRC_FILE: fprintf( fp, " (BIBL_SRC_FILE)\n" ); break;
- case BIBL_SRC_USER: fprintf( fp, " (BIBL_SRC_USER)\n" ); break;
- default: fprintf( fp, " (Illegal value)\n" ); break;
- }
- fprintf( fp, "\tutf8in=%d\n", p->utf8in );
- fprintf( fp, "\tlatexin=%d\n", p->latexin );
- fprintf( fp, "\txmlin=%d\n\n", p->xmlin );
-
- fprintf( fp, "\twriteformat=%d", p->writeformat );
- switch ( p->writeformat ) {
- case BIBL_INTERNALOUT: fprintf( fp, " (BIBL_INTERNALOUT)\n" ); break;
- case BIBL_ADSABSOUT: fprintf( fp, " (BIBL_ADSABSOUT)\n" ); break;
- case BIBL_BIBTEXOUT: fprintf( fp, " (BIBL_BIBTEXOUT)\n" ); break;
- case BIBL_ENDNOTEOUT: fprintf( fp, " (BIBL_ENDNOTEOUT)\n" ); break;
- case BIBL_ISIOUT: fprintf( fp, " (BIBL_ISIOUT)\n" ); break;
- case BIBL_MODSOUT: fprintf( fp, " (BIBL_MODSOUT)\n" ); break;
- case BIBL_NBIBOUT: fprintf( fp, " (BIBL_NBIBOUT)\n" ); break;
- case BIBL_RISOUT: fprintf( fp, " (BIBL_RISOUT)\n" ); break;
- case BIBL_WORD2007OUT: fprintf( fp, " (BIBL_WORD2007OUT)\n" ); break;
- default: fprintf( fp, " (Illegal value)\n"); break;
- }
- fprintf( fp, "\tcharsetout=%d\n", p->charsetout );
- fprintf( fp, "\tcharsetout_src=%d", p->charsetout_src );
- switch ( p->charsetout_src ) {
- case BIBL_SRC_DEFAULT: fprintf( fp, " (BIBL_SRC_DEFAULT)\n" ); break;
- case BIBL_SRC_FILE: fprintf( fp, " (BIBL_SRC_FILE)\n" ); break;
- case BIBL_SRC_USER: fprintf( fp, " (BIBL_SRC_USER)\n" ); break;
- default: fprintf( fp, " (Illegal value)\n" ); break;
- }
- fprintf( fp, "\tutf8out=%d\n", p->utf8out );
- fprintf( fp, "\tutf8bom=%d\n", p->utf8bom );
- fprintf( fp, "\tlatexout=%d\n", p->latexout );
- fprintf( fp, "\txmlout=%d\n", p->xmlout );
- fprintf( fp, "-------------------params end for %s\n", f );
-
- fflush( fp );
-}
-
-/* bibl_duplicateparams()
- *
- * Returns status of BIBL_OK or BIBL_ERR_MEMERR
- */
-static int
-bibl_duplicateparams( param *np, param *op )
-{
- int status;
- slist_init( &(np->asis) );
- slist_init( &(np->corps) );
- status = slist_copy( &(np->asis), &(op->asis ) );
- if ( status!=SLIST_OK ) return BIBL_ERR_MEMERR;
- status = slist_copy( &(np->corps), &(op->corps ) );
- if ( status!=SLIST_OK ) return BIBL_ERR_MEMERR;
-
- if ( !op->progname ) np->progname = NULL;
- else {
- np->progname = strdup( op->progname );
- if ( !np->progname ) return BIBL_ERR_MEMERR;
- }
-
- np->readformat = op->readformat;
- np->writeformat = op->writeformat;
-
- np->charsetin = op->charsetin;
- np->charsetin_src = op->charsetin_src;
- np->utf8in = op->utf8in;
- np->latexin = op->latexin;
- np->xmlin = op->xmlin;
-
- np->charsetout = op->charsetout;
- np->charsetout_src = op->charsetout_src;
- np->utf8out = op->utf8out;
- np->utf8bom = op->utf8bom;
- np->latexout = op->latexout;
- np->xmlout = op->xmlout;
- np->nosplittitle = op->nosplittitle;
-
- np->verbose = op->verbose;
- np->format_opts = op->format_opts;
- np->addcount = op->addcount;
- np->output_raw = op->output_raw;
- np->singlerefperfile = op->singlerefperfile;
-
- np->readf = op->readf;
- np->processf = op->processf;
- np->cleanf = op->cleanf;
- np->typef = op->typef;
- np->convertf = op->convertf;
- np->headerf = op->headerf;
- np->footerf = op->footerf;
- np->assemblef = op->assemblef;
- np->writef = op->writef;
- np->all = op->all;
- np->nall = op->nall;
-
- return BIBL_OK;
-}
-
-/* bibl_setreadparams()
- *
- * Returns status of BIBL_OK or BIBL_ERR_MEMERR
- */
-static int
-bibl_setreadparams( param *np, param *op )
-{
- int status;
- status = bibl_duplicateparams( np, op );
- if ( status == BIBL_OK ) {
- np->utf8out = 1;
- np->charsetout = BIBL_CHARSET_UNICODE;
- np->charsetout_src = BIBL_SRC_DEFAULT;
- np->xmlout = BIBL_XMLOUT_FALSE;
- np->latexout = 0;
- np->writeformat = BIBL_INTERNALOUT;
- }
- return status;
-}
-
-/* bibl_setwriteparams()
- *
- * Returns status of BIBL_OK or BIBL_ERR_MEMERR
- */
-static int
-bibl_setwriteparams( param *np, param *op )
-{
- int status;
- status = bibl_duplicateparams( np, op );
- if ( status == BIBL_OK ) {
- np->xmlin = 0;
- np->latexin = 0;
- np->utf8in = 1;
- np->charsetin = BIBL_CHARSET_UNICODE;
- np->charsetin_src = BIBL_SRC_DEFAULT;
- np->readformat = BIBL_INTERNALIN;
- }
- return status;
-}
-
-void
-bibl_freeparams( param *p )
-{
- if ( p ) {
- slist_free( &(p->asis) );
- slist_free( &(p->corps) );
- if ( p->progname ) free( p->progname );
- }
-}
-
-int
-bibl_readasis( param *p, char *f )
-{
- int status;
-
- if ( !p ) return BIBL_ERR_BADINPUT;
- if ( !f ) return BIBL_ERR_BADINPUT;
-
- status = slist_fill( &(p->asis), f, 1 );
-
- if ( status == SLIST_ERR_CANTOPEN ) return BIBL_ERR_CANTOPEN;
- else if ( status == SLIST_ERR_MEMERR ) return BIBL_ERR_MEMERR;
- return BIBL_OK;
-}
-
-int
-bibl_readcorps( param *p, char *f )
-{
- int status;
-
- if ( !p ) return BIBL_ERR_BADINPUT;
- if ( !f ) return BIBL_ERR_BADINPUT;
-
- status = slist_fill( &(p->corps), f, 1 );
-
- if ( status == SLIST_ERR_CANTOPEN ) return BIBL_ERR_CANTOPEN;
- else if ( status == 0 ) return BIBL_ERR_MEMERR;
- return BIBL_OK;
-}
-
-/* bibl_addtoasis()
- *
- * Returns BIBL_OK or BIBL_ERR_MEMERR
- */
-int
-bibl_addtoasis( param *p, char *d )
-{
- int status;
-
- if ( !p ) return BIBL_ERR_BADINPUT;
- if ( !d ) return BIBL_ERR_BADINPUT;
-
- status = slist_addc( &(p->asis), d );
-
- return ( status==SLIST_OK )? BIBL_OK : BIBL_ERR_MEMERR;
-}
-
-/* bibl_addtocorps()
- *
- * Returns BIBL_OK or BIBL_ERR_MEMERR
- */
-int
-bibl_addtocorps( param *p, char *d )
-{
- int status;
-
- if ( !p ) return BIBL_ERR_BADINPUT;
- if ( !d ) return BIBL_ERR_BADINPUT;
-
- status = slist_addc( &(p->corps), d );
-
- return ( status==SLIST_OK )? BIBL_OK : BIBL_ERR_MEMERR;
-}
-
-void
-bibl_reporterr( int err )
-{
- fprintf( stderr, "Bibutils: " );
- switch( err ) {
- case BIBL_OK:
- fprintf( stderr, "No error." ); break;
- case BIBL_ERR_BADINPUT:
- fprintf( stderr, "Bad input." ); break;
- case BIBL_ERR_MEMERR:
- fprintf( stderr, "Memory error." ); break;
- case BIBL_ERR_CANTOPEN:
- fprintf( stderr, "Can't open." ); break;
- default:
- fprintf( stderr, "Cannot identify error code %d.", err ); break;
- }
- fprintf( stderr, "\n" );
-}
-
-static int
-bibl_illegalinmode( int mode )
-{
- if ( mode < BIBL_FIRSTIN || mode > BIBL_LASTIN ) return 1;
- else return 0;
-}
-
-static int
-bibl_illegaloutmode( int mode )
-{
- if ( mode < BIBL_FIRSTOUT || mode > BIBL_LASTOUT ) return 1;
- else return 0;
-}
-
-static void
-bibl_verbose2( fields *f, char *filename, long nrefs )
-{
- int i, n;
- n = fields_num( f );
- fprintf( stderr, "======== %s %ld : converted\n", filename, nrefs );
- for ( i=0; i<n; ++i ) {
- fprintf( stderr, "'%s'='%s' level=%d\n",
- (char*) fields_tag( f, i, FIELDS_CHRP_NOUSE ),
- (char*) fields_value( f, i, FIELDS_CHRP_NOUSE ),
- fields_level( f, i ) );
- }
- fprintf( stderr, "\n" );
- fflush( stderr );
-}
-
-#if 0
-static void
-bibl_verbose1( fields *f, fields *orig, char *filename, long nrefs )
-{
- int i, n;
- n = fields_num( orig );
- fprintf( stderr, "======== %s %ld : processed\n", filename, nrefs );
- for ( i=0; i<n; ++i ) {
- fprintf( stderr, "'%s'='%s' level=%d\n",
- (char*) fields_tag( orig, i, FIELDS_CHRP_NOUSE ),
- (char*) fields_value( orig, i, FIELDS_CHRP_NOUSE ),
- fields_level( orig, i ) );
- }
- if ( f ) bibl_verbose2( f, filename, nrefs );
-}
-#endif
-
-static void
-bibl_verbose0( bibl *bin )
-{
- int i;
- for ( i=0; i<bin->nrefs; ++i )
- bibl_verbose2( bin->ref[i], "", i+1 );
-}
-
-/* extract_tag_value
- *
- * Extract the tag and the value for ALWAYS/DEFAULT
- * entries like: "GENRE:BIBUTILS|Masters thesis"
- *
- * tag = "GENRE:BIBUTILS"
- * value = "Masters thesis"
- */
-static int
-extract_tag_value( str *tag, str *value, char *p )
-{
- str_empty( tag );
- while ( p && *p && *p!='|' ) {
- str_addchar( tag, *p );
- p++;
- }
- if ( str_memerr( tag ) ) return BIBL_ERR_MEMERR;
-
- if ( p && *p=='|' ) p++;
-
- str_empty( value );
- while ( p && *p ) {
- str_addchar( value, *p );
- p++;
- }
- if ( str_memerr( tag ) ) return BIBL_ERR_MEMERR;
-
- return BIBL_OK;
-}
-
-/* process_defaultadd()
- *
- * Add tag/value pairs that have "DEFAULT" processing
- * unless a tag/value pair with the same tag has already
- * been adding during reference processing.
- */
-static int
-process_defaultadd( fields *f, int reftype, param *r )
-{
- int i, n, process, level, status, ret = BIBL_OK;
- str tag, value;
- char *p;
-
- strs_init( &tag, &value, NULL );
-
- for ( i=0; i<r->all[reftype].ntags; ++i ) {
-
- process = ((r->all[reftype]).tags[i]).processingtype;
- if ( process!=DEFAULT ) continue;
-
- level = ((r->all[reftype]).tags[i]).level;
- p = ((r->all[reftype]).tags[i]).newstr;
-
- status = extract_tag_value( &tag, &value, p );
- if ( status!=BIBL_OK ) {
- ret = status;
- goto out;
- }
-
- n = fields_find( f, tag.data, level );
- if ( n==FIELDS_NOTFOUND ) {
- status = fields_add( f, tag.data, value.data, level );
- if ( status!=FIELDS_OK ) {
- ret = BIBL_ERR_MEMERR;
- goto out;
- }
- }
-
- }
-out:
- strs_free( &tag, &value, NULL );
-
- return ret;
-}
-
-/* process_alwaysadd()
- *
- * Add tag/value pair to reference from the ALWAYS
- * processing type without exception (the difference from
- * DEFAULT processing).
- */
-static int
-process_alwaysadd( fields *f, int reftype, param *r )
-{
- int i, process, level, status, ret = BIBL_OK;
- str tag, value;
- char *p;
-
- strs_init( &tag, &value, NULL );
-
- for ( i=0; i<r->all[reftype].ntags; ++i ) {
-
- process = ((r->all[reftype]).tags[i]).processingtype;
- if ( process!=ALWAYS ) continue;
-
- level = ((r->all[reftype]).tags[i]).level;
- p = ((r->all[reftype]).tags[i]).newstr;
-
- status = extract_tag_value( &tag, &value, p );
- if ( status!=BIBL_OK ) {
- ret = status;
- goto out;
- }
-
- status = fields_add( f, tag.data, value.data, level );
- if ( status!=FIELDS_OK ) {
- ret = BIBL_ERR_MEMERR;
- goto out;
- }
- }
-
-out:
- strs_free( &tag, &value, NULL );
-
- return ret;
-}
-
-static int
-read_ref( FILE *fp, bibl *bin, char *filename, param *p )
-{
- int nrefs = 0, bufpos = 0, ok, ret=BIBL_OK, fcharset;/* = CHARSET_UNKNOWN;*/
- str reference, line;
- char buf[256]="";
- fields *ref;
- str_init( &reference );
- str_init( &line );
- while ( p->readf( fp, buf, sizeof(buf), &bufpos, &line, &reference, &fcharset ) ) {
- if ( reference.len==0 ) continue;
- ref = fields_new();
- if ( !ref ) {
- ret = BIBL_ERR_MEMERR;
- bibl_free( bin );
- goto out;
- }
- if ( p->processf( ref, reference.data, filename, nrefs+1, p )){
- ok = bibl_addref( bin, ref );
- if ( !ok ) {
- ret = BIBL_ERR_MEMERR;
- bibl_free( bin );
- fields_delete( ref );
- goto out;
- }
- } else {
- fields_delete( ref );
- }
- str_empty( &reference );
- if ( fcharset!=CHARSET_UNKNOWN ) {
- /* charset from file takes priority over default, but
- * not user-specified */
- if ( p->charsetin_src!=BIBL_SRC_USER ) {
- p->charsetin_src = BIBL_SRC_FILE;
- p->charsetin = fcharset;
- if ( fcharset!=CHARSET_UNICODE ) p->utf8in = 0;
- }
- }
- }
- if ( p->charsetin==CHARSET_UNICODE ) p->utf8in = 1;
-out:
- str_free( &line );
- str_free( &reference );
- return ret;
-}
-
-/* Don't manipulate latex for URL's and the like */
-static int
-bibl_notexify( char *tag )
-{
- char *protected[] = { "DOI", "URL", "REFNUM", "FILEATTACH" };
- int i, nprotected = sizeof( protected ) / sizeof( protected[0] );
- for ( i=0; i<nprotected; ++i )
- if ( !strcasecmp( tag, protected[i] ) ) return 1;
- return 0;
-}
-
-/* bibl_fixcharsetdata()
- *
- * returns BIBL_OK or BIBL_ERR_MEMERR
- */
-static int
-bibl_fixcharsetdata( fields *ref, param *p )
-{
- str *data;
- char *tag;
- long i, n;
- int ok;
-
- n = fields_num( ref );
-
- for ( i=0; i<n; ++i ) {
-
- tag = fields_tag( ref, i, FIELDS_CHRP_NOUSE );
- data = fields_value( ref, i, FIELDS_STRP_NOUSE );
-
- if ( bibl_notexify( tag ) ) {
- ok = str_convert( data,
- p->charsetin, 0, p->utf8in, p->xmlin,
- p->charsetout, 0, p->utf8out, p->xmlout );
- } else {
- ok = str_convert( data,
- p->charsetin, p->latexin, p->utf8in, p->xmlin,
- p->charsetout, p->latexout, p->utf8out, p->xmlout );
- }
-
- if ( !ok ) return BIBL_ERR_MEMERR;
- }
-
- return BIBL_OK;
-}
-
-/* bibl_fixcharsets()
- *
- * returns BIBL_OK or BIBL_ERR_MEMERR
- */
-static int
-bibl_fixcharsets( bibl *b, param *p )
-{
- int status = BIBL_OK;
- long i;
- for ( i=0; i<b->nrefs && status==BIBL_OK; ++i )
- status = bibl_fixcharsetdata( b->ref[i], p );
- return status;
-}
-
-static int
-build_refnum( fields *f, long nrefs, int *n )
-{
- char *year, *author, *p, num[512];
- int status, ret = BIBL_OK;
- str refnum;
-
- *n = -1;
-
- str_init( &refnum );
-
- year = fields_findv( f, LEVEL_MAIN, FIELDS_CHRP_NOUSE, "DATE:YEAR" );
- if ( !year )
- year = fields_findv_firstof( f, LEVEL_ANY, FIELDS_CHRP_NOUSE,
- "DATE:YEAR", "PARTDATE:YEAR", NULL );
-
- author = fields_findv( f, LEVEL_MAIN, FIELDS_CHRP_NOUSE, "AUTHOR" );
- if ( !author )
- author = fields_findv_firstof( f, LEVEL_ANY, FIELDS_CHRP_NOUSE,
- "AUTHOR", "AUTHOR:CORP", "AUTHOR:ASIS", NULL );
-
- if ( year && author ) {
- p = author;
- while ( *p && *p!='|' )
- str_addchar( &refnum, *p++ );
- p = year;
- while ( *p && *p!=' ' && *p!='\t' )
- str_addchar( &refnum, *p++ );
- } else {
- sprintf( num, "%ld", nrefs );
- str_mergestrs( &refnum, "ref", num, NULL );
- }
- if ( str_memerr( &refnum ) ) {
- ret = BIBL_ERR_MEMERR;
- goto out;
- }
-
- status = fields_add( f, "REFNUM", refnum.data, LEVEL_MAIN );
- if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR;
- else *n = fields_find( f, "REFNUM", LEVEL_MAIN );
-
-out:
- str_free( &refnum );
-
- return ret;
-}
-
-static int
-bibl_checkrefid( bibl *b, param *p )
-{
- char buf[512];
- int n, status;
- fields *ref;
- long i;
-
- for ( i=0; i<b->nrefs; ++i ) {
- ref = b->ref[i];
- n = fields_find( ref, "REFNUM", LEVEL_MAIN );
- if ( n==FIELDS_NOTFOUND ) {
- status = build_refnum( ref, i+1, &n );
- if ( status!=BIBL_OK ) return status;
- }
- if ( p->addcount ) {
- sprintf( buf, "_%ld", i+1 );
- str_strcatc( &(ref->data[n]), buf );
- if ( str_memerr( &(ref->data[n]) ) )
- return BIBL_ERR_MEMERR;
- }
- }
-
- return BIBL_OK;
-}
-
-static int
-generate_citekey( fields *f, int nref )
-{
- int n1, n2, status, ret;
- char *p, buf[100];
- str citekey;
-
- str_init( &citekey );
-
- n1 = fields_find( f, "AUTHOR", LEVEL_MAIN );
- if ( n1==FIELDS_NOTFOUND ) n1 = fields_find( f, "AUTHOR", LEVEL_ANY );
- n2 = fields_find( f, "DATE:YEAR", LEVEL_MAIN );
- if ( n2==FIELDS_NOTFOUND ) n2 = fields_find( f, "DATE:YEAR", LEVEL_ANY );
- if ( n2==FIELDS_NOTFOUND ) n2 = fields_find( f, "PARTDATE:YEAR", LEVEL_MAIN );
- if ( n2==FIELDS_NOTFOUND ) n2 = fields_find( f, "PARTDATE:YEAR", LEVEL_ANY );
- if ( n1!=FIELDS_NOTFOUND && n2!=FIELDS_NOTFOUND ) {
- p = f->data[n1].data;
- while ( p && *p && *p!='|' ) {
- if ( !is_ws( *p ) ) str_addchar( &citekey, *p );
- p++;
- }
- p = f->data[n2].data;
- while ( p && *p ) {
- if ( !is_ws( *p ) ) str_addchar( &citekey, *p );
- p++;
- }
- if ( str_memerr( &citekey ) ) {
- ret = -1;
- goto out;
- }
- status = fields_add( f, "REFNUM", citekey.data, 0 );
- if ( status!=FIELDS_OK ) {
- ret = -1;
- goto out;
- }
- } else {
- sprintf( buf, "ref%d\n", nref );
- str_strcpyc( &citekey, buf );
- }
- ret = fields_find( f, "REFNUM", LEVEL_ANY );
-out:
- str_free( &citekey );
- return ret;
-}
-
-static int
-resolve_citekeys( bibl *b, slist *citekeys, int *dup )
-{
- const char abc[]="abcdefghijklmnopqrstuvwxyz";
- int nsame, ntmp, n, i, j, status = BIBL_OK;
- str tmp;
-
- str_init( &tmp );
-
- for ( i=0; i<citekeys->n; ++i ) {
- if ( dup[i]==-1 ) continue;
- nsame = 0;
- for ( j=i; j<citekeys->n; ++j ) {
- if ( dup[j]!=i ) continue;
- str_strcpy( &tmp, slist_str( citekeys, j ) );
- if ( str_memerr( &tmp ) ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- ntmp = nsame;
- while ( ntmp >= 26 ) {
- str_addchar( &tmp, 'a' );
- ntmp -= 26;
- }
- if ( ntmp<26 && ntmp>=0 )
- str_addchar( &tmp, abc[ntmp] );
- if ( str_memerr( &tmp ) ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- nsame++;
- dup[j] = -1;
- n = fields_find( b->ref[j], "REFNUM", LEVEL_ANY );
- if ( n!=FIELDS_NOTFOUND ) {
- str_strcpy(&((b->ref[j])->data[n]),&tmp);
- if ( str_memerr( &((b->ref[j])->data[n]) ) ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- }
- }
- }
-out:
- str_free( &tmp );
- return status;
-}
-
-static int
-get_citekeys( bibl *b, slist *citekeys )
-{
- int i, n, status;
- fields *f;
-
- for ( i=0; i<b->nrefs; ++i ) {
- f = b->ref[i];
- n = fields_find( f, "REFNUM", LEVEL_ANY );
- if ( n==FIELDS_NOTFOUND ) n = generate_citekey( f, i );
- if ( n!=FIELDS_NOTFOUND && f->data[n].data ) {
- status = slist_add( citekeys, &(f->data[n]) );
- if ( status!=SLIST_OK ) return BIBL_ERR_MEMERR;
- } else {
- status = slist_addc( citekeys, "" );
- if ( status!=SLIST_OK ) return BIBL_ERR_MEMERR;
- }
- }
-
- return BIBL_OK;
-}
-
-static int
-dup_citekeys( bibl *b, slist *citekeys )
-{
- int i, j, status = BIBL_OK, *dup, ndup=0;
-
- dup = ( int * ) malloc( sizeof( int ) * citekeys->n );
- if ( !dup ) return BIBL_ERR_MEMERR;
-
- for ( i=0; i<citekeys->n; ++i ) dup[i] = -1;
- for ( i=0; i<citekeys->n-1; ++i ) {
- if ( dup[i]!=-1 ) continue;
- for ( j=i+1; j<citekeys->n; ++j ) {
- if ( !strcmp( slist_cstr( citekeys, i ),
- slist_cstr( citekeys, j ) ) ) {
- dup[i] = i;
- dup[j] = i;
- ndup++;
- }
- }
- }
- if ( ndup ) status = resolve_citekeys( b, citekeys, dup );
- free( dup );
- return status;
-}
-
-static int
-uniqueify_citekeys( bibl *b )
-{
- slist citekeys;
- int status;
- slist_init( &citekeys );
- status = get_citekeys( b, &citekeys );
- if ( status!=BIBL_OK ) goto out;
- status = dup_citekeys( b, &citekeys );
-out:
- slist_free( &citekeys );
- return status;
-}
-
-static int
-clean_ref( bibl *bin, param *p )
-{
- if ( p->cleanf ) return p->cleanf( bin, p );
- else return BIBL_OK;
-}
-
-static int
-convert_ref( bibl *bin, char *fname, bibl *bout, param *p )
-{
- fields *rin, *rout;
- int reftype = 0, ok, status;
- long i;
-
- for ( i=0; i<bin->nrefs; ++i ) {
- rin = bin->ref[i];
- rout = fields_new();
- if ( !rout ) return BIBL_ERR_MEMERR;
- if ( p->typef )
- reftype = p->typef( rin, fname, i+1, p );
- status = p->convertf( rin, rout, reftype, p );
- if ( status!=BIBL_OK ) return status;
- if ( p->all ) {
- status = process_alwaysadd( rout, reftype, p );
- if ( status!=BIBL_OK ) return status;
- status = process_defaultadd( rout, reftype, p );
- if ( status!=BIBL_OK ) return status;
- }
- ok = bibl_addref( bout, rout );
- if ( !ok ) return BIBL_ERR_MEMERR;
- }
- if ( debug_set( p ) ) {
- fflush( stdout );
- fprintf( stderr, "-------------------start for convert_ref\n");
- bibl_verbose0( bout );
- fprintf( stderr, "-------------------end for convert_ref\n" );
- fflush( stderr );
- }
- status = uniqueify_citekeys( bout );
- return status;
-}
-
-int
-bibl_read( bibl *b, FILE *fp, char *filename, param *p )
-{
- int ok, status;
- param lp;
- bibl bin;
-
- if ( !b ) return BIBL_ERR_BADINPUT;
- if ( !fp ) return BIBL_ERR_BADINPUT;
- if ( !p ) return BIBL_ERR_BADINPUT;
-
- if ( bibl_illegalinmode( p->readformat ) ) {
- if ( debug_set( p ) ) {
- fflush( stdout );
- report_params( stderr, "bibl_read", p );
- }
- return BIBL_ERR_BADINPUT;
- }
-
- status = bibl_setreadparams( &lp, p );
- if ( status!=BIBL_OK ) {
- if ( debug_set( p ) ) {
- fflush( stdout );
- report_params( stderr, "bibl_read", p );
- }
- return status;
- }
-
- bibl_init( &bin );
-
- status = read_ref( fp, &bin, filename, &lp );
- if ( status!=BIBL_OK ) {
- if ( debug_set( p ) ) {
- fflush( stdout );
- report_params( stderr, "bibl_read", &lp );
- }
- bibl_freeparams( &lp );
- return status;
- }
-
- if ( debug_set( p ) ) {
- fflush( stdout );
- report_params( stderr, "bibl_read", &lp );
- fprintf( stderr, "-------------------raw_input start for bibl_read\n");
- bibl_verbose0( &bin );
- fprintf( stderr, "-------------------raw_input end for bibl_read\n" );
- fflush( stderr );
- }
-
- if ( !lp.output_raw || ( lp.output_raw & BIBL_RAW_WITHCHARCONVERT ) ) {
- status = bibl_fixcharsets( &bin, &lp );
- if ( status!=BIBL_OK ) return status;
- if ( debug_set( p ) ) {
- fprintf( stderr, "-------------------post_fixcharsets start for bibl_read\n");
- bibl_verbose0( &bin );
- fprintf( stderr, "-------------------post_fixcharsets end for bibl_read\n" );
- fflush( stderr );
- }
- }
- if ( !lp.output_raw ) {
- status = clean_ref( &bin, &lp );
- if ( status!=BIBL_OK ) return status;
- if ( debug_set( p ) ) {
- fprintf( stderr, "-------------------post_clean_ref start for bibl_read\n");
- bibl_verbose0( &bin );
- fprintf( stderr, "-------------------post_clean_ref end for bibl_read\n" );
- fflush( stderr );
- }
- ok = convert_ref( &bin, filename, b, &lp );
- if ( ok!=BIBL_OK ) return ok;
- if ( debug_set( p ) ) {
- fprintf( stderr, "-------------------post_convert_ref start for bibl_read\n");
- bibl_verbose0( &bin );
- fprintf( stderr, "-------------------post_convert_ref end for bibl_read\n" );
- fflush( stderr );
- }
- } else {
- if ( debug_set( p ) ) {
- fprintf( stderr, "-------------------here1 start for bibl_read\n");
- bibl_verbose0( &bin );
- fprintf( stderr, "-------------------here1 end for bibl_read\n" );
- fflush( stderr );
- }
- ok = bibl_copy( b, &bin );
- if ( !ok ) {
- bibl_freeparams( &lp );
- return BIBL_ERR_MEMERR;
- }
- }
- if ( !lp.output_raw || ( lp.output_raw & BIBL_RAW_WITHMAKEREFID ) )
- bibl_checkrefid( b, &lp );
-
- bibl_free( &bin );
-
- bibl_freeparams( &lp );
-
- return BIBL_OK;
-}
-
-static FILE *
-singlerefname( fields *reffields, long nref, int mode )
-{
- char outfile[2048];
- char suffix[5] = "xml";
- FILE *fp;
- long count;
- int found;
- if ( mode==BIBL_ADSABSOUT ) strcpy( suffix, "ads" );
- else if ( mode==BIBL_BIBTEXOUT ) strcpy( suffix, "bib" );
- else if ( mode==BIBL_ENDNOTEOUT ) strcpy( suffix, "end" );
- else if ( mode==BIBL_ISIOUT ) strcpy( suffix, "isi" );
- else if ( mode==BIBL_MODSOUT ) strcpy( suffix, "xml" );
- else if ( mode==BIBL_RISOUT ) strcpy( suffix, "ris" );
- else if ( mode==BIBL_WORD2007OUT ) strcpy( suffix, "xml" );
- found = fields_find( reffields, "REFNUM", LEVEL_MAIN );
- /* find new filename based on reference */
- if ( found!=-1 ) {
- sprintf( outfile,"%s.%s",reffields->data[found].data, suffix );
- } else sprintf( outfile,"%ld.%s",nref, suffix );
- count = 0;
- fp = fopen( outfile, "r" );
- while ( fp ) {
- fclose(fp);
- count++;
- if ( count==60000 ) return NULL;
- if ( found!=-1 )
- sprintf( outfile, "%s_%ld.%s",
- reffields->data[found].data, count, suffix );
- else sprintf( outfile,"%ld_%ld.%s",nref, count, suffix );
- fp = fopen( outfile, "r" );
- }
- return fopen( outfile, "w" );
-}
-
-static int
-bibl_writeeachfp( FILE *fp, bibl *b, param *p )
-{
- fields out, *use = &out;
- int status;
- long i;
-
- fields_init( &out );
-
- for ( i=0; i<b->nrefs; ++i ) {
-
- fp = singlerefname( b->ref[i], i, p->writeformat );
- if ( !fp ) return BIBL_ERR_CANTOPEN;
-
- if ( p->headerf ) p->headerf( fp, p );
-
- if ( p->assemblef ) {
- fields_free( &out );
- status = p->assemblef( b->ref[i], &out, p, i );
- if ( status!=BIBL_OK ) break;
- } else {
- use = b->ref[i];
- }
-
- status = p->writef( use, fp, p, i );
-
- if ( p->footerf ) p->footerf( fp );
- fclose( fp );
-
- if ( status!=BIBL_OK ) return status;
- }
-
- return BIBL_OK;
-}
-
-static int
-bibl_writefp( FILE *fp, bibl *b, param *p )
-{
- int status = BIBL_OK;
- fields out, *use = &out;
- long i;
-
- fields_init( &out );
-
- if ( debug_set( p ) && p->assemblef ) {
- fprintf( stderr, "-------------------assemblef start for bibl_write\n");
- }
-
- if ( p->headerf ) p->headerf( fp, p );
- for ( i=0; i<b->nrefs; ++i ) {
-
- if ( p->assemblef ) {
- fields_free( &out );
- status = p->assemblef( b->ref[i], &out, p, i );
- if ( status!=BIBL_OK ) break;
- if ( debug_set( p ) ) bibl_verbose2( &out, "", i+1 );
- } else {
- use = b->ref[i];
- }
-
- status = p->writef( use, fp, p, i );
- if ( status!=BIBL_OK ) break;
-
- }
-
- if ( debug_set( p ) && p->assemblef ) {
- fprintf( stderr, "-------------------assemblef end for bibl_write\n");
- }
-
- if ( p->footerf ) p->footerf( fp );
- return status;
-}
-
-int
-bibl_write( bibl *b, FILE *fp, param *p )
-{
- int status;
- param lp;
-
- if ( !b ) return BIBL_ERR_BADINPUT;
- if ( !p ) return BIBL_ERR_BADINPUT;
- if ( bibl_illegaloutmode( p->writeformat ) ) return BIBL_ERR_BADINPUT;
- if ( !fp && !p->singlerefperfile ) return BIBL_ERR_BADINPUT;
-
- status = bibl_setwriteparams( &lp, p );
- if ( status!=BIBL_OK ) return status;
-
- if ( debug_set( p ) ) {
- report_params( stderr, "bibl_write", &lp );
- fflush( stdout );
- }
-
- if ( debug_set( p ) ) {
- fprintf( stderr, "-------------------raw input start for bibl_write\n");
- bibl_verbose0( b );
- fprintf( stderr, "-------------------raw input end for bibl_write\n" );
- fflush( stderr );
- }
-
- status = bibl_fixcharsets( b, &lp );
- if ( status!=BIBL_OK ) goto out;
-
- if ( debug_set( p ) ) {
- fprintf( stderr, "-------------------post-fixcharsets start for bibl_write\n");
- bibl_verbose0( b );
- fprintf( stderr, "-------------------post-fixcharsets end for bibl_write\n" );
- fflush( stderr );
- }
-
- if ( p->singlerefperfile ) status = bibl_writeeachfp( fp, b, &lp );
- else status = bibl_writefp( fp, b, &lp );
-
-out:
- bibl_freeparams( &lp );
- return status;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/bibformats.h b/support/texlab/crates/bibutils_sys/src/bibformats.h
deleted file mode 100644
index dd8ef25afc..0000000000
--- a/support/texlab/crates/bibutils_sys/src/bibformats.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * bibformats.h
- *
- * Copyright (c) Chris Putnam 2007-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef BIBFORMATS_H
-#define BIBFORMATS_H
-
-#include "bibutils.h"
-
-int adsout_initparams ( param *pm, const char *progname );
-int biblatexin_initparams( param *pm, const char *progname );
-int bibtexin_initparams ( param *pm, const char *progname );
-int bibtexout_initparams ( param *pm, const char *progname );
-int copacin_initparams ( param *pm, const char *progname );
-int ebiin_initparams ( param *pm, const char *progname );
-int endin_initparams ( param *pm, const char *progname );
-int endout_initparams ( param *pm, const char *progname );
-int endxmlin_initparams ( param *pm, const char *progname );
-int isiin_initparams ( param *pm, const char *progname );
-int isiout_initparams ( param *pm, const char *progname );
-int medin_initparams ( param *pm, const char *progname );
-int modsin_initparams ( param *pm, const char *progname );
-int modsout_initparams ( param *pm, const char *progname );
-int nbibin_initparams ( param *pm, const char *progname );
-int nbibout_initparams ( param *pm, const char *progname );
-int risin_initparams ( param *pm, const char *progname );
-int risout_initparams ( param *pm, const char *progname );
-int wordin_initparams ( param *pm, const char *progname );
-int wordout_initparams ( param *pm, const char *progname );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/bibl.c b/support/texlab/crates/bibutils_sys/src/bibl.c
deleted file mode 100644
index 8862f6ea40..0000000000
--- a/support/texlab/crates/bibutils_sys/src/bibl.c
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * bibl.c
- *
- * Copyright (c) Chris Putnam 2005-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include "bibl.h"
-
-void
-bibl_init( bibl *b )
-{
- b->nrefs = b->maxrefs = 0L;
- b->ref = NULL;
-}
-
-static int
-bibl_malloc( bibl * b )
-{
- int alloc = 50;
- b->nrefs = 0;
- b->ref = ( fields ** ) malloc( sizeof( fields* ) * alloc );
- if ( b->ref ) {
- b->maxrefs = alloc;
- return 1;
- } else {
- fprintf( stderr, "%s: allocation error\n", __FUNCTION__ );
- return 0;
- }
-}
-
-static int
-bibl_realloc( bibl * b )
-{
- int alloc = b->maxrefs * 2;
- fields **more;
- more = ( fields ** ) realloc( b->ref, sizeof( fields* ) * alloc );
- if ( more ) {
- b->ref = more;
- b->maxrefs = alloc;
- return 1;
- } else {
- fprintf( stderr, "%s: allocation error\n", __FUNCTION__ );
- return 0;
- }
-}
-
-int
-bibl_addref( bibl *b, fields *ref )
-{
- int ok = 1;
- if ( b->maxrefs==0 ) ok = bibl_malloc( b );
- else if ( b->nrefs >= b->maxrefs ) ok = bibl_realloc( b );
- if ( ok ) {
- b->ref[ b->nrefs ] = ref;
- b->nrefs++;
- }
- return ok;
-}
-
-void
-bibl_free( bibl *b )
-{
- long i;
- for ( i=0; i<b->nrefs; ++i )
- fields_delete( b->ref[i] );
- if ( b->ref ) free( b->ref );
- b->ref = NULL;
- b->nrefs = b->maxrefs = 0;
-}
-
-/* bibl_copy()
- *
- * returns 1 on success, 0 on failure (memory error)
- */
-int
-bibl_copy( bibl *bout, bibl *bin )
-{
- fields *refin, *refout;
- int i, j, n, status, ok, level;
- char *tag, *value;
- for ( i=0; i<bin->nrefs; ++i ) {
- refin = bin->ref[i];
- refout = fields_new();
- if ( !refout ) return 0;
- n = fields_num( refin );
- for ( j=0; j<n; ++j ) {
- tag = fields_tag( refin, j, FIELDS_CHRP );
- value = fields_value( refin, j, FIELDS_CHRP );
- level = fields_level( refin, j );
- if ( tag && value ) {
- status = fields_add_can_dup( refout, tag, value, level );
- if ( status!=FIELDS_OK ) return 0;
- }
- }
- ok = bibl_addref( bout, refout );
- if ( !ok ) return 0;
- }
- return 1;
-}
-
diff --git a/support/texlab/crates/bibutils_sys/src/bibl.h b/support/texlab/crates/bibutils_sys/src/bibl.h
deleted file mode 100644
index 5743129455..0000000000
--- a/support/texlab/crates/bibutils_sys/src/bibl.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * bibl.h
- *
- * Copyright (c) Chris Putnam 2005-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef BIBL_H
-#define BIBL_H
-
-#include <stdio.h>
-#include "str.h"
-#include "fields.h"
-#include "reftypes.h"
-
-typedef struct {
- long nrefs;
- long maxrefs;
- fields **ref;
-} bibl;
-
-extern void bibl_init( bibl *b );
-extern int bibl_addref( bibl *b, fields *ref );
-extern void bibl_free( bibl *b );
-extern int bibl_copy( bibl *bout, bibl *bin );
-
-#endif
-
diff --git a/support/texlab/crates/bibutils_sys/src/biblatexin.c b/support/texlab/crates/bibutils_sys/src/biblatexin.c
deleted file mode 100644
index cbec80ba37..0000000000
--- a/support/texlab/crates/bibutils_sys/src/biblatexin.c
+++ /dev/null
@@ -1,1340 +0,0 @@
-/*
- * biblatexin.c
- *
- * Copyright (c) Chris Putnam 2008-2019
- * Copyright (c) Johannes Wilm 2010-2019
- *
- * Program and source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include "is_ws.h"
-#include "strsearch.h"
-#include "str.h"
-#include "utf8.h"
-#include "str_conv.h"
-#include "fields.h"
-#include "slist.h"
-#include "name.h"
-#include "reftypes.h"
-#include "bibformats.h"
-#include "generic.h"
-#include "msvc_fix.h"
-
-extern variants biblatex_all[];
-extern int biblatex_nall;
-
-static slist find = { 0, 0, 0, NULL };
-static slist replace = { 0, 0, 0, NULL };
-
-/*****************************************************
- PUBLIC: void biblatexin_initparams()
-*****************************************************/
-
-static int biblatexin_convertf( fields *bibin, fields *info, int reftype, param *p );
-static int biblatexin_processf( fields *bibin, const char *data, const char *filename, long nref, param *p );
-static int biblatexin_cleanf( bibl *bin, param *p );
-static int biblatexin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset );
-static int biblatexin_typef( fields *bibin, const char *filename, int nrefs, param *p );
-
-int
-biblatexin_initparams( param *pm, const char *progname )
-{
- pm->readformat = BIBL_BIBLATEXIN;
- pm->charsetin = BIBL_CHARSET_DEFAULT;
- pm->charsetin_src = BIBL_SRC_DEFAULT;
- pm->latexin = 1;
- pm->xmlin = 0;
- pm->utf8in = 0;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->output_raw = 0;
-
- pm->readf = biblatexin_readf;
- pm->processf = biblatexin_processf;
- pm->cleanf = biblatexin_cleanf;
- pm->typef = biblatexin_typef;
- pm->convertf = biblatexin_convertf;
- pm->all = biblatex_all;
- pm->nall = biblatex_nall;
-
- slist_init( &(pm->asis) );
- slist_init( &(pm->corps) );
-
- if ( !progname ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int biblatexin_readf()
-*****************************************************/
-
-/*
- * readf can "read too far", so we store this information in line, thus
- * the next new text is in line, either from having read too far or
- * from the next chunk obtained via str_fget()
- *
- * return 1 on success, 0 on error/end-of-file
- *
- */
-static int
-readmore( FILE *fp, char *buf, int bufsize, int *bufpos, str *line )
-{
- if ( line->len ) return 1;
- else return str_fget( fp, buf, bufsize, bufpos, line );
-}
-
-/*
- * readf()
- *
- * returns zero if cannot get reference and hit end of-file
- * returns 1 if last reference in file, 2 if reference within file
- */
-static int
-biblatexin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset )
-{
- int haveref = 0;
- const char *p;
- while ( haveref!=2 && readmore( fp, buf, bufsize, bufpos, line ) ) {
- if ( line->len == 0 ) continue; /* blank line */
- p = &(line->data[0]);
- p = skip_ws( p );
- if ( *p == '%' ) { /* commented out line */
- str_empty( line );
- continue;
- }
- if ( *p == '@' ) haveref++;
- if ( haveref && haveref<2 ) {
- str_strcatc( reference, p );
- str_addchar( reference, '\n' );
- str_empty( line );
- } else if ( !haveref ) str_empty( line );
- }
- *fcharset = CHARSET_UNKNOWN;
- return haveref;
-}
-
-/*****************************************************
- PUBLIC: int biblatexin_processf()
-*****************************************************/
-
-static const char *
-process_biblatextype( const char *p, str *type )
-{
- str tmp;
- str_init( &tmp );
-
- if ( *p=='@' ) p++;
- p = str_cpytodelim( &tmp, p, "{( \t\r\n", 0 );
- p = skip_ws( p );
- if ( *p=='{' || *p=='(' ) p++;
- p = skip_ws( p );
-
- if ( str_has_value( &tmp ) ) str_strcpy( type, &tmp );
- else str_empty( type );
-
- str_free( &tmp );
- return p;
-}
-
-static const char *
-process_biblatexid( const char *p, str *id )
-{
- const char *start_p = p;
- str tmp;
-
- str_init( &tmp );
- p = str_cpytodelim( &tmp, p, ",", 1 );
-
- if ( str_has_value( &tmp ) ) {
- if ( strchr( tmp.data, '=' ) ) {
- /* Endnote writes biblatex files w/o fields, try to
- * distinguish via presence of an equal sign.... if
- * it's there, assume that it's a tag/data pair instead
- * and roll back.
- */
- p = start_p;
- str_empty( id );
- } else {
- str_strcpy( id, &tmp );
- }
- } else {
- str_empty( id );
- }
-
- str_free( &tmp );
- return skip_ws( p );
-}
-
-static const char *
-biblatex_tag( const char *p, str *tag )
-{
- p = str_cpytodelim( tag, skip_ws( p ), "= \t\r\n", 0 );
- return skip_ws( p );
-}
-
-static const char *
-biblatex_data( const char *p, fields *bibin, slist *tokens, long nref, param *pm )
-{
- unsigned int nbracket = 0, nquotes = 0;
- const char *startp = p;
- int status;
- str tok;
-
- str_init( &tok );
- while ( p && *p ) {
- if ( !nquotes && !nbracket ) {
- if ( *p==',' || *p=='=' || *p=='}' || *p==')' )
- goto out;
- }
- if ( *p=='\"' && nbracket==0 && ( p==startp || *(p-1)!='\\' ) ) {
- nquotes = !nquotes;
- str_addchar( &tok, *p );
- if ( !nquotes ) {
- status = slist_add( tokens, &tok );
- if ( status!=SLIST_OK ) { p = NULL; goto outerr; }
- str_empty( &tok );
- }
- } else if ( *p=='#' && !nquotes && !nbracket ) {
- if ( str_has_value( &tok ) ) {
- status = slist_add( tokens, &tok );
- if ( status!=SLIST_OK ) { p = NULL; goto outerr; }
- }
- str_strcpyc( &tok, "#" );
- status = slist_add( tokens, &tok );
- if ( status!=SLIST_OK ) { p = NULL; goto outerr; }
- str_empty( &tok );
- } else if ( *p=='{' && !nquotes && ( p==startp || *(p-1)!='\\' ) ) {
- nbracket++;
- str_addchar( &tok, *p );
- } else if ( *p=='}' && !nquotes && ( p==startp || *(p-1)!='\\' ) ) {
- nbracket--;
- str_addchar( &tok, *p );
- if ( nbracket==0 ) {
- status = slist_add( tokens, &tok );
- if ( status!=SLIST_OK ) { p = NULL; goto outerr; }
- str_empty( &tok );
- }
- } else if ( !is_ws( *p ) || nquotes || nbracket ) {
- if ( !is_ws( *p ) ) str_addchar( &tok, *p );
- else {
- if ( tok.len!=0 && *p!='\n' && *p!='\r' )
- str_addchar( &tok, *p );
- else if ( tok.len!=0 && (*p=='\n' || *p=='\r')) {
- str_addchar( &tok, ' ' );
- while ( is_ws( *(p+1) ) ) p++;
- }
- }
- } else if ( is_ws( *p ) ) {
- if ( str_has_value( &tok ) ) {
- status = slist_add( tokens, &tok );
- if ( status!=SLIST_OK ) { p = NULL; goto outerr; }
- str_empty( &tok );
- }
- }
- p++;
- }
-out:
- if ( nbracket!=0 ) {
- fprintf( stderr, "%s: Mismatch in number of brackets in reference %ld\n", pm->progname, nref );
- }
- if ( nquotes!=0 ) {
- fprintf( stderr, "%s: Mismatch in number of quotes in reference %ld\n", pm->progname, nref );
- }
- if ( str_has_value( &tok ) ) {
- status = slist_add( tokens, &tok );
- if ( status!=SLIST_OK ) p = NULL;
- }
-outerr:
- str_free( &tok );
- return p;
-}
-
-/* replace_strings()
- *
- * do string replacement -- only if unprotected by quotation marks or curly brackets
- */
-static void
-replace_strings( slist *tokens, fields *bibin, long nref, param *pm )
-{
- int i, n, ok;
- char *q;
- str *s;
- i = 0;
- while ( i < tokens->n ) {
- s = slist_str( tokens, i );
- if ( !strcmp( s->data, "#" ) ) {
- } else if ( s->data[0]!='\"' && s->data[0]!='{' ) {
- n = slist_find( &find, s );
- if ( n!=-1 ) {
- str_strcpy( s, slist_str( &replace, n ) );
- } else {
- q = s->data;
- ok = 1;
- while ( *q && ok ) {
- if ( !isdigit( *q ) ) ok = 0;
- q++;
- }
- if ( !ok ) {
- fprintf( stderr, "%s: Warning: Non-numeric "
- "BibTeX elements should be in quotations or "
- "curly brackets in reference %ld\n", pm->progname, nref );
- }
- }
- }
- i++;
- }
-}
-
-static int
-string_concatenate( slist *tokens, fields *bibin, long nref, param *pm )
-{
- int i, status;
- str *s, *t;
- i = 0;
- while ( i < tokens->n ) {
- s = slist_str( tokens, i );
- if ( !strcmp( str_cstr( s ), "#" ) ) {
- if ( i==0 || i==tokens->n-1 ) {
- fprintf( stderr, "%s: Warning: Stray string concatenation "
- "('#' character) in reference %ld\n", pm->progname, nref );
- status = slist_remove( tokens, i );
- if ( status!=SLIST_OK ) return BIBL_ERR_MEMERR;
- continue;
- }
- s = slist_str( tokens, i-1 );
- if ( s->data[0]!='\"' && s->data[s->len-1]!='\"' )
- fprintf( stderr, "%s: Warning: String concentation should "
- "be used in context of quotations marks in reference %ld\n", pm->progname, nref );
- t = slist_str( tokens, i+1 );
- if ( t->data[0]!='\"' && t->data[t->len-1]!='\"' )
- fprintf( stderr, "%s: Warning: String concentation should "
- "be used in context of quotations marks in reference %ld\n", pm->progname, nref );
- if ( ( s->data[s->len-1]=='\"' && t->data[0]=='\"') || (s->data[s->len-1]=='}' && t->data[0]=='{') ) {
- str_trimend( s, 1 );
- str_trimbegin( t, 1 );
- str_strcat( s, t );
- } else {
- str_strcat( s, t );
- }
- status = slist_remove( tokens, i );
- if ( status!=SLIST_OK ) return BIBL_ERR_MEMERR;
- status = slist_remove( tokens, i );
- if ( status!=SLIST_OK ) return BIBL_ERR_MEMERR;
- } else i++;
- }
- return BIBL_OK;
-}
-
-static const char *
-process_biblatexline( const char *p, str *tag, str *data, uchar stripquotes, long nref, param *pm )
-{
- int i, status;
- slist tokens;
- str *s;
-
- str_empty( data );
-
- p = biblatex_tag( p, tag );
- if ( str_is_empty( tag ) ) {
- /* ...skip this line */
- while ( *p && *p!='\n' && *p!='\r' ) p++;
- while ( *p=='\n' || *p=='\r' ) p++;
- return p;
- }
-
- slist_init( &tokens );
-
- if ( *p=='=' ) p = biblatex_data( p+1, NULL, &tokens, nref, pm );
-
- replace_strings( &tokens, NULL, nref, pm );
-
- status = string_concatenate( &tokens, NULL, nref, pm );
- if ( status!=BIBL_OK ) {
- p = NULL;
- goto out;
- }
-
- for ( i=0; i<tokens.n; i++ ) {
- s = slist_str( &tokens, i );
- if ( ( stripquotes && s->data[0]=='\"' && s->data[s->len-1]=='\"' ) ||
- ( s->data[0]=='{' && s->data[s->len-1]=='}' ) ) {
- str_trimbegin( s, 1 );
- str_trimend( s, 1 );
- }
- str_strcat( data, slist_str( &tokens, i ) );
- }
-out:
- slist_free( &tokens );
- return p;
-}
-
-static int
-process_cite( fields *bibin, const char *p, const char *filename, long nref, param *pm )
-{
- int fstatus, status = BIBL_OK;
- str type, id, tag, data;
-
- strs_init( &type, &id, &tag, &data, NULL );
-
- p = process_biblatextype( p, &type );
- p = process_biblatexid( p, &id );
-
- if ( str_is_empty( &type ) || str_is_empty( &id ) ) goto out;
-
- fstatus = fields_add( bibin, "INTERNAL_TYPE", str_cstr( &type ), 0 );
- if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; }
-
- fstatus = fields_add( bibin, "REFNUM", str_cstr( &id ), 0 );
- if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; }
-
- while ( *p ) {
- p = process_biblatexline( p, &tag, &data, 1, nref, pm );
- if ( !p ) { status = BIBL_ERR_MEMERR; goto out; }
- /* no anonymous or empty fields allowed */
- if ( str_has_value( &tag ) && str_has_value( &data ) ) {
- fstatus = fields_add( bibin, str_cstr( &tag ), str_cstr( &data ), 0 );
- if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; }
- }
- strs_empty( &tag, &data, NULL );
- }
-out:
- strs_free( &type, &id, &tag, &data, NULL );
- return status;
-}
-
-/* process_string()
- *
- * Handle lines like:
- *
- * '@STRING{TL = {Tetrahedron Lett.}}'
- *
- * p should point to just after '@STRING'
- *
- * In BibTeX, if a string is defined several times, the last one is kept.
- *
- */
-static int
-process_string( const char *p, long nref, param *pm )
-{
- int n, status = BIBL_OK;
- str s1, s2, *s;
- strs_init( &s1, &s2, NULL );
- while ( *p && *p!='{' && *p!='(' ) p++;
- if ( *p=='{' || *p=='(' ) p++;
- (void) process_biblatexline( skip_ws( p ), &s1, &s2, 0, nref, pm );
- if ( str_has_value( &s2 ) ) {
- str_findreplace( &s2, "\\ ", " " );
- if ( str_memerr( &s2 ) ) { status = BIBL_ERR_MEMERR; goto out; }
- } else {
- str_strcpyc( &s2, "" );
- }
- if ( str_has_value( &s1 ) ) {
- n = slist_find( &find, &s1 );
- if ( n==-1 ) {
- status = slist_add_ret( &find, &s1, BIBL_OK, BIBL_ERR_MEMERR );
- if ( status!=BIBL_OK ) goto out;
- status = slist_add_ret( &replace, &s2, BIBL_OK, BIBL_ERR_MEMERR );
- if ( status!=BIBL_OK ) goto out;
- } else {
- if ( str_has_value( &s2 ) ) s = slist_set( &replace, n, &s2 );
- else s = slist_setc( &replace, n, "" );
- if ( s==NULL ) { status = BIBL_ERR_MEMERR; goto out; }
- }
- }
-out:
- strs_free( &s1, &s2, NULL );
- return status;
-}
-
-static int
-biblatexin_processf( fields *bibin, const char *data, const char *filename, long nref, param *p )
-{
- if ( !strncasecmp( data, "@STRING", 7 ) ) {
- process_string( data+7, nref, p );
- return 0;
- } else {
- process_cite( bibin, data, filename, nref, p );
- return 1;
- }
-}
-
-/*****************************************************
- PUBLIC: void biblatexin_cleanf()
-*****************************************************/
-
-static void
-biblatex_process_tilde( str *s )
-{
- char *p, *q;
- int n = 0;
-
- p = q = s->data;
- if ( !p ) return;
- while ( *p ) {
- if ( *p=='~' ) {
- *q = ' ';
- } else if ( *p=='\\' && *(p+1)=='~' ) {
- n++;
- p++;
- *q = '~';
- } else {
- *q = *p;
- }
- p++;
- q++;
- }
- *q = '\0';
- s->len -= n;
-}
-
-static void
-biblatex_process_bracket( str *s )
-{
- char *p, *q;
- int n = 0;
-
- p = q = s->data;
- if ( !p ) return;
- while ( *p ) {
- if ( *p=='\\' && ( *(p+1)=='{' || *(p+1)=='}' ) ) {
- n++;
- p++;
- *q = *p;
- q++;
- } else if ( *p=='{' || *p=='}' ) {
- n++;
- } else {
- *q = *p;
- q++;
- }
- p++;
- }
- *q = '\0';
- s->len -= n;
-}
-
-static int
-biblatex_cleantoken( str *s )
-{
- /* 'textcomp' annotations */
- str_findreplace( s, "\\textit", "" );
- str_findreplace( s, "\\textbf", "" );
- str_findreplace( s, "\\textsl", "" );
- str_findreplace( s, "\\textsc", "" );
- str_findreplace( s, "\\textsf", "" );
- str_findreplace( s, "\\texttt", "" );
- str_findreplace( s, "\\textsubscript", "" );
- str_findreplace( s, "\\textsuperscript", "" );
- str_findreplace( s, "\\emph", "" );
- str_findreplace( s, "\\url", "" );
-
- /* Other text annotations */
- str_findreplace( s, "\\it ", "" );
- str_findreplace( s, "\\em ", "" );
-
- str_findreplace( s, "\\%", "%" );
- str_findreplace( s, "\\$", "$" );
- while ( str_findreplace( s, " ", " " ) ) {}
-
- /* 'textcomp' annotations that we don't want to substitute on output*/
- str_findreplace( s, "\\textdollar", "$" );
- str_findreplace( s, "\\textunderscore", "_" );
-
- biblatex_process_bracket( s );
- biblatex_process_tilde( s );
-
- if ( !str_memerr( s ) ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
-}
-
-static int
-biblatex_split( slist *tokens, str *s )
-{
- int i, n = s->len, nbrackets = 0, status = BIBL_OK;
- str tok, *t;
-
- str_init( &tok );
-
- for ( i=0; i<n; ++i ) {
- if ( s->data[i]=='{' && ( i==0 || s->data[i-1]!='\\' ) ) {
- nbrackets++;
- str_addchar( &tok, '{' );
- } else if ( s->data[i]=='}' && ( i==0 || s->data[i-1]!='\\' ) ) {
- nbrackets--;
- str_addchar( &tok, '}' );
- } else if ( !is_ws( s->data[i] ) || nbrackets ) {
- str_addchar( &tok, s->data[i] );
- } else if ( is_ws( s->data[i] ) ) {
- if ( str_memerr( &tok ) ) { status = BIBL_ERR_MEMERR; goto out; }
- if ( str_has_value( &tok ) ) {
- status = slist_add_ret( tokens, &tok, BIBL_OK, BIBL_ERR_MEMERR );
- if ( status!=BIBL_OK ) goto out;
- }
- str_empty( &tok );
- }
- }
- if ( str_has_value( &tok ) ) {
- if ( str_memerr( &tok ) ) { status = BIBL_ERR_MEMERR; goto out; }
- status = slist_add_ret( tokens, &tok, BIBL_OK, BIBL_ERR_MEMERR );
- if ( status!=BIBL_OK ) goto out;
- }
-
- for ( i=0; i<tokens->n; ++i ) {
- t = slist_str( tokens, i );
- str_trimstartingws( t );
- str_trimendingws( t );
- if ( str_memerr( t ) ) { status = BIBL_ERR_MEMERR; goto out; }
- }
-out:
- str_free( &tok );
- return status;
-}
-
-static int
-biblatexin_addtitleurl( fields *info, str *in )
-{
- int fstatus, status = BIBL_OK;
- const char *p;
- str s;
-
- str_init( &s );
- /* skip past "\href{" */
- p = str_cpytodelim( &s, in->data + 6, "}", 1 );
- if ( str_memerr( &s ) ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- fstatus = fields_add( info, "URL", s.data, 0 );
- if ( fstatus!=FIELDS_OK ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
-
- (void) str_cpytodelim( &s, p, "", 0 );
- if ( str_memerr( &s ) ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- str_swapstrings( &s, in );
-out:
- str_free( &s );
- return status;
-}
-
-static int
-is_name_tag( str *tag )
-{
- if ( str_has_value( tag ) ) {
- if ( !strcasecmp( str_cstr( tag ), "author" ) ) return 1;
- if ( !strcasecmp( str_cstr( tag ), "editor" ) ) return 1;
- if ( !strcasecmp( str_cstr( tag ), "editorb" ) ) return 1;
- if ( !strcasecmp( str_cstr( tag ), "editorc" ) ) return 1;
- if ( !strcasecmp( str_cstr( tag ), "director" ) ) return 1;
- if ( !strcasecmp( str_cstr( tag ), "producer" ) ) return 1;
- if ( !strcasecmp( str_cstr( tag ), "execproducer" ) ) return 1;
- if ( !strcasecmp( str_cstr( tag ), "writer" ) ) return 1;
- if ( !strcasecmp( str_cstr( tag ), "redactor" ) ) return 1;
- if ( !strcasecmp( str_cstr( tag ), "annotator" ) ) return 1;
- if ( !strcasecmp( str_cstr( tag ), "commentator" ) ) return 1;
- if ( !strcasecmp( str_cstr( tag ), "translator" ) ) return 1;
- if ( !strcasecmp( str_cstr( tag ), "foreword" ) ) return 1;
- if ( !strcasecmp( str_cstr( tag ), "afterword" ) ) return 1;
- if ( !strcasecmp( str_cstr( tag ), "introduction" ) ) return 1;
- }
- return 0;
-}
-
-static int
-is_url_tag( str *tag )
-{
- if ( str_has_value( tag ) ) {
- if ( !strcasecmp( str_cstr( tag ), "url" ) ) return 1;
- }
- return 0;
-}
-
-static int
-biblatexin_cleandata( str *tag, str *s, fields *info, param *p )
-{
- slist tokens;
- str *tok;
- int i, status = BIBL_OK;
- if ( str_is_empty( s ) ) return status;
- /* protect url from undergoing any parsing */
- if ( is_url_tag( tag ) ) return status;
- slist_init( &tokens );
- biblatex_split( &tokens, s );
- for ( i=0; i<tokens.n; ++i ) {
- if ( !strncasecmp(slist_cstr( &tokens, i ), "\\href{", 6 )) {
- status = biblatexin_addtitleurl( info, slist_str( &tokens, i ) );
- if ( status!=BIBL_OK ) goto out;
- }
- if ( p && p->latexin && !is_name_tag( tag ) ) {
- status = biblatex_cleantoken( slist_str( &tokens, i ) );
- if ( status!=BIBL_OK ) goto out;
- }
- }
- str_empty( s );
- for ( i=0; i<tokens.n; ++i ) {
- tok = slist_str( &tokens, i );
- if ( i>0 ) str_addchar( s, ' ' );
- str_strcat( s, tok );
- }
-out:
- slist_free( &tokens );
- return status;
-}
-
-static long
-biblatexin_findref( bibl *bin, char *citekey )
-{
- int n;
- long i;
- for ( i=0; i<bin->nrefs; ++i ) {
- n = fields_find( bin->ref[i], "refnum", LEVEL_ANY );
- if ( n==FIELDS_NOTFOUND ) continue;
- if ( !strcmp( bin->ref[i]->data[n].data, citekey ) ) return i;
- }
- return -1;
-}
-
-static void
-biblatexin_nocrossref( bibl *bin, long i, int n, param *p )
-{
- int n1 = fields_find( bin->ref[i], "REFNUM", LEVEL_ANY );
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Cannot find cross-reference '%s'", bin->ref[i]->data[n].data);
- if ( n1!=FIELDS_NOTFOUND )
- fprintf( stderr, " for reference '%s'", bin->ref[i]->data[n1].data );
- fprintf( stderr, "\n" );
-}
-
-static int
-biblatexin_crossref_oneref( fields *ref, fields *cross )
-{
- int j, nl, ntype, fstatus;
- char *type, *nt, *nd;
- ntype = fields_find( ref, "INTERNAL_TYPE", LEVEL_ANY );
- type = ( char * ) fields_value( ref, ntype, FIELDS_CHRP_NOUSE );
- for ( j=0; j<cross->n; ++j ) {
- nt = ( char * ) fields_tag( cross, j, FIELDS_CHRP_NOUSE );
- if ( !strcasecmp( nt, "INTERNAL_TYPE" ) ) continue;
- if ( !strcasecmp( nt, "REFNUM" ) ) continue;
- if ( !strcasecmp( nt, "TITLE" ) ) {
- if ( !strcasecmp( type, "Inproceedings" ) ||
- !strcasecmp( type, "Incollection" ) )
- nt = "booktitle";
- }
- nd = ( char * ) fields_value( cross, j, FIELDS_CHRP_NOUSE );
- nl = fields_level( cross, j ) + 1;
- fstatus = fields_add( ref, nt, nd, nl );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- return BIBL_OK;
-}
-
-static int
-biblatexin_crossref( bibl *bin, param *p )
-{
- int n, ncross, status = BIBL_OK;
- fields *ref, *cross;
- long i;
- for ( i=0; i<bin->nrefs; ++i ) {
- ref = bin->ref[i];
- n = fields_find( ref, "CROSSREF", LEVEL_ANY );
- if ( n==FIELDS_NOTFOUND ) continue;
- fields_setused( ref, n );
- ncross = biblatexin_findref(bin, (char*)fields_value(ref,n, FIELDS_CHRP_NOUSE));
- if ( ncross==-1 ) {
- biblatexin_nocrossref( bin, i, n, p );
- continue;
- }
- cross = bin->ref[ncross];
- status = biblatexin_crossref_oneref( ref, cross );
- if ( status!=BIBL_OK ) return status;
- }
- return status;
-}
-
-static int
-biblatexin_cleanref( fields *bibin, param *p )
-{
- int i, n, status;
- str *t, *d;
- n = fields_num( bibin );
- for ( i=0; i<n; ++i ) {
- t = fields_tag( bibin, i, FIELDS_STRP_NOUSE );
- d = fields_value( bibin, i, FIELDS_STRP_NOUSE );
- status = biblatexin_cleandata( t, d, bibin, p );
- if ( status!=BIBL_OK ) return status;
- if ( !strsearch( str_cstr( t ), "AUTHORS" ) ) {
- str_findreplace( d, "\n", " " );
- str_findreplace( d, "\r", " " );
- }
- else if ( !strsearch( str_cstr( t ), "ABSTRACT" ) ||
- !strsearch( str_cstr( t ), "SUMMARY" ) ||
- !strsearch( str_cstr( t ), "NOTE" ) ) {
- str_findreplace( d, "\n", "" );
- str_findreplace( d, "\r", "" );
- }
- }
- return BIBL_OK;
-}
-
-static int
-biblatexin_cleanf( bibl *bin, param *p )
-{
- int status;
- long i;
- for ( i=0; i<bin->nrefs; ++i ) {
- status = biblatexin_cleanref( bin->ref[i], p );
- if ( status!=BIBL_OK ) return status;
- }
- status = biblatexin_crossref( bin, p );
- return status;
-}
-
-/*****************************************************
- PUBLIC: void biblatexin_typef()
-*****************************************************/
-
-static int
-biblatexin_typef( fields *bibin, const char *filename, int nrefs, param *p )
-{
- int ntypename, nrefname, is_default;
- char *refname = "", *typename="";
-
- ntypename = fields_find( bibin, "INTERNAL_TYPE", LEVEL_MAIN );
- nrefname = fields_find( bibin, "REFNUM", LEVEL_MAIN );
- if ( nrefname!=FIELDS_NOTFOUND ) refname = fields_value( bibin, nrefname, FIELDS_CHRP_NOUSE );
- if ( ntypename!=FIELDS_NOTFOUND ) typename = fields_value( bibin, ntypename, FIELDS_CHRP_NOUSE );
-
- return get_reftype( typename, nrefs, p->progname, p->all, p->nall, refname, &is_default, REFTYPE_CHATTY );
-}
-
-/*****************************************************
- PUBLIC: int biblatexin_convertf(), returns BIBL_OK or BIBL_ERR_MEMERR
-*****************************************************/
-
-/* get_title_elements()
- *
- * find all of the biblatex title elements for the current level
- * internal "TITLE" -> "title", "booktitle", "maintitle"
- * internal "SUBTITLE" -> "subtitle", "booksubtitle", "mainsubtitle"
- * internal "TITLEADDON" -> "titleaddon", "booktitleaddon", "maintitleaddon"
- *
- * place in ttl, subttl, and ttladdon strings
- *
- * return 1 if an element is found, 0 if not
- */
-static int
-get_title_elements( fields *bibin, int currlevel, int reftype, variants *all, int nall, str *ttl, str *subttl, str *ttladdon )
-{
- int nfields, process, level, i;
- str *t, *d;
- char *newtag;
-
- strs_empty( ttl, subttl, ttladdon, NULL );
-
- nfields = fields_num( bibin );
-
- for ( i=0; i<nfields; ++i ) {
-
- /* ...skip already used titles */
- if ( fields_used( bibin, i ) ) continue;
-
- /* ...skip empty elements */
- t = fields_tag ( bibin, i, FIELDS_STRP_NOUSE );
- d = fields_value( bibin, i, FIELDS_STRP_NOUSE );
- if ( d->len == 0 ) continue;
-
- if ( !translate_oldtag( t->data, reftype, all, nall, &process, &level, &newtag ) )
- continue;
- if ( process != TITLE ) continue;
- if ( level != currlevel ) continue;
-
- fields_setused( bibin, i );
-
- if ( !strcasecmp( newtag, "TITLE" ) ) {
- if ( str_has_value( ttl ) ) str_addchar( ttl, ' ' );
- str_strcat( ttl, d );
- } else if ( !strcasecmp( newtag, "SUBTITLE" ) ) {
- if ( str_has_value( subttl ) ) str_addchar( subttl, ' ' );
- str_strcat( subttl, d );
- } else if ( !strcasecmp( newtag, "TITLEADDON" ) ) {
- if ( str_has_value( ttladdon ) ) str_addchar( ttladdon, ' ' );
- str_strcat( ttladdon, d );
- }
- }
-
- return ( ttl->len>0 || subttl->len > 0 || ttladdon->len > 0 );
-}
-
-/* attach_subtitle()
- *
- * Add subtitle (if exists) to the title
- */
-static void
-attach_subtitle( str *title, str *subtitle )
-{
- if ( str_has_value( subtitle ) ) {
- if ( str_has_value( title ) ) {
- if ( title->data[title->len-1]!=':' && title->data[title->len-1]!='?' )
- str_addchar( title, ':' );
- str_addchar( title, ' ' );
- }
- str_strcat( title, subtitle );
- }
-}
-
-/* attach_addon()
- *
- * Add titleaddon (if exists) to the title.
- */
-static void
-attach_addon( str *title, str *addon )
-{
- if ( str_has_value( addon ) ) {
- if ( str_has_value( title ) ) {
- if ( title->data[title->len-1]!='.' )
- str_addchar( title, '.' );
- str_addchar( title, ' ' );
- }
- str_strcat( title, addon );
- }
-}
-
-static int
-process_combined_title( fields *info, str *ttl, str *subttl, str *ttladdon, int currlevel )
-{
- int fstatus, status = BIBL_OK;
- str combined;
-
- str_init( &combined );
-
- str_strcpy( &combined, ttl );
- attach_subtitle( &combined, subttl );
- attach_addon( &combined, ttladdon );
-
- if ( str_memerr( &combined ) ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
-
- fstatus = fields_add( info, "TITLE", combined.data, currlevel );
- if ( fstatus==FIELDS_OK ) status = BIBL_ERR_MEMERR;
-out:
- str_free( &combined );
- return status;
-}
-
-static int
-process_separated_title( fields *info, str *ttl, str *subttl, str *ttladdon, int currlevel )
-{
- int fstatus;
- if ( str_has_value( ttladdon ) ) {
- if ( subttl->len ) attach_addon( subttl, ttladdon );
- else attach_addon( ttl, ttladdon );
- }
- if ( str_has_value( ttl ) ) {
- fstatus = fields_add( info, "TITLE", str_cstr( ttl ), currlevel );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- if ( str_has_value( subttl ) ) {
- fstatus = fields_add( info, "SUBTITLE", str_cstr( subttl ), currlevel );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- return BIBL_OK;
-}
-
-static int
-process_title_all( fields *bibin, fields *info, int reftype, param *p )
-{
- int currlevel, found, status = BIBL_OK;
- str ttl, subttl, ttladdon;
- strs_init( &ttl, &subttl, &ttladdon, NULL );
- for ( currlevel = 0; currlevel<LEVEL_SERIES+2; currlevel++ ) {
- found = get_title_elements( bibin, currlevel, reftype, p->all, p->nall, &ttl, &subttl, &ttladdon );
- if ( !found ) continue;
- if ( p->nosplittitle )
- status = process_combined_title( info, &ttl, &subttl, &ttladdon, currlevel );
- else
- status = process_separated_title( info, &ttl, &subttl, &ttladdon, currlevel );
- if ( status!=BIBL_OK ) goto out;
- }
-out:
- strs_free( &ttl, &subttl, &ttladdon, NULL );
- return status;
-}
-
-
-static int
-biblatex_matches_list( fields *info, char *tag, char *suffix, str *data, int level, slist *names, int *match )
-{
- int i, fstatus, status = BIBL_OK;
- str newtag;
-
- *match = 0;
- if ( names->n==0 ) return status;
-
- str_init( &newtag );
-
- for ( i=0; i<names->n; ++i ) {
- if ( strcmp( str_cstr( data ), slist_cstr( names, i ) ) ) continue;
- str_initstrc( &newtag, tag );
- str_strcatc( &newtag, suffix );
- fstatus = fields_add( info, str_cstr( &newtag ), str_cstr( data ), level );
- if ( fstatus!=FIELDS_OK ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- *match = 1;
- goto out;
- }
-
-out:
- str_free( &newtag );
- return status;
-}
-
-static int
-biblatex_names( fields *info, char *tag, str *data, int level, slist *asis, slist *corps )
-{
- int begin, end, ok, n, etal, i, match, status = BIBL_OK;
- slist tokens;
-
- /* If we match the asis or corps list add and bail. */
- status = biblatex_matches_list( info, tag, ":ASIS", data, level, asis, &match );
- if ( match==1 || status!=BIBL_OK ) return status;
- status = biblatex_matches_list( info, tag, ":CORP", data, level, corps, &match );
- if ( match==1 || status!=BIBL_OK ) return status;
-
- slist_init( &tokens );
-
- biblatex_split( &tokens, data );
- for ( i=0; i<tokens.n; ++i )
- biblatex_cleantoken( slist_str( &tokens, i ) );
-
- etal = name_findetal( &tokens );
-
- begin = 0;
- n = tokens.n - etal;
- while ( begin < n ) {
-
- end = begin + 1;
-
- while ( end < n && strcasecmp( slist_cstr( &tokens, end ), "and" ) )
- end++;
-
- if ( end - begin == 1 ) {
- ok = name_addsingleelement( info, tag, slist_cstr( &tokens, begin ), level, 0 );
- if ( !ok ) { status = BIBL_ERR_MEMERR; goto out; }
- } else {
- ok = name_addmultielement( info, tag, &tokens, begin, end, level );
- if ( !ok ) { status = BIBL_ERR_MEMERR; goto out; }
- }
-
- begin = end + 1;
-
- /* Handle repeated 'and' errors */
- while ( begin < n && !strcasecmp( slist_cstr( &tokens, begin ), "and" ) )
- begin++;
-
- }
-
- if ( etal ) {
- ok = name_addsingleelement( info, tag, "et al.", level, 0 );
- if ( !ok ) status = BIBL_ERR_MEMERR;
- }
-
-out:
- slist_free( &tokens );
- return status;
-}
-
-static int
-biblatexin_bltsubtype( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int fstatus1, fstatus2;
-
- if ( !strcasecmp( str_cstr( invalue ), "magazine" ) ) {
- fstatus1 = fields_add( bibout, "GENRE:BIBUTILS", "magazine article", LEVEL_MAIN );
- fstatus2 = fields_add( bibout, "GENRE:BIBUTILS", "magazine", LEVEL_HOST );
- if ( fstatus1!=FIELDS_OK || fstatus2!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
-
- else if ( !strcasecmp( str_cstr( invalue ), "newspaper" ) ) {
- fstatus1 = fields_add( bibout, "GENRE:BIBUTILS", "newspaper article", LEVEL_MAIN );
- fstatus2 = fields_add( bibout, "GENRE:MARC", "newspaper", LEVEL_HOST );
- if ( fstatus1!=FIELDS_OK || fstatus2!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
-
- return BIBL_OK;
-}
-
-/* biblatex drops school field if institution is present */
-static int
-biblatexin_bltschool( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int fstatus;
- if ( fields_find( bibin, "institution", LEVEL_ANY ) != FIELDS_NOTFOUND )
- return BIBL_OK;
- else {
- fstatus = fields_add( bibout, outtag, str_cstr( invalue ), level );
- if ( fstatus==FIELDS_OK ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
- }
-}
-
-static int
-biblatexin_bltthesistype( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- char *p = invalue->data;
- int fstatus = FIELDS_OK;
- /* type in the @thesis is used to distinguish Ph.D. and Master's thesis */
- if ( !strncasecmp( p, "phdthesis", 9 ) ) {
- fstatus = fields_replace_or_add( bibout, "GENRE:BIBUTILS", "Ph.D. thesis", level );
- } else if ( !strncasecmp( p, "mastersthesis", 13 ) || !strncasecmp( p, "masterthesis", 12 ) ) {
- fstatus = fields_replace_or_add( bibout, "GENRE:BIBUTILS", "Masters thesis", level );
- } else if ( !strncasecmp( p, "mathesis", 8 ) ) {
- fstatus = fields_replace_or_add( bibout, "GENRE:BIBUTILS", "Masters thesis", level );
- } else if ( !strncasecmp( p, "diploma", 7 ) ) {
- fstatus = fields_replace_or_add( bibout, "GENRE:BIBUTILS", "Diploma thesis", level );
- } else if ( !strncasecmp( p, "habilitation", 12 ) ) {
- fstatus = fields_replace_or_add( bibout, "GENRE:BIBUTILS", "Habilitation thesis", level );
- }
- if ( fstatus==FIELDS_OK ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
-}
-
-static int
-biblatexin_bteprint( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int neprint, netype, fstatus;
- char *eprint = NULL, *etype = NULL;
-
- neprint = fields_find( bibin, "eprint", LEVEL_ANY );
- netype = fields_find( bibin, "eprinttype", LEVEL_ANY );
-
- if ( neprint!=FIELDS_NOTFOUND ) eprint = bibin->data[neprint].data;
- if ( netype!=FIELDS_NOTFOUND ) etype = bibin->data[netype].data;
-
- if ( eprint && etype ) {
- if ( !strncasecmp( etype, "arxiv", 5 ) ) {
- fstatus = fields_add( bibout, "ARXIV", eprint, level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- } else if ( !strncasecmp( etype, "jstor", 5 ) ) {
- fstatus = fields_add( bibout, "JSTOR", eprint, level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- } else if ( !strncasecmp( etype, "pubmed", 6 ) ) {
- fstatus = fields_add( bibout, "PMID", eprint, level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- } else if ( !strncasecmp( etype, "medline", 7 ) ) {
- fstatus = fields_add( bibout, "MEDLINE", eprint, level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- } else {
- fstatus = fields_add( bibout, "EPRINT", eprint, level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- fstatus = fields_add( bibout, "EPRINTTYPE", etype, level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- fields_setused( bibin, neprint );
- fields_setused( bibin, netype );
- } else if ( eprint ) {
- fstatus = fields_add( bibout, "EPRINT", eprint, level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- fields_setused( bibin, neprint );
- } else if ( etype ) {
- fstatus = fields_add( bibout, "EPRINTTYPE", etype, level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- fields_setused( bibin, netype );
- }
- return BIBL_OK;
-}
-
-static int
-biblatexin_btgenre( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- if ( fields_add( bibout, "GENRE:BIBUTILS", str_cstr( invalue ), level ) == FIELDS_OK ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
-}
-
-/* biblatexin_howpublished()
- *
- * howpublished={},
- *
- * Normally indicates the manner in which something was
- * published in lieu of a formal publisher, so typically
- * 'howpublished' and 'publisher' will never be in the
- * same reference.
- *
- * Occasionally, people put Diploma thesis information
- * into this field, so check for that first.
- */
-static int
-biblatexin_howpublished( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int fstatus;
-
- if ( !strncasecmp( str_cstr( invalue ), "Diplom", 6 ) )
- fstatus = fields_replace_or_add( bibout, "GENRE:BIBUTILS", "Diploma thesis", level );
- else if ( !strncasecmp( str_cstr( invalue ), "Habilitation", 13 ) )
- fstatus = fields_replace_or_add( bibout, "GENRE:BIBUTILS", "Habilitation thesis", level );
- else
- fstatus = fields_add( bibout, "PUBLISHER", str_cstr( invalue ), level );
-
- if ( fstatus==FIELDS_OK ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
-}
-
-/*
- * biblatex has multiple editor fields "editor", "editora", "editorb", "editorc",
- * each of which can be modified from a type of "EDITOR" via "editortype",
- * "editoratype", "editorbtype", "editorctype".
- *
- * Defined types:
- * "editor"
- * "collaborator"
- * "compiler"
- * "redactor"
- *
- * "reviser" ?
- * "founder" ?
- * "continuator" ?
- *
- * bibtex-chicago
- *
- * "director"
- * "producer"
- * "conductor"
- * "none" (for performer)
- */
-static int
-biblatexin_blteditor( fields *bibin, int m, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- char *editor_fields[] = { "editor", "editora", "editorb", "editorc" };
- char *editor_types[] = { "editortype", "editoratype", "editorbtype", "editorctype" };
- int i, n = 0, ntype, neditors = sizeof( editor_fields ) / sizeof( editor_fields[0] );
- char *type, *usetag = "EDITOR";
- for ( i=1; i<neditors; ++i )
- if ( !strcasecmp( intag->data, editor_fields[i] ) ) n = i;
- ntype = fields_find( bibin, editor_types[n], LEVEL_ANY );
- if ( ntype!=FIELDS_NOTFOUND ) {
- type = fields_value( bibin, ntype, FIELDS_CHRP_NOUSE );
- if ( !strcasecmp( type, "collaborator" ) ) usetag = "COLLABORATOR";
- else if ( !strcasecmp( type, "compiler" ) ) usetag = "COMPILER";
- else if ( !strcasecmp( type, "redactor" ) ) usetag = "REDACTOR";
- else if ( !strcasecmp( type, "director" ) ) usetag = "DIRECTOR";
- else if ( !strcasecmp( type, "producer" ) ) usetag = "PRODUCER";
- else if ( !strcasecmp( type, "none" ) ) usetag = "PERFORMER";
- }
- return biblatex_names( bibout, usetag, invalue, level, &(pm->asis), &(pm->corps) );
-}
-
-static int
-biblatexin_person( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- return biblatex_names( bibout, outtag, invalue, level, &(pm->asis), &(pm->corps) );
-}
-
-static void
-biblatexin_notag( param *p, char *tag )
-{
- if ( p->verbose && strcmp( tag, "INTERNAL_TYPE" ) ) {
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, " Cannot find tag '%s'\n", tag );
- }
-}
-
-static int
-biblatexin_convertf( fields *bibin, fields *bibout, int reftype, param *p )
-{
- static int (*convertfns[NUM_REFTYPES])(fields *, int, str *, str *, int, param *, char *, fields *) = {
- // Patch: Fix compilation on MSVC target
- [ 0 ] = generic_null,
- [ 1 ] = generic_null,
- [ 2 ] = generic_null,
- [ 3 ] = generic_null,
- [ 4 ] = generic_null,
- [ 5 ] = generic_null,
- [ 6 ] = generic_null,
- [ 7 ] = generic_null,
- [ 8 ] = generic_null,
- [ 9 ] = generic_null,
- [ 10 ] = generic_null,
- [ 11 ] = generic_null,
- [ 12 ] = generic_null,
- [ 13 ] = generic_null,
- [ 14 ] = generic_null,
- [ 15 ] = generic_null,
- [ 16 ] = generic_null,
- [ 17 ] = generic_null,
- [ 18 ] = generic_null,
- [ 19 ] = generic_null,
- [ 20 ] = generic_null,
- [ 21 ] = generic_null,
- [ 22 ] = generic_null,
- [ 23 ] = generic_null,
- [ 24 ] = generic_null,
- [ 25 ] = generic_null,
- [ SIMPLE ] = generic_simple,
- [ PAGES ] = generic_pages,
- [ NOTES ] = generic_notes,
- [ PERSON ] = biblatexin_person,
- [ BLT_EDITOR ] = biblatexin_blteditor,
- [ HOWPUBLISHED ] = biblatexin_howpublished,
- [ URL ] = generic_url,
- [ GENRE ] = biblatexin_btgenre,
- [ BT_EPRINT ] = biblatexin_bteprint,
- [ BLT_THESIS_TYPE ] = biblatexin_bltthesistype,
- [ BLT_SCHOOL ] = biblatexin_bltschool,
- [ BLT_SUBTYPE ] = biblatexin_bltsubtype,
- [ BLT_SKIP ] = generic_skip,
- [ TITLE ] = generic_null, /* delay processing until later */
- };
-
- int process, level, i, nfields, status = BIBL_OK;
- str *intag, *invalue;
- char *outtag;
-
- nfields = fields_num( bibin );
- for ( i=0; i<nfields; ++i ) {
-
- /* skip ones already "used" such as successful crossref */
- if ( fields_used( bibin, i ) ) continue;
-
- /* skip ones with no data or no tags (e.g. don't match ALWAYS/DEFAULT entries) */
- intag = fields_tag ( bibin, i, FIELDS_STRP_NOUSE );
- invalue = fields_value( bibin, i, FIELDS_STRP_NOUSE );
- if ( str_is_empty( intag ) || str_is_empty( invalue ) ) continue;
-
- if ( !translate_oldtag( intag->data, reftype, p->all, p->nall, &process, &level, &outtag ) ) {
- biblatexin_notag( p, intag->data );
- continue;
- }
-
- status = convertfns[ process ]( bibin, i, intag, invalue, level, p, outtag, bibout );
- if ( status!=BIBL_OK ) return status;
-
- if ( convertfns[ process ] != generic_null )
- fields_setused( bibin, i );
-
- }
-
- status = process_title_all( bibin, bibout, reftype, p );
-
- if ( status==BIBL_OK && p->verbose ) fields_report( bibout, stdout );
-
- return status;
-}
-
diff --git a/support/texlab/crates/bibutils_sys/src/bibtexin.c b/support/texlab/crates/bibutils_sys/src/bibtexin.c
deleted file mode 100644
index 3401074547..0000000000
--- a/support/texlab/crates/bibutils_sys/src/bibtexin.c
+++ /dev/null
@@ -1,1517 +0,0 @@
-/*
- * bibtexin.c
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Program and source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include "is_ws.h"
-#include "str.h"
-#include "utf8.h"
-#include "str_conv.h"
-#include "fields.h"
-#include "slist.h"
-#include "name.h"
-#include "title.h"
-#include "url.h"
-#include "reftypes.h"
-#include "bibformats.h"
-#include "generic.h"
-#include "msvc_fix.h"
-
-static slist find = { 0, 0, 0, NULL };
-static slist replace = { 0, 0, 0, NULL };
-
-extern variants bibtex_all[];
-extern int bibtex_nall;
-
-/*****************************************************
- PUBLIC: void bibtexin_initparams()
-*****************************************************/
-
-static int bibtexin_convertf( fields *bibin, fields *info, int reftype, param *p );
-static int bibtexin_processf( fields *bibin, const char *data, const char *filename, long nref, param *p );
-static int bibtexin_cleanf( bibl *bin, param *p );
-static int bibtexin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset );
-static int bibtexin_typef( fields *bibin, const char *filename, int nrefs, param *p );
-
-int
-bibtexin_initparams( param *pm, const char *progname )
-{
- pm->readformat = BIBL_BIBTEXIN;
- pm->charsetin = BIBL_CHARSET_DEFAULT;
- pm->charsetin_src = BIBL_SRC_DEFAULT;
- pm->latexin = 1;
- pm->xmlin = 0;
- pm->utf8in = 0;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->output_raw = 0;
-
- pm->readf = bibtexin_readf;
- pm->processf = bibtexin_processf;
- pm->cleanf = bibtexin_cleanf;
- pm->typef = bibtexin_typef;
- pm->convertf = bibtexin_convertf;
- pm->all = bibtex_all;
- pm->nall = bibtex_nall;
-
- slist_init( &(pm->asis) );
- slist_init( &(pm->corps) );
-
- if ( !progname ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( pm->progname==NULL ) return BIBL_ERR_MEMERR;
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int bibtexin_readf()
-*****************************************************/
-
-/*
- * readf can "read too far", so we store this information in line, thus
- * the next new text is in line, either from having read too far or
- * from the next chunk obtained via str_fget()
- *
- * return 1 on success, 0 on error/end-of-file
- *
- */
-static int
-readmore( FILE *fp, char *buf, int bufsize, int *bufpos, str *line )
-{
- if ( line->len ) return 1;
- else return str_fget( fp, buf, bufsize, bufpos, line );
-}
-
-/*
- * readf()
- *
- * returns zero if cannot get reference and hit end of-file
- * returns 1 if last reference in file, 2 if reference within file
- */
-static int
-bibtexin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset )
-{
- int haveref = 0;
- const char *p;
- *fcharset = CHARSET_UNKNOWN;
- while ( haveref!=2 && readmore( fp, buf, bufsize, bufpos, line ) ) {
- if ( line->len == 0 ) continue; /* blank line */
- p = &(line->data[0]);
- /* Recognize UTF8 BOM */
- if ( line->len > 2 &&
- (unsigned char)(p[0])==0xEF &&
- (unsigned char)(p[1])==0xBB &&
- (unsigned char)(p[2])==0xBF ) {
- *fcharset = CHARSET_UNICODE;
- p += 3;
- }
- p = skip_ws( p );
- if ( *p == '%' ) { /* commented out line */
- str_empty( line );
- continue;
- }
- if ( *p == '@' ) haveref++;
- if ( haveref && haveref<2 ) {
- str_strcatc( reference, p );
- str_addchar( reference, '\n' );
- str_empty( line );
- } else if ( !haveref ) str_empty( line );
-
- }
- return haveref;
-}
-
-/*****************************************************
- PUBLIC: int bibtexin_processf()
-*****************************************************/
-
-typedef struct loc {
- const char *progname;
- const char *filename;
- long nref;
-} loc;
-
-/* process_bibtextype()
- *
- * extract 'article', 'book', etc. from:
- *
- * @article{...}
- * @book(...)
- *
- * return pointer after '{' or '(' character
- */
-static const char*
-process_bibtextype( const char *p, str *type )
-{
- str tmp;
-
- str_init( &tmp );
-
- if ( *p=='@' ) p++;
- p = skip_ws( p );
-
- p = str_cpytodelim( &tmp, p, "{( \t\r\n", 0 );
- p = skip_ws( p );
-
- if ( *p=='{' || *p=='(' ) p++;
- p = skip_ws( p );
-
- if ( str_has_value( &tmp ) ) str_strcpy( type, &tmp );
- else str_empty( type );
-
- str_free( &tmp );
-
- return p;
-}
-
-static const char *
-process_bibtexid( const char *p, str *id )
-{
- const char *start_p = p;
- str tmp;
-
- str_init( &tmp );
- p = str_cpytodelim( &tmp, p, ",", 1 );
-
- if ( str_has_value( &tmp ) ) {
- if ( strchr( tmp.data, '=' ) ) {
- /* Endnote writes bibtex files w/o fields, try to
- * distinguish via presence of an equal sign.... if
- * it's there, assume that it's a tag/data pair instead
- * and roll back.
- */
- p = start_p;
- str_empty( id );
- } else {
- str_strcpy( id, &tmp );
- }
- } else {
- str_empty( id );
- }
-
- str_free( &tmp );
- return skip_ws( p );
-}
-
-/* bibtex_tag()
- *
- * returns NULL on memory error, else position after tag+whitespace
- */
-static const char *
-bibtex_tag( const char *p, str *tag )
-{
- p = str_cpytodelim( tag, p, "= \t\r\n", 0 );
- if ( str_memerr( tag ) ) return NULL;
- return skip_ws( p );
-}
-
-static int
-quotation_mark_is_escaped( int nbraces, const char *p, const char *startp )
-{
- if ( nbraces!=0 ) return 1;
- if ( p!=startp && *(p-1)=='\\' ) return 1;
- return 0;
-}
-
-static int
-brace_is_escaped( int nquotes, const char *p, const char *startp )
-{
- if ( nquotes!=0 ) return 1;
- if ( p!=startp && *(p-1)=='\\' ) return 1;
- return 0;
-}
-
-static int
-char_is_escaped( int nquotes, int nbraces )
-{
- if ( nquotes!=0 || nbraces!=0 ) return 1;
- return 0;
-}
-
-static int
-add_token( slist *tokens, str *token )
-{
- int status;
-
- if ( str_memerr( token ) ) return BIBL_ERR_MEMERR;
-
- status = slist_add( tokens, token );
- if ( status!=SLIST_OK ) return BIBL_ERR_MEMERR;
-
- str_empty( token );
-
- return BIBL_OK;
-}
-
-static const char *
-bibtex_data( const char *p, slist *tokens, loc *currloc )
-{
- int nbraces = 0, nquotes = 0;
- const char *startp = p;
- int status;
- str token;
-
- str_init( &token );
-
- while ( p && *p ) {
-
- /* ...have we reached end-of-data? */
- if ( nquotes==0 && nbraces==0 ) {
- if ( *p==',' || *p=='=' || *p=='}' || *p==')' ) goto out;
- }
-
- if ( *p=='\"' ) {
- str_addchar( &token, *p );
- if ( !quotation_mark_is_escaped( nbraces, p, startp ) ) {
- nquotes = !nquotes;
- if ( nquotes==0 ) {
- status = add_token( tokens, &token );
- if ( status!=BIBL_OK ) { p=NULL; goto out0; }
- }
- }
- }
-
- else if ( *p=='{' ) {
- str_addchar( &token, *p );
- if ( !brace_is_escaped( nquotes, p, startp ) ) {
- nbraces++;
- }
- }
-
- else if ( *p=='}' ) {
- str_addchar( &token, *p );
- if ( !brace_is_escaped( nquotes, p, startp ) ) {
- nbraces--;
- if ( nbraces==0 ) {
- status = add_token( tokens, &token );
- if ( status!=BIBL_OK ) { p=NULL; goto out0; }
- }
- if ( nbraces<0 ) {
- goto out;
- }
- }
- }
-
- else if ( *p=='#' ) {
- if ( char_is_escaped( nquotes, nbraces ) ) {
- str_addchar( &token, *p );
- }
- /* ...this is a bibtex string concatentation token */
- else {
- if ( str_has_value( &token ) ) {
- status = add_token( tokens, &token );
- if ( status!=BIBL_OK ) { p=NULL; goto out0; }
- }
- status = slist_addc( tokens, "#" );
- if ( status!=SLIST_OK ) { p=NULL; goto out0; }
- }
- }
-
- /* ...add escaped white-space and non-white-space to current token */
- else if ( !is_ws( *p ) || char_is_escaped( nquotes, nbraces ) ) {
- /* always add non-whitespace characters */
- if ( !is_ws( *p ) ) {
- str_addchar( &token, *p );
- }
- /* only add whitespace if token is non-empty; convert CR/LF to space */
- else if ( token.len!=0 ) {
- if ( *p!='\n' && *p!='\r' )
- str_addchar( &token, *p );
- else {
- str_addchar( &token, ' ' );
- while ( is_ws( *(p+1) ) ) p++;
- }
- }
- }
-
- /* ...unescaped white-space marks the end of a token */
- else if ( is_ws( *p ) ) {
- if ( token.len ) {
- status = add_token( tokens, &token );
- if ( status!=BIBL_OK ) { p=NULL; goto out0; }
- }
- }
-
- p++;
- }
-out:
- if ( nbraces!=0 ) {
- fprintf( stderr, "%s: Mismatch in number of braces in file %s reference %ld.\n", currloc->progname, currloc->filename, currloc->nref );
- }
- if ( nquotes!=0 ) {
- fprintf( stderr, "%s: Mismatch in number of quotes in file %s reference %ld.\n", currloc->progname, currloc->filename, currloc->nref );
- }
- if ( str_has_value( &token ) ) {
- if ( str_memerr( &token ) ) { p = NULL; goto out; }
- status = slist_add( tokens, &token );
- if ( status!=SLIST_OK ) p = NULL;
- }
-out0:
- str_free( &token );
- return p;
-}
-
-#define NOT_ESCAPED (0)
-#define ESCAPED_QUOTES (1)
-#define ESCAPED_BRACES (2)
-
-static int
-token_is_escaped( str *s )
-{
- if ( s->data[0]=='\"' && s->data[s->len-1]=='\"' ) return ESCAPED_QUOTES;
- if ( s->data[0]=='{' && s->data[s->len-1]=='}' ) return ESCAPED_BRACES;
- return NOT_ESCAPED;
-}
-
-/* replace_strings()
- *
- * do bibtex string replacement for data tokens
- */
-static int
-replace_strings( slist *tokens )
-{
- int i, n;
- str *s;
-
- for ( i=0; i<tokens->n; ++i ) {
-
- s = slist_str( tokens, i );
-
- /* ...skip if token is protected by quotation marks or braces */
- if ( token_is_escaped( s ) ) continue;
-
- /* ...skip if token is string concatentation symbol */
- if ( !str_strcmpc( s, "#" ) ) continue;
-
- n = slist_find( &find, s );
- if ( slist_wasnotfound( &find, n ) ) continue;
-
- str_strcpy( s, slist_str( &replace, n ) );
- if ( str_memerr( s ) ) return BIBL_ERR_MEMERR;
-
- }
-
- return BIBL_OK;
-}
-
-static int
-string_concatenate( slist *tokens, loc *currloc )
-{
- int i, status, esc_s, esc_t;
- str *s, *t;
-
- i = 0;
- while ( i < tokens->n ) {
-
- s = slist_str( tokens, i );
- if ( str_strcmpc( s, "#" ) ) {
- i++;
- continue;
- }
-
- if ( i==0 || i==tokens->n-1 ) {
- fprintf( stderr, "%s: Warning: Stray string concatenation ('#' character) in file %s reference %ld\n",
- currloc->progname, currloc->filename, currloc->nref );
- status = slist_remove( tokens, i );
- if ( status!=SLIST_OK ) return BIBL_ERR_MEMERR;
- continue;
- }
-
- s = slist_str( tokens, i-1 );
- t = slist_str( tokens, i+1 );
-
- esc_s = token_is_escaped( s );
- esc_t = token_is_escaped( t );
-
- if ( esc_s != NOT_ESCAPED ) str_trimend( s, 1 );
- if ( esc_t != NOT_ESCAPED ) str_trimbegin( t, 1 );
- if ( esc_s != esc_t ) {
- if ( esc_s == NOT_ESCAPED ) {
- if ( esc_t == ESCAPED_QUOTES ) str_prepend( s, "\"" );
- else str_prepend( s, "{" );
- }
- else {
- if ( esc_t != NOT_ESCAPED ) str_trimend( t, 1 );
- if ( esc_s == ESCAPED_QUOTES ) str_addchar( t, '\"' );
- else str_addchar( t, '}' );
- }
- }
-
- str_strcat( s, t );
- if ( str_memerr( s ) ) return BIBL_ERR_MEMERR;
-
- /* ...remove concatenated string t */
- status = slist_remove( tokens, i+1 );
- if ( status!=SLIST_OK ) return BIBL_ERR_MEMERR;
-
- /* ...remove concatentation token '#' */
- status = slist_remove( tokens, i );
- if ( status!=SLIST_OK ) return BIBL_ERR_MEMERR;
-
- }
-
- return BIBL_OK;
-}
-
-#define KEEP_QUOTES (0)
-#define STRIP_QUOTES (1)
-
-static int
-merge_tokens_into_data( str *data, slist *tokens, int stripquotes )
-{
- int i, esc_s;
- str *s;
-
- for ( i=0; i<tokens->n; i++ ) {
-
- s = slist_str( tokens, i );
- esc_s = token_is_escaped( s );
-
- if ( ( esc_s == ESCAPED_BRACES ) ||
- ( stripquotes == STRIP_QUOTES && esc_s == ESCAPED_QUOTES ) ) {
- str_trimbegin( s, 1 );
- str_trimend( s, 1 );
- }
-
- str_strcat( data, s );
-
- }
-
- if ( str_memerr( data ) ) return BIBL_ERR_MEMERR;
- else return BIBL_OK;
-}
-
-/* return NULL on memory error */
-static const char *
-process_bibtexline( const char *p, str *tag, str *data, uchar stripquotes, loc *currloc )
-{
- slist tokens;
- int status;
-
- str_empty( data );
-
- slist_init( &tokens );
-
- p = bibtex_tag( skip_ws( p ), tag );
- if ( p ) {
- if ( str_is_empty( tag ) ) {
- p = skip_line( p );
- goto out;
- }
- }
-
- if ( p && *p=='=' ) {
- p = bibtex_data( p+1, &tokens, currloc );
- }
-
- if ( p ) {
- status = replace_strings( &tokens );
- if ( status!=BIBL_OK ) p = NULL;
- }
-
- if ( p ) {
- status = string_concatenate( &tokens, currloc );
- if ( status!=BIBL_OK ) p = NULL;
- }
-
- if ( p ) {
- status = merge_tokens_into_data( data, &tokens, stripquotes );
- if ( status!=BIBL_OK ) p = NULL;
- }
-
-out:
- slist_free( &tokens );
- return p;
-}
-
-/* process_ref()
- *
- */
-static int
-process_ref( fields *bibin, const char *p, loc *currloc )
-{
- int fstatus, status = BIBL_OK;
- str type, id, tag, data;
-
- strs_init( &type, &id, &tag, &data, NULL );
-
- p = process_bibtextype( p, &type );
- p = process_bibtexid( p, &id );
-
- if ( str_is_empty( &type ) || str_is_empty( &id ) ) goto out;
-
- fstatus = fields_add( bibin, "INTERNAL_TYPE", str_cstr( &type ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; }
-
- fstatus = fields_add( bibin, "REFNUM", str_cstr( &id ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; }
-
- while ( *p ) {
-
- p = process_bibtexline( p, &tag, &data, STRIP_QUOTES, currloc );
- if ( p==NULL ) { status = BIBL_ERR_MEMERR; goto out; }
-
- if ( !str_has_value( &tag ) || !str_has_value( &data ) ) continue;
-
- fstatus = fields_add( bibin, str_cstr( &tag ), str_cstr( &data ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; }
-
- }
-out:
- strs_free( &type, &id, &tag, &data, NULL );
- return status;
-}
-
-/* process_string()
- *
- * Handle lines like:
- *
- * '@STRING{TL = {Tetrahedron Lett.}}'
- *
- * p should point to just after '@STRING'
- *
- * In BibTeX, if a string is defined several times, the last one is kept.
- *
- */
-static int
-process_string( const char *p, loc *currloc )
-{
- int n, status = BIBL_OK;
- str s1, s2, *t;
-
- strs_init( &s1, &s2, NULL );
-
- while ( *p && *p!='{' && *p!='(' ) p++;
- if ( *p=='{' || *p=='(' ) p++;
-
- p = process_bibtexline( skip_ws( p ), &s1, &s2, KEEP_QUOTES, currloc );
- if ( p==NULL ) { status = BIBL_ERR_MEMERR; goto out; }
-
- if ( str_has_value( &s2 ) ) {
- str_findreplace( &s2, "\\ ", " " );
- } else {
- str_strcpyc( &s2, "" );
- }
-
- if ( str_has_value( &s1 ) ) {
- n = slist_find( &find, &s1 );
- if ( n==-1 ) {
- status = slist_add_ret( &find, &s1, BIBL_OK, BIBL_ERR_MEMERR );
- if ( status!=BIBL_OK ) goto out;
- status = slist_add_ret( &replace, &s2, BIBL_OK, BIBL_ERR_MEMERR );
- if ( status!=BIBL_OK ) goto out;
- } else {
- t = slist_set( &replace, n, &s2 );
- if ( t==NULL ) { status = BIBL_ERR_MEMERR; goto out; }
- }
- }
-
-out:
- strs_free( &s1, &s2, NULL );
- return status;
-}
-
-/* bibtexin_processf()
- *
- * Handle '@STRING', '@reftype', and ignore '@COMMENT'
- */
-static int
-bibtexin_processf( fields *bibin, const char *data, const char *filename, long nref, param *pm )
-{
- loc currloc;
-
- currloc.progname = pm->progname;
- currloc.filename = filename;
- currloc.nref = nref;
-
- if ( !strncasecmp( data, "@STRING", 7 ) ) {
- process_string( data+7, &currloc );
- return 0;
- } else if ( !strncasecmp( data, "@COMMENT", 8 ) ) {
- /* Not sure if these are real Bibtex, but not references */
- return 0;
- } else {
- process_ref( bibin, data, &currloc );
- return 1;
- }
-}
-
-/*****************************************************
- PUBLIC: void bibtexin_cleanf()
-*****************************************************/
-
-static int
-bibtex_protected( str *data )
-{
- if ( data->data[0]=='{' && data->data[data->len-1]=='}' ) return 1;
- if ( data->data[0]=='\"' && data->data[data->len-1]=='\"' ) return 1;
- return 0;
-}
-
-static int
-bibtex_split( slist *tokens, str *s )
-{
- int i, n = s->len, nbrackets = 0, status = BIBL_OK;
- str tok;
-
- str_init( &tok );
-
- for ( i=0; i<n; ++i ) {
- if ( s->data[i]=='{' && ( i==0 || s->data[i-1]!='\\' ) ) {
- nbrackets++;
- str_addchar( &tok, '{' );
- } else if ( s->data[i]=='}' && ( i==0 || s->data[i-1]!='\\' ) ) {
- nbrackets--;
- str_addchar( &tok, '}' );
- } else if ( !is_ws( s->data[i] ) || nbrackets ) {
- str_addchar( &tok, s->data[i] );
- } else if ( is_ws( s->data[i] ) ) {
- if ( str_has_value( &tok ) ) {
- status = slist_add_ret( tokens, &tok, BIBL_OK, BIBL_ERR_MEMERR );
- if ( status!=BIBL_OK ) goto out;
- }
- str_empty( &tok );
- }
- }
- if ( str_has_value( &tok ) ) {
- status = slist_add_ret( tokens, &tok, BIBL_OK, BIBL_ERR_MEMERR );
- if ( status!=BIBL_OK ) goto out;
- }
-
- for ( i=0; i<tokens->n; ++i ) {
- str_trimstartingws( slist_str( tokens, i ) );
- str_trimendingws( slist_str( tokens, i ) );
- }
-out:
- str_free( &tok );
- return status;
-}
-
-static int
-bibtex_addtitleurl( fields *info, str *in )
-{
- int fstatus, status = BIBL_OK;
- const char *p;
- str s;
-
- str_init( &s );
-
- /* ...skip past "\href{" and copy to "}" */
- p = str_cpytodelim( &s, in->data + 6, "}", 1 );
- if ( str_memerr( &s ) ) { status = BIBL_ERR_MEMERR; goto out; }
-
- /* ...add to URL */
- fstatus = fields_add( info, "URL", s.data, 0 );
- if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; }
-
- /* ...return deleted fragment to str in */
- (void) str_cpytodelim( &s, p, "", 0 );
- if ( str_memerr( &s ) ) { status = BIBL_ERR_MEMERR; goto out; }
- str_swapstrings( &s, in );
-
-out:
- str_free( &s );
- return status;
-}
-
-static int
-is_url_tag( str *tag )
-{
- if ( str_has_value( tag ) ) {
- if ( !strcasecmp( str_cstr( tag ), "url" ) ) return 1;
- }
- return 0;
-}
-
-static int
-is_name_tag( str *tag )
-{
- if ( str_has_value( tag ) ) {
- if ( !strcasecmp( str_cstr( tag ), "author" ) ) return 1;
- if ( !strcasecmp( str_cstr( tag ), "editor" ) ) return 1;
- }
- return 0;
-}
-
-static void
-bibtex_process_tilde( str *s )
-{
- const char *p;
- char *q;
- int n = 0;
-
- p = s->data;
- q = s->data;
- if ( !p ) return;
- while ( *p ) {
- if ( *p=='~' ) {
- *q = ' ';
- } else if ( *p=='\\' && *(p+1)=='~' ) {
- n++;
- p++;
- *q = '~';
- } else {
- *q = *p;
- }
- p++;
- q++;
- }
- *q = '\0';
- s->len -= n;
-}
-
-static void
-bibtex_process_bracket( str *s )
-{
- char *p, *q;
- int n = 0;
-
- p = q = s->data;
- if ( !p ) return;
- while ( *p ) {
- if ( *p=='\\' && ( *(p+1)=='{' || *(p+1)=='}' ) ) {
- n++;
- p++;
- *q = *p;
- q++;
- } else if ( *p=='{' || *p=='}' ) {
- n++;
- } else {
- *q = *p;
- q++;
- }
- p++;
- }
- *q = '\0';
- s->len -= n;
-}
-
-static void
-bibtex_cleantoken( str *s )
-{
- /* 'textcomp' annotations */
- str_findreplace( s, "\\textit", "" );
- str_findreplace( s, "\\textbf", "" );
- str_findreplace( s, "\\textsl", "" );
- str_findreplace( s, "\\textsc", "" );
- str_findreplace( s, "\\textsf", "" );
- str_findreplace( s, "\\texttt", "" );
- str_findreplace( s, "\\textsubscript", "" );
- str_findreplace( s, "\\textsuperscript", "" );
- str_findreplace( s, "\\emph", "" );
- str_findreplace( s, "\\url", "" );
- str_findreplace( s, "\\mbox", "" );
-
- /* Other text annotations */
- str_findreplace( s, "\\it ", "" );
- str_findreplace( s, "\\em ", "" );
-
- str_findreplace( s, "\\%", "%" );
- str_findreplace( s, "\\$", "$" );
- while ( str_findreplace( s, " ", " " ) ) {}
-
- /* 'textcomp' annotations that we don't want to substitute on output*/
- str_findreplace( s, "\\textdollar", "$" );
- str_findreplace( s, "\\textunderscore", "_" );
-
- bibtex_process_bracket( s );
- bibtex_process_tilde( s );
-
-}
-
-static int
-bibtex_cleandata( str *tag, str *s, fields *info, param *p )
-{
- int i, status;
- slist tokens;
- str *tok;
- if ( str_is_empty( s ) ) return BIBL_OK;
- /* protect url from undergoing any parsing */
- if ( is_url_tag( tag ) ) return BIBL_OK;
- slist_init( &tokens );
- status = bibtex_split( &tokens, s );
- if ( status!=BIBL_OK ) goto out;
- for ( i=0; i<tokens.n; ++i ) {
- tok = slist_str( &tokens, i );
- if ( bibtex_protected( tok ) ) {
- if (!strncasecmp(tok->data,"\\href{", 6)) {
- bibtex_addtitleurl( info, tok );
- }
- }
- if ( p->latexin && !is_name_tag( tag ) && !is_url_tag( tag ) )
- bibtex_cleantoken( tok );
- }
- str_empty( s );
- for ( i=0; i<tokens.n; ++i ) {
- tok = slist_str( &tokens, i );
- if ( i>0 ) str_addchar( s, ' ' );
- str_strcat( s, tok );
- }
-out:
- slist_free( &tokens );
- return status;
-}
-
-static int
-bibtexin_cleanref( fields *bibin, param *p )
-{
- int i, n, status;
- str *t, *d;
- n = fields_num( bibin );
- for ( i=0; i<n; ++i ) {
- t = fields_tag( bibin, i, FIELDS_STRP_NOUSE );
- d = fields_value( bibin, i, FIELDS_STRP_NOUSE );
- status = bibtex_cleandata( t, d, bibin, p );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-static long
-bibtexin_findref( bibl *bin, char *citekey )
-{
- int n;
- long i;
- for ( i=0; i<bin->nrefs; ++i ) {
- n = fields_find( bin->ref[i], "refnum", LEVEL_ANY );
- if ( n==FIELDS_NOTFOUND ) continue;
- if ( !strcmp( bin->ref[i]->data[n].data, citekey ) ) return i;
- }
- return -1;
-}
-
-static void
-bibtexin_nocrossref( bibl *bin, long i, int n, param *p )
-{
- int n1 = fields_find( bin->ref[i], "REFNUM", LEVEL_ANY );
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Cannot find cross-reference '%s'",
- bin->ref[i]->data[n].data );
- if ( n1!=FIELDS_NOTFOUND ) fprintf( stderr, " for reference '%s'\n",
- bin->ref[i]->data[n1].data );
- fprintf( stderr, "\n" );
-}
-
-static int
-bibtexin_crossref_oneref( fields *bibref, fields *bibcross )
-{
- int j, n, nl, ntype, fstatus, status = BIBL_OK;
- char *type, *nt, *nv;
-
- ntype = fields_find( bibref, "INTERNAL_TYPE", LEVEL_ANY );
- type = ( char * ) fields_value( bibref, ntype, FIELDS_CHRP_NOUSE );
-
- n = fields_num( bibcross );
- for ( j=0; j<n; ++j ) {
- nt = ( char * ) fields_tag( bibcross, j, FIELDS_CHRP_NOUSE );
- if ( !strcasecmp( nt, "INTERNAL_TYPE" ) ) continue;
- if ( !strcasecmp( nt, "REFNUM" ) ) continue;
- if ( !strcasecmp( nt, "TITLE" ) ) {
- if ( !strcasecmp( type, "Inproceedings" ) ||
- !strcasecmp( type, "Incollection" ) )
- nt = "booktitle";
- }
- nv = ( char * ) fields_value( bibcross, j, FIELDS_CHRP_NOUSE );
- nl = fields_level( bibcross, j ) + 1;
- fstatus = fields_add( bibref, nt, nv, nl );
- if ( fstatus!=FIELDS_OK ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- }
-out:
- return status;
-}
-
-static int
-bibtexin_crossref( bibl *bin, param *p )
-{
- int i, n, ncross, status = BIBL_OK;
- fields *bibref, *bibcross;
-
- for ( i=0; i<bin->nrefs; ++i ) {
- bibref = bin->ref[i];
- n = fields_find( bibref, "CROSSREF", LEVEL_ANY );
- if ( n==FIELDS_NOTFOUND ) continue;
- fields_setused( bibref, n );
- ncross = bibtexin_findref( bin, (char*) fields_value( bibref, n, FIELDS_CHRP ) );
- if ( ncross==-1 ) {
- bibtexin_nocrossref( bin, i, n, p );
- continue;
- }
- bibcross = bin->ref[ncross];
- status = bibtexin_crossref_oneref( bibref, bibcross );
- if ( status!=BIBL_OK ) goto out;
- }
-out:
- return status;
-}
-
-static int
-bibtexin_cleanf( bibl *bin, param *p )
-{
- int status = BIBL_OK;
- long i;
-
- for ( i=0; i<bin->nrefs; ++i )
- status = bibtexin_cleanref( bin->ref[i], p );
- bibtexin_crossref( bin, p );
- return status;
-}
-
-/*****************************************************
- PUBLIC: int bibtexin_typef()
-*****************************************************/
-
-static int
-bibtexin_typef( fields *bibin, const char *filename, int nrefs, param *p )
-{
- int ntypename, nrefname, is_default;
- char *refname = "", *typename = "";
-
- ntypename = fields_find( bibin, "INTERNAL_TYPE", LEVEL_MAIN );
- nrefname = fields_find( bibin, "REFNUM", LEVEL_MAIN );
- if ( nrefname!=FIELDS_NOTFOUND ) refname = fields_value( bibin, nrefname, FIELDS_CHRP_NOUSE );
- if ( ntypename!=FIELDS_NOTFOUND ) typename = fields_value( bibin, ntypename, FIELDS_CHRP_NOUSE );
-
- return get_reftype( typename, nrefs, p->progname, p->all, p->nall, refname, &is_default, REFTYPE_CHATTY );
-}
-
-/*****************************************************
- PUBLIC: int bibtexin_convertf(), returns BIBL_OK or BIBL_ERR_MEMERR
-*****************************************************/
-
-static int
-bibtex_matches_list( fields *bibout, char *tag, char *suffix, str *data, int level,
- slist *names, int *match )
-{
- int i, fstatus, status = BIBL_OK;
- str newtag;
-
- *match = 0;
- if ( names->n==0 ) return status;
-
- str_init( &newtag );
-
- for ( i=0; i<names->n; ++i ) {
- if ( strcmp( str_cstr( data ), slist_cstr( names, i ) ) ) continue;
- str_initstrc( &newtag, tag );
- str_strcatc( &newtag, suffix );
- fstatus = fields_add( bibout, str_cstr( &newtag ), str_cstr( data ), level );
- if ( fstatus!=FIELDS_OK ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- *match = 1;
- goto out;
- }
-
-out:
- str_free( &newtag );
- return status;
-}
-
-/**** bibtexin_btorg ****/
-
-/*
- * BibTeX uses 'organization' in lieu of publisher if that field is missing.
- * Otherwise output as
- * <name type="corporate">
- * <namePart>The organization</namePart>
- * <role>
- * <roleTerm authority="marcrelator" type="text">organizer of meeting</roleTerm>
- * </role>
- * </name>
- */
-
-static int
-bibtexin_btorg( fields *bibin, int m, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int n, fstatus;
- n = fields_find( bibin, "publisher", LEVEL_ANY );
- if ( n==FIELDS_NOTFOUND )
- fstatus = fields_add( bibout, "PUBLISHER", str_cstr( invalue ), level );
- else
- fstatus = fields_add( bibout, "ORGANIZER:CORP", str_cstr( invalue ), level );
- if ( fstatus==FIELDS_OK ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
-}
-
-/**** bibtexin_btsente() ****/
-
-/*
- * sentelink = {file://localhost/full/path/to/file.pdf,Sente,PDF}
- *
- * Sente is an academic reference manager for MacOSX and Apple iPad.
- */
-
-static int
-bibtexin_btsente( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int fstatus, status = BIBL_OK;
- str link;
-
- str_init( &link );
- str_cpytodelim( &link, skip_ws( invalue->data ), ",", 0 );
- str_trimendingws( &link );
- if ( str_memerr( &link ) ) status = BIBL_ERR_MEMERR;
-
- if ( status==BIBL_OK && link.len ) {
- fstatus = fields_add( bibout, "FILEATTACH", str_cstr( &link ), level );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
- }
-
- str_free( &link );
- return status;
-}
-
-/**** bibtexin_linkedfile() ****/
-
-static int
-count_colons( char *p )
-{
- int n = 0;
- while ( *p ) {
- if ( *p==':' ) n++;
- p++;
- }
- return n;
-}
-
-static int
-first_colon( char *p )
-{
- int n = 0;
- while ( p[n] && p[n]!=':' ) n++;
- return n;
-}
-
-static int
-last_colon( char *p )
-{
- int n = strlen( p ) - 1;
- while ( n>0 && p[n]!=':' ) n--;
- return n;
-}
-
-/*
- * file={Description:/full/path/to/file.pdf:PDF}
- */
-static int
-bibtexin_linkedfile( fields *bibin, int m, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int fstatus, status = BIBL_OK;
- char *p = invalue->data;
- int i, n, n1, n2;
- str link;
-
- n = count_colons( p );
- if ( n > 1 ) {
- /* A DOS file can contain a colon ":C:/....pdf:PDF" */
- /* Extract after 1st and up to last colons */
- n1 = first_colon( p ) + 1;
- n2 = last_colon( p );
- str_init( &link );
- for ( i=n1; i<n2; ++i ) {
- str_addchar( &link, p[i] );
- }
- str_trimstartingws( &link );
- str_trimendingws( &link );
- if ( str_memerr( &link ) ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- if ( link.len ) {
- fstatus = fields_add( bibout, "FILEATTACH", link.data, level );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
- }
-out:
- str_free( &link );
- } else {
- /* This field isn't formatted properly, so just copy directly */
- fstatus = fields_add( bibout, "FILEATTACH", p, level );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
- }
- return status;
-
-}
-
-/**** bibtexin_howpublished() ****/
-
-/* howpublished={},
- *
- * Normally indicates the manner in which something was
- * published in lieu of a formal publisher, so typically
- * 'howpublished' and 'publisher' will never be in the
- * same reference.
- *
- * Occassionally, people put Diploma thesis information
- * into the field, so check that first.
- *
- * Returns BIBL_OK or BIBL_ERR_MEMERR
- */
-
-static int
-bibtexin_howpublished( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int fstatus, status = BIBL_OK;
- if ( !strncasecmp( str_cstr( invalue ), "Diplom", 6 ) ) {
- fstatus = fields_replace_or_add( bibout, "GENRE:BIBUTILS", "Diploma thesis", level );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
- }
- else if ( !strncasecmp( str_cstr( invalue ), "HSabilitation", 13 ) ) {
- fstatus = fields_replace_or_add( bibout, "GENRE:BIBUTILS", "Habilitation thesis", level );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
- }
- else if ( !strncasecmp( str_cstr( invalue ), "Licentiate", 10 ) ) {
- fstatus = fields_replace_or_add( bibout, "GENRE:BIBUTILS", "Licentiate thesis", level );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
- }
- else if ( is_embedded_link( str_cstr( invalue ) ) ) {
- status = urls_split_and_add( str_cstr( invalue ), bibout, level );
- }
- else {
- fstatus = fields_add( bibout, "PUBLISHER", str_cstr( invalue ), level );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
- }
- return status;
-}
-
-/**** bibtexin_eprint() ****/
-
-/* Try to capture situations like
- *
- * eprint="1605.02026",
- * archivePrefix="arXiv",
- *
- * or
- *
- * eprint="13211131",
- * eprinttype="medline",
- *
- * If we don't know anything, concatenate archivePrefix:eprint
- * and push into URL. (Could be wrong)
- *
- * If no info, just push eprint into URL. (Could be wrong)
- */
-static int
-process_eprint_with_prefix( fields *bibout, char *prefix, str *value, int level )
-{
- int fstatus, status = BIBL_OK;
- str merge;
-
- if ( !strcmp( prefix, "arXiv" ) ) {
- fstatus = fields_add( bibout, "ARXIV", value->data, level );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
- }
-
- else if ( !strcmp( prefix, "jstor" ) ) {
- fstatus = fields_add( bibout, "JSTOR", value->data, level );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
- }
-
- else if ( !strcmp( prefix, "medline" ) ) {
- fstatus = fields_add( bibout, "MEDLINE", value->data, level );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
- }
-
- else if ( !strcmp( prefix, "pubmed" ) ) {
- fstatus = fields_add( bibout, "PMID", value->data, level );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
- }
-
- /* ...if this is unknown prefix, merge prefix & eprint */
- else {
- str_init( &merge );
- str_mergestrs( &merge, prefix, ":", value->data, NULL );
- fstatus = fields_add( bibout, "URL", merge.data, level );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
- str_free( &merge );
- }
-
- return status;
-}
-static int
-process_eprint_without_prefix( fields *bibout, str *value, int level )
-{
- int fstatus;
-
- /* ...no archivePrefix, need to handle just 'eprint' tag */
- fstatus = fields_add( bibout, "URL", value->data, level );
-
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- else return BIBL_OK;
-}
-
-static int
-bibtexin_eprint( fields *bibin, int m, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- char *prefix;
- int n;
-
- /* ...do we have an archivePrefix too? */
- n = fields_find( bibin, "ARCHIVEPREFIX", level );
- if ( n==FIELDS_NOTFOUND ) n = fields_find( bibin, "EPRINTTYPE", level );
- if ( n!=FIELDS_NOTFOUND ) {
- prefix = fields_value( bibin, n, FIELDS_CHRP );
- return process_eprint_with_prefix( bibout, prefix, invalue, level );
- }
-
- /* ...no we don't */
- return process_eprint_without_prefix( bibout, invalue, level );
-}
-
-/**** bibtexin_keyword() ****/
-
-/* Split keywords="" with semicolons.
- * Commas are also frequently used, but will break
- * entries like:
- * keywords="Microscopy, Confocal"
- * Returns BIBL_OK or BIBL_ERR_MEMERR
- */
-
-static int
-bibtexin_keyword( fields *bibin, int m, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int fstatus, status = BIBL_OK;
- const char *p;
- str keyword;
-
- p = invalue->data;
- str_init( &keyword );
-
- while ( *p ) {
- p = str_cpytodelim( &keyword, skip_ws( p ), ";", 1 );
- str_trimendingws( &keyword );
- if ( str_memerr( &keyword ) ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- if ( keyword.len ) {
- fstatus = fields_add( bibout, "KEYWORD", keyword.data, level );
- if ( fstatus!=FIELDS_OK ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- }
- }
-out:
- str_free( &keyword );
- return status;
-}
-
-/*
- * bibtex_names( bibout, newtag, field, level);
- *
- * split names in author list separated by and's (use '|' character)
- * and add names
- *
- * returns BIBL_OK on success, BIBL_ERR_MEMERR on memory error
- */
-
-static int
-bibtexin_person( fields *bibin, int m, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int begin, end, ok, n, etal, i, status, match;
- slist tokens;
-
- /* If we match the asis or corps list add and bail. */
- status = bibtex_matches_list( bibout, outtag, ":ASIS", invalue, level, &(pm->asis), &match );
- if ( match==1 || status!=BIBL_OK ) return status;
- status = bibtex_matches_list( bibout, outtag, ":CORP", invalue, level, &(pm->corps), &match );
- if ( match==1 || status!=BIBL_OK ) return status;
-
- slist_init( &tokens );
-
- bibtex_split( &tokens, invalue );
- for ( i=0; i<tokens.n; ++i )
- bibtex_cleantoken( slist_str( &tokens, i ) );
-
- etal = name_findetal( &tokens );
-
- begin = 0;
- n = tokens.n - etal;
- while ( begin < n ) {
-
- end = begin + 1;
-
- while ( end < n && strcasecmp( slist_cstr( &tokens, end ), "and" ) )
- end++;
-
- if ( end - begin == 1 ) {
- ok = name_addsingleelement( bibout, outtag, slist_cstr( &tokens, begin ), level, 0 );
- if ( !ok ) { status = BIBL_ERR_MEMERR; goto out; }
- } else {
- ok = name_addmultielement( bibout, outtag, &tokens, begin, end, level );
- if ( !ok ) { status = BIBL_ERR_MEMERR; goto out; }
- }
-
- begin = end + 1;
-
- /* Handle repeated 'and' errors: authors="G. F. Author and and B. K. Author" */
- while ( begin < n && !strcasecmp( slist_cstr( &tokens, begin ), "and" ) )
- begin++;
- }
-
- if ( etal ) {
- ok = name_addsingleelement( bibout, outtag, "et al.", level, 0 );
- if ( !ok ) status = BIBL_ERR_MEMERR;
- }
-
-out:
- slist_free( &tokens );
- return status;
-
-}
-
-/**** bibtexin_title() ****/
-
-/* bibtexin_titleinbook_isbooktitle()
- *
- * Normally, the title field of inbook refers to the book. The
- * section in a @inbook reference is untitled. If it's titled,
- * the @incollection should be used. For example, in:
- *
- * @inbook{
- * title="xxx"
- * }
- *
- * the booktitle is "xxx".
- *
- * However, @inbook is frequently abused (and treated like
- * @incollection) so that title and booktitle are present
- * and title is now 'supposed' to refer to the section. For example:
- *
- * @inbook{
- * title="yyy",
- * booktitle="xxx"
- * }
- *
- * Therefore report whether or not booktitle is present as well
- * as title in @inbook references. If not, then make 'title'
- * correspond to the title of the book, not the section.
- *
- */
-static int
-bibtexin_titleinbook_isbooktitle( fields *bibin, char *intag )
-{
- int n;
-
- /* ...look only at 'title="xxx"' elements */
- if ( strcasecmp( intag, "TITLE" ) ) return 0;
-
- /* ...look only at '@inbook' references */
- n = fields_find( bibin, "INTERNAL_TYPE", LEVEL_ANY );
- if ( n==FIELDS_NOTFOUND ) return 0;
- if ( strcasecmp( fields_value( bibin, n, FIELDS_CHRP ), "INBOOK" ) ) return 0;
-
- /* ...look to see if 'booktitle="yyy"' exists */
- n = fields_find( bibin, "BOOKTITLE", LEVEL_ANY );
- if ( n==FIELDS_NOTFOUND ) return 0;
- else return 1;
-}
-
-static int
-bibtexin_title( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int ok;
-
- if ( bibtexin_titleinbook_isbooktitle( bibin, intag->data ) ) level=LEVEL_MAIN;
- ok = title_process( bibout, "TITLE", invalue->data, level, pm->nosplittitle );
- if ( ok ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
-}
-
-static void
-bibtexin_notag( param *p, char *tag )
-{
- if ( p->verbose && strcmp( tag, "INTERNAL_TYPE" ) ) {
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Cannot find tag '%s'\n", tag );
- }
-}
-
-static int
-bibtexin_convertf( fields *bibin, fields *bibout, int reftype, param *p )
-{
- static int (*convertfns[NUM_REFTYPES])(fields *, int, str *, str *, int, param *, char *, fields *) = {
- // Patch: Fix compilation on MSVC target
- [ 0 ] = generic_null,
- [ 1 ] = generic_null,
- [ 2 ] = generic_null,
- [ 3 ] = generic_null,
- [ 4 ] = generic_null,
- [ 5 ] = generic_null,
- [ 6 ] = generic_null,
- [ 7 ] = generic_null,
- [ 8 ] = generic_null,
- [ 9 ] = generic_null,
- [ 10 ] = generic_null,
- [ 11 ] = generic_null,
- [ 12 ] = generic_null,
- [ 13 ] = generic_null,
- [ 14 ] = generic_null,
- [ 15 ] = generic_null,
- [ 16 ] = generic_null,
- [ 17 ] = generic_null,
- [ 18 ] = generic_null,
- [ 19 ] = generic_null,
- [ 20 ] = generic_null,
- [ 21 ] = generic_null,
- [ 22 ] = generic_null,
- [ 23 ] = generic_null,
- [ 24 ] = generic_null,
- [ 25 ] = generic_null,
- [ SIMPLE ] = generic_simple,
- [ TITLE ] = bibtexin_title,
- [ PERSON ] = bibtexin_person,
- [ PAGES ] = generic_pages,
- [ KEYWORD ] = bibtexin_keyword,
- [ EPRINT ] = bibtexin_eprint,
- [ HOWPUBLISHED ] = bibtexin_howpublished,
- [ LINKEDFILE ] = bibtexin_linkedfile,
- [ NOTES ] = generic_notes,
- [ GENRE ] = generic_genre,
- [ BT_SENTE ] = bibtexin_btsente,
- [ BT_ORG ] = bibtexin_btorg,
- [ URL ] = generic_url
- };
-
- int process, level, i, nfields, status = BIBL_OK;
- str *intag, *invalue;
- char *outtag;
-
- nfields = fields_num( bibin );
- for ( i=0; i<nfields; ++i ) {
-
- if ( fields_used( bibin, i ) ) continue; /* e.g. successful crossref */
- if ( fields_notag( bibin, i ) ) continue;
- if ( fields_nodata( bibin, i ) ) continue;
-
- intag = fields_tag( bibin, i, FIELDS_STRP );
- invalue = fields_value( bibin, i, FIELDS_STRP );
-
- if ( !translate_oldtag( str_cstr( intag ), reftype, p->all, p->nall, &process, &level, &outtag ) ) {
- bibtexin_notag( p, str_cstr( intag ) );
- continue;
- }
-
- status = convertfns[ process ] ( bibin, i, intag, invalue, level, p, outtag, bibout );
- if ( status!=BIBL_OK ) return status;
- }
-
- if ( status==BIBL_OK && p->verbose ) fields_report( bibout, stderr );
-
- return status;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/bibtexout.c b/support/texlab/crates/bibutils_sys/src/bibtexout.c
deleted file mode 100644
index 1618fa9a94..0000000000
--- a/support/texlab/crates/bibutils_sys/src/bibtexout.c
+++ /dev/null
@@ -1,855 +0,0 @@
-/*
- * bibtexout.c
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Program and source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include "str.h"
-#include "strsearch.h"
-#include "utf8.h"
-#include "xml.h"
-#include "fields.h"
-#include "generic.h"
-#include "name.h"
-#include "title.h"
-#include "type.h"
-#include "url.h"
-#include "bibformats.h"
-#include "msvc_fix.h"
-
-/*****************************************************
- PUBLIC: int bibtexout_initparams()
-*****************************************************/
-
-static int bibtexout_write( fields *in, FILE *fp, param *p, unsigned long refnum );
-static int bibtexout_assemble( fields *in, fields *out, param *pm, unsigned long refnum );
-
-int
-bibtexout_initparams( param *pm, const char *progname )
-{
- pm->writeformat = BIBL_BIBTEXOUT;
- pm->format_opts = 0;
- pm->charsetout = BIBL_CHARSET_DEFAULT;
- pm->charsetout_src = BIBL_SRC_DEFAULT;
- pm->latexout = 1;
- pm->utf8out = BIBL_CHARSET_UTF8_DEFAULT;
- pm->utf8bom = BIBL_CHARSET_BOM_DEFAULT;
- pm->xmlout = BIBL_XMLOUT_FALSE;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->singlerefperfile = 0;
-
- pm->headerf = generic_writeheader;
- pm->footerf = NULL;
- pm->assemblef = bibtexout_assemble;
- pm->writef = bibtexout_write;
-
- if ( !pm->progname ) {
- if ( !progname ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int bibtexout_assemble()
-*****************************************************/
-
-enum {
- TYPE_UNKNOWN = 0,
- TYPE_ARTICLE,
- TYPE_INBOOK,
- TYPE_INPROCEEDINGS,
- TYPE_PROCEEDINGS,
- TYPE_INCOLLECTION,
- TYPE_COLLECTION,
- TYPE_BOOK,
- TYPE_PHDTHESIS,
- TYPE_MASTERSTHESIS,
- TYPE_DIPLOMATHESIS,
- TYPE_REPORT,
- TYPE_MANUAL,
- TYPE_UNPUBLISHED,
- TYPE_ELECTRONIC,
- TYPE_MISC,
- NUM_TYPES
-};
-
-static int
-bibtexout_type( fields *in, const char *progname, const char *filename, unsigned long refnum )
-{
- match_type genre_matches[] = {
- { "periodical", TYPE_ARTICLE, LEVEL_ANY },
- { "academic journal", TYPE_ARTICLE, LEVEL_ANY },
- { "magazine", TYPE_ARTICLE, LEVEL_ANY },
- { "newspaper", TYPE_ARTICLE, LEVEL_ANY },
- { "article", TYPE_ARTICLE, LEVEL_ANY },
- { "instruction", TYPE_MANUAL, LEVEL_ANY },
- { "book", TYPE_BOOK, LEVEL_MAIN },
- { "book", TYPE_INBOOK, LEVEL_ANY },
- { "book chapter", TYPE_INBOOK, LEVEL_ANY },
- { "unpublished", TYPE_UNPUBLISHED, LEVEL_ANY },
- { "manuscript", TYPE_UNPUBLISHED, LEVEL_ANY },
- { "conference publication", TYPE_PROCEEDINGS, LEVEL_MAIN },
- { "conference publication", TYPE_INPROCEEDINGS, LEVEL_ANY },
- { "collection", TYPE_COLLECTION, LEVEL_MAIN },
- { "collection", TYPE_INCOLLECTION, LEVEL_ANY },
- { "report", TYPE_REPORT, LEVEL_ANY },
- { "technical report", TYPE_REPORT, LEVEL_ANY },
- { "Masters thesis", TYPE_MASTERSTHESIS, LEVEL_ANY },
- { "Diploma thesis", TYPE_DIPLOMATHESIS, LEVEL_ANY },
- { "Ph.D. thesis", TYPE_PHDTHESIS, LEVEL_ANY },
- { "Licentiate thesis", TYPE_PHDTHESIS, LEVEL_ANY },
- { "thesis", TYPE_PHDTHESIS, LEVEL_ANY },
- { "electronic", TYPE_ELECTRONIC, LEVEL_ANY },
- { "miscellaneous", TYPE_MISC, LEVEL_ANY },
- };
- int ngenre_matches = sizeof( genre_matches ) / sizeof( genre_matches[0] );
-
- match_type resource_matches[] = {
- { "moving image", TYPE_ELECTRONIC, LEVEL_ANY },
- { "software, multimedia", TYPE_ELECTRONIC, LEVEL_ANY },
- };
- int nresource_matches = sizeof( resource_matches ) /sizeof( resource_matches[0] );
-
- match_type issuance_matches[] = {
- { "monographic", TYPE_BOOK, LEVEL_MAIN },
- { "monographic", TYPE_INBOOK, LEVEL_ANY },
- };
- int nissuance_matches = sizeof( issuance_matches ) / sizeof( issuance_matches[0] );
-
- int type, maxlevel, n;
-
- type = type_from_mods_hints( in, TYPE_FROM_GENRE, genre_matches, ngenre_matches, TYPE_UNKNOWN );
- if ( type==TYPE_UNKNOWN ) type = type_from_mods_hints( in, TYPE_FROM_RESOURCE, resource_matches, nresource_matches, TYPE_UNKNOWN );
- if ( type==TYPE_UNKNOWN ) type = type_from_mods_hints( in, TYPE_FROM_ISSUANCE, issuance_matches, nissuance_matches, TYPE_UNKNOWN );
-
- /* default to TYPE_MISC */
- if ( type==TYPE_UNKNOWN ) {
- maxlevel = fields_maxlevel( in );
- if ( maxlevel > 0 ) type = TYPE_MISC;
- else {
- if ( progname ) fprintf( stderr, "%s: ", progname );
- fprintf( stderr, "Cannot identify TYPE in reference %lu ", refnum+1 );
- n = fields_find( in, "REFNUM", LEVEL_ANY );
- if ( n!=FIELDS_NOTFOUND )
- fprintf( stderr, " %s", (char*) fields_value( in, n, FIELDS_CHRP ) );
- fprintf( stderr, " (defaulting to @Misc)\n" );
- type = TYPE_MISC;
- }
- }
- return type;
-}
-
-static void
-append_type( int type, fields *out, int *status )
-{
- char *typenames[ NUM_TYPES ] = {
- [ TYPE_ARTICLE ] = "Article",
- [ TYPE_INBOOK ] = "Inbook",
- [ TYPE_PROCEEDINGS ] = "Proceedings",
- [ TYPE_INPROCEEDINGS ] = "InProceedings",
- [ TYPE_BOOK ] = "Book",
- [ TYPE_PHDTHESIS ] = "PhdThesis",
- [ TYPE_MASTERSTHESIS ] = "MastersThesis",
- [ TYPE_DIPLOMATHESIS ] = "MastersThesis",
- [ TYPE_REPORT ] = "TechReport",
- [ TYPE_MANUAL ] = "Manual",
- [ TYPE_COLLECTION ] = "Collection",
- [ TYPE_INCOLLECTION ] = "InCollection",
- [ TYPE_UNPUBLISHED ] = "Unpublished",
- [ TYPE_ELECTRONIC ] = "Electronic",
- [ TYPE_MISC ] = "Misc",
- };
- int fstatus;
- char *s;
-
- if ( type < 0 || type >= NUM_TYPES ) type = TYPE_MISC;
- s = typenames[ type ];
-
- fstatus = fields_add( out, "TYPE", s, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
-}
-
-static void
-append_citekey( fields *in, fields *out, int format_opts, int *status )
-{
- int n, fstatus;
- str s;
- char *p;
-
- n = fields_find( in, "REFNUM", LEVEL_ANY );
- if ( ( format_opts & BIBL_FORMAT_BIBOUT_DROPKEY ) || n==FIELDS_NOTFOUND ) {
- fstatus = fields_add( out, "REFNUM", "", LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-
- else {
- str_init( &s );
- p = fields_value( in, n, FIELDS_CHRP );
- while ( p && *p && *p!='|' ) {
- if ( format_opts & BIBL_FORMAT_BIBOUT_STRICTKEY ) {
- if ( isdigit((unsigned char)*p) || (*p>='A' && *p<='Z') ||
- (*p>='a' && *p<='z' ) ) {
- str_addchar( &s, *p );
- }
- }
- else {
- if ( *p!=' ' && *p!='\t' ) {
- str_addchar( &s, *p );
- }
- }
- p++;
- }
- if ( str_memerr( &s ) ) { *status = BIBL_ERR_MEMERR; str_free( &s ); return; }
- fstatus = fields_add( out, "REFNUM", str_cstr( &s ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- str_free( &s );
- }
-}
-
-static void
-append_simple( fields *in, char *intag, char *outtag, fields *out, int *status )
-{
- int n, fstatus;
-
- n = fields_find( in, intag, LEVEL_ANY );
- if ( n!=FIELDS_NOTFOUND ) {
- fields_setused( in, n );
- fstatus = fields_add( out, outtag, fields_value( in, n, FIELDS_CHRP ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-}
-
-static void
-append_simpleall( fields *in, char *intag, char *outtag, fields *out, int *status )
-{
- int i, fstatus;
-
- for ( i=0; i<in->n; ++i ) {
- if ( fields_match_tag( in, i, intag ) ) {
- fields_setused( in, i );
- fstatus = fields_add( out, outtag, fields_value( in, i, FIELDS_CHRP ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- *status = BIBL_ERR_MEMERR;
- return;
- }
- }
- }
-}
-
-static void
-append_keywords( fields *in, fields *out, int *status )
-{
- str keywords, *word;
- vplist_index i;
- int fstatus;
- vplist a;
-
- str_init( &keywords );
- vplist_init( &a );
-
- fields_findv_each( in, LEVEL_ANY, FIELDS_STRP, &a, "KEYWORD" );
-
- if ( a.n ) {
-
- for ( i=0; i<a.n; ++i ) {
- word = vplist_get( &a, i );
- if ( i>0 ) str_strcatc( &keywords, "; " );
- str_strcat( &keywords, word );
- }
-
- if ( str_memerr( &keywords ) ) { *status = BIBL_ERR_MEMERR; goto out; }
-
- fstatus = fields_add( out, "keywords", str_cstr( &keywords ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- *status = BIBL_ERR_MEMERR;
- goto out;
- }
-
-
- }
-
-out:
- str_free( &keywords );
- vplist_free( &a );
-}
-
-static void
-append_fileattach( fields *in, fields *out, int *status )
-{
- char *tag, *value;
- int i, fstatus;
- str data;
-
- str_init( &data );
-
- for ( i=0; i<in->n; ++i ) {
-
- tag = fields_tag( in, i, FIELDS_CHRP );
- if ( strcasecmp( tag, "FILEATTACH" ) ) continue;
-
- value = fields_value( in, i, FIELDS_CHRP );
- str_strcpyc( &data, ":" );
- str_strcatc( &data, value );
- if ( strsearch( value, ".pdf" ) )
- str_strcatc( &data, ":PDF" );
- else if ( strsearch( value, ".html" ) )
- str_strcatc( &data, ":HTML" );
- else str_strcatc( &data, ":TYPE" );
-
- if ( str_memerr( &data ) ) {
- *status = BIBL_ERR_MEMERR;
- goto out;
- }
-
- fields_setused( in, i );
- fstatus = fields_add( out, "file", str_cstr( &data ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- *status = BIBL_ERR_MEMERR;
- goto out;
- }
-
- str_empty( &data );
- }
-out:
- str_free( &data );
-}
-
-static void
-append_people( fields *in, char *tag, char *ctag, char *atag,
- char *bibtag, int level, fields *out, int format_opts, int *status )
-{
- int i, npeople, person, corp, asis, fstatus;
- str allpeople, oneperson;
-
- strs_init( &allpeople, &oneperson, NULL );
-
- /* primary citation authors */
- npeople = 0;
- for ( i=0; i<in->n; ++i ) {
- if ( level!=LEVEL_ANY && in->level[i]!=level ) continue;
- person = ( strcasecmp( in->tag[i].data, tag ) == 0 );
- corp = ( strcasecmp( in->tag[i].data, ctag ) == 0 );
- asis = ( strcasecmp( in->tag[i].data, atag ) == 0 );
- if ( person || corp || asis ) {
- if ( npeople>0 ) {
- if ( format_opts & BIBL_FORMAT_BIBOUT_WHITESPACE )
- str_strcatc( &allpeople, "\n\t\tand " );
- else str_strcatc( &allpeople, "\nand " );
- }
- if ( corp ) {
- str_addchar( &allpeople, '{' );
- str_strcat( &allpeople, fields_value( in, i, FIELDS_STRP ) );
- str_addchar( &allpeople, '}' );
- } else if ( asis ) {
- str_addchar( &allpeople, '{' );
- str_strcat( &allpeople, fields_value( in, i, FIELDS_STRP ) );
- str_addchar( &allpeople, '}' );
- } else {
- name_build_withcomma( &oneperson, fields_value( in, i, FIELDS_CHRP ) );
- str_strcat( &allpeople, &oneperson );
- }
- npeople++;
- }
- }
- if ( npeople ) {
- fstatus = fields_add( out, bibtag, allpeople.data, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-
- strs_free( &allpeople, &oneperson, NULL );
-}
-
-static int
-append_title_chosen( fields *in, char *bibtag, fields *out, int nmainttl, int nsubttl )
-{
- str fulltitle, *mainttl = NULL, *subttl = NULL;
- int status, ret = BIBL_OK;
-
- str_init( &fulltitle );
-
- if ( nmainttl!=-1 ) {
- mainttl = fields_value( in, nmainttl, FIELDS_STRP );
- fields_setused( in, nmainttl );
- }
-
- if ( nsubttl!=-1 ) {
- subttl = fields_value( in, nsubttl, FIELDS_STRP );
- fields_setused( in, nsubttl );
- }
-
- title_combine( &fulltitle, mainttl, subttl );
-
- if ( str_memerr( &fulltitle ) ) {
- ret = BIBL_ERR_MEMERR;
- goto out;
- }
-
- if ( str_has_value( &fulltitle ) ) {
- status = fields_add( out, bibtag, str_cstr( &fulltitle ), LEVEL_MAIN );
- if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR;
- }
-
-out:
- str_free( &fulltitle );
- return ret;
-}
-
-static int
-append_title( fields *in, char *bibtag, int level, fields *out, int format_opts )
-{
- int title, short_title, subtitle, short_subtitle, use_title, use_subtitle;
-
- title = fields_find( in, "TITLE", level );
- short_title = fields_find( in, "SHORTTITLE", level );
- subtitle = fields_find( in, "SUBTITLE", level );
- short_subtitle = fields_find( in, "SHORTSUBTITLE", level );
-
- if ( title==FIELDS_NOTFOUND || ( ( format_opts & BIBL_FORMAT_BIBOUT_SHORTTITLE ) && level==1 ) ) {
- use_title = short_title;
- use_subtitle = short_subtitle;
- }
-
- else {
- use_title = title;
- use_subtitle = subtitle;
- }
-
- return append_title_chosen( in, bibtag, out, use_title, use_subtitle );
-}
-
-static void
-append_titles( fields *in, int type, fields *out, int format_opts, int *status )
-{
- /* item=main level title */
- *status = append_title( in, "title", 0, out, format_opts );
- if ( *status!=BIBL_OK ) return;
-
- switch( type ) {
-
- case TYPE_ARTICLE:
- *status = append_title( in, "journal", 1, out, format_opts );
- break;
-
- case TYPE_INBOOK:
- *status = append_title( in, "bookTitle", 1, out, format_opts );
- if ( *status!=BIBL_OK ) return;
- *status = append_title( in, "series", 2, out, format_opts );
- break;
-
- case TYPE_INCOLLECTION:
- case TYPE_INPROCEEDINGS:
- *status = append_title( in, "booktitle", 1, out, format_opts );
- if ( *status!=BIBL_OK ) return;
- *status = append_title( in, "series", 2, out, format_opts );
- break;
-
- case TYPE_PHDTHESIS:
- case TYPE_MASTERSTHESIS:
- *status = append_title( in, "series", 1, out, format_opts );
- break;
-
- case TYPE_BOOK:
- case TYPE_REPORT:
- case TYPE_COLLECTION:
- case TYPE_PROCEEDINGS:
- *status = append_title( in, "series", 1, out, format_opts );
- if ( *status!=BIBL_OK ) return;
- *status = append_title( in, "series", 2, out, format_opts );
- break;
-
- default:
- /* do nothing */
- break;
-
- }
-}
-
-static int
-find_date( fields *in, char *date_element )
-{
- char date[100], partdate[100];
- int n;
-
- sprintf( date, "DATE:%s", date_element );
- n = fields_find( in, date, LEVEL_ANY );
-
- if ( n==FIELDS_NOTFOUND ) {
- sprintf( partdate, "PARTDATE:%s", date_element );
- n = fields_find( in, partdate, LEVEL_ANY );
- }
-
- return n;
-}
-
-static void
-append_date( fields *in, fields *out, int *status )
-{
- char *months[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
- int n, month, fstatus;
-
- n = find_date( in, "YEAR" );
- if ( n!=FIELDS_NOTFOUND ) {
- fields_setused( in, n );
- fstatus = fields_add( out, "year", in->data[n].data, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- *status = BIBL_ERR_MEMERR;
- return;
- }
- }
-
- n = find_date( in, "MONTH" );
- if ( n!=-1 ) {
- fields_setused( in, n );
- month = atoi( in->data[n].data );
- if ( month>0 && month<13 )
- fstatus = fields_add( out, "month", months[month-1], LEVEL_MAIN );
- else
- fstatus = fields_add( out, "month", in->data[n].data, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- *status = BIBL_ERR_MEMERR;
- return;
- }
- }
-
- n = find_date( in, "DAY" );
- if ( n!=-1 ) {
- fields_setused( in, n );
- fstatus = fields_add( out, "day", in->data[n].data, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- *status = BIBL_ERR_MEMERR;
- return;
- }
- }
-
-}
-
-static void
-append_arxiv( fields *in, fields *out, int *status )
-{
- int n, fstatus1, fstatus2;
- str url;
-
- n = fields_find( in, "ARXIV", LEVEL_ANY );
- if ( n==FIELDS_NOTFOUND ) return;
-
- fields_setused( in, n );
-
- /* ...write:
- * archivePrefix = "arXiv",
- * eprint = "#####",
- * ...for arXiv references
- */
- fstatus1 = fields_add( out, "archivePrefix", "arXiv", LEVEL_MAIN );
- fstatus2 = fields_add( out, "eprint", fields_value( in, n, FIELDS_CHRP ), LEVEL_MAIN );
- if ( fstatus1!=FIELDS_OK || fstatus2!=FIELDS_OK ) {
- *status = BIBL_ERR_MEMERR;
- return;
- }
-
- /* ...also write:
- * url = "http://arxiv.org/abs/####",
- * ...to maximize compatibility
- */
- str_init( &url );
- arxiv_to_url( in, n, "URL", &url );
- if ( str_has_value( &url ) ) {
- fstatus1 = fields_add( out, "url", str_cstr( &url ), LEVEL_MAIN );
- if ( fstatus1!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- str_free( &url );
-}
-
-static void
-append_urls( fields *in, fields *out, int *status )
-{
- int lstatus;
- slist types;
-
- lstatus = slist_init_valuesc( &types, "URL", "DOI", "PMID", "PMC", "JSTOR", NULL );
- if ( lstatus!=SLIST_OK ) {
- *status = BIBL_ERR_MEMERR;
- return;
- }
-
- *status = urls_merge_and_add( in, LEVEL_ANY, out, "url", LEVEL_MAIN, &types );
-
- slist_free( &types );
-}
-
-static void
-append_isi( fields *in, fields *out, int *status )
-{
- int n, fstatus;
-
- n = fields_find( in, "ISIREFNUM", LEVEL_ANY );
- if ( n==FIELDS_NOTFOUND ) return;
-
- fstatus = fields_add( out, "note", fields_value( in, n, FIELDS_CHRP ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
-}
-
-static void
-append_articlenumber( fields *in, fields *out, int *status )
-{
- int n, fstatus;
-
- n = fields_find( in, "ARTICLENUMBER", LEVEL_ANY );
- if ( n==FIELDS_NOTFOUND ) return;
-
- fields_setused( in, n );
- fstatus = fields_add( out, "pages", fields_value( in, n, FIELDS_CHRP ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
-}
-
-static int
-pages_build_pagestr( str *pages, fields *in, int sn, int en, int format_opts )
-{
- /* ...append if starting page number is defined */
- if ( sn!=-1 ) {
- str_strcat( pages, fields_value( in, sn, FIELDS_STRP ) );
- fields_setused( in, sn );
- }
-
- /* ...append dashes if both starting and ending page numbers are defined */
- if ( sn!=-1 && en!=-1 ) {
- if ( format_opts & BIBL_FORMAT_BIBOUT_SINGLEDASH )
- str_strcatc( pages, "-" );
- else
- str_strcatc( pages, "--" );
- }
-
- /* ...append ending page number is defined */
- if ( en!=-1 ) {
- str_strcat( pages, fields_value( in, en, FIELDS_STRP ) );
- fields_setused( in, en );
- }
-
- if ( str_memerr( pages ) ) return BIBL_ERR_MEMERR;
- else return BIBL_OK;
-}
-
-static int
-pages_are_defined( fields *in, int *sn, int *en )
-{
- *sn = fields_find( in, "PAGES:START", LEVEL_ANY );
- *en = fields_find( in, "PAGES:STOP", LEVEL_ANY );
- if ( *sn==FIELDS_NOTFOUND && *en==FIELDS_NOTFOUND ) return 0;
- else return 1;
-}
-
-static void
-append_pages( fields *in, fields *out, int format_opts, int *status )
-{
- int sn, en, fstatus;
- str pages;
-
- if ( !pages_are_defined( in, &sn, &en ) ) {
- append_articlenumber( in, out, status );
- return;
- }
-
- str_init( &pages );
- *status = pages_build_pagestr( &pages, in, sn, en, format_opts );
- if ( *status==BIBL_OK ) {
- fstatus = fields_add( out, "pages", str_cstr( &pages ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- str_free( &pages );
-}
-
-/*
- * from Tim Hicks:
- * I'm no expert on bibtex, but those who know more than I on our mailing
- * list suggest that 'issue' isn't a recognised key for bibtex and
- * therefore that bibutils should be aliasing IS to number at some point in
- * the conversion.
- *
- * Therefore prefer outputting issue/number as number and only keep
- * a distinction if both issue and number are present for a particular
- * reference.
- */
-
-static void
-append_issue_number( fields *in, fields *out, int *status )
-{
- char issue[] = "issue", number[] = "number", *use_issue = number;
- int nissue = fields_find( in, "ISSUE", LEVEL_ANY );
- int nnumber = fields_find( in, "NUMBER", LEVEL_ANY );
- int fstatus;
-
- if ( nissue!=FIELDS_NOTFOUND && nnumber!=FIELDS_NOTFOUND ) use_issue = issue;
-
- if ( nissue!=FIELDS_NOTFOUND ) {
- fields_setused( in, nissue );
- fstatus = fields_add( out, use_issue, fields_value( in, nissue, FIELDS_CHRP ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- *status = BIBL_ERR_MEMERR;
- return;
- }
- }
-
- if ( nnumber!=FIELDS_NOTFOUND ) {
- fields_setused( in, nnumber );
- fstatus = fields_add( out, "number", fields_value( in, nnumber, FIELDS_CHRP ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- *status = BIBL_ERR_MEMERR;
- return;
- }
- }
-}
-
-static void
-append_howpublished( fields *in, fields *out, int *status )
-{
- int n, fstatus;
- char *d;
-
- n = fields_find( in, "GENRE:BIBUTILS", LEVEL_ANY );
- if ( n==FIELDS_NOTFOUND ) return;
-
- d = fields_value( in, n, FIELDS_CHRP_NOUSE );
- if ( !strcmp( d, "Habilitation thesis" ) ) {
- fstatus = fields_add( out, "howpublised", d, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- if ( !strcmp( d, "Licentiate thesis" ) ) {
- fstatus = fields_add( out, "howpublised", d, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- if ( !strcmp( d, "Diploma thesis" ) ) {
- fstatus = fields_add( out, "howpublised", d, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-}
-
-static int
-bibtexout_assemble( fields *in, fields *out, param *pm, unsigned long refnum )
-{
- int type, status = BIBL_OK;
-
- type = bibtexout_type( in, pm->progname, "", refnum );
-
- append_type ( type, out, &status );
- append_citekey ( in, out, pm->format_opts, &status );
- append_people ( in, "AUTHOR", "AUTHOR:CORP", "AUTHOR:ASIS", "author", LEVEL_MAIN, out, pm->format_opts, &status );
- append_people ( in, "EDITOR", "EDITOR:CORP", "EDITOR:ASIS", "editor", LEVEL_ANY, out, pm->format_opts, &status );
- append_people ( in, "TRANSLATOR", "TRANSLATOR:CORP", "TRANSLATOR:ASIS", "translator", LEVEL_ANY, out, pm->format_opts, &status );
- append_titles ( in, type, out, pm->format_opts, &status );
- append_date ( in, out, &status );
- append_simple ( in, "EDITION", "edition", out, &status );
- append_simple ( in, "PUBLISHER", "publisher", out, &status );
- append_simple ( in, "ADDRESS", "address", out, &status );
- append_simple ( in, "VOLUME", "volume", out, &status );
- append_issue_number( in, out, &status );
- append_pages ( in, out, pm->format_opts, &status );
- append_keywords ( in, out, &status );
- append_simple ( in, "CONTENTS", "contents", out, &status );
- append_simple ( in, "ABSTRACT", "abstract", out, &status );
- append_simple ( in, "LOCATION", "location", out, &status );
- append_simple ( in, "DEGREEGRANTOR", "school", out, &status );
- append_simple ( in, "DEGREEGRANTOR:ASIS", "school", out, &status );
- append_simple ( in, "DEGREEGRANTOR:CORP", "school", out, &status );
- append_simpleall ( in, "NOTES", "note", out, &status );
- append_simpleall ( in, "ANNOTE", "annote", out, &status );
- append_simple ( in, "ISBN", "isbn", out, &status );
- append_simple ( in, "ISSN", "issn", out, &status );
- append_simple ( in, "MRNUMBER", "mrnumber", out, &status );
- append_simple ( in, "CODEN", "coden", out, &status );
- append_simple ( in, "DOI", "doi", out, &status );
- append_urls ( in, out, &status );
- append_fileattach ( in, out, &status );
- append_arxiv ( in, out, &status );
- append_simple ( in, "EPRINTCLASS", "primaryClass", out, &status );
- append_isi ( in, out, &status );
- append_simple ( in, "LANGUAGE", "language", out, &status );
- append_howpublished( in, out, &status );
-
- return status;
-}
-
-/*****************************************************
- PUBLIC: int bibtexout_write()
-*****************************************************/
-
-static int
-bibtexout_write( fields *out, FILE *fp, param *pm, unsigned long refnum )
-{
- int i, j, len, nquotes, format_opts = pm->format_opts;
- char *tag, *value, ch;
-
- /* ...output type information "@article{" */
- value = ( char * ) fields_value( out, 0, FIELDS_CHRP );
- if ( !(format_opts & BIBL_FORMAT_BIBOUT_UPPERCASE) ) fprintf( fp, "@%s{", value );
- else {
- len = (value) ? strlen( value ) : 0;
- fprintf( fp, "@" );
- for ( i=0; i<len; ++i )
- fprintf( fp, "%c", toupper((unsigned char)value[i]) );
- fprintf( fp, "{" );
- }
-
- /* ...output refnum "Smith2001" */
- value = ( char * ) fields_value( out, 1, FIELDS_CHRP );
- fprintf( fp, "%s", value );
-
- /* ...rest of the references */
- for ( j=2; j<out->n; ++j ) {
- nquotes = 0;
- tag = ( char * ) fields_tag( out, j, FIELDS_CHRP );
- value = ( char * ) fields_value( out, j, FIELDS_CHRP );
- fprintf( fp, ",\n" );
- if ( format_opts & BIBL_FORMAT_BIBOUT_WHITESPACE ) fprintf( fp, " " );
- if ( !(format_opts & BIBL_FORMAT_BIBOUT_UPPERCASE ) ) fprintf( fp, "%s", tag );
- else {
- len = strlen( tag );
- for ( i=0; i<len; ++i )
- fprintf( fp, "%c", toupper((unsigned char)tag[i]) );
- }
- if ( format_opts & BIBL_FORMAT_BIBOUT_WHITESPACE ) fprintf( fp, " = \t" );
- else fprintf( fp, "=" );
-
- if ( format_opts & BIBL_FORMAT_BIBOUT_BRACKETS ) fprintf( fp, "{" );
- else fprintf( fp, "\"" );
-
- len = strlen( value );
- for ( i=0; i<len; ++i ) {
- ch = value[i];
- if ( ch!='\"' ) fprintf( fp, "%c", ch );
- else {
- if ( format_opts & BIBL_FORMAT_BIBOUT_BRACKETS || ( i>0 && value[i-1]=='\\' ) )
- fprintf( fp, "\"" );
- else {
- if ( nquotes % 2 == 0 )
- fprintf( fp, "``" );
- else fprintf( fp, "\'\'" );
- nquotes++;
- }
- }
- }
-
- if ( format_opts & BIBL_FORMAT_BIBOUT_BRACKETS ) fprintf( fp, "}" );
- else fprintf( fp, "\"" );
- }
-
- /* ...finish reference */
- if ( format_opts & BIBL_FORMAT_BIBOUT_FINALCOMMA ) fprintf( fp, "," );
- fprintf( fp, "\n}\n\n" );
-
- fflush( fp );
-
- return BIBL_OK;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/bibtextypes.c b/support/texlab/crates/bibutils_sys/src/bibtextypes.c
deleted file mode 100644
index f8768564ac..0000000000
--- a/support/texlab/crates/bibutils_sys/src/bibtextypes.c
+++ /dev/null
@@ -1,687 +0,0 @@
-/*
- * bibtypes.c
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Program and source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include "fields.h"
-#include "reftypes.h"
-
-/* Entry types from the IEEEtran Bibtex Style + others as observed */
-
-/*
- * Journal Article
- */
-static lookups article[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "title", "", TITLE, LEVEL_MAIN },
- { "year", "PARTDATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "PARTDATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "day", "PARTDATE:DAY", SIMPLE, LEVEL_MAIN },
- { "volume", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "pages", "PAGES", PAGES, LEVEL_MAIN },
- { "number", "ISSUE", SIMPLE, LEVEL_MAIN },
- { "issue", "ISSUE", SIMPLE, LEVEL_MAIN },
- { "journal", "", TITLE, LEVEL_HOST },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_HOST },
- { "address", "ADDRESS", SIMPLE, LEVEL_HOST },
- { "issn", "ISSN", SIMPLE, LEVEL_HOST },
- { "coden", "CODEN", SIMPLE, LEVEL_HOST },
- { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN },
- { "location", "LOCATION", SIMPLE, LEVEL_MAIN },
- { "ftp", "", URL, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "pdf", "FILEATTACH", SIMPLE, LEVEL_MAIN },
- { "eprint", "", EPRINT, LEVEL_MAIN },
- { "archivePrefix","ARCHIVEPREFIX", SIMPLE, LEVEL_MAIN },
- { "eprintclass", "EPRINTCLASS", SIMPLE, LEVEL_MAIN },
- { "primaryClass", "EPRINTCLASS", SIMPLE, LEVEL_MAIN },
- { "sentelink", "FILEATTACH", BT_SENTE, LEVEL_MAIN },
- { "file", "FILEATTACH", LINKEDFILE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "mrnumber", "MRNUMBER", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "key", "BIBKEY", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN },
- { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|ARTICLE", ALWAYS, LEVEL_MAIN },
- { "", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|periodical", ALWAYS, LEVEL_HOST },
- { "", "GENRE:BIBUTILS|journal article", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:BIBUTILS|academic journal", ALWAYS, LEVEL_HOST }
-};
-
-/* Book */
-
-static lookups book[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "title", "", TITLE, LEVEL_MAIN },
- { "booktitle", "", TITLE, LEVEL_MAIN },
- { "series", "", TITLE, LEVEL_HOST },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "organization", "ORGANIZER:CORP", BT_ORG, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "editor", "EDITOR", PERSON, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "volume", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "number", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "isbn", "ISBN", SIMPLE, LEVEL_MAIN },
- { "lccn", "LCCN", SIMPLE, LEVEL_MAIN },
- { "edition", "EDITION", SIMPLE, LEVEL_MAIN },
- { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "location", "LOCATION", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN },
- { "type", "GENRE:UKNOWN", GENRE, LEVEL_MAIN },
- { "key", "BIBKEY", SIMPLE, LEVEL_MAIN },
- { "ftp", "", URL, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "pdf", "FILEATTACH", SIMPLE, LEVEL_MAIN },
- { "sentelink", "FILEATTACH", BT_SENTE, LEVEL_MAIN },
- { "file", "FILEATTACH", LINKEDFILE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN },
- { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|BOOK", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|book", ALWAYS, LEVEL_MAIN }
-};
-
-/* Technical reports */
-
-static lookups report[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "title", "", TITLE, LEVEL_MAIN },
- { "booktitle", "", TITLE, LEVEL_MAIN },
- { "series", "", TITLE, LEVEL_HOST },
- { "editor", "EDITOR", PERSON, LEVEL_MAIN },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "institution", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "number", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "isbn", "ISBN", SIMPLE, LEVEL_MAIN },
- { "lccn", "LCCN", SIMPLE, LEVEL_MAIN },
- { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "location", "LOCATION", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN },
- { "key", "BIBKEY", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "ftp", "", URL, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "mrnumber", "MRNUMBER", SIMPLE, LEVEL_MAIN },
- { "pdf", "FILEATTACH", SIMPLE, LEVEL_MAIN },
- { "sentelink", "FILEATTACH", BT_SENTE, LEVEL_MAIN },
- { "file", "FILEATTACH", LINKEDFILE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN },
- { "type", "GENRE:UKNOWN", GENRE, LEVEL_MAIN },
- { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|REPORT", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|technical report", ALWAYS, LEVEL_MAIN },
-};
-
-static lookups manual[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN },
- { "title", "", TITLE, LEVEL_MAIN },
- { "booktitle", "", TITLE, LEVEL_MAIN },
- { "editor", "EDITOR", PERSON, LEVEL_MAIN },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "organization", "ORGANIZER:CORP", BT_ORG, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "isbn", "ISBN", SIMPLE, LEVEL_MAIN },
- { "lccn", "LCCN", SIMPLE, LEVEL_MAIN },
- { "edition", "EDITION", SIMPLE, LEVEL_MAIN },
- { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN },
- { "location", "LOCATION", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN },
- { "key", "BIBKEY", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "ftp", "", URL, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN },
- { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN },
- { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN },
- { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|REPORT", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|instruction", ALWAYS, LEVEL_MAIN }
-};
-
-/* Part of a book (e.g. chapter or section) */
-
-static lookups inbook[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN },
- { "editor", "EDITOR", PERSON, LEVEL_HOST },
- { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN }, /* chapter number */
- { "title", "", TITLE, LEVEL_MAIN }, /* chapter name */
- { "booktitle", "", TITLE, LEVEL_HOST },
- { "series", "", TITLE, LEVEL_SERIES },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_HOST },
- { "address", "ADDRESS", SIMPLE, LEVEL_HOST },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_HOST },
- { "month", "DATE:MONTH",SIMPLE, LEVEL_HOST },
- { "day", "DATE:DAY", SIMPLE, LEVEL_HOST },
- { "volume", "VOLUME", SIMPLE, LEVEL_SERIES },
- { "number", "NUMBER", SIMPLE, LEVEL_SERIES },
- { "pages", "PAGES", PAGES, LEVEL_HOST },
- { "isbn", "ISBN", SIMPLE, LEVEL_HOST },
- { "lccn", "LCCN", SIMPLE, LEVEL_HOST },
- { "edition", "EDITION", SIMPLE, LEVEL_HOST },
- { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "contents", "CONTENTS", SIMPLE, LEVEL_HOST },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "location", "LOCATION", SIMPLE, LEVEL_HOST },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "ftp", "", URL, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN },
- { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN },
- { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN },
- { "type", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN },
- { "key", "BIBKEY", SIMPLE, LEVEL_MAIN },
- { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|INBOOK", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "ISSUANCE|monographic", ALWAYS, LEVEL_HOST },
- { "", "GENRE:BIBUTILS|book chapter", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|book", ALWAYS, LEVEL_HOST }
-};
-
-/* References of papers in conference proceedings */
-
-static lookups inproceedings[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "editor", "EDITOR", PERSON, LEVEL_HOST },
- { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN }, /* chapter number */
- { "title", "", TITLE, LEVEL_MAIN }, /* chapter name */
- { "booktitle", "", TITLE, LEVEL_HOST },
- { "series", "", TITLE, LEVEL_SERIES },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_HOST },
- { "organization", "ORGANIZER:CORP", BT_ORG, LEVEL_HOST },
- { "address", "ADDRESS", SIMPLE, LEVEL_HOST },
- { "year", "PARTDATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "PARTDATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "day", "PARTDATE:DAY", SIMPLE, LEVEL_MAIN },
- { "volume", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "number", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "pages", "PAGES", PAGES, LEVEL_MAIN },
- { "isbn", "ISBN", SIMPLE, LEVEL_HOST },
- { "lccn", "LCCN", SIMPLE, LEVEL_HOST },
- { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "contents", "CONTENTS", SIMPLE, LEVEL_HOST },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "paper", "PAPER", SIMPLE, LEVEL_MAIN },
- { "location", "LOCATION", SIMPLE, LEVEL_HOST },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "ftp", "", URL, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN },
- { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN },
- { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN },
- { "type", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN },
- { "key", "BIBKEY", SIMPLE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN },
- { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|INPROCEEDINGS", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|conference publication", ALWAYS, LEVEL_HOST }
-};
-
-/* Used for a section of a book with its own title */
-
-static lookups incollection[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "editor", "EDITOR", PERSON, LEVEL_HOST },
- { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN }, /* chapter number */
- { "title", "", TITLE, LEVEL_MAIN }, /* chapter name */
- { "booktitle", "", TITLE, LEVEL_HOST },
- { "series", "", TITLE, LEVEL_SERIES },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_HOST },
- { "address", "ADDRESS", SIMPLE, LEVEL_HOST },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_HOST },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_HOST },
- { "day", "DATE:DAY", SIMPLE, LEVEL_HOST },
- { "volume", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "number", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "pages", "PAGES", PAGES, LEVEL_MAIN },
- { "isbn", "ISBN", SIMPLE, LEVEL_HOST },
- { "lccn", "LCCN", SIMPLE, LEVEL_HOST },
- { "edition", "EDITION", SIMPLE, LEVEL_HOST },
- { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "contents", "CONTENTS", SIMPLE, LEVEL_HOST },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "type", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN },
- { "key", "BIBKEY", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "ftp", "", URL, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN },
- { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN },
- { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN },
- { "location", "LOCATION", SIMPLE, LEVEL_HOST },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN },
- { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|INCOLLECTION", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:BIBUTILS|collection", ALWAYS, LEVEL_HOST }
-};
-
-/* Proceedings */
-
-static lookups proceedings[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN },
- { "editor", "EDITOR", PERSON, LEVEL_MAIN },
- { "title", "", TITLE, LEVEL_MAIN },
- { "booktitle", "", TITLE, LEVEL_MAIN },
- { "series", "", TITLE, LEVEL_HOST },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "organization", "ORGANIZER:CORP", BT_ORG, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "volume", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "number", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "pages", "PAGES", PAGES, LEVEL_MAIN },
- { "isbn", "ISBN", SIMPLE, LEVEL_MAIN },
- { "lccn", "LCCN", SIMPLE, LEVEL_MAIN },
- { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "ftp", "", URL, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN },
- { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN },
- { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "location", "LOCATION", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN },
- { "key", "BIBKEY", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN },
- { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|PROCEEDINGS", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|conference publication", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups phds[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN },
- { "title", "", TITLE, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "school", "DEGREEGRANTOR:ASIS",SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "ftp", "", URL, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN },
- { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN },
- { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN },
- { "howpublished", "" , HOWPUBLISHED, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "location", "LOCATION", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN },
- { "key", "BIBKEY", SIMPLE, LEVEL_MAIN },
- { "type", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN },
- { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|THESIS", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|thesis", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:BIBUTILS|Ph.D. thesis", DEFAULT, LEVEL_MAIN }
-};
-
-static lookups masters[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN },
- { "title", "", TITLE, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "school", "DEGREEGRANTOR:ASIS",SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "ftp", "", URL, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "pdf", "FILEATTACH", SIMPLE, LEVEL_MAIN },
- { "sentelink", "FILEATTACH", BT_SENTE, LEVEL_MAIN },
- { "file", "FILEATTACH", LINKEDFILE, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "location", "LOCATION", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN },
- { "key", "BIBKEY", SIMPLE, LEVEL_MAIN },
- { "type", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN },
- { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|THESIS", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|thesis", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:BIBUTILS|Masters thesis", DEFAULT, LEVEL_MAIN }
-};
-
-/* Unpublished */
-
-static lookups unpublished[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN },
- { "title", "", TITLE, LEVEL_MAIN },
- { "booktitle", "", TITLE, LEVEL_MAIN },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "editor", "EDITOR", PERSON, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "ftp", "", URL, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "pdf", "FILEATTACH",SIMPLE, LEVEL_MAIN },
- { "sentelink", "FILEATTACH",BT_SENTE, LEVEL_MAIN },
- { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "location", "LOCATION", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN },
- { "key", "BIBKEY", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN },
- { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|BOOK", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:BIBUTILS|unpublished", ALWAYS, LEVEL_MAIN }
-};
-
-/*
- * For Published Standards
- */
-static lookups standard[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR",PERSON, LEVEL_MAIN },
- { "organization", "ORGANIZER:CORP", BT_ORG, LEVEL_MAIN },
- { "institution", "AUTHOR:CORP", SIMPLE, LEVEL_MAIN },
- { "title", "", TITLE, LEVEL_MAIN },
- { "booktitle", "", TITLE, LEVEL_MAIN },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "editor", "EDITOR", PERSON, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "isbn", "ISBN", SIMPLE, LEVEL_MAIN },
- { "lccn", "LCCN", SIMPLE, LEVEL_MAIN },
- { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "ftp", "", URL, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "pdf", "FILEATTACH", SIMPLE, LEVEL_MAIN },
- { "sentelink", "FILEATTACH", BT_SENTE, LEVEL_MAIN },
- { "file", "FILEATTACH",LINKEDFILE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "type", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "number", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "revision", "EDITION", SIMPLE, LEVEL_MAIN },
- { "location", "LOCATION", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN },
- { "key", "BIBKEY", SIMPLE, LEVEL_MAIN },
- { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN },
- { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|STANDARD", ALWAYS, LEVEL_MAIN }
-};
-
-/*
- * For Journals and Magazines
- */
-static lookups periodical[] = {
- { "title", "", TITLE, LEVEL_MAIN },
- { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "series", "", TITLE, LEVEL_HOST },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "editor", "EDITOR", PERSON, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "issn", "ISSN", SIMPLE, LEVEL_MAIN },
- { "coden", "CODEN", SIMPLE, LEVEL_MAIN },
- { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "volume", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "number", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "ftp", "", URL, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "pdf", "FILEATTACH", SIMPLE, LEVEL_MAIN },
- { "sentelink", "FILEATTACH", BT_SENTE, LEVEL_MAIN },
- { "file", "FILEATTACH", LINKEDFILE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN },
- { "organization", "ORGANIZER:CORP", BT_ORG, LEVEL_MAIN },
- { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN },
- { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|periodical", ALWAYS, LEVEL_MAIN }
-};
-
-/*
- * For Patent
- */
-static lookups patent[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "assignee", "ASSIGNEE", PERSON, LEVEL_MAIN },
- { "title", "", TITLE, LEVEL_MAIN },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "editor", "EDITOR", PERSON, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN }, /* date granted */
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "yearfiled", "DATE:YEAR", SIMPLE, LEVEL_MAIN }, /* date filed */
- { "monthfiled", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "dayfiled", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "location", "LOCATION", SIMPLE, LEVEL_MAIN },
- { "nationality", "NATIONALITY", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN },
- { "key", "BIBKEY", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "ftp", "", URL, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "pdf", "FILEATTACH", SIMPLE, LEVEL_MAIN },
- { "sentelink", "FILEATTACH", BT_SENTE, LEVEL_MAIN },
- { "file", "FILEATTACH", LINKEDFILE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "type", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN },
- { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|PATENT", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|patent", ALWAYS, LEVEL_MAIN },
-};
-
-/*
- * Electronic Source
- */
-static lookups electronic[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "organization", "ORGANIZER:CORP", BT_ORG, LEVEL_MAIN },
- { "title", "", TITLE, LEVEL_MAIN },
- { "booktitle", "", TITLE, LEVEL_MAIN },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "editor", "EDITOR", PERSON, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "volume", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "ftp", "", URL, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "pdf", "FILEATTACH", SIMPLE, LEVEL_MAIN },
- { "sentelink", "FILEATTACH", BT_SENTE, LEVEL_MAIN },
- { "file", "FILEATTACH", LINKEDFILE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN },
- { "location", "LOCATION", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN },
- { "key", "BIBKEY", SIMPLE, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN },
- { "", "RESOURCE|software, multimedia", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|web site", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:BIBUTILS|electronic", ALWAYS, LEVEL_MAIN },
-};
-
-static lookups misc[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "title", "", TITLE, LEVEL_MAIN },
- { "booktitle", "", TITLE, LEVEL_MAIN },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "organization", "ORGANIZER:CORP", BT_ORG, LEVEL_MAIN },
- { "pages", "PAGES", PAGES, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "editor", "EDITOR", PERSON, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "contents", "CONTENTS", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "ftp", "", URL, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "pdf", "FILEATTACH", SIMPLE, LEVEL_MAIN },
- { "sentelink", "FILEATTACH", BT_SENTE, LEVEL_MAIN },
- { "file", "FILEATTACH", LINKEDFILE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "crossref", "CROSSREF", SIMPLE, LEVEL_MAIN },
- { "location", "LOCATION", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTE", SIMPLE, LEVEL_MAIN },
- { "key", "BIBKEY", SIMPLE, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "keywords", "KEYWORD", KEYWORD, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|MISC", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:BIBUTILS|miscellaneous", ALWAYS, LEVEL_MAIN },
-};
-
-#define ORIG(a) ( &(a[0]) )
-#define SIZE(a) ( sizeof( a ) / sizeof( lookups ) )
-#define REFTYPE(a,b) { a, ORIG(b), SIZE(b) }
-
-variants bibtex_all[] = {
- REFTYPE( "article", article ),
- REFTYPE( "booklet", book ),
- REFTYPE( "book", book ),
- REFTYPE( "electronic", electronic ),
- REFTYPE( "inbook", inbook ),
- REFTYPE( "incollection", incollection ),
- REFTYPE( "inconference", inproceedings ),
- REFTYPE( "conference", inproceedings ),
- REFTYPE( "inproceedings", inproceedings ),
- REFTYPE( "manual", manual ),
- REFTYPE( "mastersthesis", masters ),
- REFTYPE( "misc", misc ),
- REFTYPE( "online", misc ),
- REFTYPE( "patent", patent ),
- REFTYPE( "phdthesis", phds ),
- REFTYPE( "periodical", periodical ),
- REFTYPE( "proceedings", proceedings ),
- REFTYPE( "standard", standard ),
- REFTYPE( "techreport", report ),
- REFTYPE( "unpublished", unpublished ),
-};
-
-int bibtex_nall = sizeof( bibtex_all ) / sizeof( variants );
diff --git a/support/texlab/crates/bibutils_sys/src/bibutils.c b/support/texlab/crates/bibutils_sys/src/bibutils.c
deleted file mode 100644
index cad703f9f3..0000000000
--- a/support/texlab/crates/bibutils_sys/src/bibutils.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * bibutils.c
- *
- * Copyright (c) Chris Putnam 2005-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include "bibutils.h"
-#include "bibformats.h"
-
-int
-bibl_initparams( param *p, int readmode, int writemode, char *progname )
-{
- int status;
-
- switch ( readmode ) {
- case BIBL_BIBTEXIN: status = bibtexin_initparams ( p, progname ); break;
- case BIBL_BIBLATEXIN: status = biblatexin_initparams( p, progname ); break;
- case BIBL_COPACIN: status = copacin_initparams ( p, progname ); break;
- case BIBL_EBIIN: status = ebiin_initparams ( p, progname ); break;
- case BIBL_ENDNOTEIN: status = endin_initparams ( p, progname ); break;
- case BIBL_ENDNOTEXMLIN: status = endxmlin_initparams ( p, progname ); break;
- case BIBL_MEDLINEIN: status = medin_initparams ( p, progname ); break;
- case BIBL_MODSIN: status = modsin_initparams ( p, progname ); break;
- case BIBL_NBIBIN: status = nbibin_initparams ( p, progname ); break;
- case BIBL_RISIN: status = risin_initparams ( p, progname ); break;
- case BIBL_WORDIN: status = wordin_initparams ( p, progname ); break;
- default: status = BIBL_ERR_BADINPUT;
- }
-
- if ( status!=BIBL_OK ) return status;
-
- switch ( writemode ) {
- case BIBL_ADSABSOUT: status = adsout_initparams ( p, progname ); break;
- case BIBL_BIBTEXOUT: status = bibtexout_initparams( p, progname ); break;
- case BIBL_ENDNOTEOUT: status = endout_initparams ( p, progname ); break;
- case BIBL_ISIOUT: status = isiout_initparams ( p, progname ); break;
- case BIBL_MODSOUT: status = modsout_initparams ( p, progname ); break;
- case BIBL_NBIBOUT: status = nbibout_initparams ( p, progname ); break;
- case BIBL_RISOUT: status = risout_initparams ( p, progname ); break;
- case BIBL_WORD2007OUT: status = wordout_initparams ( p, progname ); break;
- default: status = BIBL_ERR_BADINPUT;
- }
-
- return status;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/bibutils.h b/support/texlab/crates/bibutils_sys/src/bibutils.h
deleted file mode 100644
index 25258e5a78..0000000000
--- a/support/texlab/crates/bibutils_sys/src/bibutils.h
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * bibutils.h
- *
- * Copyright (c) Chris Putnam 2005-2019
- *
- * Source code released under GPL version 2
- *
- */
-#ifndef BIBUTILS_H
-#define BIBUTILS_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include <stdio.h>
-#include "bibl.h"
-#include "slist.h"
-#include "charsets.h"
-#include "str_conv.h"
-
-#define BIBL_OK (0)
-#define BIBL_ERR_BADINPUT (-1)
-#define BIBL_ERR_MEMERR (-2)
-#define BIBL_ERR_CANTOPEN (-3)
-
-#define BIBL_FIRSTIN (100)
-#define BIBL_MODSIN (BIBL_FIRSTIN)
-#define BIBL_BIBTEXIN (BIBL_FIRSTIN+1)
-#define BIBL_RISIN (BIBL_FIRSTIN+2)
-#define BIBL_ENDNOTEIN (BIBL_FIRSTIN+3)
-#define BIBL_COPACIN (BIBL_FIRSTIN+4)
-#define BIBL_ISIIN (BIBL_FIRSTIN+5)
-#define BIBL_MEDLINEIN (BIBL_FIRSTIN+6)
-#define BIBL_ENDNOTEXMLIN (BIBL_FIRSTIN+7)
-#define BIBL_BIBLATEXIN (BIBL_FIRSTIN+8)
-#define BIBL_EBIIN (BIBL_FIRSTIN+9)
-#define BIBL_WORDIN (BIBL_FIRSTIN+10)
-#define BIBL_NBIBIN (BIBL_FIRSTIN+11)
-#define BIBL_LASTIN (BIBL_FIRSTIN+11)
-
-#define BIBL_FIRSTOUT (200)
-#define BIBL_MODSOUT (BIBL_FIRSTOUT)
-#define BIBL_BIBTEXOUT (BIBL_FIRSTOUT+1)
-#define BIBL_RISOUT (BIBL_FIRSTOUT+2)
-#define BIBL_ENDNOTEOUT (BIBL_FIRSTOUT+3)
-#define BIBL_ISIOUT (BIBL_FIRSTOUT+4)
-#define BIBL_WORD2007OUT (BIBL_FIRSTOUT+5)
-#define BIBL_ADSABSOUT (BIBL_FIRSTOUT+6)
-#define BIBL_NBIBOUT (BIBL_FIRSTOUT+7)
-#define BIBL_LASTOUT (BIBL_FIRSTOUT+7)
-
-#define BIBL_FORMAT_VERBOSE (1)
-#define BIBL_FORMAT_BIBOUT_FINALCOMMA (2)
-#define BIBL_FORMAT_BIBOUT_SINGLEDASH (4)
-#define BIBL_FORMAT_BIBOUT_WHITESPACE (8)
-#define BIBL_FORMAT_BIBOUT_BRACKETS (16)
-#define BIBL_FORMAT_BIBOUT_UPPERCASE (32)
-#define BIBL_FORMAT_BIBOUT_STRICTKEY (64)
-#define BIBL_FORMAT_BIBOUT_SHORTTITLE (128)
-#define BIBL_FORMAT_BIBOUT_DROPKEY (256)
-#define BIBL_FORMAT_MODSOUT_DROPKEY (512)
-
-#define BIBL_RAW_WITHCHARCONVERT (4)
-#define BIBL_RAW_WITHMAKEREFID (8)
-
-#define BIBL_CHARSET_UNKNOWN CHARSET_UNKNOWN
-#define BIBL_CHARSET_UNICODE CHARSET_UNICODE
-#define BIBL_CHARSET_GB18030 CHARSET_GB18030
-#define BIBL_CHARSET_DEFAULT CHARSET_DEFAULT
-#define BIBL_CHARSET_UTF8_DEFAULT CHARSET_UTF8_DEFAULT
-#define BIBL_CHARSET_BOM_DEFAULT CHARSET_BOM_DEFAULT
-
-#define BIBL_SRC_DEFAULT (0) /* value from program default */
-#define BIBL_SRC_FILE (1) /* value from file, priority over default */
-#define BIBL_SRC_USER (2) /* value from user, priority over file, default */
-
-#define BIBL_XMLOUT_FALSE STR_CONV_XMLOUT_FALSE
-#define BIBL_XMLOUT_TRUE STR_CONV_XMLOUT_TRUE
-#define BIBL_XMLOUT_ENTITIES STR_CONV_XMLOUT_ENTITIES
-
-typedef unsigned char uchar;
-
-typedef struct param {
-
- int readformat;
- int writeformat;
-
- int charsetin;
- uchar charsetin_src; /*BIBL_SRC_DEFAULT, BIBL_SRC_FILE, BIBL_SRC_USER*/
- uchar latexin;
- uchar utf8in;
- uchar xmlin;
- uchar nosplittitle;
-
- int charsetout;
- uchar charsetout_src; /* BIBL_SRC_PROG, BIBL_SRC_USER */
- uchar latexout; /* If true, write Latex codes */
- uchar utf8out; /* If true, write characters encoded by utf8 */
- uchar utf8bom; /* If true, write utf8 byte-order-mark */
- uchar xmlout; /* If true, write characters in XML entities */
-
- int format_opts; /* options for specific formats */
- int addcount; /* add reference count to reference id */
- uchar output_raw;
- uchar verbose;
- uchar singlerefperfile;
-
- slist asis; /* Names that shouldn't be mangled */
- slist corps; /* Names that shouldn't be mangled-MODS corporation type */
-
- char *progname;
-
-
- int (*readf)(FILE*,char*,int,int*,str*,str*,int*);
- int (*processf)(fields*,const char*,const char*,long,struct param*);
- int (*cleanf)(bibl*,struct param*);
- int (*typef) (fields*,const char*,int,struct param*);
- int (*convertf)(fields*,fields*,int,struct param*);
- void (*headerf)(FILE*,struct param*);
- void (*footerf)(FILE*);
- int (*assemblef)(fields*,fields*,struct param*,unsigned long);
- int (*writef)(fields*,FILE*,struct param*,unsigned long);
- variants *all;
- int nall;
-
-
-} param;
-
-int bibl_initparams( param *p, int readmode, int writemode, char *progname );
-void bibl_freeparams( param *p );
-int bibl_readasis( param *p, char *filename );
-int bibl_addtoasis( param *p, char *entry );
-int bibl_readcorps( param *p, char *filename );
-int bibl_addtocorps( param *p, char *entry );
-int bibl_read( bibl *b, FILE *fp, char *filename, param *p );
-int bibl_write( bibl *b, FILE *fp, param *p );
-void bibl_reporterr( int err );
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif
-
diff --git a/support/texlab/crates/bibutils_sys/src/bltypes.c b/support/texlab/crates/bibutils_sys/src/bltypes.c
deleted file mode 100644
index c4e00a01d4..0000000000
--- a/support/texlab/crates/bibutils_sys/src/bltypes.c
+++ /dev/null
@@ -1,1071 +0,0 @@
-/*
- * bltypes.c
- *
- * Copyright (c) Chris Putnam 2008-2019
- * Copyright (c) Johannes Wilm 2010-2019
- *
- * Program and source code released under the GPL version 2
- *
- */
-
-#include <stdio.h>
-#include "fields.h"
-#include "reftypes.h"
-
-/* Entry types for biblatex formatted bibliographies */
-
-/*
- * Article in a journal, newspaper, other periodical
- */
-static lookups article[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "editor", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editora", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editorb", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editorc", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editortype", "", BLT_SKIP, LEVEL_MAIN },
- { "editoratype", "", BLT_SKIP, LEVEL_MAIN },
- { "editorbtype", "", BLT_SKIP, LEVEL_MAIN },
- { "editorctype", "", BLT_SKIP, LEVEL_MAIN },
- { "director", "DIRECTOR", PERSON, LEVEL_MAIN },
- { "producer", "PRODUCER", PERSON, LEVEL_MAIN },
- { "execproducer", "PRODUCER", PERSON, LEVEL_MAIN },
- { "writer", "AUTHOR", PERSON, LEVEL_MAIN },
- { "redactor", "REDACTOR", PERSON, LEVEL_MAIN },
- { "annotator", "ANNOTATOR", PERSON, LEVEL_MAIN },
- { "commentator", "COMMENTATOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "title", "TITLE", TITLE, LEVEL_MAIN },
- { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN },
- { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN },
- { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN },
- { "journal", "TITLE", TITLE, LEVEL_HOST },
- { "journaltitle", "TITLE", TITLE, LEVEL_HOST },
- { "journalsubtitle", "SUBTITLE", TITLE, LEVEL_HOST },
- { "shortjournal", "SHORTTITLE", SIMPLE, LEVEL_HOST },
- { "issuetitle", "TITLE", TITLE, LEVEL_SERIES }, /*WRONG*/
- { "issuesubtitle", "SUBTITLE", TITLE, LEVEL_SERIES }, /*WRONG*/
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "origlanguage", "LANGUAGE", SIMPLE, LEVEL_ORIG },
- { "origyear", "DATE:YEAR", SIMPLE, LEVEL_ORIG },
- { "origdate", "DATE", SIMPLE, LEVEL_ORIG },
- { "origtitle", "TITLE", SIMPLE, LEVEL_ORIG },
- { "origlocation", "ADDRESS", SIMPLE, LEVEL_ORIG },
- { "origpublisher", "PUBLISHER", SIMPLE, LEVEL_ORIG },
- { "series", "PARTTITLE", SIMPLE, LEVEL_HOST },
- { "volume", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "number", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "eid", "EID", SIMPLE, LEVEL_MAIN },
- { "issue", "ISSUE", SIMPLE, LEVEL_MAIN },
- { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/
- { "day", "PARTDATE:DAY", SIMPLE, LEVEL_MAIN },
- { "month", "PARTDATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "year", "PARTDATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "pages", "PAGES", PAGES, LEVEL_MAIN },
- { "version", "EDITION", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "issn", "ISSN", SIMPLE, LEVEL_HOST },
- { "coden", "CODEN", SIMPLE, LEVEL_HOST },
- { "abstract", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN },
- { "eprint", "", BT_EPRINT, LEVEL_MAIN },
- { "eprinttype", "", BT_EPRINT, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN },
- { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN }, /* WRONG */
- { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN }, /* WRONG */
- { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN }, /* WRONG */
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN },
- { "entrysubtype", "", BLT_SUBTYPE, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|ARTICLE", ALWAYS, LEVEL_MAIN },
- { "", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:BIBUTILS|journal article", DEFAULT, LEVEL_MAIN },
- { "", "GENRE:MARC|periodical", DEFAULT, LEVEL_HOST }
-};
-
-/* Book */
-
-static lookups book[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "editor", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editora", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editorb", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editorc", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editortype", "", BLT_SKIP, LEVEL_MAIN },
- { "editoratype", "", BLT_SKIP, LEVEL_MAIN },
- { "editorbtype", "", BLT_SKIP, LEVEL_MAIN },
- { "editorctype", "", BLT_SKIP, LEVEL_MAIN },
- { "director", "DIRECTOR", PERSON, LEVEL_MAIN },
- { "producer", "PRODUCER", PERSON, LEVEL_MAIN },
- { "execproducer", "PRODUCER", PERSON, LEVEL_MAIN },
- { "writer", "AUTHOR", PERSON, LEVEL_MAIN },
- { "redactor", "REDACTOR", PERSON, LEVEL_MAIN },
- { "annotator", "ANNOTATOR", PERSON, LEVEL_MAIN },
- { "commentator", "COMMENTATOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "introduction", "INTROAUTHOR", PERSON, LEVEL_MAIN },
- { "foreword", "INTROAUTHOR", PERSON, LEVEL_MAIN },
- { "afterword", "AFTERAUTHOR", PERSON, LEVEL_MAIN },
- { "title", "TITLE", TITLE, LEVEL_MAIN },
- { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN },
- { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN },
- { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN },
- { "maintitle", "TITLE", TITLE, LEVEL_HOST },
- { "mainsubtitle", "SUBTITLE", TITLE, LEVEL_HOST },
- { "maintitleaddon", "TITLEADDON", TITLE, LEVEL_HOST },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/
- { "origlanguage", "LANGUAGE", SIMPLE, LEVEL_ORIG },
- { "origyear", "DATE:YEAR", SIMPLE, LEVEL_ORIG },
- { "origdate", "DATE", SIMPLE, LEVEL_ORIG },
- { "origtitle", "TITLE", SIMPLE, LEVEL_ORIG },
- { "origlocation", "ADDRESS", SIMPLE, LEVEL_ORIG },
- { "origpublisher", "PUBLISHER", SIMPLE, LEVEL_ORIG },
- { "volume", "VOLUME", SIMPLE, LEVEL_HOST },
- { "part", "PART", SIMPLE, LEVEL_HOST },
- { "edition", "EDITION", SIMPLE, LEVEL_MAIN },
- { "volumes", "NUMVOLUMES", SIMPLE, LEVEL_HOST },
- { "series", "TITLE", SIMPLE, LEVEL_HOST }, /* WRONG */
- { "number", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "location", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "isbn", "ISBN", SIMPLE, LEVEL_MAIN },
- { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN },
- { "pages", "PAGES", PAGES, LEVEL_MAIN }, /* WRONG */
- { "pagetotal", "PAGES:TOTAL", SIMPLE, LEVEL_MAIN },
- { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN },
- { "eprint", "", BT_EPRINT, LEVEL_MAIN },
- { "eprinttype", "", BT_EPRINT, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN },
- { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN },
- { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN },
- { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|BOOK", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|book", ALWAYS, LEVEL_MAIN }
-};
-
-/* Booklet */
-
-static lookups booklet[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "editor", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editora", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editorb", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editorc", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editortype", "", BLT_SKIP, LEVEL_MAIN },
- { "editoratype", "", BLT_SKIP, LEVEL_MAIN },
- { "editorbtype", "", BLT_SKIP, LEVEL_MAIN },
- { "editorctype", "", BLT_SKIP, LEVEL_MAIN },
- { "director", "DIRECTOR", PERSON, LEVEL_MAIN },
- { "producer", "PRODUCER", PERSON, LEVEL_MAIN },
- { "execproducer", "PRODUCER", PERSON, LEVEL_MAIN },
- { "writer", "AUTHOR", PERSON, LEVEL_MAIN },
- { "title", "TITLE", TITLE, LEVEL_MAIN },
- { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN },
- { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN },
- { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "type", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "location", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN },
- { "pages", "PAGES", PAGES, LEVEL_MAIN },
- { "pagetotal", "PAGES:TOTAL", SIMPLE, LEVEL_MAIN },
- { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN },
- { "eprint", "", BT_EPRINT, LEVEL_MAIN },
- { "eprinttype", "", BT_EPRINT, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN },
- { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN },
- { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN },
- { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|BOOK", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|book", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups collection[] = {
- { "editor", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editora", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editorb", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editorc", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editortype", "", BLT_SKIP, LEVEL_MAIN },
- { "editoratype", "", BLT_SKIP, LEVEL_MAIN },
- { "editorbtype", "", BLT_SKIP, LEVEL_MAIN },
- { "editorctype", "", BLT_SKIP, LEVEL_MAIN },
- { "director", "DIRECTOR", PERSON, LEVEL_MAIN },
- { "producer", "PRODUCER", PERSON, LEVEL_MAIN },
- { "execproducer", "PRODUCER", PERSON, LEVEL_MAIN },
- { "writer", "AUTHOR", PERSON, LEVEL_MAIN },
- { "redactor", "REDACTOR", PERSON, LEVEL_MAIN },
- { "annotator", "ANNOTATOR", PERSON, LEVEL_MAIN },
- { "commentator", "COMMENTATOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/
- { "introduction", "INTROAUTHOR", PERSON, LEVEL_MAIN },
- { "foreword", "INTROAUTHOR", PERSON, LEVEL_MAIN },
- { "afterword", "AFTERAUTHOR", PERSON, LEVEL_MAIN },
- { "title", "TITLE", TITLE, LEVEL_MAIN },
- { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN },
- { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN },
- { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN },
- { "maintitle", "TITLE", TITLE, LEVEL_HOST },
- { "mainsubtitle", "SUBTITLE", TITLE, LEVEL_HOST },
- { "maintitleaddon", "TITLEADDON", TITLE, LEVEL_HOST },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "origlanguage", "LANGUAGE", SIMPLE, LEVEL_ORIG },
- { "origyear", "DATE:YEAR", SIMPLE, LEVEL_ORIG },
- { "origdate", "DATE", SIMPLE, LEVEL_ORIG },
- { "origtitle", "TITLE", SIMPLE, LEVEL_ORIG },
- { "origlocation", "ADDRESS", SIMPLE, LEVEL_ORIG },
- { "origpublisher", "PUBLISHER", SIMPLE, LEVEL_ORIG },
- { "volume", "VOLUME", SIMPLE, LEVEL_HOST },
- { "part", "PART", SIMPLE, LEVEL_HOST },
- { "edition", "EDITION", SIMPLE, LEVEL_MAIN },
- { "volumes", "NUMVOLUMES", SIMPLE, LEVEL_HOST },
- { "series", "TITLE", SIMPLE, LEVEL_HOST },
- { "number", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "location", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "isbn", "ISBN", SIMPLE, LEVEL_MAIN },
- { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN },
- { "pages", "PAGES", PAGES, LEVEL_MAIN },
- { "pagetotal", "PAGES:TOTAL", SIMPLE, LEVEL_MAIN },
- { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN },
- { "eprint", "", BT_EPRINT, LEVEL_MAIN },
- { "eprinttype", "", BT_EPRINT, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN },
- { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN },
- { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN },
- { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|BOOK", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|book", ALWAYS, LEVEL_MAIN }
-};
-
-/* Part of a book (e.g. chapter or section) */
-
-static lookups inbook[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "editor", "EDITOR", BLT_EDITOR, LEVEL_HOST },
- { "editora", "EDITOR", BLT_EDITOR, LEVEL_HOST },
- { "editorb", "EDITOR", BLT_EDITOR, LEVEL_HOST },
- { "editorc", "EDITOR", BLT_EDITOR, LEVEL_HOST },
- { "editortype", "", BLT_SKIP, LEVEL_HOST },
- { "editoratype", "", BLT_SKIP, LEVEL_HOST },
- { "editorbtype", "", BLT_SKIP, LEVEL_HOST },
- { "editorctype", "", BLT_SKIP, LEVEL_HOST },
- { "director", "DIRECTOR", PERSON, LEVEL_HOST },
- { "producer", "PRODUCER", PERSON, LEVEL_HOST },
- { "execproducer", "PRODUCER", PERSON, LEVEL_HOST },
- { "writer", "AUTHOR", PERSON, LEVEL_HOST },
- { "redactor", "REDACTOR", PERSON, LEVEL_HOST },
- { "annotator", "ANNOTATOR", PERSON, LEVEL_HOST },
- { "commentator", "COMMENTATOR", PERSON, LEVEL_HOST },
- { "translator", "TRANSLATOR", PERSON, LEVEL_HOST },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/
- { "introduction", "INTROAUTHOR", PERSON, LEVEL_HOST },
- { "foreword", "INTROAUTHOR", PERSON, LEVEL_HOST },
- { "afterword", "AFTERAUTHOR", PERSON, LEVEL_HOST },
- { "title", "TITLE", TITLE, LEVEL_MAIN },
- { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN },
- { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN },
- { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN },
- { "booktitle", "TITLE", TITLE, LEVEL_HOST },
- { "booksubtitle", "SUBTITLE", TITLE, LEVEL_HOST },
- { "booktitleaddon", "TITLEADDON", TITLE, LEVEL_HOST },
- { "bookauthor", "AUTHOR", PERSON, LEVEL_HOST },
- { "maintitle", "TITLE", TITLE, LEVEL_SERIES },
- { "mainsubtitle", "SUBTITLE", TITLE, LEVEL_SERIES },
- { "maintitleaddon", "TITLEADDON", TITLE, LEVEL_SERIES },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "origlanguage", "LANGUAGE", SIMPLE, LEVEL_ORIG },
- { "origyear", "DATE:YEAR", SIMPLE, LEVEL_ORIG },
- { "origdate", "DATE", SIMPLE, LEVEL_ORIG },
- { "origtitle", "TITLE", SIMPLE, LEVEL_ORIG },
- { "origlocation", "ADDRESS", SIMPLE, LEVEL_ORIG },
- { "origpublisher", "PUBLISHER", SIMPLE, LEVEL_ORIG },
- { "volume", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "pages", "PAGES", PAGES, LEVEL_MAIN },
- { "part", "PART", SIMPLE, LEVEL_HOST },
- { "edition", "EDITION", SIMPLE, LEVEL_MAIN },
- { "volumes", "NUMVOLUMES", SIMPLE, LEVEL_HOST },
- { "series", "TITLE", SIMPLE, LEVEL_SERIES+1 }, /* WRONG */
- { "number", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "location", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "isbn", "ISBN", SIMPLE, LEVEL_HOST },
- { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN },
- { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN },
- { "eprint", "", BT_EPRINT, LEVEL_MAIN },
- { "eprinttype", "", BT_EPRINT, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN },
- { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN },
- { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN },
- { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|INBOOK", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "ISSUANCE|monographic", ALWAYS, LEVEL_HOST },
- { "", "GENRE:BIBUTILS|book chapter", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|book", ALWAYS, LEVEL_HOST }
-};
-
-/* incollection */
-
-static lookups incollection[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/
- { "title", "TITLE", TITLE, LEVEL_MAIN },
- { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN },
- { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN },
- { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "edition", "EDITION", SIMPLE, LEVEL_MAIN },
- { "number", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "introduction", "INTROAUTHOR", PERSON, LEVEL_HOST },
- { "foreword", "INTROAUTHOR", PERSON, LEVEL_HOST },
- { "afterword", "AFTERAUTHOR", PERSON, LEVEL_HOST },
- { "bookauthor", "AUTHOR", PERSON, LEVEL_HOST },
- { "booktitle", "TITLE", TITLE, LEVEL_HOST },
- { "booksubtitle", "SUBTITLE", TITLE, LEVEL_HOST },
- { "booktitleaddon", "TITLEADDON", TITLE, LEVEL_HOST },
- { "editor", "EDITOR", BLT_EDITOR, LEVEL_HOST },
- { "editora", "EDITOR", BLT_EDITOR, LEVEL_HOST },
- { "editorb", "EDITOR", BLT_EDITOR, LEVEL_HOST },
- { "editorc", "EDITOR", BLT_EDITOR, LEVEL_HOST },
- { "editortype", "", BLT_SKIP, LEVEL_HOST },
- { "editoratype", "", BLT_SKIP, LEVEL_HOST },
- { "editorbtype", "", BLT_SKIP, LEVEL_HOST },
- { "editorctype", "", BLT_SKIP, LEVEL_HOST },
- { "director", "DIRECTOR", PERSON, LEVEL_HOST },
- { "producer", "PRODUCER", PERSON, LEVEL_HOST },
- { "execproducer", "PRODUCER", PERSON, LEVEL_HOST },
- { "writer", "AUTHOR", PERSON, LEVEL_HOST },
- { "redactor", "REDACTOR", PERSON, LEVEL_HOST },
- { "annotator", "ANNOTATOR", PERSON, LEVEL_HOST },
- { "commentator", "COMMENTATOR", PERSON, LEVEL_HOST },
- { "translator", "TRANSLATOR", PERSON, LEVEL_HOST },
- { "volume", "VOLUME", SIMPLE, LEVEL_HOST },
- { "part", "PART", SIMPLE, LEVEL_HOST },
- { "volumes", "NUMVOLUMES", SIMPLE, LEVEL_HOST },
-
- { "maintitle", "TITLE", TITLE, LEVEL_SERIES },
- { "mainsubtitle", "SUBTITLE", TITLE, LEVEL_SERIES },
- { "maintitleaddon", "TITLEADDON", TITLE, LEVEL_SERIES },
-
- { "series", "TITLE", SIMPLE, LEVEL_SERIES+1 }, /* WRONG */
-
- { "origlanguage", "LANGUAGE", SIMPLE, LEVEL_ORIG },
- { "origyear", "DATE:YEAR", SIMPLE, LEVEL_ORIG },
- { "origdate", "DATE", SIMPLE, LEVEL_ORIG },
- { "origtitle", "TITLE", SIMPLE, LEVEL_ORIG },
- { "origlocation", "ADDRESS", SIMPLE, LEVEL_ORIG },
- { "origpublisher", "PUBLISHER", SIMPLE, LEVEL_ORIG },
-
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_HOST },
- { "location", "ADDRESS", SIMPLE, LEVEL_HOST },
- { "isbn", "ISBN", SIMPLE, LEVEL_MAIN },
- { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN },
- { "pages", "PAGES", PAGES, LEVEL_MAIN }, /* WRONG */
- { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN },
- { "eprint", "", BT_EPRINT, LEVEL_MAIN },
- { "eprinttype", "", BT_EPRINT, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN },
- { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN },
- { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN },
- { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|INCOLLECTION", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:BIBUTILS|collection", ALWAYS, LEVEL_HOST }
-};
-
-/* inproceedings */
-
-static lookups inproceedings[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "editor", "EDITOR", BLT_EDITOR, LEVEL_HOST },
- { "editora", "EDITOR", BLT_EDITOR, LEVEL_HOST },
- { "editorb", "EDITOR", BLT_EDITOR, LEVEL_HOST },
- { "editorc", "EDITOR", BLT_EDITOR, LEVEL_HOST },
- { "editortype", "", BLT_SKIP, LEVEL_HOST },
- { "editoratype", "", BLT_SKIP, LEVEL_HOST },
- { "editorbtype", "", BLT_SKIP, LEVEL_HOST },
- { "editorctype", "", BLT_SKIP, LEVEL_HOST },
- { "director", "DIRECTOR", PERSON, LEVEL_HOST },
- { "producer", "PRODUCER", PERSON, LEVEL_HOST },
- { "execproducer", "PRODUCER", PERSON, LEVEL_HOST },
- { "writer", "AUTHOR", PERSON, LEVEL_HOST },
- { "redactor", "REDACTOR", PERSON, LEVEL_HOST },
- { "annotator", "ANNOTATOR", PERSON, LEVEL_HOST },
- { "commentator", "COMMENTATOR", PERSON, LEVEL_HOST },
- { "translator", "TRANSLATOR", PERSON, LEVEL_HOST },
- { "eventtitle", "EVENT:CONF", SIMPLE, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/
- { "introduction", "INTROAUTHOR", PERSON, LEVEL_HOST },
- { "foreword", "INTROAUTHOR", PERSON, LEVEL_HOST },
- { "afterword", "AFTERAUTHOR", PERSON, LEVEL_HOST },
- { "title", "TITLE", TITLE, LEVEL_MAIN },
- { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN },
- { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN },
- { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN },
-
- { "booktitle", "TITLE", TITLE, LEVEL_HOST },
- { "booksubtitle", "SUBTITLE", TITLE, LEVEL_HOST },
- { "booktitleaddon", "TITLEADDON", TITLE, LEVEL_HOST },
-
- { "maintitle", "TITLE", TITLE, LEVEL_SERIES },
- { "mainsubtitle", "SUBTITLE", TITLE, LEVEL_SERIES },
- { "maintitleaddon", "TITLEADDON", TITLE, LEVEL_SERIES },
-
- { "series", "TITLE", SIMPLE, LEVEL_SERIES+1 },
-
- { "venue", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "organization", "ORGANIZER:CORP", SIMPLE, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "origlanguage", "LANGUAGE", SIMPLE, LEVEL_ORIG },
- { "origdate", "DATE", SIMPLE, LEVEL_ORIG },
- { "origyear", "DATE:YEAR", SIMPLE, LEVEL_ORIG },
- { "origtitle", "TITLE", SIMPLE, LEVEL_ORIG },
- { "origlocation", "ADDRESS", SIMPLE, LEVEL_ORIG },
- { "origpublisher", "PUBLISHER", SIMPLE, LEVEL_ORIG },
- { "volume", "VOLUME", SIMPLE, LEVEL_HOST },
- { "part", "PART", SIMPLE, LEVEL_HOST },
- { "edition", "EDITION", SIMPLE, LEVEL_MAIN },
- { "volumes", "NUMVOLUMES", SIMPLE, LEVEL_HOST },
- { "number", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_HOST },
- { "location", "ADDRESS", SIMPLE, LEVEL_HOST },
- { "isbn", "ISBN", SIMPLE, LEVEL_MAIN },
- { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN },
- { "pages", "PAGES", PAGES, LEVEL_MAIN }, /* WRONG */
- { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN },
- { "eprint", "", BT_EPRINT, LEVEL_MAIN },
- { "eprinttype", "", BT_EPRINT, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN },
- { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN },
- { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN },
- { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|INPROCEEDINGS", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|conference publication", ALWAYS, LEVEL_HOST }
-};
-
-static lookups manual[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "editor", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editora", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editorb", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editorc", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editortype", "", BLT_SKIP, LEVEL_MAIN },
- { "editoratype", "", BLT_SKIP, LEVEL_MAIN },
- { "editorbtype", "", BLT_SKIP, LEVEL_MAIN },
- { "editorctype", "", BLT_SKIP, LEVEL_MAIN },
- { "director", "DIRECTOR", PERSON, LEVEL_MAIN },
- { "producer", "PRODUCER", PERSON, LEVEL_MAIN },
- { "execproducer", "PRODUCER", PERSON, LEVEL_MAIN },
- { "writer", "AUTHOR", PERSON, LEVEL_MAIN },
- { "redactor", "REDACTOR", PERSON, LEVEL_MAIN },
- { "annotator", "ANNOTATOR", PERSON, LEVEL_MAIN },
- { "commentator", "COMMENTATOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/
- { "introduction", "INTROAUTHOR", PERSON, LEVEL_MAIN },
- { "foreword", "INTROAUTHOR", PERSON, LEVEL_MAIN },
- { "afterword", "AFTERAUTHOR", PERSON, LEVEL_MAIN },
- { "title", "TITLE", TITLE, LEVEL_MAIN },
- { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN },
- { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN },
- { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "edition", "EDITION", SIMPLE, LEVEL_MAIN },
- { "version", "EDITION", SIMPLE, LEVEL_MAIN },
- { "type", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "series", "TITLE", SIMPLE, LEVEL_HOST },
- { "number", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "organization", "ORGANIZER:CORP", SIMPLE, LEVEL_MAIN },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "location", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "isbn", "ISBN", SIMPLE, LEVEL_MAIN },
- { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN },
- { "pages", "PAGES", PAGES, LEVEL_MAIN },
- { "pagetotal", "PAGES:TOTAL", SIMPLE, LEVEL_MAIN },
- { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN },
- { "eprint", "", BT_EPRINT, LEVEL_MAIN },
- { "eprinttype", "", BT_EPRINT, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN },
- { "urlday", "?????????", SIMPLE, LEVEL_MAIN },
- { "urlmonth", "?????????", SIMPLE, LEVEL_MAIN },
- { "urlyear", "?????????", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|REPORT", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|instruction", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups misc[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "editor", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editora", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editorb", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editorc", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editortype", "", BLT_SKIP, LEVEL_MAIN },
- { "editoratype", "", BLT_SKIP, LEVEL_MAIN },
- { "editorbtype", "", BLT_SKIP, LEVEL_MAIN },
- { "editorctype", "", BLT_SKIP, LEVEL_MAIN },
- { "director", "DIRECTOR", PERSON, LEVEL_MAIN },
- { "producer", "PRODUCER", PERSON, LEVEL_MAIN },
- { "execproducer", "PRODUCER", PERSON, LEVEL_MAIN },
- { "writer", "AUTHOR", PERSON, LEVEL_MAIN },
- { "title", "TITLE", TITLE, LEVEL_MAIN },
- { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN },
- { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN },
- { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "version", "EDITION", SIMPLE, LEVEL_MAIN },
- { "type", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "organization", "ORGANIZER:CORP", SIMPLE, LEVEL_MAIN },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "location", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN },
- { "eprint", "", BT_EPRINT, LEVEL_MAIN },
- { "eprinttype", "", BT_EPRINT, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN },
- { "urlday", "?????????", SIMPLE, LEVEL_MAIN },
- { "urlmonth", "?????????", SIMPLE, LEVEL_MAIN },
- { "urlyear", "?????????", SIMPLE, LEVEL_MAIN },
- { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|MISC", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:BIBUTILS|miscellaneous", ALWAYS, LEVEL_MAIN },
-};
-
-static lookups online[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "editor", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editora", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editorb", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editorc", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editortype", "", BLT_SKIP, LEVEL_MAIN },
- { "editoratype", "", BLT_SKIP, LEVEL_MAIN },
- { "editorbtype", "", BLT_SKIP, LEVEL_MAIN },
- { "editorctype", "", BLT_SKIP, LEVEL_MAIN },
- { "director", "DIRECTOR", PERSON, LEVEL_MAIN },
- { "producer", "PRODUCER", PERSON, LEVEL_MAIN },
- { "execproducer", "PRODUCER", PERSON, LEVEL_MAIN },
- { "writer", "AUTHOR", PERSON, LEVEL_MAIN },
- { "title", "TITLE", TITLE, LEVEL_MAIN },
- { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN },
- { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN },
- { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN },
- { "date", "DATE", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "version", "EDITION", SIMPLE, LEVEL_MAIN },
- { "type", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "organization", "ORGANIZER:CORP", SIMPLE, LEVEL_MAIN },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "location", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN },
- { "eprint", "", BT_EPRINT, LEVEL_MAIN },
- { "eprinttype", "", BT_EPRINT, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN },
- { "urlday", "?????????", SIMPLE, LEVEL_MAIN },
- { "urlmonth", "?????????", SIMPLE, LEVEL_MAIN },
- { "urlyear", "?????????", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "", "RESOURCE|software, multimedia", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|web page", ALWAYS, LEVEL_MAIN },
-};
-
-static lookups patent[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "holder", "ASSIGNEE", PERSON, LEVEL_MAIN },
- { "title", "TITLE", TITLE, LEVEL_MAIN },
- { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN },
- { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN },
- { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN },
- { "date", "DATE", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "version", "EDITION", SIMPLE, LEVEL_MAIN },
- { "type", "GENRE:UKNOWN", GENRE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "organization", "ORGANIZER:CORP", SIMPLE, LEVEL_MAIN },
- { "location", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "number", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN },
- { "urlday", "?????????", SIMPLE, LEVEL_MAIN },
- { "urlmonth", "?????????", SIMPLE, LEVEL_MAIN },
- { "urlyear", "?????????", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN },
- { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|PATENT", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|patent", ALWAYS, LEVEL_MAIN },
-};
-
-/*
- * An entire issue of a periodical
- *
- * "The title of the periodical is given in the title field. If the issue has
- * its own title in addition to the main title of the periodical, it goes in
- * the issuetitle field. The editor is omissible..."
- */
-static lookups periodical[] = {
- { "editor", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editora", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editorb", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editorc", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editortype", "", BLT_SKIP, LEVEL_MAIN },
- { "editoratype", "", BLT_SKIP, LEVEL_MAIN },
- { "editorbtype", "", BLT_SKIP, LEVEL_MAIN },
- { "editorctype", "", BLT_SKIP, LEVEL_MAIN },
- { "director", "DIRECTOR", PERSON, LEVEL_MAIN },
- { "producer", "PRODUCER", PERSON, LEVEL_MAIN },
- { "execproducer", "PRODUCER", PERSON, LEVEL_MAIN },
- { "writer", "AUTHOR", PERSON, LEVEL_MAIN },
- { "title", "TITLE", TITLE, LEVEL_HOST },
- { "subtitle", "SUBTITLE", TITLE, LEVEL_HOST },
- { "titleaddon", "TITLEADDON", TITLE, LEVEL_HOST },
- { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_HOST },
- { "issuetitle", "TITLE", TITLE, LEVEL_MAIN },
- { "issuesubtitle", "SUBTITLE", TITLE, LEVEL_MAIN },
- { "issuetitleaddon", "TITLEADDON", TITLE, LEVEL_MAIN },
- { "series", "TITLE", SIMPLE, LEVEL_SERIES },
- { "volume", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "number", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "issue", "ISSUE", SIMPLE, LEVEL_MAIN },
- { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/
- { "day", "PARTDATE:DAY", SIMPLE, LEVEL_MAIN },
- { "month", "PARTDATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "year", "PARTDATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "pages", "PAGES", PAGES, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "issn", "ISSN", SIMPLE, LEVEL_HOST },
- { "coden", "CODEN", SIMPLE, LEVEL_HOST },
- { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN },
- { "eprint", "", BT_EPRINT, LEVEL_MAIN },
- { "eprinttype", "", BT_EPRINT, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN },
- { "urlday", "?????", SIMPLE, LEVEL_MAIN }, /* WRONG */
- { "urlmonth", "?????", SIMPLE, LEVEL_MAIN }, /* WRONG */
- { "urlyear", "?????", SIMPLE, LEVEL_MAIN }, /* WRONG */
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|issue", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|periodical", ALWAYS, LEVEL_HOST }
-};
-
-static lookups proceedings[] = {
- { "editor", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editora", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editorb", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editorc", "EDITOR", BLT_EDITOR, LEVEL_MAIN },
- { "editortype", "", BLT_SKIP, LEVEL_MAIN },
- { "editoratype", "", BLT_SKIP, LEVEL_MAIN },
- { "editorbtype", "", BLT_SKIP, LEVEL_MAIN },
- { "editorctype", "", BLT_SKIP, LEVEL_MAIN },
- { "director", "DIRECTOR", PERSON, LEVEL_MAIN },
- { "producer", "PRODUCER", PERSON, LEVEL_MAIN },
- { "execproducer", "PRODUCER", PERSON, LEVEL_MAIN },
- { "writer", "AUTHOR", PERSON, LEVEL_MAIN },
- { "redactor", "REDACTOR", PERSON, LEVEL_MAIN },
- { "annotator", "ANNOTATOR", PERSON, LEVEL_MAIN },
- { "commentator", "COMMENTATOR", PERSON, LEVEL_MAIN },
- { "translator", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "eventtitle", "EVENT:CONF", SIMPLE, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/
- { "introduction", "INTROAUTHOR", PERSON, LEVEL_MAIN },
- { "foreword", "INTROAUTHOR", PERSON, LEVEL_MAIN },
- { "afterword", "AFTERAUTHOR", PERSON, LEVEL_MAIN },
- { "title", "TITLE", TITLE, LEVEL_MAIN },
- { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN },
- { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN },
- { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN },
- { "maintitle", "TITLE", TITLE, LEVEL_HOST },
- { "mainsubtitle", "SUBTITLE", TITLE, LEVEL_HOST },
- { "maintitleaddon", "TITLEADDON", TITLE, LEVEL_HOST },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "origlanguage", "LANGUAGE", SIMPLE, LEVEL_ORIG },
- { "origdate", "DATE", SIMPLE, LEVEL_ORIG },
- { "origyear", "DATE:YEAR", SIMPLE, LEVEL_ORIG },
- { "origtitle", "TITLE", SIMPLE, LEVEL_ORIG },
- { "origlocation", "ADDRESS", SIMPLE, LEVEL_ORIG },
- { "origpublisher", "PUBLISHER", SIMPLE, LEVEL_ORIG },
- { "volume", "VOLUME", SIMPLE, LEVEL_HOST },
- { "part", "PART", SIMPLE, LEVEL_HOST },
- { "edition", "EDITION", SIMPLE, LEVEL_MAIN },
- { "volumes", "NUMVOLUMES", SIMPLE, LEVEL_HOST },
- { "series", "TITLE", SIMPLE, LEVEL_SERIES },
- { "number", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "organization", "ORGANIZER:CORP", SIMPLE, LEVEL_MAIN },
- { "publisher", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "location", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "isbn", "ISBN", SIMPLE, LEVEL_MAIN },
- { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN },
- { "pages", "PAGES", SIMPLE, LEVEL_MAIN },
- { "pagetotal", "PAGES:TOTAL", SIMPLE, LEVEL_MAIN },
- { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN },
- { "eprint", "", BT_EPRINT, LEVEL_MAIN },
- { "eprinttype", "", BT_EPRINT, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN },
- { "urlday", "?????????", SIMPLE, LEVEL_MAIN },
- { "urlmonth", "?????????", SIMPLE, LEVEL_MAIN },
- { "urlyear", "?????????", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|BOOK", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|conference publication", ALWAYS, LEVEL_MAIN }
-};
-
-/* Technical reports */
-static lookups report[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "title", "TITLE", TITLE, LEVEL_MAIN },
- { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN },
- { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN },
- { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN },
- { "series", "TITLE", TITLE, LEVEL_HOST },
- { "type", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "institution", "SPONSOR:ASIS", SIMPLE, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "number", "REPORTNUMBER", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "version", "EDITION", SIMPLE, LEVEL_MAIN },
- { "location", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "isrn", "ISRN", SIMPLE, LEVEL_MAIN },
- { "chapter", "CHAPTER", SIMPLE, LEVEL_MAIN },
- { "pages", "PAGES", SIMPLE, LEVEL_MAIN },
- { "pagetotal", "PAGES:TOTAL", SIMPLE, LEVEL_MAIN },
- { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN },
- { "eprint", "", BT_EPRINT, LEVEL_MAIN },
- { "eprinttype", "", BT_EPRINT, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN },
- { "urlday", "?????????", SIMPLE, LEVEL_MAIN },
- { "urlmonth", "?????????", SIMPLE, LEVEL_MAIN },
- { "urlyear", "?????????", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|REPORT", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|technical report", ALWAYS, LEVEL_MAIN },
-};
-
-/* Unpublished */
-static lookups unpublished[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "title", "TITLE", TITLE, LEVEL_MAIN },
- { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN },
- { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN },
- { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "date", "DATE", SIMPLE, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "urlday", "?????????", SIMPLE, LEVEL_MAIN },
- { "urlmonth", "?????????", SIMPLE, LEVEL_MAIN },
- { "urlyear", "?????????", SIMPLE, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "addendum", "ADDENDUM", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN },
- { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|BOOK", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:BIBUTILS|unpublished", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups thesis[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "title", "TITLE", TITLE, LEVEL_MAIN },
- { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN },
- { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN },
- { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/
- { "type", "", BLT_THESIS_TYPE, LEVEL_MAIN },
- { "institution", "DEGREEGRANTOR:ASIS", SIMPLE, LEVEL_MAIN },
- { "school", "DEGREEGRANTOR:ASIS", BLT_SCHOOL, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN },
- { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN },
- { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN },
- { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "location", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN },
- { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|THESIS", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|thesis", ALWAYS, LEVEL_MAIN },
-};
-
-static lookups phdthesis[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "title", "TITLE", TITLE, LEVEL_MAIN },
- { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN },
- { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN },
- { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/
- { "type", "", BLT_THESIS_TYPE, LEVEL_MAIN },
- { "institution", "DEGREEGRANTOR:ASIS", SIMPLE, LEVEL_MAIN },
- { "school", "DEGREEGRANTOR:ASIS", BLT_SCHOOL, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN },
- { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN },
- { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN },
- { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "location", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN },
- { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|THESIS", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|thesis", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:BIBUTILS|Ph.D. thesis",DEFAULT, LEVEL_MAIN },
-};
-
-static lookups mastersthesis[] = {
- { "author", "AUTHOR", PERSON, LEVEL_MAIN },
- { "title", "TITLE", TITLE, LEVEL_MAIN },
- { "subtitle", "SUBTITLE", TITLE, LEVEL_MAIN },
- { "titleaddon", "TITLEADDON", TITLE, LEVEL_MAIN },
- { "shorttitle", "SHORTTITLE", SIMPLE, LEVEL_MAIN },
- { "year", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "month", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "day", "DATE:DAY", SIMPLE, LEVEL_MAIN },
- { "date", "DATE", SIMPLE, LEVEL_MAIN }, /*WRONG*/
- { "type", "", BLT_THESIS_TYPE, LEVEL_MAIN },
- { "institution", "DEGREEGRANTOR:ASIS", SIMPLE, LEVEL_MAIN },
- { "school", "DEGREEGRANTOR:ASIS", BLT_SCHOOL, LEVEL_MAIN },
- { "doi", "DOI", SIMPLE, LEVEL_MAIN },
- { "howpublished", "", HOWPUBLISHED, LEVEL_MAIN },
- { "url", "", URL, LEVEL_MAIN },
- { "urldate", "URLDATE", SIMPLE, LEVEL_MAIN },
- { "urlday", "?urlday?", SIMPLE, LEVEL_MAIN },
- { "urlmonth", "?urlmonth?", SIMPLE, LEVEL_MAIN },
- { "urlyear", "?urlyear?", SIMPLE, LEVEL_MAIN },
- { "language", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "location", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "note", "NOTES", NOTES, LEVEL_MAIN },
- { "annote", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "annotation", "ANNOTATION", SIMPLE, LEVEL_MAIN },
- { "address", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "hyphenation", "LANGCATALOG", SIMPLE, LEVEL_MAIN },
- { "pubstate", "PUBSTATE", SIMPLE, LEVEL_MAIN },
- { "refnum", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "", "INTERNAL_TYPE|THESIS", ALWAYS, LEVEL_MAIN },
- { "", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:MARC|thesis", ALWAYS, LEVEL_MAIN },
- { "", "GENRE:BIBUTILS|Masters thesis", DEFAULT, LEVEL_MAIN },
-};
-
-#define ORIG(a) ( &(a[0]) )
-#define SIZE(a) ( sizeof( a ) / sizeof( lookups ) )
-#define REFTYPE(a,b) { a, ORIG(b), SIZE(b) }
-
-variants biblatex_all[] = {
- REFTYPE( "article", article ),
- REFTYPE( "suppperiodical", article ),
- REFTYPE( "booklet", booklet ),
- REFTYPE( "book", book ),
- REFTYPE( "collection", collection ),
- REFTYPE( "reference", collection ),
- REFTYPE( "mvreference", collection ),
- REFTYPE( "inbook", inbook ),
- REFTYPE( "suppbook", inbook ),
- REFTYPE( "incollection", incollection ),
- REFTYPE( "inreference", incollection ),
- REFTYPE( "suppcollection", incollection ),
- REFTYPE( "inproceedings", inproceedings ),
- REFTYPE( "conference", inproceedings ), /* legacy */
- REFTYPE( "manual", manual ),
- REFTYPE( "misc", misc ),
- REFTYPE( "online", online ),
- REFTYPE( "electronic", online ), /* legacy */
- REFTYPE( "www", online ), /* jurabib compatibility */
- REFTYPE( "patent", patent ),
- REFTYPE( "periodical", periodical ),
- REFTYPE( "proceedings", proceedings ),
- REFTYPE( "mvproceedings", proceedings ),
- REFTYPE( "report", report ),
- REFTYPE( "techreport", report ),
-/* REFTYPE( "set", set ), */
- REFTYPE( "thesis", thesis ),
- REFTYPE( "phdthesis", phdthesis ), /* legacy */
- REFTYPE( "mastersthesis", mastersthesis ), /* legacy */
- REFTYPE( "unpublished", unpublished ),
-};
-
-int biblatex_nall = sizeof( biblatex_all ) / sizeof( variants );
diff --git a/support/texlab/crates/bibutils_sys/src/bu_auth.c b/support/texlab/crates/bibutils_sys/src/bu_auth.c
deleted file mode 100644
index f0c9194ca6..0000000000
--- a/support/texlab/crates/bibutils_sys/src/bu_auth.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * bu_auth.c
- *
- * Copyright (c) Chris Putnam 2017-2019
- *
- * Source code released under the GPL version 2
- */
-#include <string.h>
-#include "bu_auth.h"
-#include "msvc_fix.h"
-
-const char *bu_genre[] = {
- "academic journal",
- "airtel",
- "collection",
- "communication",
- "Diploma thesis",
- "Doctoral thesis",
- "electronic",
- "e-mail communication"
- "Habilitation thesis",
- "handwritten note",
- "hearing",
- "journal article",
- "Licentiate thesis",
- "magazine",
- "magazine article",
- "manuscript",
- "Masters thesis",
- "memo",
- "miscellaneous",
- "newspaper article",
- "pamphlet",
- "Ph.D. thesis",
- "press release",
- "teletype",
- "television broadcast",
- "unpublished"
-};
-int nbu_genre = sizeof( bu_genre ) / sizeof( const char *);
-
-static int
-position_in_list( const char *list[], int nlist, const char *query )
-{
- int i;
- for ( i=0; i<nlist; ++i ) {
- if ( !strcasecmp( query, list[i] ) ) return i;
- }
- return -1;
-}
-
-int
-bu_findgenre( const char *query )
-{
- return position_in_list( bu_genre, nbu_genre, query );
-}
-
-int
-is_bu_genre( const char *query )
-{
- if ( bu_findgenre( query ) != -1 ) return 1;
- return 0;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/bu_auth.h b/support/texlab/crates/bibutils_sys/src/bu_auth.h
deleted file mode 100644
index d4053c0b5e..0000000000
--- a/support/texlab/crates/bibutils_sys/src/bu_auth.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * bu_auth.h
- *
- * Recognize added vocabulary for genre terms added by bibutils.
- *
- * Copyright (c) Chris Putnam 2017-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef BU_AUTH_H
-#define BU_AUTH_H
-
-int bu_findgenre( const char *query );
-int is_bu_genre( const char *query );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/charsets.c b/support/texlab/crates/bibutils_sys/src/charsets.c
deleted file mode 100644
index 828d1b8a43..0000000000
--- a/support/texlab/crates/bibutils_sys/src/charsets.c
+++ /dev/null
@@ -1,34627 +0,0 @@
-/*
- * charsets.c
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "charsets.h"
-#include "msvc_fix.h"
-
-#define ARRAYSIZE( a ) ( sizeof(a) / sizeof(a[0]) )
-#define ARRAYSTART( a ) ( &(a[0]) )
-#define CHARSETARRAY( a ) ARRAYSTART( a ), ARRAYSIZE( a )
-
-#define CHARSET_NALIASES ( 7 )
-
-typedef struct convert_t {
- unsigned int index, unicode;
-} convert_t;
-
-typedef struct allcharconvert_t {
- char cmdname[15];
- char descriptname[200];
- char aliases[CHARSET_NALIASES][25];
- convert_t *table;
- int ntable;
-} allcharconvert_t;
-
-static convert_t adobeiso[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 305 },
- { 145, 768 },
- { 146, 769 },
- { 147, 770 },
- { 148, 771 },
- { 149, 772 },
- { 150, 774 },
- { 151, 775 },
- { 152, 776 },
- { 153, 153 },
- { 154, 778 },
- { 155, 807 },
- { 156, 156 },
- { 157, 779 },
- { 158, 808 },
- { 159, 780 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t adobestd[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 8260 },
- { 165, 165 },
- { 166, 402 },
- { 167, 167 },
- { 168, 164 },
- { 169, 169 },
- { 170, 8220 },
- { 171, 171 },
- { 172, 8249 },
- { 173, 8250 },
- { 174, 64257 },
- { 175, 64258 },
- { 176, 176 },
- { 177, 8211 },
- { 178, 8224 },
- { 179, 8225 },
- { 180, 183 },
- { 181, 181 },
- { 182, 182 },
- { 183, 8729 },
- { 184, 8218 },
- { 185, 8222 },
- { 186, 8221 },
- { 187, 187 },
- { 188, 8943 },
- { 189, 8240 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 768 },
- { 194, 180 },
- { 195, 770 },
- { 196, 771 },
- { 197, 175 },
- { 198, 728 },
- { 199, 729 },
- { 200, 168 },
- { 201, 201 },
- { 202, 176 },
- { 203, 184 },
- { 204, 204 },
- { 205, 733 },
- { 206, 731 },
- { 207, 711 },
- { 208, 8212 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 198 },
- { 226, 226 },
- { 227, 170 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 321 },
- { 233, 216 },
- { 234, 338 },
- { 235, 186 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 230 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 305 },
- { 246, 246 },
- { 247, 247 },
- { 248, 322 },
- { 249, 248 },
- { 250, 339 },
- { 251, 223 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 39, 8216 },
- { 39, 8217 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 225 },
- { 97, 227 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 245 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t adobesym[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 8242 },
- { 163, 8804 },
- { 164, 8725 },
- { 165, 8734 },
- { 166, 402 },
- { 167, 9827 },
- { 168, 9830 },
- { 169, 9829 },
- { 170, 9824 },
- { 171, 8596 },
- { 172, 8592 },
- { 173, 8593 },
- { 174, 8594 },
- { 175, 8595 },
- { 176, 176 },
- { 177, 177 },
- { 178, 8243 },
- { 179, 8805 },
- { 180, 215 },
- { 181, 8733 },
- { 182, 8706 },
- { 183, 8729 },
- { 184, 247 },
- { 185, 8800 },
- { 186, 8801 },
- { 187, 8776 },
- { 188, 8943 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 8709 },
- { 199, 8745 },
- { 200, 8746 },
- { 201, 8835 },
- { 202, 8839 },
- { 203, 203 },
- { 204, 8834 },
- { 205, 8838 },
- { 206, 8712 },
- { 207, 207 },
- { 208, 8736 },
- { 209, 8711 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 8719 },
- { 214, 8730 },
- { 215, 8901 },
- { 216, 172 },
- { 217, 8743 },
- { 218, 8744 },
- { 219, 8660 },
- { 220, 8656 },
- { 221, 8657 },
- { 222, 8658 },
- { 223, 8659 },
- { 224, 9674 },
- { 225, 9001 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 8721 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 9002 },
- { 242, 8747 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 220 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t applecro[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 196 },
- { 129, 197 },
- { 130, 199 },
- { 131, 201 },
- { 132, 209 },
- { 133, 214 },
- { 134, 220 },
- { 135, 225 },
- { 136, 224 },
- { 137, 226 },
- { 138, 228 },
- { 139, 227 },
- { 140, 229 },
- { 141, 231 },
- { 142, 233 },
- { 143, 232 },
- { 144, 234 },
- { 145, 235 },
- { 146, 237 },
- { 147, 236 },
- { 148, 238 },
- { 149, 239 },
- { 150, 241 },
- { 151, 243 },
- { 152, 242 },
- { 153, 244 },
- { 154, 246 },
- { 155, 245 },
- { 156, 250 },
- { 157, 249 },
- { 158, 251 },
- { 159, 252 },
- { 160, 8224 },
- { 161, 176 },
- { 162, 162 },
- { 163, 163 },
- { 164, 167 },
- { 165, 8729 },
- { 166, 182 },
- { 167, 223 },
- { 168, 174 },
- { 169, 352 },
- { 170, 8482 },
- { 171, 180 },
- { 172, 168 },
- { 173, 8800 },
- { 174, 381 },
- { 175, 216 },
- { 176, 8734 },
- { 177, 177 },
- { 178, 8804 },
- { 179, 8805 },
- { 180, 916 },
- { 181, 181 },
- { 182, 8706 },
- { 183, 8721 },
- { 184, 8719 },
- { 185, 353 },
- { 186, 8747 },
- { 187, 170 },
- { 188, 186 },
- { 189, 937 },
- { 190, 382 },
- { 191, 248 },
- { 192, 191 },
- { 193, 161 },
- { 194, 172 },
- { 195, 8730 },
- { 196, 402 },
- { 197, 8776 },
- { 198, 262 },
- { 199, 171 },
- { 200, 268 },
- { 201, 8943 },
- { 202, 160 },
- { 203, 192 },
- { 204, 195 },
- { 205, 213 },
- { 206, 338 },
- { 207, 339 },
- { 208, 272 },
- { 209, 8212 },
- { 210, 8220 },
- { 211, 8221 },
- { 212, 8216 },
- { 213, 8217 },
- { 214, 247 },
- { 215, 9674 },
- { 216, 65534 },
- { 217, 169 },
- { 218, 8260 },
- { 219, 164 },
- { 220, 8249 },
- { 221, 8250 },
- { 222, 198 },
- { 223, 187 },
- { 224, 8211 },
- { 225, 183 },
- { 226, 8218 },
- { 227, 8222 },
- { 228, 8240 },
- { 229, 194 },
- { 230, 263 },
- { 231, 193 },
- { 232, 269 },
- { 233, 200 },
- { 234, 205 },
- { 235, 206 },
- { 236, 207 },
- { 237, 204 },
- { 238, 211 },
- { 239, 212 },
- { 240, 273 },
- { 241, 210 },
- { 242, 218 },
- { 243, 219 },
- { 244, 217 },
- { 245, 305 },
- { 246, 770 },
- { 247, 771 },
- { 248, 175 },
- { 249, 960 },
- { 250, 203 },
- { 251, 730 },
- { 252, 184 },
- { 253, 202 },
- { 254, 230 },
- { 255, 711 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 264 },
- { 67, 266 },
- { 99, 265 },
- { 99, 267 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 122, 378 },
- { 122, 380 },
-};
-static convert_t applecyr[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 1040 },
- { 129, 1041 },
- { 130, 1042 },
- { 131, 1043 },
- { 132, 1044 },
- { 133, 1045 },
- { 134, 1046 },
- { 135, 1047 },
- { 136, 1048 },
- { 137, 1049 },
- { 138, 1050 },
- { 139, 1051 },
- { 140, 1052 },
- { 141, 1053 },
- { 142, 1054 },
- { 143, 1055 },
- { 144, 1056 },
- { 145, 1057 },
- { 146, 1058 },
- { 147, 1059 },
- { 148, 1060 },
- { 149, 1061 },
- { 150, 1062 },
- { 151, 1063 },
- { 152, 1064 },
- { 153, 1065 },
- { 154, 1066 },
- { 155, 1067 },
- { 156, 1068 },
- { 157, 1069 },
- { 158, 1070 },
- { 159, 1071 },
- { 160, 8224 },
- { 161, 176 },
- { 162, 162 },
- { 163, 163 },
- { 164, 167 },
- { 165, 8729 },
- { 166, 182 },
- { 167, 1030 },
- { 168, 174 },
- { 169, 169 },
- { 170, 8482 },
- { 171, 1026 },
- { 172, 1106 },
- { 173, 8800 },
- { 174, 1027 },
- { 175, 1107 },
- { 176, 8734 },
- { 177, 177 },
- { 178, 8804 },
- { 179, 8805 },
- { 180, 1110 },
- { 181, 181 },
- { 182, 8706 },
- { 183, 1032 },
- { 184, 1028 },
- { 185, 1108 },
- { 186, 1031 },
- { 187, 1111 },
- { 188, 1033 },
- { 189, 1113 },
- { 190, 1034 },
- { 191, 1114 },
- { 192, 1112 },
- { 193, 1029 },
- { 194, 172 },
- { 195, 8730 },
- { 196, 402 },
- { 197, 8776 },
- { 198, 916 },
- { 199, 171 },
- { 200, 187 },
- { 201, 8943 },
- { 202, 160 },
- { 203, 1035 },
- { 204, 1115 },
- { 205, 1036 },
- { 206, 1116 },
- { 207, 1109 },
- { 208, 8211 },
- { 209, 8212 },
- { 210, 8220 },
- { 211, 8221 },
- { 212, 8216 },
- { 213, 8217 },
- { 214, 247 },
- { 215, 8222 },
- { 216, 1038 },
- { 217, 1118 },
- { 218, 1039 },
- { 219, 1119 },
- { 220, 8470 },
- { 221, 1025 },
- { 222, 1105 },
- { 223, 1103 },
- { 224, 1072 },
- { 225, 1073 },
- { 226, 1074 },
- { 227, 1075 },
- { 228, 1076 },
- { 229, 1077 },
- { 230, 1078 },
- { 231, 1079 },
- { 232, 1080 },
- { 233, 1081 },
- { 234, 1082 },
- { 235, 1083 },
- { 236, 1084 },
- { 237, 1085 },
- { 238, 1086 },
- { 239, 1087 },
- { 240, 1088 },
- { 241, 1089 },
- { 242, 1090 },
- { 243, 1091 },
- { 244, 1092 },
- { 245, 1093 },
- { 246, 1094 },
- { 247, 1095 },
- { 248, 1096 },
- { 249, 1097 },
- { 250, 1098 },
- { 251, 1099 },
- { 252, 1100 },
- { 253, 1101 },
- { 254, 1102 },
- { 255, 164 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 244 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 220 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 252 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t applegk2[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 196 },
- { 129, 913 },
- { 130, 914 },
- { 131, 915 },
- { 132, 916 },
- { 133, 214 },
- { 134, 220 },
- { 135, 917 },
- { 136, 224 },
- { 137, 226 },
- { 138, 228 },
- { 139, 918 },
- { 140, 919 },
- { 141, 231 },
- { 142, 233 },
- { 143, 232 },
- { 144, 234 },
- { 145, 235 },
- { 146, 163 },
- { 147, 8482 },
- { 148, 238 },
- { 149, 239 },
- { 150, 8729 },
- { 151, 920 },
- { 152, 921 },
- { 153, 244 },
- { 154, 246 },
- { 155, 155 },
- { 156, 922 },
- { 157, 249 },
- { 158, 251 },
- { 159, 252 },
- { 160, 923 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 223 },
- { 168, 174 },
- { 169, 169 },
- { 170, 170 },
- { 171, 938 },
- { 172, 167 },
- { 173, 8800 },
- { 174, 924 },
- { 175, 903 },
- { 176, 925 },
- { 177, 177 },
- { 178, 8804 },
- { 179, 8805 },
- { 180, 926 },
- { 181, 927 },
- { 182, 928 },
- { 183, 929 },
- { 184, 931 },
- { 185, 932 },
- { 186, 933 },
- { 187, 939 },
- { 188, 934 },
- { 189, 935 },
- { 190, 936 },
- { 191, 937 },
- { 192, 940 },
- { 193, 185 },
- { 194, 172 },
- { 195, 178 },
- { 196, 179 },
- { 197, 168 },
- { 198, 901 },
- { 199, 171 },
- { 200, 187 },
- { 201, 8943 },
- { 202, 160 },
- { 203, 166 },
- { 204, 189 },
- { 205, 902 },
- { 206, 904 },
- { 207, 176 },
- { 208, 8211 },
- { 209, 8212 },
- { 210, 8220 },
- { 211, 8221 },
- { 212, 8216 },
- { 213, 8217 },
- { 214, 900 },
- { 215, 905 },
- { 216, 906 },
- { 217, 908 },
- { 218, 910 },
- { 219, 941 },
- { 220, 942 },
- { 221, 943 },
- { 222, 972 },
- { 223, 911 },
- { 224, 973 },
- { 225, 945 },
- { 226, 946 },
- { 227, 968 },
- { 228, 948 },
- { 229, 949 },
- { 230, 966 },
- { 231, 947 },
- { 232, 951 },
- { 233, 953 },
- { 234, 958 },
- { 235, 954 },
- { 236, 955 },
- { 237, 956 },
- { 238, 957 },
- { 239, 959 },
- { 240, 960 },
- { 241, 974 },
- { 242, 961 },
- { 243, 963 },
- { 244, 964 },
- { 245, 952 },
- { 246, 969 },
- { 247, 962 },
- { 248, 967 },
- { 249, 965 },
- { 250, 950 },
- { 251, 970 },
- { 252, 971 },
- { 253, 912 },
- { 254, 944 },
- { 255, 8240 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 225 },
- { 97, 227 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 245 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 250 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t applegrk[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 900 },
- { 181, 901 },
- { 182, 902 },
- { 183, 183 },
- { 184, 904 },
- { 185, 905 },
- { 186, 906 },
- { 187, 187 },
- { 188, 908 },
- { 189, 189 },
- { 190, 910 },
- { 191, 911 },
- { 192, 912 },
- { 193, 913 },
- { 194, 914 },
- { 195, 915 },
- { 196, 916 },
- { 197, 917 },
- { 198, 918 },
- { 199, 919 },
- { 200, 920 },
- { 201, 921 },
- { 202, 922 },
- { 203, 923 },
- { 204, 924 },
- { 205, 925 },
- { 206, 926 },
- { 207, 927 },
- { 208, 928 },
- { 209, 929 },
- { 210, 210 },
- { 211, 931 },
- { 212, 932 },
- { 213, 933 },
- { 214, 934 },
- { 215, 935 },
- { 216, 936 },
- { 217, 937 },
- { 218, 938 },
- { 219, 939 },
- { 220, 940 },
- { 221, 941 },
- { 222, 942 },
- { 223, 943 },
- { 224, 944 },
- { 225, 945 },
- { 226, 946 },
- { 227, 947 },
- { 228, 948 },
- { 229, 949 },
- { 230, 950 },
- { 231, 951 },
- { 232, 952 },
- { 233, 953 },
- { 234, 954 },
- { 235, 955 },
- { 236, 956 },
- { 237, 957 },
- { 238, 958 },
- { 239, 959 },
- { 240, 960 },
- { 241, 961 },
- { 242, 962 },
- { 243, 963 },
- { 244, 964 },
- { 245, 965 },
- { 246, 966 },
- { 247, 967 },
- { 248, 968 },
- { 249, 969 },
- { 250, 970 },
- { 251, 971 },
- { 252, 972 },
- { 253, 973 },
- { 254, 974 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 244 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 220 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 252 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t macice[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 196 },
- { 129, 197 },
- { 130, 199 },
- { 131, 201 },
- { 132, 209 },
- { 133, 214 },
- { 134, 220 },
- { 135, 225 },
- { 136, 224 },
- { 137, 226 },
- { 138, 228 },
- { 139, 227 },
- { 140, 229 },
- { 141, 231 },
- { 142, 233 },
- { 143, 232 },
- { 144, 234 },
- { 145, 235 },
- { 146, 237 },
- { 147, 236 },
- { 148, 238 },
- { 149, 239 },
- { 150, 241 },
- { 151, 243 },
- { 152, 242 },
- { 153, 244 },
- { 154, 246 },
- { 155, 245 },
- { 156, 250 },
- { 157, 249 },
- { 158, 251 },
- { 159, 252 },
- { 160, 221 },
- { 161, 176 },
- { 162, 162 },
- { 163, 163 },
- { 164, 167 },
- { 165, 8729 },
- { 166, 182 },
- { 167, 223 },
- { 168, 174 },
- { 169, 169 },
- { 170, 8482 },
- { 171, 180 },
- { 172, 168 },
- { 173, 8800 },
- { 174, 198 },
- { 175, 216 },
- { 176, 8734 },
- { 177, 177 },
- { 178, 8804 },
- { 179, 8805 },
- { 180, 165 },
- { 181, 181 },
- { 182, 8706 },
- { 183, 8721 },
- { 184, 8719 },
- { 185, 960 },
- { 186, 8747 },
- { 187, 170 },
- { 188, 186 },
- { 189, 937 },
- { 190, 230 },
- { 191, 248 },
- { 192, 191 },
- { 193, 161 },
- { 194, 172 },
- { 195, 8730 },
- { 196, 402 },
- { 197, 8776 },
- { 198, 916 },
- { 199, 171 },
- { 200, 187 },
- { 201, 8943 },
- { 202, 160 },
- { 203, 192 },
- { 204, 195 },
- { 205, 213 },
- { 206, 338 },
- { 207, 339 },
- { 208, 8211 },
- { 209, 8212 },
- { 210, 8220 },
- { 211, 8221 },
- { 212, 8216 },
- { 213, 8217 },
- { 214, 247 },
- { 215, 9674 },
- { 216, 255 },
- { 217, 376 },
- { 218, 8260 },
- { 219, 164 },
- { 220, 208 },
- { 221, 240 },
- { 222, 222 },
- { 223, 254 },
- { 224, 253 },
- { 225, 183 },
- { 226, 8218 },
- { 227, 8222 },
- { 228, 8240 },
- { 229, 194 },
- { 230, 202 },
- { 231, 193 },
- { 232, 203 },
- { 233, 200 },
- { 234, 205 },
- { 235, 206 },
- { 236, 207 },
- { 237, 204 },
- { 238, 211 },
- { 239, 212 },
- { 240, 65534 },
- { 241, 210 },
- { 242, 218 },
- { 243, 219 },
- { 244, 217 },
- { 245, 305 },
- { 246, 770 },
- { 247, 771 },
- { 248, 175 },
- { 249, 728 },
- { 250, 729 },
- { 251, 730 },
- { 252, 184 },
- { 253, 733 },
- { 254, 731 },
- { 255, 711 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t macroman[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 196 },
- { 129, 197 },
- { 130, 199 },
- { 131, 201 },
- { 132, 209 },
- { 133, 214 },
- { 134, 220 },
- { 135, 225 },
- { 136, 224 },
- { 137, 226 },
- { 138, 228 },
- { 139, 227 },
- { 140, 229 },
- { 141, 231 },
- { 142, 233 },
- { 143, 232 },
- { 144, 234 },
- { 145, 235 },
- { 146, 237 },
- { 147, 236 },
- { 148, 238 },
- { 149, 239 },
- { 150, 241 },
- { 151, 243 },
- { 152, 242 },
- { 153, 244 },
- { 154, 246 },
- { 155, 245 },
- { 156, 250 },
- { 157, 249 },
- { 158, 251 },
- { 159, 252 },
- { 160, 8224 },
- { 161, 176 },
- { 162, 162 },
- { 163, 163 },
- { 164, 167 },
- { 165, 8729 },
- { 166, 182 },
- { 167, 223 },
- { 168, 174 },
- { 169, 169 },
- { 170, 8482 },
- { 171, 180 },
- { 172, 168 },
- { 173, 8800 },
- { 174, 198 },
- { 175, 216 },
- { 176, 8734 },
- { 177, 177 },
- { 178, 8804 },
- { 179, 8805 },
- { 180, 165 },
- { 181, 181 },
- { 182, 8706 },
- { 183, 8721 },
- { 184, 8719 },
- { 185, 960 },
- { 186, 8747 },
- { 187, 170 },
- { 188, 186 },
- { 189, 937 },
- { 190, 230 },
- { 191, 248 },
- { 192, 191 },
- { 193, 161 },
- { 194, 172 },
- { 195, 8730 },
- { 196, 402 },
- { 197, 8776 },
- { 198, 916 },
- { 199, 171 },
- { 200, 187 },
- { 201, 8943 },
- { 202, 160 },
- { 203, 192 },
- { 204, 195 },
- { 205, 213 },
- { 206, 338 },
- { 207, 339 },
- { 208, 8211 },
- { 209, 8212 },
- { 210, 8220 },
- { 211, 8221 },
- { 212, 8216 },
- { 213, 8217 },
- { 214, 247 },
- { 215, 9674 },
- { 216, 255 },
- { 217, 376 },
- { 218, 8260 },
- { 219, 164 },
- { 220, 8249 },
- { 221, 8250 },
- { 222, 64257 },
- { 223, 64258 },
- { 224, 8225 },
- { 225, 183 },
- { 226, 8218 },
- { 227, 8222 },
- { 228, 8240 },
- { 229, 194 },
- { 230, 202 },
- { 231, 193 },
- { 232, 203 },
- { 233, 200 },
- { 234, 205 },
- { 235, 206 },
- { 236, 207 },
- { 237, 204 },
- { 238, 211 },
- { 239, 212 },
- { 240, 240 },
- { 241, 210 },
- { 242, 218 },
- { 243, 219 },
- { 244, 217 },
- { 245, 305 },
- { 246, 770 },
- { 247, 771 },
- { 248, 175 },
- { 249, 728 },
- { 250, 729 },
- { 251, 730 },
- { 252, 184 },
- { 253, 733 },
- { 254, 731 },
- { 255, 711 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 121, 253 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t macromanian[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 196 },
- { 129, 197 },
- { 130, 199 },
- { 131, 201 },
- { 132, 209 },
- { 133, 214 },
- { 134, 220 },
- { 135, 225 },
- { 136, 224 },
- { 137, 226 },
- { 138, 228 },
- { 139, 227 },
- { 140, 229 },
- { 141, 231 },
- { 142, 233 },
- { 143, 232 },
- { 144, 234 },
- { 145, 235 },
- { 146, 237 },
- { 147, 236 },
- { 148, 238 },
- { 149, 239 },
- { 150, 241 },
- { 151, 243 },
- { 152, 242 },
- { 153, 244 },
- { 154, 246 },
- { 155, 245 },
- { 156, 250 },
- { 157, 249 },
- { 158, 251 },
- { 159, 252 },
- { 160, 8224 },
- { 161, 176 },
- { 162, 162 },
- { 163, 163 },
- { 164, 167 },
- { 165, 8729 },
- { 166, 182 },
- { 167, 223 },
- { 168, 174 },
- { 169, 169 },
- { 170, 8482 },
- { 171, 180 },
- { 172, 168 },
- { 173, 8800 },
- { 174, 258 },
- { 175, 350 },
- { 176, 8734 },
- { 177, 177 },
- { 178, 8804 },
- { 179, 8805 },
- { 180, 165 },
- { 181, 181 },
- { 182, 8706 },
- { 183, 8721 },
- { 184, 8719 },
- { 185, 960 },
- { 186, 8747 },
- { 187, 170 },
- { 188, 186 },
- { 189, 937 },
- { 190, 259 },
- { 191, 351 },
- { 192, 191 },
- { 193, 161 },
- { 194, 172 },
- { 195, 8730 },
- { 196, 402 },
- { 197, 8776 },
- { 198, 916 },
- { 199, 171 },
- { 200, 187 },
- { 201, 8943 },
- { 202, 160 },
- { 203, 192 },
- { 204, 195 },
- { 205, 213 },
- { 206, 338 },
- { 207, 339 },
- { 208, 8211 },
- { 209, 8212 },
- { 210, 8220 },
- { 211, 8221 },
- { 212, 8216 },
- { 213, 8217 },
- { 214, 247 },
- { 215, 9674 },
- { 216, 255 },
- { 217, 376 },
- { 218, 8260 },
- { 219, 164 },
- { 220, 8249 },
- { 221, 8250 },
- { 222, 354 },
- { 223, 355 },
- { 224, 8225 },
- { 225, 183 },
- { 226, 8218 },
- { 227, 8222 },
- { 228, 8240 },
- { 229, 194 },
- { 230, 202 },
- { 231, 193 },
- { 232, 203 },
- { 233, 200 },
- { 234, 205 },
- { 235, 206 },
- { 236, 207 },
- { 237, 204 },
- { 238, 211 },
- { 239, 212 },
- { 240, 65534 },
- { 241, 210 },
- { 242, 218 },
- { 243, 219 },
- { 244, 217 },
- { 245, 305 },
- { 246, 770 },
- { 247, 771 },
- { 248, 175 },
- { 249, 728 },
- { 250, 729 },
- { 251, 730 },
- { 252, 184 },
- { 253, 733 },
- { 254, 731 },
- { 255, 711 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 353 },
- { 84, 356 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 121, 253 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t macturkish[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 196 },
- { 129, 197 },
- { 130, 199 },
- { 131, 201 },
- { 132, 209 },
- { 133, 214 },
- { 134, 220 },
- { 135, 225 },
- { 136, 224 },
- { 137, 226 },
- { 138, 228 },
- { 139, 227 },
- { 140, 229 },
- { 141, 231 },
- { 142, 233 },
- { 143, 232 },
- { 144, 234 },
- { 145, 235 },
- { 146, 237 },
- { 147, 236 },
- { 148, 238 },
- { 149, 239 },
- { 150, 241 },
- { 151, 243 },
- { 152, 242 },
- { 153, 244 },
- { 154, 246 },
- { 155, 245 },
- { 156, 250 },
- { 157, 249 },
- { 158, 251 },
- { 159, 252 },
- { 160, 8224 },
- { 161, 176 },
- { 162, 162 },
- { 163, 163 },
- { 164, 167 },
- { 165, 8729 },
- { 166, 182 },
- { 167, 223 },
- { 168, 174 },
- { 169, 169 },
- { 170, 8482 },
- { 171, 180 },
- { 172, 168 },
- { 173, 8800 },
- { 174, 198 },
- { 175, 216 },
- { 176, 8734 },
- { 177, 177 },
- { 178, 8804 },
- { 179, 8805 },
- { 180, 165 },
- { 181, 181 },
- { 182, 8706 },
- { 183, 8721 },
- { 184, 8719 },
- { 185, 960 },
- { 186, 8747 },
- { 187, 170 },
- { 188, 186 },
- { 189, 937 },
- { 190, 230 },
- { 191, 248 },
- { 192, 191 },
- { 193, 161 },
- { 194, 172 },
- { 195, 8730 },
- { 196, 402 },
- { 197, 8776 },
- { 198, 916 },
- { 199, 171 },
- { 200, 187 },
- { 201, 8943 },
- { 202, 160 },
- { 203, 192 },
- { 204, 195 },
- { 205, 213 },
- { 206, 338 },
- { 207, 339 },
- { 208, 8211 },
- { 209, 8212 },
- { 210, 8220 },
- { 211, 8221 },
- { 212, 8216 },
- { 213, 8217 },
- { 214, 247 },
- { 215, 9674 },
- { 216, 255 },
- { 217, 376 },
- { 218, 286 },
- { 219, 287 },
- { 220, 304 },
- { 221, 305 },
- { 222, 350 },
- { 223, 351 },
- { 224, 8225 },
- { 225, 183 },
- { 226, 8218 },
- { 227, 8222 },
- { 228, 8240 },
- { 229, 194 },
- { 230, 202 },
- { 231, 193 },
- { 232, 203 },
- { 233, 200 },
- { 234, 205 },
- { 235, 206 },
- { 236, 207 },
- { 237, 204 },
- { 238, 211 },
- { 239, 212 },
- { 240, 65534 },
- { 241, 210 },
- { 242, 218 },
- { 243, 219 },
- { 244, 217 },
- { 245, 245 },
- { 246, 770 },
- { 247, 771 },
- { 248, 175 },
- { 249, 728 },
- { 250, 729 },
- { 251, 730 },
- { 252, 184 },
- { 253, 733 },
- { 254, 731 },
- { 255, 711 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 121, 253 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t atarist[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 199 },
- { 129, 252 },
- { 130, 233 },
- { 131, 226 },
- { 132, 228 },
- { 133, 224 },
- { 134, 229 },
- { 135, 231 },
- { 136, 234 },
- { 137, 235 },
- { 138, 232 },
- { 139, 239 },
- { 140, 238 },
- { 141, 236 },
- { 142, 196 },
- { 143, 197 },
- { 144, 201 },
- { 145, 230 },
- { 146, 198 },
- { 147, 244 },
- { 148, 246 },
- { 149, 242 },
- { 150, 251 },
- { 151, 249 },
- { 152, 255 },
- { 153, 214 },
- { 154, 220 },
- { 155, 162 },
- { 156, 163 },
- { 157, 165 },
- { 158, 223 },
- { 159, 402 },
- { 160, 225 },
- { 161, 237 },
- { 162, 243 },
- { 163, 250 },
- { 164, 241 },
- { 165, 209 },
- { 166, 170 },
- { 167, 186 },
- { 168, 191 },
- { 169, 8976 },
- { 170, 172 },
- { 171, 189 },
- { 172, 188 },
- { 173, 161 },
- { 174, 171 },
- { 175, 187 },
- { 176, 227 },
- { 177, 245 },
- { 178, 216 },
- { 179, 248 },
- { 180, 339 },
- { 181, 338 },
- { 182, 192 },
- { 183, 195 },
- { 184, 213 },
- { 185, 168 },
- { 186, 180 },
- { 187, 8224 },
- { 188, 182 },
- { 189, 169 },
- { 190, 174 },
- { 191, 8482 },
- { 192, 307 },
- { 193, 306 },
- { 194, 1488 },
- { 195, 1489 },
- { 196, 1490 },
- { 197, 1491 },
- { 198, 1492 },
- { 199, 1493 },
- { 200, 1494 },
- { 201, 1495 },
- { 202, 1496 },
- { 203, 1497 },
- { 204, 1499 },
- { 205, 1500 },
- { 206, 1502 },
- { 207, 1504 },
- { 208, 1505 },
- { 209, 1506 },
- { 210, 1508 },
- { 211, 1510 },
- { 212, 1511 },
- { 213, 1512 },
- { 214, 1513 },
- { 215, 1514 },
- { 216, 1503 },
- { 217, 1498 },
- { 218, 1501 },
- { 219, 1507 },
- { 220, 1509 },
- { 221, 167 },
- { 222, 8743 },
- { 223, 8734 },
- { 224, 945 },
- { 225, 946 },
- { 226, 915 },
- { 227, 960 },
- { 228, 931 },
- { 229, 963 },
- { 230, 181 },
- { 231, 964 },
- { 232, 934 },
- { 233, 920 },
- { 234, 937 },
- { 235, 948 },
- { 236, 8750 },
- { 237, 966 },
- { 238, 949 },
- { 239, 8745 },
- { 240, 8801 },
- { 241, 177 },
- { 242, 8805 },
- { 243, 8804 },
- { 244, 8992 },
- { 245, 8993 },
- { 246, 247 },
- { 247, 8776 },
- { 248, 176 },
- { 249, 8729 },
- { 250, 183 },
- { 251, 8730 },
- { 252, 8319 },
- { 253, 178 },
- { 254, 179 },
- { 255, 175 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 193 },
- { 65, 194 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp437[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 199 },
- { 129, 252 },
- { 130, 233 },
- { 131, 226 },
- { 132, 228 },
- { 133, 224 },
- { 134, 229 },
- { 135, 231 },
- { 136, 234 },
- { 137, 235 },
- { 138, 232 },
- { 139, 239 },
- { 140, 238 },
- { 141, 236 },
- { 142, 196 },
- { 143, 197 },
- { 144, 201 },
- { 145, 230 },
- { 146, 198 },
- { 147, 244 },
- { 148, 246 },
- { 149, 242 },
- { 150, 251 },
- { 151, 249 },
- { 152, 255 },
- { 153, 214 },
- { 154, 220 },
- { 155, 162 },
- { 156, 163 },
- { 157, 165 },
- { 158, 8359 },
- { 159, 402 },
- { 160, 225 },
- { 161, 237 },
- { 162, 243 },
- { 163, 250 },
- { 164, 241 },
- { 165, 209 },
- { 166, 170 },
- { 167, 186 },
- { 168, 191 },
- { 169, 8976 },
- { 170, 172 },
- { 171, 189 },
- { 172, 188 },
- { 173, 161 },
- { 174, 171 },
- { 175, 187 },
- { 176, 9617 },
- { 177, 9618 },
- { 178, 9619 },
- { 179, 9474 },
- { 180, 9508 },
- { 181, 9569 },
- { 182, 9570 },
- { 183, 9558 },
- { 184, 9557 },
- { 185, 9571 },
- { 186, 9553 },
- { 187, 9559 },
- { 188, 9565 },
- { 189, 9564 },
- { 190, 9563 },
- { 191, 9488 },
- { 192, 9492 },
- { 193, 9524 },
- { 194, 9516 },
- { 195, 9500 },
- { 196, 9472 },
- { 197, 9532 },
- { 198, 9566 },
- { 199, 9567 },
- { 200, 9562 },
- { 201, 9556 },
- { 202, 9577 },
- { 203, 9574 },
- { 204, 9568 },
- { 205, 9552 },
- { 206, 9580 },
- { 207, 9575 },
- { 208, 9576 },
- { 209, 9572 },
- { 210, 9573 },
- { 211, 9561 },
- { 212, 9560 },
- { 213, 9554 },
- { 214, 9555 },
- { 215, 9579 },
- { 216, 9578 },
- { 217, 9496 },
- { 218, 9484 },
- { 219, 9608 },
- { 220, 9604 },
- { 221, 9612 },
- { 222, 9616 },
- { 223, 9600 },
- { 224, 945 },
- { 225, 223 },
- { 226, 915 },
- { 227, 960 },
- { 228, 931 },
- { 229, 963 },
- { 230, 181 },
- { 231, 964 },
- { 232, 934 },
- { 233, 920 },
- { 234, 937 },
- { 235, 948 },
- { 236, 8734 },
- { 237, 966 },
- { 238, 949 },
- { 239, 8745 },
- { 240, 8801 },
- { 241, 177 },
- { 242, 8805 },
- { 243, 8804 },
- { 244, 8992 },
- { 245, 8993 },
- { 246, 247 },
- { 247, 8776 },
- { 248, 176 },
- { 249, 8729 },
- { 250, 183 },
- { 251, 8730 },
- { 252, 8319 },
- { 253, 178 },
- { 254, 9632 },
- { 255, 160 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 227 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 245 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp737[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 913 },
- { 129, 914 },
- { 130, 915 },
- { 131, 916 },
- { 132, 917 },
- { 133, 918 },
- { 134, 919 },
- { 135, 920 },
- { 136, 921 },
- { 137, 922 },
- { 138, 923 },
- { 139, 924 },
- { 140, 925 },
- { 141, 926 },
- { 142, 927 },
- { 143, 928 },
- { 144, 929 },
- { 145, 931 },
- { 146, 932 },
- { 147, 933 },
- { 148, 934 },
- { 149, 935 },
- { 150, 936 },
- { 151, 937 },
- { 152, 945 },
- { 153, 946 },
- { 154, 947 },
- { 155, 948 },
- { 156, 949 },
- { 157, 950 },
- { 158, 951 },
- { 159, 952 },
- { 160, 953 },
- { 161, 954 },
- { 162, 955 },
- { 163, 956 },
- { 164, 957 },
- { 165, 958 },
- { 166, 959 },
- { 167, 960 },
- { 168, 961 },
- { 169, 963 },
- { 170, 962 },
- { 171, 964 },
- { 172, 965 },
- { 173, 966 },
- { 174, 967 },
- { 175, 968 },
- { 176, 9617 },
- { 177, 9618 },
- { 178, 9619 },
- { 179, 9474 },
- { 180, 9508 },
- { 181, 9569 },
- { 182, 9570 },
- { 183, 9558 },
- { 184, 9557 },
- { 185, 9571 },
- { 186, 9553 },
- { 187, 9559 },
- { 188, 9565 },
- { 189, 9564 },
- { 190, 9563 },
- { 191, 9488 },
- { 192, 9492 },
- { 193, 9524 },
- { 194, 9516 },
- { 195, 9500 },
- { 196, 9472 },
- { 197, 9532 },
- { 198, 9566 },
- { 199, 9567 },
- { 200, 9562 },
- { 201, 9556 },
- { 202, 9577 },
- { 203, 9574 },
- { 204, 9568 },
- { 205, 9552 },
- { 206, 9580 },
- { 207, 9575 },
- { 208, 9576 },
- { 209, 9572 },
- { 210, 9573 },
- { 211, 9561 },
- { 212, 9560 },
- { 213, 9554 },
- { 214, 9555 },
- { 215, 9579 },
- { 216, 9578 },
- { 217, 9496 },
- { 218, 9484 },
- { 219, 9608 },
- { 220, 9604 },
- { 221, 9612 },
- { 222, 9616 },
- { 223, 9600 },
- { 224, 969 },
- { 225, 940 },
- { 226, 941 },
- { 227, 942 },
- { 228, 970 },
- { 229, 943 },
- { 230, 972 },
- { 231, 973 },
- { 232, 971 },
- { 233, 974 },
- { 234, 902 },
- { 235, 904 },
- { 236, 905 },
- { 237, 906 },
- { 238, 908 },
- { 239, 910 },
- { 240, 911 },
- { 241, 177 },
- { 242, 8805 },
- { 243, 8804 },
- { 244, 938 },
- { 245, 939 },
- { 246, 247 },
- { 247, 8776 },
- { 248, 176 },
- { 249, 8729 },
- { 250, 183 },
- { 251, 8730 },
- { 252, 8319 },
- { 253, 178 },
- { 254, 9632 },
- { 255, 160 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 244 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 220 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 252 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp775[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 262 },
- { 129, 252 },
- { 130, 233 },
- { 131, 257 },
- { 132, 228 },
- { 133, 291 },
- { 134, 229 },
- { 135, 263 },
- { 136, 322 },
- { 137, 275 },
- { 138, 342 },
- { 139, 343 },
- { 140, 299 },
- { 141, 377 },
- { 142, 196 },
- { 143, 197 },
- { 144, 201 },
- { 145, 230 },
- { 146, 198 },
- { 147, 333 },
- { 148, 246 },
- { 149, 290 },
- { 150, 162 },
- { 151, 346 },
- { 152, 347 },
- { 153, 214 },
- { 154, 220 },
- { 155, 248 },
- { 156, 163 },
- { 157, 216 },
- { 158, 215 },
- { 159, 164 },
- { 160, 256 },
- { 161, 298 },
- { 162, 243 },
- { 163, 379 },
- { 164, 380 },
- { 165, 378 },
- { 166, 8221 },
- { 167, 166 },
- { 168, 169 },
- { 169, 174 },
- { 170, 172 },
- { 171, 189 },
- { 172, 188 },
- { 173, 321 },
- { 174, 171 },
- { 175, 187 },
- { 176, 9617 },
- { 177, 9618 },
- { 178, 9619 },
- { 179, 9474 },
- { 180, 9508 },
- { 181, 260 },
- { 182, 268 },
- { 183, 280 },
- { 184, 278 },
- { 185, 9571 },
- { 186, 9553 },
- { 187, 9559 },
- { 188, 9565 },
- { 189, 302 },
- { 190, 352 },
- { 191, 9488 },
- { 192, 9492 },
- { 193, 9524 },
- { 194, 9516 },
- { 195, 9500 },
- { 196, 9472 },
- { 197, 9532 },
- { 198, 370 },
- { 199, 362 },
- { 200, 9562 },
- { 201, 9556 },
- { 202, 9577 },
- { 203, 9574 },
- { 204, 9568 },
- { 205, 9552 },
- { 206, 9580 },
- { 207, 381 },
- { 208, 261 },
- { 209, 269 },
- { 210, 281 },
- { 211, 279 },
- { 212, 303 },
- { 213, 353 },
- { 214, 371 },
- { 215, 363 },
- { 216, 382 },
- { 217, 9496 },
- { 218, 9484 },
- { 219, 9608 },
- { 220, 9604 },
- { 221, 9612 },
- { 222, 9616 },
- { 223, 9600 },
- { 224, 211 },
- { 225, 223 },
- { 226, 332 },
- { 227, 323 },
- { 228, 245 },
- { 229, 213 },
- { 230, 181 },
- { 231, 324 },
- { 232, 310 },
- { 233, 311 },
- { 234, 315 },
- { 235, 316 },
- { 236, 326 },
- { 237, 274 },
- { 238, 325 },
- { 239, 8217 },
- { 240, 173 },
- { 241, 177 },
- { 242, 8220 },
- { 243, 190 },
- { 244, 182 },
- { 245, 167 },
- { 246, 247 },
- { 247, 8222 },
- { 248, 176 },
- { 249, 8729 },
- { 250, 183 },
- { 251, 185 },
- { 252, 179 },
- { 253, 178 },
- { 254, 9632 },
- { 255, 160 },
- { 39, 8216 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 258 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 259 },
- { 97, 462 },
- { 67, 199 },
- { 67, 264 },
- { 67, 266 },
- { 99, 231 },
- { 99, 265 },
- { 99, 267 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 202 },
- { 69, 203 },
- { 69, 276 },
- { 69, 282 },
- { 101, 232 },
- { 101, 234 },
- { 101, 235 },
- { 101, 277 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 300 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 301 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 488 },
- { 107, 489 },
- { 76, 313 },
- { 76, 317 },
- { 76, 319 },
- { 108, 314 },
- { 108, 318 },
- { 108, 320 },
- { 77, 209 },
- { 77, 327 },
- { 109, 241 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 212 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 244 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 344 },
- { 114, 341 },
- { 114, 345 },
- { 83, 348 },
- { 83, 350 },
- { 115, 349 },
- { 115, 351 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 360 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 361 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
-};
-static convert_t cp850[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 199 },
- { 129, 252 },
- { 130, 233 },
- { 131, 226 },
- { 132, 228 },
- { 133, 224 },
- { 134, 229 },
- { 135, 231 },
- { 136, 234 },
- { 137, 235 },
- { 138, 232 },
- { 139, 239 },
- { 140, 238 },
- { 141, 236 },
- { 142, 196 },
- { 143, 197 },
- { 144, 201 },
- { 145, 230 },
- { 146, 198 },
- { 147, 244 },
- { 148, 246 },
- { 149, 242 },
- { 150, 251 },
- { 151, 249 },
- { 152, 255 },
- { 153, 214 },
- { 154, 220 },
- { 155, 248 },
- { 156, 163 },
- { 157, 216 },
- { 158, 215 },
- { 159, 402 },
- { 160, 225 },
- { 161, 237 },
- { 162, 243 },
- { 163, 250 },
- { 164, 241 },
- { 165, 209 },
- { 166, 170 },
- { 167, 186 },
- { 168, 191 },
- { 169, 174 },
- { 170, 172 },
- { 171, 189 },
- { 172, 188 },
- { 173, 161 },
- { 174, 171 },
- { 175, 187 },
- { 176, 9617 },
- { 177, 9618 },
- { 178, 9619 },
- { 179, 9474 },
- { 180, 9508 },
- { 181, 193 },
- { 182, 194 },
- { 183, 192 },
- { 184, 169 },
- { 185, 9571 },
- { 186, 9553 },
- { 187, 9559 },
- { 188, 9565 },
- { 189, 162 },
- { 190, 165 },
- { 191, 9488 },
- { 192, 9492 },
- { 193, 9524 },
- { 194, 9516 },
- { 195, 9500 },
- { 196, 9472 },
- { 197, 9532 },
- { 198, 227 },
- { 199, 195 },
- { 200, 9562 },
- { 201, 9556 },
- { 202, 9577 },
- { 203, 9574 },
- { 204, 9568 },
- { 205, 9552 },
- { 206, 9580 },
- { 207, 164 },
- { 208, 240 },
- { 209, 208 },
- { 210, 202 },
- { 211, 203 },
- { 212, 200 },
- { 213, 305 },
- { 214, 205 },
- { 215, 206 },
- { 216, 207 },
- { 217, 9496 },
- { 218, 9484 },
- { 219, 9608 },
- { 220, 9604 },
- { 221, 166 },
- { 222, 204 },
- { 223, 9600 },
- { 224, 211 },
- { 225, 223 },
- { 226, 212 },
- { 227, 210 },
- { 228, 245 },
- { 229, 213 },
- { 230, 181 },
- { 231, 254 },
- { 232, 222 },
- { 233, 218 },
- { 234, 219 },
- { 235, 217 },
- { 236, 253 },
- { 237, 221 },
- { 238, 175 },
- { 239, 180 },
- { 240, 173 },
- { 241, 177 },
- { 242, 8215 },
- { 243, 190 },
- { 244, 182 },
- { 245, 167 },
- { 246, 247 },
- { 247, 184 },
- { 248, 176 },
- { 249, 168 },
- { 250, 183 },
- { 251, 185 },
- { 252, 179 },
- { 253, 178 },
- { 254, 9632 },
- { 255, 160 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp851[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 199 },
- { 129, 252 },
- { 130, 233 },
- { 131, 226 },
- { 132, 228 },
- { 133, 224 },
- { 134, 902 },
- { 135, 231 },
- { 136, 234 },
- { 137, 235 },
- { 138, 232 },
- { 139, 239 },
- { 140, 238 },
- { 141, 904 },
- { 142, 196 },
- { 143, 905 },
- { 144, 906 },
- { 145, 145 },
- { 146, 908 },
- { 147, 244 },
- { 148, 246 },
- { 149, 910 },
- { 150, 251 },
- { 151, 249 },
- { 152, 911 },
- { 153, 214 },
- { 154, 220 },
- { 155, 940 },
- { 156, 163 },
- { 157, 941 },
- { 158, 942 },
- { 159, 943 },
- { 160, 970 },
- { 161, 912 },
- { 162, 972 },
- { 163, 973 },
- { 164, 913 },
- { 165, 914 },
- { 166, 915 },
- { 167, 916 },
- { 168, 917 },
- { 169, 918 },
- { 170, 919 },
- { 171, 189 },
- { 172, 920 },
- { 173, 921 },
- { 174, 171 },
- { 175, 187 },
- { 176, 9617 },
- { 177, 9618 },
- { 178, 9619 },
- { 179, 9474 },
- { 180, 9508 },
- { 181, 922 },
- { 182, 923 },
- { 183, 924 },
- { 184, 925 },
- { 185, 9571 },
- { 186, 9553 },
- { 187, 9559 },
- { 188, 9565 },
- { 189, 926 },
- { 190, 927 },
- { 191, 9488 },
- { 192, 9492 },
- { 193, 9524 },
- { 194, 9516 },
- { 195, 9500 },
- { 196, 9472 },
- { 197, 9532 },
- { 198, 928 },
- { 199, 929 },
- { 200, 9562 },
- { 201, 9556 },
- { 202, 9577 },
- { 203, 9574 },
- { 204, 9568 },
- { 205, 9552 },
- { 206, 9580 },
- { 207, 931 },
- { 208, 932 },
- { 209, 933 },
- { 210, 934 },
- { 211, 935 },
- { 212, 936 },
- { 213, 937 },
- { 214, 945 },
- { 215, 946 },
- { 216, 947 },
- { 217, 9496 },
- { 218, 9484 },
- { 219, 9608 },
- { 220, 9604 },
- { 221, 948 },
- { 222, 949 },
- { 223, 9600 },
- { 224, 950 },
- { 225, 951 },
- { 226, 952 },
- { 227, 953 },
- { 228, 954 },
- { 229, 955 },
- { 230, 956 },
- { 231, 957 },
- { 232, 958 },
- { 233, 959 },
- { 234, 960 },
- { 235, 961 },
- { 236, 963 },
- { 237, 962 },
- { 238, 964 },
- { 239, 900 },
- { 240, 173 },
- { 241, 177 },
- { 242, 965 },
- { 243, 966 },
- { 244, 967 },
- { 245, 167 },
- { 246, 968 },
- { 247, 901 },
- { 248, 176 },
- { 249, 168 },
- { 250, 969 },
- { 251, 971 },
- { 252, 944 },
- { 253, 974 },
- { 254, 9632 },
- { 255, 160 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 225 },
- { 97, 227 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 245 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 250 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp852[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 199 },
- { 129, 252 },
- { 130, 233 },
- { 131, 226 },
- { 132, 228 },
- { 133, 367 },
- { 134, 263 },
- { 135, 231 },
- { 136, 322 },
- { 137, 235 },
- { 138, 336 },
- { 139, 337 },
- { 140, 238 },
- { 141, 377 },
- { 142, 196 },
- { 143, 262 },
- { 144, 201 },
- { 145, 313 },
- { 146, 314 },
- { 147, 244 },
- { 148, 246 },
- { 149, 317 },
- { 150, 318 },
- { 151, 346 },
- { 152, 347 },
- { 153, 214 },
- { 154, 220 },
- { 155, 356 },
- { 156, 357 },
- { 157, 321 },
- { 158, 215 },
- { 159, 269 },
- { 160, 225 },
- { 161, 237 },
- { 162, 243 },
- { 163, 250 },
- { 164, 260 },
- { 165, 261 },
- { 166, 381 },
- { 167, 382 },
- { 168, 280 },
- { 169, 281 },
- { 170, 170 },
- { 171, 378 },
- { 172, 268 },
- { 173, 351 },
- { 174, 171 },
- { 175, 187 },
- { 176, 9617 },
- { 177, 9618 },
- { 178, 9619 },
- { 179, 9474 },
- { 180, 9508 },
- { 181, 193 },
- { 182, 194 },
- { 183, 282 },
- { 184, 350 },
- { 185, 9571 },
- { 186, 9553 },
- { 187, 9559 },
- { 188, 9565 },
- { 189, 379 },
- { 190, 380 },
- { 191, 9488 },
- { 192, 9492 },
- { 193, 9524 },
- { 194, 9516 },
- { 195, 9500 },
- { 196, 9472 },
- { 197, 9532 },
- { 198, 258 },
- { 199, 259 },
- { 200, 9562 },
- { 201, 9556 },
- { 202, 9577 },
- { 203, 9574 },
- { 204, 9568 },
- { 205, 9552 },
- { 206, 9580 },
- { 207, 164 },
- { 208, 273 },
- { 209, 272 },
- { 210, 270 },
- { 211, 203 },
- { 212, 271 },
- { 213, 327 },
- { 214, 205 },
- { 215, 206 },
- { 216, 283 },
- { 217, 9496 },
- { 218, 9484 },
- { 219, 9608 },
- { 220, 9604 },
- { 221, 354 },
- { 222, 366 },
- { 223, 9600 },
- { 224, 211 },
- { 225, 223 },
- { 226, 212 },
- { 227, 323 },
- { 228, 324 },
- { 229, 328 },
- { 230, 352 },
- { 231, 353 },
- { 232, 340 },
- { 233, 218 },
- { 234, 341 },
- { 235, 368 },
- { 236, 253 },
- { 237, 221 },
- { 238, 355 },
- { 239, 180 },
- { 240, 173 },
- { 241, 733 },
- { 242, 731 },
- { 243, 711 },
- { 244, 728 },
- { 245, 167 },
- { 246, 247 },
- { 247, 184 },
- { 248, 176 },
- { 249, 168 },
- { 250, 729 },
- { 251, 369 },
- { 252, 344 },
- { 253, 345 },
- { 254, 9632 },
- { 255, 160 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 195 },
- { 65, 197 },
- { 65, 256 },
- { 65, 461 },
- { 97, 224 },
- { 97, 227 },
- { 97, 229 },
- { 97, 257 },
- { 97, 462 },
- { 67, 264 },
- { 67, 266 },
- { 99, 265 },
- { 99, 267 },
- { 69, 200 },
- { 69, 202 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 101, 232 },
- { 101, 234 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 315 },
- { 76, 319 },
- { 108, 316 },
- { 108, 320 },
- { 77, 209 },
- { 77, 325 },
- { 109, 241 },
- { 109, 326 },
- { 109, 329 },
- { 78, 210 },
- { 78, 213 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 245 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 466 },
- { 110, 491 },
- { 82, 342 },
- { 114, 343 },
- { 83, 348 },
- { 115, 349 },
- { 85, 217 },
- { 85, 219 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 251 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 255 },
- { 121, 375 },
-};
-static convert_t cp853[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 199 },
- { 129, 252 },
- { 130, 233 },
- { 131, 226 },
- { 132, 228 },
- { 133, 224 },
- { 134, 265 },
- { 135, 231 },
- { 136, 234 },
- { 137, 235 },
- { 138, 232 },
- { 139, 239 },
- { 140, 238 },
- { 141, 236 },
- { 142, 196 },
- { 143, 264 },
- { 144, 201 },
- { 145, 267 },
- { 146, 266 },
- { 147, 244 },
- { 148, 246 },
- { 149, 242 },
- { 150, 251 },
- { 151, 249 },
- { 152, 304 },
- { 153, 214 },
- { 154, 220 },
- { 155, 285 },
- { 156, 163 },
- { 157, 284 },
- { 158, 215 },
- { 159, 309 },
- { 160, 225 },
- { 161, 237 },
- { 162, 243 },
- { 163, 250 },
- { 164, 241 },
- { 165, 209 },
- { 166, 286 },
- { 167, 287 },
- { 168, 292 },
- { 169, 293 },
- { 170, 170 },
- { 171, 189 },
- { 172, 308 },
- { 173, 351 },
- { 174, 171 },
- { 175, 187 },
- { 176, 9617 },
- { 177, 9618 },
- { 178, 9619 },
- { 179, 9474 },
- { 180, 9508 },
- { 181, 193 },
- { 182, 194 },
- { 183, 192 },
- { 184, 350 },
- { 185, 9571 },
- { 186, 9553 },
- { 187, 9559 },
- { 188, 9565 },
- { 189, 379 },
- { 190, 380 },
- { 191, 9488 },
- { 192, 9492 },
- { 193, 9524 },
- { 194, 9516 },
- { 195, 9500 },
- { 196, 9472 },
- { 197, 9532 },
- { 198, 348 },
- { 199, 349 },
- { 200, 9562 },
- { 201, 9556 },
- { 202, 9577 },
- { 203, 9574 },
- { 204, 9568 },
- { 205, 9552 },
- { 206, 9580 },
- { 207, 164 },
- { 208, 208 },
- { 209, 209 },
- { 210, 202 },
- { 211, 203 },
- { 212, 200 },
- { 213, 305 },
- { 214, 205 },
- { 215, 206 },
- { 216, 207 },
- { 217, 9496 },
- { 218, 9484 },
- { 219, 9608 },
- { 220, 9604 },
- { 221, 221 },
- { 222, 204 },
- { 223, 9600 },
- { 224, 211 },
- { 225, 223 },
- { 226, 212 },
- { 227, 210 },
- { 228, 288 },
- { 229, 289 },
- { 230, 181 },
- { 231, 294 },
- { 232, 295 },
- { 233, 218 },
- { 234, 219 },
- { 235, 217 },
- { 236, 364 },
- { 237, 365 },
- { 238, 238 },
- { 239, 180 },
- { 240, 173 },
- { 241, 241 },
- { 242, 8467 },
- { 243, 329 },
- { 244, 728 },
- { 245, 167 },
- { 246, 247 },
- { 247, 184 },
- { 248, 176 },
- { 249, 168 },
- { 250, 729 },
- { 251, 251 },
- { 252, 179 },
- { 253, 178 },
- { 254, 9632 },
- { 255, 160 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 195 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 227 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 268 },
- { 99, 263 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 464 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 78, 213 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 245 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 352 },
- { 115, 347 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 381 },
- { 122, 378 },
- { 122, 382 },
-};
-static convert_t cp855[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 1106 },
- { 129, 1026 },
- { 130, 1107 },
- { 131, 1027 },
- { 132, 1105 },
- { 133, 1025 },
- { 134, 1108 },
- { 135, 1028 },
- { 136, 1109 },
- { 137, 1029 },
- { 138, 1110 },
- { 139, 1030 },
- { 140, 1111 },
- { 141, 1031 },
- { 142, 1112 },
- { 143, 1032 },
- { 144, 1113 },
- { 145, 1033 },
- { 146, 1114 },
- { 147, 1034 },
- { 148, 1115 },
- { 149, 1035 },
- { 150, 1116 },
- { 151, 1036 },
- { 152, 1118 },
- { 153, 1038 },
- { 154, 1119 },
- { 155, 1039 },
- { 156, 1102 },
- { 157, 1070 },
- { 158, 1098 },
- { 159, 1066 },
- { 160, 1072 },
- { 161, 1040 },
- { 162, 1073 },
- { 163, 1041 },
- { 164, 1094 },
- { 165, 1062 },
- { 166, 1076 },
- { 167, 1044 },
- { 168, 1077 },
- { 169, 1045 },
- { 170, 1092 },
- { 171, 1060 },
- { 172, 1075 },
- { 173, 1043 },
- { 174, 171 },
- { 175, 187 },
- { 176, 9617 },
- { 177, 9618 },
- { 178, 9619 },
- { 179, 9474 },
- { 180, 9508 },
- { 181, 1093 },
- { 182, 1061 },
- { 183, 1080 },
- { 184, 1048 },
- { 185, 9571 },
- { 186, 9553 },
- { 187, 9559 },
- { 188, 9565 },
- { 189, 1081 },
- { 190, 1049 },
- { 191, 9488 },
- { 192, 9492 },
- { 193, 9524 },
- { 194, 9516 },
- { 195, 9500 },
- { 196, 9472 },
- { 197, 9532 },
- { 198, 1082 },
- { 199, 1050 },
- { 200, 9562 },
- { 201, 9556 },
- { 202, 9577 },
- { 203, 9574 },
- { 204, 9568 },
- { 205, 9552 },
- { 206, 9580 },
- { 207, 164 },
- { 208, 1083 },
- { 209, 1051 },
- { 210, 1084 },
- { 211, 1052 },
- { 212, 1085 },
- { 213, 1053 },
- { 214, 1086 },
- { 215, 1054 },
- { 216, 1087 },
- { 217, 9496 },
- { 218, 9484 },
- { 219, 9608 },
- { 220, 9604 },
- { 221, 1055 },
- { 222, 1103 },
- { 223, 9600 },
- { 224, 1071 },
- { 225, 1088 },
- { 226, 1056 },
- { 227, 1089 },
- { 228, 1057 },
- { 229, 1090 },
- { 230, 1058 },
- { 231, 1091 },
- { 232, 1059 },
- { 233, 1078 },
- { 234, 1046 },
- { 235, 1074 },
- { 236, 1042 },
- { 237, 1100 },
- { 238, 1068 },
- { 239, 8470 },
- { 240, 173 },
- { 241, 1099 },
- { 242, 1067 },
- { 243, 1079 },
- { 244, 1047 },
- { 245, 1096 },
- { 246, 1064 },
- { 247, 1101 },
- { 248, 1069 },
- { 249, 1097 },
- { 250, 1065 },
- { 251, 1095 },
- { 252, 1063 },
- { 253, 167 },
- { 254, 9632 },
- { 255, 160 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 244 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 220 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 252 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp857[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 199 },
- { 129, 252 },
- { 130, 233 },
- { 131, 226 },
- { 132, 228 },
- { 133, 224 },
- { 134, 229 },
- { 135, 231 },
- { 136, 234 },
- { 137, 235 },
- { 138, 232 },
- { 139, 239 },
- { 140, 238 },
- { 141, 305 },
- { 142, 196 },
- { 143, 197 },
- { 144, 201 },
- { 145, 230 },
- { 146, 198 },
- { 147, 244 },
- { 148, 246 },
- { 149, 242 },
- { 150, 251 },
- { 151, 249 },
- { 152, 304 },
- { 153, 214 },
- { 154, 220 },
- { 155, 248 },
- { 156, 163 },
- { 157, 216 },
- { 158, 350 },
- { 159, 351 },
- { 160, 225 },
- { 161, 237 },
- { 162, 243 },
- { 163, 250 },
- { 164, 241 },
- { 165, 209 },
- { 166, 286 },
- { 167, 287 },
- { 168, 191 },
- { 169, 174 },
- { 170, 172 },
- { 171, 189 },
- { 172, 188 },
- { 173, 161 },
- { 174, 171 },
- { 175, 187 },
- { 176, 9617 },
- { 177, 9618 },
- { 178, 9619 },
- { 179, 9474 },
- { 180, 9508 },
- { 181, 193 },
- { 182, 194 },
- { 183, 192 },
- { 184, 169 },
- { 185, 9571 },
- { 186, 9553 },
- { 187, 9559 },
- { 188, 9565 },
- { 189, 162 },
- { 190, 165 },
- { 191, 9488 },
- { 192, 9492 },
- { 193, 9524 },
- { 194, 9516 },
- { 195, 9500 },
- { 196, 9472 },
- { 197, 9532 },
- { 198, 227 },
- { 199, 195 },
- { 200, 9562 },
- { 201, 9556 },
- { 202, 9577 },
- { 203, 9574 },
- { 204, 9568 },
- { 205, 9552 },
- { 206, 9580 },
- { 207, 164 },
- { 208, 186 },
- { 209, 170 },
- { 210, 202 },
- { 211, 203 },
- { 212, 200 },
- { 213, 213 },
- { 214, 205 },
- { 215, 206 },
- { 216, 207 },
- { 217, 9496 },
- { 218, 9484 },
- { 219, 9608 },
- { 220, 9604 },
- { 221, 166 },
- { 222, 204 },
- { 223, 9600 },
- { 224, 211 },
- { 225, 223 },
- { 226, 212 },
- { 227, 210 },
- { 228, 245 },
- { 229, 213 },
- { 230, 181 },
- { 231, 231 },
- { 232, 215 },
- { 233, 218 },
- { 234, 219 },
- { 235, 217 },
- { 236, 236 },
- { 237, 255 },
- { 238, 175 },
- { 239, 180 },
- { 240, 173 },
- { 241, 177 },
- { 242, 242 },
- { 243, 190 },
- { 244, 182 },
- { 245, 167 },
- { 246, 247 },
- { 247, 184 },
- { 248, 176 },
- { 249, 168 },
- { 250, 183 },
- { 251, 185 },
- { 252, 179 },
- { 253, 178 },
- { 254, 9632 },
- { 255, 160 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp860[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 199 },
- { 129, 252 },
- { 130, 233 },
- { 131, 226 },
- { 132, 227 },
- { 133, 224 },
- { 134, 193 },
- { 135, 231 },
- { 136, 234 },
- { 137, 202 },
- { 138, 232 },
- { 139, 205 },
- { 140, 212 },
- { 141, 236 },
- { 142, 195 },
- { 143, 194 },
- { 144, 201 },
- { 145, 192 },
- { 146, 200 },
- { 147, 244 },
- { 148, 245 },
- { 149, 242 },
- { 150, 218 },
- { 151, 249 },
- { 152, 204 },
- { 153, 213 },
- { 154, 220 },
- { 155, 162 },
- { 156, 163 },
- { 157, 217 },
- { 158, 8359 },
- { 159, 211 },
- { 160, 225 },
- { 161, 237 },
- { 162, 243 },
- { 163, 250 },
- { 164, 241 },
- { 165, 209 },
- { 166, 170 },
- { 167, 186 },
- { 168, 191 },
- { 169, 210 },
- { 170, 172 },
- { 171, 189 },
- { 172, 188 },
- { 173, 161 },
- { 174, 171 },
- { 175, 187 },
- { 176, 9617 },
- { 177, 9618 },
- { 178, 9619 },
- { 179, 9474 },
- { 180, 9508 },
- { 181, 9569 },
- { 182, 9570 },
- { 183, 9558 },
- { 184, 9557 },
- { 185, 9571 },
- { 186, 9553 },
- { 187, 9559 },
- { 188, 9565 },
- { 189, 9564 },
- { 190, 9563 },
- { 191, 9488 },
- { 192, 9492 },
- { 193, 9524 },
- { 194, 9516 },
- { 195, 9500 },
- { 196, 9472 },
- { 197, 9532 },
- { 198, 9566 },
- { 199, 9567 },
- { 200, 9562 },
- { 201, 9556 },
- { 202, 9577 },
- { 203, 9574 },
- { 204, 9568 },
- { 205, 9552 },
- { 206, 9580 },
- { 207, 9575 },
- { 208, 9576 },
- { 209, 9572 },
- { 210, 9573 },
- { 211, 9561 },
- { 212, 9560 },
- { 213, 9554 },
- { 214, 9555 },
- { 215, 9579 },
- { 216, 9578 },
- { 217, 9496 },
- { 218, 9484 },
- { 219, 9608 },
- { 220, 9604 },
- { 221, 9612 },
- { 222, 9616 },
- { 223, 9600 },
- { 224, 945 },
- { 225, 223 },
- { 226, 915 },
- { 227, 960 },
- { 228, 931 },
- { 229, 963 },
- { 230, 181 },
- { 231, 964 },
- { 232, 934 },
- { 233, 920 },
- { 234, 937 },
- { 235, 948 },
- { 236, 8734 },
- { 237, 966 },
- { 238, 949 },
- { 239, 8745 },
- { 240, 8801 },
- { 241, 177 },
- { 242, 8805 },
- { 243, 8804 },
- { 244, 8992 },
- { 245, 8993 },
- { 246, 247 },
- { 247, 8776 },
- { 248, 176 },
- { 249, 8729 },
- { 250, 183 },
- { 251, 8730 },
- { 252, 8319 },
- { 253, 178 },
- { 254, 9632 },
- { 255, 160 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 219 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 251 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp861[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 199 },
- { 129, 252 },
- { 130, 233 },
- { 131, 226 },
- { 132, 228 },
- { 133, 224 },
- { 134, 229 },
- { 135, 231 },
- { 136, 234 },
- { 137, 235 },
- { 138, 232 },
- { 139, 208 },
- { 140, 240 },
- { 141, 222 },
- { 142, 196 },
- { 143, 197 },
- { 144, 201 },
- { 145, 230 },
- { 146, 198 },
- { 147, 244 },
- { 148, 246 },
- { 149, 254 },
- { 150, 251 },
- { 151, 221 },
- { 152, 253 },
- { 153, 214 },
- { 154, 220 },
- { 155, 248 },
- { 156, 163 },
- { 157, 216 },
- { 158, 8359 },
- { 159, 402 },
- { 160, 225 },
- { 161, 237 },
- { 162, 243 },
- { 163, 250 },
- { 164, 193 },
- { 165, 205 },
- { 166, 211 },
- { 167, 218 },
- { 168, 191 },
- { 169, 8976 },
- { 170, 172 },
- { 171, 189 },
- { 172, 188 },
- { 173, 161 },
- { 174, 171 },
- { 175, 187 },
- { 176, 9617 },
- { 177, 9618 },
- { 178, 9619 },
- { 179, 9474 },
- { 180, 9508 },
- { 181, 9569 },
- { 182, 9570 },
- { 183, 9558 },
- { 184, 9557 },
- { 185, 9571 },
- { 186, 9553 },
- { 187, 9559 },
- { 188, 9565 },
- { 189, 9564 },
- { 190, 9563 },
- { 191, 9488 },
- { 192, 9492 },
- { 193, 9524 },
- { 194, 9516 },
- { 195, 9500 },
- { 196, 9472 },
- { 197, 9532 },
- { 198, 9566 },
- { 199, 9567 },
- { 200, 9562 },
- { 201, 9556 },
- { 202, 9577 },
- { 203, 9574 },
- { 204, 9568 },
- { 205, 9552 },
- { 206, 9580 },
- { 207, 9575 },
- { 208, 9576 },
- { 209, 9572 },
- { 210, 9573 },
- { 211, 9561 },
- { 212, 9560 },
- { 213, 9554 },
- { 214, 9555 },
- { 215, 9579 },
- { 216, 9578 },
- { 217, 9496 },
- { 218, 9484 },
- { 219, 9608 },
- { 220, 9604 },
- { 221, 9612 },
- { 222, 9616 },
- { 223, 9600 },
- { 224, 945 },
- { 225, 223 },
- { 226, 915 },
- { 227, 960 },
- { 228, 931 },
- { 229, 963 },
- { 230, 181 },
- { 231, 964 },
- { 232, 934 },
- { 233, 920 },
- { 234, 937 },
- { 235, 948 },
- { 236, 8734 },
- { 237, 966 },
- { 238, 949 },
- { 239, 8745 },
- { 240, 8801 },
- { 241, 177 },
- { 242, 8805 },
- { 243, 8804 },
- { 244, 8992 },
- { 245, 8993 },
- { 246, 247 },
- { 247, 8776 },
- { 248, 176 },
- { 249, 8729 },
- { 250, 183 },
- { 251, 8730 },
- { 252, 8319 },
- { 253, 178 },
- { 254, 9632 },
- { 255, 160 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 194 },
- { 65, 195 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 227 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 212 },
- { 78, 213 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 245 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 219 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp862[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 1488 },
- { 129, 1489 },
- { 130, 1490 },
- { 131, 1491 },
- { 132, 1492 },
- { 133, 1493 },
- { 134, 1494 },
- { 135, 1495 },
- { 136, 1496 },
- { 137, 1497 },
- { 138, 1498 },
- { 139, 1499 },
- { 140, 1500 },
- { 141, 1501 },
- { 142, 1502 },
- { 143, 1503 },
- { 144, 1504 },
- { 145, 1505 },
- { 146, 1506 },
- { 147, 1507 },
- { 148, 1508 },
- { 149, 1509 },
- { 150, 1510 },
- { 151, 1511 },
- { 152, 1512 },
- { 153, 1513 },
- { 154, 1514 },
- { 155, 162 },
- { 156, 163 },
- { 157, 165 },
- { 158, 8359 },
- { 159, 402 },
- { 160, 225 },
- { 161, 237 },
- { 162, 243 },
- { 163, 250 },
- { 164, 241 },
- { 165, 209 },
- { 166, 170 },
- { 167, 186 },
- { 168, 191 },
- { 169, 8976 },
- { 170, 172 },
- { 171, 189 },
- { 172, 188 },
- { 173, 161 },
- { 174, 171 },
- { 175, 187 },
- { 176, 9617 },
- { 177, 9618 },
- { 178, 9619 },
- { 179, 9474 },
- { 180, 9508 },
- { 181, 9569 },
- { 182, 9570 },
- { 183, 9558 },
- { 184, 9557 },
- { 185, 9571 },
- { 186, 9553 },
- { 187, 9559 },
- { 188, 9565 },
- { 189, 9564 },
- { 190, 9563 },
- { 191, 9488 },
- { 192, 9492 },
- { 193, 9524 },
- { 194, 9516 },
- { 195, 9500 },
- { 196, 9472 },
- { 197, 9532 },
- { 198, 9566 },
- { 199, 9567 },
- { 200, 9562 },
- { 201, 9556 },
- { 202, 9577 },
- { 203, 9574 },
- { 204, 9568 },
- { 205, 9552 },
- { 206, 9580 },
- { 207, 9575 },
- { 208, 9576 },
- { 209, 9572 },
- { 210, 9573 },
- { 211, 9561 },
- { 212, 9560 },
- { 213, 9554 },
- { 214, 9555 },
- { 215, 9579 },
- { 216, 9578 },
- { 217, 9496 },
- { 218, 9484 },
- { 219, 9608 },
- { 220, 9604 },
- { 221, 9612 },
- { 222, 9616 },
- { 223, 9600 },
- { 224, 945 },
- { 225, 223 },
- { 226, 915 },
- { 227, 960 },
- { 228, 931 },
- { 229, 963 },
- { 230, 181 },
- { 231, 964 },
- { 232, 934 },
- { 233, 920 },
- { 234, 937 },
- { 235, 948 },
- { 236, 8734 },
- { 237, 966 },
- { 238, 949 },
- { 239, 8745 },
- { 240, 8801 },
- { 241, 177 },
- { 242, 8805 },
- { 243, 8804 },
- { 244, 8992 },
- { 245, 8993 },
- { 246, 247 },
- { 247, 8776 },
- { 248, 176 },
- { 249, 8729 },
- { 250, 183 },
- { 251, 8730 },
- { 252, 8319 },
- { 253, 178 },
- { 254, 9632 },
- { 255, 160 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 244 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 220 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 251 },
- { 117, 252 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp863[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 199 },
- { 129, 252 },
- { 130, 233 },
- { 131, 226 },
- { 132, 194 },
- { 133, 224 },
- { 134, 182 },
- { 135, 231 },
- { 136, 234 },
- { 137, 235 },
- { 138, 232 },
- { 139, 239 },
- { 140, 238 },
- { 141, 8215 },
- { 142, 192 },
- { 143, 167 },
- { 144, 201 },
- { 145, 200 },
- { 146, 202 },
- { 147, 244 },
- { 148, 203 },
- { 149, 207 },
- { 150, 251 },
- { 151, 249 },
- { 152, 164 },
- { 153, 212 },
- { 154, 220 },
- { 155, 162 },
- { 156, 163 },
- { 157, 217 },
- { 158, 219 },
- { 159, 402 },
- { 160, 166 },
- { 161, 180 },
- { 162, 243 },
- { 163, 250 },
- { 164, 168 },
- { 165, 184 },
- { 166, 179 },
- { 167, 175 },
- { 168, 206 },
- { 169, 8976 },
- { 170, 172 },
- { 171, 189 },
- { 172, 188 },
- { 173, 190 },
- { 174, 171 },
- { 175, 187 },
- { 176, 9617 },
- { 177, 9618 },
- { 178, 9619 },
- { 179, 9474 },
- { 180, 9508 },
- { 181, 9569 },
- { 182, 9570 },
- { 183, 9558 },
- { 184, 9557 },
- { 185, 9571 },
- { 186, 9553 },
- { 187, 9559 },
- { 188, 9565 },
- { 189, 9564 },
- { 190, 9563 },
- { 191, 9488 },
- { 192, 9492 },
- { 193, 9524 },
- { 194, 9516 },
- { 195, 9500 },
- { 196, 9472 },
- { 197, 9532 },
- { 198, 9566 },
- { 199, 9567 },
- { 200, 9562 },
- { 201, 9556 },
- { 202, 9577 },
- { 203, 9574 },
- { 204, 9568 },
- { 205, 9552 },
- { 206, 9580 },
- { 207, 9575 },
- { 208, 9576 },
- { 209, 9572 },
- { 210, 9573 },
- { 211, 9561 },
- { 212, 9560 },
- { 213, 9554 },
- { 214, 9555 },
- { 215, 9579 },
- { 216, 9578 },
- { 217, 9496 },
- { 218, 9484 },
- { 219, 9608 },
- { 220, 9604 },
- { 221, 9612 },
- { 222, 9616 },
- { 223, 9600 },
- { 224, 945 },
- { 225, 223 },
- { 226, 915 },
- { 227, 960 },
- { 228, 931 },
- { 229, 963 },
- { 230, 181 },
- { 231, 964 },
- { 232, 934 },
- { 233, 920 },
- { 234, 937 },
- { 235, 948 },
- { 236, 8734 },
- { 237, 966 },
- { 238, 949 },
- { 239, 8745 },
- { 240, 8801 },
- { 241, 177 },
- { 242, 8805 },
- { 243, 8804 },
- { 244, 8992 },
- { 245, 8993 },
- { 246, 247 },
- { 247, 8776 },
- { 248, 176 },
- { 249, 8729 },
- { 250, 183 },
- { 251, 8730 },
- { 252, 8319 },
- { 253, 178 },
- { 254, 9632 },
- { 255, 160 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 193 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 225 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 218 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp864[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 176 },
- { 129, 183 },
- { 130, 8729 },
- { 131, 8730 },
- { 132, 9618 },
- { 133, 9472 },
- { 134, 9474 },
- { 135, 9532 },
- { 136, 9508 },
- { 137, 9516 },
- { 138, 9500 },
- { 139, 9524 },
- { 140, 9488 },
- { 141, 9484 },
- { 142, 9492 },
- { 143, 9496 },
- { 144, 946 },
- { 145, 8734 },
- { 146, 966 },
- { 147, 177 },
- { 148, 189 },
- { 149, 188 },
- { 150, 8776 },
- { 151, 171 },
- { 152, 187 },
- { 153, 65271 },
- { 154, 65272 },
- { 155, 155 },
- { 156, 156 },
- { 157, 65275 },
- { 158, 65276 },
- { 159, 159 },
- { 160, 160 },
- { 161, 173 },
- { 162, 65154 },
- { 163, 163 },
- { 164, 164 },
- { 165, 65156 },
- { 166, 166 },
- { 167, 167 },
- { 168, 65166 },
- { 169, 1576 },
- { 170, 1578 },
- { 171, 1579 },
- { 172, 1548 },
- { 173, 1580 },
- { 174, 1581 },
- { 175, 1582 },
- { 176, 1632 },
- { 177, 1633 },
- { 178, 1634 },
- { 179, 1635 },
- { 180, 1636 },
- { 181, 1637 },
- { 182, 1638 },
- { 183, 1639 },
- { 184, 1640 },
- { 185, 1641 },
- { 186, 1601 },
- { 187, 1563 },
- { 188, 1587 },
- { 189, 1588 },
- { 190, 1589 },
- { 191, 1567 },
- { 192, 162 },
- { 193, 1569 },
- { 194, 1570 },
- { 195, 1571 },
- { 196, 1572 },
- { 197, 65226 },
- { 198, 65163 },
- { 199, 1575 },
- { 200, 65169 },
- { 201, 1577 },
- { 202, 65175 },
- { 203, 65179 },
- { 204, 65183 },
- { 205, 65187 },
- { 206, 65191 },
- { 207, 1583 },
- { 208, 1584 },
- { 209, 1585 },
- { 210, 1586 },
- { 211, 65203 },
- { 212, 65207 },
- { 213, 65211 },
- { 214, 65215 },
- { 215, 1591 },
- { 216, 1592 },
- { 217, 65227 },
- { 218, 65231 },
- { 219, 166 },
- { 220, 172 },
- { 221, 247 },
- { 222, 215 },
- { 223, 1593 },
- { 224, 1600 },
- { 225, 65235 },
- { 226, 65239 },
- { 227, 65243 },
- { 228, 65247 },
- { 229, 65251 },
- { 230, 65255 },
- { 231, 65259 },
- { 232, 1608 },
- { 233, 1609 },
- { 234, 65267 },
- { 235, 1590 },
- { 236, 65228 },
- { 237, 65230 },
- { 238, 1594 },
- { 239, 1605 },
- { 240, 65149 },
- { 241, 1617 },
- { 242, 1606 },
- { 243, 1607 },
- { 244, 65260 },
- { 245, 65264 },
- { 246, 65266 },
- { 247, 65232 },
- { 248, 1602 },
- { 249, 65269 },
- { 250, 65270 },
- { 251, 1604 },
- { 252, 1603 },
- { 253, 1610 },
- { 254, 9632 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 244 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 220 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 252 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp865[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 199 },
- { 129, 252 },
- { 130, 233 },
- { 131, 226 },
- { 132, 228 },
- { 133, 224 },
- { 134, 229 },
- { 135, 231 },
- { 136, 234 },
- { 137, 235 },
- { 138, 232 },
- { 139, 239 },
- { 140, 238 },
- { 141, 236 },
- { 142, 196 },
- { 143, 197 },
- { 144, 201 },
- { 145, 230 },
- { 146, 198 },
- { 147, 244 },
- { 148, 246 },
- { 149, 242 },
- { 150, 251 },
- { 151, 249 },
- { 152, 255 },
- { 153, 214 },
- { 154, 220 },
- { 155, 248 },
- { 156, 163 },
- { 157, 216 },
- { 158, 8359 },
- { 159, 402 },
- { 160, 225 },
- { 161, 237 },
- { 162, 243 },
- { 163, 250 },
- { 164, 241 },
- { 165, 209 },
- { 166, 170 },
- { 167, 186 },
- { 168, 191 },
- { 169, 8976 },
- { 170, 172 },
- { 171, 189 },
- { 172, 188 },
- { 173, 161 },
- { 174, 171 },
- { 175, 164 },
- { 176, 9617 },
- { 177, 9618 },
- { 178, 9619 },
- { 179, 9474 },
- { 180, 9508 },
- { 181, 9569 },
- { 182, 9570 },
- { 183, 9558 },
- { 184, 9557 },
- { 185, 9571 },
- { 186, 9553 },
- { 187, 9559 },
- { 188, 9565 },
- { 189, 9564 },
- { 190, 9563 },
- { 191, 9488 },
- { 192, 9492 },
- { 193, 9524 },
- { 194, 9516 },
- { 195, 9500 },
- { 196, 9472 },
- { 197, 9532 },
- { 198, 9566 },
- { 199, 9567 },
- { 200, 9562 },
- { 201, 9556 },
- { 202, 9577 },
- { 203, 9574 },
- { 204, 9568 },
- { 205, 9552 },
- { 206, 9580 },
- { 207, 9575 },
- { 208, 9576 },
- { 209, 9572 },
- { 210, 9573 },
- { 211, 9561 },
- { 212, 9560 },
- { 213, 9554 },
- { 214, 9555 },
- { 215, 9579 },
- { 216, 9578 },
- { 217, 9496 },
- { 218, 9484 },
- { 219, 9608 },
- { 220, 9604 },
- { 221, 9612 },
- { 222, 9616 },
- { 223, 9600 },
- { 224, 945 },
- { 225, 223 },
- { 226, 915 },
- { 227, 960 },
- { 228, 931 },
- { 229, 963 },
- { 230, 181 },
- { 231, 964 },
- { 232, 934 },
- { 233, 920 },
- { 234, 937 },
- { 235, 948 },
- { 236, 8734 },
- { 237, 966 },
- { 238, 949 },
- { 239, 8745 },
- { 240, 8801 },
- { 241, 177 },
- { 242, 8805 },
- { 243, 8804 },
- { 244, 8992 },
- { 245, 8993 },
- { 246, 247 },
- { 247, 8776 },
- { 248, 176 },
- { 249, 8729 },
- { 250, 183 },
- { 251, 8730 },
- { 252, 8319 },
- { 253, 178 },
- { 254, 9632 },
- { 255, 160 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 227 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 245 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp866[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 1040 },
- { 129, 1041 },
- { 130, 1042 },
- { 131, 1043 },
- { 132, 1044 },
- { 133, 1045 },
- { 134, 1046 },
- { 135, 1047 },
- { 136, 1048 },
- { 137, 1049 },
- { 138, 1050 },
- { 139, 1051 },
- { 140, 1052 },
- { 141, 1053 },
- { 142, 1054 },
- { 143, 1055 },
- { 144, 1056 },
- { 145, 1057 },
- { 146, 1058 },
- { 147, 1059 },
- { 148, 1060 },
- { 149, 1061 },
- { 150, 1062 },
- { 151, 1063 },
- { 152, 1064 },
- { 153, 1065 },
- { 154, 1066 },
- { 155, 1067 },
- { 156, 1068 },
- { 157, 1069 },
- { 158, 1070 },
- { 159, 1071 },
- { 160, 1072 },
- { 161, 1073 },
- { 162, 1074 },
- { 163, 1075 },
- { 164, 1076 },
- { 165, 1077 },
- { 166, 1078 },
- { 167, 1079 },
- { 168, 1080 },
- { 169, 1081 },
- { 170, 1082 },
- { 171, 1083 },
- { 172, 1084 },
- { 173, 1085 },
- { 174, 1086 },
- { 175, 1087 },
- { 176, 9617 },
- { 177, 9618 },
- { 178, 9619 },
- { 179, 9474 },
- { 180, 9508 },
- { 181, 9569 },
- { 182, 9570 },
- { 183, 9558 },
- { 184, 9557 },
- { 185, 9571 },
- { 186, 9553 },
- { 187, 9559 },
- { 188, 9565 },
- { 189, 9564 },
- { 190, 9563 },
- { 191, 9488 },
- { 192, 9492 },
- { 193, 9524 },
- { 194, 9516 },
- { 195, 9500 },
- { 196, 9472 },
- { 197, 9532 },
- { 198, 9566 },
- { 199, 9567 },
- { 200, 9562 },
- { 201, 9556 },
- { 202, 9577 },
- { 203, 9574 },
- { 204, 9568 },
- { 205, 9552 },
- { 206, 9580 },
- { 207, 9575 },
- { 208, 9576 },
- { 209, 9572 },
- { 210, 9573 },
- { 211, 9561 },
- { 212, 9560 },
- { 213, 9554 },
- { 214, 9555 },
- { 215, 9579 },
- { 216, 9578 },
- { 217, 9496 },
- { 218, 9484 },
- { 219, 9608 },
- { 220, 9604 },
- { 221, 9612 },
- { 222, 9616 },
- { 223, 9600 },
- { 224, 1088 },
- { 225, 1089 },
- { 226, 1090 },
- { 227, 1091 },
- { 228, 1092 },
- { 229, 1093 },
- { 230, 1094 },
- { 231, 1095 },
- { 232, 1096 },
- { 233, 1097 },
- { 234, 1098 },
- { 235, 1099 },
- { 236, 1100 },
- { 237, 1101 },
- { 238, 1102 },
- { 239, 1103 },
- { 240, 1025 },
- { 241, 1105 },
- { 242, 1028 },
- { 243, 1108 },
- { 244, 1031 },
- { 245, 1111 },
- { 246, 1038 },
- { 247, 1118 },
- { 248, 176 },
- { 249, 8729 },
- { 250, 183 },
- { 251, 8730 },
- { 252, 8470 },
- { 253, 164 },
- { 254, 9632 },
- { 255, 160 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 244 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 220 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 252 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp869[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 902 },
- { 135, 135 },
- { 136, 183 },
- { 137, 172 },
- { 138, 166 },
- { 139, 8216 },
- { 140, 8217 },
- { 141, 904 },
- { 142, 8213 },
- { 143, 905 },
- { 144, 906 },
- { 145, 938 },
- { 146, 908 },
- { 147, 147 },
- { 148, 148 },
- { 149, 910 },
- { 150, 939 },
- { 151, 169 },
- { 152, 911 },
- { 153, 178 },
- { 154, 179 },
- { 155, 940 },
- { 156, 163 },
- { 157, 941 },
- { 158, 942 },
- { 159, 943 },
- { 160, 970 },
- { 161, 912 },
- { 162, 972 },
- { 163, 973 },
- { 164, 913 },
- { 165, 914 },
- { 166, 915 },
- { 167, 916 },
- { 168, 917 },
- { 169, 918 },
- { 170, 919 },
- { 171, 189 },
- { 172, 920 },
- { 173, 921 },
- { 174, 171 },
- { 175, 187 },
- { 176, 9617 },
- { 177, 9618 },
- { 178, 9619 },
- { 179, 9474 },
- { 180, 9508 },
- { 181, 922 },
- { 182, 923 },
- { 183, 924 },
- { 184, 925 },
- { 185, 9571 },
- { 186, 9553 },
- { 187, 9559 },
- { 188, 9565 },
- { 189, 926 },
- { 190, 927 },
- { 191, 9488 },
- { 192, 9492 },
- { 193, 9524 },
- { 194, 9516 },
- { 195, 9500 },
- { 196, 9472 },
- { 197, 9532 },
- { 198, 928 },
- { 199, 929 },
- { 200, 9562 },
- { 201, 9556 },
- { 202, 9577 },
- { 203, 9574 },
- { 204, 9568 },
- { 205, 9552 },
- { 206, 9580 },
- { 207, 931 },
- { 208, 932 },
- { 209, 933 },
- { 210, 934 },
- { 211, 935 },
- { 212, 936 },
- { 213, 937 },
- { 214, 945 },
- { 215, 946 },
- { 216, 947 },
- { 217, 9496 },
- { 218, 9484 },
- { 219, 9608 },
- { 220, 9604 },
- { 221, 948 },
- { 222, 949 },
- { 223, 9600 },
- { 224, 950 },
- { 225, 951 },
- { 226, 952 },
- { 227, 953 },
- { 228, 954 },
- { 229, 955 },
- { 230, 956 },
- { 231, 957 },
- { 232, 958 },
- { 233, 959 },
- { 234, 960 },
- { 235, 961 },
- { 236, 963 },
- { 237, 962 },
- { 238, 964 },
- { 239, 900 },
- { 240, 173 },
- { 241, 177 },
- { 242, 965 },
- { 243, 966 },
- { 244, 967 },
- { 245, 167 },
- { 246, 968 },
- { 247, 901 },
- { 248, 176 },
- { 249, 168 },
- { 250, 969 },
- { 251, 971 },
- { 252, 944 },
- { 253, 974 },
- { 254, 9632 },
- { 255, 160 },
- { 34, 8220 },
- { 34, 8221 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 244 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 220 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 252 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp874[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 8364 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 8230 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 8216 },
- { 146, 8217 },
- { 147, 8220 },
- { 148, 8221 },
- { 149, 8226 },
- { 150, 8211 },
- { 151, 8212 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 3585 },
- { 162, 3586 },
- { 163, 3587 },
- { 164, 3588 },
- { 165, 3589 },
- { 166, 3590 },
- { 167, 3591 },
- { 168, 3592 },
- { 169, 3593 },
- { 170, 3594 },
- { 171, 3595 },
- { 172, 3596 },
- { 173, 3597 },
- { 174, 3598 },
- { 175, 3599 },
- { 176, 3600 },
- { 177, 3601 },
- { 178, 3602 },
- { 179, 3603 },
- { 180, 3604 },
- { 181, 3605 },
- { 182, 3606 },
- { 183, 3607 },
- { 184, 3608 },
- { 185, 3609 },
- { 186, 3610 },
- { 187, 3611 },
- { 188, 3612 },
- { 189, 3613 },
- { 190, 3614 },
- { 191, 3615 },
- { 192, 3616 },
- { 193, 3617 },
- { 194, 3618 },
- { 195, 3619 },
- { 196, 3620 },
- { 197, 3621 },
- { 198, 3622 },
- { 199, 3623 },
- { 200, 3624 },
- { 201, 3625 },
- { 202, 3626 },
- { 203, 3627 },
- { 204, 3628 },
- { 205, 3629 },
- { 206, 3630 },
- { 207, 3631 },
- { 208, 3632 },
- { 209, 3633 },
- { 210, 3634 },
- { 211, 3635 },
- { 212, 3636 },
- { 213, 3637 },
- { 214, 3638 },
- { 215, 3639 },
- { 216, 3640 },
- { 217, 3641 },
- { 218, 3642 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 3647 },
- { 224, 3648 },
- { 225, 3649 },
- { 226, 3650 },
- { 227, 3651 },
- { 228, 3652 },
- { 229, 3653 },
- { 230, 3654 },
- { 231, 3655 },
- { 232, 3656 },
- { 233, 3657 },
- { 234, 3658 },
- { 235, 3659 },
- { 236, 3660 },
- { 237, 3661 },
- { 238, 3662 },
- { 239, 3663 },
- { 240, 3664 },
- { 241, 3665 },
- { 242, 3666 },
- { 243, 3667 },
- { 244, 3668 },
- { 245, 3669 },
- { 246, 3670 },
- { 247, 3671 },
- { 248, 3672 },
- { 249, 3673 },
- { 250, 3674 },
- { 251, 3675 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 244 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp895[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 268 },
- { 129, 252 },
- { 130, 233 },
- { 131, 271 },
- { 132, 228 },
- { 133, 270 },
- { 134, 356 },
- { 135, 269 },
- { 136, 283 },
- { 137, 282 },
- { 138, 313 },
- { 139, 205 },
- { 140, 318 },
- { 141, 314 },
- { 142, 196 },
- { 143, 193 },
- { 144, 201 },
- { 145, 382 },
- { 146, 381 },
- { 147, 244 },
- { 148, 246 },
- { 149, 211 },
- { 150, 367 },
- { 151, 218 },
- { 152, 253 },
- { 153, 214 },
- { 154, 220 },
- { 155, 352 },
- { 156, 317 },
- { 157, 221 },
- { 158, 344 },
- { 159, 357 },
- { 160, 225 },
- { 161, 237 },
- { 162, 243 },
- { 163, 250 },
- { 164, 328 },
- { 165, 327 },
- { 166, 366 },
- { 167, 212 },
- { 168, 353 },
- { 169, 345 },
- { 170, 341 },
- { 171, 340 },
- { 172, 188 },
- { 173, 161 },
- { 174, 171 },
- { 175, 187 },
- { 176, 9617 },
- { 177, 9618 },
- { 178, 9619 },
- { 179, 9474 },
- { 180, 9508 },
- { 181, 9569 },
- { 182, 9570 },
- { 183, 9558 },
- { 184, 9557 },
- { 185, 9571 },
- { 186, 9553 },
- { 187, 9559 },
- { 188, 9565 },
- { 189, 9564 },
- { 190, 9563 },
- { 191, 9488 },
- { 192, 9492 },
- { 193, 9524 },
- { 194, 9516 },
- { 195, 9500 },
- { 196, 9472 },
- { 197, 9532 },
- { 198, 9566 },
- { 199, 9567 },
- { 200, 9562 },
- { 201, 9556 },
- { 202, 9577 },
- { 203, 9574 },
- { 204, 9568 },
- { 205, 9552 },
- { 206, 9580 },
- { 207, 9575 },
- { 208, 9576 },
- { 209, 9572 },
- { 210, 9573 },
- { 211, 9561 },
- { 212, 9560 },
- { 213, 9554 },
- { 214, 9555 },
- { 215, 9579 },
- { 216, 9578 },
- { 217, 9496 },
- { 218, 9484 },
- { 219, 9608 },
- { 220, 9604 },
- { 221, 9612 },
- { 222, 9616 },
- { 223, 9600 },
- { 224, 945 },
- { 225, 223 },
- { 226, 915 },
- { 227, 960 },
- { 228, 931 },
- { 229, 963 },
- { 230, 181 },
- { 231, 964 },
- { 232, 934 },
- { 233, 920 },
- { 234, 937 },
- { 235, 948 },
- { 236, 8734 },
- { 237, 966 },
- { 238, 949 },
- { 239, 8745 },
- { 240, 8801 },
- { 241, 177 },
- { 242, 8805 },
- { 243, 8804 },
- { 244, 8992 },
- { 245, 8993 },
- { 246, 247 },
- { 247, 8776 },
- { 248, 176 },
- { 249, 8729 },
- { 250, 183 },
- { 251, 8730 },
- { 252, 8319 },
- { 253, 178 },
- { 254, 9632 },
- { 255, 160 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 194 },
- { 65, 195 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 226 },
- { 97, 227 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 69, 200 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 101, 232 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 315 },
- { 76, 319 },
- { 76, 321 },
- { 108, 316 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 329 },
- { 78, 210 },
- { 78, 213 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 245 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 342 },
- { 114, 343 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 84, 354 },
- { 116, 355 },
- { 85, 217 },
- { 85, 219 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 251 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 122, 378 },
- { 122, 380 },
-};
-static convert_t cp1250[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 8364 },
- { 129, 129 },
- { 130, 8218 },
- { 131, 131 },
- { 132, 8222 },
- { 133, 8230 },
- { 134, 8224 },
- { 135, 8225 },
- { 136, 136 },
- { 137, 8240 },
- { 138, 352 },
- { 139, 8249 },
- { 140, 346 },
- { 141, 356 },
- { 142, 381 },
- { 143, 377 },
- { 144, 144 },
- { 145, 8216 },
- { 146, 8217 },
- { 147, 8220 },
- { 148, 8221 },
- { 149, 8226 },
- { 150, 8211 },
- { 151, 8212 },
- { 152, 152 },
- { 153, 8482 },
- { 154, 353 },
- { 155, 8250 },
- { 156, 347 },
- { 157, 357 },
- { 158, 382 },
- { 159, 378 },
- { 160, 160 },
- { 161, 711 },
- { 162, 728 },
- { 163, 321 },
- { 164, 164 },
- { 165, 260 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 350 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 379 },
- { 176, 176 },
- { 177, 177 },
- { 178, 731 },
- { 179, 322 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 261 },
- { 186, 351 },
- { 187, 187 },
- { 188, 376 },
- { 189, 733 },
- { 190, 317 },
- { 191, 380 },
- { 192, 340 },
- { 193, 193 },
- { 194, 194 },
- { 195, 258 },
- { 196, 196 },
- { 197, 313 },
- { 198, 262 },
- { 199, 199 },
- { 200, 268 },
- { 201, 201 },
- { 202, 280 },
- { 203, 203 },
- { 204, 282 },
- { 205, 205 },
- { 206, 206 },
- { 207, 270 },
- { 208, 272 },
- { 209, 323 },
- { 210, 327 },
- { 211, 211 },
- { 212, 212 },
- { 213, 336 },
- { 214, 214 },
- { 215, 215 },
- { 216, 344 },
- { 217, 366 },
- { 218, 218 },
- { 219, 368 },
- { 220, 220 },
- { 221, 221 },
- { 222, 354 },
- { 223, 223 },
- { 224, 341 },
- { 225, 225 },
- { 226, 226 },
- { 227, 259 },
- { 228, 228 },
- { 229, 314 },
- { 230, 263 },
- { 231, 231 },
- { 232, 269 },
- { 233, 233 },
- { 234, 281 },
- { 235, 235 },
- { 236, 283 },
- { 237, 237 },
- { 238, 238 },
- { 239, 271 },
- { 240, 273 },
- { 241, 324 },
- { 242, 328 },
- { 243, 243 },
- { 244, 244 },
- { 245, 337 },
- { 246, 246 },
- { 247, 247 },
- { 248, 345 },
- { 249, 367 },
- { 250, 250 },
- { 251, 369 },
- { 252, 252 },
- { 253, 253 },
- { 254, 355 },
- { 255, 729 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 195 },
- { 65, 197 },
- { 65, 256 },
- { 65, 461 },
- { 97, 224 },
- { 97, 227 },
- { 97, 229 },
- { 97, 257 },
- { 97, 462 },
- { 67, 264 },
- { 67, 266 },
- { 99, 265 },
- { 99, 267 },
- { 69, 200 },
- { 69, 202 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 101, 232 },
- { 101, 234 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 315 },
- { 76, 319 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 77, 209 },
- { 77, 325 },
- { 109, 241 },
- { 109, 326 },
- { 109, 329 },
- { 78, 210 },
- { 78, 213 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 245 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 466 },
- { 110, 491 },
- { 82, 342 },
- { 114, 343 },
- { 83, 348 },
- { 115, 349 },
- { 85, 217 },
- { 85, 219 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 251 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 121, 255 },
- { 121, 375 },
-};
-static convert_t cp1251[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 1026 },
- { 129, 1027 },
- { 130, 8218 },
- { 131, 1107 },
- { 132, 8222 },
- { 133, 8230 },
- { 134, 8224 },
- { 135, 8225 },
- { 136, 8364 },
- { 137, 8240 },
- { 138, 1033 },
- { 139, 8249 },
- { 140, 1034 },
- { 141, 1036 },
- { 142, 1035 },
- { 143, 1039 },
- { 144, 1106 },
- { 145, 8216 },
- { 146, 8217 },
- { 147, 8220 },
- { 148, 8221 },
- { 149, 8226 },
- { 150, 8211 },
- { 151, 8212 },
- { 152, 152 },
- { 153, 8482 },
- { 154, 1113 },
- { 155, 8250 },
- { 156, 1114 },
- { 157, 1116 },
- { 158, 1115 },
- { 159, 1119 },
- { 160, 160 },
- { 161, 1038 },
- { 162, 1118 },
- { 163, 1032 },
- { 164, 164 },
- { 165, 1168 },
- { 166, 166 },
- { 167, 167 },
- { 168, 1025 },
- { 169, 169 },
- { 170, 1028 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 1031 },
- { 176, 176 },
- { 177, 177 },
- { 178, 1030 },
- { 179, 1110 },
- { 180, 1169 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 1105 },
- { 185, 8470 },
- { 186, 1108 },
- { 187, 187 },
- { 188, 1112 },
- { 189, 1029 },
- { 190, 1109 },
- { 191, 1111 },
- { 192, 1040 },
- { 193, 1041 },
- { 194, 1042 },
- { 195, 1043 },
- { 196, 1044 },
- { 197, 1045 },
- { 198, 1046 },
- { 199, 1047 },
- { 200, 1048 },
- { 201, 1049 },
- { 202, 1050 },
- { 203, 1051 },
- { 204, 1052 },
- { 205, 1053 },
- { 206, 1054 },
- { 207, 1055 },
- { 208, 1056 },
- { 209, 1057 },
- { 210, 1058 },
- { 211, 1059 },
- { 212, 1060 },
- { 213, 1061 },
- { 214, 1062 },
- { 215, 1063 },
- { 216, 1064 },
- { 217, 1065 },
- { 218, 1066 },
- { 219, 1067 },
- { 220, 1068 },
- { 221, 1069 },
- { 222, 1070 },
- { 223, 1071 },
- { 224, 1072 },
- { 225, 1073 },
- { 226, 1074 },
- { 227, 1075 },
- { 228, 1076 },
- { 229, 1077 },
- { 230, 1078 },
- { 231, 1079 },
- { 232, 1080 },
- { 233, 1081 },
- { 234, 1082 },
- { 235, 1083 },
- { 236, 1084 },
- { 237, 1085 },
- { 238, 1086 },
- { 239, 1087 },
- { 240, 1088 },
- { 241, 1089 },
- { 242, 1090 },
- { 243, 1091 },
- { 244, 1092 },
- { 245, 1093 },
- { 246, 1094 },
- { 247, 1095 },
- { 248, 1096 },
- { 249, 1097 },
- { 250, 1098 },
- { 251, 1099 },
- { 252, 1100 },
- { 253, 1101 },
- { 254, 1102 },
- { 255, 1103 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 244 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 220 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 252 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp1252[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 8364 },
- { 129, 129 },
- { 130, 8218 },
- { 131, 402 },
- { 132, 8222 },
- { 133, 8230 },
- { 134, 8224 },
- { 135, 8225 },
- { 136, 710 },
- { 137, 8240 },
- { 138, 352 },
- { 139, 8249 },
- { 140, 338 },
- { 141, 141 },
- { 142, 381 },
- { 143, 143 },
- { 144, 144 },
- { 145, 8216 },
- { 146, 8217 },
- { 147, 8220 },
- { 148, 8221 },
- { 149, 8226 },
- { 150, 8211 },
- { 151, 8212 },
- { 152, 732 },
- { 153, 8482 },
- { 154, 353 },
- { 155, 8250 },
- { 156, 339 },
- { 157, 157 },
- { 158, 382 },
- { 159, 376 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 122, 378 },
- { 122, 380 },
-};
-static convert_t cp1253[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 8364 },
- { 129, 129 },
- { 130, 8218 },
- { 131, 402 },
- { 132, 8222 },
- { 133, 8230 },
- { 134, 8224 },
- { 135, 8225 },
- { 136, 136 },
- { 137, 8240 },
- { 138, 138 },
- { 139, 8249 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 8216 },
- { 146, 8217 },
- { 147, 8220 },
- { 148, 8221 },
- { 149, 8226 },
- { 150, 8211 },
- { 151, 8212 },
- { 152, 152 },
- { 153, 8482 },
- { 154, 154 },
- { 155, 8250 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 901 },
- { 162, 902 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 8213 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 900 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 904 },
- { 185, 905 },
- { 186, 906 },
- { 187, 187 },
- { 188, 908 },
- { 189, 189 },
- { 190, 910 },
- { 191, 911 },
- { 192, 912 },
- { 193, 913 },
- { 194, 914 },
- { 195, 915 },
- { 196, 916 },
- { 197, 917 },
- { 198, 918 },
- { 199, 919 },
- { 200, 920 },
- { 201, 921 },
- { 202, 922 },
- { 203, 923 },
- { 204, 924 },
- { 205, 925 },
- { 206, 926 },
- { 207, 927 },
- { 208, 928 },
- { 209, 929 },
- { 210, 210 },
- { 211, 931 },
- { 212, 932 },
- { 213, 933 },
- { 214, 934 },
- { 215, 935 },
- { 216, 936 },
- { 217, 937 },
- { 218, 938 },
- { 219, 939 },
- { 220, 940 },
- { 221, 941 },
- { 222, 942 },
- { 223, 943 },
- { 224, 944 },
- { 225, 945 },
- { 226, 946 },
- { 227, 947 },
- { 228, 948 },
- { 229, 949 },
- { 230, 950 },
- { 231, 951 },
- { 232, 952 },
- { 233, 953 },
- { 234, 954 },
- { 235, 955 },
- { 236, 956 },
- { 237, 957 },
- { 238, 958 },
- { 239, 959 },
- { 240, 960 },
- { 241, 961 },
- { 242, 962 },
- { 243, 963 },
- { 244, 964 },
- { 245, 965 },
- { 246, 966 },
- { 247, 967 },
- { 248, 968 },
- { 249, 969 },
- { 250, 970 },
- { 251, 971 },
- { 252, 972 },
- { 253, 973 },
- { 254, 974 },
- { 255, 255 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 244 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 220 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 252 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp1254[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 8364 },
- { 129, 129 },
- { 130, 8218 },
- { 131, 402 },
- { 132, 8222 },
- { 133, 8230 },
- { 134, 8224 },
- { 135, 8225 },
- { 136, 710 },
- { 137, 8240 },
- { 138, 352 },
- { 139, 8249 },
- { 140, 338 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 8216 },
- { 146, 8217 },
- { 147, 8220 },
- { 148, 8221 },
- { 149, 8226 },
- { 150, 8211 },
- { 151, 8212 },
- { 152, 732 },
- { 153, 8482 },
- { 154, 353 },
- { 155, 8250 },
- { 156, 339 },
- { 157, 157 },
- { 158, 158 },
- { 159, 376 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 286 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 304 },
- { 222, 350 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 287 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 305 },
- { 254, 351 },
- { 255, 255 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 115, 347 },
- { 115, 349 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 121, 253 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp1255[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 8364 },
- { 129, 129 },
- { 130, 8218 },
- { 131, 402 },
- { 132, 8222 },
- { 133, 8230 },
- { 134, 8224 },
- { 135, 8225 },
- { 136, 136 },
- { 137, 8240 },
- { 138, 138 },
- { 139, 8249 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 8216 },
- { 146, 8217 },
- { 147, 8220 },
- { 148, 8221 },
- { 149, 8226 },
- { 150, 8211 },
- { 151, 8212 },
- { 152, 152 },
- { 153, 8482 },
- { 154, 154 },
- { 155, 8250 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 215 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 781 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 247 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 8215 },
- { 224, 1488 },
- { 225, 1489 },
- { 226, 1490 },
- { 227, 1491 },
- { 228, 1492 },
- { 229, 1493 },
- { 230, 1494 },
- { 231, 1495 },
- { 232, 1496 },
- { 233, 1497 },
- { 234, 1498 },
- { 235, 1499 },
- { 236, 1500 },
- { 237, 1501 },
- { 238, 1502 },
- { 239, 1503 },
- { 240, 1504 },
- { 241, 1505 },
- { 242, 1506 },
- { 243, 1507 },
- { 244, 1508 },
- { 245, 1509 },
- { 246, 1510 },
- { 247, 1511 },
- { 248, 1512 },
- { 249, 1513 },
- { 250, 1514 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 244 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp1256[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 1548 },
- { 129, 129 },
- { 130, 8218 },
- { 131, 131 },
- { 132, 8222 },
- { 133, 8230 },
- { 134, 8224 },
- { 135, 8225 },
- { 136, 136 },
- { 137, 8240 },
- { 138, 138 },
- { 139, 8249 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 8216 },
- { 146, 8217 },
- { 147, 8220 },
- { 148, 8221 },
- { 149, 8226 },
- { 150, 8211 },
- { 151, 8212 },
- { 152, 1563 },
- { 153, 8482 },
- { 154, 1567 },
- { 155, 8250 },
- { 156, 1569 },
- { 157, 1570 },
- { 158, 1571 },
- { 159, 376 },
- { 160, 160 },
- { 161, 1572 },
- { 162, 1573 },
- { 163, 163 },
- { 164, 164 },
- { 165, 1574 },
- { 166, 166 },
- { 167, 167 },
- { 168, 1575 },
- { 169, 169 },
- { 170, 1576 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 1577 },
- { 179, 1578 },
- { 180, 1579 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 1580 },
- { 185, 185 },
- { 186, 1581 },
- { 187, 187 },
- { 188, 1582 },
- { 189, 1583 },
- { 190, 1584 },
- { 191, 1585 },
- { 192, 192 },
- { 193, 1586 },
- { 194, 194 },
- { 195, 195 },
- { 196, 1587 },
- { 197, 1588 },
- { 198, 1589 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 1590 },
- { 205, 1591 },
- { 206, 206 },
- { 207, 207 },
- { 208, 1592 },
- { 209, 1593 },
- { 210, 1594 },
- { 211, 1600 },
- { 212, 212 },
- { 213, 1601 },
- { 214, 1602 },
- { 215, 215 },
- { 216, 1603 },
- { 217, 217 },
- { 218, 1711 },
- { 219, 219 },
- { 220, 220 },
- { 221, 1604 },
- { 222, 1605 },
- { 223, 1606 },
- { 224, 224 },
- { 225, 1607 },
- { 226, 226 },
- { 227, 227 },
- { 228, 1608 },
- { 229, 1609 },
- { 230, 1610 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 1611 },
- { 237, 1612 },
- { 238, 238 },
- { 239, 239 },
- { 240, 1613 },
- { 241, 1614 },
- { 242, 1615 },
- { 243, 1616 },
- { 244, 244 },
- { 245, 1617 },
- { 246, 1618 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 193 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 225 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 245 },
- { 110, 246 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 218 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t cp1257[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 8364 },
- { 129, 129 },
- { 130, 8218 },
- { 131, 131 },
- { 132, 8222 },
- { 133, 8230 },
- { 134, 8224 },
- { 135, 8225 },
- { 136, 136 },
- { 137, 8240 },
- { 138, 138 },
- { 139, 8249 },
- { 140, 140 },
- { 141, 168 },
- { 142, 711 },
- { 143, 184 },
- { 144, 144 },
- { 145, 8216 },
- { 146, 8217 },
- { 147, 8220 },
- { 148, 8221 },
- { 149, 8226 },
- { 150, 8211 },
- { 151, 8212 },
- { 152, 152 },
- { 153, 8482 },
- { 154, 154 },
- { 155, 8250 },
- { 156, 156 },
- { 157, 175 },
- { 158, 731 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 216 },
- { 169, 169 },
- { 170, 342 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 198 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 248 },
- { 185, 185 },
- { 186, 343 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 230 },
- { 192, 260 },
- { 193, 302 },
- { 194, 256 },
- { 195, 262 },
- { 196, 196 },
- { 197, 197 },
- { 198, 280 },
- { 199, 274 },
- { 200, 268 },
- { 201, 201 },
- { 202, 377 },
- { 203, 278 },
- { 204, 290 },
- { 205, 310 },
- { 206, 298 },
- { 207, 315 },
- { 208, 352 },
- { 209, 323 },
- { 210, 325 },
- { 211, 211 },
- { 212, 332 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 370 },
- { 217, 321 },
- { 218, 340 },
- { 219, 362 },
- { 220, 220 },
- { 221, 379 },
- { 222, 381 },
- { 223, 223 },
- { 224, 261 },
- { 225, 303 },
- { 226, 257 },
- { 227, 263 },
- { 228, 228 },
- { 229, 229 },
- { 230, 281 },
- { 231, 275 },
- { 232, 269 },
- { 233, 233 },
- { 234, 378 },
- { 235, 279 },
- { 236, 291 },
- { 237, 311 },
- { 238, 299 },
- { 239, 316 },
- { 240, 353 },
- { 241, 324 },
- { 242, 326 },
- { 243, 243 },
- { 244, 333 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 371 },
- { 249, 322 },
- { 250, 347 },
- { 251, 363 },
- { 252, 252 },
- { 253, 380 },
- { 254, 382 },
- { 255, 729 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 258 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 259 },
- { 97, 462 },
- { 67, 199 },
- { 67, 264 },
- { 67, 266 },
- { 99, 231 },
- { 99, 265 },
- { 99, 267 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 202 },
- { 69, 203 },
- { 69, 276 },
- { 69, 282 },
- { 101, 232 },
- { 101, 234 },
- { 101, 235 },
- { 101, 277 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 300 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 301 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 488 },
- { 107, 489 },
- { 76, 313 },
- { 76, 317 },
- { 76, 319 },
- { 108, 314 },
- { 108, 318 },
- { 108, 320 },
- { 77, 209 },
- { 77, 327 },
- { 109, 241 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 212 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 244 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 344 },
- { 114, 341 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 115, 349 },
- { 115, 351 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 360 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 361 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
-};
-static convert_t cp1258[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 8364 },
- { 129, 129 },
- { 130, 8218 },
- { 131, 402 },
- { 132, 8222 },
- { 133, 8230 },
- { 134, 8224 },
- { 135, 8225 },
- { 136, 710 },
- { 137, 8240 },
- { 138, 138 },
- { 139, 8249 },
- { 140, 338 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 8216 },
- { 146, 8217 },
- { 147, 8220 },
- { 148, 8221 },
- { 149, 8226 },
- { 150, 8211 },
- { 151, 8212 },
- { 152, 732 },
- { 153, 8482 },
- { 154, 154 },
- { 155, 8250 },
- { 156, 339 },
- { 157, 157 },
- { 158, 158 },
- { 159, 376 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 258 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 832 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 272 },
- { 209, 209 },
- { 210, 777 },
- { 211, 211 },
- { 212, 212 },
- { 213, 416 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 431 },
- { 222, 771 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 259 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 833 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 273 },
- { 241, 241 },
- { 242, 803 },
- { 243, 243 },
- { 244, 244 },
- { 245, 417 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 432 },
- { 254, 8363 },
- { 255, 255 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 195 },
- { 65, 256 },
- { 65, 260 },
- { 65, 461 },
- { 97, 227 },
- { 97, 257 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 213 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 245 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 121, 253 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t decmcs[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 164 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 338 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 376 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 339 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 255 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 121, 253 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t ebc037[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 32 },
- { 65, 160 },
- { 66, 226 },
- { 67, 228 },
- { 68, 224 },
- { 69, 225 },
- { 70, 227 },
- { 71, 229 },
- { 72, 231 },
- { 73, 241 },
- { 74, 162 },
- { 75, 46 },
- { 76, 60 },
- { 77, 40 },
- { 78, 43 },
- { 79, 124 },
- { 80, 38 },
- { 81, 233 },
- { 82, 234 },
- { 83, 235 },
- { 84, 232 },
- { 85, 237 },
- { 86, 238 },
- { 87, 239 },
- { 88, 236 },
- { 89, 223 },
- { 90, 33 },
- { 91, 36 },
- { 92, 42 },
- { 93, 41 },
- { 94, 59 },
- { 95, 172 },
- { 96, 45 },
- { 97, 47 },
- { 98, 194 },
- { 99, 196 },
- { 100, 192 },
- { 101, 193 },
- { 102, 195 },
- { 103, 197 },
- { 104, 199 },
- { 105, 209 },
- { 106, 166 },
- { 107, 44 },
- { 108, 37 },
- { 109, 95 },
- { 110, 62 },
- { 111, 63 },
- { 112, 248 },
- { 113, 201 },
- { 114, 202 },
- { 115, 203 },
- { 116, 200 },
- { 117, 205 },
- { 118, 206 },
- { 119, 207 },
- { 120, 204 },
- { 121, 96 },
- { 122, 58 },
- { 123, 35 },
- { 124, 64 },
- { 125, 39 },
- { 126, 61 },
- { 127, 34 },
- { 128, 216 },
- { 129, 97 },
- { 130, 98 },
- { 131, 99 },
- { 132, 100 },
- { 133, 101 },
- { 134, 102 },
- { 135, 103 },
- { 136, 104 },
- { 137, 105 },
- { 138, 171 },
- { 139, 187 },
- { 140, 240 },
- { 141, 253 },
- { 142, 254 },
- { 143, 177 },
- { 144, 176 },
- { 145, 106 },
- { 146, 107 },
- { 147, 108 },
- { 148, 109 },
- { 149, 110 },
- { 150, 111 },
- { 151, 112 },
- { 152, 113 },
- { 153, 114 },
- { 154, 170 },
- { 155, 186 },
- { 156, 230 },
- { 157, 184 },
- { 158, 198 },
- { 159, 164 },
- { 160, 181 },
- { 161, 126 },
- { 162, 115 },
- { 163, 116 },
- { 164, 117 },
- { 165, 118 },
- { 166, 119 },
- { 167, 120 },
- { 168, 121 },
- { 169, 122 },
- { 170, 161 },
- { 171, 191 },
- { 172, 208 },
- { 173, 221 },
- { 174, 222 },
- { 175, 174 },
- { 176, 94 },
- { 177, 163 },
- { 178, 165 },
- { 179, 183 },
- { 180, 169 },
- { 181, 167 },
- { 182, 182 },
- { 183, 188 },
- { 184, 189 },
- { 185, 190 },
- { 186, 91 },
- { 187, 93 },
- { 188, 175 },
- { 189, 168 },
- { 190, 180 },
- { 191, 215 },
- { 192, 123 },
- { 193, 65 },
- { 194, 66 },
- { 195, 67 },
- { 196, 68 },
- { 197, 69 },
- { 198, 70 },
- { 199, 71 },
- { 200, 72 },
- { 201, 73 },
- { 202, 173 },
- { 203, 244 },
- { 204, 246 },
- { 205, 242 },
- { 206, 243 },
- { 207, 245 },
- { 208, 125 },
- { 209, 74 },
- { 210, 75 },
- { 211, 76 },
- { 212, 77 },
- { 213, 78 },
- { 214, 79 },
- { 215, 80 },
- { 216, 81 },
- { 217, 82 },
- { 218, 185 },
- { 219, 251 },
- { 220, 252 },
- { 221, 249 },
- { 222, 250 },
- { 223, 255 },
- { 224, 92 },
- { 225, 247 },
- { 226, 83 },
- { 227, 84 },
- { 228, 85 },
- { 229, 86 },
- { 230, 87 },
- { 231, 88 },
- { 232, 89 },
- { 233, 90 },
- { 234, 178 },
- { 235, 212 },
- { 236, 214 },
- { 237, 210 },
- { 238, 211 },
- { 239, 213 },
- { 240, 48 },
- { 241, 49 },
- { 242, 50 },
- { 243, 51 },
- { 244, 52 },
- { 245, 53 },
- { 246, 54 },
- { 247, 55 },
- { 248, 56 },
- { 249, 57 },
- { 250, 179 },
- { 251, 219 },
- { 252, 220 },
- { 253, 217 },
- { 254, 218 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 193, 256 },
- { 193, 258 },
- { 193, 260 },
- { 193, 461 },
- { 129, 257 },
- { 129, 259 },
- { 129, 261 },
- { 129, 462 },
- { 195, 262 },
- { 195, 264 },
- { 195, 266 },
- { 195, 268 },
- { 131, 263 },
- { 131, 265 },
- { 131, 267 },
- { 131, 269 },
- { 196, 270 },
- { 132, 271 },
- { 197, 274 },
- { 197, 276 },
- { 197, 278 },
- { 197, 280 },
- { 197, 282 },
- { 133, 275 },
- { 133, 277 },
- { 133, 279 },
- { 133, 281 },
- { 133, 283 },
- { 199, 284 },
- { 199, 286 },
- { 199, 288 },
- { 199, 290 },
- { 199, 486 },
- { 199, 500 },
- { 135, 285 },
- { 135, 287 },
- { 135, 289 },
- { 135, 291 },
- { 135, 487 },
- { 135, 501 },
- { 200, 292 },
- { 136, 293 },
- { 201, 296 },
- { 201, 298 },
- { 201, 300 },
- { 201, 302 },
- { 201, 304 },
- { 201, 463 },
- { 137, 297 },
- { 137, 299 },
- { 137, 301 },
- { 137, 303 },
- { 137, 305 },
- { 137, 464 },
- { 209, 308 },
- { 145, 309 },
- { 210, 310 },
- { 210, 488 },
- { 146, 311 },
- { 146, 489 },
- { 211, 313 },
- { 211, 315 },
- { 211, 317 },
- { 211, 319 },
- { 211, 321 },
- { 147, 314 },
- { 147, 316 },
- { 147, 318 },
- { 147, 320 },
- { 147, 322 },
- { 212, 323 },
- { 212, 325 },
- { 212, 327 },
- { 148, 324 },
- { 148, 326 },
- { 148, 328 },
- { 148, 329 },
- { 213, 332 },
- { 213, 334 },
- { 213, 336 },
- { 213, 465 },
- { 213, 490 },
- { 149, 333 },
- { 149, 335 },
- { 149, 337 },
- { 149, 466 },
- { 149, 491 },
- { 217, 340 },
- { 217, 342 },
- { 217, 344 },
- { 153, 341 },
- { 153, 343 },
- { 153, 345 },
- { 226, 346 },
- { 226, 348 },
- { 226, 350 },
- { 226, 352 },
- { 162, 347 },
- { 162, 349 },
- { 162, 351 },
- { 162, 353 },
- { 227, 354 },
- { 227, 356 },
- { 163, 355 },
- { 163, 357 },
- { 228, 360 },
- { 228, 362 },
- { 228, 364 },
- { 228, 366 },
- { 228, 368 },
- { 228, 370 },
- { 228, 467 },
- { 164, 361 },
- { 164, 363 },
- { 164, 365 },
- { 164, 367 },
- { 164, 369 },
- { 164, 371 },
- { 164, 468 },
- { 230, 372 },
- { 166, 373 },
- { 232, 374 },
- { 232, 376 },
- { 168, 375 },
- { 233, 377 },
- { 233, 379 },
- { 233, 381 },
- { 169, 378 },
- { 169, 380 },
- { 169, 382 },
-};
-static convert_t ebc1026[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 32 },
- { 65, 160 },
- { 66, 226 },
- { 67, 228 },
- { 68, 224 },
- { 69, 225 },
- { 70, 227 },
- { 71, 229 },
- { 72, 123 },
- { 73, 241 },
- { 74, 199 },
- { 75, 46 },
- { 76, 60 },
- { 77, 40 },
- { 78, 43 },
- { 79, 33 },
- { 80, 38 },
- { 81, 233 },
- { 82, 234 },
- { 83, 235 },
- { 84, 232 },
- { 85, 237 },
- { 86, 238 },
- { 87, 239 },
- { 88, 236 },
- { 89, 223 },
- { 90, 286 },
- { 91, 304 },
- { 92, 42 },
- { 93, 41 },
- { 94, 59 },
- { 95, 94 },
- { 96, 45 },
- { 97, 47 },
- { 98, 194 },
- { 99, 196 },
- { 100, 192 },
- { 101, 193 },
- { 102, 195 },
- { 103, 197 },
- { 104, 91 },
- { 105, 209 },
- { 106, 351 },
- { 107, 44 },
- { 108, 37 },
- { 109, 95 },
- { 110, 62 },
- { 111, 63 },
- { 112, 248 },
- { 113, 201 },
- { 114, 202 },
- { 115, 203 },
- { 116, 200 },
- { 117, 205 },
- { 118, 206 },
- { 119, 207 },
- { 120, 204 },
- { 121, 305 },
- { 122, 58 },
- { 123, 214 },
- { 124, 350 },
- { 125, 39 },
- { 126, 61 },
- { 127, 220 },
- { 128, 216 },
- { 129, 97 },
- { 130, 98 },
- { 131, 99 },
- { 132, 100 },
- { 133, 101 },
- { 134, 102 },
- { 135, 103 },
- { 136, 104 },
- { 137, 105 },
- { 138, 171 },
- { 139, 187 },
- { 140, 125 },
- { 141, 96 },
- { 142, 166 },
- { 143, 177 },
- { 144, 176 },
- { 145, 106 },
- { 146, 107 },
- { 147, 108 },
- { 148, 109 },
- { 149, 110 },
- { 150, 111 },
- { 151, 112 },
- { 152, 113 },
- { 153, 114 },
- { 154, 170 },
- { 155, 186 },
- { 156, 230 },
- { 157, 184 },
- { 158, 198 },
- { 159, 164 },
- { 160, 181 },
- { 161, 246 },
- { 162, 115 },
- { 163, 116 },
- { 164, 117 },
- { 165, 118 },
- { 166, 119 },
- { 167, 120 },
- { 168, 121 },
- { 169, 122 },
- { 170, 161 },
- { 171, 191 },
- { 172, 93 },
- { 173, 36 },
- { 174, 64 },
- { 175, 174 },
- { 176, 162 },
- { 177, 163 },
- { 178, 165 },
- { 179, 183 },
- { 180, 169 },
- { 181, 167 },
- { 182, 182 },
- { 183, 188 },
- { 184, 189 },
- { 185, 190 },
- { 186, 172 },
- { 187, 124 },
- { 188, 175 },
- { 189, 168 },
- { 190, 180 },
- { 191, 215 },
- { 192, 231 },
- { 193, 65 },
- { 194, 66 },
- { 195, 67 },
- { 196, 68 },
- { 197, 69 },
- { 198, 70 },
- { 199, 71 },
- { 200, 72 },
- { 201, 73 },
- { 202, 173 },
- { 203, 244 },
- { 204, 126 },
- { 205, 242 },
- { 206, 243 },
- { 207, 245 },
- { 208, 287 },
- { 209, 74 },
- { 210, 75 },
- { 211, 76 },
- { 212, 77 },
- { 213, 78 },
- { 214, 79 },
- { 215, 80 },
- { 216, 81 },
- { 217, 82 },
- { 218, 185 },
- { 219, 251 },
- { 220, 92 },
- { 221, 249 },
- { 222, 250 },
- { 223, 255 },
- { 224, 252 },
- { 225, 247 },
- { 226, 83 },
- { 227, 84 },
- { 228, 85 },
- { 229, 86 },
- { 230, 87 },
- { 231, 88 },
- { 232, 89 },
- { 233, 90 },
- { 234, 178 },
- { 235, 212 },
- { 236, 35 },
- { 237, 210 },
- { 238, 211 },
- { 239, 213 },
- { 240, 48 },
- { 241, 49 },
- { 242, 50 },
- { 243, 51 },
- { 244, 52 },
- { 245, 53 },
- { 246, 54 },
- { 247, 55 },
- { 248, 56 },
- { 249, 57 },
- { 250, 179 },
- { 251, 219 },
- { 252, 34 },
- { 253, 217 },
- { 254, 218 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 193, 256 },
- { 193, 258 },
- { 193, 260 },
- { 193, 461 },
- { 129, 257 },
- { 129, 259 },
- { 129, 261 },
- { 129, 462 },
- { 195, 262 },
- { 195, 264 },
- { 195, 266 },
- { 195, 268 },
- { 131, 263 },
- { 131, 265 },
- { 131, 267 },
- { 131, 269 },
- { 196, 270 },
- { 132, 271 },
- { 197, 274 },
- { 197, 276 },
- { 197, 278 },
- { 197, 280 },
- { 197, 282 },
- { 133, 275 },
- { 133, 277 },
- { 133, 279 },
- { 133, 281 },
- { 133, 283 },
- { 199, 284 },
- { 199, 288 },
- { 199, 290 },
- { 199, 486 },
- { 199, 500 },
- { 135, 285 },
- { 135, 289 },
- { 135, 291 },
- { 135, 487 },
- { 135, 501 },
- { 200, 292 },
- { 136, 293 },
- { 201, 296 },
- { 201, 298 },
- { 201, 300 },
- { 201, 302 },
- { 201, 463 },
- { 137, 297 },
- { 137, 299 },
- { 137, 301 },
- { 137, 303 },
- { 137, 464 },
- { 209, 308 },
- { 145, 309 },
- { 210, 310 },
- { 210, 488 },
- { 146, 311 },
- { 146, 489 },
- { 211, 313 },
- { 211, 315 },
- { 211, 317 },
- { 211, 319 },
- { 211, 321 },
- { 147, 314 },
- { 147, 316 },
- { 147, 318 },
- { 147, 320 },
- { 147, 322 },
- { 212, 323 },
- { 212, 325 },
- { 212, 327 },
- { 148, 324 },
- { 148, 326 },
- { 148, 328 },
- { 148, 329 },
- { 213, 332 },
- { 213, 334 },
- { 213, 336 },
- { 213, 465 },
- { 213, 490 },
- { 149, 333 },
- { 149, 335 },
- { 149, 337 },
- { 149, 466 },
- { 149, 491 },
- { 217, 340 },
- { 217, 342 },
- { 217, 344 },
- { 153, 341 },
- { 153, 343 },
- { 153, 345 },
- { 226, 346 },
- { 226, 348 },
- { 226, 352 },
- { 162, 347 },
- { 162, 349 },
- { 162, 353 },
- { 227, 354 },
- { 227, 356 },
- { 163, 355 },
- { 163, 357 },
- { 228, 360 },
- { 228, 362 },
- { 228, 364 },
- { 228, 366 },
- { 228, 368 },
- { 228, 370 },
- { 228, 467 },
- { 164, 361 },
- { 164, 363 },
- { 164, 365 },
- { 164, 367 },
- { 164, 369 },
- { 164, 371 },
- { 164, 468 },
- { 230, 372 },
- { 166, 373 },
- { 232, 221 },
- { 232, 374 },
- { 232, 376 },
- { 168, 253 },
- { 168, 375 },
- { 233, 377 },
- { 233, 379 },
- { 233, 381 },
- { 169, 378 },
- { 169, 380 },
- { 169, 382 },
-};
-static convert_t ebc1047[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 32 },
- { 65, 160 },
- { 66, 226 },
- { 67, 228 },
- { 68, 224 },
- { 69, 225 },
- { 70, 227 },
- { 71, 229 },
- { 72, 231 },
- { 73, 241 },
- { 74, 162 },
- { 75, 46 },
- { 76, 60 },
- { 77, 40 },
- { 78, 43 },
- { 79, 124 },
- { 80, 38 },
- { 81, 233 },
- { 82, 234 },
- { 83, 235 },
- { 84, 232 },
- { 85, 237 },
- { 86, 238 },
- { 87, 239 },
- { 88, 236 },
- { 89, 223 },
- { 90, 33 },
- { 91, 36 },
- { 92, 42 },
- { 93, 41 },
- { 94, 59 },
- { 95, 94 },
- { 96, 45 },
- { 97, 47 },
- { 98, 194 },
- { 99, 196 },
- { 100, 192 },
- { 101, 193 },
- { 102, 195 },
- { 103, 197 },
- { 104, 199 },
- { 105, 209 },
- { 106, 166 },
- { 107, 44 },
- { 108, 37 },
- { 109, 95 },
- { 110, 62 },
- { 111, 63 },
- { 112, 248 },
- { 113, 201 },
- { 114, 202 },
- { 115, 203 },
- { 116, 200 },
- { 117, 205 },
- { 118, 206 },
- { 119, 207 },
- { 120, 204 },
- { 121, 96 },
- { 122, 58 },
- { 123, 35 },
- { 124, 64 },
- { 125, 39 },
- { 126, 61 },
- { 127, 34 },
- { 128, 216 },
- { 129, 97 },
- { 130, 98 },
- { 131, 99 },
- { 132, 100 },
- { 133, 101 },
- { 134, 102 },
- { 135, 103 },
- { 136, 104 },
- { 137, 105 },
- { 138, 171 },
- { 139, 187 },
- { 140, 240 },
- { 141, 253 },
- { 142, 254 },
- { 143, 177 },
- { 144, 176 },
- { 145, 106 },
- { 146, 107 },
- { 147, 108 },
- { 148, 109 },
- { 149, 110 },
- { 150, 111 },
- { 151, 112 },
- { 152, 113 },
- { 153, 114 },
- { 154, 170 },
- { 155, 186 },
- { 156, 230 },
- { 157, 184 },
- { 158, 198 },
- { 159, 164 },
- { 160, 181 },
- { 161, 126 },
- { 162, 115 },
- { 163, 116 },
- { 164, 117 },
- { 165, 118 },
- { 166, 119 },
- { 167, 120 },
- { 168, 121 },
- { 169, 122 },
- { 170, 161 },
- { 171, 191 },
- { 172, 208 },
- { 173, 91 },
- { 174, 222 },
- { 175, 174 },
- { 176, 172 },
- { 177, 163 },
- { 178, 165 },
- { 179, 183 },
- { 180, 169 },
- { 181, 167 },
- { 182, 182 },
- { 183, 188 },
- { 184, 189 },
- { 185, 190 },
- { 186, 221 },
- { 187, 168 },
- { 188, 175 },
- { 189, 93 },
- { 190, 180 },
- { 191, 215 },
- { 192, 123 },
- { 193, 65 },
- { 194, 66 },
- { 195, 67 },
- { 196, 68 },
- { 197, 69 },
- { 198, 70 },
- { 199, 71 },
- { 200, 72 },
- { 201, 73 },
- { 202, 173 },
- { 203, 244 },
- { 204, 246 },
- { 205, 242 },
- { 206, 243 },
- { 207, 245 },
- { 208, 125 },
- { 209, 74 },
- { 210, 75 },
- { 211, 76 },
- { 212, 77 },
- { 213, 78 },
- { 214, 79 },
- { 215, 80 },
- { 216, 81 },
- { 217, 82 },
- { 218, 185 },
- { 219, 251 },
- { 220, 252 },
- { 221, 249 },
- { 222, 250 },
- { 223, 255 },
- { 224, 92 },
- { 225, 247 },
- { 226, 83 },
- { 227, 84 },
- { 228, 85 },
- { 229, 86 },
- { 230, 87 },
- { 231, 88 },
- { 232, 89 },
- { 233, 90 },
- { 234, 178 },
- { 235, 212 },
- { 236, 214 },
- { 237, 210 },
- { 238, 211 },
- { 239, 213 },
- { 240, 48 },
- { 241, 49 },
- { 242, 50 },
- { 243, 51 },
- { 244, 52 },
- { 245, 53 },
- { 246, 54 },
- { 247, 55 },
- { 248, 56 },
- { 249, 57 },
- { 250, 179 },
- { 251, 219 },
- { 252, 220 },
- { 253, 217 },
- { 254, 218 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 193, 256 },
- { 193, 258 },
- { 193, 260 },
- { 193, 461 },
- { 129, 257 },
- { 129, 259 },
- { 129, 261 },
- { 129, 462 },
- { 195, 262 },
- { 195, 264 },
- { 195, 266 },
- { 195, 268 },
- { 131, 263 },
- { 131, 265 },
- { 131, 267 },
- { 131, 269 },
- { 196, 270 },
- { 132, 271 },
- { 197, 274 },
- { 197, 276 },
- { 197, 278 },
- { 197, 280 },
- { 197, 282 },
- { 133, 275 },
- { 133, 277 },
- { 133, 279 },
- { 133, 281 },
- { 133, 283 },
- { 199, 284 },
- { 199, 286 },
- { 199, 288 },
- { 199, 290 },
- { 199, 486 },
- { 199, 500 },
- { 135, 285 },
- { 135, 287 },
- { 135, 289 },
- { 135, 291 },
- { 135, 487 },
- { 135, 501 },
- { 200, 292 },
- { 136, 293 },
- { 201, 296 },
- { 201, 298 },
- { 201, 300 },
- { 201, 302 },
- { 201, 304 },
- { 201, 463 },
- { 137, 297 },
- { 137, 299 },
- { 137, 301 },
- { 137, 303 },
- { 137, 305 },
- { 137, 464 },
- { 209, 308 },
- { 145, 309 },
- { 210, 310 },
- { 210, 488 },
- { 146, 311 },
- { 146, 489 },
- { 211, 313 },
- { 211, 315 },
- { 211, 317 },
- { 211, 319 },
- { 211, 321 },
- { 147, 314 },
- { 147, 316 },
- { 147, 318 },
- { 147, 320 },
- { 147, 322 },
- { 212, 323 },
- { 212, 325 },
- { 212, 327 },
- { 148, 324 },
- { 148, 326 },
- { 148, 328 },
- { 148, 329 },
- { 213, 332 },
- { 213, 334 },
- { 213, 336 },
- { 213, 465 },
- { 213, 490 },
- { 149, 333 },
- { 149, 335 },
- { 149, 337 },
- { 149, 466 },
- { 149, 491 },
- { 217, 340 },
- { 217, 342 },
- { 217, 344 },
- { 153, 341 },
- { 153, 343 },
- { 153, 345 },
- { 226, 346 },
- { 226, 348 },
- { 226, 350 },
- { 226, 352 },
- { 162, 347 },
- { 162, 349 },
- { 162, 351 },
- { 162, 353 },
- { 227, 354 },
- { 227, 356 },
- { 163, 355 },
- { 163, 357 },
- { 228, 360 },
- { 228, 362 },
- { 228, 364 },
- { 228, 366 },
- { 228, 368 },
- { 228, 370 },
- { 228, 467 },
- { 164, 361 },
- { 164, 363 },
- { 164, 365 },
- { 164, 367 },
- { 164, 369 },
- { 164, 371 },
- { 164, 468 },
- { 230, 372 },
- { 166, 373 },
- { 232, 374 },
- { 232, 376 },
- { 168, 375 },
- { 233, 377 },
- { 233, 379 },
- { 233, 381 },
- { 169, 378 },
- { 169, 380 },
- { 169, 382 },
-};
-static convert_t ebc500[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 32 },
- { 65, 160 },
- { 66, 226 },
- { 67, 228 },
- { 68, 224 },
- { 69, 225 },
- { 70, 227 },
- { 71, 229 },
- { 72, 231 },
- { 73, 241 },
- { 74, 91 },
- { 75, 46 },
- { 76, 60 },
- { 77, 40 },
- { 78, 43 },
- { 79, 33 },
- { 80, 38 },
- { 81, 233 },
- { 82, 234 },
- { 83, 235 },
- { 84, 232 },
- { 85, 237 },
- { 86, 238 },
- { 87, 239 },
- { 88, 236 },
- { 89, 223 },
- { 90, 93 },
- { 91, 36 },
- { 92, 42 },
- { 93, 41 },
- { 94, 59 },
- { 95, 94 },
- { 96, 45 },
- { 97, 47 },
- { 98, 194 },
- { 99, 196 },
- { 100, 192 },
- { 101, 193 },
- { 102, 195 },
- { 103, 197 },
- { 104, 199 },
- { 105, 209 },
- { 106, 166 },
- { 107, 44 },
- { 108, 37 },
- { 109, 95 },
- { 110, 62 },
- { 111, 63 },
- { 112, 248 },
- { 113, 201 },
- { 114, 202 },
- { 115, 203 },
- { 116, 200 },
- { 117, 205 },
- { 118, 206 },
- { 119, 207 },
- { 120, 204 },
- { 121, 96 },
- { 122, 58 },
- { 123, 35 },
- { 124, 64 },
- { 125, 39 },
- { 126, 61 },
- { 127, 34 },
- { 128, 216 },
- { 129, 97 },
- { 130, 98 },
- { 131, 99 },
- { 132, 100 },
- { 133, 101 },
- { 134, 102 },
- { 135, 103 },
- { 136, 104 },
- { 137, 105 },
- { 138, 171 },
- { 139, 187 },
- { 140, 240 },
- { 141, 253 },
- { 142, 254 },
- { 143, 177 },
- { 144, 176 },
- { 145, 106 },
- { 146, 107 },
- { 147, 108 },
- { 148, 109 },
- { 149, 110 },
- { 150, 111 },
- { 151, 112 },
- { 152, 113 },
- { 153, 114 },
- { 154, 170 },
- { 155, 186 },
- { 156, 230 },
- { 157, 184 },
- { 158, 198 },
- { 159, 164 },
- { 160, 181 },
- { 161, 126 },
- { 162, 115 },
- { 163, 116 },
- { 164, 117 },
- { 165, 118 },
- { 166, 119 },
- { 167, 120 },
- { 168, 121 },
- { 169, 122 },
- { 170, 161 },
- { 171, 191 },
- { 172, 208 },
- { 173, 221 },
- { 174, 222 },
- { 175, 174 },
- { 176, 162 },
- { 177, 163 },
- { 178, 165 },
- { 179, 183 },
- { 180, 169 },
- { 181, 167 },
- { 182, 182 },
- { 183, 188 },
- { 184, 189 },
- { 185, 190 },
- { 186, 172 },
- { 187, 124 },
- { 188, 175 },
- { 189, 168 },
- { 190, 180 },
- { 191, 215 },
- { 192, 123 },
- { 193, 65 },
- { 194, 66 },
- { 195, 67 },
- { 196, 68 },
- { 197, 69 },
- { 198, 70 },
- { 199, 71 },
- { 200, 72 },
- { 201, 73 },
- { 202, 173 },
- { 203, 244 },
- { 204, 246 },
- { 205, 242 },
- { 206, 243 },
- { 207, 245 },
- { 208, 125 },
- { 209, 74 },
- { 210, 75 },
- { 211, 76 },
- { 212, 77 },
- { 213, 78 },
- { 214, 79 },
- { 215, 80 },
- { 216, 81 },
- { 217, 82 },
- { 218, 185 },
- { 219, 251 },
- { 220, 252 },
- { 221, 249 },
- { 222, 250 },
- { 223, 255 },
- { 224, 92 },
- { 225, 247 },
- { 226, 83 },
- { 227, 84 },
- { 228, 85 },
- { 229, 86 },
- { 230, 87 },
- { 231, 88 },
- { 232, 89 },
- { 233, 90 },
- { 234, 178 },
- { 235, 212 },
- { 236, 214 },
- { 237, 210 },
- { 238, 211 },
- { 239, 213 },
- { 240, 48 },
- { 241, 49 },
- { 242, 50 },
- { 243, 51 },
- { 244, 52 },
- { 245, 53 },
- { 246, 54 },
- { 247, 55 },
- { 248, 56 },
- { 249, 57 },
- { 250, 179 },
- { 251, 219 },
- { 252, 220 },
- { 253, 217 },
- { 254, 218 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 193, 256 },
- { 193, 258 },
- { 193, 260 },
- { 193, 461 },
- { 129, 257 },
- { 129, 259 },
- { 129, 261 },
- { 129, 462 },
- { 195, 262 },
- { 195, 264 },
- { 195, 266 },
- { 195, 268 },
- { 131, 263 },
- { 131, 265 },
- { 131, 267 },
- { 131, 269 },
- { 196, 270 },
- { 132, 271 },
- { 197, 274 },
- { 197, 276 },
- { 197, 278 },
- { 197, 280 },
- { 197, 282 },
- { 133, 275 },
- { 133, 277 },
- { 133, 279 },
- { 133, 281 },
- { 133, 283 },
- { 199, 284 },
- { 199, 286 },
- { 199, 288 },
- { 199, 290 },
- { 199, 486 },
- { 199, 500 },
- { 135, 285 },
- { 135, 287 },
- { 135, 289 },
- { 135, 291 },
- { 135, 487 },
- { 135, 501 },
- { 200, 292 },
- { 136, 293 },
- { 201, 296 },
- { 201, 298 },
- { 201, 300 },
- { 201, 302 },
- { 201, 304 },
- { 201, 463 },
- { 137, 297 },
- { 137, 299 },
- { 137, 301 },
- { 137, 303 },
- { 137, 305 },
- { 137, 464 },
- { 209, 308 },
- { 145, 309 },
- { 210, 310 },
- { 210, 488 },
- { 146, 311 },
- { 146, 489 },
- { 211, 313 },
- { 211, 315 },
- { 211, 317 },
- { 211, 319 },
- { 211, 321 },
- { 147, 314 },
- { 147, 316 },
- { 147, 318 },
- { 147, 320 },
- { 147, 322 },
- { 212, 323 },
- { 212, 325 },
- { 212, 327 },
- { 148, 324 },
- { 148, 326 },
- { 148, 328 },
- { 148, 329 },
- { 213, 332 },
- { 213, 334 },
- { 213, 336 },
- { 213, 465 },
- { 213, 490 },
- { 149, 333 },
- { 149, 335 },
- { 149, 337 },
- { 149, 466 },
- { 149, 491 },
- { 217, 340 },
- { 217, 342 },
- { 217, 344 },
- { 153, 341 },
- { 153, 343 },
- { 153, 345 },
- { 226, 346 },
- { 226, 348 },
- { 226, 350 },
- { 226, 352 },
- { 162, 347 },
- { 162, 349 },
- { 162, 351 },
- { 162, 353 },
- { 227, 354 },
- { 227, 356 },
- { 163, 355 },
- { 163, 357 },
- { 228, 360 },
- { 228, 362 },
- { 228, 364 },
- { 228, 366 },
- { 228, 368 },
- { 228, 370 },
- { 228, 467 },
- { 164, 361 },
- { 164, 363 },
- { 164, 365 },
- { 164, 367 },
- { 164, 369 },
- { 164, 371 },
- { 164, 468 },
- { 230, 372 },
- { 166, 373 },
- { 232, 374 },
- { 232, 376 },
- { 168, 375 },
- { 233, 377 },
- { 233, 379 },
- { 233, 381 },
- { 169, 378 },
- { 169, 380 },
- { 169, 382 },
-};
-static convert_t ebc875[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 32 },
- { 65, 913 },
- { 66, 914 },
- { 67, 915 },
- { 68, 916 },
- { 69, 917 },
- { 70, 918 },
- { 71, 919 },
- { 72, 920 },
- { 73, 921 },
- { 74, 91 },
- { 75, 46 },
- { 76, 60 },
- { 77, 40 },
- { 78, 43 },
- { 79, 33 },
- { 80, 38 },
- { 81, 922 },
- { 82, 923 },
- { 83, 924 },
- { 84, 925 },
- { 85, 926 },
- { 86, 927 },
- { 87, 928 },
- { 88, 929 },
- { 89, 931 },
- { 90, 93 },
- { 91, 36 },
- { 92, 42 },
- { 93, 41 },
- { 94, 59 },
- { 95, 94 },
- { 96, 45 },
- { 97, 47 },
- { 98, 932 },
- { 99, 933 },
- { 100, 934 },
- { 101, 935 },
- { 102, 936 },
- { 103, 937 },
- { 104, 938 },
- { 105, 939 },
- { 106, 124 },
- { 107, 44 },
- { 108, 37 },
- { 109, 95 },
- { 110, 62 },
- { 111, 63 },
- { 112, 168 },
- { 113, 902 },
- { 114, 904 },
- { 115, 905 },
- { 116, 160 },
- { 117, 906 },
- { 118, 908 },
- { 119, 910 },
- { 120, 911 },
- { 121, 96 },
- { 122, 58 },
- { 123, 35 },
- { 124, 64 },
- { 125, 39 },
- { 126, 61 },
- { 127, 34 },
- { 128, 901 },
- { 129, 97 },
- { 130, 98 },
- { 131, 99 },
- { 132, 100 },
- { 133, 101 },
- { 134, 102 },
- { 135, 103 },
- { 136, 104 },
- { 137, 105 },
- { 138, 945 },
- { 139, 946 },
- { 140, 947 },
- { 141, 948 },
- { 142, 949 },
- { 143, 950 },
- { 144, 176 },
- { 145, 106 },
- { 146, 107 },
- { 147, 108 },
- { 148, 109 },
- { 149, 110 },
- { 150, 111 },
- { 151, 112 },
- { 152, 113 },
- { 153, 114 },
- { 154, 951 },
- { 155, 952 },
- { 156, 953 },
- { 157, 954 },
- { 158, 955 },
- { 159, 956 },
- { 160, 180 },
- { 161, 126 },
- { 162, 115 },
- { 163, 116 },
- { 164, 117 },
- { 165, 118 },
- { 166, 119 },
- { 167, 120 },
- { 168, 121 },
- { 169, 122 },
- { 170, 957 },
- { 171, 958 },
- { 172, 959 },
- { 173, 960 },
- { 174, 961 },
- { 175, 963 },
- { 176, 163 },
- { 177, 940 },
- { 178, 941 },
- { 179, 942 },
- { 180, 970 },
- { 181, 943 },
- { 182, 972 },
- { 183, 973 },
- { 184, 971 },
- { 185, 974 },
- { 186, 962 },
- { 187, 964 },
- { 188, 965 },
- { 189, 966 },
- { 190, 967 },
- { 191, 968 },
- { 192, 123 },
- { 193, 65 },
- { 194, 66 },
- { 195, 67 },
- { 196, 68 },
- { 197, 69 },
- { 198, 70 },
- { 199, 71 },
- { 200, 72 },
- { 201, 73 },
- { 202, 173 },
- { 203, 969 },
- { 204, 912 },
- { 205, 944 },
- { 206, 206 },
- { 207, 207 },
- { 208, 125 },
- { 209, 74 },
- { 210, 75 },
- { 211, 76 },
- { 212, 77 },
- { 213, 78 },
- { 214, 79 },
- { 215, 80 },
- { 216, 81 },
- { 217, 82 },
- { 218, 177 },
- { 219, 189 },
- { 220, 220 },
- { 221, 183 },
- { 222, 222 },
- { 223, 166 },
- { 224, 92 },
- { 225, 225 },
- { 226, 83 },
- { 227, 84 },
- { 228, 85 },
- { 229, 86 },
- { 230, 87 },
- { 231, 88 },
- { 232, 89 },
- { 233, 90 },
- { 234, 178 },
- { 235, 167 },
- { 236, 236 },
- { 237, 237 },
- { 238, 171 },
- { 239, 172 },
- { 240, 48 },
- { 241, 49 },
- { 242, 50 },
- { 243, 51 },
- { 244, 52 },
- { 245, 53 },
- { 246, 54 },
- { 247, 55 },
- { 248, 56 },
- { 249, 57 },
- { 250, 179 },
- { 251, 169 },
- { 252, 252 },
- { 253, 253 },
- { 254, 187 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 193, 192 },
- { 193, 193 },
- { 193, 194 },
- { 193, 195 },
- { 193, 196 },
- { 193, 197 },
- { 193, 256 },
- { 193, 258 },
- { 193, 260 },
- { 193, 461 },
- { 129, 224 },
- { 129, 226 },
- { 129, 227 },
- { 129, 228 },
- { 129, 229 },
- { 129, 257 },
- { 129, 259 },
- { 129, 261 },
- { 129, 462 },
- { 195, 199 },
- { 195, 262 },
- { 195, 264 },
- { 195, 266 },
- { 195, 268 },
- { 131, 231 },
- { 131, 263 },
- { 131, 265 },
- { 131, 267 },
- { 131, 269 },
- { 196, 270 },
- { 132, 271 },
- { 197, 200 },
- { 197, 201 },
- { 197, 202 },
- { 197, 203 },
- { 197, 274 },
- { 197, 276 },
- { 197, 278 },
- { 197, 280 },
- { 197, 282 },
- { 133, 232 },
- { 133, 233 },
- { 133, 234 },
- { 133, 235 },
- { 133, 275 },
- { 133, 277 },
- { 133, 279 },
- { 133, 281 },
- { 133, 283 },
- { 199, 284 },
- { 199, 286 },
- { 199, 288 },
- { 199, 290 },
- { 199, 486 },
- { 199, 500 },
- { 135, 285 },
- { 135, 287 },
- { 135, 289 },
- { 135, 291 },
- { 135, 487 },
- { 135, 501 },
- { 200, 292 },
- { 136, 293 },
- { 201, 204 },
- { 201, 205 },
- { 201, 296 },
- { 201, 298 },
- { 201, 300 },
- { 201, 302 },
- { 201, 304 },
- { 201, 463 },
- { 137, 238 },
- { 137, 239 },
- { 137, 297 },
- { 137, 299 },
- { 137, 301 },
- { 137, 303 },
- { 137, 305 },
- { 137, 464 },
- { 209, 308 },
- { 145, 309 },
- { 210, 310 },
- { 210, 488 },
- { 146, 311 },
- { 146, 489 },
- { 211, 313 },
- { 211, 315 },
- { 211, 317 },
- { 211, 319 },
- { 211, 321 },
- { 147, 314 },
- { 147, 316 },
- { 147, 318 },
- { 147, 320 },
- { 147, 322 },
- { 212, 209 },
- { 212, 323 },
- { 212, 325 },
- { 212, 327 },
- { 148, 241 },
- { 148, 324 },
- { 148, 326 },
- { 148, 328 },
- { 148, 329 },
- { 213, 210 },
- { 213, 211 },
- { 213, 212 },
- { 213, 213 },
- { 213, 214 },
- { 213, 216 },
- { 213, 332 },
- { 213, 334 },
- { 213, 336 },
- { 213, 465 },
- { 213, 490 },
- { 149, 242 },
- { 149, 243 },
- { 149, 244 },
- { 149, 245 },
- { 149, 246 },
- { 149, 248 },
- { 149, 333 },
- { 149, 335 },
- { 149, 337 },
- { 149, 466 },
- { 149, 491 },
- { 217, 340 },
- { 217, 342 },
- { 217, 344 },
- { 153, 341 },
- { 153, 343 },
- { 153, 345 },
- { 226, 346 },
- { 226, 348 },
- { 226, 350 },
- { 226, 352 },
- { 162, 347 },
- { 162, 349 },
- { 162, 351 },
- { 162, 353 },
- { 227, 354 },
- { 227, 356 },
- { 163, 355 },
- { 163, 357 },
- { 228, 217 },
- { 228, 218 },
- { 228, 219 },
- { 228, 360 },
- { 228, 362 },
- { 228, 364 },
- { 228, 366 },
- { 228, 368 },
- { 228, 370 },
- { 228, 467 },
- { 164, 249 },
- { 164, 250 },
- { 164, 251 },
- { 164, 361 },
- { 164, 363 },
- { 164, 365 },
- { 164, 367 },
- { 164, 369 },
- { 164, 371 },
- { 164, 468 },
- { 230, 372 },
- { 166, 373 },
- { 232, 221 },
- { 232, 374 },
- { 232, 376 },
- { 168, 375 },
- { 233, 377 },
- { 233, 379 },
- { 233, 381 },
- { 169, 378 },
- { 169, 380 },
- { 169, 382 },
-};
-static convert_t hp48[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 8735 },
- { 129, 129 },
- { 130, 8711 },
- { 131, 8730 },
- { 132, 8747 },
- { 133, 8721 },
- { 134, 9654 },
- { 135, 960 },
- { 136, 8706 },
- { 137, 8804 },
- { 138, 8805 },
- { 139, 8800 },
- { 140, 945 },
- { 141, 8594 },
- { 142, 8592 },
- { 143, 8595 },
- { 144, 8593 },
- { 145, 947 },
- { 146, 948 },
- { 147, 949 },
- { 148, 951 },
- { 149, 952 },
- { 150, 955 },
- { 151, 961 },
- { 152, 963 },
- { 153, 964 },
- { 154, 969 },
- { 155, 916 },
- { 156, 928 },
- { 157, 937 },
- { 158, 9644 },
- { 159, 8734 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t hproman8[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 192 },
- { 162, 194 },
- { 163, 200 },
- { 164, 202 },
- { 165, 203 },
- { 166, 206 },
- { 167, 207 },
- { 168, 180 },
- { 169, 768 },
- { 170, 770 },
- { 171, 168 },
- { 172, 771 },
- { 173, 217 },
- { 174, 219 },
- { 175, 8356 },
- { 176, 175 },
- { 177, 221 },
- { 178, 253 },
- { 179, 176 },
- { 180, 199 },
- { 181, 231 },
- { 182, 209 },
- { 183, 241 },
- { 184, 161 },
- { 185, 191 },
- { 186, 164 },
- { 187, 163 },
- { 188, 165 },
- { 189, 167 },
- { 190, 402 },
- { 191, 162 },
- { 192, 226 },
- { 193, 234 },
- { 194, 244 },
- { 195, 251 },
- { 196, 225 },
- { 197, 233 },
- { 198, 243 },
- { 199, 250 },
- { 200, 224 },
- { 201, 232 },
- { 202, 242 },
- { 203, 249 },
- { 204, 228 },
- { 205, 235 },
- { 206, 246 },
- { 207, 252 },
- { 208, 197 },
- { 209, 238 },
- { 210, 216 },
- { 211, 198 },
- { 212, 229 },
- { 213, 237 },
- { 214, 248 },
- { 215, 230 },
- { 216, 196 },
- { 217, 236 },
- { 218, 214 },
- { 219, 220 },
- { 220, 201 },
- { 221, 239 },
- { 222, 223 },
- { 223, 212 },
- { 224, 193 },
- { 225, 195 },
- { 226, 227 },
- { 227, 208 },
- { 228, 240 },
- { 229, 205 },
- { 230, 204 },
- { 231, 211 },
- { 232, 210 },
- { 233, 213 },
- { 234, 245 },
- { 235, 352 },
- { 236, 353 },
- { 237, 218 },
- { 238, 376 },
- { 239, 255 },
- { 240, 222 },
- { 241, 254 },
- { 242, 183 },
- { 243, 181 },
- { 244, 182 },
- { 245, 190 },
- { 246, 173 },
- { 247, 188 },
- { 248, 189 },
- { 249, 170 },
- { 250, 186 },
- { 251, 171 },
- { 252, 9632 },
- { 253, 187 },
- { 254, 177 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso646[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso646_irv[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso646_ca[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 224 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 226 },
- { 92, 231 },
- { 93, 234 },
- { 94, 238 },
- { 95, 95 },
- { 96, 244 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 233 },
- { 124, 249 },
- { 125, 232 },
- { 126, 251 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso646_ch[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 249 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 224 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 233 },
- { 92, 231 },
- { 93, 234 },
- { 94, 238 },
- { 95, 232 },
- { 96, 244 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 228 },
- { 124, 246 },
- { 125, 252 },
- { 126, 251 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso646_de[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 167 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 196 },
- { 92, 214 },
- { 93, 220 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 228 },
- { 124, 246 },
- { 125, 252 },
- { 126, 223 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso646_es[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 163 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 167 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 161 },
- { 92, 209 },
- { 93, 191 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 176 },
- { 124, 241 },
- { 125, 231 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso646_fi[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 196 },
- { 92, 214 },
- { 93, 197 },
- { 94, 220 },
- { 95, 95 },
- { 96, 233 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 228 },
- { 124, 246 },
- { 125, 229 },
- { 126, 252 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso646_fr[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 163 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 224 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 176 },
- { 92, 231 },
- { 93, 167 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 233 },
- { 124, 249 },
- { 125, 232 },
- { 126, 168 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso646_gb[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 163 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso646_it[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 163 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 167 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 176 },
- { 92, 231 },
- { 93, 233 },
- { 94, 94 },
- { 95, 95 },
- { 96, 249 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 224 },
- { 124, 242 },
- { 125, 232 },
- { 126, 236 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso646_nl[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 163 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 190 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 255 },
- { 92, 189 },
- { 93, 124 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 168 },
- { 124, 402 },
- { 125, 188 },
- { 126, 180 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso646_no[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 198 },
- { 92, 216 },
- { 93, 197 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 230 },
- { 124, 248 },
- { 125, 229 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso646_pt[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 195 },
- { 92, 199 },
- { 93, 213 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 227 },
- { 124, 231 },
- { 125, 245 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso646_se[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 201 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 196 },
- { 92, 214 },
- { 93, 197 },
- { 94, 220 },
- { 95, 95 },
- { 96, 233 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 228 },
- { 124, 246 },
- { 125, 229 },
- { 126, 252 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso8859_1[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso8859_2[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 260 },
- { 162, 728 },
- { 163, 321 },
- { 164, 164 },
- { 165, 317 },
- { 166, 346 },
- { 167, 167 },
- { 168, 168 },
- { 169, 352 },
- { 170, 350 },
- { 171, 356 },
- { 172, 377 },
- { 173, 173 },
- { 174, 381 },
- { 175, 379 },
- { 176, 176 },
- { 177, 261 },
- { 178, 731 },
- { 179, 322 },
- { 180, 180 },
- { 181, 318 },
- { 182, 347 },
- { 183, 711 },
- { 184, 184 },
- { 185, 353 },
- { 186, 351 },
- { 187, 357 },
- { 188, 378 },
- { 189, 733 },
- { 190, 382 },
- { 191, 380 },
- { 192, 340 },
- { 193, 193 },
- { 194, 194 },
- { 195, 258 },
- { 196, 196 },
- { 197, 313 },
- { 198, 262 },
- { 199, 199 },
- { 200, 268 },
- { 201, 201 },
- { 202, 280 },
- { 203, 203 },
- { 204, 282 },
- { 205, 205 },
- { 206, 206 },
- { 207, 270 },
- { 208, 272 },
- { 209, 323 },
- { 210, 327 },
- { 211, 211 },
- { 212, 212 },
- { 213, 336 },
- { 214, 214 },
- { 215, 215 },
- { 216, 344 },
- { 217, 366 },
- { 218, 218 },
- { 219, 368 },
- { 220, 220 },
- { 221, 221 },
- { 222, 354 },
- { 223, 223 },
- { 224, 341 },
- { 225, 225 },
- { 226, 226 },
- { 227, 259 },
- { 228, 228 },
- { 229, 314 },
- { 230, 263 },
- { 231, 231 },
- { 232, 269 },
- { 233, 233 },
- { 234, 281 },
- { 235, 235 },
- { 236, 283 },
- { 237, 237 },
- { 238, 238 },
- { 239, 271 },
- { 240, 273 },
- { 241, 324 },
- { 242, 328 },
- { 243, 243 },
- { 244, 244 },
- { 245, 337 },
- { 246, 246 },
- { 247, 247 },
- { 248, 345 },
- { 249, 367 },
- { 250, 250 },
- { 251, 369 },
- { 252, 252 },
- { 253, 253 },
- { 254, 355 },
- { 255, 729 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 195 },
- { 65, 197 },
- { 65, 256 },
- { 65, 461 },
- { 97, 224 },
- { 97, 227 },
- { 97, 229 },
- { 97, 257 },
- { 97, 462 },
- { 67, 264 },
- { 67, 266 },
- { 99, 265 },
- { 99, 267 },
- { 69, 200 },
- { 69, 202 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 101, 232 },
- { 101, 234 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 315 },
- { 76, 319 },
- { 108, 316 },
- { 108, 320 },
- { 77, 209 },
- { 77, 325 },
- { 109, 241 },
- { 109, 326 },
- { 109, 329 },
- { 78, 210 },
- { 78, 213 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 245 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 466 },
- { 110, 491 },
- { 82, 342 },
- { 114, 343 },
- { 83, 348 },
- { 115, 349 },
- { 85, 217 },
- { 85, 219 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 251 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 255 },
- { 121, 375 },
-};
-static convert_t iso8859_3[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 294 },
- { 162, 728 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 292 },
- { 167, 167 },
- { 168, 168 },
- { 169, 304 },
- { 170, 350 },
- { 171, 286 },
- { 172, 308 },
- { 173, 173 },
- { 174, 174 },
- { 175, 379 },
- { 176, 176 },
- { 177, 295 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 293 },
- { 183, 183 },
- { 184, 184 },
- { 185, 305 },
- { 186, 351 },
- { 187, 287 },
- { 188, 309 },
- { 189, 189 },
- { 190, 190 },
- { 191, 380 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 266 },
- { 198, 264 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 288 },
- { 214, 214 },
- { 215, 215 },
- { 216, 284 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 364 },
- { 222, 348 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 267 },
- { 230, 265 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 289 },
- { 246, 246 },
- { 247, 247 },
- { 248, 285 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 365 },
- { 254, 349 },
- { 255, 729 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 268 },
- { 99, 263 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 464 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 213 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 245 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 352 },
- { 115, 347 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 381 },
- { 122, 378 },
- { 122, 382 },
-};
-static convert_t iso8859_4[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 260 },
- { 162, 312 },
- { 163, 342 },
- { 164, 164 },
- { 165, 296 },
- { 166, 315 },
- { 167, 167 },
- { 168, 168 },
- { 169, 352 },
- { 170, 274 },
- { 171, 290 },
- { 172, 358 },
- { 173, 173 },
- { 174, 381 },
- { 175, 175 },
- { 176, 176 },
- { 177, 261 },
- { 178, 731 },
- { 179, 343 },
- { 180, 180 },
- { 181, 297 },
- { 182, 316 },
- { 183, 711 },
- { 184, 184 },
- { 185, 353 },
- { 186, 275 },
- { 187, 291 },
- { 188, 359 },
- { 189, 330 },
- { 190, 382 },
- { 191, 331 },
- { 192, 256 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 302 },
- { 200, 268 },
- { 201, 201 },
- { 202, 280 },
- { 203, 203 },
- { 204, 278 },
- { 205, 205 },
- { 206, 206 },
- { 207, 298 },
- { 208, 272 },
- { 209, 325 },
- { 210, 332 },
- { 211, 310 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 370 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 360 },
- { 222, 362 },
- { 223, 223 },
- { 224, 257 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 303 },
- { 232, 269 },
- { 233, 233 },
- { 234, 281 },
- { 235, 235 },
- { 236, 279 },
- { 237, 237 },
- { 238, 238 },
- { 239, 299 },
- { 240, 273 },
- { 241, 326 },
- { 242, 333 },
- { 243, 311 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 371 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 361 },
- { 254, 363 },
- { 255, 729 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 258 },
- { 65, 461 },
- { 97, 224 },
- { 97, 259 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 202 },
- { 69, 276 },
- { 69, 282 },
- { 101, 232 },
- { 101, 234 },
- { 101, 277 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 207 },
- { 73, 300 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 239 },
- { 105, 301 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 488 },
- { 107, 489 },
- { 76, 313 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 344 },
- { 114, 341 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 467 },
- { 117, 249 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 122, 378 },
- { 122, 380 },
-};
-static convert_t iso8859_5[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 1025 },
- { 162, 1026 },
- { 163, 1027 },
- { 164, 1028 },
- { 165, 1029 },
- { 166, 1030 },
- { 167, 1031 },
- { 168, 1032 },
- { 169, 1033 },
- { 170, 1034 },
- { 171, 1035 },
- { 172, 1036 },
- { 173, 173 },
- { 174, 1038 },
- { 175, 1039 },
- { 176, 1040 },
- { 177, 1041 },
- { 178, 1042 },
- { 179, 1043 },
- { 180, 1044 },
- { 181, 1045 },
- { 182, 1046 },
- { 183, 1047 },
- { 184, 1048 },
- { 185, 1049 },
- { 186, 1050 },
- { 187, 1051 },
- { 188, 1052 },
- { 189, 1053 },
- { 190, 1054 },
- { 191, 1055 },
- { 192, 1056 },
- { 193, 1057 },
- { 194, 1058 },
- { 195, 1059 },
- { 196, 1060 },
- { 197, 1061 },
- { 198, 1062 },
- { 199, 1063 },
- { 200, 1064 },
- { 201, 1065 },
- { 202, 1066 },
- { 203, 1067 },
- { 204, 1068 },
- { 205, 1069 },
- { 206, 1070 },
- { 207, 1071 },
- { 208, 1072 },
- { 209, 1073 },
- { 210, 1074 },
- { 211, 1075 },
- { 212, 1076 },
- { 213, 1077 },
- { 214, 1078 },
- { 215, 1079 },
- { 216, 1080 },
- { 217, 1081 },
- { 218, 1082 },
- { 219, 1083 },
- { 220, 1084 },
- { 221, 1085 },
- { 222, 1086 },
- { 223, 1087 },
- { 224, 1088 },
- { 225, 1089 },
- { 226, 1090 },
- { 227, 1091 },
- { 228, 1092 },
- { 229, 1093 },
- { 230, 1094 },
- { 231, 1095 },
- { 232, 1096 },
- { 233, 1097 },
- { 234, 1098 },
- { 235, 1099 },
- { 236, 1100 },
- { 237, 1101 },
- { 238, 1102 },
- { 239, 1103 },
- { 240, 8470 },
- { 241, 1105 },
- { 242, 1106 },
- { 243, 1107 },
- { 244, 1108 },
- { 245, 1109 },
- { 246, 1110 },
- { 247, 1111 },
- { 248, 1112 },
- { 249, 1113 },
- { 250, 1114 },
- { 251, 1115 },
- { 252, 1116 },
- { 253, 167 },
- { 254, 1118 },
- { 255, 1119 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 244 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 220 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 252 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso8859_6[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 1548 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 1563 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 1567 },
- { 192, 192 },
- { 193, 1569 },
- { 194, 1570 },
- { 195, 1571 },
- { 196, 1572 },
- { 197, 1573 },
- { 198, 1574 },
- { 199, 1575 },
- { 200, 1576 },
- { 201, 1577 },
- { 202, 1578 },
- { 203, 1579 },
- { 204, 1580 },
- { 205, 1581 },
- { 206, 1582 },
- { 207, 1583 },
- { 208, 1584 },
- { 209, 1585 },
- { 210, 1586 },
- { 211, 1587 },
- { 212, 1588 },
- { 213, 1589 },
- { 214, 1590 },
- { 215, 1591 },
- { 216, 1592 },
- { 217, 1593 },
- { 218, 1594 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 1600 },
- { 225, 1601 },
- { 226, 1602 },
- { 227, 1603 },
- { 228, 1604 },
- { 229, 1605 },
- { 230, 1606 },
- { 231, 1607 },
- { 232, 1608 },
- { 233, 1609 },
- { 234, 1610 },
- { 235, 1611 },
- { 236, 1612 },
- { 237, 1613 },
- { 238, 1614 },
- { 239, 1615 },
- { 240, 1616 },
- { 241, 1617 },
- { 242, 1618 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso8859_7[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 8216 },
- { 162, 8217 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 8213 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 900 },
- { 181, 901 },
- { 182, 902 },
- { 183, 183 },
- { 184, 904 },
- { 185, 905 },
- { 186, 906 },
- { 187, 187 },
- { 188, 908 },
- { 189, 189 },
- { 190, 910 },
- { 191, 911 },
- { 192, 912 },
- { 193, 913 },
- { 194, 914 },
- { 195, 915 },
- { 196, 916 },
- { 197, 917 },
- { 198, 918 },
- { 199, 919 },
- { 200, 920 },
- { 201, 921 },
- { 202, 922 },
- { 203, 923 },
- { 204, 924 },
- { 205, 925 },
- { 206, 926 },
- { 207, 927 },
- { 208, 928 },
- { 209, 929 },
- { 210, 210 },
- { 211, 931 },
- { 212, 932 },
- { 213, 933 },
- { 214, 934 },
- { 215, 935 },
- { 216, 936 },
- { 217, 937 },
- { 218, 938 },
- { 219, 939 },
- { 220, 940 },
- { 221, 941 },
- { 222, 942 },
- { 223, 943 },
- { 224, 944 },
- { 225, 945 },
- { 226, 946 },
- { 227, 947 },
- { 228, 948 },
- { 229, 949 },
- { 230, 950 },
- { 231, 951 },
- { 232, 952 },
- { 233, 953 },
- { 234, 954 },
- { 235, 955 },
- { 236, 956 },
- { 237, 957 },
- { 238, 958 },
- { 239, 959 },
- { 240, 960 },
- { 241, 961 },
- { 242, 962 },
- { 243, 963 },
- { 244, 964 },
- { 245, 965 },
- { 246, 966 },
- { 247, 967 },
- { 248, 968 },
- { 249, 969 },
- { 250, 970 },
- { 251, 971 },
- { 252, 972 },
- { 253, 973 },
- { 254, 974 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 244 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 220 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 252 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso8859_8[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 215 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 247 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 8215 },
- { 224, 1488 },
- { 225, 1489 },
- { 226, 1490 },
- { 227, 1491 },
- { 228, 1492 },
- { 229, 1493 },
- { 230, 1494 },
- { 231, 1495 },
- { 232, 1496 },
- { 233, 1497 },
- { 234, 1498 },
- { 235, 1499 },
- { 236, 1500 },
- { 237, 1501 },
- { 238, 1502 },
- { 239, 1503 },
- { 240, 1504 },
- { 241, 1505 },
- { 242, 1506 },
- { 243, 1507 },
- { 244, 1508 },
- { 245, 1509 },
- { 246, 1510 },
- { 247, 1511 },
- { 248, 1512 },
- { 249, 1513 },
- { 250, 1514 },
- { 251, 251 },
- { 252, 252 },
- { 253, 8206 },
- { 254, 8207 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 244 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso8859_9[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 180 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 184 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 286 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 304 },
- { 222, 350 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 287 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 305 },
- { 254, 351 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso8859_10[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 260 },
- { 162, 274 },
- { 163, 290 },
- { 164, 298 },
- { 165, 296 },
- { 166, 310 },
- { 167, 167 },
- { 168, 315 },
- { 169, 272 },
- { 170, 352 },
- { 171, 358 },
- { 172, 381 },
- { 173, 173 },
- { 174, 362 },
- { 175, 330 },
- { 176, 176 },
- { 177, 261 },
- { 178, 275 },
- { 179, 291 },
- { 180, 299 },
- { 181, 297 },
- { 182, 311 },
- { 183, 183 },
- { 184, 316 },
- { 185, 273 },
- { 186, 353 },
- { 187, 359 },
- { 188, 382 },
- { 189, 8213 },
- { 190, 363 },
- { 191, 331 },
- { 192, 256 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 302 },
- { 200, 268 },
- { 201, 201 },
- { 202, 280 },
- { 203, 203 },
- { 204, 278 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 325 },
- { 210, 332 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 360 },
- { 216, 216 },
- { 217, 370 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 257 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 303 },
- { 232, 269 },
- { 233, 233 },
- { 234, 281 },
- { 235, 235 },
- { 236, 279 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 326 },
- { 242, 333 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 361 },
- { 248, 248 },
- { 249, 371 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 312 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 258 },
- { 65, 461 },
- { 97, 224 },
- { 97, 259 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 202 },
- { 69, 276 },
- { 69, 282 },
- { 101, 232 },
- { 101, 234 },
- { 101, 277 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 300 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 301 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 488 },
- { 107, 489 },
- { 76, 313 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 467 },
- { 117, 249 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 122, 378 },
- { 122, 380 },
-};
-static convert_t iso8859_11[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 3585 },
- { 162, 3586 },
- { 163, 3587 },
- { 164, 3588 },
- { 165, 3589 },
- { 166, 3590 },
- { 167, 3591 },
- { 168, 3592 },
- { 169, 3593 },
- { 170, 3594 },
- { 171, 3595 },
- { 172, 3596 },
- { 173, 3597 },
- { 174, 3598 },
- { 175, 3599 },
- { 176, 3600 },
- { 177, 3601 },
- { 178, 3602 },
- { 179, 3603 },
- { 180, 3604 },
- { 181, 3605 },
- { 182, 3606 },
- { 183, 3607 },
- { 184, 3608 },
- { 185, 3609 },
- { 186, 3610 },
- { 187, 3611 },
- { 188, 3612 },
- { 189, 3613 },
- { 190, 3614 },
- { 191, 3615 },
- { 192, 3616 },
- { 193, 3617 },
- { 194, 3618 },
- { 195, 3619 },
- { 196, 3620 },
- { 197, 3621 },
- { 198, 3622 },
- { 199, 3623 },
- { 200, 3624 },
- { 201, 3625 },
- { 202, 3626 },
- { 203, 3627 },
- { 204, 3628 },
- { 205, 3629 },
- { 206, 3630 },
- { 207, 3631 },
- { 208, 3632 },
- { 209, 3633 },
- { 210, 3634 },
- { 211, 3635 },
- { 212, 3636 },
- { 213, 3637 },
- { 214, 3638 },
- { 215, 3639 },
- { 216, 3640 },
- { 217, 3641 },
- { 218, 3642 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 3647 },
- { 224, 3648 },
- { 225, 3649 },
- { 226, 3650 },
- { 227, 3651 },
- { 228, 3652 },
- { 229, 3653 },
- { 230, 3654 },
- { 231, 3655 },
- { 232, 3656 },
- { 233, 3657 },
- { 234, 3658 },
- { 235, 3659 },
- { 236, 3660 },
- { 237, 3661 },
- { 238, 3662 },
- { 239, 3663 },
- { 240, 3664 },
- { 241, 3665 },
- { 242, 3666 },
- { 243, 3667 },
- { 244, 3668 },
- { 245, 3669 },
- { 246, 3670 },
- { 247, 3671 },
- { 248, 3672 },
- { 249, 3673 },
- { 250, 3674 },
- { 251, 3675 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 244 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso8859_13[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 8221 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 8222 },
- { 166, 166 },
- { 167, 167 },
- { 168, 216 },
- { 169, 169 },
- { 170, 342 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 198 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 8220 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 248 },
- { 185, 185 },
- { 186, 343 },
- { 187, 187 },
- { 188, 188 },
- { 189, 189 },
- { 190, 190 },
- { 191, 230 },
- { 192, 260 },
- { 193, 302 },
- { 194, 256 },
- { 195, 262 },
- { 196, 196 },
- { 197, 197 },
- { 198, 280 },
- { 199, 274 },
- { 200, 268 },
- { 201, 201 },
- { 202, 377 },
- { 203, 278 },
- { 204, 290 },
- { 205, 310 },
- { 206, 298 },
- { 207, 315 },
- { 208, 352 },
- { 209, 323 },
- { 210, 325 },
- { 211, 211 },
- { 212, 332 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 370 },
- { 217, 321 },
- { 218, 346 },
- { 219, 362 },
- { 220, 220 },
- { 221, 379 },
- { 222, 381 },
- { 223, 223 },
- { 224, 261 },
- { 225, 303 },
- { 226, 257 },
- { 227, 263 },
- { 228, 228 },
- { 229, 229 },
- { 230, 281 },
- { 231, 275 },
- { 232, 269 },
- { 233, 233 },
- { 234, 378 },
- { 235, 279 },
- { 236, 291 },
- { 237, 311 },
- { 238, 299 },
- { 239, 316 },
- { 240, 353 },
- { 241, 324 },
- { 242, 326 },
- { 243, 243 },
- { 244, 333 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 371 },
- { 249, 322 },
- { 250, 347 },
- { 251, 363 },
- { 252, 252 },
- { 253, 380 },
- { 254, 382 },
- { 255, 8217 },
- { 39, 8216 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 258 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 259 },
- { 97, 462 },
- { 67, 199 },
- { 67, 264 },
- { 67, 266 },
- { 99, 231 },
- { 99, 265 },
- { 99, 267 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 202 },
- { 69, 203 },
- { 69, 276 },
- { 69, 282 },
- { 101, 232 },
- { 101, 234 },
- { 101, 235 },
- { 101, 277 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 300 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 301 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 488 },
- { 107, 489 },
- { 76, 313 },
- { 76, 317 },
- { 76, 319 },
- { 108, 314 },
- { 108, 318 },
- { 108, 320 },
- { 77, 209 },
- { 77, 327 },
- { 109, 241 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 212 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 244 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 344 },
- { 114, 341 },
- { 114, 345 },
- { 83, 348 },
- { 83, 350 },
- { 115, 349 },
- { 115, 351 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 360 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 361 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
-};
-static convert_t iso8859_14[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 7682 },
- { 162, 7683 },
- { 163, 163 },
- { 164, 266 },
- { 165, 267 },
- { 166, 7690 },
- { 167, 167 },
- { 168, 7808 },
- { 169, 169 },
- { 170, 7810 },
- { 171, 7691 },
- { 172, 7922 },
- { 173, 173 },
- { 174, 174 },
- { 175, 376 },
- { 176, 7710 },
- { 177, 7711 },
- { 178, 288 },
- { 179, 289 },
- { 180, 7744 },
- { 181, 7745 },
- { 182, 182 },
- { 183, 7766 },
- { 184, 7809 },
- { 185, 7767 },
- { 186, 7811 },
- { 187, 7776 },
- { 188, 7923 },
- { 189, 7812 },
- { 190, 7813 },
- { 191, 7777 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 372 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 7786 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 374 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 373 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 7787 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 375 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t iso8859_15[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 8364 },
- { 165, 165 },
- { 166, 352 },
- { 167, 167 },
- { 168, 353 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 176 },
- { 177, 177 },
- { 178, 178 },
- { 179, 179 },
- { 180, 381 },
- { 181, 181 },
- { 182, 182 },
- { 183, 183 },
- { 184, 382 },
- { 185, 185 },
- { 186, 186 },
- { 187, 187 },
- { 188, 338 },
- { 189, 339 },
- { 190, 376 },
- { 191, 191 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 215 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 122, 378 },
- { 122, 380 },
-};
-static convert_t iso8859_16[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 260 },
- { 162, 261 },
- { 163, 321 },
- { 164, 8364 },
- { 165, 8222 },
- { 166, 352 },
- { 167, 167 },
- { 168, 353 },
- { 169, 169 },
- { 170, 536 },
- { 171, 171 },
- { 172, 377 },
- { 173, 173 },
- { 174, 378 },
- { 175, 379 },
- { 176, 176 },
- { 177, 177 },
- { 178, 268 },
- { 179, 322 },
- { 180, 381 },
- { 181, 8221 },
- { 182, 182 },
- { 183, 183 },
- { 184, 382 },
- { 185, 269 },
- { 186, 537 },
- { 187, 187 },
- { 188, 338 },
- { 189, 339 },
- { 190, 376 },
- { 191, 380 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 258 },
- { 196, 196 },
- { 197, 262 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 272 },
- { 209, 323 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 336 },
- { 214, 214 },
- { 215, 346 },
- { 216, 368 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 280 },
- { 222, 538 },
- { 223, 223 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 259 },
- { 228, 228 },
- { 229, 263 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 273 },
- { 241, 324 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 337 },
- { 246, 246 },
- { 247, 347 },
- { 248, 369 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 281 },
- { 254, 539 },
- { 255, 255 },
- { 34, 8220 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 195 },
- { 65, 197 },
- { 65, 256 },
- { 65, 461 },
- { 97, 227 },
- { 97, 229 },
- { 97, 257 },
- { 97, 462 },
- { 67, 264 },
- { 67, 266 },
- { 99, 265 },
- { 99, 267 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 77, 209 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 213 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 465 },
- { 78, 490 },
- { 110, 245 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 348 },
- { 83, 350 },
- { 115, 349 },
- { 115, 351 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 121, 253 },
- { 121, 375 },
-};
-static convert_t koi8_r[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 9472 },
- { 129, 9474 },
- { 130, 9484 },
- { 131, 9488 },
- { 132, 9492 },
- { 133, 9496 },
- { 134, 9500 },
- { 135, 9508 },
- { 136, 9516 },
- { 137, 9524 },
- { 138, 9532 },
- { 139, 9600 },
- { 140, 9604 },
- { 141, 9608 },
- { 142, 9612 },
- { 143, 9616 },
- { 144, 9617 },
- { 145, 9618 },
- { 146, 9619 },
- { 147, 8992 },
- { 148, 9632 },
- { 149, 8729 },
- { 150, 8730 },
- { 151, 8776 },
- { 152, 8804 },
- { 153, 8805 },
- { 154, 160 },
- { 155, 8993 },
- { 156, 176 },
- { 157, 178 },
- { 158, 183 },
- { 159, 247 },
- { 160, 9552 },
- { 161, 9553 },
- { 162, 9554 },
- { 163, 1105 },
- { 164, 9555 },
- { 165, 9556 },
- { 166, 9557 },
- { 167, 9558 },
- { 168, 9559 },
- { 169, 9560 },
- { 170, 9561 },
- { 171, 9562 },
- { 172, 9563 },
- { 173, 9564 },
- { 174, 9565 },
- { 175, 9566 },
- { 176, 9567 },
- { 177, 9568 },
- { 178, 9569 },
- { 179, 1025 },
- { 180, 9570 },
- { 181, 9571 },
- { 182, 9572 },
- { 183, 9573 },
- { 184, 9574 },
- { 185, 9575 },
- { 186, 9576 },
- { 187, 9577 },
- { 188, 9578 },
- { 189, 9579 },
- { 190, 9580 },
- { 191, 169 },
- { 192, 1102 },
- { 193, 1072 },
- { 194, 1073 },
- { 195, 1094 },
- { 196, 1076 },
- { 197, 1077 },
- { 198, 1092 },
- { 199, 1075 },
- { 200, 1093 },
- { 201, 1080 },
- { 202, 1081 },
- { 203, 1082 },
- { 204, 1083 },
- { 205, 1084 },
- { 206, 1085 },
- { 207, 1086 },
- { 208, 1087 },
- { 209, 1103 },
- { 210, 1088 },
- { 211, 1089 },
- { 212, 1090 },
- { 213, 1091 },
- { 214, 1078 },
- { 215, 1074 },
- { 216, 1100 },
- { 217, 1099 },
- { 218, 1079 },
- { 219, 1096 },
- { 220, 1101 },
- { 221, 1097 },
- { 222, 1095 },
- { 223, 1098 },
- { 224, 1070 },
- { 225, 1040 },
- { 226, 1041 },
- { 227, 1062 },
- { 228, 1044 },
- { 229, 1045 },
- { 230, 1060 },
- { 231, 1043 },
- { 232, 1061 },
- { 233, 1048 },
- { 234, 1049 },
- { 235, 1050 },
- { 236, 1051 },
- { 237, 1052 },
- { 238, 1053 },
- { 239, 1054 },
- { 240, 1055 },
- { 241, 1071 },
- { 242, 1056 },
- { 243, 1057 },
- { 244, 1058 },
- { 245, 1059 },
- { 246, 1046 },
- { 247, 1042 },
- { 248, 1068 },
- { 249, 1067 },
- { 250, 1047 },
- { 251, 1064 },
- { 252, 1069 },
- { 253, 1065 },
- { 254, 1063 },
- { 255, 1066 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 244 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 220 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 252 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t koi8_u[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 9472 },
- { 129, 9474 },
- { 130, 9484 },
- { 131, 9488 },
- { 132, 9492 },
- { 133, 9496 },
- { 134, 9500 },
- { 135, 9508 },
- { 136, 9516 },
- { 137, 9524 },
- { 138, 9532 },
- { 139, 9600 },
- { 140, 9604 },
- { 141, 9608 },
- { 142, 9612 },
- { 143, 9616 },
- { 144, 9617 },
- { 145, 9618 },
- { 146, 9619 },
- { 147, 8992 },
- { 148, 9632 },
- { 149, 8729 },
- { 150, 8730 },
- { 151, 8776 },
- { 152, 8804 },
- { 153, 8805 },
- { 154, 160 },
- { 155, 8993 },
- { 156, 176 },
- { 157, 178 },
- { 158, 183 },
- { 159, 247 },
- { 160, 9552 },
- { 161, 9553 },
- { 162, 9554 },
- { 163, 1105 },
- { 164, 1108 },
- { 165, 9556 },
- { 166, 1110 },
- { 167, 1111 },
- { 168, 9559 },
- { 169, 9560 },
- { 170, 9561 },
- { 171, 9562 },
- { 172, 9563 },
- { 173, 1169 },
- { 174, 9565 },
- { 175, 9566 },
- { 176, 9567 },
- { 177, 9568 },
- { 178, 9569 },
- { 179, 1025 },
- { 180, 1028 },
- { 181, 9571 },
- { 182, 1030 },
- { 183, 1031 },
- { 184, 9574 },
- { 185, 9575 },
- { 186, 9576 },
- { 187, 9577 },
- { 188, 9578 },
- { 189, 1168 },
- { 190, 9580 },
- { 191, 169 },
- { 192, 1102 },
- { 193, 1072 },
- { 194, 1073 },
- { 195, 1094 },
- { 196, 1076 },
- { 197, 1077 },
- { 198, 1092 },
- { 199, 1075 },
- { 200, 1093 },
- { 201, 1080 },
- { 202, 1081 },
- { 203, 1082 },
- { 204, 1083 },
- { 205, 1084 },
- { 206, 1085 },
- { 207, 1086 },
- { 208, 1087 },
- { 209, 1103 },
- { 210, 1088 },
- { 211, 1089 },
- { 212, 1090 },
- { 213, 1091 },
- { 214, 1078 },
- { 215, 1074 },
- { 216, 1100 },
- { 217, 1099 },
- { 218, 1079 },
- { 219, 1096 },
- { 220, 1101 },
- { 221, 1097 },
- { 222, 1095 },
- { 223, 1098 },
- { 224, 1070 },
- { 225, 1040 },
- { 226, 1041 },
- { 227, 1062 },
- { 228, 1044 },
- { 229, 1045 },
- { 230, 1060 },
- { 231, 1043 },
- { 232, 1061 },
- { 233, 1048 },
- { 234, 1049 },
- { 235, 1050 },
- { 236, 1051 },
- { 237, 1052 },
- { 238, 1053 },
- { 239, 1054 },
- { 240, 1055 },
- { 241, 1071 },
- { 242, 1056 },
- { 243, 1057 },
- { 244, 1058 },
- { 245, 1059 },
- { 246, 1046 },
- { 247, 1042 },
- { 248, 1068 },
- { 249, 1067 },
- { 250, 1047 },
- { 251, 1064 },
- { 252, 1069 },
- { 253, 1065 },
- { 254, 1063 },
- { 255, 1066 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 224 },
- { 97, 225 },
- { 97, 226 },
- { 97, 227 },
- { 97, 228 },
- { 97, 229 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 231 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 232 },
- { 101, 233 },
- { 101, 234 },
- { 101, 235 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 236 },
- { 105, 237 },
- { 105, 238 },
- { 105, 239 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 241 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 242 },
- { 110, 243 },
- { 110, 244 },
- { 110, 245 },
- { 110, 246 },
- { 110, 248 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 220 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 249 },
- { 117, 250 },
- { 117, 251 },
- { 117, 252 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 253 },
- { 121, 255 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t mslinedr[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 164 },
- { 165, 165 },
- { 166, 166 },
- { 167, 167 },
- { 168, 168 },
- { 169, 169 },
- { 170, 170 },
- { 171, 171 },
- { 172, 172 },
- { 173, 173 },
- { 174, 174 },
- { 175, 175 },
- { 176, 9639 },
- { 177, 9638 },
- { 178, 9640 },
- { 179, 9474 },
- { 180, 9508 },
- { 181, 9569 },
- { 182, 9570 },
- { 183, 9558 },
- { 184, 9557 },
- { 185, 9571 },
- { 186, 9553 },
- { 187, 9559 },
- { 188, 9565 },
- { 189, 9564 },
- { 190, 9563 },
- { 191, 9488 },
- { 192, 9492 },
- { 193, 9524 },
- { 194, 9516 },
- { 195, 9500 },
- { 196, 9472 },
- { 197, 9532 },
- { 198, 9566 },
- { 199, 9567 },
- { 200, 9562 },
- { 201, 9556 },
- { 202, 9577 },
- { 203, 9574 },
- { 204, 9568 },
- { 205, 9552 },
- { 206, 9580 },
- { 207, 9575 },
- { 208, 9576 },
- { 209, 9572 },
- { 210, 9573 },
- { 211, 9561 },
- { 212, 9560 },
- { 213, 9554 },
- { 214, 9555 },
- { 215, 9579 },
- { 216, 9578 },
- { 217, 9496 },
- { 218, 9484 },
- { 219, 9608 },
- { 220, 9604 },
- { 221, 9612 },
- { 222, 9616 },
- { 223, 9600 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 192 },
- { 65, 193 },
- { 65, 194 },
- { 65, 195 },
- { 65, 196 },
- { 65, 197 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 199 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 200 },
- { 69, 201 },
- { 69, 202 },
- { 69, 203 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 204 },
- { 73, 205 },
- { 73, 206 },
- { 73, 207 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 76, 321 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 108, 322 },
- { 77, 209 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 210 },
- { 78, 211 },
- { 78, 212 },
- { 78, 213 },
- { 78, 214 },
- { 78, 216 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 217 },
- { 85, 218 },
- { 85, 219 },
- { 85, 220 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 221 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t nextstep[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 160 },
- { 129, 192 },
- { 130, 193 },
- { 131, 194 },
- { 132, 195 },
- { 133, 196 },
- { 134, 197 },
- { 135, 199 },
- { 136, 200 },
- { 137, 201 },
- { 138, 202 },
- { 139, 203 },
- { 140, 204 },
- { 141, 205 },
- { 142, 206 },
- { 143, 207 },
- { 144, 208 },
- { 145, 209 },
- { 146, 210 },
- { 147, 211 },
- { 148, 212 },
- { 149, 213 },
- { 150, 214 },
- { 151, 217 },
- { 152, 218 },
- { 153, 219 },
- { 154, 220 },
- { 155, 221 },
- { 156, 222 },
- { 157, 181 },
- { 158, 215 },
- { 159, 247 },
- { 160, 169 },
- { 161, 161 },
- { 162, 162 },
- { 163, 163 },
- { 164, 8260 },
- { 165, 165 },
- { 166, 402 },
- { 167, 167 },
- { 168, 164 },
- { 169, 169 },
- { 170, 8220 },
- { 171, 171 },
- { 172, 8249 },
- { 173, 8250 },
- { 174, 64257 },
- { 175, 64258 },
- { 176, 174 },
- { 177, 8211 },
- { 178, 8224 },
- { 179, 8225 },
- { 180, 183 },
- { 181, 166 },
- { 182, 182 },
- { 183, 8729 },
- { 184, 8218 },
- { 185, 8222 },
- { 186, 8221 },
- { 187, 187 },
- { 188, 8943 },
- { 189, 8240 },
- { 190, 172 },
- { 191, 191 },
- { 192, 185 },
- { 193, 768 },
- { 194, 180 },
- { 195, 770 },
- { 196, 771 },
- { 197, 175 },
- { 198, 728 },
- { 199, 729 },
- { 200, 168 },
- { 201, 178 },
- { 202, 176 },
- { 203, 184 },
- { 204, 179 },
- { 205, 733 },
- { 206, 731 },
- { 207, 711 },
- { 208, 8212 },
- { 209, 177 },
- { 210, 188 },
- { 211, 189 },
- { 212, 190 },
- { 213, 224 },
- { 214, 225 },
- { 215, 226 },
- { 216, 227 },
- { 217, 228 },
- { 218, 229 },
- { 219, 231 },
- { 220, 232 },
- { 221, 233 },
- { 222, 234 },
- { 223, 235 },
- { 224, 236 },
- { 225, 198 },
- { 226, 237 },
- { 227, 170 },
- { 228, 238 },
- { 229, 239 },
- { 230, 240 },
- { 231, 241 },
- { 232, 321 },
- { 233, 216 },
- { 234, 338 },
- { 235, 186 },
- { 236, 242 },
- { 237, 243 },
- { 238, 244 },
- { 239, 245 },
- { 240, 246 },
- { 241, 230 },
- { 242, 249 },
- { 243, 250 },
- { 244, 251 },
- { 245, 305 },
- { 246, 252 },
- { 247, 253 },
- { 248, 322 },
- { 249, 248 },
- { 250, 339 },
- { 251, 223 },
- { 252, 254 },
- { 253, 255 },
- { 254, 254 },
- { 255, 255 },
- { 39, 8216 },
- { 39, 8217 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 258 },
- { 65, 260 },
- { 65, 461 },
- { 97, 257 },
- { 97, 259 },
- { 97, 261 },
- { 97, 462 },
- { 67, 262 },
- { 67, 264 },
- { 67, 266 },
- { 67, 268 },
- { 99, 263 },
- { 99, 265 },
- { 99, 267 },
- { 99, 269 },
- { 68, 270 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 69, 280 },
- { 69, 282 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 101, 281 },
- { 101, 283 },
- { 71, 284 },
- { 71, 286 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 287 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 304 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 313 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 108, 314 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 77, 323 },
- { 77, 325 },
- { 77, 327 },
- { 109, 324 },
- { 109, 326 },
- { 109, 328 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 336 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 337 },
- { 110, 466 },
- { 110, 491 },
- { 82, 340 },
- { 82, 342 },
- { 82, 344 },
- { 114, 341 },
- { 114, 343 },
- { 114, 345 },
- { 83, 346 },
- { 83, 348 },
- { 83, 350 },
- { 83, 352 },
- { 115, 347 },
- { 115, 349 },
- { 115, 351 },
- { 115, 353 },
- { 84, 354 },
- { 84, 356 },
- { 116, 355 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 366 },
- { 85, 368 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 367 },
- { 117, 369 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 89, 376 },
- { 121, 375 },
- { 90, 377 },
- { 90, 379 },
- { 90, 381 },
- { 122, 378 },
- { 122, 380 },
- { 122, 382 },
-};
-static convert_t symbol[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 8704 },
- { 35, 35 },
- { 36, 8707 },
- { 37, 37 },
- { 38, 38 },
- { 39, 8715 },
- { 40, 40 },
- { 41, 41 },
- { 42, 8727 },
- { 43, 43 },
- { 44, 44 },
- { 45, 8722 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 8773 },
- { 65, 913 },
- { 66, 914 },
- { 67, 935 },
- { 68, 916 },
- { 69, 917 },
- { 70, 934 },
- { 71, 915 },
- { 72, 919 },
- { 73, 921 },
- { 74, 977 },
- { 75, 922 },
- { 76, 923 },
- { 77, 924 },
- { 78, 925 },
- { 79, 927 },
- { 80, 928 },
- { 81, 920 },
- { 82, 929 },
- { 83, 931 },
- { 84, 932 },
- { 85, 933 },
- { 86, 962 },
- { 87, 937 },
- { 88, 926 },
- { 89, 936 },
- { 90, 918 },
- { 91, 91 },
- { 92, 8756 },
- { 93, 93 },
- { 94, 8869 },
- { 95, 95 },
- { 96, 8254 },
- { 97, 945 },
- { 98, 946 },
- { 99, 967 },
- { 100, 948 },
- { 101, 949 },
- { 102, 966 },
- { 103, 947 },
- { 104, 951 },
- { 105, 953 },
- { 106, 981 },
- { 107, 954 },
- { 108, 955 },
- { 109, 956 },
- { 110, 957 },
- { 111, 959 },
- { 112, 960 },
- { 113, 952 },
- { 114, 961 },
- { 115, 963 },
- { 116, 964 },
- { 117, 965 },
- { 118, 982 },
- { 119, 969 },
- { 120, 958 },
- { 121, 968 },
- { 122, 950 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 8764 },
- { 127, 127 },
- { 128, 128 },
- { 129, 129 },
- { 130, 130 },
- { 131, 131 },
- { 132, 132 },
- { 133, 133 },
- { 134, 134 },
- { 135, 135 },
- { 136, 136 },
- { 137, 137 },
- { 138, 138 },
- { 139, 139 },
- { 140, 140 },
- { 141, 141 },
- { 142, 142 },
- { 143, 143 },
- { 144, 144 },
- { 145, 145 },
- { 146, 146 },
- { 147, 147 },
- { 148, 148 },
- { 149, 149 },
- { 150, 150 },
- { 151, 151 },
- { 152, 152 },
- { 153, 153 },
- { 154, 154 },
- { 155, 155 },
- { 156, 156 },
- { 157, 157 },
- { 158, 158 },
- { 159, 159 },
- { 160, 160 },
- { 161, 978 },
- { 162, 8242 },
- { 163, 8804 },
- { 164, 8725 },
- { 165, 8734 },
- { 166, 402 },
- { 167, 9827 },
- { 168, 9830 },
- { 169, 9829 },
- { 170, 9824 },
- { 171, 8596 },
- { 172, 8592 },
- { 173, 8593 },
- { 174, 8594 },
- { 175, 8595 },
- { 176, 176 },
- { 177, 177 },
- { 178, 8243 },
- { 179, 8805 },
- { 180, 215 },
- { 181, 8733 },
- { 182, 8706 },
- { 183, 8729 },
- { 184, 247 },
- { 185, 8800 },
- { 186, 8801 },
- { 187, 8776 },
- { 188, 8943 },
- { 189, 189 },
- { 190, 190 },
- { 191, 8629 },
- { 192, 192 },
- { 193, 8465 },
- { 194, 8476 },
- { 195, 8472 },
- { 196, 8855 },
- { 197, 8853 },
- { 198, 8709 },
- { 199, 8745 },
- { 200, 8746 },
- { 201, 8835 },
- { 202, 8839 },
- { 203, 8836 },
- { 204, 8834 },
- { 205, 8838 },
- { 206, 8712 },
- { 207, 8713 },
- { 208, 8736 },
- { 209, 8711 },
- { 210, 174 },
- { 211, 169 },
- { 212, 8482 },
- { 213, 8719 },
- { 214, 8730 },
- { 215, 8901 },
- { 216, 172 },
- { 217, 8743 },
- { 218, 8744 },
- { 219, 8660 },
- { 220, 8656 },
- { 221, 8657 },
- { 222, 8658 },
- { 223, 8659 },
- { 224, 9674 },
- { 225, 9001 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 8721 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 9002 },
- { 242, 8747 },
- { 243, 8992 },
- { 244, 244 },
- { 245, 8993 },
- { 246, 246 },
- { 247, 247 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 255 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 192, 65 },
- { 192, 193 },
- { 192, 194 },
- { 192, 195 },
- { 192, 196 },
- { 192, 197 },
- { 192, 256 },
- { 192, 258 },
- { 192, 260 },
- { 192, 461 },
- { 226, 97 },
- { 226, 224 },
- { 226, 225 },
- { 226, 229 },
- { 226, 257 },
- { 226, 259 },
- { 226, 261 },
- { 226, 462 },
- { 231, 99 },
- { 231, 263 },
- { 231, 265 },
- { 231, 267 },
- { 231, 269 },
- { 232, 101 },
- { 232, 275 },
- { 232, 277 },
- { 232, 279 },
- { 232, 281 },
- { 232, 283 },
- { 236, 105 },
- { 236, 297 },
- { 236, 299 },
- { 236, 301 },
- { 236, 303 },
- { 236, 305 },
- { 236, 464 },
- { 244, 110 },
- { 244, 242 },
- { 244, 243 },
- { 244, 245 },
- { 244, 333 },
- { 244, 335 },
- { 244, 337 },
- { 244, 466 },
- { 244, 491 },
- { 249, 117 },
- { 249, 361 },
- { 249, 363 },
- { 249, 365 },
- { 249, 367 },
- { 249, 369 },
- { 249, 371 },
- { 249, 468 },
- { 253, 121 },
- { 253, 375 },
-};
-static convert_t tex_dcr_in[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 258 },
- { 129, 260 },
- { 130, 262 },
- { 131, 268 },
- { 132, 270 },
- { 133, 282 },
- { 134, 280 },
- { 135, 286 },
- { 136, 313 },
- { 137, 65534 },
- { 138, 321 },
- { 139, 323 },
- { 140, 327 },
- { 141, 330 },
- { 142, 336 },
- { 143, 340 },
- { 144, 344 },
- { 145, 346 },
- { 146, 352 },
- { 147, 350 },
- { 148, 356 },
- { 149, 354 },
- { 150, 368 },
- { 151, 366 },
- { 152, 376 },
- { 153, 377 },
- { 154, 381 },
- { 155, 379 },
- { 156, 306 },
- { 157, 304 },
- { 158, 272 },
- { 159, 167 },
- { 160, 259 },
- { 161, 261 },
- { 162, 263 },
- { 163, 269 },
- { 164, 65534 },
- { 165, 283 },
- { 166, 281 },
- { 167, 287 },
- { 168, 314 },
- { 169, 65534 },
- { 170, 322 },
- { 171, 324 },
- { 172, 328 },
- { 173, 331 },
- { 174, 337 },
- { 175, 341 },
- { 176, 345 },
- { 177, 347 },
- { 178, 353 },
- { 179, 351 },
- { 180, 65534 },
- { 181, 355 },
- { 182, 369 },
- { 183, 367 },
- { 184, 255 },
- { 185, 378 },
- { 186, 382 },
- { 187, 380 },
- { 188, 307 },
- { 189, 161 },
- { 190, 191 },
- { 191, 163 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 338 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 65534 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 339 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 223 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 461 },
- { 97, 257 },
- { 97, 462 },
- { 67, 264 },
- { 67, 266 },
- { 99, 265 },
- { 99, 267 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 71, 284 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 77, 325 },
- { 109, 326 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 466 },
- { 110, 491 },
- { 82, 342 },
- { 114, 343 },
- { 83, 348 },
- { 115, 349 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 121, 375 },
-};
-static convert_t tex_dcr_out[] = {
- { 0, 0 },
- { 1, 1 },
- { 2, 2 },
- { 3, 3 },
- { 4, 4 },
- { 5, 5 },
- { 6, 6 },
- { 7, 7 },
- { 8, 8 },
- { 9, 9 },
- { 10, 10 },
- { 11, 11 },
- { 12, 12 },
- { 13, 13 },
- { 14, 14 },
- { 15, 15 },
- { 16, 16 },
- { 17, 17 },
- { 18, 18 },
- { 19, 19 },
- { 20, 20 },
- { 21, 21 },
- { 22, 22 },
- { 23, 23 },
- { 24, 24 },
- { 25, 25 },
- { 26, 26 },
- { 27, 27 },
- { 28, 28 },
- { 29, 29 },
- { 30, 30 },
- { 31, 31 },
- { 32, 32 },
- { 33, 33 },
- { 34, 34 },
- { 35, 35 },
- { 36, 36 },
- { 37, 37 },
- { 38, 38 },
- { 39, 39 },
- { 40, 40 },
- { 41, 41 },
- { 42, 42 },
- { 43, 43 },
- { 44, 44 },
- { 45, 45 },
- { 46, 46 },
- { 47, 47 },
- { 48, 48 },
- { 49, 49 },
- { 50, 50 },
- { 51, 51 },
- { 52, 52 },
- { 53, 53 },
- { 54, 54 },
- { 55, 55 },
- { 56, 56 },
- { 57, 57 },
- { 58, 58 },
- { 59, 59 },
- { 60, 60 },
- { 61, 61 },
- { 62, 62 },
- { 63, 63 },
- { 64, 64 },
- { 65, 65 },
- { 66, 66 },
- { 67, 67 },
- { 68, 68 },
- { 69, 69 },
- { 70, 70 },
- { 71, 71 },
- { 72, 72 },
- { 73, 73 },
- { 74, 74 },
- { 75, 75 },
- { 76, 76 },
- { 77, 77 },
- { 78, 78 },
- { 79, 79 },
- { 80, 80 },
- { 81, 81 },
- { 82, 82 },
- { 83, 83 },
- { 84, 84 },
- { 85, 85 },
- { 86, 86 },
- { 87, 87 },
- { 88, 88 },
- { 89, 89 },
- { 90, 90 },
- { 91, 91 },
- { 92, 92 },
- { 93, 93 },
- { 94, 94 },
- { 95, 95 },
- { 96, 96 },
- { 97, 97 },
- { 98, 98 },
- { 99, 99 },
- { 100, 100 },
- { 101, 101 },
- { 102, 102 },
- { 103, 103 },
- { 104, 104 },
- { 105, 105 },
- { 106, 106 },
- { 107, 107 },
- { 108, 108 },
- { 109, 109 },
- { 110, 110 },
- { 111, 111 },
- { 112, 112 },
- { 113, 113 },
- { 114, 114 },
- { 115, 115 },
- { 116, 116 },
- { 117, 117 },
- { 118, 118 },
- { 119, 119 },
- { 120, 120 },
- { 121, 121 },
- { 122, 122 },
- { 123, 123 },
- { 124, 124 },
- { 125, 125 },
- { 126, 126 },
- { 127, 127 },
- { 128, 258 },
- { 129, 260 },
- { 130, 262 },
- { 131, 268 },
- { 132, 270 },
- { 133, 282 },
- { 134, 280 },
- { 135, 286 },
- { 136, 313 },
- { 137, 65534 },
- { 138, 321 },
- { 139, 323 },
- { 140, 327 },
- { 141, 330 },
- { 142, 336 },
- { 143, 340 },
- { 144, 344 },
- { 145, 346 },
- { 146, 352 },
- { 147, 350 },
- { 148, 356 },
- { 149, 354 },
- { 150, 368 },
- { 151, 366 },
- { 152, 376 },
- { 153, 377 },
- { 154, 381 },
- { 155, 379 },
- { 156, 306 },
- { 157, 304 },
- { 158, 272 },
- { 159, 167 },
- { 160, 259 },
- { 161, 261 },
- { 162, 263 },
- { 163, 269 },
- { 164, 65534 },
- { 165, 283 },
- { 166, 281 },
- { 167, 287 },
- { 168, 314 },
- { 169, 65534 },
- { 170, 322 },
- { 171, 324 },
- { 172, 328 },
- { 173, 331 },
- { 174, 337 },
- { 175, 341 },
- { 176, 345 },
- { 177, 347 },
- { 178, 353 },
- { 179, 351 },
- { 180, 65534 },
- { 181, 355 },
- { 182, 369 },
- { 183, 367 },
- { 184, 255 },
- { 185, 378 },
- { 186, 382 },
- { 187, 380 },
- { 188, 307 },
- { 189, 161 },
- { 190, 191 },
- { 191, 163 },
- { 192, 192 },
- { 193, 193 },
- { 194, 194 },
- { 195, 195 },
- { 196, 196 },
- { 197, 197 },
- { 198, 198 },
- { 199, 199 },
- { 200, 200 },
- { 201, 201 },
- { 202, 202 },
- { 203, 203 },
- { 204, 204 },
- { 205, 205 },
- { 206, 206 },
- { 207, 207 },
- { 208, 208 },
- { 209, 209 },
- { 210, 210 },
- { 211, 211 },
- { 212, 212 },
- { 213, 213 },
- { 214, 214 },
- { 215, 338 },
- { 216, 216 },
- { 217, 217 },
- { 218, 218 },
- { 219, 219 },
- { 220, 220 },
- { 221, 221 },
- { 222, 222 },
- { 223, 65534 },
- { 224, 224 },
- { 225, 225 },
- { 226, 226 },
- { 227, 227 },
- { 228, 228 },
- { 229, 229 },
- { 230, 230 },
- { 231, 231 },
- { 232, 232 },
- { 233, 233 },
- { 234, 234 },
- { 235, 235 },
- { 236, 236 },
- { 237, 237 },
- { 238, 238 },
- { 239, 239 },
- { 240, 240 },
- { 241, 241 },
- { 242, 242 },
- { 243, 243 },
- { 244, 244 },
- { 245, 245 },
- { 246, 246 },
- { 247, 339 },
- { 248, 248 },
- { 249, 249 },
- { 250, 250 },
- { 251, 251 },
- { 252, 252 },
- { 253, 253 },
- { 254, 254 },
- { 255, 223 },
- { 34, 8220 },
- { 34, 8221 },
- { 39, 8216 },
- { 39, 8217 },
- { 45, 8211 },
- { 45, 8212 },
- { 32, 8194 },
- { 32, 8195 },
- { 32, 8201 },
- { 65, 256 },
- { 65, 461 },
- { 97, 257 },
- { 97, 462 },
- { 67, 264 },
- { 67, 266 },
- { 99, 265 },
- { 99, 267 },
- { 100, 271 },
- { 69, 274 },
- { 69, 276 },
- { 69, 278 },
- { 101, 275 },
- { 101, 277 },
- { 101, 279 },
- { 71, 284 },
- { 71, 288 },
- { 71, 290 },
- { 71, 486 },
- { 71, 500 },
- { 103, 285 },
- { 103, 289 },
- { 103, 291 },
- { 103, 487 },
- { 103, 501 },
- { 72, 292 },
- { 104, 293 },
- { 73, 296 },
- { 73, 298 },
- { 73, 300 },
- { 73, 302 },
- { 73, 463 },
- { 105, 297 },
- { 105, 299 },
- { 105, 301 },
- { 105, 303 },
- { 105, 305 },
- { 105, 464 },
- { 74, 308 },
- { 106, 309 },
- { 75, 310 },
- { 75, 488 },
- { 107, 311 },
- { 107, 489 },
- { 76, 315 },
- { 76, 317 },
- { 76, 319 },
- { 108, 316 },
- { 108, 318 },
- { 108, 320 },
- { 77, 325 },
- { 109, 326 },
- { 109, 329 },
- { 78, 332 },
- { 78, 334 },
- { 78, 465 },
- { 78, 490 },
- { 110, 333 },
- { 110, 335 },
- { 110, 466 },
- { 110, 491 },
- { 82, 342 },
- { 114, 343 },
- { 83, 348 },
- { 115, 349 },
- { 116, 357 },
- { 85, 360 },
- { 85, 362 },
- { 85, 364 },
- { 85, 370 },
- { 85, 467 },
- { 117, 361 },
- { 117, 363 },
- { 117, 365 },
- { 117, 371 },
- { 117, 468 },
- { 87, 372 },
- { 119, 373 },
- { 89, 374 },
- { 121, 375 },
-};
-allcharconvert_t allcharconvert[] = {
-{ "adobeiso",
- "Adobe ISO",
- { "ADOBEISO", "", "", "", "", "", "", },
- CHARSETARRAY( adobeiso )
-},
-{ "adobestd",
- "Adobe Standard",
- { "ADOBESTD", "", "", "", "", "", "", },
- CHARSETARRAY( adobestd )
-},
-{ "adobesym",
- "Adobe Symbol",
- { "ADOBESYM", "", "", "", "", "", "", },
- CHARSETARRAY( adobesym )
-},
-{ "applecro",
- "Apple Croatian",
- { "APPLECRO", "MACCRO", "", "", "", "", "", },
- CHARSETARRAY( applecro )
-},
-{ "applecyr",
- "Apple Cyrillic",
- { "MACCYRILLIC", "X-MAC-CYRILLIC", "", "", "", "", "", },
- CHARSETARRAY( applecyr )
-},
-{ "applegk2",
- "Apple Greek 2",
- { "APPLEGK2", "", "", "", "", "", "", },
- CHARSETARRAY( applegk2 )
-},
-{ "applegrk",
- "Apple Greek",
- { "MACGRK", "APPLEGRK", "", "", "", "", "", },
- CHARSETARRAY( applegrk )
-},
-{ "macice",
- "Macintosh Iceland(?)",
- { "MACICE", "APPLEICE", "", "", "", "", "", },
- CHARSETARRAY( macice )
-},
-{ "macroman",
- "Macintosh Roman",
- { "MACROMAN", "APPLEROM", "CSMACINTOSH", "MACINTOSH", "MAC", "", "", },
- CHARSETARRAY( macroman )
-},
-{ "macromanian",
- "Macintosh Romanian",
- { "MACROMANIAN", "APPLERUM", "", "", "", "", "", },
- CHARSETARRAY( macromanian )
-},
-{ "macturkish",
- "Macintosh Turkish",
- { "MACTURKISH", "APPLETURK", "", "", "", "", "", },
- CHARSETARRAY( macturkish )
-},
-{ "atarist",
- "Atari ST",
- { "ATARIST", "", "", "", "", "", "", },
- CHARSETARRAY( atarist )
-},
-{ "cp437",
- "MS-DOS Code Page 437 from original IBM PC",
- { "CP437", "IBM437", "437", "", "", "", "", },
- CHARSETARRAY( cp437 )
-},
-{ "cp737",
- "MS-DOS Code Page 737 Greek",
- { "CP737", "IBM737", "737", "", "", "", "", },
- CHARSETARRAY( cp737 )
-},
-{ "cp775",
- "MS-DOS Code Page 775 Baltic languages",
- { "CP775", "IBM775", "775", "", "", "", "", },
- CHARSETARRAY( cp775 )
-},
-{ "cp850",
- "MS-DOS Code Page 850 Western Europe",
- { "CP850", "IBM850", "CSPC850MULTILINGUAL", "850", "", "", "", },
- CHARSETARRAY( cp850 )
-},
-{ "cp851",
- "MS-DOS Code Page 851 Greek 1",
- { "CP851", "IBM851", "851", "", "", "", "", },
- CHARSETARRAY( cp851 )
-},
-{ "cp852",
- "MS-DOS Code Page 852 Central European languages",
- { "CP852", "IBM852", "852", "", "", "", "", },
- CHARSETARRAY( cp852 )
-},
-{ "cp853",
- "MS-DOS Code Page 853 Multilingual Latin 3",
- { "CP853", "IBM853", "853", "", "", "", "", },
- CHARSETARRAY( cp853 )
-},
-{ "cp855",
- "MS-DOS Code Page 855 Cyrillic",
- { "CP855", "IBM855", "855", "", "", "", "", },
- CHARSETARRAY( cp855 )
-},
-{ "cp857",
- "MS-DOS Code Page 857 Turkish",
- { "CP857", "IBM857", "857", "", "", "", "", },
- CHARSETARRAY( cp857 )
-},
-{ "cp860",
- "MS-DOS Code Page 860 Portugese",
- { "CP860", "IBM860", "860", "", "", "", "", },
- CHARSETARRAY( cp860 )
-},
-{ "cp861",
- "MS-DOS Code Page 861 Icelandic languages",
- { "CP861", "IBM861", "861", "", "", "", "", },
- CHARSETARRAY( cp861 )
-},
-{ "cp862",
- "MS-DOS Code Page 862 Hebrew",
- { "CP862", "IBM862", "862", "", "", "", "", },
- CHARSETARRAY( cp862 )
-},
-{ "cp863",
- "MS-DOS Code Page 863 French",
- { "CP863", "IBM863", "863", "", "", "", "", },
- CHARSETARRAY( cp863 )
-},
-{ "cp864",
- "MS-DOS Code Page 864 Arabic",
- { "CP864", "IBM864", "864", "", "", "", "", },
- CHARSETARRAY( cp864 )
-},
-{ "cp865",
- "MS-DOS Code Page 865 Nordic languages",
- { "CP865", "IBM865", "865", "", "", "", "", },
- CHARSETARRAY( cp865 )
-},
-{ "cp866",
- "MS-DOS Code Page 866 Cyrillic",
- { "CP866", "IBM866", "866", "CSIBM866", "", "", "", },
- CHARSETARRAY( cp866 )
-},
-{ "cp869",
- "MS-DOS Code Page 869 Greek",
- { "CP869", "IBM869", "869", "", "", "", "", },
- CHARSETARRAY( cp869 )
-},
-{ "cp874",
- "Windows-874 Thai",
- { "CP874", "WINDOWS-874", "MS874", "X-WINDOWS-874", "X-IBM874", "874", "", },
- CHARSETARRAY( cp874 )
-},
-{ "cp895",
- "MS-DOS Code Page 895 Kamenicky encoding",
- { "CP895", "895", "", "", "", "", "", },
- CHARSETARRAY( cp895 )
-},
-{ "cp1250",
- "Windows-1250 Central and Eastern European",
- { "CP1250", "WINDOWS-1250", "MS-EE", "", "", "", "", },
- CHARSETARRAY( cp1250 )
-},
-{ "cp1251",
- "Windows-1251 Cyrillic",
- { "CP1251", "WINDOWS-1251", "MS-CYRL", "", "", "", "", },
- CHARSETARRAY( cp1251 )
-},
-{ "cp1252",
- "Windows-1252 ISO 8859-1 superset",
- { "CP1252", "WINDOWS-1252", "MS-ANSI", "", "", "", "", },
- CHARSETARRAY( cp1252 )
-},
-{ "cp1253",
- "Windows-1253 Greek",
- { "CP1253", "WINDOWS-1253", "MS-GREEK", "", "", "", "", },
- CHARSETARRAY( cp1253 )
-},
-{ "cp1254",
- "Windows-1254 Turkish",
- { "CP1254", "WINDOWS-1254", "MS-TURK", "", "", "", "", },
- CHARSETARRAY( cp1254 )
-},
-{ "cp1255",
- "Windows-1255 ISO 8859-8 Hebrew",
- { "CP1255", "WINDOWS-1255", "MS-HEBR", "", "", "", "", },
- CHARSETARRAY( cp1255 )
-},
-{ "cp1256",
- "Windows-1256 Arabic",
- { "CP1256", "WINDOWS-1256", "MS-ARAB", "", "", "", "", },
- CHARSETARRAY( cp1256 )
-},
-{ "cp1257",
- "Windows-1257 Baltic languages",
- { "CP1257", "WINDOWS-1257", "WINBALTRIM", "", "", "", "", },
- CHARSETARRAY( cp1257 )
-},
-{ "cp1258",
- "Windows-1258 Vietnamese",
- { "CP1258", "WINDOWS-1258", "", "", "", "", "", },
- CHARSETARRAY( cp1258 )
-},
-{ "decmcs",
- "DEC Multinational Character Set",
- { "DECMCS", "", "", "", "", "", "", },
- CHARSETARRAY( decmcs )
-},
-{ "ebc037",
- "EBCDIC Codepage 037 Latin-1",
- { "EBC037", "", "", "", "", "", "", },
- CHARSETARRAY( ebc037 )
-},
-{ "ebc1026",
- "EBCDIC 1026 Turkish",
- { "EBC1026", "", "", "", "", "", "", },
- CHARSETARRAY( ebc1026 )
-},
-{ "ebc1047",
- "EBCDIC 1047 Latin 1",
- { "EBC1047", "", "", "", "", "", "", },
- CHARSETARRAY( ebc1047 )
-},
-{ "ebc500",
- "EBCDIC 500 Latin 1",
- { "EBC500", "", "", "", "", "", "", },
- CHARSETARRAY( ebc500 )
-},
-{ "ebc875",
- "EBCDIC 875 Greek",
- { "EBC875", "", "", "", "", "", "", },
- CHARSETARRAY( ebc875 )
-},
-{ "hp48",
- "HP48",
- { "HP48", "", "", "", "", "", "", },
- CHARSETARRAY( hp48 )
-},
-{ "hproman8",
- "HP Roman8",
- { "HPROMAN8", "", "", "", "", "", "", },
- CHARSETARRAY( hproman8 )
-},
-{ "iso646",
- "ISO/IEC 646",
- { "ISO646", "", "", "", "", "", "", },
- CHARSETARRAY( iso646 )
-},
-{ "iso646_irv",
- "ISO/IEC 646-IRV International Reference Variant",
- { "ISO646-IRV", "", "", "", "", "", "", },
- CHARSETARRAY( iso646_irv )
-},
-{ "iso646_ca",
- "ISO/IEC 646-CA Canada",
- { "ISO646-CA", "", "", "", "", "", "", },
- CHARSETARRAY( iso646_ca )
-},
-{ "iso646_ch",
- "ISO/IEC 646-CH",
- { "ISO646-CH", "", "", "", "", "", "", },
- CHARSETARRAY( iso646_ch )
-},
-{ "iso646_de",
- "ISO/IEC 646-DE Germany",
- { "ISO646-DE", "", "", "", "", "", "", },
- CHARSETARRAY( iso646_de )
-},
-{ "iso646_es",
- "ISO/IEC 646-ES Spain",
- { "ISO646-ES", "", "", "", "", "", "", },
- CHARSETARRAY( iso646_es )
-},
-{ "iso646_fi",
- "ISO/IEC 646-FI Finland",
- { "ISO646-FI", "", "", "", "", "", "", },
- CHARSETARRAY( iso646_fi )
-},
-{ "iso646_fr",
- "ISO/IEC 646-FR France",
- { "ISO646-FR", "", "", "", "", "", "", },
- CHARSETARRAY( iso646_fr )
-},
-{ "iso646_gb",
- "ISO/IEC 646-GB United Kingdom",
- { "ISO646-GB", "", "", "", "", "", "", },
- CHARSETARRAY( iso646_gb )
-},
-{ "iso646_it",
- "ISO/IEC 646-IT",
- { "ISO646-IT", "", "", "", "", "", "", },
- CHARSETARRAY( iso646_it )
-},
-{ "iso646_nl",
- "ISO/IEC 646-NL",
- { "ISO646-NL", "", "", "", "", "", "", },
- CHARSETARRAY( iso646_nl )
-},
-{ "iso646_no",
- "ISO/IEC 646-NO Norway",
- { "ISO646-NO", "", "", "", "", "", "", },
- CHARSETARRAY( iso646_no )
-},
-{ "iso646_pt",
- "ISO/IEC 646-PT Portugal",
- { "ISO646-PT", "", "", "", "", "", "", },
- CHARSETARRAY( iso646_pt )
-},
-{ "iso646_se",
- "ISO/IEC 646-SE Sweden",
- { "ISO646-SE", "", "", "", "", "", "", },
- CHARSETARRAY( iso646_se )
-},
-{ "iso8859_1",
- "ISO/IEC 8859-1:1998 Latin-1",
- { "ISO-8859-1", "CSISOLATIN", "LATIN1", "ISO-IR-100", "CP819", "IBM819", "ISO_8859-1", },
- CHARSETARRAY( iso8859_1 )
-},
-{ "iso8859_2",
- "ISO/IEC 8859-2:1999 Latin-2 Eastern European",
- { "ISO-8859-2", "CSISOLATIN2", "LATIN2", "ISO-IR-101", "ISO_8859-2", "ISO_8859-2:1987", "L2", },
- CHARSETARRAY( iso8859_2 )
-},
-{ "iso8859_3",
- "ISO/IEC 8859-3:1999 Latin-3 South European",
- { "ISO-8859-3", "CSISOLATIN3", "LATIN3", "ISO-IR-109", "ISO_8859-3", "ISO_8859-3:1988", "L3", },
- CHARSETARRAY( iso8859_3 )
-},
-{ "iso8859_4",
- "ISO/IEC 8859-4:1998 Latin-4 North European",
- { "ISO-8859-4", "CSISOLATIN4", "LATIN4", "ISO-IR-110", "ISO_8859-4", "ISO_8859-4:1988", "L4", },
- CHARSETARRAY( iso8859_4 )
-},
-{ "iso8859_5",
- "ISO/IEC 8859-5:1999 Latin/Cyrillic",
- { "ISO-8859-5", "CSISOLATINCYRILLIC", "CYRILLIC", "ISO-IR-144", "ISO_8859-5", "ISO_8859-5:1988", "", },
- CHARSETARRAY( iso8859_5 )
-},
-{ "iso8859_6",
- "ISO/IEC 8859-6:1999 Latin/Arabic",
- { "ISO-8859-6", "ARABIC", "ASMO-708", "CSISOLATINARABIC", "ECMA-114", "ISO-IR-127", "ISO_8859-6", },
- CHARSETARRAY( iso8859_6 )
-},
-{ "iso8859_7",
- "ISO/IEC 8859-7:2003 Latin/Greek",
- { "ISO-8859-7", "CSISOLATINGREEK", "GREEK", "ECMA-118", "ELOT_928", "GREEK8", "ISO-IR-126", },
- CHARSETARRAY( iso8859_7 )
-},
-{ "iso8859_8",
- "ISO/IEC 8859-8:1999 Latin/Hebrew",
- { "ISO-8859-8", "CSISOLATINHEBREW", "HEBREW", "ISO-IR-138", "ISO_8859-8", "ISO_8859-8:1988", "", },
- CHARSETARRAY( iso8859_8 )
-},
-{ "iso8859_9",
- "ISO/IEC 8859-9:1999 Latin-5 Turkish",
- { "ISO-8859-9", "CSISOLATIN5", "LATIN5", "ISO-IR-148", "ISO_8859-9", "ISO_8859-9:1989", "L5", },
- CHARSETARRAY( iso8859_9 )
-},
-{ "iso8859_10",
- "ISO/IEC 8859-10:1998 Latin-6 Nordic languages",
- { "ISO-8859-10", "CSISOLATIN6", "LATIN6", "ISO-IR-157", "ISO_8859-10", "ISO_8859-10:1992", "L6", },
- CHARSETARRAY( iso8859_10 )
-},
-{ "iso8859_11",
- "ISO/IEC 8859-11:2001 Latin/Thai",
- { "ISO-8859-11,", "TIS-620,", "TIS620,", "TACTIS", "", "", "", },
- CHARSETARRAY( iso8859_11 )
-},
-{ "iso8859_13",
- "ISO/IEC 8859-13:1998 Latin-7 Baltic Rim",
- { "ISO-8859-13", "CSISOLATIN7", "LATIN7", "ISO-IR-179", "ISO_8859-13", "L7", "", },
- CHARSETARRAY( iso8859_13 )
-},
-{ "iso8859_14",
- "ISO/IEC 8859-14:1998 Latin-8 Celtic",
- { "ISO-8859-14", "CSISOLATIN8", "LATIN8", "ISO-IR-199", "ISO_8859-14", "ISO_8859-14:1998", "L8", },
- CHARSETARRAY( iso8859_14 )
-},
-{ "iso8859_15",
- "ISO/IEC 8859-15:1999 Latin-9 Western European",
- { "ISO-8859-15", "ISO-IR-203", "ISO_8859-15", "ISO_8859-15:1998", "", "", "", },
- CHARSETARRAY( iso8859_15 )
-},
-{ "iso8859_16",
- "ISO/IEC 8859-16:2001 Latin-10 South-Eastern European",
- { "ISO-8859-16", "CSISOLATIN10", "LATIN10", "ISO-IR-226", "ISO_8859-16", "ISO_8859-16:2000", "", },
- CHARSETARRAY( iso8859_16 )
-},
-{ "koi8_r",
- "KOI8-R Kod Obmena Informatsiey, 8 bit Russian",
- { "KOI8-R", "KOI8R", "CSKOI8R", "", "", "", "", },
- CHARSETARRAY( koi8_r )
-},
-{ "koi8_u",
- "KOI8-U Kod Obmena Informatsiey, 8 bit Ukranian",
- { "KOI8-U", "KOI8U", "CSKOI8U", "", "", "", "", },
- CHARSETARRAY( koi8_u )
-},
-{ "mslinedr",
- "MS LineDraw",
- { "MSLINEDR", "", "", "", "", "", "", },
- CHARSETARRAY( mslinedr )
-},
-{ "nextstep",
- "NextStep",
- { "NEXTSTEP", "", "", "", "", "", "", },
- CHARSETARRAY( nextstep )
-},
-{ "symbol",
- "MS Windows Symbol Font",
- { "SYMBOL", "", "", "", "", "", "", },
- CHARSETARRAY( symbol )
-},
-{ "tex_dcr_in",
- "TeX dcr input for European Computer Roman Font",
- { "TEX_DCR_IN", "", "", "", "", "", "", },
- CHARSETARRAY( tex_dcr_in )
-},
-{ "tex_dcr_out",
- "TeX dcr output for European Computer Roman Font",
- { "TEX_DCR_OUT", "", "", "", "", "", "", },
- CHARSETARRAY( tex_dcr_out )
-},
-};
-int nallcharconvert = ARRAYSIZE( allcharconvert );
-
-char *
-charset_get_xmlname( int n )
-{
- static char unknown[] = "???";
- static char utf8[] = "UTF-8";
- static char gb18030[] = "GB18030";
- char *ret = unknown;
- if ( n>=0 && n < nallcharconvert ) {
- ret = allcharconvert[n].aliases[0];
- } else if ( n==CHARSET_UNICODE ) {
- ret = utf8;
- } else if ( n==CHARSET_GB18030 ) {
- ret = gb18030;
- }
- return ret;
-}
-
-int
-charset_find( char *name )
-{
- int i, j, ret = CHARSET_UNKNOWN;
- if ( name==NULL ) return ret;
- for ( i=0; i<nallcharconvert && ret==CHARSET_UNKNOWN; ++i ){
- if ( !strcasecmp( name, allcharconvert[i].cmdname ) ) ret = i;
- else {
- for ( j=0; j<CHARSET_NALIASES && ret==CHARSET_UNKNOWN; ++j ) {
- if ( allcharconvert[i].aliases[j][0]=='\0' ) continue;
- if ( !strcasecmp( name, allcharconvert[i].aliases[j] ) ) ret = i;
- }
- }
- }
- return ret;
-}
-
-void
-charset_list_all( FILE *fp )
-{
- int i;
- for ( i=0; i<nallcharconvert; ++i ){
- fprintf( fp, " %s %s\n", allcharconvert[i].cmdname,
- allcharconvert[i].descriptname );
- }
-}
-
-unsigned int
-charset_lookupchar( int charsetin, char c )
-{
- unsigned char uc;
- uc = ( unsigned char ) c;
- return allcharconvert[charsetin].table[uc].unicode;
-}
-
-unsigned int
-charset_lookupuni( int charsetout, unsigned int unicode )
-{
- int i;
- if ( charsetout==CHARSET_UNICODE ) return unicode;
- for ( i=0; i<allcharconvert[charsetout].ntable; ++i ) {
- if ( unicode == allcharconvert[charsetout].table[i].unicode )
- return allcharconvert[charsetout].table[i].index;
- }
- return '?';
-}
-
diff --git a/support/texlab/crates/bibutils_sys/src/charsets.h b/support/texlab/crates/bibutils_sys/src/charsets.h
deleted file mode 100644
index da31392850..0000000000
--- a/support/texlab/crates/bibutils_sys/src/charsets.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * charsets.h
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef CHARSETS_H
-#define CHARSETS_H
-
-#define CHARSET_UNKNOWN (-1)
-#define CHARSET_UNICODE (-2)
-#define CHARSET_GB18030 (-3)
-#define CHARSET_DEFAULT CHARSET_UNICODE
-#define CHARSET_UTF8_DEFAULT (1)
-#define CHARSET_BOM_DEFAULT (1)
-
-extern char * charset_get_xmlname( int n );
-extern int charset_find( char *name );
-extern void charset_list_all( FILE *fp );
-extern unsigned int charset_lookupchar( int charsetin, char c );
-extern unsigned int charset_lookupuni( int charsetout, unsigned int unicode );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/copacin.c b/support/texlab/crates/bibutils_sys/src/copacin.c
deleted file mode 100644
index 4b876ce02a..0000000000
--- a/support/texlab/crates/bibutils_sys/src/copacin.c
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- * copacin.c
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Program and source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "is_ws.h"
-#include "str.h"
-#include "str_conv.h"
-#include "slist.h"
-#include "name.h"
-#include "fields.h"
-#include "reftypes.h"
-#include "bibformats.h"
-#include "generic.h"
-
-extern variants copac_all[];
-extern int copac_nall;
-
-/*****************************************************
- PUBLIC: void copacin_initparams()
-*****************************************************/
-
-static int copacin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset );
-static int copacin_processf( fields *bibin, const char *p, const char *filename, long nref, param *pm );
-static int copacin_convertf( fields *bibin, fields *info, int reftype, param *pm );
-
-int
-copacin_initparams( param *pm, const char *progname )
-{
- pm->readformat = BIBL_COPACIN;
- pm->charsetin = BIBL_CHARSET_DEFAULT;
- pm->charsetin_src = BIBL_SRC_DEFAULT;
- pm->latexin = 0;
- pm->xmlin = 0;
- pm->utf8in = 0;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->output_raw = 0;
-
- pm->readf = copacin_readf;
- pm->processf = copacin_processf;
- pm->cleanf = NULL;
- pm->typef = NULL;
- pm->convertf = copacin_convertf;
- pm->all = copac_all;
- pm->nall = copac_nall;
-
- slist_init( &(pm->asis) );
- slist_init( &(pm->corps) );
-
- if ( !progname ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int copacin_readf()
-*****************************************************/
-
-/* Endnote-Refer/Copac tag definition:
- character 1 = alphabetic character
- character 2 = alphabetic character
- character 3 = dash
- character 4 = space
-*/
-static int
-copacin_istag( const char *buf )
-{
- if (! ((buf[0]>='A' && buf[0]<='Z')) || (buf[0]>='a' && buf[0]<='z') )
- return 0;
- if (! ((buf[1]>='A' && buf[1]<='Z')) || (buf[1]>='a' && buf[1]<='z') )
- return 0;
- if (buf[2]!='-' ) return 0;
- if (buf[3]!=' ' ) return 0;
- return 1;
-}
-static int
-readmore( FILE *fp, char *buf, int bufsize, int *bufpos, str *line )
-{
- if ( line->len ) return 1;
- else return str_fget( fp, buf, bufsize, bufpos, line );
-}
-
-static int
-copacin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset )
-{
- int haveref = 0, inref=0;
- char *p;
- *fcharset = CHARSET_UNKNOWN;
- while ( !haveref && readmore( fp, buf, bufsize, bufpos, line ) ) {
- /* blank line separates */
- if ( line->data==NULL ) continue;
- if ( inref && line->len==0 ) haveref=1;
- p = &(line->data[0]);
- /* Recognize UTF8 BOM */
- if ( line->len > 2 &&
- (unsigned char)(p[0])==0xEF &&
- (unsigned char)(p[1])==0xBB &&
- (unsigned char)(p[2])==0xBF ) {
- *fcharset = CHARSET_UNICODE;
- p += 3;
- }
- if ( copacin_istag( p ) ) {
- if ( inref ) str_addchar( reference, '\n' );
- str_strcatc( reference, p );
- inref = 1;
- } else if ( inref ) {
- /* copac puts tag only on 1st line */
- if ( *p ) p++;
- if ( *p ) p++;
- if ( *p ) p++;
- if ( *p ) {
- str_addchar( reference, ' ' );
- str_strcatc( reference, p );
- }
- }
- str_empty( line );
- }
- return haveref;
-}
-
-/*****************************************************
- PUBLIC: int copacin_processf()
-*****************************************************/
-
-static const char*
-copacin_addtag2( const char *p, str *tag, str *data )
-{
- int i;
- i =0;
- while ( i<3 && *p ) {
- str_addchar( tag, *p++ );
- i++;
- }
- while ( *p==' ' || *p=='\t' ) p++;
- while ( *p && *p!='\r' && *p!='\n' ) {
- str_addchar( data, *p );
- p++;
- }
- str_trimendingws( data );
- while ( *p=='\n' || *p=='\r' ) p++;
- return p;
-}
-
-static const char *
-copacin_nextline( const char *p )
-{
- while ( *p && *p!='\n' && *p!='\r') p++;
- while ( *p=='\n' || *p=='\r' ) p++;
- return p;
-}
-
-static int
-copacin_processf( fields *copacin, const char *p, const char *filename, long nref, param *pm )
-{
- str tag, data;
- int status;
- str_init( &tag );
- str_init( &data );
- while ( *p ) {
- p = skip_ws( p );
- if ( copacin_istag( p ) ) {
- p = copacin_addtag2( p, &tag, &data );
- /* don't add empty strings */
- if ( str_has_value( &tag ) && str_has_value( &data ) ) {
- status = fields_add( copacin, tag.data, data.data, 0 );
- if ( status!=FIELDS_OK ) return 0;
- }
- str_empty( &tag );
- str_empty( &data );
- }
- else p = copacin_nextline( p );
- }
- str_free( &tag );
- str_free( &data );
- return 1;
-}
-
-/*****************************************************
- PUBLIC: int copacin_convertf(), returns BIBL_OK or BIBL_ERR_MEMERR
-*****************************************************/
-
-/* copac names appear to always start with last name first, but don't
- * always seem to have a comma after the name
- *
- * editors seem to be stuck in as authors with the tag "[Editor]" in it
- */
-static int
-copacin_person( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- char *usetag = outtag, editor[]="EDITOR";
- int comma = 0, i, ok, status;
- str usename, *s;
- slist tokens;
-
- if ( slist_find( &(pm->asis), invalue ) !=-1 ||
- slist_find( &(pm->corps), invalue ) !=-1 ) {
- ok = name_add( bibout, outtag, invalue->data, level, &(pm->asis), &(pm->corps) );
- if ( ok ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
- }
-
- slist_init( &tokens );
- str_init( &usename );
-
- status = slist_tokenize( &tokens, invalue, " ", 1 );
- if ( status!=SLIST_OK ) return BIBL_ERR_MEMERR;
-
- for ( i=0; i<tokens.n; ++i ) {
- s = slist_str( &tokens, i );
- if ( !strcmp( str_cstr( s ), "[Editor]" ) ) {
- usetag = editor;
- str_empty( s );
- } else if ( s->len && s->data[s->len-1]==',' ) {
- comma++;
- }
- }
-
- if ( comma==0 && tokens.n ) {
- s = slist_str( &tokens, 0 );
- str_addchar( s, ',' );
- }
-
- for ( i=0; i<tokens.n; ++i ) {
- s = slist_str( &tokens, i );
- if ( str_is_empty( s ) ) continue;
- if ( i ) str_addchar( &usename, ' ' );
- str_strcat( &usename, s );
- }
-
- slist_free( &tokens );
-
- ok = name_add( bibout, usetag, str_cstr( &usename ), level, &(pm->asis), &(pm->corps) );
-
- str_free( &usename );
-
- if ( ok ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
-}
-
-static void
-copacin_report_notag( param *p, char *tag )
-{
- if ( p->verbose ) {
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Cannot find tag '%s'\n", tag );
- }
-}
-
-static int
-copacin_convertf( fields *bibin, fields *bibout, int reftype, param *p )
-{
- static int (*convertfns[NUM_REFTYPES])(fields *, int, str *, str *, int, param *, char *, fields *) = {
- // Patch: Fix compilation on MSVC target
- [ 0 ] = generic_null,
- [ 1 ] = generic_null,
- [ 2 ] = generic_null,
- [ 3 ] = generic_null,
- [ 4 ] = generic_null,
- [ 5 ] = generic_null,
- [ 6 ] = generic_null,
- [ 7 ] = generic_null,
- [ 8 ] = generic_null,
- [ 9 ] = generic_null,
- [ 10 ] = generic_null,
- [ 11 ] = generic_null,
- [ 12 ] = generic_null,
- [ 13 ] = generic_null,
- [ 14 ] = generic_null,
- [ 15 ] = generic_null,
- [ 16 ] = generic_null,
- [ 17 ] = generic_null,
- [ 18 ] = generic_null,
- [ 19 ] = generic_null,
- [ 20 ] = generic_null,
- [ 21 ] = generic_null,
- [ 22 ] = generic_null,
- [ 23 ] = generic_null,
- [ 24 ] = generic_null,
- [ 25 ] = generic_null,
- [ SIMPLE ] = generic_simple,
- [ TITLE ] = generic_title,
- [ NOTES ] = generic_notes,
- [ SERIALNO ] = generic_serialno,
- [ PERSON ] = copacin_person
- };
-
- int process, level, i, nfields, status = BIBL_OK;
- str *intag, *invalue;
- char *outtag;
-
- nfields = fields_num( bibin );
- for ( i=0; i<nfields; ++i ) {
-
- intag = fields_tag( bibin, i, FIELDS_STRP );
-
- if ( !translate_oldtag( intag->data, reftype, p->all, p->nall, &process, &level, &outtag ) ) {
- copacin_report_notag( p, intag->data );
- continue;
- }
-
- invalue = fields_value( bibin, i, FIELDS_STRP );
-
- status = convertfns[ process ] ( bibin, i, intag, invalue, level, p, outtag, bibout );
- if ( status!=BIBL_OK ) return status;
-
- }
-
- return status;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/copactypes.c b/support/texlab/crates/bibutils_sys/src/copactypes.c
deleted file mode 100644
index 49797eb905..0000000000
--- a/support/texlab/crates/bibutils_sys/src/copactypes.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * copactypes.c
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Program and source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <string.h>
-#include "is_ws.h"
-#include "fields.h"
-#include "reftypes.h"
-
-/* if no specific type can be identified */
-static lookups generic[] = {
- { "TI-", "TITLE" , TITLE, LEVEL_MAIN },
- { "AU-", "AUTHOR", PERSON, LEVEL_MAIN },
- { "MV-", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "SE-", "TITLE", TITLE, LEVEL_HOST },
- { "ED-", "EDITION", SIMPLE, LEVEL_MAIN },
- { "SC-", "SCALE", SIMPLE, LEVEL_MAIN }, /* for maps */
- { "PU-", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "PY-", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "PD-", "DESCRIPTION", SIMPLE, LEVEL_MAIN }, /* physical description */
- { "DT-", "TYPE", SIMPLE, LEVEL_MAIN },
- { "LA-", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "IS-", "SERIALNUMBER", SERIALNO, LEVEL_MAIN },
- { "NT-", "NOTES", NOTES, LEVEL_MAIN },
- { "KW-", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "UL-", "URL", SIMPLE, LEVEL_MAIN },
- { "HL-", "LOCATION", SIMPLE, LEVEL_MAIN }
-};
-
-/* order is important....."Book" matches "Book" and "Book Section", hence
- * "Book Section must come first */
-
-#define ORIG(a) ( &(a[0]) )
-#define SIZE(a) ( sizeof( a ) / sizeof( lookups ) )
-#define REFTYPE(a,b) { a, ORIG(b), SIZE(b) }
-
-variants copac_all[] = {
- REFTYPE( "Generic", generic ),
-};
-
-
-int copac_nall = sizeof( copac_all ) / sizeof( variants );
-
-
diff --git a/support/texlab/crates/bibutils_sys/src/ebiin.c b/support/texlab/crates/bibutils_sys/src/ebiin.c
deleted file mode 100644
index 3454f0e08f..0000000000
--- a/support/texlab/crates/bibutils_sys/src/ebiin.c
+++ /dev/null
@@ -1,763 +0,0 @@
-/*
- * ebiin.c
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Program and source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include "is_ws.h"
-#include "str.h"
-#include "str_conv.h"
-#include "fields.h"
-#include "bu_auth.h"
-#include "marc_auth.h"
-#include "xml.h"
-#include "xml_encoding.h"
-#include "bibformats.h"
-
-static int ebiin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset );
-static int ebiin_processf( fields *ebiin, const char *data, const char *filename, long nref, param *p );
-
-
-/*****************************************************
- PUBLIC: void ebiin_initparams()
-*****************************************************/
-int
-ebiin_initparams( param *pm, const char *progname )
-{
- pm->readformat = BIBL_EBIIN;
- pm->charsetin = BIBL_CHARSET_UNICODE;
- pm->charsetin_src = BIBL_SRC_DEFAULT;
- pm->latexin = 0;
- pm->xmlin = 1;
- pm->utf8in = 1;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->output_raw = BIBL_RAW_WITHMAKEREFID |
- BIBL_RAW_WITHCHARCONVERT;
-
- pm->readf = ebiin_readf;
- pm->processf = ebiin_processf;
- pm->cleanf = NULL;
- pm->typef = NULL;
- pm->convertf = NULL;
- pm->all = NULL;
- pm->nall = 0;
-
- slist_init( &(pm->asis) );
- slist_init( &(pm->corps) );
-
- if ( !progname ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int ebiin_readf()
-*****************************************************/
-static int
-ebiin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset )
-{
- int haveref = 0, inref = 0, file_charset = CHARSET_UNKNOWN, m;
- char *startptr = NULL, *endptr;
- str tmp;
- str_init( &tmp );
- while ( !haveref && str_fget( fp, buf, bufsize, bufpos, line ) ) {
- if ( line->data ) {
- m = xml_getencoding( line );
- if ( m!=CHARSET_UNKNOWN ) file_charset = m;
- }
- if ( line->data )
- startptr = xml_find_start( line->data, "Publication" );
- if ( startptr || inref ) {
- if ( inref ) str_strcat( &tmp, line );
- else {
- str_strcatc( &tmp, startptr );
- inref = 1;
- }
- endptr = xml_find_end( str_cstr( &tmp ), "Publication" );
- if ( endptr ) {
- str_segcpy( reference, str_cstr( &tmp ), endptr );
- haveref = 1;
- }
- }
- }
- str_free( &tmp );
- *fcharset = file_charset;
- return haveref;
-}
-
-/*****************************************************
- PUBLIC: int ebiin_processf()
-*****************************************************/
-
-typedef struct xml_convert {
- char *in; /* The input tag */
- char *a, *aval; /* The attribute="attribute_value" pair, if nec. */
- char *out; /* The output tag */
- int level;
-} xml_convert;
-
-static int
-ebiin_doconvert( xml *node, fields *info, xml_convert *c, int nc, int *found )
-{
- int i, status;
- char *d;
-
- if ( !xml_has_value( node ) ) goto out;
-
- d = xml_value_cstr( node );
- for ( i=0; i<nc; ++i ) {
- if ( c[i].a==NULL ) {
- if ( xml_tag_matches( node, c[i].in ) ) {
- *found = 1;
- status = fields_add( info, c[i].out, d, c[i].level );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- else return BIBL_OK;
- }
- } else {
- if ( xml_tag_has_attribute( node, c[i].in, c[i].a, c[i].aval ) ){
- *found = 1;
- status = fields_add( info, c[i].out, d, c[i].level );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- else return BIBL_OK;
- }
- }
-
- }
-out:
- *found = 0;
- return BIBL_OK;
-}
-
-/* <ArticleTitle>Mechanism and.....</ArticleTitle>
- * and
- * <Title>Mechanism and....</Title>
- */
-static int
-ebiin_title( xml *node, fields *info, int title_level )
-{
- int status;
- if ( xml_has_value( node ) ) {
- status = fields_add( info, "TITLE", xml_value_cstr( node ), title_level );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- return BIBL_OK;
-}
-
-/* ebiin_medlinedate()
- *
- * - extract medline information from entries like:
- * <MedlineDate>2003 Jan-Feb</MedlineDate>
- */
-static int
-ebiin_medlinedate_year( fields *info, const char *p, int level, const char **end )
-{
- int fstatus, status = BIBL_OK;
- str s;
-
- str_init( &s );
-
- *end = str_cpytodelim( &s, p, " \t\n\r", 0 );
- if ( str_memerr( &s ) ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- if ( str_has_value( &s ) ) {
- fstatus = fields_add( info, "PARTDATE:YEAR", str_cstr( &s ), level );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
- }
-out:
- str_free( &s );
- return status;
-}
-static int
-ebiin_medlinedate_month( fields *info, const char *p, int level, const char **end )
-{
- int fstatus, status = BIBL_OK;
- str s;
-
- str_init( &s );
-
- *end = str_cpytodelim( &s, p, " \t\n\r", 0 );
- str_findreplace( &s, "-", "/" );
- if ( str_memerr( &s ) ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- if ( str_has_value( &s ) ) {
- fstatus = fields_add( info, "PARTDATE:MONTH", str_cstr( &s ), level );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
- }
-out:
- str_free( &s );
- return status;
-}
-
-static int
-ebiin_medlinedate_day( fields *info, const char *p, int level, const char **end )
-{
- int fstatus, status = BIBL_OK;
- str s;
-
- str_init( &s );
-
- *end = str_cpytodelim( &s, p, " \t\n\r", 0 );
- if ( str_memerr( &s ) ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- if ( str_has_value( &s ) ) {
- fstatus = fields_add( info, "PARTDATE:DAY", str_cstr( &s ), level );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
- }
-out:
- str_free( &s );
- return status;
-}
-
-static int
-ebiin_medlinedate( fields *info, xml *node, int level )
-{
- int status = BIBL_OK;
- const char *p;
-
- if ( !xml_has_value( node ) ) return status;
-
- p = xml_value_cstr( node );
-
- if ( *p )
- status = ebiin_medlinedate_year( info, skip_ws( p ), level, &p );
- if ( *p && status==BIBL_OK )
- status = ebiin_medlinedate_month( info, skip_ws( p ), level, &p );
- if ( *p && status==BIBL_OK )
- status = ebiin_medlinedate_day( info, skip_ws( p ), level, &p );
-
- return status;
-}
-
-/* <Journal>
- * <ISSN>0027-8424</ISSN>
- * <JournalIssue PrintYN="Y">
- * <Volume>100</Volume>
- * <Issue>21</Issue>
- * <PubDate>
- * <Year>2003</Year>
- * <Month>Oct</Month>
- * <Day>14</Day>
- * </PubDate>
- * </Journal Issue>
- * </Journal>
- *
- * or....
- *
- * <Journal>
- * <ISSN IssnType="Print">0735-0414</ISSN>
- * <JournalIssue CitedMedium="Print">
- * <Volume>38</Volume>
- * <Issue>1</Issue>
- * <PubDate>
- * <MedlineDate>2003 Jan-Feb</MedlineDate>
- * </PubDate>
- * </JournalIssue>
- * <Title>Alcohol and alcoholism (Oxford, Oxfordshire) </Title>
- * <ISOAbbreviation>Alcohol Alcohol.</ISOAbbreviation>
- * </Journal>
- */
-static int
-ebiin_journal1( xml *node, fields *info )
-{
- xml_convert c[] = {
- { "ISSN", NULL, NULL, "ISSN", 1 },
- { "Volume", NULL, NULL, "VOLUME", 1 },
- { "Issue", NULL, NULL, "ISSUE", 1 },
- { "Year", NULL, NULL, "PARTDATE:YEAR", 1 },
- { "Month", NULL, NULL, "PARTDATE:MONTH", 1 },
- { "Day", NULL, NULL, "PARTDATE:DAY", 1 },
- { "Language", NULL, NULL, "LANGUAGE", 1 },
- };
- int nc = sizeof( c ) / sizeof( c[0] ), status, found;
- if ( xml_has_value( node ) ) {
- status = ebiin_doconvert( node, info, c, nc, &found );
- if ( status!=BIBL_OK ) return status;
- if ( !found ) {
- if ( xml_tag_matches( node, "MedlineDate" ) ) {
- status = ebiin_medlinedate( info, node, LEVEL_HOST );
- if ( status!=BIBL_OK ) return status;
- }
- }
- }
- if ( node->down ) {
- status = ebiin_journal1( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) {
- status = ebiin_journal1( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-/* <Pagination>
- * <MedlinePgn>12111-6</MedlinePgn>
- * </Pagination>
- */
-static int
-ebiin_pages( fields *info, const char *p )
-{
- int i, status, ret = BIBL_OK;
- const int level = 1;
- str sp, ep, *up;
-
- strs_init( &sp, &ep, NULL );
-
- /* ...start page */
- p = str_cpytodelim( &sp, skip_ws( p ), "-", 1 );
- if ( str_memerr( &sp ) ) {
- ret = BIBL_ERR_MEMERR;
- goto out;
- }
-
- /* ...end page */
- (void) str_cpytodelim( &ep, skip_ws( p ), " \t\n\r", 0 );
- if ( str_memerr( &ep ) ) {
- ret = BIBL_ERR_MEMERR;
- goto out;
- }
-
- if ( sp.len ) {
- status = fields_add( info, "PAGES:START", sp.data, level );
- if ( status!=FIELDS_OK ) {
- ret = BIBL_ERR_MEMERR;
- goto out;
- }
- }
- if ( ep.len ) {
- if ( sp.len > ep.len ) {
- for ( i=sp.len-ep.len; i<sp.len; ++i )
- sp.data[i] = ep.data[i-sp.len+ep.len];
- up = &(sp);
- } else up = &(ep);
- status = fields_add( info, "PAGES:STOP", up->data, level );
- if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR;
- }
-
-out:
- strs_free( &sp, &ep, NULL );
- return ret;
-}
-static int
-ebiin_pagination( xml *node, fields *info )
-{
- int status;
- if ( xml_tag_matches_has_value( node, "Pages" ) ) {
- status = ebiin_pages( info, xml_value_cstr( node ) );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->down ) {
- status = ebiin_pagination( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) {
- status = ebiin_pagination( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-/* <Abstract>
- * <AbstractText>ljwejrelr</AbstractText>
- * </Abstract>
- */
-static int
-ebiin_abstract( xml *node, fields *info )
-{
- int status;
- if ( xml_tag_matches_has_value( node, "AbstractText" ) ) {
- status = fields_add( info, "ABSTRACT", xml_value_cstr( node ), 0 );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- else if ( node->next ) {
- status = ebiin_abstract( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-/* <AuthorList CompleteYN="Y">
- * <Author>
- * <LastName>Barondeau</LastName>
- * <ForeName>David P</ForeName>
- * ( or <FirstName>David P</FirstName> )
- * <Initials>DP</Initials>
- * </Author>
- * </AuthorList>
- */
-static int
-ebiin_author( xml *node, str *name )
-{
- int status;
- char *p;
- if ( xml_tag_matches( node, "LastName" ) ) {
- if ( name->len ) {
- str_prepend( name, "|" );
- str_prepend( name, xml_value_cstr( node ) );
- }
- else str_strcat( name, xml_value( node ) );
- } else if ( xml_tag_matches( node, "ForeName" ) ||
- xml_tag_matches( node, "FirstName" ) ) {
- p = xml_value_cstr( node );
- while ( p && *p ) {
- if ( name->len ) str_addchar( name, '|' );
- while ( *p==' ' ) p++;
- while ( *p && *p!=' ' ) str_addchar( name, *p++ );
- }
- } else if ( xml_tag_matches( node, "Initials" ) && !strchr( name->data, '|' ) ) {
- p = xml_value_cstr( node );
- while ( p && *p ) {
- if ( name->len ) str_addchar( name, '|' );
- if ( !is_ws(*p ) ) str_addchar( name, *p++ );
- }
- }
- if ( str_memerr( name ) ) return BIBL_ERR_MEMERR;
-
- if ( node->down ) {
- status = ebiin_author( node->down, name );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) {
- status = ebiin_author( node->next, name );
- if ( status!=BIBL_OK ) return status;
- }
-
- return BIBL_OK;
-}
-static int
-ebiin_authorlist( xml *node, fields *info, int level )
-{
- int fstatus, status = BIBL_OK;
- str name;
-
- str_init( &name );
- node = node->down;
- while ( node ) {
- if ( xml_tag_matches( node, "Author" ) && node->down ) {
- status = ebiin_author( node->down, &name );
- if ( status!=BIBL_OK ) goto out;
- if ( name.len ) {
- fstatus = fields_add(info,"AUTHOR",name.data,level);
- if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; }
- str_empty( &name );
- }
- }
- node = node->next;
- }
-out:
- str_free( &name );
- return status;
-}
-
-/* <PublicationTypeList>
- * <PublicationType>Journal Article</PublicationType>
- * </PublicationTypeList>
- */
-
-/* <MedlineJournalInfo>
- * <Country>United States</Country>
- * <MedlineTA>Proc Natl Acad Sci U S A</MedlineTA>
- * <NlmUniqueID>7507876</NlmUniqueID>
- * </MedlineJournalInfo>
- */
-
-static int
-ebiin_journal2( xml *node, fields *info )
-{
- int status;
- if ( xml_tag_matches_has_value( node, "TitleAbbreviation" ) ) {
- status = fields_add( info, "TITLE", xml_value_cstr( node ), 1 );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- if ( node->down ) {
- status = ebiin_journal2( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) {
- status = ebiin_journal2( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-/*
- * <MeshHeadingList>
- * <MeshHeading>
- * <DescriptorName MajorTopicYN="N">Biophysics</DescriptorName>
- * </MeshHeading>
- * <MeshHeading>
- * <DescriptorName MajorTopicYN="N">Crystallography, X-Ray</DescriptorName>
- * </MeshHeading>
- * </MeshHeadingList>
-*/
-static int
-ebiin_meshheading( xml *node, fields *info )
-{
- int status;
- if ( xml_tag_matches_has_value( node, "DescriptorName" ) ) {
- status = fields_add( info, "KEYWORD", xml_value_cstr( node ), 0 );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- if ( node->next ) {
- status = ebiin_meshheading( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-static int
-ebiin_meshheadinglist( xml *node, fields *info )
-{
- int status;
- if ( xml_tag_matches( node, "MeshHeading" ) && node->down ) {
- status = ebiin_meshheading( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) {
- status = ebiin_meshheadinglist( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-static int
-ebiin_book( xml *node, fields *info, int book_level )
-{
- xml_convert book[] = {
- { "Publisher", NULL, NULL, "PUBLISHER", 0 },
- { "Language", NULL, NULL, "LANGUAGE", 0 },
- { "ISBN10", NULL, NULL, "ISBN", 0 },
- { "ISBN13", NULL, NULL, "ISBN13", 0 },
- { "Year", NULL, NULL, "DATE:YEAR", 0 },
- { "Month", NULL, NULL, "DATE:MONTH", 0 },
- { "Day", NULL, NULL, "DATE:DAY", 0 },
- { "PageTotal", NULL, NULL, "PAGES:TOTAL", 0 },
- { "SeriesName", NULL, NULL, "TITLE", 1 },
- { "SeriesISSN", NULL, NULL, "ISSN", 0 },
- { "OtherReportInformation", NULL, NULL, "NOTES", 0 },
- { "Edition", NULL, NULL, "EDITION", 0 },
- };
- int nbook = sizeof( book ) / sizeof( book[0] );
- xml_convert inbook[] = {
- { "Publisher", NULL, NULL, "PUBLISHER", 1 },
- { "Language", NULL, NULL, "LANGUAGE", 0 },
- { "ISBN10", NULL, NULL, "ISBN", 1 },
- { "ISBN13", NULL, NULL, "ISBN13", 1 },
- { "Year", NULL, NULL, "PARTDATE:YEAR", 1 },
- { "Month", NULL, NULL, "PARTDATE:MONTH", 1 },
- { "Day", NULL, NULL, "PARTDATE:DAY", 1 },
- { "PageTotal", NULL, NULL, "PAGES:TOTAL", 1 },
- { "SeriesName", NULL, NULL, "TITLE", 2 },
- { "SeriesISSN", NULL, NULL, "ISSN", 1 },
- { "OtherReportInformation", NULL, NULL, "NOTES", 1 },
- { "Edition", NULL, NULL, "EDITION", 1 },
- };
- int ninbook = sizeof( inbook ) / sizeof( inbook[0] );
- int nc, status, found;
- xml_convert *c;
-
- if ( book_level==0 ) {
- c = book;
- nc = nbook;
- }
- else {
- c = inbook;
- nc = ninbook;
- }
-
- status = ebiin_doconvert( node, info, c, nc, &found );
- if ( status!=BIBL_OK ) return status;
-
- if ( !found ) {
- status = BIBL_OK;
- if ( xml_tag_matches( node, "MedlineDate" ) )
- status = ebiin_medlinedate( info, node, book_level );
- else if ( xml_tag_matches( node, "Title" ) )
- status = ebiin_title( node, info, book_level );
- else if ( xml_tag_matches( node, "Pagination" ) && node->down )
- status = ebiin_pagination( node->down, info );
- else if ( xml_tag_matches( node, "Abstract" ) && node->down )
- status = ebiin_abstract( node->down, info );
- else if ( xml_tag_matches( node, "AuthorList" ) )
- status = ebiin_authorlist( node, info, book_level );
- else if ( xml_tag_matches( node, "PubDate" ) && node->down )
- status = ebiin_book( node->down, info, book_level );
- if ( status!=BIBL_OK ) return status;
- }
-
- if ( node->next ) {
- status = ebiin_book( node->next, info, book_level );
- if ( status!=BIBL_OK ) return status;
- }
-
- return BIBL_OK;
-}
-
-static int
-ebiin_article( xml *node, fields *info )
-{
- int status = BIBL_OK;
-
- if ( xml_tag_matches( node, "Journal" ) )
- status = ebiin_journal1( node, info );
- else if ( node->down && ( xml_tag_matches( node, "Book" ) ||
- xml_tag_matches(node, "Report") ))
- status = ebiin_book( node->down, info, 1 );
- else if ( xml_tag_matches( node, "ArticleTitle" ) )
- status = ebiin_title( node, info, 0 );
- else if ( xml_tag_matches( node, "Pagination" ) && node->down )
- status = ebiin_pagination( node->down, info );
- else if ( xml_tag_matches( node, "Abstract" ) && node->down )
- status = ebiin_abstract( node->down, info );
- else if ( xml_tag_matches( node, "AuthorList" ) )
- status = ebiin_authorlist( node, info, 0 );
- if ( status!=BIBL_OK ) return status;
-
- if ( node->next ) {
- status = ebiin_article( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
-
- return BIBL_OK;
-}
-
-static int
-ebiin_publication( xml *node, fields *info )
-{
- int status = BIBL_OK;
- if ( node->down ) {
- if ( xml_tag_matches( node, "Article" ) )
- status = ebiin_article( node->down, info );
- else if ( xml_tag_matches( node, "Book" ) )
- status = ebiin_book( node->down, info, 0 );
- else if ( xml_tag_matches( node, "Report" ) )
- status = ebiin_book( node->down, info, 0 );
- else if ( xml_tag_matches( node, "JournalInfo" ) )
- status = ebiin_journal2( node->down, info );
- else if ( xml_tag_matches( node, "MeshHeadingList" ) )
- status = ebiin_meshheadinglist( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) {
- status = ebiin_publication( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-/* Call with the "Publication" node */
-static int
-ebiin_fixtype( xml *node, fields *info )
-{
- char *resource = NULL, *issuance = NULL, *genre1 = NULL, *genre2 = NULL;
- str *type;
- int reslvl, isslvl, gen1lvl, gen2lvl;
- int status;
-
- type = xml_attribute( node, "Type" );
- if ( !type || type->len==0 ) return BIBL_OK;
-
- if ( !strcmp( type->data, "JournalArticle" ) ) {
- resource = "text";
- issuance = "continuing";
- genre1 = "periodical";
- genre2 = "academic journal";
- reslvl = 0;
- isslvl = 1;
- gen1lvl = 1;
- gen2lvl = 1;
- } else if ( !strcmp( type->data, "Book" ) ) {
- resource = "text";
- issuance = "monographic";
- genre1 = "book";
- reslvl = 0;
- isslvl = 0;
- gen1lvl = 0;
- } else if ( !strcmp( type->data, "BookArticle" ) ) {
- resource = "text";
- issuance = "monographic";
- genre1 = "book";
- reslvl = 0;
- isslvl = 1;
- gen1lvl = 1;
- }
-
- if ( resource ) {
- status = fields_add( info, "RESOURCE", resource, reslvl );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- if ( issuance ) {
- status = fields_add( info, "ISSUANCE", issuance, isslvl );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- if ( genre1 ) {
- if ( is_marc_genre( genre1 ) )
- status = fields_add( info, "GENRE:MARC", genre1, gen1lvl );
- else if ( is_bu_genre( genre1 ) )
- status = fields_add( info, "GENRE:BIBUTILS", genre1, gen1lvl );
- else
- status = fields_add( info, "GENRE:UNKNOWN", genre1, gen1lvl );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- if ( genre2 ) {
- if ( is_marc_genre( genre2 ) )
- status = fields_add( info, "GENRE:MARC", genre2, gen2lvl );
- else if ( is_bu_genre( genre2 ) )
- status = fields_add( info, "GENRE:BIBUTILS", genre2, gen2lvl );
- else
- status = fields_add( info, "GENRE:UNKNOWN", genre2, gen2lvl );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
-
- return BIBL_OK;
-}
-
-static int
-ebiin_assembleref( xml *node, fields *info )
-{
- int status;
- if ( xml_tag_matches( node, "Publication" ) && node->down ) {
- status = ebiin_fixtype( node, info );
- if ( status!=BIBL_OK ) return status;
- status = ebiin_publication( node->down, info );
- if ( status!=BIBL_OK ) return status;
- } else if ( node->down ) {
- status = ebiin_assembleref( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) {
- status = ebiin_assembleref( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-static int
-ebiin_processf( fields *ebiin, const char *data, const char *filename, long nref, param *p )
-{
- int status;
- xml top;
-
- xml_init( &top );
- xml_parse( data, &top );
- status = ebiin_assembleref( &top, ebiin );
- xml_free( &top );
-
- return ( status==BIBL_OK ) ? 1 : 0;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/endin.c b/support/texlab/crates/bibutils_sys/src/endin.c
deleted file mode 100644
index 4f0745e603..0000000000
--- a/support/texlab/crates/bibutils_sys/src/endin.c
+++ /dev/null
@@ -1,620 +0,0 @@
-/*
- * endin.c
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Program and source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include "is_ws.h"
-#include "str.h"
-#include "str_conv.h"
-#include "fields.h"
-#include "url.h"
-#include "reftypes.h"
-#include "bibformats.h"
-#include "generic.h"
-#include "msvc_fix.h"
-
-extern variants end_all[];
-extern int end_nall;
-
-/*****************************************************
- PUBLIC: void endin_initparams()
-*****************************************************/
-
-static int endin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset );
-static int endin_processf( fields *endin, const char *p, const char *filename, long nref, param *pm );
-int endin_typef( fields *endin, const char *filename, int nrefs, param *p );
-int endin_convertf( fields *endin, fields *info, int reftype, param *p );
-int endin_cleanf( bibl *bin, param *p );
-
-int
-endin_initparams( param *pm, const char *progname )
-{
- pm->readformat = BIBL_ENDNOTEIN;
- pm->charsetin = BIBL_CHARSET_DEFAULT;
- pm->charsetin_src = BIBL_SRC_DEFAULT;
- pm->latexin = 0;
- pm->xmlin = 0;
- pm->utf8in = 0;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->output_raw = 0;
-
- pm->readf = endin_readf;
- pm->processf = endin_processf;
- pm->cleanf = endin_cleanf;
- pm->typef = endin_typef;
- pm->convertf = endin_convertf;
- pm->all = end_all;
- pm->nall = end_nall;
-
- slist_init( &(pm->asis) );
- slist_init( &(pm->corps) );
-
- if ( !progname ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
-
- return BIBL_OK;
-}
-
-
-/*****************************************************
- PUBLIC: int endin_readf()
-*****************************************************/
-
-/* Endnote tag definition:
- character 1 = '%'
- character 2 = alphabetic character or digit (or other characters)
- character 3 = space (ansi 32)
-*/
-static int
-endin_istag( const char *buf )
-{
- const char others[]="!@#$^&*()+=?[~>";
- if ( buf[0]!='%' ) return 0;
- if ( buf[2]!=' ' ) return 0;
- if ( isalpha( (unsigned char)buf[1] ) ) return 1;
- if ( isdigit( (unsigned char)buf[1] ) ) return 1;
- if ( strchr( others, buf[1] ) ) return 1;
- return 0;
-}
-
-static int
-readmore( FILE *fp, char *buf, int bufsize, int *bufpos, str *line )
-{
- if ( line->len ) return 1;
- else return str_fget( fp, buf, bufsize, bufpos, line );
-}
-
-static int
-endin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset )
-{
- int haveref = 0, inref = 0;
- unsigned char *up;
- char *p;
- *fcharset = CHARSET_UNKNOWN;
- while ( !haveref && readmore( fp, buf, bufsize, bufpos, line ) ) {
-
- if ( !line->data ) continue;
- p = &(line->data[0]);
-
- /* Skip <feff> Unicode header information */
- /* <feff> = ef bb bf */
- up = (unsigned char* ) p;
- if ( line->len > 2 && up[0]==0xEF && up[1]==0xBB &&
- up[2]==0xBF ) {
- *fcharset = CHARSET_UNICODE;
- p += 3;
- }
-
- if ( !*p ) {
- if ( inref ) haveref = 1; /* blank line separates */
- else continue; /* blank line to ignore */
- }
- /* Each reference starts with a tag && ends with a blank line */
- if ( endin_istag( p ) ) {
- if ( reference->len ) str_addchar( reference, '\n' );
- str_strcatc( reference, p );
- inref = 1;
- } else if ( inref && *p ) {
- str_addchar( reference, '\n' );
- str_strcatc( reference, p );
- }
- str_empty( line );
- }
- if ( reference->len ) haveref = 1;
- return haveref;
-}
-
-/*****************************************************
- PUBLIC: int endin_processf()
-*****************************************************/
-static const char*
-process_endline( str *tag, str *data, const char *p )
-{
- int i;
-
- i = 0;
- while ( i<2 && *p ) {
- str_addchar( tag, *p++);
- i++;
- }
- while ( *p==' ' || *p=='\t' ) p++;
-
- while ( *p && *p!='\r' && *p!='\n' )
- str_addchar( data, *p++ );
- str_trimendingws( data );
-
- while ( *p=='\r' || *p=='\n' ) p++;
-
- return p;
-}
-
-static const char *
-process_endline2( str *tag, str *data, const char *p )
-{
- while ( *p==' ' || *p=='\t' ) p++;
- while ( *p && *p!='\r' && *p!='\n' )
- str_addchar( data, *p++ );
- str_trimendingws( data );
- while ( *p=='\r' || *p=='\n' ) p++;
- return p;
-}
-
-static int
-endin_processf( fields *endin, const char *p, const char *filename, long nref, param *pm )
-{
- str tag, data;
- int status, n;
- strs_init( &tag, &data, NULL );
- while ( *p ) {
- strs_empty( &tag, &data, NULL );
- if ( endin_istag( p ) ) {
- p = process_endline( &tag, &data, p );
- if ( str_is_empty( &data ) ) continue;
- status = fields_add( endin, str_cstr( &tag ), str_cstr( &data ), 0 );
- if ( status!=FIELDS_OK ) return 0;
- } else {
- p = process_endline2( &tag, &data, p );
- /* endnote puts %K only on 1st line of keywords */
- n = fields_num( endin );
- if ( n>0 && str_has_value( &data ) ) {
- if ( !strncmp( endin->tag[n-1].data, "%K", 2 ) ) {
- status = fields_add( endin, "%K", str_cstr( &data ), 0 );
- if ( status!=FIELDS_OK ) return 0;
- } else {
- str_addchar( &(endin->data[n-1]), ' ' );
- str_strcat( &(endin->data[n-1]), &data );
- }
- }
- }
- }
- strs_free( &tag, &data, NULL );
- return 1;
-}
-
-/*****************************************************
- PUBLIC: int endin_typef()
-*****************************************************/
-
-/* Endnote defaults if no %0 tag
- *
- * if %J & %V - journal article
- * if %B - book section
- * if %R & !%T - report
- * if %I & !%B & !%J & !%R - book
- * if !%B & !%J & !%R & !%I - journal article
- */
-int
-endin_typef( fields *endin, const char *filename, int nrefs, param *p )
-{
- int ntypename, nrefname, is_default, nj, nv, nb, nr, nt, ni;
- char *refname = "", *typename="";
-
- ntypename = fields_find( endin, "%0", LEVEL_MAIN );
- nrefname = fields_find( endin, "%F", LEVEL_MAIN );
- if ( nrefname!=-1 ) refname = fields_value( endin, nrefname, FIELDS_CHRP_NOUSE );
- if ( ntypename!=-1 ) typename = fields_value( endin, ntypename, FIELDS_CHRP_NOUSE );
- else {
- nj = fields_find( endin, "%J", 0 );
- nv = fields_find( endin, "%V", 0 );
- nb = fields_find( endin, "%B", 0 );
- nr = fields_find( endin, "%R", 0 );
- nt = fields_find( endin, "%T", 0 );
- ni = fields_find( endin, "%I", 0 );
- if ( nj!=-1 && nv!=-1 ) {
- typename = "Journal Article";
- } else if ( nb!=-1 ) {
- typename = "Book Section";
- } else if ( nr!=-1 && nt==-1 ) {
- typename = "Report";
- } else if ( ni!=-1 && nb==-1 && nj==-1 && nr==-1 ) {
- typename = "Book";
- } else if ( nb==-1 && nj==-1 && nr==-1 && ni==-1 ) {
- typename = "Journal Article";
- }
- }
-
- return get_reftype( typename, nrefs, p->progname, p->all, p->nall, refname, &is_default, REFTYPE_CHATTY );
-}
-
-/*****************************************************
- PUBLIC: void endin_cleanf()
-*****************************************************/
-
-/* Wiley puts multiple authors separated by commas on the %A lines.
- * We can detect this by finding the terminal comma in the value
- * from the tag/value pair.
- *
- * "%A" "Author A. X. Last, Author N. B. Next,"
- */
-static int
-is_wiley_author( fields *endin, int n )
-{
- str *t, *v;
- t = fields_tag( endin, n, FIELDS_STRP_NOUSE );
- if ( str_is_empty( t ) || strcmp( str_cstr( t ), "%A" ) ) return 0;
- v = fields_value( endin, n, FIELDS_STRP_NOUSE );
- if ( str_is_empty( v ) ) return 0;
- if ( v->data[v->len-1]!=',' ) return 0;
- return 1;
-}
-
-static int
-add_wiley_author( fields *endin, char *intag, str *instring, int inlevel, str *name, int authornum )
-{
- int fstatus;
-
- /* if first author, just replace the data string in the field */
- if ( authornum==0 ) {
- str_strcpy( instring, name );
- if ( str_memerr( instring ) ) return BIBL_ERR_MEMERR;
- }
-
- /* otherwise, append the author */
- else {
- fstatus = fields_add( endin, intag, str_cstr( name ), inlevel );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
-
- return BIBL_OK;
-}
-
-static int
-cleanup_wiley_author( fields *endin, int n )
-{
- int status=BIBL_OK, inlevel, authornum = 0;
- str *instring, copy, name;
- char *p, *intag;
-
- strs_init( &copy, &name, NULL );
-
- intag = fields_tag ( endin, n, FIELDS_CHRP_NOUSE );
- instring = fields_value( endin, n, FIELDS_STRP_NOUSE );
- inlevel = fields_level( endin, n );
-
- str_strcpy( &copy, instring );
- p = str_cstr( &copy );
-
- while ( *p ) {
-
- if ( *p==',' ) {
- if ( str_memerr( &name ) ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
-
- status = add_wiley_author( endin, intag, instring, inlevel, &name, authornum );
- if ( status!=BIBL_OK ) goto out;
-
- str_empty( &name );
- authornum++;
-
- p++;
- while ( is_ws( *p ) ) p++;
- }
-
- else {
- str_addchar( &name, *p );
- p++;
- }
- }
-
- if ( str_has_value( &name ) )
- status = add_wiley_author( endin, intag, instring, inlevel, &name, authornum );
-out:
- strs_free( &copy, &name, NULL );
- return status;
-}
-
-static int
-endin_cleanref( fields *endin )
-{
- int i, n, status;
- n = fields_num( endin );
- for ( i=0; i<n; ++i ) {
- if ( is_wiley_author( endin, i ) ) {
- status = cleanup_wiley_author( endin, i );
- if ( status!=BIBL_OK ) return status;
- }
- }
- return BIBL_OK;
-}
-
-int
-endin_cleanf( bibl *bin, param *p )
-{
- long i;
- for ( i=0; i<bin->nrefs; ++i )
- endin_cleanref( bin->ref[i] );
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int endin_convertf(), returns BIBL_OK or BIBL_ERR_MEMERR
-*****************************************************/
-
-/* month_convert()
- * convert month name to number in format MM, e.g. "January" -> "01"
- * if converted, return 1
- * otherwise return 0
- */
-static int
-month_convert( char *in, char *out )
-{
- char *month1[12]={
- "January", "February",
- "March", "April",
- "May", "June",
- "July", "August",
- "September", "October",
- "November", "December"
- };
- char *month2[12]={
- "Jan", "Feb",
- "Mar", "Apr",
- "May", "Jun",
- "Jul", "Aug",
- "Sep", "Oct",
- "Nov", "Dec"
- };
- int i, found = -1;
-
- for ( i=0; i<12 && found==-1; ++i ) {
- if ( !strcasecmp( in, month1[i] ) ) found = i;
- if ( !strcasecmp( in, month2[i] ) ) found = i;
- }
-
- if ( found==-1 ) return 0;
-
- if ( found > 8 )
- sprintf( out, "%d", found+1 );
- else
- sprintf( out, "0%d", found+1 );
-
- return 1;
-}
-
-static int
-endin_date( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- char *tags[3][2] = {
- { "DATE:YEAR", "PARTDATE:YEAR" },
- { "DATE:MONTH", "PARTDATE:MONTH" },
- { "DATE:DAY", "PARTDATE:DAY" }
- };
- const char *p = invalue->data;
- char month[10], *m;
- int part, status;
- str date;
-
- str_init( &date );
-
- if ( !strncasecmp( outtag, "PART", 4 ) ) part = 1;
- else part = 0;
-
- /* %D YEAR */
- if ( !strcasecmp( intag->data, "%D" ) ) {
- str_cpytodelim( &date, skip_ws( p ), "", 0 );
- if ( str_memerr( &date ) ) return BIBL_ERR_MEMERR;
- if ( str_has_value( &date ) ) {
- status = fields_add( bibout, tags[0][part], date.data, level );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- }
-
- /* %8 MONTH DAY, YEAR */
- /* %8 MONTH, YEAR */
- /* %8 MONTH YEAR */
- else if ( !strcasecmp( intag->data, "%8" ) ) {
-
- /* ...get month */
- p = str_cpytodelim( &date, skip_ws( p ), " ,\n", 0 );
- if ( str_memerr( &date ) ) return BIBL_ERR_MEMERR;
- if ( str_has_value( &date ) ) {
- if ( month_convert( date.data, month ) ) m = month;
- else m = str_cstr( &date );
- status = fields_add( bibout, tags[1][part], m, level );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
-
- p = skip_ws( p );
- if ( *p==',' ) p++;
-
- /* ...get days */
- p = str_cpytodelim( &date, skip_ws( p ), ",\n", 0 );
- if ( str_memerr( &date ) ) return BIBL_ERR_MEMERR;
- if ( date.len>0 && date.len<3 ) {
- status = fields_add( bibout, tags[2][part], date.data, level );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- } else if ( date.len==4 ) {
- status = fields_add( bibout, tags[0][part], date.data, level );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
-
- p = skip_ws( p );
- if ( *p==',' ) p++;
-
- /* ...get year */
- (void) str_cpytodelim( &date, skip_ws( p ), " \t\n\r", 0 );
- if ( str_memerr( &date ) ) return BIBL_ERR_MEMERR;
- if ( str_has_value( &date ) ) {
- status = fields_add( bibout, tags[0][part], date.data, level );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- }
- str_free( &date );
- return BIBL_OK;
-}
-
-static int
-endin_type( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- lookups types[] = {
- { "GENERIC", "ARTICLE" },
- { "BOOK", "BOOK" },
- { "MANUSCRIPT", "MANUSCRIPT" },
- { "CONFERENCE PROCEEDINGS", "INPROCEEDINGS"},
- { "REPORT", "REPORT" },
- { "COMPUTER PROGRAM", "BOOK" },
- { "AUDIOVISUAL MATERIAL", "AUDIOVISUAL" },
- { "ARTWORK", "BOOK" },
- { "PATENT", "BOOK" },
- { "BILL", "BILL" },
- { "CASE", "CASE" },
- { "JOURNAL ARTICLE", "ARTICLE" },
- { "MAGAZINE ARTICLE", "ARTICLE" },
- { "BOOK SECTION", "INBOOK" },
- { "EDITED BOOK", "BOOK" },
- { "NEWSPAPER ARTICLE", "NEWSARTICLE" },
- { "THESIS", "PHDTHESIS" },
- { "PERSONAL COMMUNICATION", "COMMUNICATION" },
- { "ELECTRONIC SOURCE", "TEXT" },
- { "FILM OR BROADCAST", "AUDIOVISUAL" },
- { "MAP", "MAP" },
- { "HEARING", "HEARING" },
- { "STATUTE", "STATUTE" },
- { "CHART OR TABLE", "CHART" },
- { "WEB PAGE", "WEBPAGE" },
- };
- int ntypes = sizeof( types ) / sizeof( lookups );
- int i, status, found=0;
- for ( i=0; i<ntypes; ++i ) {
- if ( !strcasecmp( types[i].oldstr, invalue->data ) ) {
- found = 1;
- status = fields_add( bibout, "INTERNAL_TYPE", types[i].newstr, level );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- }
- if ( !found ) {
- fprintf( stderr, "Did not identify reference type '%s'\n", invalue->data );
- fprintf( stderr, "Defaulting to journal article type\n");
- status = fields_add( bibout, "INTERNAL_TYPE", types[0].newstr, level );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- return BIBL_OK;
-}
-
-static void
-endin_notag( param *p, char *tag, char *data )
-{
- if ( p->verbose ) {
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Cannot find tag '%s'='%s'\n", tag, data );
- }
-}
-
-int
-endin_convertf( fields *bibin, fields *bibout, int reftype, param *p )
-{
- static int (*convertfns[NUM_REFTYPES])(fields *, int, str *, str *, int, param *, char *, fields *) = {
- // Patch: Fix compilation on MSVC target
- [ 0 ] = generic_null,
- [ 1 ] = generic_null,
- [ 2 ] = generic_null,
- [ 3 ] = generic_null,
- [ 4 ] = generic_null,
- [ 5 ] = generic_null,
- [ 6 ] = generic_null,
- [ 7 ] = generic_null,
- [ 8 ] = generic_null,
- [ 9 ] = generic_null,
- [ 10 ] = generic_null,
- [ 11 ] = generic_null,
- [ 12 ] = generic_null,
- [ 13 ] = generic_null,
- [ 14 ] = generic_null,
- [ 15 ] = generic_null,
- [ 16 ] = generic_null,
- [ 17 ] = generic_null,
- [ 18 ] = generic_null,
- [ 19 ] = generic_null,
- [ 20 ] = generic_null,
- [ 21 ] = generic_null,
- [ 22 ] = generic_null,
- [ 23 ] = generic_null,
- [ 24 ] = generic_null,
- [ 25 ] = generic_null,
- [ SIMPLE ] = generic_simple,
- [ TITLE ] = generic_title,
- [ PERSON ] = generic_person,
- [ SERIALNO ] = generic_serialno,
- [ PAGES ] = generic_pages,
- [ NOTES ] = generic_notes,
- [ URL ] = generic_url,
- [ GENRE ] = generic_genre,
- [ TYPE ] = endin_type,
- [ DATE ] = endin_date,
- };
-
- int i, level, process, nfields, fstatus, status = BIBL_OK;
- char *outtag;
- str *intag, *invalue;
-
- nfields = fields_num( bibin );
- for ( i=0; i<nfields; ++i ) {
-
- /* Ensure we have data */
- if ( fields_nodata( bibin, i ) ) {
- fields_setused( bibin, i );
- continue;
- }
-
- intag = fields_tag( bibin, i, FIELDS_STRP );
- invalue = fields_value( bibin, i, FIELDS_STRP );
-
- /*
- * Refer format tags start with '%'. If we have one
- * that doesn't, assume that it comes from endx2xml
- * and just copy and paste to output
- */
- if ( str_has_value( intag ) && intag->data[0]!='%' ) {
- fstatus = fields_add( bibout, str_cstr( intag ), str_cstr( invalue ), bibin->level[i] );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- continue;
- }
-
- if ( !translate_oldtag( str_cstr( intag ), reftype, p->all, p->nall, &process, &level, &outtag ) ) {
- endin_notag( p, str_cstr( intag ), str_cstr( invalue ) );
- continue;
- }
-
- fields_setused( bibin, i );
-
- status = convertfns[ process ]( bibin, i, intag, invalue, level, p, outtag, bibout );
- if ( status!=BIBL_OK ) return status;
-
- }
-
- return status;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/endout.c b/support/texlab/crates/bibutils_sys/src/endout.c
deleted file mode 100644
index cb3a5261fd..0000000000
--- a/support/texlab/crates/bibutils_sys/src/endout.c
+++ /dev/null
@@ -1,777 +0,0 @@
-/*
- * endout.c
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Program and source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include "utf8.h"
-#include "str.h"
-#include "strsearch.h"
-#include "fields.h"
-#include "generic.h"
-#include "name.h"
-#include "title.h"
-#include "type.h"
-#include "url.h"
-#include "bibformats.h"
-#include "msvc_fix.h"
-
-/*****************************************************
- PUBLIC: int endout_initparams()
-*****************************************************/
-
-static int endout_write( fields *in, FILE *fp, param *p, unsigned long refnum );
-static int endout_assemble( fields *in, fields *out, param *pm, unsigned long refnum );
-
-int
-endout_initparams( param *pm, const char *progname )
-{
- pm->writeformat = BIBL_ENDNOTEOUT;
- pm->format_opts = 0;
- pm->charsetout = BIBL_CHARSET_DEFAULT;
- pm->charsetout_src = BIBL_SRC_DEFAULT;
- pm->latexout = 0;
- pm->utf8out = BIBL_CHARSET_UTF8_DEFAULT;
- pm->utf8bom = BIBL_CHARSET_BOM_DEFAULT;
- pm->xmlout = BIBL_XMLOUT_FALSE;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->singlerefperfile = 0;
-
- if ( pm->charsetout == BIBL_CHARSET_UNICODE ) {
- pm->utf8out = pm->utf8bom = 1;
- }
-
- pm->headerf = generic_writeheader;
- pm->footerf = NULL;
- pm->assemblef = endout_assemble;
- pm->writef = endout_write;
-
- if ( !pm->progname ) {
- if ( !progname ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int endout_assemble()
-*****************************************************/
-
-enum {
- TYPE_UNKNOWN = 0,
- TYPE_GENERIC, /* Generic */
- TYPE_ARTWORK, /* Artwork */
- TYPE_AUDIOVISUAL, /* Audiovisual Material */
- TYPE_BILL, /* Bill */
- TYPE_BOOK, /* Book */
- TYPE_INBOOK, /* Book Section */
- TYPE_CASE, /* Case */
- TYPE_CHARTTABLE, /* Chart or Table */
- TYPE_CLASSICALWORK, /* Classical Work */
- TYPE_PROGRAM, /* Computer Program */
- TYPE_INPROCEEDINGS, /* Conference Paper */
- TYPE_PROCEEDINGS, /* Conference Proceedings */
- TYPE_EDITEDBOOK, /* Edited Book */
- TYPE_EQUATION, /* Equation */
- TYPE_ELECTRONICARTICLE, /* Electronic Article */
- TYPE_ELECTRONICBOOK, /* Electronic Book */
- TYPE_ELECTRONIC, /* Electronic Source */
- TYPE_FIGURE, /* Figure */
- TYPE_FILMBROADCAST, /* Film or Broadcast */
- TYPE_GOVERNMENT, /* Government Document */
- TYPE_HEARING, /* Hearing */
- TYPE_ARTICLE, /* Journal Article */
- TYPE_LEGALRULE, /* Legal Rule/Regulation */
- TYPE_MAGARTICLE, /* Magazine Article */
- TYPE_MANUSCRIPT, /* Manuscript */
- TYPE_MAP, /* Map */
- TYPE_NEWSARTICLE, /* Newspaper Article */
- TYPE_ONLINEDATABASE, /* Online Database */
- TYPE_ONLINEMULTIMEDIA, /* Online Multimedia */
- TYPE_PATENT, /* Patent */
- TYPE_COMMUNICATION, /* Personal Communication */
- TYPE_REPORT, /* Report */
- TYPE_STATUTE, /* Statute */
- TYPE_THESIS, /* Thesis */
- TYPE_MASTERSTHESIS, /* Thesis */
- TYPE_PHDTHESIS, /* Thesis */
- TYPE_DIPLOMATHESIS, /* Thesis */
- TYPE_DOCTORALTHESIS, /* Thesis */
- TYPE_HABILITATIONTHESIS, /* Thesis */
- TYPE_LICENTIATETHESIS, /* Thesis */
- TYPE_UNPUBLISHED, /* Unpublished Work */
-};
-
-static void
-write_type( FILE *fp, int type )
-{
- switch( type ) {
- case TYPE_UNKNOWN: fprintf( fp, "TYPE_UNKNOWN" ); break;
- case TYPE_GENERIC: fprintf( fp, "TYPE_GENERIC" ); break;
- case TYPE_ARTWORK: fprintf( fp, "TYPE_ARTWORK" ); break;
- case TYPE_AUDIOVISUAL: fprintf( fp, "TYPE_AUDIOVISUAL" ); break;
- case TYPE_BILL: fprintf( fp, "TYPE_BILL" ); break;
- case TYPE_BOOK: fprintf( fp, "TYPE_BOOK" ); break;
- case TYPE_INBOOK: fprintf( fp, "TYPE_INBOOK" ); break;
- case TYPE_CASE: fprintf( fp, "TYPE_CASE" ); break;
- case TYPE_CHARTTABLE: fprintf( fp, "TYPE_CHARITABLE" ); break;
- case TYPE_CLASSICALWORK: fprintf( fp, "TYPE_CLASSICALWORK" ); break;
- case TYPE_PROGRAM: fprintf( fp, "TYPE_PROGRAM" ); break;
- case TYPE_INPROCEEDINGS: fprintf( fp, "TYPE_INPROCEEDINGS" ); break;
- case TYPE_PROCEEDINGS: fprintf( fp, "TYPE_PROCEEDINGS" ); break;
- case TYPE_EDITEDBOOK: fprintf( fp, "TYPE_EDITEDBOOK" ); break;
- case TYPE_EQUATION: fprintf( fp, "TYPE_EQUATION" ); break;
- case TYPE_ELECTRONICARTICLE: fprintf( fp, "TYPE_ELECTRONICARTICLE" ); break;
- case TYPE_ELECTRONICBOOK: fprintf( fp, "TYPE_ELECTRONICBOOK" ); break;
- case TYPE_ELECTRONIC: fprintf( fp, "TYPE_ELECTRONIC" ); break;
- case TYPE_FIGURE: fprintf( fp, "TYPE_FIGURE" ); break;
- case TYPE_FILMBROADCAST: fprintf( fp, "TYPE_FILMBROADCAST" ); break;
- case TYPE_GOVERNMENT: fprintf( fp, "TYPE_GOVERNMENT" ); break;
- case TYPE_HEARING: fprintf( fp, "TYPE_HEARING" ); break;
- case TYPE_ARTICLE: fprintf( fp, "TYPE_ARTICLE" ); break;
- case TYPE_LEGALRULE: fprintf( fp, "TYPE_LEGALRULE" ); break;
- case TYPE_MAGARTICLE: fprintf( fp, "TYPE_MAGARTICLE" ); break;
- case TYPE_MANUSCRIPT: fprintf( fp, "TYPE_MANUSCRIPT" ); break;
- case TYPE_MAP: fprintf( fp, "TYPE_MAP" ); break;
- case TYPE_NEWSARTICLE: fprintf( fp, "TYPE_NEWSARTICLE" ); break;
- case TYPE_ONLINEDATABASE: fprintf( fp, "TYPE_ONLINEDATABASE" ); break;
- case TYPE_ONLINEMULTIMEDIA: fprintf( fp, "TYPE_ONLINEMULTIMEDIA" ); break;
- case TYPE_PATENT: fprintf( fp, "TYPE_PATENT" ); break;
- case TYPE_COMMUNICATION: fprintf( fp, "TYPE_COMMUNICATION" ); break;
- case TYPE_REPORT: fprintf( fp, "TYPE_REPORT" ); break;
- case TYPE_STATUTE: fprintf( fp, "TYPE_STATUTE" ); break;
- case TYPE_THESIS: fprintf( fp, "TYPE_THESIS" ); break;
- case TYPE_MASTERSTHESIS: fprintf( fp, "TYPE_MASTERSTHESIS" ); break;
- case TYPE_PHDTHESIS: fprintf( fp, "TYPE_PHDTHESIS" ); break;
- case TYPE_DIPLOMATHESIS: fprintf( fp, "TYPE_DIPLOMATHESIS" ); break;
- case TYPE_DOCTORALTHESIS: fprintf( fp, "TYPE_DOCTORALTHESIS" ); break;
- case TYPE_HABILITATIONTHESIS:fprintf( fp, "TYPE_HABILITATIONTHESIS" ); break;
- case TYPE_UNPUBLISHED: fprintf( fp, "TYPE_UNPUBLISHED" ); break;
- default: fprintf( fp, "Error - type not in enum" );break;
- }
-}
-
-static void
-type_report_progress( param *p, const char *element_type, int type, unsigned long refnum )
-{
- if ( p->verbose ) {
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Type from %s element in reference %lu: ", element_type, refnum+1 );
- write_type( stderr, type );
- fprintf( stderr, "\n" );
- }
-}
-
-static int
-type_from_default( fields *in, param *p, unsigned long refnum )
-{
- int n, type;
-
- /* default to chapter if host terms */
- if ( fields_maxlevel( in ) > 0 ) type = TYPE_INBOOK;
-
- /* default to generic if no host terms */
- else type = TYPE_GENERIC;
-
-
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Cannot identify TYPE in reference %lu ", refnum+1 );
- n = fields_find( in, "REFNUM", LEVEL_ANY );
- if ( n!=FIELDS_NOTFOUND )
- fprintf( stderr, " %s", (char *) fields_value( in, n, FIELDS_CHRP ) );
- if ( type==TYPE_INBOOK )
- fprintf( stderr, " (defaulting to book chapter)\n" );
- else
- fprintf( stderr, " (defaulting to generic)\n" );
-
- return type;
-}
-
-static int
-get_type( fields *in, param *p, unsigned long refnum )
-{
- /* Comment out TYPE_GENERIC entries as that is default, but
- * keep in source as record of mapping decision. */
- match_type genre_matches[] = {
- /* MARC Authority elements */
- { "art original", TYPE_ARTWORK, LEVEL_ANY },
- { "art reproduction", TYPE_ARTWORK, LEVEL_ANY },
- { "article", TYPE_ARTICLE, LEVEL_ANY },
- { "atlas", TYPE_MAP, LEVEL_ANY },
- { "autobiography", TYPE_BOOK, LEVEL_ANY },
-/* { "bibliography", TYPE_GENERIC, LEVEL_ANY },*/
- { "biography", TYPE_BOOK, LEVEL_ANY },
- { "book", TYPE_BOOK, LEVEL_MAIN },
- { "book", TYPE_INBOOK, LEVEL_ANY },
-/* { "calendar", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "catalog", TYPE_GENERIC, LEVEL_ANY },*/
- { "chart", TYPE_CHARTTABLE, LEVEL_ANY },
-/* { "comic or graphic novel", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "comic strip", TYPE_GENERIC, LEVEL_ANY },*/
- { "conference publication", TYPE_PROCEEDINGS, LEVEL_ANY },
- { "database", TYPE_ONLINEDATABASE, LEVEL_ANY },
-/* { "dictionary", TYPE_GENERIC, LEVEL_ANY },*/
- { "diorama", TYPE_ARTWORK, LEVEL_ANY },
-/* { "directory", TYPE_GENERIC, LEVEL_ANY },*/
- { "discography", TYPE_AUDIOVISUAL, LEVEL_ANY },
-/* { "drama", TYPE_GENERIC, LEVEL_ANY },*/
- { "encyclopedia", TYPE_BOOK, LEVEL_ANY },
-/* { "essay", TYPE_GENERIC, LEVEL_ANY }, */
- { "festschrift", TYPE_BOOK, LEVEL_MAIN },
- { "festschrift", TYPE_INBOOK, LEVEL_ANY },
- { "fiction", TYPE_BOOK, LEVEL_ANY },
- { "filmography", TYPE_FILMBROADCAST, LEVEL_ANY },
- { "filmstrip", TYPE_FILMBROADCAST, LEVEL_ANY },
-/* { "finding aid", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "flash card", TYPE_GENERIC, LEVEL_ANY },*/
- { "folktale", TYPE_CLASSICALWORK, LEVEL_ANY },
- { "font", TYPE_ELECTRONIC, LEVEL_ANY },
-/* { "game", TYPE_GENERIC, LEVEL_ANY },*/
- { "government publication", TYPE_GOVERNMENT, LEVEL_ANY },
- { "graphic", TYPE_FIGURE, LEVEL_ANY },
- { "globe", TYPE_MAP, LEVEL_ANY },
-/* { "handbook", TYPE_GENERIC, LEVEL_ANY },*/
- { "history", TYPE_BOOK, LEVEL_ANY },
- { "hymnal", TYPE_BOOK, LEVEL_MAIN },
- { "hymnal", TYPE_INBOOK, LEVEL_ANY },
-/* { "humor, satire", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "index", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "instruction", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "interview", TYPE_GENERIC, LEVEL_ANY },*/
- { "issue", TYPE_ARTICLE, LEVEL_ANY },
- { "journal", TYPE_ARTICLE, LEVEL_ANY },
-/* { "kit", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "language instruction", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "law report or digest", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "legal article", TYPE_GENERIC, LEVEL_ANY },*/
- { "legal case and case notes", TYPE_CASE, LEVEL_ANY },
- { "legislation", TYPE_BILL, LEVEL_ANY },
- { "letter", TYPE_COMMUNICATION, LEVEL_ANY },
- { "loose-leaf", TYPE_GENERIC, LEVEL_ANY },
- { "map", TYPE_MAP, LEVEL_ANY },
-/* { "memoir", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "microscope slide", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "model", TYPE_GENERIC, LEVEL_ANY },*/
- { "motion picture", TYPE_AUDIOVISUAL, LEVEL_ANY },
- { "multivolume monograph", TYPE_BOOK, LEVEL_ANY },
- { "newspaper", TYPE_NEWSARTICLE, LEVEL_ANY },
- { "novel", TYPE_BOOK, LEVEL_ANY },
-/* { "numeric data", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "offprint", TYPE_GENERIC, LEVEL_ANY },*/
- { "online system or service", TYPE_ELECTRONIC, LEVEL_ANY },
- { "patent", TYPE_PATENT, LEVEL_ANY },
- { "picture", TYPE_ARTWORK, LEVEL_ANY },
-/* { "poetry", TYPE_GENERIC, LEVEL_ANY },*/
- { "programmed text", TYPE_PROGRAM, LEVEL_ANY },
-/* { "realia", TYPE_GENERIC, LEVEL_ANY },*/
- { "rehearsal", TYPE_AUDIOVISUAL, LEVEL_ANY },
-/* { "remote sensing image", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "reporting", TYPE_GENERIC, LEVEL_ANY },*/
- { "report", TYPE_REPORT, LEVEL_ANY },
-/* { "review", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "script", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "series", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "short story", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "slide", TYPE_GENERIC, LEVEL_ANY },*/
- { "sound", TYPE_AUDIOVISUAL, LEVEL_ANY },
-/* { "speech", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "standard or specification", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "statistics", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "survey of literature", TYPE_GENERIC, LEVEL_ANY },*/
- { "technical drawing", TYPE_ARTWORK, LEVEL_ANY },
- { "technical report", TYPE_REPORT, LEVEL_ANY },
-/* { "toy", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "transparency", TYPE_GENERIC, LEVEL_ANY },*/
-/* { "treaty", TYPE_GENERIC, LEVEL_ANY },*/
- { "videorecording", TYPE_AUDIOVISUAL, LEVEL_ANY },
- { "web site", TYPE_ELECTRONIC, LEVEL_ANY },
- /* Non-MARC Authority elements */
- { "academic journal", TYPE_ARTICLE, LEVEL_ANY },
- { "collection", TYPE_BOOK, LEVEL_MAIN },
- { "collection", TYPE_INBOOK, LEVEL_ANY },
- { "magazine", TYPE_MAGARTICLE, LEVEL_ANY },
- { "hearing", TYPE_HEARING, LEVEL_ANY },
- { "Ph.D. thesis", TYPE_PHDTHESIS, LEVEL_ANY },
- { "Masters thesis", TYPE_MASTERSTHESIS, LEVEL_ANY },
- { "Diploma thesis", TYPE_DIPLOMATHESIS, LEVEL_ANY },
- { "Doctoral thesis", TYPE_DOCTORALTHESIS, LEVEL_ANY },
- { "Habilitation thesis", TYPE_HABILITATIONTHESIS, LEVEL_ANY },
- { "Licentiate thesis", TYPE_LICENTIATETHESIS, LEVEL_ANY },
- { "communication", TYPE_COMMUNICATION, LEVEL_ANY },
- { "manuscript", TYPE_MANUSCRIPT, LEVEL_ANY },
- { "unpublished", TYPE_UNPUBLISHED, LEVEL_ANY },
- /* Delayed MARC Authority elements */
- { "thesis", TYPE_THESIS, LEVEL_ANY },
- { "periodical", TYPE_MAGARTICLE, LEVEL_ANY },
- };
- int ngenre_matches = sizeof( genre_matches ) / sizeof( genre_matches[0] );
-
- match_type resource_matches[] = {
- { "moving image", TYPE_FILMBROADCAST, LEVEL_ANY },
- { "software, multimedia", TYPE_PROGRAM, LEVEL_ANY },
- };
- int nresource_matches = sizeof( resource_matches ) / sizeof( resource_matches[0] );
-
- match_type issuance_matches[] = {
- { "monographic", TYPE_BOOK, LEVEL_MAIN },
- { "monographic", TYPE_INBOOK, LEVEL_ANY },
- };
- int nissuance_matches = sizeof( issuance_matches ) / sizeof( issuance_matches[0] );
-
- int type;
-
- type = type_from_mods_hints( in, TYPE_FROM_GENRE, genre_matches, ngenre_matches, TYPE_UNKNOWN );
- type_report_progress( p, "genre", type, refnum );
- if ( type!=TYPE_UNKNOWN ) return type;
-
- type = type_from_mods_hints( in, TYPE_FROM_RESOURCE, resource_matches, nresource_matches, TYPE_UNKNOWN );
- type_report_progress( p, "resource", type, refnum );
- if ( type!=TYPE_UNKNOWN ) return type;
-
- type = type_from_mods_hints( in, TYPE_FROM_ISSUANCE, issuance_matches, nissuance_matches, TYPE_UNKNOWN );
- type_report_progress( p, "issuance", type, refnum );
- if ( type!=TYPE_UNKNOWN ) return type;
-
- return type_from_default( in, p, refnum );
-}
-
-static void
-append_type( int type, fields *out, param *p, int *status )
-{
- /* These are restricted to Endnote-defined types */
- match_type genrenames[] = {
- { "Generic", TYPE_GENERIC },
- { "Artwork", TYPE_ARTWORK },
- { "Audiovisual Material", TYPE_AUDIOVISUAL },
- { "Bill", TYPE_BILL },
- { "Book", TYPE_BOOK },
- { "Book Section", TYPE_INBOOK },
- { "Case", TYPE_CASE },
- { "Chart or Table", TYPE_CHARTTABLE },
- { "Classical Work", TYPE_CLASSICALWORK },
- { "Computer Program", TYPE_PROGRAM },
- { "Conference Paper", TYPE_INPROCEEDINGS },
- { "Conference Proceedings", TYPE_PROCEEDINGS },
- { "Edited Book", TYPE_EDITEDBOOK },
- { "Equation", TYPE_EQUATION },
- { "Electronic Article", TYPE_ELECTRONICARTICLE },
- { "Electronic Book", TYPE_ELECTRONICBOOK },
- { "Electronic Source", TYPE_ELECTRONIC },
- { "Figure", TYPE_FIGURE },
- { "Film or Broadcast", TYPE_FILMBROADCAST },
- { "Government Document", TYPE_GOVERNMENT },
- { "Hearing", TYPE_HEARING },
- { "Journal Article", TYPE_ARTICLE },
- { "Legal Rule/Regulation", TYPE_LEGALRULE },
- { "Magazine Article", TYPE_MAGARTICLE },
- { "Manuscript", TYPE_MANUSCRIPT },
- { "Map", TYPE_MAP },
- { "Newspaper Article", TYPE_NEWSARTICLE },
- { "Online Database", TYPE_ONLINEDATABASE },
- { "Online Multimedia", TYPE_ONLINEMULTIMEDIA },
- { "Patent", TYPE_PATENT },
- { "Personal Communication", TYPE_COMMUNICATION },
- { "Report", TYPE_REPORT },
- { "Statute", TYPE_STATUTE },
- { "Thesis", TYPE_THESIS },
- { "Thesis", TYPE_PHDTHESIS },
- { "Thesis", TYPE_MASTERSTHESIS },
- { "Thesis", TYPE_DIPLOMATHESIS },
- { "Thesis", TYPE_DOCTORALTHESIS },
- { "Thesis", TYPE_HABILITATIONTHESIS },
- { "Unpublished Work", TYPE_UNPUBLISHED },
- };
- int ngenrenames = sizeof( genrenames ) / sizeof( genrenames[0] );
- int i, fstatus, found = 0;
- for ( i=0; i<ngenrenames && !found; ++i ) {
- if ( genrenames[i].type == type ) {
- fstatus = fields_add( out, "%0", genrenames[i].name, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- found = 1;
- }
- }
- if ( !found ) {
- fstatus = fields_add( out, "%0", "Generic", LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Cannot identify type %d\n", type );
- }
-}
-
-static int
-append_title( fields *in, char *full, char *sub, char *endtag,
- int level, fields *out, int *status )
-{
- str *mainttl = fields_findv( in, level, FIELDS_STRP, full );
- str *subttl = fields_findv( in, level, FIELDS_STRP, sub );
- str fullttl;
- int fstatus;
-
- str_init( &fullttl );
- title_combine( &fullttl, mainttl, subttl );
-
- if ( str_memerr( &fullttl ) ) {
- *status = BIBL_ERR_MEMERR;
- goto out;
- }
-
- if ( str_has_value( &fullttl ) ) {
- fstatus = fields_add( out, endtag, str_cstr( &fullttl ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-out:
- str_free( &fullttl );
- return 1;
-}
-
-static void
-append_people( fields *in, char *tag, char *entag, int level, fields *out, int *status )
-{
- int i, n, flvl, fstatus;
- str oneperson;
- char *ftag;
-
- str_init( &oneperson );
- n = fields_num( in );
- for ( i=0; i<n; ++i ) {
- flvl = fields_level( in, i );
- if ( level!=LEVEL_ANY && flvl!=level ) continue;
- ftag = fields_tag( in, i, FIELDS_CHRP );
- if ( !strcasecmp( ftag, tag ) ) {
- name_build_withcomma( &oneperson, fields_value( in, i, FIELDS_CHRP ) );
- fstatus = fields_add_can_dup( out, entag, str_cstr( &oneperson ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- }
- str_free( &oneperson );
-}
-
-static void
-append_pages( fields *in, fields *out, int *status )
-{
- str *sn, *en;
- int fstatus;
- str pages;
- char *ar;
-
- sn = fields_findv( in, LEVEL_ANY, FIELDS_STRP, "PAGES:START" );
- en = fields_findv( in, LEVEL_ANY, FIELDS_STRP, "PAGES:STOP" );
- if ( sn || en ) {
- str_init( &pages );
- if ( sn ) str_strcpy( &pages, sn );
- if ( sn && en ) str_strcatc( &pages, "-" );
- if ( en ) str_strcat( &pages, en );
- if ( str_memerr( &pages ) ) { *status = BIBL_ERR_MEMERR; str_free( &pages ); return; }
- fstatus = fields_add( out, "%P", str_cstr( &pages ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- str_free( &pages );
- } else {
- ar = fields_findv( in, LEVEL_ANY, FIELDS_CHRP, "ARTICLENUMBER" );
- if ( ar ) {
- fstatus = fields_add( out, "%P", ar, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- }
-}
-
-static void
-append_urls( fields *in, fields *out, int *status )
-{
- int lstatus;
- slist types;
-
- lstatus = slist_init_valuesc( &types, "URL", "DOI", "PMID", "PMC", "ARXIV", "JSTOR", "MRNUMBER", NULL );
- if ( lstatus!=SLIST_OK ) {
- *status = BIBL_ERR_MEMERR;
- return;
- }
-
- *status = urls_merge_and_add( in, LEVEL_ANY, out, "%U", LEVEL_MAIN, &types );
-
- slist_free( &types );
-}
-
-static void
-append_year( fields *in, fields *out, int *status )
-{
- int fstatus;
- char *year;
-
- year = fields_findv_firstof( in, LEVEL_ANY, FIELDS_CHRP, "DATE:YEAR", "PARTDATE:YEAR", NULL );
- if ( year ) {
- fstatus = fields_add( out, "%D", year, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-}
-
-static void
-append_monthday( fields *in, fields *out, int *status )
-{
- char *months[12] = { "January", "February", "March", "April",
- "May", "June", "July", "August", "September", "October",
- "November", "December" };
- char *month, *day;
- int m, fstatus;
- str monday;
-
- str_init( &monday );
- month = fields_findv_firstof( in, LEVEL_ANY, FIELDS_CHRP, "DATE:MONTH", "PARTDATE:MONTH", NULL );
- day = fields_findv_firstof( in, LEVEL_ANY, FIELDS_CHRP, "DATE:DAY", "PARTDATE:DAY", NULL );
- if ( month || day ) {
- if ( month ) {
- m = atoi( month );
- if ( m>0 && m<13 ) str_strcpyc( &monday, months[m-1] );
- else str_strcpyc( &monday, month );
- }
- if ( month && day ) str_strcatc( &monday, " " );
- if ( day ) str_strcatc( &monday, day );
- fstatus = fields_add( out, "%8", str_cstr( &monday ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- str_free( &monday );
-}
-
-static void
-append_genrehint( int type, fields *out, vplist *a, int *status )
-{
- vplist_index i;
- int fstatus;
- char *g;
-
- for ( i=0; i<a->n; ++i ) {
- g = ( char * ) vplist_get( a, i );
- if ( !strcmp( g, "journal article" ) && type==TYPE_ARTICLE ) continue;
- if ( !strcmp( g, "academic journal" ) && type==TYPE_ARTICLE ) continue;
- if ( !strcmp( g, "collection" ) && type==TYPE_INBOOK ) continue;
- if ( !strcmp( g, "television broadcast" ) && type==TYPE_FILMBROADCAST ) continue;
- if ( !strcmp( g, "electronic" ) && type==TYPE_PROGRAM ) continue;
- if ( !strcmp( g, "magazine" ) && type==TYPE_MAGARTICLE ) continue;
- if ( !strcmp( g, "miscellaneous" ) && type==TYPE_GENERIC ) continue;
- if ( !strcmp( g, "hearing" ) && type==TYPE_HEARING ) continue;
- if ( !strcmp( g, "communication" ) && type==TYPE_COMMUNICATION ) continue;
- if ( !strcmp( g, "report" ) && type==TYPE_REPORT ) continue;
- if ( !strcmp( g, "book chapter" ) && type==TYPE_INBOOK ) continue;
- fstatus = fields_add( out, "%9", g, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- *status = BIBL_ERR_MEMERR;
- return;
- }
- }
-}
-
-static void
-append_all_genrehint( int type, fields *in, fields *out, int *status )
-{
- vplist a;
-
- vplist_init( &a );
-
- fields_findv_each( in, LEVEL_ANY, FIELDS_CHRP, &a, "GENRE:BIBUTILS" );
- append_genrehint( type, out, &a, status );
-
- vplist_empty( &a );
-
- fields_findv_each( in, LEVEL_ANY, FIELDS_CHRP, &a, "GENRE:UNKNOWN" );
- append_genrehint( type, out, &a, status );
-
- vplist_free( &a );
-}
-
-static void
-append_thesishint( int type, fields *out, int *status )
-{
- int fstatus;
-
- if ( type==TYPE_MASTERSTHESIS ) {
- fstatus = fields_add( out, "%9", "Masters thesis", LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- else if ( type==TYPE_PHDTHESIS ) {
- fstatus = fields_add( out, "%9", "Ph.D. thesis", LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- else if ( type==TYPE_DIPLOMATHESIS ) {
- fstatus = fields_add( out, "%9", "Diploma thesis", LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- else if ( type==TYPE_DOCTORALTHESIS ) {
- fstatus = fields_add( out, "%9", "Doctoral thesis", LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- else if ( type==TYPE_HABILITATIONTHESIS ) {
- fstatus = fields_add( out, "%9", "Habilitation thesis", LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- else if ( type==TYPE_LICENTIATETHESIS ) {
- fstatus = fields_add( out, "%9", "Licentiate thesis", LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-}
-
-static void
-append_easyall( fields *in, char *tag, char *entag, int level, fields *out, int *status )
-{
- vplist_index i;
- int fstatus;
- vplist a;
- vplist_init( &a );
- fields_findv_each( in, level, FIELDS_CHRP, &a, tag );
- for ( i=0; i<a.n; ++i ) {
- fstatus = fields_add( out, entag, (char *) vplist_get( &a, i ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- vplist_free( &a );
-}
-
-static void
-append_easy( fields *in, char *tag, char *entag, int level, fields *out, int *status )
-{
- char *value;
- int fstatus;
-
- value = fields_findv( in, level, FIELDS_CHRP, tag );
- if ( value ) {
- fstatus = fields_add( out, entag, value, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-}
-
-static int
-endout_assemble( fields *in, fields *out, param *pm, unsigned long refnum )
-{
- int added, type, status = BIBL_OK;
-
- fields_clearused( in );
-
- type = get_type( in, pm, refnum );
-
- append_type( type, out, pm, &status );
-
- added = append_title( in, "TITLE", "SUBTITLE", "%T", LEVEL_MAIN, out, &status );
- if ( added==0 ) append_title( in, "SHORTTITLE", "SHORTSUBTITLE", "%T", LEVEL_MAIN, out, &status );
- else append_title( in, "SHORTTITLE", "SHORTSUBTITLE", "%!", LEVEL_MAIN, out, &status );
-
- append_people( in, "AUTHOR", "%A", LEVEL_MAIN, out, &status );
- append_people( in, "EDITOR", "%E", LEVEL_MAIN, out, &status );
- if ( type==TYPE_ARTICLE || type==TYPE_MAGARTICLE || type==TYPE_ELECTRONICARTICLE || type==TYPE_NEWSARTICLE )
- append_people( in, "EDITOR", "%E", LEVEL_HOST, out, &status );
- else if ( type==TYPE_INBOOK || type==TYPE_INPROCEEDINGS ) {
- append_people( in, "EDITOR", "%E", LEVEL_HOST, out, &status );
- } else {
- append_people( in, "EDITOR", "%Y", LEVEL_HOST, out, &status );
- }
- append_people( in, "TRANSLATOR", "%H", LEVEL_ANY, out, &status );
-
- append_people( in, "AUTHOR", "%Y", LEVEL_SERIES, out, &status );
- append_people( in, "EDITOR", "%Y", LEVEL_SERIES, out, &status );
-
- if ( type==TYPE_CASE ) {
- append_easy( in, "AUTHOR:CORP", "%I", LEVEL_MAIN, out, &status );
- append_easy( in, "AUTHOR:ASIS", "%I", LEVEL_MAIN, out, &status );
- }
- else if ( type==TYPE_HEARING ) {
- append_easyall( in, "AUTHOR:CORP", "%S", LEVEL_MAIN, out, &status );
- append_easyall( in, "AUTHOR:ASIS", "%S", LEVEL_MAIN, out, &status );
- }
- else if ( type==TYPE_NEWSARTICLE ) {
- append_people( in, "REPORTER", "%A", LEVEL_MAIN, out, &status );
- append_people( in, "REPORTER:CORP", "%A", LEVEL_MAIN, out, &status );
- append_people( in, "REPORTER:ASIS", "%A", LEVEL_MAIN, out, &status );
- }
- else if ( type==TYPE_COMMUNICATION ) {
- append_people( in, "ADDRESSEE", "%E", LEVEL_ANY, out, &status );
- append_people( in, "ADDRESSEE:CORP", "%E", LEVEL_ANY, out, &status );
- append_people( in, "ADDRESSEE:ASIS", "%E", LEVEL_ANY, out, &status );
- }
- else {
- append_easyall( in, "AUTHOR:CORP", "%A", LEVEL_MAIN, out, &status );
- append_easyall( in, "AUTHOR:ASIS", "%A", LEVEL_MAIN, out, &status );
- append_easyall( in, "EDITOR:CORP", "%E", LEVEL_ANY, out, &status );
- append_easyall( in, "EDITOR:ASIS", "%E", LEVEL_ANY, out, &status );
- append_easyall( in, "TRANSLATOR:CORP", "%H", LEVEL_ANY, out, &status );
- append_easyall( in, "TRANSLATOR:ASIS", "%H", LEVEL_ANY, out, &status );
- }
-
- if ( type==TYPE_ARTICLE || type==TYPE_MAGARTICLE || type==TYPE_ELECTRONICARTICLE || type==TYPE_NEWSARTICLE ) {
- added = append_title( in, "TITLE", "SUBTITLE", "%J", LEVEL_HOST, out, &status );
- if ( added==0 ) append_title( in, "SHORTTITLE", "SHORTSUBTITLE", "%J", LEVEL_HOST, out, &status );
- }
-
- else if ( type==TYPE_INBOOK || type==TYPE_INPROCEEDINGS ) {
- added = append_title( in, "TITLE", "SUBTITLE", "%B", LEVEL_HOST, out, &status );
- if ( added==0 ) append_title( in, "SHORTTITLE", "SHORTSUBTITLE", "%B", LEVEL_HOST, out, &status );
- }
-
- else {
- added = append_title( in, "TITLE", "SUBTITLE", "%S", LEVEL_HOST, out, &status );
- if ( added==0 ) append_title( in, "SHORTTITLE", "SHORTSUBTITLE", "%S", LEVEL_HOST, out, &status );
- }
-
- if ( type!=TYPE_CASE && type!=TYPE_HEARING ) {
- append_title( in, "TITLE", "SUBTITLE", "%S", LEVEL_SERIES, out, &status );
- }
-
- append_year ( in, out, &status );
- append_monthday( in, out, &status );
-
- append_easy ( in, "VOLUME", "%V", LEVEL_ANY, out, &status );
- append_easy ( in, "ISSUE", "%N", LEVEL_ANY, out, &status );
- append_easy ( in, "NUMBER", "%N", LEVEL_ANY, out, &status );
- append_easy ( in, "EDITION", "%7", LEVEL_ANY, out, &status );
- append_easy ( in, "PUBLISHER", "%I", LEVEL_ANY, out, &status );
- append_easy ( in, "ADDRESS", "%C", LEVEL_ANY, out, &status );
- append_easy ( in, "DEGREEGRANTOR", "%C", LEVEL_ANY, out, &status );
- append_easy ( in, "DEGREEGRANTOR:CORP", "%C", LEVEL_ANY, out, &status );
- append_easy ( in, "DEGREEGRANTOR:ASIS", "%C", LEVEL_ANY, out, &status );
- append_easy ( in, "SERIALNUMBER", "%@", LEVEL_ANY, out, &status );
- append_easy ( in, "ISSN", "%@", LEVEL_ANY, out, &status );
- append_easy ( in, "ISBN", "%@", LEVEL_ANY, out, &status );
- append_easy ( in, "LANGUAGE", "%G", LEVEL_ANY, out, &status );
- append_easy ( in, "REFNUM", "%F", LEVEL_ANY, out, &status );
- append_easyall ( in, "NOTES", "%O", LEVEL_ANY, out, &status );
- append_easy ( in, "ABSTRACT", "%X", LEVEL_ANY, out, &status );
- append_easy ( in, "CLASSIFICATION" , "%L", LEVEL_ANY, out, &status );
- append_easyall ( in, "KEYWORD", "%K", LEVEL_ANY, out, &status );
- append_all_genrehint( type, in, out, &status );
- append_thesishint( type, out, &status );
- append_easyall ( in, "DOI", "%R", LEVEL_ANY, out, &status );
- append_easyall ( in, "URL", "%U", LEVEL_ANY, out, &status );
- append_easyall ( in, "FILEATTACH", "%U", LEVEL_ANY, out, &status );
- append_urls ( in, out, &status );
- append_pages ( in, out, &status );
-
- return status;
-}
-
-/*****************************************************
- PUBLIC: int endout_write()
-*****************************************************/
-
-static int
-endout_write( fields *out, FILE *fp, param *pm, unsigned long refnum )
-{
- int i;
-
- for ( i=0; i<out->n; ++i ) {
- fprintf( fp, "%s %s\n",
- (char*) fields_tag( out, i, FIELDS_CHRP ),
- (char*) fields_value( out, i, FIELDS_CHRP )
- );
- }
-
- fprintf( fp, "\n" );
- fflush( fp );
- return BIBL_OK;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/endtypes.c b/support/texlab/crates/bibutils_sys/src/endtypes.c
deleted file mode 100644
index a9f65c7ef8..0000000000
--- a/support/texlab/crates/bibutils_sys/src/endtypes.c
+++ /dev/null
@@ -1,1257 +0,0 @@
-/*
- * endtypes.c
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Program and source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <string.h>
-#include "is_ws.h"
-#include "fields.h"
-#include "reftypes.h"
-
-/* if no specific type can be identified */
-static lookups generic[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "AUTHOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE" , TITLE, LEVEL_MAIN },
- { "%J", "TITLE", TITLE, LEVEL_HOST }, /* for refer formats */
- { "%E", "2ND_AUTHOR", PERSON, LEVEL_MAIN },
- { "%B", "2ND_TITLE", SIMPLE, LEVEL_MAIN },
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN },
- { "%6", "NUMVOLUMES", SIMPLE, LEVEL_HOST },
- { "%N", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "%P", "PAGES", PAGES, LEVEL_MAIN },
- { "%&", "SECTION", SIMPLE, LEVEL_MAIN },
- { "%Y", "AUTHOR", PERSON, LEVEL_SERIES },
- { "%S", "TITLE", TITLE, LEVEL_SERIES },
- { "%7", "EDITION", SIMPLE, LEVEL_MAIN },
- { "%8", "DATE:MONTH", DATE, LEVEL_MAIN },
- { "%9", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "%?", "SUB_AUTHOR", PERSON, LEVEL_MAIN }, /* subsidiary-authors */
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%@", "SERIALNUMBER", SERIALNO, LEVEL_MAIN },
- { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */
- { "%)", "REPRINTEDITION", SIMPLE, LEVEL_MAIN },
- { "%*", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%Z", "NOTES", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN }
-};
-
-static lookups journalarticle[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "AUTHOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE",SIMPLE, LEVEL_MAIN },
- { "%D", "PARTDATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE" , TITLE, LEVEL_MAIN },
- { "%J", "TITLE", TITLE, LEVEL_HOST }, /* journal title */
- { "%B", "TITLE", TITLE, LEVEL_HOST }, /* journal title */
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN },
- { "%N", "ISSUE", SIMPLE, LEVEL_MAIN },
- { "%P", "PAGES", PAGES, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_HOST },
- { "%8", "PARTDATE:MONTH", DATE, LEVEL_MAIN },
- { "%9", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%@", "SERIALNUMBER", SERIALNO, LEVEL_HOST },
- { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */
- { "%)", "REPRINTEDITION",SIMPLE, LEVEL_MAIN },
- { "%*", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%Z", "NOTES", NOTES, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%+", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:BIBUTILS|journal article", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|periodical", ALWAYS, LEVEL_HOST },
- { " ", "GENRE:BIBUTILS|academic journal", ALWAYS, LEVEL_HOST }
-};
-
-static lookups magazinearticle[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "AUTHOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "PARTDATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE", TITLE, LEVEL_MAIN },
- { "%J", "TITLE", TITLE, LEVEL_HOST }, /* magazine name */
- { "%B", "TITLE", TITLE, LEVEL_HOST }, /* magazine name */
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%V", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "%N", "ISSUE", SIMPLE, LEVEL_MAIN },
- { "%P", "PAGES", PAGES, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_HOST },
- { "%8", "PARTDATE:MONTH", DATE, LEVEL_MAIN },
- { "%!", "SHORTTITLE",TITLE, LEVEL_MAIN },
- { "%@", "SERIALNUMBER", SERIALNO,LEVEL_HOST },
- { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */
- { "%)", "REPRINTEDITION",SIMPLE,LEVEL_MAIN },
- { "%*", "REVIEWEDITEM",SIMPLE,LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER",SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%O", "NOTES", SIMPLE, LEVEL_MAIN },
- { "%Z", "NOTES", SIMPLE, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%+", "ADDRESS:AUTHOR",SIMPLE,LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|periodical", ALWAYS, LEVEL_HOST },
- { " ", "GENRE:BIBUTILS|magazine", ALWAYS, LEVEL_HOST }
-};
-
-static lookups newspaperarticle[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "REPORTER", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR",PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "PARTDATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE" , TITLE, LEVEL_MAIN },
- { "%J", "TITLE", TITLE, LEVEL_HOST }, /* newspaper name */
- { "%B", "TITLE", TITLE, LEVEL_HOST }, /* newspaper name */
- { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN },
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%N", "ISSUE", SIMPLE, LEVEL_MAIN },
- { "%P", "PAGES", PAGES, LEVEL_MAIN },
- { "%7", "EDITION", SIMPLE, LEVEL_MAIN },
- { "%8", "PARTDATE:MONTH", DATE, LEVEL_MAIN },
- { "%!", "SHORTTITLE",TITLE, LEVEL_MAIN },
- { "%@", "SERIALNUMBER", SERIALNO, LEVEL_MAIN },
- { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */
- { "%)", "REPRINTEDITION",SIMPLE, LEVEL_MAIN },
- { "%*", "REVIEWEDITEM",SIMPLE,LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER",SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%O", "NOTES", SIMPLE, LEVEL_MAIN },
- { "%Z", "NOTES", SIMPLE, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%+", "ADDRESS:AUTHOR",SIMPLE,LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|newspaper", ALWAYS, LEVEL_HOST }
-};
-
-static lookups book[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "AUTHOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE" , TITLE, LEVEL_MAIN },
- { "%E", "AUTHOR", PERSON, LEVEL_HOST }, /* SERIES_AUTHOR */
- { "%B", "TITLE", TITLE, LEVEL_HOST }, /* SERIES_TITLE */
- { "%S", "TITLE", TITLE, LEVEL_SERIES },
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN },
- { "%N", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "%6", "NUMVOLUMES", SIMPLE, LEVEL_MAIN },
- { "%P", "PAGES:TOTAL", SIMPLE, LEVEL_MAIN },
- { "%7", "EDITION", SIMPLE, LEVEL_MAIN },
- { "%?", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%@", "SERIALNUMBER", SERIALNO, LEVEL_MAIN },
- { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */
- { "%)", "REPRINTEDITION", SIMPLE, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", SIMPLE, LEVEL_MAIN },
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "GENRE:MARC|book", ALWAYS, LEVEL_MAIN },
- { " ", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups booksection[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "AUTHOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_HOST },
- { "%T", "TITLE", TITLE, LEVEL_MAIN },
- { "%E", "EDITOR", PERSON, LEVEL_HOST }, /* editor for book */
- { "%B", "TITLE", TITLE, LEVEL_HOST }, /* book title */
- { "%C", "ADDRESS", SIMPLE, LEVEL_HOST },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_HOST },
- { "%N", "NUMBER", SIMPLE, LEVEL_HOST },
- { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN },
- { "%6", "NUMVOLUMES", SIMPLE, LEVEL_HOST },
- { "%P", "PAGES", PAGES, LEVEL_MAIN },
- { "%Y", "EDITOR", PERSON, LEVEL_SERIES },
- { "%S", "TITLE", TITLE, LEVEL_SERIES },
- { "%7", "EDITION", SIMPLE, LEVEL_HOST },
- { "%?", "TRANSLATOR", PERSON, LEVEL_HOST },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%@", "SERIALNUMBER", SERIALNO, LEVEL_HOST },
- { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */
- { "%)", "REPRINTEDITION", SIMPLE, LEVEL_HOST },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", SIMPLE, LEVEL_MAIN },
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "GENRE:BIBUTILS|book chapter", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|book", ALWAYS, LEVEL_HOST },
- { " ", "ISSUANCE|monographic", ALWAYS, LEVEL_HOST },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups editedbook[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "EDITOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE" , TITLE, LEVEL_MAIN },
- { "%E", "EDITOR", PERSON, LEVEL_HOST }, /* SERIES_EDITOR */
- { "%B", "TITLE", TITLE, LEVEL_HOST }, /* SERIES_TITLE */
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "%N", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN },
- { "%6", "NUMVOLUMES", SIMPLE, LEVEL_HOST },
- { "%P", "PAGES:TOTAL", SIMPLE, LEVEL_MAIN },
- { "%7", "EDITION", SIMPLE, LEVEL_MAIN },
- { "%?", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%@", "SERIALNUMBER", SERIALNO, LEVEL_MAIN },
- { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */
- { "%)", "REPRINTEDITION", SIMPLE, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", NOTES, LEVEL_MAIN },
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "GENRE:MARC|book", ALWAYS, LEVEL_MAIN },
- { " ", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups manuscript[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "AUTHOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE", TITLE, LEVEL_MAIN },
- { "%B", "TITLE", TITLE, LEVEL_HOST }, /* COLLECTION_TITLE */
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%N", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "%P", "PAGES", PAGES, LEVEL_MAIN },
- { "%8", "DATE:MONTH", DATE, LEVEL_MAIN },
- { "%9", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", NOTES, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:BIBUTILS|manuscript", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups communication[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "AUTHOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE" , TITLE, LEVEL_MAIN },
- { "%E", "ADDRESSEE", PERSON, LEVEL_MAIN },
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%V", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "%8", "DATE:MONTH", DATE, LEVEL_MAIN },
- { "%9", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", NOTES, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "GENRE:BIBUTILS|communication", ALWAYS, LEVEL_MAIN}
-};
-
-static lookups proceedings[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "AUTHOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_HOST },
- { "%T", "TITLE" , TITLE, LEVEL_MAIN },
- { "%E", "EDITOR", PERSON, LEVEL_MAIN },
- { "%B", "TITLE", SIMPLE, LEVEL_HOST },
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN },
- { "%6", "NUMVOLUMES", SIMPLE, LEVEL_HOST },
- { "%N", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "%P", "PAGES", PAGES, LEVEL_MAIN },
- { "%Y", "EDITOR", PERSON, LEVEL_SERIES },
- { "%S", "TITLE", TITLE, LEVEL_SERIES },
- { "%7", "EDITION", SIMPLE, LEVEL_HOST },
- { "%8", "DATE:MONTH", DATE, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", NOTES, LEVEL_MAIN },
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|conference publication", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups conferencepaper[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "AUTHOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "PARTDATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE" , TITLE, LEVEL_MAIN },
- { "%J", "TITLE", TITLE, LEVEL_HOST }, /* journal title */
- { "%B", "TITLE", TITLE, LEVEL_HOST }, /* journal title */
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN },
- { "%N", "ISSUE", SIMPLE, LEVEL_MAIN },
- { "%P", "PAGES", PAGES, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_HOST },
- { "%8", "PARTDATE:MONTH", DATE, LEVEL_MAIN },
- { "%9", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%@", "SERIALNUMBER", SERIALNO, LEVEL_HOST },
- { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */
- { "%)", "REPRINTEDITION", SIMPLE, LEVEL_MAIN },
- { "%*", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%Z", "NOTES", NOTES, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|conference publication", ALWAYS, LEVEL_HOST }
-};
-
-static lookups thesis[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "AUTHOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE" , TITLE, LEVEL_MAIN },
- { "%B", "ACADEMIC_DEPARTMENT", SIMPLE, LEVEL_MAIN },
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "%V", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "%P", "PAGES:TOTAL", PAGES, LEVEL_MAIN },
- { "%9", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN }, /* thesis type */
- { "%8", "DATE:MONTH", DATE, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", NOTES, LEVEL_MAIN },
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|thesis", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups program[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "AUTHOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE", TITLE, LEVEL_MAIN },
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "%7", "VERSION", SIMPLE, LEVEL_MAIN },
- { "%9", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", SIMPLE, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", SIMPLE, LEVEL_MAIN },
- { "%1", "COMPUTER", SIMPLE, LEVEL_MAIN },
- { "%2", "CUSTOM2", SIMPLE, LEVEL_MAIN },
- { "%3", "CUSTOM3", SIMPLE, LEVEL_MAIN },
- { "%4", "CUSTOM4", SIMPLE, LEVEL_MAIN },
- { "%#", "CUSTOM5", SIMPLE, LEVEL_MAIN },
- { "%$", "CUSTOM6", SIMPLE, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "RESOURCE|software, multimedia", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups audiovisual[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "WRITER", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE" , TITLE, LEVEL_MAIN },
- { "%B", "TITLE", TITLE, LEVEL_HOST }, /* COLLECTION_TITLE */
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "%V", "EXTENTOFWORK", SIMPLE, LEVEL_MAIN },
- { "%N", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "%8", "DATE:MONTH", DATE, LEVEL_MAIN },
- { "%9", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "%?", "PERFORMER", PERSON, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", NOTES, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "RESOURCE|mixed material", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups broadcast[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "AUTHOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE" , TITLE, LEVEL_MAIN },
- { "%E", "DIRECTOR", PERSON, LEVEL_MAIN },
- { "%B", "TITLE", TITLE, LEVEL_HOST }, /* SERIES_TITLE */
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "%Y", "PRODUCER", PERSON, LEVEL_MAIN },
- { "%8", "DATE:MONTH", DATE, LEVEL_MAIN },
- { "%9", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%@", "SERIALNUMBER", SERIALNO, LEVEL_MAIN },
- { "%?", "PERFORMER", PERSON, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", SIMPLE, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "RESOURCE|moving image", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|motion picture", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:BIBUTILS|television broadcast", ALWAYS, LEVEL_MAIN },
-};
-
-static lookups electronic[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "AUTHOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE", TITLE, LEVEL_MAIN },
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "%V", "ACCESS_YEAR", SIMPLE, LEVEL_MAIN },
- { "%N", "ACCESS_DATE", DATE, LEVEL_MAIN },
- { "%7", "EDITION", SIMPLE, LEVEL_MAIN },
- { "%8", "UPDATE_DATE", DATE, LEVEL_MAIN },
- { "%9", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%V", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "%Z", "NOTES", NOTES, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "RESOURCE|software, multimedia", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|electronic", ALWAYS, LEVEL_MAIN },
-};
-
-static lookups webpage[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "AUTHOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE" , TITLE, LEVEL_MAIN },
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "%V", "ACCESS_YEAR", SIMPLE, LEVEL_MAIN },
- { "%N", "ACCESS_DATE", DATE, LEVEL_MAIN },
- { "%7", "EDITION", SIMPLE, LEVEL_MAIN },
- { "%8", "UPDATE_DATE", DATE, LEVEL_MAIN },
- { "%9", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%V", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "%Z", "NOTES", NOTES, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "RESOURCE|software, multimedia", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|web page", ALWAYS, LEVEL_MAIN },
-};
-
-static lookups artwork[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "ARTIST", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE" , TITLE, LEVEL_MAIN },
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "%8", "DATE:MONTH", DATE, LEVEL_MAIN },
- { "%9", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", NOTES, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "GENRE:MARC|art original", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups report[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "AUTHOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE" , TITLE, LEVEL_MAIN },
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "%P", "PAGES", PAGES, LEVEL_MAIN },
- { "%8", "DATE:MONTH", DATE, LEVEL_MAIN },
- { "%9", "GENRE:UKNOWN", GENRE, LEVEL_MAIN },
- { "%N", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "%@", "SERIALNUMBER", SERIALNO, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", NOTES, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|technical report", ALWAYS, LEVEL_MAIN },
-};
-
-static lookups map[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "CARTOGRAPHER", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE" , TITLE, LEVEL_MAIN },
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "%7", "EDITION", SIMPLE, LEVEL_MAIN },
- { "%9", "GENRE:UKNOWN", GENRE, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", SIMPLE, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", SIMPLE, LEVEL_MAIN },
- { "%1", "SCALE", SIMPLE, LEVEL_MAIN },
- { "%2", "CUSTOM2", SIMPLE, LEVEL_MAIN },
- { "%3", "CUSTOM3", SIMPLE, LEVEL_MAIN },
- { "%4", "CUSTOM4", SIMPLE, LEVEL_MAIN },
- { "%#", "CUSTOM5", SIMPLE, LEVEL_MAIN },
- { "%$", "CUSTOM6", SIMPLE, LEVEL_MAIN },
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "RESOURCE|cartographic", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|map", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups patent[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "AUTHOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE" , TITLE, LEVEL_MAIN },
- { "%B", "PUBLISHED_SOURCE",SIMPLE, LEVEL_MAIN },
- { "%C", "COUNTRY", SIMPLE, LEVEL_MAIN },
- { "%I", "ASSIGNEE", SIMPLE, LEVEL_MAIN },
- { "%V", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "%N", "ISSUE", SIMPLE, LEVEL_MAIN },
- { "%P", "PAGES", SIMPLE, LEVEL_MAIN },
- { "%@", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", SIMPLE, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", SIMPLE, LEVEL_MAIN },
- { "%1", "SCALE", SIMPLE, LEVEL_MAIN },
- { "%2", "CUSTOM2", SIMPLE, LEVEL_MAIN },
- { "%3", "CUSTOM3", SIMPLE, LEVEL_MAIN },
- { "%4", "CUSTOM4", SIMPLE, LEVEL_MAIN },
- { "%#", "CUSTOM5", SIMPLE, LEVEL_MAIN },
- { "%$", "CUSTOM6", SIMPLE, LEVEL_MAIN },
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|patent", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups hearing[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE", TITLE, LEVEL_MAIN },
- { "%B", "COMMITTEE:CORP", SIMPLE, LEVEL_MAIN },
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "%6", "NUMVOLUMES", SIMPLE, LEVEL_MAIN },
- { "%N", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "%P", "PAGES:TOTAL", PAGES, LEVEL_MAIN },
- { "%S", "LEGISLATIVEBODY:CORP", SIMPLE, LEVEL_MAIN },
- { "%7", "SESSION", SIMPLE, LEVEL_MAIN },
- { "%8", "DATE:MONTH", DATE, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* orig publication */
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", NOTES, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%9", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "GENRE:BIBUTILS|hearing",ALWAYS, LEVEL_MAIN }
-};
-
-static lookups bill[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE", TITLE, LEVEL_MAIN },
- { "%B", "CODE", SIMPLE, LEVEL_MAIN },
- { "%V", "CODEVOLUME", SIMPLE, LEVEL_MAIN },
- { "%N", "BILLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%P", "CODEPAGES", SIMPLE, LEVEL_MAIN },
- { "%&", "CODESECTION", SIMPLE, LEVEL_MAIN },
- { "%S", "LEGISLATIVEBODY:CORP", SIMPLE, LEVEL_MAIN },
- { "%7", "SESSION", SIMPLE, LEVEL_MAIN },
- { "%8", "DATE:MONTH", DATE, LEVEL_MAIN },
- { "%?", "SPONSOR", PERSON, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", NOTES, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|legislation", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups statute[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE", TITLE, LEVEL_MAIN },
- { "%B", "CODE", SIMPLE, LEVEL_MAIN },
- { "%V", "CODENUMBER", SIMPLE, LEVEL_MAIN },
- { "%N", "PUBLICLAWNUMBER", SIMPLE, LEVEL_MAIN },
- { "%P", "PAGES", PAGES, LEVEL_MAIN },
- { "%&", "SECTION", SIMPLE, LEVEL_MAIN },
- { "%7", "SESSION", SIMPLE, LEVEL_MAIN },
- { "%8", "DATE:MONTH", DATE, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", NOTES, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|legislation", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups lawcase[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE", TITLE, LEVEL_MAIN },
- { "%E", "REPORTER", TITLE, LEVEL_HOST }, /*Reporter is name of book*/
- { "%B", "CODE", SIMPLE, LEVEL_MAIN },
- { "%I", "COURT:CORP", SIMPLE, LEVEL_MAIN },
- { "%V", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "%N", "PUBLICLAWNUMBER", SIMPLE, LEVEL_MAIN },
- { "%P", "STARTPAGE", SIMPLE, LEVEL_MAIN },
- { "%8", "DATE:MONTH", DATE, LEVEL_MAIN },
- { "%?", "COUNSEL", PERSON, LEVEL_MAIN },
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", NOTES, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|legal case and case notes", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups chart[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "AUTHOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE", TITLE, LEVEL_MAIN },
- { "%J", "TITLE", TITLE, LEVEL_HOST }, /* for refer formats */
- { "%E", "2ND_AUTHOR", PERSON, LEVEL_MAIN },
- { "%B", "2ND_TITLE", SIMPLE, LEVEL_MAIN },
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "%V", "VOLUME" , SIMPLE, LEVEL_MAIN },
- { "%6", "NUMVOLUMES", SIMPLE, LEVEL_HOST },
- { "%N", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "%P", "PAGES", PAGES, LEVEL_MAIN },
- { "%&", "SECTION", SIMPLE, LEVEL_MAIN },
- { "%Y", "AUTHOR", PERSON, LEVEL_SERIES },
- { "%S", "TITLE", TITLE, LEVEL_SERIES },
- { "%7", "EDITION", SIMPLE, LEVEL_MAIN },
- { "%8", "DATE:MONTH", DATE, LEVEL_MAIN },
- { "%9", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "%?", "SUB_AUTHOR", PERSON, LEVEL_MAIN }, /* subsidiary-authors */
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%@", "SERIALNUMBER", SERIALNO, LEVEL_MAIN },
- { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */
- { "%)", "REPRINTEDITION", SIMPLE, LEVEL_MAIN },
- { "%*", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%Z", "NOTES", NOTES, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { " ", "GENRE:MARC|chart", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups unpublished[] = {
- { "%0", "INTERNAL_TYPE", TYPE, LEVEL_MAIN },
- { "%A", "AUTHOR", PERSON, LEVEL_MAIN },
- { "%H", "TRANSLATOR", PERSON, LEVEL_MAIN },
- { "%Q", "TRANSLATEDTITLE", SIMPLE, LEVEL_MAIN },
- { "%D", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "%T", "TITLE", TITLE, LEVEL_MAIN },
- { "%J", "TITLE", TITLE, LEVEL_HOST }, /* for refer formats */
- { "%E", "2ND_AUTHOR", PERSON, LEVEL_MAIN },
- { "%B", "2ND_TITLE", SIMPLE, LEVEL_MAIN },
- { "%C", "ADDRESS", SIMPLE, LEVEL_MAIN },
- { "%I", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "%V", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "%6", "NUMVOLUMES", SIMPLE, LEVEL_HOST },
- { "%N", "NUMBER", SIMPLE, LEVEL_MAIN },
- { "%P", "PAGES", PAGES, LEVEL_MAIN },
- { "%&", "SECTION", SIMPLE, LEVEL_MAIN },
- { "%Y", "AUTHOR", PERSON, LEVEL_SERIES },
- { "%S", "TITLE", TITLE, LEVEL_SERIES },
- { "%7", "EDITION", SIMPLE, LEVEL_MAIN },
- { "%8", "DATE:MONTH", DATE, LEVEL_MAIN },
- { "%9", "GENRE:UNKNOWN", GENRE, LEVEL_MAIN },
- { "%?", "SUB_AUTHOR", PERSON, LEVEL_MAIN }, /* subsidiary-authors */
- { "%!", "SHORTTITLE", TITLE, LEVEL_MAIN },
- { "%@", "SERIALNUMBER", SERIALNO, LEVEL_MAIN },
- { "%(", "TITLE", SIMPLE, LEVEL_ORIG }, /* original pub */
- { "%)", "REPRINTEDITION", SIMPLE, LEVEL_MAIN },
- { "%*", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN },
- { "%1", "CUSTOM1", NOTES, LEVEL_MAIN },
- { "%2", "CUSTOM2", NOTES, LEVEL_MAIN },
- { "%3", "CUSTOM3", NOTES, LEVEL_MAIN },
- { "%4", "CUSTOM4", NOTES, LEVEL_MAIN },
- { "%#", "CUSTOM5", NOTES, LEVEL_MAIN },
- { "%$", "CUSTOM6", NOTES, LEVEL_MAIN },
- { "%M", "ACCESSNUM", SIMPLE, LEVEL_MAIN },
- { "%L", "CALLNUMBER", SIMPLE, LEVEL_MAIN },
- { "%F", "REFNUM", SIMPLE, LEVEL_MAIN },
- { "%K", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "%X", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "%O", "NOTES", NOTES, LEVEL_MAIN },
- { "%U", "URL", URL, LEVEL_MAIN },
- { "%>", "PDFLINK", SIMPLE, LEVEL_MAIN },
- { "%Z", "NOTES", NOTES, LEVEL_MAIN },
- { "%W", "PHYSICALLOC", SIMPLE, LEVEL_MAIN }, /* physical location */
- { "%G", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "%+", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "%^", "CAPTION", SIMPLE, LEVEL_MAIN },
- { "%[", "ACCESSDATE", SIMPLE, LEVEL_MAIN },
- { "%=", "LASTMODDATE", SIMPLE, LEVEL_MAIN },
- { "%~", "DATABASE", SIMPLE, LEVEL_MAIN },
- { " ", "INTERNAL_TYPE|BOOK", ALWAYS, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:BIBUTILS|unpublished", ALWAYS, LEVEL_MAIN },
-};
-
-
-/* order is important....."Book" matches "Book" and "Book Section", hence
- * "Book Section must come first */
-
-#define ORIG(a) ( &(a[0]) )
-#define SIZE(a) ( sizeof( a ) / sizeof( lookups ) )
-#define REFTYPE(a,b) { a, ORIG(b), SIZE(b) }
-
-variants end_all[] = {
- REFTYPE( "Generic", generic ),
- REFTYPE( "Artwork", artwork ),
- REFTYPE( "Audiovisual Material", audiovisual ),
- REFTYPE( "Bill", bill ),
- REFTYPE( "Book Section", booksection ),
- REFTYPE( "Book", book ),
- REFTYPE( "Case", lawcase ),
- REFTYPE( "Chart or Table", chart ),
- REFTYPE( "Classical Work", generic ),
- REFTYPE( "Computer Program", program ),
- REFTYPE( "Conference Paper", conferencepaper ),
- REFTYPE( "Conference Proceeding", proceedings ),
- REFTYPE( "Edited Book", editedbook ),
-/* REFTYPE( "Equation", equation ), */
-/* REFTYPE( "Electronic Article", electronicarticle ), */
-/* REFTYPE( "Electronic Book", electronicbook ), */
-/* REFTYPE( "Figure", figure ), */
- REFTYPE( "Film or Broadcast", broadcast ),
- REFTYPE( "Electronic Source", electronic ),
-/* REFTYPE( "Government Document", governmentdocument ), */
- REFTYPE( "Hearing", hearing ),
- REFTYPE( "Journal Article", journalarticle ),
-/* REFTYPE( "Legal Rule/Regulation", legalrule ), */
- REFTYPE( "Magazine Article", magazinearticle ),
- REFTYPE( "Manuscript", manuscript ),
- REFTYPE( "Map", map ),
- REFTYPE( "Newspaper Article", newspaperarticle ),
-/* REFTYPE( "Online Database", onlinedatabase ), */
-/* REFTYPE( "Online Multimedia", onlinemultimedia ), */
- REFTYPE( "Patent", patent ),
- REFTYPE( "Personal Communication", communication ),
- REFTYPE( "Report", report ),
- REFTYPE( "Statute", statute ),
- REFTYPE( "Thesis", thesis ),
- REFTYPE( "Unpublished Work", unpublished ),
- REFTYPE( "Web Page", webpage ),
-};
-
-
-int end_nall = sizeof( end_all ) / sizeof( variants );
-
-
diff --git a/support/texlab/crates/bibutils_sys/src/endxmlin.c b/support/texlab/crates/bibutils_sys/src/endxmlin.c
deleted file mode 100644
index 3074e1255a..0000000000
--- a/support/texlab/crates/bibutils_sys/src/endxmlin.c
+++ /dev/null
@@ -1,587 +0,0 @@
-/*
- * endxmlin.c
- *
- * Copyright (c) Chris Putnam 2006-2019
- *
- * Program and source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include "str.h"
-#include "str_conv.h"
-#include "fields.h"
-#include "name.h"
-#include "xml.h"
-#include "xml_encoding.h"
-#include "reftypes.h"
-#include "bibformats.h"
-
-typedef struct {
- char *attrib;
- char *internal;
-} attribs;
-
-extern variants end_all[];
-extern int end_nall;
-
-static int endxmlin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset );
-static int endxmlin_processf( fields *endin, const char *p, const char *filename, long nref, param *pm );
-extern int endin_typef( fields *endin, const char *filename, int nrefs, param *p );
-extern int endin_convertf( fields *endin, fields *info, int reftype, param *p );
-extern int endin_cleanf( bibl *bin, param *p );
-
-
-/*****************************************************
- PUBLIC: void endxmlin_initparams()
-*****************************************************/
-int
-endxmlin_initparams( param *pm, const char *progname )
-{
- pm->readformat = BIBL_ENDNOTEXMLIN;
- pm->charsetin = BIBL_CHARSET_DEFAULT;
- pm->charsetin_src = BIBL_SRC_DEFAULT;
- pm->latexin = 0;
- pm->xmlin = 1;
- pm->utf8in = 1;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->output_raw = 0;
-
- pm->readf = endxmlin_readf;
- pm->processf = endxmlin_processf;
- pm->cleanf = NULL;
- pm->typef = endin_typef;
- pm->convertf = endin_convertf;
- pm->all = end_all;
- pm->nall = end_nall;
-
- slist_init( &(pm->asis) );
- slist_init( &(pm->corps) );
-
- if ( !progname ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int endxmlin_readf()
-*****************************************************/
-
-static int
-xml_readmore( FILE *fp, char *buf, int bufsize, int *bufpos )
-{
- if ( !feof( fp ) && fgets( buf, bufsize, fp ) ) return 0;
- return 1;
-}
-
-static int
-endxmlin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset )
-{
- int haveref = 0, inref = 0, done = 0, file_charset = CHARSET_UNKNOWN, m;
- char *startptr = NULL, *endptr = NULL;
- str tmp;
-
- str_init( &tmp );
-
- while ( !haveref && !done ) {
-
- if ( !line->data ) {
- done = xml_readmore( fp, buf, bufsize, bufpos );
- str_strcatc( line, buf );
- }
-
- if ( !inref ) {
- startptr = xml_find_start( line->data, "RECORD" );
- if ( startptr ) inref = 1;
- }
- else endptr = xml_find_end( line->data, "RECORD" );
-
- /* If no <record> tag, we can trim up to last 8 bytes */
- /* Emptying string can lose fragments of <record> tag */
- if ( !startptr ) {
- if ( line->len > 8 ) {
- int n = 8;
- char *p = &(line->data[line->len-1]);
- while ( *p && n ) { p--; n--; }
- str_segdel( line, line->data, p );
- }
- }
-
- /* ...entire reference is not in line, read more */
- if ( !startptr || !endptr ) {
- done = xml_readmore( fp, buf, bufsize, bufpos );
- str_strcatc( line, buf );
- }
- /* ...we can reallocate in str_strcat; must re-find the tags */
- else {
- startptr = xml_find_start( line->data, "RECORD" );
- endptr = xml_find_end( line->data, "RECORD" );
- str_segcpy( reference, startptr, endptr );
- /* clear out information in line */
- str_strcpyc( &tmp, endptr );
- str_strcpy( line, &tmp );
- haveref = 1;
- }
-
- m = xml_getencoding( line );
- if ( m!=CHARSET_UNKNOWN ) file_charset = m;
-
- }
-
- str_free( &tmp );
- *fcharset = file_charset;
-
- return haveref;
-}
-
-/*****************************************************
- PUBLIC: int endxmlin_processf()
-*****************************************************/
-
-/*
- * add data to fields
- */
-
-/*
- * handle fields with (potentially) several style pieces
- *
- * <datatype>
- * <style>aaaaa</style>
- * </datatype>
- *
- * <datatype>aaaaaa</datatype>
- *
- * <datatype>
- * <style>aaa</style><style>aaaa</style>
- * </datatype>
- */
-static int
-endxmlin_datar( xml *node, str *s )
-{
- int status;
-
- if ( xml_has_value( node ) ) {
- str_strcat( s, &(node->value) );
- if ( str_memerr( s ) ) return BIBL_ERR_MEMERR;
- }
- if ( node->down && xml_tag_matches( node->down, "style" ) ) {
- status = endxmlin_datar( node->down, s );
- if ( status!=BIBL_OK ) return status;
- }
- if ( xml_tag_matches( node, "style" ) && node->next ) {
- status = endxmlin_datar( node->next, s );
- if ( status!=BIBL_OK ) return status;
- }
-
- return BIBL_OK;
-}
-
-static int
-endxmlin_data( xml *node, char *inttag, fields *info, int level )
-{
- int status;
- str s;
-
- str_init( &s );
-
- status = endxmlin_datar( node, &s );
- if ( status!=BIBL_OK ) return status;
-
- if ( str_has_value( &s ) ) {
- status = fields_add( info, inttag, s.data, level );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
-
- str_free( &s );
- return BIBL_OK;
-}
-
-/* <titles>
- * <title>
- * <style>ACTUAL TITLE HERE</style><style>MORE TITLE</style>
- * </title>
- * </titles>
- */
-static int
-endxmlin_titles( xml *node, fields *info )
-{
- attribs a[] = {
- { "title", "%T" },
- { "secondary-title", "%B" },
- { "tertiary-title", "%S" },
- { "alt-title", "%!" },
- { "short-title", "SHORTTITLE" },
- };
- int i, status, n = sizeof( a ) / sizeof ( a[0] );
- str title;
- str_init( &title );
- for ( i=0; i<n; ++i ) {
- if ( xml_tag_matches( node, a[i].attrib ) && node->down ) {
- str_empty( &title );
- status = endxmlin_datar( node, &title );
- if ( status!=BIBL_OK ) return BIBL_ERR_MEMERR;
- str_trimstartingws( &title );
- str_trimendingws( &title );
- status = fields_add( info, a[i].internal, title.data, 0);
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- }
- if ( node->next ) {
- status = endxmlin_titles( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
- str_free( &title );
- return BIBL_OK;
-}
-
-/* <contributors>
- * <secondary-authors>
- * <author>
- * <style>ACTUAL AUTHORS HERE</style>
- * </author>
- * </secondary-authors>
- * </contributors>
- */
-/* <!ATTLIST author
- * corp-name CDATA #IMPLIED
- * first-name CDATA #IMPLIED
- * initials CDATA #IMPLIED
- * last-name CDATA #IMPLIED
- * middle-initial CDATA #IMPLIED
- * role CDATA #IMPLIED
- * salutation CDATA #IMPLIED
- * suffix CDATA #IMPLIED
- * title CDATA #IMPLIED
- * >
- *
- */
-static int
-endxmlin_contributor( xml *node, fields *info, char *int_tag, int level )
-{
- int status;
- status = endxmlin_data( node, int_tag, info, level );
- if ( status!=BIBL_OK ) return status;
- if ( node->next ) {
- status = endxmlin_contributor( node->next, info, int_tag, level );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-static int
-endxmlin_contributors( xml *node, fields *info )
-{
- attribs a[] = {
- { "authors", "%A" },
- { "secondary-authors", "%E" },
- { "tertiary-authors", "%Y" },
- { "subsidiary-authors", "%?" },
- { "translated-authors", "%?" },
- };
- int i, status, n = sizeof( a ) / sizeof ( a[0] );
- for ( i=0; i<n; ++i ) {
- if ( xml_tag_matches( node, a[i].attrib ) && node->down ) {
- status = endxmlin_contributor( node->down, info, a[i].internal, 0 );
- if ( status!=BIBL_OK ) return status;
- }
- }
- if ( node->next ) {
- status = endxmlin_contributors( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-static int
-endxmlin_keyword( xml *node, fields *info )
-{
- int status;
- if ( xml_tag_matches( node, "keyword" ) ) {
- status = endxmlin_data( node, "%K", info, 0 );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) {
- status = endxmlin_keyword( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-static int
-endxmlin_keywords( xml *node, fields *info )
-{
- if ( node->down && xml_tag_matches( node->down, "keyword" ) )
- return endxmlin_keyword( node->down, info );
- return BIBL_OK;
-}
-
-/*
- *<electronic-resource-num><style face="normal" font="default"
- * size="100%">10.1007/BF00356334</style></electronic-resource-num>
- */
-static int
-endxmlin_ern( xml *node, fields *info )
-{
- if ( xml_tag_matches( node, "electronic-resource-num" ) )
- return endxmlin_data( node, "DOI", info, 0 );
- return BIBL_OK;
-}
-
-static int
-endxmlin_language( xml *node, fields *info )
-{
- if ( xml_tag_matches( node, "language" ) )
- return endxmlin_data( node, "%G", info, 0 );
- return BIBL_OK;
-}
-
-/*
- * <urls>
- * <pdf-urls>
- * <url>internal-pdf://Zukin_1995_The_Cultures_of_Cities-0000551425/Zukin_1995_The_Cultures_of_Cities.pdf</url>
- * </pdf-urls>
- * </urls>
- */
-static int
-endxmlin_fileattach( xml *node, fields *info )
-{
- int status;
- if ( xml_tag_matches( node, "url" ) ) {
- status = endxmlin_data( node, "FILEATTACH", info, 0 );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->down ) {
- status = endxmlin_fileattach( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) {
- status = endxmlin_fileattach( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-static int
-endxmlin_urls( xml *node, fields *info )
-{
- int status;
- if ( xml_tag_matches( node, "pdf-urls" ) && node->down ) {
- status = endxmlin_fileattach( node->down, info );
- if ( status!=BIBL_OK ) return status;
- } else if ( xml_tag_matches( node, "url" ) ) {
- status = endxmlin_data( node, "%U", info, 0 );
- if ( status!=BIBL_OK ) return status;
- } else {
- if ( node->down ) {
- if ( xml_tag_matches( node->down, "related-urls" ) ||
- xml_tag_matches( node->down, "pdf-urls" ) ||
- xml_tag_matches( node->down, "url" ) ) {
- status = endxmlin_urls( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- }
- }
- if ( node->next ) {
- status = endxmlin_urls( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-static int
-endxmlin_pubdates( xml *node, fields *info )
-{
- if ( xml_tag_matches( node, "date" ) )
- return endxmlin_data( node, "%8", info, 0 );
- else {
- if ( node->down && xml_tag_matches( node->down, "date" ) )
- return endxmlin_pubdates( node->down, info );
- }
- return BIBL_OK;
-}
-
-static int
-endxmlin_dates( xml *node, fields *info )
-{
- int status;
- if ( xml_tag_matches( node, "year" ) ) {
- status = endxmlin_data( node, "%D", info, 0 );
- if ( status!=BIBL_OK ) return status;
- } else {
- if ( node->down ) {
- if ( xml_tag_matches( node->down, "year" ) ) {
- status = endxmlin_dates( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- if ( xml_tag_matches( node->down, "pub-dates" ) ) {
- status = endxmlin_pubdates( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- }
- }
- if ( node->next ) {
- status = endxmlin_dates( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-/*
- * <ref-type name="Journal Article">17</ref-type>
- */
-static int
-endxmlin_reftype( xml *node, fields *info )
-{
- int status;
- str *s;
-
- s = xml_attribute( node, "name" );
- if ( str_has_value( s ) ) {
- status = fields_add( info, "%0", str_cstr( s ), 0 );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
-
- return BIBL_OK;
-}
-
-static int
-endxmlin_record( xml *node, fields *info )
-{
- attribs a[] = {
- { "volume", "%V" },
- { "num-vol", "%6" },
- { "pages", "%P" },
- { "number", "%N" },
- { "issue", "%N" },
- { "label", "%F" },
- { "auth-address", "%C" },
- { "auth-affiliation", "%C" },
- { "pub-location", "%C" },
- { "publisher", "%I" },
- { "abstract", "%X" },
- { "edition", "%7" },
- { "reprint-edition", "%)" },
- { "section", "%&" },
- { "accession-num", "%M" },
- { "call-num", "%L" },
- { "isbn", "%@" },
- { "notes", "%O" },
- { "custom1", "%1" },
- { "custom2", "%2" },
- { "custom3", "%3" },
- { "custom4", "%4" },
- { "custom5", "%#" },
- { "custom6", "%$" },
- };
- int i, status, n = sizeof ( a ) / sizeof( a[0] );
- if ( xml_tag_matches( node, "DATABASE" ) ) {
- } else if ( xml_tag_matches( node, "SOURCE-APP" ) ) {
- } else if ( xml_tag_matches( node, "REC-NUMBER" ) ) {
- } else if ( xml_tag_matches( node, "ref-type" ) ) {
- status = endxmlin_reftype( node, info );
- if ( status!=BIBL_OK ) return status;
- } else if ( xml_tag_matches( node, "contributors" ) ) {
- if ( node->down ) {
- status = endxmlin_contributors( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- } else if ( xml_tag_matches( node, "titles" ) ) {
- if ( node->down ) endxmlin_titles( node->down, info );
- } else if ( xml_tag_matches( node, "keywords" ) ) {
- status = endxmlin_keywords( node, info );
- if ( status!=BIBL_OK ) return status;
- } else if ( xml_tag_matches( node, "urls" ) ) {
- status = endxmlin_urls( node, info );
- if ( status!=BIBL_OK ) return status;
- } else if ( xml_tag_matches( node, "electronic-resource-num" ) ) {
- status = endxmlin_ern( node, info );
- if ( status!=BIBL_OK ) return status;
- } else if ( xml_tag_matches( node, "dates" ) ) {
- status = endxmlin_dates( node, info );
- if ( status!=BIBL_OK ) return status;
- } else if ( xml_tag_matches( node, "language" ) ) {
- status = endxmlin_language( node, info );
- if ( status!=BIBL_OK ) return status;
- } else if ( xml_tag_matches( node, "periodical" ) ) {
- } else if ( xml_tag_matches( node, "secondary-volume" ) ) {
- } else if ( xml_tag_matches( node, "secondary-issue" ) ) {
- } else if ( xml_tag_matches( node, "reprint-status" ) ) {
- } else if ( xml_tag_matches( node, "orig-pub" ) ) {
- } else if ( xml_tag_matches( node, "report-id" ) ) {
- } else if ( xml_tag_matches( node, "coden" ) ) {
- } else if ( xml_tag_matches( node, "caption" ) ) {
- } else if ( xml_tag_matches( node, "research-notes" ) ) {
- } else if ( xml_tag_matches( node, "work-type" ) ) {
- } else if ( xml_tag_matches( node, "reviewed-item" ) ) {
- } else if ( xml_tag_matches( node, "availability" ) ) {
- } else if ( xml_tag_matches( node, "remote-source" ) ) {
- } else if ( xml_tag_matches( node, "meeting-place" ) ) {
- } else if ( xml_tag_matches( node, "work-location" ) ) {
- } else if ( xml_tag_matches( node, "work-extent" ) ) {
- } else if ( xml_tag_matches( node, "pack-method" ) ) {
- } else if ( xml_tag_matches( node, "size" ) ) {
- } else if ( xml_tag_matches( node, "repro-ratio" ) ) {
- } else if ( xml_tag_matches( node, "remote-database-name" ) ) {
- } else if ( xml_tag_matches( node, "remote-database-provider" ) ) {
- } else if ( xml_tag_matches( node, "access-date" ) ) {
- } else if ( xml_tag_matches( node, "modified-data" ) ) {
- } else if ( xml_tag_matches( node, "misc1" ) ) {
- } else if ( xml_tag_matches( node, "misc2" ) ) {
- } else if ( xml_tag_matches( node, "misc3" ) ) {
- } else {
- for ( i=0; i<n; ++i ) {
- if ( xml_tag_matches( node, a[i].attrib ) ) {
- status = endxmlin_data( node, a[i].internal, info, 0 );
- if ( status!=BIBL_OK ) return status;
- }
- }
- }
- if ( node->next ) {
- status = endxmlin_record( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-static int
-endxmlin_assembleref( xml *node, fields *info )
-{
- int status;
- if ( str_is_empty( &(node->tag) ) ) {
- if ( node->down )
- return endxmlin_assembleref( node->down, info );
- } else if ( xml_tag_matches( node, "RECORD" ) ) {
- if ( node->down ) {
- status = endxmlin_record( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- }
- return BIBL_OK;
-}
-
-/* endxmlin_processf first operates by converting to endnote input
- * the endnote->mods conversion happens in convertf.
- *
- * this is necessary as the xml format is as nasty and as overloaded
- * as the tags used in the Refer format output
- */
-static int
-endxmlin_processf( fields *fin, const char *data, const char *filename, long nref, param *pm )
-{
- int status;
- xml top;
-
- xml_init( &top );
- xml_parse( data, &top );
- status = endxmlin_assembleref( &top, fin );
- xml_free( &top );
-
- if ( status==BIBL_OK ) return 1;
- return 0;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/entities.c b/support/texlab/crates/bibutils_sys/src/entities.c
deleted file mode 100644
index 5d9642e9d4..0000000000
--- a/support/texlab/crates/bibutils_sys/src/entities.c
+++ /dev/null
@@ -1,406 +0,0 @@
-/*
- * entities.c
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include "entities.h"
-#include "msvc_fix.h"
-
-/* HTML 4.0 entities */
-
-typedef struct entities {
- char html[20];
- unsigned int unicode;
-} entities;
-
-entities html_entities[] = {
- /* Special Entities */
- { "&quot;", 34 }, /* quotation mark */
- { "&amp;", 38 }, /* ampersand */
- { "&apos;", 39 }, /* apostrophe (note not defined in HTML) */
- { "&lpar;", 40 }, /* left parenthesis */
- { "&rpar;", 41 }, /* right parenthesis */
- { "&hyphen;", 45 }, /* hyphen */
- { "&lt;", 60 }, /* less-than sign */
- { "&gt;", 62 }, /* greater-than sign */
- { "&quest;", 63 }, /* question mark */
- { "&OElig;", 338 }, /* Latin cap ligature OE */
- { "&oelig;", 339 }, /* Latin small ligature OE */
- { "&Scaron;", 352 }, /* Latin cap S with caron */
- { "&scaron;", 353 }, /* Latin cap S with caron */
- { "&Yuml;", 376 }, /* Latin cap y with diaeresis */
- { "&circ;", 710 }, /* modifier letter circumflex */
- { "&tilde;", 732 }, /* small tilde */
- { "&ensp;", 8194 }, /* en space */
- { "&emsp;", 8195 }, /* em space */
- { "&thinsp;", 8201 }, /* thin space */
- { "&zwnj;", 8204 }, /* zero width non-joiner */
- { "&zwj;", 8205 }, /* zero width joiner */
- { "&lrm;", 8206 }, /* left-to-right mark */
- { "&rlm;", 8207 }, /* right-to-left mark */
- { "&ndash;", 8211 }, /* en dash */
- { "&mdash;", 8212 }, /* em dash */
- { "&lsquo;", 8216 }, /* left single quotation mark */
- { "&rsquo;", 8217 }, /* right single quot. mark */
- { "&sbquo;", 8218 }, /* single low-9 quot. mark */
- { "&ldquo;", 8220 }, /* left double quot. mark */
- { "&rdquo;", 8221 }, /* right double quot. mark */
- { "&bdquo;", 8222 }, /* double low-9 quot. mark */
- { "&dagger;", 8224 }, /* dagger */
- { "&Dagger;", 8225 }, /* double dagger */
- { "&permil;", 8240 }, /* per mille sign */
- { "&lsaquo;", 8249 }, /* sin. left angle quot mark */
- { "&rsaquo;", 8250 }, /* sin. right angle quot mark */
- { "&euro;", 8364 }, /* euro sign */
- /* Symbols and Greek characters */
- { "&fnof;", 402 }, /* small f with hook = function */
- { "&Alpha;", 913 }, /* capital alpha */
- { "&Beta;", 914 }, /* capital beta */
- { "&Gamma;", 915 }, /* capital gamma */
- { "&Delta;", 916 }, /* capital delta */
- { "&Epsilon;", 917 }, /* capital epsilon */
- { "&Zeta;", 918 }, /* capital zeta */
- { "&Eta;", 919 }, /* capital eta */
- { "&Theta;", 920 }, /* capital theta */
- { "&Iota;", 921 }, /* capital iota */
- { "&Kappa;", 922 }, /* capital kappa */
- { "&Lambda;", 923 }, /* capital lambda */
- { "&Mu;", 924 }, /* capital mu */
- { "&Nu;", 925 }, /* capital nu */
- { "&Xi;", 926 }, /* capital xi */
- { "&Omicron;", 927 }, /* capital omicron */
- { "&Pi;", 928 }, /* capital pi */
- { "&Rho;", 929 }, /* capital rho */
- { "&Sigma;", 931 }, /* capital sigma */
- { "&Tau;", 932 }, /* capital tau */
- { "&Upsilon;", 933 }, /* capital upsilon */
- { "&Phi;", 934 }, /* capital phi */
- { "&Chi;", 935 }, /* capital chi */
- { "&Psi;", 936 }, /* capital psi */
- { "&Omega;", 937 }, /* capital omega */
- { "&alpha;", 945 }, /* small alpha */
- { "&beta;", 946 }, /* small beta */
- { "&gamma;", 947 }, /* small gamma */
- { "&delta;", 948 }, /* small delta */
- { "&epsilon;", 949 }, /* small epsilon */
- { "&zeta;", 950 }, /* small zeta */
- { "&eta;", 951 }, /* small eta */
- { "&theta;", 952 }, /* small theta */
- { "&iota;", 953 }, /* small iota */
- { "&kappa;", 954 }, /* small kappa */
- { "&lambda;", 955 }, /* small lambda */
- { "&mu;", 956 }, /* small mu */
- { "&nu;", 957 }, /* small nu */
- { "&xi;", 958 }, /* small xi */
- { "&omicron;", 959 }, /* small omicron */
- { "&pi;", 960 }, /* small pi */
- { "&rho;", 961 }, /* small rho */
- { "&sigmaf;", 962 }, /* small final sigma */
- { "&sigma;", 963 }, /* small simga */
- { "&tau;", 964 }, /* small tau */
- { "&upsilon;", 965 }, /* small upsilon */
- { "&phi;", 966 }, /* small phi */
- { "&chi;", 967 }, /* small chi */
- { "&psi;", 968 }, /* small psi */
- { "&omega;", 969 }, /* small omega */
- { "&thetasym;",977 }, /* small theta symbol */
- { "&upsih;", 978 }, /* small upsilon with hook */
- { "&piv;", 982 }, /* pi symbol */
- { "&bull;", 8226 }, /* bullet = small blk circle */
- { "&hellip;", 8230 }, /* horizontal ellipsis */
- { "&prime;", 8242 }, /* prime = minutes = feet */
- { "&Prime;", 8243 }, /* double prime */
- { "&oline;", 8254 }, /* overline */
- { "&frasl;", 8260 }, /* fraction slash */
- { "&weierp;", 8472 }, /* Weierstrass p = power set */
- { "&image;", 8465 }, /* imaginary part-black cap I */
- { "&real;", 8476 }, /* real part-black cap R */
- { "&trade;", 8482 }, /* trademark sign */
- { "&alefsym;",8501 }, /* alef symbol */
- { "&larr;", 8592 }, /* left arrow */
- { "&uarr;", 8593 }, /* up arrow */
- { "&rarr;", 8594 }, /* right arrow */
- { "&darr;", 8595 }, /* down arrow */
- { "&harr;", 8596 }, /* left/right arrow */
- { "&crarr;", 8629 }, /* down arrow with corner left */
- { "&lArr;", 8656 }, /* left double arrow */
- { "&uArr;", 8657 }, /* up double arrow */
- { "&rArr;", 8658 }, /* up double arrow */
- { "&dArr;", 8659 }, /* up double arrow */
- { "&hArr;", 8660 }, /* up double arrow */
- { "&forall;", 8704}, /* for all */
- { "&part;", 8706}, /* partial differential */
- { "&exist;", 8707}, /* there exists */
- { "&empty;", 8709}, /* empty set */
- { "&nabla;", 8711}, /* nabla=backwards difference */
- { "&isin;", 8712}, /* element of */
- { "&notin;", 8713}, /* not an element of */
- { "&ni;", 8715}, /* contains as member */
- { "&prod;", 8719}, /* n-ary product */
- { "&sum;", 8721}, /* n-ary summation */
- { "&minus;", 8722}, /* minuss sign */
- { "&lowast;", 8727}, /* asterisk operator */
- { "&radic;", 8730}, /* square root */
- { "&prop;", 8733}, /* proportional to */
- { "&infin;", 8734}, /* infinity */
- { "&ang;", 8736}, /* angle */
- { "&and;", 8743}, /* logical and */
- { "&or;", 8744}, /* logical or */
- { "&cap;", 8745}, /* intersection */
- { "&cup;", 8746}, /* union */
- { "&int;", 8747}, /* integral */
- { "&there4;", 8756}, /* therefore */
- { "&sim;", 8764}, /* tilde operator */
- { "&cong;", 8773}, /* approximately equal to */
- { "&asymp;", 8776}, /* asymptotic to */
- { "&ne;", 8800}, /* not equal to */
- { "&equiv;", 8801}, /* identical to */
- { "&le;", 8804}, /* less-than or equal to */
- { "&ge;", 8805}, /* greater-than or equal to */
- { "&sub;", 8834}, /* subset of */
- { "&sup;", 8835}, /* superset of */
- { "&nsub;", 8836}, /* not a subset of */
- { "&sube;", 8838}, /* subset of or equal to */
- { "&supe;", 8839}, /* superset of or equal to */
- { "&oplus;", 8853}, /* circled plus = direct sum */
- { "&otimes;", 8855}, /* circled times = vec prod */
- { "&perp;", 8869}, /* perpendicular */
- { "&sdot;", 8901}, /* dot operator */
- { "&lceil;", 8968}, /* left ceiling */
- { "&rceil;", 8969}, /* right ceiling */
- { "&lfloor;", 8970}, /* left floor */
- { "&rfloor;", 8971}, /* right floor */
- { "&lang;", 9001}, /* left angle bracket */
- { "&rang;", 9002}, /* right angle bracket */
- { "&loz;", 9674}, /* lozenge */
- { "&spades;", 9824}, /* spades */
- { "&clubs;", 9827}, /* clubs */
- { "&hearts;", 9829}, /* hearts */
- { "&diams;", 9830}, /* diamonds */
- /* Latin-1 */
- { "&nbsp;", 32 }, /* non-breaking space */
- { "&iexcl;", 161 }, /* inverted exclamation mark */
- { "&cent;", 162 }, /* cent sign */
- { "&pound;", 163 }, /* pound sign */
- { "&curren;", 164 }, /* currency sign */
- { "&yen;", 165 }, /* yen sign */
- { "&brvbar;", 166 }, /* broken vertical bar */
- { "&sect;", 167 }, /* section sign */
- { "&uml;", 168 }, /* diaeresis - spacing diaeresis */
- { "&copy;", 169 }, /* copyright sign */
- { "&ordf;", 170 }, /* feminine ordinal indicator */
- { "&laquo;", 171 }, /* left-pointing guillemet */
- { "&not;", 172 }, /* not sign */
- { "&shy;", 173 }, /* soft (discretionary) hyphen */
- { "&reg;", 174 }, /* registered sign */
- { "&macr;", 175 }, /* macron = overline */
- { "&deg;", 176 }, /* degree sign */
- { "&plusmn;", 177 }, /* plus-minus sign */
- { "&sup2;", 178 }, /* superscript two */
- { "&sup3;", 179 }, /* superscript three */
- { "&acute;", 180 }, /* acute accent = spacing acute */
- { "&micro;", 181 }, /* micro sign */
- { "&para;", 182 }, /* pilcrow (paragraph) sign */
- { "&middot;", 183 }, /* middle dot (georgian comma) */
- { "&cedil;", 184 }, /* cedilla = spacing cedilla */
- { "&sup1;", 185 }, /* superscript one */
- { "&ordm;", 186 }, /* masculine ordinal indicator */
- { "&raquo;", 187 }, /* right pointing guillemet */
- { "&frac14;", 188 }, /* 1/4 */
- { "&frac12;", 189 }, /* 1/2 */
- { "&frac34;", 190 }, /* 3/4 */
- { "&iquest;", 191 }, /* inverted question mark */
- { "&Agrave;", 192 }, /* cap A with grave */
- { "&Aacute;", 193 }, /* cap A with acute */
- { "&Acirc;", 194 }, /* cap A with circumflex */
- { "&Atilde;", 195 }, /* cap A with tilde */
- { "&Auml;", 196 }, /* cap A with diaeresis */
- { "&Aring;", 197 }, /* cap A with ring */
- { "&AElig;", 198 }, /* cap AE ligature */
- { "&Ccedil;", 199 }, /* cap C with cedilla */
- { "&Egrave;", 200 }, /* cap E with grave */
- { "&Eacute;", 201 }, /* cap E with acute */
- { "&Ecirc;", 202 }, /* cap E with circumflex */
- { "&Euml;", 203 }, /* cap E with diaeresis */
- { "&Igrave;", 204 }, /* cap I with grave */
- { "&Iacute;", 205 }, /* cap I with acute */
- { "&Icirc;", 206 }, /* cap I with circumflex */
- { "&Iuml;", 207 }, /* cap I with diaeresis */
- { "&ETH;", 208 }, /* cap letter ETH */
- { "&Ntilde;", 209 }, /* cap N with tilde */
- { "&Ograve;", 210 }, /* cap O with grave */
- { "&Oacute;", 211 }, /* cap O with acute */
- { "&Ocirc;", 212 }, /* cap O with circumflex */
- { "&Otilde;", 213 }, /* cap O with tilde */
- { "&Ouml;", 214 }, /* cap O with diaeresis */
- { "&times;", 215 }, /* multiplication sign */
- { "&Oslash;", 216 }, /* cap O with stroke */
- { "&Ugrave;", 217 }, /* cap U with grave */
- { "&Uacute;", 218 }, /* cap U with acute */
- { "&Ucirc;", 219 }, /* cap U with circumflex */
- { "&Uuml;", 220 }, /* cap U with diaeresis */
- { "&Yacute;", 221 }, /* cap Y with acute */
- { "&THORN;", 222 }, /* cap letter THORN */
- { "&szlig;", 223 }, /* small sharp s = ess-zed */
- { "&agrave;", 224 }, /* small a with grave */
- { "&aacute;", 225 }, /* small a with acute */
- { "&acirc;", 226 }, /* small a with cirucmflex */
- { "&atilde;", 227 }, /* small a with tilde */
- { "&amul;", 228 }, /* small a with diaeresis */
- { "&aring;", 229 }, /* small a with ring */
- { "&aelig;", 230 }, /* small ligature ae */
- { "&ccedil;", 231 }, /* small c with cedilla */
- { "&egrave;", 232 }, /* small e with grave */
- { "&eacute;", 233 }, /* small e with acute */
- { "&ecirc;", 234 }, /* small e with circumflex */
- { "&emul;", 235 }, /* small e with diaeresis */
- { "&igrave;", 236 }, /* small i with grave */
- { "&iacute;", 237 }, /* small i with acute */
- { "&icirc;", 238 }, /* small i with circumflex */
- { "&iuml;", 239 }, /* small i with diaeresis */
- { "&eth;", 240 }, /* latin small letter eth */
- { "&ntilde;", 241 }, /* small n with tilde */
- { "&ograve;", 242 }, /* small o with grave */
- { "&oacute;", 243 }, /* small o with acute */
- { "&ocirc;", 244 }, /* small o with circumflex */
- { "&otilde;", 245 }, /* small o with tilde */
- { "&ouml;", 246 }, /* small o with diaeresis */
- { "&divide;", 247 }, /* division sign */
- { "&oslash;", 248 }, /* small o with slash */
- { "&ugrave;", 249 }, /* small u with grave */
- { "&uacute;", 250 }, /* small u with acute */
- { "&ucirc;", 251 }, /* small u with circumflex */
- { "&uuml;", 252 }, /* small u with diaeresis */
- { "&yacute;", 253 }, /* small y with acute */
- { "&thorn;", 254 }, /* latin small letter thorn */
- { "&yuml;", 255 }, /* small y with diaeresis */
-};
-
-
-static unsigned int
-decode_html_entity( char *s, unsigned int *pi, int *err )
-{
- int nhtml_entities = sizeof( html_entities ) / sizeof( entities );
- char *e;
- int i, n=-1, len;
- for ( i=0; i<nhtml_entities && n==-1; ++i ) {
- e = &(html_entities[i].html[0]);
- len = strlen( e );
- if ( !strncasecmp( &(s[*pi]), e, len ) ) {
- n = i;
- *pi += len;
- }
- }
- if ( n==-1 ) {
- *err = 1;
- return '&';
- } else {
- *err = 0;
- return html_entities[n].unicode;
- }
-}
-
-
-/*
- * decode decimal entity
- *
- * extract a decimal entity from &#NNNN;
- * s[*pi] points to the '&' character
- */
-static unsigned int
-decode_decimal_entity( char *s, unsigned int *pi, int *err )
-{
- unsigned int c = 0, d;
- int i = *pi, j = 2;
- while ( isdigit( (unsigned char)s[i+j] ) ) {
- d = s[i+j] - '0';
- c = 10 * c + d;
- j++;
- }
- if ( s[i+j]!=';' ) *err = 1;
- else *pi = i+j+1;
- return c;
-}
-
-/*
- * decode hex entity
- *
- * extract a hex entity from &#xNNNN;
- * s[*pi] points to the '&' character
- */
-static unsigned int
-decode_hex_entity( char *s, unsigned int *pi, int *err )
-{
- unsigned int c = 0, d;
- int i = *pi, j = 3;
- while ( isxdigit( (unsigned char)s[i+j] ) ) {
- if ( isdigit( (unsigned char)s[i+j] ) ) d = s[i+j]-'0';
- else d = toupper((unsigned char)s[i+j])-'A' + 10;
- c = 16 * c + d;
- j++;
- }
- if ( s[i+j]!=';' ) *err = 1;
- else *pi = i+j+1;
- return c;
-}
-
-/*
- * decode numeric entity
- *
- * extract a numeric entity from &#NNN; or &#xNNNN;
- *
- * In XML, the "x" in hexadecimal entries should be lowercase,
- * but we'll be generous and accept "X" as well.
- */
-static unsigned int
-decode_numeric_entity( char *s, unsigned int *pi, int *err )
-{
- unsigned int c;
- *err = 0;
- if ( s[*pi+2]!='x' && s[*pi+2]!='X' ) c = decode_decimal_entity( s, pi, err );
- else c = decode_hex_entity( s, pi, err );
- if ( *err ) {
- *pi = *pi + 1;
- c = '&';
- }
- return c;
-}
-
-/*
- * decode entity
- * extract entity from &mmmm;
- *
- * where &mmmm; is one of
- * - &#nnnn; is code point in decimal form
- * - &#xhhhh; is code point in hexadecimal form (note "x" is lowercase in XML)
- * - &mmmm; corresponds to a pre-defined XML entity, e.g. &quote for quotations
- *
- */
-unsigned int
-decode_entity( char *s, unsigned int *pi, int *unicode, int *err )
-{
- unsigned int c = '&';
- *unicode = 0;
-
- if ( s[*pi]!='&' ) {
- *err = 1; /* need to start with ampersand */
- c = s[*pi];
- } else *err = 0;
-
- if ( !*err ) {
- if ( s[*pi+1]=='#' ) c = decode_numeric_entity( s, pi, err );
- else {
- c = decode_html_entity( s, pi, err );
- *unicode = 1;
- }
- }
- if ( *err ) *pi = *pi + 1;
-
- return c;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/entities.h b/support/texlab/crates/bibutils_sys/src/entities.h
deleted file mode 100644
index b1f0dbcc02..0000000000
--- a/support/texlab/crates/bibutils_sys/src/entities.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * entities.h
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef ENTITIES_H
-#define ENTITIES_H
-
-extern unsigned int decode_entity( char *s, unsigned int *pi,
- int *unicode, int *err );
-
-#endif
-
diff --git a/support/texlab/crates/bibutils_sys/src/fields.c b/support/texlab/crates/bibutils_sys/src/fields.c
deleted file mode 100644
index 39d455997d..0000000000
--- a/support/texlab/crates/bibutils_sys/src/fields.c
+++ /dev/null
@@ -1,573 +0,0 @@
-/*
- * fields.c
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdint.h>
-#include <string.h>
-#include "fields.h"
-#include "msvc_fix.h"
-
-fields*
-fields_new( void )
-{
- fields *f = ( fields * ) malloc( sizeof( fields ) );
- if ( f ) fields_init( f );
- return f;
-}
-
-void
-fields_init( fields *f )
-{
- f->used = NULL;
- f->level = NULL;
- f->tag = NULL;
- f->data = NULL;
- f->max = f->n = 0;
-}
-
-void
-fields_free( fields *f )
-{
- int i;
-
- for ( i=0; i<f->max; ++i ) {
- str_free( &(f->tag[i]) );
- str_free( &(f->data[i]) );
- }
- if ( f->tag ) free( f->tag );
- if ( f->data ) free( f->data );
- if ( f->used ) free( f->used );
- if ( f->level ) free( f->level );
-
- fields_init( f );
-}
-
-void
-fields_delete( fields *f )
-{
- fields_free( f );
- free( f );
-}
-
-static int
-fields_alloc( fields *f )
-{
- int i, alloc = 20;
-
- f->tag = (str *) malloc( sizeof(str) * alloc );
- f->data = (str *) malloc( sizeof(str) * alloc );
- f->used = (int *) calloc( alloc, sizeof(int) );
- f->level = (int *) calloc( alloc, sizeof(int) );
- if ( !f->tag || !f->data || !f->used || !f->level ){
- if ( f->tag ) free( f->tag );
- if ( f->data ) free( f->data );
- if ( f->used ) free( f->used );
- if ( f->level ) free( f->level );
- fields_init( f );
- return FIELDS_ERR;
- }
-
- f->max = alloc;
- f->n = 0;
- for ( i=0; i<alloc; ++i ) {
- str_init( &(f->tag[i]) );
- str_init( &(f->data[i]) );
- }
- return FIELDS_OK;
-}
-
-static int
-fields_realloc( fields *f )
-{
- str *newtags, *newdata;
- int *newused, *newlevel;
- int i, alloc = f->max * 2;
-
- newtags = (str*) realloc( f->tag, sizeof(str) * alloc );
- newdata = (str*) realloc( f->data, sizeof(str) * alloc );
- newused = (int*) realloc( f->used, sizeof(int) * alloc );
- newlevel= (int*) realloc( f->level, sizeof(int) * alloc );
-
- if ( newtags ) f->tag = newtags;
- if ( newdata ) f->data = newdata;
- if ( newused ) f->used = newused;
- if ( newlevel ) f->level = newlevel;
-
- if ( !newtags || !newdata || !newused || !newlevel )
- return FIELDS_ERR;
-
- f->max = alloc;
-
- for ( i=f->n; i<alloc; ++i ) {
- str_init( &(f->tag[i]) );
- str_init( &(f->data[i]) );
- }
-
- return FIELDS_OK;
-}
-
-int
-_fields_add( fields *f, const char *tag, const char *data, int level, int mode )
-{
- int i, n, status;
- str *t, *d;
-
- if ( !tag || !data ) return FIELDS_OK;
-
- if ( f->max==0 ) {
- status = fields_alloc( f );
- if ( status!=FIELDS_OK ) return status;
- } else if ( f->n >= f->max ) {
- status = fields_realloc( f );
- if ( status!=FIELDS_OK ) return status;
- }
-
- /* Don't duplicate identical entries if FIELDS_NO_DUPS */
- if ( mode == FIELDS_NO_DUPS ) {
- for ( i=0; i<f->n; i++ ) {
- t = &(f->tag[i]);
- d = &(f->data[i]);
- if ( f->level[i]==level &&
- !strcasecmp( str_cstr( t ), tag ) &&
- !strcasecmp( str_cstr( d ), data ) )
- return FIELDS_OK;
- }
- }
-
- n = f->n;
- f->used[ n ] = 0;
- f->level[ n ] = level;
- str_strcpyc( &(f->tag[n]), tag );
- str_strcpyc( &(f->data[n]), data );
-
- if ( str_memerr( &(f->tag[n]) ) || str_memerr( &(f->data[n] ) ) )
- return FIELDS_ERR;
-
- f->n++;
-
- return FIELDS_OK;
-}
-
-int
-_fields_add_tagsuffix( fields *f, const char *tag, const char *suffix,
- const char *data, int level, int mode )
-{
- str newtag;
- int ret;
-
- str_init( &newtag );
- str_mergestrs( &newtag, tag, suffix, NULL );
- if ( str_memerr( &newtag ) ) ret = FIELDS_ERR;
- else ret = _fields_add( f, newtag.data, data, level, mode );
- str_free( &newtag );
-
- return ret;
-}
-
-/* fields_match_level()
- *
- * returns 1 if level matched, 0 if not
- *
- * level==LEVEL_ANY is a special flag meaning any level can match
- */
-int
-fields_match_level( fields *f, int n, int level )
-{
- if ( level==LEVEL_ANY ) return 1;
- if ( fields_level( f, n )==level ) return 1;
- return 0;
-}
-
-/* fields_match_tag()
- *
- * returns 1 if tag matches, 0 if not
- *
- */
-int
-fields_match_tag( fields *info, int n, const char *tag )
-{
- if ( !strcmp( fields_tag( info, n, FIELDS_CHRP ), tag ) ) return 1;
- return 0;
-}
-
-int
-fields_match_casetag( fields *info, int n, const char *tag )
-{
- if ( !strcasecmp( fields_tag( info, n, FIELDS_CHRP ), tag ) ) return 1;
- return 0;
-}
-
-int
-fields_match_tag_level( fields *info, int n, const char *tag, int level )
-{
- if ( !fields_match_level( info, n, level ) ) return 0;
- return fields_match_tag( info, n, tag );
-}
-
-int
-fields_match_casetag_level( fields *info, int n, const char *tag, int level )
-{
- if ( !fields_match_level( info, n, level ) ) return 0;
- return fields_match_casetag( info, n, tag );
-}
-
-/* fields_find()
- *
- * Return position [0,f->n) for first match of the tag.
- * Return FIELDS_NOTFOUND if tag isn't found.
- */
-int
-fields_find( fields *f, const char *tag, int level )
-{
- int i;
-
- for ( i=0; i<f->n; ++i ) {
- if ( !fields_match_casetag_level( f, i, tag, level ) )
- continue;
- if ( f->data[i].len ) return i;
- else {
- /* if there is no data for the tag, don't "find" it */
- /* and set "used" so noise is suppressed */
- f->used[i] = 1;
- }
- }
-
- return FIELDS_NOTFOUND;
-}
-
-int
-fields_maxlevel( fields *f )
-{
- int i, max = 0;
-
- if ( f->n ) {
- max = f->level[0];
- for ( i=1; i<f->n; ++i ) {
- if ( f->level[i] > max )
- max = f->level[i];
- }
- }
-
- return max;
-}
-
-void
-fields_clearused( fields *f )
-{
- int i;
-
- for ( i=0; i<f->n; ++i )
- f->used[i] = 0;
-}
-
-void
-fields_setused( fields *f, int n )
-{
- if ( n >= 0 && n < f->n )
- f->used[n] = 1;
-}
-
-/* fields_replace_or_add()
- *
- * return FIELDS_OK on success, FIELDS_ERR on memory error
- */
-int
-fields_replace_or_add( fields *f, const char *tag, const char *data, int level )
-{
- int n = fields_find( f, tag, level );
- if ( n==FIELDS_NOTFOUND ) return fields_add( f, tag, data, level );
- else {
- str_strcpyc( &(f->data[n]), data );
- if ( str_memerr( &(f->data[n]) ) ) return FIELDS_ERR;
- return FIELDS_OK;
- }
-}
-
-char *fields_null_value = "\0";
-
-int
-fields_used( fields *f, int n )
-{
- if ( n >= 0 && n < f->n ) return f->used[n];
- else return 0;
-}
-
-int
-fields_notag( fields *f, int n )
-{
- str *t;
- if ( n >= 0 && n < f->n ) {
- t = &( f->tag[n] );
- if ( t->len > 0 ) return 0;
- }
- return 1;
-}
-
-int
-fields_nodata( fields *f, int n )
-{
- str *d;
- if ( n >= 0 && n < f->n ) {
- d = &( f->data[n] );
- if ( d->len > 0 ) return 0;
- }
- return 1;
-}
-
-int
-fields_num( fields *f )
-{
- return f->n;
-}
-
-/*
- * #define FIELDS_CHRP
- * #define FIELDS_STRP
- * #define FIELDS_CHRP_NOLEN
- * #define FIELDS_STRP_NOLEN
- *
- * If the length of the tagged value is zero and the mode is
- * FIELDS_STRP_NOLEN or FIELDS_CHRP_NOLEN, return a pointer to
- * a static null string as the data field could be new due to
- * the way str handles initialized strings with no data.
- *
- */
-
-void *
-fields_value( fields *f, int n, int mode )
-{
- intptr_t retn;
-
- if ( n<0 || n>= f->n ) return NULL;
-
- if ( mode & FIELDS_SETUSE_FLAG )
- fields_setused( f, n );
-
- if ( mode & FIELDS_STRP_FLAG )
- return &(f->data[n]);
- else if ( mode & FIELDS_POSP_FLAG ) {
- retn = n;
- return ( void * ) retn; /* Rather pointless */
- } else {
- if ( f->data[n].len )
- return f->data[n].data;
- else
- return fields_null_value;
- }
-}
-
-void *
-fields_tag( fields *f, int n, int mode )
-{
- intptr_t retn;
-
- if ( n<0 || n>= f->n ) return NULL;
-
- if ( mode & FIELDS_STRP_FLAG )
- return &(f->tag[n]);
- else if ( mode & FIELDS_POSP_FLAG ) {
- retn = n;
- return ( void * ) retn; /* Rather pointless */
- } else {
- if ( f->tag[n].len )
- return f->tag[n].data;
- else
- return fields_null_value;
- }
-}
-
-int
-fields_level( fields *f, int n )
-{
- if ( n<0 || n>= f->n ) return 0;
- return f->level[n];
-}
-
-void *
-fields_findv( fields *f, int level, int mode, const char *tag )
-{
- int i, found = FIELDS_NOTFOUND;
- intptr_t retn;
-
- for ( i=0; i<f->n && found==FIELDS_NOTFOUND; ++i ) {
-
- if ( !fields_match_level( f, i, level ) ) continue;
- if ( !fields_match_casetag( f, i, tag ) ) continue;
-
- if ( f->data[i].len!=0 ) found = i;
- else {
- if ( mode & FIELDS_NOLENOK_FLAG ) {
- return (void *) fields_null_value;
- } else if ( mode & FIELDS_SETUSE_FLAG ) {
- f->used[i] = 1; /* Suppress "noise" of unused */
- }
- }
- }
-
- if ( found==FIELDS_NOTFOUND ) return NULL;
-
- if ( mode & FIELDS_SETUSE_FLAG )
- fields_setused( f, found );
-
- if ( mode & FIELDS_STRP_FLAG )
- return (void *) &(f->data[found]);
- else if ( mode & FIELDS_POSP_FLAG ) {
- retn = found;
- return (void *) retn;
- } else
- return (void *) f->data[found].data;
-}
-
-void *
-fields_findv_firstof( fields *f, int level, int mode, ... )
-{
- char *tag, *value;
- va_list argp;
-
- va_start( argp, mode );
- while ( ( tag = ( char * ) va_arg( argp, char * ) ) ) {
- value = fields_findv( f, level, mode, tag );
- if ( value ) {
- va_end( argp );
- return value;
- }
- }
- va_end( argp );
-
- return NULL;
-}
-
-static int
-fields_findv_each_add( fields *f, int mode, int n, vplist *a )
-{
- int status;
- void *v;
-
- if ( n<0 || n>= f->n ) return FIELDS_OK;
-
- if ( mode & FIELDS_SETUSE_FLAG )
- fields_setused( f, n );
-
- if ( mode & FIELDS_STRP_FLAG ) {
- v = ( void * ) &( f->data[n] );
- } else if ( mode & FIELDS_POSP_FLAG ) {
- v = ( void * )( (long long) n );
- } else {
- v = ( void * ) str_cstr( &( f->data[n] ) );
- }
-
- status = vplist_add( a, v );
-
- if ( status==VPLIST_OK ) return FIELDS_OK;
- else return FIELDS_ERR;
-}
-
-int
-fields_findv_each( fields *f, int level, int mode, vplist *a, const char *tag )
-{
- int i, status;
-
- for ( i=0; i<f->n; ++i ) {
-
- if ( !fields_match_level( f, i, level ) ) continue;
- if ( !fields_match_casetag( f, i, tag ) ) continue;
-
- if ( f->data[i].len!=0 ) {
- status = fields_findv_each_add( f, mode, i, a );
- if ( status!=FIELDS_OK ) return status;
- } else {
- if ( mode & FIELDS_NOLENOK_FLAG ) {
- status = fields_findv_each_add( f, mode, i, a );
- if ( status!=FIELDS_OK ) return status;
- } else {
- f->used[i] = 1; /* Suppress "noise" of unused */
- }
- }
-
- }
-
- return FIELDS_OK;
-}
-
-static int
-fields_build_tags( va_list argp, vplist *tags )
-{
- int status;
- char *tag;
-
- while ( ( tag = ( char * ) va_arg( argp, char * ) ) ) {
- status = vplist_add( tags, tag );
- if ( status!=VPLIST_OK ) return FIELDS_ERR;
- }
-
- return FIELDS_OK;
-}
-
-static int
-fields_match_casetags( fields *f, int n, vplist *tags )
-{
- int i;
-
- for ( i=0; i<tags->n; ++i )
- if ( fields_match_casetag( f, n, vplist_get( tags, i ) ) ) return 1;
-
- return 0;
-}
-
-int
-fields_findv_eachof( fields *f, int level, int mode, vplist *a, ... )
-{
- int i, status;
- va_list argp;
- vplist tags;
-
- vplist_init( &tags );
-
- /* build list of tags to search for */
- va_start( argp, a );
- status = fields_build_tags( argp, &tags );
- va_end( argp );
- if ( status!=FIELDS_OK ) goto out;
-
- /* search list */
- for ( i=0; i<f->n; ++i ) {
-
- if ( !fields_match_level( f, i, level ) ) continue;
- if ( !fields_match_casetags( f, i, &tags ) ) continue;
-
- if ( f->data[i].len!=0 || ( mode & FIELDS_NOLENOK_FLAG ) ) {
- status = fields_findv_each_add( f, mode, i, a );
- if ( status!=FIELDS_OK ) goto out;
- } else {
- f->used[i] = 1; /* Suppress "noise" of unused */
- }
-
- }
-
-out:
- vplist_free( &tags );
- return status;
-}
-
-void
-fields_report( fields *f, FILE *fp )
-{
- int i, n;
- n = fields_num( f );
- fprintf( fp, "# NUM level = LEVEL 'TAG' = 'VALUE'\n" );
- for ( i=0; i<n; ++i ) {
- fprintf( stderr, "%d\tlevel = %d\t'%s' = '%s'\n",
- i+1,
- fields_level( f, i ),
- (char*)fields_tag( f, i, FIELDS_CHRP_NOUSE ),
- (char*)fields_value( f, i, FIELDS_CHRP_NOUSE )
- );
- }
-}
-
diff --git a/support/texlab/crates/bibutils_sys/src/fields.h b/support/texlab/crates/bibutils_sys/src/fields.h
deleted file mode 100644
index ae084b14f5..0000000000
--- a/support/texlab/crates/bibutils_sys/src/fields.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- * fields.h
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef FIELDS_H
-#define FIELDS_H
-
-#define FIELDS_OK (1)
-#define FIELDS_ERR (0)
-
-#define FIELDS_NOTFOUND (-1)
-
-#define LEVEL_ORIG (-2)
-#define LEVEL_ANY (-1)
-#define LEVEL_MAIN (0)
-#define LEVEL_HOST (1)
-#define LEVEL_SERIES (2)
-
-#include <stdarg.h>
-#include "str.h"
-#include "vplist.h"
-
-typedef struct fields {
- str *tag;
- str *data;
- int *used;
- int *level;
- int n;
- int max;
-} fields;
-
-void fields_init( fields *f );
-fields *fields_new( void );
-void fields_delete( fields *f );
-void fields_free( fields *f );
-
-#define FIELDS_CAN_DUP (0)
-#define FIELDS_NO_DUPS (1)
-
-#define fields_add( a, b, c, d ) _fields_add( a, b, c, d, FIELDS_NO_DUPS )
-#define fields_add_can_dup( a, b, c, d ) _fields_add( a, b, c, d, FIELDS_CAN_DUP )
-#define fields_add_tagsuffix( a, b, c, d, e ) _fields_add( a, b, c, d, e, FIELDS_NO_DUPS )
-#define fields_add_tagsuffix_can_dup( a, b, c, d, e ) _fields_add( a, b, c, d, e, FIELDS_CAN_DUP )
-
-int _fields_add( fields *f, const char *tag, const char *data, int level, int mode );
-int _fields_add_tagsuffix( fields *f, const char *tag, const char *suffix,
- const char *data, int level, int mode );
-
-int fields_maxlevel( fields *f );
-void fields_clearused( fields *f );
-void fields_setused( fields *f, int n );
-int fields_replace_or_add( fields *f, const char *tag, const char *data, int level );
-
-int fields_num( fields *f );
-int fields_used( fields *f, int n );
-int fields_notag( fields *f, int n );
-int fields_nodata( fields *f, int n );
-
-int fields_match_level( fields *f, int n, int level );
-int fields_match_tag( fields *f, int n, const char *tag );
-int fields_match_casetag( fields *f, int n, const char *tag );
-int fields_match_tag_level( fields *f, int n, const char *tag, int level );
-int fields_match_casetag_level( fields *f, int n, const char *tag, int level );
-
-void fields_report( fields *f, FILE *fp );
-
-#define FIELDS_STRP_FLAG (2)
-#define FIELDS_POSP_FLAG (4)
-#define FIELDS_NOLENOK_FLAG (8)
-#define FIELDS_SETUSE_FLAG (16)
-
-#define FIELDS_CHRP (FIELDS_SETUSE_FLAG )
-#define FIELDS_STRP (FIELDS_SETUSE_FLAG | FIELDS_STRP_FLAG )
-#define FIELDS_POSP (FIELDS_SETUSE_FLAG | FIELDS_POSP_FLAG )
-#define FIELDS_CHRP_NOLEN (FIELDS_SETUSE_FLAG | FIELDS_NOLENOK_FLAG)
-#define FIELDS_STRP_NOLEN (FIELDS_SETUSE_FLAG | FIELDS_STRP_FLAG | FIELDS_NOLENOK_FLAG)
-#define FIELDS_POSP_NOLEN (FIELDS_SETUSE_FLAG | FIELDS_POSP_FLAG | FIELDS_NOLENOK_FLAG)
-#define FIELDS_CHRP_NOUSE ( 0 )
-#define FIELDS_STRP_NOUSE ( FIELDS_STRP_FLAG )
-
-void *fields_tag( fields *f, int n, int mode );
-void *fields_value( fields *f, int n, int mode );
-int fields_level( fields *f, int n );
-
-int fields_find( fields *f, const char *searchtag, int level );
-
-void *fields_findv( fields *f, int level, int mode, const char *tag );
-void *fields_findv_firstof( fields *f, int level, int mode, ... );
-
-int fields_findv_each( fields *f, int level, int mode, vplist *a, const char *tag );
-int fields_findv_eachof( fields *f, int level, int mode, vplist *a, ... );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/gb18030.c b/support/texlab/crates/bibutils_sys/src/gb18030.c
deleted file mode 100644
index b8fdf855fa..0000000000
--- a/support/texlab/crates/bibutils_sys/src/gb18030.c
+++ /dev/null
@@ -1,184 +0,0 @@
-#include <stdio.h>
-#include "gb18030.h"
-
-/* GB18030-2000 is an encoding of Unicode character used in China
- *
- * {0x00-0x7f} are one byte characters identical to US-ASCII
- * {0x80} is properly undefined, but many GB18030 encodings make
- * it the Euro sign (Unicode 0x20AC), so use that
- * {0x81-0xFE}{0x40-0x7E,0x80-0xFE} a full superset of GBK (with fallback
- * mappings)
- * {0x81-0xFE}{0x30-0x39}{0x81-0xFE}{0x30-0x39} maps linearly to ISO 10646
- * GB+81308130 = U+0080 up to U+FFFF
- * GB+90308130 = U+10000 up to U+10FFFF skipping mappings already
- * defined in 1-byte and 2-byte areas.
- *
- * Truth is it's a bit of a mess algorithmically as it doesn't multiply
- * encode characters, so there are holes in the Unicode mapping that
- * should be avoided.
- */
-
-/* This is a "small" region that needs explicit enumeration */
-#include "gb18030_enumeration.c"
-
-static int
-in_range( unsigned char n, unsigned char low, unsigned char high )
-{
- if ( n < low || n > high ) return 0;
- return 1;
-}
-
-
-/* Get GB 18030 from Unicode Value in Table */
-static int
-gb18030_unicode_table_lookup( unsigned int unicode, unsigned char out[4] )
-{
- int i, j;
- if ( unicode >= 0x0080 && unicode <= 0xFFE5 ) {
- /* list is sorted, so should do binary search here */
- for ( i=0; i<ngb18030_enums; ++i ) {
- if ( unicode == gb18030_enums[i].unicode ) {
- for ( j=0; j<gb18030_enums[i].len; ++j )
- out[j] = gb18030_enums[i].bytes[j];
- return gb18030_enums[i].len;
- }
- }
- }
- return 0;
-}
-
-static int
-gb18030_match( unsigned char *s, const unsigned char *bytes, unsigned char len )
-{
- int i;
- for ( i=0; i<len; ++i )
- if ( ( s[i])!=bytes[i] ) return 0;
- return 1;
-}
-
-static unsigned int
-gb18030_table_lookup( unsigned char *uc, unsigned char len, int *found )
-{
- unsigned int i;
- *found = 0;
- for ( i=0; i<ngb18030_enums; ++i ) {
- if ( gb18030_enums[i].len!=len ) continue;
- if ( gb18030_match( &(uc[0]), gb18030_enums[i].bytes, len ) ) {
- *found = 1;
- return gb18030_enums[i].unicode;
- }
- }
- return '?';
-}
-
-
-static int
-gb18030_unicode_range_lookup( unsigned int unicode, unsigned char out[4] )
-{
- return 0;
-}
-
-static int
-gb18030_range_lookup( unsigned char *s, /* unsigned char len = 4 only */ int *found )
-{
- *found = 0;
- return 0;
-#if 0
- <!-- Roundtrip-mappings that can be enumerated
- Note that GB 18030 defines roundtrip mappings for all Unicode code points U+0000..U+10ffff.
- This would require 1.1 million <a> elements.
- However, most four-byte GB 18030 mappings can be enumerated efficiently within distinct ranges.
- Therefore, we use <range> elements for all but the 31000 or so assignments above.
- -->
- <range uFirst="0452" uLast="200F" bFirst="81 30 D3 30" bLast="81 36 A5 31" bMin="81 30 81 30" bMax="FE 39 FE 39"/>
- <range uFirst="2643" uLast="2E80" bFirst="81 37 A8 39" bLast="81 38 FD 38" bMin="81 30 81 30" bMax="FE 39 FE 39"/>
- <range uFirst="361B" uLast="3917" bFirst="82 30 A6 33" bLast="82 30 F2 37" bMin="81 30 81 30" bMax="FE 39 FE 39"/>
- <range uFirst="3CE1" uLast="4055" bFirst="82 31 D4 38" bLast="82 32 AF 32" bMin="81 30 81 30" bMax="FE 39 FE 39"/>
- <range uFirst="4160" uLast="4336" bFirst="82 32 C9 37" bLast="82 32 F8 37" bMin="81 30 81 30" bMax="FE 39 FE 39"/>
- <range uFirst="44D7" uLast="464B" bFirst="82 33 A3 39" bLast="82 33 C9 31" bMin="81 30 81 30" bMax="FE 39 FE 39"/>
- <range uFirst="478E" uLast="4946" bFirst="82 33 E8 38" bLast="82 34 96 38" bMin="81 30 81 30" bMax="FE 39 FE 39"/>
- <range uFirst="49B8" uLast="4C76" bFirst="82 34 A1 31" bLast="82 34 E7 33" bMin="81 30 81 30" bMax="FE 39 FE 39"/>
- <range uFirst="9FA6" uLast="D7FF" bFirst="82 35 8F 33" bLast="83 36 C7 38" bMin="81 30 81 30" bMax="FE 39 FE 39"/>
- <range uFirst="E865" uLast="F92B" bFirst="83 36 D0 30" bLast="84 30 85 34" bMin="81 30 81 30" bMax="FE 39 FE 39"/>
- <range uFirst="FA2A" uLast="FE2F" bFirst="84 30 9C 38" bLast="84 31 85 37" bMin="81 30 81 30" bMax="FE 39 FE 39"/>
- <range uFirst="FFE6" uLast="FFFF" bFirst="84 31 A2 34" bLast="84 31 A4 39" bMin="81 30 81 30" bMax="FE 39 FE 39"/>
- <range uFirst="10000" uLast="10FFFF" bFirst="90 30 81 30" bLast="E3 32 9A 35" bMin="81 30 81 30" bMax="FE 39 FE 39"/>
-#endif
-}
-
-unsigned int
-gb18030_to_unicode( unsigned char *s, unsigned char len )
-{
- unsigned int ret;
- int found;
- ret = gb18030_table_lookup( s, len, &found );
- if ( !found && len==4 ) {
- ret = gb18030_range_lookup( s, &found );
- if ( !found ) ret = '?';
- }
- return ret;
-}
-
-/*
- * Convert unicode character to gb18030
- *
- * returns number of characters for output
- */
-int
-gb18030_encode( unsigned int unicode, unsigned char out[4] )
-{
- int len;
- if ( unicode < 0x80 ) {
- out[0] = unicode;
- len = 1;
- } else {
- len = gb18030_unicode_table_lookup( unicode, out );
- if ( !len )
- len = gb18030_unicode_range_lookup( unicode, out );
- }
- return len;
-}
-
-/*
- * Decode a gb18030 character into unicode
- */
-unsigned int
-gb18030_decode( char *s, unsigned int *pi )
-{
- unsigned int c;
- unsigned char uc[4];
- int i = *pi;
- uc[0] = ( unsigned char ) s[i];
- if ( ( uc[0] & 128 ) == 0 ) {
- c = ( unsigned int ) uc[0];
- i += 1;
- } else if ( uc[0] == 0x80 ) {
- c = 0x20AC;
- i += 1;
- } else if ( uc[0] != 0xFF ) { /* multi-byte character */
- uc[1] = ( unsigned char ) s[i+1];
- uc[2] = ( unsigned char ) s[i+2];
- uc[3]= ( unsigned char ) s[i+3];
- if ( in_range( uc[1], 0x40, 0x7e ) || in_range( uc[1], 0x80, 0xfe ) ) {
- /* two-byte character */
- c = gb18030_to_unicode( &(uc[0]), 2 );
- i += 2;
- } else if ( in_range( uc[1], 0x30, 0x39 ) &&
- in_range( uc[2], 0x81, 0xfe ) &&
- in_range( uc[3], 0x30, 0x39 ) ) {
- /* four-byte character */
- c = gb18030_to_unicode( &(uc[0]), 4 );
- i += 4;
- } else {
- /* this is an illegal character */
- c = '?';
- i += 1;
- }
- } else { /* s[i]==0xFF */
- /* this is an illegal character */
- c = '?';
- i += 1;
- }
- *pi = i;
- return c;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/gb18030.h b/support/texlab/crates/bibutils_sys/src/gb18030.h
deleted file mode 100644
index e4acd1763b..0000000000
--- a/support/texlab/crates/bibutils_sys/src/gb18030.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * gb18030.h
- *
- * Copyright (c) Chris Putnam 2008-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef GB18030_H
-#define GB18030_H
-
-extern int gb18030_encode( unsigned int unicode, unsigned char out[4] );
-extern unsigned int gb18030_decode( char *s, unsigned int *pi );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/gb18030_enumeration.c b/support/texlab/crates/bibutils_sys/src/gb18030_enumeration.c
deleted file mode 100644
index 1187a3c972..0000000000
--- a/support/texlab/crates/bibutils_sys/src/gb18030_enumeration.c
+++ /dev/null
@@ -1,30746 +0,0 @@
-
-typedef struct genums_t {
- unsigned int unicode;
- unsigned char len;
- unsigned char bytes[4];
-} genums_t;
-
-static const
-genums_t gb18030_enums[] = {
- {0x0080,4,{0x81,0x30,0x81,0x30,}},
- {0x0081,4,{0x81,0x30,0x81,0x31,}},
- {0x0082,4,{0x81,0x30,0x81,0x32,}},
- {0x0083,4,{0x81,0x30,0x81,0x33,}},
- {0x0084,4,{0x81,0x30,0x81,0x34,}},
- {0x0085,4,{0x81,0x30,0x81,0x35,}},
- {0x0086,4,{0x81,0x30,0x81,0x36,}},
- {0x0087,4,{0x81,0x30,0x81,0x37,}},
- {0x0088,4,{0x81,0x30,0x81,0x38,}},
- {0x0089,4,{0x81,0x30,0x81,0x39,}},
- {0x008A,4,{0x81,0x30,0x82,0x30,}},
- {0x008B,4,{0x81,0x30,0x82,0x31,}},
- {0x008C,4,{0x81,0x30,0x82,0x32,}},
- {0x008D,4,{0x81,0x30,0x82,0x33,}},
- {0x008E,4,{0x81,0x30,0x82,0x34,}},
- {0x008F,4,{0x81,0x30,0x82,0x35,}},
- {0x0090,4,{0x81,0x30,0x82,0x36,}},
- {0x0091,4,{0x81,0x30,0x82,0x37,}},
- {0x0092,4,{0x81,0x30,0x82,0x38,}},
- {0x0093,4,{0x81,0x30,0x82,0x39,}},
- {0x0094,4,{0x81,0x30,0x83,0x30,}},
- {0x0095,4,{0x81,0x30,0x83,0x31,}},
- {0x0096,4,{0x81,0x30,0x83,0x32,}},
- {0x0097,4,{0x81,0x30,0x83,0x33,}},
- {0x0098,4,{0x81,0x30,0x83,0x34,}},
- {0x0099,4,{0x81,0x30,0x83,0x35,}},
- {0x009A,4,{0x81,0x30,0x83,0x36,}},
- {0x009B,4,{0x81,0x30,0x83,0x37,}},
- {0x009C,4,{0x81,0x30,0x83,0x38,}},
- {0x009D,4,{0x81,0x30,0x83,0x39,}},
- {0x009E,4,{0x81,0x30,0x84,0x30,}},
- {0x009F,4,{0x81,0x30,0x84,0x31,}},
- {0x00A0,4,{0x81,0x30,0x84,0x32,}},
- {0x00A1,4,{0x81,0x30,0x84,0x33,}},
- {0x00A2,4,{0x81,0x30,0x84,0x34,}},
- {0x00A3,4,{0x81,0x30,0x84,0x35,}},
- {0x00A4,2,{0xA1,0xE8,0x00,0x00,}},
- {0x00A5,4,{0x81,0x30,0x84,0x36,}},
- {0x00A6,4,{0x81,0x30,0x84,0x37,}},
- {0x00A7,2,{0xA1,0xEC,0x00,0x00,}},
- {0x00A8,2,{0xA1,0xA7,0x00,0x00,}},
- {0x00A9,4,{0x81,0x30,0x84,0x38,}},
- {0x00AA,4,{0x81,0x30,0x84,0x39,}},
- {0x00AB,4,{0x81,0x30,0x85,0x30,}},
- {0x00AC,4,{0x81,0x30,0x85,0x31,}},
- {0x00AD,4,{0x81,0x30,0x85,0x32,}},
- {0x00AE,4,{0x81,0x30,0x85,0x33,}},
- {0x00AF,4,{0x81,0x30,0x85,0x34,}},
- {0x00B0,2,{0xA1,0xE3,0x00,0x00,}},
- {0x00B1,2,{0xA1,0xC0,0x00,0x00,}},
- {0x00B2,4,{0x81,0x30,0x85,0x35,}},
- {0x00B3,4,{0x81,0x30,0x85,0x36,}},
- {0x00B4,4,{0x81,0x30,0x85,0x37,}},
- {0x00B5,4,{0x81,0x30,0x85,0x38,}},
- {0x00B6,4,{0x81,0x30,0x85,0x39,}},
- {0x00B7,2,{0xA1,0xA4,0x00,0x00,}},
- {0x00B8,4,{0x81,0x30,0x86,0x30,}},
- {0x00B9,4,{0x81,0x30,0x86,0x31,}},
- {0x00BA,4,{0x81,0x30,0x86,0x32,}},
- {0x00BB,4,{0x81,0x30,0x86,0x33,}},
- {0x00BC,4,{0x81,0x30,0x86,0x34,}},
- {0x00BD,4,{0x81,0x30,0x86,0x35,}},
- {0x00BE,4,{0x81,0x30,0x86,0x36,}},
- {0x00BF,4,{0x81,0x30,0x86,0x37,}},
- {0x00C0,4,{0x81,0x30,0x86,0x38,}},
- {0x00C1,4,{0x81,0x30,0x86,0x39,}},
- {0x00C2,4,{0x81,0x30,0x87,0x30,}},
- {0x00C3,4,{0x81,0x30,0x87,0x31,}},
- {0x00C4,4,{0x81,0x30,0x87,0x32,}},
- {0x00C5,4,{0x81,0x30,0x87,0x33,}},
- {0x00C6,4,{0x81,0x30,0x87,0x34,}},
- {0x00C7,4,{0x81,0x30,0x87,0x35,}},
- {0x00C8,4,{0x81,0x30,0x87,0x36,}},
- {0x00C9,4,{0x81,0x30,0x87,0x37,}},
- {0x00CA,4,{0x81,0x30,0x87,0x38,}},
- {0x00CB,4,{0x81,0x30,0x87,0x39,}},
- {0x00CC,4,{0x81,0x30,0x88,0x30,}},
- {0x00CD,4,{0x81,0x30,0x88,0x31,}},
- {0x00CE,4,{0x81,0x30,0x88,0x32,}},
- {0x00CF,4,{0x81,0x30,0x88,0x33,}},
- {0x00D0,4,{0x81,0x30,0x88,0x34,}},
- {0x00D1,4,{0x81,0x30,0x88,0x35,}},
- {0x00D2,4,{0x81,0x30,0x88,0x36,}},
- {0x00D3,4,{0x81,0x30,0x88,0x37,}},
- {0x00D4,4,{0x81,0x30,0x88,0x38,}},
- {0x00D5,4,{0x81,0x30,0x88,0x39,}},
- {0x00D6,4,{0x81,0x30,0x89,0x30,}},
- {0x00D7,2,{0xA1,0xC1,0x00,0x00,}},
- {0x00D8,4,{0x81,0x30,0x89,0x31,}},
- {0x00D9,4,{0x81,0x30,0x89,0x32,}},
- {0x00DA,4,{0x81,0x30,0x89,0x33,}},
- {0x00DB,4,{0x81,0x30,0x89,0x34,}},
- {0x00DC,4,{0x81,0x30,0x89,0x35,}},
- {0x00DD,4,{0x81,0x30,0x89,0x36,}},
- {0x00DE,4,{0x81,0x30,0x89,0x37,}},
- {0x00DF,4,{0x81,0x30,0x89,0x38,}},
- {0x00E0,2,{0xA8,0xA4,0x00,0x00,}},
- {0x00E1,2,{0xA8,0xA2,0x00,0x00,}},
- {0x00E2,4,{0x81,0x30,0x89,0x39,}},
- {0x00E3,4,{0x81,0x30,0x8A,0x30,}},
- {0x00E4,4,{0x81,0x30,0x8A,0x31,}},
- {0x00E5,4,{0x81,0x30,0x8A,0x32,}},
- {0x00E6,4,{0x81,0x30,0x8A,0x33,}},
- {0x00E7,4,{0x81,0x30,0x8A,0x34,}},
- {0x00E8,2,{0xA8,0xA8,0x00,0x00,}},
- {0x00E9,2,{0xA8,0xA6,0x00,0x00,}},
- {0x00EA,2,{0xA8,0xBA,0x00,0x00,}},
- {0x00EB,4,{0x81,0x30,0x8A,0x35,}},
- {0x00EC,2,{0xA8,0xAC,0x00,0x00,}},
- {0x00ED,2,{0xA8,0xAA,0x00,0x00,}},
- {0x00EE,4,{0x81,0x30,0x8A,0x36,}},
- {0x00EF,4,{0x81,0x30,0x8A,0x37,}},
- {0x00F0,4,{0x81,0x30,0x8A,0x38,}},
- {0x00F1,4,{0x81,0x30,0x8A,0x39,}},
- {0x00F2,2,{0xA8,0xB0,0x00,0x00,}},
- {0x00F3,2,{0xA8,0xAE,0x00,0x00,}},
- {0x00F4,4,{0x81,0x30,0x8B,0x30,}},
- {0x00F5,4,{0x81,0x30,0x8B,0x31,}},
- {0x00F6,4,{0x81,0x30,0x8B,0x32,}},
- {0x00F7,2,{0xA1,0xC2,0x00,0x00,}},
- {0x00F8,4,{0x81,0x30,0x8B,0x33,}},
- {0x00F9,2,{0xA8,0xB4,0x00,0x00,}},
- {0x00FA,2,{0xA8,0xB2,0x00,0x00,}},
- {0x00FB,4,{0x81,0x30,0x8B,0x34,}},
- {0x00FC,2,{0xA8,0xB9,0x00,0x00,}},
- {0x00FD,4,{0x81,0x30,0x8B,0x35,}},
- {0x00FE,4,{0x81,0x30,0x8B,0x36,}},
- {0x00FF,4,{0x81,0x30,0x8B,0x37,}},
- {0x0100,4,{0x81,0x30,0x8B,0x38,}},
- {0x0101,2,{0xA8,0xA1,0x00,0x00,}},
- {0x0102,4,{0x81,0x30,0x8B,0x39,}},
- {0x0103,4,{0x81,0x30,0x8C,0x30,}},
- {0x0104,4,{0x81,0x30,0x8C,0x31,}},
- {0x0105,4,{0x81,0x30,0x8C,0x32,}},
- {0x0106,4,{0x81,0x30,0x8C,0x33,}},
- {0x0107,4,{0x81,0x30,0x8C,0x34,}},
- {0x0108,4,{0x81,0x30,0x8C,0x35,}},
- {0x0109,4,{0x81,0x30,0x8C,0x36,}},
- {0x010A,4,{0x81,0x30,0x8C,0x37,}},
- {0x010B,4,{0x81,0x30,0x8C,0x38,}},
- {0x010C,4,{0x81,0x30,0x8C,0x39,}},
- {0x010D,4,{0x81,0x30,0x8D,0x30,}},
- {0x010E,4,{0x81,0x30,0x8D,0x31,}},
- {0x010F,4,{0x81,0x30,0x8D,0x32,}},
- {0x0110,4,{0x81,0x30,0x8D,0x33,}},
- {0x0111,4,{0x81,0x30,0x8D,0x34,}},
- {0x0112,4,{0x81,0x30,0x8D,0x35,}},
- {0x0113,2,{0xA8,0xA5,0x00,0x00,}},
- {0x0114,4,{0x81,0x30,0x8D,0x36,}},
- {0x0115,4,{0x81,0x30,0x8D,0x37,}},
- {0x0116,4,{0x81,0x30,0x8D,0x38,}},
- {0x0117,4,{0x81,0x30,0x8D,0x39,}},
- {0x0118,4,{0x81,0x30,0x8E,0x30,}},
- {0x0119,4,{0x81,0x30,0x8E,0x31,}},
- {0x011A,4,{0x81,0x30,0x8E,0x32,}},
- {0x011B,2,{0xA8,0xA7,0x00,0x00,}},
- {0x011C,4,{0x81,0x30,0x8E,0x33,}},
- {0x011D,4,{0x81,0x30,0x8E,0x34,}},
- {0x011E,4,{0x81,0x30,0x8E,0x35,}},
- {0x011F,4,{0x81,0x30,0x8E,0x36,}},
- {0x0120,4,{0x81,0x30,0x8E,0x37,}},
- {0x0121,4,{0x81,0x30,0x8E,0x38,}},
- {0x0122,4,{0x81,0x30,0x8E,0x39,}},
- {0x0123,4,{0x81,0x30,0x8F,0x30,}},
- {0x0124,4,{0x81,0x30,0x8F,0x31,}},
- {0x0125,4,{0x81,0x30,0x8F,0x32,}},
- {0x0126,4,{0x81,0x30,0x8F,0x33,}},
- {0x0127,4,{0x81,0x30,0x8F,0x34,}},
- {0x0128,4,{0x81,0x30,0x8F,0x35,}},
- {0x0129,4,{0x81,0x30,0x8F,0x36,}},
- {0x012A,4,{0x81,0x30,0x8F,0x37,}},
- {0x012B,2,{0xA8,0xA9,0x00,0x00,}},
- {0x012C,4,{0x81,0x30,0x8F,0x38,}},
- {0x012D,4,{0x81,0x30,0x8F,0x39,}},
- {0x012E,4,{0x81,0x30,0x90,0x30,}},
- {0x012F,4,{0x81,0x30,0x90,0x31,}},
- {0x0130,4,{0x81,0x30,0x90,0x32,}},
- {0x0131,4,{0x81,0x30,0x90,0x33,}},
- {0x0132,4,{0x81,0x30,0x90,0x34,}},
- {0x0133,4,{0x81,0x30,0x90,0x35,}},
- {0x0134,4,{0x81,0x30,0x90,0x36,}},
- {0x0135,4,{0x81,0x30,0x90,0x37,}},
- {0x0136,4,{0x81,0x30,0x90,0x38,}},
- {0x0137,4,{0x81,0x30,0x90,0x39,}},
- {0x0138,4,{0x81,0x30,0x91,0x30,}},
- {0x0139,4,{0x81,0x30,0x91,0x31,}},
- {0x013A,4,{0x81,0x30,0x91,0x32,}},
- {0x013B,4,{0x81,0x30,0x91,0x33,}},
- {0x013C,4,{0x81,0x30,0x91,0x34,}},
- {0x013D,4,{0x81,0x30,0x91,0x35,}},
- {0x013E,4,{0x81,0x30,0x91,0x36,}},
- {0x013F,4,{0x81,0x30,0x91,0x37,}},
- {0x0140,4,{0x81,0x30,0x91,0x38,}},
- {0x0141,4,{0x81,0x30,0x91,0x39,}},
- {0x0142,4,{0x81,0x30,0x92,0x30,}},
- {0x0143,4,{0x81,0x30,0x92,0x31,}},
- {0x0144,2,{0xA8,0xBD,0x00,0x00,}},
- {0x0145,4,{0x81,0x30,0x92,0x32,}},
- {0x0146,4,{0x81,0x30,0x92,0x33,}},
- {0x0147,4,{0x81,0x30,0x92,0x34,}},
- {0x0148,2,{0xA8,0xBE,0x00,0x00,}},
- {0x0149,4,{0x81,0x30,0x92,0x35,}},
- {0x014A,4,{0x81,0x30,0x92,0x36,}},
- {0x014B,4,{0x81,0x30,0x92,0x37,}},
- {0x014C,4,{0x81,0x30,0x92,0x38,}},
- {0x014D,2,{0xA8,0xAD,0x00,0x00,}},
- {0x014E,4,{0x81,0x30,0x92,0x39,}},
- {0x014F,4,{0x81,0x30,0x93,0x30,}},
- {0x0150,4,{0x81,0x30,0x93,0x31,}},
- {0x0151,4,{0x81,0x30,0x93,0x32,}},
- {0x0152,4,{0x81,0x30,0x93,0x33,}},
- {0x0153,4,{0x81,0x30,0x93,0x34,}},
- {0x0154,4,{0x81,0x30,0x93,0x35,}},
- {0x0155,4,{0x81,0x30,0x93,0x36,}},
- {0x0156,4,{0x81,0x30,0x93,0x37,}},
- {0x0157,4,{0x81,0x30,0x93,0x38,}},
- {0x0158,4,{0x81,0x30,0x93,0x39,}},
- {0x0159,4,{0x81,0x30,0x94,0x30,}},
- {0x015A,4,{0x81,0x30,0x94,0x31,}},
- {0x015B,4,{0x81,0x30,0x94,0x32,}},
- {0x015C,4,{0x81,0x30,0x94,0x33,}},
- {0x015D,4,{0x81,0x30,0x94,0x34,}},
- {0x015E,4,{0x81,0x30,0x94,0x35,}},
- {0x015F,4,{0x81,0x30,0x94,0x36,}},
- {0x0160,4,{0x81,0x30,0x94,0x37,}},
- {0x0161,4,{0x81,0x30,0x94,0x38,}},
- {0x0162,4,{0x81,0x30,0x94,0x39,}},
- {0x0163,4,{0x81,0x30,0x95,0x30,}},
- {0x0164,4,{0x81,0x30,0x95,0x31,}},
- {0x0165,4,{0x81,0x30,0x95,0x32,}},
- {0x0166,4,{0x81,0x30,0x95,0x33,}},
- {0x0167,4,{0x81,0x30,0x95,0x34,}},
- {0x0168,4,{0x81,0x30,0x95,0x35,}},
- {0x0169,4,{0x81,0x30,0x95,0x36,}},
- {0x016A,4,{0x81,0x30,0x95,0x37,}},
- {0x016B,2,{0xA8,0xB1,0x00,0x00,}},
- {0x016C,4,{0x81,0x30,0x95,0x38,}},
- {0x016D,4,{0x81,0x30,0x95,0x39,}},
- {0x016E,4,{0x81,0x30,0x96,0x30,}},
- {0x016F,4,{0x81,0x30,0x96,0x31,}},
- {0x0170,4,{0x81,0x30,0x96,0x32,}},
- {0x0171,4,{0x81,0x30,0x96,0x33,}},
- {0x0172,4,{0x81,0x30,0x96,0x34,}},
- {0x0173,4,{0x81,0x30,0x96,0x35,}},
- {0x0174,4,{0x81,0x30,0x96,0x36,}},
- {0x0175,4,{0x81,0x30,0x96,0x37,}},
- {0x0176,4,{0x81,0x30,0x96,0x38,}},
- {0x0177,4,{0x81,0x30,0x96,0x39,}},
- {0x0178,4,{0x81,0x30,0x97,0x30,}},
- {0x0179,4,{0x81,0x30,0x97,0x31,}},
- {0x017A,4,{0x81,0x30,0x97,0x32,}},
- {0x017B,4,{0x81,0x30,0x97,0x33,}},
- {0x017C,4,{0x81,0x30,0x97,0x34,}},
- {0x017D,4,{0x81,0x30,0x97,0x35,}},
- {0x017E,4,{0x81,0x30,0x97,0x36,}},
- {0x017F,4,{0x81,0x30,0x97,0x37,}},
- {0x0180,4,{0x81,0x30,0x97,0x38,}},
- {0x0181,4,{0x81,0x30,0x97,0x39,}},
- {0x0182,4,{0x81,0x30,0x98,0x30,}},
- {0x0183,4,{0x81,0x30,0x98,0x31,}},
- {0x0184,4,{0x81,0x30,0x98,0x32,}},
- {0x0185,4,{0x81,0x30,0x98,0x33,}},
- {0x0186,4,{0x81,0x30,0x98,0x34,}},
- {0x0187,4,{0x81,0x30,0x98,0x35,}},
- {0x0188,4,{0x81,0x30,0x98,0x36,}},
- {0x0189,4,{0x81,0x30,0x98,0x37,}},
- {0x018A,4,{0x81,0x30,0x98,0x38,}},
- {0x018B,4,{0x81,0x30,0x98,0x39,}},
- {0x018C,4,{0x81,0x30,0x99,0x30,}},
- {0x018D,4,{0x81,0x30,0x99,0x31,}},
- {0x018E,4,{0x81,0x30,0x99,0x32,}},
- {0x018F,4,{0x81,0x30,0x99,0x33,}},
- {0x0190,4,{0x81,0x30,0x99,0x34,}},
- {0x0191,4,{0x81,0x30,0x99,0x35,}},
- {0x0192,4,{0x81,0x30,0x99,0x36,}},
- {0x0193,4,{0x81,0x30,0x99,0x37,}},
- {0x0194,4,{0x81,0x30,0x99,0x38,}},
- {0x0195,4,{0x81,0x30,0x99,0x39,}},
- {0x0196,4,{0x81,0x30,0x9A,0x30,}},
- {0x0197,4,{0x81,0x30,0x9A,0x31,}},
- {0x0198,4,{0x81,0x30,0x9A,0x32,}},
- {0x0199,4,{0x81,0x30,0x9A,0x33,}},
- {0x019A,4,{0x81,0x30,0x9A,0x34,}},
- {0x019B,4,{0x81,0x30,0x9A,0x35,}},
- {0x019C,4,{0x81,0x30,0x9A,0x36,}},
- {0x019D,4,{0x81,0x30,0x9A,0x37,}},
- {0x019E,4,{0x81,0x30,0x9A,0x38,}},
- {0x019F,4,{0x81,0x30,0x9A,0x39,}},
- {0x01A0,4,{0x81,0x30,0x9B,0x30,}},
- {0x01A1,4,{0x81,0x30,0x9B,0x31,}},
- {0x01A2,4,{0x81,0x30,0x9B,0x32,}},
- {0x01A3,4,{0x81,0x30,0x9B,0x33,}},
- {0x01A4,4,{0x81,0x30,0x9B,0x34,}},
- {0x01A5,4,{0x81,0x30,0x9B,0x35,}},
- {0x01A6,4,{0x81,0x30,0x9B,0x36,}},
- {0x01A7,4,{0x81,0x30,0x9B,0x37,}},
- {0x01A8,4,{0x81,0x30,0x9B,0x38,}},
- {0x01A9,4,{0x81,0x30,0x9B,0x39,}},
- {0x01AA,4,{0x81,0x30,0x9C,0x30,}},
- {0x01AB,4,{0x81,0x30,0x9C,0x31,}},
- {0x01AC,4,{0x81,0x30,0x9C,0x32,}},
- {0x01AD,4,{0x81,0x30,0x9C,0x33,}},
- {0x01AE,4,{0x81,0x30,0x9C,0x34,}},
- {0x01AF,4,{0x81,0x30,0x9C,0x35,}},
- {0x01B0,4,{0x81,0x30,0x9C,0x36,}},
- {0x01B1,4,{0x81,0x30,0x9C,0x37,}},
- {0x01B2,4,{0x81,0x30,0x9C,0x38,}},
- {0x01B3,4,{0x81,0x30,0x9C,0x39,}},
- {0x01B4,4,{0x81,0x30,0x9D,0x30,}},
- {0x01B5,4,{0x81,0x30,0x9D,0x31,}},
- {0x01B6,4,{0x81,0x30,0x9D,0x32,}},
- {0x01B7,4,{0x81,0x30,0x9D,0x33,}},
- {0x01B8,4,{0x81,0x30,0x9D,0x34,}},
- {0x01B9,4,{0x81,0x30,0x9D,0x35,}},
- {0x01BA,4,{0x81,0x30,0x9D,0x36,}},
- {0x01BB,4,{0x81,0x30,0x9D,0x37,}},
- {0x01BC,4,{0x81,0x30,0x9D,0x38,}},
- {0x01BD,4,{0x81,0x30,0x9D,0x39,}},
- {0x01BE,4,{0x81,0x30,0x9E,0x30,}},
- {0x01BF,4,{0x81,0x30,0x9E,0x31,}},
- {0x01C0,4,{0x81,0x30,0x9E,0x32,}},
- {0x01C1,4,{0x81,0x30,0x9E,0x33,}},
- {0x01C2,4,{0x81,0x30,0x9E,0x34,}},
- {0x01C3,4,{0x81,0x30,0x9E,0x35,}},
- {0x01C4,4,{0x81,0x30,0x9E,0x36,}},
- {0x01C5,4,{0x81,0x30,0x9E,0x37,}},
- {0x01C6,4,{0x81,0x30,0x9E,0x38,}},
- {0x01C7,4,{0x81,0x30,0x9E,0x39,}},
- {0x01C8,4,{0x81,0x30,0x9F,0x30,}},
- {0x01C9,4,{0x81,0x30,0x9F,0x31,}},
- {0x01CA,4,{0x81,0x30,0x9F,0x32,}},
- {0x01CB,4,{0x81,0x30,0x9F,0x33,}},
- {0x01CC,4,{0x81,0x30,0x9F,0x34,}},
- {0x01CD,4,{0x81,0x30,0x9F,0x35,}},
- {0x01CE,2,{0xA8,0xA3,0x00,0x00,}},
- {0x01CF,4,{0x81,0x30,0x9F,0x36,}},
- {0x01D0,2,{0xA8,0xAB,0x00,0x00,}},
- {0x01D1,4,{0x81,0x30,0x9F,0x37,}},
- {0x01D2,2,{0xA8,0xAF,0x00,0x00,}},
- {0x01D3,4,{0x81,0x30,0x9F,0x38,}},
- {0x01D4,2,{0xA8,0xB3,0x00,0x00,}},
- {0x01D5,4,{0x81,0x30,0x9F,0x39,}},
- {0x01D6,2,{0xA8,0xB5,0x00,0x00,}},
- {0x01D7,4,{0x81,0x30,0xA0,0x30,}},
- {0x01D8,2,{0xA8,0xB6,0x00,0x00,}},
- {0x01D9,4,{0x81,0x30,0xA0,0x31,}},
- {0x01DA,2,{0xA8,0xB7,0x00,0x00,}},
- {0x01DB,4,{0x81,0x30,0xA0,0x32,}},
- {0x01DC,2,{0xA8,0xB8,0x00,0x00,}},
- {0x01DD,4,{0x81,0x30,0xA0,0x33,}},
- {0x01DE,4,{0x81,0x30,0xA0,0x34,}},
- {0x01DF,4,{0x81,0x30,0xA0,0x35,}},
- {0x01E0,4,{0x81,0x30,0xA0,0x36,}},
- {0x01E1,4,{0x81,0x30,0xA0,0x37,}},
- {0x01E2,4,{0x81,0x30,0xA0,0x38,}},
- {0x01E3,4,{0x81,0x30,0xA0,0x39,}},
- {0x01E4,4,{0x81,0x30,0xA1,0x30,}},
- {0x01E5,4,{0x81,0x30,0xA1,0x31,}},
- {0x01E6,4,{0x81,0x30,0xA1,0x32,}},
- {0x01E7,4,{0x81,0x30,0xA1,0x33,}},
- {0x01E8,4,{0x81,0x30,0xA1,0x34,}},
- {0x01E9,4,{0x81,0x30,0xA1,0x35,}},
- {0x01EA,4,{0x81,0x30,0xA1,0x36,}},
- {0x01EB,4,{0x81,0x30,0xA1,0x37,}},
- {0x01EC,4,{0x81,0x30,0xA1,0x38,}},
- {0x01ED,4,{0x81,0x30,0xA1,0x39,}},
- {0x01EE,4,{0x81,0x30,0xA2,0x30,}},
- {0x01EF,4,{0x81,0x30,0xA2,0x31,}},
- {0x01F0,4,{0x81,0x30,0xA2,0x32,}},
- {0x01F1,4,{0x81,0x30,0xA2,0x33,}},
- {0x01F2,4,{0x81,0x30,0xA2,0x34,}},
- {0x01F3,4,{0x81,0x30,0xA2,0x35,}},
- {0x01F4,4,{0x81,0x30,0xA2,0x36,}},
- {0x01F5,4,{0x81,0x30,0xA2,0x37,}},
- {0x01F6,4,{0x81,0x30,0xA2,0x38,}},
- {0x01F7,4,{0x81,0x30,0xA2,0x39,}},
- {0x01F8,4,{0x81,0x30,0xA3,0x30,}},
- {0x01F9,2,{0xA8,0xBF,0x00,0x00,}},
- {0x01FA,4,{0x81,0x30,0xA3,0x31,}},
- {0x01FB,4,{0x81,0x30,0xA3,0x32,}},
- {0x01FC,4,{0x81,0x30,0xA3,0x33,}},
- {0x01FD,4,{0x81,0x30,0xA3,0x34,}},
- {0x01FE,4,{0x81,0x30,0xA3,0x35,}},
- {0x01FF,4,{0x81,0x30,0xA3,0x36,}},
- {0x0200,4,{0x81,0x30,0xA3,0x37,}},
- {0x0201,4,{0x81,0x30,0xA3,0x38,}},
- {0x0202,4,{0x81,0x30,0xA3,0x39,}},
- {0x0203,4,{0x81,0x30,0xA4,0x30,}},
- {0x0204,4,{0x81,0x30,0xA4,0x31,}},
- {0x0205,4,{0x81,0x30,0xA4,0x32,}},
- {0x0206,4,{0x81,0x30,0xA4,0x33,}},
- {0x0207,4,{0x81,0x30,0xA4,0x34,}},
- {0x0208,4,{0x81,0x30,0xA4,0x35,}},
- {0x0209,4,{0x81,0x30,0xA4,0x36,}},
- {0x020A,4,{0x81,0x30,0xA4,0x37,}},
- {0x020B,4,{0x81,0x30,0xA4,0x38,}},
- {0x020C,4,{0x81,0x30,0xA4,0x39,}},
- {0x020D,4,{0x81,0x30,0xA5,0x30,}},
- {0x020E,4,{0x81,0x30,0xA5,0x31,}},
- {0x020F,4,{0x81,0x30,0xA5,0x32,}},
- {0x0210,4,{0x81,0x30,0xA5,0x33,}},
- {0x0211,4,{0x81,0x30,0xA5,0x34,}},
- {0x0212,4,{0x81,0x30,0xA5,0x35,}},
- {0x0213,4,{0x81,0x30,0xA5,0x36,}},
- {0x0214,4,{0x81,0x30,0xA5,0x37,}},
- {0x0215,4,{0x81,0x30,0xA5,0x38,}},
- {0x0216,4,{0x81,0x30,0xA5,0x39,}},
- {0x0217,4,{0x81,0x30,0xA6,0x30,}},
- {0x0218,4,{0x81,0x30,0xA6,0x31,}},
- {0x0219,4,{0x81,0x30,0xA6,0x32,}},
- {0x021A,4,{0x81,0x30,0xA6,0x33,}},
- {0x021B,4,{0x81,0x30,0xA6,0x34,}},
- {0x021C,4,{0x81,0x30,0xA6,0x35,}},
- {0x021D,4,{0x81,0x30,0xA6,0x36,}},
- {0x021E,4,{0x81,0x30,0xA6,0x37,}},
- {0x021F,4,{0x81,0x30,0xA6,0x38,}},
- {0x0220,4,{0x81,0x30,0xA6,0x39,}},
- {0x0221,4,{0x81,0x30,0xA7,0x30,}},
- {0x0222,4,{0x81,0x30,0xA7,0x31,}},
- {0x0223,4,{0x81,0x30,0xA7,0x32,}},
- {0x0224,4,{0x81,0x30,0xA7,0x33,}},
- {0x0225,4,{0x81,0x30,0xA7,0x34,}},
- {0x0226,4,{0x81,0x30,0xA7,0x35,}},
- {0x0227,4,{0x81,0x30,0xA7,0x36,}},
- {0x0228,4,{0x81,0x30,0xA7,0x37,}},
- {0x0229,4,{0x81,0x30,0xA7,0x38,}},
- {0x022A,4,{0x81,0x30,0xA7,0x39,}},
- {0x022B,4,{0x81,0x30,0xA8,0x30,}},
- {0x022C,4,{0x81,0x30,0xA8,0x31,}},
- {0x022D,4,{0x81,0x30,0xA8,0x32,}},
- {0x022E,4,{0x81,0x30,0xA8,0x33,}},
- {0x022F,4,{0x81,0x30,0xA8,0x34,}},
- {0x0230,4,{0x81,0x30,0xA8,0x35,}},
- {0x0231,4,{0x81,0x30,0xA8,0x36,}},
- {0x0232,4,{0x81,0x30,0xA8,0x37,}},
- {0x0233,4,{0x81,0x30,0xA8,0x38,}},
- {0x0234,4,{0x81,0x30,0xA8,0x39,}},
- {0x0235,4,{0x81,0x30,0xA9,0x30,}},
- {0x0236,4,{0x81,0x30,0xA9,0x31,}},
- {0x0237,4,{0x81,0x30,0xA9,0x32,}},
- {0x0238,4,{0x81,0x30,0xA9,0x33,}},
- {0x0239,4,{0x81,0x30,0xA9,0x34,}},
- {0x023A,4,{0x81,0x30,0xA9,0x35,}},
- {0x023B,4,{0x81,0x30,0xA9,0x36,}},
- {0x023C,4,{0x81,0x30,0xA9,0x37,}},
- {0x023D,4,{0x81,0x30,0xA9,0x38,}},
- {0x023E,4,{0x81,0x30,0xA9,0x39,}},
- {0x023F,4,{0x81,0x30,0xAA,0x30,}},
- {0x0240,4,{0x81,0x30,0xAA,0x31,}},
- {0x0241,4,{0x81,0x30,0xAA,0x32,}},
- {0x0242,4,{0x81,0x30,0xAA,0x33,}},
- {0x0243,4,{0x81,0x30,0xAA,0x34,}},
- {0x0244,4,{0x81,0x30,0xAA,0x35,}},
- {0x0245,4,{0x81,0x30,0xAA,0x36,}},
- {0x0246,4,{0x81,0x30,0xAA,0x37,}},
- {0x0247,4,{0x81,0x30,0xAA,0x38,}},
- {0x0248,4,{0x81,0x30,0xAA,0x39,}},
- {0x0249,4,{0x81,0x30,0xAB,0x30,}},
- {0x024A,4,{0x81,0x30,0xAB,0x31,}},
- {0x024B,4,{0x81,0x30,0xAB,0x32,}},
- {0x024C,4,{0x81,0x30,0xAB,0x33,}},
- {0x024D,4,{0x81,0x30,0xAB,0x34,}},
- {0x024E,4,{0x81,0x30,0xAB,0x35,}},
- {0x024F,4,{0x81,0x30,0xAB,0x36,}},
- {0x0250,4,{0x81,0x30,0xAB,0x37,}},
- {0x0251,2,{0xA8,0xBB,0x00,0x00,}},
- {0x0252,4,{0x81,0x30,0xAB,0x38,}},
- {0x0253,4,{0x81,0x30,0xAB,0x39,}},
- {0x0254,4,{0x81,0x30,0xAC,0x30,}},
- {0x0255,4,{0x81,0x30,0xAC,0x31,}},
- {0x0256,4,{0x81,0x30,0xAC,0x32,}},
- {0x0257,4,{0x81,0x30,0xAC,0x33,}},
- {0x0258,4,{0x81,0x30,0xAC,0x34,}},
- {0x0259,4,{0x81,0x30,0xAC,0x35,}},
- {0x025A,4,{0x81,0x30,0xAC,0x36,}},
- {0x025B,4,{0x81,0x30,0xAC,0x37,}},
- {0x025C,4,{0x81,0x30,0xAC,0x38,}},
- {0x025D,4,{0x81,0x30,0xAC,0x39,}},
- {0x025E,4,{0x81,0x30,0xAD,0x30,}},
- {0x025F,4,{0x81,0x30,0xAD,0x31,}},
- {0x0260,4,{0x81,0x30,0xAD,0x32,}},
- {0x0261,2,{0xA8,0xC0,0x00,0x00,}},
- {0x0262,4,{0x81,0x30,0xAD,0x33,}},
- {0x0263,4,{0x81,0x30,0xAD,0x34,}},
- {0x0264,4,{0x81,0x30,0xAD,0x35,}},
- {0x0265,4,{0x81,0x30,0xAD,0x36,}},
- {0x0266,4,{0x81,0x30,0xAD,0x37,}},
- {0x0267,4,{0x81,0x30,0xAD,0x38,}},
- {0x0268,4,{0x81,0x30,0xAD,0x39,}},
- {0x0269,4,{0x81,0x30,0xAE,0x30,}},
- {0x026A,4,{0x81,0x30,0xAE,0x31,}},
- {0x026B,4,{0x81,0x30,0xAE,0x32,}},
- {0x026C,4,{0x81,0x30,0xAE,0x33,}},
- {0x026D,4,{0x81,0x30,0xAE,0x34,}},
- {0x026E,4,{0x81,0x30,0xAE,0x35,}},
- {0x026F,4,{0x81,0x30,0xAE,0x36,}},
- {0x0270,4,{0x81,0x30,0xAE,0x37,}},
- {0x0271,4,{0x81,0x30,0xAE,0x38,}},
- {0x0272,4,{0x81,0x30,0xAE,0x39,}},
- {0x0273,4,{0x81,0x30,0xAF,0x30,}},
- {0x0274,4,{0x81,0x30,0xAF,0x31,}},
- {0x0275,4,{0x81,0x30,0xAF,0x32,}},
- {0x0276,4,{0x81,0x30,0xAF,0x33,}},
- {0x0277,4,{0x81,0x30,0xAF,0x34,}},
- {0x0278,4,{0x81,0x30,0xAF,0x35,}},
- {0x0279,4,{0x81,0x30,0xAF,0x36,}},
- {0x027A,4,{0x81,0x30,0xAF,0x37,}},
- {0x027B,4,{0x81,0x30,0xAF,0x38,}},
- {0x027C,4,{0x81,0x30,0xAF,0x39,}},
- {0x027D,4,{0x81,0x30,0xB0,0x30,}},
- {0x027E,4,{0x81,0x30,0xB0,0x31,}},
- {0x027F,4,{0x81,0x30,0xB0,0x32,}},
- {0x0280,4,{0x81,0x30,0xB0,0x33,}},
- {0x0281,4,{0x81,0x30,0xB0,0x34,}},
- {0x0282,4,{0x81,0x30,0xB0,0x35,}},
- {0x0283,4,{0x81,0x30,0xB0,0x36,}},
- {0x0284,4,{0x81,0x30,0xB0,0x37,}},
- {0x0285,4,{0x81,0x30,0xB0,0x38,}},
- {0x0286,4,{0x81,0x30,0xB0,0x39,}},
- {0x0287,4,{0x81,0x30,0xB1,0x30,}},
- {0x0288,4,{0x81,0x30,0xB1,0x31,}},
- {0x0289,4,{0x81,0x30,0xB1,0x32,}},
- {0x028A,4,{0x81,0x30,0xB1,0x33,}},
- {0x028B,4,{0x81,0x30,0xB1,0x34,}},
- {0x028C,4,{0x81,0x30,0xB1,0x35,}},
- {0x028D,4,{0x81,0x30,0xB1,0x36,}},
- {0x028E,4,{0x81,0x30,0xB1,0x37,}},
- {0x028F,4,{0x81,0x30,0xB1,0x38,}},
- {0x0290,4,{0x81,0x30,0xB1,0x39,}},
- {0x0291,4,{0x81,0x30,0xB2,0x30,}},
- {0x0292,4,{0x81,0x30,0xB2,0x31,}},
- {0x0293,4,{0x81,0x30,0xB2,0x32,}},
- {0x0294,4,{0x81,0x30,0xB2,0x33,}},
- {0x0295,4,{0x81,0x30,0xB2,0x34,}},
- {0x0296,4,{0x81,0x30,0xB2,0x35,}},
- {0x0297,4,{0x81,0x30,0xB2,0x36,}},
- {0x0298,4,{0x81,0x30,0xB2,0x37,}},
- {0x0299,4,{0x81,0x30,0xB2,0x38,}},
- {0x029A,4,{0x81,0x30,0xB2,0x39,}},
- {0x029B,4,{0x81,0x30,0xB3,0x30,}},
- {0x029C,4,{0x81,0x30,0xB3,0x31,}},
- {0x029D,4,{0x81,0x30,0xB3,0x32,}},
- {0x029E,4,{0x81,0x30,0xB3,0x33,}},
- {0x029F,4,{0x81,0x30,0xB3,0x34,}},
- {0x02A0,4,{0x81,0x30,0xB3,0x35,}},
- {0x02A1,4,{0x81,0x30,0xB3,0x36,}},
- {0x02A2,4,{0x81,0x30,0xB3,0x37,}},
- {0x02A3,4,{0x81,0x30,0xB3,0x38,}},
- {0x02A4,4,{0x81,0x30,0xB3,0x39,}},
- {0x02A5,4,{0x81,0x30,0xB4,0x30,}},
- {0x02A6,4,{0x81,0x30,0xB4,0x31,}},
- {0x02A7,4,{0x81,0x30,0xB4,0x32,}},
- {0x02A8,4,{0x81,0x30,0xB4,0x33,}},
- {0x02A9,4,{0x81,0x30,0xB4,0x34,}},
- {0x02AA,4,{0x81,0x30,0xB4,0x35,}},
- {0x02AB,4,{0x81,0x30,0xB4,0x36,}},
- {0x02AC,4,{0x81,0x30,0xB4,0x37,}},
- {0x02AD,4,{0x81,0x30,0xB4,0x38,}},
- {0x02AE,4,{0x81,0x30,0xB4,0x39,}},
- {0x02AF,4,{0x81,0x30,0xB5,0x30,}},
- {0x02B0,4,{0x81,0x30,0xB5,0x31,}},
- {0x02B1,4,{0x81,0x30,0xB5,0x32,}},
- {0x02B2,4,{0x81,0x30,0xB5,0x33,}},
- {0x02B3,4,{0x81,0x30,0xB5,0x34,}},
- {0x02B4,4,{0x81,0x30,0xB5,0x35,}},
- {0x02B5,4,{0x81,0x30,0xB5,0x36,}},
- {0x02B6,4,{0x81,0x30,0xB5,0x37,}},
- {0x02B7,4,{0x81,0x30,0xB5,0x38,}},
- {0x02B8,4,{0x81,0x30,0xB5,0x39,}},
- {0x02B9,4,{0x81,0x30,0xB6,0x30,}},
- {0x02BA,4,{0x81,0x30,0xB6,0x31,}},
- {0x02BB,4,{0x81,0x30,0xB6,0x32,}},
- {0x02BC,4,{0x81,0x30,0xB6,0x33,}},
- {0x02BD,4,{0x81,0x30,0xB6,0x34,}},
- {0x02BE,4,{0x81,0x30,0xB6,0x35,}},
- {0x02BF,4,{0x81,0x30,0xB6,0x36,}},
- {0x02C0,4,{0x81,0x30,0xB6,0x37,}},
- {0x02C1,4,{0x81,0x30,0xB6,0x38,}},
- {0x02C2,4,{0x81,0x30,0xB6,0x39,}},
- {0x02C3,4,{0x81,0x30,0xB7,0x30,}},
- {0x02C4,4,{0x81,0x30,0xB7,0x31,}},
- {0x02C5,4,{0x81,0x30,0xB7,0x32,}},
- {0x02C6,4,{0x81,0x30,0xB7,0x33,}},
- {0x02C7,2,{0xA1,0xA6,0x00,0x00,}},
- {0x02C8,4,{0x81,0x30,0xB7,0x34,}},
- {0x02C9,2,{0xA1,0xA5,0x00,0x00,}},
- {0x02CA,2,{0xA8,0x40,0x00,0x00,}},
- {0x02CB,2,{0xA8,0x41,0x00,0x00,}},
- {0x02CC,4,{0x81,0x30,0xB7,0x35,}},
- {0x02CD,4,{0x81,0x30,0xB7,0x36,}},
- {0x02CE,4,{0x81,0x30,0xB7,0x37,}},
- {0x02CF,4,{0x81,0x30,0xB7,0x38,}},
- {0x02D0,4,{0x81,0x30,0xB7,0x39,}},
- {0x02D1,4,{0x81,0x30,0xB8,0x30,}},
- {0x02D2,4,{0x81,0x30,0xB8,0x31,}},
- {0x02D3,4,{0x81,0x30,0xB8,0x32,}},
- {0x02D4,4,{0x81,0x30,0xB8,0x33,}},
- {0x02D5,4,{0x81,0x30,0xB8,0x34,}},
- {0x02D6,4,{0x81,0x30,0xB8,0x35,}},
- {0x02D7,4,{0x81,0x30,0xB8,0x36,}},
- {0x02D8,4,{0x81,0x30,0xB8,0x37,}},
- {0x02D9,2,{0xA8,0x42,0x00,0x00,}},
- {0x02DA,4,{0x81,0x30,0xB8,0x38,}},
- {0x02DB,4,{0x81,0x30,0xB8,0x39,}},
- {0x02DC,4,{0x81,0x30,0xB9,0x30,}},
- {0x02DD,4,{0x81,0x30,0xB9,0x31,}},
- {0x02DE,4,{0x81,0x30,0xB9,0x32,}},
- {0x02DF,4,{0x81,0x30,0xB9,0x33,}},
- {0x02E0,4,{0x81,0x30,0xB9,0x34,}},
- {0x02E1,4,{0x81,0x30,0xB9,0x35,}},
- {0x02E2,4,{0x81,0x30,0xB9,0x36,}},
- {0x02E3,4,{0x81,0x30,0xB9,0x37,}},
- {0x02E4,4,{0x81,0x30,0xB9,0x38,}},
- {0x02E5,4,{0x81,0x30,0xB9,0x39,}},
- {0x02E6,4,{0x81,0x30,0xBA,0x30,}},
- {0x02E7,4,{0x81,0x30,0xBA,0x31,}},
- {0x02E8,4,{0x81,0x30,0xBA,0x32,}},
- {0x02E9,4,{0x81,0x30,0xBA,0x33,}},
- {0x02EA,4,{0x81,0x30,0xBA,0x34,}},
- {0x02EB,4,{0x81,0x30,0xBA,0x35,}},
- {0x02EC,4,{0x81,0x30,0xBA,0x36,}},
- {0x02ED,4,{0x81,0x30,0xBA,0x37,}},
- {0x02EE,4,{0x81,0x30,0xBA,0x38,}},
- {0x02EF,4,{0x81,0x30,0xBA,0x39,}},
- {0x02F0,4,{0x81,0x30,0xBB,0x30,}},
- {0x02F1,4,{0x81,0x30,0xBB,0x31,}},
- {0x02F2,4,{0x81,0x30,0xBB,0x32,}},
- {0x02F3,4,{0x81,0x30,0xBB,0x33,}},
- {0x02F4,4,{0x81,0x30,0xBB,0x34,}},
- {0x02F5,4,{0x81,0x30,0xBB,0x35,}},
- {0x02F6,4,{0x81,0x30,0xBB,0x36,}},
- {0x02F7,4,{0x81,0x30,0xBB,0x37,}},
- {0x02F8,4,{0x81,0x30,0xBB,0x38,}},
- {0x02F9,4,{0x81,0x30,0xBB,0x39,}},
- {0x02FA,4,{0x81,0x30,0xBC,0x30,}},
- {0x02FB,4,{0x81,0x30,0xBC,0x31,}},
- {0x02FC,4,{0x81,0x30,0xBC,0x32,}},
- {0x02FD,4,{0x81,0x30,0xBC,0x33,}},
- {0x02FE,4,{0x81,0x30,0xBC,0x34,}},
- {0x02FF,4,{0x81,0x30,0xBC,0x35,}},
- {0x0300,4,{0x81,0x30,0xBC,0x36,}},
- {0x0301,4,{0x81,0x30,0xBC,0x37,}},
- {0x0302,4,{0x81,0x30,0xBC,0x38,}},
- {0x0303,4,{0x81,0x30,0xBC,0x39,}},
- {0x0304,4,{0x81,0x30,0xBD,0x30,}},
- {0x0305,4,{0x81,0x30,0xBD,0x31,}},
- {0x0306,4,{0x81,0x30,0xBD,0x32,}},
- {0x0307,4,{0x81,0x30,0xBD,0x33,}},
- {0x0308,4,{0x81,0x30,0xBD,0x34,}},
- {0x0309,4,{0x81,0x30,0xBD,0x35,}},
- {0x030A,4,{0x81,0x30,0xBD,0x36,}},
- {0x030B,4,{0x81,0x30,0xBD,0x37,}},
- {0x030C,4,{0x81,0x30,0xBD,0x38,}},
- {0x030D,4,{0x81,0x30,0xBD,0x39,}},
- {0x030E,4,{0x81,0x30,0xBE,0x30,}},
- {0x030F,4,{0x81,0x30,0xBE,0x31,}},
- {0x0310,4,{0x81,0x30,0xBE,0x32,}},
- {0x0311,4,{0x81,0x30,0xBE,0x33,}},
- {0x0312,4,{0x81,0x30,0xBE,0x34,}},
- {0x0313,4,{0x81,0x30,0xBE,0x35,}},
- {0x0314,4,{0x81,0x30,0xBE,0x36,}},
- {0x0315,4,{0x81,0x30,0xBE,0x37,}},
- {0x0316,4,{0x81,0x30,0xBE,0x38,}},
- {0x0317,4,{0x81,0x30,0xBE,0x39,}},
- {0x0318,4,{0x81,0x30,0xBF,0x30,}},
- {0x0319,4,{0x81,0x30,0xBF,0x31,}},
- {0x031A,4,{0x81,0x30,0xBF,0x32,}},
- {0x031B,4,{0x81,0x30,0xBF,0x33,}},
- {0x031C,4,{0x81,0x30,0xBF,0x34,}},
- {0x031D,4,{0x81,0x30,0xBF,0x35,}},
- {0x031E,4,{0x81,0x30,0xBF,0x36,}},
- {0x031F,4,{0x81,0x30,0xBF,0x37,}},
- {0x0320,4,{0x81,0x30,0xBF,0x38,}},
- {0x0321,4,{0x81,0x30,0xBF,0x39,}},
- {0x0322,4,{0x81,0x30,0xC0,0x30,}},
- {0x0323,4,{0x81,0x30,0xC0,0x31,}},
- {0x0324,4,{0x81,0x30,0xC0,0x32,}},
- {0x0325,4,{0x81,0x30,0xC0,0x33,}},
- {0x0326,4,{0x81,0x30,0xC0,0x34,}},
- {0x0327,4,{0x81,0x30,0xC0,0x35,}},
- {0x0328,4,{0x81,0x30,0xC0,0x36,}},
- {0x0329,4,{0x81,0x30,0xC0,0x37,}},
- {0x032A,4,{0x81,0x30,0xC0,0x38,}},
- {0x032B,4,{0x81,0x30,0xC0,0x39,}},
- {0x032C,4,{0x81,0x30,0xC1,0x30,}},
- {0x032D,4,{0x81,0x30,0xC1,0x31,}},
- {0x032E,4,{0x81,0x30,0xC1,0x32,}},
- {0x032F,4,{0x81,0x30,0xC1,0x33,}},
- {0x0330,4,{0x81,0x30,0xC1,0x34,}},
- {0x0331,4,{0x81,0x30,0xC1,0x35,}},
- {0x0332,4,{0x81,0x30,0xC1,0x36,}},
- {0x0333,4,{0x81,0x30,0xC1,0x37,}},
- {0x0334,4,{0x81,0x30,0xC1,0x38,}},
- {0x0335,4,{0x81,0x30,0xC1,0x39,}},
- {0x0336,4,{0x81,0x30,0xC2,0x30,}},
- {0x0337,4,{0x81,0x30,0xC2,0x31,}},
- {0x0338,4,{0x81,0x30,0xC2,0x32,}},
- {0x0339,4,{0x81,0x30,0xC2,0x33,}},
- {0x033A,4,{0x81,0x30,0xC2,0x34,}},
- {0x033B,4,{0x81,0x30,0xC2,0x35,}},
- {0x033C,4,{0x81,0x30,0xC2,0x36,}},
- {0x033D,4,{0x81,0x30,0xC2,0x37,}},
- {0x033E,4,{0x81,0x30,0xC2,0x38,}},
- {0x033F,4,{0x81,0x30,0xC2,0x39,}},
- {0x0340,4,{0x81,0x30,0xC3,0x30,}},
- {0x0341,4,{0x81,0x30,0xC3,0x31,}},
- {0x0342,4,{0x81,0x30,0xC3,0x32,}},
- {0x0343,4,{0x81,0x30,0xC3,0x33,}},
- {0x0344,4,{0x81,0x30,0xC3,0x34,}},
- {0x0345,4,{0x81,0x30,0xC3,0x35,}},
- {0x0346,4,{0x81,0x30,0xC3,0x36,}},
- {0x0347,4,{0x81,0x30,0xC3,0x37,}},
- {0x0348,4,{0x81,0x30,0xC3,0x38,}},
- {0x0349,4,{0x81,0x30,0xC3,0x39,}},
- {0x034A,4,{0x81,0x30,0xC4,0x30,}},
- {0x034B,4,{0x81,0x30,0xC4,0x31,}},
- {0x034C,4,{0x81,0x30,0xC4,0x32,}},
- {0x034D,4,{0x81,0x30,0xC4,0x33,}},
- {0x034E,4,{0x81,0x30,0xC4,0x34,}},
- {0x034F,4,{0x81,0x30,0xC4,0x35,}},
- {0x0350,4,{0x81,0x30,0xC4,0x36,}},
- {0x0351,4,{0x81,0x30,0xC4,0x37,}},
- {0x0352,4,{0x81,0x30,0xC4,0x38,}},
- {0x0353,4,{0x81,0x30,0xC4,0x39,}},
- {0x0354,4,{0x81,0x30,0xC5,0x30,}},
- {0x0355,4,{0x81,0x30,0xC5,0x31,}},
- {0x0356,4,{0x81,0x30,0xC5,0x32,}},
- {0x0357,4,{0x81,0x30,0xC5,0x33,}},
- {0x0358,4,{0x81,0x30,0xC5,0x34,}},
- {0x0359,4,{0x81,0x30,0xC5,0x35,}},
- {0x035A,4,{0x81,0x30,0xC5,0x36,}},
- {0x035B,4,{0x81,0x30,0xC5,0x37,}},
- {0x035C,4,{0x81,0x30,0xC5,0x38,}},
- {0x035D,4,{0x81,0x30,0xC5,0x39,}},
- {0x035E,4,{0x81,0x30,0xC6,0x30,}},
- {0x035F,4,{0x81,0x30,0xC6,0x31,}},
- {0x0360,4,{0x81,0x30,0xC6,0x32,}},
- {0x0361,4,{0x81,0x30,0xC6,0x33,}},
- {0x0362,4,{0x81,0x30,0xC6,0x34,}},
- {0x0363,4,{0x81,0x30,0xC6,0x35,}},
- {0x0364,4,{0x81,0x30,0xC6,0x36,}},
- {0x0365,4,{0x81,0x30,0xC6,0x37,}},
- {0x0366,4,{0x81,0x30,0xC6,0x38,}},
- {0x0367,4,{0x81,0x30,0xC6,0x39,}},
- {0x0368,4,{0x81,0x30,0xC7,0x30,}},
- {0x0369,4,{0x81,0x30,0xC7,0x31,}},
- {0x036A,4,{0x81,0x30,0xC7,0x32,}},
- {0x036B,4,{0x81,0x30,0xC7,0x33,}},
- {0x036C,4,{0x81,0x30,0xC7,0x34,}},
- {0x036D,4,{0x81,0x30,0xC7,0x35,}},
- {0x036E,4,{0x81,0x30,0xC7,0x36,}},
- {0x036F,4,{0x81,0x30,0xC7,0x37,}},
- {0x0370,4,{0x81,0x30,0xC7,0x38,}},
- {0x0371,4,{0x81,0x30,0xC7,0x39,}},
- {0x0372,4,{0x81,0x30,0xC8,0x30,}},
- {0x0373,4,{0x81,0x30,0xC8,0x31,}},
- {0x0374,4,{0x81,0x30,0xC8,0x32,}},
- {0x0375,4,{0x81,0x30,0xC8,0x33,}},
- {0x0376,4,{0x81,0x30,0xC8,0x34,}},
- {0x0377,4,{0x81,0x30,0xC8,0x35,}},
- {0x0378,4,{0x81,0x30,0xC8,0x36,}},
- {0x0379,4,{0x81,0x30,0xC8,0x37,}},
- {0x037A,4,{0x81,0x30,0xC8,0x38,}},
- {0x037B,4,{0x81,0x30,0xC8,0x39,}},
- {0x037C,4,{0x81,0x30,0xC9,0x30,}},
- {0x037D,4,{0x81,0x30,0xC9,0x31,}},
- {0x037E,4,{0x81,0x30,0xC9,0x32,}},
- {0x037F,4,{0x81,0x30,0xC9,0x33,}},
- {0x0380,4,{0x81,0x30,0xC9,0x34,}},
- {0x0381,4,{0x81,0x30,0xC9,0x35,}},
- {0x0382,4,{0x81,0x30,0xC9,0x36,}},
- {0x0383,4,{0x81,0x30,0xC9,0x37,}},
- {0x0384,4,{0x81,0x30,0xC9,0x38,}},
- {0x0385,4,{0x81,0x30,0xC9,0x39,}},
- {0x0386,4,{0x81,0x30,0xCA,0x30,}},
- {0x0387,4,{0x81,0x30,0xCA,0x31,}},
- {0x0388,4,{0x81,0x30,0xCA,0x32,}},
- {0x0389,4,{0x81,0x30,0xCA,0x33,}},
- {0x038A,4,{0x81,0x30,0xCA,0x34,}},
- {0x038B,4,{0x81,0x30,0xCA,0x35,}},
- {0x038C,4,{0x81,0x30,0xCA,0x36,}},
- {0x038D,4,{0x81,0x30,0xCA,0x37,}},
- {0x038E,4,{0x81,0x30,0xCA,0x38,}},
- {0x038F,4,{0x81,0x30,0xCA,0x39,}},
- {0x0390,4,{0x81,0x30,0xCB,0x30,}},
- {0x0391,2,{0xA6,0xA1,0x00,0x00,}},
- {0x0392,2,{0xA6,0xA2,0x00,0x00,}},
- {0x0393,2,{0xA6,0xA3,0x00,0x00,}},
- {0x0394,2,{0xA6,0xA4,0x00,0x00,}},
- {0x0395,2,{0xA6,0xA5,0x00,0x00,}},
- {0x0396,2,{0xA6,0xA6,0x00,0x00,}},
- {0x0397,2,{0xA6,0xA7,0x00,0x00,}},
- {0x0398,2,{0xA6,0xA8,0x00,0x00,}},
- {0x0399,2,{0xA6,0xA9,0x00,0x00,}},
- {0x039A,2,{0xA6,0xAA,0x00,0x00,}},
- {0x039B,2,{0xA6,0xAB,0x00,0x00,}},
- {0x039C,2,{0xA6,0xAC,0x00,0x00,}},
- {0x039D,2,{0xA6,0xAD,0x00,0x00,}},
- {0x039E,2,{0xA6,0xAE,0x00,0x00,}},
- {0x039F,2,{0xA6,0xAF,0x00,0x00,}},
- {0x03A0,2,{0xA6,0xB0,0x00,0x00,}},
- {0x03A1,2,{0xA6,0xB1,0x00,0x00,}},
- {0x03A2,4,{0x81,0x30,0xCB,0x31,}},
- {0x03A3,2,{0xA6,0xB2,0x00,0x00,}},
- {0x03A4,2,{0xA6,0xB3,0x00,0x00,}},
- {0x03A5,2,{0xA6,0xB4,0x00,0x00,}},
- {0x03A6,2,{0xA6,0xB5,0x00,0x00,}},
- {0x03A7,2,{0xA6,0xB6,0x00,0x00,}},
- {0x03A8,2,{0xA6,0xB7,0x00,0x00,}},
- {0x03A9,2,{0xA6,0xB8,0x00,0x00,}},
- {0x03AA,4,{0x81,0x30,0xCB,0x32,}},
- {0x03AB,4,{0x81,0x30,0xCB,0x33,}},
- {0x03AC,4,{0x81,0x30,0xCB,0x34,}},
- {0x03AD,4,{0x81,0x30,0xCB,0x35,}},
- {0x03AE,4,{0x81,0x30,0xCB,0x36,}},
- {0x03AF,4,{0x81,0x30,0xCB,0x37,}},
- {0x03B0,4,{0x81,0x30,0xCB,0x38,}},
- {0x03B1,2,{0xA6,0xC1,0x00,0x00,}},
- {0x03B2,2,{0xA6,0xC2,0x00,0x00,}},
- {0x03B3,2,{0xA6,0xC3,0x00,0x00,}},
- {0x03B4,2,{0xA6,0xC4,0x00,0x00,}},
- {0x03B5,2,{0xA6,0xC5,0x00,0x00,}},
- {0x03B6,2,{0xA6,0xC6,0x00,0x00,}},
- {0x03B7,2,{0xA6,0xC7,0x00,0x00,}},
- {0x03B8,2,{0xA6,0xC8,0x00,0x00,}},
- {0x03B9,2,{0xA6,0xC9,0x00,0x00,}},
- {0x03BA,2,{0xA6,0xCA,0x00,0x00,}},
- {0x03BB,2,{0xA6,0xCB,0x00,0x00,}},
- {0x03BC,2,{0xA6,0xCC,0x00,0x00,}},
- {0x03BD,2,{0xA6,0xCD,0x00,0x00,}},
- {0x03BE,2,{0xA6,0xCE,0x00,0x00,}},
- {0x03BF,2,{0xA6,0xCF,0x00,0x00,}},
- {0x03C0,2,{0xA6,0xD0,0x00,0x00,}},
- {0x03C1,2,{0xA6,0xD1,0x00,0x00,}},
- {0x03C2,4,{0x81,0x30,0xCB,0x39,}},
- {0x03C3,2,{0xA6,0xD2,0x00,0x00,}},
- {0x03C4,2,{0xA6,0xD3,0x00,0x00,}},
- {0x03C5,2,{0xA6,0xD4,0x00,0x00,}},
- {0x03C6,2,{0xA6,0xD5,0x00,0x00,}},
- {0x03C7,2,{0xA6,0xD6,0x00,0x00,}},
- {0x03C8,2,{0xA6,0xD7,0x00,0x00,}},
- {0x03C9,2,{0xA6,0xD8,0x00,0x00,}},
- {0x03CA,4,{0x81,0x30,0xCC,0x30,}},
- {0x03CB,4,{0x81,0x30,0xCC,0x31,}},
- {0x03CC,4,{0x81,0x30,0xCC,0x32,}},
- {0x03CD,4,{0x81,0x30,0xCC,0x33,}},
- {0x03CE,4,{0x81,0x30,0xCC,0x34,}},
- {0x03CF,4,{0x81,0x30,0xCC,0x35,}},
- {0x03D0,4,{0x81,0x30,0xCC,0x36,}},
- {0x03D1,4,{0x81,0x30,0xCC,0x37,}},
- {0x03D2,4,{0x81,0x30,0xCC,0x38,}},
- {0x03D3,4,{0x81,0x30,0xCC,0x39,}},
- {0x03D4,4,{0x81,0x30,0xCD,0x30,}},
- {0x03D5,4,{0x81,0x30,0xCD,0x31,}},
- {0x03D6,4,{0x81,0x30,0xCD,0x32,}},
- {0x03D7,4,{0x81,0x30,0xCD,0x33,}},
- {0x03D8,4,{0x81,0x30,0xCD,0x34,}},
- {0x03D9,4,{0x81,0x30,0xCD,0x35,}},
- {0x03DA,4,{0x81,0x30,0xCD,0x36,}},
- {0x03DB,4,{0x81,0x30,0xCD,0x37,}},
- {0x03DC,4,{0x81,0x30,0xCD,0x38,}},
- {0x03DD,4,{0x81,0x30,0xCD,0x39,}},
- {0x03DE,4,{0x81,0x30,0xCE,0x30,}},
- {0x03DF,4,{0x81,0x30,0xCE,0x31,}},
- {0x03E0,4,{0x81,0x30,0xCE,0x32,}},
- {0x03E1,4,{0x81,0x30,0xCE,0x33,}},
- {0x03E2,4,{0x81,0x30,0xCE,0x34,}},
- {0x03E3,4,{0x81,0x30,0xCE,0x35,}},
- {0x03E4,4,{0x81,0x30,0xCE,0x36,}},
- {0x03E5,4,{0x81,0x30,0xCE,0x37,}},
- {0x03E6,4,{0x81,0x30,0xCE,0x38,}},
- {0x03E7,4,{0x81,0x30,0xCE,0x39,}},
- {0x03E8,4,{0x81,0x30,0xCF,0x30,}},
- {0x03E9,4,{0x81,0x30,0xCF,0x31,}},
- {0x03EA,4,{0x81,0x30,0xCF,0x32,}},
- {0x03EB,4,{0x81,0x30,0xCF,0x33,}},
- {0x03EC,4,{0x81,0x30,0xCF,0x34,}},
- {0x03ED,4,{0x81,0x30,0xCF,0x35,}},
- {0x03EE,4,{0x81,0x30,0xCF,0x36,}},
- {0x03EF,4,{0x81,0x30,0xCF,0x37,}},
- {0x03F0,4,{0x81,0x30,0xCF,0x38,}},
- {0x03F1,4,{0x81,0x30,0xCF,0x39,}},
- {0x03F2,4,{0x81,0x30,0xD0,0x30,}},
- {0x03F3,4,{0x81,0x30,0xD0,0x31,}},
- {0x03F4,4,{0x81,0x30,0xD0,0x32,}},
- {0x03F5,4,{0x81,0x30,0xD0,0x33,}},
- {0x03F6,4,{0x81,0x30,0xD0,0x34,}},
- {0x03F7,4,{0x81,0x30,0xD0,0x35,}},
- {0x03F8,4,{0x81,0x30,0xD0,0x36,}},
- {0x03F9,4,{0x81,0x30,0xD0,0x37,}},
- {0x03FA,4,{0x81,0x30,0xD0,0x38,}},
- {0x03FB,4,{0x81,0x30,0xD0,0x39,}},
- {0x03FC,4,{0x81,0x30,0xD1,0x30,}},
- {0x03FD,4,{0x81,0x30,0xD1,0x31,}},
- {0x03FE,4,{0x81,0x30,0xD1,0x32,}},
- {0x03FF,4,{0x81,0x30,0xD1,0x33,}},
- {0x0400,4,{0x81,0x30,0xD1,0x34,}},
- {0x0401,2,{0xA7,0xA7,0x00,0x00,}},
- {0x0402,4,{0x81,0x30,0xD1,0x35,}},
- {0x0403,4,{0x81,0x30,0xD1,0x36,}},
- {0x0404,4,{0x81,0x30,0xD1,0x37,}},
- {0x0405,4,{0x81,0x30,0xD1,0x38,}},
- {0x0406,4,{0x81,0x30,0xD1,0x39,}},
- {0x0407,4,{0x81,0x30,0xD2,0x30,}},
- {0x0408,4,{0x81,0x30,0xD2,0x31,}},
- {0x0409,4,{0x81,0x30,0xD2,0x32,}},
- {0x040A,4,{0x81,0x30,0xD2,0x33,}},
- {0x040B,4,{0x81,0x30,0xD2,0x34,}},
- {0x040C,4,{0x81,0x30,0xD2,0x35,}},
- {0x040D,4,{0x81,0x30,0xD2,0x36,}},
- {0x040E,4,{0x81,0x30,0xD2,0x37,}},
- {0x040F,4,{0x81,0x30,0xD2,0x38,}},
- {0x0410,2,{0xA7,0xA1,0x00,0x00,}},
- {0x0411,2,{0xA7,0xA2,0x00,0x00,}},
- {0x0412,2,{0xA7,0xA3,0x00,0x00,}},
- {0x0413,2,{0xA7,0xA4,0x00,0x00,}},
- {0x0414,2,{0xA7,0xA5,0x00,0x00,}},
- {0x0415,2,{0xA7,0xA6,0x00,0x00,}},
- {0x0416,2,{0xA7,0xA8,0x00,0x00,}},
- {0x0417,2,{0xA7,0xA9,0x00,0x00,}},
- {0x0418,2,{0xA7,0xAA,0x00,0x00,}},
- {0x0419,2,{0xA7,0xAB,0x00,0x00,}},
- {0x041A,2,{0xA7,0xAC,0x00,0x00,}},
- {0x041B,2,{0xA7,0xAD,0x00,0x00,}},
- {0x041C,2,{0xA7,0xAE,0x00,0x00,}},
- {0x041D,2,{0xA7,0xAF,0x00,0x00,}},
- {0x041E,2,{0xA7,0xB0,0x00,0x00,}},
- {0x041F,2,{0xA7,0xB1,0x00,0x00,}},
- {0x0420,2,{0xA7,0xB2,0x00,0x00,}},
- {0x0421,2,{0xA7,0xB3,0x00,0x00,}},
- {0x0422,2,{0xA7,0xB4,0x00,0x00,}},
- {0x0423,2,{0xA7,0xB5,0x00,0x00,}},
- {0x0424,2,{0xA7,0xB6,0x00,0x00,}},
- {0x0425,2,{0xA7,0xB7,0x00,0x00,}},
- {0x0426,2,{0xA7,0xB8,0x00,0x00,}},
- {0x0427,2,{0xA7,0xB9,0x00,0x00,}},
- {0x0428,2,{0xA7,0xBA,0x00,0x00,}},
- {0x0429,2,{0xA7,0xBB,0x00,0x00,}},
- {0x042A,2,{0xA7,0xBC,0x00,0x00,}},
- {0x042B,2,{0xA7,0xBD,0x00,0x00,}},
- {0x042C,2,{0xA7,0xBE,0x00,0x00,}},
- {0x042D,2,{0xA7,0xBF,0x00,0x00,}},
- {0x042E,2,{0xA7,0xC0,0x00,0x00,}},
- {0x042F,2,{0xA7,0xC1,0x00,0x00,}},
- {0x0430,2,{0xA7,0xD1,0x00,0x00,}},
- {0x0431,2,{0xA7,0xD2,0x00,0x00,}},
- {0x0432,2,{0xA7,0xD3,0x00,0x00,}},
- {0x0433,2,{0xA7,0xD4,0x00,0x00,}},
- {0x0434,2,{0xA7,0xD5,0x00,0x00,}},
- {0x0435,2,{0xA7,0xD6,0x00,0x00,}},
- {0x0436,2,{0xA7,0xD8,0x00,0x00,}},
- {0x0437,2,{0xA7,0xD9,0x00,0x00,}},
- {0x0438,2,{0xA7,0xDA,0x00,0x00,}},
- {0x0439,2,{0xA7,0xDB,0x00,0x00,}},
- {0x043A,2,{0xA7,0xDC,0x00,0x00,}},
- {0x043B,2,{0xA7,0xDD,0x00,0x00,}},
- {0x043C,2,{0xA7,0xDE,0x00,0x00,}},
- {0x043D,2,{0xA7,0xDF,0x00,0x00,}},
- {0x043E,2,{0xA7,0xE0,0x00,0x00,}},
- {0x043F,2,{0xA7,0xE1,0x00,0x00,}},
- {0x0440,2,{0xA7,0xE2,0x00,0x00,}},
- {0x0441,2,{0xA7,0xE3,0x00,0x00,}},
- {0x0442,2,{0xA7,0xE4,0x00,0x00,}},
- {0x0443,2,{0xA7,0xE5,0x00,0x00,}},
- {0x0444,2,{0xA7,0xE6,0x00,0x00,}},
- {0x0445,2,{0xA7,0xE7,0x00,0x00,}},
- {0x0446,2,{0xA7,0xE8,0x00,0x00,}},
- {0x0447,2,{0xA7,0xE9,0x00,0x00,}},
- {0x0448,2,{0xA7,0xEA,0x00,0x00,}},
- {0x0449,2,{0xA7,0xEB,0x00,0x00,}},
- {0x044A,2,{0xA7,0xEC,0x00,0x00,}},
- {0x044B,2,{0xA7,0xED,0x00,0x00,}},
- {0x044C,2,{0xA7,0xEE,0x00,0x00,}},
- {0x044D,2,{0xA7,0xEF,0x00,0x00,}},
- {0x044E,2,{0xA7,0xF0,0x00,0x00,}},
- {0x044F,2,{0xA7,0xF1,0x00,0x00,}},
- {0x0450,4,{0x81,0x30,0xD2,0x39,}},
- {0x0451,2,{0xA7,0xD7,0x00,0x00,}},
- {0x2010,2,{0xA9,0x5C,0x00,0x00,}},
- {0x2011,4,{0x81,0x36,0xA5,0x32,}},
- {0x2012,4,{0x81,0x36,0xA5,0x33,}},
- {0x2013,2,{0xA8,0x43,0x00,0x00,}},
- {0x2014,2,{0xA1,0xAA,0x00,0x00,}},
- {0x2015,2,{0xA8,0x44,0x00,0x00,}},
- {0x2016,2,{0xA1,0xAC,0x00,0x00,}},
- {0x2017,4,{0x81,0x36,0xA5,0x34,}},
- {0x2018,2,{0xA1,0xAE,0x00,0x00,}},
- {0x2019,2,{0xA1,0xAF,0x00,0x00,}},
- {0x201A,4,{0x81,0x36,0xA5,0x35,}},
- {0x201B,4,{0x81,0x36,0xA5,0x36,}},
- {0x201C,2,{0xA1,0xB0,0x00,0x00,}},
- {0x201D,2,{0xA1,0xB1,0x00,0x00,}},
- {0x201E,4,{0x81,0x36,0xA5,0x37,}},
- {0x201F,4,{0x81,0x36,0xA5,0x38,}},
- {0x2020,4,{0x81,0x36,0xA5,0x39,}},
- {0x2021,4,{0x81,0x36,0xA6,0x30,}},
- {0x2022,4,{0x81,0x36,0xA6,0x31,}},
- {0x2023,4,{0x81,0x36,0xA6,0x32,}},
- {0x2024,4,{0x81,0x36,0xA6,0x33,}},
- {0x2025,2,{0xA8,0x45,0x00,0x00,}},
- {0x2026,2,{0xA1,0xAD,0x00,0x00,}},
- {0x2027,4,{0x81,0x36,0xA6,0x34,}},
- {0x2028,4,{0x81,0x36,0xA6,0x35,}},
- {0x2029,4,{0x81,0x36,0xA6,0x36,}},
- {0x202A,4,{0x81,0x36,0xA6,0x37,}},
- {0x202B,4,{0x81,0x36,0xA6,0x38,}},
- {0x202C,4,{0x81,0x36,0xA6,0x39,}},
- {0x202D,4,{0x81,0x36,0xA7,0x30,}},
- {0x202E,4,{0x81,0x36,0xA7,0x31,}},
- {0x202F,4,{0x81,0x36,0xA7,0x32,}},
- {0x2030,2,{0xA1,0xEB,0x00,0x00,}},
- {0x2031,4,{0x81,0x36,0xA7,0x33,}},
- {0x2032,2,{0xA1,0xE4,0x00,0x00,}},
- {0x2033,2,{0xA1,0xE5,0x00,0x00,}},
- {0x2034,4,{0x81,0x36,0xA7,0x34,}},
- {0x2035,2,{0xA8,0x46,0x00,0x00,}},
- {0x2036,4,{0x81,0x36,0xA7,0x35,}},
- {0x2037,4,{0x81,0x36,0xA7,0x36,}},
- {0x2038,4,{0x81,0x36,0xA7,0x37,}},
- {0x2039,4,{0x81,0x36,0xA7,0x38,}},
- {0x203A,4,{0x81,0x36,0xA7,0x39,}},
- {0x203B,2,{0xA1,0xF9,0x00,0x00,}},
- {0x203C,4,{0x81,0x36,0xA8,0x30,}},
- {0x203D,4,{0x81,0x36,0xA8,0x31,}},
- {0x203E,4,{0x81,0x36,0xA8,0x32,}},
- {0x203F,4,{0x81,0x36,0xA8,0x33,}},
- {0x2040,4,{0x81,0x36,0xA8,0x34,}},
- {0x2041,4,{0x81,0x36,0xA8,0x35,}},
- {0x2042,4,{0x81,0x36,0xA8,0x36,}},
- {0x2043,4,{0x81,0x36,0xA8,0x37,}},
- {0x2044,4,{0x81,0x36,0xA8,0x38,}},
- {0x2045,4,{0x81,0x36,0xA8,0x39,}},
- {0x2046,4,{0x81,0x36,0xA9,0x30,}},
- {0x2047,4,{0x81,0x36,0xA9,0x31,}},
- {0x2048,4,{0x81,0x36,0xA9,0x32,}},
- {0x2049,4,{0x81,0x36,0xA9,0x33,}},
- {0x204A,4,{0x81,0x36,0xA9,0x34,}},
- {0x204B,4,{0x81,0x36,0xA9,0x35,}},
- {0x204C,4,{0x81,0x36,0xA9,0x36,}},
- {0x204D,4,{0x81,0x36,0xA9,0x37,}},
- {0x204E,4,{0x81,0x36,0xA9,0x38,}},
- {0x204F,4,{0x81,0x36,0xA9,0x39,}},
- {0x2050,4,{0x81,0x36,0xAA,0x30,}},
- {0x2051,4,{0x81,0x36,0xAA,0x31,}},
- {0x2052,4,{0x81,0x36,0xAA,0x32,}},
- {0x2053,4,{0x81,0x36,0xAA,0x33,}},
- {0x2054,4,{0x81,0x36,0xAA,0x34,}},
- {0x2055,4,{0x81,0x36,0xAA,0x35,}},
- {0x2056,4,{0x81,0x36,0xAA,0x36,}},
- {0x2057,4,{0x81,0x36,0xAA,0x37,}},
- {0x2058,4,{0x81,0x36,0xAA,0x38,}},
- {0x2059,4,{0x81,0x36,0xAA,0x39,}},
- {0x205A,4,{0x81,0x36,0xAB,0x30,}},
- {0x205B,4,{0x81,0x36,0xAB,0x31,}},
- {0x205C,4,{0x81,0x36,0xAB,0x32,}},
- {0x205D,4,{0x81,0x36,0xAB,0x33,}},
- {0x205E,4,{0x81,0x36,0xAB,0x34,}},
- {0x205F,4,{0x81,0x36,0xAB,0x35,}},
- {0x2060,4,{0x81,0x36,0xAB,0x36,}},
- {0x2061,4,{0x81,0x36,0xAB,0x37,}},
- {0x2062,4,{0x81,0x36,0xAB,0x38,}},
- {0x2063,4,{0x81,0x36,0xAB,0x39,}},
- {0x2064,4,{0x81,0x36,0xAC,0x30,}},
- {0x2065,4,{0x81,0x36,0xAC,0x31,}},
- {0x2066,4,{0x81,0x36,0xAC,0x32,}},
- {0x2067,4,{0x81,0x36,0xAC,0x33,}},
- {0x2068,4,{0x81,0x36,0xAC,0x34,}},
- {0x2069,4,{0x81,0x36,0xAC,0x35,}},
- {0x206A,4,{0x81,0x36,0xAC,0x36,}},
- {0x206B,4,{0x81,0x36,0xAC,0x37,}},
- {0x206C,4,{0x81,0x36,0xAC,0x38,}},
- {0x206D,4,{0x81,0x36,0xAC,0x39,}},
- {0x206E,4,{0x81,0x36,0xAD,0x30,}},
- {0x206F,4,{0x81,0x36,0xAD,0x31,}},
- {0x2070,4,{0x81,0x36,0xAD,0x32,}},
- {0x2071,4,{0x81,0x36,0xAD,0x33,}},
- {0x2072,4,{0x81,0x36,0xAD,0x34,}},
- {0x2073,4,{0x81,0x36,0xAD,0x35,}},
- {0x2074,4,{0x81,0x36,0xAD,0x36,}},
- {0x2075,4,{0x81,0x36,0xAD,0x37,}},
- {0x2076,4,{0x81,0x36,0xAD,0x38,}},
- {0x2077,4,{0x81,0x36,0xAD,0x39,}},
- {0x2078,4,{0x81,0x36,0xAE,0x30,}},
- {0x2079,4,{0x81,0x36,0xAE,0x31,}},
- {0x207A,4,{0x81,0x36,0xAE,0x32,}},
- {0x207B,4,{0x81,0x36,0xAE,0x33,}},
- {0x207C,4,{0x81,0x36,0xAE,0x34,}},
- {0x207D,4,{0x81,0x36,0xAE,0x35,}},
- {0x207E,4,{0x81,0x36,0xAE,0x36,}},
- {0x207F,4,{0x81,0x36,0xAE,0x37,}},
- {0x2080,4,{0x81,0x36,0xAE,0x38,}},
- {0x2081,4,{0x81,0x36,0xAE,0x39,}},
- {0x2082,4,{0x81,0x36,0xAF,0x30,}},
- {0x2083,4,{0x81,0x36,0xAF,0x31,}},
- {0x2084,4,{0x81,0x36,0xAF,0x32,}},
- {0x2085,4,{0x81,0x36,0xAF,0x33,}},
- {0x2086,4,{0x81,0x36,0xAF,0x34,}},
- {0x2087,4,{0x81,0x36,0xAF,0x35,}},
- {0x2088,4,{0x81,0x36,0xAF,0x36,}},
- {0x2089,4,{0x81,0x36,0xAF,0x37,}},
- {0x208A,4,{0x81,0x36,0xAF,0x38,}},
- {0x208B,4,{0x81,0x36,0xAF,0x39,}},
- {0x208C,4,{0x81,0x36,0xB0,0x30,}},
- {0x208D,4,{0x81,0x36,0xB0,0x31,}},
- {0x208E,4,{0x81,0x36,0xB0,0x32,}},
- {0x208F,4,{0x81,0x36,0xB0,0x33,}},
- {0x2090,4,{0x81,0x36,0xB0,0x34,}},
- {0x2091,4,{0x81,0x36,0xB0,0x35,}},
- {0x2092,4,{0x81,0x36,0xB0,0x36,}},
- {0x2093,4,{0x81,0x36,0xB0,0x37,}},
- {0x2094,4,{0x81,0x36,0xB0,0x38,}},
- {0x2095,4,{0x81,0x36,0xB0,0x39,}},
- {0x2096,4,{0x81,0x36,0xB1,0x30,}},
- {0x2097,4,{0x81,0x36,0xB1,0x31,}},
- {0x2098,4,{0x81,0x36,0xB1,0x32,}},
- {0x2099,4,{0x81,0x36,0xB1,0x33,}},
- {0x209A,4,{0x81,0x36,0xB1,0x34,}},
- {0x209B,4,{0x81,0x36,0xB1,0x35,}},
- {0x209C,4,{0x81,0x36,0xB1,0x36,}},
- {0x209D,4,{0x81,0x36,0xB1,0x37,}},
- {0x209E,4,{0x81,0x36,0xB1,0x38,}},
- {0x209F,4,{0x81,0x36,0xB1,0x39,}},
- {0x20A0,4,{0x81,0x36,0xB2,0x30,}},
- {0x20A1,4,{0x81,0x36,0xB2,0x31,}},
- {0x20A2,4,{0x81,0x36,0xB2,0x32,}},
- {0x20A3,4,{0x81,0x36,0xB2,0x33,}},
- {0x20A4,4,{0x81,0x36,0xB2,0x34,}},
- {0x20A5,4,{0x81,0x36,0xB2,0x35,}},
- {0x20A6,4,{0x81,0x36,0xB2,0x36,}},
- {0x20A7,4,{0x81,0x36,0xB2,0x37,}},
- {0x20A8,4,{0x81,0x36,0xB2,0x38,}},
- {0x20A9,4,{0x81,0x36,0xB2,0x39,}},
- {0x20AA,4,{0x81,0x36,0xB3,0x30,}},
- {0x20AB,4,{0x81,0x36,0xB3,0x31,}},
- {0x20AC,2,{0xA2,0xE3,0x00,0x00,}},
- {0x20AD,4,{0x81,0x36,0xB3,0x32,}},
- {0x20AE,4,{0x81,0x36,0xB3,0x33,}},
- {0x20AF,4,{0x81,0x36,0xB3,0x34,}},
- {0x20B0,4,{0x81,0x36,0xB3,0x35,}},
- {0x20B1,4,{0x81,0x36,0xB3,0x36,}},
- {0x20B2,4,{0x81,0x36,0xB3,0x37,}},
- {0x20B3,4,{0x81,0x36,0xB3,0x38,}},
- {0x20B4,4,{0x81,0x36,0xB3,0x39,}},
- {0x20B5,4,{0x81,0x36,0xB4,0x30,}},
- {0x20B6,4,{0x81,0x36,0xB4,0x31,}},
- {0x20B7,4,{0x81,0x36,0xB4,0x32,}},
- {0x20B8,4,{0x81,0x36,0xB4,0x33,}},
- {0x20B9,4,{0x81,0x36,0xB4,0x34,}},
- {0x20BA,4,{0x81,0x36,0xB4,0x35,}},
- {0x20BB,4,{0x81,0x36,0xB4,0x36,}},
- {0x20BC,4,{0x81,0x36,0xB4,0x37,}},
- {0x20BD,4,{0x81,0x36,0xB4,0x38,}},
- {0x20BE,4,{0x81,0x36,0xB4,0x39,}},
- {0x20BF,4,{0x81,0x36,0xB5,0x30,}},
- {0x20C0,4,{0x81,0x36,0xB5,0x31,}},
- {0x20C1,4,{0x81,0x36,0xB5,0x32,}},
- {0x20C2,4,{0x81,0x36,0xB5,0x33,}},
- {0x20C3,4,{0x81,0x36,0xB5,0x34,}},
- {0x20C4,4,{0x81,0x36,0xB5,0x35,}},
- {0x20C5,4,{0x81,0x36,0xB5,0x36,}},
- {0x20C6,4,{0x81,0x36,0xB5,0x37,}},
- {0x20C7,4,{0x81,0x36,0xB5,0x38,}},
- {0x20C8,4,{0x81,0x36,0xB5,0x39,}},
- {0x20C9,4,{0x81,0x36,0xB6,0x30,}},
- {0x20CA,4,{0x81,0x36,0xB6,0x31,}},
- {0x20CB,4,{0x81,0x36,0xB6,0x32,}},
- {0x20CC,4,{0x81,0x36,0xB6,0x33,}},
- {0x20CD,4,{0x81,0x36,0xB6,0x34,}},
- {0x20CE,4,{0x81,0x36,0xB6,0x35,}},
- {0x20CF,4,{0x81,0x36,0xB6,0x36,}},
- {0x20D0,4,{0x81,0x36,0xB6,0x37,}},
- {0x20D1,4,{0x81,0x36,0xB6,0x38,}},
- {0x20D2,4,{0x81,0x36,0xB6,0x39,}},
- {0x20D3,4,{0x81,0x36,0xB7,0x30,}},
- {0x20D4,4,{0x81,0x36,0xB7,0x31,}},
- {0x20D5,4,{0x81,0x36,0xB7,0x32,}},
- {0x20D6,4,{0x81,0x36,0xB7,0x33,}},
- {0x20D7,4,{0x81,0x36,0xB7,0x34,}},
- {0x20D8,4,{0x81,0x36,0xB7,0x35,}},
- {0x20D9,4,{0x81,0x36,0xB7,0x36,}},
- {0x20DA,4,{0x81,0x36,0xB7,0x37,}},
- {0x20DB,4,{0x81,0x36,0xB7,0x38,}},
- {0x20DC,4,{0x81,0x36,0xB7,0x39,}},
- {0x20DD,4,{0x81,0x36,0xB8,0x30,}},
- {0x20DE,4,{0x81,0x36,0xB8,0x31,}},
- {0x20DF,4,{0x81,0x36,0xB8,0x32,}},
- {0x20E0,4,{0x81,0x36,0xB8,0x33,}},
- {0x20E1,4,{0x81,0x36,0xB8,0x34,}},
- {0x20E2,4,{0x81,0x36,0xB8,0x35,}},
- {0x20E3,4,{0x81,0x36,0xB8,0x36,}},
- {0x20E4,4,{0x81,0x36,0xB8,0x37,}},
- {0x20E5,4,{0x81,0x36,0xB8,0x38,}},
- {0x20E6,4,{0x81,0x36,0xB8,0x39,}},
- {0x20E7,4,{0x81,0x36,0xB9,0x30,}},
- {0x20E8,4,{0x81,0x36,0xB9,0x31,}},
- {0x20E9,4,{0x81,0x36,0xB9,0x32,}},
- {0x20EA,4,{0x81,0x36,0xB9,0x33,}},
- {0x20EB,4,{0x81,0x36,0xB9,0x34,}},
- {0x20EC,4,{0x81,0x36,0xB9,0x35,}},
- {0x20ED,4,{0x81,0x36,0xB9,0x36,}},
- {0x20EE,4,{0x81,0x36,0xB9,0x37,}},
- {0x20EF,4,{0x81,0x36,0xB9,0x38,}},
- {0x20F0,4,{0x81,0x36,0xB9,0x39,}},
- {0x20F1,4,{0x81,0x36,0xBA,0x30,}},
- {0x20F2,4,{0x81,0x36,0xBA,0x31,}},
- {0x20F3,4,{0x81,0x36,0xBA,0x32,}},
- {0x20F4,4,{0x81,0x36,0xBA,0x33,}},
- {0x20F5,4,{0x81,0x36,0xBA,0x34,}},
- {0x20F6,4,{0x81,0x36,0xBA,0x35,}},
- {0x20F7,4,{0x81,0x36,0xBA,0x36,}},
- {0x20F8,4,{0x81,0x36,0xBA,0x37,}},
- {0x20F9,4,{0x81,0x36,0xBA,0x38,}},
- {0x20FA,4,{0x81,0x36,0xBA,0x39,}},
- {0x20FB,4,{0x81,0x36,0xBB,0x30,}},
- {0x20FC,4,{0x81,0x36,0xBB,0x31,}},
- {0x20FD,4,{0x81,0x36,0xBB,0x32,}},
- {0x20FE,4,{0x81,0x36,0xBB,0x33,}},
- {0x20FF,4,{0x81,0x36,0xBB,0x34,}},
- {0x2100,4,{0x81,0x36,0xBB,0x35,}},
- {0x2101,4,{0x81,0x36,0xBB,0x36,}},
- {0x2102,4,{0x81,0x36,0xBB,0x37,}},
- {0x2103,2,{0xA1,0xE6,0x00,0x00,}},
- {0x2104,4,{0x81,0x36,0xBB,0x38,}},
- {0x2105,2,{0xA8,0x47,0x00,0x00,}},
- {0x2106,4,{0x81,0x36,0xBB,0x39,}},
- {0x2107,4,{0x81,0x36,0xBC,0x30,}},
- {0x2108,4,{0x81,0x36,0xBC,0x31,}},
- {0x2109,2,{0xA8,0x48,0x00,0x00,}},
- {0x210A,4,{0x81,0x36,0xBC,0x32,}},
- {0x210B,4,{0x81,0x36,0xBC,0x33,}},
- {0x210C,4,{0x81,0x36,0xBC,0x34,}},
- {0x210D,4,{0x81,0x36,0xBC,0x35,}},
- {0x210E,4,{0x81,0x36,0xBC,0x36,}},
- {0x210F,4,{0x81,0x36,0xBC,0x37,}},
- {0x2110,4,{0x81,0x36,0xBC,0x38,}},
- {0x2111,4,{0x81,0x36,0xBC,0x39,}},
- {0x2112,4,{0x81,0x36,0xBD,0x30,}},
- {0x2113,4,{0x81,0x36,0xBD,0x31,}},
- {0x2114,4,{0x81,0x36,0xBD,0x32,}},
- {0x2115,4,{0x81,0x36,0xBD,0x33,}},
- {0x2116,2,{0xA1,0xED,0x00,0x00,}},
- {0x2117,4,{0x81,0x36,0xBD,0x34,}},
- {0x2118,4,{0x81,0x36,0xBD,0x35,}},
- {0x2119,4,{0x81,0x36,0xBD,0x36,}},
- {0x211A,4,{0x81,0x36,0xBD,0x37,}},
- {0x211B,4,{0x81,0x36,0xBD,0x38,}},
- {0x211C,4,{0x81,0x36,0xBD,0x39,}},
- {0x211D,4,{0x81,0x36,0xBE,0x30,}},
- {0x211E,4,{0x81,0x36,0xBE,0x31,}},
- {0x211F,4,{0x81,0x36,0xBE,0x32,}},
- {0x2120,4,{0x81,0x36,0xBE,0x33,}},
- {0x2121,2,{0xA9,0x59,0x00,0x00,}},
- {0x2122,4,{0x81,0x36,0xBE,0x34,}},
- {0x2123,4,{0x81,0x36,0xBE,0x35,}},
- {0x2124,4,{0x81,0x36,0xBE,0x36,}},
- {0x2125,4,{0x81,0x36,0xBE,0x37,}},
- {0x2126,4,{0x81,0x36,0xBE,0x38,}},
- {0x2127,4,{0x81,0x36,0xBE,0x39,}},
- {0x2128,4,{0x81,0x36,0xBF,0x30,}},
- {0x2129,4,{0x81,0x36,0xBF,0x31,}},
- {0x212A,4,{0x81,0x36,0xBF,0x32,}},
- {0x212B,4,{0x81,0x36,0xBF,0x33,}},
- {0x212C,4,{0x81,0x36,0xBF,0x34,}},
- {0x212D,4,{0x81,0x36,0xBF,0x35,}},
- {0x212E,4,{0x81,0x36,0xBF,0x36,}},
- {0x212F,4,{0x81,0x36,0xBF,0x37,}},
- {0x2130,4,{0x81,0x36,0xBF,0x38,}},
- {0x2131,4,{0x81,0x36,0xBF,0x39,}},
- {0x2132,4,{0x81,0x36,0xC0,0x30,}},
- {0x2133,4,{0x81,0x36,0xC0,0x31,}},
- {0x2134,4,{0x81,0x36,0xC0,0x32,}},
- {0x2135,4,{0x81,0x36,0xC0,0x33,}},
- {0x2136,4,{0x81,0x36,0xC0,0x34,}},
- {0x2137,4,{0x81,0x36,0xC0,0x35,}},
- {0x2138,4,{0x81,0x36,0xC0,0x36,}},
- {0x2139,4,{0x81,0x36,0xC0,0x37,}},
- {0x213A,4,{0x81,0x36,0xC0,0x38,}},
- {0x213B,4,{0x81,0x36,0xC0,0x39,}},
- {0x213C,4,{0x81,0x36,0xC1,0x30,}},
- {0x213D,4,{0x81,0x36,0xC1,0x31,}},
- {0x213E,4,{0x81,0x36,0xC1,0x32,}},
- {0x213F,4,{0x81,0x36,0xC1,0x33,}},
- {0x2140,4,{0x81,0x36,0xC1,0x34,}},
- {0x2141,4,{0x81,0x36,0xC1,0x35,}},
- {0x2142,4,{0x81,0x36,0xC1,0x36,}},
- {0x2143,4,{0x81,0x36,0xC1,0x37,}},
- {0x2144,4,{0x81,0x36,0xC1,0x38,}},
- {0x2145,4,{0x81,0x36,0xC1,0x39,}},
- {0x2146,4,{0x81,0x36,0xC2,0x30,}},
- {0x2147,4,{0x81,0x36,0xC2,0x31,}},
- {0x2148,4,{0x81,0x36,0xC2,0x32,}},
- {0x2149,4,{0x81,0x36,0xC2,0x33,}},
- {0x214A,4,{0x81,0x36,0xC2,0x34,}},
- {0x214B,4,{0x81,0x36,0xC2,0x35,}},
- {0x214C,4,{0x81,0x36,0xC2,0x36,}},
- {0x214D,4,{0x81,0x36,0xC2,0x37,}},
- {0x214E,4,{0x81,0x36,0xC2,0x38,}},
- {0x214F,4,{0x81,0x36,0xC2,0x39,}},
- {0x2150,4,{0x81,0x36,0xC3,0x30,}},
- {0x2151,4,{0x81,0x36,0xC3,0x31,}},
- {0x2152,4,{0x81,0x36,0xC3,0x32,}},
- {0x2153,4,{0x81,0x36,0xC3,0x33,}},
- {0x2154,4,{0x81,0x36,0xC3,0x34,}},
- {0x2155,4,{0x81,0x36,0xC3,0x35,}},
- {0x2156,4,{0x81,0x36,0xC3,0x36,}},
- {0x2157,4,{0x81,0x36,0xC3,0x37,}},
- {0x2158,4,{0x81,0x36,0xC3,0x38,}},
- {0x2159,4,{0x81,0x36,0xC3,0x39,}},
- {0x215A,4,{0x81,0x36,0xC4,0x30,}},
- {0x215B,4,{0x81,0x36,0xC4,0x31,}},
- {0x215C,4,{0x81,0x36,0xC4,0x32,}},
- {0x215D,4,{0x81,0x36,0xC4,0x33,}},
- {0x215E,4,{0x81,0x36,0xC4,0x34,}},
- {0x215F,4,{0x81,0x36,0xC4,0x35,}},
- {0x2160,2,{0xA2,0xF1,0x00,0x00,}},
- {0x2161,2,{0xA2,0xF2,0x00,0x00,}},
- {0x2162,2,{0xA2,0xF3,0x00,0x00,}},
- {0x2163,2,{0xA2,0xF4,0x00,0x00,}},
- {0x2164,2,{0xA2,0xF5,0x00,0x00,}},
- {0x2165,2,{0xA2,0xF6,0x00,0x00,}},
- {0x2166,2,{0xA2,0xF7,0x00,0x00,}},
- {0x2167,2,{0xA2,0xF8,0x00,0x00,}},
- {0x2168,2,{0xA2,0xF9,0x00,0x00,}},
- {0x2169,2,{0xA2,0xFA,0x00,0x00,}},
- {0x216A,2,{0xA2,0xFB,0x00,0x00,}},
- {0x216B,2,{0xA2,0xFC,0x00,0x00,}},
- {0x216C,4,{0x81,0x36,0xC4,0x36,}},
- {0x216D,4,{0x81,0x36,0xC4,0x37,}},
- {0x216E,4,{0x81,0x36,0xC4,0x38,}},
- {0x216F,4,{0x81,0x36,0xC4,0x39,}},
- {0x2170,2,{0xA2,0xA1,0x00,0x00,}},
- {0x2171,2,{0xA2,0xA2,0x00,0x00,}},
- {0x2172,2,{0xA2,0xA3,0x00,0x00,}},
- {0x2173,2,{0xA2,0xA4,0x00,0x00,}},
- {0x2174,2,{0xA2,0xA5,0x00,0x00,}},
- {0x2175,2,{0xA2,0xA6,0x00,0x00,}},
- {0x2176,2,{0xA2,0xA7,0x00,0x00,}},
- {0x2177,2,{0xA2,0xA8,0x00,0x00,}},
- {0x2178,2,{0xA2,0xA9,0x00,0x00,}},
- {0x2179,2,{0xA2,0xAA,0x00,0x00,}},
- {0x217A,4,{0x81,0x36,0xC5,0x30,}},
- {0x217B,4,{0x81,0x36,0xC5,0x31,}},
- {0x217C,4,{0x81,0x36,0xC5,0x32,}},
- {0x217D,4,{0x81,0x36,0xC5,0x33,}},
- {0x217E,4,{0x81,0x36,0xC5,0x34,}},
- {0x217F,4,{0x81,0x36,0xC5,0x35,}},
- {0x2180,4,{0x81,0x36,0xC5,0x36,}},
- {0x2181,4,{0x81,0x36,0xC5,0x37,}},
- {0x2182,4,{0x81,0x36,0xC5,0x38,}},
- {0x2183,4,{0x81,0x36,0xC5,0x39,}},
- {0x2184,4,{0x81,0x36,0xC6,0x30,}},
- {0x2185,4,{0x81,0x36,0xC6,0x31,}},
- {0x2186,4,{0x81,0x36,0xC6,0x32,}},
- {0x2187,4,{0x81,0x36,0xC6,0x33,}},
- {0x2188,4,{0x81,0x36,0xC6,0x34,}},
- {0x2189,4,{0x81,0x36,0xC6,0x35,}},
- {0x218A,4,{0x81,0x36,0xC6,0x36,}},
- {0x218B,4,{0x81,0x36,0xC6,0x37,}},
- {0x218C,4,{0x81,0x36,0xC6,0x38,}},
- {0x218D,4,{0x81,0x36,0xC6,0x39,}},
- {0x218E,4,{0x81,0x36,0xC7,0x30,}},
- {0x218F,4,{0x81,0x36,0xC7,0x31,}},
- {0x2190,2,{0xA1,0xFB,0x00,0x00,}},
- {0x2191,2,{0xA1,0xFC,0x00,0x00,}},
- {0x2192,2,{0xA1,0xFA,0x00,0x00,}},
- {0x2193,2,{0xA1,0xFD,0x00,0x00,}},
- {0x2194,4,{0x81,0x36,0xC7,0x32,}},
- {0x2195,4,{0x81,0x36,0xC7,0x33,}},
- {0x2196,2,{0xA8,0x49,0x00,0x00,}},
- {0x2197,2,{0xA8,0x4A,0x00,0x00,}},
- {0x2198,2,{0xA8,0x4B,0x00,0x00,}},
- {0x2199,2,{0xA8,0x4C,0x00,0x00,}},
- {0x219A,4,{0x81,0x36,0xC7,0x34,}},
- {0x219B,4,{0x81,0x36,0xC7,0x35,}},
- {0x219C,4,{0x81,0x36,0xC7,0x36,}},
- {0x219D,4,{0x81,0x36,0xC7,0x37,}},
- {0x219E,4,{0x81,0x36,0xC7,0x38,}},
- {0x219F,4,{0x81,0x36,0xC7,0x39,}},
- {0x21A0,4,{0x81,0x36,0xC8,0x30,}},
- {0x21A1,4,{0x81,0x36,0xC8,0x31,}},
- {0x21A2,4,{0x81,0x36,0xC8,0x32,}},
- {0x21A3,4,{0x81,0x36,0xC8,0x33,}},
- {0x21A4,4,{0x81,0x36,0xC8,0x34,}},
- {0x21A5,4,{0x81,0x36,0xC8,0x35,}},
- {0x21A6,4,{0x81,0x36,0xC8,0x36,}},
- {0x21A7,4,{0x81,0x36,0xC8,0x37,}},
- {0x21A8,4,{0x81,0x36,0xC8,0x38,}},
- {0x21A9,4,{0x81,0x36,0xC8,0x39,}},
- {0x21AA,4,{0x81,0x36,0xC9,0x30,}},
- {0x21AB,4,{0x81,0x36,0xC9,0x31,}},
- {0x21AC,4,{0x81,0x36,0xC9,0x32,}},
- {0x21AD,4,{0x81,0x36,0xC9,0x33,}},
- {0x21AE,4,{0x81,0x36,0xC9,0x34,}},
- {0x21AF,4,{0x81,0x36,0xC9,0x35,}},
- {0x21B0,4,{0x81,0x36,0xC9,0x36,}},
- {0x21B1,4,{0x81,0x36,0xC9,0x37,}},
- {0x21B2,4,{0x81,0x36,0xC9,0x38,}},
- {0x21B3,4,{0x81,0x36,0xC9,0x39,}},
- {0x21B4,4,{0x81,0x36,0xCA,0x30,}},
- {0x21B5,4,{0x81,0x36,0xCA,0x31,}},
- {0x21B6,4,{0x81,0x36,0xCA,0x32,}},
- {0x21B7,4,{0x81,0x36,0xCA,0x33,}},
- {0x21B8,4,{0x81,0x36,0xCA,0x34,}},
- {0x21B9,4,{0x81,0x36,0xCA,0x35,}},
- {0x21BA,4,{0x81,0x36,0xCA,0x36,}},
- {0x21BB,4,{0x81,0x36,0xCA,0x37,}},
- {0x21BC,4,{0x81,0x36,0xCA,0x38,}},
- {0x21BD,4,{0x81,0x36,0xCA,0x39,}},
- {0x21BE,4,{0x81,0x36,0xCB,0x30,}},
- {0x21BF,4,{0x81,0x36,0xCB,0x31,}},
- {0x21C0,4,{0x81,0x36,0xCB,0x32,}},
- {0x21C1,4,{0x81,0x36,0xCB,0x33,}},
- {0x21C2,4,{0x81,0x36,0xCB,0x34,}},
- {0x21C3,4,{0x81,0x36,0xCB,0x35,}},
- {0x21C4,4,{0x81,0x36,0xCB,0x36,}},
- {0x21C5,4,{0x81,0x36,0xCB,0x37,}},
- {0x21C6,4,{0x81,0x36,0xCB,0x38,}},
- {0x21C7,4,{0x81,0x36,0xCB,0x39,}},
- {0x21C8,4,{0x81,0x36,0xCC,0x30,}},
- {0x21C9,4,{0x81,0x36,0xCC,0x31,}},
- {0x21CA,4,{0x81,0x36,0xCC,0x32,}},
- {0x21CB,4,{0x81,0x36,0xCC,0x33,}},
- {0x21CC,4,{0x81,0x36,0xCC,0x34,}},
- {0x21CD,4,{0x81,0x36,0xCC,0x35,}},
- {0x21CE,4,{0x81,0x36,0xCC,0x36,}},
- {0x21CF,4,{0x81,0x36,0xCC,0x37,}},
- {0x21D0,4,{0x81,0x36,0xCC,0x38,}},
- {0x21D1,4,{0x81,0x36,0xCC,0x39,}},
- {0x21D2,4,{0x81,0x36,0xCD,0x30,}},
- {0x21D3,4,{0x81,0x36,0xCD,0x31,}},
- {0x21D4,4,{0x81,0x36,0xCD,0x32,}},
- {0x21D5,4,{0x81,0x36,0xCD,0x33,}},
- {0x21D6,4,{0x81,0x36,0xCD,0x34,}},
- {0x21D7,4,{0x81,0x36,0xCD,0x35,}},
- {0x21D8,4,{0x81,0x36,0xCD,0x36,}},
- {0x21D9,4,{0x81,0x36,0xCD,0x37,}},
- {0x21DA,4,{0x81,0x36,0xCD,0x38,}},
- {0x21DB,4,{0x81,0x36,0xCD,0x39,}},
- {0x21DC,4,{0x81,0x36,0xCE,0x30,}},
- {0x21DD,4,{0x81,0x36,0xCE,0x31,}},
- {0x21DE,4,{0x81,0x36,0xCE,0x32,}},
- {0x21DF,4,{0x81,0x36,0xCE,0x33,}},
- {0x21E0,4,{0x81,0x36,0xCE,0x34,}},
- {0x21E1,4,{0x81,0x36,0xCE,0x35,}},
- {0x21E2,4,{0x81,0x36,0xCE,0x36,}},
- {0x21E3,4,{0x81,0x36,0xCE,0x37,}},
- {0x21E4,4,{0x81,0x36,0xCE,0x38,}},
- {0x21E5,4,{0x81,0x36,0xCE,0x39,}},
- {0x21E6,4,{0x81,0x36,0xCF,0x30,}},
- {0x21E7,4,{0x81,0x36,0xCF,0x31,}},
- {0x21E8,4,{0x81,0x36,0xCF,0x32,}},
- {0x21E9,4,{0x81,0x36,0xCF,0x33,}},
- {0x21EA,4,{0x81,0x36,0xCF,0x34,}},
- {0x21EB,4,{0x81,0x36,0xCF,0x35,}},
- {0x21EC,4,{0x81,0x36,0xCF,0x36,}},
- {0x21ED,4,{0x81,0x36,0xCF,0x37,}},
- {0x21EE,4,{0x81,0x36,0xCF,0x38,}},
- {0x21EF,4,{0x81,0x36,0xCF,0x39,}},
- {0x21F0,4,{0x81,0x36,0xD0,0x30,}},
- {0x21F1,4,{0x81,0x36,0xD0,0x31,}},
- {0x21F2,4,{0x81,0x36,0xD0,0x32,}},
- {0x21F3,4,{0x81,0x36,0xD0,0x33,}},
- {0x21F4,4,{0x81,0x36,0xD0,0x34,}},
- {0x21F5,4,{0x81,0x36,0xD0,0x35,}},
- {0x21F6,4,{0x81,0x36,0xD0,0x36,}},
- {0x21F7,4,{0x81,0x36,0xD0,0x37,}},
- {0x21F8,4,{0x81,0x36,0xD0,0x38,}},
- {0x21F9,4,{0x81,0x36,0xD0,0x39,}},
- {0x21FA,4,{0x81,0x36,0xD1,0x30,}},
- {0x21FB,4,{0x81,0x36,0xD1,0x31,}},
- {0x21FC,4,{0x81,0x36,0xD1,0x32,}},
- {0x21FD,4,{0x81,0x36,0xD1,0x33,}},
- {0x21FE,4,{0x81,0x36,0xD1,0x34,}},
- {0x21FF,4,{0x81,0x36,0xD1,0x35,}},
- {0x2200,4,{0x81,0x36,0xD1,0x36,}},
- {0x2201,4,{0x81,0x36,0xD1,0x37,}},
- {0x2202,4,{0x81,0x36,0xD1,0x38,}},
- {0x2203,4,{0x81,0x36,0xD1,0x39,}},
- {0x2204,4,{0x81,0x36,0xD2,0x30,}},
- {0x2205,4,{0x81,0x36,0xD2,0x31,}},
- {0x2206,4,{0x81,0x36,0xD2,0x32,}},
- {0x2207,4,{0x81,0x36,0xD2,0x33,}},
- {0x2208,2,{0xA1,0xCA,0x00,0x00,}},
- {0x2209,4,{0x81,0x36,0xD2,0x34,}},
- {0x220A,4,{0x81,0x36,0xD2,0x35,}},
- {0x220B,4,{0x81,0x36,0xD2,0x36,}},
- {0x220C,4,{0x81,0x36,0xD2,0x37,}},
- {0x220D,4,{0x81,0x36,0xD2,0x38,}},
- {0x220E,4,{0x81,0x36,0xD2,0x39,}},
- {0x220F,2,{0xA1,0xC7,0x00,0x00,}},
- {0x2210,4,{0x81,0x36,0xD3,0x30,}},
- {0x2211,2,{0xA1,0xC6,0x00,0x00,}},
- {0x2212,4,{0x81,0x36,0xD3,0x31,}},
- {0x2213,4,{0x81,0x36,0xD3,0x32,}},
- {0x2214,4,{0x81,0x36,0xD3,0x33,}},
- {0x2215,2,{0xA8,0x4D,0x00,0x00,}},
- {0x2216,4,{0x81,0x36,0xD3,0x34,}},
- {0x2217,4,{0x81,0x36,0xD3,0x35,}},
- {0x2218,4,{0x81,0x36,0xD3,0x36,}},
- {0x2219,4,{0x81,0x36,0xD3,0x37,}},
- {0x221A,2,{0xA1,0xCC,0x00,0x00,}},
- {0x221B,4,{0x81,0x36,0xD3,0x38,}},
- {0x221C,4,{0x81,0x36,0xD3,0x39,}},
- {0x221D,2,{0xA1,0xD8,0x00,0x00,}},
- {0x221E,2,{0xA1,0xDE,0x00,0x00,}},
- {0x221F,2,{0xA8,0x4E,0x00,0x00,}},
- {0x2220,2,{0xA1,0xCF,0x00,0x00,}},
- {0x2221,4,{0x81,0x36,0xD4,0x30,}},
- {0x2222,4,{0x81,0x36,0xD4,0x31,}},
- {0x2223,2,{0xA8,0x4F,0x00,0x00,}},
- {0x2224,4,{0x81,0x36,0xD4,0x32,}},
- {0x2225,2,{0xA1,0xCE,0x00,0x00,}},
- {0x2226,4,{0x81,0x36,0xD4,0x33,}},
- {0x2227,2,{0xA1,0xC4,0x00,0x00,}},
- {0x2228,2,{0xA1,0xC5,0x00,0x00,}},
- {0x2229,2,{0xA1,0xC9,0x00,0x00,}},
- {0x222A,2,{0xA1,0xC8,0x00,0x00,}},
- {0x222B,2,{0xA1,0xD2,0x00,0x00,}},
- {0x222C,4,{0x81,0x36,0xD4,0x34,}},
- {0x222D,4,{0x81,0x36,0xD4,0x35,}},
- {0x222E,2,{0xA1,0xD3,0x00,0x00,}},
- {0x222F,4,{0x81,0x36,0xD4,0x36,}},
- {0x2230,4,{0x81,0x36,0xD4,0x37,}},
- {0x2231,4,{0x81,0x36,0xD4,0x38,}},
- {0x2232,4,{0x81,0x36,0xD4,0x39,}},
- {0x2233,4,{0x81,0x36,0xD5,0x30,}},
- {0x2234,2,{0xA1,0xE0,0x00,0x00,}},
- {0x2235,2,{0xA1,0xDF,0x00,0x00,}},
- {0x2236,2,{0xA1,0xC3,0x00,0x00,}},
- {0x2237,2,{0xA1,0xCB,0x00,0x00,}},
- {0x2238,4,{0x81,0x36,0xD5,0x31,}},
- {0x2239,4,{0x81,0x36,0xD5,0x32,}},
- {0x223A,4,{0x81,0x36,0xD5,0x33,}},
- {0x223B,4,{0x81,0x36,0xD5,0x34,}},
- {0x223C,4,{0x81,0x36,0xD5,0x35,}},
- {0x223D,2,{0xA1,0xD7,0x00,0x00,}},
- {0x223E,4,{0x81,0x36,0xD5,0x36,}},
- {0x223F,4,{0x81,0x36,0xD5,0x37,}},
- {0x2240,4,{0x81,0x36,0xD5,0x38,}},
- {0x2241,4,{0x81,0x36,0xD5,0x39,}},
- {0x2242,4,{0x81,0x36,0xD6,0x30,}},
- {0x2243,4,{0x81,0x36,0xD6,0x31,}},
- {0x2244,4,{0x81,0x36,0xD6,0x32,}},
- {0x2245,4,{0x81,0x36,0xD6,0x33,}},
- {0x2246,4,{0x81,0x36,0xD6,0x34,}},
- {0x2247,4,{0x81,0x36,0xD6,0x35,}},
- {0x2248,2,{0xA1,0xD6,0x00,0x00,}},
- {0x2249,4,{0x81,0x36,0xD6,0x36,}},
- {0x224A,4,{0x81,0x36,0xD6,0x37,}},
- {0x224B,4,{0x81,0x36,0xD6,0x38,}},
- {0x224C,2,{0xA1,0xD5,0x00,0x00,}},
- {0x224D,4,{0x81,0x36,0xD6,0x39,}},
- {0x224E,4,{0x81,0x36,0xD7,0x30,}},
- {0x224F,4,{0x81,0x36,0xD7,0x31,}},
- {0x2250,4,{0x81,0x36,0xD7,0x32,}},
- {0x2251,4,{0x81,0x36,0xD7,0x33,}},
- {0x2252,2,{0xA8,0x50,0x00,0x00,}},
- {0x2253,4,{0x81,0x36,0xD7,0x34,}},
- {0x2254,4,{0x81,0x36,0xD7,0x35,}},
- {0x2255,4,{0x81,0x36,0xD7,0x36,}},
- {0x2256,4,{0x81,0x36,0xD7,0x37,}},
- {0x2257,4,{0x81,0x36,0xD7,0x38,}},
- {0x2258,4,{0x81,0x36,0xD7,0x39,}},
- {0x2259,4,{0x81,0x36,0xD8,0x30,}},
- {0x225A,4,{0x81,0x36,0xD8,0x31,}},
- {0x225B,4,{0x81,0x36,0xD8,0x32,}},
- {0x225C,4,{0x81,0x36,0xD8,0x33,}},
- {0x225D,4,{0x81,0x36,0xD8,0x34,}},
- {0x225E,4,{0x81,0x36,0xD8,0x35,}},
- {0x225F,4,{0x81,0x36,0xD8,0x36,}},
- {0x2260,2,{0xA1,0xD9,0x00,0x00,}},
- {0x2261,2,{0xA1,0xD4,0x00,0x00,}},
- {0x2262,4,{0x81,0x36,0xD8,0x37,}},
- {0x2263,4,{0x81,0x36,0xD8,0x38,}},
- {0x2264,2,{0xA1,0xDC,0x00,0x00,}},
- {0x2265,2,{0xA1,0xDD,0x00,0x00,}},
- {0x2266,2,{0xA8,0x51,0x00,0x00,}},
- {0x2267,2,{0xA8,0x52,0x00,0x00,}},
- {0x2268,4,{0x81,0x36,0xD8,0x39,}},
- {0x2269,4,{0x81,0x36,0xD9,0x30,}},
- {0x226A,4,{0x81,0x36,0xD9,0x31,}},
- {0x226B,4,{0x81,0x36,0xD9,0x32,}},
- {0x226C,4,{0x81,0x36,0xD9,0x33,}},
- {0x226D,4,{0x81,0x36,0xD9,0x34,}},
- {0x226E,2,{0xA1,0xDA,0x00,0x00,}},
- {0x226F,2,{0xA1,0xDB,0x00,0x00,}},
- {0x2270,4,{0x81,0x36,0xD9,0x35,}},
- {0x2271,4,{0x81,0x36,0xD9,0x36,}},
- {0x2272,4,{0x81,0x36,0xD9,0x37,}},
- {0x2273,4,{0x81,0x36,0xD9,0x38,}},
- {0x2274,4,{0x81,0x36,0xD9,0x39,}},
- {0x2275,4,{0x81,0x36,0xDA,0x30,}},
- {0x2276,4,{0x81,0x36,0xDA,0x31,}},
- {0x2277,4,{0x81,0x36,0xDA,0x32,}},
- {0x2278,4,{0x81,0x36,0xDA,0x33,}},
- {0x2279,4,{0x81,0x36,0xDA,0x34,}},
- {0x227A,4,{0x81,0x36,0xDA,0x35,}},
- {0x227B,4,{0x81,0x36,0xDA,0x36,}},
- {0x227C,4,{0x81,0x36,0xDA,0x37,}},
- {0x227D,4,{0x81,0x36,0xDA,0x38,}},
- {0x227E,4,{0x81,0x36,0xDA,0x39,}},
- {0x227F,4,{0x81,0x36,0xDB,0x30,}},
- {0x2280,4,{0x81,0x36,0xDB,0x31,}},
- {0x2281,4,{0x81,0x36,0xDB,0x32,}},
- {0x2282,4,{0x81,0x36,0xDB,0x33,}},
- {0x2283,4,{0x81,0x36,0xDB,0x34,}},
- {0x2284,4,{0x81,0x36,0xDB,0x35,}},
- {0x2285,4,{0x81,0x36,0xDB,0x36,}},
- {0x2286,4,{0x81,0x36,0xDB,0x37,}},
- {0x2287,4,{0x81,0x36,0xDB,0x38,}},
- {0x2288,4,{0x81,0x36,0xDB,0x39,}},
- {0x2289,4,{0x81,0x36,0xDC,0x30,}},
- {0x228A,4,{0x81,0x36,0xDC,0x31,}},
- {0x228B,4,{0x81,0x36,0xDC,0x32,}},
- {0x228C,4,{0x81,0x36,0xDC,0x33,}},
- {0x228D,4,{0x81,0x36,0xDC,0x34,}},
- {0x228E,4,{0x81,0x36,0xDC,0x35,}},
- {0x228F,4,{0x81,0x36,0xDC,0x36,}},
- {0x2290,4,{0x81,0x36,0xDC,0x37,}},
- {0x2291,4,{0x81,0x36,0xDC,0x38,}},
- {0x2292,4,{0x81,0x36,0xDC,0x39,}},
- {0x2293,4,{0x81,0x36,0xDD,0x30,}},
- {0x2294,4,{0x81,0x36,0xDD,0x31,}},
- {0x2295,2,{0xA8,0x92,0x00,0x00,}},
- {0x2296,4,{0x81,0x36,0xDD,0x32,}},
- {0x2297,4,{0x81,0x36,0xDD,0x33,}},
- {0x2298,4,{0x81,0x36,0xDD,0x34,}},
- {0x2299,2,{0xA1,0xD1,0x00,0x00,}},
- {0x229A,4,{0x81,0x36,0xDD,0x35,}},
- {0x229B,4,{0x81,0x36,0xDD,0x36,}},
- {0x229C,4,{0x81,0x36,0xDD,0x37,}},
- {0x229D,4,{0x81,0x36,0xDD,0x38,}},
- {0x229E,4,{0x81,0x36,0xDD,0x39,}},
- {0x229F,4,{0x81,0x36,0xDE,0x30,}},
- {0x22A0,4,{0x81,0x36,0xDE,0x31,}},
- {0x22A1,4,{0x81,0x36,0xDE,0x32,}},
- {0x22A2,4,{0x81,0x36,0xDE,0x33,}},
- {0x22A3,4,{0x81,0x36,0xDE,0x34,}},
- {0x22A4,4,{0x81,0x36,0xDE,0x35,}},
- {0x22A5,2,{0xA1,0xCD,0x00,0x00,}},
- {0x22A6,4,{0x81,0x36,0xDE,0x36,}},
- {0x22A7,4,{0x81,0x36,0xDE,0x37,}},
- {0x22A8,4,{0x81,0x36,0xDE,0x38,}},
- {0x22A9,4,{0x81,0x36,0xDE,0x39,}},
- {0x22AA,4,{0x81,0x36,0xDF,0x30,}},
- {0x22AB,4,{0x81,0x36,0xDF,0x31,}},
- {0x22AC,4,{0x81,0x36,0xDF,0x32,}},
- {0x22AD,4,{0x81,0x36,0xDF,0x33,}},
- {0x22AE,4,{0x81,0x36,0xDF,0x34,}},
- {0x22AF,4,{0x81,0x36,0xDF,0x35,}},
- {0x22B0,4,{0x81,0x36,0xDF,0x36,}},
- {0x22B1,4,{0x81,0x36,0xDF,0x37,}},
- {0x22B2,4,{0x81,0x36,0xDF,0x38,}},
- {0x22B3,4,{0x81,0x36,0xDF,0x39,}},
- {0x22B4,4,{0x81,0x36,0xE0,0x30,}},
- {0x22B5,4,{0x81,0x36,0xE0,0x31,}},
- {0x22B6,4,{0x81,0x36,0xE0,0x32,}},
- {0x22B7,4,{0x81,0x36,0xE0,0x33,}},
- {0x22B8,4,{0x81,0x36,0xE0,0x34,}},
- {0x22B9,4,{0x81,0x36,0xE0,0x35,}},
- {0x22BA,4,{0x81,0x36,0xE0,0x36,}},
- {0x22BB,4,{0x81,0x36,0xE0,0x37,}},
- {0x22BC,4,{0x81,0x36,0xE0,0x38,}},
- {0x22BD,4,{0x81,0x36,0xE0,0x39,}},
- {0x22BE,4,{0x81,0x36,0xE1,0x30,}},
- {0x22BF,2,{0xA8,0x53,0x00,0x00,}},
- {0x22C0,4,{0x81,0x36,0xE1,0x31,}},
- {0x22C1,4,{0x81,0x36,0xE1,0x32,}},
- {0x22C2,4,{0x81,0x36,0xE1,0x33,}},
- {0x22C3,4,{0x81,0x36,0xE1,0x34,}},
- {0x22C4,4,{0x81,0x36,0xE1,0x35,}},
- {0x22C5,4,{0x81,0x36,0xE1,0x36,}},
- {0x22C6,4,{0x81,0x36,0xE1,0x37,}},
- {0x22C7,4,{0x81,0x36,0xE1,0x38,}},
- {0x22C8,4,{0x81,0x36,0xE1,0x39,}},
- {0x22C9,4,{0x81,0x36,0xE2,0x30,}},
- {0x22CA,4,{0x81,0x36,0xE2,0x31,}},
- {0x22CB,4,{0x81,0x36,0xE2,0x32,}},
- {0x22CC,4,{0x81,0x36,0xE2,0x33,}},
- {0x22CD,4,{0x81,0x36,0xE2,0x34,}},
- {0x22CE,4,{0x81,0x36,0xE2,0x35,}},
- {0x22CF,4,{0x81,0x36,0xE2,0x36,}},
- {0x22D0,4,{0x81,0x36,0xE2,0x37,}},
- {0x22D1,4,{0x81,0x36,0xE2,0x38,}},
- {0x22D2,4,{0x81,0x36,0xE2,0x39,}},
- {0x22D3,4,{0x81,0x36,0xE3,0x30,}},
- {0x22D4,4,{0x81,0x36,0xE3,0x31,}},
- {0x22D5,4,{0x81,0x36,0xE3,0x32,}},
- {0x22D6,4,{0x81,0x36,0xE3,0x33,}},
- {0x22D7,4,{0x81,0x36,0xE3,0x34,}},
- {0x22D8,4,{0x81,0x36,0xE3,0x35,}},
- {0x22D9,4,{0x81,0x36,0xE3,0x36,}},
- {0x22DA,4,{0x81,0x36,0xE3,0x37,}},
- {0x22DB,4,{0x81,0x36,0xE3,0x38,}},
- {0x22DC,4,{0x81,0x36,0xE3,0x39,}},
- {0x22DD,4,{0x81,0x36,0xE4,0x30,}},
- {0x22DE,4,{0x81,0x36,0xE4,0x31,}},
- {0x22DF,4,{0x81,0x36,0xE4,0x32,}},
- {0x22E0,4,{0x81,0x36,0xE4,0x33,}},
- {0x22E1,4,{0x81,0x36,0xE4,0x34,}},
- {0x22E2,4,{0x81,0x36,0xE4,0x35,}},
- {0x22E3,4,{0x81,0x36,0xE4,0x36,}},
- {0x22E4,4,{0x81,0x36,0xE4,0x37,}},
- {0x22E5,4,{0x81,0x36,0xE4,0x38,}},
- {0x22E6,4,{0x81,0x36,0xE4,0x39,}},
- {0x22E7,4,{0x81,0x36,0xE5,0x30,}},
- {0x22E8,4,{0x81,0x36,0xE5,0x31,}},
- {0x22E9,4,{0x81,0x36,0xE5,0x32,}},
- {0x22EA,4,{0x81,0x36,0xE5,0x33,}},
- {0x22EB,4,{0x81,0x36,0xE5,0x34,}},
- {0x22EC,4,{0x81,0x36,0xE5,0x35,}},
- {0x22ED,4,{0x81,0x36,0xE5,0x36,}},
- {0x22EE,4,{0x81,0x36,0xE5,0x37,}},
- {0x22EF,4,{0x81,0x36,0xE5,0x38,}},
- {0x22F0,4,{0x81,0x36,0xE5,0x39,}},
- {0x22F1,4,{0x81,0x36,0xE6,0x30,}},
- {0x22F2,4,{0x81,0x36,0xE6,0x31,}},
- {0x22F3,4,{0x81,0x36,0xE6,0x32,}},
- {0x22F4,4,{0x81,0x36,0xE6,0x33,}},
- {0x22F5,4,{0x81,0x36,0xE6,0x34,}},
- {0x22F6,4,{0x81,0x36,0xE6,0x35,}},
- {0x22F7,4,{0x81,0x36,0xE6,0x36,}},
- {0x22F8,4,{0x81,0x36,0xE6,0x37,}},
- {0x22F9,4,{0x81,0x36,0xE6,0x38,}},
- {0x22FA,4,{0x81,0x36,0xE6,0x39,}},
- {0x22FB,4,{0x81,0x36,0xE7,0x30,}},
- {0x22FC,4,{0x81,0x36,0xE7,0x31,}},
- {0x22FD,4,{0x81,0x36,0xE7,0x32,}},
- {0x22FE,4,{0x81,0x36,0xE7,0x33,}},
- {0x22FF,4,{0x81,0x36,0xE7,0x34,}},
- {0x2300,4,{0x81,0x36,0xE7,0x35,}},
- {0x2301,4,{0x81,0x36,0xE7,0x36,}},
- {0x2302,4,{0x81,0x36,0xE7,0x37,}},
- {0x2303,4,{0x81,0x36,0xE7,0x38,}},
- {0x2304,4,{0x81,0x36,0xE7,0x39,}},
- {0x2305,4,{0x81,0x36,0xE8,0x30,}},
- {0x2306,4,{0x81,0x36,0xE8,0x31,}},
- {0x2307,4,{0x81,0x36,0xE8,0x32,}},
- {0x2308,4,{0x81,0x36,0xE8,0x33,}},
- {0x2309,4,{0x81,0x36,0xE8,0x34,}},
- {0x230A,4,{0x81,0x36,0xE8,0x35,}},
- {0x230B,4,{0x81,0x36,0xE8,0x36,}},
- {0x230C,4,{0x81,0x36,0xE8,0x37,}},
- {0x230D,4,{0x81,0x36,0xE8,0x38,}},
- {0x230E,4,{0x81,0x36,0xE8,0x39,}},
- {0x230F,4,{0x81,0x36,0xE9,0x30,}},
- {0x2310,4,{0x81,0x36,0xE9,0x31,}},
- {0x2311,4,{0x81,0x36,0xE9,0x32,}},
- {0x2312,2,{0xA1,0xD0,0x00,0x00,}},
- {0x2313,4,{0x81,0x36,0xE9,0x33,}},
- {0x2314,4,{0x81,0x36,0xE9,0x34,}},
- {0x2315,4,{0x81,0x36,0xE9,0x35,}},
- {0x2316,4,{0x81,0x36,0xE9,0x36,}},
- {0x2317,4,{0x81,0x36,0xE9,0x37,}},
- {0x2318,4,{0x81,0x36,0xE9,0x38,}},
- {0x2319,4,{0x81,0x36,0xE9,0x39,}},
- {0x231A,4,{0x81,0x36,0xEA,0x30,}},
- {0x231B,4,{0x81,0x36,0xEA,0x31,}},
- {0x231C,4,{0x81,0x36,0xEA,0x32,}},
- {0x231D,4,{0x81,0x36,0xEA,0x33,}},
- {0x231E,4,{0x81,0x36,0xEA,0x34,}},
- {0x231F,4,{0x81,0x36,0xEA,0x35,}},
- {0x2320,4,{0x81,0x36,0xEA,0x36,}},
- {0x2321,4,{0x81,0x36,0xEA,0x37,}},
- {0x2322,4,{0x81,0x36,0xEA,0x38,}},
- {0x2323,4,{0x81,0x36,0xEA,0x39,}},
- {0x2324,4,{0x81,0x36,0xEB,0x30,}},
- {0x2325,4,{0x81,0x36,0xEB,0x31,}},
- {0x2326,4,{0x81,0x36,0xEB,0x32,}},
- {0x2327,4,{0x81,0x36,0xEB,0x33,}},
- {0x2328,4,{0x81,0x36,0xEB,0x34,}},
- {0x2329,4,{0x81,0x36,0xEB,0x35,}},
- {0x232A,4,{0x81,0x36,0xEB,0x36,}},
- {0x232B,4,{0x81,0x36,0xEB,0x37,}},
- {0x232C,4,{0x81,0x36,0xEB,0x38,}},
- {0x232D,4,{0x81,0x36,0xEB,0x39,}},
- {0x232E,4,{0x81,0x36,0xEC,0x30,}},
- {0x232F,4,{0x81,0x36,0xEC,0x31,}},
- {0x2330,4,{0x81,0x36,0xEC,0x32,}},
- {0x2331,4,{0x81,0x36,0xEC,0x33,}},
- {0x2332,4,{0x81,0x36,0xEC,0x34,}},
- {0x2333,4,{0x81,0x36,0xEC,0x35,}},
- {0x2334,4,{0x81,0x36,0xEC,0x36,}},
- {0x2335,4,{0x81,0x36,0xEC,0x37,}},
- {0x2336,4,{0x81,0x36,0xEC,0x38,}},
- {0x2337,4,{0x81,0x36,0xEC,0x39,}},
- {0x2338,4,{0x81,0x36,0xED,0x30,}},
- {0x2339,4,{0x81,0x36,0xED,0x31,}},
- {0x233A,4,{0x81,0x36,0xED,0x32,}},
- {0x233B,4,{0x81,0x36,0xED,0x33,}},
- {0x233C,4,{0x81,0x36,0xED,0x34,}},
- {0x233D,4,{0x81,0x36,0xED,0x35,}},
- {0x233E,4,{0x81,0x36,0xED,0x36,}},
- {0x233F,4,{0x81,0x36,0xED,0x37,}},
- {0x2340,4,{0x81,0x36,0xED,0x38,}},
- {0x2341,4,{0x81,0x36,0xED,0x39,}},
- {0x2342,4,{0x81,0x36,0xEE,0x30,}},
- {0x2343,4,{0x81,0x36,0xEE,0x31,}},
- {0x2344,4,{0x81,0x36,0xEE,0x32,}},
- {0x2345,4,{0x81,0x36,0xEE,0x33,}},
- {0x2346,4,{0x81,0x36,0xEE,0x34,}},
- {0x2347,4,{0x81,0x36,0xEE,0x35,}},
- {0x2348,4,{0x81,0x36,0xEE,0x36,}},
- {0x2349,4,{0x81,0x36,0xEE,0x37,}},
- {0x234A,4,{0x81,0x36,0xEE,0x38,}},
- {0x234B,4,{0x81,0x36,0xEE,0x39,}},
- {0x234C,4,{0x81,0x36,0xEF,0x30,}},
- {0x234D,4,{0x81,0x36,0xEF,0x31,}},
- {0x234E,4,{0x81,0x36,0xEF,0x32,}},
- {0x234F,4,{0x81,0x36,0xEF,0x33,}},
- {0x2350,4,{0x81,0x36,0xEF,0x34,}},
- {0x2351,4,{0x81,0x36,0xEF,0x35,}},
- {0x2352,4,{0x81,0x36,0xEF,0x36,}},
- {0x2353,4,{0x81,0x36,0xEF,0x37,}},
- {0x2354,4,{0x81,0x36,0xEF,0x38,}},
- {0x2355,4,{0x81,0x36,0xEF,0x39,}},
- {0x2356,4,{0x81,0x36,0xF0,0x30,}},
- {0x2357,4,{0x81,0x36,0xF0,0x31,}},
- {0x2358,4,{0x81,0x36,0xF0,0x32,}},
- {0x2359,4,{0x81,0x36,0xF0,0x33,}},
- {0x235A,4,{0x81,0x36,0xF0,0x34,}},
- {0x235B,4,{0x81,0x36,0xF0,0x35,}},
- {0x235C,4,{0x81,0x36,0xF0,0x36,}},
- {0x235D,4,{0x81,0x36,0xF0,0x37,}},
- {0x235E,4,{0x81,0x36,0xF0,0x38,}},
- {0x235F,4,{0x81,0x36,0xF0,0x39,}},
- {0x2360,4,{0x81,0x36,0xF1,0x30,}},
- {0x2361,4,{0x81,0x36,0xF1,0x31,}},
- {0x2362,4,{0x81,0x36,0xF1,0x32,}},
- {0x2363,4,{0x81,0x36,0xF1,0x33,}},
- {0x2364,4,{0x81,0x36,0xF1,0x34,}},
- {0x2365,4,{0x81,0x36,0xF1,0x35,}},
- {0x2366,4,{0x81,0x36,0xF1,0x36,}},
- {0x2367,4,{0x81,0x36,0xF1,0x37,}},
- {0x2368,4,{0x81,0x36,0xF1,0x38,}},
- {0x2369,4,{0x81,0x36,0xF1,0x39,}},
- {0x236A,4,{0x81,0x36,0xF2,0x30,}},
- {0x236B,4,{0x81,0x36,0xF2,0x31,}},
- {0x236C,4,{0x81,0x36,0xF2,0x32,}},
- {0x236D,4,{0x81,0x36,0xF2,0x33,}},
- {0x236E,4,{0x81,0x36,0xF2,0x34,}},
- {0x236F,4,{0x81,0x36,0xF2,0x35,}},
- {0x2370,4,{0x81,0x36,0xF2,0x36,}},
- {0x2371,4,{0x81,0x36,0xF2,0x37,}},
- {0x2372,4,{0x81,0x36,0xF2,0x38,}},
- {0x2373,4,{0x81,0x36,0xF2,0x39,}},
- {0x2374,4,{0x81,0x36,0xF3,0x30,}},
- {0x2375,4,{0x81,0x36,0xF3,0x31,}},
- {0x2376,4,{0x81,0x36,0xF3,0x32,}},
- {0x2377,4,{0x81,0x36,0xF3,0x33,}},
- {0x2378,4,{0x81,0x36,0xF3,0x34,}},
- {0x2379,4,{0x81,0x36,0xF3,0x35,}},
- {0x237A,4,{0x81,0x36,0xF3,0x36,}},
- {0x237B,4,{0x81,0x36,0xF3,0x37,}},
- {0x237C,4,{0x81,0x36,0xF3,0x38,}},
- {0x237D,4,{0x81,0x36,0xF3,0x39,}},
- {0x237E,4,{0x81,0x36,0xF4,0x30,}},
- {0x237F,4,{0x81,0x36,0xF4,0x31,}},
- {0x2380,4,{0x81,0x36,0xF4,0x32,}},
- {0x2381,4,{0x81,0x36,0xF4,0x33,}},
- {0x2382,4,{0x81,0x36,0xF4,0x34,}},
- {0x2383,4,{0x81,0x36,0xF4,0x35,}},
- {0x2384,4,{0x81,0x36,0xF4,0x36,}},
- {0x2385,4,{0x81,0x36,0xF4,0x37,}},
- {0x2386,4,{0x81,0x36,0xF4,0x38,}},
- {0x2387,4,{0x81,0x36,0xF4,0x39,}},
- {0x2388,4,{0x81,0x36,0xF5,0x30,}},
- {0x2389,4,{0x81,0x36,0xF5,0x31,}},
- {0x238A,4,{0x81,0x36,0xF5,0x32,}},
- {0x238B,4,{0x81,0x36,0xF5,0x33,}},
- {0x238C,4,{0x81,0x36,0xF5,0x34,}},
- {0x238D,4,{0x81,0x36,0xF5,0x35,}},
- {0x238E,4,{0x81,0x36,0xF5,0x36,}},
- {0x238F,4,{0x81,0x36,0xF5,0x37,}},
- {0x2390,4,{0x81,0x36,0xF5,0x38,}},
- {0x2391,4,{0x81,0x36,0xF5,0x39,}},
- {0x2392,4,{0x81,0x36,0xF6,0x30,}},
- {0x2393,4,{0x81,0x36,0xF6,0x31,}},
- {0x2394,4,{0x81,0x36,0xF6,0x32,}},
- {0x2395,4,{0x81,0x36,0xF6,0x33,}},
- {0x2396,4,{0x81,0x36,0xF6,0x34,}},
- {0x2397,4,{0x81,0x36,0xF6,0x35,}},
- {0x2398,4,{0x81,0x36,0xF6,0x36,}},
- {0x2399,4,{0x81,0x36,0xF6,0x37,}},
- {0x239A,4,{0x81,0x36,0xF6,0x38,}},
- {0x239B,4,{0x81,0x36,0xF6,0x39,}},
- {0x239C,4,{0x81,0x36,0xF7,0x30,}},
- {0x239D,4,{0x81,0x36,0xF7,0x31,}},
- {0x239E,4,{0x81,0x36,0xF7,0x32,}},
- {0x239F,4,{0x81,0x36,0xF7,0x33,}},
- {0x23A0,4,{0x81,0x36,0xF7,0x34,}},
- {0x23A1,4,{0x81,0x36,0xF7,0x35,}},
- {0x23A2,4,{0x81,0x36,0xF7,0x36,}},
- {0x23A3,4,{0x81,0x36,0xF7,0x37,}},
- {0x23A4,4,{0x81,0x36,0xF7,0x38,}},
- {0x23A5,4,{0x81,0x36,0xF7,0x39,}},
- {0x23A6,4,{0x81,0x36,0xF8,0x30,}},
- {0x23A7,4,{0x81,0x36,0xF8,0x31,}},
- {0x23A8,4,{0x81,0x36,0xF8,0x32,}},
- {0x23A9,4,{0x81,0x36,0xF8,0x33,}},
- {0x23AA,4,{0x81,0x36,0xF8,0x34,}},
- {0x23AB,4,{0x81,0x36,0xF8,0x35,}},
- {0x23AC,4,{0x81,0x36,0xF8,0x36,}},
- {0x23AD,4,{0x81,0x36,0xF8,0x37,}},
- {0x23AE,4,{0x81,0x36,0xF8,0x38,}},
- {0x23AF,4,{0x81,0x36,0xF8,0x39,}},
- {0x23B0,4,{0x81,0x36,0xF9,0x30,}},
- {0x23B1,4,{0x81,0x36,0xF9,0x31,}},
- {0x23B2,4,{0x81,0x36,0xF9,0x32,}},
- {0x23B3,4,{0x81,0x36,0xF9,0x33,}},
- {0x23B4,4,{0x81,0x36,0xF9,0x34,}},
- {0x23B5,4,{0x81,0x36,0xF9,0x35,}},
- {0x23B6,4,{0x81,0x36,0xF9,0x36,}},
- {0x23B7,4,{0x81,0x36,0xF9,0x37,}},
- {0x23B8,4,{0x81,0x36,0xF9,0x38,}},
- {0x23B9,4,{0x81,0x36,0xF9,0x39,}},
- {0x23BA,4,{0x81,0x36,0xFA,0x30,}},
- {0x23BB,4,{0x81,0x36,0xFA,0x31,}},
- {0x23BC,4,{0x81,0x36,0xFA,0x32,}},
- {0x23BD,4,{0x81,0x36,0xFA,0x33,}},
- {0x23BE,4,{0x81,0x36,0xFA,0x34,}},
- {0x23BF,4,{0x81,0x36,0xFA,0x35,}},
- {0x23C0,4,{0x81,0x36,0xFA,0x36,}},
- {0x23C1,4,{0x81,0x36,0xFA,0x37,}},
- {0x23C2,4,{0x81,0x36,0xFA,0x38,}},
- {0x23C3,4,{0x81,0x36,0xFA,0x39,}},
- {0x23C4,4,{0x81,0x36,0xFB,0x30,}},
- {0x23C5,4,{0x81,0x36,0xFB,0x31,}},
- {0x23C6,4,{0x81,0x36,0xFB,0x32,}},
- {0x23C7,4,{0x81,0x36,0xFB,0x33,}},
- {0x23C8,4,{0x81,0x36,0xFB,0x34,}},
- {0x23C9,4,{0x81,0x36,0xFB,0x35,}},
- {0x23CA,4,{0x81,0x36,0xFB,0x36,}},
- {0x23CB,4,{0x81,0x36,0xFB,0x37,}},
- {0x23CC,4,{0x81,0x36,0xFB,0x38,}},
- {0x23CD,4,{0x81,0x36,0xFB,0x39,}},
- {0x23CE,4,{0x81,0x36,0xFC,0x30,}},
- {0x23CF,4,{0x81,0x36,0xFC,0x31,}},
- {0x23D0,4,{0x81,0x36,0xFC,0x32,}},
- {0x23D1,4,{0x81,0x36,0xFC,0x33,}},
- {0x23D2,4,{0x81,0x36,0xFC,0x34,}},
- {0x23D3,4,{0x81,0x36,0xFC,0x35,}},
- {0x23D4,4,{0x81,0x36,0xFC,0x36,}},
- {0x23D5,4,{0x81,0x36,0xFC,0x37,}},
- {0x23D6,4,{0x81,0x36,0xFC,0x38,}},
- {0x23D7,4,{0x81,0x36,0xFC,0x39,}},
- {0x23D8,4,{0x81,0x36,0xFD,0x30,}},
- {0x23D9,4,{0x81,0x36,0xFD,0x31,}},
- {0x23DA,4,{0x81,0x36,0xFD,0x32,}},
- {0x23DB,4,{0x81,0x36,0xFD,0x33,}},
- {0x23DC,4,{0x81,0x36,0xFD,0x34,}},
- {0x23DD,4,{0x81,0x36,0xFD,0x35,}},
- {0x23DE,4,{0x81,0x36,0xFD,0x36,}},
- {0x23DF,4,{0x81,0x36,0xFD,0x37,}},
- {0x23E0,4,{0x81,0x36,0xFD,0x38,}},
- {0x23E1,4,{0x81,0x36,0xFD,0x39,}},
- {0x23E2,4,{0x81,0x36,0xFE,0x30,}},
- {0x23E3,4,{0x81,0x36,0xFE,0x31,}},
- {0x23E4,4,{0x81,0x36,0xFE,0x32,}},
- {0x23E5,4,{0x81,0x36,0xFE,0x33,}},
- {0x23E6,4,{0x81,0x36,0xFE,0x34,}},
- {0x23E7,4,{0x81,0x36,0xFE,0x35,}},
- {0x23E8,4,{0x81,0x36,0xFE,0x36,}},
- {0x23E9,4,{0x81,0x36,0xFE,0x37,}},
- {0x23EA,4,{0x81,0x36,0xFE,0x38,}},
- {0x23EB,4,{0x81,0x36,0xFE,0x39,}},
- {0x23EC,4,{0x81,0x37,0x81,0x30,}},
- {0x23ED,4,{0x81,0x37,0x81,0x31,}},
- {0x23EE,4,{0x81,0x37,0x81,0x32,}},
- {0x23EF,4,{0x81,0x37,0x81,0x33,}},
- {0x23F0,4,{0x81,0x37,0x81,0x34,}},
- {0x23F1,4,{0x81,0x37,0x81,0x35,}},
- {0x23F2,4,{0x81,0x37,0x81,0x36,}},
- {0x23F3,4,{0x81,0x37,0x81,0x37,}},
- {0x23F4,4,{0x81,0x37,0x81,0x38,}},
- {0x23F5,4,{0x81,0x37,0x81,0x39,}},
- {0x23F6,4,{0x81,0x37,0x82,0x30,}},
- {0x23F7,4,{0x81,0x37,0x82,0x31,}},
- {0x23F8,4,{0x81,0x37,0x82,0x32,}},
- {0x23F9,4,{0x81,0x37,0x82,0x33,}},
- {0x23FA,4,{0x81,0x37,0x82,0x34,}},
- {0x23FB,4,{0x81,0x37,0x82,0x35,}},
- {0x23FC,4,{0x81,0x37,0x82,0x36,}},
- {0x23FD,4,{0x81,0x37,0x82,0x37,}},
- {0x23FE,4,{0x81,0x37,0x82,0x38,}},
- {0x23FF,4,{0x81,0x37,0x82,0x39,}},
- {0x2400,4,{0x81,0x37,0x83,0x30,}},
- {0x2401,4,{0x81,0x37,0x83,0x31,}},
- {0x2402,4,{0x81,0x37,0x83,0x32,}},
- {0x2403,4,{0x81,0x37,0x83,0x33,}},
- {0x2404,4,{0x81,0x37,0x83,0x34,}},
- {0x2405,4,{0x81,0x37,0x83,0x35,}},
- {0x2406,4,{0x81,0x37,0x83,0x36,}},
- {0x2407,4,{0x81,0x37,0x83,0x37,}},
- {0x2408,4,{0x81,0x37,0x83,0x38,}},
- {0x2409,4,{0x81,0x37,0x83,0x39,}},
- {0x240A,4,{0x81,0x37,0x84,0x30,}},
- {0x240B,4,{0x81,0x37,0x84,0x31,}},
- {0x240C,4,{0x81,0x37,0x84,0x32,}},
- {0x240D,4,{0x81,0x37,0x84,0x33,}},
- {0x240E,4,{0x81,0x37,0x84,0x34,}},
- {0x240F,4,{0x81,0x37,0x84,0x35,}},
- {0x2410,4,{0x81,0x37,0x84,0x36,}},
- {0x2411,4,{0x81,0x37,0x84,0x37,}},
- {0x2412,4,{0x81,0x37,0x84,0x38,}},
- {0x2413,4,{0x81,0x37,0x84,0x39,}},
- {0x2414,4,{0x81,0x37,0x85,0x30,}},
- {0x2415,4,{0x81,0x37,0x85,0x31,}},
- {0x2416,4,{0x81,0x37,0x85,0x32,}},
- {0x2417,4,{0x81,0x37,0x85,0x33,}},
- {0x2418,4,{0x81,0x37,0x85,0x34,}},
- {0x2419,4,{0x81,0x37,0x85,0x35,}},
- {0x241A,4,{0x81,0x37,0x85,0x36,}},
- {0x241B,4,{0x81,0x37,0x85,0x37,}},
- {0x241C,4,{0x81,0x37,0x85,0x38,}},
- {0x241D,4,{0x81,0x37,0x85,0x39,}},
- {0x241E,4,{0x81,0x37,0x86,0x30,}},
- {0x241F,4,{0x81,0x37,0x86,0x31,}},
- {0x2420,4,{0x81,0x37,0x86,0x32,}},
- {0x2421,4,{0x81,0x37,0x86,0x33,}},
- {0x2422,4,{0x81,0x37,0x86,0x34,}},
- {0x2423,4,{0x81,0x37,0x86,0x35,}},
- {0x2424,4,{0x81,0x37,0x86,0x36,}},
- {0x2425,4,{0x81,0x37,0x86,0x37,}},
- {0x2426,4,{0x81,0x37,0x86,0x38,}},
- {0x2427,4,{0x81,0x37,0x86,0x39,}},
- {0x2428,4,{0x81,0x37,0x87,0x30,}},
- {0x2429,4,{0x81,0x37,0x87,0x31,}},
- {0x242A,4,{0x81,0x37,0x87,0x32,}},
- {0x242B,4,{0x81,0x37,0x87,0x33,}},
- {0x242C,4,{0x81,0x37,0x87,0x34,}},
- {0x242D,4,{0x81,0x37,0x87,0x35,}},
- {0x242E,4,{0x81,0x37,0x87,0x36,}},
- {0x242F,4,{0x81,0x37,0x87,0x37,}},
- {0x2430,4,{0x81,0x37,0x87,0x38,}},
- {0x2431,4,{0x81,0x37,0x87,0x39,}},
- {0x2432,4,{0x81,0x37,0x88,0x30,}},
- {0x2433,4,{0x81,0x37,0x88,0x31,}},
- {0x2434,4,{0x81,0x37,0x88,0x32,}},
- {0x2435,4,{0x81,0x37,0x88,0x33,}},
- {0x2436,4,{0x81,0x37,0x88,0x34,}},
- {0x2437,4,{0x81,0x37,0x88,0x35,}},
- {0x2438,4,{0x81,0x37,0x88,0x36,}},
- {0x2439,4,{0x81,0x37,0x88,0x37,}},
- {0x243A,4,{0x81,0x37,0x88,0x38,}},
- {0x243B,4,{0x81,0x37,0x88,0x39,}},
- {0x243C,4,{0x81,0x37,0x89,0x30,}},
- {0x243D,4,{0x81,0x37,0x89,0x31,}},
- {0x243E,4,{0x81,0x37,0x89,0x32,}},
- {0x243F,4,{0x81,0x37,0x89,0x33,}},
- {0x2440,4,{0x81,0x37,0x89,0x34,}},
- {0x2441,4,{0x81,0x37,0x89,0x35,}},
- {0x2442,4,{0x81,0x37,0x89,0x36,}},
- {0x2443,4,{0x81,0x37,0x89,0x37,}},
- {0x2444,4,{0x81,0x37,0x89,0x38,}},
- {0x2445,4,{0x81,0x37,0x89,0x39,}},
- {0x2446,4,{0x81,0x37,0x8A,0x30,}},
- {0x2447,4,{0x81,0x37,0x8A,0x31,}},
- {0x2448,4,{0x81,0x37,0x8A,0x32,}},
- {0x2449,4,{0x81,0x37,0x8A,0x33,}},
- {0x244A,4,{0x81,0x37,0x8A,0x34,}},
- {0x244B,4,{0x81,0x37,0x8A,0x35,}},
- {0x244C,4,{0x81,0x37,0x8A,0x36,}},
- {0x244D,4,{0x81,0x37,0x8A,0x37,}},
- {0x244E,4,{0x81,0x37,0x8A,0x38,}},
- {0x244F,4,{0x81,0x37,0x8A,0x39,}},
- {0x2450,4,{0x81,0x37,0x8B,0x30,}},
- {0x2451,4,{0x81,0x37,0x8B,0x31,}},
- {0x2452,4,{0x81,0x37,0x8B,0x32,}},
- {0x2453,4,{0x81,0x37,0x8B,0x33,}},
- {0x2454,4,{0x81,0x37,0x8B,0x34,}},
- {0x2455,4,{0x81,0x37,0x8B,0x35,}},
- {0x2456,4,{0x81,0x37,0x8B,0x36,}},
- {0x2457,4,{0x81,0x37,0x8B,0x37,}},
- {0x2458,4,{0x81,0x37,0x8B,0x38,}},
- {0x2459,4,{0x81,0x37,0x8B,0x39,}},
- {0x245A,4,{0x81,0x37,0x8C,0x30,}},
- {0x245B,4,{0x81,0x37,0x8C,0x31,}},
- {0x245C,4,{0x81,0x37,0x8C,0x32,}},
- {0x245D,4,{0x81,0x37,0x8C,0x33,}},
- {0x245E,4,{0x81,0x37,0x8C,0x34,}},
- {0x245F,4,{0x81,0x37,0x8C,0x35,}},
- {0x2460,2,{0xA2,0xD9,0x00,0x00,}},
- {0x2461,2,{0xA2,0xDA,0x00,0x00,}},
- {0x2462,2,{0xA2,0xDB,0x00,0x00,}},
- {0x2463,2,{0xA2,0xDC,0x00,0x00,}},
- {0x2464,2,{0xA2,0xDD,0x00,0x00,}},
- {0x2465,2,{0xA2,0xDE,0x00,0x00,}},
- {0x2466,2,{0xA2,0xDF,0x00,0x00,}},
- {0x2467,2,{0xA2,0xE0,0x00,0x00,}},
- {0x2468,2,{0xA2,0xE1,0x00,0x00,}},
- {0x2469,2,{0xA2,0xE2,0x00,0x00,}},
- {0x246A,4,{0x81,0x37,0x8C,0x36,}},
- {0x246B,4,{0x81,0x37,0x8C,0x37,}},
- {0x246C,4,{0x81,0x37,0x8C,0x38,}},
- {0x246D,4,{0x81,0x37,0x8C,0x39,}},
- {0x246E,4,{0x81,0x37,0x8D,0x30,}},
- {0x246F,4,{0x81,0x37,0x8D,0x31,}},
- {0x2470,4,{0x81,0x37,0x8D,0x32,}},
- {0x2471,4,{0x81,0x37,0x8D,0x33,}},
- {0x2472,4,{0x81,0x37,0x8D,0x34,}},
- {0x2473,4,{0x81,0x37,0x8D,0x35,}},
- {0x2474,2,{0xA2,0xC5,0x00,0x00,}},
- {0x2475,2,{0xA2,0xC6,0x00,0x00,}},
- {0x2476,2,{0xA2,0xC7,0x00,0x00,}},
- {0x2477,2,{0xA2,0xC8,0x00,0x00,}},
- {0x2478,2,{0xA2,0xC9,0x00,0x00,}},
- {0x2479,2,{0xA2,0xCA,0x00,0x00,}},
- {0x247A,2,{0xA2,0xCB,0x00,0x00,}},
- {0x247B,2,{0xA2,0xCC,0x00,0x00,}},
- {0x247C,2,{0xA2,0xCD,0x00,0x00,}},
- {0x247D,2,{0xA2,0xCE,0x00,0x00,}},
- {0x247E,2,{0xA2,0xCF,0x00,0x00,}},
- {0x247F,2,{0xA2,0xD0,0x00,0x00,}},
- {0x2480,2,{0xA2,0xD1,0x00,0x00,}},
- {0x2481,2,{0xA2,0xD2,0x00,0x00,}},
- {0x2482,2,{0xA2,0xD3,0x00,0x00,}},
- {0x2483,2,{0xA2,0xD4,0x00,0x00,}},
- {0x2484,2,{0xA2,0xD5,0x00,0x00,}},
- {0x2485,2,{0xA2,0xD6,0x00,0x00,}},
- {0x2486,2,{0xA2,0xD7,0x00,0x00,}},
- {0x2487,2,{0xA2,0xD8,0x00,0x00,}},
- {0x2488,2,{0xA2,0xB1,0x00,0x00,}},
- {0x2489,2,{0xA2,0xB2,0x00,0x00,}},
- {0x248A,2,{0xA2,0xB3,0x00,0x00,}},
- {0x248B,2,{0xA2,0xB4,0x00,0x00,}},
- {0x248C,2,{0xA2,0xB5,0x00,0x00,}},
- {0x248D,2,{0xA2,0xB6,0x00,0x00,}},
- {0x248E,2,{0xA2,0xB7,0x00,0x00,}},
- {0x248F,2,{0xA2,0xB8,0x00,0x00,}},
- {0x2490,2,{0xA2,0xB9,0x00,0x00,}},
- {0x2491,2,{0xA2,0xBA,0x00,0x00,}},
- {0x2492,2,{0xA2,0xBB,0x00,0x00,}},
- {0x2493,2,{0xA2,0xBC,0x00,0x00,}},
- {0x2494,2,{0xA2,0xBD,0x00,0x00,}},
- {0x2495,2,{0xA2,0xBE,0x00,0x00,}},
- {0x2496,2,{0xA2,0xBF,0x00,0x00,}},
- {0x2497,2,{0xA2,0xC0,0x00,0x00,}},
- {0x2498,2,{0xA2,0xC1,0x00,0x00,}},
- {0x2499,2,{0xA2,0xC2,0x00,0x00,}},
- {0x249A,2,{0xA2,0xC3,0x00,0x00,}},
- {0x249B,2,{0xA2,0xC4,0x00,0x00,}},
- {0x249C,4,{0x81,0x37,0x8D,0x36,}},
- {0x249D,4,{0x81,0x37,0x8D,0x37,}},
- {0x249E,4,{0x81,0x37,0x8D,0x38,}},
- {0x249F,4,{0x81,0x37,0x8D,0x39,}},
- {0x24A0,4,{0x81,0x37,0x8E,0x30,}},
- {0x24A1,4,{0x81,0x37,0x8E,0x31,}},
- {0x24A2,4,{0x81,0x37,0x8E,0x32,}},
- {0x24A3,4,{0x81,0x37,0x8E,0x33,}},
- {0x24A4,4,{0x81,0x37,0x8E,0x34,}},
- {0x24A5,4,{0x81,0x37,0x8E,0x35,}},
- {0x24A6,4,{0x81,0x37,0x8E,0x36,}},
- {0x24A7,4,{0x81,0x37,0x8E,0x37,}},
- {0x24A8,4,{0x81,0x37,0x8E,0x38,}},
- {0x24A9,4,{0x81,0x37,0x8E,0x39,}},
- {0x24AA,4,{0x81,0x37,0x8F,0x30,}},
- {0x24AB,4,{0x81,0x37,0x8F,0x31,}},
- {0x24AC,4,{0x81,0x37,0x8F,0x32,}},
- {0x24AD,4,{0x81,0x37,0x8F,0x33,}},
- {0x24AE,4,{0x81,0x37,0x8F,0x34,}},
- {0x24AF,4,{0x81,0x37,0x8F,0x35,}},
- {0x24B0,4,{0x81,0x37,0x8F,0x36,}},
- {0x24B1,4,{0x81,0x37,0x8F,0x37,}},
- {0x24B2,4,{0x81,0x37,0x8F,0x38,}},
- {0x24B3,4,{0x81,0x37,0x8F,0x39,}},
- {0x24B4,4,{0x81,0x37,0x90,0x30,}},
- {0x24B5,4,{0x81,0x37,0x90,0x31,}},
- {0x24B6,4,{0x81,0x37,0x90,0x32,}},
- {0x24B7,4,{0x81,0x37,0x90,0x33,}},
- {0x24B8,4,{0x81,0x37,0x90,0x34,}},
- {0x24B9,4,{0x81,0x37,0x90,0x35,}},
- {0x24BA,4,{0x81,0x37,0x90,0x36,}},
- {0x24BB,4,{0x81,0x37,0x90,0x37,}},
- {0x24BC,4,{0x81,0x37,0x90,0x38,}},
- {0x24BD,4,{0x81,0x37,0x90,0x39,}},
- {0x24BE,4,{0x81,0x37,0x91,0x30,}},
- {0x24BF,4,{0x81,0x37,0x91,0x31,}},
- {0x24C0,4,{0x81,0x37,0x91,0x32,}},
- {0x24C1,4,{0x81,0x37,0x91,0x33,}},
- {0x24C2,4,{0x81,0x37,0x91,0x34,}},
- {0x24C3,4,{0x81,0x37,0x91,0x35,}},
- {0x24C4,4,{0x81,0x37,0x91,0x36,}},
- {0x24C5,4,{0x81,0x37,0x91,0x37,}},
- {0x24C6,4,{0x81,0x37,0x91,0x38,}},
- {0x24C7,4,{0x81,0x37,0x91,0x39,}},
- {0x24C8,4,{0x81,0x37,0x92,0x30,}},
- {0x24C9,4,{0x81,0x37,0x92,0x31,}},
- {0x24CA,4,{0x81,0x37,0x92,0x32,}},
- {0x24CB,4,{0x81,0x37,0x92,0x33,}},
- {0x24CC,4,{0x81,0x37,0x92,0x34,}},
- {0x24CD,4,{0x81,0x37,0x92,0x35,}},
- {0x24CE,4,{0x81,0x37,0x92,0x36,}},
- {0x24CF,4,{0x81,0x37,0x92,0x37,}},
- {0x24D0,4,{0x81,0x37,0x92,0x38,}},
- {0x24D1,4,{0x81,0x37,0x92,0x39,}},
- {0x24D2,4,{0x81,0x37,0x93,0x30,}},
- {0x24D3,4,{0x81,0x37,0x93,0x31,}},
- {0x24D4,4,{0x81,0x37,0x93,0x32,}},
- {0x24D5,4,{0x81,0x37,0x93,0x33,}},
- {0x24D6,4,{0x81,0x37,0x93,0x34,}},
- {0x24D7,4,{0x81,0x37,0x93,0x35,}},
- {0x24D8,4,{0x81,0x37,0x93,0x36,}},
- {0x24D9,4,{0x81,0x37,0x93,0x37,}},
- {0x24DA,4,{0x81,0x37,0x93,0x38,}},
- {0x24DB,4,{0x81,0x37,0x93,0x39,}},
- {0x24DC,4,{0x81,0x37,0x94,0x30,}},
- {0x24DD,4,{0x81,0x37,0x94,0x31,}},
- {0x24DE,4,{0x81,0x37,0x94,0x32,}},
- {0x24DF,4,{0x81,0x37,0x94,0x33,}},
- {0x24E0,4,{0x81,0x37,0x94,0x34,}},
- {0x24E1,4,{0x81,0x37,0x94,0x35,}},
- {0x24E2,4,{0x81,0x37,0x94,0x36,}},
- {0x24E3,4,{0x81,0x37,0x94,0x37,}},
- {0x24E4,4,{0x81,0x37,0x94,0x38,}},
- {0x24E5,4,{0x81,0x37,0x94,0x39,}},
- {0x24E6,4,{0x81,0x37,0x95,0x30,}},
- {0x24E7,4,{0x81,0x37,0x95,0x31,}},
- {0x24E8,4,{0x81,0x37,0x95,0x32,}},
- {0x24E9,4,{0x81,0x37,0x95,0x33,}},
- {0x24EA,4,{0x81,0x37,0x95,0x34,}},
- {0x24EB,4,{0x81,0x37,0x95,0x35,}},
- {0x24EC,4,{0x81,0x37,0x95,0x36,}},
- {0x24ED,4,{0x81,0x37,0x95,0x37,}},
- {0x24EE,4,{0x81,0x37,0x95,0x38,}},
- {0x24EF,4,{0x81,0x37,0x95,0x39,}},
- {0x24F0,4,{0x81,0x37,0x96,0x30,}},
- {0x24F1,4,{0x81,0x37,0x96,0x31,}},
- {0x24F2,4,{0x81,0x37,0x96,0x32,}},
- {0x24F3,4,{0x81,0x37,0x96,0x33,}},
- {0x24F4,4,{0x81,0x37,0x96,0x34,}},
- {0x24F5,4,{0x81,0x37,0x96,0x35,}},
- {0x24F6,4,{0x81,0x37,0x96,0x36,}},
- {0x24F7,4,{0x81,0x37,0x96,0x37,}},
- {0x24F8,4,{0x81,0x37,0x96,0x38,}},
- {0x24F9,4,{0x81,0x37,0x96,0x39,}},
- {0x24FA,4,{0x81,0x37,0x97,0x30,}},
- {0x24FB,4,{0x81,0x37,0x97,0x31,}},
- {0x24FC,4,{0x81,0x37,0x97,0x32,}},
- {0x24FD,4,{0x81,0x37,0x97,0x33,}},
- {0x24FE,4,{0x81,0x37,0x97,0x34,}},
- {0x24FF,4,{0x81,0x37,0x97,0x35,}},
- {0x2500,2,{0xA9,0xA4,0x00,0x00,}},
- {0x2501,2,{0xA9,0xA5,0x00,0x00,}},
- {0x2502,2,{0xA9,0xA6,0x00,0x00,}},
- {0x2503,2,{0xA9,0xA7,0x00,0x00,}},
- {0x2504,2,{0xA9,0xA8,0x00,0x00,}},
- {0x2505,2,{0xA9,0xA9,0x00,0x00,}},
- {0x2506,2,{0xA9,0xAA,0x00,0x00,}},
- {0x2507,2,{0xA9,0xAB,0x00,0x00,}},
- {0x2508,2,{0xA9,0xAC,0x00,0x00,}},
- {0x2509,2,{0xA9,0xAD,0x00,0x00,}},
- {0x250A,2,{0xA9,0xAE,0x00,0x00,}},
- {0x250B,2,{0xA9,0xAF,0x00,0x00,}},
- {0x250C,2,{0xA9,0xB0,0x00,0x00,}},
- {0x250D,2,{0xA9,0xB1,0x00,0x00,}},
- {0x250E,2,{0xA9,0xB2,0x00,0x00,}},
- {0x250F,2,{0xA9,0xB3,0x00,0x00,}},
- {0x2510,2,{0xA9,0xB4,0x00,0x00,}},
- {0x2511,2,{0xA9,0xB5,0x00,0x00,}},
- {0x2512,2,{0xA9,0xB6,0x00,0x00,}},
- {0x2513,2,{0xA9,0xB7,0x00,0x00,}},
- {0x2514,2,{0xA9,0xB8,0x00,0x00,}},
- {0x2515,2,{0xA9,0xB9,0x00,0x00,}},
- {0x2516,2,{0xA9,0xBA,0x00,0x00,}},
- {0x2517,2,{0xA9,0xBB,0x00,0x00,}},
- {0x2518,2,{0xA9,0xBC,0x00,0x00,}},
- {0x2519,2,{0xA9,0xBD,0x00,0x00,}},
- {0x251A,2,{0xA9,0xBE,0x00,0x00,}},
- {0x251B,2,{0xA9,0xBF,0x00,0x00,}},
- {0x251C,2,{0xA9,0xC0,0x00,0x00,}},
- {0x251D,2,{0xA9,0xC1,0x00,0x00,}},
- {0x251E,2,{0xA9,0xC2,0x00,0x00,}},
- {0x251F,2,{0xA9,0xC3,0x00,0x00,}},
- {0x2520,2,{0xA9,0xC4,0x00,0x00,}},
- {0x2521,2,{0xA9,0xC5,0x00,0x00,}},
- {0x2522,2,{0xA9,0xC6,0x00,0x00,}},
- {0x2523,2,{0xA9,0xC7,0x00,0x00,}},
- {0x2524,2,{0xA9,0xC8,0x00,0x00,}},
- {0x2525,2,{0xA9,0xC9,0x00,0x00,}},
- {0x2526,2,{0xA9,0xCA,0x00,0x00,}},
- {0x2527,2,{0xA9,0xCB,0x00,0x00,}},
- {0x2528,2,{0xA9,0xCC,0x00,0x00,}},
- {0x2529,2,{0xA9,0xCD,0x00,0x00,}},
- {0x252A,2,{0xA9,0xCE,0x00,0x00,}},
- {0x252B,2,{0xA9,0xCF,0x00,0x00,}},
- {0x252C,2,{0xA9,0xD0,0x00,0x00,}},
- {0x252D,2,{0xA9,0xD1,0x00,0x00,}},
- {0x252E,2,{0xA9,0xD2,0x00,0x00,}},
- {0x252F,2,{0xA9,0xD3,0x00,0x00,}},
- {0x2530,2,{0xA9,0xD4,0x00,0x00,}},
- {0x2531,2,{0xA9,0xD5,0x00,0x00,}},
- {0x2532,2,{0xA9,0xD6,0x00,0x00,}},
- {0x2533,2,{0xA9,0xD7,0x00,0x00,}},
- {0x2534,2,{0xA9,0xD8,0x00,0x00,}},
- {0x2535,2,{0xA9,0xD9,0x00,0x00,}},
- {0x2536,2,{0xA9,0xDA,0x00,0x00,}},
- {0x2537,2,{0xA9,0xDB,0x00,0x00,}},
- {0x2538,2,{0xA9,0xDC,0x00,0x00,}},
- {0x2539,2,{0xA9,0xDD,0x00,0x00,}},
- {0x253A,2,{0xA9,0xDE,0x00,0x00,}},
- {0x253B,2,{0xA9,0xDF,0x00,0x00,}},
- {0x253C,2,{0xA9,0xE0,0x00,0x00,}},
- {0x253D,2,{0xA9,0xE1,0x00,0x00,}},
- {0x253E,2,{0xA9,0xE2,0x00,0x00,}},
- {0x253F,2,{0xA9,0xE3,0x00,0x00,}},
- {0x2540,2,{0xA9,0xE4,0x00,0x00,}},
- {0x2541,2,{0xA9,0xE5,0x00,0x00,}},
- {0x2542,2,{0xA9,0xE6,0x00,0x00,}},
- {0x2543,2,{0xA9,0xE7,0x00,0x00,}},
- {0x2544,2,{0xA9,0xE8,0x00,0x00,}},
- {0x2545,2,{0xA9,0xE9,0x00,0x00,}},
- {0x2546,2,{0xA9,0xEA,0x00,0x00,}},
- {0x2547,2,{0xA9,0xEB,0x00,0x00,}},
- {0x2548,2,{0xA9,0xEC,0x00,0x00,}},
- {0x2549,2,{0xA9,0xED,0x00,0x00,}},
- {0x254A,2,{0xA9,0xEE,0x00,0x00,}},
- {0x254B,2,{0xA9,0xEF,0x00,0x00,}},
- {0x254C,4,{0x81,0x37,0x97,0x36,}},
- {0x254D,4,{0x81,0x37,0x97,0x37,}},
- {0x254E,4,{0x81,0x37,0x97,0x38,}},
- {0x254F,4,{0x81,0x37,0x97,0x39,}},
- {0x2550,2,{0xA8,0x54,0x00,0x00,}},
- {0x2551,2,{0xA8,0x55,0x00,0x00,}},
- {0x2552,2,{0xA8,0x56,0x00,0x00,}},
- {0x2553,2,{0xA8,0x57,0x00,0x00,}},
- {0x2554,2,{0xA8,0x58,0x00,0x00,}},
- {0x2555,2,{0xA8,0x59,0x00,0x00,}},
- {0x2556,2,{0xA8,0x5A,0x00,0x00,}},
- {0x2557,2,{0xA8,0x5B,0x00,0x00,}},
- {0x2558,2,{0xA8,0x5C,0x00,0x00,}},
- {0x2559,2,{0xA8,0x5D,0x00,0x00,}},
- {0x255A,2,{0xA8,0x5E,0x00,0x00,}},
- {0x255B,2,{0xA8,0x5F,0x00,0x00,}},
- {0x255C,2,{0xA8,0x60,0x00,0x00,}},
- {0x255D,2,{0xA8,0x61,0x00,0x00,}},
- {0x255E,2,{0xA8,0x62,0x00,0x00,}},
- {0x255F,2,{0xA8,0x63,0x00,0x00,}},
- {0x2560,2,{0xA8,0x64,0x00,0x00,}},
- {0x2561,2,{0xA8,0x65,0x00,0x00,}},
- {0x2562,2,{0xA8,0x66,0x00,0x00,}},
- {0x2563,2,{0xA8,0x67,0x00,0x00,}},
- {0x2564,2,{0xA8,0x68,0x00,0x00,}},
- {0x2565,2,{0xA8,0x69,0x00,0x00,}},
- {0x2566,2,{0xA8,0x6A,0x00,0x00,}},
- {0x2567,2,{0xA8,0x6B,0x00,0x00,}},
- {0x2568,2,{0xA8,0x6C,0x00,0x00,}},
- {0x2569,2,{0xA8,0x6D,0x00,0x00,}},
- {0x256A,2,{0xA8,0x6E,0x00,0x00,}},
- {0x256B,2,{0xA8,0x6F,0x00,0x00,}},
- {0x256C,2,{0xA8,0x70,0x00,0x00,}},
- {0x256D,2,{0xA8,0x71,0x00,0x00,}},
- {0x256E,2,{0xA8,0x72,0x00,0x00,}},
- {0x256F,2,{0xA8,0x73,0x00,0x00,}},
- {0x2570,2,{0xA8,0x74,0x00,0x00,}},
- {0x2571,2,{0xA8,0x75,0x00,0x00,}},
- {0x2572,2,{0xA8,0x76,0x00,0x00,}},
- {0x2573,2,{0xA8,0x77,0x00,0x00,}},
- {0x2574,4,{0x81,0x37,0x98,0x30,}},
- {0x2575,4,{0x81,0x37,0x98,0x31,}},
- {0x2576,4,{0x81,0x37,0x98,0x32,}},
- {0x2577,4,{0x81,0x37,0x98,0x33,}},
- {0x2578,4,{0x81,0x37,0x98,0x34,}},
- {0x2579,4,{0x81,0x37,0x98,0x35,}},
- {0x257A,4,{0x81,0x37,0x98,0x36,}},
- {0x257B,4,{0x81,0x37,0x98,0x37,}},
- {0x257C,4,{0x81,0x37,0x98,0x38,}},
- {0x257D,4,{0x81,0x37,0x98,0x39,}},
- {0x257E,4,{0x81,0x37,0x99,0x30,}},
- {0x257F,4,{0x81,0x37,0x99,0x31,}},
- {0x2580,4,{0x81,0x37,0x99,0x32,}},
- {0x2581,2,{0xA8,0x78,0x00,0x00,}},
- {0x2582,2,{0xA8,0x79,0x00,0x00,}},
- {0x2583,2,{0xA8,0x7A,0x00,0x00,}},
- {0x2584,2,{0xA8,0x7B,0x00,0x00,}},
- {0x2585,2,{0xA8,0x7C,0x00,0x00,}},
- {0x2586,2,{0xA8,0x7D,0x00,0x00,}},
- {0x2587,2,{0xA8,0x7E,0x00,0x00,}},
- {0x2588,2,{0xA8,0x80,0x00,0x00,}},
- {0x2589,2,{0xA8,0x81,0x00,0x00,}},
- {0x258A,2,{0xA8,0x82,0x00,0x00,}},
- {0x258B,2,{0xA8,0x83,0x00,0x00,}},
- {0x258C,2,{0xA8,0x84,0x00,0x00,}},
- {0x258D,2,{0xA8,0x85,0x00,0x00,}},
- {0x258E,2,{0xA8,0x86,0x00,0x00,}},
- {0x258F,2,{0xA8,0x87,0x00,0x00,}},
- {0x2590,4,{0x81,0x37,0x99,0x33,}},
- {0x2591,4,{0x81,0x37,0x99,0x34,}},
- {0x2592,4,{0x81,0x37,0x99,0x35,}},
- {0x2593,2,{0xA8,0x88,0x00,0x00,}},
- {0x2594,2,{0xA8,0x89,0x00,0x00,}},
- {0x2595,2,{0xA8,0x8A,0x00,0x00,}},
- {0x2596,4,{0x81,0x37,0x99,0x36,}},
- {0x2597,4,{0x81,0x37,0x99,0x37,}},
- {0x2598,4,{0x81,0x37,0x99,0x38,}},
- {0x2599,4,{0x81,0x37,0x99,0x39,}},
- {0x259A,4,{0x81,0x37,0x9A,0x30,}},
- {0x259B,4,{0x81,0x37,0x9A,0x31,}},
- {0x259C,4,{0x81,0x37,0x9A,0x32,}},
- {0x259D,4,{0x81,0x37,0x9A,0x33,}},
- {0x259E,4,{0x81,0x37,0x9A,0x34,}},
- {0x259F,4,{0x81,0x37,0x9A,0x35,}},
- {0x25A0,2,{0xA1,0xF6,0x00,0x00,}},
- {0x25A1,2,{0xA1,0xF5,0x00,0x00,}},
- {0x25A2,4,{0x81,0x37,0x9A,0x36,}},
- {0x25A3,4,{0x81,0x37,0x9A,0x37,}},
- {0x25A4,4,{0x81,0x37,0x9A,0x38,}},
- {0x25A5,4,{0x81,0x37,0x9A,0x39,}},
- {0x25A6,4,{0x81,0x37,0x9B,0x30,}},
- {0x25A7,4,{0x81,0x37,0x9B,0x31,}},
- {0x25A8,4,{0x81,0x37,0x9B,0x32,}},
- {0x25A9,4,{0x81,0x37,0x9B,0x33,}},
- {0x25AA,4,{0x81,0x37,0x9B,0x34,}},
- {0x25AB,4,{0x81,0x37,0x9B,0x35,}},
- {0x25AC,4,{0x81,0x37,0x9B,0x36,}},
- {0x25AD,4,{0x81,0x37,0x9B,0x37,}},
- {0x25AE,4,{0x81,0x37,0x9B,0x38,}},
- {0x25AF,4,{0x81,0x37,0x9B,0x39,}},
- {0x25B0,4,{0x81,0x37,0x9C,0x30,}},
- {0x25B1,4,{0x81,0x37,0x9C,0x31,}},
- {0x25B2,2,{0xA1,0xF8,0x00,0x00,}},
- {0x25B3,2,{0xA1,0xF7,0x00,0x00,}},
- {0x25B4,4,{0x81,0x37,0x9C,0x32,}},
- {0x25B5,4,{0x81,0x37,0x9C,0x33,}},
- {0x25B6,4,{0x81,0x37,0x9C,0x34,}},
- {0x25B7,4,{0x81,0x37,0x9C,0x35,}},
- {0x25B8,4,{0x81,0x37,0x9C,0x36,}},
- {0x25B9,4,{0x81,0x37,0x9C,0x37,}},
- {0x25BA,4,{0x81,0x37,0x9C,0x38,}},
- {0x25BB,4,{0x81,0x37,0x9C,0x39,}},
- {0x25BC,2,{0xA8,0x8B,0x00,0x00,}},
- {0x25BD,2,{0xA8,0x8C,0x00,0x00,}},
- {0x25BE,4,{0x81,0x37,0x9D,0x30,}},
- {0x25BF,4,{0x81,0x37,0x9D,0x31,}},
- {0x25C0,4,{0x81,0x37,0x9D,0x32,}},
- {0x25C1,4,{0x81,0x37,0x9D,0x33,}},
- {0x25C2,4,{0x81,0x37,0x9D,0x34,}},
- {0x25C3,4,{0x81,0x37,0x9D,0x35,}},
- {0x25C4,4,{0x81,0x37,0x9D,0x36,}},
- {0x25C5,4,{0x81,0x37,0x9D,0x37,}},
- {0x25C6,2,{0xA1,0xF4,0x00,0x00,}},
- {0x25C7,2,{0xA1,0xF3,0x00,0x00,}},
- {0x25C8,4,{0x81,0x37,0x9D,0x38,}},
- {0x25C9,4,{0x81,0x37,0x9D,0x39,}},
- {0x25CA,4,{0x81,0x37,0x9E,0x30,}},
- {0x25CB,2,{0xA1,0xF0,0x00,0x00,}},
- {0x25CC,4,{0x81,0x37,0x9E,0x31,}},
- {0x25CD,4,{0x81,0x37,0x9E,0x32,}},
- {0x25CE,2,{0xA1,0xF2,0x00,0x00,}},
- {0x25CF,2,{0xA1,0xF1,0x00,0x00,}},
- {0x25D0,4,{0x81,0x37,0x9E,0x33,}},
- {0x25D1,4,{0x81,0x37,0x9E,0x34,}},
- {0x25D2,4,{0x81,0x37,0x9E,0x35,}},
- {0x25D3,4,{0x81,0x37,0x9E,0x36,}},
- {0x25D4,4,{0x81,0x37,0x9E,0x37,}},
- {0x25D5,4,{0x81,0x37,0x9E,0x38,}},
- {0x25D6,4,{0x81,0x37,0x9E,0x39,}},
- {0x25D7,4,{0x81,0x37,0x9F,0x30,}},
- {0x25D8,4,{0x81,0x37,0x9F,0x31,}},
- {0x25D9,4,{0x81,0x37,0x9F,0x32,}},
- {0x25DA,4,{0x81,0x37,0x9F,0x33,}},
- {0x25DB,4,{0x81,0x37,0x9F,0x34,}},
- {0x25DC,4,{0x81,0x37,0x9F,0x35,}},
- {0x25DD,4,{0x81,0x37,0x9F,0x36,}},
- {0x25DE,4,{0x81,0x37,0x9F,0x37,}},
- {0x25DF,4,{0x81,0x37,0x9F,0x38,}},
- {0x25E0,4,{0x81,0x37,0x9F,0x39,}},
- {0x25E1,4,{0x81,0x37,0xA0,0x30,}},
- {0x25E2,2,{0xA8,0x8D,0x00,0x00,}},
- {0x25E3,2,{0xA8,0x8E,0x00,0x00,}},
- {0x25E4,2,{0xA8,0x8F,0x00,0x00,}},
- {0x25E5,2,{0xA8,0x90,0x00,0x00,}},
- {0x25E6,4,{0x81,0x37,0xA0,0x31,}},
- {0x25E7,4,{0x81,0x37,0xA0,0x32,}},
- {0x25E8,4,{0x81,0x37,0xA0,0x33,}},
- {0x25E9,4,{0x81,0x37,0xA0,0x34,}},
- {0x25EA,4,{0x81,0x37,0xA0,0x35,}},
- {0x25EB,4,{0x81,0x37,0xA0,0x36,}},
- {0x25EC,4,{0x81,0x37,0xA0,0x37,}},
- {0x25ED,4,{0x81,0x37,0xA0,0x38,}},
- {0x25EE,4,{0x81,0x37,0xA0,0x39,}},
- {0x25EF,4,{0x81,0x37,0xA1,0x30,}},
- {0x25F0,4,{0x81,0x37,0xA1,0x31,}},
- {0x25F1,4,{0x81,0x37,0xA1,0x32,}},
- {0x25F2,4,{0x81,0x37,0xA1,0x33,}},
- {0x25F3,4,{0x81,0x37,0xA1,0x34,}},
- {0x25F4,4,{0x81,0x37,0xA1,0x35,}},
- {0x25F5,4,{0x81,0x37,0xA1,0x36,}},
- {0x25F6,4,{0x81,0x37,0xA1,0x37,}},
- {0x25F7,4,{0x81,0x37,0xA1,0x38,}},
- {0x25F8,4,{0x81,0x37,0xA1,0x39,}},
- {0x25F9,4,{0x81,0x37,0xA2,0x30,}},
- {0x25FA,4,{0x81,0x37,0xA2,0x31,}},
- {0x25FB,4,{0x81,0x37,0xA2,0x32,}},
- {0x25FC,4,{0x81,0x37,0xA2,0x33,}},
- {0x25FD,4,{0x81,0x37,0xA2,0x34,}},
- {0x25FE,4,{0x81,0x37,0xA2,0x35,}},
- {0x25FF,4,{0x81,0x37,0xA2,0x36,}},
- {0x2600,4,{0x81,0x37,0xA2,0x37,}},
- {0x2601,4,{0x81,0x37,0xA2,0x38,}},
- {0x2602,4,{0x81,0x37,0xA2,0x39,}},
- {0x2603,4,{0x81,0x37,0xA3,0x30,}},
- {0x2604,4,{0x81,0x37,0xA3,0x31,}},
- {0x2605,2,{0xA1,0xEF,0x00,0x00,}},
- {0x2606,2,{0xA1,0xEE,0x00,0x00,}},
- {0x2607,4,{0x81,0x37,0xA3,0x32,}},
- {0x2608,4,{0x81,0x37,0xA3,0x33,}},
- {0x2609,2,{0xA8,0x91,0x00,0x00,}},
- {0x260A,4,{0x81,0x37,0xA3,0x34,}},
- {0x260B,4,{0x81,0x37,0xA3,0x35,}},
- {0x260C,4,{0x81,0x37,0xA3,0x36,}},
- {0x260D,4,{0x81,0x37,0xA3,0x37,}},
- {0x260E,4,{0x81,0x37,0xA3,0x38,}},
- {0x260F,4,{0x81,0x37,0xA3,0x39,}},
- {0x2610,4,{0x81,0x37,0xA4,0x30,}},
- {0x2611,4,{0x81,0x37,0xA4,0x31,}},
- {0x2612,4,{0x81,0x37,0xA4,0x32,}},
- {0x2613,4,{0x81,0x37,0xA4,0x33,}},
- {0x2614,4,{0x81,0x37,0xA4,0x34,}},
- {0x2615,4,{0x81,0x37,0xA4,0x35,}},
- {0x2616,4,{0x81,0x37,0xA4,0x36,}},
- {0x2617,4,{0x81,0x37,0xA4,0x37,}},
- {0x2618,4,{0x81,0x37,0xA4,0x38,}},
- {0x2619,4,{0x81,0x37,0xA4,0x39,}},
- {0x261A,4,{0x81,0x37,0xA5,0x30,}},
- {0x261B,4,{0x81,0x37,0xA5,0x31,}},
- {0x261C,4,{0x81,0x37,0xA5,0x32,}},
- {0x261D,4,{0x81,0x37,0xA5,0x33,}},
- {0x261E,4,{0x81,0x37,0xA5,0x34,}},
- {0x261F,4,{0x81,0x37,0xA5,0x35,}},
- {0x2620,4,{0x81,0x37,0xA5,0x36,}},
- {0x2621,4,{0x81,0x37,0xA5,0x37,}},
- {0x2622,4,{0x81,0x37,0xA5,0x38,}},
- {0x2623,4,{0x81,0x37,0xA5,0x39,}},
- {0x2624,4,{0x81,0x37,0xA6,0x30,}},
- {0x2625,4,{0x81,0x37,0xA6,0x31,}},
- {0x2626,4,{0x81,0x37,0xA6,0x32,}},
- {0x2627,4,{0x81,0x37,0xA6,0x33,}},
- {0x2628,4,{0x81,0x37,0xA6,0x34,}},
- {0x2629,4,{0x81,0x37,0xA6,0x35,}},
- {0x262A,4,{0x81,0x37,0xA6,0x36,}},
- {0x262B,4,{0x81,0x37,0xA6,0x37,}},
- {0x262C,4,{0x81,0x37,0xA6,0x38,}},
- {0x262D,4,{0x81,0x37,0xA6,0x39,}},
- {0x262E,4,{0x81,0x37,0xA7,0x30,}},
- {0x262F,4,{0x81,0x37,0xA7,0x31,}},
- {0x2630,4,{0x81,0x37,0xA7,0x32,}},
- {0x2631,4,{0x81,0x37,0xA7,0x33,}},
- {0x2632,4,{0x81,0x37,0xA7,0x34,}},
- {0x2633,4,{0x81,0x37,0xA7,0x35,}},
- {0x2634,4,{0x81,0x37,0xA7,0x36,}},
- {0x2635,4,{0x81,0x37,0xA7,0x37,}},
- {0x2636,4,{0x81,0x37,0xA7,0x38,}},
- {0x2637,4,{0x81,0x37,0xA7,0x39,}},
- {0x2638,4,{0x81,0x37,0xA8,0x30,}},
- {0x2639,4,{0x81,0x37,0xA8,0x31,}},
- {0x263A,4,{0x81,0x37,0xA8,0x32,}},
- {0x263B,4,{0x81,0x37,0xA8,0x33,}},
- {0x263C,4,{0x81,0x37,0xA8,0x34,}},
- {0x263D,4,{0x81,0x37,0xA8,0x35,}},
- {0x263E,4,{0x81,0x37,0xA8,0x36,}},
- {0x263F,4,{0x81,0x37,0xA8,0x37,}},
- {0x2640,2,{0xA1,0xE2,0x00,0x00,}},
- {0x2641,4,{0x81,0x37,0xA8,0x38,}},
- {0x2642,2,{0xA1,0xE1,0x00,0x00,}},
- {0x2E81,2,{0xFE,0x50,0x00,0x00,}},
- {0x2E82,4,{0x81,0x38,0xFD,0x39,}},
- {0x2E83,4,{0x81,0x38,0xFE,0x30,}},
- {0x2E84,2,{0xFE,0x54,0x00,0x00,}},
- {0x2E85,4,{0x81,0x38,0xFE,0x31,}},
- {0x2E86,4,{0x81,0x38,0xFE,0x32,}},
- {0x2E87,4,{0x81,0x38,0xFE,0x33,}},
- {0x2E88,2,{0xFE,0x57,0x00,0x00,}},
- {0x2E89,4,{0x81,0x38,0xFE,0x34,}},
- {0x2E8A,4,{0x81,0x38,0xFE,0x35,}},
- {0x2E8B,2,{0xFE,0x58,0x00,0x00,}},
- {0x2E8C,2,{0xFE,0x5D,0x00,0x00,}},
- {0x2E8D,4,{0x81,0x38,0xFE,0x36,}},
- {0x2E8E,4,{0x81,0x38,0xFE,0x37,}},
- {0x2E8F,4,{0x81,0x38,0xFE,0x38,}},
- {0x2E90,4,{0x81,0x38,0xFE,0x39,}},
- {0x2E91,4,{0x81,0x39,0x81,0x30,}},
- {0x2E92,4,{0x81,0x39,0x81,0x31,}},
- {0x2E93,4,{0x81,0x39,0x81,0x32,}},
- {0x2E94,4,{0x81,0x39,0x81,0x33,}},
- {0x2E95,4,{0x81,0x39,0x81,0x34,}},
- {0x2E96,4,{0x81,0x39,0x81,0x35,}},
- {0x2E97,2,{0xFE,0x5E,0x00,0x00,}},
- {0x2E98,4,{0x81,0x39,0x81,0x36,}},
- {0x2E99,4,{0x81,0x39,0x81,0x37,}},
- {0x2E9A,4,{0x81,0x39,0x81,0x38,}},
- {0x2E9B,4,{0x81,0x39,0x81,0x39,}},
- {0x2E9C,4,{0x81,0x39,0x82,0x30,}},
- {0x2E9D,4,{0x81,0x39,0x82,0x31,}},
- {0x2E9E,4,{0x81,0x39,0x82,0x32,}},
- {0x2E9F,4,{0x81,0x39,0x82,0x33,}},
- {0x2EA0,4,{0x81,0x39,0x82,0x34,}},
- {0x2EA1,4,{0x81,0x39,0x82,0x35,}},
- {0x2EA2,4,{0x81,0x39,0x82,0x36,}},
- {0x2EA3,4,{0x81,0x39,0x82,0x37,}},
- {0x2EA4,4,{0x81,0x39,0x82,0x38,}},
- {0x2EA5,4,{0x81,0x39,0x82,0x39,}},
- {0x2EA6,4,{0x81,0x39,0x83,0x30,}},
- {0x2EA7,2,{0xFE,0x6B,0x00,0x00,}},
- {0x2EA8,4,{0x81,0x39,0x83,0x31,}},
- {0x2EA9,4,{0x81,0x39,0x83,0x32,}},
- {0x2EAA,2,{0xFE,0x6E,0x00,0x00,}},
- {0x2EAB,4,{0x81,0x39,0x83,0x33,}},
- {0x2EAC,4,{0x81,0x39,0x83,0x34,}},
- {0x2EAD,4,{0x81,0x39,0x83,0x35,}},
- {0x2EAE,2,{0xFE,0x71,0x00,0x00,}},
- {0x2EAF,4,{0x81,0x39,0x83,0x36,}},
- {0x2EB0,4,{0x81,0x39,0x83,0x37,}},
- {0x2EB1,4,{0x81,0x39,0x83,0x38,}},
- {0x2EB2,4,{0x81,0x39,0x83,0x39,}},
- {0x2EB3,2,{0xFE,0x73,0x00,0x00,}},
- {0x2EB4,4,{0x81,0x39,0x84,0x30,}},
- {0x2EB5,4,{0x81,0x39,0x84,0x31,}},
- {0x2EB6,2,{0xFE,0x74,0x00,0x00,}},
- {0x2EB7,2,{0xFE,0x75,0x00,0x00,}},
- {0x2EB8,4,{0x81,0x39,0x84,0x32,}},
- {0x2EB9,4,{0x81,0x39,0x84,0x33,}},
- {0x2EBA,4,{0x81,0x39,0x84,0x34,}},
- {0x2EBB,2,{0xFE,0x79,0x00,0x00,}},
- {0x2EBC,4,{0x81,0x39,0x84,0x35,}},
- {0x2EBD,4,{0x81,0x39,0x84,0x36,}},
- {0x2EBE,4,{0x81,0x39,0x84,0x37,}},
- {0x2EBF,4,{0x81,0x39,0x84,0x38,}},
- {0x2EC0,4,{0x81,0x39,0x84,0x39,}},
- {0x2EC1,4,{0x81,0x39,0x85,0x30,}},
- {0x2EC2,4,{0x81,0x39,0x85,0x31,}},
- {0x2EC3,4,{0x81,0x39,0x85,0x32,}},
- {0x2EC4,4,{0x81,0x39,0x85,0x33,}},
- {0x2EC5,4,{0x81,0x39,0x85,0x34,}},
- {0x2EC6,4,{0x81,0x39,0x85,0x35,}},
- {0x2EC7,4,{0x81,0x39,0x85,0x36,}},
- {0x2EC8,4,{0x81,0x39,0x85,0x37,}},
- {0x2EC9,4,{0x81,0x39,0x85,0x38,}},
- {0x2ECA,2,{0xFE,0x84,0x00,0x00,}},
- {0x2ECB,4,{0x81,0x39,0x85,0x39,}},
- {0x2ECC,4,{0x81,0x39,0x86,0x30,}},
- {0x2ECD,4,{0x81,0x39,0x86,0x31,}},
- {0x2ECE,4,{0x81,0x39,0x86,0x32,}},
- {0x2ECF,4,{0x81,0x39,0x86,0x33,}},
- {0x2ED0,4,{0x81,0x39,0x86,0x34,}},
- {0x2ED1,4,{0x81,0x39,0x86,0x35,}},
- {0x2ED2,4,{0x81,0x39,0x86,0x36,}},
- {0x2ED3,4,{0x81,0x39,0x86,0x37,}},
- {0x2ED4,4,{0x81,0x39,0x86,0x38,}},
- {0x2ED5,4,{0x81,0x39,0x86,0x39,}},
- {0x2ED6,4,{0x81,0x39,0x87,0x30,}},
- {0x2ED7,4,{0x81,0x39,0x87,0x31,}},
- {0x2ED8,4,{0x81,0x39,0x87,0x32,}},
- {0x2ED9,4,{0x81,0x39,0x87,0x33,}},
- {0x2EDA,4,{0x81,0x39,0x87,0x34,}},
- {0x2EDB,4,{0x81,0x39,0x87,0x35,}},
- {0x2EDC,4,{0x81,0x39,0x87,0x36,}},
- {0x2EDD,4,{0x81,0x39,0x87,0x37,}},
- {0x2EDE,4,{0x81,0x39,0x87,0x38,}},
- {0x2EDF,4,{0x81,0x39,0x87,0x39,}},
- {0x2EE0,4,{0x81,0x39,0x88,0x30,}},
- {0x2EE1,4,{0x81,0x39,0x88,0x31,}},
- {0x2EE2,4,{0x81,0x39,0x88,0x32,}},
- {0x2EE3,4,{0x81,0x39,0x88,0x33,}},
- {0x2EE4,4,{0x81,0x39,0x88,0x34,}},
- {0x2EE5,4,{0x81,0x39,0x88,0x35,}},
- {0x2EE6,4,{0x81,0x39,0x88,0x36,}},
- {0x2EE7,4,{0x81,0x39,0x88,0x37,}},
- {0x2EE8,4,{0x81,0x39,0x88,0x38,}},
- {0x2EE9,4,{0x81,0x39,0x88,0x39,}},
- {0x2EEA,4,{0x81,0x39,0x89,0x30,}},
- {0x2EEB,4,{0x81,0x39,0x89,0x31,}},
- {0x2EEC,4,{0x81,0x39,0x89,0x32,}},
- {0x2EED,4,{0x81,0x39,0x89,0x33,}},
- {0x2EEE,4,{0x81,0x39,0x89,0x34,}},
- {0x2EEF,4,{0x81,0x39,0x89,0x35,}},
- {0x2EF0,4,{0x81,0x39,0x89,0x36,}},
- {0x2EF1,4,{0x81,0x39,0x89,0x37,}},
- {0x2EF2,4,{0x81,0x39,0x89,0x38,}},
- {0x2EF3,4,{0x81,0x39,0x89,0x39,}},
- {0x2EF4,4,{0x81,0x39,0x8A,0x30,}},
- {0x2EF5,4,{0x81,0x39,0x8A,0x31,}},
- {0x2EF6,4,{0x81,0x39,0x8A,0x32,}},
- {0x2EF7,4,{0x81,0x39,0x8A,0x33,}},
- {0x2EF8,4,{0x81,0x39,0x8A,0x34,}},
- {0x2EF9,4,{0x81,0x39,0x8A,0x35,}},
- {0x2EFA,4,{0x81,0x39,0x8A,0x36,}},
- {0x2EFB,4,{0x81,0x39,0x8A,0x37,}},
- {0x2EFC,4,{0x81,0x39,0x8A,0x38,}},
- {0x2EFD,4,{0x81,0x39,0x8A,0x39,}},
- {0x2EFE,4,{0x81,0x39,0x8B,0x30,}},
- {0x2EFF,4,{0x81,0x39,0x8B,0x31,}},
- {0x2F00,4,{0x81,0x39,0x8B,0x32,}},
- {0x2F01,4,{0x81,0x39,0x8B,0x33,}},
- {0x2F02,4,{0x81,0x39,0x8B,0x34,}},
- {0x2F03,4,{0x81,0x39,0x8B,0x35,}},
- {0x2F04,4,{0x81,0x39,0x8B,0x36,}},
- {0x2F05,4,{0x81,0x39,0x8B,0x37,}},
- {0x2F06,4,{0x81,0x39,0x8B,0x38,}},
- {0x2F07,4,{0x81,0x39,0x8B,0x39,}},
- {0x2F08,4,{0x81,0x39,0x8C,0x30,}},
- {0x2F09,4,{0x81,0x39,0x8C,0x31,}},
- {0x2F0A,4,{0x81,0x39,0x8C,0x32,}},
- {0x2F0B,4,{0x81,0x39,0x8C,0x33,}},
- {0x2F0C,4,{0x81,0x39,0x8C,0x34,}},
- {0x2F0D,4,{0x81,0x39,0x8C,0x35,}},
- {0x2F0E,4,{0x81,0x39,0x8C,0x36,}},
- {0x2F0F,4,{0x81,0x39,0x8C,0x37,}},
- {0x2F10,4,{0x81,0x39,0x8C,0x38,}},
- {0x2F11,4,{0x81,0x39,0x8C,0x39,}},
- {0x2F12,4,{0x81,0x39,0x8D,0x30,}},
- {0x2F13,4,{0x81,0x39,0x8D,0x31,}},
- {0x2F14,4,{0x81,0x39,0x8D,0x32,}},
- {0x2F15,4,{0x81,0x39,0x8D,0x33,}},
- {0x2F16,4,{0x81,0x39,0x8D,0x34,}},
- {0x2F17,4,{0x81,0x39,0x8D,0x35,}},
- {0x2F18,4,{0x81,0x39,0x8D,0x36,}},
- {0x2F19,4,{0x81,0x39,0x8D,0x37,}},
- {0x2F1A,4,{0x81,0x39,0x8D,0x38,}},
- {0x2F1B,4,{0x81,0x39,0x8D,0x39,}},
- {0x2F1C,4,{0x81,0x39,0x8E,0x30,}},
- {0x2F1D,4,{0x81,0x39,0x8E,0x31,}},
- {0x2F1E,4,{0x81,0x39,0x8E,0x32,}},
- {0x2F1F,4,{0x81,0x39,0x8E,0x33,}},
- {0x2F20,4,{0x81,0x39,0x8E,0x34,}},
- {0x2F21,4,{0x81,0x39,0x8E,0x35,}},
- {0x2F22,4,{0x81,0x39,0x8E,0x36,}},
- {0x2F23,4,{0x81,0x39,0x8E,0x37,}},
- {0x2F24,4,{0x81,0x39,0x8E,0x38,}},
- {0x2F25,4,{0x81,0x39,0x8E,0x39,}},
- {0x2F26,4,{0x81,0x39,0x8F,0x30,}},
- {0x2F27,4,{0x81,0x39,0x8F,0x31,}},
- {0x2F28,4,{0x81,0x39,0x8F,0x32,}},
- {0x2F29,4,{0x81,0x39,0x8F,0x33,}},
- {0x2F2A,4,{0x81,0x39,0x8F,0x34,}},
- {0x2F2B,4,{0x81,0x39,0x8F,0x35,}},
- {0x2F2C,4,{0x81,0x39,0x8F,0x36,}},
- {0x2F2D,4,{0x81,0x39,0x8F,0x37,}},
- {0x2F2E,4,{0x81,0x39,0x8F,0x38,}},
- {0x2F2F,4,{0x81,0x39,0x8F,0x39,}},
- {0x2F30,4,{0x81,0x39,0x90,0x30,}},
- {0x2F31,4,{0x81,0x39,0x90,0x31,}},
- {0x2F32,4,{0x81,0x39,0x90,0x32,}},
- {0x2F33,4,{0x81,0x39,0x90,0x33,}},
- {0x2F34,4,{0x81,0x39,0x90,0x34,}},
- {0x2F35,4,{0x81,0x39,0x90,0x35,}},
- {0x2F36,4,{0x81,0x39,0x90,0x36,}},
- {0x2F37,4,{0x81,0x39,0x90,0x37,}},
- {0x2F38,4,{0x81,0x39,0x90,0x38,}},
- {0x2F39,4,{0x81,0x39,0x90,0x39,}},
- {0x2F3A,4,{0x81,0x39,0x91,0x30,}},
- {0x2F3B,4,{0x81,0x39,0x91,0x31,}},
- {0x2F3C,4,{0x81,0x39,0x91,0x32,}},
- {0x2F3D,4,{0x81,0x39,0x91,0x33,}},
- {0x2F3E,4,{0x81,0x39,0x91,0x34,}},
- {0x2F3F,4,{0x81,0x39,0x91,0x35,}},
- {0x2F40,4,{0x81,0x39,0x91,0x36,}},
- {0x2F41,4,{0x81,0x39,0x91,0x37,}},
- {0x2F42,4,{0x81,0x39,0x91,0x38,}},
- {0x2F43,4,{0x81,0x39,0x91,0x39,}},
- {0x2F44,4,{0x81,0x39,0x92,0x30,}},
- {0x2F45,4,{0x81,0x39,0x92,0x31,}},
- {0x2F46,4,{0x81,0x39,0x92,0x32,}},
- {0x2F47,4,{0x81,0x39,0x92,0x33,}},
- {0x2F48,4,{0x81,0x39,0x92,0x34,}},
- {0x2F49,4,{0x81,0x39,0x92,0x35,}},
- {0x2F4A,4,{0x81,0x39,0x92,0x36,}},
- {0x2F4B,4,{0x81,0x39,0x92,0x37,}},
- {0x2F4C,4,{0x81,0x39,0x92,0x38,}},
- {0x2F4D,4,{0x81,0x39,0x92,0x39,}},
- {0x2F4E,4,{0x81,0x39,0x93,0x30,}},
- {0x2F4F,4,{0x81,0x39,0x93,0x31,}},
- {0x2F50,4,{0x81,0x39,0x93,0x32,}},
- {0x2F51,4,{0x81,0x39,0x93,0x33,}},
- {0x2F52,4,{0x81,0x39,0x93,0x34,}},
- {0x2F53,4,{0x81,0x39,0x93,0x35,}},
- {0x2F54,4,{0x81,0x39,0x93,0x36,}},
- {0x2F55,4,{0x81,0x39,0x93,0x37,}},
- {0x2F56,4,{0x81,0x39,0x93,0x38,}},
- {0x2F57,4,{0x81,0x39,0x93,0x39,}},
- {0x2F58,4,{0x81,0x39,0x94,0x30,}},
- {0x2F59,4,{0x81,0x39,0x94,0x31,}},
- {0x2F5A,4,{0x81,0x39,0x94,0x32,}},
- {0x2F5B,4,{0x81,0x39,0x94,0x33,}},
- {0x2F5C,4,{0x81,0x39,0x94,0x34,}},
- {0x2F5D,4,{0x81,0x39,0x94,0x35,}},
- {0x2F5E,4,{0x81,0x39,0x94,0x36,}},
- {0x2F5F,4,{0x81,0x39,0x94,0x37,}},
- {0x2F60,4,{0x81,0x39,0x94,0x38,}},
- {0x2F61,4,{0x81,0x39,0x94,0x39,}},
- {0x2F62,4,{0x81,0x39,0x95,0x30,}},
- {0x2F63,4,{0x81,0x39,0x95,0x31,}},
- {0x2F64,4,{0x81,0x39,0x95,0x32,}},
- {0x2F65,4,{0x81,0x39,0x95,0x33,}},
- {0x2F66,4,{0x81,0x39,0x95,0x34,}},
- {0x2F67,4,{0x81,0x39,0x95,0x35,}},
- {0x2F68,4,{0x81,0x39,0x95,0x36,}},
- {0x2F69,4,{0x81,0x39,0x95,0x37,}},
- {0x2F6A,4,{0x81,0x39,0x95,0x38,}},
- {0x2F6B,4,{0x81,0x39,0x95,0x39,}},
- {0x2F6C,4,{0x81,0x39,0x96,0x30,}},
- {0x2F6D,4,{0x81,0x39,0x96,0x31,}},
- {0x2F6E,4,{0x81,0x39,0x96,0x32,}},
- {0x2F6F,4,{0x81,0x39,0x96,0x33,}},
- {0x2F70,4,{0x81,0x39,0x96,0x34,}},
- {0x2F71,4,{0x81,0x39,0x96,0x35,}},
- {0x2F72,4,{0x81,0x39,0x96,0x36,}},
- {0x2F73,4,{0x81,0x39,0x96,0x37,}},
- {0x2F74,4,{0x81,0x39,0x96,0x38,}},
- {0x2F75,4,{0x81,0x39,0x96,0x39,}},
- {0x2F76,4,{0x81,0x39,0x97,0x30,}},
- {0x2F77,4,{0x81,0x39,0x97,0x31,}},
- {0x2F78,4,{0x81,0x39,0x97,0x32,}},
- {0x2F79,4,{0x81,0x39,0x97,0x33,}},
- {0x2F7A,4,{0x81,0x39,0x97,0x34,}},
- {0x2F7B,4,{0x81,0x39,0x97,0x35,}},
- {0x2F7C,4,{0x81,0x39,0x97,0x36,}},
- {0x2F7D,4,{0x81,0x39,0x97,0x37,}},
- {0x2F7E,4,{0x81,0x39,0x97,0x38,}},
- {0x2F7F,4,{0x81,0x39,0x97,0x39,}},
- {0x2F80,4,{0x81,0x39,0x98,0x30,}},
- {0x2F81,4,{0x81,0x39,0x98,0x31,}},
- {0x2F82,4,{0x81,0x39,0x98,0x32,}},
- {0x2F83,4,{0x81,0x39,0x98,0x33,}},
- {0x2F84,4,{0x81,0x39,0x98,0x34,}},
- {0x2F85,4,{0x81,0x39,0x98,0x35,}},
- {0x2F86,4,{0x81,0x39,0x98,0x36,}},
- {0x2F87,4,{0x81,0x39,0x98,0x37,}},
- {0x2F88,4,{0x81,0x39,0x98,0x38,}},
- {0x2F89,4,{0x81,0x39,0x98,0x39,}},
- {0x2F8A,4,{0x81,0x39,0x99,0x30,}},
- {0x2F8B,4,{0x81,0x39,0x99,0x31,}},
- {0x2F8C,4,{0x81,0x39,0x99,0x32,}},
- {0x2F8D,4,{0x81,0x39,0x99,0x33,}},
- {0x2F8E,4,{0x81,0x39,0x99,0x34,}},
- {0x2F8F,4,{0x81,0x39,0x99,0x35,}},
- {0x2F90,4,{0x81,0x39,0x99,0x36,}},
- {0x2F91,4,{0x81,0x39,0x99,0x37,}},
- {0x2F92,4,{0x81,0x39,0x99,0x38,}},
- {0x2F93,4,{0x81,0x39,0x99,0x39,}},
- {0x2F94,4,{0x81,0x39,0x9A,0x30,}},
- {0x2F95,4,{0x81,0x39,0x9A,0x31,}},
- {0x2F96,4,{0x81,0x39,0x9A,0x32,}},
- {0x2F97,4,{0x81,0x39,0x9A,0x33,}},
- {0x2F98,4,{0x81,0x39,0x9A,0x34,}},
- {0x2F99,4,{0x81,0x39,0x9A,0x35,}},
- {0x2F9A,4,{0x81,0x39,0x9A,0x36,}},
- {0x2F9B,4,{0x81,0x39,0x9A,0x37,}},
- {0x2F9C,4,{0x81,0x39,0x9A,0x38,}},
- {0x2F9D,4,{0x81,0x39,0x9A,0x39,}},
- {0x2F9E,4,{0x81,0x39,0x9B,0x30,}},
- {0x2F9F,4,{0x81,0x39,0x9B,0x31,}},
- {0x2FA0,4,{0x81,0x39,0x9B,0x32,}},
- {0x2FA1,4,{0x81,0x39,0x9B,0x33,}},
- {0x2FA2,4,{0x81,0x39,0x9B,0x34,}},
- {0x2FA3,4,{0x81,0x39,0x9B,0x35,}},
- {0x2FA4,4,{0x81,0x39,0x9B,0x36,}},
- {0x2FA5,4,{0x81,0x39,0x9B,0x37,}},
- {0x2FA6,4,{0x81,0x39,0x9B,0x38,}},
- {0x2FA7,4,{0x81,0x39,0x9B,0x39,}},
- {0x2FA8,4,{0x81,0x39,0x9C,0x30,}},
- {0x2FA9,4,{0x81,0x39,0x9C,0x31,}},
- {0x2FAA,4,{0x81,0x39,0x9C,0x32,}},
- {0x2FAB,4,{0x81,0x39,0x9C,0x33,}},
- {0x2FAC,4,{0x81,0x39,0x9C,0x34,}},
- {0x2FAD,4,{0x81,0x39,0x9C,0x35,}},
- {0x2FAE,4,{0x81,0x39,0x9C,0x36,}},
- {0x2FAF,4,{0x81,0x39,0x9C,0x37,}},
- {0x2FB0,4,{0x81,0x39,0x9C,0x38,}},
- {0x2FB1,4,{0x81,0x39,0x9C,0x39,}},
- {0x2FB2,4,{0x81,0x39,0x9D,0x30,}},
- {0x2FB3,4,{0x81,0x39,0x9D,0x31,}},
- {0x2FB4,4,{0x81,0x39,0x9D,0x32,}},
- {0x2FB5,4,{0x81,0x39,0x9D,0x33,}},
- {0x2FB6,4,{0x81,0x39,0x9D,0x34,}},
- {0x2FB7,4,{0x81,0x39,0x9D,0x35,}},
- {0x2FB8,4,{0x81,0x39,0x9D,0x36,}},
- {0x2FB9,4,{0x81,0x39,0x9D,0x37,}},
- {0x2FBA,4,{0x81,0x39,0x9D,0x38,}},
- {0x2FBB,4,{0x81,0x39,0x9D,0x39,}},
- {0x2FBC,4,{0x81,0x39,0x9E,0x30,}},
- {0x2FBD,4,{0x81,0x39,0x9E,0x31,}},
- {0x2FBE,4,{0x81,0x39,0x9E,0x32,}},
- {0x2FBF,4,{0x81,0x39,0x9E,0x33,}},
- {0x2FC0,4,{0x81,0x39,0x9E,0x34,}},
- {0x2FC1,4,{0x81,0x39,0x9E,0x35,}},
- {0x2FC2,4,{0x81,0x39,0x9E,0x36,}},
- {0x2FC3,4,{0x81,0x39,0x9E,0x37,}},
- {0x2FC4,4,{0x81,0x39,0x9E,0x38,}},
- {0x2FC5,4,{0x81,0x39,0x9E,0x39,}},
- {0x2FC6,4,{0x81,0x39,0x9F,0x30,}},
- {0x2FC7,4,{0x81,0x39,0x9F,0x31,}},
- {0x2FC8,4,{0x81,0x39,0x9F,0x32,}},
- {0x2FC9,4,{0x81,0x39,0x9F,0x33,}},
- {0x2FCA,4,{0x81,0x39,0x9F,0x34,}},
- {0x2FCB,4,{0x81,0x39,0x9F,0x35,}},
- {0x2FCC,4,{0x81,0x39,0x9F,0x36,}},
- {0x2FCD,4,{0x81,0x39,0x9F,0x37,}},
- {0x2FCE,4,{0x81,0x39,0x9F,0x38,}},
- {0x2FCF,4,{0x81,0x39,0x9F,0x39,}},
- {0x2FD0,4,{0x81,0x39,0xA0,0x30,}},
- {0x2FD1,4,{0x81,0x39,0xA0,0x31,}},
- {0x2FD2,4,{0x81,0x39,0xA0,0x32,}},
- {0x2FD3,4,{0x81,0x39,0xA0,0x33,}},
- {0x2FD4,4,{0x81,0x39,0xA0,0x34,}},
- {0x2FD5,4,{0x81,0x39,0xA0,0x35,}},
- {0x2FD6,4,{0x81,0x39,0xA0,0x36,}},
- {0x2FD7,4,{0x81,0x39,0xA0,0x37,}},
- {0x2FD8,4,{0x81,0x39,0xA0,0x38,}},
- {0x2FD9,4,{0x81,0x39,0xA0,0x39,}},
- {0x2FDA,4,{0x81,0x39,0xA1,0x30,}},
- {0x2FDB,4,{0x81,0x39,0xA1,0x31,}},
- {0x2FDC,4,{0x81,0x39,0xA1,0x32,}},
- {0x2FDD,4,{0x81,0x39,0xA1,0x33,}},
- {0x2FDE,4,{0x81,0x39,0xA1,0x34,}},
- {0x2FDF,4,{0x81,0x39,0xA1,0x35,}},
- {0x2FE0,4,{0x81,0x39,0xA1,0x36,}},
- {0x2FE1,4,{0x81,0x39,0xA1,0x37,}},
- {0x2FE2,4,{0x81,0x39,0xA1,0x38,}},
- {0x2FE3,4,{0x81,0x39,0xA1,0x39,}},
- {0x2FE4,4,{0x81,0x39,0xA2,0x30,}},
- {0x2FE5,4,{0x81,0x39,0xA2,0x31,}},
- {0x2FE6,4,{0x81,0x39,0xA2,0x32,}},
- {0x2FE7,4,{0x81,0x39,0xA2,0x33,}},
- {0x2FE8,4,{0x81,0x39,0xA2,0x34,}},
- {0x2FE9,4,{0x81,0x39,0xA2,0x35,}},
- {0x2FEA,4,{0x81,0x39,0xA2,0x36,}},
- {0x2FEB,4,{0x81,0x39,0xA2,0x37,}},
- {0x2FEC,4,{0x81,0x39,0xA2,0x38,}},
- {0x2FED,4,{0x81,0x39,0xA2,0x39,}},
- {0x2FEE,4,{0x81,0x39,0xA3,0x30,}},
- {0x2FEF,4,{0x81,0x39,0xA3,0x31,}},
- {0x2FF0,2,{0xA9,0x8A,0x00,0x00,}},
- {0x2FF1,2,{0xA9,0x8B,0x00,0x00,}},
- {0x2FF2,2,{0xA9,0x8C,0x00,0x00,}},
- {0x2FF3,2,{0xA9,0x8D,0x00,0x00,}},
- {0x2FF4,2,{0xA9,0x8E,0x00,0x00,}},
- {0x2FF5,2,{0xA9,0x8F,0x00,0x00,}},
- {0x2FF6,2,{0xA9,0x90,0x00,0x00,}},
- {0x2FF7,2,{0xA9,0x91,0x00,0x00,}},
- {0x2FF8,2,{0xA9,0x92,0x00,0x00,}},
- {0x2FF9,2,{0xA9,0x93,0x00,0x00,}},
- {0x2FFA,2,{0xA9,0x94,0x00,0x00,}},
- {0x2FFB,2,{0xA9,0x95,0x00,0x00,}},
- {0x2FFC,4,{0x81,0x39,0xA3,0x32,}},
- {0x2FFD,4,{0x81,0x39,0xA3,0x33,}},
- {0x2FFE,4,{0x81,0x39,0xA3,0x34,}},
- {0x2FFF,4,{0x81,0x39,0xA3,0x35,}},
- {0x3000,2,{0xA1,0xA1,0x00,0x00,}},
- {0x3001,2,{0xA1,0xA2,0x00,0x00,}},
- {0x3002,2,{0xA1,0xA3,0x00,0x00,}},
- {0x3003,2,{0xA1,0xA8,0x00,0x00,}},
- {0x3004,4,{0x81,0x39,0xA3,0x36,}},
- {0x3005,2,{0xA1,0xA9,0x00,0x00,}},
- {0x3006,2,{0xA9,0x65,0x00,0x00,}},
- {0x3007,2,{0xA9,0x96,0x00,0x00,}},
- {0x3008,2,{0xA1,0xB4,0x00,0x00,}},
- {0x3009,2,{0xA1,0xB5,0x00,0x00,}},
- {0x300A,2,{0xA1,0xB6,0x00,0x00,}},
- {0x300B,2,{0xA1,0xB7,0x00,0x00,}},
- {0x300C,2,{0xA1,0xB8,0x00,0x00,}},
- {0x300D,2,{0xA1,0xB9,0x00,0x00,}},
- {0x300E,2,{0xA1,0xBA,0x00,0x00,}},
- {0x300F,2,{0xA1,0xBB,0x00,0x00,}},
- {0x3010,2,{0xA1,0xBE,0x00,0x00,}},
- {0x3011,2,{0xA1,0xBF,0x00,0x00,}},
- {0x3012,2,{0xA8,0x93,0x00,0x00,}},
- {0x3013,2,{0xA1,0xFE,0x00,0x00,}},
- {0x3014,2,{0xA1,0xB2,0x00,0x00,}},
- {0x3015,2,{0xA1,0xB3,0x00,0x00,}},
- {0x3016,2,{0xA1,0xBC,0x00,0x00,}},
- {0x3017,2,{0xA1,0xBD,0x00,0x00,}},
- {0x3018,4,{0x81,0x39,0xA3,0x37,}},
- {0x3019,4,{0x81,0x39,0xA3,0x38,}},
- {0x301A,4,{0x81,0x39,0xA3,0x39,}},
- {0x301B,4,{0x81,0x39,0xA4,0x30,}},
- {0x301C,4,{0x81,0x39,0xA4,0x31,}},
- {0x301D,2,{0xA8,0x94,0x00,0x00,}},
- {0x301E,2,{0xA8,0x95,0x00,0x00,}},
- {0x301F,4,{0x81,0x39,0xA4,0x32,}},
- {0x3020,4,{0x81,0x39,0xA4,0x33,}},
- {0x3021,2,{0xA9,0x40,0x00,0x00,}},
- {0x3022,2,{0xA9,0x41,0x00,0x00,}},
- {0x3023,2,{0xA9,0x42,0x00,0x00,}},
- {0x3024,2,{0xA9,0x43,0x00,0x00,}},
- {0x3025,2,{0xA9,0x44,0x00,0x00,}},
- {0x3026,2,{0xA9,0x45,0x00,0x00,}},
- {0x3027,2,{0xA9,0x46,0x00,0x00,}},
- {0x3028,2,{0xA9,0x47,0x00,0x00,}},
- {0x3029,2,{0xA9,0x48,0x00,0x00,}},
- {0x302A,4,{0x81,0x39,0xA4,0x34,}},
- {0x302B,4,{0x81,0x39,0xA4,0x35,}},
- {0x302C,4,{0x81,0x39,0xA4,0x36,}},
- {0x302D,4,{0x81,0x39,0xA4,0x37,}},
- {0x302E,4,{0x81,0x39,0xA4,0x38,}},
- {0x302F,4,{0x81,0x39,0xA4,0x39,}},
- {0x3030,4,{0x81,0x39,0xA5,0x30,}},
- {0x3031,4,{0x81,0x39,0xA5,0x31,}},
- {0x3032,4,{0x81,0x39,0xA5,0x32,}},
- {0x3033,4,{0x81,0x39,0xA5,0x33,}},
- {0x3034,4,{0x81,0x39,0xA5,0x34,}},
- {0x3035,4,{0x81,0x39,0xA5,0x35,}},
- {0x3036,4,{0x81,0x39,0xA5,0x36,}},
- {0x3037,4,{0x81,0x39,0xA5,0x37,}},
- {0x3038,4,{0x81,0x39,0xA5,0x38,}},
- {0x3039,4,{0x81,0x39,0xA5,0x39,}},
- {0x303A,4,{0x81,0x39,0xA6,0x30,}},
- {0x303B,4,{0x81,0x39,0xA6,0x31,}},
- {0x303C,4,{0x81,0x39,0xA6,0x32,}},
- {0x303D,4,{0x81,0x39,0xA6,0x33,}},
- {0x303E,2,{0xA9,0x89,0x00,0x00,}},
- {0x303F,4,{0x81,0x39,0xA6,0x34,}},
- {0x3040,4,{0x81,0x39,0xA6,0x35,}},
- {0x3041,2,{0xA4,0xA1,0x00,0x00,}},
- {0x3042,2,{0xA4,0xA2,0x00,0x00,}},
- {0x3043,2,{0xA4,0xA3,0x00,0x00,}},
- {0x3044,2,{0xA4,0xA4,0x00,0x00,}},
- {0x3045,2,{0xA4,0xA5,0x00,0x00,}},
- {0x3046,2,{0xA4,0xA6,0x00,0x00,}},
- {0x3047,2,{0xA4,0xA7,0x00,0x00,}},
- {0x3048,2,{0xA4,0xA8,0x00,0x00,}},
- {0x3049,2,{0xA4,0xA9,0x00,0x00,}},
- {0x304A,2,{0xA4,0xAA,0x00,0x00,}},
- {0x304B,2,{0xA4,0xAB,0x00,0x00,}},
- {0x304C,2,{0xA4,0xAC,0x00,0x00,}},
- {0x304D,2,{0xA4,0xAD,0x00,0x00,}},
- {0x304E,2,{0xA4,0xAE,0x00,0x00,}},
- {0x304F,2,{0xA4,0xAF,0x00,0x00,}},
- {0x3050,2,{0xA4,0xB0,0x00,0x00,}},
- {0x3051,2,{0xA4,0xB1,0x00,0x00,}},
- {0x3052,2,{0xA4,0xB2,0x00,0x00,}},
- {0x3053,2,{0xA4,0xB3,0x00,0x00,}},
- {0x3054,2,{0xA4,0xB4,0x00,0x00,}},
- {0x3055,2,{0xA4,0xB5,0x00,0x00,}},
- {0x3056,2,{0xA4,0xB6,0x00,0x00,}},
- {0x3057,2,{0xA4,0xB7,0x00,0x00,}},
- {0x3058,2,{0xA4,0xB8,0x00,0x00,}},
- {0x3059,2,{0xA4,0xB9,0x00,0x00,}},
- {0x305A,2,{0xA4,0xBA,0x00,0x00,}},
- {0x305B,2,{0xA4,0xBB,0x00,0x00,}},
- {0x305C,2,{0xA4,0xBC,0x00,0x00,}},
- {0x305D,2,{0xA4,0xBD,0x00,0x00,}},
- {0x305E,2,{0xA4,0xBE,0x00,0x00,}},
- {0x305F,2,{0xA4,0xBF,0x00,0x00,}},
- {0x3060,2,{0xA4,0xC0,0x00,0x00,}},
- {0x3061,2,{0xA4,0xC1,0x00,0x00,}},
- {0x3062,2,{0xA4,0xC2,0x00,0x00,}},
- {0x3063,2,{0xA4,0xC3,0x00,0x00,}},
- {0x3064,2,{0xA4,0xC4,0x00,0x00,}},
- {0x3065,2,{0xA4,0xC5,0x00,0x00,}},
- {0x3066,2,{0xA4,0xC6,0x00,0x00,}},
- {0x3067,2,{0xA4,0xC7,0x00,0x00,}},
- {0x3068,2,{0xA4,0xC8,0x00,0x00,}},
- {0x3069,2,{0xA4,0xC9,0x00,0x00,}},
- {0x306A,2,{0xA4,0xCA,0x00,0x00,}},
- {0x306B,2,{0xA4,0xCB,0x00,0x00,}},
- {0x306C,2,{0xA4,0xCC,0x00,0x00,}},
- {0x306D,2,{0xA4,0xCD,0x00,0x00,}},
- {0x306E,2,{0xA4,0xCE,0x00,0x00,}},
- {0x306F,2,{0xA4,0xCF,0x00,0x00,}},
- {0x3070,2,{0xA4,0xD0,0x00,0x00,}},
- {0x3071,2,{0xA4,0xD1,0x00,0x00,}},
- {0x3072,2,{0xA4,0xD2,0x00,0x00,}},
- {0x3073,2,{0xA4,0xD3,0x00,0x00,}},
- {0x3074,2,{0xA4,0xD4,0x00,0x00,}},
- {0x3075,2,{0xA4,0xD5,0x00,0x00,}},
- {0x3076,2,{0xA4,0xD6,0x00,0x00,}},
- {0x3077,2,{0xA4,0xD7,0x00,0x00,}},
- {0x3078,2,{0xA4,0xD8,0x00,0x00,}},
- {0x3079,2,{0xA4,0xD9,0x00,0x00,}},
- {0x307A,2,{0xA4,0xDA,0x00,0x00,}},
- {0x307B,2,{0xA4,0xDB,0x00,0x00,}},
- {0x307C,2,{0xA4,0xDC,0x00,0x00,}},
- {0x307D,2,{0xA4,0xDD,0x00,0x00,}},
- {0x307E,2,{0xA4,0xDE,0x00,0x00,}},
- {0x307F,2,{0xA4,0xDF,0x00,0x00,}},
- {0x3080,2,{0xA4,0xE0,0x00,0x00,}},
- {0x3081,2,{0xA4,0xE1,0x00,0x00,}},
- {0x3082,2,{0xA4,0xE2,0x00,0x00,}},
- {0x3083,2,{0xA4,0xE3,0x00,0x00,}},
- {0x3084,2,{0xA4,0xE4,0x00,0x00,}},
- {0x3085,2,{0xA4,0xE5,0x00,0x00,}},
- {0x3086,2,{0xA4,0xE6,0x00,0x00,}},
- {0x3087,2,{0xA4,0xE7,0x00,0x00,}},
- {0x3088,2,{0xA4,0xE8,0x00,0x00,}},
- {0x3089,2,{0xA4,0xE9,0x00,0x00,}},
- {0x308A,2,{0xA4,0xEA,0x00,0x00,}},
- {0x308B,2,{0xA4,0xEB,0x00,0x00,}},
- {0x308C,2,{0xA4,0xEC,0x00,0x00,}},
- {0x308D,2,{0xA4,0xED,0x00,0x00,}},
- {0x308E,2,{0xA4,0xEE,0x00,0x00,}},
- {0x308F,2,{0xA4,0xEF,0x00,0x00,}},
- {0x3090,2,{0xA4,0xF0,0x00,0x00,}},
- {0x3091,2,{0xA4,0xF1,0x00,0x00,}},
- {0x3092,2,{0xA4,0xF2,0x00,0x00,}},
- {0x3093,2,{0xA4,0xF3,0x00,0x00,}},
- {0x3094,4,{0x81,0x39,0xA6,0x36,}},
- {0x3095,4,{0x81,0x39,0xA6,0x37,}},
- {0x3096,4,{0x81,0x39,0xA6,0x38,}},
- {0x3097,4,{0x81,0x39,0xA6,0x39,}},
- {0x3098,4,{0x81,0x39,0xA7,0x30,}},
- {0x3099,4,{0x81,0x39,0xA7,0x31,}},
- {0x309A,4,{0x81,0x39,0xA7,0x32,}},
- {0x309B,2,{0xA9,0x61,0x00,0x00,}},
- {0x309C,2,{0xA9,0x62,0x00,0x00,}},
- {0x309D,2,{0xA9,0x66,0x00,0x00,}},
- {0x309E,2,{0xA9,0x67,0x00,0x00,}},
- {0x309F,4,{0x81,0x39,0xA7,0x33,}},
- {0x30A0,4,{0x81,0x39,0xA7,0x34,}},
- {0x30A1,2,{0xA5,0xA1,0x00,0x00,}},
- {0x30A2,2,{0xA5,0xA2,0x00,0x00,}},
- {0x30A3,2,{0xA5,0xA3,0x00,0x00,}},
- {0x30A4,2,{0xA5,0xA4,0x00,0x00,}},
- {0x30A5,2,{0xA5,0xA5,0x00,0x00,}},
- {0x30A6,2,{0xA5,0xA6,0x00,0x00,}},
- {0x30A7,2,{0xA5,0xA7,0x00,0x00,}},
- {0x30A8,2,{0xA5,0xA8,0x00,0x00,}},
- {0x30A9,2,{0xA5,0xA9,0x00,0x00,}},
- {0x30AA,2,{0xA5,0xAA,0x00,0x00,}},
- {0x30AB,2,{0xA5,0xAB,0x00,0x00,}},
- {0x30AC,2,{0xA5,0xAC,0x00,0x00,}},
- {0x30AD,2,{0xA5,0xAD,0x00,0x00,}},
- {0x30AE,2,{0xA5,0xAE,0x00,0x00,}},
- {0x30AF,2,{0xA5,0xAF,0x00,0x00,}},
- {0x30B0,2,{0xA5,0xB0,0x00,0x00,}},
- {0x30B1,2,{0xA5,0xB1,0x00,0x00,}},
- {0x30B2,2,{0xA5,0xB2,0x00,0x00,}},
- {0x30B3,2,{0xA5,0xB3,0x00,0x00,}},
- {0x30B4,2,{0xA5,0xB4,0x00,0x00,}},
- {0x30B5,2,{0xA5,0xB5,0x00,0x00,}},
- {0x30B6,2,{0xA5,0xB6,0x00,0x00,}},
- {0x30B7,2,{0xA5,0xB7,0x00,0x00,}},
- {0x30B8,2,{0xA5,0xB8,0x00,0x00,}},
- {0x30B9,2,{0xA5,0xB9,0x00,0x00,}},
- {0x30BA,2,{0xA5,0xBA,0x00,0x00,}},
- {0x30BB,2,{0xA5,0xBB,0x00,0x00,}},
- {0x30BC,2,{0xA5,0xBC,0x00,0x00,}},
- {0x30BD,2,{0xA5,0xBD,0x00,0x00,}},
- {0x30BE,2,{0xA5,0xBE,0x00,0x00,}},
- {0x30BF,2,{0xA5,0xBF,0x00,0x00,}},
- {0x30C0,2,{0xA5,0xC0,0x00,0x00,}},
- {0x30C1,2,{0xA5,0xC1,0x00,0x00,}},
- {0x30C2,2,{0xA5,0xC2,0x00,0x00,}},
- {0x30C3,2,{0xA5,0xC3,0x00,0x00,}},
- {0x30C4,2,{0xA5,0xC4,0x00,0x00,}},
- {0x30C5,2,{0xA5,0xC5,0x00,0x00,}},
- {0x30C6,2,{0xA5,0xC6,0x00,0x00,}},
- {0x30C7,2,{0xA5,0xC7,0x00,0x00,}},
- {0x30C8,2,{0xA5,0xC8,0x00,0x00,}},
- {0x30C9,2,{0xA5,0xC9,0x00,0x00,}},
- {0x30CA,2,{0xA5,0xCA,0x00,0x00,}},
- {0x30CB,2,{0xA5,0xCB,0x00,0x00,}},
- {0x30CC,2,{0xA5,0xCC,0x00,0x00,}},
- {0x30CD,2,{0xA5,0xCD,0x00,0x00,}},
- {0x30CE,2,{0xA5,0xCE,0x00,0x00,}},
- {0x30CF,2,{0xA5,0xCF,0x00,0x00,}},
- {0x30D0,2,{0xA5,0xD0,0x00,0x00,}},
- {0x30D1,2,{0xA5,0xD1,0x00,0x00,}},
- {0x30D2,2,{0xA5,0xD2,0x00,0x00,}},
- {0x30D3,2,{0xA5,0xD3,0x00,0x00,}},
- {0x30D4,2,{0xA5,0xD4,0x00,0x00,}},
- {0x30D5,2,{0xA5,0xD5,0x00,0x00,}},
- {0x30D6,2,{0xA5,0xD6,0x00,0x00,}},
- {0x30D7,2,{0xA5,0xD7,0x00,0x00,}},
- {0x30D8,2,{0xA5,0xD8,0x00,0x00,}},
- {0x30D9,2,{0xA5,0xD9,0x00,0x00,}},
- {0x30DA,2,{0xA5,0xDA,0x00,0x00,}},
- {0x30DB,2,{0xA5,0xDB,0x00,0x00,}},
- {0x30DC,2,{0xA5,0xDC,0x00,0x00,}},
- {0x30DD,2,{0xA5,0xDD,0x00,0x00,}},
- {0x30DE,2,{0xA5,0xDE,0x00,0x00,}},
- {0x30DF,2,{0xA5,0xDF,0x00,0x00,}},
- {0x30E0,2,{0xA5,0xE0,0x00,0x00,}},
- {0x30E1,2,{0xA5,0xE1,0x00,0x00,}},
- {0x30E2,2,{0xA5,0xE2,0x00,0x00,}},
- {0x30E3,2,{0xA5,0xE3,0x00,0x00,}},
- {0x30E4,2,{0xA5,0xE4,0x00,0x00,}},
- {0x30E5,2,{0xA5,0xE5,0x00,0x00,}},
- {0x30E6,2,{0xA5,0xE6,0x00,0x00,}},
- {0x30E7,2,{0xA5,0xE7,0x00,0x00,}},
- {0x30E8,2,{0xA5,0xE8,0x00,0x00,}},
- {0x30E9,2,{0xA5,0xE9,0x00,0x00,}},
- {0x30EA,2,{0xA5,0xEA,0x00,0x00,}},
- {0x30EB,2,{0xA5,0xEB,0x00,0x00,}},
- {0x30EC,2,{0xA5,0xEC,0x00,0x00,}},
- {0x30ED,2,{0xA5,0xED,0x00,0x00,}},
- {0x30EE,2,{0xA5,0xEE,0x00,0x00,}},
- {0x30EF,2,{0xA5,0xEF,0x00,0x00,}},
- {0x30F0,2,{0xA5,0xF0,0x00,0x00,}},
- {0x30F1,2,{0xA5,0xF1,0x00,0x00,}},
- {0x30F2,2,{0xA5,0xF2,0x00,0x00,}},
- {0x30F3,2,{0xA5,0xF3,0x00,0x00,}},
- {0x30F4,2,{0xA5,0xF4,0x00,0x00,}},
- {0x30F5,2,{0xA5,0xF5,0x00,0x00,}},
- {0x30F6,2,{0xA5,0xF6,0x00,0x00,}},
- {0x30F7,4,{0x81,0x39,0xA7,0x35,}},
- {0x30F8,4,{0x81,0x39,0xA7,0x36,}},
- {0x30F9,4,{0x81,0x39,0xA7,0x37,}},
- {0x30FA,4,{0x81,0x39,0xA7,0x38,}},
- {0x30FB,4,{0x81,0x39,0xA7,0x39,}},
- {0x30FC,2,{0xA9,0x60,0x00,0x00,}},
- {0x30FD,2,{0xA9,0x63,0x00,0x00,}},
- {0x30FE,2,{0xA9,0x64,0x00,0x00,}},
- {0x30FF,4,{0x81,0x39,0xA8,0x30,}},
- {0x3100,4,{0x81,0x39,0xA8,0x31,}},
- {0x3101,4,{0x81,0x39,0xA8,0x32,}},
- {0x3102,4,{0x81,0x39,0xA8,0x33,}},
- {0x3103,4,{0x81,0x39,0xA8,0x34,}},
- {0x3104,4,{0x81,0x39,0xA8,0x35,}},
- {0x3105,2,{0xA8,0xC5,0x00,0x00,}},
- {0x3106,2,{0xA8,0xC6,0x00,0x00,}},
- {0x3107,2,{0xA8,0xC7,0x00,0x00,}},
- {0x3108,2,{0xA8,0xC8,0x00,0x00,}},
- {0x3109,2,{0xA8,0xC9,0x00,0x00,}},
- {0x310A,2,{0xA8,0xCA,0x00,0x00,}},
- {0x310B,2,{0xA8,0xCB,0x00,0x00,}},
- {0x310C,2,{0xA8,0xCC,0x00,0x00,}},
- {0x310D,2,{0xA8,0xCD,0x00,0x00,}},
- {0x310E,2,{0xA8,0xCE,0x00,0x00,}},
- {0x310F,2,{0xA8,0xCF,0x00,0x00,}},
- {0x3110,2,{0xA8,0xD0,0x00,0x00,}},
- {0x3111,2,{0xA8,0xD1,0x00,0x00,}},
- {0x3112,2,{0xA8,0xD2,0x00,0x00,}},
- {0x3113,2,{0xA8,0xD3,0x00,0x00,}},
- {0x3114,2,{0xA8,0xD4,0x00,0x00,}},
- {0x3115,2,{0xA8,0xD5,0x00,0x00,}},
- {0x3116,2,{0xA8,0xD6,0x00,0x00,}},
- {0x3117,2,{0xA8,0xD7,0x00,0x00,}},
- {0x3118,2,{0xA8,0xD8,0x00,0x00,}},
- {0x3119,2,{0xA8,0xD9,0x00,0x00,}},
- {0x311A,2,{0xA8,0xDA,0x00,0x00,}},
- {0x311B,2,{0xA8,0xDB,0x00,0x00,}},
- {0x311C,2,{0xA8,0xDC,0x00,0x00,}},
- {0x311D,2,{0xA8,0xDD,0x00,0x00,}},
- {0x311E,2,{0xA8,0xDE,0x00,0x00,}},
- {0x311F,2,{0xA8,0xDF,0x00,0x00,}},
- {0x3120,2,{0xA8,0xE0,0x00,0x00,}},
- {0x3121,2,{0xA8,0xE1,0x00,0x00,}},
- {0x3122,2,{0xA8,0xE2,0x00,0x00,}},
- {0x3123,2,{0xA8,0xE3,0x00,0x00,}},
- {0x3124,2,{0xA8,0xE4,0x00,0x00,}},
- {0x3125,2,{0xA8,0xE5,0x00,0x00,}},
- {0x3126,2,{0xA8,0xE6,0x00,0x00,}},
- {0x3127,2,{0xA8,0xE7,0x00,0x00,}},
- {0x3128,2,{0xA8,0xE8,0x00,0x00,}},
- {0x3129,2,{0xA8,0xE9,0x00,0x00,}},
- {0x312A,4,{0x81,0x39,0xA8,0x36,}},
- {0x312B,4,{0x81,0x39,0xA8,0x37,}},
- {0x312C,4,{0x81,0x39,0xA8,0x38,}},
- {0x312D,4,{0x81,0x39,0xA8,0x39,}},
- {0x312E,4,{0x81,0x39,0xA9,0x30,}},
- {0x312F,4,{0x81,0x39,0xA9,0x31,}},
- {0x3130,4,{0x81,0x39,0xA9,0x32,}},
- {0x3131,4,{0x81,0x39,0xA9,0x33,}},
- {0x3132,4,{0x81,0x39,0xA9,0x34,}},
- {0x3133,4,{0x81,0x39,0xA9,0x35,}},
- {0x3134,4,{0x81,0x39,0xA9,0x36,}},
- {0x3135,4,{0x81,0x39,0xA9,0x37,}},
- {0x3136,4,{0x81,0x39,0xA9,0x38,}},
- {0x3137,4,{0x81,0x39,0xA9,0x39,}},
- {0x3138,4,{0x81,0x39,0xAA,0x30,}},
- {0x3139,4,{0x81,0x39,0xAA,0x31,}},
- {0x313A,4,{0x81,0x39,0xAA,0x32,}},
- {0x313B,4,{0x81,0x39,0xAA,0x33,}},
- {0x313C,4,{0x81,0x39,0xAA,0x34,}},
- {0x313D,4,{0x81,0x39,0xAA,0x35,}},
- {0x313E,4,{0x81,0x39,0xAA,0x36,}},
- {0x313F,4,{0x81,0x39,0xAA,0x37,}},
- {0x3140,4,{0x81,0x39,0xAA,0x38,}},
- {0x3141,4,{0x81,0x39,0xAA,0x39,}},
- {0x3142,4,{0x81,0x39,0xAB,0x30,}},
- {0x3143,4,{0x81,0x39,0xAB,0x31,}},
- {0x3144,4,{0x81,0x39,0xAB,0x32,}},
- {0x3145,4,{0x81,0x39,0xAB,0x33,}},
- {0x3146,4,{0x81,0x39,0xAB,0x34,}},
- {0x3147,4,{0x81,0x39,0xAB,0x35,}},
- {0x3148,4,{0x81,0x39,0xAB,0x36,}},
- {0x3149,4,{0x81,0x39,0xAB,0x37,}},
- {0x314A,4,{0x81,0x39,0xAB,0x38,}},
- {0x314B,4,{0x81,0x39,0xAB,0x39,}},
- {0x314C,4,{0x81,0x39,0xAC,0x30,}},
- {0x314D,4,{0x81,0x39,0xAC,0x31,}},
- {0x314E,4,{0x81,0x39,0xAC,0x32,}},
- {0x314F,4,{0x81,0x39,0xAC,0x33,}},
- {0x3150,4,{0x81,0x39,0xAC,0x34,}},
- {0x3151,4,{0x81,0x39,0xAC,0x35,}},
- {0x3152,4,{0x81,0x39,0xAC,0x36,}},
- {0x3153,4,{0x81,0x39,0xAC,0x37,}},
- {0x3154,4,{0x81,0x39,0xAC,0x38,}},
- {0x3155,4,{0x81,0x39,0xAC,0x39,}},
- {0x3156,4,{0x81,0x39,0xAD,0x30,}},
- {0x3157,4,{0x81,0x39,0xAD,0x31,}},
- {0x3158,4,{0x81,0x39,0xAD,0x32,}},
- {0x3159,4,{0x81,0x39,0xAD,0x33,}},
- {0x315A,4,{0x81,0x39,0xAD,0x34,}},
- {0x315B,4,{0x81,0x39,0xAD,0x35,}},
- {0x315C,4,{0x81,0x39,0xAD,0x36,}},
- {0x315D,4,{0x81,0x39,0xAD,0x37,}},
- {0x315E,4,{0x81,0x39,0xAD,0x38,}},
- {0x315F,4,{0x81,0x39,0xAD,0x39,}},
- {0x3160,4,{0x81,0x39,0xAE,0x30,}},
- {0x3161,4,{0x81,0x39,0xAE,0x31,}},
- {0x3162,4,{0x81,0x39,0xAE,0x32,}},
- {0x3163,4,{0x81,0x39,0xAE,0x33,}},
- {0x3164,4,{0x81,0x39,0xAE,0x34,}},
- {0x3165,4,{0x81,0x39,0xAE,0x35,}},
- {0x3166,4,{0x81,0x39,0xAE,0x36,}},
- {0x3167,4,{0x81,0x39,0xAE,0x37,}},
- {0x3168,4,{0x81,0x39,0xAE,0x38,}},
- {0x3169,4,{0x81,0x39,0xAE,0x39,}},
- {0x316A,4,{0x81,0x39,0xAF,0x30,}},
- {0x316B,4,{0x81,0x39,0xAF,0x31,}},
- {0x316C,4,{0x81,0x39,0xAF,0x32,}},
- {0x316D,4,{0x81,0x39,0xAF,0x33,}},
- {0x316E,4,{0x81,0x39,0xAF,0x34,}},
- {0x316F,4,{0x81,0x39,0xAF,0x35,}},
- {0x3170,4,{0x81,0x39,0xAF,0x36,}},
- {0x3171,4,{0x81,0x39,0xAF,0x37,}},
- {0x3172,4,{0x81,0x39,0xAF,0x38,}},
- {0x3173,4,{0x81,0x39,0xAF,0x39,}},
- {0x3174,4,{0x81,0x39,0xB0,0x30,}},
- {0x3175,4,{0x81,0x39,0xB0,0x31,}},
- {0x3176,4,{0x81,0x39,0xB0,0x32,}},
- {0x3177,4,{0x81,0x39,0xB0,0x33,}},
- {0x3178,4,{0x81,0x39,0xB0,0x34,}},
- {0x3179,4,{0x81,0x39,0xB0,0x35,}},
- {0x317A,4,{0x81,0x39,0xB0,0x36,}},
- {0x317B,4,{0x81,0x39,0xB0,0x37,}},
- {0x317C,4,{0x81,0x39,0xB0,0x38,}},
- {0x317D,4,{0x81,0x39,0xB0,0x39,}},
- {0x317E,4,{0x81,0x39,0xB1,0x30,}},
- {0x317F,4,{0x81,0x39,0xB1,0x31,}},
- {0x3180,4,{0x81,0x39,0xB1,0x32,}},
- {0x3181,4,{0x81,0x39,0xB1,0x33,}},
- {0x3182,4,{0x81,0x39,0xB1,0x34,}},
- {0x3183,4,{0x81,0x39,0xB1,0x35,}},
- {0x3184,4,{0x81,0x39,0xB1,0x36,}},
- {0x3185,4,{0x81,0x39,0xB1,0x37,}},
- {0x3186,4,{0x81,0x39,0xB1,0x38,}},
- {0x3187,4,{0x81,0x39,0xB1,0x39,}},
- {0x3188,4,{0x81,0x39,0xB2,0x30,}},
- {0x3189,4,{0x81,0x39,0xB2,0x31,}},
- {0x318A,4,{0x81,0x39,0xB2,0x32,}},
- {0x318B,4,{0x81,0x39,0xB2,0x33,}},
- {0x318C,4,{0x81,0x39,0xB2,0x34,}},
- {0x318D,4,{0x81,0x39,0xB2,0x35,}},
- {0x318E,4,{0x81,0x39,0xB2,0x36,}},
- {0x318F,4,{0x81,0x39,0xB2,0x37,}},
- {0x3190,4,{0x81,0x39,0xB2,0x38,}},
- {0x3191,4,{0x81,0x39,0xB2,0x39,}},
- {0x3192,4,{0x81,0x39,0xB3,0x30,}},
- {0x3193,4,{0x81,0x39,0xB3,0x31,}},
- {0x3194,4,{0x81,0x39,0xB3,0x32,}},
- {0x3195,4,{0x81,0x39,0xB3,0x33,}},
- {0x3196,4,{0x81,0x39,0xB3,0x34,}},
- {0x3197,4,{0x81,0x39,0xB3,0x35,}},
- {0x3198,4,{0x81,0x39,0xB3,0x36,}},
- {0x3199,4,{0x81,0x39,0xB3,0x37,}},
- {0x319A,4,{0x81,0x39,0xB3,0x38,}},
- {0x319B,4,{0x81,0x39,0xB3,0x39,}},
- {0x319C,4,{0x81,0x39,0xB4,0x30,}},
- {0x319D,4,{0x81,0x39,0xB4,0x31,}},
- {0x319E,4,{0x81,0x39,0xB4,0x32,}},
- {0x319F,4,{0x81,0x39,0xB4,0x33,}},
- {0x31A0,4,{0x81,0x39,0xB4,0x34,}},
- {0x31A1,4,{0x81,0x39,0xB4,0x35,}},
- {0x31A2,4,{0x81,0x39,0xB4,0x36,}},
- {0x31A3,4,{0x81,0x39,0xB4,0x37,}},
- {0x31A4,4,{0x81,0x39,0xB4,0x38,}},
- {0x31A5,4,{0x81,0x39,0xB4,0x39,}},
- {0x31A6,4,{0x81,0x39,0xB5,0x30,}},
- {0x31A7,4,{0x81,0x39,0xB5,0x31,}},
- {0x31A8,4,{0x81,0x39,0xB5,0x32,}},
- {0x31A9,4,{0x81,0x39,0xB5,0x33,}},
- {0x31AA,4,{0x81,0x39,0xB5,0x34,}},
- {0x31AB,4,{0x81,0x39,0xB5,0x35,}},
- {0x31AC,4,{0x81,0x39,0xB5,0x36,}},
- {0x31AD,4,{0x81,0x39,0xB5,0x37,}},
- {0x31AE,4,{0x81,0x39,0xB5,0x38,}},
- {0x31AF,4,{0x81,0x39,0xB5,0x39,}},
- {0x31B0,4,{0x81,0x39,0xB6,0x30,}},
- {0x31B1,4,{0x81,0x39,0xB6,0x31,}},
- {0x31B2,4,{0x81,0x39,0xB6,0x32,}},
- {0x31B3,4,{0x81,0x39,0xB6,0x33,}},
- {0x31B4,4,{0x81,0x39,0xB6,0x34,}},
- {0x31B5,4,{0x81,0x39,0xB6,0x35,}},
- {0x31B6,4,{0x81,0x39,0xB6,0x36,}},
- {0x31B7,4,{0x81,0x39,0xB6,0x37,}},
- {0x31B8,4,{0x81,0x39,0xB6,0x38,}},
- {0x31B9,4,{0x81,0x39,0xB6,0x39,}},
- {0x31BA,4,{0x81,0x39,0xB7,0x30,}},
- {0x31BB,4,{0x81,0x39,0xB7,0x31,}},
- {0x31BC,4,{0x81,0x39,0xB7,0x32,}},
- {0x31BD,4,{0x81,0x39,0xB7,0x33,}},
- {0x31BE,4,{0x81,0x39,0xB7,0x34,}},
- {0x31BF,4,{0x81,0x39,0xB7,0x35,}},
- {0x31C0,4,{0x81,0x39,0xB7,0x36,}},
- {0x31C1,4,{0x81,0x39,0xB7,0x37,}},
- {0x31C2,4,{0x81,0x39,0xB7,0x38,}},
- {0x31C3,4,{0x81,0x39,0xB7,0x39,}},
- {0x31C4,4,{0x81,0x39,0xB8,0x30,}},
- {0x31C5,4,{0x81,0x39,0xB8,0x31,}},
- {0x31C6,4,{0x81,0x39,0xB8,0x32,}},
- {0x31C7,4,{0x81,0x39,0xB8,0x33,}},
- {0x31C8,4,{0x81,0x39,0xB8,0x34,}},
- {0x31C9,4,{0x81,0x39,0xB8,0x35,}},
- {0x31CA,4,{0x81,0x39,0xB8,0x36,}},
- {0x31CB,4,{0x81,0x39,0xB8,0x37,}},
- {0x31CC,4,{0x81,0x39,0xB8,0x38,}},
- {0x31CD,4,{0x81,0x39,0xB8,0x39,}},
- {0x31CE,4,{0x81,0x39,0xB9,0x30,}},
- {0x31CF,4,{0x81,0x39,0xB9,0x31,}},
- {0x31D0,4,{0x81,0x39,0xB9,0x32,}},
- {0x31D1,4,{0x81,0x39,0xB9,0x33,}},
- {0x31D2,4,{0x81,0x39,0xB9,0x34,}},
- {0x31D3,4,{0x81,0x39,0xB9,0x35,}},
- {0x31D4,4,{0x81,0x39,0xB9,0x36,}},
- {0x31D5,4,{0x81,0x39,0xB9,0x37,}},
- {0x31D6,4,{0x81,0x39,0xB9,0x38,}},
- {0x31D7,4,{0x81,0x39,0xB9,0x39,}},
- {0x31D8,4,{0x81,0x39,0xBA,0x30,}},
- {0x31D9,4,{0x81,0x39,0xBA,0x31,}},
- {0x31DA,4,{0x81,0x39,0xBA,0x32,}},
- {0x31DB,4,{0x81,0x39,0xBA,0x33,}},
- {0x31DC,4,{0x81,0x39,0xBA,0x34,}},
- {0x31DD,4,{0x81,0x39,0xBA,0x35,}},
- {0x31DE,4,{0x81,0x39,0xBA,0x36,}},
- {0x31DF,4,{0x81,0x39,0xBA,0x37,}},
- {0x31E0,4,{0x81,0x39,0xBA,0x38,}},
- {0x31E1,4,{0x81,0x39,0xBA,0x39,}},
- {0x31E2,4,{0x81,0x39,0xBB,0x30,}},
- {0x31E3,4,{0x81,0x39,0xBB,0x31,}},
- {0x31E4,4,{0x81,0x39,0xBB,0x32,}},
- {0x31E5,4,{0x81,0x39,0xBB,0x33,}},
- {0x31E6,4,{0x81,0x39,0xBB,0x34,}},
- {0x31E7,4,{0x81,0x39,0xBB,0x35,}},
- {0x31E8,4,{0x81,0x39,0xBB,0x36,}},
- {0x31E9,4,{0x81,0x39,0xBB,0x37,}},
- {0x31EA,4,{0x81,0x39,0xBB,0x38,}},
- {0x31EB,4,{0x81,0x39,0xBB,0x39,}},
- {0x31EC,4,{0x81,0x39,0xBC,0x30,}},
- {0x31ED,4,{0x81,0x39,0xBC,0x31,}},
- {0x31EE,4,{0x81,0x39,0xBC,0x32,}},
- {0x31EF,4,{0x81,0x39,0xBC,0x33,}},
- {0x31F0,4,{0x81,0x39,0xBC,0x34,}},
- {0x31F1,4,{0x81,0x39,0xBC,0x35,}},
- {0x31F2,4,{0x81,0x39,0xBC,0x36,}},
- {0x31F3,4,{0x81,0x39,0xBC,0x37,}},
- {0x31F4,4,{0x81,0x39,0xBC,0x38,}},
- {0x31F5,4,{0x81,0x39,0xBC,0x39,}},
- {0x31F6,4,{0x81,0x39,0xBD,0x30,}},
- {0x31F7,4,{0x81,0x39,0xBD,0x31,}},
- {0x31F8,4,{0x81,0x39,0xBD,0x32,}},
- {0x31F9,4,{0x81,0x39,0xBD,0x33,}},
- {0x31FA,4,{0x81,0x39,0xBD,0x34,}},
- {0x31FB,4,{0x81,0x39,0xBD,0x35,}},
- {0x31FC,4,{0x81,0x39,0xBD,0x36,}},
- {0x31FD,4,{0x81,0x39,0xBD,0x37,}},
- {0x31FE,4,{0x81,0x39,0xBD,0x38,}},
- {0x31FF,4,{0x81,0x39,0xBD,0x39,}},
- {0x3200,4,{0x81,0x39,0xBE,0x30,}},
- {0x3201,4,{0x81,0x39,0xBE,0x31,}},
- {0x3202,4,{0x81,0x39,0xBE,0x32,}},
- {0x3203,4,{0x81,0x39,0xBE,0x33,}},
- {0x3204,4,{0x81,0x39,0xBE,0x34,}},
- {0x3205,4,{0x81,0x39,0xBE,0x35,}},
- {0x3206,4,{0x81,0x39,0xBE,0x36,}},
- {0x3207,4,{0x81,0x39,0xBE,0x37,}},
- {0x3208,4,{0x81,0x39,0xBE,0x38,}},
- {0x3209,4,{0x81,0x39,0xBE,0x39,}},
- {0x320A,4,{0x81,0x39,0xBF,0x30,}},
- {0x320B,4,{0x81,0x39,0xBF,0x31,}},
- {0x320C,4,{0x81,0x39,0xBF,0x32,}},
- {0x320D,4,{0x81,0x39,0xBF,0x33,}},
- {0x320E,4,{0x81,0x39,0xBF,0x34,}},
- {0x320F,4,{0x81,0x39,0xBF,0x35,}},
- {0x3210,4,{0x81,0x39,0xBF,0x36,}},
- {0x3211,4,{0x81,0x39,0xBF,0x37,}},
- {0x3212,4,{0x81,0x39,0xBF,0x38,}},
- {0x3213,4,{0x81,0x39,0xBF,0x39,}},
- {0x3214,4,{0x81,0x39,0xC0,0x30,}},
- {0x3215,4,{0x81,0x39,0xC0,0x31,}},
- {0x3216,4,{0x81,0x39,0xC0,0x32,}},
- {0x3217,4,{0x81,0x39,0xC0,0x33,}},
- {0x3218,4,{0x81,0x39,0xC0,0x34,}},
- {0x3219,4,{0x81,0x39,0xC0,0x35,}},
- {0x321A,4,{0x81,0x39,0xC0,0x36,}},
- {0x321B,4,{0x81,0x39,0xC0,0x37,}},
- {0x321C,4,{0x81,0x39,0xC0,0x38,}},
- {0x321D,4,{0x81,0x39,0xC0,0x39,}},
- {0x321E,4,{0x81,0x39,0xC1,0x30,}},
- {0x321F,4,{0x81,0x39,0xC1,0x31,}},
- {0x3220,2,{0xA2,0xE5,0x00,0x00,}},
- {0x3221,2,{0xA2,0xE6,0x00,0x00,}},
- {0x3222,2,{0xA2,0xE7,0x00,0x00,}},
- {0x3223,2,{0xA2,0xE8,0x00,0x00,}},
- {0x3224,2,{0xA2,0xE9,0x00,0x00,}},
- {0x3225,2,{0xA2,0xEA,0x00,0x00,}},
- {0x3226,2,{0xA2,0xEB,0x00,0x00,}},
- {0x3227,2,{0xA2,0xEC,0x00,0x00,}},
- {0x3228,2,{0xA2,0xED,0x00,0x00,}},
- {0x3229,2,{0xA2,0xEE,0x00,0x00,}},
- {0x322A,4,{0x81,0x39,0xC1,0x32,}},
- {0x322B,4,{0x81,0x39,0xC1,0x33,}},
- {0x322C,4,{0x81,0x39,0xC1,0x34,}},
- {0x322D,4,{0x81,0x39,0xC1,0x35,}},
- {0x322E,4,{0x81,0x39,0xC1,0x36,}},
- {0x322F,4,{0x81,0x39,0xC1,0x37,}},
- {0x3230,4,{0x81,0x39,0xC1,0x38,}},
- {0x3231,2,{0xA9,0x5A,0x00,0x00,}},
- {0x3232,4,{0x81,0x39,0xC1,0x39,}},
- {0x3233,4,{0x81,0x39,0xC2,0x30,}},
- {0x3234,4,{0x81,0x39,0xC2,0x31,}},
- {0x3235,4,{0x81,0x39,0xC2,0x32,}},
- {0x3236,4,{0x81,0x39,0xC2,0x33,}},
- {0x3237,4,{0x81,0x39,0xC2,0x34,}},
- {0x3238,4,{0x81,0x39,0xC2,0x35,}},
- {0x3239,4,{0x81,0x39,0xC2,0x36,}},
- {0x323A,4,{0x81,0x39,0xC2,0x37,}},
- {0x323B,4,{0x81,0x39,0xC2,0x38,}},
- {0x323C,4,{0x81,0x39,0xC2,0x39,}},
- {0x323D,4,{0x81,0x39,0xC3,0x30,}},
- {0x323E,4,{0x81,0x39,0xC3,0x31,}},
- {0x323F,4,{0x81,0x39,0xC3,0x32,}},
- {0x3240,4,{0x81,0x39,0xC3,0x33,}},
- {0x3241,4,{0x81,0x39,0xC3,0x34,}},
- {0x3242,4,{0x81,0x39,0xC3,0x35,}},
- {0x3243,4,{0x81,0x39,0xC3,0x36,}},
- {0x3244,4,{0x81,0x39,0xC3,0x37,}},
- {0x3245,4,{0x81,0x39,0xC3,0x38,}},
- {0x3246,4,{0x81,0x39,0xC3,0x39,}},
- {0x3247,4,{0x81,0x39,0xC4,0x30,}},
- {0x3248,4,{0x81,0x39,0xC4,0x31,}},
- {0x3249,4,{0x81,0x39,0xC4,0x32,}},
- {0x324A,4,{0x81,0x39,0xC4,0x33,}},
- {0x324B,4,{0x81,0x39,0xC4,0x34,}},
- {0x324C,4,{0x81,0x39,0xC4,0x35,}},
- {0x324D,4,{0x81,0x39,0xC4,0x36,}},
- {0x324E,4,{0x81,0x39,0xC4,0x37,}},
- {0x324F,4,{0x81,0x39,0xC4,0x38,}},
- {0x3250,4,{0x81,0x39,0xC4,0x39,}},
- {0x3251,4,{0x81,0x39,0xC5,0x30,}},
- {0x3252,4,{0x81,0x39,0xC5,0x31,}},
- {0x3253,4,{0x81,0x39,0xC5,0x32,}},
- {0x3254,4,{0x81,0x39,0xC5,0x33,}},
- {0x3255,4,{0x81,0x39,0xC5,0x34,}},
- {0x3256,4,{0x81,0x39,0xC5,0x35,}},
- {0x3257,4,{0x81,0x39,0xC5,0x36,}},
- {0x3258,4,{0x81,0x39,0xC5,0x37,}},
- {0x3259,4,{0x81,0x39,0xC5,0x38,}},
- {0x325A,4,{0x81,0x39,0xC5,0x39,}},
- {0x325B,4,{0x81,0x39,0xC6,0x30,}},
- {0x325C,4,{0x81,0x39,0xC6,0x31,}},
- {0x325D,4,{0x81,0x39,0xC6,0x32,}},
- {0x325E,4,{0x81,0x39,0xC6,0x33,}},
- {0x325F,4,{0x81,0x39,0xC6,0x34,}},
- {0x3260,4,{0x81,0x39,0xC6,0x35,}},
- {0x3261,4,{0x81,0x39,0xC6,0x36,}},
- {0x3262,4,{0x81,0x39,0xC6,0x37,}},
- {0x3263,4,{0x81,0x39,0xC6,0x38,}},
- {0x3264,4,{0x81,0x39,0xC6,0x39,}},
- {0x3265,4,{0x81,0x39,0xC7,0x30,}},
- {0x3266,4,{0x81,0x39,0xC7,0x31,}},
- {0x3267,4,{0x81,0x39,0xC7,0x32,}},
- {0x3268,4,{0x81,0x39,0xC7,0x33,}},
- {0x3269,4,{0x81,0x39,0xC7,0x34,}},
- {0x326A,4,{0x81,0x39,0xC7,0x35,}},
- {0x326B,4,{0x81,0x39,0xC7,0x36,}},
- {0x326C,4,{0x81,0x39,0xC7,0x37,}},
- {0x326D,4,{0x81,0x39,0xC7,0x38,}},
- {0x326E,4,{0x81,0x39,0xC7,0x39,}},
- {0x326F,4,{0x81,0x39,0xC8,0x30,}},
- {0x3270,4,{0x81,0x39,0xC8,0x31,}},
- {0x3271,4,{0x81,0x39,0xC8,0x32,}},
- {0x3272,4,{0x81,0x39,0xC8,0x33,}},
- {0x3273,4,{0x81,0x39,0xC8,0x34,}},
- {0x3274,4,{0x81,0x39,0xC8,0x35,}},
- {0x3275,4,{0x81,0x39,0xC8,0x36,}},
- {0x3276,4,{0x81,0x39,0xC8,0x37,}},
- {0x3277,4,{0x81,0x39,0xC8,0x38,}},
- {0x3278,4,{0x81,0x39,0xC8,0x39,}},
- {0x3279,4,{0x81,0x39,0xC9,0x30,}},
- {0x327A,4,{0x81,0x39,0xC9,0x31,}},
- {0x327B,4,{0x81,0x39,0xC9,0x32,}},
- {0x327C,4,{0x81,0x39,0xC9,0x33,}},
- {0x327D,4,{0x81,0x39,0xC9,0x34,}},
- {0x327E,4,{0x81,0x39,0xC9,0x35,}},
- {0x327F,4,{0x81,0x39,0xC9,0x36,}},
- {0x3280,4,{0x81,0x39,0xC9,0x37,}},
- {0x3281,4,{0x81,0x39,0xC9,0x38,}},
- {0x3282,4,{0x81,0x39,0xC9,0x39,}},
- {0x3283,4,{0x81,0x39,0xCA,0x30,}},
- {0x3284,4,{0x81,0x39,0xCA,0x31,}},
- {0x3285,4,{0x81,0x39,0xCA,0x32,}},
- {0x3286,4,{0x81,0x39,0xCA,0x33,}},
- {0x3287,4,{0x81,0x39,0xCA,0x34,}},
- {0x3288,4,{0x81,0x39,0xCA,0x35,}},
- {0x3289,4,{0x81,0x39,0xCA,0x36,}},
- {0x328A,4,{0x81,0x39,0xCA,0x37,}},
- {0x328B,4,{0x81,0x39,0xCA,0x38,}},
- {0x328C,4,{0x81,0x39,0xCA,0x39,}},
- {0x328D,4,{0x81,0x39,0xCB,0x30,}},
- {0x328E,4,{0x81,0x39,0xCB,0x31,}},
- {0x328F,4,{0x81,0x39,0xCB,0x32,}},
- {0x3290,4,{0x81,0x39,0xCB,0x33,}},
- {0x3291,4,{0x81,0x39,0xCB,0x34,}},
- {0x3292,4,{0x81,0x39,0xCB,0x35,}},
- {0x3293,4,{0x81,0x39,0xCB,0x36,}},
- {0x3294,4,{0x81,0x39,0xCB,0x37,}},
- {0x3295,4,{0x81,0x39,0xCB,0x38,}},
- {0x3296,4,{0x81,0x39,0xCB,0x39,}},
- {0x3297,4,{0x81,0x39,0xCC,0x30,}},
- {0x3298,4,{0x81,0x39,0xCC,0x31,}},
- {0x3299,4,{0x81,0x39,0xCC,0x32,}},
- {0x329A,4,{0x81,0x39,0xCC,0x33,}},
- {0x329B,4,{0x81,0x39,0xCC,0x34,}},
- {0x329C,4,{0x81,0x39,0xCC,0x35,}},
- {0x329D,4,{0x81,0x39,0xCC,0x36,}},
- {0x329E,4,{0x81,0x39,0xCC,0x37,}},
- {0x329F,4,{0x81,0x39,0xCC,0x38,}},
- {0x32A0,4,{0x81,0x39,0xCC,0x39,}},
- {0x32A1,4,{0x81,0x39,0xCD,0x30,}},
- {0x32A2,4,{0x81,0x39,0xCD,0x31,}},
- {0x32A3,2,{0xA9,0x49,0x00,0x00,}},
- {0x32A4,4,{0x81,0x39,0xCD,0x32,}},
- {0x32A5,4,{0x81,0x39,0xCD,0x33,}},
- {0x32A6,4,{0x81,0x39,0xCD,0x34,}},
- {0x32A7,4,{0x81,0x39,0xCD,0x35,}},
- {0x32A8,4,{0x81,0x39,0xCD,0x36,}},
- {0x32A9,4,{0x81,0x39,0xCD,0x37,}},
- {0x32AA,4,{0x81,0x39,0xCD,0x38,}},
- {0x32AB,4,{0x81,0x39,0xCD,0x39,}},
- {0x32AC,4,{0x81,0x39,0xCE,0x30,}},
- {0x32AD,4,{0x81,0x39,0xCE,0x31,}},
- {0x32AE,4,{0x81,0x39,0xCE,0x32,}},
- {0x32AF,4,{0x81,0x39,0xCE,0x33,}},
- {0x32B0,4,{0x81,0x39,0xCE,0x34,}},
- {0x32B1,4,{0x81,0x39,0xCE,0x35,}},
- {0x32B2,4,{0x81,0x39,0xCE,0x36,}},
- {0x32B3,4,{0x81,0x39,0xCE,0x37,}},
- {0x32B4,4,{0x81,0x39,0xCE,0x38,}},
- {0x32B5,4,{0x81,0x39,0xCE,0x39,}},
- {0x32B6,4,{0x81,0x39,0xCF,0x30,}},
- {0x32B7,4,{0x81,0x39,0xCF,0x31,}},
- {0x32B8,4,{0x81,0x39,0xCF,0x32,}},
- {0x32B9,4,{0x81,0x39,0xCF,0x33,}},
- {0x32BA,4,{0x81,0x39,0xCF,0x34,}},
- {0x32BB,4,{0x81,0x39,0xCF,0x35,}},
- {0x32BC,4,{0x81,0x39,0xCF,0x36,}},
- {0x32BD,4,{0x81,0x39,0xCF,0x37,}},
- {0x32BE,4,{0x81,0x39,0xCF,0x38,}},
- {0x32BF,4,{0x81,0x39,0xCF,0x39,}},
- {0x32C0,4,{0x81,0x39,0xD0,0x30,}},
- {0x32C1,4,{0x81,0x39,0xD0,0x31,}},
- {0x32C2,4,{0x81,0x39,0xD0,0x32,}},
- {0x32C3,4,{0x81,0x39,0xD0,0x33,}},
- {0x32C4,4,{0x81,0x39,0xD0,0x34,}},
- {0x32C5,4,{0x81,0x39,0xD0,0x35,}},
- {0x32C6,4,{0x81,0x39,0xD0,0x36,}},
- {0x32C7,4,{0x81,0x39,0xD0,0x37,}},
- {0x32C8,4,{0x81,0x39,0xD0,0x38,}},
- {0x32C9,4,{0x81,0x39,0xD0,0x39,}},
- {0x32CA,4,{0x81,0x39,0xD1,0x30,}},
- {0x32CB,4,{0x81,0x39,0xD1,0x31,}},
- {0x32CC,4,{0x81,0x39,0xD1,0x32,}},
- {0x32CD,4,{0x81,0x39,0xD1,0x33,}},
- {0x32CE,4,{0x81,0x39,0xD1,0x34,}},
- {0x32CF,4,{0x81,0x39,0xD1,0x35,}},
- {0x32D0,4,{0x81,0x39,0xD1,0x36,}},
- {0x32D1,4,{0x81,0x39,0xD1,0x37,}},
- {0x32D2,4,{0x81,0x39,0xD1,0x38,}},
- {0x32D3,4,{0x81,0x39,0xD1,0x39,}},
- {0x32D4,4,{0x81,0x39,0xD2,0x30,}},
- {0x32D5,4,{0x81,0x39,0xD2,0x31,}},
- {0x32D6,4,{0x81,0x39,0xD2,0x32,}},
- {0x32D7,4,{0x81,0x39,0xD2,0x33,}},
- {0x32D8,4,{0x81,0x39,0xD2,0x34,}},
- {0x32D9,4,{0x81,0x39,0xD2,0x35,}},
- {0x32DA,4,{0x81,0x39,0xD2,0x36,}},
- {0x32DB,4,{0x81,0x39,0xD2,0x37,}},
- {0x32DC,4,{0x81,0x39,0xD2,0x38,}},
- {0x32DD,4,{0x81,0x39,0xD2,0x39,}},
- {0x32DE,4,{0x81,0x39,0xD3,0x30,}},
- {0x32DF,4,{0x81,0x39,0xD3,0x31,}},
- {0x32E0,4,{0x81,0x39,0xD3,0x32,}},
- {0x32E1,4,{0x81,0x39,0xD3,0x33,}},
- {0x32E2,4,{0x81,0x39,0xD3,0x34,}},
- {0x32E3,4,{0x81,0x39,0xD3,0x35,}},
- {0x32E4,4,{0x81,0x39,0xD3,0x36,}},
- {0x32E5,4,{0x81,0x39,0xD3,0x37,}},
- {0x32E6,4,{0x81,0x39,0xD3,0x38,}},
- {0x32E7,4,{0x81,0x39,0xD3,0x39,}},
- {0x32E8,4,{0x81,0x39,0xD4,0x30,}},
- {0x32E9,4,{0x81,0x39,0xD4,0x31,}},
- {0x32EA,4,{0x81,0x39,0xD4,0x32,}},
- {0x32EB,4,{0x81,0x39,0xD4,0x33,}},
- {0x32EC,4,{0x81,0x39,0xD4,0x34,}},
- {0x32ED,4,{0x81,0x39,0xD4,0x35,}},
- {0x32EE,4,{0x81,0x39,0xD4,0x36,}},
- {0x32EF,4,{0x81,0x39,0xD4,0x37,}},
- {0x32F0,4,{0x81,0x39,0xD4,0x38,}},
- {0x32F1,4,{0x81,0x39,0xD4,0x39,}},
- {0x32F2,4,{0x81,0x39,0xD5,0x30,}},
- {0x32F3,4,{0x81,0x39,0xD5,0x31,}},
- {0x32F4,4,{0x81,0x39,0xD5,0x32,}},
- {0x32F5,4,{0x81,0x39,0xD5,0x33,}},
- {0x32F6,4,{0x81,0x39,0xD5,0x34,}},
- {0x32F7,4,{0x81,0x39,0xD5,0x35,}},
- {0x32F8,4,{0x81,0x39,0xD5,0x36,}},
- {0x32F9,4,{0x81,0x39,0xD5,0x37,}},
- {0x32FA,4,{0x81,0x39,0xD5,0x38,}},
- {0x32FB,4,{0x81,0x39,0xD5,0x39,}},
- {0x32FC,4,{0x81,0x39,0xD6,0x30,}},
- {0x32FD,4,{0x81,0x39,0xD6,0x31,}},
- {0x32FE,4,{0x81,0x39,0xD6,0x32,}},
- {0x32FF,4,{0x81,0x39,0xD6,0x33,}},
- {0x3300,4,{0x81,0x39,0xD6,0x34,}},
- {0x3301,4,{0x81,0x39,0xD6,0x35,}},
- {0x3302,4,{0x81,0x39,0xD6,0x36,}},
- {0x3303,4,{0x81,0x39,0xD6,0x37,}},
- {0x3304,4,{0x81,0x39,0xD6,0x38,}},
- {0x3305,4,{0x81,0x39,0xD6,0x39,}},
- {0x3306,4,{0x81,0x39,0xD7,0x30,}},
- {0x3307,4,{0x81,0x39,0xD7,0x31,}},
- {0x3308,4,{0x81,0x39,0xD7,0x32,}},
- {0x3309,4,{0x81,0x39,0xD7,0x33,}},
- {0x330A,4,{0x81,0x39,0xD7,0x34,}},
- {0x330B,4,{0x81,0x39,0xD7,0x35,}},
- {0x330C,4,{0x81,0x39,0xD7,0x36,}},
- {0x330D,4,{0x81,0x39,0xD7,0x37,}},
- {0x330E,4,{0x81,0x39,0xD7,0x38,}},
- {0x330F,4,{0x81,0x39,0xD7,0x39,}},
- {0x3310,4,{0x81,0x39,0xD8,0x30,}},
- {0x3311,4,{0x81,0x39,0xD8,0x31,}},
- {0x3312,4,{0x81,0x39,0xD8,0x32,}},
- {0x3313,4,{0x81,0x39,0xD8,0x33,}},
- {0x3314,4,{0x81,0x39,0xD8,0x34,}},
- {0x3315,4,{0x81,0x39,0xD8,0x35,}},
- {0x3316,4,{0x81,0x39,0xD8,0x36,}},
- {0x3317,4,{0x81,0x39,0xD8,0x37,}},
- {0x3318,4,{0x81,0x39,0xD8,0x38,}},
- {0x3319,4,{0x81,0x39,0xD8,0x39,}},
- {0x331A,4,{0x81,0x39,0xD9,0x30,}},
- {0x331B,4,{0x81,0x39,0xD9,0x31,}},
- {0x331C,4,{0x81,0x39,0xD9,0x32,}},
- {0x331D,4,{0x81,0x39,0xD9,0x33,}},
- {0x331E,4,{0x81,0x39,0xD9,0x34,}},
- {0x331F,4,{0x81,0x39,0xD9,0x35,}},
- {0x3320,4,{0x81,0x39,0xD9,0x36,}},
- {0x3321,4,{0x81,0x39,0xD9,0x37,}},
- {0x3322,4,{0x81,0x39,0xD9,0x38,}},
- {0x3323,4,{0x81,0x39,0xD9,0x39,}},
- {0x3324,4,{0x81,0x39,0xDA,0x30,}},
- {0x3325,4,{0x81,0x39,0xDA,0x31,}},
- {0x3326,4,{0x81,0x39,0xDA,0x32,}},
- {0x3327,4,{0x81,0x39,0xDA,0x33,}},
- {0x3328,4,{0x81,0x39,0xDA,0x34,}},
- {0x3329,4,{0x81,0x39,0xDA,0x35,}},
- {0x332A,4,{0x81,0x39,0xDA,0x36,}},
- {0x332B,4,{0x81,0x39,0xDA,0x37,}},
- {0x332C,4,{0x81,0x39,0xDA,0x38,}},
- {0x332D,4,{0x81,0x39,0xDA,0x39,}},
- {0x332E,4,{0x81,0x39,0xDB,0x30,}},
- {0x332F,4,{0x81,0x39,0xDB,0x31,}},
- {0x3330,4,{0x81,0x39,0xDB,0x32,}},
- {0x3331,4,{0x81,0x39,0xDB,0x33,}},
- {0x3332,4,{0x81,0x39,0xDB,0x34,}},
- {0x3333,4,{0x81,0x39,0xDB,0x35,}},
- {0x3334,4,{0x81,0x39,0xDB,0x36,}},
- {0x3335,4,{0x81,0x39,0xDB,0x37,}},
- {0x3336,4,{0x81,0x39,0xDB,0x38,}},
- {0x3337,4,{0x81,0x39,0xDB,0x39,}},
- {0x3338,4,{0x81,0x39,0xDC,0x30,}},
- {0x3339,4,{0x81,0x39,0xDC,0x31,}},
- {0x333A,4,{0x81,0x39,0xDC,0x32,}},
- {0x333B,4,{0x81,0x39,0xDC,0x33,}},
- {0x333C,4,{0x81,0x39,0xDC,0x34,}},
- {0x333D,4,{0x81,0x39,0xDC,0x35,}},
- {0x333E,4,{0x81,0x39,0xDC,0x36,}},
- {0x333F,4,{0x81,0x39,0xDC,0x37,}},
- {0x3340,4,{0x81,0x39,0xDC,0x38,}},
- {0x3341,4,{0x81,0x39,0xDC,0x39,}},
- {0x3342,4,{0x81,0x39,0xDD,0x30,}},
- {0x3343,4,{0x81,0x39,0xDD,0x31,}},
- {0x3344,4,{0x81,0x39,0xDD,0x32,}},
- {0x3345,4,{0x81,0x39,0xDD,0x33,}},
- {0x3346,4,{0x81,0x39,0xDD,0x34,}},
- {0x3347,4,{0x81,0x39,0xDD,0x35,}},
- {0x3348,4,{0x81,0x39,0xDD,0x36,}},
- {0x3349,4,{0x81,0x39,0xDD,0x37,}},
- {0x334A,4,{0x81,0x39,0xDD,0x38,}},
- {0x334B,4,{0x81,0x39,0xDD,0x39,}},
- {0x334C,4,{0x81,0x39,0xDE,0x30,}},
- {0x334D,4,{0x81,0x39,0xDE,0x31,}},
- {0x334E,4,{0x81,0x39,0xDE,0x32,}},
- {0x334F,4,{0x81,0x39,0xDE,0x33,}},
- {0x3350,4,{0x81,0x39,0xDE,0x34,}},
- {0x3351,4,{0x81,0x39,0xDE,0x35,}},
- {0x3352,4,{0x81,0x39,0xDE,0x36,}},
- {0x3353,4,{0x81,0x39,0xDE,0x37,}},
- {0x3354,4,{0x81,0x39,0xDE,0x38,}},
- {0x3355,4,{0x81,0x39,0xDE,0x39,}},
- {0x3356,4,{0x81,0x39,0xDF,0x30,}},
- {0x3357,4,{0x81,0x39,0xDF,0x31,}},
- {0x3358,4,{0x81,0x39,0xDF,0x32,}},
- {0x3359,4,{0x81,0x39,0xDF,0x33,}},
- {0x335A,4,{0x81,0x39,0xDF,0x34,}},
- {0x335B,4,{0x81,0x39,0xDF,0x35,}},
- {0x335C,4,{0x81,0x39,0xDF,0x36,}},
- {0x335D,4,{0x81,0x39,0xDF,0x37,}},
- {0x335E,4,{0x81,0x39,0xDF,0x38,}},
- {0x335F,4,{0x81,0x39,0xDF,0x39,}},
- {0x3360,4,{0x81,0x39,0xE0,0x30,}},
- {0x3361,4,{0x81,0x39,0xE0,0x31,}},
- {0x3362,4,{0x81,0x39,0xE0,0x32,}},
- {0x3363,4,{0x81,0x39,0xE0,0x33,}},
- {0x3364,4,{0x81,0x39,0xE0,0x34,}},
- {0x3365,4,{0x81,0x39,0xE0,0x35,}},
- {0x3366,4,{0x81,0x39,0xE0,0x36,}},
- {0x3367,4,{0x81,0x39,0xE0,0x37,}},
- {0x3368,4,{0x81,0x39,0xE0,0x38,}},
- {0x3369,4,{0x81,0x39,0xE0,0x39,}},
- {0x336A,4,{0x81,0x39,0xE1,0x30,}},
- {0x336B,4,{0x81,0x39,0xE1,0x31,}},
- {0x336C,4,{0x81,0x39,0xE1,0x32,}},
- {0x336D,4,{0x81,0x39,0xE1,0x33,}},
- {0x336E,4,{0x81,0x39,0xE1,0x34,}},
- {0x336F,4,{0x81,0x39,0xE1,0x35,}},
- {0x3370,4,{0x81,0x39,0xE1,0x36,}},
- {0x3371,4,{0x81,0x39,0xE1,0x37,}},
- {0x3372,4,{0x81,0x39,0xE1,0x38,}},
- {0x3373,4,{0x81,0x39,0xE1,0x39,}},
- {0x3374,4,{0x81,0x39,0xE2,0x30,}},
- {0x3375,4,{0x81,0x39,0xE2,0x31,}},
- {0x3376,4,{0x81,0x39,0xE2,0x32,}},
- {0x3377,4,{0x81,0x39,0xE2,0x33,}},
- {0x3378,4,{0x81,0x39,0xE2,0x34,}},
- {0x3379,4,{0x81,0x39,0xE2,0x35,}},
- {0x337A,4,{0x81,0x39,0xE2,0x36,}},
- {0x337B,4,{0x81,0x39,0xE2,0x37,}},
- {0x337C,4,{0x81,0x39,0xE2,0x38,}},
- {0x337D,4,{0x81,0x39,0xE2,0x39,}},
- {0x337E,4,{0x81,0x39,0xE3,0x30,}},
- {0x337F,4,{0x81,0x39,0xE3,0x31,}},
- {0x3380,4,{0x81,0x39,0xE3,0x32,}},
- {0x3381,4,{0x81,0x39,0xE3,0x33,}},
- {0x3382,4,{0x81,0x39,0xE3,0x34,}},
- {0x3383,4,{0x81,0x39,0xE3,0x35,}},
- {0x3384,4,{0x81,0x39,0xE3,0x36,}},
- {0x3385,4,{0x81,0x39,0xE3,0x37,}},
- {0x3386,4,{0x81,0x39,0xE3,0x38,}},
- {0x3387,4,{0x81,0x39,0xE3,0x39,}},
- {0x3388,4,{0x81,0x39,0xE4,0x30,}},
- {0x3389,4,{0x81,0x39,0xE4,0x31,}},
- {0x338A,4,{0x81,0x39,0xE4,0x32,}},
- {0x338B,4,{0x81,0x39,0xE4,0x33,}},
- {0x338C,4,{0x81,0x39,0xE4,0x34,}},
- {0x338D,4,{0x81,0x39,0xE4,0x35,}},
- {0x338E,2,{0xA9,0x4A,0x00,0x00,}},
- {0x338F,2,{0xA9,0x4B,0x00,0x00,}},
- {0x3390,4,{0x81,0x39,0xE4,0x36,}},
- {0x3391,4,{0x81,0x39,0xE4,0x37,}},
- {0x3392,4,{0x81,0x39,0xE4,0x38,}},
- {0x3393,4,{0x81,0x39,0xE4,0x39,}},
- {0x3394,4,{0x81,0x39,0xE5,0x30,}},
- {0x3395,4,{0x81,0x39,0xE5,0x31,}},
- {0x3396,4,{0x81,0x39,0xE5,0x32,}},
- {0x3397,4,{0x81,0x39,0xE5,0x33,}},
- {0x3398,4,{0x81,0x39,0xE5,0x34,}},
- {0x3399,4,{0x81,0x39,0xE5,0x35,}},
- {0x339A,4,{0x81,0x39,0xE5,0x36,}},
- {0x339B,4,{0x81,0x39,0xE5,0x37,}},
- {0x339C,2,{0xA9,0x4C,0x00,0x00,}},
- {0x339D,2,{0xA9,0x4D,0x00,0x00,}},
- {0x339E,2,{0xA9,0x4E,0x00,0x00,}},
- {0x339F,4,{0x81,0x39,0xE5,0x38,}},
- {0x33A0,4,{0x81,0x39,0xE5,0x39,}},
- {0x33A1,2,{0xA9,0x4F,0x00,0x00,}},
- {0x33A2,4,{0x81,0x39,0xE6,0x30,}},
- {0x33A3,4,{0x81,0x39,0xE6,0x31,}},
- {0x33A4,4,{0x81,0x39,0xE6,0x32,}},
- {0x33A5,4,{0x81,0x39,0xE6,0x33,}},
- {0x33A6,4,{0x81,0x39,0xE6,0x34,}},
- {0x33A7,4,{0x81,0x39,0xE6,0x35,}},
- {0x33A8,4,{0x81,0x39,0xE6,0x36,}},
- {0x33A9,4,{0x81,0x39,0xE6,0x37,}},
- {0x33AA,4,{0x81,0x39,0xE6,0x38,}},
- {0x33AB,4,{0x81,0x39,0xE6,0x39,}},
- {0x33AC,4,{0x81,0x39,0xE7,0x30,}},
- {0x33AD,4,{0x81,0x39,0xE7,0x31,}},
- {0x33AE,4,{0x81,0x39,0xE7,0x32,}},
- {0x33AF,4,{0x81,0x39,0xE7,0x33,}},
- {0x33B0,4,{0x81,0x39,0xE7,0x34,}},
- {0x33B1,4,{0x81,0x39,0xE7,0x35,}},
- {0x33B2,4,{0x81,0x39,0xE7,0x36,}},
- {0x33B3,4,{0x81,0x39,0xE7,0x37,}},
- {0x33B4,4,{0x81,0x39,0xE7,0x38,}},
- {0x33B5,4,{0x81,0x39,0xE7,0x39,}},
- {0x33B6,4,{0x81,0x39,0xE8,0x30,}},
- {0x33B7,4,{0x81,0x39,0xE8,0x31,}},
- {0x33B8,4,{0x81,0x39,0xE8,0x32,}},
- {0x33B9,4,{0x81,0x39,0xE8,0x33,}},
- {0x33BA,4,{0x81,0x39,0xE8,0x34,}},
- {0x33BB,4,{0x81,0x39,0xE8,0x35,}},
- {0x33BC,4,{0x81,0x39,0xE8,0x36,}},
- {0x33BD,4,{0x81,0x39,0xE8,0x37,}},
- {0x33BE,4,{0x81,0x39,0xE8,0x38,}},
- {0x33BF,4,{0x81,0x39,0xE8,0x39,}},
- {0x33C0,4,{0x81,0x39,0xE9,0x30,}},
- {0x33C1,4,{0x81,0x39,0xE9,0x31,}},
- {0x33C2,4,{0x81,0x39,0xE9,0x32,}},
- {0x33C3,4,{0x81,0x39,0xE9,0x33,}},
- {0x33C4,2,{0xA9,0x50,0x00,0x00,}},
- {0x33C5,4,{0x81,0x39,0xE9,0x34,}},
- {0x33C6,4,{0x81,0x39,0xE9,0x35,}},
- {0x33C7,4,{0x81,0x39,0xE9,0x36,}},
- {0x33C8,4,{0x81,0x39,0xE9,0x37,}},
- {0x33C9,4,{0x81,0x39,0xE9,0x38,}},
- {0x33CA,4,{0x81,0x39,0xE9,0x39,}},
- {0x33CB,4,{0x81,0x39,0xEA,0x30,}},
- {0x33CC,4,{0x81,0x39,0xEA,0x31,}},
- {0x33CD,4,{0x81,0x39,0xEA,0x32,}},
- {0x33CE,2,{0xA9,0x51,0x00,0x00,}},
- {0x33CF,4,{0x81,0x39,0xEA,0x33,}},
- {0x33D0,4,{0x81,0x39,0xEA,0x34,}},
- {0x33D1,2,{0xA9,0x52,0x00,0x00,}},
- {0x33D2,2,{0xA9,0x53,0x00,0x00,}},
- {0x33D3,4,{0x81,0x39,0xEA,0x35,}},
- {0x33D4,4,{0x81,0x39,0xEA,0x36,}},
- {0x33D5,2,{0xA9,0x54,0x00,0x00,}},
- {0x33D6,4,{0x81,0x39,0xEA,0x37,}},
- {0x33D7,4,{0x81,0x39,0xEA,0x38,}},
- {0x33D8,4,{0x81,0x39,0xEA,0x39,}},
- {0x33D9,4,{0x81,0x39,0xEB,0x30,}},
- {0x33DA,4,{0x81,0x39,0xEB,0x31,}},
- {0x33DB,4,{0x81,0x39,0xEB,0x32,}},
- {0x33DC,4,{0x81,0x39,0xEB,0x33,}},
- {0x33DD,4,{0x81,0x39,0xEB,0x34,}},
- {0x33DE,4,{0x81,0x39,0xEB,0x35,}},
- {0x33DF,4,{0x81,0x39,0xEB,0x36,}},
- {0x33E0,4,{0x81,0x39,0xEB,0x37,}},
- {0x33E1,4,{0x81,0x39,0xEB,0x38,}},
- {0x33E2,4,{0x81,0x39,0xEB,0x39,}},
- {0x33E3,4,{0x81,0x39,0xEC,0x30,}},
- {0x33E4,4,{0x81,0x39,0xEC,0x31,}},
- {0x33E5,4,{0x81,0x39,0xEC,0x32,}},
- {0x33E6,4,{0x81,0x39,0xEC,0x33,}},
- {0x33E7,4,{0x81,0x39,0xEC,0x34,}},
- {0x33E8,4,{0x81,0x39,0xEC,0x35,}},
- {0x33E9,4,{0x81,0x39,0xEC,0x36,}},
- {0x33EA,4,{0x81,0x39,0xEC,0x37,}},
- {0x33EB,4,{0x81,0x39,0xEC,0x38,}},
- {0x33EC,4,{0x81,0x39,0xEC,0x39,}},
- {0x33ED,4,{0x81,0x39,0xED,0x30,}},
- {0x33EE,4,{0x81,0x39,0xED,0x31,}},
- {0x33EF,4,{0x81,0x39,0xED,0x32,}},
- {0x33F0,4,{0x81,0x39,0xED,0x33,}},
- {0x33F1,4,{0x81,0x39,0xED,0x34,}},
- {0x33F2,4,{0x81,0x39,0xED,0x35,}},
- {0x33F3,4,{0x81,0x39,0xED,0x36,}},
- {0x33F4,4,{0x81,0x39,0xED,0x37,}},
- {0x33F5,4,{0x81,0x39,0xED,0x38,}},
- {0x33F6,4,{0x81,0x39,0xED,0x39,}},
- {0x33F7,4,{0x81,0x39,0xEE,0x30,}},
- {0x33F8,4,{0x81,0x39,0xEE,0x31,}},
- {0x33F9,4,{0x81,0x39,0xEE,0x32,}},
- {0x33FA,4,{0x81,0x39,0xEE,0x33,}},
- {0x33FB,4,{0x81,0x39,0xEE,0x34,}},
- {0x33FC,4,{0x81,0x39,0xEE,0x35,}},
- {0x33FD,4,{0x81,0x39,0xEE,0x36,}},
- {0x33FE,4,{0x81,0x39,0xEE,0x37,}},
- {0x33FF,4,{0x81,0x39,0xEE,0x38,}},
- {0x3400,4,{0x81,0x39,0xEE,0x39,}},
- {0x3401,4,{0x81,0x39,0xEF,0x30,}},
- {0x3402,4,{0x81,0x39,0xEF,0x31,}},
- {0x3403,4,{0x81,0x39,0xEF,0x32,}},
- {0x3404,4,{0x81,0x39,0xEF,0x33,}},
- {0x3405,4,{0x81,0x39,0xEF,0x34,}},
- {0x3406,4,{0x81,0x39,0xEF,0x35,}},
- {0x3407,4,{0x81,0x39,0xEF,0x36,}},
- {0x3408,4,{0x81,0x39,0xEF,0x37,}},
- {0x3409,4,{0x81,0x39,0xEF,0x38,}},
- {0x340A,4,{0x81,0x39,0xEF,0x39,}},
- {0x340B,4,{0x81,0x39,0xF0,0x30,}},
- {0x340C,4,{0x81,0x39,0xF0,0x31,}},
- {0x340D,4,{0x81,0x39,0xF0,0x32,}},
- {0x340E,4,{0x81,0x39,0xF0,0x33,}},
- {0x340F,4,{0x81,0x39,0xF0,0x34,}},
- {0x3410,4,{0x81,0x39,0xF0,0x35,}},
- {0x3411,4,{0x81,0x39,0xF0,0x36,}},
- {0x3412,4,{0x81,0x39,0xF0,0x37,}},
- {0x3413,4,{0x81,0x39,0xF0,0x38,}},
- {0x3414,4,{0x81,0x39,0xF0,0x39,}},
- {0x3415,4,{0x81,0x39,0xF1,0x30,}},
- {0x3416,4,{0x81,0x39,0xF1,0x31,}},
- {0x3417,4,{0x81,0x39,0xF1,0x32,}},
- {0x3418,4,{0x81,0x39,0xF1,0x33,}},
- {0x3419,4,{0x81,0x39,0xF1,0x34,}},
- {0x341A,4,{0x81,0x39,0xF1,0x35,}},
- {0x341B,4,{0x81,0x39,0xF1,0x36,}},
- {0x341C,4,{0x81,0x39,0xF1,0x37,}},
- {0x341D,4,{0x81,0x39,0xF1,0x38,}},
- {0x341E,4,{0x81,0x39,0xF1,0x39,}},
- {0x341F,4,{0x81,0x39,0xF2,0x30,}},
- {0x3420,4,{0x81,0x39,0xF2,0x31,}},
- {0x3421,4,{0x81,0x39,0xF2,0x32,}},
- {0x3422,4,{0x81,0x39,0xF2,0x33,}},
- {0x3423,4,{0x81,0x39,0xF2,0x34,}},
- {0x3424,4,{0x81,0x39,0xF2,0x35,}},
- {0x3425,4,{0x81,0x39,0xF2,0x36,}},
- {0x3426,4,{0x81,0x39,0xF2,0x37,}},
- {0x3427,4,{0x81,0x39,0xF2,0x38,}},
- {0x3428,4,{0x81,0x39,0xF2,0x39,}},
- {0x3429,4,{0x81,0x39,0xF3,0x30,}},
- {0x342A,4,{0x81,0x39,0xF3,0x31,}},
- {0x342B,4,{0x81,0x39,0xF3,0x32,}},
- {0x342C,4,{0x81,0x39,0xF3,0x33,}},
- {0x342D,4,{0x81,0x39,0xF3,0x34,}},
- {0x342E,4,{0x81,0x39,0xF3,0x35,}},
- {0x342F,4,{0x81,0x39,0xF3,0x36,}},
- {0x3430,4,{0x81,0x39,0xF3,0x37,}},
- {0x3431,4,{0x81,0x39,0xF3,0x38,}},
- {0x3432,4,{0x81,0x39,0xF3,0x39,}},
- {0x3433,4,{0x81,0x39,0xF4,0x30,}},
- {0x3434,4,{0x81,0x39,0xF4,0x31,}},
- {0x3435,4,{0x81,0x39,0xF4,0x32,}},
- {0x3436,4,{0x81,0x39,0xF4,0x33,}},
- {0x3437,4,{0x81,0x39,0xF4,0x34,}},
- {0x3438,4,{0x81,0x39,0xF4,0x35,}},
- {0x3439,4,{0x81,0x39,0xF4,0x36,}},
- {0x343A,4,{0x81,0x39,0xF4,0x37,}},
- {0x343B,4,{0x81,0x39,0xF4,0x38,}},
- {0x343C,4,{0x81,0x39,0xF4,0x39,}},
- {0x343D,4,{0x81,0x39,0xF5,0x30,}},
- {0x343E,4,{0x81,0x39,0xF5,0x31,}},
- {0x343F,4,{0x81,0x39,0xF5,0x32,}},
- {0x3440,4,{0x81,0x39,0xF5,0x33,}},
- {0x3441,4,{0x81,0x39,0xF5,0x34,}},
- {0x3442,4,{0x81,0x39,0xF5,0x35,}},
- {0x3443,4,{0x81,0x39,0xF5,0x36,}},
- {0x3444,4,{0x81,0x39,0xF5,0x37,}},
- {0x3445,4,{0x81,0x39,0xF5,0x38,}},
- {0x3446,4,{0x81,0x39,0xF5,0x39,}},
- {0x3447,2,{0xFE,0x56,0x00,0x00,}},
- {0x3448,4,{0x81,0x39,0xF6,0x30,}},
- {0x3449,4,{0x81,0x39,0xF6,0x31,}},
- {0x344A,4,{0x81,0x39,0xF6,0x32,}},
- {0x344B,4,{0x81,0x39,0xF6,0x33,}},
- {0x344C,4,{0x81,0x39,0xF6,0x34,}},
- {0x344D,4,{0x81,0x39,0xF6,0x35,}},
- {0x344E,4,{0x81,0x39,0xF6,0x36,}},
- {0x344F,4,{0x81,0x39,0xF6,0x37,}},
- {0x3450,4,{0x81,0x39,0xF6,0x38,}},
- {0x3451,4,{0x81,0x39,0xF6,0x39,}},
- {0x3452,4,{0x81,0x39,0xF7,0x30,}},
- {0x3453,4,{0x81,0x39,0xF7,0x31,}},
- {0x3454,4,{0x81,0x39,0xF7,0x32,}},
- {0x3455,4,{0x81,0x39,0xF7,0x33,}},
- {0x3456,4,{0x81,0x39,0xF7,0x34,}},
- {0x3457,4,{0x81,0x39,0xF7,0x35,}},
- {0x3458,4,{0x81,0x39,0xF7,0x36,}},
- {0x3459,4,{0x81,0x39,0xF7,0x37,}},
- {0x345A,4,{0x81,0x39,0xF7,0x38,}},
- {0x345B,4,{0x81,0x39,0xF7,0x39,}},
- {0x345C,4,{0x81,0x39,0xF8,0x30,}},
- {0x345D,4,{0x81,0x39,0xF8,0x31,}},
- {0x345E,4,{0x81,0x39,0xF8,0x32,}},
- {0x345F,4,{0x81,0x39,0xF8,0x33,}},
- {0x3460,4,{0x81,0x39,0xF8,0x34,}},
- {0x3461,4,{0x81,0x39,0xF8,0x35,}},
- {0x3462,4,{0x81,0x39,0xF8,0x36,}},
- {0x3463,4,{0x81,0x39,0xF8,0x37,}},
- {0x3464,4,{0x81,0x39,0xF8,0x38,}},
- {0x3465,4,{0x81,0x39,0xF8,0x39,}},
- {0x3466,4,{0x81,0x39,0xF9,0x30,}},
- {0x3467,4,{0x81,0x39,0xF9,0x31,}},
- {0x3468,4,{0x81,0x39,0xF9,0x32,}},
- {0x3469,4,{0x81,0x39,0xF9,0x33,}},
- {0x346A,4,{0x81,0x39,0xF9,0x34,}},
- {0x346B,4,{0x81,0x39,0xF9,0x35,}},
- {0x346C,4,{0x81,0x39,0xF9,0x36,}},
- {0x346D,4,{0x81,0x39,0xF9,0x37,}},
- {0x346E,4,{0x81,0x39,0xF9,0x38,}},
- {0x346F,4,{0x81,0x39,0xF9,0x39,}},
- {0x3470,4,{0x81,0x39,0xFA,0x30,}},
- {0x3471,4,{0x81,0x39,0xFA,0x31,}},
- {0x3472,4,{0x81,0x39,0xFA,0x32,}},
- {0x3473,2,{0xFE,0x55,0x00,0x00,}},
- {0x3474,4,{0x81,0x39,0xFA,0x33,}},
- {0x3475,4,{0x81,0x39,0xFA,0x34,}},
- {0x3476,4,{0x81,0x39,0xFA,0x35,}},
- {0x3477,4,{0x81,0x39,0xFA,0x36,}},
- {0x3478,4,{0x81,0x39,0xFA,0x37,}},
- {0x3479,4,{0x81,0x39,0xFA,0x38,}},
- {0x347A,4,{0x81,0x39,0xFA,0x39,}},
- {0x347B,4,{0x81,0x39,0xFB,0x30,}},
- {0x347C,4,{0x81,0x39,0xFB,0x31,}},
- {0x347D,4,{0x81,0x39,0xFB,0x32,}},
- {0x347E,4,{0x81,0x39,0xFB,0x33,}},
- {0x347F,4,{0x81,0x39,0xFB,0x34,}},
- {0x3480,4,{0x81,0x39,0xFB,0x35,}},
- {0x3481,4,{0x81,0x39,0xFB,0x36,}},
- {0x3482,4,{0x81,0x39,0xFB,0x37,}},
- {0x3483,4,{0x81,0x39,0xFB,0x38,}},
- {0x3484,4,{0x81,0x39,0xFB,0x39,}},
- {0x3485,4,{0x81,0x39,0xFC,0x30,}},
- {0x3486,4,{0x81,0x39,0xFC,0x31,}},
- {0x3487,4,{0x81,0x39,0xFC,0x32,}},
- {0x3488,4,{0x81,0x39,0xFC,0x33,}},
- {0x3489,4,{0x81,0x39,0xFC,0x34,}},
- {0x348A,4,{0x81,0x39,0xFC,0x35,}},
- {0x348B,4,{0x81,0x39,0xFC,0x36,}},
- {0x348C,4,{0x81,0x39,0xFC,0x37,}},
- {0x348D,4,{0x81,0x39,0xFC,0x38,}},
- {0x348E,4,{0x81,0x39,0xFC,0x39,}},
- {0x348F,4,{0x81,0x39,0xFD,0x30,}},
- {0x3490,4,{0x81,0x39,0xFD,0x31,}},
- {0x3491,4,{0x81,0x39,0xFD,0x32,}},
- {0x3492,4,{0x81,0x39,0xFD,0x33,}},
- {0x3493,4,{0x81,0x39,0xFD,0x34,}},
- {0x3494,4,{0x81,0x39,0xFD,0x35,}},
- {0x3495,4,{0x81,0x39,0xFD,0x36,}},
- {0x3496,4,{0x81,0x39,0xFD,0x37,}},
- {0x3497,4,{0x81,0x39,0xFD,0x38,}},
- {0x3498,4,{0x81,0x39,0xFD,0x39,}},
- {0x3499,4,{0x81,0x39,0xFE,0x30,}},
- {0x349A,4,{0x81,0x39,0xFE,0x31,}},
- {0x349B,4,{0x81,0x39,0xFE,0x32,}},
- {0x349C,4,{0x81,0x39,0xFE,0x33,}},
- {0x349D,4,{0x81,0x39,0xFE,0x34,}},
- {0x349E,4,{0x81,0x39,0xFE,0x35,}},
- {0x349F,4,{0x81,0x39,0xFE,0x36,}},
- {0x34A0,4,{0x81,0x39,0xFE,0x37,}},
- {0x34A1,4,{0x81,0x39,0xFE,0x38,}},
- {0x34A2,4,{0x81,0x39,0xFE,0x39,}},
- {0x34A3,4,{0x82,0x30,0x81,0x30,}},
- {0x34A4,4,{0x82,0x30,0x81,0x31,}},
- {0x34A5,4,{0x82,0x30,0x81,0x32,}},
- {0x34A6,4,{0x82,0x30,0x81,0x33,}},
- {0x34A7,4,{0x82,0x30,0x81,0x34,}},
- {0x34A8,4,{0x82,0x30,0x81,0x35,}},
- {0x34A9,4,{0x82,0x30,0x81,0x36,}},
- {0x34AA,4,{0x82,0x30,0x81,0x37,}},
- {0x34AB,4,{0x82,0x30,0x81,0x38,}},
- {0x34AC,4,{0x82,0x30,0x81,0x39,}},
- {0x34AD,4,{0x82,0x30,0x82,0x30,}},
- {0x34AE,4,{0x82,0x30,0x82,0x31,}},
- {0x34AF,4,{0x82,0x30,0x82,0x32,}},
- {0x34B0,4,{0x82,0x30,0x82,0x33,}},
- {0x34B1,4,{0x82,0x30,0x82,0x34,}},
- {0x34B2,4,{0x82,0x30,0x82,0x35,}},
- {0x34B3,4,{0x82,0x30,0x82,0x36,}},
- {0x34B4,4,{0x82,0x30,0x82,0x37,}},
- {0x34B5,4,{0x82,0x30,0x82,0x38,}},
- {0x34B6,4,{0x82,0x30,0x82,0x39,}},
- {0x34B7,4,{0x82,0x30,0x83,0x30,}},
- {0x34B8,4,{0x82,0x30,0x83,0x31,}},
- {0x34B9,4,{0x82,0x30,0x83,0x32,}},
- {0x34BA,4,{0x82,0x30,0x83,0x33,}},
- {0x34BB,4,{0x82,0x30,0x83,0x34,}},
- {0x34BC,4,{0x82,0x30,0x83,0x35,}},
- {0x34BD,4,{0x82,0x30,0x83,0x36,}},
- {0x34BE,4,{0x82,0x30,0x83,0x37,}},
- {0x34BF,4,{0x82,0x30,0x83,0x38,}},
- {0x34C0,4,{0x82,0x30,0x83,0x39,}},
- {0x34C1,4,{0x82,0x30,0x84,0x30,}},
- {0x34C2,4,{0x82,0x30,0x84,0x31,}},
- {0x34C3,4,{0x82,0x30,0x84,0x32,}},
- {0x34C4,4,{0x82,0x30,0x84,0x33,}},
- {0x34C5,4,{0x82,0x30,0x84,0x34,}},
- {0x34C6,4,{0x82,0x30,0x84,0x35,}},
- {0x34C7,4,{0x82,0x30,0x84,0x36,}},
- {0x34C8,4,{0x82,0x30,0x84,0x37,}},
- {0x34C9,4,{0x82,0x30,0x84,0x38,}},
- {0x34CA,4,{0x82,0x30,0x84,0x39,}},
- {0x34CB,4,{0x82,0x30,0x85,0x30,}},
- {0x34CC,4,{0x82,0x30,0x85,0x31,}},
- {0x34CD,4,{0x82,0x30,0x85,0x32,}},
- {0x34CE,4,{0x82,0x30,0x85,0x33,}},
- {0x34CF,4,{0x82,0x30,0x85,0x34,}},
- {0x34D0,4,{0x82,0x30,0x85,0x35,}},
- {0x34D1,4,{0x82,0x30,0x85,0x36,}},
- {0x34D2,4,{0x82,0x30,0x85,0x37,}},
- {0x34D3,4,{0x82,0x30,0x85,0x38,}},
- {0x34D4,4,{0x82,0x30,0x85,0x39,}},
- {0x34D5,4,{0x82,0x30,0x86,0x30,}},
- {0x34D6,4,{0x82,0x30,0x86,0x31,}},
- {0x34D7,4,{0x82,0x30,0x86,0x32,}},
- {0x34D8,4,{0x82,0x30,0x86,0x33,}},
- {0x34D9,4,{0x82,0x30,0x86,0x34,}},
- {0x34DA,4,{0x82,0x30,0x86,0x35,}},
- {0x34DB,4,{0x82,0x30,0x86,0x36,}},
- {0x34DC,4,{0x82,0x30,0x86,0x37,}},
- {0x34DD,4,{0x82,0x30,0x86,0x38,}},
- {0x34DE,4,{0x82,0x30,0x86,0x39,}},
- {0x34DF,4,{0x82,0x30,0x87,0x30,}},
- {0x34E0,4,{0x82,0x30,0x87,0x31,}},
- {0x34E1,4,{0x82,0x30,0x87,0x32,}},
- {0x34E2,4,{0x82,0x30,0x87,0x33,}},
- {0x34E3,4,{0x82,0x30,0x87,0x34,}},
- {0x34E4,4,{0x82,0x30,0x87,0x35,}},
- {0x34E5,4,{0x82,0x30,0x87,0x36,}},
- {0x34E6,4,{0x82,0x30,0x87,0x37,}},
- {0x34E7,4,{0x82,0x30,0x87,0x38,}},
- {0x34E8,4,{0x82,0x30,0x87,0x39,}},
- {0x34E9,4,{0x82,0x30,0x88,0x30,}},
- {0x34EA,4,{0x82,0x30,0x88,0x31,}},
- {0x34EB,4,{0x82,0x30,0x88,0x32,}},
- {0x34EC,4,{0x82,0x30,0x88,0x33,}},
- {0x34ED,4,{0x82,0x30,0x88,0x34,}},
- {0x34EE,4,{0x82,0x30,0x88,0x35,}},
- {0x34EF,4,{0x82,0x30,0x88,0x36,}},
- {0x34F0,4,{0x82,0x30,0x88,0x37,}},
- {0x34F1,4,{0x82,0x30,0x88,0x38,}},
- {0x34F2,4,{0x82,0x30,0x88,0x39,}},
- {0x34F3,4,{0x82,0x30,0x89,0x30,}},
- {0x34F4,4,{0x82,0x30,0x89,0x31,}},
- {0x34F5,4,{0x82,0x30,0x89,0x32,}},
- {0x34F6,4,{0x82,0x30,0x89,0x33,}},
- {0x34F7,4,{0x82,0x30,0x89,0x34,}},
- {0x34F8,4,{0x82,0x30,0x89,0x35,}},
- {0x34F9,4,{0x82,0x30,0x89,0x36,}},
- {0x34FA,4,{0x82,0x30,0x89,0x37,}},
- {0x34FB,4,{0x82,0x30,0x89,0x38,}},
- {0x34FC,4,{0x82,0x30,0x89,0x39,}},
- {0x34FD,4,{0x82,0x30,0x8A,0x30,}},
- {0x34FE,4,{0x82,0x30,0x8A,0x31,}},
- {0x34FF,4,{0x82,0x30,0x8A,0x32,}},
- {0x3500,4,{0x82,0x30,0x8A,0x33,}},
- {0x3501,4,{0x82,0x30,0x8A,0x34,}},
- {0x3502,4,{0x82,0x30,0x8A,0x35,}},
- {0x3503,4,{0x82,0x30,0x8A,0x36,}},
- {0x3504,4,{0x82,0x30,0x8A,0x37,}},
- {0x3505,4,{0x82,0x30,0x8A,0x38,}},
- {0x3506,4,{0x82,0x30,0x8A,0x39,}},
- {0x3507,4,{0x82,0x30,0x8B,0x30,}},
- {0x3508,4,{0x82,0x30,0x8B,0x31,}},
- {0x3509,4,{0x82,0x30,0x8B,0x32,}},
- {0x350A,4,{0x82,0x30,0x8B,0x33,}},
- {0x350B,4,{0x82,0x30,0x8B,0x34,}},
- {0x350C,4,{0x82,0x30,0x8B,0x35,}},
- {0x350D,4,{0x82,0x30,0x8B,0x36,}},
- {0x350E,4,{0x82,0x30,0x8B,0x37,}},
- {0x350F,4,{0x82,0x30,0x8B,0x38,}},
- {0x3510,4,{0x82,0x30,0x8B,0x39,}},
- {0x3511,4,{0x82,0x30,0x8C,0x30,}},
- {0x3512,4,{0x82,0x30,0x8C,0x31,}},
- {0x3513,4,{0x82,0x30,0x8C,0x32,}},
- {0x3514,4,{0x82,0x30,0x8C,0x33,}},
- {0x3515,4,{0x82,0x30,0x8C,0x34,}},
- {0x3516,4,{0x82,0x30,0x8C,0x35,}},
- {0x3517,4,{0x82,0x30,0x8C,0x36,}},
- {0x3518,4,{0x82,0x30,0x8C,0x37,}},
- {0x3519,4,{0x82,0x30,0x8C,0x38,}},
- {0x351A,4,{0x82,0x30,0x8C,0x39,}},
- {0x351B,4,{0x82,0x30,0x8D,0x30,}},
- {0x351C,4,{0x82,0x30,0x8D,0x31,}},
- {0x351D,4,{0x82,0x30,0x8D,0x32,}},
- {0x351E,4,{0x82,0x30,0x8D,0x33,}},
- {0x351F,4,{0x82,0x30,0x8D,0x34,}},
- {0x3520,4,{0x82,0x30,0x8D,0x35,}},
- {0x3521,4,{0x82,0x30,0x8D,0x36,}},
- {0x3522,4,{0x82,0x30,0x8D,0x37,}},
- {0x3523,4,{0x82,0x30,0x8D,0x38,}},
- {0x3524,4,{0x82,0x30,0x8D,0x39,}},
- {0x3525,4,{0x82,0x30,0x8E,0x30,}},
- {0x3526,4,{0x82,0x30,0x8E,0x31,}},
- {0x3527,4,{0x82,0x30,0x8E,0x32,}},
- {0x3528,4,{0x82,0x30,0x8E,0x33,}},
- {0x3529,4,{0x82,0x30,0x8E,0x34,}},
- {0x352A,4,{0x82,0x30,0x8E,0x35,}},
- {0x352B,4,{0x82,0x30,0x8E,0x36,}},
- {0x352C,4,{0x82,0x30,0x8E,0x37,}},
- {0x352D,4,{0x82,0x30,0x8E,0x38,}},
- {0x352E,4,{0x82,0x30,0x8E,0x39,}},
- {0x352F,4,{0x82,0x30,0x8F,0x30,}},
- {0x3530,4,{0x82,0x30,0x8F,0x31,}},
- {0x3531,4,{0x82,0x30,0x8F,0x32,}},
- {0x3532,4,{0x82,0x30,0x8F,0x33,}},
- {0x3533,4,{0x82,0x30,0x8F,0x34,}},
- {0x3534,4,{0x82,0x30,0x8F,0x35,}},
- {0x3535,4,{0x82,0x30,0x8F,0x36,}},
- {0x3536,4,{0x82,0x30,0x8F,0x37,}},
- {0x3537,4,{0x82,0x30,0x8F,0x38,}},
- {0x3538,4,{0x82,0x30,0x8F,0x39,}},
- {0x3539,4,{0x82,0x30,0x90,0x30,}},
- {0x353A,4,{0x82,0x30,0x90,0x31,}},
- {0x353B,4,{0x82,0x30,0x90,0x32,}},
- {0x353C,4,{0x82,0x30,0x90,0x33,}},
- {0x353D,4,{0x82,0x30,0x90,0x34,}},
- {0x353E,4,{0x82,0x30,0x90,0x35,}},
- {0x353F,4,{0x82,0x30,0x90,0x36,}},
- {0x3540,4,{0x82,0x30,0x90,0x37,}},
- {0x3541,4,{0x82,0x30,0x90,0x38,}},
- {0x3542,4,{0x82,0x30,0x90,0x39,}},
- {0x3543,4,{0x82,0x30,0x91,0x30,}},
- {0x3544,4,{0x82,0x30,0x91,0x31,}},
- {0x3545,4,{0x82,0x30,0x91,0x32,}},
- {0x3546,4,{0x82,0x30,0x91,0x33,}},
- {0x3547,4,{0x82,0x30,0x91,0x34,}},
- {0x3548,4,{0x82,0x30,0x91,0x35,}},
- {0x3549,4,{0x82,0x30,0x91,0x36,}},
- {0x354A,4,{0x82,0x30,0x91,0x37,}},
- {0x354B,4,{0x82,0x30,0x91,0x38,}},
- {0x354C,4,{0x82,0x30,0x91,0x39,}},
- {0x354D,4,{0x82,0x30,0x92,0x30,}},
- {0x354E,4,{0x82,0x30,0x92,0x31,}},
- {0x354F,4,{0x82,0x30,0x92,0x32,}},
- {0x3550,4,{0x82,0x30,0x92,0x33,}},
- {0x3551,4,{0x82,0x30,0x92,0x34,}},
- {0x3552,4,{0x82,0x30,0x92,0x35,}},
- {0x3553,4,{0x82,0x30,0x92,0x36,}},
- {0x3554,4,{0x82,0x30,0x92,0x37,}},
- {0x3555,4,{0x82,0x30,0x92,0x38,}},
- {0x3556,4,{0x82,0x30,0x92,0x39,}},
- {0x3557,4,{0x82,0x30,0x93,0x30,}},
- {0x3558,4,{0x82,0x30,0x93,0x31,}},
- {0x3559,4,{0x82,0x30,0x93,0x32,}},
- {0x355A,4,{0x82,0x30,0x93,0x33,}},
- {0x355B,4,{0x82,0x30,0x93,0x34,}},
- {0x355C,4,{0x82,0x30,0x93,0x35,}},
- {0x355D,4,{0x82,0x30,0x93,0x36,}},
- {0x355E,4,{0x82,0x30,0x93,0x37,}},
- {0x355F,4,{0x82,0x30,0x93,0x38,}},
- {0x3560,4,{0x82,0x30,0x93,0x39,}},
- {0x3561,4,{0x82,0x30,0x94,0x30,}},
- {0x3562,4,{0x82,0x30,0x94,0x31,}},
- {0x3563,4,{0x82,0x30,0x94,0x32,}},
- {0x3564,4,{0x82,0x30,0x94,0x33,}},
- {0x3565,4,{0x82,0x30,0x94,0x34,}},
- {0x3566,4,{0x82,0x30,0x94,0x35,}},
- {0x3567,4,{0x82,0x30,0x94,0x36,}},
- {0x3568,4,{0x82,0x30,0x94,0x37,}},
- {0x3569,4,{0x82,0x30,0x94,0x38,}},
- {0x356A,4,{0x82,0x30,0x94,0x39,}},
- {0x356B,4,{0x82,0x30,0x95,0x30,}},
- {0x356C,4,{0x82,0x30,0x95,0x31,}},
- {0x356D,4,{0x82,0x30,0x95,0x32,}},
- {0x356E,4,{0x82,0x30,0x95,0x33,}},
- {0x356F,4,{0x82,0x30,0x95,0x34,}},
- {0x3570,4,{0x82,0x30,0x95,0x35,}},
- {0x3571,4,{0x82,0x30,0x95,0x36,}},
- {0x3572,4,{0x82,0x30,0x95,0x37,}},
- {0x3573,4,{0x82,0x30,0x95,0x38,}},
- {0x3574,4,{0x82,0x30,0x95,0x39,}},
- {0x3575,4,{0x82,0x30,0x96,0x30,}},
- {0x3576,4,{0x82,0x30,0x96,0x31,}},
- {0x3577,4,{0x82,0x30,0x96,0x32,}},
- {0x3578,4,{0x82,0x30,0x96,0x33,}},
- {0x3579,4,{0x82,0x30,0x96,0x34,}},
- {0x357A,4,{0x82,0x30,0x96,0x35,}},
- {0x357B,4,{0x82,0x30,0x96,0x36,}},
- {0x357C,4,{0x82,0x30,0x96,0x37,}},
- {0x357D,4,{0x82,0x30,0x96,0x38,}},
- {0x357E,4,{0x82,0x30,0x96,0x39,}},
- {0x357F,4,{0x82,0x30,0x97,0x30,}},
- {0x3580,4,{0x82,0x30,0x97,0x31,}},
- {0x3581,4,{0x82,0x30,0x97,0x32,}},
- {0x3582,4,{0x82,0x30,0x97,0x33,}},
- {0x3583,4,{0x82,0x30,0x97,0x34,}},
- {0x3584,4,{0x82,0x30,0x97,0x35,}},
- {0x3585,4,{0x82,0x30,0x97,0x36,}},
- {0x3586,4,{0x82,0x30,0x97,0x37,}},
- {0x3587,4,{0x82,0x30,0x97,0x38,}},
- {0x3588,4,{0x82,0x30,0x97,0x39,}},
- {0x3589,4,{0x82,0x30,0x98,0x30,}},
- {0x358A,4,{0x82,0x30,0x98,0x31,}},
- {0x358B,4,{0x82,0x30,0x98,0x32,}},
- {0x358C,4,{0x82,0x30,0x98,0x33,}},
- {0x358D,4,{0x82,0x30,0x98,0x34,}},
- {0x358E,4,{0x82,0x30,0x98,0x35,}},
- {0x358F,4,{0x82,0x30,0x98,0x36,}},
- {0x3590,4,{0x82,0x30,0x98,0x37,}},
- {0x3591,4,{0x82,0x30,0x98,0x38,}},
- {0x3592,4,{0x82,0x30,0x98,0x39,}},
- {0x3593,4,{0x82,0x30,0x99,0x30,}},
- {0x3594,4,{0x82,0x30,0x99,0x31,}},
- {0x3595,4,{0x82,0x30,0x99,0x32,}},
- {0x3596,4,{0x82,0x30,0x99,0x33,}},
- {0x3597,4,{0x82,0x30,0x99,0x34,}},
- {0x3598,4,{0x82,0x30,0x99,0x35,}},
- {0x3599,4,{0x82,0x30,0x99,0x36,}},
- {0x359A,4,{0x82,0x30,0x99,0x37,}},
- {0x359B,4,{0x82,0x30,0x99,0x38,}},
- {0x359C,4,{0x82,0x30,0x99,0x39,}},
- {0x359D,4,{0x82,0x30,0x9A,0x30,}},
- {0x359E,2,{0xFE,0x5A,0x00,0x00,}},
- {0x359F,4,{0x82,0x30,0x9A,0x31,}},
- {0x35A0,4,{0x82,0x30,0x9A,0x32,}},
- {0x35A1,4,{0x82,0x30,0x9A,0x33,}},
- {0x35A2,4,{0x82,0x30,0x9A,0x34,}},
- {0x35A3,4,{0x82,0x30,0x9A,0x35,}},
- {0x35A4,4,{0x82,0x30,0x9A,0x36,}},
- {0x35A5,4,{0x82,0x30,0x9A,0x37,}},
- {0x35A6,4,{0x82,0x30,0x9A,0x38,}},
- {0x35A7,4,{0x82,0x30,0x9A,0x39,}},
- {0x35A8,4,{0x82,0x30,0x9B,0x30,}},
- {0x35A9,4,{0x82,0x30,0x9B,0x31,}},
- {0x35AA,4,{0x82,0x30,0x9B,0x32,}},
- {0x35AB,4,{0x82,0x30,0x9B,0x33,}},
- {0x35AC,4,{0x82,0x30,0x9B,0x34,}},
- {0x35AD,4,{0x82,0x30,0x9B,0x35,}},
- {0x35AE,4,{0x82,0x30,0x9B,0x36,}},
- {0x35AF,4,{0x82,0x30,0x9B,0x37,}},
- {0x35B0,4,{0x82,0x30,0x9B,0x38,}},
- {0x35B1,4,{0x82,0x30,0x9B,0x39,}},
- {0x35B2,4,{0x82,0x30,0x9C,0x30,}},
- {0x35B3,4,{0x82,0x30,0x9C,0x31,}},
- {0x35B4,4,{0x82,0x30,0x9C,0x32,}},
- {0x35B5,4,{0x82,0x30,0x9C,0x33,}},
- {0x35B6,4,{0x82,0x30,0x9C,0x34,}},
- {0x35B7,4,{0x82,0x30,0x9C,0x35,}},
- {0x35B8,4,{0x82,0x30,0x9C,0x36,}},
- {0x35B9,4,{0x82,0x30,0x9C,0x37,}},
- {0x35BA,4,{0x82,0x30,0x9C,0x38,}},
- {0x35BB,4,{0x82,0x30,0x9C,0x39,}},
- {0x35BC,4,{0x82,0x30,0x9D,0x30,}},
- {0x35BD,4,{0x82,0x30,0x9D,0x31,}},
- {0x35BE,4,{0x82,0x30,0x9D,0x32,}},
- {0x35BF,4,{0x82,0x30,0x9D,0x33,}},
- {0x35C0,4,{0x82,0x30,0x9D,0x34,}},
- {0x35C1,4,{0x82,0x30,0x9D,0x35,}},
- {0x35C2,4,{0x82,0x30,0x9D,0x36,}},
- {0x35C3,4,{0x82,0x30,0x9D,0x37,}},
- {0x35C4,4,{0x82,0x30,0x9D,0x38,}},
- {0x35C5,4,{0x82,0x30,0x9D,0x39,}},
- {0x35C6,4,{0x82,0x30,0x9E,0x30,}},
- {0x35C7,4,{0x82,0x30,0x9E,0x31,}},
- {0x35C8,4,{0x82,0x30,0x9E,0x32,}},
- {0x35C9,4,{0x82,0x30,0x9E,0x33,}},
- {0x35CA,4,{0x82,0x30,0x9E,0x34,}},
- {0x35CB,4,{0x82,0x30,0x9E,0x35,}},
- {0x35CC,4,{0x82,0x30,0x9E,0x36,}},
- {0x35CD,4,{0x82,0x30,0x9E,0x37,}},
- {0x35CE,4,{0x82,0x30,0x9E,0x38,}},
- {0x35CF,4,{0x82,0x30,0x9E,0x39,}},
- {0x35D0,4,{0x82,0x30,0x9F,0x30,}},
- {0x35D1,4,{0x82,0x30,0x9F,0x31,}},
- {0x35D2,4,{0x82,0x30,0x9F,0x32,}},
- {0x35D3,4,{0x82,0x30,0x9F,0x33,}},
- {0x35D4,4,{0x82,0x30,0x9F,0x34,}},
- {0x35D5,4,{0x82,0x30,0x9F,0x35,}},
- {0x35D6,4,{0x82,0x30,0x9F,0x36,}},
- {0x35D7,4,{0x82,0x30,0x9F,0x37,}},
- {0x35D8,4,{0x82,0x30,0x9F,0x38,}},
- {0x35D9,4,{0x82,0x30,0x9F,0x39,}},
- {0x35DA,4,{0x82,0x30,0xA0,0x30,}},
- {0x35DB,4,{0x82,0x30,0xA0,0x31,}},
- {0x35DC,4,{0x82,0x30,0xA0,0x32,}},
- {0x35DD,4,{0x82,0x30,0xA0,0x33,}},
- {0x35DE,4,{0x82,0x30,0xA0,0x34,}},
- {0x35DF,4,{0x82,0x30,0xA0,0x35,}},
- {0x35E0,4,{0x82,0x30,0xA0,0x36,}},
- {0x35E1,4,{0x82,0x30,0xA0,0x37,}},
- {0x35E2,4,{0x82,0x30,0xA0,0x38,}},
- {0x35E3,4,{0x82,0x30,0xA0,0x39,}},
- {0x35E4,4,{0x82,0x30,0xA1,0x30,}},
- {0x35E5,4,{0x82,0x30,0xA1,0x31,}},
- {0x35E6,4,{0x82,0x30,0xA1,0x32,}},
- {0x35E7,4,{0x82,0x30,0xA1,0x33,}},
- {0x35E8,4,{0x82,0x30,0xA1,0x34,}},
- {0x35E9,4,{0x82,0x30,0xA1,0x35,}},
- {0x35EA,4,{0x82,0x30,0xA1,0x36,}},
- {0x35EB,4,{0x82,0x30,0xA1,0x37,}},
- {0x35EC,4,{0x82,0x30,0xA1,0x38,}},
- {0x35ED,4,{0x82,0x30,0xA1,0x39,}},
- {0x35EE,4,{0x82,0x30,0xA2,0x30,}},
- {0x35EF,4,{0x82,0x30,0xA2,0x31,}},
- {0x35F0,4,{0x82,0x30,0xA2,0x32,}},
- {0x35F1,4,{0x82,0x30,0xA2,0x33,}},
- {0x35F2,4,{0x82,0x30,0xA2,0x34,}},
- {0x35F3,4,{0x82,0x30,0xA2,0x35,}},
- {0x35F4,4,{0x82,0x30,0xA2,0x36,}},
- {0x35F5,4,{0x82,0x30,0xA2,0x37,}},
- {0x35F6,4,{0x82,0x30,0xA2,0x38,}},
- {0x35F7,4,{0x82,0x30,0xA2,0x39,}},
- {0x35F8,4,{0x82,0x30,0xA3,0x30,}},
- {0x35F9,4,{0x82,0x30,0xA3,0x31,}},
- {0x35FA,4,{0x82,0x30,0xA3,0x32,}},
- {0x35FB,4,{0x82,0x30,0xA3,0x33,}},
- {0x35FC,4,{0x82,0x30,0xA3,0x34,}},
- {0x35FD,4,{0x82,0x30,0xA3,0x35,}},
- {0x35FE,4,{0x82,0x30,0xA3,0x36,}},
- {0x35FF,4,{0x82,0x30,0xA3,0x37,}},
- {0x3600,4,{0x82,0x30,0xA3,0x38,}},
- {0x3601,4,{0x82,0x30,0xA3,0x39,}},
- {0x3602,4,{0x82,0x30,0xA4,0x30,}},
- {0x3603,4,{0x82,0x30,0xA4,0x31,}},
- {0x3604,4,{0x82,0x30,0xA4,0x32,}},
- {0x3605,4,{0x82,0x30,0xA4,0x33,}},
- {0x3606,4,{0x82,0x30,0xA4,0x34,}},
- {0x3607,4,{0x82,0x30,0xA4,0x35,}},
- {0x3608,4,{0x82,0x30,0xA4,0x36,}},
- {0x3609,4,{0x82,0x30,0xA4,0x37,}},
- {0x360A,4,{0x82,0x30,0xA4,0x38,}},
- {0x360B,4,{0x82,0x30,0xA4,0x39,}},
- {0x360C,4,{0x82,0x30,0xA5,0x30,}},
- {0x360D,4,{0x82,0x30,0xA5,0x31,}},
- {0x360E,2,{0xFE,0x5C,0x00,0x00,}},
- {0x360F,4,{0x82,0x30,0xA5,0x32,}},
- {0x3610,4,{0x82,0x30,0xA5,0x33,}},
- {0x3611,4,{0x82,0x30,0xA5,0x34,}},
- {0x3612,4,{0x82,0x30,0xA5,0x35,}},
- {0x3613,4,{0x82,0x30,0xA5,0x36,}},
- {0x3614,4,{0x82,0x30,0xA5,0x37,}},
- {0x3615,4,{0x82,0x30,0xA5,0x38,}},
- {0x3616,4,{0x82,0x30,0xA5,0x39,}},
- {0x3617,4,{0x82,0x30,0xA6,0x30,}},
- {0x3618,4,{0x82,0x30,0xA6,0x31,}},
- {0x3619,4,{0x82,0x30,0xA6,0x32,}},
- {0x361A,2,{0xFE,0x5B,0x00,0x00,}},
- {0x3918,2,{0xFE,0x60,0x00,0x00,}},
- {0x3919,4,{0x82,0x30,0xF2,0x38,}},
- {0x391A,4,{0x82,0x30,0xF2,0x39,}},
- {0x391B,4,{0x82,0x30,0xF3,0x30,}},
- {0x391C,4,{0x82,0x30,0xF3,0x31,}},
- {0x391D,4,{0x82,0x30,0xF3,0x32,}},
- {0x391E,4,{0x82,0x30,0xF3,0x33,}},
- {0x391F,4,{0x82,0x30,0xF3,0x34,}},
- {0x3920,4,{0x82,0x30,0xF3,0x35,}},
- {0x3921,4,{0x82,0x30,0xF3,0x36,}},
- {0x3922,4,{0x82,0x30,0xF3,0x37,}},
- {0x3923,4,{0x82,0x30,0xF3,0x38,}},
- {0x3924,4,{0x82,0x30,0xF3,0x39,}},
- {0x3925,4,{0x82,0x30,0xF4,0x30,}},
- {0x3926,4,{0x82,0x30,0xF4,0x31,}},
- {0x3927,4,{0x82,0x30,0xF4,0x32,}},
- {0x3928,4,{0x82,0x30,0xF4,0x33,}},
- {0x3929,4,{0x82,0x30,0xF4,0x34,}},
- {0x392A,4,{0x82,0x30,0xF4,0x35,}},
- {0x392B,4,{0x82,0x30,0xF4,0x36,}},
- {0x392C,4,{0x82,0x30,0xF4,0x37,}},
- {0x392D,4,{0x82,0x30,0xF4,0x38,}},
- {0x392E,4,{0x82,0x30,0xF4,0x39,}},
- {0x392F,4,{0x82,0x30,0xF5,0x30,}},
- {0x3930,4,{0x82,0x30,0xF5,0x31,}},
- {0x3931,4,{0x82,0x30,0xF5,0x32,}},
- {0x3932,4,{0x82,0x30,0xF5,0x33,}},
- {0x3933,4,{0x82,0x30,0xF5,0x34,}},
- {0x3934,4,{0x82,0x30,0xF5,0x35,}},
- {0x3935,4,{0x82,0x30,0xF5,0x36,}},
- {0x3936,4,{0x82,0x30,0xF5,0x37,}},
- {0x3937,4,{0x82,0x30,0xF5,0x38,}},
- {0x3938,4,{0x82,0x30,0xF5,0x39,}},
- {0x3939,4,{0x82,0x30,0xF6,0x30,}},
- {0x393A,4,{0x82,0x30,0xF6,0x31,}},
- {0x393B,4,{0x82,0x30,0xF6,0x32,}},
- {0x393C,4,{0x82,0x30,0xF6,0x33,}},
- {0x393D,4,{0x82,0x30,0xF6,0x34,}},
- {0x393E,4,{0x82,0x30,0xF6,0x35,}},
- {0x393F,4,{0x82,0x30,0xF6,0x36,}},
- {0x3940,4,{0x82,0x30,0xF6,0x37,}},
- {0x3941,4,{0x82,0x30,0xF6,0x38,}},
- {0x3942,4,{0x82,0x30,0xF6,0x39,}},
- {0x3943,4,{0x82,0x30,0xF7,0x30,}},
- {0x3944,4,{0x82,0x30,0xF7,0x31,}},
- {0x3945,4,{0x82,0x30,0xF7,0x32,}},
- {0x3946,4,{0x82,0x30,0xF7,0x33,}},
- {0x3947,4,{0x82,0x30,0xF7,0x34,}},
- {0x3948,4,{0x82,0x30,0xF7,0x35,}},
- {0x3949,4,{0x82,0x30,0xF7,0x36,}},
- {0x394A,4,{0x82,0x30,0xF7,0x37,}},
- {0x394B,4,{0x82,0x30,0xF7,0x38,}},
- {0x394C,4,{0x82,0x30,0xF7,0x39,}},
- {0x394D,4,{0x82,0x30,0xF8,0x30,}},
- {0x394E,4,{0x82,0x30,0xF8,0x31,}},
- {0x394F,4,{0x82,0x30,0xF8,0x32,}},
- {0x3950,4,{0x82,0x30,0xF8,0x33,}},
- {0x3951,4,{0x82,0x30,0xF8,0x34,}},
- {0x3952,4,{0x82,0x30,0xF8,0x35,}},
- {0x3953,4,{0x82,0x30,0xF8,0x36,}},
- {0x3954,4,{0x82,0x30,0xF8,0x37,}},
- {0x3955,4,{0x82,0x30,0xF8,0x38,}},
- {0x3956,4,{0x82,0x30,0xF8,0x39,}},
- {0x3957,4,{0x82,0x30,0xF9,0x30,}},
- {0x3958,4,{0x82,0x30,0xF9,0x31,}},
- {0x3959,4,{0x82,0x30,0xF9,0x32,}},
- {0x395A,4,{0x82,0x30,0xF9,0x33,}},
- {0x395B,4,{0x82,0x30,0xF9,0x34,}},
- {0x395C,4,{0x82,0x30,0xF9,0x35,}},
- {0x395D,4,{0x82,0x30,0xF9,0x36,}},
- {0x395E,4,{0x82,0x30,0xF9,0x37,}},
- {0x395F,4,{0x82,0x30,0xF9,0x38,}},
- {0x3960,4,{0x82,0x30,0xF9,0x39,}},
- {0x3961,4,{0x82,0x30,0xFA,0x30,}},
- {0x3962,4,{0x82,0x30,0xFA,0x31,}},
- {0x3963,4,{0x82,0x30,0xFA,0x32,}},
- {0x3964,4,{0x82,0x30,0xFA,0x33,}},
- {0x3965,4,{0x82,0x30,0xFA,0x34,}},
- {0x3966,4,{0x82,0x30,0xFA,0x35,}},
- {0x3967,4,{0x82,0x30,0xFA,0x36,}},
- {0x3968,4,{0x82,0x30,0xFA,0x37,}},
- {0x3969,4,{0x82,0x30,0xFA,0x38,}},
- {0x396A,4,{0x82,0x30,0xFA,0x39,}},
- {0x396B,4,{0x82,0x30,0xFB,0x30,}},
- {0x396C,4,{0x82,0x30,0xFB,0x31,}},
- {0x396D,4,{0x82,0x30,0xFB,0x32,}},
- {0x396E,2,{0xFE,0x5F,0x00,0x00,}},
- {0x396F,4,{0x82,0x30,0xFB,0x33,}},
- {0x3970,4,{0x82,0x30,0xFB,0x34,}},
- {0x3971,4,{0x82,0x30,0xFB,0x35,}},
- {0x3972,4,{0x82,0x30,0xFB,0x36,}},
- {0x3973,4,{0x82,0x30,0xFB,0x37,}},
- {0x3974,4,{0x82,0x30,0xFB,0x38,}},
- {0x3975,4,{0x82,0x30,0xFB,0x39,}},
- {0x3976,4,{0x82,0x30,0xFC,0x30,}},
- {0x3977,4,{0x82,0x30,0xFC,0x31,}},
- {0x3978,4,{0x82,0x30,0xFC,0x32,}},
- {0x3979,4,{0x82,0x30,0xFC,0x33,}},
- {0x397A,4,{0x82,0x30,0xFC,0x34,}},
- {0x397B,4,{0x82,0x30,0xFC,0x35,}},
- {0x397C,4,{0x82,0x30,0xFC,0x36,}},
- {0x397D,4,{0x82,0x30,0xFC,0x37,}},
- {0x397E,4,{0x82,0x30,0xFC,0x38,}},
- {0x397F,4,{0x82,0x30,0xFC,0x39,}},
- {0x3980,4,{0x82,0x30,0xFD,0x30,}},
- {0x3981,4,{0x82,0x30,0xFD,0x31,}},
- {0x3982,4,{0x82,0x30,0xFD,0x32,}},
- {0x3983,4,{0x82,0x30,0xFD,0x33,}},
- {0x3984,4,{0x82,0x30,0xFD,0x34,}},
- {0x3985,4,{0x82,0x30,0xFD,0x35,}},
- {0x3986,4,{0x82,0x30,0xFD,0x36,}},
- {0x3987,4,{0x82,0x30,0xFD,0x37,}},
- {0x3988,4,{0x82,0x30,0xFD,0x38,}},
- {0x3989,4,{0x82,0x30,0xFD,0x39,}},
- {0x398A,4,{0x82,0x30,0xFE,0x30,}},
- {0x398B,4,{0x82,0x30,0xFE,0x31,}},
- {0x398C,4,{0x82,0x30,0xFE,0x32,}},
- {0x398D,4,{0x82,0x30,0xFE,0x33,}},
- {0x398E,4,{0x82,0x30,0xFE,0x34,}},
- {0x398F,4,{0x82,0x30,0xFE,0x35,}},
- {0x3990,4,{0x82,0x30,0xFE,0x36,}},
- {0x3991,4,{0x82,0x30,0xFE,0x37,}},
- {0x3992,4,{0x82,0x30,0xFE,0x38,}},
- {0x3993,4,{0x82,0x30,0xFE,0x39,}},
- {0x3994,4,{0x82,0x31,0x81,0x30,}},
- {0x3995,4,{0x82,0x31,0x81,0x31,}},
- {0x3996,4,{0x82,0x31,0x81,0x32,}},
- {0x3997,4,{0x82,0x31,0x81,0x33,}},
- {0x3998,4,{0x82,0x31,0x81,0x34,}},
- {0x3999,4,{0x82,0x31,0x81,0x35,}},
- {0x399A,4,{0x82,0x31,0x81,0x36,}},
- {0x399B,4,{0x82,0x31,0x81,0x37,}},
- {0x399C,4,{0x82,0x31,0x81,0x38,}},
- {0x399D,4,{0x82,0x31,0x81,0x39,}},
- {0x399E,4,{0x82,0x31,0x82,0x30,}},
- {0x399F,4,{0x82,0x31,0x82,0x31,}},
- {0x39A0,4,{0x82,0x31,0x82,0x32,}},
- {0x39A1,4,{0x82,0x31,0x82,0x33,}},
- {0x39A2,4,{0x82,0x31,0x82,0x34,}},
- {0x39A3,4,{0x82,0x31,0x82,0x35,}},
- {0x39A4,4,{0x82,0x31,0x82,0x36,}},
- {0x39A5,4,{0x82,0x31,0x82,0x37,}},
- {0x39A6,4,{0x82,0x31,0x82,0x38,}},
- {0x39A7,4,{0x82,0x31,0x82,0x39,}},
- {0x39A8,4,{0x82,0x31,0x83,0x30,}},
- {0x39A9,4,{0x82,0x31,0x83,0x31,}},
- {0x39AA,4,{0x82,0x31,0x83,0x32,}},
- {0x39AB,4,{0x82,0x31,0x83,0x33,}},
- {0x39AC,4,{0x82,0x31,0x83,0x34,}},
- {0x39AD,4,{0x82,0x31,0x83,0x35,}},
- {0x39AE,4,{0x82,0x31,0x83,0x36,}},
- {0x39AF,4,{0x82,0x31,0x83,0x37,}},
- {0x39B0,4,{0x82,0x31,0x83,0x38,}},
- {0x39B1,4,{0x82,0x31,0x83,0x39,}},
- {0x39B2,4,{0x82,0x31,0x84,0x30,}},
- {0x39B3,4,{0x82,0x31,0x84,0x31,}},
- {0x39B4,4,{0x82,0x31,0x84,0x32,}},
- {0x39B5,4,{0x82,0x31,0x84,0x33,}},
- {0x39B6,4,{0x82,0x31,0x84,0x34,}},
- {0x39B7,4,{0x82,0x31,0x84,0x35,}},
- {0x39B8,4,{0x82,0x31,0x84,0x36,}},
- {0x39B9,4,{0x82,0x31,0x84,0x37,}},
- {0x39BA,4,{0x82,0x31,0x84,0x38,}},
- {0x39BB,4,{0x82,0x31,0x84,0x39,}},
- {0x39BC,4,{0x82,0x31,0x85,0x30,}},
- {0x39BD,4,{0x82,0x31,0x85,0x31,}},
- {0x39BE,4,{0x82,0x31,0x85,0x32,}},
- {0x39BF,4,{0x82,0x31,0x85,0x33,}},
- {0x39C0,4,{0x82,0x31,0x85,0x34,}},
- {0x39C1,4,{0x82,0x31,0x85,0x35,}},
- {0x39C2,4,{0x82,0x31,0x85,0x36,}},
- {0x39C3,4,{0x82,0x31,0x85,0x37,}},
- {0x39C4,4,{0x82,0x31,0x85,0x38,}},
- {0x39C5,4,{0x82,0x31,0x85,0x39,}},
- {0x39C6,4,{0x82,0x31,0x86,0x30,}},
- {0x39C7,4,{0x82,0x31,0x86,0x31,}},
- {0x39C8,4,{0x82,0x31,0x86,0x32,}},
- {0x39C9,4,{0x82,0x31,0x86,0x33,}},
- {0x39CA,4,{0x82,0x31,0x86,0x34,}},
- {0x39CB,4,{0x82,0x31,0x86,0x35,}},
- {0x39CC,4,{0x82,0x31,0x86,0x36,}},
- {0x39CD,4,{0x82,0x31,0x86,0x37,}},
- {0x39CE,4,{0x82,0x31,0x86,0x38,}},
- {0x39CF,2,{0xFE,0x62,0x00,0x00,}},
- {0x39D0,2,{0xFE,0x65,0x00,0x00,}},
- {0x39D1,4,{0x82,0x31,0x86,0x39,}},
- {0x39D2,4,{0x82,0x31,0x87,0x30,}},
- {0x39D3,4,{0x82,0x31,0x87,0x31,}},
- {0x39D4,4,{0x82,0x31,0x87,0x32,}},
- {0x39D5,4,{0x82,0x31,0x87,0x33,}},
- {0x39D6,4,{0x82,0x31,0x87,0x34,}},
- {0x39D7,4,{0x82,0x31,0x87,0x35,}},
- {0x39D8,4,{0x82,0x31,0x87,0x36,}},
- {0x39D9,4,{0x82,0x31,0x87,0x37,}},
- {0x39DA,4,{0x82,0x31,0x87,0x38,}},
- {0x39DB,4,{0x82,0x31,0x87,0x39,}},
- {0x39DC,4,{0x82,0x31,0x88,0x30,}},
- {0x39DD,4,{0x82,0x31,0x88,0x31,}},
- {0x39DE,4,{0x82,0x31,0x88,0x32,}},
- {0x39DF,2,{0xFE,0x63,0x00,0x00,}},
- {0x39E0,4,{0x82,0x31,0x88,0x33,}},
- {0x39E1,4,{0x82,0x31,0x88,0x34,}},
- {0x39E2,4,{0x82,0x31,0x88,0x35,}},
- {0x39E3,4,{0x82,0x31,0x88,0x36,}},
- {0x39E4,4,{0x82,0x31,0x88,0x37,}},
- {0x39E5,4,{0x82,0x31,0x88,0x38,}},
- {0x39E6,4,{0x82,0x31,0x88,0x39,}},
- {0x39E7,4,{0x82,0x31,0x89,0x30,}},
- {0x39E8,4,{0x82,0x31,0x89,0x31,}},
- {0x39E9,4,{0x82,0x31,0x89,0x32,}},
- {0x39EA,4,{0x82,0x31,0x89,0x33,}},
- {0x39EB,4,{0x82,0x31,0x89,0x34,}},
- {0x39EC,4,{0x82,0x31,0x89,0x35,}},
- {0x39ED,4,{0x82,0x31,0x89,0x36,}},
- {0x39EE,4,{0x82,0x31,0x89,0x37,}},
- {0x39EF,4,{0x82,0x31,0x89,0x38,}},
- {0x39F0,4,{0x82,0x31,0x89,0x39,}},
- {0x39F1,4,{0x82,0x31,0x8A,0x30,}},
- {0x39F2,4,{0x82,0x31,0x8A,0x31,}},
- {0x39F3,4,{0x82,0x31,0x8A,0x32,}},
- {0x39F4,4,{0x82,0x31,0x8A,0x33,}},
- {0x39F5,4,{0x82,0x31,0x8A,0x34,}},
- {0x39F6,4,{0x82,0x31,0x8A,0x35,}},
- {0x39F7,4,{0x82,0x31,0x8A,0x36,}},
- {0x39F8,4,{0x82,0x31,0x8A,0x37,}},
- {0x39F9,4,{0x82,0x31,0x8A,0x38,}},
- {0x39FA,4,{0x82,0x31,0x8A,0x39,}},
- {0x39FB,4,{0x82,0x31,0x8B,0x30,}},
- {0x39FC,4,{0x82,0x31,0x8B,0x31,}},
- {0x39FD,4,{0x82,0x31,0x8B,0x32,}},
- {0x39FE,4,{0x82,0x31,0x8B,0x33,}},
- {0x39FF,4,{0x82,0x31,0x8B,0x34,}},
- {0x3A00,4,{0x82,0x31,0x8B,0x35,}},
- {0x3A01,4,{0x82,0x31,0x8B,0x36,}},
- {0x3A02,4,{0x82,0x31,0x8B,0x37,}},
- {0x3A03,4,{0x82,0x31,0x8B,0x38,}},
- {0x3A04,4,{0x82,0x31,0x8B,0x39,}},
- {0x3A05,4,{0x82,0x31,0x8C,0x30,}},
- {0x3A06,4,{0x82,0x31,0x8C,0x31,}},
- {0x3A07,4,{0x82,0x31,0x8C,0x32,}},
- {0x3A08,4,{0x82,0x31,0x8C,0x33,}},
- {0x3A09,4,{0x82,0x31,0x8C,0x34,}},
- {0x3A0A,4,{0x82,0x31,0x8C,0x35,}},
- {0x3A0B,4,{0x82,0x31,0x8C,0x36,}},
- {0x3A0C,4,{0x82,0x31,0x8C,0x37,}},
- {0x3A0D,4,{0x82,0x31,0x8C,0x38,}},
- {0x3A0E,4,{0x82,0x31,0x8C,0x39,}},
- {0x3A0F,4,{0x82,0x31,0x8D,0x30,}},
- {0x3A10,4,{0x82,0x31,0x8D,0x31,}},
- {0x3A11,4,{0x82,0x31,0x8D,0x32,}},
- {0x3A12,4,{0x82,0x31,0x8D,0x33,}},
- {0x3A13,4,{0x82,0x31,0x8D,0x34,}},
- {0x3A14,4,{0x82,0x31,0x8D,0x35,}},
- {0x3A15,4,{0x82,0x31,0x8D,0x36,}},
- {0x3A16,4,{0x82,0x31,0x8D,0x37,}},
- {0x3A17,4,{0x82,0x31,0x8D,0x38,}},
- {0x3A18,4,{0x82,0x31,0x8D,0x39,}},
- {0x3A19,4,{0x82,0x31,0x8E,0x30,}},
- {0x3A1A,4,{0x82,0x31,0x8E,0x31,}},
- {0x3A1B,4,{0x82,0x31,0x8E,0x32,}},
- {0x3A1C,4,{0x82,0x31,0x8E,0x33,}},
- {0x3A1D,4,{0x82,0x31,0x8E,0x34,}},
- {0x3A1E,4,{0x82,0x31,0x8E,0x35,}},
- {0x3A1F,4,{0x82,0x31,0x8E,0x36,}},
- {0x3A20,4,{0x82,0x31,0x8E,0x37,}},
- {0x3A21,4,{0x82,0x31,0x8E,0x38,}},
- {0x3A22,4,{0x82,0x31,0x8E,0x39,}},
- {0x3A23,4,{0x82,0x31,0x8F,0x30,}},
- {0x3A24,4,{0x82,0x31,0x8F,0x31,}},
- {0x3A25,4,{0x82,0x31,0x8F,0x32,}},
- {0x3A26,4,{0x82,0x31,0x8F,0x33,}},
- {0x3A27,4,{0x82,0x31,0x8F,0x34,}},
- {0x3A28,4,{0x82,0x31,0x8F,0x35,}},
- {0x3A29,4,{0x82,0x31,0x8F,0x36,}},
- {0x3A2A,4,{0x82,0x31,0x8F,0x37,}},
- {0x3A2B,4,{0x82,0x31,0x8F,0x38,}},
- {0x3A2C,4,{0x82,0x31,0x8F,0x39,}},
- {0x3A2D,4,{0x82,0x31,0x90,0x30,}},
- {0x3A2E,4,{0x82,0x31,0x90,0x31,}},
- {0x3A2F,4,{0x82,0x31,0x90,0x32,}},
- {0x3A30,4,{0x82,0x31,0x90,0x33,}},
- {0x3A31,4,{0x82,0x31,0x90,0x34,}},
- {0x3A32,4,{0x82,0x31,0x90,0x35,}},
- {0x3A33,4,{0x82,0x31,0x90,0x36,}},
- {0x3A34,4,{0x82,0x31,0x90,0x37,}},
- {0x3A35,4,{0x82,0x31,0x90,0x38,}},
- {0x3A36,4,{0x82,0x31,0x90,0x39,}},
- {0x3A37,4,{0x82,0x31,0x91,0x30,}},
- {0x3A38,4,{0x82,0x31,0x91,0x31,}},
- {0x3A39,4,{0x82,0x31,0x91,0x32,}},
- {0x3A3A,4,{0x82,0x31,0x91,0x33,}},
- {0x3A3B,4,{0x82,0x31,0x91,0x34,}},
- {0x3A3C,4,{0x82,0x31,0x91,0x35,}},
- {0x3A3D,4,{0x82,0x31,0x91,0x36,}},
- {0x3A3E,4,{0x82,0x31,0x91,0x37,}},
- {0x3A3F,4,{0x82,0x31,0x91,0x38,}},
- {0x3A40,4,{0x82,0x31,0x91,0x39,}},
- {0x3A41,4,{0x82,0x31,0x92,0x30,}},
- {0x3A42,4,{0x82,0x31,0x92,0x31,}},
- {0x3A43,4,{0x82,0x31,0x92,0x32,}},
- {0x3A44,4,{0x82,0x31,0x92,0x33,}},
- {0x3A45,4,{0x82,0x31,0x92,0x34,}},
- {0x3A46,4,{0x82,0x31,0x92,0x35,}},
- {0x3A47,4,{0x82,0x31,0x92,0x36,}},
- {0x3A48,4,{0x82,0x31,0x92,0x37,}},
- {0x3A49,4,{0x82,0x31,0x92,0x38,}},
- {0x3A4A,4,{0x82,0x31,0x92,0x39,}},
- {0x3A4B,4,{0x82,0x31,0x93,0x30,}},
- {0x3A4C,4,{0x82,0x31,0x93,0x31,}},
- {0x3A4D,4,{0x82,0x31,0x93,0x32,}},
- {0x3A4E,4,{0x82,0x31,0x93,0x33,}},
- {0x3A4F,4,{0x82,0x31,0x93,0x34,}},
- {0x3A50,4,{0x82,0x31,0x93,0x35,}},
- {0x3A51,4,{0x82,0x31,0x93,0x36,}},
- {0x3A52,4,{0x82,0x31,0x93,0x37,}},
- {0x3A53,4,{0x82,0x31,0x93,0x38,}},
- {0x3A54,4,{0x82,0x31,0x93,0x39,}},
- {0x3A55,4,{0x82,0x31,0x94,0x30,}},
- {0x3A56,4,{0x82,0x31,0x94,0x31,}},
- {0x3A57,4,{0x82,0x31,0x94,0x32,}},
- {0x3A58,4,{0x82,0x31,0x94,0x33,}},
- {0x3A59,4,{0x82,0x31,0x94,0x34,}},
- {0x3A5A,4,{0x82,0x31,0x94,0x35,}},
- {0x3A5B,4,{0x82,0x31,0x94,0x36,}},
- {0x3A5C,4,{0x82,0x31,0x94,0x37,}},
- {0x3A5D,4,{0x82,0x31,0x94,0x38,}},
- {0x3A5E,4,{0x82,0x31,0x94,0x39,}},
- {0x3A5F,4,{0x82,0x31,0x95,0x30,}},
- {0x3A60,4,{0x82,0x31,0x95,0x31,}},
- {0x3A61,4,{0x82,0x31,0x95,0x32,}},
- {0x3A62,4,{0x82,0x31,0x95,0x33,}},
- {0x3A63,4,{0x82,0x31,0x95,0x34,}},
- {0x3A64,4,{0x82,0x31,0x95,0x35,}},
- {0x3A65,4,{0x82,0x31,0x95,0x36,}},
- {0x3A66,4,{0x82,0x31,0x95,0x37,}},
- {0x3A67,4,{0x82,0x31,0x95,0x38,}},
- {0x3A68,4,{0x82,0x31,0x95,0x39,}},
- {0x3A69,4,{0x82,0x31,0x96,0x30,}},
- {0x3A6A,4,{0x82,0x31,0x96,0x31,}},
- {0x3A6B,4,{0x82,0x31,0x96,0x32,}},
- {0x3A6C,4,{0x82,0x31,0x96,0x33,}},
- {0x3A6D,4,{0x82,0x31,0x96,0x34,}},
- {0x3A6E,4,{0x82,0x31,0x96,0x35,}},
- {0x3A6F,4,{0x82,0x31,0x96,0x36,}},
- {0x3A70,4,{0x82,0x31,0x96,0x37,}},
- {0x3A71,4,{0x82,0x31,0x96,0x38,}},
- {0x3A72,4,{0x82,0x31,0x96,0x39,}},
- {0x3A73,2,{0xFE,0x64,0x00,0x00,}},
- {0x3A74,4,{0x82,0x31,0x97,0x30,}},
- {0x3A75,4,{0x82,0x31,0x97,0x31,}},
- {0x3A76,4,{0x82,0x31,0x97,0x32,}},
- {0x3A77,4,{0x82,0x31,0x97,0x33,}},
- {0x3A78,4,{0x82,0x31,0x97,0x34,}},
- {0x3A79,4,{0x82,0x31,0x97,0x35,}},
- {0x3A7A,4,{0x82,0x31,0x97,0x36,}},
- {0x3A7B,4,{0x82,0x31,0x97,0x37,}},
- {0x3A7C,4,{0x82,0x31,0x97,0x38,}},
- {0x3A7D,4,{0x82,0x31,0x97,0x39,}},
- {0x3A7E,4,{0x82,0x31,0x98,0x30,}},
- {0x3A7F,4,{0x82,0x31,0x98,0x31,}},
- {0x3A80,4,{0x82,0x31,0x98,0x32,}},
- {0x3A81,4,{0x82,0x31,0x98,0x33,}},
- {0x3A82,4,{0x82,0x31,0x98,0x34,}},
- {0x3A83,4,{0x82,0x31,0x98,0x35,}},
- {0x3A84,4,{0x82,0x31,0x98,0x36,}},
- {0x3A85,4,{0x82,0x31,0x98,0x37,}},
- {0x3A86,4,{0x82,0x31,0x98,0x38,}},
- {0x3A87,4,{0x82,0x31,0x98,0x39,}},
- {0x3A88,4,{0x82,0x31,0x99,0x30,}},
- {0x3A89,4,{0x82,0x31,0x99,0x31,}},
- {0x3A8A,4,{0x82,0x31,0x99,0x32,}},
- {0x3A8B,4,{0x82,0x31,0x99,0x33,}},
- {0x3A8C,4,{0x82,0x31,0x99,0x34,}},
- {0x3A8D,4,{0x82,0x31,0x99,0x35,}},
- {0x3A8E,4,{0x82,0x31,0x99,0x36,}},
- {0x3A8F,4,{0x82,0x31,0x99,0x37,}},
- {0x3A90,4,{0x82,0x31,0x99,0x38,}},
- {0x3A91,4,{0x82,0x31,0x99,0x39,}},
- {0x3A92,4,{0x82,0x31,0x9A,0x30,}},
- {0x3A93,4,{0x82,0x31,0x9A,0x31,}},
- {0x3A94,4,{0x82,0x31,0x9A,0x32,}},
- {0x3A95,4,{0x82,0x31,0x9A,0x33,}},
- {0x3A96,4,{0x82,0x31,0x9A,0x34,}},
- {0x3A97,4,{0x82,0x31,0x9A,0x35,}},
- {0x3A98,4,{0x82,0x31,0x9A,0x36,}},
- {0x3A99,4,{0x82,0x31,0x9A,0x37,}},
- {0x3A9A,4,{0x82,0x31,0x9A,0x38,}},
- {0x3A9B,4,{0x82,0x31,0x9A,0x39,}},
- {0x3A9C,4,{0x82,0x31,0x9B,0x30,}},
- {0x3A9D,4,{0x82,0x31,0x9B,0x31,}},
- {0x3A9E,4,{0x82,0x31,0x9B,0x32,}},
- {0x3A9F,4,{0x82,0x31,0x9B,0x33,}},
- {0x3AA0,4,{0x82,0x31,0x9B,0x34,}},
- {0x3AA1,4,{0x82,0x31,0x9B,0x35,}},
- {0x3AA2,4,{0x82,0x31,0x9B,0x36,}},
- {0x3AA3,4,{0x82,0x31,0x9B,0x37,}},
- {0x3AA4,4,{0x82,0x31,0x9B,0x38,}},
- {0x3AA5,4,{0x82,0x31,0x9B,0x39,}},
- {0x3AA6,4,{0x82,0x31,0x9C,0x30,}},
- {0x3AA7,4,{0x82,0x31,0x9C,0x31,}},
- {0x3AA8,4,{0x82,0x31,0x9C,0x32,}},
- {0x3AA9,4,{0x82,0x31,0x9C,0x33,}},
- {0x3AAA,4,{0x82,0x31,0x9C,0x34,}},
- {0x3AAB,4,{0x82,0x31,0x9C,0x35,}},
- {0x3AAC,4,{0x82,0x31,0x9C,0x36,}},
- {0x3AAD,4,{0x82,0x31,0x9C,0x37,}},
- {0x3AAE,4,{0x82,0x31,0x9C,0x38,}},
- {0x3AAF,4,{0x82,0x31,0x9C,0x39,}},
- {0x3AB0,4,{0x82,0x31,0x9D,0x30,}},
- {0x3AB1,4,{0x82,0x31,0x9D,0x31,}},
- {0x3AB2,4,{0x82,0x31,0x9D,0x32,}},
- {0x3AB3,4,{0x82,0x31,0x9D,0x33,}},
- {0x3AB4,4,{0x82,0x31,0x9D,0x34,}},
- {0x3AB5,4,{0x82,0x31,0x9D,0x35,}},
- {0x3AB6,4,{0x82,0x31,0x9D,0x36,}},
- {0x3AB7,4,{0x82,0x31,0x9D,0x37,}},
- {0x3AB8,4,{0x82,0x31,0x9D,0x38,}},
- {0x3AB9,4,{0x82,0x31,0x9D,0x39,}},
- {0x3ABA,4,{0x82,0x31,0x9E,0x30,}},
- {0x3ABB,4,{0x82,0x31,0x9E,0x31,}},
- {0x3ABC,4,{0x82,0x31,0x9E,0x32,}},
- {0x3ABD,4,{0x82,0x31,0x9E,0x33,}},
- {0x3ABE,4,{0x82,0x31,0x9E,0x34,}},
- {0x3ABF,4,{0x82,0x31,0x9E,0x35,}},
- {0x3AC0,4,{0x82,0x31,0x9E,0x36,}},
- {0x3AC1,4,{0x82,0x31,0x9E,0x37,}},
- {0x3AC2,4,{0x82,0x31,0x9E,0x38,}},
- {0x3AC3,4,{0x82,0x31,0x9E,0x39,}},
- {0x3AC4,4,{0x82,0x31,0x9F,0x30,}},
- {0x3AC5,4,{0x82,0x31,0x9F,0x31,}},
- {0x3AC6,4,{0x82,0x31,0x9F,0x32,}},
- {0x3AC7,4,{0x82,0x31,0x9F,0x33,}},
- {0x3AC8,4,{0x82,0x31,0x9F,0x34,}},
- {0x3AC9,4,{0x82,0x31,0x9F,0x35,}},
- {0x3ACA,4,{0x82,0x31,0x9F,0x36,}},
- {0x3ACB,4,{0x82,0x31,0x9F,0x37,}},
- {0x3ACC,4,{0x82,0x31,0x9F,0x38,}},
- {0x3ACD,4,{0x82,0x31,0x9F,0x39,}},
- {0x3ACE,4,{0x82,0x31,0xA0,0x30,}},
- {0x3ACF,4,{0x82,0x31,0xA0,0x31,}},
- {0x3AD0,4,{0x82,0x31,0xA0,0x32,}},
- {0x3AD1,4,{0x82,0x31,0xA0,0x33,}},
- {0x3AD2,4,{0x82,0x31,0xA0,0x34,}},
- {0x3AD3,4,{0x82,0x31,0xA0,0x35,}},
- {0x3AD4,4,{0x82,0x31,0xA0,0x36,}},
- {0x3AD5,4,{0x82,0x31,0xA0,0x37,}},
- {0x3AD6,4,{0x82,0x31,0xA0,0x38,}},
- {0x3AD7,4,{0x82,0x31,0xA0,0x39,}},
- {0x3AD8,4,{0x82,0x31,0xA1,0x30,}},
- {0x3AD9,4,{0x82,0x31,0xA1,0x31,}},
- {0x3ADA,4,{0x82,0x31,0xA1,0x32,}},
- {0x3ADB,4,{0x82,0x31,0xA1,0x33,}},
- {0x3ADC,4,{0x82,0x31,0xA1,0x34,}},
- {0x3ADD,4,{0x82,0x31,0xA1,0x35,}},
- {0x3ADE,4,{0x82,0x31,0xA1,0x36,}},
- {0x3ADF,4,{0x82,0x31,0xA1,0x37,}},
- {0x3AE0,4,{0x82,0x31,0xA1,0x38,}},
- {0x3AE1,4,{0x82,0x31,0xA1,0x39,}},
- {0x3AE2,4,{0x82,0x31,0xA2,0x30,}},
- {0x3AE3,4,{0x82,0x31,0xA2,0x31,}},
- {0x3AE4,4,{0x82,0x31,0xA2,0x32,}},
- {0x3AE5,4,{0x82,0x31,0xA2,0x33,}},
- {0x3AE6,4,{0x82,0x31,0xA2,0x34,}},
- {0x3AE7,4,{0x82,0x31,0xA2,0x35,}},
- {0x3AE8,4,{0x82,0x31,0xA2,0x36,}},
- {0x3AE9,4,{0x82,0x31,0xA2,0x37,}},
- {0x3AEA,4,{0x82,0x31,0xA2,0x38,}},
- {0x3AEB,4,{0x82,0x31,0xA2,0x39,}},
- {0x3AEC,4,{0x82,0x31,0xA3,0x30,}},
- {0x3AED,4,{0x82,0x31,0xA3,0x31,}},
- {0x3AEE,4,{0x82,0x31,0xA3,0x32,}},
- {0x3AEF,4,{0x82,0x31,0xA3,0x33,}},
- {0x3AF0,4,{0x82,0x31,0xA3,0x34,}},
- {0x3AF1,4,{0x82,0x31,0xA3,0x35,}},
- {0x3AF2,4,{0x82,0x31,0xA3,0x36,}},
- {0x3AF3,4,{0x82,0x31,0xA3,0x37,}},
- {0x3AF4,4,{0x82,0x31,0xA3,0x38,}},
- {0x3AF5,4,{0x82,0x31,0xA3,0x39,}},
- {0x3AF6,4,{0x82,0x31,0xA4,0x30,}},
- {0x3AF7,4,{0x82,0x31,0xA4,0x31,}},
- {0x3AF8,4,{0x82,0x31,0xA4,0x32,}},
- {0x3AF9,4,{0x82,0x31,0xA4,0x33,}},
- {0x3AFA,4,{0x82,0x31,0xA4,0x34,}},
- {0x3AFB,4,{0x82,0x31,0xA4,0x35,}},
- {0x3AFC,4,{0x82,0x31,0xA4,0x36,}},
- {0x3AFD,4,{0x82,0x31,0xA4,0x37,}},
- {0x3AFE,4,{0x82,0x31,0xA4,0x38,}},
- {0x3AFF,4,{0x82,0x31,0xA4,0x39,}},
- {0x3B00,4,{0x82,0x31,0xA5,0x30,}},
- {0x3B01,4,{0x82,0x31,0xA5,0x31,}},
- {0x3B02,4,{0x82,0x31,0xA5,0x32,}},
- {0x3B03,4,{0x82,0x31,0xA5,0x33,}},
- {0x3B04,4,{0x82,0x31,0xA5,0x34,}},
- {0x3B05,4,{0x82,0x31,0xA5,0x35,}},
- {0x3B06,4,{0x82,0x31,0xA5,0x36,}},
- {0x3B07,4,{0x82,0x31,0xA5,0x37,}},
- {0x3B08,4,{0x82,0x31,0xA5,0x38,}},
- {0x3B09,4,{0x82,0x31,0xA5,0x39,}},
- {0x3B0A,4,{0x82,0x31,0xA6,0x30,}},
- {0x3B0B,4,{0x82,0x31,0xA6,0x31,}},
- {0x3B0C,4,{0x82,0x31,0xA6,0x32,}},
- {0x3B0D,4,{0x82,0x31,0xA6,0x33,}},
- {0x3B0E,4,{0x82,0x31,0xA6,0x34,}},
- {0x3B0F,4,{0x82,0x31,0xA6,0x35,}},
- {0x3B10,4,{0x82,0x31,0xA6,0x36,}},
- {0x3B11,4,{0x82,0x31,0xA6,0x37,}},
- {0x3B12,4,{0x82,0x31,0xA6,0x38,}},
- {0x3B13,4,{0x82,0x31,0xA6,0x39,}},
- {0x3B14,4,{0x82,0x31,0xA7,0x30,}},
- {0x3B15,4,{0x82,0x31,0xA7,0x31,}},
- {0x3B16,4,{0x82,0x31,0xA7,0x32,}},
- {0x3B17,4,{0x82,0x31,0xA7,0x33,}},
- {0x3B18,4,{0x82,0x31,0xA7,0x34,}},
- {0x3B19,4,{0x82,0x31,0xA7,0x35,}},
- {0x3B1A,4,{0x82,0x31,0xA7,0x36,}},
- {0x3B1B,4,{0x82,0x31,0xA7,0x37,}},
- {0x3B1C,4,{0x82,0x31,0xA7,0x38,}},
- {0x3B1D,4,{0x82,0x31,0xA7,0x39,}},
- {0x3B1E,4,{0x82,0x31,0xA8,0x30,}},
- {0x3B1F,4,{0x82,0x31,0xA8,0x31,}},
- {0x3B20,4,{0x82,0x31,0xA8,0x32,}},
- {0x3B21,4,{0x82,0x31,0xA8,0x33,}},
- {0x3B22,4,{0x82,0x31,0xA8,0x34,}},
- {0x3B23,4,{0x82,0x31,0xA8,0x35,}},
- {0x3B24,4,{0x82,0x31,0xA8,0x36,}},
- {0x3B25,4,{0x82,0x31,0xA8,0x37,}},
- {0x3B26,4,{0x82,0x31,0xA8,0x38,}},
- {0x3B27,4,{0x82,0x31,0xA8,0x39,}},
- {0x3B28,4,{0x82,0x31,0xA9,0x30,}},
- {0x3B29,4,{0x82,0x31,0xA9,0x31,}},
- {0x3B2A,4,{0x82,0x31,0xA9,0x32,}},
- {0x3B2B,4,{0x82,0x31,0xA9,0x33,}},
- {0x3B2C,4,{0x82,0x31,0xA9,0x34,}},
- {0x3B2D,4,{0x82,0x31,0xA9,0x35,}},
- {0x3B2E,4,{0x82,0x31,0xA9,0x36,}},
- {0x3B2F,4,{0x82,0x31,0xA9,0x37,}},
- {0x3B30,4,{0x82,0x31,0xA9,0x38,}},
- {0x3B31,4,{0x82,0x31,0xA9,0x39,}},
- {0x3B32,4,{0x82,0x31,0xAA,0x30,}},
- {0x3B33,4,{0x82,0x31,0xAA,0x31,}},
- {0x3B34,4,{0x82,0x31,0xAA,0x32,}},
- {0x3B35,4,{0x82,0x31,0xAA,0x33,}},
- {0x3B36,4,{0x82,0x31,0xAA,0x34,}},
- {0x3B37,4,{0x82,0x31,0xAA,0x35,}},
- {0x3B38,4,{0x82,0x31,0xAA,0x36,}},
- {0x3B39,4,{0x82,0x31,0xAA,0x37,}},
- {0x3B3A,4,{0x82,0x31,0xAA,0x38,}},
- {0x3B3B,4,{0x82,0x31,0xAA,0x39,}},
- {0x3B3C,4,{0x82,0x31,0xAB,0x30,}},
- {0x3B3D,4,{0x82,0x31,0xAB,0x31,}},
- {0x3B3E,4,{0x82,0x31,0xAB,0x32,}},
- {0x3B3F,4,{0x82,0x31,0xAB,0x33,}},
- {0x3B40,4,{0x82,0x31,0xAB,0x34,}},
- {0x3B41,4,{0x82,0x31,0xAB,0x35,}},
- {0x3B42,4,{0x82,0x31,0xAB,0x36,}},
- {0x3B43,4,{0x82,0x31,0xAB,0x37,}},
- {0x3B44,4,{0x82,0x31,0xAB,0x38,}},
- {0x3B45,4,{0x82,0x31,0xAB,0x39,}},
- {0x3B46,4,{0x82,0x31,0xAC,0x30,}},
- {0x3B47,4,{0x82,0x31,0xAC,0x31,}},
- {0x3B48,4,{0x82,0x31,0xAC,0x32,}},
- {0x3B49,4,{0x82,0x31,0xAC,0x33,}},
- {0x3B4A,4,{0x82,0x31,0xAC,0x34,}},
- {0x3B4B,4,{0x82,0x31,0xAC,0x35,}},
- {0x3B4C,4,{0x82,0x31,0xAC,0x36,}},
- {0x3B4D,4,{0x82,0x31,0xAC,0x37,}},
- {0x3B4E,2,{0xFE,0x68,0x00,0x00,}},
- {0x3B4F,4,{0x82,0x31,0xAC,0x38,}},
- {0x3B50,4,{0x82,0x31,0xAC,0x39,}},
- {0x3B51,4,{0x82,0x31,0xAD,0x30,}},
- {0x3B52,4,{0x82,0x31,0xAD,0x31,}},
- {0x3B53,4,{0x82,0x31,0xAD,0x32,}},
- {0x3B54,4,{0x82,0x31,0xAD,0x33,}},
- {0x3B55,4,{0x82,0x31,0xAD,0x34,}},
- {0x3B56,4,{0x82,0x31,0xAD,0x35,}},
- {0x3B57,4,{0x82,0x31,0xAD,0x36,}},
- {0x3B58,4,{0x82,0x31,0xAD,0x37,}},
- {0x3B59,4,{0x82,0x31,0xAD,0x38,}},
- {0x3B5A,4,{0x82,0x31,0xAD,0x39,}},
- {0x3B5B,4,{0x82,0x31,0xAE,0x30,}},
- {0x3B5C,4,{0x82,0x31,0xAE,0x31,}},
- {0x3B5D,4,{0x82,0x31,0xAE,0x32,}},
- {0x3B5E,4,{0x82,0x31,0xAE,0x33,}},
- {0x3B5F,4,{0x82,0x31,0xAE,0x34,}},
- {0x3B60,4,{0x82,0x31,0xAE,0x35,}},
- {0x3B61,4,{0x82,0x31,0xAE,0x36,}},
- {0x3B62,4,{0x82,0x31,0xAE,0x37,}},
- {0x3B63,4,{0x82,0x31,0xAE,0x38,}},
- {0x3B64,4,{0x82,0x31,0xAE,0x39,}},
- {0x3B65,4,{0x82,0x31,0xAF,0x30,}},
- {0x3B66,4,{0x82,0x31,0xAF,0x31,}},
- {0x3B67,4,{0x82,0x31,0xAF,0x32,}},
- {0x3B68,4,{0x82,0x31,0xAF,0x33,}},
- {0x3B69,4,{0x82,0x31,0xAF,0x34,}},
- {0x3B6A,4,{0x82,0x31,0xAF,0x35,}},
- {0x3B6B,4,{0x82,0x31,0xAF,0x36,}},
- {0x3B6C,4,{0x82,0x31,0xAF,0x37,}},
- {0x3B6D,4,{0x82,0x31,0xAF,0x38,}},
- {0x3B6E,4,{0x82,0x31,0xAF,0x39,}},
- {0x3B6F,4,{0x82,0x31,0xB0,0x30,}},
- {0x3B70,4,{0x82,0x31,0xB0,0x31,}},
- {0x3B71,4,{0x82,0x31,0xB0,0x32,}},
- {0x3B72,4,{0x82,0x31,0xB0,0x33,}},
- {0x3B73,4,{0x82,0x31,0xB0,0x34,}},
- {0x3B74,4,{0x82,0x31,0xB0,0x35,}},
- {0x3B75,4,{0x82,0x31,0xB0,0x36,}},
- {0x3B76,4,{0x82,0x31,0xB0,0x37,}},
- {0x3B77,4,{0x82,0x31,0xB0,0x38,}},
- {0x3B78,4,{0x82,0x31,0xB0,0x39,}},
- {0x3B79,4,{0x82,0x31,0xB1,0x30,}},
- {0x3B7A,4,{0x82,0x31,0xB1,0x31,}},
- {0x3B7B,4,{0x82,0x31,0xB1,0x32,}},
- {0x3B7C,4,{0x82,0x31,0xB1,0x33,}},
- {0x3B7D,4,{0x82,0x31,0xB1,0x34,}},
- {0x3B7E,4,{0x82,0x31,0xB1,0x35,}},
- {0x3B7F,4,{0x82,0x31,0xB1,0x36,}},
- {0x3B80,4,{0x82,0x31,0xB1,0x37,}},
- {0x3B81,4,{0x82,0x31,0xB1,0x38,}},
- {0x3B82,4,{0x82,0x31,0xB1,0x39,}},
- {0x3B83,4,{0x82,0x31,0xB2,0x30,}},
- {0x3B84,4,{0x82,0x31,0xB2,0x31,}},
- {0x3B85,4,{0x82,0x31,0xB2,0x32,}},
- {0x3B86,4,{0x82,0x31,0xB2,0x33,}},
- {0x3B87,4,{0x82,0x31,0xB2,0x34,}},
- {0x3B88,4,{0x82,0x31,0xB2,0x35,}},
- {0x3B89,4,{0x82,0x31,0xB2,0x36,}},
- {0x3B8A,4,{0x82,0x31,0xB2,0x37,}},
- {0x3B8B,4,{0x82,0x31,0xB2,0x38,}},
- {0x3B8C,4,{0x82,0x31,0xB2,0x39,}},
- {0x3B8D,4,{0x82,0x31,0xB3,0x30,}},
- {0x3B8E,4,{0x82,0x31,0xB3,0x31,}},
- {0x3B8F,4,{0x82,0x31,0xB3,0x32,}},
- {0x3B90,4,{0x82,0x31,0xB3,0x33,}},
- {0x3B91,4,{0x82,0x31,0xB3,0x34,}},
- {0x3B92,4,{0x82,0x31,0xB3,0x35,}},
- {0x3B93,4,{0x82,0x31,0xB3,0x36,}},
- {0x3B94,4,{0x82,0x31,0xB3,0x37,}},
- {0x3B95,4,{0x82,0x31,0xB3,0x38,}},
- {0x3B96,4,{0x82,0x31,0xB3,0x39,}},
- {0x3B97,4,{0x82,0x31,0xB4,0x30,}},
- {0x3B98,4,{0x82,0x31,0xB4,0x31,}},
- {0x3B99,4,{0x82,0x31,0xB4,0x32,}},
- {0x3B9A,4,{0x82,0x31,0xB4,0x33,}},
- {0x3B9B,4,{0x82,0x31,0xB4,0x34,}},
- {0x3B9C,4,{0x82,0x31,0xB4,0x35,}},
- {0x3B9D,4,{0x82,0x31,0xB4,0x36,}},
- {0x3B9E,4,{0x82,0x31,0xB4,0x37,}},
- {0x3B9F,4,{0x82,0x31,0xB4,0x38,}},
- {0x3BA0,4,{0x82,0x31,0xB4,0x39,}},
- {0x3BA1,4,{0x82,0x31,0xB5,0x30,}},
- {0x3BA2,4,{0x82,0x31,0xB5,0x31,}},
- {0x3BA3,4,{0x82,0x31,0xB5,0x32,}},
- {0x3BA4,4,{0x82,0x31,0xB5,0x33,}},
- {0x3BA5,4,{0x82,0x31,0xB5,0x34,}},
- {0x3BA6,4,{0x82,0x31,0xB5,0x35,}},
- {0x3BA7,4,{0x82,0x31,0xB5,0x36,}},
- {0x3BA8,4,{0x82,0x31,0xB5,0x37,}},
- {0x3BA9,4,{0x82,0x31,0xB5,0x38,}},
- {0x3BAA,4,{0x82,0x31,0xB5,0x39,}},
- {0x3BAB,4,{0x82,0x31,0xB6,0x30,}},
- {0x3BAC,4,{0x82,0x31,0xB6,0x31,}},
- {0x3BAD,4,{0x82,0x31,0xB6,0x32,}},
- {0x3BAE,4,{0x82,0x31,0xB6,0x33,}},
- {0x3BAF,4,{0x82,0x31,0xB6,0x34,}},
- {0x3BB0,4,{0x82,0x31,0xB6,0x35,}},
- {0x3BB1,4,{0x82,0x31,0xB6,0x36,}},
- {0x3BB2,4,{0x82,0x31,0xB6,0x37,}},
- {0x3BB3,4,{0x82,0x31,0xB6,0x38,}},
- {0x3BB4,4,{0x82,0x31,0xB6,0x39,}},
- {0x3BB5,4,{0x82,0x31,0xB7,0x30,}},
- {0x3BB6,4,{0x82,0x31,0xB7,0x31,}},
- {0x3BB7,4,{0x82,0x31,0xB7,0x32,}},
- {0x3BB8,4,{0x82,0x31,0xB7,0x33,}},
- {0x3BB9,4,{0x82,0x31,0xB7,0x34,}},
- {0x3BBA,4,{0x82,0x31,0xB7,0x35,}},
- {0x3BBB,4,{0x82,0x31,0xB7,0x36,}},
- {0x3BBC,4,{0x82,0x31,0xB7,0x37,}},
- {0x3BBD,4,{0x82,0x31,0xB7,0x38,}},
- {0x3BBE,4,{0x82,0x31,0xB7,0x39,}},
- {0x3BBF,4,{0x82,0x31,0xB8,0x30,}},
- {0x3BC0,4,{0x82,0x31,0xB8,0x31,}},
- {0x3BC1,4,{0x82,0x31,0xB8,0x32,}},
- {0x3BC2,4,{0x82,0x31,0xB8,0x33,}},
- {0x3BC3,4,{0x82,0x31,0xB8,0x34,}},
- {0x3BC4,4,{0x82,0x31,0xB8,0x35,}},
- {0x3BC5,4,{0x82,0x31,0xB8,0x36,}},
- {0x3BC6,4,{0x82,0x31,0xB8,0x37,}},
- {0x3BC7,4,{0x82,0x31,0xB8,0x38,}},
- {0x3BC8,4,{0x82,0x31,0xB8,0x39,}},
- {0x3BC9,4,{0x82,0x31,0xB9,0x30,}},
- {0x3BCA,4,{0x82,0x31,0xB9,0x31,}},
- {0x3BCB,4,{0x82,0x31,0xB9,0x32,}},
- {0x3BCC,4,{0x82,0x31,0xB9,0x33,}},
- {0x3BCD,4,{0x82,0x31,0xB9,0x34,}},
- {0x3BCE,4,{0x82,0x31,0xB9,0x35,}},
- {0x3BCF,4,{0x82,0x31,0xB9,0x36,}},
- {0x3BD0,4,{0x82,0x31,0xB9,0x37,}},
- {0x3BD1,4,{0x82,0x31,0xB9,0x38,}},
- {0x3BD2,4,{0x82,0x31,0xB9,0x39,}},
- {0x3BD3,4,{0x82,0x31,0xBA,0x30,}},
- {0x3BD4,4,{0x82,0x31,0xBA,0x31,}},
- {0x3BD5,4,{0x82,0x31,0xBA,0x32,}},
- {0x3BD6,4,{0x82,0x31,0xBA,0x33,}},
- {0x3BD7,4,{0x82,0x31,0xBA,0x34,}},
- {0x3BD8,4,{0x82,0x31,0xBA,0x35,}},
- {0x3BD9,4,{0x82,0x31,0xBA,0x36,}},
- {0x3BDA,4,{0x82,0x31,0xBA,0x37,}},
- {0x3BDB,4,{0x82,0x31,0xBA,0x38,}},
- {0x3BDC,4,{0x82,0x31,0xBA,0x39,}},
- {0x3BDD,4,{0x82,0x31,0xBB,0x30,}},
- {0x3BDE,4,{0x82,0x31,0xBB,0x31,}},
- {0x3BDF,4,{0x82,0x31,0xBB,0x32,}},
- {0x3BE0,4,{0x82,0x31,0xBB,0x33,}},
- {0x3BE1,4,{0x82,0x31,0xBB,0x34,}},
- {0x3BE2,4,{0x82,0x31,0xBB,0x35,}},
- {0x3BE3,4,{0x82,0x31,0xBB,0x36,}},
- {0x3BE4,4,{0x82,0x31,0xBB,0x37,}},
- {0x3BE5,4,{0x82,0x31,0xBB,0x38,}},
- {0x3BE6,4,{0x82,0x31,0xBB,0x39,}},
- {0x3BE7,4,{0x82,0x31,0xBC,0x30,}},
- {0x3BE8,4,{0x82,0x31,0xBC,0x31,}},
- {0x3BE9,4,{0x82,0x31,0xBC,0x32,}},
- {0x3BEA,4,{0x82,0x31,0xBC,0x33,}},
- {0x3BEB,4,{0x82,0x31,0xBC,0x34,}},
- {0x3BEC,4,{0x82,0x31,0xBC,0x35,}},
- {0x3BED,4,{0x82,0x31,0xBC,0x36,}},
- {0x3BEE,4,{0x82,0x31,0xBC,0x37,}},
- {0x3BEF,4,{0x82,0x31,0xBC,0x38,}},
- {0x3BF0,4,{0x82,0x31,0xBC,0x39,}},
- {0x3BF1,4,{0x82,0x31,0xBD,0x30,}},
- {0x3BF2,4,{0x82,0x31,0xBD,0x31,}},
- {0x3BF3,4,{0x82,0x31,0xBD,0x32,}},
- {0x3BF4,4,{0x82,0x31,0xBD,0x33,}},
- {0x3BF5,4,{0x82,0x31,0xBD,0x34,}},
- {0x3BF6,4,{0x82,0x31,0xBD,0x35,}},
- {0x3BF7,4,{0x82,0x31,0xBD,0x36,}},
- {0x3BF8,4,{0x82,0x31,0xBD,0x37,}},
- {0x3BF9,4,{0x82,0x31,0xBD,0x38,}},
- {0x3BFA,4,{0x82,0x31,0xBD,0x39,}},
- {0x3BFB,4,{0x82,0x31,0xBE,0x30,}},
- {0x3BFC,4,{0x82,0x31,0xBE,0x31,}},
- {0x3BFD,4,{0x82,0x31,0xBE,0x32,}},
- {0x3BFE,4,{0x82,0x31,0xBE,0x33,}},
- {0x3BFF,4,{0x82,0x31,0xBE,0x34,}},
- {0x3C00,4,{0x82,0x31,0xBE,0x35,}},
- {0x3C01,4,{0x82,0x31,0xBE,0x36,}},
- {0x3C02,4,{0x82,0x31,0xBE,0x37,}},
- {0x3C03,4,{0x82,0x31,0xBE,0x38,}},
- {0x3C04,4,{0x82,0x31,0xBE,0x39,}},
- {0x3C05,4,{0x82,0x31,0xBF,0x30,}},
- {0x3C06,4,{0x82,0x31,0xBF,0x31,}},
- {0x3C07,4,{0x82,0x31,0xBF,0x32,}},
- {0x3C08,4,{0x82,0x31,0xBF,0x33,}},
- {0x3C09,4,{0x82,0x31,0xBF,0x34,}},
- {0x3C0A,4,{0x82,0x31,0xBF,0x35,}},
- {0x3C0B,4,{0x82,0x31,0xBF,0x36,}},
- {0x3C0C,4,{0x82,0x31,0xBF,0x37,}},
- {0x3C0D,4,{0x82,0x31,0xBF,0x38,}},
- {0x3C0E,4,{0x82,0x31,0xBF,0x39,}},
- {0x3C0F,4,{0x82,0x31,0xC0,0x30,}},
- {0x3C10,4,{0x82,0x31,0xC0,0x31,}},
- {0x3C11,4,{0x82,0x31,0xC0,0x32,}},
- {0x3C12,4,{0x82,0x31,0xC0,0x33,}},
- {0x3C13,4,{0x82,0x31,0xC0,0x34,}},
- {0x3C14,4,{0x82,0x31,0xC0,0x35,}},
- {0x3C15,4,{0x82,0x31,0xC0,0x36,}},
- {0x3C16,4,{0x82,0x31,0xC0,0x37,}},
- {0x3C17,4,{0x82,0x31,0xC0,0x38,}},
- {0x3C18,4,{0x82,0x31,0xC0,0x39,}},
- {0x3C19,4,{0x82,0x31,0xC1,0x30,}},
- {0x3C1A,4,{0x82,0x31,0xC1,0x31,}},
- {0x3C1B,4,{0x82,0x31,0xC1,0x32,}},
- {0x3C1C,4,{0x82,0x31,0xC1,0x33,}},
- {0x3C1D,4,{0x82,0x31,0xC1,0x34,}},
- {0x3C1E,4,{0x82,0x31,0xC1,0x35,}},
- {0x3C1F,4,{0x82,0x31,0xC1,0x36,}},
- {0x3C20,4,{0x82,0x31,0xC1,0x37,}},
- {0x3C21,4,{0x82,0x31,0xC1,0x38,}},
- {0x3C22,4,{0x82,0x31,0xC1,0x39,}},
- {0x3C23,4,{0x82,0x31,0xC2,0x30,}},
- {0x3C24,4,{0x82,0x31,0xC2,0x31,}},
- {0x3C25,4,{0x82,0x31,0xC2,0x32,}},
- {0x3C26,4,{0x82,0x31,0xC2,0x33,}},
- {0x3C27,4,{0x82,0x31,0xC2,0x34,}},
- {0x3C28,4,{0x82,0x31,0xC2,0x35,}},
- {0x3C29,4,{0x82,0x31,0xC2,0x36,}},
- {0x3C2A,4,{0x82,0x31,0xC2,0x37,}},
- {0x3C2B,4,{0x82,0x31,0xC2,0x38,}},
- {0x3C2C,4,{0x82,0x31,0xC2,0x39,}},
- {0x3C2D,4,{0x82,0x31,0xC3,0x30,}},
- {0x3C2E,4,{0x82,0x31,0xC3,0x31,}},
- {0x3C2F,4,{0x82,0x31,0xC3,0x32,}},
- {0x3C30,4,{0x82,0x31,0xC3,0x33,}},
- {0x3C31,4,{0x82,0x31,0xC3,0x34,}},
- {0x3C32,4,{0x82,0x31,0xC3,0x35,}},
- {0x3C33,4,{0x82,0x31,0xC3,0x36,}},
- {0x3C34,4,{0x82,0x31,0xC3,0x37,}},
- {0x3C35,4,{0x82,0x31,0xC3,0x38,}},
- {0x3C36,4,{0x82,0x31,0xC3,0x39,}},
- {0x3C37,4,{0x82,0x31,0xC4,0x30,}},
- {0x3C38,4,{0x82,0x31,0xC4,0x31,}},
- {0x3C39,4,{0x82,0x31,0xC4,0x32,}},
- {0x3C3A,4,{0x82,0x31,0xC4,0x33,}},
- {0x3C3B,4,{0x82,0x31,0xC4,0x34,}},
- {0x3C3C,4,{0x82,0x31,0xC4,0x35,}},
- {0x3C3D,4,{0x82,0x31,0xC4,0x36,}},
- {0x3C3E,4,{0x82,0x31,0xC4,0x37,}},
- {0x3C3F,4,{0x82,0x31,0xC4,0x38,}},
- {0x3C40,4,{0x82,0x31,0xC4,0x39,}},
- {0x3C41,4,{0x82,0x31,0xC5,0x30,}},
- {0x3C42,4,{0x82,0x31,0xC5,0x31,}},
- {0x3C43,4,{0x82,0x31,0xC5,0x32,}},
- {0x3C44,4,{0x82,0x31,0xC5,0x33,}},
- {0x3C45,4,{0x82,0x31,0xC5,0x34,}},
- {0x3C46,4,{0x82,0x31,0xC5,0x35,}},
- {0x3C47,4,{0x82,0x31,0xC5,0x36,}},
- {0x3C48,4,{0x82,0x31,0xC5,0x37,}},
- {0x3C49,4,{0x82,0x31,0xC5,0x38,}},
- {0x3C4A,4,{0x82,0x31,0xC5,0x39,}},
- {0x3C4B,4,{0x82,0x31,0xC6,0x30,}},
- {0x3C4C,4,{0x82,0x31,0xC6,0x31,}},
- {0x3C4D,4,{0x82,0x31,0xC6,0x32,}},
- {0x3C4E,4,{0x82,0x31,0xC6,0x33,}},
- {0x3C4F,4,{0x82,0x31,0xC6,0x34,}},
- {0x3C50,4,{0x82,0x31,0xC6,0x35,}},
- {0x3C51,4,{0x82,0x31,0xC6,0x36,}},
- {0x3C52,4,{0x82,0x31,0xC6,0x37,}},
- {0x3C53,4,{0x82,0x31,0xC6,0x38,}},
- {0x3C54,4,{0x82,0x31,0xC6,0x39,}},
- {0x3C55,4,{0x82,0x31,0xC7,0x30,}},
- {0x3C56,4,{0x82,0x31,0xC7,0x31,}},
- {0x3C57,4,{0x82,0x31,0xC7,0x32,}},
- {0x3C58,4,{0x82,0x31,0xC7,0x33,}},
- {0x3C59,4,{0x82,0x31,0xC7,0x34,}},
- {0x3C5A,4,{0x82,0x31,0xC7,0x35,}},
- {0x3C5B,4,{0x82,0x31,0xC7,0x36,}},
- {0x3C5C,4,{0x82,0x31,0xC7,0x37,}},
- {0x3C5D,4,{0x82,0x31,0xC7,0x38,}},
- {0x3C5E,4,{0x82,0x31,0xC7,0x39,}},
- {0x3C5F,4,{0x82,0x31,0xC8,0x30,}},
- {0x3C60,4,{0x82,0x31,0xC8,0x31,}},
- {0x3C61,4,{0x82,0x31,0xC8,0x32,}},
- {0x3C62,4,{0x82,0x31,0xC8,0x33,}},
- {0x3C63,4,{0x82,0x31,0xC8,0x34,}},
- {0x3C64,4,{0x82,0x31,0xC8,0x35,}},
- {0x3C65,4,{0x82,0x31,0xC8,0x36,}},
- {0x3C66,4,{0x82,0x31,0xC8,0x37,}},
- {0x3C67,4,{0x82,0x31,0xC8,0x38,}},
- {0x3C68,4,{0x82,0x31,0xC8,0x39,}},
- {0x3C69,4,{0x82,0x31,0xC9,0x30,}},
- {0x3C6A,4,{0x82,0x31,0xC9,0x31,}},
- {0x3C6B,4,{0x82,0x31,0xC9,0x32,}},
- {0x3C6C,4,{0x82,0x31,0xC9,0x33,}},
- {0x3C6D,4,{0x82,0x31,0xC9,0x34,}},
- {0x3C6E,2,{0xFE,0x69,0x00,0x00,}},
- {0x3C6F,4,{0x82,0x31,0xC9,0x35,}},
- {0x3C70,4,{0x82,0x31,0xC9,0x36,}},
- {0x3C71,4,{0x82,0x31,0xC9,0x37,}},
- {0x3C72,4,{0x82,0x31,0xC9,0x38,}},
- {0x3C73,4,{0x82,0x31,0xC9,0x39,}},
- {0x3C74,4,{0x82,0x31,0xCA,0x30,}},
- {0x3C75,4,{0x82,0x31,0xCA,0x31,}},
- {0x3C76,4,{0x82,0x31,0xCA,0x32,}},
- {0x3C77,4,{0x82,0x31,0xCA,0x33,}},
- {0x3C78,4,{0x82,0x31,0xCA,0x34,}},
- {0x3C79,4,{0x82,0x31,0xCA,0x35,}},
- {0x3C7A,4,{0x82,0x31,0xCA,0x36,}},
- {0x3C7B,4,{0x82,0x31,0xCA,0x37,}},
- {0x3C7C,4,{0x82,0x31,0xCA,0x38,}},
- {0x3C7D,4,{0x82,0x31,0xCA,0x39,}},
- {0x3C7E,4,{0x82,0x31,0xCB,0x30,}},
- {0x3C7F,4,{0x82,0x31,0xCB,0x31,}},
- {0x3C80,4,{0x82,0x31,0xCB,0x32,}},
- {0x3C81,4,{0x82,0x31,0xCB,0x33,}},
- {0x3C82,4,{0x82,0x31,0xCB,0x34,}},
- {0x3C83,4,{0x82,0x31,0xCB,0x35,}},
- {0x3C84,4,{0x82,0x31,0xCB,0x36,}},
- {0x3C85,4,{0x82,0x31,0xCB,0x37,}},
- {0x3C86,4,{0x82,0x31,0xCB,0x38,}},
- {0x3C87,4,{0x82,0x31,0xCB,0x39,}},
- {0x3C88,4,{0x82,0x31,0xCC,0x30,}},
- {0x3C89,4,{0x82,0x31,0xCC,0x31,}},
- {0x3C8A,4,{0x82,0x31,0xCC,0x32,}},
- {0x3C8B,4,{0x82,0x31,0xCC,0x33,}},
- {0x3C8C,4,{0x82,0x31,0xCC,0x34,}},
- {0x3C8D,4,{0x82,0x31,0xCC,0x35,}},
- {0x3C8E,4,{0x82,0x31,0xCC,0x36,}},
- {0x3C8F,4,{0x82,0x31,0xCC,0x37,}},
- {0x3C90,4,{0x82,0x31,0xCC,0x38,}},
- {0x3C91,4,{0x82,0x31,0xCC,0x39,}},
- {0x3C92,4,{0x82,0x31,0xCD,0x30,}},
- {0x3C93,4,{0x82,0x31,0xCD,0x31,}},
- {0x3C94,4,{0x82,0x31,0xCD,0x32,}},
- {0x3C95,4,{0x82,0x31,0xCD,0x33,}},
- {0x3C96,4,{0x82,0x31,0xCD,0x34,}},
- {0x3C97,4,{0x82,0x31,0xCD,0x35,}},
- {0x3C98,4,{0x82,0x31,0xCD,0x36,}},
- {0x3C99,4,{0x82,0x31,0xCD,0x37,}},
- {0x3C9A,4,{0x82,0x31,0xCD,0x38,}},
- {0x3C9B,4,{0x82,0x31,0xCD,0x39,}},
- {0x3C9C,4,{0x82,0x31,0xCE,0x30,}},
- {0x3C9D,4,{0x82,0x31,0xCE,0x31,}},
- {0x3C9E,4,{0x82,0x31,0xCE,0x32,}},
- {0x3C9F,4,{0x82,0x31,0xCE,0x33,}},
- {0x3CA0,4,{0x82,0x31,0xCE,0x34,}},
- {0x3CA1,4,{0x82,0x31,0xCE,0x35,}},
- {0x3CA2,4,{0x82,0x31,0xCE,0x36,}},
- {0x3CA3,4,{0x82,0x31,0xCE,0x37,}},
- {0x3CA4,4,{0x82,0x31,0xCE,0x38,}},
- {0x3CA5,4,{0x82,0x31,0xCE,0x39,}},
- {0x3CA6,4,{0x82,0x31,0xCF,0x30,}},
- {0x3CA7,4,{0x82,0x31,0xCF,0x31,}},
- {0x3CA8,4,{0x82,0x31,0xCF,0x32,}},
- {0x3CA9,4,{0x82,0x31,0xCF,0x33,}},
- {0x3CAA,4,{0x82,0x31,0xCF,0x34,}},
- {0x3CAB,4,{0x82,0x31,0xCF,0x35,}},
- {0x3CAC,4,{0x82,0x31,0xCF,0x36,}},
- {0x3CAD,4,{0x82,0x31,0xCF,0x37,}},
- {0x3CAE,4,{0x82,0x31,0xCF,0x38,}},
- {0x3CAF,4,{0x82,0x31,0xCF,0x39,}},
- {0x3CB0,4,{0x82,0x31,0xD0,0x30,}},
- {0x3CB1,4,{0x82,0x31,0xD0,0x31,}},
- {0x3CB2,4,{0x82,0x31,0xD0,0x32,}},
- {0x3CB3,4,{0x82,0x31,0xD0,0x33,}},
- {0x3CB4,4,{0x82,0x31,0xD0,0x34,}},
- {0x3CB5,4,{0x82,0x31,0xD0,0x35,}},
- {0x3CB6,4,{0x82,0x31,0xD0,0x36,}},
- {0x3CB7,4,{0x82,0x31,0xD0,0x37,}},
- {0x3CB8,4,{0x82,0x31,0xD0,0x38,}},
- {0x3CB9,4,{0x82,0x31,0xD0,0x39,}},
- {0x3CBA,4,{0x82,0x31,0xD1,0x30,}},
- {0x3CBB,4,{0x82,0x31,0xD1,0x31,}},
- {0x3CBC,4,{0x82,0x31,0xD1,0x32,}},
- {0x3CBD,4,{0x82,0x31,0xD1,0x33,}},
- {0x3CBE,4,{0x82,0x31,0xD1,0x34,}},
- {0x3CBF,4,{0x82,0x31,0xD1,0x35,}},
- {0x3CC0,4,{0x82,0x31,0xD1,0x36,}},
- {0x3CC1,4,{0x82,0x31,0xD1,0x37,}},
- {0x3CC2,4,{0x82,0x31,0xD1,0x38,}},
- {0x3CC3,4,{0x82,0x31,0xD1,0x39,}},
- {0x3CC4,4,{0x82,0x31,0xD2,0x30,}},
- {0x3CC5,4,{0x82,0x31,0xD2,0x31,}},
- {0x3CC6,4,{0x82,0x31,0xD2,0x32,}},
- {0x3CC7,4,{0x82,0x31,0xD2,0x33,}},
- {0x3CC8,4,{0x82,0x31,0xD2,0x34,}},
- {0x3CC9,4,{0x82,0x31,0xD2,0x35,}},
- {0x3CCA,4,{0x82,0x31,0xD2,0x36,}},
- {0x3CCB,4,{0x82,0x31,0xD2,0x37,}},
- {0x3CCC,4,{0x82,0x31,0xD2,0x38,}},
- {0x3CCD,4,{0x82,0x31,0xD2,0x39,}},
- {0x3CCE,4,{0x82,0x31,0xD3,0x30,}},
- {0x3CCF,4,{0x82,0x31,0xD3,0x31,}},
- {0x3CD0,4,{0x82,0x31,0xD3,0x32,}},
- {0x3CD1,4,{0x82,0x31,0xD3,0x33,}},
- {0x3CD2,4,{0x82,0x31,0xD3,0x34,}},
- {0x3CD3,4,{0x82,0x31,0xD3,0x35,}},
- {0x3CD4,4,{0x82,0x31,0xD3,0x36,}},
- {0x3CD5,4,{0x82,0x31,0xD3,0x37,}},
- {0x3CD6,4,{0x82,0x31,0xD3,0x38,}},
- {0x3CD7,4,{0x82,0x31,0xD3,0x39,}},
- {0x3CD8,4,{0x82,0x31,0xD4,0x30,}},
- {0x3CD9,4,{0x82,0x31,0xD4,0x31,}},
- {0x3CDA,4,{0x82,0x31,0xD4,0x32,}},
- {0x3CDB,4,{0x82,0x31,0xD4,0x33,}},
- {0x3CDC,4,{0x82,0x31,0xD4,0x34,}},
- {0x3CDD,4,{0x82,0x31,0xD4,0x35,}},
- {0x3CDE,4,{0x82,0x31,0xD4,0x36,}},
- {0x3CDF,4,{0x82,0x31,0xD4,0x37,}},
- {0x3CE0,2,{0xFE,0x6A,0x00,0x00,}},
- {0x4056,2,{0xFE,0x6F,0x00,0x00,}},
- {0x4057,4,{0x82,0x32,0xAF,0x33,}},
- {0x4058,4,{0x82,0x32,0xAF,0x34,}},
- {0x4059,4,{0x82,0x32,0xAF,0x35,}},
- {0x405A,4,{0x82,0x32,0xAF,0x36,}},
- {0x405B,4,{0x82,0x32,0xAF,0x37,}},
- {0x405C,4,{0x82,0x32,0xAF,0x38,}},
- {0x405D,4,{0x82,0x32,0xAF,0x39,}},
- {0x405E,4,{0x82,0x32,0xB0,0x30,}},
- {0x405F,4,{0x82,0x32,0xB0,0x31,}},
- {0x4060,4,{0x82,0x32,0xB0,0x32,}},
- {0x4061,4,{0x82,0x32,0xB0,0x33,}},
- {0x4062,4,{0x82,0x32,0xB0,0x34,}},
- {0x4063,4,{0x82,0x32,0xB0,0x35,}},
- {0x4064,4,{0x82,0x32,0xB0,0x36,}},
- {0x4065,4,{0x82,0x32,0xB0,0x37,}},
- {0x4066,4,{0x82,0x32,0xB0,0x38,}},
- {0x4067,4,{0x82,0x32,0xB0,0x39,}},
- {0x4068,4,{0x82,0x32,0xB1,0x30,}},
- {0x4069,4,{0x82,0x32,0xB1,0x31,}},
- {0x406A,4,{0x82,0x32,0xB1,0x32,}},
- {0x406B,4,{0x82,0x32,0xB1,0x33,}},
- {0x406C,4,{0x82,0x32,0xB1,0x34,}},
- {0x406D,4,{0x82,0x32,0xB1,0x35,}},
- {0x406E,4,{0x82,0x32,0xB1,0x36,}},
- {0x406F,4,{0x82,0x32,0xB1,0x37,}},
- {0x4070,4,{0x82,0x32,0xB1,0x38,}},
- {0x4071,4,{0x82,0x32,0xB1,0x39,}},
- {0x4072,4,{0x82,0x32,0xB2,0x30,}},
- {0x4073,4,{0x82,0x32,0xB2,0x31,}},
- {0x4074,4,{0x82,0x32,0xB2,0x32,}},
- {0x4075,4,{0x82,0x32,0xB2,0x33,}},
- {0x4076,4,{0x82,0x32,0xB2,0x34,}},
- {0x4077,4,{0x82,0x32,0xB2,0x35,}},
- {0x4078,4,{0x82,0x32,0xB2,0x36,}},
- {0x4079,4,{0x82,0x32,0xB2,0x37,}},
- {0x407A,4,{0x82,0x32,0xB2,0x38,}},
- {0x407B,4,{0x82,0x32,0xB2,0x39,}},
- {0x407C,4,{0x82,0x32,0xB3,0x30,}},
- {0x407D,4,{0x82,0x32,0xB3,0x31,}},
- {0x407E,4,{0x82,0x32,0xB3,0x32,}},
- {0x407F,4,{0x82,0x32,0xB3,0x33,}},
- {0x4080,4,{0x82,0x32,0xB3,0x34,}},
- {0x4081,4,{0x82,0x32,0xB3,0x35,}},
- {0x4082,4,{0x82,0x32,0xB3,0x36,}},
- {0x4083,4,{0x82,0x32,0xB3,0x37,}},
- {0x4084,4,{0x82,0x32,0xB3,0x38,}},
- {0x4085,4,{0x82,0x32,0xB3,0x39,}},
- {0x4086,4,{0x82,0x32,0xB4,0x30,}},
- {0x4087,4,{0x82,0x32,0xB4,0x31,}},
- {0x4088,4,{0x82,0x32,0xB4,0x32,}},
- {0x4089,4,{0x82,0x32,0xB4,0x33,}},
- {0x408A,4,{0x82,0x32,0xB4,0x34,}},
- {0x408B,4,{0x82,0x32,0xB4,0x35,}},
- {0x408C,4,{0x82,0x32,0xB4,0x36,}},
- {0x408D,4,{0x82,0x32,0xB4,0x37,}},
- {0x408E,4,{0x82,0x32,0xB4,0x38,}},
- {0x408F,4,{0x82,0x32,0xB4,0x39,}},
- {0x4090,4,{0x82,0x32,0xB5,0x30,}},
- {0x4091,4,{0x82,0x32,0xB5,0x31,}},
- {0x4092,4,{0x82,0x32,0xB5,0x32,}},
- {0x4093,4,{0x82,0x32,0xB5,0x33,}},
- {0x4094,4,{0x82,0x32,0xB5,0x34,}},
- {0x4095,4,{0x82,0x32,0xB5,0x35,}},
- {0x4096,4,{0x82,0x32,0xB5,0x36,}},
- {0x4097,4,{0x82,0x32,0xB5,0x37,}},
- {0x4098,4,{0x82,0x32,0xB5,0x38,}},
- {0x4099,4,{0x82,0x32,0xB5,0x39,}},
- {0x409A,4,{0x82,0x32,0xB6,0x30,}},
- {0x409B,4,{0x82,0x32,0xB6,0x31,}},
- {0x409C,4,{0x82,0x32,0xB6,0x32,}},
- {0x409D,4,{0x82,0x32,0xB6,0x33,}},
- {0x409E,4,{0x82,0x32,0xB6,0x34,}},
- {0x409F,4,{0x82,0x32,0xB6,0x35,}},
- {0x40A0,4,{0x82,0x32,0xB6,0x36,}},
- {0x40A1,4,{0x82,0x32,0xB6,0x37,}},
- {0x40A2,4,{0x82,0x32,0xB6,0x38,}},
- {0x40A3,4,{0x82,0x32,0xB6,0x39,}},
- {0x40A4,4,{0x82,0x32,0xB7,0x30,}},
- {0x40A5,4,{0x82,0x32,0xB7,0x31,}},
- {0x40A6,4,{0x82,0x32,0xB7,0x32,}},
- {0x40A7,4,{0x82,0x32,0xB7,0x33,}},
- {0x40A8,4,{0x82,0x32,0xB7,0x34,}},
- {0x40A9,4,{0x82,0x32,0xB7,0x35,}},
- {0x40AA,4,{0x82,0x32,0xB7,0x36,}},
- {0x40AB,4,{0x82,0x32,0xB7,0x37,}},
- {0x40AC,4,{0x82,0x32,0xB7,0x38,}},
- {0x40AD,4,{0x82,0x32,0xB7,0x39,}},
- {0x40AE,4,{0x82,0x32,0xB8,0x30,}},
- {0x40AF,4,{0x82,0x32,0xB8,0x31,}},
- {0x40B0,4,{0x82,0x32,0xB8,0x32,}},
- {0x40B1,4,{0x82,0x32,0xB8,0x33,}},
- {0x40B2,4,{0x82,0x32,0xB8,0x34,}},
- {0x40B3,4,{0x82,0x32,0xB8,0x35,}},
- {0x40B4,4,{0x82,0x32,0xB8,0x36,}},
- {0x40B5,4,{0x82,0x32,0xB8,0x37,}},
- {0x40B6,4,{0x82,0x32,0xB8,0x38,}},
- {0x40B7,4,{0x82,0x32,0xB8,0x39,}},
- {0x40B8,4,{0x82,0x32,0xB9,0x30,}},
- {0x40B9,4,{0x82,0x32,0xB9,0x31,}},
- {0x40BA,4,{0x82,0x32,0xB9,0x32,}},
- {0x40BB,4,{0x82,0x32,0xB9,0x33,}},
- {0x40BC,4,{0x82,0x32,0xB9,0x34,}},
- {0x40BD,4,{0x82,0x32,0xB9,0x35,}},
- {0x40BE,4,{0x82,0x32,0xB9,0x36,}},
- {0x40BF,4,{0x82,0x32,0xB9,0x37,}},
- {0x40C0,4,{0x82,0x32,0xB9,0x38,}},
- {0x40C1,4,{0x82,0x32,0xB9,0x39,}},
- {0x40C2,4,{0x82,0x32,0xBA,0x30,}},
- {0x40C3,4,{0x82,0x32,0xBA,0x31,}},
- {0x40C4,4,{0x82,0x32,0xBA,0x32,}},
- {0x40C5,4,{0x82,0x32,0xBA,0x33,}},
- {0x40C6,4,{0x82,0x32,0xBA,0x34,}},
- {0x40C7,4,{0x82,0x32,0xBA,0x35,}},
- {0x40C8,4,{0x82,0x32,0xBA,0x36,}},
- {0x40C9,4,{0x82,0x32,0xBA,0x37,}},
- {0x40CA,4,{0x82,0x32,0xBA,0x38,}},
- {0x40CB,4,{0x82,0x32,0xBA,0x39,}},
- {0x40CC,4,{0x82,0x32,0xBB,0x30,}},
- {0x40CD,4,{0x82,0x32,0xBB,0x31,}},
- {0x40CE,4,{0x82,0x32,0xBB,0x32,}},
- {0x40CF,4,{0x82,0x32,0xBB,0x33,}},
- {0x40D0,4,{0x82,0x32,0xBB,0x34,}},
- {0x40D1,4,{0x82,0x32,0xBB,0x35,}},
- {0x40D2,4,{0x82,0x32,0xBB,0x36,}},
- {0x40D3,4,{0x82,0x32,0xBB,0x37,}},
- {0x40D4,4,{0x82,0x32,0xBB,0x38,}},
- {0x40D5,4,{0x82,0x32,0xBB,0x39,}},
- {0x40D6,4,{0x82,0x32,0xBC,0x30,}},
- {0x40D7,4,{0x82,0x32,0xBC,0x31,}},
- {0x40D8,4,{0x82,0x32,0xBC,0x32,}},
- {0x40D9,4,{0x82,0x32,0xBC,0x33,}},
- {0x40DA,4,{0x82,0x32,0xBC,0x34,}},
- {0x40DB,4,{0x82,0x32,0xBC,0x35,}},
- {0x40DC,4,{0x82,0x32,0xBC,0x36,}},
- {0x40DD,4,{0x82,0x32,0xBC,0x37,}},
- {0x40DE,4,{0x82,0x32,0xBC,0x38,}},
- {0x40DF,4,{0x82,0x32,0xBC,0x39,}},
- {0x40E0,4,{0x82,0x32,0xBD,0x30,}},
- {0x40E1,4,{0x82,0x32,0xBD,0x31,}},
- {0x40E2,4,{0x82,0x32,0xBD,0x32,}},
- {0x40E3,4,{0x82,0x32,0xBD,0x33,}},
- {0x40E4,4,{0x82,0x32,0xBD,0x34,}},
- {0x40E5,4,{0x82,0x32,0xBD,0x35,}},
- {0x40E6,4,{0x82,0x32,0xBD,0x36,}},
- {0x40E7,4,{0x82,0x32,0xBD,0x37,}},
- {0x40E8,4,{0x82,0x32,0xBD,0x38,}},
- {0x40E9,4,{0x82,0x32,0xBD,0x39,}},
- {0x40EA,4,{0x82,0x32,0xBE,0x30,}},
- {0x40EB,4,{0x82,0x32,0xBE,0x31,}},
- {0x40EC,4,{0x82,0x32,0xBE,0x32,}},
- {0x40ED,4,{0x82,0x32,0xBE,0x33,}},
- {0x40EE,4,{0x82,0x32,0xBE,0x34,}},
- {0x40EF,4,{0x82,0x32,0xBE,0x35,}},
- {0x40F0,4,{0x82,0x32,0xBE,0x36,}},
- {0x40F1,4,{0x82,0x32,0xBE,0x37,}},
- {0x40F2,4,{0x82,0x32,0xBE,0x38,}},
- {0x40F3,4,{0x82,0x32,0xBE,0x39,}},
- {0x40F4,4,{0x82,0x32,0xBF,0x30,}},
- {0x40F5,4,{0x82,0x32,0xBF,0x31,}},
- {0x40F6,4,{0x82,0x32,0xBF,0x32,}},
- {0x40F7,4,{0x82,0x32,0xBF,0x33,}},
- {0x40F8,4,{0x82,0x32,0xBF,0x34,}},
- {0x40F9,4,{0x82,0x32,0xBF,0x35,}},
- {0x40FA,4,{0x82,0x32,0xBF,0x36,}},
- {0x40FB,4,{0x82,0x32,0xBF,0x37,}},
- {0x40FC,4,{0x82,0x32,0xBF,0x38,}},
- {0x40FD,4,{0x82,0x32,0xBF,0x39,}},
- {0x40FE,4,{0x82,0x32,0xC0,0x30,}},
- {0x40FF,4,{0x82,0x32,0xC0,0x31,}},
- {0x4100,4,{0x82,0x32,0xC0,0x32,}},
- {0x4101,4,{0x82,0x32,0xC0,0x33,}},
- {0x4102,4,{0x82,0x32,0xC0,0x34,}},
- {0x4103,4,{0x82,0x32,0xC0,0x35,}},
- {0x4104,4,{0x82,0x32,0xC0,0x36,}},
- {0x4105,4,{0x82,0x32,0xC0,0x37,}},
- {0x4106,4,{0x82,0x32,0xC0,0x38,}},
- {0x4107,4,{0x82,0x32,0xC0,0x39,}},
- {0x4108,4,{0x82,0x32,0xC1,0x30,}},
- {0x4109,4,{0x82,0x32,0xC1,0x31,}},
- {0x410A,4,{0x82,0x32,0xC1,0x32,}},
- {0x410B,4,{0x82,0x32,0xC1,0x33,}},
- {0x410C,4,{0x82,0x32,0xC1,0x34,}},
- {0x410D,4,{0x82,0x32,0xC1,0x35,}},
- {0x410E,4,{0x82,0x32,0xC1,0x36,}},
- {0x410F,4,{0x82,0x32,0xC1,0x37,}},
- {0x4110,4,{0x82,0x32,0xC1,0x38,}},
- {0x4111,4,{0x82,0x32,0xC1,0x39,}},
- {0x4112,4,{0x82,0x32,0xC2,0x30,}},
- {0x4113,4,{0x82,0x32,0xC2,0x31,}},
- {0x4114,4,{0x82,0x32,0xC2,0x32,}},
- {0x4115,4,{0x82,0x32,0xC2,0x33,}},
- {0x4116,4,{0x82,0x32,0xC2,0x34,}},
- {0x4117,4,{0x82,0x32,0xC2,0x35,}},
- {0x4118,4,{0x82,0x32,0xC2,0x36,}},
- {0x4119,4,{0x82,0x32,0xC2,0x37,}},
- {0x411A,4,{0x82,0x32,0xC2,0x38,}},
- {0x411B,4,{0x82,0x32,0xC2,0x39,}},
- {0x411C,4,{0x82,0x32,0xC3,0x30,}},
- {0x411D,4,{0x82,0x32,0xC3,0x31,}},
- {0x411E,4,{0x82,0x32,0xC3,0x32,}},
- {0x411F,4,{0x82,0x32,0xC3,0x33,}},
- {0x4120,4,{0x82,0x32,0xC3,0x34,}},
- {0x4121,4,{0x82,0x32,0xC3,0x35,}},
- {0x4122,4,{0x82,0x32,0xC3,0x36,}},
- {0x4123,4,{0x82,0x32,0xC3,0x37,}},
- {0x4124,4,{0x82,0x32,0xC3,0x38,}},
- {0x4125,4,{0x82,0x32,0xC3,0x39,}},
- {0x4126,4,{0x82,0x32,0xC4,0x30,}},
- {0x4127,4,{0x82,0x32,0xC4,0x31,}},
- {0x4128,4,{0x82,0x32,0xC4,0x32,}},
- {0x4129,4,{0x82,0x32,0xC4,0x33,}},
- {0x412A,4,{0x82,0x32,0xC4,0x34,}},
- {0x412B,4,{0x82,0x32,0xC4,0x35,}},
- {0x412C,4,{0x82,0x32,0xC4,0x36,}},
- {0x412D,4,{0x82,0x32,0xC4,0x37,}},
- {0x412E,4,{0x82,0x32,0xC4,0x38,}},
- {0x412F,4,{0x82,0x32,0xC4,0x39,}},
- {0x4130,4,{0x82,0x32,0xC5,0x30,}},
- {0x4131,4,{0x82,0x32,0xC5,0x31,}},
- {0x4132,4,{0x82,0x32,0xC5,0x32,}},
- {0x4133,4,{0x82,0x32,0xC5,0x33,}},
- {0x4134,4,{0x82,0x32,0xC5,0x34,}},
- {0x4135,4,{0x82,0x32,0xC5,0x35,}},
- {0x4136,4,{0x82,0x32,0xC5,0x36,}},
- {0x4137,4,{0x82,0x32,0xC5,0x37,}},
- {0x4138,4,{0x82,0x32,0xC5,0x38,}},
- {0x4139,4,{0x82,0x32,0xC5,0x39,}},
- {0x413A,4,{0x82,0x32,0xC6,0x30,}},
- {0x413B,4,{0x82,0x32,0xC6,0x31,}},
- {0x413C,4,{0x82,0x32,0xC6,0x32,}},
- {0x413D,4,{0x82,0x32,0xC6,0x33,}},
- {0x413E,4,{0x82,0x32,0xC6,0x34,}},
- {0x413F,4,{0x82,0x32,0xC6,0x35,}},
- {0x4140,4,{0x82,0x32,0xC6,0x36,}},
- {0x4141,4,{0x82,0x32,0xC6,0x37,}},
- {0x4142,4,{0x82,0x32,0xC6,0x38,}},
- {0x4143,4,{0x82,0x32,0xC6,0x39,}},
- {0x4144,4,{0x82,0x32,0xC7,0x30,}},
- {0x4145,4,{0x82,0x32,0xC7,0x31,}},
- {0x4146,4,{0x82,0x32,0xC7,0x32,}},
- {0x4147,4,{0x82,0x32,0xC7,0x33,}},
- {0x4148,4,{0x82,0x32,0xC7,0x34,}},
- {0x4149,4,{0x82,0x32,0xC7,0x35,}},
- {0x414A,4,{0x82,0x32,0xC7,0x36,}},
- {0x414B,4,{0x82,0x32,0xC7,0x37,}},
- {0x414C,4,{0x82,0x32,0xC7,0x38,}},
- {0x414D,4,{0x82,0x32,0xC7,0x39,}},
- {0x414E,4,{0x82,0x32,0xC8,0x30,}},
- {0x414F,4,{0x82,0x32,0xC8,0x31,}},
- {0x4150,4,{0x82,0x32,0xC8,0x32,}},
- {0x4151,4,{0x82,0x32,0xC8,0x33,}},
- {0x4152,4,{0x82,0x32,0xC8,0x34,}},
- {0x4153,4,{0x82,0x32,0xC8,0x35,}},
- {0x4154,4,{0x82,0x32,0xC8,0x36,}},
- {0x4155,4,{0x82,0x32,0xC8,0x37,}},
- {0x4156,4,{0x82,0x32,0xC8,0x38,}},
- {0x4157,4,{0x82,0x32,0xC8,0x39,}},
- {0x4158,4,{0x82,0x32,0xC9,0x30,}},
- {0x4159,4,{0x82,0x32,0xC9,0x31,}},
- {0x415A,4,{0x82,0x32,0xC9,0x32,}},
- {0x415B,4,{0x82,0x32,0xC9,0x33,}},
- {0x415C,4,{0x82,0x32,0xC9,0x34,}},
- {0x415D,4,{0x82,0x32,0xC9,0x35,}},
- {0x415E,4,{0x82,0x32,0xC9,0x36,}},
- {0x415F,2,{0xFE,0x70,0x00,0x00,}},
- {0x4337,2,{0xFE,0x72,0x00,0x00,}},
- {0x4338,4,{0x82,0x32,0xF8,0x38,}},
- {0x4339,4,{0x82,0x32,0xF8,0x39,}},
- {0x433A,4,{0x82,0x32,0xF9,0x30,}},
- {0x433B,4,{0x82,0x32,0xF9,0x31,}},
- {0x433C,4,{0x82,0x32,0xF9,0x32,}},
- {0x433D,4,{0x82,0x32,0xF9,0x33,}},
- {0x433E,4,{0x82,0x32,0xF9,0x34,}},
- {0x433F,4,{0x82,0x32,0xF9,0x35,}},
- {0x4340,4,{0x82,0x32,0xF9,0x36,}},
- {0x4341,4,{0x82,0x32,0xF9,0x37,}},
- {0x4342,4,{0x82,0x32,0xF9,0x38,}},
- {0x4343,4,{0x82,0x32,0xF9,0x39,}},
- {0x4344,4,{0x82,0x32,0xFA,0x30,}},
- {0x4345,4,{0x82,0x32,0xFA,0x31,}},
- {0x4346,4,{0x82,0x32,0xFA,0x32,}},
- {0x4347,4,{0x82,0x32,0xFA,0x33,}},
- {0x4348,4,{0x82,0x32,0xFA,0x34,}},
- {0x4349,4,{0x82,0x32,0xFA,0x35,}},
- {0x434A,4,{0x82,0x32,0xFA,0x36,}},
- {0x434B,4,{0x82,0x32,0xFA,0x37,}},
- {0x434C,4,{0x82,0x32,0xFA,0x38,}},
- {0x434D,4,{0x82,0x32,0xFA,0x39,}},
- {0x434E,4,{0x82,0x32,0xFB,0x30,}},
- {0x434F,4,{0x82,0x32,0xFB,0x31,}},
- {0x4350,4,{0x82,0x32,0xFB,0x32,}},
- {0x4351,4,{0x82,0x32,0xFB,0x33,}},
- {0x4352,4,{0x82,0x32,0xFB,0x34,}},
- {0x4353,4,{0x82,0x32,0xFB,0x35,}},
- {0x4354,4,{0x82,0x32,0xFB,0x36,}},
- {0x4355,4,{0x82,0x32,0xFB,0x37,}},
- {0x4356,4,{0x82,0x32,0xFB,0x38,}},
- {0x4357,4,{0x82,0x32,0xFB,0x39,}},
- {0x4358,4,{0x82,0x32,0xFC,0x30,}},
- {0x4359,4,{0x82,0x32,0xFC,0x31,}},
- {0x435A,4,{0x82,0x32,0xFC,0x32,}},
- {0x435B,4,{0x82,0x32,0xFC,0x33,}},
- {0x435C,4,{0x82,0x32,0xFC,0x34,}},
- {0x435D,4,{0x82,0x32,0xFC,0x35,}},
- {0x435E,4,{0x82,0x32,0xFC,0x36,}},
- {0x435F,4,{0x82,0x32,0xFC,0x37,}},
- {0x4360,4,{0x82,0x32,0xFC,0x38,}},
- {0x4361,4,{0x82,0x32,0xFC,0x39,}},
- {0x4362,4,{0x82,0x32,0xFD,0x30,}},
- {0x4363,4,{0x82,0x32,0xFD,0x31,}},
- {0x4364,4,{0x82,0x32,0xFD,0x32,}},
- {0x4365,4,{0x82,0x32,0xFD,0x33,}},
- {0x4366,4,{0x82,0x32,0xFD,0x34,}},
- {0x4367,4,{0x82,0x32,0xFD,0x35,}},
- {0x4368,4,{0x82,0x32,0xFD,0x36,}},
- {0x4369,4,{0x82,0x32,0xFD,0x37,}},
- {0x436A,4,{0x82,0x32,0xFD,0x38,}},
- {0x436B,4,{0x82,0x32,0xFD,0x39,}},
- {0x436C,4,{0x82,0x32,0xFE,0x30,}},
- {0x436D,4,{0x82,0x32,0xFE,0x31,}},
- {0x436E,4,{0x82,0x32,0xFE,0x32,}},
- {0x436F,4,{0x82,0x32,0xFE,0x33,}},
- {0x4370,4,{0x82,0x32,0xFE,0x34,}},
- {0x4371,4,{0x82,0x32,0xFE,0x35,}},
- {0x4372,4,{0x82,0x32,0xFE,0x36,}},
- {0x4373,4,{0x82,0x32,0xFE,0x37,}},
- {0x4374,4,{0x82,0x32,0xFE,0x38,}},
- {0x4375,4,{0x82,0x32,0xFE,0x39,}},
- {0x4376,4,{0x82,0x33,0x81,0x30,}},
- {0x4377,4,{0x82,0x33,0x81,0x31,}},
- {0x4378,4,{0x82,0x33,0x81,0x32,}},
- {0x4379,4,{0x82,0x33,0x81,0x33,}},
- {0x437A,4,{0x82,0x33,0x81,0x34,}},
- {0x437B,4,{0x82,0x33,0x81,0x35,}},
- {0x437C,4,{0x82,0x33,0x81,0x36,}},
- {0x437D,4,{0x82,0x33,0x81,0x37,}},
- {0x437E,4,{0x82,0x33,0x81,0x38,}},
- {0x437F,4,{0x82,0x33,0x81,0x39,}},
- {0x4380,4,{0x82,0x33,0x82,0x30,}},
- {0x4381,4,{0x82,0x33,0x82,0x31,}},
- {0x4382,4,{0x82,0x33,0x82,0x32,}},
- {0x4383,4,{0x82,0x33,0x82,0x33,}},
- {0x4384,4,{0x82,0x33,0x82,0x34,}},
- {0x4385,4,{0x82,0x33,0x82,0x35,}},
- {0x4386,4,{0x82,0x33,0x82,0x36,}},
- {0x4387,4,{0x82,0x33,0x82,0x37,}},
- {0x4388,4,{0x82,0x33,0x82,0x38,}},
- {0x4389,4,{0x82,0x33,0x82,0x39,}},
- {0x438A,4,{0x82,0x33,0x83,0x30,}},
- {0x438B,4,{0x82,0x33,0x83,0x31,}},
- {0x438C,4,{0x82,0x33,0x83,0x32,}},
- {0x438D,4,{0x82,0x33,0x83,0x33,}},
- {0x438E,4,{0x82,0x33,0x83,0x34,}},
- {0x438F,4,{0x82,0x33,0x83,0x35,}},
- {0x4390,4,{0x82,0x33,0x83,0x36,}},
- {0x4391,4,{0x82,0x33,0x83,0x37,}},
- {0x4392,4,{0x82,0x33,0x83,0x38,}},
- {0x4393,4,{0x82,0x33,0x83,0x39,}},
- {0x4394,4,{0x82,0x33,0x84,0x30,}},
- {0x4395,4,{0x82,0x33,0x84,0x31,}},
- {0x4396,4,{0x82,0x33,0x84,0x32,}},
- {0x4397,4,{0x82,0x33,0x84,0x33,}},
- {0x4398,4,{0x82,0x33,0x84,0x34,}},
- {0x4399,4,{0x82,0x33,0x84,0x35,}},
- {0x439A,4,{0x82,0x33,0x84,0x36,}},
- {0x439B,4,{0x82,0x33,0x84,0x37,}},
- {0x439C,4,{0x82,0x33,0x84,0x38,}},
- {0x439D,4,{0x82,0x33,0x84,0x39,}},
- {0x439E,4,{0x82,0x33,0x85,0x30,}},
- {0x439F,4,{0x82,0x33,0x85,0x31,}},
- {0x43A0,4,{0x82,0x33,0x85,0x32,}},
- {0x43A1,4,{0x82,0x33,0x85,0x33,}},
- {0x43A2,4,{0x82,0x33,0x85,0x34,}},
- {0x43A3,4,{0x82,0x33,0x85,0x35,}},
- {0x43A4,4,{0x82,0x33,0x85,0x36,}},
- {0x43A5,4,{0x82,0x33,0x85,0x37,}},
- {0x43A6,4,{0x82,0x33,0x85,0x38,}},
- {0x43A7,4,{0x82,0x33,0x85,0x39,}},
- {0x43A8,4,{0x82,0x33,0x86,0x30,}},
- {0x43A9,4,{0x82,0x33,0x86,0x31,}},
- {0x43AA,4,{0x82,0x33,0x86,0x32,}},
- {0x43AB,4,{0x82,0x33,0x86,0x33,}},
- {0x43AC,2,{0xFE,0x78,0x00,0x00,}},
- {0x43AD,4,{0x82,0x33,0x86,0x34,}},
- {0x43AE,4,{0x82,0x33,0x86,0x35,}},
- {0x43AF,4,{0x82,0x33,0x86,0x36,}},
- {0x43B0,4,{0x82,0x33,0x86,0x37,}},
- {0x43B1,2,{0xFE,0x77,0x00,0x00,}},
- {0x43B2,4,{0x82,0x33,0x86,0x38,}},
- {0x43B3,4,{0x82,0x33,0x86,0x39,}},
- {0x43B4,4,{0x82,0x33,0x87,0x30,}},
- {0x43B5,4,{0x82,0x33,0x87,0x31,}},
- {0x43B6,4,{0x82,0x33,0x87,0x32,}},
- {0x43B7,4,{0x82,0x33,0x87,0x33,}},
- {0x43B8,4,{0x82,0x33,0x87,0x34,}},
- {0x43B9,4,{0x82,0x33,0x87,0x35,}},
- {0x43BA,4,{0x82,0x33,0x87,0x36,}},
- {0x43BB,4,{0x82,0x33,0x87,0x37,}},
- {0x43BC,4,{0x82,0x33,0x87,0x38,}},
- {0x43BD,4,{0x82,0x33,0x87,0x39,}},
- {0x43BE,4,{0x82,0x33,0x88,0x30,}},
- {0x43BF,4,{0x82,0x33,0x88,0x31,}},
- {0x43C0,4,{0x82,0x33,0x88,0x32,}},
- {0x43C1,4,{0x82,0x33,0x88,0x33,}},
- {0x43C2,4,{0x82,0x33,0x88,0x34,}},
- {0x43C3,4,{0x82,0x33,0x88,0x35,}},
- {0x43C4,4,{0x82,0x33,0x88,0x36,}},
- {0x43C5,4,{0x82,0x33,0x88,0x37,}},
- {0x43C6,4,{0x82,0x33,0x88,0x38,}},
- {0x43C7,4,{0x82,0x33,0x88,0x39,}},
- {0x43C8,4,{0x82,0x33,0x89,0x30,}},
- {0x43C9,4,{0x82,0x33,0x89,0x31,}},
- {0x43CA,4,{0x82,0x33,0x89,0x32,}},
- {0x43CB,4,{0x82,0x33,0x89,0x33,}},
- {0x43CC,4,{0x82,0x33,0x89,0x34,}},
- {0x43CD,4,{0x82,0x33,0x89,0x35,}},
- {0x43CE,4,{0x82,0x33,0x89,0x36,}},
- {0x43CF,4,{0x82,0x33,0x89,0x37,}},
- {0x43D0,4,{0x82,0x33,0x89,0x38,}},
- {0x43D1,4,{0x82,0x33,0x89,0x39,}},
- {0x43D2,4,{0x82,0x33,0x8A,0x30,}},
- {0x43D3,4,{0x82,0x33,0x8A,0x31,}},
- {0x43D4,4,{0x82,0x33,0x8A,0x32,}},
- {0x43D5,4,{0x82,0x33,0x8A,0x33,}},
- {0x43D6,4,{0x82,0x33,0x8A,0x34,}},
- {0x43D7,4,{0x82,0x33,0x8A,0x35,}},
- {0x43D8,4,{0x82,0x33,0x8A,0x36,}},
- {0x43D9,4,{0x82,0x33,0x8A,0x37,}},
- {0x43DA,4,{0x82,0x33,0x8A,0x38,}},
- {0x43DB,4,{0x82,0x33,0x8A,0x39,}},
- {0x43DC,4,{0x82,0x33,0x8B,0x30,}},
- {0x43DD,2,{0xFE,0x7A,0x00,0x00,}},
- {0x43DE,4,{0x82,0x33,0x8B,0x31,}},
- {0x43DF,4,{0x82,0x33,0x8B,0x32,}},
- {0x43E0,4,{0x82,0x33,0x8B,0x33,}},
- {0x43E1,4,{0x82,0x33,0x8B,0x34,}},
- {0x43E2,4,{0x82,0x33,0x8B,0x35,}},
- {0x43E3,4,{0x82,0x33,0x8B,0x36,}},
- {0x43E4,4,{0x82,0x33,0x8B,0x37,}},
- {0x43E5,4,{0x82,0x33,0x8B,0x38,}},
- {0x43E6,4,{0x82,0x33,0x8B,0x39,}},
- {0x43E7,4,{0x82,0x33,0x8C,0x30,}},
- {0x43E8,4,{0x82,0x33,0x8C,0x31,}},
- {0x43E9,4,{0x82,0x33,0x8C,0x32,}},
- {0x43EA,4,{0x82,0x33,0x8C,0x33,}},
- {0x43EB,4,{0x82,0x33,0x8C,0x34,}},
- {0x43EC,4,{0x82,0x33,0x8C,0x35,}},
- {0x43ED,4,{0x82,0x33,0x8C,0x36,}},
- {0x43EE,4,{0x82,0x33,0x8C,0x37,}},
- {0x43EF,4,{0x82,0x33,0x8C,0x38,}},
- {0x43F0,4,{0x82,0x33,0x8C,0x39,}},
- {0x43F1,4,{0x82,0x33,0x8D,0x30,}},
- {0x43F2,4,{0x82,0x33,0x8D,0x31,}},
- {0x43F3,4,{0x82,0x33,0x8D,0x32,}},
- {0x43F4,4,{0x82,0x33,0x8D,0x33,}},
- {0x43F5,4,{0x82,0x33,0x8D,0x34,}},
- {0x43F6,4,{0x82,0x33,0x8D,0x35,}},
- {0x43F7,4,{0x82,0x33,0x8D,0x36,}},
- {0x43F8,4,{0x82,0x33,0x8D,0x37,}},
- {0x43F9,4,{0x82,0x33,0x8D,0x38,}},
- {0x43FA,4,{0x82,0x33,0x8D,0x39,}},
- {0x43FB,4,{0x82,0x33,0x8E,0x30,}},
- {0x43FC,4,{0x82,0x33,0x8E,0x31,}},
- {0x43FD,4,{0x82,0x33,0x8E,0x32,}},
- {0x43FE,4,{0x82,0x33,0x8E,0x33,}},
- {0x43FF,4,{0x82,0x33,0x8E,0x34,}},
- {0x4400,4,{0x82,0x33,0x8E,0x35,}},
- {0x4401,4,{0x82,0x33,0x8E,0x36,}},
- {0x4402,4,{0x82,0x33,0x8E,0x37,}},
- {0x4403,4,{0x82,0x33,0x8E,0x38,}},
- {0x4404,4,{0x82,0x33,0x8E,0x39,}},
- {0x4405,4,{0x82,0x33,0x8F,0x30,}},
- {0x4406,4,{0x82,0x33,0x8F,0x31,}},
- {0x4407,4,{0x82,0x33,0x8F,0x32,}},
- {0x4408,4,{0x82,0x33,0x8F,0x33,}},
- {0x4409,4,{0x82,0x33,0x8F,0x34,}},
- {0x440A,4,{0x82,0x33,0x8F,0x35,}},
- {0x440B,4,{0x82,0x33,0x8F,0x36,}},
- {0x440C,4,{0x82,0x33,0x8F,0x37,}},
- {0x440D,4,{0x82,0x33,0x8F,0x38,}},
- {0x440E,4,{0x82,0x33,0x8F,0x39,}},
- {0x440F,4,{0x82,0x33,0x90,0x30,}},
- {0x4410,4,{0x82,0x33,0x90,0x31,}},
- {0x4411,4,{0x82,0x33,0x90,0x32,}},
- {0x4412,4,{0x82,0x33,0x90,0x33,}},
- {0x4413,4,{0x82,0x33,0x90,0x34,}},
- {0x4414,4,{0x82,0x33,0x90,0x35,}},
- {0x4415,4,{0x82,0x33,0x90,0x36,}},
- {0x4416,4,{0x82,0x33,0x90,0x37,}},
- {0x4417,4,{0x82,0x33,0x90,0x38,}},
- {0x4418,4,{0x82,0x33,0x90,0x39,}},
- {0x4419,4,{0x82,0x33,0x91,0x30,}},
- {0x441A,4,{0x82,0x33,0x91,0x31,}},
- {0x441B,4,{0x82,0x33,0x91,0x32,}},
- {0x441C,4,{0x82,0x33,0x91,0x33,}},
- {0x441D,4,{0x82,0x33,0x91,0x34,}},
- {0x441E,4,{0x82,0x33,0x91,0x35,}},
- {0x441F,4,{0x82,0x33,0x91,0x36,}},
- {0x4420,4,{0x82,0x33,0x91,0x37,}},
- {0x4421,4,{0x82,0x33,0x91,0x38,}},
- {0x4422,4,{0x82,0x33,0x91,0x39,}},
- {0x4423,4,{0x82,0x33,0x92,0x30,}},
- {0x4424,4,{0x82,0x33,0x92,0x31,}},
- {0x4425,4,{0x82,0x33,0x92,0x32,}},
- {0x4426,4,{0x82,0x33,0x92,0x33,}},
- {0x4427,4,{0x82,0x33,0x92,0x34,}},
- {0x4428,4,{0x82,0x33,0x92,0x35,}},
- {0x4429,4,{0x82,0x33,0x92,0x36,}},
- {0x442A,4,{0x82,0x33,0x92,0x37,}},
- {0x442B,4,{0x82,0x33,0x92,0x38,}},
- {0x442C,4,{0x82,0x33,0x92,0x39,}},
- {0x442D,4,{0x82,0x33,0x93,0x30,}},
- {0x442E,4,{0x82,0x33,0x93,0x31,}},
- {0x442F,4,{0x82,0x33,0x93,0x32,}},
- {0x4430,4,{0x82,0x33,0x93,0x33,}},
- {0x4431,4,{0x82,0x33,0x93,0x34,}},
- {0x4432,4,{0x82,0x33,0x93,0x35,}},
- {0x4433,4,{0x82,0x33,0x93,0x36,}},
- {0x4434,4,{0x82,0x33,0x93,0x37,}},
- {0x4435,4,{0x82,0x33,0x93,0x38,}},
- {0x4436,4,{0x82,0x33,0x93,0x39,}},
- {0x4437,4,{0x82,0x33,0x94,0x30,}},
- {0x4438,4,{0x82,0x33,0x94,0x31,}},
- {0x4439,4,{0x82,0x33,0x94,0x32,}},
- {0x443A,4,{0x82,0x33,0x94,0x33,}},
- {0x443B,4,{0x82,0x33,0x94,0x34,}},
- {0x443C,4,{0x82,0x33,0x94,0x35,}},
- {0x443D,4,{0x82,0x33,0x94,0x36,}},
- {0x443E,4,{0x82,0x33,0x94,0x37,}},
- {0x443F,4,{0x82,0x33,0x94,0x38,}},
- {0x4440,4,{0x82,0x33,0x94,0x39,}},
- {0x4441,4,{0x82,0x33,0x95,0x30,}},
- {0x4442,4,{0x82,0x33,0x95,0x31,}},
- {0x4443,4,{0x82,0x33,0x95,0x32,}},
- {0x4444,4,{0x82,0x33,0x95,0x33,}},
- {0x4445,4,{0x82,0x33,0x95,0x34,}},
- {0x4446,4,{0x82,0x33,0x95,0x35,}},
- {0x4447,4,{0x82,0x33,0x95,0x36,}},
- {0x4448,4,{0x82,0x33,0x95,0x37,}},
- {0x4449,4,{0x82,0x33,0x95,0x38,}},
- {0x444A,4,{0x82,0x33,0x95,0x39,}},
- {0x444B,4,{0x82,0x33,0x96,0x30,}},
- {0x444C,4,{0x82,0x33,0x96,0x31,}},
- {0x444D,4,{0x82,0x33,0x96,0x32,}},
- {0x444E,4,{0x82,0x33,0x96,0x33,}},
- {0x444F,4,{0x82,0x33,0x96,0x34,}},
- {0x4450,4,{0x82,0x33,0x96,0x35,}},
- {0x4451,4,{0x82,0x33,0x96,0x36,}},
- {0x4452,4,{0x82,0x33,0x96,0x37,}},
- {0x4453,4,{0x82,0x33,0x96,0x38,}},
- {0x4454,4,{0x82,0x33,0x96,0x39,}},
- {0x4455,4,{0x82,0x33,0x97,0x30,}},
- {0x4456,4,{0x82,0x33,0x97,0x31,}},
- {0x4457,4,{0x82,0x33,0x97,0x32,}},
- {0x4458,4,{0x82,0x33,0x97,0x33,}},
- {0x4459,4,{0x82,0x33,0x97,0x34,}},
- {0x445A,4,{0x82,0x33,0x97,0x35,}},
- {0x445B,4,{0x82,0x33,0x97,0x36,}},
- {0x445C,4,{0x82,0x33,0x97,0x37,}},
- {0x445D,4,{0x82,0x33,0x97,0x38,}},
- {0x445E,4,{0x82,0x33,0x97,0x39,}},
- {0x445F,4,{0x82,0x33,0x98,0x30,}},
- {0x4460,4,{0x82,0x33,0x98,0x31,}},
- {0x4461,4,{0x82,0x33,0x98,0x32,}},
- {0x4462,4,{0x82,0x33,0x98,0x33,}},
- {0x4463,4,{0x82,0x33,0x98,0x34,}},
- {0x4464,4,{0x82,0x33,0x98,0x35,}},
- {0x4465,4,{0x82,0x33,0x98,0x36,}},
- {0x4466,4,{0x82,0x33,0x98,0x37,}},
- {0x4467,4,{0x82,0x33,0x98,0x38,}},
- {0x4468,4,{0x82,0x33,0x98,0x39,}},
- {0x4469,4,{0x82,0x33,0x99,0x30,}},
- {0x446A,4,{0x82,0x33,0x99,0x31,}},
- {0x446B,4,{0x82,0x33,0x99,0x32,}},
- {0x446C,4,{0x82,0x33,0x99,0x33,}},
- {0x446D,4,{0x82,0x33,0x99,0x34,}},
- {0x446E,4,{0x82,0x33,0x99,0x35,}},
- {0x446F,4,{0x82,0x33,0x99,0x36,}},
- {0x4470,4,{0x82,0x33,0x99,0x37,}},
- {0x4471,4,{0x82,0x33,0x99,0x38,}},
- {0x4472,4,{0x82,0x33,0x99,0x39,}},
- {0x4473,4,{0x82,0x33,0x9A,0x30,}},
- {0x4474,4,{0x82,0x33,0x9A,0x31,}},
- {0x4475,4,{0x82,0x33,0x9A,0x32,}},
- {0x4476,4,{0x82,0x33,0x9A,0x33,}},
- {0x4477,4,{0x82,0x33,0x9A,0x34,}},
- {0x4478,4,{0x82,0x33,0x9A,0x35,}},
- {0x4479,4,{0x82,0x33,0x9A,0x36,}},
- {0x447A,4,{0x82,0x33,0x9A,0x37,}},
- {0x447B,4,{0x82,0x33,0x9A,0x38,}},
- {0x447C,4,{0x82,0x33,0x9A,0x39,}},
- {0x447D,4,{0x82,0x33,0x9B,0x30,}},
- {0x447E,4,{0x82,0x33,0x9B,0x31,}},
- {0x447F,4,{0x82,0x33,0x9B,0x32,}},
- {0x4480,4,{0x82,0x33,0x9B,0x33,}},
- {0x4481,4,{0x82,0x33,0x9B,0x34,}},
- {0x4482,4,{0x82,0x33,0x9B,0x35,}},
- {0x4483,4,{0x82,0x33,0x9B,0x36,}},
- {0x4484,4,{0x82,0x33,0x9B,0x37,}},
- {0x4485,4,{0x82,0x33,0x9B,0x38,}},
- {0x4486,4,{0x82,0x33,0x9B,0x39,}},
- {0x4487,4,{0x82,0x33,0x9C,0x30,}},
- {0x4488,4,{0x82,0x33,0x9C,0x31,}},
- {0x4489,4,{0x82,0x33,0x9C,0x32,}},
- {0x448A,4,{0x82,0x33,0x9C,0x33,}},
- {0x448B,4,{0x82,0x33,0x9C,0x34,}},
- {0x448C,4,{0x82,0x33,0x9C,0x35,}},
- {0x448D,4,{0x82,0x33,0x9C,0x36,}},
- {0x448E,4,{0x82,0x33,0x9C,0x37,}},
- {0x448F,4,{0x82,0x33,0x9C,0x38,}},
- {0x4490,4,{0x82,0x33,0x9C,0x39,}},
- {0x4491,4,{0x82,0x33,0x9D,0x30,}},
- {0x4492,4,{0x82,0x33,0x9D,0x31,}},
- {0x4493,4,{0x82,0x33,0x9D,0x32,}},
- {0x4494,4,{0x82,0x33,0x9D,0x33,}},
- {0x4495,4,{0x82,0x33,0x9D,0x34,}},
- {0x4496,4,{0x82,0x33,0x9D,0x35,}},
- {0x4497,4,{0x82,0x33,0x9D,0x36,}},
- {0x4498,4,{0x82,0x33,0x9D,0x37,}},
- {0x4499,4,{0x82,0x33,0x9D,0x38,}},
- {0x449A,4,{0x82,0x33,0x9D,0x39,}},
- {0x449B,4,{0x82,0x33,0x9E,0x30,}},
- {0x449C,4,{0x82,0x33,0x9E,0x31,}},
- {0x449D,4,{0x82,0x33,0x9E,0x32,}},
- {0x449E,4,{0x82,0x33,0x9E,0x33,}},
- {0x449F,4,{0x82,0x33,0x9E,0x34,}},
- {0x44A0,4,{0x82,0x33,0x9E,0x35,}},
- {0x44A1,4,{0x82,0x33,0x9E,0x36,}},
- {0x44A2,4,{0x82,0x33,0x9E,0x37,}},
- {0x44A3,4,{0x82,0x33,0x9E,0x38,}},
- {0x44A4,4,{0x82,0x33,0x9E,0x39,}},
- {0x44A5,4,{0x82,0x33,0x9F,0x30,}},
- {0x44A6,4,{0x82,0x33,0x9F,0x31,}},
- {0x44A7,4,{0x82,0x33,0x9F,0x32,}},
- {0x44A8,4,{0x82,0x33,0x9F,0x33,}},
- {0x44A9,4,{0x82,0x33,0x9F,0x34,}},
- {0x44AA,4,{0x82,0x33,0x9F,0x35,}},
- {0x44AB,4,{0x82,0x33,0x9F,0x36,}},
- {0x44AC,4,{0x82,0x33,0x9F,0x37,}},
- {0x44AD,4,{0x82,0x33,0x9F,0x38,}},
- {0x44AE,4,{0x82,0x33,0x9F,0x39,}},
- {0x44AF,4,{0x82,0x33,0xA0,0x30,}},
- {0x44B0,4,{0x82,0x33,0xA0,0x31,}},
- {0x44B1,4,{0x82,0x33,0xA0,0x32,}},
- {0x44B2,4,{0x82,0x33,0xA0,0x33,}},
- {0x44B3,4,{0x82,0x33,0xA0,0x34,}},
- {0x44B4,4,{0x82,0x33,0xA0,0x35,}},
- {0x44B5,4,{0x82,0x33,0xA0,0x36,}},
- {0x44B6,4,{0x82,0x33,0xA0,0x37,}},
- {0x44B7,4,{0x82,0x33,0xA0,0x38,}},
- {0x44B8,4,{0x82,0x33,0xA0,0x39,}},
- {0x44B9,4,{0x82,0x33,0xA1,0x30,}},
- {0x44BA,4,{0x82,0x33,0xA1,0x31,}},
- {0x44BB,4,{0x82,0x33,0xA1,0x32,}},
- {0x44BC,4,{0x82,0x33,0xA1,0x33,}},
- {0x44BD,4,{0x82,0x33,0xA1,0x34,}},
- {0x44BE,4,{0x82,0x33,0xA1,0x35,}},
- {0x44BF,4,{0x82,0x33,0xA1,0x36,}},
- {0x44C0,4,{0x82,0x33,0xA1,0x37,}},
- {0x44C1,4,{0x82,0x33,0xA1,0x38,}},
- {0x44C2,4,{0x82,0x33,0xA1,0x39,}},
- {0x44C3,4,{0x82,0x33,0xA2,0x30,}},
- {0x44C4,4,{0x82,0x33,0xA2,0x31,}},
- {0x44C5,4,{0x82,0x33,0xA2,0x32,}},
- {0x44C6,4,{0x82,0x33,0xA2,0x33,}},
- {0x44C7,4,{0x82,0x33,0xA2,0x34,}},
- {0x44C8,4,{0x82,0x33,0xA2,0x35,}},
- {0x44C9,4,{0x82,0x33,0xA2,0x36,}},
- {0x44CA,4,{0x82,0x33,0xA2,0x37,}},
- {0x44CB,4,{0x82,0x33,0xA2,0x38,}},
- {0x44CC,4,{0x82,0x33,0xA2,0x39,}},
- {0x44CD,4,{0x82,0x33,0xA3,0x30,}},
- {0x44CE,4,{0x82,0x33,0xA3,0x31,}},
- {0x44CF,4,{0x82,0x33,0xA3,0x32,}},
- {0x44D0,4,{0x82,0x33,0xA3,0x33,}},
- {0x44D1,4,{0x82,0x33,0xA3,0x34,}},
- {0x44D2,4,{0x82,0x33,0xA3,0x35,}},
- {0x44D3,4,{0x82,0x33,0xA3,0x36,}},
- {0x44D4,4,{0x82,0x33,0xA3,0x37,}},
- {0x44D5,4,{0x82,0x33,0xA3,0x38,}},
- {0x44D6,2,{0xFE,0x7B,0x00,0x00,}},
- {0x464C,2,{0xFE,0x7D,0x00,0x00,}},
- {0x464D,4,{0x82,0x33,0xC9,0x32,}},
- {0x464E,4,{0x82,0x33,0xC9,0x33,}},
- {0x464F,4,{0x82,0x33,0xC9,0x34,}},
- {0x4650,4,{0x82,0x33,0xC9,0x35,}},
- {0x4651,4,{0x82,0x33,0xC9,0x36,}},
- {0x4652,4,{0x82,0x33,0xC9,0x37,}},
- {0x4653,4,{0x82,0x33,0xC9,0x38,}},
- {0x4654,4,{0x82,0x33,0xC9,0x39,}},
- {0x4655,4,{0x82,0x33,0xCA,0x30,}},
- {0x4656,4,{0x82,0x33,0xCA,0x31,}},
- {0x4657,4,{0x82,0x33,0xCA,0x32,}},
- {0x4658,4,{0x82,0x33,0xCA,0x33,}},
- {0x4659,4,{0x82,0x33,0xCA,0x34,}},
- {0x465A,4,{0x82,0x33,0xCA,0x35,}},
- {0x465B,4,{0x82,0x33,0xCA,0x36,}},
- {0x465C,4,{0x82,0x33,0xCA,0x37,}},
- {0x465D,4,{0x82,0x33,0xCA,0x38,}},
- {0x465E,4,{0x82,0x33,0xCA,0x39,}},
- {0x465F,4,{0x82,0x33,0xCB,0x30,}},
- {0x4660,4,{0x82,0x33,0xCB,0x31,}},
- {0x4661,2,{0xFE,0x7C,0x00,0x00,}},
- {0x4662,4,{0x82,0x33,0xCB,0x32,}},
- {0x4663,4,{0x82,0x33,0xCB,0x33,}},
- {0x4664,4,{0x82,0x33,0xCB,0x34,}},
- {0x4665,4,{0x82,0x33,0xCB,0x35,}},
- {0x4666,4,{0x82,0x33,0xCB,0x36,}},
- {0x4667,4,{0x82,0x33,0xCB,0x37,}},
- {0x4668,4,{0x82,0x33,0xCB,0x38,}},
- {0x4669,4,{0x82,0x33,0xCB,0x39,}},
- {0x466A,4,{0x82,0x33,0xCC,0x30,}},
- {0x466B,4,{0x82,0x33,0xCC,0x31,}},
- {0x466C,4,{0x82,0x33,0xCC,0x32,}},
- {0x466D,4,{0x82,0x33,0xCC,0x33,}},
- {0x466E,4,{0x82,0x33,0xCC,0x34,}},
- {0x466F,4,{0x82,0x33,0xCC,0x35,}},
- {0x4670,4,{0x82,0x33,0xCC,0x36,}},
- {0x4671,4,{0x82,0x33,0xCC,0x37,}},
- {0x4672,4,{0x82,0x33,0xCC,0x38,}},
- {0x4673,4,{0x82,0x33,0xCC,0x39,}},
- {0x4674,4,{0x82,0x33,0xCD,0x30,}},
- {0x4675,4,{0x82,0x33,0xCD,0x31,}},
- {0x4676,4,{0x82,0x33,0xCD,0x32,}},
- {0x4677,4,{0x82,0x33,0xCD,0x33,}},
- {0x4678,4,{0x82,0x33,0xCD,0x34,}},
- {0x4679,4,{0x82,0x33,0xCD,0x35,}},
- {0x467A,4,{0x82,0x33,0xCD,0x36,}},
- {0x467B,4,{0x82,0x33,0xCD,0x37,}},
- {0x467C,4,{0x82,0x33,0xCD,0x38,}},
- {0x467D,4,{0x82,0x33,0xCD,0x39,}},
- {0x467E,4,{0x82,0x33,0xCE,0x30,}},
- {0x467F,4,{0x82,0x33,0xCE,0x31,}},
- {0x4680,4,{0x82,0x33,0xCE,0x32,}},
- {0x4681,4,{0x82,0x33,0xCE,0x33,}},
- {0x4682,4,{0x82,0x33,0xCE,0x34,}},
- {0x4683,4,{0x82,0x33,0xCE,0x35,}},
- {0x4684,4,{0x82,0x33,0xCE,0x36,}},
- {0x4685,4,{0x82,0x33,0xCE,0x37,}},
- {0x4686,4,{0x82,0x33,0xCE,0x38,}},
- {0x4687,4,{0x82,0x33,0xCE,0x39,}},
- {0x4688,4,{0x82,0x33,0xCF,0x30,}},
- {0x4689,4,{0x82,0x33,0xCF,0x31,}},
- {0x468A,4,{0x82,0x33,0xCF,0x32,}},
- {0x468B,4,{0x82,0x33,0xCF,0x33,}},
- {0x468C,4,{0x82,0x33,0xCF,0x34,}},
- {0x468D,4,{0x82,0x33,0xCF,0x35,}},
- {0x468E,4,{0x82,0x33,0xCF,0x36,}},
- {0x468F,4,{0x82,0x33,0xCF,0x37,}},
- {0x4690,4,{0x82,0x33,0xCF,0x38,}},
- {0x4691,4,{0x82,0x33,0xCF,0x39,}},
- {0x4692,4,{0x82,0x33,0xD0,0x30,}},
- {0x4693,4,{0x82,0x33,0xD0,0x31,}},
- {0x4694,4,{0x82,0x33,0xD0,0x32,}},
- {0x4695,4,{0x82,0x33,0xD0,0x33,}},
- {0x4696,4,{0x82,0x33,0xD0,0x34,}},
- {0x4697,4,{0x82,0x33,0xD0,0x35,}},
- {0x4698,4,{0x82,0x33,0xD0,0x36,}},
- {0x4699,4,{0x82,0x33,0xD0,0x37,}},
- {0x469A,4,{0x82,0x33,0xD0,0x38,}},
- {0x469B,4,{0x82,0x33,0xD0,0x39,}},
- {0x469C,4,{0x82,0x33,0xD1,0x30,}},
- {0x469D,4,{0x82,0x33,0xD1,0x31,}},
- {0x469E,4,{0x82,0x33,0xD1,0x32,}},
- {0x469F,4,{0x82,0x33,0xD1,0x33,}},
- {0x46A0,4,{0x82,0x33,0xD1,0x34,}},
- {0x46A1,4,{0x82,0x33,0xD1,0x35,}},
- {0x46A2,4,{0x82,0x33,0xD1,0x36,}},
- {0x46A3,4,{0x82,0x33,0xD1,0x37,}},
- {0x46A4,4,{0x82,0x33,0xD1,0x38,}},
- {0x46A5,4,{0x82,0x33,0xD1,0x39,}},
- {0x46A6,4,{0x82,0x33,0xD2,0x30,}},
- {0x46A7,4,{0x82,0x33,0xD2,0x31,}},
- {0x46A8,4,{0x82,0x33,0xD2,0x32,}},
- {0x46A9,4,{0x82,0x33,0xD2,0x33,}},
- {0x46AA,4,{0x82,0x33,0xD2,0x34,}},
- {0x46AB,4,{0x82,0x33,0xD2,0x35,}},
- {0x46AC,4,{0x82,0x33,0xD2,0x36,}},
- {0x46AD,4,{0x82,0x33,0xD2,0x37,}},
- {0x46AE,4,{0x82,0x33,0xD2,0x38,}},
- {0x46AF,4,{0x82,0x33,0xD2,0x39,}},
- {0x46B0,4,{0x82,0x33,0xD3,0x30,}},
- {0x46B1,4,{0x82,0x33,0xD3,0x31,}},
- {0x46B2,4,{0x82,0x33,0xD3,0x32,}},
- {0x46B3,4,{0x82,0x33,0xD3,0x33,}},
- {0x46B4,4,{0x82,0x33,0xD3,0x34,}},
- {0x46B5,4,{0x82,0x33,0xD3,0x35,}},
- {0x46B6,4,{0x82,0x33,0xD3,0x36,}},
- {0x46B7,4,{0x82,0x33,0xD3,0x37,}},
- {0x46B8,4,{0x82,0x33,0xD3,0x38,}},
- {0x46B9,4,{0x82,0x33,0xD3,0x39,}},
- {0x46BA,4,{0x82,0x33,0xD4,0x30,}},
- {0x46BB,4,{0x82,0x33,0xD4,0x31,}},
- {0x46BC,4,{0x82,0x33,0xD4,0x32,}},
- {0x46BD,4,{0x82,0x33,0xD4,0x33,}},
- {0x46BE,4,{0x82,0x33,0xD4,0x34,}},
- {0x46BF,4,{0x82,0x33,0xD4,0x35,}},
- {0x46C0,4,{0x82,0x33,0xD4,0x36,}},
- {0x46C1,4,{0x82,0x33,0xD4,0x37,}},
- {0x46C2,4,{0x82,0x33,0xD4,0x38,}},
- {0x46C3,4,{0x82,0x33,0xD4,0x39,}},
- {0x46C4,4,{0x82,0x33,0xD5,0x30,}},
- {0x46C5,4,{0x82,0x33,0xD5,0x31,}},
- {0x46C6,4,{0x82,0x33,0xD5,0x32,}},
- {0x46C7,4,{0x82,0x33,0xD5,0x33,}},
- {0x46C8,4,{0x82,0x33,0xD5,0x34,}},
- {0x46C9,4,{0x82,0x33,0xD5,0x35,}},
- {0x46CA,4,{0x82,0x33,0xD5,0x36,}},
- {0x46CB,4,{0x82,0x33,0xD5,0x37,}},
- {0x46CC,4,{0x82,0x33,0xD5,0x38,}},
- {0x46CD,4,{0x82,0x33,0xD5,0x39,}},
- {0x46CE,4,{0x82,0x33,0xD6,0x30,}},
- {0x46CF,4,{0x82,0x33,0xD6,0x31,}},
- {0x46D0,4,{0x82,0x33,0xD6,0x32,}},
- {0x46D1,4,{0x82,0x33,0xD6,0x33,}},
- {0x46D2,4,{0x82,0x33,0xD6,0x34,}},
- {0x46D3,4,{0x82,0x33,0xD6,0x35,}},
- {0x46D4,4,{0x82,0x33,0xD6,0x36,}},
- {0x46D5,4,{0x82,0x33,0xD6,0x37,}},
- {0x46D6,4,{0x82,0x33,0xD6,0x38,}},
- {0x46D7,4,{0x82,0x33,0xD6,0x39,}},
- {0x46D8,4,{0x82,0x33,0xD7,0x30,}},
- {0x46D9,4,{0x82,0x33,0xD7,0x31,}},
- {0x46DA,4,{0x82,0x33,0xD7,0x32,}},
- {0x46DB,4,{0x82,0x33,0xD7,0x33,}},
- {0x46DC,4,{0x82,0x33,0xD7,0x34,}},
- {0x46DD,4,{0x82,0x33,0xD7,0x35,}},
- {0x46DE,4,{0x82,0x33,0xD7,0x36,}},
- {0x46DF,4,{0x82,0x33,0xD7,0x37,}},
- {0x46E0,4,{0x82,0x33,0xD7,0x38,}},
- {0x46E1,4,{0x82,0x33,0xD7,0x39,}},
- {0x46E2,4,{0x82,0x33,0xD8,0x30,}},
- {0x46E3,4,{0x82,0x33,0xD8,0x31,}},
- {0x46E4,4,{0x82,0x33,0xD8,0x32,}},
- {0x46E5,4,{0x82,0x33,0xD8,0x33,}},
- {0x46E6,4,{0x82,0x33,0xD8,0x34,}},
- {0x46E7,4,{0x82,0x33,0xD8,0x35,}},
- {0x46E8,4,{0x82,0x33,0xD8,0x36,}},
- {0x46E9,4,{0x82,0x33,0xD8,0x37,}},
- {0x46EA,4,{0x82,0x33,0xD8,0x38,}},
- {0x46EB,4,{0x82,0x33,0xD8,0x39,}},
- {0x46EC,4,{0x82,0x33,0xD9,0x30,}},
- {0x46ED,4,{0x82,0x33,0xD9,0x31,}},
- {0x46EE,4,{0x82,0x33,0xD9,0x32,}},
- {0x46EF,4,{0x82,0x33,0xD9,0x33,}},
- {0x46F0,4,{0x82,0x33,0xD9,0x34,}},
- {0x46F1,4,{0x82,0x33,0xD9,0x35,}},
- {0x46F2,4,{0x82,0x33,0xD9,0x36,}},
- {0x46F3,4,{0x82,0x33,0xD9,0x37,}},
- {0x46F4,4,{0x82,0x33,0xD9,0x38,}},
- {0x46F5,4,{0x82,0x33,0xD9,0x39,}},
- {0x46F6,4,{0x82,0x33,0xDA,0x30,}},
- {0x46F7,4,{0x82,0x33,0xDA,0x31,}},
- {0x46F8,4,{0x82,0x33,0xDA,0x32,}},
- {0x46F9,4,{0x82,0x33,0xDA,0x33,}},
- {0x46FA,4,{0x82,0x33,0xDA,0x34,}},
- {0x46FB,4,{0x82,0x33,0xDA,0x35,}},
- {0x46FC,4,{0x82,0x33,0xDA,0x36,}},
- {0x46FD,4,{0x82,0x33,0xDA,0x37,}},
- {0x46FE,4,{0x82,0x33,0xDA,0x38,}},
- {0x46FF,4,{0x82,0x33,0xDA,0x39,}},
- {0x4700,4,{0x82,0x33,0xDB,0x30,}},
- {0x4701,4,{0x82,0x33,0xDB,0x31,}},
- {0x4702,4,{0x82,0x33,0xDB,0x32,}},
- {0x4703,4,{0x82,0x33,0xDB,0x33,}},
- {0x4704,4,{0x82,0x33,0xDB,0x34,}},
- {0x4705,4,{0x82,0x33,0xDB,0x35,}},
- {0x4706,4,{0x82,0x33,0xDB,0x36,}},
- {0x4707,4,{0x82,0x33,0xDB,0x37,}},
- {0x4708,4,{0x82,0x33,0xDB,0x38,}},
- {0x4709,4,{0x82,0x33,0xDB,0x39,}},
- {0x470A,4,{0x82,0x33,0xDC,0x30,}},
- {0x470B,4,{0x82,0x33,0xDC,0x31,}},
- {0x470C,4,{0x82,0x33,0xDC,0x32,}},
- {0x470D,4,{0x82,0x33,0xDC,0x33,}},
- {0x470E,4,{0x82,0x33,0xDC,0x34,}},
- {0x470F,4,{0x82,0x33,0xDC,0x35,}},
- {0x4710,4,{0x82,0x33,0xDC,0x36,}},
- {0x4711,4,{0x82,0x33,0xDC,0x37,}},
- {0x4712,4,{0x82,0x33,0xDC,0x38,}},
- {0x4713,4,{0x82,0x33,0xDC,0x39,}},
- {0x4714,4,{0x82,0x33,0xDD,0x30,}},
- {0x4715,4,{0x82,0x33,0xDD,0x31,}},
- {0x4716,4,{0x82,0x33,0xDD,0x32,}},
- {0x4717,4,{0x82,0x33,0xDD,0x33,}},
- {0x4718,4,{0x82,0x33,0xDD,0x34,}},
- {0x4719,4,{0x82,0x33,0xDD,0x35,}},
- {0x471A,4,{0x82,0x33,0xDD,0x36,}},
- {0x471B,4,{0x82,0x33,0xDD,0x37,}},
- {0x471C,4,{0x82,0x33,0xDD,0x38,}},
- {0x471D,4,{0x82,0x33,0xDD,0x39,}},
- {0x471E,4,{0x82,0x33,0xDE,0x30,}},
- {0x471F,4,{0x82,0x33,0xDE,0x31,}},
- {0x4720,4,{0x82,0x33,0xDE,0x32,}},
- {0x4721,4,{0x82,0x33,0xDE,0x33,}},
- {0x4722,4,{0x82,0x33,0xDE,0x34,}},
- {0x4723,2,{0xFE,0x80,0x00,0x00,}},
- {0x4724,4,{0x82,0x33,0xDE,0x35,}},
- {0x4725,4,{0x82,0x33,0xDE,0x36,}},
- {0x4726,4,{0x82,0x33,0xDE,0x37,}},
- {0x4727,4,{0x82,0x33,0xDE,0x38,}},
- {0x4728,4,{0x82,0x33,0xDE,0x39,}},
- {0x4729,2,{0xFE,0x81,0x00,0x00,}},
- {0x472A,4,{0x82,0x33,0xDF,0x30,}},
- {0x472B,4,{0x82,0x33,0xDF,0x31,}},
- {0x472C,4,{0x82,0x33,0xDF,0x32,}},
- {0x472D,4,{0x82,0x33,0xDF,0x33,}},
- {0x472E,4,{0x82,0x33,0xDF,0x34,}},
- {0x472F,4,{0x82,0x33,0xDF,0x35,}},
- {0x4730,4,{0x82,0x33,0xDF,0x36,}},
- {0x4731,4,{0x82,0x33,0xDF,0x37,}},
- {0x4732,4,{0x82,0x33,0xDF,0x38,}},
- {0x4733,4,{0x82,0x33,0xDF,0x39,}},
- {0x4734,4,{0x82,0x33,0xE0,0x30,}},
- {0x4735,4,{0x82,0x33,0xE0,0x31,}},
- {0x4736,4,{0x82,0x33,0xE0,0x32,}},
- {0x4737,4,{0x82,0x33,0xE0,0x33,}},
- {0x4738,4,{0x82,0x33,0xE0,0x34,}},
- {0x4739,4,{0x82,0x33,0xE0,0x35,}},
- {0x473A,4,{0x82,0x33,0xE0,0x36,}},
- {0x473B,4,{0x82,0x33,0xE0,0x37,}},
- {0x473C,4,{0x82,0x33,0xE0,0x38,}},
- {0x473D,4,{0x82,0x33,0xE0,0x39,}},
- {0x473E,4,{0x82,0x33,0xE1,0x30,}},
- {0x473F,4,{0x82,0x33,0xE1,0x31,}},
- {0x4740,4,{0x82,0x33,0xE1,0x32,}},
- {0x4741,4,{0x82,0x33,0xE1,0x33,}},
- {0x4742,4,{0x82,0x33,0xE1,0x34,}},
- {0x4743,4,{0x82,0x33,0xE1,0x35,}},
- {0x4744,4,{0x82,0x33,0xE1,0x36,}},
- {0x4745,4,{0x82,0x33,0xE1,0x37,}},
- {0x4746,4,{0x82,0x33,0xE1,0x38,}},
- {0x4747,4,{0x82,0x33,0xE1,0x39,}},
- {0x4748,4,{0x82,0x33,0xE2,0x30,}},
- {0x4749,4,{0x82,0x33,0xE2,0x31,}},
- {0x474A,4,{0x82,0x33,0xE2,0x32,}},
- {0x474B,4,{0x82,0x33,0xE2,0x33,}},
- {0x474C,4,{0x82,0x33,0xE2,0x34,}},
- {0x474D,4,{0x82,0x33,0xE2,0x35,}},
- {0x474E,4,{0x82,0x33,0xE2,0x36,}},
- {0x474F,4,{0x82,0x33,0xE2,0x37,}},
- {0x4750,4,{0x82,0x33,0xE2,0x38,}},
- {0x4751,4,{0x82,0x33,0xE2,0x39,}},
- {0x4752,4,{0x82,0x33,0xE3,0x30,}},
- {0x4753,4,{0x82,0x33,0xE3,0x31,}},
- {0x4754,4,{0x82,0x33,0xE3,0x32,}},
- {0x4755,4,{0x82,0x33,0xE3,0x33,}},
- {0x4756,4,{0x82,0x33,0xE3,0x34,}},
- {0x4757,4,{0x82,0x33,0xE3,0x35,}},
- {0x4758,4,{0x82,0x33,0xE3,0x36,}},
- {0x4759,4,{0x82,0x33,0xE3,0x37,}},
- {0x475A,4,{0x82,0x33,0xE3,0x38,}},
- {0x475B,4,{0x82,0x33,0xE3,0x39,}},
- {0x475C,4,{0x82,0x33,0xE4,0x30,}},
- {0x475D,4,{0x82,0x33,0xE4,0x31,}},
- {0x475E,4,{0x82,0x33,0xE4,0x32,}},
- {0x475F,4,{0x82,0x33,0xE4,0x33,}},
- {0x4760,4,{0x82,0x33,0xE4,0x34,}},
- {0x4761,4,{0x82,0x33,0xE4,0x35,}},
- {0x4762,4,{0x82,0x33,0xE4,0x36,}},
- {0x4763,4,{0x82,0x33,0xE4,0x37,}},
- {0x4764,4,{0x82,0x33,0xE4,0x38,}},
- {0x4765,4,{0x82,0x33,0xE4,0x39,}},
- {0x4766,4,{0x82,0x33,0xE5,0x30,}},
- {0x4767,4,{0x82,0x33,0xE5,0x31,}},
- {0x4768,4,{0x82,0x33,0xE5,0x32,}},
- {0x4769,4,{0x82,0x33,0xE5,0x33,}},
- {0x476A,4,{0x82,0x33,0xE5,0x34,}},
- {0x476B,4,{0x82,0x33,0xE5,0x35,}},
- {0x476C,4,{0x82,0x33,0xE5,0x36,}},
- {0x476D,4,{0x82,0x33,0xE5,0x37,}},
- {0x476E,4,{0x82,0x33,0xE5,0x38,}},
- {0x476F,4,{0x82,0x33,0xE5,0x39,}},
- {0x4770,4,{0x82,0x33,0xE6,0x30,}},
- {0x4771,4,{0x82,0x33,0xE6,0x31,}},
- {0x4772,4,{0x82,0x33,0xE6,0x32,}},
- {0x4773,4,{0x82,0x33,0xE6,0x33,}},
- {0x4774,4,{0x82,0x33,0xE6,0x34,}},
- {0x4775,4,{0x82,0x33,0xE6,0x35,}},
- {0x4776,4,{0x82,0x33,0xE6,0x36,}},
- {0x4777,4,{0x82,0x33,0xE6,0x37,}},
- {0x4778,4,{0x82,0x33,0xE6,0x38,}},
- {0x4779,4,{0x82,0x33,0xE6,0x39,}},
- {0x477A,4,{0x82,0x33,0xE7,0x30,}},
- {0x477B,4,{0x82,0x33,0xE7,0x31,}},
- {0x477C,2,{0xFE,0x82,0x00,0x00,}},
- {0x477D,4,{0x82,0x33,0xE7,0x32,}},
- {0x477E,4,{0x82,0x33,0xE7,0x33,}},
- {0x477F,4,{0x82,0x33,0xE7,0x34,}},
- {0x4780,4,{0x82,0x33,0xE7,0x35,}},
- {0x4781,4,{0x82,0x33,0xE7,0x36,}},
- {0x4782,4,{0x82,0x33,0xE7,0x37,}},
- {0x4783,4,{0x82,0x33,0xE7,0x38,}},
- {0x4784,4,{0x82,0x33,0xE7,0x39,}},
- {0x4785,4,{0x82,0x33,0xE8,0x30,}},
- {0x4786,4,{0x82,0x33,0xE8,0x31,}},
- {0x4787,4,{0x82,0x33,0xE8,0x32,}},
- {0x4788,4,{0x82,0x33,0xE8,0x33,}},
- {0x4789,4,{0x82,0x33,0xE8,0x34,}},
- {0x478A,4,{0x82,0x33,0xE8,0x35,}},
- {0x478B,4,{0x82,0x33,0xE8,0x36,}},
- {0x478C,4,{0x82,0x33,0xE8,0x37,}},
- {0x478D,2,{0xFE,0x83,0x00,0x00,}},
- {0x4947,2,{0xFE,0x85,0x00,0x00,}},
- {0x4948,4,{0x82,0x34,0x96,0x39,}},
- {0x4949,4,{0x82,0x34,0x97,0x30,}},
- {0x494A,4,{0x82,0x34,0x97,0x31,}},
- {0x494B,4,{0x82,0x34,0x97,0x32,}},
- {0x494C,4,{0x82,0x34,0x97,0x33,}},
- {0x494D,4,{0x82,0x34,0x97,0x34,}},
- {0x494E,4,{0x82,0x34,0x97,0x35,}},
- {0x494F,4,{0x82,0x34,0x97,0x36,}},
- {0x4950,4,{0x82,0x34,0x97,0x37,}},
- {0x4951,4,{0x82,0x34,0x97,0x38,}},
- {0x4952,4,{0x82,0x34,0x97,0x39,}},
- {0x4953,4,{0x82,0x34,0x98,0x30,}},
- {0x4954,4,{0x82,0x34,0x98,0x31,}},
- {0x4955,4,{0x82,0x34,0x98,0x32,}},
- {0x4956,4,{0x82,0x34,0x98,0x33,}},
- {0x4957,4,{0x82,0x34,0x98,0x34,}},
- {0x4958,4,{0x82,0x34,0x98,0x35,}},
- {0x4959,4,{0x82,0x34,0x98,0x36,}},
- {0x495A,4,{0x82,0x34,0x98,0x37,}},
- {0x495B,4,{0x82,0x34,0x98,0x38,}},
- {0x495C,4,{0x82,0x34,0x98,0x39,}},
- {0x495D,4,{0x82,0x34,0x99,0x30,}},
- {0x495E,4,{0x82,0x34,0x99,0x31,}},
- {0x495F,4,{0x82,0x34,0x99,0x32,}},
- {0x4960,4,{0x82,0x34,0x99,0x33,}},
- {0x4961,4,{0x82,0x34,0x99,0x34,}},
- {0x4962,4,{0x82,0x34,0x99,0x35,}},
- {0x4963,4,{0x82,0x34,0x99,0x36,}},
- {0x4964,4,{0x82,0x34,0x99,0x37,}},
- {0x4965,4,{0x82,0x34,0x99,0x38,}},
- {0x4966,4,{0x82,0x34,0x99,0x39,}},
- {0x4967,4,{0x82,0x34,0x9A,0x30,}},
- {0x4968,4,{0x82,0x34,0x9A,0x31,}},
- {0x4969,4,{0x82,0x34,0x9A,0x32,}},
- {0x496A,4,{0x82,0x34,0x9A,0x33,}},
- {0x496B,4,{0x82,0x34,0x9A,0x34,}},
- {0x496C,4,{0x82,0x34,0x9A,0x35,}},
- {0x496D,4,{0x82,0x34,0x9A,0x36,}},
- {0x496E,4,{0x82,0x34,0x9A,0x37,}},
- {0x496F,4,{0x82,0x34,0x9A,0x38,}},
- {0x4970,4,{0x82,0x34,0x9A,0x39,}},
- {0x4971,4,{0x82,0x34,0x9B,0x30,}},
- {0x4972,4,{0x82,0x34,0x9B,0x31,}},
- {0x4973,4,{0x82,0x34,0x9B,0x32,}},
- {0x4974,4,{0x82,0x34,0x9B,0x33,}},
- {0x4975,4,{0x82,0x34,0x9B,0x34,}},
- {0x4976,4,{0x82,0x34,0x9B,0x35,}},
- {0x4977,4,{0x82,0x34,0x9B,0x36,}},
- {0x4978,4,{0x82,0x34,0x9B,0x37,}},
- {0x4979,4,{0x82,0x34,0x9B,0x38,}},
- {0x497A,2,{0xFE,0x86,0x00,0x00,}},
- {0x497B,4,{0x82,0x34,0x9B,0x39,}},
- {0x497C,4,{0x82,0x34,0x9C,0x30,}},
- {0x497D,2,{0xFE,0x87,0x00,0x00,}},
- {0x497E,4,{0x82,0x34,0x9C,0x31,}},
- {0x497F,4,{0x82,0x34,0x9C,0x32,}},
- {0x4980,4,{0x82,0x34,0x9C,0x33,}},
- {0x4981,4,{0x82,0x34,0x9C,0x34,}},
- {0x4982,2,{0xFE,0x88,0x00,0x00,}},
- {0x4983,2,{0xFE,0x89,0x00,0x00,}},
- {0x4984,4,{0x82,0x34,0x9C,0x35,}},
- {0x4985,2,{0xFE,0x8A,0x00,0x00,}},
- {0x4986,2,{0xFE,0x8B,0x00,0x00,}},
- {0x4987,4,{0x82,0x34,0x9C,0x36,}},
- {0x4988,4,{0x82,0x34,0x9C,0x37,}},
- {0x4989,4,{0x82,0x34,0x9C,0x38,}},
- {0x498A,4,{0x82,0x34,0x9C,0x39,}},
- {0x498B,4,{0x82,0x34,0x9D,0x30,}},
- {0x498C,4,{0x82,0x34,0x9D,0x31,}},
- {0x498D,4,{0x82,0x34,0x9D,0x32,}},
- {0x498E,4,{0x82,0x34,0x9D,0x33,}},
- {0x498F,4,{0x82,0x34,0x9D,0x34,}},
- {0x4990,4,{0x82,0x34,0x9D,0x35,}},
- {0x4991,4,{0x82,0x34,0x9D,0x36,}},
- {0x4992,4,{0x82,0x34,0x9D,0x37,}},
- {0x4993,4,{0x82,0x34,0x9D,0x38,}},
- {0x4994,4,{0x82,0x34,0x9D,0x39,}},
- {0x4995,4,{0x82,0x34,0x9E,0x30,}},
- {0x4996,4,{0x82,0x34,0x9E,0x31,}},
- {0x4997,4,{0x82,0x34,0x9E,0x32,}},
- {0x4998,4,{0x82,0x34,0x9E,0x33,}},
- {0x4999,4,{0x82,0x34,0x9E,0x34,}},
- {0x499A,4,{0x82,0x34,0x9E,0x35,}},
- {0x499B,2,{0xFE,0x8D,0x00,0x00,}},
- {0x499C,4,{0x82,0x34,0x9E,0x36,}},
- {0x499D,4,{0x82,0x34,0x9E,0x37,}},
- {0x499E,4,{0x82,0x34,0x9E,0x38,}},
- {0x499F,2,{0xFE,0x8C,0x00,0x00,}},
- {0x49A0,4,{0x82,0x34,0x9E,0x39,}},
- {0x49A1,4,{0x82,0x34,0x9F,0x30,}},
- {0x49A2,4,{0x82,0x34,0x9F,0x31,}},
- {0x49A3,4,{0x82,0x34,0x9F,0x32,}},
- {0x49A4,4,{0x82,0x34,0x9F,0x33,}},
- {0x49A5,4,{0x82,0x34,0x9F,0x34,}},
- {0x49A6,4,{0x82,0x34,0x9F,0x35,}},
- {0x49A7,4,{0x82,0x34,0x9F,0x36,}},
- {0x49A8,4,{0x82,0x34,0x9F,0x37,}},
- {0x49A9,4,{0x82,0x34,0x9F,0x38,}},
- {0x49AA,4,{0x82,0x34,0x9F,0x39,}},
- {0x49AB,4,{0x82,0x34,0xA0,0x30,}},
- {0x49AC,4,{0x82,0x34,0xA0,0x31,}},
- {0x49AD,4,{0x82,0x34,0xA0,0x32,}},
- {0x49AE,4,{0x82,0x34,0xA0,0x33,}},
- {0x49AF,4,{0x82,0x34,0xA0,0x34,}},
- {0x49B0,4,{0x82,0x34,0xA0,0x35,}},
- {0x49B1,4,{0x82,0x34,0xA0,0x36,}},
- {0x49B2,4,{0x82,0x34,0xA0,0x37,}},
- {0x49B3,4,{0x82,0x34,0xA0,0x38,}},
- {0x49B4,4,{0x82,0x34,0xA0,0x39,}},
- {0x49B5,4,{0x82,0x34,0xA1,0x30,}},
- {0x49B6,2,{0xFE,0x8F,0x00,0x00,}},
- {0x49B7,2,{0xFE,0x8E,0x00,0x00,}},
- {0x4C77,2,{0xFE,0x96,0x00,0x00,}},
- {0x4C78,4,{0x82,0x34,0xE7,0x34,}},
- {0x4C79,4,{0x82,0x34,0xE7,0x35,}},
- {0x4C7A,4,{0x82,0x34,0xE7,0x36,}},
- {0x4C7B,4,{0x82,0x34,0xE7,0x37,}},
- {0x4C7C,4,{0x82,0x34,0xE7,0x38,}},
- {0x4C7D,4,{0x82,0x34,0xE7,0x39,}},
- {0x4C7E,4,{0x82,0x34,0xE8,0x30,}},
- {0x4C7F,4,{0x82,0x34,0xE8,0x31,}},
- {0x4C80,4,{0x82,0x34,0xE8,0x32,}},
- {0x4C81,4,{0x82,0x34,0xE8,0x33,}},
- {0x4C82,4,{0x82,0x34,0xE8,0x34,}},
- {0x4C83,4,{0x82,0x34,0xE8,0x35,}},
- {0x4C84,4,{0x82,0x34,0xE8,0x36,}},
- {0x4C85,4,{0x82,0x34,0xE8,0x37,}},
- {0x4C86,4,{0x82,0x34,0xE8,0x38,}},
- {0x4C87,4,{0x82,0x34,0xE8,0x39,}},
- {0x4C88,4,{0x82,0x34,0xE9,0x30,}},
- {0x4C89,4,{0x82,0x34,0xE9,0x31,}},
- {0x4C8A,4,{0x82,0x34,0xE9,0x32,}},
- {0x4C8B,4,{0x82,0x34,0xE9,0x33,}},
- {0x4C8C,4,{0x82,0x34,0xE9,0x34,}},
- {0x4C8D,4,{0x82,0x34,0xE9,0x35,}},
- {0x4C8E,4,{0x82,0x34,0xE9,0x36,}},
- {0x4C8F,4,{0x82,0x34,0xE9,0x37,}},
- {0x4C90,4,{0x82,0x34,0xE9,0x38,}},
- {0x4C91,4,{0x82,0x34,0xE9,0x39,}},
- {0x4C92,4,{0x82,0x34,0xEA,0x30,}},
- {0x4C93,4,{0x82,0x34,0xEA,0x31,}},
- {0x4C94,4,{0x82,0x34,0xEA,0x32,}},
- {0x4C95,4,{0x82,0x34,0xEA,0x33,}},
- {0x4C96,4,{0x82,0x34,0xEA,0x34,}},
- {0x4C97,4,{0x82,0x34,0xEA,0x35,}},
- {0x4C98,4,{0x82,0x34,0xEA,0x36,}},
- {0x4C99,4,{0x82,0x34,0xEA,0x37,}},
- {0x4C9A,4,{0x82,0x34,0xEA,0x38,}},
- {0x4C9B,4,{0x82,0x34,0xEA,0x39,}},
- {0x4C9C,4,{0x82,0x34,0xEB,0x30,}},
- {0x4C9D,4,{0x82,0x34,0xEB,0x31,}},
- {0x4C9E,4,{0x82,0x34,0xEB,0x32,}},
- {0x4C9F,2,{0xFE,0x93,0x00,0x00,}},
- {0x4CA0,2,{0xFE,0x94,0x00,0x00,}},
- {0x4CA1,2,{0xFE,0x95,0x00,0x00,}},
- {0x4CA2,2,{0xFE,0x97,0x00,0x00,}},
- {0x4CA3,2,{0xFE,0x92,0x00,0x00,}},
- {0x4CA4,4,{0x82,0x34,0xEB,0x33,}},
- {0x4CA5,4,{0x82,0x34,0xEB,0x34,}},
- {0x4CA6,4,{0x82,0x34,0xEB,0x35,}},
- {0x4CA7,4,{0x82,0x34,0xEB,0x36,}},
- {0x4CA8,4,{0x82,0x34,0xEB,0x37,}},
- {0x4CA9,4,{0x82,0x34,0xEB,0x38,}},
- {0x4CAA,4,{0x82,0x34,0xEB,0x39,}},
- {0x4CAB,4,{0x82,0x34,0xEC,0x30,}},
- {0x4CAC,4,{0x82,0x34,0xEC,0x31,}},
- {0x4CAD,4,{0x82,0x34,0xEC,0x32,}},
- {0x4CAE,4,{0x82,0x34,0xEC,0x33,}},
- {0x4CAF,4,{0x82,0x34,0xEC,0x34,}},
- {0x4CB0,4,{0x82,0x34,0xEC,0x35,}},
- {0x4CB1,4,{0x82,0x34,0xEC,0x36,}},
- {0x4CB2,4,{0x82,0x34,0xEC,0x37,}},
- {0x4CB3,4,{0x82,0x34,0xEC,0x38,}},
- {0x4CB4,4,{0x82,0x34,0xEC,0x39,}},
- {0x4CB5,4,{0x82,0x34,0xED,0x30,}},
- {0x4CB6,4,{0x82,0x34,0xED,0x31,}},
- {0x4CB7,4,{0x82,0x34,0xED,0x32,}},
- {0x4CB8,4,{0x82,0x34,0xED,0x33,}},
- {0x4CB9,4,{0x82,0x34,0xED,0x34,}},
- {0x4CBA,4,{0x82,0x34,0xED,0x35,}},
- {0x4CBB,4,{0x82,0x34,0xED,0x36,}},
- {0x4CBC,4,{0x82,0x34,0xED,0x37,}},
- {0x4CBD,4,{0x82,0x34,0xED,0x38,}},
- {0x4CBE,4,{0x82,0x34,0xED,0x39,}},
- {0x4CBF,4,{0x82,0x34,0xEE,0x30,}},
- {0x4CC0,4,{0x82,0x34,0xEE,0x31,}},
- {0x4CC1,4,{0x82,0x34,0xEE,0x32,}},
- {0x4CC2,4,{0x82,0x34,0xEE,0x33,}},
- {0x4CC3,4,{0x82,0x34,0xEE,0x34,}},
- {0x4CC4,4,{0x82,0x34,0xEE,0x35,}},
- {0x4CC5,4,{0x82,0x34,0xEE,0x36,}},
- {0x4CC6,4,{0x82,0x34,0xEE,0x37,}},
- {0x4CC7,4,{0x82,0x34,0xEE,0x38,}},
- {0x4CC8,4,{0x82,0x34,0xEE,0x39,}},
- {0x4CC9,4,{0x82,0x34,0xEF,0x30,}},
- {0x4CCA,4,{0x82,0x34,0xEF,0x31,}},
- {0x4CCB,4,{0x82,0x34,0xEF,0x32,}},
- {0x4CCC,4,{0x82,0x34,0xEF,0x33,}},
- {0x4CCD,4,{0x82,0x34,0xEF,0x34,}},
- {0x4CCE,4,{0x82,0x34,0xEF,0x35,}},
- {0x4CCF,4,{0x82,0x34,0xEF,0x36,}},
- {0x4CD0,4,{0x82,0x34,0xEF,0x37,}},
- {0x4CD1,4,{0x82,0x34,0xEF,0x38,}},
- {0x4CD2,4,{0x82,0x34,0xEF,0x39,}},
- {0x4CD3,4,{0x82,0x34,0xF0,0x30,}},
- {0x4CD4,4,{0x82,0x34,0xF0,0x31,}},
- {0x4CD5,4,{0x82,0x34,0xF0,0x32,}},
- {0x4CD6,4,{0x82,0x34,0xF0,0x33,}},
- {0x4CD7,4,{0x82,0x34,0xF0,0x34,}},
- {0x4CD8,4,{0x82,0x34,0xF0,0x35,}},
- {0x4CD9,4,{0x82,0x34,0xF0,0x36,}},
- {0x4CDA,4,{0x82,0x34,0xF0,0x37,}},
- {0x4CDB,4,{0x82,0x34,0xF0,0x38,}},
- {0x4CDC,4,{0x82,0x34,0xF0,0x39,}},
- {0x4CDD,4,{0x82,0x34,0xF1,0x30,}},
- {0x4CDE,4,{0x82,0x34,0xF1,0x31,}},
- {0x4CDF,4,{0x82,0x34,0xF1,0x32,}},
- {0x4CE0,4,{0x82,0x34,0xF1,0x33,}},
- {0x4CE1,4,{0x82,0x34,0xF1,0x34,}},
- {0x4CE2,4,{0x82,0x34,0xF1,0x35,}},
- {0x4CE3,4,{0x82,0x34,0xF1,0x36,}},
- {0x4CE4,4,{0x82,0x34,0xF1,0x37,}},
- {0x4CE5,4,{0x82,0x34,0xF1,0x38,}},
- {0x4CE6,4,{0x82,0x34,0xF1,0x39,}},
- {0x4CE7,4,{0x82,0x34,0xF2,0x30,}},
- {0x4CE8,4,{0x82,0x34,0xF2,0x31,}},
- {0x4CE9,4,{0x82,0x34,0xF2,0x32,}},
- {0x4CEA,4,{0x82,0x34,0xF2,0x33,}},
- {0x4CEB,4,{0x82,0x34,0xF2,0x34,}},
- {0x4CEC,4,{0x82,0x34,0xF2,0x35,}},
- {0x4CED,4,{0x82,0x34,0xF2,0x36,}},
- {0x4CEE,4,{0x82,0x34,0xF2,0x37,}},
- {0x4CEF,4,{0x82,0x34,0xF2,0x38,}},
- {0x4CF0,4,{0x82,0x34,0xF2,0x39,}},
- {0x4CF1,4,{0x82,0x34,0xF3,0x30,}},
- {0x4CF2,4,{0x82,0x34,0xF3,0x31,}},
- {0x4CF3,4,{0x82,0x34,0xF3,0x32,}},
- {0x4CF4,4,{0x82,0x34,0xF3,0x33,}},
- {0x4CF5,4,{0x82,0x34,0xF3,0x34,}},
- {0x4CF6,4,{0x82,0x34,0xF3,0x35,}},
- {0x4CF7,4,{0x82,0x34,0xF3,0x36,}},
- {0x4CF8,4,{0x82,0x34,0xF3,0x37,}},
- {0x4CF9,4,{0x82,0x34,0xF3,0x38,}},
- {0x4CFA,4,{0x82,0x34,0xF3,0x39,}},
- {0x4CFB,4,{0x82,0x34,0xF4,0x30,}},
- {0x4CFC,4,{0x82,0x34,0xF4,0x31,}},
- {0x4CFD,4,{0x82,0x34,0xF4,0x32,}},
- {0x4CFE,4,{0x82,0x34,0xF4,0x33,}},
- {0x4CFF,4,{0x82,0x34,0xF4,0x34,}},
- {0x4D00,4,{0x82,0x34,0xF4,0x35,}},
- {0x4D01,4,{0x82,0x34,0xF4,0x36,}},
- {0x4D02,4,{0x82,0x34,0xF4,0x37,}},
- {0x4D03,4,{0x82,0x34,0xF4,0x38,}},
- {0x4D04,4,{0x82,0x34,0xF4,0x39,}},
- {0x4D05,4,{0x82,0x34,0xF5,0x30,}},
- {0x4D06,4,{0x82,0x34,0xF5,0x31,}},
- {0x4D07,4,{0x82,0x34,0xF5,0x32,}},
- {0x4D08,4,{0x82,0x34,0xF5,0x33,}},
- {0x4D09,4,{0x82,0x34,0xF5,0x34,}},
- {0x4D0A,4,{0x82,0x34,0xF5,0x35,}},
- {0x4D0B,4,{0x82,0x34,0xF5,0x36,}},
- {0x4D0C,4,{0x82,0x34,0xF5,0x37,}},
- {0x4D0D,4,{0x82,0x34,0xF5,0x38,}},
- {0x4D0E,4,{0x82,0x34,0xF5,0x39,}},
- {0x4D0F,4,{0x82,0x34,0xF6,0x30,}},
- {0x4D10,4,{0x82,0x34,0xF6,0x31,}},
- {0x4D11,4,{0x82,0x34,0xF6,0x32,}},
- {0x4D12,4,{0x82,0x34,0xF6,0x33,}},
- {0x4D13,2,{0xFE,0x98,0x00,0x00,}},
- {0x4D14,2,{0xFE,0x99,0x00,0x00,}},
- {0x4D15,2,{0xFE,0x9A,0x00,0x00,}},
- {0x4D16,2,{0xFE,0x9B,0x00,0x00,}},
- {0x4D17,2,{0xFE,0x9C,0x00,0x00,}},
- {0x4D18,2,{0xFE,0x9D,0x00,0x00,}},
- {0x4D19,2,{0xFE,0x9E,0x00,0x00,}},
- {0x4D1A,4,{0x82,0x34,0xF6,0x34,}},
- {0x4D1B,4,{0x82,0x34,0xF6,0x35,}},
- {0x4D1C,4,{0x82,0x34,0xF6,0x36,}},
- {0x4D1D,4,{0x82,0x34,0xF6,0x37,}},
- {0x4D1E,4,{0x82,0x34,0xF6,0x38,}},
- {0x4D1F,4,{0x82,0x34,0xF6,0x39,}},
- {0x4D20,4,{0x82,0x34,0xF7,0x30,}},
- {0x4D21,4,{0x82,0x34,0xF7,0x31,}},
- {0x4D22,4,{0x82,0x34,0xF7,0x32,}},
- {0x4D23,4,{0x82,0x34,0xF7,0x33,}},
- {0x4D24,4,{0x82,0x34,0xF7,0x34,}},
- {0x4D25,4,{0x82,0x34,0xF7,0x35,}},
- {0x4D26,4,{0x82,0x34,0xF7,0x36,}},
- {0x4D27,4,{0x82,0x34,0xF7,0x37,}},
- {0x4D28,4,{0x82,0x34,0xF7,0x38,}},
- {0x4D29,4,{0x82,0x34,0xF7,0x39,}},
- {0x4D2A,4,{0x82,0x34,0xF8,0x30,}},
- {0x4D2B,4,{0x82,0x34,0xF8,0x31,}},
- {0x4D2C,4,{0x82,0x34,0xF8,0x32,}},
- {0x4D2D,4,{0x82,0x34,0xF8,0x33,}},
- {0x4D2E,4,{0x82,0x34,0xF8,0x34,}},
- {0x4D2F,4,{0x82,0x34,0xF8,0x35,}},
- {0x4D30,4,{0x82,0x34,0xF8,0x36,}},
- {0x4D31,4,{0x82,0x34,0xF8,0x37,}},
- {0x4D32,4,{0x82,0x34,0xF8,0x38,}},
- {0x4D33,4,{0x82,0x34,0xF8,0x39,}},
- {0x4D34,4,{0x82,0x34,0xF9,0x30,}},
- {0x4D35,4,{0x82,0x34,0xF9,0x31,}},
- {0x4D36,4,{0x82,0x34,0xF9,0x32,}},
- {0x4D37,4,{0x82,0x34,0xF9,0x33,}},
- {0x4D38,4,{0x82,0x34,0xF9,0x34,}},
- {0x4D39,4,{0x82,0x34,0xF9,0x35,}},
- {0x4D3A,4,{0x82,0x34,0xF9,0x36,}},
- {0x4D3B,4,{0x82,0x34,0xF9,0x37,}},
- {0x4D3C,4,{0x82,0x34,0xF9,0x38,}},
- {0x4D3D,4,{0x82,0x34,0xF9,0x39,}},
- {0x4D3E,4,{0x82,0x34,0xFA,0x30,}},
- {0x4D3F,4,{0x82,0x34,0xFA,0x31,}},
- {0x4D40,4,{0x82,0x34,0xFA,0x32,}},
- {0x4D41,4,{0x82,0x34,0xFA,0x33,}},
- {0x4D42,4,{0x82,0x34,0xFA,0x34,}},
- {0x4D43,4,{0x82,0x34,0xFA,0x35,}},
- {0x4D44,4,{0x82,0x34,0xFA,0x36,}},
- {0x4D45,4,{0x82,0x34,0xFA,0x37,}},
- {0x4D46,4,{0x82,0x34,0xFA,0x38,}},
- {0x4D47,4,{0x82,0x34,0xFA,0x39,}},
- {0x4D48,4,{0x82,0x34,0xFB,0x30,}},
- {0x4D49,4,{0x82,0x34,0xFB,0x31,}},
- {0x4D4A,4,{0x82,0x34,0xFB,0x32,}},
- {0x4D4B,4,{0x82,0x34,0xFB,0x33,}},
- {0x4D4C,4,{0x82,0x34,0xFB,0x34,}},
- {0x4D4D,4,{0x82,0x34,0xFB,0x35,}},
- {0x4D4E,4,{0x82,0x34,0xFB,0x36,}},
- {0x4D4F,4,{0x82,0x34,0xFB,0x37,}},
- {0x4D50,4,{0x82,0x34,0xFB,0x38,}},
- {0x4D51,4,{0x82,0x34,0xFB,0x39,}},
- {0x4D52,4,{0x82,0x34,0xFC,0x30,}},
- {0x4D53,4,{0x82,0x34,0xFC,0x31,}},
- {0x4D54,4,{0x82,0x34,0xFC,0x32,}},
- {0x4D55,4,{0x82,0x34,0xFC,0x33,}},
- {0x4D56,4,{0x82,0x34,0xFC,0x34,}},
- {0x4D57,4,{0x82,0x34,0xFC,0x35,}},
- {0x4D58,4,{0x82,0x34,0xFC,0x36,}},
- {0x4D59,4,{0x82,0x34,0xFC,0x37,}},
- {0x4D5A,4,{0x82,0x34,0xFC,0x38,}},
- {0x4D5B,4,{0x82,0x34,0xFC,0x39,}},
- {0x4D5C,4,{0x82,0x34,0xFD,0x30,}},
- {0x4D5D,4,{0x82,0x34,0xFD,0x31,}},
- {0x4D5E,4,{0x82,0x34,0xFD,0x32,}},
- {0x4D5F,4,{0x82,0x34,0xFD,0x33,}},
- {0x4D60,4,{0x82,0x34,0xFD,0x34,}},
- {0x4D61,4,{0x82,0x34,0xFD,0x35,}},
- {0x4D62,4,{0x82,0x34,0xFD,0x36,}},
- {0x4D63,4,{0x82,0x34,0xFD,0x37,}},
- {0x4D64,4,{0x82,0x34,0xFD,0x38,}},
- {0x4D65,4,{0x82,0x34,0xFD,0x39,}},
- {0x4D66,4,{0x82,0x34,0xFE,0x30,}},
- {0x4D67,4,{0x82,0x34,0xFE,0x31,}},
- {0x4D68,4,{0x82,0x34,0xFE,0x32,}},
- {0x4D69,4,{0x82,0x34,0xFE,0x33,}},
- {0x4D6A,4,{0x82,0x34,0xFE,0x34,}},
- {0x4D6B,4,{0x82,0x34,0xFE,0x35,}},
- {0x4D6C,4,{0x82,0x34,0xFE,0x36,}},
- {0x4D6D,4,{0x82,0x34,0xFE,0x37,}},
- {0x4D6E,4,{0x82,0x34,0xFE,0x38,}},
- {0x4D6F,4,{0x82,0x34,0xFE,0x39,}},
- {0x4D70,4,{0x82,0x35,0x81,0x30,}},
- {0x4D71,4,{0x82,0x35,0x81,0x31,}},
- {0x4D72,4,{0x82,0x35,0x81,0x32,}},
- {0x4D73,4,{0x82,0x35,0x81,0x33,}},
- {0x4D74,4,{0x82,0x35,0x81,0x34,}},
- {0x4D75,4,{0x82,0x35,0x81,0x35,}},
- {0x4D76,4,{0x82,0x35,0x81,0x36,}},
- {0x4D77,4,{0x82,0x35,0x81,0x37,}},
- {0x4D78,4,{0x82,0x35,0x81,0x38,}},
- {0x4D79,4,{0x82,0x35,0x81,0x39,}},
- {0x4D7A,4,{0x82,0x35,0x82,0x30,}},
- {0x4D7B,4,{0x82,0x35,0x82,0x31,}},
- {0x4D7C,4,{0x82,0x35,0x82,0x32,}},
- {0x4D7D,4,{0x82,0x35,0x82,0x33,}},
- {0x4D7E,4,{0x82,0x35,0x82,0x34,}},
- {0x4D7F,4,{0x82,0x35,0x82,0x35,}},
- {0x4D80,4,{0x82,0x35,0x82,0x36,}},
- {0x4D81,4,{0x82,0x35,0x82,0x37,}},
- {0x4D82,4,{0x82,0x35,0x82,0x38,}},
- {0x4D83,4,{0x82,0x35,0x82,0x39,}},
- {0x4D84,4,{0x82,0x35,0x83,0x30,}},
- {0x4D85,4,{0x82,0x35,0x83,0x31,}},
- {0x4D86,4,{0x82,0x35,0x83,0x32,}},
- {0x4D87,4,{0x82,0x35,0x83,0x33,}},
- {0x4D88,4,{0x82,0x35,0x83,0x34,}},
- {0x4D89,4,{0x82,0x35,0x83,0x35,}},
- {0x4D8A,4,{0x82,0x35,0x83,0x36,}},
- {0x4D8B,4,{0x82,0x35,0x83,0x37,}},
- {0x4D8C,4,{0x82,0x35,0x83,0x38,}},
- {0x4D8D,4,{0x82,0x35,0x83,0x39,}},
- {0x4D8E,4,{0x82,0x35,0x84,0x30,}},
- {0x4D8F,4,{0x82,0x35,0x84,0x31,}},
- {0x4D90,4,{0x82,0x35,0x84,0x32,}},
- {0x4D91,4,{0x82,0x35,0x84,0x33,}},
- {0x4D92,4,{0x82,0x35,0x84,0x34,}},
- {0x4D93,4,{0x82,0x35,0x84,0x35,}},
- {0x4D94,4,{0x82,0x35,0x84,0x36,}},
- {0x4D95,4,{0x82,0x35,0x84,0x37,}},
- {0x4D96,4,{0x82,0x35,0x84,0x38,}},
- {0x4D97,4,{0x82,0x35,0x84,0x39,}},
- {0x4D98,4,{0x82,0x35,0x85,0x30,}},
- {0x4D99,4,{0x82,0x35,0x85,0x31,}},
- {0x4D9A,4,{0x82,0x35,0x85,0x32,}},
- {0x4D9B,4,{0x82,0x35,0x85,0x33,}},
- {0x4D9C,4,{0x82,0x35,0x85,0x34,}},
- {0x4D9D,4,{0x82,0x35,0x85,0x35,}},
- {0x4D9E,4,{0x82,0x35,0x85,0x36,}},
- {0x4D9F,4,{0x82,0x35,0x85,0x37,}},
- {0x4DA0,4,{0x82,0x35,0x85,0x38,}},
- {0x4DA1,4,{0x82,0x35,0x85,0x39,}},
- {0x4DA2,4,{0x82,0x35,0x86,0x30,}},
- {0x4DA3,4,{0x82,0x35,0x86,0x31,}},
- {0x4DA4,4,{0x82,0x35,0x86,0x32,}},
- {0x4DA5,4,{0x82,0x35,0x86,0x33,}},
- {0x4DA6,4,{0x82,0x35,0x86,0x34,}},
- {0x4DA7,4,{0x82,0x35,0x86,0x35,}},
- {0x4DA8,4,{0x82,0x35,0x86,0x36,}},
- {0x4DA9,4,{0x82,0x35,0x86,0x37,}},
- {0x4DAA,4,{0x82,0x35,0x86,0x38,}},
- {0x4DAB,4,{0x82,0x35,0x86,0x39,}},
- {0x4DAC,4,{0x82,0x35,0x87,0x30,}},
- {0x4DAD,4,{0x82,0x35,0x87,0x31,}},
- {0x4DAE,2,{0xFE,0x9F,0x00,0x00,}},
- {0x4DAF,4,{0x82,0x35,0x87,0x32,}},
- {0x4DB0,4,{0x82,0x35,0x87,0x33,}},
- {0x4DB1,4,{0x82,0x35,0x87,0x34,}},
- {0x4DB2,4,{0x82,0x35,0x87,0x35,}},
- {0x4DB3,4,{0x82,0x35,0x87,0x36,}},
- {0x4DB4,4,{0x82,0x35,0x87,0x37,}},
- {0x4DB5,4,{0x82,0x35,0x87,0x38,}},
- {0x4DB6,4,{0x82,0x35,0x87,0x39,}},
- {0x4DB7,4,{0x82,0x35,0x88,0x30,}},
- {0x4DB8,4,{0x82,0x35,0x88,0x31,}},
- {0x4DB9,4,{0x82,0x35,0x88,0x32,}},
- {0x4DBA,4,{0x82,0x35,0x88,0x33,}},
- {0x4DBB,4,{0x82,0x35,0x88,0x34,}},
- {0x4DBC,4,{0x82,0x35,0x88,0x35,}},
- {0x4DBD,4,{0x82,0x35,0x88,0x36,}},
- {0x4DBE,4,{0x82,0x35,0x88,0x37,}},
- {0x4DBF,4,{0x82,0x35,0x88,0x38,}},
- {0x4DC0,4,{0x82,0x35,0x88,0x39,}},
- {0x4DC1,4,{0x82,0x35,0x89,0x30,}},
- {0x4DC2,4,{0x82,0x35,0x89,0x31,}},
- {0x4DC3,4,{0x82,0x35,0x89,0x32,}},
- {0x4DC4,4,{0x82,0x35,0x89,0x33,}},
- {0x4DC5,4,{0x82,0x35,0x89,0x34,}},
- {0x4DC6,4,{0x82,0x35,0x89,0x35,}},
- {0x4DC7,4,{0x82,0x35,0x89,0x36,}},
- {0x4DC8,4,{0x82,0x35,0x89,0x37,}},
- {0x4DC9,4,{0x82,0x35,0x89,0x38,}},
- {0x4DCA,4,{0x82,0x35,0x89,0x39,}},
- {0x4DCB,4,{0x82,0x35,0x8A,0x30,}},
- {0x4DCC,4,{0x82,0x35,0x8A,0x31,}},
- {0x4DCD,4,{0x82,0x35,0x8A,0x32,}},
- {0x4DCE,4,{0x82,0x35,0x8A,0x33,}},
- {0x4DCF,4,{0x82,0x35,0x8A,0x34,}},
- {0x4DD0,4,{0x82,0x35,0x8A,0x35,}},
- {0x4DD1,4,{0x82,0x35,0x8A,0x36,}},
- {0x4DD2,4,{0x82,0x35,0x8A,0x37,}},
- {0x4DD3,4,{0x82,0x35,0x8A,0x38,}},
- {0x4DD4,4,{0x82,0x35,0x8A,0x39,}},
- {0x4DD5,4,{0x82,0x35,0x8B,0x30,}},
- {0x4DD6,4,{0x82,0x35,0x8B,0x31,}},
- {0x4DD7,4,{0x82,0x35,0x8B,0x32,}},
- {0x4DD8,4,{0x82,0x35,0x8B,0x33,}},
- {0x4DD9,4,{0x82,0x35,0x8B,0x34,}},
- {0x4DDA,4,{0x82,0x35,0x8B,0x35,}},
- {0x4DDB,4,{0x82,0x35,0x8B,0x36,}},
- {0x4DDC,4,{0x82,0x35,0x8B,0x37,}},
- {0x4DDD,4,{0x82,0x35,0x8B,0x38,}},
- {0x4DDE,4,{0x82,0x35,0x8B,0x39,}},
- {0x4DDF,4,{0x82,0x35,0x8C,0x30,}},
- {0x4DE0,4,{0x82,0x35,0x8C,0x31,}},
- {0x4DE1,4,{0x82,0x35,0x8C,0x32,}},
- {0x4DE2,4,{0x82,0x35,0x8C,0x33,}},
- {0x4DE3,4,{0x82,0x35,0x8C,0x34,}},
- {0x4DE4,4,{0x82,0x35,0x8C,0x35,}},
- {0x4DE5,4,{0x82,0x35,0x8C,0x36,}},
- {0x4DE6,4,{0x82,0x35,0x8C,0x37,}},
- {0x4DE7,4,{0x82,0x35,0x8C,0x38,}},
- {0x4DE8,4,{0x82,0x35,0x8C,0x39,}},
- {0x4DE9,4,{0x82,0x35,0x8D,0x30,}},
- {0x4DEA,4,{0x82,0x35,0x8D,0x31,}},
- {0x4DEB,4,{0x82,0x35,0x8D,0x32,}},
- {0x4DEC,4,{0x82,0x35,0x8D,0x33,}},
- {0x4DED,4,{0x82,0x35,0x8D,0x34,}},
- {0x4DEE,4,{0x82,0x35,0x8D,0x35,}},
- {0x4DEF,4,{0x82,0x35,0x8D,0x36,}},
- {0x4DF0,4,{0x82,0x35,0x8D,0x37,}},
- {0x4DF1,4,{0x82,0x35,0x8D,0x38,}},
- {0x4DF2,4,{0x82,0x35,0x8D,0x39,}},
- {0x4DF3,4,{0x82,0x35,0x8E,0x30,}},
- {0x4DF4,4,{0x82,0x35,0x8E,0x31,}},
- {0x4DF5,4,{0x82,0x35,0x8E,0x32,}},
- {0x4DF6,4,{0x82,0x35,0x8E,0x33,}},
- {0x4DF7,4,{0x82,0x35,0x8E,0x34,}},
- {0x4DF8,4,{0x82,0x35,0x8E,0x35,}},
- {0x4DF9,4,{0x82,0x35,0x8E,0x36,}},
- {0x4DFA,4,{0x82,0x35,0x8E,0x37,}},
- {0x4DFB,4,{0x82,0x35,0x8E,0x38,}},
- {0x4DFC,4,{0x82,0x35,0x8E,0x39,}},
- {0x4DFD,4,{0x82,0x35,0x8F,0x30,}},
- {0x4DFE,4,{0x82,0x35,0x8F,0x31,}},
- {0x4DFF,4,{0x82,0x35,0x8F,0x32,}},
- {0x4E00,2,{0xD2,0xBB,0x00,0x00,}},
- {0x4E01,2,{0xB6,0xA1,0x00,0x00,}},
- {0x4E02,2,{0x81,0x40,0x00,0x00,}},
- {0x4E03,2,{0xC6,0xDF,0x00,0x00,}},
- {0x4E04,2,{0x81,0x41,0x00,0x00,}},
- {0x4E05,2,{0x81,0x42,0x00,0x00,}},
- {0x4E06,2,{0x81,0x43,0x00,0x00,}},
- {0x4E07,2,{0xCD,0xF2,0x00,0x00,}},
- {0x4E08,2,{0xD5,0xC9,0x00,0x00,}},
- {0x4E09,2,{0xC8,0xFD,0x00,0x00,}},
- {0x4E0A,2,{0xC9,0xCF,0x00,0x00,}},
- {0x4E0B,2,{0xCF,0xC2,0x00,0x00,}},
- {0x4E0C,2,{0xD8,0xA2,0x00,0x00,}},
- {0x4E0D,2,{0xB2,0xBB,0x00,0x00,}},
- {0x4E0E,2,{0xD3,0xEB,0x00,0x00,}},
- {0x4E0F,2,{0x81,0x44,0x00,0x00,}},
- {0x4E10,2,{0xD8,0xA4,0x00,0x00,}},
- {0x4E11,2,{0xB3,0xF3,0x00,0x00,}},
- {0x4E12,2,{0x81,0x45,0x00,0x00,}},
- {0x4E13,2,{0xD7,0xA8,0x00,0x00,}},
- {0x4E14,2,{0xC7,0xD2,0x00,0x00,}},
- {0x4E15,2,{0xD8,0xA7,0x00,0x00,}},
- {0x4E16,2,{0xCA,0xC0,0x00,0x00,}},
- {0x4E17,2,{0x81,0x46,0x00,0x00,}},
- {0x4E18,2,{0xC7,0xF0,0x00,0x00,}},
- {0x4E19,2,{0xB1,0xFB,0x00,0x00,}},
- {0x4E1A,2,{0xD2,0xB5,0x00,0x00,}},
- {0x4E1B,2,{0xB4,0xD4,0x00,0x00,}},
- {0x4E1C,2,{0xB6,0xAB,0x00,0x00,}},
- {0x4E1D,2,{0xCB,0xBF,0x00,0x00,}},
- {0x4E1E,2,{0xD8,0xA9,0x00,0x00,}},
- {0x4E1F,2,{0x81,0x47,0x00,0x00,}},
- {0x4E20,2,{0x81,0x48,0x00,0x00,}},
- {0x4E21,2,{0x81,0x49,0x00,0x00,}},
- {0x4E22,2,{0xB6,0xAA,0x00,0x00,}},
- {0x4E23,2,{0x81,0x4A,0x00,0x00,}},
- {0x4E24,2,{0xC1,0xBD,0x00,0x00,}},
- {0x4E25,2,{0xD1,0xCF,0x00,0x00,}},
- {0x4E26,2,{0x81,0x4B,0x00,0x00,}},
- {0x4E27,2,{0xC9,0xA5,0x00,0x00,}},
- {0x4E28,2,{0xD8,0xAD,0x00,0x00,}},
- {0x4E29,2,{0x81,0x4C,0x00,0x00,}},
- {0x4E2A,2,{0xB8,0xF6,0x00,0x00,}},
- {0x4E2B,2,{0xD1,0xBE,0x00,0x00,}},
- {0x4E2C,2,{0xE3,0xDC,0x00,0x00,}},
- {0x4E2D,2,{0xD6,0xD0,0x00,0x00,}},
- {0x4E2E,2,{0x81,0x4D,0x00,0x00,}},
- {0x4E2F,2,{0x81,0x4E,0x00,0x00,}},
- {0x4E30,2,{0xB7,0xE1,0x00,0x00,}},
- {0x4E31,2,{0x81,0x4F,0x00,0x00,}},
- {0x4E32,2,{0xB4,0xAE,0x00,0x00,}},
- {0x4E33,2,{0x81,0x50,0x00,0x00,}},
- {0x4E34,2,{0xC1,0xD9,0x00,0x00,}},
- {0x4E35,2,{0x81,0x51,0x00,0x00,}},
- {0x4E36,2,{0xD8,0xBC,0x00,0x00,}},
- {0x4E37,2,{0x81,0x52,0x00,0x00,}},
- {0x4E38,2,{0xCD,0xE8,0x00,0x00,}},
- {0x4E39,2,{0xB5,0xA4,0x00,0x00,}},
- {0x4E3A,2,{0xCE,0xAA,0x00,0x00,}},
- {0x4E3B,2,{0xD6,0xF7,0x00,0x00,}},
- {0x4E3C,2,{0x81,0x53,0x00,0x00,}},
- {0x4E3D,2,{0xC0,0xF6,0x00,0x00,}},
- {0x4E3E,2,{0xBE,0xD9,0x00,0x00,}},
- {0x4E3F,2,{0xD8,0xAF,0x00,0x00,}},
- {0x4E40,2,{0x81,0x54,0x00,0x00,}},
- {0x4E41,2,{0x81,0x55,0x00,0x00,}},
- {0x4E42,2,{0x81,0x56,0x00,0x00,}},
- {0x4E43,2,{0xC4,0xCB,0x00,0x00,}},
- {0x4E44,2,{0x81,0x57,0x00,0x00,}},
- {0x4E45,2,{0xBE,0xC3,0x00,0x00,}},
- {0x4E46,2,{0x81,0x58,0x00,0x00,}},
- {0x4E47,2,{0xD8,0xB1,0x00,0x00,}},
- {0x4E48,2,{0xC3,0xB4,0x00,0x00,}},
- {0x4E49,2,{0xD2,0xE5,0x00,0x00,}},
- {0x4E4A,2,{0x81,0x59,0x00,0x00,}},
- {0x4E4B,2,{0xD6,0xAE,0x00,0x00,}},
- {0x4E4C,2,{0xCE,0xDA,0x00,0x00,}},
- {0x4E4D,2,{0xD5,0xA7,0x00,0x00,}},
- {0x4E4E,2,{0xBA,0xF5,0x00,0x00,}},
- {0x4E4F,2,{0xB7,0xA6,0x00,0x00,}},
- {0x4E50,2,{0xC0,0xD6,0x00,0x00,}},
- {0x4E51,2,{0x81,0x5A,0x00,0x00,}},
- {0x4E52,2,{0xC6,0xB9,0x00,0x00,}},
- {0x4E53,2,{0xC5,0xD2,0x00,0x00,}},
- {0x4E54,2,{0xC7,0xC7,0x00,0x00,}},
- {0x4E55,2,{0x81,0x5B,0x00,0x00,}},
- {0x4E56,2,{0xB9,0xD4,0x00,0x00,}},
- {0x4E57,2,{0x81,0x5C,0x00,0x00,}},
- {0x4E58,2,{0xB3,0xCB,0x00,0x00,}},
- {0x4E59,2,{0xD2,0xD2,0x00,0x00,}},
- {0x4E5A,2,{0x81,0x5D,0x00,0x00,}},
- {0x4E5B,2,{0x81,0x5E,0x00,0x00,}},
- {0x4E5C,2,{0xD8,0xBF,0x00,0x00,}},
- {0x4E5D,2,{0xBE,0xC5,0x00,0x00,}},
- {0x4E5E,2,{0xC6,0xF2,0x00,0x00,}},
- {0x4E5F,2,{0xD2,0xB2,0x00,0x00,}},
- {0x4E60,2,{0xCF,0xB0,0x00,0x00,}},
- {0x4E61,2,{0xCF,0xE7,0x00,0x00,}},
- {0x4E62,2,{0x81,0x5F,0x00,0x00,}},
- {0x4E63,2,{0x81,0x60,0x00,0x00,}},
- {0x4E64,2,{0x81,0x61,0x00,0x00,}},
- {0x4E65,2,{0x81,0x62,0x00,0x00,}},
- {0x4E66,2,{0xCA,0xE9,0x00,0x00,}},
- {0x4E67,2,{0x81,0x63,0x00,0x00,}},
- {0x4E68,2,{0x81,0x64,0x00,0x00,}},
- {0x4E69,2,{0xD8,0xC0,0x00,0x00,}},
- {0x4E6A,2,{0x81,0x65,0x00,0x00,}},
- {0x4E6B,2,{0x81,0x66,0x00,0x00,}},
- {0x4E6C,2,{0x81,0x67,0x00,0x00,}},
- {0x4E6D,2,{0x81,0x68,0x00,0x00,}},
- {0x4E6E,2,{0x81,0x69,0x00,0x00,}},
- {0x4E6F,2,{0x81,0x6A,0x00,0x00,}},
- {0x4E70,2,{0xC2,0xF2,0x00,0x00,}},
- {0x4E71,2,{0xC2,0xD2,0x00,0x00,}},
- {0x4E72,2,{0x81,0x6B,0x00,0x00,}},
- {0x4E73,2,{0xC8,0xE9,0x00,0x00,}},
- {0x4E74,2,{0x81,0x6C,0x00,0x00,}},
- {0x4E75,2,{0x81,0x6D,0x00,0x00,}},
- {0x4E76,2,{0x81,0x6E,0x00,0x00,}},
- {0x4E77,2,{0x81,0x6F,0x00,0x00,}},
- {0x4E78,2,{0x81,0x70,0x00,0x00,}},
- {0x4E79,2,{0x81,0x71,0x00,0x00,}},
- {0x4E7A,2,{0x81,0x72,0x00,0x00,}},
- {0x4E7B,2,{0x81,0x73,0x00,0x00,}},
- {0x4E7C,2,{0x81,0x74,0x00,0x00,}},
- {0x4E7D,2,{0x81,0x75,0x00,0x00,}},
- {0x4E7E,2,{0xC7,0xAC,0x00,0x00,}},
- {0x4E7F,2,{0x81,0x76,0x00,0x00,}},
- {0x4E80,2,{0x81,0x77,0x00,0x00,}},
- {0x4E81,2,{0x81,0x78,0x00,0x00,}},
- {0x4E82,2,{0x81,0x79,0x00,0x00,}},
- {0x4E83,2,{0x81,0x7A,0x00,0x00,}},
- {0x4E84,2,{0x81,0x7B,0x00,0x00,}},
- {0x4E85,2,{0x81,0x7C,0x00,0x00,}},
- {0x4E86,2,{0xC1,0xCB,0x00,0x00,}},
- {0x4E87,2,{0x81,0x7D,0x00,0x00,}},
- {0x4E88,2,{0xD3,0xE8,0x00,0x00,}},
- {0x4E89,2,{0xD5,0xF9,0x00,0x00,}},
- {0x4E8A,2,{0x81,0x7E,0x00,0x00,}},
- {0x4E8B,2,{0xCA,0xC2,0x00,0x00,}},
- {0x4E8C,2,{0xB6,0xFE,0x00,0x00,}},
- {0x4E8D,2,{0xD8,0xA1,0x00,0x00,}},
- {0x4E8E,2,{0xD3,0xDA,0x00,0x00,}},
- {0x4E8F,2,{0xBF,0xF7,0x00,0x00,}},
- {0x4E90,2,{0x81,0x80,0x00,0x00,}},
- {0x4E91,2,{0xD4,0xC6,0x00,0x00,}},
- {0x4E92,2,{0xBB,0xA5,0x00,0x00,}},
- {0x4E93,2,{0xD8,0xC1,0x00,0x00,}},
- {0x4E94,2,{0xCE,0xE5,0x00,0x00,}},
- {0x4E95,2,{0xBE,0xAE,0x00,0x00,}},
- {0x4E96,2,{0x81,0x81,0x00,0x00,}},
- {0x4E97,2,{0x81,0x82,0x00,0x00,}},
- {0x4E98,2,{0xD8,0xA8,0x00,0x00,}},
- {0x4E99,2,{0x81,0x83,0x00,0x00,}},
- {0x4E9A,2,{0xD1,0xC7,0x00,0x00,}},
- {0x4E9B,2,{0xD0,0xA9,0x00,0x00,}},
- {0x4E9C,2,{0x81,0x84,0x00,0x00,}},
- {0x4E9D,2,{0x81,0x85,0x00,0x00,}},
- {0x4E9E,2,{0x81,0x86,0x00,0x00,}},
- {0x4E9F,2,{0xD8,0xBD,0x00,0x00,}},
- {0x4EA0,2,{0xD9,0xEF,0x00,0x00,}},
- {0x4EA1,2,{0xCD,0xF6,0x00,0x00,}},
- {0x4EA2,2,{0xBF,0xBA,0x00,0x00,}},
- {0x4EA3,2,{0x81,0x87,0x00,0x00,}},
- {0x4EA4,2,{0xBD,0xBB,0x00,0x00,}},
- {0x4EA5,2,{0xBA,0xA5,0x00,0x00,}},
- {0x4EA6,2,{0xD2,0xE0,0x00,0x00,}},
- {0x4EA7,2,{0xB2,0xFA,0x00,0x00,}},
- {0x4EA8,2,{0xBA,0xE0,0x00,0x00,}},
- {0x4EA9,2,{0xC4,0xB6,0x00,0x00,}},
- {0x4EAA,2,{0x81,0x88,0x00,0x00,}},
- {0x4EAB,2,{0xCF,0xED,0x00,0x00,}},
- {0x4EAC,2,{0xBE,0xA9,0x00,0x00,}},
- {0x4EAD,2,{0xCD,0xA4,0x00,0x00,}},
- {0x4EAE,2,{0xC1,0xC1,0x00,0x00,}},
- {0x4EAF,2,{0x81,0x89,0x00,0x00,}},
- {0x4EB0,2,{0x81,0x8A,0x00,0x00,}},
- {0x4EB1,2,{0x81,0x8B,0x00,0x00,}},
- {0x4EB2,2,{0xC7,0xD7,0x00,0x00,}},
- {0x4EB3,2,{0xD9,0xF1,0x00,0x00,}},
- {0x4EB4,2,{0x81,0x8C,0x00,0x00,}},
- {0x4EB5,2,{0xD9,0xF4,0x00,0x00,}},
- {0x4EB6,2,{0x81,0x8D,0x00,0x00,}},
- {0x4EB7,2,{0x81,0x8E,0x00,0x00,}},
- {0x4EB8,2,{0x81,0x8F,0x00,0x00,}},
- {0x4EB9,2,{0x81,0x90,0x00,0x00,}},
- {0x4EBA,2,{0xC8,0xCB,0x00,0x00,}},
- {0x4EBB,2,{0xD8,0xE9,0x00,0x00,}},
- {0x4EBC,2,{0x81,0x91,0x00,0x00,}},
- {0x4EBD,2,{0x81,0x92,0x00,0x00,}},
- {0x4EBE,2,{0x81,0x93,0x00,0x00,}},
- {0x4EBF,2,{0xD2,0xDA,0x00,0x00,}},
- {0x4EC0,2,{0xCA,0xB2,0x00,0x00,}},
- {0x4EC1,2,{0xC8,0xCA,0x00,0x00,}},
- {0x4EC2,2,{0xD8,0xEC,0x00,0x00,}},
- {0x4EC3,2,{0xD8,0xEA,0x00,0x00,}},
- {0x4EC4,2,{0xD8,0xC6,0x00,0x00,}},
- {0x4EC5,2,{0xBD,0xF6,0x00,0x00,}},
- {0x4EC6,2,{0xC6,0xCD,0x00,0x00,}},
- {0x4EC7,2,{0xB3,0xF0,0x00,0x00,}},
- {0x4EC8,2,{0x81,0x94,0x00,0x00,}},
- {0x4EC9,2,{0xD8,0xEB,0x00,0x00,}},
- {0x4ECA,2,{0xBD,0xF1,0x00,0x00,}},
- {0x4ECB,2,{0xBD,0xE9,0x00,0x00,}},
- {0x4ECC,2,{0x81,0x95,0x00,0x00,}},
- {0x4ECD,2,{0xC8,0xD4,0x00,0x00,}},
- {0x4ECE,2,{0xB4,0xD3,0x00,0x00,}},
- {0x4ECF,2,{0x81,0x96,0x00,0x00,}},
- {0x4ED0,2,{0x81,0x97,0x00,0x00,}},
- {0x4ED1,2,{0xC2,0xD8,0x00,0x00,}},
- {0x4ED2,2,{0x81,0x98,0x00,0x00,}},
- {0x4ED3,2,{0xB2,0xD6,0x00,0x00,}},
- {0x4ED4,2,{0xD7,0xD0,0x00,0x00,}},
- {0x4ED5,2,{0xCA,0xCB,0x00,0x00,}},
- {0x4ED6,2,{0xCB,0xFB,0x00,0x00,}},
- {0x4ED7,2,{0xD5,0xCC,0x00,0x00,}},
- {0x4ED8,2,{0xB8,0xB6,0x00,0x00,}},
- {0x4ED9,2,{0xCF,0xC9,0x00,0x00,}},
- {0x4EDA,2,{0x81,0x99,0x00,0x00,}},
- {0x4EDB,2,{0x81,0x9A,0x00,0x00,}},
- {0x4EDC,2,{0x81,0x9B,0x00,0x00,}},
- {0x4EDD,2,{0xD9,0xDA,0x00,0x00,}},
- {0x4EDE,2,{0xD8,0xF0,0x00,0x00,}},
- {0x4EDF,2,{0xC7,0xAA,0x00,0x00,}},
- {0x4EE0,2,{0x81,0x9C,0x00,0x00,}},
- {0x4EE1,2,{0xD8,0xEE,0x00,0x00,}},
- {0x4EE2,2,{0x81,0x9D,0x00,0x00,}},
- {0x4EE3,2,{0xB4,0xFA,0x00,0x00,}},
- {0x4EE4,2,{0xC1,0xEE,0x00,0x00,}},
- {0x4EE5,2,{0xD2,0xD4,0x00,0x00,}},
- {0x4EE6,2,{0x81,0x9E,0x00,0x00,}},
- {0x4EE7,2,{0x81,0x9F,0x00,0x00,}},
- {0x4EE8,2,{0xD8,0xED,0x00,0x00,}},
- {0x4EE9,2,{0x81,0xA0,0x00,0x00,}},
- {0x4EEA,2,{0xD2,0xC7,0x00,0x00,}},
- {0x4EEB,2,{0xD8,0xEF,0x00,0x00,}},
- {0x4EEC,2,{0xC3,0xC7,0x00,0x00,}},
- {0x4EED,2,{0x81,0xA1,0x00,0x00,}},
- {0x4EEE,2,{0x81,0xA2,0x00,0x00,}},
- {0x4EEF,2,{0x81,0xA3,0x00,0x00,}},
- {0x4EF0,2,{0xD1,0xF6,0x00,0x00,}},
- {0x4EF1,2,{0x81,0xA4,0x00,0x00,}},
- {0x4EF2,2,{0xD6,0xD9,0x00,0x00,}},
- {0x4EF3,2,{0xD8,0xF2,0x00,0x00,}},
- {0x4EF4,2,{0x81,0xA5,0x00,0x00,}},
- {0x4EF5,2,{0xD8,0xF5,0x00,0x00,}},
- {0x4EF6,2,{0xBC,0xFE,0x00,0x00,}},
- {0x4EF7,2,{0xBC,0xDB,0x00,0x00,}},
- {0x4EF8,2,{0x81,0xA6,0x00,0x00,}},
- {0x4EF9,2,{0x81,0xA7,0x00,0x00,}},
- {0x4EFA,2,{0x81,0xA8,0x00,0x00,}},
- {0x4EFB,2,{0xC8,0xCE,0x00,0x00,}},
- {0x4EFC,2,{0x81,0xA9,0x00,0x00,}},
- {0x4EFD,2,{0xB7,0xDD,0x00,0x00,}},
- {0x4EFE,2,{0x81,0xAA,0x00,0x00,}},
- {0x4EFF,2,{0xB7,0xC2,0x00,0x00,}},
- {0x4F00,2,{0x81,0xAB,0x00,0x00,}},
- {0x4F01,2,{0xC6,0xF3,0x00,0x00,}},
- {0x4F02,2,{0x81,0xAC,0x00,0x00,}},
- {0x4F03,2,{0x81,0xAD,0x00,0x00,}},
- {0x4F04,2,{0x81,0xAE,0x00,0x00,}},
- {0x4F05,2,{0x81,0xAF,0x00,0x00,}},
- {0x4F06,2,{0x81,0xB0,0x00,0x00,}},
- {0x4F07,2,{0x81,0xB1,0x00,0x00,}},
- {0x4F08,2,{0x81,0xB2,0x00,0x00,}},
- {0x4F09,2,{0xD8,0xF8,0x00,0x00,}},
- {0x4F0A,2,{0xD2,0xC1,0x00,0x00,}},
- {0x4F0B,2,{0x81,0xB3,0x00,0x00,}},
- {0x4F0C,2,{0x81,0xB4,0x00,0x00,}},
- {0x4F0D,2,{0xCE,0xE9,0x00,0x00,}},
- {0x4F0E,2,{0xBC,0xBF,0x00,0x00,}},
- {0x4F0F,2,{0xB7,0xFC,0x00,0x00,}},
- {0x4F10,2,{0xB7,0xA5,0x00,0x00,}},
- {0x4F11,2,{0xD0,0xDD,0x00,0x00,}},
- {0x4F12,2,{0x81,0xB5,0x00,0x00,}},
- {0x4F13,2,{0x81,0xB6,0x00,0x00,}},
- {0x4F14,2,{0x81,0xB7,0x00,0x00,}},
- {0x4F15,2,{0x81,0xB8,0x00,0x00,}},
- {0x4F16,2,{0x81,0xB9,0x00,0x00,}},
- {0x4F17,2,{0xD6,0xDA,0x00,0x00,}},
- {0x4F18,2,{0xD3,0xC5,0x00,0x00,}},
- {0x4F19,2,{0xBB,0xEF,0x00,0x00,}},
- {0x4F1A,2,{0xBB,0xE1,0x00,0x00,}},
- {0x4F1B,2,{0xD8,0xF1,0x00,0x00,}},
- {0x4F1C,2,{0x81,0xBA,0x00,0x00,}},
- {0x4F1D,2,{0x81,0xBB,0x00,0x00,}},
- {0x4F1E,2,{0xC9,0xA1,0x00,0x00,}},
- {0x4F1F,2,{0xCE,0xB0,0x00,0x00,}},
- {0x4F20,2,{0xB4,0xAB,0x00,0x00,}},
- {0x4F21,2,{0x81,0xBC,0x00,0x00,}},
- {0x4F22,2,{0xD8,0xF3,0x00,0x00,}},
- {0x4F23,2,{0x81,0xBD,0x00,0x00,}},
- {0x4F24,2,{0xC9,0xCB,0x00,0x00,}},
- {0x4F25,2,{0xD8,0xF6,0x00,0x00,}},
- {0x4F26,2,{0xC2,0xD7,0x00,0x00,}},
- {0x4F27,2,{0xD8,0xF7,0x00,0x00,}},
- {0x4F28,2,{0x81,0xBE,0x00,0x00,}},
- {0x4F29,2,{0x81,0xBF,0x00,0x00,}},
- {0x4F2A,2,{0xCE,0xB1,0x00,0x00,}},
- {0x4F2B,2,{0xD8,0xF9,0x00,0x00,}},
- {0x4F2C,2,{0x81,0xC0,0x00,0x00,}},
- {0x4F2D,2,{0x81,0xC1,0x00,0x00,}},
- {0x4F2E,2,{0x81,0xC2,0x00,0x00,}},
- {0x4F2F,2,{0xB2,0xAE,0x00,0x00,}},
- {0x4F30,2,{0xB9,0xC0,0x00,0x00,}},
- {0x4F31,2,{0x81,0xC3,0x00,0x00,}},
- {0x4F32,2,{0xD9,0xA3,0x00,0x00,}},
- {0x4F33,2,{0x81,0xC4,0x00,0x00,}},
- {0x4F34,2,{0xB0,0xE9,0x00,0x00,}},
- {0x4F35,2,{0x81,0xC5,0x00,0x00,}},
- {0x4F36,2,{0xC1,0xE6,0x00,0x00,}},
- {0x4F37,2,{0x81,0xC6,0x00,0x00,}},
- {0x4F38,2,{0xC9,0xEC,0x00,0x00,}},
- {0x4F39,2,{0x81,0xC7,0x00,0x00,}},
- {0x4F3A,2,{0xCB,0xC5,0x00,0x00,}},
- {0x4F3B,2,{0x81,0xC8,0x00,0x00,}},
- {0x4F3C,2,{0xCB,0xC6,0x00,0x00,}},
- {0x4F3D,2,{0xD9,0xA4,0x00,0x00,}},
- {0x4F3E,2,{0x81,0xC9,0x00,0x00,}},
- {0x4F3F,2,{0x81,0xCA,0x00,0x00,}},
- {0x4F40,2,{0x81,0xCB,0x00,0x00,}},
- {0x4F41,2,{0x81,0xCC,0x00,0x00,}},
- {0x4F42,2,{0x81,0xCD,0x00,0x00,}},
- {0x4F43,2,{0xB5,0xE8,0x00,0x00,}},
- {0x4F44,2,{0x81,0xCE,0x00,0x00,}},
- {0x4F45,2,{0x81,0xCF,0x00,0x00,}},
- {0x4F46,2,{0xB5,0xAB,0x00,0x00,}},
- {0x4F47,2,{0x81,0xD0,0x00,0x00,}},
- {0x4F48,2,{0x81,0xD1,0x00,0x00,}},
- {0x4F49,2,{0x81,0xD2,0x00,0x00,}},
- {0x4F4A,2,{0x81,0xD3,0x00,0x00,}},
- {0x4F4B,2,{0x81,0xD4,0x00,0x00,}},
- {0x4F4C,2,{0x81,0xD5,0x00,0x00,}},
- {0x4F4D,2,{0xCE,0xBB,0x00,0x00,}},
- {0x4F4E,2,{0xB5,0xCD,0x00,0x00,}},
- {0x4F4F,2,{0xD7,0xA1,0x00,0x00,}},
- {0x4F50,2,{0xD7,0xF4,0x00,0x00,}},
- {0x4F51,2,{0xD3,0xD3,0x00,0x00,}},
- {0x4F52,2,{0x81,0xD6,0x00,0x00,}},
- {0x4F53,2,{0xCC,0xE5,0x00,0x00,}},
- {0x4F54,2,{0x81,0xD7,0x00,0x00,}},
- {0x4F55,2,{0xBA,0xCE,0x00,0x00,}},
- {0x4F56,2,{0x81,0xD8,0x00,0x00,}},
- {0x4F57,2,{0xD9,0xA2,0x00,0x00,}},
- {0x4F58,2,{0xD9,0xDC,0x00,0x00,}},
- {0x4F59,2,{0xD3,0xE0,0x00,0x00,}},
- {0x4F5A,2,{0xD8,0xFD,0x00,0x00,}},
- {0x4F5B,2,{0xB7,0xF0,0x00,0x00,}},
- {0x4F5C,2,{0xD7,0xF7,0x00,0x00,}},
- {0x4F5D,2,{0xD8,0xFE,0x00,0x00,}},
- {0x4F5E,2,{0xD8,0xFA,0x00,0x00,}},
- {0x4F5F,2,{0xD9,0xA1,0x00,0x00,}},
- {0x4F60,2,{0xC4,0xE3,0x00,0x00,}},
- {0x4F61,2,{0x81,0xD9,0x00,0x00,}},
- {0x4F62,2,{0x81,0xDA,0x00,0x00,}},
- {0x4F63,2,{0xD3,0xB6,0x00,0x00,}},
- {0x4F64,2,{0xD8,0xF4,0x00,0x00,}},
- {0x4F65,2,{0xD9,0xDD,0x00,0x00,}},
- {0x4F66,2,{0x81,0xDB,0x00,0x00,}},
- {0x4F67,2,{0xD8,0xFB,0x00,0x00,}},
- {0x4F68,2,{0x81,0xDC,0x00,0x00,}},
- {0x4F69,2,{0xC5,0xE5,0x00,0x00,}},
- {0x4F6A,2,{0x81,0xDD,0x00,0x00,}},
- {0x4F6B,2,{0x81,0xDE,0x00,0x00,}},
- {0x4F6C,2,{0xC0,0xD0,0x00,0x00,}},
- {0x4F6D,2,{0x81,0xDF,0x00,0x00,}},
- {0x4F6E,2,{0x81,0xE0,0x00,0x00,}},
- {0x4F6F,2,{0xD1,0xF0,0x00,0x00,}},
- {0x4F70,2,{0xB0,0xDB,0x00,0x00,}},
- {0x4F71,2,{0x81,0xE1,0x00,0x00,}},
- {0x4F72,2,{0x81,0xE2,0x00,0x00,}},
- {0x4F73,2,{0xBC,0xD1,0x00,0x00,}},
- {0x4F74,2,{0xD9,0xA6,0x00,0x00,}},
- {0x4F75,2,{0x81,0xE3,0x00,0x00,}},
- {0x4F76,2,{0xD9,0xA5,0x00,0x00,}},
- {0x4F77,2,{0x81,0xE4,0x00,0x00,}},
- {0x4F78,2,{0x81,0xE5,0x00,0x00,}},
- {0x4F79,2,{0x81,0xE6,0x00,0x00,}},
- {0x4F7A,2,{0x81,0xE7,0x00,0x00,}},
- {0x4F7B,2,{0xD9,0xAC,0x00,0x00,}},
- {0x4F7C,2,{0xD9,0xAE,0x00,0x00,}},
- {0x4F7D,2,{0x81,0xE8,0x00,0x00,}},
- {0x4F7E,2,{0xD9,0xAB,0x00,0x00,}},
- {0x4F7F,2,{0xCA,0xB9,0x00,0x00,}},
- {0x4F80,2,{0x81,0xE9,0x00,0x00,}},
- {0x4F81,2,{0x81,0xEA,0x00,0x00,}},
- {0x4F82,2,{0x81,0xEB,0x00,0x00,}},
- {0x4F83,2,{0xD9,0xA9,0x00,0x00,}},
- {0x4F84,2,{0xD6,0xB6,0x00,0x00,}},
- {0x4F85,2,{0x81,0xEC,0x00,0x00,}},
- {0x4F86,2,{0x81,0xED,0x00,0x00,}},
- {0x4F87,2,{0x81,0xEE,0x00,0x00,}},
- {0x4F88,2,{0xB3,0xDE,0x00,0x00,}},
- {0x4F89,2,{0xD9,0xA8,0x00,0x00,}},
- {0x4F8A,2,{0x81,0xEF,0x00,0x00,}},
- {0x4F8B,2,{0xC0,0xFD,0x00,0x00,}},
- {0x4F8C,2,{0x81,0xF0,0x00,0x00,}},
- {0x4F8D,2,{0xCA,0xCC,0x00,0x00,}},
- {0x4F8E,2,{0x81,0xF1,0x00,0x00,}},
- {0x4F8F,2,{0xD9,0xAA,0x00,0x00,}},
- {0x4F90,2,{0x81,0xF2,0x00,0x00,}},
- {0x4F91,2,{0xD9,0xA7,0x00,0x00,}},
- {0x4F92,2,{0x81,0xF3,0x00,0x00,}},
- {0x4F93,2,{0x81,0xF4,0x00,0x00,}},
- {0x4F94,2,{0xD9,0xB0,0x00,0x00,}},
- {0x4F95,2,{0x81,0xF5,0x00,0x00,}},
- {0x4F96,2,{0x81,0xF6,0x00,0x00,}},
- {0x4F97,2,{0xB6,0xB1,0x00,0x00,}},
- {0x4F98,2,{0x81,0xF7,0x00,0x00,}},
- {0x4F99,2,{0x81,0xF8,0x00,0x00,}},
- {0x4F9A,2,{0x81,0xF9,0x00,0x00,}},
- {0x4F9B,2,{0xB9,0xA9,0x00,0x00,}},
- {0x4F9C,2,{0x81,0xFA,0x00,0x00,}},
- {0x4F9D,2,{0xD2,0xC0,0x00,0x00,}},
- {0x4F9E,2,{0x81,0xFB,0x00,0x00,}},
- {0x4F9F,2,{0x81,0xFC,0x00,0x00,}},
- {0x4FA0,2,{0xCF,0xC0,0x00,0x00,}},
- {0x4FA1,2,{0x81,0xFD,0x00,0x00,}},
- {0x4FA2,2,{0x81,0xFE,0x00,0x00,}},
- {0x4FA3,2,{0xC2,0xC2,0x00,0x00,}},
- {0x4FA4,2,{0x82,0x40,0x00,0x00,}},
- {0x4FA5,2,{0xBD,0xC4,0x00,0x00,}},
- {0x4FA6,2,{0xD5,0xEC,0x00,0x00,}},
- {0x4FA7,2,{0xB2,0xE0,0x00,0x00,}},
- {0x4FA8,2,{0xC7,0xC8,0x00,0x00,}},
- {0x4FA9,2,{0xBF,0xEB,0x00,0x00,}},
- {0x4FAA,2,{0xD9,0xAD,0x00,0x00,}},
- {0x4FAB,2,{0x82,0x41,0x00,0x00,}},
- {0x4FAC,2,{0xD9,0xAF,0x00,0x00,}},
- {0x4FAD,2,{0x82,0x42,0x00,0x00,}},
- {0x4FAE,2,{0xCE,0xEA,0x00,0x00,}},
- {0x4FAF,2,{0xBA,0xEE,0x00,0x00,}},
- {0x4FB0,2,{0x82,0x43,0x00,0x00,}},
- {0x4FB1,2,{0x82,0x44,0x00,0x00,}},
- {0x4FB2,2,{0x82,0x45,0x00,0x00,}},
- {0x4FB3,2,{0x82,0x46,0x00,0x00,}},
- {0x4FB4,2,{0x82,0x47,0x00,0x00,}},
- {0x4FB5,2,{0xC7,0xD6,0x00,0x00,}},
- {0x4FB6,2,{0x82,0x48,0x00,0x00,}},
- {0x4FB7,2,{0x82,0x49,0x00,0x00,}},
- {0x4FB8,2,{0x82,0x4A,0x00,0x00,}},
- {0x4FB9,2,{0x82,0x4B,0x00,0x00,}},
- {0x4FBA,2,{0x82,0x4C,0x00,0x00,}},
- {0x4FBB,2,{0x82,0x4D,0x00,0x00,}},
- {0x4FBC,2,{0x82,0x4E,0x00,0x00,}},
- {0x4FBD,2,{0x82,0x4F,0x00,0x00,}},
- {0x4FBE,2,{0x82,0x50,0x00,0x00,}},
- {0x4FBF,2,{0xB1,0xE3,0x00,0x00,}},
- {0x4FC0,2,{0x82,0x51,0x00,0x00,}},
- {0x4FC1,2,{0x82,0x52,0x00,0x00,}},
- {0x4FC2,2,{0x82,0x53,0x00,0x00,}},
- {0x4FC3,2,{0xB4,0xD9,0x00,0x00,}},
- {0x4FC4,2,{0xB6,0xED,0x00,0x00,}},
- {0x4FC5,2,{0xD9,0xB4,0x00,0x00,}},
- {0x4FC6,2,{0x82,0x54,0x00,0x00,}},
- {0x4FC7,2,{0x82,0x55,0x00,0x00,}},
- {0x4FC8,2,{0x82,0x56,0x00,0x00,}},
- {0x4FC9,2,{0x82,0x57,0x00,0x00,}},
- {0x4FCA,2,{0xBF,0xA1,0x00,0x00,}},
- {0x4FCB,2,{0x82,0x58,0x00,0x00,}},
- {0x4FCC,2,{0x82,0x59,0x00,0x00,}},
- {0x4FCD,2,{0x82,0x5A,0x00,0x00,}},
- {0x4FCE,2,{0xD9,0xDE,0x00,0x00,}},
- {0x4FCF,2,{0xC7,0xCE,0x00,0x00,}},
- {0x4FD0,2,{0xC0,0xFE,0x00,0x00,}},
- {0x4FD1,2,{0xD9,0xB8,0x00,0x00,}},
- {0x4FD2,2,{0x82,0x5B,0x00,0x00,}},
- {0x4FD3,2,{0x82,0x5C,0x00,0x00,}},
- {0x4FD4,2,{0x82,0x5D,0x00,0x00,}},
- {0x4FD5,2,{0x82,0x5E,0x00,0x00,}},
- {0x4FD6,2,{0x82,0x5F,0x00,0x00,}},
- {0x4FD7,2,{0xCB,0xD7,0x00,0x00,}},
- {0x4FD8,2,{0xB7,0xFD,0x00,0x00,}},
- {0x4FD9,2,{0x82,0x60,0x00,0x00,}},
- {0x4FDA,2,{0xD9,0xB5,0x00,0x00,}},
- {0x4FDB,2,{0x82,0x61,0x00,0x00,}},
- {0x4FDC,2,{0xD9,0xB7,0x00,0x00,}},
- {0x4FDD,2,{0xB1,0xA3,0x00,0x00,}},
- {0x4FDE,2,{0xD3,0xE1,0x00,0x00,}},
- {0x4FDF,2,{0xD9,0xB9,0x00,0x00,}},
- {0x4FE0,2,{0x82,0x62,0x00,0x00,}},
- {0x4FE1,2,{0xD0,0xC5,0x00,0x00,}},
- {0x4FE2,2,{0x82,0x63,0x00,0x00,}},
- {0x4FE3,2,{0xD9,0xB6,0x00,0x00,}},
- {0x4FE4,2,{0x82,0x64,0x00,0x00,}},
- {0x4FE5,2,{0x82,0x65,0x00,0x00,}},
- {0x4FE6,2,{0xD9,0xB1,0x00,0x00,}},
- {0x4FE7,2,{0x82,0x66,0x00,0x00,}},
- {0x4FE8,2,{0xD9,0xB2,0x00,0x00,}},
- {0x4FE9,2,{0xC1,0xA9,0x00,0x00,}},
- {0x4FEA,2,{0xD9,0xB3,0x00,0x00,}},
- {0x4FEB,2,{0x82,0x67,0x00,0x00,}},
- {0x4FEC,2,{0x82,0x68,0x00,0x00,}},
- {0x4FED,2,{0xBC,0xF3,0x00,0x00,}},
- {0x4FEE,2,{0xD0,0xDE,0x00,0x00,}},
- {0x4FEF,2,{0xB8,0xA9,0x00,0x00,}},
- {0x4FF0,2,{0x82,0x69,0x00,0x00,}},
- {0x4FF1,2,{0xBE,0xE3,0x00,0x00,}},
- {0x4FF2,2,{0x82,0x6A,0x00,0x00,}},
- {0x4FF3,2,{0xD9,0xBD,0x00,0x00,}},
- {0x4FF4,2,{0x82,0x6B,0x00,0x00,}},
- {0x4FF5,2,{0x82,0x6C,0x00,0x00,}},
- {0x4FF6,2,{0x82,0x6D,0x00,0x00,}},
- {0x4FF7,2,{0x82,0x6E,0x00,0x00,}},
- {0x4FF8,2,{0xD9,0xBA,0x00,0x00,}},
- {0x4FF9,2,{0x82,0x6F,0x00,0x00,}},
- {0x4FFA,2,{0xB0,0xB3,0x00,0x00,}},
- {0x4FFB,2,{0x82,0x70,0x00,0x00,}},
- {0x4FFC,2,{0x82,0x71,0x00,0x00,}},
- {0x4FFD,2,{0x82,0x72,0x00,0x00,}},
- {0x4FFE,2,{0xD9,0xC2,0x00,0x00,}},
- {0x4FFF,2,{0x82,0x73,0x00,0x00,}},
- {0x5000,2,{0x82,0x74,0x00,0x00,}},
- {0x5001,2,{0x82,0x75,0x00,0x00,}},
- {0x5002,2,{0x82,0x76,0x00,0x00,}},
- {0x5003,2,{0x82,0x77,0x00,0x00,}},
- {0x5004,2,{0x82,0x78,0x00,0x00,}},
- {0x5005,2,{0x82,0x79,0x00,0x00,}},
- {0x5006,2,{0x82,0x7A,0x00,0x00,}},
- {0x5007,2,{0x82,0x7B,0x00,0x00,}},
- {0x5008,2,{0x82,0x7C,0x00,0x00,}},
- {0x5009,2,{0x82,0x7D,0x00,0x00,}},
- {0x500A,2,{0x82,0x7E,0x00,0x00,}},
- {0x500B,2,{0x82,0x80,0x00,0x00,}},
- {0x500C,2,{0xD9,0xC4,0x00,0x00,}},
- {0x500D,2,{0xB1,0xB6,0x00,0x00,}},
- {0x500E,2,{0x82,0x81,0x00,0x00,}},
- {0x500F,2,{0xD9,0xBF,0x00,0x00,}},
- {0x5010,2,{0x82,0x82,0x00,0x00,}},
- {0x5011,2,{0x82,0x83,0x00,0x00,}},
- {0x5012,2,{0xB5,0xB9,0x00,0x00,}},
- {0x5013,2,{0x82,0x84,0x00,0x00,}},
- {0x5014,2,{0xBE,0xF3,0x00,0x00,}},
- {0x5015,2,{0x82,0x85,0x00,0x00,}},
- {0x5016,2,{0x82,0x86,0x00,0x00,}},
- {0x5017,2,{0x82,0x87,0x00,0x00,}},
- {0x5018,2,{0xCC,0xC8,0x00,0x00,}},
- {0x5019,2,{0xBA,0xF2,0x00,0x00,}},
- {0x501A,2,{0xD2,0xD0,0x00,0x00,}},
- {0x501B,2,{0x82,0x88,0x00,0x00,}},
- {0x501C,2,{0xD9,0xC3,0x00,0x00,}},
- {0x501D,2,{0x82,0x89,0x00,0x00,}},
- {0x501E,2,{0x82,0x8A,0x00,0x00,}},
- {0x501F,2,{0xBD,0xE8,0x00,0x00,}},
- {0x5020,2,{0x82,0x8B,0x00,0x00,}},
- {0x5021,2,{0xB3,0xAB,0x00,0x00,}},
- {0x5022,2,{0x82,0x8C,0x00,0x00,}},
- {0x5023,2,{0x82,0x8D,0x00,0x00,}},
- {0x5024,2,{0x82,0x8E,0x00,0x00,}},
- {0x5025,2,{0xD9,0xC5,0x00,0x00,}},
- {0x5026,2,{0xBE,0xEB,0x00,0x00,}},
- {0x5027,2,{0x82,0x8F,0x00,0x00,}},
- {0x5028,2,{0xD9,0xC6,0x00,0x00,}},
- {0x5029,2,{0xD9,0xBB,0x00,0x00,}},
- {0x502A,2,{0xC4,0xDF,0x00,0x00,}},
- {0x502B,2,{0x82,0x90,0x00,0x00,}},
- {0x502C,2,{0xD9,0xBE,0x00,0x00,}},
- {0x502D,2,{0xD9,0xC1,0x00,0x00,}},
- {0x502E,2,{0xD9,0xC0,0x00,0x00,}},
- {0x502F,2,{0x82,0x91,0x00,0x00,}},
- {0x5030,2,{0x82,0x92,0x00,0x00,}},
- {0x5031,2,{0x82,0x93,0x00,0x00,}},
- {0x5032,2,{0x82,0x94,0x00,0x00,}},
- {0x5033,2,{0x82,0x95,0x00,0x00,}},
- {0x5034,2,{0x82,0x96,0x00,0x00,}},
- {0x5035,2,{0x82,0x97,0x00,0x00,}},
- {0x5036,2,{0x82,0x98,0x00,0x00,}},
- {0x5037,2,{0x82,0x99,0x00,0x00,}},
- {0x5038,2,{0x82,0x9A,0x00,0x00,}},
- {0x5039,2,{0x82,0x9B,0x00,0x00,}},
- {0x503A,2,{0xD5,0xAE,0x00,0x00,}},
- {0x503B,2,{0x82,0x9C,0x00,0x00,}},
- {0x503C,2,{0xD6,0xB5,0x00,0x00,}},
- {0x503D,2,{0x82,0x9D,0x00,0x00,}},
- {0x503E,2,{0xC7,0xE3,0x00,0x00,}},
- {0x503F,2,{0x82,0x9E,0x00,0x00,}},
- {0x5040,2,{0x82,0x9F,0x00,0x00,}},
- {0x5041,2,{0x82,0xA0,0x00,0x00,}},
- {0x5042,2,{0x82,0xA1,0x00,0x00,}},
- {0x5043,2,{0xD9,0xC8,0x00,0x00,}},
- {0x5044,2,{0x82,0xA2,0x00,0x00,}},
- {0x5045,2,{0x82,0xA3,0x00,0x00,}},
- {0x5046,2,{0x82,0xA4,0x00,0x00,}},
- {0x5047,2,{0xBC,0xD9,0x00,0x00,}},
- {0x5048,2,{0xD9,0xCA,0x00,0x00,}},
- {0x5049,2,{0x82,0xA5,0x00,0x00,}},
- {0x504A,2,{0x82,0xA6,0x00,0x00,}},
- {0x504B,2,{0x82,0xA7,0x00,0x00,}},
- {0x504C,2,{0xD9,0xBC,0x00,0x00,}},
- {0x504D,2,{0x82,0xA8,0x00,0x00,}},
- {0x504E,2,{0xD9,0xCB,0x00,0x00,}},
- {0x504F,2,{0xC6,0xAB,0x00,0x00,}},
- {0x5050,2,{0x82,0xA9,0x00,0x00,}},
- {0x5051,2,{0x82,0xAA,0x00,0x00,}},
- {0x5052,2,{0x82,0xAB,0x00,0x00,}},
- {0x5053,2,{0x82,0xAC,0x00,0x00,}},
- {0x5054,2,{0x82,0xAD,0x00,0x00,}},
- {0x5055,2,{0xD9,0xC9,0x00,0x00,}},
- {0x5056,2,{0x82,0xAE,0x00,0x00,}},
- {0x5057,2,{0x82,0xAF,0x00,0x00,}},
- {0x5058,2,{0x82,0xB0,0x00,0x00,}},
- {0x5059,2,{0x82,0xB1,0x00,0x00,}},
- {0x505A,2,{0xD7,0xF6,0x00,0x00,}},
- {0x505B,2,{0x82,0xB2,0x00,0x00,}},
- {0x505C,2,{0xCD,0xA3,0x00,0x00,}},
- {0x505D,2,{0x82,0xB3,0x00,0x00,}},
- {0x505E,2,{0x82,0xB4,0x00,0x00,}},
- {0x505F,2,{0x82,0xB5,0x00,0x00,}},
- {0x5060,2,{0x82,0xB6,0x00,0x00,}},
- {0x5061,2,{0x82,0xB7,0x00,0x00,}},
- {0x5062,2,{0x82,0xB8,0x00,0x00,}},
- {0x5063,2,{0x82,0xB9,0x00,0x00,}},
- {0x5064,2,{0x82,0xBA,0x00,0x00,}},
- {0x5065,2,{0xBD,0xA1,0x00,0x00,}},
- {0x5066,2,{0x82,0xBB,0x00,0x00,}},
- {0x5067,2,{0x82,0xBC,0x00,0x00,}},
- {0x5068,2,{0x82,0xBD,0x00,0x00,}},
- {0x5069,2,{0x82,0xBE,0x00,0x00,}},
- {0x506A,2,{0x82,0xBF,0x00,0x00,}},
- {0x506B,2,{0x82,0xC0,0x00,0x00,}},
- {0x506C,2,{0xD9,0xCC,0x00,0x00,}},
- {0x506D,2,{0x82,0xC1,0x00,0x00,}},
- {0x506E,2,{0x82,0xC2,0x00,0x00,}},
- {0x506F,2,{0x82,0xC3,0x00,0x00,}},
- {0x5070,2,{0x82,0xC4,0x00,0x00,}},
- {0x5071,2,{0x82,0xC5,0x00,0x00,}},
- {0x5072,2,{0x82,0xC6,0x00,0x00,}},
- {0x5073,2,{0x82,0xC7,0x00,0x00,}},
- {0x5074,2,{0x82,0xC8,0x00,0x00,}},
- {0x5075,2,{0x82,0xC9,0x00,0x00,}},
- {0x5076,2,{0xC5,0xBC,0x00,0x00,}},
- {0x5077,2,{0xCD,0xB5,0x00,0x00,}},
- {0x5078,2,{0x82,0xCA,0x00,0x00,}},
- {0x5079,2,{0x82,0xCB,0x00,0x00,}},
- {0x507A,2,{0x82,0xCC,0x00,0x00,}},
- {0x507B,2,{0xD9,0xCD,0x00,0x00,}},
- {0x507C,2,{0x82,0xCD,0x00,0x00,}},
- {0x507D,2,{0x82,0xCE,0x00,0x00,}},
- {0x507E,2,{0xD9,0xC7,0x00,0x00,}},
- {0x507F,2,{0xB3,0xA5,0x00,0x00,}},
- {0x5080,2,{0xBF,0xFE,0x00,0x00,}},
- {0x5081,2,{0x82,0xCF,0x00,0x00,}},
- {0x5082,2,{0x82,0xD0,0x00,0x00,}},
- {0x5083,2,{0x82,0xD1,0x00,0x00,}},
- {0x5084,2,{0x82,0xD2,0x00,0x00,}},
- {0x5085,2,{0xB8,0xB5,0x00,0x00,}},
- {0x5086,2,{0x82,0xD3,0x00,0x00,}},
- {0x5087,2,{0x82,0xD4,0x00,0x00,}},
- {0x5088,2,{0xC0,0xFC,0x00,0x00,}},
- {0x5089,2,{0x82,0xD5,0x00,0x00,}},
- {0x508A,2,{0x82,0xD6,0x00,0x00,}},
- {0x508B,2,{0x82,0xD7,0x00,0x00,}},
- {0x508C,2,{0x82,0xD8,0x00,0x00,}},
- {0x508D,2,{0xB0,0xF8,0x00,0x00,}},
- {0x508E,2,{0x82,0xD9,0x00,0x00,}},
- {0x508F,2,{0x82,0xDA,0x00,0x00,}},
- {0x5090,2,{0x82,0xDB,0x00,0x00,}},
- {0x5091,2,{0x82,0xDC,0x00,0x00,}},
- {0x5092,2,{0x82,0xDD,0x00,0x00,}},
- {0x5093,2,{0x82,0xDE,0x00,0x00,}},
- {0x5094,2,{0x82,0xDF,0x00,0x00,}},
- {0x5095,2,{0x82,0xE0,0x00,0x00,}},
- {0x5096,2,{0x82,0xE1,0x00,0x00,}},
- {0x5097,2,{0x82,0xE2,0x00,0x00,}},
- {0x5098,2,{0x82,0xE3,0x00,0x00,}},
- {0x5099,2,{0x82,0xE4,0x00,0x00,}},
- {0x509A,2,{0x82,0xE5,0x00,0x00,}},
- {0x509B,2,{0x82,0xE6,0x00,0x00,}},
- {0x509C,2,{0x82,0xE7,0x00,0x00,}},
- {0x509D,2,{0x82,0xE8,0x00,0x00,}},
- {0x509E,2,{0x82,0xE9,0x00,0x00,}},
- {0x509F,2,{0x82,0xEA,0x00,0x00,}},
- {0x50A0,2,{0x82,0xEB,0x00,0x00,}},
- {0x50A1,2,{0x82,0xEC,0x00,0x00,}},
- {0x50A2,2,{0x82,0xED,0x00,0x00,}},
- {0x50A3,2,{0xB4,0xF6,0x00,0x00,}},
- {0x50A4,2,{0x82,0xEE,0x00,0x00,}},
- {0x50A5,2,{0xD9,0xCE,0x00,0x00,}},
- {0x50A6,2,{0x82,0xEF,0x00,0x00,}},
- {0x50A7,2,{0xD9,0xCF,0x00,0x00,}},
- {0x50A8,2,{0xB4,0xA2,0x00,0x00,}},
- {0x50A9,2,{0xD9,0xD0,0x00,0x00,}},
- {0x50AA,2,{0x82,0xF0,0x00,0x00,}},
- {0x50AB,2,{0x82,0xF1,0x00,0x00,}},
- {0x50AC,2,{0xB4,0xDF,0x00,0x00,}},
- {0x50AD,2,{0x82,0xF2,0x00,0x00,}},
- {0x50AE,2,{0x82,0xF3,0x00,0x00,}},
- {0x50AF,2,{0x82,0xF4,0x00,0x00,}},
- {0x50B0,2,{0x82,0xF5,0x00,0x00,}},
- {0x50B1,2,{0x82,0xF6,0x00,0x00,}},
- {0x50B2,2,{0xB0,0xC1,0x00,0x00,}},
- {0x50B3,2,{0x82,0xF7,0x00,0x00,}},
- {0x50B4,2,{0x82,0xF8,0x00,0x00,}},
- {0x50B5,2,{0x82,0xF9,0x00,0x00,}},
- {0x50B6,2,{0x82,0xFA,0x00,0x00,}},
- {0x50B7,2,{0x82,0xFB,0x00,0x00,}},
- {0x50B8,2,{0x82,0xFC,0x00,0x00,}},
- {0x50B9,2,{0x82,0xFD,0x00,0x00,}},
- {0x50BA,2,{0xD9,0xD1,0x00,0x00,}},
- {0x50BB,2,{0xC9,0xB5,0x00,0x00,}},
- {0x50BC,2,{0x82,0xFE,0x00,0x00,}},
- {0x50BD,2,{0x83,0x40,0x00,0x00,}},
- {0x50BE,2,{0x83,0x41,0x00,0x00,}},
- {0x50BF,2,{0x83,0x42,0x00,0x00,}},
- {0x50C0,2,{0x83,0x43,0x00,0x00,}},
- {0x50C1,2,{0x83,0x44,0x00,0x00,}},
- {0x50C2,2,{0x83,0x45,0x00,0x00,}},
- {0x50C3,2,{0x83,0x46,0x00,0x00,}},
- {0x50C4,2,{0x83,0x47,0x00,0x00,}},
- {0x50C5,2,{0x83,0x48,0x00,0x00,}},
- {0x50C6,2,{0x83,0x49,0x00,0x00,}},
- {0x50C7,2,{0x83,0x4A,0x00,0x00,}},
- {0x50C8,2,{0x83,0x4B,0x00,0x00,}},
- {0x50C9,2,{0x83,0x4C,0x00,0x00,}},
- {0x50CA,2,{0x83,0x4D,0x00,0x00,}},
- {0x50CB,2,{0x83,0x4E,0x00,0x00,}},
- {0x50CC,2,{0x83,0x4F,0x00,0x00,}},
- {0x50CD,2,{0x83,0x50,0x00,0x00,}},
- {0x50CE,2,{0x83,0x51,0x00,0x00,}},
- {0x50CF,2,{0xCF,0xF1,0x00,0x00,}},
- {0x50D0,2,{0x83,0x52,0x00,0x00,}},
- {0x50D1,2,{0x83,0x53,0x00,0x00,}},
- {0x50D2,2,{0x83,0x54,0x00,0x00,}},
- {0x50D3,2,{0x83,0x55,0x00,0x00,}},
- {0x50D4,2,{0x83,0x56,0x00,0x00,}},
- {0x50D5,2,{0x83,0x57,0x00,0x00,}},
- {0x50D6,2,{0xD9,0xD2,0x00,0x00,}},
- {0x50D7,2,{0x83,0x58,0x00,0x00,}},
- {0x50D8,2,{0x83,0x59,0x00,0x00,}},
- {0x50D9,2,{0x83,0x5A,0x00,0x00,}},
- {0x50DA,2,{0xC1,0xC5,0x00,0x00,}},
- {0x50DB,2,{0x83,0x5B,0x00,0x00,}},
- {0x50DC,2,{0x83,0x5C,0x00,0x00,}},
- {0x50DD,2,{0x83,0x5D,0x00,0x00,}},
- {0x50DE,2,{0x83,0x5E,0x00,0x00,}},
- {0x50DF,2,{0x83,0x5F,0x00,0x00,}},
- {0x50E0,2,{0x83,0x60,0x00,0x00,}},
- {0x50E1,2,{0x83,0x61,0x00,0x00,}},
- {0x50E2,2,{0x83,0x62,0x00,0x00,}},
- {0x50E3,2,{0x83,0x63,0x00,0x00,}},
- {0x50E4,2,{0x83,0x64,0x00,0x00,}},
- {0x50E5,2,{0x83,0x65,0x00,0x00,}},
- {0x50E6,2,{0xD9,0xD6,0x00,0x00,}},
- {0x50E7,2,{0xC9,0xAE,0x00,0x00,}},
- {0x50E8,2,{0x83,0x66,0x00,0x00,}},
- {0x50E9,2,{0x83,0x67,0x00,0x00,}},
- {0x50EA,2,{0x83,0x68,0x00,0x00,}},
- {0x50EB,2,{0x83,0x69,0x00,0x00,}},
- {0x50EC,2,{0xD9,0xD5,0x00,0x00,}},
- {0x50ED,2,{0xD9,0xD4,0x00,0x00,}},
- {0x50EE,2,{0xD9,0xD7,0x00,0x00,}},
- {0x50EF,2,{0x83,0x6A,0x00,0x00,}},
- {0x50F0,2,{0x83,0x6B,0x00,0x00,}},
- {0x50F1,2,{0x83,0x6C,0x00,0x00,}},
- {0x50F2,2,{0x83,0x6D,0x00,0x00,}},
- {0x50F3,2,{0xCB,0xDB,0x00,0x00,}},
- {0x50F4,2,{0x83,0x6E,0x00,0x00,}},
- {0x50F5,2,{0xBD,0xA9,0x00,0x00,}},
- {0x50F6,2,{0x83,0x6F,0x00,0x00,}},
- {0x50F7,2,{0x83,0x70,0x00,0x00,}},
- {0x50F8,2,{0x83,0x71,0x00,0x00,}},
- {0x50F9,2,{0x83,0x72,0x00,0x00,}},
- {0x50FA,2,{0x83,0x73,0x00,0x00,}},
- {0x50FB,2,{0xC6,0xA7,0x00,0x00,}},
- {0x50FC,2,{0x83,0x74,0x00,0x00,}},
- {0x50FD,2,{0x83,0x75,0x00,0x00,}},
- {0x50FE,2,{0x83,0x76,0x00,0x00,}},
- {0x50FF,2,{0x83,0x77,0x00,0x00,}},
- {0x5100,2,{0x83,0x78,0x00,0x00,}},
- {0x5101,2,{0x83,0x79,0x00,0x00,}},
- {0x5102,2,{0x83,0x7A,0x00,0x00,}},
- {0x5103,2,{0x83,0x7B,0x00,0x00,}},
- {0x5104,2,{0x83,0x7C,0x00,0x00,}},
- {0x5105,2,{0x83,0x7D,0x00,0x00,}},
- {0x5106,2,{0xD9,0xD3,0x00,0x00,}},
- {0x5107,2,{0xD9,0xD8,0x00,0x00,}},
- {0x5108,2,{0x83,0x7E,0x00,0x00,}},
- {0x5109,2,{0x83,0x80,0x00,0x00,}},
- {0x510A,2,{0x83,0x81,0x00,0x00,}},
- {0x510B,2,{0xD9,0xD9,0x00,0x00,}},
- {0x510C,2,{0x83,0x82,0x00,0x00,}},
- {0x510D,2,{0x83,0x83,0x00,0x00,}},
- {0x510E,2,{0x83,0x84,0x00,0x00,}},
- {0x510F,2,{0x83,0x85,0x00,0x00,}},
- {0x5110,2,{0x83,0x86,0x00,0x00,}},
- {0x5111,2,{0x83,0x87,0x00,0x00,}},
- {0x5112,2,{0xC8,0xE5,0x00,0x00,}},
- {0x5113,2,{0x83,0x88,0x00,0x00,}},
- {0x5114,2,{0x83,0x89,0x00,0x00,}},
- {0x5115,2,{0x83,0x8A,0x00,0x00,}},
- {0x5116,2,{0x83,0x8B,0x00,0x00,}},
- {0x5117,2,{0x83,0x8C,0x00,0x00,}},
- {0x5118,2,{0x83,0x8D,0x00,0x00,}},
- {0x5119,2,{0x83,0x8E,0x00,0x00,}},
- {0x511A,2,{0x83,0x8F,0x00,0x00,}},
- {0x511B,2,{0x83,0x90,0x00,0x00,}},
- {0x511C,2,{0x83,0x91,0x00,0x00,}},
- {0x511D,2,{0x83,0x92,0x00,0x00,}},
- {0x511E,2,{0x83,0x93,0x00,0x00,}},
- {0x511F,2,{0x83,0x94,0x00,0x00,}},
- {0x5120,2,{0x83,0x95,0x00,0x00,}},
- {0x5121,2,{0xC0,0xDC,0x00,0x00,}},
- {0x5122,2,{0x83,0x96,0x00,0x00,}},
- {0x5123,2,{0x83,0x97,0x00,0x00,}},
- {0x5124,2,{0x83,0x98,0x00,0x00,}},
- {0x5125,2,{0x83,0x99,0x00,0x00,}},
- {0x5126,2,{0x83,0x9A,0x00,0x00,}},
- {0x5127,2,{0x83,0x9B,0x00,0x00,}},
- {0x5128,2,{0x83,0x9C,0x00,0x00,}},
- {0x5129,2,{0x83,0x9D,0x00,0x00,}},
- {0x512A,2,{0x83,0x9E,0x00,0x00,}},
- {0x512B,2,{0x83,0x9F,0x00,0x00,}},
- {0x512C,2,{0x83,0xA0,0x00,0x00,}},
- {0x512D,2,{0x83,0xA1,0x00,0x00,}},
- {0x512E,2,{0x83,0xA2,0x00,0x00,}},
- {0x512F,2,{0x83,0xA3,0x00,0x00,}},
- {0x5130,2,{0x83,0xA4,0x00,0x00,}},
- {0x5131,2,{0x83,0xA5,0x00,0x00,}},
- {0x5132,2,{0x83,0xA6,0x00,0x00,}},
- {0x5133,2,{0x83,0xA7,0x00,0x00,}},
- {0x5134,2,{0x83,0xA8,0x00,0x00,}},
- {0x5135,2,{0x83,0xA9,0x00,0x00,}},
- {0x5136,2,{0x83,0xAA,0x00,0x00,}},
- {0x5137,2,{0x83,0xAB,0x00,0x00,}},
- {0x5138,2,{0x83,0xAC,0x00,0x00,}},
- {0x5139,2,{0x83,0xAD,0x00,0x00,}},
- {0x513A,2,{0x83,0xAE,0x00,0x00,}},
- {0x513B,2,{0x83,0xAF,0x00,0x00,}},
- {0x513C,2,{0x83,0xB0,0x00,0x00,}},
- {0x513D,2,{0x83,0xB1,0x00,0x00,}},
- {0x513E,2,{0x83,0xB2,0x00,0x00,}},
- {0x513F,2,{0xB6,0xF9,0x00,0x00,}},
- {0x5140,2,{0xD8,0xA3,0x00,0x00,}},
- {0x5141,2,{0xD4,0xCA,0x00,0x00,}},
- {0x5142,2,{0x83,0xB3,0x00,0x00,}},
- {0x5143,2,{0xD4,0xAA,0x00,0x00,}},
- {0x5144,2,{0xD0,0xD6,0x00,0x00,}},
- {0x5145,2,{0xB3,0xE4,0x00,0x00,}},
- {0x5146,2,{0xD5,0xD7,0x00,0x00,}},
- {0x5147,2,{0x83,0xB4,0x00,0x00,}},
- {0x5148,2,{0xCF,0xC8,0x00,0x00,}},
- {0x5149,2,{0xB9,0xE2,0x00,0x00,}},
- {0x514A,2,{0x83,0xB5,0x00,0x00,}},
- {0x514B,2,{0xBF,0xCB,0x00,0x00,}},
- {0x514C,2,{0x83,0xB6,0x00,0x00,}},
- {0x514D,2,{0xC3,0xE2,0x00,0x00,}},
- {0x514E,2,{0x83,0xB7,0x00,0x00,}},
- {0x514F,2,{0x83,0xB8,0x00,0x00,}},
- {0x5150,2,{0x83,0xB9,0x00,0x00,}},
- {0x5151,2,{0xB6,0xD2,0x00,0x00,}},
- {0x5152,2,{0x83,0xBA,0x00,0x00,}},
- {0x5153,2,{0x83,0xBB,0x00,0x00,}},
- {0x5154,2,{0xCD,0xC3,0x00,0x00,}},
- {0x5155,2,{0xD9,0xEE,0x00,0x00,}},
- {0x5156,2,{0xD9,0xF0,0x00,0x00,}},
- {0x5157,2,{0x83,0xBC,0x00,0x00,}},
- {0x5158,2,{0x83,0xBD,0x00,0x00,}},
- {0x5159,2,{0x83,0xBE,0x00,0x00,}},
- {0x515A,2,{0xB5,0xB3,0x00,0x00,}},
- {0x515B,2,{0x83,0xBF,0x00,0x00,}},
- {0x515C,2,{0xB6,0xB5,0x00,0x00,}},
- {0x515D,2,{0x83,0xC0,0x00,0x00,}},
- {0x515E,2,{0x83,0xC1,0x00,0x00,}},
- {0x515F,2,{0x83,0xC2,0x00,0x00,}},
- {0x5160,2,{0x83,0xC3,0x00,0x00,}},
- {0x5161,2,{0x83,0xC4,0x00,0x00,}},
- {0x5162,2,{0xBE,0xA4,0x00,0x00,}},
- {0x5163,2,{0x83,0xC5,0x00,0x00,}},
- {0x5164,2,{0x83,0xC6,0x00,0x00,}},
- {0x5165,2,{0xC8,0xEB,0x00,0x00,}},
- {0x5166,2,{0x83,0xC7,0x00,0x00,}},
- {0x5167,2,{0x83,0xC8,0x00,0x00,}},
- {0x5168,2,{0xC8,0xAB,0x00,0x00,}},
- {0x5169,2,{0x83,0xC9,0x00,0x00,}},
- {0x516A,2,{0x83,0xCA,0x00,0x00,}},
- {0x516B,2,{0xB0,0xCB,0x00,0x00,}},
- {0x516C,2,{0xB9,0xAB,0x00,0x00,}},
- {0x516D,2,{0xC1,0xF9,0x00,0x00,}},
- {0x516E,2,{0xD9,0xE2,0x00,0x00,}},
- {0x516F,2,{0x83,0xCB,0x00,0x00,}},
- {0x5170,2,{0xC0,0xBC,0x00,0x00,}},
- {0x5171,2,{0xB9,0xB2,0x00,0x00,}},
- {0x5172,2,{0x83,0xCC,0x00,0x00,}},
- {0x5173,2,{0xB9,0xD8,0x00,0x00,}},
- {0x5174,2,{0xD0,0xCB,0x00,0x00,}},
- {0x5175,2,{0xB1,0xF8,0x00,0x00,}},
- {0x5176,2,{0xC6,0xE4,0x00,0x00,}},
- {0x5177,2,{0xBE,0xDF,0x00,0x00,}},
- {0x5178,2,{0xB5,0xE4,0x00,0x00,}},
- {0x5179,2,{0xD7,0xC8,0x00,0x00,}},
- {0x517A,2,{0x83,0xCD,0x00,0x00,}},
- {0x517B,2,{0xD1,0xF8,0x00,0x00,}},
- {0x517C,2,{0xBC,0xE6,0x00,0x00,}},
- {0x517D,2,{0xCA,0xDE,0x00,0x00,}},
- {0x517E,2,{0x83,0xCE,0x00,0x00,}},
- {0x517F,2,{0x83,0xCF,0x00,0x00,}},
- {0x5180,2,{0xBC,0xBD,0x00,0x00,}},
- {0x5181,2,{0xD9,0xE6,0x00,0x00,}},
- {0x5182,2,{0xD8,0xE7,0x00,0x00,}},
- {0x5183,2,{0x83,0xD0,0x00,0x00,}},
- {0x5184,2,{0x83,0xD1,0x00,0x00,}},
- {0x5185,2,{0xC4,0xDA,0x00,0x00,}},
- {0x5186,2,{0x83,0xD2,0x00,0x00,}},
- {0x5187,2,{0x83,0xD3,0x00,0x00,}},
- {0x5188,2,{0xB8,0xD4,0x00,0x00,}},
- {0x5189,2,{0xC8,0xBD,0x00,0x00,}},
- {0x518A,2,{0x83,0xD4,0x00,0x00,}},
- {0x518B,2,{0x83,0xD5,0x00,0x00,}},
- {0x518C,2,{0xB2,0xE1,0x00,0x00,}},
- {0x518D,2,{0xD4,0xD9,0x00,0x00,}},
- {0x518E,2,{0x83,0xD6,0x00,0x00,}},
- {0x518F,2,{0x83,0xD7,0x00,0x00,}},
- {0x5190,2,{0x83,0xD8,0x00,0x00,}},
- {0x5191,2,{0x83,0xD9,0x00,0x00,}},
- {0x5192,2,{0xC3,0xB0,0x00,0x00,}},
- {0x5193,2,{0x83,0xDA,0x00,0x00,}},
- {0x5194,2,{0x83,0xDB,0x00,0x00,}},
- {0x5195,2,{0xC3,0xE1,0x00,0x00,}},
- {0x5196,2,{0xDA,0xA2,0x00,0x00,}},
- {0x5197,2,{0xC8,0xDF,0x00,0x00,}},
- {0x5198,2,{0x83,0xDC,0x00,0x00,}},
- {0x5199,2,{0xD0,0xB4,0x00,0x00,}},
- {0x519A,2,{0x83,0xDD,0x00,0x00,}},
- {0x519B,2,{0xBE,0xFC,0x00,0x00,}},
- {0x519C,2,{0xC5,0xA9,0x00,0x00,}},
- {0x519D,2,{0x83,0xDE,0x00,0x00,}},
- {0x519E,2,{0x83,0xDF,0x00,0x00,}},
- {0x519F,2,{0x83,0xE0,0x00,0x00,}},
- {0x51A0,2,{0xB9,0xDA,0x00,0x00,}},
- {0x51A1,2,{0x83,0xE1,0x00,0x00,}},
- {0x51A2,2,{0xDA,0xA3,0x00,0x00,}},
- {0x51A3,2,{0x83,0xE2,0x00,0x00,}},
- {0x51A4,2,{0xD4,0xA9,0x00,0x00,}},
- {0x51A5,2,{0xDA,0xA4,0x00,0x00,}},
- {0x51A6,2,{0x83,0xE3,0x00,0x00,}},
- {0x51A7,2,{0x83,0xE4,0x00,0x00,}},
- {0x51A8,2,{0x83,0xE5,0x00,0x00,}},
- {0x51A9,2,{0x83,0xE6,0x00,0x00,}},
- {0x51AA,2,{0x83,0xE7,0x00,0x00,}},
- {0x51AB,2,{0xD9,0xFB,0x00,0x00,}},
- {0x51AC,2,{0xB6,0xAC,0x00,0x00,}},
- {0x51AD,2,{0x83,0xE8,0x00,0x00,}},
- {0x51AE,2,{0x83,0xE9,0x00,0x00,}},
- {0x51AF,2,{0xB7,0xEB,0x00,0x00,}},
- {0x51B0,2,{0xB1,0xF9,0x00,0x00,}},
- {0x51B1,2,{0xD9,0xFC,0x00,0x00,}},
- {0x51B2,2,{0xB3,0xE5,0x00,0x00,}},
- {0x51B3,2,{0xBE,0xF6,0x00,0x00,}},
- {0x51B4,2,{0x83,0xEA,0x00,0x00,}},
- {0x51B5,2,{0xBF,0xF6,0x00,0x00,}},
- {0x51B6,2,{0xD2,0xB1,0x00,0x00,}},
- {0x51B7,2,{0xC0,0xE4,0x00,0x00,}},
- {0x51B8,2,{0x83,0xEB,0x00,0x00,}},
- {0x51B9,2,{0x83,0xEC,0x00,0x00,}},
- {0x51BA,2,{0x83,0xED,0x00,0x00,}},
- {0x51BB,2,{0xB6,0xB3,0x00,0x00,}},
- {0x51BC,2,{0xD9,0xFE,0x00,0x00,}},
- {0x51BD,2,{0xD9,0xFD,0x00,0x00,}},
- {0x51BE,2,{0x83,0xEE,0x00,0x00,}},
- {0x51BF,2,{0x83,0xEF,0x00,0x00,}},
- {0x51C0,2,{0xBE,0xBB,0x00,0x00,}},
- {0x51C1,2,{0x83,0xF0,0x00,0x00,}},
- {0x51C2,2,{0x83,0xF1,0x00,0x00,}},
- {0x51C3,2,{0x83,0xF2,0x00,0x00,}},
- {0x51C4,2,{0xC6,0xE0,0x00,0x00,}},
- {0x51C5,2,{0x83,0xF3,0x00,0x00,}},
- {0x51C6,2,{0xD7,0xBC,0x00,0x00,}},
- {0x51C7,2,{0xDA,0xA1,0x00,0x00,}},
- {0x51C8,2,{0x83,0xF4,0x00,0x00,}},
- {0x51C9,2,{0xC1,0xB9,0x00,0x00,}},
- {0x51CA,2,{0x83,0xF5,0x00,0x00,}},
- {0x51CB,2,{0xB5,0xF2,0x00,0x00,}},
- {0x51CC,2,{0xC1,0xE8,0x00,0x00,}},
- {0x51CD,2,{0x83,0xF6,0x00,0x00,}},
- {0x51CE,2,{0x83,0xF7,0x00,0x00,}},
- {0x51CF,2,{0xBC,0xF5,0x00,0x00,}},
- {0x51D0,2,{0x83,0xF8,0x00,0x00,}},
- {0x51D1,2,{0xB4,0xD5,0x00,0x00,}},
- {0x51D2,2,{0x83,0xF9,0x00,0x00,}},
- {0x51D3,2,{0x83,0xFA,0x00,0x00,}},
- {0x51D4,2,{0x83,0xFB,0x00,0x00,}},
- {0x51D5,2,{0x83,0xFC,0x00,0x00,}},
- {0x51D6,2,{0x83,0xFD,0x00,0x00,}},
- {0x51D7,2,{0x83,0xFE,0x00,0x00,}},
- {0x51D8,2,{0x84,0x40,0x00,0x00,}},
- {0x51D9,2,{0x84,0x41,0x00,0x00,}},
- {0x51DA,2,{0x84,0x42,0x00,0x00,}},
- {0x51DB,2,{0xC1,0xDD,0x00,0x00,}},
- {0x51DC,2,{0x84,0x43,0x00,0x00,}},
- {0x51DD,2,{0xC4,0xFD,0x00,0x00,}},
- {0x51DE,2,{0x84,0x44,0x00,0x00,}},
- {0x51DF,2,{0x84,0x45,0x00,0x00,}},
- {0x51E0,2,{0xBC,0xB8,0x00,0x00,}},
- {0x51E1,2,{0xB7,0xB2,0x00,0x00,}},
- {0x51E2,2,{0x84,0x46,0x00,0x00,}},
- {0x51E3,2,{0x84,0x47,0x00,0x00,}},
- {0x51E4,2,{0xB7,0xEF,0x00,0x00,}},
- {0x51E5,2,{0x84,0x48,0x00,0x00,}},
- {0x51E6,2,{0x84,0x49,0x00,0x00,}},
- {0x51E7,2,{0x84,0x4A,0x00,0x00,}},
- {0x51E8,2,{0x84,0x4B,0x00,0x00,}},
- {0x51E9,2,{0x84,0x4C,0x00,0x00,}},
- {0x51EA,2,{0x84,0x4D,0x00,0x00,}},
- {0x51EB,2,{0xD9,0xEC,0x00,0x00,}},
- {0x51EC,2,{0x84,0x4E,0x00,0x00,}},
- {0x51ED,2,{0xC6,0xBE,0x00,0x00,}},
- {0x51EE,2,{0x84,0x4F,0x00,0x00,}},
- {0x51EF,2,{0xBF,0xAD,0x00,0x00,}},
- {0x51F0,2,{0xBB,0xCB,0x00,0x00,}},
- {0x51F1,2,{0x84,0x50,0x00,0x00,}},
- {0x51F2,2,{0x84,0x51,0x00,0x00,}},
- {0x51F3,2,{0xB5,0xCA,0x00,0x00,}},
- {0x51F4,2,{0x84,0x52,0x00,0x00,}},
- {0x51F5,2,{0xDB,0xC9,0x00,0x00,}},
- {0x51F6,2,{0xD0,0xD7,0x00,0x00,}},
- {0x51F7,2,{0x84,0x53,0x00,0x00,}},
- {0x51F8,2,{0xCD,0xB9,0x00,0x00,}},
- {0x51F9,2,{0xB0,0xBC,0x00,0x00,}},
- {0x51FA,2,{0xB3,0xF6,0x00,0x00,}},
- {0x51FB,2,{0xBB,0xF7,0x00,0x00,}},
- {0x51FC,2,{0xDB,0xCA,0x00,0x00,}},
- {0x51FD,2,{0xBA,0xAF,0x00,0x00,}},
- {0x51FE,2,{0x84,0x54,0x00,0x00,}},
- {0x51FF,2,{0xD4,0xE4,0x00,0x00,}},
- {0x5200,2,{0xB5,0xB6,0x00,0x00,}},
- {0x5201,2,{0xB5,0xF3,0x00,0x00,}},
- {0x5202,2,{0xD8,0xD6,0x00,0x00,}},
- {0x5203,2,{0xC8,0xD0,0x00,0x00,}},
- {0x5204,2,{0x84,0x55,0x00,0x00,}},
- {0x5205,2,{0x84,0x56,0x00,0x00,}},
- {0x5206,2,{0xB7,0xD6,0x00,0x00,}},
- {0x5207,2,{0xC7,0xD0,0x00,0x00,}},
- {0x5208,2,{0xD8,0xD7,0x00,0x00,}},
- {0x5209,2,{0x84,0x57,0x00,0x00,}},
- {0x520A,2,{0xBF,0xAF,0x00,0x00,}},
- {0x520B,2,{0x84,0x58,0x00,0x00,}},
- {0x520C,2,{0x84,0x59,0x00,0x00,}},
- {0x520D,2,{0xDB,0xBB,0x00,0x00,}},
- {0x520E,2,{0xD8,0xD8,0x00,0x00,}},
- {0x520F,2,{0x84,0x5A,0x00,0x00,}},
- {0x5210,2,{0x84,0x5B,0x00,0x00,}},
- {0x5211,2,{0xD0,0xCC,0x00,0x00,}},
- {0x5212,2,{0xBB,0xAE,0x00,0x00,}},
- {0x5213,2,{0x84,0x5C,0x00,0x00,}},
- {0x5214,2,{0x84,0x5D,0x00,0x00,}},
- {0x5215,2,{0x84,0x5E,0x00,0x00,}},
- {0x5216,2,{0xEB,0xBE,0x00,0x00,}},
- {0x5217,2,{0xC1,0xD0,0x00,0x00,}},
- {0x5218,2,{0xC1,0xF5,0x00,0x00,}},
- {0x5219,2,{0xD4,0xF2,0x00,0x00,}},
- {0x521A,2,{0xB8,0xD5,0x00,0x00,}},
- {0x521B,2,{0xB4,0xB4,0x00,0x00,}},
- {0x521C,2,{0x84,0x5F,0x00,0x00,}},
- {0x521D,2,{0xB3,0xF5,0x00,0x00,}},
- {0x521E,2,{0x84,0x60,0x00,0x00,}},
- {0x521F,2,{0x84,0x61,0x00,0x00,}},
- {0x5220,2,{0xC9,0xBE,0x00,0x00,}},
- {0x5221,2,{0x84,0x62,0x00,0x00,}},
- {0x5222,2,{0x84,0x63,0x00,0x00,}},
- {0x5223,2,{0x84,0x64,0x00,0x00,}},
- {0x5224,2,{0xC5,0xD0,0x00,0x00,}},
- {0x5225,2,{0x84,0x65,0x00,0x00,}},
- {0x5226,2,{0x84,0x66,0x00,0x00,}},
- {0x5227,2,{0x84,0x67,0x00,0x00,}},
- {0x5228,2,{0xC5,0xD9,0x00,0x00,}},
- {0x5229,2,{0xC0,0xFB,0x00,0x00,}},
- {0x522A,2,{0x84,0x68,0x00,0x00,}},
- {0x522B,2,{0xB1,0xF0,0x00,0x00,}},
- {0x522C,2,{0x84,0x69,0x00,0x00,}},
- {0x522D,2,{0xD8,0xD9,0x00,0x00,}},
- {0x522E,2,{0xB9,0xCE,0x00,0x00,}},
- {0x522F,2,{0x84,0x6A,0x00,0x00,}},
- {0x5230,2,{0xB5,0xBD,0x00,0x00,}},
- {0x5231,2,{0x84,0x6B,0x00,0x00,}},
- {0x5232,2,{0x84,0x6C,0x00,0x00,}},
- {0x5233,2,{0xD8,0xDA,0x00,0x00,}},
- {0x5234,2,{0x84,0x6D,0x00,0x00,}},
- {0x5235,2,{0x84,0x6E,0x00,0x00,}},
- {0x5236,2,{0xD6,0xC6,0x00,0x00,}},
- {0x5237,2,{0xCB,0xA2,0x00,0x00,}},
- {0x5238,2,{0xC8,0xAF,0x00,0x00,}},
- {0x5239,2,{0xC9,0xB2,0x00,0x00,}},
- {0x523A,2,{0xB4,0xCC,0x00,0x00,}},
- {0x523B,2,{0xBF,0xCC,0x00,0x00,}},
- {0x523C,2,{0x84,0x6F,0x00,0x00,}},
- {0x523D,2,{0xB9,0xF4,0x00,0x00,}},
- {0x523E,2,{0x84,0x70,0x00,0x00,}},
- {0x523F,2,{0xD8,0xDB,0x00,0x00,}},
- {0x5240,2,{0xD8,0xDC,0x00,0x00,}},
- {0x5241,2,{0xB6,0xE7,0x00,0x00,}},
- {0x5242,2,{0xBC,0xC1,0x00,0x00,}},
- {0x5243,2,{0xCC,0xEA,0x00,0x00,}},
- {0x5244,2,{0x84,0x71,0x00,0x00,}},
- {0x5245,2,{0x84,0x72,0x00,0x00,}},
- {0x5246,2,{0x84,0x73,0x00,0x00,}},
- {0x5247,2,{0x84,0x74,0x00,0x00,}},
- {0x5248,2,{0x84,0x75,0x00,0x00,}},
- {0x5249,2,{0x84,0x76,0x00,0x00,}},
- {0x524A,2,{0xCF,0xF7,0x00,0x00,}},
- {0x524B,2,{0x84,0x77,0x00,0x00,}},
- {0x524C,2,{0xD8,0xDD,0x00,0x00,}},
- {0x524D,2,{0xC7,0xB0,0x00,0x00,}},
- {0x524E,2,{0x84,0x78,0x00,0x00,}},
- {0x524F,2,{0x84,0x79,0x00,0x00,}},
- {0x5250,2,{0xB9,0xD0,0x00,0x00,}},
- {0x5251,2,{0xBD,0xA3,0x00,0x00,}},
- {0x5252,2,{0x84,0x7A,0x00,0x00,}},
- {0x5253,2,{0x84,0x7B,0x00,0x00,}},
- {0x5254,2,{0xCC,0xDE,0x00,0x00,}},
- {0x5255,2,{0x84,0x7C,0x00,0x00,}},
- {0x5256,2,{0xC6,0xCA,0x00,0x00,}},
- {0x5257,2,{0x84,0x7D,0x00,0x00,}},
- {0x5258,2,{0x84,0x7E,0x00,0x00,}},
- {0x5259,2,{0x84,0x80,0x00,0x00,}},
- {0x525A,2,{0x84,0x81,0x00,0x00,}},
- {0x525B,2,{0x84,0x82,0x00,0x00,}},
- {0x525C,2,{0xD8,0xE0,0x00,0x00,}},
- {0x525D,2,{0x84,0x83,0x00,0x00,}},
- {0x525E,2,{0xD8,0xDE,0x00,0x00,}},
- {0x525F,2,{0x84,0x84,0x00,0x00,}},
- {0x5260,2,{0x84,0x85,0x00,0x00,}},
- {0x5261,2,{0xD8,0xDF,0x00,0x00,}},
- {0x5262,2,{0x84,0x86,0x00,0x00,}},
- {0x5263,2,{0x84,0x87,0x00,0x00,}},
- {0x5264,2,{0x84,0x88,0x00,0x00,}},
- {0x5265,2,{0xB0,0xFE,0x00,0x00,}},
- {0x5266,2,{0x84,0x89,0x00,0x00,}},
- {0x5267,2,{0xBE,0xE7,0x00,0x00,}},
- {0x5268,2,{0x84,0x8A,0x00,0x00,}},
- {0x5269,2,{0xCA,0xA3,0x00,0x00,}},
- {0x526A,2,{0xBC,0xF4,0x00,0x00,}},
- {0x526B,2,{0x84,0x8B,0x00,0x00,}},
- {0x526C,2,{0x84,0x8C,0x00,0x00,}},
- {0x526D,2,{0x84,0x8D,0x00,0x00,}},
- {0x526E,2,{0x84,0x8E,0x00,0x00,}},
- {0x526F,2,{0xB8,0xB1,0x00,0x00,}},
- {0x5270,2,{0x84,0x8F,0x00,0x00,}},
- {0x5271,2,{0x84,0x90,0x00,0x00,}},
- {0x5272,2,{0xB8,0xEE,0x00,0x00,}},
- {0x5273,2,{0x84,0x91,0x00,0x00,}},
- {0x5274,2,{0x84,0x92,0x00,0x00,}},
- {0x5275,2,{0x84,0x93,0x00,0x00,}},
- {0x5276,2,{0x84,0x94,0x00,0x00,}},
- {0x5277,2,{0x84,0x95,0x00,0x00,}},
- {0x5278,2,{0x84,0x96,0x00,0x00,}},
- {0x5279,2,{0x84,0x97,0x00,0x00,}},
- {0x527A,2,{0x84,0x98,0x00,0x00,}},
- {0x527B,2,{0x84,0x99,0x00,0x00,}},
- {0x527C,2,{0x84,0x9A,0x00,0x00,}},
- {0x527D,2,{0xD8,0xE2,0x00,0x00,}},
- {0x527E,2,{0x84,0x9B,0x00,0x00,}},
- {0x527F,2,{0xBD,0xCB,0x00,0x00,}},
- {0x5280,2,{0x84,0x9C,0x00,0x00,}},
- {0x5281,2,{0xD8,0xE4,0x00,0x00,}},
- {0x5282,2,{0xD8,0xE3,0x00,0x00,}},
- {0x5283,2,{0x84,0x9D,0x00,0x00,}},
- {0x5284,2,{0x84,0x9E,0x00,0x00,}},
- {0x5285,2,{0x84,0x9F,0x00,0x00,}},
- {0x5286,2,{0x84,0xA0,0x00,0x00,}},
- {0x5287,2,{0x84,0xA1,0x00,0x00,}},
- {0x5288,2,{0xC5,0xFC,0x00,0x00,}},
- {0x5289,2,{0x84,0xA2,0x00,0x00,}},
- {0x528A,2,{0x84,0xA3,0x00,0x00,}},
- {0x528B,2,{0x84,0xA4,0x00,0x00,}},
- {0x528C,2,{0x84,0xA5,0x00,0x00,}},
- {0x528D,2,{0x84,0xA6,0x00,0x00,}},
- {0x528E,2,{0x84,0xA7,0x00,0x00,}},
- {0x528F,2,{0x84,0xA8,0x00,0x00,}},
- {0x5290,2,{0xD8,0xE5,0x00,0x00,}},
- {0x5291,2,{0x84,0xA9,0x00,0x00,}},
- {0x5292,2,{0x84,0xAA,0x00,0x00,}},
- {0x5293,2,{0xD8,0xE6,0x00,0x00,}},
- {0x5294,2,{0x84,0xAB,0x00,0x00,}},
- {0x5295,2,{0x84,0xAC,0x00,0x00,}},
- {0x5296,2,{0x84,0xAD,0x00,0x00,}},
- {0x5297,2,{0x84,0xAE,0x00,0x00,}},
- {0x5298,2,{0x84,0xAF,0x00,0x00,}},
- {0x5299,2,{0x84,0xB0,0x00,0x00,}},
- {0x529A,2,{0x84,0xB1,0x00,0x00,}},
- {0x529B,2,{0xC1,0xA6,0x00,0x00,}},
- {0x529C,2,{0x84,0xB2,0x00,0x00,}},
- {0x529D,2,{0xC8,0xB0,0x00,0x00,}},
- {0x529E,2,{0xB0,0xEC,0x00,0x00,}},
- {0x529F,2,{0xB9,0xA6,0x00,0x00,}},
- {0x52A0,2,{0xBC,0xD3,0x00,0x00,}},
- {0x52A1,2,{0xCE,0xF1,0x00,0x00,}},
- {0x52A2,2,{0xDB,0xBD,0x00,0x00,}},
- {0x52A3,2,{0xC1,0xD3,0x00,0x00,}},
- {0x52A4,2,{0x84,0xB3,0x00,0x00,}},
- {0x52A5,2,{0x84,0xB4,0x00,0x00,}},
- {0x52A6,2,{0x84,0xB5,0x00,0x00,}},
- {0x52A7,2,{0x84,0xB6,0x00,0x00,}},
- {0x52A8,2,{0xB6,0xAF,0x00,0x00,}},
- {0x52A9,2,{0xD6,0xFA,0x00,0x00,}},
- {0x52AA,2,{0xC5,0xAC,0x00,0x00,}},
- {0x52AB,2,{0xBD,0xD9,0x00,0x00,}},
- {0x52AC,2,{0xDB,0xBE,0x00,0x00,}},
- {0x52AD,2,{0xDB,0xBF,0x00,0x00,}},
- {0x52AE,2,{0x84,0xB7,0x00,0x00,}},
- {0x52AF,2,{0x84,0xB8,0x00,0x00,}},
- {0x52B0,2,{0x84,0xB9,0x00,0x00,}},
- {0x52B1,2,{0xC0,0xF8,0x00,0x00,}},
- {0x52B2,2,{0xBE,0xA2,0x00,0x00,}},
- {0x52B3,2,{0xC0,0xCD,0x00,0x00,}},
- {0x52B4,2,{0x84,0xBA,0x00,0x00,}},
- {0x52B5,2,{0x84,0xBB,0x00,0x00,}},
- {0x52B6,2,{0x84,0xBC,0x00,0x00,}},
- {0x52B7,2,{0x84,0xBD,0x00,0x00,}},
- {0x52B8,2,{0x84,0xBE,0x00,0x00,}},
- {0x52B9,2,{0x84,0xBF,0x00,0x00,}},
- {0x52BA,2,{0x84,0xC0,0x00,0x00,}},
- {0x52BB,2,{0x84,0xC1,0x00,0x00,}},
- {0x52BC,2,{0x84,0xC2,0x00,0x00,}},
- {0x52BD,2,{0x84,0xC3,0x00,0x00,}},
- {0x52BE,2,{0xDB,0xC0,0x00,0x00,}},
- {0x52BF,2,{0xCA,0xC6,0x00,0x00,}},
- {0x52C0,2,{0x84,0xC4,0x00,0x00,}},
- {0x52C1,2,{0x84,0xC5,0x00,0x00,}},
- {0x52C2,2,{0x84,0xC6,0x00,0x00,}},
- {0x52C3,2,{0xB2,0xAA,0x00,0x00,}},
- {0x52C4,2,{0x84,0xC7,0x00,0x00,}},
- {0x52C5,2,{0x84,0xC8,0x00,0x00,}},
- {0x52C6,2,{0x84,0xC9,0x00,0x00,}},
- {0x52C7,2,{0xD3,0xC2,0x00,0x00,}},
- {0x52C8,2,{0x84,0xCA,0x00,0x00,}},
- {0x52C9,2,{0xC3,0xE3,0x00,0x00,}},
- {0x52CA,2,{0x84,0xCB,0x00,0x00,}},
- {0x52CB,2,{0xD1,0xAB,0x00,0x00,}},
- {0x52CC,2,{0x84,0xCC,0x00,0x00,}},
- {0x52CD,2,{0x84,0xCD,0x00,0x00,}},
- {0x52CE,2,{0x84,0xCE,0x00,0x00,}},
- {0x52CF,2,{0x84,0xCF,0x00,0x00,}},
- {0x52D0,2,{0xDB,0xC2,0x00,0x00,}},
- {0x52D1,2,{0x84,0xD0,0x00,0x00,}},
- {0x52D2,2,{0xC0,0xD5,0x00,0x00,}},
- {0x52D3,2,{0x84,0xD1,0x00,0x00,}},
- {0x52D4,2,{0x84,0xD2,0x00,0x00,}},
- {0x52D5,2,{0x84,0xD3,0x00,0x00,}},
- {0x52D6,2,{0xDB,0xC3,0x00,0x00,}},
- {0x52D7,2,{0x84,0xD4,0x00,0x00,}},
- {0x52D8,2,{0xBF,0xB1,0x00,0x00,}},
- {0x52D9,2,{0x84,0xD5,0x00,0x00,}},
- {0x52DA,2,{0x84,0xD6,0x00,0x00,}},
- {0x52DB,2,{0x84,0xD7,0x00,0x00,}},
- {0x52DC,2,{0x84,0xD8,0x00,0x00,}},
- {0x52DD,2,{0x84,0xD9,0x00,0x00,}},
- {0x52DE,2,{0x84,0xDA,0x00,0x00,}},
- {0x52DF,2,{0xC4,0xBC,0x00,0x00,}},
- {0x52E0,2,{0x84,0xDB,0x00,0x00,}},
- {0x52E1,2,{0x84,0xDC,0x00,0x00,}},
- {0x52E2,2,{0x84,0xDD,0x00,0x00,}},
- {0x52E3,2,{0x84,0xDE,0x00,0x00,}},
- {0x52E4,2,{0xC7,0xDA,0x00,0x00,}},
- {0x52E5,2,{0x84,0xDF,0x00,0x00,}},
- {0x52E6,2,{0x84,0xE0,0x00,0x00,}},
- {0x52E7,2,{0x84,0xE1,0x00,0x00,}},
- {0x52E8,2,{0x84,0xE2,0x00,0x00,}},
- {0x52E9,2,{0x84,0xE3,0x00,0x00,}},
- {0x52EA,2,{0x84,0xE4,0x00,0x00,}},
- {0x52EB,2,{0x84,0xE5,0x00,0x00,}},
- {0x52EC,2,{0x84,0xE6,0x00,0x00,}},
- {0x52ED,2,{0x84,0xE7,0x00,0x00,}},
- {0x52EE,2,{0x84,0xE8,0x00,0x00,}},
- {0x52EF,2,{0x84,0xE9,0x00,0x00,}},
- {0x52F0,2,{0xDB,0xC4,0x00,0x00,}},
- {0x52F1,2,{0x84,0xEA,0x00,0x00,}},
- {0x52F2,2,{0x84,0xEB,0x00,0x00,}},
- {0x52F3,2,{0x84,0xEC,0x00,0x00,}},
- {0x52F4,2,{0x84,0xED,0x00,0x00,}},
- {0x52F5,2,{0x84,0xEE,0x00,0x00,}},
- {0x52F6,2,{0x84,0xEF,0x00,0x00,}},
- {0x52F7,2,{0x84,0xF0,0x00,0x00,}},
- {0x52F8,2,{0x84,0xF1,0x00,0x00,}},
- {0x52F9,2,{0xD9,0xE8,0x00,0x00,}},
- {0x52FA,2,{0xC9,0xD7,0x00,0x00,}},
- {0x52FB,2,{0x84,0xF2,0x00,0x00,}},
- {0x52FC,2,{0x84,0xF3,0x00,0x00,}},
- {0x52FD,2,{0x84,0xF4,0x00,0x00,}},
- {0x52FE,2,{0xB9,0xB4,0x00,0x00,}},
- {0x52FF,2,{0xCE,0xF0,0x00,0x00,}},
- {0x5300,2,{0xD4,0xC8,0x00,0x00,}},
- {0x5301,2,{0x84,0xF5,0x00,0x00,}},
- {0x5302,2,{0x84,0xF6,0x00,0x00,}},
- {0x5303,2,{0x84,0xF7,0x00,0x00,}},
- {0x5304,2,{0x84,0xF8,0x00,0x00,}},
- {0x5305,2,{0xB0,0xFC,0x00,0x00,}},
- {0x5306,2,{0xB4,0xD2,0x00,0x00,}},
- {0x5307,2,{0x84,0xF9,0x00,0x00,}},
- {0x5308,2,{0xD0,0xD9,0x00,0x00,}},
- {0x5309,2,{0x84,0xFA,0x00,0x00,}},
- {0x530A,2,{0x84,0xFB,0x00,0x00,}},
- {0x530B,2,{0x84,0xFC,0x00,0x00,}},
- {0x530C,2,{0x84,0xFD,0x00,0x00,}},
- {0x530D,2,{0xD9,0xE9,0x00,0x00,}},
- {0x530E,2,{0x84,0xFE,0x00,0x00,}},
- {0x530F,2,{0xDE,0xCB,0x00,0x00,}},
- {0x5310,2,{0xD9,0xEB,0x00,0x00,}},
- {0x5311,2,{0x85,0x40,0x00,0x00,}},
- {0x5312,2,{0x85,0x41,0x00,0x00,}},
- {0x5313,2,{0x85,0x42,0x00,0x00,}},
- {0x5314,2,{0x85,0x43,0x00,0x00,}},
- {0x5315,2,{0xD8,0xB0,0x00,0x00,}},
- {0x5316,2,{0xBB,0xAF,0x00,0x00,}},
- {0x5317,2,{0xB1,0xB1,0x00,0x00,}},
- {0x5318,2,{0x85,0x44,0x00,0x00,}},
- {0x5319,2,{0xB3,0xD7,0x00,0x00,}},
- {0x531A,2,{0xD8,0xCE,0x00,0x00,}},
- {0x531B,2,{0x85,0x45,0x00,0x00,}},
- {0x531C,2,{0x85,0x46,0x00,0x00,}},
- {0x531D,2,{0xD4,0xD1,0x00,0x00,}},
- {0x531E,2,{0x85,0x47,0x00,0x00,}},
- {0x531F,2,{0x85,0x48,0x00,0x00,}},
- {0x5320,2,{0xBD,0xB3,0x00,0x00,}},
- {0x5321,2,{0xBF,0xEF,0x00,0x00,}},
- {0x5322,2,{0x85,0x49,0x00,0x00,}},
- {0x5323,2,{0xCF,0xBB,0x00,0x00,}},
- {0x5324,2,{0x85,0x4A,0x00,0x00,}},
- {0x5325,2,{0x85,0x4B,0x00,0x00,}},
- {0x5326,2,{0xD8,0xD0,0x00,0x00,}},
- {0x5327,2,{0x85,0x4C,0x00,0x00,}},
- {0x5328,2,{0x85,0x4D,0x00,0x00,}},
- {0x5329,2,{0x85,0x4E,0x00,0x00,}},
- {0x532A,2,{0xB7,0xCB,0x00,0x00,}},
- {0x532B,2,{0x85,0x4F,0x00,0x00,}},
- {0x532C,2,{0x85,0x50,0x00,0x00,}},
- {0x532D,2,{0x85,0x51,0x00,0x00,}},
- {0x532E,2,{0xD8,0xD1,0x00,0x00,}},
- {0x532F,2,{0x85,0x52,0x00,0x00,}},
- {0x5330,2,{0x85,0x53,0x00,0x00,}},
- {0x5331,2,{0x85,0x54,0x00,0x00,}},
- {0x5332,2,{0x85,0x55,0x00,0x00,}},
- {0x5333,2,{0x85,0x56,0x00,0x00,}},
- {0x5334,2,{0x85,0x57,0x00,0x00,}},
- {0x5335,2,{0x85,0x58,0x00,0x00,}},
- {0x5336,2,{0x85,0x59,0x00,0x00,}},
- {0x5337,2,{0x85,0x5A,0x00,0x00,}},
- {0x5338,2,{0x85,0x5B,0x00,0x00,}},
- {0x5339,2,{0xC6,0xA5,0x00,0x00,}},
- {0x533A,2,{0xC7,0xF8,0x00,0x00,}},
- {0x533B,2,{0xD2,0xBD,0x00,0x00,}},
- {0x533C,2,{0x85,0x5C,0x00,0x00,}},
- {0x533D,2,{0x85,0x5D,0x00,0x00,}},
- {0x533E,2,{0xD8,0xD2,0x00,0x00,}},
- {0x533F,2,{0xC4,0xE4,0x00,0x00,}},
- {0x5340,2,{0x85,0x5E,0x00,0x00,}},
- {0x5341,2,{0xCA,0xAE,0x00,0x00,}},
- {0x5342,2,{0x85,0x5F,0x00,0x00,}},
- {0x5343,2,{0xC7,0xA7,0x00,0x00,}},
- {0x5344,2,{0x85,0x60,0x00,0x00,}},
- {0x5345,2,{0xD8,0xA6,0x00,0x00,}},
- {0x5346,2,{0x85,0x61,0x00,0x00,}},
- {0x5347,2,{0xC9,0xFD,0x00,0x00,}},
- {0x5348,2,{0xCE,0xE7,0x00,0x00,}},
- {0x5349,2,{0xBB,0xDC,0x00,0x00,}},
- {0x534A,2,{0xB0,0xEB,0x00,0x00,}},
- {0x534B,2,{0x85,0x62,0x00,0x00,}},
- {0x534C,2,{0x85,0x63,0x00,0x00,}},
- {0x534D,2,{0x85,0x64,0x00,0x00,}},
- {0x534E,2,{0xBB,0xAA,0x00,0x00,}},
- {0x534F,2,{0xD0,0xAD,0x00,0x00,}},
- {0x5350,2,{0x85,0x65,0x00,0x00,}},
- {0x5351,2,{0xB1,0xB0,0x00,0x00,}},
- {0x5352,2,{0xD7,0xE4,0x00,0x00,}},
- {0x5353,2,{0xD7,0xBF,0x00,0x00,}},
- {0x5354,2,{0x85,0x66,0x00,0x00,}},
- {0x5355,2,{0xB5,0xA5,0x00,0x00,}},
- {0x5356,2,{0xC2,0xF4,0x00,0x00,}},
- {0x5357,2,{0xC4,0xCF,0x00,0x00,}},
- {0x5358,2,{0x85,0x67,0x00,0x00,}},
- {0x5359,2,{0x85,0x68,0x00,0x00,}},
- {0x535A,2,{0xB2,0xA9,0x00,0x00,}},
- {0x535B,2,{0x85,0x69,0x00,0x00,}},
- {0x535C,2,{0xB2,0xB7,0x00,0x00,}},
- {0x535D,2,{0x85,0x6A,0x00,0x00,}},
- {0x535E,2,{0xB1,0xE5,0x00,0x00,}},
- {0x535F,2,{0xDF,0xB2,0x00,0x00,}},
- {0x5360,2,{0xD5,0xBC,0x00,0x00,}},
- {0x5361,2,{0xBF,0xA8,0x00,0x00,}},
- {0x5362,2,{0xC2,0xAC,0x00,0x00,}},
- {0x5363,2,{0xD8,0xD5,0x00,0x00,}},
- {0x5364,2,{0xC2,0xB1,0x00,0x00,}},
- {0x5365,2,{0x85,0x6B,0x00,0x00,}},
- {0x5366,2,{0xD8,0xD4,0x00,0x00,}},
- {0x5367,2,{0xCE,0xD4,0x00,0x00,}},
- {0x5368,2,{0x85,0x6C,0x00,0x00,}},
- {0x5369,2,{0xDA,0xE0,0x00,0x00,}},
- {0x536A,2,{0x85,0x6D,0x00,0x00,}},
- {0x536B,2,{0xCE,0xC0,0x00,0x00,}},
- {0x536C,2,{0x85,0x6E,0x00,0x00,}},
- {0x536D,2,{0x85,0x6F,0x00,0x00,}},
- {0x536E,2,{0xD8,0xB4,0x00,0x00,}},
- {0x536F,2,{0xC3,0xAE,0x00,0x00,}},
- {0x5370,2,{0xD3,0xA1,0x00,0x00,}},
- {0x5371,2,{0xCE,0xA3,0x00,0x00,}},
- {0x5372,2,{0x85,0x70,0x00,0x00,}},
- {0x5373,2,{0xBC,0xB4,0x00,0x00,}},
- {0x5374,2,{0xC8,0xB4,0x00,0x00,}},
- {0x5375,2,{0xC2,0xD1,0x00,0x00,}},
- {0x5376,2,{0x85,0x71,0x00,0x00,}},
- {0x5377,2,{0xBE,0xED,0x00,0x00,}},
- {0x5378,2,{0xD0,0xB6,0x00,0x00,}},
- {0x5379,2,{0x85,0x72,0x00,0x00,}},
- {0x537A,2,{0xDA,0xE1,0x00,0x00,}},
- {0x537B,2,{0x85,0x73,0x00,0x00,}},
- {0x537C,2,{0x85,0x74,0x00,0x00,}},
- {0x537D,2,{0x85,0x75,0x00,0x00,}},
- {0x537E,2,{0x85,0x76,0x00,0x00,}},
- {0x537F,2,{0xC7,0xE4,0x00,0x00,}},
- {0x5380,2,{0x85,0x77,0x00,0x00,}},
- {0x5381,2,{0x85,0x78,0x00,0x00,}},
- {0x5382,2,{0xB3,0xA7,0x00,0x00,}},
- {0x5383,2,{0x85,0x79,0x00,0x00,}},
- {0x5384,2,{0xB6,0xF2,0x00,0x00,}},
- {0x5385,2,{0xCC,0xFC,0x00,0x00,}},
- {0x5386,2,{0xC0,0xFA,0x00,0x00,}},
- {0x5387,2,{0x85,0x7A,0x00,0x00,}},
- {0x5388,2,{0x85,0x7B,0x00,0x00,}},
- {0x5389,2,{0xC0,0xF7,0x00,0x00,}},
- {0x538A,2,{0x85,0x7C,0x00,0x00,}},
- {0x538B,2,{0xD1,0xB9,0x00,0x00,}},
- {0x538C,2,{0xD1,0xE1,0x00,0x00,}},
- {0x538D,2,{0xD8,0xC7,0x00,0x00,}},
- {0x538E,2,{0x85,0x7D,0x00,0x00,}},
- {0x538F,2,{0x85,0x7E,0x00,0x00,}},
- {0x5390,2,{0x85,0x80,0x00,0x00,}},
- {0x5391,2,{0x85,0x81,0x00,0x00,}},
- {0x5392,2,{0x85,0x82,0x00,0x00,}},
- {0x5393,2,{0x85,0x83,0x00,0x00,}},
- {0x5394,2,{0x85,0x84,0x00,0x00,}},
- {0x5395,2,{0xB2,0xDE,0x00,0x00,}},
- {0x5396,2,{0x85,0x85,0x00,0x00,}},
- {0x5397,2,{0x85,0x86,0x00,0x00,}},
- {0x5398,2,{0xC0,0xE5,0x00,0x00,}},
- {0x5399,2,{0x85,0x87,0x00,0x00,}},
- {0x539A,2,{0xBA,0xF1,0x00,0x00,}},
- {0x539B,2,{0x85,0x88,0x00,0x00,}},
- {0x539C,2,{0x85,0x89,0x00,0x00,}},
- {0x539D,2,{0xD8,0xC8,0x00,0x00,}},
- {0x539E,2,{0x85,0x8A,0x00,0x00,}},
- {0x539F,2,{0xD4,0xAD,0x00,0x00,}},
- {0x53A0,2,{0x85,0x8B,0x00,0x00,}},
- {0x53A1,2,{0x85,0x8C,0x00,0x00,}},
- {0x53A2,2,{0xCF,0xE1,0x00,0x00,}},
- {0x53A3,2,{0xD8,0xC9,0x00,0x00,}},
- {0x53A4,2,{0x85,0x8D,0x00,0x00,}},
- {0x53A5,2,{0xD8,0xCA,0x00,0x00,}},
- {0x53A6,2,{0xCF,0xC3,0x00,0x00,}},
- {0x53A7,2,{0x85,0x8E,0x00,0x00,}},
- {0x53A8,2,{0xB3,0xF8,0x00,0x00,}},
- {0x53A9,2,{0xBE,0xC7,0x00,0x00,}},
- {0x53AA,2,{0x85,0x8F,0x00,0x00,}},
- {0x53AB,2,{0x85,0x90,0x00,0x00,}},
- {0x53AC,2,{0x85,0x91,0x00,0x00,}},
- {0x53AD,2,{0x85,0x92,0x00,0x00,}},
- {0x53AE,2,{0xD8,0xCB,0x00,0x00,}},
- {0x53AF,2,{0x85,0x93,0x00,0x00,}},
- {0x53B0,2,{0x85,0x94,0x00,0x00,}},
- {0x53B1,2,{0x85,0x95,0x00,0x00,}},
- {0x53B2,2,{0x85,0x96,0x00,0x00,}},
- {0x53B3,2,{0x85,0x97,0x00,0x00,}},
- {0x53B4,2,{0x85,0x98,0x00,0x00,}},
- {0x53B5,2,{0x85,0x99,0x00,0x00,}},
- {0x53B6,2,{0xDB,0xCC,0x00,0x00,}},
- {0x53B7,2,{0x85,0x9A,0x00,0x00,}},
- {0x53B8,2,{0x85,0x9B,0x00,0x00,}},
- {0x53B9,2,{0x85,0x9C,0x00,0x00,}},
- {0x53BA,2,{0x85,0x9D,0x00,0x00,}},
- {0x53BB,2,{0xC8,0xA5,0x00,0x00,}},
- {0x53BC,2,{0x85,0x9E,0x00,0x00,}},
- {0x53BD,2,{0x85,0x9F,0x00,0x00,}},
- {0x53BE,2,{0x85,0xA0,0x00,0x00,}},
- {0x53BF,2,{0xCF,0xD8,0x00,0x00,}},
- {0x53C0,2,{0x85,0xA1,0x00,0x00,}},
- {0x53C1,2,{0xC8,0xFE,0x00,0x00,}},
- {0x53C2,2,{0xB2,0xCE,0x00,0x00,}},
- {0x53C3,2,{0x85,0xA2,0x00,0x00,}},
- {0x53C4,2,{0x85,0xA3,0x00,0x00,}},
- {0x53C5,2,{0x85,0xA4,0x00,0x00,}},
- {0x53C6,2,{0x85,0xA5,0x00,0x00,}},
- {0x53C7,2,{0x85,0xA6,0x00,0x00,}},
- {0x53C8,2,{0xD3,0xD6,0x00,0x00,}},
- {0x53C9,2,{0xB2,0xE6,0x00,0x00,}},
- {0x53CA,2,{0xBC,0xB0,0x00,0x00,}},
- {0x53CB,2,{0xD3,0xD1,0x00,0x00,}},
- {0x53CC,2,{0xCB,0xAB,0x00,0x00,}},
- {0x53CD,2,{0xB7,0xB4,0x00,0x00,}},
- {0x53CE,2,{0x85,0xA7,0x00,0x00,}},
- {0x53CF,2,{0x85,0xA8,0x00,0x00,}},
- {0x53D0,2,{0x85,0xA9,0x00,0x00,}},
- {0x53D1,2,{0xB7,0xA2,0x00,0x00,}},
- {0x53D2,2,{0x85,0xAA,0x00,0x00,}},
- {0x53D3,2,{0x85,0xAB,0x00,0x00,}},
- {0x53D4,2,{0xCA,0xE5,0x00,0x00,}},
- {0x53D5,2,{0x85,0xAC,0x00,0x00,}},
- {0x53D6,2,{0xC8,0xA1,0x00,0x00,}},
- {0x53D7,2,{0xCA,0xDC,0x00,0x00,}},
- {0x53D8,2,{0xB1,0xE4,0x00,0x00,}},
- {0x53D9,2,{0xD0,0xF0,0x00,0x00,}},
- {0x53DA,2,{0x85,0xAD,0x00,0x00,}},
- {0x53DB,2,{0xC5,0xD1,0x00,0x00,}},
- {0x53DC,2,{0x85,0xAE,0x00,0x00,}},
- {0x53DD,2,{0x85,0xAF,0x00,0x00,}},
- {0x53DE,2,{0x85,0xB0,0x00,0x00,}},
- {0x53DF,2,{0xDB,0xC5,0x00,0x00,}},
- {0x53E0,2,{0xB5,0xFE,0x00,0x00,}},
- {0x53E1,2,{0x85,0xB1,0x00,0x00,}},
- {0x53E2,2,{0x85,0xB2,0x00,0x00,}},
- {0x53E3,2,{0xBF,0xDA,0x00,0x00,}},
- {0x53E4,2,{0xB9,0xC5,0x00,0x00,}},
- {0x53E5,2,{0xBE,0xE4,0x00,0x00,}},
- {0x53E6,2,{0xC1,0xED,0x00,0x00,}},
- {0x53E7,2,{0x85,0xB3,0x00,0x00,}},
- {0x53E8,2,{0xDF,0xB6,0x00,0x00,}},
- {0x53E9,2,{0xDF,0xB5,0x00,0x00,}},
- {0x53EA,2,{0xD6,0xBB,0x00,0x00,}},
- {0x53EB,2,{0xBD,0xD0,0x00,0x00,}},
- {0x53EC,2,{0xD5,0xD9,0x00,0x00,}},
- {0x53ED,2,{0xB0,0xC8,0x00,0x00,}},
- {0x53EE,2,{0xB6,0xA3,0x00,0x00,}},
- {0x53EF,2,{0xBF,0xC9,0x00,0x00,}},
- {0x53F0,2,{0xCC,0xA8,0x00,0x00,}},
- {0x53F1,2,{0xDF,0xB3,0x00,0x00,}},
- {0x53F2,2,{0xCA,0xB7,0x00,0x00,}},
- {0x53F3,2,{0xD3,0xD2,0x00,0x00,}},
- {0x53F4,2,{0x85,0xB4,0x00,0x00,}},
- {0x53F5,2,{0xD8,0xCF,0x00,0x00,}},
- {0x53F6,2,{0xD2,0xB6,0x00,0x00,}},
- {0x53F7,2,{0xBA,0xC5,0x00,0x00,}},
- {0x53F8,2,{0xCB,0xBE,0x00,0x00,}},
- {0x53F9,2,{0xCC,0xBE,0x00,0x00,}},
- {0x53FA,2,{0x85,0xB5,0x00,0x00,}},
- {0x53FB,2,{0xDF,0xB7,0x00,0x00,}},
- {0x53FC,2,{0xB5,0xF0,0x00,0x00,}},
- {0x53FD,2,{0xDF,0xB4,0x00,0x00,}},
- {0x53FE,2,{0x85,0xB6,0x00,0x00,}},
- {0x53FF,2,{0x85,0xB7,0x00,0x00,}},
- {0x5400,2,{0x85,0xB8,0x00,0x00,}},
- {0x5401,2,{0xD3,0xF5,0x00,0x00,}},
- {0x5402,2,{0x85,0xB9,0x00,0x00,}},
- {0x5403,2,{0xB3,0xD4,0x00,0x00,}},
- {0x5404,2,{0xB8,0xF7,0x00,0x00,}},
- {0x5405,2,{0x85,0xBA,0x00,0x00,}},
- {0x5406,2,{0xDF,0xBA,0x00,0x00,}},
- {0x5407,2,{0x85,0xBB,0x00,0x00,}},
- {0x5408,2,{0xBA,0xCF,0x00,0x00,}},
- {0x5409,2,{0xBC,0xAA,0x00,0x00,}},
- {0x540A,2,{0xB5,0xF5,0x00,0x00,}},
- {0x540B,2,{0x85,0xBC,0x00,0x00,}},
- {0x540C,2,{0xCD,0xAC,0x00,0x00,}},
- {0x540D,2,{0xC3,0xFB,0x00,0x00,}},
- {0x540E,2,{0xBA,0xF3,0x00,0x00,}},
- {0x540F,2,{0xC0,0xF4,0x00,0x00,}},
- {0x5410,2,{0xCD,0xC2,0x00,0x00,}},
- {0x5411,2,{0xCF,0xF2,0x00,0x00,}},
- {0x5412,2,{0xDF,0xB8,0x00,0x00,}},
- {0x5413,2,{0xCF,0xC5,0x00,0x00,}},
- {0x5414,2,{0x85,0xBD,0x00,0x00,}},
- {0x5415,2,{0xC2,0xC0,0x00,0x00,}},
- {0x5416,2,{0xDF,0xB9,0x00,0x00,}},
- {0x5417,2,{0xC2,0xF0,0x00,0x00,}},
- {0x5418,2,{0x85,0xBE,0x00,0x00,}},
- {0x5419,2,{0x85,0xBF,0x00,0x00,}},
- {0x541A,2,{0x85,0xC0,0x00,0x00,}},
- {0x541B,2,{0xBE,0xFD,0x00,0x00,}},
- {0x541C,2,{0x85,0xC1,0x00,0x00,}},
- {0x541D,2,{0xC1,0xDF,0x00,0x00,}},
- {0x541E,2,{0xCD,0xCC,0x00,0x00,}},
- {0x541F,2,{0xD2,0xF7,0x00,0x00,}},
- {0x5420,2,{0xB7,0xCD,0x00,0x00,}},
- {0x5421,2,{0xDF,0xC1,0x00,0x00,}},
- {0x5422,2,{0x85,0xC2,0x00,0x00,}},
- {0x5423,2,{0xDF,0xC4,0x00,0x00,}},
- {0x5424,2,{0x85,0xC3,0x00,0x00,}},
- {0x5425,2,{0x85,0xC4,0x00,0x00,}},
- {0x5426,2,{0xB7,0xF1,0x00,0x00,}},
- {0x5427,2,{0xB0,0xC9,0x00,0x00,}},
- {0x5428,2,{0xB6,0xD6,0x00,0x00,}},
- {0x5429,2,{0xB7,0xD4,0x00,0x00,}},
- {0x542A,2,{0x85,0xC5,0x00,0x00,}},
- {0x542B,2,{0xBA,0xAC,0x00,0x00,}},
- {0x542C,2,{0xCC,0xFD,0x00,0x00,}},
- {0x542D,2,{0xBF,0xD4,0x00,0x00,}},
- {0x542E,2,{0xCB,0xB1,0x00,0x00,}},
- {0x542F,2,{0xC6,0xF4,0x00,0x00,}},
- {0x5430,2,{0x85,0xC6,0x00,0x00,}},
- {0x5431,2,{0xD6,0xA8,0x00,0x00,}},
- {0x5432,2,{0xDF,0xC5,0x00,0x00,}},
- {0x5433,2,{0x85,0xC7,0x00,0x00,}},
- {0x5434,2,{0xCE,0xE2,0x00,0x00,}},
- {0x5435,2,{0xB3,0xB3,0x00,0x00,}},
- {0x5436,2,{0x85,0xC8,0x00,0x00,}},
- {0x5437,2,{0x85,0xC9,0x00,0x00,}},
- {0x5438,2,{0xCE,0xFC,0x00,0x00,}},
- {0x5439,2,{0xB4,0xB5,0x00,0x00,}},
- {0x543A,2,{0x85,0xCA,0x00,0x00,}},
- {0x543B,2,{0xCE,0xC7,0x00,0x00,}},
- {0x543C,2,{0xBA,0xF0,0x00,0x00,}},
- {0x543D,2,{0x85,0xCB,0x00,0x00,}},
- {0x543E,2,{0xCE,0xE1,0x00,0x00,}},
- {0x543F,2,{0x85,0xCC,0x00,0x00,}},
- {0x5440,2,{0xD1,0xBD,0x00,0x00,}},
- {0x5441,2,{0x85,0xCD,0x00,0x00,}},
- {0x5442,2,{0x85,0xCE,0x00,0x00,}},
- {0x5443,2,{0xDF,0xC0,0x00,0x00,}},
- {0x5444,2,{0x85,0xCF,0x00,0x00,}},
- {0x5445,2,{0x85,0xD0,0x00,0x00,}},
- {0x5446,2,{0xB4,0xF4,0x00,0x00,}},
- {0x5447,2,{0x85,0xD1,0x00,0x00,}},
- {0x5448,2,{0xB3,0xCA,0x00,0x00,}},
- {0x5449,2,{0x85,0xD2,0x00,0x00,}},
- {0x544A,2,{0xB8,0xE6,0x00,0x00,}},
- {0x544B,2,{0xDF,0xBB,0x00,0x00,}},
- {0x544C,2,{0x85,0xD3,0x00,0x00,}},
- {0x544D,2,{0x85,0xD4,0x00,0x00,}},
- {0x544E,2,{0x85,0xD5,0x00,0x00,}},
- {0x544F,2,{0x85,0xD6,0x00,0x00,}},
- {0x5450,2,{0xC4,0xC5,0x00,0x00,}},
- {0x5451,2,{0x85,0xD7,0x00,0x00,}},
- {0x5452,2,{0xDF,0xBC,0x00,0x00,}},
- {0x5453,2,{0xDF,0xBD,0x00,0x00,}},
- {0x5454,2,{0xDF,0xBE,0x00,0x00,}},
- {0x5455,2,{0xC5,0xBB,0x00,0x00,}},
- {0x5456,2,{0xDF,0xBF,0x00,0x00,}},
- {0x5457,2,{0xDF,0xC2,0x00,0x00,}},
- {0x5458,2,{0xD4,0xB1,0x00,0x00,}},
- {0x5459,2,{0xDF,0xC3,0x00,0x00,}},
- {0x545A,2,{0x85,0xD8,0x00,0x00,}},
- {0x545B,2,{0xC7,0xBA,0x00,0x00,}},
- {0x545C,2,{0xCE,0xD8,0x00,0x00,}},
- {0x545D,2,{0x85,0xD9,0x00,0x00,}},
- {0x545E,2,{0x85,0xDA,0x00,0x00,}},
- {0x545F,2,{0x85,0xDB,0x00,0x00,}},
- {0x5460,2,{0x85,0xDC,0x00,0x00,}},
- {0x5461,2,{0x85,0xDD,0x00,0x00,}},
- {0x5462,2,{0xC4,0xD8,0x00,0x00,}},
- {0x5463,2,{0x85,0xDE,0x00,0x00,}},
- {0x5464,2,{0xDF,0xCA,0x00,0x00,}},
- {0x5465,2,{0x85,0xDF,0x00,0x00,}},
- {0x5466,2,{0xDF,0xCF,0x00,0x00,}},
- {0x5467,2,{0x85,0xE0,0x00,0x00,}},
- {0x5468,2,{0xD6,0xDC,0x00,0x00,}},
- {0x5469,2,{0x85,0xE1,0x00,0x00,}},
- {0x546A,2,{0x85,0xE2,0x00,0x00,}},
- {0x546B,2,{0x85,0xE3,0x00,0x00,}},
- {0x546C,2,{0x85,0xE4,0x00,0x00,}},
- {0x546D,2,{0x85,0xE5,0x00,0x00,}},
- {0x546E,2,{0x85,0xE6,0x00,0x00,}},
- {0x546F,2,{0x85,0xE7,0x00,0x00,}},
- {0x5470,2,{0x85,0xE8,0x00,0x00,}},
- {0x5471,2,{0xDF,0xC9,0x00,0x00,}},
- {0x5472,2,{0xDF,0xDA,0x00,0x00,}},
- {0x5473,2,{0xCE,0xB6,0x00,0x00,}},
- {0x5474,2,{0x85,0xE9,0x00,0x00,}},
- {0x5475,2,{0xBA,0xC7,0x00,0x00,}},
- {0x5476,2,{0xDF,0xCE,0x00,0x00,}},
- {0x5477,2,{0xDF,0xC8,0x00,0x00,}},
- {0x5478,2,{0xC5,0xDE,0x00,0x00,}},
- {0x5479,2,{0x85,0xEA,0x00,0x00,}},
- {0x547A,2,{0x85,0xEB,0x00,0x00,}},
- {0x547B,2,{0xC9,0xEB,0x00,0x00,}},
- {0x547C,2,{0xBA,0xF4,0x00,0x00,}},
- {0x547D,2,{0xC3,0xFC,0x00,0x00,}},
- {0x547E,2,{0x85,0xEC,0x00,0x00,}},
- {0x547F,2,{0x85,0xED,0x00,0x00,}},
- {0x5480,2,{0xBE,0xD7,0x00,0x00,}},
- {0x5481,2,{0x85,0xEE,0x00,0x00,}},
- {0x5482,2,{0xDF,0xC6,0x00,0x00,}},
- {0x5483,2,{0x85,0xEF,0x00,0x00,}},
- {0x5484,2,{0xDF,0xCD,0x00,0x00,}},
- {0x5485,2,{0x85,0xF0,0x00,0x00,}},
- {0x5486,2,{0xC5,0xD8,0x00,0x00,}},
- {0x5487,2,{0x85,0xF1,0x00,0x00,}},
- {0x5488,2,{0x85,0xF2,0x00,0x00,}},
- {0x5489,2,{0x85,0xF3,0x00,0x00,}},
- {0x548A,2,{0x85,0xF4,0x00,0x00,}},
- {0x548B,2,{0xD5,0xA6,0x00,0x00,}},
- {0x548C,2,{0xBA,0xCD,0x00,0x00,}},
- {0x548D,2,{0x85,0xF5,0x00,0x00,}},
- {0x548E,2,{0xBE,0xCC,0x00,0x00,}},
- {0x548F,2,{0xD3,0xBD,0x00,0x00,}},
- {0x5490,2,{0xB8,0xC0,0x00,0x00,}},
- {0x5491,2,{0x85,0xF6,0x00,0x00,}},
- {0x5492,2,{0xD6,0xE4,0x00,0x00,}},
- {0x5493,2,{0x85,0xF7,0x00,0x00,}},
- {0x5494,2,{0xDF,0xC7,0x00,0x00,}},
- {0x5495,2,{0xB9,0xBE,0x00,0x00,}},
- {0x5496,2,{0xBF,0xA7,0x00,0x00,}},
- {0x5497,2,{0x85,0xF8,0x00,0x00,}},
- {0x5498,2,{0x85,0xF9,0x00,0x00,}},
- {0x5499,2,{0xC1,0xFC,0x00,0x00,}},
- {0x549A,2,{0xDF,0xCB,0x00,0x00,}},
- {0x549B,2,{0xDF,0xCC,0x00,0x00,}},
- {0x549C,2,{0x85,0xFA,0x00,0x00,}},
- {0x549D,2,{0xDF,0xD0,0x00,0x00,}},
- {0x549E,2,{0x85,0xFB,0x00,0x00,}},
- {0x549F,2,{0x85,0xFC,0x00,0x00,}},
- {0x54A0,2,{0x85,0xFD,0x00,0x00,}},
- {0x54A1,2,{0x85,0xFE,0x00,0x00,}},
- {0x54A2,2,{0x86,0x40,0x00,0x00,}},
- {0x54A3,2,{0xDF,0xDB,0x00,0x00,}},
- {0x54A4,2,{0xDF,0xE5,0x00,0x00,}},
- {0x54A5,2,{0x86,0x41,0x00,0x00,}},
- {0x54A6,2,{0xDF,0xD7,0x00,0x00,}},
- {0x54A7,2,{0xDF,0xD6,0x00,0x00,}},
- {0x54A8,2,{0xD7,0xC9,0x00,0x00,}},
- {0x54A9,2,{0xDF,0xE3,0x00,0x00,}},
- {0x54AA,2,{0xDF,0xE4,0x00,0x00,}},
- {0x54AB,2,{0xE5,0xEB,0x00,0x00,}},
- {0x54AC,2,{0xD2,0xA7,0x00,0x00,}},
- {0x54AD,2,{0xDF,0xD2,0x00,0x00,}},
- {0x54AE,2,{0x86,0x42,0x00,0x00,}},
- {0x54AF,2,{0xBF,0xA9,0x00,0x00,}},
- {0x54B0,2,{0x86,0x43,0x00,0x00,}},
- {0x54B1,2,{0xD4,0xDB,0x00,0x00,}},
- {0x54B2,2,{0x86,0x44,0x00,0x00,}},
- {0x54B3,2,{0xBF,0xC8,0x00,0x00,}},
- {0x54B4,2,{0xDF,0xD4,0x00,0x00,}},
- {0x54B5,2,{0x86,0x45,0x00,0x00,}},
- {0x54B6,2,{0x86,0x46,0x00,0x00,}},
- {0x54B7,2,{0x86,0x47,0x00,0x00,}},
- {0x54B8,2,{0xCF,0xCC,0x00,0x00,}},
- {0x54B9,2,{0x86,0x48,0x00,0x00,}},
- {0x54BA,2,{0x86,0x49,0x00,0x00,}},
- {0x54BB,2,{0xDF,0xDD,0x00,0x00,}},
- {0x54BC,2,{0x86,0x4A,0x00,0x00,}},
- {0x54BD,2,{0xD1,0xCA,0x00,0x00,}},
- {0x54BE,2,{0x86,0x4B,0x00,0x00,}},
- {0x54BF,2,{0xDF,0xDE,0x00,0x00,}},
- {0x54C0,2,{0xB0,0xA7,0x00,0x00,}},
- {0x54C1,2,{0xC6,0xB7,0x00,0x00,}},
- {0x54C2,2,{0xDF,0xD3,0x00,0x00,}},
- {0x54C3,2,{0x86,0x4C,0x00,0x00,}},
- {0x54C4,2,{0xBA,0xE5,0x00,0x00,}},
- {0x54C5,2,{0x86,0x4D,0x00,0x00,}},
- {0x54C6,2,{0xB6,0xDF,0x00,0x00,}},
- {0x54C7,2,{0xCD,0xDB,0x00,0x00,}},
- {0x54C8,2,{0xB9,0xFE,0x00,0x00,}},
- {0x54C9,2,{0xD4,0xD5,0x00,0x00,}},
- {0x54CA,2,{0x86,0x4E,0x00,0x00,}},
- {0x54CB,2,{0x86,0x4F,0x00,0x00,}},
- {0x54CC,2,{0xDF,0xDF,0x00,0x00,}},
- {0x54CD,2,{0xCF,0xEC,0x00,0x00,}},
- {0x54CE,2,{0xB0,0xA5,0x00,0x00,}},
- {0x54CF,2,{0xDF,0xE7,0x00,0x00,}},
- {0x54D0,2,{0xDF,0xD1,0x00,0x00,}},
- {0x54D1,2,{0xD1,0xC6,0x00,0x00,}},
- {0x54D2,2,{0xDF,0xD5,0x00,0x00,}},
- {0x54D3,2,{0xDF,0xD8,0x00,0x00,}},
- {0x54D4,2,{0xDF,0xD9,0x00,0x00,}},
- {0x54D5,2,{0xDF,0xDC,0x00,0x00,}},
- {0x54D6,2,{0x86,0x50,0x00,0x00,}},
- {0x54D7,2,{0xBB,0xA9,0x00,0x00,}},
- {0x54D8,2,{0x86,0x51,0x00,0x00,}},
- {0x54D9,2,{0xDF,0xE0,0x00,0x00,}},
- {0x54DA,2,{0xDF,0xE1,0x00,0x00,}},
- {0x54DB,2,{0x86,0x52,0x00,0x00,}},
- {0x54DC,2,{0xDF,0xE2,0x00,0x00,}},
- {0x54DD,2,{0xDF,0xE6,0x00,0x00,}},
- {0x54DE,2,{0xDF,0xE8,0x00,0x00,}},
- {0x54DF,2,{0xD3,0xB4,0x00,0x00,}},
- {0x54E0,2,{0x86,0x53,0x00,0x00,}},
- {0x54E1,2,{0x86,0x54,0x00,0x00,}},
- {0x54E2,2,{0x86,0x55,0x00,0x00,}},
- {0x54E3,2,{0x86,0x56,0x00,0x00,}},
- {0x54E4,2,{0x86,0x57,0x00,0x00,}},
- {0x54E5,2,{0xB8,0xE7,0x00,0x00,}},
- {0x54E6,2,{0xC5,0xB6,0x00,0x00,}},
- {0x54E7,2,{0xDF,0xEA,0x00,0x00,}},
- {0x54E8,2,{0xC9,0xDA,0x00,0x00,}},
- {0x54E9,2,{0xC1,0xA8,0x00,0x00,}},
- {0x54EA,2,{0xC4,0xC4,0x00,0x00,}},
- {0x54EB,2,{0x86,0x58,0x00,0x00,}},
- {0x54EC,2,{0x86,0x59,0x00,0x00,}},
- {0x54ED,2,{0xBF,0xDE,0x00,0x00,}},
- {0x54EE,2,{0xCF,0xF8,0x00,0x00,}},
- {0x54EF,2,{0x86,0x5A,0x00,0x00,}},
- {0x54F0,2,{0x86,0x5B,0x00,0x00,}},
- {0x54F1,2,{0x86,0x5C,0x00,0x00,}},
- {0x54F2,2,{0xD5,0xDC,0x00,0x00,}},
- {0x54F3,2,{0xDF,0xEE,0x00,0x00,}},
- {0x54F4,2,{0x86,0x5D,0x00,0x00,}},
- {0x54F5,2,{0x86,0x5E,0x00,0x00,}},
- {0x54F6,2,{0x86,0x5F,0x00,0x00,}},
- {0x54F7,2,{0x86,0x60,0x00,0x00,}},
- {0x54F8,2,{0x86,0x61,0x00,0x00,}},
- {0x54F9,2,{0x86,0x62,0x00,0x00,}},
- {0x54FA,2,{0xB2,0xB8,0x00,0x00,}},
- {0x54FB,2,{0x86,0x63,0x00,0x00,}},
- {0x54FC,2,{0xBA,0xDF,0x00,0x00,}},
- {0x54FD,2,{0xDF,0xEC,0x00,0x00,}},
- {0x54FE,2,{0x86,0x64,0x00,0x00,}},
- {0x54FF,2,{0xDB,0xC1,0x00,0x00,}},
- {0x5500,2,{0x86,0x65,0x00,0x00,}},
- {0x5501,2,{0xD1,0xE4,0x00,0x00,}},
- {0x5502,2,{0x86,0x66,0x00,0x00,}},
- {0x5503,2,{0x86,0x67,0x00,0x00,}},
- {0x5504,2,{0x86,0x68,0x00,0x00,}},
- {0x5505,2,{0x86,0x69,0x00,0x00,}},
- {0x5506,2,{0xCB,0xF4,0x00,0x00,}},
- {0x5507,2,{0xB4,0xBD,0x00,0x00,}},
- {0x5508,2,{0x86,0x6A,0x00,0x00,}},
- {0x5509,2,{0xB0,0xA6,0x00,0x00,}},
- {0x550A,2,{0x86,0x6B,0x00,0x00,}},
- {0x550B,2,{0x86,0x6C,0x00,0x00,}},
- {0x550C,2,{0x86,0x6D,0x00,0x00,}},
- {0x550D,2,{0x86,0x6E,0x00,0x00,}},
- {0x550E,2,{0x86,0x6F,0x00,0x00,}},
- {0x550F,2,{0xDF,0xF1,0x00,0x00,}},
- {0x5510,2,{0xCC,0xC6,0x00,0x00,}},
- {0x5511,2,{0xDF,0xF2,0x00,0x00,}},
- {0x5512,2,{0x86,0x70,0x00,0x00,}},
- {0x5513,2,{0x86,0x71,0x00,0x00,}},
- {0x5514,2,{0xDF,0xED,0x00,0x00,}},
- {0x5515,2,{0x86,0x72,0x00,0x00,}},
- {0x5516,2,{0x86,0x73,0x00,0x00,}},
- {0x5517,2,{0x86,0x74,0x00,0x00,}},
- {0x5518,2,{0x86,0x75,0x00,0x00,}},
- {0x5519,2,{0x86,0x76,0x00,0x00,}},
- {0x551A,2,{0x86,0x77,0x00,0x00,}},
- {0x551B,2,{0xDF,0xE9,0x00,0x00,}},
- {0x551C,2,{0x86,0x78,0x00,0x00,}},
- {0x551D,2,{0x86,0x79,0x00,0x00,}},
- {0x551E,2,{0x86,0x7A,0x00,0x00,}},
- {0x551F,2,{0x86,0x7B,0x00,0x00,}},
- {0x5520,2,{0xDF,0xEB,0x00,0x00,}},
- {0x5521,2,{0x86,0x7C,0x00,0x00,}},
- {0x5522,2,{0xDF,0xEF,0x00,0x00,}},
- {0x5523,2,{0xDF,0xF0,0x00,0x00,}},
- {0x5524,2,{0xBB,0xBD,0x00,0x00,}},
- {0x5525,2,{0x86,0x7D,0x00,0x00,}},
- {0x5526,2,{0x86,0x7E,0x00,0x00,}},
- {0x5527,2,{0xDF,0xF3,0x00,0x00,}},
- {0x5528,2,{0x86,0x80,0x00,0x00,}},
- {0x5529,2,{0x86,0x81,0x00,0x00,}},
- {0x552A,2,{0xDF,0xF4,0x00,0x00,}},
- {0x552B,2,{0x86,0x82,0x00,0x00,}},
- {0x552C,2,{0xBB,0xA3,0x00,0x00,}},
- {0x552D,2,{0x86,0x83,0x00,0x00,}},
- {0x552E,2,{0xCA,0xDB,0x00,0x00,}},
- {0x552F,2,{0xCE,0xA8,0x00,0x00,}},
- {0x5530,2,{0xE0,0xA7,0x00,0x00,}},
- {0x5531,2,{0xB3,0xAA,0x00,0x00,}},
- {0x5532,2,{0x86,0x84,0x00,0x00,}},
- {0x5533,2,{0xE0,0xA6,0x00,0x00,}},
- {0x5534,2,{0x86,0x85,0x00,0x00,}},
- {0x5535,2,{0x86,0x86,0x00,0x00,}},
- {0x5536,2,{0x86,0x87,0x00,0x00,}},
- {0x5537,2,{0xE0,0xA1,0x00,0x00,}},
- {0x5538,2,{0x86,0x88,0x00,0x00,}},
- {0x5539,2,{0x86,0x89,0x00,0x00,}},
- {0x553A,2,{0x86,0x8A,0x00,0x00,}},
- {0x553B,2,{0x86,0x8B,0x00,0x00,}},
- {0x553C,2,{0xDF,0xFE,0x00,0x00,}},
- {0x553D,2,{0x86,0x8C,0x00,0x00,}},
- {0x553E,2,{0xCD,0xD9,0x00,0x00,}},
- {0x553F,2,{0xDF,0xFC,0x00,0x00,}},
- {0x5540,2,{0x86,0x8D,0x00,0x00,}},
- {0x5541,2,{0xDF,0xFA,0x00,0x00,}},
- {0x5542,2,{0x86,0x8E,0x00,0x00,}},
- {0x5543,2,{0xBF,0xD0,0x00,0x00,}},
- {0x5544,2,{0xD7,0xC4,0x00,0x00,}},
- {0x5545,2,{0x86,0x8F,0x00,0x00,}},
- {0x5546,2,{0xC9,0xCC,0x00,0x00,}},
- {0x5547,2,{0x86,0x90,0x00,0x00,}},
- {0x5548,2,{0x86,0x91,0x00,0x00,}},
- {0x5549,2,{0xDF,0xF8,0x00,0x00,}},
- {0x554A,2,{0xB0,0xA1,0x00,0x00,}},
- {0x554B,2,{0x86,0x92,0x00,0x00,}},
- {0x554C,2,{0x86,0x93,0x00,0x00,}},
- {0x554D,2,{0x86,0x94,0x00,0x00,}},
- {0x554E,2,{0x86,0x95,0x00,0x00,}},
- {0x554F,2,{0x86,0x96,0x00,0x00,}},
- {0x5550,2,{0xDF,0xFD,0x00,0x00,}},
- {0x5551,2,{0x86,0x97,0x00,0x00,}},
- {0x5552,2,{0x86,0x98,0x00,0x00,}},
- {0x5553,2,{0x86,0x99,0x00,0x00,}},
- {0x5554,2,{0x86,0x9A,0x00,0x00,}},
- {0x5555,2,{0xDF,0xFB,0x00,0x00,}},
- {0x5556,2,{0xE0,0xA2,0x00,0x00,}},
- {0x5557,2,{0x86,0x9B,0x00,0x00,}},
- {0x5558,2,{0x86,0x9C,0x00,0x00,}},
- {0x5559,2,{0x86,0x9D,0x00,0x00,}},
- {0x555A,2,{0x86,0x9E,0x00,0x00,}},
- {0x555B,2,{0x86,0x9F,0x00,0x00,}},
- {0x555C,2,{0xE0,0xA8,0x00,0x00,}},
- {0x555D,2,{0x86,0xA0,0x00,0x00,}},
- {0x555E,2,{0x86,0xA1,0x00,0x00,}},
- {0x555F,2,{0x86,0xA2,0x00,0x00,}},
- {0x5560,2,{0x86,0xA3,0x00,0x00,}},
- {0x5561,2,{0xB7,0xC8,0x00,0x00,}},
- {0x5562,2,{0x86,0xA4,0x00,0x00,}},
- {0x5563,2,{0x86,0xA5,0x00,0x00,}},
- {0x5564,2,{0xC6,0xA1,0x00,0x00,}},
- {0x5565,2,{0xC9,0xB6,0x00,0x00,}},
- {0x5566,2,{0xC0,0xB2,0x00,0x00,}},
- {0x5567,2,{0xDF,0xF5,0x00,0x00,}},
- {0x5568,2,{0x86,0xA6,0x00,0x00,}},
- {0x5569,2,{0x86,0xA7,0x00,0x00,}},
- {0x556A,2,{0xC5,0xBE,0x00,0x00,}},
- {0x556B,2,{0x86,0xA8,0x00,0x00,}},
- {0x556C,2,{0xD8,0xC4,0x00,0x00,}},
- {0x556D,2,{0xDF,0xF9,0x00,0x00,}},
- {0x556E,2,{0xC4,0xF6,0x00,0x00,}},
- {0x556F,2,{0x86,0xA9,0x00,0x00,}},
- {0x5570,2,{0x86,0xAA,0x00,0x00,}},
- {0x5571,2,{0x86,0xAB,0x00,0x00,}},
- {0x5572,2,{0x86,0xAC,0x00,0x00,}},
- {0x5573,2,{0x86,0xAD,0x00,0x00,}},
- {0x5574,2,{0x86,0xAE,0x00,0x00,}},
- {0x5575,2,{0xE0,0xA3,0x00,0x00,}},
- {0x5576,2,{0xE0,0xA4,0x00,0x00,}},
- {0x5577,2,{0xE0,0xA5,0x00,0x00,}},
- {0x5578,2,{0xD0,0xA5,0x00,0x00,}},
- {0x5579,2,{0x86,0xAF,0x00,0x00,}},
- {0x557A,2,{0x86,0xB0,0x00,0x00,}},
- {0x557B,2,{0xE0,0xB4,0x00,0x00,}},
- {0x557C,2,{0xCC,0xE4,0x00,0x00,}},
- {0x557D,2,{0x86,0xB1,0x00,0x00,}},
- {0x557E,2,{0xE0,0xB1,0x00,0x00,}},
- {0x557F,2,{0x86,0xB2,0x00,0x00,}},
- {0x5580,2,{0xBF,0xA6,0x00,0x00,}},
- {0x5581,2,{0xE0,0xAF,0x00,0x00,}},
- {0x5582,2,{0xCE,0xB9,0x00,0x00,}},
- {0x5583,2,{0xE0,0xAB,0x00,0x00,}},
- {0x5584,2,{0xC9,0xC6,0x00,0x00,}},
- {0x5585,2,{0x86,0xB3,0x00,0x00,}},
- {0x5586,2,{0x86,0xB4,0x00,0x00,}},
- {0x5587,2,{0xC0,0xAE,0x00,0x00,}},
- {0x5588,2,{0xE0,0xAE,0x00,0x00,}},
- {0x5589,2,{0xBA,0xED,0x00,0x00,}},
- {0x558A,2,{0xBA,0xB0,0x00,0x00,}},
- {0x558B,2,{0xE0,0xA9,0x00,0x00,}},
- {0x558C,2,{0x86,0xB5,0x00,0x00,}},
- {0x558D,2,{0x86,0xB6,0x00,0x00,}},
- {0x558E,2,{0x86,0xB7,0x00,0x00,}},
- {0x558F,2,{0xDF,0xF6,0x00,0x00,}},
- {0x5590,2,{0x86,0xB8,0x00,0x00,}},
- {0x5591,2,{0xE0,0xB3,0x00,0x00,}},
- {0x5592,2,{0x86,0xB9,0x00,0x00,}},
- {0x5593,2,{0x86,0xBA,0x00,0x00,}},
- {0x5594,2,{0xE0,0xB8,0x00,0x00,}},
- {0x5595,2,{0x86,0xBB,0x00,0x00,}},
- {0x5596,2,{0x86,0xBC,0x00,0x00,}},
- {0x5597,2,{0x86,0xBD,0x00,0x00,}},
- {0x5598,2,{0xB4,0xAD,0x00,0x00,}},
- {0x5599,2,{0xE0,0xB9,0x00,0x00,}},
- {0x559A,2,{0x86,0xBE,0x00,0x00,}},
- {0x559B,2,{0x86,0xBF,0x00,0x00,}},
- {0x559C,2,{0xCF,0xB2,0x00,0x00,}},
- {0x559D,2,{0xBA,0xC8,0x00,0x00,}},
- {0x559E,2,{0x86,0xC0,0x00,0x00,}},
- {0x559F,2,{0xE0,0xB0,0x00,0x00,}},
- {0x55A0,2,{0x86,0xC1,0x00,0x00,}},
- {0x55A1,2,{0x86,0xC2,0x00,0x00,}},
- {0x55A2,2,{0x86,0xC3,0x00,0x00,}},
- {0x55A3,2,{0x86,0xC4,0x00,0x00,}},
- {0x55A4,2,{0x86,0xC5,0x00,0x00,}},
- {0x55A5,2,{0x86,0xC6,0x00,0x00,}},
- {0x55A6,2,{0x86,0xC7,0x00,0x00,}},
- {0x55A7,2,{0xD0,0xFA,0x00,0x00,}},
- {0x55A8,2,{0x86,0xC8,0x00,0x00,}},
- {0x55A9,2,{0x86,0xC9,0x00,0x00,}},
- {0x55AA,2,{0x86,0xCA,0x00,0x00,}},
- {0x55AB,2,{0x86,0xCB,0x00,0x00,}},
- {0x55AC,2,{0x86,0xCC,0x00,0x00,}},
- {0x55AD,2,{0x86,0xCD,0x00,0x00,}},
- {0x55AE,2,{0x86,0xCE,0x00,0x00,}},
- {0x55AF,2,{0x86,0xCF,0x00,0x00,}},
- {0x55B0,2,{0x86,0xD0,0x00,0x00,}},
- {0x55B1,2,{0xE0,0xAC,0x00,0x00,}},
- {0x55B2,2,{0x86,0xD1,0x00,0x00,}},
- {0x55B3,2,{0xD4,0xFB,0x00,0x00,}},
- {0x55B4,2,{0x86,0xD2,0x00,0x00,}},
- {0x55B5,2,{0xDF,0xF7,0x00,0x00,}},
- {0x55B6,2,{0x86,0xD3,0x00,0x00,}},
- {0x55B7,2,{0xC5,0xE7,0x00,0x00,}},
- {0x55B8,2,{0x86,0xD4,0x00,0x00,}},
- {0x55B9,2,{0xE0,0xAD,0x00,0x00,}},
- {0x55BA,2,{0x86,0xD5,0x00,0x00,}},
- {0x55BB,2,{0xD3,0xF7,0x00,0x00,}},
- {0x55BC,2,{0x86,0xD6,0x00,0x00,}},
- {0x55BD,2,{0xE0,0xB6,0x00,0x00,}},
- {0x55BE,2,{0xE0,0xB7,0x00,0x00,}},
- {0x55BF,2,{0x86,0xD7,0x00,0x00,}},
- {0x55C0,2,{0x86,0xD8,0x00,0x00,}},
- {0x55C1,2,{0x86,0xD9,0x00,0x00,}},
- {0x55C2,2,{0x86,0xDA,0x00,0x00,}},
- {0x55C3,2,{0x86,0xDB,0x00,0x00,}},
- {0x55C4,2,{0xE0,0xC4,0x00,0x00,}},
- {0x55C5,2,{0xD0,0xE1,0x00,0x00,}},
- {0x55C6,2,{0x86,0xDC,0x00,0x00,}},
- {0x55C7,2,{0x86,0xDD,0x00,0x00,}},
- {0x55C8,2,{0x86,0xDE,0x00,0x00,}},
- {0x55C9,2,{0xE0,0xBC,0x00,0x00,}},
- {0x55CA,2,{0x86,0xDF,0x00,0x00,}},
- {0x55CB,2,{0x86,0xE0,0x00,0x00,}},
- {0x55CC,2,{0xE0,0xC9,0x00,0x00,}},
- {0x55CD,2,{0xE0,0xCA,0x00,0x00,}},
- {0x55CE,2,{0x86,0xE1,0x00,0x00,}},
- {0x55CF,2,{0x86,0xE2,0x00,0x00,}},
- {0x55D0,2,{0x86,0xE3,0x00,0x00,}},
- {0x55D1,2,{0xE0,0xBE,0x00,0x00,}},
- {0x55D2,2,{0xE0,0xAA,0x00,0x00,}},
- {0x55D3,2,{0xC9,0xA4,0x00,0x00,}},
- {0x55D4,2,{0xE0,0xC1,0x00,0x00,}},
- {0x55D5,2,{0x86,0xE4,0x00,0x00,}},
- {0x55D6,2,{0xE0,0xB2,0x00,0x00,}},
- {0x55D7,2,{0x86,0xE5,0x00,0x00,}},
- {0x55D8,2,{0x86,0xE6,0x00,0x00,}},
- {0x55D9,2,{0x86,0xE7,0x00,0x00,}},
- {0x55DA,2,{0x86,0xE8,0x00,0x00,}},
- {0x55DB,2,{0x86,0xE9,0x00,0x00,}},
- {0x55DC,2,{0xCA,0xC8,0x00,0x00,}},
- {0x55DD,2,{0xE0,0xC3,0x00,0x00,}},
- {0x55DE,2,{0x86,0xEA,0x00,0x00,}},
- {0x55DF,2,{0xE0,0xB5,0x00,0x00,}},
- {0x55E0,2,{0x86,0xEB,0x00,0x00,}},
- {0x55E1,2,{0xCE,0xCB,0x00,0x00,}},
- {0x55E2,2,{0x86,0xEC,0x00,0x00,}},
- {0x55E3,2,{0xCB,0xC3,0x00,0x00,}},
- {0x55E4,2,{0xE0,0xCD,0x00,0x00,}},
- {0x55E5,2,{0xE0,0xC6,0x00,0x00,}},
- {0x55E6,2,{0xE0,0xC2,0x00,0x00,}},
- {0x55E7,2,{0x86,0xED,0x00,0x00,}},
- {0x55E8,2,{0xE0,0xCB,0x00,0x00,}},
- {0x55E9,2,{0x86,0xEE,0x00,0x00,}},
- {0x55EA,2,{0xE0,0xBA,0x00,0x00,}},
- {0x55EB,2,{0xE0,0xBF,0x00,0x00,}},
- {0x55EC,2,{0xE0,0xC0,0x00,0x00,}},
- {0x55ED,2,{0x86,0xEF,0x00,0x00,}},
- {0x55EE,2,{0x86,0xF0,0x00,0x00,}},
- {0x55EF,2,{0xE0,0xC5,0x00,0x00,}},
- {0x55F0,2,{0x86,0xF1,0x00,0x00,}},
- {0x55F1,2,{0x86,0xF2,0x00,0x00,}},
- {0x55F2,2,{0xE0,0xC7,0x00,0x00,}},
- {0x55F3,2,{0xE0,0xC8,0x00,0x00,}},
- {0x55F4,2,{0x86,0xF3,0x00,0x00,}},
- {0x55F5,2,{0xE0,0xCC,0x00,0x00,}},
- {0x55F6,2,{0x86,0xF4,0x00,0x00,}},
- {0x55F7,2,{0xE0,0xBB,0x00,0x00,}},
- {0x55F8,2,{0x86,0xF5,0x00,0x00,}},
- {0x55F9,2,{0x86,0xF6,0x00,0x00,}},
- {0x55FA,2,{0x86,0xF7,0x00,0x00,}},
- {0x55FB,2,{0x86,0xF8,0x00,0x00,}},
- {0x55FC,2,{0x86,0xF9,0x00,0x00,}},
- {0x55FD,2,{0xCB,0xD4,0x00,0x00,}},
- {0x55FE,2,{0xE0,0xD5,0x00,0x00,}},
- {0x55FF,2,{0x86,0xFA,0x00,0x00,}},
- {0x5600,2,{0xE0,0xD6,0x00,0x00,}},
- {0x5601,2,{0xE0,0xD2,0x00,0x00,}},
- {0x5602,2,{0x86,0xFB,0x00,0x00,}},
- {0x5603,2,{0x86,0xFC,0x00,0x00,}},
- {0x5604,2,{0x86,0xFD,0x00,0x00,}},
- {0x5605,2,{0x86,0xFE,0x00,0x00,}},
- {0x5606,2,{0x87,0x40,0x00,0x00,}},
- {0x5607,2,{0x87,0x41,0x00,0x00,}},
- {0x5608,2,{0xE0,0xD0,0x00,0x00,}},
- {0x5609,2,{0xBC,0xCE,0x00,0x00,}},
- {0x560A,2,{0x87,0x42,0x00,0x00,}},
- {0x560B,2,{0x87,0x43,0x00,0x00,}},
- {0x560C,2,{0xE0,0xD1,0x00,0x00,}},
- {0x560D,2,{0x87,0x44,0x00,0x00,}},
- {0x560E,2,{0xB8,0xC2,0x00,0x00,}},
- {0x560F,2,{0xD8,0xC5,0x00,0x00,}},
- {0x5610,2,{0x87,0x45,0x00,0x00,}},
- {0x5611,2,{0x87,0x46,0x00,0x00,}},
- {0x5612,2,{0x87,0x47,0x00,0x00,}},
- {0x5613,2,{0x87,0x48,0x00,0x00,}},
- {0x5614,2,{0x87,0x49,0x00,0x00,}},
- {0x5615,2,{0x87,0x4A,0x00,0x00,}},
- {0x5616,2,{0x87,0x4B,0x00,0x00,}},
- {0x5617,2,{0x87,0x4C,0x00,0x00,}},
- {0x5618,2,{0xD0,0xEA,0x00,0x00,}},
- {0x5619,2,{0x87,0x4D,0x00,0x00,}},
- {0x561A,2,{0x87,0x4E,0x00,0x00,}},
- {0x561B,2,{0xC2,0xEF,0x00,0x00,}},
- {0x561C,2,{0x87,0x4F,0x00,0x00,}},
- {0x561D,2,{0x87,0x50,0x00,0x00,}},
- {0x561E,2,{0xE0,0xCF,0x00,0x00,}},
- {0x561F,2,{0xE0,0xBD,0x00,0x00,}},
- {0x5620,2,{0x87,0x51,0x00,0x00,}},
- {0x5621,2,{0x87,0x52,0x00,0x00,}},
- {0x5622,2,{0x87,0x53,0x00,0x00,}},
- {0x5623,2,{0xE0,0xD4,0x00,0x00,}},
- {0x5624,2,{0xE0,0xD3,0x00,0x00,}},
- {0x5625,2,{0x87,0x54,0x00,0x00,}},
- {0x5626,2,{0x87,0x55,0x00,0x00,}},
- {0x5627,2,{0xE0,0xD7,0x00,0x00,}},
- {0x5628,2,{0x87,0x56,0x00,0x00,}},
- {0x5629,2,{0x87,0x57,0x00,0x00,}},
- {0x562A,2,{0x87,0x58,0x00,0x00,}},
- {0x562B,2,{0x87,0x59,0x00,0x00,}},
- {0x562C,2,{0xE0,0xDC,0x00,0x00,}},
- {0x562D,2,{0xE0,0xD8,0x00,0x00,}},
- {0x562E,2,{0x87,0x5A,0x00,0x00,}},
- {0x562F,2,{0x87,0x5B,0x00,0x00,}},
- {0x5630,2,{0x87,0x5C,0x00,0x00,}},
- {0x5631,2,{0xD6,0xF6,0x00,0x00,}},
- {0x5632,2,{0xB3,0xB0,0x00,0x00,}},
- {0x5633,2,{0x87,0x5D,0x00,0x00,}},
- {0x5634,2,{0xD7,0xEC,0x00,0x00,}},
- {0x5635,2,{0x87,0x5E,0x00,0x00,}},
- {0x5636,2,{0xCB,0xBB,0x00,0x00,}},
- {0x5637,2,{0x87,0x5F,0x00,0x00,}},
- {0x5638,2,{0x87,0x60,0x00,0x00,}},
- {0x5639,2,{0xE0,0xDA,0x00,0x00,}},
- {0x563A,2,{0x87,0x61,0x00,0x00,}},
- {0x563B,2,{0xCE,0xFB,0x00,0x00,}},
- {0x563C,2,{0x87,0x62,0x00,0x00,}},
- {0x563D,2,{0x87,0x63,0x00,0x00,}},
- {0x563E,2,{0x87,0x64,0x00,0x00,}},
- {0x563F,2,{0xBA,0xD9,0x00,0x00,}},
- {0x5640,2,{0x87,0x65,0x00,0x00,}},
- {0x5641,2,{0x87,0x66,0x00,0x00,}},
- {0x5642,2,{0x87,0x67,0x00,0x00,}},
- {0x5643,2,{0x87,0x68,0x00,0x00,}},
- {0x5644,2,{0x87,0x69,0x00,0x00,}},
- {0x5645,2,{0x87,0x6A,0x00,0x00,}},
- {0x5646,2,{0x87,0x6B,0x00,0x00,}},
- {0x5647,2,{0x87,0x6C,0x00,0x00,}},
- {0x5648,2,{0x87,0x6D,0x00,0x00,}},
- {0x5649,2,{0x87,0x6E,0x00,0x00,}},
- {0x564A,2,{0x87,0x6F,0x00,0x00,}},
- {0x564B,2,{0x87,0x70,0x00,0x00,}},
- {0x564C,2,{0xE0,0xE1,0x00,0x00,}},
- {0x564D,2,{0xE0,0xDD,0x00,0x00,}},
- {0x564E,2,{0xD2,0xAD,0x00,0x00,}},
- {0x564F,2,{0x87,0x71,0x00,0x00,}},
- {0x5650,2,{0x87,0x72,0x00,0x00,}},
- {0x5651,2,{0x87,0x73,0x00,0x00,}},
- {0x5652,2,{0x87,0x74,0x00,0x00,}},
- {0x5653,2,{0x87,0x75,0x00,0x00,}},
- {0x5654,2,{0xE0,0xE2,0x00,0x00,}},
- {0x5655,2,{0x87,0x76,0x00,0x00,}},
- {0x5656,2,{0x87,0x77,0x00,0x00,}},
- {0x5657,2,{0xE0,0xDB,0x00,0x00,}},
- {0x5658,2,{0xE0,0xD9,0x00,0x00,}},
- {0x5659,2,{0xE0,0xDF,0x00,0x00,}},
- {0x565A,2,{0x87,0x78,0x00,0x00,}},
- {0x565B,2,{0x87,0x79,0x00,0x00,}},
- {0x565C,2,{0xE0,0xE0,0x00,0x00,}},
- {0x565D,2,{0x87,0x7A,0x00,0x00,}},
- {0x565E,2,{0x87,0x7B,0x00,0x00,}},
- {0x565F,2,{0x87,0x7C,0x00,0x00,}},
- {0x5660,2,{0x87,0x7D,0x00,0x00,}},
- {0x5661,2,{0x87,0x7E,0x00,0x00,}},
- {0x5662,2,{0xE0,0xDE,0x00,0x00,}},
- {0x5663,2,{0x87,0x80,0x00,0x00,}},
- {0x5664,2,{0xE0,0xE4,0x00,0x00,}},
- {0x5665,2,{0x87,0x81,0x00,0x00,}},
- {0x5666,2,{0x87,0x82,0x00,0x00,}},
- {0x5667,2,{0x87,0x83,0x00,0x00,}},
- {0x5668,2,{0xC6,0xF7,0x00,0x00,}},
- {0x5669,2,{0xD8,0xAC,0x00,0x00,}},
- {0x566A,2,{0xD4,0xEB,0x00,0x00,}},
- {0x566B,2,{0xE0,0xE6,0x00,0x00,}},
- {0x566C,2,{0xCA,0xC9,0x00,0x00,}},
- {0x566D,2,{0x87,0x84,0x00,0x00,}},
- {0x566E,2,{0x87,0x85,0x00,0x00,}},
- {0x566F,2,{0x87,0x86,0x00,0x00,}},
- {0x5670,2,{0x87,0x87,0x00,0x00,}},
- {0x5671,2,{0xE0,0xE5,0x00,0x00,}},
- {0x5672,2,{0x87,0x88,0x00,0x00,}},
- {0x5673,2,{0x87,0x89,0x00,0x00,}},
- {0x5674,2,{0x87,0x8A,0x00,0x00,}},
- {0x5675,2,{0x87,0x8B,0x00,0x00,}},
- {0x5676,2,{0xB8,0xC1,0x00,0x00,}},
- {0x5677,2,{0x87,0x8C,0x00,0x00,}},
- {0x5678,2,{0x87,0x8D,0x00,0x00,}},
- {0x5679,2,{0x87,0x8E,0x00,0x00,}},
- {0x567A,2,{0x87,0x8F,0x00,0x00,}},
- {0x567B,2,{0xE0,0xE7,0x00,0x00,}},
- {0x567C,2,{0xE0,0xE8,0x00,0x00,}},
- {0x567D,2,{0x87,0x90,0x00,0x00,}},
- {0x567E,2,{0x87,0x91,0x00,0x00,}},
- {0x567F,2,{0x87,0x92,0x00,0x00,}},
- {0x5680,2,{0x87,0x93,0x00,0x00,}},
- {0x5681,2,{0x87,0x94,0x00,0x00,}},
- {0x5682,2,{0x87,0x95,0x00,0x00,}},
- {0x5683,2,{0x87,0x96,0x00,0x00,}},
- {0x5684,2,{0x87,0x97,0x00,0x00,}},
- {0x5685,2,{0xE0,0xE9,0x00,0x00,}},
- {0x5686,2,{0xE0,0xE3,0x00,0x00,}},
- {0x5687,2,{0x87,0x98,0x00,0x00,}},
- {0x5688,2,{0x87,0x99,0x00,0x00,}},
- {0x5689,2,{0x87,0x9A,0x00,0x00,}},
- {0x568A,2,{0x87,0x9B,0x00,0x00,}},
- {0x568B,2,{0x87,0x9C,0x00,0x00,}},
- {0x568C,2,{0x87,0x9D,0x00,0x00,}},
- {0x568D,2,{0x87,0x9E,0x00,0x00,}},
- {0x568E,2,{0xBA,0xBF,0x00,0x00,}},
- {0x568F,2,{0xCC,0xE7,0x00,0x00,}},
- {0x5690,2,{0x87,0x9F,0x00,0x00,}},
- {0x5691,2,{0x87,0xA0,0x00,0x00,}},
- {0x5692,2,{0x87,0xA1,0x00,0x00,}},
- {0x5693,2,{0xE0,0xEA,0x00,0x00,}},
- {0x5694,2,{0x87,0xA2,0x00,0x00,}},
- {0x5695,2,{0x87,0xA3,0x00,0x00,}},
- {0x5696,2,{0x87,0xA4,0x00,0x00,}},
- {0x5697,2,{0x87,0xA5,0x00,0x00,}},
- {0x5698,2,{0x87,0xA6,0x00,0x00,}},
- {0x5699,2,{0x87,0xA7,0x00,0x00,}},
- {0x569A,2,{0x87,0xA8,0x00,0x00,}},
- {0x569B,2,{0x87,0xA9,0x00,0x00,}},
- {0x569C,2,{0x87,0xAA,0x00,0x00,}},
- {0x569D,2,{0x87,0xAB,0x00,0x00,}},
- {0x569E,2,{0x87,0xAC,0x00,0x00,}},
- {0x569F,2,{0x87,0xAD,0x00,0x00,}},
- {0x56A0,2,{0x87,0xAE,0x00,0x00,}},
- {0x56A1,2,{0x87,0xAF,0x00,0x00,}},
- {0x56A2,2,{0x87,0xB0,0x00,0x00,}},
- {0x56A3,2,{0xCF,0xF9,0x00,0x00,}},
- {0x56A4,2,{0x87,0xB1,0x00,0x00,}},
- {0x56A5,2,{0x87,0xB2,0x00,0x00,}},
- {0x56A6,2,{0x87,0xB3,0x00,0x00,}},
- {0x56A7,2,{0x87,0xB4,0x00,0x00,}},
- {0x56A8,2,{0x87,0xB5,0x00,0x00,}},
- {0x56A9,2,{0x87,0xB6,0x00,0x00,}},
- {0x56AA,2,{0x87,0xB7,0x00,0x00,}},
- {0x56AB,2,{0x87,0xB8,0x00,0x00,}},
- {0x56AC,2,{0x87,0xB9,0x00,0x00,}},
- {0x56AD,2,{0x87,0xBA,0x00,0x00,}},
- {0x56AE,2,{0x87,0xBB,0x00,0x00,}},
- {0x56AF,2,{0xE0,0xEB,0x00,0x00,}},
- {0x56B0,2,{0x87,0xBC,0x00,0x00,}},
- {0x56B1,2,{0x87,0xBD,0x00,0x00,}},
- {0x56B2,2,{0x87,0xBE,0x00,0x00,}},
- {0x56B3,2,{0x87,0xBF,0x00,0x00,}},
- {0x56B4,2,{0x87,0xC0,0x00,0x00,}},
- {0x56B5,2,{0x87,0xC1,0x00,0x00,}},
- {0x56B6,2,{0x87,0xC2,0x00,0x00,}},
- {0x56B7,2,{0xC8,0xC2,0x00,0x00,}},
- {0x56B8,2,{0x87,0xC3,0x00,0x00,}},
- {0x56B9,2,{0x87,0xC4,0x00,0x00,}},
- {0x56BA,2,{0x87,0xC5,0x00,0x00,}},
- {0x56BB,2,{0x87,0xC6,0x00,0x00,}},
- {0x56BC,2,{0xBD,0xC0,0x00,0x00,}},
- {0x56BD,2,{0x87,0xC7,0x00,0x00,}},
- {0x56BE,2,{0x87,0xC8,0x00,0x00,}},
- {0x56BF,2,{0x87,0xC9,0x00,0x00,}},
- {0x56C0,2,{0x87,0xCA,0x00,0x00,}},
- {0x56C1,2,{0x87,0xCB,0x00,0x00,}},
- {0x56C2,2,{0x87,0xCC,0x00,0x00,}},
- {0x56C3,2,{0x87,0xCD,0x00,0x00,}},
- {0x56C4,2,{0x87,0xCE,0x00,0x00,}},
- {0x56C5,2,{0x87,0xCF,0x00,0x00,}},
- {0x56C6,2,{0x87,0xD0,0x00,0x00,}},
- {0x56C7,2,{0x87,0xD1,0x00,0x00,}},
- {0x56C8,2,{0x87,0xD2,0x00,0x00,}},
- {0x56C9,2,{0x87,0xD3,0x00,0x00,}},
- {0x56CA,2,{0xC4,0xD2,0x00,0x00,}},
- {0x56CB,2,{0x87,0xD4,0x00,0x00,}},
- {0x56CC,2,{0x87,0xD5,0x00,0x00,}},
- {0x56CD,2,{0x87,0xD6,0x00,0x00,}},
- {0x56CE,2,{0x87,0xD7,0x00,0x00,}},
- {0x56CF,2,{0x87,0xD8,0x00,0x00,}},
- {0x56D0,2,{0x87,0xD9,0x00,0x00,}},
- {0x56D1,2,{0x87,0xDA,0x00,0x00,}},
- {0x56D2,2,{0x87,0xDB,0x00,0x00,}},
- {0x56D3,2,{0x87,0xDC,0x00,0x00,}},
- {0x56D4,2,{0xE0,0xEC,0x00,0x00,}},
- {0x56D5,2,{0x87,0xDD,0x00,0x00,}},
- {0x56D6,2,{0x87,0xDE,0x00,0x00,}},
- {0x56D7,2,{0xE0,0xED,0x00,0x00,}},
- {0x56D8,2,{0x87,0xDF,0x00,0x00,}},
- {0x56D9,2,{0x87,0xE0,0x00,0x00,}},
- {0x56DA,2,{0xC7,0xF4,0x00,0x00,}},
- {0x56DB,2,{0xCB,0xC4,0x00,0x00,}},
- {0x56DC,2,{0x87,0xE1,0x00,0x00,}},
- {0x56DD,2,{0xE0,0xEE,0x00,0x00,}},
- {0x56DE,2,{0xBB,0xD8,0x00,0x00,}},
- {0x56DF,2,{0xD8,0xB6,0x00,0x00,}},
- {0x56E0,2,{0xD2,0xF2,0x00,0x00,}},
- {0x56E1,2,{0xE0,0xEF,0x00,0x00,}},
- {0x56E2,2,{0xCD,0xC5,0x00,0x00,}},
- {0x56E3,2,{0x87,0xE2,0x00,0x00,}},
- {0x56E4,2,{0xB6,0xDA,0x00,0x00,}},
- {0x56E5,2,{0x87,0xE3,0x00,0x00,}},
- {0x56E6,2,{0x87,0xE4,0x00,0x00,}},
- {0x56E7,2,{0x87,0xE5,0x00,0x00,}},
- {0x56E8,2,{0x87,0xE6,0x00,0x00,}},
- {0x56E9,2,{0x87,0xE7,0x00,0x00,}},
- {0x56EA,2,{0x87,0xE8,0x00,0x00,}},
- {0x56EB,2,{0xE0,0xF1,0x00,0x00,}},
- {0x56EC,2,{0x87,0xE9,0x00,0x00,}},
- {0x56ED,2,{0xD4,0xB0,0x00,0x00,}},
- {0x56EE,2,{0x87,0xEA,0x00,0x00,}},
- {0x56EF,2,{0x87,0xEB,0x00,0x00,}},
- {0x56F0,2,{0xC0,0xA7,0x00,0x00,}},
- {0x56F1,2,{0xB4,0xD1,0x00,0x00,}},
- {0x56F2,2,{0x87,0xEC,0x00,0x00,}},
- {0x56F3,2,{0x87,0xED,0x00,0x00,}},
- {0x56F4,2,{0xCE,0xA7,0x00,0x00,}},
- {0x56F5,2,{0xE0,0xF0,0x00,0x00,}},
- {0x56F6,2,{0x87,0xEE,0x00,0x00,}},
- {0x56F7,2,{0x87,0xEF,0x00,0x00,}},
- {0x56F8,2,{0x87,0xF0,0x00,0x00,}},
- {0x56F9,2,{0xE0,0xF2,0x00,0x00,}},
- {0x56FA,2,{0xB9,0xCC,0x00,0x00,}},
- {0x56FB,2,{0x87,0xF1,0x00,0x00,}},
- {0x56FC,2,{0x87,0xF2,0x00,0x00,}},
- {0x56FD,2,{0xB9,0xFA,0x00,0x00,}},
- {0x56FE,2,{0xCD,0xBC,0x00,0x00,}},
- {0x56FF,2,{0xE0,0xF3,0x00,0x00,}},
- {0x5700,2,{0x87,0xF3,0x00,0x00,}},
- {0x5701,2,{0x87,0xF4,0x00,0x00,}},
- {0x5702,2,{0x87,0xF5,0x00,0x00,}},
- {0x5703,2,{0xC6,0xD4,0x00,0x00,}},
- {0x5704,2,{0xE0,0xF4,0x00,0x00,}},
- {0x5705,2,{0x87,0xF6,0x00,0x00,}},
- {0x5706,2,{0xD4,0xB2,0x00,0x00,}},
- {0x5707,2,{0x87,0xF7,0x00,0x00,}},
- {0x5708,2,{0xC8,0xA6,0x00,0x00,}},
- {0x5709,2,{0xE0,0xF6,0x00,0x00,}},
- {0x570A,2,{0xE0,0xF5,0x00,0x00,}},
- {0x570B,2,{0x87,0xF8,0x00,0x00,}},
- {0x570C,2,{0x87,0xF9,0x00,0x00,}},
- {0x570D,2,{0x87,0xFA,0x00,0x00,}},
- {0x570E,2,{0x87,0xFB,0x00,0x00,}},
- {0x570F,2,{0x87,0xFC,0x00,0x00,}},
- {0x5710,2,{0x87,0xFD,0x00,0x00,}},
- {0x5711,2,{0x87,0xFE,0x00,0x00,}},
- {0x5712,2,{0x88,0x40,0x00,0x00,}},
- {0x5713,2,{0x88,0x41,0x00,0x00,}},
- {0x5714,2,{0x88,0x42,0x00,0x00,}},
- {0x5715,2,{0x88,0x43,0x00,0x00,}},
- {0x5716,2,{0x88,0x44,0x00,0x00,}},
- {0x5717,2,{0x88,0x45,0x00,0x00,}},
- {0x5718,2,{0x88,0x46,0x00,0x00,}},
- {0x5719,2,{0x88,0x47,0x00,0x00,}},
- {0x571A,2,{0x88,0x48,0x00,0x00,}},
- {0x571B,2,{0x88,0x49,0x00,0x00,}},
- {0x571C,2,{0xE0,0xF7,0x00,0x00,}},
- {0x571D,2,{0x88,0x4A,0x00,0x00,}},
- {0x571E,2,{0x88,0x4B,0x00,0x00,}},
- {0x571F,2,{0xCD,0xC1,0x00,0x00,}},
- {0x5720,2,{0x88,0x4C,0x00,0x00,}},
- {0x5721,2,{0x88,0x4D,0x00,0x00,}},
- {0x5722,2,{0x88,0x4E,0x00,0x00,}},
- {0x5723,2,{0xCA,0xA5,0x00,0x00,}},
- {0x5724,2,{0x88,0x4F,0x00,0x00,}},
- {0x5725,2,{0x88,0x50,0x00,0x00,}},
- {0x5726,2,{0x88,0x51,0x00,0x00,}},
- {0x5727,2,{0x88,0x52,0x00,0x00,}},
- {0x5728,2,{0xD4,0xDA,0x00,0x00,}},
- {0x5729,2,{0xDB,0xD7,0x00,0x00,}},
- {0x572A,2,{0xDB,0xD9,0x00,0x00,}},
- {0x572B,2,{0x88,0x53,0x00,0x00,}},
- {0x572C,2,{0xDB,0xD8,0x00,0x00,}},
- {0x572D,2,{0xB9,0xE7,0x00,0x00,}},
- {0x572E,2,{0xDB,0xDC,0x00,0x00,}},
- {0x572F,2,{0xDB,0xDD,0x00,0x00,}},
- {0x5730,2,{0xB5,0xD8,0x00,0x00,}},
- {0x5731,2,{0x88,0x54,0x00,0x00,}},
- {0x5732,2,{0x88,0x55,0x00,0x00,}},
- {0x5733,2,{0xDB,0xDA,0x00,0x00,}},
- {0x5734,2,{0x88,0x56,0x00,0x00,}},
- {0x5735,2,{0x88,0x57,0x00,0x00,}},
- {0x5736,2,{0x88,0x58,0x00,0x00,}},
- {0x5737,2,{0x88,0x59,0x00,0x00,}},
- {0x5738,2,{0x88,0x5A,0x00,0x00,}},
- {0x5739,2,{0xDB,0xDB,0x00,0x00,}},
- {0x573A,2,{0xB3,0xA1,0x00,0x00,}},
- {0x573B,2,{0xDB,0xDF,0x00,0x00,}},
- {0x573C,2,{0x88,0x5B,0x00,0x00,}},
- {0x573D,2,{0x88,0x5C,0x00,0x00,}},
- {0x573E,2,{0xBB,0xF8,0x00,0x00,}},
- {0x573F,2,{0x88,0x5D,0x00,0x00,}},
- {0x5740,2,{0xD6,0xB7,0x00,0x00,}},
- {0x5741,2,{0x88,0x5E,0x00,0x00,}},
- {0x5742,2,{0xDB,0xE0,0x00,0x00,}},
- {0x5743,2,{0x88,0x5F,0x00,0x00,}},
- {0x5744,2,{0x88,0x60,0x00,0x00,}},
- {0x5745,2,{0x88,0x61,0x00,0x00,}},
- {0x5746,2,{0x88,0x62,0x00,0x00,}},
- {0x5747,2,{0xBE,0xF9,0x00,0x00,}},
- {0x5748,2,{0x88,0x63,0x00,0x00,}},
- {0x5749,2,{0x88,0x64,0x00,0x00,}},
- {0x574A,2,{0xB7,0xBB,0x00,0x00,}},
- {0x574B,2,{0x88,0x65,0x00,0x00,}},
- {0x574C,2,{0xDB,0xD0,0x00,0x00,}},
- {0x574D,2,{0xCC,0xAE,0x00,0x00,}},
- {0x574E,2,{0xBF,0xB2,0x00,0x00,}},
- {0x574F,2,{0xBB,0xB5,0x00,0x00,}},
- {0x5750,2,{0xD7,0xF8,0x00,0x00,}},
- {0x5751,2,{0xBF,0xD3,0x00,0x00,}},
- {0x5752,2,{0x88,0x66,0x00,0x00,}},
- {0x5753,2,{0x88,0x67,0x00,0x00,}},
- {0x5754,2,{0x88,0x68,0x00,0x00,}},
- {0x5755,2,{0x88,0x69,0x00,0x00,}},
- {0x5756,2,{0x88,0x6A,0x00,0x00,}},
- {0x5757,2,{0xBF,0xE9,0x00,0x00,}},
- {0x5758,2,{0x88,0x6B,0x00,0x00,}},
- {0x5759,2,{0x88,0x6C,0x00,0x00,}},
- {0x575A,2,{0xBC,0xE1,0x00,0x00,}},
- {0x575B,2,{0xCC,0xB3,0x00,0x00,}},
- {0x575C,2,{0xDB,0xDE,0x00,0x00,}},
- {0x575D,2,{0xB0,0xD3,0x00,0x00,}},
- {0x575E,2,{0xCE,0xEB,0x00,0x00,}},
- {0x575F,2,{0xB7,0xD8,0x00,0x00,}},
- {0x5760,2,{0xD7,0xB9,0x00,0x00,}},
- {0x5761,2,{0xC6,0xC2,0x00,0x00,}},
- {0x5762,2,{0x88,0x6D,0x00,0x00,}},
- {0x5763,2,{0x88,0x6E,0x00,0x00,}},
- {0x5764,2,{0xC0,0xA4,0x00,0x00,}},
- {0x5765,2,{0x88,0x6F,0x00,0x00,}},
- {0x5766,2,{0xCC,0xB9,0x00,0x00,}},
- {0x5767,2,{0x88,0x70,0x00,0x00,}},
- {0x5768,2,{0xDB,0xE7,0x00,0x00,}},
- {0x5769,2,{0xDB,0xE1,0x00,0x00,}},
- {0x576A,2,{0xC6,0xBA,0x00,0x00,}},
- {0x576B,2,{0xDB,0xE3,0x00,0x00,}},
- {0x576C,2,{0x88,0x71,0x00,0x00,}},
- {0x576D,2,{0xDB,0xE8,0x00,0x00,}},
- {0x576E,2,{0x88,0x72,0x00,0x00,}},
- {0x576F,2,{0xC5,0xF7,0x00,0x00,}},
- {0x5770,2,{0x88,0x73,0x00,0x00,}},
- {0x5771,2,{0x88,0x74,0x00,0x00,}},
- {0x5772,2,{0x88,0x75,0x00,0x00,}},
- {0x5773,2,{0xDB,0xEA,0x00,0x00,}},
- {0x5774,2,{0x88,0x76,0x00,0x00,}},
- {0x5775,2,{0x88,0x77,0x00,0x00,}},
- {0x5776,2,{0xDB,0xE9,0x00,0x00,}},
- {0x5777,2,{0xBF,0xC0,0x00,0x00,}},
- {0x5778,2,{0x88,0x78,0x00,0x00,}},
- {0x5779,2,{0x88,0x79,0x00,0x00,}},
- {0x577A,2,{0x88,0x7A,0x00,0x00,}},
- {0x577B,2,{0xDB,0xE6,0x00,0x00,}},
- {0x577C,2,{0xDB,0xE5,0x00,0x00,}},
- {0x577D,2,{0x88,0x7B,0x00,0x00,}},
- {0x577E,2,{0x88,0x7C,0x00,0x00,}},
- {0x577F,2,{0x88,0x7D,0x00,0x00,}},
- {0x5780,2,{0x88,0x7E,0x00,0x00,}},
- {0x5781,2,{0x88,0x80,0x00,0x00,}},
- {0x5782,2,{0xB4,0xB9,0x00,0x00,}},
- {0x5783,2,{0xC0,0xAC,0x00,0x00,}},
- {0x5784,2,{0xC2,0xA2,0x00,0x00,}},
- {0x5785,2,{0xDB,0xE2,0x00,0x00,}},
- {0x5786,2,{0xDB,0xE4,0x00,0x00,}},
- {0x5787,2,{0x88,0x81,0x00,0x00,}},
- {0x5788,2,{0x88,0x82,0x00,0x00,}},
- {0x5789,2,{0x88,0x83,0x00,0x00,}},
- {0x578A,2,{0x88,0x84,0x00,0x00,}},
- {0x578B,2,{0xD0,0xCD,0x00,0x00,}},
- {0x578C,2,{0xDB,0xED,0x00,0x00,}},
- {0x578D,2,{0x88,0x85,0x00,0x00,}},
- {0x578E,2,{0x88,0x86,0x00,0x00,}},
- {0x578F,2,{0x88,0x87,0x00,0x00,}},
- {0x5790,2,{0x88,0x88,0x00,0x00,}},
- {0x5791,2,{0x88,0x89,0x00,0x00,}},
- {0x5792,2,{0xC0,0xDD,0x00,0x00,}},
- {0x5793,2,{0xDB,0xF2,0x00,0x00,}},
- {0x5794,2,{0x88,0x8A,0x00,0x00,}},
- {0x5795,2,{0x88,0x8B,0x00,0x00,}},
- {0x5796,2,{0x88,0x8C,0x00,0x00,}},
- {0x5797,2,{0x88,0x8D,0x00,0x00,}},
- {0x5798,2,{0x88,0x8E,0x00,0x00,}},
- {0x5799,2,{0x88,0x8F,0x00,0x00,}},
- {0x579A,2,{0x88,0x90,0x00,0x00,}},
- {0x579B,2,{0xB6,0xE2,0x00,0x00,}},
- {0x579C,2,{0x88,0x91,0x00,0x00,}},
- {0x579D,2,{0x88,0x92,0x00,0x00,}},
- {0x579E,2,{0x88,0x93,0x00,0x00,}},
- {0x579F,2,{0x88,0x94,0x00,0x00,}},
- {0x57A0,2,{0xDB,0xF3,0x00,0x00,}},
- {0x57A1,2,{0xDB,0xD2,0x00,0x00,}},
- {0x57A2,2,{0xB9,0xB8,0x00,0x00,}},
- {0x57A3,2,{0xD4,0xAB,0x00,0x00,}},
- {0x57A4,2,{0xDB,0xEC,0x00,0x00,}},
- {0x57A5,2,{0x88,0x95,0x00,0x00,}},
- {0x57A6,2,{0xBF,0xD1,0x00,0x00,}},
- {0x57A7,2,{0xDB,0xF0,0x00,0x00,}},
- {0x57A8,2,{0x88,0x96,0x00,0x00,}},
- {0x57A9,2,{0xDB,0xD1,0x00,0x00,}},
- {0x57AA,2,{0x88,0x97,0x00,0x00,}},
- {0x57AB,2,{0xB5,0xE6,0x00,0x00,}},
- {0x57AC,2,{0x88,0x98,0x00,0x00,}},
- {0x57AD,2,{0xDB,0xEB,0x00,0x00,}},
- {0x57AE,2,{0xBF,0xE5,0x00,0x00,}},
- {0x57AF,2,{0x88,0x99,0x00,0x00,}},
- {0x57B0,2,{0x88,0x9A,0x00,0x00,}},
- {0x57B1,2,{0x88,0x9B,0x00,0x00,}},
- {0x57B2,2,{0xDB,0xEE,0x00,0x00,}},
- {0x57B3,2,{0x88,0x9C,0x00,0x00,}},
- {0x57B4,2,{0xDB,0xF1,0x00,0x00,}},
- {0x57B5,2,{0x88,0x9D,0x00,0x00,}},
- {0x57B6,2,{0x88,0x9E,0x00,0x00,}},
- {0x57B7,2,{0x88,0x9F,0x00,0x00,}},
- {0x57B8,2,{0xDB,0xF9,0x00,0x00,}},
- {0x57B9,2,{0x88,0xA0,0x00,0x00,}},
- {0x57BA,2,{0x88,0xA1,0x00,0x00,}},
- {0x57BB,2,{0x88,0xA2,0x00,0x00,}},
- {0x57BC,2,{0x88,0xA3,0x00,0x00,}},
- {0x57BD,2,{0x88,0xA4,0x00,0x00,}},
- {0x57BE,2,{0x88,0xA5,0x00,0x00,}},
- {0x57BF,2,{0x88,0xA6,0x00,0x00,}},
- {0x57C0,2,{0x88,0xA7,0x00,0x00,}},
- {0x57C1,2,{0x88,0xA8,0x00,0x00,}},
- {0x57C2,2,{0xB9,0xA1,0x00,0x00,}},
- {0x57C3,2,{0xB0,0xA3,0x00,0x00,}},
- {0x57C4,2,{0x88,0xA9,0x00,0x00,}},
- {0x57C5,2,{0x88,0xAA,0x00,0x00,}},
- {0x57C6,2,{0x88,0xAB,0x00,0x00,}},
- {0x57C7,2,{0x88,0xAC,0x00,0x00,}},
- {0x57C8,2,{0x88,0xAD,0x00,0x00,}},
- {0x57C9,2,{0x88,0xAE,0x00,0x00,}},
- {0x57CA,2,{0x88,0xAF,0x00,0x00,}},
- {0x57CB,2,{0xC2,0xF1,0x00,0x00,}},
- {0x57CC,2,{0x88,0xB0,0x00,0x00,}},
- {0x57CD,2,{0x88,0xB1,0x00,0x00,}},
- {0x57CE,2,{0xB3,0xC7,0x00,0x00,}},
- {0x57CF,2,{0xDB,0xEF,0x00,0x00,}},
- {0x57D0,2,{0x88,0xB2,0x00,0x00,}},
- {0x57D1,2,{0x88,0xB3,0x00,0x00,}},
- {0x57D2,2,{0xDB,0xF8,0x00,0x00,}},
- {0x57D3,2,{0x88,0xB4,0x00,0x00,}},
- {0x57D4,2,{0xC6,0xD2,0x00,0x00,}},
- {0x57D5,2,{0xDB,0xF4,0x00,0x00,}},
- {0x57D6,2,{0x88,0xB5,0x00,0x00,}},
- {0x57D7,2,{0x88,0xB6,0x00,0x00,}},
- {0x57D8,2,{0xDB,0xF5,0x00,0x00,}},
- {0x57D9,2,{0xDB,0xF7,0x00,0x00,}},
- {0x57DA,2,{0xDB,0xF6,0x00,0x00,}},
- {0x57DB,2,{0x88,0xB7,0x00,0x00,}},
- {0x57DC,2,{0x88,0xB8,0x00,0x00,}},
- {0x57DD,2,{0xDB,0xFE,0x00,0x00,}},
- {0x57DE,2,{0x88,0xB9,0x00,0x00,}},
- {0x57DF,2,{0xD3,0xF2,0x00,0x00,}},
- {0x57E0,2,{0xB2,0xBA,0x00,0x00,}},
- {0x57E1,2,{0x88,0xBA,0x00,0x00,}},
- {0x57E2,2,{0x88,0xBB,0x00,0x00,}},
- {0x57E3,2,{0x88,0xBC,0x00,0x00,}},
- {0x57E4,2,{0xDB,0xFD,0x00,0x00,}},
- {0x57E5,2,{0x88,0xBD,0x00,0x00,}},
- {0x57E6,2,{0x88,0xBE,0x00,0x00,}},
- {0x57E7,2,{0x88,0xBF,0x00,0x00,}},
- {0x57E8,2,{0x88,0xC0,0x00,0x00,}},
- {0x57E9,2,{0x88,0xC1,0x00,0x00,}},
- {0x57EA,2,{0x88,0xC2,0x00,0x00,}},
- {0x57EB,2,{0x88,0xC3,0x00,0x00,}},
- {0x57EC,2,{0x88,0xC4,0x00,0x00,}},
- {0x57ED,2,{0xDC,0xA4,0x00,0x00,}},
- {0x57EE,2,{0x88,0xC5,0x00,0x00,}},
- {0x57EF,2,{0xDB,0xFB,0x00,0x00,}},
- {0x57F0,2,{0x88,0xC6,0x00,0x00,}},
- {0x57F1,2,{0x88,0xC7,0x00,0x00,}},
- {0x57F2,2,{0x88,0xC8,0x00,0x00,}},
- {0x57F3,2,{0x88,0xC9,0x00,0x00,}},
- {0x57F4,2,{0xDB,0xFA,0x00,0x00,}},
- {0x57F5,2,{0x88,0xCA,0x00,0x00,}},
- {0x57F6,2,{0x88,0xCB,0x00,0x00,}},
- {0x57F7,2,{0x88,0xCC,0x00,0x00,}},
- {0x57F8,2,{0xDB,0xFC,0x00,0x00,}},
- {0x57F9,2,{0xC5,0xE0,0x00,0x00,}},
- {0x57FA,2,{0xBB,0xF9,0x00,0x00,}},
- {0x57FB,2,{0x88,0xCD,0x00,0x00,}},
- {0x57FC,2,{0x88,0xCE,0x00,0x00,}},
- {0x57FD,2,{0xDC,0xA3,0x00,0x00,}},
- {0x57FE,2,{0x88,0xCF,0x00,0x00,}},
- {0x57FF,2,{0x88,0xD0,0x00,0x00,}},
- {0x5800,2,{0xDC,0xA5,0x00,0x00,}},
- {0x5801,2,{0x88,0xD1,0x00,0x00,}},
- {0x5802,2,{0xCC,0xC3,0x00,0x00,}},
- {0x5803,2,{0x88,0xD2,0x00,0x00,}},
- {0x5804,2,{0x88,0xD3,0x00,0x00,}},
- {0x5805,2,{0x88,0xD4,0x00,0x00,}},
- {0x5806,2,{0xB6,0xD1,0x00,0x00,}},
- {0x5807,2,{0xDD,0xC0,0x00,0x00,}},
- {0x5808,2,{0x88,0xD5,0x00,0x00,}},
- {0x5809,2,{0x88,0xD6,0x00,0x00,}},
- {0x580A,2,{0x88,0xD7,0x00,0x00,}},
- {0x580B,2,{0xDC,0xA1,0x00,0x00,}},
- {0x580C,2,{0x88,0xD8,0x00,0x00,}},
- {0x580D,2,{0xDC,0xA2,0x00,0x00,}},
- {0x580E,2,{0x88,0xD9,0x00,0x00,}},
- {0x580F,2,{0x88,0xDA,0x00,0x00,}},
- {0x5810,2,{0x88,0xDB,0x00,0x00,}},
- {0x5811,2,{0xC7,0xB5,0x00,0x00,}},
- {0x5812,2,{0x88,0xDC,0x00,0x00,}},
- {0x5813,2,{0x88,0xDD,0x00,0x00,}},
- {0x5814,2,{0x88,0xDE,0x00,0x00,}},
- {0x5815,2,{0xB6,0xE9,0x00,0x00,}},
- {0x5816,2,{0x88,0xDF,0x00,0x00,}},
- {0x5817,2,{0x88,0xE0,0x00,0x00,}},
- {0x5818,2,{0x88,0xE1,0x00,0x00,}},
- {0x5819,2,{0xDC,0xA7,0x00,0x00,}},
- {0x581A,2,{0x88,0xE2,0x00,0x00,}},
- {0x581B,2,{0x88,0xE3,0x00,0x00,}},
- {0x581C,2,{0x88,0xE4,0x00,0x00,}},
- {0x581D,2,{0x88,0xE5,0x00,0x00,}},
- {0x581E,2,{0xDC,0xA6,0x00,0x00,}},
- {0x581F,2,{0x88,0xE6,0x00,0x00,}},
- {0x5820,2,{0xDC,0xA9,0x00,0x00,}},
- {0x5821,2,{0xB1,0xA4,0x00,0x00,}},
- {0x5822,2,{0x88,0xE7,0x00,0x00,}},
- {0x5823,2,{0x88,0xE8,0x00,0x00,}},
- {0x5824,2,{0xB5,0xCC,0x00,0x00,}},
- {0x5825,2,{0x88,0xE9,0x00,0x00,}},
- {0x5826,2,{0x88,0xEA,0x00,0x00,}},
- {0x5827,2,{0x88,0xEB,0x00,0x00,}},
- {0x5828,2,{0x88,0xEC,0x00,0x00,}},
- {0x5829,2,{0x88,0xED,0x00,0x00,}},
- {0x582A,2,{0xBF,0xB0,0x00,0x00,}},
- {0x582B,2,{0x88,0xEE,0x00,0x00,}},
- {0x582C,2,{0x88,0xEF,0x00,0x00,}},
- {0x582D,2,{0x88,0xF0,0x00,0x00,}},
- {0x582E,2,{0x88,0xF1,0x00,0x00,}},
- {0x582F,2,{0x88,0xF2,0x00,0x00,}},
- {0x5830,2,{0xD1,0xDF,0x00,0x00,}},
- {0x5831,2,{0x88,0xF3,0x00,0x00,}},
- {0x5832,2,{0x88,0xF4,0x00,0x00,}},
- {0x5833,2,{0x88,0xF5,0x00,0x00,}},
- {0x5834,2,{0x88,0xF6,0x00,0x00,}},
- {0x5835,2,{0xB6,0xC2,0x00,0x00,}},
- {0x5836,2,{0x88,0xF7,0x00,0x00,}},
- {0x5837,2,{0x88,0xF8,0x00,0x00,}},
- {0x5838,2,{0x88,0xF9,0x00,0x00,}},
- {0x5839,2,{0x88,0xFA,0x00,0x00,}},
- {0x583A,2,{0x88,0xFB,0x00,0x00,}},
- {0x583B,2,{0x88,0xFC,0x00,0x00,}},
- {0x583C,2,{0x88,0xFD,0x00,0x00,}},
- {0x583D,2,{0x88,0xFE,0x00,0x00,}},
- {0x583E,2,{0x89,0x40,0x00,0x00,}},
- {0x583F,2,{0x89,0x41,0x00,0x00,}},
- {0x5840,2,{0x89,0x42,0x00,0x00,}},
- {0x5841,2,{0x89,0x43,0x00,0x00,}},
- {0x5842,2,{0x89,0x44,0x00,0x00,}},
- {0x5843,2,{0x89,0x45,0x00,0x00,}},
- {0x5844,2,{0xDC,0xA8,0x00,0x00,}},
- {0x5845,2,{0x89,0x46,0x00,0x00,}},
- {0x5846,2,{0x89,0x47,0x00,0x00,}},
- {0x5847,2,{0x89,0x48,0x00,0x00,}},
- {0x5848,2,{0x89,0x49,0x00,0x00,}},
- {0x5849,2,{0x89,0x4A,0x00,0x00,}},
- {0x584A,2,{0x89,0x4B,0x00,0x00,}},
- {0x584B,2,{0x89,0x4C,0x00,0x00,}},
- {0x584C,2,{0xCB,0xFA,0x00,0x00,}},
- {0x584D,2,{0xEB,0xF3,0x00,0x00,}},
- {0x584E,2,{0x89,0x4D,0x00,0x00,}},
- {0x584F,2,{0x89,0x4E,0x00,0x00,}},
- {0x5850,2,{0x89,0x4F,0x00,0x00,}},
- {0x5851,2,{0xCB,0xDC,0x00,0x00,}},
- {0x5852,2,{0x89,0x50,0x00,0x00,}},
- {0x5853,2,{0x89,0x51,0x00,0x00,}},
- {0x5854,2,{0xCB,0xFE,0x00,0x00,}},
- {0x5855,2,{0x89,0x52,0x00,0x00,}},
- {0x5856,2,{0x89,0x53,0x00,0x00,}},
- {0x5857,2,{0x89,0x54,0x00,0x00,}},
- {0x5858,2,{0xCC,0xC1,0x00,0x00,}},
- {0x5859,2,{0x89,0x55,0x00,0x00,}},
- {0x585A,2,{0x89,0x56,0x00,0x00,}},
- {0x585B,2,{0x89,0x57,0x00,0x00,}},
- {0x585C,2,{0x89,0x58,0x00,0x00,}},
- {0x585D,2,{0x89,0x59,0x00,0x00,}},
- {0x585E,2,{0xC8,0xFB,0x00,0x00,}},
- {0x585F,2,{0x89,0x5A,0x00,0x00,}},
- {0x5860,2,{0x89,0x5B,0x00,0x00,}},
- {0x5861,2,{0x89,0x5C,0x00,0x00,}},
- {0x5862,2,{0x89,0x5D,0x00,0x00,}},
- {0x5863,2,{0x89,0x5E,0x00,0x00,}},
- {0x5864,2,{0x89,0x5F,0x00,0x00,}},
- {0x5865,2,{0xDC,0xAA,0x00,0x00,}},
- {0x5866,2,{0x89,0x60,0x00,0x00,}},
- {0x5867,2,{0x89,0x61,0x00,0x00,}},
- {0x5868,2,{0x89,0x62,0x00,0x00,}},
- {0x5869,2,{0x89,0x63,0x00,0x00,}},
- {0x586A,2,{0x89,0x64,0x00,0x00,}},
- {0x586B,2,{0xCC,0xEE,0x00,0x00,}},
- {0x586C,2,{0xDC,0xAB,0x00,0x00,}},
- {0x586D,2,{0x89,0x65,0x00,0x00,}},
- {0x586E,2,{0x89,0x66,0x00,0x00,}},
- {0x586F,2,{0x89,0x67,0x00,0x00,}},
- {0x5870,2,{0x89,0x68,0x00,0x00,}},
- {0x5871,2,{0x89,0x69,0x00,0x00,}},
- {0x5872,2,{0x89,0x6A,0x00,0x00,}},
- {0x5873,2,{0x89,0x6B,0x00,0x00,}},
- {0x5874,2,{0x89,0x6C,0x00,0x00,}},
- {0x5875,2,{0x89,0x6D,0x00,0x00,}},
- {0x5876,2,{0x89,0x6E,0x00,0x00,}},
- {0x5877,2,{0x89,0x6F,0x00,0x00,}},
- {0x5878,2,{0x89,0x70,0x00,0x00,}},
- {0x5879,2,{0x89,0x71,0x00,0x00,}},
- {0x587A,2,{0x89,0x72,0x00,0x00,}},
- {0x587B,2,{0x89,0x73,0x00,0x00,}},
- {0x587C,2,{0x89,0x74,0x00,0x00,}},
- {0x587D,2,{0x89,0x75,0x00,0x00,}},
- {0x587E,2,{0xDB,0xD3,0x00,0x00,}},
- {0x587F,2,{0x89,0x76,0x00,0x00,}},
- {0x5880,2,{0xDC,0xAF,0x00,0x00,}},
- {0x5881,2,{0xDC,0xAC,0x00,0x00,}},
- {0x5882,2,{0x89,0x77,0x00,0x00,}},
- {0x5883,2,{0xBE,0xB3,0x00,0x00,}},
- {0x5884,2,{0x89,0x78,0x00,0x00,}},
- {0x5885,2,{0xCA,0xFB,0x00,0x00,}},
- {0x5886,2,{0x89,0x79,0x00,0x00,}},
- {0x5887,2,{0x89,0x7A,0x00,0x00,}},
- {0x5888,2,{0x89,0x7B,0x00,0x00,}},
- {0x5889,2,{0xDC,0xAD,0x00,0x00,}},
- {0x588A,2,{0x89,0x7C,0x00,0x00,}},
- {0x588B,2,{0x89,0x7D,0x00,0x00,}},
- {0x588C,2,{0x89,0x7E,0x00,0x00,}},
- {0x588D,2,{0x89,0x80,0x00,0x00,}},
- {0x588E,2,{0x89,0x81,0x00,0x00,}},
- {0x588F,2,{0x89,0x82,0x00,0x00,}},
- {0x5890,2,{0x89,0x83,0x00,0x00,}},
- {0x5891,2,{0x89,0x84,0x00,0x00,}},
- {0x5892,2,{0xC9,0xCA,0x00,0x00,}},
- {0x5893,2,{0xC4,0xB9,0x00,0x00,}},
- {0x5894,2,{0x89,0x85,0x00,0x00,}},
- {0x5895,2,{0x89,0x86,0x00,0x00,}},
- {0x5896,2,{0x89,0x87,0x00,0x00,}},
- {0x5897,2,{0x89,0x88,0x00,0x00,}},
- {0x5898,2,{0x89,0x89,0x00,0x00,}},
- {0x5899,2,{0xC7,0xBD,0x00,0x00,}},
- {0x589A,2,{0xDC,0xAE,0x00,0x00,}},
- {0x589B,2,{0x89,0x8A,0x00,0x00,}},
- {0x589C,2,{0x89,0x8B,0x00,0x00,}},
- {0x589D,2,{0x89,0x8C,0x00,0x00,}},
- {0x589E,2,{0xD4,0xF6,0x00,0x00,}},
- {0x589F,2,{0xD0,0xE6,0x00,0x00,}},
- {0x58A0,2,{0x89,0x8D,0x00,0x00,}},
- {0x58A1,2,{0x89,0x8E,0x00,0x00,}},
- {0x58A2,2,{0x89,0x8F,0x00,0x00,}},
- {0x58A3,2,{0x89,0x90,0x00,0x00,}},
- {0x58A4,2,{0x89,0x91,0x00,0x00,}},
- {0x58A5,2,{0x89,0x92,0x00,0x00,}},
- {0x58A6,2,{0x89,0x93,0x00,0x00,}},
- {0x58A7,2,{0x89,0x94,0x00,0x00,}},
- {0x58A8,2,{0xC4,0xAB,0x00,0x00,}},
- {0x58A9,2,{0xB6,0xD5,0x00,0x00,}},
- {0x58AA,2,{0x89,0x95,0x00,0x00,}},
- {0x58AB,2,{0x89,0x96,0x00,0x00,}},
- {0x58AC,2,{0x89,0x97,0x00,0x00,}},
- {0x58AD,2,{0x89,0x98,0x00,0x00,}},
- {0x58AE,2,{0x89,0x99,0x00,0x00,}},
- {0x58AF,2,{0x89,0x9A,0x00,0x00,}},
- {0x58B0,2,{0x89,0x9B,0x00,0x00,}},
- {0x58B1,2,{0x89,0x9C,0x00,0x00,}},
- {0x58B2,2,{0x89,0x9D,0x00,0x00,}},
- {0x58B3,2,{0x89,0x9E,0x00,0x00,}},
- {0x58B4,2,{0x89,0x9F,0x00,0x00,}},
- {0x58B5,2,{0x89,0xA0,0x00,0x00,}},
- {0x58B6,2,{0x89,0xA1,0x00,0x00,}},
- {0x58B7,2,{0x89,0xA2,0x00,0x00,}},
- {0x58B8,2,{0x89,0xA3,0x00,0x00,}},
- {0x58B9,2,{0x89,0xA4,0x00,0x00,}},
- {0x58BA,2,{0x89,0xA5,0x00,0x00,}},
- {0x58BB,2,{0x89,0xA6,0x00,0x00,}},
- {0x58BC,2,{0xDB,0xD4,0x00,0x00,}},
- {0x58BD,2,{0x89,0xA7,0x00,0x00,}},
- {0x58BE,2,{0x89,0xA8,0x00,0x00,}},
- {0x58BF,2,{0x89,0xA9,0x00,0x00,}},
- {0x58C0,2,{0x89,0xAA,0x00,0x00,}},
- {0x58C1,2,{0xB1,0xDA,0x00,0x00,}},
- {0x58C2,2,{0x89,0xAB,0x00,0x00,}},
- {0x58C3,2,{0x89,0xAC,0x00,0x00,}},
- {0x58C4,2,{0x89,0xAD,0x00,0x00,}},
- {0x58C5,2,{0xDB,0xD5,0x00,0x00,}},
- {0x58C6,2,{0x89,0xAE,0x00,0x00,}},
- {0x58C7,2,{0x89,0xAF,0x00,0x00,}},
- {0x58C8,2,{0x89,0xB0,0x00,0x00,}},
- {0x58C9,2,{0x89,0xB1,0x00,0x00,}},
- {0x58CA,2,{0x89,0xB2,0x00,0x00,}},
- {0x58CB,2,{0x89,0xB3,0x00,0x00,}},
- {0x58CC,2,{0x89,0xB4,0x00,0x00,}},
- {0x58CD,2,{0x89,0xB5,0x00,0x00,}},
- {0x58CE,2,{0x89,0xB6,0x00,0x00,}},
- {0x58CF,2,{0x89,0xB7,0x00,0x00,}},
- {0x58D0,2,{0x89,0xB8,0x00,0x00,}},
- {0x58D1,2,{0xDB,0xD6,0x00,0x00,}},
- {0x58D2,2,{0x89,0xB9,0x00,0x00,}},
- {0x58D3,2,{0x89,0xBA,0x00,0x00,}},
- {0x58D4,2,{0x89,0xBB,0x00,0x00,}},
- {0x58D5,2,{0xBA,0xBE,0x00,0x00,}},
- {0x58D6,2,{0x89,0xBC,0x00,0x00,}},
- {0x58D7,2,{0x89,0xBD,0x00,0x00,}},
- {0x58D8,2,{0x89,0xBE,0x00,0x00,}},
- {0x58D9,2,{0x89,0xBF,0x00,0x00,}},
- {0x58DA,2,{0x89,0xC0,0x00,0x00,}},
- {0x58DB,2,{0x89,0xC1,0x00,0x00,}},
- {0x58DC,2,{0x89,0xC2,0x00,0x00,}},
- {0x58DD,2,{0x89,0xC3,0x00,0x00,}},
- {0x58DE,2,{0x89,0xC4,0x00,0x00,}},
- {0x58DF,2,{0x89,0xC5,0x00,0x00,}},
- {0x58E0,2,{0x89,0xC6,0x00,0x00,}},
- {0x58E1,2,{0x89,0xC7,0x00,0x00,}},
- {0x58E2,2,{0x89,0xC8,0x00,0x00,}},
- {0x58E3,2,{0x89,0xC9,0x00,0x00,}},
- {0x58E4,2,{0xC8,0xC0,0x00,0x00,}},
- {0x58E5,2,{0x89,0xCA,0x00,0x00,}},
- {0x58E6,2,{0x89,0xCB,0x00,0x00,}},
- {0x58E7,2,{0x89,0xCC,0x00,0x00,}},
- {0x58E8,2,{0x89,0xCD,0x00,0x00,}},
- {0x58E9,2,{0x89,0xCE,0x00,0x00,}},
- {0x58EA,2,{0x89,0xCF,0x00,0x00,}},
- {0x58EB,2,{0xCA,0xBF,0x00,0x00,}},
- {0x58EC,2,{0xC8,0xC9,0x00,0x00,}},
- {0x58ED,2,{0x89,0xD0,0x00,0x00,}},
- {0x58EE,2,{0xD7,0xB3,0x00,0x00,}},
- {0x58EF,2,{0x89,0xD1,0x00,0x00,}},
- {0x58F0,2,{0xC9,0xF9,0x00,0x00,}},
- {0x58F1,2,{0x89,0xD2,0x00,0x00,}},
- {0x58F2,2,{0x89,0xD3,0x00,0x00,}},
- {0x58F3,2,{0xBF,0xC7,0x00,0x00,}},
- {0x58F4,2,{0x89,0xD4,0x00,0x00,}},
- {0x58F5,2,{0x89,0xD5,0x00,0x00,}},
- {0x58F6,2,{0xBA,0xF8,0x00,0x00,}},
- {0x58F7,2,{0x89,0xD6,0x00,0x00,}},
- {0x58F8,2,{0x89,0xD7,0x00,0x00,}},
- {0x58F9,2,{0xD2,0xBC,0x00,0x00,}},
- {0x58FA,2,{0x89,0xD8,0x00,0x00,}},
- {0x58FB,2,{0x89,0xD9,0x00,0x00,}},
- {0x58FC,2,{0x89,0xDA,0x00,0x00,}},
- {0x58FD,2,{0x89,0xDB,0x00,0x00,}},
- {0x58FE,2,{0x89,0xDC,0x00,0x00,}},
- {0x58FF,2,{0x89,0xDD,0x00,0x00,}},
- {0x5900,2,{0x89,0xDE,0x00,0x00,}},
- {0x5901,2,{0x89,0xDF,0x00,0x00,}},
- {0x5902,2,{0xE2,0xBA,0x00,0x00,}},
- {0x5903,2,{0x89,0xE0,0x00,0x00,}},
- {0x5904,2,{0xB4,0xA6,0x00,0x00,}},
- {0x5905,2,{0x89,0xE1,0x00,0x00,}},
- {0x5906,2,{0x89,0xE2,0x00,0x00,}},
- {0x5907,2,{0xB1,0xB8,0x00,0x00,}},
- {0x5908,2,{0x89,0xE3,0x00,0x00,}},
- {0x5909,2,{0x89,0xE4,0x00,0x00,}},
- {0x590A,2,{0x89,0xE5,0x00,0x00,}},
- {0x590B,2,{0x89,0xE6,0x00,0x00,}},
- {0x590C,2,{0x89,0xE7,0x00,0x00,}},
- {0x590D,2,{0xB8,0xB4,0x00,0x00,}},
- {0x590E,2,{0x89,0xE8,0x00,0x00,}},
- {0x590F,2,{0xCF,0xC4,0x00,0x00,}},
- {0x5910,2,{0x89,0xE9,0x00,0x00,}},
- {0x5911,2,{0x89,0xEA,0x00,0x00,}},
- {0x5912,2,{0x89,0xEB,0x00,0x00,}},
- {0x5913,2,{0x89,0xEC,0x00,0x00,}},
- {0x5914,2,{0xD9,0xE7,0x00,0x00,}},
- {0x5915,2,{0xCF,0xA6,0x00,0x00,}},
- {0x5916,2,{0xCD,0xE2,0x00,0x00,}},
- {0x5917,2,{0x89,0xED,0x00,0x00,}},
- {0x5918,2,{0x89,0xEE,0x00,0x00,}},
- {0x5919,2,{0xD9,0xED,0x00,0x00,}},
- {0x591A,2,{0xB6,0xE0,0x00,0x00,}},
- {0x591B,2,{0x89,0xEF,0x00,0x00,}},
- {0x591C,2,{0xD2,0xB9,0x00,0x00,}},
- {0x591D,2,{0x89,0xF0,0x00,0x00,}},
- {0x591E,2,{0x89,0xF1,0x00,0x00,}},
- {0x591F,2,{0xB9,0xBB,0x00,0x00,}},
- {0x5920,2,{0x89,0xF2,0x00,0x00,}},
- {0x5921,2,{0x89,0xF3,0x00,0x00,}},
- {0x5922,2,{0x89,0xF4,0x00,0x00,}},
- {0x5923,2,{0x89,0xF5,0x00,0x00,}},
- {0x5924,2,{0xE2,0xB9,0x00,0x00,}},
- {0x5925,2,{0xE2,0xB7,0x00,0x00,}},
- {0x5926,2,{0x89,0xF6,0x00,0x00,}},
- {0x5927,2,{0xB4,0xF3,0x00,0x00,}},
- {0x5928,2,{0x89,0xF7,0x00,0x00,}},
- {0x5929,2,{0xCC,0xEC,0x00,0x00,}},
- {0x592A,2,{0xCC,0xAB,0x00,0x00,}},
- {0x592B,2,{0xB7,0xF2,0x00,0x00,}},
- {0x592C,2,{0x89,0xF8,0x00,0x00,}},
- {0x592D,2,{0xD8,0xB2,0x00,0x00,}},
- {0x592E,2,{0xD1,0xEB,0x00,0x00,}},
- {0x592F,2,{0xBA,0xBB,0x00,0x00,}},
- {0x5930,2,{0x89,0xF9,0x00,0x00,}},
- {0x5931,2,{0xCA,0xA7,0x00,0x00,}},
- {0x5932,2,{0x89,0xFA,0x00,0x00,}},
- {0x5933,2,{0x89,0xFB,0x00,0x00,}},
- {0x5934,2,{0xCD,0xB7,0x00,0x00,}},
- {0x5935,2,{0x89,0xFC,0x00,0x00,}},
- {0x5936,2,{0x89,0xFD,0x00,0x00,}},
- {0x5937,2,{0xD2,0xC4,0x00,0x00,}},
- {0x5938,2,{0xBF,0xE4,0x00,0x00,}},
- {0x5939,2,{0xBC,0xD0,0x00,0x00,}},
- {0x593A,2,{0xB6,0xE1,0x00,0x00,}},
- {0x593B,2,{0x89,0xFE,0x00,0x00,}},
- {0x593C,2,{0xDE,0xC5,0x00,0x00,}},
- {0x593D,2,{0x8A,0x40,0x00,0x00,}},
- {0x593E,2,{0x8A,0x41,0x00,0x00,}},
- {0x593F,2,{0x8A,0x42,0x00,0x00,}},
- {0x5940,2,{0x8A,0x43,0x00,0x00,}},
- {0x5941,2,{0xDE,0xC6,0x00,0x00,}},
- {0x5942,2,{0xDB,0xBC,0x00,0x00,}},
- {0x5943,2,{0x8A,0x44,0x00,0x00,}},
- {0x5944,2,{0xD1,0xD9,0x00,0x00,}},
- {0x5945,2,{0x8A,0x45,0x00,0x00,}},
- {0x5946,2,{0x8A,0x46,0x00,0x00,}},
- {0x5947,2,{0xC6,0xE6,0x00,0x00,}},
- {0x5948,2,{0xC4,0xCE,0x00,0x00,}},
- {0x5949,2,{0xB7,0xEE,0x00,0x00,}},
- {0x594A,2,{0x8A,0x47,0x00,0x00,}},
- {0x594B,2,{0xB7,0xDC,0x00,0x00,}},
- {0x594C,2,{0x8A,0x48,0x00,0x00,}},
- {0x594D,2,{0x8A,0x49,0x00,0x00,}},
- {0x594E,2,{0xBF,0xFC,0x00,0x00,}},
- {0x594F,2,{0xD7,0xE0,0x00,0x00,}},
- {0x5950,2,{0x8A,0x4A,0x00,0x00,}},
- {0x5951,2,{0xC6,0xF5,0x00,0x00,}},
- {0x5952,2,{0x8A,0x4B,0x00,0x00,}},
- {0x5953,2,{0x8A,0x4C,0x00,0x00,}},
- {0x5954,2,{0xB1,0xBC,0x00,0x00,}},
- {0x5955,2,{0xDE,0xC8,0x00,0x00,}},
- {0x5956,2,{0xBD,0xB1,0x00,0x00,}},
- {0x5957,2,{0xCC,0xD7,0x00,0x00,}},
- {0x5958,2,{0xDE,0xCA,0x00,0x00,}},
- {0x5959,2,{0x8A,0x4D,0x00,0x00,}},
- {0x595A,2,{0xDE,0xC9,0x00,0x00,}},
- {0x595B,2,{0x8A,0x4E,0x00,0x00,}},
- {0x595C,2,{0x8A,0x4F,0x00,0x00,}},
- {0x595D,2,{0x8A,0x50,0x00,0x00,}},
- {0x595E,2,{0x8A,0x51,0x00,0x00,}},
- {0x595F,2,{0x8A,0x52,0x00,0x00,}},
- {0x5960,2,{0xB5,0xEC,0x00,0x00,}},
- {0x5961,2,{0x8A,0x53,0x00,0x00,}},
- {0x5962,2,{0xC9,0xDD,0x00,0x00,}},
- {0x5963,2,{0x8A,0x54,0x00,0x00,}},
- {0x5964,2,{0x8A,0x55,0x00,0x00,}},
- {0x5965,2,{0xB0,0xC2,0x00,0x00,}},
- {0x5966,2,{0x8A,0x56,0x00,0x00,}},
- {0x5967,2,{0x8A,0x57,0x00,0x00,}},
- {0x5968,2,{0x8A,0x58,0x00,0x00,}},
- {0x5969,2,{0x8A,0x59,0x00,0x00,}},
- {0x596A,2,{0x8A,0x5A,0x00,0x00,}},
- {0x596B,2,{0x8A,0x5B,0x00,0x00,}},
- {0x596C,2,{0x8A,0x5C,0x00,0x00,}},
- {0x596D,2,{0x8A,0x5D,0x00,0x00,}},
- {0x596E,2,{0x8A,0x5E,0x00,0x00,}},
- {0x596F,2,{0x8A,0x5F,0x00,0x00,}},
- {0x5970,2,{0x8A,0x60,0x00,0x00,}},
- {0x5971,2,{0x8A,0x61,0x00,0x00,}},
- {0x5972,2,{0x8A,0x62,0x00,0x00,}},
- {0x5973,2,{0xC5,0xAE,0x00,0x00,}},
- {0x5974,2,{0xC5,0xAB,0x00,0x00,}},
- {0x5975,2,{0x8A,0x63,0x00,0x00,}},
- {0x5976,2,{0xC4,0xCC,0x00,0x00,}},
- {0x5977,2,{0x8A,0x64,0x00,0x00,}},
- {0x5978,2,{0xBC,0xE9,0x00,0x00,}},
- {0x5979,2,{0xCB,0xFD,0x00,0x00,}},
- {0x597A,2,{0x8A,0x65,0x00,0x00,}},
- {0x597B,2,{0x8A,0x66,0x00,0x00,}},
- {0x597C,2,{0x8A,0x67,0x00,0x00,}},
- {0x597D,2,{0xBA,0xC3,0x00,0x00,}},
- {0x597E,2,{0x8A,0x68,0x00,0x00,}},
- {0x597F,2,{0x8A,0x69,0x00,0x00,}},
- {0x5980,2,{0x8A,0x6A,0x00,0x00,}},
- {0x5981,2,{0xE5,0xF9,0x00,0x00,}},
- {0x5982,2,{0xC8,0xE7,0x00,0x00,}},
- {0x5983,2,{0xE5,0xFA,0x00,0x00,}},
- {0x5984,2,{0xCD,0xFD,0x00,0x00,}},
- {0x5985,2,{0x8A,0x6B,0x00,0x00,}},
- {0x5986,2,{0xD7,0xB1,0x00,0x00,}},
- {0x5987,2,{0xB8,0xBE,0x00,0x00,}},
- {0x5988,2,{0xC2,0xE8,0x00,0x00,}},
- {0x5989,2,{0x8A,0x6C,0x00,0x00,}},
- {0x598A,2,{0xC8,0xD1,0x00,0x00,}},
- {0x598B,2,{0x8A,0x6D,0x00,0x00,}},
- {0x598C,2,{0x8A,0x6E,0x00,0x00,}},
- {0x598D,2,{0xE5,0xFB,0x00,0x00,}},
- {0x598E,2,{0x8A,0x6F,0x00,0x00,}},
- {0x598F,2,{0x8A,0x70,0x00,0x00,}},
- {0x5990,2,{0x8A,0x71,0x00,0x00,}},
- {0x5991,2,{0x8A,0x72,0x00,0x00,}},
- {0x5992,2,{0xB6,0xCA,0x00,0x00,}},
- {0x5993,2,{0xBC,0xCB,0x00,0x00,}},
- {0x5994,2,{0x8A,0x73,0x00,0x00,}},
- {0x5995,2,{0x8A,0x74,0x00,0x00,}},
- {0x5996,2,{0xD1,0xFD,0x00,0x00,}},
- {0x5997,2,{0xE6,0xA1,0x00,0x00,}},
- {0x5998,2,{0x8A,0x75,0x00,0x00,}},
- {0x5999,2,{0xC3,0xEE,0x00,0x00,}},
- {0x599A,2,{0x8A,0x76,0x00,0x00,}},
- {0x599B,2,{0x8A,0x77,0x00,0x00,}},
- {0x599C,2,{0x8A,0x78,0x00,0x00,}},
- {0x599D,2,{0x8A,0x79,0x00,0x00,}},
- {0x599E,2,{0xE6,0xA4,0x00,0x00,}},
- {0x599F,2,{0x8A,0x7A,0x00,0x00,}},
- {0x59A0,2,{0x8A,0x7B,0x00,0x00,}},
- {0x59A1,2,{0x8A,0x7C,0x00,0x00,}},
- {0x59A2,2,{0x8A,0x7D,0x00,0x00,}},
- {0x59A3,2,{0xE5,0xFE,0x00,0x00,}},
- {0x59A4,2,{0xE6,0xA5,0x00,0x00,}},
- {0x59A5,2,{0xCD,0xD7,0x00,0x00,}},
- {0x59A6,2,{0x8A,0x7E,0x00,0x00,}},
- {0x59A7,2,{0x8A,0x80,0x00,0x00,}},
- {0x59A8,2,{0xB7,0xC1,0x00,0x00,}},
- {0x59A9,2,{0xE5,0xFC,0x00,0x00,}},
- {0x59AA,2,{0xE5,0xFD,0x00,0x00,}},
- {0x59AB,2,{0xE6,0xA3,0x00,0x00,}},
- {0x59AC,2,{0x8A,0x81,0x00,0x00,}},
- {0x59AD,2,{0x8A,0x82,0x00,0x00,}},
- {0x59AE,2,{0xC4,0xDD,0x00,0x00,}},
- {0x59AF,2,{0xE6,0xA8,0x00,0x00,}},
- {0x59B0,2,{0x8A,0x83,0x00,0x00,}},
- {0x59B1,2,{0x8A,0x84,0x00,0x00,}},
- {0x59B2,2,{0xE6,0xA7,0x00,0x00,}},
- {0x59B3,2,{0x8A,0x85,0x00,0x00,}},
- {0x59B4,2,{0x8A,0x86,0x00,0x00,}},
- {0x59B5,2,{0x8A,0x87,0x00,0x00,}},
- {0x59B6,2,{0x8A,0x88,0x00,0x00,}},
- {0x59B7,2,{0x8A,0x89,0x00,0x00,}},
- {0x59B8,2,{0x8A,0x8A,0x00,0x00,}},
- {0x59B9,2,{0xC3,0xC3,0x00,0x00,}},
- {0x59BA,2,{0x8A,0x8B,0x00,0x00,}},
- {0x59BB,2,{0xC6,0xDE,0x00,0x00,}},
- {0x59BC,2,{0x8A,0x8C,0x00,0x00,}},
- {0x59BD,2,{0x8A,0x8D,0x00,0x00,}},
- {0x59BE,2,{0xE6,0xAA,0x00,0x00,}},
- {0x59BF,2,{0x8A,0x8E,0x00,0x00,}},
- {0x59C0,2,{0x8A,0x8F,0x00,0x00,}},
- {0x59C1,2,{0x8A,0x90,0x00,0x00,}},
- {0x59C2,2,{0x8A,0x91,0x00,0x00,}},
- {0x59C3,2,{0x8A,0x92,0x00,0x00,}},
- {0x59C4,2,{0x8A,0x93,0x00,0x00,}},
- {0x59C5,2,{0x8A,0x94,0x00,0x00,}},
- {0x59C6,2,{0xC4,0xB7,0x00,0x00,}},
- {0x59C7,2,{0x8A,0x95,0x00,0x00,}},
- {0x59C8,2,{0x8A,0x96,0x00,0x00,}},
- {0x59C9,2,{0x8A,0x97,0x00,0x00,}},
- {0x59CA,2,{0xE6,0xA2,0x00,0x00,}},
- {0x59CB,2,{0xCA,0xBC,0x00,0x00,}},
- {0x59CC,2,{0x8A,0x98,0x00,0x00,}},
- {0x59CD,2,{0x8A,0x99,0x00,0x00,}},
- {0x59CE,2,{0x8A,0x9A,0x00,0x00,}},
- {0x59CF,2,{0x8A,0x9B,0x00,0x00,}},
- {0x59D0,2,{0xBD,0xE3,0x00,0x00,}},
- {0x59D1,2,{0xB9,0xC3,0x00,0x00,}},
- {0x59D2,2,{0xE6,0xA6,0x00,0x00,}},
- {0x59D3,2,{0xD0,0xD5,0x00,0x00,}},
- {0x59D4,2,{0xCE,0xAF,0x00,0x00,}},
- {0x59D5,2,{0x8A,0x9C,0x00,0x00,}},
- {0x59D6,2,{0x8A,0x9D,0x00,0x00,}},
- {0x59D7,2,{0xE6,0xA9,0x00,0x00,}},
- {0x59D8,2,{0xE6,0xB0,0x00,0x00,}},
- {0x59D9,2,{0x8A,0x9E,0x00,0x00,}},
- {0x59DA,2,{0xD2,0xA6,0x00,0x00,}},
- {0x59DB,2,{0x8A,0x9F,0x00,0x00,}},
- {0x59DC,2,{0xBD,0xAA,0x00,0x00,}},
- {0x59DD,2,{0xE6,0xAD,0x00,0x00,}},
- {0x59DE,2,{0x8A,0xA0,0x00,0x00,}},
- {0x59DF,2,{0x8A,0xA1,0x00,0x00,}},
- {0x59E0,2,{0x8A,0xA2,0x00,0x00,}},
- {0x59E1,2,{0x8A,0xA3,0x00,0x00,}},
- {0x59E2,2,{0x8A,0xA4,0x00,0x00,}},
- {0x59E3,2,{0xE6,0xAF,0x00,0x00,}},
- {0x59E4,2,{0x8A,0xA5,0x00,0x00,}},
- {0x59E5,2,{0xC0,0xD1,0x00,0x00,}},
- {0x59E6,2,{0x8A,0xA6,0x00,0x00,}},
- {0x59E7,2,{0x8A,0xA7,0x00,0x00,}},
- {0x59E8,2,{0xD2,0xCC,0x00,0x00,}},
- {0x59E9,2,{0x8A,0xA8,0x00,0x00,}},
- {0x59EA,2,{0x8A,0xA9,0x00,0x00,}},
- {0x59EB,2,{0x8A,0xAA,0x00,0x00,}},
- {0x59EC,2,{0xBC,0xA7,0x00,0x00,}},
- {0x59ED,2,{0x8A,0xAB,0x00,0x00,}},
- {0x59EE,2,{0x8A,0xAC,0x00,0x00,}},
- {0x59EF,2,{0x8A,0xAD,0x00,0x00,}},
- {0x59F0,2,{0x8A,0xAE,0x00,0x00,}},
- {0x59F1,2,{0x8A,0xAF,0x00,0x00,}},
- {0x59F2,2,{0x8A,0xB0,0x00,0x00,}},
- {0x59F3,2,{0x8A,0xB1,0x00,0x00,}},
- {0x59F4,2,{0x8A,0xB2,0x00,0x00,}},
- {0x59F5,2,{0x8A,0xB3,0x00,0x00,}},
- {0x59F6,2,{0x8A,0xB4,0x00,0x00,}},
- {0x59F7,2,{0x8A,0xB5,0x00,0x00,}},
- {0x59F8,2,{0x8A,0xB6,0x00,0x00,}},
- {0x59F9,2,{0xE6,0xB1,0x00,0x00,}},
- {0x59FA,2,{0x8A,0xB7,0x00,0x00,}},
- {0x59FB,2,{0xD2,0xF6,0x00,0x00,}},
- {0x59FC,2,{0x8A,0xB8,0x00,0x00,}},
- {0x59FD,2,{0x8A,0xB9,0x00,0x00,}},
- {0x59FE,2,{0x8A,0xBA,0x00,0x00,}},
- {0x59FF,2,{0xD7,0xCB,0x00,0x00,}},
- {0x5A00,2,{0x8A,0xBB,0x00,0x00,}},
- {0x5A01,2,{0xCD,0xFE,0x00,0x00,}},
- {0x5A02,2,{0x8A,0xBC,0x00,0x00,}},
- {0x5A03,2,{0xCD,0xDE,0x00,0x00,}},
- {0x5A04,2,{0xC2,0xA6,0x00,0x00,}},
- {0x5A05,2,{0xE6,0xAB,0x00,0x00,}},
- {0x5A06,2,{0xE6,0xAC,0x00,0x00,}},
- {0x5A07,2,{0xBD,0xBF,0x00,0x00,}},
- {0x5A08,2,{0xE6,0xAE,0x00,0x00,}},
- {0x5A09,2,{0xE6,0xB3,0x00,0x00,}},
- {0x5A0A,2,{0x8A,0xBD,0x00,0x00,}},
- {0x5A0B,2,{0x8A,0xBE,0x00,0x00,}},
- {0x5A0C,2,{0xE6,0xB2,0x00,0x00,}},
- {0x5A0D,2,{0x8A,0xBF,0x00,0x00,}},
- {0x5A0E,2,{0x8A,0xC0,0x00,0x00,}},
- {0x5A0F,2,{0x8A,0xC1,0x00,0x00,}},
- {0x5A10,2,{0x8A,0xC2,0x00,0x00,}},
- {0x5A11,2,{0xE6,0xB6,0x00,0x00,}},
- {0x5A12,2,{0x8A,0xC3,0x00,0x00,}},
- {0x5A13,2,{0xE6,0xB8,0x00,0x00,}},
- {0x5A14,2,{0x8A,0xC4,0x00,0x00,}},
- {0x5A15,2,{0x8A,0xC5,0x00,0x00,}},
- {0x5A16,2,{0x8A,0xC6,0x00,0x00,}},
- {0x5A17,2,{0x8A,0xC7,0x00,0x00,}},
- {0x5A18,2,{0xC4,0xEF,0x00,0x00,}},
- {0x5A19,2,{0x8A,0xC8,0x00,0x00,}},
- {0x5A1A,2,{0x8A,0xC9,0x00,0x00,}},
- {0x5A1B,2,{0x8A,0xCA,0x00,0x00,}},
- {0x5A1C,2,{0xC4,0xC8,0x00,0x00,}},
- {0x5A1D,2,{0x8A,0xCB,0x00,0x00,}},
- {0x5A1E,2,{0x8A,0xCC,0x00,0x00,}},
- {0x5A1F,2,{0xBE,0xEA,0x00,0x00,}},
- {0x5A20,2,{0xC9,0xEF,0x00,0x00,}},
- {0x5A21,2,{0x8A,0xCD,0x00,0x00,}},
- {0x5A22,2,{0x8A,0xCE,0x00,0x00,}},
- {0x5A23,2,{0xE6,0xB7,0x00,0x00,}},
- {0x5A24,2,{0x8A,0xCF,0x00,0x00,}},
- {0x5A25,2,{0xB6,0xF0,0x00,0x00,}},
- {0x5A26,2,{0x8A,0xD0,0x00,0x00,}},
- {0x5A27,2,{0x8A,0xD1,0x00,0x00,}},
- {0x5A28,2,{0x8A,0xD2,0x00,0x00,}},
- {0x5A29,2,{0xC3,0xE4,0x00,0x00,}},
- {0x5A2A,2,{0x8A,0xD3,0x00,0x00,}},
- {0x5A2B,2,{0x8A,0xD4,0x00,0x00,}},
- {0x5A2C,2,{0x8A,0xD5,0x00,0x00,}},
- {0x5A2D,2,{0x8A,0xD6,0x00,0x00,}},
- {0x5A2E,2,{0x8A,0xD7,0x00,0x00,}},
- {0x5A2F,2,{0x8A,0xD8,0x00,0x00,}},
- {0x5A30,2,{0x8A,0xD9,0x00,0x00,}},
- {0x5A31,2,{0xD3,0xE9,0x00,0x00,}},
- {0x5A32,2,{0xE6,0xB4,0x00,0x00,}},
- {0x5A33,2,{0x8A,0xDA,0x00,0x00,}},
- {0x5A34,2,{0xE6,0xB5,0x00,0x00,}},
- {0x5A35,2,{0x8A,0xDB,0x00,0x00,}},
- {0x5A36,2,{0xC8,0xA2,0x00,0x00,}},
- {0x5A37,2,{0x8A,0xDC,0x00,0x00,}},
- {0x5A38,2,{0x8A,0xDD,0x00,0x00,}},
- {0x5A39,2,{0x8A,0xDE,0x00,0x00,}},
- {0x5A3A,2,{0x8A,0xDF,0x00,0x00,}},
- {0x5A3B,2,{0x8A,0xE0,0x00,0x00,}},
- {0x5A3C,2,{0xE6,0xBD,0x00,0x00,}},
- {0x5A3D,2,{0x8A,0xE1,0x00,0x00,}},
- {0x5A3E,2,{0x8A,0xE2,0x00,0x00,}},
- {0x5A3F,2,{0x8A,0xE3,0x00,0x00,}},
- {0x5A40,2,{0xE6,0xB9,0x00,0x00,}},
- {0x5A41,2,{0x8A,0xE4,0x00,0x00,}},
- {0x5A42,2,{0x8A,0xE5,0x00,0x00,}},
- {0x5A43,2,{0x8A,0xE6,0x00,0x00,}},
- {0x5A44,2,{0x8A,0xE7,0x00,0x00,}},
- {0x5A45,2,{0x8A,0xE8,0x00,0x00,}},
- {0x5A46,2,{0xC6,0xC5,0x00,0x00,}},
- {0x5A47,2,{0x8A,0xE9,0x00,0x00,}},
- {0x5A48,2,{0x8A,0xEA,0x00,0x00,}},
- {0x5A49,2,{0xCD,0xF1,0x00,0x00,}},
- {0x5A4A,2,{0xE6,0xBB,0x00,0x00,}},
- {0x5A4B,2,{0x8A,0xEB,0x00,0x00,}},
- {0x5A4C,2,{0x8A,0xEC,0x00,0x00,}},
- {0x5A4D,2,{0x8A,0xED,0x00,0x00,}},
- {0x5A4E,2,{0x8A,0xEE,0x00,0x00,}},
- {0x5A4F,2,{0x8A,0xEF,0x00,0x00,}},
- {0x5A50,2,{0x8A,0xF0,0x00,0x00,}},
- {0x5A51,2,{0x8A,0xF1,0x00,0x00,}},
- {0x5A52,2,{0x8A,0xF2,0x00,0x00,}},
- {0x5A53,2,{0x8A,0xF3,0x00,0x00,}},
- {0x5A54,2,{0x8A,0xF4,0x00,0x00,}},
- {0x5A55,2,{0xE6,0xBC,0x00,0x00,}},
- {0x5A56,2,{0x8A,0xF5,0x00,0x00,}},
- {0x5A57,2,{0x8A,0xF6,0x00,0x00,}},
- {0x5A58,2,{0x8A,0xF7,0x00,0x00,}},
- {0x5A59,2,{0x8A,0xF8,0x00,0x00,}},
- {0x5A5A,2,{0xBB,0xE9,0x00,0x00,}},
- {0x5A5B,2,{0x8A,0xF9,0x00,0x00,}},
- {0x5A5C,2,{0x8A,0xFA,0x00,0x00,}},
- {0x5A5D,2,{0x8A,0xFB,0x00,0x00,}},
- {0x5A5E,2,{0x8A,0xFC,0x00,0x00,}},
- {0x5A5F,2,{0x8A,0xFD,0x00,0x00,}},
- {0x5A60,2,{0x8A,0xFE,0x00,0x00,}},
- {0x5A61,2,{0x8B,0x40,0x00,0x00,}},
- {0x5A62,2,{0xE6,0xBE,0x00,0x00,}},
- {0x5A63,2,{0x8B,0x41,0x00,0x00,}},
- {0x5A64,2,{0x8B,0x42,0x00,0x00,}},
- {0x5A65,2,{0x8B,0x43,0x00,0x00,}},
- {0x5A66,2,{0x8B,0x44,0x00,0x00,}},
- {0x5A67,2,{0xE6,0xBA,0x00,0x00,}},
- {0x5A68,2,{0x8B,0x45,0x00,0x00,}},
- {0x5A69,2,{0x8B,0x46,0x00,0x00,}},
- {0x5A6A,2,{0xC0,0xB7,0x00,0x00,}},
- {0x5A6B,2,{0x8B,0x47,0x00,0x00,}},
- {0x5A6C,2,{0x8B,0x48,0x00,0x00,}},
- {0x5A6D,2,{0x8B,0x49,0x00,0x00,}},
- {0x5A6E,2,{0x8B,0x4A,0x00,0x00,}},
- {0x5A6F,2,{0x8B,0x4B,0x00,0x00,}},
- {0x5A70,2,{0x8B,0x4C,0x00,0x00,}},
- {0x5A71,2,{0x8B,0x4D,0x00,0x00,}},
- {0x5A72,2,{0x8B,0x4E,0x00,0x00,}},
- {0x5A73,2,{0x8B,0x4F,0x00,0x00,}},
- {0x5A74,2,{0xD3,0xA4,0x00,0x00,}},
- {0x5A75,2,{0xE6,0xBF,0x00,0x00,}},
- {0x5A76,2,{0xC9,0xF4,0x00,0x00,}},
- {0x5A77,2,{0xE6,0xC3,0x00,0x00,}},
- {0x5A78,2,{0x8B,0x50,0x00,0x00,}},
- {0x5A79,2,{0x8B,0x51,0x00,0x00,}},
- {0x5A7A,2,{0xE6,0xC4,0x00,0x00,}},
- {0x5A7B,2,{0x8B,0x52,0x00,0x00,}},
- {0x5A7C,2,{0x8B,0x53,0x00,0x00,}},
- {0x5A7D,2,{0x8B,0x54,0x00,0x00,}},
- {0x5A7E,2,{0x8B,0x55,0x00,0x00,}},
- {0x5A7F,2,{0xD0,0xF6,0x00,0x00,}},
- {0x5A80,2,{0x8B,0x56,0x00,0x00,}},
- {0x5A81,2,{0x8B,0x57,0x00,0x00,}},
- {0x5A82,2,{0x8B,0x58,0x00,0x00,}},
- {0x5A83,2,{0x8B,0x59,0x00,0x00,}},
- {0x5A84,2,{0x8B,0x5A,0x00,0x00,}},
- {0x5A85,2,{0x8B,0x5B,0x00,0x00,}},
- {0x5A86,2,{0x8B,0x5C,0x00,0x00,}},
- {0x5A87,2,{0x8B,0x5D,0x00,0x00,}},
- {0x5A88,2,{0x8B,0x5E,0x00,0x00,}},
- {0x5A89,2,{0x8B,0x5F,0x00,0x00,}},
- {0x5A8A,2,{0x8B,0x60,0x00,0x00,}},
- {0x5A8B,2,{0x8B,0x61,0x00,0x00,}},
- {0x5A8C,2,{0x8B,0x62,0x00,0x00,}},
- {0x5A8D,2,{0x8B,0x63,0x00,0x00,}},
- {0x5A8E,2,{0x8B,0x64,0x00,0x00,}},
- {0x5A8F,2,{0x8B,0x65,0x00,0x00,}},
- {0x5A90,2,{0x8B,0x66,0x00,0x00,}},
- {0x5A91,2,{0x8B,0x67,0x00,0x00,}},
- {0x5A92,2,{0xC3,0xBD,0x00,0x00,}},
- {0x5A93,2,{0x8B,0x68,0x00,0x00,}},
- {0x5A94,2,{0x8B,0x69,0x00,0x00,}},
- {0x5A95,2,{0x8B,0x6A,0x00,0x00,}},
- {0x5A96,2,{0x8B,0x6B,0x00,0x00,}},
- {0x5A97,2,{0x8B,0x6C,0x00,0x00,}},
- {0x5A98,2,{0x8B,0x6D,0x00,0x00,}},
- {0x5A99,2,{0x8B,0x6E,0x00,0x00,}},
- {0x5A9A,2,{0xC3,0xC4,0x00,0x00,}},
- {0x5A9B,2,{0xE6,0xC2,0x00,0x00,}},
- {0x5A9C,2,{0x8B,0x6F,0x00,0x00,}},
- {0x5A9D,2,{0x8B,0x70,0x00,0x00,}},
- {0x5A9E,2,{0x8B,0x71,0x00,0x00,}},
- {0x5A9F,2,{0x8B,0x72,0x00,0x00,}},
- {0x5AA0,2,{0x8B,0x73,0x00,0x00,}},
- {0x5AA1,2,{0x8B,0x74,0x00,0x00,}},
- {0x5AA2,2,{0x8B,0x75,0x00,0x00,}},
- {0x5AA3,2,{0x8B,0x76,0x00,0x00,}},
- {0x5AA4,2,{0x8B,0x77,0x00,0x00,}},
- {0x5AA5,2,{0x8B,0x78,0x00,0x00,}},
- {0x5AA6,2,{0x8B,0x79,0x00,0x00,}},
- {0x5AA7,2,{0x8B,0x7A,0x00,0x00,}},
- {0x5AA8,2,{0x8B,0x7B,0x00,0x00,}},
- {0x5AA9,2,{0x8B,0x7C,0x00,0x00,}},
- {0x5AAA,2,{0xE6,0xC1,0x00,0x00,}},
- {0x5AAB,2,{0x8B,0x7D,0x00,0x00,}},
- {0x5AAC,2,{0x8B,0x7E,0x00,0x00,}},
- {0x5AAD,2,{0x8B,0x80,0x00,0x00,}},
- {0x5AAE,2,{0x8B,0x81,0x00,0x00,}},
- {0x5AAF,2,{0x8B,0x82,0x00,0x00,}},
- {0x5AB0,2,{0x8B,0x83,0x00,0x00,}},
- {0x5AB1,2,{0x8B,0x84,0x00,0x00,}},
- {0x5AB2,2,{0xE6,0xC7,0x00,0x00,}},
- {0x5AB3,2,{0xCF,0xB1,0x00,0x00,}},
- {0x5AB4,2,{0x8B,0x85,0x00,0x00,}},
- {0x5AB5,2,{0xEB,0xF4,0x00,0x00,}},
- {0x5AB6,2,{0x8B,0x86,0x00,0x00,}},
- {0x5AB7,2,{0x8B,0x87,0x00,0x00,}},
- {0x5AB8,2,{0xE6,0xCA,0x00,0x00,}},
- {0x5AB9,2,{0x8B,0x88,0x00,0x00,}},
- {0x5ABA,2,{0x8B,0x89,0x00,0x00,}},
- {0x5ABB,2,{0x8B,0x8A,0x00,0x00,}},
- {0x5ABC,2,{0x8B,0x8B,0x00,0x00,}},
- {0x5ABD,2,{0x8B,0x8C,0x00,0x00,}},
- {0x5ABE,2,{0xE6,0xC5,0x00,0x00,}},
- {0x5ABF,2,{0x8B,0x8D,0x00,0x00,}},
- {0x5AC0,2,{0x8B,0x8E,0x00,0x00,}},
- {0x5AC1,2,{0xBC,0xDE,0x00,0x00,}},
- {0x5AC2,2,{0xC9,0xA9,0x00,0x00,}},
- {0x5AC3,2,{0x8B,0x8F,0x00,0x00,}},
- {0x5AC4,2,{0x8B,0x90,0x00,0x00,}},
- {0x5AC5,2,{0x8B,0x91,0x00,0x00,}},
- {0x5AC6,2,{0x8B,0x92,0x00,0x00,}},
- {0x5AC7,2,{0x8B,0x93,0x00,0x00,}},
- {0x5AC8,2,{0x8B,0x94,0x00,0x00,}},
- {0x5AC9,2,{0xBC,0xB5,0x00,0x00,}},
- {0x5ACA,2,{0x8B,0x95,0x00,0x00,}},
- {0x5ACB,2,{0x8B,0x96,0x00,0x00,}},
- {0x5ACC,2,{0xCF,0xD3,0x00,0x00,}},
- {0x5ACD,2,{0x8B,0x97,0x00,0x00,}},
- {0x5ACE,2,{0x8B,0x98,0x00,0x00,}},
- {0x5ACF,2,{0x8B,0x99,0x00,0x00,}},
- {0x5AD0,2,{0x8B,0x9A,0x00,0x00,}},
- {0x5AD1,2,{0x8B,0x9B,0x00,0x00,}},
- {0x5AD2,2,{0xE6,0xC8,0x00,0x00,}},
- {0x5AD3,2,{0x8B,0x9C,0x00,0x00,}},
- {0x5AD4,2,{0xE6,0xC9,0x00,0x00,}},
- {0x5AD5,2,{0x8B,0x9D,0x00,0x00,}},
- {0x5AD6,2,{0xE6,0xCE,0x00,0x00,}},
- {0x5AD7,2,{0x8B,0x9E,0x00,0x00,}},
- {0x5AD8,2,{0xE6,0xD0,0x00,0x00,}},
- {0x5AD9,2,{0x8B,0x9F,0x00,0x00,}},
- {0x5ADA,2,{0x8B,0xA0,0x00,0x00,}},
- {0x5ADB,2,{0x8B,0xA1,0x00,0x00,}},
- {0x5ADC,2,{0xE6,0xD1,0x00,0x00,}},
- {0x5ADD,2,{0x8B,0xA2,0x00,0x00,}},
- {0x5ADE,2,{0x8B,0xA3,0x00,0x00,}},
- {0x5ADF,2,{0x8B,0xA4,0x00,0x00,}},
- {0x5AE0,2,{0xE6,0xCB,0x00,0x00,}},
- {0x5AE1,2,{0xB5,0xD5,0x00,0x00,}},
- {0x5AE2,2,{0x8B,0xA5,0x00,0x00,}},
- {0x5AE3,2,{0xE6,0xCC,0x00,0x00,}},
- {0x5AE4,2,{0x8B,0xA6,0x00,0x00,}},
- {0x5AE5,2,{0x8B,0xA7,0x00,0x00,}},
- {0x5AE6,2,{0xE6,0xCF,0x00,0x00,}},
- {0x5AE7,2,{0x8B,0xA8,0x00,0x00,}},
- {0x5AE8,2,{0x8B,0xA9,0x00,0x00,}},
- {0x5AE9,2,{0xC4,0xDB,0x00,0x00,}},
- {0x5AEA,2,{0x8B,0xAA,0x00,0x00,}},
- {0x5AEB,2,{0xE6,0xC6,0x00,0x00,}},
- {0x5AEC,2,{0x8B,0xAB,0x00,0x00,}},
- {0x5AED,2,{0x8B,0xAC,0x00,0x00,}},
- {0x5AEE,2,{0x8B,0xAD,0x00,0x00,}},
- {0x5AEF,2,{0x8B,0xAE,0x00,0x00,}},
- {0x5AF0,2,{0x8B,0xAF,0x00,0x00,}},
- {0x5AF1,2,{0xE6,0xCD,0x00,0x00,}},
- {0x5AF2,2,{0x8B,0xB0,0x00,0x00,}},
- {0x5AF3,2,{0x8B,0xB1,0x00,0x00,}},
- {0x5AF4,2,{0x8B,0xB2,0x00,0x00,}},
- {0x5AF5,2,{0x8B,0xB3,0x00,0x00,}},
- {0x5AF6,2,{0x8B,0xB4,0x00,0x00,}},
- {0x5AF7,2,{0x8B,0xB5,0x00,0x00,}},
- {0x5AF8,2,{0x8B,0xB6,0x00,0x00,}},
- {0x5AF9,2,{0x8B,0xB7,0x00,0x00,}},
- {0x5AFA,2,{0x8B,0xB8,0x00,0x00,}},
- {0x5AFB,2,{0x8B,0xB9,0x00,0x00,}},
- {0x5AFC,2,{0x8B,0xBA,0x00,0x00,}},
- {0x5AFD,2,{0x8B,0xBB,0x00,0x00,}},
- {0x5AFE,2,{0x8B,0xBC,0x00,0x00,}},
- {0x5AFF,2,{0x8B,0xBD,0x00,0x00,}},
- {0x5B00,2,{0x8B,0xBE,0x00,0x00,}},
- {0x5B01,2,{0x8B,0xBF,0x00,0x00,}},
- {0x5B02,2,{0x8B,0xC0,0x00,0x00,}},
- {0x5B03,2,{0x8B,0xC1,0x00,0x00,}},
- {0x5B04,2,{0x8B,0xC2,0x00,0x00,}},
- {0x5B05,2,{0x8B,0xC3,0x00,0x00,}},
- {0x5B06,2,{0x8B,0xC4,0x00,0x00,}},
- {0x5B07,2,{0x8B,0xC5,0x00,0x00,}},
- {0x5B08,2,{0x8B,0xC6,0x00,0x00,}},
- {0x5B09,2,{0xE6,0xD2,0x00,0x00,}},
- {0x5B0A,2,{0x8B,0xC7,0x00,0x00,}},
- {0x5B0B,2,{0x8B,0xC8,0x00,0x00,}},
- {0x5B0C,2,{0x8B,0xC9,0x00,0x00,}},
- {0x5B0D,2,{0x8B,0xCA,0x00,0x00,}},
- {0x5B0E,2,{0x8B,0xCB,0x00,0x00,}},
- {0x5B0F,2,{0x8B,0xCC,0x00,0x00,}},
- {0x5B10,2,{0x8B,0xCD,0x00,0x00,}},
- {0x5B11,2,{0x8B,0xCE,0x00,0x00,}},
- {0x5B12,2,{0x8B,0xCF,0x00,0x00,}},
- {0x5B13,2,{0x8B,0xD0,0x00,0x00,}},
- {0x5B14,2,{0x8B,0xD1,0x00,0x00,}},
- {0x5B15,2,{0x8B,0xD2,0x00,0x00,}},
- {0x5B16,2,{0xE6,0xD4,0x00,0x00,}},
- {0x5B17,2,{0xE6,0xD3,0x00,0x00,}},
- {0x5B18,2,{0x8B,0xD3,0x00,0x00,}},
- {0x5B19,2,{0x8B,0xD4,0x00,0x00,}},
- {0x5B1A,2,{0x8B,0xD5,0x00,0x00,}},
- {0x5B1B,2,{0x8B,0xD6,0x00,0x00,}},
- {0x5B1C,2,{0x8B,0xD7,0x00,0x00,}},
- {0x5B1D,2,{0x8B,0xD8,0x00,0x00,}},
- {0x5B1E,2,{0x8B,0xD9,0x00,0x00,}},
- {0x5B1F,2,{0x8B,0xDA,0x00,0x00,}},
- {0x5B20,2,{0x8B,0xDB,0x00,0x00,}},
- {0x5B21,2,{0x8B,0xDC,0x00,0x00,}},
- {0x5B22,2,{0x8B,0xDD,0x00,0x00,}},
- {0x5B23,2,{0x8B,0xDE,0x00,0x00,}},
- {0x5B24,2,{0x8B,0xDF,0x00,0x00,}},
- {0x5B25,2,{0x8B,0xE0,0x00,0x00,}},
- {0x5B26,2,{0x8B,0xE1,0x00,0x00,}},
- {0x5B27,2,{0x8B,0xE2,0x00,0x00,}},
- {0x5B28,2,{0x8B,0xE3,0x00,0x00,}},
- {0x5B29,2,{0x8B,0xE4,0x00,0x00,}},
- {0x5B2A,2,{0x8B,0xE5,0x00,0x00,}},
- {0x5B2B,2,{0x8B,0xE6,0x00,0x00,}},
- {0x5B2C,2,{0x8B,0xE7,0x00,0x00,}},
- {0x5B2D,2,{0x8B,0xE8,0x00,0x00,}},
- {0x5B2E,2,{0x8B,0xE9,0x00,0x00,}},
- {0x5B2F,2,{0x8B,0xEA,0x00,0x00,}},
- {0x5B30,2,{0x8B,0xEB,0x00,0x00,}},
- {0x5B31,2,{0x8B,0xEC,0x00,0x00,}},
- {0x5B32,2,{0xE6,0xD5,0x00,0x00,}},
- {0x5B33,2,{0x8B,0xED,0x00,0x00,}},
- {0x5B34,2,{0xD9,0xF8,0x00,0x00,}},
- {0x5B35,2,{0x8B,0xEE,0x00,0x00,}},
- {0x5B36,2,{0x8B,0xEF,0x00,0x00,}},
- {0x5B37,2,{0xE6,0xD6,0x00,0x00,}},
- {0x5B38,2,{0x8B,0xF0,0x00,0x00,}},
- {0x5B39,2,{0x8B,0xF1,0x00,0x00,}},
- {0x5B3A,2,{0x8B,0xF2,0x00,0x00,}},
- {0x5B3B,2,{0x8B,0xF3,0x00,0x00,}},
- {0x5B3C,2,{0x8B,0xF4,0x00,0x00,}},
- {0x5B3D,2,{0x8B,0xF5,0x00,0x00,}},
- {0x5B3E,2,{0x8B,0xF6,0x00,0x00,}},
- {0x5B3F,2,{0x8B,0xF7,0x00,0x00,}},
- {0x5B40,2,{0xE6,0xD7,0x00,0x00,}},
- {0x5B41,2,{0x8B,0xF8,0x00,0x00,}},
- {0x5B42,2,{0x8B,0xF9,0x00,0x00,}},
- {0x5B43,2,{0x8B,0xFA,0x00,0x00,}},
- {0x5B44,2,{0x8B,0xFB,0x00,0x00,}},
- {0x5B45,2,{0x8B,0xFC,0x00,0x00,}},
- {0x5B46,2,{0x8B,0xFD,0x00,0x00,}},
- {0x5B47,2,{0x8B,0xFE,0x00,0x00,}},
- {0x5B48,2,{0x8C,0x40,0x00,0x00,}},
- {0x5B49,2,{0x8C,0x41,0x00,0x00,}},
- {0x5B4A,2,{0x8C,0x42,0x00,0x00,}},
- {0x5B4B,2,{0x8C,0x43,0x00,0x00,}},
- {0x5B4C,2,{0x8C,0x44,0x00,0x00,}},
- {0x5B4D,2,{0x8C,0x45,0x00,0x00,}},
- {0x5B4E,2,{0x8C,0x46,0x00,0x00,}},
- {0x5B4F,2,{0x8C,0x47,0x00,0x00,}},
- {0x5B50,2,{0xD7,0xD3,0x00,0x00,}},
- {0x5B51,2,{0xE6,0xDD,0x00,0x00,}},
- {0x5B52,2,{0x8C,0x48,0x00,0x00,}},
- {0x5B53,2,{0xE6,0xDE,0x00,0x00,}},
- {0x5B54,2,{0xBF,0xD7,0x00,0x00,}},
- {0x5B55,2,{0xD4,0xD0,0x00,0x00,}},
- {0x5B56,2,{0x8C,0x49,0x00,0x00,}},
- {0x5B57,2,{0xD7,0xD6,0x00,0x00,}},
- {0x5B58,2,{0xB4,0xE6,0x00,0x00,}},
- {0x5B59,2,{0xCB,0xEF,0x00,0x00,}},
- {0x5B5A,2,{0xE6,0xDA,0x00,0x00,}},
- {0x5B5B,2,{0xD8,0xC3,0x00,0x00,}},
- {0x5B5C,2,{0xD7,0xCE,0x00,0x00,}},
- {0x5B5D,2,{0xD0,0xA2,0x00,0x00,}},
- {0x5B5E,2,{0x8C,0x4A,0x00,0x00,}},
- {0x5B5F,2,{0xC3,0xCF,0x00,0x00,}},
- {0x5B60,2,{0x8C,0x4B,0x00,0x00,}},
- {0x5B61,2,{0x8C,0x4C,0x00,0x00,}},
- {0x5B62,2,{0xE6,0xDF,0x00,0x00,}},
- {0x5B63,2,{0xBC,0xBE,0x00,0x00,}},
- {0x5B64,2,{0xB9,0xC2,0x00,0x00,}},
- {0x5B65,2,{0xE6,0xDB,0x00,0x00,}},
- {0x5B66,2,{0xD1,0xA7,0x00,0x00,}},
- {0x5B67,2,{0x8C,0x4D,0x00,0x00,}},
- {0x5B68,2,{0x8C,0x4E,0x00,0x00,}},
- {0x5B69,2,{0xBA,0xA2,0x00,0x00,}},
- {0x5B6A,2,{0xC2,0xCF,0x00,0x00,}},
- {0x5B6B,2,{0x8C,0x4F,0x00,0x00,}},
- {0x5B6C,2,{0xD8,0xAB,0x00,0x00,}},
- {0x5B6D,2,{0x8C,0x50,0x00,0x00,}},
- {0x5B6E,2,{0x8C,0x51,0x00,0x00,}},
- {0x5B6F,2,{0x8C,0x52,0x00,0x00,}},
- {0x5B70,2,{0xCA,0xEB,0x00,0x00,}},
- {0x5B71,2,{0xE5,0xEE,0x00,0x00,}},
- {0x5B72,2,{0x8C,0x53,0x00,0x00,}},
- {0x5B73,2,{0xE6,0xDC,0x00,0x00,}},
- {0x5B74,2,{0x8C,0x54,0x00,0x00,}},
- {0x5B75,2,{0xB7,0xF5,0x00,0x00,}},
- {0x5B76,2,{0x8C,0x55,0x00,0x00,}},
- {0x5B77,2,{0x8C,0x56,0x00,0x00,}},
- {0x5B78,2,{0x8C,0x57,0x00,0x00,}},
- {0x5B79,2,{0x8C,0x58,0x00,0x00,}},
- {0x5B7A,2,{0xC8,0xE6,0x00,0x00,}},
- {0x5B7B,2,{0x8C,0x59,0x00,0x00,}},
- {0x5B7C,2,{0x8C,0x5A,0x00,0x00,}},
- {0x5B7D,2,{0xC4,0xF5,0x00,0x00,}},
- {0x5B7E,2,{0x8C,0x5B,0x00,0x00,}},
- {0x5B7F,2,{0x8C,0x5C,0x00,0x00,}},
- {0x5B80,2,{0xE5,0xB2,0x00,0x00,}},
- {0x5B81,2,{0xC4,0xFE,0x00,0x00,}},
- {0x5B82,2,{0x8C,0x5D,0x00,0x00,}},
- {0x5B83,2,{0xCB,0xFC,0x00,0x00,}},
- {0x5B84,2,{0xE5,0xB3,0x00,0x00,}},
- {0x5B85,2,{0xD5,0xAC,0x00,0x00,}},
- {0x5B86,2,{0x8C,0x5E,0x00,0x00,}},
- {0x5B87,2,{0xD3,0xEE,0x00,0x00,}},
- {0x5B88,2,{0xCA,0xD8,0x00,0x00,}},
- {0x5B89,2,{0xB0,0xB2,0x00,0x00,}},
- {0x5B8A,2,{0x8C,0x5F,0x00,0x00,}},
- {0x5B8B,2,{0xCB,0xCE,0x00,0x00,}},
- {0x5B8C,2,{0xCD,0xEA,0x00,0x00,}},
- {0x5B8D,2,{0x8C,0x60,0x00,0x00,}},
- {0x5B8E,2,{0x8C,0x61,0x00,0x00,}},
- {0x5B8F,2,{0xBA,0xEA,0x00,0x00,}},
- {0x5B90,2,{0x8C,0x62,0x00,0x00,}},
- {0x5B91,2,{0x8C,0x63,0x00,0x00,}},
- {0x5B92,2,{0x8C,0x64,0x00,0x00,}},
- {0x5B93,2,{0xE5,0xB5,0x00,0x00,}},
- {0x5B94,2,{0x8C,0x65,0x00,0x00,}},
- {0x5B95,2,{0xE5,0xB4,0x00,0x00,}},
- {0x5B96,2,{0x8C,0x66,0x00,0x00,}},
- {0x5B97,2,{0xD7,0xDA,0x00,0x00,}},
- {0x5B98,2,{0xB9,0xD9,0x00,0x00,}},
- {0x5B99,2,{0xD6,0xE6,0x00,0x00,}},
- {0x5B9A,2,{0xB6,0xA8,0x00,0x00,}},
- {0x5B9B,2,{0xCD,0xF0,0x00,0x00,}},
- {0x5B9C,2,{0xD2,0xCB,0x00,0x00,}},
- {0x5B9D,2,{0xB1,0xA6,0x00,0x00,}},
- {0x5B9E,2,{0xCA,0xB5,0x00,0x00,}},
- {0x5B9F,2,{0x8C,0x67,0x00,0x00,}},
- {0x5BA0,2,{0xB3,0xE8,0x00,0x00,}},
- {0x5BA1,2,{0xC9,0xF3,0x00,0x00,}},
- {0x5BA2,2,{0xBF,0xCD,0x00,0x00,}},
- {0x5BA3,2,{0xD0,0xFB,0x00,0x00,}},
- {0x5BA4,2,{0xCA,0xD2,0x00,0x00,}},
- {0x5BA5,2,{0xE5,0xB6,0x00,0x00,}},
- {0x5BA6,2,{0xBB,0xC2,0x00,0x00,}},
- {0x5BA7,2,{0x8C,0x68,0x00,0x00,}},
- {0x5BA8,2,{0x8C,0x69,0x00,0x00,}},
- {0x5BA9,2,{0x8C,0x6A,0x00,0x00,}},
- {0x5BAA,2,{0xCF,0xDC,0x00,0x00,}},
- {0x5BAB,2,{0xB9,0xAC,0x00,0x00,}},
- {0x5BAC,2,{0x8C,0x6B,0x00,0x00,}},
- {0x5BAD,2,{0x8C,0x6C,0x00,0x00,}},
- {0x5BAE,2,{0x8C,0x6D,0x00,0x00,}},
- {0x5BAF,2,{0x8C,0x6E,0x00,0x00,}},
- {0x5BB0,2,{0xD4,0xD7,0x00,0x00,}},
- {0x5BB1,2,{0x8C,0x6F,0x00,0x00,}},
- {0x5BB2,2,{0x8C,0x70,0x00,0x00,}},
- {0x5BB3,2,{0xBA,0xA6,0x00,0x00,}},
- {0x5BB4,2,{0xD1,0xE7,0x00,0x00,}},
- {0x5BB5,2,{0xCF,0xFC,0x00,0x00,}},
- {0x5BB6,2,{0xBC,0xD2,0x00,0x00,}},
- {0x5BB7,2,{0x8C,0x71,0x00,0x00,}},
- {0x5BB8,2,{0xE5,0xB7,0x00,0x00,}},
- {0x5BB9,2,{0xC8,0xDD,0x00,0x00,}},
- {0x5BBA,2,{0x8C,0x72,0x00,0x00,}},
- {0x5BBB,2,{0x8C,0x73,0x00,0x00,}},
- {0x5BBC,2,{0x8C,0x74,0x00,0x00,}},
- {0x5BBD,2,{0xBF,0xED,0x00,0x00,}},
- {0x5BBE,2,{0xB1,0xF6,0x00,0x00,}},
- {0x5BBF,2,{0xCB,0xDE,0x00,0x00,}},
- {0x5BC0,2,{0x8C,0x75,0x00,0x00,}},
- {0x5BC1,2,{0x8C,0x76,0x00,0x00,}},
- {0x5BC2,2,{0xBC,0xC5,0x00,0x00,}},
- {0x5BC3,2,{0x8C,0x77,0x00,0x00,}},
- {0x5BC4,2,{0xBC,0xC4,0x00,0x00,}},
- {0x5BC5,2,{0xD2,0xFA,0x00,0x00,}},
- {0x5BC6,2,{0xC3,0xDC,0x00,0x00,}},
- {0x5BC7,2,{0xBF,0xDC,0x00,0x00,}},
- {0x5BC8,2,{0x8C,0x78,0x00,0x00,}},
- {0x5BC9,2,{0x8C,0x79,0x00,0x00,}},
- {0x5BCA,2,{0x8C,0x7A,0x00,0x00,}},
- {0x5BCB,2,{0x8C,0x7B,0x00,0x00,}},
- {0x5BCC,2,{0xB8,0xBB,0x00,0x00,}},
- {0x5BCD,2,{0x8C,0x7C,0x00,0x00,}},
- {0x5BCE,2,{0x8C,0x7D,0x00,0x00,}},
- {0x5BCF,2,{0x8C,0x7E,0x00,0x00,}},
- {0x5BD0,2,{0xC3,0xC2,0x00,0x00,}},
- {0x5BD1,2,{0x8C,0x80,0x00,0x00,}},
- {0x5BD2,2,{0xBA,0xAE,0x00,0x00,}},
- {0x5BD3,2,{0xD4,0xA2,0x00,0x00,}},
- {0x5BD4,2,{0x8C,0x81,0x00,0x00,}},
- {0x5BD5,2,{0x8C,0x82,0x00,0x00,}},
- {0x5BD6,2,{0x8C,0x83,0x00,0x00,}},
- {0x5BD7,2,{0x8C,0x84,0x00,0x00,}},
- {0x5BD8,2,{0x8C,0x85,0x00,0x00,}},
- {0x5BD9,2,{0x8C,0x86,0x00,0x00,}},
- {0x5BDA,2,{0x8C,0x87,0x00,0x00,}},
- {0x5BDB,2,{0x8C,0x88,0x00,0x00,}},
- {0x5BDC,2,{0x8C,0x89,0x00,0x00,}},
- {0x5BDD,2,{0xC7,0xDE,0x00,0x00,}},
- {0x5BDE,2,{0xC4,0xAF,0x00,0x00,}},
- {0x5BDF,2,{0xB2,0xEC,0x00,0x00,}},
- {0x5BE0,2,{0x8C,0x8A,0x00,0x00,}},
- {0x5BE1,2,{0xB9,0xD1,0x00,0x00,}},
- {0x5BE2,2,{0x8C,0x8B,0x00,0x00,}},
- {0x5BE3,2,{0x8C,0x8C,0x00,0x00,}},
- {0x5BE4,2,{0xE5,0xBB,0x00,0x00,}},
- {0x5BE5,2,{0xC1,0xC8,0x00,0x00,}},
- {0x5BE6,2,{0x8C,0x8D,0x00,0x00,}},
- {0x5BE7,2,{0x8C,0x8E,0x00,0x00,}},
- {0x5BE8,2,{0xD5,0xAF,0x00,0x00,}},
- {0x5BE9,2,{0x8C,0x8F,0x00,0x00,}},
- {0x5BEA,2,{0x8C,0x90,0x00,0x00,}},
- {0x5BEB,2,{0x8C,0x91,0x00,0x00,}},
- {0x5BEC,2,{0x8C,0x92,0x00,0x00,}},
- {0x5BED,2,{0x8C,0x93,0x00,0x00,}},
- {0x5BEE,2,{0xE5,0xBC,0x00,0x00,}},
- {0x5BEF,2,{0x8C,0x94,0x00,0x00,}},
- {0x5BF0,2,{0xE5,0xBE,0x00,0x00,}},
- {0x5BF1,2,{0x8C,0x95,0x00,0x00,}},
- {0x5BF2,2,{0x8C,0x96,0x00,0x00,}},
- {0x5BF3,2,{0x8C,0x97,0x00,0x00,}},
- {0x5BF4,2,{0x8C,0x98,0x00,0x00,}},
- {0x5BF5,2,{0x8C,0x99,0x00,0x00,}},
- {0x5BF6,2,{0x8C,0x9A,0x00,0x00,}},
- {0x5BF7,2,{0x8C,0x9B,0x00,0x00,}},
- {0x5BF8,2,{0xB4,0xE7,0x00,0x00,}},
- {0x5BF9,2,{0xB6,0xD4,0x00,0x00,}},
- {0x5BFA,2,{0xCB,0xC2,0x00,0x00,}},
- {0x5BFB,2,{0xD1,0xB0,0x00,0x00,}},
- {0x5BFC,2,{0xB5,0xBC,0x00,0x00,}},
- {0x5BFD,2,{0x8C,0x9C,0x00,0x00,}},
- {0x5BFE,2,{0x8C,0x9D,0x00,0x00,}},
- {0x5BFF,2,{0xCA,0xD9,0x00,0x00,}},
- {0x5C00,2,{0x8C,0x9E,0x00,0x00,}},
- {0x5C01,2,{0xB7,0xE2,0x00,0x00,}},
- {0x5C02,2,{0x8C,0x9F,0x00,0x00,}},
- {0x5C03,2,{0x8C,0xA0,0x00,0x00,}},
- {0x5C04,2,{0xC9,0xE4,0x00,0x00,}},
- {0x5C05,2,{0x8C,0xA1,0x00,0x00,}},
- {0x5C06,2,{0xBD,0xAB,0x00,0x00,}},
- {0x5C07,2,{0x8C,0xA2,0x00,0x00,}},
- {0x5C08,2,{0x8C,0xA3,0x00,0x00,}},
- {0x5C09,2,{0xCE,0xBE,0x00,0x00,}},
- {0x5C0A,2,{0xD7,0xF0,0x00,0x00,}},
- {0x5C0B,2,{0x8C,0xA4,0x00,0x00,}},
- {0x5C0C,2,{0x8C,0xA5,0x00,0x00,}},
- {0x5C0D,2,{0x8C,0xA6,0x00,0x00,}},
- {0x5C0E,2,{0x8C,0xA7,0x00,0x00,}},
- {0x5C0F,2,{0xD0,0xA1,0x00,0x00,}},
- {0x5C10,2,{0x8C,0xA8,0x00,0x00,}},
- {0x5C11,2,{0xC9,0xD9,0x00,0x00,}},
- {0x5C12,2,{0x8C,0xA9,0x00,0x00,}},
- {0x5C13,2,{0x8C,0xAA,0x00,0x00,}},
- {0x5C14,2,{0xB6,0xFB,0x00,0x00,}},
- {0x5C15,2,{0xE6,0xD8,0x00,0x00,}},
- {0x5C16,2,{0xBC,0xE2,0x00,0x00,}},
- {0x5C17,2,{0x8C,0xAB,0x00,0x00,}},
- {0x5C18,2,{0xB3,0xBE,0x00,0x00,}},
- {0x5C19,2,{0x8C,0xAC,0x00,0x00,}},
- {0x5C1A,2,{0xC9,0xD0,0x00,0x00,}},
- {0x5C1B,2,{0x8C,0xAD,0x00,0x00,}},
- {0x5C1C,2,{0xE6,0xD9,0x00,0x00,}},
- {0x5C1D,2,{0xB3,0xA2,0x00,0x00,}},
- {0x5C1E,2,{0x8C,0xAE,0x00,0x00,}},
- {0x5C1F,2,{0x8C,0xAF,0x00,0x00,}},
- {0x5C20,2,{0x8C,0xB0,0x00,0x00,}},
- {0x5C21,2,{0x8C,0xB1,0x00,0x00,}},
- {0x5C22,2,{0xDE,0xCC,0x00,0x00,}},
- {0x5C23,2,{0x8C,0xB2,0x00,0x00,}},
- {0x5C24,2,{0xD3,0xC8,0x00,0x00,}},
- {0x5C25,2,{0xDE,0xCD,0x00,0x00,}},
- {0x5C26,2,{0x8C,0xB3,0x00,0x00,}},
- {0x5C27,2,{0xD2,0xA2,0x00,0x00,}},
- {0x5C28,2,{0x8C,0xB4,0x00,0x00,}},
- {0x5C29,2,{0x8C,0xB5,0x00,0x00,}},
- {0x5C2A,2,{0x8C,0xB6,0x00,0x00,}},
- {0x5C2B,2,{0x8C,0xB7,0x00,0x00,}},
- {0x5C2C,2,{0xDE,0xCE,0x00,0x00,}},
- {0x5C2D,2,{0x8C,0xB8,0x00,0x00,}},
- {0x5C2E,2,{0x8C,0xB9,0x00,0x00,}},
- {0x5C2F,2,{0x8C,0xBA,0x00,0x00,}},
- {0x5C30,2,{0x8C,0xBB,0x00,0x00,}},
- {0x5C31,2,{0xBE,0xCD,0x00,0x00,}},
- {0x5C32,2,{0x8C,0xBC,0x00,0x00,}},
- {0x5C33,2,{0x8C,0xBD,0x00,0x00,}},
- {0x5C34,2,{0xDE,0xCF,0x00,0x00,}},
- {0x5C35,2,{0x8C,0xBE,0x00,0x00,}},
- {0x5C36,2,{0x8C,0xBF,0x00,0x00,}},
- {0x5C37,2,{0x8C,0xC0,0x00,0x00,}},
- {0x5C38,2,{0xCA,0xAC,0x00,0x00,}},
- {0x5C39,2,{0xD2,0xFC,0x00,0x00,}},
- {0x5C3A,2,{0xB3,0xDF,0x00,0x00,}},
- {0x5C3B,2,{0xE5,0xEA,0x00,0x00,}},
- {0x5C3C,2,{0xC4,0xE1,0x00,0x00,}},
- {0x5C3D,2,{0xBE,0xA1,0x00,0x00,}},
- {0x5C3E,2,{0xCE,0xB2,0x00,0x00,}},
- {0x5C3F,2,{0xC4,0xF2,0x00,0x00,}},
- {0x5C40,2,{0xBE,0xD6,0x00,0x00,}},
- {0x5C41,2,{0xC6,0xA8,0x00,0x00,}},
- {0x5C42,2,{0xB2,0xE3,0x00,0x00,}},
- {0x5C43,2,{0x8C,0xC1,0x00,0x00,}},
- {0x5C44,2,{0x8C,0xC2,0x00,0x00,}},
- {0x5C45,2,{0xBE,0xD3,0x00,0x00,}},
- {0x5C46,2,{0x8C,0xC3,0x00,0x00,}},
- {0x5C47,2,{0x8C,0xC4,0x00,0x00,}},
- {0x5C48,2,{0xC7,0xFC,0x00,0x00,}},
- {0x5C49,2,{0xCC,0xEB,0x00,0x00,}},
- {0x5C4A,2,{0xBD,0xEC,0x00,0x00,}},
- {0x5C4B,2,{0xCE,0xDD,0x00,0x00,}},
- {0x5C4C,2,{0x8C,0xC5,0x00,0x00,}},
- {0x5C4D,2,{0x8C,0xC6,0x00,0x00,}},
- {0x5C4E,2,{0xCA,0xBA,0x00,0x00,}},
- {0x5C4F,2,{0xC6,0xC1,0x00,0x00,}},
- {0x5C50,2,{0xE5,0xEC,0x00,0x00,}},
- {0x5C51,2,{0xD0,0xBC,0x00,0x00,}},
- {0x5C52,2,{0x8C,0xC7,0x00,0x00,}},
- {0x5C53,2,{0x8C,0xC8,0x00,0x00,}},
- {0x5C54,2,{0x8C,0xC9,0x00,0x00,}},
- {0x5C55,2,{0xD5,0xB9,0x00,0x00,}},
- {0x5C56,2,{0x8C,0xCA,0x00,0x00,}},
- {0x5C57,2,{0x8C,0xCB,0x00,0x00,}},
- {0x5C58,2,{0x8C,0xCC,0x00,0x00,}},
- {0x5C59,2,{0xE5,0xED,0x00,0x00,}},
- {0x5C5A,2,{0x8C,0xCD,0x00,0x00,}},
- {0x5C5B,2,{0x8C,0xCE,0x00,0x00,}},
- {0x5C5C,2,{0x8C,0xCF,0x00,0x00,}},
- {0x5C5D,2,{0x8C,0xD0,0x00,0x00,}},
- {0x5C5E,2,{0xCA,0xF4,0x00,0x00,}},
- {0x5C5F,2,{0x8C,0xD1,0x00,0x00,}},
- {0x5C60,2,{0xCD,0xC0,0x00,0x00,}},
- {0x5C61,2,{0xC2,0xC5,0x00,0x00,}},
- {0x5C62,2,{0x8C,0xD2,0x00,0x00,}},
- {0x5C63,2,{0xE5,0xEF,0x00,0x00,}},
- {0x5C64,2,{0x8C,0xD3,0x00,0x00,}},
- {0x5C65,2,{0xC2,0xC4,0x00,0x00,}},
- {0x5C66,2,{0xE5,0xF0,0x00,0x00,}},
- {0x5C67,2,{0x8C,0xD4,0x00,0x00,}},
- {0x5C68,2,{0x8C,0xD5,0x00,0x00,}},
- {0x5C69,2,{0x8C,0xD6,0x00,0x00,}},
- {0x5C6A,2,{0x8C,0xD7,0x00,0x00,}},
- {0x5C6B,2,{0x8C,0xD8,0x00,0x00,}},
- {0x5C6C,2,{0x8C,0xD9,0x00,0x00,}},
- {0x5C6D,2,{0x8C,0xDA,0x00,0x00,}},
- {0x5C6E,2,{0xE5,0xF8,0x00,0x00,}},
- {0x5C6F,2,{0xCD,0xCD,0x00,0x00,}},
- {0x5C70,2,{0x8C,0xDB,0x00,0x00,}},
- {0x5C71,2,{0xC9,0xBD,0x00,0x00,}},
- {0x5C72,2,{0x8C,0xDC,0x00,0x00,}},
- {0x5C73,2,{0x8C,0xDD,0x00,0x00,}},
- {0x5C74,2,{0x8C,0xDE,0x00,0x00,}},
- {0x5C75,2,{0x8C,0xDF,0x00,0x00,}},
- {0x5C76,2,{0x8C,0xE0,0x00,0x00,}},
- {0x5C77,2,{0x8C,0xE1,0x00,0x00,}},
- {0x5C78,2,{0x8C,0xE2,0x00,0x00,}},
- {0x5C79,2,{0xD2,0xD9,0x00,0x00,}},
- {0x5C7A,2,{0xE1,0xA8,0x00,0x00,}},
- {0x5C7B,2,{0x8C,0xE3,0x00,0x00,}},
- {0x5C7C,2,{0x8C,0xE4,0x00,0x00,}},
- {0x5C7D,2,{0x8C,0xE5,0x00,0x00,}},
- {0x5C7E,2,{0x8C,0xE6,0x00,0x00,}},
- {0x5C7F,2,{0xD3,0xEC,0x00,0x00,}},
- {0x5C80,2,{0x8C,0xE7,0x00,0x00,}},
- {0x5C81,2,{0xCB,0xEA,0x00,0x00,}},
- {0x5C82,2,{0xC6,0xF1,0x00,0x00,}},
- {0x5C83,2,{0x8C,0xE8,0x00,0x00,}},
- {0x5C84,2,{0x8C,0xE9,0x00,0x00,}},
- {0x5C85,2,{0x8C,0xEA,0x00,0x00,}},
- {0x5C86,2,{0x8C,0xEB,0x00,0x00,}},
- {0x5C87,2,{0x8C,0xEC,0x00,0x00,}},
- {0x5C88,2,{0xE1,0xAC,0x00,0x00,}},
- {0x5C89,2,{0x8C,0xED,0x00,0x00,}},
- {0x5C8A,2,{0x8C,0xEE,0x00,0x00,}},
- {0x5C8B,2,{0x8C,0xEF,0x00,0x00,}},
- {0x5C8C,2,{0xE1,0xA7,0x00,0x00,}},
- {0x5C8D,2,{0xE1,0xA9,0x00,0x00,}},
- {0x5C8E,2,{0x8C,0xF0,0x00,0x00,}},
- {0x5C8F,2,{0x8C,0xF1,0x00,0x00,}},
- {0x5C90,2,{0xE1,0xAA,0x00,0x00,}},
- {0x5C91,2,{0xE1,0xAF,0x00,0x00,}},
- {0x5C92,2,{0x8C,0xF2,0x00,0x00,}},
- {0x5C93,2,{0x8C,0xF3,0x00,0x00,}},
- {0x5C94,2,{0xB2,0xED,0x00,0x00,}},
- {0x5C95,2,{0x8C,0xF4,0x00,0x00,}},
- {0x5C96,2,{0xE1,0xAB,0x00,0x00,}},
- {0x5C97,2,{0xB8,0xDA,0x00,0x00,}},
- {0x5C98,2,{0xE1,0xAD,0x00,0x00,}},
- {0x5C99,2,{0xE1,0xAE,0x00,0x00,}},
- {0x5C9A,2,{0xE1,0xB0,0x00,0x00,}},
- {0x5C9B,2,{0xB5,0xBA,0x00,0x00,}},
- {0x5C9C,2,{0xE1,0xB1,0x00,0x00,}},
- {0x5C9D,2,{0x8C,0xF5,0x00,0x00,}},
- {0x5C9E,2,{0x8C,0xF6,0x00,0x00,}},
- {0x5C9F,2,{0x8C,0xF7,0x00,0x00,}},
- {0x5CA0,2,{0x8C,0xF8,0x00,0x00,}},
- {0x5CA1,2,{0x8C,0xF9,0x00,0x00,}},
- {0x5CA2,2,{0xE1,0xB3,0x00,0x00,}},
- {0x5CA3,2,{0xE1,0xB8,0x00,0x00,}},
- {0x5CA4,2,{0x8C,0xFA,0x00,0x00,}},
- {0x5CA5,2,{0x8C,0xFB,0x00,0x00,}},
- {0x5CA6,2,{0x8C,0xFC,0x00,0x00,}},
- {0x5CA7,2,{0x8C,0xFD,0x00,0x00,}},
- {0x5CA8,2,{0x8C,0xFE,0x00,0x00,}},
- {0x5CA9,2,{0xD1,0xD2,0x00,0x00,}},
- {0x5CAA,2,{0x8D,0x40,0x00,0x00,}},
- {0x5CAB,2,{0xE1,0xB6,0x00,0x00,}},
- {0x5CAC,2,{0xE1,0xB5,0x00,0x00,}},
- {0x5CAD,2,{0xC1,0xEB,0x00,0x00,}},
- {0x5CAE,2,{0x8D,0x41,0x00,0x00,}},
- {0x5CAF,2,{0x8D,0x42,0x00,0x00,}},
- {0x5CB0,2,{0x8D,0x43,0x00,0x00,}},
- {0x5CB1,2,{0xE1,0xB7,0x00,0x00,}},
- {0x5CB2,2,{0x8D,0x44,0x00,0x00,}},
- {0x5CB3,2,{0xD4,0xC0,0x00,0x00,}},
- {0x5CB4,2,{0x8D,0x45,0x00,0x00,}},
- {0x5CB5,2,{0xE1,0xB2,0x00,0x00,}},
- {0x5CB6,2,{0x8D,0x46,0x00,0x00,}},
- {0x5CB7,2,{0xE1,0xBA,0x00,0x00,}},
- {0x5CB8,2,{0xB0,0xB6,0x00,0x00,}},
- {0x5CB9,2,{0x8D,0x47,0x00,0x00,}},
- {0x5CBA,2,{0x8D,0x48,0x00,0x00,}},
- {0x5CBB,2,{0x8D,0x49,0x00,0x00,}},
- {0x5CBC,2,{0x8D,0x4A,0x00,0x00,}},
- {0x5CBD,2,{0xE1,0xB4,0x00,0x00,}},
- {0x5CBE,2,{0x8D,0x4B,0x00,0x00,}},
- {0x5CBF,2,{0xBF,0xF9,0x00,0x00,}},
- {0x5CC0,2,{0x8D,0x4C,0x00,0x00,}},
- {0x5CC1,2,{0xE1,0xB9,0x00,0x00,}},
- {0x5CC2,2,{0x8D,0x4D,0x00,0x00,}},
- {0x5CC3,2,{0x8D,0x4E,0x00,0x00,}},
- {0x5CC4,2,{0xE1,0xBB,0x00,0x00,}},
- {0x5CC5,2,{0x8D,0x4F,0x00,0x00,}},
- {0x5CC6,2,{0x8D,0x50,0x00,0x00,}},
- {0x5CC7,2,{0x8D,0x51,0x00,0x00,}},
- {0x5CC8,2,{0x8D,0x52,0x00,0x00,}},
- {0x5CC9,2,{0x8D,0x53,0x00,0x00,}},
- {0x5CCA,2,{0x8D,0x54,0x00,0x00,}},
- {0x5CCB,2,{0xE1,0xBE,0x00,0x00,}},
- {0x5CCC,2,{0x8D,0x55,0x00,0x00,}},
- {0x5CCD,2,{0x8D,0x56,0x00,0x00,}},
- {0x5CCE,2,{0x8D,0x57,0x00,0x00,}},
- {0x5CCF,2,{0x8D,0x58,0x00,0x00,}},
- {0x5CD0,2,{0x8D,0x59,0x00,0x00,}},
- {0x5CD1,2,{0x8D,0x5A,0x00,0x00,}},
- {0x5CD2,2,{0xE1,0xBC,0x00,0x00,}},
- {0x5CD3,2,{0x8D,0x5B,0x00,0x00,}},
- {0x5CD4,2,{0x8D,0x5C,0x00,0x00,}},
- {0x5CD5,2,{0x8D,0x5D,0x00,0x00,}},
- {0x5CD6,2,{0x8D,0x5E,0x00,0x00,}},
- {0x5CD7,2,{0x8D,0x5F,0x00,0x00,}},
- {0x5CD8,2,{0x8D,0x60,0x00,0x00,}},
- {0x5CD9,2,{0xD6,0xC5,0x00,0x00,}},
- {0x5CDA,2,{0x8D,0x61,0x00,0x00,}},
- {0x5CDB,2,{0x8D,0x62,0x00,0x00,}},
- {0x5CDC,2,{0x8D,0x63,0x00,0x00,}},
- {0x5CDD,2,{0x8D,0x64,0x00,0x00,}},
- {0x5CDE,2,{0x8D,0x65,0x00,0x00,}},
- {0x5CDF,2,{0x8D,0x66,0x00,0x00,}},
- {0x5CE0,2,{0x8D,0x67,0x00,0x00,}},
- {0x5CE1,2,{0xCF,0xBF,0x00,0x00,}},
- {0x5CE2,2,{0x8D,0x68,0x00,0x00,}},
- {0x5CE3,2,{0x8D,0x69,0x00,0x00,}},
- {0x5CE4,2,{0xE1,0xBD,0x00,0x00,}},
- {0x5CE5,2,{0xE1,0xBF,0x00,0x00,}},
- {0x5CE6,2,{0xC2,0xCD,0x00,0x00,}},
- {0x5CE7,2,{0x8D,0x6A,0x00,0x00,}},
- {0x5CE8,2,{0xB6,0xEB,0x00,0x00,}},
- {0x5CE9,2,{0x8D,0x6B,0x00,0x00,}},
- {0x5CEA,2,{0xD3,0xF8,0x00,0x00,}},
- {0x5CEB,2,{0x8D,0x6C,0x00,0x00,}},
- {0x5CEC,2,{0x8D,0x6D,0x00,0x00,}},
- {0x5CED,2,{0xC7,0xCD,0x00,0x00,}},
- {0x5CEE,2,{0x8D,0x6E,0x00,0x00,}},
- {0x5CEF,2,{0x8D,0x6F,0x00,0x00,}},
- {0x5CF0,2,{0xB7,0xE5,0x00,0x00,}},
- {0x5CF1,2,{0x8D,0x70,0x00,0x00,}},
- {0x5CF2,2,{0x8D,0x71,0x00,0x00,}},
- {0x5CF3,2,{0x8D,0x72,0x00,0x00,}},
- {0x5CF4,2,{0x8D,0x73,0x00,0x00,}},
- {0x5CF5,2,{0x8D,0x74,0x00,0x00,}},
- {0x5CF6,2,{0x8D,0x75,0x00,0x00,}},
- {0x5CF7,2,{0x8D,0x76,0x00,0x00,}},
- {0x5CF8,2,{0x8D,0x77,0x00,0x00,}},
- {0x5CF9,2,{0x8D,0x78,0x00,0x00,}},
- {0x5CFA,2,{0x8D,0x79,0x00,0x00,}},
- {0x5CFB,2,{0xBE,0xFE,0x00,0x00,}},
- {0x5CFC,2,{0x8D,0x7A,0x00,0x00,}},
- {0x5CFD,2,{0x8D,0x7B,0x00,0x00,}},
- {0x5CFE,2,{0x8D,0x7C,0x00,0x00,}},
- {0x5CFF,2,{0x8D,0x7D,0x00,0x00,}},
- {0x5D00,2,{0x8D,0x7E,0x00,0x00,}},
- {0x5D01,2,{0x8D,0x80,0x00,0x00,}},
- {0x5D02,2,{0xE1,0xC0,0x00,0x00,}},
- {0x5D03,2,{0xE1,0xC1,0x00,0x00,}},
- {0x5D04,2,{0x8D,0x81,0x00,0x00,}},
- {0x5D05,2,{0x8D,0x82,0x00,0x00,}},
- {0x5D06,2,{0xE1,0xC7,0x00,0x00,}},
- {0x5D07,2,{0xB3,0xE7,0x00,0x00,}},
- {0x5D08,2,{0x8D,0x83,0x00,0x00,}},
- {0x5D09,2,{0x8D,0x84,0x00,0x00,}},
- {0x5D0A,2,{0x8D,0x85,0x00,0x00,}},
- {0x5D0B,2,{0x8D,0x86,0x00,0x00,}},
- {0x5D0C,2,{0x8D,0x87,0x00,0x00,}},
- {0x5D0D,2,{0x8D,0x88,0x00,0x00,}},
- {0x5D0E,2,{0xC6,0xE9,0x00,0x00,}},
- {0x5D0F,2,{0x8D,0x89,0x00,0x00,}},
- {0x5D10,2,{0x8D,0x8A,0x00,0x00,}},
- {0x5D11,2,{0x8D,0x8B,0x00,0x00,}},
- {0x5D12,2,{0x8D,0x8C,0x00,0x00,}},
- {0x5D13,2,{0x8D,0x8D,0x00,0x00,}},
- {0x5D14,2,{0xB4,0xDE,0x00,0x00,}},
- {0x5D15,2,{0x8D,0x8E,0x00,0x00,}},
- {0x5D16,2,{0xD1,0xC2,0x00,0x00,}},
- {0x5D17,2,{0x8D,0x8F,0x00,0x00,}},
- {0x5D18,2,{0x8D,0x90,0x00,0x00,}},
- {0x5D19,2,{0x8D,0x91,0x00,0x00,}},
- {0x5D1A,2,{0x8D,0x92,0x00,0x00,}},
- {0x5D1B,2,{0xE1,0xC8,0x00,0x00,}},
- {0x5D1C,2,{0x8D,0x93,0x00,0x00,}},
- {0x5D1D,2,{0x8D,0x94,0x00,0x00,}},
- {0x5D1E,2,{0xE1,0xC6,0x00,0x00,}},
- {0x5D1F,2,{0x8D,0x95,0x00,0x00,}},
- {0x5D20,2,{0x8D,0x96,0x00,0x00,}},
- {0x5D21,2,{0x8D,0x97,0x00,0x00,}},
- {0x5D22,2,{0x8D,0x98,0x00,0x00,}},
- {0x5D23,2,{0x8D,0x99,0x00,0x00,}},
- {0x5D24,2,{0xE1,0xC5,0x00,0x00,}},
- {0x5D25,2,{0x8D,0x9A,0x00,0x00,}},
- {0x5D26,2,{0xE1,0xC3,0x00,0x00,}},
- {0x5D27,2,{0xE1,0xC2,0x00,0x00,}},
- {0x5D28,2,{0x8D,0x9B,0x00,0x00,}},
- {0x5D29,2,{0xB1,0xC0,0x00,0x00,}},
- {0x5D2A,2,{0x8D,0x9C,0x00,0x00,}},
- {0x5D2B,2,{0x8D,0x9D,0x00,0x00,}},
- {0x5D2C,2,{0x8D,0x9E,0x00,0x00,}},
- {0x5D2D,2,{0xD5,0xB8,0x00,0x00,}},
- {0x5D2E,2,{0xE1,0xC4,0x00,0x00,}},
- {0x5D2F,2,{0x8D,0x9F,0x00,0x00,}},
- {0x5D30,2,{0x8D,0xA0,0x00,0x00,}},
- {0x5D31,2,{0x8D,0xA1,0x00,0x00,}},
- {0x5D32,2,{0x8D,0xA2,0x00,0x00,}},
- {0x5D33,2,{0x8D,0xA3,0x00,0x00,}},
- {0x5D34,2,{0xE1,0xCB,0x00,0x00,}},
- {0x5D35,2,{0x8D,0xA4,0x00,0x00,}},
- {0x5D36,2,{0x8D,0xA5,0x00,0x00,}},
- {0x5D37,2,{0x8D,0xA6,0x00,0x00,}},
- {0x5D38,2,{0x8D,0xA7,0x00,0x00,}},
- {0x5D39,2,{0x8D,0xA8,0x00,0x00,}},
- {0x5D3A,2,{0x8D,0xA9,0x00,0x00,}},
- {0x5D3B,2,{0x8D,0xAA,0x00,0x00,}},
- {0x5D3C,2,{0x8D,0xAB,0x00,0x00,}},
- {0x5D3D,2,{0xE1,0xCC,0x00,0x00,}},
- {0x5D3E,2,{0xE1,0xCA,0x00,0x00,}},
- {0x5D3F,2,{0x8D,0xAC,0x00,0x00,}},
- {0x5D40,2,{0x8D,0xAD,0x00,0x00,}},
- {0x5D41,2,{0x8D,0xAE,0x00,0x00,}},
- {0x5D42,2,{0x8D,0xAF,0x00,0x00,}},
- {0x5D43,2,{0x8D,0xB0,0x00,0x00,}},
- {0x5D44,2,{0x8D,0xB1,0x00,0x00,}},
- {0x5D45,2,{0x8D,0xB2,0x00,0x00,}},
- {0x5D46,2,{0x8D,0xB3,0x00,0x00,}},
- {0x5D47,2,{0xEF,0xFA,0x00,0x00,}},
- {0x5D48,2,{0x8D,0xB4,0x00,0x00,}},
- {0x5D49,2,{0x8D,0xB5,0x00,0x00,}},
- {0x5D4A,2,{0xE1,0xD3,0x00,0x00,}},
- {0x5D4B,2,{0xE1,0xD2,0x00,0x00,}},
- {0x5D4C,2,{0xC7,0xB6,0x00,0x00,}},
- {0x5D4D,2,{0x8D,0xB6,0x00,0x00,}},
- {0x5D4E,2,{0x8D,0xB7,0x00,0x00,}},
- {0x5D4F,2,{0x8D,0xB8,0x00,0x00,}},
- {0x5D50,2,{0x8D,0xB9,0x00,0x00,}},
- {0x5D51,2,{0x8D,0xBA,0x00,0x00,}},
- {0x5D52,2,{0x8D,0xBB,0x00,0x00,}},
- {0x5D53,2,{0x8D,0xBC,0x00,0x00,}},
- {0x5D54,2,{0x8D,0xBD,0x00,0x00,}},
- {0x5D55,2,{0x8D,0xBE,0x00,0x00,}},
- {0x5D56,2,{0x8D,0xBF,0x00,0x00,}},
- {0x5D57,2,{0x8D,0xC0,0x00,0x00,}},
- {0x5D58,2,{0xE1,0xC9,0x00,0x00,}},
- {0x5D59,2,{0x8D,0xC1,0x00,0x00,}},
- {0x5D5A,2,{0x8D,0xC2,0x00,0x00,}},
- {0x5D5B,2,{0xE1,0xCE,0x00,0x00,}},
- {0x5D5C,2,{0x8D,0xC3,0x00,0x00,}},
- {0x5D5D,2,{0xE1,0xD0,0x00,0x00,}},
- {0x5D5E,2,{0x8D,0xC4,0x00,0x00,}},
- {0x5D5F,2,{0x8D,0xC5,0x00,0x00,}},
- {0x5D60,2,{0x8D,0xC6,0x00,0x00,}},
- {0x5D61,2,{0x8D,0xC7,0x00,0x00,}},
- {0x5D62,2,{0x8D,0xC8,0x00,0x00,}},
- {0x5D63,2,{0x8D,0xC9,0x00,0x00,}},
- {0x5D64,2,{0x8D,0xCA,0x00,0x00,}},
- {0x5D65,2,{0x8D,0xCB,0x00,0x00,}},
- {0x5D66,2,{0x8D,0xCC,0x00,0x00,}},
- {0x5D67,2,{0x8D,0xCD,0x00,0x00,}},
- {0x5D68,2,{0x8D,0xCE,0x00,0x00,}},
- {0x5D69,2,{0xE1,0xD4,0x00,0x00,}},
- {0x5D6A,2,{0x8D,0xCF,0x00,0x00,}},
- {0x5D6B,2,{0xE1,0xD1,0x00,0x00,}},
- {0x5D6C,2,{0xE1,0xCD,0x00,0x00,}},
- {0x5D6D,2,{0x8D,0xD0,0x00,0x00,}},
- {0x5D6E,2,{0x8D,0xD1,0x00,0x00,}},
- {0x5D6F,2,{0xE1,0xCF,0x00,0x00,}},
- {0x5D70,2,{0x8D,0xD2,0x00,0x00,}},
- {0x5D71,2,{0x8D,0xD3,0x00,0x00,}},
- {0x5D72,2,{0x8D,0xD4,0x00,0x00,}},
- {0x5D73,2,{0x8D,0xD5,0x00,0x00,}},
- {0x5D74,2,{0xE1,0xD5,0x00,0x00,}},
- {0x5D75,2,{0x8D,0xD6,0x00,0x00,}},
- {0x5D76,2,{0x8D,0xD7,0x00,0x00,}},
- {0x5D77,2,{0x8D,0xD8,0x00,0x00,}},
- {0x5D78,2,{0x8D,0xD9,0x00,0x00,}},
- {0x5D79,2,{0x8D,0xDA,0x00,0x00,}},
- {0x5D7A,2,{0x8D,0xDB,0x00,0x00,}},
- {0x5D7B,2,{0x8D,0xDC,0x00,0x00,}},
- {0x5D7C,2,{0x8D,0xDD,0x00,0x00,}},
- {0x5D7D,2,{0x8D,0xDE,0x00,0x00,}},
- {0x5D7E,2,{0x8D,0xDF,0x00,0x00,}},
- {0x5D7F,2,{0x8D,0xE0,0x00,0x00,}},
- {0x5D80,2,{0x8D,0xE1,0x00,0x00,}},
- {0x5D81,2,{0x8D,0xE2,0x00,0x00,}},
- {0x5D82,2,{0xE1,0xD6,0x00,0x00,}},
- {0x5D83,2,{0x8D,0xE3,0x00,0x00,}},
- {0x5D84,2,{0x8D,0xE4,0x00,0x00,}},
- {0x5D85,2,{0x8D,0xE5,0x00,0x00,}},
- {0x5D86,2,{0x8D,0xE6,0x00,0x00,}},
- {0x5D87,2,{0x8D,0xE7,0x00,0x00,}},
- {0x5D88,2,{0x8D,0xE8,0x00,0x00,}},
- {0x5D89,2,{0x8D,0xE9,0x00,0x00,}},
- {0x5D8A,2,{0x8D,0xEA,0x00,0x00,}},
- {0x5D8B,2,{0x8D,0xEB,0x00,0x00,}},
- {0x5D8C,2,{0x8D,0xEC,0x00,0x00,}},
- {0x5D8D,2,{0x8D,0xED,0x00,0x00,}},
- {0x5D8E,2,{0x8D,0xEE,0x00,0x00,}},
- {0x5D8F,2,{0x8D,0xEF,0x00,0x00,}},
- {0x5D90,2,{0x8D,0xF0,0x00,0x00,}},
- {0x5D91,2,{0x8D,0xF1,0x00,0x00,}},
- {0x5D92,2,{0x8D,0xF2,0x00,0x00,}},
- {0x5D93,2,{0x8D,0xF3,0x00,0x00,}},
- {0x5D94,2,{0x8D,0xF4,0x00,0x00,}},
- {0x5D95,2,{0x8D,0xF5,0x00,0x00,}},
- {0x5D96,2,{0x8D,0xF6,0x00,0x00,}},
- {0x5D97,2,{0x8D,0xF7,0x00,0x00,}},
- {0x5D98,2,{0x8D,0xF8,0x00,0x00,}},
- {0x5D99,2,{0xE1,0xD7,0x00,0x00,}},
- {0x5D9A,2,{0x8D,0xF9,0x00,0x00,}},
- {0x5D9B,2,{0x8D,0xFA,0x00,0x00,}},
- {0x5D9C,2,{0x8D,0xFB,0x00,0x00,}},
- {0x5D9D,2,{0xE1,0xD8,0x00,0x00,}},
- {0x5D9E,2,{0x8D,0xFC,0x00,0x00,}},
- {0x5D9F,2,{0x8D,0xFD,0x00,0x00,}},
- {0x5DA0,2,{0x8D,0xFE,0x00,0x00,}},
- {0x5DA1,2,{0x8E,0x40,0x00,0x00,}},
- {0x5DA2,2,{0x8E,0x41,0x00,0x00,}},
- {0x5DA3,2,{0x8E,0x42,0x00,0x00,}},
- {0x5DA4,2,{0x8E,0x43,0x00,0x00,}},
- {0x5DA5,2,{0x8E,0x44,0x00,0x00,}},
- {0x5DA6,2,{0x8E,0x45,0x00,0x00,}},
- {0x5DA7,2,{0x8E,0x46,0x00,0x00,}},
- {0x5DA8,2,{0x8E,0x47,0x00,0x00,}},
- {0x5DA9,2,{0x8E,0x48,0x00,0x00,}},
- {0x5DAA,2,{0x8E,0x49,0x00,0x00,}},
- {0x5DAB,2,{0x8E,0x4A,0x00,0x00,}},
- {0x5DAC,2,{0x8E,0x4B,0x00,0x00,}},
- {0x5DAD,2,{0x8E,0x4C,0x00,0x00,}},
- {0x5DAE,2,{0x8E,0x4D,0x00,0x00,}},
- {0x5DAF,2,{0x8E,0x4E,0x00,0x00,}},
- {0x5DB0,2,{0x8E,0x4F,0x00,0x00,}},
- {0x5DB1,2,{0x8E,0x50,0x00,0x00,}},
- {0x5DB2,2,{0x8E,0x51,0x00,0x00,}},
- {0x5DB3,2,{0x8E,0x52,0x00,0x00,}},
- {0x5DB4,2,{0x8E,0x53,0x00,0x00,}},
- {0x5DB5,2,{0x8E,0x54,0x00,0x00,}},
- {0x5DB6,2,{0x8E,0x55,0x00,0x00,}},
- {0x5DB7,2,{0xE1,0xDA,0x00,0x00,}},
- {0x5DB8,2,{0x8E,0x56,0x00,0x00,}},
- {0x5DB9,2,{0x8E,0x57,0x00,0x00,}},
- {0x5DBA,2,{0x8E,0x58,0x00,0x00,}},
- {0x5DBB,2,{0x8E,0x59,0x00,0x00,}},
- {0x5DBC,2,{0x8E,0x5A,0x00,0x00,}},
- {0x5DBD,2,{0x8E,0x5B,0x00,0x00,}},
- {0x5DBE,2,{0x8E,0x5C,0x00,0x00,}},
- {0x5DBF,2,{0x8E,0x5D,0x00,0x00,}},
- {0x5DC0,2,{0x8E,0x5E,0x00,0x00,}},
- {0x5DC1,2,{0x8E,0x5F,0x00,0x00,}},
- {0x5DC2,2,{0x8E,0x60,0x00,0x00,}},
- {0x5DC3,2,{0x8E,0x61,0x00,0x00,}},
- {0x5DC4,2,{0x8E,0x62,0x00,0x00,}},
- {0x5DC5,2,{0xE1,0xDB,0x00,0x00,}},
- {0x5DC6,2,{0x8E,0x63,0x00,0x00,}},
- {0x5DC7,2,{0x8E,0x64,0x00,0x00,}},
- {0x5DC8,2,{0x8E,0x65,0x00,0x00,}},
- {0x5DC9,2,{0x8E,0x66,0x00,0x00,}},
- {0x5DCA,2,{0x8E,0x67,0x00,0x00,}},
- {0x5DCB,2,{0x8E,0x68,0x00,0x00,}},
- {0x5DCC,2,{0x8E,0x69,0x00,0x00,}},
- {0x5DCD,2,{0xCE,0xA1,0x00,0x00,}},
- {0x5DCE,2,{0x8E,0x6A,0x00,0x00,}},
- {0x5DCF,2,{0x8E,0x6B,0x00,0x00,}},
- {0x5DD0,2,{0x8E,0x6C,0x00,0x00,}},
- {0x5DD1,2,{0x8E,0x6D,0x00,0x00,}},
- {0x5DD2,2,{0x8E,0x6E,0x00,0x00,}},
- {0x5DD3,2,{0x8E,0x6F,0x00,0x00,}},
- {0x5DD4,2,{0x8E,0x70,0x00,0x00,}},
- {0x5DD5,2,{0x8E,0x71,0x00,0x00,}},
- {0x5DD6,2,{0x8E,0x72,0x00,0x00,}},
- {0x5DD7,2,{0x8E,0x73,0x00,0x00,}},
- {0x5DD8,2,{0x8E,0x74,0x00,0x00,}},
- {0x5DD9,2,{0x8E,0x75,0x00,0x00,}},
- {0x5DDA,2,{0x8E,0x76,0x00,0x00,}},
- {0x5DDB,2,{0xE7,0xDD,0x00,0x00,}},
- {0x5DDC,2,{0x8E,0x77,0x00,0x00,}},
- {0x5DDD,2,{0xB4,0xA8,0x00,0x00,}},
- {0x5DDE,2,{0xD6,0xDD,0x00,0x00,}},
- {0x5DDF,2,{0x8E,0x78,0x00,0x00,}},
- {0x5DE0,2,{0x8E,0x79,0x00,0x00,}},
- {0x5DE1,2,{0xD1,0xB2,0x00,0x00,}},
- {0x5DE2,2,{0xB3,0xB2,0x00,0x00,}},
- {0x5DE3,2,{0x8E,0x7A,0x00,0x00,}},
- {0x5DE4,2,{0x8E,0x7B,0x00,0x00,}},
- {0x5DE5,2,{0xB9,0xA4,0x00,0x00,}},
- {0x5DE6,2,{0xD7,0xF3,0x00,0x00,}},
- {0x5DE7,2,{0xC7,0xC9,0x00,0x00,}},
- {0x5DE8,2,{0xBE,0xDE,0x00,0x00,}},
- {0x5DE9,2,{0xB9,0xAE,0x00,0x00,}},
- {0x5DEA,2,{0x8E,0x7C,0x00,0x00,}},
- {0x5DEB,2,{0xCE,0xD7,0x00,0x00,}},
- {0x5DEC,2,{0x8E,0x7D,0x00,0x00,}},
- {0x5DED,2,{0x8E,0x7E,0x00,0x00,}},
- {0x5DEE,2,{0xB2,0xEE,0x00,0x00,}},
- {0x5DEF,2,{0xDB,0xCF,0x00,0x00,}},
- {0x5DF0,2,{0x8E,0x80,0x00,0x00,}},
- {0x5DF1,2,{0xBC,0xBA,0x00,0x00,}},
- {0x5DF2,2,{0xD2,0xD1,0x00,0x00,}},
- {0x5DF3,2,{0xCB,0xC8,0x00,0x00,}},
- {0x5DF4,2,{0xB0,0xCD,0x00,0x00,}},
- {0x5DF5,2,{0x8E,0x81,0x00,0x00,}},
- {0x5DF6,2,{0x8E,0x82,0x00,0x00,}},
- {0x5DF7,2,{0xCF,0xEF,0x00,0x00,}},
- {0x5DF8,2,{0x8E,0x83,0x00,0x00,}},
- {0x5DF9,2,{0x8E,0x84,0x00,0x00,}},
- {0x5DFA,2,{0x8E,0x85,0x00,0x00,}},
- {0x5DFB,2,{0x8E,0x86,0x00,0x00,}},
- {0x5DFC,2,{0x8E,0x87,0x00,0x00,}},
- {0x5DFD,2,{0xD9,0xE3,0x00,0x00,}},
- {0x5DFE,2,{0xBD,0xED,0x00,0x00,}},
- {0x5DFF,2,{0x8E,0x88,0x00,0x00,}},
- {0x5E00,2,{0x8E,0x89,0x00,0x00,}},
- {0x5E01,2,{0xB1,0xD2,0x00,0x00,}},
- {0x5E02,2,{0xCA,0xD0,0x00,0x00,}},
- {0x5E03,2,{0xB2,0xBC,0x00,0x00,}},
- {0x5E04,2,{0x8E,0x8A,0x00,0x00,}},
- {0x5E05,2,{0xCB,0xA7,0x00,0x00,}},
- {0x5E06,2,{0xB7,0xAB,0x00,0x00,}},
- {0x5E07,2,{0x8E,0x8B,0x00,0x00,}},
- {0x5E08,2,{0xCA,0xA6,0x00,0x00,}},
- {0x5E09,2,{0x8E,0x8C,0x00,0x00,}},
- {0x5E0A,2,{0x8E,0x8D,0x00,0x00,}},
- {0x5E0B,2,{0x8E,0x8E,0x00,0x00,}},
- {0x5E0C,2,{0xCF,0xA3,0x00,0x00,}},
- {0x5E0D,2,{0x8E,0x8F,0x00,0x00,}},
- {0x5E0E,2,{0x8E,0x90,0x00,0x00,}},
- {0x5E0F,2,{0xE0,0xF8,0x00,0x00,}},
- {0x5E10,2,{0xD5,0xCA,0x00,0x00,}},
- {0x5E11,2,{0xE0,0xFB,0x00,0x00,}},
- {0x5E12,2,{0x8E,0x91,0x00,0x00,}},
- {0x5E13,2,{0x8E,0x92,0x00,0x00,}},
- {0x5E14,2,{0xE0,0xFA,0x00,0x00,}},
- {0x5E15,2,{0xC5,0xC1,0x00,0x00,}},
- {0x5E16,2,{0xCC,0xFB,0x00,0x00,}},
- {0x5E17,2,{0x8E,0x93,0x00,0x00,}},
- {0x5E18,2,{0xC1,0xB1,0x00,0x00,}},
- {0x5E19,2,{0xE0,0xF9,0x00,0x00,}},
- {0x5E1A,2,{0xD6,0xE3,0x00,0x00,}},
- {0x5E1B,2,{0xB2,0xAF,0x00,0x00,}},
- {0x5E1C,2,{0xD6,0xC4,0x00,0x00,}},
- {0x5E1D,2,{0xB5,0xDB,0x00,0x00,}},
- {0x5E1E,2,{0x8E,0x94,0x00,0x00,}},
- {0x5E1F,2,{0x8E,0x95,0x00,0x00,}},
- {0x5E20,2,{0x8E,0x96,0x00,0x00,}},
- {0x5E21,2,{0x8E,0x97,0x00,0x00,}},
- {0x5E22,2,{0x8E,0x98,0x00,0x00,}},
- {0x5E23,2,{0x8E,0x99,0x00,0x00,}},
- {0x5E24,2,{0x8E,0x9A,0x00,0x00,}},
- {0x5E25,2,{0x8E,0x9B,0x00,0x00,}},
- {0x5E26,2,{0xB4,0xF8,0x00,0x00,}},
- {0x5E27,2,{0xD6,0xA1,0x00,0x00,}},
- {0x5E28,2,{0x8E,0x9C,0x00,0x00,}},
- {0x5E29,2,{0x8E,0x9D,0x00,0x00,}},
- {0x5E2A,2,{0x8E,0x9E,0x00,0x00,}},
- {0x5E2B,2,{0x8E,0x9F,0x00,0x00,}},
- {0x5E2C,2,{0x8E,0xA0,0x00,0x00,}},
- {0x5E2D,2,{0xCF,0xAF,0x00,0x00,}},
- {0x5E2E,2,{0xB0,0xEF,0x00,0x00,}},
- {0x5E2F,2,{0x8E,0xA1,0x00,0x00,}},
- {0x5E30,2,{0x8E,0xA2,0x00,0x00,}},
- {0x5E31,2,{0xE0,0xFC,0x00,0x00,}},
- {0x5E32,2,{0x8E,0xA3,0x00,0x00,}},
- {0x5E33,2,{0x8E,0xA4,0x00,0x00,}},
- {0x5E34,2,{0x8E,0xA5,0x00,0x00,}},
- {0x5E35,2,{0x8E,0xA6,0x00,0x00,}},
- {0x5E36,2,{0x8E,0xA7,0x00,0x00,}},
- {0x5E37,2,{0xE1,0xA1,0x00,0x00,}},
- {0x5E38,2,{0xB3,0xA3,0x00,0x00,}},
- {0x5E39,2,{0x8E,0xA8,0x00,0x00,}},
- {0x5E3A,2,{0x8E,0xA9,0x00,0x00,}},
- {0x5E3B,2,{0xE0,0xFD,0x00,0x00,}},
- {0x5E3C,2,{0xE0,0xFE,0x00,0x00,}},
- {0x5E3D,2,{0xC3,0xB1,0x00,0x00,}},
- {0x5E3E,2,{0x8E,0xAA,0x00,0x00,}},
- {0x5E3F,2,{0x8E,0xAB,0x00,0x00,}},
- {0x5E40,2,{0x8E,0xAC,0x00,0x00,}},
- {0x5E41,2,{0x8E,0xAD,0x00,0x00,}},
- {0x5E42,2,{0xC3,0xDD,0x00,0x00,}},
- {0x5E43,2,{0x8E,0xAE,0x00,0x00,}},
- {0x5E44,2,{0xE1,0xA2,0x00,0x00,}},
- {0x5E45,2,{0xB7,0xF9,0x00,0x00,}},
- {0x5E46,2,{0x8E,0xAF,0x00,0x00,}},
- {0x5E47,2,{0x8E,0xB0,0x00,0x00,}},
- {0x5E48,2,{0x8E,0xB1,0x00,0x00,}},
- {0x5E49,2,{0x8E,0xB2,0x00,0x00,}},
- {0x5E4A,2,{0x8E,0xB3,0x00,0x00,}},
- {0x5E4B,2,{0x8E,0xB4,0x00,0x00,}},
- {0x5E4C,2,{0xBB,0xCF,0x00,0x00,}},
- {0x5E4D,2,{0x8E,0xB5,0x00,0x00,}},
- {0x5E4E,2,{0x8E,0xB6,0x00,0x00,}},
- {0x5E4F,2,{0x8E,0xB7,0x00,0x00,}},
- {0x5E50,2,{0x8E,0xB8,0x00,0x00,}},
- {0x5E51,2,{0x8E,0xB9,0x00,0x00,}},
- {0x5E52,2,{0x8E,0xBA,0x00,0x00,}},
- {0x5E53,2,{0x8E,0xBB,0x00,0x00,}},
- {0x5E54,2,{0xE1,0xA3,0x00,0x00,}},
- {0x5E55,2,{0xC4,0xBB,0x00,0x00,}},
- {0x5E56,2,{0x8E,0xBC,0x00,0x00,}},
- {0x5E57,2,{0x8E,0xBD,0x00,0x00,}},
- {0x5E58,2,{0x8E,0xBE,0x00,0x00,}},
- {0x5E59,2,{0x8E,0xBF,0x00,0x00,}},
- {0x5E5A,2,{0x8E,0xC0,0x00,0x00,}},
- {0x5E5B,2,{0xE1,0xA4,0x00,0x00,}},
- {0x5E5C,2,{0x8E,0xC1,0x00,0x00,}},
- {0x5E5D,2,{0x8E,0xC2,0x00,0x00,}},
- {0x5E5E,2,{0xE1,0xA5,0x00,0x00,}},
- {0x5E5F,2,{0x8E,0xC3,0x00,0x00,}},
- {0x5E60,2,{0x8E,0xC4,0x00,0x00,}},
- {0x5E61,2,{0xE1,0xA6,0x00,0x00,}},
- {0x5E62,2,{0xB4,0xB1,0x00,0x00,}},
- {0x5E63,2,{0x8E,0xC5,0x00,0x00,}},
- {0x5E64,2,{0x8E,0xC6,0x00,0x00,}},
- {0x5E65,2,{0x8E,0xC7,0x00,0x00,}},
- {0x5E66,2,{0x8E,0xC8,0x00,0x00,}},
- {0x5E67,2,{0x8E,0xC9,0x00,0x00,}},
- {0x5E68,2,{0x8E,0xCA,0x00,0x00,}},
- {0x5E69,2,{0x8E,0xCB,0x00,0x00,}},
- {0x5E6A,2,{0x8E,0xCC,0x00,0x00,}},
- {0x5E6B,2,{0x8E,0xCD,0x00,0x00,}},
- {0x5E6C,2,{0x8E,0xCE,0x00,0x00,}},
- {0x5E6D,2,{0x8E,0xCF,0x00,0x00,}},
- {0x5E6E,2,{0x8E,0xD0,0x00,0x00,}},
- {0x5E6F,2,{0x8E,0xD1,0x00,0x00,}},
- {0x5E70,2,{0x8E,0xD2,0x00,0x00,}},
- {0x5E71,2,{0x8E,0xD3,0x00,0x00,}},
- {0x5E72,2,{0xB8,0xC9,0x00,0x00,}},
- {0x5E73,2,{0xC6,0xBD,0x00,0x00,}},
- {0x5E74,2,{0xC4,0xEA,0x00,0x00,}},
- {0x5E75,2,{0x8E,0xD4,0x00,0x00,}},
- {0x5E76,2,{0xB2,0xA2,0x00,0x00,}},
- {0x5E77,2,{0x8E,0xD5,0x00,0x00,}},
- {0x5E78,2,{0xD0,0xD2,0x00,0x00,}},
- {0x5E79,2,{0x8E,0xD6,0x00,0x00,}},
- {0x5E7A,2,{0xE7,0xDB,0x00,0x00,}},
- {0x5E7B,2,{0xBB,0xC3,0x00,0x00,}},
- {0x5E7C,2,{0xD3,0xD7,0x00,0x00,}},
- {0x5E7D,2,{0xD3,0xC4,0x00,0x00,}},
- {0x5E7E,2,{0x8E,0xD7,0x00,0x00,}},
- {0x5E7F,2,{0xB9,0xE3,0x00,0x00,}},
- {0x5E80,2,{0xE2,0xCF,0x00,0x00,}},
- {0x5E81,2,{0x8E,0xD8,0x00,0x00,}},
- {0x5E82,2,{0x8E,0xD9,0x00,0x00,}},
- {0x5E83,2,{0x8E,0xDA,0x00,0x00,}},
- {0x5E84,2,{0xD7,0xAF,0x00,0x00,}},
- {0x5E85,2,{0x8E,0xDB,0x00,0x00,}},
- {0x5E86,2,{0xC7,0xEC,0x00,0x00,}},
- {0x5E87,2,{0xB1,0xD3,0x00,0x00,}},
- {0x5E88,2,{0x8E,0xDC,0x00,0x00,}},
- {0x5E89,2,{0x8E,0xDD,0x00,0x00,}},
- {0x5E8A,2,{0xB4,0xB2,0x00,0x00,}},
- {0x5E8B,2,{0xE2,0xD1,0x00,0x00,}},
- {0x5E8C,2,{0x8E,0xDE,0x00,0x00,}},
- {0x5E8D,2,{0x8E,0xDF,0x00,0x00,}},
- {0x5E8E,2,{0x8E,0xE0,0x00,0x00,}},
- {0x5E8F,2,{0xD0,0xF2,0x00,0x00,}},
- {0x5E90,2,{0xC2,0xAE,0x00,0x00,}},
- {0x5E91,2,{0xE2,0xD0,0x00,0x00,}},
- {0x5E92,2,{0x8E,0xE1,0x00,0x00,}},
- {0x5E93,2,{0xBF,0xE2,0x00,0x00,}},
- {0x5E94,2,{0xD3,0xA6,0x00,0x00,}},
- {0x5E95,2,{0xB5,0xD7,0x00,0x00,}},
- {0x5E96,2,{0xE2,0xD2,0x00,0x00,}},
- {0x5E97,2,{0xB5,0xEA,0x00,0x00,}},
- {0x5E98,2,{0x8E,0xE2,0x00,0x00,}},
- {0x5E99,2,{0xC3,0xED,0x00,0x00,}},
- {0x5E9A,2,{0xB8,0xFD,0x00,0x00,}},
- {0x5E9B,2,{0x8E,0xE3,0x00,0x00,}},
- {0x5E9C,2,{0xB8,0xAE,0x00,0x00,}},
- {0x5E9D,2,{0x8E,0xE4,0x00,0x00,}},
- {0x5E9E,2,{0xC5,0xD3,0x00,0x00,}},
- {0x5E9F,2,{0xB7,0xCF,0x00,0x00,}},
- {0x5EA0,2,{0xE2,0xD4,0x00,0x00,}},
- {0x5EA1,2,{0x8E,0xE5,0x00,0x00,}},
- {0x5EA2,2,{0x8E,0xE6,0x00,0x00,}},
- {0x5EA3,2,{0x8E,0xE7,0x00,0x00,}},
- {0x5EA4,2,{0x8E,0xE8,0x00,0x00,}},
- {0x5EA5,2,{0xE2,0xD3,0x00,0x00,}},
- {0x5EA6,2,{0xB6,0xC8,0x00,0x00,}},
- {0x5EA7,2,{0xD7,0xF9,0x00,0x00,}},
- {0x5EA8,2,{0x8E,0xE9,0x00,0x00,}},
- {0x5EA9,2,{0x8E,0xEA,0x00,0x00,}},
- {0x5EAA,2,{0x8E,0xEB,0x00,0x00,}},
- {0x5EAB,2,{0x8E,0xEC,0x00,0x00,}},
- {0x5EAC,2,{0x8E,0xED,0x00,0x00,}},
- {0x5EAD,2,{0xCD,0xA5,0x00,0x00,}},
- {0x5EAE,2,{0x8E,0xEE,0x00,0x00,}},
- {0x5EAF,2,{0x8E,0xEF,0x00,0x00,}},
- {0x5EB0,2,{0x8E,0xF0,0x00,0x00,}},
- {0x5EB1,2,{0x8E,0xF1,0x00,0x00,}},
- {0x5EB2,2,{0x8E,0xF2,0x00,0x00,}},
- {0x5EB3,2,{0xE2,0xD8,0x00,0x00,}},
- {0x5EB4,2,{0x8E,0xF3,0x00,0x00,}},
- {0x5EB5,2,{0xE2,0xD6,0x00,0x00,}},
- {0x5EB6,2,{0xCA,0xFC,0x00,0x00,}},
- {0x5EB7,2,{0xBF,0xB5,0x00,0x00,}},
- {0x5EB8,2,{0xD3,0xB9,0x00,0x00,}},
- {0x5EB9,2,{0xE2,0xD5,0x00,0x00,}},
- {0x5EBA,2,{0x8E,0xF4,0x00,0x00,}},
- {0x5EBB,2,{0x8E,0xF5,0x00,0x00,}},
- {0x5EBC,2,{0x8E,0xF6,0x00,0x00,}},
- {0x5EBD,2,{0x8E,0xF7,0x00,0x00,}},
- {0x5EBE,2,{0xE2,0xD7,0x00,0x00,}},
- {0x5EBF,2,{0x8E,0xF8,0x00,0x00,}},
- {0x5EC0,2,{0x8E,0xF9,0x00,0x00,}},
- {0x5EC1,2,{0x8E,0xFA,0x00,0x00,}},
- {0x5EC2,2,{0x8E,0xFB,0x00,0x00,}},
- {0x5EC3,2,{0x8E,0xFC,0x00,0x00,}},
- {0x5EC4,2,{0x8E,0xFD,0x00,0x00,}},
- {0x5EC5,2,{0x8E,0xFE,0x00,0x00,}},
- {0x5EC6,2,{0x8F,0x40,0x00,0x00,}},
- {0x5EC7,2,{0x8F,0x41,0x00,0x00,}},
- {0x5EC8,2,{0x8F,0x42,0x00,0x00,}},
- {0x5EC9,2,{0xC1,0xAE,0x00,0x00,}},
- {0x5ECA,2,{0xC0,0xC8,0x00,0x00,}},
- {0x5ECB,2,{0x8F,0x43,0x00,0x00,}},
- {0x5ECC,2,{0x8F,0x44,0x00,0x00,}},
- {0x5ECD,2,{0x8F,0x45,0x00,0x00,}},
- {0x5ECE,2,{0x8F,0x46,0x00,0x00,}},
- {0x5ECF,2,{0x8F,0x47,0x00,0x00,}},
- {0x5ED0,2,{0x8F,0x48,0x00,0x00,}},
- {0x5ED1,2,{0xE2,0xDB,0x00,0x00,}},
- {0x5ED2,2,{0xE2,0xDA,0x00,0x00,}},
- {0x5ED3,2,{0xC0,0xAA,0x00,0x00,}},
- {0x5ED4,2,{0x8F,0x49,0x00,0x00,}},
- {0x5ED5,2,{0x8F,0x4A,0x00,0x00,}},
- {0x5ED6,2,{0xC1,0xCE,0x00,0x00,}},
- {0x5ED7,2,{0x8F,0x4B,0x00,0x00,}},
- {0x5ED8,2,{0x8F,0x4C,0x00,0x00,}},
- {0x5ED9,2,{0x8F,0x4D,0x00,0x00,}},
- {0x5EDA,2,{0x8F,0x4E,0x00,0x00,}},
- {0x5EDB,2,{0xE2,0xDC,0x00,0x00,}},
- {0x5EDC,2,{0x8F,0x4F,0x00,0x00,}},
- {0x5EDD,2,{0x8F,0x50,0x00,0x00,}},
- {0x5EDE,2,{0x8F,0x51,0x00,0x00,}},
- {0x5EDF,2,{0x8F,0x52,0x00,0x00,}},
- {0x5EE0,2,{0x8F,0x53,0x00,0x00,}},
- {0x5EE1,2,{0x8F,0x54,0x00,0x00,}},
- {0x5EE2,2,{0x8F,0x55,0x00,0x00,}},
- {0x5EE3,2,{0x8F,0x56,0x00,0x00,}},
- {0x5EE4,2,{0x8F,0x57,0x00,0x00,}},
- {0x5EE5,2,{0x8F,0x58,0x00,0x00,}},
- {0x5EE6,2,{0x8F,0x59,0x00,0x00,}},
- {0x5EE7,2,{0x8F,0x5A,0x00,0x00,}},
- {0x5EE8,2,{0xE2,0xDD,0x00,0x00,}},
- {0x5EE9,2,{0x8F,0x5B,0x00,0x00,}},
- {0x5EEA,2,{0xE2,0xDE,0x00,0x00,}},
- {0x5EEB,2,{0x8F,0x5C,0x00,0x00,}},
- {0x5EEC,2,{0x8F,0x5D,0x00,0x00,}},
- {0x5EED,2,{0x8F,0x5E,0x00,0x00,}},
- {0x5EEE,2,{0x8F,0x5F,0x00,0x00,}},
- {0x5EEF,2,{0x8F,0x60,0x00,0x00,}},
- {0x5EF0,2,{0x8F,0x61,0x00,0x00,}},
- {0x5EF1,2,{0x8F,0x62,0x00,0x00,}},
- {0x5EF2,2,{0x8F,0x63,0x00,0x00,}},
- {0x5EF3,2,{0x8F,0x64,0x00,0x00,}},
- {0x5EF4,2,{0xDB,0xC8,0x00,0x00,}},
- {0x5EF5,2,{0x8F,0x65,0x00,0x00,}},
- {0x5EF6,2,{0xD1,0xD3,0x00,0x00,}},
- {0x5EF7,2,{0xCD,0xA2,0x00,0x00,}},
- {0x5EF8,2,{0x8F,0x66,0x00,0x00,}},
- {0x5EF9,2,{0x8F,0x67,0x00,0x00,}},
- {0x5EFA,2,{0xBD,0xA8,0x00,0x00,}},
- {0x5EFB,2,{0x8F,0x68,0x00,0x00,}},
- {0x5EFC,2,{0x8F,0x69,0x00,0x00,}},
- {0x5EFD,2,{0x8F,0x6A,0x00,0x00,}},
- {0x5EFE,2,{0xDE,0xC3,0x00,0x00,}},
- {0x5EFF,2,{0xD8,0xA5,0x00,0x00,}},
- {0x5F00,2,{0xBF,0xAA,0x00,0x00,}},
- {0x5F01,2,{0xDB,0xCD,0x00,0x00,}},
- {0x5F02,2,{0xD2,0xEC,0x00,0x00,}},
- {0x5F03,2,{0xC6,0xFA,0x00,0x00,}},
- {0x5F04,2,{0xC5,0xAA,0x00,0x00,}},
- {0x5F05,2,{0x8F,0x6B,0x00,0x00,}},
- {0x5F06,2,{0x8F,0x6C,0x00,0x00,}},
- {0x5F07,2,{0x8F,0x6D,0x00,0x00,}},
- {0x5F08,2,{0xDE,0xC4,0x00,0x00,}},
- {0x5F09,2,{0x8F,0x6E,0x00,0x00,}},
- {0x5F0A,2,{0xB1,0xD7,0x00,0x00,}},
- {0x5F0B,2,{0xDF,0xAE,0x00,0x00,}},
- {0x5F0C,2,{0x8F,0x6F,0x00,0x00,}},
- {0x5F0D,2,{0x8F,0x70,0x00,0x00,}},
- {0x5F0E,2,{0x8F,0x71,0x00,0x00,}},
- {0x5F0F,2,{0xCA,0xBD,0x00,0x00,}},
- {0x5F10,2,{0x8F,0x72,0x00,0x00,}},
- {0x5F11,2,{0xDF,0xB1,0x00,0x00,}},
- {0x5F12,2,{0x8F,0x73,0x00,0x00,}},
- {0x5F13,2,{0xB9,0xAD,0x00,0x00,}},
- {0x5F14,2,{0x8F,0x74,0x00,0x00,}},
- {0x5F15,2,{0xD2,0xFD,0x00,0x00,}},
- {0x5F16,2,{0x8F,0x75,0x00,0x00,}},
- {0x5F17,2,{0xB8,0xA5,0x00,0x00,}},
- {0x5F18,2,{0xBA,0xEB,0x00,0x00,}},
- {0x5F19,2,{0x8F,0x76,0x00,0x00,}},
- {0x5F1A,2,{0x8F,0x77,0x00,0x00,}},
- {0x5F1B,2,{0xB3,0xDA,0x00,0x00,}},
- {0x5F1C,2,{0x8F,0x78,0x00,0x00,}},
- {0x5F1D,2,{0x8F,0x79,0x00,0x00,}},
- {0x5F1E,2,{0x8F,0x7A,0x00,0x00,}},
- {0x5F1F,2,{0xB5,0xDC,0x00,0x00,}},
- {0x5F20,2,{0xD5,0xC5,0x00,0x00,}},
- {0x5F21,2,{0x8F,0x7B,0x00,0x00,}},
- {0x5F22,2,{0x8F,0x7C,0x00,0x00,}},
- {0x5F23,2,{0x8F,0x7D,0x00,0x00,}},
- {0x5F24,2,{0x8F,0x7E,0x00,0x00,}},
- {0x5F25,2,{0xC3,0xD6,0x00,0x00,}},
- {0x5F26,2,{0xCF,0xD2,0x00,0x00,}},
- {0x5F27,2,{0xBB,0xA1,0x00,0x00,}},
- {0x5F28,2,{0x8F,0x80,0x00,0x00,}},
- {0x5F29,2,{0xE5,0xF3,0x00,0x00,}},
- {0x5F2A,2,{0xE5,0xF2,0x00,0x00,}},
- {0x5F2B,2,{0x8F,0x81,0x00,0x00,}},
- {0x5F2C,2,{0x8F,0x82,0x00,0x00,}},
- {0x5F2D,2,{0xE5,0xF4,0x00,0x00,}},
- {0x5F2E,2,{0x8F,0x83,0x00,0x00,}},
- {0x5F2F,2,{0xCD,0xE4,0x00,0x00,}},
- {0x5F30,2,{0x8F,0x84,0x00,0x00,}},
- {0x5F31,2,{0xC8,0xF5,0x00,0x00,}},
- {0x5F32,2,{0x8F,0x85,0x00,0x00,}},
- {0x5F33,2,{0x8F,0x86,0x00,0x00,}},
- {0x5F34,2,{0x8F,0x87,0x00,0x00,}},
- {0x5F35,2,{0x8F,0x88,0x00,0x00,}},
- {0x5F36,2,{0x8F,0x89,0x00,0x00,}},
- {0x5F37,2,{0x8F,0x8A,0x00,0x00,}},
- {0x5F38,2,{0x8F,0x8B,0x00,0x00,}},
- {0x5F39,2,{0xB5,0xAF,0x00,0x00,}},
- {0x5F3A,2,{0xC7,0xBF,0x00,0x00,}},
- {0x5F3B,2,{0x8F,0x8C,0x00,0x00,}},
- {0x5F3C,2,{0xE5,0xF6,0x00,0x00,}},
- {0x5F3D,2,{0x8F,0x8D,0x00,0x00,}},
- {0x5F3E,2,{0x8F,0x8E,0x00,0x00,}},
- {0x5F3F,2,{0x8F,0x8F,0x00,0x00,}},
- {0x5F40,2,{0xEC,0xB0,0x00,0x00,}},
- {0x5F41,2,{0x8F,0x90,0x00,0x00,}},
- {0x5F42,2,{0x8F,0x91,0x00,0x00,}},
- {0x5F43,2,{0x8F,0x92,0x00,0x00,}},
- {0x5F44,2,{0x8F,0x93,0x00,0x00,}},
- {0x5F45,2,{0x8F,0x94,0x00,0x00,}},
- {0x5F46,2,{0x8F,0x95,0x00,0x00,}},
- {0x5F47,2,{0x8F,0x96,0x00,0x00,}},
- {0x5F48,2,{0x8F,0x97,0x00,0x00,}},
- {0x5F49,2,{0x8F,0x98,0x00,0x00,}},
- {0x5F4A,2,{0x8F,0x99,0x00,0x00,}},
- {0x5F4B,2,{0x8F,0x9A,0x00,0x00,}},
- {0x5F4C,2,{0x8F,0x9B,0x00,0x00,}},
- {0x5F4D,2,{0x8F,0x9C,0x00,0x00,}},
- {0x5F4E,2,{0x8F,0x9D,0x00,0x00,}},
- {0x5F4F,2,{0x8F,0x9E,0x00,0x00,}},
- {0x5F50,2,{0xE5,0xE6,0x00,0x00,}},
- {0x5F51,2,{0x8F,0x9F,0x00,0x00,}},
- {0x5F52,2,{0xB9,0xE9,0x00,0x00,}},
- {0x5F53,2,{0xB5,0xB1,0x00,0x00,}},
- {0x5F54,2,{0x8F,0xA0,0x00,0x00,}},
- {0x5F55,2,{0xC2,0xBC,0x00,0x00,}},
- {0x5F56,2,{0xE5,0xE8,0x00,0x00,}},
- {0x5F57,2,{0xE5,0xE7,0x00,0x00,}},
- {0x5F58,2,{0xE5,0xE9,0x00,0x00,}},
- {0x5F59,2,{0x8F,0xA1,0x00,0x00,}},
- {0x5F5A,2,{0x8F,0xA2,0x00,0x00,}},
- {0x5F5B,2,{0x8F,0xA3,0x00,0x00,}},
- {0x5F5C,2,{0x8F,0xA4,0x00,0x00,}},
- {0x5F5D,2,{0xD2,0xCD,0x00,0x00,}},
- {0x5F5E,2,{0x8F,0xA5,0x00,0x00,}},
- {0x5F5F,2,{0x8F,0xA6,0x00,0x00,}},
- {0x5F60,2,{0x8F,0xA7,0x00,0x00,}},
- {0x5F61,2,{0xE1,0xEA,0x00,0x00,}},
- {0x5F62,2,{0xD0,0xCE,0x00,0x00,}},
- {0x5F63,2,{0x8F,0xA8,0x00,0x00,}},
- {0x5F64,2,{0xCD,0xAE,0x00,0x00,}},
- {0x5F65,2,{0x8F,0xA9,0x00,0x00,}},
- {0x5F66,2,{0xD1,0xE5,0x00,0x00,}},
- {0x5F67,2,{0x8F,0xAA,0x00,0x00,}},
- {0x5F68,2,{0x8F,0xAB,0x00,0x00,}},
- {0x5F69,2,{0xB2,0xCA,0x00,0x00,}},
- {0x5F6A,2,{0xB1,0xEB,0x00,0x00,}},
- {0x5F6B,2,{0x8F,0xAC,0x00,0x00,}},
- {0x5F6C,2,{0xB1,0xF2,0x00,0x00,}},
- {0x5F6D,2,{0xC5,0xED,0x00,0x00,}},
- {0x5F6E,2,{0x8F,0xAD,0x00,0x00,}},
- {0x5F6F,2,{0x8F,0xAE,0x00,0x00,}},
- {0x5F70,2,{0xD5,0xC3,0x00,0x00,}},
- {0x5F71,2,{0xD3,0xB0,0x00,0x00,}},
- {0x5F72,2,{0x8F,0xAF,0x00,0x00,}},
- {0x5F73,2,{0xE1,0xDC,0x00,0x00,}},
- {0x5F74,2,{0x8F,0xB0,0x00,0x00,}},
- {0x5F75,2,{0x8F,0xB1,0x00,0x00,}},
- {0x5F76,2,{0x8F,0xB2,0x00,0x00,}},
- {0x5F77,2,{0xE1,0xDD,0x00,0x00,}},
- {0x5F78,2,{0x8F,0xB3,0x00,0x00,}},
- {0x5F79,2,{0xD2,0xDB,0x00,0x00,}},
- {0x5F7A,2,{0x8F,0xB4,0x00,0x00,}},
- {0x5F7B,2,{0xB3,0xB9,0x00,0x00,}},
- {0x5F7C,2,{0xB1,0xCB,0x00,0x00,}},
- {0x5F7D,2,{0x8F,0xB5,0x00,0x00,}},
- {0x5F7E,2,{0x8F,0xB6,0x00,0x00,}},
- {0x5F7F,2,{0x8F,0xB7,0x00,0x00,}},
- {0x5F80,2,{0xCD,0xF9,0x00,0x00,}},
- {0x5F81,2,{0xD5,0xF7,0x00,0x00,}},
- {0x5F82,2,{0xE1,0xDE,0x00,0x00,}},
- {0x5F83,2,{0x8F,0xB8,0x00,0x00,}},
- {0x5F84,2,{0xBE,0xB6,0x00,0x00,}},
- {0x5F85,2,{0xB4,0xFD,0x00,0x00,}},
- {0x5F86,2,{0x8F,0xB9,0x00,0x00,}},
- {0x5F87,2,{0xE1,0xDF,0x00,0x00,}},
- {0x5F88,2,{0xBA,0xDC,0x00,0x00,}},
- {0x5F89,2,{0xE1,0xE0,0x00,0x00,}},
- {0x5F8A,2,{0xBB,0xB2,0x00,0x00,}},
- {0x5F8B,2,{0xC2,0xC9,0x00,0x00,}},
- {0x5F8C,2,{0xE1,0xE1,0x00,0x00,}},
- {0x5F8D,2,{0x8F,0xBA,0x00,0x00,}},
- {0x5F8E,2,{0x8F,0xBB,0x00,0x00,}},
- {0x5F8F,2,{0x8F,0xBC,0x00,0x00,}},
- {0x5F90,2,{0xD0,0xEC,0x00,0x00,}},
- {0x5F91,2,{0x8F,0xBD,0x00,0x00,}},
- {0x5F92,2,{0xCD,0xBD,0x00,0x00,}},
- {0x5F93,2,{0x8F,0xBE,0x00,0x00,}},
- {0x5F94,2,{0x8F,0xBF,0x00,0x00,}},
- {0x5F95,2,{0xE1,0xE2,0x00,0x00,}},
- {0x5F96,2,{0x8F,0xC0,0x00,0x00,}},
- {0x5F97,2,{0xB5,0xC3,0x00,0x00,}},
- {0x5F98,2,{0xC5,0xC7,0x00,0x00,}},
- {0x5F99,2,{0xE1,0xE3,0x00,0x00,}},
- {0x5F9A,2,{0x8F,0xC1,0x00,0x00,}},
- {0x5F9B,2,{0x8F,0xC2,0x00,0x00,}},
- {0x5F9C,2,{0xE1,0xE4,0x00,0x00,}},
- {0x5F9D,2,{0x8F,0xC3,0x00,0x00,}},
- {0x5F9E,2,{0x8F,0xC4,0x00,0x00,}},
- {0x5F9F,2,{0x8F,0xC5,0x00,0x00,}},
- {0x5FA0,2,{0x8F,0xC6,0x00,0x00,}},
- {0x5FA1,2,{0xD3,0xF9,0x00,0x00,}},
- {0x5FA2,2,{0x8F,0xC7,0x00,0x00,}},
- {0x5FA3,2,{0x8F,0xC8,0x00,0x00,}},
- {0x5FA4,2,{0x8F,0xC9,0x00,0x00,}},
- {0x5FA5,2,{0x8F,0xCA,0x00,0x00,}},
- {0x5FA6,2,{0x8F,0xCB,0x00,0x00,}},
- {0x5FA7,2,{0x8F,0xCC,0x00,0x00,}},
- {0x5FA8,2,{0xE1,0xE5,0x00,0x00,}},
- {0x5FA9,2,{0x8F,0xCD,0x00,0x00,}},
- {0x5FAA,2,{0xD1,0xAD,0x00,0x00,}},
- {0x5FAB,2,{0x8F,0xCE,0x00,0x00,}},
- {0x5FAC,2,{0x8F,0xCF,0x00,0x00,}},
- {0x5FAD,2,{0xE1,0xE6,0x00,0x00,}},
- {0x5FAE,2,{0xCE,0xA2,0x00,0x00,}},
- {0x5FAF,2,{0x8F,0xD0,0x00,0x00,}},
- {0x5FB0,2,{0x8F,0xD1,0x00,0x00,}},
- {0x5FB1,2,{0x8F,0xD2,0x00,0x00,}},
- {0x5FB2,2,{0x8F,0xD3,0x00,0x00,}},
- {0x5FB3,2,{0x8F,0xD4,0x00,0x00,}},
- {0x5FB4,2,{0x8F,0xD5,0x00,0x00,}},
- {0x5FB5,2,{0xE1,0xE7,0x00,0x00,}},
- {0x5FB6,2,{0x8F,0xD6,0x00,0x00,}},
- {0x5FB7,2,{0xB5,0xC2,0x00,0x00,}},
- {0x5FB8,2,{0x8F,0xD7,0x00,0x00,}},
- {0x5FB9,2,{0x8F,0xD8,0x00,0x00,}},
- {0x5FBA,2,{0x8F,0xD9,0x00,0x00,}},
- {0x5FBB,2,{0x8F,0xDA,0x00,0x00,}},
- {0x5FBC,2,{0xE1,0xE8,0x00,0x00,}},
- {0x5FBD,2,{0xBB,0xD5,0x00,0x00,}},
- {0x5FBE,2,{0x8F,0xDB,0x00,0x00,}},
- {0x5FBF,2,{0x8F,0xDC,0x00,0x00,}},
- {0x5FC0,2,{0x8F,0xDD,0x00,0x00,}},
- {0x5FC1,2,{0x8F,0xDE,0x00,0x00,}},
- {0x5FC2,2,{0x8F,0xDF,0x00,0x00,}},
- {0x5FC3,2,{0xD0,0xC4,0x00,0x00,}},
- {0x5FC4,2,{0xE2,0xE0,0x00,0x00,}},
- {0x5FC5,2,{0xB1,0xD8,0x00,0x00,}},
- {0x5FC6,2,{0xD2,0xE4,0x00,0x00,}},
- {0x5FC7,2,{0x8F,0xE0,0x00,0x00,}},
- {0x5FC8,2,{0x8F,0xE1,0x00,0x00,}},
- {0x5FC9,2,{0xE2,0xE1,0x00,0x00,}},
- {0x5FCA,2,{0x8F,0xE2,0x00,0x00,}},
- {0x5FCB,2,{0x8F,0xE3,0x00,0x00,}},
- {0x5FCC,2,{0xBC,0xC9,0x00,0x00,}},
- {0x5FCD,2,{0xC8,0xCC,0x00,0x00,}},
- {0x5FCE,2,{0x8F,0xE4,0x00,0x00,}},
- {0x5FCF,2,{0xE2,0xE3,0x00,0x00,}},
- {0x5FD0,2,{0xEC,0xFE,0x00,0x00,}},
- {0x5FD1,2,{0xEC,0xFD,0x00,0x00,}},
- {0x5FD2,2,{0xDF,0xAF,0x00,0x00,}},
- {0x5FD3,2,{0x8F,0xE5,0x00,0x00,}},
- {0x5FD4,2,{0x8F,0xE6,0x00,0x00,}},
- {0x5FD5,2,{0x8F,0xE7,0x00,0x00,}},
- {0x5FD6,2,{0xE2,0xE2,0x00,0x00,}},
- {0x5FD7,2,{0xD6,0xBE,0x00,0x00,}},
- {0x5FD8,2,{0xCD,0xFC,0x00,0x00,}},
- {0x5FD9,2,{0xC3,0xA6,0x00,0x00,}},
- {0x5FDA,2,{0x8F,0xE8,0x00,0x00,}},
- {0x5FDB,2,{0x8F,0xE9,0x00,0x00,}},
- {0x5FDC,2,{0x8F,0xEA,0x00,0x00,}},
- {0x5FDD,2,{0xE3,0xC3,0x00,0x00,}},
- {0x5FDE,2,{0x8F,0xEB,0x00,0x00,}},
- {0x5FDF,2,{0x8F,0xEC,0x00,0x00,}},
- {0x5FE0,2,{0xD6,0xD2,0x00,0x00,}},
- {0x5FE1,2,{0xE2,0xE7,0x00,0x00,}},
- {0x5FE2,2,{0x8F,0xED,0x00,0x00,}},
- {0x5FE3,2,{0x8F,0xEE,0x00,0x00,}},
- {0x5FE4,2,{0xE2,0xE8,0x00,0x00,}},
- {0x5FE5,2,{0x8F,0xEF,0x00,0x00,}},
- {0x5FE6,2,{0x8F,0xF0,0x00,0x00,}},
- {0x5FE7,2,{0xD3,0xC7,0x00,0x00,}},
- {0x5FE8,2,{0x8F,0xF1,0x00,0x00,}},
- {0x5FE9,2,{0x8F,0xF2,0x00,0x00,}},
- {0x5FEA,2,{0xE2,0xEC,0x00,0x00,}},
- {0x5FEB,2,{0xBF,0xEC,0x00,0x00,}},
- {0x5FEC,2,{0x8F,0xF3,0x00,0x00,}},
- {0x5FED,2,{0xE2,0xED,0x00,0x00,}},
- {0x5FEE,2,{0xE2,0xE5,0x00,0x00,}},
- {0x5FEF,2,{0x8F,0xF4,0x00,0x00,}},
- {0x5FF0,2,{0x8F,0xF5,0x00,0x00,}},
- {0x5FF1,2,{0xB3,0xC0,0x00,0x00,}},
- {0x5FF2,2,{0x8F,0xF6,0x00,0x00,}},
- {0x5FF3,2,{0x8F,0xF7,0x00,0x00,}},
- {0x5FF4,2,{0x8F,0xF8,0x00,0x00,}},
- {0x5FF5,2,{0xC4,0xEE,0x00,0x00,}},
- {0x5FF6,2,{0x8F,0xF9,0x00,0x00,}},
- {0x5FF7,2,{0x8F,0xFA,0x00,0x00,}},
- {0x5FF8,2,{0xE2,0xEE,0x00,0x00,}},
- {0x5FF9,2,{0x8F,0xFB,0x00,0x00,}},
- {0x5FFA,2,{0x8F,0xFC,0x00,0x00,}},
- {0x5FFB,2,{0xD0,0xC3,0x00,0x00,}},
- {0x5FFC,2,{0x8F,0xFD,0x00,0x00,}},
- {0x5FFD,2,{0xBA,0xF6,0x00,0x00,}},
- {0x5FFE,2,{0xE2,0xE9,0x00,0x00,}},
- {0x5FFF,2,{0xB7,0xDE,0x00,0x00,}},
- {0x6000,2,{0xBB,0xB3,0x00,0x00,}},
- {0x6001,2,{0xCC,0xAC,0x00,0x00,}},
- {0x6002,2,{0xCB,0xCB,0x00,0x00,}},
- {0x6003,2,{0xE2,0xE4,0x00,0x00,}},
- {0x6004,2,{0xE2,0xE6,0x00,0x00,}},
- {0x6005,2,{0xE2,0xEA,0x00,0x00,}},
- {0x6006,2,{0xE2,0xEB,0x00,0x00,}},
- {0x6007,2,{0x8F,0xFE,0x00,0x00,}},
- {0x6008,2,{0x90,0x40,0x00,0x00,}},
- {0x6009,2,{0x90,0x41,0x00,0x00,}},
- {0x600A,2,{0xE2,0xF7,0x00,0x00,}},
- {0x600B,2,{0x90,0x42,0x00,0x00,}},
- {0x600C,2,{0x90,0x43,0x00,0x00,}},
- {0x600D,2,{0xE2,0xF4,0x00,0x00,}},
- {0x600E,2,{0xD4,0xF5,0x00,0x00,}},
- {0x600F,2,{0xE2,0xF3,0x00,0x00,}},
- {0x6010,2,{0x90,0x44,0x00,0x00,}},
- {0x6011,2,{0x90,0x45,0x00,0x00,}},
- {0x6012,2,{0xC5,0xAD,0x00,0x00,}},
- {0x6013,2,{0x90,0x46,0x00,0x00,}},
- {0x6014,2,{0xD5,0xFA,0x00,0x00,}},
- {0x6015,2,{0xC5,0xC2,0x00,0x00,}},
- {0x6016,2,{0xB2,0xC0,0x00,0x00,}},
- {0x6017,2,{0x90,0x47,0x00,0x00,}},
- {0x6018,2,{0x90,0x48,0x00,0x00,}},
- {0x6019,2,{0xE2,0xEF,0x00,0x00,}},
- {0x601A,2,{0x90,0x49,0x00,0x00,}},
- {0x601B,2,{0xE2,0xF2,0x00,0x00,}},
- {0x601C,2,{0xC1,0xAF,0x00,0x00,}},
- {0x601D,2,{0xCB,0xBC,0x00,0x00,}},
- {0x601E,2,{0x90,0x4A,0x00,0x00,}},
- {0x601F,2,{0x90,0x4B,0x00,0x00,}},
- {0x6020,2,{0xB5,0xA1,0x00,0x00,}},
- {0x6021,2,{0xE2,0xF9,0x00,0x00,}},
- {0x6022,2,{0x90,0x4C,0x00,0x00,}},
- {0x6023,2,{0x90,0x4D,0x00,0x00,}},
- {0x6024,2,{0x90,0x4E,0x00,0x00,}},
- {0x6025,2,{0xBC,0xB1,0x00,0x00,}},
- {0x6026,2,{0xE2,0xF1,0x00,0x00,}},
- {0x6027,2,{0xD0,0xD4,0x00,0x00,}},
- {0x6028,2,{0xD4,0xB9,0x00,0x00,}},
- {0x6029,2,{0xE2,0xF5,0x00,0x00,}},
- {0x602A,2,{0xB9,0xD6,0x00,0x00,}},
- {0x602B,2,{0xE2,0xF6,0x00,0x00,}},
- {0x602C,2,{0x90,0x4F,0x00,0x00,}},
- {0x602D,2,{0x90,0x50,0x00,0x00,}},
- {0x602E,2,{0x90,0x51,0x00,0x00,}},
- {0x602F,2,{0xC7,0xD3,0x00,0x00,}},
- {0x6030,2,{0x90,0x52,0x00,0x00,}},
- {0x6031,2,{0x90,0x53,0x00,0x00,}},
- {0x6032,2,{0x90,0x54,0x00,0x00,}},
- {0x6033,2,{0x90,0x55,0x00,0x00,}},
- {0x6034,2,{0x90,0x56,0x00,0x00,}},
- {0x6035,2,{0xE2,0xF0,0x00,0x00,}},
- {0x6036,2,{0x90,0x57,0x00,0x00,}},
- {0x6037,2,{0x90,0x58,0x00,0x00,}},
- {0x6038,2,{0x90,0x59,0x00,0x00,}},
- {0x6039,2,{0x90,0x5A,0x00,0x00,}},
- {0x603A,2,{0x90,0x5B,0x00,0x00,}},
- {0x603B,2,{0xD7,0xDC,0x00,0x00,}},
- {0x603C,2,{0xED,0xA1,0x00,0x00,}},
- {0x603D,2,{0x90,0x5C,0x00,0x00,}},
- {0x603E,2,{0x90,0x5D,0x00,0x00,}},
- {0x603F,2,{0xE2,0xF8,0x00,0x00,}},
- {0x6040,2,{0x90,0x5E,0x00,0x00,}},
- {0x6041,2,{0xED,0xA5,0x00,0x00,}},
- {0x6042,2,{0xE2,0xFE,0x00,0x00,}},
- {0x6043,2,{0xCA,0xD1,0x00,0x00,}},
- {0x6044,2,{0x90,0x5F,0x00,0x00,}},
- {0x6045,2,{0x90,0x60,0x00,0x00,}},
- {0x6046,2,{0x90,0x61,0x00,0x00,}},
- {0x6047,2,{0x90,0x62,0x00,0x00,}},
- {0x6048,2,{0x90,0x63,0x00,0x00,}},
- {0x6049,2,{0x90,0x64,0x00,0x00,}},
- {0x604A,2,{0x90,0x65,0x00,0x00,}},
- {0x604B,2,{0xC1,0xB5,0x00,0x00,}},
- {0x604C,2,{0x90,0x66,0x00,0x00,}},
- {0x604D,2,{0xBB,0xD0,0x00,0x00,}},
- {0x604E,2,{0x90,0x67,0x00,0x00,}},
- {0x604F,2,{0x90,0x68,0x00,0x00,}},
- {0x6050,2,{0xBF,0xD6,0x00,0x00,}},
- {0x6051,2,{0x90,0x69,0x00,0x00,}},
- {0x6052,2,{0xBA,0xE3,0x00,0x00,}},
- {0x6053,2,{0x90,0x6A,0x00,0x00,}},
- {0x6054,2,{0x90,0x6B,0x00,0x00,}},
- {0x6055,2,{0xCB,0xA1,0x00,0x00,}},
- {0x6056,2,{0x90,0x6C,0x00,0x00,}},
- {0x6057,2,{0x90,0x6D,0x00,0x00,}},
- {0x6058,2,{0x90,0x6E,0x00,0x00,}},
- {0x6059,2,{0xED,0xA6,0x00,0x00,}},
- {0x605A,2,{0xED,0xA3,0x00,0x00,}},
- {0x605B,2,{0x90,0x6F,0x00,0x00,}},
- {0x605C,2,{0x90,0x70,0x00,0x00,}},
- {0x605D,2,{0xED,0xA2,0x00,0x00,}},
- {0x605E,2,{0x90,0x71,0x00,0x00,}},
- {0x605F,2,{0x90,0x72,0x00,0x00,}},
- {0x6060,2,{0x90,0x73,0x00,0x00,}},
- {0x6061,2,{0x90,0x74,0x00,0x00,}},
- {0x6062,2,{0xBB,0xD6,0x00,0x00,}},
- {0x6063,2,{0xED,0xA7,0x00,0x00,}},
- {0x6064,2,{0xD0,0xF4,0x00,0x00,}},
- {0x6065,2,{0x90,0x75,0x00,0x00,}},
- {0x6066,2,{0x90,0x76,0x00,0x00,}},
- {0x6067,2,{0xED,0xA4,0x00,0x00,}},
- {0x6068,2,{0xBA,0xDE,0x00,0x00,}},
- {0x6069,2,{0xB6,0xF7,0x00,0x00,}},
- {0x606A,2,{0xE3,0xA1,0x00,0x00,}},
- {0x606B,2,{0xB6,0xB2,0x00,0x00,}},
- {0x606C,2,{0xCC,0xF1,0x00,0x00,}},
- {0x606D,2,{0xB9,0xA7,0x00,0x00,}},
- {0x606E,2,{0x90,0x77,0x00,0x00,}},
- {0x606F,2,{0xCF,0xA2,0x00,0x00,}},
- {0x6070,2,{0xC7,0xA1,0x00,0x00,}},
- {0x6071,2,{0x90,0x78,0x00,0x00,}},
- {0x6072,2,{0x90,0x79,0x00,0x00,}},
- {0x6073,2,{0xBF,0xD2,0x00,0x00,}},
- {0x6074,2,{0x90,0x7A,0x00,0x00,}},
- {0x6075,2,{0x90,0x7B,0x00,0x00,}},
- {0x6076,2,{0xB6,0xF1,0x00,0x00,}},
- {0x6077,2,{0x90,0x7C,0x00,0x00,}},
- {0x6078,2,{0xE2,0xFA,0x00,0x00,}},
- {0x6079,2,{0xE2,0xFB,0x00,0x00,}},
- {0x607A,2,{0xE2,0xFD,0x00,0x00,}},
- {0x607B,2,{0xE2,0xFC,0x00,0x00,}},
- {0x607C,2,{0xC4,0xD5,0x00,0x00,}},
- {0x607D,2,{0xE3,0xA2,0x00,0x00,}},
- {0x607E,2,{0x90,0x7D,0x00,0x00,}},
- {0x607F,2,{0xD3,0xC1,0x00,0x00,}},
- {0x6080,2,{0x90,0x7E,0x00,0x00,}},
- {0x6081,2,{0x90,0x80,0x00,0x00,}},
- {0x6082,2,{0x90,0x81,0x00,0x00,}},
- {0x6083,2,{0xE3,0xA7,0x00,0x00,}},
- {0x6084,2,{0xC7,0xC4,0x00,0x00,}},
- {0x6085,2,{0x90,0x82,0x00,0x00,}},
- {0x6086,2,{0x90,0x83,0x00,0x00,}},
- {0x6087,2,{0x90,0x84,0x00,0x00,}},
- {0x6088,2,{0x90,0x85,0x00,0x00,}},
- {0x6089,2,{0xCF,0xA4,0x00,0x00,}},
- {0x608A,2,{0x90,0x86,0x00,0x00,}},
- {0x608B,2,{0x90,0x87,0x00,0x00,}},
- {0x608C,2,{0xE3,0xA9,0x00,0x00,}},
- {0x608D,2,{0xBA,0xB7,0x00,0x00,}},
- {0x608E,2,{0x90,0x88,0x00,0x00,}},
- {0x608F,2,{0x90,0x89,0x00,0x00,}},
- {0x6090,2,{0x90,0x8A,0x00,0x00,}},
- {0x6091,2,{0x90,0x8B,0x00,0x00,}},
- {0x6092,2,{0xE3,0xA8,0x00,0x00,}},
- {0x6093,2,{0x90,0x8C,0x00,0x00,}},
- {0x6094,2,{0xBB,0xDA,0x00,0x00,}},
- {0x6095,2,{0x90,0x8D,0x00,0x00,}},
- {0x6096,2,{0xE3,0xA3,0x00,0x00,}},
- {0x6097,2,{0x90,0x8E,0x00,0x00,}},
- {0x6098,2,{0x90,0x8F,0x00,0x00,}},
- {0x6099,2,{0x90,0x90,0x00,0x00,}},
- {0x609A,2,{0xE3,0xA4,0x00,0x00,}},
- {0x609B,2,{0xE3,0xAA,0x00,0x00,}},
- {0x609C,2,{0x90,0x91,0x00,0x00,}},
- {0x609D,2,{0xE3,0xA6,0x00,0x00,}},
- {0x609E,2,{0x90,0x92,0x00,0x00,}},
- {0x609F,2,{0xCE,0xF2,0x00,0x00,}},
- {0x60A0,2,{0xD3,0xC6,0x00,0x00,}},
- {0x60A1,2,{0x90,0x93,0x00,0x00,}},
- {0x60A2,2,{0x90,0x94,0x00,0x00,}},
- {0x60A3,2,{0xBB,0xBC,0x00,0x00,}},
- {0x60A4,2,{0x90,0x95,0x00,0x00,}},
- {0x60A5,2,{0x90,0x96,0x00,0x00,}},
- {0x60A6,2,{0xD4,0xC3,0x00,0x00,}},
- {0x60A7,2,{0x90,0x97,0x00,0x00,}},
- {0x60A8,2,{0xC4,0xFA,0x00,0x00,}},
- {0x60A9,2,{0x90,0x98,0x00,0x00,}},
- {0x60AA,2,{0x90,0x99,0x00,0x00,}},
- {0x60AB,2,{0xED,0xA8,0x00,0x00,}},
- {0x60AC,2,{0xD0,0xFC,0x00,0x00,}},
- {0x60AD,2,{0xE3,0xA5,0x00,0x00,}},
- {0x60AE,2,{0x90,0x9A,0x00,0x00,}},
- {0x60AF,2,{0xC3,0xF5,0x00,0x00,}},
- {0x60B0,2,{0x90,0x9B,0x00,0x00,}},
- {0x60B1,2,{0xE3,0xAD,0x00,0x00,}},
- {0x60B2,2,{0xB1,0xAF,0x00,0x00,}},
- {0x60B3,2,{0x90,0x9C,0x00,0x00,}},
- {0x60B4,2,{0xE3,0xB2,0x00,0x00,}},
- {0x60B5,2,{0x90,0x9D,0x00,0x00,}},
- {0x60B6,2,{0x90,0x9E,0x00,0x00,}},
- {0x60B7,2,{0x90,0x9F,0x00,0x00,}},
- {0x60B8,2,{0xBC,0xC2,0x00,0x00,}},
- {0x60B9,2,{0x90,0xA0,0x00,0x00,}},
- {0x60BA,2,{0x90,0xA1,0x00,0x00,}},
- {0x60BB,2,{0xE3,0xAC,0x00,0x00,}},
- {0x60BC,2,{0xB5,0xBF,0x00,0x00,}},
- {0x60BD,2,{0x90,0xA2,0x00,0x00,}},
- {0x60BE,2,{0x90,0xA3,0x00,0x00,}},
- {0x60BF,2,{0x90,0xA4,0x00,0x00,}},
- {0x60C0,2,{0x90,0xA5,0x00,0x00,}},
- {0x60C1,2,{0x90,0xA6,0x00,0x00,}},
- {0x60C2,2,{0x90,0xA7,0x00,0x00,}},
- {0x60C3,2,{0x90,0xA8,0x00,0x00,}},
- {0x60C4,2,{0x90,0xA9,0x00,0x00,}},
- {0x60C5,2,{0xC7,0xE9,0x00,0x00,}},
- {0x60C6,2,{0xE3,0xB0,0x00,0x00,}},
- {0x60C7,2,{0x90,0xAA,0x00,0x00,}},
- {0x60C8,2,{0x90,0xAB,0x00,0x00,}},
- {0x60C9,2,{0x90,0xAC,0x00,0x00,}},
- {0x60CA,2,{0xBE,0xAA,0x00,0x00,}},
- {0x60CB,2,{0xCD,0xEF,0x00,0x00,}},
- {0x60CC,2,{0x90,0xAD,0x00,0x00,}},
- {0x60CD,2,{0x90,0xAE,0x00,0x00,}},
- {0x60CE,2,{0x90,0xAF,0x00,0x00,}},
- {0x60CF,2,{0x90,0xB0,0x00,0x00,}},
- {0x60D0,2,{0x90,0xB1,0x00,0x00,}},
- {0x60D1,2,{0xBB,0xF3,0x00,0x00,}},
- {0x60D2,2,{0x90,0xB2,0x00,0x00,}},
- {0x60D3,2,{0x90,0xB3,0x00,0x00,}},
- {0x60D4,2,{0x90,0xB4,0x00,0x00,}},
- {0x60D5,2,{0xCC,0xE8,0x00,0x00,}},
- {0x60D6,2,{0x90,0xB5,0x00,0x00,}},
- {0x60D7,2,{0x90,0xB6,0x00,0x00,}},
- {0x60D8,2,{0xE3,0xAF,0x00,0x00,}},
- {0x60D9,2,{0x90,0xB7,0x00,0x00,}},
- {0x60DA,2,{0xE3,0xB1,0x00,0x00,}},
- {0x60DB,2,{0x90,0xB8,0x00,0x00,}},
- {0x60DC,2,{0xCF,0xA7,0x00,0x00,}},
- {0x60DD,2,{0xE3,0xAE,0x00,0x00,}},
- {0x60DE,2,{0x90,0xB9,0x00,0x00,}},
- {0x60DF,2,{0xCE,0xA9,0x00,0x00,}},
- {0x60E0,2,{0xBB,0xDD,0x00,0x00,}},
- {0x60E1,2,{0x90,0xBA,0x00,0x00,}},
- {0x60E2,2,{0x90,0xBB,0x00,0x00,}},
- {0x60E3,2,{0x90,0xBC,0x00,0x00,}},
- {0x60E4,2,{0x90,0xBD,0x00,0x00,}},
- {0x60E5,2,{0x90,0xBE,0x00,0x00,}},
- {0x60E6,2,{0xB5,0xEB,0x00,0x00,}},
- {0x60E7,2,{0xBE,0xE5,0x00,0x00,}},
- {0x60E8,2,{0xB2,0xD2,0x00,0x00,}},
- {0x60E9,2,{0xB3,0xCD,0x00,0x00,}},
- {0x60EA,2,{0x90,0xBF,0x00,0x00,}},
- {0x60EB,2,{0xB1,0xB9,0x00,0x00,}},
- {0x60EC,2,{0xE3,0xAB,0x00,0x00,}},
- {0x60ED,2,{0xB2,0xD1,0x00,0x00,}},
- {0x60EE,2,{0xB5,0xAC,0x00,0x00,}},
- {0x60EF,2,{0xB9,0xDF,0x00,0x00,}},
- {0x60F0,2,{0xB6,0xE8,0x00,0x00,}},
- {0x60F1,2,{0x90,0xC0,0x00,0x00,}},
- {0x60F2,2,{0x90,0xC1,0x00,0x00,}},
- {0x60F3,2,{0xCF,0xEB,0x00,0x00,}},
- {0x60F4,2,{0xE3,0xB7,0x00,0x00,}},
- {0x60F5,2,{0x90,0xC2,0x00,0x00,}},
- {0x60F6,2,{0xBB,0xCC,0x00,0x00,}},
- {0x60F7,2,{0x90,0xC3,0x00,0x00,}},
- {0x60F8,2,{0x90,0xC4,0x00,0x00,}},
- {0x60F9,2,{0xC8,0xC7,0x00,0x00,}},
- {0x60FA,2,{0xD0,0xCA,0x00,0x00,}},
- {0x60FB,2,{0x90,0xC5,0x00,0x00,}},
- {0x60FC,2,{0x90,0xC6,0x00,0x00,}},
- {0x60FD,2,{0x90,0xC7,0x00,0x00,}},
- {0x60FE,2,{0x90,0xC8,0x00,0x00,}},
- {0x60FF,2,{0x90,0xC9,0x00,0x00,}},
- {0x6100,2,{0xE3,0xB8,0x00,0x00,}},
- {0x6101,2,{0xB3,0xEE,0x00,0x00,}},
- {0x6102,2,{0x90,0xCA,0x00,0x00,}},
- {0x6103,2,{0x90,0xCB,0x00,0x00,}},
- {0x6104,2,{0x90,0xCC,0x00,0x00,}},
- {0x6105,2,{0x90,0xCD,0x00,0x00,}},
- {0x6106,2,{0xED,0xA9,0x00,0x00,}},
- {0x6107,2,{0x90,0xCE,0x00,0x00,}},
- {0x6108,2,{0xD3,0xFA,0x00,0x00,}},
- {0x6109,2,{0xD3,0xE4,0x00,0x00,}},
- {0x610A,2,{0x90,0xCF,0x00,0x00,}},
- {0x610B,2,{0x90,0xD0,0x00,0x00,}},
- {0x610C,2,{0x90,0xD1,0x00,0x00,}},
- {0x610D,2,{0xED,0xAA,0x00,0x00,}},
- {0x610E,2,{0xE3,0xB9,0x00,0x00,}},
- {0x610F,2,{0xD2,0xE2,0x00,0x00,}},
- {0x6110,2,{0x90,0xD2,0x00,0x00,}},
- {0x6111,2,{0x90,0xD3,0x00,0x00,}},
- {0x6112,2,{0x90,0xD4,0x00,0x00,}},
- {0x6113,2,{0x90,0xD5,0x00,0x00,}},
- {0x6114,2,{0x90,0xD6,0x00,0x00,}},
- {0x6115,2,{0xE3,0xB5,0x00,0x00,}},
- {0x6116,2,{0x90,0xD7,0x00,0x00,}},
- {0x6117,2,{0x90,0xD8,0x00,0x00,}},
- {0x6118,2,{0x90,0xD9,0x00,0x00,}},
- {0x6119,2,{0x90,0xDA,0x00,0x00,}},
- {0x611A,2,{0xD3,0xDE,0x00,0x00,}},
- {0x611B,2,{0x90,0xDB,0x00,0x00,}},
- {0x611C,2,{0x90,0xDC,0x00,0x00,}},
- {0x611D,2,{0x90,0xDD,0x00,0x00,}},
- {0x611E,2,{0x90,0xDE,0x00,0x00,}},
- {0x611F,2,{0xB8,0xD0,0x00,0x00,}},
- {0x6120,2,{0xE3,0xB3,0x00,0x00,}},
- {0x6121,2,{0x90,0xDF,0x00,0x00,}},
- {0x6122,2,{0x90,0xE0,0x00,0x00,}},
- {0x6123,2,{0xE3,0xB6,0x00,0x00,}},
- {0x6124,2,{0xB7,0xDF,0x00,0x00,}},
- {0x6125,2,{0x90,0xE1,0x00,0x00,}},
- {0x6126,2,{0xE3,0xB4,0x00,0x00,}},
- {0x6127,2,{0xC0,0xA2,0x00,0x00,}},
- {0x6128,2,{0x90,0xE2,0x00,0x00,}},
- {0x6129,2,{0x90,0xE3,0x00,0x00,}},
- {0x612A,2,{0x90,0xE4,0x00,0x00,}},
- {0x612B,2,{0xE3,0xBA,0x00,0x00,}},
- {0x612C,2,{0x90,0xE5,0x00,0x00,}},
- {0x612D,2,{0x90,0xE6,0x00,0x00,}},
- {0x612E,2,{0x90,0xE7,0x00,0x00,}},
- {0x612F,2,{0x90,0xE8,0x00,0x00,}},
- {0x6130,2,{0x90,0xE9,0x00,0x00,}},
- {0x6131,2,{0x90,0xEA,0x00,0x00,}},
- {0x6132,2,{0x90,0xEB,0x00,0x00,}},
- {0x6133,2,{0x90,0xEC,0x00,0x00,}},
- {0x6134,2,{0x90,0xED,0x00,0x00,}},
- {0x6135,2,{0x90,0xEE,0x00,0x00,}},
- {0x6136,2,{0x90,0xEF,0x00,0x00,}},
- {0x6137,2,{0x90,0xF0,0x00,0x00,}},
- {0x6138,2,{0x90,0xF1,0x00,0x00,}},
- {0x6139,2,{0x90,0xF2,0x00,0x00,}},
- {0x613A,2,{0x90,0xF3,0x00,0x00,}},
- {0x613B,2,{0x90,0xF4,0x00,0x00,}},
- {0x613C,2,{0x90,0xF5,0x00,0x00,}},
- {0x613D,2,{0x90,0xF6,0x00,0x00,}},
- {0x613E,2,{0x90,0xF7,0x00,0x00,}},
- {0x613F,2,{0xD4,0xB8,0x00,0x00,}},
- {0x6140,2,{0x90,0xF8,0x00,0x00,}},
- {0x6141,2,{0x90,0xF9,0x00,0x00,}},
- {0x6142,2,{0x90,0xFA,0x00,0x00,}},
- {0x6143,2,{0x90,0xFB,0x00,0x00,}},
- {0x6144,2,{0x90,0xFC,0x00,0x00,}},
- {0x6145,2,{0x90,0xFD,0x00,0x00,}},
- {0x6146,2,{0x90,0xFE,0x00,0x00,}},
- {0x6147,2,{0x91,0x40,0x00,0x00,}},
- {0x6148,2,{0xB4,0xC8,0x00,0x00,}},
- {0x6149,2,{0x91,0x41,0x00,0x00,}},
- {0x614A,2,{0xE3,0xBB,0x00,0x00,}},
- {0x614B,2,{0x91,0x42,0x00,0x00,}},
- {0x614C,2,{0xBB,0xC5,0x00,0x00,}},
- {0x614D,2,{0x91,0x43,0x00,0x00,}},
- {0x614E,2,{0xC9,0xF7,0x00,0x00,}},
- {0x614F,2,{0x91,0x44,0x00,0x00,}},
- {0x6150,2,{0x91,0x45,0x00,0x00,}},
- {0x6151,2,{0xC9,0xE5,0x00,0x00,}},
- {0x6152,2,{0x91,0x46,0x00,0x00,}},
- {0x6153,2,{0x91,0x47,0x00,0x00,}},
- {0x6154,2,{0x91,0x48,0x00,0x00,}},
- {0x6155,2,{0xC4,0xBD,0x00,0x00,}},
- {0x6156,2,{0x91,0x49,0x00,0x00,}},
- {0x6157,2,{0x91,0x4A,0x00,0x00,}},
- {0x6158,2,{0x91,0x4B,0x00,0x00,}},
- {0x6159,2,{0x91,0x4C,0x00,0x00,}},
- {0x615A,2,{0x91,0x4D,0x00,0x00,}},
- {0x615B,2,{0x91,0x4E,0x00,0x00,}},
- {0x615C,2,{0x91,0x4F,0x00,0x00,}},
- {0x615D,2,{0xED,0xAB,0x00,0x00,}},
- {0x615E,2,{0x91,0x50,0x00,0x00,}},
- {0x615F,2,{0x91,0x51,0x00,0x00,}},
- {0x6160,2,{0x91,0x52,0x00,0x00,}},
- {0x6161,2,{0x91,0x53,0x00,0x00,}},
- {0x6162,2,{0xC2,0xFD,0x00,0x00,}},
- {0x6163,2,{0x91,0x54,0x00,0x00,}},
- {0x6164,2,{0x91,0x55,0x00,0x00,}},
- {0x6165,2,{0x91,0x56,0x00,0x00,}},
- {0x6166,2,{0x91,0x57,0x00,0x00,}},
- {0x6167,2,{0xBB,0xDB,0x00,0x00,}},
- {0x6168,2,{0xBF,0xAE,0x00,0x00,}},
- {0x6169,2,{0x91,0x58,0x00,0x00,}},
- {0x616A,2,{0x91,0x59,0x00,0x00,}},
- {0x616B,2,{0x91,0x5A,0x00,0x00,}},
- {0x616C,2,{0x91,0x5B,0x00,0x00,}},
- {0x616D,2,{0x91,0x5C,0x00,0x00,}},
- {0x616E,2,{0x91,0x5D,0x00,0x00,}},
- {0x616F,2,{0x91,0x5E,0x00,0x00,}},
- {0x6170,2,{0xCE,0xBF,0x00,0x00,}},
- {0x6171,2,{0x91,0x5F,0x00,0x00,}},
- {0x6172,2,{0x91,0x60,0x00,0x00,}},
- {0x6173,2,{0x91,0x61,0x00,0x00,}},
- {0x6174,2,{0x91,0x62,0x00,0x00,}},
- {0x6175,2,{0xE3,0xBC,0x00,0x00,}},
- {0x6176,2,{0x91,0x63,0x00,0x00,}},
- {0x6177,2,{0xBF,0xB6,0x00,0x00,}},
- {0x6178,2,{0x91,0x64,0x00,0x00,}},
- {0x6179,2,{0x91,0x65,0x00,0x00,}},
- {0x617A,2,{0x91,0x66,0x00,0x00,}},
- {0x617B,2,{0x91,0x67,0x00,0x00,}},
- {0x617C,2,{0x91,0x68,0x00,0x00,}},
- {0x617D,2,{0x91,0x69,0x00,0x00,}},
- {0x617E,2,{0x91,0x6A,0x00,0x00,}},
- {0x617F,2,{0x91,0x6B,0x00,0x00,}},
- {0x6180,2,{0x91,0x6C,0x00,0x00,}},
- {0x6181,2,{0x91,0x6D,0x00,0x00,}},
- {0x6182,2,{0x91,0x6E,0x00,0x00,}},
- {0x6183,2,{0x91,0x6F,0x00,0x00,}},
- {0x6184,2,{0x91,0x70,0x00,0x00,}},
- {0x6185,2,{0x91,0x71,0x00,0x00,}},
- {0x6186,2,{0x91,0x72,0x00,0x00,}},
- {0x6187,2,{0x91,0x73,0x00,0x00,}},
- {0x6188,2,{0x91,0x74,0x00,0x00,}},
- {0x6189,2,{0x91,0x75,0x00,0x00,}},
- {0x618A,2,{0x91,0x76,0x00,0x00,}},
- {0x618B,2,{0xB1,0xEF,0x00,0x00,}},
- {0x618C,2,{0x91,0x77,0x00,0x00,}},
- {0x618D,2,{0x91,0x78,0x00,0x00,}},
- {0x618E,2,{0xD4,0xF7,0x00,0x00,}},
- {0x618F,2,{0x91,0x79,0x00,0x00,}},
- {0x6190,2,{0x91,0x7A,0x00,0x00,}},
- {0x6191,2,{0x91,0x7B,0x00,0x00,}},
- {0x6192,2,{0x91,0x7C,0x00,0x00,}},
- {0x6193,2,{0x91,0x7D,0x00,0x00,}},
- {0x6194,2,{0xE3,0xBE,0x00,0x00,}},
- {0x6195,2,{0x91,0x7E,0x00,0x00,}},
- {0x6196,2,{0x91,0x80,0x00,0x00,}},
- {0x6197,2,{0x91,0x81,0x00,0x00,}},
- {0x6198,2,{0x91,0x82,0x00,0x00,}},
- {0x6199,2,{0x91,0x83,0x00,0x00,}},
- {0x619A,2,{0x91,0x84,0x00,0x00,}},
- {0x619B,2,{0x91,0x85,0x00,0x00,}},
- {0x619C,2,{0x91,0x86,0x00,0x00,}},
- {0x619D,2,{0xED,0xAD,0x00,0x00,}},
- {0x619E,2,{0x91,0x87,0x00,0x00,}},
- {0x619F,2,{0x91,0x88,0x00,0x00,}},
- {0x61A0,2,{0x91,0x89,0x00,0x00,}},
- {0x61A1,2,{0x91,0x8A,0x00,0x00,}},
- {0x61A2,2,{0x91,0x8B,0x00,0x00,}},
- {0x61A3,2,{0x91,0x8C,0x00,0x00,}},
- {0x61A4,2,{0x91,0x8D,0x00,0x00,}},
- {0x61A5,2,{0x91,0x8E,0x00,0x00,}},
- {0x61A6,2,{0x91,0x8F,0x00,0x00,}},
- {0x61A7,2,{0xE3,0xBF,0x00,0x00,}},
- {0x61A8,2,{0xBA,0xA9,0x00,0x00,}},
- {0x61A9,2,{0xED,0xAC,0x00,0x00,}},
- {0x61AA,2,{0x91,0x90,0x00,0x00,}},
- {0x61AB,2,{0x91,0x91,0x00,0x00,}},
- {0x61AC,2,{0xE3,0xBD,0x00,0x00,}},
- {0x61AD,2,{0x91,0x92,0x00,0x00,}},
- {0x61AE,2,{0x91,0x93,0x00,0x00,}},
- {0x61AF,2,{0x91,0x94,0x00,0x00,}},
- {0x61B0,2,{0x91,0x95,0x00,0x00,}},
- {0x61B1,2,{0x91,0x96,0x00,0x00,}},
- {0x61B2,2,{0x91,0x97,0x00,0x00,}},
- {0x61B3,2,{0x91,0x98,0x00,0x00,}},
- {0x61B4,2,{0x91,0x99,0x00,0x00,}},
- {0x61B5,2,{0x91,0x9A,0x00,0x00,}},
- {0x61B6,2,{0x91,0x9B,0x00,0x00,}},
- {0x61B7,2,{0xE3,0xC0,0x00,0x00,}},
- {0x61B8,2,{0x91,0x9C,0x00,0x00,}},
- {0x61B9,2,{0x91,0x9D,0x00,0x00,}},
- {0x61BA,2,{0x91,0x9E,0x00,0x00,}},
- {0x61BB,2,{0x91,0x9F,0x00,0x00,}},
- {0x61BC,2,{0x91,0xA0,0x00,0x00,}},
- {0x61BD,2,{0x91,0xA1,0x00,0x00,}},
- {0x61BE,2,{0xBA,0xB6,0x00,0x00,}},
- {0x61BF,2,{0x91,0xA2,0x00,0x00,}},
- {0x61C0,2,{0x91,0xA3,0x00,0x00,}},
- {0x61C1,2,{0x91,0xA4,0x00,0x00,}},
- {0x61C2,2,{0xB6,0xAE,0x00,0x00,}},
- {0x61C3,2,{0x91,0xA5,0x00,0x00,}},
- {0x61C4,2,{0x91,0xA6,0x00,0x00,}},
- {0x61C5,2,{0x91,0xA7,0x00,0x00,}},
- {0x61C6,2,{0x91,0xA8,0x00,0x00,}},
- {0x61C7,2,{0x91,0xA9,0x00,0x00,}},
- {0x61C8,2,{0xD0,0xB8,0x00,0x00,}},
- {0x61C9,2,{0x91,0xAA,0x00,0x00,}},
- {0x61CA,2,{0xB0,0xC3,0x00,0x00,}},
- {0x61CB,2,{0xED,0xAE,0x00,0x00,}},
- {0x61CC,2,{0x91,0xAB,0x00,0x00,}},
- {0x61CD,2,{0x91,0xAC,0x00,0x00,}},
- {0x61CE,2,{0x91,0xAD,0x00,0x00,}},
- {0x61CF,2,{0x91,0xAE,0x00,0x00,}},
- {0x61D0,2,{0x91,0xAF,0x00,0x00,}},
- {0x61D1,2,{0xED,0xAF,0x00,0x00,}},
- {0x61D2,2,{0xC0,0xC1,0x00,0x00,}},
- {0x61D3,2,{0x91,0xB0,0x00,0x00,}},
- {0x61D4,2,{0xE3,0xC1,0x00,0x00,}},
- {0x61D5,2,{0x91,0xB1,0x00,0x00,}},
- {0x61D6,2,{0x91,0xB2,0x00,0x00,}},
- {0x61D7,2,{0x91,0xB3,0x00,0x00,}},
- {0x61D8,2,{0x91,0xB4,0x00,0x00,}},
- {0x61D9,2,{0x91,0xB5,0x00,0x00,}},
- {0x61DA,2,{0x91,0xB6,0x00,0x00,}},
- {0x61DB,2,{0x91,0xB7,0x00,0x00,}},
- {0x61DC,2,{0x91,0xB8,0x00,0x00,}},
- {0x61DD,2,{0x91,0xB9,0x00,0x00,}},
- {0x61DE,2,{0x91,0xBA,0x00,0x00,}},
- {0x61DF,2,{0x91,0xBB,0x00,0x00,}},
- {0x61E0,2,{0x91,0xBC,0x00,0x00,}},
- {0x61E1,2,{0x91,0xBD,0x00,0x00,}},
- {0x61E2,2,{0x91,0xBE,0x00,0x00,}},
- {0x61E3,2,{0x91,0xBF,0x00,0x00,}},
- {0x61E4,2,{0x91,0xC0,0x00,0x00,}},
- {0x61E5,2,{0x91,0xC1,0x00,0x00,}},
- {0x61E6,2,{0xC5,0xB3,0x00,0x00,}},
- {0x61E7,2,{0x91,0xC2,0x00,0x00,}},
- {0x61E8,2,{0x91,0xC3,0x00,0x00,}},
- {0x61E9,2,{0x91,0xC4,0x00,0x00,}},
- {0x61EA,2,{0x91,0xC5,0x00,0x00,}},
- {0x61EB,2,{0x91,0xC6,0x00,0x00,}},
- {0x61EC,2,{0x91,0xC7,0x00,0x00,}},
- {0x61ED,2,{0x91,0xC8,0x00,0x00,}},
- {0x61EE,2,{0x91,0xC9,0x00,0x00,}},
- {0x61EF,2,{0x91,0xCA,0x00,0x00,}},
- {0x61F0,2,{0x91,0xCB,0x00,0x00,}},
- {0x61F1,2,{0x91,0xCC,0x00,0x00,}},
- {0x61F2,2,{0x91,0xCD,0x00,0x00,}},
- {0x61F3,2,{0x91,0xCE,0x00,0x00,}},
- {0x61F4,2,{0x91,0xCF,0x00,0x00,}},
- {0x61F5,2,{0xE3,0xC2,0x00,0x00,}},
- {0x61F6,2,{0x91,0xD0,0x00,0x00,}},
- {0x61F7,2,{0x91,0xD1,0x00,0x00,}},
- {0x61F8,2,{0x91,0xD2,0x00,0x00,}},
- {0x61F9,2,{0x91,0xD3,0x00,0x00,}},
- {0x61FA,2,{0x91,0xD4,0x00,0x00,}},
- {0x61FB,2,{0x91,0xD5,0x00,0x00,}},
- {0x61FC,2,{0x91,0xD6,0x00,0x00,}},
- {0x61FD,2,{0x91,0xD7,0x00,0x00,}},
- {0x61FE,2,{0x91,0xD8,0x00,0x00,}},
- {0x61FF,2,{0xDC,0xB2,0x00,0x00,}},
- {0x6200,2,{0x91,0xD9,0x00,0x00,}},
- {0x6201,2,{0x91,0xDA,0x00,0x00,}},
- {0x6202,2,{0x91,0xDB,0x00,0x00,}},
- {0x6203,2,{0x91,0xDC,0x00,0x00,}},
- {0x6204,2,{0x91,0xDD,0x00,0x00,}},
- {0x6205,2,{0x91,0xDE,0x00,0x00,}},
- {0x6206,2,{0xED,0xB0,0x00,0x00,}},
- {0x6207,2,{0x91,0xDF,0x00,0x00,}},
- {0x6208,2,{0xB8,0xEA,0x00,0x00,}},
- {0x6209,2,{0x91,0xE0,0x00,0x00,}},
- {0x620A,2,{0xCE,0xEC,0x00,0x00,}},
- {0x620B,2,{0xEA,0xA7,0x00,0x00,}},
- {0x620C,2,{0xD0,0xE7,0x00,0x00,}},
- {0x620D,2,{0xCA,0xF9,0x00,0x00,}},
- {0x620E,2,{0xC8,0xD6,0x00,0x00,}},
- {0x620F,2,{0xCF,0xB7,0x00,0x00,}},
- {0x6210,2,{0xB3,0xC9,0x00,0x00,}},
- {0x6211,2,{0xCE,0xD2,0x00,0x00,}},
- {0x6212,2,{0xBD,0xE4,0x00,0x00,}},
- {0x6213,2,{0x91,0xE1,0x00,0x00,}},
- {0x6214,2,{0x91,0xE2,0x00,0x00,}},
- {0x6215,2,{0xE3,0xDE,0x00,0x00,}},
- {0x6216,2,{0xBB,0xF2,0x00,0x00,}},
- {0x6217,2,{0xEA,0xA8,0x00,0x00,}},
- {0x6218,2,{0xD5,0xBD,0x00,0x00,}},
- {0x6219,2,{0x91,0xE3,0x00,0x00,}},
- {0x621A,2,{0xC6,0xDD,0x00,0x00,}},
- {0x621B,2,{0xEA,0xA9,0x00,0x00,}},
- {0x621C,2,{0x91,0xE4,0x00,0x00,}},
- {0x621D,2,{0x91,0xE5,0x00,0x00,}},
- {0x621E,2,{0x91,0xE6,0x00,0x00,}},
- {0x621F,2,{0xEA,0xAA,0x00,0x00,}},
- {0x6220,2,{0x91,0xE7,0x00,0x00,}},
- {0x6221,2,{0xEA,0xAC,0x00,0x00,}},
- {0x6222,2,{0xEA,0xAB,0x00,0x00,}},
- {0x6223,2,{0x91,0xE8,0x00,0x00,}},
- {0x6224,2,{0xEA,0xAE,0x00,0x00,}},
- {0x6225,2,{0xEA,0xAD,0x00,0x00,}},
- {0x6226,2,{0x91,0xE9,0x00,0x00,}},
- {0x6227,2,{0x91,0xEA,0x00,0x00,}},
- {0x6228,2,{0x91,0xEB,0x00,0x00,}},
- {0x6229,2,{0x91,0xEC,0x00,0x00,}},
- {0x622A,2,{0xBD,0xD8,0x00,0x00,}},
- {0x622B,2,{0x91,0xED,0x00,0x00,}},
- {0x622C,2,{0xEA,0xAF,0x00,0x00,}},
- {0x622D,2,{0x91,0xEE,0x00,0x00,}},
- {0x622E,2,{0xC2,0xBE,0x00,0x00,}},
- {0x622F,2,{0x91,0xEF,0x00,0x00,}},
- {0x6230,2,{0x91,0xF0,0x00,0x00,}},
- {0x6231,2,{0x91,0xF1,0x00,0x00,}},
- {0x6232,2,{0x91,0xF2,0x00,0x00,}},
- {0x6233,2,{0xB4,0xC1,0x00,0x00,}},
- {0x6234,2,{0xB4,0xF7,0x00,0x00,}},
- {0x6235,2,{0x91,0xF3,0x00,0x00,}},
- {0x6236,2,{0x91,0xF4,0x00,0x00,}},
- {0x6237,2,{0xBB,0xA7,0x00,0x00,}},
- {0x6238,2,{0x91,0xF5,0x00,0x00,}},
- {0x6239,2,{0x91,0xF6,0x00,0x00,}},
- {0x623A,2,{0x91,0xF7,0x00,0x00,}},
- {0x623B,2,{0x91,0xF8,0x00,0x00,}},
- {0x623C,2,{0x91,0xF9,0x00,0x00,}},
- {0x623D,2,{0xEC,0xE6,0x00,0x00,}},
- {0x623E,2,{0xEC,0xE5,0x00,0x00,}},
- {0x623F,2,{0xB7,0xBF,0x00,0x00,}},
- {0x6240,2,{0xCB,0xF9,0x00,0x00,}},
- {0x6241,2,{0xB1,0xE2,0x00,0x00,}},
- {0x6242,2,{0x91,0xFA,0x00,0x00,}},
- {0x6243,2,{0xEC,0xE7,0x00,0x00,}},
- {0x6244,2,{0x91,0xFB,0x00,0x00,}},
- {0x6245,2,{0x91,0xFC,0x00,0x00,}},
- {0x6246,2,{0x91,0xFD,0x00,0x00,}},
- {0x6247,2,{0xC9,0xC8,0x00,0x00,}},
- {0x6248,2,{0xEC,0xE8,0x00,0x00,}},
- {0x6249,2,{0xEC,0xE9,0x00,0x00,}},
- {0x624A,2,{0x91,0xFE,0x00,0x00,}},
- {0x624B,2,{0xCA,0xD6,0x00,0x00,}},
- {0x624C,2,{0xDE,0xD0,0x00,0x00,}},
- {0x624D,2,{0xB2,0xC5,0x00,0x00,}},
- {0x624E,2,{0xD4,0xFA,0x00,0x00,}},
- {0x624F,2,{0x92,0x40,0x00,0x00,}},
- {0x6250,2,{0x92,0x41,0x00,0x00,}},
- {0x6251,2,{0xC6,0xCB,0x00,0x00,}},
- {0x6252,2,{0xB0,0xC7,0x00,0x00,}},
- {0x6253,2,{0xB4,0xF2,0x00,0x00,}},
- {0x6254,2,{0xC8,0xD3,0x00,0x00,}},
- {0x6255,2,{0x92,0x42,0x00,0x00,}},
- {0x6256,2,{0x92,0x43,0x00,0x00,}},
- {0x6257,2,{0x92,0x44,0x00,0x00,}},
- {0x6258,2,{0xCD,0xD0,0x00,0x00,}},
- {0x6259,2,{0x92,0x45,0x00,0x00,}},
- {0x625A,2,{0x92,0x46,0x00,0x00,}},
- {0x625B,2,{0xBF,0xB8,0x00,0x00,}},
- {0x625C,2,{0x92,0x47,0x00,0x00,}},
- {0x625D,2,{0x92,0x48,0x00,0x00,}},
- {0x625E,2,{0x92,0x49,0x00,0x00,}},
- {0x625F,2,{0x92,0x4A,0x00,0x00,}},
- {0x6260,2,{0x92,0x4B,0x00,0x00,}},
- {0x6261,2,{0x92,0x4C,0x00,0x00,}},
- {0x6262,2,{0x92,0x4D,0x00,0x00,}},
- {0x6263,2,{0xBF,0xDB,0x00,0x00,}},
- {0x6264,2,{0x92,0x4E,0x00,0x00,}},
- {0x6265,2,{0x92,0x4F,0x00,0x00,}},
- {0x6266,2,{0xC7,0xA4,0x00,0x00,}},
- {0x6267,2,{0xD6,0xB4,0x00,0x00,}},
- {0x6268,2,{0x92,0x50,0x00,0x00,}},
- {0x6269,2,{0xC0,0xA9,0x00,0x00,}},
- {0x626A,2,{0xDE,0xD1,0x00,0x00,}},
- {0x626B,2,{0xC9,0xA8,0x00,0x00,}},
- {0x626C,2,{0xD1,0xEF,0x00,0x00,}},
- {0x626D,2,{0xC5,0xA4,0x00,0x00,}},
- {0x626E,2,{0xB0,0xE7,0x00,0x00,}},
- {0x626F,2,{0xB3,0xB6,0x00,0x00,}},
- {0x6270,2,{0xC8,0xC5,0x00,0x00,}},
- {0x6271,2,{0x92,0x51,0x00,0x00,}},
- {0x6272,2,{0x92,0x52,0x00,0x00,}},
- {0x6273,2,{0xB0,0xE2,0x00,0x00,}},
- {0x6274,2,{0x92,0x53,0x00,0x00,}},
- {0x6275,2,{0x92,0x54,0x00,0x00,}},
- {0x6276,2,{0xB7,0xF6,0x00,0x00,}},
- {0x6277,2,{0x92,0x55,0x00,0x00,}},
- {0x6278,2,{0x92,0x56,0x00,0x00,}},
- {0x6279,2,{0xC5,0xFA,0x00,0x00,}},
- {0x627A,2,{0x92,0x57,0x00,0x00,}},
- {0x627B,2,{0x92,0x58,0x00,0x00,}},
- {0x627C,2,{0xB6,0xF3,0x00,0x00,}},
- {0x627D,2,{0x92,0x59,0x00,0x00,}},
- {0x627E,2,{0xD5,0xD2,0x00,0x00,}},
- {0x627F,2,{0xB3,0xD0,0x00,0x00,}},
- {0x6280,2,{0xBC,0xBC,0x00,0x00,}},
- {0x6281,2,{0x92,0x5A,0x00,0x00,}},
- {0x6282,2,{0x92,0x5B,0x00,0x00,}},
- {0x6283,2,{0x92,0x5C,0x00,0x00,}},
- {0x6284,2,{0xB3,0xAD,0x00,0x00,}},
- {0x6285,2,{0x92,0x5D,0x00,0x00,}},
- {0x6286,2,{0x92,0x5E,0x00,0x00,}},
- {0x6287,2,{0x92,0x5F,0x00,0x00,}},
- {0x6288,2,{0x92,0x60,0x00,0x00,}},
- {0x6289,2,{0xBE,0xF1,0x00,0x00,}},
- {0x628A,2,{0xB0,0xD1,0x00,0x00,}},
- {0x628B,2,{0x92,0x61,0x00,0x00,}},
- {0x628C,2,{0x92,0x62,0x00,0x00,}},
- {0x628D,2,{0x92,0x63,0x00,0x00,}},
- {0x628E,2,{0x92,0x64,0x00,0x00,}},
- {0x628F,2,{0x92,0x65,0x00,0x00,}},
- {0x6290,2,{0x92,0x66,0x00,0x00,}},
- {0x6291,2,{0xD2,0xD6,0x00,0x00,}},
- {0x6292,2,{0xCA,0xE3,0x00,0x00,}},
- {0x6293,2,{0xD7,0xA5,0x00,0x00,}},
- {0x6294,2,{0x92,0x67,0x00,0x00,}},
- {0x6295,2,{0xCD,0xB6,0x00,0x00,}},
- {0x6296,2,{0xB6,0xB6,0x00,0x00,}},
- {0x6297,2,{0xBF,0xB9,0x00,0x00,}},
- {0x6298,2,{0xD5,0xDB,0x00,0x00,}},
- {0x6299,2,{0x92,0x68,0x00,0x00,}},
- {0x629A,2,{0xB8,0xA7,0x00,0x00,}},
- {0x629B,2,{0xC5,0xD7,0x00,0x00,}},
- {0x629C,2,{0x92,0x69,0x00,0x00,}},
- {0x629D,2,{0x92,0x6A,0x00,0x00,}},
- {0x629E,2,{0x92,0x6B,0x00,0x00,}},
- {0x629F,2,{0xDE,0xD2,0x00,0x00,}},
- {0x62A0,2,{0xBF,0xD9,0x00,0x00,}},
- {0x62A1,2,{0xC2,0xD5,0x00,0x00,}},
- {0x62A2,2,{0xC7,0xC0,0x00,0x00,}},
- {0x62A3,2,{0x92,0x6C,0x00,0x00,}},
- {0x62A4,2,{0xBB,0xA4,0x00,0x00,}},
- {0x62A5,2,{0xB1,0xA8,0x00,0x00,}},
- {0x62A6,2,{0x92,0x6D,0x00,0x00,}},
- {0x62A7,2,{0x92,0x6E,0x00,0x00,}},
- {0x62A8,2,{0xC5,0xEA,0x00,0x00,}},
- {0x62A9,2,{0x92,0x6F,0x00,0x00,}},
- {0x62AA,2,{0x92,0x70,0x00,0x00,}},
- {0x62AB,2,{0xC5,0xFB,0x00,0x00,}},
- {0x62AC,2,{0xCC,0xA7,0x00,0x00,}},
- {0x62AD,2,{0x92,0x71,0x00,0x00,}},
- {0x62AE,2,{0x92,0x72,0x00,0x00,}},
- {0x62AF,2,{0x92,0x73,0x00,0x00,}},
- {0x62B0,2,{0x92,0x74,0x00,0x00,}},
- {0x62B1,2,{0xB1,0xA7,0x00,0x00,}},
- {0x62B2,2,{0x92,0x75,0x00,0x00,}},
- {0x62B3,2,{0x92,0x76,0x00,0x00,}},
- {0x62B4,2,{0x92,0x77,0x00,0x00,}},
- {0x62B5,2,{0xB5,0xD6,0x00,0x00,}},
- {0x62B6,2,{0x92,0x78,0x00,0x00,}},
- {0x62B7,2,{0x92,0x79,0x00,0x00,}},
- {0x62B8,2,{0x92,0x7A,0x00,0x00,}},
- {0x62B9,2,{0xC4,0xA8,0x00,0x00,}},
- {0x62BA,2,{0x92,0x7B,0x00,0x00,}},
- {0x62BB,2,{0xDE,0xD3,0x00,0x00,}},
- {0x62BC,2,{0xD1,0xBA,0x00,0x00,}},
- {0x62BD,2,{0xB3,0xE9,0x00,0x00,}},
- {0x62BE,2,{0x92,0x7C,0x00,0x00,}},
- {0x62BF,2,{0xC3,0xF2,0x00,0x00,}},
- {0x62C0,2,{0x92,0x7D,0x00,0x00,}},
- {0x62C1,2,{0x92,0x7E,0x00,0x00,}},
- {0x62C2,2,{0xB7,0xF7,0x00,0x00,}},
- {0x62C3,2,{0x92,0x80,0x00,0x00,}},
- {0x62C4,2,{0xD6,0xF4,0x00,0x00,}},
- {0x62C5,2,{0xB5,0xA3,0x00,0x00,}},
- {0x62C6,2,{0xB2,0xF0,0x00,0x00,}},
- {0x62C7,2,{0xC4,0xB4,0x00,0x00,}},
- {0x62C8,2,{0xC4,0xE9,0x00,0x00,}},
- {0x62C9,2,{0xC0,0xAD,0x00,0x00,}},
- {0x62CA,2,{0xDE,0xD4,0x00,0x00,}},
- {0x62CB,2,{0x92,0x81,0x00,0x00,}},
- {0x62CC,2,{0xB0,0xE8,0x00,0x00,}},
- {0x62CD,2,{0xC5,0xC4,0x00,0x00,}},
- {0x62CE,2,{0xC1,0xE0,0x00,0x00,}},
- {0x62CF,2,{0x92,0x82,0x00,0x00,}},
- {0x62D0,2,{0xB9,0xD5,0x00,0x00,}},
- {0x62D1,2,{0x92,0x83,0x00,0x00,}},
- {0x62D2,2,{0xBE,0xDC,0x00,0x00,}},
- {0x62D3,2,{0xCD,0xD8,0x00,0x00,}},
- {0x62D4,2,{0xB0,0xCE,0x00,0x00,}},
- {0x62D5,2,{0x92,0x84,0x00,0x00,}},
- {0x62D6,2,{0xCD,0xCF,0x00,0x00,}},
- {0x62D7,2,{0xDE,0xD6,0x00,0x00,}},
- {0x62D8,2,{0xBE,0xD0,0x00,0x00,}},
- {0x62D9,2,{0xD7,0xBE,0x00,0x00,}},
- {0x62DA,2,{0xDE,0xD5,0x00,0x00,}},
- {0x62DB,2,{0xD5,0xD0,0x00,0x00,}},
- {0x62DC,2,{0xB0,0xDD,0x00,0x00,}},
- {0x62DD,2,{0x92,0x85,0x00,0x00,}},
- {0x62DE,2,{0x92,0x86,0x00,0x00,}},
- {0x62DF,2,{0xC4,0xE2,0x00,0x00,}},
- {0x62E0,2,{0x92,0x87,0x00,0x00,}},
- {0x62E1,2,{0x92,0x88,0x00,0x00,}},
- {0x62E2,2,{0xC2,0xA3,0x00,0x00,}},
- {0x62E3,2,{0xBC,0xF0,0x00,0x00,}},
- {0x62E4,2,{0x92,0x89,0x00,0x00,}},
- {0x62E5,2,{0xD3,0xB5,0x00,0x00,}},
- {0x62E6,2,{0xC0,0xB9,0x00,0x00,}},
- {0x62E7,2,{0xC5,0xA1,0x00,0x00,}},
- {0x62E8,2,{0xB2,0xA6,0x00,0x00,}},
- {0x62E9,2,{0xD4,0xF1,0x00,0x00,}},
- {0x62EA,2,{0x92,0x8A,0x00,0x00,}},
- {0x62EB,2,{0x92,0x8B,0x00,0x00,}},
- {0x62EC,2,{0xC0,0xA8,0x00,0x00,}},
- {0x62ED,2,{0xCA,0xC3,0x00,0x00,}},
- {0x62EE,2,{0xDE,0xD7,0x00,0x00,}},
- {0x62EF,2,{0xD5,0xFC,0x00,0x00,}},
- {0x62F0,2,{0x92,0x8C,0x00,0x00,}},
- {0x62F1,2,{0xB9,0xB0,0x00,0x00,}},
- {0x62F2,2,{0x92,0x8D,0x00,0x00,}},
- {0x62F3,2,{0xC8,0xAD,0x00,0x00,}},
- {0x62F4,2,{0xCB,0xA9,0x00,0x00,}},
- {0x62F5,2,{0x92,0x8E,0x00,0x00,}},
- {0x62F6,2,{0xDE,0xD9,0x00,0x00,}},
- {0x62F7,2,{0xBF,0xBD,0x00,0x00,}},
- {0x62F8,2,{0x92,0x8F,0x00,0x00,}},
- {0x62F9,2,{0x92,0x90,0x00,0x00,}},
- {0x62FA,2,{0x92,0x91,0x00,0x00,}},
- {0x62FB,2,{0x92,0x92,0x00,0x00,}},
- {0x62FC,2,{0xC6,0xB4,0x00,0x00,}},
- {0x62FD,2,{0xD7,0xA7,0x00,0x00,}},
- {0x62FE,2,{0xCA,0xB0,0x00,0x00,}},
- {0x62FF,2,{0xC4,0xC3,0x00,0x00,}},
- {0x6300,2,{0x92,0x93,0x00,0x00,}},
- {0x6301,2,{0xB3,0xD6,0x00,0x00,}},
- {0x6302,2,{0xB9,0xD2,0x00,0x00,}},
- {0x6303,2,{0x92,0x94,0x00,0x00,}},
- {0x6304,2,{0x92,0x95,0x00,0x00,}},
- {0x6305,2,{0x92,0x96,0x00,0x00,}},
- {0x6306,2,{0x92,0x97,0x00,0x00,}},
- {0x6307,2,{0xD6,0xB8,0x00,0x00,}},
- {0x6308,2,{0xEA,0xFC,0x00,0x00,}},
- {0x6309,2,{0xB0,0xB4,0x00,0x00,}},
- {0x630A,2,{0x92,0x98,0x00,0x00,}},
- {0x630B,2,{0x92,0x99,0x00,0x00,}},
- {0x630C,2,{0x92,0x9A,0x00,0x00,}},
- {0x630D,2,{0x92,0x9B,0x00,0x00,}},
- {0x630E,2,{0xBF,0xE6,0x00,0x00,}},
- {0x630F,2,{0x92,0x9C,0x00,0x00,}},
- {0x6310,2,{0x92,0x9D,0x00,0x00,}},
- {0x6311,2,{0xCC,0xF4,0x00,0x00,}},
- {0x6312,2,{0x92,0x9E,0x00,0x00,}},
- {0x6313,2,{0x92,0x9F,0x00,0x00,}},
- {0x6314,2,{0x92,0xA0,0x00,0x00,}},
- {0x6315,2,{0x92,0xA1,0x00,0x00,}},
- {0x6316,2,{0xCD,0xDA,0x00,0x00,}},
- {0x6317,2,{0x92,0xA2,0x00,0x00,}},
- {0x6318,2,{0x92,0xA3,0x00,0x00,}},
- {0x6319,2,{0x92,0xA4,0x00,0x00,}},
- {0x631A,2,{0xD6,0xBF,0x00,0x00,}},
- {0x631B,2,{0xC2,0xCE,0x00,0x00,}},
- {0x631C,2,{0x92,0xA5,0x00,0x00,}},
- {0x631D,2,{0xCE,0xCE,0x00,0x00,}},
- {0x631E,2,{0xCC,0xA2,0x00,0x00,}},
- {0x631F,2,{0xD0,0xAE,0x00,0x00,}},
- {0x6320,2,{0xC4,0xD3,0x00,0x00,}},
- {0x6321,2,{0xB5,0xB2,0x00,0x00,}},
- {0x6322,2,{0xDE,0xD8,0x00,0x00,}},
- {0x6323,2,{0xD5,0xF5,0x00,0x00,}},
- {0x6324,2,{0xBC,0xB7,0x00,0x00,}},
- {0x6325,2,{0xBB,0xD3,0x00,0x00,}},
- {0x6326,2,{0x92,0xA6,0x00,0x00,}},
- {0x6327,2,{0x92,0xA7,0x00,0x00,}},
- {0x6328,2,{0xB0,0xA4,0x00,0x00,}},
- {0x6329,2,{0x92,0xA8,0x00,0x00,}},
- {0x632A,2,{0xC5,0xB2,0x00,0x00,}},
- {0x632B,2,{0xB4,0xEC,0x00,0x00,}},
- {0x632C,2,{0x92,0xA9,0x00,0x00,}},
- {0x632D,2,{0x92,0xAA,0x00,0x00,}},
- {0x632E,2,{0x92,0xAB,0x00,0x00,}},
- {0x632F,2,{0xD5,0xF1,0x00,0x00,}},
- {0x6330,2,{0x92,0xAC,0x00,0x00,}},
- {0x6331,2,{0x92,0xAD,0x00,0x00,}},
- {0x6332,2,{0xEA,0xFD,0x00,0x00,}},
- {0x6333,2,{0x92,0xAE,0x00,0x00,}},
- {0x6334,2,{0x92,0xAF,0x00,0x00,}},
- {0x6335,2,{0x92,0xB0,0x00,0x00,}},
- {0x6336,2,{0x92,0xB1,0x00,0x00,}},
- {0x6337,2,{0x92,0xB2,0x00,0x00,}},
- {0x6338,2,{0x92,0xB3,0x00,0x00,}},
- {0x6339,2,{0xDE,0xDA,0x00,0x00,}},
- {0x633A,2,{0xCD,0xA6,0x00,0x00,}},
- {0x633B,2,{0x92,0xB4,0x00,0x00,}},
- {0x633C,2,{0x92,0xB5,0x00,0x00,}},
- {0x633D,2,{0xCD,0xEC,0x00,0x00,}},
- {0x633E,2,{0x92,0xB6,0x00,0x00,}},
- {0x633F,2,{0x92,0xB7,0x00,0x00,}},
- {0x6340,2,{0x92,0xB8,0x00,0x00,}},
- {0x6341,2,{0x92,0xB9,0x00,0x00,}},
- {0x6342,2,{0xCE,0xE6,0x00,0x00,}},
- {0x6343,2,{0xDE,0xDC,0x00,0x00,}},
- {0x6344,2,{0x92,0xBA,0x00,0x00,}},
- {0x6345,2,{0xCD,0xB1,0x00,0x00,}},
- {0x6346,2,{0xC0,0xA6,0x00,0x00,}},
- {0x6347,2,{0x92,0xBB,0x00,0x00,}},
- {0x6348,2,{0x92,0xBC,0x00,0x00,}},
- {0x6349,2,{0xD7,0xBD,0x00,0x00,}},
- {0x634A,2,{0x92,0xBD,0x00,0x00,}},
- {0x634B,2,{0xDE,0xDB,0x00,0x00,}},
- {0x634C,2,{0xB0,0xC6,0x00,0x00,}},
- {0x634D,2,{0xBA,0xB4,0x00,0x00,}},
- {0x634E,2,{0xC9,0xD3,0x00,0x00,}},
- {0x634F,2,{0xC4,0xF3,0x00,0x00,}},
- {0x6350,2,{0xBE,0xE8,0x00,0x00,}},
- {0x6351,2,{0x92,0xBE,0x00,0x00,}},
- {0x6352,2,{0x92,0xBF,0x00,0x00,}},
- {0x6353,2,{0x92,0xC0,0x00,0x00,}},
- {0x6354,2,{0x92,0xC1,0x00,0x00,}},
- {0x6355,2,{0xB2,0xB6,0x00,0x00,}},
- {0x6356,2,{0x92,0xC2,0x00,0x00,}},
- {0x6357,2,{0x92,0xC3,0x00,0x00,}},
- {0x6358,2,{0x92,0xC4,0x00,0x00,}},
- {0x6359,2,{0x92,0xC5,0x00,0x00,}},
- {0x635A,2,{0x92,0xC6,0x00,0x00,}},
- {0x635B,2,{0x92,0xC7,0x00,0x00,}},
- {0x635C,2,{0x92,0xC8,0x00,0x00,}},
- {0x635D,2,{0x92,0xC9,0x00,0x00,}},
- {0x635E,2,{0xC0,0xCC,0x00,0x00,}},
- {0x635F,2,{0xCB,0xF0,0x00,0x00,}},
- {0x6360,2,{0x92,0xCA,0x00,0x00,}},
- {0x6361,2,{0xBC,0xF1,0x00,0x00,}},
- {0x6362,2,{0xBB,0xBB,0x00,0x00,}},
- {0x6363,2,{0xB5,0xB7,0x00,0x00,}},
- {0x6364,2,{0x92,0xCB,0x00,0x00,}},
- {0x6365,2,{0x92,0xCC,0x00,0x00,}},
- {0x6366,2,{0x92,0xCD,0x00,0x00,}},
- {0x6367,2,{0xC5,0xF5,0x00,0x00,}},
- {0x6368,2,{0x92,0xCE,0x00,0x00,}},
- {0x6369,2,{0xDE,0xE6,0x00,0x00,}},
- {0x636A,2,{0x92,0xCF,0x00,0x00,}},
- {0x636B,2,{0x92,0xD0,0x00,0x00,}},
- {0x636C,2,{0x92,0xD1,0x00,0x00,}},
- {0x636D,2,{0xDE,0xE3,0x00,0x00,}},
- {0x636E,2,{0xBE,0xDD,0x00,0x00,}},
- {0x636F,2,{0x92,0xD2,0x00,0x00,}},
- {0x6370,2,{0x92,0xD3,0x00,0x00,}},
- {0x6371,2,{0xDE,0xDF,0x00,0x00,}},
- {0x6372,2,{0x92,0xD4,0x00,0x00,}},
- {0x6373,2,{0x92,0xD5,0x00,0x00,}},
- {0x6374,2,{0x92,0xD6,0x00,0x00,}},
- {0x6375,2,{0x92,0xD7,0x00,0x00,}},
- {0x6376,2,{0xB4,0xB7,0x00,0x00,}},
- {0x6377,2,{0xBD,0xDD,0x00,0x00,}},
- {0x6378,2,{0x92,0xD8,0x00,0x00,}},
- {0x6379,2,{0x92,0xD9,0x00,0x00,}},
- {0x637A,2,{0xDE,0xE0,0x00,0x00,}},
- {0x637B,2,{0xC4,0xED,0x00,0x00,}},
- {0x637C,2,{0x92,0xDA,0x00,0x00,}},
- {0x637D,2,{0x92,0xDB,0x00,0x00,}},
- {0x637E,2,{0x92,0xDC,0x00,0x00,}},
- {0x637F,2,{0x92,0xDD,0x00,0x00,}},
- {0x6380,2,{0xCF,0xC6,0x00,0x00,}},
- {0x6381,2,{0x92,0xDE,0x00,0x00,}},
- {0x6382,2,{0xB5,0xE0,0x00,0x00,}},
- {0x6383,2,{0x92,0xDF,0x00,0x00,}},
- {0x6384,2,{0x92,0xE0,0x00,0x00,}},
- {0x6385,2,{0x92,0xE1,0x00,0x00,}},
- {0x6386,2,{0x92,0xE2,0x00,0x00,}},
- {0x6387,2,{0xB6,0xDE,0x00,0x00,}},
- {0x6388,2,{0xCA,0xDA,0x00,0x00,}},
- {0x6389,2,{0xB5,0xF4,0x00,0x00,}},
- {0x638A,2,{0xDE,0xE5,0x00,0x00,}},
- {0x638B,2,{0x92,0xE3,0x00,0x00,}},
- {0x638C,2,{0xD5,0xC6,0x00,0x00,}},
- {0x638D,2,{0x92,0xE4,0x00,0x00,}},
- {0x638E,2,{0xDE,0xE1,0x00,0x00,}},
- {0x638F,2,{0xCC,0xCD,0x00,0x00,}},
- {0x6390,2,{0xC6,0xFE,0x00,0x00,}},
- {0x6391,2,{0x92,0xE5,0x00,0x00,}},
- {0x6392,2,{0xC5,0xC5,0x00,0x00,}},
- {0x6393,2,{0x92,0xE6,0x00,0x00,}},
- {0x6394,2,{0x92,0xE7,0x00,0x00,}},
- {0x6395,2,{0x92,0xE8,0x00,0x00,}},
- {0x6396,2,{0xD2,0xB4,0x00,0x00,}},
- {0x6397,2,{0x92,0xE9,0x00,0x00,}},
- {0x6398,2,{0xBE,0xF2,0x00,0x00,}},
- {0x6399,2,{0x92,0xEA,0x00,0x00,}},
- {0x639A,2,{0x92,0xEB,0x00,0x00,}},
- {0x639B,2,{0x92,0xEC,0x00,0x00,}},
- {0x639C,2,{0x92,0xED,0x00,0x00,}},
- {0x639D,2,{0x92,0xEE,0x00,0x00,}},
- {0x639E,2,{0x92,0xEF,0x00,0x00,}},
- {0x639F,2,{0x92,0xF0,0x00,0x00,}},
- {0x63A0,2,{0xC2,0xD3,0x00,0x00,}},
- {0x63A1,2,{0x92,0xF1,0x00,0x00,}},
- {0x63A2,2,{0xCC,0xBD,0x00,0x00,}},
- {0x63A3,2,{0xB3,0xB8,0x00,0x00,}},
- {0x63A4,2,{0x92,0xF2,0x00,0x00,}},
- {0x63A5,2,{0xBD,0xD3,0x00,0x00,}},
- {0x63A6,2,{0x92,0xF3,0x00,0x00,}},
- {0x63A7,2,{0xBF,0xD8,0x00,0x00,}},
- {0x63A8,2,{0xCD,0xC6,0x00,0x00,}},
- {0x63A9,2,{0xD1,0xDA,0x00,0x00,}},
- {0x63AA,2,{0xB4,0xEB,0x00,0x00,}},
- {0x63AB,2,{0x92,0xF4,0x00,0x00,}},
- {0x63AC,2,{0xDE,0xE4,0x00,0x00,}},
- {0x63AD,2,{0xDE,0xDD,0x00,0x00,}},
- {0x63AE,2,{0xDE,0xE7,0x00,0x00,}},
- {0x63AF,2,{0x92,0xF5,0x00,0x00,}},
- {0x63B0,2,{0xEA,0xFE,0x00,0x00,}},
- {0x63B1,2,{0x92,0xF6,0x00,0x00,}},
- {0x63B2,2,{0x92,0xF7,0x00,0x00,}},
- {0x63B3,2,{0xC2,0xB0,0x00,0x00,}},
- {0x63B4,2,{0xDE,0xE2,0x00,0x00,}},
- {0x63B5,2,{0x92,0xF8,0x00,0x00,}},
- {0x63B6,2,{0x92,0xF9,0x00,0x00,}},
- {0x63B7,2,{0xD6,0xC0,0x00,0x00,}},
- {0x63B8,2,{0xB5,0xA7,0x00,0x00,}},
- {0x63B9,2,{0x92,0xFA,0x00,0x00,}},
- {0x63BA,2,{0xB2,0xF4,0x00,0x00,}},
- {0x63BB,2,{0x92,0xFB,0x00,0x00,}},
- {0x63BC,2,{0xDE,0xE8,0x00,0x00,}},
- {0x63BD,2,{0x92,0xFC,0x00,0x00,}},
- {0x63BE,2,{0xDE,0xF2,0x00,0x00,}},
- {0x63BF,2,{0x92,0xFD,0x00,0x00,}},
- {0x63C0,2,{0x92,0xFE,0x00,0x00,}},
- {0x63C1,2,{0x93,0x40,0x00,0x00,}},
- {0x63C2,2,{0x93,0x41,0x00,0x00,}},
- {0x63C3,2,{0x93,0x42,0x00,0x00,}},
- {0x63C4,2,{0xDE,0xED,0x00,0x00,}},
- {0x63C5,2,{0x93,0x43,0x00,0x00,}},
- {0x63C6,2,{0xDE,0xF1,0x00,0x00,}},
- {0x63C7,2,{0x93,0x44,0x00,0x00,}},
- {0x63C8,2,{0x93,0x45,0x00,0x00,}},
- {0x63C9,2,{0xC8,0xE0,0x00,0x00,}},
- {0x63CA,2,{0x93,0x46,0x00,0x00,}},
- {0x63CB,2,{0x93,0x47,0x00,0x00,}},
- {0x63CC,2,{0x93,0x48,0x00,0x00,}},
- {0x63CD,2,{0xD7,0xE1,0x00,0x00,}},
- {0x63CE,2,{0xDE,0xEF,0x00,0x00,}},
- {0x63CF,2,{0xC3,0xE8,0x00,0x00,}},
- {0x63D0,2,{0xCC,0xE1,0x00,0x00,}},
- {0x63D1,2,{0x93,0x49,0x00,0x00,}},
- {0x63D2,2,{0xB2,0xE5,0x00,0x00,}},
- {0x63D3,2,{0x93,0x4A,0x00,0x00,}},
- {0x63D4,2,{0x93,0x4B,0x00,0x00,}},
- {0x63D5,2,{0x93,0x4C,0x00,0x00,}},
- {0x63D6,2,{0xD2,0xBE,0x00,0x00,}},
- {0x63D7,2,{0x93,0x4D,0x00,0x00,}},
- {0x63D8,2,{0x93,0x4E,0x00,0x00,}},
- {0x63D9,2,{0x93,0x4F,0x00,0x00,}},
- {0x63DA,2,{0x93,0x50,0x00,0x00,}},
- {0x63DB,2,{0x93,0x51,0x00,0x00,}},
- {0x63DC,2,{0x93,0x52,0x00,0x00,}},
- {0x63DD,2,{0x93,0x53,0x00,0x00,}},
- {0x63DE,2,{0xDE,0xEE,0x00,0x00,}},
- {0x63DF,2,{0x93,0x54,0x00,0x00,}},
- {0x63E0,2,{0xDE,0xEB,0x00,0x00,}},
- {0x63E1,2,{0xCE,0xD5,0x00,0x00,}},
- {0x63E2,2,{0x93,0x55,0x00,0x00,}},
- {0x63E3,2,{0xB4,0xA7,0x00,0x00,}},
- {0x63E4,2,{0x93,0x56,0x00,0x00,}},
- {0x63E5,2,{0x93,0x57,0x00,0x00,}},
- {0x63E6,2,{0x93,0x58,0x00,0x00,}},
- {0x63E7,2,{0x93,0x59,0x00,0x00,}},
- {0x63E8,2,{0x93,0x5A,0x00,0x00,}},
- {0x63E9,2,{0xBF,0xAB,0x00,0x00,}},
- {0x63EA,2,{0xBE,0xBE,0x00,0x00,}},
- {0x63EB,2,{0x93,0x5B,0x00,0x00,}},
- {0x63EC,2,{0x93,0x5C,0x00,0x00,}},
- {0x63ED,2,{0xBD,0xD2,0x00,0x00,}},
- {0x63EE,2,{0x93,0x5D,0x00,0x00,}},
- {0x63EF,2,{0x93,0x5E,0x00,0x00,}},
- {0x63F0,2,{0x93,0x5F,0x00,0x00,}},
- {0x63F1,2,{0x93,0x60,0x00,0x00,}},
- {0x63F2,2,{0xDE,0xE9,0x00,0x00,}},
- {0x63F3,2,{0x93,0x61,0x00,0x00,}},
- {0x63F4,2,{0xD4,0xAE,0x00,0x00,}},
- {0x63F5,2,{0x93,0x62,0x00,0x00,}},
- {0x63F6,2,{0xDE,0xDE,0x00,0x00,}},
- {0x63F7,2,{0x93,0x63,0x00,0x00,}},
- {0x63F8,2,{0xDE,0xEA,0x00,0x00,}},
- {0x63F9,2,{0x93,0x64,0x00,0x00,}},
- {0x63FA,2,{0x93,0x65,0x00,0x00,}},
- {0x63FB,2,{0x93,0x66,0x00,0x00,}},
- {0x63FC,2,{0x93,0x67,0x00,0x00,}},
- {0x63FD,2,{0xC0,0xBF,0x00,0x00,}},
- {0x63FE,2,{0x93,0x68,0x00,0x00,}},
- {0x63FF,2,{0xDE,0xEC,0x00,0x00,}},
- {0x6400,2,{0xB2,0xF3,0x00,0x00,}},
- {0x6401,2,{0xB8,0xE9,0x00,0x00,}},
- {0x6402,2,{0xC2,0xA7,0x00,0x00,}},
- {0x6403,2,{0x93,0x69,0x00,0x00,}},
- {0x6404,2,{0x93,0x6A,0x00,0x00,}},
- {0x6405,2,{0xBD,0xC1,0x00,0x00,}},
- {0x6406,2,{0x93,0x6B,0x00,0x00,}},
- {0x6407,2,{0x93,0x6C,0x00,0x00,}},
- {0x6408,2,{0x93,0x6D,0x00,0x00,}},
- {0x6409,2,{0x93,0x6E,0x00,0x00,}},
- {0x640A,2,{0x93,0x6F,0x00,0x00,}},
- {0x640B,2,{0xDE,0xF5,0x00,0x00,}},
- {0x640C,2,{0xDE,0xF8,0x00,0x00,}},
- {0x640D,2,{0x93,0x70,0x00,0x00,}},
- {0x640E,2,{0x93,0x71,0x00,0x00,}},
- {0x640F,2,{0xB2,0xAB,0x00,0x00,}},
- {0x6410,2,{0xB4,0xA4,0x00,0x00,}},
- {0x6411,2,{0x93,0x72,0x00,0x00,}},
- {0x6412,2,{0x93,0x73,0x00,0x00,}},
- {0x6413,2,{0xB4,0xEA,0x00,0x00,}},
- {0x6414,2,{0xC9,0xA6,0x00,0x00,}},
- {0x6415,2,{0x93,0x74,0x00,0x00,}},
- {0x6416,2,{0x93,0x75,0x00,0x00,}},
- {0x6417,2,{0x93,0x76,0x00,0x00,}},
- {0x6418,2,{0x93,0x77,0x00,0x00,}},
- {0x6419,2,{0x93,0x78,0x00,0x00,}},
- {0x641A,2,{0x93,0x79,0x00,0x00,}},
- {0x641B,2,{0xDE,0xF6,0x00,0x00,}},
- {0x641C,2,{0xCB,0xD1,0x00,0x00,}},
- {0x641D,2,{0x93,0x7A,0x00,0x00,}},
- {0x641E,2,{0xB8,0xE3,0x00,0x00,}},
- {0x641F,2,{0x93,0x7B,0x00,0x00,}},
- {0x6420,2,{0xDE,0xF7,0x00,0x00,}},
- {0x6421,2,{0xDE,0xFA,0x00,0x00,}},
- {0x6422,2,{0x93,0x7C,0x00,0x00,}},
- {0x6423,2,{0x93,0x7D,0x00,0x00,}},
- {0x6424,2,{0x93,0x7E,0x00,0x00,}},
- {0x6425,2,{0x93,0x80,0x00,0x00,}},
- {0x6426,2,{0xDE,0xF9,0x00,0x00,}},
- {0x6427,2,{0x93,0x81,0x00,0x00,}},
- {0x6428,2,{0x93,0x82,0x00,0x00,}},
- {0x6429,2,{0x93,0x83,0x00,0x00,}},
- {0x642A,2,{0xCC,0xC2,0x00,0x00,}},
- {0x642B,2,{0x93,0x84,0x00,0x00,}},
- {0x642C,2,{0xB0,0xE1,0x00,0x00,}},
- {0x642D,2,{0xB4,0xEE,0x00,0x00,}},
- {0x642E,2,{0x93,0x85,0x00,0x00,}},
- {0x642F,2,{0x93,0x86,0x00,0x00,}},
- {0x6430,2,{0x93,0x87,0x00,0x00,}},
- {0x6431,2,{0x93,0x88,0x00,0x00,}},
- {0x6432,2,{0x93,0x89,0x00,0x00,}},
- {0x6433,2,{0x93,0x8A,0x00,0x00,}},
- {0x6434,2,{0xE5,0xBA,0x00,0x00,}},
- {0x6435,2,{0x93,0x8B,0x00,0x00,}},
- {0x6436,2,{0x93,0x8C,0x00,0x00,}},
- {0x6437,2,{0x93,0x8D,0x00,0x00,}},
- {0x6438,2,{0x93,0x8E,0x00,0x00,}},
- {0x6439,2,{0x93,0x8F,0x00,0x00,}},
- {0x643A,2,{0xD0,0xAF,0x00,0x00,}},
- {0x643B,2,{0x93,0x90,0x00,0x00,}},
- {0x643C,2,{0x93,0x91,0x00,0x00,}},
- {0x643D,2,{0xB2,0xEB,0x00,0x00,}},
- {0x643E,2,{0x93,0x92,0x00,0x00,}},
- {0x643F,2,{0xEB,0xA1,0x00,0x00,}},
- {0x6440,2,{0x93,0x93,0x00,0x00,}},
- {0x6441,2,{0xDE,0xF4,0x00,0x00,}},
- {0x6442,2,{0x93,0x94,0x00,0x00,}},
- {0x6443,2,{0x93,0x95,0x00,0x00,}},
- {0x6444,2,{0xC9,0xE3,0x00,0x00,}},
- {0x6445,2,{0xDE,0xF3,0x00,0x00,}},
- {0x6446,2,{0xB0,0xDA,0x00,0x00,}},
- {0x6447,2,{0xD2,0xA1,0x00,0x00,}},
- {0x6448,2,{0xB1,0xF7,0x00,0x00,}},
- {0x6449,2,{0x93,0x96,0x00,0x00,}},
- {0x644A,2,{0xCC,0xAF,0x00,0x00,}},
- {0x644B,2,{0x93,0x97,0x00,0x00,}},
- {0x644C,2,{0x93,0x98,0x00,0x00,}},
- {0x644D,2,{0x93,0x99,0x00,0x00,}},
- {0x644E,2,{0x93,0x9A,0x00,0x00,}},
- {0x644F,2,{0x93,0x9B,0x00,0x00,}},
- {0x6450,2,{0x93,0x9C,0x00,0x00,}},
- {0x6451,2,{0x93,0x9D,0x00,0x00,}},
- {0x6452,2,{0xDE,0xF0,0x00,0x00,}},
- {0x6453,2,{0x93,0x9E,0x00,0x00,}},
- {0x6454,2,{0xCB,0xA4,0x00,0x00,}},
- {0x6455,2,{0x93,0x9F,0x00,0x00,}},
- {0x6456,2,{0x93,0xA0,0x00,0x00,}},
- {0x6457,2,{0x93,0xA1,0x00,0x00,}},
- {0x6458,2,{0xD5,0xAA,0x00,0x00,}},
- {0x6459,2,{0x93,0xA2,0x00,0x00,}},
- {0x645A,2,{0x93,0xA3,0x00,0x00,}},
- {0x645B,2,{0x93,0xA4,0x00,0x00,}},
- {0x645C,2,{0x93,0xA5,0x00,0x00,}},
- {0x645D,2,{0x93,0xA6,0x00,0x00,}},
- {0x645E,2,{0xDE,0xFB,0x00,0x00,}},
- {0x645F,2,{0x93,0xA7,0x00,0x00,}},
- {0x6460,2,{0x93,0xA8,0x00,0x00,}},
- {0x6461,2,{0x93,0xA9,0x00,0x00,}},
- {0x6462,2,{0x93,0xAA,0x00,0x00,}},
- {0x6463,2,{0x93,0xAB,0x00,0x00,}},
- {0x6464,2,{0x93,0xAC,0x00,0x00,}},
- {0x6465,2,{0x93,0xAD,0x00,0x00,}},
- {0x6466,2,{0x93,0xAE,0x00,0x00,}},
- {0x6467,2,{0xB4,0xDD,0x00,0x00,}},
- {0x6468,2,{0x93,0xAF,0x00,0x00,}},
- {0x6469,2,{0xC4,0xA6,0x00,0x00,}},
- {0x646A,2,{0x93,0xB0,0x00,0x00,}},
- {0x646B,2,{0x93,0xB1,0x00,0x00,}},
- {0x646C,2,{0x93,0xB2,0x00,0x00,}},
- {0x646D,2,{0xDE,0xFD,0x00,0x00,}},
- {0x646E,2,{0x93,0xB3,0x00,0x00,}},
- {0x646F,2,{0x93,0xB4,0x00,0x00,}},
- {0x6470,2,{0x93,0xB5,0x00,0x00,}},
- {0x6471,2,{0x93,0xB6,0x00,0x00,}},
- {0x6472,2,{0x93,0xB7,0x00,0x00,}},
- {0x6473,2,{0x93,0xB8,0x00,0x00,}},
- {0x6474,2,{0x93,0xB9,0x00,0x00,}},
- {0x6475,2,{0x93,0xBA,0x00,0x00,}},
- {0x6476,2,{0x93,0xBB,0x00,0x00,}},
- {0x6477,2,{0x93,0xBC,0x00,0x00,}},
- {0x6478,2,{0xC3,0xFE,0x00,0x00,}},
- {0x6479,2,{0xC4,0xA1,0x00,0x00,}},
- {0x647A,2,{0xDF,0xA1,0x00,0x00,}},
- {0x647B,2,{0x93,0xBD,0x00,0x00,}},
- {0x647C,2,{0x93,0xBE,0x00,0x00,}},
- {0x647D,2,{0x93,0xBF,0x00,0x00,}},
- {0x647E,2,{0x93,0xC0,0x00,0x00,}},
- {0x647F,2,{0x93,0xC1,0x00,0x00,}},
- {0x6480,2,{0x93,0xC2,0x00,0x00,}},
- {0x6481,2,{0x93,0xC3,0x00,0x00,}},
- {0x6482,2,{0xC1,0xCC,0x00,0x00,}},
- {0x6483,2,{0x93,0xC4,0x00,0x00,}},
- {0x6484,2,{0xDE,0xFC,0x00,0x00,}},
- {0x6485,2,{0xBE,0xEF,0x00,0x00,}},
- {0x6486,2,{0x93,0xC5,0x00,0x00,}},
- {0x6487,2,{0xC6,0xB2,0x00,0x00,}},
- {0x6488,2,{0x93,0xC6,0x00,0x00,}},
- {0x6489,2,{0x93,0xC7,0x00,0x00,}},
- {0x648A,2,{0x93,0xC8,0x00,0x00,}},
- {0x648B,2,{0x93,0xC9,0x00,0x00,}},
- {0x648C,2,{0x93,0xCA,0x00,0x00,}},
- {0x648D,2,{0x93,0xCB,0x00,0x00,}},
- {0x648E,2,{0x93,0xCC,0x00,0x00,}},
- {0x648F,2,{0x93,0xCD,0x00,0x00,}},
- {0x6490,2,{0x93,0xCE,0x00,0x00,}},
- {0x6491,2,{0xB3,0xC5,0x00,0x00,}},
- {0x6492,2,{0xC8,0xF6,0x00,0x00,}},
- {0x6493,2,{0x93,0xCF,0x00,0x00,}},
- {0x6494,2,{0x93,0xD0,0x00,0x00,}},
- {0x6495,2,{0xCB,0xBA,0x00,0x00,}},
- {0x6496,2,{0xDE,0xFE,0x00,0x00,}},
- {0x6497,2,{0x93,0xD1,0x00,0x00,}},
- {0x6498,2,{0x93,0xD2,0x00,0x00,}},
- {0x6499,2,{0xDF,0xA4,0x00,0x00,}},
- {0x649A,2,{0x93,0xD3,0x00,0x00,}},
- {0x649B,2,{0x93,0xD4,0x00,0x00,}},
- {0x649C,2,{0x93,0xD5,0x00,0x00,}},
- {0x649D,2,{0x93,0xD6,0x00,0x00,}},
- {0x649E,2,{0xD7,0xB2,0x00,0x00,}},
- {0x649F,2,{0x93,0xD7,0x00,0x00,}},
- {0x64A0,2,{0x93,0xD8,0x00,0x00,}},
- {0x64A1,2,{0x93,0xD9,0x00,0x00,}},
- {0x64A2,2,{0x93,0xDA,0x00,0x00,}},
- {0x64A3,2,{0x93,0xDB,0x00,0x00,}},
- {0x64A4,2,{0xB3,0xB7,0x00,0x00,}},
- {0x64A5,2,{0x93,0xDC,0x00,0x00,}},
- {0x64A6,2,{0x93,0xDD,0x00,0x00,}},
- {0x64A7,2,{0x93,0xDE,0x00,0x00,}},
- {0x64A8,2,{0x93,0xDF,0x00,0x00,}},
- {0x64A9,2,{0xC1,0xC3,0x00,0x00,}},
- {0x64AA,2,{0x93,0xE0,0x00,0x00,}},
- {0x64AB,2,{0x93,0xE1,0x00,0x00,}},
- {0x64AC,2,{0xC7,0xCB,0x00,0x00,}},
- {0x64AD,2,{0xB2,0xA5,0x00,0x00,}},
- {0x64AE,2,{0xB4,0xE9,0x00,0x00,}},
- {0x64AF,2,{0x93,0xE2,0x00,0x00,}},
- {0x64B0,2,{0xD7,0xAB,0x00,0x00,}},
- {0x64B1,2,{0x93,0xE3,0x00,0x00,}},
- {0x64B2,2,{0x93,0xE4,0x00,0x00,}},
- {0x64B3,2,{0x93,0xE5,0x00,0x00,}},
- {0x64B4,2,{0x93,0xE6,0x00,0x00,}},
- {0x64B5,2,{0xC4,0xEC,0x00,0x00,}},
- {0x64B6,2,{0x93,0xE7,0x00,0x00,}},
- {0x64B7,2,{0xDF,0xA2,0x00,0x00,}},
- {0x64B8,2,{0xDF,0xA3,0x00,0x00,}},
- {0x64B9,2,{0x93,0xE8,0x00,0x00,}},
- {0x64BA,2,{0xDF,0xA5,0x00,0x00,}},
- {0x64BB,2,{0x93,0xE9,0x00,0x00,}},
- {0x64BC,2,{0xBA,0xB3,0x00,0x00,}},
- {0x64BD,2,{0x93,0xEA,0x00,0x00,}},
- {0x64BE,2,{0x93,0xEB,0x00,0x00,}},
- {0x64BF,2,{0x93,0xEC,0x00,0x00,}},
- {0x64C0,2,{0xDF,0xA6,0x00,0x00,}},
- {0x64C1,2,{0x93,0xED,0x00,0x00,}},
- {0x64C2,2,{0xC0,0xDE,0x00,0x00,}},
- {0x64C3,2,{0x93,0xEE,0x00,0x00,}},
- {0x64C4,2,{0x93,0xEF,0x00,0x00,}},
- {0x64C5,2,{0xC9,0xC3,0x00,0x00,}},
- {0x64C6,2,{0x93,0xF0,0x00,0x00,}},
- {0x64C7,2,{0x93,0xF1,0x00,0x00,}},
- {0x64C8,2,{0x93,0xF2,0x00,0x00,}},
- {0x64C9,2,{0x93,0xF3,0x00,0x00,}},
- {0x64CA,2,{0x93,0xF4,0x00,0x00,}},
- {0x64CB,2,{0x93,0xF5,0x00,0x00,}},
- {0x64CC,2,{0x93,0xF6,0x00,0x00,}},
- {0x64CD,2,{0xB2,0xD9,0x00,0x00,}},
- {0x64CE,2,{0xC7,0xE6,0x00,0x00,}},
- {0x64CF,2,{0x93,0xF7,0x00,0x00,}},
- {0x64D0,2,{0xDF,0xA7,0x00,0x00,}},
- {0x64D1,2,{0x93,0xF8,0x00,0x00,}},
- {0x64D2,2,{0xC7,0xDC,0x00,0x00,}},
- {0x64D3,2,{0x93,0xF9,0x00,0x00,}},
- {0x64D4,2,{0x93,0xFA,0x00,0x00,}},
- {0x64D5,2,{0x93,0xFB,0x00,0x00,}},
- {0x64D6,2,{0x93,0xFC,0x00,0x00,}},
- {0x64D7,2,{0xDF,0xA8,0x00,0x00,}},
- {0x64D8,2,{0xEB,0xA2,0x00,0x00,}},
- {0x64D9,2,{0x93,0xFD,0x00,0x00,}},
- {0x64DA,2,{0x93,0xFE,0x00,0x00,}},
- {0x64DB,2,{0x94,0x40,0x00,0x00,}},
- {0x64DC,2,{0x94,0x41,0x00,0x00,}},
- {0x64DD,2,{0x94,0x42,0x00,0x00,}},
- {0x64DE,2,{0xCB,0xD3,0x00,0x00,}},
- {0x64DF,2,{0x94,0x43,0x00,0x00,}},
- {0x64E0,2,{0x94,0x44,0x00,0x00,}},
- {0x64E1,2,{0x94,0x45,0x00,0x00,}},
- {0x64E2,2,{0xDF,0xAA,0x00,0x00,}},
- {0x64E3,2,{0x94,0x46,0x00,0x00,}},
- {0x64E4,2,{0xDF,0xA9,0x00,0x00,}},
- {0x64E5,2,{0x94,0x47,0x00,0x00,}},
- {0x64E6,2,{0xB2,0xC1,0x00,0x00,}},
- {0x64E7,2,{0x94,0x48,0x00,0x00,}},
- {0x64E8,2,{0x94,0x49,0x00,0x00,}},
- {0x64E9,2,{0x94,0x4A,0x00,0x00,}},
- {0x64EA,2,{0x94,0x4B,0x00,0x00,}},
- {0x64EB,2,{0x94,0x4C,0x00,0x00,}},
- {0x64EC,2,{0x94,0x4D,0x00,0x00,}},
- {0x64ED,2,{0x94,0x4E,0x00,0x00,}},
- {0x64EE,2,{0x94,0x4F,0x00,0x00,}},
- {0x64EF,2,{0x94,0x50,0x00,0x00,}},
- {0x64F0,2,{0x94,0x51,0x00,0x00,}},
- {0x64F1,2,{0x94,0x52,0x00,0x00,}},
- {0x64F2,2,{0x94,0x53,0x00,0x00,}},
- {0x64F3,2,{0x94,0x54,0x00,0x00,}},
- {0x64F4,2,{0x94,0x55,0x00,0x00,}},
- {0x64F5,2,{0x94,0x56,0x00,0x00,}},
- {0x64F6,2,{0x94,0x57,0x00,0x00,}},
- {0x64F7,2,{0x94,0x58,0x00,0x00,}},
- {0x64F8,2,{0x94,0x59,0x00,0x00,}},
- {0x64F9,2,{0x94,0x5A,0x00,0x00,}},
- {0x64FA,2,{0x94,0x5B,0x00,0x00,}},
- {0x64FB,2,{0x94,0x5C,0x00,0x00,}},
- {0x64FC,2,{0x94,0x5D,0x00,0x00,}},
- {0x64FD,2,{0x94,0x5E,0x00,0x00,}},
- {0x64FE,2,{0x94,0x5F,0x00,0x00,}},
- {0x64FF,2,{0x94,0x60,0x00,0x00,}},
- {0x6500,2,{0xC5,0xCA,0x00,0x00,}},
- {0x6501,2,{0x94,0x61,0x00,0x00,}},
- {0x6502,2,{0x94,0x62,0x00,0x00,}},
- {0x6503,2,{0x94,0x63,0x00,0x00,}},
- {0x6504,2,{0x94,0x64,0x00,0x00,}},
- {0x6505,2,{0x94,0x65,0x00,0x00,}},
- {0x6506,2,{0x94,0x66,0x00,0x00,}},
- {0x6507,2,{0x94,0x67,0x00,0x00,}},
- {0x6508,2,{0x94,0x68,0x00,0x00,}},
- {0x6509,2,{0xDF,0xAB,0x00,0x00,}},
- {0x650A,2,{0x94,0x69,0x00,0x00,}},
- {0x650B,2,{0x94,0x6A,0x00,0x00,}},
- {0x650C,2,{0x94,0x6B,0x00,0x00,}},
- {0x650D,2,{0x94,0x6C,0x00,0x00,}},
- {0x650E,2,{0x94,0x6D,0x00,0x00,}},
- {0x650F,2,{0x94,0x6E,0x00,0x00,}},
- {0x6510,2,{0x94,0x6F,0x00,0x00,}},
- {0x6511,2,{0x94,0x70,0x00,0x00,}},
- {0x6512,2,{0xD4,0xDC,0x00,0x00,}},
- {0x6513,2,{0x94,0x71,0x00,0x00,}},
- {0x6514,2,{0x94,0x72,0x00,0x00,}},
- {0x6515,2,{0x94,0x73,0x00,0x00,}},
- {0x6516,2,{0x94,0x74,0x00,0x00,}},
- {0x6517,2,{0x94,0x75,0x00,0x00,}},
- {0x6518,2,{0xC8,0xC1,0x00,0x00,}},
- {0x6519,2,{0x94,0x76,0x00,0x00,}},
- {0x651A,2,{0x94,0x77,0x00,0x00,}},
- {0x651B,2,{0x94,0x78,0x00,0x00,}},
- {0x651C,2,{0x94,0x79,0x00,0x00,}},
- {0x651D,2,{0x94,0x7A,0x00,0x00,}},
- {0x651E,2,{0x94,0x7B,0x00,0x00,}},
- {0x651F,2,{0x94,0x7C,0x00,0x00,}},
- {0x6520,2,{0x94,0x7D,0x00,0x00,}},
- {0x6521,2,{0x94,0x7E,0x00,0x00,}},
- {0x6522,2,{0x94,0x80,0x00,0x00,}},
- {0x6523,2,{0x94,0x81,0x00,0x00,}},
- {0x6524,2,{0x94,0x82,0x00,0x00,}},
- {0x6525,2,{0xDF,0xAC,0x00,0x00,}},
- {0x6526,2,{0x94,0x83,0x00,0x00,}},
- {0x6527,2,{0x94,0x84,0x00,0x00,}},
- {0x6528,2,{0x94,0x85,0x00,0x00,}},
- {0x6529,2,{0x94,0x86,0x00,0x00,}},
- {0x652A,2,{0x94,0x87,0x00,0x00,}},
- {0x652B,2,{0xBE,0xF0,0x00,0x00,}},
- {0x652C,2,{0x94,0x88,0x00,0x00,}},
- {0x652D,2,{0x94,0x89,0x00,0x00,}},
- {0x652E,2,{0xDF,0xAD,0x00,0x00,}},
- {0x652F,2,{0xD6,0xA7,0x00,0x00,}},
- {0x6530,2,{0x94,0x8A,0x00,0x00,}},
- {0x6531,2,{0x94,0x8B,0x00,0x00,}},
- {0x6532,2,{0x94,0x8C,0x00,0x00,}},
- {0x6533,2,{0x94,0x8D,0x00,0x00,}},
- {0x6534,2,{0xEA,0xB7,0x00,0x00,}},
- {0x6535,2,{0xEB,0xB6,0x00,0x00,}},
- {0x6536,2,{0xCA,0xD5,0x00,0x00,}},
- {0x6537,2,{0x94,0x8E,0x00,0x00,}},
- {0x6538,2,{0xD8,0xFC,0x00,0x00,}},
- {0x6539,2,{0xB8,0xC4,0x00,0x00,}},
- {0x653A,2,{0x94,0x8F,0x00,0x00,}},
- {0x653B,2,{0xB9,0xA5,0x00,0x00,}},
- {0x653C,2,{0x94,0x90,0x00,0x00,}},
- {0x653D,2,{0x94,0x91,0x00,0x00,}},
- {0x653E,2,{0xB7,0xC5,0x00,0x00,}},
- {0x653F,2,{0xD5,0xFE,0x00,0x00,}},
- {0x6540,2,{0x94,0x92,0x00,0x00,}},
- {0x6541,2,{0x94,0x93,0x00,0x00,}},
- {0x6542,2,{0x94,0x94,0x00,0x00,}},
- {0x6543,2,{0x94,0x95,0x00,0x00,}},
- {0x6544,2,{0x94,0x96,0x00,0x00,}},
- {0x6545,2,{0xB9,0xCA,0x00,0x00,}},
- {0x6546,2,{0x94,0x97,0x00,0x00,}},
- {0x6547,2,{0x94,0x98,0x00,0x00,}},
- {0x6548,2,{0xD0,0xA7,0x00,0x00,}},
- {0x6549,2,{0xF4,0xCD,0x00,0x00,}},
- {0x654A,2,{0x94,0x99,0x00,0x00,}},
- {0x654B,2,{0x94,0x9A,0x00,0x00,}},
- {0x654C,2,{0xB5,0xD0,0x00,0x00,}},
- {0x654D,2,{0x94,0x9B,0x00,0x00,}},
- {0x654E,2,{0x94,0x9C,0x00,0x00,}},
- {0x654F,2,{0xC3,0xF4,0x00,0x00,}},
- {0x6550,2,{0x94,0x9D,0x00,0x00,}},
- {0x6551,2,{0xBE,0xC8,0x00,0x00,}},
- {0x6552,2,{0x94,0x9E,0x00,0x00,}},
- {0x6553,2,{0x94,0x9F,0x00,0x00,}},
- {0x6554,2,{0x94,0xA0,0x00,0x00,}},
- {0x6555,2,{0xEB,0xB7,0x00,0x00,}},
- {0x6556,2,{0xB0,0xBD,0x00,0x00,}},
- {0x6557,2,{0x94,0xA1,0x00,0x00,}},
- {0x6558,2,{0x94,0xA2,0x00,0x00,}},
- {0x6559,2,{0xBD,0xCC,0x00,0x00,}},
- {0x655A,2,{0x94,0xA3,0x00,0x00,}},
- {0x655B,2,{0xC1,0xB2,0x00,0x00,}},
- {0x655C,2,{0x94,0xA4,0x00,0x00,}},
- {0x655D,2,{0xB1,0xD6,0x00,0x00,}},
- {0x655E,2,{0xB3,0xA8,0x00,0x00,}},
- {0x655F,2,{0x94,0xA5,0x00,0x00,}},
- {0x6560,2,{0x94,0xA6,0x00,0x00,}},
- {0x6561,2,{0x94,0xA7,0x00,0x00,}},
- {0x6562,2,{0xB8,0xD2,0x00,0x00,}},
- {0x6563,2,{0xC9,0xA2,0x00,0x00,}},
- {0x6564,2,{0x94,0xA8,0x00,0x00,}},
- {0x6565,2,{0x94,0xA9,0x00,0x00,}},
- {0x6566,2,{0xB6,0xD8,0x00,0x00,}},
- {0x6567,2,{0x94,0xAA,0x00,0x00,}},
- {0x6568,2,{0x94,0xAB,0x00,0x00,}},
- {0x6569,2,{0x94,0xAC,0x00,0x00,}},
- {0x656A,2,{0x94,0xAD,0x00,0x00,}},
- {0x656B,2,{0xEB,0xB8,0x00,0x00,}},
- {0x656C,2,{0xBE,0xB4,0x00,0x00,}},
- {0x656D,2,{0x94,0xAE,0x00,0x00,}},
- {0x656E,2,{0x94,0xAF,0x00,0x00,}},
- {0x656F,2,{0x94,0xB0,0x00,0x00,}},
- {0x6570,2,{0xCA,0xFD,0x00,0x00,}},
- {0x6571,2,{0x94,0xB1,0x00,0x00,}},
- {0x6572,2,{0xC7,0xC3,0x00,0x00,}},
- {0x6573,2,{0x94,0xB2,0x00,0x00,}},
- {0x6574,2,{0xD5,0xFB,0x00,0x00,}},
- {0x6575,2,{0x94,0xB3,0x00,0x00,}},
- {0x6576,2,{0x94,0xB4,0x00,0x00,}},
- {0x6577,2,{0xB7,0xF3,0x00,0x00,}},
- {0x6578,2,{0x94,0xB5,0x00,0x00,}},
- {0x6579,2,{0x94,0xB6,0x00,0x00,}},
- {0x657A,2,{0x94,0xB7,0x00,0x00,}},
- {0x657B,2,{0x94,0xB8,0x00,0x00,}},
- {0x657C,2,{0x94,0xB9,0x00,0x00,}},
- {0x657D,2,{0x94,0xBA,0x00,0x00,}},
- {0x657E,2,{0x94,0xBB,0x00,0x00,}},
- {0x657F,2,{0x94,0xBC,0x00,0x00,}},
- {0x6580,2,{0x94,0xBD,0x00,0x00,}},
- {0x6581,2,{0x94,0xBE,0x00,0x00,}},
- {0x6582,2,{0x94,0xBF,0x00,0x00,}},
- {0x6583,2,{0x94,0xC0,0x00,0x00,}},
- {0x6584,2,{0x94,0xC1,0x00,0x00,}},
- {0x6585,2,{0x94,0xC2,0x00,0x00,}},
- {0x6586,2,{0x94,0xC3,0x00,0x00,}},
- {0x6587,2,{0xCE,0xC4,0x00,0x00,}},
- {0x6588,2,{0x94,0xC4,0x00,0x00,}},
- {0x6589,2,{0x94,0xC5,0x00,0x00,}},
- {0x658A,2,{0x94,0xC6,0x00,0x00,}},
- {0x658B,2,{0xD5,0xAB,0x00,0x00,}},
- {0x658C,2,{0xB1,0xF3,0x00,0x00,}},
- {0x658D,2,{0x94,0xC7,0x00,0x00,}},
- {0x658E,2,{0x94,0xC8,0x00,0x00,}},
- {0x658F,2,{0x94,0xC9,0x00,0x00,}},
- {0x6590,2,{0xEC,0xB3,0x00,0x00,}},
- {0x6591,2,{0xB0,0xDF,0x00,0x00,}},
- {0x6592,2,{0x94,0xCA,0x00,0x00,}},
- {0x6593,2,{0xEC,0xB5,0x00,0x00,}},
- {0x6594,2,{0x94,0xCB,0x00,0x00,}},
- {0x6595,2,{0x94,0xCC,0x00,0x00,}},
- {0x6596,2,{0x94,0xCD,0x00,0x00,}},
- {0x6597,2,{0xB6,0xB7,0x00,0x00,}},
- {0x6598,2,{0x94,0xCE,0x00,0x00,}},
- {0x6599,2,{0xC1,0xCF,0x00,0x00,}},
- {0x659A,2,{0x94,0xCF,0x00,0x00,}},
- {0x659B,2,{0xF5,0xFA,0x00,0x00,}},
- {0x659C,2,{0xD0,0xB1,0x00,0x00,}},
- {0x659D,2,{0x94,0xD0,0x00,0x00,}},
- {0x659E,2,{0x94,0xD1,0x00,0x00,}},
- {0x659F,2,{0xD5,0xE5,0x00,0x00,}},
- {0x65A0,2,{0x94,0xD2,0x00,0x00,}},
- {0x65A1,2,{0xCE,0xD3,0x00,0x00,}},
- {0x65A2,2,{0x94,0xD3,0x00,0x00,}},
- {0x65A3,2,{0x94,0xD4,0x00,0x00,}},
- {0x65A4,2,{0xBD,0xEF,0x00,0x00,}},
- {0x65A5,2,{0xB3,0xE2,0x00,0x00,}},
- {0x65A6,2,{0x94,0xD5,0x00,0x00,}},
- {0x65A7,2,{0xB8,0xAB,0x00,0x00,}},
- {0x65A8,2,{0x94,0xD6,0x00,0x00,}},
- {0x65A9,2,{0xD5,0xB6,0x00,0x00,}},
- {0x65AA,2,{0x94,0xD7,0x00,0x00,}},
- {0x65AB,2,{0xED,0xBD,0x00,0x00,}},
- {0x65AC,2,{0x94,0xD8,0x00,0x00,}},
- {0x65AD,2,{0xB6,0xCF,0x00,0x00,}},
- {0x65AE,2,{0x94,0xD9,0x00,0x00,}},
- {0x65AF,2,{0xCB,0xB9,0x00,0x00,}},
- {0x65B0,2,{0xD0,0xC2,0x00,0x00,}},
- {0x65B1,2,{0x94,0xDA,0x00,0x00,}},
- {0x65B2,2,{0x94,0xDB,0x00,0x00,}},
- {0x65B3,2,{0x94,0xDC,0x00,0x00,}},
- {0x65B4,2,{0x94,0xDD,0x00,0x00,}},
- {0x65B5,2,{0x94,0xDE,0x00,0x00,}},
- {0x65B6,2,{0x94,0xDF,0x00,0x00,}},
- {0x65B7,2,{0x94,0xE0,0x00,0x00,}},
- {0x65B8,2,{0x94,0xE1,0x00,0x00,}},
- {0x65B9,2,{0xB7,0xBD,0x00,0x00,}},
- {0x65BA,2,{0x94,0xE2,0x00,0x00,}},
- {0x65BB,2,{0x94,0xE3,0x00,0x00,}},
- {0x65BC,2,{0xEC,0xB6,0x00,0x00,}},
- {0x65BD,2,{0xCA,0xA9,0x00,0x00,}},
- {0x65BE,2,{0x94,0xE4,0x00,0x00,}},
- {0x65BF,2,{0x94,0xE5,0x00,0x00,}},
- {0x65C0,2,{0x94,0xE6,0x00,0x00,}},
- {0x65C1,2,{0xC5,0xD4,0x00,0x00,}},
- {0x65C2,2,{0x94,0xE7,0x00,0x00,}},
- {0x65C3,2,{0xEC,0xB9,0x00,0x00,}},
- {0x65C4,2,{0xEC,0xB8,0x00,0x00,}},
- {0x65C5,2,{0xC2,0xC3,0x00,0x00,}},
- {0x65C6,2,{0xEC,0xB7,0x00,0x00,}},
- {0x65C7,2,{0x94,0xE8,0x00,0x00,}},
- {0x65C8,2,{0x94,0xE9,0x00,0x00,}},
- {0x65C9,2,{0x94,0xEA,0x00,0x00,}},
- {0x65CA,2,{0x94,0xEB,0x00,0x00,}},
- {0x65CB,2,{0xD0,0xFD,0x00,0x00,}},
- {0x65CC,2,{0xEC,0xBA,0x00,0x00,}},
- {0x65CD,2,{0x94,0xEC,0x00,0x00,}},
- {0x65CE,2,{0xEC,0xBB,0x00,0x00,}},
- {0x65CF,2,{0xD7,0xE5,0x00,0x00,}},
- {0x65D0,2,{0x94,0xED,0x00,0x00,}},
- {0x65D1,2,{0x94,0xEE,0x00,0x00,}},
- {0x65D2,2,{0xEC,0xBC,0x00,0x00,}},
- {0x65D3,2,{0x94,0xEF,0x00,0x00,}},
- {0x65D4,2,{0x94,0xF0,0x00,0x00,}},
- {0x65D5,2,{0x94,0xF1,0x00,0x00,}},
- {0x65D6,2,{0xEC,0xBD,0x00,0x00,}},
- {0x65D7,2,{0xC6,0xEC,0x00,0x00,}},
- {0x65D8,2,{0x94,0xF2,0x00,0x00,}},
- {0x65D9,2,{0x94,0xF3,0x00,0x00,}},
- {0x65DA,2,{0x94,0xF4,0x00,0x00,}},
- {0x65DB,2,{0x94,0xF5,0x00,0x00,}},
- {0x65DC,2,{0x94,0xF6,0x00,0x00,}},
- {0x65DD,2,{0x94,0xF7,0x00,0x00,}},
- {0x65DE,2,{0x94,0xF8,0x00,0x00,}},
- {0x65DF,2,{0x94,0xF9,0x00,0x00,}},
- {0x65E0,2,{0xCE,0xDE,0x00,0x00,}},
- {0x65E1,2,{0x94,0xFA,0x00,0x00,}},
- {0x65E2,2,{0xBC,0xC8,0x00,0x00,}},
- {0x65E3,2,{0x94,0xFB,0x00,0x00,}},
- {0x65E4,2,{0x94,0xFC,0x00,0x00,}},
- {0x65E5,2,{0xC8,0xD5,0x00,0x00,}},
- {0x65E6,2,{0xB5,0xA9,0x00,0x00,}},
- {0x65E7,2,{0xBE,0xC9,0x00,0x00,}},
- {0x65E8,2,{0xD6,0xBC,0x00,0x00,}},
- {0x65E9,2,{0xD4,0xE7,0x00,0x00,}},
- {0x65EA,2,{0x94,0xFD,0x00,0x00,}},
- {0x65EB,2,{0x94,0xFE,0x00,0x00,}},
- {0x65EC,2,{0xD1,0xAE,0x00,0x00,}},
- {0x65ED,2,{0xD0,0xF1,0x00,0x00,}},
- {0x65EE,2,{0xEA,0xB8,0x00,0x00,}},
- {0x65EF,2,{0xEA,0xB9,0x00,0x00,}},
- {0x65F0,2,{0xEA,0xBA,0x00,0x00,}},
- {0x65F1,2,{0xBA,0xB5,0x00,0x00,}},
- {0x65F2,2,{0x95,0x40,0x00,0x00,}},
- {0x65F3,2,{0x95,0x41,0x00,0x00,}},
- {0x65F4,2,{0x95,0x42,0x00,0x00,}},
- {0x65F5,2,{0x95,0x43,0x00,0x00,}},
- {0x65F6,2,{0xCA,0xB1,0x00,0x00,}},
- {0x65F7,2,{0xBF,0xF5,0x00,0x00,}},
- {0x65F8,2,{0x95,0x44,0x00,0x00,}},
- {0x65F9,2,{0x95,0x45,0x00,0x00,}},
- {0x65FA,2,{0xCD,0xFA,0x00,0x00,}},
- {0x65FB,2,{0x95,0x46,0x00,0x00,}},
- {0x65FC,2,{0x95,0x47,0x00,0x00,}},
- {0x65FD,2,{0x95,0x48,0x00,0x00,}},
- {0x65FE,2,{0x95,0x49,0x00,0x00,}},
- {0x65FF,2,{0x95,0x4A,0x00,0x00,}},
- {0x6600,2,{0xEA,0xC0,0x00,0x00,}},
- {0x6601,2,{0x95,0x4B,0x00,0x00,}},
- {0x6602,2,{0xB0,0xBA,0x00,0x00,}},
- {0x6603,2,{0xEA,0xBE,0x00,0x00,}},
- {0x6604,2,{0x95,0x4C,0x00,0x00,}},
- {0x6605,2,{0x95,0x4D,0x00,0x00,}},
- {0x6606,2,{0xC0,0xA5,0x00,0x00,}},
- {0x6607,2,{0x95,0x4E,0x00,0x00,}},
- {0x6608,2,{0x95,0x4F,0x00,0x00,}},
- {0x6609,2,{0x95,0x50,0x00,0x00,}},
- {0x660A,2,{0xEA,0xBB,0x00,0x00,}},
- {0x660B,2,{0x95,0x51,0x00,0x00,}},
- {0x660C,2,{0xB2,0xFD,0x00,0x00,}},
- {0x660D,2,{0x95,0x52,0x00,0x00,}},
- {0x660E,2,{0xC3,0xF7,0x00,0x00,}},
- {0x660F,2,{0xBB,0xE8,0x00,0x00,}},
- {0x6610,2,{0x95,0x53,0x00,0x00,}},
- {0x6611,2,{0x95,0x54,0x00,0x00,}},
- {0x6612,2,{0x95,0x55,0x00,0x00,}},
- {0x6613,2,{0xD2,0xD7,0x00,0x00,}},
- {0x6614,2,{0xCE,0xF4,0x00,0x00,}},
- {0x6615,2,{0xEA,0xBF,0x00,0x00,}},
- {0x6616,2,{0x95,0x56,0x00,0x00,}},
- {0x6617,2,{0x95,0x57,0x00,0x00,}},
- {0x6618,2,{0x95,0x58,0x00,0x00,}},
- {0x6619,2,{0xEA,0xBC,0x00,0x00,}},
- {0x661A,2,{0x95,0x59,0x00,0x00,}},
- {0x661B,2,{0x95,0x5A,0x00,0x00,}},
- {0x661C,2,{0x95,0x5B,0x00,0x00,}},
- {0x661D,2,{0xEA,0xC3,0x00,0x00,}},
- {0x661E,2,{0x95,0x5C,0x00,0x00,}},
- {0x661F,2,{0xD0,0xC7,0x00,0x00,}},
- {0x6620,2,{0xD3,0xB3,0x00,0x00,}},
- {0x6621,2,{0x95,0x5D,0x00,0x00,}},
- {0x6622,2,{0x95,0x5E,0x00,0x00,}},
- {0x6623,2,{0x95,0x5F,0x00,0x00,}},
- {0x6624,2,{0x95,0x60,0x00,0x00,}},
- {0x6625,2,{0xB4,0xBA,0x00,0x00,}},
- {0x6626,2,{0x95,0x61,0x00,0x00,}},
- {0x6627,2,{0xC3,0xC1,0x00,0x00,}},
- {0x6628,2,{0xD7,0xF2,0x00,0x00,}},
- {0x6629,2,{0x95,0x62,0x00,0x00,}},
- {0x662A,2,{0x95,0x63,0x00,0x00,}},
- {0x662B,2,{0x95,0x64,0x00,0x00,}},
- {0x662C,2,{0x95,0x65,0x00,0x00,}},
- {0x662D,2,{0xD5,0xD1,0x00,0x00,}},
- {0x662E,2,{0x95,0x66,0x00,0x00,}},
- {0x662F,2,{0xCA,0xC7,0x00,0x00,}},
- {0x6630,2,{0x95,0x67,0x00,0x00,}},
- {0x6631,2,{0xEA,0xC5,0x00,0x00,}},
- {0x6632,2,{0x95,0x68,0x00,0x00,}},
- {0x6633,2,{0x95,0x69,0x00,0x00,}},
- {0x6634,2,{0xEA,0xC4,0x00,0x00,}},
- {0x6635,2,{0xEA,0xC7,0x00,0x00,}},
- {0x6636,2,{0xEA,0xC6,0x00,0x00,}},
- {0x6637,2,{0x95,0x6A,0x00,0x00,}},
- {0x6638,2,{0x95,0x6B,0x00,0x00,}},
- {0x6639,2,{0x95,0x6C,0x00,0x00,}},
- {0x663A,2,{0x95,0x6D,0x00,0x00,}},
- {0x663B,2,{0x95,0x6E,0x00,0x00,}},
- {0x663C,2,{0xD6,0xE7,0x00,0x00,}},
- {0x663D,2,{0x95,0x6F,0x00,0x00,}},
- {0x663E,2,{0xCF,0xD4,0x00,0x00,}},
- {0x663F,2,{0x95,0x70,0x00,0x00,}},
- {0x6640,2,{0x95,0x71,0x00,0x00,}},
- {0x6641,2,{0xEA,0xCB,0x00,0x00,}},
- {0x6642,2,{0x95,0x72,0x00,0x00,}},
- {0x6643,2,{0xBB,0xCE,0x00,0x00,}},
- {0x6644,2,{0x95,0x73,0x00,0x00,}},
- {0x6645,2,{0x95,0x74,0x00,0x00,}},
- {0x6646,2,{0x95,0x75,0x00,0x00,}},
- {0x6647,2,{0x95,0x76,0x00,0x00,}},
- {0x6648,2,{0x95,0x77,0x00,0x00,}},
- {0x6649,2,{0x95,0x78,0x00,0x00,}},
- {0x664A,2,{0x95,0x79,0x00,0x00,}},
- {0x664B,2,{0xBD,0xFA,0x00,0x00,}},
- {0x664C,2,{0xC9,0xCE,0x00,0x00,}},
- {0x664D,2,{0x95,0x7A,0x00,0x00,}},
- {0x664E,2,{0x95,0x7B,0x00,0x00,}},
- {0x664F,2,{0xEA,0xCC,0x00,0x00,}},
- {0x6650,2,{0x95,0x7C,0x00,0x00,}},
- {0x6651,2,{0x95,0x7D,0x00,0x00,}},
- {0x6652,2,{0xC9,0xB9,0x00,0x00,}},
- {0x6653,2,{0xCF,0xFE,0x00,0x00,}},
- {0x6654,2,{0xEA,0xCA,0x00,0x00,}},
- {0x6655,2,{0xD4,0xCE,0x00,0x00,}},
- {0x6656,2,{0xEA,0xCD,0x00,0x00,}},
- {0x6657,2,{0xEA,0xCF,0x00,0x00,}},
- {0x6658,2,{0x95,0x7E,0x00,0x00,}},
- {0x6659,2,{0x95,0x80,0x00,0x00,}},
- {0x665A,2,{0xCD,0xED,0x00,0x00,}},
- {0x665B,2,{0x95,0x81,0x00,0x00,}},
- {0x665C,2,{0x95,0x82,0x00,0x00,}},
- {0x665D,2,{0x95,0x83,0x00,0x00,}},
- {0x665E,2,{0x95,0x84,0x00,0x00,}},
- {0x665F,2,{0xEA,0xC9,0x00,0x00,}},
- {0x6660,2,{0x95,0x85,0x00,0x00,}},
- {0x6661,2,{0xEA,0xCE,0x00,0x00,}},
- {0x6662,2,{0x95,0x86,0x00,0x00,}},
- {0x6663,2,{0x95,0x87,0x00,0x00,}},
- {0x6664,2,{0xCE,0xEE,0x00,0x00,}},
- {0x6665,2,{0x95,0x88,0x00,0x00,}},
- {0x6666,2,{0xBB,0xDE,0x00,0x00,}},
- {0x6667,2,{0x95,0x89,0x00,0x00,}},
- {0x6668,2,{0xB3,0xBF,0x00,0x00,}},
- {0x6669,2,{0x95,0x8A,0x00,0x00,}},
- {0x666A,2,{0x95,0x8B,0x00,0x00,}},
- {0x666B,2,{0x95,0x8C,0x00,0x00,}},
- {0x666C,2,{0x95,0x8D,0x00,0x00,}},
- {0x666D,2,{0x95,0x8E,0x00,0x00,}},
- {0x666E,2,{0xC6,0xD5,0x00,0x00,}},
- {0x666F,2,{0xBE,0xB0,0x00,0x00,}},
- {0x6670,2,{0xCE,0xFA,0x00,0x00,}},
- {0x6671,2,{0x95,0x8F,0x00,0x00,}},
- {0x6672,2,{0x95,0x90,0x00,0x00,}},
- {0x6673,2,{0x95,0x91,0x00,0x00,}},
- {0x6674,2,{0xC7,0xE7,0x00,0x00,}},
- {0x6675,2,{0x95,0x92,0x00,0x00,}},
- {0x6676,2,{0xBE,0xA7,0x00,0x00,}},
- {0x6677,2,{0xEA,0xD0,0x00,0x00,}},
- {0x6678,2,{0x95,0x93,0x00,0x00,}},
- {0x6679,2,{0x95,0x94,0x00,0x00,}},
- {0x667A,2,{0xD6,0xC7,0x00,0x00,}},
- {0x667B,2,{0x95,0x95,0x00,0x00,}},
- {0x667C,2,{0x95,0x96,0x00,0x00,}},
- {0x667D,2,{0x95,0x97,0x00,0x00,}},
- {0x667E,2,{0xC1,0xC0,0x00,0x00,}},
- {0x667F,2,{0x95,0x98,0x00,0x00,}},
- {0x6680,2,{0x95,0x99,0x00,0x00,}},
- {0x6681,2,{0x95,0x9A,0x00,0x00,}},
- {0x6682,2,{0xD4,0xDD,0x00,0x00,}},
- {0x6683,2,{0x95,0x9B,0x00,0x00,}},
- {0x6684,2,{0xEA,0xD1,0x00,0x00,}},
- {0x6685,2,{0x95,0x9C,0x00,0x00,}},
- {0x6686,2,{0x95,0x9D,0x00,0x00,}},
- {0x6687,2,{0xCF,0xBE,0x00,0x00,}},
- {0x6688,2,{0x95,0x9E,0x00,0x00,}},
- {0x6689,2,{0x95,0x9F,0x00,0x00,}},
- {0x668A,2,{0x95,0xA0,0x00,0x00,}},
- {0x668B,2,{0x95,0xA1,0x00,0x00,}},
- {0x668C,2,{0xEA,0xD2,0x00,0x00,}},
- {0x668D,2,{0x95,0xA2,0x00,0x00,}},
- {0x668E,2,{0x95,0xA3,0x00,0x00,}},
- {0x668F,2,{0x95,0xA4,0x00,0x00,}},
- {0x6690,2,{0x95,0xA5,0x00,0x00,}},
- {0x6691,2,{0xCA,0xEE,0x00,0x00,}},
- {0x6692,2,{0x95,0xA6,0x00,0x00,}},
- {0x6693,2,{0x95,0xA7,0x00,0x00,}},
- {0x6694,2,{0x95,0xA8,0x00,0x00,}},
- {0x6695,2,{0x95,0xA9,0x00,0x00,}},
- {0x6696,2,{0xC5,0xAF,0x00,0x00,}},
- {0x6697,2,{0xB0,0xB5,0x00,0x00,}},
- {0x6698,2,{0x95,0xAA,0x00,0x00,}},
- {0x6699,2,{0x95,0xAB,0x00,0x00,}},
- {0x669A,2,{0x95,0xAC,0x00,0x00,}},
- {0x669B,2,{0x95,0xAD,0x00,0x00,}},
- {0x669C,2,{0x95,0xAE,0x00,0x00,}},
- {0x669D,2,{0xEA,0xD4,0x00,0x00,}},
- {0x669E,2,{0x95,0xAF,0x00,0x00,}},
- {0x669F,2,{0x95,0xB0,0x00,0x00,}},
- {0x66A0,2,{0x95,0xB1,0x00,0x00,}},
- {0x66A1,2,{0x95,0xB2,0x00,0x00,}},
- {0x66A2,2,{0x95,0xB3,0x00,0x00,}},
- {0x66A3,2,{0x95,0xB4,0x00,0x00,}},
- {0x66A4,2,{0x95,0xB5,0x00,0x00,}},
- {0x66A5,2,{0x95,0xB6,0x00,0x00,}},
- {0x66A6,2,{0x95,0xB7,0x00,0x00,}},
- {0x66A7,2,{0xEA,0xD3,0x00,0x00,}},
- {0x66A8,2,{0xF4,0xDF,0x00,0x00,}},
- {0x66A9,2,{0x95,0xB8,0x00,0x00,}},
- {0x66AA,2,{0x95,0xB9,0x00,0x00,}},
- {0x66AB,2,{0x95,0xBA,0x00,0x00,}},
- {0x66AC,2,{0x95,0xBB,0x00,0x00,}},
- {0x66AD,2,{0x95,0xBC,0x00,0x00,}},
- {0x66AE,2,{0xC4,0xBA,0x00,0x00,}},
- {0x66AF,2,{0x95,0xBD,0x00,0x00,}},
- {0x66B0,2,{0x95,0xBE,0x00,0x00,}},
- {0x66B1,2,{0x95,0xBF,0x00,0x00,}},
- {0x66B2,2,{0x95,0xC0,0x00,0x00,}},
- {0x66B3,2,{0x95,0xC1,0x00,0x00,}},
- {0x66B4,2,{0xB1,0xA9,0x00,0x00,}},
- {0x66B5,2,{0x95,0xC2,0x00,0x00,}},
- {0x66B6,2,{0x95,0xC3,0x00,0x00,}},
- {0x66B7,2,{0x95,0xC4,0x00,0x00,}},
- {0x66B8,2,{0x95,0xC5,0x00,0x00,}},
- {0x66B9,2,{0xE5,0xDF,0x00,0x00,}},
- {0x66BA,2,{0x95,0xC6,0x00,0x00,}},
- {0x66BB,2,{0x95,0xC7,0x00,0x00,}},
- {0x66BC,2,{0x95,0xC8,0x00,0x00,}},
- {0x66BD,2,{0x95,0xC9,0x00,0x00,}},
- {0x66BE,2,{0xEA,0xD5,0x00,0x00,}},
- {0x66BF,2,{0x95,0xCA,0x00,0x00,}},
- {0x66C0,2,{0x95,0xCB,0x00,0x00,}},
- {0x66C1,2,{0x95,0xCC,0x00,0x00,}},
- {0x66C2,2,{0x95,0xCD,0x00,0x00,}},
- {0x66C3,2,{0x95,0xCE,0x00,0x00,}},
- {0x66C4,2,{0x95,0xCF,0x00,0x00,}},
- {0x66C5,2,{0x95,0xD0,0x00,0x00,}},
- {0x66C6,2,{0x95,0xD1,0x00,0x00,}},
- {0x66C7,2,{0x95,0xD2,0x00,0x00,}},
- {0x66C8,2,{0x95,0xD3,0x00,0x00,}},
- {0x66C9,2,{0x95,0xD4,0x00,0x00,}},
- {0x66CA,2,{0x95,0xD5,0x00,0x00,}},
- {0x66CB,2,{0x95,0xD6,0x00,0x00,}},
- {0x66CC,2,{0x95,0xD7,0x00,0x00,}},
- {0x66CD,2,{0x95,0xD8,0x00,0x00,}},
- {0x66CE,2,{0x95,0xD9,0x00,0x00,}},
- {0x66CF,2,{0x95,0xDA,0x00,0x00,}},
- {0x66D0,2,{0x95,0xDB,0x00,0x00,}},
- {0x66D1,2,{0x95,0xDC,0x00,0x00,}},
- {0x66D2,2,{0x95,0xDD,0x00,0x00,}},
- {0x66D3,2,{0x95,0xDE,0x00,0x00,}},
- {0x66D4,2,{0x95,0xDF,0x00,0x00,}},
- {0x66D5,2,{0x95,0xE0,0x00,0x00,}},
- {0x66D6,2,{0x95,0xE1,0x00,0x00,}},
- {0x66D7,2,{0x95,0xE2,0x00,0x00,}},
- {0x66D8,2,{0x95,0xE3,0x00,0x00,}},
- {0x66D9,2,{0xCA,0xEF,0x00,0x00,}},
- {0x66DA,2,{0x95,0xE4,0x00,0x00,}},
- {0x66DB,2,{0xEA,0xD6,0x00,0x00,}},
- {0x66DC,2,{0xEA,0xD7,0x00,0x00,}},
- {0x66DD,2,{0xC6,0xD8,0x00,0x00,}},
- {0x66DE,2,{0x95,0xE5,0x00,0x00,}},
- {0x66DF,2,{0x95,0xE6,0x00,0x00,}},
- {0x66E0,2,{0x95,0xE7,0x00,0x00,}},
- {0x66E1,2,{0x95,0xE8,0x00,0x00,}},
- {0x66E2,2,{0x95,0xE9,0x00,0x00,}},
- {0x66E3,2,{0x95,0xEA,0x00,0x00,}},
- {0x66E4,2,{0x95,0xEB,0x00,0x00,}},
- {0x66E5,2,{0x95,0xEC,0x00,0x00,}},
- {0x66E6,2,{0xEA,0xD8,0x00,0x00,}},
- {0x66E7,2,{0x95,0xED,0x00,0x00,}},
- {0x66E8,2,{0x95,0xEE,0x00,0x00,}},
- {0x66E9,2,{0xEA,0xD9,0x00,0x00,}},
- {0x66EA,2,{0x95,0xEF,0x00,0x00,}},
- {0x66EB,2,{0x95,0xF0,0x00,0x00,}},
- {0x66EC,2,{0x95,0xF1,0x00,0x00,}},
- {0x66ED,2,{0x95,0xF2,0x00,0x00,}},
- {0x66EE,2,{0x95,0xF3,0x00,0x00,}},
- {0x66EF,2,{0x95,0xF4,0x00,0x00,}},
- {0x66F0,2,{0xD4,0xBB,0x00,0x00,}},
- {0x66F1,2,{0x95,0xF5,0x00,0x00,}},
- {0x66F2,2,{0xC7,0xFA,0x00,0x00,}},
- {0x66F3,2,{0xD2,0xB7,0x00,0x00,}},
- {0x66F4,2,{0xB8,0xFC,0x00,0x00,}},
- {0x66F5,2,{0x95,0xF6,0x00,0x00,}},
- {0x66F6,2,{0x95,0xF7,0x00,0x00,}},
- {0x66F7,2,{0xEA,0xC2,0x00,0x00,}},
- {0x66F8,2,{0x95,0xF8,0x00,0x00,}},
- {0x66F9,2,{0xB2,0xDC,0x00,0x00,}},
- {0x66FA,2,{0x95,0xF9,0x00,0x00,}},
- {0x66FB,2,{0x95,0xFA,0x00,0x00,}},
- {0x66FC,2,{0xC2,0xFC,0x00,0x00,}},
- {0x66FD,2,{0x95,0xFB,0x00,0x00,}},
- {0x66FE,2,{0xD4,0xF8,0x00,0x00,}},
- {0x66FF,2,{0xCC,0xE6,0x00,0x00,}},
- {0x6700,2,{0xD7,0xEE,0x00,0x00,}},
- {0x6701,2,{0x95,0xFC,0x00,0x00,}},
- {0x6702,2,{0x95,0xFD,0x00,0x00,}},
- {0x6703,2,{0x95,0xFE,0x00,0x00,}},
- {0x6704,2,{0x96,0x40,0x00,0x00,}},
- {0x6705,2,{0x96,0x41,0x00,0x00,}},
- {0x6706,2,{0x96,0x42,0x00,0x00,}},
- {0x6707,2,{0x96,0x43,0x00,0x00,}},
- {0x6708,2,{0xD4,0xC2,0x00,0x00,}},
- {0x6709,2,{0xD3,0xD0,0x00,0x00,}},
- {0x670A,2,{0xEB,0xC3,0x00,0x00,}},
- {0x670B,2,{0xC5,0xF3,0x00,0x00,}},
- {0x670C,2,{0x96,0x44,0x00,0x00,}},
- {0x670D,2,{0xB7,0xFE,0x00,0x00,}},
- {0x670E,2,{0x96,0x45,0x00,0x00,}},
- {0x670F,2,{0x96,0x46,0x00,0x00,}},
- {0x6710,2,{0xEB,0xD4,0x00,0x00,}},
- {0x6711,2,{0x96,0x47,0x00,0x00,}},
- {0x6712,2,{0x96,0x48,0x00,0x00,}},
- {0x6713,2,{0x96,0x49,0x00,0x00,}},
- {0x6714,2,{0xCB,0xB7,0x00,0x00,}},
- {0x6715,2,{0xEB,0xDE,0x00,0x00,}},
- {0x6716,2,{0x96,0x4A,0x00,0x00,}},
- {0x6717,2,{0xC0,0xCA,0x00,0x00,}},
- {0x6718,2,{0x96,0x4B,0x00,0x00,}},
- {0x6719,2,{0x96,0x4C,0x00,0x00,}},
- {0x671A,2,{0x96,0x4D,0x00,0x00,}},
- {0x671B,2,{0xCD,0xFB,0x00,0x00,}},
- {0x671C,2,{0x96,0x4E,0x00,0x00,}},
- {0x671D,2,{0xB3,0xAF,0x00,0x00,}},
- {0x671E,2,{0x96,0x4F,0x00,0x00,}},
- {0x671F,2,{0xC6,0xDA,0x00,0x00,}},
- {0x6720,2,{0x96,0x50,0x00,0x00,}},
- {0x6721,2,{0x96,0x51,0x00,0x00,}},
- {0x6722,2,{0x96,0x52,0x00,0x00,}},
- {0x6723,2,{0x96,0x53,0x00,0x00,}},
- {0x6724,2,{0x96,0x54,0x00,0x00,}},
- {0x6725,2,{0x96,0x55,0x00,0x00,}},
- {0x6726,2,{0xEB,0xFC,0x00,0x00,}},
- {0x6727,2,{0x96,0x56,0x00,0x00,}},
- {0x6728,2,{0xC4,0xBE,0x00,0x00,}},
- {0x6729,2,{0x96,0x57,0x00,0x00,}},
- {0x672A,2,{0xCE,0xB4,0x00,0x00,}},
- {0x672B,2,{0xC4,0xA9,0x00,0x00,}},
- {0x672C,2,{0xB1,0xBE,0x00,0x00,}},
- {0x672D,2,{0xD4,0xFD,0x00,0x00,}},
- {0x672E,2,{0x96,0x58,0x00,0x00,}},
- {0x672F,2,{0xCA,0xF5,0x00,0x00,}},
- {0x6730,2,{0x96,0x59,0x00,0x00,}},
- {0x6731,2,{0xD6,0xEC,0x00,0x00,}},
- {0x6732,2,{0x96,0x5A,0x00,0x00,}},
- {0x6733,2,{0x96,0x5B,0x00,0x00,}},
- {0x6734,2,{0xC6,0xD3,0x00,0x00,}},
- {0x6735,2,{0xB6,0xE4,0x00,0x00,}},
- {0x6736,2,{0x96,0x5C,0x00,0x00,}},
- {0x6737,2,{0x96,0x5D,0x00,0x00,}},
- {0x6738,2,{0x96,0x5E,0x00,0x00,}},
- {0x6739,2,{0x96,0x5F,0x00,0x00,}},
- {0x673A,2,{0xBB,0xFA,0x00,0x00,}},
- {0x673B,2,{0x96,0x60,0x00,0x00,}},
- {0x673C,2,{0x96,0x61,0x00,0x00,}},
- {0x673D,2,{0xD0,0xE0,0x00,0x00,}},
- {0x673E,2,{0x96,0x62,0x00,0x00,}},
- {0x673F,2,{0x96,0x63,0x00,0x00,}},
- {0x6740,2,{0xC9,0xB1,0x00,0x00,}},
- {0x6741,2,{0x96,0x64,0x00,0x00,}},
- {0x6742,2,{0xD4,0xD3,0x00,0x00,}},
- {0x6743,2,{0xC8,0xA8,0x00,0x00,}},
- {0x6744,2,{0x96,0x65,0x00,0x00,}},
- {0x6745,2,{0x96,0x66,0x00,0x00,}},
- {0x6746,2,{0xB8,0xCB,0x00,0x00,}},
- {0x6747,2,{0x96,0x67,0x00,0x00,}},
- {0x6748,2,{0xE8,0xBE,0x00,0x00,}},
- {0x6749,2,{0xC9,0xBC,0x00,0x00,}},
- {0x674A,2,{0x96,0x68,0x00,0x00,}},
- {0x674B,2,{0x96,0x69,0x00,0x00,}},
- {0x674C,2,{0xE8,0xBB,0x00,0x00,}},
- {0x674D,2,{0x96,0x6A,0x00,0x00,}},
- {0x674E,2,{0xC0,0xEE,0x00,0x00,}},
- {0x674F,2,{0xD0,0xD3,0x00,0x00,}},
- {0x6750,2,{0xB2,0xC4,0x00,0x00,}},
- {0x6751,2,{0xB4,0xE5,0x00,0x00,}},
- {0x6752,2,{0x96,0x6B,0x00,0x00,}},
- {0x6753,2,{0xE8,0xBC,0x00,0x00,}},
- {0x6754,2,{0x96,0x6C,0x00,0x00,}},
- {0x6755,2,{0x96,0x6D,0x00,0x00,}},
- {0x6756,2,{0xD5,0xC8,0x00,0x00,}},
- {0x6757,2,{0x96,0x6E,0x00,0x00,}},
- {0x6758,2,{0x96,0x6F,0x00,0x00,}},
- {0x6759,2,{0x96,0x70,0x00,0x00,}},
- {0x675A,2,{0x96,0x71,0x00,0x00,}},
- {0x675B,2,{0x96,0x72,0x00,0x00,}},
- {0x675C,2,{0xB6,0xC5,0x00,0x00,}},
- {0x675D,2,{0x96,0x73,0x00,0x00,}},
- {0x675E,2,{0xE8,0xBD,0x00,0x00,}},
- {0x675F,2,{0xCA,0xF8,0x00,0x00,}},
- {0x6760,2,{0xB8,0xDC,0x00,0x00,}},
- {0x6761,2,{0xCC,0xF5,0x00,0x00,}},
- {0x6762,2,{0x96,0x74,0x00,0x00,}},
- {0x6763,2,{0x96,0x75,0x00,0x00,}},
- {0x6764,2,{0x96,0x76,0x00,0x00,}},
- {0x6765,2,{0xC0,0xB4,0x00,0x00,}},
- {0x6766,2,{0x96,0x77,0x00,0x00,}},
- {0x6767,2,{0x96,0x78,0x00,0x00,}},
- {0x6768,2,{0xD1,0xEE,0x00,0x00,}},
- {0x6769,2,{0xE8,0xBF,0x00,0x00,}},
- {0x676A,2,{0xE8,0xC2,0x00,0x00,}},
- {0x676B,2,{0x96,0x79,0x00,0x00,}},
- {0x676C,2,{0x96,0x7A,0x00,0x00,}},
- {0x676D,2,{0xBA,0xBC,0x00,0x00,}},
- {0x676E,2,{0x96,0x7B,0x00,0x00,}},
- {0x676F,2,{0xB1,0xAD,0x00,0x00,}},
- {0x6770,2,{0xBD,0xDC,0x00,0x00,}},
- {0x6771,2,{0x96,0x7C,0x00,0x00,}},
- {0x6772,2,{0xEA,0xBD,0x00,0x00,}},
- {0x6773,2,{0xE8,0xC3,0x00,0x00,}},
- {0x6774,2,{0x96,0x7D,0x00,0x00,}},
- {0x6775,2,{0xE8,0xC6,0x00,0x00,}},
- {0x6776,2,{0x96,0x7E,0x00,0x00,}},
- {0x6777,2,{0xE8,0xCB,0x00,0x00,}},
- {0x6778,2,{0x96,0x80,0x00,0x00,}},
- {0x6779,2,{0x96,0x81,0x00,0x00,}},
- {0x677A,2,{0x96,0x82,0x00,0x00,}},
- {0x677B,2,{0x96,0x83,0x00,0x00,}},
- {0x677C,2,{0xE8,0xCC,0x00,0x00,}},
- {0x677D,2,{0x96,0x84,0x00,0x00,}},
- {0x677E,2,{0xCB,0xC9,0x00,0x00,}},
- {0x677F,2,{0xB0,0xE5,0x00,0x00,}},
- {0x6780,2,{0x96,0x85,0x00,0x00,}},
- {0x6781,2,{0xBC,0xAB,0x00,0x00,}},
- {0x6782,2,{0x96,0x86,0x00,0x00,}},
- {0x6783,2,{0x96,0x87,0x00,0x00,}},
- {0x6784,2,{0xB9,0xB9,0x00,0x00,}},
- {0x6785,2,{0x96,0x88,0x00,0x00,}},
- {0x6786,2,{0x96,0x89,0x00,0x00,}},
- {0x6787,2,{0xE8,0xC1,0x00,0x00,}},
- {0x6788,2,{0x96,0x8A,0x00,0x00,}},
- {0x6789,2,{0xCD,0xF7,0x00,0x00,}},
- {0x678A,2,{0x96,0x8B,0x00,0x00,}},
- {0x678B,2,{0xE8,0xCA,0x00,0x00,}},
- {0x678C,2,{0x96,0x8C,0x00,0x00,}},
- {0x678D,2,{0x96,0x8D,0x00,0x00,}},
- {0x678E,2,{0x96,0x8E,0x00,0x00,}},
- {0x678F,2,{0x96,0x8F,0x00,0x00,}},
- {0x6790,2,{0xCE,0xF6,0x00,0x00,}},
- {0x6791,2,{0x96,0x90,0x00,0x00,}},
- {0x6792,2,{0x96,0x91,0x00,0x00,}},
- {0x6793,2,{0x96,0x92,0x00,0x00,}},
- {0x6794,2,{0x96,0x93,0x00,0x00,}},
- {0x6795,2,{0xD5,0xED,0x00,0x00,}},
- {0x6796,2,{0x96,0x94,0x00,0x00,}},
- {0x6797,2,{0xC1,0xD6,0x00,0x00,}},
- {0x6798,2,{0xE8,0xC4,0x00,0x00,}},
- {0x6799,2,{0x96,0x95,0x00,0x00,}},
- {0x679A,2,{0xC3,0xB6,0x00,0x00,}},
- {0x679B,2,{0x96,0x96,0x00,0x00,}},
- {0x679C,2,{0xB9,0xFB,0x00,0x00,}},
- {0x679D,2,{0xD6,0xA6,0x00,0x00,}},
- {0x679E,2,{0xE8,0xC8,0x00,0x00,}},
- {0x679F,2,{0x96,0x97,0x00,0x00,}},
- {0x67A0,2,{0x96,0x98,0x00,0x00,}},
- {0x67A1,2,{0x96,0x99,0x00,0x00,}},
- {0x67A2,2,{0xCA,0xE0,0x00,0x00,}},
- {0x67A3,2,{0xD4,0xE6,0x00,0x00,}},
- {0x67A4,2,{0x96,0x9A,0x00,0x00,}},
- {0x67A5,2,{0xE8,0xC0,0x00,0x00,}},
- {0x67A6,2,{0x96,0x9B,0x00,0x00,}},
- {0x67A7,2,{0xE8,0xC5,0x00,0x00,}},
- {0x67A8,2,{0xE8,0xC7,0x00,0x00,}},
- {0x67A9,2,{0x96,0x9C,0x00,0x00,}},
- {0x67AA,2,{0xC7,0xB9,0x00,0x00,}},
- {0x67AB,2,{0xB7,0xE3,0x00,0x00,}},
- {0x67AC,2,{0x96,0x9D,0x00,0x00,}},
- {0x67AD,2,{0xE8,0xC9,0x00,0x00,}},
- {0x67AE,2,{0x96,0x9E,0x00,0x00,}},
- {0x67AF,2,{0xBF,0xDD,0x00,0x00,}},
- {0x67B0,2,{0xE8,0xD2,0x00,0x00,}},
- {0x67B1,2,{0x96,0x9F,0x00,0x00,}},
- {0x67B2,2,{0x96,0xA0,0x00,0x00,}},
- {0x67B3,2,{0xE8,0xD7,0x00,0x00,}},
- {0x67B4,2,{0x96,0xA1,0x00,0x00,}},
- {0x67B5,2,{0xE8,0xD5,0x00,0x00,}},
- {0x67B6,2,{0xBC,0xDC,0x00,0x00,}},
- {0x67B7,2,{0xBC,0xCF,0x00,0x00,}},
- {0x67B8,2,{0xE8,0xDB,0x00,0x00,}},
- {0x67B9,2,{0x96,0xA2,0x00,0x00,}},
- {0x67BA,2,{0x96,0xA3,0x00,0x00,}},
- {0x67BB,2,{0x96,0xA4,0x00,0x00,}},
- {0x67BC,2,{0x96,0xA5,0x00,0x00,}},
- {0x67BD,2,{0x96,0xA6,0x00,0x00,}},
- {0x67BE,2,{0x96,0xA7,0x00,0x00,}},
- {0x67BF,2,{0x96,0xA8,0x00,0x00,}},
- {0x67C0,2,{0x96,0xA9,0x00,0x00,}},
- {0x67C1,2,{0xE8,0xDE,0x00,0x00,}},
- {0x67C2,2,{0x96,0xAA,0x00,0x00,}},
- {0x67C3,2,{0xE8,0xDA,0x00,0x00,}},
- {0x67C4,2,{0xB1,0xFA,0x00,0x00,}},
- {0x67C5,2,{0x96,0xAB,0x00,0x00,}},
- {0x67C6,2,{0x96,0xAC,0x00,0x00,}},
- {0x67C7,2,{0x96,0xAD,0x00,0x00,}},
- {0x67C8,2,{0x96,0xAE,0x00,0x00,}},
- {0x67C9,2,{0x96,0xAF,0x00,0x00,}},
- {0x67CA,2,{0x96,0xB0,0x00,0x00,}},
- {0x67CB,2,{0x96,0xB1,0x00,0x00,}},
- {0x67CC,2,{0x96,0xB2,0x00,0x00,}},
- {0x67CD,2,{0x96,0xB3,0x00,0x00,}},
- {0x67CE,2,{0x96,0xB4,0x00,0x00,}},
- {0x67CF,2,{0xB0,0xD8,0x00,0x00,}},
- {0x67D0,2,{0xC4,0xB3,0x00,0x00,}},
- {0x67D1,2,{0xB8,0xCC,0x00,0x00,}},
- {0x67D2,2,{0xC6,0xE2,0x00,0x00,}},
- {0x67D3,2,{0xC8,0xBE,0x00,0x00,}},
- {0x67D4,2,{0xC8,0xE1,0x00,0x00,}},
- {0x67D5,2,{0x96,0xB5,0x00,0x00,}},
- {0x67D6,2,{0x96,0xB6,0x00,0x00,}},
- {0x67D7,2,{0x96,0xB7,0x00,0x00,}},
- {0x67D8,2,{0xE8,0xCF,0x00,0x00,}},
- {0x67D9,2,{0xE8,0xD4,0x00,0x00,}},
- {0x67DA,2,{0xE8,0xD6,0x00,0x00,}},
- {0x67DB,2,{0x96,0xB8,0x00,0x00,}},
- {0x67DC,2,{0xB9,0xF1,0x00,0x00,}},
- {0x67DD,2,{0xE8,0xD8,0x00,0x00,}},
- {0x67DE,2,{0xD7,0xF5,0x00,0x00,}},
- {0x67DF,2,{0x96,0xB9,0x00,0x00,}},
- {0x67E0,2,{0xC4,0xFB,0x00,0x00,}},
- {0x67E1,2,{0x96,0xBA,0x00,0x00,}},
- {0x67E2,2,{0xE8,0xDC,0x00,0x00,}},
- {0x67E3,2,{0x96,0xBB,0x00,0x00,}},
- {0x67E4,2,{0x96,0xBC,0x00,0x00,}},
- {0x67E5,2,{0xB2,0xE9,0x00,0x00,}},
- {0x67E6,2,{0x96,0xBD,0x00,0x00,}},
- {0x67E7,2,{0x96,0xBE,0x00,0x00,}},
- {0x67E8,2,{0x96,0xBF,0x00,0x00,}},
- {0x67E9,2,{0xE8,0xD1,0x00,0x00,}},
- {0x67EA,2,{0x96,0xC0,0x00,0x00,}},
- {0x67EB,2,{0x96,0xC1,0x00,0x00,}},
- {0x67EC,2,{0xBC,0xED,0x00,0x00,}},
- {0x67ED,2,{0x96,0xC2,0x00,0x00,}},
- {0x67EE,2,{0x96,0xC3,0x00,0x00,}},
- {0x67EF,2,{0xBF,0xC2,0x00,0x00,}},
- {0x67F0,2,{0xE8,0xCD,0x00,0x00,}},
- {0x67F1,2,{0xD6,0xF9,0x00,0x00,}},
- {0x67F2,2,{0x96,0xC4,0x00,0x00,}},
- {0x67F3,2,{0xC1,0xF8,0x00,0x00,}},
- {0x67F4,2,{0xB2,0xF1,0x00,0x00,}},
- {0x67F5,2,{0x96,0xC5,0x00,0x00,}},
- {0x67F6,2,{0x96,0xC6,0x00,0x00,}},
- {0x67F7,2,{0x96,0xC7,0x00,0x00,}},
- {0x67F8,2,{0x96,0xC8,0x00,0x00,}},
- {0x67F9,2,{0x96,0xC9,0x00,0x00,}},
- {0x67FA,2,{0x96,0xCA,0x00,0x00,}},
- {0x67FB,2,{0x96,0xCB,0x00,0x00,}},
- {0x67FC,2,{0x96,0xCC,0x00,0x00,}},
- {0x67FD,2,{0xE8,0xDF,0x00,0x00,}},
- {0x67FE,2,{0x96,0xCD,0x00,0x00,}},
- {0x67FF,2,{0xCA,0xC1,0x00,0x00,}},
- {0x6800,2,{0xE8,0xD9,0x00,0x00,}},
- {0x6801,2,{0x96,0xCE,0x00,0x00,}},
- {0x6802,2,{0x96,0xCF,0x00,0x00,}},
- {0x6803,2,{0x96,0xD0,0x00,0x00,}},
- {0x6804,2,{0x96,0xD1,0x00,0x00,}},
- {0x6805,2,{0xD5,0xA4,0x00,0x00,}},
- {0x6806,2,{0x96,0xD2,0x00,0x00,}},
- {0x6807,2,{0xB1,0xEA,0x00,0x00,}},
- {0x6808,2,{0xD5,0xBB,0x00,0x00,}},
- {0x6809,2,{0xE8,0xCE,0x00,0x00,}},
- {0x680A,2,{0xE8,0xD0,0x00,0x00,}},
- {0x680B,2,{0xB6,0xB0,0x00,0x00,}},
- {0x680C,2,{0xE8,0xD3,0x00,0x00,}},
- {0x680D,2,{0x96,0xD3,0x00,0x00,}},
- {0x680E,2,{0xE8,0xDD,0x00,0x00,}},
- {0x680F,2,{0xC0,0xB8,0x00,0x00,}},
- {0x6810,2,{0x96,0xD4,0x00,0x00,}},
- {0x6811,2,{0xCA,0xF7,0x00,0x00,}},
- {0x6812,2,{0x96,0xD5,0x00,0x00,}},
- {0x6813,2,{0xCB,0xA8,0x00,0x00,}},
- {0x6814,2,{0x96,0xD6,0x00,0x00,}},
- {0x6815,2,{0x96,0xD7,0x00,0x00,}},
- {0x6816,2,{0xC6,0xDC,0x00,0x00,}},
- {0x6817,2,{0xC0,0xF5,0x00,0x00,}},
- {0x6818,2,{0x96,0xD8,0x00,0x00,}},
- {0x6819,2,{0x96,0xD9,0x00,0x00,}},
- {0x681A,2,{0x96,0xDA,0x00,0x00,}},
- {0x681B,2,{0x96,0xDB,0x00,0x00,}},
- {0x681C,2,{0x96,0xDC,0x00,0x00,}},
- {0x681D,2,{0xE8,0xE9,0x00,0x00,}},
- {0x681E,2,{0x96,0xDD,0x00,0x00,}},
- {0x681F,2,{0x96,0xDE,0x00,0x00,}},
- {0x6820,2,{0x96,0xDF,0x00,0x00,}},
- {0x6821,2,{0xD0,0xA3,0x00,0x00,}},
- {0x6822,2,{0x96,0xE0,0x00,0x00,}},
- {0x6823,2,{0x96,0xE1,0x00,0x00,}},
- {0x6824,2,{0x96,0xE2,0x00,0x00,}},
- {0x6825,2,{0x96,0xE3,0x00,0x00,}},
- {0x6826,2,{0x96,0xE4,0x00,0x00,}},
- {0x6827,2,{0x96,0xE5,0x00,0x00,}},
- {0x6828,2,{0x96,0xE6,0x00,0x00,}},
- {0x6829,2,{0xE8,0xF2,0x00,0x00,}},
- {0x682A,2,{0xD6,0xEA,0x00,0x00,}},
- {0x682B,2,{0x96,0xE7,0x00,0x00,}},
- {0x682C,2,{0x96,0xE8,0x00,0x00,}},
- {0x682D,2,{0x96,0xE9,0x00,0x00,}},
- {0x682E,2,{0x96,0xEA,0x00,0x00,}},
- {0x682F,2,{0x96,0xEB,0x00,0x00,}},
- {0x6830,2,{0x96,0xEC,0x00,0x00,}},
- {0x6831,2,{0x96,0xED,0x00,0x00,}},
- {0x6832,2,{0xE8,0xE0,0x00,0x00,}},
- {0x6833,2,{0xE8,0xE1,0x00,0x00,}},
- {0x6834,2,{0x96,0xEE,0x00,0x00,}},
- {0x6835,2,{0x96,0xEF,0x00,0x00,}},
- {0x6836,2,{0x96,0xF0,0x00,0x00,}},
- {0x6837,2,{0xD1,0xF9,0x00,0x00,}},
- {0x6838,2,{0xBA,0xCB,0x00,0x00,}},
- {0x6839,2,{0xB8,0xF9,0x00,0x00,}},
- {0x683A,2,{0x96,0xF1,0x00,0x00,}},
- {0x683B,2,{0x96,0xF2,0x00,0x00,}},
- {0x683C,2,{0xB8,0xF1,0x00,0x00,}},
- {0x683D,2,{0xD4,0xD4,0x00,0x00,}},
- {0x683E,2,{0xE8,0xEF,0x00,0x00,}},
- {0x683F,2,{0x96,0xF3,0x00,0x00,}},
- {0x6840,2,{0xE8,0xEE,0x00,0x00,}},
- {0x6841,2,{0xE8,0xEC,0x00,0x00,}},
- {0x6842,2,{0xB9,0xF0,0x00,0x00,}},
- {0x6843,2,{0xCC,0xD2,0x00,0x00,}},
- {0x6844,2,{0xE8,0xE6,0x00,0x00,}},
- {0x6845,2,{0xCE,0xA6,0x00,0x00,}},
- {0x6846,2,{0xBF,0xF2,0x00,0x00,}},
- {0x6847,2,{0x96,0xF4,0x00,0x00,}},
- {0x6848,2,{0xB0,0xB8,0x00,0x00,}},
- {0x6849,2,{0xE8,0xF1,0x00,0x00,}},
- {0x684A,2,{0xE8,0xF0,0x00,0x00,}},
- {0x684B,2,{0x96,0xF5,0x00,0x00,}},
- {0x684C,2,{0xD7,0xC0,0x00,0x00,}},
- {0x684D,2,{0x96,0xF6,0x00,0x00,}},
- {0x684E,2,{0xE8,0xE4,0x00,0x00,}},
- {0x684F,2,{0x96,0xF7,0x00,0x00,}},
- {0x6850,2,{0xCD,0xA9,0x00,0x00,}},
- {0x6851,2,{0xC9,0xA3,0x00,0x00,}},
- {0x6852,2,{0x96,0xF8,0x00,0x00,}},
- {0x6853,2,{0xBB,0xB8,0x00,0x00,}},
- {0x6854,2,{0xBD,0xDB,0x00,0x00,}},
- {0x6855,2,{0xE8,0xEA,0x00,0x00,}},
- {0x6856,2,{0x96,0xF9,0x00,0x00,}},
- {0x6857,2,{0x96,0xFA,0x00,0x00,}},
- {0x6858,2,{0x96,0xFB,0x00,0x00,}},
- {0x6859,2,{0x96,0xFC,0x00,0x00,}},
- {0x685A,2,{0x96,0xFD,0x00,0x00,}},
- {0x685B,2,{0x96,0xFE,0x00,0x00,}},
- {0x685C,2,{0x97,0x40,0x00,0x00,}},
- {0x685D,2,{0x97,0x41,0x00,0x00,}},
- {0x685E,2,{0x97,0x42,0x00,0x00,}},
- {0x685F,2,{0x97,0x43,0x00,0x00,}},
- {0x6860,2,{0xE8,0xE2,0x00,0x00,}},
- {0x6861,2,{0xE8,0xE3,0x00,0x00,}},
- {0x6862,2,{0xE8,0xE5,0x00,0x00,}},
- {0x6863,2,{0xB5,0xB5,0x00,0x00,}},
- {0x6864,2,{0xE8,0xE7,0x00,0x00,}},
- {0x6865,2,{0xC7,0xC5,0x00,0x00,}},
- {0x6866,2,{0xE8,0xEB,0x00,0x00,}},
- {0x6867,2,{0xE8,0xED,0x00,0x00,}},
- {0x6868,2,{0xBD,0xB0,0x00,0x00,}},
- {0x6869,2,{0xD7,0xAE,0x00,0x00,}},
- {0x686A,2,{0x97,0x44,0x00,0x00,}},
- {0x686B,2,{0xE8,0xF8,0x00,0x00,}},
- {0x686C,2,{0x97,0x45,0x00,0x00,}},
- {0x686D,2,{0x97,0x46,0x00,0x00,}},
- {0x686E,2,{0x97,0x47,0x00,0x00,}},
- {0x686F,2,{0x97,0x48,0x00,0x00,}},
- {0x6870,2,{0x97,0x49,0x00,0x00,}},
- {0x6871,2,{0x97,0x4A,0x00,0x00,}},
- {0x6872,2,{0x97,0x4B,0x00,0x00,}},
- {0x6873,2,{0x97,0x4C,0x00,0x00,}},
- {0x6874,2,{0xE8,0xF5,0x00,0x00,}},
- {0x6875,2,{0x97,0x4D,0x00,0x00,}},
- {0x6876,2,{0xCD,0xB0,0x00,0x00,}},
- {0x6877,2,{0xE8,0xF6,0x00,0x00,}},
- {0x6878,2,{0x97,0x4E,0x00,0x00,}},
- {0x6879,2,{0x97,0x4F,0x00,0x00,}},
- {0x687A,2,{0x97,0x50,0x00,0x00,}},
- {0x687B,2,{0x97,0x51,0x00,0x00,}},
- {0x687C,2,{0x97,0x52,0x00,0x00,}},
- {0x687D,2,{0x97,0x53,0x00,0x00,}},
- {0x687E,2,{0x97,0x54,0x00,0x00,}},
- {0x687F,2,{0x97,0x55,0x00,0x00,}},
- {0x6880,2,{0x97,0x56,0x00,0x00,}},
- {0x6881,2,{0xC1,0xBA,0x00,0x00,}},
- {0x6882,2,{0x97,0x57,0x00,0x00,}},
- {0x6883,2,{0xE8,0xE8,0x00,0x00,}},
- {0x6884,2,{0x97,0x58,0x00,0x00,}},
- {0x6885,2,{0xC3,0xB7,0x00,0x00,}},
- {0x6886,2,{0xB0,0xF0,0x00,0x00,}},
- {0x6887,2,{0x97,0x59,0x00,0x00,}},
- {0x6888,2,{0x97,0x5A,0x00,0x00,}},
- {0x6889,2,{0x97,0x5B,0x00,0x00,}},
- {0x688A,2,{0x97,0x5C,0x00,0x00,}},
- {0x688B,2,{0x97,0x5D,0x00,0x00,}},
- {0x688C,2,{0x97,0x5E,0x00,0x00,}},
- {0x688D,2,{0x97,0x5F,0x00,0x00,}},
- {0x688E,2,{0x97,0x60,0x00,0x00,}},
- {0x688F,2,{0xE8,0xF4,0x00,0x00,}},
- {0x6890,2,{0x97,0x61,0x00,0x00,}},
- {0x6891,2,{0x97,0x62,0x00,0x00,}},
- {0x6892,2,{0x97,0x63,0x00,0x00,}},
- {0x6893,2,{0xE8,0xF7,0x00,0x00,}},
- {0x6894,2,{0x97,0x64,0x00,0x00,}},
- {0x6895,2,{0x97,0x65,0x00,0x00,}},
- {0x6896,2,{0x97,0x66,0x00,0x00,}},
- {0x6897,2,{0xB9,0xA3,0x00,0x00,}},
- {0x6898,2,{0x97,0x67,0x00,0x00,}},
- {0x6899,2,{0x97,0x68,0x00,0x00,}},
- {0x689A,2,{0x97,0x69,0x00,0x00,}},
- {0x689B,2,{0x97,0x6A,0x00,0x00,}},
- {0x689C,2,{0x97,0x6B,0x00,0x00,}},
- {0x689D,2,{0x97,0x6C,0x00,0x00,}},
- {0x689E,2,{0x97,0x6D,0x00,0x00,}},
- {0x689F,2,{0x97,0x6E,0x00,0x00,}},
- {0x68A0,2,{0x97,0x6F,0x00,0x00,}},
- {0x68A1,2,{0x97,0x70,0x00,0x00,}},
- {0x68A2,2,{0xC9,0xD2,0x00,0x00,}},
- {0x68A3,2,{0x97,0x71,0x00,0x00,}},
- {0x68A4,2,{0x97,0x72,0x00,0x00,}},
- {0x68A5,2,{0x97,0x73,0x00,0x00,}},
- {0x68A6,2,{0xC3,0xCE,0x00,0x00,}},
- {0x68A7,2,{0xCE,0xE0,0x00,0x00,}},
- {0x68A8,2,{0xC0,0xE6,0x00,0x00,}},
- {0x68A9,2,{0x97,0x74,0x00,0x00,}},
- {0x68AA,2,{0x97,0x75,0x00,0x00,}},
- {0x68AB,2,{0x97,0x76,0x00,0x00,}},
- {0x68AC,2,{0x97,0x77,0x00,0x00,}},
- {0x68AD,2,{0xCB,0xF3,0x00,0x00,}},
- {0x68AE,2,{0x97,0x78,0x00,0x00,}},
- {0x68AF,2,{0xCC,0xDD,0x00,0x00,}},
- {0x68B0,2,{0xD0,0xB5,0x00,0x00,}},
- {0x68B1,2,{0x97,0x79,0x00,0x00,}},
- {0x68B2,2,{0x97,0x7A,0x00,0x00,}},
- {0x68B3,2,{0xCA,0xE1,0x00,0x00,}},
- {0x68B4,2,{0x97,0x7B,0x00,0x00,}},
- {0x68B5,2,{0xE8,0xF3,0x00,0x00,}},
- {0x68B6,2,{0x97,0x7C,0x00,0x00,}},
- {0x68B7,2,{0x97,0x7D,0x00,0x00,}},
- {0x68B8,2,{0x97,0x7E,0x00,0x00,}},
- {0x68B9,2,{0x97,0x80,0x00,0x00,}},
- {0x68BA,2,{0x97,0x81,0x00,0x00,}},
- {0x68BB,2,{0x97,0x82,0x00,0x00,}},
- {0x68BC,2,{0x97,0x83,0x00,0x00,}},
- {0x68BD,2,{0x97,0x84,0x00,0x00,}},
- {0x68BE,2,{0x97,0x85,0x00,0x00,}},
- {0x68BF,2,{0x97,0x86,0x00,0x00,}},
- {0x68C0,2,{0xBC,0xEC,0x00,0x00,}},
- {0x68C1,2,{0x97,0x87,0x00,0x00,}},
- {0x68C2,2,{0xE8,0xF9,0x00,0x00,}},
- {0x68C3,2,{0x97,0x88,0x00,0x00,}},
- {0x68C4,2,{0x97,0x89,0x00,0x00,}},
- {0x68C5,2,{0x97,0x8A,0x00,0x00,}},
- {0x68C6,2,{0x97,0x8B,0x00,0x00,}},
- {0x68C7,2,{0x97,0x8C,0x00,0x00,}},
- {0x68C8,2,{0x97,0x8D,0x00,0x00,}},
- {0x68C9,2,{0xC3,0xDE,0x00,0x00,}},
- {0x68CA,2,{0x97,0x8E,0x00,0x00,}},
- {0x68CB,2,{0xC6,0xE5,0x00,0x00,}},
- {0x68CC,2,{0x97,0x8F,0x00,0x00,}},
- {0x68CD,2,{0xB9,0xF7,0x00,0x00,}},
- {0x68CE,2,{0x97,0x90,0x00,0x00,}},
- {0x68CF,2,{0x97,0x91,0x00,0x00,}},
- {0x68D0,2,{0x97,0x92,0x00,0x00,}},
- {0x68D1,2,{0x97,0x93,0x00,0x00,}},
- {0x68D2,2,{0xB0,0xF4,0x00,0x00,}},
- {0x68D3,2,{0x97,0x94,0x00,0x00,}},
- {0x68D4,2,{0x97,0x95,0x00,0x00,}},
- {0x68D5,2,{0xD7,0xD8,0x00,0x00,}},
- {0x68D6,2,{0x97,0x96,0x00,0x00,}},
- {0x68D7,2,{0x97,0x97,0x00,0x00,}},
- {0x68D8,2,{0xBC,0xAC,0x00,0x00,}},
- {0x68D9,2,{0x97,0x98,0x00,0x00,}},
- {0x68DA,2,{0xC5,0xEF,0x00,0x00,}},
- {0x68DB,2,{0x97,0x99,0x00,0x00,}},
- {0x68DC,2,{0x97,0x9A,0x00,0x00,}},
- {0x68DD,2,{0x97,0x9B,0x00,0x00,}},
- {0x68DE,2,{0x97,0x9C,0x00,0x00,}},
- {0x68DF,2,{0x97,0x9D,0x00,0x00,}},
- {0x68E0,2,{0xCC,0xC4,0x00,0x00,}},
- {0x68E1,2,{0x97,0x9E,0x00,0x00,}},
- {0x68E2,2,{0x97,0x9F,0x00,0x00,}},
- {0x68E3,2,{0xE9,0xA6,0x00,0x00,}},
- {0x68E4,2,{0x97,0xA0,0x00,0x00,}},
- {0x68E5,2,{0x97,0xA1,0x00,0x00,}},
- {0x68E6,2,{0x97,0xA2,0x00,0x00,}},
- {0x68E7,2,{0x97,0xA3,0x00,0x00,}},
- {0x68E8,2,{0x97,0xA4,0x00,0x00,}},
- {0x68E9,2,{0x97,0xA5,0x00,0x00,}},
- {0x68EA,2,{0x97,0xA6,0x00,0x00,}},
- {0x68EB,2,{0x97,0xA7,0x00,0x00,}},
- {0x68EC,2,{0x97,0xA8,0x00,0x00,}},
- {0x68ED,2,{0x97,0xA9,0x00,0x00,}},
- {0x68EE,2,{0xC9,0xAD,0x00,0x00,}},
- {0x68EF,2,{0x97,0xAA,0x00,0x00,}},
- {0x68F0,2,{0xE9,0xA2,0x00,0x00,}},
- {0x68F1,2,{0xC0,0xE2,0x00,0x00,}},
- {0x68F2,2,{0x97,0xAB,0x00,0x00,}},
- {0x68F3,2,{0x97,0xAC,0x00,0x00,}},
- {0x68F4,2,{0x97,0xAD,0x00,0x00,}},
- {0x68F5,2,{0xBF,0xC3,0x00,0x00,}},
- {0x68F6,2,{0x97,0xAE,0x00,0x00,}},
- {0x68F7,2,{0x97,0xAF,0x00,0x00,}},
- {0x68F8,2,{0x97,0xB0,0x00,0x00,}},
- {0x68F9,2,{0xE8,0xFE,0x00,0x00,}},
- {0x68FA,2,{0xB9,0xD7,0x00,0x00,}},
- {0x68FB,2,{0x97,0xB1,0x00,0x00,}},
- {0x68FC,2,{0xE8,0xFB,0x00,0x00,}},
- {0x68FD,2,{0x97,0xB2,0x00,0x00,}},
- {0x68FE,2,{0x97,0xB3,0x00,0x00,}},
- {0x68FF,2,{0x97,0xB4,0x00,0x00,}},
- {0x6900,2,{0x97,0xB5,0x00,0x00,}},
- {0x6901,2,{0xE9,0xA4,0x00,0x00,}},
- {0x6902,2,{0x97,0xB6,0x00,0x00,}},
- {0x6903,2,{0x97,0xB7,0x00,0x00,}},
- {0x6904,2,{0x97,0xB8,0x00,0x00,}},
- {0x6905,2,{0xD2,0xCE,0x00,0x00,}},
- {0x6906,2,{0x97,0xB9,0x00,0x00,}},
- {0x6907,2,{0x97,0xBA,0x00,0x00,}},
- {0x6908,2,{0x97,0xBB,0x00,0x00,}},
- {0x6909,2,{0x97,0xBC,0x00,0x00,}},
- {0x690A,2,{0x97,0xBD,0x00,0x00,}},
- {0x690B,2,{0xE9,0xA3,0x00,0x00,}},
- {0x690C,2,{0x97,0xBE,0x00,0x00,}},
- {0x690D,2,{0xD6,0xB2,0x00,0x00,}},
- {0x690E,2,{0xD7,0xB5,0x00,0x00,}},
- {0x690F,2,{0x97,0xBF,0x00,0x00,}},
- {0x6910,2,{0xE9,0xA7,0x00,0x00,}},
- {0x6911,2,{0x97,0xC0,0x00,0x00,}},
- {0x6912,2,{0xBD,0xB7,0x00,0x00,}},
- {0x6913,2,{0x97,0xC1,0x00,0x00,}},
- {0x6914,2,{0x97,0xC2,0x00,0x00,}},
- {0x6915,2,{0x97,0xC3,0x00,0x00,}},
- {0x6916,2,{0x97,0xC4,0x00,0x00,}},
- {0x6917,2,{0x97,0xC5,0x00,0x00,}},
- {0x6918,2,{0x97,0xC6,0x00,0x00,}},
- {0x6919,2,{0x97,0xC7,0x00,0x00,}},
- {0x691A,2,{0x97,0xC8,0x00,0x00,}},
- {0x691B,2,{0x97,0xC9,0x00,0x00,}},
- {0x691C,2,{0x97,0xCA,0x00,0x00,}},
- {0x691D,2,{0x97,0xCB,0x00,0x00,}},
- {0x691E,2,{0x97,0xCC,0x00,0x00,}},
- {0x691F,2,{0xE8,0xFC,0x00,0x00,}},
- {0x6920,2,{0xE8,0xFD,0x00,0x00,}},
- {0x6921,2,{0x97,0xCD,0x00,0x00,}},
- {0x6922,2,{0x97,0xCE,0x00,0x00,}},
- {0x6923,2,{0x97,0xCF,0x00,0x00,}},
- {0x6924,2,{0xE9,0xA1,0x00,0x00,}},
- {0x6925,2,{0x97,0xD0,0x00,0x00,}},
- {0x6926,2,{0x97,0xD1,0x00,0x00,}},
- {0x6927,2,{0x97,0xD2,0x00,0x00,}},
- {0x6928,2,{0x97,0xD3,0x00,0x00,}},
- {0x6929,2,{0x97,0xD4,0x00,0x00,}},
- {0x692A,2,{0x97,0xD5,0x00,0x00,}},
- {0x692B,2,{0x97,0xD6,0x00,0x00,}},
- {0x692C,2,{0x97,0xD7,0x00,0x00,}},
- {0x692D,2,{0xCD,0xD6,0x00,0x00,}},
- {0x692E,2,{0x97,0xD8,0x00,0x00,}},
- {0x692F,2,{0x97,0xD9,0x00,0x00,}},
- {0x6930,2,{0xD2,0xAC,0x00,0x00,}},
- {0x6931,2,{0x97,0xDA,0x00,0x00,}},
- {0x6932,2,{0x97,0xDB,0x00,0x00,}},
- {0x6933,2,{0x97,0xDC,0x00,0x00,}},
- {0x6934,2,{0xE9,0xB2,0x00,0x00,}},
- {0x6935,2,{0x97,0xDD,0x00,0x00,}},
- {0x6936,2,{0x97,0xDE,0x00,0x00,}},
- {0x6937,2,{0x97,0xDF,0x00,0x00,}},
- {0x6938,2,{0x97,0xE0,0x00,0x00,}},
- {0x6939,2,{0xE9,0xA9,0x00,0x00,}},
- {0x693A,2,{0x97,0xE1,0x00,0x00,}},
- {0x693B,2,{0x97,0xE2,0x00,0x00,}},
- {0x693C,2,{0x97,0xE3,0x00,0x00,}},
- {0x693D,2,{0xB4,0xAA,0x00,0x00,}},
- {0x693E,2,{0x97,0xE4,0x00,0x00,}},
- {0x693F,2,{0xB4,0xBB,0x00,0x00,}},
- {0x6940,2,{0x97,0xE5,0x00,0x00,}},
- {0x6941,2,{0x97,0xE6,0x00,0x00,}},
- {0x6942,2,{0xE9,0xAB,0x00,0x00,}},
- {0x6943,2,{0x97,0xE7,0x00,0x00,}},
- {0x6944,2,{0x97,0xE8,0x00,0x00,}},
- {0x6945,2,{0x97,0xE9,0x00,0x00,}},
- {0x6946,2,{0x97,0xEA,0x00,0x00,}},
- {0x6947,2,{0x97,0xEB,0x00,0x00,}},
- {0x6948,2,{0x97,0xEC,0x00,0x00,}},
- {0x6949,2,{0x97,0xED,0x00,0x00,}},
- {0x694A,2,{0x97,0xEE,0x00,0x00,}},
- {0x694B,2,{0x97,0xEF,0x00,0x00,}},
- {0x694C,2,{0x97,0xF0,0x00,0x00,}},
- {0x694D,2,{0x97,0xF1,0x00,0x00,}},
- {0x694E,2,{0x97,0xF2,0x00,0x00,}},
- {0x694F,2,{0x97,0xF3,0x00,0x00,}},
- {0x6950,2,{0x97,0xF4,0x00,0x00,}},
- {0x6951,2,{0x97,0xF5,0x00,0x00,}},
- {0x6952,2,{0x97,0xF6,0x00,0x00,}},
- {0x6953,2,{0x97,0xF7,0x00,0x00,}},
- {0x6954,2,{0xD0,0xA8,0x00,0x00,}},
- {0x6955,2,{0x97,0xF8,0x00,0x00,}},
- {0x6956,2,{0x97,0xF9,0x00,0x00,}},
- {0x6957,2,{0xE9,0xA5,0x00,0x00,}},
- {0x6958,2,{0x97,0xFA,0x00,0x00,}},
- {0x6959,2,{0x97,0xFB,0x00,0x00,}},
- {0x695A,2,{0xB3,0xFE,0x00,0x00,}},
- {0x695B,2,{0x97,0xFC,0x00,0x00,}},
- {0x695C,2,{0x97,0xFD,0x00,0x00,}},
- {0x695D,2,{0xE9,0xAC,0x00,0x00,}},
- {0x695E,2,{0xC0,0xE3,0x00,0x00,}},
- {0x695F,2,{0x97,0xFE,0x00,0x00,}},
- {0x6960,2,{0xE9,0xAA,0x00,0x00,}},
- {0x6961,2,{0x98,0x40,0x00,0x00,}},
- {0x6962,2,{0x98,0x41,0x00,0x00,}},
- {0x6963,2,{0xE9,0xB9,0x00,0x00,}},
- {0x6964,2,{0x98,0x42,0x00,0x00,}},
- {0x6965,2,{0x98,0x43,0x00,0x00,}},
- {0x6966,2,{0xE9,0xB8,0x00,0x00,}},
- {0x6967,2,{0x98,0x44,0x00,0x00,}},
- {0x6968,2,{0x98,0x45,0x00,0x00,}},
- {0x6969,2,{0x98,0x46,0x00,0x00,}},
- {0x696A,2,{0x98,0x47,0x00,0x00,}},
- {0x696B,2,{0xE9,0xAE,0x00,0x00,}},
- {0x696C,2,{0x98,0x48,0x00,0x00,}},
- {0x696D,2,{0x98,0x49,0x00,0x00,}},
- {0x696E,2,{0xE8,0xFA,0x00,0x00,}},
- {0x696F,2,{0x98,0x4A,0x00,0x00,}},
- {0x6970,2,{0x98,0x4B,0x00,0x00,}},
- {0x6971,2,{0xE9,0xA8,0x00,0x00,}},
- {0x6972,2,{0x98,0x4C,0x00,0x00,}},
- {0x6973,2,{0x98,0x4D,0x00,0x00,}},
- {0x6974,2,{0x98,0x4E,0x00,0x00,}},
- {0x6975,2,{0x98,0x4F,0x00,0x00,}},
- {0x6976,2,{0x98,0x50,0x00,0x00,}},
- {0x6977,2,{0xBF,0xAC,0x00,0x00,}},
- {0x6978,2,{0xE9,0xB1,0x00,0x00,}},
- {0x6979,2,{0xE9,0xBA,0x00,0x00,}},
- {0x697A,2,{0x98,0x51,0x00,0x00,}},
- {0x697B,2,{0x98,0x52,0x00,0x00,}},
- {0x697C,2,{0xC2,0xA5,0x00,0x00,}},
- {0x697D,2,{0x98,0x53,0x00,0x00,}},
- {0x697E,2,{0x98,0x54,0x00,0x00,}},
- {0x697F,2,{0x98,0x55,0x00,0x00,}},
- {0x6980,2,{0xE9,0xAF,0x00,0x00,}},
- {0x6981,2,{0x98,0x56,0x00,0x00,}},
- {0x6982,2,{0xB8,0xC5,0x00,0x00,}},
- {0x6983,2,{0x98,0x57,0x00,0x00,}},
- {0x6984,2,{0xE9,0xAD,0x00,0x00,}},
- {0x6985,2,{0x98,0x58,0x00,0x00,}},
- {0x6986,2,{0xD3,0xDC,0x00,0x00,}},
- {0x6987,2,{0xE9,0xB4,0x00,0x00,}},
- {0x6988,2,{0xE9,0xB5,0x00,0x00,}},
- {0x6989,2,{0xE9,0xB7,0x00,0x00,}},
- {0x698A,2,{0x98,0x59,0x00,0x00,}},
- {0x698B,2,{0x98,0x5A,0x00,0x00,}},
- {0x698C,2,{0x98,0x5B,0x00,0x00,}},
- {0x698D,2,{0xE9,0xC7,0x00,0x00,}},
- {0x698E,2,{0x98,0x5C,0x00,0x00,}},
- {0x698F,2,{0x98,0x5D,0x00,0x00,}},
- {0x6990,2,{0x98,0x5E,0x00,0x00,}},
- {0x6991,2,{0x98,0x5F,0x00,0x00,}},
- {0x6992,2,{0x98,0x60,0x00,0x00,}},
- {0x6993,2,{0x98,0x61,0x00,0x00,}},
- {0x6994,2,{0xC0,0xC6,0x00,0x00,}},
- {0x6995,2,{0xE9,0xC5,0x00,0x00,}},
- {0x6996,2,{0x98,0x62,0x00,0x00,}},
- {0x6997,2,{0x98,0x63,0x00,0x00,}},
- {0x6998,2,{0xE9,0xB0,0x00,0x00,}},
- {0x6999,2,{0x98,0x64,0x00,0x00,}},
- {0x699A,2,{0x98,0x65,0x00,0x00,}},
- {0x699B,2,{0xE9,0xBB,0x00,0x00,}},
- {0x699C,2,{0xB0,0xF1,0x00,0x00,}},
- {0x699D,2,{0x98,0x66,0x00,0x00,}},
- {0x699E,2,{0x98,0x67,0x00,0x00,}},
- {0x699F,2,{0x98,0x68,0x00,0x00,}},
- {0x69A0,2,{0x98,0x69,0x00,0x00,}},
- {0x69A1,2,{0x98,0x6A,0x00,0x00,}},
- {0x69A2,2,{0x98,0x6B,0x00,0x00,}},
- {0x69A3,2,{0x98,0x6C,0x00,0x00,}},
- {0x69A4,2,{0x98,0x6D,0x00,0x00,}},
- {0x69A5,2,{0x98,0x6E,0x00,0x00,}},
- {0x69A6,2,{0x98,0x6F,0x00,0x00,}},
- {0x69A7,2,{0xE9,0xBC,0x00,0x00,}},
- {0x69A8,2,{0xD5,0xA5,0x00,0x00,}},
- {0x69A9,2,{0x98,0x70,0x00,0x00,}},
- {0x69AA,2,{0x98,0x71,0x00,0x00,}},
- {0x69AB,2,{0xE9,0xBE,0x00,0x00,}},
- {0x69AC,2,{0x98,0x72,0x00,0x00,}},
- {0x69AD,2,{0xE9,0xBF,0x00,0x00,}},
- {0x69AE,2,{0x98,0x73,0x00,0x00,}},
- {0x69AF,2,{0x98,0x74,0x00,0x00,}},
- {0x69B0,2,{0x98,0x75,0x00,0x00,}},
- {0x69B1,2,{0xE9,0xC1,0x00,0x00,}},
- {0x69B2,2,{0x98,0x76,0x00,0x00,}},
- {0x69B3,2,{0x98,0x77,0x00,0x00,}},
- {0x69B4,2,{0xC1,0xF1,0x00,0x00,}},
- {0x69B5,2,{0x98,0x78,0x00,0x00,}},
- {0x69B6,2,{0x98,0x79,0x00,0x00,}},
- {0x69B7,2,{0xC8,0xB6,0x00,0x00,}},
- {0x69B8,2,{0x98,0x7A,0x00,0x00,}},
- {0x69B9,2,{0x98,0x7B,0x00,0x00,}},
- {0x69BA,2,{0x98,0x7C,0x00,0x00,}},
- {0x69BB,2,{0xE9,0xBD,0x00,0x00,}},
- {0x69BC,2,{0x98,0x7D,0x00,0x00,}},
- {0x69BD,2,{0x98,0x7E,0x00,0x00,}},
- {0x69BE,2,{0x98,0x80,0x00,0x00,}},
- {0x69BF,2,{0x98,0x81,0x00,0x00,}},
- {0x69C0,2,{0x98,0x82,0x00,0x00,}},
- {0x69C1,2,{0xE9,0xC2,0x00,0x00,}},
- {0x69C2,2,{0x98,0x83,0x00,0x00,}},
- {0x69C3,2,{0x98,0x84,0x00,0x00,}},
- {0x69C4,2,{0x98,0x85,0x00,0x00,}},
- {0x69C5,2,{0x98,0x86,0x00,0x00,}},
- {0x69C6,2,{0x98,0x87,0x00,0x00,}},
- {0x69C7,2,{0x98,0x88,0x00,0x00,}},
- {0x69C8,2,{0x98,0x89,0x00,0x00,}},
- {0x69C9,2,{0x98,0x8A,0x00,0x00,}},
- {0x69CA,2,{0xE9,0xC3,0x00,0x00,}},
- {0x69CB,2,{0x98,0x8B,0x00,0x00,}},
- {0x69CC,2,{0xE9,0xB3,0x00,0x00,}},
- {0x69CD,2,{0x98,0x8C,0x00,0x00,}},
- {0x69CE,2,{0xE9,0xB6,0x00,0x00,}},
- {0x69CF,2,{0x98,0x8D,0x00,0x00,}},
- {0x69D0,2,{0xBB,0xB1,0x00,0x00,}},
- {0x69D1,2,{0x98,0x8E,0x00,0x00,}},
- {0x69D2,2,{0x98,0x8F,0x00,0x00,}},
- {0x69D3,2,{0x98,0x90,0x00,0x00,}},
- {0x69D4,2,{0xE9,0xC0,0x00,0x00,}},
- {0x69D5,2,{0x98,0x91,0x00,0x00,}},
- {0x69D6,2,{0x98,0x92,0x00,0x00,}},
- {0x69D7,2,{0x98,0x93,0x00,0x00,}},
- {0x69D8,2,{0x98,0x94,0x00,0x00,}},
- {0x69D9,2,{0x98,0x95,0x00,0x00,}},
- {0x69DA,2,{0x98,0x96,0x00,0x00,}},
- {0x69DB,2,{0xBC,0xF7,0x00,0x00,}},
- {0x69DC,2,{0x98,0x97,0x00,0x00,}},
- {0x69DD,2,{0x98,0x98,0x00,0x00,}},
- {0x69DE,2,{0x98,0x99,0x00,0x00,}},
- {0x69DF,2,{0xE9,0xC4,0x00,0x00,}},
- {0x69E0,2,{0xE9,0xC6,0x00,0x00,}},
- {0x69E1,2,{0x98,0x9A,0x00,0x00,}},
- {0x69E2,2,{0x98,0x9B,0x00,0x00,}},
- {0x69E3,2,{0x98,0x9C,0x00,0x00,}},
- {0x69E4,2,{0x98,0x9D,0x00,0x00,}},
- {0x69E5,2,{0x98,0x9E,0x00,0x00,}},
- {0x69E6,2,{0x98,0x9F,0x00,0x00,}},
- {0x69E7,2,{0x98,0xA0,0x00,0x00,}},
- {0x69E8,2,{0x98,0xA1,0x00,0x00,}},
- {0x69E9,2,{0x98,0xA2,0x00,0x00,}},
- {0x69EA,2,{0x98,0xA3,0x00,0x00,}},
- {0x69EB,2,{0x98,0xA4,0x00,0x00,}},
- {0x69EC,2,{0x98,0xA5,0x00,0x00,}},
- {0x69ED,2,{0xE9,0xCA,0x00,0x00,}},
- {0x69EE,2,{0x98,0xA6,0x00,0x00,}},
- {0x69EF,2,{0x98,0xA7,0x00,0x00,}},
- {0x69F0,2,{0x98,0xA8,0x00,0x00,}},
- {0x69F1,2,{0x98,0xA9,0x00,0x00,}},
- {0x69F2,2,{0xE9,0xCE,0x00,0x00,}},
- {0x69F3,2,{0x98,0xAA,0x00,0x00,}},
- {0x69F4,2,{0x98,0xAB,0x00,0x00,}},
- {0x69F5,2,{0x98,0xAC,0x00,0x00,}},
- {0x69F6,2,{0x98,0xAD,0x00,0x00,}},
- {0x69F7,2,{0x98,0xAE,0x00,0x00,}},
- {0x69F8,2,{0x98,0xAF,0x00,0x00,}},
- {0x69F9,2,{0x98,0xB0,0x00,0x00,}},
- {0x69FA,2,{0x98,0xB1,0x00,0x00,}},
- {0x69FB,2,{0x98,0xB2,0x00,0x00,}},
- {0x69FC,2,{0x98,0xB3,0x00,0x00,}},
- {0x69FD,2,{0xB2,0xDB,0x00,0x00,}},
- {0x69FE,2,{0x98,0xB4,0x00,0x00,}},
- {0x69FF,2,{0xE9,0xC8,0x00,0x00,}},
- {0x6A00,2,{0x98,0xB5,0x00,0x00,}},
- {0x6A01,2,{0x98,0xB6,0x00,0x00,}},
- {0x6A02,2,{0x98,0xB7,0x00,0x00,}},
- {0x6A03,2,{0x98,0xB8,0x00,0x00,}},
- {0x6A04,2,{0x98,0xB9,0x00,0x00,}},
- {0x6A05,2,{0x98,0xBA,0x00,0x00,}},
- {0x6A06,2,{0x98,0xBB,0x00,0x00,}},
- {0x6A07,2,{0x98,0xBC,0x00,0x00,}},
- {0x6A08,2,{0x98,0xBD,0x00,0x00,}},
- {0x6A09,2,{0x98,0xBE,0x00,0x00,}},
- {0x6A0A,2,{0xB7,0xAE,0x00,0x00,}},
- {0x6A0B,2,{0x98,0xBF,0x00,0x00,}},
- {0x6A0C,2,{0x98,0xC0,0x00,0x00,}},
- {0x6A0D,2,{0x98,0xC1,0x00,0x00,}},
- {0x6A0E,2,{0x98,0xC2,0x00,0x00,}},
- {0x6A0F,2,{0x98,0xC3,0x00,0x00,}},
- {0x6A10,2,{0x98,0xC4,0x00,0x00,}},
- {0x6A11,2,{0x98,0xC5,0x00,0x00,}},
- {0x6A12,2,{0x98,0xC6,0x00,0x00,}},
- {0x6A13,2,{0x98,0xC7,0x00,0x00,}},
- {0x6A14,2,{0x98,0xC8,0x00,0x00,}},
- {0x6A15,2,{0x98,0xC9,0x00,0x00,}},
- {0x6A16,2,{0x98,0xCA,0x00,0x00,}},
- {0x6A17,2,{0xE9,0xCB,0x00,0x00,}},
- {0x6A18,2,{0xE9,0xCC,0x00,0x00,}},
- {0x6A19,2,{0x98,0xCB,0x00,0x00,}},
- {0x6A1A,2,{0x98,0xCC,0x00,0x00,}},
- {0x6A1B,2,{0x98,0xCD,0x00,0x00,}},
- {0x6A1C,2,{0x98,0xCE,0x00,0x00,}},
- {0x6A1D,2,{0x98,0xCF,0x00,0x00,}},
- {0x6A1E,2,{0x98,0xD0,0x00,0x00,}},
- {0x6A1F,2,{0xD5,0xC1,0x00,0x00,}},
- {0x6A20,2,{0x98,0xD1,0x00,0x00,}},
- {0x6A21,2,{0xC4,0xA3,0x00,0x00,}},
- {0x6A22,2,{0x98,0xD2,0x00,0x00,}},
- {0x6A23,2,{0x98,0xD3,0x00,0x00,}},
- {0x6A24,2,{0x98,0xD4,0x00,0x00,}},
- {0x6A25,2,{0x98,0xD5,0x00,0x00,}},
- {0x6A26,2,{0x98,0xD6,0x00,0x00,}},
- {0x6A27,2,{0x98,0xD7,0x00,0x00,}},
- {0x6A28,2,{0xE9,0xD8,0x00,0x00,}},
- {0x6A29,2,{0x98,0xD8,0x00,0x00,}},
- {0x6A2A,2,{0xBA,0xE1,0x00,0x00,}},
- {0x6A2B,2,{0x98,0xD9,0x00,0x00,}},
- {0x6A2C,2,{0x98,0xDA,0x00,0x00,}},
- {0x6A2D,2,{0x98,0xDB,0x00,0x00,}},
- {0x6A2E,2,{0x98,0xDC,0x00,0x00,}},
- {0x6A2F,2,{0xE9,0xC9,0x00,0x00,}},
- {0x6A30,2,{0x98,0xDD,0x00,0x00,}},
- {0x6A31,2,{0xD3,0xA3,0x00,0x00,}},
- {0x6A32,2,{0x98,0xDE,0x00,0x00,}},
- {0x6A33,2,{0x98,0xDF,0x00,0x00,}},
- {0x6A34,2,{0x98,0xE0,0x00,0x00,}},
- {0x6A35,2,{0xE9,0xD4,0x00,0x00,}},
- {0x6A36,2,{0x98,0xE1,0x00,0x00,}},
- {0x6A37,2,{0x98,0xE2,0x00,0x00,}},
- {0x6A38,2,{0x98,0xE3,0x00,0x00,}},
- {0x6A39,2,{0x98,0xE4,0x00,0x00,}},
- {0x6A3A,2,{0x98,0xE5,0x00,0x00,}},
- {0x6A3B,2,{0x98,0xE6,0x00,0x00,}},
- {0x6A3C,2,{0x98,0xE7,0x00,0x00,}},
- {0x6A3D,2,{0xE9,0xD7,0x00,0x00,}},
- {0x6A3E,2,{0xE9,0xD0,0x00,0x00,}},
- {0x6A3F,2,{0x98,0xE8,0x00,0x00,}},
- {0x6A40,2,{0x98,0xE9,0x00,0x00,}},
- {0x6A41,2,{0x98,0xEA,0x00,0x00,}},
- {0x6A42,2,{0x98,0xEB,0x00,0x00,}},
- {0x6A43,2,{0x98,0xEC,0x00,0x00,}},
- {0x6A44,2,{0xE9,0xCF,0x00,0x00,}},
- {0x6A45,2,{0x98,0xED,0x00,0x00,}},
- {0x6A46,2,{0x98,0xEE,0x00,0x00,}},
- {0x6A47,2,{0xC7,0xC1,0x00,0x00,}},
- {0x6A48,2,{0x98,0xEF,0x00,0x00,}},
- {0x6A49,2,{0x98,0xF0,0x00,0x00,}},
- {0x6A4A,2,{0x98,0xF1,0x00,0x00,}},
- {0x6A4B,2,{0x98,0xF2,0x00,0x00,}},
- {0x6A4C,2,{0x98,0xF3,0x00,0x00,}},
- {0x6A4D,2,{0x98,0xF4,0x00,0x00,}},
- {0x6A4E,2,{0x98,0xF5,0x00,0x00,}},
- {0x6A4F,2,{0x98,0xF6,0x00,0x00,}},
- {0x6A50,2,{0xE9,0xD2,0x00,0x00,}},
- {0x6A51,2,{0x98,0xF7,0x00,0x00,}},
- {0x6A52,2,{0x98,0xF8,0x00,0x00,}},
- {0x6A53,2,{0x98,0xF9,0x00,0x00,}},
- {0x6A54,2,{0x98,0xFA,0x00,0x00,}},
- {0x6A55,2,{0x98,0xFB,0x00,0x00,}},
- {0x6A56,2,{0x98,0xFC,0x00,0x00,}},
- {0x6A57,2,{0x98,0xFD,0x00,0x00,}},
- {0x6A58,2,{0xE9,0xD9,0x00,0x00,}},
- {0x6A59,2,{0xB3,0xC8,0x00,0x00,}},
- {0x6A5A,2,{0x98,0xFE,0x00,0x00,}},
- {0x6A5B,2,{0xE9,0xD3,0x00,0x00,}},
- {0x6A5C,2,{0x99,0x40,0x00,0x00,}},
- {0x6A5D,2,{0x99,0x41,0x00,0x00,}},
- {0x6A5E,2,{0x99,0x42,0x00,0x00,}},
- {0x6A5F,2,{0x99,0x43,0x00,0x00,}},
- {0x6A60,2,{0x99,0x44,0x00,0x00,}},
- {0x6A61,2,{0xCF,0xF0,0x00,0x00,}},
- {0x6A62,2,{0x99,0x45,0x00,0x00,}},
- {0x6A63,2,{0x99,0x46,0x00,0x00,}},
- {0x6A64,2,{0x99,0x47,0x00,0x00,}},
- {0x6A65,2,{0xE9,0xCD,0x00,0x00,}},
- {0x6A66,2,{0x99,0x48,0x00,0x00,}},
- {0x6A67,2,{0x99,0x49,0x00,0x00,}},
- {0x6A68,2,{0x99,0x4A,0x00,0x00,}},
- {0x6A69,2,{0x99,0x4B,0x00,0x00,}},
- {0x6A6A,2,{0x99,0x4C,0x00,0x00,}},
- {0x6A6B,2,{0x99,0x4D,0x00,0x00,}},
- {0x6A6C,2,{0x99,0x4E,0x00,0x00,}},
- {0x6A6D,2,{0x99,0x4F,0x00,0x00,}},
- {0x6A6E,2,{0x99,0x50,0x00,0x00,}},
- {0x6A6F,2,{0x99,0x51,0x00,0x00,}},
- {0x6A70,2,{0x99,0x52,0x00,0x00,}},
- {0x6A71,2,{0xB3,0xF7,0x00,0x00,}},
- {0x6A72,2,{0x99,0x53,0x00,0x00,}},
- {0x6A73,2,{0x99,0x54,0x00,0x00,}},
- {0x6A74,2,{0x99,0x55,0x00,0x00,}},
- {0x6A75,2,{0x99,0x56,0x00,0x00,}},
- {0x6A76,2,{0x99,0x57,0x00,0x00,}},
- {0x6A77,2,{0x99,0x58,0x00,0x00,}},
- {0x6A78,2,{0x99,0x59,0x00,0x00,}},
- {0x6A79,2,{0xE9,0xD6,0x00,0x00,}},
- {0x6A7A,2,{0x99,0x5A,0x00,0x00,}},
- {0x6A7B,2,{0x99,0x5B,0x00,0x00,}},
- {0x6A7C,2,{0xE9,0xDA,0x00,0x00,}},
- {0x6A7D,2,{0x99,0x5C,0x00,0x00,}},
- {0x6A7E,2,{0x99,0x5D,0x00,0x00,}},
- {0x6A7F,2,{0x99,0x5E,0x00,0x00,}},
- {0x6A80,2,{0xCC,0xB4,0x00,0x00,}},
- {0x6A81,2,{0x99,0x5F,0x00,0x00,}},
- {0x6A82,2,{0x99,0x60,0x00,0x00,}},
- {0x6A83,2,{0x99,0x61,0x00,0x00,}},
- {0x6A84,2,{0xCF,0xAD,0x00,0x00,}},
- {0x6A85,2,{0x99,0x62,0x00,0x00,}},
- {0x6A86,2,{0x99,0x63,0x00,0x00,}},
- {0x6A87,2,{0x99,0x64,0x00,0x00,}},
- {0x6A88,2,{0x99,0x65,0x00,0x00,}},
- {0x6A89,2,{0x99,0x66,0x00,0x00,}},
- {0x6A8A,2,{0x99,0x67,0x00,0x00,}},
- {0x6A8B,2,{0x99,0x68,0x00,0x00,}},
- {0x6A8C,2,{0x99,0x69,0x00,0x00,}},
- {0x6A8D,2,{0x99,0x6A,0x00,0x00,}},
- {0x6A8E,2,{0xE9,0xD5,0x00,0x00,}},
- {0x6A8F,2,{0x99,0x6B,0x00,0x00,}},
- {0x6A90,2,{0xE9,0xDC,0x00,0x00,}},
- {0x6A91,2,{0xE9,0xDB,0x00,0x00,}},
- {0x6A92,2,{0x99,0x6C,0x00,0x00,}},
- {0x6A93,2,{0x99,0x6D,0x00,0x00,}},
- {0x6A94,2,{0x99,0x6E,0x00,0x00,}},
- {0x6A95,2,{0x99,0x6F,0x00,0x00,}},
- {0x6A96,2,{0x99,0x70,0x00,0x00,}},
- {0x6A97,2,{0xE9,0xDE,0x00,0x00,}},
- {0x6A98,2,{0x99,0x71,0x00,0x00,}},
- {0x6A99,2,{0x99,0x72,0x00,0x00,}},
- {0x6A9A,2,{0x99,0x73,0x00,0x00,}},
- {0x6A9B,2,{0x99,0x74,0x00,0x00,}},
- {0x6A9C,2,{0x99,0x75,0x00,0x00,}},
- {0x6A9D,2,{0x99,0x76,0x00,0x00,}},
- {0x6A9E,2,{0x99,0x77,0x00,0x00,}},
- {0x6A9F,2,{0x99,0x78,0x00,0x00,}},
- {0x6AA0,2,{0xE9,0xD1,0x00,0x00,}},
- {0x6AA1,2,{0x99,0x79,0x00,0x00,}},
- {0x6AA2,2,{0x99,0x7A,0x00,0x00,}},
- {0x6AA3,2,{0x99,0x7B,0x00,0x00,}},
- {0x6AA4,2,{0x99,0x7C,0x00,0x00,}},
- {0x6AA5,2,{0x99,0x7D,0x00,0x00,}},
- {0x6AA6,2,{0x99,0x7E,0x00,0x00,}},
- {0x6AA7,2,{0x99,0x80,0x00,0x00,}},
- {0x6AA8,2,{0x99,0x81,0x00,0x00,}},
- {0x6AA9,2,{0xE9,0xDD,0x00,0x00,}},
- {0x6AAA,2,{0x99,0x82,0x00,0x00,}},
- {0x6AAB,2,{0xE9,0xDF,0x00,0x00,}},
- {0x6AAC,2,{0xC3,0xCA,0x00,0x00,}},
- {0x6AAD,2,{0x99,0x83,0x00,0x00,}},
- {0x6AAE,2,{0x99,0x84,0x00,0x00,}},
- {0x6AAF,2,{0x99,0x85,0x00,0x00,}},
- {0x6AB0,2,{0x99,0x86,0x00,0x00,}},
- {0x6AB1,2,{0x99,0x87,0x00,0x00,}},
- {0x6AB2,2,{0x99,0x88,0x00,0x00,}},
- {0x6AB3,2,{0x99,0x89,0x00,0x00,}},
- {0x6AB4,2,{0x99,0x8A,0x00,0x00,}},
- {0x6AB5,2,{0x99,0x8B,0x00,0x00,}},
- {0x6AB6,2,{0x99,0x8C,0x00,0x00,}},
- {0x6AB7,2,{0x99,0x8D,0x00,0x00,}},
- {0x6AB8,2,{0x99,0x8E,0x00,0x00,}},
- {0x6AB9,2,{0x99,0x8F,0x00,0x00,}},
- {0x6ABA,2,{0x99,0x90,0x00,0x00,}},
- {0x6ABB,2,{0x99,0x91,0x00,0x00,}},
- {0x6ABC,2,{0x99,0x92,0x00,0x00,}},
- {0x6ABD,2,{0x99,0x93,0x00,0x00,}},
- {0x6ABE,2,{0x99,0x94,0x00,0x00,}},
- {0x6ABF,2,{0x99,0x95,0x00,0x00,}},
- {0x6AC0,2,{0x99,0x96,0x00,0x00,}},
- {0x6AC1,2,{0x99,0x97,0x00,0x00,}},
- {0x6AC2,2,{0x99,0x98,0x00,0x00,}},
- {0x6AC3,2,{0x99,0x99,0x00,0x00,}},
- {0x6AC4,2,{0x99,0x9A,0x00,0x00,}},
- {0x6AC5,2,{0x99,0x9B,0x00,0x00,}},
- {0x6AC6,2,{0x99,0x9C,0x00,0x00,}},
- {0x6AC7,2,{0x99,0x9D,0x00,0x00,}},
- {0x6AC8,2,{0x99,0x9E,0x00,0x00,}},
- {0x6AC9,2,{0x99,0x9F,0x00,0x00,}},
- {0x6ACA,2,{0x99,0xA0,0x00,0x00,}},
- {0x6ACB,2,{0x99,0xA1,0x00,0x00,}},
- {0x6ACC,2,{0x99,0xA2,0x00,0x00,}},
- {0x6ACD,2,{0x99,0xA3,0x00,0x00,}},
- {0x6ACE,2,{0x99,0xA4,0x00,0x00,}},
- {0x6ACF,2,{0x99,0xA5,0x00,0x00,}},
- {0x6AD0,2,{0x99,0xA6,0x00,0x00,}},
- {0x6AD1,2,{0x99,0xA7,0x00,0x00,}},
- {0x6AD2,2,{0x99,0xA8,0x00,0x00,}},
- {0x6AD3,2,{0x99,0xA9,0x00,0x00,}},
- {0x6AD4,2,{0x99,0xAA,0x00,0x00,}},
- {0x6AD5,2,{0x99,0xAB,0x00,0x00,}},
- {0x6AD6,2,{0x99,0xAC,0x00,0x00,}},
- {0x6AD7,2,{0x99,0xAD,0x00,0x00,}},
- {0x6AD8,2,{0x99,0xAE,0x00,0x00,}},
- {0x6AD9,2,{0x99,0xAF,0x00,0x00,}},
- {0x6ADA,2,{0x99,0xB0,0x00,0x00,}},
- {0x6ADB,2,{0x99,0xB1,0x00,0x00,}},
- {0x6ADC,2,{0x99,0xB2,0x00,0x00,}},
- {0x6ADD,2,{0x99,0xB3,0x00,0x00,}},
- {0x6ADE,2,{0x99,0xB4,0x00,0x00,}},
- {0x6ADF,2,{0x99,0xB5,0x00,0x00,}},
- {0x6AE0,2,{0x99,0xB6,0x00,0x00,}},
- {0x6AE1,2,{0x99,0xB7,0x00,0x00,}},
- {0x6AE2,2,{0x99,0xB8,0x00,0x00,}},
- {0x6AE3,2,{0x99,0xB9,0x00,0x00,}},
- {0x6AE4,2,{0x99,0xBA,0x00,0x00,}},
- {0x6AE5,2,{0x99,0xBB,0x00,0x00,}},
- {0x6AE6,2,{0x99,0xBC,0x00,0x00,}},
- {0x6AE7,2,{0x99,0xBD,0x00,0x00,}},
- {0x6AE8,2,{0x99,0xBE,0x00,0x00,}},
- {0x6AE9,2,{0x99,0xBF,0x00,0x00,}},
- {0x6AEA,2,{0x99,0xC0,0x00,0x00,}},
- {0x6AEB,2,{0x99,0xC1,0x00,0x00,}},
- {0x6AEC,2,{0x99,0xC2,0x00,0x00,}},
- {0x6AED,2,{0x99,0xC3,0x00,0x00,}},
- {0x6AEE,2,{0x99,0xC4,0x00,0x00,}},
- {0x6AEF,2,{0x99,0xC5,0x00,0x00,}},
- {0x6AF0,2,{0x99,0xC6,0x00,0x00,}},
- {0x6AF1,2,{0x99,0xC7,0x00,0x00,}},
- {0x6AF2,2,{0x99,0xC8,0x00,0x00,}},
- {0x6AF3,2,{0x99,0xC9,0x00,0x00,}},
- {0x6AF4,2,{0x99,0xCA,0x00,0x00,}},
- {0x6AF5,2,{0x99,0xCB,0x00,0x00,}},
- {0x6AF6,2,{0x99,0xCC,0x00,0x00,}},
- {0x6AF7,2,{0x99,0xCD,0x00,0x00,}},
- {0x6AF8,2,{0x99,0xCE,0x00,0x00,}},
- {0x6AF9,2,{0x99,0xCF,0x00,0x00,}},
- {0x6AFA,2,{0x99,0xD0,0x00,0x00,}},
- {0x6AFB,2,{0x99,0xD1,0x00,0x00,}},
- {0x6AFC,2,{0x99,0xD2,0x00,0x00,}},
- {0x6AFD,2,{0x99,0xD3,0x00,0x00,}},
- {0x6AFE,2,{0x99,0xD4,0x00,0x00,}},
- {0x6AFF,2,{0x99,0xD5,0x00,0x00,}},
- {0x6B00,2,{0x99,0xD6,0x00,0x00,}},
- {0x6B01,2,{0x99,0xD7,0x00,0x00,}},
- {0x6B02,2,{0x99,0xD8,0x00,0x00,}},
- {0x6B03,2,{0x99,0xD9,0x00,0x00,}},
- {0x6B04,2,{0x99,0xDA,0x00,0x00,}},
- {0x6B05,2,{0x99,0xDB,0x00,0x00,}},
- {0x6B06,2,{0x99,0xDC,0x00,0x00,}},
- {0x6B07,2,{0x99,0xDD,0x00,0x00,}},
- {0x6B08,2,{0x99,0xDE,0x00,0x00,}},
- {0x6B09,2,{0x99,0xDF,0x00,0x00,}},
- {0x6B0A,2,{0x99,0xE0,0x00,0x00,}},
- {0x6B0B,2,{0x99,0xE1,0x00,0x00,}},
- {0x6B0C,2,{0x99,0xE2,0x00,0x00,}},
- {0x6B0D,2,{0x99,0xE3,0x00,0x00,}},
- {0x6B0E,2,{0x99,0xE4,0x00,0x00,}},
- {0x6B0F,2,{0x99,0xE5,0x00,0x00,}},
- {0x6B10,2,{0x99,0xE6,0x00,0x00,}},
- {0x6B11,2,{0x99,0xE7,0x00,0x00,}},
- {0x6B12,2,{0x99,0xE8,0x00,0x00,}},
- {0x6B13,2,{0x99,0xE9,0x00,0x00,}},
- {0x6B14,2,{0x99,0xEA,0x00,0x00,}},
- {0x6B15,2,{0x99,0xEB,0x00,0x00,}},
- {0x6B16,2,{0x99,0xEC,0x00,0x00,}},
- {0x6B17,2,{0x99,0xED,0x00,0x00,}},
- {0x6B18,2,{0x99,0xEE,0x00,0x00,}},
- {0x6B19,2,{0x99,0xEF,0x00,0x00,}},
- {0x6B1A,2,{0x99,0xF0,0x00,0x00,}},
- {0x6B1B,2,{0x99,0xF1,0x00,0x00,}},
- {0x6B1C,2,{0x99,0xF2,0x00,0x00,}},
- {0x6B1D,2,{0x99,0xF3,0x00,0x00,}},
- {0x6B1E,2,{0x99,0xF4,0x00,0x00,}},
- {0x6B1F,2,{0x99,0xF5,0x00,0x00,}},
- {0x6B20,2,{0xC7,0xB7,0x00,0x00,}},
- {0x6B21,2,{0xB4,0xCE,0x00,0x00,}},
- {0x6B22,2,{0xBB,0xB6,0x00,0x00,}},
- {0x6B23,2,{0xD0,0xC0,0x00,0x00,}},
- {0x6B24,2,{0xEC,0xA3,0x00,0x00,}},
- {0x6B25,2,{0x99,0xF6,0x00,0x00,}},
- {0x6B26,2,{0x99,0xF7,0x00,0x00,}},
- {0x6B27,2,{0xC5,0xB7,0x00,0x00,}},
- {0x6B28,2,{0x99,0xF8,0x00,0x00,}},
- {0x6B29,2,{0x99,0xF9,0x00,0x00,}},
- {0x6B2A,2,{0x99,0xFA,0x00,0x00,}},
- {0x6B2B,2,{0x99,0xFB,0x00,0x00,}},
- {0x6B2C,2,{0x99,0xFC,0x00,0x00,}},
- {0x6B2D,2,{0x99,0xFD,0x00,0x00,}},
- {0x6B2E,2,{0x99,0xFE,0x00,0x00,}},
- {0x6B2F,2,{0x9A,0x40,0x00,0x00,}},
- {0x6B30,2,{0x9A,0x41,0x00,0x00,}},
- {0x6B31,2,{0x9A,0x42,0x00,0x00,}},
- {0x6B32,2,{0xD3,0xFB,0x00,0x00,}},
- {0x6B33,2,{0x9A,0x43,0x00,0x00,}},
- {0x6B34,2,{0x9A,0x44,0x00,0x00,}},
- {0x6B35,2,{0x9A,0x45,0x00,0x00,}},
- {0x6B36,2,{0x9A,0x46,0x00,0x00,}},
- {0x6B37,2,{0xEC,0xA4,0x00,0x00,}},
- {0x6B38,2,{0x9A,0x47,0x00,0x00,}},
- {0x6B39,2,{0xEC,0xA5,0x00,0x00,}},
- {0x6B3A,2,{0xC6,0xDB,0x00,0x00,}},
- {0x6B3B,2,{0x9A,0x48,0x00,0x00,}},
- {0x6B3C,2,{0x9A,0x49,0x00,0x00,}},
- {0x6B3D,2,{0x9A,0x4A,0x00,0x00,}},
- {0x6B3E,2,{0xBF,0xEE,0x00,0x00,}},
- {0x6B3F,2,{0x9A,0x4B,0x00,0x00,}},
- {0x6B40,2,{0x9A,0x4C,0x00,0x00,}},
- {0x6B41,2,{0x9A,0x4D,0x00,0x00,}},
- {0x6B42,2,{0x9A,0x4E,0x00,0x00,}},
- {0x6B43,2,{0xEC,0xA6,0x00,0x00,}},
- {0x6B44,2,{0x9A,0x4F,0x00,0x00,}},
- {0x6B45,2,{0x9A,0x50,0x00,0x00,}},
- {0x6B46,2,{0xEC,0xA7,0x00,0x00,}},
- {0x6B47,2,{0xD0,0xAA,0x00,0x00,}},
- {0x6B48,2,{0x9A,0x51,0x00,0x00,}},
- {0x6B49,2,{0xC7,0xB8,0x00,0x00,}},
- {0x6B4A,2,{0x9A,0x52,0x00,0x00,}},
- {0x6B4B,2,{0x9A,0x53,0x00,0x00,}},
- {0x6B4C,2,{0xB8,0xE8,0x00,0x00,}},
- {0x6B4D,2,{0x9A,0x54,0x00,0x00,}},
- {0x6B4E,2,{0x9A,0x55,0x00,0x00,}},
- {0x6B4F,2,{0x9A,0x56,0x00,0x00,}},
- {0x6B50,2,{0x9A,0x57,0x00,0x00,}},
- {0x6B51,2,{0x9A,0x58,0x00,0x00,}},
- {0x6B52,2,{0x9A,0x59,0x00,0x00,}},
- {0x6B53,2,{0x9A,0x5A,0x00,0x00,}},
- {0x6B54,2,{0x9A,0x5B,0x00,0x00,}},
- {0x6B55,2,{0x9A,0x5C,0x00,0x00,}},
- {0x6B56,2,{0x9A,0x5D,0x00,0x00,}},
- {0x6B57,2,{0x9A,0x5E,0x00,0x00,}},
- {0x6B58,2,{0x9A,0x5F,0x00,0x00,}},
- {0x6B59,2,{0xEC,0xA8,0x00,0x00,}},
- {0x6B5A,2,{0x9A,0x60,0x00,0x00,}},
- {0x6B5B,2,{0x9A,0x61,0x00,0x00,}},
- {0x6B5C,2,{0x9A,0x62,0x00,0x00,}},
- {0x6B5D,2,{0x9A,0x63,0x00,0x00,}},
- {0x6B5E,2,{0x9A,0x64,0x00,0x00,}},
- {0x6B5F,2,{0x9A,0x65,0x00,0x00,}},
- {0x6B60,2,{0x9A,0x66,0x00,0x00,}},
- {0x6B61,2,{0x9A,0x67,0x00,0x00,}},
- {0x6B62,2,{0xD6,0xB9,0x00,0x00,}},
- {0x6B63,2,{0xD5,0xFD,0x00,0x00,}},
- {0x6B64,2,{0xB4,0xCB,0x00,0x00,}},
- {0x6B65,2,{0xB2,0xBD,0x00,0x00,}},
- {0x6B66,2,{0xCE,0xE4,0x00,0x00,}},
- {0x6B67,2,{0xC6,0xE7,0x00,0x00,}},
- {0x6B68,2,{0x9A,0x68,0x00,0x00,}},
- {0x6B69,2,{0x9A,0x69,0x00,0x00,}},
- {0x6B6A,2,{0xCD,0xE1,0x00,0x00,}},
- {0x6B6B,2,{0x9A,0x6A,0x00,0x00,}},
- {0x6B6C,2,{0x9A,0x6B,0x00,0x00,}},
- {0x6B6D,2,{0x9A,0x6C,0x00,0x00,}},
- {0x6B6E,2,{0x9A,0x6D,0x00,0x00,}},
- {0x6B6F,2,{0x9A,0x6E,0x00,0x00,}},
- {0x6B70,2,{0x9A,0x6F,0x00,0x00,}},
- {0x6B71,2,{0x9A,0x70,0x00,0x00,}},
- {0x6B72,2,{0x9A,0x71,0x00,0x00,}},
- {0x6B73,2,{0x9A,0x72,0x00,0x00,}},
- {0x6B74,2,{0x9A,0x73,0x00,0x00,}},
- {0x6B75,2,{0x9A,0x74,0x00,0x00,}},
- {0x6B76,2,{0x9A,0x75,0x00,0x00,}},
- {0x6B77,2,{0x9A,0x76,0x00,0x00,}},
- {0x6B78,2,{0x9A,0x77,0x00,0x00,}},
- {0x6B79,2,{0xB4,0xF5,0x00,0x00,}},
- {0x6B7A,2,{0x9A,0x78,0x00,0x00,}},
- {0x6B7B,2,{0xCB,0xC0,0x00,0x00,}},
- {0x6B7C,2,{0xBC,0xDF,0x00,0x00,}},
- {0x6B7D,2,{0x9A,0x79,0x00,0x00,}},
- {0x6B7E,2,{0x9A,0x7A,0x00,0x00,}},
- {0x6B7F,2,{0x9A,0x7B,0x00,0x00,}},
- {0x6B80,2,{0x9A,0x7C,0x00,0x00,}},
- {0x6B81,2,{0xE9,0xE2,0x00,0x00,}},
- {0x6B82,2,{0xE9,0xE3,0x00,0x00,}},
- {0x6B83,2,{0xD1,0xEA,0x00,0x00,}},
- {0x6B84,2,{0xE9,0xE5,0x00,0x00,}},
- {0x6B85,2,{0x9A,0x7D,0x00,0x00,}},
- {0x6B86,2,{0xB4,0xF9,0x00,0x00,}},
- {0x6B87,2,{0xE9,0xE4,0x00,0x00,}},
- {0x6B88,2,{0x9A,0x7E,0x00,0x00,}},
- {0x6B89,2,{0xD1,0xB3,0x00,0x00,}},
- {0x6B8A,2,{0xCA,0xE2,0x00,0x00,}},
- {0x6B8B,2,{0xB2,0xD0,0x00,0x00,}},
- {0x6B8C,2,{0x9A,0x80,0x00,0x00,}},
- {0x6B8D,2,{0xE9,0xE8,0x00,0x00,}},
- {0x6B8E,2,{0x9A,0x81,0x00,0x00,}},
- {0x6B8F,2,{0x9A,0x82,0x00,0x00,}},
- {0x6B90,2,{0x9A,0x83,0x00,0x00,}},
- {0x6B91,2,{0x9A,0x84,0x00,0x00,}},
- {0x6B92,2,{0xE9,0xE6,0x00,0x00,}},
- {0x6B93,2,{0xE9,0xE7,0x00,0x00,}},
- {0x6B94,2,{0x9A,0x85,0x00,0x00,}},
- {0x6B95,2,{0x9A,0x86,0x00,0x00,}},
- {0x6B96,2,{0xD6,0xB3,0x00,0x00,}},
- {0x6B97,2,{0x9A,0x87,0x00,0x00,}},
- {0x6B98,2,{0x9A,0x88,0x00,0x00,}},
- {0x6B99,2,{0x9A,0x89,0x00,0x00,}},
- {0x6B9A,2,{0xE9,0xE9,0x00,0x00,}},
- {0x6B9B,2,{0xE9,0xEA,0x00,0x00,}},
- {0x6B9C,2,{0x9A,0x8A,0x00,0x00,}},
- {0x6B9D,2,{0x9A,0x8B,0x00,0x00,}},
- {0x6B9E,2,{0x9A,0x8C,0x00,0x00,}},
- {0x6B9F,2,{0x9A,0x8D,0x00,0x00,}},
- {0x6BA0,2,{0x9A,0x8E,0x00,0x00,}},
- {0x6BA1,2,{0xE9,0xEB,0x00,0x00,}},
- {0x6BA2,2,{0x9A,0x8F,0x00,0x00,}},
- {0x6BA3,2,{0x9A,0x90,0x00,0x00,}},
- {0x6BA4,2,{0x9A,0x91,0x00,0x00,}},
- {0x6BA5,2,{0x9A,0x92,0x00,0x00,}},
- {0x6BA6,2,{0x9A,0x93,0x00,0x00,}},
- {0x6BA7,2,{0x9A,0x94,0x00,0x00,}},
- {0x6BA8,2,{0x9A,0x95,0x00,0x00,}},
- {0x6BA9,2,{0x9A,0x96,0x00,0x00,}},
- {0x6BAA,2,{0xE9,0xEC,0x00,0x00,}},
- {0x6BAB,2,{0x9A,0x97,0x00,0x00,}},
- {0x6BAC,2,{0x9A,0x98,0x00,0x00,}},
- {0x6BAD,2,{0x9A,0x99,0x00,0x00,}},
- {0x6BAE,2,{0x9A,0x9A,0x00,0x00,}},
- {0x6BAF,2,{0x9A,0x9B,0x00,0x00,}},
- {0x6BB0,2,{0x9A,0x9C,0x00,0x00,}},
- {0x6BB1,2,{0x9A,0x9D,0x00,0x00,}},
- {0x6BB2,2,{0x9A,0x9E,0x00,0x00,}},
- {0x6BB3,2,{0xEC,0xAF,0x00,0x00,}},
- {0x6BB4,2,{0xC5,0xB9,0x00,0x00,}},
- {0x6BB5,2,{0xB6,0xCE,0x00,0x00,}},
- {0x6BB6,2,{0x9A,0x9F,0x00,0x00,}},
- {0x6BB7,2,{0xD2,0xF3,0x00,0x00,}},
- {0x6BB8,2,{0x9A,0xA0,0x00,0x00,}},
- {0x6BB9,2,{0x9A,0xA1,0x00,0x00,}},
- {0x6BBA,2,{0x9A,0xA2,0x00,0x00,}},
- {0x6BBB,2,{0x9A,0xA3,0x00,0x00,}},
- {0x6BBC,2,{0x9A,0xA4,0x00,0x00,}},
- {0x6BBD,2,{0x9A,0xA5,0x00,0x00,}},
- {0x6BBE,2,{0x9A,0xA6,0x00,0x00,}},
- {0x6BBF,2,{0xB5,0xEE,0x00,0x00,}},
- {0x6BC0,2,{0x9A,0xA7,0x00,0x00,}},
- {0x6BC1,2,{0xBB,0xD9,0x00,0x00,}},
- {0x6BC2,2,{0xEC,0xB1,0x00,0x00,}},
- {0x6BC3,2,{0x9A,0xA8,0x00,0x00,}},
- {0x6BC4,2,{0x9A,0xA9,0x00,0x00,}},
- {0x6BC5,2,{0xD2,0xE3,0x00,0x00,}},
- {0x6BC6,2,{0x9A,0xAA,0x00,0x00,}},
- {0x6BC7,2,{0x9A,0xAB,0x00,0x00,}},
- {0x6BC8,2,{0x9A,0xAC,0x00,0x00,}},
- {0x6BC9,2,{0x9A,0xAD,0x00,0x00,}},
- {0x6BCA,2,{0x9A,0xAE,0x00,0x00,}},
- {0x6BCB,2,{0xCE,0xE3,0x00,0x00,}},
- {0x6BCC,2,{0x9A,0xAF,0x00,0x00,}},
- {0x6BCD,2,{0xC4,0xB8,0x00,0x00,}},
- {0x6BCE,2,{0x9A,0xB0,0x00,0x00,}},
- {0x6BCF,2,{0xC3,0xBF,0x00,0x00,}},
- {0x6BD0,2,{0x9A,0xB1,0x00,0x00,}},
- {0x6BD1,2,{0x9A,0xB2,0x00,0x00,}},
- {0x6BD2,2,{0xB6,0xBE,0x00,0x00,}},
- {0x6BD3,2,{0xD8,0xB9,0x00,0x00,}},
- {0x6BD4,2,{0xB1,0xC8,0x00,0x00,}},
- {0x6BD5,2,{0xB1,0xCF,0x00,0x00,}},
- {0x6BD6,2,{0xB1,0xD1,0x00,0x00,}},
- {0x6BD7,2,{0xC5,0xFE,0x00,0x00,}},
- {0x6BD8,2,{0x9A,0xB3,0x00,0x00,}},
- {0x6BD9,2,{0xB1,0xD0,0x00,0x00,}},
- {0x6BDA,2,{0x9A,0xB4,0x00,0x00,}},
- {0x6BDB,2,{0xC3,0xAB,0x00,0x00,}},
- {0x6BDC,2,{0x9A,0xB5,0x00,0x00,}},
- {0x6BDD,2,{0x9A,0xB6,0x00,0x00,}},
- {0x6BDE,2,{0x9A,0xB7,0x00,0x00,}},
- {0x6BDF,2,{0x9A,0xB8,0x00,0x00,}},
- {0x6BE0,2,{0x9A,0xB9,0x00,0x00,}},
- {0x6BE1,2,{0xD5,0xB1,0x00,0x00,}},
- {0x6BE2,2,{0x9A,0xBA,0x00,0x00,}},
- {0x6BE3,2,{0x9A,0xBB,0x00,0x00,}},
- {0x6BE4,2,{0x9A,0xBC,0x00,0x00,}},
- {0x6BE5,2,{0x9A,0xBD,0x00,0x00,}},
- {0x6BE6,2,{0x9A,0xBE,0x00,0x00,}},
- {0x6BE7,2,{0x9A,0xBF,0x00,0x00,}},
- {0x6BE8,2,{0x9A,0xC0,0x00,0x00,}},
- {0x6BE9,2,{0x9A,0xC1,0x00,0x00,}},
- {0x6BEA,2,{0xEB,0xA4,0x00,0x00,}},
- {0x6BEB,2,{0xBA,0xC1,0x00,0x00,}},
- {0x6BEC,2,{0x9A,0xC2,0x00,0x00,}},
- {0x6BED,2,{0x9A,0xC3,0x00,0x00,}},
- {0x6BEE,2,{0x9A,0xC4,0x00,0x00,}},
- {0x6BEF,2,{0xCC,0xBA,0x00,0x00,}},
- {0x6BF0,2,{0x9A,0xC5,0x00,0x00,}},
- {0x6BF1,2,{0x9A,0xC6,0x00,0x00,}},
- {0x6BF2,2,{0x9A,0xC7,0x00,0x00,}},
- {0x6BF3,2,{0xEB,0xA5,0x00,0x00,}},
- {0x6BF4,2,{0x9A,0xC8,0x00,0x00,}},
- {0x6BF5,2,{0xEB,0xA7,0x00,0x00,}},
- {0x6BF6,2,{0x9A,0xC9,0x00,0x00,}},
- {0x6BF7,2,{0x9A,0xCA,0x00,0x00,}},
- {0x6BF8,2,{0x9A,0xCB,0x00,0x00,}},
- {0x6BF9,2,{0xEB,0xA8,0x00,0x00,}},
- {0x6BFA,2,{0x9A,0xCC,0x00,0x00,}},
- {0x6BFB,2,{0x9A,0xCD,0x00,0x00,}},
- {0x6BFC,2,{0x9A,0xCE,0x00,0x00,}},
- {0x6BFD,2,{0xEB,0xA6,0x00,0x00,}},
- {0x6BFE,2,{0x9A,0xCF,0x00,0x00,}},
- {0x6BFF,2,{0x9A,0xD0,0x00,0x00,}},
- {0x6C00,2,{0x9A,0xD1,0x00,0x00,}},
- {0x6C01,2,{0x9A,0xD2,0x00,0x00,}},
- {0x6C02,2,{0x9A,0xD3,0x00,0x00,}},
- {0x6C03,2,{0x9A,0xD4,0x00,0x00,}},
- {0x6C04,2,{0x9A,0xD5,0x00,0x00,}},
- {0x6C05,2,{0xEB,0xA9,0x00,0x00,}},
- {0x6C06,2,{0xEB,0xAB,0x00,0x00,}},
- {0x6C07,2,{0xEB,0xAA,0x00,0x00,}},
- {0x6C08,2,{0x9A,0xD6,0x00,0x00,}},
- {0x6C09,2,{0x9A,0xD7,0x00,0x00,}},
- {0x6C0A,2,{0x9A,0xD8,0x00,0x00,}},
- {0x6C0B,2,{0x9A,0xD9,0x00,0x00,}},
- {0x6C0C,2,{0x9A,0xDA,0x00,0x00,}},
- {0x6C0D,2,{0xEB,0xAC,0x00,0x00,}},
- {0x6C0E,2,{0x9A,0xDB,0x00,0x00,}},
- {0x6C0F,2,{0xCA,0xCF,0x00,0x00,}},
- {0x6C10,2,{0xD8,0xB5,0x00,0x00,}},
- {0x6C11,2,{0xC3,0xF1,0x00,0x00,}},
- {0x6C12,2,{0x9A,0xDC,0x00,0x00,}},
- {0x6C13,2,{0xC3,0xA5,0x00,0x00,}},
- {0x6C14,2,{0xC6,0xF8,0x00,0x00,}},
- {0x6C15,2,{0xEB,0xAD,0x00,0x00,}},
- {0x6C16,2,{0xC4,0xCA,0x00,0x00,}},
- {0x6C17,2,{0x9A,0xDD,0x00,0x00,}},
- {0x6C18,2,{0xEB,0xAE,0x00,0x00,}},
- {0x6C19,2,{0xEB,0xAF,0x00,0x00,}},
- {0x6C1A,2,{0xEB,0xB0,0x00,0x00,}},
- {0x6C1B,2,{0xB7,0xD5,0x00,0x00,}},
- {0x6C1C,2,{0x9A,0xDE,0x00,0x00,}},
- {0x6C1D,2,{0x9A,0xDF,0x00,0x00,}},
- {0x6C1E,2,{0x9A,0xE0,0x00,0x00,}},
- {0x6C1F,2,{0xB7,0xFA,0x00,0x00,}},
- {0x6C20,2,{0x9A,0xE1,0x00,0x00,}},
- {0x6C21,2,{0xEB,0xB1,0x00,0x00,}},
- {0x6C22,2,{0xC7,0xE2,0x00,0x00,}},
- {0x6C23,2,{0x9A,0xE2,0x00,0x00,}},
- {0x6C24,2,{0xEB,0xB3,0x00,0x00,}},
- {0x6C25,2,{0x9A,0xE3,0x00,0x00,}},
- {0x6C26,2,{0xBA,0xA4,0x00,0x00,}},
- {0x6C27,2,{0xD1,0xF5,0x00,0x00,}},
- {0x6C28,2,{0xB0,0xB1,0x00,0x00,}},
- {0x6C29,2,{0xEB,0xB2,0x00,0x00,}},
- {0x6C2A,2,{0xEB,0xB4,0x00,0x00,}},
- {0x6C2B,2,{0x9A,0xE4,0x00,0x00,}},
- {0x6C2C,2,{0x9A,0xE5,0x00,0x00,}},
- {0x6C2D,2,{0x9A,0xE6,0x00,0x00,}},
- {0x6C2E,2,{0xB5,0xAA,0x00,0x00,}},
- {0x6C2F,2,{0xC2,0xC8,0x00,0x00,}},
- {0x6C30,2,{0xC7,0xE8,0x00,0x00,}},
- {0x6C31,2,{0x9A,0xE7,0x00,0x00,}},
- {0x6C32,2,{0xEB,0xB5,0x00,0x00,}},
- {0x6C33,2,{0x9A,0xE8,0x00,0x00,}},
- {0x6C34,2,{0xCB,0xAE,0x00,0x00,}},
- {0x6C35,2,{0xE3,0xDF,0x00,0x00,}},
- {0x6C36,2,{0x9A,0xE9,0x00,0x00,}},
- {0x6C37,2,{0x9A,0xEA,0x00,0x00,}},
- {0x6C38,2,{0xD3,0xC0,0x00,0x00,}},
- {0x6C39,2,{0x9A,0xEB,0x00,0x00,}},
- {0x6C3A,2,{0x9A,0xEC,0x00,0x00,}},
- {0x6C3B,2,{0x9A,0xED,0x00,0x00,}},
- {0x6C3C,2,{0x9A,0xEE,0x00,0x00,}},
- {0x6C3D,2,{0xD9,0xDB,0x00,0x00,}},
- {0x6C3E,2,{0x9A,0xEF,0x00,0x00,}},
- {0x6C3F,2,{0x9A,0xF0,0x00,0x00,}},
- {0x6C40,2,{0xCD,0xA1,0x00,0x00,}},
- {0x6C41,2,{0xD6,0xAD,0x00,0x00,}},
- {0x6C42,2,{0xC7,0xF3,0x00,0x00,}},
- {0x6C43,2,{0x9A,0xF1,0x00,0x00,}},
- {0x6C44,2,{0x9A,0xF2,0x00,0x00,}},
- {0x6C45,2,{0x9A,0xF3,0x00,0x00,}},
- {0x6C46,2,{0xD9,0xE0,0x00,0x00,}},
- {0x6C47,2,{0xBB,0xE3,0x00,0x00,}},
- {0x6C48,2,{0x9A,0xF4,0x00,0x00,}},
- {0x6C49,2,{0xBA,0xBA,0x00,0x00,}},
- {0x6C4A,2,{0xE3,0xE2,0x00,0x00,}},
- {0x6C4B,2,{0x9A,0xF5,0x00,0x00,}},
- {0x6C4C,2,{0x9A,0xF6,0x00,0x00,}},
- {0x6C4D,2,{0x9A,0xF7,0x00,0x00,}},
- {0x6C4E,2,{0x9A,0xF8,0x00,0x00,}},
- {0x6C4F,2,{0x9A,0xF9,0x00,0x00,}},
- {0x6C50,2,{0xCF,0xAB,0x00,0x00,}},
- {0x6C51,2,{0x9A,0xFA,0x00,0x00,}},
- {0x6C52,2,{0x9A,0xFB,0x00,0x00,}},
- {0x6C53,2,{0x9A,0xFC,0x00,0x00,}},
- {0x6C54,2,{0xE3,0xE0,0x00,0x00,}},
- {0x6C55,2,{0xC9,0xC7,0x00,0x00,}},
- {0x6C56,2,{0x9A,0xFD,0x00,0x00,}},
- {0x6C57,2,{0xBA,0xB9,0x00,0x00,}},
- {0x6C58,2,{0x9A,0xFE,0x00,0x00,}},
- {0x6C59,2,{0x9B,0x40,0x00,0x00,}},
- {0x6C5A,2,{0x9B,0x41,0x00,0x00,}},
- {0x6C5B,2,{0xD1,0xB4,0x00,0x00,}},
- {0x6C5C,2,{0xE3,0xE1,0x00,0x00,}},
- {0x6C5D,2,{0xC8,0xEA,0x00,0x00,}},
- {0x6C5E,2,{0xB9,0xAF,0x00,0x00,}},
- {0x6C5F,2,{0xBD,0xAD,0x00,0x00,}},
- {0x6C60,2,{0xB3,0xD8,0x00,0x00,}},
- {0x6C61,2,{0xCE,0xDB,0x00,0x00,}},
- {0x6C62,2,{0x9B,0x42,0x00,0x00,}},
- {0x6C63,2,{0x9B,0x43,0x00,0x00,}},
- {0x6C64,2,{0xCC,0xC0,0x00,0x00,}},
- {0x6C65,2,{0x9B,0x44,0x00,0x00,}},
- {0x6C66,2,{0x9B,0x45,0x00,0x00,}},
- {0x6C67,2,{0x9B,0x46,0x00,0x00,}},
- {0x6C68,2,{0xE3,0xE8,0x00,0x00,}},
- {0x6C69,2,{0xE3,0xE9,0x00,0x00,}},
- {0x6C6A,2,{0xCD,0xF4,0x00,0x00,}},
- {0x6C6B,2,{0x9B,0x47,0x00,0x00,}},
- {0x6C6C,2,{0x9B,0x48,0x00,0x00,}},
- {0x6C6D,2,{0x9B,0x49,0x00,0x00,}},
- {0x6C6E,2,{0x9B,0x4A,0x00,0x00,}},
- {0x6C6F,2,{0x9B,0x4B,0x00,0x00,}},
- {0x6C70,2,{0xCC,0xAD,0x00,0x00,}},
- {0x6C71,2,{0x9B,0x4C,0x00,0x00,}},
- {0x6C72,2,{0xBC,0xB3,0x00,0x00,}},
- {0x6C73,2,{0x9B,0x4D,0x00,0x00,}},
- {0x6C74,2,{0xE3,0xEA,0x00,0x00,}},
- {0x6C75,2,{0x9B,0x4E,0x00,0x00,}},
- {0x6C76,2,{0xE3,0xEB,0x00,0x00,}},
- {0x6C77,2,{0x9B,0x4F,0x00,0x00,}},
- {0x6C78,2,{0x9B,0x50,0x00,0x00,}},
- {0x6C79,2,{0xD0,0xDA,0x00,0x00,}},
- {0x6C7A,2,{0x9B,0x51,0x00,0x00,}},
- {0x6C7B,2,{0x9B,0x52,0x00,0x00,}},
- {0x6C7C,2,{0x9B,0x53,0x00,0x00,}},
- {0x6C7D,2,{0xC6,0xFB,0x00,0x00,}},
- {0x6C7E,2,{0xB7,0xDA,0x00,0x00,}},
- {0x6C7F,2,{0x9B,0x54,0x00,0x00,}},
- {0x6C80,2,{0x9B,0x55,0x00,0x00,}},
- {0x6C81,2,{0xC7,0xDF,0x00,0x00,}},
- {0x6C82,2,{0xD2,0xCA,0x00,0x00,}},
- {0x6C83,2,{0xCE,0xD6,0x00,0x00,}},
- {0x6C84,2,{0x9B,0x56,0x00,0x00,}},
- {0x6C85,2,{0xE3,0xE4,0x00,0x00,}},
- {0x6C86,2,{0xE3,0xEC,0x00,0x00,}},
- {0x6C87,2,{0x9B,0x57,0x00,0x00,}},
- {0x6C88,2,{0xC9,0xF2,0x00,0x00,}},
- {0x6C89,2,{0xB3,0xC1,0x00,0x00,}},
- {0x6C8A,2,{0x9B,0x58,0x00,0x00,}},
- {0x6C8B,2,{0x9B,0x59,0x00,0x00,}},
- {0x6C8C,2,{0xE3,0xE7,0x00,0x00,}},
- {0x6C8D,2,{0x9B,0x5A,0x00,0x00,}},
- {0x6C8E,2,{0x9B,0x5B,0x00,0x00,}},
- {0x6C8F,2,{0xC6,0xE3,0x00,0x00,}},
- {0x6C90,2,{0xE3,0xE5,0x00,0x00,}},
- {0x6C91,2,{0x9B,0x5C,0x00,0x00,}},
- {0x6C92,2,{0x9B,0x5D,0x00,0x00,}},
- {0x6C93,2,{0xED,0xB3,0x00,0x00,}},
- {0x6C94,2,{0xE3,0xE6,0x00,0x00,}},
- {0x6C95,2,{0x9B,0x5E,0x00,0x00,}},
- {0x6C96,2,{0x9B,0x5F,0x00,0x00,}},
- {0x6C97,2,{0x9B,0x60,0x00,0x00,}},
- {0x6C98,2,{0x9B,0x61,0x00,0x00,}},
- {0x6C99,2,{0xC9,0xB3,0x00,0x00,}},
- {0x6C9A,2,{0x9B,0x62,0x00,0x00,}},
- {0x6C9B,2,{0xC5,0xE6,0x00,0x00,}},
- {0x6C9C,2,{0x9B,0x63,0x00,0x00,}},
- {0x6C9D,2,{0x9B,0x64,0x00,0x00,}},
- {0x6C9E,2,{0x9B,0x65,0x00,0x00,}},
- {0x6C9F,2,{0xB9,0xB5,0x00,0x00,}},
- {0x6CA0,2,{0x9B,0x66,0x00,0x00,}},
- {0x6CA1,2,{0xC3,0xBB,0x00,0x00,}},
- {0x6CA2,2,{0x9B,0x67,0x00,0x00,}},
- {0x6CA3,2,{0xE3,0xE3,0x00,0x00,}},
- {0x6CA4,2,{0xC5,0xBD,0x00,0x00,}},
- {0x6CA5,2,{0xC1,0xA4,0x00,0x00,}},
- {0x6CA6,2,{0xC2,0xD9,0x00,0x00,}},
- {0x6CA7,2,{0xB2,0xD7,0x00,0x00,}},
- {0x6CA8,2,{0x9B,0x68,0x00,0x00,}},
- {0x6CA9,2,{0xE3,0xED,0x00,0x00,}},
- {0x6CAA,2,{0xBB,0xA6,0x00,0x00,}},
- {0x6CAB,2,{0xC4,0xAD,0x00,0x00,}},
- {0x6CAC,2,{0x9B,0x69,0x00,0x00,}},
- {0x6CAD,2,{0xE3,0xF0,0x00,0x00,}},
- {0x6CAE,2,{0xBE,0xDA,0x00,0x00,}},
- {0x6CAF,2,{0x9B,0x6A,0x00,0x00,}},
- {0x6CB0,2,{0x9B,0x6B,0x00,0x00,}},
- {0x6CB1,2,{0xE3,0xFB,0x00,0x00,}},
- {0x6CB2,2,{0xE3,0xF5,0x00,0x00,}},
- {0x6CB3,2,{0xBA,0xD3,0x00,0x00,}},
- {0x6CB4,2,{0x9B,0x6C,0x00,0x00,}},
- {0x6CB5,2,{0x9B,0x6D,0x00,0x00,}},
- {0x6CB6,2,{0x9B,0x6E,0x00,0x00,}},
- {0x6CB7,2,{0x9B,0x6F,0x00,0x00,}},
- {0x6CB8,2,{0xB7,0xD0,0x00,0x00,}},
- {0x6CB9,2,{0xD3,0xCD,0x00,0x00,}},
- {0x6CBA,2,{0x9B,0x70,0x00,0x00,}},
- {0x6CBB,2,{0xD6,0xCE,0x00,0x00,}},
- {0x6CBC,2,{0xD5,0xD3,0x00,0x00,}},
- {0x6CBD,2,{0xB9,0xC1,0x00,0x00,}},
- {0x6CBE,2,{0xD5,0xB4,0x00,0x00,}},
- {0x6CBF,2,{0xD1,0xD8,0x00,0x00,}},
- {0x6CC0,2,{0x9B,0x71,0x00,0x00,}},
- {0x6CC1,2,{0x9B,0x72,0x00,0x00,}},
- {0x6CC2,2,{0x9B,0x73,0x00,0x00,}},
- {0x6CC3,2,{0x9B,0x74,0x00,0x00,}},
- {0x6CC4,2,{0xD0,0xB9,0x00,0x00,}},
- {0x6CC5,2,{0xC7,0xF6,0x00,0x00,}},
- {0x6CC6,2,{0x9B,0x75,0x00,0x00,}},
- {0x6CC7,2,{0x9B,0x76,0x00,0x00,}},
- {0x6CC8,2,{0x9B,0x77,0x00,0x00,}},
- {0x6CC9,2,{0xC8,0xAA,0x00,0x00,}},
- {0x6CCA,2,{0xB2,0xB4,0x00,0x00,}},
- {0x6CCB,2,{0x9B,0x78,0x00,0x00,}},
- {0x6CCC,2,{0xC3,0xDA,0x00,0x00,}},
- {0x6CCD,2,{0x9B,0x79,0x00,0x00,}},
- {0x6CCE,2,{0x9B,0x7A,0x00,0x00,}},
- {0x6CCF,2,{0x9B,0x7B,0x00,0x00,}},
- {0x6CD0,2,{0xE3,0xEE,0x00,0x00,}},
- {0x6CD1,2,{0x9B,0x7C,0x00,0x00,}},
- {0x6CD2,2,{0x9B,0x7D,0x00,0x00,}},
- {0x6CD3,2,{0xE3,0xFC,0x00,0x00,}},
- {0x6CD4,2,{0xE3,0xEF,0x00,0x00,}},
- {0x6CD5,2,{0xB7,0xA8,0x00,0x00,}},
- {0x6CD6,2,{0xE3,0xF7,0x00,0x00,}},
- {0x6CD7,2,{0xE3,0xF4,0x00,0x00,}},
- {0x6CD8,2,{0x9B,0x7E,0x00,0x00,}},
- {0x6CD9,2,{0x9B,0x80,0x00,0x00,}},
- {0x6CDA,2,{0x9B,0x81,0x00,0x00,}},
- {0x6CDB,2,{0xB7,0xBA,0x00,0x00,}},
- {0x6CDC,2,{0x9B,0x82,0x00,0x00,}},
- {0x6CDD,2,{0x9B,0x83,0x00,0x00,}},
- {0x6CDE,2,{0xC5,0xA2,0x00,0x00,}},
- {0x6CDF,2,{0x9B,0x84,0x00,0x00,}},
- {0x6CE0,2,{0xE3,0xF6,0x00,0x00,}},
- {0x6CE1,2,{0xC5,0xDD,0x00,0x00,}},
- {0x6CE2,2,{0xB2,0xA8,0x00,0x00,}},
- {0x6CE3,2,{0xC6,0xFC,0x00,0x00,}},
- {0x6CE4,2,{0x9B,0x85,0x00,0x00,}},
- {0x6CE5,2,{0xC4,0xE0,0x00,0x00,}},
- {0x6CE6,2,{0x9B,0x86,0x00,0x00,}},
- {0x6CE7,2,{0x9B,0x87,0x00,0x00,}},
- {0x6CE8,2,{0xD7,0xA2,0x00,0x00,}},
- {0x6CE9,2,{0x9B,0x88,0x00,0x00,}},
- {0x6CEA,2,{0xC0,0xE1,0x00,0x00,}},
- {0x6CEB,2,{0xE3,0xF9,0x00,0x00,}},
- {0x6CEC,2,{0x9B,0x89,0x00,0x00,}},
- {0x6CED,2,{0x9B,0x8A,0x00,0x00,}},
- {0x6CEE,2,{0xE3,0xFA,0x00,0x00,}},
- {0x6CEF,2,{0xE3,0xFD,0x00,0x00,}},
- {0x6CF0,2,{0xCC,0xA9,0x00,0x00,}},
- {0x6CF1,2,{0xE3,0xF3,0x00,0x00,}},
- {0x6CF2,2,{0x9B,0x8B,0x00,0x00,}},
- {0x6CF3,2,{0xD3,0xBE,0x00,0x00,}},
- {0x6CF4,2,{0x9B,0x8C,0x00,0x00,}},
- {0x6CF5,2,{0xB1,0xC3,0x00,0x00,}},
- {0x6CF6,2,{0xED,0xB4,0x00,0x00,}},
- {0x6CF7,2,{0xE3,0xF1,0x00,0x00,}},
- {0x6CF8,2,{0xE3,0xF2,0x00,0x00,}},
- {0x6CF9,2,{0x9B,0x8D,0x00,0x00,}},
- {0x6CFA,2,{0xE3,0xF8,0x00,0x00,}},
- {0x6CFB,2,{0xD0,0xBA,0x00,0x00,}},
- {0x6CFC,2,{0xC6,0xC3,0x00,0x00,}},
- {0x6CFD,2,{0xD4,0xF3,0x00,0x00,}},
- {0x6CFE,2,{0xE3,0xFE,0x00,0x00,}},
- {0x6CFF,2,{0x9B,0x8E,0x00,0x00,}},
- {0x6D00,2,{0x9B,0x8F,0x00,0x00,}},
- {0x6D01,2,{0xBD,0xE0,0x00,0x00,}},
- {0x6D02,2,{0x9B,0x90,0x00,0x00,}},
- {0x6D03,2,{0x9B,0x91,0x00,0x00,}},
- {0x6D04,2,{0xE4,0xA7,0x00,0x00,}},
- {0x6D05,2,{0x9B,0x92,0x00,0x00,}},
- {0x6D06,2,{0x9B,0x93,0x00,0x00,}},
- {0x6D07,2,{0xE4,0xA6,0x00,0x00,}},
- {0x6D08,2,{0x9B,0x94,0x00,0x00,}},
- {0x6D09,2,{0x9B,0x95,0x00,0x00,}},
- {0x6D0A,2,{0x9B,0x96,0x00,0x00,}},
- {0x6D0B,2,{0xD1,0xF3,0x00,0x00,}},
- {0x6D0C,2,{0xE4,0xA3,0x00,0x00,}},
- {0x6D0D,2,{0x9B,0x97,0x00,0x00,}},
- {0x6D0E,2,{0xE4,0xA9,0x00,0x00,}},
- {0x6D0F,2,{0x9B,0x98,0x00,0x00,}},
- {0x6D10,2,{0x9B,0x99,0x00,0x00,}},
- {0x6D11,2,{0x9B,0x9A,0x00,0x00,}},
- {0x6D12,2,{0xC8,0xF7,0x00,0x00,}},
- {0x6D13,2,{0x9B,0x9B,0x00,0x00,}},
- {0x6D14,2,{0x9B,0x9C,0x00,0x00,}},
- {0x6D15,2,{0x9B,0x9D,0x00,0x00,}},
- {0x6D16,2,{0x9B,0x9E,0x00,0x00,}},
- {0x6D17,2,{0xCF,0xB4,0x00,0x00,}},
- {0x6D18,2,{0x9B,0x9F,0x00,0x00,}},
- {0x6D19,2,{0xE4,0xA8,0x00,0x00,}},
- {0x6D1A,2,{0xE4,0xAE,0x00,0x00,}},
- {0x6D1B,2,{0xC2,0xE5,0x00,0x00,}},
- {0x6D1C,2,{0x9B,0xA0,0x00,0x00,}},
- {0x6D1D,2,{0x9B,0xA1,0x00,0x00,}},
- {0x6D1E,2,{0xB6,0xB4,0x00,0x00,}},
- {0x6D1F,2,{0x9B,0xA2,0x00,0x00,}},
- {0x6D20,2,{0x9B,0xA3,0x00,0x00,}},
- {0x6D21,2,{0x9B,0xA4,0x00,0x00,}},
- {0x6D22,2,{0x9B,0xA5,0x00,0x00,}},
- {0x6D23,2,{0x9B,0xA6,0x00,0x00,}},
- {0x6D24,2,{0x9B,0xA7,0x00,0x00,}},
- {0x6D25,2,{0xBD,0xF2,0x00,0x00,}},
- {0x6D26,2,{0x9B,0xA8,0x00,0x00,}},
- {0x6D27,2,{0xE4,0xA2,0x00,0x00,}},
- {0x6D28,2,{0x9B,0xA9,0x00,0x00,}},
- {0x6D29,2,{0x9B,0xAA,0x00,0x00,}},
- {0x6D2A,2,{0xBA,0xE9,0x00,0x00,}},
- {0x6D2B,2,{0xE4,0xAA,0x00,0x00,}},
- {0x6D2C,2,{0x9B,0xAB,0x00,0x00,}},
- {0x6D2D,2,{0x9B,0xAC,0x00,0x00,}},
- {0x6D2E,2,{0xE4,0xAC,0x00,0x00,}},
- {0x6D2F,2,{0x9B,0xAD,0x00,0x00,}},
- {0x6D30,2,{0x9B,0xAE,0x00,0x00,}},
- {0x6D31,2,{0xB6,0xFD,0x00,0x00,}},
- {0x6D32,2,{0xD6,0xDE,0x00,0x00,}},
- {0x6D33,2,{0xE4,0xB2,0x00,0x00,}},
- {0x6D34,2,{0x9B,0xAF,0x00,0x00,}},
- {0x6D35,2,{0xE4,0xAD,0x00,0x00,}},
- {0x6D36,2,{0x9B,0xB0,0x00,0x00,}},
- {0x6D37,2,{0x9B,0xB1,0x00,0x00,}},
- {0x6D38,2,{0x9B,0xB2,0x00,0x00,}},
- {0x6D39,2,{0xE4,0xA1,0x00,0x00,}},
- {0x6D3A,2,{0x9B,0xB3,0x00,0x00,}},
- {0x6D3B,2,{0xBB,0xEE,0x00,0x00,}},
- {0x6D3C,2,{0xCD,0xDD,0x00,0x00,}},
- {0x6D3D,2,{0xC7,0xA2,0x00,0x00,}},
- {0x6D3E,2,{0xC5,0xC9,0x00,0x00,}},
- {0x6D3F,2,{0x9B,0xB4,0x00,0x00,}},
- {0x6D40,2,{0x9B,0xB5,0x00,0x00,}},
- {0x6D41,2,{0xC1,0xF7,0x00,0x00,}},
- {0x6D42,2,{0x9B,0xB6,0x00,0x00,}},
- {0x6D43,2,{0xE4,0xA4,0x00,0x00,}},
- {0x6D44,2,{0x9B,0xB7,0x00,0x00,}},
- {0x6D45,2,{0xC7,0xB3,0x00,0x00,}},
- {0x6D46,2,{0xBD,0xAC,0x00,0x00,}},
- {0x6D47,2,{0xBD,0xBD,0x00,0x00,}},
- {0x6D48,2,{0xE4,0xA5,0x00,0x00,}},
- {0x6D49,2,{0x9B,0xB8,0x00,0x00,}},
- {0x6D4A,2,{0xD7,0xC7,0x00,0x00,}},
- {0x6D4B,2,{0xB2,0xE2,0x00,0x00,}},
- {0x6D4C,2,{0x9B,0xB9,0x00,0x00,}},
- {0x6D4D,2,{0xE4,0xAB,0x00,0x00,}},
- {0x6D4E,2,{0xBC,0xC3,0x00,0x00,}},
- {0x6D4F,2,{0xE4,0xAF,0x00,0x00,}},
- {0x6D50,2,{0x9B,0xBA,0x00,0x00,}},
- {0x6D51,2,{0xBB,0xEB,0x00,0x00,}},
- {0x6D52,2,{0xE4,0xB0,0x00,0x00,}},
- {0x6D53,2,{0xC5,0xA8,0x00,0x00,}},
- {0x6D54,2,{0xE4,0xB1,0x00,0x00,}},
- {0x6D55,2,{0x9B,0xBB,0x00,0x00,}},
- {0x6D56,2,{0x9B,0xBC,0x00,0x00,}},
- {0x6D57,2,{0x9B,0xBD,0x00,0x00,}},
- {0x6D58,2,{0x9B,0xBE,0x00,0x00,}},
- {0x6D59,2,{0xD5,0xE3,0x00,0x00,}},
- {0x6D5A,2,{0xBF,0xA3,0x00,0x00,}},
- {0x6D5B,2,{0x9B,0xBF,0x00,0x00,}},
- {0x6D5C,2,{0xE4,0xBA,0x00,0x00,}},
- {0x6D5D,2,{0x9B,0xC0,0x00,0x00,}},
- {0x6D5E,2,{0xE4,0xB7,0x00,0x00,}},
- {0x6D5F,2,{0x9B,0xC1,0x00,0x00,}},
- {0x6D60,2,{0xE4,0xBB,0x00,0x00,}},
- {0x6D61,2,{0x9B,0xC2,0x00,0x00,}},
- {0x6D62,2,{0x9B,0xC3,0x00,0x00,}},
- {0x6D63,2,{0xE4,0xBD,0x00,0x00,}},
- {0x6D64,2,{0x9B,0xC4,0x00,0x00,}},
- {0x6D65,2,{0x9B,0xC5,0x00,0x00,}},
- {0x6D66,2,{0xC6,0xD6,0x00,0x00,}},
- {0x6D67,2,{0x9B,0xC6,0x00,0x00,}},
- {0x6D68,2,{0x9B,0xC7,0x00,0x00,}},
- {0x6D69,2,{0xBA,0xC6,0x00,0x00,}},
- {0x6D6A,2,{0xC0,0xCB,0x00,0x00,}},
- {0x6D6B,2,{0x9B,0xC8,0x00,0x00,}},
- {0x6D6C,2,{0x9B,0xC9,0x00,0x00,}},
- {0x6D6D,2,{0x9B,0xCA,0x00,0x00,}},
- {0x6D6E,2,{0xB8,0xA1,0x00,0x00,}},
- {0x6D6F,2,{0xE4,0xB4,0x00,0x00,}},
- {0x6D70,2,{0x9B,0xCB,0x00,0x00,}},
- {0x6D71,2,{0x9B,0xCC,0x00,0x00,}},
- {0x6D72,2,{0x9B,0xCD,0x00,0x00,}},
- {0x6D73,2,{0x9B,0xCE,0x00,0x00,}},
- {0x6D74,2,{0xD4,0xA1,0x00,0x00,}},
- {0x6D75,2,{0x9B,0xCF,0x00,0x00,}},
- {0x6D76,2,{0x9B,0xD0,0x00,0x00,}},
- {0x6D77,2,{0xBA,0xA3,0x00,0x00,}},
- {0x6D78,2,{0xBD,0xFE,0x00,0x00,}},
- {0x6D79,2,{0x9B,0xD1,0x00,0x00,}},
- {0x6D7A,2,{0x9B,0xD2,0x00,0x00,}},
- {0x6D7B,2,{0x9B,0xD3,0x00,0x00,}},
- {0x6D7C,2,{0xE4,0xBC,0x00,0x00,}},
- {0x6D7D,2,{0x9B,0xD4,0x00,0x00,}},
- {0x6D7E,2,{0x9B,0xD5,0x00,0x00,}},
- {0x6D7F,2,{0x9B,0xD6,0x00,0x00,}},
- {0x6D80,2,{0x9B,0xD7,0x00,0x00,}},
- {0x6D81,2,{0x9B,0xD8,0x00,0x00,}},
- {0x6D82,2,{0xCD,0xBF,0x00,0x00,}},
- {0x6D83,2,{0x9B,0xD9,0x00,0x00,}},
- {0x6D84,2,{0x9B,0xDA,0x00,0x00,}},
- {0x6D85,2,{0xC4,0xF9,0x00,0x00,}},
- {0x6D86,2,{0x9B,0xDB,0x00,0x00,}},
- {0x6D87,2,{0x9B,0xDC,0x00,0x00,}},
- {0x6D88,2,{0xCF,0xFB,0x00,0x00,}},
- {0x6D89,2,{0xC9,0xE6,0x00,0x00,}},
- {0x6D8A,2,{0x9B,0xDD,0x00,0x00,}},
- {0x6D8B,2,{0x9B,0xDE,0x00,0x00,}},
- {0x6D8C,2,{0xD3,0xBF,0x00,0x00,}},
- {0x6D8D,2,{0x9B,0xDF,0x00,0x00,}},
- {0x6D8E,2,{0xCF,0xD1,0x00,0x00,}},
- {0x6D8F,2,{0x9B,0xE0,0x00,0x00,}},
- {0x6D90,2,{0x9B,0xE1,0x00,0x00,}},
- {0x6D91,2,{0xE4,0xB3,0x00,0x00,}},
- {0x6D92,2,{0x9B,0xE2,0x00,0x00,}},
- {0x6D93,2,{0xE4,0xB8,0x00,0x00,}},
- {0x6D94,2,{0xE4,0xB9,0x00,0x00,}},
- {0x6D95,2,{0xCC,0xE9,0x00,0x00,}},
- {0x6D96,2,{0x9B,0xE3,0x00,0x00,}},
- {0x6D97,2,{0x9B,0xE4,0x00,0x00,}},
- {0x6D98,2,{0x9B,0xE5,0x00,0x00,}},
- {0x6D99,2,{0x9B,0xE6,0x00,0x00,}},
- {0x6D9A,2,{0x9B,0xE7,0x00,0x00,}},
- {0x6D9B,2,{0xCC,0xCE,0x00,0x00,}},
- {0x6D9C,2,{0x9B,0xE8,0x00,0x00,}},
- {0x6D9D,2,{0xC0,0xD4,0x00,0x00,}},
- {0x6D9E,2,{0xE4,0xB5,0x00,0x00,}},
- {0x6D9F,2,{0xC1,0xB0,0x00,0x00,}},
- {0x6DA0,2,{0xE4,0xB6,0x00,0x00,}},
- {0x6DA1,2,{0xCE,0xD0,0x00,0x00,}},
- {0x6DA2,2,{0x9B,0xE9,0x00,0x00,}},
- {0x6DA3,2,{0xBB,0xC1,0x00,0x00,}},
- {0x6DA4,2,{0xB5,0xD3,0x00,0x00,}},
- {0x6DA5,2,{0x9B,0xEA,0x00,0x00,}},
- {0x6DA6,2,{0xC8,0xF3,0x00,0x00,}},
- {0x6DA7,2,{0xBD,0xA7,0x00,0x00,}},
- {0x6DA8,2,{0xD5,0xC7,0x00,0x00,}},
- {0x6DA9,2,{0xC9,0xAC,0x00,0x00,}},
- {0x6DAA,2,{0xB8,0xA2,0x00,0x00,}},
- {0x6DAB,2,{0xE4,0xCA,0x00,0x00,}},
- {0x6DAC,2,{0x9B,0xEB,0x00,0x00,}},
- {0x6DAD,2,{0x9B,0xEC,0x00,0x00,}},
- {0x6DAE,2,{0xE4,0xCC,0x00,0x00,}},
- {0x6DAF,2,{0xD1,0xC4,0x00,0x00,}},
- {0x6DB0,2,{0x9B,0xED,0x00,0x00,}},
- {0x6DB1,2,{0x9B,0xEE,0x00,0x00,}},
- {0x6DB2,2,{0xD2,0xBA,0x00,0x00,}},
- {0x6DB3,2,{0x9B,0xEF,0x00,0x00,}},
- {0x6DB4,2,{0x9B,0xF0,0x00,0x00,}},
- {0x6DB5,2,{0xBA,0xAD,0x00,0x00,}},
- {0x6DB6,2,{0x9B,0xF1,0x00,0x00,}},
- {0x6DB7,2,{0x9B,0xF2,0x00,0x00,}},
- {0x6DB8,2,{0xBA,0xD4,0x00,0x00,}},
- {0x6DB9,2,{0x9B,0xF3,0x00,0x00,}},
- {0x6DBA,2,{0x9B,0xF4,0x00,0x00,}},
- {0x6DBB,2,{0x9B,0xF5,0x00,0x00,}},
- {0x6DBC,2,{0x9B,0xF6,0x00,0x00,}},
- {0x6DBD,2,{0x9B,0xF7,0x00,0x00,}},
- {0x6DBE,2,{0x9B,0xF8,0x00,0x00,}},
- {0x6DBF,2,{0xE4,0xC3,0x00,0x00,}},
- {0x6DC0,2,{0xB5,0xED,0x00,0x00,}},
- {0x6DC1,2,{0x9B,0xF9,0x00,0x00,}},
- {0x6DC2,2,{0x9B,0xFA,0x00,0x00,}},
- {0x6DC3,2,{0x9B,0xFB,0x00,0x00,}},
- {0x6DC4,2,{0xD7,0xCD,0x00,0x00,}},
- {0x6DC5,2,{0xE4,0xC0,0x00,0x00,}},
- {0x6DC6,2,{0xCF,0xFD,0x00,0x00,}},
- {0x6DC7,2,{0xE4,0xBF,0x00,0x00,}},
- {0x6DC8,2,{0x9B,0xFC,0x00,0x00,}},
- {0x6DC9,2,{0x9B,0xFD,0x00,0x00,}},
- {0x6DCA,2,{0x9B,0xFE,0x00,0x00,}},
- {0x6DCB,2,{0xC1,0xDC,0x00,0x00,}},
- {0x6DCC,2,{0xCC,0xCA,0x00,0x00,}},
- {0x6DCD,2,{0x9C,0x40,0x00,0x00,}},
- {0x6DCE,2,{0x9C,0x41,0x00,0x00,}},
- {0x6DCF,2,{0x9C,0x42,0x00,0x00,}},
- {0x6DD0,2,{0x9C,0x43,0x00,0x00,}},
- {0x6DD1,2,{0xCA,0xE7,0x00,0x00,}},
- {0x6DD2,2,{0x9C,0x44,0x00,0x00,}},
- {0x6DD3,2,{0x9C,0x45,0x00,0x00,}},
- {0x6DD4,2,{0x9C,0x46,0x00,0x00,}},
- {0x6DD5,2,{0x9C,0x47,0x00,0x00,}},
- {0x6DD6,2,{0xC4,0xD7,0x00,0x00,}},
- {0x6DD7,2,{0x9C,0x48,0x00,0x00,}},
- {0x6DD8,2,{0xCC,0xD4,0x00,0x00,}},
- {0x6DD9,2,{0xE4,0xC8,0x00,0x00,}},
- {0x6DDA,2,{0x9C,0x49,0x00,0x00,}},
- {0x6DDB,2,{0x9C,0x4A,0x00,0x00,}},
- {0x6DDC,2,{0x9C,0x4B,0x00,0x00,}},
- {0x6DDD,2,{0xE4,0xC7,0x00,0x00,}},
- {0x6DDE,2,{0xE4,0xC1,0x00,0x00,}},
- {0x6DDF,2,{0x9C,0x4C,0x00,0x00,}},
- {0x6DE0,2,{0xE4,0xC4,0x00,0x00,}},
- {0x6DE1,2,{0xB5,0xAD,0x00,0x00,}},
- {0x6DE2,2,{0x9C,0x4D,0x00,0x00,}},
- {0x6DE3,2,{0x9C,0x4E,0x00,0x00,}},
- {0x6DE4,2,{0xD3,0xD9,0x00,0x00,}},
- {0x6DE5,2,{0x9C,0x4F,0x00,0x00,}},
- {0x6DE6,2,{0xE4,0xC6,0x00,0x00,}},
- {0x6DE7,2,{0x9C,0x50,0x00,0x00,}},
- {0x6DE8,2,{0x9C,0x51,0x00,0x00,}},
- {0x6DE9,2,{0x9C,0x52,0x00,0x00,}},
- {0x6DEA,2,{0x9C,0x53,0x00,0x00,}},
- {0x6DEB,2,{0xD2,0xF9,0x00,0x00,}},
- {0x6DEC,2,{0xB4,0xE3,0x00,0x00,}},
- {0x6DED,2,{0x9C,0x54,0x00,0x00,}},
- {0x6DEE,2,{0xBB,0xB4,0x00,0x00,}},
- {0x6DEF,2,{0x9C,0x55,0x00,0x00,}},
- {0x6DF0,2,{0x9C,0x56,0x00,0x00,}},
- {0x6DF1,2,{0xC9,0xEE,0x00,0x00,}},
- {0x6DF2,2,{0x9C,0x57,0x00,0x00,}},
- {0x6DF3,2,{0xB4,0xBE,0x00,0x00,}},
- {0x6DF4,2,{0x9C,0x58,0x00,0x00,}},
- {0x6DF5,2,{0x9C,0x59,0x00,0x00,}},
- {0x6DF6,2,{0x9C,0x5A,0x00,0x00,}},
- {0x6DF7,2,{0xBB,0xEC,0x00,0x00,}},
- {0x6DF8,2,{0x9C,0x5B,0x00,0x00,}},
- {0x6DF9,2,{0xD1,0xCD,0x00,0x00,}},
- {0x6DFA,2,{0x9C,0x5C,0x00,0x00,}},
- {0x6DFB,2,{0xCC,0xED,0x00,0x00,}},
- {0x6DFC,2,{0xED,0xB5,0x00,0x00,}},
- {0x6DFD,2,{0x9C,0x5D,0x00,0x00,}},
- {0x6DFE,2,{0x9C,0x5E,0x00,0x00,}},
- {0x6DFF,2,{0x9C,0x5F,0x00,0x00,}},
- {0x6E00,2,{0x9C,0x60,0x00,0x00,}},
- {0x6E01,2,{0x9C,0x61,0x00,0x00,}},
- {0x6E02,2,{0x9C,0x62,0x00,0x00,}},
- {0x6E03,2,{0x9C,0x63,0x00,0x00,}},
- {0x6E04,2,{0x9C,0x64,0x00,0x00,}},
- {0x6E05,2,{0xC7,0xE5,0x00,0x00,}},
- {0x6E06,2,{0x9C,0x65,0x00,0x00,}},
- {0x6E07,2,{0x9C,0x66,0x00,0x00,}},
- {0x6E08,2,{0x9C,0x67,0x00,0x00,}},
- {0x6E09,2,{0x9C,0x68,0x00,0x00,}},
- {0x6E0A,2,{0xD4,0xA8,0x00,0x00,}},
- {0x6E0B,2,{0x9C,0x69,0x00,0x00,}},
- {0x6E0C,2,{0xE4,0xCB,0x00,0x00,}},
- {0x6E0D,2,{0xD7,0xD5,0x00,0x00,}},
- {0x6E0E,2,{0xE4,0xC2,0x00,0x00,}},
- {0x6E0F,2,{0x9C,0x6A,0x00,0x00,}},
- {0x6E10,2,{0xBD,0xA5,0x00,0x00,}},
- {0x6E11,2,{0xE4,0xC5,0x00,0x00,}},
- {0x6E12,2,{0x9C,0x6B,0x00,0x00,}},
- {0x6E13,2,{0x9C,0x6C,0x00,0x00,}},
- {0x6E14,2,{0xD3,0xE6,0x00,0x00,}},
- {0x6E15,2,{0x9C,0x6D,0x00,0x00,}},
- {0x6E16,2,{0xE4,0xC9,0x00,0x00,}},
- {0x6E17,2,{0xC9,0xF8,0x00,0x00,}},
- {0x6E18,2,{0x9C,0x6E,0x00,0x00,}},
- {0x6E19,2,{0x9C,0x6F,0x00,0x00,}},
- {0x6E1A,2,{0xE4,0xBE,0x00,0x00,}},
- {0x6E1B,2,{0x9C,0x70,0x00,0x00,}},
- {0x6E1C,2,{0x9C,0x71,0x00,0x00,}},
- {0x6E1D,2,{0xD3,0xE5,0x00,0x00,}},
- {0x6E1E,2,{0x9C,0x72,0x00,0x00,}},
- {0x6E1F,2,{0x9C,0x73,0x00,0x00,}},
- {0x6E20,2,{0xC7,0xFE,0x00,0x00,}},
- {0x6E21,2,{0xB6,0xC9,0x00,0x00,}},
- {0x6E22,2,{0x9C,0x74,0x00,0x00,}},
- {0x6E23,2,{0xD4,0xFC,0x00,0x00,}},
- {0x6E24,2,{0xB2,0xB3,0x00,0x00,}},
- {0x6E25,2,{0xE4,0xD7,0x00,0x00,}},
- {0x6E26,2,{0x9C,0x75,0x00,0x00,}},
- {0x6E27,2,{0x9C,0x76,0x00,0x00,}},
- {0x6E28,2,{0x9C,0x77,0x00,0x00,}},
- {0x6E29,2,{0xCE,0xC2,0x00,0x00,}},
- {0x6E2A,2,{0x9C,0x78,0x00,0x00,}},
- {0x6E2B,2,{0xE4,0xCD,0x00,0x00,}},
- {0x6E2C,2,{0x9C,0x79,0x00,0x00,}},
- {0x6E2D,2,{0xCE,0xBC,0x00,0x00,}},
- {0x6E2E,2,{0x9C,0x7A,0x00,0x00,}},
- {0x6E2F,2,{0xB8,0xDB,0x00,0x00,}},
- {0x6E30,2,{0x9C,0x7B,0x00,0x00,}},
- {0x6E31,2,{0x9C,0x7C,0x00,0x00,}},
- {0x6E32,2,{0xE4,0xD6,0x00,0x00,}},
- {0x6E33,2,{0x9C,0x7D,0x00,0x00,}},
- {0x6E34,2,{0xBF,0xCA,0x00,0x00,}},
- {0x6E35,2,{0x9C,0x7E,0x00,0x00,}},
- {0x6E36,2,{0x9C,0x80,0x00,0x00,}},
- {0x6E37,2,{0x9C,0x81,0x00,0x00,}},
- {0x6E38,2,{0xD3,0xCE,0x00,0x00,}},
- {0x6E39,2,{0x9C,0x82,0x00,0x00,}},
- {0x6E3A,2,{0xC3,0xEC,0x00,0x00,}},
- {0x6E3B,2,{0x9C,0x83,0x00,0x00,}},
- {0x6E3C,2,{0x9C,0x84,0x00,0x00,}},
- {0x6E3D,2,{0x9C,0x85,0x00,0x00,}},
- {0x6E3E,2,{0x9C,0x86,0x00,0x00,}},
- {0x6E3F,2,{0x9C,0x87,0x00,0x00,}},
- {0x6E40,2,{0x9C,0x88,0x00,0x00,}},
- {0x6E41,2,{0x9C,0x89,0x00,0x00,}},
- {0x6E42,2,{0x9C,0x8A,0x00,0x00,}},
- {0x6E43,2,{0xC5,0xC8,0x00,0x00,}},
- {0x6E44,2,{0xE4,0xD8,0x00,0x00,}},
- {0x6E45,2,{0x9C,0x8B,0x00,0x00,}},
- {0x6E46,2,{0x9C,0x8C,0x00,0x00,}},
- {0x6E47,2,{0x9C,0x8D,0x00,0x00,}},
- {0x6E48,2,{0x9C,0x8E,0x00,0x00,}},
- {0x6E49,2,{0x9C,0x8F,0x00,0x00,}},
- {0x6E4A,2,{0x9C,0x90,0x00,0x00,}},
- {0x6E4B,2,{0x9C,0x91,0x00,0x00,}},
- {0x6E4C,2,{0x9C,0x92,0x00,0x00,}},
- {0x6E4D,2,{0xCD,0xC4,0x00,0x00,}},
- {0x6E4E,2,{0xE4,0xCF,0x00,0x00,}},
- {0x6E4F,2,{0x9C,0x93,0x00,0x00,}},
- {0x6E50,2,{0x9C,0x94,0x00,0x00,}},
- {0x6E51,2,{0x9C,0x95,0x00,0x00,}},
- {0x6E52,2,{0x9C,0x96,0x00,0x00,}},
- {0x6E53,2,{0xE4,0xD4,0x00,0x00,}},
- {0x6E54,2,{0xE4,0xD5,0x00,0x00,}},
- {0x6E55,2,{0x9C,0x97,0x00,0x00,}},
- {0x6E56,2,{0xBA,0xFE,0x00,0x00,}},
- {0x6E57,2,{0x9C,0x98,0x00,0x00,}},
- {0x6E58,2,{0xCF,0xE6,0x00,0x00,}},
- {0x6E59,2,{0x9C,0x99,0x00,0x00,}},
- {0x6E5A,2,{0x9C,0x9A,0x00,0x00,}},
- {0x6E5B,2,{0xD5,0xBF,0x00,0x00,}},
- {0x6E5C,2,{0x9C,0x9B,0x00,0x00,}},
- {0x6E5D,2,{0x9C,0x9C,0x00,0x00,}},
- {0x6E5E,2,{0x9C,0x9D,0x00,0x00,}},
- {0x6E5F,2,{0xE4,0xD2,0x00,0x00,}},
- {0x6E60,2,{0x9C,0x9E,0x00,0x00,}},
- {0x6E61,2,{0x9C,0x9F,0x00,0x00,}},
- {0x6E62,2,{0x9C,0xA0,0x00,0x00,}},
- {0x6E63,2,{0x9C,0xA1,0x00,0x00,}},
- {0x6E64,2,{0x9C,0xA2,0x00,0x00,}},
- {0x6E65,2,{0x9C,0xA3,0x00,0x00,}},
- {0x6E66,2,{0x9C,0xA4,0x00,0x00,}},
- {0x6E67,2,{0x9C,0xA5,0x00,0x00,}},
- {0x6E68,2,{0x9C,0xA6,0x00,0x00,}},
- {0x6E69,2,{0x9C,0xA7,0x00,0x00,}},
- {0x6E6A,2,{0x9C,0xA8,0x00,0x00,}},
- {0x6E6B,2,{0xE4,0xD0,0x00,0x00,}},
- {0x6E6C,2,{0x9C,0xA9,0x00,0x00,}},
- {0x6E6D,2,{0x9C,0xAA,0x00,0x00,}},
- {0x6E6E,2,{0xE4,0xCE,0x00,0x00,}},
- {0x6E6F,2,{0x9C,0xAB,0x00,0x00,}},
- {0x6E70,2,{0x9C,0xAC,0x00,0x00,}},
- {0x6E71,2,{0x9C,0xAD,0x00,0x00,}},
- {0x6E72,2,{0x9C,0xAE,0x00,0x00,}},
- {0x6E73,2,{0x9C,0xAF,0x00,0x00,}},
- {0x6E74,2,{0x9C,0xB0,0x00,0x00,}},
- {0x6E75,2,{0x9C,0xB1,0x00,0x00,}},
- {0x6E76,2,{0x9C,0xB2,0x00,0x00,}},
- {0x6E77,2,{0x9C,0xB3,0x00,0x00,}},
- {0x6E78,2,{0x9C,0xB4,0x00,0x00,}},
- {0x6E79,2,{0x9C,0xB5,0x00,0x00,}},
- {0x6E7A,2,{0x9C,0xB6,0x00,0x00,}},
- {0x6E7B,2,{0x9C,0xB7,0x00,0x00,}},
- {0x6E7C,2,{0x9C,0xB8,0x00,0x00,}},
- {0x6E7D,2,{0x9C,0xB9,0x00,0x00,}},
- {0x6E7E,2,{0xCD,0xE5,0x00,0x00,}},
- {0x6E7F,2,{0xCA,0xAA,0x00,0x00,}},
- {0x6E80,2,{0x9C,0xBA,0x00,0x00,}},
- {0x6E81,2,{0x9C,0xBB,0x00,0x00,}},
- {0x6E82,2,{0x9C,0xBC,0x00,0x00,}},
- {0x6E83,2,{0xC0,0xA3,0x00,0x00,}},
- {0x6E84,2,{0x9C,0xBD,0x00,0x00,}},
- {0x6E85,2,{0xBD,0xA6,0x00,0x00,}},
- {0x6E86,2,{0xE4,0xD3,0x00,0x00,}},
- {0x6E87,2,{0x9C,0xBE,0x00,0x00,}},
- {0x6E88,2,{0x9C,0xBF,0x00,0x00,}},
- {0x6E89,2,{0xB8,0xC8,0x00,0x00,}},
- {0x6E8A,2,{0x9C,0xC0,0x00,0x00,}},
- {0x6E8B,2,{0x9C,0xC1,0x00,0x00,}},
- {0x6E8C,2,{0x9C,0xC2,0x00,0x00,}},
- {0x6E8D,2,{0x9C,0xC3,0x00,0x00,}},
- {0x6E8E,2,{0x9C,0xC4,0x00,0x00,}},
- {0x6E8F,2,{0xE4,0xE7,0x00,0x00,}},
- {0x6E90,2,{0xD4,0xB4,0x00,0x00,}},
- {0x6E91,2,{0x9C,0xC5,0x00,0x00,}},
- {0x6E92,2,{0x9C,0xC6,0x00,0x00,}},
- {0x6E93,2,{0x9C,0xC7,0x00,0x00,}},
- {0x6E94,2,{0x9C,0xC8,0x00,0x00,}},
- {0x6E95,2,{0x9C,0xC9,0x00,0x00,}},
- {0x6E96,2,{0x9C,0xCA,0x00,0x00,}},
- {0x6E97,2,{0x9C,0xCB,0x00,0x00,}},
- {0x6E98,2,{0xE4,0xDB,0x00,0x00,}},
- {0x6E99,2,{0x9C,0xCC,0x00,0x00,}},
- {0x6E9A,2,{0x9C,0xCD,0x00,0x00,}},
- {0x6E9B,2,{0x9C,0xCE,0x00,0x00,}},
- {0x6E9C,2,{0xC1,0xEF,0x00,0x00,}},
- {0x6E9D,2,{0x9C,0xCF,0x00,0x00,}},
- {0x6E9E,2,{0x9C,0xD0,0x00,0x00,}},
- {0x6E9F,2,{0xE4,0xE9,0x00,0x00,}},
- {0x6EA0,2,{0x9C,0xD1,0x00,0x00,}},
- {0x6EA1,2,{0x9C,0xD2,0x00,0x00,}},
- {0x6EA2,2,{0xD2,0xE7,0x00,0x00,}},
- {0x6EA3,2,{0x9C,0xD3,0x00,0x00,}},
- {0x6EA4,2,{0x9C,0xD4,0x00,0x00,}},
- {0x6EA5,2,{0xE4,0xDF,0x00,0x00,}},
- {0x6EA6,2,{0x9C,0xD5,0x00,0x00,}},
- {0x6EA7,2,{0xE4,0xE0,0x00,0x00,}},
- {0x6EA8,2,{0x9C,0xD6,0x00,0x00,}},
- {0x6EA9,2,{0x9C,0xD7,0x00,0x00,}},
- {0x6EAA,2,{0xCF,0xAA,0x00,0x00,}},
- {0x6EAB,2,{0x9C,0xD8,0x00,0x00,}},
- {0x6EAC,2,{0x9C,0xD9,0x00,0x00,}},
- {0x6EAD,2,{0x9C,0xDA,0x00,0x00,}},
- {0x6EAE,2,{0x9C,0xDB,0x00,0x00,}},
- {0x6EAF,2,{0xCB,0xDD,0x00,0x00,}},
- {0x6EB0,2,{0x9C,0xDC,0x00,0x00,}},
- {0x6EB1,2,{0xE4,0xDA,0x00,0x00,}},
- {0x6EB2,2,{0xE4,0xD1,0x00,0x00,}},
- {0x6EB3,2,{0x9C,0xDD,0x00,0x00,}},
- {0x6EB4,2,{0xE4,0xE5,0x00,0x00,}},
- {0x6EB5,2,{0x9C,0xDE,0x00,0x00,}},
- {0x6EB6,2,{0xC8,0xDC,0x00,0x00,}},
- {0x6EB7,2,{0xE4,0xE3,0x00,0x00,}},
- {0x6EB8,2,{0x9C,0xDF,0x00,0x00,}},
- {0x6EB9,2,{0x9C,0xE0,0x00,0x00,}},
- {0x6EBA,2,{0xC4,0xE7,0x00,0x00,}},
- {0x6EBB,2,{0xE4,0xE2,0x00,0x00,}},
- {0x6EBC,2,{0x9C,0xE1,0x00,0x00,}},
- {0x6EBD,2,{0xE4,0xE1,0x00,0x00,}},
- {0x6EBE,2,{0x9C,0xE2,0x00,0x00,}},
- {0x6EBF,2,{0x9C,0xE3,0x00,0x00,}},
- {0x6EC0,2,{0x9C,0xE4,0x00,0x00,}},
- {0x6EC1,2,{0xB3,0xFC,0x00,0x00,}},
- {0x6EC2,2,{0xE4,0xE8,0x00,0x00,}},
- {0x6EC3,2,{0x9C,0xE5,0x00,0x00,}},
- {0x6EC4,2,{0x9C,0xE6,0x00,0x00,}},
- {0x6EC5,2,{0x9C,0xE7,0x00,0x00,}},
- {0x6EC6,2,{0x9C,0xE8,0x00,0x00,}},
- {0x6EC7,2,{0xB5,0xE1,0x00,0x00,}},
- {0x6EC8,2,{0x9C,0xE9,0x00,0x00,}},
- {0x6EC9,2,{0x9C,0xEA,0x00,0x00,}},
- {0x6ECA,2,{0x9C,0xEB,0x00,0x00,}},
- {0x6ECB,2,{0xD7,0xCC,0x00,0x00,}},
- {0x6ECC,2,{0x9C,0xEC,0x00,0x00,}},
- {0x6ECD,2,{0x9C,0xED,0x00,0x00,}},
- {0x6ECE,2,{0x9C,0xEE,0x00,0x00,}},
- {0x6ECF,2,{0xE4,0xE6,0x00,0x00,}},
- {0x6ED0,2,{0x9C,0xEF,0x00,0x00,}},
- {0x6ED1,2,{0xBB,0xAC,0x00,0x00,}},
- {0x6ED2,2,{0x9C,0xF0,0x00,0x00,}},
- {0x6ED3,2,{0xD7,0xD2,0x00,0x00,}},
- {0x6ED4,2,{0xCC,0xCF,0x00,0x00,}},
- {0x6ED5,2,{0xEB,0xF8,0x00,0x00,}},
- {0x6ED6,2,{0x9C,0xF1,0x00,0x00,}},
- {0x6ED7,2,{0xE4,0xE4,0x00,0x00,}},
- {0x6ED8,2,{0x9C,0xF2,0x00,0x00,}},
- {0x6ED9,2,{0x9C,0xF3,0x00,0x00,}},
- {0x6EDA,2,{0xB9,0xF6,0x00,0x00,}},
- {0x6EDB,2,{0x9C,0xF4,0x00,0x00,}},
- {0x6EDC,2,{0x9C,0xF5,0x00,0x00,}},
- {0x6EDD,2,{0x9C,0xF6,0x00,0x00,}},
- {0x6EDE,2,{0xD6,0xCD,0x00,0x00,}},
- {0x6EDF,2,{0xE4,0xD9,0x00,0x00,}},
- {0x6EE0,2,{0xE4,0xDC,0x00,0x00,}},
- {0x6EE1,2,{0xC2,0xFA,0x00,0x00,}},
- {0x6EE2,2,{0xE4,0xDE,0x00,0x00,}},
- {0x6EE3,2,{0x9C,0xF7,0x00,0x00,}},
- {0x6EE4,2,{0xC2,0xCB,0x00,0x00,}},
- {0x6EE5,2,{0xC0,0xC4,0x00,0x00,}},
- {0x6EE6,2,{0xC2,0xD0,0x00,0x00,}},
- {0x6EE7,2,{0x9C,0xF8,0x00,0x00,}},
- {0x6EE8,2,{0xB1,0xF5,0x00,0x00,}},
- {0x6EE9,2,{0xCC,0xB2,0x00,0x00,}},
- {0x6EEA,2,{0x9C,0xF9,0x00,0x00,}},
- {0x6EEB,2,{0x9C,0xFA,0x00,0x00,}},
- {0x6EEC,2,{0x9C,0xFB,0x00,0x00,}},
- {0x6EED,2,{0x9C,0xFC,0x00,0x00,}},
- {0x6EEE,2,{0x9C,0xFD,0x00,0x00,}},
- {0x6EEF,2,{0x9C,0xFE,0x00,0x00,}},
- {0x6EF0,2,{0x9D,0x40,0x00,0x00,}},
- {0x6EF1,2,{0x9D,0x41,0x00,0x00,}},
- {0x6EF2,2,{0x9D,0x42,0x00,0x00,}},
- {0x6EF3,2,{0x9D,0x43,0x00,0x00,}},
- {0x6EF4,2,{0xB5,0xCE,0x00,0x00,}},
- {0x6EF5,2,{0x9D,0x44,0x00,0x00,}},
- {0x6EF6,2,{0x9D,0x45,0x00,0x00,}},
- {0x6EF7,2,{0x9D,0x46,0x00,0x00,}},
- {0x6EF8,2,{0x9D,0x47,0x00,0x00,}},
- {0x6EF9,2,{0xE4,0xEF,0x00,0x00,}},
- {0x6EFA,2,{0x9D,0x48,0x00,0x00,}},
- {0x6EFB,2,{0x9D,0x49,0x00,0x00,}},
- {0x6EFC,2,{0x9D,0x4A,0x00,0x00,}},
- {0x6EFD,2,{0x9D,0x4B,0x00,0x00,}},
- {0x6EFE,2,{0x9D,0x4C,0x00,0x00,}},
- {0x6EFF,2,{0x9D,0x4D,0x00,0x00,}},
- {0x6F00,2,{0x9D,0x4E,0x00,0x00,}},
- {0x6F01,2,{0x9D,0x4F,0x00,0x00,}},
- {0x6F02,2,{0xC6,0xAF,0x00,0x00,}},
- {0x6F03,2,{0x9D,0x50,0x00,0x00,}},
- {0x6F04,2,{0x9D,0x51,0x00,0x00,}},
- {0x6F05,2,{0x9D,0x52,0x00,0x00,}},
- {0x6F06,2,{0xC6,0xE1,0x00,0x00,}},
- {0x6F07,2,{0x9D,0x53,0x00,0x00,}},
- {0x6F08,2,{0x9D,0x54,0x00,0x00,}},
- {0x6F09,2,{0xE4,0xF5,0x00,0x00,}},
- {0x6F0A,2,{0x9D,0x55,0x00,0x00,}},
- {0x6F0B,2,{0x9D,0x56,0x00,0x00,}},
- {0x6F0C,2,{0x9D,0x57,0x00,0x00,}},
- {0x6F0D,2,{0x9D,0x58,0x00,0x00,}},
- {0x6F0E,2,{0x9D,0x59,0x00,0x00,}},
- {0x6F0F,2,{0xC2,0xA9,0x00,0x00,}},
- {0x6F10,2,{0x9D,0x5A,0x00,0x00,}},
- {0x6F11,2,{0x9D,0x5B,0x00,0x00,}},
- {0x6F12,2,{0x9D,0x5C,0x00,0x00,}},
- {0x6F13,2,{0xC0,0xEC,0x00,0x00,}},
- {0x6F14,2,{0xD1,0xDD,0x00,0x00,}},
- {0x6F15,2,{0xE4,0xEE,0x00,0x00,}},
- {0x6F16,2,{0x9D,0x5D,0x00,0x00,}},
- {0x6F17,2,{0x9D,0x5E,0x00,0x00,}},
- {0x6F18,2,{0x9D,0x5F,0x00,0x00,}},
- {0x6F19,2,{0x9D,0x60,0x00,0x00,}},
- {0x6F1A,2,{0x9D,0x61,0x00,0x00,}},
- {0x6F1B,2,{0x9D,0x62,0x00,0x00,}},
- {0x6F1C,2,{0x9D,0x63,0x00,0x00,}},
- {0x6F1D,2,{0x9D,0x64,0x00,0x00,}},
- {0x6F1E,2,{0x9D,0x65,0x00,0x00,}},
- {0x6F1F,2,{0x9D,0x66,0x00,0x00,}},
- {0x6F20,2,{0xC4,0xAE,0x00,0x00,}},
- {0x6F21,2,{0x9D,0x67,0x00,0x00,}},
- {0x6F22,2,{0x9D,0x68,0x00,0x00,}},
- {0x6F23,2,{0x9D,0x69,0x00,0x00,}},
- {0x6F24,2,{0xE4,0xED,0x00,0x00,}},
- {0x6F25,2,{0x9D,0x6A,0x00,0x00,}},
- {0x6F26,2,{0x9D,0x6B,0x00,0x00,}},
- {0x6F27,2,{0x9D,0x6C,0x00,0x00,}},
- {0x6F28,2,{0x9D,0x6D,0x00,0x00,}},
- {0x6F29,2,{0xE4,0xF6,0x00,0x00,}},
- {0x6F2A,2,{0xE4,0xF4,0x00,0x00,}},
- {0x6F2B,2,{0xC2,0xFE,0x00,0x00,}},
- {0x6F2C,2,{0x9D,0x6E,0x00,0x00,}},
- {0x6F2D,2,{0xE4,0xDD,0x00,0x00,}},
- {0x6F2E,2,{0x9D,0x6F,0x00,0x00,}},
- {0x6F2F,2,{0xE4,0xF0,0x00,0x00,}},
- {0x6F30,2,{0x9D,0x70,0x00,0x00,}},
- {0x6F31,2,{0xCA,0xFE,0x00,0x00,}},
- {0x6F32,2,{0x9D,0x71,0x00,0x00,}},
- {0x6F33,2,{0xD5,0xC4,0x00,0x00,}},
- {0x6F34,2,{0x9D,0x72,0x00,0x00,}},
- {0x6F35,2,{0x9D,0x73,0x00,0x00,}},
- {0x6F36,2,{0xE4,0xF1,0x00,0x00,}},
- {0x6F37,2,{0x9D,0x74,0x00,0x00,}},
- {0x6F38,2,{0x9D,0x75,0x00,0x00,}},
- {0x6F39,2,{0x9D,0x76,0x00,0x00,}},
- {0x6F3A,2,{0x9D,0x77,0x00,0x00,}},
- {0x6F3B,2,{0x9D,0x78,0x00,0x00,}},
- {0x6F3C,2,{0x9D,0x79,0x00,0x00,}},
- {0x6F3D,2,{0x9D,0x7A,0x00,0x00,}},
- {0x6F3E,2,{0xD1,0xFA,0x00,0x00,}},
- {0x6F3F,2,{0x9D,0x7B,0x00,0x00,}},
- {0x6F40,2,{0x9D,0x7C,0x00,0x00,}},
- {0x6F41,2,{0x9D,0x7D,0x00,0x00,}},
- {0x6F42,2,{0x9D,0x7E,0x00,0x00,}},
- {0x6F43,2,{0x9D,0x80,0x00,0x00,}},
- {0x6F44,2,{0x9D,0x81,0x00,0x00,}},
- {0x6F45,2,{0x9D,0x82,0x00,0x00,}},
- {0x6F46,2,{0xE4,0xEB,0x00,0x00,}},
- {0x6F47,2,{0xE4,0xEC,0x00,0x00,}},
- {0x6F48,2,{0x9D,0x83,0x00,0x00,}},
- {0x6F49,2,{0x9D,0x84,0x00,0x00,}},
- {0x6F4A,2,{0x9D,0x85,0x00,0x00,}},
- {0x6F4B,2,{0xE4,0xF2,0x00,0x00,}},
- {0x6F4C,2,{0x9D,0x86,0x00,0x00,}},
- {0x6F4D,2,{0xCE,0xAB,0x00,0x00,}},
- {0x6F4E,2,{0x9D,0x87,0x00,0x00,}},
- {0x6F4F,2,{0x9D,0x88,0x00,0x00,}},
- {0x6F50,2,{0x9D,0x89,0x00,0x00,}},
- {0x6F51,2,{0x9D,0x8A,0x00,0x00,}},
- {0x6F52,2,{0x9D,0x8B,0x00,0x00,}},
- {0x6F53,2,{0x9D,0x8C,0x00,0x00,}},
- {0x6F54,2,{0x9D,0x8D,0x00,0x00,}},
- {0x6F55,2,{0x9D,0x8E,0x00,0x00,}},
- {0x6F56,2,{0x9D,0x8F,0x00,0x00,}},
- {0x6F57,2,{0x9D,0x90,0x00,0x00,}},
- {0x6F58,2,{0xC5,0xCB,0x00,0x00,}},
- {0x6F59,2,{0x9D,0x91,0x00,0x00,}},
- {0x6F5A,2,{0x9D,0x92,0x00,0x00,}},
- {0x6F5B,2,{0x9D,0x93,0x00,0x00,}},
- {0x6F5C,2,{0xC7,0xB1,0x00,0x00,}},
- {0x6F5D,2,{0x9D,0x94,0x00,0x00,}},
- {0x6F5E,2,{0xC2,0xBA,0x00,0x00,}},
- {0x6F5F,2,{0x9D,0x95,0x00,0x00,}},
- {0x6F60,2,{0x9D,0x96,0x00,0x00,}},
- {0x6F61,2,{0x9D,0x97,0x00,0x00,}},
- {0x6F62,2,{0xE4,0xEA,0x00,0x00,}},
- {0x6F63,2,{0x9D,0x98,0x00,0x00,}},
- {0x6F64,2,{0x9D,0x99,0x00,0x00,}},
- {0x6F65,2,{0x9D,0x9A,0x00,0x00,}},
- {0x6F66,2,{0xC1,0xCA,0x00,0x00,}},
- {0x6F67,2,{0x9D,0x9B,0x00,0x00,}},
- {0x6F68,2,{0x9D,0x9C,0x00,0x00,}},
- {0x6F69,2,{0x9D,0x9D,0x00,0x00,}},
- {0x6F6A,2,{0x9D,0x9E,0x00,0x00,}},
- {0x6F6B,2,{0x9D,0x9F,0x00,0x00,}},
- {0x6F6C,2,{0x9D,0xA0,0x00,0x00,}},
- {0x6F6D,2,{0xCC,0xB6,0x00,0x00,}},
- {0x6F6E,2,{0xB3,0xB1,0x00,0x00,}},
- {0x6F6F,2,{0x9D,0xA1,0x00,0x00,}},
- {0x6F70,2,{0x9D,0xA2,0x00,0x00,}},
- {0x6F71,2,{0x9D,0xA3,0x00,0x00,}},
- {0x6F72,2,{0xE4,0xFB,0x00,0x00,}},
- {0x6F73,2,{0x9D,0xA4,0x00,0x00,}},
- {0x6F74,2,{0xE4,0xF3,0x00,0x00,}},
- {0x6F75,2,{0x9D,0xA5,0x00,0x00,}},
- {0x6F76,2,{0x9D,0xA6,0x00,0x00,}},
- {0x6F77,2,{0x9D,0xA7,0x00,0x00,}},
- {0x6F78,2,{0xE4,0xFA,0x00,0x00,}},
- {0x6F79,2,{0x9D,0xA8,0x00,0x00,}},
- {0x6F7A,2,{0xE4,0xFD,0x00,0x00,}},
- {0x6F7B,2,{0x9D,0xA9,0x00,0x00,}},
- {0x6F7C,2,{0xE4,0xFC,0x00,0x00,}},
- {0x6F7D,2,{0x9D,0xAA,0x00,0x00,}},
- {0x6F7E,2,{0x9D,0xAB,0x00,0x00,}},
- {0x6F7F,2,{0x9D,0xAC,0x00,0x00,}},
- {0x6F80,2,{0x9D,0xAD,0x00,0x00,}},
- {0x6F81,2,{0x9D,0xAE,0x00,0x00,}},
- {0x6F82,2,{0x9D,0xAF,0x00,0x00,}},
- {0x6F83,2,{0x9D,0xB0,0x00,0x00,}},
- {0x6F84,2,{0xB3,0xCE,0x00,0x00,}},
- {0x6F85,2,{0x9D,0xB1,0x00,0x00,}},
- {0x6F86,2,{0x9D,0xB2,0x00,0x00,}},
- {0x6F87,2,{0x9D,0xB3,0x00,0x00,}},
- {0x6F88,2,{0xB3,0xBA,0x00,0x00,}},
- {0x6F89,2,{0xE4,0xF7,0x00,0x00,}},
- {0x6F8A,2,{0x9D,0xB4,0x00,0x00,}},
- {0x6F8B,2,{0x9D,0xB5,0x00,0x00,}},
- {0x6F8C,2,{0xE4,0xF9,0x00,0x00,}},
- {0x6F8D,2,{0xE4,0xF8,0x00,0x00,}},
- {0x6F8E,2,{0xC5,0xEC,0x00,0x00,}},
- {0x6F8F,2,{0x9D,0xB6,0x00,0x00,}},
- {0x6F90,2,{0x9D,0xB7,0x00,0x00,}},
- {0x6F91,2,{0x9D,0xB8,0x00,0x00,}},
- {0x6F92,2,{0x9D,0xB9,0x00,0x00,}},
- {0x6F93,2,{0x9D,0xBA,0x00,0x00,}},
- {0x6F94,2,{0x9D,0xBB,0x00,0x00,}},
- {0x6F95,2,{0x9D,0xBC,0x00,0x00,}},
- {0x6F96,2,{0x9D,0xBD,0x00,0x00,}},
- {0x6F97,2,{0x9D,0xBE,0x00,0x00,}},
- {0x6F98,2,{0x9D,0xBF,0x00,0x00,}},
- {0x6F99,2,{0x9D,0xC0,0x00,0x00,}},
- {0x6F9A,2,{0x9D,0xC1,0x00,0x00,}},
- {0x6F9B,2,{0x9D,0xC2,0x00,0x00,}},
- {0x6F9C,2,{0xC0,0xBD,0x00,0x00,}},
- {0x6F9D,2,{0x9D,0xC3,0x00,0x00,}},
- {0x6F9E,2,{0x9D,0xC4,0x00,0x00,}},
- {0x6F9F,2,{0x9D,0xC5,0x00,0x00,}},
- {0x6FA0,2,{0x9D,0xC6,0x00,0x00,}},
- {0x6FA1,2,{0xD4,0xE8,0x00,0x00,}},
- {0x6FA2,2,{0x9D,0xC7,0x00,0x00,}},
- {0x6FA3,2,{0x9D,0xC8,0x00,0x00,}},
- {0x6FA4,2,{0x9D,0xC9,0x00,0x00,}},
- {0x6FA5,2,{0x9D,0xCA,0x00,0x00,}},
- {0x6FA6,2,{0x9D,0xCB,0x00,0x00,}},
- {0x6FA7,2,{0xE5,0xA2,0x00,0x00,}},
- {0x6FA8,2,{0x9D,0xCC,0x00,0x00,}},
- {0x6FA9,2,{0x9D,0xCD,0x00,0x00,}},
- {0x6FAA,2,{0x9D,0xCE,0x00,0x00,}},
- {0x6FAB,2,{0x9D,0xCF,0x00,0x00,}},
- {0x6FAC,2,{0x9D,0xD0,0x00,0x00,}},
- {0x6FAD,2,{0x9D,0xD1,0x00,0x00,}},
- {0x6FAE,2,{0x9D,0xD2,0x00,0x00,}},
- {0x6FAF,2,{0x9D,0xD3,0x00,0x00,}},
- {0x6FB0,2,{0x9D,0xD4,0x00,0x00,}},
- {0x6FB1,2,{0x9D,0xD5,0x00,0x00,}},
- {0x6FB2,2,{0x9D,0xD6,0x00,0x00,}},
- {0x6FB3,2,{0xB0,0xC4,0x00,0x00,}},
- {0x6FB4,2,{0x9D,0xD7,0x00,0x00,}},
- {0x6FB5,2,{0x9D,0xD8,0x00,0x00,}},
- {0x6FB6,2,{0xE5,0xA4,0x00,0x00,}},
- {0x6FB7,2,{0x9D,0xD9,0x00,0x00,}},
- {0x6FB8,2,{0x9D,0xDA,0x00,0x00,}},
- {0x6FB9,2,{0xE5,0xA3,0x00,0x00,}},
- {0x6FBA,2,{0x9D,0xDB,0x00,0x00,}},
- {0x6FBB,2,{0x9D,0xDC,0x00,0x00,}},
- {0x6FBC,2,{0x9D,0xDD,0x00,0x00,}},
- {0x6FBD,2,{0x9D,0xDE,0x00,0x00,}},
- {0x6FBE,2,{0x9D,0xDF,0x00,0x00,}},
- {0x6FBF,2,{0x9D,0xE0,0x00,0x00,}},
- {0x6FC0,2,{0xBC,0xA4,0x00,0x00,}},
- {0x6FC1,2,{0x9D,0xE1,0x00,0x00,}},
- {0x6FC2,2,{0xE5,0xA5,0x00,0x00,}},
- {0x6FC3,2,{0x9D,0xE2,0x00,0x00,}},
- {0x6FC4,2,{0x9D,0xE3,0x00,0x00,}},
- {0x6FC5,2,{0x9D,0xE4,0x00,0x00,}},
- {0x6FC6,2,{0x9D,0xE5,0x00,0x00,}},
- {0x6FC7,2,{0x9D,0xE6,0x00,0x00,}},
- {0x6FC8,2,{0x9D,0xE7,0x00,0x00,}},
- {0x6FC9,2,{0xE5,0xA1,0x00,0x00,}},
- {0x6FCA,2,{0x9D,0xE8,0x00,0x00,}},
- {0x6FCB,2,{0x9D,0xE9,0x00,0x00,}},
- {0x6FCC,2,{0x9D,0xEA,0x00,0x00,}},
- {0x6FCD,2,{0x9D,0xEB,0x00,0x00,}},
- {0x6FCE,2,{0x9D,0xEC,0x00,0x00,}},
- {0x6FCF,2,{0x9D,0xED,0x00,0x00,}},
- {0x6FD0,2,{0x9D,0xEE,0x00,0x00,}},
- {0x6FD1,2,{0xE4,0xFE,0x00,0x00,}},
- {0x6FD2,2,{0xB1,0xF4,0x00,0x00,}},
- {0x6FD3,2,{0x9D,0xEF,0x00,0x00,}},
- {0x6FD4,2,{0x9D,0xF0,0x00,0x00,}},
- {0x6FD5,2,{0x9D,0xF1,0x00,0x00,}},
- {0x6FD6,2,{0x9D,0xF2,0x00,0x00,}},
- {0x6FD7,2,{0x9D,0xF3,0x00,0x00,}},
- {0x6FD8,2,{0x9D,0xF4,0x00,0x00,}},
- {0x6FD9,2,{0x9D,0xF5,0x00,0x00,}},
- {0x6FDA,2,{0x9D,0xF6,0x00,0x00,}},
- {0x6FDB,2,{0x9D,0xF7,0x00,0x00,}},
- {0x6FDC,2,{0x9D,0xF8,0x00,0x00,}},
- {0x6FDD,2,{0x9D,0xF9,0x00,0x00,}},
- {0x6FDE,2,{0xE5,0xA8,0x00,0x00,}},
- {0x6FDF,2,{0x9D,0xFA,0x00,0x00,}},
- {0x6FE0,2,{0xE5,0xA9,0x00,0x00,}},
- {0x6FE1,2,{0xE5,0xA6,0x00,0x00,}},
- {0x6FE2,2,{0x9D,0xFB,0x00,0x00,}},
- {0x6FE3,2,{0x9D,0xFC,0x00,0x00,}},
- {0x6FE4,2,{0x9D,0xFD,0x00,0x00,}},
- {0x6FE5,2,{0x9D,0xFE,0x00,0x00,}},
- {0x6FE6,2,{0x9E,0x40,0x00,0x00,}},
- {0x6FE7,2,{0x9E,0x41,0x00,0x00,}},
- {0x6FE8,2,{0x9E,0x42,0x00,0x00,}},
- {0x6FE9,2,{0x9E,0x43,0x00,0x00,}},
- {0x6FEA,2,{0x9E,0x44,0x00,0x00,}},
- {0x6FEB,2,{0x9E,0x45,0x00,0x00,}},
- {0x6FEC,2,{0x9E,0x46,0x00,0x00,}},
- {0x6FED,2,{0x9E,0x47,0x00,0x00,}},
- {0x6FEE,2,{0xE5,0xA7,0x00,0x00,}},
- {0x6FEF,2,{0xE5,0xAA,0x00,0x00,}},
- {0x6FF0,2,{0x9E,0x48,0x00,0x00,}},
- {0x6FF1,2,{0x9E,0x49,0x00,0x00,}},
- {0x6FF2,2,{0x9E,0x4A,0x00,0x00,}},
- {0x6FF3,2,{0x9E,0x4B,0x00,0x00,}},
- {0x6FF4,2,{0x9E,0x4C,0x00,0x00,}},
- {0x6FF5,2,{0x9E,0x4D,0x00,0x00,}},
- {0x6FF6,2,{0x9E,0x4E,0x00,0x00,}},
- {0x6FF7,2,{0x9E,0x4F,0x00,0x00,}},
- {0x6FF8,2,{0x9E,0x50,0x00,0x00,}},
- {0x6FF9,2,{0x9E,0x51,0x00,0x00,}},
- {0x6FFA,2,{0x9E,0x52,0x00,0x00,}},
- {0x6FFB,2,{0x9E,0x53,0x00,0x00,}},
- {0x6FFC,2,{0x9E,0x54,0x00,0x00,}},
- {0x6FFD,2,{0x9E,0x55,0x00,0x00,}},
- {0x6FFE,2,{0x9E,0x56,0x00,0x00,}},
- {0x6FFF,2,{0x9E,0x57,0x00,0x00,}},
- {0x7000,2,{0x9E,0x58,0x00,0x00,}},
- {0x7001,2,{0x9E,0x59,0x00,0x00,}},
- {0x7002,2,{0x9E,0x5A,0x00,0x00,}},
- {0x7003,2,{0x9E,0x5B,0x00,0x00,}},
- {0x7004,2,{0x9E,0x5C,0x00,0x00,}},
- {0x7005,2,{0x9E,0x5D,0x00,0x00,}},
- {0x7006,2,{0x9E,0x5E,0x00,0x00,}},
- {0x7007,2,{0x9E,0x5F,0x00,0x00,}},
- {0x7008,2,{0x9E,0x60,0x00,0x00,}},
- {0x7009,2,{0x9E,0x61,0x00,0x00,}},
- {0x700A,2,{0x9E,0x62,0x00,0x00,}},
- {0x700B,2,{0x9E,0x63,0x00,0x00,}},
- {0x700C,2,{0x9E,0x64,0x00,0x00,}},
- {0x700D,2,{0x9E,0x65,0x00,0x00,}},
- {0x700E,2,{0x9E,0x66,0x00,0x00,}},
- {0x700F,2,{0x9E,0x67,0x00,0x00,}},
- {0x7010,2,{0x9E,0x68,0x00,0x00,}},
- {0x7011,2,{0xC6,0xD9,0x00,0x00,}},
- {0x7012,2,{0x9E,0x69,0x00,0x00,}},
- {0x7013,2,{0x9E,0x6A,0x00,0x00,}},
- {0x7014,2,{0x9E,0x6B,0x00,0x00,}},
- {0x7015,2,{0x9E,0x6C,0x00,0x00,}},
- {0x7016,2,{0x9E,0x6D,0x00,0x00,}},
- {0x7017,2,{0x9E,0x6E,0x00,0x00,}},
- {0x7018,2,{0x9E,0x6F,0x00,0x00,}},
- {0x7019,2,{0x9E,0x70,0x00,0x00,}},
- {0x701A,2,{0xE5,0xAB,0x00,0x00,}},
- {0x701B,2,{0xE5,0xAD,0x00,0x00,}},
- {0x701C,2,{0x9E,0x71,0x00,0x00,}},
- {0x701D,2,{0x9E,0x72,0x00,0x00,}},
- {0x701E,2,{0x9E,0x73,0x00,0x00,}},
- {0x701F,2,{0x9E,0x74,0x00,0x00,}},
- {0x7020,2,{0x9E,0x75,0x00,0x00,}},
- {0x7021,2,{0x9E,0x76,0x00,0x00,}},
- {0x7022,2,{0x9E,0x77,0x00,0x00,}},
- {0x7023,2,{0xE5,0xAC,0x00,0x00,}},
- {0x7024,2,{0x9E,0x78,0x00,0x00,}},
- {0x7025,2,{0x9E,0x79,0x00,0x00,}},
- {0x7026,2,{0x9E,0x7A,0x00,0x00,}},
- {0x7027,2,{0x9E,0x7B,0x00,0x00,}},
- {0x7028,2,{0x9E,0x7C,0x00,0x00,}},
- {0x7029,2,{0x9E,0x7D,0x00,0x00,}},
- {0x702A,2,{0x9E,0x7E,0x00,0x00,}},
- {0x702B,2,{0x9E,0x80,0x00,0x00,}},
- {0x702C,2,{0x9E,0x81,0x00,0x00,}},
- {0x702D,2,{0x9E,0x82,0x00,0x00,}},
- {0x702E,2,{0x9E,0x83,0x00,0x00,}},
- {0x702F,2,{0x9E,0x84,0x00,0x00,}},
- {0x7030,2,{0x9E,0x85,0x00,0x00,}},
- {0x7031,2,{0x9E,0x86,0x00,0x00,}},
- {0x7032,2,{0x9E,0x87,0x00,0x00,}},
- {0x7033,2,{0x9E,0x88,0x00,0x00,}},
- {0x7034,2,{0x9E,0x89,0x00,0x00,}},
- {0x7035,2,{0xE5,0xAF,0x00,0x00,}},
- {0x7036,2,{0x9E,0x8A,0x00,0x00,}},
- {0x7037,2,{0x9E,0x8B,0x00,0x00,}},
- {0x7038,2,{0x9E,0x8C,0x00,0x00,}},
- {0x7039,2,{0xE5,0xAE,0x00,0x00,}},
- {0x703A,2,{0x9E,0x8D,0x00,0x00,}},
- {0x703B,2,{0x9E,0x8E,0x00,0x00,}},
- {0x703C,2,{0x9E,0x8F,0x00,0x00,}},
- {0x703D,2,{0x9E,0x90,0x00,0x00,}},
- {0x703E,2,{0x9E,0x91,0x00,0x00,}},
- {0x703F,2,{0x9E,0x92,0x00,0x00,}},
- {0x7040,2,{0x9E,0x93,0x00,0x00,}},
- {0x7041,2,{0x9E,0x94,0x00,0x00,}},
- {0x7042,2,{0x9E,0x95,0x00,0x00,}},
- {0x7043,2,{0x9E,0x96,0x00,0x00,}},
- {0x7044,2,{0x9E,0x97,0x00,0x00,}},
- {0x7045,2,{0x9E,0x98,0x00,0x00,}},
- {0x7046,2,{0x9E,0x99,0x00,0x00,}},
- {0x7047,2,{0x9E,0x9A,0x00,0x00,}},
- {0x7048,2,{0x9E,0x9B,0x00,0x00,}},
- {0x7049,2,{0x9E,0x9C,0x00,0x00,}},
- {0x704A,2,{0x9E,0x9D,0x00,0x00,}},
- {0x704B,2,{0x9E,0x9E,0x00,0x00,}},
- {0x704C,2,{0xB9,0xE0,0x00,0x00,}},
- {0x704D,2,{0x9E,0x9F,0x00,0x00,}},
- {0x704E,2,{0x9E,0xA0,0x00,0x00,}},
- {0x704F,2,{0xE5,0xB0,0x00,0x00,}},
- {0x7050,2,{0x9E,0xA1,0x00,0x00,}},
- {0x7051,2,{0x9E,0xA2,0x00,0x00,}},
- {0x7052,2,{0x9E,0xA3,0x00,0x00,}},
- {0x7053,2,{0x9E,0xA4,0x00,0x00,}},
- {0x7054,2,{0x9E,0xA5,0x00,0x00,}},
- {0x7055,2,{0x9E,0xA6,0x00,0x00,}},
- {0x7056,2,{0x9E,0xA7,0x00,0x00,}},
- {0x7057,2,{0x9E,0xA8,0x00,0x00,}},
- {0x7058,2,{0x9E,0xA9,0x00,0x00,}},
- {0x7059,2,{0x9E,0xAA,0x00,0x00,}},
- {0x705A,2,{0x9E,0xAB,0x00,0x00,}},
- {0x705B,2,{0x9E,0xAC,0x00,0x00,}},
- {0x705C,2,{0x9E,0xAD,0x00,0x00,}},
- {0x705D,2,{0x9E,0xAE,0x00,0x00,}},
- {0x705E,2,{0xE5,0xB1,0x00,0x00,}},
- {0x705F,2,{0x9E,0xAF,0x00,0x00,}},
- {0x7060,2,{0x9E,0xB0,0x00,0x00,}},
- {0x7061,2,{0x9E,0xB1,0x00,0x00,}},
- {0x7062,2,{0x9E,0xB2,0x00,0x00,}},
- {0x7063,2,{0x9E,0xB3,0x00,0x00,}},
- {0x7064,2,{0x9E,0xB4,0x00,0x00,}},
- {0x7065,2,{0x9E,0xB5,0x00,0x00,}},
- {0x7066,2,{0x9E,0xB6,0x00,0x00,}},
- {0x7067,2,{0x9E,0xB7,0x00,0x00,}},
- {0x7068,2,{0x9E,0xB8,0x00,0x00,}},
- {0x7069,2,{0x9E,0xB9,0x00,0x00,}},
- {0x706A,2,{0x9E,0xBA,0x00,0x00,}},
- {0x706B,2,{0xBB,0xF0,0x00,0x00,}},
- {0x706C,2,{0xEC,0xE1,0x00,0x00,}},
- {0x706D,2,{0xC3,0xF0,0x00,0x00,}},
- {0x706E,2,{0x9E,0xBB,0x00,0x00,}},
- {0x706F,2,{0xB5,0xC6,0x00,0x00,}},
- {0x7070,2,{0xBB,0xD2,0x00,0x00,}},
- {0x7071,2,{0x9E,0xBC,0x00,0x00,}},
- {0x7072,2,{0x9E,0xBD,0x00,0x00,}},
- {0x7073,2,{0x9E,0xBE,0x00,0x00,}},
- {0x7074,2,{0x9E,0xBF,0x00,0x00,}},
- {0x7075,2,{0xC1,0xE9,0x00,0x00,}},
- {0x7076,2,{0xD4,0xEE,0x00,0x00,}},
- {0x7077,2,{0x9E,0xC0,0x00,0x00,}},
- {0x7078,2,{0xBE,0xC4,0x00,0x00,}},
- {0x7079,2,{0x9E,0xC1,0x00,0x00,}},
- {0x707A,2,{0x9E,0xC2,0x00,0x00,}},
- {0x707B,2,{0x9E,0xC3,0x00,0x00,}},
- {0x707C,2,{0xD7,0xC6,0x00,0x00,}},
- {0x707D,2,{0x9E,0xC4,0x00,0x00,}},
- {0x707E,2,{0xD4,0xD6,0x00,0x00,}},
- {0x707F,2,{0xB2,0xD3,0x00,0x00,}},
- {0x7080,2,{0xEC,0xBE,0x00,0x00,}},
- {0x7081,2,{0x9E,0xC5,0x00,0x00,}},
- {0x7082,2,{0x9E,0xC6,0x00,0x00,}},
- {0x7083,2,{0x9E,0xC7,0x00,0x00,}},
- {0x7084,2,{0x9E,0xC8,0x00,0x00,}},
- {0x7085,2,{0xEA,0xC1,0x00,0x00,}},
- {0x7086,2,{0x9E,0xC9,0x00,0x00,}},
- {0x7087,2,{0x9E,0xCA,0x00,0x00,}},
- {0x7088,2,{0x9E,0xCB,0x00,0x00,}},
- {0x7089,2,{0xC2,0xAF,0x00,0x00,}},
- {0x708A,2,{0xB4,0xB6,0x00,0x00,}},
- {0x708B,2,{0x9E,0xCC,0x00,0x00,}},
- {0x708C,2,{0x9E,0xCD,0x00,0x00,}},
- {0x708D,2,{0x9E,0xCE,0x00,0x00,}},
- {0x708E,2,{0xD1,0xD7,0x00,0x00,}},
- {0x708F,2,{0x9E,0xCF,0x00,0x00,}},
- {0x7090,2,{0x9E,0xD0,0x00,0x00,}},
- {0x7091,2,{0x9E,0xD1,0x00,0x00,}},
- {0x7092,2,{0xB3,0xB4,0x00,0x00,}},
- {0x7093,2,{0x9E,0xD2,0x00,0x00,}},
- {0x7094,2,{0xC8,0xB2,0x00,0x00,}},
- {0x7095,2,{0xBF,0xBB,0x00,0x00,}},
- {0x7096,2,{0xEC,0xC0,0x00,0x00,}},
- {0x7097,2,{0x9E,0xD3,0x00,0x00,}},
- {0x7098,2,{0x9E,0xD4,0x00,0x00,}},
- {0x7099,2,{0xD6,0xCB,0x00,0x00,}},
- {0x709A,2,{0x9E,0xD5,0x00,0x00,}},
- {0x709B,2,{0x9E,0xD6,0x00,0x00,}},
- {0x709C,2,{0xEC,0xBF,0x00,0x00,}},
- {0x709D,2,{0xEC,0xC1,0x00,0x00,}},
- {0x709E,2,{0x9E,0xD7,0x00,0x00,}},
- {0x709F,2,{0x9E,0xD8,0x00,0x00,}},
- {0x70A0,2,{0x9E,0xD9,0x00,0x00,}},
- {0x70A1,2,{0x9E,0xDA,0x00,0x00,}},
- {0x70A2,2,{0x9E,0xDB,0x00,0x00,}},
- {0x70A3,2,{0x9E,0xDC,0x00,0x00,}},
- {0x70A4,2,{0x9E,0xDD,0x00,0x00,}},
- {0x70A5,2,{0x9E,0xDE,0x00,0x00,}},
- {0x70A6,2,{0x9E,0xDF,0x00,0x00,}},
- {0x70A7,2,{0x9E,0xE0,0x00,0x00,}},
- {0x70A8,2,{0x9E,0xE1,0x00,0x00,}},
- {0x70A9,2,{0x9E,0xE2,0x00,0x00,}},
- {0x70AA,2,{0x9E,0xE3,0x00,0x00,}},
- {0x70AB,2,{0xEC,0xC5,0x00,0x00,}},
- {0x70AC,2,{0xBE,0xE6,0x00,0x00,}},
- {0x70AD,2,{0xCC,0xBF,0x00,0x00,}},
- {0x70AE,2,{0xC5,0xDA,0x00,0x00,}},
- {0x70AF,2,{0xBE,0xBC,0x00,0x00,}},
- {0x70B0,2,{0x9E,0xE4,0x00,0x00,}},
- {0x70B1,2,{0xEC,0xC6,0x00,0x00,}},
- {0x70B2,2,{0x9E,0xE5,0x00,0x00,}},
- {0x70B3,2,{0xB1,0xFE,0x00,0x00,}},
- {0x70B4,2,{0x9E,0xE6,0x00,0x00,}},
- {0x70B5,2,{0x9E,0xE7,0x00,0x00,}},
- {0x70B6,2,{0x9E,0xE8,0x00,0x00,}},
- {0x70B7,2,{0xEC,0xC4,0x00,0x00,}},
- {0x70B8,2,{0xD5,0xA8,0x00,0x00,}},
- {0x70B9,2,{0xB5,0xE3,0x00,0x00,}},
- {0x70BA,2,{0x9E,0xE9,0x00,0x00,}},
- {0x70BB,2,{0xEC,0xC2,0x00,0x00,}},
- {0x70BC,2,{0xC1,0xB6,0x00,0x00,}},
- {0x70BD,2,{0xB3,0xE3,0x00,0x00,}},
- {0x70BE,2,{0x9E,0xEA,0x00,0x00,}},
- {0x70BF,2,{0x9E,0xEB,0x00,0x00,}},
- {0x70C0,2,{0xEC,0xC3,0x00,0x00,}},
- {0x70C1,2,{0xCB,0xB8,0x00,0x00,}},
- {0x70C2,2,{0xC0,0xC3,0x00,0x00,}},
- {0x70C3,2,{0xCC,0xFE,0x00,0x00,}},
- {0x70C4,2,{0x9E,0xEC,0x00,0x00,}},
- {0x70C5,2,{0x9E,0xED,0x00,0x00,}},
- {0x70C6,2,{0x9E,0xEE,0x00,0x00,}},
- {0x70C7,2,{0x9E,0xEF,0x00,0x00,}},
- {0x70C8,2,{0xC1,0xD2,0x00,0x00,}},
- {0x70C9,2,{0x9E,0xF0,0x00,0x00,}},
- {0x70CA,2,{0xEC,0xC8,0x00,0x00,}},
- {0x70CB,2,{0x9E,0xF1,0x00,0x00,}},
- {0x70CC,2,{0x9E,0xF2,0x00,0x00,}},
- {0x70CD,2,{0x9E,0xF3,0x00,0x00,}},
- {0x70CE,2,{0x9E,0xF4,0x00,0x00,}},
- {0x70CF,2,{0x9E,0xF5,0x00,0x00,}},
- {0x70D0,2,{0x9E,0xF6,0x00,0x00,}},
- {0x70D1,2,{0x9E,0xF7,0x00,0x00,}},
- {0x70D2,2,{0x9E,0xF8,0x00,0x00,}},
- {0x70D3,2,{0x9E,0xF9,0x00,0x00,}},
- {0x70D4,2,{0x9E,0xFA,0x00,0x00,}},
- {0x70D5,2,{0x9E,0xFB,0x00,0x00,}},
- {0x70D6,2,{0x9E,0xFC,0x00,0x00,}},
- {0x70D7,2,{0x9E,0xFD,0x00,0x00,}},
- {0x70D8,2,{0xBA,0xE6,0x00,0x00,}},
- {0x70D9,2,{0xC0,0xD3,0x00,0x00,}},
- {0x70DA,2,{0x9E,0xFE,0x00,0x00,}},
- {0x70DB,2,{0xD6,0xF2,0x00,0x00,}},
- {0x70DC,2,{0x9F,0x40,0x00,0x00,}},
- {0x70DD,2,{0x9F,0x41,0x00,0x00,}},
- {0x70DE,2,{0x9F,0x42,0x00,0x00,}},
- {0x70DF,2,{0xD1,0xCC,0x00,0x00,}},
- {0x70E0,2,{0x9F,0x43,0x00,0x00,}},
- {0x70E1,2,{0x9F,0x44,0x00,0x00,}},
- {0x70E2,2,{0x9F,0x45,0x00,0x00,}},
- {0x70E3,2,{0x9F,0x46,0x00,0x00,}},
- {0x70E4,2,{0xBF,0xBE,0x00,0x00,}},
- {0x70E5,2,{0x9F,0x47,0x00,0x00,}},
- {0x70E6,2,{0xB7,0xB3,0x00,0x00,}},
- {0x70E7,2,{0xC9,0xD5,0x00,0x00,}},
- {0x70E8,2,{0xEC,0xC7,0x00,0x00,}},
- {0x70E9,2,{0xBB,0xE2,0x00,0x00,}},
- {0x70EA,2,{0x9F,0x48,0x00,0x00,}},
- {0x70EB,2,{0xCC,0xCC,0x00,0x00,}},
- {0x70EC,2,{0xBD,0xFD,0x00,0x00,}},
- {0x70ED,2,{0xC8,0xC8,0x00,0x00,}},
- {0x70EE,2,{0x9F,0x49,0x00,0x00,}},
- {0x70EF,2,{0xCF,0xA9,0x00,0x00,}},
- {0x70F0,2,{0x9F,0x4A,0x00,0x00,}},
- {0x70F1,2,{0x9F,0x4B,0x00,0x00,}},
- {0x70F2,2,{0x9F,0x4C,0x00,0x00,}},
- {0x70F3,2,{0x9F,0x4D,0x00,0x00,}},
- {0x70F4,2,{0x9F,0x4E,0x00,0x00,}},
- {0x70F5,2,{0x9F,0x4F,0x00,0x00,}},
- {0x70F6,2,{0x9F,0x50,0x00,0x00,}},
- {0x70F7,2,{0xCD,0xE9,0x00,0x00,}},
- {0x70F8,2,{0x9F,0x51,0x00,0x00,}},
- {0x70F9,2,{0xC5,0xEB,0x00,0x00,}},
- {0x70FA,2,{0x9F,0x52,0x00,0x00,}},
- {0x70FB,2,{0x9F,0x53,0x00,0x00,}},
- {0x70FC,2,{0x9F,0x54,0x00,0x00,}},
- {0x70FD,2,{0xB7,0xE9,0x00,0x00,}},
- {0x70FE,2,{0x9F,0x55,0x00,0x00,}},
- {0x70FF,2,{0x9F,0x56,0x00,0x00,}},
- {0x7100,2,{0x9F,0x57,0x00,0x00,}},
- {0x7101,2,{0x9F,0x58,0x00,0x00,}},
- {0x7102,2,{0x9F,0x59,0x00,0x00,}},
- {0x7103,2,{0x9F,0x5A,0x00,0x00,}},
- {0x7104,2,{0x9F,0x5B,0x00,0x00,}},
- {0x7105,2,{0x9F,0x5C,0x00,0x00,}},
- {0x7106,2,{0x9F,0x5D,0x00,0x00,}},
- {0x7107,2,{0x9F,0x5E,0x00,0x00,}},
- {0x7108,2,{0x9F,0x5F,0x00,0x00,}},
- {0x7109,2,{0xD1,0xC9,0x00,0x00,}},
- {0x710A,2,{0xBA,0xB8,0x00,0x00,}},
- {0x710B,2,{0x9F,0x60,0x00,0x00,}},
- {0x710C,2,{0x9F,0x61,0x00,0x00,}},
- {0x710D,2,{0x9F,0x62,0x00,0x00,}},
- {0x710E,2,{0x9F,0x63,0x00,0x00,}},
- {0x710F,2,{0x9F,0x64,0x00,0x00,}},
- {0x7110,2,{0xEC,0xC9,0x00,0x00,}},
- {0x7111,2,{0x9F,0x65,0x00,0x00,}},
- {0x7112,2,{0x9F,0x66,0x00,0x00,}},
- {0x7113,2,{0xEC,0xCA,0x00,0x00,}},
- {0x7114,2,{0x9F,0x67,0x00,0x00,}},
- {0x7115,2,{0xBB,0xC0,0x00,0x00,}},
- {0x7116,2,{0xEC,0xCB,0x00,0x00,}},
- {0x7117,2,{0x9F,0x68,0x00,0x00,}},
- {0x7118,2,{0xEC,0xE2,0x00,0x00,}},
- {0x7119,2,{0xB1,0xBA,0x00,0x00,}},
- {0x711A,2,{0xB7,0xD9,0x00,0x00,}},
- {0x711B,2,{0x9F,0x69,0x00,0x00,}},
- {0x711C,2,{0x9F,0x6A,0x00,0x00,}},
- {0x711D,2,{0x9F,0x6B,0x00,0x00,}},
- {0x711E,2,{0x9F,0x6C,0x00,0x00,}},
- {0x711F,2,{0x9F,0x6D,0x00,0x00,}},
- {0x7120,2,{0x9F,0x6E,0x00,0x00,}},
- {0x7121,2,{0x9F,0x6F,0x00,0x00,}},
- {0x7122,2,{0x9F,0x70,0x00,0x00,}},
- {0x7123,2,{0x9F,0x71,0x00,0x00,}},
- {0x7124,2,{0x9F,0x72,0x00,0x00,}},
- {0x7125,2,{0x9F,0x73,0x00,0x00,}},
- {0x7126,2,{0xBD,0xB9,0x00,0x00,}},
- {0x7127,2,{0x9F,0x74,0x00,0x00,}},
- {0x7128,2,{0x9F,0x75,0x00,0x00,}},
- {0x7129,2,{0x9F,0x76,0x00,0x00,}},
- {0x712A,2,{0x9F,0x77,0x00,0x00,}},
- {0x712B,2,{0x9F,0x78,0x00,0x00,}},
- {0x712C,2,{0x9F,0x79,0x00,0x00,}},
- {0x712D,2,{0x9F,0x7A,0x00,0x00,}},
- {0x712E,2,{0x9F,0x7B,0x00,0x00,}},
- {0x712F,2,{0xEC,0xCC,0x00,0x00,}},
- {0x7130,2,{0xD1,0xE6,0x00,0x00,}},
- {0x7131,2,{0xEC,0xCD,0x00,0x00,}},
- {0x7132,2,{0x9F,0x7C,0x00,0x00,}},
- {0x7133,2,{0x9F,0x7D,0x00,0x00,}},
- {0x7134,2,{0x9F,0x7E,0x00,0x00,}},
- {0x7135,2,{0x9F,0x80,0x00,0x00,}},
- {0x7136,2,{0xC8,0xBB,0x00,0x00,}},
- {0x7137,2,{0x9F,0x81,0x00,0x00,}},
- {0x7138,2,{0x9F,0x82,0x00,0x00,}},
- {0x7139,2,{0x9F,0x83,0x00,0x00,}},
- {0x713A,2,{0x9F,0x84,0x00,0x00,}},
- {0x713B,2,{0x9F,0x85,0x00,0x00,}},
- {0x713C,2,{0x9F,0x86,0x00,0x00,}},
- {0x713D,2,{0x9F,0x87,0x00,0x00,}},
- {0x713E,2,{0x9F,0x88,0x00,0x00,}},
- {0x713F,2,{0x9F,0x89,0x00,0x00,}},
- {0x7140,2,{0x9F,0x8A,0x00,0x00,}},
- {0x7141,2,{0x9F,0x8B,0x00,0x00,}},
- {0x7142,2,{0x9F,0x8C,0x00,0x00,}},
- {0x7143,2,{0x9F,0x8D,0x00,0x00,}},
- {0x7144,2,{0x9F,0x8E,0x00,0x00,}},
- {0x7145,2,{0xEC,0xD1,0x00,0x00,}},
- {0x7146,2,{0x9F,0x8F,0x00,0x00,}},
- {0x7147,2,{0x9F,0x90,0x00,0x00,}},
- {0x7148,2,{0x9F,0x91,0x00,0x00,}},
- {0x7149,2,{0x9F,0x92,0x00,0x00,}},
- {0x714A,2,{0xEC,0xD3,0x00,0x00,}},
- {0x714B,2,{0x9F,0x93,0x00,0x00,}},
- {0x714C,2,{0xBB,0xCD,0x00,0x00,}},
- {0x714D,2,{0x9F,0x94,0x00,0x00,}},
- {0x714E,2,{0xBC,0xE5,0x00,0x00,}},
- {0x714F,2,{0x9F,0x95,0x00,0x00,}},
- {0x7150,2,{0x9F,0x96,0x00,0x00,}},
- {0x7151,2,{0x9F,0x97,0x00,0x00,}},
- {0x7152,2,{0x9F,0x98,0x00,0x00,}},
- {0x7153,2,{0x9F,0x99,0x00,0x00,}},
- {0x7154,2,{0x9F,0x9A,0x00,0x00,}},
- {0x7155,2,{0x9F,0x9B,0x00,0x00,}},
- {0x7156,2,{0x9F,0x9C,0x00,0x00,}},
- {0x7157,2,{0x9F,0x9D,0x00,0x00,}},
- {0x7158,2,{0x9F,0x9E,0x00,0x00,}},
- {0x7159,2,{0x9F,0x9F,0x00,0x00,}},
- {0x715A,2,{0x9F,0xA0,0x00,0x00,}},
- {0x715B,2,{0x9F,0xA1,0x00,0x00,}},
- {0x715C,2,{0xEC,0xCF,0x00,0x00,}},
- {0x715D,2,{0x9F,0xA2,0x00,0x00,}},
- {0x715E,2,{0xC9,0xB7,0x00,0x00,}},
- {0x715F,2,{0x9F,0xA3,0x00,0x00,}},
- {0x7160,2,{0x9F,0xA4,0x00,0x00,}},
- {0x7161,2,{0x9F,0xA5,0x00,0x00,}},
- {0x7162,2,{0x9F,0xA6,0x00,0x00,}},
- {0x7163,2,{0x9F,0xA7,0x00,0x00,}},
- {0x7164,2,{0xC3,0xBA,0x00,0x00,}},
- {0x7165,2,{0x9F,0xA8,0x00,0x00,}},
- {0x7166,2,{0xEC,0xE3,0x00,0x00,}},
- {0x7167,2,{0xD5,0xD5,0x00,0x00,}},
- {0x7168,2,{0xEC,0xD0,0x00,0x00,}},
- {0x7169,2,{0x9F,0xA9,0x00,0x00,}},
- {0x716A,2,{0x9F,0xAA,0x00,0x00,}},
- {0x716B,2,{0x9F,0xAB,0x00,0x00,}},
- {0x716C,2,{0x9F,0xAC,0x00,0x00,}},
- {0x716D,2,{0x9F,0xAD,0x00,0x00,}},
- {0x716E,2,{0xD6,0xF3,0x00,0x00,}},
- {0x716F,2,{0x9F,0xAE,0x00,0x00,}},
- {0x7170,2,{0x9F,0xAF,0x00,0x00,}},
- {0x7171,2,{0x9F,0xB0,0x00,0x00,}},
- {0x7172,2,{0xEC,0xD2,0x00,0x00,}},
- {0x7173,2,{0xEC,0xCE,0x00,0x00,}},
- {0x7174,2,{0x9F,0xB1,0x00,0x00,}},
- {0x7175,2,{0x9F,0xB2,0x00,0x00,}},
- {0x7176,2,{0x9F,0xB3,0x00,0x00,}},
- {0x7177,2,{0x9F,0xB4,0x00,0x00,}},
- {0x7178,2,{0xEC,0xD4,0x00,0x00,}},
- {0x7179,2,{0x9F,0xB5,0x00,0x00,}},
- {0x717A,2,{0xEC,0xD5,0x00,0x00,}},
- {0x717B,2,{0x9F,0xB6,0x00,0x00,}},
- {0x717C,2,{0x9F,0xB7,0x00,0x00,}},
- {0x717D,2,{0xC9,0xBF,0x00,0x00,}},
- {0x717E,2,{0x9F,0xB8,0x00,0x00,}},
- {0x717F,2,{0x9F,0xB9,0x00,0x00,}},
- {0x7180,2,{0x9F,0xBA,0x00,0x00,}},
- {0x7181,2,{0x9F,0xBB,0x00,0x00,}},
- {0x7182,2,{0x9F,0xBC,0x00,0x00,}},
- {0x7183,2,{0x9F,0xBD,0x00,0x00,}},
- {0x7184,2,{0xCF,0xA8,0x00,0x00,}},
- {0x7185,2,{0x9F,0xBE,0x00,0x00,}},
- {0x7186,2,{0x9F,0xBF,0x00,0x00,}},
- {0x7187,2,{0x9F,0xC0,0x00,0x00,}},
- {0x7188,2,{0x9F,0xC1,0x00,0x00,}},
- {0x7189,2,{0x9F,0xC2,0x00,0x00,}},
- {0x718A,2,{0xD0,0xDC,0x00,0x00,}},
- {0x718B,2,{0x9F,0xC3,0x00,0x00,}},
- {0x718C,2,{0x9F,0xC4,0x00,0x00,}},
- {0x718D,2,{0x9F,0xC5,0x00,0x00,}},
- {0x718E,2,{0x9F,0xC6,0x00,0x00,}},
- {0x718F,2,{0xD1,0xAC,0x00,0x00,}},
- {0x7190,2,{0x9F,0xC7,0x00,0x00,}},
- {0x7191,2,{0x9F,0xC8,0x00,0x00,}},
- {0x7192,2,{0x9F,0xC9,0x00,0x00,}},
- {0x7193,2,{0x9F,0xCA,0x00,0x00,}},
- {0x7194,2,{0xC8,0xDB,0x00,0x00,}},
- {0x7195,2,{0x9F,0xCB,0x00,0x00,}},
- {0x7196,2,{0x9F,0xCC,0x00,0x00,}},
- {0x7197,2,{0x9F,0xCD,0x00,0x00,}},
- {0x7198,2,{0xEC,0xD6,0x00,0x00,}},
- {0x7199,2,{0xCE,0xF5,0x00,0x00,}},
- {0x719A,2,{0x9F,0xCE,0x00,0x00,}},
- {0x719B,2,{0x9F,0xCF,0x00,0x00,}},
- {0x719C,2,{0x9F,0xD0,0x00,0x00,}},
- {0x719D,2,{0x9F,0xD1,0x00,0x00,}},
- {0x719E,2,{0x9F,0xD2,0x00,0x00,}},
- {0x719F,2,{0xCA,0xEC,0x00,0x00,}},
- {0x71A0,2,{0xEC,0xDA,0x00,0x00,}},
- {0x71A1,2,{0x9F,0xD3,0x00,0x00,}},
- {0x71A2,2,{0x9F,0xD4,0x00,0x00,}},
- {0x71A3,2,{0x9F,0xD5,0x00,0x00,}},
- {0x71A4,2,{0x9F,0xD6,0x00,0x00,}},
- {0x71A5,2,{0x9F,0xD7,0x00,0x00,}},
- {0x71A6,2,{0x9F,0xD8,0x00,0x00,}},
- {0x71A7,2,{0x9F,0xD9,0x00,0x00,}},
- {0x71A8,2,{0xEC,0xD9,0x00,0x00,}},
- {0x71A9,2,{0x9F,0xDA,0x00,0x00,}},
- {0x71AA,2,{0x9F,0xDB,0x00,0x00,}},
- {0x71AB,2,{0x9F,0xDC,0x00,0x00,}},
- {0x71AC,2,{0xB0,0xBE,0x00,0x00,}},
- {0x71AD,2,{0x9F,0xDD,0x00,0x00,}},
- {0x71AE,2,{0x9F,0xDE,0x00,0x00,}},
- {0x71AF,2,{0x9F,0xDF,0x00,0x00,}},
- {0x71B0,2,{0x9F,0xE0,0x00,0x00,}},
- {0x71B1,2,{0x9F,0xE1,0x00,0x00,}},
- {0x71B2,2,{0x9F,0xE2,0x00,0x00,}},
- {0x71B3,2,{0xEC,0xD7,0x00,0x00,}},
- {0x71B4,2,{0x9F,0xE3,0x00,0x00,}},
- {0x71B5,2,{0xEC,0xD8,0x00,0x00,}},
- {0x71B6,2,{0x9F,0xE4,0x00,0x00,}},
- {0x71B7,2,{0x9F,0xE5,0x00,0x00,}},
- {0x71B8,2,{0x9F,0xE6,0x00,0x00,}},
- {0x71B9,2,{0xEC,0xE4,0x00,0x00,}},
- {0x71BA,2,{0x9F,0xE7,0x00,0x00,}},
- {0x71BB,2,{0x9F,0xE8,0x00,0x00,}},
- {0x71BC,2,{0x9F,0xE9,0x00,0x00,}},
- {0x71BD,2,{0x9F,0xEA,0x00,0x00,}},
- {0x71BE,2,{0x9F,0xEB,0x00,0x00,}},
- {0x71BF,2,{0x9F,0xEC,0x00,0x00,}},
- {0x71C0,2,{0x9F,0xED,0x00,0x00,}},
- {0x71C1,2,{0x9F,0xEE,0x00,0x00,}},
- {0x71C2,2,{0x9F,0xEF,0x00,0x00,}},
- {0x71C3,2,{0xC8,0xBC,0x00,0x00,}},
- {0x71C4,2,{0x9F,0xF0,0x00,0x00,}},
- {0x71C5,2,{0x9F,0xF1,0x00,0x00,}},
- {0x71C6,2,{0x9F,0xF2,0x00,0x00,}},
- {0x71C7,2,{0x9F,0xF3,0x00,0x00,}},
- {0x71C8,2,{0x9F,0xF4,0x00,0x00,}},
- {0x71C9,2,{0x9F,0xF5,0x00,0x00,}},
- {0x71CA,2,{0x9F,0xF6,0x00,0x00,}},
- {0x71CB,2,{0x9F,0xF7,0x00,0x00,}},
- {0x71CC,2,{0x9F,0xF8,0x00,0x00,}},
- {0x71CD,2,{0x9F,0xF9,0x00,0x00,}},
- {0x71CE,2,{0xC1,0xC7,0x00,0x00,}},
- {0x71CF,2,{0x9F,0xFA,0x00,0x00,}},
- {0x71D0,2,{0x9F,0xFB,0x00,0x00,}},
- {0x71D1,2,{0x9F,0xFC,0x00,0x00,}},
- {0x71D2,2,{0x9F,0xFD,0x00,0x00,}},
- {0x71D3,2,{0x9F,0xFE,0x00,0x00,}},
- {0x71D4,2,{0xEC,0xDC,0x00,0x00,}},
- {0x71D5,2,{0xD1,0xE0,0x00,0x00,}},
- {0x71D6,2,{0xA0,0x40,0x00,0x00,}},
- {0x71D7,2,{0xA0,0x41,0x00,0x00,}},
- {0x71D8,2,{0xA0,0x42,0x00,0x00,}},
- {0x71D9,2,{0xA0,0x43,0x00,0x00,}},
- {0x71DA,2,{0xA0,0x44,0x00,0x00,}},
- {0x71DB,2,{0xA0,0x45,0x00,0x00,}},
- {0x71DC,2,{0xA0,0x46,0x00,0x00,}},
- {0x71DD,2,{0xA0,0x47,0x00,0x00,}},
- {0x71DE,2,{0xA0,0x48,0x00,0x00,}},
- {0x71DF,2,{0xA0,0x49,0x00,0x00,}},
- {0x71E0,2,{0xEC,0xDB,0x00,0x00,}},
- {0x71E1,2,{0xA0,0x4A,0x00,0x00,}},
- {0x71E2,2,{0xA0,0x4B,0x00,0x00,}},
- {0x71E3,2,{0xA0,0x4C,0x00,0x00,}},
- {0x71E4,2,{0xA0,0x4D,0x00,0x00,}},
- {0x71E5,2,{0xD4,0xEF,0x00,0x00,}},
- {0x71E6,2,{0xA0,0x4E,0x00,0x00,}},
- {0x71E7,2,{0xEC,0xDD,0x00,0x00,}},
- {0x71E8,2,{0xA0,0x4F,0x00,0x00,}},
- {0x71E9,2,{0xA0,0x50,0x00,0x00,}},
- {0x71EA,2,{0xA0,0x51,0x00,0x00,}},
- {0x71EB,2,{0xA0,0x52,0x00,0x00,}},
- {0x71EC,2,{0xA0,0x53,0x00,0x00,}},
- {0x71ED,2,{0xA0,0x54,0x00,0x00,}},
- {0x71EE,2,{0xDB,0xC6,0x00,0x00,}},
- {0x71EF,2,{0xA0,0x55,0x00,0x00,}},
- {0x71F0,2,{0xA0,0x56,0x00,0x00,}},
- {0x71F1,2,{0xA0,0x57,0x00,0x00,}},
- {0x71F2,2,{0xA0,0x58,0x00,0x00,}},
- {0x71F3,2,{0xA0,0x59,0x00,0x00,}},
- {0x71F4,2,{0xA0,0x5A,0x00,0x00,}},
- {0x71F5,2,{0xA0,0x5B,0x00,0x00,}},
- {0x71F6,2,{0xA0,0x5C,0x00,0x00,}},
- {0x71F7,2,{0xA0,0x5D,0x00,0x00,}},
- {0x71F8,2,{0xA0,0x5E,0x00,0x00,}},
- {0x71F9,2,{0xEC,0xDE,0x00,0x00,}},
- {0x71FA,2,{0xA0,0x5F,0x00,0x00,}},
- {0x71FB,2,{0xA0,0x60,0x00,0x00,}},
- {0x71FC,2,{0xA0,0x61,0x00,0x00,}},
- {0x71FD,2,{0xA0,0x62,0x00,0x00,}},
- {0x71FE,2,{0xA0,0x63,0x00,0x00,}},
- {0x71FF,2,{0xA0,0x64,0x00,0x00,}},
- {0x7200,2,{0xA0,0x65,0x00,0x00,}},
- {0x7201,2,{0xA0,0x66,0x00,0x00,}},
- {0x7202,2,{0xA0,0x67,0x00,0x00,}},
- {0x7203,2,{0xA0,0x68,0x00,0x00,}},
- {0x7204,2,{0xA0,0x69,0x00,0x00,}},
- {0x7205,2,{0xA0,0x6A,0x00,0x00,}},
- {0x7206,2,{0xB1,0xAC,0x00,0x00,}},
- {0x7207,2,{0xA0,0x6B,0x00,0x00,}},
- {0x7208,2,{0xA0,0x6C,0x00,0x00,}},
- {0x7209,2,{0xA0,0x6D,0x00,0x00,}},
- {0x720A,2,{0xA0,0x6E,0x00,0x00,}},
- {0x720B,2,{0xA0,0x6F,0x00,0x00,}},
- {0x720C,2,{0xA0,0x70,0x00,0x00,}},
- {0x720D,2,{0xA0,0x71,0x00,0x00,}},
- {0x720E,2,{0xA0,0x72,0x00,0x00,}},
- {0x720F,2,{0xA0,0x73,0x00,0x00,}},
- {0x7210,2,{0xA0,0x74,0x00,0x00,}},
- {0x7211,2,{0xA0,0x75,0x00,0x00,}},
- {0x7212,2,{0xA0,0x76,0x00,0x00,}},
- {0x7213,2,{0xA0,0x77,0x00,0x00,}},
- {0x7214,2,{0xA0,0x78,0x00,0x00,}},
- {0x7215,2,{0xA0,0x79,0x00,0x00,}},
- {0x7216,2,{0xA0,0x7A,0x00,0x00,}},
- {0x7217,2,{0xA0,0x7B,0x00,0x00,}},
- {0x7218,2,{0xA0,0x7C,0x00,0x00,}},
- {0x7219,2,{0xA0,0x7D,0x00,0x00,}},
- {0x721A,2,{0xA0,0x7E,0x00,0x00,}},
- {0x721B,2,{0xA0,0x80,0x00,0x00,}},
- {0x721C,2,{0xA0,0x81,0x00,0x00,}},
- {0x721D,2,{0xEC,0xDF,0x00,0x00,}},
- {0x721E,2,{0xA0,0x82,0x00,0x00,}},
- {0x721F,2,{0xA0,0x83,0x00,0x00,}},
- {0x7220,2,{0xA0,0x84,0x00,0x00,}},
- {0x7221,2,{0xA0,0x85,0x00,0x00,}},
- {0x7222,2,{0xA0,0x86,0x00,0x00,}},
- {0x7223,2,{0xA0,0x87,0x00,0x00,}},
- {0x7224,2,{0xA0,0x88,0x00,0x00,}},
- {0x7225,2,{0xA0,0x89,0x00,0x00,}},
- {0x7226,2,{0xA0,0x8A,0x00,0x00,}},
- {0x7227,2,{0xA0,0x8B,0x00,0x00,}},
- {0x7228,2,{0xEC,0xE0,0x00,0x00,}},
- {0x7229,2,{0xA0,0x8C,0x00,0x00,}},
- {0x722A,2,{0xD7,0xA6,0x00,0x00,}},
- {0x722B,2,{0xA0,0x8D,0x00,0x00,}},
- {0x722C,2,{0xC5,0xC0,0x00,0x00,}},
- {0x722D,2,{0xA0,0x8E,0x00,0x00,}},
- {0x722E,2,{0xA0,0x8F,0x00,0x00,}},
- {0x722F,2,{0xA0,0x90,0x00,0x00,}},
- {0x7230,2,{0xEB,0xBC,0x00,0x00,}},
- {0x7231,2,{0xB0,0xAE,0x00,0x00,}},
- {0x7232,2,{0xA0,0x91,0x00,0x00,}},
- {0x7233,2,{0xA0,0x92,0x00,0x00,}},
- {0x7234,2,{0xA0,0x93,0x00,0x00,}},
- {0x7235,2,{0xBE,0xF4,0x00,0x00,}},
- {0x7236,2,{0xB8,0xB8,0x00,0x00,}},
- {0x7237,2,{0xD2,0xAF,0x00,0x00,}},
- {0x7238,2,{0xB0,0xD6,0x00,0x00,}},
- {0x7239,2,{0xB5,0xF9,0x00,0x00,}},
- {0x723A,2,{0xA0,0x94,0x00,0x00,}},
- {0x723B,2,{0xD8,0xB3,0x00,0x00,}},
- {0x723C,2,{0xA0,0x95,0x00,0x00,}},
- {0x723D,2,{0xCB,0xAC,0x00,0x00,}},
- {0x723E,2,{0xA0,0x96,0x00,0x00,}},
- {0x723F,2,{0xE3,0xDD,0x00,0x00,}},
- {0x7240,2,{0xA0,0x97,0x00,0x00,}},
- {0x7241,2,{0xA0,0x98,0x00,0x00,}},
- {0x7242,2,{0xA0,0x99,0x00,0x00,}},
- {0x7243,2,{0xA0,0x9A,0x00,0x00,}},
- {0x7244,2,{0xA0,0x9B,0x00,0x00,}},
- {0x7245,2,{0xA0,0x9C,0x00,0x00,}},
- {0x7246,2,{0xA0,0x9D,0x00,0x00,}},
- {0x7247,2,{0xC6,0xAC,0x00,0x00,}},
- {0x7248,2,{0xB0,0xE6,0x00,0x00,}},
- {0x7249,2,{0xA0,0x9E,0x00,0x00,}},
- {0x724A,2,{0xA0,0x9F,0x00,0x00,}},
- {0x724B,2,{0xA0,0xA0,0x00,0x00,}},
- {0x724C,2,{0xC5,0xC6,0x00,0x00,}},
- {0x724D,2,{0xEB,0xB9,0x00,0x00,}},
- {0x724E,2,{0xA0,0xA1,0x00,0x00,}},
- {0x724F,2,{0xA0,0xA2,0x00,0x00,}},
- {0x7250,2,{0xA0,0xA3,0x00,0x00,}},
- {0x7251,2,{0xA0,0xA4,0x00,0x00,}},
- {0x7252,2,{0xEB,0xBA,0x00,0x00,}},
- {0x7253,2,{0xA0,0xA5,0x00,0x00,}},
- {0x7254,2,{0xA0,0xA6,0x00,0x00,}},
- {0x7255,2,{0xA0,0xA7,0x00,0x00,}},
- {0x7256,2,{0xEB,0xBB,0x00,0x00,}},
- {0x7257,2,{0xA0,0xA8,0x00,0x00,}},
- {0x7258,2,{0xA0,0xA9,0x00,0x00,}},
- {0x7259,2,{0xD1,0xC0,0x00,0x00,}},
- {0x725A,2,{0xA0,0xAA,0x00,0x00,}},
- {0x725B,2,{0xC5,0xA3,0x00,0x00,}},
- {0x725C,2,{0xA0,0xAB,0x00,0x00,}},
- {0x725D,2,{0xEA,0xF2,0x00,0x00,}},
- {0x725E,2,{0xA0,0xAC,0x00,0x00,}},
- {0x725F,2,{0xC4,0xB2,0x00,0x00,}},
- {0x7260,2,{0xA0,0xAD,0x00,0x00,}},
- {0x7261,2,{0xC4,0xB5,0x00,0x00,}},
- {0x7262,2,{0xC0,0xCE,0x00,0x00,}},
- {0x7263,2,{0xA0,0xAE,0x00,0x00,}},
- {0x7264,2,{0xA0,0xAF,0x00,0x00,}},
- {0x7265,2,{0xA0,0xB0,0x00,0x00,}},
- {0x7266,2,{0xEA,0xF3,0x00,0x00,}},
- {0x7267,2,{0xC4,0xC1,0x00,0x00,}},
- {0x7268,2,{0xA0,0xB1,0x00,0x00,}},
- {0x7269,2,{0xCE,0xEF,0x00,0x00,}},
- {0x726A,2,{0xA0,0xB2,0x00,0x00,}},
- {0x726B,2,{0xA0,0xB3,0x00,0x00,}},
- {0x726C,2,{0xA0,0xB4,0x00,0x00,}},
- {0x726D,2,{0xA0,0xB5,0x00,0x00,}},
- {0x726E,2,{0xEA,0xF0,0x00,0x00,}},
- {0x726F,2,{0xEA,0xF4,0x00,0x00,}},
- {0x7270,2,{0xA0,0xB6,0x00,0x00,}},
- {0x7271,2,{0xA0,0xB7,0x00,0x00,}},
- {0x7272,2,{0xC9,0xFC,0x00,0x00,}},
- {0x7273,2,{0xA0,0xB8,0x00,0x00,}},
- {0x7274,2,{0xA0,0xB9,0x00,0x00,}},
- {0x7275,2,{0xC7,0xA3,0x00,0x00,}},
- {0x7276,2,{0xA0,0xBA,0x00,0x00,}},
- {0x7277,2,{0xA0,0xBB,0x00,0x00,}},
- {0x7278,2,{0xA0,0xBC,0x00,0x00,}},
- {0x7279,2,{0xCC,0xD8,0x00,0x00,}},
- {0x727A,2,{0xCE,0xFE,0x00,0x00,}},
- {0x727B,2,{0xA0,0xBD,0x00,0x00,}},
- {0x727C,2,{0xA0,0xBE,0x00,0x00,}},
- {0x727D,2,{0xA0,0xBF,0x00,0x00,}},
- {0x727E,2,{0xEA,0xF5,0x00,0x00,}},
- {0x727F,2,{0xEA,0xF6,0x00,0x00,}},
- {0x7280,2,{0xCF,0xAC,0x00,0x00,}},
- {0x7281,2,{0xC0,0xE7,0x00,0x00,}},
- {0x7282,2,{0xA0,0xC0,0x00,0x00,}},
- {0x7283,2,{0xA0,0xC1,0x00,0x00,}},
- {0x7284,2,{0xEA,0xF7,0x00,0x00,}},
- {0x7285,2,{0xA0,0xC2,0x00,0x00,}},
- {0x7286,2,{0xA0,0xC3,0x00,0x00,}},
- {0x7287,2,{0xA0,0xC4,0x00,0x00,}},
- {0x7288,2,{0xA0,0xC5,0x00,0x00,}},
- {0x7289,2,{0xA0,0xC6,0x00,0x00,}},
- {0x728A,2,{0xB6,0xBF,0x00,0x00,}},
- {0x728B,2,{0xEA,0xF8,0x00,0x00,}},
- {0x728C,2,{0xA0,0xC7,0x00,0x00,}},
- {0x728D,2,{0xEA,0xF9,0x00,0x00,}},
- {0x728E,2,{0xA0,0xC8,0x00,0x00,}},
- {0x728F,2,{0xEA,0xFA,0x00,0x00,}},
- {0x7290,2,{0xA0,0xC9,0x00,0x00,}},
- {0x7291,2,{0xA0,0xCA,0x00,0x00,}},
- {0x7292,2,{0xEA,0xFB,0x00,0x00,}},
- {0x7293,2,{0xA0,0xCB,0x00,0x00,}},
- {0x7294,2,{0xA0,0xCC,0x00,0x00,}},
- {0x7295,2,{0xA0,0xCD,0x00,0x00,}},
- {0x7296,2,{0xA0,0xCE,0x00,0x00,}},
- {0x7297,2,{0xA0,0xCF,0x00,0x00,}},
- {0x7298,2,{0xA0,0xD0,0x00,0x00,}},
- {0x7299,2,{0xA0,0xD1,0x00,0x00,}},
- {0x729A,2,{0xA0,0xD2,0x00,0x00,}},
- {0x729B,2,{0xA0,0xD3,0x00,0x00,}},
- {0x729C,2,{0xA0,0xD4,0x00,0x00,}},
- {0x729D,2,{0xA0,0xD5,0x00,0x00,}},
- {0x729E,2,{0xA0,0xD6,0x00,0x00,}},
- {0x729F,2,{0xEA,0xF1,0x00,0x00,}},
- {0x72A0,2,{0xA0,0xD7,0x00,0x00,}},
- {0x72A1,2,{0xA0,0xD8,0x00,0x00,}},
- {0x72A2,2,{0xA0,0xD9,0x00,0x00,}},
- {0x72A3,2,{0xA0,0xDA,0x00,0x00,}},
- {0x72A4,2,{0xA0,0xDB,0x00,0x00,}},
- {0x72A5,2,{0xA0,0xDC,0x00,0x00,}},
- {0x72A6,2,{0xA0,0xDD,0x00,0x00,}},
- {0x72A7,2,{0xA0,0xDE,0x00,0x00,}},
- {0x72A8,2,{0xA0,0xDF,0x00,0x00,}},
- {0x72A9,2,{0xA0,0xE0,0x00,0x00,}},
- {0x72AA,2,{0xA0,0xE1,0x00,0x00,}},
- {0x72AB,2,{0xA0,0xE2,0x00,0x00,}},
- {0x72AC,2,{0xC8,0xAE,0x00,0x00,}},
- {0x72AD,2,{0xE1,0xEB,0x00,0x00,}},
- {0x72AE,2,{0xA0,0xE3,0x00,0x00,}},
- {0x72AF,2,{0xB7,0xB8,0x00,0x00,}},
- {0x72B0,2,{0xE1,0xEC,0x00,0x00,}},
- {0x72B1,2,{0xA0,0xE4,0x00,0x00,}},
- {0x72B2,2,{0xA0,0xE5,0x00,0x00,}},
- {0x72B3,2,{0xA0,0xE6,0x00,0x00,}},
- {0x72B4,2,{0xE1,0xED,0x00,0x00,}},
- {0x72B5,2,{0xA0,0xE7,0x00,0x00,}},
- {0x72B6,2,{0xD7,0xB4,0x00,0x00,}},
- {0x72B7,2,{0xE1,0xEE,0x00,0x00,}},
- {0x72B8,2,{0xE1,0xEF,0x00,0x00,}},
- {0x72B9,2,{0xD3,0xCC,0x00,0x00,}},
- {0x72BA,2,{0xA0,0xE8,0x00,0x00,}},
- {0x72BB,2,{0xA0,0xE9,0x00,0x00,}},
- {0x72BC,2,{0xA0,0xEA,0x00,0x00,}},
- {0x72BD,2,{0xA0,0xEB,0x00,0x00,}},
- {0x72BE,2,{0xA0,0xEC,0x00,0x00,}},
- {0x72BF,2,{0xA0,0xED,0x00,0x00,}},
- {0x72C0,2,{0xA0,0xEE,0x00,0x00,}},
- {0x72C1,2,{0xE1,0xF1,0x00,0x00,}},
- {0x72C2,2,{0xBF,0xF1,0x00,0x00,}},
- {0x72C3,2,{0xE1,0xF0,0x00,0x00,}},
- {0x72C4,2,{0xB5,0xD2,0x00,0x00,}},
- {0x72C5,2,{0xA0,0xEF,0x00,0x00,}},
- {0x72C6,2,{0xA0,0xF0,0x00,0x00,}},
- {0x72C7,2,{0xA0,0xF1,0x00,0x00,}},
- {0x72C8,2,{0xB1,0xB7,0x00,0x00,}},
- {0x72C9,2,{0xA0,0xF2,0x00,0x00,}},
- {0x72CA,2,{0xA0,0xF3,0x00,0x00,}},
- {0x72CB,2,{0xA0,0xF4,0x00,0x00,}},
- {0x72CC,2,{0xA0,0xF5,0x00,0x00,}},
- {0x72CD,2,{0xE1,0xF3,0x00,0x00,}},
- {0x72CE,2,{0xE1,0xF2,0x00,0x00,}},
- {0x72CF,2,{0xA0,0xF6,0x00,0x00,}},
- {0x72D0,2,{0xBA,0xFC,0x00,0x00,}},
- {0x72D1,2,{0xA0,0xF7,0x00,0x00,}},
- {0x72D2,2,{0xE1,0xF4,0x00,0x00,}},
- {0x72D3,2,{0xA0,0xF8,0x00,0x00,}},
- {0x72D4,2,{0xA0,0xF9,0x00,0x00,}},
- {0x72D5,2,{0xA0,0xFA,0x00,0x00,}},
- {0x72D6,2,{0xA0,0xFB,0x00,0x00,}},
- {0x72D7,2,{0xB9,0xB7,0x00,0x00,}},
- {0x72D8,2,{0xA0,0xFC,0x00,0x00,}},
- {0x72D9,2,{0xBE,0xD1,0x00,0x00,}},
- {0x72DA,2,{0xA0,0xFD,0x00,0x00,}},
- {0x72DB,2,{0xA0,0xFE,0x00,0x00,}},
- {0x72DC,2,{0xAA,0x40,0x00,0x00,}},
- {0x72DD,2,{0xAA,0x41,0x00,0x00,}},
- {0x72DE,2,{0xC4,0xFC,0x00,0x00,}},
- {0x72DF,2,{0xAA,0x42,0x00,0x00,}},
- {0x72E0,2,{0xBA,0xDD,0x00,0x00,}},
- {0x72E1,2,{0xBD,0xC6,0x00,0x00,}},
- {0x72E2,2,{0xAA,0x43,0x00,0x00,}},
- {0x72E3,2,{0xAA,0x44,0x00,0x00,}},
- {0x72E4,2,{0xAA,0x45,0x00,0x00,}},
- {0x72E5,2,{0xAA,0x46,0x00,0x00,}},
- {0x72E6,2,{0xAA,0x47,0x00,0x00,}},
- {0x72E7,2,{0xAA,0x48,0x00,0x00,}},
- {0x72E8,2,{0xE1,0xF5,0x00,0x00,}},
- {0x72E9,2,{0xE1,0xF7,0x00,0x00,}},
- {0x72EA,2,{0xAA,0x49,0x00,0x00,}},
- {0x72EB,2,{0xAA,0x4A,0x00,0x00,}},
- {0x72EC,2,{0xB6,0xC0,0x00,0x00,}},
- {0x72ED,2,{0xCF,0xC1,0x00,0x00,}},
- {0x72EE,2,{0xCA,0xA8,0x00,0x00,}},
- {0x72EF,2,{0xE1,0xF6,0x00,0x00,}},
- {0x72F0,2,{0xD5,0xF8,0x00,0x00,}},
- {0x72F1,2,{0xD3,0xFC,0x00,0x00,}},
- {0x72F2,2,{0xE1,0xF8,0x00,0x00,}},
- {0x72F3,2,{0xE1,0xFC,0x00,0x00,}},
- {0x72F4,2,{0xE1,0xF9,0x00,0x00,}},
- {0x72F5,2,{0xAA,0x4B,0x00,0x00,}},
- {0x72F6,2,{0xAA,0x4C,0x00,0x00,}},
- {0x72F7,2,{0xE1,0xFA,0x00,0x00,}},
- {0x72F8,2,{0xC0,0xEA,0x00,0x00,}},
- {0x72F9,2,{0xAA,0x4D,0x00,0x00,}},
- {0x72FA,2,{0xE1,0xFE,0x00,0x00,}},
- {0x72FB,2,{0xE2,0xA1,0x00,0x00,}},
- {0x72FC,2,{0xC0,0xC7,0x00,0x00,}},
- {0x72FD,2,{0xAA,0x4E,0x00,0x00,}},
- {0x72FE,2,{0xAA,0x4F,0x00,0x00,}},
- {0x72FF,2,{0xAA,0x50,0x00,0x00,}},
- {0x7300,2,{0xAA,0x51,0x00,0x00,}},
- {0x7301,2,{0xE1,0xFB,0x00,0x00,}},
- {0x7302,2,{0xAA,0x52,0x00,0x00,}},
- {0x7303,2,{0xE1,0xFD,0x00,0x00,}},
- {0x7304,2,{0xAA,0x53,0x00,0x00,}},
- {0x7305,2,{0xAA,0x54,0x00,0x00,}},
- {0x7306,2,{0xAA,0x55,0x00,0x00,}},
- {0x7307,2,{0xAA,0x56,0x00,0x00,}},
- {0x7308,2,{0xAA,0x57,0x00,0x00,}},
- {0x7309,2,{0xAA,0x58,0x00,0x00,}},
- {0x730A,2,{0xE2,0xA5,0x00,0x00,}},
- {0x730B,2,{0xAA,0x59,0x00,0x00,}},
- {0x730C,2,{0xAA,0x5A,0x00,0x00,}},
- {0x730D,2,{0xAA,0x5B,0x00,0x00,}},
- {0x730E,2,{0xC1,0xD4,0x00,0x00,}},
- {0x730F,2,{0xAA,0x5C,0x00,0x00,}},
- {0x7310,2,{0xAA,0x5D,0x00,0x00,}},
- {0x7311,2,{0xAA,0x5E,0x00,0x00,}},
- {0x7312,2,{0xAA,0x5F,0x00,0x00,}},
- {0x7313,2,{0xE2,0xA3,0x00,0x00,}},
- {0x7314,2,{0xAA,0x60,0x00,0x00,}},
- {0x7315,2,{0xE2,0xA8,0x00,0x00,}},
- {0x7316,2,{0xB2,0xFE,0x00,0x00,}},
- {0x7317,2,{0xE2,0xA2,0x00,0x00,}},
- {0x7318,2,{0xAA,0x61,0x00,0x00,}},
- {0x7319,2,{0xAA,0x62,0x00,0x00,}},
- {0x731A,2,{0xAA,0x63,0x00,0x00,}},
- {0x731B,2,{0xC3,0xCD,0x00,0x00,}},
- {0x731C,2,{0xB2,0xC2,0x00,0x00,}},
- {0x731D,2,{0xE2,0xA7,0x00,0x00,}},
- {0x731E,2,{0xE2,0xA6,0x00,0x00,}},
- {0x731F,2,{0xAA,0x64,0x00,0x00,}},
- {0x7320,2,{0xAA,0x65,0x00,0x00,}},
- {0x7321,2,{0xE2,0xA4,0x00,0x00,}},
- {0x7322,2,{0xE2,0xA9,0x00,0x00,}},
- {0x7323,2,{0xAA,0x66,0x00,0x00,}},
- {0x7324,2,{0xAA,0x67,0x00,0x00,}},
- {0x7325,2,{0xE2,0xAB,0x00,0x00,}},
- {0x7326,2,{0xAA,0x68,0x00,0x00,}},
- {0x7327,2,{0xAA,0x69,0x00,0x00,}},
- {0x7328,2,{0xAA,0x6A,0x00,0x00,}},
- {0x7329,2,{0xD0,0xC9,0x00,0x00,}},
- {0x732A,2,{0xD6,0xED,0x00,0x00,}},
- {0x732B,2,{0xC3,0xA8,0x00,0x00,}},
- {0x732C,2,{0xE2,0xAC,0x00,0x00,}},
- {0x732D,2,{0xAA,0x6B,0x00,0x00,}},
- {0x732E,2,{0xCF,0xD7,0x00,0x00,}},
- {0x732F,2,{0xAA,0x6C,0x00,0x00,}},
- {0x7330,2,{0xAA,0x6D,0x00,0x00,}},
- {0x7331,2,{0xE2,0xAE,0x00,0x00,}},
- {0x7332,2,{0xAA,0x6E,0x00,0x00,}},
- {0x7333,2,{0xAA,0x6F,0x00,0x00,}},
- {0x7334,2,{0xBA,0xEF,0x00,0x00,}},
- {0x7335,2,{0xAA,0x70,0x00,0x00,}},
- {0x7336,2,{0xAA,0x71,0x00,0x00,}},
- {0x7337,2,{0xE9,0xE0,0x00,0x00,}},
- {0x7338,2,{0xE2,0xAD,0x00,0x00,}},
- {0x7339,2,{0xE2,0xAA,0x00,0x00,}},
- {0x733A,2,{0xAA,0x72,0x00,0x00,}},
- {0x733B,2,{0xAA,0x73,0x00,0x00,}},
- {0x733C,2,{0xAA,0x74,0x00,0x00,}},
- {0x733D,2,{0xAA,0x75,0x00,0x00,}},
- {0x733E,2,{0xBB,0xAB,0x00,0x00,}},
- {0x733F,2,{0xD4,0xB3,0x00,0x00,}},
- {0x7340,2,{0xAA,0x76,0x00,0x00,}},
- {0x7341,2,{0xAA,0x77,0x00,0x00,}},
- {0x7342,2,{0xAA,0x78,0x00,0x00,}},
- {0x7343,2,{0xAA,0x79,0x00,0x00,}},
- {0x7344,2,{0xAA,0x7A,0x00,0x00,}},
- {0x7345,2,{0xAA,0x7B,0x00,0x00,}},
- {0x7346,2,{0xAA,0x7C,0x00,0x00,}},
- {0x7347,2,{0xAA,0x7D,0x00,0x00,}},
- {0x7348,2,{0xAA,0x7E,0x00,0x00,}},
- {0x7349,2,{0xAA,0x80,0x00,0x00,}},
- {0x734A,2,{0xAA,0x81,0x00,0x00,}},
- {0x734B,2,{0xAA,0x82,0x00,0x00,}},
- {0x734C,2,{0xAA,0x83,0x00,0x00,}},
- {0x734D,2,{0xE2,0xB0,0x00,0x00,}},
- {0x734E,2,{0xAA,0x84,0x00,0x00,}},
- {0x734F,2,{0xAA,0x85,0x00,0x00,}},
- {0x7350,2,{0xE2,0xAF,0x00,0x00,}},
- {0x7351,2,{0xAA,0x86,0x00,0x00,}},
- {0x7352,2,{0xE9,0xE1,0x00,0x00,}},
- {0x7353,2,{0xAA,0x87,0x00,0x00,}},
- {0x7354,2,{0xAA,0x88,0x00,0x00,}},
- {0x7355,2,{0xAA,0x89,0x00,0x00,}},
- {0x7356,2,{0xAA,0x8A,0x00,0x00,}},
- {0x7357,2,{0xE2,0xB1,0x00,0x00,}},
- {0x7358,2,{0xAA,0x8B,0x00,0x00,}},
- {0x7359,2,{0xAA,0x8C,0x00,0x00,}},
- {0x735A,2,{0xAA,0x8D,0x00,0x00,}},
- {0x735B,2,{0xAA,0x8E,0x00,0x00,}},
- {0x735C,2,{0xAA,0x8F,0x00,0x00,}},
- {0x735D,2,{0xAA,0x90,0x00,0x00,}},
- {0x735E,2,{0xAA,0x91,0x00,0x00,}},
- {0x735F,2,{0xAA,0x92,0x00,0x00,}},
- {0x7360,2,{0xE2,0xB2,0x00,0x00,}},
- {0x7361,2,{0xAA,0x93,0x00,0x00,}},
- {0x7362,2,{0xAA,0x94,0x00,0x00,}},
- {0x7363,2,{0xAA,0x95,0x00,0x00,}},
- {0x7364,2,{0xAA,0x96,0x00,0x00,}},
- {0x7365,2,{0xAA,0x97,0x00,0x00,}},
- {0x7366,2,{0xAA,0x98,0x00,0x00,}},
- {0x7367,2,{0xAA,0x99,0x00,0x00,}},
- {0x7368,2,{0xAA,0x9A,0x00,0x00,}},
- {0x7369,2,{0xAA,0x9B,0x00,0x00,}},
- {0x736A,2,{0xAA,0x9C,0x00,0x00,}},
- {0x736B,2,{0xAA,0x9D,0x00,0x00,}},
- {0x736C,2,{0xE2,0xB3,0x00,0x00,}},
- {0x736D,2,{0xCC,0xA1,0x00,0x00,}},
- {0x736E,2,{0xAA,0x9E,0x00,0x00,}},
- {0x736F,2,{0xE2,0xB4,0x00,0x00,}},
- {0x7370,2,{0xAA,0x9F,0x00,0x00,}},
- {0x7371,2,{0xAA,0xA0,0x00,0x00,}},
- {0x7372,2,{0xAB,0x40,0x00,0x00,}},
- {0x7373,2,{0xAB,0x41,0x00,0x00,}},
- {0x7374,2,{0xAB,0x42,0x00,0x00,}},
- {0x7375,2,{0xAB,0x43,0x00,0x00,}},
- {0x7376,2,{0xAB,0x44,0x00,0x00,}},
- {0x7377,2,{0xAB,0x45,0x00,0x00,}},
- {0x7378,2,{0xAB,0x46,0x00,0x00,}},
- {0x7379,2,{0xAB,0x47,0x00,0x00,}},
- {0x737A,2,{0xAB,0x48,0x00,0x00,}},
- {0x737B,2,{0xAB,0x49,0x00,0x00,}},
- {0x737C,2,{0xAB,0x4A,0x00,0x00,}},
- {0x737D,2,{0xAB,0x4B,0x00,0x00,}},
- {0x737E,2,{0xE2,0xB5,0x00,0x00,}},
- {0x737F,2,{0xAB,0x4C,0x00,0x00,}},
- {0x7380,2,{0xAB,0x4D,0x00,0x00,}},
- {0x7381,2,{0xAB,0x4E,0x00,0x00,}},
- {0x7382,2,{0xAB,0x4F,0x00,0x00,}},
- {0x7383,2,{0xAB,0x50,0x00,0x00,}},
- {0x7384,2,{0xD0,0xFE,0x00,0x00,}},
- {0x7385,2,{0xAB,0x51,0x00,0x00,}},
- {0x7386,2,{0xAB,0x52,0x00,0x00,}},
- {0x7387,2,{0xC2,0xCA,0x00,0x00,}},
- {0x7388,2,{0xAB,0x53,0x00,0x00,}},
- {0x7389,2,{0xD3,0xF1,0x00,0x00,}},
- {0x738A,2,{0xAB,0x54,0x00,0x00,}},
- {0x738B,2,{0xCD,0xF5,0x00,0x00,}},
- {0x738C,2,{0xAB,0x55,0x00,0x00,}},
- {0x738D,2,{0xAB,0x56,0x00,0x00,}},
- {0x738E,2,{0xE7,0xE0,0x00,0x00,}},
- {0x738F,2,{0xAB,0x57,0x00,0x00,}},
- {0x7390,2,{0xAB,0x58,0x00,0x00,}},
- {0x7391,2,{0xE7,0xE1,0x00,0x00,}},
- {0x7392,2,{0xAB,0x59,0x00,0x00,}},
- {0x7393,2,{0xAB,0x5A,0x00,0x00,}},
- {0x7394,2,{0xAB,0x5B,0x00,0x00,}},
- {0x7395,2,{0xAB,0x5C,0x00,0x00,}},
- {0x7396,2,{0xBE,0xC1,0x00,0x00,}},
- {0x7397,2,{0xAB,0x5D,0x00,0x00,}},
- {0x7398,2,{0xAB,0x5E,0x00,0x00,}},
- {0x7399,2,{0xAB,0x5F,0x00,0x00,}},
- {0x739A,2,{0xAB,0x60,0x00,0x00,}},
- {0x739B,2,{0xC2,0xEA,0x00,0x00,}},
- {0x739C,2,{0xAB,0x61,0x00,0x00,}},
- {0x739D,2,{0xAB,0x62,0x00,0x00,}},
- {0x739E,2,{0xAB,0x63,0x00,0x00,}},
- {0x739F,2,{0xE7,0xE4,0x00,0x00,}},
- {0x73A0,2,{0xAB,0x64,0x00,0x00,}},
- {0x73A1,2,{0xAB,0x65,0x00,0x00,}},
- {0x73A2,2,{0xE7,0xE3,0x00,0x00,}},
- {0x73A3,2,{0xAB,0x66,0x00,0x00,}},
- {0x73A4,2,{0xAB,0x67,0x00,0x00,}},
- {0x73A5,2,{0xAB,0x68,0x00,0x00,}},
- {0x73A6,2,{0xAB,0x69,0x00,0x00,}},
- {0x73A7,2,{0xAB,0x6A,0x00,0x00,}},
- {0x73A8,2,{0xAB,0x6B,0x00,0x00,}},
- {0x73A9,2,{0xCD,0xE6,0x00,0x00,}},
- {0x73AA,2,{0xAB,0x6C,0x00,0x00,}},
- {0x73AB,2,{0xC3,0xB5,0x00,0x00,}},
- {0x73AC,2,{0xAB,0x6D,0x00,0x00,}},
- {0x73AD,2,{0xAB,0x6E,0x00,0x00,}},
- {0x73AE,2,{0xE7,0xE2,0x00,0x00,}},
- {0x73AF,2,{0xBB,0xB7,0x00,0x00,}},
- {0x73B0,2,{0xCF,0xD6,0x00,0x00,}},
- {0x73B1,2,{0xAB,0x6F,0x00,0x00,}},
- {0x73B2,2,{0xC1,0xE1,0x00,0x00,}},
- {0x73B3,2,{0xE7,0xE9,0x00,0x00,}},
- {0x73B4,2,{0xAB,0x70,0x00,0x00,}},
- {0x73B5,2,{0xAB,0x71,0x00,0x00,}},
- {0x73B6,2,{0xAB,0x72,0x00,0x00,}},
- {0x73B7,2,{0xE7,0xE8,0x00,0x00,}},
- {0x73B8,2,{0xAB,0x73,0x00,0x00,}},
- {0x73B9,2,{0xAB,0x74,0x00,0x00,}},
- {0x73BA,2,{0xE7,0xF4,0x00,0x00,}},
- {0x73BB,2,{0xB2,0xA3,0x00,0x00,}},
- {0x73BC,2,{0xAB,0x75,0x00,0x00,}},
- {0x73BD,2,{0xAB,0x76,0x00,0x00,}},
- {0x73BE,2,{0xAB,0x77,0x00,0x00,}},
- {0x73BF,2,{0xAB,0x78,0x00,0x00,}},
- {0x73C0,2,{0xE7,0xEA,0x00,0x00,}},
- {0x73C1,2,{0xAB,0x79,0x00,0x00,}},
- {0x73C2,2,{0xE7,0xE6,0x00,0x00,}},
- {0x73C3,2,{0xAB,0x7A,0x00,0x00,}},
- {0x73C4,2,{0xAB,0x7B,0x00,0x00,}},
- {0x73C5,2,{0xAB,0x7C,0x00,0x00,}},
- {0x73C6,2,{0xAB,0x7D,0x00,0x00,}},
- {0x73C7,2,{0xAB,0x7E,0x00,0x00,}},
- {0x73C8,2,{0xE7,0xEC,0x00,0x00,}},
- {0x73C9,2,{0xE7,0xEB,0x00,0x00,}},
- {0x73CA,2,{0xC9,0xBA,0x00,0x00,}},
- {0x73CB,2,{0xAB,0x80,0x00,0x00,}},
- {0x73CC,2,{0xAB,0x81,0x00,0x00,}},
- {0x73CD,2,{0xD5,0xE4,0x00,0x00,}},
- {0x73CE,2,{0xAB,0x82,0x00,0x00,}},
- {0x73CF,2,{0xE7,0xE5,0x00,0x00,}},
- {0x73D0,2,{0xB7,0xA9,0x00,0x00,}},
- {0x73D1,2,{0xE7,0xE7,0x00,0x00,}},
- {0x73D2,2,{0xAB,0x83,0x00,0x00,}},
- {0x73D3,2,{0xAB,0x84,0x00,0x00,}},
- {0x73D4,2,{0xAB,0x85,0x00,0x00,}},
- {0x73D5,2,{0xAB,0x86,0x00,0x00,}},
- {0x73D6,2,{0xAB,0x87,0x00,0x00,}},
- {0x73D7,2,{0xAB,0x88,0x00,0x00,}},
- {0x73D8,2,{0xAB,0x89,0x00,0x00,}},
- {0x73D9,2,{0xE7,0xEE,0x00,0x00,}},
- {0x73DA,2,{0xAB,0x8A,0x00,0x00,}},
- {0x73DB,2,{0xAB,0x8B,0x00,0x00,}},
- {0x73DC,2,{0xAB,0x8C,0x00,0x00,}},
- {0x73DD,2,{0xAB,0x8D,0x00,0x00,}},
- {0x73DE,2,{0xE7,0xF3,0x00,0x00,}},
- {0x73DF,2,{0xAB,0x8E,0x00,0x00,}},
- {0x73E0,2,{0xD6,0xE9,0x00,0x00,}},
- {0x73E1,2,{0xAB,0x8F,0x00,0x00,}},
- {0x73E2,2,{0xAB,0x90,0x00,0x00,}},
- {0x73E3,2,{0xAB,0x91,0x00,0x00,}},
- {0x73E4,2,{0xAB,0x92,0x00,0x00,}},
- {0x73E5,2,{0xE7,0xED,0x00,0x00,}},
- {0x73E6,2,{0xAB,0x93,0x00,0x00,}},
- {0x73E7,2,{0xE7,0xF2,0x00,0x00,}},
- {0x73E8,2,{0xAB,0x94,0x00,0x00,}},
- {0x73E9,2,{0xE7,0xF1,0x00,0x00,}},
- {0x73EA,2,{0xAB,0x95,0x00,0x00,}},
- {0x73EB,2,{0xAB,0x96,0x00,0x00,}},
- {0x73EC,2,{0xAB,0x97,0x00,0x00,}},
- {0x73ED,2,{0xB0,0xE0,0x00,0x00,}},
- {0x73EE,2,{0xAB,0x98,0x00,0x00,}},
- {0x73EF,2,{0xAB,0x99,0x00,0x00,}},
- {0x73F0,2,{0xAB,0x9A,0x00,0x00,}},
- {0x73F1,2,{0xAB,0x9B,0x00,0x00,}},
- {0x73F2,2,{0xE7,0xF5,0x00,0x00,}},
- {0x73F3,2,{0xAB,0x9C,0x00,0x00,}},
- {0x73F4,2,{0xAB,0x9D,0x00,0x00,}},
- {0x73F5,2,{0xAB,0x9E,0x00,0x00,}},
- {0x73F6,2,{0xAB,0x9F,0x00,0x00,}},
- {0x73F7,2,{0xAB,0xA0,0x00,0x00,}},
- {0x73F8,2,{0xAC,0x40,0x00,0x00,}},
- {0x73F9,2,{0xAC,0x41,0x00,0x00,}},
- {0x73FA,2,{0xAC,0x42,0x00,0x00,}},
- {0x73FB,2,{0xAC,0x43,0x00,0x00,}},
- {0x73FC,2,{0xAC,0x44,0x00,0x00,}},
- {0x73FD,2,{0xAC,0x45,0x00,0x00,}},
- {0x73FE,2,{0xAC,0x46,0x00,0x00,}},
- {0x73FF,2,{0xAC,0x47,0x00,0x00,}},
- {0x7400,2,{0xAC,0x48,0x00,0x00,}},
- {0x7401,2,{0xAC,0x49,0x00,0x00,}},
- {0x7402,2,{0xAC,0x4A,0x00,0x00,}},
- {0x7403,2,{0xC7,0xF2,0x00,0x00,}},
- {0x7404,2,{0xAC,0x4B,0x00,0x00,}},
- {0x7405,2,{0xC0,0xC5,0x00,0x00,}},
- {0x7406,2,{0xC0,0xED,0x00,0x00,}},
- {0x7407,2,{0xAC,0x4C,0x00,0x00,}},
- {0x7408,2,{0xAC,0x4D,0x00,0x00,}},
- {0x7409,2,{0xC1,0xF0,0x00,0x00,}},
- {0x740A,2,{0xE7,0xF0,0x00,0x00,}},
- {0x740B,2,{0xAC,0x4E,0x00,0x00,}},
- {0x740C,2,{0xAC,0x4F,0x00,0x00,}},
- {0x740D,2,{0xAC,0x50,0x00,0x00,}},
- {0x740E,2,{0xAC,0x51,0x00,0x00,}},
- {0x740F,2,{0xE7,0xF6,0x00,0x00,}},
- {0x7410,2,{0xCB,0xF6,0x00,0x00,}},
- {0x7411,2,{0xAC,0x52,0x00,0x00,}},
- {0x7412,2,{0xAC,0x53,0x00,0x00,}},
- {0x7413,2,{0xAC,0x54,0x00,0x00,}},
- {0x7414,2,{0xAC,0x55,0x00,0x00,}},
- {0x7415,2,{0xAC,0x56,0x00,0x00,}},
- {0x7416,2,{0xAC,0x57,0x00,0x00,}},
- {0x7417,2,{0xAC,0x58,0x00,0x00,}},
- {0x7418,2,{0xAC,0x59,0x00,0x00,}},
- {0x7419,2,{0xAC,0x5A,0x00,0x00,}},
- {0x741A,2,{0xE8,0xA2,0x00,0x00,}},
- {0x741B,2,{0xE8,0xA1,0x00,0x00,}},
- {0x741C,2,{0xAC,0x5B,0x00,0x00,}},
- {0x741D,2,{0xAC,0x5C,0x00,0x00,}},
- {0x741E,2,{0xAC,0x5D,0x00,0x00,}},
- {0x741F,2,{0xAC,0x5E,0x00,0x00,}},
- {0x7420,2,{0xAC,0x5F,0x00,0x00,}},
- {0x7421,2,{0xAC,0x60,0x00,0x00,}},
- {0x7422,2,{0xD7,0xC1,0x00,0x00,}},
- {0x7423,2,{0xAC,0x61,0x00,0x00,}},
- {0x7424,2,{0xAC,0x62,0x00,0x00,}},
- {0x7425,2,{0xE7,0xFA,0x00,0x00,}},
- {0x7426,2,{0xE7,0xF9,0x00,0x00,}},
- {0x7427,2,{0xAC,0x63,0x00,0x00,}},
- {0x7428,2,{0xE7,0xFB,0x00,0x00,}},
- {0x7429,2,{0xAC,0x64,0x00,0x00,}},
- {0x742A,2,{0xE7,0xF7,0x00,0x00,}},
- {0x742B,2,{0xAC,0x65,0x00,0x00,}},
- {0x742C,2,{0xE7,0xFE,0x00,0x00,}},
- {0x742D,2,{0xAC,0x66,0x00,0x00,}},
- {0x742E,2,{0xE7,0xFD,0x00,0x00,}},
- {0x742F,2,{0xAC,0x67,0x00,0x00,}},
- {0x7430,2,{0xE7,0xFC,0x00,0x00,}},
- {0x7431,2,{0xAC,0x68,0x00,0x00,}},
- {0x7432,2,{0xAC,0x69,0x00,0x00,}},
- {0x7433,2,{0xC1,0xD5,0x00,0x00,}},
- {0x7434,2,{0xC7,0xD9,0x00,0x00,}},
- {0x7435,2,{0xC5,0xFD,0x00,0x00,}},
- {0x7436,2,{0xC5,0xC3,0x00,0x00,}},
- {0x7437,2,{0xAC,0x6A,0x00,0x00,}},
- {0x7438,2,{0xAC,0x6B,0x00,0x00,}},
- {0x7439,2,{0xAC,0x6C,0x00,0x00,}},
- {0x743A,2,{0xAC,0x6D,0x00,0x00,}},
- {0x743B,2,{0xAC,0x6E,0x00,0x00,}},
- {0x743C,2,{0xC7,0xED,0x00,0x00,}},
- {0x743D,2,{0xAC,0x6F,0x00,0x00,}},
- {0x743E,2,{0xAC,0x70,0x00,0x00,}},
- {0x743F,2,{0xAC,0x71,0x00,0x00,}},
- {0x7440,2,{0xAC,0x72,0x00,0x00,}},
- {0x7441,2,{0xE8,0xA3,0x00,0x00,}},
- {0x7442,2,{0xAC,0x73,0x00,0x00,}},
- {0x7443,2,{0xAC,0x74,0x00,0x00,}},
- {0x7444,2,{0xAC,0x75,0x00,0x00,}},
- {0x7445,2,{0xAC,0x76,0x00,0x00,}},
- {0x7446,2,{0xAC,0x77,0x00,0x00,}},
- {0x7447,2,{0xAC,0x78,0x00,0x00,}},
- {0x7448,2,{0xAC,0x79,0x00,0x00,}},
- {0x7449,2,{0xAC,0x7A,0x00,0x00,}},
- {0x744A,2,{0xAC,0x7B,0x00,0x00,}},
- {0x744B,2,{0xAC,0x7C,0x00,0x00,}},
- {0x744C,2,{0xAC,0x7D,0x00,0x00,}},
- {0x744D,2,{0xAC,0x7E,0x00,0x00,}},
- {0x744E,2,{0xAC,0x80,0x00,0x00,}},
- {0x744F,2,{0xAC,0x81,0x00,0x00,}},
- {0x7450,2,{0xAC,0x82,0x00,0x00,}},
- {0x7451,2,{0xAC,0x83,0x00,0x00,}},
- {0x7452,2,{0xAC,0x84,0x00,0x00,}},
- {0x7453,2,{0xAC,0x85,0x00,0x00,}},
- {0x7454,2,{0xAC,0x86,0x00,0x00,}},
- {0x7455,2,{0xE8,0xA6,0x00,0x00,}},
- {0x7456,2,{0xAC,0x87,0x00,0x00,}},
- {0x7457,2,{0xE8,0xA5,0x00,0x00,}},
- {0x7458,2,{0xAC,0x88,0x00,0x00,}},
- {0x7459,2,{0xE8,0xA7,0x00,0x00,}},
- {0x745A,2,{0xBA,0xF7,0x00,0x00,}},
- {0x745B,2,{0xE7,0xF8,0x00,0x00,}},
- {0x745C,2,{0xE8,0xA4,0x00,0x00,}},
- {0x745D,2,{0xAC,0x89,0x00,0x00,}},
- {0x745E,2,{0xC8,0xF0,0x00,0x00,}},
- {0x745F,2,{0xC9,0xAA,0x00,0x00,}},
- {0x7460,2,{0xAC,0x8A,0x00,0x00,}},
- {0x7461,2,{0xAC,0x8B,0x00,0x00,}},
- {0x7462,2,{0xAC,0x8C,0x00,0x00,}},
- {0x7463,2,{0xAC,0x8D,0x00,0x00,}},
- {0x7464,2,{0xAC,0x8E,0x00,0x00,}},
- {0x7465,2,{0xAC,0x8F,0x00,0x00,}},
- {0x7466,2,{0xAC,0x90,0x00,0x00,}},
- {0x7467,2,{0xAC,0x91,0x00,0x00,}},
- {0x7468,2,{0xAC,0x92,0x00,0x00,}},
- {0x7469,2,{0xAC,0x93,0x00,0x00,}},
- {0x746A,2,{0xAC,0x94,0x00,0x00,}},
- {0x746B,2,{0xAC,0x95,0x00,0x00,}},
- {0x746C,2,{0xAC,0x96,0x00,0x00,}},
- {0x746D,2,{0xE8,0xA9,0x00,0x00,}},
- {0x746E,2,{0xAC,0x97,0x00,0x00,}},
- {0x746F,2,{0xAC,0x98,0x00,0x00,}},
- {0x7470,2,{0xB9,0xE5,0x00,0x00,}},
- {0x7471,2,{0xAC,0x99,0x00,0x00,}},
- {0x7472,2,{0xAC,0x9A,0x00,0x00,}},
- {0x7473,2,{0xAC,0x9B,0x00,0x00,}},
- {0x7474,2,{0xAC,0x9C,0x00,0x00,}},
- {0x7475,2,{0xAC,0x9D,0x00,0x00,}},
- {0x7476,2,{0xD1,0xFE,0x00,0x00,}},
- {0x7477,2,{0xE8,0xA8,0x00,0x00,}},
- {0x7478,2,{0xAC,0x9E,0x00,0x00,}},
- {0x7479,2,{0xAC,0x9F,0x00,0x00,}},
- {0x747A,2,{0xAC,0xA0,0x00,0x00,}},
- {0x747B,2,{0xAD,0x40,0x00,0x00,}},
- {0x747C,2,{0xAD,0x41,0x00,0x00,}},
- {0x747D,2,{0xAD,0x42,0x00,0x00,}},
- {0x747E,2,{0xE8,0xAA,0x00,0x00,}},
- {0x747F,2,{0xAD,0x43,0x00,0x00,}},
- {0x7480,2,{0xE8,0xAD,0x00,0x00,}},
- {0x7481,2,{0xE8,0xAE,0x00,0x00,}},
- {0x7482,2,{0xAD,0x44,0x00,0x00,}},
- {0x7483,2,{0xC1,0xA7,0x00,0x00,}},
- {0x7484,2,{0xAD,0x45,0x00,0x00,}},
- {0x7485,2,{0xAD,0x46,0x00,0x00,}},
- {0x7486,2,{0xAD,0x47,0x00,0x00,}},
- {0x7487,2,{0xE8,0xAF,0x00,0x00,}},
- {0x7488,2,{0xAD,0x48,0x00,0x00,}},
- {0x7489,2,{0xAD,0x49,0x00,0x00,}},
- {0x748A,2,{0xAD,0x4A,0x00,0x00,}},
- {0x748B,2,{0xE8,0xB0,0x00,0x00,}},
- {0x748C,2,{0xAD,0x4B,0x00,0x00,}},
- {0x748D,2,{0xAD,0x4C,0x00,0x00,}},
- {0x748E,2,{0xE8,0xAC,0x00,0x00,}},
- {0x748F,2,{0xAD,0x4D,0x00,0x00,}},
- {0x7490,2,{0xE8,0xB4,0x00,0x00,}},
- {0x7491,2,{0xAD,0x4E,0x00,0x00,}},
- {0x7492,2,{0xAD,0x4F,0x00,0x00,}},
- {0x7493,2,{0xAD,0x50,0x00,0x00,}},
- {0x7494,2,{0xAD,0x51,0x00,0x00,}},
- {0x7495,2,{0xAD,0x52,0x00,0x00,}},
- {0x7496,2,{0xAD,0x53,0x00,0x00,}},
- {0x7497,2,{0xAD,0x54,0x00,0x00,}},
- {0x7498,2,{0xAD,0x55,0x00,0x00,}},
- {0x7499,2,{0xAD,0x56,0x00,0x00,}},
- {0x749A,2,{0xAD,0x57,0x00,0x00,}},
- {0x749B,2,{0xAD,0x58,0x00,0x00,}},
- {0x749C,2,{0xE8,0xAB,0x00,0x00,}},
- {0x749D,2,{0xAD,0x59,0x00,0x00,}},
- {0x749E,2,{0xE8,0xB1,0x00,0x00,}},
- {0x749F,2,{0xAD,0x5A,0x00,0x00,}},
- {0x74A0,2,{0xAD,0x5B,0x00,0x00,}},
- {0x74A1,2,{0xAD,0x5C,0x00,0x00,}},
- {0x74A2,2,{0xAD,0x5D,0x00,0x00,}},
- {0x74A3,2,{0xAD,0x5E,0x00,0x00,}},
- {0x74A4,2,{0xAD,0x5F,0x00,0x00,}},
- {0x74A5,2,{0xAD,0x60,0x00,0x00,}},
- {0x74A6,2,{0xAD,0x61,0x00,0x00,}},
- {0x74A7,2,{0xE8,0xB5,0x00,0x00,}},
- {0x74A8,2,{0xE8,0xB2,0x00,0x00,}},
- {0x74A9,2,{0xE8,0xB3,0x00,0x00,}},
- {0x74AA,2,{0xAD,0x62,0x00,0x00,}},
- {0x74AB,2,{0xAD,0x63,0x00,0x00,}},
- {0x74AC,2,{0xAD,0x64,0x00,0x00,}},
- {0x74AD,2,{0xAD,0x65,0x00,0x00,}},
- {0x74AE,2,{0xAD,0x66,0x00,0x00,}},
- {0x74AF,2,{0xAD,0x67,0x00,0x00,}},
- {0x74B0,2,{0xAD,0x68,0x00,0x00,}},
- {0x74B1,2,{0xAD,0x69,0x00,0x00,}},
- {0x74B2,2,{0xAD,0x6A,0x00,0x00,}},
- {0x74B3,2,{0xAD,0x6B,0x00,0x00,}},
- {0x74B4,2,{0xAD,0x6C,0x00,0x00,}},
- {0x74B5,2,{0xAD,0x6D,0x00,0x00,}},
- {0x74B6,2,{0xAD,0x6E,0x00,0x00,}},
- {0x74B7,2,{0xAD,0x6F,0x00,0x00,}},
- {0x74B8,2,{0xAD,0x70,0x00,0x00,}},
- {0x74B9,2,{0xAD,0x71,0x00,0x00,}},
- {0x74BA,2,{0xE8,0xB7,0x00,0x00,}},
- {0x74BB,2,{0xAD,0x72,0x00,0x00,}},
- {0x74BC,2,{0xAD,0x73,0x00,0x00,}},
- {0x74BD,2,{0xAD,0x74,0x00,0x00,}},
- {0x74BE,2,{0xAD,0x75,0x00,0x00,}},
- {0x74BF,2,{0xAD,0x76,0x00,0x00,}},
- {0x74C0,2,{0xAD,0x77,0x00,0x00,}},
- {0x74C1,2,{0xAD,0x78,0x00,0x00,}},
- {0x74C2,2,{0xAD,0x79,0x00,0x00,}},
- {0x74C3,2,{0xAD,0x7A,0x00,0x00,}},
- {0x74C4,2,{0xAD,0x7B,0x00,0x00,}},
- {0x74C5,2,{0xAD,0x7C,0x00,0x00,}},
- {0x74C6,2,{0xAD,0x7D,0x00,0x00,}},
- {0x74C7,2,{0xAD,0x7E,0x00,0x00,}},
- {0x74C8,2,{0xAD,0x80,0x00,0x00,}},
- {0x74C9,2,{0xAD,0x81,0x00,0x00,}},
- {0x74CA,2,{0xAD,0x82,0x00,0x00,}},
- {0x74CB,2,{0xAD,0x83,0x00,0x00,}},
- {0x74CC,2,{0xAD,0x84,0x00,0x00,}},
- {0x74CD,2,{0xAD,0x85,0x00,0x00,}},
- {0x74CE,2,{0xAD,0x86,0x00,0x00,}},
- {0x74CF,2,{0xAD,0x87,0x00,0x00,}},
- {0x74D0,2,{0xAD,0x88,0x00,0x00,}},
- {0x74D1,2,{0xAD,0x89,0x00,0x00,}},
- {0x74D2,2,{0xE8,0xB6,0x00,0x00,}},
- {0x74D3,2,{0xAD,0x8A,0x00,0x00,}},
- {0x74D4,2,{0xAD,0x8B,0x00,0x00,}},
- {0x74D5,2,{0xAD,0x8C,0x00,0x00,}},
- {0x74D6,2,{0xAD,0x8D,0x00,0x00,}},
- {0x74D7,2,{0xAD,0x8E,0x00,0x00,}},
- {0x74D8,2,{0xAD,0x8F,0x00,0x00,}},
- {0x74D9,2,{0xAD,0x90,0x00,0x00,}},
- {0x74DA,2,{0xAD,0x91,0x00,0x00,}},
- {0x74DB,2,{0xAD,0x92,0x00,0x00,}},
- {0x74DC,2,{0xB9,0xCF,0x00,0x00,}},
- {0x74DD,2,{0xAD,0x93,0x00,0x00,}},
- {0x74DE,2,{0xF0,0xAC,0x00,0x00,}},
- {0x74DF,2,{0xAD,0x94,0x00,0x00,}},
- {0x74E0,2,{0xF0,0xAD,0x00,0x00,}},
- {0x74E1,2,{0xAD,0x95,0x00,0x00,}},
- {0x74E2,2,{0xC6,0xB0,0x00,0x00,}},
- {0x74E3,2,{0xB0,0xEA,0x00,0x00,}},
- {0x74E4,2,{0xC8,0xBF,0x00,0x00,}},
- {0x74E5,2,{0xAD,0x96,0x00,0x00,}},
- {0x74E6,2,{0xCD,0xDF,0x00,0x00,}},
- {0x74E7,2,{0xAD,0x97,0x00,0x00,}},
- {0x74E8,2,{0xAD,0x98,0x00,0x00,}},
- {0x74E9,2,{0xAD,0x99,0x00,0x00,}},
- {0x74EA,2,{0xAD,0x9A,0x00,0x00,}},
- {0x74EB,2,{0xAD,0x9B,0x00,0x00,}},
- {0x74EC,2,{0xAD,0x9C,0x00,0x00,}},
- {0x74ED,2,{0xAD,0x9D,0x00,0x00,}},
- {0x74EE,2,{0xCE,0xCD,0x00,0x00,}},
- {0x74EF,2,{0xEA,0xB1,0x00,0x00,}},
- {0x74F0,2,{0xAD,0x9E,0x00,0x00,}},
- {0x74F1,2,{0xAD,0x9F,0x00,0x00,}},
- {0x74F2,2,{0xAD,0xA0,0x00,0x00,}},
- {0x74F3,2,{0xAE,0x40,0x00,0x00,}},
- {0x74F4,2,{0xEA,0xB2,0x00,0x00,}},
- {0x74F5,2,{0xAE,0x41,0x00,0x00,}},
- {0x74F6,2,{0xC6,0xBF,0x00,0x00,}},
- {0x74F7,2,{0xB4,0xC9,0x00,0x00,}},
- {0x74F8,2,{0xAE,0x42,0x00,0x00,}},
- {0x74F9,2,{0xAE,0x43,0x00,0x00,}},
- {0x74FA,2,{0xAE,0x44,0x00,0x00,}},
- {0x74FB,2,{0xAE,0x45,0x00,0x00,}},
- {0x74FC,2,{0xAE,0x46,0x00,0x00,}},
- {0x74FD,2,{0xAE,0x47,0x00,0x00,}},
- {0x74FE,2,{0xAE,0x48,0x00,0x00,}},
- {0x74FF,2,{0xEA,0xB3,0x00,0x00,}},
- {0x7500,2,{0xAE,0x49,0x00,0x00,}},
- {0x7501,2,{0xAE,0x4A,0x00,0x00,}},
- {0x7502,2,{0xAE,0x4B,0x00,0x00,}},
- {0x7503,2,{0xAE,0x4C,0x00,0x00,}},
- {0x7504,2,{0xD5,0xE7,0x00,0x00,}},
- {0x7505,2,{0xAE,0x4D,0x00,0x00,}},
- {0x7506,2,{0xAE,0x4E,0x00,0x00,}},
- {0x7507,2,{0xAE,0x4F,0x00,0x00,}},
- {0x7508,2,{0xAE,0x50,0x00,0x00,}},
- {0x7509,2,{0xAE,0x51,0x00,0x00,}},
- {0x750A,2,{0xAE,0x52,0x00,0x00,}},
- {0x750B,2,{0xAE,0x53,0x00,0x00,}},
- {0x750C,2,{0xAE,0x54,0x00,0x00,}},
- {0x750D,2,{0xDD,0xF9,0x00,0x00,}},
- {0x750E,2,{0xAE,0x55,0x00,0x00,}},
- {0x750F,2,{0xEA,0xB4,0x00,0x00,}},
- {0x7510,2,{0xAE,0x56,0x00,0x00,}},
- {0x7511,2,{0xEA,0xB5,0x00,0x00,}},
- {0x7512,2,{0xAE,0x57,0x00,0x00,}},
- {0x7513,2,{0xEA,0xB6,0x00,0x00,}},
- {0x7514,2,{0xAE,0x58,0x00,0x00,}},
- {0x7515,2,{0xAE,0x59,0x00,0x00,}},
- {0x7516,2,{0xAE,0x5A,0x00,0x00,}},
- {0x7517,2,{0xAE,0x5B,0x00,0x00,}},
- {0x7518,2,{0xB8,0xCA,0x00,0x00,}},
- {0x7519,2,{0xDF,0xB0,0x00,0x00,}},
- {0x751A,2,{0xC9,0xF5,0x00,0x00,}},
- {0x751B,2,{0xAE,0x5C,0x00,0x00,}},
- {0x751C,2,{0xCC,0xF0,0x00,0x00,}},
- {0x751D,2,{0xAE,0x5D,0x00,0x00,}},
- {0x751E,2,{0xAE,0x5E,0x00,0x00,}},
- {0x751F,2,{0xC9,0xFA,0x00,0x00,}},
- {0x7520,2,{0xAE,0x5F,0x00,0x00,}},
- {0x7521,2,{0xAE,0x60,0x00,0x00,}},
- {0x7522,2,{0xAE,0x61,0x00,0x00,}},
- {0x7523,2,{0xAE,0x62,0x00,0x00,}},
- {0x7524,2,{0xAE,0x63,0x00,0x00,}},
- {0x7525,2,{0xC9,0xFB,0x00,0x00,}},
- {0x7526,2,{0xAE,0x64,0x00,0x00,}},
- {0x7527,2,{0xAE,0x65,0x00,0x00,}},
- {0x7528,2,{0xD3,0xC3,0x00,0x00,}},
- {0x7529,2,{0xCB,0xA6,0x00,0x00,}},
- {0x752A,2,{0xAE,0x66,0x00,0x00,}},
- {0x752B,2,{0xB8,0xA6,0x00,0x00,}},
- {0x752C,2,{0xF0,0xAE,0x00,0x00,}},
- {0x752D,2,{0xB1,0xC2,0x00,0x00,}},
- {0x752E,2,{0xAE,0x67,0x00,0x00,}},
- {0x752F,2,{0xE5,0xB8,0x00,0x00,}},
- {0x7530,2,{0xCC,0xEF,0x00,0x00,}},
- {0x7531,2,{0xD3,0xC9,0x00,0x00,}},
- {0x7532,2,{0xBC,0xD7,0x00,0x00,}},
- {0x7533,2,{0xC9,0xEA,0x00,0x00,}},
- {0x7534,2,{0xAE,0x68,0x00,0x00,}},
- {0x7535,2,{0xB5,0xE7,0x00,0x00,}},
- {0x7536,2,{0xAE,0x69,0x00,0x00,}},
- {0x7537,2,{0xC4,0xD0,0x00,0x00,}},
- {0x7538,2,{0xB5,0xE9,0x00,0x00,}},
- {0x7539,2,{0xAE,0x6A,0x00,0x00,}},
- {0x753A,2,{0xEE,0xAE,0x00,0x00,}},
- {0x753B,2,{0xBB,0xAD,0x00,0x00,}},
- {0x753C,2,{0xAE,0x6B,0x00,0x00,}},
- {0x753D,2,{0xAE,0x6C,0x00,0x00,}},
- {0x753E,2,{0xE7,0xDE,0x00,0x00,}},
- {0x753F,2,{0xAE,0x6D,0x00,0x00,}},
- {0x7540,2,{0xEE,0xAF,0x00,0x00,}},
- {0x7541,2,{0xAE,0x6E,0x00,0x00,}},
- {0x7542,2,{0xAE,0x6F,0x00,0x00,}},
- {0x7543,2,{0xAE,0x70,0x00,0x00,}},
- {0x7544,2,{0xAE,0x71,0x00,0x00,}},
- {0x7545,2,{0xB3,0xA9,0x00,0x00,}},
- {0x7546,2,{0xAE,0x72,0x00,0x00,}},
- {0x7547,2,{0xAE,0x73,0x00,0x00,}},
- {0x7548,2,{0xEE,0xB2,0x00,0x00,}},
- {0x7549,2,{0xAE,0x74,0x00,0x00,}},
- {0x754A,2,{0xAE,0x75,0x00,0x00,}},
- {0x754B,2,{0xEE,0xB1,0x00,0x00,}},
- {0x754C,2,{0xBD,0xE7,0x00,0x00,}},
- {0x754D,2,{0xAE,0x76,0x00,0x00,}},
- {0x754E,2,{0xEE,0xB0,0x00,0x00,}},
- {0x754F,2,{0xCE,0xB7,0x00,0x00,}},
- {0x7550,2,{0xAE,0x77,0x00,0x00,}},
- {0x7551,2,{0xAE,0x78,0x00,0x00,}},
- {0x7552,2,{0xAE,0x79,0x00,0x00,}},
- {0x7553,2,{0xAE,0x7A,0x00,0x00,}},
- {0x7554,2,{0xC5,0xCF,0x00,0x00,}},
- {0x7555,2,{0xAE,0x7B,0x00,0x00,}},
- {0x7556,2,{0xAE,0x7C,0x00,0x00,}},
- {0x7557,2,{0xAE,0x7D,0x00,0x00,}},
- {0x7558,2,{0xAE,0x7E,0x00,0x00,}},
- {0x7559,2,{0xC1,0xF4,0x00,0x00,}},
- {0x755A,2,{0xDB,0xCE,0x00,0x00,}},
- {0x755B,2,{0xEE,0xB3,0x00,0x00,}},
- {0x755C,2,{0xD0,0xF3,0x00,0x00,}},
- {0x755D,2,{0xAE,0x80,0x00,0x00,}},
- {0x755E,2,{0xAE,0x81,0x00,0x00,}},
- {0x755F,2,{0xAE,0x82,0x00,0x00,}},
- {0x7560,2,{0xAE,0x83,0x00,0x00,}},
- {0x7561,2,{0xAE,0x84,0x00,0x00,}},
- {0x7562,2,{0xAE,0x85,0x00,0x00,}},
- {0x7563,2,{0xAE,0x86,0x00,0x00,}},
- {0x7564,2,{0xAE,0x87,0x00,0x00,}},
- {0x7565,2,{0xC2,0xD4,0x00,0x00,}},
- {0x7566,2,{0xC6,0xE8,0x00,0x00,}},
- {0x7567,2,{0xAE,0x88,0x00,0x00,}},
- {0x7568,2,{0xAE,0x89,0x00,0x00,}},
- {0x7569,2,{0xAE,0x8A,0x00,0x00,}},
- {0x756A,2,{0xB7,0xAC,0x00,0x00,}},
- {0x756B,2,{0xAE,0x8B,0x00,0x00,}},
- {0x756C,2,{0xAE,0x8C,0x00,0x00,}},
- {0x756D,2,{0xAE,0x8D,0x00,0x00,}},
- {0x756E,2,{0xAE,0x8E,0x00,0x00,}},
- {0x756F,2,{0xAE,0x8F,0x00,0x00,}},
- {0x7570,2,{0xAE,0x90,0x00,0x00,}},
- {0x7571,2,{0xAE,0x91,0x00,0x00,}},
- {0x7572,2,{0xEE,0xB4,0x00,0x00,}},
- {0x7573,2,{0xAE,0x92,0x00,0x00,}},
- {0x7574,2,{0xB3,0xEB,0x00,0x00,}},
- {0x7575,2,{0xAE,0x93,0x00,0x00,}},
- {0x7576,2,{0xAE,0x94,0x00,0x00,}},
- {0x7577,2,{0xAE,0x95,0x00,0x00,}},
- {0x7578,2,{0xBB,0xFB,0x00,0x00,}},
- {0x7579,2,{0xEE,0xB5,0x00,0x00,}},
- {0x757A,2,{0xAE,0x96,0x00,0x00,}},
- {0x757B,2,{0xAE,0x97,0x00,0x00,}},
- {0x757C,2,{0xAE,0x98,0x00,0x00,}},
- {0x757D,2,{0xAE,0x99,0x00,0x00,}},
- {0x757E,2,{0xAE,0x9A,0x00,0x00,}},
- {0x757F,2,{0xE7,0xDC,0x00,0x00,}},
- {0x7580,2,{0xAE,0x9B,0x00,0x00,}},
- {0x7581,2,{0xAE,0x9C,0x00,0x00,}},
- {0x7582,2,{0xAE,0x9D,0x00,0x00,}},
- {0x7583,2,{0xEE,0xB6,0x00,0x00,}},
- {0x7584,2,{0xAE,0x9E,0x00,0x00,}},
- {0x7585,2,{0xAE,0x9F,0x00,0x00,}},
- {0x7586,2,{0xBD,0xAE,0x00,0x00,}},
- {0x7587,2,{0xAE,0xA0,0x00,0x00,}},
- {0x7588,2,{0xAF,0x40,0x00,0x00,}},
- {0x7589,2,{0xAF,0x41,0x00,0x00,}},
- {0x758A,2,{0xAF,0x42,0x00,0x00,}},
- {0x758B,2,{0xF1,0xE2,0x00,0x00,}},
- {0x758C,2,{0xAF,0x43,0x00,0x00,}},
- {0x758D,2,{0xAF,0x44,0x00,0x00,}},
- {0x758E,2,{0xAF,0x45,0x00,0x00,}},
- {0x758F,2,{0xCA,0xE8,0x00,0x00,}},
- {0x7590,2,{0xAF,0x46,0x00,0x00,}},
- {0x7591,2,{0xD2,0xC9,0x00,0x00,}},
- {0x7592,2,{0xF0,0xDA,0x00,0x00,}},
- {0x7593,2,{0xAF,0x47,0x00,0x00,}},
- {0x7594,2,{0xF0,0xDB,0x00,0x00,}},
- {0x7595,2,{0xAF,0x48,0x00,0x00,}},
- {0x7596,2,{0xF0,0xDC,0x00,0x00,}},
- {0x7597,2,{0xC1,0xC6,0x00,0x00,}},
- {0x7598,2,{0xAF,0x49,0x00,0x00,}},
- {0x7599,2,{0xB8,0xED,0x00,0x00,}},
- {0x759A,2,{0xBE,0xCE,0x00,0x00,}},
- {0x759B,2,{0xAF,0x4A,0x00,0x00,}},
- {0x759C,2,{0xAF,0x4B,0x00,0x00,}},
- {0x759D,2,{0xF0,0xDE,0x00,0x00,}},
- {0x759E,2,{0xAF,0x4C,0x00,0x00,}},
- {0x759F,2,{0xC5,0xB1,0x00,0x00,}},
- {0x75A0,2,{0xF0,0xDD,0x00,0x00,}},
- {0x75A1,2,{0xD1,0xF1,0x00,0x00,}},
- {0x75A2,2,{0xAF,0x4D,0x00,0x00,}},
- {0x75A3,2,{0xF0,0xE0,0x00,0x00,}},
- {0x75A4,2,{0xB0,0xCC,0x00,0x00,}},
- {0x75A5,2,{0xBD,0xEA,0x00,0x00,}},
- {0x75A6,2,{0xAF,0x4E,0x00,0x00,}},
- {0x75A7,2,{0xAF,0x4F,0x00,0x00,}},
- {0x75A8,2,{0xAF,0x50,0x00,0x00,}},
- {0x75A9,2,{0xAF,0x51,0x00,0x00,}},
- {0x75AA,2,{0xAF,0x52,0x00,0x00,}},
- {0x75AB,2,{0xD2,0xDF,0x00,0x00,}},
- {0x75AC,2,{0xF0,0xDF,0x00,0x00,}},
- {0x75AD,2,{0xAF,0x53,0x00,0x00,}},
- {0x75AE,2,{0xB4,0xAF,0x00,0x00,}},
- {0x75AF,2,{0xB7,0xE8,0x00,0x00,}},
- {0x75B0,2,{0xF0,0xE6,0x00,0x00,}},
- {0x75B1,2,{0xF0,0xE5,0x00,0x00,}},
- {0x75B2,2,{0xC6,0xA3,0x00,0x00,}},
- {0x75B3,2,{0xF0,0xE1,0x00,0x00,}},
- {0x75B4,2,{0xF0,0xE2,0x00,0x00,}},
- {0x75B5,2,{0xB4,0xC3,0x00,0x00,}},
- {0x75B6,2,{0xAF,0x54,0x00,0x00,}},
- {0x75B7,2,{0xAF,0x55,0x00,0x00,}},
- {0x75B8,2,{0xF0,0xE3,0x00,0x00,}},
- {0x75B9,2,{0xD5,0xEE,0x00,0x00,}},
- {0x75BA,2,{0xAF,0x56,0x00,0x00,}},
- {0x75BB,2,{0xAF,0x57,0x00,0x00,}},
- {0x75BC,2,{0xCC,0xDB,0x00,0x00,}},
- {0x75BD,2,{0xBE,0xD2,0x00,0x00,}},
- {0x75BE,2,{0xBC,0xB2,0x00,0x00,}},
- {0x75BF,2,{0xAF,0x58,0x00,0x00,}},
- {0x75C0,2,{0xAF,0x59,0x00,0x00,}},
- {0x75C1,2,{0xAF,0x5A,0x00,0x00,}},
- {0x75C2,2,{0xF0,0xE8,0x00,0x00,}},
- {0x75C3,2,{0xF0,0xE7,0x00,0x00,}},
- {0x75C4,2,{0xF0,0xE4,0x00,0x00,}},
- {0x75C5,2,{0xB2,0xA1,0x00,0x00,}},
- {0x75C6,2,{0xAF,0x5B,0x00,0x00,}},
- {0x75C7,2,{0xD6,0xA2,0x00,0x00,}},
- {0x75C8,2,{0xD3,0xB8,0x00,0x00,}},
- {0x75C9,2,{0xBE,0xB7,0x00,0x00,}},
- {0x75CA,2,{0xC8,0xAC,0x00,0x00,}},
- {0x75CB,2,{0xAF,0x5C,0x00,0x00,}},
- {0x75CC,2,{0xAF,0x5D,0x00,0x00,}},
- {0x75CD,2,{0xF0,0xEA,0x00,0x00,}},
- {0x75CE,2,{0xAF,0x5E,0x00,0x00,}},
- {0x75CF,2,{0xAF,0x5F,0x00,0x00,}},
- {0x75D0,2,{0xAF,0x60,0x00,0x00,}},
- {0x75D1,2,{0xAF,0x61,0x00,0x00,}},
- {0x75D2,2,{0xD1,0xF7,0x00,0x00,}},
- {0x75D3,2,{0xAF,0x62,0x00,0x00,}},
- {0x75D4,2,{0xD6,0xCC,0x00,0x00,}},
- {0x75D5,2,{0xBA,0xDB,0x00,0x00,}},
- {0x75D6,2,{0xF0,0xE9,0x00,0x00,}},
- {0x75D7,2,{0xAF,0x63,0x00,0x00,}},
- {0x75D8,2,{0xB6,0xBB,0x00,0x00,}},
- {0x75D9,2,{0xAF,0x64,0x00,0x00,}},
- {0x75DA,2,{0xAF,0x65,0x00,0x00,}},
- {0x75DB,2,{0xCD,0xB4,0x00,0x00,}},
- {0x75DC,2,{0xAF,0x66,0x00,0x00,}},
- {0x75DD,2,{0xAF,0x67,0x00,0x00,}},
- {0x75DE,2,{0xC6,0xA6,0x00,0x00,}},
- {0x75DF,2,{0xAF,0x68,0x00,0x00,}},
- {0x75E0,2,{0xAF,0x69,0x00,0x00,}},
- {0x75E1,2,{0xAF,0x6A,0x00,0x00,}},
- {0x75E2,2,{0xC1,0xA1,0x00,0x00,}},
- {0x75E3,2,{0xF0,0xEB,0x00,0x00,}},
- {0x75E4,2,{0xF0,0xEE,0x00,0x00,}},
- {0x75E5,2,{0xAF,0x6B,0x00,0x00,}},
- {0x75E6,2,{0xF0,0xED,0x00,0x00,}},
- {0x75E7,2,{0xF0,0xF0,0x00,0x00,}},
- {0x75E8,2,{0xF0,0xEC,0x00,0x00,}},
- {0x75E9,2,{0xAF,0x6C,0x00,0x00,}},
- {0x75EA,2,{0xBB,0xBE,0x00,0x00,}},
- {0x75EB,2,{0xF0,0xEF,0x00,0x00,}},
- {0x75EC,2,{0xAF,0x6D,0x00,0x00,}},
- {0x75ED,2,{0xAF,0x6E,0x00,0x00,}},
- {0x75EE,2,{0xAF,0x6F,0x00,0x00,}},
- {0x75EF,2,{0xAF,0x70,0x00,0x00,}},
- {0x75F0,2,{0xCC,0xB5,0x00,0x00,}},
- {0x75F1,2,{0xF0,0xF2,0x00,0x00,}},
- {0x75F2,2,{0xAF,0x71,0x00,0x00,}},
- {0x75F3,2,{0xAF,0x72,0x00,0x00,}},
- {0x75F4,2,{0xB3,0xD5,0x00,0x00,}},
- {0x75F5,2,{0xAF,0x73,0x00,0x00,}},
- {0x75F6,2,{0xAF,0x74,0x00,0x00,}},
- {0x75F7,2,{0xAF,0x75,0x00,0x00,}},
- {0x75F8,2,{0xAF,0x76,0x00,0x00,}},
- {0x75F9,2,{0xB1,0xD4,0x00,0x00,}},
- {0x75FA,2,{0xAF,0x77,0x00,0x00,}},
- {0x75FB,2,{0xAF,0x78,0x00,0x00,}},
- {0x75FC,2,{0xF0,0xF3,0x00,0x00,}},
- {0x75FD,2,{0xAF,0x79,0x00,0x00,}},
- {0x75FE,2,{0xAF,0x7A,0x00,0x00,}},
- {0x75FF,2,{0xF0,0xF4,0x00,0x00,}},
- {0x7600,2,{0xF0,0xF6,0x00,0x00,}},
- {0x7601,2,{0xB4,0xE1,0x00,0x00,}},
- {0x7602,2,{0xAF,0x7B,0x00,0x00,}},
- {0x7603,2,{0xF0,0xF1,0x00,0x00,}},
- {0x7604,2,{0xAF,0x7C,0x00,0x00,}},
- {0x7605,2,{0xF0,0xF7,0x00,0x00,}},
- {0x7606,2,{0xAF,0x7D,0x00,0x00,}},
- {0x7607,2,{0xAF,0x7E,0x00,0x00,}},
- {0x7608,2,{0xAF,0x80,0x00,0x00,}},
- {0x7609,2,{0xAF,0x81,0x00,0x00,}},
- {0x760A,2,{0xF0,0xFA,0x00,0x00,}},
- {0x760B,2,{0xAF,0x82,0x00,0x00,}},
- {0x760C,2,{0xF0,0xF8,0x00,0x00,}},
- {0x760D,2,{0xAF,0x83,0x00,0x00,}},
- {0x760E,2,{0xAF,0x84,0x00,0x00,}},
- {0x760F,2,{0xAF,0x85,0x00,0x00,}},
- {0x7610,2,{0xF0,0xF5,0x00,0x00,}},
- {0x7611,2,{0xAF,0x86,0x00,0x00,}},
- {0x7612,2,{0xAF,0x87,0x00,0x00,}},
- {0x7613,2,{0xAF,0x88,0x00,0x00,}},
- {0x7614,2,{0xAF,0x89,0x00,0x00,}},
- {0x7615,2,{0xF0,0xFD,0x00,0x00,}},
- {0x7616,2,{0xAF,0x8A,0x00,0x00,}},
- {0x7617,2,{0xF0,0xF9,0x00,0x00,}},
- {0x7618,2,{0xF0,0xFC,0x00,0x00,}},
- {0x7619,2,{0xF0,0xFE,0x00,0x00,}},
- {0x761A,2,{0xAF,0x8B,0x00,0x00,}},
- {0x761B,2,{0xF1,0xA1,0x00,0x00,}},
- {0x761C,2,{0xAF,0x8C,0x00,0x00,}},
- {0x761D,2,{0xAF,0x8D,0x00,0x00,}},
- {0x761E,2,{0xAF,0x8E,0x00,0x00,}},
- {0x761F,2,{0xCE,0xC1,0x00,0x00,}},
- {0x7620,2,{0xF1,0xA4,0x00,0x00,}},
- {0x7621,2,{0xAF,0x8F,0x00,0x00,}},
- {0x7622,2,{0xF1,0xA3,0x00,0x00,}},
- {0x7623,2,{0xAF,0x90,0x00,0x00,}},
- {0x7624,2,{0xC1,0xF6,0x00,0x00,}},
- {0x7625,2,{0xF0,0xFB,0x00,0x00,}},
- {0x7626,2,{0xCA,0xDD,0x00,0x00,}},
- {0x7627,2,{0xAF,0x91,0x00,0x00,}},
- {0x7628,2,{0xAF,0x92,0x00,0x00,}},
- {0x7629,2,{0xB4,0xF1,0x00,0x00,}},
- {0x762A,2,{0xB1,0xF1,0x00,0x00,}},
- {0x762B,2,{0xCC,0xB1,0x00,0x00,}},
- {0x762C,2,{0xAF,0x93,0x00,0x00,}},
- {0x762D,2,{0xF1,0xA6,0x00,0x00,}},
- {0x762E,2,{0xAF,0x94,0x00,0x00,}},
- {0x762F,2,{0xAF,0x95,0x00,0x00,}},
- {0x7630,2,{0xF1,0xA7,0x00,0x00,}},
- {0x7631,2,{0xAF,0x96,0x00,0x00,}},
- {0x7632,2,{0xAF,0x97,0x00,0x00,}},
- {0x7633,2,{0xF1,0xAC,0x00,0x00,}},
- {0x7634,2,{0xD5,0xCE,0x00,0x00,}},
- {0x7635,2,{0xF1,0xA9,0x00,0x00,}},
- {0x7636,2,{0xAF,0x98,0x00,0x00,}},
- {0x7637,2,{0xAF,0x99,0x00,0x00,}},
- {0x7638,2,{0xC8,0xB3,0x00,0x00,}},
- {0x7639,2,{0xAF,0x9A,0x00,0x00,}},
- {0x763A,2,{0xAF,0x9B,0x00,0x00,}},
- {0x763B,2,{0xAF,0x9C,0x00,0x00,}},
- {0x763C,2,{0xF1,0xA2,0x00,0x00,}},
- {0x763D,2,{0xAF,0x9D,0x00,0x00,}},
- {0x763E,2,{0xF1,0xAB,0x00,0x00,}},
- {0x763F,2,{0xF1,0xA8,0x00,0x00,}},
- {0x7640,2,{0xF1,0xA5,0x00,0x00,}},
- {0x7641,2,{0xAF,0x9E,0x00,0x00,}},
- {0x7642,2,{0xAF,0x9F,0x00,0x00,}},
- {0x7643,2,{0xF1,0xAA,0x00,0x00,}},
- {0x7644,2,{0xAF,0xA0,0x00,0x00,}},
- {0x7645,2,{0xB0,0x40,0x00,0x00,}},
- {0x7646,2,{0xB0,0x41,0x00,0x00,}},
- {0x7647,2,{0xB0,0x42,0x00,0x00,}},
- {0x7648,2,{0xB0,0x43,0x00,0x00,}},
- {0x7649,2,{0xB0,0x44,0x00,0x00,}},
- {0x764A,2,{0xB0,0x45,0x00,0x00,}},
- {0x764B,2,{0xB0,0x46,0x00,0x00,}},
- {0x764C,2,{0xB0,0xA9,0x00,0x00,}},
- {0x764D,2,{0xF1,0xAD,0x00,0x00,}},
- {0x764E,2,{0xB0,0x47,0x00,0x00,}},
- {0x764F,2,{0xB0,0x48,0x00,0x00,}},
- {0x7650,2,{0xB0,0x49,0x00,0x00,}},
- {0x7651,2,{0xB0,0x4A,0x00,0x00,}},
- {0x7652,2,{0xB0,0x4B,0x00,0x00,}},
- {0x7653,2,{0xB0,0x4C,0x00,0x00,}},
- {0x7654,2,{0xF1,0xAF,0x00,0x00,}},
- {0x7655,2,{0xB0,0x4D,0x00,0x00,}},
- {0x7656,2,{0xF1,0xB1,0x00,0x00,}},
- {0x7657,2,{0xB0,0x4E,0x00,0x00,}},
- {0x7658,2,{0xB0,0x4F,0x00,0x00,}},
- {0x7659,2,{0xB0,0x50,0x00,0x00,}},
- {0x765A,2,{0xB0,0x51,0x00,0x00,}},
- {0x765B,2,{0xB0,0x52,0x00,0x00,}},
- {0x765C,2,{0xF1,0xB0,0x00,0x00,}},
- {0x765D,2,{0xB0,0x53,0x00,0x00,}},
- {0x765E,2,{0xF1,0xAE,0x00,0x00,}},
- {0x765F,2,{0xB0,0x54,0x00,0x00,}},
- {0x7660,2,{0xB0,0x55,0x00,0x00,}},
- {0x7661,2,{0xB0,0x56,0x00,0x00,}},
- {0x7662,2,{0xB0,0x57,0x00,0x00,}},
- {0x7663,2,{0xD1,0xA2,0x00,0x00,}},
- {0x7664,2,{0xB0,0x58,0x00,0x00,}},
- {0x7665,2,{0xB0,0x59,0x00,0x00,}},
- {0x7666,2,{0xB0,0x5A,0x00,0x00,}},
- {0x7667,2,{0xB0,0x5B,0x00,0x00,}},
- {0x7668,2,{0xB0,0x5C,0x00,0x00,}},
- {0x7669,2,{0xB0,0x5D,0x00,0x00,}},
- {0x766A,2,{0xB0,0x5E,0x00,0x00,}},
- {0x766B,2,{0xF1,0xB2,0x00,0x00,}},
- {0x766C,2,{0xB0,0x5F,0x00,0x00,}},
- {0x766D,2,{0xB0,0x60,0x00,0x00,}},
- {0x766E,2,{0xB0,0x61,0x00,0x00,}},
- {0x766F,2,{0xF1,0xB3,0x00,0x00,}},
- {0x7670,2,{0xB0,0x62,0x00,0x00,}},
- {0x7671,2,{0xB0,0x63,0x00,0x00,}},
- {0x7672,2,{0xB0,0x64,0x00,0x00,}},
- {0x7673,2,{0xB0,0x65,0x00,0x00,}},
- {0x7674,2,{0xB0,0x66,0x00,0x00,}},
- {0x7675,2,{0xB0,0x67,0x00,0x00,}},
- {0x7676,2,{0xB0,0x68,0x00,0x00,}},
- {0x7677,2,{0xB0,0x69,0x00,0x00,}},
- {0x7678,2,{0xB9,0xEF,0x00,0x00,}},
- {0x7679,2,{0xB0,0x6A,0x00,0x00,}},
- {0x767A,2,{0xB0,0x6B,0x00,0x00,}},
- {0x767B,2,{0xB5,0xC7,0x00,0x00,}},
- {0x767C,2,{0xB0,0x6C,0x00,0x00,}},
- {0x767D,2,{0xB0,0xD7,0x00,0x00,}},
- {0x767E,2,{0xB0,0xD9,0x00,0x00,}},
- {0x767F,2,{0xB0,0x6D,0x00,0x00,}},
- {0x7680,2,{0xB0,0x6E,0x00,0x00,}},
- {0x7681,2,{0xB0,0x6F,0x00,0x00,}},
- {0x7682,2,{0xD4,0xED,0x00,0x00,}},
- {0x7683,2,{0xB0,0x70,0x00,0x00,}},
- {0x7684,2,{0xB5,0xC4,0x00,0x00,}},
- {0x7685,2,{0xB0,0x71,0x00,0x00,}},
- {0x7686,2,{0xBD,0xD4,0x00,0x00,}},
- {0x7687,2,{0xBB,0xCA,0x00,0x00,}},
- {0x7688,2,{0xF0,0xA7,0x00,0x00,}},
- {0x7689,2,{0xB0,0x72,0x00,0x00,}},
- {0x768A,2,{0xB0,0x73,0x00,0x00,}},
- {0x768B,2,{0xB8,0xDE,0x00,0x00,}},
- {0x768C,2,{0xB0,0x74,0x00,0x00,}},
- {0x768D,2,{0xB0,0x75,0x00,0x00,}},
- {0x768E,2,{0xF0,0xA8,0x00,0x00,}},
- {0x768F,2,{0xB0,0x76,0x00,0x00,}},
- {0x7690,2,{0xB0,0x77,0x00,0x00,}},
- {0x7691,2,{0xB0,0xA8,0x00,0x00,}},
- {0x7692,2,{0xB0,0x78,0x00,0x00,}},
- {0x7693,2,{0xF0,0xA9,0x00,0x00,}},
- {0x7694,2,{0xB0,0x79,0x00,0x00,}},
- {0x7695,2,{0xB0,0x7A,0x00,0x00,}},
- {0x7696,2,{0xCD,0xEE,0x00,0x00,}},
- {0x7697,2,{0xB0,0x7B,0x00,0x00,}},
- {0x7698,2,{0xB0,0x7C,0x00,0x00,}},
- {0x7699,2,{0xF0,0xAA,0x00,0x00,}},
- {0x769A,2,{0xB0,0x7D,0x00,0x00,}},
- {0x769B,2,{0xB0,0x7E,0x00,0x00,}},
- {0x769C,2,{0xB0,0x80,0x00,0x00,}},
- {0x769D,2,{0xB0,0x81,0x00,0x00,}},
- {0x769E,2,{0xB0,0x82,0x00,0x00,}},
- {0x769F,2,{0xB0,0x83,0x00,0x00,}},
- {0x76A0,2,{0xB0,0x84,0x00,0x00,}},
- {0x76A1,2,{0xB0,0x85,0x00,0x00,}},
- {0x76A2,2,{0xB0,0x86,0x00,0x00,}},
- {0x76A3,2,{0xB0,0x87,0x00,0x00,}},
- {0x76A4,2,{0xF0,0xAB,0x00,0x00,}},
- {0x76A5,2,{0xB0,0x88,0x00,0x00,}},
- {0x76A6,2,{0xB0,0x89,0x00,0x00,}},
- {0x76A7,2,{0xB0,0x8A,0x00,0x00,}},
- {0x76A8,2,{0xB0,0x8B,0x00,0x00,}},
- {0x76A9,2,{0xB0,0x8C,0x00,0x00,}},
- {0x76AA,2,{0xB0,0x8D,0x00,0x00,}},
- {0x76AB,2,{0xB0,0x8E,0x00,0x00,}},
- {0x76AC,2,{0xB0,0x8F,0x00,0x00,}},
- {0x76AD,2,{0xB0,0x90,0x00,0x00,}},
- {0x76AE,2,{0xC6,0xA4,0x00,0x00,}},
- {0x76AF,2,{0xB0,0x91,0x00,0x00,}},
- {0x76B0,2,{0xB0,0x92,0x00,0x00,}},
- {0x76B1,2,{0xD6,0xE5,0x00,0x00,}},
- {0x76B2,2,{0xF1,0xE4,0x00,0x00,}},
- {0x76B3,2,{0xB0,0x93,0x00,0x00,}},
- {0x76B4,2,{0xF1,0xE5,0x00,0x00,}},
- {0x76B5,2,{0xB0,0x94,0x00,0x00,}},
- {0x76B6,2,{0xB0,0x95,0x00,0x00,}},
- {0x76B7,2,{0xB0,0x96,0x00,0x00,}},
- {0x76B8,2,{0xB0,0x97,0x00,0x00,}},
- {0x76B9,2,{0xB0,0x98,0x00,0x00,}},
- {0x76BA,2,{0xB0,0x99,0x00,0x00,}},
- {0x76BB,2,{0xB0,0x9A,0x00,0x00,}},
- {0x76BC,2,{0xB0,0x9B,0x00,0x00,}},
- {0x76BD,2,{0xB0,0x9C,0x00,0x00,}},
- {0x76BE,2,{0xB0,0x9D,0x00,0x00,}},
- {0x76BF,2,{0xC3,0xF3,0x00,0x00,}},
- {0x76C0,2,{0xB0,0x9E,0x00,0x00,}},
- {0x76C1,2,{0xB0,0x9F,0x00,0x00,}},
- {0x76C2,2,{0xD3,0xDB,0x00,0x00,}},
- {0x76C3,2,{0xB0,0xA0,0x00,0x00,}},
- {0x76C4,2,{0xB1,0x40,0x00,0x00,}},
- {0x76C5,2,{0xD6,0xD1,0x00,0x00,}},
- {0x76C6,2,{0xC5,0xE8,0x00,0x00,}},
- {0x76C7,2,{0xB1,0x41,0x00,0x00,}},
- {0x76C8,2,{0xD3,0xAF,0x00,0x00,}},
- {0x76C9,2,{0xB1,0x42,0x00,0x00,}},
- {0x76CA,2,{0xD2,0xE6,0x00,0x00,}},
- {0x76CB,2,{0xB1,0x43,0x00,0x00,}},
- {0x76CC,2,{0xB1,0x44,0x00,0x00,}},
- {0x76CD,2,{0xEE,0xC1,0x00,0x00,}},
- {0x76CE,2,{0xB0,0xBB,0x00,0x00,}},
- {0x76CF,2,{0xD5,0xB5,0x00,0x00,}},
- {0x76D0,2,{0xD1,0xCE,0x00,0x00,}},
- {0x76D1,2,{0xBC,0xE0,0x00,0x00,}},
- {0x76D2,2,{0xBA,0xD0,0x00,0x00,}},
- {0x76D3,2,{0xB1,0x45,0x00,0x00,}},
- {0x76D4,2,{0xBF,0xF8,0x00,0x00,}},
- {0x76D5,2,{0xB1,0x46,0x00,0x00,}},
- {0x76D6,2,{0xB8,0xC7,0x00,0x00,}},
- {0x76D7,2,{0xB5,0xC1,0x00,0x00,}},
- {0x76D8,2,{0xC5,0xCC,0x00,0x00,}},
- {0x76D9,2,{0xB1,0x47,0x00,0x00,}},
- {0x76DA,2,{0xB1,0x48,0x00,0x00,}},
- {0x76DB,2,{0xCA,0xA2,0x00,0x00,}},
- {0x76DC,2,{0xB1,0x49,0x00,0x00,}},
- {0x76DD,2,{0xB1,0x4A,0x00,0x00,}},
- {0x76DE,2,{0xB1,0x4B,0x00,0x00,}},
- {0x76DF,2,{0xC3,0xCB,0x00,0x00,}},
- {0x76E0,2,{0xB1,0x4C,0x00,0x00,}},
- {0x76E1,2,{0xB1,0x4D,0x00,0x00,}},
- {0x76E2,2,{0xB1,0x4E,0x00,0x00,}},
- {0x76E3,2,{0xB1,0x4F,0x00,0x00,}},
- {0x76E4,2,{0xB1,0x50,0x00,0x00,}},
- {0x76E5,2,{0xEE,0xC2,0x00,0x00,}},
- {0x76E6,2,{0xB1,0x51,0x00,0x00,}},
- {0x76E7,2,{0xB1,0x52,0x00,0x00,}},
- {0x76E8,2,{0xB1,0x53,0x00,0x00,}},
- {0x76E9,2,{0xB1,0x54,0x00,0x00,}},
- {0x76EA,2,{0xB1,0x55,0x00,0x00,}},
- {0x76EB,2,{0xB1,0x56,0x00,0x00,}},
- {0x76EC,2,{0xB1,0x57,0x00,0x00,}},
- {0x76ED,2,{0xB1,0x58,0x00,0x00,}},
- {0x76EE,2,{0xC4,0xBF,0x00,0x00,}},
- {0x76EF,2,{0xB6,0xA2,0x00,0x00,}},
- {0x76F0,2,{0xB1,0x59,0x00,0x00,}},
- {0x76F1,2,{0xED,0xEC,0x00,0x00,}},
- {0x76F2,2,{0xC3,0xA4,0x00,0x00,}},
- {0x76F3,2,{0xB1,0x5A,0x00,0x00,}},
- {0x76F4,2,{0xD6,0xB1,0x00,0x00,}},
- {0x76F5,2,{0xB1,0x5B,0x00,0x00,}},
- {0x76F6,2,{0xB1,0x5C,0x00,0x00,}},
- {0x76F7,2,{0xB1,0x5D,0x00,0x00,}},
- {0x76F8,2,{0xCF,0xE0,0x00,0x00,}},
- {0x76F9,2,{0xED,0xEF,0x00,0x00,}},
- {0x76FA,2,{0xB1,0x5E,0x00,0x00,}},
- {0x76FB,2,{0xB1,0x5F,0x00,0x00,}},
- {0x76FC,2,{0xC5,0xCE,0x00,0x00,}},
- {0x76FD,2,{0xB1,0x60,0x00,0x00,}},
- {0x76FE,2,{0xB6,0xDC,0x00,0x00,}},
- {0x76FF,2,{0xB1,0x61,0x00,0x00,}},
- {0x7700,2,{0xB1,0x62,0x00,0x00,}},
- {0x7701,2,{0xCA,0xA1,0x00,0x00,}},
- {0x7702,2,{0xB1,0x63,0x00,0x00,}},
- {0x7703,2,{0xB1,0x64,0x00,0x00,}},
- {0x7704,2,{0xED,0xED,0x00,0x00,}},
- {0x7705,2,{0xB1,0x65,0x00,0x00,}},
- {0x7706,2,{0xB1,0x66,0x00,0x00,}},
- {0x7707,2,{0xED,0xF0,0x00,0x00,}},
- {0x7708,2,{0xED,0xF1,0x00,0x00,}},
- {0x7709,2,{0xC3,0xBC,0x00,0x00,}},
- {0x770A,2,{0xB1,0x67,0x00,0x00,}},
- {0x770B,2,{0xBF,0xB4,0x00,0x00,}},
- {0x770C,2,{0xB1,0x68,0x00,0x00,}},
- {0x770D,2,{0xED,0xEE,0x00,0x00,}},
- {0x770E,2,{0xB1,0x69,0x00,0x00,}},
- {0x770F,2,{0xB1,0x6A,0x00,0x00,}},
- {0x7710,2,{0xB1,0x6B,0x00,0x00,}},
- {0x7711,2,{0xB1,0x6C,0x00,0x00,}},
- {0x7712,2,{0xB1,0x6D,0x00,0x00,}},
- {0x7713,2,{0xB1,0x6E,0x00,0x00,}},
- {0x7714,2,{0xB1,0x6F,0x00,0x00,}},
- {0x7715,2,{0xB1,0x70,0x00,0x00,}},
- {0x7716,2,{0xB1,0x71,0x00,0x00,}},
- {0x7717,2,{0xB1,0x72,0x00,0x00,}},
- {0x7718,2,{0xB1,0x73,0x00,0x00,}},
- {0x7719,2,{0xED,0xF4,0x00,0x00,}},
- {0x771A,2,{0xED,0xF2,0x00,0x00,}},
- {0x771B,2,{0xB1,0x74,0x00,0x00,}},
- {0x771C,2,{0xB1,0x75,0x00,0x00,}},
- {0x771D,2,{0xB1,0x76,0x00,0x00,}},
- {0x771E,2,{0xB1,0x77,0x00,0x00,}},
- {0x771F,2,{0xD5,0xE6,0x00,0x00,}},
- {0x7720,2,{0xC3,0xDF,0x00,0x00,}},
- {0x7721,2,{0xB1,0x78,0x00,0x00,}},
- {0x7722,2,{0xED,0xF3,0x00,0x00,}},
- {0x7723,2,{0xB1,0x79,0x00,0x00,}},
- {0x7724,2,{0xB1,0x7A,0x00,0x00,}},
- {0x7725,2,{0xB1,0x7B,0x00,0x00,}},
- {0x7726,2,{0xED,0xF6,0x00,0x00,}},
- {0x7727,2,{0xB1,0x7C,0x00,0x00,}},
- {0x7728,2,{0xD5,0xA3,0x00,0x00,}},
- {0x7729,2,{0xD1,0xA3,0x00,0x00,}},
- {0x772A,2,{0xB1,0x7D,0x00,0x00,}},
- {0x772B,2,{0xB1,0x7E,0x00,0x00,}},
- {0x772C,2,{0xB1,0x80,0x00,0x00,}},
- {0x772D,2,{0xED,0xF5,0x00,0x00,}},
- {0x772E,2,{0xB1,0x81,0x00,0x00,}},
- {0x772F,2,{0xC3,0xD0,0x00,0x00,}},
- {0x7730,2,{0xB1,0x82,0x00,0x00,}},
- {0x7731,2,{0xB1,0x83,0x00,0x00,}},
- {0x7732,2,{0xB1,0x84,0x00,0x00,}},
- {0x7733,2,{0xB1,0x85,0x00,0x00,}},
- {0x7734,2,{0xB1,0x86,0x00,0x00,}},
- {0x7735,2,{0xED,0xF7,0x00,0x00,}},
- {0x7736,2,{0xBF,0xF4,0x00,0x00,}},
- {0x7737,2,{0xBE,0xEC,0x00,0x00,}},
- {0x7738,2,{0xED,0xF8,0x00,0x00,}},
- {0x7739,2,{0xB1,0x87,0x00,0x00,}},
- {0x773A,2,{0xCC,0xF7,0x00,0x00,}},
- {0x773B,2,{0xB1,0x88,0x00,0x00,}},
- {0x773C,2,{0xD1,0xDB,0x00,0x00,}},
- {0x773D,2,{0xB1,0x89,0x00,0x00,}},
- {0x773E,2,{0xB1,0x8A,0x00,0x00,}},
- {0x773F,2,{0xB1,0x8B,0x00,0x00,}},
- {0x7740,2,{0xD7,0xC5,0x00,0x00,}},
- {0x7741,2,{0xD5,0xF6,0x00,0x00,}},
- {0x7742,2,{0xB1,0x8C,0x00,0x00,}},
- {0x7743,2,{0xED,0xFC,0x00,0x00,}},
- {0x7744,2,{0xB1,0x8D,0x00,0x00,}},
- {0x7745,2,{0xB1,0x8E,0x00,0x00,}},
- {0x7746,2,{0xB1,0x8F,0x00,0x00,}},
- {0x7747,2,{0xED,0xFB,0x00,0x00,}},
- {0x7748,2,{0xB1,0x90,0x00,0x00,}},
- {0x7749,2,{0xB1,0x91,0x00,0x00,}},
- {0x774A,2,{0xB1,0x92,0x00,0x00,}},
- {0x774B,2,{0xB1,0x93,0x00,0x00,}},
- {0x774C,2,{0xB1,0x94,0x00,0x00,}},
- {0x774D,2,{0xB1,0x95,0x00,0x00,}},
- {0x774E,2,{0xB1,0x96,0x00,0x00,}},
- {0x774F,2,{0xB1,0x97,0x00,0x00,}},
- {0x7750,2,{0xED,0xF9,0x00,0x00,}},
- {0x7751,2,{0xED,0xFA,0x00,0x00,}},
- {0x7752,2,{0xB1,0x98,0x00,0x00,}},
- {0x7753,2,{0xB1,0x99,0x00,0x00,}},
- {0x7754,2,{0xB1,0x9A,0x00,0x00,}},
- {0x7755,2,{0xB1,0x9B,0x00,0x00,}},
- {0x7756,2,{0xB1,0x9C,0x00,0x00,}},
- {0x7757,2,{0xB1,0x9D,0x00,0x00,}},
- {0x7758,2,{0xB1,0x9E,0x00,0x00,}},
- {0x7759,2,{0xB1,0x9F,0x00,0x00,}},
- {0x775A,2,{0xED,0xFD,0x00,0x00,}},
- {0x775B,2,{0xBE,0xA6,0x00,0x00,}},
- {0x775C,2,{0xB1,0xA0,0x00,0x00,}},
- {0x775D,2,{0xB2,0x40,0x00,0x00,}},
- {0x775E,2,{0xB2,0x41,0x00,0x00,}},
- {0x775F,2,{0xB2,0x42,0x00,0x00,}},
- {0x7760,2,{0xB2,0x43,0x00,0x00,}},
- {0x7761,2,{0xCB,0xAF,0x00,0x00,}},
- {0x7762,2,{0xEE,0xA1,0x00,0x00,}},
- {0x7763,2,{0xB6,0xBD,0x00,0x00,}},
- {0x7764,2,{0xB2,0x44,0x00,0x00,}},
- {0x7765,2,{0xEE,0xA2,0x00,0x00,}},
- {0x7766,2,{0xC4,0xC0,0x00,0x00,}},
- {0x7767,2,{0xB2,0x45,0x00,0x00,}},
- {0x7768,2,{0xED,0xFE,0x00,0x00,}},
- {0x7769,2,{0xB2,0x46,0x00,0x00,}},
- {0x776A,2,{0xB2,0x47,0x00,0x00,}},
- {0x776B,2,{0xBD,0xDE,0x00,0x00,}},
- {0x776C,2,{0xB2,0xC7,0x00,0x00,}},
- {0x776D,2,{0xB2,0x48,0x00,0x00,}},
- {0x776E,2,{0xB2,0x49,0x00,0x00,}},
- {0x776F,2,{0xB2,0x4A,0x00,0x00,}},
- {0x7770,2,{0xB2,0x4B,0x00,0x00,}},
- {0x7771,2,{0xB2,0x4C,0x00,0x00,}},
- {0x7772,2,{0xB2,0x4D,0x00,0x00,}},
- {0x7773,2,{0xB2,0x4E,0x00,0x00,}},
- {0x7774,2,{0xB2,0x4F,0x00,0x00,}},
- {0x7775,2,{0xB2,0x50,0x00,0x00,}},
- {0x7776,2,{0xB2,0x51,0x00,0x00,}},
- {0x7777,2,{0xB2,0x52,0x00,0x00,}},
- {0x7778,2,{0xB2,0x53,0x00,0x00,}},
- {0x7779,2,{0xB6,0xC3,0x00,0x00,}},
- {0x777A,2,{0xB2,0x54,0x00,0x00,}},
- {0x777B,2,{0xB2,0x55,0x00,0x00,}},
- {0x777C,2,{0xB2,0x56,0x00,0x00,}},
- {0x777D,2,{0xEE,0xA5,0x00,0x00,}},
- {0x777E,2,{0xD8,0xBA,0x00,0x00,}},
- {0x777F,2,{0xEE,0xA3,0x00,0x00,}},
- {0x7780,2,{0xEE,0xA6,0x00,0x00,}},
- {0x7781,2,{0xB2,0x57,0x00,0x00,}},
- {0x7782,2,{0xB2,0x58,0x00,0x00,}},
- {0x7783,2,{0xB2,0x59,0x00,0x00,}},
- {0x7784,2,{0xC3,0xE9,0x00,0x00,}},
- {0x7785,2,{0xB3,0xF2,0x00,0x00,}},
- {0x7786,2,{0xB2,0x5A,0x00,0x00,}},
- {0x7787,2,{0xB2,0x5B,0x00,0x00,}},
- {0x7788,2,{0xB2,0x5C,0x00,0x00,}},
- {0x7789,2,{0xB2,0x5D,0x00,0x00,}},
- {0x778A,2,{0xB2,0x5E,0x00,0x00,}},
- {0x778B,2,{0xB2,0x5F,0x00,0x00,}},
- {0x778C,2,{0xEE,0xA7,0x00,0x00,}},
- {0x778D,2,{0xEE,0xA4,0x00,0x00,}},
- {0x778E,2,{0xCF,0xB9,0x00,0x00,}},
- {0x778F,2,{0xB2,0x60,0x00,0x00,}},
- {0x7790,2,{0xB2,0x61,0x00,0x00,}},
- {0x7791,2,{0xEE,0xA8,0x00,0x00,}},
- {0x7792,2,{0xC2,0xF7,0x00,0x00,}},
- {0x7793,2,{0xB2,0x62,0x00,0x00,}},
- {0x7794,2,{0xB2,0x63,0x00,0x00,}},
- {0x7795,2,{0xB2,0x64,0x00,0x00,}},
- {0x7796,2,{0xB2,0x65,0x00,0x00,}},
- {0x7797,2,{0xB2,0x66,0x00,0x00,}},
- {0x7798,2,{0xB2,0x67,0x00,0x00,}},
- {0x7799,2,{0xB2,0x68,0x00,0x00,}},
- {0x779A,2,{0xB2,0x69,0x00,0x00,}},
- {0x779B,2,{0xB2,0x6A,0x00,0x00,}},
- {0x779C,2,{0xB2,0x6B,0x00,0x00,}},
- {0x779D,2,{0xB2,0x6C,0x00,0x00,}},
- {0x779E,2,{0xB2,0x6D,0x00,0x00,}},
- {0x779F,2,{0xEE,0xA9,0x00,0x00,}},
- {0x77A0,2,{0xEE,0xAA,0x00,0x00,}},
- {0x77A1,2,{0xB2,0x6E,0x00,0x00,}},
- {0x77A2,2,{0xDE,0xAB,0x00,0x00,}},
- {0x77A3,2,{0xB2,0x6F,0x00,0x00,}},
- {0x77A4,2,{0xB2,0x70,0x00,0x00,}},
- {0x77A5,2,{0xC6,0xB3,0x00,0x00,}},
- {0x77A6,2,{0xB2,0x71,0x00,0x00,}},
- {0x77A7,2,{0xC7,0xC6,0x00,0x00,}},
- {0x77A8,2,{0xB2,0x72,0x00,0x00,}},
- {0x77A9,2,{0xD6,0xF5,0x00,0x00,}},
- {0x77AA,2,{0xB5,0xC9,0x00,0x00,}},
- {0x77AB,2,{0xB2,0x73,0x00,0x00,}},
- {0x77AC,2,{0xCB,0xB2,0x00,0x00,}},
- {0x77AD,2,{0xB2,0x74,0x00,0x00,}},
- {0x77AE,2,{0xB2,0x75,0x00,0x00,}},
- {0x77AF,2,{0xB2,0x76,0x00,0x00,}},
- {0x77B0,2,{0xEE,0xAB,0x00,0x00,}},
- {0x77B1,2,{0xB2,0x77,0x00,0x00,}},
- {0x77B2,2,{0xB2,0x78,0x00,0x00,}},
- {0x77B3,2,{0xCD,0xAB,0x00,0x00,}},
- {0x77B4,2,{0xB2,0x79,0x00,0x00,}},
- {0x77B5,2,{0xEE,0xAC,0x00,0x00,}},
- {0x77B6,2,{0xB2,0x7A,0x00,0x00,}},
- {0x77B7,2,{0xB2,0x7B,0x00,0x00,}},
- {0x77B8,2,{0xB2,0x7C,0x00,0x00,}},
- {0x77B9,2,{0xB2,0x7D,0x00,0x00,}},
- {0x77BA,2,{0xB2,0x7E,0x00,0x00,}},
- {0x77BB,2,{0xD5,0xB0,0x00,0x00,}},
- {0x77BC,2,{0xB2,0x80,0x00,0x00,}},
- {0x77BD,2,{0xEE,0xAD,0x00,0x00,}},
- {0x77BE,2,{0xB2,0x81,0x00,0x00,}},
- {0x77BF,2,{0xF6,0xC4,0x00,0x00,}},
- {0x77C0,2,{0xB2,0x82,0x00,0x00,}},
- {0x77C1,2,{0xB2,0x83,0x00,0x00,}},
- {0x77C2,2,{0xB2,0x84,0x00,0x00,}},
- {0x77C3,2,{0xB2,0x85,0x00,0x00,}},
- {0x77C4,2,{0xB2,0x86,0x00,0x00,}},
- {0x77C5,2,{0xB2,0x87,0x00,0x00,}},
- {0x77C6,2,{0xB2,0x88,0x00,0x00,}},
- {0x77C7,2,{0xB2,0x89,0x00,0x00,}},
- {0x77C8,2,{0xB2,0x8A,0x00,0x00,}},
- {0x77C9,2,{0xB2,0x8B,0x00,0x00,}},
- {0x77CA,2,{0xB2,0x8C,0x00,0x00,}},
- {0x77CB,2,{0xB2,0x8D,0x00,0x00,}},
- {0x77CC,2,{0xB2,0x8E,0x00,0x00,}},
- {0x77CD,2,{0xDB,0xC7,0x00,0x00,}},
- {0x77CE,2,{0xB2,0x8F,0x00,0x00,}},
- {0x77CF,2,{0xB2,0x90,0x00,0x00,}},
- {0x77D0,2,{0xB2,0x91,0x00,0x00,}},
- {0x77D1,2,{0xB2,0x92,0x00,0x00,}},
- {0x77D2,2,{0xB2,0x93,0x00,0x00,}},
- {0x77D3,2,{0xB2,0x94,0x00,0x00,}},
- {0x77D4,2,{0xB2,0x95,0x00,0x00,}},
- {0x77D5,2,{0xB2,0x96,0x00,0x00,}},
- {0x77D6,2,{0xB2,0x97,0x00,0x00,}},
- {0x77D7,2,{0xB4,0xA3,0x00,0x00,}},
- {0x77D8,2,{0xB2,0x98,0x00,0x00,}},
- {0x77D9,2,{0xB2,0x99,0x00,0x00,}},
- {0x77DA,2,{0xB2,0x9A,0x00,0x00,}},
- {0x77DB,2,{0xC3,0xAC,0x00,0x00,}},
- {0x77DC,2,{0xF1,0xE6,0x00,0x00,}},
- {0x77DD,2,{0xB2,0x9B,0x00,0x00,}},
- {0x77DE,2,{0xB2,0x9C,0x00,0x00,}},
- {0x77DF,2,{0xB2,0x9D,0x00,0x00,}},
- {0x77E0,2,{0xB2,0x9E,0x00,0x00,}},
- {0x77E1,2,{0xB2,0x9F,0x00,0x00,}},
- {0x77E2,2,{0xCA,0xB8,0x00,0x00,}},
- {0x77E3,2,{0xD2,0xD3,0x00,0x00,}},
- {0x77E4,2,{0xB2,0xA0,0x00,0x00,}},
- {0x77E5,2,{0xD6,0xAA,0x00,0x00,}},
- {0x77E6,2,{0xB3,0x40,0x00,0x00,}},
- {0x77E7,2,{0xEF,0xF2,0x00,0x00,}},
- {0x77E8,2,{0xB3,0x41,0x00,0x00,}},
- {0x77E9,2,{0xBE,0xD8,0x00,0x00,}},
- {0x77EA,2,{0xB3,0x42,0x00,0x00,}},
- {0x77EB,2,{0xBD,0xC3,0x00,0x00,}},
- {0x77EC,2,{0xEF,0xF3,0x00,0x00,}},
- {0x77ED,2,{0xB6,0xCC,0x00,0x00,}},
- {0x77EE,2,{0xB0,0xAB,0x00,0x00,}},
- {0x77EF,2,{0xB3,0x43,0x00,0x00,}},
- {0x77F0,2,{0xB3,0x44,0x00,0x00,}},
- {0x77F1,2,{0xB3,0x45,0x00,0x00,}},
- {0x77F2,2,{0xB3,0x46,0x00,0x00,}},
- {0x77F3,2,{0xCA,0xAF,0x00,0x00,}},
- {0x77F4,2,{0xB3,0x47,0x00,0x00,}},
- {0x77F5,2,{0xB3,0x48,0x00,0x00,}},
- {0x77F6,2,{0xED,0xB6,0x00,0x00,}},
- {0x77F7,2,{0xB3,0x49,0x00,0x00,}},
- {0x77F8,2,{0xED,0xB7,0x00,0x00,}},
- {0x77F9,2,{0xB3,0x4A,0x00,0x00,}},
- {0x77FA,2,{0xB3,0x4B,0x00,0x00,}},
- {0x77FB,2,{0xB3,0x4C,0x00,0x00,}},
- {0x77FC,2,{0xB3,0x4D,0x00,0x00,}},
- {0x77FD,2,{0xCE,0xF9,0x00,0x00,}},
- {0x77FE,2,{0xB7,0xAF,0x00,0x00,}},
- {0x77FF,2,{0xBF,0xF3,0x00,0x00,}},
- {0x7800,2,{0xED,0xB8,0x00,0x00,}},
- {0x7801,2,{0xC2,0xEB,0x00,0x00,}},
- {0x7802,2,{0xC9,0xB0,0x00,0x00,}},
- {0x7803,2,{0xB3,0x4E,0x00,0x00,}},
- {0x7804,2,{0xB3,0x4F,0x00,0x00,}},
- {0x7805,2,{0xB3,0x50,0x00,0x00,}},
- {0x7806,2,{0xB3,0x51,0x00,0x00,}},
- {0x7807,2,{0xB3,0x52,0x00,0x00,}},
- {0x7808,2,{0xB3,0x53,0x00,0x00,}},
- {0x7809,2,{0xED,0xB9,0x00,0x00,}},
- {0x780A,2,{0xB3,0x54,0x00,0x00,}},
- {0x780B,2,{0xB3,0x55,0x00,0x00,}},
- {0x780C,2,{0xC6,0xF6,0x00,0x00,}},
- {0x780D,2,{0xBF,0xB3,0x00,0x00,}},
- {0x780E,2,{0xB3,0x56,0x00,0x00,}},
- {0x780F,2,{0xB3,0x57,0x00,0x00,}},
- {0x7810,2,{0xB3,0x58,0x00,0x00,}},
- {0x7811,2,{0xED,0xBC,0x00,0x00,}},
- {0x7812,2,{0xC5,0xF8,0x00,0x00,}},
- {0x7813,2,{0xB3,0x59,0x00,0x00,}},
- {0x7814,2,{0xD1,0xD0,0x00,0x00,}},
- {0x7815,2,{0xB3,0x5A,0x00,0x00,}},
- {0x7816,2,{0xD7,0xA9,0x00,0x00,}},
- {0x7817,2,{0xED,0xBA,0x00,0x00,}},
- {0x7818,2,{0xED,0xBB,0x00,0x00,}},
- {0x7819,2,{0xB3,0x5B,0x00,0x00,}},
- {0x781A,2,{0xD1,0xE2,0x00,0x00,}},
- {0x781B,2,{0xB3,0x5C,0x00,0x00,}},
- {0x781C,2,{0xED,0xBF,0x00,0x00,}},
- {0x781D,2,{0xED,0xC0,0x00,0x00,}},
- {0x781E,2,{0xB3,0x5D,0x00,0x00,}},
- {0x781F,2,{0xED,0xC4,0x00,0x00,}},
- {0x7820,2,{0xB3,0x5E,0x00,0x00,}},
- {0x7821,2,{0xB3,0x5F,0x00,0x00,}},
- {0x7822,2,{0xB3,0x60,0x00,0x00,}},
- {0x7823,2,{0xED,0xC8,0x00,0x00,}},
- {0x7824,2,{0xB3,0x61,0x00,0x00,}},
- {0x7825,2,{0xED,0xC6,0x00,0x00,}},
- {0x7826,2,{0xED,0xCE,0x00,0x00,}},
- {0x7827,2,{0xD5,0xE8,0x00,0x00,}},
- {0x7828,2,{0xB3,0x62,0x00,0x00,}},
- {0x7829,2,{0xED,0xC9,0x00,0x00,}},
- {0x782A,2,{0xB3,0x63,0x00,0x00,}},
- {0x782B,2,{0xB3,0x64,0x00,0x00,}},
- {0x782C,2,{0xED,0xC7,0x00,0x00,}},
- {0x782D,2,{0xED,0xBE,0x00,0x00,}},
- {0x782E,2,{0xB3,0x65,0x00,0x00,}},
- {0x782F,2,{0xB3,0x66,0x00,0x00,}},
- {0x7830,2,{0xC5,0xE9,0x00,0x00,}},
- {0x7831,2,{0xB3,0x67,0x00,0x00,}},
- {0x7832,2,{0xB3,0x68,0x00,0x00,}},
- {0x7833,2,{0xB3,0x69,0x00,0x00,}},
- {0x7834,2,{0xC6,0xC6,0x00,0x00,}},
- {0x7835,2,{0xB3,0x6A,0x00,0x00,}},
- {0x7836,2,{0xB3,0x6B,0x00,0x00,}},
- {0x7837,2,{0xC9,0xE9,0x00,0x00,}},
- {0x7838,2,{0xD4,0xD2,0x00,0x00,}},
- {0x7839,2,{0xED,0xC1,0x00,0x00,}},
- {0x783A,2,{0xED,0xC2,0x00,0x00,}},
- {0x783B,2,{0xED,0xC3,0x00,0x00,}},
- {0x783C,2,{0xED,0xC5,0x00,0x00,}},
- {0x783D,2,{0xB3,0x6C,0x00,0x00,}},
- {0x783E,2,{0xC0,0xF9,0x00,0x00,}},
- {0x783F,2,{0xB3,0x6D,0x00,0x00,}},
- {0x7840,2,{0xB4,0xA1,0x00,0x00,}},
- {0x7841,2,{0xB3,0x6E,0x00,0x00,}},
- {0x7842,2,{0xB3,0x6F,0x00,0x00,}},
- {0x7843,2,{0xB3,0x70,0x00,0x00,}},
- {0x7844,2,{0xB3,0x71,0x00,0x00,}},
- {0x7845,2,{0xB9,0xE8,0x00,0x00,}},
- {0x7846,2,{0xB3,0x72,0x00,0x00,}},
- {0x7847,2,{0xED,0xD0,0x00,0x00,}},
- {0x7848,2,{0xB3,0x73,0x00,0x00,}},
- {0x7849,2,{0xB3,0x74,0x00,0x00,}},
- {0x784A,2,{0xB3,0x75,0x00,0x00,}},
- {0x784B,2,{0xB3,0x76,0x00,0x00,}},
- {0x784C,2,{0xED,0xD1,0x00,0x00,}},
- {0x784D,2,{0xB3,0x77,0x00,0x00,}},
- {0x784E,2,{0xED,0xCA,0x00,0x00,}},
- {0x784F,2,{0xB3,0x78,0x00,0x00,}},
- {0x7850,2,{0xED,0xCF,0x00,0x00,}},
- {0x7851,2,{0xB3,0x79,0x00,0x00,}},
- {0x7852,2,{0xCE,0xF8,0x00,0x00,}},
- {0x7853,2,{0xB3,0x7A,0x00,0x00,}},
- {0x7854,2,{0xB3,0x7B,0x00,0x00,}},
- {0x7855,2,{0xCB,0xB6,0x00,0x00,}},
- {0x7856,2,{0xED,0xCC,0x00,0x00,}},
- {0x7857,2,{0xED,0xCD,0x00,0x00,}},
- {0x7858,2,{0xB3,0x7C,0x00,0x00,}},
- {0x7859,2,{0xB3,0x7D,0x00,0x00,}},
- {0x785A,2,{0xB3,0x7E,0x00,0x00,}},
- {0x785B,2,{0xB3,0x80,0x00,0x00,}},
- {0x785C,2,{0xB3,0x81,0x00,0x00,}},
- {0x785D,2,{0xCF,0xF5,0x00,0x00,}},
- {0x785E,2,{0xB3,0x82,0x00,0x00,}},
- {0x785F,2,{0xB3,0x83,0x00,0x00,}},
- {0x7860,2,{0xB3,0x84,0x00,0x00,}},
- {0x7861,2,{0xB3,0x85,0x00,0x00,}},
- {0x7862,2,{0xB3,0x86,0x00,0x00,}},
- {0x7863,2,{0xB3,0x87,0x00,0x00,}},
- {0x7864,2,{0xB3,0x88,0x00,0x00,}},
- {0x7865,2,{0xB3,0x89,0x00,0x00,}},
- {0x7866,2,{0xB3,0x8A,0x00,0x00,}},
- {0x7867,2,{0xB3,0x8B,0x00,0x00,}},
- {0x7868,2,{0xB3,0x8C,0x00,0x00,}},
- {0x7869,2,{0xB3,0x8D,0x00,0x00,}},
- {0x786A,2,{0xED,0xD2,0x00,0x00,}},
- {0x786B,2,{0xC1,0xF2,0x00,0x00,}},
- {0x786C,2,{0xD3,0xB2,0x00,0x00,}},
- {0x786D,2,{0xED,0xCB,0x00,0x00,}},
- {0x786E,2,{0xC8,0xB7,0x00,0x00,}},
- {0x786F,2,{0xB3,0x8E,0x00,0x00,}},
- {0x7870,2,{0xB3,0x8F,0x00,0x00,}},
- {0x7871,2,{0xB3,0x90,0x00,0x00,}},
- {0x7872,2,{0xB3,0x91,0x00,0x00,}},
- {0x7873,2,{0xB3,0x92,0x00,0x00,}},
- {0x7874,2,{0xB3,0x93,0x00,0x00,}},
- {0x7875,2,{0xB3,0x94,0x00,0x00,}},
- {0x7876,2,{0xB3,0x95,0x00,0x00,}},
- {0x7877,2,{0xBC,0xEF,0x00,0x00,}},
- {0x7878,2,{0xB3,0x96,0x00,0x00,}},
- {0x7879,2,{0xB3,0x97,0x00,0x00,}},
- {0x787A,2,{0xB3,0x98,0x00,0x00,}},
- {0x787B,2,{0xB3,0x99,0x00,0x00,}},
- {0x787C,2,{0xC5,0xF0,0x00,0x00,}},
- {0x787D,2,{0xB3,0x9A,0x00,0x00,}},
- {0x787E,2,{0xB3,0x9B,0x00,0x00,}},
- {0x787F,2,{0xB3,0x9C,0x00,0x00,}},
- {0x7880,2,{0xB3,0x9D,0x00,0x00,}},
- {0x7881,2,{0xB3,0x9E,0x00,0x00,}},
- {0x7882,2,{0xB3,0x9F,0x00,0x00,}},
- {0x7883,2,{0xB3,0xA0,0x00,0x00,}},
- {0x7884,2,{0xB4,0x40,0x00,0x00,}},
- {0x7885,2,{0xB4,0x41,0x00,0x00,}},
- {0x7886,2,{0xB4,0x42,0x00,0x00,}},
- {0x7887,2,{0xED,0xD6,0x00,0x00,}},
- {0x7888,2,{0xB4,0x43,0x00,0x00,}},
- {0x7889,2,{0xB5,0xEF,0x00,0x00,}},
- {0x788A,2,{0xB4,0x44,0x00,0x00,}},
- {0x788B,2,{0xB4,0x45,0x00,0x00,}},
- {0x788C,2,{0xC2,0xB5,0x00,0x00,}},
- {0x788D,2,{0xB0,0xAD,0x00,0x00,}},
- {0x788E,2,{0xCB,0xE9,0x00,0x00,}},
- {0x788F,2,{0xB4,0x46,0x00,0x00,}},
- {0x7890,2,{0xB4,0x47,0x00,0x00,}},
- {0x7891,2,{0xB1,0xAE,0x00,0x00,}},
- {0x7892,2,{0xB4,0x48,0x00,0x00,}},
- {0x7893,2,{0xED,0xD4,0x00,0x00,}},
- {0x7894,2,{0xB4,0x49,0x00,0x00,}},
- {0x7895,2,{0xB4,0x4A,0x00,0x00,}},
- {0x7896,2,{0xB4,0x4B,0x00,0x00,}},
- {0x7897,2,{0xCD,0xEB,0x00,0x00,}},
- {0x7898,2,{0xB5,0xE2,0x00,0x00,}},
- {0x7899,2,{0xB4,0x4C,0x00,0x00,}},
- {0x789A,2,{0xED,0xD5,0x00,0x00,}},
- {0x789B,2,{0xED,0xD3,0x00,0x00,}},
- {0x789C,2,{0xED,0xD7,0x00,0x00,}},
- {0x789D,2,{0xB4,0x4D,0x00,0x00,}},
- {0x789E,2,{0xB4,0x4E,0x00,0x00,}},
- {0x789F,2,{0xB5,0xFA,0x00,0x00,}},
- {0x78A0,2,{0xB4,0x4F,0x00,0x00,}},
- {0x78A1,2,{0xED,0xD8,0x00,0x00,}},
- {0x78A2,2,{0xB4,0x50,0x00,0x00,}},
- {0x78A3,2,{0xED,0xD9,0x00,0x00,}},
- {0x78A4,2,{0xB4,0x51,0x00,0x00,}},
- {0x78A5,2,{0xED,0xDC,0x00,0x00,}},
- {0x78A6,2,{0xB4,0x52,0x00,0x00,}},
- {0x78A7,2,{0xB1,0xCC,0x00,0x00,}},
- {0x78A8,2,{0xB4,0x53,0x00,0x00,}},
- {0x78A9,2,{0xB4,0x54,0x00,0x00,}},
- {0x78AA,2,{0xB4,0x55,0x00,0x00,}},
- {0x78AB,2,{0xB4,0x56,0x00,0x00,}},
- {0x78AC,2,{0xB4,0x57,0x00,0x00,}},
- {0x78AD,2,{0xB4,0x58,0x00,0x00,}},
- {0x78AE,2,{0xB4,0x59,0x00,0x00,}},
- {0x78AF,2,{0xB4,0x5A,0x00,0x00,}},
- {0x78B0,2,{0xC5,0xF6,0x00,0x00,}},
- {0x78B1,2,{0xBC,0xEE,0x00,0x00,}},
- {0x78B2,2,{0xED,0xDA,0x00,0x00,}},
- {0x78B3,2,{0xCC,0xBC,0x00,0x00,}},
- {0x78B4,2,{0xB2,0xEA,0x00,0x00,}},
- {0x78B5,2,{0xB4,0x5B,0x00,0x00,}},
- {0x78B6,2,{0xB4,0x5C,0x00,0x00,}},
- {0x78B7,2,{0xB4,0x5D,0x00,0x00,}},
- {0x78B8,2,{0xB4,0x5E,0x00,0x00,}},
- {0x78B9,2,{0xED,0xDB,0x00,0x00,}},
- {0x78BA,2,{0xB4,0x5F,0x00,0x00,}},
- {0x78BB,2,{0xB4,0x60,0x00,0x00,}},
- {0x78BC,2,{0xB4,0x61,0x00,0x00,}},
- {0x78BD,2,{0xB4,0x62,0x00,0x00,}},
- {0x78BE,2,{0xC4,0xEB,0x00,0x00,}},
- {0x78BF,2,{0xB4,0x63,0x00,0x00,}},
- {0x78C0,2,{0xB4,0x64,0x00,0x00,}},
- {0x78C1,2,{0xB4,0xC5,0x00,0x00,}},
- {0x78C2,2,{0xB4,0x65,0x00,0x00,}},
- {0x78C3,2,{0xB4,0x66,0x00,0x00,}},
- {0x78C4,2,{0xB4,0x67,0x00,0x00,}},
- {0x78C5,2,{0xB0,0xF5,0x00,0x00,}},
- {0x78C6,2,{0xB4,0x68,0x00,0x00,}},
- {0x78C7,2,{0xB4,0x69,0x00,0x00,}},
- {0x78C8,2,{0xB4,0x6A,0x00,0x00,}},
- {0x78C9,2,{0xED,0xDF,0x00,0x00,}},
- {0x78CA,2,{0xC0,0xDA,0x00,0x00,}},
- {0x78CB,2,{0xB4,0xE8,0x00,0x00,}},
- {0x78CC,2,{0xB4,0x6B,0x00,0x00,}},
- {0x78CD,2,{0xB4,0x6C,0x00,0x00,}},
- {0x78CE,2,{0xB4,0x6D,0x00,0x00,}},
- {0x78CF,2,{0xB4,0x6E,0x00,0x00,}},
- {0x78D0,2,{0xC5,0xCD,0x00,0x00,}},
- {0x78D1,2,{0xB4,0x6F,0x00,0x00,}},
- {0x78D2,2,{0xB4,0x70,0x00,0x00,}},
- {0x78D3,2,{0xB4,0x71,0x00,0x00,}},
- {0x78D4,2,{0xED,0xDD,0x00,0x00,}},
- {0x78D5,2,{0xBF,0xC4,0x00,0x00,}},
- {0x78D6,2,{0xB4,0x72,0x00,0x00,}},
- {0x78D7,2,{0xB4,0x73,0x00,0x00,}},
- {0x78D8,2,{0xB4,0x74,0x00,0x00,}},
- {0x78D9,2,{0xED,0xDE,0x00,0x00,}},
- {0x78DA,2,{0xB4,0x75,0x00,0x00,}},
- {0x78DB,2,{0xB4,0x76,0x00,0x00,}},
- {0x78DC,2,{0xB4,0x77,0x00,0x00,}},
- {0x78DD,2,{0xB4,0x78,0x00,0x00,}},
- {0x78DE,2,{0xB4,0x79,0x00,0x00,}},
- {0x78DF,2,{0xB4,0x7A,0x00,0x00,}},
- {0x78E0,2,{0xB4,0x7B,0x00,0x00,}},
- {0x78E1,2,{0xB4,0x7C,0x00,0x00,}},
- {0x78E2,2,{0xB4,0x7D,0x00,0x00,}},
- {0x78E3,2,{0xB4,0x7E,0x00,0x00,}},
- {0x78E4,2,{0xB4,0x80,0x00,0x00,}},
- {0x78E5,2,{0xB4,0x81,0x00,0x00,}},
- {0x78E6,2,{0xB4,0x82,0x00,0x00,}},
- {0x78E7,2,{0xB4,0x83,0x00,0x00,}},
- {0x78E8,2,{0xC4,0xA5,0x00,0x00,}},
- {0x78E9,2,{0xB4,0x84,0x00,0x00,}},
- {0x78EA,2,{0xB4,0x85,0x00,0x00,}},
- {0x78EB,2,{0xB4,0x86,0x00,0x00,}},
- {0x78EC,2,{0xED,0xE0,0x00,0x00,}},
- {0x78ED,2,{0xB4,0x87,0x00,0x00,}},
- {0x78EE,2,{0xB4,0x88,0x00,0x00,}},
- {0x78EF,2,{0xB4,0x89,0x00,0x00,}},
- {0x78F0,2,{0xB4,0x8A,0x00,0x00,}},
- {0x78F1,2,{0xB4,0x8B,0x00,0x00,}},
- {0x78F2,2,{0xED,0xE1,0x00,0x00,}},
- {0x78F3,2,{0xB4,0x8C,0x00,0x00,}},
- {0x78F4,2,{0xED,0xE3,0x00,0x00,}},
- {0x78F5,2,{0xB4,0x8D,0x00,0x00,}},
- {0x78F6,2,{0xB4,0x8E,0x00,0x00,}},
- {0x78F7,2,{0xC1,0xD7,0x00,0x00,}},
- {0x78F8,2,{0xB4,0x8F,0x00,0x00,}},
- {0x78F9,2,{0xB4,0x90,0x00,0x00,}},
- {0x78FA,2,{0xBB,0xC7,0x00,0x00,}},
- {0x78FB,2,{0xB4,0x91,0x00,0x00,}},
- {0x78FC,2,{0xB4,0x92,0x00,0x00,}},
- {0x78FD,2,{0xB4,0x93,0x00,0x00,}},
- {0x78FE,2,{0xB4,0x94,0x00,0x00,}},
- {0x78FF,2,{0xB4,0x95,0x00,0x00,}},
- {0x7900,2,{0xB4,0x96,0x00,0x00,}},
- {0x7901,2,{0xBD,0xB8,0x00,0x00,}},
- {0x7902,2,{0xB4,0x97,0x00,0x00,}},
- {0x7903,2,{0xB4,0x98,0x00,0x00,}},
- {0x7904,2,{0xB4,0x99,0x00,0x00,}},
- {0x7905,2,{0xED,0xE2,0x00,0x00,}},
- {0x7906,2,{0xB4,0x9A,0x00,0x00,}},
- {0x7907,2,{0xB4,0x9B,0x00,0x00,}},
- {0x7908,2,{0xB4,0x9C,0x00,0x00,}},
- {0x7909,2,{0xB4,0x9D,0x00,0x00,}},
- {0x790A,2,{0xB4,0x9E,0x00,0x00,}},
- {0x790B,2,{0xB4,0x9F,0x00,0x00,}},
- {0x790C,2,{0xB4,0xA0,0x00,0x00,}},
- {0x790D,2,{0xB5,0x40,0x00,0x00,}},
- {0x790E,2,{0xB5,0x41,0x00,0x00,}},
- {0x790F,2,{0xB5,0x42,0x00,0x00,}},
- {0x7910,2,{0xB5,0x43,0x00,0x00,}},
- {0x7911,2,{0xB5,0x44,0x00,0x00,}},
- {0x7912,2,{0xB5,0x45,0x00,0x00,}},
- {0x7913,2,{0xED,0xE4,0x00,0x00,}},
- {0x7914,2,{0xB5,0x46,0x00,0x00,}},
- {0x7915,2,{0xB5,0x47,0x00,0x00,}},
- {0x7916,2,{0xB5,0x48,0x00,0x00,}},
- {0x7917,2,{0xB5,0x49,0x00,0x00,}},
- {0x7918,2,{0xB5,0x4A,0x00,0x00,}},
- {0x7919,2,{0xB5,0x4B,0x00,0x00,}},
- {0x791A,2,{0xB5,0x4C,0x00,0x00,}},
- {0x791B,2,{0xB5,0x4D,0x00,0x00,}},
- {0x791C,2,{0xB5,0x4E,0x00,0x00,}},
- {0x791D,2,{0xB5,0x4F,0x00,0x00,}},
- {0x791E,2,{0xED,0xE6,0x00,0x00,}},
- {0x791F,2,{0xB5,0x50,0x00,0x00,}},
- {0x7920,2,{0xB5,0x51,0x00,0x00,}},
- {0x7921,2,{0xB5,0x52,0x00,0x00,}},
- {0x7922,2,{0xB5,0x53,0x00,0x00,}},
- {0x7923,2,{0xB5,0x54,0x00,0x00,}},
- {0x7924,2,{0xED,0xE5,0x00,0x00,}},
- {0x7925,2,{0xB5,0x55,0x00,0x00,}},
- {0x7926,2,{0xB5,0x56,0x00,0x00,}},
- {0x7927,2,{0xB5,0x57,0x00,0x00,}},
- {0x7928,2,{0xB5,0x58,0x00,0x00,}},
- {0x7929,2,{0xB5,0x59,0x00,0x00,}},
- {0x792A,2,{0xB5,0x5A,0x00,0x00,}},
- {0x792B,2,{0xB5,0x5B,0x00,0x00,}},
- {0x792C,2,{0xB5,0x5C,0x00,0x00,}},
- {0x792D,2,{0xB5,0x5D,0x00,0x00,}},
- {0x792E,2,{0xB5,0x5E,0x00,0x00,}},
- {0x792F,2,{0xB5,0x5F,0x00,0x00,}},
- {0x7930,2,{0xB5,0x60,0x00,0x00,}},
- {0x7931,2,{0xB5,0x61,0x00,0x00,}},
- {0x7932,2,{0xB5,0x62,0x00,0x00,}},
- {0x7933,2,{0xB5,0x63,0x00,0x00,}},
- {0x7934,2,{0xED,0xE7,0x00,0x00,}},
- {0x7935,2,{0xB5,0x64,0x00,0x00,}},
- {0x7936,2,{0xB5,0x65,0x00,0x00,}},
- {0x7937,2,{0xB5,0x66,0x00,0x00,}},
- {0x7938,2,{0xB5,0x67,0x00,0x00,}},
- {0x7939,2,{0xB5,0x68,0x00,0x00,}},
- {0x793A,2,{0xCA,0xBE,0x00,0x00,}},
- {0x793B,2,{0xEC,0xEA,0x00,0x00,}},
- {0x793C,2,{0xC0,0xF1,0x00,0x00,}},
- {0x793D,2,{0xB5,0x69,0x00,0x00,}},
- {0x793E,2,{0xC9,0xE7,0x00,0x00,}},
- {0x793F,2,{0xB5,0x6A,0x00,0x00,}},
- {0x7940,2,{0xEC,0xEB,0x00,0x00,}},
- {0x7941,2,{0xC6,0xEE,0x00,0x00,}},
- {0x7942,2,{0xB5,0x6B,0x00,0x00,}},
- {0x7943,2,{0xB5,0x6C,0x00,0x00,}},
- {0x7944,2,{0xB5,0x6D,0x00,0x00,}},
- {0x7945,2,{0xB5,0x6E,0x00,0x00,}},
- {0x7946,2,{0xEC,0xEC,0x00,0x00,}},
- {0x7947,2,{0xB5,0x6F,0x00,0x00,}},
- {0x7948,2,{0xC6,0xED,0x00,0x00,}},
- {0x7949,2,{0xEC,0xED,0x00,0x00,}},
- {0x794A,2,{0xB5,0x70,0x00,0x00,}},
- {0x794B,2,{0xB5,0x71,0x00,0x00,}},
- {0x794C,2,{0xB5,0x72,0x00,0x00,}},
- {0x794D,2,{0xB5,0x73,0x00,0x00,}},
- {0x794E,2,{0xB5,0x74,0x00,0x00,}},
- {0x794F,2,{0xB5,0x75,0x00,0x00,}},
- {0x7950,2,{0xB5,0x76,0x00,0x00,}},
- {0x7951,2,{0xB5,0x77,0x00,0x00,}},
- {0x7952,2,{0xB5,0x78,0x00,0x00,}},
- {0x7953,2,{0xEC,0xF0,0x00,0x00,}},
- {0x7954,2,{0xB5,0x79,0x00,0x00,}},
- {0x7955,2,{0xB5,0x7A,0x00,0x00,}},
- {0x7956,2,{0xD7,0xE6,0x00,0x00,}},
- {0x7957,2,{0xEC,0xF3,0x00,0x00,}},
- {0x7958,2,{0xB5,0x7B,0x00,0x00,}},
- {0x7959,2,{0xB5,0x7C,0x00,0x00,}},
- {0x795A,2,{0xEC,0xF1,0x00,0x00,}},
- {0x795B,2,{0xEC,0xEE,0x00,0x00,}},
- {0x795C,2,{0xEC,0xEF,0x00,0x00,}},
- {0x795D,2,{0xD7,0xA3,0x00,0x00,}},
- {0x795E,2,{0xC9,0xF1,0x00,0x00,}},
- {0x795F,2,{0xCB,0xEE,0x00,0x00,}},
- {0x7960,2,{0xEC,0xF4,0x00,0x00,}},
- {0x7961,2,{0xB5,0x7D,0x00,0x00,}},
- {0x7962,2,{0xEC,0xF2,0x00,0x00,}},
- {0x7963,2,{0xB5,0x7E,0x00,0x00,}},
- {0x7964,2,{0xB5,0x80,0x00,0x00,}},
- {0x7965,2,{0xCF,0xE9,0x00,0x00,}},
- {0x7966,2,{0xB5,0x81,0x00,0x00,}},
- {0x7967,2,{0xEC,0xF6,0x00,0x00,}},
- {0x7968,2,{0xC6,0xB1,0x00,0x00,}},
- {0x7969,2,{0xB5,0x82,0x00,0x00,}},
- {0x796A,2,{0xB5,0x83,0x00,0x00,}},
- {0x796B,2,{0xB5,0x84,0x00,0x00,}},
- {0x796C,2,{0xB5,0x85,0x00,0x00,}},
- {0x796D,2,{0xBC,0xC0,0x00,0x00,}},
- {0x796E,2,{0xB5,0x86,0x00,0x00,}},
- {0x796F,2,{0xEC,0xF5,0x00,0x00,}},
- {0x7970,2,{0xB5,0x87,0x00,0x00,}},
- {0x7971,2,{0xB5,0x88,0x00,0x00,}},
- {0x7972,2,{0xB5,0x89,0x00,0x00,}},
- {0x7973,2,{0xB5,0x8A,0x00,0x00,}},
- {0x7974,2,{0xB5,0x8B,0x00,0x00,}},
- {0x7975,2,{0xB5,0x8C,0x00,0x00,}},
- {0x7976,2,{0xB5,0x8D,0x00,0x00,}},
- {0x7977,2,{0xB5,0xBB,0x00,0x00,}},
- {0x7978,2,{0xBB,0xF6,0x00,0x00,}},
- {0x7979,2,{0xB5,0x8E,0x00,0x00,}},
- {0x797A,2,{0xEC,0xF7,0x00,0x00,}},
- {0x797B,2,{0xB5,0x8F,0x00,0x00,}},
- {0x797C,2,{0xB5,0x90,0x00,0x00,}},
- {0x797D,2,{0xB5,0x91,0x00,0x00,}},
- {0x797E,2,{0xB5,0x92,0x00,0x00,}},
- {0x797F,2,{0xB5,0x93,0x00,0x00,}},
- {0x7980,2,{0xD9,0xF7,0x00,0x00,}},
- {0x7981,2,{0xBD,0xFB,0x00,0x00,}},
- {0x7982,2,{0xB5,0x94,0x00,0x00,}},
- {0x7983,2,{0xB5,0x95,0x00,0x00,}},
- {0x7984,2,{0xC2,0xBB,0x00,0x00,}},
- {0x7985,2,{0xEC,0xF8,0x00,0x00,}},
- {0x7986,2,{0xB5,0x96,0x00,0x00,}},
- {0x7987,2,{0xB5,0x97,0x00,0x00,}},
- {0x7988,2,{0xB5,0x98,0x00,0x00,}},
- {0x7989,2,{0xB5,0x99,0x00,0x00,}},
- {0x798A,2,{0xEC,0xF9,0x00,0x00,}},
- {0x798B,2,{0xB5,0x9A,0x00,0x00,}},
- {0x798C,2,{0xB5,0x9B,0x00,0x00,}},
- {0x798D,2,{0xB5,0x9C,0x00,0x00,}},
- {0x798E,2,{0xB5,0x9D,0x00,0x00,}},
- {0x798F,2,{0xB8,0xA3,0x00,0x00,}},
- {0x7990,2,{0xB5,0x9E,0x00,0x00,}},
- {0x7991,2,{0xB5,0x9F,0x00,0x00,}},
- {0x7992,2,{0xB5,0xA0,0x00,0x00,}},
- {0x7993,2,{0xB6,0x40,0x00,0x00,}},
- {0x7994,2,{0xB6,0x41,0x00,0x00,}},
- {0x7995,2,{0xB6,0x42,0x00,0x00,}},
- {0x7996,2,{0xB6,0x43,0x00,0x00,}},
- {0x7997,2,{0xB6,0x44,0x00,0x00,}},
- {0x7998,2,{0xB6,0x45,0x00,0x00,}},
- {0x7999,2,{0xB6,0x46,0x00,0x00,}},
- {0x799A,2,{0xEC,0xFA,0x00,0x00,}},
- {0x799B,2,{0xB6,0x47,0x00,0x00,}},
- {0x799C,2,{0xB6,0x48,0x00,0x00,}},
- {0x799D,2,{0xB6,0x49,0x00,0x00,}},
- {0x799E,2,{0xB6,0x4A,0x00,0x00,}},
- {0x799F,2,{0xB6,0x4B,0x00,0x00,}},
- {0x79A0,2,{0xB6,0x4C,0x00,0x00,}},
- {0x79A1,2,{0xB6,0x4D,0x00,0x00,}},
- {0x79A2,2,{0xB6,0x4E,0x00,0x00,}},
- {0x79A3,2,{0xB6,0x4F,0x00,0x00,}},
- {0x79A4,2,{0xB6,0x50,0x00,0x00,}},
- {0x79A5,2,{0xB6,0x51,0x00,0x00,}},
- {0x79A6,2,{0xB6,0x52,0x00,0x00,}},
- {0x79A7,2,{0xEC,0xFB,0x00,0x00,}},
- {0x79A8,2,{0xB6,0x53,0x00,0x00,}},
- {0x79A9,2,{0xB6,0x54,0x00,0x00,}},
- {0x79AA,2,{0xB6,0x55,0x00,0x00,}},
- {0x79AB,2,{0xB6,0x56,0x00,0x00,}},
- {0x79AC,2,{0xB6,0x57,0x00,0x00,}},
- {0x79AD,2,{0xB6,0x58,0x00,0x00,}},
- {0x79AE,2,{0xB6,0x59,0x00,0x00,}},
- {0x79AF,2,{0xB6,0x5A,0x00,0x00,}},
- {0x79B0,2,{0xB6,0x5B,0x00,0x00,}},
- {0x79B1,2,{0xB6,0x5C,0x00,0x00,}},
- {0x79B2,2,{0xB6,0x5D,0x00,0x00,}},
- {0x79B3,2,{0xEC,0xFC,0x00,0x00,}},
- {0x79B4,2,{0xB6,0x5E,0x00,0x00,}},
- {0x79B5,2,{0xB6,0x5F,0x00,0x00,}},
- {0x79B6,2,{0xB6,0x60,0x00,0x00,}},
- {0x79B7,2,{0xB6,0x61,0x00,0x00,}},
- {0x79B8,2,{0xB6,0x62,0x00,0x00,}},
- {0x79B9,2,{0xD3,0xED,0x00,0x00,}},
- {0x79BA,2,{0xD8,0xAE,0x00,0x00,}},
- {0x79BB,2,{0xC0,0xEB,0x00,0x00,}},
- {0x79BC,2,{0xB6,0x63,0x00,0x00,}},
- {0x79BD,2,{0xC7,0xDD,0x00,0x00,}},
- {0x79BE,2,{0xBA,0xCC,0x00,0x00,}},
- {0x79BF,2,{0xB6,0x64,0x00,0x00,}},
- {0x79C0,2,{0xD0,0xE3,0x00,0x00,}},
- {0x79C1,2,{0xCB,0xBD,0x00,0x00,}},
- {0x79C2,2,{0xB6,0x65,0x00,0x00,}},
- {0x79C3,2,{0xCD,0xBA,0x00,0x00,}},
- {0x79C4,2,{0xB6,0x66,0x00,0x00,}},
- {0x79C5,2,{0xB6,0x67,0x00,0x00,}},
- {0x79C6,2,{0xB8,0xD1,0x00,0x00,}},
- {0x79C7,2,{0xB6,0x68,0x00,0x00,}},
- {0x79C8,2,{0xB6,0x69,0x00,0x00,}},
- {0x79C9,2,{0xB1,0xFC,0x00,0x00,}},
- {0x79CA,2,{0xB6,0x6A,0x00,0x00,}},
- {0x79CB,2,{0xC7,0xEF,0x00,0x00,}},
- {0x79CC,2,{0xB6,0x6B,0x00,0x00,}},
- {0x79CD,2,{0xD6,0xD6,0x00,0x00,}},
- {0x79CE,2,{0xB6,0x6C,0x00,0x00,}},
- {0x79CF,2,{0xB6,0x6D,0x00,0x00,}},
- {0x79D0,2,{0xB6,0x6E,0x00,0x00,}},
- {0x79D1,2,{0xBF,0xC6,0x00,0x00,}},
- {0x79D2,2,{0xC3,0xEB,0x00,0x00,}},
- {0x79D3,2,{0xB6,0x6F,0x00,0x00,}},
- {0x79D4,2,{0xB6,0x70,0x00,0x00,}},
- {0x79D5,2,{0xEF,0xF5,0x00,0x00,}},
- {0x79D6,2,{0xB6,0x71,0x00,0x00,}},
- {0x79D7,2,{0xB6,0x72,0x00,0x00,}},
- {0x79D8,2,{0xC3,0xD8,0x00,0x00,}},
- {0x79D9,2,{0xB6,0x73,0x00,0x00,}},
- {0x79DA,2,{0xB6,0x74,0x00,0x00,}},
- {0x79DB,2,{0xB6,0x75,0x00,0x00,}},
- {0x79DC,2,{0xB6,0x76,0x00,0x00,}},
- {0x79DD,2,{0xB6,0x77,0x00,0x00,}},
- {0x79DE,2,{0xB6,0x78,0x00,0x00,}},
- {0x79DF,2,{0xD7,0xE2,0x00,0x00,}},
- {0x79E0,2,{0xB6,0x79,0x00,0x00,}},
- {0x79E1,2,{0xB6,0x7A,0x00,0x00,}},
- {0x79E2,2,{0xB6,0x7B,0x00,0x00,}},
- {0x79E3,2,{0xEF,0xF7,0x00,0x00,}},
- {0x79E4,2,{0xB3,0xD3,0x00,0x00,}},
- {0x79E5,2,{0xB6,0x7C,0x00,0x00,}},
- {0x79E6,2,{0xC7,0xD8,0x00,0x00,}},
- {0x79E7,2,{0xD1,0xED,0x00,0x00,}},
- {0x79E8,2,{0xB6,0x7D,0x00,0x00,}},
- {0x79E9,2,{0xD6,0xC8,0x00,0x00,}},
- {0x79EA,2,{0xB6,0x7E,0x00,0x00,}},
- {0x79EB,2,{0xEF,0xF8,0x00,0x00,}},
- {0x79EC,2,{0xB6,0x80,0x00,0x00,}},
- {0x79ED,2,{0xEF,0xF6,0x00,0x00,}},
- {0x79EE,2,{0xB6,0x81,0x00,0x00,}},
- {0x79EF,2,{0xBB,0xFD,0x00,0x00,}},
- {0x79F0,2,{0xB3,0xC6,0x00,0x00,}},
- {0x79F1,2,{0xB6,0x82,0x00,0x00,}},
- {0x79F2,2,{0xB6,0x83,0x00,0x00,}},
- {0x79F3,2,{0xB6,0x84,0x00,0x00,}},
- {0x79F4,2,{0xB6,0x85,0x00,0x00,}},
- {0x79F5,2,{0xB6,0x86,0x00,0x00,}},
- {0x79F6,2,{0xB6,0x87,0x00,0x00,}},
- {0x79F7,2,{0xB6,0x88,0x00,0x00,}},
- {0x79F8,2,{0xBD,0xD5,0x00,0x00,}},
- {0x79F9,2,{0xB6,0x89,0x00,0x00,}},
- {0x79FA,2,{0xB6,0x8A,0x00,0x00,}},
- {0x79FB,2,{0xD2,0xC6,0x00,0x00,}},
- {0x79FC,2,{0xB6,0x8B,0x00,0x00,}},
- {0x79FD,2,{0xBB,0xE0,0x00,0x00,}},
- {0x79FE,2,{0xB6,0x8C,0x00,0x00,}},
- {0x79FF,2,{0xB6,0x8D,0x00,0x00,}},
- {0x7A00,2,{0xCF,0xA1,0x00,0x00,}},
- {0x7A01,2,{0xB6,0x8E,0x00,0x00,}},
- {0x7A02,2,{0xEF,0xFC,0x00,0x00,}},
- {0x7A03,2,{0xEF,0xFB,0x00,0x00,}},
- {0x7A04,2,{0xB6,0x8F,0x00,0x00,}},
- {0x7A05,2,{0xB6,0x90,0x00,0x00,}},
- {0x7A06,2,{0xEF,0xF9,0x00,0x00,}},
- {0x7A07,2,{0xB6,0x91,0x00,0x00,}},
- {0x7A08,2,{0xB6,0x92,0x00,0x00,}},
- {0x7A09,2,{0xB6,0x93,0x00,0x00,}},
- {0x7A0A,2,{0xB6,0x94,0x00,0x00,}},
- {0x7A0B,2,{0xB3,0xCC,0x00,0x00,}},
- {0x7A0C,2,{0xB6,0x95,0x00,0x00,}},
- {0x7A0D,2,{0xC9,0xD4,0x00,0x00,}},
- {0x7A0E,2,{0xCB,0xB0,0x00,0x00,}},
- {0x7A0F,2,{0xB6,0x96,0x00,0x00,}},
- {0x7A10,2,{0xB6,0x97,0x00,0x00,}},
- {0x7A11,2,{0xB6,0x98,0x00,0x00,}},
- {0x7A12,2,{0xB6,0x99,0x00,0x00,}},
- {0x7A13,2,{0xB6,0x9A,0x00,0x00,}},
- {0x7A14,2,{0xEF,0xFE,0x00,0x00,}},
- {0x7A15,2,{0xB6,0x9B,0x00,0x00,}},
- {0x7A16,2,{0xB6,0x9C,0x00,0x00,}},
- {0x7A17,2,{0xB0,0xDE,0x00,0x00,}},
- {0x7A18,2,{0xB6,0x9D,0x00,0x00,}},
- {0x7A19,2,{0xB6,0x9E,0x00,0x00,}},
- {0x7A1A,2,{0xD6,0xC9,0x00,0x00,}},
- {0x7A1B,2,{0xB6,0x9F,0x00,0x00,}},
- {0x7A1C,2,{0xB6,0xA0,0x00,0x00,}},
- {0x7A1D,2,{0xB7,0x40,0x00,0x00,}},
- {0x7A1E,2,{0xEF,0xFD,0x00,0x00,}},
- {0x7A1F,2,{0xB7,0x41,0x00,0x00,}},
- {0x7A20,2,{0xB3,0xED,0x00,0x00,}},
- {0x7A21,2,{0xB7,0x42,0x00,0x00,}},
- {0x7A22,2,{0xB7,0x43,0x00,0x00,}},
- {0x7A23,2,{0xF6,0xD5,0x00,0x00,}},
- {0x7A24,2,{0xB7,0x44,0x00,0x00,}},
- {0x7A25,2,{0xB7,0x45,0x00,0x00,}},
- {0x7A26,2,{0xB7,0x46,0x00,0x00,}},
- {0x7A27,2,{0xB7,0x47,0x00,0x00,}},
- {0x7A28,2,{0xB7,0x48,0x00,0x00,}},
- {0x7A29,2,{0xB7,0x49,0x00,0x00,}},
- {0x7A2A,2,{0xB7,0x4A,0x00,0x00,}},
- {0x7A2B,2,{0xB7,0x4B,0x00,0x00,}},
- {0x7A2C,2,{0xB7,0x4C,0x00,0x00,}},
- {0x7A2D,2,{0xB7,0x4D,0x00,0x00,}},
- {0x7A2E,2,{0xB7,0x4E,0x00,0x00,}},
- {0x7A2F,2,{0xB7,0x4F,0x00,0x00,}},
- {0x7A30,2,{0xB7,0x50,0x00,0x00,}},
- {0x7A31,2,{0xB7,0x51,0x00,0x00,}},
- {0x7A32,2,{0xB7,0x52,0x00,0x00,}},
- {0x7A33,2,{0xCE,0xC8,0x00,0x00,}},
- {0x7A34,2,{0xB7,0x53,0x00,0x00,}},
- {0x7A35,2,{0xB7,0x54,0x00,0x00,}},
- {0x7A36,2,{0xB7,0x55,0x00,0x00,}},
- {0x7A37,2,{0xF0,0xA2,0x00,0x00,}},
- {0x7A38,2,{0xB7,0x56,0x00,0x00,}},
- {0x7A39,2,{0xF0,0xA1,0x00,0x00,}},
- {0x7A3A,2,{0xB7,0x57,0x00,0x00,}},
- {0x7A3B,2,{0xB5,0xBE,0x00,0x00,}},
- {0x7A3C,2,{0xBC,0xDA,0x00,0x00,}},
- {0x7A3D,2,{0xBB,0xFC,0x00,0x00,}},
- {0x7A3E,2,{0xB7,0x58,0x00,0x00,}},
- {0x7A3F,2,{0xB8,0xE5,0x00,0x00,}},
- {0x7A40,2,{0xB7,0x59,0x00,0x00,}},
- {0x7A41,2,{0xB7,0x5A,0x00,0x00,}},
- {0x7A42,2,{0xB7,0x5B,0x00,0x00,}},
- {0x7A43,2,{0xB7,0x5C,0x00,0x00,}},
- {0x7A44,2,{0xB7,0x5D,0x00,0x00,}},
- {0x7A45,2,{0xB7,0x5E,0x00,0x00,}},
- {0x7A46,2,{0xC4,0xC2,0x00,0x00,}},
- {0x7A47,2,{0xB7,0x5F,0x00,0x00,}},
- {0x7A48,2,{0xB7,0x60,0x00,0x00,}},
- {0x7A49,2,{0xB7,0x61,0x00,0x00,}},
- {0x7A4A,2,{0xB7,0x62,0x00,0x00,}},
- {0x7A4B,2,{0xB7,0x63,0x00,0x00,}},
- {0x7A4C,2,{0xB7,0x64,0x00,0x00,}},
- {0x7A4D,2,{0xB7,0x65,0x00,0x00,}},
- {0x7A4E,2,{0xB7,0x66,0x00,0x00,}},
- {0x7A4F,2,{0xB7,0x67,0x00,0x00,}},
- {0x7A50,2,{0xB7,0x68,0x00,0x00,}},
- {0x7A51,2,{0xF0,0xA3,0x00,0x00,}},
- {0x7A52,2,{0xB7,0x69,0x00,0x00,}},
- {0x7A53,2,{0xB7,0x6A,0x00,0x00,}},
- {0x7A54,2,{0xB7,0x6B,0x00,0x00,}},
- {0x7A55,2,{0xB7,0x6C,0x00,0x00,}},
- {0x7A56,2,{0xB7,0x6D,0x00,0x00,}},
- {0x7A57,2,{0xCB,0xEB,0x00,0x00,}},
- {0x7A58,2,{0xB7,0x6E,0x00,0x00,}},
- {0x7A59,2,{0xB7,0x6F,0x00,0x00,}},
- {0x7A5A,2,{0xB7,0x70,0x00,0x00,}},
- {0x7A5B,2,{0xB7,0x71,0x00,0x00,}},
- {0x7A5C,2,{0xB7,0x72,0x00,0x00,}},
- {0x7A5D,2,{0xB7,0x73,0x00,0x00,}},
- {0x7A5E,2,{0xB7,0x74,0x00,0x00,}},
- {0x7A5F,2,{0xB7,0x75,0x00,0x00,}},
- {0x7A60,2,{0xB7,0x76,0x00,0x00,}},
- {0x7A61,2,{0xB7,0x77,0x00,0x00,}},
- {0x7A62,2,{0xB7,0x78,0x00,0x00,}},
- {0x7A63,2,{0xB7,0x79,0x00,0x00,}},
- {0x7A64,2,{0xB7,0x7A,0x00,0x00,}},
- {0x7A65,2,{0xB7,0x7B,0x00,0x00,}},
- {0x7A66,2,{0xB7,0x7C,0x00,0x00,}},
- {0x7A67,2,{0xB7,0x7D,0x00,0x00,}},
- {0x7A68,2,{0xB7,0x7E,0x00,0x00,}},
- {0x7A69,2,{0xB7,0x80,0x00,0x00,}},
- {0x7A6A,2,{0xB7,0x81,0x00,0x00,}},
- {0x7A6B,2,{0xB7,0x82,0x00,0x00,}},
- {0x7A6C,2,{0xB7,0x83,0x00,0x00,}},
- {0x7A6D,2,{0xB7,0x84,0x00,0x00,}},
- {0x7A6E,2,{0xB7,0x85,0x00,0x00,}},
- {0x7A6F,2,{0xB7,0x86,0x00,0x00,}},
- {0x7A70,2,{0xF0,0xA6,0x00,0x00,}},
- {0x7A71,2,{0xB7,0x87,0x00,0x00,}},
- {0x7A72,2,{0xB7,0x88,0x00,0x00,}},
- {0x7A73,2,{0xB7,0x89,0x00,0x00,}},
- {0x7A74,2,{0xD1,0xA8,0x00,0x00,}},
- {0x7A75,2,{0xB7,0x8A,0x00,0x00,}},
- {0x7A76,2,{0xBE,0xBF,0x00,0x00,}},
- {0x7A77,2,{0xC7,0xEE,0x00,0x00,}},
- {0x7A78,2,{0xF1,0xB6,0x00,0x00,}},
- {0x7A79,2,{0xF1,0xB7,0x00,0x00,}},
- {0x7A7A,2,{0xBF,0xD5,0x00,0x00,}},
- {0x7A7B,2,{0xB7,0x8B,0x00,0x00,}},
- {0x7A7C,2,{0xB7,0x8C,0x00,0x00,}},
- {0x7A7D,2,{0xB7,0x8D,0x00,0x00,}},
- {0x7A7E,2,{0xB7,0x8E,0x00,0x00,}},
- {0x7A7F,2,{0xB4,0xA9,0x00,0x00,}},
- {0x7A80,2,{0xF1,0xB8,0x00,0x00,}},
- {0x7A81,2,{0xCD,0xBB,0x00,0x00,}},
- {0x7A82,2,{0xB7,0x8F,0x00,0x00,}},
- {0x7A83,2,{0xC7,0xD4,0x00,0x00,}},
- {0x7A84,2,{0xD5,0xAD,0x00,0x00,}},
- {0x7A85,2,{0xB7,0x90,0x00,0x00,}},
- {0x7A86,2,{0xF1,0xB9,0x00,0x00,}},
- {0x7A87,2,{0xB7,0x91,0x00,0x00,}},
- {0x7A88,2,{0xF1,0xBA,0x00,0x00,}},
- {0x7A89,2,{0xB7,0x92,0x00,0x00,}},
- {0x7A8A,2,{0xB7,0x93,0x00,0x00,}},
- {0x7A8B,2,{0xB7,0x94,0x00,0x00,}},
- {0x7A8C,2,{0xB7,0x95,0x00,0x00,}},
- {0x7A8D,2,{0xC7,0xCF,0x00,0x00,}},
- {0x7A8E,2,{0xB7,0x96,0x00,0x00,}},
- {0x7A8F,2,{0xB7,0x97,0x00,0x00,}},
- {0x7A90,2,{0xB7,0x98,0x00,0x00,}},
- {0x7A91,2,{0xD2,0xA4,0x00,0x00,}},
- {0x7A92,2,{0xD6,0xCF,0x00,0x00,}},
- {0x7A93,2,{0xB7,0x99,0x00,0x00,}},
- {0x7A94,2,{0xB7,0x9A,0x00,0x00,}},
- {0x7A95,2,{0xF1,0xBB,0x00,0x00,}},
- {0x7A96,2,{0xBD,0xD1,0x00,0x00,}},
- {0x7A97,2,{0xB4,0xB0,0x00,0x00,}},
- {0x7A98,2,{0xBE,0xBD,0x00,0x00,}},
- {0x7A99,2,{0xB7,0x9B,0x00,0x00,}},
- {0x7A9A,2,{0xB7,0x9C,0x00,0x00,}},
- {0x7A9B,2,{0xB7,0x9D,0x00,0x00,}},
- {0x7A9C,2,{0xB4,0xDC,0x00,0x00,}},
- {0x7A9D,2,{0xCE,0xD1,0x00,0x00,}},
- {0x7A9E,2,{0xB7,0x9E,0x00,0x00,}},
- {0x7A9F,2,{0xBF,0xDF,0x00,0x00,}},
- {0x7AA0,2,{0xF1,0xBD,0x00,0x00,}},
- {0x7AA1,2,{0xB7,0x9F,0x00,0x00,}},
- {0x7AA2,2,{0xB7,0xA0,0x00,0x00,}},
- {0x7AA3,2,{0xB8,0x40,0x00,0x00,}},
- {0x7AA4,2,{0xB8,0x41,0x00,0x00,}},
- {0x7AA5,2,{0xBF,0xFA,0x00,0x00,}},
- {0x7AA6,2,{0xF1,0xBC,0x00,0x00,}},
- {0x7AA7,2,{0xB8,0x42,0x00,0x00,}},
- {0x7AA8,2,{0xF1,0xBF,0x00,0x00,}},
- {0x7AA9,2,{0xB8,0x43,0x00,0x00,}},
- {0x7AAA,2,{0xB8,0x44,0x00,0x00,}},
- {0x7AAB,2,{0xB8,0x45,0x00,0x00,}},
- {0x7AAC,2,{0xF1,0xBE,0x00,0x00,}},
- {0x7AAD,2,{0xF1,0xC0,0x00,0x00,}},
- {0x7AAE,2,{0xB8,0x46,0x00,0x00,}},
- {0x7AAF,2,{0xB8,0x47,0x00,0x00,}},
- {0x7AB0,2,{0xB8,0x48,0x00,0x00,}},
- {0x7AB1,2,{0xB8,0x49,0x00,0x00,}},
- {0x7AB2,2,{0xB8,0x4A,0x00,0x00,}},
- {0x7AB3,2,{0xF1,0xC1,0x00,0x00,}},
- {0x7AB4,2,{0xB8,0x4B,0x00,0x00,}},
- {0x7AB5,2,{0xB8,0x4C,0x00,0x00,}},
- {0x7AB6,2,{0xB8,0x4D,0x00,0x00,}},
- {0x7AB7,2,{0xB8,0x4E,0x00,0x00,}},
- {0x7AB8,2,{0xB8,0x4F,0x00,0x00,}},
- {0x7AB9,2,{0xB8,0x50,0x00,0x00,}},
- {0x7ABA,2,{0xB8,0x51,0x00,0x00,}},
- {0x7ABB,2,{0xB8,0x52,0x00,0x00,}},
- {0x7ABC,2,{0xB8,0x53,0x00,0x00,}},
- {0x7ABD,2,{0xB8,0x54,0x00,0x00,}},
- {0x7ABE,2,{0xB8,0x55,0x00,0x00,}},
- {0x7ABF,2,{0xC1,0xFE,0x00,0x00,}},
- {0x7AC0,2,{0xB8,0x56,0x00,0x00,}},
- {0x7AC1,2,{0xB8,0x57,0x00,0x00,}},
- {0x7AC2,2,{0xB8,0x58,0x00,0x00,}},
- {0x7AC3,2,{0xB8,0x59,0x00,0x00,}},
- {0x7AC4,2,{0xB8,0x5A,0x00,0x00,}},
- {0x7AC5,2,{0xB8,0x5B,0x00,0x00,}},
- {0x7AC6,2,{0xB8,0x5C,0x00,0x00,}},
- {0x7AC7,2,{0xB8,0x5D,0x00,0x00,}},
- {0x7AC8,2,{0xB8,0x5E,0x00,0x00,}},
- {0x7AC9,2,{0xB8,0x5F,0x00,0x00,}},
- {0x7ACA,2,{0xB8,0x60,0x00,0x00,}},
- {0x7ACB,2,{0xC1,0xA2,0x00,0x00,}},
- {0x7ACC,2,{0xB8,0x61,0x00,0x00,}},
- {0x7ACD,2,{0xB8,0x62,0x00,0x00,}},
- {0x7ACE,2,{0xB8,0x63,0x00,0x00,}},
- {0x7ACF,2,{0xB8,0x64,0x00,0x00,}},
- {0x7AD0,2,{0xB8,0x65,0x00,0x00,}},
- {0x7AD1,2,{0xB8,0x66,0x00,0x00,}},
- {0x7AD2,2,{0xB8,0x67,0x00,0x00,}},
- {0x7AD3,2,{0xB8,0x68,0x00,0x00,}},
- {0x7AD4,2,{0xB8,0x69,0x00,0x00,}},
- {0x7AD5,2,{0xB8,0x6A,0x00,0x00,}},
- {0x7AD6,2,{0xCA,0xFA,0x00,0x00,}},
- {0x7AD7,2,{0xB8,0x6B,0x00,0x00,}},
- {0x7AD8,2,{0xB8,0x6C,0x00,0x00,}},
- {0x7AD9,2,{0xD5,0xBE,0x00,0x00,}},
- {0x7ADA,2,{0xB8,0x6D,0x00,0x00,}},
- {0x7ADB,2,{0xB8,0x6E,0x00,0x00,}},
- {0x7ADC,2,{0xB8,0x6F,0x00,0x00,}},
- {0x7ADD,2,{0xB8,0x70,0x00,0x00,}},
- {0x7ADE,2,{0xBE,0xBA,0x00,0x00,}},
- {0x7ADF,2,{0xBE,0xB9,0x00,0x00,}},
- {0x7AE0,2,{0xD5,0xC2,0x00,0x00,}},
- {0x7AE1,2,{0xB8,0x71,0x00,0x00,}},
- {0x7AE2,2,{0xB8,0x72,0x00,0x00,}},
- {0x7AE3,2,{0xBF,0xA2,0x00,0x00,}},
- {0x7AE4,2,{0xB8,0x73,0x00,0x00,}},
- {0x7AE5,2,{0xCD,0xAF,0x00,0x00,}},
- {0x7AE6,2,{0xF1,0xB5,0x00,0x00,}},
- {0x7AE7,2,{0xB8,0x74,0x00,0x00,}},
- {0x7AE8,2,{0xB8,0x75,0x00,0x00,}},
- {0x7AE9,2,{0xB8,0x76,0x00,0x00,}},
- {0x7AEA,2,{0xB8,0x77,0x00,0x00,}},
- {0x7AEB,2,{0xB8,0x78,0x00,0x00,}},
- {0x7AEC,2,{0xB8,0x79,0x00,0x00,}},
- {0x7AED,2,{0xBD,0xDF,0x00,0x00,}},
- {0x7AEE,2,{0xB8,0x7A,0x00,0x00,}},
- {0x7AEF,2,{0xB6,0xCB,0x00,0x00,}},
- {0x7AF0,2,{0xB8,0x7B,0x00,0x00,}},
- {0x7AF1,2,{0xB8,0x7C,0x00,0x00,}},
- {0x7AF2,2,{0xB8,0x7D,0x00,0x00,}},
- {0x7AF3,2,{0xB8,0x7E,0x00,0x00,}},
- {0x7AF4,2,{0xB8,0x80,0x00,0x00,}},
- {0x7AF5,2,{0xB8,0x81,0x00,0x00,}},
- {0x7AF6,2,{0xB8,0x82,0x00,0x00,}},
- {0x7AF7,2,{0xB8,0x83,0x00,0x00,}},
- {0x7AF8,2,{0xB8,0x84,0x00,0x00,}},
- {0x7AF9,2,{0xD6,0xF1,0x00,0x00,}},
- {0x7AFA,2,{0xF3,0xC3,0x00,0x00,}},
- {0x7AFB,2,{0xB8,0x85,0x00,0x00,}},
- {0x7AFC,2,{0xB8,0x86,0x00,0x00,}},
- {0x7AFD,2,{0xF3,0xC4,0x00,0x00,}},
- {0x7AFE,2,{0xB8,0x87,0x00,0x00,}},
- {0x7AFF,2,{0xB8,0xCD,0x00,0x00,}},
- {0x7B00,2,{0xB8,0x88,0x00,0x00,}},
- {0x7B01,2,{0xB8,0x89,0x00,0x00,}},
- {0x7B02,2,{0xB8,0x8A,0x00,0x00,}},
- {0x7B03,2,{0xF3,0xC6,0x00,0x00,}},
- {0x7B04,2,{0xF3,0xC7,0x00,0x00,}},
- {0x7B05,2,{0xB8,0x8B,0x00,0x00,}},
- {0x7B06,2,{0xB0,0xCA,0x00,0x00,}},
- {0x7B07,2,{0xB8,0x8C,0x00,0x00,}},
- {0x7B08,2,{0xF3,0xC5,0x00,0x00,}},
- {0x7B09,2,{0xB8,0x8D,0x00,0x00,}},
- {0x7B0A,2,{0xF3,0xC9,0x00,0x00,}},
- {0x7B0B,2,{0xCB,0xF1,0x00,0x00,}},
- {0x7B0C,2,{0xB8,0x8E,0x00,0x00,}},
- {0x7B0D,2,{0xB8,0x8F,0x00,0x00,}},
- {0x7B0E,2,{0xB8,0x90,0x00,0x00,}},
- {0x7B0F,2,{0xF3,0xCB,0x00,0x00,}},
- {0x7B10,2,{0xB8,0x91,0x00,0x00,}},
- {0x7B11,2,{0xD0,0xA6,0x00,0x00,}},
- {0x7B12,2,{0xB8,0x92,0x00,0x00,}},
- {0x7B13,2,{0xB8,0x93,0x00,0x00,}},
- {0x7B14,2,{0xB1,0xCA,0x00,0x00,}},
- {0x7B15,2,{0xF3,0xC8,0x00,0x00,}},
- {0x7B16,2,{0xB8,0x94,0x00,0x00,}},
- {0x7B17,2,{0xB8,0x95,0x00,0x00,}},
- {0x7B18,2,{0xB8,0x96,0x00,0x00,}},
- {0x7B19,2,{0xF3,0xCF,0x00,0x00,}},
- {0x7B1A,2,{0xB8,0x97,0x00,0x00,}},
- {0x7B1B,2,{0xB5,0xD1,0x00,0x00,}},
- {0x7B1C,2,{0xB8,0x98,0x00,0x00,}},
- {0x7B1D,2,{0xB8,0x99,0x00,0x00,}},
- {0x7B1E,2,{0xF3,0xD7,0x00,0x00,}},
- {0x7B1F,2,{0xB8,0x9A,0x00,0x00,}},
- {0x7B20,2,{0xF3,0xD2,0x00,0x00,}},
- {0x7B21,2,{0xB8,0x9B,0x00,0x00,}},
- {0x7B22,2,{0xB8,0x9C,0x00,0x00,}},
- {0x7B23,2,{0xB8,0x9D,0x00,0x00,}},
- {0x7B24,2,{0xF3,0xD4,0x00,0x00,}},
- {0x7B25,2,{0xF3,0xD3,0x00,0x00,}},
- {0x7B26,2,{0xB7,0xFB,0x00,0x00,}},
- {0x7B27,2,{0xB8,0x9E,0x00,0x00,}},
- {0x7B28,2,{0xB1,0xBF,0x00,0x00,}},
- {0x7B29,2,{0xB8,0x9F,0x00,0x00,}},
- {0x7B2A,2,{0xF3,0xCE,0x00,0x00,}},
- {0x7B2B,2,{0xF3,0xCA,0x00,0x00,}},
- {0x7B2C,2,{0xB5,0xDA,0x00,0x00,}},
- {0x7B2D,2,{0xB8,0xA0,0x00,0x00,}},
- {0x7B2E,2,{0xF3,0xD0,0x00,0x00,}},
- {0x7B2F,2,{0xB9,0x40,0x00,0x00,}},
- {0x7B30,2,{0xB9,0x41,0x00,0x00,}},
- {0x7B31,2,{0xF3,0xD1,0x00,0x00,}},
- {0x7B32,2,{0xB9,0x42,0x00,0x00,}},
- {0x7B33,2,{0xF3,0xD5,0x00,0x00,}},
- {0x7B34,2,{0xB9,0x43,0x00,0x00,}},
- {0x7B35,2,{0xB9,0x44,0x00,0x00,}},
- {0x7B36,2,{0xB9,0x45,0x00,0x00,}},
- {0x7B37,2,{0xB9,0x46,0x00,0x00,}},
- {0x7B38,2,{0xF3,0xCD,0x00,0x00,}},
- {0x7B39,2,{0xB9,0x47,0x00,0x00,}},
- {0x7B3A,2,{0xBC,0xE3,0x00,0x00,}},
- {0x7B3B,2,{0xB9,0x48,0x00,0x00,}},
- {0x7B3C,2,{0xC1,0xFD,0x00,0x00,}},
- {0x7B3D,2,{0xB9,0x49,0x00,0x00,}},
- {0x7B3E,2,{0xF3,0xD6,0x00,0x00,}},
- {0x7B3F,2,{0xB9,0x4A,0x00,0x00,}},
- {0x7B40,2,{0xB9,0x4B,0x00,0x00,}},
- {0x7B41,2,{0xB9,0x4C,0x00,0x00,}},
- {0x7B42,2,{0xB9,0x4D,0x00,0x00,}},
- {0x7B43,2,{0xB9,0x4E,0x00,0x00,}},
- {0x7B44,2,{0xB9,0x4F,0x00,0x00,}},
- {0x7B45,2,{0xF3,0xDA,0x00,0x00,}},
- {0x7B46,2,{0xB9,0x50,0x00,0x00,}},
- {0x7B47,2,{0xF3,0xCC,0x00,0x00,}},
- {0x7B48,2,{0xB9,0x51,0x00,0x00,}},
- {0x7B49,2,{0xB5,0xC8,0x00,0x00,}},
- {0x7B4A,2,{0xB9,0x52,0x00,0x00,}},
- {0x7B4B,2,{0xBD,0xEE,0x00,0x00,}},
- {0x7B4C,2,{0xF3,0xDC,0x00,0x00,}},
- {0x7B4D,2,{0xB9,0x53,0x00,0x00,}},
- {0x7B4E,2,{0xB9,0x54,0x00,0x00,}},
- {0x7B4F,2,{0xB7,0xA4,0x00,0x00,}},
- {0x7B50,2,{0xBF,0xF0,0x00,0x00,}},
- {0x7B51,2,{0xD6,0xFE,0x00,0x00,}},
- {0x7B52,2,{0xCD,0xB2,0x00,0x00,}},
- {0x7B53,2,{0xB9,0x55,0x00,0x00,}},
- {0x7B54,2,{0xB4,0xF0,0x00,0x00,}},
- {0x7B55,2,{0xB9,0x56,0x00,0x00,}},
- {0x7B56,2,{0xB2,0xDF,0x00,0x00,}},
- {0x7B57,2,{0xB9,0x57,0x00,0x00,}},
- {0x7B58,2,{0xF3,0xD8,0x00,0x00,}},
- {0x7B59,2,{0xB9,0x58,0x00,0x00,}},
- {0x7B5A,2,{0xF3,0xD9,0x00,0x00,}},
- {0x7B5B,2,{0xC9,0xB8,0x00,0x00,}},
- {0x7B5C,2,{0xB9,0x59,0x00,0x00,}},
- {0x7B5D,2,{0xF3,0xDD,0x00,0x00,}},
- {0x7B5E,2,{0xB9,0x5A,0x00,0x00,}},
- {0x7B5F,2,{0xB9,0x5B,0x00,0x00,}},
- {0x7B60,2,{0xF3,0xDE,0x00,0x00,}},
- {0x7B61,2,{0xB9,0x5C,0x00,0x00,}},
- {0x7B62,2,{0xF3,0xE1,0x00,0x00,}},
- {0x7B63,2,{0xB9,0x5D,0x00,0x00,}},
- {0x7B64,2,{0xB9,0x5E,0x00,0x00,}},
- {0x7B65,2,{0xB9,0x5F,0x00,0x00,}},
- {0x7B66,2,{0xB9,0x60,0x00,0x00,}},
- {0x7B67,2,{0xB9,0x61,0x00,0x00,}},
- {0x7B68,2,{0xB9,0x62,0x00,0x00,}},
- {0x7B69,2,{0xB9,0x63,0x00,0x00,}},
- {0x7B6A,2,{0xB9,0x64,0x00,0x00,}},
- {0x7B6B,2,{0xB9,0x65,0x00,0x00,}},
- {0x7B6C,2,{0xB9,0x66,0x00,0x00,}},
- {0x7B6D,2,{0xB9,0x67,0x00,0x00,}},
- {0x7B6E,2,{0xF3,0xDF,0x00,0x00,}},
- {0x7B6F,2,{0xB9,0x68,0x00,0x00,}},
- {0x7B70,2,{0xB9,0x69,0x00,0x00,}},
- {0x7B71,2,{0xF3,0xE3,0x00,0x00,}},
- {0x7B72,2,{0xF3,0xE2,0x00,0x00,}},
- {0x7B73,2,{0xB9,0x6A,0x00,0x00,}},
- {0x7B74,2,{0xB9,0x6B,0x00,0x00,}},
- {0x7B75,2,{0xF3,0xDB,0x00,0x00,}},
- {0x7B76,2,{0xB9,0x6C,0x00,0x00,}},
- {0x7B77,2,{0xBF,0xEA,0x00,0x00,}},
- {0x7B78,2,{0xB9,0x6D,0x00,0x00,}},
- {0x7B79,2,{0xB3,0xEF,0x00,0x00,}},
- {0x7B7A,2,{0xB9,0x6E,0x00,0x00,}},
- {0x7B7B,2,{0xF3,0xE0,0x00,0x00,}},
- {0x7B7C,2,{0xB9,0x6F,0x00,0x00,}},
- {0x7B7D,2,{0xB9,0x70,0x00,0x00,}},
- {0x7B7E,2,{0xC7,0xA9,0x00,0x00,}},
- {0x7B7F,2,{0xB9,0x71,0x00,0x00,}},
- {0x7B80,2,{0xBC,0xF2,0x00,0x00,}},
- {0x7B81,2,{0xB9,0x72,0x00,0x00,}},
- {0x7B82,2,{0xB9,0x73,0x00,0x00,}},
- {0x7B83,2,{0xB9,0x74,0x00,0x00,}},
- {0x7B84,2,{0xB9,0x75,0x00,0x00,}},
- {0x7B85,2,{0xF3,0xEB,0x00,0x00,}},
- {0x7B86,2,{0xB9,0x76,0x00,0x00,}},
- {0x7B87,2,{0xB9,0x77,0x00,0x00,}},
- {0x7B88,2,{0xB9,0x78,0x00,0x00,}},
- {0x7B89,2,{0xB9,0x79,0x00,0x00,}},
- {0x7B8A,2,{0xB9,0x7A,0x00,0x00,}},
- {0x7B8B,2,{0xB9,0x7B,0x00,0x00,}},
- {0x7B8C,2,{0xB9,0x7C,0x00,0x00,}},
- {0x7B8D,2,{0xB9,0xBF,0x00,0x00,}},
- {0x7B8E,2,{0xB9,0x7D,0x00,0x00,}},
- {0x7B8F,2,{0xB9,0x7E,0x00,0x00,}},
- {0x7B90,2,{0xF3,0xE4,0x00,0x00,}},
- {0x7B91,2,{0xB9,0x80,0x00,0x00,}},
- {0x7B92,2,{0xB9,0x81,0x00,0x00,}},
- {0x7B93,2,{0xB9,0x82,0x00,0x00,}},
- {0x7B94,2,{0xB2,0xAD,0x00,0x00,}},
- {0x7B95,2,{0xBB,0xFE,0x00,0x00,}},
- {0x7B96,2,{0xB9,0x83,0x00,0x00,}},
- {0x7B97,2,{0xCB,0xE3,0x00,0x00,}},
- {0x7B98,2,{0xB9,0x84,0x00,0x00,}},
- {0x7B99,2,{0xB9,0x85,0x00,0x00,}},
- {0x7B9A,2,{0xB9,0x86,0x00,0x00,}},
- {0x7B9B,2,{0xB9,0x87,0x00,0x00,}},
- {0x7B9C,2,{0xF3,0xED,0x00,0x00,}},
- {0x7B9D,2,{0xF3,0xE9,0x00,0x00,}},
- {0x7B9E,2,{0xB9,0x88,0x00,0x00,}},
- {0x7B9F,2,{0xB9,0x89,0x00,0x00,}},
- {0x7BA0,2,{0xB9,0x8A,0x00,0x00,}},
- {0x7BA1,2,{0xB9,0xDC,0x00,0x00,}},
- {0x7BA2,2,{0xF3,0xEE,0x00,0x00,}},
- {0x7BA3,2,{0xB9,0x8B,0x00,0x00,}},
- {0x7BA4,2,{0xB9,0x8C,0x00,0x00,}},
- {0x7BA5,2,{0xB9,0x8D,0x00,0x00,}},
- {0x7BA6,2,{0xF3,0xE5,0x00,0x00,}},
- {0x7BA7,2,{0xF3,0xE6,0x00,0x00,}},
- {0x7BA8,2,{0xF3,0xEA,0x00,0x00,}},
- {0x7BA9,2,{0xC2,0xE1,0x00,0x00,}},
- {0x7BAA,2,{0xF3,0xEC,0x00,0x00,}},
- {0x7BAB,2,{0xF3,0xEF,0x00,0x00,}},
- {0x7BAC,2,{0xF3,0xE8,0x00,0x00,}},
- {0x7BAD,2,{0xBC,0xFD,0x00,0x00,}},
- {0x7BAE,2,{0xB9,0x8E,0x00,0x00,}},
- {0x7BAF,2,{0xB9,0x8F,0x00,0x00,}},
- {0x7BB0,2,{0xB9,0x90,0x00,0x00,}},
- {0x7BB1,2,{0xCF,0xE4,0x00,0x00,}},
- {0x7BB2,2,{0xB9,0x91,0x00,0x00,}},
- {0x7BB3,2,{0xB9,0x92,0x00,0x00,}},
- {0x7BB4,2,{0xF3,0xF0,0x00,0x00,}},
- {0x7BB5,2,{0xB9,0x93,0x00,0x00,}},
- {0x7BB6,2,{0xB9,0x94,0x00,0x00,}},
- {0x7BB7,2,{0xB9,0x95,0x00,0x00,}},
- {0x7BB8,2,{0xF3,0xE7,0x00,0x00,}},
- {0x7BB9,2,{0xB9,0x96,0x00,0x00,}},
- {0x7BBA,2,{0xB9,0x97,0x00,0x00,}},
- {0x7BBB,2,{0xB9,0x98,0x00,0x00,}},
- {0x7BBC,2,{0xB9,0x99,0x00,0x00,}},
- {0x7BBD,2,{0xB9,0x9A,0x00,0x00,}},
- {0x7BBE,2,{0xB9,0x9B,0x00,0x00,}},
- {0x7BBF,2,{0xB9,0x9C,0x00,0x00,}},
- {0x7BC0,2,{0xB9,0x9D,0x00,0x00,}},
- {0x7BC1,2,{0xF3,0xF2,0x00,0x00,}},
- {0x7BC2,2,{0xB9,0x9E,0x00,0x00,}},
- {0x7BC3,2,{0xB9,0x9F,0x00,0x00,}},
- {0x7BC4,2,{0xB9,0xA0,0x00,0x00,}},
- {0x7BC5,2,{0xBA,0x40,0x00,0x00,}},
- {0x7BC6,2,{0xD7,0xAD,0x00,0x00,}},
- {0x7BC7,2,{0xC6,0xAA,0x00,0x00,}},
- {0x7BC8,2,{0xBA,0x41,0x00,0x00,}},
- {0x7BC9,2,{0xBA,0x42,0x00,0x00,}},
- {0x7BCA,2,{0xBA,0x43,0x00,0x00,}},
- {0x7BCB,2,{0xBA,0x44,0x00,0x00,}},
- {0x7BCC,2,{0xF3,0xF3,0x00,0x00,}},
- {0x7BCD,2,{0xBA,0x45,0x00,0x00,}},
- {0x7BCE,2,{0xBA,0x46,0x00,0x00,}},
- {0x7BCF,2,{0xBA,0x47,0x00,0x00,}},
- {0x7BD0,2,{0xBA,0x48,0x00,0x00,}},
- {0x7BD1,2,{0xF3,0xF1,0x00,0x00,}},
- {0x7BD2,2,{0xBA,0x49,0x00,0x00,}},
- {0x7BD3,2,{0xC2,0xA8,0x00,0x00,}},
- {0x7BD4,2,{0xBA,0x4A,0x00,0x00,}},
- {0x7BD5,2,{0xBA,0x4B,0x00,0x00,}},
- {0x7BD6,2,{0xBA,0x4C,0x00,0x00,}},
- {0x7BD7,2,{0xBA,0x4D,0x00,0x00,}},
- {0x7BD8,2,{0xBA,0x4E,0x00,0x00,}},
- {0x7BD9,2,{0xB8,0xDD,0x00,0x00,}},
- {0x7BDA,2,{0xF3,0xF5,0x00,0x00,}},
- {0x7BDB,2,{0xBA,0x4F,0x00,0x00,}},
- {0x7BDC,2,{0xBA,0x50,0x00,0x00,}},
- {0x7BDD,2,{0xF3,0xF4,0x00,0x00,}},
- {0x7BDE,2,{0xBA,0x51,0x00,0x00,}},
- {0x7BDF,2,{0xBA,0x52,0x00,0x00,}},
- {0x7BE0,2,{0xBA,0x53,0x00,0x00,}},
- {0x7BE1,2,{0xB4,0xDB,0x00,0x00,}},
- {0x7BE2,2,{0xBA,0x54,0x00,0x00,}},
- {0x7BE3,2,{0xBA,0x55,0x00,0x00,}},
- {0x7BE4,2,{0xBA,0x56,0x00,0x00,}},
- {0x7BE5,2,{0xF3,0xF6,0x00,0x00,}},
- {0x7BE6,2,{0xF3,0xF7,0x00,0x00,}},
- {0x7BE7,2,{0xBA,0x57,0x00,0x00,}},
- {0x7BE8,2,{0xBA,0x58,0x00,0x00,}},
- {0x7BE9,2,{0xBA,0x59,0x00,0x00,}},
- {0x7BEA,2,{0xF3,0xF8,0x00,0x00,}},
- {0x7BEB,2,{0xBA,0x5A,0x00,0x00,}},
- {0x7BEC,2,{0xBA,0x5B,0x00,0x00,}},
- {0x7BED,2,{0xBA,0x5C,0x00,0x00,}},
- {0x7BEE,2,{0xC0,0xBA,0x00,0x00,}},
- {0x7BEF,2,{0xBA,0x5D,0x00,0x00,}},
- {0x7BF0,2,{0xBA,0x5E,0x00,0x00,}},
- {0x7BF1,2,{0xC0,0xE9,0x00,0x00,}},
- {0x7BF2,2,{0xBA,0x5F,0x00,0x00,}},
- {0x7BF3,2,{0xBA,0x60,0x00,0x00,}},
- {0x7BF4,2,{0xBA,0x61,0x00,0x00,}},
- {0x7BF5,2,{0xBA,0x62,0x00,0x00,}},
- {0x7BF6,2,{0xBA,0x63,0x00,0x00,}},
- {0x7BF7,2,{0xC5,0xF1,0x00,0x00,}},
- {0x7BF8,2,{0xBA,0x64,0x00,0x00,}},
- {0x7BF9,2,{0xBA,0x65,0x00,0x00,}},
- {0x7BFA,2,{0xBA,0x66,0x00,0x00,}},
- {0x7BFB,2,{0xBA,0x67,0x00,0x00,}},
- {0x7BFC,2,{0xF3,0xFB,0x00,0x00,}},
- {0x7BFD,2,{0xBA,0x68,0x00,0x00,}},
- {0x7BFE,2,{0xF3,0xFA,0x00,0x00,}},
- {0x7BFF,2,{0xBA,0x69,0x00,0x00,}},
- {0x7C00,2,{0xBA,0x6A,0x00,0x00,}},
- {0x7C01,2,{0xBA,0x6B,0x00,0x00,}},
- {0x7C02,2,{0xBA,0x6C,0x00,0x00,}},
- {0x7C03,2,{0xBA,0x6D,0x00,0x00,}},
- {0x7C04,2,{0xBA,0x6E,0x00,0x00,}},
- {0x7C05,2,{0xBA,0x6F,0x00,0x00,}},
- {0x7C06,2,{0xBA,0x70,0x00,0x00,}},
- {0x7C07,2,{0xB4,0xD8,0x00,0x00,}},
- {0x7C08,2,{0xBA,0x71,0x00,0x00,}},
- {0x7C09,2,{0xBA,0x72,0x00,0x00,}},
- {0x7C0A,2,{0xBA,0x73,0x00,0x00,}},
- {0x7C0B,2,{0xF3,0xFE,0x00,0x00,}},
- {0x7C0C,2,{0xF3,0xF9,0x00,0x00,}},
- {0x7C0D,2,{0xBA,0x74,0x00,0x00,}},
- {0x7C0E,2,{0xBA,0x75,0x00,0x00,}},
- {0x7C0F,2,{0xF3,0xFC,0x00,0x00,}},
- {0x7C10,2,{0xBA,0x76,0x00,0x00,}},
- {0x7C11,2,{0xBA,0x77,0x00,0x00,}},
- {0x7C12,2,{0xBA,0x78,0x00,0x00,}},
- {0x7C13,2,{0xBA,0x79,0x00,0x00,}},
- {0x7C14,2,{0xBA,0x7A,0x00,0x00,}},
- {0x7C15,2,{0xBA,0x7B,0x00,0x00,}},
- {0x7C16,2,{0xF3,0xFD,0x00,0x00,}},
- {0x7C17,2,{0xBA,0x7C,0x00,0x00,}},
- {0x7C18,2,{0xBA,0x7D,0x00,0x00,}},
- {0x7C19,2,{0xBA,0x7E,0x00,0x00,}},
- {0x7C1A,2,{0xBA,0x80,0x00,0x00,}},
- {0x7C1B,2,{0xBA,0x81,0x00,0x00,}},
- {0x7C1C,2,{0xBA,0x82,0x00,0x00,}},
- {0x7C1D,2,{0xBA,0x83,0x00,0x00,}},
- {0x7C1E,2,{0xBA,0x84,0x00,0x00,}},
- {0x7C1F,2,{0xF4,0xA1,0x00,0x00,}},
- {0x7C20,2,{0xBA,0x85,0x00,0x00,}},
- {0x7C21,2,{0xBA,0x86,0x00,0x00,}},
- {0x7C22,2,{0xBA,0x87,0x00,0x00,}},
- {0x7C23,2,{0xBA,0x88,0x00,0x00,}},
- {0x7C24,2,{0xBA,0x89,0x00,0x00,}},
- {0x7C25,2,{0xBA,0x8A,0x00,0x00,}},
- {0x7C26,2,{0xF4,0xA3,0x00,0x00,}},
- {0x7C27,2,{0xBB,0xC9,0x00,0x00,}},
- {0x7C28,2,{0xBA,0x8B,0x00,0x00,}},
- {0x7C29,2,{0xBA,0x8C,0x00,0x00,}},
- {0x7C2A,2,{0xF4,0xA2,0x00,0x00,}},
- {0x7C2B,2,{0xBA,0x8D,0x00,0x00,}},
- {0x7C2C,2,{0xBA,0x8E,0x00,0x00,}},
- {0x7C2D,2,{0xBA,0x8F,0x00,0x00,}},
- {0x7C2E,2,{0xBA,0x90,0x00,0x00,}},
- {0x7C2F,2,{0xBA,0x91,0x00,0x00,}},
- {0x7C30,2,{0xBA,0x92,0x00,0x00,}},
- {0x7C31,2,{0xBA,0x93,0x00,0x00,}},
- {0x7C32,2,{0xBA,0x94,0x00,0x00,}},
- {0x7C33,2,{0xBA,0x95,0x00,0x00,}},
- {0x7C34,2,{0xBA,0x96,0x00,0x00,}},
- {0x7C35,2,{0xBA,0x97,0x00,0x00,}},
- {0x7C36,2,{0xBA,0x98,0x00,0x00,}},
- {0x7C37,2,{0xBA,0x99,0x00,0x00,}},
- {0x7C38,2,{0xF4,0xA4,0x00,0x00,}},
- {0x7C39,2,{0xBA,0x9A,0x00,0x00,}},
- {0x7C3A,2,{0xBA,0x9B,0x00,0x00,}},
- {0x7C3B,2,{0xBA,0x9C,0x00,0x00,}},
- {0x7C3C,2,{0xBA,0x9D,0x00,0x00,}},
- {0x7C3D,2,{0xBA,0x9E,0x00,0x00,}},
- {0x7C3E,2,{0xBA,0x9F,0x00,0x00,}},
- {0x7C3F,2,{0xB2,0xBE,0x00,0x00,}},
- {0x7C40,2,{0xF4,0xA6,0x00,0x00,}},
- {0x7C41,2,{0xF4,0xA5,0x00,0x00,}},
- {0x7C42,2,{0xBA,0xA0,0x00,0x00,}},
- {0x7C43,2,{0xBB,0x40,0x00,0x00,}},
- {0x7C44,2,{0xBB,0x41,0x00,0x00,}},
- {0x7C45,2,{0xBB,0x42,0x00,0x00,}},
- {0x7C46,2,{0xBB,0x43,0x00,0x00,}},
- {0x7C47,2,{0xBB,0x44,0x00,0x00,}},
- {0x7C48,2,{0xBB,0x45,0x00,0x00,}},
- {0x7C49,2,{0xBB,0x46,0x00,0x00,}},
- {0x7C4A,2,{0xBB,0x47,0x00,0x00,}},
- {0x7C4B,2,{0xBB,0x48,0x00,0x00,}},
- {0x7C4C,2,{0xBB,0x49,0x00,0x00,}},
- {0x7C4D,2,{0xBC,0xAE,0x00,0x00,}},
- {0x7C4E,2,{0xBB,0x4A,0x00,0x00,}},
- {0x7C4F,2,{0xBB,0x4B,0x00,0x00,}},
- {0x7C50,2,{0xBB,0x4C,0x00,0x00,}},
- {0x7C51,2,{0xBB,0x4D,0x00,0x00,}},
- {0x7C52,2,{0xBB,0x4E,0x00,0x00,}},
- {0x7C53,2,{0xBB,0x4F,0x00,0x00,}},
- {0x7C54,2,{0xBB,0x50,0x00,0x00,}},
- {0x7C55,2,{0xBB,0x51,0x00,0x00,}},
- {0x7C56,2,{0xBB,0x52,0x00,0x00,}},
- {0x7C57,2,{0xBB,0x53,0x00,0x00,}},
- {0x7C58,2,{0xBB,0x54,0x00,0x00,}},
- {0x7C59,2,{0xBB,0x55,0x00,0x00,}},
- {0x7C5A,2,{0xBB,0x56,0x00,0x00,}},
- {0x7C5B,2,{0xBB,0x57,0x00,0x00,}},
- {0x7C5C,2,{0xBB,0x58,0x00,0x00,}},
- {0x7C5D,2,{0xBB,0x59,0x00,0x00,}},
- {0x7C5E,2,{0xBB,0x5A,0x00,0x00,}},
- {0x7C5F,2,{0xBB,0x5B,0x00,0x00,}},
- {0x7C60,2,{0xBB,0x5C,0x00,0x00,}},
- {0x7C61,2,{0xBB,0x5D,0x00,0x00,}},
- {0x7C62,2,{0xBB,0x5E,0x00,0x00,}},
- {0x7C63,2,{0xBB,0x5F,0x00,0x00,}},
- {0x7C64,2,{0xBB,0x60,0x00,0x00,}},
- {0x7C65,2,{0xBB,0x61,0x00,0x00,}},
- {0x7C66,2,{0xBB,0x62,0x00,0x00,}},
- {0x7C67,2,{0xBB,0x63,0x00,0x00,}},
- {0x7C68,2,{0xBB,0x64,0x00,0x00,}},
- {0x7C69,2,{0xBB,0x65,0x00,0x00,}},
- {0x7C6A,2,{0xBB,0x66,0x00,0x00,}},
- {0x7C6B,2,{0xBB,0x67,0x00,0x00,}},
- {0x7C6C,2,{0xBB,0x68,0x00,0x00,}},
- {0x7C6D,2,{0xBB,0x69,0x00,0x00,}},
- {0x7C6E,2,{0xBB,0x6A,0x00,0x00,}},
- {0x7C6F,2,{0xBB,0x6B,0x00,0x00,}},
- {0x7C70,2,{0xBB,0x6C,0x00,0x00,}},
- {0x7C71,2,{0xBB,0x6D,0x00,0x00,}},
- {0x7C72,2,{0xBB,0x6E,0x00,0x00,}},
- {0x7C73,2,{0xC3,0xD7,0x00,0x00,}},
- {0x7C74,2,{0xD9,0xE1,0x00,0x00,}},
- {0x7C75,2,{0xBB,0x6F,0x00,0x00,}},
- {0x7C76,2,{0xBB,0x70,0x00,0x00,}},
- {0x7C77,2,{0xBB,0x71,0x00,0x00,}},
- {0x7C78,2,{0xBB,0x72,0x00,0x00,}},
- {0x7C79,2,{0xBB,0x73,0x00,0x00,}},
- {0x7C7A,2,{0xBB,0x74,0x00,0x00,}},
- {0x7C7B,2,{0xC0,0xE0,0x00,0x00,}},
- {0x7C7C,2,{0xF4,0xCC,0x00,0x00,}},
- {0x7C7D,2,{0xD7,0xD1,0x00,0x00,}},
- {0x7C7E,2,{0xBB,0x75,0x00,0x00,}},
- {0x7C7F,2,{0xBB,0x76,0x00,0x00,}},
- {0x7C80,2,{0xBB,0x77,0x00,0x00,}},
- {0x7C81,2,{0xBB,0x78,0x00,0x00,}},
- {0x7C82,2,{0xBB,0x79,0x00,0x00,}},
- {0x7C83,2,{0xBB,0x7A,0x00,0x00,}},
- {0x7C84,2,{0xBB,0x7B,0x00,0x00,}},
- {0x7C85,2,{0xBB,0x7C,0x00,0x00,}},
- {0x7C86,2,{0xBB,0x7D,0x00,0x00,}},
- {0x7C87,2,{0xBB,0x7E,0x00,0x00,}},
- {0x7C88,2,{0xBB,0x80,0x00,0x00,}},
- {0x7C89,2,{0xB7,0xDB,0x00,0x00,}},
- {0x7C8A,2,{0xBB,0x81,0x00,0x00,}},
- {0x7C8B,2,{0xBB,0x82,0x00,0x00,}},
- {0x7C8C,2,{0xBB,0x83,0x00,0x00,}},
- {0x7C8D,2,{0xBB,0x84,0x00,0x00,}},
- {0x7C8E,2,{0xBB,0x85,0x00,0x00,}},
- {0x7C8F,2,{0xBB,0x86,0x00,0x00,}},
- {0x7C90,2,{0xBB,0x87,0x00,0x00,}},
- {0x7C91,2,{0xF4,0xCE,0x00,0x00,}},
- {0x7C92,2,{0xC1,0xA3,0x00,0x00,}},
- {0x7C93,2,{0xBB,0x88,0x00,0x00,}},
- {0x7C94,2,{0xBB,0x89,0x00,0x00,}},
- {0x7C95,2,{0xC6,0xC9,0x00,0x00,}},
- {0x7C96,2,{0xBB,0x8A,0x00,0x00,}},
- {0x7C97,2,{0xB4,0xD6,0x00,0x00,}},
- {0x7C98,2,{0xD5,0xB3,0x00,0x00,}},
- {0x7C99,2,{0xBB,0x8B,0x00,0x00,}},
- {0x7C9A,2,{0xBB,0x8C,0x00,0x00,}},
- {0x7C9B,2,{0xBB,0x8D,0x00,0x00,}},
- {0x7C9C,2,{0xF4,0xD0,0x00,0x00,}},
- {0x7C9D,2,{0xF4,0xCF,0x00,0x00,}},
- {0x7C9E,2,{0xF4,0xD1,0x00,0x00,}},
- {0x7C9F,2,{0xCB,0xDA,0x00,0x00,}},
- {0x7CA0,2,{0xBB,0x8E,0x00,0x00,}},
- {0x7CA1,2,{0xBB,0x8F,0x00,0x00,}},
- {0x7CA2,2,{0xF4,0xD2,0x00,0x00,}},
- {0x7CA3,2,{0xBB,0x90,0x00,0x00,}},
- {0x7CA4,2,{0xD4,0xC1,0x00,0x00,}},
- {0x7CA5,2,{0xD6,0xE0,0x00,0x00,}},
- {0x7CA6,2,{0xBB,0x91,0x00,0x00,}},
- {0x7CA7,2,{0xBB,0x92,0x00,0x00,}},
- {0x7CA8,2,{0xBB,0x93,0x00,0x00,}},
- {0x7CA9,2,{0xBB,0x94,0x00,0x00,}},
- {0x7CAA,2,{0xB7,0xE0,0x00,0x00,}},
- {0x7CAB,2,{0xBB,0x95,0x00,0x00,}},
- {0x7CAC,2,{0xBB,0x96,0x00,0x00,}},
- {0x7CAD,2,{0xBB,0x97,0x00,0x00,}},
- {0x7CAE,2,{0xC1,0xB8,0x00,0x00,}},
- {0x7CAF,2,{0xBB,0x98,0x00,0x00,}},
- {0x7CB0,2,{0xBB,0x99,0x00,0x00,}},
- {0x7CB1,2,{0xC1,0xBB,0x00,0x00,}},
- {0x7CB2,2,{0xF4,0xD3,0x00,0x00,}},
- {0x7CB3,2,{0xBE,0xAC,0x00,0x00,}},
- {0x7CB4,2,{0xBB,0x9A,0x00,0x00,}},
- {0x7CB5,2,{0xBB,0x9B,0x00,0x00,}},
- {0x7CB6,2,{0xBB,0x9C,0x00,0x00,}},
- {0x7CB7,2,{0xBB,0x9D,0x00,0x00,}},
- {0x7CB8,2,{0xBB,0x9E,0x00,0x00,}},
- {0x7CB9,2,{0xB4,0xE2,0x00,0x00,}},
- {0x7CBA,2,{0xBB,0x9F,0x00,0x00,}},
- {0x7CBB,2,{0xBB,0xA0,0x00,0x00,}},
- {0x7CBC,2,{0xF4,0xD4,0x00,0x00,}},
- {0x7CBD,2,{0xF4,0xD5,0x00,0x00,}},
- {0x7CBE,2,{0xBE,0xAB,0x00,0x00,}},
- {0x7CBF,2,{0xBC,0x40,0x00,0x00,}},
- {0x7CC0,2,{0xBC,0x41,0x00,0x00,}},
- {0x7CC1,2,{0xF4,0xD6,0x00,0x00,}},
- {0x7CC2,2,{0xBC,0x42,0x00,0x00,}},
- {0x7CC3,2,{0xBC,0x43,0x00,0x00,}},
- {0x7CC4,2,{0xBC,0x44,0x00,0x00,}},
- {0x7CC5,2,{0xF4,0xDB,0x00,0x00,}},
- {0x7CC6,2,{0xBC,0x45,0x00,0x00,}},
- {0x7CC7,2,{0xF4,0xD7,0x00,0x00,}},
- {0x7CC8,2,{0xF4,0xDA,0x00,0x00,}},
- {0x7CC9,2,{0xBC,0x46,0x00,0x00,}},
- {0x7CCA,2,{0xBA,0xFD,0x00,0x00,}},
- {0x7CCB,2,{0xBC,0x47,0x00,0x00,}},
- {0x7CCC,2,{0xF4,0xD8,0x00,0x00,}},
- {0x7CCD,2,{0xF4,0xD9,0x00,0x00,}},
- {0x7CCE,2,{0xBC,0x48,0x00,0x00,}},
- {0x7CCF,2,{0xBC,0x49,0x00,0x00,}},
- {0x7CD0,2,{0xBC,0x4A,0x00,0x00,}},
- {0x7CD1,2,{0xBC,0x4B,0x00,0x00,}},
- {0x7CD2,2,{0xBC,0x4C,0x00,0x00,}},
- {0x7CD3,2,{0xBC,0x4D,0x00,0x00,}},
- {0x7CD4,2,{0xBC,0x4E,0x00,0x00,}},
- {0x7CD5,2,{0xB8,0xE2,0x00,0x00,}},
- {0x7CD6,2,{0xCC,0xC7,0x00,0x00,}},
- {0x7CD7,2,{0xF4,0xDC,0x00,0x00,}},
- {0x7CD8,2,{0xBC,0x4F,0x00,0x00,}},
- {0x7CD9,2,{0xB2,0xDA,0x00,0x00,}},
- {0x7CDA,2,{0xBC,0x50,0x00,0x00,}},
- {0x7CDB,2,{0xBC,0x51,0x00,0x00,}},
- {0x7CDC,2,{0xC3,0xD3,0x00,0x00,}},
- {0x7CDD,2,{0xBC,0x52,0x00,0x00,}},
- {0x7CDE,2,{0xBC,0x53,0x00,0x00,}},
- {0x7CDF,2,{0xD4,0xE3,0x00,0x00,}},
- {0x7CE0,2,{0xBF,0xB7,0x00,0x00,}},
- {0x7CE1,2,{0xBC,0x54,0x00,0x00,}},
- {0x7CE2,2,{0xBC,0x55,0x00,0x00,}},
- {0x7CE3,2,{0xBC,0x56,0x00,0x00,}},
- {0x7CE4,2,{0xBC,0x57,0x00,0x00,}},
- {0x7CE5,2,{0xBC,0x58,0x00,0x00,}},
- {0x7CE6,2,{0xBC,0x59,0x00,0x00,}},
- {0x7CE7,2,{0xBC,0x5A,0x00,0x00,}},
- {0x7CE8,2,{0xF4,0xDD,0x00,0x00,}},
- {0x7CE9,2,{0xBC,0x5B,0x00,0x00,}},
- {0x7CEA,2,{0xBC,0x5C,0x00,0x00,}},
- {0x7CEB,2,{0xBC,0x5D,0x00,0x00,}},
- {0x7CEC,2,{0xBC,0x5E,0x00,0x00,}},
- {0x7CED,2,{0xBC,0x5F,0x00,0x00,}},
- {0x7CEE,2,{0xBC,0x60,0x00,0x00,}},
- {0x7CEF,2,{0xC5,0xB4,0x00,0x00,}},
- {0x7CF0,2,{0xBC,0x61,0x00,0x00,}},
- {0x7CF1,2,{0xBC,0x62,0x00,0x00,}},
- {0x7CF2,2,{0xBC,0x63,0x00,0x00,}},
- {0x7CF3,2,{0xBC,0x64,0x00,0x00,}},
- {0x7CF4,2,{0xBC,0x65,0x00,0x00,}},
- {0x7CF5,2,{0xBC,0x66,0x00,0x00,}},
- {0x7CF6,2,{0xBC,0x67,0x00,0x00,}},
- {0x7CF7,2,{0xBC,0x68,0x00,0x00,}},
- {0x7CF8,2,{0xF4,0xE9,0x00,0x00,}},
- {0x7CF9,2,{0xBC,0x69,0x00,0x00,}},
- {0x7CFA,2,{0xBC,0x6A,0x00,0x00,}},
- {0x7CFB,2,{0xCF,0xB5,0x00,0x00,}},
- {0x7CFC,2,{0xBC,0x6B,0x00,0x00,}},
- {0x7CFD,2,{0xBC,0x6C,0x00,0x00,}},
- {0x7CFE,2,{0xBC,0x6D,0x00,0x00,}},
- {0x7CFF,2,{0xBC,0x6E,0x00,0x00,}},
- {0x7D00,2,{0xBC,0x6F,0x00,0x00,}},
- {0x7D01,2,{0xBC,0x70,0x00,0x00,}},
- {0x7D02,2,{0xBC,0x71,0x00,0x00,}},
- {0x7D03,2,{0xBC,0x72,0x00,0x00,}},
- {0x7D04,2,{0xBC,0x73,0x00,0x00,}},
- {0x7D05,2,{0xBC,0x74,0x00,0x00,}},
- {0x7D06,2,{0xBC,0x75,0x00,0x00,}},
- {0x7D07,2,{0xBC,0x76,0x00,0x00,}},
- {0x7D08,2,{0xBC,0x77,0x00,0x00,}},
- {0x7D09,2,{0xBC,0x78,0x00,0x00,}},
- {0x7D0A,2,{0xCE,0xC9,0x00,0x00,}},
- {0x7D0B,2,{0xBC,0x79,0x00,0x00,}},
- {0x7D0C,2,{0xBC,0x7A,0x00,0x00,}},
- {0x7D0D,2,{0xBC,0x7B,0x00,0x00,}},
- {0x7D0E,2,{0xBC,0x7C,0x00,0x00,}},
- {0x7D0F,2,{0xBC,0x7D,0x00,0x00,}},
- {0x7D10,2,{0xBC,0x7E,0x00,0x00,}},
- {0x7D11,2,{0xBC,0x80,0x00,0x00,}},
- {0x7D12,2,{0xBC,0x81,0x00,0x00,}},
- {0x7D13,2,{0xBC,0x82,0x00,0x00,}},
- {0x7D14,2,{0xBC,0x83,0x00,0x00,}},
- {0x7D15,2,{0xBC,0x84,0x00,0x00,}},
- {0x7D16,2,{0xBC,0x85,0x00,0x00,}},
- {0x7D17,2,{0xBC,0x86,0x00,0x00,}},
- {0x7D18,2,{0xBC,0x87,0x00,0x00,}},
- {0x7D19,2,{0xBC,0x88,0x00,0x00,}},
- {0x7D1A,2,{0xBC,0x89,0x00,0x00,}},
- {0x7D1B,2,{0xBC,0x8A,0x00,0x00,}},
- {0x7D1C,2,{0xBC,0x8B,0x00,0x00,}},
- {0x7D1D,2,{0xBC,0x8C,0x00,0x00,}},
- {0x7D1E,2,{0xBC,0x8D,0x00,0x00,}},
- {0x7D1F,2,{0xBC,0x8E,0x00,0x00,}},
- {0x7D20,2,{0xCB,0xD8,0x00,0x00,}},
- {0x7D21,2,{0xBC,0x8F,0x00,0x00,}},
- {0x7D22,2,{0xCB,0xF7,0x00,0x00,}},
- {0x7D23,2,{0xBC,0x90,0x00,0x00,}},
- {0x7D24,2,{0xBC,0x91,0x00,0x00,}},
- {0x7D25,2,{0xBC,0x92,0x00,0x00,}},
- {0x7D26,2,{0xBC,0x93,0x00,0x00,}},
- {0x7D27,2,{0xBD,0xF4,0x00,0x00,}},
- {0x7D28,2,{0xBC,0x94,0x00,0x00,}},
- {0x7D29,2,{0xBC,0x95,0x00,0x00,}},
- {0x7D2A,2,{0xBC,0x96,0x00,0x00,}},
- {0x7D2B,2,{0xD7,0xCF,0x00,0x00,}},
- {0x7D2C,2,{0xBC,0x97,0x00,0x00,}},
- {0x7D2D,2,{0xBC,0x98,0x00,0x00,}},
- {0x7D2E,2,{0xBC,0x99,0x00,0x00,}},
- {0x7D2F,2,{0xC0,0xDB,0x00,0x00,}},
- {0x7D30,2,{0xBC,0x9A,0x00,0x00,}},
- {0x7D31,2,{0xBC,0x9B,0x00,0x00,}},
- {0x7D32,2,{0xBC,0x9C,0x00,0x00,}},
- {0x7D33,2,{0xBC,0x9D,0x00,0x00,}},
- {0x7D34,2,{0xBC,0x9E,0x00,0x00,}},
- {0x7D35,2,{0xBC,0x9F,0x00,0x00,}},
- {0x7D36,2,{0xBC,0xA0,0x00,0x00,}},
- {0x7D37,2,{0xBD,0x40,0x00,0x00,}},
- {0x7D38,2,{0xBD,0x41,0x00,0x00,}},
- {0x7D39,2,{0xBD,0x42,0x00,0x00,}},
- {0x7D3A,2,{0xBD,0x43,0x00,0x00,}},
- {0x7D3B,2,{0xBD,0x44,0x00,0x00,}},
- {0x7D3C,2,{0xBD,0x45,0x00,0x00,}},
- {0x7D3D,2,{0xBD,0x46,0x00,0x00,}},
- {0x7D3E,2,{0xBD,0x47,0x00,0x00,}},
- {0x7D3F,2,{0xBD,0x48,0x00,0x00,}},
- {0x7D40,2,{0xBD,0x49,0x00,0x00,}},
- {0x7D41,2,{0xBD,0x4A,0x00,0x00,}},
- {0x7D42,2,{0xBD,0x4B,0x00,0x00,}},
- {0x7D43,2,{0xBD,0x4C,0x00,0x00,}},
- {0x7D44,2,{0xBD,0x4D,0x00,0x00,}},
- {0x7D45,2,{0xBD,0x4E,0x00,0x00,}},
- {0x7D46,2,{0xBD,0x4F,0x00,0x00,}},
- {0x7D47,2,{0xBD,0x50,0x00,0x00,}},
- {0x7D48,2,{0xBD,0x51,0x00,0x00,}},
- {0x7D49,2,{0xBD,0x52,0x00,0x00,}},
- {0x7D4A,2,{0xBD,0x53,0x00,0x00,}},
- {0x7D4B,2,{0xBD,0x54,0x00,0x00,}},
- {0x7D4C,2,{0xBD,0x55,0x00,0x00,}},
- {0x7D4D,2,{0xBD,0x56,0x00,0x00,}},
- {0x7D4E,2,{0xBD,0x57,0x00,0x00,}},
- {0x7D4F,2,{0xBD,0x58,0x00,0x00,}},
- {0x7D50,2,{0xBD,0x59,0x00,0x00,}},
- {0x7D51,2,{0xBD,0x5A,0x00,0x00,}},
- {0x7D52,2,{0xBD,0x5B,0x00,0x00,}},
- {0x7D53,2,{0xBD,0x5C,0x00,0x00,}},
- {0x7D54,2,{0xBD,0x5D,0x00,0x00,}},
- {0x7D55,2,{0xBD,0x5E,0x00,0x00,}},
- {0x7D56,2,{0xBD,0x5F,0x00,0x00,}},
- {0x7D57,2,{0xBD,0x60,0x00,0x00,}},
- {0x7D58,2,{0xBD,0x61,0x00,0x00,}},
- {0x7D59,2,{0xBD,0x62,0x00,0x00,}},
- {0x7D5A,2,{0xBD,0x63,0x00,0x00,}},
- {0x7D5B,2,{0xBD,0x64,0x00,0x00,}},
- {0x7D5C,2,{0xBD,0x65,0x00,0x00,}},
- {0x7D5D,2,{0xBD,0x66,0x00,0x00,}},
- {0x7D5E,2,{0xBD,0x67,0x00,0x00,}},
- {0x7D5F,2,{0xBD,0x68,0x00,0x00,}},
- {0x7D60,2,{0xBD,0x69,0x00,0x00,}},
- {0x7D61,2,{0xBD,0x6A,0x00,0x00,}},
- {0x7D62,2,{0xBD,0x6B,0x00,0x00,}},
- {0x7D63,2,{0xBD,0x6C,0x00,0x00,}},
- {0x7D64,2,{0xBD,0x6D,0x00,0x00,}},
- {0x7D65,2,{0xBD,0x6E,0x00,0x00,}},
- {0x7D66,2,{0xBD,0x6F,0x00,0x00,}},
- {0x7D67,2,{0xBD,0x70,0x00,0x00,}},
- {0x7D68,2,{0xBD,0x71,0x00,0x00,}},
- {0x7D69,2,{0xBD,0x72,0x00,0x00,}},
- {0x7D6A,2,{0xBD,0x73,0x00,0x00,}},
- {0x7D6B,2,{0xBD,0x74,0x00,0x00,}},
- {0x7D6C,2,{0xBD,0x75,0x00,0x00,}},
- {0x7D6D,2,{0xBD,0x76,0x00,0x00,}},
- {0x7D6E,2,{0xD0,0xF5,0x00,0x00,}},
- {0x7D6F,2,{0xBD,0x77,0x00,0x00,}},
- {0x7D70,2,{0xBD,0x78,0x00,0x00,}},
- {0x7D71,2,{0xBD,0x79,0x00,0x00,}},
- {0x7D72,2,{0xBD,0x7A,0x00,0x00,}},
- {0x7D73,2,{0xBD,0x7B,0x00,0x00,}},
- {0x7D74,2,{0xBD,0x7C,0x00,0x00,}},
- {0x7D75,2,{0xBD,0x7D,0x00,0x00,}},
- {0x7D76,2,{0xBD,0x7E,0x00,0x00,}},
- {0x7D77,2,{0xF4,0xEA,0x00,0x00,}},
- {0x7D78,2,{0xBD,0x80,0x00,0x00,}},
- {0x7D79,2,{0xBD,0x81,0x00,0x00,}},
- {0x7D7A,2,{0xBD,0x82,0x00,0x00,}},
- {0x7D7B,2,{0xBD,0x83,0x00,0x00,}},
- {0x7D7C,2,{0xBD,0x84,0x00,0x00,}},
- {0x7D7D,2,{0xBD,0x85,0x00,0x00,}},
- {0x7D7E,2,{0xBD,0x86,0x00,0x00,}},
- {0x7D7F,2,{0xBD,0x87,0x00,0x00,}},
- {0x7D80,2,{0xBD,0x88,0x00,0x00,}},
- {0x7D81,2,{0xBD,0x89,0x00,0x00,}},
- {0x7D82,2,{0xBD,0x8A,0x00,0x00,}},
- {0x7D83,2,{0xBD,0x8B,0x00,0x00,}},
- {0x7D84,2,{0xBD,0x8C,0x00,0x00,}},
- {0x7D85,2,{0xBD,0x8D,0x00,0x00,}},
- {0x7D86,2,{0xBD,0x8E,0x00,0x00,}},
- {0x7D87,2,{0xBD,0x8F,0x00,0x00,}},
- {0x7D88,2,{0xBD,0x90,0x00,0x00,}},
- {0x7D89,2,{0xBD,0x91,0x00,0x00,}},
- {0x7D8A,2,{0xBD,0x92,0x00,0x00,}},
- {0x7D8B,2,{0xBD,0x93,0x00,0x00,}},
- {0x7D8C,2,{0xBD,0x94,0x00,0x00,}},
- {0x7D8D,2,{0xBD,0x95,0x00,0x00,}},
- {0x7D8E,2,{0xBD,0x96,0x00,0x00,}},
- {0x7D8F,2,{0xBD,0x97,0x00,0x00,}},
- {0x7D90,2,{0xBD,0x98,0x00,0x00,}},
- {0x7D91,2,{0xBD,0x99,0x00,0x00,}},
- {0x7D92,2,{0xBD,0x9A,0x00,0x00,}},
- {0x7D93,2,{0xBD,0x9B,0x00,0x00,}},
- {0x7D94,2,{0xBD,0x9C,0x00,0x00,}},
- {0x7D95,2,{0xBD,0x9D,0x00,0x00,}},
- {0x7D96,2,{0xBD,0x9E,0x00,0x00,}},
- {0x7D97,2,{0xBD,0x9F,0x00,0x00,}},
- {0x7D98,2,{0xBD,0xA0,0x00,0x00,}},
- {0x7D99,2,{0xBE,0x40,0x00,0x00,}},
- {0x7D9A,2,{0xBE,0x41,0x00,0x00,}},
- {0x7D9B,2,{0xBE,0x42,0x00,0x00,}},
- {0x7D9C,2,{0xBE,0x43,0x00,0x00,}},
- {0x7D9D,2,{0xBE,0x44,0x00,0x00,}},
- {0x7D9E,2,{0xBE,0x45,0x00,0x00,}},
- {0x7D9F,2,{0xBE,0x46,0x00,0x00,}},
- {0x7DA0,2,{0xBE,0x47,0x00,0x00,}},
- {0x7DA1,2,{0xBE,0x48,0x00,0x00,}},
- {0x7DA2,2,{0xBE,0x49,0x00,0x00,}},
- {0x7DA3,2,{0xBE,0x4A,0x00,0x00,}},
- {0x7DA4,2,{0xBE,0x4B,0x00,0x00,}},
- {0x7DA5,2,{0xBE,0x4C,0x00,0x00,}},
- {0x7DA6,2,{0xF4,0xEB,0x00,0x00,}},
- {0x7DA7,2,{0xBE,0x4D,0x00,0x00,}},
- {0x7DA8,2,{0xBE,0x4E,0x00,0x00,}},
- {0x7DA9,2,{0xBE,0x4F,0x00,0x00,}},
- {0x7DAA,2,{0xBE,0x50,0x00,0x00,}},
- {0x7DAB,2,{0xBE,0x51,0x00,0x00,}},
- {0x7DAC,2,{0xBE,0x52,0x00,0x00,}},
- {0x7DAD,2,{0xBE,0x53,0x00,0x00,}},
- {0x7DAE,2,{0xF4,0xEC,0x00,0x00,}},
- {0x7DAF,2,{0xBE,0x54,0x00,0x00,}},
- {0x7DB0,2,{0xBE,0x55,0x00,0x00,}},
- {0x7DB1,2,{0xBE,0x56,0x00,0x00,}},
- {0x7DB2,2,{0xBE,0x57,0x00,0x00,}},
- {0x7DB3,2,{0xBE,0x58,0x00,0x00,}},
- {0x7DB4,2,{0xBE,0x59,0x00,0x00,}},
- {0x7DB5,2,{0xBE,0x5A,0x00,0x00,}},
- {0x7DB6,2,{0xBE,0x5B,0x00,0x00,}},
- {0x7DB7,2,{0xBE,0x5C,0x00,0x00,}},
- {0x7DB8,2,{0xBE,0x5D,0x00,0x00,}},
- {0x7DB9,2,{0xBE,0x5E,0x00,0x00,}},
- {0x7DBA,2,{0xBE,0x5F,0x00,0x00,}},
- {0x7DBB,2,{0xBE,0x60,0x00,0x00,}},
- {0x7DBC,2,{0xBE,0x61,0x00,0x00,}},
- {0x7DBD,2,{0xBE,0x62,0x00,0x00,}},
- {0x7DBE,2,{0xBE,0x63,0x00,0x00,}},
- {0x7DBF,2,{0xBE,0x64,0x00,0x00,}},
- {0x7DC0,2,{0xBE,0x65,0x00,0x00,}},
- {0x7DC1,2,{0xBE,0x66,0x00,0x00,}},
- {0x7DC2,2,{0xBE,0x67,0x00,0x00,}},
- {0x7DC3,2,{0xBE,0x68,0x00,0x00,}},
- {0x7DC4,2,{0xBE,0x69,0x00,0x00,}},
- {0x7DC5,2,{0xBE,0x6A,0x00,0x00,}},
- {0x7DC6,2,{0xBE,0x6B,0x00,0x00,}},
- {0x7DC7,2,{0xBE,0x6C,0x00,0x00,}},
- {0x7DC8,2,{0xBE,0x6D,0x00,0x00,}},
- {0x7DC9,2,{0xBE,0x6E,0x00,0x00,}},
- {0x7DCA,2,{0xBE,0x6F,0x00,0x00,}},
- {0x7DCB,2,{0xBE,0x70,0x00,0x00,}},
- {0x7DCC,2,{0xBE,0x71,0x00,0x00,}},
- {0x7DCD,2,{0xBE,0x72,0x00,0x00,}},
- {0x7DCE,2,{0xBE,0x73,0x00,0x00,}},
- {0x7DCF,2,{0xBE,0x74,0x00,0x00,}},
- {0x7DD0,2,{0xBE,0x75,0x00,0x00,}},
- {0x7DD1,2,{0xBE,0x76,0x00,0x00,}},
- {0x7DD2,2,{0xBE,0x77,0x00,0x00,}},
- {0x7DD3,2,{0xBE,0x78,0x00,0x00,}},
- {0x7DD4,2,{0xBE,0x79,0x00,0x00,}},
- {0x7DD5,2,{0xBE,0x7A,0x00,0x00,}},
- {0x7DD6,2,{0xBE,0x7B,0x00,0x00,}},
- {0x7DD7,2,{0xBE,0x7C,0x00,0x00,}},
- {0x7DD8,2,{0xBE,0x7D,0x00,0x00,}},
- {0x7DD9,2,{0xBE,0x7E,0x00,0x00,}},
- {0x7DDA,2,{0xBE,0x80,0x00,0x00,}},
- {0x7DDB,2,{0xBE,0x81,0x00,0x00,}},
- {0x7DDC,2,{0xBE,0x82,0x00,0x00,}},
- {0x7DDD,2,{0xBE,0x83,0x00,0x00,}},
- {0x7DDE,2,{0xBE,0x84,0x00,0x00,}},
- {0x7DDF,2,{0xBE,0x85,0x00,0x00,}},
- {0x7DE0,2,{0xBE,0x86,0x00,0x00,}},
- {0x7DE1,2,{0xBE,0x87,0x00,0x00,}},
- {0x7DE2,2,{0xBE,0x88,0x00,0x00,}},
- {0x7DE3,2,{0xBE,0x89,0x00,0x00,}},
- {0x7DE4,2,{0xBE,0x8A,0x00,0x00,}},
- {0x7DE5,2,{0xBE,0x8B,0x00,0x00,}},
- {0x7DE6,2,{0xBE,0x8C,0x00,0x00,}},
- {0x7DE7,2,{0xBE,0x8D,0x00,0x00,}},
- {0x7DE8,2,{0xBE,0x8E,0x00,0x00,}},
- {0x7DE9,2,{0xBE,0x8F,0x00,0x00,}},
- {0x7DEA,2,{0xBE,0x90,0x00,0x00,}},
- {0x7DEB,2,{0xBE,0x91,0x00,0x00,}},
- {0x7DEC,2,{0xBE,0x92,0x00,0x00,}},
- {0x7DED,2,{0xBE,0x93,0x00,0x00,}},
- {0x7DEE,2,{0xBE,0x94,0x00,0x00,}},
- {0x7DEF,2,{0xBE,0x95,0x00,0x00,}},
- {0x7DF0,2,{0xBE,0x96,0x00,0x00,}},
- {0x7DF1,2,{0xBE,0x97,0x00,0x00,}},
- {0x7DF2,2,{0xBE,0x98,0x00,0x00,}},
- {0x7DF3,2,{0xBE,0x99,0x00,0x00,}},
- {0x7DF4,2,{0xBE,0x9A,0x00,0x00,}},
- {0x7DF5,2,{0xBE,0x9B,0x00,0x00,}},
- {0x7DF6,2,{0xBE,0x9C,0x00,0x00,}},
- {0x7DF7,2,{0xBE,0x9D,0x00,0x00,}},
- {0x7DF8,2,{0xBE,0x9E,0x00,0x00,}},
- {0x7DF9,2,{0xBE,0x9F,0x00,0x00,}},
- {0x7DFA,2,{0xBE,0xA0,0x00,0x00,}},
- {0x7DFB,2,{0xBF,0x40,0x00,0x00,}},
- {0x7DFC,2,{0xBF,0x41,0x00,0x00,}},
- {0x7DFD,2,{0xBF,0x42,0x00,0x00,}},
- {0x7DFE,2,{0xBF,0x43,0x00,0x00,}},
- {0x7DFF,2,{0xBF,0x44,0x00,0x00,}},
- {0x7E00,2,{0xBF,0x45,0x00,0x00,}},
- {0x7E01,2,{0xBF,0x46,0x00,0x00,}},
- {0x7E02,2,{0xBF,0x47,0x00,0x00,}},
- {0x7E03,2,{0xBF,0x48,0x00,0x00,}},
- {0x7E04,2,{0xBF,0x49,0x00,0x00,}},
- {0x7E05,2,{0xBF,0x4A,0x00,0x00,}},
- {0x7E06,2,{0xBF,0x4B,0x00,0x00,}},
- {0x7E07,2,{0xBF,0x4C,0x00,0x00,}},
- {0x7E08,2,{0xBF,0x4D,0x00,0x00,}},
- {0x7E09,2,{0xBF,0x4E,0x00,0x00,}},
- {0x7E0A,2,{0xBF,0x4F,0x00,0x00,}},
- {0x7E0B,2,{0xBF,0x50,0x00,0x00,}},
- {0x7E0C,2,{0xBF,0x51,0x00,0x00,}},
- {0x7E0D,2,{0xBF,0x52,0x00,0x00,}},
- {0x7E0E,2,{0xBF,0x53,0x00,0x00,}},
- {0x7E0F,2,{0xBF,0x54,0x00,0x00,}},
- {0x7E10,2,{0xBF,0x55,0x00,0x00,}},
- {0x7E11,2,{0xBF,0x56,0x00,0x00,}},
- {0x7E12,2,{0xBF,0x57,0x00,0x00,}},
- {0x7E13,2,{0xBF,0x58,0x00,0x00,}},
- {0x7E14,2,{0xBF,0x59,0x00,0x00,}},
- {0x7E15,2,{0xBF,0x5A,0x00,0x00,}},
- {0x7E16,2,{0xBF,0x5B,0x00,0x00,}},
- {0x7E17,2,{0xBF,0x5C,0x00,0x00,}},
- {0x7E18,2,{0xBF,0x5D,0x00,0x00,}},
- {0x7E19,2,{0xBF,0x5E,0x00,0x00,}},
- {0x7E1A,2,{0xBF,0x5F,0x00,0x00,}},
- {0x7E1B,2,{0xBF,0x60,0x00,0x00,}},
- {0x7E1C,2,{0xBF,0x61,0x00,0x00,}},
- {0x7E1D,2,{0xBF,0x62,0x00,0x00,}},
- {0x7E1E,2,{0xBF,0x63,0x00,0x00,}},
- {0x7E1F,2,{0xBF,0x64,0x00,0x00,}},
- {0x7E20,2,{0xBF,0x65,0x00,0x00,}},
- {0x7E21,2,{0xBF,0x66,0x00,0x00,}},
- {0x7E22,2,{0xBF,0x67,0x00,0x00,}},
- {0x7E23,2,{0xBF,0x68,0x00,0x00,}},
- {0x7E24,2,{0xBF,0x69,0x00,0x00,}},
- {0x7E25,2,{0xBF,0x6A,0x00,0x00,}},
- {0x7E26,2,{0xBF,0x6B,0x00,0x00,}},
- {0x7E27,2,{0xBF,0x6C,0x00,0x00,}},
- {0x7E28,2,{0xBF,0x6D,0x00,0x00,}},
- {0x7E29,2,{0xBF,0x6E,0x00,0x00,}},
- {0x7E2A,2,{0xBF,0x6F,0x00,0x00,}},
- {0x7E2B,2,{0xBF,0x70,0x00,0x00,}},
- {0x7E2C,2,{0xBF,0x71,0x00,0x00,}},
- {0x7E2D,2,{0xBF,0x72,0x00,0x00,}},
- {0x7E2E,2,{0xBF,0x73,0x00,0x00,}},
- {0x7E2F,2,{0xBF,0x74,0x00,0x00,}},
- {0x7E30,2,{0xBF,0x75,0x00,0x00,}},
- {0x7E31,2,{0xBF,0x76,0x00,0x00,}},
- {0x7E32,2,{0xBF,0x77,0x00,0x00,}},
- {0x7E33,2,{0xBF,0x78,0x00,0x00,}},
- {0x7E34,2,{0xBF,0x79,0x00,0x00,}},
- {0x7E35,2,{0xBF,0x7A,0x00,0x00,}},
- {0x7E36,2,{0xBF,0x7B,0x00,0x00,}},
- {0x7E37,2,{0xBF,0x7C,0x00,0x00,}},
- {0x7E38,2,{0xBF,0x7D,0x00,0x00,}},
- {0x7E39,2,{0xBF,0x7E,0x00,0x00,}},
- {0x7E3A,2,{0xBF,0x80,0x00,0x00,}},
- {0x7E3B,2,{0xF7,0xE3,0x00,0x00,}},
- {0x7E3C,2,{0xBF,0x81,0x00,0x00,}},
- {0x7E3D,2,{0xBF,0x82,0x00,0x00,}},
- {0x7E3E,2,{0xBF,0x83,0x00,0x00,}},
- {0x7E3F,2,{0xBF,0x84,0x00,0x00,}},
- {0x7E40,2,{0xBF,0x85,0x00,0x00,}},
- {0x7E41,2,{0xB7,0xB1,0x00,0x00,}},
- {0x7E42,2,{0xBF,0x86,0x00,0x00,}},
- {0x7E43,2,{0xBF,0x87,0x00,0x00,}},
- {0x7E44,2,{0xBF,0x88,0x00,0x00,}},
- {0x7E45,2,{0xBF,0x89,0x00,0x00,}},
- {0x7E46,2,{0xBF,0x8A,0x00,0x00,}},
- {0x7E47,2,{0xF4,0xED,0x00,0x00,}},
- {0x7E48,2,{0xBF,0x8B,0x00,0x00,}},
- {0x7E49,2,{0xBF,0x8C,0x00,0x00,}},
- {0x7E4A,2,{0xBF,0x8D,0x00,0x00,}},
- {0x7E4B,2,{0xBF,0x8E,0x00,0x00,}},
- {0x7E4C,2,{0xBF,0x8F,0x00,0x00,}},
- {0x7E4D,2,{0xBF,0x90,0x00,0x00,}},
- {0x7E4E,2,{0xBF,0x91,0x00,0x00,}},
- {0x7E4F,2,{0xBF,0x92,0x00,0x00,}},
- {0x7E50,2,{0xBF,0x93,0x00,0x00,}},
- {0x7E51,2,{0xBF,0x94,0x00,0x00,}},
- {0x7E52,2,{0xBF,0x95,0x00,0x00,}},
- {0x7E53,2,{0xBF,0x96,0x00,0x00,}},
- {0x7E54,2,{0xBF,0x97,0x00,0x00,}},
- {0x7E55,2,{0xBF,0x98,0x00,0x00,}},
- {0x7E56,2,{0xBF,0x99,0x00,0x00,}},
- {0x7E57,2,{0xBF,0x9A,0x00,0x00,}},
- {0x7E58,2,{0xBF,0x9B,0x00,0x00,}},
- {0x7E59,2,{0xBF,0x9C,0x00,0x00,}},
- {0x7E5A,2,{0xBF,0x9D,0x00,0x00,}},
- {0x7E5B,2,{0xBF,0x9E,0x00,0x00,}},
- {0x7E5C,2,{0xBF,0x9F,0x00,0x00,}},
- {0x7E5D,2,{0xBF,0xA0,0x00,0x00,}},
- {0x7E5E,2,{0xC0,0x40,0x00,0x00,}},
- {0x7E5F,2,{0xC0,0x41,0x00,0x00,}},
- {0x7E60,2,{0xC0,0x42,0x00,0x00,}},
- {0x7E61,2,{0xC0,0x43,0x00,0x00,}},
- {0x7E62,2,{0xC0,0x44,0x00,0x00,}},
- {0x7E63,2,{0xC0,0x45,0x00,0x00,}},
- {0x7E64,2,{0xC0,0x46,0x00,0x00,}},
- {0x7E65,2,{0xC0,0x47,0x00,0x00,}},
- {0x7E66,2,{0xC0,0x48,0x00,0x00,}},
- {0x7E67,2,{0xC0,0x49,0x00,0x00,}},
- {0x7E68,2,{0xC0,0x4A,0x00,0x00,}},
- {0x7E69,2,{0xC0,0x4B,0x00,0x00,}},
- {0x7E6A,2,{0xC0,0x4C,0x00,0x00,}},
- {0x7E6B,2,{0xC0,0x4D,0x00,0x00,}},
- {0x7E6C,2,{0xC0,0x4E,0x00,0x00,}},
- {0x7E6D,2,{0xC0,0x4F,0x00,0x00,}},
- {0x7E6E,2,{0xC0,0x50,0x00,0x00,}},
- {0x7E6F,2,{0xC0,0x51,0x00,0x00,}},
- {0x7E70,2,{0xC0,0x52,0x00,0x00,}},
- {0x7E71,2,{0xC0,0x53,0x00,0x00,}},
- {0x7E72,2,{0xC0,0x54,0x00,0x00,}},
- {0x7E73,2,{0xC0,0x55,0x00,0x00,}},
- {0x7E74,2,{0xC0,0x56,0x00,0x00,}},
- {0x7E75,2,{0xC0,0x57,0x00,0x00,}},
- {0x7E76,2,{0xC0,0x58,0x00,0x00,}},
- {0x7E77,2,{0xC0,0x59,0x00,0x00,}},
- {0x7E78,2,{0xC0,0x5A,0x00,0x00,}},
- {0x7E79,2,{0xC0,0x5B,0x00,0x00,}},
- {0x7E7A,2,{0xC0,0x5C,0x00,0x00,}},
- {0x7E7B,2,{0xC0,0x5D,0x00,0x00,}},
- {0x7E7C,2,{0xC0,0x5E,0x00,0x00,}},
- {0x7E7D,2,{0xC0,0x5F,0x00,0x00,}},
- {0x7E7E,2,{0xC0,0x60,0x00,0x00,}},
- {0x7E7F,2,{0xC0,0x61,0x00,0x00,}},
- {0x7E80,2,{0xC0,0x62,0x00,0x00,}},
- {0x7E81,2,{0xC0,0x63,0x00,0x00,}},
- {0x7E82,2,{0xD7,0xEB,0x00,0x00,}},
- {0x7E83,2,{0xC0,0x64,0x00,0x00,}},
- {0x7E84,2,{0xC0,0x65,0x00,0x00,}},
- {0x7E85,2,{0xC0,0x66,0x00,0x00,}},
- {0x7E86,2,{0xC0,0x67,0x00,0x00,}},
- {0x7E87,2,{0xC0,0x68,0x00,0x00,}},
- {0x7E88,2,{0xC0,0x69,0x00,0x00,}},
- {0x7E89,2,{0xC0,0x6A,0x00,0x00,}},
- {0x7E8A,2,{0xC0,0x6B,0x00,0x00,}},
- {0x7E8B,2,{0xC0,0x6C,0x00,0x00,}},
- {0x7E8C,2,{0xC0,0x6D,0x00,0x00,}},
- {0x7E8D,2,{0xC0,0x6E,0x00,0x00,}},
- {0x7E8E,2,{0xC0,0x6F,0x00,0x00,}},
- {0x7E8F,2,{0xC0,0x70,0x00,0x00,}},
- {0x7E90,2,{0xC0,0x71,0x00,0x00,}},
- {0x7E91,2,{0xC0,0x72,0x00,0x00,}},
- {0x7E92,2,{0xC0,0x73,0x00,0x00,}},
- {0x7E93,2,{0xC0,0x74,0x00,0x00,}},
- {0x7E94,2,{0xC0,0x75,0x00,0x00,}},
- {0x7E95,2,{0xC0,0x76,0x00,0x00,}},
- {0x7E96,2,{0xC0,0x77,0x00,0x00,}},
- {0x7E97,2,{0xC0,0x78,0x00,0x00,}},
- {0x7E98,2,{0xC0,0x79,0x00,0x00,}},
- {0x7E99,2,{0xC0,0x7A,0x00,0x00,}},
- {0x7E9A,2,{0xC0,0x7B,0x00,0x00,}},
- {0x7E9B,2,{0xF4,0xEE,0x00,0x00,}},
- {0x7E9C,2,{0xC0,0x7C,0x00,0x00,}},
- {0x7E9D,2,{0xC0,0x7D,0x00,0x00,}},
- {0x7E9E,2,{0xC0,0x7E,0x00,0x00,}},
- {0x7E9F,2,{0xE6,0xF9,0x00,0x00,}},
- {0x7EA0,2,{0xBE,0xC0,0x00,0x00,}},
- {0x7EA1,2,{0xE6,0xFA,0x00,0x00,}},
- {0x7EA2,2,{0xBA,0xEC,0x00,0x00,}},
- {0x7EA3,2,{0xE6,0xFB,0x00,0x00,}},
- {0x7EA4,2,{0xCF,0xCB,0x00,0x00,}},
- {0x7EA5,2,{0xE6,0xFC,0x00,0x00,}},
- {0x7EA6,2,{0xD4,0xBC,0x00,0x00,}},
- {0x7EA7,2,{0xBC,0xB6,0x00,0x00,}},
- {0x7EA8,2,{0xE6,0xFD,0x00,0x00,}},
- {0x7EA9,2,{0xE6,0xFE,0x00,0x00,}},
- {0x7EAA,2,{0xBC,0xCD,0x00,0x00,}},
- {0x7EAB,2,{0xC8,0xD2,0x00,0x00,}},
- {0x7EAC,2,{0xCE,0xB3,0x00,0x00,}},
- {0x7EAD,2,{0xE7,0xA1,0x00,0x00,}},
- {0x7EAE,2,{0xC0,0x80,0x00,0x00,}},
- {0x7EAF,2,{0xB4,0xBF,0x00,0x00,}},
- {0x7EB0,2,{0xE7,0xA2,0x00,0x00,}},
- {0x7EB1,2,{0xC9,0xB4,0x00,0x00,}},
- {0x7EB2,2,{0xB8,0xD9,0x00,0x00,}},
- {0x7EB3,2,{0xC4,0xC9,0x00,0x00,}},
- {0x7EB4,2,{0xC0,0x81,0x00,0x00,}},
- {0x7EB5,2,{0xD7,0xDD,0x00,0x00,}},
- {0x7EB6,2,{0xC2,0xDA,0x00,0x00,}},
- {0x7EB7,2,{0xB7,0xD7,0x00,0x00,}},
- {0x7EB8,2,{0xD6,0xBD,0x00,0x00,}},
- {0x7EB9,2,{0xCE,0xC6,0x00,0x00,}},
- {0x7EBA,2,{0xB7,0xC4,0x00,0x00,}},
- {0x7EBB,2,{0xC0,0x82,0x00,0x00,}},
- {0x7EBC,2,{0xC0,0x83,0x00,0x00,}},
- {0x7EBD,2,{0xC5,0xA6,0x00,0x00,}},
- {0x7EBE,2,{0xE7,0xA3,0x00,0x00,}},
- {0x7EBF,2,{0xCF,0xDF,0x00,0x00,}},
- {0x7EC0,2,{0xE7,0xA4,0x00,0x00,}},
- {0x7EC1,2,{0xE7,0xA5,0x00,0x00,}},
- {0x7EC2,2,{0xE7,0xA6,0x00,0x00,}},
- {0x7EC3,2,{0xC1,0xB7,0x00,0x00,}},
- {0x7EC4,2,{0xD7,0xE9,0x00,0x00,}},
- {0x7EC5,2,{0xC9,0xF0,0x00,0x00,}},
- {0x7EC6,2,{0xCF,0xB8,0x00,0x00,}},
- {0x7EC7,2,{0xD6,0xAF,0x00,0x00,}},
- {0x7EC8,2,{0xD6,0xD5,0x00,0x00,}},
- {0x7EC9,2,{0xE7,0xA7,0x00,0x00,}},
- {0x7ECA,2,{0xB0,0xED,0x00,0x00,}},
- {0x7ECB,2,{0xE7,0xA8,0x00,0x00,}},
- {0x7ECC,2,{0xE7,0xA9,0x00,0x00,}},
- {0x7ECD,2,{0xC9,0xDC,0x00,0x00,}},
- {0x7ECE,2,{0xD2,0xEF,0x00,0x00,}},
- {0x7ECF,2,{0xBE,0xAD,0x00,0x00,}},
- {0x7ED0,2,{0xE7,0xAA,0x00,0x00,}},
- {0x7ED1,2,{0xB0,0xF3,0x00,0x00,}},
- {0x7ED2,2,{0xC8,0xDE,0x00,0x00,}},
- {0x7ED3,2,{0xBD,0xE1,0x00,0x00,}},
- {0x7ED4,2,{0xE7,0xAB,0x00,0x00,}},
- {0x7ED5,2,{0xC8,0xC6,0x00,0x00,}},
- {0x7ED6,2,{0xC0,0x84,0x00,0x00,}},
- {0x7ED7,2,{0xE7,0xAC,0x00,0x00,}},
- {0x7ED8,2,{0xBB,0xE6,0x00,0x00,}},
- {0x7ED9,2,{0xB8,0xF8,0x00,0x00,}},
- {0x7EDA,2,{0xD1,0xA4,0x00,0x00,}},
- {0x7EDB,2,{0xE7,0xAD,0x00,0x00,}},
- {0x7EDC,2,{0xC2,0xE7,0x00,0x00,}},
- {0x7EDD,2,{0xBE,0xF8,0x00,0x00,}},
- {0x7EDE,2,{0xBD,0xCA,0x00,0x00,}},
- {0x7EDF,2,{0xCD,0xB3,0x00,0x00,}},
- {0x7EE0,2,{0xE7,0xAE,0x00,0x00,}},
- {0x7EE1,2,{0xE7,0xAF,0x00,0x00,}},
- {0x7EE2,2,{0xBE,0xEE,0x00,0x00,}},
- {0x7EE3,2,{0xD0,0xE5,0x00,0x00,}},
- {0x7EE4,2,{0xC0,0x85,0x00,0x00,}},
- {0x7EE5,2,{0xCB,0xE7,0x00,0x00,}},
- {0x7EE6,2,{0xCC,0xD0,0x00,0x00,}},
- {0x7EE7,2,{0xBC,0xCC,0x00,0x00,}},
- {0x7EE8,2,{0xE7,0xB0,0x00,0x00,}},
- {0x7EE9,2,{0xBC,0xA8,0x00,0x00,}},
- {0x7EEA,2,{0xD0,0xF7,0x00,0x00,}},
- {0x7EEB,2,{0xE7,0xB1,0x00,0x00,}},
- {0x7EEC,2,{0xC0,0x86,0x00,0x00,}},
- {0x7EED,2,{0xD0,0xF8,0x00,0x00,}},
- {0x7EEE,2,{0xE7,0xB2,0x00,0x00,}},
- {0x7EEF,2,{0xE7,0xB3,0x00,0x00,}},
- {0x7EF0,2,{0xB4,0xC2,0x00,0x00,}},
- {0x7EF1,2,{0xE7,0xB4,0x00,0x00,}},
- {0x7EF2,2,{0xE7,0xB5,0x00,0x00,}},
- {0x7EF3,2,{0xC9,0xFE,0x00,0x00,}},
- {0x7EF4,2,{0xCE,0xAC,0x00,0x00,}},
- {0x7EF5,2,{0xC3,0xE0,0x00,0x00,}},
- {0x7EF6,2,{0xE7,0xB7,0x00,0x00,}},
- {0x7EF7,2,{0xB1,0xC1,0x00,0x00,}},
- {0x7EF8,2,{0xB3,0xF1,0x00,0x00,}},
- {0x7EF9,2,{0xC0,0x87,0x00,0x00,}},
- {0x7EFA,2,{0xE7,0xB8,0x00,0x00,}},
- {0x7EFB,2,{0xE7,0xB9,0x00,0x00,}},
- {0x7EFC,2,{0xD7,0xDB,0x00,0x00,}},
- {0x7EFD,2,{0xD5,0xC0,0x00,0x00,}},
- {0x7EFE,2,{0xE7,0xBA,0x00,0x00,}},
- {0x7EFF,2,{0xC2,0xCC,0x00,0x00,}},
- {0x7F00,2,{0xD7,0xBA,0x00,0x00,}},
- {0x7F01,2,{0xE7,0xBB,0x00,0x00,}},
- {0x7F02,2,{0xE7,0xBC,0x00,0x00,}},
- {0x7F03,2,{0xE7,0xBD,0x00,0x00,}},
- {0x7F04,2,{0xBC,0xEA,0x00,0x00,}},
- {0x7F05,2,{0xC3,0xE5,0x00,0x00,}},
- {0x7F06,2,{0xC0,0xC2,0x00,0x00,}},
- {0x7F07,2,{0xE7,0xBE,0x00,0x00,}},
- {0x7F08,2,{0xE7,0xBF,0x00,0x00,}},
- {0x7F09,2,{0xBC,0xA9,0x00,0x00,}},
- {0x7F0A,2,{0xC0,0x88,0x00,0x00,}},
- {0x7F0B,2,{0xE7,0xC0,0x00,0x00,}},
- {0x7F0C,2,{0xE7,0xC1,0x00,0x00,}},
- {0x7F0D,2,{0xE7,0xB6,0x00,0x00,}},
- {0x7F0E,2,{0xB6,0xD0,0x00,0x00,}},
- {0x7F0F,2,{0xE7,0xC2,0x00,0x00,}},
- {0x7F10,2,{0xC0,0x89,0x00,0x00,}},
- {0x7F11,2,{0xE7,0xC3,0x00,0x00,}},
- {0x7F12,2,{0xE7,0xC4,0x00,0x00,}},
- {0x7F13,2,{0xBB,0xBA,0x00,0x00,}},
- {0x7F14,2,{0xB5,0xDE,0x00,0x00,}},
- {0x7F15,2,{0xC2,0xC6,0x00,0x00,}},
- {0x7F16,2,{0xB1,0xE0,0x00,0x00,}},
- {0x7F17,2,{0xE7,0xC5,0x00,0x00,}},
- {0x7F18,2,{0xD4,0xB5,0x00,0x00,}},
- {0x7F19,2,{0xE7,0xC6,0x00,0x00,}},
- {0x7F1A,2,{0xB8,0xBF,0x00,0x00,}},
- {0x7F1B,2,{0xE7,0xC8,0x00,0x00,}},
- {0x7F1C,2,{0xE7,0xC7,0x00,0x00,}},
- {0x7F1D,2,{0xB7,0xEC,0x00,0x00,}},
- {0x7F1E,2,{0xC0,0x8A,0x00,0x00,}},
- {0x7F1F,2,{0xE7,0xC9,0x00,0x00,}},
- {0x7F20,2,{0xB2,0xF8,0x00,0x00,}},
- {0x7F21,2,{0xE7,0xCA,0x00,0x00,}},
- {0x7F22,2,{0xE7,0xCB,0x00,0x00,}},
- {0x7F23,2,{0xE7,0xCC,0x00,0x00,}},
- {0x7F24,2,{0xE7,0xCD,0x00,0x00,}},
- {0x7F25,2,{0xE7,0xCE,0x00,0x00,}},
- {0x7F26,2,{0xE7,0xCF,0x00,0x00,}},
- {0x7F27,2,{0xE7,0xD0,0x00,0x00,}},
- {0x7F28,2,{0xD3,0xA7,0x00,0x00,}},
- {0x7F29,2,{0xCB,0xF5,0x00,0x00,}},
- {0x7F2A,2,{0xE7,0xD1,0x00,0x00,}},
- {0x7F2B,2,{0xE7,0xD2,0x00,0x00,}},
- {0x7F2C,2,{0xE7,0xD3,0x00,0x00,}},
- {0x7F2D,2,{0xE7,0xD4,0x00,0x00,}},
- {0x7F2E,2,{0xC9,0xC9,0x00,0x00,}},
- {0x7F2F,2,{0xE7,0xD5,0x00,0x00,}},
- {0x7F30,2,{0xE7,0xD6,0x00,0x00,}},
- {0x7F31,2,{0xE7,0xD7,0x00,0x00,}},
- {0x7F32,2,{0xE7,0xD8,0x00,0x00,}},
- {0x7F33,2,{0xE7,0xD9,0x00,0x00,}},
- {0x7F34,2,{0xBD,0xC9,0x00,0x00,}},
- {0x7F35,2,{0xE7,0xDA,0x00,0x00,}},
- {0x7F36,2,{0xF3,0xBE,0x00,0x00,}},
- {0x7F37,2,{0xC0,0x8B,0x00,0x00,}},
- {0x7F38,2,{0xB8,0xD7,0x00,0x00,}},
- {0x7F39,2,{0xC0,0x8C,0x00,0x00,}},
- {0x7F3A,2,{0xC8,0xB1,0x00,0x00,}},
- {0x7F3B,2,{0xC0,0x8D,0x00,0x00,}},
- {0x7F3C,2,{0xC0,0x8E,0x00,0x00,}},
- {0x7F3D,2,{0xC0,0x8F,0x00,0x00,}},
- {0x7F3E,2,{0xC0,0x90,0x00,0x00,}},
- {0x7F3F,2,{0xC0,0x91,0x00,0x00,}},
- {0x7F40,2,{0xC0,0x92,0x00,0x00,}},
- {0x7F41,2,{0xC0,0x93,0x00,0x00,}},
- {0x7F42,2,{0xF3,0xBF,0x00,0x00,}},
- {0x7F43,2,{0xC0,0x94,0x00,0x00,}},
- {0x7F44,2,{0xF3,0xC0,0x00,0x00,}},
- {0x7F45,2,{0xF3,0xC1,0x00,0x00,}},
- {0x7F46,2,{0xC0,0x95,0x00,0x00,}},
- {0x7F47,2,{0xC0,0x96,0x00,0x00,}},
- {0x7F48,2,{0xC0,0x97,0x00,0x00,}},
- {0x7F49,2,{0xC0,0x98,0x00,0x00,}},
- {0x7F4A,2,{0xC0,0x99,0x00,0x00,}},
- {0x7F4B,2,{0xC0,0x9A,0x00,0x00,}},
- {0x7F4C,2,{0xC0,0x9B,0x00,0x00,}},
- {0x7F4D,2,{0xC0,0x9C,0x00,0x00,}},
- {0x7F4E,2,{0xC0,0x9D,0x00,0x00,}},
- {0x7F4F,2,{0xC0,0x9E,0x00,0x00,}},
- {0x7F50,2,{0xB9,0xDE,0x00,0x00,}},
- {0x7F51,2,{0xCD,0xF8,0x00,0x00,}},
- {0x7F52,2,{0xC0,0x9F,0x00,0x00,}},
- {0x7F53,2,{0xC0,0xA0,0x00,0x00,}},
- {0x7F54,2,{0xD8,0xE8,0x00,0x00,}},
- {0x7F55,2,{0xBA,0xB1,0x00,0x00,}},
- {0x7F56,2,{0xC1,0x40,0x00,0x00,}},
- {0x7F57,2,{0xC2,0xDE,0x00,0x00,}},
- {0x7F58,2,{0xEE,0xB7,0x00,0x00,}},
- {0x7F59,2,{0xC1,0x41,0x00,0x00,}},
- {0x7F5A,2,{0xB7,0xA3,0x00,0x00,}},
- {0x7F5B,2,{0xC1,0x42,0x00,0x00,}},
- {0x7F5C,2,{0xC1,0x43,0x00,0x00,}},
- {0x7F5D,2,{0xC1,0x44,0x00,0x00,}},
- {0x7F5E,2,{0xC1,0x45,0x00,0x00,}},
- {0x7F5F,2,{0xEE,0xB9,0x00,0x00,}},
- {0x7F60,2,{0xC1,0x46,0x00,0x00,}},
- {0x7F61,2,{0xEE,0xB8,0x00,0x00,}},
- {0x7F62,2,{0xB0,0xD5,0x00,0x00,}},
- {0x7F63,2,{0xC1,0x47,0x00,0x00,}},
- {0x7F64,2,{0xC1,0x48,0x00,0x00,}},
- {0x7F65,2,{0xC1,0x49,0x00,0x00,}},
- {0x7F66,2,{0xC1,0x4A,0x00,0x00,}},
- {0x7F67,2,{0xC1,0x4B,0x00,0x00,}},
- {0x7F68,2,{0xEE,0xBB,0x00,0x00,}},
- {0x7F69,2,{0xD5,0xD6,0x00,0x00,}},
- {0x7F6A,2,{0xD7,0xEF,0x00,0x00,}},
- {0x7F6B,2,{0xC1,0x4C,0x00,0x00,}},
- {0x7F6C,2,{0xC1,0x4D,0x00,0x00,}},
- {0x7F6D,2,{0xC1,0x4E,0x00,0x00,}},
- {0x7F6E,2,{0xD6,0xC3,0x00,0x00,}},
- {0x7F6F,2,{0xC1,0x4F,0x00,0x00,}},
- {0x7F70,2,{0xC1,0x50,0x00,0x00,}},
- {0x7F71,2,{0xEE,0xBD,0x00,0x00,}},
- {0x7F72,2,{0xCA,0xF0,0x00,0x00,}},
- {0x7F73,2,{0xC1,0x51,0x00,0x00,}},
- {0x7F74,2,{0xEE,0xBC,0x00,0x00,}},
- {0x7F75,2,{0xC1,0x52,0x00,0x00,}},
- {0x7F76,2,{0xC1,0x53,0x00,0x00,}},
- {0x7F77,2,{0xC1,0x54,0x00,0x00,}},
- {0x7F78,2,{0xC1,0x55,0x00,0x00,}},
- {0x7F79,2,{0xEE,0xBE,0x00,0x00,}},
- {0x7F7A,2,{0xC1,0x56,0x00,0x00,}},
- {0x7F7B,2,{0xC1,0x57,0x00,0x00,}},
- {0x7F7C,2,{0xC1,0x58,0x00,0x00,}},
- {0x7F7D,2,{0xC1,0x59,0x00,0x00,}},
- {0x7F7E,2,{0xEE,0xC0,0x00,0x00,}},
- {0x7F7F,2,{0xC1,0x5A,0x00,0x00,}},
- {0x7F80,2,{0xC1,0x5B,0x00,0x00,}},
- {0x7F81,2,{0xEE,0xBF,0x00,0x00,}},
- {0x7F82,2,{0xC1,0x5C,0x00,0x00,}},
- {0x7F83,2,{0xC1,0x5D,0x00,0x00,}},
- {0x7F84,2,{0xC1,0x5E,0x00,0x00,}},
- {0x7F85,2,{0xC1,0x5F,0x00,0x00,}},
- {0x7F86,2,{0xC1,0x60,0x00,0x00,}},
- {0x7F87,2,{0xC1,0x61,0x00,0x00,}},
- {0x7F88,2,{0xC1,0x62,0x00,0x00,}},
- {0x7F89,2,{0xC1,0x63,0x00,0x00,}},
- {0x7F8A,2,{0xD1,0xF2,0x00,0x00,}},
- {0x7F8B,2,{0xC1,0x64,0x00,0x00,}},
- {0x7F8C,2,{0xC7,0xBC,0x00,0x00,}},
- {0x7F8D,2,{0xC1,0x65,0x00,0x00,}},
- {0x7F8E,2,{0xC3,0xC0,0x00,0x00,}},
- {0x7F8F,2,{0xC1,0x66,0x00,0x00,}},
- {0x7F90,2,{0xC1,0x67,0x00,0x00,}},
- {0x7F91,2,{0xC1,0x68,0x00,0x00,}},
- {0x7F92,2,{0xC1,0x69,0x00,0x00,}},
- {0x7F93,2,{0xC1,0x6A,0x00,0x00,}},
- {0x7F94,2,{0xB8,0xE1,0x00,0x00,}},
- {0x7F95,2,{0xC1,0x6B,0x00,0x00,}},
- {0x7F96,2,{0xC1,0x6C,0x00,0x00,}},
- {0x7F97,2,{0xC1,0x6D,0x00,0x00,}},
- {0x7F98,2,{0xC1,0x6E,0x00,0x00,}},
- {0x7F99,2,{0xC1,0x6F,0x00,0x00,}},
- {0x7F9A,2,{0xC1,0xE7,0x00,0x00,}},
- {0x7F9B,2,{0xC1,0x70,0x00,0x00,}},
- {0x7F9C,2,{0xC1,0x71,0x00,0x00,}},
- {0x7F9D,2,{0xF4,0xC6,0x00,0x00,}},
- {0x7F9E,2,{0xD0,0xDF,0x00,0x00,}},
- {0x7F9F,2,{0xF4,0xC7,0x00,0x00,}},
- {0x7FA0,2,{0xC1,0x72,0x00,0x00,}},
- {0x7FA1,2,{0xCF,0xDB,0x00,0x00,}},
- {0x7FA2,2,{0xC1,0x73,0x00,0x00,}},
- {0x7FA3,2,{0xC1,0x74,0x00,0x00,}},
- {0x7FA4,2,{0xC8,0xBA,0x00,0x00,}},
- {0x7FA5,2,{0xC1,0x75,0x00,0x00,}},
- {0x7FA6,2,{0xC1,0x76,0x00,0x00,}},
- {0x7FA7,2,{0xF4,0xC8,0x00,0x00,}},
- {0x7FA8,2,{0xC1,0x77,0x00,0x00,}},
- {0x7FA9,2,{0xC1,0x78,0x00,0x00,}},
- {0x7FAA,2,{0xC1,0x79,0x00,0x00,}},
- {0x7FAB,2,{0xC1,0x7A,0x00,0x00,}},
- {0x7FAC,2,{0xC1,0x7B,0x00,0x00,}},
- {0x7FAD,2,{0xC1,0x7C,0x00,0x00,}},
- {0x7FAE,2,{0xC1,0x7D,0x00,0x00,}},
- {0x7FAF,2,{0xF4,0xC9,0x00,0x00,}},
- {0x7FB0,2,{0xF4,0xCA,0x00,0x00,}},
- {0x7FB1,2,{0xC1,0x7E,0x00,0x00,}},
- {0x7FB2,2,{0xF4,0xCB,0x00,0x00,}},
- {0x7FB3,2,{0xC1,0x80,0x00,0x00,}},
- {0x7FB4,2,{0xC1,0x81,0x00,0x00,}},
- {0x7FB5,2,{0xC1,0x82,0x00,0x00,}},
- {0x7FB6,2,{0xC1,0x83,0x00,0x00,}},
- {0x7FB7,2,{0xC1,0x84,0x00,0x00,}},
- {0x7FB8,2,{0xD9,0xFA,0x00,0x00,}},
- {0x7FB9,2,{0xB8,0xFE,0x00,0x00,}},
- {0x7FBA,2,{0xC1,0x85,0x00,0x00,}},
- {0x7FBB,2,{0xC1,0x86,0x00,0x00,}},
- {0x7FBC,2,{0xE5,0xF1,0x00,0x00,}},
- {0x7FBD,2,{0xD3,0xF0,0x00,0x00,}},
- {0x7FBE,2,{0xC1,0x87,0x00,0x00,}},
- {0x7FBF,2,{0xF4,0xE0,0x00,0x00,}},
- {0x7FC0,2,{0xC1,0x88,0x00,0x00,}},
- {0x7FC1,2,{0xCE,0xCC,0x00,0x00,}},
- {0x7FC2,2,{0xC1,0x89,0x00,0x00,}},
- {0x7FC3,2,{0xC1,0x8A,0x00,0x00,}},
- {0x7FC4,2,{0xC1,0x8B,0x00,0x00,}},
- {0x7FC5,2,{0xB3,0xE1,0x00,0x00,}},
- {0x7FC6,2,{0xC1,0x8C,0x00,0x00,}},
- {0x7FC7,2,{0xC1,0x8D,0x00,0x00,}},
- {0x7FC8,2,{0xC1,0x8E,0x00,0x00,}},
- {0x7FC9,2,{0xC1,0x8F,0x00,0x00,}},
- {0x7FCA,2,{0xF1,0xB4,0x00,0x00,}},
- {0x7FCB,2,{0xC1,0x90,0x00,0x00,}},
- {0x7FCC,2,{0xD2,0xEE,0x00,0x00,}},
- {0x7FCD,2,{0xC1,0x91,0x00,0x00,}},
- {0x7FCE,2,{0xF4,0xE1,0x00,0x00,}},
- {0x7FCF,2,{0xC1,0x92,0x00,0x00,}},
- {0x7FD0,2,{0xC1,0x93,0x00,0x00,}},
- {0x7FD1,2,{0xC1,0x94,0x00,0x00,}},
- {0x7FD2,2,{0xC1,0x95,0x00,0x00,}},
- {0x7FD3,2,{0xC1,0x96,0x00,0x00,}},
- {0x7FD4,2,{0xCF,0xE8,0x00,0x00,}},
- {0x7FD5,2,{0xF4,0xE2,0x00,0x00,}},
- {0x7FD6,2,{0xC1,0x97,0x00,0x00,}},
- {0x7FD7,2,{0xC1,0x98,0x00,0x00,}},
- {0x7FD8,2,{0xC7,0xCC,0x00,0x00,}},
- {0x7FD9,2,{0xC1,0x99,0x00,0x00,}},
- {0x7FDA,2,{0xC1,0x9A,0x00,0x00,}},
- {0x7FDB,2,{0xC1,0x9B,0x00,0x00,}},
- {0x7FDC,2,{0xC1,0x9C,0x00,0x00,}},
- {0x7FDD,2,{0xC1,0x9D,0x00,0x00,}},
- {0x7FDE,2,{0xC1,0x9E,0x00,0x00,}},
- {0x7FDF,2,{0xB5,0xD4,0x00,0x00,}},
- {0x7FE0,2,{0xB4,0xE4,0x00,0x00,}},
- {0x7FE1,2,{0xF4,0xE4,0x00,0x00,}},
- {0x7FE2,2,{0xC1,0x9F,0x00,0x00,}},
- {0x7FE3,2,{0xC1,0xA0,0x00,0x00,}},
- {0x7FE4,2,{0xC2,0x40,0x00,0x00,}},
- {0x7FE5,2,{0xF4,0xE3,0x00,0x00,}},
- {0x7FE6,2,{0xF4,0xE5,0x00,0x00,}},
- {0x7FE7,2,{0xC2,0x41,0x00,0x00,}},
- {0x7FE8,2,{0xC2,0x42,0x00,0x00,}},
- {0x7FE9,2,{0xF4,0xE6,0x00,0x00,}},
- {0x7FEA,2,{0xC2,0x43,0x00,0x00,}},
- {0x7FEB,2,{0xC2,0x44,0x00,0x00,}},
- {0x7FEC,2,{0xC2,0x45,0x00,0x00,}},
- {0x7FED,2,{0xC2,0x46,0x00,0x00,}},
- {0x7FEE,2,{0xF4,0xE7,0x00,0x00,}},
- {0x7FEF,2,{0xC2,0x47,0x00,0x00,}},
- {0x7FF0,2,{0xBA,0xB2,0x00,0x00,}},
- {0x7FF1,2,{0xB0,0xBF,0x00,0x00,}},
- {0x7FF2,2,{0xC2,0x48,0x00,0x00,}},
- {0x7FF3,2,{0xF4,0xE8,0x00,0x00,}},
- {0x7FF4,2,{0xC2,0x49,0x00,0x00,}},
- {0x7FF5,2,{0xC2,0x4A,0x00,0x00,}},
- {0x7FF6,2,{0xC2,0x4B,0x00,0x00,}},
- {0x7FF7,2,{0xC2,0x4C,0x00,0x00,}},
- {0x7FF8,2,{0xC2,0x4D,0x00,0x00,}},
- {0x7FF9,2,{0xC2,0x4E,0x00,0x00,}},
- {0x7FFA,2,{0xC2,0x4F,0x00,0x00,}},
- {0x7FFB,2,{0xB7,0xAD,0x00,0x00,}},
- {0x7FFC,2,{0xD2,0xED,0x00,0x00,}},
- {0x7FFD,2,{0xC2,0x50,0x00,0x00,}},
- {0x7FFE,2,{0xC2,0x51,0x00,0x00,}},
- {0x7FFF,2,{0xC2,0x52,0x00,0x00,}},
- {0x8000,2,{0xD2,0xAB,0x00,0x00,}},
- {0x8001,2,{0xC0,0xCF,0x00,0x00,}},
- {0x8002,2,{0xC2,0x53,0x00,0x00,}},
- {0x8003,2,{0xBF,0xBC,0x00,0x00,}},
- {0x8004,2,{0xEB,0xA3,0x00,0x00,}},
- {0x8005,2,{0xD5,0xDF,0x00,0x00,}},
- {0x8006,2,{0xEA,0xC8,0x00,0x00,}},
- {0x8007,2,{0xC2,0x54,0x00,0x00,}},
- {0x8008,2,{0xC2,0x55,0x00,0x00,}},
- {0x8009,2,{0xC2,0x56,0x00,0x00,}},
- {0x800A,2,{0xC2,0x57,0x00,0x00,}},
- {0x800B,2,{0xF1,0xF3,0x00,0x00,}},
- {0x800C,2,{0xB6,0xF8,0x00,0x00,}},
- {0x800D,2,{0xCB,0xA3,0x00,0x00,}},
- {0x800E,2,{0xC2,0x58,0x00,0x00,}},
- {0x800F,2,{0xC2,0x59,0x00,0x00,}},
- {0x8010,2,{0xC4,0xCD,0x00,0x00,}},
- {0x8011,2,{0xC2,0x5A,0x00,0x00,}},
- {0x8012,2,{0xF1,0xE7,0x00,0x00,}},
- {0x8013,2,{0xC2,0x5B,0x00,0x00,}},
- {0x8014,2,{0xF1,0xE8,0x00,0x00,}},
- {0x8015,2,{0xB8,0xFB,0x00,0x00,}},
- {0x8016,2,{0xF1,0xE9,0x00,0x00,}},
- {0x8017,2,{0xBA,0xC4,0x00,0x00,}},
- {0x8018,2,{0xD4,0xC5,0x00,0x00,}},
- {0x8019,2,{0xB0,0xD2,0x00,0x00,}},
- {0x801A,2,{0xC2,0x5C,0x00,0x00,}},
- {0x801B,2,{0xC2,0x5D,0x00,0x00,}},
- {0x801C,2,{0xF1,0xEA,0x00,0x00,}},
- {0x801D,2,{0xC2,0x5E,0x00,0x00,}},
- {0x801E,2,{0xC2,0x5F,0x00,0x00,}},
- {0x801F,2,{0xC2,0x60,0x00,0x00,}},
- {0x8020,2,{0xF1,0xEB,0x00,0x00,}},
- {0x8021,2,{0xC2,0x61,0x00,0x00,}},
- {0x8022,2,{0xF1,0xEC,0x00,0x00,}},
- {0x8023,2,{0xC2,0x62,0x00,0x00,}},
- {0x8024,2,{0xC2,0x63,0x00,0x00,}},
- {0x8025,2,{0xF1,0xED,0x00,0x00,}},
- {0x8026,2,{0xF1,0xEE,0x00,0x00,}},
- {0x8027,2,{0xF1,0xEF,0x00,0x00,}},
- {0x8028,2,{0xF1,0xF1,0x00,0x00,}},
- {0x8029,2,{0xF1,0xF0,0x00,0x00,}},
- {0x802A,2,{0xC5,0xD5,0x00,0x00,}},
- {0x802B,2,{0xC2,0x64,0x00,0x00,}},
- {0x802C,2,{0xC2,0x65,0x00,0x00,}},
- {0x802D,2,{0xC2,0x66,0x00,0x00,}},
- {0x802E,2,{0xC2,0x67,0x00,0x00,}},
- {0x802F,2,{0xC2,0x68,0x00,0x00,}},
- {0x8030,2,{0xC2,0x69,0x00,0x00,}},
- {0x8031,2,{0xF1,0xF2,0x00,0x00,}},
- {0x8032,2,{0xC2,0x6A,0x00,0x00,}},
- {0x8033,2,{0xB6,0xFA,0x00,0x00,}},
- {0x8034,2,{0xC2,0x6B,0x00,0x00,}},
- {0x8035,2,{0xF1,0xF4,0x00,0x00,}},
- {0x8036,2,{0xD2,0xAE,0x00,0x00,}},
- {0x8037,2,{0xDE,0xC7,0x00,0x00,}},
- {0x8038,2,{0xCB,0xCA,0x00,0x00,}},
- {0x8039,2,{0xC2,0x6C,0x00,0x00,}},
- {0x803A,2,{0xC2,0x6D,0x00,0x00,}},
- {0x803B,2,{0xB3,0xDC,0x00,0x00,}},
- {0x803C,2,{0xC2,0x6E,0x00,0x00,}},
- {0x803D,2,{0xB5,0xA2,0x00,0x00,}},
- {0x803E,2,{0xC2,0x6F,0x00,0x00,}},
- {0x803F,2,{0xB9,0xA2,0x00,0x00,}},
- {0x8040,2,{0xC2,0x70,0x00,0x00,}},
- {0x8041,2,{0xC2,0x71,0x00,0x00,}},
- {0x8042,2,{0xC4,0xF4,0x00,0x00,}},
- {0x8043,2,{0xF1,0xF5,0x00,0x00,}},
- {0x8044,2,{0xC2,0x72,0x00,0x00,}},
- {0x8045,2,{0xC2,0x73,0x00,0x00,}},
- {0x8046,2,{0xF1,0xF6,0x00,0x00,}},
- {0x8047,2,{0xC2,0x74,0x00,0x00,}},
- {0x8048,2,{0xC2,0x75,0x00,0x00,}},
- {0x8049,2,{0xC2,0x76,0x00,0x00,}},
- {0x804A,2,{0xC1,0xC4,0x00,0x00,}},
- {0x804B,2,{0xC1,0xFB,0x00,0x00,}},
- {0x804C,2,{0xD6,0xB0,0x00,0x00,}},
- {0x804D,2,{0xF1,0xF7,0x00,0x00,}},
- {0x804E,2,{0xC2,0x77,0x00,0x00,}},
- {0x804F,2,{0xC2,0x78,0x00,0x00,}},
- {0x8050,2,{0xC2,0x79,0x00,0x00,}},
- {0x8051,2,{0xC2,0x7A,0x00,0x00,}},
- {0x8052,2,{0xF1,0xF8,0x00,0x00,}},
- {0x8053,2,{0xC2,0x7B,0x00,0x00,}},
- {0x8054,2,{0xC1,0xAA,0x00,0x00,}},
- {0x8055,2,{0xC2,0x7C,0x00,0x00,}},
- {0x8056,2,{0xC2,0x7D,0x00,0x00,}},
- {0x8057,2,{0xC2,0x7E,0x00,0x00,}},
- {0x8058,2,{0xC6,0xB8,0x00,0x00,}},
- {0x8059,2,{0xC2,0x80,0x00,0x00,}},
- {0x805A,2,{0xBE,0xDB,0x00,0x00,}},
- {0x805B,2,{0xC2,0x81,0x00,0x00,}},
- {0x805C,2,{0xC2,0x82,0x00,0x00,}},
- {0x805D,2,{0xC2,0x83,0x00,0x00,}},
- {0x805E,2,{0xC2,0x84,0x00,0x00,}},
- {0x805F,2,{0xC2,0x85,0x00,0x00,}},
- {0x8060,2,{0xC2,0x86,0x00,0x00,}},
- {0x8061,2,{0xC2,0x87,0x00,0x00,}},
- {0x8062,2,{0xC2,0x88,0x00,0x00,}},
- {0x8063,2,{0xC2,0x89,0x00,0x00,}},
- {0x8064,2,{0xC2,0x8A,0x00,0x00,}},
- {0x8065,2,{0xC2,0x8B,0x00,0x00,}},
- {0x8066,2,{0xC2,0x8C,0x00,0x00,}},
- {0x8067,2,{0xC2,0x8D,0x00,0x00,}},
- {0x8068,2,{0xC2,0x8E,0x00,0x00,}},
- {0x8069,2,{0xF1,0xF9,0x00,0x00,}},
- {0x806A,2,{0xB4,0xCF,0x00,0x00,}},
- {0x806B,2,{0xC2,0x8F,0x00,0x00,}},
- {0x806C,2,{0xC2,0x90,0x00,0x00,}},
- {0x806D,2,{0xC2,0x91,0x00,0x00,}},
- {0x806E,2,{0xC2,0x92,0x00,0x00,}},
- {0x806F,2,{0xC2,0x93,0x00,0x00,}},
- {0x8070,2,{0xC2,0x94,0x00,0x00,}},
- {0x8071,2,{0xF1,0xFA,0x00,0x00,}},
- {0x8072,2,{0xC2,0x95,0x00,0x00,}},
- {0x8073,2,{0xC2,0x96,0x00,0x00,}},
- {0x8074,2,{0xC2,0x97,0x00,0x00,}},
- {0x8075,2,{0xC2,0x98,0x00,0x00,}},
- {0x8076,2,{0xC2,0x99,0x00,0x00,}},
- {0x8077,2,{0xC2,0x9A,0x00,0x00,}},
- {0x8078,2,{0xC2,0x9B,0x00,0x00,}},
- {0x8079,2,{0xC2,0x9C,0x00,0x00,}},
- {0x807A,2,{0xC2,0x9D,0x00,0x00,}},
- {0x807B,2,{0xC2,0x9E,0x00,0x00,}},
- {0x807C,2,{0xC2,0x9F,0x00,0x00,}},
- {0x807D,2,{0xC2,0xA0,0x00,0x00,}},
- {0x807E,2,{0xC3,0x40,0x00,0x00,}},
- {0x807F,2,{0xED,0xB2,0x00,0x00,}},
- {0x8080,2,{0xED,0xB1,0x00,0x00,}},
- {0x8081,2,{0xC3,0x41,0x00,0x00,}},
- {0x8082,2,{0xC3,0x42,0x00,0x00,}},
- {0x8083,2,{0xCB,0xE0,0x00,0x00,}},
- {0x8084,2,{0xD2,0xDE,0x00,0x00,}},
- {0x8085,2,{0xC3,0x43,0x00,0x00,}},
- {0x8086,2,{0xCB,0xC1,0x00,0x00,}},
- {0x8087,2,{0xD5,0xD8,0x00,0x00,}},
- {0x8088,2,{0xC3,0x44,0x00,0x00,}},
- {0x8089,2,{0xC8,0xE2,0x00,0x00,}},
- {0x808A,2,{0xC3,0x45,0x00,0x00,}},
- {0x808B,2,{0xC0,0xDF,0x00,0x00,}},
- {0x808C,2,{0xBC,0xA1,0x00,0x00,}},
- {0x808D,2,{0xC3,0x46,0x00,0x00,}},
- {0x808E,2,{0xC3,0x47,0x00,0x00,}},
- {0x808F,2,{0xC3,0x48,0x00,0x00,}},
- {0x8090,2,{0xC3,0x49,0x00,0x00,}},
- {0x8091,2,{0xC3,0x4A,0x00,0x00,}},
- {0x8092,2,{0xC3,0x4B,0x00,0x00,}},
- {0x8093,2,{0xEB,0xC1,0x00,0x00,}},
- {0x8094,2,{0xC3,0x4C,0x00,0x00,}},
- {0x8095,2,{0xC3,0x4D,0x00,0x00,}},
- {0x8096,2,{0xD0,0xA4,0x00,0x00,}},
- {0x8097,2,{0xC3,0x4E,0x00,0x00,}},
- {0x8098,2,{0xD6,0xE2,0x00,0x00,}},
- {0x8099,2,{0xC3,0x4F,0x00,0x00,}},
- {0x809A,2,{0xB6,0xC7,0x00,0x00,}},
- {0x809B,2,{0xB8,0xD8,0x00,0x00,}},
- {0x809C,2,{0xEB,0xC0,0x00,0x00,}},
- {0x809D,2,{0xB8,0xCE,0x00,0x00,}},
- {0x809E,2,{0xC3,0x50,0x00,0x00,}},
- {0x809F,2,{0xEB,0xBF,0x00,0x00,}},
- {0x80A0,2,{0xB3,0xA6,0x00,0x00,}},
- {0x80A1,2,{0xB9,0xC9,0x00,0x00,}},
- {0x80A2,2,{0xD6,0xAB,0x00,0x00,}},
- {0x80A3,2,{0xC3,0x51,0x00,0x00,}},
- {0x80A4,2,{0xB7,0xF4,0x00,0x00,}},
- {0x80A5,2,{0xB7,0xCA,0x00,0x00,}},
- {0x80A6,2,{0xC3,0x52,0x00,0x00,}},
- {0x80A7,2,{0xC3,0x53,0x00,0x00,}},
- {0x80A8,2,{0xC3,0x54,0x00,0x00,}},
- {0x80A9,2,{0xBC,0xE7,0x00,0x00,}},
- {0x80AA,2,{0xB7,0xBE,0x00,0x00,}},
- {0x80AB,2,{0xEB,0xC6,0x00,0x00,}},
- {0x80AC,2,{0xC3,0x55,0x00,0x00,}},
- {0x80AD,2,{0xEB,0xC7,0x00,0x00,}},
- {0x80AE,2,{0xB0,0xB9,0x00,0x00,}},
- {0x80AF,2,{0xBF,0xCF,0x00,0x00,}},
- {0x80B0,2,{0xC3,0x56,0x00,0x00,}},
- {0x80B1,2,{0xEB,0xC5,0x00,0x00,}},
- {0x80B2,2,{0xD3,0xFD,0x00,0x00,}},
- {0x80B3,2,{0xC3,0x57,0x00,0x00,}},
- {0x80B4,2,{0xEB,0xC8,0x00,0x00,}},
- {0x80B5,2,{0xC3,0x58,0x00,0x00,}},
- {0x80B6,2,{0xC3,0x59,0x00,0x00,}},
- {0x80B7,2,{0xEB,0xC9,0x00,0x00,}},
- {0x80B8,2,{0xC3,0x5A,0x00,0x00,}},
- {0x80B9,2,{0xC3,0x5B,0x00,0x00,}},
- {0x80BA,2,{0xB7,0xCE,0x00,0x00,}},
- {0x80BB,2,{0xC3,0x5C,0x00,0x00,}},
- {0x80BC,2,{0xEB,0xC2,0x00,0x00,}},
- {0x80BD,2,{0xEB,0xC4,0x00,0x00,}},
- {0x80BE,2,{0xC9,0xF6,0x00,0x00,}},
- {0x80BF,2,{0xD6,0xD7,0x00,0x00,}},
- {0x80C0,2,{0xD5,0xCD,0x00,0x00,}},
- {0x80C1,2,{0xD0,0xB2,0x00,0x00,}},
- {0x80C2,2,{0xEB,0xCF,0x00,0x00,}},
- {0x80C3,2,{0xCE,0xB8,0x00,0x00,}},
- {0x80C4,2,{0xEB,0xD0,0x00,0x00,}},
- {0x80C5,2,{0xC3,0x5D,0x00,0x00,}},
- {0x80C6,2,{0xB5,0xA8,0x00,0x00,}},
- {0x80C7,2,{0xC3,0x5E,0x00,0x00,}},
- {0x80C8,2,{0xC3,0x5F,0x00,0x00,}},
- {0x80C9,2,{0xC3,0x60,0x00,0x00,}},
- {0x80CA,2,{0xC3,0x61,0x00,0x00,}},
- {0x80CB,2,{0xC3,0x62,0x00,0x00,}},
- {0x80CC,2,{0xB1,0xB3,0x00,0x00,}},
- {0x80CD,2,{0xEB,0xD2,0x00,0x00,}},
- {0x80CE,2,{0xCC,0xA5,0x00,0x00,}},
- {0x80CF,2,{0xC3,0x63,0x00,0x00,}},
- {0x80D0,2,{0xC3,0x64,0x00,0x00,}},
- {0x80D1,2,{0xC3,0x65,0x00,0x00,}},
- {0x80D2,2,{0xC3,0x66,0x00,0x00,}},
- {0x80D3,2,{0xC3,0x67,0x00,0x00,}},
- {0x80D4,2,{0xC3,0x68,0x00,0x00,}},
- {0x80D5,2,{0xC3,0x69,0x00,0x00,}},
- {0x80D6,2,{0xC5,0xD6,0x00,0x00,}},
- {0x80D7,2,{0xEB,0xD3,0x00,0x00,}},
- {0x80D8,2,{0xC3,0x6A,0x00,0x00,}},
- {0x80D9,2,{0xEB,0xD1,0x00,0x00,}},
- {0x80DA,2,{0xC5,0xDF,0x00,0x00,}},
- {0x80DB,2,{0xEB,0xCE,0x00,0x00,}},
- {0x80DC,2,{0xCA,0xA4,0x00,0x00,}},
- {0x80DD,2,{0xEB,0xD5,0x00,0x00,}},
- {0x80DE,2,{0xB0,0xFB,0x00,0x00,}},
- {0x80DF,2,{0xC3,0x6B,0x00,0x00,}},
- {0x80E0,2,{0xC3,0x6C,0x00,0x00,}},
- {0x80E1,2,{0xBA,0xFA,0x00,0x00,}},
- {0x80E2,2,{0xC3,0x6D,0x00,0x00,}},
- {0x80E3,2,{0xC3,0x6E,0x00,0x00,}},
- {0x80E4,2,{0xD8,0xB7,0x00,0x00,}},
- {0x80E5,2,{0xF1,0xE3,0x00,0x00,}},
- {0x80E6,2,{0xC3,0x6F,0x00,0x00,}},
- {0x80E7,2,{0xEB,0xCA,0x00,0x00,}},
- {0x80E8,2,{0xEB,0xCB,0x00,0x00,}},
- {0x80E9,2,{0xEB,0xCC,0x00,0x00,}},
- {0x80EA,2,{0xEB,0xCD,0x00,0x00,}},
- {0x80EB,2,{0xEB,0xD6,0x00,0x00,}},
- {0x80EC,2,{0xE6,0xC0,0x00,0x00,}},
- {0x80ED,2,{0xEB,0xD9,0x00,0x00,}},
- {0x80EE,2,{0xC3,0x70,0x00,0x00,}},
- {0x80EF,2,{0xBF,0xE8,0x00,0x00,}},
- {0x80F0,2,{0xD2,0xC8,0x00,0x00,}},
- {0x80F1,2,{0xEB,0xD7,0x00,0x00,}},
- {0x80F2,2,{0xEB,0xDC,0x00,0x00,}},
- {0x80F3,2,{0xB8,0xEC,0x00,0x00,}},
- {0x80F4,2,{0xEB,0xD8,0x00,0x00,}},
- {0x80F5,2,{0xC3,0x71,0x00,0x00,}},
- {0x80F6,2,{0xBD,0xBA,0x00,0x00,}},
- {0x80F7,2,{0xC3,0x72,0x00,0x00,}},
- {0x80F8,2,{0xD0,0xD8,0x00,0x00,}},
- {0x80F9,2,{0xC3,0x73,0x00,0x00,}},
- {0x80FA,2,{0xB0,0xB7,0x00,0x00,}},
- {0x80FB,2,{0xC3,0x74,0x00,0x00,}},
- {0x80FC,2,{0xEB,0xDD,0x00,0x00,}},
- {0x80FD,2,{0xC4,0xDC,0x00,0x00,}},
- {0x80FE,2,{0xC3,0x75,0x00,0x00,}},
- {0x80FF,2,{0xC3,0x76,0x00,0x00,}},
- {0x8100,2,{0xC3,0x77,0x00,0x00,}},
- {0x8101,2,{0xC3,0x78,0x00,0x00,}},
- {0x8102,2,{0xD6,0xAC,0x00,0x00,}},
- {0x8103,2,{0xC3,0x79,0x00,0x00,}},
- {0x8104,2,{0xC3,0x7A,0x00,0x00,}},
- {0x8105,2,{0xC3,0x7B,0x00,0x00,}},
- {0x8106,2,{0xB4,0xE0,0x00,0x00,}},
- {0x8107,2,{0xC3,0x7C,0x00,0x00,}},
- {0x8108,2,{0xC3,0x7D,0x00,0x00,}},
- {0x8109,2,{0xC2,0xF6,0x00,0x00,}},
- {0x810A,2,{0xBC,0xB9,0x00,0x00,}},
- {0x810B,2,{0xC3,0x7E,0x00,0x00,}},
- {0x810C,2,{0xC3,0x80,0x00,0x00,}},
- {0x810D,2,{0xEB,0xDA,0x00,0x00,}},
- {0x810E,2,{0xEB,0xDB,0x00,0x00,}},
- {0x810F,2,{0xD4,0xE0,0x00,0x00,}},
- {0x8110,2,{0xC6,0xEA,0x00,0x00,}},
- {0x8111,2,{0xC4,0xD4,0x00,0x00,}},
- {0x8112,2,{0xEB,0xDF,0x00,0x00,}},
- {0x8113,2,{0xC5,0xA7,0x00,0x00,}},
- {0x8114,2,{0xD9,0xF5,0x00,0x00,}},
- {0x8115,2,{0xC3,0x81,0x00,0x00,}},
- {0x8116,2,{0xB2,0xB1,0x00,0x00,}},
- {0x8117,2,{0xC3,0x82,0x00,0x00,}},
- {0x8118,2,{0xEB,0xE4,0x00,0x00,}},
- {0x8119,2,{0xC3,0x83,0x00,0x00,}},
- {0x811A,2,{0xBD,0xC5,0x00,0x00,}},
- {0x811B,2,{0xC3,0x84,0x00,0x00,}},
- {0x811C,2,{0xC3,0x85,0x00,0x00,}},
- {0x811D,2,{0xC3,0x86,0x00,0x00,}},
- {0x811E,2,{0xEB,0xE2,0x00,0x00,}},
- {0x811F,2,{0xC3,0x87,0x00,0x00,}},
- {0x8120,2,{0xC3,0x88,0x00,0x00,}},
- {0x8121,2,{0xC3,0x89,0x00,0x00,}},
- {0x8122,2,{0xC3,0x8A,0x00,0x00,}},
- {0x8123,2,{0xC3,0x8B,0x00,0x00,}},
- {0x8124,2,{0xC3,0x8C,0x00,0x00,}},
- {0x8125,2,{0xC3,0x8D,0x00,0x00,}},
- {0x8126,2,{0xC3,0x8E,0x00,0x00,}},
- {0x8127,2,{0xC3,0x8F,0x00,0x00,}},
- {0x8128,2,{0xC3,0x90,0x00,0x00,}},
- {0x8129,2,{0xC3,0x91,0x00,0x00,}},
- {0x812A,2,{0xC3,0x92,0x00,0x00,}},
- {0x812B,2,{0xC3,0x93,0x00,0x00,}},
- {0x812C,2,{0xEB,0xE3,0x00,0x00,}},
- {0x812D,2,{0xC3,0x94,0x00,0x00,}},
- {0x812E,2,{0xC3,0x95,0x00,0x00,}},
- {0x812F,2,{0xB8,0xAC,0x00,0x00,}},
- {0x8130,2,{0xC3,0x96,0x00,0x00,}},
- {0x8131,2,{0xCD,0xD1,0x00,0x00,}},
- {0x8132,2,{0xEB,0xE5,0x00,0x00,}},
- {0x8133,2,{0xC3,0x97,0x00,0x00,}},
- {0x8134,2,{0xC3,0x98,0x00,0x00,}},
- {0x8135,2,{0xC3,0x99,0x00,0x00,}},
- {0x8136,2,{0xEB,0xE1,0x00,0x00,}},
- {0x8137,2,{0xC3,0x9A,0x00,0x00,}},
- {0x8138,2,{0xC1,0xB3,0x00,0x00,}},
- {0x8139,2,{0xC3,0x9B,0x00,0x00,}},
- {0x813A,2,{0xC3,0x9C,0x00,0x00,}},
- {0x813B,2,{0xC3,0x9D,0x00,0x00,}},
- {0x813C,2,{0xC3,0x9E,0x00,0x00,}},
- {0x813D,2,{0xC3,0x9F,0x00,0x00,}},
- {0x813E,2,{0xC6,0xA2,0x00,0x00,}},
- {0x813F,2,{0xC3,0xA0,0x00,0x00,}},
- {0x8140,2,{0xC4,0x40,0x00,0x00,}},
- {0x8141,2,{0xC4,0x41,0x00,0x00,}},
- {0x8142,2,{0xC4,0x42,0x00,0x00,}},
- {0x8143,2,{0xC4,0x43,0x00,0x00,}},
- {0x8144,2,{0xC4,0x44,0x00,0x00,}},
- {0x8145,2,{0xC4,0x45,0x00,0x00,}},
- {0x8146,2,{0xCC,0xF3,0x00,0x00,}},
- {0x8147,2,{0xC4,0x46,0x00,0x00,}},
- {0x8148,2,{0xEB,0xE6,0x00,0x00,}},
- {0x8149,2,{0xC4,0x47,0x00,0x00,}},
- {0x814A,2,{0xC0,0xB0,0x00,0x00,}},
- {0x814B,2,{0xD2,0xB8,0x00,0x00,}},
- {0x814C,2,{0xEB,0xE7,0x00,0x00,}},
- {0x814D,2,{0xC4,0x48,0x00,0x00,}},
- {0x814E,2,{0xC4,0x49,0x00,0x00,}},
- {0x814F,2,{0xC4,0x4A,0x00,0x00,}},
- {0x8150,2,{0xB8,0xAF,0x00,0x00,}},
- {0x8151,2,{0xB8,0xAD,0x00,0x00,}},
- {0x8152,2,{0xC4,0x4B,0x00,0x00,}},
- {0x8153,2,{0xEB,0xE8,0x00,0x00,}},
- {0x8154,2,{0xC7,0xBB,0x00,0x00,}},
- {0x8155,2,{0xCD,0xF3,0x00,0x00,}},
- {0x8156,2,{0xC4,0x4C,0x00,0x00,}},
- {0x8157,2,{0xC4,0x4D,0x00,0x00,}},
- {0x8158,2,{0xC4,0x4E,0x00,0x00,}},
- {0x8159,2,{0xEB,0xEA,0x00,0x00,}},
- {0x815A,2,{0xEB,0xEB,0x00,0x00,}},
- {0x815B,2,{0xC4,0x4F,0x00,0x00,}},
- {0x815C,2,{0xC4,0x50,0x00,0x00,}},
- {0x815D,2,{0xC4,0x51,0x00,0x00,}},
- {0x815E,2,{0xC4,0x52,0x00,0x00,}},
- {0x815F,2,{0xC4,0x53,0x00,0x00,}},
- {0x8160,2,{0xEB,0xED,0x00,0x00,}},
- {0x8161,2,{0xC4,0x54,0x00,0x00,}},
- {0x8162,2,{0xC4,0x55,0x00,0x00,}},
- {0x8163,2,{0xC4,0x56,0x00,0x00,}},
- {0x8164,2,{0xC4,0x57,0x00,0x00,}},
- {0x8165,2,{0xD0,0xC8,0x00,0x00,}},
- {0x8166,2,{0xC4,0x58,0x00,0x00,}},
- {0x8167,2,{0xEB,0xF2,0x00,0x00,}},
- {0x8168,2,{0xC4,0x59,0x00,0x00,}},
- {0x8169,2,{0xEB,0xEE,0x00,0x00,}},
- {0x816A,2,{0xC4,0x5A,0x00,0x00,}},
- {0x816B,2,{0xC4,0x5B,0x00,0x00,}},
- {0x816C,2,{0xC4,0x5C,0x00,0x00,}},
- {0x816D,2,{0xEB,0xF1,0x00,0x00,}},
- {0x816E,2,{0xC8,0xF9,0x00,0x00,}},
- {0x816F,2,{0xC4,0x5D,0x00,0x00,}},
- {0x8170,2,{0xD1,0xFC,0x00,0x00,}},
- {0x8171,2,{0xEB,0xEC,0x00,0x00,}},
- {0x8172,2,{0xC4,0x5E,0x00,0x00,}},
- {0x8173,2,{0xC4,0x5F,0x00,0x00,}},
- {0x8174,2,{0xEB,0xE9,0x00,0x00,}},
- {0x8175,2,{0xC4,0x60,0x00,0x00,}},
- {0x8176,2,{0xC4,0x61,0x00,0x00,}},
- {0x8177,2,{0xC4,0x62,0x00,0x00,}},
- {0x8178,2,{0xC4,0x63,0x00,0x00,}},
- {0x8179,2,{0xB8,0xB9,0x00,0x00,}},
- {0x817A,2,{0xCF,0xD9,0x00,0x00,}},
- {0x817B,2,{0xC4,0xE5,0x00,0x00,}},
- {0x817C,2,{0xEB,0xEF,0x00,0x00,}},
- {0x817D,2,{0xEB,0xF0,0x00,0x00,}},
- {0x817E,2,{0xCC,0xDA,0x00,0x00,}},
- {0x817F,2,{0xCD,0xC8,0x00,0x00,}},
- {0x8180,2,{0xB0,0xF2,0x00,0x00,}},
- {0x8181,2,{0xC4,0x64,0x00,0x00,}},
- {0x8182,2,{0xEB,0xF6,0x00,0x00,}},
- {0x8183,2,{0xC4,0x65,0x00,0x00,}},
- {0x8184,2,{0xC4,0x66,0x00,0x00,}},
- {0x8185,2,{0xC4,0x67,0x00,0x00,}},
- {0x8186,2,{0xC4,0x68,0x00,0x00,}},
- {0x8187,2,{0xC4,0x69,0x00,0x00,}},
- {0x8188,2,{0xEB,0xF5,0x00,0x00,}},
- {0x8189,2,{0xC4,0x6A,0x00,0x00,}},
- {0x818A,2,{0xB2,0xB2,0x00,0x00,}},
- {0x818B,2,{0xC4,0x6B,0x00,0x00,}},
- {0x818C,2,{0xC4,0x6C,0x00,0x00,}},
- {0x818D,2,{0xC4,0x6D,0x00,0x00,}},
- {0x818E,2,{0xC4,0x6E,0x00,0x00,}},
- {0x818F,2,{0xB8,0xE0,0x00,0x00,}},
- {0x8190,2,{0xC4,0x6F,0x00,0x00,}},
- {0x8191,2,{0xEB,0xF7,0x00,0x00,}},
- {0x8192,2,{0xC4,0x70,0x00,0x00,}},
- {0x8193,2,{0xC4,0x71,0x00,0x00,}},
- {0x8194,2,{0xC4,0x72,0x00,0x00,}},
- {0x8195,2,{0xC4,0x73,0x00,0x00,}},
- {0x8196,2,{0xC4,0x74,0x00,0x00,}},
- {0x8197,2,{0xC4,0x75,0x00,0x00,}},
- {0x8198,2,{0xB1,0xEC,0x00,0x00,}},
- {0x8199,2,{0xC4,0x76,0x00,0x00,}},
- {0x819A,2,{0xC4,0x77,0x00,0x00,}},
- {0x819B,2,{0xCC,0xC5,0x00,0x00,}},
- {0x819C,2,{0xC4,0xA4,0x00,0x00,}},
- {0x819D,2,{0xCF,0xA5,0x00,0x00,}},
- {0x819E,2,{0xC4,0x78,0x00,0x00,}},
- {0x819F,2,{0xC4,0x79,0x00,0x00,}},
- {0x81A0,2,{0xC4,0x7A,0x00,0x00,}},
- {0x81A1,2,{0xC4,0x7B,0x00,0x00,}},
- {0x81A2,2,{0xC4,0x7C,0x00,0x00,}},
- {0x81A3,2,{0xEB,0xF9,0x00,0x00,}},
- {0x81A4,2,{0xC4,0x7D,0x00,0x00,}},
- {0x81A5,2,{0xC4,0x7E,0x00,0x00,}},
- {0x81A6,2,{0xEC,0xA2,0x00,0x00,}},
- {0x81A7,2,{0xC4,0x80,0x00,0x00,}},
- {0x81A8,2,{0xC5,0xF2,0x00,0x00,}},
- {0x81A9,2,{0xC4,0x81,0x00,0x00,}},
- {0x81AA,2,{0xEB,0xFA,0x00,0x00,}},
- {0x81AB,2,{0xC4,0x82,0x00,0x00,}},
- {0x81AC,2,{0xC4,0x83,0x00,0x00,}},
- {0x81AD,2,{0xC4,0x84,0x00,0x00,}},
- {0x81AE,2,{0xC4,0x85,0x00,0x00,}},
- {0x81AF,2,{0xC4,0x86,0x00,0x00,}},
- {0x81B0,2,{0xC4,0x87,0x00,0x00,}},
- {0x81B1,2,{0xC4,0x88,0x00,0x00,}},
- {0x81B2,2,{0xC4,0x89,0x00,0x00,}},
- {0x81B3,2,{0xC9,0xC5,0x00,0x00,}},
- {0x81B4,2,{0xC4,0x8A,0x00,0x00,}},
- {0x81B5,2,{0xC4,0x8B,0x00,0x00,}},
- {0x81B6,2,{0xC4,0x8C,0x00,0x00,}},
- {0x81B7,2,{0xC4,0x8D,0x00,0x00,}},
- {0x81B8,2,{0xC4,0x8E,0x00,0x00,}},
- {0x81B9,2,{0xC4,0x8F,0x00,0x00,}},
- {0x81BA,2,{0xE2,0xDF,0x00,0x00,}},
- {0x81BB,2,{0xEB,0xFE,0x00,0x00,}},
- {0x81BC,2,{0xC4,0x90,0x00,0x00,}},
- {0x81BD,2,{0xC4,0x91,0x00,0x00,}},
- {0x81BE,2,{0xC4,0x92,0x00,0x00,}},
- {0x81BF,2,{0xC4,0x93,0x00,0x00,}},
- {0x81C0,2,{0xCD,0xCE,0x00,0x00,}},
- {0x81C1,2,{0xEC,0xA1,0x00,0x00,}},
- {0x81C2,2,{0xB1,0xDB,0x00,0x00,}},
- {0x81C3,2,{0xD3,0xB7,0x00,0x00,}},
- {0x81C4,2,{0xC4,0x94,0x00,0x00,}},
- {0x81C5,2,{0xC4,0x95,0x00,0x00,}},
- {0x81C6,2,{0xD2,0xDC,0x00,0x00,}},
- {0x81C7,2,{0xC4,0x96,0x00,0x00,}},
- {0x81C8,2,{0xC4,0x97,0x00,0x00,}},
- {0x81C9,2,{0xC4,0x98,0x00,0x00,}},
- {0x81CA,2,{0xEB,0xFD,0x00,0x00,}},
- {0x81CB,2,{0xC4,0x99,0x00,0x00,}},
- {0x81CC,2,{0xEB,0xFB,0x00,0x00,}},
- {0x81CD,2,{0xC4,0x9A,0x00,0x00,}},
- {0x81CE,2,{0xC4,0x9B,0x00,0x00,}},
- {0x81CF,2,{0xC4,0x9C,0x00,0x00,}},
- {0x81D0,2,{0xC4,0x9D,0x00,0x00,}},
- {0x81D1,2,{0xC4,0x9E,0x00,0x00,}},
- {0x81D2,2,{0xC4,0x9F,0x00,0x00,}},
- {0x81D3,2,{0xC4,0xA0,0x00,0x00,}},
- {0x81D4,2,{0xC5,0x40,0x00,0x00,}},
- {0x81D5,2,{0xC5,0x41,0x00,0x00,}},
- {0x81D6,2,{0xC5,0x42,0x00,0x00,}},
- {0x81D7,2,{0xC5,0x43,0x00,0x00,}},
- {0x81D8,2,{0xC5,0x44,0x00,0x00,}},
- {0x81D9,2,{0xC5,0x45,0x00,0x00,}},
- {0x81DA,2,{0xC5,0x46,0x00,0x00,}},
- {0x81DB,2,{0xC5,0x47,0x00,0x00,}},
- {0x81DC,2,{0xC5,0x48,0x00,0x00,}},
- {0x81DD,2,{0xC5,0x49,0x00,0x00,}},
- {0x81DE,2,{0xC5,0x4A,0x00,0x00,}},
- {0x81DF,2,{0xC5,0x4B,0x00,0x00,}},
- {0x81E0,2,{0xC5,0x4C,0x00,0x00,}},
- {0x81E1,2,{0xC5,0x4D,0x00,0x00,}},
- {0x81E2,2,{0xC5,0x4E,0x00,0x00,}},
- {0x81E3,2,{0xB3,0xBC,0x00,0x00,}},
- {0x81E4,2,{0xC5,0x4F,0x00,0x00,}},
- {0x81E5,2,{0xC5,0x50,0x00,0x00,}},
- {0x81E6,2,{0xC5,0x51,0x00,0x00,}},
- {0x81E7,2,{0xEA,0xB0,0x00,0x00,}},
- {0x81E8,2,{0xC5,0x52,0x00,0x00,}},
- {0x81E9,2,{0xC5,0x53,0x00,0x00,}},
- {0x81EA,2,{0xD7,0xD4,0x00,0x00,}},
- {0x81EB,2,{0xC5,0x54,0x00,0x00,}},
- {0x81EC,2,{0xF4,0xAB,0x00,0x00,}},
- {0x81ED,2,{0xB3,0xF4,0x00,0x00,}},
- {0x81EE,2,{0xC5,0x55,0x00,0x00,}},
- {0x81EF,2,{0xC5,0x56,0x00,0x00,}},
- {0x81F0,2,{0xC5,0x57,0x00,0x00,}},
- {0x81F1,2,{0xC5,0x58,0x00,0x00,}},
- {0x81F2,2,{0xC5,0x59,0x00,0x00,}},
- {0x81F3,2,{0xD6,0xC1,0x00,0x00,}},
- {0x81F4,2,{0xD6,0xC2,0x00,0x00,}},
- {0x81F5,2,{0xC5,0x5A,0x00,0x00,}},
- {0x81F6,2,{0xC5,0x5B,0x00,0x00,}},
- {0x81F7,2,{0xC5,0x5C,0x00,0x00,}},
- {0x81F8,2,{0xC5,0x5D,0x00,0x00,}},
- {0x81F9,2,{0xC5,0x5E,0x00,0x00,}},
- {0x81FA,2,{0xC5,0x5F,0x00,0x00,}},
- {0x81FB,2,{0xD5,0xE9,0x00,0x00,}},
- {0x81FC,2,{0xBE,0xCA,0x00,0x00,}},
- {0x81FD,2,{0xC5,0x60,0x00,0x00,}},
- {0x81FE,2,{0xF4,0xA7,0x00,0x00,}},
- {0x81FF,2,{0xC5,0x61,0x00,0x00,}},
- {0x8200,2,{0xD2,0xA8,0x00,0x00,}},
- {0x8201,2,{0xF4,0xA8,0x00,0x00,}},
- {0x8202,2,{0xF4,0xA9,0x00,0x00,}},
- {0x8203,2,{0xC5,0x62,0x00,0x00,}},
- {0x8204,2,{0xF4,0xAA,0x00,0x00,}},
- {0x8205,2,{0xBE,0xCB,0x00,0x00,}},
- {0x8206,2,{0xD3,0xDF,0x00,0x00,}},
- {0x8207,2,{0xC5,0x63,0x00,0x00,}},
- {0x8208,2,{0xC5,0x64,0x00,0x00,}},
- {0x8209,2,{0xC5,0x65,0x00,0x00,}},
- {0x820A,2,{0xC5,0x66,0x00,0x00,}},
- {0x820B,2,{0xC5,0x67,0x00,0x00,}},
- {0x820C,2,{0xC9,0xE0,0x00,0x00,}},
- {0x820D,2,{0xC9,0xE1,0x00,0x00,}},
- {0x820E,2,{0xC5,0x68,0x00,0x00,}},
- {0x820F,2,{0xC5,0x69,0x00,0x00,}},
- {0x8210,2,{0xF3,0xC2,0x00,0x00,}},
- {0x8211,2,{0xC5,0x6A,0x00,0x00,}},
- {0x8212,2,{0xCA,0xE6,0x00,0x00,}},
- {0x8213,2,{0xC5,0x6B,0x00,0x00,}},
- {0x8214,2,{0xCC,0xF2,0x00,0x00,}},
- {0x8215,2,{0xC5,0x6C,0x00,0x00,}},
- {0x8216,2,{0xC5,0x6D,0x00,0x00,}},
- {0x8217,2,{0xC5,0x6E,0x00,0x00,}},
- {0x8218,2,{0xC5,0x6F,0x00,0x00,}},
- {0x8219,2,{0xC5,0x70,0x00,0x00,}},
- {0x821A,2,{0xC5,0x71,0x00,0x00,}},
- {0x821B,2,{0xE2,0xB6,0x00,0x00,}},
- {0x821C,2,{0xCB,0xB4,0x00,0x00,}},
- {0x821D,2,{0xC5,0x72,0x00,0x00,}},
- {0x821E,2,{0xCE,0xE8,0x00,0x00,}},
- {0x821F,2,{0xD6,0xDB,0x00,0x00,}},
- {0x8220,2,{0xC5,0x73,0x00,0x00,}},
- {0x8221,2,{0xF4,0xAD,0x00,0x00,}},
- {0x8222,2,{0xF4,0xAE,0x00,0x00,}},
- {0x8223,2,{0xF4,0xAF,0x00,0x00,}},
- {0x8224,2,{0xC5,0x74,0x00,0x00,}},
- {0x8225,2,{0xC5,0x75,0x00,0x00,}},
- {0x8226,2,{0xC5,0x76,0x00,0x00,}},
- {0x8227,2,{0xC5,0x77,0x00,0x00,}},
- {0x8228,2,{0xF4,0xB2,0x00,0x00,}},
- {0x8229,2,{0xC5,0x78,0x00,0x00,}},
- {0x822A,2,{0xBA,0xBD,0x00,0x00,}},
- {0x822B,2,{0xF4,0xB3,0x00,0x00,}},
- {0x822C,2,{0xB0,0xE3,0x00,0x00,}},
- {0x822D,2,{0xF4,0xB0,0x00,0x00,}},
- {0x822E,2,{0xC5,0x79,0x00,0x00,}},
- {0x822F,2,{0xF4,0xB1,0x00,0x00,}},
- {0x8230,2,{0xBD,0xA2,0x00,0x00,}},
- {0x8231,2,{0xB2,0xD5,0x00,0x00,}},
- {0x8232,2,{0xC5,0x7A,0x00,0x00,}},
- {0x8233,2,{0xF4,0xB6,0x00,0x00,}},
- {0x8234,2,{0xF4,0xB7,0x00,0x00,}},
- {0x8235,2,{0xB6,0xE6,0x00,0x00,}},
- {0x8236,2,{0xB2,0xB0,0x00,0x00,}},
- {0x8237,2,{0xCF,0xCF,0x00,0x00,}},
- {0x8238,2,{0xF4,0xB4,0x00,0x00,}},
- {0x8239,2,{0xB4,0xAC,0x00,0x00,}},
- {0x823A,2,{0xC5,0x7B,0x00,0x00,}},
- {0x823B,2,{0xF4,0xB5,0x00,0x00,}},
- {0x823C,2,{0xC5,0x7C,0x00,0x00,}},
- {0x823D,2,{0xC5,0x7D,0x00,0x00,}},
- {0x823E,2,{0xF4,0xB8,0x00,0x00,}},
- {0x823F,2,{0xC5,0x7E,0x00,0x00,}},
- {0x8240,2,{0xC5,0x80,0x00,0x00,}},
- {0x8241,2,{0xC5,0x81,0x00,0x00,}},
- {0x8242,2,{0xC5,0x82,0x00,0x00,}},
- {0x8243,2,{0xC5,0x83,0x00,0x00,}},
- {0x8244,2,{0xF4,0xB9,0x00,0x00,}},
- {0x8245,2,{0xC5,0x84,0x00,0x00,}},
- {0x8246,2,{0xC5,0x85,0x00,0x00,}},
- {0x8247,2,{0xCD,0xA7,0x00,0x00,}},
- {0x8248,2,{0xC5,0x86,0x00,0x00,}},
- {0x8249,2,{0xF4,0xBA,0x00,0x00,}},
- {0x824A,2,{0xC5,0x87,0x00,0x00,}},
- {0x824B,2,{0xF4,0xBB,0x00,0x00,}},
- {0x824C,2,{0xC5,0x88,0x00,0x00,}},
- {0x824D,2,{0xC5,0x89,0x00,0x00,}},
- {0x824E,2,{0xC5,0x8A,0x00,0x00,}},
- {0x824F,2,{0xF4,0xBC,0x00,0x00,}},
- {0x8250,2,{0xC5,0x8B,0x00,0x00,}},
- {0x8251,2,{0xC5,0x8C,0x00,0x00,}},
- {0x8252,2,{0xC5,0x8D,0x00,0x00,}},
- {0x8253,2,{0xC5,0x8E,0x00,0x00,}},
- {0x8254,2,{0xC5,0x8F,0x00,0x00,}},
- {0x8255,2,{0xC5,0x90,0x00,0x00,}},
- {0x8256,2,{0xC5,0x91,0x00,0x00,}},
- {0x8257,2,{0xC5,0x92,0x00,0x00,}},
- {0x8258,2,{0xCB,0xD2,0x00,0x00,}},
- {0x8259,2,{0xC5,0x93,0x00,0x00,}},
- {0x825A,2,{0xF4,0xBD,0x00,0x00,}},
- {0x825B,2,{0xC5,0x94,0x00,0x00,}},
- {0x825C,2,{0xC5,0x95,0x00,0x00,}},
- {0x825D,2,{0xC5,0x96,0x00,0x00,}},
- {0x825E,2,{0xC5,0x97,0x00,0x00,}},
- {0x825F,2,{0xF4,0xBE,0x00,0x00,}},
- {0x8260,2,{0xC5,0x98,0x00,0x00,}},
- {0x8261,2,{0xC5,0x99,0x00,0x00,}},
- {0x8262,2,{0xC5,0x9A,0x00,0x00,}},
- {0x8263,2,{0xC5,0x9B,0x00,0x00,}},
- {0x8264,2,{0xC5,0x9C,0x00,0x00,}},
- {0x8265,2,{0xC5,0x9D,0x00,0x00,}},
- {0x8266,2,{0xC5,0x9E,0x00,0x00,}},
- {0x8267,2,{0xC5,0x9F,0x00,0x00,}},
- {0x8268,2,{0xF4,0xBF,0x00,0x00,}},
- {0x8269,2,{0xC5,0xA0,0x00,0x00,}},
- {0x826A,2,{0xC6,0x40,0x00,0x00,}},
- {0x826B,2,{0xC6,0x41,0x00,0x00,}},
- {0x826C,2,{0xC6,0x42,0x00,0x00,}},
- {0x826D,2,{0xC6,0x43,0x00,0x00,}},
- {0x826E,2,{0xF4,0xDE,0x00,0x00,}},
- {0x826F,2,{0xC1,0xBC,0x00,0x00,}},
- {0x8270,2,{0xBC,0xE8,0x00,0x00,}},
- {0x8271,2,{0xC6,0x44,0x00,0x00,}},
- {0x8272,2,{0xC9,0xAB,0x00,0x00,}},
- {0x8273,2,{0xD1,0xDE,0x00,0x00,}},
- {0x8274,2,{0xE5,0xF5,0x00,0x00,}},
- {0x8275,2,{0xC6,0x45,0x00,0x00,}},
- {0x8276,2,{0xC6,0x46,0x00,0x00,}},
- {0x8277,2,{0xC6,0x47,0x00,0x00,}},
- {0x8278,2,{0xC6,0x48,0x00,0x00,}},
- {0x8279,2,{0xDC,0xB3,0x00,0x00,}},
- {0x827A,2,{0xD2,0xD5,0x00,0x00,}},
- {0x827B,2,{0xC6,0x49,0x00,0x00,}},
- {0x827C,2,{0xC6,0x4A,0x00,0x00,}},
- {0x827D,2,{0xDC,0xB4,0x00,0x00,}},
- {0x827E,2,{0xB0,0xAC,0x00,0x00,}},
- {0x827F,2,{0xDC,0xB5,0x00,0x00,}},
- {0x8280,2,{0xC6,0x4B,0x00,0x00,}},
- {0x8281,2,{0xC6,0x4C,0x00,0x00,}},
- {0x8282,2,{0xBD,0xDA,0x00,0x00,}},
- {0x8283,2,{0xC6,0x4D,0x00,0x00,}},
- {0x8284,2,{0xDC,0xB9,0x00,0x00,}},
- {0x8285,2,{0xC6,0x4E,0x00,0x00,}},
- {0x8286,2,{0xC6,0x4F,0x00,0x00,}},
- {0x8287,2,{0xC6,0x50,0x00,0x00,}},
- {0x8288,2,{0xD8,0xC2,0x00,0x00,}},
- {0x8289,2,{0xC6,0x51,0x00,0x00,}},
- {0x828A,2,{0xDC,0xB7,0x00,0x00,}},
- {0x828B,2,{0xD3,0xF3,0x00,0x00,}},
- {0x828C,2,{0xC6,0x52,0x00,0x00,}},
- {0x828D,2,{0xC9,0xD6,0x00,0x00,}},
- {0x828E,2,{0xDC,0xBA,0x00,0x00,}},
- {0x828F,2,{0xDC,0xB6,0x00,0x00,}},
- {0x8290,2,{0xC6,0x53,0x00,0x00,}},
- {0x8291,2,{0xDC,0xBB,0x00,0x00,}},
- {0x8292,2,{0xC3,0xA2,0x00,0x00,}},
- {0x8293,2,{0xC6,0x54,0x00,0x00,}},
- {0x8294,2,{0xC6,0x55,0x00,0x00,}},
- {0x8295,2,{0xC6,0x56,0x00,0x00,}},
- {0x8296,2,{0xC6,0x57,0x00,0x00,}},
- {0x8297,2,{0xDC,0xBC,0x00,0x00,}},
- {0x8298,2,{0xDC,0xC5,0x00,0x00,}},
- {0x8299,2,{0xDC,0xBD,0x00,0x00,}},
- {0x829A,2,{0xC6,0x58,0x00,0x00,}},
- {0x829B,2,{0xC6,0x59,0x00,0x00,}},
- {0x829C,2,{0xCE,0xDF,0x00,0x00,}},
- {0x829D,2,{0xD6,0xA5,0x00,0x00,}},
- {0x829E,2,{0xC6,0x5A,0x00,0x00,}},
- {0x829F,2,{0xDC,0xCF,0x00,0x00,}},
- {0x82A0,2,{0xC6,0x5B,0x00,0x00,}},
- {0x82A1,2,{0xDC,0xCD,0x00,0x00,}},
- {0x82A2,2,{0xC6,0x5C,0x00,0x00,}},
- {0x82A3,2,{0xC6,0x5D,0x00,0x00,}},
- {0x82A4,2,{0xDC,0xD2,0x00,0x00,}},
- {0x82A5,2,{0xBD,0xE6,0x00,0x00,}},
- {0x82A6,2,{0xC2,0xAB,0x00,0x00,}},
- {0x82A7,2,{0xC6,0x5E,0x00,0x00,}},
- {0x82A8,2,{0xDC,0xB8,0x00,0x00,}},
- {0x82A9,2,{0xDC,0xCB,0x00,0x00,}},
- {0x82AA,2,{0xDC,0xCE,0x00,0x00,}},
- {0x82AB,2,{0xDC,0xBE,0x00,0x00,}},
- {0x82AC,2,{0xB7,0xD2,0x00,0x00,}},
- {0x82AD,2,{0xB0,0xC5,0x00,0x00,}},
- {0x82AE,2,{0xDC,0xC7,0x00,0x00,}},
- {0x82AF,2,{0xD0,0xBE,0x00,0x00,}},
- {0x82B0,2,{0xDC,0xC1,0x00,0x00,}},
- {0x82B1,2,{0xBB,0xA8,0x00,0x00,}},
- {0x82B2,2,{0xC6,0x5F,0x00,0x00,}},
- {0x82B3,2,{0xB7,0xBC,0x00,0x00,}},
- {0x82B4,2,{0xDC,0xCC,0x00,0x00,}},
- {0x82B5,2,{0xC6,0x60,0x00,0x00,}},
- {0x82B6,2,{0xC6,0x61,0x00,0x00,}},
- {0x82B7,2,{0xDC,0xC6,0x00,0x00,}},
- {0x82B8,2,{0xDC,0xBF,0x00,0x00,}},
- {0x82B9,2,{0xC7,0xDB,0x00,0x00,}},
- {0x82BA,2,{0xC6,0x62,0x00,0x00,}},
- {0x82BB,2,{0xC6,0x63,0x00,0x00,}},
- {0x82BC,2,{0xC6,0x64,0x00,0x00,}},
- {0x82BD,2,{0xD1,0xBF,0x00,0x00,}},
- {0x82BE,2,{0xDC,0xC0,0x00,0x00,}},
- {0x82BF,2,{0xC6,0x65,0x00,0x00,}},
- {0x82C0,2,{0xC6,0x66,0x00,0x00,}},
- {0x82C1,2,{0xDC,0xCA,0x00,0x00,}},
- {0x82C2,2,{0xC6,0x67,0x00,0x00,}},
- {0x82C3,2,{0xC6,0x68,0x00,0x00,}},
- {0x82C4,2,{0xDC,0xD0,0x00,0x00,}},
- {0x82C5,2,{0xC6,0x69,0x00,0x00,}},
- {0x82C6,2,{0xC6,0x6A,0x00,0x00,}},
- {0x82C7,2,{0xCE,0xAD,0x00,0x00,}},
- {0x82C8,2,{0xDC,0xC2,0x00,0x00,}},
- {0x82C9,2,{0xC6,0x6B,0x00,0x00,}},
- {0x82CA,2,{0xDC,0xC3,0x00,0x00,}},
- {0x82CB,2,{0xDC,0xC8,0x00,0x00,}},
- {0x82CC,2,{0xDC,0xC9,0x00,0x00,}},
- {0x82CD,2,{0xB2,0xD4,0x00,0x00,}},
- {0x82CE,2,{0xDC,0xD1,0x00,0x00,}},
- {0x82CF,2,{0xCB,0xD5,0x00,0x00,}},
- {0x82D0,2,{0xC6,0x6C,0x00,0x00,}},
- {0x82D1,2,{0xD4,0xB7,0x00,0x00,}},
- {0x82D2,2,{0xDC,0xDB,0x00,0x00,}},
- {0x82D3,2,{0xDC,0xDF,0x00,0x00,}},
- {0x82D4,2,{0xCC,0xA6,0x00,0x00,}},
- {0x82D5,2,{0xDC,0xE6,0x00,0x00,}},
- {0x82D6,2,{0xC6,0x6D,0x00,0x00,}},
- {0x82D7,2,{0xC3,0xE7,0x00,0x00,}},
- {0x82D8,2,{0xDC,0xDC,0x00,0x00,}},
- {0x82D9,2,{0xC6,0x6E,0x00,0x00,}},
- {0x82DA,2,{0xC6,0x6F,0x00,0x00,}},
- {0x82DB,2,{0xBF,0xC1,0x00,0x00,}},
- {0x82DC,2,{0xDC,0xD9,0x00,0x00,}},
- {0x82DD,2,{0xC6,0x70,0x00,0x00,}},
- {0x82DE,2,{0xB0,0xFA,0x00,0x00,}},
- {0x82DF,2,{0xB9,0xB6,0x00,0x00,}},
- {0x82E0,2,{0xDC,0xE5,0x00,0x00,}},
- {0x82E1,2,{0xDC,0xD3,0x00,0x00,}},
- {0x82E2,2,{0xC6,0x71,0x00,0x00,}},
- {0x82E3,2,{0xDC,0xC4,0x00,0x00,}},
- {0x82E4,2,{0xDC,0xD6,0x00,0x00,}},
- {0x82E5,2,{0xC8,0xF4,0x00,0x00,}},
- {0x82E6,2,{0xBF,0xE0,0x00,0x00,}},
- {0x82E7,2,{0xC6,0x72,0x00,0x00,}},
- {0x82E8,2,{0xC6,0x73,0x00,0x00,}},
- {0x82E9,2,{0xC6,0x74,0x00,0x00,}},
- {0x82EA,2,{0xC6,0x75,0x00,0x00,}},
- {0x82EB,2,{0xC9,0xBB,0x00,0x00,}},
- {0x82EC,2,{0xC6,0x76,0x00,0x00,}},
- {0x82ED,2,{0xC6,0x77,0x00,0x00,}},
- {0x82EE,2,{0xC6,0x78,0x00,0x00,}},
- {0x82EF,2,{0xB1,0xBD,0x00,0x00,}},
- {0x82F0,2,{0xC6,0x79,0x00,0x00,}},
- {0x82F1,2,{0xD3,0xA2,0x00,0x00,}},
- {0x82F2,2,{0xC6,0x7A,0x00,0x00,}},
- {0x82F3,2,{0xC6,0x7B,0x00,0x00,}},
- {0x82F4,2,{0xDC,0xDA,0x00,0x00,}},
- {0x82F5,2,{0xC6,0x7C,0x00,0x00,}},
- {0x82F6,2,{0xC6,0x7D,0x00,0x00,}},
- {0x82F7,2,{0xDC,0xD5,0x00,0x00,}},
- {0x82F8,2,{0xC6,0x7E,0x00,0x00,}},
- {0x82F9,2,{0xC6,0xBB,0x00,0x00,}},
- {0x82FA,2,{0xC6,0x80,0x00,0x00,}},
- {0x82FB,2,{0xDC,0xDE,0x00,0x00,}},
- {0x82FC,2,{0xC6,0x81,0x00,0x00,}},
- {0x82FD,2,{0xC6,0x82,0x00,0x00,}},
- {0x82FE,2,{0xC6,0x83,0x00,0x00,}},
- {0x82FF,2,{0xC6,0x84,0x00,0x00,}},
- {0x8300,2,{0xC6,0x85,0x00,0x00,}},
- {0x8301,2,{0xD7,0xC2,0x00,0x00,}},
- {0x8302,2,{0xC3,0xAF,0x00,0x00,}},
- {0x8303,2,{0xB7,0xB6,0x00,0x00,}},
- {0x8304,2,{0xC7,0xD1,0x00,0x00,}},
- {0x8305,2,{0xC3,0xA9,0x00,0x00,}},
- {0x8306,2,{0xDC,0xE2,0x00,0x00,}},
- {0x8307,2,{0xDC,0xD8,0x00,0x00,}},
- {0x8308,2,{0xDC,0xEB,0x00,0x00,}},
- {0x8309,2,{0xDC,0xD4,0x00,0x00,}},
- {0x830A,2,{0xC6,0x86,0x00,0x00,}},
- {0x830B,2,{0xC6,0x87,0x00,0x00,}},
- {0x830C,2,{0xDC,0xDD,0x00,0x00,}},
- {0x830D,2,{0xC6,0x88,0x00,0x00,}},
- {0x830E,2,{0xBE,0xA5,0x00,0x00,}},
- {0x830F,2,{0xDC,0xD7,0x00,0x00,}},
- {0x8310,2,{0xC6,0x89,0x00,0x00,}},
- {0x8311,2,{0xDC,0xE0,0x00,0x00,}},
- {0x8312,2,{0xC6,0x8A,0x00,0x00,}},
- {0x8313,2,{0xC6,0x8B,0x00,0x00,}},
- {0x8314,2,{0xDC,0xE3,0x00,0x00,}},
- {0x8315,2,{0xDC,0xE4,0x00,0x00,}},
- {0x8316,2,{0xC6,0x8C,0x00,0x00,}},
- {0x8317,2,{0xDC,0xF8,0x00,0x00,}},
- {0x8318,2,{0xC6,0x8D,0x00,0x00,}},
- {0x8319,2,{0xC6,0x8E,0x00,0x00,}},
- {0x831A,2,{0xDC,0xE1,0x00,0x00,}},
- {0x831B,2,{0xDD,0xA2,0x00,0x00,}},
- {0x831C,2,{0xDC,0xE7,0x00,0x00,}},
- {0x831D,2,{0xC6,0x8F,0x00,0x00,}},
- {0x831E,2,{0xC6,0x90,0x00,0x00,}},
- {0x831F,2,{0xC6,0x91,0x00,0x00,}},
- {0x8320,2,{0xC6,0x92,0x00,0x00,}},
- {0x8321,2,{0xC6,0x93,0x00,0x00,}},
- {0x8322,2,{0xC6,0x94,0x00,0x00,}},
- {0x8323,2,{0xC6,0x95,0x00,0x00,}},
- {0x8324,2,{0xC6,0x96,0x00,0x00,}},
- {0x8325,2,{0xC6,0x97,0x00,0x00,}},
- {0x8326,2,{0xC6,0x98,0x00,0x00,}},
- {0x8327,2,{0xBC,0xEB,0x00,0x00,}},
- {0x8328,2,{0xB4,0xC4,0x00,0x00,}},
- {0x8329,2,{0xC6,0x99,0x00,0x00,}},
- {0x832A,2,{0xC6,0x9A,0x00,0x00,}},
- {0x832B,2,{0xC3,0xA3,0x00,0x00,}},
- {0x832C,2,{0xB2,0xE7,0x00,0x00,}},
- {0x832D,2,{0xDC,0xFA,0x00,0x00,}},
- {0x832E,2,{0xC6,0x9B,0x00,0x00,}},
- {0x832F,2,{0xDC,0xF2,0x00,0x00,}},
- {0x8330,2,{0xC6,0x9C,0x00,0x00,}},
- {0x8331,2,{0xDC,0xEF,0x00,0x00,}},
- {0x8332,2,{0xC6,0x9D,0x00,0x00,}},
- {0x8333,2,{0xDC,0xFC,0x00,0x00,}},
- {0x8334,2,{0xDC,0xEE,0x00,0x00,}},
- {0x8335,2,{0xD2,0xF0,0x00,0x00,}},
- {0x8336,2,{0xB2,0xE8,0x00,0x00,}},
- {0x8337,2,{0xC6,0x9E,0x00,0x00,}},
- {0x8338,2,{0xC8,0xD7,0x00,0x00,}},
- {0x8339,2,{0xC8,0xE3,0x00,0x00,}},
- {0x833A,2,{0xDC,0xFB,0x00,0x00,}},
- {0x833B,2,{0xC6,0x9F,0x00,0x00,}},
- {0x833C,2,{0xDC,0xED,0x00,0x00,}},
- {0x833D,2,{0xC6,0xA0,0x00,0x00,}},
- {0x833E,2,{0xC7,0x40,0x00,0x00,}},
- {0x833F,2,{0xC7,0x41,0x00,0x00,}},
- {0x8340,2,{0xDC,0xF7,0x00,0x00,}},
- {0x8341,2,{0xC7,0x42,0x00,0x00,}},
- {0x8342,2,{0xC7,0x43,0x00,0x00,}},
- {0x8343,2,{0xDC,0xF5,0x00,0x00,}},
- {0x8344,2,{0xC7,0x44,0x00,0x00,}},
- {0x8345,2,{0xC7,0x45,0x00,0x00,}},
- {0x8346,2,{0xBE,0xA3,0x00,0x00,}},
- {0x8347,2,{0xDC,0xF4,0x00,0x00,}},
- {0x8348,2,{0xC7,0x46,0x00,0x00,}},
- {0x8349,2,{0xB2,0xDD,0x00,0x00,}},
- {0x834A,2,{0xC7,0x47,0x00,0x00,}},
- {0x834B,2,{0xC7,0x48,0x00,0x00,}},
- {0x834C,2,{0xC7,0x49,0x00,0x00,}},
- {0x834D,2,{0xC7,0x4A,0x00,0x00,}},
- {0x834E,2,{0xC7,0x4B,0x00,0x00,}},
- {0x834F,2,{0xDC,0xF3,0x00,0x00,}},
- {0x8350,2,{0xBC,0xF6,0x00,0x00,}},
- {0x8351,2,{0xDC,0xE8,0x00,0x00,}},
- {0x8352,2,{0xBB,0xC4,0x00,0x00,}},
- {0x8353,2,{0xC7,0x4C,0x00,0x00,}},
- {0x8354,2,{0xC0,0xF3,0x00,0x00,}},
- {0x8355,2,{0xC7,0x4D,0x00,0x00,}},
- {0x8356,2,{0xC7,0x4E,0x00,0x00,}},
- {0x8357,2,{0xC7,0x4F,0x00,0x00,}},
- {0x8358,2,{0xC7,0x50,0x00,0x00,}},
- {0x8359,2,{0xC7,0x51,0x00,0x00,}},
- {0x835A,2,{0xBC,0xD4,0x00,0x00,}},
- {0x835B,2,{0xDC,0xE9,0x00,0x00,}},
- {0x835C,2,{0xDC,0xEA,0x00,0x00,}},
- {0x835D,2,{0xC7,0x52,0x00,0x00,}},
- {0x835E,2,{0xDC,0xF1,0x00,0x00,}},
- {0x835F,2,{0xDC,0xF6,0x00,0x00,}},
- {0x8360,2,{0xDC,0xF9,0x00,0x00,}},
- {0x8361,2,{0xB5,0xB4,0x00,0x00,}},
- {0x8362,2,{0xC7,0x53,0x00,0x00,}},
- {0x8363,2,{0xC8,0xD9,0x00,0x00,}},
- {0x8364,2,{0xBB,0xE7,0x00,0x00,}},
- {0x8365,2,{0xDC,0xFE,0x00,0x00,}},
- {0x8366,2,{0xDC,0xFD,0x00,0x00,}},
- {0x8367,2,{0xD3,0xAB,0x00,0x00,}},
- {0x8368,2,{0xDD,0xA1,0x00,0x00,}},
- {0x8369,2,{0xDD,0xA3,0x00,0x00,}},
- {0x836A,2,{0xDD,0xA5,0x00,0x00,}},
- {0x836B,2,{0xD2,0xF1,0x00,0x00,}},
- {0x836C,2,{0xDD,0xA4,0x00,0x00,}},
- {0x836D,2,{0xDD,0xA6,0x00,0x00,}},
- {0x836E,2,{0xDD,0xA7,0x00,0x00,}},
- {0x836F,2,{0xD2,0xA9,0x00,0x00,}},
- {0x8370,2,{0xC7,0x54,0x00,0x00,}},
- {0x8371,2,{0xC7,0x55,0x00,0x00,}},
- {0x8372,2,{0xC7,0x56,0x00,0x00,}},
- {0x8373,2,{0xC7,0x57,0x00,0x00,}},
- {0x8374,2,{0xC7,0x58,0x00,0x00,}},
- {0x8375,2,{0xC7,0x59,0x00,0x00,}},
- {0x8376,2,{0xC7,0x5A,0x00,0x00,}},
- {0x8377,2,{0xBA,0xC9,0x00,0x00,}},
- {0x8378,2,{0xDD,0xA9,0x00,0x00,}},
- {0x8379,2,{0xC7,0x5B,0x00,0x00,}},
- {0x837A,2,{0xC7,0x5C,0x00,0x00,}},
- {0x837B,2,{0xDD,0xB6,0x00,0x00,}},
- {0x837C,2,{0xDD,0xB1,0x00,0x00,}},
- {0x837D,2,{0xDD,0xB4,0x00,0x00,}},
- {0x837E,2,{0xC7,0x5D,0x00,0x00,}},
- {0x837F,2,{0xC7,0x5E,0x00,0x00,}},
- {0x8380,2,{0xC7,0x5F,0x00,0x00,}},
- {0x8381,2,{0xC7,0x60,0x00,0x00,}},
- {0x8382,2,{0xC7,0x61,0x00,0x00,}},
- {0x8383,2,{0xC7,0x62,0x00,0x00,}},
- {0x8384,2,{0xC7,0x63,0x00,0x00,}},
- {0x8385,2,{0xDD,0xB0,0x00,0x00,}},
- {0x8386,2,{0xC6,0xCE,0x00,0x00,}},
- {0x8387,2,{0xC7,0x64,0x00,0x00,}},
- {0x8388,2,{0xC7,0x65,0x00,0x00,}},
- {0x8389,2,{0xC0,0xF2,0x00,0x00,}},
- {0x838A,2,{0xC7,0x66,0x00,0x00,}},
- {0x838B,2,{0xC7,0x67,0x00,0x00,}},
- {0x838C,2,{0xC7,0x68,0x00,0x00,}},
- {0x838D,2,{0xC7,0x69,0x00,0x00,}},
- {0x838E,2,{0xC9,0xAF,0x00,0x00,}},
- {0x838F,2,{0xC7,0x6A,0x00,0x00,}},
- {0x8390,2,{0xC7,0x6B,0x00,0x00,}},
- {0x8391,2,{0xC7,0x6C,0x00,0x00,}},
- {0x8392,2,{0xDC,0xEC,0x00,0x00,}},
- {0x8393,2,{0xDD,0xAE,0x00,0x00,}},
- {0x8394,2,{0xC7,0x6D,0x00,0x00,}},
- {0x8395,2,{0xC7,0x6E,0x00,0x00,}},
- {0x8396,2,{0xC7,0x6F,0x00,0x00,}},
- {0x8397,2,{0xC7,0x70,0x00,0x00,}},
- {0x8398,2,{0xDD,0xB7,0x00,0x00,}},
- {0x8399,2,{0xC7,0x71,0x00,0x00,}},
- {0x839A,2,{0xC7,0x72,0x00,0x00,}},
- {0x839B,2,{0xDC,0xF0,0x00,0x00,}},
- {0x839C,2,{0xDD,0xAF,0x00,0x00,}},
- {0x839D,2,{0xC7,0x73,0x00,0x00,}},
- {0x839E,2,{0xDD,0xB8,0x00,0x00,}},
- {0x839F,2,{0xC7,0x74,0x00,0x00,}},
- {0x83A0,2,{0xDD,0xAC,0x00,0x00,}},
- {0x83A1,2,{0xC7,0x75,0x00,0x00,}},
- {0x83A2,2,{0xC7,0x76,0x00,0x00,}},
- {0x83A3,2,{0xC7,0x77,0x00,0x00,}},
- {0x83A4,2,{0xC7,0x78,0x00,0x00,}},
- {0x83A5,2,{0xC7,0x79,0x00,0x00,}},
- {0x83A6,2,{0xC7,0x7A,0x00,0x00,}},
- {0x83A7,2,{0xC7,0x7B,0x00,0x00,}},
- {0x83A8,2,{0xDD,0xB9,0x00,0x00,}},
- {0x83A9,2,{0xDD,0xB3,0x00,0x00,}},
- {0x83AA,2,{0xDD,0xAD,0x00,0x00,}},
- {0x83AB,2,{0xC4,0xAA,0x00,0x00,}},
- {0x83AC,2,{0xC7,0x7C,0x00,0x00,}},
- {0x83AD,2,{0xC7,0x7D,0x00,0x00,}},
- {0x83AE,2,{0xC7,0x7E,0x00,0x00,}},
- {0x83AF,2,{0xC7,0x80,0x00,0x00,}},
- {0x83B0,2,{0xDD,0xA8,0x00,0x00,}},
- {0x83B1,2,{0xC0,0xB3,0x00,0x00,}},
- {0x83B2,2,{0xC1,0xAB,0x00,0x00,}},
- {0x83B3,2,{0xDD,0xAA,0x00,0x00,}},
- {0x83B4,2,{0xDD,0xAB,0x00,0x00,}},
- {0x83B5,2,{0xC7,0x81,0x00,0x00,}},
- {0x83B6,2,{0xDD,0xB2,0x00,0x00,}},
- {0x83B7,2,{0xBB,0xF1,0x00,0x00,}},
- {0x83B8,2,{0xDD,0xB5,0x00,0x00,}},
- {0x83B9,2,{0xD3,0xA8,0x00,0x00,}},
- {0x83BA,2,{0xDD,0xBA,0x00,0x00,}},
- {0x83BB,2,{0xC7,0x82,0x00,0x00,}},
- {0x83BC,2,{0xDD,0xBB,0x00,0x00,}},
- {0x83BD,2,{0xC3,0xA7,0x00,0x00,}},
- {0x83BE,2,{0xC7,0x83,0x00,0x00,}},
- {0x83BF,2,{0xC7,0x84,0x00,0x00,}},
- {0x83C0,2,{0xDD,0xD2,0x00,0x00,}},
- {0x83C1,2,{0xDD,0xBC,0x00,0x00,}},
- {0x83C2,2,{0xC7,0x85,0x00,0x00,}},
- {0x83C3,2,{0xC7,0x86,0x00,0x00,}},
- {0x83C4,2,{0xC7,0x87,0x00,0x00,}},
- {0x83C5,2,{0xDD,0xD1,0x00,0x00,}},
- {0x83C6,2,{0xC7,0x88,0x00,0x00,}},
- {0x83C7,2,{0xB9,0xBD,0x00,0x00,}},
- {0x83C8,2,{0xC7,0x89,0x00,0x00,}},
- {0x83C9,2,{0xC7,0x8A,0x00,0x00,}},
- {0x83CA,2,{0xBE,0xD5,0x00,0x00,}},
- {0x83CB,2,{0xC7,0x8B,0x00,0x00,}},
- {0x83CC,2,{0xBE,0xFA,0x00,0x00,}},
- {0x83CD,2,{0xC7,0x8C,0x00,0x00,}},
- {0x83CE,2,{0xC7,0x8D,0x00,0x00,}},
- {0x83CF,2,{0xBA,0xCA,0x00,0x00,}},
- {0x83D0,2,{0xC7,0x8E,0x00,0x00,}},
- {0x83D1,2,{0xC7,0x8F,0x00,0x00,}},
- {0x83D2,2,{0xC7,0x90,0x00,0x00,}},
- {0x83D3,2,{0xC7,0x91,0x00,0x00,}},
- {0x83D4,2,{0xDD,0xCA,0x00,0x00,}},
- {0x83D5,2,{0xC7,0x92,0x00,0x00,}},
- {0x83D6,2,{0xDD,0xC5,0x00,0x00,}},
- {0x83D7,2,{0xC7,0x93,0x00,0x00,}},
- {0x83D8,2,{0xDD,0xBF,0x00,0x00,}},
- {0x83D9,2,{0xC7,0x94,0x00,0x00,}},
- {0x83DA,2,{0xC7,0x95,0x00,0x00,}},
- {0x83DB,2,{0xC7,0x96,0x00,0x00,}},
- {0x83DC,2,{0xB2,0xCB,0x00,0x00,}},
- {0x83DD,2,{0xDD,0xC3,0x00,0x00,}},
- {0x83DE,2,{0xC7,0x97,0x00,0x00,}},
- {0x83DF,2,{0xDD,0xCB,0x00,0x00,}},
- {0x83E0,2,{0xB2,0xA4,0x00,0x00,}},
- {0x83E1,2,{0xDD,0xD5,0x00,0x00,}},
- {0x83E2,2,{0xC7,0x98,0x00,0x00,}},
- {0x83E3,2,{0xC7,0x99,0x00,0x00,}},
- {0x83E4,2,{0xC7,0x9A,0x00,0x00,}},
- {0x83E5,2,{0xDD,0xBE,0x00,0x00,}},
- {0x83E6,2,{0xC7,0x9B,0x00,0x00,}},
- {0x83E7,2,{0xC7,0x9C,0x00,0x00,}},
- {0x83E8,2,{0xC7,0x9D,0x00,0x00,}},
- {0x83E9,2,{0xC6,0xD0,0x00,0x00,}},
- {0x83EA,2,{0xDD,0xD0,0x00,0x00,}},
- {0x83EB,2,{0xC7,0x9E,0x00,0x00,}},
- {0x83EC,2,{0xC7,0x9F,0x00,0x00,}},
- {0x83ED,2,{0xC7,0xA0,0x00,0x00,}},
- {0x83EE,2,{0xC8,0x40,0x00,0x00,}},
- {0x83EF,2,{0xC8,0x41,0x00,0x00,}},
- {0x83F0,2,{0xDD,0xD4,0x00,0x00,}},
- {0x83F1,2,{0xC1,0xE2,0x00,0x00,}},
- {0x83F2,2,{0xB7,0xC6,0x00,0x00,}},
- {0x83F3,2,{0xC8,0x42,0x00,0x00,}},
- {0x83F4,2,{0xC8,0x43,0x00,0x00,}},
- {0x83F5,2,{0xC8,0x44,0x00,0x00,}},
- {0x83F6,2,{0xC8,0x45,0x00,0x00,}},
- {0x83F7,2,{0xC8,0x46,0x00,0x00,}},
- {0x83F8,2,{0xDD,0xCE,0x00,0x00,}},
- {0x83F9,2,{0xDD,0xCF,0x00,0x00,}},
- {0x83FA,2,{0xC8,0x47,0x00,0x00,}},
- {0x83FB,2,{0xC8,0x48,0x00,0x00,}},
- {0x83FC,2,{0xC8,0x49,0x00,0x00,}},
- {0x83FD,2,{0xDD,0xC4,0x00,0x00,}},
- {0x83FE,2,{0xC8,0x4A,0x00,0x00,}},
- {0x83FF,2,{0xC8,0x4B,0x00,0x00,}},
- {0x8400,2,{0xC8,0x4C,0x00,0x00,}},
- {0x8401,2,{0xDD,0xBD,0x00,0x00,}},
- {0x8402,2,{0xC8,0x4D,0x00,0x00,}},
- {0x8403,2,{0xDD,0xCD,0x00,0x00,}},
- {0x8404,2,{0xCC,0xD1,0x00,0x00,}},
- {0x8405,2,{0xC8,0x4E,0x00,0x00,}},
- {0x8406,2,{0xDD,0xC9,0x00,0x00,}},
- {0x8407,2,{0xC8,0x4F,0x00,0x00,}},
- {0x8408,2,{0xC8,0x50,0x00,0x00,}},
- {0x8409,2,{0xC8,0x51,0x00,0x00,}},
- {0x840A,2,{0xC8,0x52,0x00,0x00,}},
- {0x840B,2,{0xDD,0xC2,0x00,0x00,}},
- {0x840C,2,{0xC3,0xC8,0x00,0x00,}},
- {0x840D,2,{0xC6,0xBC,0x00,0x00,}},
- {0x840E,2,{0xCE,0xAE,0x00,0x00,}},
- {0x840F,2,{0xDD,0xCC,0x00,0x00,}},
- {0x8410,2,{0xC8,0x53,0x00,0x00,}},
- {0x8411,2,{0xDD,0xC8,0x00,0x00,}},
- {0x8412,2,{0xC8,0x54,0x00,0x00,}},
- {0x8413,2,{0xC8,0x55,0x00,0x00,}},
- {0x8414,2,{0xC8,0x56,0x00,0x00,}},
- {0x8415,2,{0xC8,0x57,0x00,0x00,}},
- {0x8416,2,{0xC8,0x58,0x00,0x00,}},
- {0x8417,2,{0xC8,0x59,0x00,0x00,}},
- {0x8418,2,{0xDD,0xC1,0x00,0x00,}},
- {0x8419,2,{0xC8,0x5A,0x00,0x00,}},
- {0x841A,2,{0xC8,0x5B,0x00,0x00,}},
- {0x841B,2,{0xC8,0x5C,0x00,0x00,}},
- {0x841C,2,{0xDD,0xC6,0x00,0x00,}},
- {0x841D,2,{0xC2,0xDC,0x00,0x00,}},
- {0x841E,2,{0xC8,0x5D,0x00,0x00,}},
- {0x841F,2,{0xC8,0x5E,0x00,0x00,}},
- {0x8420,2,{0xC8,0x5F,0x00,0x00,}},
- {0x8421,2,{0xC8,0x60,0x00,0x00,}},
- {0x8422,2,{0xC8,0x61,0x00,0x00,}},
- {0x8423,2,{0xC8,0x62,0x00,0x00,}},
- {0x8424,2,{0xD3,0xA9,0x00,0x00,}},
- {0x8425,2,{0xD3,0xAA,0x00,0x00,}},
- {0x8426,2,{0xDD,0xD3,0x00,0x00,}},
- {0x8427,2,{0xCF,0xF4,0x00,0x00,}},
- {0x8428,2,{0xC8,0xF8,0x00,0x00,}},
- {0x8429,2,{0xC8,0x63,0x00,0x00,}},
- {0x842A,2,{0xC8,0x64,0x00,0x00,}},
- {0x842B,2,{0xC8,0x65,0x00,0x00,}},
- {0x842C,2,{0xC8,0x66,0x00,0x00,}},
- {0x842D,2,{0xC8,0x67,0x00,0x00,}},
- {0x842E,2,{0xC8,0x68,0x00,0x00,}},
- {0x842F,2,{0xC8,0x69,0x00,0x00,}},
- {0x8430,2,{0xC8,0x6A,0x00,0x00,}},
- {0x8431,2,{0xDD,0xE6,0x00,0x00,}},
- {0x8432,2,{0xC8,0x6B,0x00,0x00,}},
- {0x8433,2,{0xC8,0x6C,0x00,0x00,}},
- {0x8434,2,{0xC8,0x6D,0x00,0x00,}},
- {0x8435,2,{0xC8,0x6E,0x00,0x00,}},
- {0x8436,2,{0xC8,0x6F,0x00,0x00,}},
- {0x8437,2,{0xC8,0x70,0x00,0x00,}},
- {0x8438,2,{0xDD,0xC7,0x00,0x00,}},
- {0x8439,2,{0xC8,0x71,0x00,0x00,}},
- {0x843A,2,{0xC8,0x72,0x00,0x00,}},
- {0x843B,2,{0xC8,0x73,0x00,0x00,}},
- {0x843C,2,{0xDD,0xE0,0x00,0x00,}},
- {0x843D,2,{0xC2,0xE4,0x00,0x00,}},
- {0x843E,2,{0xC8,0x74,0x00,0x00,}},
- {0x843F,2,{0xC8,0x75,0x00,0x00,}},
- {0x8440,2,{0xC8,0x76,0x00,0x00,}},
- {0x8441,2,{0xC8,0x77,0x00,0x00,}},
- {0x8442,2,{0xC8,0x78,0x00,0x00,}},
- {0x8443,2,{0xC8,0x79,0x00,0x00,}},
- {0x8444,2,{0xC8,0x7A,0x00,0x00,}},
- {0x8445,2,{0xC8,0x7B,0x00,0x00,}},
- {0x8446,2,{0xDD,0xE1,0x00,0x00,}},
- {0x8447,2,{0xC8,0x7C,0x00,0x00,}},
- {0x8448,2,{0xC8,0x7D,0x00,0x00,}},
- {0x8449,2,{0xC8,0x7E,0x00,0x00,}},
- {0x844A,2,{0xC8,0x80,0x00,0x00,}},
- {0x844B,2,{0xC8,0x81,0x00,0x00,}},
- {0x844C,2,{0xC8,0x82,0x00,0x00,}},
- {0x844D,2,{0xC8,0x83,0x00,0x00,}},
- {0x844E,2,{0xC8,0x84,0x00,0x00,}},
- {0x844F,2,{0xC8,0x85,0x00,0x00,}},
- {0x8450,2,{0xC8,0x86,0x00,0x00,}},
- {0x8451,2,{0xDD,0xD7,0x00,0x00,}},
- {0x8452,2,{0xC8,0x87,0x00,0x00,}},
- {0x8453,2,{0xC8,0x88,0x00,0x00,}},
- {0x8454,2,{0xC8,0x89,0x00,0x00,}},
- {0x8455,2,{0xC8,0x8A,0x00,0x00,}},
- {0x8456,2,{0xC8,0x8B,0x00,0x00,}},
- {0x8457,2,{0xD6,0xF8,0x00,0x00,}},
- {0x8458,2,{0xC8,0x8C,0x00,0x00,}},
- {0x8459,2,{0xDD,0xD9,0x00,0x00,}},
- {0x845A,2,{0xDD,0xD8,0x00,0x00,}},
- {0x845B,2,{0xB8,0xF0,0x00,0x00,}},
- {0x845C,2,{0xDD,0xD6,0x00,0x00,}},
- {0x845D,2,{0xC8,0x8D,0x00,0x00,}},
- {0x845E,2,{0xC8,0x8E,0x00,0x00,}},
- {0x845F,2,{0xC8,0x8F,0x00,0x00,}},
- {0x8460,2,{0xC8,0x90,0x00,0x00,}},
- {0x8461,2,{0xC6,0xCF,0x00,0x00,}},
- {0x8462,2,{0xC8,0x91,0x00,0x00,}},
- {0x8463,2,{0xB6,0xAD,0x00,0x00,}},
- {0x8464,2,{0xC8,0x92,0x00,0x00,}},
- {0x8465,2,{0xC8,0x93,0x00,0x00,}},
- {0x8466,2,{0xC8,0x94,0x00,0x00,}},
- {0x8467,2,{0xC8,0x95,0x00,0x00,}},
- {0x8468,2,{0xC8,0x96,0x00,0x00,}},
- {0x8469,2,{0xDD,0xE2,0x00,0x00,}},
- {0x846A,2,{0xC8,0x97,0x00,0x00,}},
- {0x846B,2,{0xBA,0xF9,0x00,0x00,}},
- {0x846C,2,{0xD4,0xE1,0x00,0x00,}},
- {0x846D,2,{0xDD,0xE7,0x00,0x00,}},
- {0x846E,2,{0xC8,0x98,0x00,0x00,}},
- {0x846F,2,{0xC8,0x99,0x00,0x00,}},
- {0x8470,2,{0xC8,0x9A,0x00,0x00,}},
- {0x8471,2,{0xB4,0xD0,0x00,0x00,}},
- {0x8472,2,{0xC8,0x9B,0x00,0x00,}},
- {0x8473,2,{0xDD,0xDA,0x00,0x00,}},
- {0x8474,2,{0xC8,0x9C,0x00,0x00,}},
- {0x8475,2,{0xBF,0xFB,0x00,0x00,}},
- {0x8476,2,{0xDD,0xE3,0x00,0x00,}},
- {0x8477,2,{0xC8,0x9D,0x00,0x00,}},
- {0x8478,2,{0xDD,0xDF,0x00,0x00,}},
- {0x8479,2,{0xC8,0x9E,0x00,0x00,}},
- {0x847A,2,{0xDD,0xDD,0x00,0x00,}},
- {0x847B,2,{0xC8,0x9F,0x00,0x00,}},
- {0x847C,2,{0xC8,0xA0,0x00,0x00,}},
- {0x847D,2,{0xC9,0x40,0x00,0x00,}},
- {0x847E,2,{0xC9,0x41,0x00,0x00,}},
- {0x847F,2,{0xC9,0x42,0x00,0x00,}},
- {0x8480,2,{0xC9,0x43,0x00,0x00,}},
- {0x8481,2,{0xC9,0x44,0x00,0x00,}},
- {0x8482,2,{0xB5,0xD9,0x00,0x00,}},
- {0x8483,2,{0xC9,0x45,0x00,0x00,}},
- {0x8484,2,{0xC9,0x46,0x00,0x00,}},
- {0x8485,2,{0xC9,0x47,0x00,0x00,}},
- {0x8486,2,{0xC9,0x48,0x00,0x00,}},
- {0x8487,2,{0xDD,0xDB,0x00,0x00,}},
- {0x8488,2,{0xDD,0xDC,0x00,0x00,}},
- {0x8489,2,{0xDD,0xDE,0x00,0x00,}},
- {0x848A,2,{0xC9,0x49,0x00,0x00,}},
- {0x848B,2,{0xBD,0xAF,0x00,0x00,}},
- {0x848C,2,{0xDD,0xE4,0x00,0x00,}},
- {0x848D,2,{0xC9,0x4A,0x00,0x00,}},
- {0x848E,2,{0xDD,0xE5,0x00,0x00,}},
- {0x848F,2,{0xC9,0x4B,0x00,0x00,}},
- {0x8490,2,{0xC9,0x4C,0x00,0x00,}},
- {0x8491,2,{0xC9,0x4D,0x00,0x00,}},
- {0x8492,2,{0xC9,0x4E,0x00,0x00,}},
- {0x8493,2,{0xC9,0x4F,0x00,0x00,}},
- {0x8494,2,{0xC9,0x50,0x00,0x00,}},
- {0x8495,2,{0xC9,0x51,0x00,0x00,}},
- {0x8496,2,{0xC9,0x52,0x00,0x00,}},
- {0x8497,2,{0xDD,0xF5,0x00,0x00,}},
- {0x8498,2,{0xC9,0x53,0x00,0x00,}},
- {0x8499,2,{0xC3,0xC9,0x00,0x00,}},
- {0x849A,2,{0xC9,0x54,0x00,0x00,}},
- {0x849B,2,{0xC9,0x55,0x00,0x00,}},
- {0x849C,2,{0xCB,0xE2,0x00,0x00,}},
- {0x849D,2,{0xC9,0x56,0x00,0x00,}},
- {0x849E,2,{0xC9,0x57,0x00,0x00,}},
- {0x849F,2,{0xC9,0x58,0x00,0x00,}},
- {0x84A0,2,{0xC9,0x59,0x00,0x00,}},
- {0x84A1,2,{0xDD,0xF2,0x00,0x00,}},
- {0x84A2,2,{0xC9,0x5A,0x00,0x00,}},
- {0x84A3,2,{0xC9,0x5B,0x00,0x00,}},
- {0x84A4,2,{0xC9,0x5C,0x00,0x00,}},
- {0x84A5,2,{0xC9,0x5D,0x00,0x00,}},
- {0x84A6,2,{0xC9,0x5E,0x00,0x00,}},
- {0x84A7,2,{0xC9,0x5F,0x00,0x00,}},
- {0x84A8,2,{0xC9,0x60,0x00,0x00,}},
- {0x84A9,2,{0xC9,0x61,0x00,0x00,}},
- {0x84AA,2,{0xC9,0x62,0x00,0x00,}},
- {0x84AB,2,{0xC9,0x63,0x00,0x00,}},
- {0x84AC,2,{0xC9,0x64,0x00,0x00,}},
- {0x84AD,2,{0xC9,0x65,0x00,0x00,}},
- {0x84AE,2,{0xC9,0x66,0x00,0x00,}},
- {0x84AF,2,{0xD8,0xE1,0x00,0x00,}},
- {0x84B0,2,{0xC9,0x67,0x00,0x00,}},
- {0x84B1,2,{0xC9,0x68,0x00,0x00,}},
- {0x84B2,2,{0xC6,0xD1,0x00,0x00,}},
- {0x84B3,2,{0xC9,0x69,0x00,0x00,}},
- {0x84B4,2,{0xDD,0xF4,0x00,0x00,}},
- {0x84B5,2,{0xC9,0x6A,0x00,0x00,}},
- {0x84B6,2,{0xC9,0x6B,0x00,0x00,}},
- {0x84B7,2,{0xC9,0x6C,0x00,0x00,}},
- {0x84B8,2,{0xD5,0xF4,0x00,0x00,}},
- {0x84B9,2,{0xDD,0xF3,0x00,0x00,}},
- {0x84BA,2,{0xDD,0xF0,0x00,0x00,}},
- {0x84BB,2,{0xC9,0x6D,0x00,0x00,}},
- {0x84BC,2,{0xC9,0x6E,0x00,0x00,}},
- {0x84BD,2,{0xDD,0xEC,0x00,0x00,}},
- {0x84BE,2,{0xC9,0x6F,0x00,0x00,}},
- {0x84BF,2,{0xDD,0xEF,0x00,0x00,}},
- {0x84C0,2,{0xC9,0x70,0x00,0x00,}},
- {0x84C1,2,{0xDD,0xE8,0x00,0x00,}},
- {0x84C2,2,{0xC9,0x71,0x00,0x00,}},
- {0x84C3,2,{0xC9,0x72,0x00,0x00,}},
- {0x84C4,2,{0xD0,0xEE,0x00,0x00,}},
- {0x84C5,2,{0xC9,0x73,0x00,0x00,}},
- {0x84C6,2,{0xC9,0x74,0x00,0x00,}},
- {0x84C7,2,{0xC9,0x75,0x00,0x00,}},
- {0x84C8,2,{0xC9,0x76,0x00,0x00,}},
- {0x84C9,2,{0xC8,0xD8,0x00,0x00,}},
- {0x84CA,2,{0xDD,0xEE,0x00,0x00,}},
- {0x84CB,2,{0xC9,0x77,0x00,0x00,}},
- {0x84CC,2,{0xC9,0x78,0x00,0x00,}},
- {0x84CD,2,{0xDD,0xE9,0x00,0x00,}},
- {0x84CE,2,{0xC9,0x79,0x00,0x00,}},
- {0x84CF,2,{0xC9,0x7A,0x00,0x00,}},
- {0x84D0,2,{0xDD,0xEA,0x00,0x00,}},
- {0x84D1,2,{0xCB,0xF2,0x00,0x00,}},
- {0x84D2,2,{0xC9,0x7B,0x00,0x00,}},
- {0x84D3,2,{0xDD,0xED,0x00,0x00,}},
- {0x84D4,2,{0xC9,0x7C,0x00,0x00,}},
- {0x84D5,2,{0xC9,0x7D,0x00,0x00,}},
- {0x84D6,2,{0xB1,0xCD,0x00,0x00,}},
- {0x84D7,2,{0xC9,0x7E,0x00,0x00,}},
- {0x84D8,2,{0xC9,0x80,0x00,0x00,}},
- {0x84D9,2,{0xC9,0x81,0x00,0x00,}},
- {0x84DA,2,{0xC9,0x82,0x00,0x00,}},
- {0x84DB,2,{0xC9,0x83,0x00,0x00,}},
- {0x84DC,2,{0xC9,0x84,0x00,0x00,}},
- {0x84DD,2,{0xC0,0xB6,0x00,0x00,}},
- {0x84DE,2,{0xC9,0x85,0x00,0x00,}},
- {0x84DF,2,{0xBC,0xBB,0x00,0x00,}},
- {0x84E0,2,{0xDD,0xF1,0x00,0x00,}},
- {0x84E1,2,{0xC9,0x86,0x00,0x00,}},
- {0x84E2,2,{0xC9,0x87,0x00,0x00,}},
- {0x84E3,2,{0xDD,0xF7,0x00,0x00,}},
- {0x84E4,2,{0xC9,0x88,0x00,0x00,}},
- {0x84E5,2,{0xDD,0xF6,0x00,0x00,}},
- {0x84E6,2,{0xDD,0xEB,0x00,0x00,}},
- {0x84E7,2,{0xC9,0x89,0x00,0x00,}},
- {0x84E8,2,{0xC9,0x8A,0x00,0x00,}},
- {0x84E9,2,{0xC9,0x8B,0x00,0x00,}},
- {0x84EA,2,{0xC9,0x8C,0x00,0x00,}},
- {0x84EB,2,{0xC9,0x8D,0x00,0x00,}},
- {0x84EC,2,{0xC5,0xEE,0x00,0x00,}},
- {0x84ED,2,{0xC9,0x8E,0x00,0x00,}},
- {0x84EE,2,{0xC9,0x8F,0x00,0x00,}},
- {0x84EF,2,{0xC9,0x90,0x00,0x00,}},
- {0x84F0,2,{0xDD,0xFB,0x00,0x00,}},
- {0x84F1,2,{0xC9,0x91,0x00,0x00,}},
- {0x84F2,2,{0xC9,0x92,0x00,0x00,}},
- {0x84F3,2,{0xC9,0x93,0x00,0x00,}},
- {0x84F4,2,{0xC9,0x94,0x00,0x00,}},
- {0x84F5,2,{0xC9,0x95,0x00,0x00,}},
- {0x84F6,2,{0xC9,0x96,0x00,0x00,}},
- {0x84F7,2,{0xC9,0x97,0x00,0x00,}},
- {0x84F8,2,{0xC9,0x98,0x00,0x00,}},
- {0x84F9,2,{0xC9,0x99,0x00,0x00,}},
- {0x84FA,2,{0xC9,0x9A,0x00,0x00,}},
- {0x84FB,2,{0xC9,0x9B,0x00,0x00,}},
- {0x84FC,2,{0xDE,0xA4,0x00,0x00,}},
- {0x84FD,2,{0xC9,0x9C,0x00,0x00,}},
- {0x84FE,2,{0xC9,0x9D,0x00,0x00,}},
- {0x84FF,2,{0xDE,0xA3,0x00,0x00,}},
- {0x8500,2,{0xC9,0x9E,0x00,0x00,}},
- {0x8501,2,{0xC9,0x9F,0x00,0x00,}},
- {0x8502,2,{0xC9,0xA0,0x00,0x00,}},
- {0x8503,2,{0xCA,0x40,0x00,0x00,}},
- {0x8504,2,{0xCA,0x41,0x00,0x00,}},
- {0x8505,2,{0xCA,0x42,0x00,0x00,}},
- {0x8506,2,{0xCA,0x43,0x00,0x00,}},
- {0x8507,2,{0xCA,0x44,0x00,0x00,}},
- {0x8508,2,{0xCA,0x45,0x00,0x00,}},
- {0x8509,2,{0xCA,0x46,0x00,0x00,}},
- {0x850A,2,{0xCA,0x47,0x00,0x00,}},
- {0x850B,2,{0xCA,0x48,0x00,0x00,}},
- {0x850C,2,{0xDD,0xF8,0x00,0x00,}},
- {0x850D,2,{0xCA,0x49,0x00,0x00,}},
- {0x850E,2,{0xCA,0x4A,0x00,0x00,}},
- {0x850F,2,{0xCA,0x4B,0x00,0x00,}},
- {0x8510,2,{0xCA,0x4C,0x00,0x00,}},
- {0x8511,2,{0xC3,0xEF,0x00,0x00,}},
- {0x8512,2,{0xCA,0x4D,0x00,0x00,}},
- {0x8513,2,{0xC2,0xFB,0x00,0x00,}},
- {0x8514,2,{0xCA,0x4E,0x00,0x00,}},
- {0x8515,2,{0xCA,0x4F,0x00,0x00,}},
- {0x8516,2,{0xCA,0x50,0x00,0x00,}},
- {0x8517,2,{0xD5,0xE1,0x00,0x00,}},
- {0x8518,2,{0xCA,0x51,0x00,0x00,}},
- {0x8519,2,{0xCA,0x52,0x00,0x00,}},
- {0x851A,2,{0xCE,0xB5,0x00,0x00,}},
- {0x851B,2,{0xCA,0x53,0x00,0x00,}},
- {0x851C,2,{0xCA,0x54,0x00,0x00,}},
- {0x851D,2,{0xCA,0x55,0x00,0x00,}},
- {0x851E,2,{0xCA,0x56,0x00,0x00,}},
- {0x851F,2,{0xDD,0xFD,0x00,0x00,}},
- {0x8520,2,{0xCA,0x57,0x00,0x00,}},
- {0x8521,2,{0xB2,0xCC,0x00,0x00,}},
- {0x8522,2,{0xCA,0x58,0x00,0x00,}},
- {0x8523,2,{0xCA,0x59,0x00,0x00,}},
- {0x8524,2,{0xCA,0x5A,0x00,0x00,}},
- {0x8525,2,{0xCA,0x5B,0x00,0x00,}},
- {0x8526,2,{0xCA,0x5C,0x00,0x00,}},
- {0x8527,2,{0xCA,0x5D,0x00,0x00,}},
- {0x8528,2,{0xCA,0x5E,0x00,0x00,}},
- {0x8529,2,{0xCA,0x5F,0x00,0x00,}},
- {0x852A,2,{0xCA,0x60,0x00,0x00,}},
- {0x852B,2,{0xC4,0xE8,0x00,0x00,}},
- {0x852C,2,{0xCA,0xDF,0x00,0x00,}},
- {0x852D,2,{0xCA,0x61,0x00,0x00,}},
- {0x852E,2,{0xCA,0x62,0x00,0x00,}},
- {0x852F,2,{0xCA,0x63,0x00,0x00,}},
- {0x8530,2,{0xCA,0x64,0x00,0x00,}},
- {0x8531,2,{0xCA,0x65,0x00,0x00,}},
- {0x8532,2,{0xCA,0x66,0x00,0x00,}},
- {0x8533,2,{0xCA,0x67,0x00,0x00,}},
- {0x8534,2,{0xCA,0x68,0x00,0x00,}},
- {0x8535,2,{0xCA,0x69,0x00,0x00,}},
- {0x8536,2,{0xCA,0x6A,0x00,0x00,}},
- {0x8537,2,{0xC7,0xBE,0x00,0x00,}},
- {0x8538,2,{0xDD,0xFA,0x00,0x00,}},
- {0x8539,2,{0xDD,0xFC,0x00,0x00,}},
- {0x853A,2,{0xDD,0xFE,0x00,0x00,}},
- {0x853B,2,{0xDE,0xA2,0x00,0x00,}},
- {0x853C,2,{0xB0,0xAA,0x00,0x00,}},
- {0x853D,2,{0xB1,0xCE,0x00,0x00,}},
- {0x853E,2,{0xCA,0x6B,0x00,0x00,}},
- {0x853F,2,{0xCA,0x6C,0x00,0x00,}},
- {0x8540,2,{0xCA,0x6D,0x00,0x00,}},
- {0x8541,2,{0xCA,0x6E,0x00,0x00,}},
- {0x8542,2,{0xCA,0x6F,0x00,0x00,}},
- {0x8543,2,{0xDE,0xAC,0x00,0x00,}},
- {0x8544,2,{0xCA,0x70,0x00,0x00,}},
- {0x8545,2,{0xCA,0x71,0x00,0x00,}},
- {0x8546,2,{0xCA,0x72,0x00,0x00,}},
- {0x8547,2,{0xCA,0x73,0x00,0x00,}},
- {0x8548,2,{0xDE,0xA6,0x00,0x00,}},
- {0x8549,2,{0xBD,0xB6,0x00,0x00,}},
- {0x854A,2,{0xC8,0xEF,0x00,0x00,}},
- {0x854B,2,{0xCA,0x74,0x00,0x00,}},
- {0x854C,2,{0xCA,0x75,0x00,0x00,}},
- {0x854D,2,{0xCA,0x76,0x00,0x00,}},
- {0x854E,2,{0xCA,0x77,0x00,0x00,}},
- {0x854F,2,{0xCA,0x78,0x00,0x00,}},
- {0x8550,2,{0xCA,0x79,0x00,0x00,}},
- {0x8551,2,{0xCA,0x7A,0x00,0x00,}},
- {0x8552,2,{0xCA,0x7B,0x00,0x00,}},
- {0x8553,2,{0xCA,0x7C,0x00,0x00,}},
- {0x8554,2,{0xCA,0x7D,0x00,0x00,}},
- {0x8555,2,{0xCA,0x7E,0x00,0x00,}},
- {0x8556,2,{0xDE,0xA1,0x00,0x00,}},
- {0x8557,2,{0xCA,0x80,0x00,0x00,}},
- {0x8558,2,{0xCA,0x81,0x00,0x00,}},
- {0x8559,2,{0xDE,0xA5,0x00,0x00,}},
- {0x855A,2,{0xCA,0x82,0x00,0x00,}},
- {0x855B,2,{0xCA,0x83,0x00,0x00,}},
- {0x855C,2,{0xCA,0x84,0x00,0x00,}},
- {0x855D,2,{0xCA,0x85,0x00,0x00,}},
- {0x855E,2,{0xDE,0xA9,0x00,0x00,}},
- {0x855F,2,{0xCA,0x86,0x00,0x00,}},
- {0x8560,2,{0xCA,0x87,0x00,0x00,}},
- {0x8561,2,{0xCA,0x88,0x00,0x00,}},
- {0x8562,2,{0xCA,0x89,0x00,0x00,}},
- {0x8563,2,{0xCA,0x8A,0x00,0x00,}},
- {0x8564,2,{0xDE,0xA8,0x00,0x00,}},
- {0x8565,2,{0xCA,0x8B,0x00,0x00,}},
- {0x8566,2,{0xCA,0x8C,0x00,0x00,}},
- {0x8567,2,{0xCA,0x8D,0x00,0x00,}},
- {0x8568,2,{0xDE,0xA7,0x00,0x00,}},
- {0x8569,2,{0xCA,0x8E,0x00,0x00,}},
- {0x856A,2,{0xCA,0x8F,0x00,0x00,}},
- {0x856B,2,{0xCA,0x90,0x00,0x00,}},
- {0x856C,2,{0xCA,0x91,0x00,0x00,}},
- {0x856D,2,{0xCA,0x92,0x00,0x00,}},
- {0x856E,2,{0xCA,0x93,0x00,0x00,}},
- {0x856F,2,{0xCA,0x94,0x00,0x00,}},
- {0x8570,2,{0xCA,0x95,0x00,0x00,}},
- {0x8571,2,{0xCA,0x96,0x00,0x00,}},
- {0x8572,2,{0xDE,0xAD,0x00,0x00,}},
- {0x8573,2,{0xCA,0x97,0x00,0x00,}},
- {0x8574,2,{0xD4,0xCC,0x00,0x00,}},
- {0x8575,2,{0xCA,0x98,0x00,0x00,}},
- {0x8576,2,{0xCA,0x99,0x00,0x00,}},
- {0x8577,2,{0xCA,0x9A,0x00,0x00,}},
- {0x8578,2,{0xCA,0x9B,0x00,0x00,}},
- {0x8579,2,{0xDE,0xB3,0x00,0x00,}},
- {0x857A,2,{0xDE,0xAA,0x00,0x00,}},
- {0x857B,2,{0xDE,0xAE,0x00,0x00,}},
- {0x857C,2,{0xCA,0x9C,0x00,0x00,}},
- {0x857D,2,{0xCA,0x9D,0x00,0x00,}},
- {0x857E,2,{0xC0,0xD9,0x00,0x00,}},
- {0x857F,2,{0xCA,0x9E,0x00,0x00,}},
- {0x8580,2,{0xCA,0x9F,0x00,0x00,}},
- {0x8581,2,{0xCA,0xA0,0x00,0x00,}},
- {0x8582,2,{0xCB,0x40,0x00,0x00,}},
- {0x8583,2,{0xCB,0x41,0x00,0x00,}},
- {0x8584,2,{0xB1,0xA1,0x00,0x00,}},
- {0x8585,2,{0xDE,0xB6,0x00,0x00,}},
- {0x8586,2,{0xCB,0x42,0x00,0x00,}},
- {0x8587,2,{0xDE,0xB1,0x00,0x00,}},
- {0x8588,2,{0xCB,0x43,0x00,0x00,}},
- {0x8589,2,{0xCB,0x44,0x00,0x00,}},
- {0x858A,2,{0xCB,0x45,0x00,0x00,}},
- {0x858B,2,{0xCB,0x46,0x00,0x00,}},
- {0x858C,2,{0xCB,0x47,0x00,0x00,}},
- {0x858D,2,{0xCB,0x48,0x00,0x00,}},
- {0x858E,2,{0xCB,0x49,0x00,0x00,}},
- {0x858F,2,{0xDE,0xB2,0x00,0x00,}},
- {0x8590,2,{0xCB,0x4A,0x00,0x00,}},
- {0x8591,2,{0xCB,0x4B,0x00,0x00,}},
- {0x8592,2,{0xCB,0x4C,0x00,0x00,}},
- {0x8593,2,{0xCB,0x4D,0x00,0x00,}},
- {0x8594,2,{0xCB,0x4E,0x00,0x00,}},
- {0x8595,2,{0xCB,0x4F,0x00,0x00,}},
- {0x8596,2,{0xCB,0x50,0x00,0x00,}},
- {0x8597,2,{0xCB,0x51,0x00,0x00,}},
- {0x8598,2,{0xCB,0x52,0x00,0x00,}},
- {0x8599,2,{0xCB,0x53,0x00,0x00,}},
- {0x859A,2,{0xCB,0x54,0x00,0x00,}},
- {0x859B,2,{0xD1,0xA6,0x00,0x00,}},
- {0x859C,2,{0xDE,0xB5,0x00,0x00,}},
- {0x859D,2,{0xCB,0x55,0x00,0x00,}},
- {0x859E,2,{0xCB,0x56,0x00,0x00,}},
- {0x859F,2,{0xCB,0x57,0x00,0x00,}},
- {0x85A0,2,{0xCB,0x58,0x00,0x00,}},
- {0x85A1,2,{0xCB,0x59,0x00,0x00,}},
- {0x85A2,2,{0xCB,0x5A,0x00,0x00,}},
- {0x85A3,2,{0xCB,0x5B,0x00,0x00,}},
- {0x85A4,2,{0xDE,0xAF,0x00,0x00,}},
- {0x85A5,2,{0xCB,0x5C,0x00,0x00,}},
- {0x85A6,2,{0xCB,0x5D,0x00,0x00,}},
- {0x85A7,2,{0xCB,0x5E,0x00,0x00,}},
- {0x85A8,2,{0xDE,0xB0,0x00,0x00,}},
- {0x85A9,2,{0xCB,0x5F,0x00,0x00,}},
- {0x85AA,2,{0xD0,0xBD,0x00,0x00,}},
- {0x85AB,2,{0xCB,0x60,0x00,0x00,}},
- {0x85AC,2,{0xCB,0x61,0x00,0x00,}},
- {0x85AD,2,{0xCB,0x62,0x00,0x00,}},
- {0x85AE,2,{0xDE,0xB4,0x00,0x00,}},
- {0x85AF,2,{0xCA,0xED,0x00,0x00,}},
- {0x85B0,2,{0xDE,0xB9,0x00,0x00,}},
- {0x85B1,2,{0xCB,0x63,0x00,0x00,}},
- {0x85B2,2,{0xCB,0x64,0x00,0x00,}},
- {0x85B3,2,{0xCB,0x65,0x00,0x00,}},
- {0x85B4,2,{0xCB,0x66,0x00,0x00,}},
- {0x85B5,2,{0xCB,0x67,0x00,0x00,}},
- {0x85B6,2,{0xCB,0x68,0x00,0x00,}},
- {0x85B7,2,{0xDE,0xB8,0x00,0x00,}},
- {0x85B8,2,{0xCB,0x69,0x00,0x00,}},
- {0x85B9,2,{0xDE,0xB7,0x00,0x00,}},
- {0x85BA,2,{0xCB,0x6A,0x00,0x00,}},
- {0x85BB,2,{0xCB,0x6B,0x00,0x00,}},
- {0x85BC,2,{0xCB,0x6C,0x00,0x00,}},
- {0x85BD,2,{0xCB,0x6D,0x00,0x00,}},
- {0x85BE,2,{0xCB,0x6E,0x00,0x00,}},
- {0x85BF,2,{0xCB,0x6F,0x00,0x00,}},
- {0x85C0,2,{0xCB,0x70,0x00,0x00,}},
- {0x85C1,2,{0xDE,0xBB,0x00,0x00,}},
- {0x85C2,2,{0xCB,0x71,0x00,0x00,}},
- {0x85C3,2,{0xCB,0x72,0x00,0x00,}},
- {0x85C4,2,{0xCB,0x73,0x00,0x00,}},
- {0x85C5,2,{0xCB,0x74,0x00,0x00,}},
- {0x85C6,2,{0xCB,0x75,0x00,0x00,}},
- {0x85C7,2,{0xCB,0x76,0x00,0x00,}},
- {0x85C8,2,{0xCB,0x77,0x00,0x00,}},
- {0x85C9,2,{0xBD,0xE5,0x00,0x00,}},
- {0x85CA,2,{0xCB,0x78,0x00,0x00,}},
- {0x85CB,2,{0xCB,0x79,0x00,0x00,}},
- {0x85CC,2,{0xCB,0x7A,0x00,0x00,}},
- {0x85CD,2,{0xCB,0x7B,0x00,0x00,}},
- {0x85CE,2,{0xCB,0x7C,0x00,0x00,}},
- {0x85CF,2,{0xB2,0xD8,0x00,0x00,}},
- {0x85D0,2,{0xC3,0xEA,0x00,0x00,}},
- {0x85D1,2,{0xCB,0x7D,0x00,0x00,}},
- {0x85D2,2,{0xCB,0x7E,0x00,0x00,}},
- {0x85D3,2,{0xDE,0xBA,0x00,0x00,}},
- {0x85D4,2,{0xCB,0x80,0x00,0x00,}},
- {0x85D5,2,{0xC5,0xBA,0x00,0x00,}},
- {0x85D6,2,{0xCB,0x81,0x00,0x00,}},
- {0x85D7,2,{0xCB,0x82,0x00,0x00,}},
- {0x85D8,2,{0xCB,0x83,0x00,0x00,}},
- {0x85D9,2,{0xCB,0x84,0x00,0x00,}},
- {0x85DA,2,{0xCB,0x85,0x00,0x00,}},
- {0x85DB,2,{0xCB,0x86,0x00,0x00,}},
- {0x85DC,2,{0xDE,0xBC,0x00,0x00,}},
- {0x85DD,2,{0xCB,0x87,0x00,0x00,}},
- {0x85DE,2,{0xCB,0x88,0x00,0x00,}},
- {0x85DF,2,{0xCB,0x89,0x00,0x00,}},
- {0x85E0,2,{0xCB,0x8A,0x00,0x00,}},
- {0x85E1,2,{0xCB,0x8B,0x00,0x00,}},
- {0x85E2,2,{0xCB,0x8C,0x00,0x00,}},
- {0x85E3,2,{0xCB,0x8D,0x00,0x00,}},
- {0x85E4,2,{0xCC,0xD9,0x00,0x00,}},
- {0x85E5,2,{0xCB,0x8E,0x00,0x00,}},
- {0x85E6,2,{0xCB,0x8F,0x00,0x00,}},
- {0x85E7,2,{0xCB,0x90,0x00,0x00,}},
- {0x85E8,2,{0xCB,0x91,0x00,0x00,}},
- {0x85E9,2,{0xB7,0xAA,0x00,0x00,}},
- {0x85EA,2,{0xCB,0x92,0x00,0x00,}},
- {0x85EB,2,{0xCB,0x93,0x00,0x00,}},
- {0x85EC,2,{0xCB,0x94,0x00,0x00,}},
- {0x85ED,2,{0xCB,0x95,0x00,0x00,}},
- {0x85EE,2,{0xCB,0x96,0x00,0x00,}},
- {0x85EF,2,{0xCB,0x97,0x00,0x00,}},
- {0x85F0,2,{0xCB,0x98,0x00,0x00,}},
- {0x85F1,2,{0xCB,0x99,0x00,0x00,}},
- {0x85F2,2,{0xCB,0x9A,0x00,0x00,}},
- {0x85F3,2,{0xCB,0x9B,0x00,0x00,}},
- {0x85F4,2,{0xCB,0x9C,0x00,0x00,}},
- {0x85F5,2,{0xCB,0x9D,0x00,0x00,}},
- {0x85F6,2,{0xCB,0x9E,0x00,0x00,}},
- {0x85F7,2,{0xCB,0x9F,0x00,0x00,}},
- {0x85F8,2,{0xCB,0xA0,0x00,0x00,}},
- {0x85F9,2,{0xCC,0x40,0x00,0x00,}},
- {0x85FA,2,{0xCC,0x41,0x00,0x00,}},
- {0x85FB,2,{0xD4,0xE5,0x00,0x00,}},
- {0x85FC,2,{0xCC,0x42,0x00,0x00,}},
- {0x85FD,2,{0xCC,0x43,0x00,0x00,}},
- {0x85FE,2,{0xCC,0x44,0x00,0x00,}},
- {0x85FF,2,{0xDE,0xBD,0x00,0x00,}},
- {0x8600,2,{0xCC,0x45,0x00,0x00,}},
- {0x8601,2,{0xCC,0x46,0x00,0x00,}},
- {0x8602,2,{0xCC,0x47,0x00,0x00,}},
- {0x8603,2,{0xCC,0x48,0x00,0x00,}},
- {0x8604,2,{0xCC,0x49,0x00,0x00,}},
- {0x8605,2,{0xDE,0xBF,0x00,0x00,}},
- {0x8606,2,{0xCC,0x4A,0x00,0x00,}},
- {0x8607,2,{0xCC,0x4B,0x00,0x00,}},
- {0x8608,2,{0xCC,0x4C,0x00,0x00,}},
- {0x8609,2,{0xCC,0x4D,0x00,0x00,}},
- {0x860A,2,{0xCC,0x4E,0x00,0x00,}},
- {0x860B,2,{0xCC,0x4F,0x00,0x00,}},
- {0x860C,2,{0xCC,0x50,0x00,0x00,}},
- {0x860D,2,{0xCC,0x51,0x00,0x00,}},
- {0x860E,2,{0xCC,0x52,0x00,0x00,}},
- {0x860F,2,{0xCC,0x53,0x00,0x00,}},
- {0x8610,2,{0xCC,0x54,0x00,0x00,}},
- {0x8611,2,{0xC4,0xA2,0x00,0x00,}},
- {0x8612,2,{0xCC,0x55,0x00,0x00,}},
- {0x8613,2,{0xCC,0x56,0x00,0x00,}},
- {0x8614,2,{0xCC,0x57,0x00,0x00,}},
- {0x8615,2,{0xCC,0x58,0x00,0x00,}},
- {0x8616,2,{0xDE,0xC1,0x00,0x00,}},
- {0x8617,2,{0xCC,0x59,0x00,0x00,}},
- {0x8618,2,{0xCC,0x5A,0x00,0x00,}},
- {0x8619,2,{0xCC,0x5B,0x00,0x00,}},
- {0x861A,2,{0xCC,0x5C,0x00,0x00,}},
- {0x861B,2,{0xCC,0x5D,0x00,0x00,}},
- {0x861C,2,{0xCC,0x5E,0x00,0x00,}},
- {0x861D,2,{0xCC,0x5F,0x00,0x00,}},
- {0x861E,2,{0xCC,0x60,0x00,0x00,}},
- {0x861F,2,{0xCC,0x61,0x00,0x00,}},
- {0x8620,2,{0xCC,0x62,0x00,0x00,}},
- {0x8621,2,{0xCC,0x63,0x00,0x00,}},
- {0x8622,2,{0xCC,0x64,0x00,0x00,}},
- {0x8623,2,{0xCC,0x65,0x00,0x00,}},
- {0x8624,2,{0xCC,0x66,0x00,0x00,}},
- {0x8625,2,{0xCC,0x67,0x00,0x00,}},
- {0x8626,2,{0xCC,0x68,0x00,0x00,}},
- {0x8627,2,{0xDE,0xBE,0x00,0x00,}},
- {0x8628,2,{0xCC,0x69,0x00,0x00,}},
- {0x8629,2,{0xDE,0xC0,0x00,0x00,}},
- {0x862A,2,{0xCC,0x6A,0x00,0x00,}},
- {0x862B,2,{0xCC,0x6B,0x00,0x00,}},
- {0x862C,2,{0xCC,0x6C,0x00,0x00,}},
- {0x862D,2,{0xCC,0x6D,0x00,0x00,}},
- {0x862E,2,{0xCC,0x6E,0x00,0x00,}},
- {0x862F,2,{0xCC,0x6F,0x00,0x00,}},
- {0x8630,2,{0xCC,0x70,0x00,0x00,}},
- {0x8631,2,{0xCC,0x71,0x00,0x00,}},
- {0x8632,2,{0xCC,0x72,0x00,0x00,}},
- {0x8633,2,{0xCC,0x73,0x00,0x00,}},
- {0x8634,2,{0xCC,0x74,0x00,0x00,}},
- {0x8635,2,{0xCC,0x75,0x00,0x00,}},
- {0x8636,2,{0xCC,0x76,0x00,0x00,}},
- {0x8637,2,{0xCC,0x77,0x00,0x00,}},
- {0x8638,2,{0xD5,0xBA,0x00,0x00,}},
- {0x8639,2,{0xCC,0x78,0x00,0x00,}},
- {0x863A,2,{0xCC,0x79,0x00,0x00,}},
- {0x863B,2,{0xCC,0x7A,0x00,0x00,}},
- {0x863C,2,{0xDE,0xC2,0x00,0x00,}},
- {0x863D,2,{0xCC,0x7B,0x00,0x00,}},
- {0x863E,2,{0xCC,0x7C,0x00,0x00,}},
- {0x863F,2,{0xCC,0x7D,0x00,0x00,}},
- {0x8640,2,{0xCC,0x7E,0x00,0x00,}},
- {0x8641,2,{0xCC,0x80,0x00,0x00,}},
- {0x8642,2,{0xCC,0x81,0x00,0x00,}},
- {0x8643,2,{0xCC,0x82,0x00,0x00,}},
- {0x8644,2,{0xCC,0x83,0x00,0x00,}},
- {0x8645,2,{0xCC,0x84,0x00,0x00,}},
- {0x8646,2,{0xCC,0x85,0x00,0x00,}},
- {0x8647,2,{0xCC,0x86,0x00,0x00,}},
- {0x8648,2,{0xCC,0x87,0x00,0x00,}},
- {0x8649,2,{0xCC,0x88,0x00,0x00,}},
- {0x864A,2,{0xCC,0x89,0x00,0x00,}},
- {0x864B,2,{0xCC,0x8A,0x00,0x00,}},
- {0x864C,2,{0xCC,0x8B,0x00,0x00,}},
- {0x864D,2,{0xF2,0xAE,0x00,0x00,}},
- {0x864E,2,{0xBB,0xA2,0x00,0x00,}},
- {0x864F,2,{0xC2,0xB2,0x00,0x00,}},
- {0x8650,2,{0xC5,0xB0,0x00,0x00,}},
- {0x8651,2,{0xC2,0xC7,0x00,0x00,}},
- {0x8652,2,{0xCC,0x8C,0x00,0x00,}},
- {0x8653,2,{0xCC,0x8D,0x00,0x00,}},
- {0x8654,2,{0xF2,0xAF,0x00,0x00,}},
- {0x8655,2,{0xCC,0x8E,0x00,0x00,}},
- {0x8656,2,{0xCC,0x8F,0x00,0x00,}},
- {0x8657,2,{0xCC,0x90,0x00,0x00,}},
- {0x8658,2,{0xCC,0x91,0x00,0x00,}},
- {0x8659,2,{0xCC,0x92,0x00,0x00,}},
- {0x865A,2,{0xD0,0xE9,0x00,0x00,}},
- {0x865B,2,{0xCC,0x93,0x00,0x00,}},
- {0x865C,2,{0xCC,0x94,0x00,0x00,}},
- {0x865D,2,{0xCC,0x95,0x00,0x00,}},
- {0x865E,2,{0xD3,0xDD,0x00,0x00,}},
- {0x865F,2,{0xCC,0x96,0x00,0x00,}},
- {0x8660,2,{0xCC,0x97,0x00,0x00,}},
- {0x8661,2,{0xCC,0x98,0x00,0x00,}},
- {0x8662,2,{0xEB,0xBD,0x00,0x00,}},
- {0x8663,2,{0xCC,0x99,0x00,0x00,}},
- {0x8664,2,{0xCC,0x9A,0x00,0x00,}},
- {0x8665,2,{0xCC,0x9B,0x00,0x00,}},
- {0x8666,2,{0xCC,0x9C,0x00,0x00,}},
- {0x8667,2,{0xCC,0x9D,0x00,0x00,}},
- {0x8668,2,{0xCC,0x9E,0x00,0x00,}},
- {0x8669,2,{0xCC,0x9F,0x00,0x00,}},
- {0x866A,2,{0xCC,0xA0,0x00,0x00,}},
- {0x866B,2,{0xB3,0xE6,0x00,0x00,}},
- {0x866C,2,{0xF2,0xB0,0x00,0x00,}},
- {0x866D,2,{0xCD,0x40,0x00,0x00,}},
- {0x866E,2,{0xF2,0xB1,0x00,0x00,}},
- {0x866F,2,{0xCD,0x41,0x00,0x00,}},
- {0x8670,2,{0xCD,0x42,0x00,0x00,}},
- {0x8671,2,{0xCA,0xAD,0x00,0x00,}},
- {0x8672,2,{0xCD,0x43,0x00,0x00,}},
- {0x8673,2,{0xCD,0x44,0x00,0x00,}},
- {0x8674,2,{0xCD,0x45,0x00,0x00,}},
- {0x8675,2,{0xCD,0x46,0x00,0x00,}},
- {0x8676,2,{0xCD,0x47,0x00,0x00,}},
- {0x8677,2,{0xCD,0x48,0x00,0x00,}},
- {0x8678,2,{0xCD,0x49,0x00,0x00,}},
- {0x8679,2,{0xBA,0xE7,0x00,0x00,}},
- {0x867A,2,{0xF2,0xB3,0x00,0x00,}},
- {0x867B,2,{0xF2,0xB5,0x00,0x00,}},
- {0x867C,2,{0xF2,0xB4,0x00,0x00,}},
- {0x867D,2,{0xCB,0xE4,0x00,0x00,}},
- {0x867E,2,{0xCF,0xBA,0x00,0x00,}},
- {0x867F,2,{0xF2,0xB2,0x00,0x00,}},
- {0x8680,2,{0xCA,0xB4,0x00,0x00,}},
- {0x8681,2,{0xD2,0xCF,0x00,0x00,}},
- {0x8682,2,{0xC2,0xEC,0x00,0x00,}},
- {0x8683,2,{0xCD,0x4A,0x00,0x00,}},
- {0x8684,2,{0xCD,0x4B,0x00,0x00,}},
- {0x8685,2,{0xCD,0x4C,0x00,0x00,}},
- {0x8686,2,{0xCD,0x4D,0x00,0x00,}},
- {0x8687,2,{0xCD,0x4E,0x00,0x00,}},
- {0x8688,2,{0xCD,0x4F,0x00,0x00,}},
- {0x8689,2,{0xCD,0x50,0x00,0x00,}},
- {0x868A,2,{0xCE,0xC3,0x00,0x00,}},
- {0x868B,2,{0xF2,0xB8,0x00,0x00,}},
- {0x868C,2,{0xB0,0xF6,0x00,0x00,}},
- {0x868D,2,{0xF2,0xB7,0x00,0x00,}},
- {0x868E,2,{0xCD,0x51,0x00,0x00,}},
- {0x868F,2,{0xCD,0x52,0x00,0x00,}},
- {0x8690,2,{0xCD,0x53,0x00,0x00,}},
- {0x8691,2,{0xCD,0x54,0x00,0x00,}},
- {0x8692,2,{0xCD,0x55,0x00,0x00,}},
- {0x8693,2,{0xF2,0xBE,0x00,0x00,}},
- {0x8694,2,{0xCD,0x56,0x00,0x00,}},
- {0x8695,2,{0xB2,0xCF,0x00,0x00,}},
- {0x8696,2,{0xCD,0x57,0x00,0x00,}},
- {0x8697,2,{0xCD,0x58,0x00,0x00,}},
- {0x8698,2,{0xCD,0x59,0x00,0x00,}},
- {0x8699,2,{0xCD,0x5A,0x00,0x00,}},
- {0x869A,2,{0xCD,0x5B,0x00,0x00,}},
- {0x869B,2,{0xCD,0x5C,0x00,0x00,}},
- {0x869C,2,{0xD1,0xC1,0x00,0x00,}},
- {0x869D,2,{0xF2,0xBA,0x00,0x00,}},
- {0x869E,2,{0xCD,0x5D,0x00,0x00,}},
- {0x869F,2,{0xCD,0x5E,0x00,0x00,}},
- {0x86A0,2,{0xCD,0x5F,0x00,0x00,}},
- {0x86A1,2,{0xCD,0x60,0x00,0x00,}},
- {0x86A2,2,{0xCD,0x61,0x00,0x00,}},
- {0x86A3,2,{0xF2,0xBC,0x00,0x00,}},
- {0x86A4,2,{0xD4,0xE9,0x00,0x00,}},
- {0x86A5,2,{0xCD,0x62,0x00,0x00,}},
- {0x86A6,2,{0xCD,0x63,0x00,0x00,}},
- {0x86A7,2,{0xF2,0xBB,0x00,0x00,}},
- {0x86A8,2,{0xF2,0xB6,0x00,0x00,}},
- {0x86A9,2,{0xF2,0xBF,0x00,0x00,}},
- {0x86AA,2,{0xF2,0xBD,0x00,0x00,}},
- {0x86AB,2,{0xCD,0x64,0x00,0x00,}},
- {0x86AC,2,{0xF2,0xB9,0x00,0x00,}},
- {0x86AD,2,{0xCD,0x65,0x00,0x00,}},
- {0x86AE,2,{0xCD,0x66,0x00,0x00,}},
- {0x86AF,2,{0xF2,0xC7,0x00,0x00,}},
- {0x86B0,2,{0xF2,0xC4,0x00,0x00,}},
- {0x86B1,2,{0xF2,0xC6,0x00,0x00,}},
- {0x86B2,2,{0xCD,0x67,0x00,0x00,}},
- {0x86B3,2,{0xCD,0x68,0x00,0x00,}},
- {0x86B4,2,{0xF2,0xCA,0x00,0x00,}},
- {0x86B5,2,{0xF2,0xC2,0x00,0x00,}},
- {0x86B6,2,{0xF2,0xC0,0x00,0x00,}},
- {0x86B7,2,{0xCD,0x69,0x00,0x00,}},
- {0x86B8,2,{0xCD,0x6A,0x00,0x00,}},
- {0x86B9,2,{0xCD,0x6B,0x00,0x00,}},
- {0x86BA,2,{0xF2,0xC5,0x00,0x00,}},
- {0x86BB,2,{0xCD,0x6C,0x00,0x00,}},
- {0x86BC,2,{0xCD,0x6D,0x00,0x00,}},
- {0x86BD,2,{0xCD,0x6E,0x00,0x00,}},
- {0x86BE,2,{0xCD,0x6F,0x00,0x00,}},
- {0x86BF,2,{0xCD,0x70,0x00,0x00,}},
- {0x86C0,2,{0xD6,0xFB,0x00,0x00,}},
- {0x86C1,2,{0xCD,0x71,0x00,0x00,}},
- {0x86C2,2,{0xCD,0x72,0x00,0x00,}},
- {0x86C3,2,{0xCD,0x73,0x00,0x00,}},
- {0x86C4,2,{0xF2,0xC1,0x00,0x00,}},
- {0x86C5,2,{0xCD,0x74,0x00,0x00,}},
- {0x86C6,2,{0xC7,0xF9,0x00,0x00,}},
- {0x86C7,2,{0xC9,0xDF,0x00,0x00,}},
- {0x86C8,2,{0xCD,0x75,0x00,0x00,}},
- {0x86C9,2,{0xF2,0xC8,0x00,0x00,}},
- {0x86CA,2,{0xB9,0xC6,0x00,0x00,}},
- {0x86CB,2,{0xB5,0xB0,0x00,0x00,}},
- {0x86CC,2,{0xCD,0x76,0x00,0x00,}},
- {0x86CD,2,{0xCD,0x77,0x00,0x00,}},
- {0x86CE,2,{0xF2,0xC3,0x00,0x00,}},
- {0x86CF,2,{0xF2,0xC9,0x00,0x00,}},
- {0x86D0,2,{0xF2,0xD0,0x00,0x00,}},
- {0x86D1,2,{0xF2,0xD6,0x00,0x00,}},
- {0x86D2,2,{0xCD,0x78,0x00,0x00,}},
- {0x86D3,2,{0xCD,0x79,0x00,0x00,}},
- {0x86D4,2,{0xBB,0xD7,0x00,0x00,}},
- {0x86D5,2,{0xCD,0x7A,0x00,0x00,}},
- {0x86D6,2,{0xCD,0x7B,0x00,0x00,}},
- {0x86D7,2,{0xCD,0x7C,0x00,0x00,}},
- {0x86D8,2,{0xF2,0xD5,0x00,0x00,}},
- {0x86D9,2,{0xCD,0xDC,0x00,0x00,}},
- {0x86DA,2,{0xCD,0x7D,0x00,0x00,}},
- {0x86DB,2,{0xD6,0xEB,0x00,0x00,}},
- {0x86DC,2,{0xCD,0x7E,0x00,0x00,}},
- {0x86DD,2,{0xCD,0x80,0x00,0x00,}},
- {0x86DE,2,{0xF2,0xD2,0x00,0x00,}},
- {0x86DF,2,{0xF2,0xD4,0x00,0x00,}},
- {0x86E0,2,{0xCD,0x81,0x00,0x00,}},
- {0x86E1,2,{0xCD,0x82,0x00,0x00,}},
- {0x86E2,2,{0xCD,0x83,0x00,0x00,}},
- {0x86E3,2,{0xCD,0x84,0x00,0x00,}},
- {0x86E4,2,{0xB8,0xF2,0x00,0x00,}},
- {0x86E5,2,{0xCD,0x85,0x00,0x00,}},
- {0x86E6,2,{0xCD,0x86,0x00,0x00,}},
- {0x86E7,2,{0xCD,0x87,0x00,0x00,}},
- {0x86E8,2,{0xCD,0x88,0x00,0x00,}},
- {0x86E9,2,{0xF2,0xCB,0x00,0x00,}},
- {0x86EA,2,{0xCD,0x89,0x00,0x00,}},
- {0x86EB,2,{0xCD,0x8A,0x00,0x00,}},
- {0x86EC,2,{0xCD,0x8B,0x00,0x00,}},
- {0x86ED,2,{0xF2,0xCE,0x00,0x00,}},
- {0x86EE,2,{0xC2,0xF9,0x00,0x00,}},
- {0x86EF,2,{0xCD,0x8C,0x00,0x00,}},
- {0x86F0,2,{0xD5,0xDD,0x00,0x00,}},
- {0x86F1,2,{0xF2,0xCC,0x00,0x00,}},
- {0x86F2,2,{0xF2,0xCD,0x00,0x00,}},
- {0x86F3,2,{0xF2,0xCF,0x00,0x00,}},
- {0x86F4,2,{0xF2,0xD3,0x00,0x00,}},
- {0x86F5,2,{0xCD,0x8D,0x00,0x00,}},
- {0x86F6,2,{0xCD,0x8E,0x00,0x00,}},
- {0x86F7,2,{0xCD,0x8F,0x00,0x00,}},
- {0x86F8,2,{0xF2,0xD9,0x00,0x00,}},
- {0x86F9,2,{0xD3,0xBC,0x00,0x00,}},
- {0x86FA,2,{0xCD,0x90,0x00,0x00,}},
- {0x86FB,2,{0xCD,0x91,0x00,0x00,}},
- {0x86FC,2,{0xCD,0x92,0x00,0x00,}},
- {0x86FD,2,{0xCD,0x93,0x00,0x00,}},
- {0x86FE,2,{0xB6,0xEA,0x00,0x00,}},
- {0x86FF,2,{0xCD,0x94,0x00,0x00,}},
- {0x8700,2,{0xCA,0xF1,0x00,0x00,}},
- {0x8701,2,{0xCD,0x95,0x00,0x00,}},
- {0x8702,2,{0xB7,0xE4,0x00,0x00,}},
- {0x8703,2,{0xF2,0xD7,0x00,0x00,}},
- {0x8704,2,{0xCD,0x96,0x00,0x00,}},
- {0x8705,2,{0xCD,0x97,0x00,0x00,}},
- {0x8706,2,{0xCD,0x98,0x00,0x00,}},
- {0x8707,2,{0xF2,0xD8,0x00,0x00,}},
- {0x8708,2,{0xF2,0xDA,0x00,0x00,}},
- {0x8709,2,{0xF2,0xDD,0x00,0x00,}},
- {0x870A,2,{0xF2,0xDB,0x00,0x00,}},
- {0x870B,2,{0xCD,0x99,0x00,0x00,}},
- {0x870C,2,{0xCD,0x9A,0x00,0x00,}},
- {0x870D,2,{0xF2,0xDC,0x00,0x00,}},
- {0x870E,2,{0xCD,0x9B,0x00,0x00,}},
- {0x870F,2,{0xCD,0x9C,0x00,0x00,}},
- {0x8710,2,{0xCD,0x9D,0x00,0x00,}},
- {0x8711,2,{0xCD,0x9E,0x00,0x00,}},
- {0x8712,2,{0xD1,0xD1,0x00,0x00,}},
- {0x8713,2,{0xF2,0xD1,0x00,0x00,}},
- {0x8714,2,{0xCD,0x9F,0x00,0x00,}},
- {0x8715,2,{0xCD,0xC9,0x00,0x00,}},
- {0x8716,2,{0xCD,0xA0,0x00,0x00,}},
- {0x8717,2,{0xCE,0xCF,0x00,0x00,}},
- {0x8718,2,{0xD6,0xA9,0x00,0x00,}},
- {0x8719,2,{0xCE,0x40,0x00,0x00,}},
- {0x871A,2,{0xF2,0xE3,0x00,0x00,}},
- {0x871B,2,{0xCE,0x41,0x00,0x00,}},
- {0x871C,2,{0xC3,0xDB,0x00,0x00,}},
- {0x871D,2,{0xCE,0x42,0x00,0x00,}},
- {0x871E,2,{0xF2,0xE0,0x00,0x00,}},
- {0x871F,2,{0xCE,0x43,0x00,0x00,}},
- {0x8720,2,{0xCE,0x44,0x00,0x00,}},
- {0x8721,2,{0xC0,0xAF,0x00,0x00,}},
- {0x8722,2,{0xF2,0xEC,0x00,0x00,}},
- {0x8723,2,{0xF2,0xDE,0x00,0x00,}},
- {0x8724,2,{0xCE,0x45,0x00,0x00,}},
- {0x8725,2,{0xF2,0xE1,0x00,0x00,}},
- {0x8726,2,{0xCE,0x46,0x00,0x00,}},
- {0x8727,2,{0xCE,0x47,0x00,0x00,}},
- {0x8728,2,{0xCE,0x48,0x00,0x00,}},
- {0x8729,2,{0xF2,0xE8,0x00,0x00,}},
- {0x872A,2,{0xCE,0x49,0x00,0x00,}},
- {0x872B,2,{0xCE,0x4A,0x00,0x00,}},
- {0x872C,2,{0xCE,0x4B,0x00,0x00,}},
- {0x872D,2,{0xCE,0x4C,0x00,0x00,}},
- {0x872E,2,{0xF2,0xE2,0x00,0x00,}},
- {0x872F,2,{0xCE,0x4D,0x00,0x00,}},
- {0x8730,2,{0xCE,0x4E,0x00,0x00,}},
- {0x8731,2,{0xF2,0xE7,0x00,0x00,}},
- {0x8732,2,{0xCE,0x4F,0x00,0x00,}},
- {0x8733,2,{0xCE,0x50,0x00,0x00,}},
- {0x8734,2,{0xF2,0xE6,0x00,0x00,}},
- {0x8735,2,{0xCE,0x51,0x00,0x00,}},
- {0x8736,2,{0xCE,0x52,0x00,0x00,}},
- {0x8737,2,{0xF2,0xE9,0x00,0x00,}},
- {0x8738,2,{0xCE,0x53,0x00,0x00,}},
- {0x8739,2,{0xCE,0x54,0x00,0x00,}},
- {0x873A,2,{0xCE,0x55,0x00,0x00,}},
- {0x873B,2,{0xF2,0xDF,0x00,0x00,}},
- {0x873C,2,{0xCE,0x56,0x00,0x00,}},
- {0x873D,2,{0xCE,0x57,0x00,0x00,}},
- {0x873E,2,{0xF2,0xE4,0x00,0x00,}},
- {0x873F,2,{0xF2,0xEA,0x00,0x00,}},
- {0x8740,2,{0xCE,0x58,0x00,0x00,}},
- {0x8741,2,{0xCE,0x59,0x00,0x00,}},
- {0x8742,2,{0xCE,0x5A,0x00,0x00,}},
- {0x8743,2,{0xCE,0x5B,0x00,0x00,}},
- {0x8744,2,{0xCE,0x5C,0x00,0x00,}},
- {0x8745,2,{0xCE,0x5D,0x00,0x00,}},
- {0x8746,2,{0xCE,0x5E,0x00,0x00,}},
- {0x8747,2,{0xD3,0xAC,0x00,0x00,}},
- {0x8748,2,{0xF2,0xE5,0x00,0x00,}},
- {0x8749,2,{0xB2,0xF5,0x00,0x00,}},
- {0x874A,2,{0xCE,0x5F,0x00,0x00,}},
- {0x874B,2,{0xCE,0x60,0x00,0x00,}},
- {0x874C,2,{0xF2,0xF2,0x00,0x00,}},
- {0x874D,2,{0xCE,0x61,0x00,0x00,}},
- {0x874E,2,{0xD0,0xAB,0x00,0x00,}},
- {0x874F,2,{0xCE,0x62,0x00,0x00,}},
- {0x8750,2,{0xCE,0x63,0x00,0x00,}},
- {0x8751,2,{0xCE,0x64,0x00,0x00,}},
- {0x8752,2,{0xCE,0x65,0x00,0x00,}},
- {0x8753,2,{0xF2,0xF5,0x00,0x00,}},
- {0x8754,2,{0xCE,0x66,0x00,0x00,}},
- {0x8755,2,{0xCE,0x67,0x00,0x00,}},
- {0x8756,2,{0xCE,0x68,0x00,0x00,}},
- {0x8757,2,{0xBB,0xC8,0x00,0x00,}},
- {0x8758,2,{0xCE,0x69,0x00,0x00,}},
- {0x8759,2,{0xF2,0xF9,0x00,0x00,}},
- {0x875A,2,{0xCE,0x6A,0x00,0x00,}},
- {0x875B,2,{0xCE,0x6B,0x00,0x00,}},
- {0x875C,2,{0xCE,0x6C,0x00,0x00,}},
- {0x875D,2,{0xCE,0x6D,0x00,0x00,}},
- {0x875E,2,{0xCE,0x6E,0x00,0x00,}},
- {0x875F,2,{0xCE,0x6F,0x00,0x00,}},
- {0x8760,2,{0xF2,0xF0,0x00,0x00,}},
- {0x8761,2,{0xCE,0x70,0x00,0x00,}},
- {0x8762,2,{0xCE,0x71,0x00,0x00,}},
- {0x8763,2,{0xF2,0xF6,0x00,0x00,}},
- {0x8764,2,{0xF2,0xF8,0x00,0x00,}},
- {0x8765,2,{0xF2,0xFA,0x00,0x00,}},
- {0x8766,2,{0xCE,0x72,0x00,0x00,}},
- {0x8767,2,{0xCE,0x73,0x00,0x00,}},
- {0x8768,2,{0xCE,0x74,0x00,0x00,}},
- {0x8769,2,{0xCE,0x75,0x00,0x00,}},
- {0x876A,2,{0xCE,0x76,0x00,0x00,}},
- {0x876B,2,{0xCE,0x77,0x00,0x00,}},
- {0x876C,2,{0xCE,0x78,0x00,0x00,}},
- {0x876D,2,{0xCE,0x79,0x00,0x00,}},
- {0x876E,2,{0xF2,0xF3,0x00,0x00,}},
- {0x876F,2,{0xCE,0x7A,0x00,0x00,}},
- {0x8770,2,{0xF2,0xF1,0x00,0x00,}},
- {0x8771,2,{0xCE,0x7B,0x00,0x00,}},
- {0x8772,2,{0xCE,0x7C,0x00,0x00,}},
- {0x8773,2,{0xCE,0x7D,0x00,0x00,}},
- {0x8774,2,{0xBA,0xFB,0x00,0x00,}},
- {0x8775,2,{0xCE,0x7E,0x00,0x00,}},
- {0x8776,2,{0xB5,0xFB,0x00,0x00,}},
- {0x8777,2,{0xCE,0x80,0x00,0x00,}},
- {0x8778,2,{0xCE,0x81,0x00,0x00,}},
- {0x8779,2,{0xCE,0x82,0x00,0x00,}},
- {0x877A,2,{0xCE,0x83,0x00,0x00,}},
- {0x877B,2,{0xF2,0xEF,0x00,0x00,}},
- {0x877C,2,{0xF2,0xF7,0x00,0x00,}},
- {0x877D,2,{0xF2,0xED,0x00,0x00,}},
- {0x877E,2,{0xF2,0xEE,0x00,0x00,}},
- {0x877F,2,{0xCE,0x84,0x00,0x00,}},
- {0x8780,2,{0xCE,0x85,0x00,0x00,}},
- {0x8781,2,{0xCE,0x86,0x00,0x00,}},
- {0x8782,2,{0xF2,0xEB,0x00,0x00,}},
- {0x8783,2,{0xF3,0xA6,0x00,0x00,}},
- {0x8784,2,{0xCE,0x87,0x00,0x00,}},
- {0x8785,2,{0xF3,0xA3,0x00,0x00,}},
- {0x8786,2,{0xCE,0x88,0x00,0x00,}},
- {0x8787,2,{0xCE,0x89,0x00,0x00,}},
- {0x8788,2,{0xF3,0xA2,0x00,0x00,}},
- {0x8789,2,{0xCE,0x8A,0x00,0x00,}},
- {0x878A,2,{0xCE,0x8B,0x00,0x00,}},
- {0x878B,2,{0xF2,0xF4,0x00,0x00,}},
- {0x878C,2,{0xCE,0x8C,0x00,0x00,}},
- {0x878D,2,{0xC8,0xDA,0x00,0x00,}},
- {0x878E,2,{0xCE,0x8D,0x00,0x00,}},
- {0x878F,2,{0xCE,0x8E,0x00,0x00,}},
- {0x8790,2,{0xCE,0x8F,0x00,0x00,}},
- {0x8791,2,{0xCE,0x90,0x00,0x00,}},
- {0x8792,2,{0xCE,0x91,0x00,0x00,}},
- {0x8793,2,{0xF2,0xFB,0x00,0x00,}},
- {0x8794,2,{0xCE,0x92,0x00,0x00,}},
- {0x8795,2,{0xCE,0x93,0x00,0x00,}},
- {0x8796,2,{0xCE,0x94,0x00,0x00,}},
- {0x8797,2,{0xF3,0xA5,0x00,0x00,}},
- {0x8798,2,{0xCE,0x95,0x00,0x00,}},
- {0x8799,2,{0xCE,0x96,0x00,0x00,}},
- {0x879A,2,{0xCE,0x97,0x00,0x00,}},
- {0x879B,2,{0xCE,0x98,0x00,0x00,}},
- {0x879C,2,{0xCE,0x99,0x00,0x00,}},
- {0x879D,2,{0xCE,0x9A,0x00,0x00,}},
- {0x879E,2,{0xCE,0x9B,0x00,0x00,}},
- {0x879F,2,{0xC3,0xF8,0x00,0x00,}},
- {0x87A0,2,{0xCE,0x9C,0x00,0x00,}},
- {0x87A1,2,{0xCE,0x9D,0x00,0x00,}},
- {0x87A2,2,{0xCE,0x9E,0x00,0x00,}},
- {0x87A3,2,{0xCE,0x9F,0x00,0x00,}},
- {0x87A4,2,{0xCE,0xA0,0x00,0x00,}},
- {0x87A5,2,{0xCF,0x40,0x00,0x00,}},
- {0x87A6,2,{0xCF,0x41,0x00,0x00,}},
- {0x87A7,2,{0xCF,0x42,0x00,0x00,}},
- {0x87A8,2,{0xF2,0xFD,0x00,0x00,}},
- {0x87A9,2,{0xCF,0x43,0x00,0x00,}},
- {0x87AA,2,{0xCF,0x44,0x00,0x00,}},
- {0x87AB,2,{0xF3,0xA7,0x00,0x00,}},
- {0x87AC,2,{0xF3,0xA9,0x00,0x00,}},
- {0x87AD,2,{0xF3,0xA4,0x00,0x00,}},
- {0x87AE,2,{0xCF,0x45,0x00,0x00,}},
- {0x87AF,2,{0xF2,0xFC,0x00,0x00,}},
- {0x87B0,2,{0xCF,0x46,0x00,0x00,}},
- {0x87B1,2,{0xCF,0x47,0x00,0x00,}},
- {0x87B2,2,{0xCF,0x48,0x00,0x00,}},
- {0x87B3,2,{0xF3,0xAB,0x00,0x00,}},
- {0x87B4,2,{0xCF,0x49,0x00,0x00,}},
- {0x87B5,2,{0xF3,0xAA,0x00,0x00,}},
- {0x87B6,2,{0xCF,0x4A,0x00,0x00,}},
- {0x87B7,2,{0xCF,0x4B,0x00,0x00,}},
- {0x87B8,2,{0xCF,0x4C,0x00,0x00,}},
- {0x87B9,2,{0xCF,0x4D,0x00,0x00,}},
- {0x87BA,2,{0xC2,0xDD,0x00,0x00,}},
- {0x87BB,2,{0xCF,0x4E,0x00,0x00,}},
- {0x87BC,2,{0xCF,0x4F,0x00,0x00,}},
- {0x87BD,2,{0xF3,0xAE,0x00,0x00,}},
- {0x87BE,2,{0xCF,0x50,0x00,0x00,}},
- {0x87BF,2,{0xCF,0x51,0x00,0x00,}},
- {0x87C0,2,{0xF3,0xB0,0x00,0x00,}},
- {0x87C1,2,{0xCF,0x52,0x00,0x00,}},
- {0x87C2,2,{0xCF,0x53,0x00,0x00,}},
- {0x87C3,2,{0xCF,0x54,0x00,0x00,}},
- {0x87C4,2,{0xCF,0x55,0x00,0x00,}},
- {0x87C5,2,{0xCF,0x56,0x00,0x00,}},
- {0x87C6,2,{0xF3,0xA1,0x00,0x00,}},
- {0x87C7,2,{0xCF,0x57,0x00,0x00,}},
- {0x87C8,2,{0xCF,0x58,0x00,0x00,}},
- {0x87C9,2,{0xCF,0x59,0x00,0x00,}},
- {0x87CA,2,{0xF3,0xB1,0x00,0x00,}},
- {0x87CB,2,{0xF3,0xAC,0x00,0x00,}},
- {0x87CC,2,{0xCF,0x5A,0x00,0x00,}},
- {0x87CD,2,{0xCF,0x5B,0x00,0x00,}},
- {0x87CE,2,{0xCF,0x5C,0x00,0x00,}},
- {0x87CF,2,{0xCF,0x5D,0x00,0x00,}},
- {0x87D0,2,{0xCF,0x5E,0x00,0x00,}},
- {0x87D1,2,{0xF3,0xAF,0x00,0x00,}},
- {0x87D2,2,{0xF2,0xFE,0x00,0x00,}},
- {0x87D3,2,{0xF3,0xAD,0x00,0x00,}},
- {0x87D4,2,{0xCF,0x5F,0x00,0x00,}},
- {0x87D5,2,{0xCF,0x60,0x00,0x00,}},
- {0x87D6,2,{0xCF,0x61,0x00,0x00,}},
- {0x87D7,2,{0xCF,0x62,0x00,0x00,}},
- {0x87D8,2,{0xCF,0x63,0x00,0x00,}},
- {0x87D9,2,{0xCF,0x64,0x00,0x00,}},
- {0x87DA,2,{0xCF,0x65,0x00,0x00,}},
- {0x87DB,2,{0xF3,0xB2,0x00,0x00,}},
- {0x87DC,2,{0xCF,0x66,0x00,0x00,}},
- {0x87DD,2,{0xCF,0x67,0x00,0x00,}},
- {0x87DE,2,{0xCF,0x68,0x00,0x00,}},
- {0x87DF,2,{0xCF,0x69,0x00,0x00,}},
- {0x87E0,2,{0xF3,0xB4,0x00,0x00,}},
- {0x87E1,2,{0xCF,0x6A,0x00,0x00,}},
- {0x87E2,2,{0xCF,0x6B,0x00,0x00,}},
- {0x87E3,2,{0xCF,0x6C,0x00,0x00,}},
- {0x87E4,2,{0xCF,0x6D,0x00,0x00,}},
- {0x87E5,2,{0xF3,0xA8,0x00,0x00,}},
- {0x87E6,2,{0xCF,0x6E,0x00,0x00,}},
- {0x87E7,2,{0xCF,0x6F,0x00,0x00,}},
- {0x87E8,2,{0xCF,0x70,0x00,0x00,}},
- {0x87E9,2,{0xCF,0x71,0x00,0x00,}},
- {0x87EA,2,{0xF3,0xB3,0x00,0x00,}},
- {0x87EB,2,{0xCF,0x72,0x00,0x00,}},
- {0x87EC,2,{0xCF,0x73,0x00,0x00,}},
- {0x87ED,2,{0xCF,0x74,0x00,0x00,}},
- {0x87EE,2,{0xF3,0xB5,0x00,0x00,}},
- {0x87EF,2,{0xCF,0x75,0x00,0x00,}},
- {0x87F0,2,{0xCF,0x76,0x00,0x00,}},
- {0x87F1,2,{0xCF,0x77,0x00,0x00,}},
- {0x87F2,2,{0xCF,0x78,0x00,0x00,}},
- {0x87F3,2,{0xCF,0x79,0x00,0x00,}},
- {0x87F4,2,{0xCF,0x7A,0x00,0x00,}},
- {0x87F5,2,{0xCF,0x7B,0x00,0x00,}},
- {0x87F6,2,{0xCF,0x7C,0x00,0x00,}},
- {0x87F7,2,{0xCF,0x7D,0x00,0x00,}},
- {0x87F8,2,{0xCF,0x7E,0x00,0x00,}},
- {0x87F9,2,{0xD0,0xB7,0x00,0x00,}},
- {0x87FA,2,{0xCF,0x80,0x00,0x00,}},
- {0x87FB,2,{0xCF,0x81,0x00,0x00,}},
- {0x87FC,2,{0xCF,0x82,0x00,0x00,}},
- {0x87FD,2,{0xCF,0x83,0x00,0x00,}},
- {0x87FE,2,{0xF3,0xB8,0x00,0x00,}},
- {0x87FF,2,{0xCF,0x84,0x00,0x00,}},
- {0x8800,2,{0xCF,0x85,0x00,0x00,}},
- {0x8801,2,{0xCF,0x86,0x00,0x00,}},
- {0x8802,2,{0xCF,0x87,0x00,0x00,}},
- {0x8803,2,{0xD9,0xF9,0x00,0x00,}},
- {0x8804,2,{0xCF,0x88,0x00,0x00,}},
- {0x8805,2,{0xCF,0x89,0x00,0x00,}},
- {0x8806,2,{0xCF,0x8A,0x00,0x00,}},
- {0x8807,2,{0xCF,0x8B,0x00,0x00,}},
- {0x8808,2,{0xCF,0x8C,0x00,0x00,}},
- {0x8809,2,{0xCF,0x8D,0x00,0x00,}},
- {0x880A,2,{0xF3,0xB9,0x00,0x00,}},
- {0x880B,2,{0xCF,0x8E,0x00,0x00,}},
- {0x880C,2,{0xCF,0x8F,0x00,0x00,}},
- {0x880D,2,{0xCF,0x90,0x00,0x00,}},
- {0x880E,2,{0xCF,0x91,0x00,0x00,}},
- {0x880F,2,{0xCF,0x92,0x00,0x00,}},
- {0x8810,2,{0xCF,0x93,0x00,0x00,}},
- {0x8811,2,{0xCF,0x94,0x00,0x00,}},
- {0x8812,2,{0xCF,0x95,0x00,0x00,}},
- {0x8813,2,{0xF3,0xB7,0x00,0x00,}},
- {0x8814,2,{0xCF,0x96,0x00,0x00,}},
- {0x8815,2,{0xC8,0xE4,0x00,0x00,}},
- {0x8816,2,{0xF3,0xB6,0x00,0x00,}},
- {0x8817,2,{0xCF,0x97,0x00,0x00,}},
- {0x8818,2,{0xCF,0x98,0x00,0x00,}},
- {0x8819,2,{0xCF,0x99,0x00,0x00,}},
- {0x881A,2,{0xCF,0x9A,0x00,0x00,}},
- {0x881B,2,{0xF3,0xBA,0x00,0x00,}},
- {0x881C,2,{0xCF,0x9B,0x00,0x00,}},
- {0x881D,2,{0xCF,0x9C,0x00,0x00,}},
- {0x881E,2,{0xCF,0x9D,0x00,0x00,}},
- {0x881F,2,{0xCF,0x9E,0x00,0x00,}},
- {0x8820,2,{0xCF,0x9F,0x00,0x00,}},
- {0x8821,2,{0xF3,0xBB,0x00,0x00,}},
- {0x8822,2,{0xB4,0xC0,0x00,0x00,}},
- {0x8823,2,{0xCF,0xA0,0x00,0x00,}},
- {0x8824,2,{0xD0,0x40,0x00,0x00,}},
- {0x8825,2,{0xD0,0x41,0x00,0x00,}},
- {0x8826,2,{0xD0,0x42,0x00,0x00,}},
- {0x8827,2,{0xD0,0x43,0x00,0x00,}},
- {0x8828,2,{0xD0,0x44,0x00,0x00,}},
- {0x8829,2,{0xD0,0x45,0x00,0x00,}},
- {0x882A,2,{0xD0,0x46,0x00,0x00,}},
- {0x882B,2,{0xD0,0x47,0x00,0x00,}},
- {0x882C,2,{0xD0,0x48,0x00,0x00,}},
- {0x882D,2,{0xD0,0x49,0x00,0x00,}},
- {0x882E,2,{0xD0,0x4A,0x00,0x00,}},
- {0x882F,2,{0xD0,0x4B,0x00,0x00,}},
- {0x8830,2,{0xD0,0x4C,0x00,0x00,}},
- {0x8831,2,{0xD0,0x4D,0x00,0x00,}},
- {0x8832,2,{0xEE,0xC3,0x00,0x00,}},
- {0x8833,2,{0xD0,0x4E,0x00,0x00,}},
- {0x8834,2,{0xD0,0x4F,0x00,0x00,}},
- {0x8835,2,{0xD0,0x50,0x00,0x00,}},
- {0x8836,2,{0xD0,0x51,0x00,0x00,}},
- {0x8837,2,{0xD0,0x52,0x00,0x00,}},
- {0x8838,2,{0xD0,0x53,0x00,0x00,}},
- {0x8839,2,{0xF3,0xBC,0x00,0x00,}},
- {0x883A,2,{0xD0,0x54,0x00,0x00,}},
- {0x883B,2,{0xD0,0x55,0x00,0x00,}},
- {0x883C,2,{0xF3,0xBD,0x00,0x00,}},
- {0x883D,2,{0xD0,0x56,0x00,0x00,}},
- {0x883E,2,{0xD0,0x57,0x00,0x00,}},
- {0x883F,2,{0xD0,0x58,0x00,0x00,}},
- {0x8840,2,{0xD1,0xAA,0x00,0x00,}},
- {0x8841,2,{0xD0,0x59,0x00,0x00,}},
- {0x8842,2,{0xD0,0x5A,0x00,0x00,}},
- {0x8843,2,{0xD0,0x5B,0x00,0x00,}},
- {0x8844,2,{0xF4,0xAC,0x00,0x00,}},
- {0x8845,2,{0xD0,0xC6,0x00,0x00,}},
- {0x8846,2,{0xD0,0x5C,0x00,0x00,}},
- {0x8847,2,{0xD0,0x5D,0x00,0x00,}},
- {0x8848,2,{0xD0,0x5E,0x00,0x00,}},
- {0x8849,2,{0xD0,0x5F,0x00,0x00,}},
- {0x884A,2,{0xD0,0x60,0x00,0x00,}},
- {0x884B,2,{0xD0,0x61,0x00,0x00,}},
- {0x884C,2,{0xD0,0xD0,0x00,0x00,}},
- {0x884D,2,{0xD1,0xDC,0x00,0x00,}},
- {0x884E,2,{0xD0,0x62,0x00,0x00,}},
- {0x884F,2,{0xD0,0x63,0x00,0x00,}},
- {0x8850,2,{0xD0,0x64,0x00,0x00,}},
- {0x8851,2,{0xD0,0x65,0x00,0x00,}},
- {0x8852,2,{0xD0,0x66,0x00,0x00,}},
- {0x8853,2,{0xD0,0x67,0x00,0x00,}},
- {0x8854,2,{0xCF,0xCE,0x00,0x00,}},
- {0x8855,2,{0xD0,0x68,0x00,0x00,}},
- {0x8856,2,{0xD0,0x69,0x00,0x00,}},
- {0x8857,2,{0xBD,0xD6,0x00,0x00,}},
- {0x8858,2,{0xD0,0x6A,0x00,0x00,}},
- {0x8859,2,{0xD1,0xC3,0x00,0x00,}},
- {0x885A,2,{0xD0,0x6B,0x00,0x00,}},
- {0x885B,2,{0xD0,0x6C,0x00,0x00,}},
- {0x885C,2,{0xD0,0x6D,0x00,0x00,}},
- {0x885D,2,{0xD0,0x6E,0x00,0x00,}},
- {0x885E,2,{0xD0,0x6F,0x00,0x00,}},
- {0x885F,2,{0xD0,0x70,0x00,0x00,}},
- {0x8860,2,{0xD0,0x71,0x00,0x00,}},
- {0x8861,2,{0xBA,0xE2,0x00,0x00,}},
- {0x8862,2,{0xE1,0xE9,0x00,0x00,}},
- {0x8863,2,{0xD2,0xC2,0x00,0x00,}},
- {0x8864,2,{0xF1,0xC2,0x00,0x00,}},
- {0x8865,2,{0xB2,0xB9,0x00,0x00,}},
- {0x8866,2,{0xD0,0x72,0x00,0x00,}},
- {0x8867,2,{0xD0,0x73,0x00,0x00,}},
- {0x8868,2,{0xB1,0xED,0x00,0x00,}},
- {0x8869,2,{0xF1,0xC3,0x00,0x00,}},
- {0x886A,2,{0xD0,0x74,0x00,0x00,}},
- {0x886B,2,{0xC9,0xC0,0x00,0x00,}},
- {0x886C,2,{0xB3,0xC4,0x00,0x00,}},
- {0x886D,2,{0xD0,0x75,0x00,0x00,}},
- {0x886E,2,{0xD9,0xF2,0x00,0x00,}},
- {0x886F,2,{0xD0,0x76,0x00,0x00,}},
- {0x8870,2,{0xCB,0xA5,0x00,0x00,}},
- {0x8871,2,{0xD0,0x77,0x00,0x00,}},
- {0x8872,2,{0xF1,0xC4,0x00,0x00,}},
- {0x8873,2,{0xD0,0x78,0x00,0x00,}},
- {0x8874,2,{0xD0,0x79,0x00,0x00,}},
- {0x8875,2,{0xD0,0x7A,0x00,0x00,}},
- {0x8876,2,{0xD0,0x7B,0x00,0x00,}},
- {0x8877,2,{0xD6,0xD4,0x00,0x00,}},
- {0x8878,2,{0xD0,0x7C,0x00,0x00,}},
- {0x8879,2,{0xD0,0x7D,0x00,0x00,}},
- {0x887A,2,{0xD0,0x7E,0x00,0x00,}},
- {0x887B,2,{0xD0,0x80,0x00,0x00,}},
- {0x887C,2,{0xD0,0x81,0x00,0x00,}},
- {0x887D,2,{0xF1,0xC5,0x00,0x00,}},
- {0x887E,2,{0xF4,0xC0,0x00,0x00,}},
- {0x887F,2,{0xF1,0xC6,0x00,0x00,}},
- {0x8880,2,{0xD0,0x82,0x00,0x00,}},
- {0x8881,2,{0xD4,0xAC,0x00,0x00,}},
- {0x8882,2,{0xF1,0xC7,0x00,0x00,}},
- {0x8883,2,{0xD0,0x83,0x00,0x00,}},
- {0x8884,2,{0xB0,0xC0,0x00,0x00,}},
- {0x8885,2,{0xF4,0xC1,0x00,0x00,}},
- {0x8886,2,{0xD0,0x84,0x00,0x00,}},
- {0x8887,2,{0xD0,0x85,0x00,0x00,}},
- {0x8888,2,{0xF4,0xC2,0x00,0x00,}},
- {0x8889,2,{0xD0,0x86,0x00,0x00,}},
- {0x888A,2,{0xD0,0x87,0x00,0x00,}},
- {0x888B,2,{0xB4,0xFC,0x00,0x00,}},
- {0x888C,2,{0xD0,0x88,0x00,0x00,}},
- {0x888D,2,{0xC5,0xDB,0x00,0x00,}},
- {0x888E,2,{0xD0,0x89,0x00,0x00,}},
- {0x888F,2,{0xD0,0x8A,0x00,0x00,}},
- {0x8890,2,{0xD0,0x8B,0x00,0x00,}},
- {0x8891,2,{0xD0,0x8C,0x00,0x00,}},
- {0x8892,2,{0xCC,0xBB,0x00,0x00,}},
- {0x8893,2,{0xD0,0x8D,0x00,0x00,}},
- {0x8894,2,{0xD0,0x8E,0x00,0x00,}},
- {0x8895,2,{0xD0,0x8F,0x00,0x00,}},
- {0x8896,2,{0xD0,0xE4,0x00,0x00,}},
- {0x8897,2,{0xD0,0x90,0x00,0x00,}},
- {0x8898,2,{0xD0,0x91,0x00,0x00,}},
- {0x8899,2,{0xD0,0x92,0x00,0x00,}},
- {0x889A,2,{0xD0,0x93,0x00,0x00,}},
- {0x889B,2,{0xD0,0x94,0x00,0x00,}},
- {0x889C,2,{0xCD,0xE0,0x00,0x00,}},
- {0x889D,2,{0xD0,0x95,0x00,0x00,}},
- {0x889E,2,{0xD0,0x96,0x00,0x00,}},
- {0x889F,2,{0xD0,0x97,0x00,0x00,}},
- {0x88A0,2,{0xD0,0x98,0x00,0x00,}},
- {0x88A1,2,{0xD0,0x99,0x00,0x00,}},
- {0x88A2,2,{0xF1,0xC8,0x00,0x00,}},
- {0x88A3,2,{0xD0,0x9A,0x00,0x00,}},
- {0x88A4,2,{0xD9,0xF3,0x00,0x00,}},
- {0x88A5,2,{0xD0,0x9B,0x00,0x00,}},
- {0x88A6,2,{0xD0,0x9C,0x00,0x00,}},
- {0x88A7,2,{0xD0,0x9D,0x00,0x00,}},
- {0x88A8,2,{0xD0,0x9E,0x00,0x00,}},
- {0x88A9,2,{0xD0,0x9F,0x00,0x00,}},
- {0x88AA,2,{0xD0,0xA0,0x00,0x00,}},
- {0x88AB,2,{0xB1,0xBB,0x00,0x00,}},
- {0x88AC,2,{0xD1,0x40,0x00,0x00,}},
- {0x88AD,2,{0xCF,0xAE,0x00,0x00,}},
- {0x88AE,2,{0xD1,0x41,0x00,0x00,}},
- {0x88AF,2,{0xD1,0x42,0x00,0x00,}},
- {0x88B0,2,{0xD1,0x43,0x00,0x00,}},
- {0x88B1,2,{0xB8,0xA4,0x00,0x00,}},
- {0x88B2,2,{0xD1,0x44,0x00,0x00,}},
- {0x88B3,2,{0xD1,0x45,0x00,0x00,}},
- {0x88B4,2,{0xD1,0x46,0x00,0x00,}},
- {0x88B5,2,{0xD1,0x47,0x00,0x00,}},
- {0x88B6,2,{0xD1,0x48,0x00,0x00,}},
- {0x88B7,2,{0xF1,0xCA,0x00,0x00,}},
- {0x88B8,2,{0xD1,0x49,0x00,0x00,}},
- {0x88B9,2,{0xD1,0x4A,0x00,0x00,}},
- {0x88BA,2,{0xD1,0x4B,0x00,0x00,}},
- {0x88BB,2,{0xD1,0x4C,0x00,0x00,}},
- {0x88BC,2,{0xF1,0xCB,0x00,0x00,}},
- {0x88BD,2,{0xD1,0x4D,0x00,0x00,}},
- {0x88BE,2,{0xD1,0x4E,0x00,0x00,}},
- {0x88BF,2,{0xD1,0x4F,0x00,0x00,}},
- {0x88C0,2,{0xD1,0x50,0x00,0x00,}},
- {0x88C1,2,{0xB2,0xC3,0x00,0x00,}},
- {0x88C2,2,{0xC1,0xD1,0x00,0x00,}},
- {0x88C3,2,{0xD1,0x51,0x00,0x00,}},
- {0x88C4,2,{0xD1,0x52,0x00,0x00,}},
- {0x88C5,2,{0xD7,0xB0,0x00,0x00,}},
- {0x88C6,2,{0xF1,0xC9,0x00,0x00,}},
- {0x88C7,2,{0xD1,0x53,0x00,0x00,}},
- {0x88C8,2,{0xD1,0x54,0x00,0x00,}},
- {0x88C9,2,{0xF1,0xCC,0x00,0x00,}},
- {0x88CA,2,{0xD1,0x55,0x00,0x00,}},
- {0x88CB,2,{0xD1,0x56,0x00,0x00,}},
- {0x88CC,2,{0xD1,0x57,0x00,0x00,}},
- {0x88CD,2,{0xD1,0x58,0x00,0x00,}},
- {0x88CE,2,{0xF1,0xCE,0x00,0x00,}},
- {0x88CF,2,{0xD1,0x59,0x00,0x00,}},
- {0x88D0,2,{0xD1,0x5A,0x00,0x00,}},
- {0x88D1,2,{0xD1,0x5B,0x00,0x00,}},
- {0x88D2,2,{0xD9,0xF6,0x00,0x00,}},
- {0x88D3,2,{0xD1,0x5C,0x00,0x00,}},
- {0x88D4,2,{0xD2,0xE1,0x00,0x00,}},
- {0x88D5,2,{0xD4,0xA3,0x00,0x00,}},
- {0x88D6,2,{0xD1,0x5D,0x00,0x00,}},
- {0x88D7,2,{0xD1,0x5E,0x00,0x00,}},
- {0x88D8,2,{0xF4,0xC3,0x00,0x00,}},
- {0x88D9,2,{0xC8,0xB9,0x00,0x00,}},
- {0x88DA,2,{0xD1,0x5F,0x00,0x00,}},
- {0x88DB,2,{0xD1,0x60,0x00,0x00,}},
- {0x88DC,2,{0xD1,0x61,0x00,0x00,}},
- {0x88DD,2,{0xD1,0x62,0x00,0x00,}},
- {0x88DE,2,{0xD1,0x63,0x00,0x00,}},
- {0x88DF,2,{0xF4,0xC4,0x00,0x00,}},
- {0x88E0,2,{0xD1,0x64,0x00,0x00,}},
- {0x88E1,2,{0xD1,0x65,0x00,0x00,}},
- {0x88E2,2,{0xF1,0xCD,0x00,0x00,}},
- {0x88E3,2,{0xF1,0xCF,0x00,0x00,}},
- {0x88E4,2,{0xBF,0xE3,0x00,0x00,}},
- {0x88E5,2,{0xF1,0xD0,0x00,0x00,}},
- {0x88E6,2,{0xD1,0x66,0x00,0x00,}},
- {0x88E7,2,{0xD1,0x67,0x00,0x00,}},
- {0x88E8,2,{0xF1,0xD4,0x00,0x00,}},
- {0x88E9,2,{0xD1,0x68,0x00,0x00,}},
- {0x88EA,2,{0xD1,0x69,0x00,0x00,}},
- {0x88EB,2,{0xD1,0x6A,0x00,0x00,}},
- {0x88EC,2,{0xD1,0x6B,0x00,0x00,}},
- {0x88ED,2,{0xD1,0x6C,0x00,0x00,}},
- {0x88EE,2,{0xD1,0x6D,0x00,0x00,}},
- {0x88EF,2,{0xD1,0x6E,0x00,0x00,}},
- {0x88F0,2,{0xF1,0xD6,0x00,0x00,}},
- {0x88F1,2,{0xF1,0xD1,0x00,0x00,}},
- {0x88F2,2,{0xD1,0x6F,0x00,0x00,}},
- {0x88F3,2,{0xC9,0xD1,0x00,0x00,}},
- {0x88F4,2,{0xC5,0xE1,0x00,0x00,}},
- {0x88F5,2,{0xD1,0x70,0x00,0x00,}},
- {0x88F6,2,{0xD1,0x71,0x00,0x00,}},
- {0x88F7,2,{0xD1,0x72,0x00,0x00,}},
- {0x88F8,2,{0xC2,0xE3,0x00,0x00,}},
- {0x88F9,2,{0xB9,0xFC,0x00,0x00,}},
- {0x88FA,2,{0xD1,0x73,0x00,0x00,}},
- {0x88FB,2,{0xD1,0x74,0x00,0x00,}},
- {0x88FC,2,{0xF1,0xD3,0x00,0x00,}},
- {0x88FD,2,{0xD1,0x75,0x00,0x00,}},
- {0x88FE,2,{0xF1,0xD5,0x00,0x00,}},
- {0x88FF,2,{0xD1,0x76,0x00,0x00,}},
- {0x8900,2,{0xD1,0x77,0x00,0x00,}},
- {0x8901,2,{0xD1,0x78,0x00,0x00,}},
- {0x8902,2,{0xB9,0xD3,0x00,0x00,}},
- {0x8903,2,{0xD1,0x79,0x00,0x00,}},
- {0x8904,2,{0xD1,0x7A,0x00,0x00,}},
- {0x8905,2,{0xD1,0x7B,0x00,0x00,}},
- {0x8906,2,{0xD1,0x7C,0x00,0x00,}},
- {0x8907,2,{0xD1,0x7D,0x00,0x00,}},
- {0x8908,2,{0xD1,0x7E,0x00,0x00,}},
- {0x8909,2,{0xD1,0x80,0x00,0x00,}},
- {0x890A,2,{0xF1,0xDB,0x00,0x00,}},
- {0x890B,2,{0xD1,0x81,0x00,0x00,}},
- {0x890C,2,{0xD1,0x82,0x00,0x00,}},
- {0x890D,2,{0xD1,0x83,0x00,0x00,}},
- {0x890E,2,{0xD1,0x84,0x00,0x00,}},
- {0x890F,2,{0xD1,0x85,0x00,0x00,}},
- {0x8910,2,{0xBA,0xD6,0x00,0x00,}},
- {0x8911,2,{0xD1,0x86,0x00,0x00,}},
- {0x8912,2,{0xB0,0xFD,0x00,0x00,}},
- {0x8913,2,{0xF1,0xD9,0x00,0x00,}},
- {0x8914,2,{0xD1,0x87,0x00,0x00,}},
- {0x8915,2,{0xD1,0x88,0x00,0x00,}},
- {0x8916,2,{0xD1,0x89,0x00,0x00,}},
- {0x8917,2,{0xD1,0x8A,0x00,0x00,}},
- {0x8918,2,{0xD1,0x8B,0x00,0x00,}},
- {0x8919,2,{0xF1,0xD8,0x00,0x00,}},
- {0x891A,2,{0xF1,0xD2,0x00,0x00,}},
- {0x891B,2,{0xF1,0xDA,0x00,0x00,}},
- {0x891C,2,{0xD1,0x8C,0x00,0x00,}},
- {0x891D,2,{0xD1,0x8D,0x00,0x00,}},
- {0x891E,2,{0xD1,0x8E,0x00,0x00,}},
- {0x891F,2,{0xD1,0x8F,0x00,0x00,}},
- {0x8920,2,{0xD1,0x90,0x00,0x00,}},
- {0x8921,2,{0xF1,0xD7,0x00,0x00,}},
- {0x8922,2,{0xD1,0x91,0x00,0x00,}},
- {0x8923,2,{0xD1,0x92,0x00,0x00,}},
- {0x8924,2,{0xD1,0x93,0x00,0x00,}},
- {0x8925,2,{0xC8,0xEC,0x00,0x00,}},
- {0x8926,2,{0xD1,0x94,0x00,0x00,}},
- {0x8927,2,{0xD1,0x95,0x00,0x00,}},
- {0x8928,2,{0xD1,0x96,0x00,0x00,}},
- {0x8929,2,{0xD1,0x97,0x00,0x00,}},
- {0x892A,2,{0xCD,0xCA,0x00,0x00,}},
- {0x892B,2,{0xF1,0xDD,0x00,0x00,}},
- {0x892C,2,{0xD1,0x98,0x00,0x00,}},
- {0x892D,2,{0xD1,0x99,0x00,0x00,}},
- {0x892E,2,{0xD1,0x9A,0x00,0x00,}},
- {0x892F,2,{0xD1,0x9B,0x00,0x00,}},
- {0x8930,2,{0xE5,0xBD,0x00,0x00,}},
- {0x8931,2,{0xD1,0x9C,0x00,0x00,}},
- {0x8932,2,{0xD1,0x9D,0x00,0x00,}},
- {0x8933,2,{0xD1,0x9E,0x00,0x00,}},
- {0x8934,2,{0xF1,0xDC,0x00,0x00,}},
- {0x8935,2,{0xD1,0x9F,0x00,0x00,}},
- {0x8936,2,{0xF1,0xDE,0x00,0x00,}},
- {0x8937,2,{0xD1,0xA0,0x00,0x00,}},
- {0x8938,2,{0xD2,0x40,0x00,0x00,}},
- {0x8939,2,{0xD2,0x41,0x00,0x00,}},
- {0x893A,2,{0xD2,0x42,0x00,0x00,}},
- {0x893B,2,{0xD2,0x43,0x00,0x00,}},
- {0x893C,2,{0xD2,0x44,0x00,0x00,}},
- {0x893D,2,{0xD2,0x45,0x00,0x00,}},
- {0x893E,2,{0xD2,0x46,0x00,0x00,}},
- {0x893F,2,{0xD2,0x47,0x00,0x00,}},
- {0x8940,2,{0xD2,0x48,0x00,0x00,}},
- {0x8941,2,{0xF1,0xDF,0x00,0x00,}},
- {0x8942,2,{0xD2,0x49,0x00,0x00,}},
- {0x8943,2,{0xD2,0x4A,0x00,0x00,}},
- {0x8944,2,{0xCF,0xE5,0x00,0x00,}},
- {0x8945,2,{0xD2,0x4B,0x00,0x00,}},
- {0x8946,2,{0xD2,0x4C,0x00,0x00,}},
- {0x8947,2,{0xD2,0x4D,0x00,0x00,}},
- {0x8948,2,{0xD2,0x4E,0x00,0x00,}},
- {0x8949,2,{0xD2,0x4F,0x00,0x00,}},
- {0x894A,2,{0xD2,0x50,0x00,0x00,}},
- {0x894B,2,{0xD2,0x51,0x00,0x00,}},
- {0x894C,2,{0xD2,0x52,0x00,0x00,}},
- {0x894D,2,{0xD2,0x53,0x00,0x00,}},
- {0x894E,2,{0xD2,0x54,0x00,0x00,}},
- {0x894F,2,{0xD2,0x55,0x00,0x00,}},
- {0x8950,2,{0xD2,0x56,0x00,0x00,}},
- {0x8951,2,{0xD2,0x57,0x00,0x00,}},
- {0x8952,2,{0xD2,0x58,0x00,0x00,}},
- {0x8953,2,{0xD2,0x59,0x00,0x00,}},
- {0x8954,2,{0xD2,0x5A,0x00,0x00,}},
- {0x8955,2,{0xD2,0x5B,0x00,0x00,}},
- {0x8956,2,{0xD2,0x5C,0x00,0x00,}},
- {0x8957,2,{0xD2,0x5D,0x00,0x00,}},
- {0x8958,2,{0xD2,0x5E,0x00,0x00,}},
- {0x8959,2,{0xD2,0x5F,0x00,0x00,}},
- {0x895A,2,{0xD2,0x60,0x00,0x00,}},
- {0x895B,2,{0xD2,0x61,0x00,0x00,}},
- {0x895C,2,{0xD2,0x62,0x00,0x00,}},
- {0x895D,2,{0xD2,0x63,0x00,0x00,}},
- {0x895E,2,{0xF4,0xC5,0x00,0x00,}},
- {0x895F,2,{0xBD,0xF3,0x00,0x00,}},
- {0x8960,2,{0xD2,0x64,0x00,0x00,}},
- {0x8961,2,{0xD2,0x65,0x00,0x00,}},
- {0x8962,2,{0xD2,0x66,0x00,0x00,}},
- {0x8963,2,{0xD2,0x67,0x00,0x00,}},
- {0x8964,2,{0xD2,0x68,0x00,0x00,}},
- {0x8965,2,{0xD2,0x69,0x00,0x00,}},
- {0x8966,2,{0xF1,0xE0,0x00,0x00,}},
- {0x8967,2,{0xD2,0x6A,0x00,0x00,}},
- {0x8968,2,{0xD2,0x6B,0x00,0x00,}},
- {0x8969,2,{0xD2,0x6C,0x00,0x00,}},
- {0x896A,2,{0xD2,0x6D,0x00,0x00,}},
- {0x896B,2,{0xD2,0x6E,0x00,0x00,}},
- {0x896C,2,{0xD2,0x6F,0x00,0x00,}},
- {0x896D,2,{0xD2,0x70,0x00,0x00,}},
- {0x896E,2,{0xD2,0x71,0x00,0x00,}},
- {0x896F,2,{0xD2,0x72,0x00,0x00,}},
- {0x8970,2,{0xD2,0x73,0x00,0x00,}},
- {0x8971,2,{0xD2,0x74,0x00,0x00,}},
- {0x8972,2,{0xD2,0x75,0x00,0x00,}},
- {0x8973,2,{0xD2,0x76,0x00,0x00,}},
- {0x8974,2,{0xD2,0x77,0x00,0x00,}},
- {0x8975,2,{0xD2,0x78,0x00,0x00,}},
- {0x8976,2,{0xD2,0x79,0x00,0x00,}},
- {0x8977,2,{0xD2,0x7A,0x00,0x00,}},
- {0x8978,2,{0xD2,0x7B,0x00,0x00,}},
- {0x8979,2,{0xD2,0x7C,0x00,0x00,}},
- {0x897A,2,{0xD2,0x7D,0x00,0x00,}},
- {0x897B,2,{0xF1,0xE1,0x00,0x00,}},
- {0x897C,2,{0xD2,0x7E,0x00,0x00,}},
- {0x897D,2,{0xD2,0x80,0x00,0x00,}},
- {0x897E,2,{0xD2,0x81,0x00,0x00,}},
- {0x897F,2,{0xCE,0xF7,0x00,0x00,}},
- {0x8980,2,{0xD2,0x82,0x00,0x00,}},
- {0x8981,2,{0xD2,0xAA,0x00,0x00,}},
- {0x8982,2,{0xD2,0x83,0x00,0x00,}},
- {0x8983,2,{0xF1,0xFB,0x00,0x00,}},
- {0x8984,2,{0xD2,0x84,0x00,0x00,}},
- {0x8985,2,{0xD2,0x85,0x00,0x00,}},
- {0x8986,2,{0xB8,0xB2,0x00,0x00,}},
- {0x8987,2,{0xD2,0x86,0x00,0x00,}},
- {0x8988,2,{0xD2,0x87,0x00,0x00,}},
- {0x8989,2,{0xD2,0x88,0x00,0x00,}},
- {0x898A,2,{0xD2,0x89,0x00,0x00,}},
- {0x898B,2,{0xD2,0x8A,0x00,0x00,}},
- {0x898C,2,{0xD2,0x8B,0x00,0x00,}},
- {0x898D,2,{0xD2,0x8C,0x00,0x00,}},
- {0x898E,2,{0xD2,0x8D,0x00,0x00,}},
- {0x898F,2,{0xD2,0x8E,0x00,0x00,}},
- {0x8990,2,{0xD2,0x8F,0x00,0x00,}},
- {0x8991,2,{0xD2,0x90,0x00,0x00,}},
- {0x8992,2,{0xD2,0x91,0x00,0x00,}},
- {0x8993,2,{0xD2,0x92,0x00,0x00,}},
- {0x8994,2,{0xD2,0x93,0x00,0x00,}},
- {0x8995,2,{0xD2,0x94,0x00,0x00,}},
- {0x8996,2,{0xD2,0x95,0x00,0x00,}},
- {0x8997,2,{0xD2,0x96,0x00,0x00,}},
- {0x8998,2,{0xD2,0x97,0x00,0x00,}},
- {0x8999,2,{0xD2,0x98,0x00,0x00,}},
- {0x899A,2,{0xD2,0x99,0x00,0x00,}},
- {0x899B,2,{0xD2,0x9A,0x00,0x00,}},
- {0x899C,2,{0xD2,0x9B,0x00,0x00,}},
- {0x899D,2,{0xD2,0x9C,0x00,0x00,}},
- {0x899E,2,{0xD2,0x9D,0x00,0x00,}},
- {0x899F,2,{0xD2,0x9E,0x00,0x00,}},
- {0x89A0,2,{0xD2,0x9F,0x00,0x00,}},
- {0x89A1,2,{0xD2,0xA0,0x00,0x00,}},
- {0x89A2,2,{0xD3,0x40,0x00,0x00,}},
- {0x89A3,2,{0xD3,0x41,0x00,0x00,}},
- {0x89A4,2,{0xD3,0x42,0x00,0x00,}},
- {0x89A5,2,{0xD3,0x43,0x00,0x00,}},
- {0x89A6,2,{0xD3,0x44,0x00,0x00,}},
- {0x89A7,2,{0xD3,0x45,0x00,0x00,}},
- {0x89A8,2,{0xD3,0x46,0x00,0x00,}},
- {0x89A9,2,{0xD3,0x47,0x00,0x00,}},
- {0x89AA,2,{0xD3,0x48,0x00,0x00,}},
- {0x89AB,2,{0xD3,0x49,0x00,0x00,}},
- {0x89AC,2,{0xD3,0x4A,0x00,0x00,}},
- {0x89AD,2,{0xD3,0x4B,0x00,0x00,}},
- {0x89AE,2,{0xD3,0x4C,0x00,0x00,}},
- {0x89AF,2,{0xD3,0x4D,0x00,0x00,}},
- {0x89B0,2,{0xD3,0x4E,0x00,0x00,}},
- {0x89B1,2,{0xD3,0x4F,0x00,0x00,}},
- {0x89B2,2,{0xD3,0x50,0x00,0x00,}},
- {0x89B3,2,{0xD3,0x51,0x00,0x00,}},
- {0x89B4,2,{0xD3,0x52,0x00,0x00,}},
- {0x89B5,2,{0xD3,0x53,0x00,0x00,}},
- {0x89B6,2,{0xD3,0x54,0x00,0x00,}},
- {0x89B7,2,{0xD3,0x55,0x00,0x00,}},
- {0x89B8,2,{0xD3,0x56,0x00,0x00,}},
- {0x89B9,2,{0xD3,0x57,0x00,0x00,}},
- {0x89BA,2,{0xD3,0x58,0x00,0x00,}},
- {0x89BB,2,{0xD3,0x59,0x00,0x00,}},
- {0x89BC,2,{0xD3,0x5A,0x00,0x00,}},
- {0x89BD,2,{0xD3,0x5B,0x00,0x00,}},
- {0x89BE,2,{0xD3,0x5C,0x00,0x00,}},
- {0x89BF,2,{0xD3,0x5D,0x00,0x00,}},
- {0x89C0,2,{0xD3,0x5E,0x00,0x00,}},
- {0x89C1,2,{0xBC,0xFB,0x00,0x00,}},
- {0x89C2,2,{0xB9,0xDB,0x00,0x00,}},
- {0x89C3,2,{0xD3,0x5F,0x00,0x00,}},
- {0x89C4,2,{0xB9,0xE6,0x00,0x00,}},
- {0x89C5,2,{0xC3,0xD9,0x00,0x00,}},
- {0x89C6,2,{0xCA,0xD3,0x00,0x00,}},
- {0x89C7,2,{0xEA,0xE8,0x00,0x00,}},
- {0x89C8,2,{0xC0,0xC0,0x00,0x00,}},
- {0x89C9,2,{0xBE,0xF5,0x00,0x00,}},
- {0x89CA,2,{0xEA,0xE9,0x00,0x00,}},
- {0x89CB,2,{0xEA,0xEA,0x00,0x00,}},
- {0x89CC,2,{0xEA,0xEB,0x00,0x00,}},
- {0x89CD,2,{0xD3,0x60,0x00,0x00,}},
- {0x89CE,2,{0xEA,0xEC,0x00,0x00,}},
- {0x89CF,2,{0xEA,0xED,0x00,0x00,}},
- {0x89D0,2,{0xEA,0xEE,0x00,0x00,}},
- {0x89D1,2,{0xEA,0xEF,0x00,0x00,}},
- {0x89D2,2,{0xBD,0xC7,0x00,0x00,}},
- {0x89D3,2,{0xD3,0x61,0x00,0x00,}},
- {0x89D4,2,{0xD3,0x62,0x00,0x00,}},
- {0x89D5,2,{0xD3,0x63,0x00,0x00,}},
- {0x89D6,2,{0xF5,0xFB,0x00,0x00,}},
- {0x89D7,2,{0xD3,0x64,0x00,0x00,}},
- {0x89D8,2,{0xD3,0x65,0x00,0x00,}},
- {0x89D9,2,{0xD3,0x66,0x00,0x00,}},
- {0x89DA,2,{0xF5,0xFD,0x00,0x00,}},
- {0x89DB,2,{0xD3,0x67,0x00,0x00,}},
- {0x89DC,2,{0xF5,0xFE,0x00,0x00,}},
- {0x89DD,2,{0xD3,0x68,0x00,0x00,}},
- {0x89DE,2,{0xF5,0xFC,0x00,0x00,}},
- {0x89DF,2,{0xD3,0x69,0x00,0x00,}},
- {0x89E0,2,{0xD3,0x6A,0x00,0x00,}},
- {0x89E1,2,{0xD3,0x6B,0x00,0x00,}},
- {0x89E2,2,{0xD3,0x6C,0x00,0x00,}},
- {0x89E3,2,{0xBD,0xE2,0x00,0x00,}},
- {0x89E4,2,{0xD3,0x6D,0x00,0x00,}},
- {0x89E5,2,{0xF6,0xA1,0x00,0x00,}},
- {0x89E6,2,{0xB4,0xA5,0x00,0x00,}},
- {0x89E7,2,{0xD3,0x6E,0x00,0x00,}},
- {0x89E8,2,{0xD3,0x6F,0x00,0x00,}},
- {0x89E9,2,{0xD3,0x70,0x00,0x00,}},
- {0x89EA,2,{0xD3,0x71,0x00,0x00,}},
- {0x89EB,2,{0xF6,0xA2,0x00,0x00,}},
- {0x89EC,2,{0xD3,0x72,0x00,0x00,}},
- {0x89ED,2,{0xD3,0x73,0x00,0x00,}},
- {0x89EE,2,{0xD3,0x74,0x00,0x00,}},
- {0x89EF,2,{0xF6,0xA3,0x00,0x00,}},
- {0x89F0,2,{0xD3,0x75,0x00,0x00,}},
- {0x89F1,2,{0xD3,0x76,0x00,0x00,}},
- {0x89F2,2,{0xD3,0x77,0x00,0x00,}},
- {0x89F3,2,{0xEC,0xB2,0x00,0x00,}},
- {0x89F4,2,{0xD3,0x78,0x00,0x00,}},
- {0x89F5,2,{0xD3,0x79,0x00,0x00,}},
- {0x89F6,2,{0xD3,0x7A,0x00,0x00,}},
- {0x89F7,2,{0xD3,0x7B,0x00,0x00,}},
- {0x89F8,2,{0xD3,0x7C,0x00,0x00,}},
- {0x89F9,2,{0xD3,0x7D,0x00,0x00,}},
- {0x89FA,2,{0xD3,0x7E,0x00,0x00,}},
- {0x89FB,2,{0xD3,0x80,0x00,0x00,}},
- {0x89FC,2,{0xD3,0x81,0x00,0x00,}},
- {0x89FD,2,{0xD3,0x82,0x00,0x00,}},
- {0x89FE,2,{0xD3,0x83,0x00,0x00,}},
- {0x89FF,2,{0xD3,0x84,0x00,0x00,}},
- {0x8A00,2,{0xD1,0xD4,0x00,0x00,}},
- {0x8A01,2,{0xD3,0x85,0x00,0x00,}},
- {0x8A02,2,{0xD3,0x86,0x00,0x00,}},
- {0x8A03,2,{0xD3,0x87,0x00,0x00,}},
- {0x8A04,2,{0xD3,0x88,0x00,0x00,}},
- {0x8A05,2,{0xD3,0x89,0x00,0x00,}},
- {0x8A06,2,{0xD3,0x8A,0x00,0x00,}},
- {0x8A07,2,{0xD9,0xEA,0x00,0x00,}},
- {0x8A08,2,{0xD3,0x8B,0x00,0x00,}},
- {0x8A09,2,{0xD3,0x8C,0x00,0x00,}},
- {0x8A0A,2,{0xD3,0x8D,0x00,0x00,}},
- {0x8A0B,2,{0xD3,0x8E,0x00,0x00,}},
- {0x8A0C,2,{0xD3,0x8F,0x00,0x00,}},
- {0x8A0D,2,{0xD3,0x90,0x00,0x00,}},
- {0x8A0E,2,{0xD3,0x91,0x00,0x00,}},
- {0x8A0F,2,{0xD3,0x92,0x00,0x00,}},
- {0x8A10,2,{0xD3,0x93,0x00,0x00,}},
- {0x8A11,2,{0xD3,0x94,0x00,0x00,}},
- {0x8A12,2,{0xD3,0x95,0x00,0x00,}},
- {0x8A13,2,{0xD3,0x96,0x00,0x00,}},
- {0x8A14,2,{0xD3,0x97,0x00,0x00,}},
- {0x8A15,2,{0xD3,0x98,0x00,0x00,}},
- {0x8A16,2,{0xD3,0x99,0x00,0x00,}},
- {0x8A17,2,{0xD3,0x9A,0x00,0x00,}},
- {0x8A18,2,{0xD3,0x9B,0x00,0x00,}},
- {0x8A19,2,{0xD3,0x9C,0x00,0x00,}},
- {0x8A1A,2,{0xD3,0x9D,0x00,0x00,}},
- {0x8A1B,2,{0xD3,0x9E,0x00,0x00,}},
- {0x8A1C,2,{0xD3,0x9F,0x00,0x00,}},
- {0x8A1D,2,{0xD3,0xA0,0x00,0x00,}},
- {0x8A1E,2,{0xD4,0x40,0x00,0x00,}},
- {0x8A1F,2,{0xD4,0x41,0x00,0x00,}},
- {0x8A20,2,{0xD4,0x42,0x00,0x00,}},
- {0x8A21,2,{0xD4,0x43,0x00,0x00,}},
- {0x8A22,2,{0xD4,0x44,0x00,0x00,}},
- {0x8A23,2,{0xD4,0x45,0x00,0x00,}},
- {0x8A24,2,{0xD4,0x46,0x00,0x00,}},
- {0x8A25,2,{0xD4,0x47,0x00,0x00,}},
- {0x8A26,2,{0xD4,0x48,0x00,0x00,}},
- {0x8A27,2,{0xD4,0x49,0x00,0x00,}},
- {0x8A28,2,{0xD4,0x4A,0x00,0x00,}},
- {0x8A29,2,{0xD4,0x4B,0x00,0x00,}},
- {0x8A2A,2,{0xD4,0x4C,0x00,0x00,}},
- {0x8A2B,2,{0xD4,0x4D,0x00,0x00,}},
- {0x8A2C,2,{0xD4,0x4E,0x00,0x00,}},
- {0x8A2D,2,{0xD4,0x4F,0x00,0x00,}},
- {0x8A2E,2,{0xD4,0x50,0x00,0x00,}},
- {0x8A2F,2,{0xD4,0x51,0x00,0x00,}},
- {0x8A30,2,{0xD4,0x52,0x00,0x00,}},
- {0x8A31,2,{0xD4,0x53,0x00,0x00,}},
- {0x8A32,2,{0xD4,0x54,0x00,0x00,}},
- {0x8A33,2,{0xD4,0x55,0x00,0x00,}},
- {0x8A34,2,{0xD4,0x56,0x00,0x00,}},
- {0x8A35,2,{0xD4,0x57,0x00,0x00,}},
- {0x8A36,2,{0xD4,0x58,0x00,0x00,}},
- {0x8A37,2,{0xD4,0x59,0x00,0x00,}},
- {0x8A38,2,{0xD4,0x5A,0x00,0x00,}},
- {0x8A39,2,{0xD4,0x5B,0x00,0x00,}},
- {0x8A3A,2,{0xD4,0x5C,0x00,0x00,}},
- {0x8A3B,2,{0xD4,0x5D,0x00,0x00,}},
- {0x8A3C,2,{0xD4,0x5E,0x00,0x00,}},
- {0x8A3D,2,{0xD4,0x5F,0x00,0x00,}},
- {0x8A3E,2,{0xF6,0xA4,0x00,0x00,}},
- {0x8A3F,2,{0xD4,0x60,0x00,0x00,}},
- {0x8A40,2,{0xD4,0x61,0x00,0x00,}},
- {0x8A41,2,{0xD4,0x62,0x00,0x00,}},
- {0x8A42,2,{0xD4,0x63,0x00,0x00,}},
- {0x8A43,2,{0xD4,0x64,0x00,0x00,}},
- {0x8A44,2,{0xD4,0x65,0x00,0x00,}},
- {0x8A45,2,{0xD4,0x66,0x00,0x00,}},
- {0x8A46,2,{0xD4,0x67,0x00,0x00,}},
- {0x8A47,2,{0xD4,0x68,0x00,0x00,}},
- {0x8A48,2,{0xEE,0xBA,0x00,0x00,}},
- {0x8A49,2,{0xD4,0x69,0x00,0x00,}},
- {0x8A4A,2,{0xD4,0x6A,0x00,0x00,}},
- {0x8A4B,2,{0xD4,0x6B,0x00,0x00,}},
- {0x8A4C,2,{0xD4,0x6C,0x00,0x00,}},
- {0x8A4D,2,{0xD4,0x6D,0x00,0x00,}},
- {0x8A4E,2,{0xD4,0x6E,0x00,0x00,}},
- {0x8A4F,2,{0xD4,0x6F,0x00,0x00,}},
- {0x8A50,2,{0xD4,0x70,0x00,0x00,}},
- {0x8A51,2,{0xD4,0x71,0x00,0x00,}},
- {0x8A52,2,{0xD4,0x72,0x00,0x00,}},
- {0x8A53,2,{0xD4,0x73,0x00,0x00,}},
- {0x8A54,2,{0xD4,0x74,0x00,0x00,}},
- {0x8A55,2,{0xD4,0x75,0x00,0x00,}},
- {0x8A56,2,{0xD4,0x76,0x00,0x00,}},
- {0x8A57,2,{0xD4,0x77,0x00,0x00,}},
- {0x8A58,2,{0xD4,0x78,0x00,0x00,}},
- {0x8A59,2,{0xD4,0x79,0x00,0x00,}},
- {0x8A5A,2,{0xD4,0x7A,0x00,0x00,}},
- {0x8A5B,2,{0xD4,0x7B,0x00,0x00,}},
- {0x8A5C,2,{0xD4,0x7C,0x00,0x00,}},
- {0x8A5D,2,{0xD4,0x7D,0x00,0x00,}},
- {0x8A5E,2,{0xD4,0x7E,0x00,0x00,}},
- {0x8A5F,2,{0xD4,0x80,0x00,0x00,}},
- {0x8A60,2,{0xD4,0x81,0x00,0x00,}},
- {0x8A61,2,{0xD4,0x82,0x00,0x00,}},
- {0x8A62,2,{0xD4,0x83,0x00,0x00,}},
- {0x8A63,2,{0xD4,0x84,0x00,0x00,}},
- {0x8A64,2,{0xD4,0x85,0x00,0x00,}},
- {0x8A65,2,{0xD4,0x86,0x00,0x00,}},
- {0x8A66,2,{0xD4,0x87,0x00,0x00,}},
- {0x8A67,2,{0xD4,0x88,0x00,0x00,}},
- {0x8A68,2,{0xD4,0x89,0x00,0x00,}},
- {0x8A69,2,{0xD4,0x8A,0x00,0x00,}},
- {0x8A6A,2,{0xD4,0x8B,0x00,0x00,}},
- {0x8A6B,2,{0xD4,0x8C,0x00,0x00,}},
- {0x8A6C,2,{0xD4,0x8D,0x00,0x00,}},
- {0x8A6D,2,{0xD4,0x8E,0x00,0x00,}},
- {0x8A6E,2,{0xD4,0x8F,0x00,0x00,}},
- {0x8A6F,2,{0xD4,0x90,0x00,0x00,}},
- {0x8A70,2,{0xD4,0x91,0x00,0x00,}},
- {0x8A71,2,{0xD4,0x92,0x00,0x00,}},
- {0x8A72,2,{0xD4,0x93,0x00,0x00,}},
- {0x8A73,2,{0xD4,0x94,0x00,0x00,}},
- {0x8A74,2,{0xD4,0x95,0x00,0x00,}},
- {0x8A75,2,{0xD4,0x96,0x00,0x00,}},
- {0x8A76,2,{0xD4,0x97,0x00,0x00,}},
- {0x8A77,2,{0xD4,0x98,0x00,0x00,}},
- {0x8A78,2,{0xD4,0x99,0x00,0x00,}},
- {0x8A79,2,{0xD5,0xB2,0x00,0x00,}},
- {0x8A7A,2,{0xD4,0x9A,0x00,0x00,}},
- {0x8A7B,2,{0xD4,0x9B,0x00,0x00,}},
- {0x8A7C,2,{0xD4,0x9C,0x00,0x00,}},
- {0x8A7D,2,{0xD4,0x9D,0x00,0x00,}},
- {0x8A7E,2,{0xD4,0x9E,0x00,0x00,}},
- {0x8A7F,2,{0xD4,0x9F,0x00,0x00,}},
- {0x8A80,2,{0xD4,0xA0,0x00,0x00,}},
- {0x8A81,2,{0xD5,0x40,0x00,0x00,}},
- {0x8A82,2,{0xD5,0x41,0x00,0x00,}},
- {0x8A83,2,{0xD5,0x42,0x00,0x00,}},
- {0x8A84,2,{0xD5,0x43,0x00,0x00,}},
- {0x8A85,2,{0xD5,0x44,0x00,0x00,}},
- {0x8A86,2,{0xD5,0x45,0x00,0x00,}},
- {0x8A87,2,{0xD5,0x46,0x00,0x00,}},
- {0x8A88,2,{0xD5,0x47,0x00,0x00,}},
- {0x8A89,2,{0xD3,0xFE,0x00,0x00,}},
- {0x8A8A,2,{0xCC,0xDC,0x00,0x00,}},
- {0x8A8B,2,{0xD5,0x48,0x00,0x00,}},
- {0x8A8C,2,{0xD5,0x49,0x00,0x00,}},
- {0x8A8D,2,{0xD5,0x4A,0x00,0x00,}},
- {0x8A8E,2,{0xD5,0x4B,0x00,0x00,}},
- {0x8A8F,2,{0xD5,0x4C,0x00,0x00,}},
- {0x8A90,2,{0xD5,0x4D,0x00,0x00,}},
- {0x8A91,2,{0xD5,0x4E,0x00,0x00,}},
- {0x8A92,2,{0xD5,0x4F,0x00,0x00,}},
- {0x8A93,2,{0xCA,0xC4,0x00,0x00,}},
- {0x8A94,2,{0xD5,0x50,0x00,0x00,}},
- {0x8A95,2,{0xD5,0x51,0x00,0x00,}},
- {0x8A96,2,{0xD5,0x52,0x00,0x00,}},
- {0x8A97,2,{0xD5,0x53,0x00,0x00,}},
- {0x8A98,2,{0xD5,0x54,0x00,0x00,}},
- {0x8A99,2,{0xD5,0x55,0x00,0x00,}},
- {0x8A9A,2,{0xD5,0x56,0x00,0x00,}},
- {0x8A9B,2,{0xD5,0x57,0x00,0x00,}},
- {0x8A9C,2,{0xD5,0x58,0x00,0x00,}},
- {0x8A9D,2,{0xD5,0x59,0x00,0x00,}},
- {0x8A9E,2,{0xD5,0x5A,0x00,0x00,}},
- {0x8A9F,2,{0xD5,0x5B,0x00,0x00,}},
- {0x8AA0,2,{0xD5,0x5C,0x00,0x00,}},
- {0x8AA1,2,{0xD5,0x5D,0x00,0x00,}},
- {0x8AA2,2,{0xD5,0x5E,0x00,0x00,}},
- {0x8AA3,2,{0xD5,0x5F,0x00,0x00,}},
- {0x8AA4,2,{0xD5,0x60,0x00,0x00,}},
- {0x8AA5,2,{0xD5,0x61,0x00,0x00,}},
- {0x8AA6,2,{0xD5,0x62,0x00,0x00,}},
- {0x8AA7,2,{0xD5,0x63,0x00,0x00,}},
- {0x8AA8,2,{0xD5,0x64,0x00,0x00,}},
- {0x8AA9,2,{0xD5,0x65,0x00,0x00,}},
- {0x8AAA,2,{0xD5,0x66,0x00,0x00,}},
- {0x8AAB,2,{0xD5,0x67,0x00,0x00,}},
- {0x8AAC,2,{0xD5,0x68,0x00,0x00,}},
- {0x8AAD,2,{0xD5,0x69,0x00,0x00,}},
- {0x8AAE,2,{0xD5,0x6A,0x00,0x00,}},
- {0x8AAF,2,{0xD5,0x6B,0x00,0x00,}},
- {0x8AB0,2,{0xD5,0x6C,0x00,0x00,}},
- {0x8AB1,2,{0xD5,0x6D,0x00,0x00,}},
- {0x8AB2,2,{0xD5,0x6E,0x00,0x00,}},
- {0x8AB3,2,{0xD5,0x6F,0x00,0x00,}},
- {0x8AB4,2,{0xD5,0x70,0x00,0x00,}},
- {0x8AB5,2,{0xD5,0x71,0x00,0x00,}},
- {0x8AB6,2,{0xD5,0x72,0x00,0x00,}},
- {0x8AB7,2,{0xD5,0x73,0x00,0x00,}},
- {0x8AB8,2,{0xD5,0x74,0x00,0x00,}},
- {0x8AB9,2,{0xD5,0x75,0x00,0x00,}},
- {0x8ABA,2,{0xD5,0x76,0x00,0x00,}},
- {0x8ABB,2,{0xD5,0x77,0x00,0x00,}},
- {0x8ABC,2,{0xD5,0x78,0x00,0x00,}},
- {0x8ABD,2,{0xD5,0x79,0x00,0x00,}},
- {0x8ABE,2,{0xD5,0x7A,0x00,0x00,}},
- {0x8ABF,2,{0xD5,0x7B,0x00,0x00,}},
- {0x8AC0,2,{0xD5,0x7C,0x00,0x00,}},
- {0x8AC1,2,{0xD5,0x7D,0x00,0x00,}},
- {0x8AC2,2,{0xD5,0x7E,0x00,0x00,}},
- {0x8AC3,2,{0xD5,0x80,0x00,0x00,}},
- {0x8AC4,2,{0xD5,0x81,0x00,0x00,}},
- {0x8AC5,2,{0xD5,0x82,0x00,0x00,}},
- {0x8AC6,2,{0xD5,0x83,0x00,0x00,}},
- {0x8AC7,2,{0xD5,0x84,0x00,0x00,}},
- {0x8AC8,2,{0xD5,0x85,0x00,0x00,}},
- {0x8AC9,2,{0xD5,0x86,0x00,0x00,}},
- {0x8ACA,2,{0xD5,0x87,0x00,0x00,}},
- {0x8ACB,2,{0xD5,0x88,0x00,0x00,}},
- {0x8ACC,2,{0xD5,0x89,0x00,0x00,}},
- {0x8ACD,2,{0xD5,0x8A,0x00,0x00,}},
- {0x8ACE,2,{0xD5,0x8B,0x00,0x00,}},
- {0x8ACF,2,{0xD5,0x8C,0x00,0x00,}},
- {0x8AD0,2,{0xD5,0x8D,0x00,0x00,}},
- {0x8AD1,2,{0xD5,0x8E,0x00,0x00,}},
- {0x8AD2,2,{0xD5,0x8F,0x00,0x00,}},
- {0x8AD3,2,{0xD5,0x90,0x00,0x00,}},
- {0x8AD4,2,{0xD5,0x91,0x00,0x00,}},
- {0x8AD5,2,{0xD5,0x92,0x00,0x00,}},
- {0x8AD6,2,{0xD5,0x93,0x00,0x00,}},
- {0x8AD7,2,{0xD5,0x94,0x00,0x00,}},
- {0x8AD8,2,{0xD5,0x95,0x00,0x00,}},
- {0x8AD9,2,{0xD5,0x96,0x00,0x00,}},
- {0x8ADA,2,{0xD5,0x97,0x00,0x00,}},
- {0x8ADB,2,{0xD5,0x98,0x00,0x00,}},
- {0x8ADC,2,{0xD5,0x99,0x00,0x00,}},
- {0x8ADD,2,{0xD5,0x9A,0x00,0x00,}},
- {0x8ADE,2,{0xD5,0x9B,0x00,0x00,}},
- {0x8ADF,2,{0xD5,0x9C,0x00,0x00,}},
- {0x8AE0,2,{0xD5,0x9D,0x00,0x00,}},
- {0x8AE1,2,{0xD5,0x9E,0x00,0x00,}},
- {0x8AE2,2,{0xD5,0x9F,0x00,0x00,}},
- {0x8AE3,2,{0xD5,0xA0,0x00,0x00,}},
- {0x8AE4,2,{0xD6,0x40,0x00,0x00,}},
- {0x8AE5,2,{0xD6,0x41,0x00,0x00,}},
- {0x8AE6,2,{0xD6,0x42,0x00,0x00,}},
- {0x8AE7,2,{0xD6,0x43,0x00,0x00,}},
- {0x8AE8,2,{0xD6,0x44,0x00,0x00,}},
- {0x8AE9,2,{0xD6,0x45,0x00,0x00,}},
- {0x8AEA,2,{0xD6,0x46,0x00,0x00,}},
- {0x8AEB,2,{0xD6,0x47,0x00,0x00,}},
- {0x8AEC,2,{0xD6,0x48,0x00,0x00,}},
- {0x8AED,2,{0xD6,0x49,0x00,0x00,}},
- {0x8AEE,2,{0xD6,0x4A,0x00,0x00,}},
- {0x8AEF,2,{0xD6,0x4B,0x00,0x00,}},
- {0x8AF0,2,{0xD6,0x4C,0x00,0x00,}},
- {0x8AF1,2,{0xD6,0x4D,0x00,0x00,}},
- {0x8AF2,2,{0xD6,0x4E,0x00,0x00,}},
- {0x8AF3,2,{0xD6,0x4F,0x00,0x00,}},
- {0x8AF4,2,{0xD6,0x50,0x00,0x00,}},
- {0x8AF5,2,{0xD6,0x51,0x00,0x00,}},
- {0x8AF6,2,{0xD6,0x52,0x00,0x00,}},
- {0x8AF7,2,{0xD6,0x53,0x00,0x00,}},
- {0x8AF8,2,{0xD6,0x54,0x00,0x00,}},
- {0x8AF9,2,{0xD6,0x55,0x00,0x00,}},
- {0x8AFA,2,{0xD6,0x56,0x00,0x00,}},
- {0x8AFB,2,{0xD6,0x57,0x00,0x00,}},
- {0x8AFC,2,{0xD6,0x58,0x00,0x00,}},
- {0x8AFD,2,{0xD6,0x59,0x00,0x00,}},
- {0x8AFE,2,{0xD6,0x5A,0x00,0x00,}},
- {0x8AFF,2,{0xD6,0x5B,0x00,0x00,}},
- {0x8B00,2,{0xD6,0x5C,0x00,0x00,}},
- {0x8B01,2,{0xD6,0x5D,0x00,0x00,}},
- {0x8B02,2,{0xD6,0x5E,0x00,0x00,}},
- {0x8B03,2,{0xD6,0x5F,0x00,0x00,}},
- {0x8B04,2,{0xD6,0x60,0x00,0x00,}},
- {0x8B05,2,{0xD6,0x61,0x00,0x00,}},
- {0x8B06,2,{0xD6,0x62,0x00,0x00,}},
- {0x8B07,2,{0xE5,0xC0,0x00,0x00,}},
- {0x8B08,2,{0xD6,0x63,0x00,0x00,}},
- {0x8B09,2,{0xD6,0x64,0x00,0x00,}},
- {0x8B0A,2,{0xD6,0x65,0x00,0x00,}},
- {0x8B0B,2,{0xD6,0x66,0x00,0x00,}},
- {0x8B0C,2,{0xD6,0x67,0x00,0x00,}},
- {0x8B0D,2,{0xD6,0x68,0x00,0x00,}},
- {0x8B0E,2,{0xD6,0x69,0x00,0x00,}},
- {0x8B0F,2,{0xD6,0x6A,0x00,0x00,}},
- {0x8B10,2,{0xD6,0x6B,0x00,0x00,}},
- {0x8B11,2,{0xD6,0x6C,0x00,0x00,}},
- {0x8B12,2,{0xD6,0x6D,0x00,0x00,}},
- {0x8B13,2,{0xD6,0x6E,0x00,0x00,}},
- {0x8B14,2,{0xD6,0x6F,0x00,0x00,}},
- {0x8B15,2,{0xD6,0x70,0x00,0x00,}},
- {0x8B16,2,{0xD6,0x71,0x00,0x00,}},
- {0x8B17,2,{0xD6,0x72,0x00,0x00,}},
- {0x8B18,2,{0xD6,0x73,0x00,0x00,}},
- {0x8B19,2,{0xD6,0x74,0x00,0x00,}},
- {0x8B1A,2,{0xD6,0x75,0x00,0x00,}},
- {0x8B1B,2,{0xD6,0x76,0x00,0x00,}},
- {0x8B1C,2,{0xD6,0x77,0x00,0x00,}},
- {0x8B1D,2,{0xD6,0x78,0x00,0x00,}},
- {0x8B1E,2,{0xD6,0x79,0x00,0x00,}},
- {0x8B1F,2,{0xD6,0x7A,0x00,0x00,}},
- {0x8B20,2,{0xD6,0x7B,0x00,0x00,}},
- {0x8B21,2,{0xD6,0x7C,0x00,0x00,}},
- {0x8B22,2,{0xD6,0x7D,0x00,0x00,}},
- {0x8B23,2,{0xD6,0x7E,0x00,0x00,}},
- {0x8B24,2,{0xD6,0x80,0x00,0x00,}},
- {0x8B25,2,{0xD6,0x81,0x00,0x00,}},
- {0x8B26,2,{0xF6,0xA5,0x00,0x00,}},
- {0x8B27,2,{0xD6,0x82,0x00,0x00,}},
- {0x8B28,2,{0xD6,0x83,0x00,0x00,}},
- {0x8B29,2,{0xD6,0x84,0x00,0x00,}},
- {0x8B2A,2,{0xD6,0x85,0x00,0x00,}},
- {0x8B2B,2,{0xD6,0x86,0x00,0x00,}},
- {0x8B2C,2,{0xD6,0x87,0x00,0x00,}},
- {0x8B2D,2,{0xD6,0x88,0x00,0x00,}},
- {0x8B2E,2,{0xD6,0x89,0x00,0x00,}},
- {0x8B2F,2,{0xD6,0x8A,0x00,0x00,}},
- {0x8B30,2,{0xD6,0x8B,0x00,0x00,}},
- {0x8B31,2,{0xD6,0x8C,0x00,0x00,}},
- {0x8B32,2,{0xD6,0x8D,0x00,0x00,}},
- {0x8B33,2,{0xD6,0x8E,0x00,0x00,}},
- {0x8B34,2,{0xD6,0x8F,0x00,0x00,}},
- {0x8B35,2,{0xD6,0x90,0x00,0x00,}},
- {0x8B36,2,{0xD6,0x91,0x00,0x00,}},
- {0x8B37,2,{0xD6,0x92,0x00,0x00,}},
- {0x8B38,2,{0xD6,0x93,0x00,0x00,}},
- {0x8B39,2,{0xD6,0x94,0x00,0x00,}},
- {0x8B3A,2,{0xD6,0x95,0x00,0x00,}},
- {0x8B3B,2,{0xD6,0x96,0x00,0x00,}},
- {0x8B3C,2,{0xD6,0x97,0x00,0x00,}},
- {0x8B3D,2,{0xD6,0x98,0x00,0x00,}},
- {0x8B3E,2,{0xD6,0x99,0x00,0x00,}},
- {0x8B3F,2,{0xD6,0x9A,0x00,0x00,}},
- {0x8B40,2,{0xD6,0x9B,0x00,0x00,}},
- {0x8B41,2,{0xD6,0x9C,0x00,0x00,}},
- {0x8B42,2,{0xD6,0x9D,0x00,0x00,}},
- {0x8B43,2,{0xD6,0x9E,0x00,0x00,}},
- {0x8B44,2,{0xD6,0x9F,0x00,0x00,}},
- {0x8B45,2,{0xD6,0xA0,0x00,0x00,}},
- {0x8B46,2,{0xD7,0x40,0x00,0x00,}},
- {0x8B47,2,{0xD7,0x41,0x00,0x00,}},
- {0x8B48,2,{0xD7,0x42,0x00,0x00,}},
- {0x8B49,2,{0xD7,0x43,0x00,0x00,}},
- {0x8B4A,2,{0xD7,0x44,0x00,0x00,}},
- {0x8B4B,2,{0xD7,0x45,0x00,0x00,}},
- {0x8B4C,2,{0xD7,0x46,0x00,0x00,}},
- {0x8B4D,2,{0xD7,0x47,0x00,0x00,}},
- {0x8B4E,2,{0xD7,0x48,0x00,0x00,}},
- {0x8B4F,2,{0xD7,0x49,0x00,0x00,}},
- {0x8B50,2,{0xD7,0x4A,0x00,0x00,}},
- {0x8B51,2,{0xD7,0x4B,0x00,0x00,}},
- {0x8B52,2,{0xD7,0x4C,0x00,0x00,}},
- {0x8B53,2,{0xD7,0x4D,0x00,0x00,}},
- {0x8B54,2,{0xD7,0x4E,0x00,0x00,}},
- {0x8B55,2,{0xD7,0x4F,0x00,0x00,}},
- {0x8B56,2,{0xD7,0x50,0x00,0x00,}},
- {0x8B57,2,{0xD7,0x51,0x00,0x00,}},
- {0x8B58,2,{0xD7,0x52,0x00,0x00,}},
- {0x8B59,2,{0xD7,0x53,0x00,0x00,}},
- {0x8B5A,2,{0xD7,0x54,0x00,0x00,}},
- {0x8B5B,2,{0xD7,0x55,0x00,0x00,}},
- {0x8B5C,2,{0xD7,0x56,0x00,0x00,}},
- {0x8B5D,2,{0xD7,0x57,0x00,0x00,}},
- {0x8B5E,2,{0xD7,0x58,0x00,0x00,}},
- {0x8B5F,2,{0xD7,0x59,0x00,0x00,}},
- {0x8B60,2,{0xD7,0x5A,0x00,0x00,}},
- {0x8B61,2,{0xD7,0x5B,0x00,0x00,}},
- {0x8B62,2,{0xD7,0x5C,0x00,0x00,}},
- {0x8B63,2,{0xD7,0x5D,0x00,0x00,}},
- {0x8B64,2,{0xD7,0x5E,0x00,0x00,}},
- {0x8B65,2,{0xD7,0x5F,0x00,0x00,}},
- {0x8B66,2,{0xBE,0xAF,0x00,0x00,}},
- {0x8B67,2,{0xD7,0x60,0x00,0x00,}},
- {0x8B68,2,{0xD7,0x61,0x00,0x00,}},
- {0x8B69,2,{0xD7,0x62,0x00,0x00,}},
- {0x8B6A,2,{0xD7,0x63,0x00,0x00,}},
- {0x8B6B,2,{0xD7,0x64,0x00,0x00,}},
- {0x8B6C,2,{0xC6,0xA9,0x00,0x00,}},
- {0x8B6D,2,{0xD7,0x65,0x00,0x00,}},
- {0x8B6E,2,{0xD7,0x66,0x00,0x00,}},
- {0x8B6F,2,{0xD7,0x67,0x00,0x00,}},
- {0x8B70,2,{0xD7,0x68,0x00,0x00,}},
- {0x8B71,2,{0xD7,0x69,0x00,0x00,}},
- {0x8B72,2,{0xD7,0x6A,0x00,0x00,}},
- {0x8B73,2,{0xD7,0x6B,0x00,0x00,}},
- {0x8B74,2,{0xD7,0x6C,0x00,0x00,}},
- {0x8B75,2,{0xD7,0x6D,0x00,0x00,}},
- {0x8B76,2,{0xD7,0x6E,0x00,0x00,}},
- {0x8B77,2,{0xD7,0x6F,0x00,0x00,}},
- {0x8B78,2,{0xD7,0x70,0x00,0x00,}},
- {0x8B79,2,{0xD7,0x71,0x00,0x00,}},
- {0x8B7A,2,{0xD7,0x72,0x00,0x00,}},
- {0x8B7B,2,{0xD7,0x73,0x00,0x00,}},
- {0x8B7C,2,{0xD7,0x74,0x00,0x00,}},
- {0x8B7D,2,{0xD7,0x75,0x00,0x00,}},
- {0x8B7E,2,{0xD7,0x76,0x00,0x00,}},
- {0x8B7F,2,{0xD7,0x77,0x00,0x00,}},
- {0x8B80,2,{0xD7,0x78,0x00,0x00,}},
- {0x8B81,2,{0xD7,0x79,0x00,0x00,}},
- {0x8B82,2,{0xD7,0x7A,0x00,0x00,}},
- {0x8B83,2,{0xD7,0x7B,0x00,0x00,}},
- {0x8B84,2,{0xD7,0x7C,0x00,0x00,}},
- {0x8B85,2,{0xD7,0x7D,0x00,0x00,}},
- {0x8B86,2,{0xD7,0x7E,0x00,0x00,}},
- {0x8B87,2,{0xD7,0x80,0x00,0x00,}},
- {0x8B88,2,{0xD7,0x81,0x00,0x00,}},
- {0x8B89,2,{0xD7,0x82,0x00,0x00,}},
- {0x8B8A,2,{0xD7,0x83,0x00,0x00,}},
- {0x8B8B,2,{0xD7,0x84,0x00,0x00,}},
- {0x8B8C,2,{0xD7,0x85,0x00,0x00,}},
- {0x8B8D,2,{0xD7,0x86,0x00,0x00,}},
- {0x8B8E,2,{0xD7,0x87,0x00,0x00,}},
- {0x8B8F,2,{0xD7,0x88,0x00,0x00,}},
- {0x8B90,2,{0xD7,0x89,0x00,0x00,}},
- {0x8B91,2,{0xD7,0x8A,0x00,0x00,}},
- {0x8B92,2,{0xD7,0x8B,0x00,0x00,}},
- {0x8B93,2,{0xD7,0x8C,0x00,0x00,}},
- {0x8B94,2,{0xD7,0x8D,0x00,0x00,}},
- {0x8B95,2,{0xD7,0x8E,0x00,0x00,}},
- {0x8B96,2,{0xD7,0x8F,0x00,0x00,}},
- {0x8B97,2,{0xD7,0x90,0x00,0x00,}},
- {0x8B98,2,{0xD7,0x91,0x00,0x00,}},
- {0x8B99,2,{0xD7,0x92,0x00,0x00,}},
- {0x8B9A,2,{0xD7,0x93,0x00,0x00,}},
- {0x8B9B,2,{0xD7,0x94,0x00,0x00,}},
- {0x8B9C,2,{0xD7,0x95,0x00,0x00,}},
- {0x8B9D,2,{0xD7,0x96,0x00,0x00,}},
- {0x8B9E,2,{0xD7,0x97,0x00,0x00,}},
- {0x8B9F,2,{0xD7,0x98,0x00,0x00,}},
- {0x8BA0,2,{0xDA,0xA5,0x00,0x00,}},
- {0x8BA1,2,{0xBC,0xC6,0x00,0x00,}},
- {0x8BA2,2,{0xB6,0xA9,0x00,0x00,}},
- {0x8BA3,2,{0xB8,0xBC,0x00,0x00,}},
- {0x8BA4,2,{0xC8,0xCF,0x00,0x00,}},
- {0x8BA5,2,{0xBC,0xA5,0x00,0x00,}},
- {0x8BA6,2,{0xDA,0xA6,0x00,0x00,}},
- {0x8BA7,2,{0xDA,0xA7,0x00,0x00,}},
- {0x8BA8,2,{0xCC,0xD6,0x00,0x00,}},
- {0x8BA9,2,{0xC8,0xC3,0x00,0x00,}},
- {0x8BAA,2,{0xDA,0xA8,0x00,0x00,}},
- {0x8BAB,2,{0xC6,0xFD,0x00,0x00,}},
- {0x8BAC,2,{0xD7,0x99,0x00,0x00,}},
- {0x8BAD,2,{0xD1,0xB5,0x00,0x00,}},
- {0x8BAE,2,{0xD2,0xE9,0x00,0x00,}},
- {0x8BAF,2,{0xD1,0xB6,0x00,0x00,}},
- {0x8BB0,2,{0xBC,0xC7,0x00,0x00,}},
- {0x8BB1,2,{0xD7,0x9A,0x00,0x00,}},
- {0x8BB2,2,{0xBD,0xB2,0x00,0x00,}},
- {0x8BB3,2,{0xBB,0xE4,0x00,0x00,}},
- {0x8BB4,2,{0xDA,0xA9,0x00,0x00,}},
- {0x8BB5,2,{0xDA,0xAA,0x00,0x00,}},
- {0x8BB6,2,{0xD1,0xC8,0x00,0x00,}},
- {0x8BB7,2,{0xDA,0xAB,0x00,0x00,}},
- {0x8BB8,2,{0xD0,0xED,0x00,0x00,}},
- {0x8BB9,2,{0xB6,0xEF,0x00,0x00,}},
- {0x8BBA,2,{0xC2,0xDB,0x00,0x00,}},
- {0x8BBB,2,{0xD7,0x9B,0x00,0x00,}},
- {0x8BBC,2,{0xCB,0xCF,0x00,0x00,}},
- {0x8BBD,2,{0xB7,0xED,0x00,0x00,}},
- {0x8BBE,2,{0xC9,0xE8,0x00,0x00,}},
- {0x8BBF,2,{0xB7,0xC3,0x00,0x00,}},
- {0x8BC0,2,{0xBE,0xF7,0x00,0x00,}},
- {0x8BC1,2,{0xD6,0xA4,0x00,0x00,}},
- {0x8BC2,2,{0xDA,0xAC,0x00,0x00,}},
- {0x8BC3,2,{0xDA,0xAD,0x00,0x00,}},
- {0x8BC4,2,{0xC6,0xC0,0x00,0x00,}},
- {0x8BC5,2,{0xD7,0xE7,0x00,0x00,}},
- {0x8BC6,2,{0xCA,0xB6,0x00,0x00,}},
- {0x8BC7,2,{0xD7,0x9C,0x00,0x00,}},
- {0x8BC8,2,{0xD5,0xA9,0x00,0x00,}},
- {0x8BC9,2,{0xCB,0xDF,0x00,0x00,}},
- {0x8BCA,2,{0xD5,0xEF,0x00,0x00,}},
- {0x8BCB,2,{0xDA,0xAE,0x00,0x00,}},
- {0x8BCC,2,{0xD6,0xDF,0x00,0x00,}},
- {0x8BCD,2,{0xB4,0xCA,0x00,0x00,}},
- {0x8BCE,2,{0xDA,0xB0,0x00,0x00,}},
- {0x8BCF,2,{0xDA,0xAF,0x00,0x00,}},
- {0x8BD0,2,{0xD7,0x9D,0x00,0x00,}},
- {0x8BD1,2,{0xD2,0xEB,0x00,0x00,}},
- {0x8BD2,2,{0xDA,0xB1,0x00,0x00,}},
- {0x8BD3,2,{0xDA,0xB2,0x00,0x00,}},
- {0x8BD4,2,{0xDA,0xB3,0x00,0x00,}},
- {0x8BD5,2,{0xCA,0xD4,0x00,0x00,}},
- {0x8BD6,2,{0xDA,0xB4,0x00,0x00,}},
- {0x8BD7,2,{0xCA,0xAB,0x00,0x00,}},
- {0x8BD8,2,{0xDA,0xB5,0x00,0x00,}},
- {0x8BD9,2,{0xDA,0xB6,0x00,0x00,}},
- {0x8BDA,2,{0xB3,0xCF,0x00,0x00,}},
- {0x8BDB,2,{0xD6,0xEF,0x00,0x00,}},
- {0x8BDC,2,{0xDA,0xB7,0x00,0x00,}},
- {0x8BDD,2,{0xBB,0xB0,0x00,0x00,}},
- {0x8BDE,2,{0xB5,0xAE,0x00,0x00,}},
- {0x8BDF,2,{0xDA,0xB8,0x00,0x00,}},
- {0x8BE0,2,{0xDA,0xB9,0x00,0x00,}},
- {0x8BE1,2,{0xB9,0xEE,0x00,0x00,}},
- {0x8BE2,2,{0xD1,0xAF,0x00,0x00,}},
- {0x8BE3,2,{0xD2,0xE8,0x00,0x00,}},
- {0x8BE4,2,{0xDA,0xBA,0x00,0x00,}},
- {0x8BE5,2,{0xB8,0xC3,0x00,0x00,}},
- {0x8BE6,2,{0xCF,0xEA,0x00,0x00,}},
- {0x8BE7,2,{0xB2,0xEF,0x00,0x00,}},
- {0x8BE8,2,{0xDA,0xBB,0x00,0x00,}},
- {0x8BE9,2,{0xDA,0xBC,0x00,0x00,}},
- {0x8BEA,2,{0xD7,0x9E,0x00,0x00,}},
- {0x8BEB,2,{0xBD,0xEB,0x00,0x00,}},
- {0x8BEC,2,{0xCE,0xDC,0x00,0x00,}},
- {0x8BED,2,{0xD3,0xEF,0x00,0x00,}},
- {0x8BEE,2,{0xDA,0xBD,0x00,0x00,}},
- {0x8BEF,2,{0xCE,0xF3,0x00,0x00,}},
- {0x8BF0,2,{0xDA,0xBE,0x00,0x00,}},
- {0x8BF1,2,{0xD3,0xD5,0x00,0x00,}},
- {0x8BF2,2,{0xBB,0xE5,0x00,0x00,}},
- {0x8BF3,2,{0xDA,0xBF,0x00,0x00,}},
- {0x8BF4,2,{0xCB,0xB5,0x00,0x00,}},
- {0x8BF5,2,{0xCB,0xD0,0x00,0x00,}},
- {0x8BF6,2,{0xDA,0xC0,0x00,0x00,}},
- {0x8BF7,2,{0xC7,0xEB,0x00,0x00,}},
- {0x8BF8,2,{0xD6,0xEE,0x00,0x00,}},
- {0x8BF9,2,{0xDA,0xC1,0x00,0x00,}},
- {0x8BFA,2,{0xC5,0xB5,0x00,0x00,}},
- {0x8BFB,2,{0xB6,0xC1,0x00,0x00,}},
- {0x8BFC,2,{0xDA,0xC2,0x00,0x00,}},
- {0x8BFD,2,{0xB7,0xCC,0x00,0x00,}},
- {0x8BFE,2,{0xBF,0xCE,0x00,0x00,}},
- {0x8BFF,2,{0xDA,0xC3,0x00,0x00,}},
- {0x8C00,2,{0xDA,0xC4,0x00,0x00,}},
- {0x8C01,2,{0xCB,0xAD,0x00,0x00,}},
- {0x8C02,2,{0xDA,0xC5,0x00,0x00,}},
- {0x8C03,2,{0xB5,0xF7,0x00,0x00,}},
- {0x8C04,2,{0xDA,0xC6,0x00,0x00,}},
- {0x8C05,2,{0xC1,0xC2,0x00,0x00,}},
- {0x8C06,2,{0xD7,0xBB,0x00,0x00,}},
- {0x8C07,2,{0xDA,0xC7,0x00,0x00,}},
- {0x8C08,2,{0xCC,0xB8,0x00,0x00,}},
- {0x8C09,2,{0xD7,0x9F,0x00,0x00,}},
- {0x8C0A,2,{0xD2,0xEA,0x00,0x00,}},
- {0x8C0B,2,{0xC4,0xB1,0x00,0x00,}},
- {0x8C0C,2,{0xDA,0xC8,0x00,0x00,}},
- {0x8C0D,2,{0xB5,0xFD,0x00,0x00,}},
- {0x8C0E,2,{0xBB,0xD1,0x00,0x00,}},
- {0x8C0F,2,{0xDA,0xC9,0x00,0x00,}},
- {0x8C10,2,{0xD0,0xB3,0x00,0x00,}},
- {0x8C11,2,{0xDA,0xCA,0x00,0x00,}},
- {0x8C12,2,{0xDA,0xCB,0x00,0x00,}},
- {0x8C13,2,{0xCE,0xBD,0x00,0x00,}},
- {0x8C14,2,{0xDA,0xCC,0x00,0x00,}},
- {0x8C15,2,{0xDA,0xCD,0x00,0x00,}},
- {0x8C16,2,{0xDA,0xCE,0x00,0x00,}},
- {0x8C17,2,{0xB2,0xF7,0x00,0x00,}},
- {0x8C18,2,{0xDA,0xD1,0x00,0x00,}},
- {0x8C19,2,{0xDA,0xCF,0x00,0x00,}},
- {0x8C1A,2,{0xD1,0xE8,0x00,0x00,}},
- {0x8C1B,2,{0xDA,0xD0,0x00,0x00,}},
- {0x8C1C,2,{0xC3,0xD5,0x00,0x00,}},
- {0x8C1D,2,{0xDA,0xD2,0x00,0x00,}},
- {0x8C1E,2,{0xD7,0xA0,0x00,0x00,}},
- {0x8C1F,2,{0xDA,0xD3,0x00,0x00,}},
- {0x8C20,2,{0xDA,0xD4,0x00,0x00,}},
- {0x8C21,2,{0xDA,0xD5,0x00,0x00,}},
- {0x8C22,2,{0xD0,0xBB,0x00,0x00,}},
- {0x8C23,2,{0xD2,0xA5,0x00,0x00,}},
- {0x8C24,2,{0xB0,0xF9,0x00,0x00,}},
- {0x8C25,2,{0xDA,0xD6,0x00,0x00,}},
- {0x8C26,2,{0xC7,0xAB,0x00,0x00,}},
- {0x8C27,2,{0xDA,0xD7,0x00,0x00,}},
- {0x8C28,2,{0xBD,0xF7,0x00,0x00,}},
- {0x8C29,2,{0xC3,0xA1,0x00,0x00,}},
- {0x8C2A,2,{0xDA,0xD8,0x00,0x00,}},
- {0x8C2B,2,{0xDA,0xD9,0x00,0x00,}},
- {0x8C2C,2,{0xC3,0xFD,0x00,0x00,}},
- {0x8C2D,2,{0xCC,0xB7,0x00,0x00,}},
- {0x8C2E,2,{0xDA,0xDA,0x00,0x00,}},
- {0x8C2F,2,{0xDA,0xDB,0x00,0x00,}},
- {0x8C30,2,{0xC0,0xBE,0x00,0x00,}},
- {0x8C31,2,{0xC6,0xD7,0x00,0x00,}},
- {0x8C32,2,{0xDA,0xDC,0x00,0x00,}},
- {0x8C33,2,{0xDA,0xDD,0x00,0x00,}},
- {0x8C34,2,{0xC7,0xB4,0x00,0x00,}},
- {0x8C35,2,{0xDA,0xDE,0x00,0x00,}},
- {0x8C36,2,{0xDA,0xDF,0x00,0x00,}},
- {0x8C37,2,{0xB9,0xC8,0x00,0x00,}},
- {0x8C38,2,{0xD8,0x40,0x00,0x00,}},
- {0x8C39,2,{0xD8,0x41,0x00,0x00,}},
- {0x8C3A,2,{0xD8,0x42,0x00,0x00,}},
- {0x8C3B,2,{0xD8,0x43,0x00,0x00,}},
- {0x8C3C,2,{0xD8,0x44,0x00,0x00,}},
- {0x8C3D,2,{0xD8,0x45,0x00,0x00,}},
- {0x8C3E,2,{0xD8,0x46,0x00,0x00,}},
- {0x8C3F,2,{0xD8,0x47,0x00,0x00,}},
- {0x8C40,2,{0xD8,0x48,0x00,0x00,}},
- {0x8C41,2,{0xBB,0xED,0x00,0x00,}},
- {0x8C42,2,{0xD8,0x49,0x00,0x00,}},
- {0x8C43,2,{0xD8,0x4A,0x00,0x00,}},
- {0x8C44,2,{0xD8,0x4B,0x00,0x00,}},
- {0x8C45,2,{0xD8,0x4C,0x00,0x00,}},
- {0x8C46,2,{0xB6,0xB9,0x00,0x00,}},
- {0x8C47,2,{0xF4,0xF8,0x00,0x00,}},
- {0x8C48,2,{0xD8,0x4D,0x00,0x00,}},
- {0x8C49,2,{0xF4,0xF9,0x00,0x00,}},
- {0x8C4A,2,{0xD8,0x4E,0x00,0x00,}},
- {0x8C4B,2,{0xD8,0x4F,0x00,0x00,}},
- {0x8C4C,2,{0xCD,0xE3,0x00,0x00,}},
- {0x8C4D,2,{0xD8,0x50,0x00,0x00,}},
- {0x8C4E,2,{0xD8,0x51,0x00,0x00,}},
- {0x8C4F,2,{0xD8,0x52,0x00,0x00,}},
- {0x8C50,2,{0xD8,0x53,0x00,0x00,}},
- {0x8C51,2,{0xD8,0x54,0x00,0x00,}},
- {0x8C52,2,{0xD8,0x55,0x00,0x00,}},
- {0x8C53,2,{0xD8,0x56,0x00,0x00,}},
- {0x8C54,2,{0xD8,0x57,0x00,0x00,}},
- {0x8C55,2,{0xF5,0xB9,0x00,0x00,}},
- {0x8C56,2,{0xD8,0x58,0x00,0x00,}},
- {0x8C57,2,{0xD8,0x59,0x00,0x00,}},
- {0x8C58,2,{0xD8,0x5A,0x00,0x00,}},
- {0x8C59,2,{0xD8,0x5B,0x00,0x00,}},
- {0x8C5A,2,{0xEB,0xE0,0x00,0x00,}},
- {0x8C5B,2,{0xD8,0x5C,0x00,0x00,}},
- {0x8C5C,2,{0xD8,0x5D,0x00,0x00,}},
- {0x8C5D,2,{0xD8,0x5E,0x00,0x00,}},
- {0x8C5E,2,{0xD8,0x5F,0x00,0x00,}},
- {0x8C5F,2,{0xD8,0x60,0x00,0x00,}},
- {0x8C60,2,{0xD8,0x61,0x00,0x00,}},
- {0x8C61,2,{0xCF,0xF3,0x00,0x00,}},
- {0x8C62,2,{0xBB,0xBF,0x00,0x00,}},
- {0x8C63,2,{0xD8,0x62,0x00,0x00,}},
- {0x8C64,2,{0xD8,0x63,0x00,0x00,}},
- {0x8C65,2,{0xD8,0x64,0x00,0x00,}},
- {0x8C66,2,{0xD8,0x65,0x00,0x00,}},
- {0x8C67,2,{0xD8,0x66,0x00,0x00,}},
- {0x8C68,2,{0xD8,0x67,0x00,0x00,}},
- {0x8C69,2,{0xD8,0x68,0x00,0x00,}},
- {0x8C6A,2,{0xBA,0xC0,0x00,0x00,}},
- {0x8C6B,2,{0xD4,0xA5,0x00,0x00,}},
- {0x8C6C,2,{0xD8,0x69,0x00,0x00,}},
- {0x8C6D,2,{0xD8,0x6A,0x00,0x00,}},
- {0x8C6E,2,{0xD8,0x6B,0x00,0x00,}},
- {0x8C6F,2,{0xD8,0x6C,0x00,0x00,}},
- {0x8C70,2,{0xD8,0x6D,0x00,0x00,}},
- {0x8C71,2,{0xD8,0x6E,0x00,0x00,}},
- {0x8C72,2,{0xD8,0x6F,0x00,0x00,}},
- {0x8C73,2,{0xE1,0xD9,0x00,0x00,}},
- {0x8C74,2,{0xD8,0x70,0x00,0x00,}},
- {0x8C75,2,{0xD8,0x71,0x00,0x00,}},
- {0x8C76,2,{0xD8,0x72,0x00,0x00,}},
- {0x8C77,2,{0xD8,0x73,0x00,0x00,}},
- {0x8C78,2,{0xF5,0xF4,0x00,0x00,}},
- {0x8C79,2,{0xB1,0xAA,0x00,0x00,}},
- {0x8C7A,2,{0xB2,0xF2,0x00,0x00,}},
- {0x8C7B,2,{0xD8,0x74,0x00,0x00,}},
- {0x8C7C,2,{0xD8,0x75,0x00,0x00,}},
- {0x8C7D,2,{0xD8,0x76,0x00,0x00,}},
- {0x8C7E,2,{0xD8,0x77,0x00,0x00,}},
- {0x8C7F,2,{0xD8,0x78,0x00,0x00,}},
- {0x8C80,2,{0xD8,0x79,0x00,0x00,}},
- {0x8C81,2,{0xD8,0x7A,0x00,0x00,}},
- {0x8C82,2,{0xF5,0xF5,0x00,0x00,}},
- {0x8C83,2,{0xD8,0x7B,0x00,0x00,}},
- {0x8C84,2,{0xD8,0x7C,0x00,0x00,}},
- {0x8C85,2,{0xF5,0xF7,0x00,0x00,}},
- {0x8C86,2,{0xD8,0x7D,0x00,0x00,}},
- {0x8C87,2,{0xD8,0x7E,0x00,0x00,}},
- {0x8C88,2,{0xD8,0x80,0x00,0x00,}},
- {0x8C89,2,{0xBA,0xD1,0x00,0x00,}},
- {0x8C8A,2,{0xF5,0xF6,0x00,0x00,}},
- {0x8C8B,2,{0xD8,0x81,0x00,0x00,}},
- {0x8C8C,2,{0xC3,0xB2,0x00,0x00,}},
- {0x8C8D,2,{0xD8,0x82,0x00,0x00,}},
- {0x8C8E,2,{0xD8,0x83,0x00,0x00,}},
- {0x8C8F,2,{0xD8,0x84,0x00,0x00,}},
- {0x8C90,2,{0xD8,0x85,0x00,0x00,}},
- {0x8C91,2,{0xD8,0x86,0x00,0x00,}},
- {0x8C92,2,{0xD8,0x87,0x00,0x00,}},
- {0x8C93,2,{0xD8,0x88,0x00,0x00,}},
- {0x8C94,2,{0xF5,0xF9,0x00,0x00,}},
- {0x8C95,2,{0xD8,0x89,0x00,0x00,}},
- {0x8C96,2,{0xD8,0x8A,0x00,0x00,}},
- {0x8C97,2,{0xD8,0x8B,0x00,0x00,}},
- {0x8C98,2,{0xF5,0xF8,0x00,0x00,}},
- {0x8C99,2,{0xD8,0x8C,0x00,0x00,}},
- {0x8C9A,2,{0xD8,0x8D,0x00,0x00,}},
- {0x8C9B,2,{0xD8,0x8E,0x00,0x00,}},
- {0x8C9C,2,{0xD8,0x8F,0x00,0x00,}},
- {0x8C9D,2,{0xD8,0x90,0x00,0x00,}},
- {0x8C9E,2,{0xD8,0x91,0x00,0x00,}},
- {0x8C9F,2,{0xD8,0x92,0x00,0x00,}},
- {0x8CA0,2,{0xD8,0x93,0x00,0x00,}},
- {0x8CA1,2,{0xD8,0x94,0x00,0x00,}},
- {0x8CA2,2,{0xD8,0x95,0x00,0x00,}},
- {0x8CA3,2,{0xD8,0x96,0x00,0x00,}},
- {0x8CA4,2,{0xD8,0x97,0x00,0x00,}},
- {0x8CA5,2,{0xD8,0x98,0x00,0x00,}},
- {0x8CA6,2,{0xD8,0x99,0x00,0x00,}},
- {0x8CA7,2,{0xD8,0x9A,0x00,0x00,}},
- {0x8CA8,2,{0xD8,0x9B,0x00,0x00,}},
- {0x8CA9,2,{0xD8,0x9C,0x00,0x00,}},
- {0x8CAA,2,{0xD8,0x9D,0x00,0x00,}},
- {0x8CAB,2,{0xD8,0x9E,0x00,0x00,}},
- {0x8CAC,2,{0xD8,0x9F,0x00,0x00,}},
- {0x8CAD,2,{0xD8,0xA0,0x00,0x00,}},
- {0x8CAE,2,{0xD9,0x40,0x00,0x00,}},
- {0x8CAF,2,{0xD9,0x41,0x00,0x00,}},
- {0x8CB0,2,{0xD9,0x42,0x00,0x00,}},
- {0x8CB1,2,{0xD9,0x43,0x00,0x00,}},
- {0x8CB2,2,{0xD9,0x44,0x00,0x00,}},
- {0x8CB3,2,{0xD9,0x45,0x00,0x00,}},
- {0x8CB4,2,{0xD9,0x46,0x00,0x00,}},
- {0x8CB5,2,{0xD9,0x47,0x00,0x00,}},
- {0x8CB6,2,{0xD9,0x48,0x00,0x00,}},
- {0x8CB7,2,{0xD9,0x49,0x00,0x00,}},
- {0x8CB8,2,{0xD9,0x4A,0x00,0x00,}},
- {0x8CB9,2,{0xD9,0x4B,0x00,0x00,}},
- {0x8CBA,2,{0xD9,0x4C,0x00,0x00,}},
- {0x8CBB,2,{0xD9,0x4D,0x00,0x00,}},
- {0x8CBC,2,{0xD9,0x4E,0x00,0x00,}},
- {0x8CBD,2,{0xD9,0x4F,0x00,0x00,}},
- {0x8CBE,2,{0xD9,0x50,0x00,0x00,}},
- {0x8CBF,2,{0xD9,0x51,0x00,0x00,}},
- {0x8CC0,2,{0xD9,0x52,0x00,0x00,}},
- {0x8CC1,2,{0xD9,0x53,0x00,0x00,}},
- {0x8CC2,2,{0xD9,0x54,0x00,0x00,}},
- {0x8CC3,2,{0xD9,0x55,0x00,0x00,}},
- {0x8CC4,2,{0xD9,0x56,0x00,0x00,}},
- {0x8CC5,2,{0xD9,0x57,0x00,0x00,}},
- {0x8CC6,2,{0xD9,0x58,0x00,0x00,}},
- {0x8CC7,2,{0xD9,0x59,0x00,0x00,}},
- {0x8CC8,2,{0xD9,0x5A,0x00,0x00,}},
- {0x8CC9,2,{0xD9,0x5B,0x00,0x00,}},
- {0x8CCA,2,{0xD9,0x5C,0x00,0x00,}},
- {0x8CCB,2,{0xD9,0x5D,0x00,0x00,}},
- {0x8CCC,2,{0xD9,0x5E,0x00,0x00,}},
- {0x8CCD,2,{0xD9,0x5F,0x00,0x00,}},
- {0x8CCE,2,{0xD9,0x60,0x00,0x00,}},
- {0x8CCF,2,{0xD9,0x61,0x00,0x00,}},
- {0x8CD0,2,{0xD9,0x62,0x00,0x00,}},
- {0x8CD1,2,{0xD9,0x63,0x00,0x00,}},
- {0x8CD2,2,{0xD9,0x64,0x00,0x00,}},
- {0x8CD3,2,{0xD9,0x65,0x00,0x00,}},
- {0x8CD4,2,{0xD9,0x66,0x00,0x00,}},
- {0x8CD5,2,{0xD9,0x67,0x00,0x00,}},
- {0x8CD6,2,{0xD9,0x68,0x00,0x00,}},
- {0x8CD7,2,{0xD9,0x69,0x00,0x00,}},
- {0x8CD8,2,{0xD9,0x6A,0x00,0x00,}},
- {0x8CD9,2,{0xD9,0x6B,0x00,0x00,}},
- {0x8CDA,2,{0xD9,0x6C,0x00,0x00,}},
- {0x8CDB,2,{0xD9,0x6D,0x00,0x00,}},
- {0x8CDC,2,{0xD9,0x6E,0x00,0x00,}},
- {0x8CDD,2,{0xD9,0x6F,0x00,0x00,}},
- {0x8CDE,2,{0xD9,0x70,0x00,0x00,}},
- {0x8CDF,2,{0xD9,0x71,0x00,0x00,}},
- {0x8CE0,2,{0xD9,0x72,0x00,0x00,}},
- {0x8CE1,2,{0xD9,0x73,0x00,0x00,}},
- {0x8CE2,2,{0xD9,0x74,0x00,0x00,}},
- {0x8CE3,2,{0xD9,0x75,0x00,0x00,}},
- {0x8CE4,2,{0xD9,0x76,0x00,0x00,}},
- {0x8CE5,2,{0xD9,0x77,0x00,0x00,}},
- {0x8CE6,2,{0xD9,0x78,0x00,0x00,}},
- {0x8CE7,2,{0xD9,0x79,0x00,0x00,}},
- {0x8CE8,2,{0xD9,0x7A,0x00,0x00,}},
- {0x8CE9,2,{0xD9,0x7B,0x00,0x00,}},
- {0x8CEA,2,{0xD9,0x7C,0x00,0x00,}},
- {0x8CEB,2,{0xD9,0x7D,0x00,0x00,}},
- {0x8CEC,2,{0xD9,0x7E,0x00,0x00,}},
- {0x8CED,2,{0xD9,0x80,0x00,0x00,}},
- {0x8CEE,2,{0xD9,0x81,0x00,0x00,}},
- {0x8CEF,2,{0xD9,0x82,0x00,0x00,}},
- {0x8CF0,2,{0xD9,0x83,0x00,0x00,}},
- {0x8CF1,2,{0xD9,0x84,0x00,0x00,}},
- {0x8CF2,2,{0xD9,0x85,0x00,0x00,}},
- {0x8CF3,2,{0xD9,0x86,0x00,0x00,}},
- {0x8CF4,2,{0xD9,0x87,0x00,0x00,}},
- {0x8CF5,2,{0xD9,0x88,0x00,0x00,}},
- {0x8CF6,2,{0xD9,0x89,0x00,0x00,}},
- {0x8CF7,2,{0xD9,0x8A,0x00,0x00,}},
- {0x8CF8,2,{0xD9,0x8B,0x00,0x00,}},
- {0x8CF9,2,{0xD9,0x8C,0x00,0x00,}},
- {0x8CFA,2,{0xD9,0x8D,0x00,0x00,}},
- {0x8CFB,2,{0xD9,0x8E,0x00,0x00,}},
- {0x8CFC,2,{0xD9,0x8F,0x00,0x00,}},
- {0x8CFD,2,{0xD9,0x90,0x00,0x00,}},
- {0x8CFE,2,{0xD9,0x91,0x00,0x00,}},
- {0x8CFF,2,{0xD9,0x92,0x00,0x00,}},
- {0x8D00,2,{0xD9,0x93,0x00,0x00,}},
- {0x8D01,2,{0xD9,0x94,0x00,0x00,}},
- {0x8D02,2,{0xD9,0x95,0x00,0x00,}},
- {0x8D03,2,{0xD9,0x96,0x00,0x00,}},
- {0x8D04,2,{0xD9,0x97,0x00,0x00,}},
- {0x8D05,2,{0xD9,0x98,0x00,0x00,}},
- {0x8D06,2,{0xD9,0x99,0x00,0x00,}},
- {0x8D07,2,{0xD9,0x9A,0x00,0x00,}},
- {0x8D08,2,{0xD9,0x9B,0x00,0x00,}},
- {0x8D09,2,{0xD9,0x9C,0x00,0x00,}},
- {0x8D0A,2,{0xD9,0x9D,0x00,0x00,}},
- {0x8D0B,2,{0xD9,0x9E,0x00,0x00,}},
- {0x8D0C,2,{0xD9,0x9F,0x00,0x00,}},
- {0x8D0D,2,{0xD9,0xA0,0x00,0x00,}},
- {0x8D0E,2,{0xDA,0x40,0x00,0x00,}},
- {0x8D0F,2,{0xDA,0x41,0x00,0x00,}},
- {0x8D10,2,{0xDA,0x42,0x00,0x00,}},
- {0x8D11,2,{0xDA,0x43,0x00,0x00,}},
- {0x8D12,2,{0xDA,0x44,0x00,0x00,}},
- {0x8D13,2,{0xDA,0x45,0x00,0x00,}},
- {0x8D14,2,{0xDA,0x46,0x00,0x00,}},
- {0x8D15,2,{0xDA,0x47,0x00,0x00,}},
- {0x8D16,2,{0xDA,0x48,0x00,0x00,}},
- {0x8D17,2,{0xDA,0x49,0x00,0x00,}},
- {0x8D18,2,{0xDA,0x4A,0x00,0x00,}},
- {0x8D19,2,{0xDA,0x4B,0x00,0x00,}},
- {0x8D1A,2,{0xDA,0x4C,0x00,0x00,}},
- {0x8D1B,2,{0xDA,0x4D,0x00,0x00,}},
- {0x8D1C,2,{0xDA,0x4E,0x00,0x00,}},
- {0x8D1D,2,{0xB1,0xB4,0x00,0x00,}},
- {0x8D1E,2,{0xD5,0xEA,0x00,0x00,}},
- {0x8D1F,2,{0xB8,0xBA,0x00,0x00,}},
- {0x8D20,2,{0xDA,0x4F,0x00,0x00,}},
- {0x8D21,2,{0xB9,0xB1,0x00,0x00,}},
- {0x8D22,2,{0xB2,0xC6,0x00,0x00,}},
- {0x8D23,2,{0xD4,0xF0,0x00,0x00,}},
- {0x8D24,2,{0xCF,0xCD,0x00,0x00,}},
- {0x8D25,2,{0xB0,0xDC,0x00,0x00,}},
- {0x8D26,2,{0xD5,0xCB,0x00,0x00,}},
- {0x8D27,2,{0xBB,0xF5,0x00,0x00,}},
- {0x8D28,2,{0xD6,0xCA,0x00,0x00,}},
- {0x8D29,2,{0xB7,0xB7,0x00,0x00,}},
- {0x8D2A,2,{0xCC,0xB0,0x00,0x00,}},
- {0x8D2B,2,{0xC6,0xB6,0x00,0x00,}},
- {0x8D2C,2,{0xB1,0xE1,0x00,0x00,}},
- {0x8D2D,2,{0xB9,0xBA,0x00,0x00,}},
- {0x8D2E,2,{0xD6,0xFC,0x00,0x00,}},
- {0x8D2F,2,{0xB9,0xE1,0x00,0x00,}},
- {0x8D30,2,{0xB7,0xA1,0x00,0x00,}},
- {0x8D31,2,{0xBC,0xFA,0x00,0x00,}},
- {0x8D32,2,{0xEA,0xDA,0x00,0x00,}},
- {0x8D33,2,{0xEA,0xDB,0x00,0x00,}},
- {0x8D34,2,{0xCC,0xF9,0x00,0x00,}},
- {0x8D35,2,{0xB9,0xF3,0x00,0x00,}},
- {0x8D36,2,{0xEA,0xDC,0x00,0x00,}},
- {0x8D37,2,{0xB4,0xFB,0x00,0x00,}},
- {0x8D38,2,{0xC3,0xB3,0x00,0x00,}},
- {0x8D39,2,{0xB7,0xD1,0x00,0x00,}},
- {0x8D3A,2,{0xBA,0xD8,0x00,0x00,}},
- {0x8D3B,2,{0xEA,0xDD,0x00,0x00,}},
- {0x8D3C,2,{0xD4,0xF4,0x00,0x00,}},
- {0x8D3D,2,{0xEA,0xDE,0x00,0x00,}},
- {0x8D3E,2,{0xBC,0xD6,0x00,0x00,}},
- {0x8D3F,2,{0xBB,0xDF,0x00,0x00,}},
- {0x8D40,2,{0xEA,0xDF,0x00,0x00,}},
- {0x8D41,2,{0xC1,0xDE,0x00,0x00,}},
- {0x8D42,2,{0xC2,0xB8,0x00,0x00,}},
- {0x8D43,2,{0xD4,0xDF,0x00,0x00,}},
- {0x8D44,2,{0xD7,0xCA,0x00,0x00,}},
- {0x8D45,2,{0xEA,0xE0,0x00,0x00,}},
- {0x8D46,2,{0xEA,0xE1,0x00,0x00,}},
- {0x8D47,2,{0xEA,0xE4,0x00,0x00,}},
- {0x8D48,2,{0xEA,0xE2,0x00,0x00,}},
- {0x8D49,2,{0xEA,0xE3,0x00,0x00,}},
- {0x8D4A,2,{0xC9,0xDE,0x00,0x00,}},
- {0x8D4B,2,{0xB8,0xB3,0x00,0x00,}},
- {0x8D4C,2,{0xB6,0xC4,0x00,0x00,}},
- {0x8D4D,2,{0xEA,0xE5,0x00,0x00,}},
- {0x8D4E,2,{0xCA,0xEA,0x00,0x00,}},
- {0x8D4F,2,{0xC9,0xCD,0x00,0x00,}},
- {0x8D50,2,{0xB4,0xCD,0x00,0x00,}},
- {0x8D51,2,{0xDA,0x50,0x00,0x00,}},
- {0x8D52,2,{0xDA,0x51,0x00,0x00,}},
- {0x8D53,2,{0xE2,0xD9,0x00,0x00,}},
- {0x8D54,2,{0xC5,0xE2,0x00,0x00,}},
- {0x8D55,2,{0xEA,0xE6,0x00,0x00,}},
- {0x8D56,2,{0xC0,0xB5,0x00,0x00,}},
- {0x8D57,2,{0xDA,0x52,0x00,0x00,}},
- {0x8D58,2,{0xD7,0xB8,0x00,0x00,}},
- {0x8D59,2,{0xEA,0xE7,0x00,0x00,}},
- {0x8D5A,2,{0xD7,0xAC,0x00,0x00,}},
- {0x8D5B,2,{0xC8,0xFC,0x00,0x00,}},
- {0x8D5C,2,{0xD8,0xD3,0x00,0x00,}},
- {0x8D5D,2,{0xD8,0xCD,0x00,0x00,}},
- {0x8D5E,2,{0xD4,0xDE,0x00,0x00,}},
- {0x8D5F,2,{0xDA,0x53,0x00,0x00,}},
- {0x8D60,2,{0xD4,0xF9,0x00,0x00,}},
- {0x8D61,2,{0xC9,0xC4,0x00,0x00,}},
- {0x8D62,2,{0xD3,0xAE,0x00,0x00,}},
- {0x8D63,2,{0xB8,0xD3,0x00,0x00,}},
- {0x8D64,2,{0xB3,0xE0,0x00,0x00,}},
- {0x8D65,2,{0xDA,0x54,0x00,0x00,}},
- {0x8D66,2,{0xC9,0xE2,0x00,0x00,}},
- {0x8D67,2,{0xF4,0xF6,0x00,0x00,}},
- {0x8D68,2,{0xDA,0x55,0x00,0x00,}},
- {0x8D69,2,{0xDA,0x56,0x00,0x00,}},
- {0x8D6A,2,{0xDA,0x57,0x00,0x00,}},
- {0x8D6B,2,{0xBA,0xD5,0x00,0x00,}},
- {0x8D6C,2,{0xDA,0x58,0x00,0x00,}},
- {0x8D6D,2,{0xF4,0xF7,0x00,0x00,}},
- {0x8D6E,2,{0xDA,0x59,0x00,0x00,}},
- {0x8D6F,2,{0xDA,0x5A,0x00,0x00,}},
- {0x8D70,2,{0xD7,0xDF,0x00,0x00,}},
- {0x8D71,2,{0xDA,0x5B,0x00,0x00,}},
- {0x8D72,2,{0xDA,0x5C,0x00,0x00,}},
- {0x8D73,2,{0xF4,0xF1,0x00,0x00,}},
- {0x8D74,2,{0xB8,0xB0,0x00,0x00,}},
- {0x8D75,2,{0xD5,0xD4,0x00,0x00,}},
- {0x8D76,2,{0xB8,0xCF,0x00,0x00,}},
- {0x8D77,2,{0xC6,0xF0,0x00,0x00,}},
- {0x8D78,2,{0xDA,0x5D,0x00,0x00,}},
- {0x8D79,2,{0xDA,0x5E,0x00,0x00,}},
- {0x8D7A,2,{0xDA,0x5F,0x00,0x00,}},
- {0x8D7B,2,{0xDA,0x60,0x00,0x00,}},
- {0x8D7C,2,{0xDA,0x61,0x00,0x00,}},
- {0x8D7D,2,{0xDA,0x62,0x00,0x00,}},
- {0x8D7E,2,{0xDA,0x63,0x00,0x00,}},
- {0x8D7F,2,{0xDA,0x64,0x00,0x00,}},
- {0x8D80,2,{0xDA,0x65,0x00,0x00,}},
- {0x8D81,2,{0xB3,0xC3,0x00,0x00,}},
- {0x8D82,2,{0xDA,0x66,0x00,0x00,}},
- {0x8D83,2,{0xDA,0x67,0x00,0x00,}},
- {0x8D84,2,{0xF4,0xF2,0x00,0x00,}},
- {0x8D85,2,{0xB3,0xAC,0x00,0x00,}},
- {0x8D86,2,{0xDA,0x68,0x00,0x00,}},
- {0x8D87,2,{0xDA,0x69,0x00,0x00,}},
- {0x8D88,2,{0xDA,0x6A,0x00,0x00,}},
- {0x8D89,2,{0xDA,0x6B,0x00,0x00,}},
- {0x8D8A,2,{0xD4,0xBD,0x00,0x00,}},
- {0x8D8B,2,{0xC7,0xF7,0x00,0x00,}},
- {0x8D8C,2,{0xDA,0x6C,0x00,0x00,}},
- {0x8D8D,2,{0xDA,0x6D,0x00,0x00,}},
- {0x8D8E,2,{0xDA,0x6E,0x00,0x00,}},
- {0x8D8F,2,{0xDA,0x6F,0x00,0x00,}},
- {0x8D90,2,{0xDA,0x70,0x00,0x00,}},
- {0x8D91,2,{0xF4,0xF4,0x00,0x00,}},
- {0x8D92,2,{0xDA,0x71,0x00,0x00,}},
- {0x8D93,2,{0xDA,0x72,0x00,0x00,}},
- {0x8D94,2,{0xF4,0xF3,0x00,0x00,}},
- {0x8D95,2,{0xDA,0x73,0x00,0x00,}},
- {0x8D96,2,{0xDA,0x74,0x00,0x00,}},
- {0x8D97,2,{0xDA,0x75,0x00,0x00,}},
- {0x8D98,2,{0xDA,0x76,0x00,0x00,}},
- {0x8D99,2,{0xDA,0x77,0x00,0x00,}},
- {0x8D9A,2,{0xDA,0x78,0x00,0x00,}},
- {0x8D9B,2,{0xDA,0x79,0x00,0x00,}},
- {0x8D9C,2,{0xDA,0x7A,0x00,0x00,}},
- {0x8D9D,2,{0xDA,0x7B,0x00,0x00,}},
- {0x8D9E,2,{0xDA,0x7C,0x00,0x00,}},
- {0x8D9F,2,{0xCC,0xCB,0x00,0x00,}},
- {0x8DA0,2,{0xDA,0x7D,0x00,0x00,}},
- {0x8DA1,2,{0xDA,0x7E,0x00,0x00,}},
- {0x8DA2,2,{0xDA,0x80,0x00,0x00,}},
- {0x8DA3,2,{0xC8,0xA4,0x00,0x00,}},
- {0x8DA4,2,{0xDA,0x81,0x00,0x00,}},
- {0x8DA5,2,{0xDA,0x82,0x00,0x00,}},
- {0x8DA6,2,{0xDA,0x83,0x00,0x00,}},
- {0x8DA7,2,{0xDA,0x84,0x00,0x00,}},
- {0x8DA8,2,{0xDA,0x85,0x00,0x00,}},
- {0x8DA9,2,{0xDA,0x86,0x00,0x00,}},
- {0x8DAA,2,{0xDA,0x87,0x00,0x00,}},
- {0x8DAB,2,{0xDA,0x88,0x00,0x00,}},
- {0x8DAC,2,{0xDA,0x89,0x00,0x00,}},
- {0x8DAD,2,{0xDA,0x8A,0x00,0x00,}},
- {0x8DAE,2,{0xDA,0x8B,0x00,0x00,}},
- {0x8DAF,2,{0xDA,0x8C,0x00,0x00,}},
- {0x8DB0,2,{0xDA,0x8D,0x00,0x00,}},
- {0x8DB1,2,{0xF4,0xF5,0x00,0x00,}},
- {0x8DB2,2,{0xDA,0x8E,0x00,0x00,}},
- {0x8DB3,2,{0xD7,0xE3,0x00,0x00,}},
- {0x8DB4,2,{0xC5,0xBF,0x00,0x00,}},
- {0x8DB5,2,{0xF5,0xC0,0x00,0x00,}},
- {0x8DB6,2,{0xDA,0x8F,0x00,0x00,}},
- {0x8DB7,2,{0xDA,0x90,0x00,0x00,}},
- {0x8DB8,2,{0xF5,0xBB,0x00,0x00,}},
- {0x8DB9,2,{0xDA,0x91,0x00,0x00,}},
- {0x8DBA,2,{0xF5,0xC3,0x00,0x00,}},
- {0x8DBB,2,{0xDA,0x92,0x00,0x00,}},
- {0x8DBC,2,{0xF5,0xC2,0x00,0x00,}},
- {0x8DBD,2,{0xDA,0x93,0x00,0x00,}},
- {0x8DBE,2,{0xD6,0xBA,0x00,0x00,}},
- {0x8DBF,2,{0xF5,0xC1,0x00,0x00,}},
- {0x8DC0,2,{0xDA,0x94,0x00,0x00,}},
- {0x8DC1,2,{0xDA,0x95,0x00,0x00,}},
- {0x8DC2,2,{0xDA,0x96,0x00,0x00,}},
- {0x8DC3,2,{0xD4,0xBE,0x00,0x00,}},
- {0x8DC4,2,{0xF5,0xC4,0x00,0x00,}},
- {0x8DC5,2,{0xDA,0x97,0x00,0x00,}},
- {0x8DC6,2,{0xF5,0xCC,0x00,0x00,}},
- {0x8DC7,2,{0xDA,0x98,0x00,0x00,}},
- {0x8DC8,2,{0xDA,0x99,0x00,0x00,}},
- {0x8DC9,2,{0xDA,0x9A,0x00,0x00,}},
- {0x8DCA,2,{0xDA,0x9B,0x00,0x00,}},
- {0x8DCB,2,{0xB0,0xCF,0x00,0x00,}},
- {0x8DCC,2,{0xB5,0xF8,0x00,0x00,}},
- {0x8DCD,2,{0xDA,0x9C,0x00,0x00,}},
- {0x8DCE,2,{0xF5,0xC9,0x00,0x00,}},
- {0x8DCF,2,{0xF5,0xCA,0x00,0x00,}},
- {0x8DD0,2,{0xDA,0x9D,0x00,0x00,}},
- {0x8DD1,2,{0xC5,0xDC,0x00,0x00,}},
- {0x8DD2,2,{0xDA,0x9E,0x00,0x00,}},
- {0x8DD3,2,{0xDA,0x9F,0x00,0x00,}},
- {0x8DD4,2,{0xDA,0xA0,0x00,0x00,}},
- {0x8DD5,2,{0xDB,0x40,0x00,0x00,}},
- {0x8DD6,2,{0xF5,0xC5,0x00,0x00,}},
- {0x8DD7,2,{0xF5,0xC6,0x00,0x00,}},
- {0x8DD8,2,{0xDB,0x41,0x00,0x00,}},
- {0x8DD9,2,{0xDB,0x42,0x00,0x00,}},
- {0x8DDA,2,{0xF5,0xC7,0x00,0x00,}},
- {0x8DDB,2,{0xF5,0xCB,0x00,0x00,}},
- {0x8DDC,2,{0xDB,0x43,0x00,0x00,}},
- {0x8DDD,2,{0xBE,0xE0,0x00,0x00,}},
- {0x8DDE,2,{0xF5,0xC8,0x00,0x00,}},
- {0x8DDF,2,{0xB8,0xFA,0x00,0x00,}},
- {0x8DE0,2,{0xDB,0x44,0x00,0x00,}},
- {0x8DE1,2,{0xDB,0x45,0x00,0x00,}},
- {0x8DE2,2,{0xDB,0x46,0x00,0x00,}},
- {0x8DE3,2,{0xF5,0xD0,0x00,0x00,}},
- {0x8DE4,2,{0xF5,0xD3,0x00,0x00,}},
- {0x8DE5,2,{0xDB,0x47,0x00,0x00,}},
- {0x8DE6,2,{0xDB,0x48,0x00,0x00,}},
- {0x8DE7,2,{0xDB,0x49,0x00,0x00,}},
- {0x8DE8,2,{0xBF,0xE7,0x00,0x00,}},
- {0x8DE9,2,{0xDB,0x4A,0x00,0x00,}},
- {0x8DEA,2,{0xB9,0xF2,0x00,0x00,}},
- {0x8DEB,2,{0xF5,0xBC,0x00,0x00,}},
- {0x8DEC,2,{0xF5,0xCD,0x00,0x00,}},
- {0x8DED,2,{0xDB,0x4B,0x00,0x00,}},
- {0x8DEE,2,{0xDB,0x4C,0x00,0x00,}},
- {0x8DEF,2,{0xC2,0xB7,0x00,0x00,}},
- {0x8DF0,2,{0xDB,0x4D,0x00,0x00,}},
- {0x8DF1,2,{0xDB,0x4E,0x00,0x00,}},
- {0x8DF2,2,{0xDB,0x4F,0x00,0x00,}},
- {0x8DF3,2,{0xCC,0xF8,0x00,0x00,}},
- {0x8DF4,2,{0xDB,0x50,0x00,0x00,}},
- {0x8DF5,2,{0xBC,0xF9,0x00,0x00,}},
- {0x8DF6,2,{0xDB,0x51,0x00,0x00,}},
- {0x8DF7,2,{0xF5,0xCE,0x00,0x00,}},
- {0x8DF8,2,{0xF5,0xCF,0x00,0x00,}},
- {0x8DF9,2,{0xF5,0xD1,0x00,0x00,}},
- {0x8DFA,2,{0xB6,0xE5,0x00,0x00,}},
- {0x8DFB,2,{0xF5,0xD2,0x00,0x00,}},
- {0x8DFC,2,{0xDB,0x52,0x00,0x00,}},
- {0x8DFD,2,{0xF5,0xD5,0x00,0x00,}},
- {0x8DFE,2,{0xDB,0x53,0x00,0x00,}},
- {0x8DFF,2,{0xDB,0x54,0x00,0x00,}},
- {0x8E00,2,{0xDB,0x55,0x00,0x00,}},
- {0x8E01,2,{0xDB,0x56,0x00,0x00,}},
- {0x8E02,2,{0xDB,0x57,0x00,0x00,}},
- {0x8E03,2,{0xDB,0x58,0x00,0x00,}},
- {0x8E04,2,{0xDB,0x59,0x00,0x00,}},
- {0x8E05,2,{0xF5,0xBD,0x00,0x00,}},
- {0x8E06,2,{0xDB,0x5A,0x00,0x00,}},
- {0x8E07,2,{0xDB,0x5B,0x00,0x00,}},
- {0x8E08,2,{0xDB,0x5C,0x00,0x00,}},
- {0x8E09,2,{0xF5,0xD4,0x00,0x00,}},
- {0x8E0A,2,{0xD3,0xBB,0x00,0x00,}},
- {0x8E0B,2,{0xDB,0x5D,0x00,0x00,}},
- {0x8E0C,2,{0xB3,0xEC,0x00,0x00,}},
- {0x8E0D,2,{0xDB,0x5E,0x00,0x00,}},
- {0x8E0E,2,{0xDB,0x5F,0x00,0x00,}},
- {0x8E0F,2,{0xCC,0xA4,0x00,0x00,}},
- {0x8E10,2,{0xDB,0x60,0x00,0x00,}},
- {0x8E11,2,{0xDB,0x61,0x00,0x00,}},
- {0x8E12,2,{0xDB,0x62,0x00,0x00,}},
- {0x8E13,2,{0xDB,0x63,0x00,0x00,}},
- {0x8E14,2,{0xF5,0xD6,0x00,0x00,}},
- {0x8E15,2,{0xDB,0x64,0x00,0x00,}},
- {0x8E16,2,{0xDB,0x65,0x00,0x00,}},
- {0x8E17,2,{0xDB,0x66,0x00,0x00,}},
- {0x8E18,2,{0xDB,0x67,0x00,0x00,}},
- {0x8E19,2,{0xDB,0x68,0x00,0x00,}},
- {0x8E1A,2,{0xDB,0x69,0x00,0x00,}},
- {0x8E1B,2,{0xDB,0x6A,0x00,0x00,}},
- {0x8E1C,2,{0xDB,0x6B,0x00,0x00,}},
- {0x8E1D,2,{0xF5,0xD7,0x00,0x00,}},
- {0x8E1E,2,{0xBE,0xE1,0x00,0x00,}},
- {0x8E1F,2,{0xF5,0xD8,0x00,0x00,}},
- {0x8E20,2,{0xDB,0x6C,0x00,0x00,}},
- {0x8E21,2,{0xDB,0x6D,0x00,0x00,}},
- {0x8E22,2,{0xCC,0xDF,0x00,0x00,}},
- {0x8E23,2,{0xF5,0xDB,0x00,0x00,}},
- {0x8E24,2,{0xDB,0x6E,0x00,0x00,}},
- {0x8E25,2,{0xDB,0x6F,0x00,0x00,}},
- {0x8E26,2,{0xDB,0x70,0x00,0x00,}},
- {0x8E27,2,{0xDB,0x71,0x00,0x00,}},
- {0x8E28,2,{0xDB,0x72,0x00,0x00,}},
- {0x8E29,2,{0xB2,0xC8,0x00,0x00,}},
- {0x8E2A,2,{0xD7,0xD9,0x00,0x00,}},
- {0x8E2B,2,{0xDB,0x73,0x00,0x00,}},
- {0x8E2C,2,{0xF5,0xD9,0x00,0x00,}},
- {0x8E2D,2,{0xDB,0x74,0x00,0x00,}},
- {0x8E2E,2,{0xF5,0xDA,0x00,0x00,}},
- {0x8E2F,2,{0xF5,0xDC,0x00,0x00,}},
- {0x8E30,2,{0xDB,0x75,0x00,0x00,}},
- {0x8E31,2,{0xF5,0xE2,0x00,0x00,}},
- {0x8E32,2,{0xDB,0x76,0x00,0x00,}},
- {0x8E33,2,{0xDB,0x77,0x00,0x00,}},
- {0x8E34,2,{0xDB,0x78,0x00,0x00,}},
- {0x8E35,2,{0xF5,0xE0,0x00,0x00,}},
- {0x8E36,2,{0xDB,0x79,0x00,0x00,}},
- {0x8E37,2,{0xDB,0x7A,0x00,0x00,}},
- {0x8E38,2,{0xDB,0x7B,0x00,0x00,}},
- {0x8E39,2,{0xF5,0xDF,0x00,0x00,}},
- {0x8E3A,2,{0xF5,0xDD,0x00,0x00,}},
- {0x8E3B,2,{0xDB,0x7C,0x00,0x00,}},
- {0x8E3C,2,{0xDB,0x7D,0x00,0x00,}},
- {0x8E3D,2,{0xF5,0xE1,0x00,0x00,}},
- {0x8E3E,2,{0xDB,0x7E,0x00,0x00,}},
- {0x8E3F,2,{0xDB,0x80,0x00,0x00,}},
- {0x8E40,2,{0xF5,0xDE,0x00,0x00,}},
- {0x8E41,2,{0xF5,0xE4,0x00,0x00,}},
- {0x8E42,2,{0xF5,0xE5,0x00,0x00,}},
- {0x8E43,2,{0xDB,0x81,0x00,0x00,}},
- {0x8E44,2,{0xCC,0xE3,0x00,0x00,}},
- {0x8E45,2,{0xDB,0x82,0x00,0x00,}},
- {0x8E46,2,{0xDB,0x83,0x00,0x00,}},
- {0x8E47,2,{0xE5,0xBF,0x00,0x00,}},
- {0x8E48,2,{0xB5,0xB8,0x00,0x00,}},
- {0x8E49,2,{0xF5,0xE3,0x00,0x00,}},
- {0x8E4A,2,{0xF5,0xE8,0x00,0x00,}},
- {0x8E4B,2,{0xCC,0xA3,0x00,0x00,}},
- {0x8E4C,2,{0xDB,0x84,0x00,0x00,}},
- {0x8E4D,2,{0xDB,0x85,0x00,0x00,}},
- {0x8E4E,2,{0xDB,0x86,0x00,0x00,}},
- {0x8E4F,2,{0xDB,0x87,0x00,0x00,}},
- {0x8E50,2,{0xDB,0x88,0x00,0x00,}},
- {0x8E51,2,{0xF5,0xE6,0x00,0x00,}},
- {0x8E52,2,{0xF5,0xE7,0x00,0x00,}},
- {0x8E53,2,{0xDB,0x89,0x00,0x00,}},
- {0x8E54,2,{0xDB,0x8A,0x00,0x00,}},
- {0x8E55,2,{0xDB,0x8B,0x00,0x00,}},
- {0x8E56,2,{0xDB,0x8C,0x00,0x00,}},
- {0x8E57,2,{0xDB,0x8D,0x00,0x00,}},
- {0x8E58,2,{0xDB,0x8E,0x00,0x00,}},
- {0x8E59,2,{0xF5,0xBE,0x00,0x00,}},
- {0x8E5A,2,{0xDB,0x8F,0x00,0x00,}},
- {0x8E5B,2,{0xDB,0x90,0x00,0x00,}},
- {0x8E5C,2,{0xDB,0x91,0x00,0x00,}},
- {0x8E5D,2,{0xDB,0x92,0x00,0x00,}},
- {0x8E5E,2,{0xDB,0x93,0x00,0x00,}},
- {0x8E5F,2,{0xDB,0x94,0x00,0x00,}},
- {0x8E60,2,{0xDB,0x95,0x00,0x00,}},
- {0x8E61,2,{0xDB,0x96,0x00,0x00,}},
- {0x8E62,2,{0xDB,0x97,0x00,0x00,}},
- {0x8E63,2,{0xDB,0x98,0x00,0x00,}},
- {0x8E64,2,{0xDB,0x99,0x00,0x00,}},
- {0x8E65,2,{0xDB,0x9A,0x00,0x00,}},
- {0x8E66,2,{0xB1,0xC4,0x00,0x00,}},
- {0x8E67,2,{0xDB,0x9B,0x00,0x00,}},
- {0x8E68,2,{0xDB,0x9C,0x00,0x00,}},
- {0x8E69,2,{0xF5,0xBF,0x00,0x00,}},
- {0x8E6A,2,{0xDB,0x9D,0x00,0x00,}},
- {0x8E6B,2,{0xDB,0x9E,0x00,0x00,}},
- {0x8E6C,2,{0xB5,0xC5,0x00,0x00,}},
- {0x8E6D,2,{0xB2,0xE4,0x00,0x00,}},
- {0x8E6E,2,{0xDB,0x9F,0x00,0x00,}},
- {0x8E6F,2,{0xF5,0xEC,0x00,0x00,}},
- {0x8E70,2,{0xF5,0xE9,0x00,0x00,}},
- {0x8E71,2,{0xDB,0xA0,0x00,0x00,}},
- {0x8E72,2,{0xB6,0xD7,0x00,0x00,}},
- {0x8E73,2,{0xDC,0x40,0x00,0x00,}},
- {0x8E74,2,{0xF5,0xED,0x00,0x00,}},
- {0x8E75,2,{0xDC,0x41,0x00,0x00,}},
- {0x8E76,2,{0xF5,0xEA,0x00,0x00,}},
- {0x8E77,2,{0xDC,0x42,0x00,0x00,}},
- {0x8E78,2,{0xDC,0x43,0x00,0x00,}},
- {0x8E79,2,{0xDC,0x44,0x00,0x00,}},
- {0x8E7A,2,{0xDC,0x45,0x00,0x00,}},
- {0x8E7B,2,{0xDC,0x46,0x00,0x00,}},
- {0x8E7C,2,{0xF5,0xEB,0x00,0x00,}},
- {0x8E7D,2,{0xDC,0x47,0x00,0x00,}},
- {0x8E7E,2,{0xDC,0x48,0x00,0x00,}},
- {0x8E7F,2,{0xB4,0xDA,0x00,0x00,}},
- {0x8E80,2,{0xDC,0x49,0x00,0x00,}},
- {0x8E81,2,{0xD4,0xEA,0x00,0x00,}},
- {0x8E82,2,{0xDC,0x4A,0x00,0x00,}},
- {0x8E83,2,{0xDC,0x4B,0x00,0x00,}},
- {0x8E84,2,{0xDC,0x4C,0x00,0x00,}},
- {0x8E85,2,{0xF5,0xEE,0x00,0x00,}},
- {0x8E86,2,{0xDC,0x4D,0x00,0x00,}},
- {0x8E87,2,{0xB3,0xF9,0x00,0x00,}},
- {0x8E88,2,{0xDC,0x4E,0x00,0x00,}},
- {0x8E89,2,{0xDC,0x4F,0x00,0x00,}},
- {0x8E8A,2,{0xDC,0x50,0x00,0x00,}},
- {0x8E8B,2,{0xDC,0x51,0x00,0x00,}},
- {0x8E8C,2,{0xDC,0x52,0x00,0x00,}},
- {0x8E8D,2,{0xDC,0x53,0x00,0x00,}},
- {0x8E8E,2,{0xDC,0x54,0x00,0x00,}},
- {0x8E8F,2,{0xF5,0xEF,0x00,0x00,}},
- {0x8E90,2,{0xF5,0xF1,0x00,0x00,}},
- {0x8E91,2,{0xDC,0x55,0x00,0x00,}},
- {0x8E92,2,{0xDC,0x56,0x00,0x00,}},
- {0x8E93,2,{0xDC,0x57,0x00,0x00,}},
- {0x8E94,2,{0xF5,0xF0,0x00,0x00,}},
- {0x8E95,2,{0xDC,0x58,0x00,0x00,}},
- {0x8E96,2,{0xDC,0x59,0x00,0x00,}},
- {0x8E97,2,{0xDC,0x5A,0x00,0x00,}},
- {0x8E98,2,{0xDC,0x5B,0x00,0x00,}},
- {0x8E99,2,{0xDC,0x5C,0x00,0x00,}},
- {0x8E9A,2,{0xDC,0x5D,0x00,0x00,}},
- {0x8E9B,2,{0xDC,0x5E,0x00,0x00,}},
- {0x8E9C,2,{0xF5,0xF2,0x00,0x00,}},
- {0x8E9D,2,{0xDC,0x5F,0x00,0x00,}},
- {0x8E9E,2,{0xF5,0xF3,0x00,0x00,}},
- {0x8E9F,2,{0xDC,0x60,0x00,0x00,}},
- {0x8EA0,2,{0xDC,0x61,0x00,0x00,}},
- {0x8EA1,2,{0xDC,0x62,0x00,0x00,}},
- {0x8EA2,2,{0xDC,0x63,0x00,0x00,}},
- {0x8EA3,2,{0xDC,0x64,0x00,0x00,}},
- {0x8EA4,2,{0xDC,0x65,0x00,0x00,}},
- {0x8EA5,2,{0xDC,0x66,0x00,0x00,}},
- {0x8EA6,2,{0xDC,0x67,0x00,0x00,}},
- {0x8EA7,2,{0xDC,0x68,0x00,0x00,}},
- {0x8EA8,2,{0xDC,0x69,0x00,0x00,}},
- {0x8EA9,2,{0xDC,0x6A,0x00,0x00,}},
- {0x8EAA,2,{0xDC,0x6B,0x00,0x00,}},
- {0x8EAB,2,{0xC9,0xED,0x00,0x00,}},
- {0x8EAC,2,{0xB9,0xAA,0x00,0x00,}},
- {0x8EAD,2,{0xDC,0x6C,0x00,0x00,}},
- {0x8EAE,2,{0xDC,0x6D,0x00,0x00,}},
- {0x8EAF,2,{0xC7,0xFB,0x00,0x00,}},
- {0x8EB0,2,{0xDC,0x6E,0x00,0x00,}},
- {0x8EB1,2,{0xDC,0x6F,0x00,0x00,}},
- {0x8EB2,2,{0xB6,0xE3,0x00,0x00,}},
- {0x8EB3,2,{0xDC,0x70,0x00,0x00,}},
- {0x8EB4,2,{0xDC,0x71,0x00,0x00,}},
- {0x8EB5,2,{0xDC,0x72,0x00,0x00,}},
- {0x8EB6,2,{0xDC,0x73,0x00,0x00,}},
- {0x8EB7,2,{0xDC,0x74,0x00,0x00,}},
- {0x8EB8,2,{0xDC,0x75,0x00,0x00,}},
- {0x8EB9,2,{0xDC,0x76,0x00,0x00,}},
- {0x8EBA,2,{0xCC,0xC9,0x00,0x00,}},
- {0x8EBB,2,{0xDC,0x77,0x00,0x00,}},
- {0x8EBC,2,{0xDC,0x78,0x00,0x00,}},
- {0x8EBD,2,{0xDC,0x79,0x00,0x00,}},
- {0x8EBE,2,{0xDC,0x7A,0x00,0x00,}},
- {0x8EBF,2,{0xDC,0x7B,0x00,0x00,}},
- {0x8EC0,2,{0xDC,0x7C,0x00,0x00,}},
- {0x8EC1,2,{0xDC,0x7D,0x00,0x00,}},
- {0x8EC2,2,{0xDC,0x7E,0x00,0x00,}},
- {0x8EC3,2,{0xDC,0x80,0x00,0x00,}},
- {0x8EC4,2,{0xDC,0x81,0x00,0x00,}},
- {0x8EC5,2,{0xDC,0x82,0x00,0x00,}},
- {0x8EC6,2,{0xDC,0x83,0x00,0x00,}},
- {0x8EC7,2,{0xDC,0x84,0x00,0x00,}},
- {0x8EC8,2,{0xDC,0x85,0x00,0x00,}},
- {0x8EC9,2,{0xDC,0x86,0x00,0x00,}},
- {0x8ECA,2,{0xDC,0x87,0x00,0x00,}},
- {0x8ECB,2,{0xDC,0x88,0x00,0x00,}},
- {0x8ECC,2,{0xDC,0x89,0x00,0x00,}},
- {0x8ECD,2,{0xDC,0x8A,0x00,0x00,}},
- {0x8ECE,2,{0xEA,0xA6,0x00,0x00,}},
- {0x8ECF,2,{0xDC,0x8B,0x00,0x00,}},
- {0x8ED0,2,{0xDC,0x8C,0x00,0x00,}},
- {0x8ED1,2,{0xDC,0x8D,0x00,0x00,}},
- {0x8ED2,2,{0xDC,0x8E,0x00,0x00,}},
- {0x8ED3,2,{0xDC,0x8F,0x00,0x00,}},
- {0x8ED4,2,{0xDC,0x90,0x00,0x00,}},
- {0x8ED5,2,{0xDC,0x91,0x00,0x00,}},
- {0x8ED6,2,{0xDC,0x92,0x00,0x00,}},
- {0x8ED7,2,{0xDC,0x93,0x00,0x00,}},
- {0x8ED8,2,{0xDC,0x94,0x00,0x00,}},
- {0x8ED9,2,{0xDC,0x95,0x00,0x00,}},
- {0x8EDA,2,{0xDC,0x96,0x00,0x00,}},
- {0x8EDB,2,{0xDC,0x97,0x00,0x00,}},
- {0x8EDC,2,{0xDC,0x98,0x00,0x00,}},
- {0x8EDD,2,{0xDC,0x99,0x00,0x00,}},
- {0x8EDE,2,{0xDC,0x9A,0x00,0x00,}},
- {0x8EDF,2,{0xDC,0x9B,0x00,0x00,}},
- {0x8EE0,2,{0xDC,0x9C,0x00,0x00,}},
- {0x8EE1,2,{0xDC,0x9D,0x00,0x00,}},
- {0x8EE2,2,{0xDC,0x9E,0x00,0x00,}},
- {0x8EE3,2,{0xDC,0x9F,0x00,0x00,}},
- {0x8EE4,2,{0xDC,0xA0,0x00,0x00,}},
- {0x8EE5,2,{0xDD,0x40,0x00,0x00,}},
- {0x8EE6,2,{0xDD,0x41,0x00,0x00,}},
- {0x8EE7,2,{0xDD,0x42,0x00,0x00,}},
- {0x8EE8,2,{0xDD,0x43,0x00,0x00,}},
- {0x8EE9,2,{0xDD,0x44,0x00,0x00,}},
- {0x8EEA,2,{0xDD,0x45,0x00,0x00,}},
- {0x8EEB,2,{0xDD,0x46,0x00,0x00,}},
- {0x8EEC,2,{0xDD,0x47,0x00,0x00,}},
- {0x8EED,2,{0xDD,0x48,0x00,0x00,}},
- {0x8EEE,2,{0xDD,0x49,0x00,0x00,}},
- {0x8EEF,2,{0xDD,0x4A,0x00,0x00,}},
- {0x8EF0,2,{0xDD,0x4B,0x00,0x00,}},
- {0x8EF1,2,{0xDD,0x4C,0x00,0x00,}},
- {0x8EF2,2,{0xDD,0x4D,0x00,0x00,}},
- {0x8EF3,2,{0xDD,0x4E,0x00,0x00,}},
- {0x8EF4,2,{0xDD,0x4F,0x00,0x00,}},
- {0x8EF5,2,{0xDD,0x50,0x00,0x00,}},
- {0x8EF6,2,{0xDD,0x51,0x00,0x00,}},
- {0x8EF7,2,{0xDD,0x52,0x00,0x00,}},
- {0x8EF8,2,{0xDD,0x53,0x00,0x00,}},
- {0x8EF9,2,{0xDD,0x54,0x00,0x00,}},
- {0x8EFA,2,{0xDD,0x55,0x00,0x00,}},
- {0x8EFB,2,{0xDD,0x56,0x00,0x00,}},
- {0x8EFC,2,{0xDD,0x57,0x00,0x00,}},
- {0x8EFD,2,{0xDD,0x58,0x00,0x00,}},
- {0x8EFE,2,{0xDD,0x59,0x00,0x00,}},
- {0x8EFF,2,{0xDD,0x5A,0x00,0x00,}},
- {0x8F00,2,{0xDD,0x5B,0x00,0x00,}},
- {0x8F01,2,{0xDD,0x5C,0x00,0x00,}},
- {0x8F02,2,{0xDD,0x5D,0x00,0x00,}},
- {0x8F03,2,{0xDD,0x5E,0x00,0x00,}},
- {0x8F04,2,{0xDD,0x5F,0x00,0x00,}},
- {0x8F05,2,{0xDD,0x60,0x00,0x00,}},
- {0x8F06,2,{0xDD,0x61,0x00,0x00,}},
- {0x8F07,2,{0xDD,0x62,0x00,0x00,}},
- {0x8F08,2,{0xDD,0x63,0x00,0x00,}},
- {0x8F09,2,{0xDD,0x64,0x00,0x00,}},
- {0x8F0A,2,{0xDD,0x65,0x00,0x00,}},
- {0x8F0B,2,{0xDD,0x66,0x00,0x00,}},
- {0x8F0C,2,{0xDD,0x67,0x00,0x00,}},
- {0x8F0D,2,{0xDD,0x68,0x00,0x00,}},
- {0x8F0E,2,{0xDD,0x69,0x00,0x00,}},
- {0x8F0F,2,{0xDD,0x6A,0x00,0x00,}},
- {0x8F10,2,{0xDD,0x6B,0x00,0x00,}},
- {0x8F11,2,{0xDD,0x6C,0x00,0x00,}},
- {0x8F12,2,{0xDD,0x6D,0x00,0x00,}},
- {0x8F13,2,{0xDD,0x6E,0x00,0x00,}},
- {0x8F14,2,{0xDD,0x6F,0x00,0x00,}},
- {0x8F15,2,{0xDD,0x70,0x00,0x00,}},
- {0x8F16,2,{0xDD,0x71,0x00,0x00,}},
- {0x8F17,2,{0xDD,0x72,0x00,0x00,}},
- {0x8F18,2,{0xDD,0x73,0x00,0x00,}},
- {0x8F19,2,{0xDD,0x74,0x00,0x00,}},
- {0x8F1A,2,{0xDD,0x75,0x00,0x00,}},
- {0x8F1B,2,{0xDD,0x76,0x00,0x00,}},
- {0x8F1C,2,{0xDD,0x77,0x00,0x00,}},
- {0x8F1D,2,{0xDD,0x78,0x00,0x00,}},
- {0x8F1E,2,{0xDD,0x79,0x00,0x00,}},
- {0x8F1F,2,{0xDD,0x7A,0x00,0x00,}},
- {0x8F20,2,{0xDD,0x7B,0x00,0x00,}},
- {0x8F21,2,{0xDD,0x7C,0x00,0x00,}},
- {0x8F22,2,{0xDD,0x7D,0x00,0x00,}},
- {0x8F23,2,{0xDD,0x7E,0x00,0x00,}},
- {0x8F24,2,{0xDD,0x80,0x00,0x00,}},
- {0x8F25,2,{0xDD,0x81,0x00,0x00,}},
- {0x8F26,2,{0xDD,0x82,0x00,0x00,}},
- {0x8F27,2,{0xDD,0x83,0x00,0x00,}},
- {0x8F28,2,{0xDD,0x84,0x00,0x00,}},
- {0x8F29,2,{0xDD,0x85,0x00,0x00,}},
- {0x8F2A,2,{0xDD,0x86,0x00,0x00,}},
- {0x8F2B,2,{0xDD,0x87,0x00,0x00,}},
- {0x8F2C,2,{0xDD,0x88,0x00,0x00,}},
- {0x8F2D,2,{0xDD,0x89,0x00,0x00,}},
- {0x8F2E,2,{0xDD,0x8A,0x00,0x00,}},
- {0x8F2F,2,{0xDD,0x8B,0x00,0x00,}},
- {0x8F30,2,{0xDD,0x8C,0x00,0x00,}},
- {0x8F31,2,{0xDD,0x8D,0x00,0x00,}},
- {0x8F32,2,{0xDD,0x8E,0x00,0x00,}},
- {0x8F33,2,{0xDD,0x8F,0x00,0x00,}},
- {0x8F34,2,{0xDD,0x90,0x00,0x00,}},
- {0x8F35,2,{0xDD,0x91,0x00,0x00,}},
- {0x8F36,2,{0xDD,0x92,0x00,0x00,}},
- {0x8F37,2,{0xDD,0x93,0x00,0x00,}},
- {0x8F38,2,{0xDD,0x94,0x00,0x00,}},
- {0x8F39,2,{0xDD,0x95,0x00,0x00,}},
- {0x8F3A,2,{0xDD,0x96,0x00,0x00,}},
- {0x8F3B,2,{0xDD,0x97,0x00,0x00,}},
- {0x8F3C,2,{0xDD,0x98,0x00,0x00,}},
- {0x8F3D,2,{0xDD,0x99,0x00,0x00,}},
- {0x8F3E,2,{0xDD,0x9A,0x00,0x00,}},
- {0x8F3F,2,{0xDD,0x9B,0x00,0x00,}},
- {0x8F40,2,{0xDD,0x9C,0x00,0x00,}},
- {0x8F41,2,{0xDD,0x9D,0x00,0x00,}},
- {0x8F42,2,{0xDD,0x9E,0x00,0x00,}},
- {0x8F43,2,{0xDD,0x9F,0x00,0x00,}},
- {0x8F44,2,{0xDD,0xA0,0x00,0x00,}},
- {0x8F45,2,{0xDE,0x40,0x00,0x00,}},
- {0x8F46,2,{0xDE,0x41,0x00,0x00,}},
- {0x8F47,2,{0xDE,0x42,0x00,0x00,}},
- {0x8F48,2,{0xDE,0x43,0x00,0x00,}},
- {0x8F49,2,{0xDE,0x44,0x00,0x00,}},
- {0x8F4A,2,{0xDE,0x45,0x00,0x00,}},
- {0x8F4B,2,{0xDE,0x46,0x00,0x00,}},
- {0x8F4C,2,{0xDE,0x47,0x00,0x00,}},
- {0x8F4D,2,{0xDE,0x48,0x00,0x00,}},
- {0x8F4E,2,{0xDE,0x49,0x00,0x00,}},
- {0x8F4F,2,{0xDE,0x4A,0x00,0x00,}},
- {0x8F50,2,{0xDE,0x4B,0x00,0x00,}},
- {0x8F51,2,{0xDE,0x4C,0x00,0x00,}},
- {0x8F52,2,{0xDE,0x4D,0x00,0x00,}},
- {0x8F53,2,{0xDE,0x4E,0x00,0x00,}},
- {0x8F54,2,{0xDE,0x4F,0x00,0x00,}},
- {0x8F55,2,{0xDE,0x50,0x00,0x00,}},
- {0x8F56,2,{0xDE,0x51,0x00,0x00,}},
- {0x8F57,2,{0xDE,0x52,0x00,0x00,}},
- {0x8F58,2,{0xDE,0x53,0x00,0x00,}},
- {0x8F59,2,{0xDE,0x54,0x00,0x00,}},
- {0x8F5A,2,{0xDE,0x55,0x00,0x00,}},
- {0x8F5B,2,{0xDE,0x56,0x00,0x00,}},
- {0x8F5C,2,{0xDE,0x57,0x00,0x00,}},
- {0x8F5D,2,{0xDE,0x58,0x00,0x00,}},
- {0x8F5E,2,{0xDE,0x59,0x00,0x00,}},
- {0x8F5F,2,{0xDE,0x5A,0x00,0x00,}},
- {0x8F60,2,{0xDE,0x5B,0x00,0x00,}},
- {0x8F61,2,{0xDE,0x5C,0x00,0x00,}},
- {0x8F62,2,{0xDE,0x5D,0x00,0x00,}},
- {0x8F63,2,{0xDE,0x5E,0x00,0x00,}},
- {0x8F64,2,{0xDE,0x5F,0x00,0x00,}},
- {0x8F65,2,{0xDE,0x60,0x00,0x00,}},
- {0x8F66,2,{0xB3,0xB5,0x00,0x00,}},
- {0x8F67,2,{0xD4,0xFE,0x00,0x00,}},
- {0x8F68,2,{0xB9,0xEC,0x00,0x00,}},
- {0x8F69,2,{0xD0,0xF9,0x00,0x00,}},
- {0x8F6A,2,{0xDE,0x61,0x00,0x00,}},
- {0x8F6B,2,{0xE9,0xED,0x00,0x00,}},
- {0x8F6C,2,{0xD7,0xAA,0x00,0x00,}},
- {0x8F6D,2,{0xE9,0xEE,0x00,0x00,}},
- {0x8F6E,2,{0xC2,0xD6,0x00,0x00,}},
- {0x8F6F,2,{0xC8,0xED,0x00,0x00,}},
- {0x8F70,2,{0xBA,0xE4,0x00,0x00,}},
- {0x8F71,2,{0xE9,0xEF,0x00,0x00,}},
- {0x8F72,2,{0xE9,0xF0,0x00,0x00,}},
- {0x8F73,2,{0xE9,0xF1,0x00,0x00,}},
- {0x8F74,2,{0xD6,0xE1,0x00,0x00,}},
- {0x8F75,2,{0xE9,0xF2,0x00,0x00,}},
- {0x8F76,2,{0xE9,0xF3,0x00,0x00,}},
- {0x8F77,2,{0xE9,0xF5,0x00,0x00,}},
- {0x8F78,2,{0xE9,0xF4,0x00,0x00,}},
- {0x8F79,2,{0xE9,0xF6,0x00,0x00,}},
- {0x8F7A,2,{0xE9,0xF7,0x00,0x00,}},
- {0x8F7B,2,{0xC7,0xE1,0x00,0x00,}},
- {0x8F7C,2,{0xE9,0xF8,0x00,0x00,}},
- {0x8F7D,2,{0xD4,0xD8,0x00,0x00,}},
- {0x8F7E,2,{0xE9,0xF9,0x00,0x00,}},
- {0x8F7F,2,{0xBD,0xCE,0x00,0x00,}},
- {0x8F80,2,{0xDE,0x62,0x00,0x00,}},
- {0x8F81,2,{0xE9,0xFA,0x00,0x00,}},
- {0x8F82,2,{0xE9,0xFB,0x00,0x00,}},
- {0x8F83,2,{0xBD,0xCF,0x00,0x00,}},
- {0x8F84,2,{0xE9,0xFC,0x00,0x00,}},
- {0x8F85,2,{0xB8,0xA8,0x00,0x00,}},
- {0x8F86,2,{0xC1,0xBE,0x00,0x00,}},
- {0x8F87,2,{0xE9,0xFD,0x00,0x00,}},
- {0x8F88,2,{0xB1,0xB2,0x00,0x00,}},
- {0x8F89,2,{0xBB,0xD4,0x00,0x00,}},
- {0x8F8A,2,{0xB9,0xF5,0x00,0x00,}},
- {0x8F8B,2,{0xE9,0xFE,0x00,0x00,}},
- {0x8F8C,2,{0xDE,0x63,0x00,0x00,}},
- {0x8F8D,2,{0xEA,0xA1,0x00,0x00,}},
- {0x8F8E,2,{0xEA,0xA2,0x00,0x00,}},
- {0x8F8F,2,{0xEA,0xA3,0x00,0x00,}},
- {0x8F90,2,{0xB7,0xF8,0x00,0x00,}},
- {0x8F91,2,{0xBC,0xAD,0x00,0x00,}},
- {0x8F92,2,{0xDE,0x64,0x00,0x00,}},
- {0x8F93,2,{0xCA,0xE4,0x00,0x00,}},
- {0x8F94,2,{0xE0,0xCE,0x00,0x00,}},
- {0x8F95,2,{0xD4,0xAF,0x00,0x00,}},
- {0x8F96,2,{0xCF,0xBD,0x00,0x00,}},
- {0x8F97,2,{0xD5,0xB7,0x00,0x00,}},
- {0x8F98,2,{0xEA,0xA4,0x00,0x00,}},
- {0x8F99,2,{0xD5,0xDE,0x00,0x00,}},
- {0x8F9A,2,{0xEA,0xA5,0x00,0x00,}},
- {0x8F9B,2,{0xD0,0xC1,0x00,0x00,}},
- {0x8F9C,2,{0xB9,0xBC,0x00,0x00,}},
- {0x8F9D,2,{0xDE,0x65,0x00,0x00,}},
- {0x8F9E,2,{0xB4,0xC7,0x00,0x00,}},
- {0x8F9F,2,{0xB1,0xD9,0x00,0x00,}},
- {0x8FA0,2,{0xDE,0x66,0x00,0x00,}},
- {0x8FA1,2,{0xDE,0x67,0x00,0x00,}},
- {0x8FA2,2,{0xDE,0x68,0x00,0x00,}},
- {0x8FA3,2,{0xC0,0xB1,0x00,0x00,}},
- {0x8FA4,2,{0xDE,0x69,0x00,0x00,}},
- {0x8FA5,2,{0xDE,0x6A,0x00,0x00,}},
- {0x8FA6,2,{0xDE,0x6B,0x00,0x00,}},
- {0x8FA7,2,{0xDE,0x6C,0x00,0x00,}},
- {0x8FA8,2,{0xB1,0xE6,0x00,0x00,}},
- {0x8FA9,2,{0xB1,0xE7,0x00,0x00,}},
- {0x8FAA,2,{0xDE,0x6D,0x00,0x00,}},
- {0x8FAB,2,{0xB1,0xE8,0x00,0x00,}},
- {0x8FAC,2,{0xDE,0x6E,0x00,0x00,}},
- {0x8FAD,2,{0xDE,0x6F,0x00,0x00,}},
- {0x8FAE,2,{0xDE,0x70,0x00,0x00,}},
- {0x8FAF,2,{0xDE,0x71,0x00,0x00,}},
- {0x8FB0,2,{0xB3,0xBD,0x00,0x00,}},
- {0x8FB1,2,{0xC8,0xE8,0x00,0x00,}},
- {0x8FB2,2,{0xDE,0x72,0x00,0x00,}},
- {0x8FB3,2,{0xDE,0x73,0x00,0x00,}},
- {0x8FB4,2,{0xDE,0x74,0x00,0x00,}},
- {0x8FB5,2,{0xDE,0x75,0x00,0x00,}},
- {0x8FB6,2,{0xE5,0xC1,0x00,0x00,}},
- {0x8FB7,2,{0xDE,0x76,0x00,0x00,}},
- {0x8FB8,2,{0xDE,0x77,0x00,0x00,}},
- {0x8FB9,2,{0xB1,0xDF,0x00,0x00,}},
- {0x8FBA,2,{0xDE,0x78,0x00,0x00,}},
- {0x8FBB,2,{0xDE,0x79,0x00,0x00,}},
- {0x8FBC,2,{0xDE,0x7A,0x00,0x00,}},
- {0x8FBD,2,{0xC1,0xC9,0x00,0x00,}},
- {0x8FBE,2,{0xB4,0xEF,0x00,0x00,}},
- {0x8FBF,2,{0xDE,0x7B,0x00,0x00,}},
- {0x8FC0,2,{0xDE,0x7C,0x00,0x00,}},
- {0x8FC1,2,{0xC7,0xA8,0x00,0x00,}},
- {0x8FC2,2,{0xD3,0xD8,0x00,0x00,}},
- {0x8FC3,2,{0xDE,0x7D,0x00,0x00,}},
- {0x8FC4,2,{0xC6,0xF9,0x00,0x00,}},
- {0x8FC5,2,{0xD1,0xB8,0x00,0x00,}},
- {0x8FC6,2,{0xDE,0x7E,0x00,0x00,}},
- {0x8FC7,2,{0xB9,0xFD,0x00,0x00,}},
- {0x8FC8,2,{0xC2,0xF5,0x00,0x00,}},
- {0x8FC9,2,{0xDE,0x80,0x00,0x00,}},
- {0x8FCA,2,{0xDE,0x81,0x00,0x00,}},
- {0x8FCB,2,{0xDE,0x82,0x00,0x00,}},
- {0x8FCC,2,{0xDE,0x83,0x00,0x00,}},
- {0x8FCD,2,{0xDE,0x84,0x00,0x00,}},
- {0x8FCE,2,{0xD3,0xAD,0x00,0x00,}},
- {0x8FCF,2,{0xDE,0x85,0x00,0x00,}},
- {0x8FD0,2,{0xD4,0xCB,0x00,0x00,}},
- {0x8FD1,2,{0xBD,0xFC,0x00,0x00,}},
- {0x8FD2,2,{0xDE,0x86,0x00,0x00,}},
- {0x8FD3,2,{0xE5,0xC2,0x00,0x00,}},
- {0x8FD4,2,{0xB7,0xB5,0x00,0x00,}},
- {0x8FD5,2,{0xE5,0xC3,0x00,0x00,}},
- {0x8FD6,2,{0xDE,0x87,0x00,0x00,}},
- {0x8FD7,2,{0xDE,0x88,0x00,0x00,}},
- {0x8FD8,2,{0xBB,0xB9,0x00,0x00,}},
- {0x8FD9,2,{0xD5,0xE2,0x00,0x00,}},
- {0x8FDA,2,{0xDE,0x89,0x00,0x00,}},
- {0x8FDB,2,{0xBD,0xF8,0x00,0x00,}},
- {0x8FDC,2,{0xD4,0xB6,0x00,0x00,}},
- {0x8FDD,2,{0xCE,0xA5,0x00,0x00,}},
- {0x8FDE,2,{0xC1,0xAC,0x00,0x00,}},
- {0x8FDF,2,{0xB3,0xD9,0x00,0x00,}},
- {0x8FE0,2,{0xDE,0x8A,0x00,0x00,}},
- {0x8FE1,2,{0xDE,0x8B,0x00,0x00,}},
- {0x8FE2,2,{0xCC,0xF6,0x00,0x00,}},
- {0x8FE3,2,{0xDE,0x8C,0x00,0x00,}},
- {0x8FE4,2,{0xE5,0xC6,0x00,0x00,}},
- {0x8FE5,2,{0xE5,0xC4,0x00,0x00,}},
- {0x8FE6,2,{0xE5,0xC8,0x00,0x00,}},
- {0x8FE7,2,{0xDE,0x8D,0x00,0x00,}},
- {0x8FE8,2,{0xE5,0xCA,0x00,0x00,}},
- {0x8FE9,2,{0xE5,0xC7,0x00,0x00,}},
- {0x8FEA,2,{0xB5,0xCF,0x00,0x00,}},
- {0x8FEB,2,{0xC6,0xC8,0x00,0x00,}},
- {0x8FEC,2,{0xDE,0x8E,0x00,0x00,}},
- {0x8FED,2,{0xB5,0xFC,0x00,0x00,}},
- {0x8FEE,2,{0xE5,0xC5,0x00,0x00,}},
- {0x8FEF,2,{0xDE,0x8F,0x00,0x00,}},
- {0x8FF0,2,{0xCA,0xF6,0x00,0x00,}},
- {0x8FF1,2,{0xDE,0x90,0x00,0x00,}},
- {0x8FF2,2,{0xDE,0x91,0x00,0x00,}},
- {0x8FF3,2,{0xE5,0xC9,0x00,0x00,}},
- {0x8FF4,2,{0xDE,0x92,0x00,0x00,}},
- {0x8FF5,2,{0xDE,0x93,0x00,0x00,}},
- {0x8FF6,2,{0xDE,0x94,0x00,0x00,}},
- {0x8FF7,2,{0xC3,0xD4,0x00,0x00,}},
- {0x8FF8,2,{0xB1,0xC5,0x00,0x00,}},
- {0x8FF9,2,{0xBC,0xA3,0x00,0x00,}},
- {0x8FFA,2,{0xDE,0x95,0x00,0x00,}},
- {0x8FFB,2,{0xDE,0x96,0x00,0x00,}},
- {0x8FFC,2,{0xDE,0x97,0x00,0x00,}},
- {0x8FFD,2,{0xD7,0xB7,0x00,0x00,}},
- {0x8FFE,2,{0xDE,0x98,0x00,0x00,}},
- {0x8FFF,2,{0xDE,0x99,0x00,0x00,}},
- {0x9000,2,{0xCD,0xCB,0x00,0x00,}},
- {0x9001,2,{0xCB,0xCD,0x00,0x00,}},
- {0x9002,2,{0xCA,0xCA,0x00,0x00,}},
- {0x9003,2,{0xCC,0xD3,0x00,0x00,}},
- {0x9004,2,{0xE5,0xCC,0x00,0x00,}},
- {0x9005,2,{0xE5,0xCB,0x00,0x00,}},
- {0x9006,2,{0xC4,0xE6,0x00,0x00,}},
- {0x9007,2,{0xDE,0x9A,0x00,0x00,}},
- {0x9008,2,{0xDE,0x9B,0x00,0x00,}},
- {0x9009,2,{0xD1,0xA1,0x00,0x00,}},
- {0x900A,2,{0xD1,0xB7,0x00,0x00,}},
- {0x900B,2,{0xE5,0xCD,0x00,0x00,}},
- {0x900C,2,{0xDE,0x9C,0x00,0x00,}},
- {0x900D,2,{0xE5,0xD0,0x00,0x00,}},
- {0x900E,2,{0xDE,0x9D,0x00,0x00,}},
- {0x900F,2,{0xCD,0xB8,0x00,0x00,}},
- {0x9010,2,{0xD6,0xF0,0x00,0x00,}},
- {0x9011,2,{0xE5,0xCF,0x00,0x00,}},
- {0x9012,2,{0xB5,0xDD,0x00,0x00,}},
- {0x9013,2,{0xDE,0x9E,0x00,0x00,}},
- {0x9014,2,{0xCD,0xBE,0x00,0x00,}},
- {0x9015,2,{0xDE,0x9F,0x00,0x00,}},
- {0x9016,2,{0xE5,0xD1,0x00,0x00,}},
- {0x9017,2,{0xB6,0xBA,0x00,0x00,}},
- {0x9018,2,{0xDE,0xA0,0x00,0x00,}},
- {0x9019,2,{0xDF,0x40,0x00,0x00,}},
- {0x901A,2,{0xCD,0xA8,0x00,0x00,}},
- {0x901B,2,{0xB9,0xE4,0x00,0x00,}},
- {0x901C,2,{0xDF,0x41,0x00,0x00,}},
- {0x901D,2,{0xCA,0xC5,0x00,0x00,}},
- {0x901E,2,{0xB3,0xD1,0x00,0x00,}},
- {0x901F,2,{0xCB,0xD9,0x00,0x00,}},
- {0x9020,2,{0xD4,0xEC,0x00,0x00,}},
- {0x9021,2,{0xE5,0xD2,0x00,0x00,}},
- {0x9022,2,{0xB7,0xEA,0x00,0x00,}},
- {0x9023,2,{0xDF,0x42,0x00,0x00,}},
- {0x9024,2,{0xDF,0x43,0x00,0x00,}},
- {0x9025,2,{0xDF,0x44,0x00,0x00,}},
- {0x9026,2,{0xE5,0xCE,0x00,0x00,}},
- {0x9027,2,{0xDF,0x45,0x00,0x00,}},
- {0x9028,2,{0xDF,0x46,0x00,0x00,}},
- {0x9029,2,{0xDF,0x47,0x00,0x00,}},
- {0x902A,2,{0xDF,0x48,0x00,0x00,}},
- {0x902B,2,{0xDF,0x49,0x00,0x00,}},
- {0x902C,2,{0xDF,0x4A,0x00,0x00,}},
- {0x902D,2,{0xE5,0xD5,0x00,0x00,}},
- {0x902E,2,{0xB4,0xFE,0x00,0x00,}},
- {0x902F,2,{0xE5,0xD6,0x00,0x00,}},
- {0x9030,2,{0xDF,0x4B,0x00,0x00,}},
- {0x9031,2,{0xDF,0x4C,0x00,0x00,}},
- {0x9032,2,{0xDF,0x4D,0x00,0x00,}},
- {0x9033,2,{0xDF,0x4E,0x00,0x00,}},
- {0x9034,2,{0xDF,0x4F,0x00,0x00,}},
- {0x9035,2,{0xE5,0xD3,0x00,0x00,}},
- {0x9036,2,{0xE5,0xD4,0x00,0x00,}},
- {0x9037,2,{0xDF,0x50,0x00,0x00,}},
- {0x9038,2,{0xD2,0xDD,0x00,0x00,}},
- {0x9039,2,{0xDF,0x51,0x00,0x00,}},
- {0x903A,2,{0xDF,0x52,0x00,0x00,}},
- {0x903B,2,{0xC2,0xDF,0x00,0x00,}},
- {0x903C,2,{0xB1,0xC6,0x00,0x00,}},
- {0x903D,2,{0xDF,0x53,0x00,0x00,}},
- {0x903E,2,{0xD3,0xE2,0x00,0x00,}},
- {0x903F,2,{0xDF,0x54,0x00,0x00,}},
- {0x9040,2,{0xDF,0x55,0x00,0x00,}},
- {0x9041,2,{0xB6,0xDD,0x00,0x00,}},
- {0x9042,2,{0xCB,0xEC,0x00,0x00,}},
- {0x9043,2,{0xDF,0x56,0x00,0x00,}},
- {0x9044,2,{0xE5,0xD7,0x00,0x00,}},
- {0x9045,2,{0xDF,0x57,0x00,0x00,}},
- {0x9046,2,{0xDF,0x58,0x00,0x00,}},
- {0x9047,2,{0xD3,0xF6,0x00,0x00,}},
- {0x9048,2,{0xDF,0x59,0x00,0x00,}},
- {0x9049,2,{0xDF,0x5A,0x00,0x00,}},
- {0x904A,2,{0xDF,0x5B,0x00,0x00,}},
- {0x904B,2,{0xDF,0x5C,0x00,0x00,}},
- {0x904C,2,{0xDF,0x5D,0x00,0x00,}},
- {0x904D,2,{0xB1,0xE9,0x00,0x00,}},
- {0x904E,2,{0xDF,0x5E,0x00,0x00,}},
- {0x904F,2,{0xB6,0xF4,0x00,0x00,}},
- {0x9050,2,{0xE5,0xDA,0x00,0x00,}},
- {0x9051,2,{0xE5,0xD8,0x00,0x00,}},
- {0x9052,2,{0xE5,0xD9,0x00,0x00,}},
- {0x9053,2,{0xB5,0xC0,0x00,0x00,}},
- {0x9054,2,{0xDF,0x5F,0x00,0x00,}},
- {0x9055,2,{0xDF,0x60,0x00,0x00,}},
- {0x9056,2,{0xDF,0x61,0x00,0x00,}},
- {0x9057,2,{0xD2,0xC5,0x00,0x00,}},
- {0x9058,2,{0xE5,0xDC,0x00,0x00,}},
- {0x9059,2,{0xDF,0x62,0x00,0x00,}},
- {0x905A,2,{0xDF,0x63,0x00,0x00,}},
- {0x905B,2,{0xE5,0xDE,0x00,0x00,}},
- {0x905C,2,{0xDF,0x64,0x00,0x00,}},
- {0x905D,2,{0xDF,0x65,0x00,0x00,}},
- {0x905E,2,{0xDF,0x66,0x00,0x00,}},
- {0x905F,2,{0xDF,0x67,0x00,0x00,}},
- {0x9060,2,{0xDF,0x68,0x00,0x00,}},
- {0x9061,2,{0xDF,0x69,0x00,0x00,}},
- {0x9062,2,{0xE5,0xDD,0x00,0x00,}},
- {0x9063,2,{0xC7,0xB2,0x00,0x00,}},
- {0x9064,2,{0xDF,0x6A,0x00,0x00,}},
- {0x9065,2,{0xD2,0xA3,0x00,0x00,}},
- {0x9066,2,{0xDF,0x6B,0x00,0x00,}},
- {0x9067,2,{0xDF,0x6C,0x00,0x00,}},
- {0x9068,2,{0xE5,0xDB,0x00,0x00,}},
- {0x9069,2,{0xDF,0x6D,0x00,0x00,}},
- {0x906A,2,{0xDF,0x6E,0x00,0x00,}},
- {0x906B,2,{0xDF,0x6F,0x00,0x00,}},
- {0x906C,2,{0xDF,0x70,0x00,0x00,}},
- {0x906D,2,{0xD4,0xE2,0x00,0x00,}},
- {0x906E,2,{0xD5,0xDA,0x00,0x00,}},
- {0x906F,2,{0xDF,0x71,0x00,0x00,}},
- {0x9070,2,{0xDF,0x72,0x00,0x00,}},
- {0x9071,2,{0xDF,0x73,0x00,0x00,}},
- {0x9072,2,{0xDF,0x74,0x00,0x00,}},
- {0x9073,2,{0xDF,0x75,0x00,0x00,}},
- {0x9074,2,{0xE5,0xE0,0x00,0x00,}},
- {0x9075,2,{0xD7,0xF1,0x00,0x00,}},
- {0x9076,2,{0xDF,0x76,0x00,0x00,}},
- {0x9077,2,{0xDF,0x77,0x00,0x00,}},
- {0x9078,2,{0xDF,0x78,0x00,0x00,}},
- {0x9079,2,{0xDF,0x79,0x00,0x00,}},
- {0x907A,2,{0xDF,0x7A,0x00,0x00,}},
- {0x907B,2,{0xDF,0x7B,0x00,0x00,}},
- {0x907C,2,{0xDF,0x7C,0x00,0x00,}},
- {0x907D,2,{0xE5,0xE1,0x00,0x00,}},
- {0x907E,2,{0xDF,0x7D,0x00,0x00,}},
- {0x907F,2,{0xB1,0xDC,0x00,0x00,}},
- {0x9080,2,{0xD1,0xFB,0x00,0x00,}},
- {0x9081,2,{0xDF,0x7E,0x00,0x00,}},
- {0x9082,2,{0xE5,0xE2,0x00,0x00,}},
- {0x9083,2,{0xE5,0xE4,0x00,0x00,}},
- {0x9084,2,{0xDF,0x80,0x00,0x00,}},
- {0x9085,2,{0xDF,0x81,0x00,0x00,}},
- {0x9086,2,{0xDF,0x82,0x00,0x00,}},
- {0x9087,2,{0xDF,0x83,0x00,0x00,}},
- {0x9088,2,{0xE5,0xE3,0x00,0x00,}},
- {0x9089,2,{0xDF,0x84,0x00,0x00,}},
- {0x908A,2,{0xDF,0x85,0x00,0x00,}},
- {0x908B,2,{0xE5,0xE5,0x00,0x00,}},
- {0x908C,2,{0xDF,0x86,0x00,0x00,}},
- {0x908D,2,{0xDF,0x87,0x00,0x00,}},
- {0x908E,2,{0xDF,0x88,0x00,0x00,}},
- {0x908F,2,{0xDF,0x89,0x00,0x00,}},
- {0x9090,2,{0xDF,0x8A,0x00,0x00,}},
- {0x9091,2,{0xD2,0xD8,0x00,0x00,}},
- {0x9092,2,{0xDF,0x8B,0x00,0x00,}},
- {0x9093,2,{0xB5,0xCB,0x00,0x00,}},
- {0x9094,2,{0xDF,0x8C,0x00,0x00,}},
- {0x9095,2,{0xE7,0xDF,0x00,0x00,}},
- {0x9096,2,{0xDF,0x8D,0x00,0x00,}},
- {0x9097,2,{0xDA,0xF5,0x00,0x00,}},
- {0x9098,2,{0xDF,0x8E,0x00,0x00,}},
- {0x9099,2,{0xDA,0xF8,0x00,0x00,}},
- {0x909A,2,{0xDF,0x8F,0x00,0x00,}},
- {0x909B,2,{0xDA,0xF6,0x00,0x00,}},
- {0x909C,2,{0xDF,0x90,0x00,0x00,}},
- {0x909D,2,{0xDA,0xF7,0x00,0x00,}},
- {0x909E,2,{0xDF,0x91,0x00,0x00,}},
- {0x909F,2,{0xDF,0x92,0x00,0x00,}},
- {0x90A0,2,{0xDF,0x93,0x00,0x00,}},
- {0x90A1,2,{0xDA,0xFA,0x00,0x00,}},
- {0x90A2,2,{0xD0,0xCF,0x00,0x00,}},
- {0x90A3,2,{0xC4,0xC7,0x00,0x00,}},
- {0x90A4,2,{0xDF,0x94,0x00,0x00,}},
- {0x90A5,2,{0xDF,0x95,0x00,0x00,}},
- {0x90A6,2,{0xB0,0xEE,0x00,0x00,}},
- {0x90A7,2,{0xDF,0x96,0x00,0x00,}},
- {0x90A8,2,{0xDF,0x97,0x00,0x00,}},
- {0x90A9,2,{0xDF,0x98,0x00,0x00,}},
- {0x90AA,2,{0xD0,0xB0,0x00,0x00,}},
- {0x90AB,2,{0xDF,0x99,0x00,0x00,}},
- {0x90AC,2,{0xDA,0xF9,0x00,0x00,}},
- {0x90AD,2,{0xDF,0x9A,0x00,0x00,}},
- {0x90AE,2,{0xD3,0xCA,0x00,0x00,}},
- {0x90AF,2,{0xBA,0xAA,0x00,0x00,}},
- {0x90B0,2,{0xDB,0xA2,0x00,0x00,}},
- {0x90B1,2,{0xC7,0xF1,0x00,0x00,}},
- {0x90B2,2,{0xDF,0x9B,0x00,0x00,}},
- {0x90B3,2,{0xDA,0xFC,0x00,0x00,}},
- {0x90B4,2,{0xDA,0xFB,0x00,0x00,}},
- {0x90B5,2,{0xC9,0xDB,0x00,0x00,}},
- {0x90B6,2,{0xDA,0xFD,0x00,0x00,}},
- {0x90B7,2,{0xDF,0x9C,0x00,0x00,}},
- {0x90B8,2,{0xDB,0xA1,0x00,0x00,}},
- {0x90B9,2,{0xD7,0xDE,0x00,0x00,}},
- {0x90BA,2,{0xDA,0xFE,0x00,0x00,}},
- {0x90BB,2,{0xC1,0xDA,0x00,0x00,}},
- {0x90BC,2,{0xDF,0x9D,0x00,0x00,}},
- {0x90BD,2,{0xDF,0x9E,0x00,0x00,}},
- {0x90BE,2,{0xDB,0xA5,0x00,0x00,}},
- {0x90BF,2,{0xDF,0x9F,0x00,0x00,}},
- {0x90C0,2,{0xDF,0xA0,0x00,0x00,}},
- {0x90C1,2,{0xD3,0xF4,0x00,0x00,}},
- {0x90C2,2,{0xE0,0x40,0x00,0x00,}},
- {0x90C3,2,{0xE0,0x41,0x00,0x00,}},
- {0x90C4,2,{0xDB,0xA7,0x00,0x00,}},
- {0x90C5,2,{0xDB,0xA4,0x00,0x00,}},
- {0x90C6,2,{0xE0,0x42,0x00,0x00,}},
- {0x90C7,2,{0xDB,0xA8,0x00,0x00,}},
- {0x90C8,2,{0xE0,0x43,0x00,0x00,}},
- {0x90C9,2,{0xE0,0x44,0x00,0x00,}},
- {0x90CA,2,{0xBD,0xBC,0x00,0x00,}},
- {0x90CB,2,{0xE0,0x45,0x00,0x00,}},
- {0x90CC,2,{0xE0,0x46,0x00,0x00,}},
- {0x90CD,2,{0xE0,0x47,0x00,0x00,}},
- {0x90CE,2,{0xC0,0xC9,0x00,0x00,}},
- {0x90CF,2,{0xDB,0xA3,0x00,0x00,}},
- {0x90D0,2,{0xDB,0xA6,0x00,0x00,}},
- {0x90D1,2,{0xD6,0xA3,0x00,0x00,}},
- {0x90D2,2,{0xE0,0x48,0x00,0x00,}},
- {0x90D3,2,{0xDB,0xA9,0x00,0x00,}},
- {0x90D4,2,{0xE0,0x49,0x00,0x00,}},
- {0x90D5,2,{0xE0,0x4A,0x00,0x00,}},
- {0x90D6,2,{0xE0,0x4B,0x00,0x00,}},
- {0x90D7,2,{0xDB,0xAD,0x00,0x00,}},
- {0x90D8,2,{0xE0,0x4C,0x00,0x00,}},
- {0x90D9,2,{0xE0,0x4D,0x00,0x00,}},
- {0x90DA,2,{0xE0,0x4E,0x00,0x00,}},
- {0x90DB,2,{0xDB,0xAE,0x00,0x00,}},
- {0x90DC,2,{0xDB,0xAC,0x00,0x00,}},
- {0x90DD,2,{0xBA,0xC2,0x00,0x00,}},
- {0x90DE,2,{0xE0,0x4F,0x00,0x00,}},
- {0x90DF,2,{0xE0,0x50,0x00,0x00,}},
- {0x90E0,2,{0xE0,0x51,0x00,0x00,}},
- {0x90E1,2,{0xBF,0xA4,0x00,0x00,}},
- {0x90E2,2,{0xDB,0xAB,0x00,0x00,}},
- {0x90E3,2,{0xE0,0x52,0x00,0x00,}},
- {0x90E4,2,{0xE0,0x53,0x00,0x00,}},
- {0x90E5,2,{0xE0,0x54,0x00,0x00,}},
- {0x90E6,2,{0xDB,0xAA,0x00,0x00,}},
- {0x90E7,2,{0xD4,0xC7,0x00,0x00,}},
- {0x90E8,2,{0xB2,0xBF,0x00,0x00,}},
- {0x90E9,2,{0xE0,0x55,0x00,0x00,}},
- {0x90EA,2,{0xE0,0x56,0x00,0x00,}},
- {0x90EB,2,{0xDB,0xAF,0x00,0x00,}},
- {0x90EC,2,{0xE0,0x57,0x00,0x00,}},
- {0x90ED,2,{0xB9,0xF9,0x00,0x00,}},
- {0x90EE,2,{0xE0,0x58,0x00,0x00,}},
- {0x90EF,2,{0xDB,0xB0,0x00,0x00,}},
- {0x90F0,2,{0xE0,0x59,0x00,0x00,}},
- {0x90F1,2,{0xE0,0x5A,0x00,0x00,}},
- {0x90F2,2,{0xE0,0x5B,0x00,0x00,}},
- {0x90F3,2,{0xE0,0x5C,0x00,0x00,}},
- {0x90F4,2,{0xB3,0xBB,0x00,0x00,}},
- {0x90F5,2,{0xE0,0x5D,0x00,0x00,}},
- {0x90F6,2,{0xE0,0x5E,0x00,0x00,}},
- {0x90F7,2,{0xE0,0x5F,0x00,0x00,}},
- {0x90F8,2,{0xB5,0xA6,0x00,0x00,}},
- {0x90F9,2,{0xE0,0x60,0x00,0x00,}},
- {0x90FA,2,{0xE0,0x61,0x00,0x00,}},
- {0x90FB,2,{0xE0,0x62,0x00,0x00,}},
- {0x90FC,2,{0xE0,0x63,0x00,0x00,}},
- {0x90FD,2,{0xB6,0xBC,0x00,0x00,}},
- {0x90FE,2,{0xDB,0xB1,0x00,0x00,}},
- {0x90FF,2,{0xE0,0x64,0x00,0x00,}},
- {0x9100,2,{0xE0,0x65,0x00,0x00,}},
- {0x9101,2,{0xE0,0x66,0x00,0x00,}},
- {0x9102,2,{0xB6,0xF5,0x00,0x00,}},
- {0x9103,2,{0xE0,0x67,0x00,0x00,}},
- {0x9104,2,{0xDB,0xB2,0x00,0x00,}},
- {0x9105,2,{0xE0,0x68,0x00,0x00,}},
- {0x9106,2,{0xE0,0x69,0x00,0x00,}},
- {0x9107,2,{0xE0,0x6A,0x00,0x00,}},
- {0x9108,2,{0xE0,0x6B,0x00,0x00,}},
- {0x9109,2,{0xE0,0x6C,0x00,0x00,}},
- {0x910A,2,{0xE0,0x6D,0x00,0x00,}},
- {0x910B,2,{0xE0,0x6E,0x00,0x00,}},
- {0x910C,2,{0xE0,0x6F,0x00,0x00,}},
- {0x910D,2,{0xE0,0x70,0x00,0x00,}},
- {0x910E,2,{0xE0,0x71,0x00,0x00,}},
- {0x910F,2,{0xE0,0x72,0x00,0x00,}},
- {0x9110,2,{0xE0,0x73,0x00,0x00,}},
- {0x9111,2,{0xE0,0x74,0x00,0x00,}},
- {0x9112,2,{0xE0,0x75,0x00,0x00,}},
- {0x9113,2,{0xE0,0x76,0x00,0x00,}},
- {0x9114,2,{0xE0,0x77,0x00,0x00,}},
- {0x9115,2,{0xE0,0x78,0x00,0x00,}},
- {0x9116,2,{0xE0,0x79,0x00,0x00,}},
- {0x9117,2,{0xE0,0x7A,0x00,0x00,}},
- {0x9118,2,{0xE0,0x7B,0x00,0x00,}},
- {0x9119,2,{0xB1,0xC9,0x00,0x00,}},
- {0x911A,2,{0xE0,0x7C,0x00,0x00,}},
- {0x911B,2,{0xE0,0x7D,0x00,0x00,}},
- {0x911C,2,{0xE0,0x7E,0x00,0x00,}},
- {0x911D,2,{0xE0,0x80,0x00,0x00,}},
- {0x911E,2,{0xDB,0xB4,0x00,0x00,}},
- {0x911F,2,{0xE0,0x81,0x00,0x00,}},
- {0x9120,2,{0xE0,0x82,0x00,0x00,}},
- {0x9121,2,{0xE0,0x83,0x00,0x00,}},
- {0x9122,2,{0xDB,0xB3,0x00,0x00,}},
- {0x9123,2,{0xDB,0xB5,0x00,0x00,}},
- {0x9124,2,{0xE0,0x84,0x00,0x00,}},
- {0x9125,2,{0xE0,0x85,0x00,0x00,}},
- {0x9126,2,{0xE0,0x86,0x00,0x00,}},
- {0x9127,2,{0xE0,0x87,0x00,0x00,}},
- {0x9128,2,{0xE0,0x88,0x00,0x00,}},
- {0x9129,2,{0xE0,0x89,0x00,0x00,}},
- {0x912A,2,{0xE0,0x8A,0x00,0x00,}},
- {0x912B,2,{0xE0,0x8B,0x00,0x00,}},
- {0x912C,2,{0xE0,0x8C,0x00,0x00,}},
- {0x912D,2,{0xE0,0x8D,0x00,0x00,}},
- {0x912E,2,{0xE0,0x8E,0x00,0x00,}},
- {0x912F,2,{0xDB,0xB7,0x00,0x00,}},
- {0x9130,2,{0xE0,0x8F,0x00,0x00,}},
- {0x9131,2,{0xDB,0xB6,0x00,0x00,}},
- {0x9132,2,{0xE0,0x90,0x00,0x00,}},
- {0x9133,2,{0xE0,0x91,0x00,0x00,}},
- {0x9134,2,{0xE0,0x92,0x00,0x00,}},
- {0x9135,2,{0xE0,0x93,0x00,0x00,}},
- {0x9136,2,{0xE0,0x94,0x00,0x00,}},
- {0x9137,2,{0xE0,0x95,0x00,0x00,}},
- {0x9138,2,{0xE0,0x96,0x00,0x00,}},
- {0x9139,2,{0xDB,0xB8,0x00,0x00,}},
- {0x913A,2,{0xE0,0x97,0x00,0x00,}},
- {0x913B,2,{0xE0,0x98,0x00,0x00,}},
- {0x913C,2,{0xE0,0x99,0x00,0x00,}},
- {0x913D,2,{0xE0,0x9A,0x00,0x00,}},
- {0x913E,2,{0xE0,0x9B,0x00,0x00,}},
- {0x913F,2,{0xE0,0x9C,0x00,0x00,}},
- {0x9140,2,{0xE0,0x9D,0x00,0x00,}},
- {0x9141,2,{0xE0,0x9E,0x00,0x00,}},
- {0x9142,2,{0xE0,0x9F,0x00,0x00,}},
- {0x9143,2,{0xDB,0xB9,0x00,0x00,}},
- {0x9144,2,{0xE0,0xA0,0x00,0x00,}},
- {0x9145,2,{0xE1,0x40,0x00,0x00,}},
- {0x9146,2,{0xDB,0xBA,0x00,0x00,}},
- {0x9147,2,{0xE1,0x41,0x00,0x00,}},
- {0x9148,2,{0xE1,0x42,0x00,0x00,}},
- {0x9149,2,{0xD3,0xCF,0x00,0x00,}},
- {0x914A,2,{0xF4,0xFA,0x00,0x00,}},
- {0x914B,2,{0xC7,0xF5,0x00,0x00,}},
- {0x914C,2,{0xD7,0xC3,0x00,0x00,}},
- {0x914D,2,{0xC5,0xE4,0x00,0x00,}},
- {0x914E,2,{0xF4,0xFC,0x00,0x00,}},
- {0x914F,2,{0xF4,0xFD,0x00,0x00,}},
- {0x9150,2,{0xF4,0xFB,0x00,0x00,}},
- {0x9151,2,{0xE1,0x43,0x00,0x00,}},
- {0x9152,2,{0xBE,0xC6,0x00,0x00,}},
- {0x9153,2,{0xE1,0x44,0x00,0x00,}},
- {0x9154,2,{0xE1,0x45,0x00,0x00,}},
- {0x9155,2,{0xE1,0x46,0x00,0x00,}},
- {0x9156,2,{0xE1,0x47,0x00,0x00,}},
- {0x9157,2,{0xD0,0xEF,0x00,0x00,}},
- {0x9158,2,{0xE1,0x48,0x00,0x00,}},
- {0x9159,2,{0xE1,0x49,0x00,0x00,}},
- {0x915A,2,{0xB7,0xD3,0x00,0x00,}},
- {0x915B,2,{0xE1,0x4A,0x00,0x00,}},
- {0x915C,2,{0xE1,0x4B,0x00,0x00,}},
- {0x915D,2,{0xD4,0xCD,0x00,0x00,}},
- {0x915E,2,{0xCC,0xAA,0x00,0x00,}},
- {0x915F,2,{0xE1,0x4C,0x00,0x00,}},
- {0x9160,2,{0xE1,0x4D,0x00,0x00,}},
- {0x9161,2,{0xF5,0xA2,0x00,0x00,}},
- {0x9162,2,{0xF5,0xA1,0x00,0x00,}},
- {0x9163,2,{0xBA,0xA8,0x00,0x00,}},
- {0x9164,2,{0xF4,0xFE,0x00,0x00,}},
- {0x9165,2,{0xCB,0xD6,0x00,0x00,}},
- {0x9166,2,{0xE1,0x4E,0x00,0x00,}},
- {0x9167,2,{0xE1,0x4F,0x00,0x00,}},
- {0x9168,2,{0xE1,0x50,0x00,0x00,}},
- {0x9169,2,{0xF5,0xA4,0x00,0x00,}},
- {0x916A,2,{0xC0,0xD2,0x00,0x00,}},
- {0x916B,2,{0xE1,0x51,0x00,0x00,}},
- {0x916C,2,{0xB3,0xEA,0x00,0x00,}},
- {0x916D,2,{0xE1,0x52,0x00,0x00,}},
- {0x916E,2,{0xCD,0xAA,0x00,0x00,}},
- {0x916F,2,{0xF5,0xA5,0x00,0x00,}},
- {0x9170,2,{0xF5,0xA3,0x00,0x00,}},
- {0x9171,2,{0xBD,0xB4,0x00,0x00,}},
- {0x9172,2,{0xF5,0xA8,0x00,0x00,}},
- {0x9173,2,{0xE1,0x53,0x00,0x00,}},
- {0x9174,2,{0xF5,0xA9,0x00,0x00,}},
- {0x9175,2,{0xBD,0xCD,0x00,0x00,}},
- {0x9176,2,{0xC3,0xB8,0x00,0x00,}},
- {0x9177,2,{0xBF,0xE1,0x00,0x00,}},
- {0x9178,2,{0xCB,0xE1,0x00,0x00,}},
- {0x9179,2,{0xF5,0xAA,0x00,0x00,}},
- {0x917A,2,{0xE1,0x54,0x00,0x00,}},
- {0x917B,2,{0xE1,0x55,0x00,0x00,}},
- {0x917C,2,{0xE1,0x56,0x00,0x00,}},
- {0x917D,2,{0xF5,0xA6,0x00,0x00,}},
- {0x917E,2,{0xF5,0xA7,0x00,0x00,}},
- {0x917F,2,{0xC4,0xF0,0x00,0x00,}},
- {0x9180,2,{0xE1,0x57,0x00,0x00,}},
- {0x9181,2,{0xE1,0x58,0x00,0x00,}},
- {0x9182,2,{0xE1,0x59,0x00,0x00,}},
- {0x9183,2,{0xE1,0x5A,0x00,0x00,}},
- {0x9184,2,{0xE1,0x5B,0x00,0x00,}},
- {0x9185,2,{0xF5,0xAC,0x00,0x00,}},
- {0x9186,2,{0xE1,0x5C,0x00,0x00,}},
- {0x9187,2,{0xB4,0xBC,0x00,0x00,}},
- {0x9188,2,{0xE1,0x5D,0x00,0x00,}},
- {0x9189,2,{0xD7,0xED,0x00,0x00,}},
- {0x918A,2,{0xE1,0x5E,0x00,0x00,}},
- {0x918B,2,{0xB4,0xD7,0x00,0x00,}},
- {0x918C,2,{0xF5,0xAB,0x00,0x00,}},
- {0x918D,2,{0xF5,0xAE,0x00,0x00,}},
- {0x918E,2,{0xE1,0x5F,0x00,0x00,}},
- {0x918F,2,{0xE1,0x60,0x00,0x00,}},
- {0x9190,2,{0xF5,0xAD,0x00,0x00,}},
- {0x9191,2,{0xF5,0xAF,0x00,0x00,}},
- {0x9192,2,{0xD0,0xD1,0x00,0x00,}},
- {0x9193,2,{0xE1,0x61,0x00,0x00,}},
- {0x9194,2,{0xE1,0x62,0x00,0x00,}},
- {0x9195,2,{0xE1,0x63,0x00,0x00,}},
- {0x9196,2,{0xE1,0x64,0x00,0x00,}},
- {0x9197,2,{0xE1,0x65,0x00,0x00,}},
- {0x9198,2,{0xE1,0x66,0x00,0x00,}},
- {0x9199,2,{0xE1,0x67,0x00,0x00,}},
- {0x919A,2,{0xC3,0xD1,0x00,0x00,}},
- {0x919B,2,{0xC8,0xA9,0x00,0x00,}},
- {0x919C,2,{0xE1,0x68,0x00,0x00,}},
- {0x919D,2,{0xE1,0x69,0x00,0x00,}},
- {0x919E,2,{0xE1,0x6A,0x00,0x00,}},
- {0x919F,2,{0xE1,0x6B,0x00,0x00,}},
- {0x91A0,2,{0xE1,0x6C,0x00,0x00,}},
- {0x91A1,2,{0xE1,0x6D,0x00,0x00,}},
- {0x91A2,2,{0xF5,0xB0,0x00,0x00,}},
- {0x91A3,2,{0xF5,0xB1,0x00,0x00,}},
- {0x91A4,2,{0xE1,0x6E,0x00,0x00,}},
- {0x91A5,2,{0xE1,0x6F,0x00,0x00,}},
- {0x91A6,2,{0xE1,0x70,0x00,0x00,}},
- {0x91A7,2,{0xE1,0x71,0x00,0x00,}},
- {0x91A8,2,{0xE1,0x72,0x00,0x00,}},
- {0x91A9,2,{0xE1,0x73,0x00,0x00,}},
- {0x91AA,2,{0xF5,0xB2,0x00,0x00,}},
- {0x91AB,2,{0xE1,0x74,0x00,0x00,}},
- {0x91AC,2,{0xE1,0x75,0x00,0x00,}},
- {0x91AD,2,{0xF5,0xB3,0x00,0x00,}},
- {0x91AE,2,{0xF5,0xB4,0x00,0x00,}},
- {0x91AF,2,{0xF5,0xB5,0x00,0x00,}},
- {0x91B0,2,{0xE1,0x76,0x00,0x00,}},
- {0x91B1,2,{0xE1,0x77,0x00,0x00,}},
- {0x91B2,2,{0xE1,0x78,0x00,0x00,}},
- {0x91B3,2,{0xE1,0x79,0x00,0x00,}},
- {0x91B4,2,{0xF5,0xB7,0x00,0x00,}},
- {0x91B5,2,{0xF5,0xB6,0x00,0x00,}},
- {0x91B6,2,{0xE1,0x7A,0x00,0x00,}},
- {0x91B7,2,{0xE1,0x7B,0x00,0x00,}},
- {0x91B8,2,{0xE1,0x7C,0x00,0x00,}},
- {0x91B9,2,{0xE1,0x7D,0x00,0x00,}},
- {0x91BA,2,{0xF5,0xB8,0x00,0x00,}},
- {0x91BB,2,{0xE1,0x7E,0x00,0x00,}},
- {0x91BC,2,{0xE1,0x80,0x00,0x00,}},
- {0x91BD,2,{0xE1,0x81,0x00,0x00,}},
- {0x91BE,2,{0xE1,0x82,0x00,0x00,}},
- {0x91BF,2,{0xE1,0x83,0x00,0x00,}},
- {0x91C0,2,{0xE1,0x84,0x00,0x00,}},
- {0x91C1,2,{0xE1,0x85,0x00,0x00,}},
- {0x91C2,2,{0xE1,0x86,0x00,0x00,}},
- {0x91C3,2,{0xE1,0x87,0x00,0x00,}},
- {0x91C4,2,{0xE1,0x88,0x00,0x00,}},
- {0x91C5,2,{0xE1,0x89,0x00,0x00,}},
- {0x91C6,2,{0xE1,0x8A,0x00,0x00,}},
- {0x91C7,2,{0xB2,0xC9,0x00,0x00,}},
- {0x91C8,2,{0xE1,0x8B,0x00,0x00,}},
- {0x91C9,2,{0xD3,0xD4,0x00,0x00,}},
- {0x91CA,2,{0xCA,0xCD,0x00,0x00,}},
- {0x91CB,2,{0xE1,0x8C,0x00,0x00,}},
- {0x91CC,2,{0xC0,0xEF,0x00,0x00,}},
- {0x91CD,2,{0xD6,0xD8,0x00,0x00,}},
- {0x91CE,2,{0xD2,0xB0,0x00,0x00,}},
- {0x91CF,2,{0xC1,0xBF,0x00,0x00,}},
- {0x91D0,2,{0xE1,0x8D,0x00,0x00,}},
- {0x91D1,2,{0xBD,0xF0,0x00,0x00,}},
- {0x91D2,2,{0xE1,0x8E,0x00,0x00,}},
- {0x91D3,2,{0xE1,0x8F,0x00,0x00,}},
- {0x91D4,2,{0xE1,0x90,0x00,0x00,}},
- {0x91D5,2,{0xE1,0x91,0x00,0x00,}},
- {0x91D6,2,{0xE1,0x92,0x00,0x00,}},
- {0x91D7,2,{0xE1,0x93,0x00,0x00,}},
- {0x91D8,2,{0xE1,0x94,0x00,0x00,}},
- {0x91D9,2,{0xE1,0x95,0x00,0x00,}},
- {0x91DA,2,{0xE1,0x96,0x00,0x00,}},
- {0x91DB,2,{0xE1,0x97,0x00,0x00,}},
- {0x91DC,2,{0xB8,0xAA,0x00,0x00,}},
- {0x91DD,2,{0xE1,0x98,0x00,0x00,}},
- {0x91DE,2,{0xE1,0x99,0x00,0x00,}},
- {0x91DF,2,{0xE1,0x9A,0x00,0x00,}},
- {0x91E0,2,{0xE1,0x9B,0x00,0x00,}},
- {0x91E1,2,{0xE1,0x9C,0x00,0x00,}},
- {0x91E2,2,{0xE1,0x9D,0x00,0x00,}},
- {0x91E3,2,{0xE1,0x9E,0x00,0x00,}},
- {0x91E4,2,{0xE1,0x9F,0x00,0x00,}},
- {0x91E5,2,{0xE1,0xA0,0x00,0x00,}},
- {0x91E6,2,{0xE2,0x40,0x00,0x00,}},
- {0x91E7,2,{0xE2,0x41,0x00,0x00,}},
- {0x91E8,2,{0xE2,0x42,0x00,0x00,}},
- {0x91E9,2,{0xE2,0x43,0x00,0x00,}},
- {0x91EA,2,{0xE2,0x44,0x00,0x00,}},
- {0x91EB,2,{0xE2,0x45,0x00,0x00,}},
- {0x91EC,2,{0xE2,0x46,0x00,0x00,}},
- {0x91ED,2,{0xE2,0x47,0x00,0x00,}},
- {0x91EE,2,{0xE2,0x48,0x00,0x00,}},
- {0x91EF,2,{0xE2,0x49,0x00,0x00,}},
- {0x91F0,2,{0xE2,0x4A,0x00,0x00,}},
- {0x91F1,2,{0xE2,0x4B,0x00,0x00,}},
- {0x91F2,2,{0xE2,0x4C,0x00,0x00,}},
- {0x91F3,2,{0xE2,0x4D,0x00,0x00,}},
- {0x91F4,2,{0xE2,0x4E,0x00,0x00,}},
- {0x91F5,2,{0xE2,0x4F,0x00,0x00,}},
- {0x91F6,2,{0xE2,0x50,0x00,0x00,}},
- {0x91F7,2,{0xE2,0x51,0x00,0x00,}},
- {0x91F8,2,{0xE2,0x52,0x00,0x00,}},
- {0x91F9,2,{0xE2,0x53,0x00,0x00,}},
- {0x91FA,2,{0xE2,0x54,0x00,0x00,}},
- {0x91FB,2,{0xE2,0x55,0x00,0x00,}},
- {0x91FC,2,{0xE2,0x56,0x00,0x00,}},
- {0x91FD,2,{0xE2,0x57,0x00,0x00,}},
- {0x91FE,2,{0xE2,0x58,0x00,0x00,}},
- {0x91FF,2,{0xE2,0x59,0x00,0x00,}},
- {0x9200,2,{0xE2,0x5A,0x00,0x00,}},
- {0x9201,2,{0xE2,0x5B,0x00,0x00,}},
- {0x9202,2,{0xE2,0x5C,0x00,0x00,}},
- {0x9203,2,{0xE2,0x5D,0x00,0x00,}},
- {0x9204,2,{0xE2,0x5E,0x00,0x00,}},
- {0x9205,2,{0xE2,0x5F,0x00,0x00,}},
- {0x9206,2,{0xE2,0x60,0x00,0x00,}},
- {0x9207,2,{0xE2,0x61,0x00,0x00,}},
- {0x9208,2,{0xE2,0x62,0x00,0x00,}},
- {0x9209,2,{0xE2,0x63,0x00,0x00,}},
- {0x920A,2,{0xE2,0x64,0x00,0x00,}},
- {0x920B,2,{0xE2,0x65,0x00,0x00,}},
- {0x920C,2,{0xE2,0x66,0x00,0x00,}},
- {0x920D,2,{0xE2,0x67,0x00,0x00,}},
- {0x920E,2,{0xE2,0x68,0x00,0x00,}},
- {0x920F,2,{0xE2,0x69,0x00,0x00,}},
- {0x9210,2,{0xE2,0x6A,0x00,0x00,}},
- {0x9211,2,{0xE2,0x6B,0x00,0x00,}},
- {0x9212,2,{0xE2,0x6C,0x00,0x00,}},
- {0x9213,2,{0xE2,0x6D,0x00,0x00,}},
- {0x9214,2,{0xE2,0x6E,0x00,0x00,}},
- {0x9215,2,{0xE2,0x6F,0x00,0x00,}},
- {0x9216,2,{0xE2,0x70,0x00,0x00,}},
- {0x9217,2,{0xE2,0x71,0x00,0x00,}},
- {0x9218,2,{0xE2,0x72,0x00,0x00,}},
- {0x9219,2,{0xE2,0x73,0x00,0x00,}},
- {0x921A,2,{0xE2,0x74,0x00,0x00,}},
- {0x921B,2,{0xE2,0x75,0x00,0x00,}},
- {0x921C,2,{0xE2,0x76,0x00,0x00,}},
- {0x921D,2,{0xE2,0x77,0x00,0x00,}},
- {0x921E,2,{0xE2,0x78,0x00,0x00,}},
- {0x921F,2,{0xE2,0x79,0x00,0x00,}},
- {0x9220,2,{0xE2,0x7A,0x00,0x00,}},
- {0x9221,2,{0xE2,0x7B,0x00,0x00,}},
- {0x9222,2,{0xE2,0x7C,0x00,0x00,}},
- {0x9223,2,{0xE2,0x7D,0x00,0x00,}},
- {0x9224,2,{0xE2,0x7E,0x00,0x00,}},
- {0x9225,2,{0xE2,0x80,0x00,0x00,}},
- {0x9226,2,{0xE2,0x81,0x00,0x00,}},
- {0x9227,2,{0xE2,0x82,0x00,0x00,}},
- {0x9228,2,{0xE2,0x83,0x00,0x00,}},
- {0x9229,2,{0xE2,0x84,0x00,0x00,}},
- {0x922A,2,{0xE2,0x85,0x00,0x00,}},
- {0x922B,2,{0xE2,0x86,0x00,0x00,}},
- {0x922C,2,{0xE2,0x87,0x00,0x00,}},
- {0x922D,2,{0xE2,0x88,0x00,0x00,}},
- {0x922E,2,{0xE2,0x89,0x00,0x00,}},
- {0x922F,2,{0xE2,0x8A,0x00,0x00,}},
- {0x9230,2,{0xE2,0x8B,0x00,0x00,}},
- {0x9231,2,{0xE2,0x8C,0x00,0x00,}},
- {0x9232,2,{0xE2,0x8D,0x00,0x00,}},
- {0x9233,2,{0xE2,0x8E,0x00,0x00,}},
- {0x9234,2,{0xE2,0x8F,0x00,0x00,}},
- {0x9235,2,{0xE2,0x90,0x00,0x00,}},
- {0x9236,2,{0xE2,0x91,0x00,0x00,}},
- {0x9237,2,{0xE2,0x92,0x00,0x00,}},
- {0x9238,2,{0xE2,0x93,0x00,0x00,}},
- {0x9239,2,{0xE2,0x94,0x00,0x00,}},
- {0x923A,2,{0xE2,0x95,0x00,0x00,}},
- {0x923B,2,{0xE2,0x96,0x00,0x00,}},
- {0x923C,2,{0xE2,0x97,0x00,0x00,}},
- {0x923D,2,{0xE2,0x98,0x00,0x00,}},
- {0x923E,2,{0xE2,0x99,0x00,0x00,}},
- {0x923F,2,{0xE2,0x9A,0x00,0x00,}},
- {0x9240,2,{0xE2,0x9B,0x00,0x00,}},
- {0x9241,2,{0xE2,0x9C,0x00,0x00,}},
- {0x9242,2,{0xE2,0x9D,0x00,0x00,}},
- {0x9243,2,{0xE2,0x9E,0x00,0x00,}},
- {0x9244,2,{0xE2,0x9F,0x00,0x00,}},
- {0x9245,2,{0xE2,0xA0,0x00,0x00,}},
- {0x9246,2,{0xE3,0x40,0x00,0x00,}},
- {0x9247,2,{0xE3,0x41,0x00,0x00,}},
- {0x9248,2,{0xE3,0x42,0x00,0x00,}},
- {0x9249,2,{0xE3,0x43,0x00,0x00,}},
- {0x924A,2,{0xE3,0x44,0x00,0x00,}},
- {0x924B,2,{0xE3,0x45,0x00,0x00,}},
- {0x924C,2,{0xE3,0x46,0x00,0x00,}},
- {0x924D,2,{0xE3,0x47,0x00,0x00,}},
- {0x924E,2,{0xE3,0x48,0x00,0x00,}},
- {0x924F,2,{0xE3,0x49,0x00,0x00,}},
- {0x9250,2,{0xE3,0x4A,0x00,0x00,}},
- {0x9251,2,{0xE3,0x4B,0x00,0x00,}},
- {0x9252,2,{0xE3,0x4C,0x00,0x00,}},
- {0x9253,2,{0xE3,0x4D,0x00,0x00,}},
- {0x9254,2,{0xE3,0x4E,0x00,0x00,}},
- {0x9255,2,{0xE3,0x4F,0x00,0x00,}},
- {0x9256,2,{0xE3,0x50,0x00,0x00,}},
- {0x9257,2,{0xE3,0x51,0x00,0x00,}},
- {0x9258,2,{0xE3,0x52,0x00,0x00,}},
- {0x9259,2,{0xE3,0x53,0x00,0x00,}},
- {0x925A,2,{0xE3,0x54,0x00,0x00,}},
- {0x925B,2,{0xE3,0x55,0x00,0x00,}},
- {0x925C,2,{0xE3,0x56,0x00,0x00,}},
- {0x925D,2,{0xE3,0x57,0x00,0x00,}},
- {0x925E,2,{0xE3,0x58,0x00,0x00,}},
- {0x925F,2,{0xE3,0x59,0x00,0x00,}},
- {0x9260,2,{0xE3,0x5A,0x00,0x00,}},
- {0x9261,2,{0xE3,0x5B,0x00,0x00,}},
- {0x9262,2,{0xE3,0x5C,0x00,0x00,}},
- {0x9263,2,{0xE3,0x5D,0x00,0x00,}},
- {0x9264,2,{0xE3,0x5E,0x00,0x00,}},
- {0x9265,2,{0xE3,0x5F,0x00,0x00,}},
- {0x9266,2,{0xE3,0x60,0x00,0x00,}},
- {0x9267,2,{0xE3,0x61,0x00,0x00,}},
- {0x9268,2,{0xE3,0x62,0x00,0x00,}},
- {0x9269,2,{0xE3,0x63,0x00,0x00,}},
- {0x926A,2,{0xE3,0x64,0x00,0x00,}},
- {0x926B,2,{0xE3,0x65,0x00,0x00,}},
- {0x926C,2,{0xE3,0x66,0x00,0x00,}},
- {0x926D,2,{0xE3,0x67,0x00,0x00,}},
- {0x926E,2,{0xE3,0x68,0x00,0x00,}},
- {0x926F,2,{0xE3,0x69,0x00,0x00,}},
- {0x9270,2,{0xE3,0x6A,0x00,0x00,}},
- {0x9271,2,{0xE3,0x6B,0x00,0x00,}},
- {0x9272,2,{0xE3,0x6C,0x00,0x00,}},
- {0x9273,2,{0xE3,0x6D,0x00,0x00,}},
- {0x9274,2,{0xBC,0xF8,0x00,0x00,}},
- {0x9275,2,{0xE3,0x6E,0x00,0x00,}},
- {0x9276,2,{0xE3,0x6F,0x00,0x00,}},
- {0x9277,2,{0xE3,0x70,0x00,0x00,}},
- {0x9278,2,{0xE3,0x71,0x00,0x00,}},
- {0x9279,2,{0xE3,0x72,0x00,0x00,}},
- {0x927A,2,{0xE3,0x73,0x00,0x00,}},
- {0x927B,2,{0xE3,0x74,0x00,0x00,}},
- {0x927C,2,{0xE3,0x75,0x00,0x00,}},
- {0x927D,2,{0xE3,0x76,0x00,0x00,}},
- {0x927E,2,{0xE3,0x77,0x00,0x00,}},
- {0x927F,2,{0xE3,0x78,0x00,0x00,}},
- {0x9280,2,{0xE3,0x79,0x00,0x00,}},
- {0x9281,2,{0xE3,0x7A,0x00,0x00,}},
- {0x9282,2,{0xE3,0x7B,0x00,0x00,}},
- {0x9283,2,{0xE3,0x7C,0x00,0x00,}},
- {0x9284,2,{0xE3,0x7D,0x00,0x00,}},
- {0x9285,2,{0xE3,0x7E,0x00,0x00,}},
- {0x9286,2,{0xE3,0x80,0x00,0x00,}},
- {0x9287,2,{0xE3,0x81,0x00,0x00,}},
- {0x9288,2,{0xE3,0x82,0x00,0x00,}},
- {0x9289,2,{0xE3,0x83,0x00,0x00,}},
- {0x928A,2,{0xE3,0x84,0x00,0x00,}},
- {0x928B,2,{0xE3,0x85,0x00,0x00,}},
- {0x928C,2,{0xE3,0x86,0x00,0x00,}},
- {0x928D,2,{0xE3,0x87,0x00,0x00,}},
- {0x928E,2,{0xF6,0xC6,0x00,0x00,}},
- {0x928F,2,{0xE3,0x88,0x00,0x00,}},
- {0x9290,2,{0xE3,0x89,0x00,0x00,}},
- {0x9291,2,{0xE3,0x8A,0x00,0x00,}},
- {0x9292,2,{0xE3,0x8B,0x00,0x00,}},
- {0x9293,2,{0xE3,0x8C,0x00,0x00,}},
- {0x9294,2,{0xE3,0x8D,0x00,0x00,}},
- {0x9295,2,{0xE3,0x8E,0x00,0x00,}},
- {0x9296,2,{0xE3,0x8F,0x00,0x00,}},
- {0x9297,2,{0xE3,0x90,0x00,0x00,}},
- {0x9298,2,{0xE3,0x91,0x00,0x00,}},
- {0x9299,2,{0xE3,0x92,0x00,0x00,}},
- {0x929A,2,{0xE3,0x93,0x00,0x00,}},
- {0x929B,2,{0xE3,0x94,0x00,0x00,}},
- {0x929C,2,{0xE3,0x95,0x00,0x00,}},
- {0x929D,2,{0xE3,0x96,0x00,0x00,}},
- {0x929E,2,{0xE3,0x97,0x00,0x00,}},
- {0x929F,2,{0xE3,0x98,0x00,0x00,}},
- {0x92A0,2,{0xE3,0x99,0x00,0x00,}},
- {0x92A1,2,{0xE3,0x9A,0x00,0x00,}},
- {0x92A2,2,{0xE3,0x9B,0x00,0x00,}},
- {0x92A3,2,{0xE3,0x9C,0x00,0x00,}},
- {0x92A4,2,{0xE3,0x9D,0x00,0x00,}},
- {0x92A5,2,{0xE3,0x9E,0x00,0x00,}},
- {0x92A6,2,{0xE3,0x9F,0x00,0x00,}},
- {0x92A7,2,{0xE3,0xA0,0x00,0x00,}},
- {0x92A8,2,{0xE4,0x40,0x00,0x00,}},
- {0x92A9,2,{0xE4,0x41,0x00,0x00,}},
- {0x92AA,2,{0xE4,0x42,0x00,0x00,}},
- {0x92AB,2,{0xE4,0x43,0x00,0x00,}},
- {0x92AC,2,{0xE4,0x44,0x00,0x00,}},
- {0x92AD,2,{0xE4,0x45,0x00,0x00,}},
- {0x92AE,2,{0xF6,0xC7,0x00,0x00,}},
- {0x92AF,2,{0xE4,0x46,0x00,0x00,}},
- {0x92B0,2,{0xE4,0x47,0x00,0x00,}},
- {0x92B1,2,{0xE4,0x48,0x00,0x00,}},
- {0x92B2,2,{0xE4,0x49,0x00,0x00,}},
- {0x92B3,2,{0xE4,0x4A,0x00,0x00,}},
- {0x92B4,2,{0xE4,0x4B,0x00,0x00,}},
- {0x92B5,2,{0xE4,0x4C,0x00,0x00,}},
- {0x92B6,2,{0xE4,0x4D,0x00,0x00,}},
- {0x92B7,2,{0xE4,0x4E,0x00,0x00,}},
- {0x92B8,2,{0xE4,0x4F,0x00,0x00,}},
- {0x92B9,2,{0xE4,0x50,0x00,0x00,}},
- {0x92BA,2,{0xE4,0x51,0x00,0x00,}},
- {0x92BB,2,{0xE4,0x52,0x00,0x00,}},
- {0x92BC,2,{0xE4,0x53,0x00,0x00,}},
- {0x92BD,2,{0xE4,0x54,0x00,0x00,}},
- {0x92BE,2,{0xE4,0x55,0x00,0x00,}},
- {0x92BF,2,{0xE4,0x56,0x00,0x00,}},
- {0x92C0,2,{0xE4,0x57,0x00,0x00,}},
- {0x92C1,2,{0xE4,0x58,0x00,0x00,}},
- {0x92C2,2,{0xE4,0x59,0x00,0x00,}},
- {0x92C3,2,{0xE4,0x5A,0x00,0x00,}},
- {0x92C4,2,{0xE4,0x5B,0x00,0x00,}},
- {0x92C5,2,{0xE4,0x5C,0x00,0x00,}},
- {0x92C6,2,{0xE4,0x5D,0x00,0x00,}},
- {0x92C7,2,{0xE4,0x5E,0x00,0x00,}},
- {0x92C8,2,{0xF6,0xC8,0x00,0x00,}},
- {0x92C9,2,{0xE4,0x5F,0x00,0x00,}},
- {0x92CA,2,{0xE4,0x60,0x00,0x00,}},
- {0x92CB,2,{0xE4,0x61,0x00,0x00,}},
- {0x92CC,2,{0xE4,0x62,0x00,0x00,}},
- {0x92CD,2,{0xE4,0x63,0x00,0x00,}},
- {0x92CE,2,{0xE4,0x64,0x00,0x00,}},
- {0x92CF,2,{0xE4,0x65,0x00,0x00,}},
- {0x92D0,2,{0xE4,0x66,0x00,0x00,}},
- {0x92D1,2,{0xE4,0x67,0x00,0x00,}},
- {0x92D2,2,{0xE4,0x68,0x00,0x00,}},
- {0x92D3,2,{0xE4,0x69,0x00,0x00,}},
- {0x92D4,2,{0xE4,0x6A,0x00,0x00,}},
- {0x92D5,2,{0xE4,0x6B,0x00,0x00,}},
- {0x92D6,2,{0xE4,0x6C,0x00,0x00,}},
- {0x92D7,2,{0xE4,0x6D,0x00,0x00,}},
- {0x92D8,2,{0xE4,0x6E,0x00,0x00,}},
- {0x92D9,2,{0xE4,0x6F,0x00,0x00,}},
- {0x92DA,2,{0xE4,0x70,0x00,0x00,}},
- {0x92DB,2,{0xE4,0x71,0x00,0x00,}},
- {0x92DC,2,{0xE4,0x72,0x00,0x00,}},
- {0x92DD,2,{0xE4,0x73,0x00,0x00,}},
- {0x92DE,2,{0xE4,0x74,0x00,0x00,}},
- {0x92DF,2,{0xE4,0x75,0x00,0x00,}},
- {0x92E0,2,{0xE4,0x76,0x00,0x00,}},
- {0x92E1,2,{0xE4,0x77,0x00,0x00,}},
- {0x92E2,2,{0xE4,0x78,0x00,0x00,}},
- {0x92E3,2,{0xE4,0x79,0x00,0x00,}},
- {0x92E4,2,{0xE4,0x7A,0x00,0x00,}},
- {0x92E5,2,{0xE4,0x7B,0x00,0x00,}},
- {0x92E6,2,{0xE4,0x7C,0x00,0x00,}},
- {0x92E7,2,{0xE4,0x7D,0x00,0x00,}},
- {0x92E8,2,{0xE4,0x7E,0x00,0x00,}},
- {0x92E9,2,{0xE4,0x80,0x00,0x00,}},
- {0x92EA,2,{0xE4,0x81,0x00,0x00,}},
- {0x92EB,2,{0xE4,0x82,0x00,0x00,}},
- {0x92EC,2,{0xE4,0x83,0x00,0x00,}},
- {0x92ED,2,{0xE4,0x84,0x00,0x00,}},
- {0x92EE,2,{0xE4,0x85,0x00,0x00,}},
- {0x92EF,2,{0xE4,0x86,0x00,0x00,}},
- {0x92F0,2,{0xE4,0x87,0x00,0x00,}},
- {0x92F1,2,{0xE4,0x88,0x00,0x00,}},
- {0x92F2,2,{0xE4,0x89,0x00,0x00,}},
- {0x92F3,2,{0xE4,0x8A,0x00,0x00,}},
- {0x92F4,2,{0xE4,0x8B,0x00,0x00,}},
- {0x92F5,2,{0xE4,0x8C,0x00,0x00,}},
- {0x92F6,2,{0xE4,0x8D,0x00,0x00,}},
- {0x92F7,2,{0xE4,0x8E,0x00,0x00,}},
- {0x92F8,2,{0xE4,0x8F,0x00,0x00,}},
- {0x92F9,2,{0xE4,0x90,0x00,0x00,}},
- {0x92FA,2,{0xE4,0x91,0x00,0x00,}},
- {0x92FB,2,{0xE4,0x92,0x00,0x00,}},
- {0x92FC,2,{0xE4,0x93,0x00,0x00,}},
- {0x92FD,2,{0xE4,0x94,0x00,0x00,}},
- {0x92FE,2,{0xE4,0x95,0x00,0x00,}},
- {0x92FF,2,{0xE4,0x96,0x00,0x00,}},
- {0x9300,2,{0xE4,0x97,0x00,0x00,}},
- {0x9301,2,{0xE4,0x98,0x00,0x00,}},
- {0x9302,2,{0xE4,0x99,0x00,0x00,}},
- {0x9303,2,{0xE4,0x9A,0x00,0x00,}},
- {0x9304,2,{0xE4,0x9B,0x00,0x00,}},
- {0x9305,2,{0xE4,0x9C,0x00,0x00,}},
- {0x9306,2,{0xE4,0x9D,0x00,0x00,}},
- {0x9307,2,{0xE4,0x9E,0x00,0x00,}},
- {0x9308,2,{0xE4,0x9F,0x00,0x00,}},
- {0x9309,2,{0xE4,0xA0,0x00,0x00,}},
- {0x930A,2,{0xE5,0x40,0x00,0x00,}},
- {0x930B,2,{0xE5,0x41,0x00,0x00,}},
- {0x930C,2,{0xE5,0x42,0x00,0x00,}},
- {0x930D,2,{0xE5,0x43,0x00,0x00,}},
- {0x930E,2,{0xE5,0x44,0x00,0x00,}},
- {0x930F,2,{0xE5,0x45,0x00,0x00,}},
- {0x9310,2,{0xE5,0x46,0x00,0x00,}},
- {0x9311,2,{0xE5,0x47,0x00,0x00,}},
- {0x9312,2,{0xE5,0x48,0x00,0x00,}},
- {0x9313,2,{0xE5,0x49,0x00,0x00,}},
- {0x9314,2,{0xE5,0x4A,0x00,0x00,}},
- {0x9315,2,{0xE5,0x4B,0x00,0x00,}},
- {0x9316,2,{0xE5,0x4C,0x00,0x00,}},
- {0x9317,2,{0xE5,0x4D,0x00,0x00,}},
- {0x9318,2,{0xE5,0x4E,0x00,0x00,}},
- {0x9319,2,{0xE5,0x4F,0x00,0x00,}},
- {0x931A,2,{0xE5,0x50,0x00,0x00,}},
- {0x931B,2,{0xE5,0x51,0x00,0x00,}},
- {0x931C,2,{0xE5,0x52,0x00,0x00,}},
- {0x931D,2,{0xE5,0x53,0x00,0x00,}},
- {0x931E,2,{0xE5,0x54,0x00,0x00,}},
- {0x931F,2,{0xE5,0x55,0x00,0x00,}},
- {0x9320,2,{0xE5,0x56,0x00,0x00,}},
- {0x9321,2,{0xE5,0x57,0x00,0x00,}},
- {0x9322,2,{0xE5,0x58,0x00,0x00,}},
- {0x9323,2,{0xE5,0x59,0x00,0x00,}},
- {0x9324,2,{0xE5,0x5A,0x00,0x00,}},
- {0x9325,2,{0xE5,0x5B,0x00,0x00,}},
- {0x9326,2,{0xE5,0x5C,0x00,0x00,}},
- {0x9327,2,{0xE5,0x5D,0x00,0x00,}},
- {0x9328,2,{0xE5,0x5E,0x00,0x00,}},
- {0x9329,2,{0xE5,0x5F,0x00,0x00,}},
- {0x932A,2,{0xE5,0x60,0x00,0x00,}},
- {0x932B,2,{0xE5,0x61,0x00,0x00,}},
- {0x932C,2,{0xE5,0x62,0x00,0x00,}},
- {0x932D,2,{0xE5,0x63,0x00,0x00,}},
- {0x932E,2,{0xE5,0x64,0x00,0x00,}},
- {0x932F,2,{0xE5,0x65,0x00,0x00,}},
- {0x9330,2,{0xE5,0x66,0x00,0x00,}},
- {0x9331,2,{0xE5,0x67,0x00,0x00,}},
- {0x9332,2,{0xE5,0x68,0x00,0x00,}},
- {0x9333,2,{0xE5,0x69,0x00,0x00,}},
- {0x9334,2,{0xE5,0x6A,0x00,0x00,}},
- {0x9335,2,{0xE5,0x6B,0x00,0x00,}},
- {0x9336,2,{0xE5,0x6C,0x00,0x00,}},
- {0x9337,2,{0xE5,0x6D,0x00,0x00,}},
- {0x9338,2,{0xE5,0x6E,0x00,0x00,}},
- {0x9339,2,{0xE5,0x6F,0x00,0x00,}},
- {0x933A,2,{0xE5,0x70,0x00,0x00,}},
- {0x933B,2,{0xE5,0x71,0x00,0x00,}},
- {0x933C,2,{0xE5,0x72,0x00,0x00,}},
- {0x933D,2,{0xE5,0x73,0x00,0x00,}},
- {0x933E,2,{0xF6,0xC9,0x00,0x00,}},
- {0x933F,2,{0xE5,0x74,0x00,0x00,}},
- {0x9340,2,{0xE5,0x75,0x00,0x00,}},
- {0x9341,2,{0xE5,0x76,0x00,0x00,}},
- {0x9342,2,{0xE5,0x77,0x00,0x00,}},
- {0x9343,2,{0xE5,0x78,0x00,0x00,}},
- {0x9344,2,{0xE5,0x79,0x00,0x00,}},
- {0x9345,2,{0xE5,0x7A,0x00,0x00,}},
- {0x9346,2,{0xE5,0x7B,0x00,0x00,}},
- {0x9347,2,{0xE5,0x7C,0x00,0x00,}},
- {0x9348,2,{0xE5,0x7D,0x00,0x00,}},
- {0x9349,2,{0xE5,0x7E,0x00,0x00,}},
- {0x934A,2,{0xE5,0x80,0x00,0x00,}},
- {0x934B,2,{0xE5,0x81,0x00,0x00,}},
- {0x934C,2,{0xE5,0x82,0x00,0x00,}},
- {0x934D,2,{0xE5,0x83,0x00,0x00,}},
- {0x934E,2,{0xE5,0x84,0x00,0x00,}},
- {0x934F,2,{0xE5,0x85,0x00,0x00,}},
- {0x9350,2,{0xE5,0x86,0x00,0x00,}},
- {0x9351,2,{0xE5,0x87,0x00,0x00,}},
- {0x9352,2,{0xE5,0x88,0x00,0x00,}},
- {0x9353,2,{0xE5,0x89,0x00,0x00,}},
- {0x9354,2,{0xE5,0x8A,0x00,0x00,}},
- {0x9355,2,{0xE5,0x8B,0x00,0x00,}},
- {0x9356,2,{0xE5,0x8C,0x00,0x00,}},
- {0x9357,2,{0xE5,0x8D,0x00,0x00,}},
- {0x9358,2,{0xE5,0x8E,0x00,0x00,}},
- {0x9359,2,{0xE5,0x8F,0x00,0x00,}},
- {0x935A,2,{0xE5,0x90,0x00,0x00,}},
- {0x935B,2,{0xE5,0x91,0x00,0x00,}},
- {0x935C,2,{0xE5,0x92,0x00,0x00,}},
- {0x935D,2,{0xE5,0x93,0x00,0x00,}},
- {0x935E,2,{0xE5,0x94,0x00,0x00,}},
- {0x935F,2,{0xE5,0x95,0x00,0x00,}},
- {0x9360,2,{0xE5,0x96,0x00,0x00,}},
- {0x9361,2,{0xE5,0x97,0x00,0x00,}},
- {0x9362,2,{0xE5,0x98,0x00,0x00,}},
- {0x9363,2,{0xE5,0x99,0x00,0x00,}},
- {0x9364,2,{0xE5,0x9A,0x00,0x00,}},
- {0x9365,2,{0xE5,0x9B,0x00,0x00,}},
- {0x9366,2,{0xE5,0x9C,0x00,0x00,}},
- {0x9367,2,{0xE5,0x9D,0x00,0x00,}},
- {0x9368,2,{0xE5,0x9E,0x00,0x00,}},
- {0x9369,2,{0xE5,0x9F,0x00,0x00,}},
- {0x936A,2,{0xF6,0xCA,0x00,0x00,}},
- {0x936B,2,{0xE5,0xA0,0x00,0x00,}},
- {0x936C,2,{0xE6,0x40,0x00,0x00,}},
- {0x936D,2,{0xE6,0x41,0x00,0x00,}},
- {0x936E,2,{0xE6,0x42,0x00,0x00,}},
- {0x936F,2,{0xE6,0x43,0x00,0x00,}},
- {0x9370,2,{0xE6,0x44,0x00,0x00,}},
- {0x9371,2,{0xE6,0x45,0x00,0x00,}},
- {0x9372,2,{0xE6,0x46,0x00,0x00,}},
- {0x9373,2,{0xE6,0x47,0x00,0x00,}},
- {0x9374,2,{0xE6,0x48,0x00,0x00,}},
- {0x9375,2,{0xE6,0x49,0x00,0x00,}},
- {0x9376,2,{0xE6,0x4A,0x00,0x00,}},
- {0x9377,2,{0xE6,0x4B,0x00,0x00,}},
- {0x9378,2,{0xE6,0x4C,0x00,0x00,}},
- {0x9379,2,{0xE6,0x4D,0x00,0x00,}},
- {0x937A,2,{0xE6,0x4E,0x00,0x00,}},
- {0x937B,2,{0xE6,0x4F,0x00,0x00,}},
- {0x937C,2,{0xE6,0x50,0x00,0x00,}},
- {0x937D,2,{0xE6,0x51,0x00,0x00,}},
- {0x937E,2,{0xE6,0x52,0x00,0x00,}},
- {0x937F,2,{0xE6,0x53,0x00,0x00,}},
- {0x9380,2,{0xE6,0x54,0x00,0x00,}},
- {0x9381,2,{0xE6,0x55,0x00,0x00,}},
- {0x9382,2,{0xE6,0x56,0x00,0x00,}},
- {0x9383,2,{0xE6,0x57,0x00,0x00,}},
- {0x9384,2,{0xE6,0x58,0x00,0x00,}},
- {0x9385,2,{0xE6,0x59,0x00,0x00,}},
- {0x9386,2,{0xE6,0x5A,0x00,0x00,}},
- {0x9387,2,{0xE6,0x5B,0x00,0x00,}},
- {0x9388,2,{0xE6,0x5C,0x00,0x00,}},
- {0x9389,2,{0xE6,0x5D,0x00,0x00,}},
- {0x938A,2,{0xE6,0x5E,0x00,0x00,}},
- {0x938B,2,{0xE6,0x5F,0x00,0x00,}},
- {0x938C,2,{0xE6,0x60,0x00,0x00,}},
- {0x938D,2,{0xE6,0x61,0x00,0x00,}},
- {0x938E,2,{0xE6,0x62,0x00,0x00,}},
- {0x938F,2,{0xF6,0xCC,0x00,0x00,}},
- {0x9390,2,{0xE6,0x63,0x00,0x00,}},
- {0x9391,2,{0xE6,0x64,0x00,0x00,}},
- {0x9392,2,{0xE6,0x65,0x00,0x00,}},
- {0x9393,2,{0xE6,0x66,0x00,0x00,}},
- {0x9394,2,{0xE6,0x67,0x00,0x00,}},
- {0x9395,2,{0xE6,0x68,0x00,0x00,}},
- {0x9396,2,{0xE6,0x69,0x00,0x00,}},
- {0x9397,2,{0xE6,0x6A,0x00,0x00,}},
- {0x9398,2,{0xE6,0x6B,0x00,0x00,}},
- {0x9399,2,{0xE6,0x6C,0x00,0x00,}},
- {0x939A,2,{0xE6,0x6D,0x00,0x00,}},
- {0x939B,2,{0xE6,0x6E,0x00,0x00,}},
- {0x939C,2,{0xE6,0x6F,0x00,0x00,}},
- {0x939D,2,{0xE6,0x70,0x00,0x00,}},
- {0x939E,2,{0xE6,0x71,0x00,0x00,}},
- {0x939F,2,{0xE6,0x72,0x00,0x00,}},
- {0x93A0,2,{0xE6,0x73,0x00,0x00,}},
- {0x93A1,2,{0xE6,0x74,0x00,0x00,}},
- {0x93A2,2,{0xE6,0x75,0x00,0x00,}},
- {0x93A3,2,{0xE6,0x76,0x00,0x00,}},
- {0x93A4,2,{0xE6,0x77,0x00,0x00,}},
- {0x93A5,2,{0xE6,0x78,0x00,0x00,}},
- {0x93A6,2,{0xE6,0x79,0x00,0x00,}},
- {0x93A7,2,{0xE6,0x7A,0x00,0x00,}},
- {0x93A8,2,{0xE6,0x7B,0x00,0x00,}},
- {0x93A9,2,{0xE6,0x7C,0x00,0x00,}},
- {0x93AA,2,{0xE6,0x7D,0x00,0x00,}},
- {0x93AB,2,{0xE6,0x7E,0x00,0x00,}},
- {0x93AC,2,{0xE6,0x80,0x00,0x00,}},
- {0x93AD,2,{0xE6,0x81,0x00,0x00,}},
- {0x93AE,2,{0xE6,0x82,0x00,0x00,}},
- {0x93AF,2,{0xE6,0x83,0x00,0x00,}},
- {0x93B0,2,{0xE6,0x84,0x00,0x00,}},
- {0x93B1,2,{0xE6,0x85,0x00,0x00,}},
- {0x93B2,2,{0xE6,0x86,0x00,0x00,}},
- {0x93B3,2,{0xE6,0x87,0x00,0x00,}},
- {0x93B4,2,{0xE6,0x88,0x00,0x00,}},
- {0x93B5,2,{0xE6,0x89,0x00,0x00,}},
- {0x93B6,2,{0xE6,0x8A,0x00,0x00,}},
- {0x93B7,2,{0xE6,0x8B,0x00,0x00,}},
- {0x93B8,2,{0xE6,0x8C,0x00,0x00,}},
- {0x93B9,2,{0xE6,0x8D,0x00,0x00,}},
- {0x93BA,2,{0xE6,0x8E,0x00,0x00,}},
- {0x93BB,2,{0xE6,0x8F,0x00,0x00,}},
- {0x93BC,2,{0xE6,0x90,0x00,0x00,}},
- {0x93BD,2,{0xE6,0x91,0x00,0x00,}},
- {0x93BE,2,{0xE6,0x92,0x00,0x00,}},
- {0x93BF,2,{0xE6,0x93,0x00,0x00,}},
- {0x93C0,2,{0xE6,0x94,0x00,0x00,}},
- {0x93C1,2,{0xE6,0x95,0x00,0x00,}},
- {0x93C2,2,{0xE6,0x96,0x00,0x00,}},
- {0x93C3,2,{0xE6,0x97,0x00,0x00,}},
- {0x93C4,2,{0xE6,0x98,0x00,0x00,}},
- {0x93C5,2,{0xE6,0x99,0x00,0x00,}},
- {0x93C6,2,{0xE6,0x9A,0x00,0x00,}},
- {0x93C7,2,{0xE6,0x9B,0x00,0x00,}},
- {0x93C8,2,{0xE6,0x9C,0x00,0x00,}},
- {0x93C9,2,{0xE6,0x9D,0x00,0x00,}},
- {0x93CA,2,{0xF6,0xCB,0x00,0x00,}},
- {0x93CB,2,{0xE6,0x9E,0x00,0x00,}},
- {0x93CC,2,{0xE6,0x9F,0x00,0x00,}},
- {0x93CD,2,{0xE6,0xA0,0x00,0x00,}},
- {0x93CE,2,{0xE7,0x40,0x00,0x00,}},
- {0x93CF,2,{0xE7,0x41,0x00,0x00,}},
- {0x93D0,2,{0xE7,0x42,0x00,0x00,}},
- {0x93D1,2,{0xE7,0x43,0x00,0x00,}},
- {0x93D2,2,{0xE7,0x44,0x00,0x00,}},
- {0x93D3,2,{0xE7,0x45,0x00,0x00,}},
- {0x93D4,2,{0xE7,0x46,0x00,0x00,}},
- {0x93D5,2,{0xE7,0x47,0x00,0x00,}},
- {0x93D6,2,{0xF7,0xE9,0x00,0x00,}},
- {0x93D7,2,{0xE7,0x48,0x00,0x00,}},
- {0x93D8,2,{0xE7,0x49,0x00,0x00,}},
- {0x93D9,2,{0xE7,0x4A,0x00,0x00,}},
- {0x93DA,2,{0xE7,0x4B,0x00,0x00,}},
- {0x93DB,2,{0xE7,0x4C,0x00,0x00,}},
- {0x93DC,2,{0xE7,0x4D,0x00,0x00,}},
- {0x93DD,2,{0xE7,0x4E,0x00,0x00,}},
- {0x93DE,2,{0xE7,0x4F,0x00,0x00,}},
- {0x93DF,2,{0xE7,0x50,0x00,0x00,}},
- {0x93E0,2,{0xE7,0x51,0x00,0x00,}},
- {0x93E1,2,{0xE7,0x52,0x00,0x00,}},
- {0x93E2,2,{0xE7,0x53,0x00,0x00,}},
- {0x93E3,2,{0xE7,0x54,0x00,0x00,}},
- {0x93E4,2,{0xE7,0x55,0x00,0x00,}},
- {0x93E5,2,{0xE7,0x56,0x00,0x00,}},
- {0x93E6,2,{0xE7,0x57,0x00,0x00,}},
- {0x93E7,2,{0xE7,0x58,0x00,0x00,}},
- {0x93E8,2,{0xE7,0x59,0x00,0x00,}},
- {0x93E9,2,{0xE7,0x5A,0x00,0x00,}},
- {0x93EA,2,{0xE7,0x5B,0x00,0x00,}},
- {0x93EB,2,{0xE7,0x5C,0x00,0x00,}},
- {0x93EC,2,{0xE7,0x5D,0x00,0x00,}},
- {0x93ED,2,{0xE7,0x5E,0x00,0x00,}},
- {0x93EE,2,{0xE7,0x5F,0x00,0x00,}},
- {0x93EF,2,{0xE7,0x60,0x00,0x00,}},
- {0x93F0,2,{0xE7,0x61,0x00,0x00,}},
- {0x93F1,2,{0xE7,0x62,0x00,0x00,}},
- {0x93F2,2,{0xE7,0x63,0x00,0x00,}},
- {0x93F3,2,{0xE7,0x64,0x00,0x00,}},
- {0x93F4,2,{0xE7,0x65,0x00,0x00,}},
- {0x93F5,2,{0xE7,0x66,0x00,0x00,}},
- {0x93F6,2,{0xE7,0x67,0x00,0x00,}},
- {0x93F7,2,{0xE7,0x68,0x00,0x00,}},
- {0x93F8,2,{0xE7,0x69,0x00,0x00,}},
- {0x93F9,2,{0xE7,0x6A,0x00,0x00,}},
- {0x93FA,2,{0xE7,0x6B,0x00,0x00,}},
- {0x93FB,2,{0xE7,0x6C,0x00,0x00,}},
- {0x93FC,2,{0xE7,0x6D,0x00,0x00,}},
- {0x93FD,2,{0xE7,0x6E,0x00,0x00,}},
- {0x93FE,2,{0xE7,0x6F,0x00,0x00,}},
- {0x93FF,2,{0xE7,0x70,0x00,0x00,}},
- {0x9400,2,{0xE7,0x71,0x00,0x00,}},
- {0x9401,2,{0xE7,0x72,0x00,0x00,}},
- {0x9402,2,{0xE7,0x73,0x00,0x00,}},
- {0x9403,2,{0xE7,0x74,0x00,0x00,}},
- {0x9404,2,{0xE7,0x75,0x00,0x00,}},
- {0x9405,2,{0xE7,0x76,0x00,0x00,}},
- {0x9406,2,{0xE7,0x77,0x00,0x00,}},
- {0x9407,2,{0xE7,0x78,0x00,0x00,}},
- {0x9408,2,{0xE7,0x79,0x00,0x00,}},
- {0x9409,2,{0xE7,0x7A,0x00,0x00,}},
- {0x940A,2,{0xE7,0x7B,0x00,0x00,}},
- {0x940B,2,{0xE7,0x7C,0x00,0x00,}},
- {0x940C,2,{0xE7,0x7D,0x00,0x00,}},
- {0x940D,2,{0xE7,0x7E,0x00,0x00,}},
- {0x940E,2,{0xE7,0x80,0x00,0x00,}},
- {0x940F,2,{0xE7,0x81,0x00,0x00,}},
- {0x9410,2,{0xE7,0x82,0x00,0x00,}},
- {0x9411,2,{0xE7,0x83,0x00,0x00,}},
- {0x9412,2,{0xE7,0x84,0x00,0x00,}},
- {0x9413,2,{0xE7,0x85,0x00,0x00,}},
- {0x9414,2,{0xE7,0x86,0x00,0x00,}},
- {0x9415,2,{0xE7,0x87,0x00,0x00,}},
- {0x9416,2,{0xE7,0x88,0x00,0x00,}},
- {0x9417,2,{0xE7,0x89,0x00,0x00,}},
- {0x9418,2,{0xE7,0x8A,0x00,0x00,}},
- {0x9419,2,{0xE7,0x8B,0x00,0x00,}},
- {0x941A,2,{0xE7,0x8C,0x00,0x00,}},
- {0x941B,2,{0xE7,0x8D,0x00,0x00,}},
- {0x941C,2,{0xE7,0x8E,0x00,0x00,}},
- {0x941D,2,{0xE7,0x8F,0x00,0x00,}},
- {0x941E,2,{0xE7,0x90,0x00,0x00,}},
- {0x941F,2,{0xE7,0x91,0x00,0x00,}},
- {0x9420,2,{0xE7,0x92,0x00,0x00,}},
- {0x9421,2,{0xE7,0x93,0x00,0x00,}},
- {0x9422,2,{0xE7,0x94,0x00,0x00,}},
- {0x9423,2,{0xE7,0x95,0x00,0x00,}},
- {0x9424,2,{0xE7,0x96,0x00,0x00,}},
- {0x9425,2,{0xE7,0x97,0x00,0x00,}},
- {0x9426,2,{0xE7,0x98,0x00,0x00,}},
- {0x9427,2,{0xE7,0x99,0x00,0x00,}},
- {0x9428,2,{0xE7,0x9A,0x00,0x00,}},
- {0x9429,2,{0xE7,0x9B,0x00,0x00,}},
- {0x942A,2,{0xE7,0x9C,0x00,0x00,}},
- {0x942B,2,{0xE7,0x9D,0x00,0x00,}},
- {0x942C,2,{0xE7,0x9E,0x00,0x00,}},
- {0x942D,2,{0xE7,0x9F,0x00,0x00,}},
- {0x942E,2,{0xE7,0xA0,0x00,0x00,}},
- {0x942F,2,{0xE8,0x40,0x00,0x00,}},
- {0x9430,2,{0xE8,0x41,0x00,0x00,}},
- {0x9431,2,{0xE8,0x42,0x00,0x00,}},
- {0x9432,2,{0xE8,0x43,0x00,0x00,}},
- {0x9433,2,{0xE8,0x44,0x00,0x00,}},
- {0x9434,2,{0xE8,0x45,0x00,0x00,}},
- {0x9435,2,{0xE8,0x46,0x00,0x00,}},
- {0x9436,2,{0xE8,0x47,0x00,0x00,}},
- {0x9437,2,{0xE8,0x48,0x00,0x00,}},
- {0x9438,2,{0xE8,0x49,0x00,0x00,}},
- {0x9439,2,{0xE8,0x4A,0x00,0x00,}},
- {0x943A,2,{0xE8,0x4B,0x00,0x00,}},
- {0x943B,2,{0xE8,0x4C,0x00,0x00,}},
- {0x943C,2,{0xE8,0x4D,0x00,0x00,}},
- {0x943D,2,{0xE8,0x4E,0x00,0x00,}},
- {0x943E,2,{0xF6,0xCD,0x00,0x00,}},
- {0x943F,2,{0xE8,0x4F,0x00,0x00,}},
- {0x9440,2,{0xE8,0x50,0x00,0x00,}},
- {0x9441,2,{0xE8,0x51,0x00,0x00,}},
- {0x9442,2,{0xE8,0x52,0x00,0x00,}},
- {0x9443,2,{0xE8,0x53,0x00,0x00,}},
- {0x9444,2,{0xE8,0x54,0x00,0x00,}},
- {0x9445,2,{0xE8,0x55,0x00,0x00,}},
- {0x9446,2,{0xE8,0x56,0x00,0x00,}},
- {0x9447,2,{0xE8,0x57,0x00,0x00,}},
- {0x9448,2,{0xE8,0x58,0x00,0x00,}},
- {0x9449,2,{0xE8,0x59,0x00,0x00,}},
- {0x944A,2,{0xE8,0x5A,0x00,0x00,}},
- {0x944B,2,{0xE8,0x5B,0x00,0x00,}},
- {0x944C,2,{0xE8,0x5C,0x00,0x00,}},
- {0x944D,2,{0xE8,0x5D,0x00,0x00,}},
- {0x944E,2,{0xE8,0x5E,0x00,0x00,}},
- {0x944F,2,{0xE8,0x5F,0x00,0x00,}},
- {0x9450,2,{0xE8,0x60,0x00,0x00,}},
- {0x9451,2,{0xE8,0x61,0x00,0x00,}},
- {0x9452,2,{0xE8,0x62,0x00,0x00,}},
- {0x9453,2,{0xE8,0x63,0x00,0x00,}},
- {0x9454,2,{0xE8,0x64,0x00,0x00,}},
- {0x9455,2,{0xE8,0x65,0x00,0x00,}},
- {0x9456,2,{0xE8,0x66,0x00,0x00,}},
- {0x9457,2,{0xE8,0x67,0x00,0x00,}},
- {0x9458,2,{0xE8,0x68,0x00,0x00,}},
- {0x9459,2,{0xE8,0x69,0x00,0x00,}},
- {0x945A,2,{0xE8,0x6A,0x00,0x00,}},
- {0x945B,2,{0xE8,0x6B,0x00,0x00,}},
- {0x945C,2,{0xE8,0x6C,0x00,0x00,}},
- {0x945D,2,{0xE8,0x6D,0x00,0x00,}},
- {0x945E,2,{0xE8,0x6E,0x00,0x00,}},
- {0x945F,2,{0xE8,0x6F,0x00,0x00,}},
- {0x9460,2,{0xE8,0x70,0x00,0x00,}},
- {0x9461,2,{0xE8,0x71,0x00,0x00,}},
- {0x9462,2,{0xE8,0x72,0x00,0x00,}},
- {0x9463,2,{0xE8,0x73,0x00,0x00,}},
- {0x9464,2,{0xE8,0x74,0x00,0x00,}},
- {0x9465,2,{0xE8,0x75,0x00,0x00,}},
- {0x9466,2,{0xE8,0x76,0x00,0x00,}},
- {0x9467,2,{0xE8,0x77,0x00,0x00,}},
- {0x9468,2,{0xE8,0x78,0x00,0x00,}},
- {0x9469,2,{0xE8,0x79,0x00,0x00,}},
- {0x946A,2,{0xE8,0x7A,0x00,0x00,}},
- {0x946B,2,{0xF6,0xCE,0x00,0x00,}},
- {0x946C,2,{0xE8,0x7B,0x00,0x00,}},
- {0x946D,2,{0xE8,0x7C,0x00,0x00,}},
- {0x946E,2,{0xE8,0x7D,0x00,0x00,}},
- {0x946F,2,{0xE8,0x7E,0x00,0x00,}},
- {0x9470,2,{0xE8,0x80,0x00,0x00,}},
- {0x9471,2,{0xE8,0x81,0x00,0x00,}},
- {0x9472,2,{0xE8,0x82,0x00,0x00,}},
- {0x9473,2,{0xE8,0x83,0x00,0x00,}},
- {0x9474,2,{0xE8,0x84,0x00,0x00,}},
- {0x9475,2,{0xE8,0x85,0x00,0x00,}},
- {0x9476,2,{0xE8,0x86,0x00,0x00,}},
- {0x9477,2,{0xE8,0x87,0x00,0x00,}},
- {0x9478,2,{0xE8,0x88,0x00,0x00,}},
- {0x9479,2,{0xE8,0x89,0x00,0x00,}},
- {0x947A,2,{0xE8,0x8A,0x00,0x00,}},
- {0x947B,2,{0xE8,0x8B,0x00,0x00,}},
- {0x947C,2,{0xE8,0x8C,0x00,0x00,}},
- {0x947D,2,{0xE8,0x8D,0x00,0x00,}},
- {0x947E,2,{0xE8,0x8E,0x00,0x00,}},
- {0x947F,2,{0xE8,0x8F,0x00,0x00,}},
- {0x9480,2,{0xE8,0x90,0x00,0x00,}},
- {0x9481,2,{0xE8,0x91,0x00,0x00,}},
- {0x9482,2,{0xE8,0x92,0x00,0x00,}},
- {0x9483,2,{0xE8,0x93,0x00,0x00,}},
- {0x9484,2,{0xE8,0x94,0x00,0x00,}},
- {0x9485,2,{0xEE,0xC4,0x00,0x00,}},
- {0x9486,2,{0xEE,0xC5,0x00,0x00,}},
- {0x9487,2,{0xEE,0xC6,0x00,0x00,}},
- {0x9488,2,{0xD5,0xEB,0x00,0x00,}},
- {0x9489,2,{0xB6,0xA4,0x00,0x00,}},
- {0x948A,2,{0xEE,0xC8,0x00,0x00,}},
- {0x948B,2,{0xEE,0xC7,0x00,0x00,}},
- {0x948C,2,{0xEE,0xC9,0x00,0x00,}},
- {0x948D,2,{0xEE,0xCA,0x00,0x00,}},
- {0x948E,2,{0xC7,0xA5,0x00,0x00,}},
- {0x948F,2,{0xEE,0xCB,0x00,0x00,}},
- {0x9490,2,{0xEE,0xCC,0x00,0x00,}},
- {0x9491,2,{0xE8,0x95,0x00,0x00,}},
- {0x9492,2,{0xB7,0xB0,0x00,0x00,}},
- {0x9493,2,{0xB5,0xF6,0x00,0x00,}},
- {0x9494,2,{0xEE,0xCD,0x00,0x00,}},
- {0x9495,2,{0xEE,0xCF,0x00,0x00,}},
- {0x9496,2,{0xE8,0x96,0x00,0x00,}},
- {0x9497,2,{0xEE,0xCE,0x00,0x00,}},
- {0x9498,2,{0xE8,0x97,0x00,0x00,}},
- {0x9499,2,{0xB8,0xC6,0x00,0x00,}},
- {0x949A,2,{0xEE,0xD0,0x00,0x00,}},
- {0x949B,2,{0xEE,0xD1,0x00,0x00,}},
- {0x949C,2,{0xEE,0xD2,0x00,0x00,}},
- {0x949D,2,{0xB6,0xDB,0x00,0x00,}},
- {0x949E,2,{0xB3,0xAE,0x00,0x00,}},
- {0x949F,2,{0xD6,0xD3,0x00,0x00,}},
- {0x94A0,2,{0xC4,0xC6,0x00,0x00,}},
- {0x94A1,2,{0xB1,0xB5,0x00,0x00,}},
- {0x94A2,2,{0xB8,0xD6,0x00,0x00,}},
- {0x94A3,2,{0xEE,0xD3,0x00,0x00,}},
- {0x94A4,2,{0xEE,0xD4,0x00,0x00,}},
- {0x94A5,2,{0xD4,0xBF,0x00,0x00,}},
- {0x94A6,2,{0xC7,0xD5,0x00,0x00,}},
- {0x94A7,2,{0xBE,0xFB,0x00,0x00,}},
- {0x94A8,2,{0xCE,0xD9,0x00,0x00,}},
- {0x94A9,2,{0xB9,0xB3,0x00,0x00,}},
- {0x94AA,2,{0xEE,0xD6,0x00,0x00,}},
- {0x94AB,2,{0xEE,0xD5,0x00,0x00,}},
- {0x94AC,2,{0xEE,0xD8,0x00,0x00,}},
- {0x94AD,2,{0xEE,0xD7,0x00,0x00,}},
- {0x94AE,2,{0xC5,0xA5,0x00,0x00,}},
- {0x94AF,2,{0xEE,0xD9,0x00,0x00,}},
- {0x94B0,2,{0xEE,0xDA,0x00,0x00,}},
- {0x94B1,2,{0xC7,0xAE,0x00,0x00,}},
- {0x94B2,2,{0xEE,0xDB,0x00,0x00,}},
- {0x94B3,2,{0xC7,0xAF,0x00,0x00,}},
- {0x94B4,2,{0xEE,0xDC,0x00,0x00,}},
- {0x94B5,2,{0xB2,0xA7,0x00,0x00,}},
- {0x94B6,2,{0xEE,0xDD,0x00,0x00,}},
- {0x94B7,2,{0xEE,0xDE,0x00,0x00,}},
- {0x94B8,2,{0xEE,0xDF,0x00,0x00,}},
- {0x94B9,2,{0xEE,0xE0,0x00,0x00,}},
- {0x94BA,2,{0xEE,0xE1,0x00,0x00,}},
- {0x94BB,2,{0xD7,0xEA,0x00,0x00,}},
- {0x94BC,2,{0xEE,0xE2,0x00,0x00,}},
- {0x94BD,2,{0xEE,0xE3,0x00,0x00,}},
- {0x94BE,2,{0xBC,0xD8,0x00,0x00,}},
- {0x94BF,2,{0xEE,0xE4,0x00,0x00,}},
- {0x94C0,2,{0xD3,0xCB,0x00,0x00,}},
- {0x94C1,2,{0xCC,0xFA,0x00,0x00,}},
- {0x94C2,2,{0xB2,0xAC,0x00,0x00,}},
- {0x94C3,2,{0xC1,0xE5,0x00,0x00,}},
- {0x94C4,2,{0xEE,0xE5,0x00,0x00,}},
- {0x94C5,2,{0xC7,0xA6,0x00,0x00,}},
- {0x94C6,2,{0xC3,0xAD,0x00,0x00,}},
- {0x94C7,2,{0xE8,0x98,0x00,0x00,}},
- {0x94C8,2,{0xEE,0xE6,0x00,0x00,}},
- {0x94C9,2,{0xEE,0xE7,0x00,0x00,}},
- {0x94CA,2,{0xEE,0xE8,0x00,0x00,}},
- {0x94CB,2,{0xEE,0xE9,0x00,0x00,}},
- {0x94CC,2,{0xEE,0xEA,0x00,0x00,}},
- {0x94CD,2,{0xEE,0xEB,0x00,0x00,}},
- {0x94CE,2,{0xEE,0xEC,0x00,0x00,}},
- {0x94CF,2,{0xE8,0x99,0x00,0x00,}},
- {0x94D0,2,{0xEE,0xED,0x00,0x00,}},
- {0x94D1,2,{0xEE,0xEE,0x00,0x00,}},
- {0x94D2,2,{0xEE,0xEF,0x00,0x00,}},
- {0x94D3,2,{0xE8,0x9A,0x00,0x00,}},
- {0x94D4,2,{0xE8,0x9B,0x00,0x00,}},
- {0x94D5,2,{0xEE,0xF0,0x00,0x00,}},
- {0x94D6,2,{0xEE,0xF1,0x00,0x00,}},
- {0x94D7,2,{0xEE,0xF2,0x00,0x00,}},
- {0x94D8,2,{0xEE,0xF4,0x00,0x00,}},
- {0x94D9,2,{0xEE,0xF3,0x00,0x00,}},
- {0x94DA,2,{0xE8,0x9C,0x00,0x00,}},
- {0x94DB,2,{0xEE,0xF5,0x00,0x00,}},
- {0x94DC,2,{0xCD,0xAD,0x00,0x00,}},
- {0x94DD,2,{0xC2,0xC1,0x00,0x00,}},
- {0x94DE,2,{0xEE,0xF6,0x00,0x00,}},
- {0x94DF,2,{0xEE,0xF7,0x00,0x00,}},
- {0x94E0,2,{0xEE,0xF8,0x00,0x00,}},
- {0x94E1,2,{0xD5,0xA1,0x00,0x00,}},
- {0x94E2,2,{0xEE,0xF9,0x00,0x00,}},
- {0x94E3,2,{0xCF,0xB3,0x00,0x00,}},
- {0x94E4,2,{0xEE,0xFA,0x00,0x00,}},
- {0x94E5,2,{0xEE,0xFB,0x00,0x00,}},
- {0x94E6,2,{0xE8,0x9D,0x00,0x00,}},
- {0x94E7,2,{0xEE,0xFC,0x00,0x00,}},
- {0x94E8,2,{0xEE,0xFD,0x00,0x00,}},
- {0x94E9,2,{0xEF,0xA1,0x00,0x00,}},
- {0x94EA,2,{0xEE,0xFE,0x00,0x00,}},
- {0x94EB,2,{0xEF,0xA2,0x00,0x00,}},
- {0x94EC,2,{0xB8,0xF5,0x00,0x00,}},
- {0x94ED,2,{0xC3,0xFA,0x00,0x00,}},
- {0x94EE,2,{0xEF,0xA3,0x00,0x00,}},
- {0x94EF,2,{0xEF,0xA4,0x00,0x00,}},
- {0x94F0,2,{0xBD,0xC2,0x00,0x00,}},
- {0x94F1,2,{0xD2,0xBF,0x00,0x00,}},
- {0x94F2,2,{0xB2,0xF9,0x00,0x00,}},
- {0x94F3,2,{0xEF,0xA5,0x00,0x00,}},
- {0x94F4,2,{0xEF,0xA6,0x00,0x00,}},
- {0x94F5,2,{0xEF,0xA7,0x00,0x00,}},
- {0x94F6,2,{0xD2,0xF8,0x00,0x00,}},
- {0x94F7,2,{0xEF,0xA8,0x00,0x00,}},
- {0x94F8,2,{0xD6,0xFD,0x00,0x00,}},
- {0x94F9,2,{0xEF,0xA9,0x00,0x00,}},
- {0x94FA,2,{0xC6,0xCC,0x00,0x00,}},
- {0x94FB,2,{0xE8,0x9E,0x00,0x00,}},
- {0x94FC,2,{0xEF,0xAA,0x00,0x00,}},
- {0x94FD,2,{0xEF,0xAB,0x00,0x00,}},
- {0x94FE,2,{0xC1,0xB4,0x00,0x00,}},
- {0x94FF,2,{0xEF,0xAC,0x00,0x00,}},
- {0x9500,2,{0xCF,0xFA,0x00,0x00,}},
- {0x9501,2,{0xCB,0xF8,0x00,0x00,}},
- {0x9502,2,{0xEF,0xAE,0x00,0x00,}},
- {0x9503,2,{0xEF,0xAD,0x00,0x00,}},
- {0x9504,2,{0xB3,0xFA,0x00,0x00,}},
- {0x9505,2,{0xB9,0xF8,0x00,0x00,}},
- {0x9506,2,{0xEF,0xAF,0x00,0x00,}},
- {0x9507,2,{0xEF,0xB0,0x00,0x00,}},
- {0x9508,2,{0xD0,0xE2,0x00,0x00,}},
- {0x9509,2,{0xEF,0xB1,0x00,0x00,}},
- {0x950A,2,{0xEF,0xB2,0x00,0x00,}},
- {0x950B,2,{0xB7,0xE6,0x00,0x00,}},
- {0x950C,2,{0xD0,0xBF,0x00,0x00,}},
- {0x950D,2,{0xEF,0xB3,0x00,0x00,}},
- {0x950E,2,{0xEF,0xB4,0x00,0x00,}},
- {0x950F,2,{0xEF,0xB5,0x00,0x00,}},
- {0x9510,2,{0xC8,0xF1,0x00,0x00,}},
- {0x9511,2,{0xCC,0xE0,0x00,0x00,}},
- {0x9512,2,{0xEF,0xB6,0x00,0x00,}},
- {0x9513,2,{0xEF,0xB7,0x00,0x00,}},
- {0x9514,2,{0xEF,0xB8,0x00,0x00,}},
- {0x9515,2,{0xEF,0xB9,0x00,0x00,}},
- {0x9516,2,{0xEF,0xBA,0x00,0x00,}},
- {0x9517,2,{0xD5,0xE0,0x00,0x00,}},
- {0x9518,2,{0xEF,0xBB,0x00,0x00,}},
- {0x9519,2,{0xB4,0xED,0x00,0x00,}},
- {0x951A,2,{0xC3,0xAA,0x00,0x00,}},
- {0x951B,2,{0xEF,0xBC,0x00,0x00,}},
- {0x951C,2,{0xE8,0x9F,0x00,0x00,}},
- {0x951D,2,{0xEF,0xBD,0x00,0x00,}},
- {0x951E,2,{0xEF,0xBE,0x00,0x00,}},
- {0x951F,2,{0xEF,0xBF,0x00,0x00,}},
- {0x9520,2,{0xE8,0xA0,0x00,0x00,}},
- {0x9521,2,{0xCE,0xFD,0x00,0x00,}},
- {0x9522,2,{0xEF,0xC0,0x00,0x00,}},
- {0x9523,2,{0xC2,0xE0,0x00,0x00,}},
- {0x9524,2,{0xB4,0xB8,0x00,0x00,}},
- {0x9525,2,{0xD7,0xB6,0x00,0x00,}},
- {0x9526,2,{0xBD,0xF5,0x00,0x00,}},
- {0x9527,2,{0xE9,0x40,0x00,0x00,}},
- {0x9528,2,{0xCF,0xC7,0x00,0x00,}},
- {0x9529,2,{0xEF,0xC3,0x00,0x00,}},
- {0x952A,2,{0xEF,0xC1,0x00,0x00,}},
- {0x952B,2,{0xEF,0xC2,0x00,0x00,}},
- {0x952C,2,{0xEF,0xC4,0x00,0x00,}},
- {0x952D,2,{0xB6,0xA7,0x00,0x00,}},
- {0x952E,2,{0xBC,0xFC,0x00,0x00,}},
- {0x952F,2,{0xBE,0xE2,0x00,0x00,}},
- {0x9530,2,{0xC3,0xCC,0x00,0x00,}},
- {0x9531,2,{0xEF,0xC5,0x00,0x00,}},
- {0x9532,2,{0xEF,0xC6,0x00,0x00,}},
- {0x9533,2,{0xE9,0x41,0x00,0x00,}},
- {0x9534,2,{0xEF,0xC7,0x00,0x00,}},
- {0x9535,2,{0xEF,0xCF,0x00,0x00,}},
- {0x9536,2,{0xEF,0xC8,0x00,0x00,}},
- {0x9537,2,{0xEF,0xC9,0x00,0x00,}},
- {0x9538,2,{0xEF,0xCA,0x00,0x00,}},
- {0x9539,2,{0xC7,0xC2,0x00,0x00,}},
- {0x953A,2,{0xEF,0xF1,0x00,0x00,}},
- {0x953B,2,{0xB6,0xCD,0x00,0x00,}},
- {0x953C,2,{0xEF,0xCB,0x00,0x00,}},
- {0x953D,2,{0xE9,0x42,0x00,0x00,}},
- {0x953E,2,{0xEF,0xCC,0x00,0x00,}},
- {0x953F,2,{0xEF,0xCD,0x00,0x00,}},
- {0x9540,2,{0xB6,0xC6,0x00,0x00,}},
- {0x9541,2,{0xC3,0xBE,0x00,0x00,}},
- {0x9542,2,{0xEF,0xCE,0x00,0x00,}},
- {0x9543,2,{0xE9,0x43,0x00,0x00,}},
- {0x9544,2,{0xEF,0xD0,0x00,0x00,}},
- {0x9545,2,{0xEF,0xD1,0x00,0x00,}},
- {0x9546,2,{0xEF,0xD2,0x00,0x00,}},
- {0x9547,2,{0xD5,0xF2,0x00,0x00,}},
- {0x9548,2,{0xE9,0x44,0x00,0x00,}},
- {0x9549,2,{0xEF,0xD3,0x00,0x00,}},
- {0x954A,2,{0xC4,0xF7,0x00,0x00,}},
- {0x954B,2,{0xE9,0x45,0x00,0x00,}},
- {0x954C,2,{0xEF,0xD4,0x00,0x00,}},
- {0x954D,2,{0xC4,0xF8,0x00,0x00,}},
- {0x954E,2,{0xEF,0xD5,0x00,0x00,}},
- {0x954F,2,{0xEF,0xD6,0x00,0x00,}},
- {0x9550,2,{0xB8,0xE4,0x00,0x00,}},
- {0x9551,2,{0xB0,0xF7,0x00,0x00,}},
- {0x9552,2,{0xEF,0xD7,0x00,0x00,}},
- {0x9553,2,{0xEF,0xD8,0x00,0x00,}},
- {0x9554,2,{0xEF,0xD9,0x00,0x00,}},
- {0x9555,2,{0xE9,0x46,0x00,0x00,}},
- {0x9556,2,{0xEF,0xDA,0x00,0x00,}},
- {0x9557,2,{0xEF,0xDB,0x00,0x00,}},
- {0x9558,2,{0xEF,0xDC,0x00,0x00,}},
- {0x9559,2,{0xEF,0xDD,0x00,0x00,}},
- {0x955A,2,{0xE9,0x47,0x00,0x00,}},
- {0x955B,2,{0xEF,0xDE,0x00,0x00,}},
- {0x955C,2,{0xBE,0xB5,0x00,0x00,}},
- {0x955D,2,{0xEF,0xE1,0x00,0x00,}},
- {0x955E,2,{0xEF,0xDF,0x00,0x00,}},
- {0x955F,2,{0xEF,0xE0,0x00,0x00,}},
- {0x9560,2,{0xE9,0x48,0x00,0x00,}},
- {0x9561,2,{0xEF,0xE2,0x00,0x00,}},
- {0x9562,2,{0xEF,0xE3,0x00,0x00,}},
- {0x9563,2,{0xC1,0xCD,0x00,0x00,}},
- {0x9564,2,{0xEF,0xE4,0x00,0x00,}},
- {0x9565,2,{0xEF,0xE5,0x00,0x00,}},
- {0x9566,2,{0xEF,0xE6,0x00,0x00,}},
- {0x9567,2,{0xEF,0xE7,0x00,0x00,}},
- {0x9568,2,{0xEF,0xE8,0x00,0x00,}},
- {0x9569,2,{0xEF,0xE9,0x00,0x00,}},
- {0x956A,2,{0xEF,0xEA,0x00,0x00,}},
- {0x956B,2,{0xEF,0xEB,0x00,0x00,}},
- {0x956C,2,{0xEF,0xEC,0x00,0x00,}},
- {0x956D,2,{0xC0,0xD8,0x00,0x00,}},
- {0x956E,2,{0xE9,0x49,0x00,0x00,}},
- {0x956F,2,{0xEF,0xED,0x00,0x00,}},
- {0x9570,2,{0xC1,0xAD,0x00,0x00,}},
- {0x9571,2,{0xEF,0xEE,0x00,0x00,}},
- {0x9572,2,{0xEF,0xEF,0x00,0x00,}},
- {0x9573,2,{0xEF,0xF0,0x00,0x00,}},
- {0x9574,2,{0xE9,0x4A,0x00,0x00,}},
- {0x9575,2,{0xE9,0x4B,0x00,0x00,}},
- {0x9576,2,{0xCF,0xE2,0x00,0x00,}},
- {0x9577,2,{0xE9,0x4C,0x00,0x00,}},
- {0x9578,2,{0xE9,0x4D,0x00,0x00,}},
- {0x9579,2,{0xE9,0x4E,0x00,0x00,}},
- {0x957A,2,{0xE9,0x4F,0x00,0x00,}},
- {0x957B,2,{0xE9,0x50,0x00,0x00,}},
- {0x957C,2,{0xE9,0x51,0x00,0x00,}},
- {0x957D,2,{0xE9,0x52,0x00,0x00,}},
- {0x957E,2,{0xE9,0x53,0x00,0x00,}},
- {0x957F,2,{0xB3,0xA4,0x00,0x00,}},
- {0x9580,2,{0xE9,0x54,0x00,0x00,}},
- {0x9581,2,{0xE9,0x55,0x00,0x00,}},
- {0x9582,2,{0xE9,0x56,0x00,0x00,}},
- {0x9583,2,{0xE9,0x57,0x00,0x00,}},
- {0x9584,2,{0xE9,0x58,0x00,0x00,}},
- {0x9585,2,{0xE9,0x59,0x00,0x00,}},
- {0x9586,2,{0xE9,0x5A,0x00,0x00,}},
- {0x9587,2,{0xE9,0x5B,0x00,0x00,}},
- {0x9588,2,{0xE9,0x5C,0x00,0x00,}},
- {0x9589,2,{0xE9,0x5D,0x00,0x00,}},
- {0x958A,2,{0xE9,0x5E,0x00,0x00,}},
- {0x958B,2,{0xE9,0x5F,0x00,0x00,}},
- {0x958C,2,{0xE9,0x60,0x00,0x00,}},
- {0x958D,2,{0xE9,0x61,0x00,0x00,}},
- {0x958E,2,{0xE9,0x62,0x00,0x00,}},
- {0x958F,2,{0xE9,0x63,0x00,0x00,}},
- {0x9590,2,{0xE9,0x64,0x00,0x00,}},
- {0x9591,2,{0xE9,0x65,0x00,0x00,}},
- {0x9592,2,{0xE9,0x66,0x00,0x00,}},
- {0x9593,2,{0xE9,0x67,0x00,0x00,}},
- {0x9594,2,{0xE9,0x68,0x00,0x00,}},
- {0x9595,2,{0xE9,0x69,0x00,0x00,}},
- {0x9596,2,{0xE9,0x6A,0x00,0x00,}},
- {0x9597,2,{0xE9,0x6B,0x00,0x00,}},
- {0x9598,2,{0xE9,0x6C,0x00,0x00,}},
- {0x9599,2,{0xE9,0x6D,0x00,0x00,}},
- {0x959A,2,{0xE9,0x6E,0x00,0x00,}},
- {0x959B,2,{0xE9,0x6F,0x00,0x00,}},
- {0x959C,2,{0xE9,0x70,0x00,0x00,}},
- {0x959D,2,{0xE9,0x71,0x00,0x00,}},
- {0x959E,2,{0xE9,0x72,0x00,0x00,}},
- {0x959F,2,{0xE9,0x73,0x00,0x00,}},
- {0x95A0,2,{0xE9,0x74,0x00,0x00,}},
- {0x95A1,2,{0xE9,0x75,0x00,0x00,}},
- {0x95A2,2,{0xE9,0x76,0x00,0x00,}},
- {0x95A3,2,{0xE9,0x77,0x00,0x00,}},
- {0x95A4,2,{0xE9,0x78,0x00,0x00,}},
- {0x95A5,2,{0xE9,0x79,0x00,0x00,}},
- {0x95A6,2,{0xE9,0x7A,0x00,0x00,}},
- {0x95A7,2,{0xE9,0x7B,0x00,0x00,}},
- {0x95A8,2,{0xE9,0x7C,0x00,0x00,}},
- {0x95A9,2,{0xE9,0x7D,0x00,0x00,}},
- {0x95AA,2,{0xE9,0x7E,0x00,0x00,}},
- {0x95AB,2,{0xE9,0x80,0x00,0x00,}},
- {0x95AC,2,{0xE9,0x81,0x00,0x00,}},
- {0x95AD,2,{0xE9,0x82,0x00,0x00,}},
- {0x95AE,2,{0xE9,0x83,0x00,0x00,}},
- {0x95AF,2,{0xE9,0x84,0x00,0x00,}},
- {0x95B0,2,{0xE9,0x85,0x00,0x00,}},
- {0x95B1,2,{0xE9,0x86,0x00,0x00,}},
- {0x95B2,2,{0xE9,0x87,0x00,0x00,}},
- {0x95B3,2,{0xE9,0x88,0x00,0x00,}},
- {0x95B4,2,{0xE9,0x89,0x00,0x00,}},
- {0x95B5,2,{0xE9,0x8A,0x00,0x00,}},
- {0x95B6,2,{0xE9,0x8B,0x00,0x00,}},
- {0x95B7,2,{0xE9,0x8C,0x00,0x00,}},
- {0x95B8,2,{0xE9,0x8D,0x00,0x00,}},
- {0x95B9,2,{0xE9,0x8E,0x00,0x00,}},
- {0x95BA,2,{0xE9,0x8F,0x00,0x00,}},
- {0x95BB,2,{0xE9,0x90,0x00,0x00,}},
- {0x95BC,2,{0xE9,0x91,0x00,0x00,}},
- {0x95BD,2,{0xE9,0x92,0x00,0x00,}},
- {0x95BE,2,{0xE9,0x93,0x00,0x00,}},
- {0x95BF,2,{0xE9,0x94,0x00,0x00,}},
- {0x95C0,2,{0xE9,0x95,0x00,0x00,}},
- {0x95C1,2,{0xE9,0x96,0x00,0x00,}},
- {0x95C2,2,{0xE9,0x97,0x00,0x00,}},
- {0x95C3,2,{0xE9,0x98,0x00,0x00,}},
- {0x95C4,2,{0xE9,0x99,0x00,0x00,}},
- {0x95C5,2,{0xE9,0x9A,0x00,0x00,}},
- {0x95C6,2,{0xE9,0x9B,0x00,0x00,}},
- {0x95C7,2,{0xE9,0x9C,0x00,0x00,}},
- {0x95C8,2,{0xE9,0x9D,0x00,0x00,}},
- {0x95C9,2,{0xE9,0x9E,0x00,0x00,}},
- {0x95CA,2,{0xE9,0x9F,0x00,0x00,}},
- {0x95CB,2,{0xE9,0xA0,0x00,0x00,}},
- {0x95CC,2,{0xEA,0x40,0x00,0x00,}},
- {0x95CD,2,{0xEA,0x41,0x00,0x00,}},
- {0x95CE,2,{0xEA,0x42,0x00,0x00,}},
- {0x95CF,2,{0xEA,0x43,0x00,0x00,}},
- {0x95D0,2,{0xEA,0x44,0x00,0x00,}},
- {0x95D1,2,{0xEA,0x45,0x00,0x00,}},
- {0x95D2,2,{0xEA,0x46,0x00,0x00,}},
- {0x95D3,2,{0xEA,0x47,0x00,0x00,}},
- {0x95D4,2,{0xEA,0x48,0x00,0x00,}},
- {0x95D5,2,{0xEA,0x49,0x00,0x00,}},
- {0x95D6,2,{0xEA,0x4A,0x00,0x00,}},
- {0x95D7,2,{0xEA,0x4B,0x00,0x00,}},
- {0x95D8,2,{0xEA,0x4C,0x00,0x00,}},
- {0x95D9,2,{0xEA,0x4D,0x00,0x00,}},
- {0x95DA,2,{0xEA,0x4E,0x00,0x00,}},
- {0x95DB,2,{0xEA,0x4F,0x00,0x00,}},
- {0x95DC,2,{0xEA,0x50,0x00,0x00,}},
- {0x95DD,2,{0xEA,0x51,0x00,0x00,}},
- {0x95DE,2,{0xEA,0x52,0x00,0x00,}},
- {0x95DF,2,{0xEA,0x53,0x00,0x00,}},
- {0x95E0,2,{0xEA,0x54,0x00,0x00,}},
- {0x95E1,2,{0xEA,0x55,0x00,0x00,}},
- {0x95E2,2,{0xEA,0x56,0x00,0x00,}},
- {0x95E3,2,{0xEA,0x57,0x00,0x00,}},
- {0x95E4,2,{0xEA,0x58,0x00,0x00,}},
- {0x95E5,2,{0xEA,0x59,0x00,0x00,}},
- {0x95E6,2,{0xEA,0x5A,0x00,0x00,}},
- {0x95E7,2,{0xEA,0x5B,0x00,0x00,}},
- {0x95E8,2,{0xC3,0xC5,0x00,0x00,}},
- {0x95E9,2,{0xE3,0xC5,0x00,0x00,}},
- {0x95EA,2,{0xC9,0xC1,0x00,0x00,}},
- {0x95EB,2,{0xE3,0xC6,0x00,0x00,}},
- {0x95EC,2,{0xEA,0x5C,0x00,0x00,}},
- {0x95ED,2,{0xB1,0xD5,0x00,0x00,}},
- {0x95EE,2,{0xCE,0xCA,0x00,0x00,}},
- {0x95EF,2,{0xB4,0xB3,0x00,0x00,}},
- {0x95F0,2,{0xC8,0xF2,0x00,0x00,}},
- {0x95F1,2,{0xE3,0xC7,0x00,0x00,}},
- {0x95F2,2,{0xCF,0xD0,0x00,0x00,}},
- {0x95F3,2,{0xE3,0xC8,0x00,0x00,}},
- {0x95F4,2,{0xBC,0xE4,0x00,0x00,}},
- {0x95F5,2,{0xE3,0xC9,0x00,0x00,}},
- {0x95F6,2,{0xE3,0xCA,0x00,0x00,}},
- {0x95F7,2,{0xC3,0xC6,0x00,0x00,}},
- {0x95F8,2,{0xD5,0xA2,0x00,0x00,}},
- {0x95F9,2,{0xC4,0xD6,0x00,0x00,}},
- {0x95FA,2,{0xB9,0xEB,0x00,0x00,}},
- {0x95FB,2,{0xCE,0xC5,0x00,0x00,}},
- {0x95FC,2,{0xE3,0xCB,0x00,0x00,}},
- {0x95FD,2,{0xC3,0xF6,0x00,0x00,}},
- {0x95FE,2,{0xE3,0xCC,0x00,0x00,}},
- {0x95FF,2,{0xEA,0x5D,0x00,0x00,}},
- {0x9600,2,{0xB7,0xA7,0x00,0x00,}},
- {0x9601,2,{0xB8,0xF3,0x00,0x00,}},
- {0x9602,2,{0xBA,0xD2,0x00,0x00,}},
- {0x9603,2,{0xE3,0xCD,0x00,0x00,}},
- {0x9604,2,{0xE3,0xCE,0x00,0x00,}},
- {0x9605,2,{0xD4,0xC4,0x00,0x00,}},
- {0x9606,2,{0xE3,0xCF,0x00,0x00,}},
- {0x9607,2,{0xEA,0x5E,0x00,0x00,}},
- {0x9608,2,{0xE3,0xD0,0x00,0x00,}},
- {0x9609,2,{0xD1,0xCB,0x00,0x00,}},
- {0x960A,2,{0xE3,0xD1,0x00,0x00,}},
- {0x960B,2,{0xE3,0xD2,0x00,0x00,}},
- {0x960C,2,{0xE3,0xD3,0x00,0x00,}},
- {0x960D,2,{0xE3,0xD4,0x00,0x00,}},
- {0x960E,2,{0xD1,0xD6,0x00,0x00,}},
- {0x960F,2,{0xE3,0xD5,0x00,0x00,}},
- {0x9610,2,{0xB2,0xFB,0x00,0x00,}},
- {0x9611,2,{0xC0,0xBB,0x00,0x00,}},
- {0x9612,2,{0xE3,0xD6,0x00,0x00,}},
- {0x9613,2,{0xEA,0x5F,0x00,0x00,}},
- {0x9614,2,{0xC0,0xAB,0x00,0x00,}},
- {0x9615,2,{0xE3,0xD7,0x00,0x00,}},
- {0x9616,2,{0xE3,0xD8,0x00,0x00,}},
- {0x9617,2,{0xE3,0xD9,0x00,0x00,}},
- {0x9618,2,{0xEA,0x60,0x00,0x00,}},
- {0x9619,2,{0xE3,0xDA,0x00,0x00,}},
- {0x961A,2,{0xE3,0xDB,0x00,0x00,}},
- {0x961B,2,{0xEA,0x61,0x00,0x00,}},
- {0x961C,2,{0xB8,0xB7,0x00,0x00,}},
- {0x961D,2,{0xDA,0xE2,0x00,0x00,}},
- {0x961E,2,{0xEA,0x62,0x00,0x00,}},
- {0x961F,2,{0xB6,0xD3,0x00,0x00,}},
- {0x9620,2,{0xEA,0x63,0x00,0x00,}},
- {0x9621,2,{0xDA,0xE4,0x00,0x00,}},
- {0x9622,2,{0xDA,0xE3,0x00,0x00,}},
- {0x9623,2,{0xEA,0x64,0x00,0x00,}},
- {0x9624,2,{0xEA,0x65,0x00,0x00,}},
- {0x9625,2,{0xEA,0x66,0x00,0x00,}},
- {0x9626,2,{0xEA,0x67,0x00,0x00,}},
- {0x9627,2,{0xEA,0x68,0x00,0x00,}},
- {0x9628,2,{0xEA,0x69,0x00,0x00,}},
- {0x9629,2,{0xEA,0x6A,0x00,0x00,}},
- {0x962A,2,{0xDA,0xE6,0x00,0x00,}},
- {0x962B,2,{0xEA,0x6B,0x00,0x00,}},
- {0x962C,2,{0xEA,0x6C,0x00,0x00,}},
- {0x962D,2,{0xEA,0x6D,0x00,0x00,}},
- {0x962E,2,{0xC8,0xEE,0x00,0x00,}},
- {0x962F,2,{0xEA,0x6E,0x00,0x00,}},
- {0x9630,2,{0xEA,0x6F,0x00,0x00,}},
- {0x9631,2,{0xDA,0xE5,0x00,0x00,}},
- {0x9632,2,{0xB7,0xC0,0x00,0x00,}},
- {0x9633,2,{0xD1,0xF4,0x00,0x00,}},
- {0x9634,2,{0xD2,0xF5,0x00,0x00,}},
- {0x9635,2,{0xD5,0xF3,0x00,0x00,}},
- {0x9636,2,{0xBD,0xD7,0x00,0x00,}},
- {0x9637,2,{0xEA,0x70,0x00,0x00,}},
- {0x9638,2,{0xEA,0x71,0x00,0x00,}},
- {0x9639,2,{0xEA,0x72,0x00,0x00,}},
- {0x963A,2,{0xEA,0x73,0x00,0x00,}},
- {0x963B,2,{0xD7,0xE8,0x00,0x00,}},
- {0x963C,2,{0xDA,0xE8,0x00,0x00,}},
- {0x963D,2,{0xDA,0xE7,0x00,0x00,}},
- {0x963E,2,{0xEA,0x74,0x00,0x00,}},
- {0x963F,2,{0xB0,0xA2,0x00,0x00,}},
- {0x9640,2,{0xCD,0xD3,0x00,0x00,}},
- {0x9641,2,{0xEA,0x75,0x00,0x00,}},
- {0x9642,2,{0xDA,0xE9,0x00,0x00,}},
- {0x9643,2,{0xEA,0x76,0x00,0x00,}},
- {0x9644,2,{0xB8,0xBD,0x00,0x00,}},
- {0x9645,2,{0xBC,0xCA,0x00,0x00,}},
- {0x9646,2,{0xC2,0xBD,0x00,0x00,}},
- {0x9647,2,{0xC2,0xA4,0x00,0x00,}},
- {0x9648,2,{0xB3,0xC2,0x00,0x00,}},
- {0x9649,2,{0xDA,0xEA,0x00,0x00,}},
- {0x964A,2,{0xEA,0x77,0x00,0x00,}},
- {0x964B,2,{0xC2,0xAA,0x00,0x00,}},
- {0x964C,2,{0xC4,0xB0,0x00,0x00,}},
- {0x964D,2,{0xBD,0xB5,0x00,0x00,}},
- {0x964E,2,{0xEA,0x78,0x00,0x00,}},
- {0x964F,2,{0xEA,0x79,0x00,0x00,}},
- {0x9650,2,{0xCF,0xDE,0x00,0x00,}},
- {0x9651,2,{0xEA,0x7A,0x00,0x00,}},
- {0x9652,2,{0xEA,0x7B,0x00,0x00,}},
- {0x9653,2,{0xEA,0x7C,0x00,0x00,}},
- {0x9654,2,{0xDA,0xEB,0x00,0x00,}},
- {0x9655,2,{0xC9,0xC2,0x00,0x00,}},
- {0x9656,2,{0xEA,0x7D,0x00,0x00,}},
- {0x9657,2,{0xEA,0x7E,0x00,0x00,}},
- {0x9658,2,{0xEA,0x80,0x00,0x00,}},
- {0x9659,2,{0xEA,0x81,0x00,0x00,}},
- {0x965A,2,{0xEA,0x82,0x00,0x00,}},
- {0x965B,2,{0xB1,0xDD,0x00,0x00,}},
- {0x965C,2,{0xEA,0x83,0x00,0x00,}},
- {0x965D,2,{0xEA,0x84,0x00,0x00,}},
- {0x965E,2,{0xEA,0x85,0x00,0x00,}},
- {0x965F,2,{0xDA,0xEC,0x00,0x00,}},
- {0x9660,2,{0xEA,0x86,0x00,0x00,}},
- {0x9661,2,{0xB6,0xB8,0x00,0x00,}},
- {0x9662,2,{0xD4,0xBA,0x00,0x00,}},
- {0x9663,2,{0xEA,0x87,0x00,0x00,}},
- {0x9664,2,{0xB3,0xFD,0x00,0x00,}},
- {0x9665,2,{0xEA,0x88,0x00,0x00,}},
- {0x9666,2,{0xEA,0x89,0x00,0x00,}},
- {0x9667,2,{0xDA,0xED,0x00,0x00,}},
- {0x9668,2,{0xD4,0xC9,0x00,0x00,}},
- {0x9669,2,{0xCF,0xD5,0x00,0x00,}},
- {0x966A,2,{0xC5,0xE3,0x00,0x00,}},
- {0x966B,2,{0xEA,0x8A,0x00,0x00,}},
- {0x966C,2,{0xDA,0xEE,0x00,0x00,}},
- {0x966D,2,{0xEA,0x8B,0x00,0x00,}},
- {0x966E,2,{0xEA,0x8C,0x00,0x00,}},
- {0x966F,2,{0xEA,0x8D,0x00,0x00,}},
- {0x9670,2,{0xEA,0x8E,0x00,0x00,}},
- {0x9671,2,{0xEA,0x8F,0x00,0x00,}},
- {0x9672,2,{0xDA,0xEF,0x00,0x00,}},
- {0x9673,2,{0xEA,0x90,0x00,0x00,}},
- {0x9674,2,{0xDA,0xF0,0x00,0x00,}},
- {0x9675,2,{0xC1,0xEA,0x00,0x00,}},
- {0x9676,2,{0xCC,0xD5,0x00,0x00,}},
- {0x9677,2,{0xCF,0xDD,0x00,0x00,}},
- {0x9678,2,{0xEA,0x91,0x00,0x00,}},
- {0x9679,2,{0xEA,0x92,0x00,0x00,}},
- {0x967A,2,{0xEA,0x93,0x00,0x00,}},
- {0x967B,2,{0xEA,0x94,0x00,0x00,}},
- {0x967C,2,{0xEA,0x95,0x00,0x00,}},
- {0x967D,2,{0xEA,0x96,0x00,0x00,}},
- {0x967E,2,{0xEA,0x97,0x00,0x00,}},
- {0x967F,2,{0xEA,0x98,0x00,0x00,}},
- {0x9680,2,{0xEA,0x99,0x00,0x00,}},
- {0x9681,2,{0xEA,0x9A,0x00,0x00,}},
- {0x9682,2,{0xEA,0x9B,0x00,0x00,}},
- {0x9683,2,{0xEA,0x9C,0x00,0x00,}},
- {0x9684,2,{0xEA,0x9D,0x00,0x00,}},
- {0x9685,2,{0xD3,0xE7,0x00,0x00,}},
- {0x9686,2,{0xC2,0xA1,0x00,0x00,}},
- {0x9687,2,{0xEA,0x9E,0x00,0x00,}},
- {0x9688,2,{0xDA,0xF1,0x00,0x00,}},
- {0x9689,2,{0xEA,0x9F,0x00,0x00,}},
- {0x968A,2,{0xEA,0xA0,0x00,0x00,}},
- {0x968B,2,{0xCB,0xE5,0x00,0x00,}},
- {0x968C,2,{0xEB,0x40,0x00,0x00,}},
- {0x968D,2,{0xDA,0xF2,0x00,0x00,}},
- {0x968E,2,{0xEB,0x41,0x00,0x00,}},
- {0x968F,2,{0xCB,0xE6,0x00,0x00,}},
- {0x9690,2,{0xD2,0xFE,0x00,0x00,}},
- {0x9691,2,{0xEB,0x42,0x00,0x00,}},
- {0x9692,2,{0xEB,0x43,0x00,0x00,}},
- {0x9693,2,{0xEB,0x44,0x00,0x00,}},
- {0x9694,2,{0xB8,0xF4,0x00,0x00,}},
- {0x9695,2,{0xEB,0x45,0x00,0x00,}},
- {0x9696,2,{0xEB,0x46,0x00,0x00,}},
- {0x9697,2,{0xDA,0xF3,0x00,0x00,}},
- {0x9698,2,{0xB0,0xAF,0x00,0x00,}},
- {0x9699,2,{0xCF,0xB6,0x00,0x00,}},
- {0x969A,2,{0xEB,0x47,0x00,0x00,}},
- {0x969B,2,{0xEB,0x48,0x00,0x00,}},
- {0x969C,2,{0xD5,0xCF,0x00,0x00,}},
- {0x969D,2,{0xEB,0x49,0x00,0x00,}},
- {0x969E,2,{0xEB,0x4A,0x00,0x00,}},
- {0x969F,2,{0xEB,0x4B,0x00,0x00,}},
- {0x96A0,2,{0xEB,0x4C,0x00,0x00,}},
- {0x96A1,2,{0xEB,0x4D,0x00,0x00,}},
- {0x96A2,2,{0xEB,0x4E,0x00,0x00,}},
- {0x96A3,2,{0xEB,0x4F,0x00,0x00,}},
- {0x96A4,2,{0xEB,0x50,0x00,0x00,}},
- {0x96A5,2,{0xEB,0x51,0x00,0x00,}},
- {0x96A6,2,{0xEB,0x52,0x00,0x00,}},
- {0x96A7,2,{0xCB,0xED,0x00,0x00,}},
- {0x96A8,2,{0xEB,0x53,0x00,0x00,}},
- {0x96A9,2,{0xEB,0x54,0x00,0x00,}},
- {0x96AA,2,{0xEB,0x55,0x00,0x00,}},
- {0x96AB,2,{0xEB,0x56,0x00,0x00,}},
- {0x96AC,2,{0xEB,0x57,0x00,0x00,}},
- {0x96AD,2,{0xEB,0x58,0x00,0x00,}},
- {0x96AE,2,{0xEB,0x59,0x00,0x00,}},
- {0x96AF,2,{0xEB,0x5A,0x00,0x00,}},
- {0x96B0,2,{0xDA,0xF4,0x00,0x00,}},
- {0x96B1,2,{0xEB,0x5B,0x00,0x00,}},
- {0x96B2,2,{0xEB,0x5C,0x00,0x00,}},
- {0x96B3,2,{0xE3,0xC4,0x00,0x00,}},
- {0x96B4,2,{0xEB,0x5D,0x00,0x00,}},
- {0x96B5,2,{0xEB,0x5E,0x00,0x00,}},
- {0x96B6,2,{0xC1,0xA5,0x00,0x00,}},
- {0x96B7,2,{0xEB,0x5F,0x00,0x00,}},
- {0x96B8,2,{0xEB,0x60,0x00,0x00,}},
- {0x96B9,2,{0xF6,0xBF,0x00,0x00,}},
- {0x96BA,2,{0xEB,0x61,0x00,0x00,}},
- {0x96BB,2,{0xEB,0x62,0x00,0x00,}},
- {0x96BC,2,{0xF6,0xC0,0x00,0x00,}},
- {0x96BD,2,{0xF6,0xC1,0x00,0x00,}},
- {0x96BE,2,{0xC4,0xD1,0x00,0x00,}},
- {0x96BF,2,{0xEB,0x63,0x00,0x00,}},
- {0x96C0,2,{0xC8,0xB8,0x00,0x00,}},
- {0x96C1,2,{0xD1,0xE3,0x00,0x00,}},
- {0x96C2,2,{0xEB,0x64,0x00,0x00,}},
- {0x96C3,2,{0xEB,0x65,0x00,0x00,}},
- {0x96C4,2,{0xD0,0xDB,0x00,0x00,}},
- {0x96C5,2,{0xD1,0xC5,0x00,0x00,}},
- {0x96C6,2,{0xBC,0xAF,0x00,0x00,}},
- {0x96C7,2,{0xB9,0xCD,0x00,0x00,}},
- {0x96C8,2,{0xEB,0x66,0x00,0x00,}},
- {0x96C9,2,{0xEF,0xF4,0x00,0x00,}},
- {0x96CA,2,{0xEB,0x67,0x00,0x00,}},
- {0x96CB,2,{0xEB,0x68,0x00,0x00,}},
- {0x96CC,2,{0xB4,0xC6,0x00,0x00,}},
- {0x96CD,2,{0xD3,0xBA,0x00,0x00,}},
- {0x96CE,2,{0xF6,0xC2,0x00,0x00,}},
- {0x96CF,2,{0xB3,0xFB,0x00,0x00,}},
- {0x96D0,2,{0xEB,0x69,0x00,0x00,}},
- {0x96D1,2,{0xEB,0x6A,0x00,0x00,}},
- {0x96D2,2,{0xF6,0xC3,0x00,0x00,}},
- {0x96D3,2,{0xEB,0x6B,0x00,0x00,}},
- {0x96D4,2,{0xEB,0x6C,0x00,0x00,}},
- {0x96D5,2,{0xB5,0xF1,0x00,0x00,}},
- {0x96D6,2,{0xEB,0x6D,0x00,0x00,}},
- {0x96D7,2,{0xEB,0x6E,0x00,0x00,}},
- {0x96D8,2,{0xEB,0x6F,0x00,0x00,}},
- {0x96D9,2,{0xEB,0x70,0x00,0x00,}},
- {0x96DA,2,{0xEB,0x71,0x00,0x00,}},
- {0x96DB,2,{0xEB,0x72,0x00,0x00,}},
- {0x96DC,2,{0xEB,0x73,0x00,0x00,}},
- {0x96DD,2,{0xEB,0x74,0x00,0x00,}},
- {0x96DE,2,{0xEB,0x75,0x00,0x00,}},
- {0x96DF,2,{0xEB,0x76,0x00,0x00,}},
- {0x96E0,2,{0xF6,0xC5,0x00,0x00,}},
- {0x96E1,2,{0xEB,0x77,0x00,0x00,}},
- {0x96E2,2,{0xEB,0x78,0x00,0x00,}},
- {0x96E3,2,{0xEB,0x79,0x00,0x00,}},
- {0x96E4,2,{0xEB,0x7A,0x00,0x00,}},
- {0x96E5,2,{0xEB,0x7B,0x00,0x00,}},
- {0x96E6,2,{0xEB,0x7C,0x00,0x00,}},
- {0x96E7,2,{0xEB,0x7D,0x00,0x00,}},
- {0x96E8,2,{0xD3,0xEA,0x00,0x00,}},
- {0x96E9,2,{0xF6,0xA7,0x00,0x00,}},
- {0x96EA,2,{0xD1,0xA9,0x00,0x00,}},
- {0x96EB,2,{0xEB,0x7E,0x00,0x00,}},
- {0x96EC,2,{0xEB,0x80,0x00,0x00,}},
- {0x96ED,2,{0xEB,0x81,0x00,0x00,}},
- {0x96EE,2,{0xEB,0x82,0x00,0x00,}},
- {0x96EF,2,{0xF6,0xA9,0x00,0x00,}},
- {0x96F0,2,{0xEB,0x83,0x00,0x00,}},
- {0x96F1,2,{0xEB,0x84,0x00,0x00,}},
- {0x96F2,2,{0xEB,0x85,0x00,0x00,}},
- {0x96F3,2,{0xF6,0xA8,0x00,0x00,}},
- {0x96F4,2,{0xEB,0x86,0x00,0x00,}},
- {0x96F5,2,{0xEB,0x87,0x00,0x00,}},
- {0x96F6,2,{0xC1,0xE3,0x00,0x00,}},
- {0x96F7,2,{0xC0,0xD7,0x00,0x00,}},
- {0x96F8,2,{0xEB,0x88,0x00,0x00,}},
- {0x96F9,2,{0xB1,0xA2,0x00,0x00,}},
- {0x96FA,2,{0xEB,0x89,0x00,0x00,}},
- {0x96FB,2,{0xEB,0x8A,0x00,0x00,}},
- {0x96FC,2,{0xEB,0x8B,0x00,0x00,}},
- {0x96FD,2,{0xEB,0x8C,0x00,0x00,}},
- {0x96FE,2,{0xCE,0xED,0x00,0x00,}},
- {0x96FF,2,{0xEB,0x8D,0x00,0x00,}},
- {0x9700,2,{0xD0,0xE8,0x00,0x00,}},
- {0x9701,2,{0xF6,0xAB,0x00,0x00,}},
- {0x9702,2,{0xEB,0x8E,0x00,0x00,}},
- {0x9703,2,{0xEB,0x8F,0x00,0x00,}},
- {0x9704,2,{0xCF,0xF6,0x00,0x00,}},
- {0x9705,2,{0xEB,0x90,0x00,0x00,}},
- {0x9706,2,{0xF6,0xAA,0x00,0x00,}},
- {0x9707,2,{0xD5,0xF0,0x00,0x00,}},
- {0x9708,2,{0xF6,0xAC,0x00,0x00,}},
- {0x9709,2,{0xC3,0xB9,0x00,0x00,}},
- {0x970A,2,{0xEB,0x91,0x00,0x00,}},
- {0x970B,2,{0xEB,0x92,0x00,0x00,}},
- {0x970C,2,{0xEB,0x93,0x00,0x00,}},
- {0x970D,2,{0xBB,0xF4,0x00,0x00,}},
- {0x970E,2,{0xF6,0xAE,0x00,0x00,}},
- {0x970F,2,{0xF6,0xAD,0x00,0x00,}},
- {0x9710,2,{0xEB,0x94,0x00,0x00,}},
- {0x9711,2,{0xEB,0x95,0x00,0x00,}},
- {0x9712,2,{0xEB,0x96,0x00,0x00,}},
- {0x9713,2,{0xC4,0xDE,0x00,0x00,}},
- {0x9714,2,{0xEB,0x97,0x00,0x00,}},
- {0x9715,2,{0xEB,0x98,0x00,0x00,}},
- {0x9716,2,{0xC1,0xD8,0x00,0x00,}},
- {0x9717,2,{0xEB,0x99,0x00,0x00,}},
- {0x9718,2,{0xEB,0x9A,0x00,0x00,}},
- {0x9719,2,{0xEB,0x9B,0x00,0x00,}},
- {0x971A,2,{0xEB,0x9C,0x00,0x00,}},
- {0x971B,2,{0xEB,0x9D,0x00,0x00,}},
- {0x971C,2,{0xCB,0xAA,0x00,0x00,}},
- {0x971D,2,{0xEB,0x9E,0x00,0x00,}},
- {0x971E,2,{0xCF,0xBC,0x00,0x00,}},
- {0x971F,2,{0xEB,0x9F,0x00,0x00,}},
- {0x9720,2,{0xEB,0xA0,0x00,0x00,}},
- {0x9721,2,{0xEC,0x40,0x00,0x00,}},
- {0x9722,2,{0xEC,0x41,0x00,0x00,}},
- {0x9723,2,{0xEC,0x42,0x00,0x00,}},
- {0x9724,2,{0xEC,0x43,0x00,0x00,}},
- {0x9725,2,{0xEC,0x44,0x00,0x00,}},
- {0x9726,2,{0xEC,0x45,0x00,0x00,}},
- {0x9727,2,{0xEC,0x46,0x00,0x00,}},
- {0x9728,2,{0xEC,0x47,0x00,0x00,}},
- {0x9729,2,{0xEC,0x48,0x00,0x00,}},
- {0x972A,2,{0xF6,0xAF,0x00,0x00,}},
- {0x972B,2,{0xEC,0x49,0x00,0x00,}},
- {0x972C,2,{0xEC,0x4A,0x00,0x00,}},
- {0x972D,2,{0xF6,0xB0,0x00,0x00,}},
- {0x972E,2,{0xEC,0x4B,0x00,0x00,}},
- {0x972F,2,{0xEC,0x4C,0x00,0x00,}},
- {0x9730,2,{0xF6,0xB1,0x00,0x00,}},
- {0x9731,2,{0xEC,0x4D,0x00,0x00,}},
- {0x9732,2,{0xC2,0xB6,0x00,0x00,}},
- {0x9733,2,{0xEC,0x4E,0x00,0x00,}},
- {0x9734,2,{0xEC,0x4F,0x00,0x00,}},
- {0x9735,2,{0xEC,0x50,0x00,0x00,}},
- {0x9736,2,{0xEC,0x51,0x00,0x00,}},
- {0x9737,2,{0xEC,0x52,0x00,0x00,}},
- {0x9738,2,{0xB0,0xD4,0x00,0x00,}},
- {0x9739,2,{0xC5,0xF9,0x00,0x00,}},
- {0x973A,2,{0xEC,0x53,0x00,0x00,}},
- {0x973B,2,{0xEC,0x54,0x00,0x00,}},
- {0x973C,2,{0xEC,0x55,0x00,0x00,}},
- {0x973D,2,{0xEC,0x56,0x00,0x00,}},
- {0x973E,2,{0xF6,0xB2,0x00,0x00,}},
- {0x973F,2,{0xEC,0x57,0x00,0x00,}},
- {0x9740,2,{0xEC,0x58,0x00,0x00,}},
- {0x9741,2,{0xEC,0x59,0x00,0x00,}},
- {0x9742,2,{0xEC,0x5A,0x00,0x00,}},
- {0x9743,2,{0xEC,0x5B,0x00,0x00,}},
- {0x9744,2,{0xEC,0x5C,0x00,0x00,}},
- {0x9745,2,{0xEC,0x5D,0x00,0x00,}},
- {0x9746,2,{0xEC,0x5E,0x00,0x00,}},
- {0x9747,2,{0xEC,0x5F,0x00,0x00,}},
- {0x9748,2,{0xEC,0x60,0x00,0x00,}},
- {0x9749,2,{0xEC,0x61,0x00,0x00,}},
- {0x974A,2,{0xEC,0x62,0x00,0x00,}},
- {0x974B,2,{0xEC,0x63,0x00,0x00,}},
- {0x974C,2,{0xEC,0x64,0x00,0x00,}},
- {0x974D,2,{0xEC,0x65,0x00,0x00,}},
- {0x974E,2,{0xEC,0x66,0x00,0x00,}},
- {0x974F,2,{0xEC,0x67,0x00,0x00,}},
- {0x9750,2,{0xEC,0x68,0x00,0x00,}},
- {0x9751,2,{0xEC,0x69,0x00,0x00,}},
- {0x9752,2,{0xC7,0xE0,0x00,0x00,}},
- {0x9753,2,{0xF6,0xA6,0x00,0x00,}},
- {0x9754,2,{0xEC,0x6A,0x00,0x00,}},
- {0x9755,2,{0xEC,0x6B,0x00,0x00,}},
- {0x9756,2,{0xBE,0xB8,0x00,0x00,}},
- {0x9757,2,{0xEC,0x6C,0x00,0x00,}},
- {0x9758,2,{0xEC,0x6D,0x00,0x00,}},
- {0x9759,2,{0xBE,0xB2,0x00,0x00,}},
- {0x975A,2,{0xEC,0x6E,0x00,0x00,}},
- {0x975B,2,{0xB5,0xE5,0x00,0x00,}},
- {0x975C,2,{0xEC,0x6F,0x00,0x00,}},
- {0x975D,2,{0xEC,0x70,0x00,0x00,}},
- {0x975E,2,{0xB7,0xC7,0x00,0x00,}},
- {0x975F,2,{0xEC,0x71,0x00,0x00,}},
- {0x9760,2,{0xBF,0xBF,0x00,0x00,}},
- {0x9761,2,{0xC3,0xD2,0x00,0x00,}},
- {0x9762,2,{0xC3,0xE6,0x00,0x00,}},
- {0x9763,2,{0xEC,0x72,0x00,0x00,}},
- {0x9764,2,{0xEC,0x73,0x00,0x00,}},
- {0x9765,2,{0xD8,0xCC,0x00,0x00,}},
- {0x9766,2,{0xEC,0x74,0x00,0x00,}},
- {0x9767,2,{0xEC,0x75,0x00,0x00,}},
- {0x9768,2,{0xEC,0x76,0x00,0x00,}},
- {0x9769,2,{0xB8,0xEF,0x00,0x00,}},
- {0x976A,2,{0xEC,0x77,0x00,0x00,}},
- {0x976B,2,{0xEC,0x78,0x00,0x00,}},
- {0x976C,2,{0xEC,0x79,0x00,0x00,}},
- {0x976D,2,{0xEC,0x7A,0x00,0x00,}},
- {0x976E,2,{0xEC,0x7B,0x00,0x00,}},
- {0x976F,2,{0xEC,0x7C,0x00,0x00,}},
- {0x9770,2,{0xEC,0x7D,0x00,0x00,}},
- {0x9771,2,{0xEC,0x7E,0x00,0x00,}},
- {0x9772,2,{0xEC,0x80,0x00,0x00,}},
- {0x9773,2,{0xBD,0xF9,0x00,0x00,}},
- {0x9774,2,{0xD1,0xA5,0x00,0x00,}},
- {0x9775,2,{0xEC,0x81,0x00,0x00,}},
- {0x9776,2,{0xB0,0xD0,0x00,0x00,}},
- {0x9777,2,{0xEC,0x82,0x00,0x00,}},
- {0x9778,2,{0xEC,0x83,0x00,0x00,}},
- {0x9779,2,{0xEC,0x84,0x00,0x00,}},
- {0x977A,2,{0xEC,0x85,0x00,0x00,}},
- {0x977B,2,{0xEC,0x86,0x00,0x00,}},
- {0x977C,2,{0xF7,0xB0,0x00,0x00,}},
- {0x977D,2,{0xEC,0x87,0x00,0x00,}},
- {0x977E,2,{0xEC,0x88,0x00,0x00,}},
- {0x977F,2,{0xEC,0x89,0x00,0x00,}},
- {0x9780,2,{0xEC,0x8A,0x00,0x00,}},
- {0x9781,2,{0xEC,0x8B,0x00,0x00,}},
- {0x9782,2,{0xEC,0x8C,0x00,0x00,}},
- {0x9783,2,{0xEC,0x8D,0x00,0x00,}},
- {0x9784,2,{0xEC,0x8E,0x00,0x00,}},
- {0x9785,2,{0xF7,0xB1,0x00,0x00,}},
- {0x9786,2,{0xEC,0x8F,0x00,0x00,}},
- {0x9787,2,{0xEC,0x90,0x00,0x00,}},
- {0x9788,2,{0xEC,0x91,0x00,0x00,}},
- {0x9789,2,{0xEC,0x92,0x00,0x00,}},
- {0x978A,2,{0xEC,0x93,0x00,0x00,}},
- {0x978B,2,{0xD0,0xAC,0x00,0x00,}},
- {0x978C,2,{0xEC,0x94,0x00,0x00,}},
- {0x978D,2,{0xB0,0xB0,0x00,0x00,}},
- {0x978E,2,{0xEC,0x95,0x00,0x00,}},
- {0x978F,2,{0xEC,0x96,0x00,0x00,}},
- {0x9790,2,{0xEC,0x97,0x00,0x00,}},
- {0x9791,2,{0xF7,0xB2,0x00,0x00,}},
- {0x9792,2,{0xF7,0xB3,0x00,0x00,}},
- {0x9793,2,{0xEC,0x98,0x00,0x00,}},
- {0x9794,2,{0xF7,0xB4,0x00,0x00,}},
- {0x9795,2,{0xEC,0x99,0x00,0x00,}},
- {0x9796,2,{0xEC,0x9A,0x00,0x00,}},
- {0x9797,2,{0xEC,0x9B,0x00,0x00,}},
- {0x9798,2,{0xC7,0xCA,0x00,0x00,}},
- {0x9799,2,{0xEC,0x9C,0x00,0x00,}},
- {0x979A,2,{0xEC,0x9D,0x00,0x00,}},
- {0x979B,2,{0xEC,0x9E,0x00,0x00,}},
- {0x979C,2,{0xEC,0x9F,0x00,0x00,}},
- {0x979D,2,{0xEC,0xA0,0x00,0x00,}},
- {0x979E,2,{0xED,0x40,0x00,0x00,}},
- {0x979F,2,{0xED,0x41,0x00,0x00,}},
- {0x97A0,2,{0xBE,0xCF,0x00,0x00,}},
- {0x97A1,2,{0xED,0x42,0x00,0x00,}},
- {0x97A2,2,{0xED,0x43,0x00,0x00,}},
- {0x97A3,2,{0xF7,0xB7,0x00,0x00,}},
- {0x97A4,2,{0xED,0x44,0x00,0x00,}},
- {0x97A5,2,{0xED,0x45,0x00,0x00,}},
- {0x97A6,2,{0xED,0x46,0x00,0x00,}},
- {0x97A7,2,{0xED,0x47,0x00,0x00,}},
- {0x97A8,2,{0xED,0x48,0x00,0x00,}},
- {0x97A9,2,{0xED,0x49,0x00,0x00,}},
- {0x97AA,2,{0xED,0x4A,0x00,0x00,}},
- {0x97AB,2,{0xF7,0xB6,0x00,0x00,}},
- {0x97AC,2,{0xED,0x4B,0x00,0x00,}},
- {0x97AD,2,{0xB1,0xDE,0x00,0x00,}},
- {0x97AE,2,{0xED,0x4C,0x00,0x00,}},
- {0x97AF,2,{0xF7,0xB5,0x00,0x00,}},
- {0x97B0,2,{0xED,0x4D,0x00,0x00,}},
- {0x97B1,2,{0xED,0x4E,0x00,0x00,}},
- {0x97B2,2,{0xF7,0xB8,0x00,0x00,}},
- {0x97B3,2,{0xED,0x4F,0x00,0x00,}},
- {0x97B4,2,{0xF7,0xB9,0x00,0x00,}},
- {0x97B5,2,{0xED,0x50,0x00,0x00,}},
- {0x97B6,2,{0xED,0x51,0x00,0x00,}},
- {0x97B7,2,{0xED,0x52,0x00,0x00,}},
- {0x97B8,2,{0xED,0x53,0x00,0x00,}},
- {0x97B9,2,{0xED,0x54,0x00,0x00,}},
- {0x97BA,2,{0xED,0x55,0x00,0x00,}},
- {0x97BB,2,{0xED,0x56,0x00,0x00,}},
- {0x97BC,2,{0xED,0x57,0x00,0x00,}},
- {0x97BD,2,{0xED,0x58,0x00,0x00,}},
- {0x97BE,2,{0xED,0x59,0x00,0x00,}},
- {0x97BF,2,{0xED,0x5A,0x00,0x00,}},
- {0x97C0,2,{0xED,0x5B,0x00,0x00,}},
- {0x97C1,2,{0xED,0x5C,0x00,0x00,}},
- {0x97C2,2,{0xED,0x5D,0x00,0x00,}},
- {0x97C3,2,{0xED,0x5E,0x00,0x00,}},
- {0x97C4,2,{0xED,0x5F,0x00,0x00,}},
- {0x97C5,2,{0xED,0x60,0x00,0x00,}},
- {0x97C6,2,{0xED,0x61,0x00,0x00,}},
- {0x97C7,2,{0xED,0x62,0x00,0x00,}},
- {0x97C8,2,{0xED,0x63,0x00,0x00,}},
- {0x97C9,2,{0xED,0x64,0x00,0x00,}},
- {0x97CA,2,{0xED,0x65,0x00,0x00,}},
- {0x97CB,2,{0xED,0x66,0x00,0x00,}},
- {0x97CC,2,{0xED,0x67,0x00,0x00,}},
- {0x97CD,2,{0xED,0x68,0x00,0x00,}},
- {0x97CE,2,{0xED,0x69,0x00,0x00,}},
- {0x97CF,2,{0xED,0x6A,0x00,0x00,}},
- {0x97D0,2,{0xED,0x6B,0x00,0x00,}},
- {0x97D1,2,{0xED,0x6C,0x00,0x00,}},
- {0x97D2,2,{0xED,0x6D,0x00,0x00,}},
- {0x97D3,2,{0xED,0x6E,0x00,0x00,}},
- {0x97D4,2,{0xED,0x6F,0x00,0x00,}},
- {0x97D5,2,{0xED,0x70,0x00,0x00,}},
- {0x97D6,2,{0xED,0x71,0x00,0x00,}},
- {0x97D7,2,{0xED,0x72,0x00,0x00,}},
- {0x97D8,2,{0xED,0x73,0x00,0x00,}},
- {0x97D9,2,{0xED,0x74,0x00,0x00,}},
- {0x97DA,2,{0xED,0x75,0x00,0x00,}},
- {0x97DB,2,{0xED,0x76,0x00,0x00,}},
- {0x97DC,2,{0xED,0x77,0x00,0x00,}},
- {0x97DD,2,{0xED,0x78,0x00,0x00,}},
- {0x97DE,2,{0xED,0x79,0x00,0x00,}},
- {0x97DF,2,{0xED,0x7A,0x00,0x00,}},
- {0x97E0,2,{0xED,0x7B,0x00,0x00,}},
- {0x97E1,2,{0xED,0x7C,0x00,0x00,}},
- {0x97E2,2,{0xED,0x7D,0x00,0x00,}},
- {0x97E3,2,{0xED,0x7E,0x00,0x00,}},
- {0x97E4,2,{0xED,0x80,0x00,0x00,}},
- {0x97E5,2,{0xED,0x81,0x00,0x00,}},
- {0x97E6,2,{0xCE,0xA4,0x00,0x00,}},
- {0x97E7,2,{0xC8,0xCD,0x00,0x00,}},
- {0x97E8,2,{0xED,0x82,0x00,0x00,}},
- {0x97E9,2,{0xBA,0xAB,0x00,0x00,}},
- {0x97EA,2,{0xE8,0xB8,0x00,0x00,}},
- {0x97EB,2,{0xE8,0xB9,0x00,0x00,}},
- {0x97EC,2,{0xE8,0xBA,0x00,0x00,}},
- {0x97ED,2,{0xBE,0xC2,0x00,0x00,}},
- {0x97EE,2,{0xED,0x83,0x00,0x00,}},
- {0x97EF,2,{0xED,0x84,0x00,0x00,}},
- {0x97F0,2,{0xED,0x85,0x00,0x00,}},
- {0x97F1,2,{0xED,0x86,0x00,0x00,}},
- {0x97F2,2,{0xED,0x87,0x00,0x00,}},
- {0x97F3,2,{0xD2,0xF4,0x00,0x00,}},
- {0x97F4,2,{0xED,0x88,0x00,0x00,}},
- {0x97F5,2,{0xD4,0xCF,0x00,0x00,}},
- {0x97F6,2,{0xC9,0xD8,0x00,0x00,}},
- {0x97F7,2,{0xED,0x89,0x00,0x00,}},
- {0x97F8,2,{0xED,0x8A,0x00,0x00,}},
- {0x97F9,2,{0xED,0x8B,0x00,0x00,}},
- {0x97FA,2,{0xED,0x8C,0x00,0x00,}},
- {0x97FB,2,{0xED,0x8D,0x00,0x00,}},
- {0x97FC,2,{0xED,0x8E,0x00,0x00,}},
- {0x97FD,2,{0xED,0x8F,0x00,0x00,}},
- {0x97FE,2,{0xED,0x90,0x00,0x00,}},
- {0x97FF,2,{0xED,0x91,0x00,0x00,}},
- {0x9800,2,{0xED,0x92,0x00,0x00,}},
- {0x9801,2,{0xED,0x93,0x00,0x00,}},
- {0x9802,2,{0xED,0x94,0x00,0x00,}},
- {0x9803,2,{0xED,0x95,0x00,0x00,}},
- {0x9804,2,{0xED,0x96,0x00,0x00,}},
- {0x9805,2,{0xED,0x97,0x00,0x00,}},
- {0x9806,2,{0xED,0x98,0x00,0x00,}},
- {0x9807,2,{0xED,0x99,0x00,0x00,}},
- {0x9808,2,{0xED,0x9A,0x00,0x00,}},
- {0x9809,2,{0xED,0x9B,0x00,0x00,}},
- {0x980A,2,{0xED,0x9C,0x00,0x00,}},
- {0x980B,2,{0xED,0x9D,0x00,0x00,}},
- {0x980C,2,{0xED,0x9E,0x00,0x00,}},
- {0x980D,2,{0xED,0x9F,0x00,0x00,}},
- {0x980E,2,{0xED,0xA0,0x00,0x00,}},
- {0x980F,2,{0xEE,0x40,0x00,0x00,}},
- {0x9810,2,{0xEE,0x41,0x00,0x00,}},
- {0x9811,2,{0xEE,0x42,0x00,0x00,}},
- {0x9812,2,{0xEE,0x43,0x00,0x00,}},
- {0x9813,2,{0xEE,0x44,0x00,0x00,}},
- {0x9814,2,{0xEE,0x45,0x00,0x00,}},
- {0x9815,2,{0xEE,0x46,0x00,0x00,}},
- {0x9816,2,{0xEE,0x47,0x00,0x00,}},
- {0x9817,2,{0xEE,0x48,0x00,0x00,}},
- {0x9818,2,{0xEE,0x49,0x00,0x00,}},
- {0x9819,2,{0xEE,0x4A,0x00,0x00,}},
- {0x981A,2,{0xEE,0x4B,0x00,0x00,}},
- {0x981B,2,{0xEE,0x4C,0x00,0x00,}},
- {0x981C,2,{0xEE,0x4D,0x00,0x00,}},
- {0x981D,2,{0xEE,0x4E,0x00,0x00,}},
- {0x981E,2,{0xEE,0x4F,0x00,0x00,}},
- {0x981F,2,{0xEE,0x50,0x00,0x00,}},
- {0x9820,2,{0xEE,0x51,0x00,0x00,}},
- {0x9821,2,{0xEE,0x52,0x00,0x00,}},
- {0x9822,2,{0xEE,0x53,0x00,0x00,}},
- {0x9823,2,{0xEE,0x54,0x00,0x00,}},
- {0x9824,2,{0xEE,0x55,0x00,0x00,}},
- {0x9825,2,{0xEE,0x56,0x00,0x00,}},
- {0x9826,2,{0xEE,0x57,0x00,0x00,}},
- {0x9827,2,{0xEE,0x58,0x00,0x00,}},
- {0x9828,2,{0xEE,0x59,0x00,0x00,}},
- {0x9829,2,{0xEE,0x5A,0x00,0x00,}},
- {0x982A,2,{0xEE,0x5B,0x00,0x00,}},
- {0x982B,2,{0xEE,0x5C,0x00,0x00,}},
- {0x982C,2,{0xEE,0x5D,0x00,0x00,}},
- {0x982D,2,{0xEE,0x5E,0x00,0x00,}},
- {0x982E,2,{0xEE,0x5F,0x00,0x00,}},
- {0x982F,2,{0xEE,0x60,0x00,0x00,}},
- {0x9830,2,{0xEE,0x61,0x00,0x00,}},
- {0x9831,2,{0xEE,0x62,0x00,0x00,}},
- {0x9832,2,{0xEE,0x63,0x00,0x00,}},
- {0x9833,2,{0xEE,0x64,0x00,0x00,}},
- {0x9834,2,{0xEE,0x65,0x00,0x00,}},
- {0x9835,2,{0xEE,0x66,0x00,0x00,}},
- {0x9836,2,{0xEE,0x67,0x00,0x00,}},
- {0x9837,2,{0xEE,0x68,0x00,0x00,}},
- {0x9838,2,{0xEE,0x69,0x00,0x00,}},
- {0x9839,2,{0xEE,0x6A,0x00,0x00,}},
- {0x983A,2,{0xEE,0x6B,0x00,0x00,}},
- {0x983B,2,{0xEE,0x6C,0x00,0x00,}},
- {0x983C,2,{0xEE,0x6D,0x00,0x00,}},
- {0x983D,2,{0xEE,0x6E,0x00,0x00,}},
- {0x983E,2,{0xEE,0x6F,0x00,0x00,}},
- {0x983F,2,{0xEE,0x70,0x00,0x00,}},
- {0x9840,2,{0xEE,0x71,0x00,0x00,}},
- {0x9841,2,{0xEE,0x72,0x00,0x00,}},
- {0x9842,2,{0xEE,0x73,0x00,0x00,}},
- {0x9843,2,{0xEE,0x74,0x00,0x00,}},
- {0x9844,2,{0xEE,0x75,0x00,0x00,}},
- {0x9845,2,{0xEE,0x76,0x00,0x00,}},
- {0x9846,2,{0xEE,0x77,0x00,0x00,}},
- {0x9847,2,{0xEE,0x78,0x00,0x00,}},
- {0x9848,2,{0xEE,0x79,0x00,0x00,}},
- {0x9849,2,{0xEE,0x7A,0x00,0x00,}},
- {0x984A,2,{0xEE,0x7B,0x00,0x00,}},
- {0x984B,2,{0xEE,0x7C,0x00,0x00,}},
- {0x984C,2,{0xEE,0x7D,0x00,0x00,}},
- {0x984D,2,{0xEE,0x7E,0x00,0x00,}},
- {0x984E,2,{0xEE,0x80,0x00,0x00,}},
- {0x984F,2,{0xEE,0x81,0x00,0x00,}},
- {0x9850,2,{0xEE,0x82,0x00,0x00,}},
- {0x9851,2,{0xEE,0x83,0x00,0x00,}},
- {0x9852,2,{0xEE,0x84,0x00,0x00,}},
- {0x9853,2,{0xEE,0x85,0x00,0x00,}},
- {0x9854,2,{0xEE,0x86,0x00,0x00,}},
- {0x9855,2,{0xEE,0x87,0x00,0x00,}},
- {0x9856,2,{0xEE,0x88,0x00,0x00,}},
- {0x9857,2,{0xEE,0x89,0x00,0x00,}},
- {0x9858,2,{0xEE,0x8A,0x00,0x00,}},
- {0x9859,2,{0xEE,0x8B,0x00,0x00,}},
- {0x985A,2,{0xEE,0x8C,0x00,0x00,}},
- {0x985B,2,{0xEE,0x8D,0x00,0x00,}},
- {0x985C,2,{0xEE,0x8E,0x00,0x00,}},
- {0x985D,2,{0xEE,0x8F,0x00,0x00,}},
- {0x985E,2,{0xEE,0x90,0x00,0x00,}},
- {0x985F,2,{0xEE,0x91,0x00,0x00,}},
- {0x9860,2,{0xEE,0x92,0x00,0x00,}},
- {0x9861,2,{0xEE,0x93,0x00,0x00,}},
- {0x9862,2,{0xEE,0x94,0x00,0x00,}},
- {0x9863,2,{0xEE,0x95,0x00,0x00,}},
- {0x9864,2,{0xEE,0x96,0x00,0x00,}},
- {0x9865,2,{0xEE,0x97,0x00,0x00,}},
- {0x9866,2,{0xEE,0x98,0x00,0x00,}},
- {0x9867,2,{0xEE,0x99,0x00,0x00,}},
- {0x9868,2,{0xEE,0x9A,0x00,0x00,}},
- {0x9869,2,{0xEE,0x9B,0x00,0x00,}},
- {0x986A,2,{0xEE,0x9C,0x00,0x00,}},
- {0x986B,2,{0xEE,0x9D,0x00,0x00,}},
- {0x986C,2,{0xEE,0x9E,0x00,0x00,}},
- {0x986D,2,{0xEE,0x9F,0x00,0x00,}},
- {0x986E,2,{0xEE,0xA0,0x00,0x00,}},
- {0x986F,2,{0xEF,0x40,0x00,0x00,}},
- {0x9870,2,{0xEF,0x41,0x00,0x00,}},
- {0x9871,2,{0xEF,0x42,0x00,0x00,}},
- {0x9872,2,{0xEF,0x43,0x00,0x00,}},
- {0x9873,2,{0xEF,0x44,0x00,0x00,}},
- {0x9874,2,{0xEF,0x45,0x00,0x00,}},
- {0x9875,2,{0xD2,0xB3,0x00,0x00,}},
- {0x9876,2,{0xB6,0xA5,0x00,0x00,}},
- {0x9877,2,{0xC7,0xEA,0x00,0x00,}},
- {0x9878,2,{0xF1,0xFC,0x00,0x00,}},
- {0x9879,2,{0xCF,0xEE,0x00,0x00,}},
- {0x987A,2,{0xCB,0xB3,0x00,0x00,}},
- {0x987B,2,{0xD0,0xEB,0x00,0x00,}},
- {0x987C,2,{0xE7,0xEF,0x00,0x00,}},
- {0x987D,2,{0xCD,0xE7,0x00,0x00,}},
- {0x987E,2,{0xB9,0xCB,0x00,0x00,}},
- {0x987F,2,{0xB6,0xD9,0x00,0x00,}},
- {0x9880,2,{0xF1,0xFD,0x00,0x00,}},
- {0x9881,2,{0xB0,0xE4,0x00,0x00,}},
- {0x9882,2,{0xCB,0xCC,0x00,0x00,}},
- {0x9883,2,{0xF1,0xFE,0x00,0x00,}},
- {0x9884,2,{0xD4,0xA4,0x00,0x00,}},
- {0x9885,2,{0xC2,0xAD,0x00,0x00,}},
- {0x9886,2,{0xC1,0xEC,0x00,0x00,}},
- {0x9887,2,{0xC6,0xC4,0x00,0x00,}},
- {0x9888,2,{0xBE,0xB1,0x00,0x00,}},
- {0x9889,2,{0xF2,0xA1,0x00,0x00,}},
- {0x988A,2,{0xBC,0xD5,0x00,0x00,}},
- {0x988B,2,{0xEF,0x46,0x00,0x00,}},
- {0x988C,2,{0xF2,0xA2,0x00,0x00,}},
- {0x988D,2,{0xF2,0xA3,0x00,0x00,}},
- {0x988E,2,{0xEF,0x47,0x00,0x00,}},
- {0x988F,2,{0xF2,0xA4,0x00,0x00,}},
- {0x9890,2,{0xD2,0xC3,0x00,0x00,}},
- {0x9891,2,{0xC6,0xB5,0x00,0x00,}},
- {0x9892,2,{0xEF,0x48,0x00,0x00,}},
- {0x9893,2,{0xCD,0xC7,0x00,0x00,}},
- {0x9894,2,{0xF2,0xA5,0x00,0x00,}},
- {0x9895,2,{0xEF,0x49,0x00,0x00,}},
- {0x9896,2,{0xD3,0xB1,0x00,0x00,}},
- {0x9897,2,{0xBF,0xC5,0x00,0x00,}},
- {0x9898,2,{0xCC,0xE2,0x00,0x00,}},
- {0x9899,2,{0xEF,0x4A,0x00,0x00,}},
- {0x989A,2,{0xF2,0xA6,0x00,0x00,}},
- {0x989B,2,{0xF2,0xA7,0x00,0x00,}},
- {0x989C,2,{0xD1,0xD5,0x00,0x00,}},
- {0x989D,2,{0xB6,0xEE,0x00,0x00,}},
- {0x989E,2,{0xF2,0xA8,0x00,0x00,}},
- {0x989F,2,{0xF2,0xA9,0x00,0x00,}},
- {0x98A0,2,{0xB5,0xDF,0x00,0x00,}},
- {0x98A1,2,{0xF2,0xAA,0x00,0x00,}},
- {0x98A2,2,{0xF2,0xAB,0x00,0x00,}},
- {0x98A3,2,{0xEF,0x4B,0x00,0x00,}},
- {0x98A4,2,{0xB2,0xFC,0x00,0x00,}},
- {0x98A5,2,{0xF2,0xAC,0x00,0x00,}},
- {0x98A6,2,{0xF2,0xAD,0x00,0x00,}},
- {0x98A7,2,{0xC8,0xA7,0x00,0x00,}},
- {0x98A8,2,{0xEF,0x4C,0x00,0x00,}},
- {0x98A9,2,{0xEF,0x4D,0x00,0x00,}},
- {0x98AA,2,{0xEF,0x4E,0x00,0x00,}},
- {0x98AB,2,{0xEF,0x4F,0x00,0x00,}},
- {0x98AC,2,{0xEF,0x50,0x00,0x00,}},
- {0x98AD,2,{0xEF,0x51,0x00,0x00,}},
- {0x98AE,2,{0xEF,0x52,0x00,0x00,}},
- {0x98AF,2,{0xEF,0x53,0x00,0x00,}},
- {0x98B0,2,{0xEF,0x54,0x00,0x00,}},
- {0x98B1,2,{0xEF,0x55,0x00,0x00,}},
- {0x98B2,2,{0xEF,0x56,0x00,0x00,}},
- {0x98B3,2,{0xEF,0x57,0x00,0x00,}},
- {0x98B4,2,{0xEF,0x58,0x00,0x00,}},
- {0x98B5,2,{0xEF,0x59,0x00,0x00,}},
- {0x98B6,2,{0xEF,0x5A,0x00,0x00,}},
- {0x98B7,2,{0xEF,0x5B,0x00,0x00,}},
- {0x98B8,2,{0xEF,0x5C,0x00,0x00,}},
- {0x98B9,2,{0xEF,0x5D,0x00,0x00,}},
- {0x98BA,2,{0xEF,0x5E,0x00,0x00,}},
- {0x98BB,2,{0xEF,0x5F,0x00,0x00,}},
- {0x98BC,2,{0xEF,0x60,0x00,0x00,}},
- {0x98BD,2,{0xEF,0x61,0x00,0x00,}},
- {0x98BE,2,{0xEF,0x62,0x00,0x00,}},
- {0x98BF,2,{0xEF,0x63,0x00,0x00,}},
- {0x98C0,2,{0xEF,0x64,0x00,0x00,}},
- {0x98C1,2,{0xEF,0x65,0x00,0x00,}},
- {0x98C2,2,{0xEF,0x66,0x00,0x00,}},
- {0x98C3,2,{0xEF,0x67,0x00,0x00,}},
- {0x98C4,2,{0xEF,0x68,0x00,0x00,}},
- {0x98C5,2,{0xEF,0x69,0x00,0x00,}},
- {0x98C6,2,{0xEF,0x6A,0x00,0x00,}},
- {0x98C7,2,{0xEF,0x6B,0x00,0x00,}},
- {0x98C8,2,{0xEF,0x6C,0x00,0x00,}},
- {0x98C9,2,{0xEF,0x6D,0x00,0x00,}},
- {0x98CA,2,{0xEF,0x6E,0x00,0x00,}},
- {0x98CB,2,{0xEF,0x6F,0x00,0x00,}},
- {0x98CC,2,{0xEF,0x70,0x00,0x00,}},
- {0x98CD,2,{0xEF,0x71,0x00,0x00,}},
- {0x98CE,2,{0xB7,0xE7,0x00,0x00,}},
- {0x98CF,2,{0xEF,0x72,0x00,0x00,}},
- {0x98D0,2,{0xEF,0x73,0x00,0x00,}},
- {0x98D1,2,{0xEC,0xA9,0x00,0x00,}},
- {0x98D2,2,{0xEC,0xAA,0x00,0x00,}},
- {0x98D3,2,{0xEC,0xAB,0x00,0x00,}},
- {0x98D4,2,{0xEF,0x74,0x00,0x00,}},
- {0x98D5,2,{0xEC,0xAC,0x00,0x00,}},
- {0x98D6,2,{0xEF,0x75,0x00,0x00,}},
- {0x98D7,2,{0xEF,0x76,0x00,0x00,}},
- {0x98D8,2,{0xC6,0xAE,0x00,0x00,}},
- {0x98D9,2,{0xEC,0xAD,0x00,0x00,}},
- {0x98DA,2,{0xEC,0xAE,0x00,0x00,}},
- {0x98DB,2,{0xEF,0x77,0x00,0x00,}},
- {0x98DC,2,{0xEF,0x78,0x00,0x00,}},
- {0x98DD,2,{0xEF,0x79,0x00,0x00,}},
- {0x98DE,2,{0xB7,0xC9,0x00,0x00,}},
- {0x98DF,2,{0xCA,0xB3,0x00,0x00,}},
- {0x98E0,2,{0xEF,0x7A,0x00,0x00,}},
- {0x98E1,2,{0xEF,0x7B,0x00,0x00,}},
- {0x98E2,2,{0xEF,0x7C,0x00,0x00,}},
- {0x98E3,2,{0xEF,0x7D,0x00,0x00,}},
- {0x98E4,2,{0xEF,0x7E,0x00,0x00,}},
- {0x98E5,2,{0xEF,0x80,0x00,0x00,}},
- {0x98E6,2,{0xEF,0x81,0x00,0x00,}},
- {0x98E7,2,{0xE2,0xB8,0x00,0x00,}},
- {0x98E8,2,{0xF7,0xCF,0x00,0x00,}},
- {0x98E9,2,{0xEF,0x82,0x00,0x00,}},
- {0x98EA,2,{0xEF,0x83,0x00,0x00,}},
- {0x98EB,2,{0xEF,0x84,0x00,0x00,}},
- {0x98EC,2,{0xEF,0x85,0x00,0x00,}},
- {0x98ED,2,{0xEF,0x86,0x00,0x00,}},
- {0x98EE,2,{0xEF,0x87,0x00,0x00,}},
- {0x98EF,2,{0xEF,0x88,0x00,0x00,}},
- {0x98F0,2,{0xEF,0x89,0x00,0x00,}},
- {0x98F1,2,{0xEF,0x8A,0x00,0x00,}},
- {0x98F2,2,{0xEF,0x8B,0x00,0x00,}},
- {0x98F3,2,{0xEF,0x8C,0x00,0x00,}},
- {0x98F4,2,{0xEF,0x8D,0x00,0x00,}},
- {0x98F5,2,{0xEF,0x8E,0x00,0x00,}},
- {0x98F6,2,{0xEF,0x8F,0x00,0x00,}},
- {0x98F7,2,{0xEF,0x90,0x00,0x00,}},
- {0x98F8,2,{0xEF,0x91,0x00,0x00,}},
- {0x98F9,2,{0xEF,0x92,0x00,0x00,}},
- {0x98FA,2,{0xEF,0x93,0x00,0x00,}},
- {0x98FB,2,{0xEF,0x94,0x00,0x00,}},
- {0x98FC,2,{0xEF,0x95,0x00,0x00,}},
- {0x98FD,2,{0xEF,0x96,0x00,0x00,}},
- {0x98FE,2,{0xEF,0x97,0x00,0x00,}},
- {0x98FF,2,{0xEF,0x98,0x00,0x00,}},
- {0x9900,2,{0xEF,0x99,0x00,0x00,}},
- {0x9901,2,{0xEF,0x9A,0x00,0x00,}},
- {0x9902,2,{0xEF,0x9B,0x00,0x00,}},
- {0x9903,2,{0xEF,0x9C,0x00,0x00,}},
- {0x9904,2,{0xEF,0x9D,0x00,0x00,}},
- {0x9905,2,{0xEF,0x9E,0x00,0x00,}},
- {0x9906,2,{0xEF,0x9F,0x00,0x00,}},
- {0x9907,2,{0xEF,0xA0,0x00,0x00,}},
- {0x9908,2,{0xF0,0x40,0x00,0x00,}},
- {0x9909,2,{0xF0,0x41,0x00,0x00,}},
- {0x990A,2,{0xF0,0x42,0x00,0x00,}},
- {0x990B,2,{0xF0,0x43,0x00,0x00,}},
- {0x990C,2,{0xF0,0x44,0x00,0x00,}},
- {0x990D,2,{0xF7,0xD0,0x00,0x00,}},
- {0x990E,2,{0xF0,0x45,0x00,0x00,}},
- {0x990F,2,{0xF0,0x46,0x00,0x00,}},
- {0x9910,2,{0xB2,0xCD,0x00,0x00,}},
- {0x9911,2,{0xF0,0x47,0x00,0x00,}},
- {0x9912,2,{0xF0,0x48,0x00,0x00,}},
- {0x9913,2,{0xF0,0x49,0x00,0x00,}},
- {0x9914,2,{0xF0,0x4A,0x00,0x00,}},
- {0x9915,2,{0xF0,0x4B,0x00,0x00,}},
- {0x9916,2,{0xF0,0x4C,0x00,0x00,}},
- {0x9917,2,{0xF0,0x4D,0x00,0x00,}},
- {0x9918,2,{0xF0,0x4E,0x00,0x00,}},
- {0x9919,2,{0xF0,0x4F,0x00,0x00,}},
- {0x991A,2,{0xF0,0x50,0x00,0x00,}},
- {0x991B,2,{0xF0,0x51,0x00,0x00,}},
- {0x991C,2,{0xF0,0x52,0x00,0x00,}},
- {0x991D,2,{0xF0,0x53,0x00,0x00,}},
- {0x991E,2,{0xF0,0x54,0x00,0x00,}},
- {0x991F,2,{0xF0,0x55,0x00,0x00,}},
- {0x9920,2,{0xF0,0x56,0x00,0x00,}},
- {0x9921,2,{0xF0,0x57,0x00,0x00,}},
- {0x9922,2,{0xF0,0x58,0x00,0x00,}},
- {0x9923,2,{0xF0,0x59,0x00,0x00,}},
- {0x9924,2,{0xF0,0x5A,0x00,0x00,}},
- {0x9925,2,{0xF0,0x5B,0x00,0x00,}},
- {0x9926,2,{0xF0,0x5C,0x00,0x00,}},
- {0x9927,2,{0xF0,0x5D,0x00,0x00,}},
- {0x9928,2,{0xF0,0x5E,0x00,0x00,}},
- {0x9929,2,{0xF0,0x5F,0x00,0x00,}},
- {0x992A,2,{0xF0,0x60,0x00,0x00,}},
- {0x992B,2,{0xF0,0x61,0x00,0x00,}},
- {0x992C,2,{0xF0,0x62,0x00,0x00,}},
- {0x992D,2,{0xF0,0x63,0x00,0x00,}},
- {0x992E,2,{0xF7,0xD1,0x00,0x00,}},
- {0x992F,2,{0xF0,0x64,0x00,0x00,}},
- {0x9930,2,{0xF0,0x65,0x00,0x00,}},
- {0x9931,2,{0xF0,0x66,0x00,0x00,}},
- {0x9932,2,{0xF0,0x67,0x00,0x00,}},
- {0x9933,2,{0xF0,0x68,0x00,0x00,}},
- {0x9934,2,{0xF0,0x69,0x00,0x00,}},
- {0x9935,2,{0xF0,0x6A,0x00,0x00,}},
- {0x9936,2,{0xF0,0x6B,0x00,0x00,}},
- {0x9937,2,{0xF0,0x6C,0x00,0x00,}},
- {0x9938,2,{0xF0,0x6D,0x00,0x00,}},
- {0x9939,2,{0xF0,0x6E,0x00,0x00,}},
- {0x993A,2,{0xF0,0x6F,0x00,0x00,}},
- {0x993B,2,{0xF0,0x70,0x00,0x00,}},
- {0x993C,2,{0xF0,0x71,0x00,0x00,}},
- {0x993D,2,{0xF0,0x72,0x00,0x00,}},
- {0x993E,2,{0xF0,0x73,0x00,0x00,}},
- {0x993F,2,{0xF0,0x74,0x00,0x00,}},
- {0x9940,2,{0xF0,0x75,0x00,0x00,}},
- {0x9941,2,{0xF0,0x76,0x00,0x00,}},
- {0x9942,2,{0xF0,0x77,0x00,0x00,}},
- {0x9943,2,{0xF0,0x78,0x00,0x00,}},
- {0x9944,2,{0xF0,0x79,0x00,0x00,}},
- {0x9945,2,{0xF0,0x7A,0x00,0x00,}},
- {0x9946,2,{0xF0,0x7B,0x00,0x00,}},
- {0x9947,2,{0xF0,0x7C,0x00,0x00,}},
- {0x9948,2,{0xF0,0x7D,0x00,0x00,}},
- {0x9949,2,{0xF0,0x7E,0x00,0x00,}},
- {0x994A,2,{0xF0,0x80,0x00,0x00,}},
- {0x994B,2,{0xF0,0x81,0x00,0x00,}},
- {0x994C,2,{0xF0,0x82,0x00,0x00,}},
- {0x994D,2,{0xF0,0x83,0x00,0x00,}},
- {0x994E,2,{0xF0,0x84,0x00,0x00,}},
- {0x994F,2,{0xF0,0x85,0x00,0x00,}},
- {0x9950,2,{0xF0,0x86,0x00,0x00,}},
- {0x9951,2,{0xF0,0x87,0x00,0x00,}},
- {0x9952,2,{0xF0,0x88,0x00,0x00,}},
- {0x9953,2,{0xF0,0x89,0x00,0x00,}},
- {0x9954,2,{0xF7,0xD3,0x00,0x00,}},
- {0x9955,2,{0xF7,0xD2,0x00,0x00,}},
- {0x9956,2,{0xF0,0x8A,0x00,0x00,}},
- {0x9957,2,{0xF0,0x8B,0x00,0x00,}},
- {0x9958,2,{0xF0,0x8C,0x00,0x00,}},
- {0x9959,2,{0xF0,0x8D,0x00,0x00,}},
- {0x995A,2,{0xF0,0x8E,0x00,0x00,}},
- {0x995B,2,{0xF0,0x8F,0x00,0x00,}},
- {0x995C,2,{0xF0,0x90,0x00,0x00,}},
- {0x995D,2,{0xF0,0x91,0x00,0x00,}},
- {0x995E,2,{0xF0,0x92,0x00,0x00,}},
- {0x995F,2,{0xF0,0x93,0x00,0x00,}},
- {0x9960,2,{0xF0,0x94,0x00,0x00,}},
- {0x9961,2,{0xF0,0x95,0x00,0x00,}},
- {0x9962,2,{0xF0,0x96,0x00,0x00,}},
- {0x9963,2,{0xE2,0xBB,0x00,0x00,}},
- {0x9964,2,{0xF0,0x97,0x00,0x00,}},
- {0x9965,2,{0xBC,0xA2,0x00,0x00,}},
- {0x9966,2,{0xF0,0x98,0x00,0x00,}},
- {0x9967,2,{0xE2,0xBC,0x00,0x00,}},
- {0x9968,2,{0xE2,0xBD,0x00,0x00,}},
- {0x9969,2,{0xE2,0xBE,0x00,0x00,}},
- {0x996A,2,{0xE2,0xBF,0x00,0x00,}},
- {0x996B,2,{0xE2,0xC0,0x00,0x00,}},
- {0x996C,2,{0xE2,0xC1,0x00,0x00,}},
- {0x996D,2,{0xB7,0xB9,0x00,0x00,}},
- {0x996E,2,{0xD2,0xFB,0x00,0x00,}},
- {0x996F,2,{0xBD,0xA4,0x00,0x00,}},
- {0x9970,2,{0xCA,0xCE,0x00,0x00,}},
- {0x9971,2,{0xB1,0xA5,0x00,0x00,}},
- {0x9972,2,{0xCB,0xC7,0x00,0x00,}},
- {0x9973,2,{0xF0,0x99,0x00,0x00,}},
- {0x9974,2,{0xE2,0xC2,0x00,0x00,}},
- {0x9975,2,{0xB6,0xFC,0x00,0x00,}},
- {0x9976,2,{0xC8,0xC4,0x00,0x00,}},
- {0x9977,2,{0xE2,0xC3,0x00,0x00,}},
- {0x9978,2,{0xF0,0x9A,0x00,0x00,}},
- {0x9979,2,{0xF0,0x9B,0x00,0x00,}},
- {0x997A,2,{0xBD,0xC8,0x00,0x00,}},
- {0x997B,2,{0xF0,0x9C,0x00,0x00,}},
- {0x997C,2,{0xB1,0xFD,0x00,0x00,}},
- {0x997D,2,{0xE2,0xC4,0x00,0x00,}},
- {0x997E,2,{0xF0,0x9D,0x00,0x00,}},
- {0x997F,2,{0xB6,0xF6,0x00,0x00,}},
- {0x9980,2,{0xE2,0xC5,0x00,0x00,}},
- {0x9981,2,{0xC4,0xD9,0x00,0x00,}},
- {0x9982,2,{0xF0,0x9E,0x00,0x00,}},
- {0x9983,2,{0xF0,0x9F,0x00,0x00,}},
- {0x9984,2,{0xE2,0xC6,0x00,0x00,}},
- {0x9985,2,{0xCF,0xDA,0x00,0x00,}},
- {0x9986,2,{0xB9,0xDD,0x00,0x00,}},
- {0x9987,2,{0xE2,0xC7,0x00,0x00,}},
- {0x9988,2,{0xC0,0xA1,0x00,0x00,}},
- {0x9989,2,{0xF0,0xA0,0x00,0x00,}},
- {0x998A,2,{0xE2,0xC8,0x00,0x00,}},
- {0x998B,2,{0xB2,0xF6,0x00,0x00,}},
- {0x998C,2,{0xF1,0x40,0x00,0x00,}},
- {0x998D,2,{0xE2,0xC9,0x00,0x00,}},
- {0x998E,2,{0xF1,0x41,0x00,0x00,}},
- {0x998F,2,{0xC1,0xF3,0x00,0x00,}},
- {0x9990,2,{0xE2,0xCA,0x00,0x00,}},
- {0x9991,2,{0xE2,0xCB,0x00,0x00,}},
- {0x9992,2,{0xC2,0xF8,0x00,0x00,}},
- {0x9993,2,{0xE2,0xCC,0x00,0x00,}},
- {0x9994,2,{0xE2,0xCD,0x00,0x00,}},
- {0x9995,2,{0xE2,0xCE,0x00,0x00,}},
- {0x9996,2,{0xCA,0xD7,0x00,0x00,}},
- {0x9997,2,{0xD8,0xB8,0x00,0x00,}},
- {0x9998,2,{0xD9,0xE5,0x00,0x00,}},
- {0x9999,2,{0xCF,0xE3,0x00,0x00,}},
- {0x999A,2,{0xF1,0x42,0x00,0x00,}},
- {0x999B,2,{0xF1,0x43,0x00,0x00,}},
- {0x999C,2,{0xF1,0x44,0x00,0x00,}},
- {0x999D,2,{0xF1,0x45,0x00,0x00,}},
- {0x999E,2,{0xF1,0x46,0x00,0x00,}},
- {0x999F,2,{0xF1,0x47,0x00,0x00,}},
- {0x99A0,2,{0xF1,0x48,0x00,0x00,}},
- {0x99A1,2,{0xF1,0x49,0x00,0x00,}},
- {0x99A2,2,{0xF1,0x4A,0x00,0x00,}},
- {0x99A3,2,{0xF1,0x4B,0x00,0x00,}},
- {0x99A4,2,{0xF1,0x4C,0x00,0x00,}},
- {0x99A5,2,{0xF0,0xA5,0x00,0x00,}},
- {0x99A6,2,{0xF1,0x4D,0x00,0x00,}},
- {0x99A7,2,{0xF1,0x4E,0x00,0x00,}},
- {0x99A8,2,{0xDC,0xB0,0x00,0x00,}},
- {0x99A9,2,{0xF1,0x4F,0x00,0x00,}},
- {0x99AA,2,{0xF1,0x50,0x00,0x00,}},
- {0x99AB,2,{0xF1,0x51,0x00,0x00,}},
- {0x99AC,2,{0xF1,0x52,0x00,0x00,}},
- {0x99AD,2,{0xF1,0x53,0x00,0x00,}},
- {0x99AE,2,{0xF1,0x54,0x00,0x00,}},
- {0x99AF,2,{0xF1,0x55,0x00,0x00,}},
- {0x99B0,2,{0xF1,0x56,0x00,0x00,}},
- {0x99B1,2,{0xF1,0x57,0x00,0x00,}},
- {0x99B2,2,{0xF1,0x58,0x00,0x00,}},
- {0x99B3,2,{0xF1,0x59,0x00,0x00,}},
- {0x99B4,2,{0xF1,0x5A,0x00,0x00,}},
- {0x99B5,2,{0xF1,0x5B,0x00,0x00,}},
- {0x99B6,2,{0xF1,0x5C,0x00,0x00,}},
- {0x99B7,2,{0xF1,0x5D,0x00,0x00,}},
- {0x99B8,2,{0xF1,0x5E,0x00,0x00,}},
- {0x99B9,2,{0xF1,0x5F,0x00,0x00,}},
- {0x99BA,2,{0xF1,0x60,0x00,0x00,}},
- {0x99BB,2,{0xF1,0x61,0x00,0x00,}},
- {0x99BC,2,{0xF1,0x62,0x00,0x00,}},
- {0x99BD,2,{0xF1,0x63,0x00,0x00,}},
- {0x99BE,2,{0xF1,0x64,0x00,0x00,}},
- {0x99BF,2,{0xF1,0x65,0x00,0x00,}},
- {0x99C0,2,{0xF1,0x66,0x00,0x00,}},
- {0x99C1,2,{0xF1,0x67,0x00,0x00,}},
- {0x99C2,2,{0xF1,0x68,0x00,0x00,}},
- {0x99C3,2,{0xF1,0x69,0x00,0x00,}},
- {0x99C4,2,{0xF1,0x6A,0x00,0x00,}},
- {0x99C5,2,{0xF1,0x6B,0x00,0x00,}},
- {0x99C6,2,{0xF1,0x6C,0x00,0x00,}},
- {0x99C7,2,{0xF1,0x6D,0x00,0x00,}},
- {0x99C8,2,{0xF1,0x6E,0x00,0x00,}},
- {0x99C9,2,{0xF1,0x6F,0x00,0x00,}},
- {0x99CA,2,{0xF1,0x70,0x00,0x00,}},
- {0x99CB,2,{0xF1,0x71,0x00,0x00,}},
- {0x99CC,2,{0xF1,0x72,0x00,0x00,}},
- {0x99CD,2,{0xF1,0x73,0x00,0x00,}},
- {0x99CE,2,{0xF1,0x74,0x00,0x00,}},
- {0x99CF,2,{0xF1,0x75,0x00,0x00,}},
- {0x99D0,2,{0xF1,0x76,0x00,0x00,}},
- {0x99D1,2,{0xF1,0x77,0x00,0x00,}},
- {0x99D2,2,{0xF1,0x78,0x00,0x00,}},
- {0x99D3,2,{0xF1,0x79,0x00,0x00,}},
- {0x99D4,2,{0xF1,0x7A,0x00,0x00,}},
- {0x99D5,2,{0xF1,0x7B,0x00,0x00,}},
- {0x99D6,2,{0xF1,0x7C,0x00,0x00,}},
- {0x99D7,2,{0xF1,0x7D,0x00,0x00,}},
- {0x99D8,2,{0xF1,0x7E,0x00,0x00,}},
- {0x99D9,2,{0xF1,0x80,0x00,0x00,}},
- {0x99DA,2,{0xF1,0x81,0x00,0x00,}},
- {0x99DB,2,{0xF1,0x82,0x00,0x00,}},
- {0x99DC,2,{0xF1,0x83,0x00,0x00,}},
- {0x99DD,2,{0xF1,0x84,0x00,0x00,}},
- {0x99DE,2,{0xF1,0x85,0x00,0x00,}},
- {0x99DF,2,{0xF1,0x86,0x00,0x00,}},
- {0x99E0,2,{0xF1,0x87,0x00,0x00,}},
- {0x99E1,2,{0xF1,0x88,0x00,0x00,}},
- {0x99E2,2,{0xF1,0x89,0x00,0x00,}},
- {0x99E3,2,{0xF1,0x8A,0x00,0x00,}},
- {0x99E4,2,{0xF1,0x8B,0x00,0x00,}},
- {0x99E5,2,{0xF1,0x8C,0x00,0x00,}},
- {0x99E6,2,{0xF1,0x8D,0x00,0x00,}},
- {0x99E7,2,{0xF1,0x8E,0x00,0x00,}},
- {0x99E8,2,{0xF1,0x8F,0x00,0x00,}},
- {0x99E9,2,{0xF1,0x90,0x00,0x00,}},
- {0x99EA,2,{0xF1,0x91,0x00,0x00,}},
- {0x99EB,2,{0xF1,0x92,0x00,0x00,}},
- {0x99EC,2,{0xF1,0x93,0x00,0x00,}},
- {0x99ED,2,{0xF1,0x94,0x00,0x00,}},
- {0x99EE,2,{0xF1,0x95,0x00,0x00,}},
- {0x99EF,2,{0xF1,0x96,0x00,0x00,}},
- {0x99F0,2,{0xF1,0x97,0x00,0x00,}},
- {0x99F1,2,{0xF1,0x98,0x00,0x00,}},
- {0x99F2,2,{0xF1,0x99,0x00,0x00,}},
- {0x99F3,2,{0xF1,0x9A,0x00,0x00,}},
- {0x99F4,2,{0xF1,0x9B,0x00,0x00,}},
- {0x99F5,2,{0xF1,0x9C,0x00,0x00,}},
- {0x99F6,2,{0xF1,0x9D,0x00,0x00,}},
- {0x99F7,2,{0xF1,0x9E,0x00,0x00,}},
- {0x99F8,2,{0xF1,0x9F,0x00,0x00,}},
- {0x99F9,2,{0xF1,0xA0,0x00,0x00,}},
- {0x99FA,2,{0xF2,0x40,0x00,0x00,}},
- {0x99FB,2,{0xF2,0x41,0x00,0x00,}},
- {0x99FC,2,{0xF2,0x42,0x00,0x00,}},
- {0x99FD,2,{0xF2,0x43,0x00,0x00,}},
- {0x99FE,2,{0xF2,0x44,0x00,0x00,}},
- {0x99FF,2,{0xF2,0x45,0x00,0x00,}},
- {0x9A00,2,{0xF2,0x46,0x00,0x00,}},
- {0x9A01,2,{0xF2,0x47,0x00,0x00,}},
- {0x9A02,2,{0xF2,0x48,0x00,0x00,}},
- {0x9A03,2,{0xF2,0x49,0x00,0x00,}},
- {0x9A04,2,{0xF2,0x4A,0x00,0x00,}},
- {0x9A05,2,{0xF2,0x4B,0x00,0x00,}},
- {0x9A06,2,{0xF2,0x4C,0x00,0x00,}},
- {0x9A07,2,{0xF2,0x4D,0x00,0x00,}},
- {0x9A08,2,{0xF2,0x4E,0x00,0x00,}},
- {0x9A09,2,{0xF2,0x4F,0x00,0x00,}},
- {0x9A0A,2,{0xF2,0x50,0x00,0x00,}},
- {0x9A0B,2,{0xF2,0x51,0x00,0x00,}},
- {0x9A0C,2,{0xF2,0x52,0x00,0x00,}},
- {0x9A0D,2,{0xF2,0x53,0x00,0x00,}},
- {0x9A0E,2,{0xF2,0x54,0x00,0x00,}},
- {0x9A0F,2,{0xF2,0x55,0x00,0x00,}},
- {0x9A10,2,{0xF2,0x56,0x00,0x00,}},
- {0x9A11,2,{0xF2,0x57,0x00,0x00,}},
- {0x9A12,2,{0xF2,0x58,0x00,0x00,}},
- {0x9A13,2,{0xF2,0x59,0x00,0x00,}},
- {0x9A14,2,{0xF2,0x5A,0x00,0x00,}},
- {0x9A15,2,{0xF2,0x5B,0x00,0x00,}},
- {0x9A16,2,{0xF2,0x5C,0x00,0x00,}},
- {0x9A17,2,{0xF2,0x5D,0x00,0x00,}},
- {0x9A18,2,{0xF2,0x5E,0x00,0x00,}},
- {0x9A19,2,{0xF2,0x5F,0x00,0x00,}},
- {0x9A1A,2,{0xF2,0x60,0x00,0x00,}},
- {0x9A1B,2,{0xF2,0x61,0x00,0x00,}},
- {0x9A1C,2,{0xF2,0x62,0x00,0x00,}},
- {0x9A1D,2,{0xF2,0x63,0x00,0x00,}},
- {0x9A1E,2,{0xF2,0x64,0x00,0x00,}},
- {0x9A1F,2,{0xF2,0x65,0x00,0x00,}},
- {0x9A20,2,{0xF2,0x66,0x00,0x00,}},
- {0x9A21,2,{0xF2,0x67,0x00,0x00,}},
- {0x9A22,2,{0xF2,0x68,0x00,0x00,}},
- {0x9A23,2,{0xF2,0x69,0x00,0x00,}},
- {0x9A24,2,{0xF2,0x6A,0x00,0x00,}},
- {0x9A25,2,{0xF2,0x6B,0x00,0x00,}},
- {0x9A26,2,{0xF2,0x6C,0x00,0x00,}},
- {0x9A27,2,{0xF2,0x6D,0x00,0x00,}},
- {0x9A28,2,{0xF2,0x6E,0x00,0x00,}},
- {0x9A29,2,{0xF2,0x6F,0x00,0x00,}},
- {0x9A2A,2,{0xF2,0x70,0x00,0x00,}},
- {0x9A2B,2,{0xF2,0x71,0x00,0x00,}},
- {0x9A2C,2,{0xF2,0x72,0x00,0x00,}},
- {0x9A2D,2,{0xF2,0x73,0x00,0x00,}},
- {0x9A2E,2,{0xF2,0x74,0x00,0x00,}},
- {0x9A2F,2,{0xF2,0x75,0x00,0x00,}},
- {0x9A30,2,{0xF2,0x76,0x00,0x00,}},
- {0x9A31,2,{0xF2,0x77,0x00,0x00,}},
- {0x9A32,2,{0xF2,0x78,0x00,0x00,}},
- {0x9A33,2,{0xF2,0x79,0x00,0x00,}},
- {0x9A34,2,{0xF2,0x7A,0x00,0x00,}},
- {0x9A35,2,{0xF2,0x7B,0x00,0x00,}},
- {0x9A36,2,{0xF2,0x7C,0x00,0x00,}},
- {0x9A37,2,{0xF2,0x7D,0x00,0x00,}},
- {0x9A38,2,{0xF2,0x7E,0x00,0x00,}},
- {0x9A39,2,{0xF2,0x80,0x00,0x00,}},
- {0x9A3A,2,{0xF2,0x81,0x00,0x00,}},
- {0x9A3B,2,{0xF2,0x82,0x00,0x00,}},
- {0x9A3C,2,{0xF2,0x83,0x00,0x00,}},
- {0x9A3D,2,{0xF2,0x84,0x00,0x00,}},
- {0x9A3E,2,{0xF2,0x85,0x00,0x00,}},
- {0x9A3F,2,{0xF2,0x86,0x00,0x00,}},
- {0x9A40,2,{0xF2,0x87,0x00,0x00,}},
- {0x9A41,2,{0xF2,0x88,0x00,0x00,}},
- {0x9A42,2,{0xF2,0x89,0x00,0x00,}},
- {0x9A43,2,{0xF2,0x8A,0x00,0x00,}},
- {0x9A44,2,{0xF2,0x8B,0x00,0x00,}},
- {0x9A45,2,{0xF2,0x8C,0x00,0x00,}},
- {0x9A46,2,{0xF2,0x8D,0x00,0x00,}},
- {0x9A47,2,{0xF2,0x8E,0x00,0x00,}},
- {0x9A48,2,{0xF2,0x8F,0x00,0x00,}},
- {0x9A49,2,{0xF2,0x90,0x00,0x00,}},
- {0x9A4A,2,{0xF2,0x91,0x00,0x00,}},
- {0x9A4B,2,{0xF2,0x92,0x00,0x00,}},
- {0x9A4C,2,{0xF2,0x93,0x00,0x00,}},
- {0x9A4D,2,{0xF2,0x94,0x00,0x00,}},
- {0x9A4E,2,{0xF2,0x95,0x00,0x00,}},
- {0x9A4F,2,{0xF2,0x96,0x00,0x00,}},
- {0x9A50,2,{0xF2,0x97,0x00,0x00,}},
- {0x9A51,2,{0xF2,0x98,0x00,0x00,}},
- {0x9A52,2,{0xF2,0x99,0x00,0x00,}},
- {0x9A53,2,{0xF2,0x9A,0x00,0x00,}},
- {0x9A54,2,{0xF2,0x9B,0x00,0x00,}},
- {0x9A55,2,{0xF2,0x9C,0x00,0x00,}},
- {0x9A56,2,{0xF2,0x9D,0x00,0x00,}},
- {0x9A57,2,{0xF2,0x9E,0x00,0x00,}},
- {0x9A58,2,{0xF2,0x9F,0x00,0x00,}},
- {0x9A59,2,{0xF2,0xA0,0x00,0x00,}},
- {0x9A5A,2,{0xF3,0x40,0x00,0x00,}},
- {0x9A5B,2,{0xF3,0x41,0x00,0x00,}},
- {0x9A5C,2,{0xF3,0x42,0x00,0x00,}},
- {0x9A5D,2,{0xF3,0x43,0x00,0x00,}},
- {0x9A5E,2,{0xF3,0x44,0x00,0x00,}},
- {0x9A5F,2,{0xF3,0x45,0x00,0x00,}},
- {0x9A60,2,{0xF3,0x46,0x00,0x00,}},
- {0x9A61,2,{0xF3,0x47,0x00,0x00,}},
- {0x9A62,2,{0xF3,0x48,0x00,0x00,}},
- {0x9A63,2,{0xF3,0x49,0x00,0x00,}},
- {0x9A64,2,{0xF3,0x4A,0x00,0x00,}},
- {0x9A65,2,{0xF3,0x4B,0x00,0x00,}},
- {0x9A66,2,{0xF3,0x4C,0x00,0x00,}},
- {0x9A67,2,{0xF3,0x4D,0x00,0x00,}},
- {0x9A68,2,{0xF3,0x4E,0x00,0x00,}},
- {0x9A69,2,{0xF3,0x4F,0x00,0x00,}},
- {0x9A6A,2,{0xF3,0x50,0x00,0x00,}},
- {0x9A6B,2,{0xF3,0x51,0x00,0x00,}},
- {0x9A6C,2,{0xC2,0xED,0x00,0x00,}},
- {0x9A6D,2,{0xD4,0xA6,0x00,0x00,}},
- {0x9A6E,2,{0xCD,0xD4,0x00,0x00,}},
- {0x9A6F,2,{0xD1,0xB1,0x00,0x00,}},
- {0x9A70,2,{0xB3,0xDB,0x00,0x00,}},
- {0x9A71,2,{0xC7,0xFD,0x00,0x00,}},
- {0x9A72,2,{0xF3,0x52,0x00,0x00,}},
- {0x9A73,2,{0xB2,0xB5,0x00,0x00,}},
- {0x9A74,2,{0xC2,0xBF,0x00,0x00,}},
- {0x9A75,2,{0xE6,0xE0,0x00,0x00,}},
- {0x9A76,2,{0xCA,0xBB,0x00,0x00,}},
- {0x9A77,2,{0xE6,0xE1,0x00,0x00,}},
- {0x9A78,2,{0xE6,0xE2,0x00,0x00,}},
- {0x9A79,2,{0xBE,0xD4,0x00,0x00,}},
- {0x9A7A,2,{0xE6,0xE3,0x00,0x00,}},
- {0x9A7B,2,{0xD7,0xA4,0x00,0x00,}},
- {0x9A7C,2,{0xCD,0xD5,0x00,0x00,}},
- {0x9A7D,2,{0xE6,0xE5,0x00,0x00,}},
- {0x9A7E,2,{0xBC,0xDD,0x00,0x00,}},
- {0x9A7F,2,{0xE6,0xE4,0x00,0x00,}},
- {0x9A80,2,{0xE6,0xE6,0x00,0x00,}},
- {0x9A81,2,{0xE6,0xE7,0x00,0x00,}},
- {0x9A82,2,{0xC2,0xEE,0x00,0x00,}},
- {0x9A83,2,{0xF3,0x53,0x00,0x00,}},
- {0x9A84,2,{0xBD,0xBE,0x00,0x00,}},
- {0x9A85,2,{0xE6,0xE8,0x00,0x00,}},
- {0x9A86,2,{0xC2,0xE6,0x00,0x00,}},
- {0x9A87,2,{0xBA,0xA7,0x00,0x00,}},
- {0x9A88,2,{0xE6,0xE9,0x00,0x00,}},
- {0x9A89,2,{0xF3,0x54,0x00,0x00,}},
- {0x9A8A,2,{0xE6,0xEA,0x00,0x00,}},
- {0x9A8B,2,{0xB3,0xD2,0x00,0x00,}},
- {0x9A8C,2,{0xD1,0xE9,0x00,0x00,}},
- {0x9A8D,2,{0xF3,0x55,0x00,0x00,}},
- {0x9A8E,2,{0xF3,0x56,0x00,0x00,}},
- {0x9A8F,2,{0xBF,0xA5,0x00,0x00,}},
- {0x9A90,2,{0xE6,0xEB,0x00,0x00,}},
- {0x9A91,2,{0xC6,0xEF,0x00,0x00,}},
- {0x9A92,2,{0xE6,0xEC,0x00,0x00,}},
- {0x9A93,2,{0xE6,0xED,0x00,0x00,}},
- {0x9A94,2,{0xF3,0x57,0x00,0x00,}},
- {0x9A95,2,{0xF3,0x58,0x00,0x00,}},
- {0x9A96,2,{0xE6,0xEE,0x00,0x00,}},
- {0x9A97,2,{0xC6,0xAD,0x00,0x00,}},
- {0x9A98,2,{0xE6,0xEF,0x00,0x00,}},
- {0x9A99,2,{0xF3,0x59,0x00,0x00,}},
- {0x9A9A,2,{0xC9,0xA7,0x00,0x00,}},
- {0x9A9B,2,{0xE6,0xF0,0x00,0x00,}},
- {0x9A9C,2,{0xE6,0xF1,0x00,0x00,}},
- {0x9A9D,2,{0xE6,0xF2,0x00,0x00,}},
- {0x9A9E,2,{0xE5,0xB9,0x00,0x00,}},
- {0x9A9F,2,{0xE6,0xF3,0x00,0x00,}},
- {0x9AA0,2,{0xE6,0xF4,0x00,0x00,}},
- {0x9AA1,2,{0xC2,0xE2,0x00,0x00,}},
- {0x9AA2,2,{0xE6,0xF5,0x00,0x00,}},
- {0x9AA3,2,{0xE6,0xF6,0x00,0x00,}},
- {0x9AA4,2,{0xD6,0xE8,0x00,0x00,}},
- {0x9AA5,2,{0xE6,0xF7,0x00,0x00,}},
- {0x9AA6,2,{0xF3,0x5A,0x00,0x00,}},
- {0x9AA7,2,{0xE6,0xF8,0x00,0x00,}},
- {0x9AA8,2,{0xB9,0xC7,0x00,0x00,}},
- {0x9AA9,2,{0xF3,0x5B,0x00,0x00,}},
- {0x9AAA,2,{0xF3,0x5C,0x00,0x00,}},
- {0x9AAB,2,{0xF3,0x5D,0x00,0x00,}},
- {0x9AAC,2,{0xF3,0x5E,0x00,0x00,}},
- {0x9AAD,2,{0xF3,0x5F,0x00,0x00,}},
- {0x9AAE,2,{0xF3,0x60,0x00,0x00,}},
- {0x9AAF,2,{0xF3,0x61,0x00,0x00,}},
- {0x9AB0,2,{0xF7,0xBB,0x00,0x00,}},
- {0x9AB1,2,{0xF7,0xBA,0x00,0x00,}},
- {0x9AB2,2,{0xF3,0x62,0x00,0x00,}},
- {0x9AB3,2,{0xF3,0x63,0x00,0x00,}},
- {0x9AB4,2,{0xF3,0x64,0x00,0x00,}},
- {0x9AB5,2,{0xF3,0x65,0x00,0x00,}},
- {0x9AB6,2,{0xF7,0xBE,0x00,0x00,}},
- {0x9AB7,2,{0xF7,0xBC,0x00,0x00,}},
- {0x9AB8,2,{0xBA,0xA1,0x00,0x00,}},
- {0x9AB9,2,{0xF3,0x66,0x00,0x00,}},
- {0x9ABA,2,{0xF7,0xBF,0x00,0x00,}},
- {0x9ABB,2,{0xF3,0x67,0x00,0x00,}},
- {0x9ABC,2,{0xF7,0xC0,0x00,0x00,}},
- {0x9ABD,2,{0xF3,0x68,0x00,0x00,}},
- {0x9ABE,2,{0xF3,0x69,0x00,0x00,}},
- {0x9ABF,2,{0xF3,0x6A,0x00,0x00,}},
- {0x9AC0,2,{0xF7,0xC2,0x00,0x00,}},
- {0x9AC1,2,{0xF7,0xC1,0x00,0x00,}},
- {0x9AC2,2,{0xF7,0xC4,0x00,0x00,}},
- {0x9AC3,2,{0xF3,0x6B,0x00,0x00,}},
- {0x9AC4,2,{0xF3,0x6C,0x00,0x00,}},
- {0x9AC5,2,{0xF7,0xC3,0x00,0x00,}},
- {0x9AC6,2,{0xF3,0x6D,0x00,0x00,}},
- {0x9AC7,2,{0xF3,0x6E,0x00,0x00,}},
- {0x9AC8,2,{0xF3,0x6F,0x00,0x00,}},
- {0x9AC9,2,{0xF3,0x70,0x00,0x00,}},
- {0x9ACA,2,{0xF3,0x71,0x00,0x00,}},
- {0x9ACB,2,{0xF7,0xC5,0x00,0x00,}},
- {0x9ACC,2,{0xF7,0xC6,0x00,0x00,}},
- {0x9ACD,2,{0xF3,0x72,0x00,0x00,}},
- {0x9ACE,2,{0xF3,0x73,0x00,0x00,}},
- {0x9ACF,2,{0xF3,0x74,0x00,0x00,}},
- {0x9AD0,2,{0xF3,0x75,0x00,0x00,}},
- {0x9AD1,2,{0xF7,0xC7,0x00,0x00,}},
- {0x9AD2,2,{0xF3,0x76,0x00,0x00,}},
- {0x9AD3,2,{0xCB,0xE8,0x00,0x00,}},
- {0x9AD4,2,{0xF3,0x77,0x00,0x00,}},
- {0x9AD5,2,{0xF3,0x78,0x00,0x00,}},
- {0x9AD6,2,{0xF3,0x79,0x00,0x00,}},
- {0x9AD7,2,{0xF3,0x7A,0x00,0x00,}},
- {0x9AD8,2,{0xB8,0xDF,0x00,0x00,}},
- {0x9AD9,2,{0xF3,0x7B,0x00,0x00,}},
- {0x9ADA,2,{0xF3,0x7C,0x00,0x00,}},
- {0x9ADB,2,{0xF3,0x7D,0x00,0x00,}},
- {0x9ADC,2,{0xF3,0x7E,0x00,0x00,}},
- {0x9ADD,2,{0xF3,0x80,0x00,0x00,}},
- {0x9ADE,2,{0xF3,0x81,0x00,0x00,}},
- {0x9ADF,2,{0xF7,0xD4,0x00,0x00,}},
- {0x9AE0,2,{0xF3,0x82,0x00,0x00,}},
- {0x9AE1,2,{0xF7,0xD5,0x00,0x00,}},
- {0x9AE2,2,{0xF3,0x83,0x00,0x00,}},
- {0x9AE3,2,{0xF3,0x84,0x00,0x00,}},
- {0x9AE4,2,{0xF3,0x85,0x00,0x00,}},
- {0x9AE5,2,{0xF3,0x86,0x00,0x00,}},
- {0x9AE6,2,{0xF7,0xD6,0x00,0x00,}},
- {0x9AE7,2,{0xF3,0x87,0x00,0x00,}},
- {0x9AE8,2,{0xF3,0x88,0x00,0x00,}},
- {0x9AE9,2,{0xF3,0x89,0x00,0x00,}},
- {0x9AEA,2,{0xF3,0x8A,0x00,0x00,}},
- {0x9AEB,2,{0xF7,0xD8,0x00,0x00,}},
- {0x9AEC,2,{0xF3,0x8B,0x00,0x00,}},
- {0x9AED,2,{0xF7,0xDA,0x00,0x00,}},
- {0x9AEE,2,{0xF3,0x8C,0x00,0x00,}},
- {0x9AEF,2,{0xF7,0xD7,0x00,0x00,}},
- {0x9AF0,2,{0xF3,0x8D,0x00,0x00,}},
- {0x9AF1,2,{0xF3,0x8E,0x00,0x00,}},
- {0x9AF2,2,{0xF3,0x8F,0x00,0x00,}},
- {0x9AF3,2,{0xF3,0x90,0x00,0x00,}},
- {0x9AF4,2,{0xF3,0x91,0x00,0x00,}},
- {0x9AF5,2,{0xF3,0x92,0x00,0x00,}},
- {0x9AF6,2,{0xF3,0x93,0x00,0x00,}},
- {0x9AF7,2,{0xF3,0x94,0x00,0x00,}},
- {0x9AF8,2,{0xF3,0x95,0x00,0x00,}},
- {0x9AF9,2,{0xF7,0xDB,0x00,0x00,}},
- {0x9AFA,2,{0xF3,0x96,0x00,0x00,}},
- {0x9AFB,2,{0xF7,0xD9,0x00,0x00,}},
- {0x9AFC,2,{0xF3,0x97,0x00,0x00,}},
- {0x9AFD,2,{0xF3,0x98,0x00,0x00,}},
- {0x9AFE,2,{0xF3,0x99,0x00,0x00,}},
- {0x9AFF,2,{0xF3,0x9A,0x00,0x00,}},
- {0x9B00,2,{0xF3,0x9B,0x00,0x00,}},
- {0x9B01,2,{0xF3,0x9C,0x00,0x00,}},
- {0x9B02,2,{0xF3,0x9D,0x00,0x00,}},
- {0x9B03,2,{0xD7,0xD7,0x00,0x00,}},
- {0x9B04,2,{0xF3,0x9E,0x00,0x00,}},
- {0x9B05,2,{0xF3,0x9F,0x00,0x00,}},
- {0x9B06,2,{0xF3,0xA0,0x00,0x00,}},
- {0x9B07,2,{0xF4,0x40,0x00,0x00,}},
- {0x9B08,2,{0xF7,0xDC,0x00,0x00,}},
- {0x9B09,2,{0xF4,0x41,0x00,0x00,}},
- {0x9B0A,2,{0xF4,0x42,0x00,0x00,}},
- {0x9B0B,2,{0xF4,0x43,0x00,0x00,}},
- {0x9B0C,2,{0xF4,0x44,0x00,0x00,}},
- {0x9B0D,2,{0xF4,0x45,0x00,0x00,}},
- {0x9B0E,2,{0xF4,0x46,0x00,0x00,}},
- {0x9B0F,2,{0xF7,0xDD,0x00,0x00,}},
- {0x9B10,2,{0xF4,0x47,0x00,0x00,}},
- {0x9B11,2,{0xF4,0x48,0x00,0x00,}},
- {0x9B12,2,{0xF4,0x49,0x00,0x00,}},
- {0x9B13,2,{0xF7,0xDE,0x00,0x00,}},
- {0x9B14,2,{0xF4,0x4A,0x00,0x00,}},
- {0x9B15,2,{0xF4,0x4B,0x00,0x00,}},
- {0x9B16,2,{0xF4,0x4C,0x00,0x00,}},
- {0x9B17,2,{0xF4,0x4D,0x00,0x00,}},
- {0x9B18,2,{0xF4,0x4E,0x00,0x00,}},
- {0x9B19,2,{0xF4,0x4F,0x00,0x00,}},
- {0x9B1A,2,{0xF4,0x50,0x00,0x00,}},
- {0x9B1B,2,{0xF4,0x51,0x00,0x00,}},
- {0x9B1C,2,{0xF4,0x52,0x00,0x00,}},
- {0x9B1D,2,{0xF4,0x53,0x00,0x00,}},
- {0x9B1E,2,{0xF4,0x54,0x00,0x00,}},
- {0x9B1F,2,{0xF7,0xDF,0x00,0x00,}},
- {0x9B20,2,{0xF4,0x55,0x00,0x00,}},
- {0x9B21,2,{0xF4,0x56,0x00,0x00,}},
- {0x9B22,2,{0xF4,0x57,0x00,0x00,}},
- {0x9B23,2,{0xF7,0xE0,0x00,0x00,}},
- {0x9B24,2,{0xF4,0x58,0x00,0x00,}},
- {0x9B25,2,{0xF4,0x59,0x00,0x00,}},
- {0x9B26,2,{0xF4,0x5A,0x00,0x00,}},
- {0x9B27,2,{0xF4,0x5B,0x00,0x00,}},
- {0x9B28,2,{0xF4,0x5C,0x00,0x00,}},
- {0x9B29,2,{0xF4,0x5D,0x00,0x00,}},
- {0x9B2A,2,{0xF4,0x5E,0x00,0x00,}},
- {0x9B2B,2,{0xF4,0x5F,0x00,0x00,}},
- {0x9B2C,2,{0xF4,0x60,0x00,0x00,}},
- {0x9B2D,2,{0xF4,0x61,0x00,0x00,}},
- {0x9B2E,2,{0xF4,0x62,0x00,0x00,}},
- {0x9B2F,2,{0xDB,0xCB,0x00,0x00,}},
- {0x9B30,2,{0xF4,0x63,0x00,0x00,}},
- {0x9B31,2,{0xF4,0x64,0x00,0x00,}},
- {0x9B32,2,{0xD8,0xAA,0x00,0x00,}},
- {0x9B33,2,{0xF4,0x65,0x00,0x00,}},
- {0x9B34,2,{0xF4,0x66,0x00,0x00,}},
- {0x9B35,2,{0xF4,0x67,0x00,0x00,}},
- {0x9B36,2,{0xF4,0x68,0x00,0x00,}},
- {0x9B37,2,{0xF4,0x69,0x00,0x00,}},
- {0x9B38,2,{0xF4,0x6A,0x00,0x00,}},
- {0x9B39,2,{0xF4,0x6B,0x00,0x00,}},
- {0x9B3A,2,{0xF4,0x6C,0x00,0x00,}},
- {0x9B3B,2,{0xE5,0xF7,0x00,0x00,}},
- {0x9B3C,2,{0xB9,0xED,0x00,0x00,}},
- {0x9B3D,2,{0xF4,0x6D,0x00,0x00,}},
- {0x9B3E,2,{0xF4,0x6E,0x00,0x00,}},
- {0x9B3F,2,{0xF4,0x6F,0x00,0x00,}},
- {0x9B40,2,{0xF4,0x70,0x00,0x00,}},
- {0x9B41,2,{0xBF,0xFD,0x00,0x00,}},
- {0x9B42,2,{0xBB,0xEA,0x00,0x00,}},
- {0x9B43,2,{0xF7,0xC9,0x00,0x00,}},
- {0x9B44,2,{0xC6,0xC7,0x00,0x00,}},
- {0x9B45,2,{0xF7,0xC8,0x00,0x00,}},
- {0x9B46,2,{0xF4,0x71,0x00,0x00,}},
- {0x9B47,2,{0xF7,0xCA,0x00,0x00,}},
- {0x9B48,2,{0xF7,0xCC,0x00,0x00,}},
- {0x9B49,2,{0xF7,0xCB,0x00,0x00,}},
- {0x9B4A,2,{0xF4,0x72,0x00,0x00,}},
- {0x9B4B,2,{0xF4,0x73,0x00,0x00,}},
- {0x9B4C,2,{0xF4,0x74,0x00,0x00,}},
- {0x9B4D,2,{0xF7,0xCD,0x00,0x00,}},
- {0x9B4E,2,{0xF4,0x75,0x00,0x00,}},
- {0x9B4F,2,{0xCE,0xBA,0x00,0x00,}},
- {0x9B50,2,{0xF4,0x76,0x00,0x00,}},
- {0x9B51,2,{0xF7,0xCE,0x00,0x00,}},
- {0x9B52,2,{0xF4,0x77,0x00,0x00,}},
- {0x9B53,2,{0xF4,0x78,0x00,0x00,}},
- {0x9B54,2,{0xC4,0xA7,0x00,0x00,}},
- {0x9B55,2,{0xF4,0x79,0x00,0x00,}},
- {0x9B56,2,{0xF4,0x7A,0x00,0x00,}},
- {0x9B57,2,{0xF4,0x7B,0x00,0x00,}},
- {0x9B58,2,{0xF4,0x7C,0x00,0x00,}},
- {0x9B59,2,{0xF4,0x7D,0x00,0x00,}},
- {0x9B5A,2,{0xF4,0x7E,0x00,0x00,}},
- {0x9B5B,2,{0xF4,0x80,0x00,0x00,}},
- {0x9B5C,2,{0xF4,0x81,0x00,0x00,}},
- {0x9B5D,2,{0xF4,0x82,0x00,0x00,}},
- {0x9B5E,2,{0xF4,0x83,0x00,0x00,}},
- {0x9B5F,2,{0xF4,0x84,0x00,0x00,}},
- {0x9B60,2,{0xF4,0x85,0x00,0x00,}},
- {0x9B61,2,{0xF4,0x86,0x00,0x00,}},
- {0x9B62,2,{0xF4,0x87,0x00,0x00,}},
- {0x9B63,2,{0xF4,0x88,0x00,0x00,}},
- {0x9B64,2,{0xF4,0x89,0x00,0x00,}},
- {0x9B65,2,{0xF4,0x8A,0x00,0x00,}},
- {0x9B66,2,{0xF4,0x8B,0x00,0x00,}},
- {0x9B67,2,{0xF4,0x8C,0x00,0x00,}},
- {0x9B68,2,{0xF4,0x8D,0x00,0x00,}},
- {0x9B69,2,{0xF4,0x8E,0x00,0x00,}},
- {0x9B6A,2,{0xF4,0x8F,0x00,0x00,}},
- {0x9B6B,2,{0xF4,0x90,0x00,0x00,}},
- {0x9B6C,2,{0xF4,0x91,0x00,0x00,}},
- {0x9B6D,2,{0xF4,0x92,0x00,0x00,}},
- {0x9B6E,2,{0xF4,0x93,0x00,0x00,}},
- {0x9B6F,2,{0xF4,0x94,0x00,0x00,}},
- {0x9B70,2,{0xF4,0x95,0x00,0x00,}},
- {0x9B71,2,{0xF4,0x96,0x00,0x00,}},
- {0x9B72,2,{0xF4,0x97,0x00,0x00,}},
- {0x9B73,2,{0xF4,0x98,0x00,0x00,}},
- {0x9B74,2,{0xF4,0x99,0x00,0x00,}},
- {0x9B75,2,{0xF4,0x9A,0x00,0x00,}},
- {0x9B76,2,{0xF4,0x9B,0x00,0x00,}},
- {0x9B77,2,{0xF4,0x9C,0x00,0x00,}},
- {0x9B78,2,{0xF4,0x9D,0x00,0x00,}},
- {0x9B79,2,{0xF4,0x9E,0x00,0x00,}},
- {0x9B7A,2,{0xF4,0x9F,0x00,0x00,}},
- {0x9B7B,2,{0xF4,0xA0,0x00,0x00,}},
- {0x9B7C,2,{0xF5,0x40,0x00,0x00,}},
- {0x9B7D,2,{0xF5,0x41,0x00,0x00,}},
- {0x9B7E,2,{0xF5,0x42,0x00,0x00,}},
- {0x9B7F,2,{0xF5,0x43,0x00,0x00,}},
- {0x9B80,2,{0xF5,0x44,0x00,0x00,}},
- {0x9B81,2,{0xF5,0x45,0x00,0x00,}},
- {0x9B82,2,{0xF5,0x46,0x00,0x00,}},
- {0x9B83,2,{0xF5,0x47,0x00,0x00,}},
- {0x9B84,2,{0xF5,0x48,0x00,0x00,}},
- {0x9B85,2,{0xF5,0x49,0x00,0x00,}},
- {0x9B86,2,{0xF5,0x4A,0x00,0x00,}},
- {0x9B87,2,{0xF5,0x4B,0x00,0x00,}},
- {0x9B88,2,{0xF5,0x4C,0x00,0x00,}},
- {0x9B89,2,{0xF5,0x4D,0x00,0x00,}},
- {0x9B8A,2,{0xF5,0x4E,0x00,0x00,}},
- {0x9B8B,2,{0xF5,0x4F,0x00,0x00,}},
- {0x9B8C,2,{0xF5,0x50,0x00,0x00,}},
- {0x9B8D,2,{0xF5,0x51,0x00,0x00,}},
- {0x9B8E,2,{0xF5,0x52,0x00,0x00,}},
- {0x9B8F,2,{0xF5,0x53,0x00,0x00,}},
- {0x9B90,2,{0xF5,0x54,0x00,0x00,}},
- {0x9B91,2,{0xF5,0x55,0x00,0x00,}},
- {0x9B92,2,{0xF5,0x56,0x00,0x00,}},
- {0x9B93,2,{0xF5,0x57,0x00,0x00,}},
- {0x9B94,2,{0xF5,0x58,0x00,0x00,}},
- {0x9B95,2,{0xF5,0x59,0x00,0x00,}},
- {0x9B96,2,{0xF5,0x5A,0x00,0x00,}},
- {0x9B97,2,{0xF5,0x5B,0x00,0x00,}},
- {0x9B98,2,{0xF5,0x5C,0x00,0x00,}},
- {0x9B99,2,{0xF5,0x5D,0x00,0x00,}},
- {0x9B9A,2,{0xF5,0x5E,0x00,0x00,}},
- {0x9B9B,2,{0xF5,0x5F,0x00,0x00,}},
- {0x9B9C,2,{0xF5,0x60,0x00,0x00,}},
- {0x9B9D,2,{0xF5,0x61,0x00,0x00,}},
- {0x9B9E,2,{0xF5,0x62,0x00,0x00,}},
- {0x9B9F,2,{0xF5,0x63,0x00,0x00,}},
- {0x9BA0,2,{0xF5,0x64,0x00,0x00,}},
- {0x9BA1,2,{0xF5,0x65,0x00,0x00,}},
- {0x9BA2,2,{0xF5,0x66,0x00,0x00,}},
- {0x9BA3,2,{0xF5,0x67,0x00,0x00,}},
- {0x9BA4,2,{0xF5,0x68,0x00,0x00,}},
- {0x9BA5,2,{0xF5,0x69,0x00,0x00,}},
- {0x9BA6,2,{0xF5,0x6A,0x00,0x00,}},
- {0x9BA7,2,{0xF5,0x6B,0x00,0x00,}},
- {0x9BA8,2,{0xF5,0x6C,0x00,0x00,}},
- {0x9BA9,2,{0xF5,0x6D,0x00,0x00,}},
- {0x9BAA,2,{0xF5,0x6E,0x00,0x00,}},
- {0x9BAB,2,{0xF5,0x6F,0x00,0x00,}},
- {0x9BAC,2,{0xF5,0x70,0x00,0x00,}},
- {0x9BAD,2,{0xF5,0x71,0x00,0x00,}},
- {0x9BAE,2,{0xF5,0x72,0x00,0x00,}},
- {0x9BAF,2,{0xF5,0x73,0x00,0x00,}},
- {0x9BB0,2,{0xF5,0x74,0x00,0x00,}},
- {0x9BB1,2,{0xF5,0x75,0x00,0x00,}},
- {0x9BB2,2,{0xF5,0x76,0x00,0x00,}},
- {0x9BB3,2,{0xF5,0x77,0x00,0x00,}},
- {0x9BB4,2,{0xF5,0x78,0x00,0x00,}},
- {0x9BB5,2,{0xF5,0x79,0x00,0x00,}},
- {0x9BB6,2,{0xF5,0x7A,0x00,0x00,}},
- {0x9BB7,2,{0xF5,0x7B,0x00,0x00,}},
- {0x9BB8,2,{0xF5,0x7C,0x00,0x00,}},
- {0x9BB9,2,{0xF5,0x7D,0x00,0x00,}},
- {0x9BBA,2,{0xF5,0x7E,0x00,0x00,}},
- {0x9BBB,2,{0xF5,0x80,0x00,0x00,}},
- {0x9BBC,2,{0xF5,0x81,0x00,0x00,}},
- {0x9BBD,2,{0xF5,0x82,0x00,0x00,}},
- {0x9BBE,2,{0xF5,0x83,0x00,0x00,}},
- {0x9BBF,2,{0xF5,0x84,0x00,0x00,}},
- {0x9BC0,2,{0xF5,0x85,0x00,0x00,}},
- {0x9BC1,2,{0xF5,0x86,0x00,0x00,}},
- {0x9BC2,2,{0xF5,0x87,0x00,0x00,}},
- {0x9BC3,2,{0xF5,0x88,0x00,0x00,}},
- {0x9BC4,2,{0xF5,0x89,0x00,0x00,}},
- {0x9BC5,2,{0xF5,0x8A,0x00,0x00,}},
- {0x9BC6,2,{0xF5,0x8B,0x00,0x00,}},
- {0x9BC7,2,{0xF5,0x8C,0x00,0x00,}},
- {0x9BC8,2,{0xF5,0x8D,0x00,0x00,}},
- {0x9BC9,2,{0xF5,0x8E,0x00,0x00,}},
- {0x9BCA,2,{0xF5,0x8F,0x00,0x00,}},
- {0x9BCB,2,{0xF5,0x90,0x00,0x00,}},
- {0x9BCC,2,{0xF5,0x91,0x00,0x00,}},
- {0x9BCD,2,{0xF5,0x92,0x00,0x00,}},
- {0x9BCE,2,{0xF5,0x93,0x00,0x00,}},
- {0x9BCF,2,{0xF5,0x94,0x00,0x00,}},
- {0x9BD0,2,{0xF5,0x95,0x00,0x00,}},
- {0x9BD1,2,{0xF5,0x96,0x00,0x00,}},
- {0x9BD2,2,{0xF5,0x97,0x00,0x00,}},
- {0x9BD3,2,{0xF5,0x98,0x00,0x00,}},
- {0x9BD4,2,{0xF5,0x99,0x00,0x00,}},
- {0x9BD5,2,{0xF5,0x9A,0x00,0x00,}},
- {0x9BD6,2,{0xF5,0x9B,0x00,0x00,}},
- {0x9BD7,2,{0xF5,0x9C,0x00,0x00,}},
- {0x9BD8,2,{0xF5,0x9D,0x00,0x00,}},
- {0x9BD9,2,{0xF5,0x9E,0x00,0x00,}},
- {0x9BDA,2,{0xF5,0x9F,0x00,0x00,}},
- {0x9BDB,2,{0xF5,0xA0,0x00,0x00,}},
- {0x9BDC,2,{0xF6,0x40,0x00,0x00,}},
- {0x9BDD,2,{0xF6,0x41,0x00,0x00,}},
- {0x9BDE,2,{0xF6,0x42,0x00,0x00,}},
- {0x9BDF,2,{0xF6,0x43,0x00,0x00,}},
- {0x9BE0,2,{0xF6,0x44,0x00,0x00,}},
- {0x9BE1,2,{0xF6,0x45,0x00,0x00,}},
- {0x9BE2,2,{0xF6,0x46,0x00,0x00,}},
- {0x9BE3,2,{0xF6,0x47,0x00,0x00,}},
- {0x9BE4,2,{0xF6,0x48,0x00,0x00,}},
- {0x9BE5,2,{0xF6,0x49,0x00,0x00,}},
- {0x9BE6,2,{0xF6,0x4A,0x00,0x00,}},
- {0x9BE7,2,{0xF6,0x4B,0x00,0x00,}},
- {0x9BE8,2,{0xF6,0x4C,0x00,0x00,}},
- {0x9BE9,2,{0xF6,0x4D,0x00,0x00,}},
- {0x9BEA,2,{0xF6,0x4E,0x00,0x00,}},
- {0x9BEB,2,{0xF6,0x4F,0x00,0x00,}},
- {0x9BEC,2,{0xF6,0x50,0x00,0x00,}},
- {0x9BED,2,{0xF6,0x51,0x00,0x00,}},
- {0x9BEE,2,{0xF6,0x52,0x00,0x00,}},
- {0x9BEF,2,{0xF6,0x53,0x00,0x00,}},
- {0x9BF0,2,{0xF6,0x54,0x00,0x00,}},
- {0x9BF1,2,{0xF6,0x55,0x00,0x00,}},
- {0x9BF2,2,{0xF6,0x56,0x00,0x00,}},
- {0x9BF3,2,{0xF6,0x57,0x00,0x00,}},
- {0x9BF4,2,{0xF6,0x58,0x00,0x00,}},
- {0x9BF5,2,{0xF6,0x59,0x00,0x00,}},
- {0x9BF6,2,{0xF6,0x5A,0x00,0x00,}},
- {0x9BF7,2,{0xF6,0x5B,0x00,0x00,}},
- {0x9BF8,2,{0xF6,0x5C,0x00,0x00,}},
- {0x9BF9,2,{0xF6,0x5D,0x00,0x00,}},
- {0x9BFA,2,{0xF6,0x5E,0x00,0x00,}},
- {0x9BFB,2,{0xF6,0x5F,0x00,0x00,}},
- {0x9BFC,2,{0xF6,0x60,0x00,0x00,}},
- {0x9BFD,2,{0xF6,0x61,0x00,0x00,}},
- {0x9BFE,2,{0xF6,0x62,0x00,0x00,}},
- {0x9BFF,2,{0xF6,0x63,0x00,0x00,}},
- {0x9C00,2,{0xF6,0x64,0x00,0x00,}},
- {0x9C01,2,{0xF6,0x65,0x00,0x00,}},
- {0x9C02,2,{0xF6,0x66,0x00,0x00,}},
- {0x9C03,2,{0xF6,0x67,0x00,0x00,}},
- {0x9C04,2,{0xF6,0x68,0x00,0x00,}},
- {0x9C05,2,{0xF6,0x69,0x00,0x00,}},
- {0x9C06,2,{0xF6,0x6A,0x00,0x00,}},
- {0x9C07,2,{0xF6,0x6B,0x00,0x00,}},
- {0x9C08,2,{0xF6,0x6C,0x00,0x00,}},
- {0x9C09,2,{0xF6,0x6D,0x00,0x00,}},
- {0x9C0A,2,{0xF6,0x6E,0x00,0x00,}},
- {0x9C0B,2,{0xF6,0x6F,0x00,0x00,}},
- {0x9C0C,2,{0xF6,0x70,0x00,0x00,}},
- {0x9C0D,2,{0xF6,0x71,0x00,0x00,}},
- {0x9C0E,2,{0xF6,0x72,0x00,0x00,}},
- {0x9C0F,2,{0xF6,0x73,0x00,0x00,}},
- {0x9C10,2,{0xF6,0x74,0x00,0x00,}},
- {0x9C11,2,{0xF6,0x75,0x00,0x00,}},
- {0x9C12,2,{0xF6,0x76,0x00,0x00,}},
- {0x9C13,2,{0xF6,0x77,0x00,0x00,}},
- {0x9C14,2,{0xF6,0x78,0x00,0x00,}},
- {0x9C15,2,{0xF6,0x79,0x00,0x00,}},
- {0x9C16,2,{0xF6,0x7A,0x00,0x00,}},
- {0x9C17,2,{0xF6,0x7B,0x00,0x00,}},
- {0x9C18,2,{0xF6,0x7C,0x00,0x00,}},
- {0x9C19,2,{0xF6,0x7D,0x00,0x00,}},
- {0x9C1A,2,{0xF6,0x7E,0x00,0x00,}},
- {0x9C1B,2,{0xF6,0x80,0x00,0x00,}},
- {0x9C1C,2,{0xF6,0x81,0x00,0x00,}},
- {0x9C1D,2,{0xF6,0x82,0x00,0x00,}},
- {0x9C1E,2,{0xF6,0x83,0x00,0x00,}},
- {0x9C1F,2,{0xF6,0x84,0x00,0x00,}},
- {0x9C20,2,{0xF6,0x85,0x00,0x00,}},
- {0x9C21,2,{0xF6,0x86,0x00,0x00,}},
- {0x9C22,2,{0xF6,0x87,0x00,0x00,}},
- {0x9C23,2,{0xF6,0x88,0x00,0x00,}},
- {0x9C24,2,{0xF6,0x89,0x00,0x00,}},
- {0x9C25,2,{0xF6,0x8A,0x00,0x00,}},
- {0x9C26,2,{0xF6,0x8B,0x00,0x00,}},
- {0x9C27,2,{0xF6,0x8C,0x00,0x00,}},
- {0x9C28,2,{0xF6,0x8D,0x00,0x00,}},
- {0x9C29,2,{0xF6,0x8E,0x00,0x00,}},
- {0x9C2A,2,{0xF6,0x8F,0x00,0x00,}},
- {0x9C2B,2,{0xF6,0x90,0x00,0x00,}},
- {0x9C2C,2,{0xF6,0x91,0x00,0x00,}},
- {0x9C2D,2,{0xF6,0x92,0x00,0x00,}},
- {0x9C2E,2,{0xF6,0x93,0x00,0x00,}},
- {0x9C2F,2,{0xF6,0x94,0x00,0x00,}},
- {0x9C30,2,{0xF6,0x95,0x00,0x00,}},
- {0x9C31,2,{0xF6,0x96,0x00,0x00,}},
- {0x9C32,2,{0xF6,0x97,0x00,0x00,}},
- {0x9C33,2,{0xF6,0x98,0x00,0x00,}},
- {0x9C34,2,{0xF6,0x99,0x00,0x00,}},
- {0x9C35,2,{0xF6,0x9A,0x00,0x00,}},
- {0x9C36,2,{0xF6,0x9B,0x00,0x00,}},
- {0x9C37,2,{0xF6,0x9C,0x00,0x00,}},
- {0x9C38,2,{0xF6,0x9D,0x00,0x00,}},
- {0x9C39,2,{0xF6,0x9E,0x00,0x00,}},
- {0x9C3A,2,{0xF6,0x9F,0x00,0x00,}},
- {0x9C3B,2,{0xF6,0xA0,0x00,0x00,}},
- {0x9C3C,2,{0xF7,0x40,0x00,0x00,}},
- {0x9C3D,2,{0xF7,0x41,0x00,0x00,}},
- {0x9C3E,2,{0xF7,0x42,0x00,0x00,}},
- {0x9C3F,2,{0xF7,0x43,0x00,0x00,}},
- {0x9C40,2,{0xF7,0x44,0x00,0x00,}},
- {0x9C41,2,{0xF7,0x45,0x00,0x00,}},
- {0x9C42,2,{0xF7,0x46,0x00,0x00,}},
- {0x9C43,2,{0xF7,0x47,0x00,0x00,}},
- {0x9C44,2,{0xF7,0x48,0x00,0x00,}},
- {0x9C45,2,{0xF7,0x49,0x00,0x00,}},
- {0x9C46,2,{0xF7,0x4A,0x00,0x00,}},
- {0x9C47,2,{0xF7,0x4B,0x00,0x00,}},
- {0x9C48,2,{0xF7,0x4C,0x00,0x00,}},
- {0x9C49,2,{0xF7,0x4D,0x00,0x00,}},
- {0x9C4A,2,{0xF7,0x4E,0x00,0x00,}},
- {0x9C4B,2,{0xF7,0x4F,0x00,0x00,}},
- {0x9C4C,2,{0xF7,0x50,0x00,0x00,}},
- {0x9C4D,2,{0xF7,0x51,0x00,0x00,}},
- {0x9C4E,2,{0xF7,0x52,0x00,0x00,}},
- {0x9C4F,2,{0xF7,0x53,0x00,0x00,}},
- {0x9C50,2,{0xF7,0x54,0x00,0x00,}},
- {0x9C51,2,{0xF7,0x55,0x00,0x00,}},
- {0x9C52,2,{0xF7,0x56,0x00,0x00,}},
- {0x9C53,2,{0xF7,0x57,0x00,0x00,}},
- {0x9C54,2,{0xF7,0x58,0x00,0x00,}},
- {0x9C55,2,{0xF7,0x59,0x00,0x00,}},
- {0x9C56,2,{0xF7,0x5A,0x00,0x00,}},
- {0x9C57,2,{0xF7,0x5B,0x00,0x00,}},
- {0x9C58,2,{0xF7,0x5C,0x00,0x00,}},
- {0x9C59,2,{0xF7,0x5D,0x00,0x00,}},
- {0x9C5A,2,{0xF7,0x5E,0x00,0x00,}},
- {0x9C5B,2,{0xF7,0x5F,0x00,0x00,}},
- {0x9C5C,2,{0xF7,0x60,0x00,0x00,}},
- {0x9C5D,2,{0xF7,0x61,0x00,0x00,}},
- {0x9C5E,2,{0xF7,0x62,0x00,0x00,}},
- {0x9C5F,2,{0xF7,0x63,0x00,0x00,}},
- {0x9C60,2,{0xF7,0x64,0x00,0x00,}},
- {0x9C61,2,{0xF7,0x65,0x00,0x00,}},
- {0x9C62,2,{0xF7,0x66,0x00,0x00,}},
- {0x9C63,2,{0xF7,0x67,0x00,0x00,}},
- {0x9C64,2,{0xF7,0x68,0x00,0x00,}},
- {0x9C65,2,{0xF7,0x69,0x00,0x00,}},
- {0x9C66,2,{0xF7,0x6A,0x00,0x00,}},
- {0x9C67,2,{0xF7,0x6B,0x00,0x00,}},
- {0x9C68,2,{0xF7,0x6C,0x00,0x00,}},
- {0x9C69,2,{0xF7,0x6D,0x00,0x00,}},
- {0x9C6A,2,{0xF7,0x6E,0x00,0x00,}},
- {0x9C6B,2,{0xF7,0x6F,0x00,0x00,}},
- {0x9C6C,2,{0xF7,0x70,0x00,0x00,}},
- {0x9C6D,2,{0xF7,0x71,0x00,0x00,}},
- {0x9C6E,2,{0xF7,0x72,0x00,0x00,}},
- {0x9C6F,2,{0xF7,0x73,0x00,0x00,}},
- {0x9C70,2,{0xF7,0x74,0x00,0x00,}},
- {0x9C71,2,{0xF7,0x75,0x00,0x00,}},
- {0x9C72,2,{0xF7,0x76,0x00,0x00,}},
- {0x9C73,2,{0xF7,0x77,0x00,0x00,}},
- {0x9C74,2,{0xF7,0x78,0x00,0x00,}},
- {0x9C75,2,{0xF7,0x79,0x00,0x00,}},
- {0x9C76,2,{0xF7,0x7A,0x00,0x00,}},
- {0x9C77,2,{0xF7,0x7B,0x00,0x00,}},
- {0x9C78,2,{0xF7,0x7C,0x00,0x00,}},
- {0x9C79,2,{0xF7,0x7D,0x00,0x00,}},
- {0x9C7A,2,{0xF7,0x7E,0x00,0x00,}},
- {0x9C7B,2,{0xF7,0x80,0x00,0x00,}},
- {0x9C7C,2,{0xD3,0xE3,0x00,0x00,}},
- {0x9C7D,2,{0xF7,0x81,0x00,0x00,}},
- {0x9C7E,2,{0xF7,0x82,0x00,0x00,}},
- {0x9C7F,2,{0xF6,0xCF,0x00,0x00,}},
- {0x9C80,2,{0xF7,0x83,0x00,0x00,}},
- {0x9C81,2,{0xC2,0xB3,0x00,0x00,}},
- {0x9C82,2,{0xF6,0xD0,0x00,0x00,}},
- {0x9C83,2,{0xF7,0x84,0x00,0x00,}},
- {0x9C84,2,{0xF7,0x85,0x00,0x00,}},
- {0x9C85,2,{0xF6,0xD1,0x00,0x00,}},
- {0x9C86,2,{0xF6,0xD2,0x00,0x00,}},
- {0x9C87,2,{0xF6,0xD3,0x00,0x00,}},
- {0x9C88,2,{0xF6,0xD4,0x00,0x00,}},
- {0x9C89,2,{0xF7,0x86,0x00,0x00,}},
- {0x9C8A,2,{0xF7,0x87,0x00,0x00,}},
- {0x9C8B,2,{0xF6,0xD6,0x00,0x00,}},
- {0x9C8C,2,{0xF7,0x88,0x00,0x00,}},
- {0x9C8D,2,{0xB1,0xAB,0x00,0x00,}},
- {0x9C8E,2,{0xF6,0xD7,0x00,0x00,}},
- {0x9C8F,2,{0xF7,0x89,0x00,0x00,}},
- {0x9C90,2,{0xF6,0xD8,0x00,0x00,}},
- {0x9C91,2,{0xF6,0xD9,0x00,0x00,}},
- {0x9C92,2,{0xF6,0xDA,0x00,0x00,}},
- {0x9C93,2,{0xF7,0x8A,0x00,0x00,}},
- {0x9C94,2,{0xF6,0xDB,0x00,0x00,}},
- {0x9C95,2,{0xF6,0xDC,0x00,0x00,}},
- {0x9C96,2,{0xF7,0x8B,0x00,0x00,}},
- {0x9C97,2,{0xF7,0x8C,0x00,0x00,}},
- {0x9C98,2,{0xF7,0x8D,0x00,0x00,}},
- {0x9C99,2,{0xF7,0x8E,0x00,0x00,}},
- {0x9C9A,2,{0xF6,0xDD,0x00,0x00,}},
- {0x9C9B,2,{0xF6,0xDE,0x00,0x00,}},
- {0x9C9C,2,{0xCF,0xCA,0x00,0x00,}},
- {0x9C9D,2,{0xF7,0x8F,0x00,0x00,}},
- {0x9C9E,2,{0xF6,0xDF,0x00,0x00,}},
- {0x9C9F,2,{0xF6,0xE0,0x00,0x00,}},
- {0x9CA0,2,{0xF6,0xE1,0x00,0x00,}},
- {0x9CA1,2,{0xF6,0xE2,0x00,0x00,}},
- {0x9CA2,2,{0xF6,0xE3,0x00,0x00,}},
- {0x9CA3,2,{0xF6,0xE4,0x00,0x00,}},
- {0x9CA4,2,{0xC0,0xF0,0x00,0x00,}},
- {0x9CA5,2,{0xF6,0xE5,0x00,0x00,}},
- {0x9CA6,2,{0xF6,0xE6,0x00,0x00,}},
- {0x9CA7,2,{0xF6,0xE7,0x00,0x00,}},
- {0x9CA8,2,{0xF6,0xE8,0x00,0x00,}},
- {0x9CA9,2,{0xF6,0xE9,0x00,0x00,}},
- {0x9CAA,2,{0xF7,0x90,0x00,0x00,}},
- {0x9CAB,2,{0xF6,0xEA,0x00,0x00,}},
- {0x9CAC,2,{0xF7,0x91,0x00,0x00,}},
- {0x9CAD,2,{0xF6,0xEB,0x00,0x00,}},
- {0x9CAE,2,{0xF6,0xEC,0x00,0x00,}},
- {0x9CAF,2,{0xF7,0x92,0x00,0x00,}},
- {0x9CB0,2,{0xF6,0xED,0x00,0x00,}},
- {0x9CB1,2,{0xF6,0xEE,0x00,0x00,}},
- {0x9CB2,2,{0xF6,0xEF,0x00,0x00,}},
- {0x9CB3,2,{0xF6,0xF0,0x00,0x00,}},
- {0x9CB4,2,{0xF6,0xF1,0x00,0x00,}},
- {0x9CB5,2,{0xF6,0xF2,0x00,0x00,}},
- {0x9CB6,2,{0xF6,0xF3,0x00,0x00,}},
- {0x9CB7,2,{0xF6,0xF4,0x00,0x00,}},
- {0x9CB8,2,{0xBE,0xA8,0x00,0x00,}},
- {0x9CB9,2,{0xF7,0x93,0x00,0x00,}},
- {0x9CBA,2,{0xF6,0xF5,0x00,0x00,}},
- {0x9CBB,2,{0xF6,0xF6,0x00,0x00,}},
- {0x9CBC,2,{0xF6,0xF7,0x00,0x00,}},
- {0x9CBD,2,{0xF6,0xF8,0x00,0x00,}},
- {0x9CBE,2,{0xF7,0x94,0x00,0x00,}},
- {0x9CBF,2,{0xF7,0x95,0x00,0x00,}},
- {0x9CC0,2,{0xF7,0x96,0x00,0x00,}},
- {0x9CC1,2,{0xF7,0x97,0x00,0x00,}},
- {0x9CC2,2,{0xF7,0x98,0x00,0x00,}},
- {0x9CC3,2,{0xC8,0xFA,0x00,0x00,}},
- {0x9CC4,2,{0xF6,0xF9,0x00,0x00,}},
- {0x9CC5,2,{0xF6,0xFA,0x00,0x00,}},
- {0x9CC6,2,{0xF6,0xFB,0x00,0x00,}},
- {0x9CC7,2,{0xF6,0xFC,0x00,0x00,}},
- {0x9CC8,2,{0xF7,0x99,0x00,0x00,}},
- {0x9CC9,2,{0xF7,0x9A,0x00,0x00,}},
- {0x9CCA,2,{0xF6,0xFD,0x00,0x00,}},
- {0x9CCB,2,{0xF6,0xFE,0x00,0x00,}},
- {0x9CCC,2,{0xF7,0xA1,0x00,0x00,}},
- {0x9CCD,2,{0xF7,0xA2,0x00,0x00,}},
- {0x9CCE,2,{0xF7,0xA3,0x00,0x00,}},
- {0x9CCF,2,{0xF7,0xA4,0x00,0x00,}},
- {0x9CD0,2,{0xF7,0xA5,0x00,0x00,}},
- {0x9CD1,2,{0xF7,0x9B,0x00,0x00,}},
- {0x9CD2,2,{0xF7,0x9C,0x00,0x00,}},
- {0x9CD3,2,{0xF7,0xA6,0x00,0x00,}},
- {0x9CD4,2,{0xF7,0xA7,0x00,0x00,}},
- {0x9CD5,2,{0xF7,0xA8,0x00,0x00,}},
- {0x9CD6,2,{0xB1,0xEE,0x00,0x00,}},
- {0x9CD7,2,{0xF7,0xA9,0x00,0x00,}},
- {0x9CD8,2,{0xF7,0xAA,0x00,0x00,}},
- {0x9CD9,2,{0xF7,0xAB,0x00,0x00,}},
- {0x9CDA,2,{0xF7,0x9D,0x00,0x00,}},
- {0x9CDB,2,{0xF7,0x9E,0x00,0x00,}},
- {0x9CDC,2,{0xF7,0xAC,0x00,0x00,}},
- {0x9CDD,2,{0xF7,0xAD,0x00,0x00,}},
- {0x9CDE,2,{0xC1,0xDB,0x00,0x00,}},
- {0x9CDF,2,{0xF7,0xAE,0x00,0x00,}},
- {0x9CE0,2,{0xF7,0x9F,0x00,0x00,}},
- {0x9CE1,2,{0xF7,0xA0,0x00,0x00,}},
- {0x9CE2,2,{0xF7,0xAF,0x00,0x00,}},
- {0x9CE3,2,{0xF8,0x40,0x00,0x00,}},
- {0x9CE4,2,{0xF8,0x41,0x00,0x00,}},
- {0x9CE5,2,{0xF8,0x42,0x00,0x00,}},
- {0x9CE6,2,{0xF8,0x43,0x00,0x00,}},
- {0x9CE7,2,{0xF8,0x44,0x00,0x00,}},
- {0x9CE8,2,{0xF8,0x45,0x00,0x00,}},
- {0x9CE9,2,{0xF8,0x46,0x00,0x00,}},
- {0x9CEA,2,{0xF8,0x47,0x00,0x00,}},
- {0x9CEB,2,{0xF8,0x48,0x00,0x00,}},
- {0x9CEC,2,{0xF8,0x49,0x00,0x00,}},
- {0x9CED,2,{0xF8,0x4A,0x00,0x00,}},
- {0x9CEE,2,{0xF8,0x4B,0x00,0x00,}},
- {0x9CEF,2,{0xF8,0x4C,0x00,0x00,}},
- {0x9CF0,2,{0xF8,0x4D,0x00,0x00,}},
- {0x9CF1,2,{0xF8,0x4E,0x00,0x00,}},
- {0x9CF2,2,{0xF8,0x4F,0x00,0x00,}},
- {0x9CF3,2,{0xF8,0x50,0x00,0x00,}},
- {0x9CF4,2,{0xF8,0x51,0x00,0x00,}},
- {0x9CF5,2,{0xF8,0x52,0x00,0x00,}},
- {0x9CF6,2,{0xF8,0x53,0x00,0x00,}},
- {0x9CF7,2,{0xF8,0x54,0x00,0x00,}},
- {0x9CF8,2,{0xF8,0x55,0x00,0x00,}},
- {0x9CF9,2,{0xF8,0x56,0x00,0x00,}},
- {0x9CFA,2,{0xF8,0x57,0x00,0x00,}},
- {0x9CFB,2,{0xF8,0x58,0x00,0x00,}},
- {0x9CFC,2,{0xF8,0x59,0x00,0x00,}},
- {0x9CFD,2,{0xF8,0x5A,0x00,0x00,}},
- {0x9CFE,2,{0xF8,0x5B,0x00,0x00,}},
- {0x9CFF,2,{0xF8,0x5C,0x00,0x00,}},
- {0x9D00,2,{0xF8,0x5D,0x00,0x00,}},
- {0x9D01,2,{0xF8,0x5E,0x00,0x00,}},
- {0x9D02,2,{0xF8,0x5F,0x00,0x00,}},
- {0x9D03,2,{0xF8,0x60,0x00,0x00,}},
- {0x9D04,2,{0xF8,0x61,0x00,0x00,}},
- {0x9D05,2,{0xF8,0x62,0x00,0x00,}},
- {0x9D06,2,{0xF8,0x63,0x00,0x00,}},
- {0x9D07,2,{0xF8,0x64,0x00,0x00,}},
- {0x9D08,2,{0xF8,0x65,0x00,0x00,}},
- {0x9D09,2,{0xF8,0x66,0x00,0x00,}},
- {0x9D0A,2,{0xF8,0x67,0x00,0x00,}},
- {0x9D0B,2,{0xF8,0x68,0x00,0x00,}},
- {0x9D0C,2,{0xF8,0x69,0x00,0x00,}},
- {0x9D0D,2,{0xF8,0x6A,0x00,0x00,}},
- {0x9D0E,2,{0xF8,0x6B,0x00,0x00,}},
- {0x9D0F,2,{0xF8,0x6C,0x00,0x00,}},
- {0x9D10,2,{0xF8,0x6D,0x00,0x00,}},
- {0x9D11,2,{0xF8,0x6E,0x00,0x00,}},
- {0x9D12,2,{0xF8,0x6F,0x00,0x00,}},
- {0x9D13,2,{0xF8,0x70,0x00,0x00,}},
- {0x9D14,2,{0xF8,0x71,0x00,0x00,}},
- {0x9D15,2,{0xF8,0x72,0x00,0x00,}},
- {0x9D16,2,{0xF8,0x73,0x00,0x00,}},
- {0x9D17,2,{0xF8,0x74,0x00,0x00,}},
- {0x9D18,2,{0xF8,0x75,0x00,0x00,}},
- {0x9D19,2,{0xF8,0x76,0x00,0x00,}},
- {0x9D1A,2,{0xF8,0x77,0x00,0x00,}},
- {0x9D1B,2,{0xF8,0x78,0x00,0x00,}},
- {0x9D1C,2,{0xF8,0x79,0x00,0x00,}},
- {0x9D1D,2,{0xF8,0x7A,0x00,0x00,}},
- {0x9D1E,2,{0xF8,0x7B,0x00,0x00,}},
- {0x9D1F,2,{0xF8,0x7C,0x00,0x00,}},
- {0x9D20,2,{0xF8,0x7D,0x00,0x00,}},
- {0x9D21,2,{0xF8,0x7E,0x00,0x00,}},
- {0x9D22,2,{0xF8,0x80,0x00,0x00,}},
- {0x9D23,2,{0xF8,0x81,0x00,0x00,}},
- {0x9D24,2,{0xF8,0x82,0x00,0x00,}},
- {0x9D25,2,{0xF8,0x83,0x00,0x00,}},
- {0x9D26,2,{0xF8,0x84,0x00,0x00,}},
- {0x9D27,2,{0xF8,0x85,0x00,0x00,}},
- {0x9D28,2,{0xF8,0x86,0x00,0x00,}},
- {0x9D29,2,{0xF8,0x87,0x00,0x00,}},
- {0x9D2A,2,{0xF8,0x88,0x00,0x00,}},
- {0x9D2B,2,{0xF8,0x89,0x00,0x00,}},
- {0x9D2C,2,{0xF8,0x8A,0x00,0x00,}},
- {0x9D2D,2,{0xF8,0x8B,0x00,0x00,}},
- {0x9D2E,2,{0xF8,0x8C,0x00,0x00,}},
- {0x9D2F,2,{0xF8,0x8D,0x00,0x00,}},
- {0x9D30,2,{0xF8,0x8E,0x00,0x00,}},
- {0x9D31,2,{0xF8,0x8F,0x00,0x00,}},
- {0x9D32,2,{0xF8,0x90,0x00,0x00,}},
- {0x9D33,2,{0xF8,0x91,0x00,0x00,}},
- {0x9D34,2,{0xF8,0x92,0x00,0x00,}},
- {0x9D35,2,{0xF8,0x93,0x00,0x00,}},
- {0x9D36,2,{0xF8,0x94,0x00,0x00,}},
- {0x9D37,2,{0xF8,0x95,0x00,0x00,}},
- {0x9D38,2,{0xF8,0x96,0x00,0x00,}},
- {0x9D39,2,{0xF8,0x97,0x00,0x00,}},
- {0x9D3A,2,{0xF8,0x98,0x00,0x00,}},
- {0x9D3B,2,{0xF8,0x99,0x00,0x00,}},
- {0x9D3C,2,{0xF8,0x9A,0x00,0x00,}},
- {0x9D3D,2,{0xF8,0x9B,0x00,0x00,}},
- {0x9D3E,2,{0xF8,0x9C,0x00,0x00,}},
- {0x9D3F,2,{0xF8,0x9D,0x00,0x00,}},
- {0x9D40,2,{0xF8,0x9E,0x00,0x00,}},
- {0x9D41,2,{0xF8,0x9F,0x00,0x00,}},
- {0x9D42,2,{0xF8,0xA0,0x00,0x00,}},
- {0x9D43,2,{0xF9,0x40,0x00,0x00,}},
- {0x9D44,2,{0xF9,0x41,0x00,0x00,}},
- {0x9D45,2,{0xF9,0x42,0x00,0x00,}},
- {0x9D46,2,{0xF9,0x43,0x00,0x00,}},
- {0x9D47,2,{0xF9,0x44,0x00,0x00,}},
- {0x9D48,2,{0xF9,0x45,0x00,0x00,}},
- {0x9D49,2,{0xF9,0x46,0x00,0x00,}},
- {0x9D4A,2,{0xF9,0x47,0x00,0x00,}},
- {0x9D4B,2,{0xF9,0x48,0x00,0x00,}},
- {0x9D4C,2,{0xF9,0x49,0x00,0x00,}},
- {0x9D4D,2,{0xF9,0x4A,0x00,0x00,}},
- {0x9D4E,2,{0xF9,0x4B,0x00,0x00,}},
- {0x9D4F,2,{0xF9,0x4C,0x00,0x00,}},
- {0x9D50,2,{0xF9,0x4D,0x00,0x00,}},
- {0x9D51,2,{0xF9,0x4E,0x00,0x00,}},
- {0x9D52,2,{0xF9,0x4F,0x00,0x00,}},
- {0x9D53,2,{0xF9,0x50,0x00,0x00,}},
- {0x9D54,2,{0xF9,0x51,0x00,0x00,}},
- {0x9D55,2,{0xF9,0x52,0x00,0x00,}},
- {0x9D56,2,{0xF9,0x53,0x00,0x00,}},
- {0x9D57,2,{0xF9,0x54,0x00,0x00,}},
- {0x9D58,2,{0xF9,0x55,0x00,0x00,}},
- {0x9D59,2,{0xF9,0x56,0x00,0x00,}},
- {0x9D5A,2,{0xF9,0x57,0x00,0x00,}},
- {0x9D5B,2,{0xF9,0x58,0x00,0x00,}},
- {0x9D5C,2,{0xF9,0x59,0x00,0x00,}},
- {0x9D5D,2,{0xF9,0x5A,0x00,0x00,}},
- {0x9D5E,2,{0xF9,0x5B,0x00,0x00,}},
- {0x9D5F,2,{0xF9,0x5C,0x00,0x00,}},
- {0x9D60,2,{0xF9,0x5D,0x00,0x00,}},
- {0x9D61,2,{0xF9,0x5E,0x00,0x00,}},
- {0x9D62,2,{0xF9,0x5F,0x00,0x00,}},
- {0x9D63,2,{0xF9,0x60,0x00,0x00,}},
- {0x9D64,2,{0xF9,0x61,0x00,0x00,}},
- {0x9D65,2,{0xF9,0x62,0x00,0x00,}},
- {0x9D66,2,{0xF9,0x63,0x00,0x00,}},
- {0x9D67,2,{0xF9,0x64,0x00,0x00,}},
- {0x9D68,2,{0xF9,0x65,0x00,0x00,}},
- {0x9D69,2,{0xF9,0x66,0x00,0x00,}},
- {0x9D6A,2,{0xF9,0x67,0x00,0x00,}},
- {0x9D6B,2,{0xF9,0x68,0x00,0x00,}},
- {0x9D6C,2,{0xF9,0x69,0x00,0x00,}},
- {0x9D6D,2,{0xF9,0x6A,0x00,0x00,}},
- {0x9D6E,2,{0xF9,0x6B,0x00,0x00,}},
- {0x9D6F,2,{0xF9,0x6C,0x00,0x00,}},
- {0x9D70,2,{0xF9,0x6D,0x00,0x00,}},
- {0x9D71,2,{0xF9,0x6E,0x00,0x00,}},
- {0x9D72,2,{0xF9,0x6F,0x00,0x00,}},
- {0x9D73,2,{0xF9,0x70,0x00,0x00,}},
- {0x9D74,2,{0xF9,0x71,0x00,0x00,}},
- {0x9D75,2,{0xF9,0x72,0x00,0x00,}},
- {0x9D76,2,{0xF9,0x73,0x00,0x00,}},
- {0x9D77,2,{0xF9,0x74,0x00,0x00,}},
- {0x9D78,2,{0xF9,0x75,0x00,0x00,}},
- {0x9D79,2,{0xF9,0x76,0x00,0x00,}},
- {0x9D7A,2,{0xF9,0x77,0x00,0x00,}},
- {0x9D7B,2,{0xF9,0x78,0x00,0x00,}},
- {0x9D7C,2,{0xF9,0x79,0x00,0x00,}},
- {0x9D7D,2,{0xF9,0x7A,0x00,0x00,}},
- {0x9D7E,2,{0xF9,0x7B,0x00,0x00,}},
- {0x9D7F,2,{0xF9,0x7C,0x00,0x00,}},
- {0x9D80,2,{0xF9,0x7D,0x00,0x00,}},
- {0x9D81,2,{0xF9,0x7E,0x00,0x00,}},
- {0x9D82,2,{0xF9,0x80,0x00,0x00,}},
- {0x9D83,2,{0xF9,0x81,0x00,0x00,}},
- {0x9D84,2,{0xF9,0x82,0x00,0x00,}},
- {0x9D85,2,{0xF9,0x83,0x00,0x00,}},
- {0x9D86,2,{0xF9,0x84,0x00,0x00,}},
- {0x9D87,2,{0xF9,0x85,0x00,0x00,}},
- {0x9D88,2,{0xF9,0x86,0x00,0x00,}},
- {0x9D89,2,{0xF9,0x87,0x00,0x00,}},
- {0x9D8A,2,{0xF9,0x88,0x00,0x00,}},
- {0x9D8B,2,{0xF9,0x89,0x00,0x00,}},
- {0x9D8C,2,{0xF9,0x8A,0x00,0x00,}},
- {0x9D8D,2,{0xF9,0x8B,0x00,0x00,}},
- {0x9D8E,2,{0xF9,0x8C,0x00,0x00,}},
- {0x9D8F,2,{0xF9,0x8D,0x00,0x00,}},
- {0x9D90,2,{0xF9,0x8E,0x00,0x00,}},
- {0x9D91,2,{0xF9,0x8F,0x00,0x00,}},
- {0x9D92,2,{0xF9,0x90,0x00,0x00,}},
- {0x9D93,2,{0xF9,0x91,0x00,0x00,}},
- {0x9D94,2,{0xF9,0x92,0x00,0x00,}},
- {0x9D95,2,{0xF9,0x93,0x00,0x00,}},
- {0x9D96,2,{0xF9,0x94,0x00,0x00,}},
- {0x9D97,2,{0xF9,0x95,0x00,0x00,}},
- {0x9D98,2,{0xF9,0x96,0x00,0x00,}},
- {0x9D99,2,{0xF9,0x97,0x00,0x00,}},
- {0x9D9A,2,{0xF9,0x98,0x00,0x00,}},
- {0x9D9B,2,{0xF9,0x99,0x00,0x00,}},
- {0x9D9C,2,{0xF9,0x9A,0x00,0x00,}},
- {0x9D9D,2,{0xF9,0x9B,0x00,0x00,}},
- {0x9D9E,2,{0xF9,0x9C,0x00,0x00,}},
- {0x9D9F,2,{0xF9,0x9D,0x00,0x00,}},
- {0x9DA0,2,{0xF9,0x9E,0x00,0x00,}},
- {0x9DA1,2,{0xF9,0x9F,0x00,0x00,}},
- {0x9DA2,2,{0xF9,0xA0,0x00,0x00,}},
- {0x9DA3,2,{0xFA,0x40,0x00,0x00,}},
- {0x9DA4,2,{0xFA,0x41,0x00,0x00,}},
- {0x9DA5,2,{0xFA,0x42,0x00,0x00,}},
- {0x9DA6,2,{0xFA,0x43,0x00,0x00,}},
- {0x9DA7,2,{0xFA,0x44,0x00,0x00,}},
- {0x9DA8,2,{0xFA,0x45,0x00,0x00,}},
- {0x9DA9,2,{0xFA,0x46,0x00,0x00,}},
- {0x9DAA,2,{0xFA,0x47,0x00,0x00,}},
- {0x9DAB,2,{0xFA,0x48,0x00,0x00,}},
- {0x9DAC,2,{0xFA,0x49,0x00,0x00,}},
- {0x9DAD,2,{0xFA,0x4A,0x00,0x00,}},
- {0x9DAE,2,{0xFA,0x4B,0x00,0x00,}},
- {0x9DAF,2,{0xFA,0x4C,0x00,0x00,}},
- {0x9DB0,2,{0xFA,0x4D,0x00,0x00,}},
- {0x9DB1,2,{0xFA,0x4E,0x00,0x00,}},
- {0x9DB2,2,{0xFA,0x4F,0x00,0x00,}},
- {0x9DB3,2,{0xFA,0x50,0x00,0x00,}},
- {0x9DB4,2,{0xFA,0x51,0x00,0x00,}},
- {0x9DB5,2,{0xFA,0x52,0x00,0x00,}},
- {0x9DB6,2,{0xFA,0x53,0x00,0x00,}},
- {0x9DB7,2,{0xFA,0x54,0x00,0x00,}},
- {0x9DB8,2,{0xFA,0x55,0x00,0x00,}},
- {0x9DB9,2,{0xFA,0x56,0x00,0x00,}},
- {0x9DBA,2,{0xFA,0x57,0x00,0x00,}},
- {0x9DBB,2,{0xFA,0x58,0x00,0x00,}},
- {0x9DBC,2,{0xFA,0x59,0x00,0x00,}},
- {0x9DBD,2,{0xFA,0x5A,0x00,0x00,}},
- {0x9DBE,2,{0xFA,0x5B,0x00,0x00,}},
- {0x9DBF,2,{0xFA,0x5C,0x00,0x00,}},
- {0x9DC0,2,{0xFA,0x5D,0x00,0x00,}},
- {0x9DC1,2,{0xFA,0x5E,0x00,0x00,}},
- {0x9DC2,2,{0xFA,0x5F,0x00,0x00,}},
- {0x9DC3,2,{0xFA,0x60,0x00,0x00,}},
- {0x9DC4,2,{0xFA,0x61,0x00,0x00,}},
- {0x9DC5,2,{0xFA,0x62,0x00,0x00,}},
- {0x9DC6,2,{0xFA,0x63,0x00,0x00,}},
- {0x9DC7,2,{0xFA,0x64,0x00,0x00,}},
- {0x9DC8,2,{0xFA,0x65,0x00,0x00,}},
- {0x9DC9,2,{0xFA,0x66,0x00,0x00,}},
- {0x9DCA,2,{0xFA,0x67,0x00,0x00,}},
- {0x9DCB,2,{0xFA,0x68,0x00,0x00,}},
- {0x9DCC,2,{0xFA,0x69,0x00,0x00,}},
- {0x9DCD,2,{0xFA,0x6A,0x00,0x00,}},
- {0x9DCE,2,{0xFA,0x6B,0x00,0x00,}},
- {0x9DCF,2,{0xFA,0x6C,0x00,0x00,}},
- {0x9DD0,2,{0xFA,0x6D,0x00,0x00,}},
- {0x9DD1,2,{0xFA,0x6E,0x00,0x00,}},
- {0x9DD2,2,{0xFA,0x6F,0x00,0x00,}},
- {0x9DD3,2,{0xFA,0x70,0x00,0x00,}},
- {0x9DD4,2,{0xFA,0x71,0x00,0x00,}},
- {0x9DD5,2,{0xFA,0x72,0x00,0x00,}},
- {0x9DD6,2,{0xFA,0x73,0x00,0x00,}},
- {0x9DD7,2,{0xFA,0x74,0x00,0x00,}},
- {0x9DD8,2,{0xFA,0x75,0x00,0x00,}},
- {0x9DD9,2,{0xFA,0x76,0x00,0x00,}},
- {0x9DDA,2,{0xFA,0x77,0x00,0x00,}},
- {0x9DDB,2,{0xFA,0x78,0x00,0x00,}},
- {0x9DDC,2,{0xFA,0x79,0x00,0x00,}},
- {0x9DDD,2,{0xFA,0x7A,0x00,0x00,}},
- {0x9DDE,2,{0xFA,0x7B,0x00,0x00,}},
- {0x9DDF,2,{0xFA,0x7C,0x00,0x00,}},
- {0x9DE0,2,{0xFA,0x7D,0x00,0x00,}},
- {0x9DE1,2,{0xFA,0x7E,0x00,0x00,}},
- {0x9DE2,2,{0xFA,0x80,0x00,0x00,}},
- {0x9DE3,2,{0xFA,0x81,0x00,0x00,}},
- {0x9DE4,2,{0xFA,0x82,0x00,0x00,}},
- {0x9DE5,2,{0xFA,0x83,0x00,0x00,}},
- {0x9DE6,2,{0xFA,0x84,0x00,0x00,}},
- {0x9DE7,2,{0xFA,0x85,0x00,0x00,}},
- {0x9DE8,2,{0xFA,0x86,0x00,0x00,}},
- {0x9DE9,2,{0xFA,0x87,0x00,0x00,}},
- {0x9DEA,2,{0xFA,0x88,0x00,0x00,}},
- {0x9DEB,2,{0xFA,0x89,0x00,0x00,}},
- {0x9DEC,2,{0xFA,0x8A,0x00,0x00,}},
- {0x9DED,2,{0xFA,0x8B,0x00,0x00,}},
- {0x9DEE,2,{0xFA,0x8C,0x00,0x00,}},
- {0x9DEF,2,{0xFA,0x8D,0x00,0x00,}},
- {0x9DF0,2,{0xFA,0x8E,0x00,0x00,}},
- {0x9DF1,2,{0xFA,0x8F,0x00,0x00,}},
- {0x9DF2,2,{0xFA,0x90,0x00,0x00,}},
- {0x9DF3,2,{0xFA,0x91,0x00,0x00,}},
- {0x9DF4,2,{0xFA,0x92,0x00,0x00,}},
- {0x9DF5,2,{0xFA,0x93,0x00,0x00,}},
- {0x9DF6,2,{0xFA,0x94,0x00,0x00,}},
- {0x9DF7,2,{0xFA,0x95,0x00,0x00,}},
- {0x9DF8,2,{0xFA,0x96,0x00,0x00,}},
- {0x9DF9,2,{0xFA,0x97,0x00,0x00,}},
- {0x9DFA,2,{0xFA,0x98,0x00,0x00,}},
- {0x9DFB,2,{0xFA,0x99,0x00,0x00,}},
- {0x9DFC,2,{0xFA,0x9A,0x00,0x00,}},
- {0x9DFD,2,{0xFA,0x9B,0x00,0x00,}},
- {0x9DFE,2,{0xFA,0x9C,0x00,0x00,}},
- {0x9DFF,2,{0xFA,0x9D,0x00,0x00,}},
- {0x9E00,2,{0xFA,0x9E,0x00,0x00,}},
- {0x9E01,2,{0xFA,0x9F,0x00,0x00,}},
- {0x9E02,2,{0xFA,0xA0,0x00,0x00,}},
- {0x9E03,2,{0xFB,0x40,0x00,0x00,}},
- {0x9E04,2,{0xFB,0x41,0x00,0x00,}},
- {0x9E05,2,{0xFB,0x42,0x00,0x00,}},
- {0x9E06,2,{0xFB,0x43,0x00,0x00,}},
- {0x9E07,2,{0xFB,0x44,0x00,0x00,}},
- {0x9E08,2,{0xFB,0x45,0x00,0x00,}},
- {0x9E09,2,{0xFB,0x46,0x00,0x00,}},
- {0x9E0A,2,{0xFB,0x47,0x00,0x00,}},
- {0x9E0B,2,{0xFB,0x48,0x00,0x00,}},
- {0x9E0C,2,{0xFB,0x49,0x00,0x00,}},
- {0x9E0D,2,{0xFB,0x4A,0x00,0x00,}},
- {0x9E0E,2,{0xFB,0x4B,0x00,0x00,}},
- {0x9E0F,2,{0xFB,0x4C,0x00,0x00,}},
- {0x9E10,2,{0xFB,0x4D,0x00,0x00,}},
- {0x9E11,2,{0xFB,0x4E,0x00,0x00,}},
- {0x9E12,2,{0xFB,0x4F,0x00,0x00,}},
- {0x9E13,2,{0xFB,0x50,0x00,0x00,}},
- {0x9E14,2,{0xFB,0x51,0x00,0x00,}},
- {0x9E15,2,{0xFB,0x52,0x00,0x00,}},
- {0x9E16,2,{0xFB,0x53,0x00,0x00,}},
- {0x9E17,2,{0xFB,0x54,0x00,0x00,}},
- {0x9E18,2,{0xFB,0x55,0x00,0x00,}},
- {0x9E19,2,{0xFB,0x56,0x00,0x00,}},
- {0x9E1A,2,{0xFB,0x57,0x00,0x00,}},
- {0x9E1B,2,{0xFB,0x58,0x00,0x00,}},
- {0x9E1C,2,{0xFB,0x59,0x00,0x00,}},
- {0x9E1D,2,{0xFB,0x5A,0x00,0x00,}},
- {0x9E1E,2,{0xFB,0x5B,0x00,0x00,}},
- {0x9E1F,2,{0xC4,0xF1,0x00,0x00,}},
- {0x9E20,2,{0xF0,0xAF,0x00,0x00,}},
- {0x9E21,2,{0xBC,0xA6,0x00,0x00,}},
- {0x9E22,2,{0xF0,0xB0,0x00,0x00,}},
- {0x9E23,2,{0xC3,0xF9,0x00,0x00,}},
- {0x9E24,2,{0xFB,0x5C,0x00,0x00,}},
- {0x9E25,2,{0xC5,0xB8,0x00,0x00,}},
- {0x9E26,2,{0xD1,0xBB,0x00,0x00,}},
- {0x9E27,2,{0xFB,0x5D,0x00,0x00,}},
- {0x9E28,2,{0xF0,0xB1,0x00,0x00,}},
- {0x9E29,2,{0xF0,0xB2,0x00,0x00,}},
- {0x9E2A,2,{0xF0,0xB3,0x00,0x00,}},
- {0x9E2B,2,{0xF0,0xB4,0x00,0x00,}},
- {0x9E2C,2,{0xF0,0xB5,0x00,0x00,}},
- {0x9E2D,2,{0xD1,0xBC,0x00,0x00,}},
- {0x9E2E,2,{0xFB,0x5E,0x00,0x00,}},
- {0x9E2F,2,{0xD1,0xEC,0x00,0x00,}},
- {0x9E30,2,{0xFB,0x5F,0x00,0x00,}},
- {0x9E31,2,{0xF0,0xB7,0x00,0x00,}},
- {0x9E32,2,{0xF0,0xB6,0x00,0x00,}},
- {0x9E33,2,{0xD4,0xA7,0x00,0x00,}},
- {0x9E34,2,{0xFB,0x60,0x00,0x00,}},
- {0x9E35,2,{0xCD,0xD2,0x00,0x00,}},
- {0x9E36,2,{0xF0,0xB8,0x00,0x00,}},
- {0x9E37,2,{0xF0,0xBA,0x00,0x00,}},
- {0x9E38,2,{0xF0,0xB9,0x00,0x00,}},
- {0x9E39,2,{0xF0,0xBB,0x00,0x00,}},
- {0x9E3A,2,{0xF0,0xBC,0x00,0x00,}},
- {0x9E3B,2,{0xFB,0x61,0x00,0x00,}},
- {0x9E3C,2,{0xFB,0x62,0x00,0x00,}},
- {0x9E3D,2,{0xB8,0xEB,0x00,0x00,}},
- {0x9E3E,2,{0xF0,0xBD,0x00,0x00,}},
- {0x9E3F,2,{0xBA,0xE8,0x00,0x00,}},
- {0x9E40,2,{0xFB,0x63,0x00,0x00,}},
- {0x9E41,2,{0xF0,0xBE,0x00,0x00,}},
- {0x9E42,2,{0xF0,0xBF,0x00,0x00,}},
- {0x9E43,2,{0xBE,0xE9,0x00,0x00,}},
- {0x9E44,2,{0xF0,0xC0,0x00,0x00,}},
- {0x9E45,2,{0xB6,0xEC,0x00,0x00,}},
- {0x9E46,2,{0xF0,0xC1,0x00,0x00,}},
- {0x9E47,2,{0xF0,0xC2,0x00,0x00,}},
- {0x9E48,2,{0xF0,0xC3,0x00,0x00,}},
- {0x9E49,2,{0xF0,0xC4,0x00,0x00,}},
- {0x9E4A,2,{0xC8,0xB5,0x00,0x00,}},
- {0x9E4B,2,{0xF0,0xC5,0x00,0x00,}},
- {0x9E4C,2,{0xF0,0xC6,0x00,0x00,}},
- {0x9E4D,2,{0xFB,0x64,0x00,0x00,}},
- {0x9E4E,2,{0xF0,0xC7,0x00,0x00,}},
- {0x9E4F,2,{0xC5,0xF4,0x00,0x00,}},
- {0x9E50,2,{0xFB,0x65,0x00,0x00,}},
- {0x9E51,2,{0xF0,0xC8,0x00,0x00,}},
- {0x9E52,2,{0xFB,0x66,0x00,0x00,}},
- {0x9E53,2,{0xFB,0x67,0x00,0x00,}},
- {0x9E54,2,{0xFB,0x68,0x00,0x00,}},
- {0x9E55,2,{0xF0,0xC9,0x00,0x00,}},
- {0x9E56,2,{0xFB,0x69,0x00,0x00,}},
- {0x9E57,2,{0xF0,0xCA,0x00,0x00,}},
- {0x9E58,2,{0xF7,0xBD,0x00,0x00,}},
- {0x9E59,2,{0xFB,0x6A,0x00,0x00,}},
- {0x9E5A,2,{0xF0,0xCB,0x00,0x00,}},
- {0x9E5B,2,{0xF0,0xCC,0x00,0x00,}},
- {0x9E5C,2,{0xF0,0xCD,0x00,0x00,}},
- {0x9E5D,2,{0xFB,0x6B,0x00,0x00,}},
- {0x9E5E,2,{0xF0,0xCE,0x00,0x00,}},
- {0x9E5F,2,{0xFB,0x6C,0x00,0x00,}},
- {0x9E60,2,{0xFB,0x6D,0x00,0x00,}},
- {0x9E61,2,{0xFB,0x6E,0x00,0x00,}},
- {0x9E62,2,{0xFB,0x6F,0x00,0x00,}},
- {0x9E63,2,{0xF0,0xCF,0x00,0x00,}},
- {0x9E64,2,{0xBA,0xD7,0x00,0x00,}},
- {0x9E65,2,{0xFB,0x70,0x00,0x00,}},
- {0x9E66,2,{0xF0,0xD0,0x00,0x00,}},
- {0x9E67,2,{0xF0,0xD1,0x00,0x00,}},
- {0x9E68,2,{0xF0,0xD2,0x00,0x00,}},
- {0x9E69,2,{0xF0,0xD3,0x00,0x00,}},
- {0x9E6A,2,{0xF0,0xD4,0x00,0x00,}},
- {0x9E6B,2,{0xF0,0xD5,0x00,0x00,}},
- {0x9E6C,2,{0xF0,0xD6,0x00,0x00,}},
- {0x9E6D,2,{0xF0,0xD8,0x00,0x00,}},
- {0x9E6E,2,{0xFB,0x71,0x00,0x00,}},
- {0x9E6F,2,{0xFB,0x72,0x00,0x00,}},
- {0x9E70,2,{0xD3,0xA5,0x00,0x00,}},
- {0x9E71,2,{0xF0,0xD7,0x00,0x00,}},
- {0x9E72,2,{0xFB,0x73,0x00,0x00,}},
- {0x9E73,2,{0xF0,0xD9,0x00,0x00,}},
- {0x9E74,2,{0xFB,0x74,0x00,0x00,}},
- {0x9E75,2,{0xFB,0x75,0x00,0x00,}},
- {0x9E76,2,{0xFB,0x76,0x00,0x00,}},
- {0x9E77,2,{0xFB,0x77,0x00,0x00,}},
- {0x9E78,2,{0xFB,0x78,0x00,0x00,}},
- {0x9E79,2,{0xFB,0x79,0x00,0x00,}},
- {0x9E7A,2,{0xFB,0x7A,0x00,0x00,}},
- {0x9E7B,2,{0xFB,0x7B,0x00,0x00,}},
- {0x9E7C,2,{0xFB,0x7C,0x00,0x00,}},
- {0x9E7D,2,{0xFB,0x7D,0x00,0x00,}},
- {0x9E7E,2,{0xF5,0xBA,0x00,0x00,}},
- {0x9E7F,2,{0xC2,0xB9,0x00,0x00,}},
- {0x9E80,2,{0xFB,0x7E,0x00,0x00,}},
- {0x9E81,2,{0xFB,0x80,0x00,0x00,}},
- {0x9E82,2,{0xF7,0xE4,0x00,0x00,}},
- {0x9E83,2,{0xFB,0x81,0x00,0x00,}},
- {0x9E84,2,{0xFB,0x82,0x00,0x00,}},
- {0x9E85,2,{0xFB,0x83,0x00,0x00,}},
- {0x9E86,2,{0xFB,0x84,0x00,0x00,}},
- {0x9E87,2,{0xF7,0xE5,0x00,0x00,}},
- {0x9E88,2,{0xF7,0xE6,0x00,0x00,}},
- {0x9E89,2,{0xFB,0x85,0x00,0x00,}},
- {0x9E8A,2,{0xFB,0x86,0x00,0x00,}},
- {0x9E8B,2,{0xF7,0xE7,0x00,0x00,}},
- {0x9E8C,2,{0xFB,0x87,0x00,0x00,}},
- {0x9E8D,2,{0xFB,0x88,0x00,0x00,}},
- {0x9E8E,2,{0xFB,0x89,0x00,0x00,}},
- {0x9E8F,2,{0xFB,0x8A,0x00,0x00,}},
- {0x9E90,2,{0xFB,0x8B,0x00,0x00,}},
- {0x9E91,2,{0xFB,0x8C,0x00,0x00,}},
- {0x9E92,2,{0xF7,0xE8,0x00,0x00,}},
- {0x9E93,2,{0xC2,0xB4,0x00,0x00,}},
- {0x9E94,2,{0xFB,0x8D,0x00,0x00,}},
- {0x9E95,2,{0xFB,0x8E,0x00,0x00,}},
- {0x9E96,2,{0xFB,0x8F,0x00,0x00,}},
- {0x9E97,2,{0xFB,0x90,0x00,0x00,}},
- {0x9E98,2,{0xFB,0x91,0x00,0x00,}},
- {0x9E99,2,{0xFB,0x92,0x00,0x00,}},
- {0x9E9A,2,{0xFB,0x93,0x00,0x00,}},
- {0x9E9B,2,{0xFB,0x94,0x00,0x00,}},
- {0x9E9C,2,{0xFB,0x95,0x00,0x00,}},
- {0x9E9D,2,{0xF7,0xEA,0x00,0x00,}},
- {0x9E9E,2,{0xFB,0x96,0x00,0x00,}},
- {0x9E9F,2,{0xF7,0xEB,0x00,0x00,}},
- {0x9EA0,2,{0xFB,0x97,0x00,0x00,}},
- {0x9EA1,2,{0xFB,0x98,0x00,0x00,}},
- {0x9EA2,2,{0xFB,0x99,0x00,0x00,}},
- {0x9EA3,2,{0xFB,0x9A,0x00,0x00,}},
- {0x9EA4,2,{0xFB,0x9B,0x00,0x00,}},
- {0x9EA5,2,{0xFB,0x9C,0x00,0x00,}},
- {0x9EA6,2,{0xC2,0xF3,0x00,0x00,}},
- {0x9EA7,2,{0xFB,0x9D,0x00,0x00,}},
- {0x9EA8,2,{0xFB,0x9E,0x00,0x00,}},
- {0x9EA9,2,{0xFB,0x9F,0x00,0x00,}},
- {0x9EAA,2,{0xFB,0xA0,0x00,0x00,}},
- {0x9EAB,2,{0xFC,0x40,0x00,0x00,}},
- {0x9EAC,2,{0xFC,0x41,0x00,0x00,}},
- {0x9EAD,2,{0xFC,0x42,0x00,0x00,}},
- {0x9EAE,2,{0xFC,0x43,0x00,0x00,}},
- {0x9EAF,2,{0xFC,0x44,0x00,0x00,}},
- {0x9EB0,2,{0xFC,0x45,0x00,0x00,}},
- {0x9EB1,2,{0xFC,0x46,0x00,0x00,}},
- {0x9EB2,2,{0xFC,0x47,0x00,0x00,}},
- {0x9EB3,2,{0xFC,0x48,0x00,0x00,}},
- {0x9EB4,2,{0xF4,0xF0,0x00,0x00,}},
- {0x9EB5,2,{0xFC,0x49,0x00,0x00,}},
- {0x9EB6,2,{0xFC,0x4A,0x00,0x00,}},
- {0x9EB7,2,{0xFC,0x4B,0x00,0x00,}},
- {0x9EB8,2,{0xF4,0xEF,0x00,0x00,}},
- {0x9EB9,2,{0xFC,0x4C,0x00,0x00,}},
- {0x9EBA,2,{0xFC,0x4D,0x00,0x00,}},
- {0x9EBB,2,{0xC2,0xE9,0x00,0x00,}},
- {0x9EBC,2,{0xFC,0x4E,0x00,0x00,}},
- {0x9EBD,2,{0xF7,0xE1,0x00,0x00,}},
- {0x9EBE,2,{0xF7,0xE2,0x00,0x00,}},
- {0x9EBF,2,{0xFC,0x4F,0x00,0x00,}},
- {0x9EC0,2,{0xFC,0x50,0x00,0x00,}},
- {0x9EC1,2,{0xFC,0x51,0x00,0x00,}},
- {0x9EC2,2,{0xFC,0x52,0x00,0x00,}},
- {0x9EC3,2,{0xFC,0x53,0x00,0x00,}},
- {0x9EC4,2,{0xBB,0xC6,0x00,0x00,}},
- {0x9EC5,2,{0xFC,0x54,0x00,0x00,}},
- {0x9EC6,2,{0xFC,0x55,0x00,0x00,}},
- {0x9EC7,2,{0xFC,0x56,0x00,0x00,}},
- {0x9EC8,2,{0xFC,0x57,0x00,0x00,}},
- {0x9EC9,2,{0xD9,0xE4,0x00,0x00,}},
- {0x9ECA,2,{0xFC,0x58,0x00,0x00,}},
- {0x9ECB,2,{0xFC,0x59,0x00,0x00,}},
- {0x9ECC,2,{0xFC,0x5A,0x00,0x00,}},
- {0x9ECD,2,{0xCA,0xF2,0x00,0x00,}},
- {0x9ECE,2,{0xC0,0xE8,0x00,0x00,}},
- {0x9ECF,2,{0xF0,0xA4,0x00,0x00,}},
- {0x9ED0,2,{0xFC,0x5B,0x00,0x00,}},
- {0x9ED1,2,{0xBA,0xDA,0x00,0x00,}},
- {0x9ED2,2,{0xFC,0x5C,0x00,0x00,}},
- {0x9ED3,2,{0xFC,0x5D,0x00,0x00,}},
- {0x9ED4,2,{0xC7,0xAD,0x00,0x00,}},
- {0x9ED5,2,{0xFC,0x5E,0x00,0x00,}},
- {0x9ED6,2,{0xFC,0x5F,0x00,0x00,}},
- {0x9ED7,2,{0xFC,0x60,0x00,0x00,}},
- {0x9ED8,2,{0xC4,0xAC,0x00,0x00,}},
- {0x9ED9,2,{0xFC,0x61,0x00,0x00,}},
- {0x9EDA,2,{0xFC,0x62,0x00,0x00,}},
- {0x9EDB,2,{0xF7,0xEC,0x00,0x00,}},
- {0x9EDC,2,{0xF7,0xED,0x00,0x00,}},
- {0x9EDD,2,{0xF7,0xEE,0x00,0x00,}},
- {0x9EDE,2,{0xFC,0x63,0x00,0x00,}},
- {0x9EDF,2,{0xF7,0xF0,0x00,0x00,}},
- {0x9EE0,2,{0xF7,0xEF,0x00,0x00,}},
- {0x9EE1,2,{0xFC,0x64,0x00,0x00,}},
- {0x9EE2,2,{0xF7,0xF1,0x00,0x00,}},
- {0x9EE3,2,{0xFC,0x65,0x00,0x00,}},
- {0x9EE4,2,{0xFC,0x66,0x00,0x00,}},
- {0x9EE5,2,{0xF7,0xF4,0x00,0x00,}},
- {0x9EE6,2,{0xFC,0x67,0x00,0x00,}},
- {0x9EE7,2,{0xF7,0xF3,0x00,0x00,}},
- {0x9EE8,2,{0xFC,0x68,0x00,0x00,}},
- {0x9EE9,2,{0xF7,0xF2,0x00,0x00,}},
- {0x9EEA,2,{0xF7,0xF5,0x00,0x00,}},
- {0x9EEB,2,{0xFC,0x69,0x00,0x00,}},
- {0x9EEC,2,{0xFC,0x6A,0x00,0x00,}},
- {0x9EED,2,{0xFC,0x6B,0x00,0x00,}},
- {0x9EEE,2,{0xFC,0x6C,0x00,0x00,}},
- {0x9EEF,2,{0xF7,0xF6,0x00,0x00,}},
- {0x9EF0,2,{0xFC,0x6D,0x00,0x00,}},
- {0x9EF1,2,{0xFC,0x6E,0x00,0x00,}},
- {0x9EF2,2,{0xFC,0x6F,0x00,0x00,}},
- {0x9EF3,2,{0xFC,0x70,0x00,0x00,}},
- {0x9EF4,2,{0xFC,0x71,0x00,0x00,}},
- {0x9EF5,2,{0xFC,0x72,0x00,0x00,}},
- {0x9EF6,2,{0xFC,0x73,0x00,0x00,}},
- {0x9EF7,2,{0xFC,0x74,0x00,0x00,}},
- {0x9EF8,2,{0xFC,0x75,0x00,0x00,}},
- {0x9EF9,2,{0xED,0xE9,0x00,0x00,}},
- {0x9EFA,2,{0xFC,0x76,0x00,0x00,}},
- {0x9EFB,2,{0xED,0xEA,0x00,0x00,}},
- {0x9EFC,2,{0xED,0xEB,0x00,0x00,}},
- {0x9EFD,2,{0xFC,0x77,0x00,0x00,}},
- {0x9EFE,2,{0xF6,0xBC,0x00,0x00,}},
- {0x9EFF,2,{0xFC,0x78,0x00,0x00,}},
- {0x9F00,2,{0xFC,0x79,0x00,0x00,}},
- {0x9F01,2,{0xFC,0x7A,0x00,0x00,}},
- {0x9F02,2,{0xFC,0x7B,0x00,0x00,}},
- {0x9F03,2,{0xFC,0x7C,0x00,0x00,}},
- {0x9F04,2,{0xFC,0x7D,0x00,0x00,}},
- {0x9F05,2,{0xFC,0x7E,0x00,0x00,}},
- {0x9F06,2,{0xFC,0x80,0x00,0x00,}},
- {0x9F07,2,{0xFC,0x81,0x00,0x00,}},
- {0x9F08,2,{0xFC,0x82,0x00,0x00,}},
- {0x9F09,2,{0xFC,0x83,0x00,0x00,}},
- {0x9F0A,2,{0xFC,0x84,0x00,0x00,}},
- {0x9F0B,2,{0xF6,0xBD,0x00,0x00,}},
- {0x9F0C,2,{0xFC,0x85,0x00,0x00,}},
- {0x9F0D,2,{0xF6,0xBE,0x00,0x00,}},
- {0x9F0E,2,{0xB6,0xA6,0x00,0x00,}},
- {0x9F0F,2,{0xFC,0x86,0x00,0x00,}},
- {0x9F10,2,{0xD8,0xBE,0x00,0x00,}},
- {0x9F11,2,{0xFC,0x87,0x00,0x00,}},
- {0x9F12,2,{0xFC,0x88,0x00,0x00,}},
- {0x9F13,2,{0xB9,0xC4,0x00,0x00,}},
- {0x9F14,2,{0xFC,0x89,0x00,0x00,}},
- {0x9F15,2,{0xFC,0x8A,0x00,0x00,}},
- {0x9F16,2,{0xFC,0x8B,0x00,0x00,}},
- {0x9F17,2,{0xD8,0xBB,0x00,0x00,}},
- {0x9F18,2,{0xFC,0x8C,0x00,0x00,}},
- {0x9F19,2,{0xDC,0xB1,0x00,0x00,}},
- {0x9F1A,2,{0xFC,0x8D,0x00,0x00,}},
- {0x9F1B,2,{0xFC,0x8E,0x00,0x00,}},
- {0x9F1C,2,{0xFC,0x8F,0x00,0x00,}},
- {0x9F1D,2,{0xFC,0x90,0x00,0x00,}},
- {0x9F1E,2,{0xFC,0x91,0x00,0x00,}},
- {0x9F1F,2,{0xFC,0x92,0x00,0x00,}},
- {0x9F20,2,{0xCA,0xF3,0x00,0x00,}},
- {0x9F21,2,{0xFC,0x93,0x00,0x00,}},
- {0x9F22,2,{0xF7,0xF7,0x00,0x00,}},
- {0x9F23,2,{0xFC,0x94,0x00,0x00,}},
- {0x9F24,2,{0xFC,0x95,0x00,0x00,}},
- {0x9F25,2,{0xFC,0x96,0x00,0x00,}},
- {0x9F26,2,{0xFC,0x97,0x00,0x00,}},
- {0x9F27,2,{0xFC,0x98,0x00,0x00,}},
- {0x9F28,2,{0xFC,0x99,0x00,0x00,}},
- {0x9F29,2,{0xFC,0x9A,0x00,0x00,}},
- {0x9F2A,2,{0xFC,0x9B,0x00,0x00,}},
- {0x9F2B,2,{0xFC,0x9C,0x00,0x00,}},
- {0x9F2C,2,{0xF7,0xF8,0x00,0x00,}},
- {0x9F2D,2,{0xFC,0x9D,0x00,0x00,}},
- {0x9F2E,2,{0xFC,0x9E,0x00,0x00,}},
- {0x9F2F,2,{0xF7,0xF9,0x00,0x00,}},
- {0x9F30,2,{0xFC,0x9F,0x00,0x00,}},
- {0x9F31,2,{0xFC,0xA0,0x00,0x00,}},
- {0x9F32,2,{0xFD,0x40,0x00,0x00,}},
- {0x9F33,2,{0xFD,0x41,0x00,0x00,}},
- {0x9F34,2,{0xFD,0x42,0x00,0x00,}},
- {0x9F35,2,{0xFD,0x43,0x00,0x00,}},
- {0x9F36,2,{0xFD,0x44,0x00,0x00,}},
- {0x9F37,2,{0xF7,0xFB,0x00,0x00,}},
- {0x9F38,2,{0xFD,0x45,0x00,0x00,}},
- {0x9F39,2,{0xF7,0xFA,0x00,0x00,}},
- {0x9F3A,2,{0xFD,0x46,0x00,0x00,}},
- {0x9F3B,2,{0xB1,0xC7,0x00,0x00,}},
- {0x9F3C,2,{0xFD,0x47,0x00,0x00,}},
- {0x9F3D,2,{0xF7,0xFC,0x00,0x00,}},
- {0x9F3E,2,{0xF7,0xFD,0x00,0x00,}},
- {0x9F3F,2,{0xFD,0x48,0x00,0x00,}},
- {0x9F40,2,{0xFD,0x49,0x00,0x00,}},
- {0x9F41,2,{0xFD,0x4A,0x00,0x00,}},
- {0x9F42,2,{0xFD,0x4B,0x00,0x00,}},
- {0x9F43,2,{0xFD,0x4C,0x00,0x00,}},
- {0x9F44,2,{0xF7,0xFE,0x00,0x00,}},
- {0x9F45,2,{0xFD,0x4D,0x00,0x00,}},
- {0x9F46,2,{0xFD,0x4E,0x00,0x00,}},
- {0x9F47,2,{0xFD,0x4F,0x00,0x00,}},
- {0x9F48,2,{0xFD,0x50,0x00,0x00,}},
- {0x9F49,2,{0xFD,0x51,0x00,0x00,}},
- {0x9F4A,2,{0xFD,0x52,0x00,0x00,}},
- {0x9F4B,2,{0xFD,0x53,0x00,0x00,}},
- {0x9F4C,2,{0xFD,0x54,0x00,0x00,}},
- {0x9F4D,2,{0xFD,0x55,0x00,0x00,}},
- {0x9F4E,2,{0xFD,0x56,0x00,0x00,}},
- {0x9F4F,2,{0xFD,0x57,0x00,0x00,}},
- {0x9F50,2,{0xC6,0xEB,0x00,0x00,}},
- {0x9F51,2,{0xEC,0xB4,0x00,0x00,}},
- {0x9F52,2,{0xFD,0x58,0x00,0x00,}},
- {0x9F53,2,{0xFD,0x59,0x00,0x00,}},
- {0x9F54,2,{0xFD,0x5A,0x00,0x00,}},
- {0x9F55,2,{0xFD,0x5B,0x00,0x00,}},
- {0x9F56,2,{0xFD,0x5C,0x00,0x00,}},
- {0x9F57,2,{0xFD,0x5D,0x00,0x00,}},
- {0x9F58,2,{0xFD,0x5E,0x00,0x00,}},
- {0x9F59,2,{0xFD,0x5F,0x00,0x00,}},
- {0x9F5A,2,{0xFD,0x60,0x00,0x00,}},
- {0x9F5B,2,{0xFD,0x61,0x00,0x00,}},
- {0x9F5C,2,{0xFD,0x62,0x00,0x00,}},
- {0x9F5D,2,{0xFD,0x63,0x00,0x00,}},
- {0x9F5E,2,{0xFD,0x64,0x00,0x00,}},
- {0x9F5F,2,{0xFD,0x65,0x00,0x00,}},
- {0x9F60,2,{0xFD,0x66,0x00,0x00,}},
- {0x9F61,2,{0xFD,0x67,0x00,0x00,}},
- {0x9F62,2,{0xFD,0x68,0x00,0x00,}},
- {0x9F63,2,{0xFD,0x69,0x00,0x00,}},
- {0x9F64,2,{0xFD,0x6A,0x00,0x00,}},
- {0x9F65,2,{0xFD,0x6B,0x00,0x00,}},
- {0x9F66,2,{0xFD,0x6C,0x00,0x00,}},
- {0x9F67,2,{0xFD,0x6D,0x00,0x00,}},
- {0x9F68,2,{0xFD,0x6E,0x00,0x00,}},
- {0x9F69,2,{0xFD,0x6F,0x00,0x00,}},
- {0x9F6A,2,{0xFD,0x70,0x00,0x00,}},
- {0x9F6B,2,{0xFD,0x71,0x00,0x00,}},
- {0x9F6C,2,{0xFD,0x72,0x00,0x00,}},
- {0x9F6D,2,{0xFD,0x73,0x00,0x00,}},
- {0x9F6E,2,{0xFD,0x74,0x00,0x00,}},
- {0x9F6F,2,{0xFD,0x75,0x00,0x00,}},
- {0x9F70,2,{0xFD,0x76,0x00,0x00,}},
- {0x9F71,2,{0xFD,0x77,0x00,0x00,}},
- {0x9F72,2,{0xFD,0x78,0x00,0x00,}},
- {0x9F73,2,{0xFD,0x79,0x00,0x00,}},
- {0x9F74,2,{0xFD,0x7A,0x00,0x00,}},
- {0x9F75,2,{0xFD,0x7B,0x00,0x00,}},
- {0x9F76,2,{0xFD,0x7C,0x00,0x00,}},
- {0x9F77,2,{0xFD,0x7D,0x00,0x00,}},
- {0x9F78,2,{0xFD,0x7E,0x00,0x00,}},
- {0x9F79,2,{0xFD,0x80,0x00,0x00,}},
- {0x9F7A,2,{0xFD,0x81,0x00,0x00,}},
- {0x9F7B,2,{0xFD,0x82,0x00,0x00,}},
- {0x9F7C,2,{0xFD,0x83,0x00,0x00,}},
- {0x9F7D,2,{0xFD,0x84,0x00,0x00,}},
- {0x9F7E,2,{0xFD,0x85,0x00,0x00,}},
- {0x9F7F,2,{0xB3,0xDD,0x00,0x00,}},
- {0x9F80,2,{0xF6,0xB3,0x00,0x00,}},
- {0x9F81,2,{0xFD,0x86,0x00,0x00,}},
- {0x9F82,2,{0xFD,0x87,0x00,0x00,}},
- {0x9F83,2,{0xF6,0xB4,0x00,0x00,}},
- {0x9F84,2,{0xC1,0xE4,0x00,0x00,}},
- {0x9F85,2,{0xF6,0xB5,0x00,0x00,}},
- {0x9F86,2,{0xF6,0xB6,0x00,0x00,}},
- {0x9F87,2,{0xF6,0xB7,0x00,0x00,}},
- {0x9F88,2,{0xF6,0xB8,0x00,0x00,}},
- {0x9F89,2,{0xF6,0xB9,0x00,0x00,}},
- {0x9F8A,2,{0xF6,0xBA,0x00,0x00,}},
- {0x9F8B,2,{0xC8,0xA3,0x00,0x00,}},
- {0x9F8C,2,{0xF6,0xBB,0x00,0x00,}},
- {0x9F8D,2,{0xFD,0x88,0x00,0x00,}},
- {0x9F8E,2,{0xFD,0x89,0x00,0x00,}},
- {0x9F8F,2,{0xFD,0x8A,0x00,0x00,}},
- {0x9F90,2,{0xFD,0x8B,0x00,0x00,}},
- {0x9F91,2,{0xFD,0x8C,0x00,0x00,}},
- {0x9F92,2,{0xFD,0x8D,0x00,0x00,}},
- {0x9F93,2,{0xFD,0x8E,0x00,0x00,}},
- {0x9F94,2,{0xFD,0x8F,0x00,0x00,}},
- {0x9F95,2,{0xFD,0x90,0x00,0x00,}},
- {0x9F96,2,{0xFD,0x91,0x00,0x00,}},
- {0x9F97,2,{0xFD,0x92,0x00,0x00,}},
- {0x9F98,2,{0xFD,0x93,0x00,0x00,}},
- {0x9F99,2,{0xC1,0xFA,0x00,0x00,}},
- {0x9F9A,2,{0xB9,0xA8,0x00,0x00,}},
- {0x9F9B,2,{0xED,0xE8,0x00,0x00,}},
- {0x9F9C,2,{0xFD,0x94,0x00,0x00,}},
- {0x9F9D,2,{0xFD,0x95,0x00,0x00,}},
- {0x9F9E,2,{0xFD,0x96,0x00,0x00,}},
- {0x9F9F,2,{0xB9,0xEA,0x00,0x00,}},
- {0x9FA0,2,{0xD9,0xDF,0x00,0x00,}},
- {0x9FA1,2,{0xFD,0x97,0x00,0x00,}},
- {0x9FA2,2,{0xFD,0x98,0x00,0x00,}},
- {0x9FA3,2,{0xFD,0x99,0x00,0x00,}},
- {0x9FA4,2,{0xFD,0x9A,0x00,0x00,}},
- {0x9FA5,2,{0xFD,0x9B,0x00,0x00,}},
- {0xE000,2,{0xAA,0xA1,0x00,0x00,}},
- {0xE001,2,{0xAA,0xA2,0x00,0x00,}},
- {0xE002,2,{0xAA,0xA3,0x00,0x00,}},
- {0xE003,2,{0xAA,0xA4,0x00,0x00,}},
- {0xE004,2,{0xAA,0xA5,0x00,0x00,}},
- {0xE005,2,{0xAA,0xA6,0x00,0x00,}},
- {0xE006,2,{0xAA,0xA7,0x00,0x00,}},
- {0xE007,2,{0xAA,0xA8,0x00,0x00,}},
- {0xE008,2,{0xAA,0xA9,0x00,0x00,}},
- {0xE009,2,{0xAA,0xAA,0x00,0x00,}},
- {0xE00A,2,{0xAA,0xAB,0x00,0x00,}},
- {0xE00B,2,{0xAA,0xAC,0x00,0x00,}},
- {0xE00C,2,{0xAA,0xAD,0x00,0x00,}},
- {0xE00D,2,{0xAA,0xAE,0x00,0x00,}},
- {0xE00E,2,{0xAA,0xAF,0x00,0x00,}},
- {0xE00F,2,{0xAA,0xB0,0x00,0x00,}},
- {0xE010,2,{0xAA,0xB1,0x00,0x00,}},
- {0xE011,2,{0xAA,0xB2,0x00,0x00,}},
- {0xE012,2,{0xAA,0xB3,0x00,0x00,}},
- {0xE013,2,{0xAA,0xB4,0x00,0x00,}},
- {0xE014,2,{0xAA,0xB5,0x00,0x00,}},
- {0xE015,2,{0xAA,0xB6,0x00,0x00,}},
- {0xE016,2,{0xAA,0xB7,0x00,0x00,}},
- {0xE017,2,{0xAA,0xB8,0x00,0x00,}},
- {0xE018,2,{0xAA,0xB9,0x00,0x00,}},
- {0xE019,2,{0xAA,0xBA,0x00,0x00,}},
- {0xE01A,2,{0xAA,0xBB,0x00,0x00,}},
- {0xE01B,2,{0xAA,0xBC,0x00,0x00,}},
- {0xE01C,2,{0xAA,0xBD,0x00,0x00,}},
- {0xE01D,2,{0xAA,0xBE,0x00,0x00,}},
- {0xE01E,2,{0xAA,0xBF,0x00,0x00,}},
- {0xE01F,2,{0xAA,0xC0,0x00,0x00,}},
- {0xE020,2,{0xAA,0xC1,0x00,0x00,}},
- {0xE021,2,{0xAA,0xC2,0x00,0x00,}},
- {0xE022,2,{0xAA,0xC3,0x00,0x00,}},
- {0xE023,2,{0xAA,0xC4,0x00,0x00,}},
- {0xE024,2,{0xAA,0xC5,0x00,0x00,}},
- {0xE025,2,{0xAA,0xC6,0x00,0x00,}},
- {0xE026,2,{0xAA,0xC7,0x00,0x00,}},
- {0xE027,2,{0xAA,0xC8,0x00,0x00,}},
- {0xE028,2,{0xAA,0xC9,0x00,0x00,}},
- {0xE029,2,{0xAA,0xCA,0x00,0x00,}},
- {0xE02A,2,{0xAA,0xCB,0x00,0x00,}},
- {0xE02B,2,{0xAA,0xCC,0x00,0x00,}},
- {0xE02C,2,{0xAA,0xCD,0x00,0x00,}},
- {0xE02D,2,{0xAA,0xCE,0x00,0x00,}},
- {0xE02E,2,{0xAA,0xCF,0x00,0x00,}},
- {0xE02F,2,{0xAA,0xD0,0x00,0x00,}},
- {0xE030,2,{0xAA,0xD1,0x00,0x00,}},
- {0xE031,2,{0xAA,0xD2,0x00,0x00,}},
- {0xE032,2,{0xAA,0xD3,0x00,0x00,}},
- {0xE033,2,{0xAA,0xD4,0x00,0x00,}},
- {0xE034,2,{0xAA,0xD5,0x00,0x00,}},
- {0xE035,2,{0xAA,0xD6,0x00,0x00,}},
- {0xE036,2,{0xAA,0xD7,0x00,0x00,}},
- {0xE037,2,{0xAA,0xD8,0x00,0x00,}},
- {0xE038,2,{0xAA,0xD9,0x00,0x00,}},
- {0xE039,2,{0xAA,0xDA,0x00,0x00,}},
- {0xE03A,2,{0xAA,0xDB,0x00,0x00,}},
- {0xE03B,2,{0xAA,0xDC,0x00,0x00,}},
- {0xE03C,2,{0xAA,0xDD,0x00,0x00,}},
- {0xE03D,2,{0xAA,0xDE,0x00,0x00,}},
- {0xE03E,2,{0xAA,0xDF,0x00,0x00,}},
- {0xE03F,2,{0xAA,0xE0,0x00,0x00,}},
- {0xE040,2,{0xAA,0xE1,0x00,0x00,}},
- {0xE041,2,{0xAA,0xE2,0x00,0x00,}},
- {0xE042,2,{0xAA,0xE3,0x00,0x00,}},
- {0xE043,2,{0xAA,0xE4,0x00,0x00,}},
- {0xE044,2,{0xAA,0xE5,0x00,0x00,}},
- {0xE045,2,{0xAA,0xE6,0x00,0x00,}},
- {0xE046,2,{0xAA,0xE7,0x00,0x00,}},
- {0xE047,2,{0xAA,0xE8,0x00,0x00,}},
- {0xE048,2,{0xAA,0xE9,0x00,0x00,}},
- {0xE049,2,{0xAA,0xEA,0x00,0x00,}},
- {0xE04A,2,{0xAA,0xEB,0x00,0x00,}},
- {0xE04B,2,{0xAA,0xEC,0x00,0x00,}},
- {0xE04C,2,{0xAA,0xED,0x00,0x00,}},
- {0xE04D,2,{0xAA,0xEE,0x00,0x00,}},
- {0xE04E,2,{0xAA,0xEF,0x00,0x00,}},
- {0xE04F,2,{0xAA,0xF0,0x00,0x00,}},
- {0xE050,2,{0xAA,0xF1,0x00,0x00,}},
- {0xE051,2,{0xAA,0xF2,0x00,0x00,}},
- {0xE052,2,{0xAA,0xF3,0x00,0x00,}},
- {0xE053,2,{0xAA,0xF4,0x00,0x00,}},
- {0xE054,2,{0xAA,0xF5,0x00,0x00,}},
- {0xE055,2,{0xAA,0xF6,0x00,0x00,}},
- {0xE056,2,{0xAA,0xF7,0x00,0x00,}},
- {0xE057,2,{0xAA,0xF8,0x00,0x00,}},
- {0xE058,2,{0xAA,0xF9,0x00,0x00,}},
- {0xE059,2,{0xAA,0xFA,0x00,0x00,}},
- {0xE05A,2,{0xAA,0xFB,0x00,0x00,}},
- {0xE05B,2,{0xAA,0xFC,0x00,0x00,}},
- {0xE05C,2,{0xAA,0xFD,0x00,0x00,}},
- {0xE05D,2,{0xAA,0xFE,0x00,0x00,}},
- {0xE05E,2,{0xAB,0xA1,0x00,0x00,}},
- {0xE05F,2,{0xAB,0xA2,0x00,0x00,}},
- {0xE060,2,{0xAB,0xA3,0x00,0x00,}},
- {0xE061,2,{0xAB,0xA4,0x00,0x00,}},
- {0xE062,2,{0xAB,0xA5,0x00,0x00,}},
- {0xE063,2,{0xAB,0xA6,0x00,0x00,}},
- {0xE064,2,{0xAB,0xA7,0x00,0x00,}},
- {0xE065,2,{0xAB,0xA8,0x00,0x00,}},
- {0xE066,2,{0xAB,0xA9,0x00,0x00,}},
- {0xE067,2,{0xAB,0xAA,0x00,0x00,}},
- {0xE068,2,{0xAB,0xAB,0x00,0x00,}},
- {0xE069,2,{0xAB,0xAC,0x00,0x00,}},
- {0xE06A,2,{0xAB,0xAD,0x00,0x00,}},
- {0xE06B,2,{0xAB,0xAE,0x00,0x00,}},
- {0xE06C,2,{0xAB,0xAF,0x00,0x00,}},
- {0xE06D,2,{0xAB,0xB0,0x00,0x00,}},
- {0xE06E,2,{0xAB,0xB1,0x00,0x00,}},
- {0xE06F,2,{0xAB,0xB2,0x00,0x00,}},
- {0xE070,2,{0xAB,0xB3,0x00,0x00,}},
- {0xE071,2,{0xAB,0xB4,0x00,0x00,}},
- {0xE072,2,{0xAB,0xB5,0x00,0x00,}},
- {0xE073,2,{0xAB,0xB6,0x00,0x00,}},
- {0xE074,2,{0xAB,0xB7,0x00,0x00,}},
- {0xE075,2,{0xAB,0xB8,0x00,0x00,}},
- {0xE076,2,{0xAB,0xB9,0x00,0x00,}},
- {0xE077,2,{0xAB,0xBA,0x00,0x00,}},
- {0xE078,2,{0xAB,0xBB,0x00,0x00,}},
- {0xE079,2,{0xAB,0xBC,0x00,0x00,}},
- {0xE07A,2,{0xAB,0xBD,0x00,0x00,}},
- {0xE07B,2,{0xAB,0xBE,0x00,0x00,}},
- {0xE07C,2,{0xAB,0xBF,0x00,0x00,}},
- {0xE07D,2,{0xAB,0xC0,0x00,0x00,}},
- {0xE07E,2,{0xAB,0xC1,0x00,0x00,}},
- {0xE07F,2,{0xAB,0xC2,0x00,0x00,}},
- {0xE080,2,{0xAB,0xC3,0x00,0x00,}},
- {0xE081,2,{0xAB,0xC4,0x00,0x00,}},
- {0xE082,2,{0xAB,0xC5,0x00,0x00,}},
- {0xE083,2,{0xAB,0xC6,0x00,0x00,}},
- {0xE084,2,{0xAB,0xC7,0x00,0x00,}},
- {0xE085,2,{0xAB,0xC8,0x00,0x00,}},
- {0xE086,2,{0xAB,0xC9,0x00,0x00,}},
- {0xE087,2,{0xAB,0xCA,0x00,0x00,}},
- {0xE088,2,{0xAB,0xCB,0x00,0x00,}},
- {0xE089,2,{0xAB,0xCC,0x00,0x00,}},
- {0xE08A,2,{0xAB,0xCD,0x00,0x00,}},
- {0xE08B,2,{0xAB,0xCE,0x00,0x00,}},
- {0xE08C,2,{0xAB,0xCF,0x00,0x00,}},
- {0xE08D,2,{0xAB,0xD0,0x00,0x00,}},
- {0xE08E,2,{0xAB,0xD1,0x00,0x00,}},
- {0xE08F,2,{0xAB,0xD2,0x00,0x00,}},
- {0xE090,2,{0xAB,0xD3,0x00,0x00,}},
- {0xE091,2,{0xAB,0xD4,0x00,0x00,}},
- {0xE092,2,{0xAB,0xD5,0x00,0x00,}},
- {0xE093,2,{0xAB,0xD6,0x00,0x00,}},
- {0xE094,2,{0xAB,0xD7,0x00,0x00,}},
- {0xE095,2,{0xAB,0xD8,0x00,0x00,}},
- {0xE096,2,{0xAB,0xD9,0x00,0x00,}},
- {0xE097,2,{0xAB,0xDA,0x00,0x00,}},
- {0xE098,2,{0xAB,0xDB,0x00,0x00,}},
- {0xE099,2,{0xAB,0xDC,0x00,0x00,}},
- {0xE09A,2,{0xAB,0xDD,0x00,0x00,}},
- {0xE09B,2,{0xAB,0xDE,0x00,0x00,}},
- {0xE09C,2,{0xAB,0xDF,0x00,0x00,}},
- {0xE09D,2,{0xAB,0xE0,0x00,0x00,}},
- {0xE09E,2,{0xAB,0xE1,0x00,0x00,}},
- {0xE09F,2,{0xAB,0xE2,0x00,0x00,}},
- {0xE0A0,2,{0xAB,0xE3,0x00,0x00,}},
- {0xE0A1,2,{0xAB,0xE4,0x00,0x00,}},
- {0xE0A2,2,{0xAB,0xE5,0x00,0x00,}},
- {0xE0A3,2,{0xAB,0xE6,0x00,0x00,}},
- {0xE0A4,2,{0xAB,0xE7,0x00,0x00,}},
- {0xE0A5,2,{0xAB,0xE8,0x00,0x00,}},
- {0xE0A6,2,{0xAB,0xE9,0x00,0x00,}},
- {0xE0A7,2,{0xAB,0xEA,0x00,0x00,}},
- {0xE0A8,2,{0xAB,0xEB,0x00,0x00,}},
- {0xE0A9,2,{0xAB,0xEC,0x00,0x00,}},
- {0xE0AA,2,{0xAB,0xED,0x00,0x00,}},
- {0xE0AB,2,{0xAB,0xEE,0x00,0x00,}},
- {0xE0AC,2,{0xAB,0xEF,0x00,0x00,}},
- {0xE0AD,2,{0xAB,0xF0,0x00,0x00,}},
- {0xE0AE,2,{0xAB,0xF1,0x00,0x00,}},
- {0xE0AF,2,{0xAB,0xF2,0x00,0x00,}},
- {0xE0B0,2,{0xAB,0xF3,0x00,0x00,}},
- {0xE0B1,2,{0xAB,0xF4,0x00,0x00,}},
- {0xE0B2,2,{0xAB,0xF5,0x00,0x00,}},
- {0xE0B3,2,{0xAB,0xF6,0x00,0x00,}},
- {0xE0B4,2,{0xAB,0xF7,0x00,0x00,}},
- {0xE0B5,2,{0xAB,0xF8,0x00,0x00,}},
- {0xE0B6,2,{0xAB,0xF9,0x00,0x00,}},
- {0xE0B7,2,{0xAB,0xFA,0x00,0x00,}},
- {0xE0B8,2,{0xAB,0xFB,0x00,0x00,}},
- {0xE0B9,2,{0xAB,0xFC,0x00,0x00,}},
- {0xE0BA,2,{0xAB,0xFD,0x00,0x00,}},
- {0xE0BB,2,{0xAB,0xFE,0x00,0x00,}},
- {0xE0BC,2,{0xAC,0xA1,0x00,0x00,}},
- {0xE0BD,2,{0xAC,0xA2,0x00,0x00,}},
- {0xE0BE,2,{0xAC,0xA3,0x00,0x00,}},
- {0xE0BF,2,{0xAC,0xA4,0x00,0x00,}},
- {0xE0C0,2,{0xAC,0xA5,0x00,0x00,}},
- {0xE0C1,2,{0xAC,0xA6,0x00,0x00,}},
- {0xE0C2,2,{0xAC,0xA7,0x00,0x00,}},
- {0xE0C3,2,{0xAC,0xA8,0x00,0x00,}},
- {0xE0C4,2,{0xAC,0xA9,0x00,0x00,}},
- {0xE0C5,2,{0xAC,0xAA,0x00,0x00,}},
- {0xE0C6,2,{0xAC,0xAB,0x00,0x00,}},
- {0xE0C7,2,{0xAC,0xAC,0x00,0x00,}},
- {0xE0C8,2,{0xAC,0xAD,0x00,0x00,}},
- {0xE0C9,2,{0xAC,0xAE,0x00,0x00,}},
- {0xE0CA,2,{0xAC,0xAF,0x00,0x00,}},
- {0xE0CB,2,{0xAC,0xB0,0x00,0x00,}},
- {0xE0CC,2,{0xAC,0xB1,0x00,0x00,}},
- {0xE0CD,2,{0xAC,0xB2,0x00,0x00,}},
- {0xE0CE,2,{0xAC,0xB3,0x00,0x00,}},
- {0xE0CF,2,{0xAC,0xB4,0x00,0x00,}},
- {0xE0D0,2,{0xAC,0xB5,0x00,0x00,}},
- {0xE0D1,2,{0xAC,0xB6,0x00,0x00,}},
- {0xE0D2,2,{0xAC,0xB7,0x00,0x00,}},
- {0xE0D3,2,{0xAC,0xB8,0x00,0x00,}},
- {0xE0D4,2,{0xAC,0xB9,0x00,0x00,}},
- {0xE0D5,2,{0xAC,0xBA,0x00,0x00,}},
- {0xE0D6,2,{0xAC,0xBB,0x00,0x00,}},
- {0xE0D7,2,{0xAC,0xBC,0x00,0x00,}},
- {0xE0D8,2,{0xAC,0xBD,0x00,0x00,}},
- {0xE0D9,2,{0xAC,0xBE,0x00,0x00,}},
- {0xE0DA,2,{0xAC,0xBF,0x00,0x00,}},
- {0xE0DB,2,{0xAC,0xC0,0x00,0x00,}},
- {0xE0DC,2,{0xAC,0xC1,0x00,0x00,}},
- {0xE0DD,2,{0xAC,0xC2,0x00,0x00,}},
- {0xE0DE,2,{0xAC,0xC3,0x00,0x00,}},
- {0xE0DF,2,{0xAC,0xC4,0x00,0x00,}},
- {0xE0E0,2,{0xAC,0xC5,0x00,0x00,}},
- {0xE0E1,2,{0xAC,0xC6,0x00,0x00,}},
- {0xE0E2,2,{0xAC,0xC7,0x00,0x00,}},
- {0xE0E3,2,{0xAC,0xC8,0x00,0x00,}},
- {0xE0E4,2,{0xAC,0xC9,0x00,0x00,}},
- {0xE0E5,2,{0xAC,0xCA,0x00,0x00,}},
- {0xE0E6,2,{0xAC,0xCB,0x00,0x00,}},
- {0xE0E7,2,{0xAC,0xCC,0x00,0x00,}},
- {0xE0E8,2,{0xAC,0xCD,0x00,0x00,}},
- {0xE0E9,2,{0xAC,0xCE,0x00,0x00,}},
- {0xE0EA,2,{0xAC,0xCF,0x00,0x00,}},
- {0xE0EB,2,{0xAC,0xD0,0x00,0x00,}},
- {0xE0EC,2,{0xAC,0xD1,0x00,0x00,}},
- {0xE0ED,2,{0xAC,0xD2,0x00,0x00,}},
- {0xE0EE,2,{0xAC,0xD3,0x00,0x00,}},
- {0xE0EF,2,{0xAC,0xD4,0x00,0x00,}},
- {0xE0F0,2,{0xAC,0xD5,0x00,0x00,}},
- {0xE0F1,2,{0xAC,0xD6,0x00,0x00,}},
- {0xE0F2,2,{0xAC,0xD7,0x00,0x00,}},
- {0xE0F3,2,{0xAC,0xD8,0x00,0x00,}},
- {0xE0F4,2,{0xAC,0xD9,0x00,0x00,}},
- {0xE0F5,2,{0xAC,0xDA,0x00,0x00,}},
- {0xE0F6,2,{0xAC,0xDB,0x00,0x00,}},
- {0xE0F7,2,{0xAC,0xDC,0x00,0x00,}},
- {0xE0F8,2,{0xAC,0xDD,0x00,0x00,}},
- {0xE0F9,2,{0xAC,0xDE,0x00,0x00,}},
- {0xE0FA,2,{0xAC,0xDF,0x00,0x00,}},
- {0xE0FB,2,{0xAC,0xE0,0x00,0x00,}},
- {0xE0FC,2,{0xAC,0xE1,0x00,0x00,}},
- {0xE0FD,2,{0xAC,0xE2,0x00,0x00,}},
- {0xE0FE,2,{0xAC,0xE3,0x00,0x00,}},
- {0xE0FF,2,{0xAC,0xE4,0x00,0x00,}},
- {0xE100,2,{0xAC,0xE5,0x00,0x00,}},
- {0xE101,2,{0xAC,0xE6,0x00,0x00,}},
- {0xE102,2,{0xAC,0xE7,0x00,0x00,}},
- {0xE103,2,{0xAC,0xE8,0x00,0x00,}},
- {0xE104,2,{0xAC,0xE9,0x00,0x00,}},
- {0xE105,2,{0xAC,0xEA,0x00,0x00,}},
- {0xE106,2,{0xAC,0xEB,0x00,0x00,}},
- {0xE107,2,{0xAC,0xEC,0x00,0x00,}},
- {0xE108,2,{0xAC,0xED,0x00,0x00,}},
- {0xE109,2,{0xAC,0xEE,0x00,0x00,}},
- {0xE10A,2,{0xAC,0xEF,0x00,0x00,}},
- {0xE10B,2,{0xAC,0xF0,0x00,0x00,}},
- {0xE10C,2,{0xAC,0xF1,0x00,0x00,}},
- {0xE10D,2,{0xAC,0xF2,0x00,0x00,}},
- {0xE10E,2,{0xAC,0xF3,0x00,0x00,}},
- {0xE10F,2,{0xAC,0xF4,0x00,0x00,}},
- {0xE110,2,{0xAC,0xF5,0x00,0x00,}},
- {0xE111,2,{0xAC,0xF6,0x00,0x00,}},
- {0xE112,2,{0xAC,0xF7,0x00,0x00,}},
- {0xE113,2,{0xAC,0xF8,0x00,0x00,}},
- {0xE114,2,{0xAC,0xF9,0x00,0x00,}},
- {0xE115,2,{0xAC,0xFA,0x00,0x00,}},
- {0xE116,2,{0xAC,0xFB,0x00,0x00,}},
- {0xE117,2,{0xAC,0xFC,0x00,0x00,}},
- {0xE118,2,{0xAC,0xFD,0x00,0x00,}},
- {0xE119,2,{0xAC,0xFE,0x00,0x00,}},
- {0xE11A,2,{0xAD,0xA1,0x00,0x00,}},
- {0xE11B,2,{0xAD,0xA2,0x00,0x00,}},
- {0xE11C,2,{0xAD,0xA3,0x00,0x00,}},
- {0xE11D,2,{0xAD,0xA4,0x00,0x00,}},
- {0xE11E,2,{0xAD,0xA5,0x00,0x00,}},
- {0xE11F,2,{0xAD,0xA6,0x00,0x00,}},
- {0xE120,2,{0xAD,0xA7,0x00,0x00,}},
- {0xE121,2,{0xAD,0xA8,0x00,0x00,}},
- {0xE122,2,{0xAD,0xA9,0x00,0x00,}},
- {0xE123,2,{0xAD,0xAA,0x00,0x00,}},
- {0xE124,2,{0xAD,0xAB,0x00,0x00,}},
- {0xE125,2,{0xAD,0xAC,0x00,0x00,}},
- {0xE126,2,{0xAD,0xAD,0x00,0x00,}},
- {0xE127,2,{0xAD,0xAE,0x00,0x00,}},
- {0xE128,2,{0xAD,0xAF,0x00,0x00,}},
- {0xE129,2,{0xAD,0xB0,0x00,0x00,}},
- {0xE12A,2,{0xAD,0xB1,0x00,0x00,}},
- {0xE12B,2,{0xAD,0xB2,0x00,0x00,}},
- {0xE12C,2,{0xAD,0xB3,0x00,0x00,}},
- {0xE12D,2,{0xAD,0xB4,0x00,0x00,}},
- {0xE12E,2,{0xAD,0xB5,0x00,0x00,}},
- {0xE12F,2,{0xAD,0xB6,0x00,0x00,}},
- {0xE130,2,{0xAD,0xB7,0x00,0x00,}},
- {0xE131,2,{0xAD,0xB8,0x00,0x00,}},
- {0xE132,2,{0xAD,0xB9,0x00,0x00,}},
- {0xE133,2,{0xAD,0xBA,0x00,0x00,}},
- {0xE134,2,{0xAD,0xBB,0x00,0x00,}},
- {0xE135,2,{0xAD,0xBC,0x00,0x00,}},
- {0xE136,2,{0xAD,0xBD,0x00,0x00,}},
- {0xE137,2,{0xAD,0xBE,0x00,0x00,}},
- {0xE138,2,{0xAD,0xBF,0x00,0x00,}},
- {0xE139,2,{0xAD,0xC0,0x00,0x00,}},
- {0xE13A,2,{0xAD,0xC1,0x00,0x00,}},
- {0xE13B,2,{0xAD,0xC2,0x00,0x00,}},
- {0xE13C,2,{0xAD,0xC3,0x00,0x00,}},
- {0xE13D,2,{0xAD,0xC4,0x00,0x00,}},
- {0xE13E,2,{0xAD,0xC5,0x00,0x00,}},
- {0xE13F,2,{0xAD,0xC6,0x00,0x00,}},
- {0xE140,2,{0xAD,0xC7,0x00,0x00,}},
- {0xE141,2,{0xAD,0xC8,0x00,0x00,}},
- {0xE142,2,{0xAD,0xC9,0x00,0x00,}},
- {0xE143,2,{0xAD,0xCA,0x00,0x00,}},
- {0xE144,2,{0xAD,0xCB,0x00,0x00,}},
- {0xE145,2,{0xAD,0xCC,0x00,0x00,}},
- {0xE146,2,{0xAD,0xCD,0x00,0x00,}},
- {0xE147,2,{0xAD,0xCE,0x00,0x00,}},
- {0xE148,2,{0xAD,0xCF,0x00,0x00,}},
- {0xE149,2,{0xAD,0xD0,0x00,0x00,}},
- {0xE14A,2,{0xAD,0xD1,0x00,0x00,}},
- {0xE14B,2,{0xAD,0xD2,0x00,0x00,}},
- {0xE14C,2,{0xAD,0xD3,0x00,0x00,}},
- {0xE14D,2,{0xAD,0xD4,0x00,0x00,}},
- {0xE14E,2,{0xAD,0xD5,0x00,0x00,}},
- {0xE14F,2,{0xAD,0xD6,0x00,0x00,}},
- {0xE150,2,{0xAD,0xD7,0x00,0x00,}},
- {0xE151,2,{0xAD,0xD8,0x00,0x00,}},
- {0xE152,2,{0xAD,0xD9,0x00,0x00,}},
- {0xE153,2,{0xAD,0xDA,0x00,0x00,}},
- {0xE154,2,{0xAD,0xDB,0x00,0x00,}},
- {0xE155,2,{0xAD,0xDC,0x00,0x00,}},
- {0xE156,2,{0xAD,0xDD,0x00,0x00,}},
- {0xE157,2,{0xAD,0xDE,0x00,0x00,}},
- {0xE158,2,{0xAD,0xDF,0x00,0x00,}},
- {0xE159,2,{0xAD,0xE0,0x00,0x00,}},
- {0xE15A,2,{0xAD,0xE1,0x00,0x00,}},
- {0xE15B,2,{0xAD,0xE2,0x00,0x00,}},
- {0xE15C,2,{0xAD,0xE3,0x00,0x00,}},
- {0xE15D,2,{0xAD,0xE4,0x00,0x00,}},
- {0xE15E,2,{0xAD,0xE5,0x00,0x00,}},
- {0xE15F,2,{0xAD,0xE6,0x00,0x00,}},
- {0xE160,2,{0xAD,0xE7,0x00,0x00,}},
- {0xE161,2,{0xAD,0xE8,0x00,0x00,}},
- {0xE162,2,{0xAD,0xE9,0x00,0x00,}},
- {0xE163,2,{0xAD,0xEA,0x00,0x00,}},
- {0xE164,2,{0xAD,0xEB,0x00,0x00,}},
- {0xE165,2,{0xAD,0xEC,0x00,0x00,}},
- {0xE166,2,{0xAD,0xED,0x00,0x00,}},
- {0xE167,2,{0xAD,0xEE,0x00,0x00,}},
- {0xE168,2,{0xAD,0xEF,0x00,0x00,}},
- {0xE169,2,{0xAD,0xF0,0x00,0x00,}},
- {0xE16A,2,{0xAD,0xF1,0x00,0x00,}},
- {0xE16B,2,{0xAD,0xF2,0x00,0x00,}},
- {0xE16C,2,{0xAD,0xF3,0x00,0x00,}},
- {0xE16D,2,{0xAD,0xF4,0x00,0x00,}},
- {0xE16E,2,{0xAD,0xF5,0x00,0x00,}},
- {0xE16F,2,{0xAD,0xF6,0x00,0x00,}},
- {0xE170,2,{0xAD,0xF7,0x00,0x00,}},
- {0xE171,2,{0xAD,0xF8,0x00,0x00,}},
- {0xE172,2,{0xAD,0xF9,0x00,0x00,}},
- {0xE173,2,{0xAD,0xFA,0x00,0x00,}},
- {0xE174,2,{0xAD,0xFB,0x00,0x00,}},
- {0xE175,2,{0xAD,0xFC,0x00,0x00,}},
- {0xE176,2,{0xAD,0xFD,0x00,0x00,}},
- {0xE177,2,{0xAD,0xFE,0x00,0x00,}},
- {0xE178,2,{0xAE,0xA1,0x00,0x00,}},
- {0xE179,2,{0xAE,0xA2,0x00,0x00,}},
- {0xE17A,2,{0xAE,0xA3,0x00,0x00,}},
- {0xE17B,2,{0xAE,0xA4,0x00,0x00,}},
- {0xE17C,2,{0xAE,0xA5,0x00,0x00,}},
- {0xE17D,2,{0xAE,0xA6,0x00,0x00,}},
- {0xE17E,2,{0xAE,0xA7,0x00,0x00,}},
- {0xE17F,2,{0xAE,0xA8,0x00,0x00,}},
- {0xE180,2,{0xAE,0xA9,0x00,0x00,}},
- {0xE181,2,{0xAE,0xAA,0x00,0x00,}},
- {0xE182,2,{0xAE,0xAB,0x00,0x00,}},
- {0xE183,2,{0xAE,0xAC,0x00,0x00,}},
- {0xE184,2,{0xAE,0xAD,0x00,0x00,}},
- {0xE185,2,{0xAE,0xAE,0x00,0x00,}},
- {0xE186,2,{0xAE,0xAF,0x00,0x00,}},
- {0xE187,2,{0xAE,0xB0,0x00,0x00,}},
- {0xE188,2,{0xAE,0xB1,0x00,0x00,}},
- {0xE189,2,{0xAE,0xB2,0x00,0x00,}},
- {0xE18A,2,{0xAE,0xB3,0x00,0x00,}},
- {0xE18B,2,{0xAE,0xB4,0x00,0x00,}},
- {0xE18C,2,{0xAE,0xB5,0x00,0x00,}},
- {0xE18D,2,{0xAE,0xB6,0x00,0x00,}},
- {0xE18E,2,{0xAE,0xB7,0x00,0x00,}},
- {0xE18F,2,{0xAE,0xB8,0x00,0x00,}},
- {0xE190,2,{0xAE,0xB9,0x00,0x00,}},
- {0xE191,2,{0xAE,0xBA,0x00,0x00,}},
- {0xE192,2,{0xAE,0xBB,0x00,0x00,}},
- {0xE193,2,{0xAE,0xBC,0x00,0x00,}},
- {0xE194,2,{0xAE,0xBD,0x00,0x00,}},
- {0xE195,2,{0xAE,0xBE,0x00,0x00,}},
- {0xE196,2,{0xAE,0xBF,0x00,0x00,}},
- {0xE197,2,{0xAE,0xC0,0x00,0x00,}},
- {0xE198,2,{0xAE,0xC1,0x00,0x00,}},
- {0xE199,2,{0xAE,0xC2,0x00,0x00,}},
- {0xE19A,2,{0xAE,0xC3,0x00,0x00,}},
- {0xE19B,2,{0xAE,0xC4,0x00,0x00,}},
- {0xE19C,2,{0xAE,0xC5,0x00,0x00,}},
- {0xE19D,2,{0xAE,0xC6,0x00,0x00,}},
- {0xE19E,2,{0xAE,0xC7,0x00,0x00,}},
- {0xE19F,2,{0xAE,0xC8,0x00,0x00,}},
- {0xE1A0,2,{0xAE,0xC9,0x00,0x00,}},
- {0xE1A1,2,{0xAE,0xCA,0x00,0x00,}},
- {0xE1A2,2,{0xAE,0xCB,0x00,0x00,}},
- {0xE1A3,2,{0xAE,0xCC,0x00,0x00,}},
- {0xE1A4,2,{0xAE,0xCD,0x00,0x00,}},
- {0xE1A5,2,{0xAE,0xCE,0x00,0x00,}},
- {0xE1A6,2,{0xAE,0xCF,0x00,0x00,}},
- {0xE1A7,2,{0xAE,0xD0,0x00,0x00,}},
- {0xE1A8,2,{0xAE,0xD1,0x00,0x00,}},
- {0xE1A9,2,{0xAE,0xD2,0x00,0x00,}},
- {0xE1AA,2,{0xAE,0xD3,0x00,0x00,}},
- {0xE1AB,2,{0xAE,0xD4,0x00,0x00,}},
- {0xE1AC,2,{0xAE,0xD5,0x00,0x00,}},
- {0xE1AD,2,{0xAE,0xD6,0x00,0x00,}},
- {0xE1AE,2,{0xAE,0xD7,0x00,0x00,}},
- {0xE1AF,2,{0xAE,0xD8,0x00,0x00,}},
- {0xE1B0,2,{0xAE,0xD9,0x00,0x00,}},
- {0xE1B1,2,{0xAE,0xDA,0x00,0x00,}},
- {0xE1B2,2,{0xAE,0xDB,0x00,0x00,}},
- {0xE1B3,2,{0xAE,0xDC,0x00,0x00,}},
- {0xE1B4,2,{0xAE,0xDD,0x00,0x00,}},
- {0xE1B5,2,{0xAE,0xDE,0x00,0x00,}},
- {0xE1B6,2,{0xAE,0xDF,0x00,0x00,}},
- {0xE1B7,2,{0xAE,0xE0,0x00,0x00,}},
- {0xE1B8,2,{0xAE,0xE1,0x00,0x00,}},
- {0xE1B9,2,{0xAE,0xE2,0x00,0x00,}},
- {0xE1BA,2,{0xAE,0xE3,0x00,0x00,}},
- {0xE1BB,2,{0xAE,0xE4,0x00,0x00,}},
- {0xE1BC,2,{0xAE,0xE5,0x00,0x00,}},
- {0xE1BD,2,{0xAE,0xE6,0x00,0x00,}},
- {0xE1BE,2,{0xAE,0xE7,0x00,0x00,}},
- {0xE1BF,2,{0xAE,0xE8,0x00,0x00,}},
- {0xE1C0,2,{0xAE,0xE9,0x00,0x00,}},
- {0xE1C1,2,{0xAE,0xEA,0x00,0x00,}},
- {0xE1C2,2,{0xAE,0xEB,0x00,0x00,}},
- {0xE1C3,2,{0xAE,0xEC,0x00,0x00,}},
- {0xE1C4,2,{0xAE,0xED,0x00,0x00,}},
- {0xE1C5,2,{0xAE,0xEE,0x00,0x00,}},
- {0xE1C6,2,{0xAE,0xEF,0x00,0x00,}},
- {0xE1C7,2,{0xAE,0xF0,0x00,0x00,}},
- {0xE1C8,2,{0xAE,0xF1,0x00,0x00,}},
- {0xE1C9,2,{0xAE,0xF2,0x00,0x00,}},
- {0xE1CA,2,{0xAE,0xF3,0x00,0x00,}},
- {0xE1CB,2,{0xAE,0xF4,0x00,0x00,}},
- {0xE1CC,2,{0xAE,0xF5,0x00,0x00,}},
- {0xE1CD,2,{0xAE,0xF6,0x00,0x00,}},
- {0xE1CE,2,{0xAE,0xF7,0x00,0x00,}},
- {0xE1CF,2,{0xAE,0xF8,0x00,0x00,}},
- {0xE1D0,2,{0xAE,0xF9,0x00,0x00,}},
- {0xE1D1,2,{0xAE,0xFA,0x00,0x00,}},
- {0xE1D2,2,{0xAE,0xFB,0x00,0x00,}},
- {0xE1D3,2,{0xAE,0xFC,0x00,0x00,}},
- {0xE1D4,2,{0xAE,0xFD,0x00,0x00,}},
- {0xE1D5,2,{0xAE,0xFE,0x00,0x00,}},
- {0xE1D6,2,{0xAF,0xA1,0x00,0x00,}},
- {0xE1D7,2,{0xAF,0xA2,0x00,0x00,}},
- {0xE1D8,2,{0xAF,0xA3,0x00,0x00,}},
- {0xE1D9,2,{0xAF,0xA4,0x00,0x00,}},
- {0xE1DA,2,{0xAF,0xA5,0x00,0x00,}},
- {0xE1DB,2,{0xAF,0xA6,0x00,0x00,}},
- {0xE1DC,2,{0xAF,0xA7,0x00,0x00,}},
- {0xE1DD,2,{0xAF,0xA8,0x00,0x00,}},
- {0xE1DE,2,{0xAF,0xA9,0x00,0x00,}},
- {0xE1DF,2,{0xAF,0xAA,0x00,0x00,}},
- {0xE1E0,2,{0xAF,0xAB,0x00,0x00,}},
- {0xE1E1,2,{0xAF,0xAC,0x00,0x00,}},
- {0xE1E2,2,{0xAF,0xAD,0x00,0x00,}},
- {0xE1E3,2,{0xAF,0xAE,0x00,0x00,}},
- {0xE1E4,2,{0xAF,0xAF,0x00,0x00,}},
- {0xE1E5,2,{0xAF,0xB0,0x00,0x00,}},
- {0xE1E6,2,{0xAF,0xB1,0x00,0x00,}},
- {0xE1E7,2,{0xAF,0xB2,0x00,0x00,}},
- {0xE1E8,2,{0xAF,0xB3,0x00,0x00,}},
- {0xE1E9,2,{0xAF,0xB4,0x00,0x00,}},
- {0xE1EA,2,{0xAF,0xB5,0x00,0x00,}},
- {0xE1EB,2,{0xAF,0xB6,0x00,0x00,}},
- {0xE1EC,2,{0xAF,0xB7,0x00,0x00,}},
- {0xE1ED,2,{0xAF,0xB8,0x00,0x00,}},
- {0xE1EE,2,{0xAF,0xB9,0x00,0x00,}},
- {0xE1EF,2,{0xAF,0xBA,0x00,0x00,}},
- {0xE1F0,2,{0xAF,0xBB,0x00,0x00,}},
- {0xE1F1,2,{0xAF,0xBC,0x00,0x00,}},
- {0xE1F2,2,{0xAF,0xBD,0x00,0x00,}},
- {0xE1F3,2,{0xAF,0xBE,0x00,0x00,}},
- {0xE1F4,2,{0xAF,0xBF,0x00,0x00,}},
- {0xE1F5,2,{0xAF,0xC0,0x00,0x00,}},
- {0xE1F6,2,{0xAF,0xC1,0x00,0x00,}},
- {0xE1F7,2,{0xAF,0xC2,0x00,0x00,}},
- {0xE1F8,2,{0xAF,0xC3,0x00,0x00,}},
- {0xE1F9,2,{0xAF,0xC4,0x00,0x00,}},
- {0xE1FA,2,{0xAF,0xC5,0x00,0x00,}},
- {0xE1FB,2,{0xAF,0xC6,0x00,0x00,}},
- {0xE1FC,2,{0xAF,0xC7,0x00,0x00,}},
- {0xE1FD,2,{0xAF,0xC8,0x00,0x00,}},
- {0xE1FE,2,{0xAF,0xC9,0x00,0x00,}},
- {0xE1FF,2,{0xAF,0xCA,0x00,0x00,}},
- {0xE200,2,{0xAF,0xCB,0x00,0x00,}},
- {0xE201,2,{0xAF,0xCC,0x00,0x00,}},
- {0xE202,2,{0xAF,0xCD,0x00,0x00,}},
- {0xE203,2,{0xAF,0xCE,0x00,0x00,}},
- {0xE204,2,{0xAF,0xCF,0x00,0x00,}},
- {0xE205,2,{0xAF,0xD0,0x00,0x00,}},
- {0xE206,2,{0xAF,0xD1,0x00,0x00,}},
- {0xE207,2,{0xAF,0xD2,0x00,0x00,}},
- {0xE208,2,{0xAF,0xD3,0x00,0x00,}},
- {0xE209,2,{0xAF,0xD4,0x00,0x00,}},
- {0xE20A,2,{0xAF,0xD5,0x00,0x00,}},
- {0xE20B,2,{0xAF,0xD6,0x00,0x00,}},
- {0xE20C,2,{0xAF,0xD7,0x00,0x00,}},
- {0xE20D,2,{0xAF,0xD8,0x00,0x00,}},
- {0xE20E,2,{0xAF,0xD9,0x00,0x00,}},
- {0xE20F,2,{0xAF,0xDA,0x00,0x00,}},
- {0xE210,2,{0xAF,0xDB,0x00,0x00,}},
- {0xE211,2,{0xAF,0xDC,0x00,0x00,}},
- {0xE212,2,{0xAF,0xDD,0x00,0x00,}},
- {0xE213,2,{0xAF,0xDE,0x00,0x00,}},
- {0xE214,2,{0xAF,0xDF,0x00,0x00,}},
- {0xE215,2,{0xAF,0xE0,0x00,0x00,}},
- {0xE216,2,{0xAF,0xE1,0x00,0x00,}},
- {0xE217,2,{0xAF,0xE2,0x00,0x00,}},
- {0xE218,2,{0xAF,0xE3,0x00,0x00,}},
- {0xE219,2,{0xAF,0xE4,0x00,0x00,}},
- {0xE21A,2,{0xAF,0xE5,0x00,0x00,}},
- {0xE21B,2,{0xAF,0xE6,0x00,0x00,}},
- {0xE21C,2,{0xAF,0xE7,0x00,0x00,}},
- {0xE21D,2,{0xAF,0xE8,0x00,0x00,}},
- {0xE21E,2,{0xAF,0xE9,0x00,0x00,}},
- {0xE21F,2,{0xAF,0xEA,0x00,0x00,}},
- {0xE220,2,{0xAF,0xEB,0x00,0x00,}},
- {0xE221,2,{0xAF,0xEC,0x00,0x00,}},
- {0xE222,2,{0xAF,0xED,0x00,0x00,}},
- {0xE223,2,{0xAF,0xEE,0x00,0x00,}},
- {0xE224,2,{0xAF,0xEF,0x00,0x00,}},
- {0xE225,2,{0xAF,0xF0,0x00,0x00,}},
- {0xE226,2,{0xAF,0xF1,0x00,0x00,}},
- {0xE227,2,{0xAF,0xF2,0x00,0x00,}},
- {0xE228,2,{0xAF,0xF3,0x00,0x00,}},
- {0xE229,2,{0xAF,0xF4,0x00,0x00,}},
- {0xE22A,2,{0xAF,0xF5,0x00,0x00,}},
- {0xE22B,2,{0xAF,0xF6,0x00,0x00,}},
- {0xE22C,2,{0xAF,0xF7,0x00,0x00,}},
- {0xE22D,2,{0xAF,0xF8,0x00,0x00,}},
- {0xE22E,2,{0xAF,0xF9,0x00,0x00,}},
- {0xE22F,2,{0xAF,0xFA,0x00,0x00,}},
- {0xE230,2,{0xAF,0xFB,0x00,0x00,}},
- {0xE231,2,{0xAF,0xFC,0x00,0x00,}},
- {0xE232,2,{0xAF,0xFD,0x00,0x00,}},
- {0xE233,2,{0xAF,0xFE,0x00,0x00,}},
- {0xE234,2,{0xF8,0xA1,0x00,0x00,}},
- {0xE235,2,{0xF8,0xA2,0x00,0x00,}},
- {0xE236,2,{0xF8,0xA3,0x00,0x00,}},
- {0xE237,2,{0xF8,0xA4,0x00,0x00,}},
- {0xE238,2,{0xF8,0xA5,0x00,0x00,}},
- {0xE239,2,{0xF8,0xA6,0x00,0x00,}},
- {0xE23A,2,{0xF8,0xA7,0x00,0x00,}},
- {0xE23B,2,{0xF8,0xA8,0x00,0x00,}},
- {0xE23C,2,{0xF8,0xA9,0x00,0x00,}},
- {0xE23D,2,{0xF8,0xAA,0x00,0x00,}},
- {0xE23E,2,{0xF8,0xAB,0x00,0x00,}},
- {0xE23F,2,{0xF8,0xAC,0x00,0x00,}},
- {0xE240,2,{0xF8,0xAD,0x00,0x00,}},
- {0xE241,2,{0xF8,0xAE,0x00,0x00,}},
- {0xE242,2,{0xF8,0xAF,0x00,0x00,}},
- {0xE243,2,{0xF8,0xB0,0x00,0x00,}},
- {0xE244,2,{0xF8,0xB1,0x00,0x00,}},
- {0xE245,2,{0xF8,0xB2,0x00,0x00,}},
- {0xE246,2,{0xF8,0xB3,0x00,0x00,}},
- {0xE247,2,{0xF8,0xB4,0x00,0x00,}},
- {0xE248,2,{0xF8,0xB5,0x00,0x00,}},
- {0xE249,2,{0xF8,0xB6,0x00,0x00,}},
- {0xE24A,2,{0xF8,0xB7,0x00,0x00,}},
- {0xE24B,2,{0xF8,0xB8,0x00,0x00,}},
- {0xE24C,2,{0xF8,0xB9,0x00,0x00,}},
- {0xE24D,2,{0xF8,0xBA,0x00,0x00,}},
- {0xE24E,2,{0xF8,0xBB,0x00,0x00,}},
- {0xE24F,2,{0xF8,0xBC,0x00,0x00,}},
- {0xE250,2,{0xF8,0xBD,0x00,0x00,}},
- {0xE251,2,{0xF8,0xBE,0x00,0x00,}},
- {0xE252,2,{0xF8,0xBF,0x00,0x00,}},
- {0xE253,2,{0xF8,0xC0,0x00,0x00,}},
- {0xE254,2,{0xF8,0xC1,0x00,0x00,}},
- {0xE255,2,{0xF8,0xC2,0x00,0x00,}},
- {0xE256,2,{0xF8,0xC3,0x00,0x00,}},
- {0xE257,2,{0xF8,0xC4,0x00,0x00,}},
- {0xE258,2,{0xF8,0xC5,0x00,0x00,}},
- {0xE259,2,{0xF8,0xC6,0x00,0x00,}},
- {0xE25A,2,{0xF8,0xC7,0x00,0x00,}},
- {0xE25B,2,{0xF8,0xC8,0x00,0x00,}},
- {0xE25C,2,{0xF8,0xC9,0x00,0x00,}},
- {0xE25D,2,{0xF8,0xCA,0x00,0x00,}},
- {0xE25E,2,{0xF8,0xCB,0x00,0x00,}},
- {0xE25F,2,{0xF8,0xCC,0x00,0x00,}},
- {0xE260,2,{0xF8,0xCD,0x00,0x00,}},
- {0xE261,2,{0xF8,0xCE,0x00,0x00,}},
- {0xE262,2,{0xF8,0xCF,0x00,0x00,}},
- {0xE263,2,{0xF8,0xD0,0x00,0x00,}},
- {0xE264,2,{0xF8,0xD1,0x00,0x00,}},
- {0xE265,2,{0xF8,0xD2,0x00,0x00,}},
- {0xE266,2,{0xF8,0xD3,0x00,0x00,}},
- {0xE267,2,{0xF8,0xD4,0x00,0x00,}},
- {0xE268,2,{0xF8,0xD5,0x00,0x00,}},
- {0xE269,2,{0xF8,0xD6,0x00,0x00,}},
- {0xE26A,2,{0xF8,0xD7,0x00,0x00,}},
- {0xE26B,2,{0xF8,0xD8,0x00,0x00,}},
- {0xE26C,2,{0xF8,0xD9,0x00,0x00,}},
- {0xE26D,2,{0xF8,0xDA,0x00,0x00,}},
- {0xE26E,2,{0xF8,0xDB,0x00,0x00,}},
- {0xE26F,2,{0xF8,0xDC,0x00,0x00,}},
- {0xE270,2,{0xF8,0xDD,0x00,0x00,}},
- {0xE271,2,{0xF8,0xDE,0x00,0x00,}},
- {0xE272,2,{0xF8,0xDF,0x00,0x00,}},
- {0xE273,2,{0xF8,0xE0,0x00,0x00,}},
- {0xE274,2,{0xF8,0xE1,0x00,0x00,}},
- {0xE275,2,{0xF8,0xE2,0x00,0x00,}},
- {0xE276,2,{0xF8,0xE3,0x00,0x00,}},
- {0xE277,2,{0xF8,0xE4,0x00,0x00,}},
- {0xE278,2,{0xF8,0xE5,0x00,0x00,}},
- {0xE279,2,{0xF8,0xE6,0x00,0x00,}},
- {0xE27A,2,{0xF8,0xE7,0x00,0x00,}},
- {0xE27B,2,{0xF8,0xE8,0x00,0x00,}},
- {0xE27C,2,{0xF8,0xE9,0x00,0x00,}},
- {0xE27D,2,{0xF8,0xEA,0x00,0x00,}},
- {0xE27E,2,{0xF8,0xEB,0x00,0x00,}},
- {0xE27F,2,{0xF8,0xEC,0x00,0x00,}},
- {0xE280,2,{0xF8,0xED,0x00,0x00,}},
- {0xE281,2,{0xF8,0xEE,0x00,0x00,}},
- {0xE282,2,{0xF8,0xEF,0x00,0x00,}},
- {0xE283,2,{0xF8,0xF0,0x00,0x00,}},
- {0xE284,2,{0xF8,0xF1,0x00,0x00,}},
- {0xE285,2,{0xF8,0xF2,0x00,0x00,}},
- {0xE286,2,{0xF8,0xF3,0x00,0x00,}},
- {0xE287,2,{0xF8,0xF4,0x00,0x00,}},
- {0xE288,2,{0xF8,0xF5,0x00,0x00,}},
- {0xE289,2,{0xF8,0xF6,0x00,0x00,}},
- {0xE28A,2,{0xF8,0xF7,0x00,0x00,}},
- {0xE28B,2,{0xF8,0xF8,0x00,0x00,}},
- {0xE28C,2,{0xF8,0xF9,0x00,0x00,}},
- {0xE28D,2,{0xF8,0xFA,0x00,0x00,}},
- {0xE28E,2,{0xF8,0xFB,0x00,0x00,}},
- {0xE28F,2,{0xF8,0xFC,0x00,0x00,}},
- {0xE290,2,{0xF8,0xFD,0x00,0x00,}},
- {0xE291,2,{0xF8,0xFE,0x00,0x00,}},
- {0xE292,2,{0xF9,0xA1,0x00,0x00,}},
- {0xE293,2,{0xF9,0xA2,0x00,0x00,}},
- {0xE294,2,{0xF9,0xA3,0x00,0x00,}},
- {0xE295,2,{0xF9,0xA4,0x00,0x00,}},
- {0xE296,2,{0xF9,0xA5,0x00,0x00,}},
- {0xE297,2,{0xF9,0xA6,0x00,0x00,}},
- {0xE298,2,{0xF9,0xA7,0x00,0x00,}},
- {0xE299,2,{0xF9,0xA8,0x00,0x00,}},
- {0xE29A,2,{0xF9,0xA9,0x00,0x00,}},
- {0xE29B,2,{0xF9,0xAA,0x00,0x00,}},
- {0xE29C,2,{0xF9,0xAB,0x00,0x00,}},
- {0xE29D,2,{0xF9,0xAC,0x00,0x00,}},
- {0xE29E,2,{0xF9,0xAD,0x00,0x00,}},
- {0xE29F,2,{0xF9,0xAE,0x00,0x00,}},
- {0xE2A0,2,{0xF9,0xAF,0x00,0x00,}},
- {0xE2A1,2,{0xF9,0xB0,0x00,0x00,}},
- {0xE2A2,2,{0xF9,0xB1,0x00,0x00,}},
- {0xE2A3,2,{0xF9,0xB2,0x00,0x00,}},
- {0xE2A4,2,{0xF9,0xB3,0x00,0x00,}},
- {0xE2A5,2,{0xF9,0xB4,0x00,0x00,}},
- {0xE2A6,2,{0xF9,0xB5,0x00,0x00,}},
- {0xE2A7,2,{0xF9,0xB6,0x00,0x00,}},
- {0xE2A8,2,{0xF9,0xB7,0x00,0x00,}},
- {0xE2A9,2,{0xF9,0xB8,0x00,0x00,}},
- {0xE2AA,2,{0xF9,0xB9,0x00,0x00,}},
- {0xE2AB,2,{0xF9,0xBA,0x00,0x00,}},
- {0xE2AC,2,{0xF9,0xBB,0x00,0x00,}},
- {0xE2AD,2,{0xF9,0xBC,0x00,0x00,}},
- {0xE2AE,2,{0xF9,0xBD,0x00,0x00,}},
- {0xE2AF,2,{0xF9,0xBE,0x00,0x00,}},
- {0xE2B0,2,{0xF9,0xBF,0x00,0x00,}},
- {0xE2B1,2,{0xF9,0xC0,0x00,0x00,}},
- {0xE2B2,2,{0xF9,0xC1,0x00,0x00,}},
- {0xE2B3,2,{0xF9,0xC2,0x00,0x00,}},
- {0xE2B4,2,{0xF9,0xC3,0x00,0x00,}},
- {0xE2B5,2,{0xF9,0xC4,0x00,0x00,}},
- {0xE2B6,2,{0xF9,0xC5,0x00,0x00,}},
- {0xE2B7,2,{0xF9,0xC6,0x00,0x00,}},
- {0xE2B8,2,{0xF9,0xC7,0x00,0x00,}},
- {0xE2B9,2,{0xF9,0xC8,0x00,0x00,}},
- {0xE2BA,2,{0xF9,0xC9,0x00,0x00,}},
- {0xE2BB,2,{0xF9,0xCA,0x00,0x00,}},
- {0xE2BC,2,{0xF9,0xCB,0x00,0x00,}},
- {0xE2BD,2,{0xF9,0xCC,0x00,0x00,}},
- {0xE2BE,2,{0xF9,0xCD,0x00,0x00,}},
- {0xE2BF,2,{0xF9,0xCE,0x00,0x00,}},
- {0xE2C0,2,{0xF9,0xCF,0x00,0x00,}},
- {0xE2C1,2,{0xF9,0xD0,0x00,0x00,}},
- {0xE2C2,2,{0xF9,0xD1,0x00,0x00,}},
- {0xE2C3,2,{0xF9,0xD2,0x00,0x00,}},
- {0xE2C4,2,{0xF9,0xD3,0x00,0x00,}},
- {0xE2C5,2,{0xF9,0xD4,0x00,0x00,}},
- {0xE2C6,2,{0xF9,0xD5,0x00,0x00,}},
- {0xE2C7,2,{0xF9,0xD6,0x00,0x00,}},
- {0xE2C8,2,{0xF9,0xD7,0x00,0x00,}},
- {0xE2C9,2,{0xF9,0xD8,0x00,0x00,}},
- {0xE2CA,2,{0xF9,0xD9,0x00,0x00,}},
- {0xE2CB,2,{0xF9,0xDA,0x00,0x00,}},
- {0xE2CC,2,{0xF9,0xDB,0x00,0x00,}},
- {0xE2CD,2,{0xF9,0xDC,0x00,0x00,}},
- {0xE2CE,2,{0xF9,0xDD,0x00,0x00,}},
- {0xE2CF,2,{0xF9,0xDE,0x00,0x00,}},
- {0xE2D0,2,{0xF9,0xDF,0x00,0x00,}},
- {0xE2D1,2,{0xF9,0xE0,0x00,0x00,}},
- {0xE2D2,2,{0xF9,0xE1,0x00,0x00,}},
- {0xE2D3,2,{0xF9,0xE2,0x00,0x00,}},
- {0xE2D4,2,{0xF9,0xE3,0x00,0x00,}},
- {0xE2D5,2,{0xF9,0xE4,0x00,0x00,}},
- {0xE2D6,2,{0xF9,0xE5,0x00,0x00,}},
- {0xE2D7,2,{0xF9,0xE6,0x00,0x00,}},
- {0xE2D8,2,{0xF9,0xE7,0x00,0x00,}},
- {0xE2D9,2,{0xF9,0xE8,0x00,0x00,}},
- {0xE2DA,2,{0xF9,0xE9,0x00,0x00,}},
- {0xE2DB,2,{0xF9,0xEA,0x00,0x00,}},
- {0xE2DC,2,{0xF9,0xEB,0x00,0x00,}},
- {0xE2DD,2,{0xF9,0xEC,0x00,0x00,}},
- {0xE2DE,2,{0xF9,0xED,0x00,0x00,}},
- {0xE2DF,2,{0xF9,0xEE,0x00,0x00,}},
- {0xE2E0,2,{0xF9,0xEF,0x00,0x00,}},
- {0xE2E1,2,{0xF9,0xF0,0x00,0x00,}},
- {0xE2E2,2,{0xF9,0xF1,0x00,0x00,}},
- {0xE2E3,2,{0xF9,0xF2,0x00,0x00,}},
- {0xE2E4,2,{0xF9,0xF3,0x00,0x00,}},
- {0xE2E5,2,{0xF9,0xF4,0x00,0x00,}},
- {0xE2E6,2,{0xF9,0xF5,0x00,0x00,}},
- {0xE2E7,2,{0xF9,0xF6,0x00,0x00,}},
- {0xE2E8,2,{0xF9,0xF7,0x00,0x00,}},
- {0xE2E9,2,{0xF9,0xF8,0x00,0x00,}},
- {0xE2EA,2,{0xF9,0xF9,0x00,0x00,}},
- {0xE2EB,2,{0xF9,0xFA,0x00,0x00,}},
- {0xE2EC,2,{0xF9,0xFB,0x00,0x00,}},
- {0xE2ED,2,{0xF9,0xFC,0x00,0x00,}},
- {0xE2EE,2,{0xF9,0xFD,0x00,0x00,}},
- {0xE2EF,2,{0xF9,0xFE,0x00,0x00,}},
- {0xE2F0,2,{0xFA,0xA1,0x00,0x00,}},
- {0xE2F1,2,{0xFA,0xA2,0x00,0x00,}},
- {0xE2F2,2,{0xFA,0xA3,0x00,0x00,}},
- {0xE2F3,2,{0xFA,0xA4,0x00,0x00,}},
- {0xE2F4,2,{0xFA,0xA5,0x00,0x00,}},
- {0xE2F5,2,{0xFA,0xA6,0x00,0x00,}},
- {0xE2F6,2,{0xFA,0xA7,0x00,0x00,}},
- {0xE2F7,2,{0xFA,0xA8,0x00,0x00,}},
- {0xE2F8,2,{0xFA,0xA9,0x00,0x00,}},
- {0xE2F9,2,{0xFA,0xAA,0x00,0x00,}},
- {0xE2FA,2,{0xFA,0xAB,0x00,0x00,}},
- {0xE2FB,2,{0xFA,0xAC,0x00,0x00,}},
- {0xE2FC,2,{0xFA,0xAD,0x00,0x00,}},
- {0xE2FD,2,{0xFA,0xAE,0x00,0x00,}},
- {0xE2FE,2,{0xFA,0xAF,0x00,0x00,}},
- {0xE2FF,2,{0xFA,0xB0,0x00,0x00,}},
- {0xE300,2,{0xFA,0xB1,0x00,0x00,}},
- {0xE301,2,{0xFA,0xB2,0x00,0x00,}},
- {0xE302,2,{0xFA,0xB3,0x00,0x00,}},
- {0xE303,2,{0xFA,0xB4,0x00,0x00,}},
- {0xE304,2,{0xFA,0xB5,0x00,0x00,}},
- {0xE305,2,{0xFA,0xB6,0x00,0x00,}},
- {0xE306,2,{0xFA,0xB7,0x00,0x00,}},
- {0xE307,2,{0xFA,0xB8,0x00,0x00,}},
- {0xE308,2,{0xFA,0xB9,0x00,0x00,}},
- {0xE309,2,{0xFA,0xBA,0x00,0x00,}},
- {0xE30A,2,{0xFA,0xBB,0x00,0x00,}},
- {0xE30B,2,{0xFA,0xBC,0x00,0x00,}},
- {0xE30C,2,{0xFA,0xBD,0x00,0x00,}},
- {0xE30D,2,{0xFA,0xBE,0x00,0x00,}},
- {0xE30E,2,{0xFA,0xBF,0x00,0x00,}},
- {0xE30F,2,{0xFA,0xC0,0x00,0x00,}},
- {0xE310,2,{0xFA,0xC1,0x00,0x00,}},
- {0xE311,2,{0xFA,0xC2,0x00,0x00,}},
- {0xE312,2,{0xFA,0xC3,0x00,0x00,}},
- {0xE313,2,{0xFA,0xC4,0x00,0x00,}},
- {0xE314,2,{0xFA,0xC5,0x00,0x00,}},
- {0xE315,2,{0xFA,0xC6,0x00,0x00,}},
- {0xE316,2,{0xFA,0xC7,0x00,0x00,}},
- {0xE317,2,{0xFA,0xC8,0x00,0x00,}},
- {0xE318,2,{0xFA,0xC9,0x00,0x00,}},
- {0xE319,2,{0xFA,0xCA,0x00,0x00,}},
- {0xE31A,2,{0xFA,0xCB,0x00,0x00,}},
- {0xE31B,2,{0xFA,0xCC,0x00,0x00,}},
- {0xE31C,2,{0xFA,0xCD,0x00,0x00,}},
- {0xE31D,2,{0xFA,0xCE,0x00,0x00,}},
- {0xE31E,2,{0xFA,0xCF,0x00,0x00,}},
- {0xE31F,2,{0xFA,0xD0,0x00,0x00,}},
- {0xE320,2,{0xFA,0xD1,0x00,0x00,}},
- {0xE321,2,{0xFA,0xD2,0x00,0x00,}},
- {0xE322,2,{0xFA,0xD3,0x00,0x00,}},
- {0xE323,2,{0xFA,0xD4,0x00,0x00,}},
- {0xE324,2,{0xFA,0xD5,0x00,0x00,}},
- {0xE325,2,{0xFA,0xD6,0x00,0x00,}},
- {0xE326,2,{0xFA,0xD7,0x00,0x00,}},
- {0xE327,2,{0xFA,0xD8,0x00,0x00,}},
- {0xE328,2,{0xFA,0xD9,0x00,0x00,}},
- {0xE329,2,{0xFA,0xDA,0x00,0x00,}},
- {0xE32A,2,{0xFA,0xDB,0x00,0x00,}},
- {0xE32B,2,{0xFA,0xDC,0x00,0x00,}},
- {0xE32C,2,{0xFA,0xDD,0x00,0x00,}},
- {0xE32D,2,{0xFA,0xDE,0x00,0x00,}},
- {0xE32E,2,{0xFA,0xDF,0x00,0x00,}},
- {0xE32F,2,{0xFA,0xE0,0x00,0x00,}},
- {0xE330,2,{0xFA,0xE1,0x00,0x00,}},
- {0xE331,2,{0xFA,0xE2,0x00,0x00,}},
- {0xE332,2,{0xFA,0xE3,0x00,0x00,}},
- {0xE333,2,{0xFA,0xE4,0x00,0x00,}},
- {0xE334,2,{0xFA,0xE5,0x00,0x00,}},
- {0xE335,2,{0xFA,0xE6,0x00,0x00,}},
- {0xE336,2,{0xFA,0xE7,0x00,0x00,}},
- {0xE337,2,{0xFA,0xE8,0x00,0x00,}},
- {0xE338,2,{0xFA,0xE9,0x00,0x00,}},
- {0xE339,2,{0xFA,0xEA,0x00,0x00,}},
- {0xE33A,2,{0xFA,0xEB,0x00,0x00,}},
- {0xE33B,2,{0xFA,0xEC,0x00,0x00,}},
- {0xE33C,2,{0xFA,0xED,0x00,0x00,}},
- {0xE33D,2,{0xFA,0xEE,0x00,0x00,}},
- {0xE33E,2,{0xFA,0xEF,0x00,0x00,}},
- {0xE33F,2,{0xFA,0xF0,0x00,0x00,}},
- {0xE340,2,{0xFA,0xF1,0x00,0x00,}},
- {0xE341,2,{0xFA,0xF2,0x00,0x00,}},
- {0xE342,2,{0xFA,0xF3,0x00,0x00,}},
- {0xE343,2,{0xFA,0xF4,0x00,0x00,}},
- {0xE344,2,{0xFA,0xF5,0x00,0x00,}},
- {0xE345,2,{0xFA,0xF6,0x00,0x00,}},
- {0xE346,2,{0xFA,0xF7,0x00,0x00,}},
- {0xE347,2,{0xFA,0xF8,0x00,0x00,}},
- {0xE348,2,{0xFA,0xF9,0x00,0x00,}},
- {0xE349,2,{0xFA,0xFA,0x00,0x00,}},
- {0xE34A,2,{0xFA,0xFB,0x00,0x00,}},
- {0xE34B,2,{0xFA,0xFC,0x00,0x00,}},
- {0xE34C,2,{0xFA,0xFD,0x00,0x00,}},
- {0xE34D,2,{0xFA,0xFE,0x00,0x00,}},
- {0xE34E,2,{0xFB,0xA1,0x00,0x00,}},
- {0xE34F,2,{0xFB,0xA2,0x00,0x00,}},
- {0xE350,2,{0xFB,0xA3,0x00,0x00,}},
- {0xE351,2,{0xFB,0xA4,0x00,0x00,}},
- {0xE352,2,{0xFB,0xA5,0x00,0x00,}},
- {0xE353,2,{0xFB,0xA6,0x00,0x00,}},
- {0xE354,2,{0xFB,0xA7,0x00,0x00,}},
- {0xE355,2,{0xFB,0xA8,0x00,0x00,}},
- {0xE356,2,{0xFB,0xA9,0x00,0x00,}},
- {0xE357,2,{0xFB,0xAA,0x00,0x00,}},
- {0xE358,2,{0xFB,0xAB,0x00,0x00,}},
- {0xE359,2,{0xFB,0xAC,0x00,0x00,}},
- {0xE35A,2,{0xFB,0xAD,0x00,0x00,}},
- {0xE35B,2,{0xFB,0xAE,0x00,0x00,}},
- {0xE35C,2,{0xFB,0xAF,0x00,0x00,}},
- {0xE35D,2,{0xFB,0xB0,0x00,0x00,}},
- {0xE35E,2,{0xFB,0xB1,0x00,0x00,}},
- {0xE35F,2,{0xFB,0xB2,0x00,0x00,}},
- {0xE360,2,{0xFB,0xB3,0x00,0x00,}},
- {0xE361,2,{0xFB,0xB4,0x00,0x00,}},
- {0xE362,2,{0xFB,0xB5,0x00,0x00,}},
- {0xE363,2,{0xFB,0xB6,0x00,0x00,}},
- {0xE364,2,{0xFB,0xB7,0x00,0x00,}},
- {0xE365,2,{0xFB,0xB8,0x00,0x00,}},
- {0xE366,2,{0xFB,0xB9,0x00,0x00,}},
- {0xE367,2,{0xFB,0xBA,0x00,0x00,}},
- {0xE368,2,{0xFB,0xBB,0x00,0x00,}},
- {0xE369,2,{0xFB,0xBC,0x00,0x00,}},
- {0xE36A,2,{0xFB,0xBD,0x00,0x00,}},
- {0xE36B,2,{0xFB,0xBE,0x00,0x00,}},
- {0xE36C,2,{0xFB,0xBF,0x00,0x00,}},
- {0xE36D,2,{0xFB,0xC0,0x00,0x00,}},
- {0xE36E,2,{0xFB,0xC1,0x00,0x00,}},
- {0xE36F,2,{0xFB,0xC2,0x00,0x00,}},
- {0xE370,2,{0xFB,0xC3,0x00,0x00,}},
- {0xE371,2,{0xFB,0xC4,0x00,0x00,}},
- {0xE372,2,{0xFB,0xC5,0x00,0x00,}},
- {0xE373,2,{0xFB,0xC6,0x00,0x00,}},
- {0xE374,2,{0xFB,0xC7,0x00,0x00,}},
- {0xE375,2,{0xFB,0xC8,0x00,0x00,}},
- {0xE376,2,{0xFB,0xC9,0x00,0x00,}},
- {0xE377,2,{0xFB,0xCA,0x00,0x00,}},
- {0xE378,2,{0xFB,0xCB,0x00,0x00,}},
- {0xE379,2,{0xFB,0xCC,0x00,0x00,}},
- {0xE37A,2,{0xFB,0xCD,0x00,0x00,}},
- {0xE37B,2,{0xFB,0xCE,0x00,0x00,}},
- {0xE37C,2,{0xFB,0xCF,0x00,0x00,}},
- {0xE37D,2,{0xFB,0xD0,0x00,0x00,}},
- {0xE37E,2,{0xFB,0xD1,0x00,0x00,}},
- {0xE37F,2,{0xFB,0xD2,0x00,0x00,}},
- {0xE380,2,{0xFB,0xD3,0x00,0x00,}},
- {0xE381,2,{0xFB,0xD4,0x00,0x00,}},
- {0xE382,2,{0xFB,0xD5,0x00,0x00,}},
- {0xE383,2,{0xFB,0xD6,0x00,0x00,}},
- {0xE384,2,{0xFB,0xD7,0x00,0x00,}},
- {0xE385,2,{0xFB,0xD8,0x00,0x00,}},
- {0xE386,2,{0xFB,0xD9,0x00,0x00,}},
- {0xE387,2,{0xFB,0xDA,0x00,0x00,}},
- {0xE388,2,{0xFB,0xDB,0x00,0x00,}},
- {0xE389,2,{0xFB,0xDC,0x00,0x00,}},
- {0xE38A,2,{0xFB,0xDD,0x00,0x00,}},
- {0xE38B,2,{0xFB,0xDE,0x00,0x00,}},
- {0xE38C,2,{0xFB,0xDF,0x00,0x00,}},
- {0xE38D,2,{0xFB,0xE0,0x00,0x00,}},
- {0xE38E,2,{0xFB,0xE1,0x00,0x00,}},
- {0xE38F,2,{0xFB,0xE2,0x00,0x00,}},
- {0xE390,2,{0xFB,0xE3,0x00,0x00,}},
- {0xE391,2,{0xFB,0xE4,0x00,0x00,}},
- {0xE392,2,{0xFB,0xE5,0x00,0x00,}},
- {0xE393,2,{0xFB,0xE6,0x00,0x00,}},
- {0xE394,2,{0xFB,0xE7,0x00,0x00,}},
- {0xE395,2,{0xFB,0xE8,0x00,0x00,}},
- {0xE396,2,{0xFB,0xE9,0x00,0x00,}},
- {0xE397,2,{0xFB,0xEA,0x00,0x00,}},
- {0xE398,2,{0xFB,0xEB,0x00,0x00,}},
- {0xE399,2,{0xFB,0xEC,0x00,0x00,}},
- {0xE39A,2,{0xFB,0xED,0x00,0x00,}},
- {0xE39B,2,{0xFB,0xEE,0x00,0x00,}},
- {0xE39C,2,{0xFB,0xEF,0x00,0x00,}},
- {0xE39D,2,{0xFB,0xF0,0x00,0x00,}},
- {0xE39E,2,{0xFB,0xF1,0x00,0x00,}},
- {0xE39F,2,{0xFB,0xF2,0x00,0x00,}},
- {0xE3A0,2,{0xFB,0xF3,0x00,0x00,}},
- {0xE3A1,2,{0xFB,0xF4,0x00,0x00,}},
- {0xE3A2,2,{0xFB,0xF5,0x00,0x00,}},
- {0xE3A3,2,{0xFB,0xF6,0x00,0x00,}},
- {0xE3A4,2,{0xFB,0xF7,0x00,0x00,}},
- {0xE3A5,2,{0xFB,0xF8,0x00,0x00,}},
- {0xE3A6,2,{0xFB,0xF9,0x00,0x00,}},
- {0xE3A7,2,{0xFB,0xFA,0x00,0x00,}},
- {0xE3A8,2,{0xFB,0xFB,0x00,0x00,}},
- {0xE3A9,2,{0xFB,0xFC,0x00,0x00,}},
- {0xE3AA,2,{0xFB,0xFD,0x00,0x00,}},
- {0xE3AB,2,{0xFB,0xFE,0x00,0x00,}},
- {0xE3AC,2,{0xFC,0xA1,0x00,0x00,}},
- {0xE3AD,2,{0xFC,0xA2,0x00,0x00,}},
- {0xE3AE,2,{0xFC,0xA3,0x00,0x00,}},
- {0xE3AF,2,{0xFC,0xA4,0x00,0x00,}},
- {0xE3B0,2,{0xFC,0xA5,0x00,0x00,}},
- {0xE3B1,2,{0xFC,0xA6,0x00,0x00,}},
- {0xE3B2,2,{0xFC,0xA7,0x00,0x00,}},
- {0xE3B3,2,{0xFC,0xA8,0x00,0x00,}},
- {0xE3B4,2,{0xFC,0xA9,0x00,0x00,}},
- {0xE3B5,2,{0xFC,0xAA,0x00,0x00,}},
- {0xE3B6,2,{0xFC,0xAB,0x00,0x00,}},
- {0xE3B7,2,{0xFC,0xAC,0x00,0x00,}},
- {0xE3B8,2,{0xFC,0xAD,0x00,0x00,}},
- {0xE3B9,2,{0xFC,0xAE,0x00,0x00,}},
- {0xE3BA,2,{0xFC,0xAF,0x00,0x00,}},
- {0xE3BB,2,{0xFC,0xB0,0x00,0x00,}},
- {0xE3BC,2,{0xFC,0xB1,0x00,0x00,}},
- {0xE3BD,2,{0xFC,0xB2,0x00,0x00,}},
- {0xE3BE,2,{0xFC,0xB3,0x00,0x00,}},
- {0xE3BF,2,{0xFC,0xB4,0x00,0x00,}},
- {0xE3C0,2,{0xFC,0xB5,0x00,0x00,}},
- {0xE3C1,2,{0xFC,0xB6,0x00,0x00,}},
- {0xE3C2,2,{0xFC,0xB7,0x00,0x00,}},
- {0xE3C3,2,{0xFC,0xB8,0x00,0x00,}},
- {0xE3C4,2,{0xFC,0xB9,0x00,0x00,}},
- {0xE3C5,2,{0xFC,0xBA,0x00,0x00,}},
- {0xE3C6,2,{0xFC,0xBB,0x00,0x00,}},
- {0xE3C7,2,{0xFC,0xBC,0x00,0x00,}},
- {0xE3C8,2,{0xFC,0xBD,0x00,0x00,}},
- {0xE3C9,2,{0xFC,0xBE,0x00,0x00,}},
- {0xE3CA,2,{0xFC,0xBF,0x00,0x00,}},
- {0xE3CB,2,{0xFC,0xC0,0x00,0x00,}},
- {0xE3CC,2,{0xFC,0xC1,0x00,0x00,}},
- {0xE3CD,2,{0xFC,0xC2,0x00,0x00,}},
- {0xE3CE,2,{0xFC,0xC3,0x00,0x00,}},
- {0xE3CF,2,{0xFC,0xC4,0x00,0x00,}},
- {0xE3D0,2,{0xFC,0xC5,0x00,0x00,}},
- {0xE3D1,2,{0xFC,0xC6,0x00,0x00,}},
- {0xE3D2,2,{0xFC,0xC7,0x00,0x00,}},
- {0xE3D3,2,{0xFC,0xC8,0x00,0x00,}},
- {0xE3D4,2,{0xFC,0xC9,0x00,0x00,}},
- {0xE3D5,2,{0xFC,0xCA,0x00,0x00,}},
- {0xE3D6,2,{0xFC,0xCB,0x00,0x00,}},
- {0xE3D7,2,{0xFC,0xCC,0x00,0x00,}},
- {0xE3D8,2,{0xFC,0xCD,0x00,0x00,}},
- {0xE3D9,2,{0xFC,0xCE,0x00,0x00,}},
- {0xE3DA,2,{0xFC,0xCF,0x00,0x00,}},
- {0xE3DB,2,{0xFC,0xD0,0x00,0x00,}},
- {0xE3DC,2,{0xFC,0xD1,0x00,0x00,}},
- {0xE3DD,2,{0xFC,0xD2,0x00,0x00,}},
- {0xE3DE,2,{0xFC,0xD3,0x00,0x00,}},
- {0xE3DF,2,{0xFC,0xD4,0x00,0x00,}},
- {0xE3E0,2,{0xFC,0xD5,0x00,0x00,}},
- {0xE3E1,2,{0xFC,0xD6,0x00,0x00,}},
- {0xE3E2,2,{0xFC,0xD7,0x00,0x00,}},
- {0xE3E3,2,{0xFC,0xD8,0x00,0x00,}},
- {0xE3E4,2,{0xFC,0xD9,0x00,0x00,}},
- {0xE3E5,2,{0xFC,0xDA,0x00,0x00,}},
- {0xE3E6,2,{0xFC,0xDB,0x00,0x00,}},
- {0xE3E7,2,{0xFC,0xDC,0x00,0x00,}},
- {0xE3E8,2,{0xFC,0xDD,0x00,0x00,}},
- {0xE3E9,2,{0xFC,0xDE,0x00,0x00,}},
- {0xE3EA,2,{0xFC,0xDF,0x00,0x00,}},
- {0xE3EB,2,{0xFC,0xE0,0x00,0x00,}},
- {0xE3EC,2,{0xFC,0xE1,0x00,0x00,}},
- {0xE3ED,2,{0xFC,0xE2,0x00,0x00,}},
- {0xE3EE,2,{0xFC,0xE3,0x00,0x00,}},
- {0xE3EF,2,{0xFC,0xE4,0x00,0x00,}},
- {0xE3F0,2,{0xFC,0xE5,0x00,0x00,}},
- {0xE3F1,2,{0xFC,0xE6,0x00,0x00,}},
- {0xE3F2,2,{0xFC,0xE7,0x00,0x00,}},
- {0xE3F3,2,{0xFC,0xE8,0x00,0x00,}},
- {0xE3F4,2,{0xFC,0xE9,0x00,0x00,}},
- {0xE3F5,2,{0xFC,0xEA,0x00,0x00,}},
- {0xE3F6,2,{0xFC,0xEB,0x00,0x00,}},
- {0xE3F7,2,{0xFC,0xEC,0x00,0x00,}},
- {0xE3F8,2,{0xFC,0xED,0x00,0x00,}},
- {0xE3F9,2,{0xFC,0xEE,0x00,0x00,}},
- {0xE3FA,2,{0xFC,0xEF,0x00,0x00,}},
- {0xE3FB,2,{0xFC,0xF0,0x00,0x00,}},
- {0xE3FC,2,{0xFC,0xF1,0x00,0x00,}},
- {0xE3FD,2,{0xFC,0xF2,0x00,0x00,}},
- {0xE3FE,2,{0xFC,0xF3,0x00,0x00,}},
- {0xE3FF,2,{0xFC,0xF4,0x00,0x00,}},
- {0xE400,2,{0xFC,0xF5,0x00,0x00,}},
- {0xE401,2,{0xFC,0xF6,0x00,0x00,}},
- {0xE402,2,{0xFC,0xF7,0x00,0x00,}},
- {0xE403,2,{0xFC,0xF8,0x00,0x00,}},
- {0xE404,2,{0xFC,0xF9,0x00,0x00,}},
- {0xE405,2,{0xFC,0xFA,0x00,0x00,}},
- {0xE406,2,{0xFC,0xFB,0x00,0x00,}},
- {0xE407,2,{0xFC,0xFC,0x00,0x00,}},
- {0xE408,2,{0xFC,0xFD,0x00,0x00,}},
- {0xE409,2,{0xFC,0xFE,0x00,0x00,}},
- {0xE40A,2,{0xFD,0xA1,0x00,0x00,}},
- {0xE40B,2,{0xFD,0xA2,0x00,0x00,}},
- {0xE40C,2,{0xFD,0xA3,0x00,0x00,}},
- {0xE40D,2,{0xFD,0xA4,0x00,0x00,}},
- {0xE40E,2,{0xFD,0xA5,0x00,0x00,}},
- {0xE40F,2,{0xFD,0xA6,0x00,0x00,}},
- {0xE410,2,{0xFD,0xA7,0x00,0x00,}},
- {0xE411,2,{0xFD,0xA8,0x00,0x00,}},
- {0xE412,2,{0xFD,0xA9,0x00,0x00,}},
- {0xE413,2,{0xFD,0xAA,0x00,0x00,}},
- {0xE414,2,{0xFD,0xAB,0x00,0x00,}},
- {0xE415,2,{0xFD,0xAC,0x00,0x00,}},
- {0xE416,2,{0xFD,0xAD,0x00,0x00,}},
- {0xE417,2,{0xFD,0xAE,0x00,0x00,}},
- {0xE418,2,{0xFD,0xAF,0x00,0x00,}},
- {0xE419,2,{0xFD,0xB0,0x00,0x00,}},
- {0xE41A,2,{0xFD,0xB1,0x00,0x00,}},
- {0xE41B,2,{0xFD,0xB2,0x00,0x00,}},
- {0xE41C,2,{0xFD,0xB3,0x00,0x00,}},
- {0xE41D,2,{0xFD,0xB4,0x00,0x00,}},
- {0xE41E,2,{0xFD,0xB5,0x00,0x00,}},
- {0xE41F,2,{0xFD,0xB6,0x00,0x00,}},
- {0xE420,2,{0xFD,0xB7,0x00,0x00,}},
- {0xE421,2,{0xFD,0xB8,0x00,0x00,}},
- {0xE422,2,{0xFD,0xB9,0x00,0x00,}},
- {0xE423,2,{0xFD,0xBA,0x00,0x00,}},
- {0xE424,2,{0xFD,0xBB,0x00,0x00,}},
- {0xE425,2,{0xFD,0xBC,0x00,0x00,}},
- {0xE426,2,{0xFD,0xBD,0x00,0x00,}},
- {0xE427,2,{0xFD,0xBE,0x00,0x00,}},
- {0xE428,2,{0xFD,0xBF,0x00,0x00,}},
- {0xE429,2,{0xFD,0xC0,0x00,0x00,}},
- {0xE42A,2,{0xFD,0xC1,0x00,0x00,}},
- {0xE42B,2,{0xFD,0xC2,0x00,0x00,}},
- {0xE42C,2,{0xFD,0xC3,0x00,0x00,}},
- {0xE42D,2,{0xFD,0xC4,0x00,0x00,}},
- {0xE42E,2,{0xFD,0xC5,0x00,0x00,}},
- {0xE42F,2,{0xFD,0xC6,0x00,0x00,}},
- {0xE430,2,{0xFD,0xC7,0x00,0x00,}},
- {0xE431,2,{0xFD,0xC8,0x00,0x00,}},
- {0xE432,2,{0xFD,0xC9,0x00,0x00,}},
- {0xE433,2,{0xFD,0xCA,0x00,0x00,}},
- {0xE434,2,{0xFD,0xCB,0x00,0x00,}},
- {0xE435,2,{0xFD,0xCC,0x00,0x00,}},
- {0xE436,2,{0xFD,0xCD,0x00,0x00,}},
- {0xE437,2,{0xFD,0xCE,0x00,0x00,}},
- {0xE438,2,{0xFD,0xCF,0x00,0x00,}},
- {0xE439,2,{0xFD,0xD0,0x00,0x00,}},
- {0xE43A,2,{0xFD,0xD1,0x00,0x00,}},
- {0xE43B,2,{0xFD,0xD2,0x00,0x00,}},
- {0xE43C,2,{0xFD,0xD3,0x00,0x00,}},
- {0xE43D,2,{0xFD,0xD4,0x00,0x00,}},
- {0xE43E,2,{0xFD,0xD5,0x00,0x00,}},
- {0xE43F,2,{0xFD,0xD6,0x00,0x00,}},
- {0xE440,2,{0xFD,0xD7,0x00,0x00,}},
- {0xE441,2,{0xFD,0xD8,0x00,0x00,}},
- {0xE442,2,{0xFD,0xD9,0x00,0x00,}},
- {0xE443,2,{0xFD,0xDA,0x00,0x00,}},
- {0xE444,2,{0xFD,0xDB,0x00,0x00,}},
- {0xE445,2,{0xFD,0xDC,0x00,0x00,}},
- {0xE446,2,{0xFD,0xDD,0x00,0x00,}},
- {0xE447,2,{0xFD,0xDE,0x00,0x00,}},
- {0xE448,2,{0xFD,0xDF,0x00,0x00,}},
- {0xE449,2,{0xFD,0xE0,0x00,0x00,}},
- {0xE44A,2,{0xFD,0xE1,0x00,0x00,}},
- {0xE44B,2,{0xFD,0xE2,0x00,0x00,}},
- {0xE44C,2,{0xFD,0xE3,0x00,0x00,}},
- {0xE44D,2,{0xFD,0xE4,0x00,0x00,}},
- {0xE44E,2,{0xFD,0xE5,0x00,0x00,}},
- {0xE44F,2,{0xFD,0xE6,0x00,0x00,}},
- {0xE450,2,{0xFD,0xE7,0x00,0x00,}},
- {0xE451,2,{0xFD,0xE8,0x00,0x00,}},
- {0xE452,2,{0xFD,0xE9,0x00,0x00,}},
- {0xE453,2,{0xFD,0xEA,0x00,0x00,}},
- {0xE454,2,{0xFD,0xEB,0x00,0x00,}},
- {0xE455,2,{0xFD,0xEC,0x00,0x00,}},
- {0xE456,2,{0xFD,0xED,0x00,0x00,}},
- {0xE457,2,{0xFD,0xEE,0x00,0x00,}},
- {0xE458,2,{0xFD,0xEF,0x00,0x00,}},
- {0xE459,2,{0xFD,0xF0,0x00,0x00,}},
- {0xE45A,2,{0xFD,0xF1,0x00,0x00,}},
- {0xE45B,2,{0xFD,0xF2,0x00,0x00,}},
- {0xE45C,2,{0xFD,0xF3,0x00,0x00,}},
- {0xE45D,2,{0xFD,0xF4,0x00,0x00,}},
- {0xE45E,2,{0xFD,0xF5,0x00,0x00,}},
- {0xE45F,2,{0xFD,0xF6,0x00,0x00,}},
- {0xE460,2,{0xFD,0xF7,0x00,0x00,}},
- {0xE461,2,{0xFD,0xF8,0x00,0x00,}},
- {0xE462,2,{0xFD,0xF9,0x00,0x00,}},
- {0xE463,2,{0xFD,0xFA,0x00,0x00,}},
- {0xE464,2,{0xFD,0xFB,0x00,0x00,}},
- {0xE465,2,{0xFD,0xFC,0x00,0x00,}},
- {0xE466,2,{0xFD,0xFD,0x00,0x00,}},
- {0xE467,2,{0xFD,0xFE,0x00,0x00,}},
- {0xE468,2,{0xFE,0xA1,0x00,0x00,}},
- {0xE469,2,{0xFE,0xA2,0x00,0x00,}},
- {0xE46A,2,{0xFE,0xA3,0x00,0x00,}},
- {0xE46B,2,{0xFE,0xA4,0x00,0x00,}},
- {0xE46C,2,{0xFE,0xA5,0x00,0x00,}},
- {0xE46D,2,{0xFE,0xA6,0x00,0x00,}},
- {0xE46E,2,{0xFE,0xA7,0x00,0x00,}},
- {0xE46F,2,{0xFE,0xA8,0x00,0x00,}},
- {0xE470,2,{0xFE,0xA9,0x00,0x00,}},
- {0xE471,2,{0xFE,0xAA,0x00,0x00,}},
- {0xE472,2,{0xFE,0xAB,0x00,0x00,}},
- {0xE473,2,{0xFE,0xAC,0x00,0x00,}},
- {0xE474,2,{0xFE,0xAD,0x00,0x00,}},
- {0xE475,2,{0xFE,0xAE,0x00,0x00,}},
- {0xE476,2,{0xFE,0xAF,0x00,0x00,}},
- {0xE477,2,{0xFE,0xB0,0x00,0x00,}},
- {0xE478,2,{0xFE,0xB1,0x00,0x00,}},
- {0xE479,2,{0xFE,0xB2,0x00,0x00,}},
- {0xE47A,2,{0xFE,0xB3,0x00,0x00,}},
- {0xE47B,2,{0xFE,0xB4,0x00,0x00,}},
- {0xE47C,2,{0xFE,0xB5,0x00,0x00,}},
- {0xE47D,2,{0xFE,0xB6,0x00,0x00,}},
- {0xE47E,2,{0xFE,0xB7,0x00,0x00,}},
- {0xE47F,2,{0xFE,0xB8,0x00,0x00,}},
- {0xE480,2,{0xFE,0xB9,0x00,0x00,}},
- {0xE481,2,{0xFE,0xBA,0x00,0x00,}},
- {0xE482,2,{0xFE,0xBB,0x00,0x00,}},
- {0xE483,2,{0xFE,0xBC,0x00,0x00,}},
- {0xE484,2,{0xFE,0xBD,0x00,0x00,}},
- {0xE485,2,{0xFE,0xBE,0x00,0x00,}},
- {0xE486,2,{0xFE,0xBF,0x00,0x00,}},
- {0xE487,2,{0xFE,0xC0,0x00,0x00,}},
- {0xE488,2,{0xFE,0xC1,0x00,0x00,}},
- {0xE489,2,{0xFE,0xC2,0x00,0x00,}},
- {0xE48A,2,{0xFE,0xC3,0x00,0x00,}},
- {0xE48B,2,{0xFE,0xC4,0x00,0x00,}},
- {0xE48C,2,{0xFE,0xC5,0x00,0x00,}},
- {0xE48D,2,{0xFE,0xC6,0x00,0x00,}},
- {0xE48E,2,{0xFE,0xC7,0x00,0x00,}},
- {0xE48F,2,{0xFE,0xC8,0x00,0x00,}},
- {0xE490,2,{0xFE,0xC9,0x00,0x00,}},
- {0xE491,2,{0xFE,0xCA,0x00,0x00,}},
- {0xE492,2,{0xFE,0xCB,0x00,0x00,}},
- {0xE493,2,{0xFE,0xCC,0x00,0x00,}},
- {0xE494,2,{0xFE,0xCD,0x00,0x00,}},
- {0xE495,2,{0xFE,0xCE,0x00,0x00,}},
- {0xE496,2,{0xFE,0xCF,0x00,0x00,}},
- {0xE497,2,{0xFE,0xD0,0x00,0x00,}},
- {0xE498,2,{0xFE,0xD1,0x00,0x00,}},
- {0xE499,2,{0xFE,0xD2,0x00,0x00,}},
- {0xE49A,2,{0xFE,0xD3,0x00,0x00,}},
- {0xE49B,2,{0xFE,0xD4,0x00,0x00,}},
- {0xE49C,2,{0xFE,0xD5,0x00,0x00,}},
- {0xE49D,2,{0xFE,0xD6,0x00,0x00,}},
- {0xE49E,2,{0xFE,0xD7,0x00,0x00,}},
- {0xE49F,2,{0xFE,0xD8,0x00,0x00,}},
- {0xE4A0,2,{0xFE,0xD9,0x00,0x00,}},
- {0xE4A1,2,{0xFE,0xDA,0x00,0x00,}},
- {0xE4A2,2,{0xFE,0xDB,0x00,0x00,}},
- {0xE4A3,2,{0xFE,0xDC,0x00,0x00,}},
- {0xE4A4,2,{0xFE,0xDD,0x00,0x00,}},
- {0xE4A5,2,{0xFE,0xDE,0x00,0x00,}},
- {0xE4A6,2,{0xFE,0xDF,0x00,0x00,}},
- {0xE4A7,2,{0xFE,0xE0,0x00,0x00,}},
- {0xE4A8,2,{0xFE,0xE1,0x00,0x00,}},
- {0xE4A9,2,{0xFE,0xE2,0x00,0x00,}},
- {0xE4AA,2,{0xFE,0xE3,0x00,0x00,}},
- {0xE4AB,2,{0xFE,0xE4,0x00,0x00,}},
- {0xE4AC,2,{0xFE,0xE5,0x00,0x00,}},
- {0xE4AD,2,{0xFE,0xE6,0x00,0x00,}},
- {0xE4AE,2,{0xFE,0xE7,0x00,0x00,}},
- {0xE4AF,2,{0xFE,0xE8,0x00,0x00,}},
- {0xE4B0,2,{0xFE,0xE9,0x00,0x00,}},
- {0xE4B1,2,{0xFE,0xEA,0x00,0x00,}},
- {0xE4B2,2,{0xFE,0xEB,0x00,0x00,}},
- {0xE4B3,2,{0xFE,0xEC,0x00,0x00,}},
- {0xE4B4,2,{0xFE,0xED,0x00,0x00,}},
- {0xE4B5,2,{0xFE,0xEE,0x00,0x00,}},
- {0xE4B6,2,{0xFE,0xEF,0x00,0x00,}},
- {0xE4B7,2,{0xFE,0xF0,0x00,0x00,}},
- {0xE4B8,2,{0xFE,0xF1,0x00,0x00,}},
- {0xE4B9,2,{0xFE,0xF2,0x00,0x00,}},
- {0xE4BA,2,{0xFE,0xF3,0x00,0x00,}},
- {0xE4BB,2,{0xFE,0xF4,0x00,0x00,}},
- {0xE4BC,2,{0xFE,0xF5,0x00,0x00,}},
- {0xE4BD,2,{0xFE,0xF6,0x00,0x00,}},
- {0xE4BE,2,{0xFE,0xF7,0x00,0x00,}},
- {0xE4BF,2,{0xFE,0xF8,0x00,0x00,}},
- {0xE4C0,2,{0xFE,0xF9,0x00,0x00,}},
- {0xE4C1,2,{0xFE,0xFA,0x00,0x00,}},
- {0xE4C2,2,{0xFE,0xFB,0x00,0x00,}},
- {0xE4C3,2,{0xFE,0xFC,0x00,0x00,}},
- {0xE4C4,2,{0xFE,0xFD,0x00,0x00,}},
- {0xE4C5,2,{0xFE,0xFE,0x00,0x00,}},
- {0xE4C6,2,{0xA1,0x40,0x00,0x00,}},
- {0xE4C7,2,{0xA1,0x41,0x00,0x00,}},
- {0xE4C8,2,{0xA1,0x42,0x00,0x00,}},
- {0xE4C9,2,{0xA1,0x43,0x00,0x00,}},
- {0xE4CA,2,{0xA1,0x44,0x00,0x00,}},
- {0xE4CB,2,{0xA1,0x45,0x00,0x00,}},
- {0xE4CC,2,{0xA1,0x46,0x00,0x00,}},
- {0xE4CD,2,{0xA1,0x47,0x00,0x00,}},
- {0xE4CE,2,{0xA1,0x48,0x00,0x00,}},
- {0xE4CF,2,{0xA1,0x49,0x00,0x00,}},
- {0xE4D0,2,{0xA1,0x4A,0x00,0x00,}},
- {0xE4D1,2,{0xA1,0x4B,0x00,0x00,}},
- {0xE4D2,2,{0xA1,0x4C,0x00,0x00,}},
- {0xE4D3,2,{0xA1,0x4D,0x00,0x00,}},
- {0xE4D4,2,{0xA1,0x4E,0x00,0x00,}},
- {0xE4D5,2,{0xA1,0x4F,0x00,0x00,}},
- {0xE4D6,2,{0xA1,0x50,0x00,0x00,}},
- {0xE4D7,2,{0xA1,0x51,0x00,0x00,}},
- {0xE4D8,2,{0xA1,0x52,0x00,0x00,}},
- {0xE4D9,2,{0xA1,0x53,0x00,0x00,}},
- {0xE4DA,2,{0xA1,0x54,0x00,0x00,}},
- {0xE4DB,2,{0xA1,0x55,0x00,0x00,}},
- {0xE4DC,2,{0xA1,0x56,0x00,0x00,}},
- {0xE4DD,2,{0xA1,0x57,0x00,0x00,}},
- {0xE4DE,2,{0xA1,0x58,0x00,0x00,}},
- {0xE4DF,2,{0xA1,0x59,0x00,0x00,}},
- {0xE4E0,2,{0xA1,0x5A,0x00,0x00,}},
- {0xE4E1,2,{0xA1,0x5B,0x00,0x00,}},
- {0xE4E2,2,{0xA1,0x5C,0x00,0x00,}},
- {0xE4E3,2,{0xA1,0x5D,0x00,0x00,}},
- {0xE4E4,2,{0xA1,0x5E,0x00,0x00,}},
- {0xE4E5,2,{0xA1,0x5F,0x00,0x00,}},
- {0xE4E6,2,{0xA1,0x60,0x00,0x00,}},
- {0xE4E7,2,{0xA1,0x61,0x00,0x00,}},
- {0xE4E8,2,{0xA1,0x62,0x00,0x00,}},
- {0xE4E9,2,{0xA1,0x63,0x00,0x00,}},
- {0xE4EA,2,{0xA1,0x64,0x00,0x00,}},
- {0xE4EB,2,{0xA1,0x65,0x00,0x00,}},
- {0xE4EC,2,{0xA1,0x66,0x00,0x00,}},
- {0xE4ED,2,{0xA1,0x67,0x00,0x00,}},
- {0xE4EE,2,{0xA1,0x68,0x00,0x00,}},
- {0xE4EF,2,{0xA1,0x69,0x00,0x00,}},
- {0xE4F0,2,{0xA1,0x6A,0x00,0x00,}},
- {0xE4F1,2,{0xA1,0x6B,0x00,0x00,}},
- {0xE4F2,2,{0xA1,0x6C,0x00,0x00,}},
- {0xE4F3,2,{0xA1,0x6D,0x00,0x00,}},
- {0xE4F4,2,{0xA1,0x6E,0x00,0x00,}},
- {0xE4F5,2,{0xA1,0x6F,0x00,0x00,}},
- {0xE4F6,2,{0xA1,0x70,0x00,0x00,}},
- {0xE4F7,2,{0xA1,0x71,0x00,0x00,}},
- {0xE4F8,2,{0xA1,0x72,0x00,0x00,}},
- {0xE4F9,2,{0xA1,0x73,0x00,0x00,}},
- {0xE4FA,2,{0xA1,0x74,0x00,0x00,}},
- {0xE4FB,2,{0xA1,0x75,0x00,0x00,}},
- {0xE4FC,2,{0xA1,0x76,0x00,0x00,}},
- {0xE4FD,2,{0xA1,0x77,0x00,0x00,}},
- {0xE4FE,2,{0xA1,0x78,0x00,0x00,}},
- {0xE4FF,2,{0xA1,0x79,0x00,0x00,}},
- {0xE500,2,{0xA1,0x7A,0x00,0x00,}},
- {0xE501,2,{0xA1,0x7B,0x00,0x00,}},
- {0xE502,2,{0xA1,0x7C,0x00,0x00,}},
- {0xE503,2,{0xA1,0x7D,0x00,0x00,}},
- {0xE504,2,{0xA1,0x7E,0x00,0x00,}},
- {0xE505,2,{0xA1,0x80,0x00,0x00,}},
- {0xE506,2,{0xA1,0x81,0x00,0x00,}},
- {0xE507,2,{0xA1,0x82,0x00,0x00,}},
- {0xE508,2,{0xA1,0x83,0x00,0x00,}},
- {0xE509,2,{0xA1,0x84,0x00,0x00,}},
- {0xE50A,2,{0xA1,0x85,0x00,0x00,}},
- {0xE50B,2,{0xA1,0x86,0x00,0x00,}},
- {0xE50C,2,{0xA1,0x87,0x00,0x00,}},
- {0xE50D,2,{0xA1,0x88,0x00,0x00,}},
- {0xE50E,2,{0xA1,0x89,0x00,0x00,}},
- {0xE50F,2,{0xA1,0x8A,0x00,0x00,}},
- {0xE510,2,{0xA1,0x8B,0x00,0x00,}},
- {0xE511,2,{0xA1,0x8C,0x00,0x00,}},
- {0xE512,2,{0xA1,0x8D,0x00,0x00,}},
- {0xE513,2,{0xA1,0x8E,0x00,0x00,}},
- {0xE514,2,{0xA1,0x8F,0x00,0x00,}},
- {0xE515,2,{0xA1,0x90,0x00,0x00,}},
- {0xE516,2,{0xA1,0x91,0x00,0x00,}},
- {0xE517,2,{0xA1,0x92,0x00,0x00,}},
- {0xE518,2,{0xA1,0x93,0x00,0x00,}},
- {0xE519,2,{0xA1,0x94,0x00,0x00,}},
- {0xE51A,2,{0xA1,0x95,0x00,0x00,}},
- {0xE51B,2,{0xA1,0x96,0x00,0x00,}},
- {0xE51C,2,{0xA1,0x97,0x00,0x00,}},
- {0xE51D,2,{0xA1,0x98,0x00,0x00,}},
- {0xE51E,2,{0xA1,0x99,0x00,0x00,}},
- {0xE51F,2,{0xA1,0x9A,0x00,0x00,}},
- {0xE520,2,{0xA1,0x9B,0x00,0x00,}},
- {0xE521,2,{0xA1,0x9C,0x00,0x00,}},
- {0xE522,2,{0xA1,0x9D,0x00,0x00,}},
- {0xE523,2,{0xA1,0x9E,0x00,0x00,}},
- {0xE524,2,{0xA1,0x9F,0x00,0x00,}},
- {0xE525,2,{0xA1,0xA0,0x00,0x00,}},
- {0xE526,2,{0xA2,0x40,0x00,0x00,}},
- {0xE527,2,{0xA2,0x41,0x00,0x00,}},
- {0xE528,2,{0xA2,0x42,0x00,0x00,}},
- {0xE529,2,{0xA2,0x43,0x00,0x00,}},
- {0xE52A,2,{0xA2,0x44,0x00,0x00,}},
- {0xE52B,2,{0xA2,0x45,0x00,0x00,}},
- {0xE52C,2,{0xA2,0x46,0x00,0x00,}},
- {0xE52D,2,{0xA2,0x47,0x00,0x00,}},
- {0xE52E,2,{0xA2,0x48,0x00,0x00,}},
- {0xE52F,2,{0xA2,0x49,0x00,0x00,}},
- {0xE530,2,{0xA2,0x4A,0x00,0x00,}},
- {0xE531,2,{0xA2,0x4B,0x00,0x00,}},
- {0xE532,2,{0xA2,0x4C,0x00,0x00,}},
- {0xE533,2,{0xA2,0x4D,0x00,0x00,}},
- {0xE534,2,{0xA2,0x4E,0x00,0x00,}},
- {0xE535,2,{0xA2,0x4F,0x00,0x00,}},
- {0xE536,2,{0xA2,0x50,0x00,0x00,}},
- {0xE537,2,{0xA2,0x51,0x00,0x00,}},
- {0xE538,2,{0xA2,0x52,0x00,0x00,}},
- {0xE539,2,{0xA2,0x53,0x00,0x00,}},
- {0xE53A,2,{0xA2,0x54,0x00,0x00,}},
- {0xE53B,2,{0xA2,0x55,0x00,0x00,}},
- {0xE53C,2,{0xA2,0x56,0x00,0x00,}},
- {0xE53D,2,{0xA2,0x57,0x00,0x00,}},
- {0xE53E,2,{0xA2,0x58,0x00,0x00,}},
- {0xE53F,2,{0xA2,0x59,0x00,0x00,}},
- {0xE540,2,{0xA2,0x5A,0x00,0x00,}},
- {0xE541,2,{0xA2,0x5B,0x00,0x00,}},
- {0xE542,2,{0xA2,0x5C,0x00,0x00,}},
- {0xE543,2,{0xA2,0x5D,0x00,0x00,}},
- {0xE544,2,{0xA2,0x5E,0x00,0x00,}},
- {0xE545,2,{0xA2,0x5F,0x00,0x00,}},
- {0xE546,2,{0xA2,0x60,0x00,0x00,}},
- {0xE547,2,{0xA2,0x61,0x00,0x00,}},
- {0xE548,2,{0xA2,0x62,0x00,0x00,}},
- {0xE549,2,{0xA2,0x63,0x00,0x00,}},
- {0xE54A,2,{0xA2,0x64,0x00,0x00,}},
- {0xE54B,2,{0xA2,0x65,0x00,0x00,}},
- {0xE54C,2,{0xA2,0x66,0x00,0x00,}},
- {0xE54D,2,{0xA2,0x67,0x00,0x00,}},
- {0xE54E,2,{0xA2,0x68,0x00,0x00,}},
- {0xE54F,2,{0xA2,0x69,0x00,0x00,}},
- {0xE550,2,{0xA2,0x6A,0x00,0x00,}},
- {0xE551,2,{0xA2,0x6B,0x00,0x00,}},
- {0xE552,2,{0xA2,0x6C,0x00,0x00,}},
- {0xE553,2,{0xA2,0x6D,0x00,0x00,}},
- {0xE554,2,{0xA2,0x6E,0x00,0x00,}},
- {0xE555,2,{0xA2,0x6F,0x00,0x00,}},
- {0xE556,2,{0xA2,0x70,0x00,0x00,}},
- {0xE557,2,{0xA2,0x71,0x00,0x00,}},
- {0xE558,2,{0xA2,0x72,0x00,0x00,}},
- {0xE559,2,{0xA2,0x73,0x00,0x00,}},
- {0xE55A,2,{0xA2,0x74,0x00,0x00,}},
- {0xE55B,2,{0xA2,0x75,0x00,0x00,}},
- {0xE55C,2,{0xA2,0x76,0x00,0x00,}},
- {0xE55D,2,{0xA2,0x77,0x00,0x00,}},
- {0xE55E,2,{0xA2,0x78,0x00,0x00,}},
- {0xE55F,2,{0xA2,0x79,0x00,0x00,}},
- {0xE560,2,{0xA2,0x7A,0x00,0x00,}},
- {0xE561,2,{0xA2,0x7B,0x00,0x00,}},
- {0xE562,2,{0xA2,0x7C,0x00,0x00,}},
- {0xE563,2,{0xA2,0x7D,0x00,0x00,}},
- {0xE564,2,{0xA2,0x7E,0x00,0x00,}},
- {0xE565,2,{0xA2,0x80,0x00,0x00,}},
- {0xE566,2,{0xA2,0x81,0x00,0x00,}},
- {0xE567,2,{0xA2,0x82,0x00,0x00,}},
- {0xE568,2,{0xA2,0x83,0x00,0x00,}},
- {0xE569,2,{0xA2,0x84,0x00,0x00,}},
- {0xE56A,2,{0xA2,0x85,0x00,0x00,}},
- {0xE56B,2,{0xA2,0x86,0x00,0x00,}},
- {0xE56C,2,{0xA2,0x87,0x00,0x00,}},
- {0xE56D,2,{0xA2,0x88,0x00,0x00,}},
- {0xE56E,2,{0xA2,0x89,0x00,0x00,}},
- {0xE56F,2,{0xA2,0x8A,0x00,0x00,}},
- {0xE570,2,{0xA2,0x8B,0x00,0x00,}},
- {0xE571,2,{0xA2,0x8C,0x00,0x00,}},
- {0xE572,2,{0xA2,0x8D,0x00,0x00,}},
- {0xE573,2,{0xA2,0x8E,0x00,0x00,}},
- {0xE574,2,{0xA2,0x8F,0x00,0x00,}},
- {0xE575,2,{0xA2,0x90,0x00,0x00,}},
- {0xE576,2,{0xA2,0x91,0x00,0x00,}},
- {0xE577,2,{0xA2,0x92,0x00,0x00,}},
- {0xE578,2,{0xA2,0x93,0x00,0x00,}},
- {0xE579,2,{0xA2,0x94,0x00,0x00,}},
- {0xE57A,2,{0xA2,0x95,0x00,0x00,}},
- {0xE57B,2,{0xA2,0x96,0x00,0x00,}},
- {0xE57C,2,{0xA2,0x97,0x00,0x00,}},
- {0xE57D,2,{0xA2,0x98,0x00,0x00,}},
- {0xE57E,2,{0xA2,0x99,0x00,0x00,}},
- {0xE57F,2,{0xA2,0x9A,0x00,0x00,}},
- {0xE580,2,{0xA2,0x9B,0x00,0x00,}},
- {0xE581,2,{0xA2,0x9C,0x00,0x00,}},
- {0xE582,2,{0xA2,0x9D,0x00,0x00,}},
- {0xE583,2,{0xA2,0x9E,0x00,0x00,}},
- {0xE584,2,{0xA2,0x9F,0x00,0x00,}},
- {0xE585,2,{0xA2,0xA0,0x00,0x00,}},
- {0xE586,2,{0xA3,0x40,0x00,0x00,}},
- {0xE587,2,{0xA3,0x41,0x00,0x00,}},
- {0xE588,2,{0xA3,0x42,0x00,0x00,}},
- {0xE589,2,{0xA3,0x43,0x00,0x00,}},
- {0xE58A,2,{0xA3,0x44,0x00,0x00,}},
- {0xE58B,2,{0xA3,0x45,0x00,0x00,}},
- {0xE58C,2,{0xA3,0x46,0x00,0x00,}},
- {0xE58D,2,{0xA3,0x47,0x00,0x00,}},
- {0xE58E,2,{0xA3,0x48,0x00,0x00,}},
- {0xE58F,2,{0xA3,0x49,0x00,0x00,}},
- {0xE590,2,{0xA3,0x4A,0x00,0x00,}},
- {0xE591,2,{0xA3,0x4B,0x00,0x00,}},
- {0xE592,2,{0xA3,0x4C,0x00,0x00,}},
- {0xE593,2,{0xA3,0x4D,0x00,0x00,}},
- {0xE594,2,{0xA3,0x4E,0x00,0x00,}},
- {0xE595,2,{0xA3,0x4F,0x00,0x00,}},
- {0xE596,2,{0xA3,0x50,0x00,0x00,}},
- {0xE597,2,{0xA3,0x51,0x00,0x00,}},
- {0xE598,2,{0xA3,0x52,0x00,0x00,}},
- {0xE599,2,{0xA3,0x53,0x00,0x00,}},
- {0xE59A,2,{0xA3,0x54,0x00,0x00,}},
- {0xE59B,2,{0xA3,0x55,0x00,0x00,}},
- {0xE59C,2,{0xA3,0x56,0x00,0x00,}},
- {0xE59D,2,{0xA3,0x57,0x00,0x00,}},
- {0xE59E,2,{0xA3,0x58,0x00,0x00,}},
- {0xE59F,2,{0xA3,0x59,0x00,0x00,}},
- {0xE5A0,2,{0xA3,0x5A,0x00,0x00,}},
- {0xE5A1,2,{0xA3,0x5B,0x00,0x00,}},
- {0xE5A2,2,{0xA3,0x5C,0x00,0x00,}},
- {0xE5A3,2,{0xA3,0x5D,0x00,0x00,}},
- {0xE5A4,2,{0xA3,0x5E,0x00,0x00,}},
- {0xE5A5,2,{0xA3,0x5F,0x00,0x00,}},
- {0xE5A6,2,{0xA3,0x60,0x00,0x00,}},
- {0xE5A7,2,{0xA3,0x61,0x00,0x00,}},
- {0xE5A8,2,{0xA3,0x62,0x00,0x00,}},
- {0xE5A9,2,{0xA3,0x63,0x00,0x00,}},
- {0xE5AA,2,{0xA3,0x64,0x00,0x00,}},
- {0xE5AB,2,{0xA3,0x65,0x00,0x00,}},
- {0xE5AC,2,{0xA3,0x66,0x00,0x00,}},
- {0xE5AD,2,{0xA3,0x67,0x00,0x00,}},
- {0xE5AE,2,{0xA3,0x68,0x00,0x00,}},
- {0xE5AF,2,{0xA3,0x69,0x00,0x00,}},
- {0xE5B0,2,{0xA3,0x6A,0x00,0x00,}},
- {0xE5B1,2,{0xA3,0x6B,0x00,0x00,}},
- {0xE5B2,2,{0xA3,0x6C,0x00,0x00,}},
- {0xE5B3,2,{0xA3,0x6D,0x00,0x00,}},
- {0xE5B4,2,{0xA3,0x6E,0x00,0x00,}},
- {0xE5B5,2,{0xA3,0x6F,0x00,0x00,}},
- {0xE5B6,2,{0xA3,0x70,0x00,0x00,}},
- {0xE5B7,2,{0xA3,0x71,0x00,0x00,}},
- {0xE5B8,2,{0xA3,0x72,0x00,0x00,}},
- {0xE5B9,2,{0xA3,0x73,0x00,0x00,}},
- {0xE5BA,2,{0xA3,0x74,0x00,0x00,}},
- {0xE5BB,2,{0xA3,0x75,0x00,0x00,}},
- {0xE5BC,2,{0xA3,0x76,0x00,0x00,}},
- {0xE5BD,2,{0xA3,0x77,0x00,0x00,}},
- {0xE5BE,2,{0xA3,0x78,0x00,0x00,}},
- {0xE5BF,2,{0xA3,0x79,0x00,0x00,}},
- {0xE5C0,2,{0xA3,0x7A,0x00,0x00,}},
- {0xE5C1,2,{0xA3,0x7B,0x00,0x00,}},
- {0xE5C2,2,{0xA3,0x7C,0x00,0x00,}},
- {0xE5C3,2,{0xA3,0x7D,0x00,0x00,}},
- {0xE5C4,2,{0xA3,0x7E,0x00,0x00,}},
- {0xE5C5,2,{0xA3,0x80,0x00,0x00,}},
- {0xE5C6,2,{0xA3,0x81,0x00,0x00,}},
- {0xE5C7,2,{0xA3,0x82,0x00,0x00,}},
- {0xE5C8,2,{0xA3,0x83,0x00,0x00,}},
- {0xE5C9,2,{0xA3,0x84,0x00,0x00,}},
- {0xE5CA,2,{0xA3,0x85,0x00,0x00,}},
- {0xE5CB,2,{0xA3,0x86,0x00,0x00,}},
- {0xE5CC,2,{0xA3,0x87,0x00,0x00,}},
- {0xE5CD,2,{0xA3,0x88,0x00,0x00,}},
- {0xE5CE,2,{0xA3,0x89,0x00,0x00,}},
- {0xE5CF,2,{0xA3,0x8A,0x00,0x00,}},
- {0xE5D0,2,{0xA3,0x8B,0x00,0x00,}},
- {0xE5D1,2,{0xA3,0x8C,0x00,0x00,}},
- {0xE5D2,2,{0xA3,0x8D,0x00,0x00,}},
- {0xE5D3,2,{0xA3,0x8E,0x00,0x00,}},
- {0xE5D4,2,{0xA3,0x8F,0x00,0x00,}},
- {0xE5D5,2,{0xA3,0x90,0x00,0x00,}},
- {0xE5D6,2,{0xA3,0x91,0x00,0x00,}},
- {0xE5D7,2,{0xA3,0x92,0x00,0x00,}},
- {0xE5D8,2,{0xA3,0x93,0x00,0x00,}},
- {0xE5D9,2,{0xA3,0x94,0x00,0x00,}},
- {0xE5DA,2,{0xA3,0x95,0x00,0x00,}},
- {0xE5DB,2,{0xA3,0x96,0x00,0x00,}},
- {0xE5DC,2,{0xA3,0x97,0x00,0x00,}},
- {0xE5DD,2,{0xA3,0x98,0x00,0x00,}},
- {0xE5DE,2,{0xA3,0x99,0x00,0x00,}},
- {0xE5DF,2,{0xA3,0x9A,0x00,0x00,}},
- {0xE5E0,2,{0xA3,0x9B,0x00,0x00,}},
- {0xE5E1,2,{0xA3,0x9C,0x00,0x00,}},
- {0xE5E2,2,{0xA3,0x9D,0x00,0x00,}},
- {0xE5E3,2,{0xA3,0x9E,0x00,0x00,}},
- {0xE5E4,2,{0xA3,0x9F,0x00,0x00,}},
- {0xE5E5,2,{0xA3,0xA0,0x00,0x00,}},
- {0xE5E6,2,{0xA4,0x40,0x00,0x00,}},
- {0xE5E7,2,{0xA4,0x41,0x00,0x00,}},
- {0xE5E8,2,{0xA4,0x42,0x00,0x00,}},
- {0xE5E9,2,{0xA4,0x43,0x00,0x00,}},
- {0xE5EA,2,{0xA4,0x44,0x00,0x00,}},
- {0xE5EB,2,{0xA4,0x45,0x00,0x00,}},
- {0xE5EC,2,{0xA4,0x46,0x00,0x00,}},
- {0xE5ED,2,{0xA4,0x47,0x00,0x00,}},
- {0xE5EE,2,{0xA4,0x48,0x00,0x00,}},
- {0xE5EF,2,{0xA4,0x49,0x00,0x00,}},
- {0xE5F0,2,{0xA4,0x4A,0x00,0x00,}},
- {0xE5F1,2,{0xA4,0x4B,0x00,0x00,}},
- {0xE5F2,2,{0xA4,0x4C,0x00,0x00,}},
- {0xE5F3,2,{0xA4,0x4D,0x00,0x00,}},
- {0xE5F4,2,{0xA4,0x4E,0x00,0x00,}},
- {0xE5F5,2,{0xA4,0x4F,0x00,0x00,}},
- {0xE5F6,2,{0xA4,0x50,0x00,0x00,}},
- {0xE5F7,2,{0xA4,0x51,0x00,0x00,}},
- {0xE5F8,2,{0xA4,0x52,0x00,0x00,}},
- {0xE5F9,2,{0xA4,0x53,0x00,0x00,}},
- {0xE5FA,2,{0xA4,0x54,0x00,0x00,}},
- {0xE5FB,2,{0xA4,0x55,0x00,0x00,}},
- {0xE5FC,2,{0xA4,0x56,0x00,0x00,}},
- {0xE5FD,2,{0xA4,0x57,0x00,0x00,}},
- {0xE5FE,2,{0xA4,0x58,0x00,0x00,}},
- {0xE5FF,2,{0xA4,0x59,0x00,0x00,}},
- {0xE600,2,{0xA4,0x5A,0x00,0x00,}},
- {0xE601,2,{0xA4,0x5B,0x00,0x00,}},
- {0xE602,2,{0xA4,0x5C,0x00,0x00,}},
- {0xE603,2,{0xA4,0x5D,0x00,0x00,}},
- {0xE604,2,{0xA4,0x5E,0x00,0x00,}},
- {0xE605,2,{0xA4,0x5F,0x00,0x00,}},
- {0xE606,2,{0xA4,0x60,0x00,0x00,}},
- {0xE607,2,{0xA4,0x61,0x00,0x00,}},
- {0xE608,2,{0xA4,0x62,0x00,0x00,}},
- {0xE609,2,{0xA4,0x63,0x00,0x00,}},
- {0xE60A,2,{0xA4,0x64,0x00,0x00,}},
- {0xE60B,2,{0xA4,0x65,0x00,0x00,}},
- {0xE60C,2,{0xA4,0x66,0x00,0x00,}},
- {0xE60D,2,{0xA4,0x67,0x00,0x00,}},
- {0xE60E,2,{0xA4,0x68,0x00,0x00,}},
- {0xE60F,2,{0xA4,0x69,0x00,0x00,}},
- {0xE610,2,{0xA4,0x6A,0x00,0x00,}},
- {0xE611,2,{0xA4,0x6B,0x00,0x00,}},
- {0xE612,2,{0xA4,0x6C,0x00,0x00,}},
- {0xE613,2,{0xA4,0x6D,0x00,0x00,}},
- {0xE614,2,{0xA4,0x6E,0x00,0x00,}},
- {0xE615,2,{0xA4,0x6F,0x00,0x00,}},
- {0xE616,2,{0xA4,0x70,0x00,0x00,}},
- {0xE617,2,{0xA4,0x71,0x00,0x00,}},
- {0xE618,2,{0xA4,0x72,0x00,0x00,}},
- {0xE619,2,{0xA4,0x73,0x00,0x00,}},
- {0xE61A,2,{0xA4,0x74,0x00,0x00,}},
- {0xE61B,2,{0xA4,0x75,0x00,0x00,}},
- {0xE61C,2,{0xA4,0x76,0x00,0x00,}},
- {0xE61D,2,{0xA4,0x77,0x00,0x00,}},
- {0xE61E,2,{0xA4,0x78,0x00,0x00,}},
- {0xE61F,2,{0xA4,0x79,0x00,0x00,}},
- {0xE620,2,{0xA4,0x7A,0x00,0x00,}},
- {0xE621,2,{0xA4,0x7B,0x00,0x00,}},
- {0xE622,2,{0xA4,0x7C,0x00,0x00,}},
- {0xE623,2,{0xA4,0x7D,0x00,0x00,}},
- {0xE624,2,{0xA4,0x7E,0x00,0x00,}},
- {0xE625,2,{0xA4,0x80,0x00,0x00,}},
- {0xE626,2,{0xA4,0x81,0x00,0x00,}},
- {0xE627,2,{0xA4,0x82,0x00,0x00,}},
- {0xE628,2,{0xA4,0x83,0x00,0x00,}},
- {0xE629,2,{0xA4,0x84,0x00,0x00,}},
- {0xE62A,2,{0xA4,0x85,0x00,0x00,}},
- {0xE62B,2,{0xA4,0x86,0x00,0x00,}},
- {0xE62C,2,{0xA4,0x87,0x00,0x00,}},
- {0xE62D,2,{0xA4,0x88,0x00,0x00,}},
- {0xE62E,2,{0xA4,0x89,0x00,0x00,}},
- {0xE62F,2,{0xA4,0x8A,0x00,0x00,}},
- {0xE630,2,{0xA4,0x8B,0x00,0x00,}},
- {0xE631,2,{0xA4,0x8C,0x00,0x00,}},
- {0xE632,2,{0xA4,0x8D,0x00,0x00,}},
- {0xE633,2,{0xA4,0x8E,0x00,0x00,}},
- {0xE634,2,{0xA4,0x8F,0x00,0x00,}},
- {0xE635,2,{0xA4,0x90,0x00,0x00,}},
- {0xE636,2,{0xA4,0x91,0x00,0x00,}},
- {0xE637,2,{0xA4,0x92,0x00,0x00,}},
- {0xE638,2,{0xA4,0x93,0x00,0x00,}},
- {0xE639,2,{0xA4,0x94,0x00,0x00,}},
- {0xE63A,2,{0xA4,0x95,0x00,0x00,}},
- {0xE63B,2,{0xA4,0x96,0x00,0x00,}},
- {0xE63C,2,{0xA4,0x97,0x00,0x00,}},
- {0xE63D,2,{0xA4,0x98,0x00,0x00,}},
- {0xE63E,2,{0xA4,0x99,0x00,0x00,}},
- {0xE63F,2,{0xA4,0x9A,0x00,0x00,}},
- {0xE640,2,{0xA4,0x9B,0x00,0x00,}},
- {0xE641,2,{0xA4,0x9C,0x00,0x00,}},
- {0xE642,2,{0xA4,0x9D,0x00,0x00,}},
- {0xE643,2,{0xA4,0x9E,0x00,0x00,}},
- {0xE644,2,{0xA4,0x9F,0x00,0x00,}},
- {0xE645,2,{0xA4,0xA0,0x00,0x00,}},
- {0xE646,2,{0xA5,0x40,0x00,0x00,}},
- {0xE647,2,{0xA5,0x41,0x00,0x00,}},
- {0xE648,2,{0xA5,0x42,0x00,0x00,}},
- {0xE649,2,{0xA5,0x43,0x00,0x00,}},
- {0xE64A,2,{0xA5,0x44,0x00,0x00,}},
- {0xE64B,2,{0xA5,0x45,0x00,0x00,}},
- {0xE64C,2,{0xA5,0x46,0x00,0x00,}},
- {0xE64D,2,{0xA5,0x47,0x00,0x00,}},
- {0xE64E,2,{0xA5,0x48,0x00,0x00,}},
- {0xE64F,2,{0xA5,0x49,0x00,0x00,}},
- {0xE650,2,{0xA5,0x4A,0x00,0x00,}},
- {0xE651,2,{0xA5,0x4B,0x00,0x00,}},
- {0xE652,2,{0xA5,0x4C,0x00,0x00,}},
- {0xE653,2,{0xA5,0x4D,0x00,0x00,}},
- {0xE654,2,{0xA5,0x4E,0x00,0x00,}},
- {0xE655,2,{0xA5,0x4F,0x00,0x00,}},
- {0xE656,2,{0xA5,0x50,0x00,0x00,}},
- {0xE657,2,{0xA5,0x51,0x00,0x00,}},
- {0xE658,2,{0xA5,0x52,0x00,0x00,}},
- {0xE659,2,{0xA5,0x53,0x00,0x00,}},
- {0xE65A,2,{0xA5,0x54,0x00,0x00,}},
- {0xE65B,2,{0xA5,0x55,0x00,0x00,}},
- {0xE65C,2,{0xA5,0x56,0x00,0x00,}},
- {0xE65D,2,{0xA5,0x57,0x00,0x00,}},
- {0xE65E,2,{0xA5,0x58,0x00,0x00,}},
- {0xE65F,2,{0xA5,0x59,0x00,0x00,}},
- {0xE660,2,{0xA5,0x5A,0x00,0x00,}},
- {0xE661,2,{0xA5,0x5B,0x00,0x00,}},
- {0xE662,2,{0xA5,0x5C,0x00,0x00,}},
- {0xE663,2,{0xA5,0x5D,0x00,0x00,}},
- {0xE664,2,{0xA5,0x5E,0x00,0x00,}},
- {0xE665,2,{0xA5,0x5F,0x00,0x00,}},
- {0xE666,2,{0xA5,0x60,0x00,0x00,}},
- {0xE667,2,{0xA5,0x61,0x00,0x00,}},
- {0xE668,2,{0xA5,0x62,0x00,0x00,}},
- {0xE669,2,{0xA5,0x63,0x00,0x00,}},
- {0xE66A,2,{0xA5,0x64,0x00,0x00,}},
- {0xE66B,2,{0xA5,0x65,0x00,0x00,}},
- {0xE66C,2,{0xA5,0x66,0x00,0x00,}},
- {0xE66D,2,{0xA5,0x67,0x00,0x00,}},
- {0xE66E,2,{0xA5,0x68,0x00,0x00,}},
- {0xE66F,2,{0xA5,0x69,0x00,0x00,}},
- {0xE670,2,{0xA5,0x6A,0x00,0x00,}},
- {0xE671,2,{0xA5,0x6B,0x00,0x00,}},
- {0xE672,2,{0xA5,0x6C,0x00,0x00,}},
- {0xE673,2,{0xA5,0x6D,0x00,0x00,}},
- {0xE674,2,{0xA5,0x6E,0x00,0x00,}},
- {0xE675,2,{0xA5,0x6F,0x00,0x00,}},
- {0xE676,2,{0xA5,0x70,0x00,0x00,}},
- {0xE677,2,{0xA5,0x71,0x00,0x00,}},
- {0xE678,2,{0xA5,0x72,0x00,0x00,}},
- {0xE679,2,{0xA5,0x73,0x00,0x00,}},
- {0xE67A,2,{0xA5,0x74,0x00,0x00,}},
- {0xE67B,2,{0xA5,0x75,0x00,0x00,}},
- {0xE67C,2,{0xA5,0x76,0x00,0x00,}},
- {0xE67D,2,{0xA5,0x77,0x00,0x00,}},
- {0xE67E,2,{0xA5,0x78,0x00,0x00,}},
- {0xE67F,2,{0xA5,0x79,0x00,0x00,}},
- {0xE680,2,{0xA5,0x7A,0x00,0x00,}},
- {0xE681,2,{0xA5,0x7B,0x00,0x00,}},
- {0xE682,2,{0xA5,0x7C,0x00,0x00,}},
- {0xE683,2,{0xA5,0x7D,0x00,0x00,}},
- {0xE684,2,{0xA5,0x7E,0x00,0x00,}},
- {0xE685,2,{0xA5,0x80,0x00,0x00,}},
- {0xE686,2,{0xA5,0x81,0x00,0x00,}},
- {0xE687,2,{0xA5,0x82,0x00,0x00,}},
- {0xE688,2,{0xA5,0x83,0x00,0x00,}},
- {0xE689,2,{0xA5,0x84,0x00,0x00,}},
- {0xE68A,2,{0xA5,0x85,0x00,0x00,}},
- {0xE68B,2,{0xA5,0x86,0x00,0x00,}},
- {0xE68C,2,{0xA5,0x87,0x00,0x00,}},
- {0xE68D,2,{0xA5,0x88,0x00,0x00,}},
- {0xE68E,2,{0xA5,0x89,0x00,0x00,}},
- {0xE68F,2,{0xA5,0x8A,0x00,0x00,}},
- {0xE690,2,{0xA5,0x8B,0x00,0x00,}},
- {0xE691,2,{0xA5,0x8C,0x00,0x00,}},
- {0xE692,2,{0xA5,0x8D,0x00,0x00,}},
- {0xE693,2,{0xA5,0x8E,0x00,0x00,}},
- {0xE694,2,{0xA5,0x8F,0x00,0x00,}},
- {0xE695,2,{0xA5,0x90,0x00,0x00,}},
- {0xE696,2,{0xA5,0x91,0x00,0x00,}},
- {0xE697,2,{0xA5,0x92,0x00,0x00,}},
- {0xE698,2,{0xA5,0x93,0x00,0x00,}},
- {0xE699,2,{0xA5,0x94,0x00,0x00,}},
- {0xE69A,2,{0xA5,0x95,0x00,0x00,}},
- {0xE69B,2,{0xA5,0x96,0x00,0x00,}},
- {0xE69C,2,{0xA5,0x97,0x00,0x00,}},
- {0xE69D,2,{0xA5,0x98,0x00,0x00,}},
- {0xE69E,2,{0xA5,0x99,0x00,0x00,}},
- {0xE69F,2,{0xA5,0x9A,0x00,0x00,}},
- {0xE6A0,2,{0xA5,0x9B,0x00,0x00,}},
- {0xE6A1,2,{0xA5,0x9C,0x00,0x00,}},
- {0xE6A2,2,{0xA5,0x9D,0x00,0x00,}},
- {0xE6A3,2,{0xA5,0x9E,0x00,0x00,}},
- {0xE6A4,2,{0xA5,0x9F,0x00,0x00,}},
- {0xE6A5,2,{0xA5,0xA0,0x00,0x00,}},
- {0xE6A6,2,{0xA6,0x40,0x00,0x00,}},
- {0xE6A7,2,{0xA6,0x41,0x00,0x00,}},
- {0xE6A8,2,{0xA6,0x42,0x00,0x00,}},
- {0xE6A9,2,{0xA6,0x43,0x00,0x00,}},
- {0xE6AA,2,{0xA6,0x44,0x00,0x00,}},
- {0xE6AB,2,{0xA6,0x45,0x00,0x00,}},
- {0xE6AC,2,{0xA6,0x46,0x00,0x00,}},
- {0xE6AD,2,{0xA6,0x47,0x00,0x00,}},
- {0xE6AE,2,{0xA6,0x48,0x00,0x00,}},
- {0xE6AF,2,{0xA6,0x49,0x00,0x00,}},
- {0xE6B0,2,{0xA6,0x4A,0x00,0x00,}},
- {0xE6B1,2,{0xA6,0x4B,0x00,0x00,}},
- {0xE6B2,2,{0xA6,0x4C,0x00,0x00,}},
- {0xE6B3,2,{0xA6,0x4D,0x00,0x00,}},
- {0xE6B4,2,{0xA6,0x4E,0x00,0x00,}},
- {0xE6B5,2,{0xA6,0x4F,0x00,0x00,}},
- {0xE6B6,2,{0xA6,0x50,0x00,0x00,}},
- {0xE6B7,2,{0xA6,0x51,0x00,0x00,}},
- {0xE6B8,2,{0xA6,0x52,0x00,0x00,}},
- {0xE6B9,2,{0xA6,0x53,0x00,0x00,}},
- {0xE6BA,2,{0xA6,0x54,0x00,0x00,}},
- {0xE6BB,2,{0xA6,0x55,0x00,0x00,}},
- {0xE6BC,2,{0xA6,0x56,0x00,0x00,}},
- {0xE6BD,2,{0xA6,0x57,0x00,0x00,}},
- {0xE6BE,2,{0xA6,0x58,0x00,0x00,}},
- {0xE6BF,2,{0xA6,0x59,0x00,0x00,}},
- {0xE6C0,2,{0xA6,0x5A,0x00,0x00,}},
- {0xE6C1,2,{0xA6,0x5B,0x00,0x00,}},
- {0xE6C2,2,{0xA6,0x5C,0x00,0x00,}},
- {0xE6C3,2,{0xA6,0x5D,0x00,0x00,}},
- {0xE6C4,2,{0xA6,0x5E,0x00,0x00,}},
- {0xE6C5,2,{0xA6,0x5F,0x00,0x00,}},
- {0xE6C6,2,{0xA6,0x60,0x00,0x00,}},
- {0xE6C7,2,{0xA6,0x61,0x00,0x00,}},
- {0xE6C8,2,{0xA6,0x62,0x00,0x00,}},
- {0xE6C9,2,{0xA6,0x63,0x00,0x00,}},
- {0xE6CA,2,{0xA6,0x64,0x00,0x00,}},
- {0xE6CB,2,{0xA6,0x65,0x00,0x00,}},
- {0xE6CC,2,{0xA6,0x66,0x00,0x00,}},
- {0xE6CD,2,{0xA6,0x67,0x00,0x00,}},
- {0xE6CE,2,{0xA6,0x68,0x00,0x00,}},
- {0xE6CF,2,{0xA6,0x69,0x00,0x00,}},
- {0xE6D0,2,{0xA6,0x6A,0x00,0x00,}},
- {0xE6D1,2,{0xA6,0x6B,0x00,0x00,}},
- {0xE6D2,2,{0xA6,0x6C,0x00,0x00,}},
- {0xE6D3,2,{0xA6,0x6D,0x00,0x00,}},
- {0xE6D4,2,{0xA6,0x6E,0x00,0x00,}},
- {0xE6D5,2,{0xA6,0x6F,0x00,0x00,}},
- {0xE6D6,2,{0xA6,0x70,0x00,0x00,}},
- {0xE6D7,2,{0xA6,0x71,0x00,0x00,}},
- {0xE6D8,2,{0xA6,0x72,0x00,0x00,}},
- {0xE6D9,2,{0xA6,0x73,0x00,0x00,}},
- {0xE6DA,2,{0xA6,0x74,0x00,0x00,}},
- {0xE6DB,2,{0xA6,0x75,0x00,0x00,}},
- {0xE6DC,2,{0xA6,0x76,0x00,0x00,}},
- {0xE6DD,2,{0xA6,0x77,0x00,0x00,}},
- {0xE6DE,2,{0xA6,0x78,0x00,0x00,}},
- {0xE6DF,2,{0xA6,0x79,0x00,0x00,}},
- {0xE6E0,2,{0xA6,0x7A,0x00,0x00,}},
- {0xE6E1,2,{0xA6,0x7B,0x00,0x00,}},
- {0xE6E2,2,{0xA6,0x7C,0x00,0x00,}},
- {0xE6E3,2,{0xA6,0x7D,0x00,0x00,}},
- {0xE6E4,2,{0xA6,0x7E,0x00,0x00,}},
- {0xE6E5,2,{0xA6,0x80,0x00,0x00,}},
- {0xE6E6,2,{0xA6,0x81,0x00,0x00,}},
- {0xE6E7,2,{0xA6,0x82,0x00,0x00,}},
- {0xE6E8,2,{0xA6,0x83,0x00,0x00,}},
- {0xE6E9,2,{0xA6,0x84,0x00,0x00,}},
- {0xE6EA,2,{0xA6,0x85,0x00,0x00,}},
- {0xE6EB,2,{0xA6,0x86,0x00,0x00,}},
- {0xE6EC,2,{0xA6,0x87,0x00,0x00,}},
- {0xE6ED,2,{0xA6,0x88,0x00,0x00,}},
- {0xE6EE,2,{0xA6,0x89,0x00,0x00,}},
- {0xE6EF,2,{0xA6,0x8A,0x00,0x00,}},
- {0xE6F0,2,{0xA6,0x8B,0x00,0x00,}},
- {0xE6F1,2,{0xA6,0x8C,0x00,0x00,}},
- {0xE6F2,2,{0xA6,0x8D,0x00,0x00,}},
- {0xE6F3,2,{0xA6,0x8E,0x00,0x00,}},
- {0xE6F4,2,{0xA6,0x8F,0x00,0x00,}},
- {0xE6F5,2,{0xA6,0x90,0x00,0x00,}},
- {0xE6F6,2,{0xA6,0x91,0x00,0x00,}},
- {0xE6F7,2,{0xA6,0x92,0x00,0x00,}},
- {0xE6F8,2,{0xA6,0x93,0x00,0x00,}},
- {0xE6F9,2,{0xA6,0x94,0x00,0x00,}},
- {0xE6FA,2,{0xA6,0x95,0x00,0x00,}},
- {0xE6FB,2,{0xA6,0x96,0x00,0x00,}},
- {0xE6FC,2,{0xA6,0x97,0x00,0x00,}},
- {0xE6FD,2,{0xA6,0x98,0x00,0x00,}},
- {0xE6FE,2,{0xA6,0x99,0x00,0x00,}},
- {0xE6FF,2,{0xA6,0x9A,0x00,0x00,}},
- {0xE700,2,{0xA6,0x9B,0x00,0x00,}},
- {0xE701,2,{0xA6,0x9C,0x00,0x00,}},
- {0xE702,2,{0xA6,0x9D,0x00,0x00,}},
- {0xE703,2,{0xA6,0x9E,0x00,0x00,}},
- {0xE704,2,{0xA6,0x9F,0x00,0x00,}},
- {0xE705,2,{0xA6,0xA0,0x00,0x00,}},
- {0xE706,2,{0xA7,0x40,0x00,0x00,}},
- {0xE707,2,{0xA7,0x41,0x00,0x00,}},
- {0xE708,2,{0xA7,0x42,0x00,0x00,}},
- {0xE709,2,{0xA7,0x43,0x00,0x00,}},
- {0xE70A,2,{0xA7,0x44,0x00,0x00,}},
- {0xE70B,2,{0xA7,0x45,0x00,0x00,}},
- {0xE70C,2,{0xA7,0x46,0x00,0x00,}},
- {0xE70D,2,{0xA7,0x47,0x00,0x00,}},
- {0xE70E,2,{0xA7,0x48,0x00,0x00,}},
- {0xE70F,2,{0xA7,0x49,0x00,0x00,}},
- {0xE710,2,{0xA7,0x4A,0x00,0x00,}},
- {0xE711,2,{0xA7,0x4B,0x00,0x00,}},
- {0xE712,2,{0xA7,0x4C,0x00,0x00,}},
- {0xE713,2,{0xA7,0x4D,0x00,0x00,}},
- {0xE714,2,{0xA7,0x4E,0x00,0x00,}},
- {0xE715,2,{0xA7,0x4F,0x00,0x00,}},
- {0xE716,2,{0xA7,0x50,0x00,0x00,}},
- {0xE717,2,{0xA7,0x51,0x00,0x00,}},
- {0xE718,2,{0xA7,0x52,0x00,0x00,}},
- {0xE719,2,{0xA7,0x53,0x00,0x00,}},
- {0xE71A,2,{0xA7,0x54,0x00,0x00,}},
- {0xE71B,2,{0xA7,0x55,0x00,0x00,}},
- {0xE71C,2,{0xA7,0x56,0x00,0x00,}},
- {0xE71D,2,{0xA7,0x57,0x00,0x00,}},
- {0xE71E,2,{0xA7,0x58,0x00,0x00,}},
- {0xE71F,2,{0xA7,0x59,0x00,0x00,}},
- {0xE720,2,{0xA7,0x5A,0x00,0x00,}},
- {0xE721,2,{0xA7,0x5B,0x00,0x00,}},
- {0xE722,2,{0xA7,0x5C,0x00,0x00,}},
- {0xE723,2,{0xA7,0x5D,0x00,0x00,}},
- {0xE724,2,{0xA7,0x5E,0x00,0x00,}},
- {0xE725,2,{0xA7,0x5F,0x00,0x00,}},
- {0xE726,2,{0xA7,0x60,0x00,0x00,}},
- {0xE727,2,{0xA7,0x61,0x00,0x00,}},
- {0xE728,2,{0xA7,0x62,0x00,0x00,}},
- {0xE729,2,{0xA7,0x63,0x00,0x00,}},
- {0xE72A,2,{0xA7,0x64,0x00,0x00,}},
- {0xE72B,2,{0xA7,0x65,0x00,0x00,}},
- {0xE72C,2,{0xA7,0x66,0x00,0x00,}},
- {0xE72D,2,{0xA7,0x67,0x00,0x00,}},
- {0xE72E,2,{0xA7,0x68,0x00,0x00,}},
- {0xE72F,2,{0xA7,0x69,0x00,0x00,}},
- {0xE730,2,{0xA7,0x6A,0x00,0x00,}},
- {0xE731,2,{0xA7,0x6B,0x00,0x00,}},
- {0xE732,2,{0xA7,0x6C,0x00,0x00,}},
- {0xE733,2,{0xA7,0x6D,0x00,0x00,}},
- {0xE734,2,{0xA7,0x6E,0x00,0x00,}},
- {0xE735,2,{0xA7,0x6F,0x00,0x00,}},
- {0xE736,2,{0xA7,0x70,0x00,0x00,}},
- {0xE737,2,{0xA7,0x71,0x00,0x00,}},
- {0xE738,2,{0xA7,0x72,0x00,0x00,}},
- {0xE739,2,{0xA7,0x73,0x00,0x00,}},
- {0xE73A,2,{0xA7,0x74,0x00,0x00,}},
- {0xE73B,2,{0xA7,0x75,0x00,0x00,}},
- {0xE73C,2,{0xA7,0x76,0x00,0x00,}},
- {0xE73D,2,{0xA7,0x77,0x00,0x00,}},
- {0xE73E,2,{0xA7,0x78,0x00,0x00,}},
- {0xE73F,2,{0xA7,0x79,0x00,0x00,}},
- {0xE740,2,{0xA7,0x7A,0x00,0x00,}},
- {0xE741,2,{0xA7,0x7B,0x00,0x00,}},
- {0xE742,2,{0xA7,0x7C,0x00,0x00,}},
- {0xE743,2,{0xA7,0x7D,0x00,0x00,}},
- {0xE744,2,{0xA7,0x7E,0x00,0x00,}},
- {0xE745,2,{0xA7,0x80,0x00,0x00,}},
- {0xE746,2,{0xA7,0x81,0x00,0x00,}},
- {0xE747,2,{0xA7,0x82,0x00,0x00,}},
- {0xE748,2,{0xA7,0x83,0x00,0x00,}},
- {0xE749,2,{0xA7,0x84,0x00,0x00,}},
- {0xE74A,2,{0xA7,0x85,0x00,0x00,}},
- {0xE74B,2,{0xA7,0x86,0x00,0x00,}},
- {0xE74C,2,{0xA7,0x87,0x00,0x00,}},
- {0xE74D,2,{0xA7,0x88,0x00,0x00,}},
- {0xE74E,2,{0xA7,0x89,0x00,0x00,}},
- {0xE74F,2,{0xA7,0x8A,0x00,0x00,}},
- {0xE750,2,{0xA7,0x8B,0x00,0x00,}},
- {0xE751,2,{0xA7,0x8C,0x00,0x00,}},
- {0xE752,2,{0xA7,0x8D,0x00,0x00,}},
- {0xE753,2,{0xA7,0x8E,0x00,0x00,}},
- {0xE754,2,{0xA7,0x8F,0x00,0x00,}},
- {0xE755,2,{0xA7,0x90,0x00,0x00,}},
- {0xE756,2,{0xA7,0x91,0x00,0x00,}},
- {0xE757,2,{0xA7,0x92,0x00,0x00,}},
- {0xE758,2,{0xA7,0x93,0x00,0x00,}},
- {0xE759,2,{0xA7,0x94,0x00,0x00,}},
- {0xE75A,2,{0xA7,0x95,0x00,0x00,}},
- {0xE75B,2,{0xA7,0x96,0x00,0x00,}},
- {0xE75C,2,{0xA7,0x97,0x00,0x00,}},
- {0xE75D,2,{0xA7,0x98,0x00,0x00,}},
- {0xE75E,2,{0xA7,0x99,0x00,0x00,}},
- {0xE75F,2,{0xA7,0x9A,0x00,0x00,}},
- {0xE760,2,{0xA7,0x9B,0x00,0x00,}},
- {0xE761,2,{0xA7,0x9C,0x00,0x00,}},
- {0xE762,2,{0xA7,0x9D,0x00,0x00,}},
- {0xE763,2,{0xA7,0x9E,0x00,0x00,}},
- {0xE764,2,{0xA7,0x9F,0x00,0x00,}},
- {0xE765,2,{0xA7,0xA0,0x00,0x00,}},
- {0xE766,2,{0xA2,0xAB,0x00,0x00,}},
- {0xE767,2,{0xA2,0xAC,0x00,0x00,}},
- {0xE768,2,{0xA2,0xAD,0x00,0x00,}},
- {0xE769,2,{0xA2,0xAE,0x00,0x00,}},
- {0xE76A,2,{0xA2,0xAF,0x00,0x00,}},
- {0xE76B,2,{0xA2,0xB0,0x00,0x00,}},
- {0xE76C,4,{0x83,0x36,0xC7,0x39,}},
- {0xE76D,2,{0xA2,0xE4,0x00,0x00,}},
- {0xE76E,2,{0xA2,0xEF,0x00,0x00,}},
- {0xE76F,2,{0xA2,0xF0,0x00,0x00,}},
- {0xE770,2,{0xA2,0xFD,0x00,0x00,}},
- {0xE771,2,{0xA2,0xFE,0x00,0x00,}},
- {0xE772,2,{0xA4,0xF4,0x00,0x00,}},
- {0xE773,2,{0xA4,0xF5,0x00,0x00,}},
- {0xE774,2,{0xA4,0xF6,0x00,0x00,}},
- {0xE775,2,{0xA4,0xF7,0x00,0x00,}},
- {0xE776,2,{0xA4,0xF8,0x00,0x00,}},
- {0xE777,2,{0xA4,0xF9,0x00,0x00,}},
- {0xE778,2,{0xA4,0xFA,0x00,0x00,}},
- {0xE779,2,{0xA4,0xFB,0x00,0x00,}},
- {0xE77A,2,{0xA4,0xFC,0x00,0x00,}},
- {0xE77B,2,{0xA4,0xFD,0x00,0x00,}},
- {0xE77C,2,{0xA4,0xFE,0x00,0x00,}},
- {0xE77D,2,{0xA5,0xF7,0x00,0x00,}},
- {0xE77E,2,{0xA5,0xF8,0x00,0x00,}},
- {0xE77F,2,{0xA5,0xF9,0x00,0x00,}},
- {0xE780,2,{0xA5,0xFA,0x00,0x00,}},
- {0xE781,2,{0xA5,0xFB,0x00,0x00,}},
- {0xE782,2,{0xA5,0xFC,0x00,0x00,}},
- {0xE783,2,{0xA5,0xFD,0x00,0x00,}},
- {0xE784,2,{0xA5,0xFE,0x00,0x00,}},
- {0xE785,2,{0xA6,0xB9,0x00,0x00,}},
- {0xE786,2,{0xA6,0xBA,0x00,0x00,}},
- {0xE787,2,{0xA6,0xBB,0x00,0x00,}},
- {0xE788,2,{0xA6,0xBC,0x00,0x00,}},
- {0xE789,2,{0xA6,0xBD,0x00,0x00,}},
- {0xE78A,2,{0xA6,0xBE,0x00,0x00,}},
- {0xE78B,2,{0xA6,0xBF,0x00,0x00,}},
- {0xE78C,2,{0xA6,0xC0,0x00,0x00,}},
- {0xE78D,2,{0xA6,0xD9,0x00,0x00,}},
- {0xE78E,2,{0xA6,0xDA,0x00,0x00,}},
- {0xE78F,2,{0xA6,0xDB,0x00,0x00,}},
- {0xE790,2,{0xA6,0xDC,0x00,0x00,}},
- {0xE791,2,{0xA6,0xDD,0x00,0x00,}},
- {0xE792,2,{0xA6,0xDE,0x00,0x00,}},
- {0xE793,2,{0xA6,0xDF,0x00,0x00,}},
- {0xE794,2,{0xA6,0xEC,0x00,0x00,}},
- {0xE795,2,{0xA6,0xED,0x00,0x00,}},
- {0xE796,2,{0xA6,0xF3,0x00,0x00,}},
- {0xE797,2,{0xA6,0xF6,0x00,0x00,}},
- {0xE798,2,{0xA6,0xF7,0x00,0x00,}},
- {0xE799,2,{0xA6,0xF8,0x00,0x00,}},
- {0xE79A,2,{0xA6,0xF9,0x00,0x00,}},
- {0xE79B,2,{0xA6,0xFA,0x00,0x00,}},
- {0xE79C,2,{0xA6,0xFB,0x00,0x00,}},
- {0xE79D,2,{0xA6,0xFC,0x00,0x00,}},
- {0xE79E,2,{0xA6,0xFD,0x00,0x00,}},
- {0xE79F,2,{0xA6,0xFE,0x00,0x00,}},
- {0xE7A0,2,{0xA7,0xC2,0x00,0x00,}},
- {0xE7A1,2,{0xA7,0xC3,0x00,0x00,}},
- {0xE7A2,2,{0xA7,0xC4,0x00,0x00,}},
- {0xE7A3,2,{0xA7,0xC5,0x00,0x00,}},
- {0xE7A4,2,{0xA7,0xC6,0x00,0x00,}},
- {0xE7A5,2,{0xA7,0xC7,0x00,0x00,}},
- {0xE7A6,2,{0xA7,0xC8,0x00,0x00,}},
- {0xE7A7,2,{0xA7,0xC9,0x00,0x00,}},
- {0xE7A8,2,{0xA7,0xCA,0x00,0x00,}},
- {0xE7A9,2,{0xA7,0xCB,0x00,0x00,}},
- {0xE7AA,2,{0xA7,0xCC,0x00,0x00,}},
- {0xE7AB,2,{0xA7,0xCD,0x00,0x00,}},
- {0xE7AC,2,{0xA7,0xCE,0x00,0x00,}},
- {0xE7AD,2,{0xA7,0xCF,0x00,0x00,}},
- {0xE7AE,2,{0xA7,0xD0,0x00,0x00,}},
- {0xE7AF,2,{0xA7,0xF2,0x00,0x00,}},
- {0xE7B0,2,{0xA7,0xF3,0x00,0x00,}},
- {0xE7B1,2,{0xA7,0xF4,0x00,0x00,}},
- {0xE7B2,2,{0xA7,0xF5,0x00,0x00,}},
- {0xE7B3,2,{0xA7,0xF6,0x00,0x00,}},
- {0xE7B4,2,{0xA7,0xF7,0x00,0x00,}},
- {0xE7B5,2,{0xA7,0xF8,0x00,0x00,}},
- {0xE7B6,2,{0xA7,0xF9,0x00,0x00,}},
- {0xE7B7,2,{0xA7,0xFA,0x00,0x00,}},
- {0xE7B8,2,{0xA7,0xFB,0x00,0x00,}},
- {0xE7B9,2,{0xA7,0xFC,0x00,0x00,}},
- {0xE7BA,2,{0xA7,0xFD,0x00,0x00,}},
- {0xE7BB,2,{0xA7,0xFE,0x00,0x00,}},
- {0xE7BC,2,{0xA8,0x96,0x00,0x00,}},
- {0xE7BD,2,{0xA8,0x97,0x00,0x00,}},
- {0xE7BE,2,{0xA8,0x98,0x00,0x00,}},
- {0xE7BF,2,{0xA8,0x99,0x00,0x00,}},
- {0xE7C0,2,{0xA8,0x9A,0x00,0x00,}},
- {0xE7C1,2,{0xA8,0x9B,0x00,0x00,}},
- {0xE7C2,2,{0xA8,0x9C,0x00,0x00,}},
- {0xE7C3,2,{0xA8,0x9D,0x00,0x00,}},
- {0xE7C4,2,{0xA8,0x9E,0x00,0x00,}},
- {0xE7C5,2,{0xA8,0x9F,0x00,0x00,}},
- {0xE7C6,2,{0xA8,0xA0,0x00,0x00,}},
- {0xE7C7,2,{0xA8,0xBC,0x00,0x00,}},
- {0xE7C8,4,{0x83,0x36,0xC8,0x30,}},
- {0xE7C9,2,{0xA8,0xC1,0x00,0x00,}},
- {0xE7CA,2,{0xA8,0xC2,0x00,0x00,}},
- {0xE7CB,2,{0xA8,0xC3,0x00,0x00,}},
- {0xE7CC,2,{0xA8,0xC4,0x00,0x00,}},
- {0xE7CD,2,{0xA8,0xEA,0x00,0x00,}},
- {0xE7CE,2,{0xA8,0xEB,0x00,0x00,}},
- {0xE7CF,2,{0xA8,0xEC,0x00,0x00,}},
- {0xE7D0,2,{0xA8,0xED,0x00,0x00,}},
- {0xE7D1,2,{0xA8,0xEE,0x00,0x00,}},
- {0xE7D2,2,{0xA8,0xEF,0x00,0x00,}},
- {0xE7D3,2,{0xA8,0xF0,0x00,0x00,}},
- {0xE7D4,2,{0xA8,0xF1,0x00,0x00,}},
- {0xE7D5,2,{0xA8,0xF2,0x00,0x00,}},
- {0xE7D6,2,{0xA8,0xF3,0x00,0x00,}},
- {0xE7D7,2,{0xA8,0xF4,0x00,0x00,}},
- {0xE7D8,2,{0xA8,0xF5,0x00,0x00,}},
- {0xE7D9,2,{0xA8,0xF6,0x00,0x00,}},
- {0xE7DA,2,{0xA8,0xF7,0x00,0x00,}},
- {0xE7DB,2,{0xA8,0xF8,0x00,0x00,}},
- {0xE7DC,2,{0xA8,0xF9,0x00,0x00,}},
- {0xE7DD,2,{0xA8,0xFA,0x00,0x00,}},
- {0xE7DE,2,{0xA8,0xFB,0x00,0x00,}},
- {0xE7DF,2,{0xA8,0xFC,0x00,0x00,}},
- {0xE7E0,2,{0xA8,0xFD,0x00,0x00,}},
- {0xE7E1,2,{0xA8,0xFE,0x00,0x00,}},
- {0xE7E2,2,{0xA9,0x58,0x00,0x00,}},
- {0xE7E3,2,{0xA9,0x5B,0x00,0x00,}},
- {0xE7E4,2,{0xA9,0x5D,0x00,0x00,}},
- {0xE7E5,2,{0xA9,0x5E,0x00,0x00,}},
- {0xE7E6,2,{0xA9,0x5F,0x00,0x00,}},
- {0xE7E7,4,{0x83,0x36,0xC8,0x31,}},
- {0xE7E8,4,{0x83,0x36,0xC8,0x32,}},
- {0xE7E9,4,{0x83,0x36,0xC8,0x33,}},
- {0xE7EA,4,{0x83,0x36,0xC8,0x34,}},
- {0xE7EB,4,{0x83,0x36,0xC8,0x35,}},
- {0xE7EC,4,{0x83,0x36,0xC8,0x36,}},
- {0xE7ED,4,{0x83,0x36,0xC8,0x37,}},
- {0xE7EE,4,{0x83,0x36,0xC8,0x38,}},
- {0xE7EF,4,{0x83,0x36,0xC8,0x39,}},
- {0xE7F0,4,{0x83,0x36,0xC9,0x30,}},
- {0xE7F1,4,{0x83,0x36,0xC9,0x31,}},
- {0xE7F2,4,{0x83,0x36,0xC9,0x32,}},
- {0xE7F3,4,{0x83,0x36,0xC9,0x33,}},
- {0xE7F4,2,{0xA9,0x97,0x00,0x00,}},
- {0xE7F5,2,{0xA9,0x98,0x00,0x00,}},
- {0xE7F6,2,{0xA9,0x99,0x00,0x00,}},
- {0xE7F7,2,{0xA9,0x9A,0x00,0x00,}},
- {0xE7F8,2,{0xA9,0x9B,0x00,0x00,}},
- {0xE7F9,2,{0xA9,0x9C,0x00,0x00,}},
- {0xE7FA,2,{0xA9,0x9D,0x00,0x00,}},
- {0xE7FB,2,{0xA9,0x9E,0x00,0x00,}},
- {0xE7FC,2,{0xA9,0x9F,0x00,0x00,}},
- {0xE7FD,2,{0xA9,0xA0,0x00,0x00,}},
- {0xE7FE,2,{0xA9,0xA1,0x00,0x00,}},
- {0xE7FF,2,{0xA9,0xA2,0x00,0x00,}},
- {0xE800,2,{0xA9,0xA3,0x00,0x00,}},
- {0xE801,2,{0xA9,0xF0,0x00,0x00,}},
- {0xE802,2,{0xA9,0xF1,0x00,0x00,}},
- {0xE803,2,{0xA9,0xF2,0x00,0x00,}},
- {0xE804,2,{0xA9,0xF3,0x00,0x00,}},
- {0xE805,2,{0xA9,0xF4,0x00,0x00,}},
- {0xE806,2,{0xA9,0xF5,0x00,0x00,}},
- {0xE807,2,{0xA9,0xF6,0x00,0x00,}},
- {0xE808,2,{0xA9,0xF7,0x00,0x00,}},
- {0xE809,2,{0xA9,0xF8,0x00,0x00,}},
- {0xE80A,2,{0xA9,0xF9,0x00,0x00,}},
- {0xE80B,2,{0xA9,0xFA,0x00,0x00,}},
- {0xE80C,2,{0xA9,0xFB,0x00,0x00,}},
- {0xE80D,2,{0xA9,0xFC,0x00,0x00,}},
- {0xE80E,2,{0xA9,0xFD,0x00,0x00,}},
- {0xE80F,2,{0xA9,0xFE,0x00,0x00,}},
- {0xE810,2,{0xD7,0xFA,0x00,0x00,}},
- {0xE811,2,{0xD7,0xFB,0x00,0x00,}},
- {0xE812,2,{0xD7,0xFC,0x00,0x00,}},
- {0xE813,2,{0xD7,0xFD,0x00,0x00,}},
- {0xE814,2,{0xD7,0xFE,0x00,0x00,}},
- {0xE815,4,{0x83,0x36,0xC9,0x34,}},
- {0xE816,2,{0xFE,0x51,0x00,0x00,}},
- {0xE817,2,{0xFE,0x52,0x00,0x00,}},
- {0xE818,2,{0xFE,0x53,0x00,0x00,}},
- {0xE819,4,{0x83,0x36,0xC9,0x35,}},
- {0xE81A,4,{0x83,0x36,0xC9,0x36,}},
- {0xE81B,4,{0x83,0x36,0xC9,0x37,}},
- {0xE81C,4,{0x83,0x36,0xC9,0x38,}},
- {0xE81D,4,{0x83,0x36,0xC9,0x39,}},
- {0xE81E,2,{0xFE,0x59,0x00,0x00,}},
- {0xE81F,4,{0x83,0x36,0xCA,0x30,}},
- {0xE820,4,{0x83,0x36,0xCA,0x31,}},
- {0xE821,4,{0x83,0x36,0xCA,0x32,}},
- {0xE822,4,{0x83,0x36,0xCA,0x33,}},
- {0xE823,4,{0x83,0x36,0xCA,0x34,}},
- {0xE824,4,{0x83,0x36,0xCA,0x35,}},
- {0xE825,4,{0x83,0x36,0xCA,0x36,}},
- {0xE826,2,{0xFE,0x61,0x00,0x00,}},
- {0xE827,4,{0x83,0x36,0xCA,0x37,}},
- {0xE828,4,{0x83,0x36,0xCA,0x38,}},
- {0xE829,4,{0x83,0x36,0xCA,0x39,}},
- {0xE82A,4,{0x83,0x36,0xCB,0x30,}},
- {0xE82B,2,{0xFE,0x66,0x00,0x00,}},
- {0xE82C,2,{0xFE,0x67,0x00,0x00,}},
- {0xE82D,4,{0x83,0x36,0xCB,0x31,}},
- {0xE82E,4,{0x83,0x36,0xCB,0x32,}},
- {0xE82F,4,{0x83,0x36,0xCB,0x33,}},
- {0xE830,4,{0x83,0x36,0xCB,0x34,}},
- {0xE831,2,{0xFE,0x6C,0x00,0x00,}},
- {0xE832,2,{0xFE,0x6D,0x00,0x00,}},
- {0xE833,4,{0x83,0x36,0xCB,0x35,}},
- {0xE834,4,{0x83,0x36,0xCB,0x36,}},
- {0xE835,4,{0x83,0x36,0xCB,0x37,}},
- {0xE836,4,{0x83,0x36,0xCB,0x38,}},
- {0xE837,4,{0x83,0x36,0xCB,0x39,}},
- {0xE838,4,{0x83,0x36,0xCC,0x30,}},
- {0xE839,4,{0x83,0x36,0xCC,0x31,}},
- {0xE83A,4,{0x83,0x36,0xCC,0x32,}},
- {0xE83B,2,{0xFE,0x76,0x00,0x00,}},
- {0xE83C,4,{0x83,0x36,0xCC,0x33,}},
- {0xE83D,4,{0x83,0x36,0xCC,0x34,}},
- {0xE83E,4,{0x83,0x36,0xCC,0x35,}},
- {0xE83F,4,{0x83,0x36,0xCC,0x36,}},
- {0xE840,4,{0x83,0x36,0xCC,0x37,}},
- {0xE841,4,{0x83,0x36,0xCC,0x38,}},
- {0xE842,4,{0x83,0x36,0xCC,0x39,}},
- {0xE843,2,{0xFE,0x7E,0x00,0x00,}},
- {0xE844,4,{0x83,0x36,0xCD,0x30,}},
- {0xE845,4,{0x83,0x36,0xCD,0x31,}},
- {0xE846,4,{0x83,0x36,0xCD,0x32,}},
- {0xE847,4,{0x83,0x36,0xCD,0x33,}},
- {0xE848,4,{0x83,0x36,0xCD,0x34,}},
- {0xE849,4,{0x83,0x36,0xCD,0x35,}},
- {0xE84A,4,{0x83,0x36,0xCD,0x36,}},
- {0xE84B,4,{0x83,0x36,0xCD,0x37,}},
- {0xE84C,4,{0x83,0x36,0xCD,0x38,}},
- {0xE84D,4,{0x83,0x36,0xCD,0x39,}},
- {0xE84E,4,{0x83,0x36,0xCE,0x30,}},
- {0xE84F,4,{0x83,0x36,0xCE,0x31,}},
- {0xE850,4,{0x83,0x36,0xCE,0x32,}},
- {0xE851,4,{0x83,0x36,0xCE,0x33,}},
- {0xE852,4,{0x83,0x36,0xCE,0x34,}},
- {0xE853,4,{0x83,0x36,0xCE,0x35,}},
- {0xE854,2,{0xFE,0x90,0x00,0x00,}},
- {0xE855,2,{0xFE,0x91,0x00,0x00,}},
- {0xE856,4,{0x83,0x36,0xCE,0x36,}},
- {0xE857,4,{0x83,0x36,0xCE,0x37,}},
- {0xE858,4,{0x83,0x36,0xCE,0x38,}},
- {0xE859,4,{0x83,0x36,0xCE,0x39,}},
- {0xE85A,4,{0x83,0x36,0xCF,0x30,}},
- {0xE85B,4,{0x83,0x36,0xCF,0x31,}},
- {0xE85C,4,{0x83,0x36,0xCF,0x32,}},
- {0xE85D,4,{0x83,0x36,0xCF,0x33,}},
- {0xE85E,4,{0x83,0x36,0xCF,0x34,}},
- {0xE85F,4,{0x83,0x36,0xCF,0x35,}},
- {0xE860,4,{0x83,0x36,0xCF,0x36,}},
- {0xE861,4,{0x83,0x36,0xCF,0x37,}},
- {0xE862,4,{0x83,0x36,0xCF,0x38,}},
- {0xE863,4,{0x83,0x36,0xCF,0x39,}},
- {0xE864,2,{0xFE,0xA0,0x00,0x00,}},
- {0xF92C,2,{0xFD,0x9C,0x00,0x00,}},
- {0xF92D,4,{0x84,0x30,0x85,0x35,}},
- {0xF92E,4,{0x84,0x30,0x85,0x36,}},
- {0xF92F,4,{0x84,0x30,0x85,0x37,}},
- {0xF930,4,{0x84,0x30,0x85,0x38,}},
- {0xF931,4,{0x84,0x30,0x85,0x39,}},
- {0xF932,4,{0x84,0x30,0x86,0x30,}},
- {0xF933,4,{0x84,0x30,0x86,0x31,}},
- {0xF934,4,{0x84,0x30,0x86,0x32,}},
- {0xF935,4,{0x84,0x30,0x86,0x33,}},
- {0xF936,4,{0x84,0x30,0x86,0x34,}},
- {0xF937,4,{0x84,0x30,0x86,0x35,}},
- {0xF938,4,{0x84,0x30,0x86,0x36,}},
- {0xF939,4,{0x84,0x30,0x86,0x37,}},
- {0xF93A,4,{0x84,0x30,0x86,0x38,}},
- {0xF93B,4,{0x84,0x30,0x86,0x39,}},
- {0xF93C,4,{0x84,0x30,0x87,0x30,}},
- {0xF93D,4,{0x84,0x30,0x87,0x31,}},
- {0xF93E,4,{0x84,0x30,0x87,0x32,}},
- {0xF93F,4,{0x84,0x30,0x87,0x33,}},
- {0xF940,4,{0x84,0x30,0x87,0x34,}},
- {0xF941,4,{0x84,0x30,0x87,0x35,}},
- {0xF942,4,{0x84,0x30,0x87,0x36,}},
- {0xF943,4,{0x84,0x30,0x87,0x37,}},
- {0xF944,4,{0x84,0x30,0x87,0x38,}},
- {0xF945,4,{0x84,0x30,0x87,0x39,}},
- {0xF946,4,{0x84,0x30,0x88,0x30,}},
- {0xF947,4,{0x84,0x30,0x88,0x31,}},
- {0xF948,4,{0x84,0x30,0x88,0x32,}},
- {0xF949,4,{0x84,0x30,0x88,0x33,}},
- {0xF94A,4,{0x84,0x30,0x88,0x34,}},
- {0xF94B,4,{0x84,0x30,0x88,0x35,}},
- {0xF94C,4,{0x84,0x30,0x88,0x36,}},
- {0xF94D,4,{0x84,0x30,0x88,0x37,}},
- {0xF94E,4,{0x84,0x30,0x88,0x38,}},
- {0xF94F,4,{0x84,0x30,0x88,0x39,}},
- {0xF950,4,{0x84,0x30,0x89,0x30,}},
- {0xF951,4,{0x84,0x30,0x89,0x31,}},
- {0xF952,4,{0x84,0x30,0x89,0x32,}},
- {0xF953,4,{0x84,0x30,0x89,0x33,}},
- {0xF954,4,{0x84,0x30,0x89,0x34,}},
- {0xF955,4,{0x84,0x30,0x89,0x35,}},
- {0xF956,4,{0x84,0x30,0x89,0x36,}},
- {0xF957,4,{0x84,0x30,0x89,0x37,}},
- {0xF958,4,{0x84,0x30,0x89,0x38,}},
- {0xF959,4,{0x84,0x30,0x89,0x39,}},
- {0xF95A,4,{0x84,0x30,0x8A,0x30,}},
- {0xF95B,4,{0x84,0x30,0x8A,0x31,}},
- {0xF95C,4,{0x84,0x30,0x8A,0x32,}},
- {0xF95D,4,{0x84,0x30,0x8A,0x33,}},
- {0xF95E,4,{0x84,0x30,0x8A,0x34,}},
- {0xF95F,4,{0x84,0x30,0x8A,0x35,}},
- {0xF960,4,{0x84,0x30,0x8A,0x36,}},
- {0xF961,4,{0x84,0x30,0x8A,0x37,}},
- {0xF962,4,{0x84,0x30,0x8A,0x38,}},
- {0xF963,4,{0x84,0x30,0x8A,0x39,}},
- {0xF964,4,{0x84,0x30,0x8B,0x30,}},
- {0xF965,4,{0x84,0x30,0x8B,0x31,}},
- {0xF966,4,{0x84,0x30,0x8B,0x32,}},
- {0xF967,4,{0x84,0x30,0x8B,0x33,}},
- {0xF968,4,{0x84,0x30,0x8B,0x34,}},
- {0xF969,4,{0x84,0x30,0x8B,0x35,}},
- {0xF96A,4,{0x84,0x30,0x8B,0x36,}},
- {0xF96B,4,{0x84,0x30,0x8B,0x37,}},
- {0xF96C,4,{0x84,0x30,0x8B,0x38,}},
- {0xF96D,4,{0x84,0x30,0x8B,0x39,}},
- {0xF96E,4,{0x84,0x30,0x8C,0x30,}},
- {0xF96F,4,{0x84,0x30,0x8C,0x31,}},
- {0xF970,4,{0x84,0x30,0x8C,0x32,}},
- {0xF971,4,{0x84,0x30,0x8C,0x33,}},
- {0xF972,4,{0x84,0x30,0x8C,0x34,}},
- {0xF973,4,{0x84,0x30,0x8C,0x35,}},
- {0xF974,4,{0x84,0x30,0x8C,0x36,}},
- {0xF975,4,{0x84,0x30,0x8C,0x37,}},
- {0xF976,4,{0x84,0x30,0x8C,0x38,}},
- {0xF977,4,{0x84,0x30,0x8C,0x39,}},
- {0xF978,4,{0x84,0x30,0x8D,0x30,}},
- {0xF979,2,{0xFD,0x9D,0x00,0x00,}},
- {0xF97A,4,{0x84,0x30,0x8D,0x31,}},
- {0xF97B,4,{0x84,0x30,0x8D,0x32,}},
- {0xF97C,4,{0x84,0x30,0x8D,0x33,}},
- {0xF97D,4,{0x84,0x30,0x8D,0x34,}},
- {0xF97E,4,{0x84,0x30,0x8D,0x35,}},
- {0xF97F,4,{0x84,0x30,0x8D,0x36,}},
- {0xF980,4,{0x84,0x30,0x8D,0x37,}},
- {0xF981,4,{0x84,0x30,0x8D,0x38,}},
- {0xF982,4,{0x84,0x30,0x8D,0x39,}},
- {0xF983,4,{0x84,0x30,0x8E,0x30,}},
- {0xF984,4,{0x84,0x30,0x8E,0x31,}},
- {0xF985,4,{0x84,0x30,0x8E,0x32,}},
- {0xF986,4,{0x84,0x30,0x8E,0x33,}},
- {0xF987,4,{0x84,0x30,0x8E,0x34,}},
- {0xF988,4,{0x84,0x30,0x8E,0x35,}},
- {0xF989,4,{0x84,0x30,0x8E,0x36,}},
- {0xF98A,4,{0x84,0x30,0x8E,0x37,}},
- {0xF98B,4,{0x84,0x30,0x8E,0x38,}},
- {0xF98C,4,{0x84,0x30,0x8E,0x39,}},
- {0xF98D,4,{0x84,0x30,0x8F,0x30,}},
- {0xF98E,4,{0x84,0x30,0x8F,0x31,}},
- {0xF98F,4,{0x84,0x30,0x8F,0x32,}},
- {0xF990,4,{0x84,0x30,0x8F,0x33,}},
- {0xF991,4,{0x84,0x30,0x8F,0x34,}},
- {0xF992,4,{0x84,0x30,0x8F,0x35,}},
- {0xF993,4,{0x84,0x30,0x8F,0x36,}},
- {0xF994,4,{0x84,0x30,0x8F,0x37,}},
- {0xF995,2,{0xFD,0x9E,0x00,0x00,}},
- {0xF996,4,{0x84,0x30,0x8F,0x38,}},
- {0xF997,4,{0x84,0x30,0x8F,0x39,}},
- {0xF998,4,{0x84,0x30,0x90,0x30,}},
- {0xF999,4,{0x84,0x30,0x90,0x31,}},
- {0xF99A,4,{0x84,0x30,0x90,0x32,}},
- {0xF99B,4,{0x84,0x30,0x90,0x33,}},
- {0xF99C,4,{0x84,0x30,0x90,0x34,}},
- {0xF99D,4,{0x84,0x30,0x90,0x35,}},
- {0xF99E,4,{0x84,0x30,0x90,0x36,}},
- {0xF99F,4,{0x84,0x30,0x90,0x37,}},
- {0xF9A0,4,{0x84,0x30,0x90,0x38,}},
- {0xF9A1,4,{0x84,0x30,0x90,0x39,}},
- {0xF9A2,4,{0x84,0x30,0x91,0x30,}},
- {0xF9A3,4,{0x84,0x30,0x91,0x31,}},
- {0xF9A4,4,{0x84,0x30,0x91,0x32,}},
- {0xF9A5,4,{0x84,0x30,0x91,0x33,}},
- {0xF9A6,4,{0x84,0x30,0x91,0x34,}},
- {0xF9A7,4,{0x84,0x30,0x91,0x35,}},
- {0xF9A8,4,{0x84,0x30,0x91,0x36,}},
- {0xF9A9,4,{0x84,0x30,0x91,0x37,}},
- {0xF9AA,4,{0x84,0x30,0x91,0x38,}},
- {0xF9AB,4,{0x84,0x30,0x91,0x39,}},
- {0xF9AC,4,{0x84,0x30,0x92,0x30,}},
- {0xF9AD,4,{0x84,0x30,0x92,0x31,}},
- {0xF9AE,4,{0x84,0x30,0x92,0x32,}},
- {0xF9AF,4,{0x84,0x30,0x92,0x33,}},
- {0xF9B0,4,{0x84,0x30,0x92,0x34,}},
- {0xF9B1,4,{0x84,0x30,0x92,0x35,}},
- {0xF9B2,4,{0x84,0x30,0x92,0x36,}},
- {0xF9B3,4,{0x84,0x30,0x92,0x37,}},
- {0xF9B4,4,{0x84,0x30,0x92,0x38,}},
- {0xF9B5,4,{0x84,0x30,0x92,0x39,}},
- {0xF9B6,4,{0x84,0x30,0x93,0x30,}},
- {0xF9B7,4,{0x84,0x30,0x93,0x31,}},
- {0xF9B8,4,{0x84,0x30,0x93,0x32,}},
- {0xF9B9,4,{0x84,0x30,0x93,0x33,}},
- {0xF9BA,4,{0x84,0x30,0x93,0x34,}},
- {0xF9BB,4,{0x84,0x30,0x93,0x35,}},
- {0xF9BC,4,{0x84,0x30,0x93,0x36,}},
- {0xF9BD,4,{0x84,0x30,0x93,0x37,}},
- {0xF9BE,4,{0x84,0x30,0x93,0x38,}},
- {0xF9BF,4,{0x84,0x30,0x93,0x39,}},
- {0xF9C0,4,{0x84,0x30,0x94,0x30,}},
- {0xF9C1,4,{0x84,0x30,0x94,0x31,}},
- {0xF9C2,4,{0x84,0x30,0x94,0x32,}},
- {0xF9C3,4,{0x84,0x30,0x94,0x33,}},
- {0xF9C4,4,{0x84,0x30,0x94,0x34,}},
- {0xF9C5,4,{0x84,0x30,0x94,0x35,}},
- {0xF9C6,4,{0x84,0x30,0x94,0x36,}},
- {0xF9C7,4,{0x84,0x30,0x94,0x37,}},
- {0xF9C8,4,{0x84,0x30,0x94,0x38,}},
- {0xF9C9,4,{0x84,0x30,0x94,0x39,}},
- {0xF9CA,4,{0x84,0x30,0x95,0x30,}},
- {0xF9CB,4,{0x84,0x30,0x95,0x31,}},
- {0xF9CC,4,{0x84,0x30,0x95,0x32,}},
- {0xF9CD,4,{0x84,0x30,0x95,0x33,}},
- {0xF9CE,4,{0x84,0x30,0x95,0x34,}},
- {0xF9CF,4,{0x84,0x30,0x95,0x35,}},
- {0xF9D0,4,{0x84,0x30,0x95,0x36,}},
- {0xF9D1,4,{0x84,0x30,0x95,0x37,}},
- {0xF9D2,4,{0x84,0x30,0x95,0x38,}},
- {0xF9D3,4,{0x84,0x30,0x95,0x39,}},
- {0xF9D4,4,{0x84,0x30,0x96,0x30,}},
- {0xF9D5,4,{0x84,0x30,0x96,0x31,}},
- {0xF9D6,4,{0x84,0x30,0x96,0x32,}},
- {0xF9D7,4,{0x84,0x30,0x96,0x33,}},
- {0xF9D8,4,{0x84,0x30,0x96,0x34,}},
- {0xF9D9,4,{0x84,0x30,0x96,0x35,}},
- {0xF9DA,4,{0x84,0x30,0x96,0x36,}},
- {0xF9DB,4,{0x84,0x30,0x96,0x37,}},
- {0xF9DC,4,{0x84,0x30,0x96,0x38,}},
- {0xF9DD,4,{0x84,0x30,0x96,0x39,}},
- {0xF9DE,4,{0x84,0x30,0x97,0x30,}},
- {0xF9DF,4,{0x84,0x30,0x97,0x31,}},
- {0xF9E0,4,{0x84,0x30,0x97,0x32,}},
- {0xF9E1,4,{0x84,0x30,0x97,0x33,}},
- {0xF9E2,4,{0x84,0x30,0x97,0x34,}},
- {0xF9E3,4,{0x84,0x30,0x97,0x35,}},
- {0xF9E4,4,{0x84,0x30,0x97,0x36,}},
- {0xF9E5,4,{0x84,0x30,0x97,0x37,}},
- {0xF9E6,4,{0x84,0x30,0x97,0x38,}},
- {0xF9E7,2,{0xFD,0x9F,0x00,0x00,}},
- {0xF9E8,4,{0x84,0x30,0x97,0x39,}},
- {0xF9E9,4,{0x84,0x30,0x98,0x30,}},
- {0xF9EA,4,{0x84,0x30,0x98,0x31,}},
- {0xF9EB,4,{0x84,0x30,0x98,0x32,}},
- {0xF9EC,4,{0x84,0x30,0x98,0x33,}},
- {0xF9ED,4,{0x84,0x30,0x98,0x34,}},
- {0xF9EE,4,{0x84,0x30,0x98,0x35,}},
- {0xF9EF,4,{0x84,0x30,0x98,0x36,}},
- {0xF9F0,4,{0x84,0x30,0x98,0x37,}},
- {0xF9F1,2,{0xFD,0xA0,0x00,0x00,}},
- {0xF9F2,4,{0x84,0x30,0x98,0x38,}},
- {0xF9F3,4,{0x84,0x30,0x98,0x39,}},
- {0xF9F4,4,{0x84,0x30,0x99,0x30,}},
- {0xF9F5,4,{0x84,0x30,0x99,0x31,}},
- {0xF9F6,4,{0x84,0x30,0x99,0x32,}},
- {0xF9F7,4,{0x84,0x30,0x99,0x33,}},
- {0xF9F8,4,{0x84,0x30,0x99,0x34,}},
- {0xF9F9,4,{0x84,0x30,0x99,0x35,}},
- {0xF9FA,4,{0x84,0x30,0x99,0x36,}},
- {0xF9FB,4,{0x84,0x30,0x99,0x37,}},
- {0xF9FC,4,{0x84,0x30,0x99,0x38,}},
- {0xF9FD,4,{0x84,0x30,0x99,0x39,}},
- {0xF9FE,4,{0x84,0x30,0x9A,0x30,}},
- {0xF9FF,4,{0x84,0x30,0x9A,0x31,}},
- {0xFA00,4,{0x84,0x30,0x9A,0x32,}},
- {0xFA01,4,{0x84,0x30,0x9A,0x33,}},
- {0xFA02,4,{0x84,0x30,0x9A,0x34,}},
- {0xFA03,4,{0x84,0x30,0x9A,0x35,}},
- {0xFA04,4,{0x84,0x30,0x9A,0x36,}},
- {0xFA05,4,{0x84,0x30,0x9A,0x37,}},
- {0xFA06,4,{0x84,0x30,0x9A,0x38,}},
- {0xFA07,4,{0x84,0x30,0x9A,0x39,}},
- {0xFA08,4,{0x84,0x30,0x9B,0x30,}},
- {0xFA09,4,{0x84,0x30,0x9B,0x31,}},
- {0xFA0A,4,{0x84,0x30,0x9B,0x32,}},
- {0xFA0B,4,{0x84,0x30,0x9B,0x33,}},
- {0xFA0C,2,{0xFE,0x40,0x00,0x00,}},
- {0xFA0D,2,{0xFE,0x41,0x00,0x00,}},
- {0xFA0E,2,{0xFE,0x42,0x00,0x00,}},
- {0xFA0F,2,{0xFE,0x43,0x00,0x00,}},
- {0xFA10,4,{0x84,0x30,0x9B,0x34,}},
- {0xFA11,2,{0xFE,0x44,0x00,0x00,}},
- {0xFA12,4,{0x84,0x30,0x9B,0x35,}},
- {0xFA13,2,{0xFE,0x45,0x00,0x00,}},
- {0xFA14,2,{0xFE,0x46,0x00,0x00,}},
- {0xFA15,4,{0x84,0x30,0x9B,0x36,}},
- {0xFA16,4,{0x84,0x30,0x9B,0x37,}},
- {0xFA17,4,{0x84,0x30,0x9B,0x38,}},
- {0xFA18,2,{0xFE,0x47,0x00,0x00,}},
- {0xFA19,4,{0x84,0x30,0x9B,0x39,}},
- {0xFA1A,4,{0x84,0x30,0x9C,0x30,}},
- {0xFA1B,4,{0x84,0x30,0x9C,0x31,}},
- {0xFA1C,4,{0x84,0x30,0x9C,0x32,}},
- {0xFA1D,4,{0x84,0x30,0x9C,0x33,}},
- {0xFA1E,4,{0x84,0x30,0x9C,0x34,}},
- {0xFA1F,2,{0xFE,0x48,0x00,0x00,}},
- {0xFA20,2,{0xFE,0x49,0x00,0x00,}},
- {0xFA21,2,{0xFE,0x4A,0x00,0x00,}},
- {0xFA22,4,{0x84,0x30,0x9C,0x35,}},
- {0xFA23,2,{0xFE,0x4B,0x00,0x00,}},
- {0xFA24,2,{0xFE,0x4C,0x00,0x00,}},
- {0xFA25,4,{0x84,0x30,0x9C,0x36,}},
- {0xFA26,4,{0x84,0x30,0x9C,0x37,}},
- {0xFA27,2,{0xFE,0x4D,0x00,0x00,}},
- {0xFA28,2,{0xFE,0x4E,0x00,0x00,}},
- {0xFA29,2,{0xFE,0x4F,0x00,0x00,}},
- {0xFE30,2,{0xA9,0x55,0x00,0x00,}},
- {0xFE31,2,{0xA6,0xF2,0x00,0x00,}},
- {0xFE32,4,{0x84,0x31,0x85,0x38,}},
- {0xFE33,2,{0xA6,0xF4,0x00,0x00,}},
- {0xFE34,2,{0xA6,0xF5,0x00,0x00,}},
- {0xFE35,2,{0xA6,0xE0,0x00,0x00,}},
- {0xFE36,2,{0xA6,0xE1,0x00,0x00,}},
- {0xFE37,2,{0xA6,0xF0,0x00,0x00,}},
- {0xFE38,2,{0xA6,0xF1,0x00,0x00,}},
- {0xFE39,2,{0xA6,0xE2,0x00,0x00,}},
- {0xFE3A,2,{0xA6,0xE3,0x00,0x00,}},
- {0xFE3B,2,{0xA6,0xEE,0x00,0x00,}},
- {0xFE3C,2,{0xA6,0xEF,0x00,0x00,}},
- {0xFE3D,2,{0xA6,0xE6,0x00,0x00,}},
- {0xFE3E,2,{0xA6,0xE7,0x00,0x00,}},
- {0xFE3F,2,{0xA6,0xE4,0x00,0x00,}},
- {0xFE40,2,{0xA6,0xE5,0x00,0x00,}},
- {0xFE41,2,{0xA6,0xE8,0x00,0x00,}},
- {0xFE42,2,{0xA6,0xE9,0x00,0x00,}},
- {0xFE43,2,{0xA6,0xEA,0x00,0x00,}},
- {0xFE44,2,{0xA6,0xEB,0x00,0x00,}},
- {0xFE45,4,{0x84,0x31,0x85,0x39,}},
- {0xFE46,4,{0x84,0x31,0x86,0x30,}},
- {0xFE47,4,{0x84,0x31,0x86,0x31,}},
- {0xFE48,4,{0x84,0x31,0x86,0x32,}},
- {0xFE49,2,{0xA9,0x68,0x00,0x00,}},
- {0xFE4A,2,{0xA9,0x69,0x00,0x00,}},
- {0xFE4B,2,{0xA9,0x6A,0x00,0x00,}},
- {0xFE4C,2,{0xA9,0x6B,0x00,0x00,}},
- {0xFE4D,2,{0xA9,0x6C,0x00,0x00,}},
- {0xFE4E,2,{0xA9,0x6D,0x00,0x00,}},
- {0xFE4F,2,{0xA9,0x6E,0x00,0x00,}},
- {0xFE50,2,{0xA9,0x6F,0x00,0x00,}},
- {0xFE51,2,{0xA9,0x70,0x00,0x00,}},
- {0xFE52,2,{0xA9,0x71,0x00,0x00,}},
- {0xFE53,4,{0x84,0x31,0x86,0x33,}},
- {0xFE54,2,{0xA9,0x72,0x00,0x00,}},
- {0xFE55,2,{0xA9,0x73,0x00,0x00,}},
- {0xFE56,2,{0xA9,0x74,0x00,0x00,}},
- {0xFE57,2,{0xA9,0x75,0x00,0x00,}},
- {0xFE58,4,{0x84,0x31,0x86,0x34,}},
- {0xFE59,2,{0xA9,0x76,0x00,0x00,}},
- {0xFE5A,2,{0xA9,0x77,0x00,0x00,}},
- {0xFE5B,2,{0xA9,0x78,0x00,0x00,}},
- {0xFE5C,2,{0xA9,0x79,0x00,0x00,}},
- {0xFE5D,2,{0xA9,0x7A,0x00,0x00,}},
- {0xFE5E,2,{0xA9,0x7B,0x00,0x00,}},
- {0xFE5F,2,{0xA9,0x7C,0x00,0x00,}},
- {0xFE60,2,{0xA9,0x7D,0x00,0x00,}},
- {0xFE61,2,{0xA9,0x7E,0x00,0x00,}},
- {0xFE62,2,{0xA9,0x80,0x00,0x00,}},
- {0xFE63,2,{0xA9,0x81,0x00,0x00,}},
- {0xFE64,2,{0xA9,0x82,0x00,0x00,}},
- {0xFE65,2,{0xA9,0x83,0x00,0x00,}},
- {0xFE66,2,{0xA9,0x84,0x00,0x00,}},
- {0xFE67,4,{0x84,0x31,0x86,0x35,}},
- {0xFE68,2,{0xA9,0x85,0x00,0x00,}},
- {0xFE69,2,{0xA9,0x86,0x00,0x00,}},
- {0xFE6A,2,{0xA9,0x87,0x00,0x00,}},
- {0xFE6B,2,{0xA9,0x88,0x00,0x00,}},
- {0xFE6C,4,{0x84,0x31,0x86,0x36,}},
- {0xFE6D,4,{0x84,0x31,0x86,0x37,}},
- {0xFE6E,4,{0x84,0x31,0x86,0x38,}},
- {0xFE6F,4,{0x84,0x31,0x86,0x39,}},
- {0xFE70,4,{0x84,0x31,0x87,0x30,}},
- {0xFE71,4,{0x84,0x31,0x87,0x31,}},
- {0xFE72,4,{0x84,0x31,0x87,0x32,}},
- {0xFE73,4,{0x84,0x31,0x87,0x33,}},
- {0xFE74,4,{0x84,0x31,0x87,0x34,}},
- {0xFE75,4,{0x84,0x31,0x87,0x35,}},
- {0xFE76,4,{0x84,0x31,0x87,0x36,}},
- {0xFE77,4,{0x84,0x31,0x87,0x37,}},
- {0xFE78,4,{0x84,0x31,0x87,0x38,}},
- {0xFE79,4,{0x84,0x31,0x87,0x39,}},
- {0xFE7A,4,{0x84,0x31,0x88,0x30,}},
- {0xFE7B,4,{0x84,0x31,0x88,0x31,}},
- {0xFE7C,4,{0x84,0x31,0x88,0x32,}},
- {0xFE7D,4,{0x84,0x31,0x88,0x33,}},
- {0xFE7E,4,{0x84,0x31,0x88,0x34,}},
- {0xFE7F,4,{0x84,0x31,0x88,0x35,}},
- {0xFE80,4,{0x84,0x31,0x88,0x36,}},
- {0xFE81,4,{0x84,0x31,0x88,0x37,}},
- {0xFE82,4,{0x84,0x31,0x88,0x38,}},
- {0xFE83,4,{0x84,0x31,0x88,0x39,}},
- {0xFE84,4,{0x84,0x31,0x89,0x30,}},
- {0xFE85,4,{0x84,0x31,0x89,0x31,}},
- {0xFE86,4,{0x84,0x31,0x89,0x32,}},
- {0xFE87,4,{0x84,0x31,0x89,0x33,}},
- {0xFE88,4,{0x84,0x31,0x89,0x34,}},
- {0xFE89,4,{0x84,0x31,0x89,0x35,}},
- {0xFE8A,4,{0x84,0x31,0x89,0x36,}},
- {0xFE8B,4,{0x84,0x31,0x89,0x37,}},
- {0xFE8C,4,{0x84,0x31,0x89,0x38,}},
- {0xFE8D,4,{0x84,0x31,0x89,0x39,}},
- {0xFE8E,4,{0x84,0x31,0x8A,0x30,}},
- {0xFE8F,4,{0x84,0x31,0x8A,0x31,}},
- {0xFE90,4,{0x84,0x31,0x8A,0x32,}},
- {0xFE91,4,{0x84,0x31,0x8A,0x33,}},
- {0xFE92,4,{0x84,0x31,0x8A,0x34,}},
- {0xFE93,4,{0x84,0x31,0x8A,0x35,}},
- {0xFE94,4,{0x84,0x31,0x8A,0x36,}},
- {0xFE95,4,{0x84,0x31,0x8A,0x37,}},
- {0xFE96,4,{0x84,0x31,0x8A,0x38,}},
- {0xFE97,4,{0x84,0x31,0x8A,0x39,}},
- {0xFE98,4,{0x84,0x31,0x8B,0x30,}},
- {0xFE99,4,{0x84,0x31,0x8B,0x31,}},
- {0xFE9A,4,{0x84,0x31,0x8B,0x32,}},
- {0xFE9B,4,{0x84,0x31,0x8B,0x33,}},
- {0xFE9C,4,{0x84,0x31,0x8B,0x34,}},
- {0xFE9D,4,{0x84,0x31,0x8B,0x35,}},
- {0xFE9E,4,{0x84,0x31,0x8B,0x36,}},
- {0xFE9F,4,{0x84,0x31,0x8B,0x37,}},
- {0xFEA0,4,{0x84,0x31,0x8B,0x38,}},
- {0xFEA1,4,{0x84,0x31,0x8B,0x39,}},
- {0xFEA2,4,{0x84,0x31,0x8C,0x30,}},
- {0xFEA3,4,{0x84,0x31,0x8C,0x31,}},
- {0xFEA4,4,{0x84,0x31,0x8C,0x32,}},
- {0xFEA5,4,{0x84,0x31,0x8C,0x33,}},
- {0xFEA6,4,{0x84,0x31,0x8C,0x34,}},
- {0xFEA7,4,{0x84,0x31,0x8C,0x35,}},
- {0xFEA8,4,{0x84,0x31,0x8C,0x36,}},
- {0xFEA9,4,{0x84,0x31,0x8C,0x37,}},
- {0xFEAA,4,{0x84,0x31,0x8C,0x38,}},
- {0xFEAB,4,{0x84,0x31,0x8C,0x39,}},
- {0xFEAC,4,{0x84,0x31,0x8D,0x30,}},
- {0xFEAD,4,{0x84,0x31,0x8D,0x31,}},
- {0xFEAE,4,{0x84,0x31,0x8D,0x32,}},
- {0xFEAF,4,{0x84,0x31,0x8D,0x33,}},
- {0xFEB0,4,{0x84,0x31,0x8D,0x34,}},
- {0xFEB1,4,{0x84,0x31,0x8D,0x35,}},
- {0xFEB2,4,{0x84,0x31,0x8D,0x36,}},
- {0xFEB3,4,{0x84,0x31,0x8D,0x37,}},
- {0xFEB4,4,{0x84,0x31,0x8D,0x38,}},
- {0xFEB5,4,{0x84,0x31,0x8D,0x39,}},
- {0xFEB6,4,{0x84,0x31,0x8E,0x30,}},
- {0xFEB7,4,{0x84,0x31,0x8E,0x31,}},
- {0xFEB8,4,{0x84,0x31,0x8E,0x32,}},
- {0xFEB9,4,{0x84,0x31,0x8E,0x33,}},
- {0xFEBA,4,{0x84,0x31,0x8E,0x34,}},
- {0xFEBB,4,{0x84,0x31,0x8E,0x35,}},
- {0xFEBC,4,{0x84,0x31,0x8E,0x36,}},
- {0xFEBD,4,{0x84,0x31,0x8E,0x37,}},
- {0xFEBE,4,{0x84,0x31,0x8E,0x38,}},
- {0xFEBF,4,{0x84,0x31,0x8E,0x39,}},
- {0xFEC0,4,{0x84,0x31,0x8F,0x30,}},
- {0xFEC1,4,{0x84,0x31,0x8F,0x31,}},
- {0xFEC2,4,{0x84,0x31,0x8F,0x32,}},
- {0xFEC3,4,{0x84,0x31,0x8F,0x33,}},
- {0xFEC4,4,{0x84,0x31,0x8F,0x34,}},
- {0xFEC5,4,{0x84,0x31,0x8F,0x35,}},
- {0xFEC6,4,{0x84,0x31,0x8F,0x36,}},
- {0xFEC7,4,{0x84,0x31,0x8F,0x37,}},
- {0xFEC8,4,{0x84,0x31,0x8F,0x38,}},
- {0xFEC9,4,{0x84,0x31,0x8F,0x39,}},
- {0xFECA,4,{0x84,0x31,0x90,0x30,}},
- {0xFECB,4,{0x84,0x31,0x90,0x31,}},
- {0xFECC,4,{0x84,0x31,0x90,0x32,}},
- {0xFECD,4,{0x84,0x31,0x90,0x33,}},
- {0xFECE,4,{0x84,0x31,0x90,0x34,}},
- {0xFECF,4,{0x84,0x31,0x90,0x35,}},
- {0xFED0,4,{0x84,0x31,0x90,0x36,}},
- {0xFED1,4,{0x84,0x31,0x90,0x37,}},
- {0xFED2,4,{0x84,0x31,0x90,0x38,}},
- {0xFED3,4,{0x84,0x31,0x90,0x39,}},
- {0xFED4,4,{0x84,0x31,0x91,0x30,}},
- {0xFED5,4,{0x84,0x31,0x91,0x31,}},
- {0xFED6,4,{0x84,0x31,0x91,0x32,}},
- {0xFED7,4,{0x84,0x31,0x91,0x33,}},
- {0xFED8,4,{0x84,0x31,0x91,0x34,}},
- {0xFED9,4,{0x84,0x31,0x91,0x35,}},
- {0xFEDA,4,{0x84,0x31,0x91,0x36,}},
- {0xFEDB,4,{0x84,0x31,0x91,0x37,}},
- {0xFEDC,4,{0x84,0x31,0x91,0x38,}},
- {0xFEDD,4,{0x84,0x31,0x91,0x39,}},
- {0xFEDE,4,{0x84,0x31,0x92,0x30,}},
- {0xFEDF,4,{0x84,0x31,0x92,0x31,}},
- {0xFEE0,4,{0x84,0x31,0x92,0x32,}},
- {0xFEE1,4,{0x84,0x31,0x92,0x33,}},
- {0xFEE2,4,{0x84,0x31,0x92,0x34,}},
- {0xFEE3,4,{0x84,0x31,0x92,0x35,}},
- {0xFEE4,4,{0x84,0x31,0x92,0x36,}},
- {0xFEE5,4,{0x84,0x31,0x92,0x37,}},
- {0xFEE6,4,{0x84,0x31,0x92,0x38,}},
- {0xFEE7,4,{0x84,0x31,0x92,0x39,}},
- {0xFEE8,4,{0x84,0x31,0x93,0x30,}},
- {0xFEE9,4,{0x84,0x31,0x93,0x31,}},
- {0xFEEA,4,{0x84,0x31,0x93,0x32,}},
- {0xFEEB,4,{0x84,0x31,0x93,0x33,}},
- {0xFEEC,4,{0x84,0x31,0x93,0x34,}},
- {0xFEED,4,{0x84,0x31,0x93,0x35,}},
- {0xFEEE,4,{0x84,0x31,0x93,0x36,}},
- {0xFEEF,4,{0x84,0x31,0x93,0x37,}},
- {0xFEF0,4,{0x84,0x31,0x93,0x38,}},
- {0xFEF1,4,{0x84,0x31,0x93,0x39,}},
- {0xFEF2,4,{0x84,0x31,0x94,0x30,}},
- {0xFEF3,4,{0x84,0x31,0x94,0x31,}},
- {0xFEF4,4,{0x84,0x31,0x94,0x32,}},
- {0xFEF5,4,{0x84,0x31,0x94,0x33,}},
- {0xFEF6,4,{0x84,0x31,0x94,0x34,}},
- {0xFEF7,4,{0x84,0x31,0x94,0x35,}},
- {0xFEF8,4,{0x84,0x31,0x94,0x36,}},
- {0xFEF9,4,{0x84,0x31,0x94,0x37,}},
- {0xFEFA,4,{0x84,0x31,0x94,0x38,}},
- {0xFEFB,4,{0x84,0x31,0x94,0x39,}},
- {0xFEFC,4,{0x84,0x31,0x95,0x30,}},
- {0xFEFD,4,{0x84,0x31,0x95,0x31,}},
- {0xFEFE,4,{0x84,0x31,0x95,0x32,}},
- {0xFEFF,4,{0x84,0x31,0x95,0x33,}},
- {0xFF00,4,{0x84,0x31,0x95,0x34,}},
- {0xFF01,2,{0xA3,0xA1,0x00,0x00,}},
- {0xFF02,2,{0xA3,0xA2,0x00,0x00,}},
- {0xFF03,2,{0xA3,0xA3,0x00,0x00,}},
- {0xFF04,2,{0xA1,0xE7,0x00,0x00,}},
- {0xFF05,2,{0xA3,0xA5,0x00,0x00,}},
- {0xFF06,2,{0xA3,0xA6,0x00,0x00,}},
- {0xFF07,2,{0xA3,0xA7,0x00,0x00,}},
- {0xFF08,2,{0xA3,0xA8,0x00,0x00,}},
- {0xFF09,2,{0xA3,0xA9,0x00,0x00,}},
- {0xFF0A,2,{0xA3,0xAA,0x00,0x00,}},
- {0xFF0B,2,{0xA3,0xAB,0x00,0x00,}},
- {0xFF0C,2,{0xA3,0xAC,0x00,0x00,}},
- {0xFF0D,2,{0xA3,0xAD,0x00,0x00,}},
- {0xFF0E,2,{0xA3,0xAE,0x00,0x00,}},
- {0xFF0F,2,{0xA3,0xAF,0x00,0x00,}},
- {0xFF10,2,{0xA3,0xB0,0x00,0x00,}},
- {0xFF11,2,{0xA3,0xB1,0x00,0x00,}},
- {0xFF12,2,{0xA3,0xB2,0x00,0x00,}},
- {0xFF13,2,{0xA3,0xB3,0x00,0x00,}},
- {0xFF14,2,{0xA3,0xB4,0x00,0x00,}},
- {0xFF15,2,{0xA3,0xB5,0x00,0x00,}},
- {0xFF16,2,{0xA3,0xB6,0x00,0x00,}},
- {0xFF17,2,{0xA3,0xB7,0x00,0x00,}},
- {0xFF18,2,{0xA3,0xB8,0x00,0x00,}},
- {0xFF19,2,{0xA3,0xB9,0x00,0x00,}},
- {0xFF1A,2,{0xA3,0xBA,0x00,0x00,}},
- {0xFF1B,2,{0xA3,0xBB,0x00,0x00,}},
- {0xFF1C,2,{0xA3,0xBC,0x00,0x00,}},
- {0xFF1D,2,{0xA3,0xBD,0x00,0x00,}},
- {0xFF1E,2,{0xA3,0xBE,0x00,0x00,}},
- {0xFF1F,2,{0xA3,0xBF,0x00,0x00,}},
- {0xFF20,2,{0xA3,0xC0,0x00,0x00,}},
- {0xFF21,2,{0xA3,0xC1,0x00,0x00,}},
- {0xFF22,2,{0xA3,0xC2,0x00,0x00,}},
- {0xFF23,2,{0xA3,0xC3,0x00,0x00,}},
- {0xFF24,2,{0xA3,0xC4,0x00,0x00,}},
- {0xFF25,2,{0xA3,0xC5,0x00,0x00,}},
- {0xFF26,2,{0xA3,0xC6,0x00,0x00,}},
- {0xFF27,2,{0xA3,0xC7,0x00,0x00,}},
- {0xFF28,2,{0xA3,0xC8,0x00,0x00,}},
- {0xFF29,2,{0xA3,0xC9,0x00,0x00,}},
- {0xFF2A,2,{0xA3,0xCA,0x00,0x00,}},
- {0xFF2B,2,{0xA3,0xCB,0x00,0x00,}},
- {0xFF2C,2,{0xA3,0xCC,0x00,0x00,}},
- {0xFF2D,2,{0xA3,0xCD,0x00,0x00,}},
- {0xFF2E,2,{0xA3,0xCE,0x00,0x00,}},
- {0xFF2F,2,{0xA3,0xCF,0x00,0x00,}},
- {0xFF30,2,{0xA3,0xD0,0x00,0x00,}},
- {0xFF31,2,{0xA3,0xD1,0x00,0x00,}},
- {0xFF32,2,{0xA3,0xD2,0x00,0x00,}},
- {0xFF33,2,{0xA3,0xD3,0x00,0x00,}},
- {0xFF34,2,{0xA3,0xD4,0x00,0x00,}},
- {0xFF35,2,{0xA3,0xD5,0x00,0x00,}},
- {0xFF36,2,{0xA3,0xD6,0x00,0x00,}},
- {0xFF37,2,{0xA3,0xD7,0x00,0x00,}},
- {0xFF38,2,{0xA3,0xD8,0x00,0x00,}},
- {0xFF39,2,{0xA3,0xD9,0x00,0x00,}},
- {0xFF3A,2,{0xA3,0xDA,0x00,0x00,}},
- {0xFF3B,2,{0xA3,0xDB,0x00,0x00,}},
- {0xFF3C,2,{0xA3,0xDC,0x00,0x00,}},
- {0xFF3D,2,{0xA3,0xDD,0x00,0x00,}},
- {0xFF3E,2,{0xA3,0xDE,0x00,0x00,}},
- {0xFF3F,2,{0xA3,0xDF,0x00,0x00,}},
- {0xFF40,2,{0xA3,0xE0,0x00,0x00,}},
- {0xFF41,2,{0xA3,0xE1,0x00,0x00,}},
- {0xFF42,2,{0xA3,0xE2,0x00,0x00,}},
- {0xFF43,2,{0xA3,0xE3,0x00,0x00,}},
- {0xFF44,2,{0xA3,0xE4,0x00,0x00,}},
- {0xFF45,2,{0xA3,0xE5,0x00,0x00,}},
- {0xFF46,2,{0xA3,0xE6,0x00,0x00,}},
- {0xFF47,2,{0xA3,0xE7,0x00,0x00,}},
- {0xFF48,2,{0xA3,0xE8,0x00,0x00,}},
- {0xFF49,2,{0xA3,0xE9,0x00,0x00,}},
- {0xFF4A,2,{0xA3,0xEA,0x00,0x00,}},
- {0xFF4B,2,{0xA3,0xEB,0x00,0x00,}},
- {0xFF4C,2,{0xA3,0xEC,0x00,0x00,}},
- {0xFF4D,2,{0xA3,0xED,0x00,0x00,}},
- {0xFF4E,2,{0xA3,0xEE,0x00,0x00,}},
- {0xFF4F,2,{0xA3,0xEF,0x00,0x00,}},
- {0xFF50,2,{0xA3,0xF0,0x00,0x00,}},
- {0xFF51,2,{0xA3,0xF1,0x00,0x00,}},
- {0xFF52,2,{0xA3,0xF2,0x00,0x00,}},
- {0xFF53,2,{0xA3,0xF3,0x00,0x00,}},
- {0xFF54,2,{0xA3,0xF4,0x00,0x00,}},
- {0xFF55,2,{0xA3,0xF5,0x00,0x00,}},
- {0xFF56,2,{0xA3,0xF6,0x00,0x00,}},
- {0xFF57,2,{0xA3,0xF7,0x00,0x00,}},
- {0xFF58,2,{0xA3,0xF8,0x00,0x00,}},
- {0xFF59,2,{0xA3,0xF9,0x00,0x00,}},
- {0xFF5A,2,{0xA3,0xFA,0x00,0x00,}},
- {0xFF5B,2,{0xA3,0xFB,0x00,0x00,}},
- {0xFF5C,2,{0xA3,0xFC,0x00,0x00,}},
- {0xFF5D,2,{0xA3,0xFD,0x00,0x00,}},
- {0xFF5E,2,{0xA1,0xAB,0x00,0x00,}},
- {0xFF5F,4,{0x84,0x31,0x95,0x35,}},
- {0xFF60,4,{0x84,0x31,0x95,0x36,}},
- {0xFF61,4,{0x84,0x31,0x95,0x37,}},
- {0xFF62,4,{0x84,0x31,0x95,0x38,}},
- {0xFF63,4,{0x84,0x31,0x95,0x39,}},
- {0xFF64,4,{0x84,0x31,0x96,0x30,}},
- {0xFF65,4,{0x84,0x31,0x96,0x31,}},
- {0xFF66,4,{0x84,0x31,0x96,0x32,}},
- {0xFF67,4,{0x84,0x31,0x96,0x33,}},
- {0xFF68,4,{0x84,0x31,0x96,0x34,}},
- {0xFF69,4,{0x84,0x31,0x96,0x35,}},
- {0xFF6A,4,{0x84,0x31,0x96,0x36,}},
- {0xFF6B,4,{0x84,0x31,0x96,0x37,}},
- {0xFF6C,4,{0x84,0x31,0x96,0x38,}},
- {0xFF6D,4,{0x84,0x31,0x96,0x39,}},
- {0xFF6E,4,{0x84,0x31,0x97,0x30,}},
- {0xFF6F,4,{0x84,0x31,0x97,0x31,}},
- {0xFF70,4,{0x84,0x31,0x97,0x32,}},
- {0xFF71,4,{0x84,0x31,0x97,0x33,}},
- {0xFF72,4,{0x84,0x31,0x97,0x34,}},
- {0xFF73,4,{0x84,0x31,0x97,0x35,}},
- {0xFF74,4,{0x84,0x31,0x97,0x36,}},
- {0xFF75,4,{0x84,0x31,0x97,0x37,}},
- {0xFF76,4,{0x84,0x31,0x97,0x38,}},
- {0xFF77,4,{0x84,0x31,0x97,0x39,}},
- {0xFF78,4,{0x84,0x31,0x98,0x30,}},
- {0xFF79,4,{0x84,0x31,0x98,0x31,}},
- {0xFF7A,4,{0x84,0x31,0x98,0x32,}},
- {0xFF7B,4,{0x84,0x31,0x98,0x33,}},
- {0xFF7C,4,{0x84,0x31,0x98,0x34,}},
- {0xFF7D,4,{0x84,0x31,0x98,0x35,}},
- {0xFF7E,4,{0x84,0x31,0x98,0x36,}},
- {0xFF7F,4,{0x84,0x31,0x98,0x37,}},
- {0xFF80,4,{0x84,0x31,0x98,0x38,}},
- {0xFF81,4,{0x84,0x31,0x98,0x39,}},
- {0xFF82,4,{0x84,0x31,0x99,0x30,}},
- {0xFF83,4,{0x84,0x31,0x99,0x31,}},
- {0xFF84,4,{0x84,0x31,0x99,0x32,}},
- {0xFF85,4,{0x84,0x31,0x99,0x33,}},
- {0xFF86,4,{0x84,0x31,0x99,0x34,}},
- {0xFF87,4,{0x84,0x31,0x99,0x35,}},
- {0xFF88,4,{0x84,0x31,0x99,0x36,}},
- {0xFF89,4,{0x84,0x31,0x99,0x37,}},
- {0xFF8A,4,{0x84,0x31,0x99,0x38,}},
- {0xFF8B,4,{0x84,0x31,0x99,0x39,}},
- {0xFF8C,4,{0x84,0x31,0x9A,0x30,}},
- {0xFF8D,4,{0x84,0x31,0x9A,0x31,}},
- {0xFF8E,4,{0x84,0x31,0x9A,0x32,}},
- {0xFF8F,4,{0x84,0x31,0x9A,0x33,}},
- {0xFF90,4,{0x84,0x31,0x9A,0x34,}},
- {0xFF91,4,{0x84,0x31,0x9A,0x35,}},
- {0xFF92,4,{0x84,0x31,0x9A,0x36,}},
- {0xFF93,4,{0x84,0x31,0x9A,0x37,}},
- {0xFF94,4,{0x84,0x31,0x9A,0x38,}},
- {0xFF95,4,{0x84,0x31,0x9A,0x39,}},
- {0xFF96,4,{0x84,0x31,0x9B,0x30,}},
- {0xFF97,4,{0x84,0x31,0x9B,0x31,}},
- {0xFF98,4,{0x84,0x31,0x9B,0x32,}},
- {0xFF99,4,{0x84,0x31,0x9B,0x33,}},
- {0xFF9A,4,{0x84,0x31,0x9B,0x34,}},
- {0xFF9B,4,{0x84,0x31,0x9B,0x35,}},
- {0xFF9C,4,{0x84,0x31,0x9B,0x36,}},
- {0xFF9D,4,{0x84,0x31,0x9B,0x37,}},
- {0xFF9E,4,{0x84,0x31,0x9B,0x38,}},
- {0xFF9F,4,{0x84,0x31,0x9B,0x39,}},
- {0xFFA0,4,{0x84,0x31,0x9C,0x30,}},
- {0xFFA1,4,{0x84,0x31,0x9C,0x31,}},
- {0xFFA2,4,{0x84,0x31,0x9C,0x32,}},
- {0xFFA3,4,{0x84,0x31,0x9C,0x33,}},
- {0xFFA4,4,{0x84,0x31,0x9C,0x34,}},
- {0xFFA5,4,{0x84,0x31,0x9C,0x35,}},
- {0xFFA6,4,{0x84,0x31,0x9C,0x36,}},
- {0xFFA7,4,{0x84,0x31,0x9C,0x37,}},
- {0xFFA8,4,{0x84,0x31,0x9C,0x38,}},
- {0xFFA9,4,{0x84,0x31,0x9C,0x39,}},
- {0xFFAA,4,{0x84,0x31,0x9D,0x30,}},
- {0xFFAB,4,{0x84,0x31,0x9D,0x31,}},
- {0xFFAC,4,{0x84,0x31,0x9D,0x32,}},
- {0xFFAD,4,{0x84,0x31,0x9D,0x33,}},
- {0xFFAE,4,{0x84,0x31,0x9D,0x34,}},
- {0xFFAF,4,{0x84,0x31,0x9D,0x35,}},
- {0xFFB0,4,{0x84,0x31,0x9D,0x36,}},
- {0xFFB1,4,{0x84,0x31,0x9D,0x37,}},
- {0xFFB2,4,{0x84,0x31,0x9D,0x38,}},
- {0xFFB3,4,{0x84,0x31,0x9D,0x39,}},
- {0xFFB4,4,{0x84,0x31,0x9E,0x30,}},
- {0xFFB5,4,{0x84,0x31,0x9E,0x31,}},
- {0xFFB6,4,{0x84,0x31,0x9E,0x32,}},
- {0xFFB7,4,{0x84,0x31,0x9E,0x33,}},
- {0xFFB8,4,{0x84,0x31,0x9E,0x34,}},
- {0xFFB9,4,{0x84,0x31,0x9E,0x35,}},
- {0xFFBA,4,{0x84,0x31,0x9E,0x36,}},
- {0xFFBB,4,{0x84,0x31,0x9E,0x37,}},
- {0xFFBC,4,{0x84,0x31,0x9E,0x38,}},
- {0xFFBD,4,{0x84,0x31,0x9E,0x39,}},
- {0xFFBE,4,{0x84,0x31,0x9F,0x30,}},
- {0xFFBF,4,{0x84,0x31,0x9F,0x31,}},
- {0xFFC0,4,{0x84,0x31,0x9F,0x32,}},
- {0xFFC1,4,{0x84,0x31,0x9F,0x33,}},
- {0xFFC2,4,{0x84,0x31,0x9F,0x34,}},
- {0xFFC3,4,{0x84,0x31,0x9F,0x35,}},
- {0xFFC4,4,{0x84,0x31,0x9F,0x36,}},
- {0xFFC5,4,{0x84,0x31,0x9F,0x37,}},
- {0xFFC6,4,{0x84,0x31,0x9F,0x38,}},
- {0xFFC7,4,{0x84,0x31,0x9F,0x39,}},
- {0xFFC8,4,{0x84,0x31,0xA0,0x30,}},
- {0xFFC9,4,{0x84,0x31,0xA0,0x31,}},
- {0xFFCA,4,{0x84,0x31,0xA0,0x32,}},
- {0xFFCB,4,{0x84,0x31,0xA0,0x33,}},
- {0xFFCC,4,{0x84,0x31,0xA0,0x34,}},
- {0xFFCD,4,{0x84,0x31,0xA0,0x35,}},
- {0xFFCE,4,{0x84,0x31,0xA0,0x36,}},
- {0xFFCF,4,{0x84,0x31,0xA0,0x37,}},
- {0xFFD0,4,{0x84,0x31,0xA0,0x38,}},
- {0xFFD1,4,{0x84,0x31,0xA0,0x39,}},
- {0xFFD2,4,{0x84,0x31,0xA1,0x30,}},
- {0xFFD3,4,{0x84,0x31,0xA1,0x31,}},
- {0xFFD4,4,{0x84,0x31,0xA1,0x32,}},
- {0xFFD5,4,{0x84,0x31,0xA1,0x33,}},
- {0xFFD6,4,{0x84,0x31,0xA1,0x34,}},
- {0xFFD7,4,{0x84,0x31,0xA1,0x35,}},
- {0xFFD8,4,{0x84,0x31,0xA1,0x36,}},
- {0xFFD9,4,{0x84,0x31,0xA1,0x37,}},
- {0xFFDA,4,{0x84,0x31,0xA1,0x38,}},
- {0xFFDB,4,{0x84,0x31,0xA1,0x39,}},
- {0xFFDC,4,{0x84,0x31,0xA2,0x30,}},
- {0xFFDD,4,{0x84,0x31,0xA2,0x31,}},
- {0xFFDE,4,{0x84,0x31,0xA2,0x32,}},
- {0xFFDF,4,{0x84,0x31,0xA2,0x33,}},
- {0xFFE0,2,{0xA1,0xE9,0x00,0x00,}},
- {0xFFE1,2,{0xA1,0xEA,0x00,0x00,}},
- {0xFFE2,2,{0xA9,0x56,0x00,0x00,}},
- {0xFFE3,2,{0xA3,0xFE,0x00,0x00,}},
- {0xFFE4,2,{0xA9,0x57,0x00,0x00,}},
- {0xFFE5,2,{0xA3,0xA4,0x00,0x00,}},
-};
-
-unsigned int ngb18030_enums = sizeof( gb18030_enums ) / sizeof( gb18030_enums[0] );
-
diff --git a/support/texlab/crates/bibutils_sys/src/generic.c b/support/texlab/crates/bibutils_sys/src/generic.c
deleted file mode 100644
index a75ed67377..0000000000
--- a/support/texlab/crates/bibutils_sys/src/generic.c
+++ /dev/null
@@ -1,106 +0,0 @@
-/* generic.c
- *
- * Copyright (c) Chris Putnam 2016-2019
- *
- * Source code released under GPL version 2
- *
- * xxxx_convertf() stubs that can be shared.
- */
-#include "bu_auth.h"
-#include "marc_auth.h"
-#include "name.h"
-#include "notes.h"
-#include "pages.h"
-#include "serialno.h"
-#include "title.h"
-#include "url.h"
-#include "utf8.h"
-#include "generic.h"
-
-/* stub for processtypes that aren't used, such as DEFAULT and ALWAYS handled by bibcore.c */
-int
-generic_null( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- return BIBL_OK;
-}
-
-int
-generic_url( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- return urls_split_and_add( str_cstr( invalue ), bibout, level );
-}
-
-int
-generic_notes( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- if ( notes_add( bibout, invalue, level ) ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
-}
-
-int
-generic_pages( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- if ( pages_add( bibout, outtag, invalue, level ) ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
-}
-
-int
-generic_person( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- if ( name_add( bibout, outtag, str_cstr( invalue ), level, &(pm->asis), &(pm->corps) ) ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
-}
-
-int
-generic_serialno( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- if ( addsn( bibout, str_cstr( invalue ), level ) ) return BIBL_OK;
- return BIBL_ERR_MEMERR;
-}
-
-/* SIMPLE = just copy */
-int
-generic_simple( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- if ( fields_add( bibout, outtag, str_cstr( invalue ), level ) == FIELDS_OK ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
-}
-
-/* just like generic_null(), but useful if we need one that isn't identical to generic_null() ala biblatexin.c */
-int
-generic_skip( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- fields_setused( bibin, n );
- return BIBL_OK;
-}
-
-int
-generic_title( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- if ( title_process( bibout, outtag, str_cstr( invalue ), level, pm->nosplittitle ) ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
-}
-
-int
-generic_genre( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int status;
-
- if ( is_marc_genre( str_cstr( invalue ) ) )
- status = fields_add( bibout, "GENRE:MARC", str_cstr( invalue ), level );
-
- else if ( is_bu_genre( str_cstr( invalue ) ) )
- status = fields_add( bibout, "GENRE:BIBUTILS", str_cstr( invalue ), level );
-
- else
- status = fields_add( bibout, "GENRE:UNKNOWN", str_cstr( invalue ), level );
-
- if ( status == FIELDS_OK ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
-}
-
-void
-generic_writeheader( FILE *outptr, param *pm )
-{
- if ( pm->utf8bom ) utf8_writebom( outptr );
-}
diff --git a/support/texlab/crates/bibutils_sys/src/generic.h b/support/texlab/crates/bibutils_sys/src/generic.h
deleted file mode 100644
index 84206ef6df..0000000000
--- a/support/texlab/crates/bibutils_sys/src/generic.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/* generic.h
- *
- * Copyright (c) Chris Putnam 2016-2019
- *
- * Source code released under GPL version 2
- *
- */
-#ifndef GENERIC_H
-#define GENERIC_H
-
-#include <stdio.h>
-#include "bibutils.h"
-
-int generic_null ( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout );
-int generic_url ( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout );
-int generic_notes ( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout );
-int generic_pages ( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout );
-int generic_person ( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout );
-int generic_serialno( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout );
-int generic_simple ( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout );
-int generic_skip ( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout );
-int generic_title ( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout );
-int generic_genre ( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout );
-
-void generic_writeheader( FILE *outptr, param *pm );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/intlist.c b/support/texlab/crates/bibutils_sys/src/intlist.c
deleted file mode 100644
index 94ebc3d5da..0000000000
--- a/support/texlab/crates/bibutils_sys/src/intlist.c
+++ /dev/null
@@ -1,590 +0,0 @@
-/*
- * intlist.c
- *
- * Copyright (c) Chris Putnam 2007-2019
- *
- * Version 1/12/2017
- *
- * Source code released under the GPL version 2
- *
- * Implements a simple managed array of ints
- *
- */
-#include <stdlib.h>
-#include <assert.h>
-#include "intlist.h"
-
-#define INTLIST_MINALLOC (20)
-
-static int
-intlist_validn( intlist *il, int n )
-{
- if ( n < 0 || n >= il->n ) return 0;
- return 1;
-}
-
-int
-intlist_wasfound( intlist *il, int n )
-{
- if ( n!=-1 ) return 1;
- else return 0;
-}
-
-int
-intlist_wasnotfound( intlist *il, int n )
-{
- if ( n==-1 ) return 1;
- else return 0;
-}
-
-static int
-intlist_alloc( intlist *il, int alloc_size )
-{
- il->data = ( int * ) calloc( alloc_size, sizeof( int ) );
- if ( !(il->data) ) return INTLIST_MEMERR;
- il->max = alloc_size;
- il->n = 0;
- return INTLIST_OK;
-}
-
-static int
-intlist_realloc( intlist *il, int alloc_size )
-{
- int i, *more;
-
- more = ( int * ) realloc( il->data, sizeof( int ) * alloc_size );
- if ( !more ) return INTLIST_MEMERR;
-
- il->data = more;
- il->max = alloc_size;
-
- for ( i=il->max; i<alloc_size; ++i )
- il->data[i] = 0;
-
- return INTLIST_OK;
-}
-
-static int
-intlist_ensure_space( intlist *il, int n )
-{
- int alloc = n;
-
- if ( il->max == 0 ) {
- if ( alloc < INTLIST_MINALLOC ) alloc = INTLIST_MINALLOC;
- return intlist_alloc( il, alloc );
- }
-
- else if ( il->max <= n ) {
- if ( alloc < il->max * 2 ) alloc = il->max * 2;
- return intlist_realloc( il, alloc );
- }
-
- return INTLIST_OK;
-}
-
-/* intlist_add()
- *
- * Returns INTLIST_OK/INTLIST_MEMERR
- */
-int
-intlist_add( intlist *il, int value )
-{
- int status;
-
- assert( il );
-
- status = intlist_ensure_space( il, il->n+1 );
-
- if ( status == INTLIST_OK ) {
- il->data[ il->n ] = value;
- il->n++;
- }
-
- return status;
-}
-
-/* intlist_add_unique()
- *
- * Returns INTLIST_OK/INTLIST_MEMERR
- */
-int
-intlist_add_unique( intlist *il, int value )
-{
- int n;
-
- assert( il );
-
- n = intlist_find( il, value );
- if ( intlist_wasnotfound( il, n ) )
- return intlist_add( il, value );
- else
- return INTLIST_OK;
-}
-
-int
-intlist_find_or_add( intlist *il, int value )
-{
- int n, status;
-
- n = intlist_find( il, value );
-
- if ( intlist_wasfound( il, n ) ) {
- return n;
- }
-
- else {
- status = intlist_add( il, value );
- if ( status!=INTLIST_OK ) return -1;
- else return il->n - 1;
- }
-}
-
-/* intlist_find()
- *
- * Returns position of value in range [0,n), or -1 if
- * value cannot be found
- */
-int
-intlist_find( intlist *il, int value )
-{
- int i;
-
- assert( il );
-
- for ( i=0; i<il->n; ++i )
- if ( il->data[i]==value ) return i;
-
- return -1;
-}
-
-static int
-intlist_remove_pos_core( intlist *il, int pos )
-{
- int i;
-
- assert( il );
-
- for ( i=pos; i<il->n-1; ++i )
- il->data[i] = il->data[i+1];
- il->n -= 1;
-
- return INTLIST_OK;
-}
-
-/* intlist_remove_pos()
- *
- * Returns INTLIST_OK on success.
- */
-int
-intlist_remove_pos( intlist *il, int pos )
-{
- assert( il );
- assert( intlist_validn( il, pos ) );
-
- return intlist_remove_pos_core( il, pos );
-}
-
-/* intlist_remove()
- *
- * Removes first instance of value from the intlist.
- * Returns INTLIST_OK/INTLIST_VALUE_MISSING
- */
-int
-intlist_remove( intlist *il, int value )
-{
- int pos;
-
- assert( il );
-
- pos = intlist_find( il, value );
- if ( pos==-1 ) return INTLIST_VALUE_MISSING;
-
- return intlist_remove_pos_core( il, pos );
-}
-
-/* don't actually free space, just reset counter */
-void
-intlist_empty( intlist *il )
-{
- assert( il );
-
- il->n = 0;
-}
-
-void
-intlist_free( intlist *il )
-{
- assert( il );
-
- if ( il->data ) free( il->data );
- intlist_init( il );
-}
-
-void
-intlist_delete( intlist *il )
-{
- assert( il );
-
- if ( il->data ) free( il->data );
- free( il );
-}
-
-void
-intlist_init( intlist *il )
-{
- assert( il );
-
- il->data = NULL;
- il->max = 0;
- il->n = 0;
-}
-
-/* Returns INTLIST_OK/INTLIST_MEMERR
- */
-int
-intlist_init_fill( intlist *il, int n, int v )
-{
- intlist_init( il );
- return intlist_fill( il, n, v );
-}
-
-/* intlist_init_range()
- *
- * Initializes intlist to values from [low,high) with step step.
- * Returns INTLIST_OK/INTLIST_MEMERR.
- */
-int
-intlist_init_range( intlist *il, int low, int high, int step )
-{
- intlist_init( il );
- return intlist_fill_range( il, low, high, step );
-}
-
-/* intlist_new()
- *
- * Allocates an empty intlist.
- * Returns pointer to intlist on success, NULL on memory error.
- */
-intlist *
-intlist_new( void )
-{
- intlist *il;
- il = ( intlist * ) malloc( sizeof( intlist ) );
- if ( il ) intlist_init( il );
- return il;
-}
-
-/* intlist_new_range()
- *
- * Allocates a intlist initialized to values from [low,high) in increments of step.
- * Returns pointer to intlist on success, NULL on memory error.
- */
-intlist *
-intlist_new_range( int low, int high, int step )
-{
- intlist *il;
- int status;
-
- il = intlist_new();
- if ( il ) {
- status = intlist_fill_range( il, low, high, step );
- if ( status==INTLIST_MEMERR ) {
- intlist_free( il );
- free( il );
- il = NULL;
- }
- }
- return il;
-}
-
-/* intlist_new_range()
- *
- * Allocates a intlist initialized to n elements with value v.
- * Returns pointer to intlist on success, NULL on memory error.
- */
-intlist *
-intlist_new_fill( int n, int v )
-{
- intlist *il;
- int status;
-
- il = intlist_new();
- if ( il ) {
- status = intlist_fill( il, n, v );
- if ( status==INTLIST_MEMERR ) {
- intlist_free( il );
- free( il );
- il = NULL;
- }
- }
- return il;
-}
-
-/* intlist_fill()
- *
- * Fill an intlist with n elements of value v.
- *
- * Returns INTLIST_OK or INTLIST_MEMERR.
- */
-int
-intlist_fill( intlist *il, int n, int v )
-{
- int i, status;
-
- assert ( n > 0 );
-
- status = intlist_ensure_space( il, n );
-
- if ( status==INTLIST_OK ) {
-
- for ( i=0; i<n; ++i )
- il->data[i] = v;
-
- il->n = n;
-
- }
-
- return status;
-}
-
-/* intlist_fill_range()
- *
- * Fill an intlist with the values [low,high) in increments of step
- *
- * Returns INTLIST_OK or INTLIST_MEMERR.
- */
-int
-intlist_fill_range( intlist *il, int low, int high, int step )
-{
- int i, n, status;
-
- n = ( high - low ) / step + 1;
-
- assert ( n > 0 );
-
- status = intlist_ensure_space( il, n );
-
- if ( status==INTLIST_OK ) {
-
- il->n = 0;
-
- /* ...fill intlist with range */
- if ( step > 0 ) {
- for ( i=low; i<high; i+=step ) {
- il->data[il->n] = i;
- il->n += 1;
- }
- }
- else {
- for ( i=low; i>high; i+=step ) {
- il->data[il->n] = i;
- il->n += 1;
- }
- }
-
- }
-
- return status;
-}
-
-static int
-intcomp( const void *v1, const void *v2 )
-{
- int *i1 = ( int * ) v1;
- int *i2 = ( int * ) v2;
- if ( *i1 < *i2 ) return -1;
- else if ( *i1 > *i2 ) return 1;
- return 0;
-}
-
-void
-intlist_sort( intlist *il )
-{
- assert( il );
-
- qsort( il->data, il->n, sizeof( int ), intcomp );
-}
-
-/* Returns random integer in the range [floor,ceil) */
-static int
-randomint( int floor, int ceil )
-{
- int len = ceil - floor;
- return floor + rand() % len;
-}
-
-static void
-swap( int *a, int *b )
-{
- int tmp;
- tmp = *a;
- *a = *b;
- *b = tmp;
-}
-
-void
-intlist_randomize( intlist *il )
-{
- int i, j;
-
- assert( il );
-
- if ( il->n < 2 ) return;
- for ( i=0; i<il->n; ++i ) {
- j = randomint( i, il->n );
- if ( i==j ) continue;
- swap( &(il->data[i]), &(il->data[j]) );
- }
-}
-
-/* Returns INTLIST_OK/INTLIST_MEMERR */
-int
-intlist_copy( intlist *to, intlist *from )
-{
- int i, status;
-
- assert( to );
- assert( from );
-
- status = intlist_ensure_space( to, from->n );
-
- if ( status==INTLIST_OK ) {
-
- to->n = from->n;
-
- for ( i=0; i<from->n; ++i )
- to->data[i] = from->data[i];
-
- }
-
- return status;
-}
-
-/* Returns pointer on success, NULL on error */
-intlist *
-intlist_dup( intlist *il )
-{
- intlist *l;
- int status;
-
- assert( il );
-
- l = intlist_new();
- if ( l ) {
- status = intlist_copy( l, il );
- if ( status==INTLIST_MEMERR ) {
- intlist_delete( l );
- l = NULL;
- }
- }
-
- return l;
-}
-
-int
-intlist_append( intlist *to, intlist *from )
-{
- int i, status;
-
- assert( to );
- assert( from );
-
- status = intlist_ensure_space( to, to->n + from->n );
-
- if ( status == INTLIST_OK ) {
-
- for ( i=0; i<from->n; ++i )
- to->data[ to->n + i ] = from->data[ i ];
-
- to->n += from->n;
- }
-
- return status;
-}
-
-int
-intlist_append_unique( intlist *to, intlist *from )
-{
- int i, nsave, status = INTLIST_OK;
-
- assert( to );
- assert( from );
-
- nsave = to->n;
- for ( i=0; i<from->n; ++i ) {
- if ( intlist_find( to, from->data[i] )!=-1 ) continue;
- status = intlist_add( to, from->data[i] );
- if ( status==INTLIST_MEMERR ) {
- to->n = nsave;
- }
- }
- return status;
-}
-
-int
-intlist_get( intlist *il, int pos )
-{
- assert( il );
- assert( intlist_validn( il, pos ) );
-
- return il->data[pos];
-}
-
-/* intlist_set()
- *
- * Returns INTLIST_OK
- */
-int
-intlist_set( intlist *il, int pos, int value )
-{
- assert( il );
- assert( intlist_validn( il, pos ) );
-
- il->data[pos] = value;
- return INTLIST_OK;
-}
-
-float
-intlist_median( intlist *il )
-{
- intlist *tmp;
- float median;
- int m1, m2;
-
- assert( il );
-
- if ( il->n==0 ) return 0.0;
-
- tmp = intlist_dup( il );
- if ( !tmp ) return 0.0;
-
- intlist_sort( tmp );
-
- if ( tmp->n % 2 == 1 ) {
- median = intlist_get( tmp, tmp->n / 2 );
- } else {
- m1 = intlist_get( tmp, tmp->n / 2 );
- m2 = intlist_get( tmp, tmp->n / 2 - 1);
- median = ( m1 + m2 ) / 2.0;
- }
-
- intlist_delete( tmp );
-
- return median;
-}
-
-float
-intlist_mean( intlist *il )
-{
- float sum = 0.0;
- int i;
-
- assert( il );
-
- if ( il->n==0 ) return 0.0;
-
- for ( i=0; i<il->n; ++i )
- sum += intlist_get( il, i );
-
- return sum / il->n;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/intlist.h b/support/texlab/crates/bibutils_sys/src/intlist.h
deleted file mode 100644
index c98f145e2f..0000000000
--- a/support/texlab/crates/bibutils_sys/src/intlist.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- * intlist.h
- *
- * Copyright (c) Chris Putnam 2007-2019
- *
- * Version 01/12/2017
- *
- * Source code released under the GPL version 2
- *
- */
-
-#ifndef INTLIST_H
-#define INTLIST_H
-
-#define INTLIST_OK (0)
-#define INTLIST_MEMERR (-1)
-#define INTLIST_VALUE_MISSING (-2)
-
-typedef struct intlist {
- int n, max;
- int *data;
-} intlist;
-
-void intlist_init( intlist *il );
-int intlist_init_fill( intlist *il, int n, int value );
-int intlist_init_range( intlist *il, int low, int high, int step );
-intlist * intlist_new( void );
-intlist * intlist_new_fill( int n, int value );
-intlist * intlist_new_range( int low, int high, int step );
-void intlist_delete( intlist *il );
-void intlist_sort( intlist *il );
-void intlist_randomize( intlist *il );
-int intlist_add( intlist *il, int value );
-int intlist_add_unique( intlist *il, int value );
-int intlist_fill( intlist *il, int n, int value );
-int intlist_fill_range( intlist *il, int low, int high, int step );
-int intlist_find( intlist *il, int searchvalue );
-int intlist_find_or_add( intlist *il, int searchvalue );
-void intlist_empty( intlist *il );
-void intlist_free( intlist *il );
-int intlist_copy( intlist *to, intlist *from );
-intlist * intlist_dup( intlist *from );
-int intlist_get( intlist *il, int pos );
-int intlist_set( intlist *il, int pos, int value );
-int intlist_remove( intlist *il, int searchvalue );
-int intlist_remove_pos( intlist *il, int pos );
-int intlist_append( intlist *to, intlist *from );
-int intlist_append_unique( intlist *to, intlist *from );
-float intlist_median( intlist *il );
-float intlist_mean( intlist *il );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/is_ws.c b/support/texlab/crates/bibutils_sys/src/is_ws.c
deleted file mode 100644
index 4f9e22e35b..0000000000
--- a/support/texlab/crates/bibutils_sys/src/is_ws.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * is_ws.c
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include "is_ws.h"
-
-/* is_ws(), is whitespace */
-int
-is_ws( const char ch )
-{
- if ( ch==' ' || ch=='\n' || ch=='\t' || ch=='\r' ) return 1;
- else return 0;
-}
-
-const char *
-skip_ws( const char *p )
-{
- if ( p ) {
- while ( is_ws( *p ) ) p++;
- }
- return p;
-}
-
-const char *
-skip_notws( const char *p )
-{
- if ( p ) {
- while ( *p && !is_ws( *p ) ) p++;
- }
- return p;
-}
-
-const char *
-skip_line( const char *p )
-{
- /* ...skip until end-of-line markers */
- while ( *p && *p!='\n' && *p!='\r' ) p++;
-
- /* ...skip end-of-line marker */
- if ( *p=='\r' ) p++; /* for CR LF or just CR end of lines */
- if ( *p=='\n' ) p++;
-
- return p;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/is_ws.h b/support/texlab/crates/bibutils_sys/src/is_ws.h
deleted file mode 100644
index 7e2adbaf82..0000000000
--- a/support/texlab/crates/bibutils_sys/src/is_ws.h
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
- * is_ws.h
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef IS_WS_H
-#define IS_WS_H
-
-int is_ws( const char ch );
-const char *skip_ws( const char *p );
-const char *skip_notws( const char *p );
-const char *skip_line( const char *p );
-
-#endif
-
diff --git a/support/texlab/crates/bibutils_sys/src/isiin.c b/support/texlab/crates/bibutils_sys/src/isiin.c
deleted file mode 100644
index 8fd3945bc6..0000000000
--- a/support/texlab/crates/bibutils_sys/src/isiin.c
+++ /dev/null
@@ -1,420 +0,0 @@
-/*
- * isiin.c
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Program and source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include "is_ws.h"
-#include "str.h"
-#include "str_conv.h"
-#include "name.h"
-#include "fields.h"
-#include "reftypes.h"
-#include "bibformats.h"
-#include "generic.h"
-
-extern variants isi_all[];
-extern int isi_nall;
-
-static int isiin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset );
-static int isiin_typef( fields *isiin, const char *filename, int nref, param *p );
-static int isiin_convertf( fields *isiin, fields *info, int reftype, param *p );
-static int isiin_processf( fields *isiin, const char *p, const char *filename, long nref, param *pm );
-
-
-/*****************************************************
- PUBLIC: void isiin_initparams()
-*****************************************************/
-int
-isiin_initparams( param *pm, const char *progname )
-{
- pm->readformat = BIBL_ISIIN;
- pm->charsetin = BIBL_CHARSET_DEFAULT;
- pm->charsetin_src = BIBL_SRC_DEFAULT;
- pm->latexin = 0;
- pm->xmlin = 0;
- pm->utf8in = 0;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->output_raw = 0;
-
- pm->readf = isiin_readf;
- pm->processf = isiin_processf;
- pm->cleanf = NULL;
- pm->typef = isiin_typef;
- pm->convertf = isiin_convertf;
- pm->all = isi_all;
- pm->nall = isi_nall;
-
- slist_init( &(pm->asis) );
- slist_init( &(pm->corps) );
-
- if ( !progname ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int isiin_readf()
-*****************************************************/
-
-/* ISI definition of a tag is strict:
- * char 1 = uppercase alphabetic character
- * char 2 = uppercase alphabetic character or digit
- */
-
-static int
-is_isi_tag( const char *buf )
-{
- if ( !isupper( (unsigned char )buf[0] ) ) return 0;
- if ( !( isupper( (unsigned char )buf[1] ) || isdigit( (unsigned char )buf[1] ) ) ) return 0;
- return 1;
-}
-
-static int
-readmore( FILE *fp, char *buf, int bufsize, int *bufpos, str *line )
-{
- if ( line->len ) return 1;
- else return str_fget( fp, buf, bufsize, bufpos, line );
-}
-
-static int
-isiin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset )
-{
- int haveref = 0, inref = 0;
- char *p;
- *fcharset = CHARSET_UNKNOWN;
- while ( !haveref && readmore( fp, buf, bufsize, bufpos, line ) ) {
- if ( !line->data ) continue;
- p = &(line->data[0]);
- /* Recognize UTF8 BOM */
- if ( line->len > 2 &&
- (unsigned char)(p[0])==0xEF &&
- (unsigned char)(p[1])==0xBB &&
- (unsigned char)(p[2])==0xBF ) {
- *fcharset = CHARSET_UNICODE;
- p += 3;
- }
- /* Each reference ends with 'ER ' */
- if ( is_isi_tag( p ) ) {
- if ( !strncmp( p, "FN ", 3 ) ) {
- if (strncasecmp( p, "FN ISI Export Format",20)){
- fprintf( stderr, ": warning file FN type not '%s' not recognized.\n", /*r->progname,*/ p );
- }
- } else if ( !strncmp( p, "VR ", 3 ) ) {
- if ( strncasecmp( p, "VR 1.0", 6 ) ) {
- fprintf(stderr,": warning file version number '%s' not recognized, expected 'VR 1.0'\n", /*r->progname,*/ p );
- }
- } else if ( !strncmp( p, "ER", 2 ) ) haveref = 1;
- else {
- str_addchar( reference, '\n' );
- str_strcatc( reference, p );
- inref = 1;
- }
- str_empty( line );
- }
- /* not a tag, but we'll append to the last values */
- else if ( inref ) {
- str_addchar( reference, '\n' );
- str_strcatc( reference, p );
- str_empty( line );
- }
- else {
- str_empty( line );
- }
- }
- return haveref;
-}
-
-/*****************************************************
- PUBLIC: int isiin_processf()
-*****************************************************/
-
-static const char *
-process_tagged_line( str *tag, str *data, const char *p )
-{
- int i;
-
- /* collect tag and skip past it */
- i = 0;
- while ( i<2 && *p && *p!='\r' && *p!='\n') {
- str_addchar( tag, *p++ );
- i++;
- }
- while ( *p==' ' || *p=='\t' ) p++;
- while ( *p && *p!='\r' && *p!='\n' )
- str_addchar( data, *p++ );
- str_trimendingws( data );
- while ( *p=='\r' || *p=='\n' ) p++;
- return p;
-}
-
-static const char *
-process_untagged_line( str *data, const char *p )
-{
- while ( *p==' ' || *p=='\t' ) p++;
- while ( *p && *p!='\r' && *p!='\n' )
- str_addchar( data, *p++ );
- str_trimendingws( data );
- while ( *p=='\r' || *p=='\n' ) p++;
- return p;
-}
-
-static int
-add_tag_value( fields *isiin, str *tag, str *value, int *tag_added )
-{
- int status;
-
- if ( str_has_value( tag ) && str_has_value( value ) ) {
- status = fields_add( isiin, str_cstr( tag ), str_cstr( value ), 0 );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- *tag_added = 1;
- }
-
- else {
- *tag_added = 0;
- }
-
- return BIBL_OK;
-}
-
-static int
-merge_tag_value( fields *isiin, str *tag, str *value, int *tag_added )
-{
- int n, status;
-
- if ( str_has_value( value ) ) {
-
- if ( *tag_added==1 ) {
-
- n = fields_num( isiin );
- if ( n==0 ) return BIBL_OK;
-
- /* only one AU or AF for list of authors */
- if ( !strcmp( str_cstr( tag ), "AU" ) ) {
- status = fields_add( isiin, "AU", str_cstr( value ), 0 );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- } else if ( !strcmp( str_cstr( tag ), "AF" ) ) {
- status = fields_add( isiin, "AF", str_cstr( value ), 0 );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- /* otherwise append multiline data */
- else {
- str_addchar( &(isiin->data[n-1]),' ');
- str_strcat( &(isiin->data[n-1]), value );
- if ( str_memerr( &(isiin->data[n-1]) ) ) return BIBL_ERR_MEMERR;
- }
- }
-
- else {
- status = fields_add( isiin, str_cstr( tag ), str_cstr( value ), 0 );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- *tag_added = 1;
- }
- }
-
- return BIBL_OK;
-}
-
-static int
-isiin_processf( fields *isiin, const char *p, const char *filename, long nref, param *pm )
-{
- int status, tag_added = 0, ret = 1;
- str tag, value;
-
- strs_init( &tag, &value, NULL );
-
- while ( *p ) {
-
- /* ...with tag, add */
- if ( is_isi_tag( p ) ) {
- str_empty( &tag );
- str_empty( &value );
- p = process_tagged_line( &tag, &value, p );
- status = add_tag_value( isiin, &tag, &value, &tag_added );
- if ( status!=BIBL_OK ) {
- ret = 0;
- goto out;
- }
- }
-
- /* ...untagged, merge -- one AU or AF for list of authors */
- else {
- str_empty( &value );
- p = process_untagged_line( &value, p );
- status = merge_tag_value( isiin, &tag, &value, &tag_added );
- if ( status!=BIBL_OK ) {
- ret = 0;
- goto out;
- }
- }
-
- }
-out:
- strs_free( &value, &tag, NULL );
- return ret;
-}
-
-/*****************************************************
- PUBLIC: int isiin_typef()
-*****************************************************/
-static int
-isiin_typef( fields *isiin, const char *filename, int nref, param *p )
-{
- int ntypename, nrefname, is_default;
- char *refname = "", *typename="";
-
- ntypename = fields_find( isiin, "PT", LEVEL_MAIN );
- nrefname = fields_find( isiin, "UT", LEVEL_MAIN );
-
- if ( nrefname!=FIELDS_NOTFOUND ) refname = fields_value( isiin, nrefname, FIELDS_CHRP_NOUSE );
- if ( ntypename!=FIELDS_NOTFOUND ) typename = fields_value( isiin, ntypename, FIELDS_CHRP_NOUSE );
-
- return get_reftype( typename, nref, p->progname, p->all, p->nall, refname, &is_default, REFTYPE_CHATTY );
-}
-
-/*****************************************************
- PUBLIC: int isiin_convertf(), returns BIBL_OK or BIBL_ERR_MEMERR
-*****************************************************/
-
-/* pull off authors first--use AF before AU */
-static int
-isiin_addauthors( fields *isiin, fields *info, int reftype, variants *all, int nall, slist *asis, slist *corps )
-{
- char *newtag, *authortype, use_af[]="AF", use_au[]="AU";
- int level, i, n, has_af=0, has_au=0, nfields, ok;
- str *t, *d;
-
- nfields = fields_num( isiin );
- for ( i=0; i<nfields && has_af==0; ++i ) {
- t = fields_tag( isiin, i, FIELDS_STRP );
- if ( !strcasecmp( t->data, "AU" ) ) has_au++;
- if ( !strcasecmp( t->data, "AF" ) ) has_af++;
- }
- if ( has_af ) authortype = use_af;
- else if ( has_au ) authortype = use_au;
- else return BIBL_OK; /* no authors */
-
- for ( i=0; i<nfields; ++i ) {
- t = fields_tag( isiin, i, FIELDS_STRP );
- if ( strcasecmp( t->data, authortype ) ) continue;
- d = fields_value( isiin, i, FIELDS_STRP );
- n = process_findoldtag( authortype, reftype, all, nall );
- level = ((all[reftype]).tags[n]).level;
- newtag = all[reftype].tags[n].newstr;
- ok = name_add( info, newtag, d->data, level, asis, corps );
- if ( !ok ) return BIBL_ERR_MEMERR;
- }
- return BIBL_OK;
-}
-
-static int
-isiin_keyword( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int fstatus, status = BIBL_OK;
- const char *p = invalue->data;
- str keyword;
-
- str_init( &keyword );
- while ( *p ) {
- p = str_cpytodelim( &keyword, skip_ws( p ), ";", 1 );
- if ( str_memerr( &keyword ) ) { status = BIBL_ERR_MEMERR; goto out; }
- if ( str_has_value( &keyword ) ) {
- fstatus = fields_add( bibout, outtag, keyword.data, level );
- if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; }
- }
- }
-out:
- str_free( &keyword );
- return status;
-}
-
-static void
-isiin_report_notag( param *p, char *tag )
-{
- if ( p->verbose && strcmp( tag, "PT" ) ) {
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Did not identify ISI tag '%s'\n", tag );
- }
-}
-
-static int
-isiin_convertf( fields *bibin, fields *bibout, int reftype, param *p )
-{
- static int (*convertfns[NUM_REFTYPES])(fields *, int, str *, str *, int, param *, char *, fields *) = {
- // Patch: Fix compilation on MSVC target
- [ 0 ] = generic_null,
- [ 1 ] = generic_null,
- [ 2 ] = generic_null,
- [ 3 ] = generic_null,
- [ 4 ] = generic_null,
- [ 5 ] = generic_null,
- [ 6 ] = generic_null,
- [ 7 ] = generic_null,
- [ 8 ] = generic_null,
- [ 9 ] = generic_null,
- [ 10 ] = generic_null,
- [ 11 ] = generic_null,
- [ 12 ] = generic_null,
- [ 13 ] = generic_null,
- [ 14 ] = generic_null,
- [ 15 ] = generic_null,
- [ 16 ] = generic_null,
- [ 17 ] = generic_null,
- [ 18 ] = generic_null,
- [ 19 ] = generic_null,
- [ 20 ] = generic_null,
- [ 21 ] = generic_null,
- [ 22 ] = generic_null,
- [ 23 ] = generic_null,
- [ 24 ] = generic_null,
- [ 25 ] = generic_null,
- [ SIMPLE ] = generic_simple,
- [ TITLE ] = generic_title,
- [ PERSON ] = generic_person,
- [ SERIALNO ] = generic_serialno,
- [ DATE ] = generic_simple,
- [ NOTES ] = generic_notes,
- [ KEYWORD ] = isiin_keyword,
- };
-
- int process, level, i, nfields, status;
- str *intag, *invalue;
- char *outtag;
-
- status = isiin_addauthors( bibin, bibout, reftype, p->all, p->nall, &(p->asis), &(p->corps) );
- if ( status!=BIBL_OK ) return status;
-
- nfields = fields_num( bibin );
- for ( i=0; i<nfields; ++i ) {
-
- intag = fields_tag( bibin, i, FIELDS_STRP );
- if ( !strcasecmp( str_cstr( intag ), "AU" ) || !strcasecmp( str_cstr( intag ), "AF" ) )
- continue;
-
- if ( !translate_oldtag( str_cstr( intag ), reftype, p->all, p->nall, &process, &level, &outtag ) ) {
- isiin_report_notag( p, str_cstr( intag ) );
- continue;
- }
-
- invalue = fields_value( bibin, i, FIELDS_STRP );
-
- status = convertfns[ process ] ( bibin, i, intag, invalue, level, p, outtag, bibout );
- if ( status!=BIBL_OK ) return status;
- }
-
- if ( status==BIBL_OK && p->verbose ) fields_report( bibout, stderr );
-
- return status;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/isiout.c b/support/texlab/crates/bibutils_sys/src/isiout.c
deleted file mode 100644
index fdc4408af4..0000000000
--- a/support/texlab/crates/bibutils_sys/src/isiout.c
+++ /dev/null
@@ -1,363 +0,0 @@
-/*
- * isiout.c
- *
- * Copyright (c) Chris Putnam 2008-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "bibformats.h"
-#include "bibutils.h"
-#include "fields.h"
-#include "generic.h"
-#include "str.h"
-#include "title.h"
-#include "type.h"
-#include "utf8.h"
-
-/*****************************************************
- PUBLIC: int isiout_initparams()
-*****************************************************/
-
-static int isiout_write( fields *info, FILE *fp, param *p, unsigned long refnum );
-static int isiout_assemble( fields *in, fields *out, param *pm, unsigned long refnum );
-
-int
-isiout_initparams( param *pm, const char *progname )
-{
- pm->writeformat = BIBL_ISIOUT;
- pm->format_opts = 0;
- pm->charsetout = BIBL_CHARSET_DEFAULT;
- pm->charsetout_src = BIBL_SRC_DEFAULT;
- pm->latexout = 0;
- pm->utf8out = BIBL_CHARSET_UTF8_DEFAULT;
- pm->utf8bom = BIBL_CHARSET_BOM_DEFAULT;
- pm->xmlout = BIBL_XMLOUT_FALSE;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->singlerefperfile = 0;
-
- if ( pm->charsetout == BIBL_CHARSET_UNICODE ) {
- pm->utf8out = pm->utf8bom = 1;
- }
-
- pm->headerf = generic_writeheader;
- pm->footerf = NULL;
- pm->assemblef = isiout_assemble;
- pm->writef = isiout_write;
-
- if ( !pm->progname ) {
- if ( !progname ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int isiout_assemble()
-*****************************************************/
-
-enum {
- TYPE_UNKNOWN = 0,
- TYPE_ARTICLE = 1,
- TYPE_INBOOK = 2,
- TYPE_BOOK = 3,
-};
-
-static int
-get_type( fields *in )
-{
- match_type genre_matches[] = {
- { "periodical", TYPE_ARTICLE, LEVEL_ANY },
- { "academic journal", TYPE_ARTICLE, LEVEL_ANY },
- { "journal article", TYPE_ARTICLE, LEVEL_ANY },
- { "book", TYPE_BOOK, LEVEL_MAIN },
- { "book", TYPE_INBOOK, LEVEL_ANY },
- { "book chapter", TYPE_INBOOK, LEVEL_ANY },
- { "collection", TYPE_BOOK, LEVEL_MAIN },
- { "collection", TYPE_INBOOK, LEVEL_ANY },
- };
-
- int ngenre_matches = sizeof( genre_matches ) / sizeof( genre_matches[0] );
-
- match_type issuance_matches[] = {
- { "monographic", TYPE_BOOK, LEVEL_MAIN },
- { "monographic", TYPE_INBOOK, LEVEL_ANY },
- };
- int nissuance_matches = sizeof( issuance_matches ) / sizeof( issuance_matches[0] );
-
- int type;
-
- type = type_from_mods_hints( in, TYPE_FROM_GENRE, genre_matches, ngenre_matches, TYPE_UNKNOWN );
- if ( type!=TYPE_UNKNOWN ) return type;
-
- return type_from_mods_hints( in, TYPE_FROM_ISSUANCE, issuance_matches, nissuance_matches, TYPE_UNKNOWN );
-}
-
-static void
-append_type( int type, fields *out, int *status )
-{
- int fstatus;
- char *s;
-
- switch( type ) {
- case TYPE_ARTICLE: s = "Journal"; break;
- case TYPE_INBOOK: s = "Chapter"; break;
- case TYPE_BOOK: s = "Book"; break;
- default: s = "Unknown"; break;
- }
-
- fstatus = fields_add( out, "PT", s, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
-}
-
-static void
-append_titlecore( fields *in, char *isitag, int level, char *maintag, char *subtag, fields *out, int *status )
-{
- str *mainttl = fields_findv( in, level, FIELDS_STRP, maintag );
- str *subttl = fields_findv( in, level, FIELDS_STRP, subtag );
- str fullttl;
- int fstatus;
-
- str_init( &fullttl );
- title_combine( &fullttl, mainttl, subttl );
-
- if ( str_memerr( &fullttl ) ) {
- *status = BIBL_ERR_MEMERR;
- goto out;
- }
-
- if ( str_has_value( &fullttl ) ) {
- fstatus = fields_add( out, isitag, str_cstr( &fullttl ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-out:
- str_free( &fullttl );
-}
-
-static void
-append_title( fields *in, char *isitag, int level, fields *out, int *status )
-{
- append_titlecore( in, isitag, level, "TITLE", "SUBTITLE", out, status );
-}
-
-static void
-append_abbrtitle( fields *in, char *isitag, int level, fields *out, int *status )
-{
- append_titlecore( in, isitag, level, "SHORTTITLE", "SHORTSUBTITLE", out, status );
-}
-
-static void
-append_keywords( fields *in, fields *out, int *status )
-{
- vplist_index i;
- str keywords;
- int fstatus;
- vplist kw;
-
- str_init( &keywords );
- vplist_init( &kw );
-
- fields_findv_each( in, LEVEL_ANY, FIELDS_STRP, &kw, "KEYWORD" );
- if ( kw.n ) {
- for ( i=0; i<kw.n; ++i ) {
- if ( i>0 ) str_strcatc( &keywords, "; " );
- str_strcat( &keywords, (str *) vplist_get( &kw, i ) );
- }
- if ( str_memerr( &keywords ) ) { *status = BIBL_ERR_MEMERR; goto out; }
- fstatus = fields_add( out, "DE", str_cstr( &keywords ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) { *status = BIBL_ERR_MEMERR; goto out; }
- }
-out:
- vplist_free( &kw );
- str_free( &keywords );
-}
-
-static void
-process_person( str *person, char *name )
-{
- str family, given, suffix;
- char *p = name;
-
- str_empty( person );
-
- strs_init( &family, &given, &suffix, NULL );
-
- while ( *p && *p!='|' )
- str_addchar( &family, *p++ );
-
- while ( *p=='|' && *(p+1)!='|' ) {
- p++;
- if ( *p!='|' ) str_addchar( &given, *p++ );
- while ( *p && *p!='|' ) p++;
- }
-
- if ( *p=='|' && *(p+1)=='|' ) {
- p += 2;
- while ( *p && *p!='|' ) str_addchar( &suffix, *p++ );
- }
-
- if ( str_has_value( &family ) ) str_strcat( person, &family );
- if ( str_has_value( &suffix ) ) {
- if ( str_has_value( &family ) ) str_strcatc( person, " " );
- str_strcat( person, &suffix );
- }
- if ( str_has_value( &given ) ) {
- if ( str_has_value( person ) ) str_strcatc( person, ", " );
- str_strcat( person, &given );
- }
-
- strs_free( &family, &given, &suffix, NULL );
-}
-
-static void
-append_people( fields *f, char *tag, char *isitag, int level, fields *out, int *status )
-{
- vplist_index i;
- vplist people;
- str person;
- int fstatus;
-
- str_init( &person );
- vplist_init( &people );
-
- fields_findv_each( f, level, FIELDS_CHRP, &people, tag );
- for ( i=0; i<people.n; ++i ) {
- process_person( &person, (char *)vplist_get( &people, i ) );
- if ( str_memerr( &person ) ) { *status = BIBL_ERR_MEMERR; goto out; }
- if ( i==0 ) fstatus = fields_add_can_dup( out, isitag, str_cstr( &person ), LEVEL_MAIN );
- else fstatus = fields_add_can_dup( out, " ", str_cstr( &person ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) { *status = BIBL_ERR_MEMERR; goto out; }
- }
-
-out:
- vplist_free( &people );
- str_free( &person );
-}
-
-static void
-append_easy( fields *in, char *tag, char *isitag, int level, fields *out, int *status )
-{
- char *value;
- int fstatus;
-
- value = fields_findv( in, level, FIELDS_CHRP, tag );
- if ( value ) {
- fstatus = fields_add( out, isitag, value, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-}
-
-static void
-append_easyall( fields *in, char *tag, char *isitag, int level, fields *out, int *status )
-{
- vplist_index i;
- int fstatus;
- vplist a;
-
- vplist_init( &a );
- fields_findv_each( in, level, FIELDS_CHRP, &a, tag );
- for ( i=0; i<a.n; ++i ) {
- fstatus = fields_add( out, isitag, (char *) vplist_get( &a, i ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- vplist_free( &a );
-}
-
-static void
-append_date( fields *in, fields *out, int *status )
-{
- char *month, *year;
- int fstatus;
-
- month = fields_findv_firstof( in, LEVEL_ANY, FIELDS_CHRP, "PARTDATE:MONTH", "DATE:MONTH", NULL );
- if ( month ) {
- fstatus = fields_add( out, "PD", month, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- year = fields_findv_firstof( in, LEVEL_ANY, FIELDS_CHRP, "PARTDATE:YEAR", "DATE:YEAR", NULL );
- if ( year ) {
- fstatus = fields_add( out, "PY", year, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-}
-
-static int
-isiout_assemble( fields *in, fields *out, param *pm, unsigned long refnum )
-{
- int type, status = BIBL_OK;
-
- type = get_type( in );
-
- append_type ( type, out, &status );
- append_people ( in, "AUTHOR", "AU", LEVEL_MAIN, out, &status );
- append_easyall( in, "AUTHOR:CORP", "AU", LEVEL_MAIN, out, &status );
- append_easyall( in, "AUTHOR:ASIS", "AU", LEVEL_MAIN, out, &status );
-
- append_title ( in, "TI", LEVEL_MAIN, out, &status );
- if ( type==TYPE_ARTICLE ) {
- append_title( in, "SO", LEVEL_HOST, out, &status );
- append_abbrtitle( in, "JI", LEVEL_HOST, out, &status );
- append_title( in, "SE", LEVEL_SERIES, out, &status );
- } else if ( type==TYPE_INBOOK ) {
- append_title( in, "BT", LEVEL_HOST, out, &status );
- append_title( in, "SE", LEVEL_SERIES, out, &status );
- } else { /* type==BOOK */
- append_title( in, "SE", LEVEL_HOST, out, &status );
- }
-
- append_date( in, out, &status );
-
- append_easy( in, "PAGES:START", "BP", LEVEL_ANY, out, &status );
- append_easy( in, "PAGES:STOP", "EP", LEVEL_ANY, out, &status );
- append_easy( in, "ARTICLENUMBER", "AR", LEVEL_ANY, out, &status );
- append_easy( in, "PAGES:TOTAL", "PG", LEVEL_ANY, out, &status );
-
- append_easy( in, "VOLUME", "VL", LEVEL_ANY, out, &status );
- append_easy( in, "ISSUE", "IS", LEVEL_ANY, out, &status );
- append_easy( in, "NUMBER", "IS", LEVEL_ANY, out, &status );
- append_easy( in, "PUBLISHER", "PU", LEVEL_ANY, out, &status );
- append_easy( in, "DOI", "DI", LEVEL_ANY, out, &status );
- append_easy( in, "URL", "WP", LEVEL_ANY, out, &status );
- append_easy( in, "ISIREFNUM", "UT", LEVEL_ANY, out, &status );
- append_easy( in, "LANGUAGE", "LA", LEVEL_ANY, out, &status );
- append_easy( in, "ISIDELIVERNUM", "GA", LEVEL_ANY, out, &status );
- append_keywords( in, out, &status );
- append_easy( in, "ISBN", "SN", LEVEL_ANY, out, &status );
- append_easy( in, "ISSN", "SN", LEVEL_ANY, out, &status );
- append_easy( in, "ABSTRACT", "AB", LEVEL_ANY, out, &status );
- append_easy( in, "TIMESCITED", "TC", LEVEL_ANY, out, &status );
- append_easy( in, "NUMBERREFS", "NR", LEVEL_ANY, out, &status );
- append_easy( in, "CITEDREFS", "CR", LEVEL_ANY, out, &status );
- append_easy( in, "ADDRESS", "PI", LEVEL_ANY, out, &status );
-
- return status;
-}
-
-/*****************************************************
- PUBLIC: int isiout_write()
-*****************************************************/
-
-static int
-isiout_write( fields *out, FILE *fp, param *p, unsigned long refnum )
-{
- int i;
-
- for ( i=0; i<out->n; ++i ) {
- fprintf( fp, "%s %s\n",
- ( char * ) fields_tag ( out, i, FIELDS_CHRP ),
- ( char * ) fields_value( out, i, FIELDS_CHRP )
- );
- }
- fprintf( fp, "ER\n\n" );
- fflush( fp );
- return BIBL_OK;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/isitypes.c b/support/texlab/crates/bibutils_sys/src/isitypes.c
deleted file mode 100644
index 0536236b76..0000000000
--- a/support/texlab/crates/bibutils_sys/src/isitypes.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * isitypes.c
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Program and source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <string.h>
-#include "is_ws.h"
-#include "fields.h"
-#include "reftypes.h"
-
-static lookups article[] = {
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN },
- { "AF", "AUTHOR", PERSON, LEVEL_MAIN },
- { "TI", "TITLE", TITLE, LEVEL_MAIN },
- { "SO", "TITLE", TITLE, LEVEL_HOST }, /* full journal name */
- { "JI", "SHORTTITLE", TITLE, LEVEL_HOST }, /* abbr journal name */
- { "J9", "SHORTTITLE", TITLE, LEVEL_HOST }, /* 29char journal name */
- { "PU", "PUBLISHER", SIMPLE, LEVEL_HOST },
- { "PI", "ADDRESS", SIMPLE, LEVEL_HOST }, /* publisher city */
- { "C1", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* author address */
- { "PA", "ADDRESS:PUBLISHER", SIMPLE, LEVEL_HOST }, /* publisher address */
- { "RP", "REPRINTADDRESS", SIMPLE, LEVEL_MAIN },
- { "PY", "PARTDATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "PD", "PARTDATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "AR", "ARTICLENUMBER", SIMPLE, LEVEL_MAIN }, /* AR=article number that Phys. Rev. B uses instead of page numbers */
- { "BP", "PAGES:START", SIMPLE, LEVEL_MAIN },
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN },
- { "PG", "PAGES:TOTAL", SIMPLE, LEVEL_MAIN },
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN },
- { "SN", "SERIALNUMBER", SERIALNO, LEVEL_HOST },
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "NF", "NOTES", NOTES, LEVEL_MAIN },
- { "DE", "KEYWORD", KEYWORD, LEVEL_MAIN }, /* author keywords */
- { "ID", "KEYWORD", KEYWORD, LEVEL_MAIN }, /* new ISI keywords */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "TC", "TIMESCITED", SIMPLE, LEVEL_MAIN },
- { "NR", "NUMBERREFS", SIMPLE, LEVEL_MAIN },
- { "CR", "CITEDREFS", SIMPLE, LEVEL_MAIN },
- { "PT", " ", TYPE, LEVEL_HOST },
- { "DT", "DOCUMENTTYPE", TYPE, LEVEL_MAIN },
- { "GA", "ISIDELIVERNUM", SIMPLE, LEVEL_MAIN }, /* ISI document delivery number */
- { "UT", "ISIREFNUM", SIMPLE, LEVEL_MAIN }, /* ISI unique article identifer */
- { "DI", "DOI", SIMPLE, LEVEL_MAIN },
- { " ", "INTERNAL_TYPE|ARTICLE", ALWAYS, LEVEL_MAIN },
- { " ", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:BIBUTILS|journal article", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|periodical", ALWAYS, LEVEL_HOST },
- { " ", "GENRE:BIBUTILS|academic journal", ALWAYS, LEVEL_HOST }
-};
-
-static lookups book[] = {
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN },
- { "AF", "AUTHOR", PERSON, LEVEL_MAIN },
- { "TI", "TITLE", TITLE, LEVEL_MAIN },
- { "SO", "TITLE", TITLE, LEVEL_HOST }, /* full journal name */
- { "JI", "SHORTTITLE", TITLE, LEVEL_HOST }, /* abbr journal name */
- { "J9", "SHORTTITLE", TITLE, LEVEL_HOST }, /* 29char journal name */
- { "PU", "PUBLISHER", SIMPLE, LEVEL_MAIN },
- { "PI", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* publisher city */
- { "C1", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* author address */
- { "PA", "ADDRESS:PUBLISHER", SIMPLE, LEVEL_MAIN }, /* publisher address */
- { "RP", "REPRINTADDRESS", SIMPLE, LEVEL_MAIN },
- { "PY", "DATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "PD", "DATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "BP", "PAGES:START", SIMPLE, LEVEL_MAIN },
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN },
- { "PG", "PAGES:TOTAL", SIMPLE, LEVEL_MAIN },
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN },
- { "SN", "SERIALNUMBER", SERIALNO, LEVEL_HOST },
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "NF", "NOTES", NOTES, LEVEL_MAIN },
- { "DE", "KEYWORD", KEYWORD, LEVEL_MAIN }, /* author keywords */
- { "ID", "KEYWORD", KEYWORD, LEVEL_MAIN }, /* new ISI keywords */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "TC", "TIMESCITED", SIMPLE, LEVEL_MAIN },
- { "NR", "NUMBERREFS", SIMPLE, LEVEL_MAIN },
- { "CR", "CITEDREFS", SIMPLE, LEVEL_MAIN },
- { "PT", " ", TYPE, LEVEL_MAIN },
- { "DT", "DOCUMENTTYPE", TYPE, LEVEL_MAIN },
- { "GA", "ISIDELIVERNUM", SIMPLE, LEVEL_MAIN }, /* ISI document delivery number */
- { "UT", "ISIREFNUM", SIMPLE, LEVEL_MAIN }, /* ISI unique article identifer */
- { "PT", " ", TYPE, LEVEL_HOST },
- { "DI", "DOI", SIMPLE, LEVEL_MAIN },
- { " ", "INTERNAL_TYPE|BOOK", ALWAYS, LEVEL_MAIN },
- { " ", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|book", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups inbook[] = {
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN },
- { "AF", "AUTHOR", PERSON, LEVEL_MAIN },
- { "TI", "TITLE", TITLE, LEVEL_MAIN },
- { "SO", "TITLE", TITLE, LEVEL_HOST }, /* full journal name */
- { "JI", "SHORTTITLE", TITLE, LEVEL_HOST }, /* abbr journal name */
- { "J9", "SHORTTITLE", TITLE, LEVEL_HOST }, /* 29char journal name */
- { "PU", "PUBLISHER", SIMPLE, LEVEL_HOST },
- { "PI", "ADDRESS", SIMPLE, LEVEL_HOST }, /* publisher city */
- { "C1", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* author address */
- { "PA", "ADDRESS:PUBLISHER", SIMPLE, LEVEL_HOST }, /* publisher address */
- { "RP", "REPRINTADDRESS", SIMPLE, LEVEL_MAIN },
- { "PY", "PARTDATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "PD", "PARTDATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "BP", "PAGES:START", SIMPLE, LEVEL_MAIN },
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN },
- { "PG", "PAGES:TOTAL", SIMPLE, LEVEL_HOST },
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN },
- { "SN", "SERIALNUMBER", SERIALNO, LEVEL_HOST },
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "NF", "NOTES", NOTES, LEVEL_MAIN },
- { "DE", "KEYWORD", KEYWORD, LEVEL_MAIN }, /* author keywords */
- { "ID", "KEYWORD", KEYWORD, LEVEL_MAIN }, /* new ISI keywords */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "TC", "TIMESCITED", SIMPLE, LEVEL_MAIN },
- { "NR", "NUMBERREFS", SIMPLE, LEVEL_MAIN },
- { "CR", "CITEDREFS", SIMPLE, LEVEL_MAIN },
- { "PT", " ", TYPE, LEVEL_HOST },
- { "DT", "DOCUMENTTYPE", TYPE, LEVEL_MAIN },
- { "GA", "ISIDELIVERNUM", SIMPLE, LEVEL_MAIN }, /* ISI document delivery number */
- { "UT", "ISIREFNUM", SIMPLE, LEVEL_MAIN }, /* ISI unique article identifer */
- { "DI", "DOI", SIMPLE, LEVEL_MAIN },
- { " ", "INTERNAL_TYPE|INBOOK", ALWAYS, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "ISSUANCE|monographic", ALWAYS, LEVEL_HOST },
- { " ", "GENRE:BIBUTILS|book chapter", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|book", ALWAYS, LEVEL_HOST }
-};
-
-static lookups bookinseries[] = {
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN },
- { "AF", "AUTHOR", PERSON, LEVEL_MAIN },
- { "TI", "TITLE", TITLE, LEVEL_MAIN },
- { "SO", "TITLE", TITLE, LEVEL_MAIN },
- { "SE", "TITLE", TITLE, LEVEL_HOST },
- { "BS", "SUBTITLE", TITLE, LEVEL_HOST },
- { "JI", "SHORTTITLE", TITLE, LEVEL_HOST }, /* abbr journal name */
- { "J9", "SHORTTITLE", TITLE, LEVEL_HOST }, /* 29char journal name */
- { "PU", "PUBLISHER", SIMPLE, LEVEL_HOST },
- { "PI", "ADDRESS", SIMPLE, LEVEL_HOST }, /* publisher city */
- { "C1", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* author address */
- { "PA", "ADDRESS:PUBLISHER", SIMPLE, LEVEL_HOST }, /* publisher address */
- { "RP", "REPRINTADDRESS", SIMPLE, LEVEL_MAIN },
- { "PY", "PARTDATE:YEAR", SIMPLE, LEVEL_MAIN },
- { "PD", "PARTDATE:MONTH", SIMPLE, LEVEL_MAIN },
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "BP", "PAGES:START", SIMPLE, LEVEL_MAIN },
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN },
- { "PG", "PAGES:TOTAL", SIMPLE, LEVEL_MAIN },
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN },
- { "SN", "SERIALNUMBER", SERIALNO, LEVEL_HOST },
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "NF", "NOTES", NOTES, LEVEL_MAIN },
- { "DE", "KEYWORD", KEYWORD, LEVEL_MAIN }, /* author keywords */
- { "ID", "KEYWORD", KEYWORD, LEVEL_MAIN }, /* new ISI keywords */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "TC", "TIMESCITED", SIMPLE, LEVEL_MAIN },
- { "NR", "NUMBERREFS", SIMPLE, LEVEL_MAIN },
- { "CR", "CITEDREFS", SIMPLE, LEVEL_MAIN },
- { "PT", " ", TYPE, LEVEL_HOST },
- { "DT", "DOCUMENTTYPE", TYPE, LEVEL_MAIN },
- { "GA", "ISIDELIVERNUM", SIMPLE, LEVEL_MAIN }, /* ISI document delivery number */
- { "UT", "ISIREFNUM", SIMPLE, LEVEL_MAIN }, /* ISI unique article identifer */
- { "DI", "DOI", SIMPLE, LEVEL_MAIN },
- { " ", "INTERNAL_TYPE|INCOLLECTION", ALWAYS, LEVEL_MAIN },
- { " ", "ISSUANCE|monographic", ALWAYS, LEVEL_HOST },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:BIBUTILS|collection", ALWAYS, LEVEL_MAIN }
-};
-
-#define ORIG(a) ( &(a[0]) )
-#define SIZE(a) ( sizeof( a ) / sizeof( lookups ) )
-#define REFTYPE(a,b) { a, ORIG(b), SIZE(b) }
-
-variants isi_all[] = {
- REFTYPE( "Journal", article ),
- REFTYPE( "J", article ),
- REFTYPE( "Book", book ),
- REFTYPE( "B", book ),
- REFTYPE( "Chapter", inbook ),
- REFTYPE( "S", bookinseries ),
-};
-
-int isi_nall = sizeof( isi_all ) / sizeof( variants );
-
diff --git a/support/texlab/crates/bibutils_sys/src/iso639_1.c b/support/texlab/crates/bibutils_sys/src/iso639_1.c
deleted file mode 100644
index 52d989e86b..0000000000
--- a/support/texlab/crates/bibutils_sys/src/iso639_1.c
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
- * iso639_1.c
- */
-#include <string.h>
-#include "iso639_1.h"
-#include "msvc_fix.h"
-
-typedef struct {
- char *code;
- char *language;
-} iso639_1_t;
-
-static iso639_1_t iso639_1[] = {
- { "aa", "Afar" },
- { "ab", "Abkhazian" },
- { "ae", "Avestan" },
- { "af", "Afrikaans" },
- { "ak", "Akan" },
- { "am", "Amharic" },
- { "an", "Aragonese" },
- { "ar", "Arabic" },
- { "as", "Assamese" },
- { "av", "Avaric" },
- { "ay", "Aymara" },
- { "az", "Azerbaijani" },
- { "ba", "Bashkir" },
- { "be", "Belarusian" },
- { "bg", "Bulgarian" },
- { "bh", "Bihari languages" },
- { "bi", "Bislama" },
- { "bm", "Bambara" },
- { "bn", "Bengali" },
- { "bo", "Tibetan" },
- { "br", "Breton" },
- { "bs", "Bosnian" },
- { "ca", "Catalan" },
- { "ce", "Chechen" },
- { "ch", "Chamorro" },
- { "co", "Corsican" },
- { "cr", "Cree" },
- { "cs", "Czech" },
- { "cu", "Church Slavic" },
- { "cv", "Chuvash" },
- { "cy", "Welsh" },
- { "da", "Danish" },
- { "de", "German" },
- { "dv", "Dhivehi" },
- { "dz", "Dzongkha" },
- { "ee", "Ewe" },
- { "el", "Modern Greek" },
- { "en", "English" },
- { "eo", "Esperanto" },
- { "es", "Spanish" },
- { "et", "Estonian" },
- { "eu", "Basque" },
- { "fa", "Persian" },
- { "ff", "Fulah" },
- { "fi", "Finnish" },
- { "fj", "Fijian" },
- { "fo", "Faroese" },
- { "fr", "French" },
- { "fy", "Western Frisian" },
- { "ga", "Irish" },
- { "gd", "Scottish Gaelic" },
- { "gl", "Galician" },
- { "gn", "Guarani" },
- { "gu", "Gujarati" },
- { "gv", "Manx" },
- { "ha", "Hausa" },
- { "he", "Hebrew" },
- { "hi", "Hindi" },
- { "ho", "Hiri Motu" },
- { "hr", "Croatian" },
- { "ht", "Haitian" },
- { "hu", "Hungarian" },
- { "hy", "Armenian" },
- { "hz", "Herero" },
- { "ia", "Interlingua" },
- { "id", "Indonesian" },
- { "ie", "Interlingue" },
- { "ig", "Igbo" },
- { "ii", "Sichuan Yi" },
- { "ik", "Inupiaq" },
- { "io", "Ido" },
- { "is", "Icelandic" },
- { "it", "Italian" },
- { "iu", "Inuktitut" },
- { "ja", "Japanese" },
- { "jv", "Javanese" },
- { "ka", "Georgian" },
- { "kg", "Kongo" },
- { "ki", "Kikuyu" },
- { "kj", "Kuanyama" },
- { "kk", "Kazakh" },
- { "kl", "Kalaallisut" },
- { "km", "Central Khmer" },
- { "kn", "Kannada" },
- { "ko", "Korean" },
- { "kr", "Kanuri" },
- { "ks", "Kashmiri" },
- { "ku", "Kurdish" },
- { "kv", "Komi" },
- { "kw", "Cornish" },
- { "ky", "Kirghiz" },
- { "la", "Latin" },
- { "lb", "Luxembourgish" },
- { "lg", "Ganda" },
- { "li", "Limburgan" },
- { "ln", "Lingala" },
- { "lo", "Lao" },
- { "lt", "Lithuanian" },
- { "lu", "Luba-Katanga" },
- { "lv", "Latvian" },
- { "mg", "Malagasy" },
- { "mh", "Marshallese" },
- { "mi", "Maori" },
- { "mk", "Macedonian" },
- { "ml", "Malayalam" },
- { "mn", "Mongolian" },
- { "mr", "Marathi" },
- { "ms", "Malay" },
- { "mt", "Maltese" },
- { "my", "Burmese" },
- { "na", "Nauru" },
- { "nb", "Norwegian Bokmål" },
- { "nd", "North Ndebele" },
- { "ne", "Nepali" },
- { "ng", "Ndonga" },
- { "nl", "Dutch" },
- { "nn", "Norwegian Nynorsk" },
- { "no", "Norwegian" },
- { "nr", "South Ndebele" },
- { "nv", "Navajo" },
- { "ny", "Nyanja" },
- { "oc", "Occitan" },
- { "oj", "Ojibwa" },
- { "om", "Oromo" },
- { "or", "Oriya" },
- { "os", "Ossetian" },
- { "pa", "Panjabi" },
- { "pi", "Pali" },
- { "pl", "Polish" },
- { "ps", "Pushto" },
- { "pt", "Portuguese" },
- { "qu", "Quechua" },
- { "rm", "Romansh" },
- { "rn", "Rundi" },
- { "ro", "Romanian" },
- { "ru", "Russian" },
- { "rw", "Kinyarwanda" },
- { "sa", "Sanskrit" },
- { "sc", "Sardinian" },
- { "sd", "Sindhi" },
- { "se", "Northern Sami" },
- { "sg", "Sango" },
- { "sh", "Serbo-Croatian" },
- { "si", "Sinhala" },
- { "sk", "Slovak" },
- { "sl", "Slovenian" },
- { "sm", "Samoan" },
- { "sn", "Shona" },
- { "so", "Somali" },
- { "sq", "Albanian" },
- { "sr", "Serbian" },
- { "ss", "Swati" },
- { "st", "Southern Sotho" },
- { "su", "Sundanese" },
- { "sv", "Swedish" },
- { "sw", "Swahili" },
- { "ta", "Tamil" },
- { "te", "Telugu" },
- { "tg", "Tajik" },
- { "th", "Thai" },
- { "ti", "Tigrinya" },
- { "tk", "Turkmen" },
- { "tl", "Tagalog" },
- { "tn", "Tswana" },
- { "to", "Tonga" },
- { "tr", "Turkish" },
- { "ts", "Tsonga" },
- { "tt", "Tatar" },
- { "tw", "Twi" },
- { "ty", "Tahitian" },
- { "ug", "Uighur" },
- { "uk", "Ukrainian" },
- { "ur", "Urdu" },
- { "uz", "Uzbek" },
- { "ve", "Venda" },
- { "vi", "Vietnamese" },
- { "vo", "Volapük" },
- { "wa", "Walloon" },
- { "wo", "Wolof" },
- { "xh", "Xhosa" },
- { "yi", "Yiddish" },
- { "yo", "Yoruba" },
- { "za", "Zhuang" },
- { "zh", "Chinese" },
- { "zu", "Zulu" },
-};
-static int niso639_1= sizeof( iso639_1 ) / sizeof( iso639_1[0] );
-
-char *
-iso639_1_from_code( const char *code )
-{
- int i;
- for ( i=0; i<niso639_1; ++i ) {
- if ( !strcasecmp( iso639_1[i].code, code ) )
- return iso639_1[i].language;
- }
- return NULL;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/iso639_1.h b/support/texlab/crates/bibutils_sys/src/iso639_1.h
deleted file mode 100644
index b0553706e0..0000000000
--- a/support/texlab/crates/bibutils_sys/src/iso639_1.h
+++ /dev/null
@@ -1,9 +0,0 @@
-/*
- * iso639_1.h
- */
-#ifndef ISO639_1_H
-#define ISO639_1_H
-
-char * iso639_1_from_code( const char *code );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/iso639_2.c b/support/texlab/crates/bibutils_sys/src/iso639_2.c
deleted file mode 100644
index e0f07ef0e8..0000000000
--- a/support/texlab/crates/bibutils_sys/src/iso639_2.c
+++ /dev/null
@@ -1,647 +0,0 @@
-/*
- * iso639-2 language codes
- */
-#include <string.h>
-#include "iso639_2.h"
-#include "msvc_fix.h"
-
-typedef struct {
- char *code1;
- char *code2;
- unsigned char main;
- char *language;
-} iso639_2_t;
-
-static iso639_2_t iso639_2[] = {
- { "abk", "", 1, "Abkhazian" },
- { "ace", "", 1, "Achenese" },
- { "ace", "", 1, "Achinese" },
- { "ach", "", 1, "Acoli" },
- { "ada", "", 1, "Adangme" },
- { "ady", "", 1, "Adygei" },
- { "ady", "", 1, "Adyghe" },
- { "aar", "", 1, "Afar" },
- { "afh", "", 1, "Afrihili" },
- { "afr", "", 1, "Afrikaans" },
- { "afa", "", 1, "Afroasiatic languages" },
- { "ain", "", 1, "Ainu" },
- { "aka", "", 1, "Akan" },
- { "akk", "", 1, "Akkadian" },
- { "alb", "sqi", 1, "Albanian" },
- { "gsw", "", 1, "Alemannic" },
- { "ale", "", 1, "Aleut" },
- { "alg", "", 1, "Algonquian languages" },
- { "gsw", "", 1, "Alsatian" },
- { "alt", "", 1, "Altai, Southern" },
- { "tut", "", 1, "Altaic languages" },
- { "amh", "", 1, "Amharic" },
- { "egy", "", 1, "Ancient Egyptian" },
- { "grc", "", 1, "Ancient Greek" },
- { "anp", "", 1, "Angika" },
- { "apa", "", 1, "Apache languages" },
- { "arc", "", 1, "Aramaic, Imperial" },
- { "arc", "", 1, "Aramaic, Official" },
- { "arp", "", 1, "Arapaho" },
- { "arw", "", 1, "Arawak" },
- { "arg", "", 1, "Argonese" },
- { "arm", "hye", 1, "Armenian" },
- { "rup", "", 1, "Aromanian" },
- { "art", "", 1, "Artificial languages" },
- { "rup", "", 1, "Arumanian" },
- { "asm", "", 1, "Assamese" },
- { "ast", "", 1, "Asturian" },
- { "ast", "", 1, "Asturleonese" },
- { "ath", "", 1, "Athabaskan languages" },
- { "aus", "", 1, "Australian languages" },
- { "map", "", 1, "Austronesian languages" },
- { "ava", "", 1, "Avaric" },
- { "ave", "", 1, "Avestan" },
- { "awa", "", 1, "Awadhi" },
- { "aze", "", 1, "Azerbaijani" },
- { "ast", "", 1, "Bable" },
- { "ban", "", 1, "Balinese" },
- { "bat", "", 1, "Baltic languages" },
- { "bal", "", 1, "Baluchi" },
- { "bam", "", 1, "Bambara" },
- { "bai", "", 1, "Bamileke languages" },
- { "bad", "", 1, "Banda languages" },
- { "bnt", "", 1, "Bantu languages" },
- { "bas", "", 1, "Basa" },
- { "bak", "", 1, "Bashkir" },
- { "baq", "eus", 1, "Basque" },
- { "bej", "", 1, "Bedawiyet" },
- { "bej", "", 1, "Beja" },
- { "bel", "", 1, "Belarusian" },
- { "bem", "", 1, "Bemba" },
- { "ben", "", 1, "Bengali" },
- { "ber", "", 1, "Berber languages" },
- { "bho", "", 1, "Bhojpuri" },
- { "bih", "", 1, "Bihari languages" },
- { "bik", "", 1, "Bikol" },
- { "byn", "", 1, "Bilin" },
- { "bin", "", 1, "Bini" },
- { "bis", "", 1, "Bislama" },
- { "bla", "", 1, "Blackfoot" },
- { "byn", "", 1, "Blin" },
- { "zbl", "", 1, "Blissymbols" },
- { "bos", "", 1, "Bosnian" },
- { "bra", "", 1, "Braj" },
- { "btk", "", 1, "Bratak languages" },
- { "bre", "", 1, "Breton" },
- { "bug", "", 1, "Buginese" },
- { "bul", "", 1, "Bulgarian" },
- { "bua", "", 1, "Buriat" },
- { "bur", "mya", 1, "Burmese" },
- { "cad", "", 1, "Caddo" },
- { "spa", "", 0, "Castilian" },
- { "cat", "", 1, "Catalan" },
- { "cau", "", 1, "Caucasian languages" },
- { "ceb", "", 1, "Cebuano" },
- { "cel", "", 1, "Celtic languages" },
- { "cai", "", 1, "Central American Indian languages" },
- { "khm", "", 1, "Central Khmer" },
- { "chg", "", 1, "Chagatai" },
- { "cmc", "", 1, "Chamic languages" },
- { "cha", "", 1, "Chamorro" },
- { "che", "", 1, "Chechen" },
- { "chr", "", 1, "Cherokee" },
- { "nya", "", 1, "Chewa" },
- { "chy", "", 1, "Cheyenne" },
- { "chb", "", 1, "Chibcha" },
- { "nya", "", 1, "Chichewa" },
- { "chi", "zho", 1, "Chinese" },
- { "chn", "", 1, "Chinook Jargon" },
- { "chp", "", 1, "Chipewyan" },
- { "cho", "", 1, "Choctaw" },
- { "zha", "", 1, "Chuang" },
- { "chu", "", 1, "Church Slavic" },
- { "chu", "", 1, "Church Slavonic" },
- { "chk", "", 1, "Chuukese" },
- { "chv", "", 1, "Chuvash" },
- { "kbd", "", 1, "Circassian" },
- { "nwc", "", 1, "Classical Nepal Bhasa" },
- { "nwc", "", 1, "Classical Newari" },
- { "syc", "", 1, "Classical Syriac" },
- { "rar", "", 1, "Cook Islands Maori" },
- { "cop", "", 1, "Coptic" },
- { "cor", "", 1, "Cornish" },
- { "cos", "", 1, "Corsican" },
- { "cre", "", 1, "Cree" },
- { "mus", "", 1, "Creek" },
- { "crp", "", 1, "creoles and pidgins" },
- { "cpe", "", 1, "creoles and pidgins, English-based" },
- { "cpf", "", 1, "creoles and pidgins, French-based" },
- { "cpp", "", 1, "creoles and pidgins, Portuguese-based" },
- { "crh", "", 1, "Crimean Tartar" },
- { "crh", "", 1, "Crimean Turkish" },
- { "hrv", "", 1, "Croatian" },
- { "cus", "", 1, "Cushitic languages" },
- { "cze", "ces", 1, "Czech" },
- { "dak", "", 1, "Dakota" },
- { "dan", "", 1, "Danish" },
- { "dar", "", 1, "Dargwa" },
- { "del", "", 1, "Delaware" },
- { "chp", "", 1, "Dene Suline" },
- { "div", "", 1, "Dhivehi" },
- { "din", "", 1, "Dinka" },
- { "div", "", 1, "Divehi" },
- { "doi", "", 1, "Dogri" },
- { "dgr", "", 1, "Dogrib" },
- { "dra", "", 1, "Dravidian languages" },
- { "dua", "", 1, "Duala" },
- { "dut", "", 1, "Dutch" },
- { "dum", "", 1, "Dutch, Middle" },
- { "dyu", "", 1, "Dyula" },
- { "dzo", "", 1, "Dzongkha" },
- { "frs", "", 1, "Eastern Frisian" },
- { "bin", "", 1, "Edo" },
- { "efi", "", 1, "Efik" },
- { "egy", "", 1, "Egyptian (Ancient)" },
- { "eka", "", 1, "Ekajuk" },
- { "elx", "", 1, "Elamite" },
- { "eng", "", 1, "English" },
- { "enm", "", 0, "English, Middle" },
- { "ang", "", 0, "English, Old" },
- { "myv", "", 1, "Erzya" },
- { "epo", "", 1, "Esperanto" },
- { "est", "", 1, "Estonian" },
- { "ewe", "", 1, "Ewe" },
- { "ewo", "", 1, "Ewondo" },
- { "fan", "", 1, "Fang" },
- { "fat", "", 1, "Fanti" },
- { "fao", "", 1, "Faroese" },
- { "fij", "", 1, "Fijian" },
- { "fil", "", 1, "Filipino" },
- { "fin", "", 1, "Finnish" },
- { "fiu", "", 1, "Finno-Ugric languages" },
- { "dut", "", 1, "Flemish" },
- { "fon", "", 1, "Fon" },
- { "fre", "fra", 1, "French" },
- { "frm", "", 0, "French, Middle" },
- { "fro", "", 0, "French, Old" },
- { "frs", "", 1, "Frisian, Eastern" },
- { "frr", "", 1, "Frisian, Northern" },
- { "fry", "", 1, "Frisian, Western" },
- { "fur", "", 1, "Friulian" },
- { "ful", "", 1, "Fulah" },
- { "gaa", "", 1, "Ga" },
- { "gla", "", 1, "Gaelic" },
- { "car", "", 1, "Galibi Carib" },
- { "lug", "", 1, "Ganda" },
- { "gay", "", 1, "Gayo" },
- { "gba", "", 1, "Gbaya" },
- { "gez", "", 1, "Ge'ez" },
- { "geo", "kat", 1, "Georgian" },
- { "ger", "deu", 1, "German" },
- { "nds", "", 1, "German, Low" },
- { "gmh", "", 1, "German, Middle High" },
- { "goh", "", 1, "German, Old High" },
- { "gem", "", 1, "Germanic languages" },
- { "kik", "", 1, "Gikuyu" },
- { "gil", "", 1, "Gilbertese" },
- { "gon", "", 1, "Gondi" },
- { "gor", "", 1, "Gorontalo" },
- { "got", "", 1, "Gothic" },
- { "grb", "", 1, "Grebo" },
- { "grc", "", 1, "Greek, Ancient" },
- { "gre", "ell", 1, "Greek, Modern" },
- { "kal", "", 1, "Greenlandic" },
- { "grn", "", 1, "Guarani" },
- { "guj", "", 1, "Gujarati" },
- { "gwi", "", 1, "Gwich'in" },
- { "hai", "", 1, "Haida" },
- { "hat", "", 1, "Haitian" },
- { "hat", "", 1, "Haitian Creole" },
- { "hau", "", 1, "Hausa" },
- { "haw", "", 1, "Hawaiian" },
- { "heb", "", 1, "Hebrew" },
- { "hil", "", 1, "Hiligaynon" },
- { "him", "", 1, "Himachali languages" },
- { "hin", "", 1, "Hindi" },
- { "hmo", "", 1, "Hiri Motu" },
- { "hit", "", 1, "Hittite" },
- { "hmn", "", 1, "Hmong" },
- { "hun", "", 1, "Hungarian" },
- { "hup", "", 1, "Hupa" },
- { "iba", "", 1, "Iban" },
- { "ice", "isl", 1, "Icelandic" },
- { "ido", "", 1, "Ido" },
- { "ibo", "", 1, "Igbo" },
- { "ijo", "", 1, "Ijo languages" },
- { "ilo", "", 1, "Iloko" },
- { "arc", "", 1, "Imperial Aramaic" },
- { "smn", "", 1, "Inari Sami" },
- { "inc", "", 1, "Indic languages" },
- { "ine", "", 1, "Indo-European languages" },
- { "ind", "", 1, "Indonesian" },
- { "inh", "", 1, "Ingush" },
- { "ina", "", 1, "Interlingua" },
- { "ile", "", 1, "Interlingue, Occidental" },
- { "iku", "", 1, "Inuktitut" },
- { "ipk", "", 1, "Inupiaq" },
- { "ira", "", 1, "Iranian languages" },
- { "mga", "", 1, "Irish, Middle" },
- { "sga", "", 1, "Irish, Old" },
- { "iro", "", 1, "Iroquoian languages" },
- { "ita", "", 1, "Italian" },
- { "jpn", "", 1, "Japanese" },
- { "jav", "", 1, "Javanese" },
- { "kac", "", 1, "Jingpho" },
- { "jrb", "", 1, "Judaeo-Arabic" },
- { "jpr", "", 1, "Judaeo-Persian" },
- { "kab", "", 1, "Kabyle" },
- { "kac", "", 1, "Kachin" },
- { "kal", "", 1, "Kalaallisut" },
- { "xal", "", 1, "Kalmyk" },
- { "kam", "", 1, "Kamba" },
- { "kan", "", 1, "Kannada" },
- { "kau", "", 1, "Kanuri" },
- { "pam", "", 1, "Kapampangan" },
- { "kaa", "", 1, "Kara-Kalpak" },
- { "krc", "", 1, "Karachay-Balkar" },
- { "krl", "", 1, "Karelian" },
- { "kar", "", 1, "Karen languages" },
- { "kas", "", 1, "Kashmiri" },
- { "csb", "", 1, "Kashubian" },
- { "kaw", "", 1, "Kawi" },
- { "kaz", "", 1, "Kazakh" },
- { "kha", "", 1, "Khasi" },
- { "khi", "", 1, "Khoisan languages" },
- { "kho", "", 1, "Khotanese" },
- { "kik", "", 1, "Kikuyu" },
- { "kmb", "", 1, "Kimbundu" },
- { "kin", "", 1, "Kinyarwanda" },
- { "kir", "", 1, "Kirghiz" },
- { "gil", "", 1, "Kiribati" },
- { "tlh", "", 1, "Klingon" },
- { "kom", "", 1, "Komi" },
- { "kon", "", 1, "Kongo" },
- { "kok", "", 1, "Konkani" },
- { "kor", "", 1, "Korean" },
- { "kos", "", 1, "Kosraean" },
- { "kpe", "", 1, "Kpelle" },
- { "kro", "", 1, "Kru languages" },
- { "kua", "", 1, "Kuanyama" },
- { "kum", "", 1, "Kumyk" },
- { "kur", "", 1, "Kurdish" },
- { "kru", "", 1, "Kurukh" },
- { "kut", "", 1, "Kutenai" },
- { "kua", "", 1, "Kwanyama" },
- { "kir", "", 1, "Kyrgyz" },
- { "lad", "", 1, "Ladino" },
- { "lah", "", 1, "Lahnda" },
- { "lam", "", 1, "Lamba" },
- { "day", "", 1, "Land Dayak languages" },
- { "lao", "", 1, "Lao" },
- { "lat", "", 1, "Latin" },
- { "lav", "", 1, "Latvian" },
- { "ast", "", 1, "Leonese" },
- { "ltz", "", 1, "Letzeburgesch" },
- { "lez", "", 1, "Lezghian" },
- { "lim", "", 1, "Limburgan" },
- { "lim", "", 1, "Limburger" },
- { "lim", "", 1, "Limburgish" },
- { "lin", "", 1, "Lingala" },
- { "lit", "", 1, "Lithuanian" },
- { "jbo", "", 1, "Lojban" },
- { "nds", "", 1, "Low German" },
- { "nds", "", 1, "Low Saxon" },
- { "dsb", "", 1, "Lower Sorbian" },
- { "loz", "", 1, "Lozi" },
- { "lub", "", 1, "Luba-Katanga" },
- { "lua", "", 1, "Luba-Lulua" },
- { "lui", "", 1, "Luiseno" },
- { "smj", "", 1, "Lule Sami" },
- { "lun", "", 1, "Lunda" },
- { "luo", "", 1, "Luo" },
- { "luo", "", 1, "Luo (Kenya and Tanzania)" },
- { "lus", "", 1, "Lushai" },
- { "ltz", "", 1, "Luxembourgish" },
- { "mas", "", 1, "Maasai" },
- { "rup", "", 1, "Macedo-Romanian" },
- { "mac", "mkd", 1, "Macedonian" },
- { "mad", "", 1, "Madurese" },
- { "mag", "", 1, "Magahi" },
- { "mai", "", 1, "Maithili" },
- { "mak", "", 1, "Makasar" },
- { "mlg", "", 1, "Malagasy" },
- { "may", "msa", 1, "Malay" },
- { "mal", "", 1, "Malayalam" },
- { "div", "", 1, "Maldivian" },
- { "mlt", "", 1, "Maltese" },
- { "mnc", "", 1, "Manchu" },
- { "mdr", "", 1, "Mandar" },
- { "man", "", 1, "Mandingo" },
- { "mni", "", 1, "Manipuri" },
- { "mno", "", 1, "Manobo languages" },
- { "glv", "", 1, "Manx" },
- { "mao", "mri", 1, "Maori" },
- { "arn", "", 1, "Mapuche" },
- { "arn", "", 1, "Mapudungun" },
- { "mar", "", 1, "Marathi" },
- { "chm", "", 1, "Mari" },
- { "mah", "", 1, "Marshallese" },
- { "mwr", "", 1, "Marwari" },
- { "myn", "", 1, "Mayan languages" },
- { "men", "", 1, "Mende" },
- { "mic", "", 1, "Mi'kmaq" },
- { "mic", "", 1, "Micmac" },
- { "dum", "", 1, "Middle Dutch" },
- { "enm", "", 1, "Middle English" },
- { "frm", "", 1, "Middle French" },
- { "gmh", "", 1, "Middle High German" },
- { "mga", "", 1, "Middle Irish" },
- { "pal", "", 1, "Middle Persian" },
- { "min", "", 1, "Minangkabau" },
- { "mwl", "", 1, "Mirandese" },
- { "gre", "ell", 1, "Modern Greek" },
- { "moh", "", 1, "Mohawk" },
- { "mdf", "", 1, "Moksha" },
- { "mkh", "", 1, "Mon-Khmer languages" },
- { "lol", "", 1, "Mongo" },
- { "mon", "", 1, "Mongolian" },
- { "mos", "", 1, "Mossi" },
- { "mul", "", 1, "Multiple languages" },
- { "mun", "", 1, "Munda languages" },
- { "nqo", "", 1, "N'Ko" },
- { "nah", "", 1, "Nahuatl" },
- { "nau", "", 1, "Nauruan" },
- { "nav", "", 1, "Navaho" },
- { "nav", "", 1, "Navajo" },
- { "ndo", "", 1, "Ndonga" },
- { "nap", "", 1, "Neapolitan" },
- { "new", "", 1, "Nepal Bhasa" },
- { "nep", "", 1, "Nepali" },
- { "new", "", 1, "Newari" },
- { "nia", "", 1, "Nias" },
- { "nic", "", 1, "Niger-Congo languages" },
- { "ssa", "", 1, "Nilo-Saharan languages" },
- { "niu", "", 1, "Niuean" },
- { "nog", "", 1, "Nogai" },
- { "non", "", 0, "Norse, Old" },
- { "nai", "", 1, "North American Indian languages" },
- { "frr", "", 1, "Northern Frisian" },
- { "nde", "", 1, "Northern Ndebele" },
- { "sme", "", 1, "Northern Sami" },
- { "nso", "", 1, "Northern Sotho" },
- { "nob", "", 1, "Norwegian Bokmaal" },
- { "nno", "", 1, "Norwegian Nynorsk" },
- { "zxx", "", 1, "Not linguistic content; not applicable" },
- { "nub", "", 1, "Nubian languages" },
- { "iii", "", 1, "Nuosu" },
- { "nym", "", 1, "Nyamwezi" },
- { "nya", "", 1, "Nyanja" },
- { "nyn", "", 1, "Nyankole" },
- { "nyr", "", 1, "Nyoro" },
- { "nzi", "", 1, "Nzima" },
- { "oci", "", 1, "Occitan" },
- { "pro", "", 0, "Occitan, Old" },
- { "arc", "", 1, "Official Aramaic" },
- { "xal", "", 1, "Oirat" },
- { "oji", "", 1, "Ojibwa" },
- { "chu", "", 1, "Old Bulgarian" },
- { "chu", "", 1, "Old Church Slavonic" },
- { "ang", "", 1, "Old English" },
- { "fro", "", 1, "Old French" },
- { "goh", "", 1, "Old High German" },
- { "sga", "", 1, "Old Irish" },
- { "nwc", "", 1, "Old Newari" },
- { "non", "", 1, "Old Norse" },
- { "pro", "", 1, "Old Occitan" },
- { "peo", "", 1, "Old Persian" },
- { "pro", "", 1, "Old Provencal" },
- { "chu", "", 1, "Old Slavonic" },
- { "ori", "", 1, "Oriya" },
- { "orm", "", 1, "Oromo" },
- { "osa", "", 1, "Osage" },
- { "oss", "", 1, "Ossetian" },
- { "oss", "", 1, "Ossetic" },
- { "oto", "", 1, "Otomian languages" },
- { "ota", "", 1, "Ottoman Turkish" },
- { "pal", "", 1, "Pahlavi" },
- { "pau", "", 1, "Palauan" },
- { "pli", "", 1, "Pali" },
- { "pam", "", 1, "Pampanga" },
- { "pag", "", 1, "Pangasinan" },
- { "pan", "", 1, "Panjabi" },
- { "pap", "", 1, "Papiamento" },
- { "paa", "", 1, "Papuan languages" },
- { "pus", "", 1, "Pashto" },
- { "pus", "", 1, "Pashto language" },
- { "nso", "", 1, "Pedi" },
- { "per", "fas", 1, "Persian" },
- { "pal", "", 0, "Persian, Middle" },
- { "peo", "", 0, "Persian, Old" },
- { "phi", "", 1, "Philippine languages" },
- { "phn", "", 1, "Phoenician" },
- { "fil", "", 0, "Pilipino" },
- { "pon", "", 1, "Pohnpeian" },
- { "pol", "", 1, "Polish" },
- { "por", "", 1, "Portuguese" },
- { "pra", "", 1, "Prakit" },
- { "pro", "", 0, "Provencal, Old" },
- { "pan", "", 1, "Punjabi" },
- { "que", "", 1, "Quechua" },
- { "raj", "", 1, "Rajasthani" },
- { "rap", "", 1, "Rapanui" },
- { "rar", "", 1, "Rarotongan" },
- { "roa", "", 1, "Romance languages" },
- { "rum", "ron", 1, "Romanian" },
- { "roh", "", 1, "Romansh" },
- { "rom", "", 1, "Romany" },
- { "run", "", 1, "Rundi" },
- { "rus", "", 1, "Russian" },
- { "kho", "", 1, "Sakan" },
- { "sal", "", 1, "Salishan languages" },
- { "sam", "", 1, "Samaritan Aramaic" },
- { "smi", "", 1, "Sami languages" },
- { "smo", "", 1, "Samoan" },
- { "sad", "", 1, "Sandawe" },
- { "sag", "", 1, "Sango" },
- { "san", "", 1, "Sanskrit" },
- { "sat", "", 1, "Santali" },
- { "srd", "", 1, "Sardinian" },
- { "sas", "", 1, "Sasak" },
- { "nds", "", 1, "Saxon, Low" },
- { "sco", "", 1, "Scots" },
- { "gla", "", 1, "Scottish Gaelic" },
- { "sel", "", 1, "Selkup" },
- { "sem", "", 1, "Semitic languages" },
- { "nso", "", 1, "Sepedi" },
- { "srp", "", 1, "Serbian" },
- { "srr", "", 1, "Serer" },
- { "shn", "", 1, "Shan" },
- { "sna", "", 1, "Shona" },
- { "iii", "", 1, "Sichuan Yi" },
- { "scn", "", 1, "Sicilian" },
- { "sid", "", 1, "Sidamo" },
- { "sgn", "", 1, "Sign languages" },
- { "bla", "", 1, "Siksika" },
- { "snd", "", 1, "Sindhi" },
- { "sin", "", 1, "Sinhala" },
- { "sin", "", 1, "Sinhalese" },
- { "sit", "", 1, "Sino-Tibetan languages" },
- { "sio", "", 1, "Siouan languages" },
- { "sms", "", 1, "Skolt Sami" },
- { "den", "", 1, "Slave (Athapascan)" },
- { "sla", "", 1, "Slavic languages" },
- { "slo", "slk", 1, "Slovak" },
- { "slv", "", 1, "Slovenian" },
- { "sog", "", 1, "Sogdian" },
- { "som", "", 1, "Somali" },
- { "son", "", 1, "Songhay languages" },
- { "snk", "", 1, "Soninke" },
- { "wen", "", 1, "Sorbian languages" },
- { "dsb", "", 1, "Sorbian, Lower" },
- { "hsb", "", 1, "Sorbian, Upper" },
- { "sai", "", 1, "South American Indian languages" },
- { "alt", "", 1, "Southern Altai" },
- { "nbl", "", 1, "Southern Ndebele" },
- { "sma", "", 1, "Southern Sami" },
- { "sot", "", 1, "Southern Sotho" },
- { "spa", "", 1, "Spanish" },
- { "srn", "", 1, "Sranan Tongo" },
- { "zgh", "", 1, "Standard Moroccan Tamazight" },
- { "suk", "", 1, "Sukuma" },
- { "sux", "", 1, "Sumerian" },
- { "sun", "", 1, "Sundanese" },
- { "sus", "", 1, "Susu" },
- { "swa", "", 1, "Swahili" },
- { "ssw", "", 1, "Swati" },
- { "swe", "", 1, "Swedish" },
- { "gsw", "", 1, "Swiss German" },
- { "syr", "", 1, "Syriac" },
- { "tgl", "", 1, "Tagalog" },
- { "tah", "", 1, "Tahitian" },
- { "tai", "", 1, "Tai languages" },
- { "tgk", "", 1, "Tajik" },
- { "tmh", "", 1, "Tamashek" },
- { "tam", "", 1, "Tamil" },
- { "tat", "", 1, "Tatar" },
- { "tel", "", 1, "Telugu" },
- { "ter", "", 1, "Tereno" },
- { "tet", "", 1, "Tetum" },
- { "tha", "", 1, "Thai" },
- { "tib", "bod", 1, "Tibetan" },
- { "tig", "", 1, "Tigre" },
- { "tir", "", 1, "Tigrinya" },
- { "tem", "", 1, "Time" },
- { "tiv", "", 1, "Tiv" },
- { "tli", "", 1, "Tlingit" },
- { "tpi", "", 1, "Tok Pisin" },
- { "tkl", "", 1, "Tokelau" },
- { "tog", "", 1, "Tonga (Nyasa)" },
- { "ton", "", 1, "Tonga (Tonga Islands)" },
- { "tsi", "", 1, "Tsimshian" },
- { "tso", "", 1, "Tsonga" },
- { "tsn", "", 1, "Tswana" },
- { "tum", "", 1, "Tumbuka" },
- { "tup", "", 1, "Tupian languages" },
- { "tur", "", 1, "Turkish" },
- { "ota", "", 1, "Turkish, Ottoman" },
- { "tuk", "", 1, "Turkmen" },
- { "tvl", "", 1, "Tuvalu" },
- { "tyv", "", 1, "Tuvinian" },
- { "twi", "", 1, "Twi" },
- { "udm", "", 1, "Udmurt" },
- { "uga", "", 1, "Ugaritic" },
- { "uig", "", 1, "Uighur" },
- { "ukr", "", 1, "Ukranian" },
- { "umb", "", 1, "Umbundu" },
- { "mis", "", 1, "Uncoded languages" },
- { "und", "", 1, "Undetermined language" },
- { "hsb", "", 1, "Upper Sorbian" },
- { "urd", "", 1, "Urdu" },
- { "uig", "", 1, "Uyghur" },
- { "uzb", "", 1, "Uzbek" },
- { "vai", "", 1, "Vai" },
- { "cat", "", 1, "Valencian" },
- { "ven", "", 1, "Venda" },
- { "vie", "", 1, "Vietnamese" },
- { "vol", "", 1, "Volapuk" },
- { "vot", "", 1, "Voltic" },
- { "wak", "", 1, "Wakashan languages" },
- { "wln", "", 1, "Walloon" },
- { "war", "", 1, "Waray-Waray" },
- { "was", "", 1, "Washo" },
- { "wel", "cym", 1, "Welsh" },
- { "fry", "", 1, "Western Frisian" },
- { "wal", "", 1, "Wolaitta" },
- { "wal", "", 1, "Wolaytta" },
- { "wol", "", 1, "Wolof" },
- { "xho", "", 1, "Xhosa" },
- { "sah", "", 1, "Yakut" },
- { "yao", "", 1, "Yao" },
- { "yap", "", 1, "Yapese" },
- { "yid", "", 1, "Yidish" },
- { "yor", "", 1, "Yoruba" },
- { "ypk", "", 1, "Yupik languages" },
- { "znd", "", 1, "Zande languages" },
- { "zap", "", 1, "Zapotec" },
- { "zza", "", 1, "Zaza" },
- { "zza", "", 1, "Zazaki" },
- { "zen", "", 1, "Zenaga" },
- { "zha", "", 1, "Zhuang" },
- { "zul", "", 1, "Zulu" },
- { "zun", "", 1, "Zuni" },
-};
-static int niso639_2= sizeof( iso639_2 ) / sizeof( iso639_2[0] );
-
-char *
-iso639_2_from_code( char *code )
-{
- int i;
- for ( i=0; i<niso639_2; ++i ) {
- if ( !iso639_2[i].main ) continue;
- if ( !strcasecmp( iso639_2[i].code1, code ) )
- return iso639_2[i].language;
- if ( iso639_2[i].code2[0]!='\0' && !strcasecmp( iso639_2[i].code2, code ) )
- return iso639_2[i].language;
- }
- return NULL;
-}
-
-char *
-iso639_2_from_language( char *lang )
-{
- int i, n;
- for ( i=0; i<niso639_2; ++i ) {
- n = strcasecmp( iso639_2[i].language, lang );
- if ( n==0 ) return iso639_2[i].code1;
- if ( n > 0 ) return NULL;
- }
- return NULL;
-}
-
-#ifdef TEST
-
-#include <stdio.h>
-#include <stdlib.h>
-
-static int
-check_alphabetical( void )
-{
- char *l1, *l2;
- int i, ret = 1;
- l1 = iso639_2[0].language;
- for ( i=0; i<niso639_2-1; ++i ) {
- l2 = iso639_2[i+1].language;
- if ( strcasecmp( l1, l2 ) >= 0 ) {
- fprintf( stderr, "Swap '%s' and '%s'\n", l1, l2 );
- ret = 0;
- }
- l1 = l2;
- }
- return ret;
-}
-
-int
-main( int argc, char *argv[] )
-{
- int ok;
- ok = check_alphabetical();
- if ( ok ) return EXIT_SUCCESS;
- return EXIT_FAILURE;
-}
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/iso639_2.h b/support/texlab/crates/bibutils_sys/src/iso639_2.h
deleted file mode 100644
index 55f6143a7b..0000000000
--- a/support/texlab/crates/bibutils_sys/src/iso639_2.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- * iso639-2 language codes
- */
-#ifndef ISO639_2_H
-#define ISO639_2_H
-
-char * iso639_2_from_code( char *code );
-char * iso639_2_from_language( char *lang );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/iso639_3.c b/support/texlab/crates/bibutils_sys/src/iso639_3.c
deleted file mode 100644
index 43ea692cb7..0000000000
--- a/support/texlab/crates/bibutils_sys/src/iso639_3.c
+++ /dev/null
@@ -1,8431 +0,0 @@
-/*
- * iso639_3.c
- */
-#include <string.h>
-#include "iso639_3.h"
-#include "msvc_fix.h"
-
-typedef struct {
- char *code;
- char *language;
-} iso639_3_t;
-
-static iso639_3_t iso639_3[] = {
- { "aaa", "Ghotuo" },
- { "aab", "Alumu-Tesu" },
- { "aac", "Ari" },
- { "aad", "Amal" },
- { "aae", "Arbëreshë Albanian" },
- { "aaf", "Aranadan" },
- { "aag", "Ambrak" },
- { "aah", "Abu' Arapesh" },
- { "aai", "Arifama-Miniafia" },
- { "aak", "Ankave" },
- { "aal", "Afade" },
- { "aam", "Aramanik" },
- { "aan", "Anambé" },
- { "aao", "Algerian Saharan Arabic" },
- { "aap", "Pará Arára" },
- { "aaq", "Eastern Abnaki" },
- { "aar", "Afar" },
- { "aas", "Aasáx" },
- { "aat", "Arvanitika Albanian" },
- { "aau", "Abau" },
- { "aaw", "Solong" },
- { "aax", "Mandobo Atas" },
- { "aaz", "Amarasi" },
- { "aba", "Abé" },
- { "abb", "Bankon" },
- { "abc", "Ambala Ayta" },
- { "abd", "Manide" },
- { "abe", "Western Abnaki" },
- { "abf", "Abai Sungai" },
- { "abg", "Abaga" },
- { "abh", "Tajiki Arabic" },
- { "abi", "Abidji" },
- { "abj", "Aka-Bea" },
- { "abk", "Abkhazian" },
- { "abl", "Lampung Nyo" },
- { "abm", "Abanyom" },
- { "abn", "Abua" },
- { "abo", "Abon" },
- { "abp", "Abellen Ayta" },
- { "abq", "Abaza" },
- { "abr", "Abron" },
- { "abs", "Ambonese Malay" },
- { "abt", "Ambulas" },
- { "abu", "Abure" },
- { "abv", "Baharna Arabic" },
- { "abw", "Pal" },
- { "abx", "Inabaknon" },
- { "aby", "Aneme Wake" },
- { "abz", "Abui" },
- { "aca", "Achagua" },
- { "acb", "Áncá" },
- { "acd", "Gikyode" },
- { "ace", "Achinese" },
- { "acf", "Saint Lucian Creole French" },
- { "ach", "Acoli" },
- { "aci", "Aka-Cari" },
- { "ack", "Aka-Kora" },
- { "acl", "Akar-Bale" },
- { "acm", "Mesopotamian Arabic" },
- { "acn", "Achang" },
- { "acp", "Eastern Acipa" },
- { "acq", "Ta'izzi-Adeni Arabic" },
- { "acr", "Achi" },
- { "acs", "Acroá" },
- { "act", "Achterhoeks" },
- { "acu", "Achuar-Shiwiar" },
- { "acv", "Achumawi" },
- { "acw", "Hijazi Arabic" },
- { "acx", "Omani Arabic" },
- { "acy", "Cypriot Arabic" },
- { "acz", "Acheron" },
- { "ada", "Adangme" },
- { "adb", "Adabe" },
- { "add", "Dzodinka" },
- { "ade", "Adele" },
- { "adf", "Dhofari Arabic" },
- { "adg", "Andegerebinha" },
- { "adh", "Adhola" },
- { "adi", "Adi" },
- { "adj", "Adioukrou" },
- { "adl", "Galo" },
- { "adn", "Adang" },
- { "ado", "Abu" },
- { "adp", "Adap" },
- { "adq", "Adangbe" },
- { "adr", "Adonara" },
- { "ads", "Adamorobe Sign Language" },
- { "adt", "Adnyamathanha" },
- { "adu", "Aduge" },
- { "adw", "Amundava" },
- { "adx", "Amdo Tibetan" },
- { "ady", "Adyghe" },
- { "adz", "Adzera" },
- { "aea", "Areba" },
- { "aeb", "Tunisian Arabic" },
- { "aec", "Saidi Arabic" },
- { "aed", "Argentine Sign Language" },
- { "aee", "Northeast Pashayi" },
- { "aek", "Haeke" },
- { "ael", "Ambele" },
- { "aem", "Arem" },
- { "aen", "Armenian Sign Language" },
- { "aeq", "Aer" },
- { "aer", "Eastern Arrernte" },
- { "aes", "Alsea" },
- { "aeu", "Akeu" },
- { "aew", "Ambakich" },
- { "aey", "Amele" },
- { "aez", "Aeka" },
- { "afb", "Gulf Arabic" },
- { "afd", "Andai" },
- { "afe", "Putukwam" },
- { "afg", "Afghan Sign Language" },
- { "afh", "Afrihili" },
- { "afi", "Akrukay" },
- { "afk", "Nanubae" },
- { "afn", "Defaka" },
- { "afo", "Eloyi" },
- { "afp", "Tapei" },
- { "afr", "Afrikaans" },
- { "afs", "Afro-Seminole Creole" },
- { "aft", "Afitti" },
- { "afu", "Awutu" },
- { "afz", "Obokuitai" },
- { "aga", "Aguano" },
- { "agb", "Legbo" },
- { "agc", "Agatu" },
- { "agd", "Agarabi" },
- { "age", "Angal" },
- { "agf", "Arguni" },
- { "agg", "Angor" },
- { "agh", "Ngelima" },
- { "agi", "Agariya" },
- { "agj", "Argobba" },
- { "agk", "Isarog Agta" },
- { "agl", "Fembe" },
- { "agm", "Angaataha" },
- { "agn", "Agutaynen" },
- { "ago", "Tainae" },
- { "agq", "Aghem" },
- { "agr", "Aguaruna" },
- { "ags", "Esimbi" },
- { "agt", "Central Cagayan Agta" },
- { "agu", "Aguacateco" },
- { "agv", "Remontado Dumagat" },
- { "agw", "Kahua" },
- { "agx", "Aghul" },
- { "agy", "Southern Alta" },
- { "agz", "Mt. Iriga Agta" },
- { "aha", "Ahanta" },
- { "ahb", "Axamb" },
- { "ahg", "Qimant" },
- { "ahh", "Aghu" },
- { "ahi", "Tiagbamrin Aizi" },
- { "ahk", "Akha" },
- { "ahl", "Igo" },
- { "ahm", "Mobumrin Aizi" },
- { "ahn", "Àhàn" },
- { "aho", "Ahom" },
- { "ahp", "Aproumu Aizi" },
- { "ahr", "Ahirani" },
- { "ahs", "Ashe" },
- { "aht", "Ahtena" },
- { "aia", "Arosi" },
- { "aib", "Ainu (China)" },
- { "aic", "Ainbai" },
- { "aid", "Alngith" },
- { "aie", "Amara" },
- { "aif", "Agi" },
- { "aig", "Antigua and Barbuda Creole English" },
- { "aih", "Ai-Cham" },
- { "aii", "Assyrian Neo-Aramaic" },
- { "aij", "Lishanid Noshan" },
- { "aik", "Ake" },
- { "ail", "Aimele" },
- { "aim", "Aimol" },
- { "ain", "Ainu (Japan)" },
- { "aio", "Aiton" },
- { "aip", "Burumakok" },
- { "aiq", "Aimaq" },
- { "air", "Airoran" },
- { "ais", "Nataoran Amis" },
- { "ait", "Arikem" },
- { "aiw", "Aari" },
- { "aix", "Aighon" },
- { "aiy", "Ali" },
- { "aja", "Aja (Sudan)" },
- { "ajg", "Aja (Benin)" },
- { "aji", "Ajië" },
- { "ajn", "Andajin" },
- { "ajp", "South Levantine Arabic" },
- { "ajt", "Judeo-Tunisian Arabic" },
- { "aju", "Judeo-Moroccan Arabic" },
- { "ajw", "Ajawa" },
- { "ajz", "Amri Karbi" },
- { "aka", "Akan" },
- { "akb", "Batak Angkola" },
- { "akc", "Mpur" },
- { "akd", "Ukpet-Ehom" },
- { "ake", "Akawaio" },
- { "akf", "Akpa" },
- { "akg", "Anakalangu" },
- { "akh", "Angal Heneng" },
- { "aki", "Aiome" },
- { "akj", "Aka-Jeru" },
- { "akk", "Akkadian" },
- { "akl", "Aklanon" },
- { "akm", "Aka-Bo" },
- { "ako", "Akurio" },
- { "akp", "Siwu" },
- { "akq", "Ak" },
- { "akr", "Araki" },
- { "aks", "Akaselem" },
- { "akt", "Akolet" },
- { "aku", "Akum" },
- { "akv", "Akhvakh" },
- { "akw", "Akwa" },
- { "akx", "Aka-Kede" },
- { "aky", "Aka-Kol" },
- { "akz", "Alabama" },
- { "ala", "Alago" },
- { "alc", "Qawasqar" },
- { "ald", "Alladian" },
- { "ale", "Aleut" },
- { "alf", "Alege" },
- { "alh", "Alawa" },
- { "ali", "Amaimon" },
- { "alj", "Alangan" },
- { "alk", "Alak" },
- { "all", "Allar" },
- { "alm", "Amblong" },
- { "aln", "Gheg Albanian" },
- { "alo", "Larike-Wakasihu" },
- { "alp", "Alune" },
- { "alq", "Algonquin" },
- { "alr", "Alutor" },
- { "als", "Tosk Albanian" },
- { "alt", "Southern Altai" },
- { "alu", "'Are'are" },
- { "alw", "Alaba-K’abeena" },
- { "alx", "Amol" },
- { "aly", "Alyawarr" },
- { "alz", "Alur" },
- { "ama", "Amanayé" },
- { "amb", "Ambo" },
- { "amc", "Amahuaca" },
- { "ame", "Yanesha'" },
- { "amf", "Hamer-Banna" },
- { "amg", "Amurdak" },
- { "amh", "Amharic" },
- { "ami", "Amis" },
- { "amj", "Amdang" },
- { "amk", "Ambai" },
- { "aml", "War-Jaintia" },
- { "amm", "Ama (Papua New Guinea)" },
- { "amn", "Amanab" },
- { "amo", "Amo" },
- { "amp", "Alamblak" },
- { "amq", "Amahai" },
- { "amr", "Amarakaeri" },
- { "ams", "Southern Amami-Oshima" },
- { "amt", "Amto" },
- { "amu", "Guerrero Amuzgo" },
- { "amv", "Ambelau" },
- { "amw", "Western Neo-Aramaic" },
- { "amx", "Anmatyerre" },
- { "amy", "Ami" },
- { "amz", "Atampaya" },
- { "ana", "Andaqui" },
- { "anb", "Andoa" },
- { "anc", "Ngas" },
- { "and", "Ansus" },
- { "ane", "Xârâcùù" },
- { "anf", "Animere" },
- { "ang", "Old English (ca. 450-1100)" },
- { "anh", "Nend" },
- { "ani", "Andi" },
- { "anj", "Anor" },
- { "ank", "Goemai" },
- { "anl", "Anu-Hkongso Chin" },
- { "anm", "Anal" },
- { "ann", "Obolo" },
- { "ano", "Andoque" },
- { "anp", "Angika" },
- { "anq", "Jarawa (India)" },
- { "anr", "Andh" },
- { "ans", "Anserma" },
- { "ant", "Antakarinya" },
- { "anu", "Anuak" },
- { "anv", "Denya" },
- { "anw", "Anaang" },
- { "anx", "Andra-Hus" },
- { "any", "Anyin" },
- { "anz", "Anem" },
- { "aoa", "Angolar" },
- { "aob", "Abom" },
- { "aoc", "Pemon" },
- { "aod", "Andarum" },
- { "aoe", "Angal Enen" },
- { "aof", "Bragat" },
- { "aog", "Angoram" },
- { "aoh", "Arma" },
- { "aoi", "Anindilyakwa" },
- { "aoj", "Mufian" },
- { "aok", "Arhö" },
- { "aol", "Alor" },
- { "aom", "Ömie" },
- { "aon", "Bumbita Arapesh" },
- { "aor", "Aore" },
- { "aos", "Taikat" },
- { "aot", "A'tong" },
- { "aou", "A'ou" },
- { "aox", "Atorada" },
- { "aoz", "Uab Meto" },
- { "apb", "Sa'a" },
- { "apc", "North Levantine Arabic" },
- { "apd", "Sudanese Arabic" },
- { "ape", "Bukiyip" },
- { "apf", "Pahanan Agta" },
- { "apg", "Ampanang" },
- { "aph", "Athpariya" },
- { "api", "Apiaká" },
- { "apj", "Jicarilla Apache" },
- { "apk", "Kiowa Apache" },
- { "apl", "Lipan Apache" },
- { "apm", "Mescalero-Chiricahua Apache" },
- { "apn", "Apinayé" },
- { "apo", "Ambul" },
- { "app", "Apma" },
- { "apq", "A-Pucikwar" },
- { "apr", "Arop-Lokep" },
- { "aps", "Arop-Sissano" },
- { "apt", "Apatani" },
- { "apu", "Apurinã" },
- { "apv", "Alapmunte" },
- { "apw", "Western Apache" },
- { "apx", "Aputai" },
- { "apy", "Apalaí" },
- { "apz", "Safeyoka" },
- { "aqc", "Archi" },
- { "aqd", "Ampari Dogon" },
- { "aqg", "Arigidi" },
- { "aqm", "Atohwaim" },
- { "aqn", "Northern Alta" },
- { "aqp", "Atakapa" },
- { "aqr", "Arhâ" },
- { "aqz", "Akuntsu" },
- { "ara", "Arabic" },
- { "arb", "Standard Arabic" },
- { "arc", "Official Aramaic (700-300 BCE)" },
- { "ard", "Arabana" },
- { "are", "Western Arrarnta" },
- { "arg", "Aragonese" },
- { "arh", "Arhuaco" },
- { "ari", "Arikara" },
- { "arj", "Arapaso" },
- { "ark", "Arikapú" },
- { "arl", "Arabela" },
- { "arn", "Mapudungun" },
- { "aro", "Araona" },
- { "arp", "Arapaho" },
- { "arq", "Algerian Arabic" },
- { "arr", "Karo (Brazil)" },
- { "ars", "Najdi Arabic" },
- { "aru", "Aruá (Amazonas State)" },
- { "arv", "Arbore" },
- { "arw", "Arawak" },
- { "arx", "Aruá (Rodonia State)" },
- { "ary", "Moroccan Arabic" },
- { "arz", "Egyptian Arabic" },
- { "asa", "Asu (Tanzania)" },
- { "asb", "Assiniboine" },
- { "asc", "Casuarina Coast Asmat" },
- { "asd", "Asas" },
- { "ase", "American Sign Language" },
- { "asf", "Australian Sign Language" },
- { "asg", "Cishingini" },
- { "ash", "Abishira" },
- { "asi", "Buruwai" },
- { "asj", "Sari" },
- { "ask", "Ashkun" },
- { "asl", "Asilulu" },
- { "asm", "Assamese" },
- { "asn", "Xingú Asuriní" },
- { "aso", "Dano" },
- { "asp", "Algerian Sign Language" },
- { "asq", "Austrian Sign Language" },
- { "asr", "Asuri" },
- { "ass", "Ipulo" },
- { "ast", "Asturian" },
- { "asu", "Tocantins Asurini" },
- { "asv", "Asoa" },
- { "asw", "Australian Aborigines Sign Language" },
- { "asx", "Muratayak" },
- { "asy", "Yaosakor Asmat" },
- { "asz", "As" },
- { "ata", "Pele-Ata" },
- { "atb", "Zaiwa" },
- { "atc", "Atsahuaca" },
- { "atd", "Ata Manobo" },
- { "ate", "Atemble" },
- { "atg", "Ivbie North-Okpela-Arhe" },
- { "ati", "Attié" },
- { "atj", "Atikamekw" },
- { "atk", "Ati" },
- { "atl", "Mt. Iraya Agta" },
- { "atm", "Ata" },
- { "atn", "Ashtiani" },
- { "ato", "Atong" },
- { "atp", "Pudtol Atta" },
- { "atq", "Aralle-Tabulahan" },
- { "atr", "Waimiri-Atroari" },
- { "ats", "Gros Ventre" },
- { "att", "Pamplona Atta" },
- { "atu", "Reel" },
- { "atv", "Northern Altai" },
- { "atw", "Atsugewi" },
- { "atx", "Arutani" },
- { "aty", "Aneityum" },
- { "atz", "Arta" },
- { "aua", "Asumboa" },
- { "aub", "Alugu" },
- { "auc", "Waorani" },
- { "aud", "Anuta" },
- { "aue", "=Kx'au'ein" },
- { "aug", "Aguna" },
- { "auh", "Aushi" },
- { "aui", "Anuki" },
- { "auj", "Awjilah" },
- { "auk", "Heyo" },
- { "aul", "Aulua" },
- { "aum", "Asu (Nigeria)" },
- { "aun", "Molmo One" },
- { "auo", "Auyokawa" },
- { "aup", "Makayam" },
- { "auq", "Anus" },
- { "aur", "Aruek" },
- { "aut", "Austral" },
- { "auu", "Auye" },
- { "auw", "Awyi" },
- { "aux", "Aurá" },
- { "auy", "Awiyaana" },
- { "auz", "Uzbeki Arabic" },
- { "ava", "Avaric" },
- { "avb", "Avau" },
- { "avd", "Alviri-Vidari" },
- { "ave", "Avestan" },
- { "avi", "Avikam" },
- { "avk", "Kotava" },
- { "avl", "Eastern Egyptian Bedawi Arabic" },
- { "avm", "Angkamuthi" },
- { "avn", "Avatime" },
- { "avo", "Agavotaguerra" },
- { "avs", "Aushiri" },
- { "avt", "Au" },
- { "avu", "Avokaya" },
- { "avv", "Avá-Canoeiro" },
- { "awa", "Awadhi" },
- { "awb", "Awa (Papua New Guinea)" },
- { "awc", "Cicipu" },
- { "awe", "Awetí" },
- { "awg", "Anguthimri" },
- { "awh", "Awbono" },
- { "awi", "Aekyom" },
- { "awk", "Awabakal" },
- { "awm", "Arawum" },
- { "awn", "Awngi" },
- { "awo", "Awak" },
- { "awr", "Awera" },
- { "aws", "South Awyu" },
- { "awt", "Araweté" },
- { "awu", "Central Awyu" },
- { "awv", "Jair Awyu" },
- { "aww", "Awun" },
- { "awx", "Awara" },
- { "awy", "Edera Awyu" },
- { "axb", "Abipon" },
- { "axe", "Ayerrerenge" },
- { "axg", "Mato Grosso Arára" },
- { "axk", "Yaka (Central African Republic)" },
- { "axl", "Lower Southern Aranda" },
- { "axm", "Middle Armenian" },
- { "axx", "Xârâgurè" },
- { "aya", "Awar" },
- { "ayb", "Ayizo Gbe" },
- { "ayc", "Southern Aymara" },
- { "ayd", "Ayabadhu" },
- { "aye", "Ayere" },
- { "ayg", "Ginyanga" },
- { "ayh", "Hadrami Arabic" },
- { "ayi", "Leyigha" },
- { "ayk", "Akuku" },
- { "ayl", "Libyan Arabic" },
- { "aym", "Aymara" },
- { "ayn", "Sanaani Arabic" },
- { "ayo", "Ayoreo" },
- { "ayp", "North Mesopotamian Arabic" },
- { "ayq", "Ayi (Papua New Guinea)" },
- { "ayr", "Central Aymara" },
- { "ays", "Sorsogon Ayta" },
- { "ayt", "Magbukun Ayta" },
- { "ayu", "Ayu" },
- { "ayy", "Tayabas Ayta" },
- { "ayz", "Mai Brat" },
- { "aza", "Azha" },
- { "azb", "South Azerbaijani" },
- { "azd", "Eastern Durango Nahuatl" },
- { "aze", "Azerbaijani" },
- { "azg", "San Pedro Amuzgos Amuzgo" },
- { "azj", "North Azerbaijani" },
- { "azm", "Ipalapa Amuzgo" },
- { "azn", "Western Durango Nahuatl" },
- { "azo", "Awing" },
- { "azt", "Faire Atta" },
- { "azz", "Highland Puebla Nahuatl" },
- { "baa", "Babatana" },
- { "bab", "Bainouk-Gunyuño" },
- { "bac", "Badui" },
- { "bae", "Baré" },
- { "baf", "Nubaca" },
- { "bag", "Tuki" },
- { "bah", "Bahamas Creole English" },
- { "baj", "Barakai" },
- { "bak", "Bashkir" },
- { "bal", "Baluchi" },
- { "bam", "Bambara" },
- { "ban", "Balinese" },
- { "bao", "Waimaha" },
- { "bap", "Bantawa" },
- { "bar", "Bavarian" },
- { "bas", "Basa (Cameroon)" },
- { "bau", "Bada (Nigeria)" },
- { "bav", "Vengo" },
- { "baw", "Bambili-Bambui" },
- { "bax", "Bamun" },
- { "bay", "Batuley" },
- { "bba", "Baatonum" },
- { "bbb", "Barai" },
- { "bbc", "Batak Toba" },
- { "bbd", "Bau" },
- { "bbe", "Bangba" },
- { "bbf", "Baibai" },
- { "bbg", "Barama" },
- { "bbh", "Bugan" },
- { "bbi", "Barombi" },
- { "bbj", "Ghomálá'" },
- { "bbk", "Babanki" },
- { "bbl", "Bats" },
- { "bbm", "Babango" },
- { "bbn", "Uneapa" },
- { "bbo", "Northern Bobo Madaré" },
- { "bbp", "West Central Banda" },
- { "bbq", "Bamali" },
- { "bbr", "Girawa" },
- { "bbs", "Bakpinka" },
- { "bbt", "Mburku" },
- { "bbu", "Kulung (Nigeria)" },
- { "bbv", "Karnai" },
- { "bbw", "Baba" },
- { "bbx", "Bubia" },
- { "bby", "Befang" },
- { "bbz", "Babalia Creole Arabic" },
- { "bca", "Central Bai" },
- { "bcb", "Bainouk-Samik" },
- { "bcc", "Southern Balochi" },
- { "bcd", "North Babar" },
- { "bce", "Bamenyam" },
- { "bcf", "Bamu" },
- { "bcg", "Baga Binari" },
- { "bch", "Bariai" },
- { "bci", "Baoulé" },
- { "bcj", "Bardi" },
- { "bck", "Bunaba" },
- { "bcl", "Central Bikol" },
- { "bcm", "Bannoni" },
- { "bcn", "Bali (Nigeria)" },
- { "bco", "Kaluli" },
- { "bcp", "Bali (Democratic Republic of Congo)" },
- { "bcq", "Bench" },
- { "bcr", "Babine" },
- { "bcs", "Kohumono" },
- { "bct", "Bendi" },
- { "bcu", "Awad Bing" },
- { "bcv", "Shoo-Minda-Nye" },
- { "bcw", "Bana" },
- { "bcy", "Bacama" },
- { "bcz", "Bainouk-Gunyaamolo" },
- { "bda", "Bayot" },
- { "bdb", "Basap" },
- { "bdc", "Emberá-Baudó" },
- { "bdd", "Bunama" },
- { "bde", "Bade" },
- { "bdf", "Biage" },
- { "bdg", "Bonggi" },
- { "bdh", "Baka (Sudan)" },
- { "bdi", "Burun" },
- { "bdj", "Bai" },
- { "bdk", "Budukh" },
- { "bdl", "Indonesian Bajau" },
- { "bdm", "Buduma" },
- { "bdn", "Baldemu" },
- { "bdo", "Morom" },
- { "bdp", "Bende" },
- { "bdq", "Bahnar" },
- { "bdr", "West Coast Bajau" },
- { "bds", "Burunge" },
- { "bdt", "Bokoto" },
- { "bdu", "Oroko" },
- { "bdv", "Bodo Parja" },
- { "bdw", "Baham" },
- { "bdx", "Budong-Budong" },
- { "bdy", "Bandjalang" },
- { "bdz", "Badeshi" },
- { "bea", "Beaver" },
- { "beb", "Bebele" },
- { "bec", "Iceve-Maci" },
- { "bed", "Bedoanas" },
- { "bee", "Byangsi" },
- { "bef", "Benabena" },
- { "beg", "Belait" },
- { "beh", "Biali" },
- { "bei", "Bekati'" },
- { "bej", "Beja" },
- { "bek", "Bebeli" },
- { "bel", "Belarusian" },
- { "bem", "Bemba (Zambia)" },
- { "ben", "Bengali" },
- { "beo", "Beami" },
- { "bep", "Besoa" },
- { "beq", "Beembe" },
- { "bes", "Besme" },
- { "bet", "Guiberoua Béte" },
- { "beu", "Blagar" },
- { "bev", "Daloa Bété" },
- { "bew", "Betawi" },
- { "bex", "Jur Modo" },
- { "bey", "Beli (Papua New Guinea)" },
- { "bez", "Bena (Tanzania)" },
- { "bfa", "Bari" },
- { "bfb", "Pauri Bareli" },
- { "bfc", "Northern Bai" },
- { "bfd", "Bafut" },
- { "bfe", "Betaf" },
- { "bff", "Bofi" },
- { "bfg", "Busang Kayan" },
- { "bfh", "Blafe" },
- { "bfi", "British Sign Language" },
- { "bfj", "Bafanji" },
- { "bfk", "Ban Khor Sign Language" },
- { "bfl", "Banda-Ndélé" },
- { "bfm", "Mmen" },
- { "bfn", "Bunak" },
- { "bfo", "Malba Birifor" },
- { "bfp", "Beba" },
- { "bfq", "Badaga" },
- { "bfr", "Bazigar" },
- { "bfs", "Southern Bai" },
- { "bft", "Balti" },
- { "bfu", "Gahri" },
- { "bfw", "Bondo" },
- { "bfx", "Bantayanon" },
- { "bfy", "Bagheli" },
- { "bfz", "Mahasu Pahari" },
- { "bga", "Gwamhi-Wuri" },
- { "bgb", "Bobongko" },
- { "bgc", "Haryanvi" },
- { "bgd", "Rathwi Bareli" },
- { "bge", "Bauria" },
- { "bgf", "Bangandu" },
- { "bgg", "Bugun" },
- { "bgi", "Giangan" },
- { "bgj", "Bangolan" },
- { "bgk", "Bit" },
- { "bgl", "Bo (Laos)" },
- { "bgm", "Baga Mboteni" },
- { "bgn", "Western Balochi" },
- { "bgo", "Baga Koga" },
- { "bgp", "Eastern Balochi" },
- { "bgq", "Bagri" },
- { "bgr", "Bawm Chin" },
- { "bgs", "Tagabawa" },
- { "bgt", "Bughotu" },
- { "bgu", "Mbongno" },
- { "bgv", "Warkay-Bipim" },
- { "bgw", "Bhatri" },
- { "bgx", "Balkan Gagauz Turkish" },
- { "bgy", "Benggoi" },
- { "bgz", "Banggai" },
- { "bha", "Bharia" },
- { "bhb", "Bhili" },
- { "bhc", "Biga" },
- { "bhd", "Bhadrawahi" },
- { "bhe", "Bhaya" },
- { "bhf", "Odiai" },
- { "bhg", "Binandere" },
- { "bhh", "Bukharic" },
- { "bhi", "Bhilali" },
- { "bhj", "Bahing" },
- { "bhl", "Bimin" },
- { "bhm", "Bathari" },
- { "bhn", "Bohtan Neo-Aramaic" },
- { "bho", "Bhojpuri" },
- { "bhp", "Bima" },
- { "bhq", "Tukang Besi South" },
- { "bhr", "Bara Malagasy" },
- { "bhs", "Buwal" },
- { "bht", "Bhattiyali" },
- { "bhu", "Bhunjia" },
- { "bhv", "Bahau" },
- { "bhw", "Biak" },
- { "bhx", "Bhalay" },
- { "bhy", "Bhele" },
- { "bhz", "Bada (Indonesia)" },
- { "bia", "Badimaya" },
- { "bib", "Bissa" },
- { "bic", "Bikaru" },
- { "bid", "Bidiyo" },
- { "bie", "Bepour" },
- { "bif", "Biafada" },
- { "big", "Biangai" },
- { "bij", "Vaghat-Ya-Bijim-Legeri" },
- { "bik", "Bikol" },
- { "bil", "Bile" },
- { "bim", "Bimoba" },
- { "bin", "Bini" },
- { "bio", "Nai" },
- { "bip", "Bila" },
- { "biq", "Bipi" },
- { "bir", "Bisorio" },
- { "bis", "Bislama" },
- { "bit", "Berinomo" },
- { "biu", "Biete" },
- { "biv", "Southern Birifor" },
- { "biw", "Kol (Cameroon)" },
- { "bix", "Bijori" },
- { "biy", "Birhor" },
- { "biz", "Baloi" },
- { "bja", "Budza" },
- { "bjb", "Banggarla" },
- { "bjc", "Bariji" },
- { "bje", "Biao-Jiao Mien" },
- { "bjf", "Barzani Jewish Neo-Aramaic" },
- { "bjg", "Bidyogo" },
- { "bjh", "Bahinemo" },
- { "bji", "Burji" },
- { "bjj", "Kanauji" },
- { "bjk", "Barok" },
- { "bjl", "Bulu (Papua New Guinea)" },
- { "bjm", "Bajelani" },
- { "bjn", "Banjar" },
- { "bjo", "Mid-Southern Banda" },
- { "bjp", "Fanamaket" },
- { "bjr", "Binumarien" },
- { "bjs", "Bajan" },
- { "bjt", "Balanta-Ganja" },
- { "bju", "Busuu" },
- { "bjv", "Bedjond" },
- { "bjw", "Bakwé" },
- { "bjx", "Banao Itneg" },
- { "bjy", "Bayali" },
- { "bjz", "Baruga" },
- { "bka", "Kyak" },
- { "bkc", "Baka (Cameroon)" },
- { "bkd", "Binukid" },
- { "bkf", "Beeke" },
- { "bkg", "Buraka" },
- { "bkh", "Bakoko" },
- { "bki", "Baki" },
- { "bkj", "Pande" },
- { "bkk", "Brokskat" },
- { "bkl", "Berik" },
- { "bkm", "Kom (Cameroon)" },
- { "bkn", "Bukitan" },
- { "bko", "Kwa'" },
- { "bkp", "Boko (Democratic Republic of Congo)" },
- { "bkq", "Bakairí" },
- { "bkr", "Bakumpai" },
- { "bks", "Northern Sorsoganon" },
- { "bkt", "Boloki" },
- { "bku", "Buhid" },
- { "bkv", "Bekwarra" },
- { "bkw", "Bekwel" },
- { "bkx", "Baikeno" },
- { "bky", "Bokyi" },
- { "bkz", "Bungku" },
- { "bla", "Siksika" },
- { "blb", "Bilua" },
- { "blc", "Bella Coola" },
- { "bld", "Bolango" },
- { "ble", "Balanta-Kentohe" },
- { "blf", "Buol" },
- { "blg", "Balau" },
- { "blh", "Kuwaa" },
- { "bli", "Bolia" },
- { "blj", "Bolongan" },
- { "blk", "Pa'o Karen" },
- { "bll", "Biloxi" },
- { "blm", "Beli (Sudan)" },
- { "bln", "Southern Catanduanes Bikol" },
- { "blo", "Anii" },
- { "blp", "Blablanga" },
- { "blq", "Baluan-Pam" },
- { "blr", "Blang" },
- { "bls", "Balaesang" },
- { "blt", "Tai Dam" },
- { "blv", "Bolo" },
- { "blw", "Balangao" },
- { "blx", "Mag-Indi Ayta" },
- { "bly", "Notre" },
- { "blz", "Balantak" },
- { "bma", "Lame" },
- { "bmb", "Bembe" },
- { "bmc", "Biem" },
- { "bmd", "Baga Manduri" },
- { "bme", "Limassa" },
- { "bmf", "Bom" },
- { "bmg", "Bamwe" },
- { "bmh", "Kein" },
- { "bmi", "Bagirmi" },
- { "bmj", "Bote-Majhi" },
- { "bmk", "Ghayavi" },
- { "bml", "Bomboli" },
- { "bmm", "Northern Betsimisaraka Malagasy" },
- { "bmn", "Bina (Papua New Guinea)" },
- { "bmo", "Bambalang" },
- { "bmp", "Bulgebi" },
- { "bmq", "Bomu" },
- { "bmr", "Muinane" },
- { "bms", "Bilma Kanuri" },
- { "bmt", "Biao Mon" },
- { "bmu", "Somba-Siawari" },
- { "bmv", "Bum" },
- { "bmw", "Bomwali" },
- { "bmx", "Baimak" },
- { "bmy", "Bemba (Democratic Republic of Congo)" },
- { "bmz", "Baramu" },
- { "bna", "Bonerate" },
- { "bnb", "Bookan" },
- { "bnc", "Bontok" },
- { "bnd", "Banda (Indonesia)" },
- { "bne", "Bintauna" },
- { "bnf", "Masiwang" },
- { "bng", "Benga" },
- { "bni", "Bangi" },
- { "bnj", "Eastern Tawbuid" },
- { "bnk", "Bierebo" },
- { "bnl", "Boon" },
- { "bnm", "Batanga" },
- { "bnn", "Bunun" },
- { "bno", "Bantoanon" },
- { "bnp", "Bola" },
- { "bnq", "Bantik" },
- { "bnr", "Butmas-Tur" },
- { "bns", "Bundeli" },
- { "bnu", "Bentong" },
- { "bnv", "Bonerif" },
- { "bnw", "Bisis" },
- { "bnx", "Bangubangu" },
- { "bny", "Bintulu" },
- { "bnz", "Beezen" },
- { "boa", "Bora" },
- { "bob", "Aweer" },
- { "bod", "Tibetan" },
- { "boe", "Mundabli" },
- { "bof", "Bolon" },
- { "bog", "Bamako Sign Language" },
- { "boh", "Boma" },
- { "boi", "Barbareño" },
- { "boj", "Anjam" },
- { "bok", "Bonjo" },
- { "bol", "Bole" },
- { "bom", "Berom" },
- { "bon", "Bine" },
- { "boo", "Tiemacèwè Bozo" },
- { "bop", "Bonkiman" },
- { "boq", "Bogaya" },
- { "bor", "Borôro" },
- { "bos", "Bosnian" },
- { "bot", "Bongo" },
- { "bou", "Bondei" },
- { "bov", "Tuwuli" },
- { "bow", "Rema" },
- { "box", "Buamu" },
- { "boy", "Bodo (Central African Republic)" },
- { "boz", "Tiéyaxo Bozo" },
- { "bpa", "Daakaka" },
- { "bpb", "Barbacoas" },
- { "bpd", "Banda-Banda" },
- { "bpg", "Bonggo" },
- { "bph", "Botlikh" },
- { "bpi", "Bagupi" },
- { "bpj", "Binji" },
- { "bpk", "Orowe" },
- { "bpl", "Broome Pearling Lugger Pidgin" },
- { "bpm", "Biyom" },
- { "bpn", "Dzao Min" },
- { "bpo", "Anasi" },
- { "bpp", "Kaure" },
- { "bpq", "Banda Malay" },
- { "bpr", "Koronadal Blaan" },
- { "bps", "Sarangani Blaan" },
- { "bpt", "Barrow Point" },
- { "bpu", "Bongu" },
- { "bpv", "Bian Marind" },
- { "bpw", "Bo (Papua New Guinea)" },
- { "bpx", "Palya Bareli" },
- { "bpy", "Bishnupriya" },
- { "bpz", "Bilba" },
- { "bqa", "Tchumbuli" },
- { "bqb", "Bagusa" },
- { "bqc", "Boko (Benin)" },
- { "bqd", "Bung" },
- { "bqf", "Baga Kaloum" },
- { "bqg", "Bago-Kusuntu" },
- { "bqh", "Baima" },
- { "bqi", "Bakhtiari" },
- { "bqj", "Bandial" },
- { "bqk", "Banda-Mbrès" },
- { "bql", "Bilakura" },
- { "bqm", "Wumboko" },
- { "bqn", "Bulgarian Sign Language" },
- { "bqo", "Balo" },
- { "bqp", "Busa" },
- { "bqq", "Biritai" },
- { "bqr", "Burusu" },
- { "bqs", "Bosngun" },
- { "bqt", "Bamukumbit" },
- { "bqu", "Boguru" },
- { "bqv", "Koro Wachi" },
- { "bqw", "Buru (Nigeria)" },
- { "bqx", "Baangi" },
- { "bqy", "Bengkala Sign Language" },
- { "bqz", "Bakaka" },
- { "bra", "Braj" },
- { "brb", "Lave" },
- { "brc", "Berbice Creole Dutch" },
- { "brd", "Baraamu" },
- { "bre", "Breton" },
- { "brf", "Bera" },
- { "brg", "Baure" },
- { "brh", "Brahui" },
- { "bri", "Mokpwe" },
- { "brj", "Bieria" },
- { "brk", "Birked" },
- { "brl", "Birwa" },
- { "brm", "Barambu" },
- { "brn", "Boruca" },
- { "bro", "Brokkat" },
- { "brp", "Barapasi" },
- { "brq", "Breri" },
- { "brr", "Birao" },
- { "brs", "Baras" },
- { "brt", "Bitare" },
- { "bru", "Eastern Bru" },
- { "brv", "Western Bru" },
- { "brw", "Bellari" },
- { "brx", "Bodo (India)" },
- { "bry", "Burui" },
- { "brz", "Bilbil" },
- { "bsa", "Abinomn" },
- { "bsb", "Brunei Bisaya" },
- { "bsc", "Bassari" },
- { "bse", "Wushi" },
- { "bsf", "Bauchi" },
- { "bsg", "Bashkardi" },
- { "bsh", "Kati" },
- { "bsi", "Bassossi" },
- { "bsj", "Bangwinji" },
- { "bsk", "Burushaski" },
- { "bsl", "Basa-Gumna" },
- { "bsm", "Busami" },
- { "bsn", "Barasana-Eduria" },
- { "bso", "Buso" },
- { "bsp", "Baga Sitemu" },
- { "bsq", "Bassa" },
- { "bsr", "Bassa-Kontagora" },
- { "bss", "Akoose" },
- { "bst", "Basketo" },
- { "bsu", "Bahonsuai" },
- { "bsv", "Baga Sobané" },
- { "bsw", "Baiso" },
- { "bsx", "Yangkam" },
- { "bsy", "Sabah Bisaya" },
- { "bta", "Bata" },
- { "btc", "Bati (Cameroon)" },
- { "btd", "Batak Dairi" },
- { "bte", "Gamo-Ningi" },
- { "btf", "Birgit" },
- { "btg", "Gagnoa Bété" },
- { "bth", "Biatah Bidayuh" },
- { "bti", "Burate" },
- { "btj", "Bacanese Malay" },
- { "btl", "Bhatola" },
- { "btm", "Batak Mandailing" },
- { "btn", "Ratagnon" },
- { "bto", "Rinconada Bikol" },
- { "btp", "Budibud" },
- { "btq", "Batek" },
- { "btr", "Baetora" },
- { "bts", "Batak Simalungun" },
- { "btt", "Bete-Bendi" },
- { "btu", "Batu" },
- { "btv", "Bateri" },
- { "btw", "Butuanon" },
- { "btx", "Batak Karo" },
- { "bty", "Bobot" },
- { "btz", "Batak Alas-Kluet" },
- { "bua", "Buriat" },
- { "bub", "Bua" },
- { "buc", "Bushi" },
- { "bud", "Ntcham" },
- { "bue", "Beothuk" },
- { "buf", "Bushoong" },
- { "bug", "Buginese" },
- { "buh", "Younuo Bunu" },
- { "bui", "Bongili" },
- { "buj", "Basa-Gurmana" },
- { "buk", "Bugawac" },
- { "bul", "Bulgarian" },
- { "bum", "Bulu (Cameroon)" },
- { "bun", "Sherbro" },
- { "buo", "Terei" },
- { "bup", "Busoa" },
- { "buq", "Brem" },
- { "bus", "Bokobaru" },
- { "but", "Bungain" },
- { "buu", "Budu" },
- { "buv", "Bun" },
- { "buw", "Bubi" },
- { "bux", "Boghom" },
- { "buy", "Bullom So" },
- { "buz", "Bukwen" },
- { "bva", "Barein" },
- { "bvb", "Bube" },
- { "bvc", "Baelelea" },
- { "bvd", "Baeggu" },
- { "bve", "Berau Malay" },
- { "bvf", "Boor" },
- { "bvg", "Bonkeng" },
- { "bvh", "Bure" },
- { "bvi", "Belanda Viri" },
- { "bvj", "Baan" },
- { "bvk", "Bukat" },
- { "bvl", "Bolivian Sign Language" },
- { "bvm", "Bamunka" },
- { "bvn", "Buna" },
- { "bvo", "Bolgo" },
- { "bvp", "Bumang" },
- { "bvq", "Birri" },
- { "bvr", "Burarra" },
- { "bvt", "Bati (Indonesia)" },
- { "bvu", "Bukit Malay" },
- { "bvv", "Baniva" },
- { "bvw", "Boga" },
- { "bvx", "Dibole" },
- { "bvy", "Baybayanon" },
- { "bvz", "Bauzi" },
- { "bwa", "Bwatoo" },
- { "bwb", "Namosi-Naitasiri-Serua" },
- { "bwc", "Bwile" },
- { "bwd", "Bwaidoka" },
- { "bwe", "Bwe Karen" },
- { "bwf", "Boselewa" },
- { "bwg", "Barwe" },
- { "bwh", "Bishuo" },
- { "bwi", "Baniwa" },
- { "bwj", "Láá Láá Bwamu" },
- { "bwk", "Bauwaki" },
- { "bwl", "Bwela" },
- { "bwm", "Biwat" },
- { "bwn", "Wunai Bunu" },
- { "bwo", "Boro (Ethiopia)" },
- { "bwp", "Mandobo Bawah" },
- { "bwq", "Southern Bobo Madaré" },
- { "bwr", "Bura-Pabir" },
- { "bws", "Bomboma" },
- { "bwt", "Bafaw-Balong" },
- { "bwu", "Buli (Ghana)" },
- { "bww", "Bwa" },
- { "bwx", "Bu-Nao Bunu" },
- { "bwy", "Cwi Bwamu" },
- { "bwz", "Bwisi" },
- { "bxa", "Tairaha" },
- { "bxb", "Belanda Bor" },
- { "bxc", "Molengue" },
- { "bxd", "Pela" },
- { "bxe", "Birale" },
- { "bxf", "Bilur" },
- { "bxg", "Bangala" },
- { "bxh", "Buhutu" },
- { "bxi", "Pirlatapa" },
- { "bxj", "Bayungu" },
- { "bxk", "Bukusu" },
- { "bxl", "Jalkunan" },
- { "bxm", "Mongolia Buriat" },
- { "bxn", "Burduna" },
- { "bxo", "Barikanchi" },
- { "bxp", "Bebil" },
- { "bxq", "Beele" },
- { "bxr", "Russia Buriat" },
- { "bxs", "Busam" },
- { "bxu", "China Buriat" },
- { "bxv", "Berakou" },
- { "bxw", "Bankagooma" },
- { "bxx", "Borna (Democratic Republic of Congo)" },
- { "bxz", "Binahari" },
- { "bya", "Batak" },
- { "byb", "Bikya" },
- { "byc", "Ubaghara" },
- { "byd", "Benyadu'" },
- { "bye", "Pouye" },
- { "byf", "Bete" },
- { "byg", "Baygo" },
- { "byh", "Bhujel" },
- { "byi", "Buyu" },
- { "byj", "Bina (Nigeria)" },
- { "byk", "Biao" },
- { "byl", "Bayono" },
- { "bym", "Bidyara" },
- { "byn", "Bilin" },
- { "byo", "Biyo" },
- { "byp", "Bumaji" },
- { "byq", "Basay" },
- { "byr", "Baruya" },
- { "bys", "Burak" },
- { "byt", "Berti" },
- { "byv", "Medumba" },
- { "byw", "Belhariya" },
- { "byx", "Qaqet" },
- { "byy", "Buya" },
- { "byz", "Banaro" },
- { "bza", "Bandi" },
- { "bzb", "Andio" },
- { "bzc", "Southern Betsimisaraka Malagasy" },
- { "bzd", "Bribri" },
- { "bze", "Jenaama Bozo" },
- { "bzf", "Boikin" },
- { "bzg", "Babuza" },
- { "bzh", "Mapos Buang" },
- { "bzi", "Bisu" },
- { "bzj", "Belize Kriol English" },
- { "bzk", "Nicaragua Creole English" },
- { "bzl", "Boano (Sulawesi)" },
- { "bzm", "Bolondo" },
- { "bzn", "Boano (Maluku)" },
- { "bzo", "Bozaba" },
- { "bzp", "Kemberano" },
- { "bzq", "Buli (Indonesia)" },
- { "bzr", "Biri" },
- { "bzs", "Brazilian Sign Language" },
- { "bzt", "Brithenig" },
- { "bzu", "Burmeso" },
- { "bzv", "Naami" },
- { "bzw", "Basa (Nigeria)" },
- { "bzx", "Kɛlɛngaxo Bozo" },
- { "bzy", "Obanliku" },
- { "bzz", "Evant" },
- { "caa", "Chortí" },
- { "cab", "Garifuna" },
- { "cac", "Chuj" },
- { "cad", "Caddo" },
- { "cae", "Lehar" },
- { "caf", "Southern Carrier" },
- { "cag", "Nivaclé" },
- { "cah", "Cahuarano" },
- { "caj", "Chané" },
- { "cak", "Kaqchikel" },
- { "cal", "Carolinian" },
- { "cam", "Cemuhî" },
- { "can", "Chambri" },
- { "cao", "Chácobo" },
- { "cap", "Chipaya" },
- { "caq", "Car Nicobarese" },
- { "car", "Galibi Carib" },
- { "cas", "Tsimané" },
- { "cat", "Catalan" },
- { "cav", "Cavineña" },
- { "caw", "Callawalla" },
- { "cax", "Chiquitano" },
- { "cay", "Cayuga" },
- { "caz", "Canichana" },
- { "cbb", "Cabiyarí" },
- { "cbc", "Carapana" },
- { "cbd", "Carijona" },
- { "cbe", "Chipiajes" },
- { "cbg", "Chimila" },
- { "cbh", "Cagua" },
- { "cbi", "Chachi" },
- { "cbj", "Ede Cabe" },
- { "cbk", "Chavacano" },
- { "cbl", "Bualkhaw Chin" },
- { "cbn", "Nyahkur" },
- { "cbo", "Izora" },
- { "cbr", "Cashibo-Cacataibo" },
- { "cbs", "Cashinahua" },
- { "cbt", "Chayahuita" },
- { "cbu", "Candoshi-Shapra" },
- { "cbv", "Cacua" },
- { "cbw", "Kinabalian" },
- { "cby", "Carabayo" },
- { "cca", "Cauca" },
- { "ccc", "Chamicuro" },
- { "ccd", "Cafundo Creole" },
- { "cce", "Chopi" },
- { "ccg", "Samba Daka" },
- { "cch", "Atsam" },
- { "ccj", "Kasanga" },
- { "ccl", "Cutchi-Swahili" },
- { "ccm", "Malaccan Creole Malay" },
- { "cco", "Comaltepec Chinantec" },
- { "ccp", "Chakma" },
- { "ccr", "Cacaopera" },
- { "cda", "Choni" },
- { "cde", "Chenchu" },
- { "cdf", "Chiru" },
- { "cdg", "Chamari" },
- { "cdh", "Chambeali" },
- { "cdi", "Chodri" },
- { "cdj", "Churahi" },
- { "cdm", "Chepang" },
- { "cdn", "Chaudangsi" },
- { "cdo", "Min Dong Chinese" },
- { "cdr", "Cinda-Regi-Tiyal" },
- { "cds", "Chadian Sign Language" },
- { "cdy", "Chadong" },
- { "cdz", "Koda" },
- { "cea", "Lower Chehalis" },
- { "ceb", "Cebuano" },
- { "ceg", "Chamacoco" },
- { "cek", "Eastern Khumi Chin" },
- { "cen", "Cen" },
- { "ces", "Czech" },
- { "cet", "Centúúm" },
- { "cfa", "Dijim-Bwilim" },
- { "cfd", "Cara" },
- { "cfg", "Como Karim" },
- { "cfm", "Falam Chin" },
- { "cga", "Changriwa" },
- { "cgc", "Kagayanen" },
- { "cgg", "Chiga" },
- { "cgk", "Chocangacakha" },
- { "cha", "Chamorro" },
- { "chb", "Chibcha" },
- { "chc", "Catawba" },
- { "chd", "Highland Oaxaca Chontal" },
- { "che", "Chechen" },
- { "chf", "Tabasco Chontal" },
- { "chg", "Chagatai" },
- { "chh", "Chinook" },
- { "chj", "Ojitlán Chinantec" },
- { "chk", "Chuukese" },
- { "chl", "Cahuilla" },
- { "chm", "Mari (Russia)" },
- { "chn", "Chinook jargon" },
- { "cho", "Choctaw" },
- { "chp", "Chipewyan" },
- { "chq", "Quiotepec Chinantec" },
- { "chr", "Cherokee" },
- { "cht", "Cholón" },
- { "chu", "Church Slavic" },
- { "chv", "Chuvash" },
- { "chw", "Chuwabu" },
- { "chx", "Chantyal" },
- { "chy", "Cheyenne" },
- { "chz", "Ozumacín Chinantec" },
- { "cia", "Cia-Cia" },
- { "cib", "Ci Gbe" },
- { "cic", "Chickasaw" },
- { "cid", "Chimariko" },
- { "cie", "Cineni" },
- { "cih", "Chinali" },
- { "cik", "Chitkuli Kinnauri" },
- { "cim", "Cimbrian" },
- { "cin", "Cinta Larga" },
- { "cip", "Chiapanec" },
- { "cir", "Tiri" },
- { "ciw", "Chippewa" },
- { "ciy", "Chaima" },
- { "cja", "Western Cham" },
- { "cje", "Chru" },
- { "cjh", "Upper Chehalis" },
- { "cji", "Chamalal" },
- { "cjk", "Chokwe" },
- { "cjm", "Eastern Cham" },
- { "cjn", "Chenapian" },
- { "cjo", "Ashéninka Pajonal" },
- { "cjp", "Cabécar" },
- { "cjs", "Shor" },
- { "cjv", "Chuave" },
- { "cjy", "Jinyu Chinese" },
- { "ckb", "Central Kurdish" },
- { "ckh", "Chak" },
- { "ckl", "Cibak" },
- { "ckn", "Kaang Chin" },
- { "cko", "Anufo" },
- { "ckq", "Kajakse" },
- { "ckr", "Kairak" },
- { "cks", "Tayo" },
- { "ckt", "Chukot" },
- { "cku", "Koasati" },
- { "ckv", "Kavalan" },
- { "ckx", "Caka" },
- { "cky", "Cakfem-Mushere" },
- { "ckz", "Cakchiquel-Quiché Mixed Language" },
- { "cla", "Ron" },
- { "clc", "Chilcotin" },
- { "cld", "Chaldean Neo-Aramaic" },
- { "cle", "Lealao Chinantec" },
- { "clh", "Chilisso" },
- { "cli", "Chakali" },
- { "clj", "Laitu Chin" },
- { "clk", "Idu-Mishmi" },
- { "cll", "Chala" },
- { "clm", "Clallam" },
- { "clo", "Lowland Oaxaca Chontal" },
- { "clt", "Lautu Chin" },
- { "clu", "Caluyanun" },
- { "clw", "Chulym" },
- { "cly", "Eastern Highland Chatino" },
- { "cma", "Maa" },
- { "cme", "Cerma" },
- { "cmg", "Classical Mongolian" },
- { "cmi", "Emberá-Chamí" },
- { "cml", "Campalagian" },
- { "cmm", "Michigamea" },
- { "cmn", "Mandarin Chinese" },
- { "cmo", "Central Mnong" },
- { "cmr", "Mro-Khimi Chin" },
- { "cms", "Messapic" },
- { "cmt", "Camtho" },
- { "cna", "Changthang" },
- { "cnb", "Chinbon Chin" },
- { "cnc", "Côông" },
- { "cng", "Northern Qiang" },
- { "cnh", "Haka Chin" },
- { "cni", "Asháninka" },
- { "cnk", "Khumi Chin" },
- { "cnl", "Lalana Chinantec" },
- { "cno", "Con" },
- { "cns", "Central Asmat" },
- { "cnt", "Tepetotutla Chinantec" },
- { "cnu", "Chenoua" },
- { "cnw", "Ngawn Chin" },
- { "cnx", "Middle Cornish" },
- { "coa", "Cocos Islands Malay" },
- { "cob", "Chicomuceltec" },
- { "coc", "Cocopa" },
- { "cod", "Cocama-Cocamilla" },
- { "coe", "Koreguaje" },
- { "cof", "Colorado" },
- { "cog", "Chong" },
- { "coh", "Chonyi-Dzihana-Kauma" },
- { "coj", "Cochimi" },
- { "cok", "Santa Teresa Cora" },
- { "col", "Columbia-Wenatchi" },
- { "com", "Comanche" },
- { "con", "Cofán" },
- { "coo", "Comox" },
- { "cop", "Coptic" },
- { "coq", "Coquille" },
- { "cor", "Cornish" },
- { "cos", "Corsican" },
- { "cot", "Caquinte" },
- { "cou", "Wamey" },
- { "cov", "Cao Miao" },
- { "cow", "Cowlitz" },
- { "cox", "Nanti" },
- { "coy", "Coyaima" },
- { "coz", "Chochotec" },
- { "cpa", "Palantla Chinantec" },
- { "cpb", "Ucayali-Yurúa Ashéninka" },
- { "cpc", "Ajyíninka Apurucayali" },
- { "cpg", "Cappadocian Greek" },
- { "cpi", "Chinese Pidgin English" },
- { "cpn", "Cherepon" },
- { "cpo", "Kpeego" },
- { "cps", "Capiznon" },
- { "cpu", "Pichis Ashéninka" },
- { "cpx", "Pu-Xian Chinese" },
- { "cpy", "South Ucayali Ashéninka" },
- { "cqd", "Chuanqiandian Cluster Miao" },
- { "cqu", "Chilean Quechua" },
- { "cra", "Chara" },
- { "crb", "Island Carib" },
- { "crc", "Lonwolwol" },
- { "crd", "Coeur d'Alene" },
- { "cre", "Cree" },
- { "crf", "Caramanta" },
- { "crg", "Michif" },
- { "crh", "Crimean Tatar" },
- { "cri", "Sãotomense" },
- { "crj", "Southern East Cree" },
- { "crk", "Plains Cree" },
- { "crl", "Northern East Cree" },
- { "crm", "Moose Cree" },
- { "crn", "El Nayar Cora" },
- { "cro", "Crow" },
- { "crq", "Iyo'wujwa Chorote" },
- { "crr", "Carolina Algonquian" },
- { "crs", "Seselwa Creole French" },
- { "crt", "Iyojwa'ja Chorote" },
- { "crv", "Chaura" },
- { "crw", "Chrau" },
- { "crx", "Carrier" },
- { "cry", "Cori" },
- { "crz", "Cruzeño" },
- { "csa", "Chiltepec Chinantec" },
- { "csb", "Kashubian" },
- { "csc", "Catalan Sign Language" },
- { "csd", "Chiangmai Sign Language" },
- { "cse", "Czech Sign Language" },
- { "csf", "Cuba Sign Language" },
- { "csg", "Chilean Sign Language" },
- { "csh", "Asho Chin" },
- { "csi", "Coast Miwok" },
- { "csj", "Songlai Chin" },
- { "csk", "Jola-Kasa" },
- { "csl", "Chinese Sign Language" },
- { "csm", "Central Sierra Miwok" },
- { "csn", "Colombian Sign Language" },
- { "cso", "Sochiapam Chinantec" },
- { "csq", "Croatia Sign Language" },
- { "csr", "Costa Rican Sign Language" },
- { "css", "Southern Ohlone" },
- { "cst", "Northern Ohlone" },
- { "csv", "Sumtu Chin" },
- { "csw", "Swampy Cree" },
- { "csy", "Siyin Chin" },
- { "csz", "Coos" },
- { "cta", "Tataltepec Chatino" },
- { "ctc", "Chetco" },
- { "ctd", "Tedim Chin" },
- { "cte", "Tepinapa Chinantec" },
- { "ctg", "Chittagonian" },
- { "cth", "Thaiphum Chin" },
- { "ctl", "Tlacoatzintepec Chinantec" },
- { "ctm", "Chitimacha" },
- { "ctn", "Chhintange" },
- { "cto", "Emberá-Catío" },
- { "ctp", "Western Highland Chatino" },
- { "cts", "Northern Catanduanes Bikol" },
- { "ctt", "Wayanad Chetti" },
- { "ctu", "Chol" },
- { "ctz", "Zacatepec Chatino" },
- { "cua", "Cua" },
- { "cub", "Cubeo" },
- { "cuc", "Usila Chinantec" },
- { "cug", "Cung" },
- { "cuh", "Chuka" },
- { "cui", "Cuiba" },
- { "cuj", "Mashco Piro" },
- { "cuk", "San Blas Kuna" },
- { "cul", "Culina" },
- { "cum", "Cumeral" },
- { "cuo", "Cumanagoto" },
- { "cup", "Cupeño" },
- { "cuq", "Cun" },
- { "cur", "Chhulung" },
- { "cut", "Teutila Cuicatec" },
- { "cuu", "Tai Ya" },
- { "cuv", "Cuvok" },
- { "cuw", "Chukwa" },
- { "cux", "Tepeuxila Cuicatec" },
- { "cvg", "Chug" },
- { "cvn", "Valle Nacional Chinantec" },
- { "cwa", "Kabwa" },
- { "cwb", "Maindo" },
- { "cwd", "Woods Cree" },
- { "cwe", "Kwere" },
- { "cwg", "Chewong" },
- { "cwt", "Kuwaataay" },
- { "cya", "Nopala Chatino" },
- { "cyb", "Cayubaba" },
- { "cym", "Welsh" },
- { "cyo", "Cuyonon" },
- { "czh", "Huizhou Chinese" },
- { "czk", "Knaanic" },
- { "czn", "Zenzontepec Chatino" },
- { "czo", "Min Zhong Chinese" },
- { "czt", "Zotung Chin" },
- { "daa", "Dangaléat" },
- { "dac", "Dambi" },
- { "dad", "Marik" },
- { "dae", "Duupa" },
- { "dag", "Dagbani" },
- { "dah", "Gwahatike" },
- { "dai", "Day" },
- { "daj", "Dar Fur Daju" },
- { "dak", "Dakota" },
- { "dal", "Dahalo" },
- { "dam", "Damakawa" },
- { "dan", "Danish" },
- { "dao", "Daai Chin" },
- { "daq", "Dandami Maria" },
- { "dar", "Dargwa" },
- { "das", "Daho-Doo" },
- { "dau", "Dar Sila Daju" },
- { "dav", "Taita" },
- { "daw", "Davawenyo" },
- { "dax", "Dayi" },
- { "daz", "Dao" },
- { "dba", "Bangime" },
- { "dbb", "Deno" },
- { "dbd", "Dadiya" },
- { "dbe", "Dabe" },
- { "dbf", "Edopi" },
- { "dbg", "Dogul Dom Dogon" },
- { "dbi", "Doka" },
- { "dbj", "Ida'an" },
- { "dbl", "Dyirbal" },
- { "dbm", "Duguri" },
- { "dbn", "Duriankere" },
- { "dbo", "Dulbu" },
- { "dbp", "Duwai" },
- { "dbq", "Daba" },
- { "dbr", "Dabarre" },
- { "dbt", "Ben Tey Dogon" },
- { "dbu", "Bondum Dom Dogon" },
- { "dbv", "Dungu" },
- { "dbw", "Bankan Tey Dogon" },
- { "dby", "Dibiyaso" },
- { "dcc", "Deccan" },
- { "dcr", "Negerhollands" },
- { "dda", "Dadi Dadi" },
- { "ddd", "Dongotono" },
- { "dde", "Doondo" },
- { "ddg", "Fataluku" },
- { "ddi", "West Goodenough" },
- { "ddj", "Jaru" },
- { "ddn", "Dendi (Benin)" },
- { "ddo", "Dido" },
- { "ddr", "Dhudhuroa" },
- { "dds", "Donno So Dogon" },
- { "ddw", "Dawera-Daweloor" },
- { "dec", "Dagik" },
- { "ded", "Dedua" },
- { "dee", "Dewoin" },
- { "def", "Dezfuli" },
- { "deg", "Degema" },
- { "deh", "Dehwari" },
- { "dei", "Demisa" },
- { "dek", "Dek" },
- { "del", "Delaware" },
- { "dem", "Dem" },
- { "den", "Slave (Athapascan)" },
- { "dep", "Pidgin Delaware" },
- { "deq", "Dendi (Central African Republic)" },
- { "der", "Deori" },
- { "des", "Desano" },
- { "deu", "German" },
- { "dev", "Domung" },
- { "dez", "Dengese" },
- { "dga", "Southern Dagaare" },
- { "dgb", "Bunoge Dogon" },
- { "dgc", "Casiguran Dumagat Agta" },
- { "dgd", "Dagaari Dioula" },
- { "dge", "Degenan" },
- { "dgg", "Doga" },
- { "dgh", "Dghwede" },
- { "dgi", "Northern Dagara" },
- { "dgk", "Dagba" },
- { "dgl", "Andaandi" },
- { "dgn", "Dagoman" },
- { "dgo", "Dogri (individual language)" },
- { "dgr", "Dogrib" },
- { "dgs", "Dogoso" },
- { "dgt", "Ndra'ngith" },
- { "dgu", "Degaru" },
- { "dgw", "Daungwurrung" },
- { "dgx", "Doghoro" },
- { "dgz", "Daga" },
- { "dhd", "Dhundari" },
- { "dhg", "Djangu" },
- { "dhi", "Dhimal" },
- { "dhl", "Dhalandji" },
- { "dhm", "Zemba" },
- { "dhn", "Dhanki" },
- { "dho", "Dhodia" },
- { "dhr", "Dhargari" },
- { "dhs", "Dhaiso" },
- { "dhu", "Dhurga" },
- { "dhv", "Dehu" },
- { "dhw", "Dhanwar (Nepal)" },
- { "dhx", "Dhungaloo" },
- { "dia", "Dia" },
- { "dib", "South Central Dinka" },
- { "dic", "Lakota Dida" },
- { "did", "Didinga" },
- { "dif", "Dieri" },
- { "dig", "Digo" },
- { "dih", "Kumiai" },
- { "dii", "Dimbong" },
- { "dij", "Dai" },
- { "dik", "Southwestern Dinka" },
- { "dil", "Dilling" },
- { "dim", "Dime" },
- { "din", "Dinka" },
- { "dio", "Dibo" },
- { "dip", "Northeastern Dinka" },
- { "diq", "Dimli (individual language)" },
- { "dir", "Dirim" },
- { "dis", "Dimasa" },
- { "dit", "Dirari" },
- { "diu", "Diriku" },
- { "div", "Dhivehi" },
- { "diw", "Northwestern Dinka" },
- { "dix", "Dixon Reef" },
- { "diy", "Diuwe" },
- { "diz", "Ding" },
- { "dja", "Djadjawurrung" },
- { "djb", "Djinba" },
- { "djc", "Dar Daju Daju" },
- { "djd", "Djamindjung" },
- { "dje", "Zarma" },
- { "djf", "Djangun" },
- { "dji", "Djinang" },
- { "djj", "Djeebbana" },
- { "djk", "Eastern Maroon Creole" },
- { "djm", "Jamsay Dogon" },
- { "djn", "Djauan" },
- { "djo", "Jangkang" },
- { "djr", "Djambarrpuyngu" },
- { "dju", "Kapriman" },
- { "djw", "Djawi" },
- { "dka", "Dakpakha" },
- { "dkk", "Dakka" },
- { "dkr", "Kuijau" },
- { "dks", "Southeastern Dinka" },
- { "dkx", "Mazagway" },
- { "dlg", "Dolgan" },
- { "dlk", "Dahalik" },
- { "dlm", "Dalmatian" },
- { "dln", "Darlong" },
- { "dma", "Duma" },
- { "dmb", "Mombo Dogon" },
- { "dmc", "Gavak" },
- { "dmd", "Madhi Madhi" },
- { "dme", "Dugwor" },
- { "dmg", "Upper Kinabatangan" },
- { "dmk", "Domaaki" },
- { "dml", "Dameli" },
- { "dmm", "Dama" },
- { "dmo", "Kemedzung" },
- { "dmr", "East Damar" },
- { "dms", "Dampelas" },
- { "dmu", "Dubu" },
- { "dmv", "Dumpas" },
- { "dmw", "Mudburra" },
- { "dmx", "Dema" },
- { "dmy", "Demta" },
- { "dna", "Upper Grand Valley Dani" },
- { "dnd", "Daonda" },
- { "dne", "Ndendeule" },
- { "dng", "Dungan" },
- { "dni", "Lower Grand Valley Dani" },
- { "dnj", "Dan" },
- { "dnk", "Dengka" },
- { "dnn", "Dzùùngoo" },
- { "dnr", "Danaru" },
- { "dnt", "Mid Grand Valley Dani" },
- { "dnu", "Danau" },
- { "dnv", "Danu" },
- { "dnw", "Western Dani" },
- { "dny", "Dení" },
- { "doa", "Dom" },
- { "dob", "Dobu" },
- { "doc", "Northern Dong" },
- { "doe", "Doe" },
- { "dof", "Domu" },
- { "doh", "Dong" },
- { "doi", "Dogri (macrolanguage)" },
- { "dok", "Dondo" },
- { "dol", "Doso" },
- { "don", "Toura (Papua New Guinea)" },
- { "doo", "Dongo" },
- { "dop", "Lukpa" },
- { "doq", "Dominican Sign Language" },
- { "dor", "Dori'o" },
- { "dos", "Dogosé" },
- { "dot", "Dass" },
- { "dov", "Dombe" },
- { "dow", "Doyayo" },
- { "dox", "Bussa" },
- { "doy", "Dompo" },
- { "doz", "Dorze" },
- { "dpp", "Papar" },
- { "drb", "Dair" },
- { "drc", "Minderico" },
- { "drd", "Darmiya" },
- { "dre", "Dolpo" },
- { "drg", "Rungus" },
- { "dri", "C'lela" },
- { "drl", "Paakantyi" },
- { "drn", "West Damar" },
- { "dro", "Daro-Matu Melanau" },
- { "drq", "Dura" },
- { "drr", "Dororo" },
- { "drs", "Gedeo" },
- { "drt", "Drents" },
- { "dru", "Rukai" },
- { "dry", "Darai" },
- { "dsb", "Lower Sorbian" },
- { "dse", "Dutch Sign Language" },
- { "dsh", "Daasanach" },
- { "dsi", "Disa" },
- { "dsl", "Danish Sign Language" },
- { "dsn", "Dusner" },
- { "dso", "Desiya" },
- { "dsq", "Tadaksahak" },
- { "dta", "Daur" },
- { "dtb", "Labuk-Kinabatangan Kadazan" },
- { "dtd", "Ditidaht" },
- { "dth", "Adithinngithigh" },
- { "dti", "Ana Tinga Dogon" },
- { "dtk", "Tene Kan Dogon" },
- { "dtm", "Tomo Kan Dogon" },
- { "dto", "Tommo So Dogon" },
- { "dtp", "Central Dusun" },
- { "dtr", "Lotud" },
- { "dts", "Toro So Dogon" },
- { "dtt", "Toro Tegu Dogon" },
- { "dtu", "Tebul Ure Dogon" },
- { "dty", "Dotyali" },
- { "dua", "Duala" },
- { "dub", "Dubli" },
- { "duc", "Duna" },
- { "dud", "Hun-Saare" },
- { "due", "Umiray Dumaget Agta" },
- { "duf", "Dumbea" },
- { "dug", "Duruma" },
- { "duh", "Dungra Bhil" },
- { "dui", "Dumun" },
- { "duj", "Dhuwal" },
- { "duk", "Uyajitaya" },
- { "dul", "Alabat Island Agta" },
- { "dum", "Middle Dutch (ca. 1050-1350)" },
- { "dun", "Dusun Deyah" },
- { "duo", "Dupaninan Agta" },
- { "dup", "Duano" },
- { "duq", "Dusun Malang" },
- { "dur", "Dii" },
- { "dus", "Dumi" },
- { "duu", "Drung" },
- { "duv", "Duvle" },
- { "duw", "Dusun Witu" },
- { "dux", "Duungooma" },
- { "duy", "Dicamay Agta" },
- { "duz", "Duli" },
- { "dva", "Duau" },
- { "dwa", "Diri" },
- { "dwr", "Dawro" },
- { "dws", "Dutton World Speedwords" },
- { "dww", "Dawawa" },
- { "dya", "Dyan" },
- { "dyb", "Dyaberdyaber" },
- { "dyd", "Dyugun" },
- { "dyg", "Villa Viciosa Agta" },
- { "dyi", "Djimini Senoufo" },
- { "dym", "Yanda Dom Dogon" },
- { "dyn", "Dyangadi" },
- { "dyo", "Jola-Fonyi" },
- { "dyu", "Dyula" },
- { "dyy", "Dyaabugay" },
- { "dza", "Tunzu" },
- { "dzd", "Daza" },
- { "dze", "Djiwarli" },
- { "dzg", "Dazaga" },
- { "dzl", "Dzalakha" },
- { "dzn", "Dzando" },
- { "dzo", "Dzongkha" },
- { "eaa", "Karenggapa" },
- { "ebg", "Ebughu" },
- { "ebk", "Eastern Bontok" },
- { "ebo", "Teke-Ebo" },
- { "ebr", "Ebrié" },
- { "ebu", "Embu" },
- { "ecr", "Eteocretan" },
- { "ecs", "Ecuadorian Sign Language" },
- { "ecy", "Eteocypriot" },
- { "eee", "E" },
- { "efa", "Efai" },
- { "efe", "Efe" },
- { "efi", "Efik" },
- { "ega", "Ega" },
- { "egl", "Emilian" },
- { "ego", "Eggon" },
- { "egy", "Egyptian (Ancient)" },
- { "ehu", "Ehueun" },
- { "eip", "Eipomek" },
- { "eit", "Eitiep" },
- { "eiv", "Askopan" },
- { "eja", "Ejamat" },
- { "eka", "Ekajuk" },
- { "ekc", "Eastern Karnic" },
- { "eke", "Ekit" },
- { "ekg", "Ekari" },
- { "eki", "Eki" },
- { "ekk", "Standard Estonian" },
- { "ekl", "Kol (Bangladesh)" },
- { "ekm", "Elip" },
- { "eko", "Koti" },
- { "ekp", "Ekpeye" },
- { "ekr", "Yace" },
- { "eky", "Eastern Kayah" },
- { "ele", "Elepi" },
- { "elh", "El Hugeirat" },
- { "eli", "Nding" },
- { "elk", "Elkei" },
- { "ell", "Modern Greek (1453-)" },
- { "elm", "Eleme" },
- { "elo", "El Molo" },
- { "elu", "Elu" },
- { "elx", "Elamite" },
- { "ema", "Emai-Iuleha-Ora" },
- { "emb", "Embaloh" },
- { "eme", "Emerillon" },
- { "emg", "Eastern Meohang" },
- { "emi", "Mussau-Emira" },
- { "emk", "Eastern Maninkakan" },
- { "emm", "Mamulique" },
- { "emn", "Eman" },
- { "emo", "Emok" },
- { "emp", "Northern Emberá" },
- { "ems", "Pacific Gulf Yupik" },
- { "emu", "Eastern Muria" },
- { "emw", "Emplawas" },
- { "emx", "Erromintxela" },
- { "emy", "Epigraphic Mayan" },
- { "ena", "Apali" },
- { "enb", "Markweeta" },
- { "enc", "En" },
- { "end", "Ende" },
- { "enf", "Forest Enets" },
- { "eng", "English" },
- { "enh", "Tundra Enets" },
- { "enm", "Middle English (1100-1500)" },
- { "enn", "Engenni" },
- { "eno", "Enggano" },
- { "enq", "Enga" },
- { "enr", "Emumu" },
- { "enu", "Enu" },
- { "env", "Enwan (Edu State)" },
- { "enw", "Enwan (Akwa Ibom State)" },
- { "eot", "Beti (Côte d'Ivoire)" },
- { "epi", "Epie" },
- { "epo", "Esperanto" },
- { "era", "Eravallan" },
- { "erg", "Sie" },
- { "erh", "Eruwa" },
- { "eri", "Ogea" },
- { "erk", "South Efate" },
- { "ero", "Horpa" },
- { "err", "Erre" },
- { "ers", "Ersu" },
- { "ert", "Eritai" },
- { "erw", "Erokwanas" },
- { "ese", "Ese Ejja" },
- { "esh", "Eshtehardi" },
- { "esi", "North Alaskan Inupiatun" },
- { "esk", "Northwest Alaska Inupiatun" },
- { "esl", "Egypt Sign Language" },
- { "esm", "Esuma" },
- { "esn", "Salvadoran Sign Language" },
- { "eso", "Estonian Sign Language" },
- { "esq", "Esselen" },
- { "ess", "Central Siberian Yupik" },
- { "est", "Estonian" },
- { "esu", "Central Yupik" },
- { "etb", "Etebi" },
- { "etc", "Etchemin" },
- { "eth", "Ethiopian Sign Language" },
- { "etn", "Eton (Vanuatu)" },
- { "eto", "Eton (Cameroon)" },
- { "etr", "Edolo" },
- { "ets", "Yekhee" },
- { "ett", "Etruscan" },
- { "etu", "Ejagham" },
- { "etx", "Eten" },
- { "etz", "Semimi" },
- { "eus", "Basque" },
- { "eve", "Even" },
- { "evh", "Uvbie" },
- { "evn", "Evenki" },
- { "ewe", "Ewe" },
- { "ewo", "Ewondo" },
- { "ext", "Extremaduran" },
- { "eya", "Eyak" },
- { "eyo", "Keiyo" },
- { "eza", "Ezaa" },
- { "eze", "Uzekwe" },
- { "faa", "Fasu" },
- { "fab", "Fa d'Ambu" },
- { "fad", "Wagi" },
- { "faf", "Fagani" },
- { "fag", "Finongan" },
- { "fah", "Baissa Fali" },
- { "fai", "Faiwol" },
- { "faj", "Faita" },
- { "fak", "Fang (Cameroon)" },
- { "fal", "South Fali" },
- { "fam", "Fam" },
- { "fan", "Fang (Equatorial Guinea)" },
- { "fao", "Faroese" },
- { "fap", "Palor" },
- { "far", "Fataleka" },
- { "fas", "Persian" },
- { "fat", "Fanti" },
- { "fau", "Fayu" },
- { "fax", "Fala" },
- { "fay", "Southwestern Fars" },
- { "faz", "Northwestern Fars" },
- { "fbl", "West Albay Bikol" },
- { "fcs", "Quebec Sign Language" },
- { "fer", "Feroge" },
- { "ffi", "Foia Foia" },
- { "ffm", "Maasina Fulfulde" },
- { "fgr", "Fongoro" },
- { "fia", "Nobiin" },
- { "fie", "Fyer" },
- { "fij", "Fijian" },
- { "fil", "Filipino" },
- { "fin", "Finnish" },
- { "fip", "Fipa" },
- { "fir", "Firan" },
- { "fit", "Tornedalen Finnish" },
- { "fiw", "Fiwaga" },
- { "fkk", "Kirya-Konzəl" },
- { "fkv", "Kven Finnish" },
- { "fla", "Kalispel-Pend d'Oreille" },
- { "flh", "Foau" },
- { "fli", "Fali" },
- { "fll", "North Fali" },
- { "fln", "Flinders Island" },
- { "flr", "Fuliiru" },
- { "fly", "Tsotsitaal" },
- { "fmp", "Fe'fe'" },
- { "fmu", "Far Western Muria" },
- { "fng", "Fanagalo" },
- { "fni", "Fania" },
- { "fod", "Foodo" },
- { "foi", "Foi" },
- { "fom", "Foma" },
- { "fon", "Fon" },
- { "for", "Fore" },
- { "fos", "Siraya" },
- { "fpe", "Fernando Po Creole English" },
- { "fqs", "Fas" },
- { "fra", "French" },
- { "frc", "Cajun French" },
- { "frd", "Fordata" },
- { "frk", "Frankish" },
- { "frm", "Middle French (ca. 1400-1600)" },
- { "fro", "Old French (842-ca. 1400)" },
- { "frp", "Arpitan" },
- { "frq", "Forak" },
- { "frr", "Northern Frisian" },
- { "frs", "Eastern Frisian" },
- { "frt", "Fortsenal" },
- { "fry", "Western Frisian" },
- { "fse", "Finnish Sign Language" },
- { "fsl", "French Sign Language" },
- { "fss", "Finland-Swedish Sign Language" },
- { "fub", "Adamawa Fulfulde" },
- { "fuc", "Pulaar" },
- { "fud", "East Futuna" },
- { "fue", "Borgu Fulfulde" },
- { "fuf", "Pular" },
- { "fuh", "Western Niger Fulfulde" },
- { "fui", "Bagirmi Fulfulde" },
- { "fuj", "Ko" },
- { "ful", "Fulah" },
- { "fum", "Fum" },
- { "fun", "Fulniô" },
- { "fuq", "Central-Eastern Niger Fulfulde" },
- { "fur", "Friulian" },
- { "fut", "Futuna-Aniwa" },
- { "fuu", "Furu" },
- { "fuv", "Nigerian Fulfulde" },
- { "fuy", "Fuyug" },
- { "fvr", "Fur" },
- { "fwa", "Fwâi" },
- { "fwe", "Fwe" },
- { "gaa", "Ga" },
- { "gab", "Gabri" },
- { "gac", "Mixed Great Andamanese" },
- { "gad", "Gaddang" },
- { "gae", "Guarequena" },
- { "gaf", "Gende" },
- { "gag", "Gagauz" },
- { "gah", "Alekano" },
- { "gai", "Borei" },
- { "gaj", "Gadsup" },
- { "gak", "Gamkonora" },
- { "gal", "Galolen" },
- { "gam", "Kandawo" },
- { "gan", "Gan Chinese" },
- { "gao", "Gants" },
- { "gap", "Gal" },
- { "gaq", "Gata'" },
- { "gar", "Galeya" },
- { "gas", "Adiwasi Garasia" },
- { "gat", "Kenati" },
- { "gau", "Mudhili Gadaba" },
- { "gaw", "Nobonob" },
- { "gax", "Borana-Arsi-Guji Oromo" },
- { "gay", "Gayo" },
- { "gaz", "West Central Oromo" },
- { "gba", "Gbaya (Central African Republic)" },
- { "gbb", "Kaytetye" },
- { "gbd", "Karadjeri" },
- { "gbe", "Niksek" },
- { "gbf", "Gaikundi" },
- { "gbg", "Gbanziri" },
- { "gbh", "Defi Gbe" },
- { "gbi", "Galela" },
- { "gbj", "Bodo Gadaba" },
- { "gbk", "Gaddi" },
- { "gbl", "Gamit" },
- { "gbm", "Garhwali" },
- { "gbn", "Mo'da" },
- { "gbo", "Northern Grebo" },
- { "gbp", "Gbaya-Bossangoa" },
- { "gbq", "Gbaya-Bozoum" },
- { "gbr", "Gbagyi" },
- { "gbs", "Gbesi Gbe" },
- { "gbu", "Gagadu" },
- { "gbv", "Gbanu" },
- { "gbw", "Gabi-Gabi" },
- { "gbx", "Eastern Xwla Gbe" },
- { "gby", "Gbari" },
- { "gbz", "Zoroastrian Dari" },
- { "gcc", "Mali" },
- { "gcd", "Ganggalida" },
- { "gce", "Galice" },
- { "gcf", "Guadeloupean Creole French" },
- { "gcl", "Grenadian Creole English" },
- { "gcn", "Gaina" },
- { "gcr", "Guianese Creole French" },
- { "gct", "Colonia Tovar German" },
- { "gda", "Gade Lohar" },
- { "gdb", "Pottangi Ollar Gadaba" },
- { "gdc", "Gugu Badhun" },
- { "gdd", "Gedaged" },
- { "gde", "Gude" },
- { "gdf", "Guduf-Gava" },
- { "gdg", "Ga'dang" },
- { "gdh", "Gadjerawang" },
- { "gdi", "Gundi" },
- { "gdj", "Gurdjar" },
- { "gdk", "Gadang" },
- { "gdl", "Dirasha" },
- { "gdm", "Laal" },
- { "gdn", "Umanakaina" },
- { "gdo", "Ghodoberi" },
- { "gdq", "Mehri" },
- { "gdr", "Wipi" },
- { "gds", "Ghandruk Sign Language" },
- { "gdt", "Kungardutyi" },
- { "gdu", "Gudu" },
- { "gdx", "Godwari" },
- { "gea", "Geruma" },
- { "geb", "Kire" },
- { "gec", "Gboloo Grebo" },
- { "ged", "Gade" },
- { "geg", "Gengle" },
- { "geh", "Hutterite German" },
- { "gei", "Gebe" },
- { "gej", "Gen" },
- { "gek", "Yiwom" },
- { "gel", "ut-Ma'in" },
- { "geq", "Geme" },
- { "ges", "Geser-Gorom" },
- { "gew", "Gera" },
- { "gex", "Garre" },
- { "gey", "Enya" },
- { "gez", "Geez" },
- { "gfk", "Patpatar" },
- { "gft", "Gafat" },
- { "gfx", "Mangetti Dune !Xung" },
- { "gga", "Gao" },
- { "ggb", "Gbii" },
- { "ggd", "Gugadj" },
- { "gge", "Guragone" },
- { "ggg", "Gurgula" },
- { "ggk", "Kungarakany" },
- { "ggl", "Ganglau" },
- { "ggm", "Gugu Mini" },
- { "ggn", "Eastern Gurung" },
- { "ggo", "Southern Gondi" },
- { "ggt", "Gitua" },
- { "ggu", "Gagu" },
- { "ggw", "Gogodala" },
- { "gha", "Ghadamès" },
- { "ghc", "Hiberno-Scottish Gaelic" },
- { "ghe", "Southern Ghale" },
- { "ghh", "Northern Ghale" },
- { "ghk", "Geko Karen" },
- { "ghl", "Ghulfan" },
- { "ghn", "Ghanongga" },
- { "gho", "Ghomara" },
- { "ghr", "Ghera" },
- { "ghs", "Guhu-Samane" },
- { "ght", "Kuke" },
- { "gia", "Kitja" },
- { "gib", "Gibanawa" },
- { "gic", "Gail" },
- { "gid", "Gidar" },
- { "gig", "Goaria" },
- { "gih", "Githabul" },
- { "gil", "Gilbertese" },
- { "gim", "Gimi (Eastern Highlands)" },
- { "gin", "Hinukh" },
- { "gip", "Gimi (West New Britain)" },
- { "giq", "Green Gelao" },
- { "gir", "Red Gelao" },
- { "gis", "North Giziga" },
- { "git", "Gitxsan" },
- { "giu", "Mulao" },
- { "giw", "White Gelao" },
- { "gix", "Gilima" },
- { "giy", "Giyug" },
- { "giz", "South Giziga" },
- { "gji", "Geji" },
- { "gjk", "Kachi Koli" },
- { "gjm", "Gunditjmara" },
- { "gjn", "Gonja" },
- { "gju", "Gujari" },
- { "gka", "Guya" },
- { "gke", "Ndai" },
- { "gkn", "Gokana" },
- { "gko", "Kok-Nar" },
- { "gkp", "Guinea Kpelle" },
- { "gla", "Scottish Gaelic" },
- { "glc", "Bon Gula" },
- { "gld", "Nanai" },
- { "gle", "Irish" },
- { "glg", "Galician" },
- { "glh", "Northwest Pashayi" },
- { "gli", "Guliguli" },
- { "glj", "Gula Iro" },
- { "glk", "Gilaki" },
- { "gll", "Garlali" },
- { "glo", "Galambu" },
- { "glr", "Glaro-Twabo" },
- { "glu", "Gula (Chad)" },
- { "glv", "Manx" },
- { "glw", "Glavda" },
- { "gly", "Gule" },
- { "gma", "Gambera" },
- { "gmb", "Gula'alaa" },
- { "gmd", "Mághdì" },
- { "gmh", "Middle High German (ca. 1050-1500)" },
- { "gml", "Middle Low German" },
- { "gmm", "Gbaya-Mbodomo" },
- { "gmn", "Gimnime" },
- { "gmu", "Gumalu" },
- { "gmv", "Gamo" },
- { "gmx", "Magoma" },
- { "gmy", "Mycenaean Greek" },
- { "gmz", "Mgbolizhia" },
- { "gna", "Kaansa" },
- { "gnb", "Gangte" },
- { "gnc", "Guanche" },
- { "gnd", "Zulgo-Gemzek" },
- { "gne", "Ganang" },
- { "gng", "Ngangam" },
- { "gnh", "Lere" },
- { "gni", "Gooniyandi" },
- { "gnk", "Gana" },
- { "gnl", "Gangulu" },
- { "gnm", "Ginuman" },
- { "gnn", "Gumatj" },
- { "gno", "Northern Gondi" },
- { "gnq", "Gana" },
- { "gnr", "Gureng Gureng" },
- { "gnt", "Guntai" },
- { "gnu", "Gnau" },
- { "gnw", "Western Bolivian Guaraní" },
- { "gnz", "Ganzi" },
- { "goa", "Guro" },
- { "gob", "Playero" },
- { "goc", "Gorakor" },
- { "god", "Godié" },
- { "goe", "Gongduk" },
- { "gof", "Gofa" },
- { "gog", "Gogo" },
- { "goh", "Old High German (ca. 750-1050)" },
- { "goi", "Gobasi" },
- { "goj", "Gowlan" },
- { "gok", "Gowli" },
- { "gol", "Gola" },
- { "gom", "Goan Konkani" },
- { "gon", "Gondi" },
- { "goo", "Gone Dau" },
- { "gop", "Yeretuar" },
- { "goq", "Gorap" },
- { "gor", "Gorontalo" },
- { "gos", "Gronings" },
- { "got", "Gothic" },
- { "gou", "Gavar" },
- { "gow", "Gorowa" },
- { "gox", "Gobu" },
- { "goy", "Goundo" },
- { "goz", "Gozarkhani" },
- { "gpa", "Gupa-Abawa" },
- { "gpe", "Ghanaian Pidgin English" },
- { "gpn", "Taiap" },
- { "gqa", "Ga'anda" },
- { "gqi", "Guiqiong" },
- { "gqn", "Guana (Brazil)" },
- { "gqr", "Gor" },
- { "gqu", "Qau" },
- { "gra", "Rajput Garasia" },
- { "grb", "Grebo" },
- { "grc", "Ancient Greek (to 1453)" },
- { "grd", "Guruntum-Mbaaru" },
- { "grg", "Madi" },
- { "grh", "Gbiri-Niragu" },
- { "gri", "Ghari" },
- { "grj", "Southern Grebo" },
- { "grm", "Kota Marudu Talantang" },
- { "grn", "Guarani" },
- { "gro", "Groma" },
- { "grq", "Gorovu" },
- { "grr", "Taznatit" },
- { "grs", "Gresi" },
- { "grt", "Garo" },
- { "gru", "Kistane" },
- { "grv", "Central Grebo" },
- { "grw", "Gweda" },
- { "grx", "Guriaso" },
- { "gry", "Barclayville Grebo" },
- { "grz", "Guramalum" },
- { "gse", "Ghanaian Sign Language" },
- { "gsg", "German Sign Language" },
- { "gsl", "Gusilay" },
- { "gsm", "Guatemalan Sign Language" },
- { "gsn", "Gusan" },
- { "gso", "Southwest Gbaya" },
- { "gsp", "Wasembo" },
- { "gss", "Greek Sign Language" },
- { "gsw", "Swiss German" },
- { "gta", "Guató" },
- { "gti", "Gbati-ri" },
- { "gtu", "Aghu-Tharnggala" },
- { "gua", "Shiki" },
- { "gub", "Guajajára" },
- { "guc", "Wayuu" },
- { "gud", "Yocoboué Dida" },
- { "gue", "Gurinji" },
- { "guf", "Gupapuyngu" },
- { "gug", "Paraguayan Guaraní" },
- { "guh", "Guahibo" },
- { "gui", "Eastern Bolivian Guaraní" },
- { "guj", "Gujarati" },
- { "guk", "Gumuz" },
- { "gul", "Sea Island Creole English" },
- { "gum", "Guambiano" },
- { "gun", "Mbyá Guaraní" },
- { "guo", "Guayabero" },
- { "gup", "Gunwinggu" },
- { "guq", "Aché" },
- { "gur", "Farefare" },
- { "gus", "Guinean Sign Language" },
- { "gut", "Maléku Jaíka" },
- { "guu", "Yanomamö" },
- { "guv", "Gey" },
- { "guw", "Gun" },
- { "gux", "Gourmanchéma" },
- { "guz", "Gusii" },
- { "gva", "Guana (Paraguay)" },
- { "gvc", "Guanano" },
- { "gve", "Duwet" },
- { "gvf", "Golin" },
- { "gvj", "Guajá" },
- { "gvl", "Gulay" },
- { "gvm", "Gurmana" },
- { "gvn", "Kuku-Yalanji" },
- { "gvo", "Gavião Do Jiparaná" },
- { "gvp", "Pará Gavião" },
- { "gvr", "Western Gurung" },
- { "gvs", "Gumawana" },
- { "gvy", "Guyani" },
- { "gwa", "Mbato" },
- { "gwb", "Gwa" },
- { "gwc", "Kalami" },
- { "gwd", "Gawwada" },
- { "gwe", "Gweno" },
- { "gwf", "Gowro" },
- { "gwg", "Moo" },
- { "gwi", "Gwichʼin" },
- { "gwj", "Gwi" },
- { "gwm", "Awngthim" },
- { "gwn", "Gwandara" },
- { "gwr", "Gwere" },
- { "gwt", "Gawar-Bati" },
- { "gwu", "Guwamu" },
- { "gww", "Kwini" },
- { "gwx", "Gua" },
- { "gxx", "Wè Southern" },
- { "gya", "Northwest Gbaya" },
- { "gyb", "Garus" },
- { "gyd", "Kayardild" },
- { "gye", "Gyem" },
- { "gyf", "Gungabula" },
- { "gyg", "Gbayi" },
- { "gyi", "Gyele" },
- { "gyl", "Gayil" },
- { "gym", "Ngäbere" },
- { "gyn", "Guyanese Creole English" },
- { "gyr", "Guarayu" },
- { "gyy", "Gunya" },
- { "gza", "Ganza" },
- { "gzi", "Gazi" },
- { "gzn", "Gane" },
- { "haa", "Han" },
- { "hab", "Hanoi Sign Language" },
- { "hac", "Gurani" },
- { "had", "Hatam" },
- { "hae", "Eastern Oromo" },
- { "haf", "Haiphong Sign Language" },
- { "hag", "Hanga" },
- { "hah", "Hahon" },
- { "hai", "Haida" },
- { "haj", "Hajong" },
- { "hak", "Hakka Chinese" },
- { "hal", "Halang" },
- { "ham", "Hewa" },
- { "han", "Hangaza" },
- { "hao", "Hakö" },
- { "hap", "Hupla" },
- { "haq", "Ha" },
- { "har", "Harari" },
- { "has", "Haisla" },
- { "hat", "Haitian" },
- { "hau", "Hausa" },
- { "hav", "Havu" },
- { "haw", "Hawaiian" },
- { "hax", "Southern Haida" },
- { "hay", "Haya" },
- { "haz", "Hazaragi" },
- { "hba", "Hamba" },
- { "hbb", "Huba" },
- { "hbn", "Heiban" },
- { "hbo", "Ancient Hebrew" },
- { "hbs", "Serbo-Croatian" },
- { "hbu", "Habu" },
- { "hca", "Andaman Creole Hindi" },
- { "hch", "Huichol" },
- { "hdn", "Northern Haida" },
- { "hds", "Honduras Sign Language" },
- { "hdy", "Hadiyya" },
- { "hea", "Northern Qiandong Miao" },
- { "heb", "Hebrew" },
- { "hed", "Herdé" },
- { "heg", "Helong" },
- { "heh", "Hehe" },
- { "hei", "Heiltsuk" },
- { "hem", "Hemba" },
- { "her", "Herero" },
- { "hgm", "Haiom" },
- { "hgw", "Haigwai" },
- { "hhi", "Hoia Hoia" },
- { "hhr", "Kerak" },
- { "hhy", "Hoyahoya" },
- { "hia", "Lamang" },
- { "hib", "Hibito" },
- { "hid", "Hidatsa" },
- { "hif", "Fiji Hindi" },
- { "hig", "Kamwe" },
- { "hih", "Pamosu" },
- { "hii", "Hinduri" },
- { "hij", "Hijuk" },
- { "hik", "Seit-Kaitetu" },
- { "hil", "Hiligaynon" },
- { "hin", "Hindi" },
- { "hio", "Tsoa" },
- { "hir", "Himarimã" },
- { "hit", "Hittite" },
- { "hiw", "Hiw" },
- { "hix", "Hixkaryána" },
- { "hji", "Haji" },
- { "hka", "Kahe" },
- { "hke", "Hunde" },
- { "hkk", "Hunjara-Kaina Ke" },
- { "hks", "Hong Kong Sign Language" },
- { "hla", "Halia" },
- { "hlb", "Halbi" },
- { "hld", "Halang Doan" },
- { "hle", "Hlersu" },
- { "hlt", "Matu Chin" },
- { "hlu", "Hieroglyphic Luwian" },
- { "hma", "Southern Mashan Hmong" },
- { "hmb", "Humburi Senni Songhay" },
- { "hmc", "Central Huishui Hmong" },
- { "hmd", "Large Flowery Miao" },
- { "hme", "Eastern Huishui Hmong" },
- { "hmf", "Hmong Don" },
- { "hmg", "Southwestern Guiyang Hmong" },
- { "hmh", "Southwestern Huishui Hmong" },
- { "hmi", "Northern Huishui Hmong" },
- { "hmj", "Ge" },
- { "hmk", "Maek" },
- { "hml", "Luopohe Hmong" },
- { "hmm", "Central Mashan Hmong" },
- { "hmn", "Hmong" },
- { "hmo", "Hiri Motu" },
- { "hmp", "Northern Mashan Hmong" },
- { "hmq", "Eastern Qiandong Miao" },
- { "hmr", "Hmar" },
- { "hms", "Southern Qiandong Miao" },
- { "hmt", "Hamtai" },
- { "hmu", "Hamap" },
- { "hmv", "Hmong Dô" },
- { "hmw", "Western Mashan Hmong" },
- { "hmy", "Southern Guiyang Hmong" },
- { "hmz", "Hmong Shua" },
- { "hna", "Mina (Cameroon)" },
- { "hnd", "Southern Hindko" },
- { "hne", "Chhattisgarhi" },
- { "hnh", "Ani" },
- { "hni", "Hani" },
- { "hnj", "Hmong Njua" },
- { "hnn", "Hanunoo" },
- { "hno", "Northern Hindko" },
- { "hns", "Caribbean Hindustani" },
- { "hnu", "Hung" },
- { "hoa", "Hoava" },
- { "hob", "Mari (Madang Province)" },
- { "hoc", "Ho" },
- { "hod", "Holma" },
- { "hoe", "Horom" },
- { "hoh", "Hobyót" },
- { "hoi", "Holikachuk" },
- { "hoj", "Hadothi" },
- { "hol", "Holu" },
- { "hom", "Homa" },
- { "hoo", "Holoholo" },
- { "hop", "Hopi" },
- { "hor", "Horo" },
- { "hos", "Ho Chi Minh City Sign Language" },
- { "hot", "Hote" },
- { "hov", "Hovongan" },
- { "how", "Honi" },
- { "hoy", "Holiya" },
- { "hoz", "Hozo" },
- { "hpo", "Hpon" },
- { "hps", "Hawai'i Pidgin Sign Language" },
- { "hra", "Hrangkhol" },
- { "hrc", "Niwer Mil" },
- { "hre", "Hre" },
- { "hrk", "Haruku" },
- { "hrm", "Horned Miao" },
- { "hro", "Haroi" },
- { "hrp", "Nhirrpi" },
- { "hrt", "Hértevin" },
- { "hru", "Hruso" },
- { "hrv", "Croatian" },
- { "hrw", "Warwar Feni" },
- { "hrx", "Hunsrik" },
- { "hrz", "Harzani" },
- { "hsb", "Upper Sorbian" },
- { "hsh", "Hungarian Sign Language" },
- { "hsl", "Hausa Sign Language" },
- { "hsn", "Xiang Chinese" },
- { "hss", "Harsusi" },
- { "hti", "Hoti" },
- { "hto", "Minica Huitoto" },
- { "hts", "Hadza" },
- { "htu", "Hitu" },
- { "htx", "Middle Hittite" },
- { "hub", "Huambisa" },
- { "huc", "=Hua" },
- { "hud", "Huaulu" },
- { "hue", "San Francisco Del Mar Huave" },
- { "huf", "Humene" },
- { "hug", "Huachipaeri" },
- { "huh", "Huilliche" },
- { "hui", "Huli" },
- { "huj", "Northern Guiyang Hmong" },
- { "huk", "Hulung" },
- { "hul", "Hula" },
- { "hum", "Hungana" },
- { "hun", "Hungarian" },
- { "huo", "Hu" },
- { "hup", "Hupa" },
- { "huq", "Tsat" },
- { "hur", "Halkomelem" },
- { "hus", "Huastec" },
- { "hut", "Humla" },
- { "huu", "Murui Huitoto" },
- { "huv", "San Mateo Del Mar Huave" },
- { "huw", "Hukumina" },
- { "hux", "Nüpode Huitoto" },
- { "huy", "Hulaulá" },
- { "huz", "Hunzib" },
- { "hvc", "Haitian Vodoun Culture Language" },
- { "hve", "San Dionisio Del Mar Huave" },
- { "hvk", "Haveke" },
- { "hvn", "Sabu" },
- { "hvv", "Santa María Del Mar Huave" },
- { "hwa", "Wané" },
- { "hwc", "Hawai'i Creole English" },
- { "hwo", "Hwana" },
- { "hya", "Hya" },
- { "hye", "Armenian" },
- { "iai", "Iaai" },
- { "ian", "Iatmul" },
- { "iap", "Iapama" },
- { "iar", "Purari" },
- { "iba", "Iban" },
- { "ibb", "Ibibio" },
- { "ibd", "Iwaidja" },
- { "ibe", "Akpes" },
- { "ibg", "Ibanag" },
- { "ibl", "Ibaloi" },
- { "ibm", "Agoi" },
- { "ibn", "Ibino" },
- { "ibo", "Igbo" },
- { "ibr", "Ibuoro" },
- { "ibu", "Ibu" },
- { "iby", "Ibani" },
- { "ica", "Ede Ica" },
- { "ich", "Etkywan" },
- { "icl", "Icelandic Sign Language" },
- { "icr", "Islander Creole English" },
- { "ida", "Idakho-Isukha-Tiriki" },
- { "idb", "Indo-Portuguese" },
- { "idc", "Idon" },
- { "idd", "Ede Idaca" },
- { "ide", "Idere" },
- { "idi", "Idi" },
- { "ido", "Ido" },
- { "idr", "Indri" },
- { "ids", "Idesa" },
- { "idt", "Idaté" },
- { "idu", "Idoma" },
- { "ifa", "Amganad Ifugao" },
- { "ifb", "Batad Ifugao" },
- { "ife", "Ifè" },
- { "iff", "Ifo" },
- { "ifk", "Tuwali Ifugao" },
- { "ifm", "Teke-Fuumu" },
- { "ifu", "Mayoyao Ifugao" },
- { "ify", "Keley-I Kallahan" },
- { "igb", "Ebira" },
- { "ige", "Igede" },
- { "igg", "Igana" },
- { "igl", "Igala" },
- { "igm", "Kanggape" },
- { "ign", "Ignaciano" },
- { "igo", "Isebe" },
- { "igs", "Interglossa" },
- { "igw", "Igwe" },
- { "ihb", "Iha Based Pidgin" },
- { "ihi", "Ihievbe" },
- { "ihp", "Iha" },
- { "ihw", "Bidhawal" },
- { "iii", "Sichuan Yi" },
- { "iin", "Thiin" },
- { "ijc", "Izon" },
- { "ije", "Biseni" },
- { "ijj", "Ede Ije" },
- { "ijn", "Kalabari" },
- { "ijs", "Southeast Ijo" },
- { "ike", "Eastern Canadian Inuktitut" },
- { "iki", "Iko" },
- { "ikk", "Ika" },
- { "ikl", "Ikulu" },
- { "iko", "Olulumo-Ikom" },
- { "ikp", "Ikpeshi" },
- { "ikr", "Ikaranggal" },
- { "ikt", "Inuinnaqtun" },
- { "iku", "Inuktitut" },
- { "ikv", "Iku-Gora-Ankwa" },
- { "ikw", "Ikwere" },
- { "ikx", "Ik" },
- { "ikz", "Ikizu" },
- { "ila", "Ile Ape" },
- { "ilb", "Ila" },
- { "ile", "Interlingue" },
- { "ilg", "Garig-Ilgar" },
- { "ili", "Ili Turki" },
- { "ilk", "Ilongot" },
- { "ill", "Iranun" },
- { "ilo", "Iloko" },
- { "ils", "International Sign" },
- { "ilu", "Ili'uun" },
- { "ilv", "Ilue" },
- { "ima", "Mala Malasar" },
- { "ime", "Imeraguen" },
- { "imi", "Anamgura" },
- { "iml", "Miluk" },
- { "imn", "Imonda" },
- { "imo", "Imbongu" },
- { "imr", "Imroing" },
- { "ims", "Marsian" },
- { "imy", "Milyan" },
- { "ina", "Interlingua (International Auxiliary Language Association)" },
- { "inb", "Inga" },
- { "ind", "Indonesian" },
- { "ing", "Degexit'an" },
- { "inh", "Ingush" },
- { "inj", "Jungle Inga" },
- { "inl", "Indonesian Sign Language" },
- { "inm", "Minaean" },
- { "inn", "Isinai" },
- { "ino", "Inoke-Yate" },
- { "inp", "Iñapari" },
- { "ins", "Indian Sign Language" },
- { "int", "Intha" },
- { "inz", "Ineseño" },
- { "ior", "Inor" },
- { "iou", "Tuma-Irumu" },
- { "iow", "Iowa-Oto" },
- { "ipi", "Ipili" },
- { "ipk", "Inupiaq" },
- { "ipo", "Ipiko" },
- { "iqu", "Iquito" },
- { "iqw", "Ikwo" },
- { "ire", "Iresim" },
- { "irh", "Irarutu" },
- { "iri", "Irigwe" },
- { "irk", "Iraqw" },
- { "irn", "Irántxe" },
- { "irr", "Ir" },
- { "iru", "Irula" },
- { "irx", "Kamberau" },
- { "iry", "Iraya" },
- { "isa", "Isabi" },
- { "isc", "Isconahua" },
- { "isd", "Isnag" },
- { "ise", "Italian Sign Language" },
- { "isg", "Irish Sign Language" },
- { "ish", "Esan" },
- { "isi", "Nkem-Nkum" },
- { "isk", "Ishkashimi" },
- { "isl", "Icelandic" },
- { "ism", "Masimasi" },
- { "isn", "Isanzu" },
- { "iso", "Isoko" },
- { "isr", "Israeli Sign Language" },
- { "ist", "Istriot" },
- { "isu", "Isu (Menchum Division)" },
- { "ita", "Italian" },
- { "itb", "Binongan Itneg" },
- { "ite", "Itene" },
- { "iti", "Inlaod Itneg" },
- { "itk", "Judeo-Italian" },
- { "itl", "Itelmen" },
- { "itm", "Itu Mbon Uzo" },
- { "ito", "Itonama" },
- { "itr", "Iteri" },
- { "its", "Isekiri" },
- { "itt", "Maeng Itneg" },
- { "itv", "Itawit" },
- { "itw", "Ito" },
- { "itx", "Itik" },
- { "ity", "Moyadan Itneg" },
- { "itz", "Itzá" },
- { "ium", "Iu Mien" },
- { "ivb", "Ibatan" },
- { "ivv", "Ivatan" },
- { "iwk", "I-Wak" },
- { "iwm", "Iwam" },
- { "iwo", "Iwur" },
- { "iws", "Sepik Iwam" },
- { "ixc", "Ixcatec" },
- { "ixl", "Ixil" },
- { "iya", "Iyayu" },
- { "iyo", "Mesaka" },
- { "iyx", "Yaka (Congo)" },
- { "izh", "Ingrian" },
- { "izr", "Izere" },
- { "izz", "Izii" },
- { "jaa", "Jamamadí" },
- { "jab", "Hyam" },
- { "jac", "Popti'" },
- { "jad", "Jahanka" },
- { "jae", "Yabem" },
- { "jaf", "Jara" },
- { "jah", "Jah Hut" },
- { "jaj", "Zazao" },
- { "jak", "Jakun" },
- { "jal", "Yalahatan" },
- { "jam", "Jamaican Creole English" },
- { "jan", "Jandai" },
- { "jao", "Yanyuwa" },
- { "jaq", "Yaqay" },
- { "jas", "New Caledonian Javanese" },
- { "jat", "Jakati" },
- { "jau", "Yaur" },
- { "jav", "Javanese" },
- { "jax", "Jambi Malay" },
- { "jay", "Yan-nhangu" },
- { "jaz", "Jawe" },
- { "jbe", "Judeo-Berber" },
- { "jbi", "Badjiri" },
- { "jbj", "Arandai" },
- { "jbk", "Barikewa" },
- { "jbn", "Nafusi" },
- { "jbo", "Lojban" },
- { "jbr", "Jofotek-Bromnya" },
- { "jbt", "Jabutí" },
- { "jbu", "Jukun Takum" },
- { "jbw", "Yawijibaya" },
- { "jcs", "Jamaican Country Sign Language" },
- { "jct", "Krymchak" },
- { "jda", "Jad" },
- { "jdg", "Jadgali" },
- { "jdt", "Judeo-Tat" },
- { "jeb", "Jebero" },
- { "jee", "Jerung" },
- { "jeg", "Jeng" },
- { "jeh", "Jeh" },
- { "jei", "Yei" },
- { "jek", "Jeri Kuo" },
- { "jel", "Yelmek" },
- { "jen", "Dza" },
- { "jer", "Jere" },
- { "jet", "Manem" },
- { "jeu", "Jonkor Bourmataguil" },
- { "jgb", "Ngbee" },
- { "jge", "Judeo-Georgian" },
- { "jgk", "Gwak" },
- { "jgo", "Ngomba" },
- { "jhi", "Jehai" },
- { "jhs", "Jhankot Sign Language" },
- { "jia", "Jina" },
- { "jib", "Jibu" },
- { "jic", "Tol" },
- { "jid", "Bu" },
- { "jie", "Jilbe" },
- { "jig", "Djingili" },
- { "jih", "sTodsde" },
- { "jii", "Jiiddu" },
- { "jil", "Jilim" },
- { "jim", "Jimi (Cameroon)" },
- { "jio", "Jiamao" },
- { "jiq", "Guanyinqiao" },
- { "jit", "Jita" },
- { "jiu", "Youle Jinuo" },
- { "jiv", "Shuar" },
- { "jiy", "Buyuan Jinuo" },
- { "jjr", "Bankal" },
- { "jkm", "Mobwa Karen" },
- { "jko", "Kubo" },
- { "jkp", "Paku Karen" },
- { "jkr", "Koro (India)" },
- { "jku", "Labir" },
- { "jle", "Ngile" },
- { "jls", "Jamaican Sign Language" },
- { "jma", "Dima" },
- { "jmb", "Zumbun" },
- { "jmc", "Machame" },
- { "jmd", "Yamdena" },
- { "jmi", "Jimi (Nigeria)" },
- { "jml", "Jumli" },
- { "jmn", "Makuri Naga" },
- { "jmr", "Kamara" },
- { "jms", "Mashi (Nigeria)" },
- { "jmw", "Mouwase" },
- { "jmx", "Western Juxtlahuaca Mixtec" },
- { "jna", "Jangshung" },
- { "jnd", "Jandavra" },
- { "jng", "Yangman" },
- { "jni", "Janji" },
- { "jnj", "Yemsa" },
- { "jnl", "Rawat" },
- { "jns", "Jaunsari" },
- { "job", "Joba" },
- { "jod", "Wojenaka" },
- { "jor", "Jorá" },
- { "jos", "Jordanian Sign Language" },
- { "jow", "Jowulu" },
- { "jpa", "Jewish Palestinian Aramaic" },
- { "jpn", "Japanese" },
- { "jpr", "Judeo-Persian" },
- { "jqr", "Jaqaru" },
- { "jra", "Jarai" },
- { "jrb", "Judeo-Arabic" },
- { "jrr", "Jiru" },
- { "jrt", "Jorto" },
- { "jru", "Japrería" },
- { "jsl", "Japanese Sign Language" },
- { "jua", "Júma" },
- { "jub", "Wannu" },
- { "juc", "Jurchen" },
- { "jud", "Worodougou" },
- { "juh", "Hõne" },
- { "jui", "Ngadjuri" },
- { "juk", "Wapan" },
- { "jul", "Jirel" },
- { "jum", "Jumjum" },
- { "jun", "Juang" },
- { "juo", "Jiba" },
- { "jup", "Hupdë" },
- { "jur", "Jurúna" },
- { "jus", "Jumla Sign Language" },
- { "jut", "Jutish" },
- { "juu", "Ju" },
- { "juw", "Wãpha" },
- { "juy", "Juray" },
- { "jvd", "Javindo" },
- { "jvn", "Caribbean Javanese" },
- { "jwi", "Jwira-Pepesa" },
- { "jya", "Jiarong" },
- { "jye", "Judeo-Yemeni Arabic" },
- { "jyy", "Jaya" },
- { "kaa", "Kara-Kalpak" },
- { "kab", "Kabyle" },
- { "kac", "Kachin" },
- { "kad", "Adara" },
- { "kae", "Ketangalan" },
- { "kaf", "Katso" },
- { "kag", "Kajaman" },
- { "kah", "Kara (Central African Republic)" },
- { "kai", "Karekare" },
- { "kaj", "Jju" },
- { "kak", "Kayapa Kallahan" },
- { "kal", "Kalaallisut" },
- { "kam", "Kamba (Kenya)" },
- { "kan", "Kannada" },
- { "kao", "Xaasongaxango" },
- { "kap", "Bezhta" },
- { "kaq", "Capanahua" },
- { "kas", "Kashmiri" },
- { "kat", "Georgian" },
- { "kau", "Kanuri" },
- { "kav", "Katukína" },
- { "kaw", "Kawi" },
- { "kax", "Kao" },
- { "kay", "Kamayurá" },
- { "kaz", "Kazakh" },
- { "kba", "Kalarko" },
- { "kbb", "Kaxuiâna" },
- { "kbc", "Kadiwéu" },
- { "kbd", "Kabardian" },
- { "kbe", "Kanju" },
- { "kbf", "Kakauhua" },
- { "kbg", "Khamba" },
- { "kbh", "Camsá" },
- { "kbi", "Kaptiau" },
- { "kbj", "Kari" },
- { "kbk", "Grass Koiari" },
- { "kbl", "Kanembu" },
- { "kbm", "Iwal" },
- { "kbn", "Kare (Central African Republic)" },
- { "kbo", "Keliko" },
- { "kbp", "Kabiyè" },
- { "kbq", "Kamano" },
- { "kbr", "Kafa" },
- { "kbs", "Kande" },
- { "kbt", "Abadi" },
- { "kbu", "Kabutra" },
- { "kbv", "Dera (Indonesia)" },
- { "kbw", "Kaiep" },
- { "kbx", "Ap Ma" },
- { "kby", "Manga Kanuri" },
- { "kbz", "Duhwa" },
- { "kca", "Khanty" },
- { "kcb", "Kawacha" },
- { "kcc", "Lubila" },
- { "kcd", "Ngkâlmpw Kanum" },
- { "kce", "Kaivi" },
- { "kcf", "Ukaan" },
- { "kcg", "Tyap" },
- { "kch", "Vono" },
- { "kci", "Kamantan" },
- { "kcj", "Kobiana" },
- { "kck", "Kalanga" },
- { "kcl", "Kela (Papua New Guinea)" },
- { "kcm", "Gula (Central African Republic)" },
- { "kcn", "Nubi" },
- { "kco", "Kinalakna" },
- { "kcp", "Kanga" },
- { "kcq", "Kamo" },
- { "kcr", "Katla" },
- { "kcs", "Koenoem" },
- { "kct", "Kaian" },
- { "kcu", "Kami (Tanzania)" },
- { "kcv", "Kete" },
- { "kcw", "Kabwari" },
- { "kcx", "Kachama-Ganjule" },
- { "kcy", "Korandje" },
- { "kcz", "Konongo" },
- { "kda", "Worimi" },
- { "kdc", "Kutu" },
- { "kdd", "Yankunytjatjara" },
- { "kde", "Makonde" },
- { "kdf", "Mamusi" },
- { "kdg", "Seba" },
- { "kdh", "Tem" },
- { "kdi", "Kumam" },
- { "kdj", "Karamojong" },
- { "kdk", "Numèè" },
- { "kdl", "Tsikimba" },
- { "kdm", "Kagoma" },
- { "kdn", "Kunda" },
- { "kdp", "Kaningdon-Nindem" },
- { "kdq", "Koch" },
- { "kdr", "Karaim" },
- { "kdt", "Kuy" },
- { "kdu", "Kadaru" },
- { "kdw", "Koneraw" },
- { "kdx", "Kam" },
- { "kdy", "Keder" },
- { "kdz", "Kwaja" },
- { "kea", "Kabuverdianu" },
- { "keb", "Kélé" },
- { "kec", "Keiga" },
- { "ked", "Kerewe" },
- { "kee", "Eastern Keres" },
- { "kef", "Kpessi" },
- { "keg", "Tese" },
- { "keh", "Keak" },
- { "kei", "Kei" },
- { "kej", "Kadar" },
- { "kek", "Kekchí" },
- { "kel", "Kela (Democratic Republic of Congo)" },
- { "kem", "Kemak" },
- { "ken", "Kenyang" },
- { "keo", "Kakwa" },
- { "kep", "Kaikadi" },
- { "keq", "Kamar" },
- { "ker", "Kera" },
- { "kes", "Kugbo" },
- { "ket", "Ket" },
- { "keu", "Akebu" },
- { "kev", "Kanikkaran" },
- { "kew", "West Kewa" },
- { "kex", "Kukna" },
- { "key", "Kupia" },
- { "kez", "Kukele" },
- { "kfa", "Kodava" },
- { "kfb", "Northwestern Kolami" },
- { "kfc", "Konda-Dora" },
- { "kfd", "Korra Koraga" },
- { "kfe", "Kota (India)" },
- { "kff", "Koya" },
- { "kfg", "Kudiya" },
- { "kfh", "Kurichiya" },
- { "kfi", "Kannada Kurumba" },
- { "kfj", "Kemiehua" },
- { "kfk", "Kinnauri" },
- { "kfl", "Kung" },
- { "kfm", "Khunsari" },
- { "kfn", "Kuk" },
- { "kfo", "Koro (Côte d'Ivoire)" },
- { "kfp", "Korwa" },
- { "kfq", "Korku" },
- { "kfr", "Kachchi" },
- { "kfs", "Bilaspuri" },
- { "kft", "Kanjari" },
- { "kfu", "Katkari" },
- { "kfv", "Kurmukar" },
- { "kfw", "Kharam Naga" },
- { "kfx", "Kullu Pahari" },
- { "kfy", "Kumaoni" },
- { "kfz", "Koromfé" },
- { "kga", "Koyaga" },
- { "kgb", "Kawe" },
- { "kgc", "Kasseng" },
- { "kgd", "Kataang" },
- { "kge", "Komering" },
- { "kgf", "Kube" },
- { "kgg", "Kusunda" },
- { "kgi", "Selangor Sign Language" },
- { "kgj", "Gamale Kham" },
- { "kgk", "Kaiwá" },
- { "kgl", "Kunggari" },
- { "kgm", "Karipúna" },
- { "kgn", "Karingani" },
- { "kgo", "Krongo" },
- { "kgp", "Kaingang" },
- { "kgq", "Kamoro" },
- { "kgr", "Abun" },
- { "kgs", "Kumbainggar" },
- { "kgt", "Somyev" },
- { "kgu", "Kobol" },
- { "kgv", "Karas" },
- { "kgw", "Karon Dori" },
- { "kgx", "Kamaru" },
- { "kgy", "Kyerung" },
- { "kha", "Khasi" },
- { "khb", "Lü" },
- { "khc", "Tukang Besi North" },
- { "khd", "Bädi Kanum" },
- { "khe", "Korowai" },
- { "khf", "Khuen" },
- { "khg", "Khams Tibetan" },
- { "khh", "Kehu" },
- { "khj", "Kuturmi" },
- { "khk", "Halh Mongolian" },
- { "khl", "Lusi" },
- { "khm", "Central Khmer" },
- { "khn", "Khandesi" },
- { "kho", "Khotanese" },
- { "khp", "Kapori" },
- { "khq", "Koyra Chiini Songhay" },
- { "khr", "Kharia" },
- { "khs", "Kasua" },
- { "kht", "Khamti" },
- { "khu", "Nkhumbi" },
- { "khv", "Khvarshi" },
- { "khw", "Khowar" },
- { "khx", "Kanu" },
- { "khy", "Kele (Democratic Republic of Congo)" },
- { "khz", "Keapara" },
- { "kia", "Kim" },
- { "kib", "Koalib" },
- { "kic", "Kickapoo" },
- { "kid", "Koshin" },
- { "kie", "Kibet" },
- { "kif", "Eastern Parbate Kham" },
- { "kig", "Kimaama" },
- { "kih", "Kilmeri" },
- { "kii", "Kitsai" },
- { "kij", "Kilivila" },
- { "kik", "Kikuyu" },
- { "kil", "Kariya" },
- { "kim", "Karagas" },
- { "kin", "Kinyarwanda" },
- { "kio", "Kiowa" },
- { "kip", "Sheshi Kham" },
- { "kiq", "Kosadle" },
- { "kir", "Kirghiz" },
- { "kis", "Kis" },
- { "kit", "Agob" },
- { "kiu", "Kirmanjki (individual language)" },
- { "kiv", "Kimbu" },
- { "kiw", "Northeast Kiwai" },
- { "kix", "Khiamniungan Naga" },
- { "kiy", "Kirikiri" },
- { "kiz", "Kisi" },
- { "kja", "Mlap" },
- { "kjb", "Q'anjob'al" },
- { "kjc", "Coastal Konjo" },
- { "kjd", "Southern Kiwai" },
- { "kje", "Kisar" },
- { "kjf", "Khalaj" },
- { "kjg", "Khmu" },
- { "kjh", "Khakas" },
- { "kji", "Zabana" },
- { "kjj", "Khinalugh" },
- { "kjk", "Highland Konjo" },
- { "kjl", "Western Parbate Kham" },
- { "kjm", "Kháng" },
- { "kjn", "Kunjen" },
- { "kjo", "Harijan Kinnauri" },
- { "kjp", "Pwo Eastern Karen" },
- { "kjq", "Western Keres" },
- { "kjr", "Kurudu" },
- { "kjs", "East Kewa" },
- { "kjt", "Phrae Pwo Karen" },
- { "kju", "Kashaya" },
- { "kjx", "Ramopa" },
- { "kjy", "Erave" },
- { "kjz", "Bumthangkha" },
- { "kka", "Kakanda" },
- { "kkb", "Kwerisa" },
- { "kkc", "Odoodee" },
- { "kkd", "Kinuku" },
- { "kke", "Kakabe" },
- { "kkf", "Kalaktang Monpa" },
- { "kkg", "Mabaka Valley Kalinga" },
- { "kkh", "Khün" },
- { "kki", "Kagulu" },
- { "kkj", "Kako" },
- { "kkk", "Kokota" },
- { "kkl", "Kosarek Yale" },
- { "kkm", "Kiong" },
- { "kkn", "Kon Keu" },
- { "kko", "Karko" },
- { "kkp", "Gugubera" },
- { "kkq", "Kaiku" },
- { "kkr", "Kir-Balar" },
- { "kks", "Giiwo" },
- { "kkt", "Koi" },
- { "kku", "Tumi" },
- { "kkv", "Kangean" },
- { "kkw", "Teke-Kukuya" },
- { "kkx", "Kohin" },
- { "kky", "Guguyimidjir" },
- { "kkz", "Kaska" },
- { "kla", "Klamath-Modoc" },
- { "klb", "Kiliwa" },
- { "klc", "Kolbila" },
- { "kld", "Gamilaraay" },
- { "kle", "Kulung (Nepal)" },
- { "klf", "Kendeje" },
- { "klg", "Tagakaulo" },
- { "klh", "Weliki" },
- { "kli", "Kalumpang" },
- { "klj", "Turkic Khalaj" },
- { "klk", "Kono (Nigeria)" },
- { "kll", "Kagan Kalagan" },
- { "klm", "Migum" },
- { "kln", "Kalenjin" },
- { "klo", "Kapya" },
- { "klp", "Kamasa" },
- { "klq", "Rumu" },
- { "klr", "Khaling" },
- { "kls", "Kalasha" },
- { "klt", "Nukna" },
- { "klu", "Klao" },
- { "klv", "Maskelynes" },
- { "klw", "Lindu" },
- { "klx", "Koluwawa" },
- { "kly", "Kalao" },
- { "klz", "Kabola" },
- { "kma", "Konni" },
- { "kmb", "Kimbundu" },
- { "kmc", "Southern Dong" },
- { "kmd", "Majukayang Kalinga" },
- { "kme", "Bakole" },
- { "kmf", "Kare (Papua New Guinea)" },
- { "kmg", "Kâte" },
- { "kmh", "Kalam" },
- { "kmi", "Kami (Nigeria)" },
- { "kmj", "Kumarbhag Paharia" },
- { "kmk", "Limos Kalinga" },
- { "kml", "Tanudan Kalinga" },
- { "kmm", "Kom (India)" },
- { "kmn", "Awtuw" },
- { "kmo", "Kwoma" },
- { "kmp", "Gimme" },
- { "kmq", "Kwama" },
- { "kmr", "Northern Kurdish" },
- { "kms", "Kamasau" },
- { "kmt", "Kemtuik" },
- { "kmu", "Kanite" },
- { "kmv", "Karipúna Creole French" },
- { "kmw", "Komo (Democratic Republic of Congo)" },
- { "kmx", "Waboda" },
- { "kmy", "Koma" },
- { "kmz", "Khorasani Turkish" },
- { "kna", "Dera (Nigeria)" },
- { "knb", "Lubuagan Kalinga" },
- { "knc", "Central Kanuri" },
- { "knd", "Konda" },
- { "kne", "Kankanaey" },
- { "knf", "Mankanya" },
- { "kng", "Koongo" },
- { "kni", "Kanufi" },
- { "knj", "Western Kanjobal" },
- { "knk", "Kuranko" },
- { "knl", "Keninjal" },
- { "knm", "Kanamarí" },
- { "knn", "Konkani (individual language)" },
- { "kno", "Kono (Sierra Leone)" },
- { "knp", "Kwanja" },
- { "knq", "Kintaq" },
- { "knr", "Kaningra" },
- { "kns", "Kensiu" },
- { "knt", "Panoan Katukína" },
- { "knu", "Kono (Guinea)" },
- { "knv", "Tabo" },
- { "knw", "Kung-Ekoka" },
- { "knx", "Kendayan" },
- { "kny", "Kanyok" },
- { "knz", "Kalamsé" },
- { "koa", "Konomala" },
- { "koc", "Kpati" },
- { "kod", "Kodi" },
- { "koe", "Kacipo-Balesi" },
- { "kof", "Kubi" },
- { "kog", "Cogui" },
- { "koh", "Koyo" },
- { "koi", "Komi-Permyak" },
- { "koj", "Sara Dunjo" },
- { "kok", "Konkani (macrolanguage)" },
- { "kol", "Kol (Papua New Guinea)" },
- { "kom", "Komi" },
- { "kon", "Kongo" },
- { "koo", "Konzo" },
- { "kop", "Waube" },
- { "koq", "Kota (Gabon)" },
- { "kor", "Korean" },
- { "kos", "Kosraean" },
- { "kot", "Lagwan" },
- { "kou", "Koke" },
- { "kov", "Kudu-Camo" },
- { "kow", "Kugama" },
- { "kox", "Coxima" },
- { "koy", "Koyukon" },
- { "koz", "Korak" },
- { "kpa", "Kutto" },
- { "kpb", "Mullu Kurumba" },
- { "kpc", "Curripaco" },
- { "kpd", "Koba" },
- { "kpe", "Kpelle" },
- { "kpf", "Komba" },
- { "kpg", "Kapingamarangi" },
- { "kph", "Kplang" },
- { "kpi", "Kofei" },
- { "kpj", "Karajá" },
- { "kpk", "Kpan" },
- { "kpl", "Kpala" },
- { "kpm", "Koho" },
- { "kpn", "Kepkiriwát" },
- { "kpo", "Ikposo" },
- { "kpq", "Korupun-Sela" },
- { "kpr", "Korafe-Yegha" },
- { "kps", "Tehit" },
- { "kpt", "Karata" },
- { "kpu", "Kafoa" },
- { "kpv", "Komi-Zyrian" },
- { "kpw", "Kobon" },
- { "kpx", "Mountain Koiali" },
- { "kpy", "Koryak" },
- { "kpz", "Kupsabiny" },
- { "kqa", "Mum" },
- { "kqb", "Kovai" },
- { "kqc", "Doromu-Koki" },
- { "kqd", "Koy Sanjaq Surat" },
- { "kqe", "Kalagan" },
- { "kqf", "Kakabai" },
- { "kqg", "Khe" },
- { "kqh", "Kisankasa" },
- { "kqi", "Koitabu" },
- { "kqj", "Koromira" },
- { "kqk", "Kotafon Gbe" },
- { "kql", "Kyenele" },
- { "kqm", "Khisa" },
- { "kqn", "Kaonde" },
- { "kqo", "Eastern Krahn" },
- { "kqp", "Kimré" },
- { "kqq", "Krenak" },
- { "kqr", "Kimaragang" },
- { "kqs", "Northern Kissi" },
- { "kqt", "Klias River Kadazan" },
- { "kqu", "Seroa" },
- { "kqv", "Okolod" },
- { "kqw", "Kandas" },
- { "kqx", "Mser" },
- { "kqy", "Koorete" },
- { "kqz", "Korana" },
- { "kra", "Kumhali" },
- { "krb", "Karkin" },
- { "krc", "Karachay-Balkar" },
- { "krd", "Kairui-Midiki" },
- { "kre", "Panará" },
- { "krf", "Koro (Vanuatu)" },
- { "krh", "Kurama" },
- { "kri", "Krio" },
- { "krj", "Kinaray-A" },
- { "krk", "Kerek" },
- { "krl", "Karelian" },
- { "krm", "Krim" },
- { "krn", "Sapo" },
- { "krp", "Korop" },
- { "krr", "Kru'ng 2" },
- { "krs", "Gbaya (Sudan)" },
- { "krt", "Tumari Kanuri" },
- { "kru", "Kurukh" },
- { "krv", "Kavet" },
- { "krw", "Western Krahn" },
- { "krx", "Karon" },
- { "kry", "Kryts" },
- { "krz", "Sota Kanum" },
- { "ksa", "Shuwa-Zamani" },
- { "ksb", "Shambala" },
- { "ksc", "Southern Kalinga" },
- { "ksd", "Kuanua" },
- { "kse", "Kuni" },
- { "ksf", "Bafia" },
- { "ksg", "Kusaghe" },
- { "ksh", "Kölsch" },
- { "ksi", "Krisa" },
- { "ksj", "Uare" },
- { "ksk", "Kansa" },
- { "ksl", "Kumalu" },
- { "ksm", "Kumba" },
- { "ksn", "Kasiguranin" },
- { "kso", "Kofa" },
- { "ksp", "Kaba" },
- { "ksq", "Kwaami" },
- { "ksr", "Borong" },
- { "kss", "Southern Kisi" },
- { "kst", "Winyé" },
- { "ksu", "Khamyang" },
- { "ksv", "Kusu" },
- { "ksw", "S'gaw Karen" },
- { "ksx", "Kedang" },
- { "ksy", "Kharia Thar" },
- { "ksz", "Kodaku" },
- { "kta", "Katua" },
- { "ktb", "Kambaata" },
- { "ktc", "Kholok" },
- { "ktd", "Kokata" },
- { "kte", "Nubri" },
- { "ktf", "Kwami" },
- { "ktg", "Kalkutung" },
- { "kth", "Karanga" },
- { "kti", "North Muyu" },
- { "ktj", "Plapo Krumen" },
- { "ktk", "Kaniet" },
- { "ktl", "Koroshi" },
- { "ktm", "Kurti" },
- { "ktn", "Karitiâna" },
- { "kto", "Kuot" },
- { "ktp", "Kaduo" },
- { "ktq", "Katabaga" },
- { "ktr", "Kota Marudu Tinagas" },
- { "kts", "South Muyu" },
- { "ktt", "Ketum" },
- { "ktu", "Kituba (Democratic Republic of Congo)" },
- { "ktv", "Eastern Katu" },
- { "ktw", "Kato" },
- { "ktx", "Kaxararí" },
- { "kty", "Kango (Bas-Uélé District)" },
- { "ktz", "Ju'hoan" },
- { "kua", "Kuanyama" },
- { "kub", "Kutep" },
- { "kuc", "Kwinsu" },
- { "kud", "'Auhelawa" },
- { "kue", "Kuman" },
- { "kuf", "Western Katu" },
- { "kug", "Kupa" },
- { "kuh", "Kushi" },
- { "kui", "Kuikúro-Kalapálo" },
- { "kuj", "Kuria" },
- { "kuk", "Kepo'" },
- { "kul", "Kulere" },
- { "kum", "Kumyk" },
- { "kun", "Kunama" },
- { "kuo", "Kumukio" },
- { "kup", "Kunimaipa" },
- { "kuq", "Karipuna" },
- { "kur", "Kurdish" },
- { "kus", "Kusaal" },
- { "kut", "Kutenai" },
- { "kuu", "Upper Kuskokwim" },
- { "kuv", "Kur" },
- { "kuw", "Kpagua" },
- { "kux", "Kukatja" },
- { "kuy", "Kuuku-Ya'u" },
- { "kuz", "Kunza" },
- { "kva", "Bagvalal" },
- { "kvb", "Kubu" },
- { "kvc", "Kove" },
- { "kvd", "Kui (Indonesia)" },
- { "kve", "Kalabakan" },
- { "kvf", "Kabalai" },
- { "kvg", "Kuni-Boazi" },
- { "kvh", "Komodo" },
- { "kvi", "Kwang" },
- { "kvj", "Psikye" },
- { "kvk", "Korean Sign Language" },
- { "kvl", "Kayaw" },
- { "kvm", "Kendem" },
- { "kvn", "Border Kuna" },
- { "kvo", "Dobel" },
- { "kvp", "Kompane" },
- { "kvq", "Geba Karen" },
- { "kvr", "Kerinci" },
- { "kvs", "Kunggara" },
- { "kvt", "Lahta Karen" },
- { "kvu", "Yinbaw Karen" },
- { "kvv", "Kola" },
- { "kvw", "Wersing" },
- { "kvx", "Parkari Koli" },
- { "kvy", "Yintale Karen" },
- { "kvz", "Tsakwambo" },
- { "kwa", "Dâw" },
- { "kwb", "Kwa" },
- { "kwc", "Likwala" },
- { "kwd", "Kwaio" },
- { "kwe", "Kwerba" },
- { "kwf", "Kwara'ae" },
- { "kwg", "Sara Kaba Deme" },
- { "kwh", "Kowiai" },
- { "kwi", "Awa-Cuaiquer" },
- { "kwj", "Kwanga" },
- { "kwk", "Kwakiutl" },
- { "kwl", "Kofyar" },
- { "kwm", "Kwambi" },
- { "kwn", "Kwangali" },
- { "kwo", "Kwomtari" },
- { "kwp", "Kodia" },
- { "kwq", "Kwak" },
- { "kwr", "Kwer" },
- { "kws", "Kwese" },
- { "kwt", "Kwesten" },
- { "kwu", "Kwakum" },
- { "kwv", "Sara Kaba Náà" },
- { "kww", "Kwinti" },
- { "kwx", "Khirwar" },
- { "kwy", "San Salvador Kongo" },
- { "kwz", "Kwadi" },
- { "kxa", "Kairiru" },
- { "kxb", "Krobu" },
- { "kxc", "Konso" },
- { "kxd", "Brunei" },
- { "kxe", "Kakihum" },
- { "kxf", "Manumanaw Karen" },
- { "kxh", "Karo (Ethiopia)" },
- { "kxi", "Keningau Murut" },
- { "kxj", "Kulfa" },
- { "kxk", "Zayein Karen" },
- { "kxl", "Nepali Kurux" },
- { "kxm", "Northern Khmer" },
- { "kxn", "Kanowit-Tanjong Melanau" },
- { "kxo", "Kanoé" },
- { "kxp", "Wadiyara Koli" },
- { "kxq", "Smärky Kanum" },
- { "kxr", "Koro (Papua New Guinea)" },
- { "kxs", "Kangjia" },
- { "kxt", "Koiwat" },
- { "kxu", "Kui (India)" },
- { "kxv", "Kuvi" },
- { "kxw", "Konai" },
- { "kxx", "Likuba" },
- { "kxy", "Kayong" },
- { "kxz", "Kerewo" },
- { "kya", "Kwaya" },
- { "kyb", "Butbut Kalinga" },
- { "kyc", "Kyaka" },
- { "kyd", "Karey" },
- { "kye", "Krache" },
- { "kyf", "Kouya" },
- { "kyg", "Keyagana" },
- { "kyh", "Karok" },
- { "kyi", "Kiput" },
- { "kyj", "Karao" },
- { "kyk", "Kamayo" },
- { "kyl", "Kalapuya" },
- { "kym", "Kpatili" },
- { "kyn", "Northern Binukidnon" },
- { "kyo", "Kelon" },
- { "kyp", "Kang" },
- { "kyq", "Kenga" },
- { "kyr", "Kuruáya" },
- { "kys", "Baram Kayan" },
- { "kyt", "Kayagar" },
- { "kyu", "Western Kayah" },
- { "kyv", "Kayort" },
- { "kyw", "Kudmali" },
- { "kyx", "Rapoisi" },
- { "kyy", "Kambaira" },
- { "kyz", "Kayabí" },
- { "kza", "Western Karaboro" },
- { "kzb", "Kaibobo" },
- { "kzc", "Bondoukou Kulango" },
- { "kzd", "Kadai" },
- { "kze", "Kosena" },
- { "kzf", "Da'a Kaili" },
- { "kzg", "Kikai" },
- { "kzi", "Kelabit" },
- { "kzj", "Coastal Kadazan" },
- { "kzk", "Kazukuru" },
- { "kzl", "Kayeli" },
- { "kzm", "Kais" },
- { "kzn", "Kokola" },
- { "kzo", "Kaningi" },
- { "kzp", "Kaidipang" },
- { "kzq", "Kaike" },
- { "kzr", "Karang" },
- { "kzs", "Sugut Dusun" },
- { "kzt", "Tambunan Dusun" },
- { "kzu", "Kayupulau" },
- { "kzv", "Komyandaret" },
- { "kzw", "Karirí-Xocó" },
- { "kzx", "Kamarian" },
- { "kzy", "Kango (Tshopo District)" },
- { "kzz", "Kalabra" },
- { "laa", "Southern Subanen" },
- { "lab", "Linear A" },
- { "lac", "Lacandon" },
- { "lad", "Ladino" },
- { "lae", "Pattani" },
- { "laf", "Lafofa" },
- { "lag", "Langi" },
- { "lah", "Lahnda" },
- { "lai", "Lambya" },
- { "laj", "Lango (Uganda)" },
- { "lak", "Laka (Nigeria)" },
- { "lal", "Lalia" },
- { "lam", "Lamba" },
- { "lan", "Laru" },
- { "lao", "Lao" },
- { "lap", "Laka (Chad)" },
- { "laq", "Qabiao" },
- { "lar", "Larteh" },
- { "las", "Lama (Togo)" },
- { "lat", "Latin" },
- { "lau", "Laba" },
- { "lav", "Latvian" },
- { "law", "Lauje" },
- { "lax", "Tiwa" },
- { "lay", "Lama (Myanmar)" },
- { "laz", "Aribwatsa" },
- { "lba", "Lui" },
- { "lbb", "Label" },
- { "lbc", "Lakkia" },
- { "lbe", "Lak" },
- { "lbf", "Tinani" },
- { "lbg", "Laopang" },
- { "lbi", "La'bi" },
- { "lbj", "Ladakhi" },
- { "lbk", "Central Bontok" },
- { "lbl", "Libon Bikol" },
- { "lbm", "Lodhi" },
- { "lbn", "Lamet" },
- { "lbo", "Laven" },
- { "lbq", "Wampar" },
- { "lbr", "Lohorung" },
- { "lbs", "Libyan Sign Language" },
- { "lbt", "Lachi" },
- { "lbu", "Labu" },
- { "lbv", "Lavatbura-Lamusong" },
- { "lbw", "Tolaki" },
- { "lbx", "Lawangan" },
- { "lby", "Lamu-Lamu" },
- { "lbz", "Lardil" },
- { "lcc", "Legenyem" },
- { "lcd", "Lola" },
- { "lce", "Loncong" },
- { "lcf", "Lubu" },
- { "lch", "Luchazi" },
- { "lcl", "Lisela" },
- { "lcm", "Tungag" },
- { "lcp", "Western Lawa" },
- { "lcq", "Luhu" },
- { "lcs", "Lisabata-Nuniali" },
- { "lda", "Kla-Dan" },
- { "ldb", "Dũya" },
- { "ldd", "Luri" },
- { "ldg", "Lenyima" },
- { "ldh", "Lamja-Dengsa-Tola" },
- { "ldi", "Laari" },
- { "ldj", "Lemoro" },
- { "ldk", "Leelau" },
- { "ldl", "Kaan" },
- { "ldm", "Landoma" },
- { "ldn", "Láadan" },
- { "ldo", "Loo" },
- { "ldp", "Tso" },
- { "ldq", "Lufu" },
- { "lea", "Lega-Shabunda" },
- { "leb", "Lala-Bisa" },
- { "lec", "Leco" },
- { "led", "Lendu" },
- { "lee", "Lyélé" },
- { "lef", "Lelemi" },
- { "leg", "Lengua" },
- { "leh", "Lenje" },
- { "lei", "Lemio" },
- { "lej", "Lengola" },
- { "lek", "Leipon" },
- { "lel", "Lele (Democratic Republic of Congo)" },
- { "lem", "Nomaande" },
- { "len", "Lenca" },
- { "leo", "Leti (Cameroon)" },
- { "lep", "Lepcha" },
- { "leq", "Lembena" },
- { "ler", "Lenkau" },
- { "les", "Lese" },
- { "let", "Lesing-Gelimi" },
- { "leu", "Kara (Papua New Guinea)" },
- { "lev", "Lamma" },
- { "lew", "Ledo Kaili" },
- { "lex", "Luang" },
- { "ley", "Lemolang" },
- { "lez", "Lezghian" },
- { "lfa", "Lefa" },
- { "lfn", "Lingua Franca Nova" },
- { "lga", "Lungga" },
- { "lgb", "Laghu" },
- { "lgg", "Lugbara" },
- { "lgh", "Laghuu" },
- { "lgi", "Lengilu" },
- { "lgk", "Lingarak" },
- { "lgl", "Wala" },
- { "lgm", "Lega-Mwenga" },
- { "lgn", "Opuuo" },
- { "lgq", "Logba" },
- { "lgr", "Lengo" },
- { "lgt", "Pahi" },
- { "lgu", "Longgu" },
- { "lgz", "Ligenza" },
- { "lha", "Laha (Viet Nam)" },
- { "lhh", "Laha (Indonesia)" },
- { "lhi", "Lahu Shi" },
- { "lhl", "Lahul Lohar" },
- { "lhm", "Lhomi" },
- { "lhn", "Lahanan" },
- { "lhp", "Lhokpu" },
- { "lhs", "Mlahsö" },
- { "lht", "Lo-Toga" },
- { "lhu", "Lahu" },
- { "lia", "West-Central Limba" },
- { "lib", "Likum" },
- { "lic", "Hlai" },
- { "lid", "Nyindrou" },
- { "lie", "Likila" },
- { "lif", "Limbu" },
- { "lig", "Ligbi" },
- { "lih", "Lihir" },
- { "lii", "Lingkhim" },
- { "lij", "Ligurian" },
- { "lik", "Lika" },
- { "lil", "Lillooet" },
- { "lim", "Limburgan" },
- { "lin", "Lingala" },
- { "lio", "Liki" },
- { "lip", "Sekpele" },
- { "liq", "Libido" },
- { "lir", "Liberian English" },
- { "lis", "Lisu" },
- { "lit", "Lithuanian" },
- { "liu", "Logorik" },
- { "liv", "Liv" },
- { "liw", "Col" },
- { "lix", "Liabuku" },
- { "liy", "Banda-Bambari" },
- { "liz", "Libinza" },
- { "lja", "Golpa" },
- { "lje", "Rampi" },
- { "lji", "Laiyolo" },
- { "ljl", "Li'o" },
- { "ljp", "Lampung Api" },
- { "ljw", "Yirandali" },
- { "ljx", "Yuru" },
- { "lka", "Lakalei" },
- { "lkb", "Kabras" },
- { "lkc", "Kucong" },
- { "lkd", "Lakondê" },
- { "lke", "Kenyi" },
- { "lkh", "Lakha" },
- { "lki", "Laki" },
- { "lkj", "Remun" },
- { "lkl", "Laeko-Libuat" },
- { "lkm", "Kalaamaya" },
- { "lkn", "Lakon" },
- { "lko", "Khayo" },
- { "lkr", "Päri" },
- { "lks", "Kisa" },
- { "lkt", "Lakota" },
- { "lku", "Kungkari" },
- { "lky", "Lokoya" },
- { "lla", "Lala-Roba" },
- { "llb", "Lolo" },
- { "llc", "Lele (Guinea)" },
- { "lld", "Ladin" },
- { "lle", "Lele (Papua New Guinea)" },
- { "llf", "Hermit" },
- { "llg", "Lole" },
- { "llh", "Lamu" },
- { "lli", "Teke-Laali" },
- { "llj", "Ladji Ladji" },
- { "llk", "Lelak" },
- { "lll", "Lilau" },
- { "llm", "Lasalimu" },
- { "lln", "Lele (Chad)" },
- { "llo", "Khlor" },
- { "llp", "North Efate" },
- { "llq", "Lolak" },
- { "lls", "Lithuanian Sign Language" },
- { "llu", "Lau" },
- { "llx", "Lauan" },
- { "lma", "East Limba" },
- { "lmb", "Merei" },
- { "lmc", "Limilngan" },
- { "lmd", "Lumun" },
- { "lme", "Pévé" },
- { "lmf", "South Lembata" },
- { "lmg", "Lamogai" },
- { "lmh", "Lambichhong" },
- { "lmi", "Lombi" },
- { "lmj", "West Lembata" },
- { "lmk", "Lamkang" },
- { "lml", "Hano" },
- { "lmm", "Lamam" },
- { "lmn", "Lambadi" },
- { "lmo", "Lombard" },
- { "lmp", "Limbum" },
- { "lmq", "Lamatuka" },
- { "lmr", "Lamalera" },
- { "lmu", "Lamenu" },
- { "lmv", "Lomaiviti" },
- { "lmw", "Lake Miwok" },
- { "lmx", "Laimbue" },
- { "lmy", "Lamboya" },
- { "lmz", "Lumbee" },
- { "lna", "Langbashe" },
- { "lnb", "Mbalanhu" },
- { "lnd", "Lundayeh" },
- { "lng", "Langobardic" },
- { "lnh", "Lanoh" },
- { "lni", "Daantanai'" },
- { "lnj", "Leningitij" },
- { "lnl", "South Central Banda" },
- { "lnm", "Langam" },
- { "lnn", "Lorediakarkar" },
- { "lno", "Lango (Sudan)" },
- { "lns", "Lamnso'" },
- { "lnu", "Longuda" },
- { "lnw", "Lanima" },
- { "lnz", "Lonzo" },
- { "loa", "Loloda" },
- { "lob", "Lobi" },
- { "loc", "Inonhan" },
- { "loe", "Saluan" },
- { "lof", "Logol" },
- { "log", "Logo" },
- { "loh", "Narim" },
- { "loi", "Loma (Côte d'Ivoire)" },
- { "loj", "Lou" },
- { "lok", "Loko" },
- { "lol", "Mongo" },
- { "lom", "Loma (Liberia)" },
- { "lon", "Malawi Lomwe" },
- { "loo", "Lombo" },
- { "lop", "Lopa" },
- { "loq", "Lobala" },
- { "lor", "Téén" },
- { "los", "Loniu" },
- { "lot", "Otuho" },
- { "lou", "Louisiana Creole French" },
- { "lov", "Lopi" },
- { "low", "Tampias Lobu" },
- { "lox", "Loun" },
- { "loy", "Loke" },
- { "loz", "Lozi" },
- { "lpa", "Lelepa" },
- { "lpe", "Lepki" },
- { "lpn", "Long Phuri Naga" },
- { "lpo", "Lipo" },
- { "lpx", "Lopit" },
- { "lra", "Rara Bakati'" },
- { "lrc", "Northern Luri" },
- { "lre", "Laurentian" },
- { "lrg", "Laragia" },
- { "lri", "Marachi" },
- { "lrk", "Loarki" },
- { "lrl", "Lari" },
- { "lrm", "Marama" },
- { "lrn", "Lorang" },
- { "lro", "Laro" },
- { "lrr", "Southern Yamphu" },
- { "lrt", "Larantuka Malay" },
- { "lrv", "Larevat" },
- { "lrz", "Lemerig" },
- { "lsa", "Lasgerdi" },
- { "lsd", "Lishana Deni" },
- { "lse", "Lusengo" },
- { "lsg", "Lyons Sign Language" },
- { "lsh", "Lish" },
- { "lsi", "Lashi" },
- { "lsl", "Latvian Sign Language" },
- { "lsm", "Saamia" },
- { "lso", "Laos Sign Language" },
- { "lsp", "Panamanian Sign Language" },
- { "lsr", "Aruop" },
- { "lss", "Lasi" },
- { "lst", "Trinidad and Tobago Sign Language" },
- { "lsy", "Mauritian Sign Language" },
- { "ltc", "Late Middle Chinese" },
- { "ltg", "Latgalian" },
- { "lti", "Leti (Indonesia)" },
- { "ltn", "Latundê" },
- { "lto", "Tsotso" },
- { "lts", "Tachoni" },
- { "ltu", "Latu" },
- { "ltz", "Luxembourgish" },
- { "lua", "Luba-Lulua" },
- { "lub", "Luba-Katanga" },
- { "luc", "Aringa" },
- { "lud", "Ludian" },
- { "lue", "Luvale" },
- { "luf", "Laua" },
- { "lug", "Ganda" },
- { "lui", "Luiseno" },
- { "luj", "Luna" },
- { "luk", "Lunanakha" },
- { "lul", "Olu'bo" },
- { "lum", "Luimbi" },
- { "lun", "Lunda" },
- { "luo", "Luo (Kenya and Tanzania)" },
- { "lup", "Lumbu" },
- { "luq", "Lucumi" },
- { "lur", "Laura" },
- { "lus", "Lushai" },
- { "lut", "Lushootseed" },
- { "luu", "Lumba-Yakkha" },
- { "luv", "Luwati" },
- { "luw", "Luo (Cameroon)" },
- { "luy", "Luyia" },
- { "luz", "Southern Luri" },
- { "lva", "Maku'a" },
- { "lvk", "Lavukaleve" },
- { "lvs", "Standard Latvian" },
- { "lvu", "Levuka" },
- { "lwa", "Lwalu" },
- { "lwe", "Lewo Eleng" },
- { "lwg", "Wanga" },
- { "lwh", "White Lachi" },
- { "lwl", "Eastern Lawa" },
- { "lwm", "Laomian" },
- { "lwo", "Luwo" },
- { "lwt", "Lewotobi" },
- { "lwu", "Lawu" },
- { "lww", "Lewo" },
- { "lya", "Layakha" },
- { "lyg", "Lyngngam" },
- { "lyn", "Luyana" },
- { "lzh", "Literary Chinese" },
- { "lzl", "Litzlitz" },
- { "lzn", "Leinong Naga" },
- { "lzz", "Laz" },
- { "maa", "San Jerónimo Tecóatl Mazatec" },
- { "mab", "Yutanduchi Mixtec" },
- { "mad", "Madurese" },
- { "mae", "Bo-Rukul" },
- { "maf", "Mafa" },
- { "mag", "Magahi" },
- { "mah", "Marshallese" },
- { "mai", "Maithili" },
- { "maj", "Jalapa De Díaz Mazatec" },
- { "mak", "Makasar" },
- { "mal", "Malayalam" },
- { "mam", "Mam" },
- { "man", "Mandingo" },
- { "maq", "Chiquihuitlán Mazatec" },
- { "mar", "Marathi" },
- { "mas", "Masai" },
- { "mat", "San Francisco Matlatzinca" },
- { "mau", "Huautla Mazatec" },
- { "mav", "Sateré-Mawé" },
- { "maw", "Mampruli" },
- { "max", "North Moluccan Malay" },
- { "maz", "Central Mazahua" },
- { "mba", "Higaonon" },
- { "mbb", "Western Bukidnon Manobo" },
- { "mbc", "Macushi" },
- { "mbd", "Dibabawon Manobo" },
- { "mbe", "Molale" },
- { "mbf", "Baba Malay" },
- { "mbh", "Mangseng" },
- { "mbi", "Ilianen Manobo" },
- { "mbj", "Nadëb" },
- { "mbk", "Malol" },
- { "mbl", "Maxakalí" },
- { "mbm", "Ombamba" },
- { "mbn", "Macaguán" },
- { "mbo", "Mbo (Cameroon)" },
- { "mbp", "Malayo" },
- { "mbq", "Maisin" },
- { "mbr", "Nukak Makú" },
- { "mbs", "Sarangani Manobo" },
- { "mbt", "Matigsalug Manobo" },
- { "mbu", "Mbula-Bwazza" },
- { "mbv", "Mbulungish" },
- { "mbw", "Maring" },
- { "mbx", "Mari (East Sepik Province)" },
- { "mby", "Memoni" },
- { "mbz", "Amoltepec Mixtec" },
- { "mca", "Maca" },
- { "mcb", "Machiguenga" },
- { "mcc", "Bitur" },
- { "mcd", "Sharanahua" },
- { "mce", "Itundujia Mixtec" },
- { "mcf", "Matsés" },
- { "mcg", "Mapoyo" },
- { "mch", "Maquiritari" },
- { "mci", "Mese" },
- { "mcj", "Mvanip" },
- { "mck", "Mbunda" },
- { "mcl", "Macaguaje" },
- { "mcm", "Malaccan Creole Portuguese" },
- { "mcn", "Masana" },
- { "mco", "Coatlán Mixe" },
- { "mcp", "Makaa" },
- { "mcq", "Ese" },
- { "mcr", "Menya" },
- { "mcs", "Mambai" },
- { "mct", "Mengisa" },
- { "mcu", "Cameroon Mambila" },
- { "mcv", "Minanibai" },
- { "mcw", "Mawa (Chad)" },
- { "mcx", "Mpiemo" },
- { "mcy", "South Watut" },
- { "mcz", "Mawan" },
- { "mda", "Mada (Nigeria)" },
- { "mdb", "Morigi" },
- { "mdc", "Male (Papua New Guinea)" },
- { "mdd", "Mbum" },
- { "mde", "Maba (Chad)" },
- { "mdf", "Moksha" },
- { "mdg", "Massalat" },
- { "mdh", "Maguindanaon" },
- { "mdi", "Mamvu" },
- { "mdj", "Mangbetu" },
- { "mdk", "Mangbutu" },
- { "mdl", "Maltese Sign Language" },
- { "mdm", "Mayogo" },
- { "mdn", "Mbati" },
- { "mdp", "Mbala" },
- { "mdq", "Mbole" },
- { "mdr", "Mandar" },
- { "mds", "Maria (Papua New Guinea)" },
- { "mdt", "Mbere" },
- { "mdu", "Mboko" },
- { "mdv", "Santa Lucía Monteverde Mixtec" },
- { "mdw", "Mbosi" },
- { "mdx", "Dizin" },
- { "mdy", "Male (Ethiopia)" },
- { "mdz", "Suruí Do Pará" },
- { "mea", "Menka" },
- { "meb", "Ikobi" },
- { "mec", "Mara" },
- { "med", "Melpa" },
- { "mee", "Mengen" },
- { "mef", "Megam" },
- { "meh", "Southwestern Tlaxiaco Mixtec" },
- { "mei", "Midob" },
- { "mej", "Meyah" },
- { "mek", "Mekeo" },
- { "mel", "Central Melanau" },
- { "mem", "Mangala" },
- { "men", "Mende (Sierra Leone)" },
- { "meo", "Kedah Malay" },
- { "mep", "Miriwung" },
- { "meq", "Merey" },
- { "mer", "Meru" },
- { "mes", "Masmaje" },
- { "met", "Mato" },
- { "meu", "Motu" },
- { "mev", "Mano" },
- { "mew", "Maaka" },
- { "mey", "Hassaniyya" },
- { "mez", "Menominee" },
- { "mfa", "Pattani Malay" },
- { "mfb", "Bangka" },
- { "mfc", "Mba" },
- { "mfd", "Mendankwe-Nkwen" },
- { "mfe", "Morisyen" },
- { "mff", "Naki" },
- { "mfg", "Mogofin" },
- { "mfh", "Matal" },
- { "mfi", "Wandala" },
- { "mfj", "Mefele" },
- { "mfk", "North Mofu" },
- { "mfl", "Putai" },
- { "mfm", "Marghi South" },
- { "mfn", "Cross River Mbembe" },
- { "mfo", "Mbe" },
- { "mfp", "Makassar Malay" },
- { "mfq", "Moba" },
- { "mfr", "Marithiel" },
- { "mfs", "Mexican Sign Language" },
- { "mft", "Mokerang" },
- { "mfu", "Mbwela" },
- { "mfv", "Mandjak" },
- { "mfw", "Mulaha" },
- { "mfx", "Melo" },
- { "mfy", "Mayo" },
- { "mfz", "Mabaan" },
- { "mga", "Middle Irish (900-1200)" },
- { "mgb", "Mararit" },
- { "mgc", "Morokodo" },
- { "mgd", "Moru" },
- { "mge", "Mango" },
- { "mgf", "Maklew" },
- { "mgg", "Mpumpong" },
- { "mgh", "Makhuwa-Meetto" },
- { "mgi", "Lijili" },
- { "mgj", "Abureni" },
- { "mgk", "Mawes" },
- { "mgl", "Maleu-Kilenge" },
- { "mgm", "Mambae" },
- { "mgn", "Mbangi" },
- { "mgo", "Meta'" },
- { "mgp", "Eastern Magar" },
- { "mgq", "Malila" },
- { "mgr", "Mambwe-Lungu" },
- { "mgs", "Manda (Tanzania)" },
- { "mgt", "Mongol" },
- { "mgu", "Mailu" },
- { "mgv", "Matengo" },
- { "mgw", "Matumbi" },
- { "mgy", "Mbunga" },
- { "mgz", "Mbugwe" },
- { "mha", "Manda (India)" },
- { "mhb", "Mahongwe" },
- { "mhc", "Mocho" },
- { "mhd", "Mbugu" },
- { "mhe", "Besisi" },
- { "mhf", "Mamaa" },
- { "mhg", "Margu" },
- { "mhh", "Maskoy Pidgin" },
- { "mhi", "Ma'di" },
- { "mhj", "Mogholi" },
- { "mhk", "Mungaka" },
- { "mhl", "Mauwake" },
- { "mhm", "Makhuwa-Moniga" },
- { "mhn", "Mócheno" },
- { "mho", "Mashi (Zambia)" },
- { "mhp", "Balinese Malay" },
- { "mhq", "Mandan" },
- { "mhr", "Eastern Mari" },
- { "mhs", "Buru (Indonesia)" },
- { "mht", "Mandahuaca" },
- { "mhu", "Digaro-Mishmi" },
- { "mhw", "Mbukushu" },
- { "mhx", "Maru" },
- { "mhy", "Ma'anyan" },
- { "mhz", "Mor (Mor Islands)" },
- { "mia", "Miami" },
- { "mib", "Atatláhuca Mixtec" },
- { "mic", "Mi'kmaq" },
- { "mid", "Mandaic" },
- { "mie", "Ocotepec Mixtec" },
- { "mif", "Mofu-Gudur" },
- { "mig", "San Miguel El Grande Mixtec" },
- { "mih", "Chayuco Mixtec" },
- { "mii", "Chigmecatitlán Mixtec" },
- { "mij", "Abar" },
- { "mik", "Mikasuki" },
- { "mil", "Peñoles Mixtec" },
- { "mim", "Alacatlatzala Mixtec" },
- { "min", "Minangkabau" },
- { "mio", "Pinotepa Nacional Mixtec" },
- { "mip", "Apasco-Apoala Mixtec" },
- { "miq", "Mískito" },
- { "mir", "Isthmus Mixe" },
- { "mis", "Uncoded languages" },
- { "mit", "Southern Puebla Mixtec" },
- { "miu", "Cacaloxtepec Mixtec" },
- { "miw", "Akoye" },
- { "mix", "Mixtepec Mixtec" },
- { "miy", "Ayutla Mixtec" },
- { "miz", "Coatzospan Mixtec" },
- { "mjc", "San Juan Colorado Mixtec" },
- { "mjd", "Northwest Maidu" },
- { "mje", "Muskum" },
- { "mjg", "Tu" },
- { "mjh", "Mwera (Nyasa)" },
- { "mji", "Kim Mun" },
- { "mjj", "Mawak" },
- { "mjk", "Matukar" },
- { "mjl", "Mandeali" },
- { "mjm", "Medebur" },
- { "mjn", "Ma (Papua New Guinea)" },
- { "mjo", "Malankuravan" },
- { "mjp", "Malapandaram" },
- { "mjq", "Malaryan" },
- { "mjr", "Malavedan" },
- { "mjs", "Miship" },
- { "mjt", "Sauria Paharia" },
- { "mju", "Manna-Dora" },
- { "mjv", "Mannan" },
- { "mjw", "Karbi" },
- { "mjx", "Mahali" },
- { "mjy", "Mahican" },
- { "mjz", "Majhi" },
- { "mka", "Mbre" },
- { "mkb", "Mal Paharia" },
- { "mkc", "Siliput" },
- { "mkd", "Macedonian" },
- { "mke", "Mawchi" },
- { "mkf", "Miya" },
- { "mkg", "Mak (China)" },
- { "mki", "Dhatki" },
- { "mkj", "Mokilese" },
- { "mkk", "Byep" },
- { "mkl", "Mokole" },
- { "mkm", "Moklen" },
- { "mkn", "Kupang Malay" },
- { "mko", "Mingang Doso" },
- { "mkp", "Moikodi" },
- { "mkq", "Bay Miwok" },
- { "mkr", "Malas" },
- { "mks", "Silacayoapan Mixtec" },
- { "mkt", "Vamale" },
- { "mku", "Konyanka Maninka" },
- { "mkv", "Mafea" },
- { "mkw", "Kituba (Congo)" },
- { "mkx", "Kinamiging Manobo" },
- { "mky", "East Makian" },
- { "mkz", "Makasae" },
- { "mla", "Malo" },
- { "mlb", "Mbule" },
- { "mlc", "Cao Lan" },
- { "mle", "Manambu" },
- { "mlf", "Mal" },
- { "mlg", "Malagasy" },
- { "mlh", "Mape" },
- { "mli", "Malimpung" },
- { "mlj", "Miltu" },
- { "mlk", "Ilwana" },
- { "mll", "Malua Bay" },
- { "mlm", "Mulam" },
- { "mln", "Malango" },
- { "mlo", "Mlomp" },
- { "mlp", "Bargam" },
- { "mlq", "Western Maninkakan" },
- { "mlr", "Vame" },
- { "mls", "Masalit" },
- { "mlt", "Maltese" },
- { "mlu", "To'abaita" },
- { "mlv", "Motlav" },
- { "mlw", "Moloko" },
- { "mlx", "Malfaxal" },
- { "mlz", "Malaynon" },
- { "mma", "Mama" },
- { "mmb", "Momina" },
- { "mmc", "Michoacán Mazahua" },
- { "mmd", "Maonan" },
- { "mme", "Mae" },
- { "mmf", "Mundat" },
- { "mmg", "North Ambrym" },
- { "mmh", "Mehináku" },
- { "mmi", "Musar" },
- { "mmj", "Majhwar" },
- { "mmk", "Mukha-Dora" },
- { "mml", "Man Met" },
- { "mmm", "Maii" },
- { "mmn", "Mamanwa" },
- { "mmo", "Mangga Buang" },
- { "mmp", "Siawi" },
- { "mmq", "Musak" },
- { "mmr", "Western Xiangxi Miao" },
- { "mmt", "Malalamai" },
- { "mmu", "Mmaala" },
- { "mmv", "Miriti" },
- { "mmw", "Emae" },
- { "mmx", "Madak" },
- { "mmy", "Migaama" },
- { "mmz", "Mabaale" },
- { "mna", "Mbula" },
- { "mnb", "Muna" },
- { "mnc", "Manchu" },
- { "mnd", "Mondé" },
- { "mne", "Naba" },
- { "mnf", "Mundani" },
- { "mng", "Eastern Mnong" },
- { "mnh", "Mono (Democratic Republic of Congo)" },
- { "mni", "Manipuri" },
- { "mnj", "Munji" },
- { "mnk", "Mandinka" },
- { "mnl", "Tiale" },
- { "mnm", "Mapena" },
- { "mnn", "Southern Mnong" },
- { "mnp", "Min Bei Chinese" },
- { "mnq", "Minriq" },
- { "mnr", "Mono (USA)" },
- { "mns", "Mansi" },
- { "mnu", "Mer" },
- { "mnv", "Rennell-Bellona" },
- { "mnw", "Mon" },
- { "mnx", "Manikion" },
- { "mny", "Manyawa" },
- { "mnz", "Moni" },
- { "moa", "Mwan" },
- { "moc", "Mocoví" },
- { "mod", "Mobilian" },
- { "moe", "Montagnais" },
- { "mog", "Mongondow" },
- { "moh", "Mohawk" },
- { "moi", "Mboi" },
- { "moj", "Monzombo" },
- { "mok", "Morori" },
- { "mom", "Mangue" },
- { "mon", "Mongolian" },
- { "moo", "Monom" },
- { "mop", "Mopán Maya" },
- { "moq", "Mor (Bomberai Peninsula)" },
- { "mor", "Moro" },
- { "mos", "Mossi" },
- { "mot", "Barí" },
- { "mou", "Mogum" },
- { "mov", "Mohave" },
- { "mow", "Moi (Congo)" },
- { "mox", "Molima" },
- { "moy", "Shekkacho" },
- { "moz", "Mukulu" },
- { "mpa", "Mpoto" },
- { "mpb", "Mullukmulluk" },
- { "mpc", "Mangarayi" },
- { "mpd", "Machinere" },
- { "mpe", "Majang" },
- { "mpg", "Marba" },
- { "mph", "Maung" },
- { "mpi", "Mpade" },
- { "mpj", "Martu Wangka" },
- { "mpk", "Mbara (Chad)" },
- { "mpl", "Middle Watut" },
- { "mpm", "Yosondúa Mixtec" },
- { "mpn", "Mindiri" },
- { "mpo", "Miu" },
- { "mpp", "Migabac" },
- { "mpq", "Matís" },
- { "mpr", "Vangunu" },
- { "mps", "Dadibi" },
- { "mpt", "Mian" },
- { "mpu", "Makuráp" },
- { "mpv", "Mungkip" },
- { "mpw", "Mapidian" },
- { "mpx", "Misima-Panaeati" },
- { "mpy", "Mapia" },
- { "mpz", "Mpi" },
- { "mqa", "Maba (Indonesia)" },
- { "mqb", "Mbuko" },
- { "mqc", "Mangole" },
- { "mqe", "Matepi" },
- { "mqf", "Momuna" },
- { "mqg", "Kota Bangun Kutai Malay" },
- { "mqh", "Tlazoyaltepec Mixtec" },
- { "mqi", "Mariri" },
- { "mqj", "Mamasa" },
- { "mqk", "Rajah Kabunsuwan Manobo" },
- { "mql", "Mbelime" },
- { "mqm", "South Marquesan" },
- { "mqn", "Moronene" },
- { "mqo", "Modole" },
- { "mqp", "Manipa" },
- { "mqq", "Minokok" },
- { "mqr", "Mander" },
- { "mqs", "West Makian" },
- { "mqt", "Mok" },
- { "mqu", "Mandari" },
- { "mqv", "Mosimo" },
- { "mqw", "Murupi" },
- { "mqx", "Mamuju" },
- { "mqy", "Manggarai" },
- { "mqz", "Pano" },
- { "mra", "Mlabri" },
- { "mrb", "Marino" },
- { "mrc", "Maricopa" },
- { "mrd", "Western Magar" },
- { "mre", "Martha's Vineyard Sign Language" },
- { "mrf", "Elseng" },
- { "mrg", "Mising" },
- { "mrh", "Mara Chin" },
- { "mri", "Maori" },
- { "mrj", "Western Mari" },
- { "mrk", "Hmwaveke" },
- { "mrl", "Mortlockese" },
- { "mrm", "Merlav" },
- { "mrn", "Cheke Holo" },
- { "mro", "Mru" },
- { "mrp", "Morouas" },
- { "mrq", "North Marquesan" },
- { "mrr", "Maria (India)" },
- { "mrs", "Maragus" },
- { "mrt", "Marghi Central" },
- { "mru", "Mono (Cameroon)" },
- { "mrv", "Mangareva" },
- { "mrw", "Maranao" },
- { "mrx", "Maremgi" },
- { "mry", "Mandaya" },
- { "mrz", "Marind" },
- { "msa", "Malay (macrolanguage)" },
- { "msb", "Masbatenyo" },
- { "msc", "Sankaran Maninka" },
- { "msd", "Yucatec Maya Sign Language" },
- { "mse", "Musey" },
- { "msf", "Mekwei" },
- { "msg", "Moraid" },
- { "msh", "Masikoro Malagasy" },
- { "msi", "Sabah Malay" },
- { "msj", "Ma (Democratic Republic of Congo)" },
- { "msk", "Mansaka" },
- { "msl", "Molof" },
- { "msm", "Agusan Manobo" },
- { "msn", "Vurës" },
- { "mso", "Mombum" },
- { "msp", "Maritsauá" },
- { "msq", "Caac" },
- { "msr", "Mongolian Sign Language" },
- { "mss", "West Masela" },
- { "msu", "Musom" },
- { "msv", "Maslam" },
- { "msw", "Mansoanka" },
- { "msx", "Moresada" },
- { "msy", "Aruamu" },
- { "msz", "Momare" },
- { "mta", "Cotabato Manobo" },
- { "mtb", "Anyin Morofo" },
- { "mtc", "Munit" },
- { "mtd", "Mualang" },
- { "mte", "Mono (Solomon Islands)" },
- { "mtf", "Murik (Papua New Guinea)" },
- { "mtg", "Una" },
- { "mth", "Munggui" },
- { "mti", "Maiwa (Papua New Guinea)" },
- { "mtj", "Moskona" },
- { "mtk", "Mbe'" },
- { "mtl", "Montol" },
- { "mtm", "Mator" },
- { "mtn", "Matagalpa" },
- { "mto", "Totontepec Mixe" },
- { "mtp", "Wichí Lhamtés Nocten" },
- { "mtq", "Muong" },
- { "mtr", "Mewari" },
- { "mts", "Yora" },
- { "mtt", "Mota" },
- { "mtu", "Tututepec Mixtec" },
- { "mtv", "Asaro'o" },
- { "mtw", "Southern Binukidnon" },
- { "mtx", "Tidaá Mixtec" },
- { "mty", "Nabi" },
- { "mua", "Mundang" },
- { "mub", "Mubi" },
- { "muc", "Ajumbu" },
- { "mud", "Mednyj Aleut" },
- { "mue", "Media Lengua" },
- { "mug", "Musgu" },
- { "muh", "Mündü" },
- { "mui", "Musi" },
- { "muj", "Mabire" },
- { "muk", "Mugom" },
- { "mul", "Multiple languages" },
- { "mum", "Maiwala" },
- { "muo", "Nyong" },
- { "mup", "Malvi" },
- { "muq", "Eastern Xiangxi Miao" },
- { "mur", "Murle" },
- { "mus", "Creek" },
- { "mut", "Western Muria" },
- { "muu", "Yaaku" },
- { "muv", "Muthuvan" },
- { "mux", "Bo-Ung" },
- { "muy", "Muyang" },
- { "muz", "Mursi" },
- { "mva", "Manam" },
- { "mvb", "Mattole" },
- { "mvd", "Mamboru" },
- { "mve", "Marwari (Pakistan)" },
- { "mvf", "Peripheral Mongolian" },
- { "mvg", "Yucuañe Mixtec" },
- { "mvh", "Mulgi" },
- { "mvi", "Miyako" },
- { "mvk", "Mekmek" },
- { "mvl", "Mbara (Australia)" },
- { "mvm", "Muya" },
- { "mvn", "Minaveha" },
- { "mvo", "Marovo" },
- { "mvp", "Duri" },
- { "mvq", "Moere" },
- { "mvr", "Marau" },
- { "mvs", "Massep" },
- { "mvt", "Mpotovoro" },
- { "mvu", "Marfa" },
- { "mvv", "Tagal Murut" },
- { "mvw", "Machinga" },
- { "mvx", "Meoswar" },
- { "mvy", "Indus Kohistani" },
- { "mvz", "Mesqan" },
- { "mwa", "Mwatebu" },
- { "mwb", "Juwal" },
- { "mwc", "Are" },
- { "mwe", "Mwera (Chimwera)" },
- { "mwf", "Murrinh-Patha" },
- { "mwg", "Aiklep" },
- { "mwh", "Mouk-Aria" },
- { "mwi", "Labo" },
- { "mwj", "Maligo" },
- { "mwk", "Kita Maninkakan" },
- { "mwl", "Mirandese" },
- { "mwm", "Sar" },
- { "mwn", "Nyamwanga" },
- { "mwo", "Central Maewo" },
- { "mwp", "Kala Lagaw Ya" },
- { "mwq", "Mün Chin" },
- { "mwr", "Marwari" },
- { "mws", "Mwimbi-Muthambi" },
- { "mwt", "Moken" },
- { "mwu", "Mittu" },
- { "mwv", "Mentawai" },
- { "mww", "Hmong Daw" },
- { "mwx", "Mediak" },
- { "mwy", "Mosiro" },
- { "mwz", "Moingi" },
- { "mxa", "Northwest Oaxaca Mixtec" },
- { "mxb", "Tezoatlán Mixtec" },
- { "mxc", "Manyika" },
- { "mxd", "Modang" },
- { "mxe", "Mele-Fila" },
- { "mxf", "Malgbe" },
- { "mxg", "Mbangala" },
- { "mxh", "Mvuba" },
- { "mxi", "Mozarabic" },
- { "mxj", "Miju-Mishmi" },
- { "mxk", "Monumbo" },
- { "mxl", "Maxi Gbe" },
- { "mxm", "Meramera" },
- { "mxn", "Moi (Indonesia)" },
- { "mxo", "Mbowe" },
- { "mxp", "Tlahuitoltepec Mixe" },
- { "mxq", "Juquila Mixe" },
- { "mxr", "Murik (Malaysia)" },
- { "mxs", "Huitepec Mixtec" },
- { "mxt", "Jamiltepec Mixtec" },
- { "mxu", "Mada (Cameroon)" },
- { "mxv", "Metlatónoc Mixtec" },
- { "mxw", "Namo" },
- { "mxx", "Mahou" },
- { "mxy", "Southeastern Nochixtlán Mixtec" },
- { "mxz", "Central Masela" },
- { "mya", "Burmese" },
- { "myb", "Mbay" },
- { "myc", "Mayeka" },
- { "myd", "Maramba" },
- { "mye", "Myene" },
- { "myf", "Bambassi" },
- { "myg", "Manta" },
- { "myh", "Makah" },
- { "myi", "Mina (India)" },
- { "myj", "Mangayat" },
- { "myk", "Mamara Senoufo" },
- { "myl", "Moma" },
- { "mym", "Me'en" },
- { "myo", "Anfillo" },
- { "myp", "Pirahã" },
- { "myr", "Muniche" },
- { "mys", "Mesmes" },
- { "myu", "Mundurukú" },
- { "myv", "Erzya" },
- { "myw", "Muyuw" },
- { "myx", "Masaaba" },
- { "myy", "Macuna" },
- { "myz", "Classical Mandaic" },
- { "mza", "Santa María Zacatepec Mixtec" },
- { "mzb", "Tumzabt" },
- { "mzc", "Madagascar Sign Language" },
- { "mzd", "Malimba" },
- { "mze", "Morawa" },
- { "mzg", "Monastic Sign Language" },
- { "mzh", "Wichí Lhamtés Güisnay" },
- { "mzi", "Ixcatlán Mazatec" },
- { "mzj", "Manya" },
- { "mzk", "Nigeria Mambila" },
- { "mzl", "Mazatlán Mixe" },
- { "mzm", "Mumuye" },
- { "mzn", "Mazanderani" },
- { "mzo", "Matipuhy" },
- { "mzp", "Movima" },
- { "mzq", "Mori Atas" },
- { "mzr", "Marúbo" },
- { "mzs", "Macanese" },
- { "mzt", "Mintil" },
- { "mzu", "Inapang" },
- { "mzv", "Manza" },
- { "mzw", "Deg" },
- { "mzx", "Mawayana" },
- { "mzy", "Mozambican Sign Language" },
- { "mzz", "Maiadomu" },
- { "naa", "Namla" },
- { "nab", "Southern Nambikuára" },
- { "nac", "Narak" },
- { "nad", "Nijadali" },
- { "nae", "Naka'ela" },
- { "naf", "Nabak" },
- { "nag", "Naga Pidgin" },
- { "naj", "Nalu" },
- { "nak", "Nakanai" },
- { "nal", "Nalik" },
- { "nam", "Ngan'gityemerri" },
- { "nan", "Min Nan Chinese" },
- { "nao", "Naaba" },
- { "nap", "Neapolitan" },
- { "naq", "Nama (Namibia)" },
- { "nar", "Iguta" },
- { "nas", "Naasioi" },
- { "nat", "Hungworo" },
- { "nau", "Nauru" },
- { "nav", "Navajo" },
- { "naw", "Nawuri" },
- { "nax", "Nakwi" },
- { "nay", "Narrinyeri" },
- { "naz", "Coatepec Nahuatl" },
- { "nba", "Nyemba" },
- { "nbb", "Ndoe" },
- { "nbc", "Chang Naga" },
- { "nbd", "Ngbinda" },
- { "nbe", "Konyak Naga" },
- { "nbg", "Nagarchal" },
- { "nbh", "Ngamo" },
- { "nbi", "Mao Naga" },
- { "nbj", "Ngarinman" },
- { "nbk", "Nake" },
- { "nbl", "South Ndebele" },
- { "nbm", "Ngbaka Ma'bo" },
- { "nbn", "Kuri" },
- { "nbo", "Nkukoli" },
- { "nbp", "Nnam" },
- { "nbq", "Nggem" },
- { "nbr", "Numana-Nunku-Gbantu-Numbu" },
- { "nbs", "Namibian Sign Language" },
- { "nbt", "Na" },
- { "nbu", "Rongmei Naga" },
- { "nbv", "Ngamambo" },
- { "nbw", "Southern Ngbandi" },
- { "nby", "Ningera" },
- { "nca", "Iyo" },
- { "ncb", "Central Nicobarese" },
- { "ncc", "Ponam" },
- { "ncd", "Nachering" },
- { "nce", "Yale" },
- { "ncf", "Notsi" },
- { "ncg", "Nisga'a" },
- { "nch", "Central Huasteca Nahuatl" },
- { "nci", "Classical Nahuatl" },
- { "ncj", "Northern Puebla Nahuatl" },
- { "nck", "Nakara" },
- { "ncl", "Michoacán Nahuatl" },
- { "ncm", "Nambo" },
- { "ncn", "Nauna" },
- { "nco", "Sibe" },
- { "ncp", "Ndaktup" },
- { "ncr", "Ncane" },
- { "ncs", "Nicaraguan Sign Language" },
- { "nct", "Chothe Naga" },
- { "ncu", "Chumburung" },
- { "ncx", "Central Puebla Nahuatl" },
- { "ncz", "Natchez" },
- { "nda", "Ndasa" },
- { "ndb", "Kenswei Nsei" },
- { "ndc", "Ndau" },
- { "ndd", "Nde-Nsele-Nta" },
- { "nde", "North Ndebele" },
- { "ndf", "Nadruvian" },
- { "ndg", "Ndengereko" },
- { "ndh", "Ndali" },
- { "ndi", "Samba Leko" },
- { "ndj", "Ndamba" },
- { "ndk", "Ndaka" },
- { "ndl", "Ndolo" },
- { "ndm", "Ndam" },
- { "ndn", "Ngundi" },
- { "ndo", "Ndonga" },
- { "ndp", "Ndo" },
- { "ndq", "Ndombe" },
- { "ndr", "Ndoola" },
- { "nds", "Low German" },
- { "ndt", "Ndunga" },
- { "ndu", "Dugun" },
- { "ndv", "Ndut" },
- { "ndw", "Ndobo" },
- { "ndx", "Nduga" },
- { "ndy", "Lutos" },
- { "ndz", "Ndogo" },
- { "nea", "Eastern Ngad'a" },
- { "neb", "Toura (Côte d'Ivoire)" },
- { "nec", "Nedebang" },
- { "ned", "Nde-Gbite" },
- { "nee", "Nêlêmwa-Nixumwak" },
- { "nef", "Nefamese" },
- { "neg", "Negidal" },
- { "neh", "Nyenkha" },
- { "nei", "Neo-Hittite" },
- { "nej", "Neko" },
- { "nek", "Neku" },
- { "nem", "Nemi" },
- { "nen", "Nengone" },
- { "neo", "Ná-Meo" },
- { "nep", "Nepali (macrolanguage)" },
- { "neq", "North Central Mixe" },
- { "ner", "Yahadian" },
- { "nes", "Bhoti Kinnauri" },
- { "net", "Nete" },
- { "neu", "Neo" },
- { "nev", "Nyaheun" },
- { "new", "Newari" },
- { "nex", "Neme" },
- { "ney", "Neyo" },
- { "nez", "Nez Perce" },
- { "nfa", "Dhao" },
- { "nfd", "Ahwai" },
- { "nfl", "Ayiwo" },
- { "nfr", "Nafaanra" },
- { "nfu", "Mfumte" },
- { "nga", "Ngbaka" },
- { "ngb", "Northern Ngbandi" },
- { "ngc", "Ngombe (Democratic Republic of Congo)" },
- { "ngd", "Ngando (Central African Republic)" },
- { "nge", "Ngemba" },
- { "ngg", "Ngbaka Manza" },
- { "ngh", "Nu" },
- { "ngi", "Ngizim" },
- { "ngj", "Ngie" },
- { "ngk", "Dalabon" },
- { "ngl", "Lomwe" },
- { "ngm", "Ngatik Men's Creole" },
- { "ngn", "Ngwo" },
- { "ngo", "Ngoni" },
- { "ngp", "Ngulu" },
- { "ngq", "Ngurimi" },
- { "ngr", "Engdewu" },
- { "ngs", "Gvoko" },
- { "ngt", "Ngeq" },
- { "ngu", "Guerrero Nahuatl" },
- { "ngv", "Nagumi" },
- { "ngw", "Ngwaba" },
- { "ngx", "Nggwahyi" },
- { "ngy", "Tibea" },
- { "ngz", "Ngungwel" },
- { "nha", "Nhanda" },
- { "nhb", "Beng" },
- { "nhc", "Tabasco Nahuatl" },
- { "nhd", "Chiripá" },
- { "nhe", "Eastern Huasteca Nahuatl" },
- { "nhf", "Nhuwala" },
- { "nhg", "Tetelcingo Nahuatl" },
- { "nhh", "Nahari" },
- { "nhi", "Zacatlán-Ahuacatlán-Tepetzintla Nahuatl" },
- { "nhk", "Isthmus-Cosoleacaque Nahuatl" },
- { "nhm", "Morelos Nahuatl" },
- { "nhn", "Central Nahuatl" },
- { "nho", "Takuu" },
- { "nhp", "Isthmus-Pajapan Nahuatl" },
- { "nhq", "Huaxcaleca Nahuatl" },
- { "nhr", "Naro" },
- { "nht", "Ometepec Nahuatl" },
- { "nhu", "Noone" },
- { "nhv", "Temascaltepec Nahuatl" },
- { "nhw", "Western Huasteca Nahuatl" },
- { "nhx", "Isthmus-Mecayapan Nahuatl" },
- { "nhy", "Northern Oaxaca Nahuatl" },
- { "nhz", "Santa María La Alta Nahuatl" },
- { "nia", "Nias" },
- { "nib", "Nakame" },
- { "nid", "Ngandi" },
- { "nie", "Niellim" },
- { "nif", "Nek" },
- { "nig", "Ngalakan" },
- { "nih", "Nyiha (Tanzania)" },
- { "nii", "Nii" },
- { "nij", "Ngaju" },
- { "nik", "Southern Nicobarese" },
- { "nil", "Nila" },
- { "nim", "Nilamba" },
- { "nin", "Ninzo" },
- { "nio", "Nganasan" },
- { "niq", "Nandi" },
- { "nir", "Nimboran" },
- { "nis", "Nimi" },
- { "nit", "Southeastern Kolami" },
- { "niu", "Niuean" },
- { "niv", "Gilyak" },
- { "niw", "Nimo" },
- { "nix", "Hema" },
- { "niy", "Ngiti" },
- { "niz", "Ningil" },
- { "nja", "Nzanyi" },
- { "njb", "Nocte Naga" },
- { "njd", "Ndonde Hamba" },
- { "njh", "Lotha Naga" },
- { "nji", "Gudanji" },
- { "njj", "Njen" },
- { "njl", "Njalgulgule" },
- { "njm", "Angami Naga" },
- { "njn", "Liangmai Naga" },
- { "njo", "Ao Naga" },
- { "njr", "Njerep" },
- { "njs", "Nisa" },
- { "njt", "Ndyuka-Trio Pidgin" },
- { "nju", "Ngadjunmaya" },
- { "njx", "Kunyi" },
- { "njy", "Njyem" },
- { "njz", "Nyishi" },
- { "nka", "Nkoya" },
- { "nkb", "Khoibu Naga" },
- { "nkc", "Nkongho" },
- { "nkd", "Koireng" },
- { "nke", "Duke" },
- { "nkf", "Inpui Naga" },
- { "nkg", "Nekgini" },
- { "nkh", "Khezha Naga" },
- { "nki", "Thangal Naga" },
- { "nkj", "Nakai" },
- { "nkk", "Nokuku" },
- { "nkm", "Namat" },
- { "nkn", "Nkangala" },
- { "nko", "Nkonya" },
- { "nkp", "Niuatoputapu" },
- { "nkq", "Nkami" },
- { "nkr", "Nukuoro" },
- { "nks", "North Asmat" },
- { "nkt", "Nyika (Tanzania)" },
- { "nku", "Bouna Kulango" },
- { "nkv", "Nyika (Malawi and Zambia)" },
- { "nkw", "Nkutu" },
- { "nkx", "Nkoroo" },
- { "nkz", "Nkari" },
- { "nla", "Ngombale" },
- { "nlc", "Nalca" },
- { "nld", "Dutch" },
- { "nle", "East Nyala" },
- { "nlg", "Gela" },
- { "nli", "Grangali" },
- { "nlj", "Nyali" },
- { "nlk", "Ninia Yali" },
- { "nll", "Nihali" },
- { "nlo", "Ngul" },
- { "nlq", "Lao Naga" },
- { "nlu", "Nchumbulu" },
- { "nlv", "Orizaba Nahuatl" },
- { "nlw", "Walangama" },
- { "nlx", "Nahali" },
- { "nly", "Nyamal" },
- { "nlz", "Nalögo" },
- { "nma", "Maram Naga" },
- { "nmb", "Big Nambas" },
- { "nmc", "Ngam" },
- { "nmd", "Ndumu" },
- { "nme", "Mzieme Naga" },
- { "nmf", "Tangkhul Naga (India)" },
- { "nmg", "Kwasio" },
- { "nmh", "Monsang Naga" },
- { "nmi", "Nyam" },
- { "nmj", "Ngombe (Central African Republic)" },
- { "nmk", "Namakura" },
- { "nml", "Ndemli" },
- { "nmm", "Manangba" },
- { "nmn", "!Xóõ" },
- { "nmo", "Moyon Naga" },
- { "nmp", "Nimanbur" },
- { "nmq", "Nambya" },
- { "nmr", "Nimbari" },
- { "nms", "Letemboi" },
- { "nmt", "Namonuito" },
- { "nmu", "Northeast Maidu" },
- { "nmv", "Ngamini" },
- { "nmw", "Nimoa" },
- { "nmx", "Nama (Papua New Guinea)" },
- { "nmy", "Namuyi" },
- { "nmz", "Nawdm" },
- { "nna", "Nyangumarta" },
- { "nnb", "Nande" },
- { "nnc", "Nancere" },
- { "nnd", "West Ambae" },
- { "nne", "Ngandyera" },
- { "nnf", "Ngaing" },
- { "nng", "Maring Naga" },
- { "nnh", "Ngiemboon" },
- { "nni", "North Nuaulu" },
- { "nnj", "Nyangatom" },
- { "nnk", "Nankina" },
- { "nnl", "Northern Rengma Naga" },
- { "nnm", "Namia" },
- { "nnn", "Ngete" },
- { "nno", "Norwegian Nynorsk" },
- { "nnp", "Wancho Naga" },
- { "nnq", "Ngindo" },
- { "nnr", "Narungga" },
- { "nns", "Ningye" },
- { "nnt", "Nanticoke" },
- { "nnu", "Dwang" },
- { "nnv", "Nugunu (Australia)" },
- { "nnw", "Southern Nuni" },
- { "nnx", "Ngong" },
- { "nny", "Nyangga" },
- { "nnz", "Nda'nda'" },
- { "noa", "Woun Meu" },
- { "nob", "Norwegian Bokmål" },
- { "noc", "Nuk" },
- { "nod", "Northern Thai" },
- { "noe", "Nimadi" },
- { "nof", "Nomane" },
- { "nog", "Nogai" },
- { "noh", "Nomu" },
- { "noi", "Noiri" },
- { "noj", "Nonuya" },
- { "nok", "Nooksack" },
- { "nol", "Nomlaki" },
- { "nom", "Nocamán" },
- { "non", "Old Norse" },
- { "nop", "Numanggang" },
- { "noq", "Ngongo" },
- { "nor", "Norwegian" },
- { "nos", "Eastern Nisu" },
- { "not", "Nomatsiguenga" },
- { "nou", "Ewage-Notu" },
- { "nov", "Novial" },
- { "now", "Nyambo" },
- { "noy", "Noy" },
- { "noz", "Nayi" },
- { "npa", "Nar Phu" },
- { "npb", "Nupbikha" },
- { "npg", "Ponyo-Gongwang Naga" },
- { "nph", "Phom Naga" },
- { "npi", "Nepali (individual language)" },
- { "npl", "Southeastern Puebla Nahuatl" },
- { "npn", "Mondropolon" },
- { "npo", "Pochuri Naga" },
- { "nps", "Nipsan" },
- { "npu", "Puimei Naga" },
- { "npy", "Napu" },
- { "nqg", "Southern Nago" },
- { "nqk", "Kura Ede Nago" },
- { "nqm", "Ndom" },
- { "nqn", "Nen" },
- { "nqo", "N'Ko" },
- { "nqq", "Kyan-Karyaw Naga" },
- { "nqy", "Akyaung Ari Naga" },
- { "nra", "Ngom" },
- { "nrb", "Nara" },
- { "nrc", "Noric" },
- { "nre", "Southern Rengma Naga" },
- { "nrg", "Narango" },
- { "nri", "Chokri Naga" },
- { "nrk", "Ngarla" },
- { "nrl", "Ngarluma" },
- { "nrm", "Narom" },
- { "nrn", "Norn" },
- { "nrp", "North Picene" },
- { "nrr", "Norra" },
- { "nrt", "Northern Kalapuya" },
- { "nru", "Narua" },
- { "nrx", "Ngurmbur" },
- { "nrz", "Lala" },
- { "nsa", "Sangtam Naga" },
- { "nsc", "Nshi" },
- { "nsd", "Southern Nisu" },
- { "nse", "Nsenga" },
- { "nsf", "Northwestern Nisu" },
- { "nsg", "Ngasa" },
- { "nsh", "Ngoshie" },
- { "nsi", "Nigerian Sign Language" },
- { "nsk", "Naskapi" },
- { "nsl", "Norwegian Sign Language" },
- { "nsm", "Sumi Naga" },
- { "nsn", "Nehan" },
- { "nso", "Pedi" },
- { "nsp", "Nepalese Sign Language" },
- { "nsq", "Northern Sierra Miwok" },
- { "nsr", "Maritime Sign Language" },
- { "nss", "Nali" },
- { "nst", "Tase Naga" },
- { "nsu", "Sierra Negra Nahuatl" },
- { "nsv", "Southwestern Nisu" },
- { "nsw", "Navut" },
- { "nsx", "Nsongo" },
- { "nsy", "Nasal" },
- { "nsz", "Nisenan" },
- { "nte", "Nathembo" },
- { "ntg", "Ngantangarra" },
- { "nti", "Natioro" },
- { "ntj", "Ngaanyatjarra" },
- { "ntk", "Ikoma-Nata-Isenye" },
- { "ntm", "Nateni" },
- { "nto", "Ntomba" },
- { "ntp", "Northern Tepehuan" },
- { "ntr", "Delo" },
- { "nts", "Natagaimas" },
- { "ntu", "Natügu" },
- { "ntw", "Nottoway" },
- { "ntx", "Tangkhul Naga (Myanmar)" },
- { "nty", "Mantsi" },
- { "ntz", "Natanzi" },
- { "nua", "Yuanga" },
- { "nuc", "Nukuini" },
- { "nud", "Ngala" },
- { "nue", "Ngundu" },
- { "nuf", "Nusu" },
- { "nug", "Nungali" },
- { "nuh", "Ndunda" },
- { "nui", "Ngumbi" },
- { "nuj", "Nyole" },
- { "nuk", "Nuu-chah-nulth" },
- { "nul", "Nusa Laut" },
- { "num", "Niuafo'ou" },
- { "nun", "Anong" },
- { "nuo", "Nguôn" },
- { "nup", "Nupe-Nupe-Tako" },
- { "nuq", "Nukumanu" },
- { "nur", "Nukuria" },
- { "nus", "Nuer" },
- { "nut", "Nung (Viet Nam)" },
- { "nuu", "Ngbundu" },
- { "nuv", "Northern Nuni" },
- { "nuw", "Nguluwan" },
- { "nux", "Mehek" },
- { "nuy", "Nunggubuyu" },
- { "nuz", "Tlamacazapa Nahuatl" },
- { "nvh", "Nasarian" },
- { "nvm", "Namiae" },
- { "nvo", "Nyokon" },
- { "nwa", "Nawathinehena" },
- { "nwb", "Nyabwa" },
- { "nwc", "Classical Newari" },
- { "nwe", "Ngwe" },
- { "nwg", "Ngayawung" },
- { "nwi", "Southwest Tanna" },
- { "nwm", "Nyamusa-Molo" },
- { "nwo", "Nauo" },
- { "nwr", "Nawaru" },
- { "nwx", "Middle Newar" },
- { "nwy", "Nottoway-Meherrin" },
- { "nxa", "Nauete" },
- { "nxd", "Ngando (Democratic Republic of Congo)" },
- { "nxe", "Nage" },
- { "nxg", "Ngad'a" },
- { "nxi", "Nindi" },
- { "nxk", "Koki Naga" },
- { "nxl", "South Nuaulu" },
- { "nxm", "Numidian" },
- { "nxn", "Ngawun" },
- { "nxq", "Naxi" },
- { "nxr", "Ninggerum" },
- { "nxu", "Narau" },
- { "nxx", "Nafri" },
- { "nya", "Nyanja" },
- { "nyb", "Nyangbo" },
- { "nyc", "Nyanga-li" },
- { "nyd", "Nyore" },
- { "nye", "Nyengo" },
- { "nyf", "Giryama" },
- { "nyg", "Nyindu" },
- { "nyh", "Nyigina" },
- { "nyi", "Ama (Sudan)" },
- { "nyj", "Nyanga" },
- { "nyk", "Nyaneka" },
- { "nyl", "Nyeu" },
- { "nym", "Nyamwezi" },
- { "nyn", "Nyankole" },
- { "nyo", "Nyoro" },
- { "nyp", "Nyang'i" },
- { "nyq", "Nayini" },
- { "nyr", "Nyiha (Malawi)" },
- { "nys", "Nyunga" },
- { "nyt", "Nyawaygi" },
- { "nyu", "Nyungwe" },
- { "nyv", "Nyulnyul" },
- { "nyw", "Nyaw" },
- { "nyx", "Nganyaywana" },
- { "nyy", "Nyakyusa-Ngonde" },
- { "nza", "Tigon Mbembe" },
- { "nzb", "Njebi" },
- { "nzi", "Nzima" },
- { "nzk", "Nzakara" },
- { "nzm", "Zeme Naga" },
- { "nzs", "New Zealand Sign Language" },
- { "nzu", "Teke-Nzikou" },
- { "nzy", "Nzakambay" },
- { "nzz", "Nanga Dama Dogon" },
- { "oaa", "Orok" },
- { "oac", "Oroch" },
- { "oar", "Old Aramaic (up to 700 BCE)" },
- { "oav", "Old Avar" },
- { "obi", "Obispeño" },
- { "obk", "Southern Bontok" },
- { "obl", "Oblo" },
- { "obm", "Moabite" },
- { "obo", "Obo Manobo" },
- { "obr", "Old Burmese" },
- { "obt", "Old Breton" },
- { "obu", "Obulom" },
- { "oca", "Ocaina" },
- { "och", "Old Chinese" },
- { "oci", "Occitan (post 1500)" },
- { "oco", "Old Cornish" },
- { "ocu", "Atzingo Matlatzinca" },
- { "oda", "Odut" },
- { "odk", "Od" },
- { "odt", "Old Dutch" },
- { "odu", "Odual" },
- { "ofo", "Ofo" },
- { "ofs", "Old Frisian" },
- { "ofu", "Efutop" },
- { "ogb", "Ogbia" },
- { "ogc", "Ogbah" },
- { "oge", "Old Georgian" },
- { "ogg", "Ogbogolo" },
- { "ogo", "Khana" },
- { "ogu", "Ogbronuagum" },
- { "oht", "Old Hittite" },
- { "ohu", "Old Hungarian" },
- { "oia", "Oirata" },
- { "oin", "Inebu One" },
- { "ojb", "Northwestern Ojibwa" },
- { "ojc", "Central Ojibwa" },
- { "ojg", "Eastern Ojibwa" },
- { "oji", "Ojibwa" },
- { "ojp", "Old Japanese" },
- { "ojs", "Severn Ojibwa" },
- { "ojv", "Ontong Java" },
- { "ojw", "Western Ojibwa" },
- { "oka", "Okanagan" },
- { "okb", "Okobo" },
- { "okd", "Okodia" },
- { "oke", "Okpe (Southwestern Edo)" },
- { "okg", "Koko Babangk" },
- { "okh", "Koresh-e Rostam" },
- { "oki", "Okiek" },
- { "okj", "Oko-Juwoi" },
- { "okk", "Kwamtim One" },
- { "okl", "Old Kentish Sign Language" },
- { "okm", "Middle Korean (10th-16th cent.)" },
- { "okn", "Oki-No-Erabu" },
- { "oko", "Old Korean (3rd-9th cent.)" },
- { "okr", "Kirike" },
- { "oks", "Oko-Eni-Osayen" },
- { "oku", "Oku" },
- { "okv", "Orokaiva" },
- { "okx", "Okpe (Northwestern Edo)" },
- { "ola", "Walungge" },
- { "old", "Mochi" },
- { "ole", "Olekha" },
- { "olk", "Olkol" },
- { "olm", "Oloma" },
- { "olo", "Livvi" },
- { "olr", "Olrat" },
- { "oma", "Omaha-Ponca" },
- { "omb", "East Ambae" },
- { "omc", "Mochica" },
- { "ome", "Omejes" },
- { "omg", "Omagua" },
- { "omi", "Omi" },
- { "omk", "Omok" },
- { "oml", "Ombo" },
- { "omn", "Minoan" },
- { "omo", "Utarmbung" },
- { "omp", "Old Manipuri" },
- { "omr", "Old Marathi" },
- { "omt", "Omotik" },
- { "omu", "Omurano" },
- { "omw", "South Tairora" },
- { "omx", "Old Mon" },
- { "ona", "Ona" },
- { "onb", "Lingao" },
- { "one", "Oneida" },
- { "ong", "Olo" },
- { "oni", "Onin" },
- { "onj", "Onjob" },
- { "onk", "Kabore One" },
- { "onn", "Onobasulu" },
- { "ono", "Onondaga" },
- { "onp", "Sartang" },
- { "onr", "Northern One" },
- { "ons", "Ono" },
- { "ont", "Ontenu" },
- { "onu", "Unua" },
- { "onw", "Old Nubian" },
- { "onx", "Onin Based Pidgin" },
- { "ood", "Tohono O'odham" },
- { "oog", "Ong" },
- { "oon", "Önge" },
- { "oor", "Oorlams" },
- { "oos", "Old Ossetic" },
- { "opa", "Okpamheri" },
- { "opk", "Kopkaka" },
- { "opm", "Oksapmin" },
- { "opo", "Opao" },
- { "opt", "Opata" },
- { "opy", "Ofayé" },
- { "ora", "Oroha" },
- { "orc", "Orma" },
- { "ore", "Orejón" },
- { "org", "Oring" },
- { "orh", "Oroqen" },
- { "ori", "Oriya (macrolanguage)" },
- { "orm", "Oromo" },
- { "orn", "Orang Kanaq" },
- { "oro", "Orokolo" },
- { "orr", "Oruma" },
- { "ors", "Orang Seletar" },
- { "ort", "Adivasi Oriya" },
- { "oru", "Ormuri" },
- { "orv", "Old Russian" },
- { "orw", "Oro Win" },
- { "orx", "Oro" },
- { "ory", "Oriya (individual language)" },
- { "orz", "Ormu" },
- { "osa", "Osage" },
- { "osc", "Oscan" },
- { "osi", "Osing" },
- { "oso", "Ososo" },
- { "osp", "Old Spanish" },
- { "oss", "Ossetian" },
- { "ost", "Osatu" },
- { "osu", "Southern One" },
- { "osx", "Old Saxon" },
- { "ota", "Ottoman Turkish (1500-1928)" },
- { "otb", "Old Tibetan" },
- { "otd", "Ot Danum" },
- { "ote", "Mezquital Otomi" },
- { "oti", "Oti" },
- { "otk", "Old Turkish" },
- { "otl", "Tilapa Otomi" },
- { "otm", "Eastern Highland Otomi" },
- { "otn", "Tenango Otomi" },
- { "otq", "Querétaro Otomi" },
- { "otr", "Otoro" },
- { "ots", "Estado de México Otomi" },
- { "ott", "Temoaya Otomi" },
- { "otu", "Otuke" },
- { "otw", "Ottawa" },
- { "otx", "Texcatepec Otomi" },
- { "oty", "Old Tamil" },
- { "otz", "Ixtenco Otomi" },
- { "oua", "Tagargrent" },
- { "oub", "Glio-Oubi" },
- { "oue", "Oune" },
- { "oui", "Old Uighur" },
- { "oum", "Ouma" },
- { "oun", "!O!ung" },
- { "owi", "Owiniga" },
- { "owl", "Old Welsh" },
- { "oyb", "Oy" },
- { "oyd", "Oyda" },
- { "oym", "Wayampi" },
- { "oyy", "Oya'oya" },
- { "ozm", "Koonzime" },
- { "pab", "Parecís" },
- { "pac", "Pacoh" },
- { "pad", "Paumarí" },
- { "pae", "Pagibete" },
- { "paf", "Paranawát" },
- { "pag", "Pangasinan" },
- { "pah", "Tenharim" },
- { "pai", "Pe" },
- { "pak", "Parakanã" },
- { "pal", "Pahlavi" },
- { "pam", "Pampanga" },
- { "pan", "Panjabi" },
- { "pao", "Northern Paiute" },
- { "pap", "Papiamento" },
- { "paq", "Parya" },
- { "par", "Panamint" },
- { "pas", "Papasena" },
- { "pat", "Papitalai" },
- { "pau", "Palauan" },
- { "pav", "Pakaásnovos" },
- { "paw", "Pawnee" },
- { "pax", "Pankararé" },
- { "pay", "Pech" },
- { "paz", "Pankararú" },
- { "pbb", "Páez" },
- { "pbc", "Patamona" },
- { "pbe", "Mezontla Popoloca" },
- { "pbf", "Coyotepec Popoloca" },
- { "pbg", "Paraujano" },
- { "pbh", "E'ñapa Woromaipu" },
- { "pbi", "Parkwa" },
- { "pbl", "Mak (Nigeria)" },
- { "pbn", "Kpasam" },
- { "pbo", "Papel" },
- { "pbp", "Badyara" },
- { "pbr", "Pangwa" },
- { "pbs", "Central Pame" },
- { "pbt", "Southern Pashto" },
- { "pbu", "Northern Pashto" },
- { "pbv", "Pnar" },
- { "pby", "Pyu" },
- { "pca", "Santa Inés Ahuatempan Popoloca" },
- { "pcb", "Pear" },
- { "pcc", "Bouyei" },
- { "pcd", "Picard" },
- { "pce", "Ruching Palaung" },
- { "pcf", "Paliyan" },
- { "pcg", "Paniya" },
- { "pch", "Pardhan" },
- { "pci", "Duruwa" },
- { "pcj", "Parenga" },
- { "pck", "Paite Chin" },
- { "pcl", "Pardhi" },
- { "pcm", "Nigerian Pidgin" },
- { "pcn", "Piti" },
- { "pcp", "Pacahuara" },
- { "pcw", "Pyapun" },
- { "pda", "Anam" },
- { "pdc", "Pennsylvania German" },
- { "pdi", "Pa Di" },
- { "pdn", "Podena" },
- { "pdo", "Padoe" },
- { "pdt", "Plautdietsch" },
- { "pdu", "Kayan" },
- { "pea", "Peranakan Indonesian" },
- { "peb", "Eastern Pomo" },
- { "ped", "Mala (Papua New Guinea)" },
- { "pee", "Taje" },
- { "pef", "Northeastern Pomo" },
- { "peg", "Pengo" },
- { "peh", "Bonan" },
- { "pei", "Chichimeca-Jonaz" },
- { "pej", "Northern Pomo" },
- { "pek", "Penchal" },
- { "pel", "Pekal" },
- { "pem", "Phende" },
- { "peo", "Old Persian (ca. 600-400 B.C.)" },
- { "pep", "Kunja" },
- { "peq", "Southern Pomo" },
- { "pes", "Iranian Persian" },
- { "pev", "Pémono" },
- { "pex", "Petats" },
- { "pey", "Petjo" },
- { "pez", "Eastern Penan" },
- { "pfa", "Pááfang" },
- { "pfe", "Peere" },
- { "pfl", "Pfaelzisch" },
- { "pga", "Sudanese Creole Arabic" },
- { "pgg", "Pangwali" },
- { "pgi", "Pagi" },
- { "pgk", "Rerep" },
- { "pgl", "Primitive Irish" },
- { "pgn", "Paelignian" },
- { "pgs", "Pangseng" },
- { "pgu", "Pagu" },
- { "pha", "Pa-Hng" },
- { "phd", "Phudagi" },
- { "phg", "Phuong" },
- { "phh", "Phukha" },
- { "phk", "Phake" },
- { "phl", "Phalura" },
- { "phm", "Phimbi" },
- { "phn", "Phoenician" },
- { "pho", "Phunoi" },
- { "phq", "Phana'" },
- { "phr", "Pahari-Potwari" },
- { "pht", "Phu Thai" },
- { "phu", "Phuan" },
- { "phv", "Pahlavani" },
- { "phw", "Phangduwali" },
- { "pia", "Pima Bajo" },
- { "pib", "Yine" },
- { "pic", "Pinji" },
- { "pid", "Piaroa" },
- { "pie", "Piro" },
- { "pif", "Pingelapese" },
- { "pig", "Pisabo" },
- { "pih", "Pitcairn-Norfolk" },
- { "pii", "Pini" },
- { "pij", "Pijao" },
- { "pil", "Yom" },
- { "pim", "Powhatan" },
- { "pin", "Piame" },
- { "pio", "Piapoco" },
- { "pip", "Pero" },
- { "pir", "Piratapuyo" },
- { "pis", "Pijin" },
- { "pit", "Pitta Pitta" },
- { "piu", "Pintupi-Luritja" },
- { "piv", "Pileni" },
- { "piw", "Pimbwe" },
- { "pix", "Piu" },
- { "piy", "Piya-Kwonci" },
- { "piz", "Pije" },
- { "pjt", "Pitjantjatjara" },
- { "pka", "Ardhamāgadhī Prākrit" },
- { "pkb", "Pokomo" },
- { "pkc", "Paekche" },
- { "pkg", "Pak-Tong" },
- { "pkh", "Pankhu" },
- { "pkn", "Pakanha" },
- { "pko", "Pökoot" },
- { "pkp", "Pukapuka" },
- { "pkr", "Attapady Kurumba" },
- { "pks", "Pakistan Sign Language" },
- { "pkt", "Maleng" },
- { "pku", "Paku" },
- { "pla", "Miani" },
- { "plb", "Polonombauk" },
- { "plc", "Central Palawano" },
- { "pld", "Polari" },
- { "ple", "Palu'e" },
- { "plg", "Pilagá" },
- { "plh", "Paulohi" },
- { "pli", "Pali" },
- { "plj", "Polci" },
- { "plk", "Kohistani Shina" },
- { "pll", "Shwe Palaung" },
- { "pln", "Palenquero" },
- { "plo", "Oluta Popoluca" },
- { "plp", "Palpa" },
- { "plq", "Palaic" },
- { "plr", "Palaka Senoufo" },
- { "pls", "San Marcos Tlalcoyalco Popoloca" },
- { "plt", "Plateau Malagasy" },
- { "plu", "Palikúr" },
- { "plv", "Southwest Palawano" },
- { "plw", "Brooke's Point Palawano" },
- { "ply", "Bolyu" },
- { "plz", "Paluan" },
- { "pma", "Paama" },
- { "pmb", "Pambia" },
- { "pmc", "Palumata" },
- { "pmd", "Pallanganmiddang" },
- { "pme", "Pwaamei" },
- { "pmf", "Pamona" },
- { "pmh", "Māhārāṣṭri Prākrit" },
- { "pmi", "Northern Pumi" },
- { "pmj", "Southern Pumi" },
- { "pmk", "Pamlico" },
- { "pml", "Lingua Franca" },
- { "pmm", "Pomo" },
- { "pmn", "Pam" },
- { "pmo", "Pom" },
- { "pmq", "Northern Pame" },
- { "pmr", "Paynamar" },
- { "pms", "Piemontese" },
- { "pmt", "Tuamotuan" },
- { "pmu", "Mirpur Panjabi" },
- { "pmw", "Plains Miwok" },
- { "pmx", "Poumei Naga" },
- { "pmy", "Papuan Malay" },
- { "pmz", "Southern Pame" },
- { "pna", "Punan Bah-Biau" },
- { "pnb", "Western Panjabi" },
- { "pnc", "Pannei" },
- { "pne", "Western Penan" },
- { "png", "Pongu" },
- { "pnh", "Penrhyn" },
- { "pni", "Aoheng" },
- { "pnj", "Pinjarup" },
- { "pnk", "Paunaka" },
- { "pnl", "Paleni" },
- { "pnm", "Punan Batu 1" },
- { "pnn", "Pinai-Hagahai" },
- { "pno", "Panobo" },
- { "pnp", "Pancana" },
- { "pnq", "Pana (Burkina Faso)" },
- { "pnr", "Panim" },
- { "pns", "Ponosakan" },
- { "pnt", "Pontic" },
- { "pnu", "Jiongnai Bunu" },
- { "pnv", "Pinigura" },
- { "pnw", "Panytyima" },
- { "pnx", "Phong-Kniang" },
- { "pny", "Pinyin" },
- { "pnz", "Pana (Central African Republic)" },
- { "poc", "Poqomam" },
- { "pod", "Ponares" },
- { "poe", "San Juan Atzingo Popoloca" },
- { "pof", "Poke" },
- { "pog", "Potiguára" },
- { "poh", "Poqomchi'" },
- { "poi", "Highland Popoluca" },
- { "pok", "Pokangá" },
- { "pol", "Polish" },
- { "pom", "Southeastern Pomo" },
- { "pon", "Pohnpeian" },
- { "poo", "Central Pomo" },
- { "pop", "Pwapwâ" },
- { "poq", "Texistepec Popoluca" },
- { "por", "Portuguese" },
- { "pos", "Sayula Popoluca" },
- { "pot", "Potawatomi" },
- { "pov", "Upper Guinea Crioulo" },
- { "pow", "San Felipe Otlaltepec Popoloca" },
- { "pox", "Polabian" },
- { "poy", "Pogolo" },
- { "ppa", "Pao" },
- { "ppe", "Papi" },
- { "ppi", "Paipai" },
- { "ppk", "Uma" },
- { "ppl", "Pipil" },
- { "ppm", "Papuma" },
- { "ppn", "Papapana" },
- { "ppo", "Folopa" },
- { "ppp", "Pelende" },
- { "ppq", "Pei" },
- { "pps", "San Luís Temalacayuca Popoloca" },
- { "ppt", "Pare" },
- { "ppu", "Papora" },
- { "pqa", "Pa'a" },
- { "pqm", "Malecite-Passamaquoddy" },
- { "prb", "Lua'" },
- { "prc", "Parachi" },
- { "prd", "Parsi-Dari" },
- { "pre", "Principense" },
- { "prf", "Paranan" },
- { "prg", "Prussian" },
- { "prh", "Porohanon" },
- { "pri", "Paicî" },
- { "prk", "Parauk" },
- { "prl", "Peruvian Sign Language" },
- { "prm", "Kibiri" },
- { "prn", "Prasuni" },
- { "pro", "Old Provençal (to 1500)" },
- { "prp", "Parsi" },
- { "prq", "Ashéninka Perené" },
- { "prr", "Puri" },
- { "prs", "Dari" },
- { "prt", "Phai" },
- { "pru", "Puragi" },
- { "prw", "Parawen" },
- { "prx", "Purik" },
- { "pry", "Pray 3" },
- { "prz", "Providencia Sign Language" },
- { "psa", "Asue Awyu" },
- { "psc", "Persian Sign Language" },
- { "psd", "Plains Indian Sign Language" },
- { "pse", "Central Malay" },
- { "psg", "Penang Sign Language" },
- { "psh", "Southwest Pashayi" },
- { "psi", "Southeast Pashayi" },
- { "psl", "Puerto Rican Sign Language" },
- { "psm", "Pauserna" },
- { "psn", "Panasuan" },
- { "pso", "Polish Sign Language" },
- { "psp", "Philippine Sign Language" },
- { "psq", "Pasi" },
- { "psr", "Portuguese Sign Language" },
- { "pss", "Kaulong" },
- { "pst", "Central Pashto" },
- { "psu", "Sauraseni Prākrit" },
- { "psw", "Port Sandwich" },
- { "psy", "Piscataway" },
- { "pta", "Pai Tavytera" },
- { "pth", "Pataxó Hã-Ha-Hãe" },
- { "pti", "Pintiini" },
- { "ptn", "Patani" },
- { "pto", "Zo'é" },
- { "ptp", "Patep" },
- { "ptr", "Piamatsina" },
- { "ptt", "Enrekang" },
- { "ptu", "Bambam" },
- { "ptv", "Port Vato" },
- { "ptw", "Pentlatch" },
- { "pty", "Pathiya" },
- { "pua", "Western Highland Purepecha" },
- { "pub", "Purum" },
- { "puc", "Punan Merap" },
- { "pud", "Punan Aput" },
- { "pue", "Puelche" },
- { "puf", "Punan Merah" },
- { "pug", "Phuie" },
- { "pui", "Puinave" },
- { "puj", "Punan Tubu" },
- { "puk", "Pu Ko" },
- { "pum", "Puma" },
- { "puo", "Puoc" },
- { "pup", "Pulabu" },
- { "puq", "Puquina" },
- { "pur", "Puruborá" },
- { "pus", "Pushto" },
- { "put", "Putoh" },
- { "puu", "Punu" },
- { "puw", "Puluwatese" },
- { "pux", "Puare" },
- { "puy", "Purisimeño" },
- { "puz", "Purum Naga" },
- { "pwa", "Pawaia" },
- { "pwb", "Panawa" },
- { "pwg", "Gapapaiwa" },
- { "pwi", "Patwin" },
- { "pwm", "Molbog" },
- { "pwn", "Paiwan" },
- { "pwo", "Pwo Western Karen" },
- { "pwr", "Powari" },
- { "pww", "Pwo Northern Karen" },
- { "pxm", "Quetzaltepec Mixe" },
- { "pye", "Pye Krumen" },
- { "pym", "Fyam" },
- { "pyn", "Poyanáwa" },
- { "pys", "Paraguayan Sign Language" },
- { "pyu", "Puyuma" },
- { "pyx", "Pyu (Myanmar)" },
- { "pyy", "Pyen" },
- { "pzn", "Para Naga" },
- { "qaa", "Reserved for local use" },
- { "qab", "Reserved for local use" },
- { "qac", "Reserved for local use" },
- { "qad", "Reserved for local use" },
- { "qae", "Reserved for local use" },
- { "qaf", "Reserved for local use" },
- { "qag", "Reserved for local use" },
- { "qah", "Reserved for local use" },
- { "qai", "Reserved for local use" },
- { "qaj", "Reserved for local use" },
- { "qak", "Reserved for local use" },
- { "qal", "Reserved for local use" },
- { "qam", "Reserved for local use" },
- { "qan", "Reserved for local use" },
- { "qao", "Reserved for local use" },
- { "qap", "Reserved for local use" },
- { "qaq", "Reserved for local use" },
- { "qar", "Reserved for local use" },
- { "qas", "Reserved for local use" },
- { "qat", "Reserved for local use" },
- { "qau", "Reserved for local use" },
- { "qav", "Reserved for local use" },
- { "qaw", "Reserved for local use" },
- { "qax", "Reserved for local use" },
- { "qay", "Reserved for local use" },
- { "qaz", "Reserved for local use" },
- { "qba", "Reserved for local use" },
- { "qbb", "Reserved for local use" },
- { "qbc", "Reserved for local use" },
- { "qbd", "Reserved for local use" },
- { "qbe", "Reserved for local use" },
- { "qbf", "Reserved for local use" },
- { "qbg", "Reserved for local use" },
- { "qbh", "Reserved for local use" },
- { "qbi", "Reserved for local use" },
- { "qbj", "Reserved for local use" },
- { "qbk", "Reserved for local use" },
- { "qbl", "Reserved for local use" },
- { "qbm", "Reserved for local use" },
- { "qbn", "Reserved for local use" },
- { "qbo", "Reserved for local use" },
- { "qbp", "Reserved for local use" },
- { "qbq", "Reserved for local use" },
- { "qbr", "Reserved for local use" },
- { "qbs", "Reserved for local use" },
- { "qbt", "Reserved for local use" },
- { "qbu", "Reserved for local use" },
- { "qbv", "Reserved for local use" },
- { "qbw", "Reserved for local use" },
- { "qbx", "Reserved for local use" },
- { "qby", "Reserved for local use" },
- { "qbz", "Reserved for local use" },
- { "qca", "Reserved for local use" },
- { "qcb", "Reserved for local use" },
- { "qcc", "Reserved for local use" },
- { "qcd", "Reserved for local use" },
- { "qce", "Reserved for local use" },
- { "qcf", "Reserved for local use" },
- { "qcg", "Reserved for local use" },
- { "qch", "Reserved for local use" },
- { "qci", "Reserved for local use" },
- { "qcj", "Reserved for local use" },
- { "qck", "Reserved for local use" },
- { "qcl", "Reserved for local use" },
- { "qcm", "Reserved for local use" },
- { "qcn", "Reserved for local use" },
- { "qco", "Reserved for local use" },
- { "qcp", "Reserved for local use" },
- { "qcq", "Reserved for local use" },
- { "qcr", "Reserved for local use" },
- { "qcs", "Reserved for local use" },
- { "qct", "Reserved for local use" },
- { "qcu", "Reserved for local use" },
- { "qcv", "Reserved for local use" },
- { "qcw", "Reserved for local use" },
- { "qcx", "Reserved for local use" },
- { "qcy", "Reserved for local use" },
- { "qcz", "Reserved for local use" },
- { "qda", "Reserved for local use" },
- { "qdb", "Reserved for local use" },
- { "qdc", "Reserved for local use" },
- { "qdd", "Reserved for local use" },
- { "qde", "Reserved for local use" },
- { "qdf", "Reserved for local use" },
- { "qdg", "Reserved for local use" },
- { "qdh", "Reserved for local use" },
- { "qdi", "Reserved for local use" },
- { "qdj", "Reserved for local use" },
- { "qdk", "Reserved for local use" },
- { "qdl", "Reserved for local use" },
- { "qdm", "Reserved for local use" },
- { "qdn", "Reserved for local use" },
- { "qdo", "Reserved for local use" },
- { "qdp", "Reserved for local use" },
- { "qdq", "Reserved for local use" },
- { "qdr", "Reserved for local use" },
- { "qds", "Reserved for local use" },
- { "qdt", "Reserved for local use" },
- { "qdu", "Reserved for local use" },
- { "qdv", "Reserved for local use" },
- { "qdw", "Reserved for local use" },
- { "qdx", "Reserved for local use" },
- { "qdy", "Reserved for local use" },
- { "qdz", "Reserved for local use" },
- { "qea", "Reserved for local use" },
- { "qeb", "Reserved for local use" },
- { "qec", "Reserved for local use" },
- { "qed", "Reserved for local use" },
- { "qee", "Reserved for local use" },
- { "qef", "Reserved for local use" },
- { "qeg", "Reserved for local use" },
- { "qeh", "Reserved for local use" },
- { "qei", "Reserved for local use" },
- { "qej", "Reserved for local use" },
- { "qek", "Reserved for local use" },
- { "qel", "Reserved for local use" },
- { "qem", "Reserved for local use" },
- { "qen", "Reserved for local use" },
- { "qeo", "Reserved for local use" },
- { "qep", "Reserved for local use" },
- { "qeq", "Reserved for local use" },
- { "qer", "Reserved for local use" },
- { "qes", "Reserved for local use" },
- { "qet", "Reserved for local use" },
- { "qeu", "Reserved for local use" },
- { "qev", "Reserved for local use" },
- { "qew", "Reserved for local use" },
- { "qex", "Reserved for local use" },
- { "qey", "Reserved for local use" },
- { "qez", "Reserved for local use" },
- { "qfa", "Reserved for local use" },
- { "qfb", "Reserved for local use" },
- { "qfc", "Reserved for local use" },
- { "qfd", "Reserved for local use" },
- { "qfe", "Reserved for local use" },
- { "qff", "Reserved for local use" },
- { "qfg", "Reserved for local use" },
- { "qfh", "Reserved for local use" },
- { "qfi", "Reserved for local use" },
- { "qfj", "Reserved for local use" },
- { "qfk", "Reserved for local use" },
- { "qfl", "Reserved for local use" },
- { "qfm", "Reserved for local use" },
- { "qfn", "Reserved for local use" },
- { "qfo", "Reserved for local use" },
- { "qfp", "Reserved for local use" },
- { "qfq", "Reserved for local use" },
- { "qfr", "Reserved for local use" },
- { "qfs", "Reserved for local use" },
- { "qft", "Reserved for local use" },
- { "qfu", "Reserved for local use" },
- { "qfv", "Reserved for local use" },
- { "qfw", "Reserved for local use" },
- { "qfx", "Reserved for local use" },
- { "qfy", "Reserved for local use" },
- { "qfz", "Reserved for local use" },
- { "qga", "Reserved for local use" },
- { "qgb", "Reserved for local use" },
- { "qgc", "Reserved for local use" },
- { "qgd", "Reserved for local use" },
- { "qge", "Reserved for local use" },
- { "qgf", "Reserved for local use" },
- { "qgg", "Reserved for local use" },
- { "qgh", "Reserved for local use" },
- { "qgi", "Reserved for local use" },
- { "qgj", "Reserved for local use" },
- { "qgk", "Reserved for local use" },
- { "qgl", "Reserved for local use" },
- { "qgm", "Reserved for local use" },
- { "qgn", "Reserved for local use" },
- { "qgo", "Reserved for local use" },
- { "qgp", "Reserved for local use" },
- { "qgq", "Reserved for local use" },
- { "qgr", "Reserved for local use" },
- { "qgs", "Reserved for local use" },
- { "qgt", "Reserved for local use" },
- { "qgu", "Reserved for local use" },
- { "qgv", "Reserved for local use" },
- { "qgw", "Reserved for local use" },
- { "qgx", "Reserved for local use" },
- { "qgy", "Reserved for local use" },
- { "qgz", "Reserved for local use" },
- { "qha", "Reserved for local use" },
- { "qhb", "Reserved for local use" },
- { "qhc", "Reserved for local use" },
- { "qhd", "Reserved for local use" },
- { "qhe", "Reserved for local use" },
- { "qhf", "Reserved for local use" },
- { "qhg", "Reserved for local use" },
- { "qhh", "Reserved for local use" },
- { "qhi", "Reserved for local use" },
- { "qhj", "Reserved for local use" },
- { "qhk", "Reserved for local use" },
- { "qhl", "Reserved for local use" },
- { "qhm", "Reserved for local use" },
- { "qhn", "Reserved for local use" },
- { "qho", "Reserved for local use" },
- { "qhp", "Reserved for local use" },
- { "qhq", "Reserved for local use" },
- { "qhr", "Reserved for local use" },
- { "qhs", "Reserved for local use" },
- { "qht", "Reserved for local use" },
- { "qhu", "Reserved for local use" },
- { "qhv", "Reserved for local use" },
- { "qhw", "Reserved for local use" },
- { "qhx", "Reserved for local use" },
- { "qhy", "Reserved for local use" },
- { "qhz", "Reserved for local use" },
- { "qia", "Reserved for local use" },
- { "qib", "Reserved for local use" },
- { "qic", "Reserved for local use" },
- { "qid", "Reserved for local use" },
- { "qie", "Reserved for local use" },
- { "qif", "Reserved for local use" },
- { "qig", "Reserved for local use" },
- { "qih", "Reserved for local use" },
- { "qii", "Reserved for local use" },
- { "qij", "Reserved for local use" },
- { "qik", "Reserved for local use" },
- { "qil", "Reserved for local use" },
- { "qim", "Reserved for local use" },
- { "qin", "Reserved for local use" },
- { "qio", "Reserved for local use" },
- { "qip", "Reserved for local use" },
- { "qiq", "Reserved for local use" },
- { "qir", "Reserved for local use" },
- { "qis", "Reserved for local use" },
- { "qit", "Reserved for local use" },
- { "qiu", "Reserved for local use" },
- { "qiv", "Reserved for local use" },
- { "qiw", "Reserved for local use" },
- { "qix", "Reserved for local use" },
- { "qiy", "Reserved for local use" },
- { "qiz", "Reserved for local use" },
- { "qja", "Reserved for local use" },
- { "qjb", "Reserved for local use" },
- { "qjc", "Reserved for local use" },
- { "qjd", "Reserved for local use" },
- { "qje", "Reserved for local use" },
- { "qjf", "Reserved for local use" },
- { "qjg", "Reserved for local use" },
- { "qjh", "Reserved for local use" },
- { "qji", "Reserved for local use" },
- { "qjj", "Reserved for local use" },
- { "qjk", "Reserved for local use" },
- { "qjl", "Reserved for local use" },
- { "qjm", "Reserved for local use" },
- { "qjn", "Reserved for local use" },
- { "qjo", "Reserved for local use" },
- { "qjp", "Reserved for local use" },
- { "qjq", "Reserved for local use" },
- { "qjr", "Reserved for local use" },
- { "qjs", "Reserved for local use" },
- { "qjt", "Reserved for local use" },
- { "qju", "Reserved for local use" },
- { "qjv", "Reserved for local use" },
- { "qjw", "Reserved for local use" },
- { "qjx", "Reserved for local use" },
- { "qjy", "Reserved for local use" },
- { "qjz", "Reserved for local use" },
- { "qka", "Reserved for local use" },
- { "qkb", "Reserved for local use" },
- { "qkc", "Reserved for local use" },
- { "qkd", "Reserved for local use" },
- { "qke", "Reserved for local use" },
- { "qkf", "Reserved for local use" },
- { "qkg", "Reserved for local use" },
- { "qkh", "Reserved for local use" },
- { "qki", "Reserved for local use" },
- { "qkj", "Reserved for local use" },
- { "qkk", "Reserved for local use" },
- { "qkl", "Reserved for local use" },
- { "qkm", "Reserved for local use" },
- { "qkn", "Reserved for local use" },
- { "qko", "Reserved for local use" },
- { "qkp", "Reserved for local use" },
- { "qkq", "Reserved for local use" },
- { "qkr", "Reserved for local use" },
- { "qks", "Reserved for local use" },
- { "qkt", "Reserved for local use" },
- { "qku", "Reserved for local use" },
- { "qkv", "Reserved for local use" },
- { "qkw", "Reserved for local use" },
- { "qkx", "Reserved for local use" },
- { "qky", "Reserved for local use" },
- { "qkz", "Reserved for local use" },
- { "qla", "Reserved for local use" },
- { "qlb", "Reserved for local use" },
- { "qlc", "Reserved for local use" },
- { "qld", "Reserved for local use" },
- { "qle", "Reserved for local use" },
- { "qlf", "Reserved for local use" },
- { "qlg", "Reserved for local use" },
- { "qlh", "Reserved for local use" },
- { "qli", "Reserved for local use" },
- { "qlj", "Reserved for local use" },
- { "qlk", "Reserved for local use" },
- { "qll", "Reserved for local use" },
- { "qlm", "Reserved for local use" },
- { "qln", "Reserved for local use" },
- { "qlo", "Reserved for local use" },
- { "qlp", "Reserved for local use" },
- { "qlq", "Reserved for local use" },
- { "qlr", "Reserved for local use" },
- { "qls", "Reserved for local use" },
- { "qlt", "Reserved for local use" },
- { "qlu", "Reserved for local use" },
- { "qlv", "Reserved for local use" },
- { "qlw", "Reserved for local use" },
- { "qlx", "Reserved for local use" },
- { "qly", "Reserved for local use" },
- { "qlz", "Reserved for local use" },
- { "qma", "Reserved for local use" },
- { "qmb", "Reserved for local use" },
- { "qmc", "Reserved for local use" },
- { "qmd", "Reserved for local use" },
- { "qme", "Reserved for local use" },
- { "qmf", "Reserved for local use" },
- { "qmg", "Reserved for local use" },
- { "qmh", "Reserved for local use" },
- { "qmi", "Reserved for local use" },
- { "qmj", "Reserved for local use" },
- { "qmk", "Reserved for local use" },
- { "qml", "Reserved for local use" },
- { "qmm", "Reserved for local use" },
- { "qmn", "Reserved for local use" },
- { "qmo", "Reserved for local use" },
- { "qmp", "Reserved for local use" },
- { "qmq", "Reserved for local use" },
- { "qmr", "Reserved for local use" },
- { "qms", "Reserved for local use" },
- { "qmt", "Reserved for local use" },
- { "qmu", "Reserved for local use" },
- { "qmv", "Reserved for local use" },
- { "qmw", "Reserved for local use" },
- { "qmx", "Reserved for local use" },
- { "qmy", "Reserved for local use" },
- { "qmz", "Reserved for local use" },
- { "qna", "Reserved for local use" },
- { "qnb", "Reserved for local use" },
- { "qnc", "Reserved for local use" },
- { "qnd", "Reserved for local use" },
- { "qne", "Reserved for local use" },
- { "qnf", "Reserved for local use" },
- { "qng", "Reserved for local use" },
- { "qnh", "Reserved for local use" },
- { "qni", "Reserved for local use" },
- { "qnj", "Reserved for local use" },
- { "qnk", "Reserved for local use" },
- { "qnl", "Reserved for local use" },
- { "qnm", "Reserved for local use" },
- { "qnn", "Reserved for local use" },
- { "qno", "Reserved for local use" },
- { "qnp", "Reserved for local use" },
- { "qnq", "Reserved for local use" },
- { "qnr", "Reserved for local use" },
- { "qns", "Reserved for local use" },
- { "qnt", "Reserved for local use" },
- { "qnu", "Reserved for local use" },
- { "qnv", "Reserved for local use" },
- { "qnw", "Reserved for local use" },
- { "qnx", "Reserved for local use" },
- { "qny", "Reserved for local use" },
- { "qnz", "Reserved for local use" },
- { "qoa", "Reserved for local use" },
- { "qob", "Reserved for local use" },
- { "qoc", "Reserved for local use" },
- { "qod", "Reserved for local use" },
- { "qoe", "Reserved for local use" },
- { "qof", "Reserved for local use" },
- { "qog", "Reserved for local use" },
- { "qoh", "Reserved for local use" },
- { "qoi", "Reserved for local use" },
- { "qoj", "Reserved for local use" },
- { "qok", "Reserved for local use" },
- { "qol", "Reserved for local use" },
- { "qom", "Reserved for local use" },
- { "qon", "Reserved for local use" },
- { "qoo", "Reserved for local use" },
- { "qop", "Reserved for local use" },
- { "qoq", "Reserved for local use" },
- { "qor", "Reserved for local use" },
- { "qos", "Reserved for local use" },
- { "qot", "Reserved for local use" },
- { "qou", "Reserved for local use" },
- { "qov", "Reserved for local use" },
- { "qow", "Reserved for local use" },
- { "qox", "Reserved for local use" },
- { "qoy", "Reserved for local use" },
- { "qoz", "Reserved for local use" },
- { "qpa", "Reserved for local use" },
- { "qpb", "Reserved for local use" },
- { "qpc", "Reserved for local use" },
- { "qpd", "Reserved for local use" },
- { "qpe", "Reserved for local use" },
- { "qpf", "Reserved for local use" },
- { "qpg", "Reserved for local use" },
- { "qph", "Reserved for local use" },
- { "qpi", "Reserved for local use" },
- { "qpj", "Reserved for local use" },
- { "qpk", "Reserved for local use" },
- { "qpl", "Reserved for local use" },
- { "qpm", "Reserved for local use" },
- { "qpn", "Reserved for local use" },
- { "qpo", "Reserved for local use" },
- { "qpp", "Reserved for local use" },
- { "qpq", "Reserved for local use" },
- { "qpr", "Reserved for local use" },
- { "qps", "Reserved for local use" },
- { "qpt", "Reserved for local use" },
- { "qpu", "Reserved for local use" },
- { "qpv", "Reserved for local use" },
- { "qpw", "Reserved for local use" },
- { "qpx", "Reserved for local use" },
- { "qpy", "Reserved for local use" },
- { "qpz", "Reserved for local use" },
- { "qqa", "Reserved for local use" },
- { "qqb", "Reserved for local use" },
- { "qqc", "Reserved for local use" },
- { "qqd", "Reserved for local use" },
- { "qqe", "Reserved for local use" },
- { "qqf", "Reserved for local use" },
- { "qqg", "Reserved for local use" },
- { "qqh", "Reserved for local use" },
- { "qqi", "Reserved for local use" },
- { "qqj", "Reserved for local use" },
- { "qqk", "Reserved for local use" },
- { "qql", "Reserved for local use" },
- { "qqm", "Reserved for local use" },
- { "qqn", "Reserved for local use" },
- { "qqo", "Reserved for local use" },
- { "qqp", "Reserved for local use" },
- { "qqq", "Reserved for local use" },
- { "qqr", "Reserved for local use" },
- { "qqs", "Reserved for local use" },
- { "qqt", "Reserved for local use" },
- { "qqu", "Reserved for local use" },
- { "qqv", "Reserved for local use" },
- { "qqw", "Reserved for local use" },
- { "qqx", "Reserved for local use" },
- { "qqy", "Reserved for local use" },
- { "qqz", "Reserved for local use" },
- { "qra", "Reserved for local use" },
- { "qrb", "Reserved for local use" },
- { "qrc", "Reserved for local use" },
- { "qrd", "Reserved for local use" },
- { "qre", "Reserved for local use" },
- { "qrf", "Reserved for local use" },
- { "qrg", "Reserved for local use" },
- { "qrh", "Reserved for local use" },
- { "qri", "Reserved for local use" },
- { "qrj", "Reserved for local use" },
- { "qrk", "Reserved for local use" },
- { "qrl", "Reserved for local use" },
- { "qrm", "Reserved for local use" },
- { "qrn", "Reserved for local use" },
- { "qro", "Reserved for local use" },
- { "qrp", "Reserved for local use" },
- { "qrq", "Reserved for local use" },
- { "qrr", "Reserved for local use" },
- { "qrs", "Reserved for local use" },
- { "qrt", "Reserved for local use" },
- { "qru", "Reserved for local use" },
- { "qrv", "Reserved for local use" },
- { "qrw", "Reserved for local use" },
- { "qrx", "Reserved for local use" },
- { "qry", "Reserved for local use" },
- { "qrz", "Reserved for local use" },
- { "qsa", "Reserved for local use" },
- { "qsb", "Reserved for local use" },
- { "qsc", "Reserved for local use" },
- { "qsd", "Reserved for local use" },
- { "qse", "Reserved for local use" },
- { "qsf", "Reserved for local use" },
- { "qsg", "Reserved for local use" },
- { "qsh", "Reserved for local use" },
- { "qsi", "Reserved for local use" },
- { "qsj", "Reserved for local use" },
- { "qsk", "Reserved for local use" },
- { "qsl", "Reserved for local use" },
- { "qsm", "Reserved for local use" },
- { "qsn", "Reserved for local use" },
- { "qso", "Reserved for local use" },
- { "qsp", "Reserved for local use" },
- { "qsq", "Reserved for local use" },
- { "qsr", "Reserved for local use" },
- { "qss", "Reserved for local use" },
- { "qst", "Reserved for local use" },
- { "qsu", "Reserved for local use" },
- { "qsv", "Reserved for local use" },
- { "qsw", "Reserved for local use" },
- { "qsx", "Reserved for local use" },
- { "qsy", "Reserved for local use" },
- { "qsz", "Reserved for local use" },
- { "qta", "Reserved for local use" },
- { "qtb", "Reserved for local use" },
- { "qtc", "Reserved for local use" },
- { "qtd", "Reserved for local use" },
- { "qte", "Reserved for local use" },
- { "qtf", "Reserved for local use" },
- { "qtg", "Reserved for local use" },
- { "qth", "Reserved for local use" },
- { "qti", "Reserved for local use" },
- { "qtj", "Reserved for local use" },
- { "qtk", "Reserved for local use" },
- { "qtl", "Reserved for local use" },
- { "qtm", "Reserved for local use" },
- { "qtn", "Reserved for local use" },
- { "qto", "Reserved for local use" },
- { "qtp", "Reserved for local use" },
- { "qtq", "Reserved for local use" },
- { "qtr", "Reserved for local use" },
- { "qts", "Reserved for local use" },
- { "qtt", "Reserved for local use" },
- { "qtu", "Reserved for local use" },
- { "qtv", "Reserved for local use" },
- { "qtw", "Reserved for local use" },
- { "qtx", "Reserved for local use" },
- { "qty", "Reserved for local use" },
- { "qtz", "Reserved for local use" },
- { "qua", "Quapaw" },
- { "qub", "Huallaga Huánuco Quechua" },
- { "quc", "K'iche'" },
- { "qud", "Calderón Highland Quichua" },
- { "que", "Quechua" },
- { "quf", "Lambayeque Quechua" },
- { "qug", "Chimborazo Highland Quichua" },
- { "quh", "South Bolivian Quechua" },
- { "qui", "Quileute" },
- { "quk", "Chachapoyas Quechua" },
- { "qul", "North Bolivian Quechua" },
- { "qum", "Sipacapense" },
- { "qun", "Quinault" },
- { "qup", "Southern Pastaza Quechua" },
- { "quq", "Quinqui" },
- { "qur", "Yanahuanca Pasco Quechua" },
- { "qus", "Santiago del Estero Quichua" },
- { "quv", "Sacapulteco" },
- { "quw", "Tena Lowland Quichua" },
- { "qux", "Yauyos Quechua" },
- { "quy", "Ayacucho Quechua" },
- { "quz", "Cusco Quechua" },
- { "qva", "Ambo-Pasco Quechua" },
- { "qvc", "Cajamarca Quechua" },
- { "qve", "Eastern Apurímac Quechua" },
- { "qvh", "Huamalíes-Dos de Mayo Huánuco Quechua" },
- { "qvi", "Imbabura Highland Quichua" },
- { "qvj", "Loja Highland Quichua" },
- { "qvl", "Cajatambo North Lima Quechua" },
- { "qvm", "Margos-Yarowilca-Lauricocha Quechua" },
- { "qvn", "North Junín Quechua" },
- { "qvo", "Napo Lowland Quechua" },
- { "qvp", "Pacaraos Quechua" },
- { "qvs", "San Martín Quechua" },
- { "qvw", "Huaylla Wanca Quechua" },
- { "qvy", "Queyu" },
- { "qvz", "Northern Pastaza Quichua" },
- { "qwa", "Corongo Ancash Quechua" },
- { "qwc", "Classical Quechua" },
- { "qwh", "Huaylas Ancash Quechua" },
- { "qwm", "Kuman (Russia)" },
- { "qws", "Sihuas Ancash Quechua" },
- { "qwt", "Kwalhioqua-Tlatskanai" },
- { "qxa", "Chiquián Ancash Quechua" },
- { "qxc", "Chincha Quechua" },
- { "qxh", "Panao Huánuco Quechua" },
- { "qxl", "Salasaca Highland Quichua" },
- { "qxn", "Northern Conchucos Ancash Quechua" },
- { "qxo", "Southern Conchucos Ancash Quechua" },
- { "qxp", "Puno Quechua" },
- { "qxq", "Qashqa'i" },
- { "qxr", "Cañar Highland Quichua" },
- { "qxs", "Southern Qiang" },
- { "qxt", "Santa Ana de Tusi Pasco Quechua" },
- { "qxu", "Arequipa-La Unión Quechua" },
- { "qxw", "Jauja Wanca Quechua" },
- { "qya", "Quenya" },
- { "qyp", "Quiripi" },
- { "raa", "Dungmali" },
- { "rab", "Camling" },
- { "rac", "Rasawa" },
- { "rad", "Rade" },
- { "raf", "Western Meohang" },
- { "rag", "Logooli" },
- { "rah", "Rabha" },
- { "rai", "Ramoaaina" },
- { "raj", "Rajasthani" },
- { "rak", "Tulu-Bohuai" },
- { "ral", "Ralte" },
- { "ram", "Canela" },
- { "ran", "Riantana" },
- { "rao", "Rao" },
- { "rap", "Rapanui" },
- { "raq", "Saam" },
- { "rar", "Rarotongan" },
- { "ras", "Tegali" },
- { "rat", "Razajerdi" },
- { "rau", "Raute" },
- { "rav", "Sampang" },
- { "raw", "Rawang" },
- { "rax", "Rang" },
- { "ray", "Rapa" },
- { "raz", "Rahambuu" },
- { "rbb", "Rumai Palaung" },
- { "rbk", "Northern Bontok" },
- { "rbl", "Miraya Bikol" },
- { "rbp", "Barababaraba" },
- { "rcf", "Réunion Creole French" },
- { "rdb", "Rudbari" },
- { "rea", "Rerau" },
- { "reb", "Rembong" },
- { "ree", "Rejang Kayan" },
- { "reg", "Kara (Tanzania)" },
- { "rei", "Reli" },
- { "rej", "Rejang" },
- { "rel", "Rendille" },
- { "rem", "Remo" },
- { "ren", "Rengao" },
- { "rer", "Rer Bare" },
- { "res", "Reshe" },
- { "ret", "Retta" },
- { "rey", "Reyesano" },
- { "rga", "Roria" },
- { "rge", "Romano-Greek" },
- { "rgk", "Rangkas" },
- { "rgn", "Romagnol" },
- { "rgr", "Resígaro" },
- { "rgs", "Southern Roglai" },
- { "rgu", "Ringgou" },
- { "rhg", "Rohingya" },
- { "rhp", "Yahang" },
- { "ria", "Riang (India)" },
- { "rie", "Rien" },
- { "rif", "Tarifit" },
- { "ril", "Riang (Myanmar)" },
- { "rim", "Nyaturu" },
- { "rin", "Nungu" },
- { "rir", "Ribun" },
- { "rit", "Ritarungo" },
- { "riu", "Riung" },
- { "rjg", "Rajong" },
- { "rji", "Raji" },
- { "rjs", "Rajbanshi" },
- { "rka", "Kraol" },
- { "rkb", "Rikbaktsa" },
- { "rkh", "Rakahanga-Manihiki" },
- { "rki", "Rakhine" },
- { "rkm", "Marka" },
- { "rkt", "Rangpuri" },
- { "rkw", "Arakwal" },
- { "rma", "Rama" },
- { "rmb", "Rembarunga" },
- { "rmc", "Carpathian Romani" },
- { "rmd", "Traveller Danish" },
- { "rme", "Angloromani" },
- { "rmf", "Kalo Finnish Romani" },
- { "rmg", "Traveller Norwegian" },
- { "rmh", "Murkim" },
- { "rmi", "Lomavren" },
- { "rmk", "Romkun" },
- { "rml", "Baltic Romani" },
- { "rmm", "Roma" },
- { "rmn", "Balkan Romani" },
- { "rmo", "Sinte Romani" },
- { "rmp", "Rempi" },
- { "rmq", "Caló" },
- { "rms", "Romanian Sign Language" },
- { "rmt", "Domari" },
- { "rmu", "Tavringer Romani" },
- { "rmv", "Romanova" },
- { "rmw", "Welsh Romani" },
- { "rmx", "Romam" },
- { "rmy", "Vlax Romani" },
- { "rmz", "Marma" },
- { "rna", "Runa" },
- { "rnd", "Ruund" },
- { "rng", "Ronga" },
- { "rnl", "Ranglong" },
- { "rnn", "Roon" },
- { "rnp", "Rongpo" },
- { "rnr", "Nari Nari" },
- { "rnw", "Rungwa" },
- { "rob", "Tae'" },
- { "roc", "Cacgia Roglai" },
- { "rod", "Rogo" },
- { "roe", "Ronji" },
- { "rof", "Rombo" },
- { "rog", "Northern Roglai" },
- { "roh", "Romansh" },
- { "rol", "Romblomanon" },
- { "rom", "Romany" },
- { "ron", "Romanian" },
- { "roo", "Rotokas" },
- { "rop", "Kriol" },
- { "ror", "Rongga" },
- { "rou", "Runga" },
- { "row", "Dela-Oenale" },
- { "rpn", "Repanbitip" },
- { "rpt", "Rapting" },
- { "rri", "Ririo" },
- { "rro", "Waima" },
- { "rrt", "Arritinngithigh" },
- { "rsb", "Romano-Serbian" },
- { "rsi", "Rennellese Sign Language" },
- { "rsl", "Russian Sign Language" },
- { "rtc", "Rungtu Chin" },
- { "rth", "Ratahan" },
- { "rtm", "Rotuman" },
- { "rtw", "Rathawi" },
- { "rub", "Gungu" },
- { "ruc", "Ruuli" },
- { "rue", "Rusyn" },
- { "ruf", "Luguru" },
- { "rug", "Roviana" },
- { "ruh", "Ruga" },
- { "rui", "Rufiji" },
- { "ruk", "Che" },
- { "run", "Rundi" },
- { "ruo", "Istro Romanian" },
- { "rup", "Macedo-Romanian" },
- { "ruq", "Megleno Romanian" },
- { "rus", "Russian" },
- { "rut", "Rutul" },
- { "ruu", "Lanas Lobu" },
- { "ruy", "Mala (Nigeria)" },
- { "ruz", "Ruma" },
- { "rwa", "Rawo" },
- { "rwk", "Rwa" },
- { "rwm", "Amba (Uganda)" },
- { "rwo", "Rawa" },
- { "rwr", "Marwari (India)" },
- { "rxd", "Ngardi" },
- { "rxw", "Karuwali" },
- { "ryn", "Northern Amami-Oshima" },
- { "rys", "Yaeyama" },
- { "ryu", "Central Okinawan" },
- { "saa", "Saba" },
- { "sab", "Buglere" },
- { "sac", "Meskwaki" },
- { "sad", "Sandawe" },
- { "sae", "Sabanê" },
- { "saf", "Safaliba" },
- { "sag", "Sango" },
- { "sah", "Yakut" },
- { "saj", "Sahu" },
- { "sak", "Sake" },
- { "sam", "Samaritan Aramaic" },
- { "san", "Sanskrit" },
- { "sao", "Sause" },
- { "sap", "Sanapaná" },
- { "saq", "Samburu" },
- { "sar", "Saraveca" },
- { "sas", "Sasak" },
- { "sat", "Santali" },
- { "sau", "Saleman" },
- { "sav", "Saafi-Saafi" },
- { "saw", "Sawi" },
- { "sax", "Sa" },
- { "say", "Saya" },
- { "saz", "Saurashtra" },
- { "sba", "Ngambay" },
- { "sbb", "Simbo" },
- { "sbc", "Kele (Papua New Guinea)" },
- { "sbd", "Southern Samo" },
- { "sbe", "Saliba" },
- { "sbf", "Shabo" },
- { "sbg", "Seget" },
- { "sbh", "Sori-Harengan" },
- { "sbi", "Seti" },
- { "sbj", "Surbakhal" },
- { "sbk", "Safwa" },
- { "sbl", "Botolan Sambal" },
- { "sbm", "Sagala" },
- { "sbn", "Sindhi Bhil" },
- { "sbo", "Sabüm" },
- { "sbp", "Sangu (Tanzania)" },
- { "sbq", "Sileibi" },
- { "sbr", "Sembakung Murut" },
- { "sbs", "Subiya" },
- { "sbt", "Kimki" },
- { "sbu", "Stod Bhoti" },
- { "sbv", "Sabine" },
- { "sbw", "Simba" },
- { "sbx", "Seberuang" },
- { "sby", "Soli" },
- { "sbz", "Sara Kaba" },
- { "scb", "Chut" },
- { "sce", "Dongxiang" },
- { "scf", "San Miguel Creole French" },
- { "scg", "Sanggau" },
- { "sch", "Sakachep" },
- { "sci", "Sri Lankan Creole Malay" },
- { "sck", "Sadri" },
- { "scl", "Shina" },
- { "scn", "Sicilian" },
- { "sco", "Scots" },
- { "scp", "Helambu Sherpa" },
- { "scq", "Sa'och" },
- { "scs", "North Slavey" },
- { "scu", "Shumcho" },
- { "scv", "Sheni" },
- { "scw", "Sha" },
- { "scx", "Sicel" },
- { "sda", "Toraja-Sa'dan" },
- { "sdb", "Shabak" },
- { "sdc", "Sassarese Sardinian" },
- { "sde", "Surubu" },
- { "sdf", "Sarli" },
- { "sdg", "Savi" },
- { "sdh", "Southern Kurdish" },
- { "sdj", "Suundi" },
- { "sdk", "Sos Kundi" },
- { "sdl", "Saudi Arabian Sign Language" },
- { "sdm", "Semandang" },
- { "sdn", "Gallurese Sardinian" },
- { "sdo", "Bukar-Sadung Bidayuh" },
- { "sdp", "Sherdukpen" },
- { "sdr", "Oraon Sadri" },
- { "sds", "Sened" },
- { "sdt", "Shuadit" },
- { "sdu", "Sarudu" },
- { "sdx", "Sibu Melanau" },
- { "sdz", "Sallands" },
- { "sea", "Semai" },
- { "seb", "Shempire Senoufo" },
- { "sec", "Sechelt" },
- { "sed", "Sedang" },
- { "see", "Seneca" },
- { "sef", "Cebaara Senoufo" },
- { "seg", "Segeju" },
- { "seh", "Sena" },
- { "sei", "Seri" },
- { "sej", "Sene" },
- { "sek", "Sekani" },
- { "sel", "Selkup" },
- { "sen", "Nanerigé Sénoufo" },
- { "seo", "Suarmin" },
- { "sep", "Sìcìté Sénoufo" },
- { "seq", "Senara Sénoufo" },
- { "ser", "Serrano" },
- { "ses", "Koyraboro Senni Songhai" },
- { "set", "Sentani" },
- { "seu", "Serui-Laut" },
- { "sev", "Nyarafolo Senoufo" },
- { "sew", "Sewa Bay" },
- { "sey", "Secoya" },
- { "sez", "Senthang Chin" },
- { "sfb", "Langue des signes de Belgique Francophone" },
- { "sfe", "Eastern Subanen" },
- { "sfm", "Small Flowery Miao" },
- { "sfs", "South African Sign Language" },
- { "sfw", "Sehwi" },
- { "sga", "Old Irish (to 900)" },
- { "sgb", "Mag-antsi Ayta" },
- { "sgc", "Kipsigis" },
- { "sgd", "Surigaonon" },
- { "sge", "Segai" },
- { "sgg", "Swiss-German Sign Language" },
- { "sgh", "Shughni" },
- { "sgi", "Suga" },
- { "sgj", "Surgujia" },
- { "sgk", "Sangkong" },
- { "sgm", "Singa" },
- { "sgo", "Songa" },
- { "sgp", "Singpho" },
- { "sgr", "Sangisari" },
- { "sgs", "Samogitian" },
- { "sgt", "Brokpake" },
- { "sgu", "Salas" },
- { "sgw", "Sebat Bet Gurage" },
- { "sgx", "Sierra Leone Sign Language" },
- { "sgy", "Sanglechi" },
- { "sgz", "Sursurunga" },
- { "sha", "Shall-Zwall" },
- { "shb", "Ninam" },
- { "shc", "Sonde" },
- { "shd", "Kundal Shahi" },
- { "she", "Sheko" },
- { "shg", "Shua" },
- { "shh", "Shoshoni" },
- { "shi", "Tachelhit" },
- { "shj", "Shatt" },
- { "shk", "Shilluk" },
- { "shl", "Shendu" },
- { "shm", "Shahrudi" },
- { "shn", "Shan" },
- { "sho", "Shanga" },
- { "shp", "Shipibo-Conibo" },
- { "shq", "Sala" },
- { "shr", "Shi" },
- { "shs", "Shuswap" },
- { "sht", "Shasta" },
- { "shu", "Chadian Arabic" },
- { "shv", "Shehri" },
- { "shw", "Shwai" },
- { "shx", "She" },
- { "shy", "Tachawit" },
- { "shz", "Syenara Senoufo" },
- { "sia", "Akkala Sami" },
- { "sib", "Sebop" },
- { "sid", "Sidamo" },
- { "sie", "Simaa" },
- { "sif", "Siamou" },
- { "sig", "Paasaal" },
- { "sih", "Zire" },
- { "sii", "Shom Peng" },
- { "sij", "Numbami" },
- { "sik", "Sikiana" },
- { "sil", "Tumulung Sisaala" },
- { "sim", "Mende (Papua New Guinea)" },
- { "sin", "Sinhala" },
- { "sip", "Sikkimese" },
- { "siq", "Sonia" },
- { "sir", "Siri" },
- { "sis", "Siuslaw" },
- { "siu", "Sinagen" },
- { "siv", "Sumariup" },
- { "siw", "Siwai" },
- { "six", "Sumau" },
- { "siy", "Sivandi" },
- { "siz", "Siwi" },
- { "sja", "Epena" },
- { "sjb", "Sajau Basap" },
- { "sjd", "Kildin Sami" },
- { "sje", "Pite Sami" },
- { "sjg", "Assangori" },
- { "sjk", "Kemi Sami" },
- { "sjl", "Sajalong" },
- { "sjm", "Mapun" },
- { "sjn", "Sindarin" },
- { "sjo", "Xibe" },
- { "sjp", "Surjapuri" },
- { "sjr", "Siar-Lak" },
- { "sjs", "Senhaja De Srair" },
- { "sjt", "Ter Sami" },
- { "sju", "Ume Sami" },
- { "sjw", "Shawnee" },
- { "ska", "Skagit" },
- { "skb", "Saek" },
- { "skc", "Ma Manda" },
- { "skd", "Southern Sierra Miwok" },
- { "ske", "Seke (Vanuatu)" },
- { "skf", "Sakirabiá" },
- { "skg", "Sakalava Malagasy" },
- { "skh", "Sikule" },
- { "ski", "Sika" },
- { "skj", "Seke (Nepal)" },
- { "skk", "Sok" },
- { "skm", "Kutong" },
- { "skn", "Kolibugan Subanon" },
- { "sko", "Seko Tengah" },
- { "skp", "Sekapan" },
- { "skq", "Sininkere" },
- { "skr", "Seraiki" },
- { "sks", "Maia" },
- { "skt", "Sakata" },
- { "sku", "Sakao" },
- { "skv", "Skou" },
- { "skw", "Skepi Creole Dutch" },
- { "skx", "Seko Padang" },
- { "sky", "Sikaiana" },
- { "skz", "Sekar" },
- { "slc", "Sáliba" },
- { "sld", "Sissala" },
- { "sle", "Sholaga" },
- { "slf", "Swiss-Italian Sign Language" },
- { "slg", "Selungai Murut" },
- { "slh", "Southern Puget Sound Salish" },
- { "sli", "Lower Silesian" },
- { "slj", "Salumá" },
- { "slk", "Slovak" },
- { "sll", "Salt-Yui" },
- { "slm", "Pangutaran Sama" },
- { "sln", "Salinan" },
- { "slp", "Lamaholot" },
- { "slq", "Salchuq" },
- { "slr", "Salar" },
- { "sls", "Singapore Sign Language" },
- { "slt", "Sila" },
- { "slu", "Selaru" },
- { "slv", "Slovenian" },
- { "slw", "Sialum" },
- { "slx", "Salampasu" },
- { "sly", "Selayar" },
- { "slz", "Ma'ya" },
- { "sma", "Southern Sami" },
- { "smb", "Simbari" },
- { "smc", "Som" },
- { "smd", "Sama" },
- { "sme", "Northern Sami" },
- { "smf", "Auwe" },
- { "smg", "Simbali" },
- { "smh", "Samei" },
- { "smj", "Lule Sami" },
- { "smk", "Bolinao" },
- { "sml", "Central Sama" },
- { "smm", "Musasa" },
- { "smn", "Inari Sami" },
- { "smo", "Samoan" },
- { "smp", "Samaritan" },
- { "smq", "Samo" },
- { "smr", "Simeulue" },
- { "sms", "Skolt Sami" },
- { "smt", "Simte" },
- { "smu", "Somray" },
- { "smv", "Samvedi" },
- { "smw", "Sumbawa" },
- { "smx", "Samba" },
- { "smy", "Semnani" },
- { "smz", "Simeku" },
- { "sna", "Shona" },
- { "snb", "Sebuyau" },
- { "snc", "Sinaugoro" },
- { "snd", "Sindhi" },
- { "sne", "Bau Bidayuh" },
- { "snf", "Noon" },
- { "sng", "Sanga (Democratic Republic of Congo)" },
- { "snh", "Shinabo" },
- { "sni", "Sensi" },
- { "snj", "Riverain Sango" },
- { "snk", "Soninke" },
- { "snl", "Sangil" },
- { "snm", "Southern Ma'di" },
- { "snn", "Siona" },
- { "sno", "Snohomish" },
- { "snp", "Siane" },
- { "snq", "Sangu (Gabon)" },
- { "snr", "Sihan" },
- { "sns", "South West Bay" },
- { "snu", "Senggi" },
- { "snv", "Sa'ban" },
- { "snw", "Selee" },
- { "snx", "Sam" },
- { "sny", "Saniyo-Hiyewe" },
- { "snz", "Sinsauru" },
- { "soa", "Thai Song" },
- { "sob", "Sobei" },
- { "soc", "So (Democratic Republic of Congo)" },
- { "sod", "Songoora" },
- { "soe", "Songomeno" },
- { "sog", "Sogdian" },
- { "soh", "Aka" },
- { "soi", "Sonha" },
- { "soj", "Soi" },
- { "sok", "Sokoro" },
- { "sol", "Solos" },
- { "som", "Somali" },
- { "soo", "Songo" },
- { "sop", "Songe" },
- { "soq", "Kanasi" },
- { "sor", "Somrai" },
- { "sos", "Seeku" },
- { "sot", "Southern Sotho" },
- { "sou", "Southern Thai" },
- { "sov", "Sonsorol" },
- { "sow", "Sowanda" },
- { "sox", "Swo" },
- { "soy", "Miyobe" },
- { "soz", "Temi" },
- { "spa", "Spanish" },
- { "spb", "Sepa (Indonesia)" },
- { "spc", "Sapé" },
- { "spd", "Saep" },
- { "spe", "Sepa (Papua New Guinea)" },
- { "spg", "Sian" },
- { "spi", "Saponi" },
- { "spk", "Sengo" },
- { "spl", "Selepet" },
- { "spm", "Akukem" },
- { "spo", "Spokane" },
- { "spp", "Supyire Senoufo" },
- { "spq", "Loreto-Ucayali Spanish" },
- { "spr", "Saparua" },
- { "sps", "Saposa" },
- { "spt", "Spiti Bhoti" },
- { "spu", "Sapuan" },
- { "spv", "Sambalpuri" },
- { "spx", "South Picene" },
- { "spy", "Sabaot" },
- { "sqa", "Shama-Sambuga" },
- { "sqh", "Shau" },
- { "sqi", "Albanian" },
- { "sqk", "Albanian Sign Language" },
- { "sqm", "Suma" },
- { "sqn", "Susquehannock" },
- { "sqo", "Sorkhei" },
- { "sqq", "Sou" },
- { "sqr", "Siculo Arabic" },
- { "sqs", "Sri Lankan Sign Language" },
- { "sqt", "Soqotri" },
- { "squ", "Squamish" },
- { "sra", "Saruga" },
- { "srb", "Sora" },
- { "src", "Logudorese Sardinian" },
- { "srd", "Sardinian" },
- { "sre", "Sara" },
- { "srf", "Nafi" },
- { "srg", "Sulod" },
- { "srh", "Sarikoli" },
- { "sri", "Siriano" },
- { "srk", "Serudung Murut" },
- { "srl", "Isirawa" },
- { "srm", "Saramaccan" },
- { "srn", "Sranan Tongo" },
- { "sro", "Campidanese Sardinian" },
- { "srp", "Serbian" },
- { "srq", "Sirionó" },
- { "srr", "Serer" },
- { "srs", "Sarsi" },
- { "srt", "Sauri" },
- { "sru", "Suruí" },
- { "srv", "Southern Sorsoganon" },
- { "srw", "Serua" },
- { "srx", "Sirmauri" },
- { "sry", "Sera" },
- { "srz", "Shahmirzadi" },
- { "ssb", "Southern Sama" },
- { "ssc", "Suba-Simbiti" },
- { "ssd", "Siroi" },
- { "sse", "Balangingi" },
- { "ssf", "Thao" },
- { "ssg", "Seimat" },
- { "ssh", "Shihhi Arabic" },
- { "ssi", "Sansi" },
- { "ssj", "Sausi" },
- { "ssk", "Sunam" },
- { "ssl", "Western Sisaala" },
- { "ssm", "Semnam" },
- { "ssn", "Waata" },
- { "sso", "Sissano" },
- { "ssp", "Spanish Sign Language" },
- { "ssq", "So'a" },
- { "ssr", "Swiss-French Sign Language" },
- { "sss", "Sô" },
- { "sst", "Sinasina" },
- { "ssu", "Susuami" },
- { "ssv", "Shark Bay" },
- { "ssw", "Swati" },
- { "ssx", "Samberigi" },
- { "ssy", "Saho" },
- { "ssz", "Sengseng" },
- { "sta", "Settla" },
- { "stb", "Northern Subanen" },
- { "std", "Sentinel" },
- { "ste", "Liana-Seti" },
- { "stf", "Seta" },
- { "stg", "Trieng" },
- { "sth", "Shelta" },
- { "sti", "Bulo Stieng" },
- { "stj", "Matya Samo" },
- { "stk", "Arammba" },
- { "stl", "Stellingwerfs" },
- { "stm", "Setaman" },
- { "stn", "Owa" },
- { "sto", "Stoney" },
- { "stp", "Southeastern Tepehuan" },
- { "stq", "Saterfriesisch" },
- { "str", "Straits Salish" },
- { "sts", "Shumashti" },
- { "stt", "Budeh Stieng" },
- { "stu", "Samtao" },
- { "stv", "Silt'e" },
- { "stw", "Satawalese" },
- { "sty", "Siberian Tatar" },
- { "sua", "Sulka" },
- { "sub", "Suku" },
- { "suc", "Western Subanon" },
- { "sue", "Suena" },
- { "sug", "Suganga" },
- { "sui", "Suki" },
- { "suj", "Shubi" },
- { "suk", "Sukuma" },
- { "sun", "Sundanese" },
- { "suq", "Suri" },
- { "sur", "Mwaghavul" },
- { "sus", "Susu" },
- { "sut", "Subtiaba" },
- { "suv", "Puroik" },
- { "suw", "Sumbwa" },
- { "sux", "Sumerian" },
- { "suy", "Suyá" },
- { "suz", "Sunwar" },
- { "sva", "Svan" },
- { "svb", "Ulau-Suain" },
- { "svc", "Vincentian Creole English" },
- { "sve", "Serili" },
- { "svk", "Slovakian Sign Language" },
- { "svm", "Slavomolisano" },
- { "svr", "Savara" },
- { "svs", "Savosavo" },
- { "svx", "Skalvian" },
- { "swa", "Swahili (macrolanguage)" },
- { "swb", "Maore Comorian" },
- { "swc", "Congo Swahili" },
- { "swe", "Swedish" },
- { "swf", "Sere" },
- { "swg", "Swabian" },
- { "swh", "Swahili (individual language)" },
- { "swi", "Sui" },
- { "swj", "Sira" },
- { "swk", "Malawi Sena" },
- { "swl", "Swedish Sign Language" },
- { "swm", "Samosa" },
- { "swn", "Sawknah" },
- { "swo", "Shanenawa" },
- { "swp", "Suau" },
- { "swq", "Sharwa" },
- { "swr", "Saweru" },
- { "sws", "Seluwasan" },
- { "swt", "Sawila" },
- { "swu", "Suwawa" },
- { "swv", "Shekhawati" },
- { "sww", "Sowa" },
- { "swx", "Suruahá" },
- { "swy", "Sarua" },
- { "sxb", "Suba" },
- { "sxc", "Sicanian" },
- { "sxe", "Sighu" },
- { "sxg", "Shixing" },
- { "sxk", "Southern Kalapuya" },
- { "sxl", "Selian" },
- { "sxm", "Samre" },
- { "sxn", "Sangir" },
- { "sxo", "Sorothaptic" },
- { "sxr", "Saaroa" },
- { "sxs", "Sasaru" },
- { "sxu", "Upper Saxon" },
- { "sxw", "Saxwe Gbe" },
- { "sya", "Siang" },
- { "syb", "Central Subanen" },
- { "syc", "Classical Syriac" },
- { "syi", "Seki" },
- { "syk", "Sukur" },
- { "syl", "Sylheti" },
- { "sym", "Maya Samo" },
- { "syn", "Senaya" },
- { "syo", "Suoy" },
- { "syr", "Syriac" },
- { "sys", "Sinyar" },
- { "syw", "Kagate" },
- { "syy", "Al-Sayyid Bedouin Sign Language" },
- { "sza", "Semelai" },
- { "szb", "Ngalum" },
- { "szc", "Semaq Beri" },
- { "szd", "Seru" },
- { "sze", "Seze" },
- { "szg", "Sengele" },
- { "szl", "Silesian" },
- { "szn", "Sula" },
- { "szp", "Suabo" },
- { "szv", "Isu (Fako Division)" },
- { "szw", "Sawai" },
- { "taa", "Lower Tanana" },
- { "tab", "Tabassaran" },
- { "tac", "Lowland Tarahumara" },
- { "tad", "Tause" },
- { "tae", "Tariana" },
- { "taf", "Tapirapé" },
- { "tag", "Tagoi" },
- { "tah", "Tahitian" },
- { "taj", "Eastern Tamang" },
- { "tak", "Tala" },
- { "tal", "Tal" },
- { "tam", "Tamil" },
- { "tan", "Tangale" },
- { "tao", "Yami" },
- { "tap", "Taabwa" },
- { "taq", "Tamasheq" },
- { "tar", "Central Tarahumara" },
- { "tas", "Tay Boi" },
- { "tat", "Tatar" },
- { "tau", "Upper Tanana" },
- { "tav", "Tatuyo" },
- { "taw", "Tai" },
- { "tax", "Tamki" },
- { "tay", "Atayal" },
- { "taz", "Tocho" },
- { "tba", "Aikanã" },
- { "tbb", "Tapeba" },
- { "tbc", "Takia" },
- { "tbd", "Kaki Ae" },
- { "tbe", "Tanimbili" },
- { "tbf", "Mandara" },
- { "tbg", "North Tairora" },
- { "tbh", "Thurawal" },
- { "tbi", "Gaam" },
- { "tbj", "Tiang" },
- { "tbk", "Calamian Tagbanwa" },
- { "tbl", "Tboli" },
- { "tbm", "Tagbu" },
- { "tbn", "Barro Negro Tunebo" },
- { "tbo", "Tawala" },
- { "tbp", "Taworta" },
- { "tbr", "Tumtum" },
- { "tbs", "Tanguat" },
- { "tbt", "Tembo (Kitembo)" },
- { "tbu", "Tubar" },
- { "tbv", "Tobo" },
- { "tbw", "Tagbanwa" },
- { "tbx", "Kapin" },
- { "tby", "Tabaru" },
- { "tbz", "Ditammari" },
- { "tca", "Ticuna" },
- { "tcb", "Tanacross" },
- { "tcc", "Datooga" },
- { "tcd", "Tafi" },
- { "tce", "Southern Tutchone" },
- { "tcf", "Malinaltepec Me'phaa" },
- { "tcg", "Tamagario" },
- { "tch", "Turks And Caicos Creole English" },
- { "tci", "Wára" },
- { "tck", "Tchitchege" },
- { "tcl", "Taman (Myanmar)" },
- { "tcm", "Tanahmerah" },
- { "tcn", "Tichurong" },
- { "tco", "Taungyo" },
- { "tcp", "Tawr Chin" },
- { "tcq", "Kaiy" },
- { "tcs", "Torres Strait Creole" },
- { "tct", "T'en" },
- { "tcu", "Southeastern Tarahumara" },
- { "tcw", "Tecpatlán Totonac" },
- { "tcx", "Toda" },
- { "tcy", "Tulu" },
- { "tcz", "Thado Chin" },
- { "tda", "Tagdal" },
- { "tdb", "Panchpargania" },
- { "tdc", "Emberá-Tadó" },
- { "tdd", "Tai Nüa" },
- { "tde", "Tiranige Diga Dogon" },
- { "tdf", "Talieng" },
- { "tdg", "Western Tamang" },
- { "tdh", "Thulung" },
- { "tdi", "Tomadino" },
- { "tdj", "Tajio" },
- { "tdk", "Tambas" },
- { "tdl", "Sur" },
- { "tdn", "Tondano" },
- { "tdo", "Teme" },
- { "tdq", "Tita" },
- { "tdr", "Todrah" },
- { "tds", "Doutai" },
- { "tdt", "Tetun Dili" },
- { "tdu", "Tempasuk Dusun" },
- { "tdv", "Toro" },
- { "tdx", "Tandroy-Mahafaly Malagasy" },
- { "tdy", "Tadyawan" },
- { "tea", "Temiar" },
- { "teb", "Tetete" },
- { "tec", "Terik" },
- { "ted", "Tepo Krumen" },
- { "tee", "Huehuetla Tepehua" },
- { "tef", "Teressa" },
- { "teg", "Teke-Tege" },
- { "teh", "Tehuelche" },
- { "tei", "Torricelli" },
- { "tek", "Ibali Teke" },
- { "tel", "Telugu" },
- { "tem", "Timne" },
- { "ten", "Tama (Colombia)" },
- { "teo", "Teso" },
- { "tep", "Tepecano" },
- { "teq", "Temein" },
- { "ter", "Tereno" },
- { "tes", "Tengger" },
- { "tet", "Tetum" },
- { "teu", "Soo" },
- { "tev", "Teor" },
- { "tew", "Tewa (USA)" },
- { "tex", "Tennet" },
- { "tey", "Tulishi" },
- { "tfi", "Tofin Gbe" },
- { "tfn", "Tanaina" },
- { "tfo", "Tefaro" },
- { "tfr", "Teribe" },
- { "tft", "Ternate" },
- { "tga", "Sagalla" },
- { "tgb", "Tobilung" },
- { "tgc", "Tigak" },
- { "tgd", "Ciwogai" },
- { "tge", "Eastern Gorkha Tamang" },
- { "tgf", "Chalikha" },
- { "tgh", "Tobagonian Creole English" },
- { "tgi", "Lawunuia" },
- { "tgj", "Tagin" },
- { "tgk", "Tajik" },
- { "tgl", "Tagalog" },
- { "tgn", "Tandaganon" },
- { "tgo", "Sudest" },
- { "tgp", "Tangoa" },
- { "tgq", "Tring" },
- { "tgr", "Tareng" },
- { "tgs", "Nume" },
- { "tgt", "Central Tagbanwa" },
- { "tgu", "Tanggu" },
- { "tgv", "Tingui-Boto" },
- { "tgw", "Tagwana Senoufo" },
- { "tgx", "Tagish" },
- { "tgy", "Togoyo" },
- { "tgz", "Tagalaka" },
- { "tha", "Thai" },
- { "thc", "Tai Hang Tong" },
- { "thd", "Thayore" },
- { "the", "Chitwania Tharu" },
- { "thf", "Thangmi" },
- { "thh", "Northern Tarahumara" },
- { "thi", "Tai Long" },
- { "thk", "Tharaka" },
- { "thl", "Dangaura Tharu" },
- { "thm", "Aheu" },
- { "thn", "Thachanadan" },
- { "thp", "Thompson" },
- { "thq", "Kochila Tharu" },
- { "thr", "Rana Tharu" },
- { "ths", "Thakali" },
- { "tht", "Tahltan" },
- { "thu", "Thuri" },
- { "thv", "Tahaggart Tamahaq" },
- { "thw", "Thudam" },
- { "thx", "The" },
- { "thy", "Tha" },
- { "thz", "Tayart Tamajeq" },
- { "tia", "Tidikelt Tamazight" },
- { "tic", "Tira" },
- { "tid", "Tidong" },
- { "tif", "Tifal" },
- { "tig", "Tigre" },
- { "tih", "Timugon Murut" },
- { "tii", "Tiene" },
- { "tij", "Tilung" },
- { "tik", "Tikar" },
- { "til", "Tillamook" },
- { "tim", "Timbe" },
- { "tin", "Tindi" },
- { "tio", "Teop" },
- { "tip", "Trimuris" },
- { "tiq", "Tiéfo" },
- { "tir", "Tigrinya" },
- { "tis", "Masadiit Itneg" },
- { "tit", "Tinigua" },
- { "tiu", "Adasen" },
- { "tiv", "Tiv" },
- { "tiw", "Tiwi" },
- { "tix", "Southern Tiwa" },
- { "tiy", "Tiruray" },
- { "tiz", "Tai Hongjin" },
- { "tja", "Tajuasohn" },
- { "tjg", "Tunjung" },
- { "tji", "Northern Tujia" },
- { "tjl", "Tai Laing" },
- { "tjm", "Timucua" },
- { "tjn", "Tonjon" },
- { "tjo", "Temacine Tamazight" },
- { "tjs", "Southern Tujia" },
- { "tju", "Tjurruru" },
- { "tjw", "Djabwurrung" },
- { "tka", "Truká" },
- { "tkb", "Buksa" },
- { "tkd", "Tukudede" },
- { "tke", "Takwane" },
- { "tkf", "Tukumanféd" },
- { "tkg", "Tesaka Malagasy" },
- { "tkl", "Tokelau" },
- { "tkm", "Takelma" },
- { "tkn", "Toku-No-Shima" },
- { "tkp", "Tikopia" },
- { "tkq", "Tee" },
- { "tkr", "Tsakhur" },
- { "tks", "Takestani" },
- { "tkt", "Kathoriya Tharu" },
- { "tku", "Upper Necaxa Totonac" },
- { "tkw", "Teanu" },
- { "tkx", "Tangko" },
- { "tkz", "Takua" },
- { "tla", "Southwestern Tepehuan" },
- { "tlb", "Tobelo" },
- { "tlc", "Yecuatla Totonac" },
- { "tld", "Talaud" },
- { "tlf", "Telefol" },
- { "tlg", "Tofanma" },
- { "tlh", "Klingon" },
- { "tli", "Tlingit" },
- { "tlj", "Talinga-Bwisi" },
- { "tlk", "Taloki" },
- { "tll", "Tetela" },
- { "tlm", "Tolomako" },
- { "tln", "Talondo'" },
- { "tlo", "Talodi" },
- { "tlp", "Filomena Mata-Coahuitlán Totonac" },
- { "tlq", "Tai Loi" },
- { "tlr", "Talise" },
- { "tls", "Tambotalo" },
- { "tlt", "Teluti" },
- { "tlu", "Tulehu" },
- { "tlv", "Taliabu" },
- { "tlx", "Khehek" },
- { "tly", "Talysh" },
- { "tma", "Tama (Chad)" },
- { "tmb", "Katbol" },
- { "tmc", "Tumak" },
- { "tmd", "Haruai" },
- { "tme", "Tremembé" },
- { "tmf", "Toba-Maskoy" },
- { "tmg", "Ternateño" },
- { "tmh", "Tamashek" },
- { "tmi", "Tutuba" },
- { "tmj", "Samarokena" },
- { "tmk", "Northwestern Tamang" },
- { "tml", "Tamnim Citak" },
- { "tmm", "Tai Thanh" },
- { "tmn", "Taman (Indonesia)" },
- { "tmo", "Temoq" },
- { "tmp", "Tai Mène" },
- { "tmq", "Tumleo" },
- { "tmr", "Jewish Babylonian Aramaic (ca. 200-1200 CE)" },
- { "tms", "Tima" },
- { "tmt", "Tasmate" },
- { "tmu", "Iau" },
- { "tmv", "Tembo (Motembo)" },
- { "tmw", "Temuan" },
- { "tmy", "Tami" },
- { "tmz", "Tamanaku" },
- { "tna", "Tacana" },
- { "tnb", "Western Tunebo" },
- { "tnc", "Tanimuca-Retuarã" },
- { "tnd", "Angosturas Tunebo" },
- { "tne", "Tinoc Kallahan" },
- { "tng", "Tobanga" },
- { "tnh", "Maiani" },
- { "tni", "Tandia" },
- { "tnk", "Kwamera" },
- { "tnl", "Lenakel" },
- { "tnm", "Tabla" },
- { "tnn", "North Tanna" },
- { "tno", "Toromono" },
- { "tnp", "Whitesands" },
- { "tnq", "Taino" },
- { "tnr", "Ménik" },
- { "tns", "Tenis" },
- { "tnt", "Tontemboan" },
- { "tnu", "Tay Khang" },
- { "tnv", "Tangchangya" },
- { "tnw", "Tonsawang" },
- { "tnx", "Tanema" },
- { "tny", "Tongwe" },
- { "tnz", "Tonga (Thailand)" },
- { "tob", "Toba" },
- { "toc", "Coyutla Totonac" },
- { "tod", "Toma" },
- { "toe", "Tomedes" },
- { "tof", "Gizrra" },
- { "tog", "Tonga (Nyasa)" },
- { "toh", "Gitonga" },
- { "toi", "Tonga (Zambia)" },
- { "toj", "Tojolabal" },
- { "tol", "Tolowa" },
- { "tom", "Tombulu" },
- { "ton", "Tonga (Tonga Islands)" },
- { "too", "Xicotepec De Juárez Totonac" },
- { "top", "Papantla Totonac" },
- { "toq", "Toposa" },
- { "tor", "Togbo-Vara Banda" },
- { "tos", "Highland Totonac" },
- { "tou", "Tho" },
- { "tov", "Upper Taromi" },
- { "tow", "Jemez" },
- { "tox", "Tobian" },
- { "toy", "Topoiyo" },
- { "toz", "To" },
- { "tpa", "Taupota" },
- { "tpc", "Azoyú Me'phaa" },
- { "tpe", "Tippera" },
- { "tpf", "Tarpia" },
- { "tpg", "Kula" },
- { "tpi", "Tok Pisin" },
- { "tpj", "Tapieté" },
- { "tpk", "Tupinikin" },
- { "tpl", "Tlacoapa Me'phaa" },
- { "tpm", "Tampulma" },
- { "tpn", "Tupinambá" },
- { "tpo", "Tai Pao" },
- { "tpp", "Pisaflores Tepehua" },
- { "tpq", "Tukpa" },
- { "tpr", "Tuparí" },
- { "tpt", "Tlachichilco Tepehua" },
- { "tpu", "Tampuan" },
- { "tpv", "Tanapag" },
- { "tpw", "Tupí" },
- { "tpx", "Acatepec Me'phaa" },
- { "tpy", "Trumai" },
- { "tpz", "Tinputz" },
- { "tqb", "Tembé" },
- { "tql", "Lehali" },
- { "tqm", "Turumsa" },
- { "tqn", "Tenino" },
- { "tqo", "Toaripi" },
- { "tqp", "Tomoip" },
- { "tqq", "Tunni" },
- { "tqr", "Torona" },
- { "tqt", "Western Totonac" },
- { "tqu", "Touo" },
- { "tqw", "Tonkawa" },
- { "tra", "Tirahi" },
- { "trb", "Terebu" },
- { "trc", "Copala Triqui" },
- { "trd", "Turi" },
- { "tre", "East Tarangan" },
- { "trf", "Trinidadian Creole English" },
- { "trg", "Lishán Didán" },
- { "trh", "Turaka" },
- { "tri", "Trió" },
- { "trj", "Toram" },
- { "trl", "Traveller Scottish" },
- { "trm", "Tregami" },
- { "trn", "Trinitario" },
- { "tro", "Tarao Naga" },
- { "trp", "Kok Borok" },
- { "trq", "San Martín Itunyoso Triqui" },
- { "trr", "Taushiro" },
- { "trs", "Chicahuaxtla Triqui" },
- { "trt", "Tunggare" },
- { "tru", "Turoyo" },
- { "trv", "Taroko" },
- { "trw", "Torwali" },
- { "trx", "Tringgus-Sembaan Bidayuh" },
- { "try", "Turung" },
- { "trz", "Torá" },
- { "tsa", "Tsaangi" },
- { "tsb", "Tsamai" },
- { "tsc", "Tswa" },
- { "tsd", "Tsakonian" },
- { "tse", "Tunisian Sign Language" },
- { "tsf", "Southwestern Tamang" },
- { "tsg", "Tausug" },
- { "tsh", "Tsuvan" },
- { "tsi", "Tsimshian" },
- { "tsj", "Tshangla" },
- { "tsk", "Tseku" },
- { "tsl", "Ts'ün-Lao" },
- { "tsm", "Turkish Sign Language" },
- { "tsn", "Tswana" },
- { "tso", "Tsonga" },
- { "tsp", "Northern Toussian" },
- { "tsq", "Thai Sign Language" },
- { "tsr", "Akei" },
- { "tss", "Taiwan Sign Language" },
- { "tst", "Tondi Songway Kiini" },
- { "tsu", "Tsou" },
- { "tsv", "Tsogo" },
- { "tsw", "Tsishingini" },
- { "tsx", "Mubami" },
- { "tsy", "Tebul Sign Language" },
- { "tsz", "Purepecha" },
- { "tta", "Tutelo" },
- { "ttb", "Gaa" },
- { "ttc", "Tektiteko" },
- { "ttd", "Tauade" },
- { "tte", "Bwanabwana" },
- { "ttf", "Tuotomb" },
- { "ttg", "Tutong" },
- { "tth", "Upper Ta'oih" },
- { "tti", "Tobati" },
- { "ttj", "Tooro" },
- { "ttk", "Totoro" },
- { "ttl", "Totela" },
- { "ttm", "Northern Tutchone" },
- { "ttn", "Towei" },
- { "tto", "Lower Ta'oih" },
- { "ttp", "Tombelala" },
- { "ttq", "Tawallammat Tamajaq" },
- { "ttr", "Tera" },
- { "tts", "Northeastern Thai" },
- { "ttt", "Muslim Tat" },
- { "ttu", "Torau" },
- { "ttv", "Titan" },
- { "ttw", "Long Wat" },
- { "tty", "Sikaritai" },
- { "ttz", "Tsum" },
- { "tua", "Wiarumus" },
- { "tub", "Tübatulabal" },
- { "tuc", "Mutu" },
- { "tud", "Tuxá" },
- { "tue", "Tuyuca" },
- { "tuf", "Central Tunebo" },
- { "tug", "Tunia" },
- { "tuh", "Taulil" },
- { "tui", "Tupuri" },
- { "tuj", "Tugutil" },
- { "tuk", "Turkmen" },
- { "tul", "Tula" },
- { "tum", "Tumbuka" },
- { "tun", "Tunica" },
- { "tuo", "Tucano" },
- { "tuq", "Tedaga" },
- { "tur", "Turkish" },
- { "tus", "Tuscarora" },
- { "tuu", "Tututni" },
- { "tuv", "Turkana" },
- { "tux", "Tuxináwa" },
- { "tuy", "Tugen" },
- { "tuz", "Turka" },
- { "tva", "Vaghua" },
- { "tvd", "Tsuvadi" },
- { "tve", "Te'un" },
- { "tvk", "Southeast Ambrym" },
- { "tvl", "Tuvalu" },
- { "tvm", "Tela-Masbuar" },
- { "tvn", "Tavoyan" },
- { "tvo", "Tidore" },
- { "tvs", "Taveta" },
- { "tvt", "Tutsa Naga" },
- { "tvu", "Tunen" },
- { "tvw", "Sedoa" },
- { "tvy", "Timor Pidgin" },
- { "twa", "Twana" },
- { "twb", "Western Tawbuid" },
- { "twc", "Teshenawa" },
- { "twd", "Twents" },
- { "twe", "Tewa (Indonesia)" },
- { "twf", "Northern Tiwa" },
- { "twg", "Tereweng" },
- { "twh", "Tai Dón" },
- { "twi", "Twi" },
- { "twl", "Tawara" },
- { "twm", "Tawang Monpa" },
- { "twn", "Twendi" },
- { "two", "Tswapong" },
- { "twp", "Ere" },
- { "twq", "Tasawaq" },
- { "twr", "Southwestern Tarahumara" },
- { "twt", "Turiwára" },
- { "twu", "Termanu" },
- { "tww", "Tuwari" },
- { "twx", "Tewe" },
- { "twy", "Tawoyan" },
- { "txa", "Tombonuo" },
- { "txb", "Tokharian B" },
- { "txc", "Tsetsaut" },
- { "txe", "Totoli" },
- { "txg", "Tangut" },
- { "txh", "Thracian" },
- { "txi", "Ikpeng" },
- { "txm", "Tomini" },
- { "txn", "West Tarangan" },
- { "txo", "Toto" },
- { "txq", "Tii" },
- { "txr", "Tartessian" },
- { "txs", "Tonsea" },
- { "txt", "Citak" },
- { "txu", "Kayapó" },
- { "txx", "Tatana" },
- { "txy", "Tanosy Malagasy" },
- { "tya", "Tauya" },
- { "tye", "Kyanga" },
- { "tyh", "O'du" },
- { "tyi", "Teke-Tsaayi" },
- { "tyj", "Tai Do" },
- { "tyl", "Thu Lao" },
- { "tyn", "Kombai" },
- { "typ", "Thaypan" },
- { "tyr", "Tai Daeng" },
- { "tys", "Tày Sa Pa" },
- { "tyt", "Tày Tac" },
- { "tyu", "Kua" },
- { "tyv", "Tuvinian" },
- { "tyx", "Teke-Tyee" },
- { "tyz", "Tày" },
- { "tza", "Tanzanian Sign Language" },
- { "tzh", "Tzeltal" },
- { "tzj", "Tz'utujil" },
- { "tzl", "Talossan" },
- { "tzm", "Central Atlas Tamazight" },
- { "tzn", "Tugun" },
- { "tzo", "Tzotzil" },
- { "tzx", "Tabriak" },
- { "uam", "Uamué" },
- { "uan", "Kuan" },
- { "uar", "Tairuma" },
- { "uba", "Ubang" },
- { "ubi", "Ubi" },
- { "ubl", "Buhi'non Bikol" },
- { "ubr", "Ubir" },
- { "ubu", "Umbu-Ungu" },
- { "uby", "Ubykh" },
- { "uda", "Uda" },
- { "ude", "Udihe" },
- { "udg", "Muduga" },
- { "udi", "Udi" },
- { "udj", "Ujir" },
- { "udl", "Wuzlam" },
- { "udm", "Udmurt" },
- { "udu", "Uduk" },
- { "ues", "Kioko" },
- { "ufi", "Ufim" },
- { "uga", "Ugaritic" },
- { "ugb", "Kuku-Ugbanh" },
- { "uge", "Ughele" },
- { "ugn", "Ugandan Sign Language" },
- { "ugo", "Ugong" },
- { "ugy", "Uruguayan Sign Language" },
- { "uha", "Uhami" },
- { "uhn", "Damal" },
- { "uig", "Uighur" },
- { "uis", "Uisai" },
- { "uiv", "Iyive" },
- { "uji", "Tanjijili" },
- { "uka", "Kaburi" },
- { "ukg", "Ukuriguma" },
- { "ukh", "Ukhwejo" },
- { "ukl", "Ukrainian Sign Language" },
- { "ukp", "Ukpe-Bayobiri" },
- { "ukq", "Ukwa" },
- { "ukr", "Ukrainian" },
- { "uks", "Urubú-Kaapor Sign Language" },
- { "uku", "Ukue" },
- { "ukw", "Ukwuani-Aboh-Ndoni" },
- { "uky", "Kuuk-Yak" },
- { "ula", "Fungwa" },
- { "ulb", "Ulukwumi" },
- { "ulc", "Ulch" },
- { "ule", "Lule" },
- { "ulf", "Usku" },
- { "uli", "Ulithian" },
- { "ulk", "Meriam" },
- { "ull", "Ullatan" },
- { "ulm", "Ulumanda'" },
- { "uln", "Unserdeutsch" },
- { "ulu", "Uma' Lung" },
- { "ulw", "Ulwa" },
- { "uma", "Umatilla" },
- { "umb", "Umbundu" },
- { "umc", "Marrucinian" },
- { "umd", "Umbindhamu" },
- { "umg", "Umbuygamu" },
- { "umi", "Ukit" },
- { "umm", "Umon" },
- { "umn", "Makyan Naga" },
- { "umo", "Umotína" },
- { "ump", "Umpila" },
- { "umr", "Umbugarla" },
- { "ums", "Pendau" },
- { "umu", "Munsee" },
- { "una", "North Watut" },
- { "und", "Undetermined" },
- { "une", "Uneme" },
- { "ung", "Ngarinyin" },
- { "unk", "Enawené-Nawé" },
- { "unm", "Unami" },
- { "unn", "Kurnai" },
- { "unr", "Mundari" },
- { "unu", "Unubahe" },
- { "unx", "Munda" },
- { "unz", "Unde Kaili" },
- { "uok", "Uokha" },
- { "upi", "Umeda" },
- { "upv", "Uripiv-Wala-Rano-Atchin" },
- { "ura", "Urarina" },
- { "urb", "Urubú-Kaapor" },
- { "urc", "Urningangg" },
- { "urd", "Urdu" },
- { "ure", "Uru" },
- { "urf", "Uradhi" },
- { "urg", "Urigina" },
- { "urh", "Urhobo" },
- { "uri", "Urim" },
- { "urk", "Urak Lawoi'" },
- { "url", "Urali" },
- { "urm", "Urapmin" },
- { "urn", "Uruangnirin" },
- { "uro", "Ura (Papua New Guinea)" },
- { "urp", "Uru-Pa-In" },
- { "urr", "Lehalurup" },
- { "urt", "Urat" },
- { "uru", "Urumi" },
- { "urv", "Uruava" },
- { "urw", "Sop" },
- { "urx", "Urimo" },
- { "ury", "Orya" },
- { "urz", "Uru-Eu-Wau-Wau" },
- { "usa", "Usarufa" },
- { "ush", "Ushojo" },
- { "usi", "Usui" },
- { "usk", "Usaghade" },
- { "usp", "Uspanteco" },
- { "usu", "Uya" },
- { "uta", "Otank" },
- { "ute", "Ute-Southern Paiute" },
- { "utp", "Amba (Solomon Islands)" },
- { "utr", "Etulo" },
- { "utu", "Utu" },
- { "uum", "Urum" },
- { "uun", "Kulon-Pazeh" },
- { "uur", "Ura (Vanuatu)" },
- { "uuu", "U" },
- { "uve", "West Uvean" },
- { "uvh", "Uri" },
- { "uvl", "Lote" },
- { "uwa", "Kuku-Uwanh" },
- { "uya", "Doko-Uyanga" },
- { "uzb", "Uzbek" },
- { "uzn", "Northern Uzbek" },
- { "uzs", "Southern Uzbek" },
- { "vaa", "Vaagri Booli" },
- { "vae", "Vale" },
- { "vaf", "Vafsi" },
- { "vag", "Vagla" },
- { "vah", "Varhadi-Nagpuri" },
- { "vai", "Vai" },
- { "vaj", "Vasekela Bushman" },
- { "val", "Vehes" },
- { "vam", "Vanimo" },
- { "van", "Valman" },
- { "vao", "Vao" },
- { "vap", "Vaiphei" },
- { "var", "Huarijio" },
- { "vas", "Vasavi" },
- { "vau", "Vanuma" },
- { "vav", "Varli" },
- { "vay", "Wayu" },
- { "vbb", "Southeast Babar" },
- { "vbk", "Southwestern Bontok" },
- { "vec", "Venetian" },
- { "ved", "Veddah" },
- { "vel", "Veluws" },
- { "vem", "Vemgo-Mabas" },
- { "ven", "Venda" },
- { "veo", "Ventureño" },
- { "vep", "Veps" },
- { "ver", "Mom Jango" },
- { "vgr", "Vaghri" },
- { "vgt", "Vlaamse Gebarentaal" },
- { "vic", "Virgin Islands Creole English" },
- { "vid", "Vidunda" },
- { "vie", "Vietnamese" },
- { "vif", "Vili" },
- { "vig", "Viemo" },
- { "vil", "Vilela" },
- { "vin", "Vinza" },
- { "vis", "Vishavan" },
- { "vit", "Viti" },
- { "viv", "Iduna" },
- { "vka", "Kariyarra" },
- { "vki", "Ija-Zuba" },
- { "vkj", "Kujarge" },
- { "vkk", "Kaur" },
- { "vkl", "Kulisusu" },
- { "vkm", "Kamakan" },
- { "vko", "Kodeoha" },
- { "vkp", "Korlai Creole Portuguese" },
- { "vkt", "Tenggarong Kutai Malay" },
- { "vku", "Kurrama" },
- { "vlp", "Valpei" },
- { "vls", "Vlaams" },
- { "vma", "Martuyhunira" },
- { "vmb", "Barbaram" },
- { "vmc", "Juxtlahuaca Mixtec" },
- { "vmd", "Mudu Koraga" },
- { "vme", "East Masela" },
- { "vmf", "Mainfränkisch" },
- { "vmg", "Lungalunga" },
- { "vmh", "Maraghei" },
- { "vmi", "Miwa" },
- { "vmj", "Ixtayutla Mixtec" },
- { "vmk", "Makhuwa-Shirima" },
- { "vml", "Malgana" },
- { "vmm", "Mitlatongo Mixtec" },
- { "vmp", "Soyaltepec Mazatec" },
- { "vmq", "Soyaltepec Mixtec" },
- { "vmr", "Marenje" },
- { "vms", "Moksela" },
- { "vmu", "Muluridyi" },
- { "vmv", "Valley Maidu" },
- { "vmw", "Makhuwa" },
- { "vmx", "Tamazola Mixtec" },
- { "vmy", "Ayautla Mazatec" },
- { "vmz", "Mazatlán Mazatec" },
- { "vnk", "Vano" },
- { "vnm", "Vinmavis" },
- { "vnp", "Vunapu" },
- { "vol", "Volapük" },
- { "vor", "Voro" },
- { "vot", "Votic" },
- { "vra", "Vera'a" },
- { "vro", "Võro" },
- { "vrs", "Varisi" },
- { "vrt", "Burmbar" },
- { "vsi", "Moldova Sign Language" },
- { "vsl", "Venezuelan Sign Language" },
- { "vsv", "Valencian Sign Language" },
- { "vto", "Vitou" },
- { "vum", "Vumbu" },
- { "vun", "Vunjo" },
- { "vut", "Vute" },
- { "vwa", "Awa (China)" },
- { "waa", "Walla Walla" },
- { "wab", "Wab" },
- { "wac", "Wasco-Wishram" },
- { "wad", "Wandamen" },
- { "wae", "Walser" },
- { "waf", "Wakoná" },
- { "wag", "Wa'ema" },
- { "wah", "Watubela" },
- { "wai", "Wares" },
- { "waj", "Waffa" },
- { "wal", "Wolaytta" },
- { "wam", "Wampanoag" },
- { "wan", "Wan" },
- { "wao", "Wappo" },
- { "wap", "Wapishana" },
- { "waq", "Wageman" },
- { "war", "Waray (Philippines)" },
- { "was", "Washo" },
- { "wat", "Kaninuwa" },
- { "wau", "Waurá" },
- { "wav", "Waka" },
- { "waw", "Waiwai" },
- { "wax", "Watam" },
- { "way", "Wayana" },
- { "waz", "Wampur" },
- { "wba", "Warao" },
- { "wbb", "Wabo" },
- { "wbe", "Waritai" },
- { "wbf", "Wara" },
- { "wbh", "Wanda" },
- { "wbi", "Vwanji" },
- { "wbj", "Alagwa" },
- { "wbk", "Waigali" },
- { "wbl", "Wakhi" },
- { "wbm", "Wa" },
- { "wbp", "Warlpiri" },
- { "wbq", "Waddar" },
- { "wbr", "Wagdi" },
- { "wbt", "Wanman" },
- { "wbv", "Wajarri" },
- { "wbw", "Woi" },
- { "wca", "Yanomámi" },
- { "wci", "Waci Gbe" },
- { "wdd", "Wandji" },
- { "wdg", "Wadaginam" },
- { "wdj", "Wadjiginy" },
- { "wdk", "Wadikali" },
- { "wdu", "Wadjigu" },
- { "wdy", "Wadjabangayi" },
- { "wea", "Wewaw" },
- { "wec", "Wè Western" },
- { "wed", "Wedau" },
- { "weg", "Wergaia" },
- { "weh", "Weh" },
- { "wei", "Kiunum" },
- { "wem", "Weme Gbe" },
- { "weo", "Wemale" },
- { "wep", "Westphalien" },
- { "wer", "Weri" },
- { "wes", "Cameroon Pidgin" },
- { "wet", "Perai" },
- { "weu", "Rawngtu Chin" },
- { "wew", "Wejewa" },
- { "wfg", "Yafi" },
- { "wga", "Wagaya" },
- { "wgb", "Wagawaga" },
- { "wgg", "Wangganguru" },
- { "wgi", "Wahgi" },
- { "wgo", "Waigeo" },
- { "wgu", "Wirangu" },
- { "wgy", "Warrgamay" },
- { "wha", "Manusela" },
- { "whg", "North Wahgi" },
- { "whk", "Wahau Kenyah" },
- { "whu", "Wahau Kayan" },
- { "wib", "Southern Toussian" },
- { "wic", "Wichita" },
- { "wie", "Wik-Epa" },
- { "wif", "Wik-Keyangan" },
- { "wig", "Wik-Ngathana" },
- { "wih", "Wik-Me'anha" },
- { "wii", "Minidien" },
- { "wij", "Wik-Iiyanh" },
- { "wik", "Wikalkan" },
- { "wil", "Wilawila" },
- { "wim", "Wik-Mungkan" },
- { "win", "Ho-Chunk" },
- { "wir", "Wiraféd" },
- { "wiu", "Wiru" },
- { "wiv", "Vitu" },
- { "wiy", "Wiyot" },
- { "wja", "Waja" },
- { "wji", "Warji" },
- { "wka", "Kw'adza" },
- { "wkb", "Kumbaran" },
- { "wkd", "Wakde" },
- { "wkl", "Kalanadi" },
- { "wku", "Kunduvadi" },
- { "wkw", "Wakawaka" },
- { "wky", "Wangkayutyuru" },
- { "wla", "Walio" },
- { "wlc", "Mwali Comorian" },
- { "wle", "Wolane" },
- { "wlg", "Kunbarlang" },
- { "wli", "Waioli" },
- { "wlk", "Wailaki" },
- { "wll", "Wali (Sudan)" },
- { "wlm", "Middle Welsh" },
- { "wln", "Walloon" },
- { "wlo", "Wolio" },
- { "wlr", "Wailapa" },
- { "wls", "Wallisian" },
- { "wlu", "Wuliwuli" },
- { "wlv", "Wichí Lhamtés Vejoz" },
- { "wlw", "Walak" },
- { "wlx", "Wali (Ghana)" },
- { "wly", "Waling" },
- { "wma", "Mawa (Nigeria)" },
- { "wmb", "Wambaya" },
- { "wmc", "Wamas" },
- { "wmd", "Mamaindé" },
- { "wme", "Wambule" },
- { "wmh", "Waima'a" },
- { "wmi", "Wamin" },
- { "wmm", "Maiwa (Indonesia)" },
- { "wmn", "Waamwang" },
- { "wmo", "Wom (Papua New Guinea)" },
- { "wms", "Wambon" },
- { "wmt", "Walmajarri" },
- { "wmw", "Mwani" },
- { "wmx", "Womo" },
- { "wnb", "Wanambre" },
- { "wnc", "Wantoat" },
- { "wnd", "Wandarang" },
- { "wne", "Waneci" },
- { "wng", "Wanggom" },
- { "wni", "Ndzwani Comorian" },
- { "wnk", "Wanukaka" },
- { "wnm", "Wanggamala" },
- { "wnn", "Wunumara" },
- { "wno", "Wano" },
- { "wnp", "Wanap" },
- { "wnu", "Usan" },
- { "wnw", "Wintu" },
- { "wny", "Wanyi" },
- { "woa", "Tyaraity" },
- { "wob", "Wè Northern" },
- { "woc", "Wogeo" },
- { "wod", "Wolani" },
- { "woe", "Woleaian" },
- { "wof", "Gambian Wolof" },
- { "wog", "Wogamusin" },
- { "woi", "Kamang" },
- { "wok", "Longto" },
- { "wol", "Wolof" },
- { "wom", "Wom (Nigeria)" },
- { "won", "Wongo" },
- { "woo", "Manombai" },
- { "wor", "Woria" },
- { "wos", "Hanga Hundi" },
- { "wow", "Wawonii" },
- { "woy", "Weyto" },
- { "wpc", "Maco" },
- { "wra", "Warapu" },
- { "wrb", "Warluwara" },
- { "wrd", "Warduji" },
- { "wrg", "Warungu" },
- { "wrh", "Wiradhuri" },
- { "wri", "Wariyangga" },
- { "wrk", "Garrwa" },
- { "wrl", "Warlmanpa" },
- { "wrm", "Warumungu" },
- { "wrn", "Warnang" },
- { "wro", "Worrorra" },
- { "wrp", "Waropen" },
- { "wrr", "Wardaman" },
- { "wrs", "Waris" },
- { "wru", "Waru" },
- { "wrv", "Waruna" },
- { "wrw", "Gugu Warra" },
- { "wrx", "Wae Rana" },
- { "wry", "Merwari" },
- { "wrz", "Waray (Australia)" },
- { "wsa", "Warembori" },
- { "wsi", "Wusi" },
- { "wsk", "Waskia" },
- { "wsr", "Owenia" },
- { "wss", "Wasa" },
- { "wsu", "Wasu" },
- { "wsv", "Wotapuri-Katarqalai" },
- { "wtf", "Watiwa" },
- { "wth", "Wathawurrung" },
- { "wti", "Berta" },
- { "wtk", "Watakataui" },
- { "wtm", "Mewati" },
- { "wtw", "Wotu" },
- { "wua", "Wikngenchera" },
- { "wub", "Wunambal" },
- { "wud", "Wudu" },
- { "wuh", "Wutunhua" },
- { "wul", "Silimo" },
- { "wum", "Wumbvu" },
- { "wun", "Bungu" },
- { "wur", "Wurrugu" },
- { "wut", "Wutung" },
- { "wuu", "Wu Chinese" },
- { "wuv", "Wuvulu-Aua" },
- { "wux", "Wulna" },
- { "wuy", "Wauyai" },
- { "wwa", "Waama" },
- { "wwb", "Wakabunga" },
- { "wwo", "Wetamut" },
- { "wwr", "Warrwa" },
- { "www", "Wawa" },
- { "wxa", "Waxianghua" },
- { "wxw", "Wardandi" },
- { "wya", "Wyandot" },
- { "wyb", "Wangaaybuwan-Ngiyambaa" },
- { "wyi", "Woiwurrung" },
- { "wym", "Wymysorys" },
- { "wyr", "Wayoró" },
- { "wyy", "Western Fijian" },
- { "xaa", "Andalusian Arabic" },
- { "xab", "Sambe" },
- { "xac", "Kachari" },
- { "xad", "Adai" },
- { "xae", "Aequian" },
- { "xag", "Aghwan" },
- { "xai", "Kaimbé" },
- { "xal", "Kalmyk" },
- { "xam", "Xam" },
- { "xan", "Xamtanga" },
- { "xao", "Khao" },
- { "xap", "Apalachee" },
- { "xaq", "Aquitanian" },
- { "xar", "Karami" },
- { "xas", "Kamas" },
- { "xat", "Katawixi" },
- { "xau", "Kauwera" },
- { "xav", "Xavánte" },
- { "xaw", "Kawaiisu" },
- { "xay", "Kayan Mahakam" },
- { "xba", "Kamba (Brazil)" },
- { "xbb", "Lower Burdekin" },
- { "xbc", "Bactrian" },
- { "xbd", "Bindal" },
- { "xbe", "Bigambal" },
- { "xbg", "Bunganditj" },
- { "xbi", "Kombio" },
- { "xbj", "Birrpayi" },
- { "xbm", "Middle Breton" },
- { "xbn", "Kenaboi" },
- { "xbo", "Bolgarian" },
- { "xbp", "Bibbulman" },
- { "xbr", "Kambera" },
- { "xbw", "Kambiwá" },
- { "xbx", "Kabixí" },
- { "xby", "Batyala" },
- { "xcb", "Cumbric" },
- { "xcc", "Camunic" },
- { "xce", "Celtiberian" },
- { "xcg", "Cisalpine Gaulish" },
- { "xch", "Chemakum" },
- { "xcl", "Classical Armenian" },
- { "xcm", "Comecrudo" },
- { "xcn", "Cotoname" },
- { "xco", "Chorasmian" },
- { "xcr", "Carian" },
- { "xct", "Classical Tibetan" },
- { "xcu", "Curonian" },
- { "xcv", "Chuvantsy" },
- { "xcw", "Coahuilteco" },
- { "xcy", "Cayuse" },
- { "xda", "Darkinyung" },
- { "xdc", "Dacian" },
- { "xdk", "Dharuk" },
- { "xdm", "Edomite" },
- { "xdy", "Malayic Dayak" },
- { "xeb", "Eblan" },
- { "xed", "Hdi" },
- { "xeg", "Xegwi" },
- { "xel", "Kelo" },
- { "xem", "Kembayan" },
- { "xep", "Epi-Olmec" },
- { "xer", "Xerénte" },
- { "xes", "Kesawai" },
- { "xet", "Xetá" },
- { "xeu", "Keoru-Ahia" },
- { "xfa", "Faliscan" },
- { "xga", "Galatian" },
- { "xgb", "Gbin" },
- { "xgd", "Gudang" },
- { "xgf", "Gabrielino-Fernandeño" },
- { "xgg", "Goreng" },
- { "xgi", "Garingbal" },
- { "xgl", "Galindan" },
- { "xgm", "Guwinmal" },
- { "xgr", "Garza" },
- { "xgu", "Unggumi" },
- { "xgw", "Guwa" },
- { "xha", "Harami" },
- { "xhc", "Hunnic" },
- { "xhd", "Hadrami" },
- { "xhe", "Khetrani" },
- { "xho", "Xhosa" },
- { "xhr", "Hernican" },
- { "xht", "Hattic" },
- { "xhu", "Hurrian" },
- { "xhv", "Khua" },
- { "xib", "Iberian" },
- { "xii", "Xiri" },
- { "xil", "Illyrian" },
- { "xin", "Xinca" },
- { "xip", "Xipináwa" },
- { "xir", "Xiriâna" },
- { "xiv", "Indus Valley Language" },
- { "xiy", "Xipaya" },
- { "xjb", "Minjungbal" },
- { "xjt", "Jaitmatang" },
- { "xka", "Kalkoti" },
- { "xkb", "Northern Nago" },
- { "xkc", "Kho'ini" },
- { "xkd", "Mendalam Kayan" },
- { "xke", "Kereho" },
- { "xkf", "Khengkha" },
- { "xkg", "Kagoro" },
- { "xkh", "Karahawyana" },
- { "xki", "Kenyan Sign Language" },
- { "xkj", "Kajali" },
- { "xkk", "Kaco'" },
- { "xkl", "Mainstream Kenyah" },
- { "xkn", "Kayan River Kayan" },
- { "xko", "Kiorr" },
- { "xkp", "Kabatei" },
- { "xkq", "Koroni" },
- { "xkr", "Xakriabá" },
- { "xks", "Kumbewaha" },
- { "xkt", "Kantosi" },
- { "xku", "Kaamba" },
- { "xkv", "Kgalagadi" },
- { "xkw", "Kembra" },
- { "xkx", "Karore" },
- { "xky", "Uma' Lasan" },
- { "xkz", "Kurtokha" },
- { "xla", "Kamula" },
- { "xlb", "Loup B" },
- { "xlc", "Lycian" },
- { "xld", "Lydian" },
- { "xle", "Lemnian" },
- { "xlg", "Ligurian (Ancient)" },
- { "xli", "Liburnian" },
- { "xln", "Alanic" },
- { "xlo", "Loup A" },
- { "xlp", "Lepontic" },
- { "xls", "Lusitanian" },
- { "xlu", "Cuneiform Luwian" },
- { "xly", "Elymian" },
- { "xma", "Mushungulu" },
- { "xmb", "Mbonga" },
- { "xmc", "Makhuwa-Marrevone" },
- { "xmd", "Mbudum" },
- { "xme", "Median" },
- { "xmf", "Mingrelian" },
- { "xmg", "Mengaka" },
- { "xmh", "Kuku-Muminh" },
- { "xmj", "Majera" },
- { "xmk", "Ancient Macedonian" },
- { "xml", "Malaysian Sign Language" },
- { "xmm", "Manado Malay" },
- { "xmn", "Manichaean Middle Persian" },
- { "xmo", "Morerebi" },
- { "xmp", "Kuku-Mu'inh" },
- { "xmq", "Kuku-Mangk" },
- { "xmr", "Meroitic" },
- { "xms", "Moroccan Sign Language" },
- { "xmt", "Matbat" },
- { "xmu", "Kamu" },
- { "xmv", "Antankarana Malagasy" },
- { "xmw", "Tsimihety Malagasy" },
- { "xmx", "Maden" },
- { "xmy", "Mayaguduna" },
- { "xmz", "Mori Bawah" },
- { "xna", "Ancient North Arabian" },
- { "xnb", "Kanakanabu" },
- { "xng", "Middle Mongolian" },
- { "xnh", "Kuanhua" },
- { "xni", "Ngarigu" },
- { "xnk", "Nganakarti" },
- { "xnn", "Northern Kankanay" },
- { "xno", "Anglo-Norman" },
- { "xnr", "Kangri" },
- { "xns", "Kanashi" },
- { "xnt", "Narragansett" },
- { "xnu", "Nukunul" },
- { "xny", "Nyiyaparli" },
- { "xnz", "Kenzi" },
- { "xoc", "O'chi'chi'" },
- { "xod", "Kokoda" },
- { "xog", "Soga" },
- { "xoi", "Kominimung" },
- { "xok", "Xokleng" },
- { "xom", "Komo (Sudan)" },
- { "xon", "Konkomba" },
- { "xoo", "Xukurú" },
- { "xop", "Kopar" },
- { "xor", "Korubo" },
- { "xow", "Kowaki" },
- { "xpa", "Pirriya" },
- { "xpc", "Pecheneg" },
- { "xpe", "Liberia Kpelle" },
- { "xpg", "Phrygian" },
- { "xpi", "Pictish" },
- { "xpj", "Mpalitjanh" },
- { "xpk", "Kulina Pano" },
- { "xpm", "Pumpokol" },
- { "xpn", "Kapinawá" },
- { "xpo", "Pochutec" },
- { "xpp", "Puyo-Paekche" },
- { "xpq", "Mohegan-Pequot" },
- { "xpr", "Parthian" },
- { "xps", "Pisidian" },
- { "xpt", "Punthamara" },
- { "xpu", "Punic" },
- { "xpy", "Puyo" },
- { "xqa", "Karakhanid" },
- { "xqt", "Qatabanian" },
- { "xra", "Krahô" },
- { "xrb", "Eastern Karaboro" },
- { "xrd", "Gundungurra" },
- { "xre", "Kreye" },
- { "xrg", "Minang" },
- { "xri", "Krikati-Timbira" },
- { "xrm", "Armazic" },
- { "xrn", "Arin" },
- { "xrq", "Karranga" },
- { "xrr", "Raetic" },
- { "xrt", "Aranama-Tamique" },
- { "xru", "Marriammu" },
- { "xrw", "Karawa" },
- { "xsa", "Sabaean" },
- { "xsb", "Sambal" },
- { "xsc", "Scythian" },
- { "xsd", "Sidetic" },
- { "xse", "Sempan" },
- { "xsh", "Shamang" },
- { "xsi", "Sio" },
- { "xsj", "Subi" },
- { "xsl", "South Slavey" },
- { "xsm", "Kasem" },
- { "xsn", "Sanga (Nigeria)" },
- { "xso", "Solano" },
- { "xsp", "Silopi" },
- { "xsq", "Makhuwa-Saka" },
- { "xsr", "Sherpa" },
- { "xss", "Assan" },
- { "xsu", "Sanumá" },
- { "xsv", "Sudovian" },
- { "xsy", "Saisiyat" },
- { "xta", "Alcozauca Mixtec" },
- { "xtb", "Chazumba Mixtec" },
- { "xtc", "Katcha-Kadugli-Miri" },
- { "xtd", "Diuxi-Tilantongo Mixtec" },
- { "xte", "Ketengban" },
- { "xtg", "Transalpine Gaulish" },
- { "xth", "Yitha Yitha" },
- { "xti", "Sinicahua Mixtec" },
- { "xtj", "San Juan Teita Mixtec" },
- { "xtl", "Tijaltepec Mixtec" },
- { "xtm", "Magdalena Peñasco Mixtec" },
- { "xtn", "Northern Tlaxiaco Mixtec" },
- { "xto", "Tokharian A" },
- { "xtp", "San Miguel Piedras Mixtec" },
- { "xtq", "Tumshuqese" },
- { "xtr", "Early Tripuri" },
- { "xts", "Sindihui Mixtec" },
- { "xtt", "Tacahua Mixtec" },
- { "xtu", "Cuyamecalco Mixtec" },
- { "xtv", "Thawa" },
- { "xtw", "Tawandê" },
- { "xty", "Yoloxochitl Mixtec" },
- { "xtz", "Tasmanian" },
- { "xua", "Alu Kurumba" },
- { "xub", "Betta Kurumba" },
- { "xud", "Umiida" },
- { "xug", "Kunigami" },
- { "xuj", "Jennu Kurumba" },
- { "xul", "Ngunawal" },
- { "xum", "Umbrian" },
- { "xun", "Unggaranggu" },
- { "xuo", "Kuo" },
- { "xup", "Upper Umpqua" },
- { "xur", "Urartian" },
- { "xut", "Kuthant" },
- { "xuu", "Kxoe" },
- { "xve", "Venetic" },
- { "xvi", "Kamviri" },
- { "xvn", "Vandalic" },
- { "xvo", "Volscian" },
- { "xvs", "Vestinian" },
- { "xwa", "Kwaza" },
- { "xwc", "Woccon" },
- { "xwd", "Wadi Wadi" },
- { "xwe", "Xwela Gbe" },
- { "xwg", "Kwegu" },
- { "xwj", "Wajuk" },
- { "xwk", "Wangkumara" },
- { "xwl", "Western Xwla Gbe" },
- { "xwo", "Written Oirat" },
- { "xwr", "Kwerba Mamberamo" },
- { "xwt", "Wotjobaluk" },
- { "xww", "Wemba Wemba" },
- { "xxb", "Boro (Ghana)" },
- { "xxk", "Ke'o" },
- { "xxm", "Minkin" },
- { "xxr", "Koropó" },
- { "xxt", "Tambora" },
- { "xya", "Yaygir" },
- { "xyb", "Yandjibara" },
- { "xyj", "Mayi-Yapi" },
- { "xyk", "Mayi-Kulan" },
- { "xyl", "Yalakalore" },
- { "xyt", "Mayi-Thakurti" },
- { "xyy", "Yorta Yorta" },
- { "xzh", "Zhang-Zhung" },
- { "xzm", "Zemgalian" },
- { "xzp", "Ancient Zapotec" },
- { "yaa", "Yaminahua" },
- { "yab", "Yuhup" },
- { "yac", "Pass Valley Yali" },
- { "yad", "Yagua" },
- { "yae", "Pumé" },
- { "yaf", "Yaka (Democratic Republic of Congo)" },
- { "yag", "Yámana" },
- { "yah", "Yazgulyam" },
- { "yai", "Yagnobi" },
- { "yaj", "Banda-Yangere" },
- { "yak", "Yakama" },
- { "yal", "Yalunka" },
- { "yam", "Yamba" },
- { "yan", "Mayangna" },
- { "yao", "Yao" },
- { "yap", "Yapese" },
- { "yaq", "Yaqui" },
- { "yar", "Yabarana" },
- { "yas", "Nugunu (Cameroon)" },
- { "yat", "Yambeta" },
- { "yau", "Yuwana" },
- { "yav", "Yangben" },
- { "yaw", "Yawalapití" },
- { "yax", "Yauma" },
- { "yay", "Agwagwune" },
- { "yaz", "Lokaa" },
- { "yba", "Yala" },
- { "ybb", "Yemba" },
- { "ybe", "West Yugur" },
- { "ybh", "Yakha" },
- { "ybi", "Yamphu" },
- { "ybj", "Hasha" },
- { "ybk", "Bokha" },
- { "ybl", "Yukuben" },
- { "ybm", "Yaben" },
- { "ybn", "Yabaâna" },
- { "ybo", "Yabong" },
- { "ybx", "Yawiyo" },
- { "yby", "Yaweyuha" },
- { "ych", "Chesu" },
- { "ycl", "Lolopo" },
- { "ycn", "Yucuna" },
- { "ycp", "Chepya" },
- { "yda", "Yanda" },
- { "ydd", "Eastern Yiddish" },
- { "yde", "Yangum Dey" },
- { "ydg", "Yidgha" },
- { "ydk", "Yoidik" },
- { "yds", "Yiddish Sign Language" },
- { "yea", "Ravula" },
- { "yec", "Yeniche" },
- { "yee", "Yimas" },
- { "yei", "Yeni" },
- { "yej", "Yevanic" },
- { "yel", "Yela" },
- { "yer", "Tarok" },
- { "yes", "Nyankpa" },
- { "yet", "Yetfa" },
- { "yeu", "Yerukula" },
- { "yev", "Yapunda" },
- { "yey", "Yeyi" },
- { "yga", "Malyangapa" },
- { "ygi", "Yiningayi" },
- { "ygl", "Yangum Gel" },
- { "ygm", "Yagomi" },
- { "ygp", "Gepo" },
- { "ygr", "Yagaria" },
- { "ygu", "Yugul" },
- { "ygw", "Yagwoia" },
- { "yha", "Baha Buyang" },
- { "yhd", "Judeo-Iraqi Arabic" },
- { "yhl", "Hlepho Phowa" },
- { "yia", "Yinggarda" },
- { "yid", "Yiddish" },
- { "yif", "Ache" },
- { "yig", "Wusa Nasu" },
- { "yih", "Western Yiddish" },
- { "yii", "Yidiny" },
- { "yij", "Yindjibarndi" },
- { "yik", "Dongshanba Lalo" },
- { "yil", "Yindjilandji" },
- { "yim", "Yimchungru Naga" },
- { "yin", "Yinchia" },
- { "yip", "Pholo" },
- { "yiq", "Miqie" },
- { "yir", "North Awyu" },
- { "yis", "Yis" },
- { "yit", "Eastern Lalu" },
- { "yiu", "Awu" },
- { "yiv", "Northern Nisu" },
- { "yix", "Axi Yi" },
- { "yiz", "Azhe" },
- { "yka", "Yakan" },
- { "ykg", "Northern Yukaghir" },
- { "yki", "Yoke" },
- { "ykk", "Yakaikeke" },
- { "ykl", "Khlula" },
- { "ykm", "Kap" },
- { "ykn", "Kua-nsi" },
- { "yko", "Yasa" },
- { "ykr", "Yekora" },
- { "ykt", "Kathu" },
- { "yku", "Kuamasi" },
- { "yky", "Yakoma" },
- { "yla", "Yaul" },
- { "ylb", "Yaleba" },
- { "yle", "Yele" },
- { "ylg", "Yelogu" },
- { "yli", "Angguruk Yali" },
- { "yll", "Yil" },
- { "ylm", "Limi" },
- { "yln", "Langnian Buyang" },
- { "ylo", "Naluo Yi" },
- { "ylr", "Yalarnnga" },
- { "ylu", "Aribwaung" },
- { "yly", "Nyâlayu" },
- { "ymb", "Yambes" },
- { "ymc", "Southern Muji" },
- { "ymd", "Muda" },
- { "yme", "Yameo" },
- { "ymg", "Yamongeri" },
- { "ymh", "Mili" },
- { "ymi", "Moji" },
- { "ymk", "Makwe" },
- { "yml", "Iamalele" },
- { "ymm", "Maay" },
- { "ymn", "Yamna" },
- { "ymo", "Yangum Mon" },
- { "ymp", "Yamap" },
- { "ymq", "Qila Muji" },
- { "ymr", "Malasar" },
- { "yms", "Mysian" },
- { "ymt", "Mator-Taygi-Karagas" },
- { "ymx", "Northern Muji" },
- { "ymz", "Muzi" },
- { "yna", "Aluo" },
- { "ynd", "Yandruwandha" },
- { "yne", "Lang'e" },
- { "yng", "Yango" },
- { "ynh", "Yangho" },
- { "ynk", "Naukan Yupik" },
- { "ynl", "Yangulam" },
- { "ynn", "Yana" },
- { "yno", "Yong" },
- { "ynq", "Yendang" },
- { "yns", "Yansi" },
- { "ynu", "Yahuna" },
- { "yob", "Yoba" },
- { "yog", "Yogad" },
- { "yoi", "Yonaguni" },
- { "yok", "Yokuts" },
- { "yol", "Yola" },
- { "yom", "Yombe" },
- { "yon", "Yongkom" },
- { "yor", "Yoruba" },
- { "yot", "Yotti" },
- { "yox", "Yoron" },
- { "yoy", "Yoy" },
- { "ypa", "Phala" },
- { "ypb", "Labo Phowa" },
- { "ypg", "Phola" },
- { "yph", "Phupha" },
- { "ypm", "Phuma" },
- { "ypn", "Ani Phowa" },
- { "ypo", "Alo Phola" },
- { "ypp", "Phupa" },
- { "ypz", "Phuza" },
- { "yra", "Yerakai" },
- { "yrb", "Yareba" },
- { "yre", "Yaouré" },
- { "yri", "Yarí" },
- { "yrk", "Nenets" },
- { "yrl", "Nhengatu" },
- { "yrm", "Yirrk-Mel" },
- { "yrn", "Yerong" },
- { "yrs", "Yarsun" },
- { "yrw", "Yarawata" },
- { "yry", "Yarluyandi" },
- { "ysc", "Yassic" },
- { "ysd", "Samatao" },
- { "ysg", "Sonaga" },
- { "ysl", "Yugoslavian Sign Language" },
- { "ysn", "Sani" },
- { "yso", "Nisi (China)" },
- { "ysp", "Southern Lolopo" },
- { "ysr", "Sirenik Yupik" },
- { "yss", "Yessan-Mayo" },
- { "ysy", "Sanie" },
- { "yta", "Talu" },
- { "ytl", "Tanglang" },
- { "ytp", "Thopho" },
- { "ytw", "Yout Wam" },
- { "yty", "Yatay" },
- { "yua", "Yucateco" },
- { "yub", "Yugambal" },
- { "yuc", "Yuchi" },
- { "yud", "Judeo-Tripolitanian Arabic" },
- { "yue", "Yue Chinese" },
- { "yuf", "Havasupai-Walapai-Yavapai" },
- { "yug", "Yug" },
- { "yui", "Yurutí" },
- { "yuj", "Karkar-Yuri" },
- { "yuk", "Yuki" },
- { "yul", "Yulu" },
- { "yum", "Quechan" },
- { "yun", "Bena (Nigeria)" },
- { "yup", "Yukpa" },
- { "yuq", "Yuqui" },
- { "yur", "Yurok" },
- { "yut", "Yopno" },
- { "yuu", "Yugh" },
- { "yuw", "Yau (Morobe Province)" },
- { "yux", "Southern Yukaghir" },
- { "yuy", "East Yugur" },
- { "yuz", "Yuracare" },
- { "yva", "Yawa" },
- { "yvt", "Yavitero" },
- { "ywa", "Kalou" },
- { "ywg", "Yinhawangka" },
- { "ywl", "Western Lalu" },
- { "ywn", "Yawanawa" },
- { "ywq", "Wuding-Luquan Yi" },
- { "ywr", "Yawuru" },
- { "ywt", "Xishanba Lalo" },
- { "ywu", "Wumeng Nasu" },
- { "yww", "Yawarawarga" },
- { "yxa", "Mayawali" },
- { "yxg", "Yagara" },
- { "yxl", "Yardliyawarra" },
- { "yxm", "Yinwum" },
- { "yxu", "Yuyu" },
- { "yxy", "Yabula Yabula" },
- { "yyr", "Yir Yoront" },
- { "yyu", "Yau (Sandaun Province)" },
- { "yyz", "Ayizi" },
- { "yzg", "E'ma Buyang" },
- { "yzk", "Zokhuo" },
- { "zaa", "Sierra de Juárez Zapotec" },
- { "zab", "San Juan Guelavía Zapotec" },
- { "zac", "Ocotlán Zapotec" },
- { "zad", "Cajonos Zapotec" },
- { "zae", "Yareni Zapotec" },
- { "zaf", "Ayoquesco Zapotec" },
- { "zag", "Zaghawa" },
- { "zah", "Zangwal" },
- { "zai", "Isthmus Zapotec" },
- { "zaj", "Zaramo" },
- { "zak", "Zanaki" },
- { "zal", "Zauzou" },
- { "zam", "Miahuatlán Zapotec" },
- { "zao", "Ozolotepec Zapotec" },
- { "zap", "Zapotec" },
- { "zaq", "Aloápam Zapotec" },
- { "zar", "Rincón Zapotec" },
- { "zas", "Santo Domingo Albarradas Zapotec" },
- { "zat", "Tabaa Zapotec" },
- { "zau", "Zangskari" },
- { "zav", "Yatzachi Zapotec" },
- { "zaw", "Mitla Zapotec" },
- { "zax", "Xadani Zapotec" },
- { "zay", "Zayse-Zergulla" },
- { "zaz", "Zari" },
- { "zbc", "Central Berawan" },
- { "zbe", "East Berawan" },
- { "zbl", "Blissymbols" },
- { "zbt", "Batui" },
- { "zbw", "West Berawan" },
- { "zca", "Coatecas Altas Zapotec" },
- { "zch", "Central Hongshuihe Zhuang" },
- { "zdj", "Ngazidja Comorian" },
- { "zea", "Zeeuws" },
- { "zeg", "Zenag" },
- { "zeh", "Eastern Hongshuihe Zhuang" },
- { "zen", "Zenaga" },
- { "zga", "Kinga" },
- { "zgb", "Guibei Zhuang" },
- { "zgh", "Standard Moroccan Tamazight" },
- { "zgm", "Minz Zhuang" },
- { "zgn", "Guibian Zhuang" },
- { "zgr", "Magori" },
- { "zha", "Zhuang" },
- { "zhb", "Zhaba" },
- { "zhd", "Dai Zhuang" },
- { "zhi", "Zhire" },
- { "zhn", "Nong Zhuang" },
- { "zho", "Chinese" },
- { "zhw", "Zhoa" },
- { "zia", "Zia" },
- { "zib", "Zimbabwe Sign Language" },
- { "zik", "Zimakani" },
- { "zil", "Zialo" },
- { "zim", "Mesme" },
- { "zin", "Zinza" },
- { "zir", "Ziriya" },
- { "ziw", "Zigula" },
- { "ziz", "Zizilivakan" },
- { "zka", "Kaimbulawa" },
- { "zkb", "Koibal" },
- { "zkd", "Kadu" },
- { "zkg", "Koguryo" },
- { "zkh", "Khorezmian" },
- { "zkk", "Karankawa" },
- { "zkn", "Kanan" },
- { "zko", "Kott" },
- { "zkp", "São Paulo Kaingáng" },
- { "zkr", "Zakhring" },
- { "zkt", "Kitan" },
- { "zku", "Kaurna" },
- { "zkv", "Krevinian" },
- { "zkz", "Khazar" },
- { "zlj", "Liujiang Zhuang" },
- { "zlm", "Malay (individual language)" },
- { "zln", "Lianshan Zhuang" },
- { "zlq", "Liuqian Zhuang" },
- { "zma", "Manda (Australia)" },
- { "zmb", "Zimba" },
- { "zmc", "Margany" },
- { "zmd", "Maridan" },
- { "zme", "Mangerr" },
- { "zmf", "Mfinu" },
- { "zmg", "Marti Ke" },
- { "zmh", "Makolkol" },
- { "zmi", "Negeri Sembilan Malay" },
- { "zmj", "Maridjabin" },
- { "zmk", "Mandandanyi" },
- { "zml", "Madngele" },
- { "zmm", "Marimanindji" },
- { "zmn", "Mbangwe" },
- { "zmo", "Molo" },
- { "zmp", "Mpuono" },
- { "zmq", "Mituku" },
- { "zmr", "Maranunggu" },
- { "zms", "Mbesa" },
- { "zmt", "Maringarr" },
- { "zmu", "Muruwari" },
- { "zmv", "Mbariman-Gudhinma" },
- { "zmw", "Mbo (Democratic Republic of Congo)" },
- { "zmx", "Bomitaba" },
- { "zmy", "Mariyedi" },
- { "zmz", "Mbandja" },
- { "zna", "Zan Gula" },
- { "zne", "Zande (individual language)" },
- { "zng", "Mang" },
- { "znk", "Manangkari" },
- { "zns", "Mangas" },
- { "zoc", "Copainalá Zoque" },
- { "zoh", "Chimalapa Zoque" },
- { "zom", "Zou" },
- { "zoo", "Asunción Mixtepec Zapotec" },
- { "zoq", "Tabasco Zoque" },
- { "zor", "Rayón Zoque" },
- { "zos", "Francisco León Zoque" },
- { "zpa", "Lachiguiri Zapotec" },
- { "zpb", "Yautepec Zapotec" },
- { "zpc", "Choapan Zapotec" },
- { "zpd", "Southeastern Ixtlán Zapotec" },
- { "zpe", "Petapa Zapotec" },
- { "zpf", "San Pedro Quiatoni Zapotec" },
- { "zpg", "Guevea De Humboldt Zapotec" },
- { "zph", "Totomachapan Zapotec" },
- { "zpi", "Santa María Quiegolani Zapotec" },
- { "zpj", "Quiavicuzas Zapotec" },
- { "zpk", "Tlacolulita Zapotec" },
- { "zpl", "Lachixío Zapotec" },
- { "zpm", "Mixtepec Zapotec" },
- { "zpn", "Santa Inés Yatzechi Zapotec" },
- { "zpo", "Amatlán Zapotec" },
- { "zpp", "El Alto Zapotec" },
- { "zpq", "Zoogocho Zapotec" },
- { "zpr", "Santiago Xanica Zapotec" },
- { "zps", "Coatlán Zapotec" },
- { "zpt", "San Vicente Coatlán Zapotec" },
- { "zpu", "Yalálag Zapotec" },
- { "zpv", "Chichicapan Zapotec" },
- { "zpw", "Zaniza Zapotec" },
- { "zpx", "San Baltazar Loxicha Zapotec" },
- { "zpy", "Mazaltepec Zapotec" },
- { "zpz", "Texmelucan Zapotec" },
- { "zqe", "Qiubei Zhuang" },
- { "zra", "Kara (Korea)" },
- { "zrg", "Mirgan" },
- { "zrn", "Zerenkel" },
- { "zro", "Záparo" },
- { "zrp", "Zarphatic" },
- { "zrs", "Mairasi" },
- { "zsa", "Sarasira" },
- { "zsk", "Kaskean" },
- { "zsl", "Zambian Sign Language" },
- { "zsm", "Standard Malay" },
- { "zsr", "Southern Rincon Zapotec" },
- { "zsu", "Sukurum" },
- { "zte", "Elotepec Zapotec" },
- { "ztg", "Xanaguía Zapotec" },
- { "ztl", "Lapaguía-Guivini Zapotec" },
- { "ztm", "San Agustín Mixtepec Zapotec" },
- { "ztn", "Santa Catarina Albarradas Zapotec" },
- { "ztp", "Loxicha Zapotec" },
- { "ztq", "Quioquitani-Quierí Zapotec" },
- { "zts", "Tilquiapan Zapotec" },
- { "ztt", "Tejalapan Zapotec" },
- { "ztu", "Güilá Zapotec" },
- { "ztx", "Zaachila Zapotec" },
- { "zty", "Yatee Zapotec" },
- { "zua", "Zeem" },
- { "zuh", "Tokano" },
- { "zul", "Zulu" },
- { "zum", "Kumzari" },
- { "zun", "Zuni" },
- { "zuy", "Zumaya" },
- { "zwa", "Zay" },
- { "zxx", "No linguistic content" },
- { "zyb", "Yongbei Zhuang" },
- { "zyg", "Yang Zhuang" },
- { "zyj", "Youjiang Zhuang" },
- { "zyn", "Yongnan Zhuang" },
- { "zyp", "Zyphe Chin" },
- { "zza", "Zaza" },
- { "zzj", "Zuojiang Zhuang" },
-};
-static int niso639_3= sizeof( iso639_3 ) / sizeof( iso639_3[0] );
-
-char *
-iso639_3_from_code( const char *code )
-{
- int i;
- for ( i=0; i<niso639_3; ++i ) {
- if ( !strcasecmp( iso639_3[i].code, code ) )
- return iso639_3[i].language;
- }
- return NULL;
-}
-
-char *
-iso639_3_from_name( const char *name )
-{
- int i;
- for ( i=0; i<niso639_3; ++i ) {
- if ( !strcasecmp( iso639_3[i].language, name ) )
- return iso639_3[i].code;
- }
- return NULL;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/iso639_3.h b/support/texlab/crates/bibutils_sys/src/iso639_3.h
deleted file mode 100644
index ee1d627e0a..0000000000
--- a/support/texlab/crates/bibutils_sys/src/iso639_3.h
+++ /dev/null
@@ -1,10 +0,0 @@
-/*
- * iso639_3.h
- */
-#ifndef ISO639_3_H
-#define ISO639_3_H
-
-char * iso639_3_from_code( const char *code );
-char * iso639_3_from_name( const char *name );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/latex.c b/support/texlab/crates/bibutils_sys/src/latex.c
deleted file mode 100644
index 34b5f19c3f..0000000000
--- a/support/texlab/crates/bibutils_sys/src/latex.c
+++ /dev/null
@@ -1,597 +0,0 @@
-/*
- * latex.c
- *
- * convert between latex special chars and unicode
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "latex.h"
-
-#define LATEX_COMBO (0) /* 'combo' no need for protection on output */
-#define LATEX_MACRO (1) /* 'macro_name' to be protected by {\macro_name} on output */
-#define LATEX_MATH (2) /* 'math_expression' to be protected by $math_expression$ on output */
-
-struct latex_chars {
- unsigned int unicode; /* unicode code point */
- unsigned char type; /* LATEX_COMBO/LATEX_MACRO/LATEX_MATH */
- char *out; /* unadorned latex combination for output */
- char *variant[3]; /* possible variations on input */
-};
-
-static struct latex_chars latex_chars[] = {
-
- /* LaTeX special characters */
- { 32, LATEX_COMBO, " ", { "\\ ", NULL, NULL } }, /* escaping the space is used to avoid extra space after periods */
- { 35, LATEX_MACRO, "#", { "\\#", NULL, NULL } }, /* Number/pound/hash sign */
- { 36, LATEX_MACRO, "$", { "\\$", NULL, NULL } }, /* Dollar Sign */
- { 37, LATEX_MACRO, "%", { "\\%", NULL, NULL } }, /* Percent Sign */
- { 38, LATEX_MACRO, "&", { "\\&", NULL, NULL } }, /* Ampersand */
- { 95, LATEX_MACRO, "_", { "\\_", NULL, NULL } }, /* Underscore alone indicates subscript */
- { 123, LATEX_MACRO, "{", { "\\{", "{\\textbraceleft}", "\\textbraceleft" } }, /* Left Curly Bracket */
- { 125, LATEX_MACRO, "}", { "\\}", "{\\textbraceright}", "\\textbraceright" } }, /* Right Curly Bracket */
- { 92, LATEX_MACRO, "backslash", { "{\\backslash}", "\\backslash", NULL } }, /* Backslash */
- { 176, LATEX_MACRO, "textdegree", { "{\\textdegree}", "\\textdegree", "^\\circ" } }, /* Degree sign */
- { 126, LATEX_MACRO, "textasciitilde", { "{\\textasciitilde}", "\\textasciitilde", "\\~{}" } }, /* Tilde in latex */
-/* fix sticky spaces "~" in bibtex token cleaning--allows tokens to be parsed properly */
-
- /* Latin Capital A */
- { 192, LATEX_MACRO, "`A", { "{\\`A}", "\\`{A}", "\\`A" } }, /* with grave */
- { 193, LATEX_MACRO, "'A", { "{\\'A}", "\\'{A}", "\\'A" } }, /* with acute */
- { 194, LATEX_MACRO, "^A", { "{\\^A}", "\\^{A}", "\\^A" } }, /* with circumflex */
- { 195, LATEX_MACRO, "~A", { "{\\~A}", "\\~{A}", "\\~A" } }, /* with tilde */
- { 196, LATEX_MACRO, "\"A", { "{\\\"A}", "\\\"{A}", "\\\"A" } }, /* with diuresis */
- { 197, LATEX_MACRO, "AA", { "{\\AA}", "{\\r{A}}", "\\r{A}"} }, /* with ring above */
- { 256, LATEX_MACRO, "={A}", { "{\\={A}}", "\\={A}", "\\=A" } }, /* with macron */
- { 258, LATEX_MACRO, "u{A}", { "{\\u{A}}", "\\u{A}", "\\u A" } }, /* with breve */
- { 260, LATEX_MACRO, "k{A}", { "{\\k{A}}", "\\k{A}", "\\k A" } }, /* with ogonek */
- { 461, LATEX_MACRO, "v{A}", { "{\\v{A}}", "\\v{A}", "\\v A" } }, /* with caron */
-
- /* Latin Small a */
- { 224, LATEX_MACRO, "`a", { "{\\`a}", "\\`{a}", "\\`a" } }, /* with grave */
- { 225, LATEX_MACRO, "'a", { "{\\'a}", "\\'{a}", "\\'a" } }, /* with acute */
- { 226, LATEX_MACRO, "^a", { "{\\^a}", "\\^{a}", "\\^a" } }, /* with circumflex */
- { 227, LATEX_MACRO, "~a", { "{\\~a}", "\\~{a}", "\\~a" } }, /* with tilde */
- { 228, LATEX_MACRO, "\"a", { "{\\\"a}", "\\\"{a}", "\\\"a" } }, /* with diuresis */
- { 229, LATEX_MACRO, "aa", { "{\\aa}", "{\\r{a}}", "\\r{a}"} }, /* with ring above */
- { 257, LATEX_MACRO, "={a}", { "{\\={a}}", "\\={a}", "\\=a" } }, /* with macron */
- { 259, LATEX_MACRO, "u{a}", { "{\\u{a}}", "\\u{a}", "\\u a" } }, /* with breve */
- { 261, LATEX_MACRO, "k{a}", { "{\\k{a}}", "\\k{a}", "\\k a" } }, /* with ogonek */
- { 462, LATEX_MACRO, "v{a}", { "{\\v{a}}", "\\v{a}", "\\v a" } }, /* with caron */
-
- { 198, LATEX_MACRO, "AE", { "{\\AE}", "\\AE", NULL } }, /* Latin Capital AE */
- { 230, LATEX_MACRO, "ae", { "{\\ae}", "\\ae", NULL } }, /* Latin Small ae */
-
- /* Latin Capital C */
- { 199, LATEX_MACRO, "c{C}", { "{\\c{C}}", "\\c{C}", "\\c c" } }, /* with cedilla */
- { 262, LATEX_MACRO, "'{C}", { "{\\'{C}}", "\\'{C}", "\\'C" } }, /* with acute */
- { 264, LATEX_MACRO, "^{C}", { "{\\^{C}}", "\\^{C}", "\\^C" } }, /* with circumflex */
- { 266, LATEX_MACRO, ".{C}", { "{\\.{C}}", "\\.{C}", "\\.C" } }, /* with dot above */
- { 268, LATEX_MACRO, "v{C}", { "{\\v{C}}", "\\v{C}", "\\v C" } }, /* with caron (hacek) */
-
- /* Latin Small c */
- { 231, LATEX_MACRO, "c{c}", { "{\\c{c}}", "\\c{c}", "\\c C" } }, /* with cedilla*/
- { 263, LATEX_MACRO, "'{c}", { "{\\'{c}}", "\\'{c}", "\\'c" } }, /* with acute */
- { 265, LATEX_MACRO, "^{c}", { "{\\^{c}}", "\\^{c}", "\\^c" } }, /* with circumflex */
- { 267, LATEX_MACRO, ".{c}", { "{\\.{c}}", "\\.{c}", "\\.c" } }, /* with dot above */
- { 269, LATEX_MACRO, "v{c}", { "{\\v{c}}", "\\v{c}", "\\v c" } }, /* with caron (hacek) */
-
- /* Latin Capital D */
- { 270, LATEX_MACRO, "v{D}", { "{\\v{D}}", "\\v{D}", "\\v D" } }, /* with caron */
- { 272, LATEX_MACRO, "DJ", { "{\\DJ}", NULL, NULL } }, /* with stroke */
-
- /* Latin Small d */
- { 271, LATEX_MACRO, "v{d}", { "{\\v{d}}", "\\v{d}", "\\v d" } }, /* with caron */
- { 273, LATEX_MACRO, "dj", { "{\\dj}", NULL, NULL } }, /* with stroke */
-
- /* Latin Capital E */
- { 200, LATEX_MACRO, "`E", { "{\\`E}", "\\`{E}", "\\`E" } }, /* with grave */
- { 201, LATEX_MACRO, "'E", { "{\\'E}", "\\'{E}", "\\'E" } }, /* with acute */
- { 202, LATEX_MACRO, "^E", { "{\\^E}", "\\^{E}", "\\^E" } }, /* with circumflex */
- { 203, LATEX_MACRO, "\"E", { "{\\\"E}", "\\\"{E}", "\\\"E" } }, /* with diuresis */
- { 274, LATEX_MACRO, "={E}", { "{\\={E}}", "\\={E}", "\\=E" } }, /* with macron */
- { 276, LATEX_MACRO, "u{E}", { "{\\u{E}}", "\\u{E}", "\\u E" } }, /* with breve */
- { 278, LATEX_MACRO, ".{E}", { "{\\.{E}}", "\\.{E}", "\\.E" } }, /* with dot above */
- { 280, LATEX_MACRO, "k{E}", { "{\\k{E}}", "\\k{E}", "\\k E" } }, /* with ogonek */
- { 282, LATEX_MACRO, "v{E}", { "{\\v{E}}", "\\v{E}", "\\v E" } }, /* with caron */
-
- /* Latin Small e */
- { 232, LATEX_MACRO, "`e", { "{\\`e}", "\\`{e}", "\\`e" } }, /* with grave */
- { 233, LATEX_MACRO, "'e", { "{\\'e}", "\\'{e}", "\\'e" } }, /* with acute */
- { 234, LATEX_MACRO, "^e", { "{\\^e}", "\\^{e}", "\\^e" } }, /* with circumflex */
- { 235, LATEX_MACRO, "\"e", { "{\\\"e}", "\\\"{e}", "\\\"e" } }, /* with diuresis */
- { 275, LATEX_MACRO, "={e}", { "{\\={e}}", "\\={e}", "\\=e" } }, /* with macron */
- { 277, LATEX_MACRO, "u{e}", { "{\\u{e}}", "\\u{e}", "\\u e" } }, /* with breve */
- { 279, LATEX_MACRO, ".{e}", { "{\\.{e}}", "\\.{e}", "\\.e" } }, /* with dot above */
- { 281, LATEX_MACRO, "k{e}", { "{\\k{e}}", "\\k{e}", "\\k e" } }, /* with ogonek */
- { 283, LATEX_MACRO, "v{e}", { "{\\v{e}}", "\\v{e}", "\\v e" } }, /* with caron */
-
- /* Latin Capital G */
- { 284, LATEX_MACRO, "^{G}", { "{\\^{G}}", "\\^{G}", "\\^G" } }, /* with circumflex */
- { 286, LATEX_MACRO, "u{G}", { "{\\u{G}}", "\\u{G}", "\\u G" } }, /* with breve */
- { 288, LATEX_MACRO, ".{G}", { "{\\.{G}}", "\\.{G}", "\\.G" } }, /* with dot above */
- { 290, LATEX_MACRO, "c{G}", { "{\\c{G}}", "\\c{G}", "\\c G" } }, /* with cedilla */
- { 486, LATEX_MACRO, "v{G}", { "{\\v{G}}", "\\v{G}", "\\v G" } }, /* with caron */
- { 500, LATEX_MACRO, "'{G}", { "{\\'{G}}", "\\'{G}", "\\'G" } }, /* with acute */
-
- /* Latin Small g */
- { 285, LATEX_MACRO, "^{g}", { "{\\^{g}}", "\\^{g}", "\\^g" } }, /* with circumflex */
- { 287, LATEX_MACRO, "u{g}", { "{\\u{g}}", "\\u{g}", "\\u g" } }, /* with breve */
- { 289, LATEX_MACRO, ".{g}", { "{\\.{g}}", "\\.{g}", "\\.g" } }, /* with dot above */
- { 291, LATEX_MACRO, "c{g}", { "{\\c{g}}", "\\c{g}", "\\c g" } }, /* with cedilla */
- { 487, LATEX_MACRO, "v{g}", { "{\\v{g}}", "\\v{g}", "\\v g" } }, /* with caron */
- { 501, LATEX_MACRO, "'{g}", { "{\\'{g}}", "\\'{g}", "\\'g" } }, /* with acute */
-
- /* Latin Capital H */
- { 292, LATEX_MACRO, "^{H}", { "{\\^{H}}", "\\^{H}", "\\^H" } }, /* with circumflex */
-/* { 294, LATEX_MACRO, "", { NULL, NULL, NULL } },*//* with stroke */
-
- /* Latin Capital h */
- { 293, LATEX_MACRO, "^{h}", { "{\\^{h}}", "\\^{h}", "\\^h" } }, /* with circumflex */
-/* { 295, LATEX_MACRO, "", { NULL, NULL, NULL } },*//* with stroke */
-
- /* Latin Capital I */
- { 204, LATEX_MACRO, "`I", { "{\\`I}", "\\`{I}", "\\`I" } }, /* with grave */
- { 205, LATEX_MACRO, "'I", { "{\\'I}", "\\'{I}", "\\'I" } }, /* with acute */
- { 206, LATEX_MACRO, "^I", { "{\\^I}", "\\^{I}", "\\^I" } }, /* with circumflex */
- { 207, LATEX_MACRO, "\"I", { "{\\\"I}", "\\\"{I}", "\\\"I" } }, /* with diuresis */
- { 296, LATEX_MACRO, "~{I}", { "{\\~{I}}", "\\~{I}", "\\~I" } }, /* with tilde */
- { 298, LATEX_MACRO, "={I}", { "{\\={I}}", "\\={I}", "\\=I" } }, /* with macron */
- { 300, LATEX_MACRO, "u{I}", { "{\\u{I}}", "\\u{I}", "\\u I" } }, /* with breve */
- { 302, LATEX_MACRO, "k{I}", { "{\\k{I}}", "\\k{I}", "\\k I" } }, /* with ogonek */
- { 304, LATEX_MACRO, ".{I}", { "{\\.{I}}", "\\.{I}", "\\. I" } }, /* with dot above */
- { 463, LATEX_MACRO, "v{I}", { "{\\v{I}}", "\\v{I}", "\\v I" } }, /* with caron */
-
- /* Latin Small i */
- { 236, LATEX_MACRO, "`i", { "{\\`i}", "\\`{i}", "\\`i" } }, /* with grave */
- { 237, LATEX_MACRO, "'i", { "{\\'i}", "\\'{i}", "\\'i" } }, /* with acute */
- { 238, LATEX_MACRO, "^i", { "{\\^i}", "\\^{i}", "\\^i" } }, /* with circumflex */
- { 239, LATEX_MACRO, "\"i", { "{\\\"i}", "\\\"{i}", "\\\"i" } }, /* with diuresis */
- { 303, LATEX_MACRO, "k{i}", { "{\\k{i}}", "\\k{i}", "\\k i" } }, /* with ogonek */
- /* Latex "\i" has no dot on "i" */
- { 305, LATEX_MACRO, "i", { "{\\i}", "\\i{}", NULL } }, /* without dot above */
- { 236, LATEX_MACRO, "`{\\i}", { "{\\`\\i}", "\\`{\\i}", "\\`\\i" } }, /* with grave */
- { 237, LATEX_MACRO, "'{\\i}", { "{\\'\\i}", "\\'{\\i}", "\\'\\i" } }, /* with acute */
- { 238, LATEX_MACRO, "^{\\i}", { "{\\^\\i}", "\\^{\\i}", "\\^\\i" } }, /* with circumflex */
- { 239, LATEX_MACRO, "\"{\\i}", { "{\\\"\\i}", "\\\"{\\i}","\\\"\\i" } }, /* with diuresis */
- { 297, LATEX_MACRO, "`{\\i}", { "{\\~{\\i}}", "\\~{\\i}", "\\~\\i{}" } }, /* with tilde */
- { 299, LATEX_MACRO, "={\\i}", { "{\\={\\i}}", "\\={\\i}", "\\=\\i{}" } }, /* with macron */
- { 301, LATEX_MACRO, "u{\\i}", { "{\\u{\\i}}", "\\u{\\i}", "\\u\\i{}" } }, /* with breve */
- { 464, LATEX_MACRO, "v{\\i}", { "{\\v \\i{}}", "\\v \\i{}", NULL } }, /* with caron */
-
-/* { 306, LATEX_MACRO, "", { NULL, NULL, NULL } },*/ /* Latin Capital IJ */
-/* { 307, LATEX_MACRO, "", { NULL, NULL, NULL } },*/ /* Latin Small ij */
-
- /* Latin Capital J */
- { 308, LATEX_MACRO, "^{J}", { "{\\^{J}}", "\\^{J}", "\\^J" } }, /* with circumflex */
-
- /* Latin Small j */
- { 309, LATEX_MACRO, "^{j}", { "{\\^{j}}", "\\^{j}", "\\^j" } }, /* with circumflex */
-
- /* Latin Capital K */
- { 310, LATEX_MACRO, "c{K}", { "{\\c{K}}", "\\c{K}", "\\c K" } }, /* with cedilla */
- { 488, LATEX_MACRO, "v{K}", { "{\\v{K}}", "\\v{K}", "\\v K" } }, /* with caron */
-
- /* Latin Small k */
- { 311, LATEX_MACRO, "c{k}", { "{\\c{k}}", "\\c{k}", "\\c k" } }, /* with cedilla */
- { 489, LATEX_MACRO, "v{k}", { "{\\v{k}}", "\\v{k}", "\\v k" } }, /* with caron */
-
- /* Latin Capital L */
- { 313, LATEX_MACRO, "'{L}", { "{\\'{L}}", "\\'{L}", "\\'L" } }, /* with acute */
- { 315, LATEX_MACRO, "c{L}", { "{\\c{L}}", "\\c{L}", "\\c L" } }, /* with cedilla */
- { 317, LATEX_MACRO, "v{L}", { "{\\v{L}}", "\\v{l}", "\\v L" } }, /* with caron */
- { 319, LATEX_COMBO, "{L\\hspace{-0.35em}$\\cdot$}", { "{L\\hspace{-0.35em}$\\cdot$}","L\\hspace{-0.35em}$\\cdot$", NULL } }, /* with middle dot */
- { 321, LATEX_MACRO, "L", { "{\\L}", "{\\L{}}", "\\L{}" } }, /* with stroke */
-
- /* Latin Small l */
- { 314, LATEX_MACRO, "'{l}", { "{\\'{l}}", "\\'{l}", "\\'l" } }, /* with acute */
- { 316, LATEX_MACRO, "c{l}", { "{\\c{l}}", "\\c{l}", "\\c l" } }, /* with cedilla */
- { 318, LATEX_MACRO, "v{l}", { "{\\v{l}}", "\\v{l}", "\\v l" } }, /* with caron */
- { 320, LATEX_COMBO, "{l$\\cdot$}", { "{l$\\cdot$}","l$\\cdot$", NULL } }, /* with middle dot */
- { 322, LATEX_MACRO, "l", { "{\\l}", "{\\l{}}", "\\l{}" } }, /* with stroke */
-
- /* Latin Capital N */
- { 209, LATEX_MACRO, "~{N}", { "{\\~{N}}", "\\~{N}", "\\~N" } }, /* with tilde */
- { 323, LATEX_MACRO, "'{N}", { "{\\'{N}}", "\\'{N}", "\\'N" } }, /* with acute */
- { 325, LATEX_MACRO, "c{N}", { "{\\c{N}}", "\\c{N}", "\\c N" } }, /* with cedilla */
- { 327, LATEX_MACRO, "v{N}", { "{\\v{N}}", "\\v{N}", "\\v N" } }, /* with caron */
-
- /* Latin Small n */
- { 241, LATEX_MACRO, "~{n}", { "{\\~{n}}", "\\~{n}", "\\~n" } }, /* with tilde */
- { 324, LATEX_MACRO, "'{n}", { "{\\'{n}}", "\\'{n}", "\\'n" } }, /* with acute */
- { 326, LATEX_MACRO, "c{n}", { "{\\c{n}}", "\\c{n}", "\\c N" } }, /* with cedilla */
- { 328, LATEX_MACRO, "v{n}", { "{\\v{n}}", "\\v{n}", "\\v n" } }, /* with caron */
- { 329, LATEX_MACRO, "n", { "\\n", NULL, NULL } }, /* preceeded by apostrophe */
-
- /* Latin Capital O */
- { 210, LATEX_MACRO, "`O", { "{\\`O}", "\\`{O}", "\\`O" } }, /* with grave */
- { 211, LATEX_MACRO, "'O", { "{\\'O}", "\\'{O}", "\\'O" } }, /* with acute */
- { 212, LATEX_MACRO, "^O", { "{\\^O}", "\\^{O}", "\\^O" } }, /* with circumflex */
- { 213, LATEX_MACRO, "~O", { "{\\~O}", "\\~{O}", "\\~O" } }, /* with tilde */
- { 214, LATEX_MACRO, "\"O", { "{\\\"O}", "\\\"{O}", "\\\"O" } }, /* with diaeresis */
- { 216, LATEX_MACRO, "O", { "{\\O}", "\\O", NULL } }, /* with stroke */
- { 332, LATEX_MACRO, "={O}", { "{\\={O}}", "\\={O}", "\\=O" } }, /* with macron */
- { 334, LATEX_MACRO, "u{O}", { "{\\u{O}}", "\\u{O}", "\\u O" } }, /* with breve */
- { 336, LATEX_MACRO, "H{O}", { "{\\H{O}}", "\\H{O}", "\\H O" } }, /* with double acute */
- { 465, LATEX_MACRO, "v{O}", { "{\\v{O}}", "\\v{O}", "\\v O" } }, /* with caron */
- { 490, LATEX_MACRO, "k{O}", { "{\\k{O}}", "\\k{O}", "\\k O" } }, /* with ogonek */
-
- /* Latin Small o */
- { 242, LATEX_MACRO, "`o", { "{\\`o}", "\\`{o}", "\\`o" } }, /* with grave */
- { 243, LATEX_MACRO, "'o", { "{\\'o}", "\\'{o}", "\\'o" } }, /* with acute */
- { 244, LATEX_MACRO, "^o", { "{\\^o}", "\\^{o}", "\\^o" } }, /* with circumflex */
- { 245, LATEX_MACRO, "~o", { "{\\~o}", "\\~{o}", "\\~o" } }, /* with tilde */
- { 246, LATEX_MACRO, "\"o", { "{\\\"o}", "\\\"{o}", "\\\"o" } }, /* with diaeresis */
- { 248, LATEX_MACRO, "o", { "{\\o}", "\\o", NULL } }, /* with stroke */
- { 333, LATEX_MACRO, "={o}", { "{\\={o}}", "\\={o}", "\\=o" } }, /* with macron */
- { 335, LATEX_MACRO, "u{o}", { "{\\u{o}}", "\\u{o}", "\\u o" } }, /* with breve */
- { 337, LATEX_MACRO, "H{o}", { "{\\H{o}}", "\\H{o}", "\\H o" } }, /* with double acute */
- { 466, LATEX_MACRO, "v{o}", { "{\\v{o}}", "\\v{o}", "\\v o" } }, /* with caron */
- { 491, LATEX_MACRO, "k{o}", { "{\\k{o}}", "\\k{o}", "\\k o" } }, /* with ogonek */
-
- { 338, LATEX_MACRO, "OE", { "{\\OE}", "\\OE", NULL } }, /* Latin Capital OE */
- { 339, LATEX_MACRO, "oe", { "{\\oe}", "\\oe", NULL } }, /* Latin Small oe */
-
- /* Latin Capital R */
- { 340, LATEX_MACRO, "'R", { "{\\'{R}}", "\\'{R}", "\\'R" } }, /* with acute */
- { 342, LATEX_MACRO, "c{R}", { "{\\c{R}}", "\\c{R}", "\\c R" } }, /* with cedilla */
- { 344, LATEX_MACRO, "v{R}", { "{\\v{R}}", "\\v{R}", "\\v R" } }, /* with caron */
-
- /* Latin Small r */
- { 341, LATEX_MACRO, "'r", { "{\\'{r}}", "\\'{r}", "\\'r" } }, /* with acute */
- { 343, LATEX_MACRO, "c{r}", { "{\\c{r}}", "\\c{r}", "\\c r" } }, /* with cedilla */
- { 345, LATEX_MACRO, "v{r}", { "{\\v{r}}", "\\v{r}", "\\v r" } }, /* with caron */
-
- /* Latin Capital S */
- { 346, LATEX_MACRO, "'{S}", { "{\\'{S}}", "\\'{S}", "\\'S" } }, /* with acute */
- { 348, LATEX_MACRO, "^{S}", { "{\\^{S}}", "\\^{S}", "\\^S" } }, /* with circumflex */
- { 350, LATEX_MACRO, "c{S}", { "{\\c{S}}", "\\c{S}", "\\c S" } }, /* with cedilla */
- { 352, LATEX_MACRO, "v{S}", { "{\\v{S}}", "\\v{S}", "\\v S" } }, /* with caron */
-
- /* Latin Small s */
- { 347, LATEX_MACRO, "'{s}", { "{\\'{s}}", "\\'{s}", "\\'s" } }, /* with acute */
- { 349, LATEX_MACRO, "^{s}", { "{\\^{s}}", "\\^{s}", "\\^s" } }, /* with circumflex */
- { 351, LATEX_MACRO, "c{s}", { "{\\c{s}}", "\\c{s}", "\\c s" } }, /* with cedilla */
- { 353, LATEX_MACRO, "v{s}", { "{\\v{s}}", "\\v{s}", "\\v s" } }, /* with caron */
-
- /* Latin Capital T */
- { 354, LATEX_MACRO, "c{T}", { "{\\c{T}}", "\\c{T}", NULL } }, /* with cedilla */
- { 356, LATEX_MACRO, "v{T}", { "{\\v{T}}", "\\v{T}", NULL } }, /* with caron */
-/* { 358, LATEX_MACRO, "", { NULL, NULL, NULL } },*//* with stroke */
-
- /* Latin Small t */
- { 355, LATEX_MACRO, "c{T}", { "{\\c{t}}", "\\c{t}", NULL } }, /* with cedilla */
- { 357, LATEX_MACRO, "v{T}", { "{\\v{t}}", "\\v{t}", NULL } }, /* with caron */
-/* { 359, LATEX_MACRO, "", { NULL, NULL, NULL } },*//* with stroke */
-
- { 223, LATEX_MACRO, "ss", { "{\\ss}", "\\ss", NULL } }, /* German sz ligature, "sharp s" */
-
- /* Latin Capital U */
- { 217, LATEX_MACRO, "`U", { "{\\`U}", "\\`{U}", "\\`U" } }, /* with grave */
- { 218, LATEX_MACRO, "'U", { "{\\'U}", "\\'{U}", "\\'U" } }, /* with acute */
- { 219, LATEX_MACRO, "^U", { "{\\^U}", "\\^{U}", "\\^U" } }, /* with circumflex */
- { 220, LATEX_MACRO, "\"U", { "{\\\"U}", "\\\"{U}","\\\"U" } }, /* with diaeresis */
- { 360, LATEX_MACRO, "~{U}", { "{\\~{U}}", "\\~{U}", "\\~U" } }, /* with tilde */
- { 362, LATEX_MACRO, "={U}", { "{\\={U}}", "\\={U}", "\\=U" } }, /* with macron */
- { 364, LATEX_MACRO, "u{U}", { "{\\u{U}}", "\\u{U}", "\\u U" } }, /* with breve */
- { 366, LATEX_MACRO, "r{U}", { "{\\r{U}}", "\\r{U}", "\\r U" } }, /* with ring above */
- { 368, LATEX_MACRO, "H{U}", { "{\\H{U}}", "\\H{U}", "\\H U" } }, /* with double acute */
- { 370, LATEX_MACRO, "k{U}", { "{\\k{U}}", "\\k{U}", "\\k U" } }, /* with ogonek */
- { 467, LATEX_MACRO, "v{U}", { "{\\v{U}}", "\\v{U}", "\\v U" } }, /* with caron */
-
- /* Latin Small u */
- { 249, LATEX_MACRO, "`u", { "{\\`u}", "\\`{u}", "\\`u" } }, /* with grave */
- { 250, LATEX_MACRO, "'u", { "{\\'u}", "\\'{u}", "\\'u" } }, /* with acute */
- { 251, LATEX_MACRO, "^u", { "{\\^u}", "\\^{u}", "\\^u" } }, /* with circumflex */
- { 252, LATEX_MACRO, "\"u", { "{\\\"u}", "\\\"{u}","\\\"u" } }, /* with diaeresis */
- { 361, LATEX_MACRO, "~{u}", { "{\\~{u}}", "\\~{u}", NULL } }, /* with tilde */
- { 363, LATEX_MACRO, "={u}", { "{\\={u}}", "\\={u}", "\\=u" } }, /* with macron */
- { 365, LATEX_MACRO, "u{u}", { "{\\u{u}}", "\\u{u}", "\\u u" } }, /* with breve */
- { 367, LATEX_MACRO, "r{u}", { "{\\r{u}}", "\\r{u}", "\\r u" } }, /* with ring above */
- { 369, LATEX_MACRO, "H{u}", { "{\\H{u}}", "\\H{u}", "\\H u" } }, /* with double acute */
- { 371, LATEX_MACRO, "k{u}", { "{\\k{u}}", "\\k{u}", "\\k u" } }, /* with ogonek */
- { 468, LATEX_MACRO, "v{u}", { "{\\v{u}}", "\\v{u}", "\\v u" } }, /* with caron */
-
- /* Latin Capital W */
- { 372, LATEX_MACRO, "^{W}", { "{\\^{W}}", "\\^{W}", "\\^W" } }, /* with circumflex */
-
- /* Latin Small w */
- { 373, LATEX_MACRO, "^{w}", { "{\\^{w}}", "\\^{w}", "\\^w" } }, /* with circumflex */
-
- /* Latin Capital Y */
- { 221, LATEX_MACRO, "'{Y}", { "{\\'{Y}}", "\\'{Y}", "\\'Y" } }, /* with acute */
- { 374, LATEX_MACRO, "^{Y}", { "{\\^{Y}}", "\\^{Y}", "\\^Y" } }, /* with circumflex */
- { 376, LATEX_MACRO, "\"{Y}",{ "{\\\"{Y}}","\\\"{Y}","\\\"Y" } }, /* with diaeresis */
-
- /* Latin Small y */
- { 253, LATEX_MACRO, "'y", { "{\\'y}", "\\'{y}", "\\'y" } }, /* with acute */
- { 255, LATEX_MACRO, "\"y", { "{\\\"y}", "\\\"{y}","\\\"y" } }, /* with diaeresis */
- { 375, LATEX_MACRO, "^{y}", { "{\\^{y}}","\\^{y}", "\\^y" } }, /* with circumflex */
-
- /* Latin Capital Z */
- { 377, LATEX_MACRO, "'{Z}", { "{\\'{Z}}","\\'{Z}", "\\'Z" } }, /* with acute */
- { 379, LATEX_MACRO, ".{Z}", { "{\\.{Z}}","\\.{Z}", "\\.Z" } }, /* with dot above */
- { 381, LATEX_MACRO, "v{Z}", { "{\\v{Z}}","\\v{Z}", "\\v Z" } }, /* with caron */
-
- /* Latin Small z */
- { 378, LATEX_MACRO, "'{z}", { "{\\'{z}}","\\'{z}", "\\'z" } }, /* with acute */
- { 380, LATEX_MACRO, ".{z}", { "{\\.{z}}","\\.{z}", "\\.z" } }, /* with dot above */
- { 382, LATEX_MACRO, "v{z}", { "{\\v{z}}","\\v{z}", "\\v z" } }, /* with caron */
-
-
- /* Needs to be before \nu */
- { 8203,LATEX_MATH, "null", { "$\\null$", "\\null", NULL } }, /* No space &#x200B; */
-
- { 913, LATEX_MATH, "Alpha", { "$\\Alpha$", "\\Alpha", NULL } }, /*GREEK CAPITAL LETTERALPHA*/
- { 914, LATEX_MATH, "Beta", { "$\\Beta$", "\\Beta", NULL } }, /*GREEK CAPITAL LETTERBETA*/
- { 915, LATEX_MATH, "Gamma", { "$\\Gamma$", "\\Gamma", NULL } }, /*GREEK CAPITAL LETTERGAMMA*/
- { 916, LATEX_MATH, "Delta", { "$\\Delta$", "\\Delta", NULL } }, /*GREEK CAPITAL LETTERDELTA*/
- { 917, LATEX_MATH, "Epsilon", { "$\\Epsilon$", "\\Epsilon", NULL } }, /*GREEK CAPITAL LETTEREPSILON*/
- { 918, LATEX_MATH, "Zeta", { "$\\Zeta$", "\\Zeta", NULL } }, /*GREEK CAPITAL LETTERZETA*/
- { 919, LATEX_MATH, "Eta", { "$\\Eta$", "\\Eta", NULL } }, /*GREEK CAPITAL LETTERETA*/
- { 920, LATEX_MATH, "Theta", { "$\\Theta$", "\\Theta", NULL } }, /*GREEK CAPITAL LETTERTHETA*/
- { 921, LATEX_MATH, "Iota", { "$\\Iota$", "\\Iota", NULL } }, /*GREEK CAPITAL LETTERIOTA*/
- { 922, LATEX_MATH, "Kappa", { "$\\Kappa$", "\\Kappa", NULL } }, /*GREEK CAPITAL LETTERKAPPA*/
- { 923, LATEX_MATH, "Lambda", { "$\\Lambda$", "\\Lambda", NULL } }, /*GREEK CAPITAL LETTERLAMDA*/
- { 924, LATEX_MATH, "Mu", { "$\\Mu$", "\\Mu", NULL } }, /*GREEK CAPITAL LETTERMU*/
- { 925, LATEX_MATH, "Nu", { "$\\Nu$", "\\Nu", NULL } }, /*GREEK CAPITAL LETTERNU*/
- { 926, LATEX_MATH, "Xi", { "$\\Xi$", "\\Xi", NULL } }, /*GREEK CAPITAL LETTERXI*/
- { 927, LATEX_MATH, "Omicron", { "$\\Omicron$", "\\Omicron", NULL } }, /*GREEK CAPITAL LETTEROMICRON*/
- { 928, LATEX_MATH, "Pi", { "$\\Pi$", "\\Pi", NULL } }, /*GREEK CAPITAL LETTERPI*/
- { 929, LATEX_MATH, "Rho", { "$\\Rho$", "\\Rho", NULL } }, /*GREEK CAPITAL LETTERRHO*/
- { 931, LATEX_MATH, "Sigma", { "$\\Sigma$", "\\Sigma", NULL } }, /*GREEK CAPITAL LETTERSIGMA*/
- { 932, LATEX_MATH, "Tau", { "$\\Tau$", "\\Tau", NULL } }, /*GREEK CAPITAL LETTERTAU*/
- { 933, LATEX_MATH, "Upsilon", { "$\\Upsilon$", "\\Upsilon", NULL } }, /*GREEK CAPITAL LETTERUPSILON*/
- { 934, LATEX_MATH, "Phi", { "$\\Phi$", "\\Phi", NULL } }, /*GREEK CAPITAL LETTERPHI*/
- { 935, LATEX_MATH, "Chi", { "$\\Chi$", "\\Chi", NULL } }, /*GREEK CAPITAL LETTERCHI*/
- { 936, LATEX_MATH, "Psi", { "$\\Psi$", "\\Psi", NULL } }, /*GREEK CAPITAL LETTERPSI*/
- { 937, LATEX_MATH, "Omega", { "$\\Omega$", "\\Omega", NULL } }, /*GREEK CAPITAL LETTEROMEGA*/
- /* 902 = GREEK CAPITAL LETTER ALPHAWITHTONOS*/
- /* 904 = GREEK CAPITAL LETTER EPSILONWITHTONOS*/
- /* 905 = GREEK CAPITAL LETTER ETAWITHTONOS*/
- /* 938 = GREEK CAPITAL LETTER IOTAWITHDIALYTIKA*/
- /* 906 = GREEK CAPITAL LETTER IOTAWITHTONOS*/
- /* 908 = GREEK CAPITAL LETTER OMICRONWITHTONOS*/
- /* 939 = GREEK CAPITAL LETTER UPSILONWITHDIALYTIKA*/
- /* 910 = GREEK CAPITAL LETTER UPSILONWITHTONOS*/
- /* 911, = GREEK CAPITAL LETTER OMEGAWITHTONOS*/
-
- { 945, LATEX_MATH, "alpha", { "$\\alpha$", "\\alpha", NULL } }, /*GREEK SMALL LETTER ALPHA*/
- { 946, LATEX_MATH, "beta", { "$\\beta$", "\\beta", NULL } }, /*GREEK SMALL LETTER BETA*/
- { 968, LATEX_MATH, "psi", { "$\\psi$", "\\psi", NULL } }, /*GREEK SMALL LETTER PSI*/
- { 948, LATEX_MATH, "delta", { "$\\delta$", "\\delta", NULL } }, /*GREEK SMALL LETTER DELTA*/
- { 949, LATEX_MATH, "epsilon", { "$\\epsilon$", "\\epsilon", NULL } }, /*GREEK SMALL LETTER EPSILON*/
- { 966, LATEX_MATH, "phi", { "$\\phi$", "\\phi", NULL } }, /*GREEK SMALL LETTER PHI*/
- { 947, LATEX_MATH, "gamma", { "$\\gamma$", "\\gamma", NULL } }, /*GREEK SMALL LETTER GAMMA*/
- { 951, LATEX_MATH, "eta", { "$\\eta$", "\\eta", NULL } }, /*GREEK SMALL LETTER ETA*/
- { 953, LATEX_MATH, "iota", { "$\\iota$", "\\iota", NULL } }, /*GREEK SMALL LETTER IOTA*/
- { 958, LATEX_MATH, "xi", { "$\\xi$", "\\xi", NULL } }, /*GREEK SMALL LETTER XI*/
- { 954, LATEX_MATH, "kappa", { "$\\kappa$", "\\kappa" , NULL } }, /*GREEK SMALL LETTER KAPPA*/
- { 955, LATEX_MATH, "lambda", { "$\\lambda$", "\\lambda", NULL } }, /*GREEK SMALL LETTER LAMDA*/
- { 956, LATEX_MATH, "mu", { "$\\mu$", "\\mu", NULL } }, /*GREEK SMALL LETTER MU*/
- { 957, LATEX_MATH, "nu", { "$\\nu$", "\\nu", NULL } }, /*GREEK SMALL LETTER NU*/
- { 959, LATEX_MATH, "omicron", { "$\\omicron$", "\\omicron", NULL } }, /*GREEK SMALL LETTER OMICRON*/
- { 960, LATEX_MATH, "pi", { "$\\pi$", "\\pi", NULL } }, /*GREEK SMALL LETTER PI*/
- { 961, LATEX_MATH, "rho", { "$\\rho$", "\\rho", NULL } }, /*GREEK SMALL LETTER RHO*/
- { 963, LATEX_MATH, "sigma", { "$\\sigma$", "\\sigma", NULL } }, /*GREEK SMALL LETTER SIGMA*/
- { 964, LATEX_MATH, "tau", { "$\\tau$", "\\tau", NULL } }, /*GREEK SMALL LETTER TAU*/
- { 952, LATEX_MATH, "theta", { "$\\theta$", "\\theta", NULL } }, /*GREEK SMALL LETTER THETA*/
- { 969, LATEX_MATH, "omega", { "$\\omega$", "\\omega", NULL } }, /*GREEK SMALL LETTER OMEGA*/
- { 967, LATEX_MATH, "chi", { "$\\chi$", "\\chi", NULL } }, /*GREEK SMALL LETTER CHI*/
- { 965, LATEX_MATH, "upsilon", { "$\\upsilon$", "\\upsilon", NULL } }, /*GREEK SMALL LETTER UPSILON*/
- { 950, LATEX_MATH, "zeta", { "$\\zeta$", "\\zeta", NULL } }, /*GREEK SMALL LETTER ZETA*/
- /* 940 = GREEK SMALL LETTER ALPHAWITHTONOS*/
- /* 941 = GREEK SMALL LETTER EPSILONWITHTONOS*/
- /* 942 = GREEK SMALL LETTER ETAWITHTONOS */
- /* 912 = GREEK SMALL LETTER IOTAWITHDIALYTIKAANDTONOS*/
- /* 943 = GREEK SMALL LETTER IOTAWITHTONOS */
- /* 970 = GREEK SMALL LETTER IOTAWITHDIALYTIKA */
- /* 972 = GREEK SMALL LETTER OMICRONWITHTONOS*/
- /* 974 = GREEK SMALL LETTER OMEGAWITHTONOS*/
- /* 973 = GREEK SMALL LETTER UPSILONWITHTONOS*/
- /* 971 = GREEK SMALL LETTER UPSILONWITHDIALYTIKA*/
- /* 944 = GREEK SMALL LETTER UPSILONWITHDIALYTIKAANDTONOS*/
-
- { 181, LATEX_MACRO, "textmu", { "{\\textmu}", "\\textmu", "$\\mu$" } }, /* 181=micro sign, techically &#xB5; */
-
-/* Make sure that these don't stomp on other latex things above */
-
- { 8242, LATEX_MACRO, "textasciiacutex", { "{\\textasciiacutex}", "\\textasciiacutex", "$'$" } }, /* Prime symbol &#x2032; */
- { 180, LATEX_MACRO, "textasciiacute", { "{\\textasciiacute}", "\\textasciiacute", "\\'" } }, /* acute accent &#xB4; */
- { 8243, LATEX_MACRO, "textacutedbl", { "{\\textacutedbl}", "\\textacutedbl", "$''$" } }, /* Double prime &#x2033; */
- { 8245, LATEX_MACRO, "textasciigrave", { "{\\textasciigrave}", "\\textasciigrave", "\\`" } }, /* Grave accent &#x2035; */
-/* { 768, LATEX_MACRO, "`", { "\\`", NULL, NULL } },*//* Grave accent &#x0300;--apply to next char */
-/* { 769, LATEX_MACRO, "'", { "\\'", NULL, NULL } },*//* Acute accent &#x0301;--apply to next char */
-
- { 8963, LATEX_MACRO, "textasciicircum", { "{\\textasciicircum}", "\\textasciicircum", NULL } }, /* &#x2303; */
- { 184, LATEX_MACRO, "textasciicedilla", { "{\\textasciicedilla}", "\\textasciicedilla", NULL } }, /* cedilla &#xB8; */
- { 168, LATEX_MACRO, "textasciidieresis", { "{\\textasciidieresis}", "\\textasciidieresis", NULL } }, /* dieresis &#xA8; */
- { 175, LATEX_MACRO, "textasciimacron", { "{\\textasciimacron}", "\\textasciimacron", NULL } }, /* macron &#xAF; */
-
- { 8593, LATEX_MACRO, "textuparrow", { "{\\textuparrow}", "\\textuparrow", NULL } }, /* Up arrow &#x2191; */
- { 8595, LATEX_MACRO, "textdownarrow", { "{\\textdownarrow}", "\\textdownarrow", NULL } }, /* Down arrow &#x2193; */
- { 8594, LATEX_MACRO, "textrightarrow", { "{\\textrightarrow}", "\\textrightarrow", NULL } }, /* Right arrow &#x2192; */
- { 8592, LATEX_MACRO, "textleftarrow", { "{\\textleftarrow}", "\\textleftarrow", NULL } }, /* Left arrow &#x2190; */
- { 12296,LATEX_MACRO, "textlangle", { "{\\textlangle}", "\\textlangle", NULL } }, /* L-angle &#x3008; */
- { 12297,LATEX_MACRO, "textrangle", { "{\\textrangle}", "\\textrangle", NULL } }, /* L-angle &#x3009; */
-
- { 166, LATEX_MACRO, "textbrokenbar", { "{\\textbrokenbar}", "\\textbrokenbar", NULL } }, /* Broken vertical bar &#xA6; */
- { 167, LATEX_MACRO, "textsection", { "{\\textsection}", "\\textsection", "\\S{}" } }, /* Section sign, &#xA7; */
- { 170, LATEX_MACRO, "textordfeminine", { "{\\textordfeminine}", "\\textordfeminine", "$^a$" } }, /* &#xAA; */
- { 172, LATEX_MACRO, "textlnot", { "{\\textlnot}", "\\textlnot", NULL } }, /* Lnot &#xAC; */
- { 182, LATEX_MACRO, "textparagraph", { "{\\textparagraph}", "\\textparagraph", NULL } }, /* Paragraph sign &#xB6; */
- { 183, LATEX_MACRO, "textperiodcentered",{ "{\\textperiodcentered}","\\textperiodcentered", NULL } }, /* Period-centered &#xB7; */
- { 186, LATEX_MACRO, "textordmasculine", { "{\\textordmasculine}", "\\textordmasculine", NULL } }, /* &#xBA; */
- { 8214, LATEX_MACRO, "textbardbl", { "{\\textbardbl}", "\\textbardbl", NULL } }, /* Double vertical bar &#x2016; */
- { 8224, LATEX_MACRO, "textdagger", { "{\\textdagger}", "\\textdagger", NULL } }, /* Dagger &#x2020; */
- { 8225, LATEX_MACRO, "textdaggerdbl", { "{\\textdaggerdbl}", "\\textdaggerdbl", NULL } }, /* Double dagger &x2021; */
- { 8226, LATEX_MACRO, "textbullet", { "{\\textbullet}", "\\textbullet", NULL } }, /* Bullet &#x2022; */
- { 8494, LATEX_MACRO, "textestimated", { "{\\textestimated}", "\\textestimated", NULL } }, /* Estimated &#x212E; */
- { 9526, LATEX_MACRO, "textopenbullet", { "{\\textopenbullet}", "\\textopenbullet", NULL } }, /* &#x2536; */
-
- { 8220, LATEX_COMBO, "``", { "``", "{\\textquotedblleft}", "\\textquotedblleft" } }, /* Opening double quote &#x201C; */
- { 8221, LATEX_COMBO, "''", { "''", "{\\textquotedblright}", "\\textquotedblright" } }, /* Closing double quote &#x201D; */
- { 8216, LATEX_COMBO, "`", { "`", "{\\textquoteleft}", "\\textquoteleft" } }, /* Opening single quote &#x2018; */
- { 8217, LATEX_COMBO, "'", { "'", "{\\textquoteright}", "\\textquoteright" } }, /* Closing single quote &#x2019; */
- { 8261, LATEX_MACRO, "textlquill", { "{\\textlquill}", "\\textlquill", NULL } }, /* Left quill &#x2045; */
- { 8262, LATEX_MACRO, "textrquill", { "{\\textrquill}", "\\textrquill", NULL } }, /* Right quill &#x2046; */
-
- { 8212, LATEX_COMBO, "---", { "---", "{\\textemdash}", "\\textemdash" } }, /* Em-dash &#x2014; */
- { 8211, LATEX_COMBO, "--", { "--", "{\\textendash}", "\\textendash" } }, /* En-dash &#x2013; */
- { 8230, LATEX_MACRO, "ldots", { "{\\ldots}", "{\\textellipsis}", "\\textellipsis" } }, /* Ellipsis &#x2026; */
-
- { 8194, LATEX_MACRO, "enspace", { "{\\enspace}", "\\hspace{.5em}", NULL } }, /* En-space &#x2002; */
- { 8195, LATEX_MACRO, "emspace", { "{\\emspace}", "\\hspace{1em}", NULL } }, /* Em-space &#x2003; */
- { 8201, LATEX_MACRO, "thinspace", { "{\\thinspace}", NULL, NULL } }, /* Thin space &#x2009; */
- { 8203, LATEX_MACRO, "textnospace", { "{\\textnospace}", "\\textnospace", NULL } }, /* No space &#x200B; */
- { 9251, LATEX_MACRO, "textvisiblespace", { "{\\textvisiblespace}", "\\textvisiblespace", NULL } }, /* Visible space &#x2423; */
-
- { 215, LATEX_MACRO, "texttimes", { "{\\texttimes}", "\\texttimes", NULL } }, /* Multiplication symbol &#xD7; */
- { 247, LATEX_MACRO, "textdiv", { "{\\textdiv}", "\\textdiv", NULL } }, /* Division symbol &#xF7; */
- { 177, LATEX_MACRO, "textpm", { "{\\textpm}", "\\textpm", NULL } }, /* Plus-minus character &#B1; */
- { 189, LATEX_MACRO, "textonehalf", { "{\\textonehalf}", "\\textonehalf", NULL } }, /* Vulgar fraction one half &#xBD; */
- { 188, LATEX_MACRO, "textonequarter", { "{\\textonequarter}", "\\textonequarter", NULL } }, /* Vulgar fraction one quarter &#xBD; */
- { 190, LATEX_MACRO, "textthreequarters", { "{\\textthreequarters}", "\\textthreequarters", NULL } }, /* Vulgar fraction three quarters &#xBE; */
- { 8240, LATEX_MACRO, "texttenthousand", { "{\\texttenthousand}", "\\texttenthousand", NULL } }, /* Per thousand sign &#x2030; */
- { 8241, LATEX_MACRO, "textpertenthousand",{ "{\\textpertenthousand}","\\textpertenthousand", NULL } }, /* Per ten thousand sign &#x2031;*/
- { 8260, LATEX_MACRO, "textfractionssolidus",{"{\\textfractionsolidus}", "\\textfractionsolidus", NULL } }, /* &x8260; */
- { 8451, LATEX_MACRO, "textcelcius", { "{\\textcelcius}", "\\textcelcius", NULL } }, /* Celcicus &#x2103; */
- { 8470, LATEX_MACRO, "textnumero", { "{\\textnumero}", "\\textnumero", NULL } }, /* Numero symbol &#x2116; */
- { 8486, LATEX_MACRO, "textohm", { "{\\textohm}", "\\textohm", NULL } }, /* Ohm symbol &#x2126; */
- { 8487, LATEX_MACRO, "textmho", { "{\\textmho}", "\\textmho", NULL } }, /* Mho symbol &#x2127; */
- { 8730, LATEX_MACRO, "textsurd", { "{\\textsurd}", "\\textsurd", NULL } }, /* &#x221A; */
-
- { 185, LATEX_MACRO, "textonesuperior", { "{\\textonesuperior}", "\\textonesuperior", "$^1$" } }, /*Superscript 1 &#xB9; */
- { 178, LATEX_MACRO, "texttwosuperior", { "{\\texttwosuperior}", "\\texttwosuperior", "$^2$" } }, /*Superscript 2 &#xB2; */
- { 179, LATEX_MACRO, "textthreesuperior", { "{\\textthreesuperior}", "\\textthreesuperior", "$^3$" } }, /*Superscript 3 &#xB3; */
-
- { 161, LATEX_MACRO, "textexclamdown", { "{\\textexclamdown}", "\\textexclamdown", NULL } }, /* Inverted exclamation mark &#xA1;*/
- { 191, LATEX_MACRO, "textquestiondown", { "{\\textquestiondown}", "\\textquestiondown", NULL } }, /* Inverted question mark &#xBF; */
-
- { 162, LATEX_MACRO, "textcent", { "{\\textcent}", "\\textcent", NULL } }, /* Cent sign &#xA2; */
- { 163, LATEX_MACRO, "textsterling", { "{\\textsterling}", "\\textsterling", "\\pounds" } }, /* Pound sign &#xA3; */
- { 165, LATEX_MACRO, "textyen", { "{\\textyen}", "\\textyen", NULL } }, /* Yen sign &#xA5; */
- { 402, LATEX_MACRO, "textflorin", { "{\\textflorin}", "\\textflorin", NULL } }, /* Florin sign &#x192; */
- { 3647, LATEX_MACRO, "textbaht", { "{\\textbaht}", "\\textbaht", NULL } }, /* Thai currency &#xE3F; */
- { 8355, LATEX_MACRO, "textfrenchfranc", { "{\\textfrenchfranc}", "\\textfrenchfranc", NULL } }, /* French franc &#x20A3; */
- { 8356, LATEX_MACRO, "textlira", { "{\\textlira}", "\\textlira", NULL } }, /* Lira &#x20A4; */
- { 8358, LATEX_MACRO, "textnaira", { "{\\textnaira}", "\\textnaria", NULL } }, /* Naira &#x20A6; */
- { 8361, LATEX_MACRO, "textwon", { "{\\textwon}", "\\textwon", NULL } }, /* &#x20A9; */
- { 8363, LATEX_MACRO, "textdong", { "{\\textdong}", "\\textdong", NULL } }, /* Vietnamese currency &#x20AB; */
- { 8364, LATEX_MACRO, "texteuro", { "{\\texteuro}", "\\texteuro", NULL } }, /* Euro sign */
-
- { 169, LATEX_MACRO, "textcopyright", { "{\\textcopyright}", "\\textcopyright", NULL } }, /* Copyright (C) &#xA9; */
- { 175, LATEX_MACRO, "textregistered", { "{\\textregistered}", "\\textregistered", NULL } }, /* Registered sign (R) &#xAF;*/
- { 8482, LATEX_MACRO, "texttrademark", { "{\\texttrademark}", "\\texttrademark", "$^{TM}$" } }, /* Trademark (TM) &#x2122; */
- { 8480, LATEX_MACRO, "textservicemark", { "{\\textservicemark}", "\\textservicemark", "$^{SM}$" } }, /* Servicemark (SM) &#x2120;*/
- { 8471, LATEX_MACRO, "textcircledP", { "{\\textcircledP}", "\\textcircledP", NULL } }, /* Circled P &#2117; */
-
-};
-
-static int nlatex_chars = sizeof(latex_chars)/sizeof(struct latex_chars);
-
-/* latex2char()
- *
- * Use the latex_chars[] lookup table to determine if any character
- * is a special LaTeX code. Note that if it is, then the equivalency
- * is a Unicode character and we need to flag (by setting *unicode to 1)
- * that we know the output is Unicode. Otherwise, we set *unicode to 0,
- * meaning that the output is whatever character set was given to us
- * (which could be Unicode, but is not necessarily Unicode).
- *
- */
-unsigned int
-latex2char( char *s, unsigned int *pos, int *unicode )
-{
- unsigned int value;
-// char *p, *q[3];
- int i, j, len;
- char *p;
-
- p = &( s[*pos] );
- value = (unsigned char) *p;
- if ( value=='{' || value=='\\' || value=='~' ||
- value=='$' || value=='\'' || value=='`' ||
- value=='-' || value=='^' ) {
-// if ( *p=='\\' && ( *p=='{' || *p=='}' ) ) {
-// } else {
- for ( i=0; i<nlatex_chars; ++i ) {
-// q[0] = latex_chars[i].bib1;
-// l[0] = strlen( q[0] );
-// q[1] = latex_chars[i].bib2;
-// l[1] = strlen( q[1] );
-// q[2] = latex_chars[i].bib3;
-// l[2] = strlen( q[2] );
- for ( j=0; j<3; ++j ) {
- if ( latex_chars[i].variant[j] == NULL ) continue;
- len = strlen( latex_chars[i].variant[j] );
- if ( !strncmp( p, latex_chars[i].variant[j], len ) ) {
- *pos = *pos + len;
- *unicode = 1;
- return latex_chars[i].unicode;
- }
- }
- }
-// }
- }
- *unicode = 0;
- *pos = *pos + 1;
- return value;
-}
-
-void
-uni2latex( unsigned int ch, char buf[], int buf_size )
-{
- int i, j, n;
-
- if ( buf_size==0 ) return;
-
- buf[0] = '?';
- buf[1] = '\0';
-
- if ( ch==' ' ) {
- buf[0] = ' '; /*special case to avoid &nbsp;*/
- return;
- }
-
- for ( i=0; i<nlatex_chars; ++i ) {
- if ( ch == latex_chars[i].unicode ) {
- n = 0;
-
- if ( latex_chars[i].type == LATEX_MACRO ) {
- if ( n < buf_size ) buf[n++] = '{';
- if ( n < buf_size ) buf[n++] = '\\';
- }
- else if ( latex_chars[i].type == LATEX_MATH ) {
- if ( n < buf_size ) buf[n++] = '$';
- if ( n < buf_size ) buf[n++] = '\\';
- }
-
- j = 0;
- while ( latex_chars[i].out[j] ) {
- if ( n < buf_size ) buf[n++] = latex_chars[i].out[j];
- j++;
- }
-
- if ( latex_chars[i].type == LATEX_MACRO ) {
- if ( n < buf_size ) buf[n++] = '}';
- }
- else if ( latex_chars[i].type == LATEX_MATH ) {
- if ( n < buf_size ) buf[n++] = '$';
- }
-
- if ( n < buf_size ) buf[n] = '\0';
- else buf[ buf_size-1 ] = '\0';
-
- return;
- }
- }
-
- if ( ch < 128 ) buf[0] = (char)ch;
-}
-
diff --git a/support/texlab/crates/bibutils_sys/src/latex.h b/support/texlab/crates/bibutils_sys/src/latex.h
deleted file mode 100644
index f6317ee0c0..0000000000
--- a/support/texlab/crates/bibutils_sys/src/latex.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * latex.h
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef LATEX_H
-#define LATEX_H
-
-extern unsigned int latex2char( char *s, unsigned int *pos, int *unicode );
-extern void uni2latex( unsigned int ch, char buf[], int buf_size );
-
-
-#endif
-
diff --git a/support/texlab/crates/bibutils_sys/src/lib.rs b/support/texlab/crates/bibutils_sys/src/lib.rs
deleted file mode 100644
index 239ea7da8d..0000000000
--- a/support/texlab/crates/bibutils_sys/src/lib.rs
+++ /dev/null
@@ -1,4261 +0,0 @@
-#![allow(non_upper_case_globals)]
-#![allow(non_camel_case_types)]
-#![allow(non_snake_case)]
-/* automatically generated by rust-bindgen */
-
-pub const _VCRT_COMPILER_PREPROCESSOR: u32 = 1;
-pub const _SAL_VERSION: u32 = 20;
-pub const __SAL_H_VERSION: u32 = 180000000;
-pub const _USE_DECLSPECS_FOR_SAL: u32 = 0;
-pub const _USE_ATTRIBUTES_FOR_SAL: u32 = 0;
-pub const _CRT_PACKING: u32 = 8;
-pub const _HAS_EXCEPTIONS: u32 = 1;
-pub const _HAS_CXX17: u32 = 0;
-pub const _HAS_CXX20: u32 = 0;
-pub const _HAS_NODISCARD: u32 = 1;
-pub const _ARGMAX: u32 = 100;
-pub const _CRT_INT_MAX: u32 = 2147483647;
-pub const _CRT_FUNCTIONS_REQUIRED: u32 = 1;
-pub const _CRT_HAS_CXX17: u32 = 0;
-pub const _ARM_WINAPI_PARTITION_DESKTOP_SDK_AVAILABLE: u32 = 1;
-pub const _CRT_BUILD_DESKTOP_APP: u32 = 1;
-pub const _CRT_INTERNAL_NONSTDC_NAMES: u32 = 1;
-pub const __STDC_SECURE_LIB__: u32 = 200411;
-pub const __GOT_SECURE_LIB__: u32 = 200411;
-pub const __STDC_WANT_SECURE_LIB__: u32 = 1;
-pub const _SECURECRT_FILL_BUFFER_PATTERN: u32 = 254;
-pub const _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES: u32 = 0;
-pub const _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_COUNT: u32 = 0;
-pub const _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES: u32 = 1;
-pub const _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES_MEMORY: u32 = 0;
-pub const _CRT_SECURE_CPP_OVERLOAD_SECURE_NAMES_MEMORY: u32 = 0;
-pub const _CRT_INTERNAL_STDIO_SYMBOL_PREFIX: &'static [u8; 1usize] = b"\0";
-pub const _CRT_INTERNAL_PRINTF_LEGACY_VSPRINTF_NULL_TERMINATION: u32 = 1;
-pub const _CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR: u32 = 2;
-pub const _CRT_INTERNAL_PRINTF_LEGACY_WIDE_SPECIFIERS: u32 = 4;
-pub const _CRT_INTERNAL_PRINTF_LEGACY_MSVCRT_COMPATIBILITY: u32 = 8;
-pub const _CRT_INTERNAL_PRINTF_LEGACY_THREE_DIGIT_EXPONENTS: u32 = 16;
-pub const _CRT_INTERNAL_SCANF_SECURECRT: u32 = 1;
-pub const _CRT_INTERNAL_SCANF_LEGACY_WIDE_SPECIFIERS: u32 = 2;
-pub const _CRT_INTERNAL_SCANF_LEGACY_MSVCRT_COMPATIBILITY: u32 = 4;
-pub const BUFSIZ: u32 = 512;
-pub const _NSTREAM_: u32 = 512;
-pub const _IOB_ENTRIES: u32 = 3;
-pub const EOF: i32 = -1;
-pub const _IOFBF: u32 = 0;
-pub const _IOLBF: u32 = 64;
-pub const _IONBF: u32 = 4;
-pub const L_tmpnam: u32 = 260;
-pub const L_tmpnam_s: u32 = 260;
-pub const SEEK_CUR: u32 = 1;
-pub const SEEK_END: u32 = 2;
-pub const SEEK_SET: u32 = 0;
-pub const FILENAME_MAX: u32 = 260;
-pub const FOPEN_MAX: u32 = 20;
-pub const _SYS_OPEN: u32 = 20;
-pub const TMP_MAX: u32 = 2147483647;
-pub const TMP_MAX_S: u32 = 2147483647;
-pub const _TMP_MAX_S: u32 = 2147483647;
-pub const SYS_OPEN: u32 = 20;
-pub const STR_OK: u32 = 0;
-pub const STR_MEMERR: i32 = -1;
-pub const FIELDS_OK: u32 = 1;
-pub const FIELDS_ERR: u32 = 0;
-pub const FIELDS_NOTFOUND: i32 = -1;
-pub const LEVEL_ORIG: i32 = -2;
-pub const LEVEL_ANY: i32 = -1;
-pub const LEVEL_MAIN: u32 = 0;
-pub const LEVEL_HOST: u32 = 1;
-pub const LEVEL_SERIES: u32 = 2;
-pub const VPLIST_MEMERR: i32 = -1;
-pub const VPLIST_OK: u32 = 0;
-pub const FIELDS_CAN_DUP: u32 = 0;
-pub const FIELDS_NO_DUPS: u32 = 1;
-pub const FIELDS_STRP_FLAG: u32 = 2;
-pub const FIELDS_POSP_FLAG: u32 = 4;
-pub const FIELDS_NOLENOK_FLAG: u32 = 8;
-pub const FIELDS_SETUSE_FLAG: u32 = 16;
-pub const FIELDS_CHRP: u32 = 16;
-pub const FIELDS_STRP: u32 = 18;
-pub const FIELDS_POSP: u32 = 20;
-pub const FIELDS_CHRP_NOLEN: u32 = 24;
-pub const FIELDS_STRP_NOLEN: u32 = 26;
-pub const FIELDS_POSP_NOLEN: u32 = 28;
-pub const FIELDS_CHRP_NOUSE: u32 = 0;
-pub const FIELDS_STRP_NOUSE: u32 = 2;
-pub const REFTYPE_CHATTY: u32 = 0;
-pub const REFTYPE_SILENT: u32 = 1;
-pub const ALWAYS: u32 = 0;
-pub const DEFAULT: u32 = 1;
-pub const SKIP: u32 = 2;
-pub const SIMPLE: u32 = 3;
-pub const TYPE: u32 = 4;
-pub const PERSON: u32 = 5;
-pub const DATE: u32 = 6;
-pub const PAGES: u32 = 7;
-pub const SERIALNO: u32 = 8;
-pub const TITLE: u32 = 9;
-pub const NOTES: u32 = 10;
-pub const DOI: u32 = 11;
-pub const HOWPUBLISHED: u32 = 12;
-pub const LINKEDFILE: u32 = 13;
-pub const KEYWORD: u32 = 14;
-pub const URL: u32 = 15;
-pub const GENRE: u32 = 16;
-pub const BT_SENTE: u32 = 17;
-pub const BT_EPRINT: u32 = 18;
-pub const BT_ORG: u32 = 19;
-pub const BLT_THESIS_TYPE: u32 = 20;
-pub const BLT_SCHOOL: u32 = 21;
-pub const BLT_EDITOR: u32 = 22;
-pub const BLT_SUBTYPE: u32 = 23;
-pub const BLT_SKIP: u32 = 24;
-pub const EPRINT: u32 = 25;
-pub const NUM_REFTYPES: u32 = 26;
-pub const _MAX_ITOSTR_BASE16_COUNT: u32 = 9;
-pub const _MAX_ITOSTR_BASE10_COUNT: u32 = 12;
-pub const _MAX_ITOSTR_BASE8_COUNT: u32 = 12;
-pub const _MAX_ITOSTR_BASE2_COUNT: u32 = 33;
-pub const _MAX_LTOSTR_BASE16_COUNT: u32 = 9;
-pub const _MAX_LTOSTR_BASE10_COUNT: u32 = 12;
-pub const _MAX_LTOSTR_BASE8_COUNT: u32 = 12;
-pub const _MAX_LTOSTR_BASE2_COUNT: u32 = 33;
-pub const _MAX_ULTOSTR_BASE16_COUNT: u32 = 9;
-pub const _MAX_ULTOSTR_BASE10_COUNT: u32 = 11;
-pub const _MAX_ULTOSTR_BASE8_COUNT: u32 = 12;
-pub const _MAX_ULTOSTR_BASE2_COUNT: u32 = 33;
-pub const _MAX_I64TOSTR_BASE16_COUNT: u32 = 17;
-pub const _MAX_I64TOSTR_BASE10_COUNT: u32 = 21;
-pub const _MAX_I64TOSTR_BASE8_COUNT: u32 = 23;
-pub const _MAX_I64TOSTR_BASE2_COUNT: u32 = 65;
-pub const _MAX_U64TOSTR_BASE16_COUNT: u32 = 17;
-pub const _MAX_U64TOSTR_BASE10_COUNT: u32 = 21;
-pub const _MAX_U64TOSTR_BASE8_COUNT: u32 = 23;
-pub const _MAX_U64TOSTR_BASE2_COUNT: u32 = 65;
-pub const CHAR_BIT: u32 = 8;
-pub const SCHAR_MIN: i32 = -128;
-pub const SCHAR_MAX: u32 = 127;
-pub const UCHAR_MAX: u32 = 255;
-pub const CHAR_MIN: i32 = -128;
-pub const CHAR_MAX: u32 = 127;
-pub const MB_LEN_MAX: u32 = 5;
-pub const SHRT_MIN: i32 = -32768;
-pub const SHRT_MAX: u32 = 32767;
-pub const USHRT_MAX: u32 = 65535;
-pub const INT_MIN: i32 = -2147483648;
-pub const INT_MAX: u32 = 2147483647;
-pub const UINT_MAX: u32 = 4294967295;
-pub const LONG_MIN: i32 = -2147483648;
-pub const LONG_MAX: u32 = 2147483647;
-pub const ULONG_MAX: u32 = 4294967295;
-pub const EXIT_SUCCESS: u32 = 0;
-pub const EXIT_FAILURE: u32 = 1;
-pub const _WRITE_ABORT_MSG: u32 = 1;
-pub const _CALL_REPORTFAULT: u32 = 2;
-pub const _OUT_TO_DEFAULT: u32 = 0;
-pub const _OUT_TO_STDERR: u32 = 1;
-pub const _OUT_TO_MSGBOX: u32 = 2;
-pub const _REPORT_ERRMODE: u32 = 3;
-pub const RAND_MAX: u32 = 32767;
-pub const _CVTBUFSIZE: u32 = 349;
-pub const _MAX_PATH: u32 = 260;
-pub const _MAX_DRIVE: u32 = 3;
-pub const _MAX_DIR: u32 = 256;
-pub const _MAX_FNAME: u32 = 256;
-pub const _MAX_EXT: u32 = 256;
-pub const _MAX_ENV: u32 = 32767;
-pub const EPERM: u32 = 1;
-pub const ENOENT: u32 = 2;
-pub const ESRCH: u32 = 3;
-pub const EINTR: u32 = 4;
-pub const EIO: u32 = 5;
-pub const ENXIO: u32 = 6;
-pub const E2BIG: u32 = 7;
-pub const ENOEXEC: u32 = 8;
-pub const EBADF: u32 = 9;
-pub const ECHILD: u32 = 10;
-pub const EAGAIN: u32 = 11;
-pub const ENOMEM: u32 = 12;
-pub const EACCES: u32 = 13;
-pub const EFAULT: u32 = 14;
-pub const EBUSY: u32 = 16;
-pub const EEXIST: u32 = 17;
-pub const EXDEV: u32 = 18;
-pub const ENODEV: u32 = 19;
-pub const ENOTDIR: u32 = 20;
-pub const EISDIR: u32 = 21;
-pub const ENFILE: u32 = 23;
-pub const EMFILE: u32 = 24;
-pub const ENOTTY: u32 = 25;
-pub const EFBIG: u32 = 27;
-pub const ENOSPC: u32 = 28;
-pub const ESPIPE: u32 = 29;
-pub const EROFS: u32 = 30;
-pub const EMLINK: u32 = 31;
-pub const EPIPE: u32 = 32;
-pub const EDOM: u32 = 33;
-pub const EDEADLK: u32 = 36;
-pub const ENAMETOOLONG: u32 = 38;
-pub const ENOLCK: u32 = 39;
-pub const ENOSYS: u32 = 40;
-pub const ENOTEMPTY: u32 = 41;
-pub const EINVAL: u32 = 22;
-pub const ERANGE: u32 = 34;
-pub const EILSEQ: u32 = 42;
-pub const STRUNCATE: u32 = 80;
-pub const EDEADLOCK: u32 = 36;
-pub const EADDRINUSE: u32 = 100;
-pub const EADDRNOTAVAIL: u32 = 101;
-pub const EAFNOSUPPORT: u32 = 102;
-pub const EALREADY: u32 = 103;
-pub const EBADMSG: u32 = 104;
-pub const ECANCELED: u32 = 105;
-pub const ECONNABORTED: u32 = 106;
-pub const ECONNREFUSED: u32 = 107;
-pub const ECONNRESET: u32 = 108;
-pub const EDESTADDRREQ: u32 = 109;
-pub const EHOSTUNREACH: u32 = 110;
-pub const EIDRM: u32 = 111;
-pub const EINPROGRESS: u32 = 112;
-pub const EISCONN: u32 = 113;
-pub const ELOOP: u32 = 114;
-pub const EMSGSIZE: u32 = 115;
-pub const ENETDOWN: u32 = 116;
-pub const ENETRESET: u32 = 117;
-pub const ENETUNREACH: u32 = 118;
-pub const ENOBUFS: u32 = 119;
-pub const ENODATA: u32 = 120;
-pub const ENOLINK: u32 = 121;
-pub const ENOMSG: u32 = 122;
-pub const ENOPROTOOPT: u32 = 123;
-pub const ENOSR: u32 = 124;
-pub const ENOSTR: u32 = 125;
-pub const ENOTCONN: u32 = 126;
-pub const ENOTRECOVERABLE: u32 = 127;
-pub const ENOTSOCK: u32 = 128;
-pub const ENOTSUP: u32 = 129;
-pub const EOPNOTSUPP: u32 = 130;
-pub const EOTHER: u32 = 131;
-pub const EOVERFLOW: u32 = 132;
-pub const EOWNERDEAD: u32 = 133;
-pub const EPROTO: u32 = 134;
-pub const EPROTONOSUPPORT: u32 = 135;
-pub const EPROTOTYPE: u32 = 136;
-pub const ETIME: u32 = 137;
-pub const ETIMEDOUT: u32 = 138;
-pub const ETXTBSY: u32 = 139;
-pub const EWOULDBLOCK: u32 = 140;
-pub const _NLSCMPERROR: u32 = 2147483647;
-pub const SLIST_OK: u32 = 0;
-pub const SLIST_ERR_MEMERR: i32 = -1;
-pub const SLIST_ERR_CANTOPEN: i32 = -2;
-pub const SLIST_ERR_BADPARAM: i32 = -3;
-pub const SLIST_CHR: u32 = 0;
-pub const SLIST_STR: u32 = 1;
-pub const CHARSET_UNKNOWN: i32 = -1;
-pub const CHARSET_UNICODE: i32 = -2;
-pub const CHARSET_GB18030: i32 = -3;
-pub const CHARSET_DEFAULT: i32 = -2;
-pub const CHARSET_UTF8_DEFAULT: u32 = 1;
-pub const CHARSET_BOM_DEFAULT: u32 = 1;
-pub const STR_CONV_XMLOUT_FALSE: u32 = 0;
-pub const STR_CONV_XMLOUT_TRUE: u32 = 1;
-pub const STR_CONV_XMLOUT_ENTITIES: u32 = 3;
-pub const BIBL_OK: u32 = 0;
-pub const BIBL_ERR_BADINPUT: i32 = -1;
-pub const BIBL_ERR_MEMERR: i32 = -2;
-pub const BIBL_ERR_CANTOPEN: i32 = -3;
-pub const BIBL_FIRSTIN: u32 = 100;
-pub const BIBL_MODSIN: u32 = 100;
-pub const BIBL_BIBTEXIN: u32 = 101;
-pub const BIBL_RISIN: u32 = 102;
-pub const BIBL_ENDNOTEIN: u32 = 103;
-pub const BIBL_COPACIN: u32 = 104;
-pub const BIBL_ISIIN: u32 = 105;
-pub const BIBL_MEDLINEIN: u32 = 106;
-pub const BIBL_ENDNOTEXMLIN: u32 = 107;
-pub const BIBL_BIBLATEXIN: u32 = 108;
-pub const BIBL_EBIIN: u32 = 109;
-pub const BIBL_WORDIN: u32 = 110;
-pub const BIBL_NBIBIN: u32 = 111;
-pub const BIBL_LASTIN: u32 = 111;
-pub const BIBL_FIRSTOUT: u32 = 200;
-pub const BIBL_MODSOUT: u32 = 200;
-pub const BIBL_BIBTEXOUT: u32 = 201;
-pub const BIBL_RISOUT: u32 = 202;
-pub const BIBL_ENDNOTEOUT: u32 = 203;
-pub const BIBL_ISIOUT: u32 = 204;
-pub const BIBL_WORD2007OUT: u32 = 205;
-pub const BIBL_ADSABSOUT: u32 = 206;
-pub const BIBL_NBIBOUT: u32 = 207;
-pub const BIBL_LASTOUT: u32 = 207;
-pub const BIBL_FORMAT_VERBOSE: u32 = 1;
-pub const BIBL_FORMAT_BIBOUT_FINALCOMMA: u32 = 2;
-pub const BIBL_FORMAT_BIBOUT_SINGLEDASH: u32 = 4;
-pub const BIBL_FORMAT_BIBOUT_WHITESPACE: u32 = 8;
-pub const BIBL_FORMAT_BIBOUT_BRACKETS: u32 = 16;
-pub const BIBL_FORMAT_BIBOUT_UPPERCASE: u32 = 32;
-pub const BIBL_FORMAT_BIBOUT_STRICTKEY: u32 = 64;
-pub const BIBL_FORMAT_BIBOUT_SHORTTITLE: u32 = 128;
-pub const BIBL_FORMAT_BIBOUT_DROPKEY: u32 = 256;
-pub const BIBL_FORMAT_MODSOUT_DROPKEY: u32 = 512;
-pub const BIBL_RAW_WITHCHARCONVERT: u32 = 4;
-pub const BIBL_RAW_WITHMAKEREFID: u32 = 8;
-pub const BIBL_CHARSET_UNKNOWN: i32 = -1;
-pub const BIBL_CHARSET_UNICODE: i32 = -2;
-pub const BIBL_CHARSET_GB18030: i32 = -3;
-pub const BIBL_CHARSET_DEFAULT: i32 = -2;
-pub const BIBL_CHARSET_UTF8_DEFAULT: u32 = 1;
-pub const BIBL_CHARSET_BOM_DEFAULT: u32 = 1;
-pub const BIBL_SRC_DEFAULT: u32 = 0;
-pub const BIBL_SRC_FILE: u32 = 1;
-pub const BIBL_SRC_USER: u32 = 2;
-pub const BIBL_XMLOUT_FALSE: u32 = 0;
-pub const BIBL_XMLOUT_TRUE: u32 = 1;
-pub const BIBL_XMLOUT_ENTITIES: u32 = 3;
-pub type va_list = *mut ::std::os::raw::c_char;
-extern "C" {
- pub fn __va_start(arg1: *mut *mut ::std::os::raw::c_char, ...);
-}
-pub type __vcrt_bool = bool;
-pub type wchar_t = ::std::os::raw::c_ushort;
-extern "C" {
- pub fn __security_init_cookie();
-}
-extern "C" {
- pub fn __security_check_cookie(_StackCookie: usize);
-}
-extern "C" {
- pub fn __report_gsfailure(_StackCookie: usize);
-}
-extern "C" {
- pub static mut __security_cookie: usize;
-}
-pub type __crt_bool = bool;
-extern "C" {
- pub fn _invalid_parameter_noinfo();
-}
-extern "C" {
- pub fn _invalid_parameter_noinfo_noreturn();
-}
-extern "C" {
- pub fn _invoke_watson(
- _Expression: *const wchar_t,
- _FunctionName: *const wchar_t,
- _FileName: *const wchar_t,
- _LineNo: ::std::os::raw::c_uint,
- _Reserved: usize,
- );
-}
-pub type errno_t = ::std::os::raw::c_int;
-pub type wint_t = ::std::os::raw::c_ushort;
-pub type wctype_t = ::std::os::raw::c_ushort;
-pub type __time32_t = ::std::os::raw::c_long;
-pub type __time64_t = ::std::os::raw::c_longlong;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct __crt_locale_data_public {
- pub _locale_pctype: *const ::std::os::raw::c_ushort,
- pub _locale_mb_cur_max: ::std::os::raw::c_int,
- pub _locale_lc_codepage: ::std::os::raw::c_uint,
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct __crt_locale_pointers {
- pub locinfo: *mut __crt_locale_data,
- pub mbcinfo: *mut __crt_multibyte_data,
-}
-pub type _locale_t = *mut __crt_locale_pointers;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _Mbstatet {
- pub _Wchar: ::std::os::raw::c_ulong,
- pub _Byte: ::std::os::raw::c_ushort,
- pub _State: ::std::os::raw::c_ushort,
-}
-pub type mbstate_t = _Mbstatet;
-pub type time_t = __time64_t;
-pub type rsize_t = usize;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _iobuf {
- pub _Placeholder: *mut ::std::os::raw::c_void,
-}
-pub type FILE = _iobuf;
-extern "C" {
- pub fn __acrt_iob_func(_Ix: ::std::os::raw::c_uint) -> *mut FILE;
-}
-extern "C" {
- pub fn fgetwc(_Stream: *mut FILE) -> wint_t;
-}
-extern "C" {
- pub fn _fgetwchar() -> wint_t;
-}
-extern "C" {
- pub fn fputwc(_Character: wchar_t, _Stream: *mut FILE) -> wint_t;
-}
-extern "C" {
- pub fn _fputwchar(_Character: wchar_t) -> wint_t;
-}
-extern "C" {
- pub fn getwc(_Stream: *mut FILE) -> wint_t;
-}
-extern "C" {
- pub fn getwchar() -> wint_t;
-}
-extern "C" {
- pub fn fgetws(
- _Buffer: *mut wchar_t,
- _BufferCount: ::std::os::raw::c_int,
- _Stream: *mut FILE,
- ) -> *mut wchar_t;
-}
-extern "C" {
- pub fn fputws(_Buffer: *const wchar_t, _Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _getws_s(_Buffer: *mut wchar_t, _BufferCount: usize) -> *mut wchar_t;
-}
-extern "C" {
- pub fn putwc(_Character: wchar_t, _Stream: *mut FILE) -> wint_t;
-}
-extern "C" {
- pub fn putwchar(_Character: wchar_t) -> wint_t;
-}
-extern "C" {
- pub fn _putws(_Buffer: *const wchar_t) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn ungetwc(_Character: wint_t, _Stream: *mut FILE) -> wint_t;
-}
-extern "C" {
- pub fn _wfdopen(_FileHandle: ::std::os::raw::c_int, _Mode: *const wchar_t) -> *mut FILE;
-}
-extern "C" {
- pub fn _wfopen(_FileName: *const wchar_t, _Mode: *const wchar_t) -> *mut FILE;
-}
-extern "C" {
- pub fn _wfopen_s(
- _Stream: *mut *mut FILE,
- _FileName: *const wchar_t,
- _Mode: *const wchar_t,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _wfreopen(
- _FileName: *const wchar_t,
- _Mode: *const wchar_t,
- _OldStream: *mut FILE,
- ) -> *mut FILE;
-}
-extern "C" {
- pub fn _wfreopen_s(
- _Stream: *mut *mut FILE,
- _FileName: *const wchar_t,
- _Mode: *const wchar_t,
- _OldStream: *mut FILE,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _wfsopen(
- _FileName: *const wchar_t,
- _Mode: *const wchar_t,
- _ShFlag: ::std::os::raw::c_int,
- ) -> *mut FILE;
-}
-extern "C" {
- pub fn _wperror(_ErrorMessage: *const wchar_t);
-}
-extern "C" {
- pub fn _wpopen(_Command: *const wchar_t, _Mode: *const wchar_t) -> *mut FILE;
-}
-extern "C" {
- pub fn _wremove(_FileName: *const wchar_t) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _wtempnam(_Directory: *const wchar_t, _FilePrefix: *const wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn _wtmpnam_s(_Buffer: *mut wchar_t, _BufferCount: usize) -> errno_t;
-}
-extern "C" {
- pub fn _wtmpnam(_Buffer: *mut wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn _fgetwc_nolock(_Stream: *mut FILE) -> wint_t;
-}
-extern "C" {
- pub fn _fputwc_nolock(_Character: wchar_t, _Stream: *mut FILE) -> wint_t;
-}
-extern "C" {
- pub fn _getwc_nolock(_Stream: *mut FILE) -> wint_t;
-}
-extern "C" {
- pub fn _putwc_nolock(_Character: wchar_t, _Stream: *mut FILE) -> wint_t;
-}
-extern "C" {
- pub fn _ungetwc_nolock(_Character: wint_t, _Stream: *mut FILE) -> wint_t;
-}
-extern "C" {
- pub fn __stdio_common_vfwprintf(
- _Options: ::std::os::raw::c_ulonglong,
- _Stream: *mut FILE,
- _Format: *const wchar_t,
- _Locale: _locale_t,
- _ArgList: va_list,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __stdio_common_vfwprintf_s(
- _Options: ::std::os::raw::c_ulonglong,
- _Stream: *mut FILE,
- _Format: *const wchar_t,
- _Locale: _locale_t,
- _ArgList: va_list,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __stdio_common_vfwprintf_p(
- _Options: ::std::os::raw::c_ulonglong,
- _Stream: *mut FILE,
- _Format: *const wchar_t,
- _Locale: _locale_t,
- _ArgList: va_list,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __stdio_common_vfwscanf(
- _Options: ::std::os::raw::c_ulonglong,
- _Stream: *mut FILE,
- _Format: *const wchar_t,
- _Locale: _locale_t,
- _ArgList: va_list,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __stdio_common_vswprintf(
- _Options: ::std::os::raw::c_ulonglong,
- _Buffer: *mut wchar_t,
- _BufferCount: usize,
- _Format: *const wchar_t,
- _Locale: _locale_t,
- _ArgList: va_list,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __stdio_common_vswprintf_s(
- _Options: ::std::os::raw::c_ulonglong,
- _Buffer: *mut wchar_t,
- _BufferCount: usize,
- _Format: *const wchar_t,
- _Locale: _locale_t,
- _ArgList: va_list,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __stdio_common_vsnwprintf_s(
- _Options: ::std::os::raw::c_ulonglong,
- _Buffer: *mut wchar_t,
- _BufferCount: usize,
- _MaxCount: usize,
- _Format: *const wchar_t,
- _Locale: _locale_t,
- _ArgList: va_list,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __stdio_common_vswprintf_p(
- _Options: ::std::os::raw::c_ulonglong,
- _Buffer: *mut wchar_t,
- _BufferCount: usize,
- _Format: *const wchar_t,
- _Locale: _locale_t,
- _ArgList: va_list,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __stdio_common_vswscanf(
- _Options: ::std::os::raw::c_ulonglong,
- _Buffer: *const wchar_t,
- _BufferCount: usize,
- _Format: *const wchar_t,
- _Locale: _locale_t,
- _ArgList: va_list,
- ) -> ::std::os::raw::c_int;
-}
-pub type fpos_t = ::std::os::raw::c_longlong;
-extern "C" {
- pub fn _get_stream_buffer_pointers(
- _Stream: *mut FILE,
- _Base: *mut *mut *mut ::std::os::raw::c_char,
- _Pointer: *mut *mut *mut ::std::os::raw::c_char,
- _Count: *mut *mut ::std::os::raw::c_int,
- ) -> errno_t;
-}
-extern "C" {
- pub fn clearerr_s(_Stream: *mut FILE) -> errno_t;
-}
-extern "C" {
- pub fn fopen_s(
- _Stream: *mut *mut FILE,
- _FileName: *const ::std::os::raw::c_char,
- _Mode: *const ::std::os::raw::c_char,
- ) -> errno_t;
-}
-extern "C" {
- pub fn fread_s(
- _Buffer: *mut ::std::os::raw::c_void,
- _BufferSize: usize,
- _ElementSize: usize,
- _ElementCount: usize,
- _Stream: *mut FILE,
- ) -> usize;
-}
-extern "C" {
- pub fn freopen_s(
- _Stream: *mut *mut FILE,
- _FileName: *const ::std::os::raw::c_char,
- _Mode: *const ::std::os::raw::c_char,
- _OldStream: *mut FILE,
- ) -> errno_t;
-}
-extern "C" {
- pub fn gets_s(
- _Buffer: *mut ::std::os::raw::c_char,
- _Size: rsize_t,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn tmpfile_s(_Stream: *mut *mut FILE) -> errno_t;
-}
-extern "C" {
- pub fn tmpnam_s(_Buffer: *mut ::std::os::raw::c_char, _Size: rsize_t) -> errno_t;
-}
-extern "C" {
- pub fn clearerr(_Stream: *mut FILE);
-}
-extern "C" {
- pub fn fclose(_Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _fcloseall() -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _fdopen(
- _FileHandle: ::std::os::raw::c_int,
- _Mode: *const ::std::os::raw::c_char,
- ) -> *mut FILE;
-}
-extern "C" {
- pub fn feof(_Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn ferror(_Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fflush(_Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fgetc(_Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _fgetchar() -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fgetpos(_Stream: *mut FILE, _Position: *mut fpos_t) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fgets(
- _Buffer: *mut ::std::os::raw::c_char,
- _MaxCount: ::std::os::raw::c_int,
- _Stream: *mut FILE,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _fileno(_Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _flushall() -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fopen(
- _FileName: *const ::std::os::raw::c_char,
- _Mode: *const ::std::os::raw::c_char,
- ) -> *mut FILE;
-}
-extern "C" {
- pub fn fputc(_Character: ::std::os::raw::c_int, _Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _fputchar(_Character: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fputs(
- _Buffer: *const ::std::os::raw::c_char,
- _Stream: *mut FILE,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fread(
- _Buffer: *mut ::std::os::raw::c_void,
- _ElementSize: ::std::os::raw::c_ulonglong,
- _ElementCount: ::std::os::raw::c_ulonglong,
- _Stream: *mut FILE,
- ) -> ::std::os::raw::c_ulonglong;
-}
-extern "C" {
- pub fn freopen(
- _FileName: *const ::std::os::raw::c_char,
- _Mode: *const ::std::os::raw::c_char,
- _Stream: *mut FILE,
- ) -> *mut FILE;
-}
-extern "C" {
- pub fn _fsopen(
- _FileName: *const ::std::os::raw::c_char,
- _Mode: *const ::std::os::raw::c_char,
- _ShFlag: ::std::os::raw::c_int,
- ) -> *mut FILE;
-}
-extern "C" {
- pub fn fsetpos(_Stream: *mut FILE, _Position: *const fpos_t) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fseek(
- _Stream: *mut FILE,
- _Offset: ::std::os::raw::c_long,
- _Origin: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _fseeki64(
- _Stream: *mut FILE,
- _Offset: ::std::os::raw::c_longlong,
- _Origin: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn ftell(_Stream: *mut FILE) -> ::std::os::raw::c_long;
-}
-extern "C" {
- pub fn _ftelli64(_Stream: *mut FILE) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn fwrite(
- _Buffer: *const ::std::os::raw::c_void,
- _ElementSize: ::std::os::raw::c_ulonglong,
- _ElementCount: ::std::os::raw::c_ulonglong,
- _Stream: *mut FILE,
- ) -> ::std::os::raw::c_ulonglong;
-}
-extern "C" {
- pub fn getc(_Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn getchar() -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _getmaxstdio() -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _getw(_Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn perror(_ErrorMessage: *const ::std::os::raw::c_char);
-}
-extern "C" {
- pub fn _pclose(_Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _popen(
- _Command: *const ::std::os::raw::c_char,
- _Mode: *const ::std::os::raw::c_char,
- ) -> *mut FILE;
-}
-extern "C" {
- pub fn putc(_Character: ::std::os::raw::c_int, _Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn putchar(_Character: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn puts(_Buffer: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _putw(_Word: ::std::os::raw::c_int, _Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn remove(_FileName: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn rename(
- _OldFileName: *const ::std::os::raw::c_char,
- _NewFileName: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _unlink(_FileName: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn unlink(_FileName: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn rewind(_Stream: *mut FILE);
-}
-extern "C" {
- pub fn _rmtmp() -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn setbuf(_Stream: *mut FILE, _Buffer: *mut ::std::os::raw::c_char);
-}
-extern "C" {
- pub fn _setmaxstdio(_Maximum: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn setvbuf(
- _Stream: *mut FILE,
- _Buffer: *mut ::std::os::raw::c_char,
- _Mode: ::std::os::raw::c_int,
- _Size: usize,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _tempnam(
- _DirectoryName: *const ::std::os::raw::c_char,
- _FilePrefix: *const ::std::os::raw::c_char,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn tmpfile() -> *mut FILE;
-}
-extern "C" {
- pub fn tmpnam(_Buffer: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn ungetc(_Character: ::std::os::raw::c_int, _Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _lock_file(_Stream: *mut FILE);
-}
-extern "C" {
- pub fn _unlock_file(_Stream: *mut FILE);
-}
-extern "C" {
- pub fn _fclose_nolock(_Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _fflush_nolock(_Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _fgetc_nolock(_Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _fputc_nolock(
- _Character: ::std::os::raw::c_int,
- _Stream: *mut FILE,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _fread_nolock(
- _Buffer: *mut ::std::os::raw::c_void,
- _ElementSize: usize,
- _ElementCount: usize,
- _Stream: *mut FILE,
- ) -> usize;
-}
-extern "C" {
- pub fn _fread_nolock_s(
- _Buffer: *mut ::std::os::raw::c_void,
- _BufferSize: usize,
- _ElementSize: usize,
- _ElementCount: usize,
- _Stream: *mut FILE,
- ) -> usize;
-}
-extern "C" {
- pub fn _fseek_nolock(
- _Stream: *mut FILE,
- _Offset: ::std::os::raw::c_long,
- _Origin: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _fseeki64_nolock(
- _Stream: *mut FILE,
- _Offset: ::std::os::raw::c_longlong,
- _Origin: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _ftell_nolock(_Stream: *mut FILE) -> ::std::os::raw::c_long;
-}
-extern "C" {
- pub fn _ftelli64_nolock(_Stream: *mut FILE) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn _fwrite_nolock(
- _Buffer: *const ::std::os::raw::c_void,
- _ElementSize: usize,
- _ElementCount: usize,
- _Stream: *mut FILE,
- ) -> usize;
-}
-extern "C" {
- pub fn _getc_nolock(_Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _putc_nolock(
- _Character: ::std::os::raw::c_int,
- _Stream: *mut FILE,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _ungetc_nolock(
- _Character: ::std::os::raw::c_int,
- _Stream: *mut FILE,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __p__commode() -> *mut ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __stdio_common_vfprintf(
- _Options: ::std::os::raw::c_ulonglong,
- _Stream: *mut FILE,
- _Format: *const ::std::os::raw::c_char,
- _Locale: _locale_t,
- _ArgList: va_list,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __stdio_common_vfprintf_s(
- _Options: ::std::os::raw::c_ulonglong,
- _Stream: *mut FILE,
- _Format: *const ::std::os::raw::c_char,
- _Locale: _locale_t,
- _ArgList: va_list,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __stdio_common_vfprintf_p(
- _Options: ::std::os::raw::c_ulonglong,
- _Stream: *mut FILE,
- _Format: *const ::std::os::raw::c_char,
- _Locale: _locale_t,
- _ArgList: va_list,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _set_printf_count_output(_Value: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _get_printf_count_output() -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __stdio_common_vfscanf(
- _Options: ::std::os::raw::c_ulonglong,
- _Stream: *mut FILE,
- _Format: *const ::std::os::raw::c_char,
- _Locale: _locale_t,
- _Arglist: va_list,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __stdio_common_vsprintf(
- _Options: ::std::os::raw::c_ulonglong,
- _Buffer: *mut ::std::os::raw::c_char,
- _BufferCount: usize,
- _Format: *const ::std::os::raw::c_char,
- _Locale: _locale_t,
- _ArgList: va_list,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __stdio_common_vsprintf_s(
- _Options: ::std::os::raw::c_ulonglong,
- _Buffer: *mut ::std::os::raw::c_char,
- _BufferCount: usize,
- _Format: *const ::std::os::raw::c_char,
- _Locale: _locale_t,
- _ArgList: va_list,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __stdio_common_vsnprintf_s(
- _Options: ::std::os::raw::c_ulonglong,
- _Buffer: *mut ::std::os::raw::c_char,
- _BufferCount: usize,
- _MaxCount: usize,
- _Format: *const ::std::os::raw::c_char,
- _Locale: _locale_t,
- _ArgList: va_list,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __stdio_common_vsprintf_p(
- _Options: ::std::os::raw::c_ulonglong,
- _Buffer: *mut ::std::os::raw::c_char,
- _BufferCount: usize,
- _Format: *const ::std::os::raw::c_char,
- _Locale: _locale_t,
- _ArgList: va_list,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __stdio_common_vsscanf(
- _Options: ::std::os::raw::c_ulonglong,
- _Buffer: *const ::std::os::raw::c_char,
- _BufferCount: usize,
- _Format: *const ::std::os::raw::c_char,
- _Locale: _locale_t,
- _ArgList: va_list,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn tempnam(
- _Directory: *const ::std::os::raw::c_char,
- _FilePrefix: *const ::std::os::raw::c_char,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn fcloseall() -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fdopen(
- _FileHandle: ::std::os::raw::c_int,
- _Format: *const ::std::os::raw::c_char,
- ) -> *mut FILE;
-}
-extern "C" {
- pub fn fgetchar() -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fileno(_Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn flushall() -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fputchar(_Ch: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn getw(_Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn putw(_Ch: ::std::os::raw::c_int, _Stream: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn rmtmp() -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct str {
- pub data: *mut ::std::os::raw::c_char,
- pub dim: ::std::os::raw::c_ulong,
- pub len: ::std::os::raw::c_ulong,
- pub status: ::std::os::raw::c_int,
-}
-extern "C" {
- pub fn str_new() -> *mut str;
-}
-extern "C" {
- pub fn str_delete(s: *mut str);
-}
-extern "C" {
- pub fn str_init(s: *mut str);
-}
-extern "C" {
- pub fn str_initstr(s: *mut str, from: *mut str);
-}
-extern "C" {
- pub fn str_initstrc(s: *mut str, initstr: *const ::std::os::raw::c_char);
-}
-extern "C" {
- pub fn str_initstrsc(s: *mut str, ...);
-}
-extern "C" {
- pub fn str_empty(s: *mut str);
-}
-extern "C" {
- pub fn str_free(s: *mut str);
-}
-extern "C" {
- pub fn strs_init(s: *mut str, ...);
-}
-extern "C" {
- pub fn strs_empty(s: *mut str, ...);
-}
-extern "C" {
- pub fn strs_free(s: *mut str, ...);
-}
-extern "C" {
- pub fn str_strdup(s: *mut str) -> *mut str;
-}
-extern "C" {
- pub fn str_strdupc(p: *const ::std::os::raw::c_char) -> *mut str;
-}
-extern "C" {
- pub fn str_strcat(s: *mut str, from: *mut str);
-}
-extern "C" {
- pub fn str_strcatc(s: *mut str, from: *const ::std::os::raw::c_char);
-}
-extern "C" {
- pub fn str_strcpy(s: *mut str, from: *mut str);
-}
-extern "C" {
- pub fn str_strcpyc(s: *mut str, from: *const ::std::os::raw::c_char);
-}
-extern "C" {
- pub fn str_strcmp(s: *const str, t: *const str) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn str_strcmpc(s: *const str, t: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn str_strncmp(s: *const str, t: *const str, n: usize) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn str_strncmpc(
- s: *const str,
- t: *const ::std::os::raw::c_char,
- n: usize,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn str_strcasecmp(s: *const str, t: *const str) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn str_strcasecmpc(
- s: *const str,
- t: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn str_strstr(s: *const str, t: *const str) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn str_strstrc(
- s: *const str,
- t: *const ::std::os::raw::c_char,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn str_prepend(s: *mut str, addstr: *const ::std::os::raw::c_char);
-}
-extern "C" {
- pub fn str_mergestrs(s: *mut str, ...);
-}
-extern "C" {
- pub fn str_addchar(s: *mut str, newchar: ::std::os::raw::c_char);
-}
-extern "C" {
- pub fn str_reverse(s: *mut str);
-}
-extern "C" {
- pub fn str_addutf8(
- s: *mut str,
- p: *const ::std::os::raw::c_char,
- ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn str_segcat(
- s: *mut str,
- startat: *mut ::std::os::raw::c_char,
- endat: *mut ::std::os::raw::c_char,
- );
-}
-extern "C" {
- pub fn str_cpytodelim(
- s: *mut str,
- p: *const ::std::os::raw::c_char,
- delim: *const ::std::os::raw::c_char,
- finalstep: ::std::os::raw::c_uchar,
- ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn str_cattodelim(
- s: *mut str,
- p: *const ::std::os::raw::c_char,
- delim: *const ::std::os::raw::c_char,
- finalstep: ::std::os::raw::c_uchar,
- ) -> *const ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn str_segcpy(
- s: *mut str,
- startat: *mut ::std::os::raw::c_char,
- endat: *mut ::std::os::raw::c_char,
- );
-}
-extern "C" {
- pub fn str_segdel(
- s: *mut str,
- startat: *mut ::std::os::raw::c_char,
- endat: *mut ::std::os::raw::c_char,
- );
-}
-extern "C" {
- pub fn str_indxcpy(
- s: *mut str,
- p: *mut ::std::os::raw::c_char,
- start: ::std::os::raw::c_ulong,
- stop: ::std::os::raw::c_ulong,
- );
-}
-extern "C" {
- pub fn str_indxcat(
- s: *mut str,
- p: *mut ::std::os::raw::c_char,
- start: ::std::os::raw::c_ulong,
- stop: ::std::os::raw::c_ulong,
- );
-}
-extern "C" {
- pub fn str_fprintf(fp: *mut FILE, s: *mut str);
-}
-extern "C" {
- pub fn str_fget(
- fp: *mut FILE,
- buf: *mut ::std::os::raw::c_char,
- bufsize: ::std::os::raw::c_int,
- pbufpos: *mut ::std::os::raw::c_int,
- outs: *mut str,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn str_cstr(s: *mut str) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn str_char(s: *mut str, n: ::std::os::raw::c_ulong) -> ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn str_revchar(s: *mut str, n: ::std::os::raw::c_ulong) -> ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn str_fgetline(s: *mut str, fp: *mut FILE) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn str_findreplace(
- s: *mut str,
- find: *const ::std::os::raw::c_char,
- replace: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn str_toupper(s: *mut str);
-}
-extern "C" {
- pub fn str_tolower(s: *mut str);
-}
-extern "C" {
- pub fn str_trimstartingws(s: *mut str);
-}
-extern "C" {
- pub fn str_trimendingws(s: *mut str);
-}
-extern "C" {
- pub fn str_swapstrings(s1: *mut str, s2: *mut str);
-}
-extern "C" {
- pub fn str_stripws(s: *mut str);
-}
-extern "C" {
- pub fn str_match_first(s: *mut str, ch: ::std::os::raw::c_char) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn str_match_end(s: *mut str, ch: ::std::os::raw::c_char) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn str_trimbegin(s: *mut str, n: ::std::os::raw::c_ulong);
-}
-extern "C" {
- pub fn str_trimend(s: *mut str, n: ::std::os::raw::c_ulong);
-}
-extern "C" {
- pub fn str_pad(s: *mut str, len: ::std::os::raw::c_ulong, ch: ::std::os::raw::c_char);
-}
-extern "C" {
- pub fn str_copyposlen(
- s: *mut str,
- in_: *mut str,
- pos: ::std::os::raw::c_ulong,
- len: ::std::os::raw::c_ulong,
- );
-}
-extern "C" {
- pub fn str_makepath(
- path: *mut str,
- dirname: *const ::std::os::raw::c_char,
- filename: *const ::std::os::raw::c_char,
- sep: ::std::os::raw::c_char,
- );
-}
-extern "C" {
- pub fn str_fill(s: *mut str, n: ::std::os::raw::c_ulong, fillchar: ::std::os::raw::c_char);
-}
-extern "C" {
- pub fn str_is_mixedcase(s: *mut str) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn str_is_lowercase(s: *mut str) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn str_is_uppercase(s: *mut str) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn str_memerr(s: *mut str) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn str_strlen(s: *mut str) -> ::std::os::raw::c_ulong;
-}
-extern "C" {
- pub fn str_has_value(s: *mut str) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn str_is_empty(s: *mut str) -> ::std::os::raw::c_int;
-}
-pub type vplist_index = ::std::os::raw::c_int;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct vplist {
- pub n: vplist_index,
- pub max: vplist_index,
- pub data: *mut *mut ::std::os::raw::c_void,
-}
-pub type vplist_ptrfree =
- ::std::option::Option<unsafe extern "C" fn(arg1: *mut ::std::os::raw::c_void)>;
-extern "C" {
- pub fn vplist_new() -> *mut vplist;
-}
-extern "C" {
- pub fn vplist_init(vpl: *mut vplist);
-}
-extern "C" {
- pub fn vplist_add(vpl: *mut vplist, v: *mut ::std::os::raw::c_void) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn vplist_fill(
- vpl: *mut vplist,
- n: vplist_index,
- v: *mut ::std::os::raw::c_void,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn vplist_copy(to: *mut vplist, from: *mut vplist) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn vplist_append(vpl: *mut vplist, add: *mut vplist) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn vplist_insert_list(
- vpl: *mut vplist,
- pos: vplist_index,
- add: *mut vplist,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn vplist_get(vpl: *mut vplist, n: vplist_index) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn vplist_set(vpl: *mut vplist, n: vplist_index, v: *mut ::std::os::raw::c_void);
-}
-extern "C" {
- pub fn vplist_swap(vpl: *mut vplist, n1: vplist_index, n2: vplist_index);
-}
-extern "C" {
- pub fn vplist_remove(vpl: *mut vplist, n: vplist_index) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn vplist_removefn(
- vpl: *mut vplist,
- n: vplist_index,
- vpf: vplist_ptrfree,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn vplist_removevp(
- vpl: *mut vplist,
- v: *mut ::std::os::raw::c_void,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn vplist_removevpfn(
- vpl: *mut vplist,
- v: *mut ::std::os::raw::c_void,
- vpf: vplist_ptrfree,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn vplist_remove_rangefn(
- vpl: *mut vplist,
- start: vplist_index,
- endplusone: vplist_index,
- vpf: vplist_ptrfree,
- );
-}
-extern "C" {
- pub fn vplist_remove_range(vpl: *mut vplist, start: vplist_index, endplusone: vplist_index);
-}
-extern "C" {
- pub fn vplist_find(vpl: *mut vplist, v: *mut ::std::os::raw::c_void) -> vplist_index;
-}
-extern "C" {
- pub fn vplist_empty(vpl: *mut vplist);
-}
-extern "C" {
- pub fn vplist_emptyfn(vpl: *mut vplist, fn_: vplist_ptrfree);
-}
-extern "C" {
- pub fn vplist_free(vpl: *mut vplist);
-}
-extern "C" {
- pub fn vplist_freefn(vpl: *mut vplist, fn_: vplist_ptrfree);
-}
-extern "C" {
- pub fn vplist_delete(vpl: *mut *mut vplist);
-}
-extern "C" {
- pub fn vplist_deletefn(vpl: *mut *mut vplist, fn_: vplist_ptrfree);
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct fields {
- pub tag: *mut str,
- pub data: *mut str,
- pub used: *mut ::std::os::raw::c_int,
- pub level: *mut ::std::os::raw::c_int,
- pub n: ::std::os::raw::c_int,
- pub max: ::std::os::raw::c_int,
-}
-extern "C" {
- pub fn fields_init(f: *mut fields);
-}
-extern "C" {
- pub fn fields_new() -> *mut fields;
-}
-extern "C" {
- pub fn fields_delete(f: *mut fields);
-}
-extern "C" {
- pub fn fields_free(f: *mut fields);
-}
-extern "C" {
- pub fn _fields_add(
- f: *mut fields,
- tag: *const ::std::os::raw::c_char,
- data: *const ::std::os::raw::c_char,
- level: ::std::os::raw::c_int,
- mode: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _fields_add_tagsuffix(
- f: *mut fields,
- tag: *const ::std::os::raw::c_char,
- suffix: *const ::std::os::raw::c_char,
- data: *const ::std::os::raw::c_char,
- level: ::std::os::raw::c_int,
- mode: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fields_maxlevel(f: *mut fields) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fields_clearused(f: *mut fields);
-}
-extern "C" {
- pub fn fields_setused(f: *mut fields, n: ::std::os::raw::c_int);
-}
-extern "C" {
- pub fn fields_replace_or_add(
- f: *mut fields,
- tag: *const ::std::os::raw::c_char,
- data: *const ::std::os::raw::c_char,
- level: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fields_num(f: *mut fields) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fields_used(f: *mut fields, n: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fields_notag(f: *mut fields, n: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fields_nodata(f: *mut fields, n: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fields_match_level(
- f: *mut fields,
- n: ::std::os::raw::c_int,
- level: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fields_match_tag(
- f: *mut fields,
- n: ::std::os::raw::c_int,
- tag: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fields_match_casetag(
- f: *mut fields,
- n: ::std::os::raw::c_int,
- tag: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fields_match_tag_level(
- f: *mut fields,
- n: ::std::os::raw::c_int,
- tag: *const ::std::os::raw::c_char,
- level: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fields_match_casetag_level(
- f: *mut fields,
- n: ::std::os::raw::c_int,
- tag: *const ::std::os::raw::c_char,
- level: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fields_report(f: *mut fields, fp: *mut FILE);
-}
-extern "C" {
- pub fn fields_tag(
- f: *mut fields,
- n: ::std::os::raw::c_int,
- mode: ::std::os::raw::c_int,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn fields_value(
- f: *mut fields,
- n: ::std::os::raw::c_int,
- mode: ::std::os::raw::c_int,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn fields_level(f: *mut fields, n: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fields_find(
- f: *mut fields,
- searchtag: *const ::std::os::raw::c_char,
- level: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fields_findv(
- f: *mut fields,
- level: ::std::os::raw::c_int,
- mode: ::std::os::raw::c_int,
- tag: *const ::std::os::raw::c_char,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn fields_findv_firstof(
- f: *mut fields,
- level: ::std::os::raw::c_int,
- mode: ::std::os::raw::c_int,
- ...
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn fields_findv_each(
- f: *mut fields,
- level: ::std::os::raw::c_int,
- mode: ::std::os::raw::c_int,
- a: *mut vplist,
- tag: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn fields_findv_eachof(
- f: *mut fields,
- level: ::std::os::raw::c_int,
- mode: ::std::os::raw::c_int,
- a: *mut vplist,
- ...
- ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct lookups {
- pub oldstr: *mut ::std::os::raw::c_char,
- pub newstr: *mut ::std::os::raw::c_char,
- pub processingtype: ::std::os::raw::c_int,
- pub level: ::std::os::raw::c_int,
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct variants {
- pub type_: [::std::os::raw::c_char; 25usize],
- pub tags: *mut lookups,
- pub ntags: ::std::os::raw::c_int,
-}
-extern "C" {
- pub fn get_reftype(
- q: *const ::std::os::raw::c_char,
- refnum: ::std::os::raw::c_long,
- progname: *mut ::std::os::raw::c_char,
- all: *mut variants,
- nall: ::std::os::raw::c_int,
- tag: *mut ::std::os::raw::c_char,
- is_default: *mut ::std::os::raw::c_int,
- chattiness: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn process_findoldtag(
- oldtag: *const ::std::os::raw::c_char,
- reftype: ::std::os::raw::c_int,
- all: *mut variants,
- nall: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn translate_oldtag(
- oldtag: *const ::std::os::raw::c_char,
- reftype: ::std::os::raw::c_int,
- all: *mut variants,
- nall: ::std::os::raw::c_int,
- processingtype: *mut ::std::os::raw::c_int,
- level: *mut ::std::os::raw::c_int,
- newtag: *mut *mut ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct bibl {
- pub nrefs: ::std::os::raw::c_long,
- pub maxrefs: ::std::os::raw::c_long,
- pub ref_: *mut *mut fields,
-}
-extern "C" {
- pub fn bibl_init(b: *mut bibl);
-}
-extern "C" {
- pub fn bibl_addref(b: *mut bibl, ref_: *mut fields) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn bibl_free(b: *mut bibl);
-}
-extern "C" {
- pub fn bibl_copy(bout: *mut bibl, bin: *mut bibl) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _calloc_base(_Count: usize, _Size: usize) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn calloc(
- _Count: ::std::os::raw::c_ulonglong,
- _Size: ::std::os::raw::c_ulonglong,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn _callnewh(_Size: usize) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _expand(
- _Block: *mut ::std::os::raw::c_void,
- _Size: usize,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn _free_base(_Block: *mut ::std::os::raw::c_void);
-}
-extern "C" {
- pub fn free(_Block: *mut ::std::os::raw::c_void);
-}
-extern "C" {
- pub fn _malloc_base(_Size: usize) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn malloc(_Size: ::std::os::raw::c_ulonglong) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn _msize_base(_Block: *mut ::std::os::raw::c_void) -> usize;
-}
-extern "C" {
- pub fn _msize(_Block: *mut ::std::os::raw::c_void) -> usize;
-}
-extern "C" {
- pub fn _realloc_base(
- _Block: *mut ::std::os::raw::c_void,
- _Size: usize,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn realloc(
- _Block: *mut ::std::os::raw::c_void,
- _Size: ::std::os::raw::c_ulonglong,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn _recalloc_base(
- _Block: *mut ::std::os::raw::c_void,
- _Count: usize,
- _Size: usize,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn _recalloc(
- _Block: *mut ::std::os::raw::c_void,
- _Count: usize,
- _Size: usize,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn _aligned_free(_Block: *mut ::std::os::raw::c_void);
-}
-extern "C" {
- pub fn _aligned_malloc(_Size: usize, _Alignment: usize) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn _aligned_offset_malloc(
- _Size: usize,
- _Alignment: usize,
- _Offset: usize,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn _aligned_msize(
- _Block: *mut ::std::os::raw::c_void,
- _Alignment: usize,
- _Offset: usize,
- ) -> usize;
-}
-extern "C" {
- pub fn _aligned_offset_realloc(
- _Block: *mut ::std::os::raw::c_void,
- _Size: usize,
- _Alignment: usize,
- _Offset: usize,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn _aligned_offset_recalloc(
- _Block: *mut ::std::os::raw::c_void,
- _Count: usize,
- _Size: usize,
- _Alignment: usize,
- _Offset: usize,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn _aligned_realloc(
- _Block: *mut ::std::os::raw::c_void,
- _Size: usize,
- _Alignment: usize,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn _aligned_recalloc(
- _Block: *mut ::std::os::raw::c_void,
- _Count: usize,
- _Size: usize,
- _Alignment: usize,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn _errno() -> *mut ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _set_errno(_Value: ::std::os::raw::c_int) -> errno_t;
-}
-extern "C" {
- pub fn _get_errno(_Value: *mut ::std::os::raw::c_int) -> errno_t;
-}
-extern "C" {
- pub fn __threadid() -> ::std::os::raw::c_ulong;
-}
-extern "C" {
- pub fn __threadhandle() -> usize;
-}
-pub type _CoreCrtSecureSearchSortCompareFunction = ::std::option::Option<
- unsafe extern "C" fn(
- arg1: *mut ::std::os::raw::c_void,
- arg2: *const ::std::os::raw::c_void,
- arg3: *const ::std::os::raw::c_void,
- ) -> ::std::os::raw::c_int,
->;
-pub type _CoreCrtNonSecureSearchSortCompareFunction = ::std::option::Option<
- unsafe extern "C" fn(
- arg1: *const ::std::os::raw::c_void,
- arg2: *const ::std::os::raw::c_void,
- ) -> ::std::os::raw::c_int,
->;
-extern "C" {
- pub fn bsearch_s(
- _Key: *const ::std::os::raw::c_void,
- _Base: *const ::std::os::raw::c_void,
- _NumOfElements: rsize_t,
- _SizeOfElements: rsize_t,
- _CompareFunction: _CoreCrtSecureSearchSortCompareFunction,
- _Context: *mut ::std::os::raw::c_void,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn qsort_s(
- _Base: *mut ::std::os::raw::c_void,
- _NumOfElements: rsize_t,
- _SizeOfElements: rsize_t,
- _CompareFunction: _CoreCrtSecureSearchSortCompareFunction,
- _Context: *mut ::std::os::raw::c_void,
- );
-}
-extern "C" {
- pub fn bsearch(
- _Key: *const ::std::os::raw::c_void,
- _Base: *const ::std::os::raw::c_void,
- _NumOfElements: usize,
- _SizeOfElements: usize,
- _CompareFunction: _CoreCrtNonSecureSearchSortCompareFunction,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn qsort(
- _Base: *mut ::std::os::raw::c_void,
- _NumOfElements: usize,
- _SizeOfElements: usize,
- _CompareFunction: _CoreCrtNonSecureSearchSortCompareFunction,
- );
-}
-extern "C" {
- pub fn _lfind_s(
- _Key: *const ::std::os::raw::c_void,
- _Base: *const ::std::os::raw::c_void,
- _NumOfElements: *mut ::std::os::raw::c_uint,
- _SizeOfElements: usize,
- _CompareFunction: _CoreCrtSecureSearchSortCompareFunction,
- _Context: *mut ::std::os::raw::c_void,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn _lfind(
- _Key: *const ::std::os::raw::c_void,
- _Base: *const ::std::os::raw::c_void,
- _NumOfElements: *mut ::std::os::raw::c_uint,
- _SizeOfElements: ::std::os::raw::c_uint,
- _CompareFunction: _CoreCrtNonSecureSearchSortCompareFunction,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn _lsearch_s(
- _Key: *const ::std::os::raw::c_void,
- _Base: *mut ::std::os::raw::c_void,
- _NumOfElements: *mut ::std::os::raw::c_uint,
- _SizeOfElements: usize,
- _CompareFunction: _CoreCrtSecureSearchSortCompareFunction,
- _Context: *mut ::std::os::raw::c_void,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn _lsearch(
- _Key: *const ::std::os::raw::c_void,
- _Base: *mut ::std::os::raw::c_void,
- _NumOfElements: *mut ::std::os::raw::c_uint,
- _SizeOfElements: ::std::os::raw::c_uint,
- _CompareFunction: _CoreCrtNonSecureSearchSortCompareFunction,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn lfind(
- _Key: *const ::std::os::raw::c_void,
- _Base: *const ::std::os::raw::c_void,
- _NumOfElements: *mut ::std::os::raw::c_uint,
- _SizeOfElements: ::std::os::raw::c_uint,
- _CompareFunction: _CoreCrtNonSecureSearchSortCompareFunction,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn lsearch(
- _Key: *const ::std::os::raw::c_void,
- _Base: *mut ::std::os::raw::c_void,
- _NumOfElements: *mut ::std::os::raw::c_uint,
- _SizeOfElements: ::std::os::raw::c_uint,
- _CompareFunction: _CoreCrtNonSecureSearchSortCompareFunction,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn _itow_s(
- _Value: ::std::os::raw::c_int,
- _Buffer: *mut wchar_t,
- _BufferCount: usize,
- _Radix: ::std::os::raw::c_int,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _itow(
- _Value: ::std::os::raw::c_int,
- _Buffer: *mut wchar_t,
- _Radix: ::std::os::raw::c_int,
- ) -> *mut wchar_t;
-}
-extern "C" {
- pub fn _ltow_s(
- _Value: ::std::os::raw::c_long,
- _Buffer: *mut wchar_t,
- _BufferCount: usize,
- _Radix: ::std::os::raw::c_int,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _ltow(
- _Value: ::std::os::raw::c_long,
- _Buffer: *mut wchar_t,
- _Radix: ::std::os::raw::c_int,
- ) -> *mut wchar_t;
-}
-extern "C" {
- pub fn _ultow_s(
- _Value: ::std::os::raw::c_ulong,
- _Buffer: *mut wchar_t,
- _BufferCount: usize,
- _Radix: ::std::os::raw::c_int,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _ultow(
- _Value: ::std::os::raw::c_ulong,
- _Buffer: *mut wchar_t,
- _Radix: ::std::os::raw::c_int,
- ) -> *mut wchar_t;
-}
-extern "C" {
- pub fn wcstod(_String: *const wchar_t, _EndPtr: *mut *mut wchar_t) -> f64;
-}
-extern "C" {
- pub fn _wcstod_l(
- _String: *const wchar_t,
- _EndPtr: *mut *mut wchar_t,
- _Locale: _locale_t,
- ) -> f64;
-}
-extern "C" {
- pub fn wcstol(
- _String: *const wchar_t,
- _EndPtr: *mut *mut wchar_t,
- _Radix: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_long;
-}
-extern "C" {
- pub fn _wcstol_l(
- _String: *const wchar_t,
- _EndPtr: *mut *mut wchar_t,
- _Radix: ::std::os::raw::c_int,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_long;
-}
-extern "C" {
- pub fn wcstoll(
- _String: *const wchar_t,
- _EndPtr: *mut *mut wchar_t,
- _Radix: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn _wcstoll_l(
- _String: *const wchar_t,
- _EndPtr: *mut *mut wchar_t,
- _Radix: ::std::os::raw::c_int,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn wcstoul(
- _String: *const wchar_t,
- _EndPtr: *mut *mut wchar_t,
- _Radix: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_ulong;
-}
-extern "C" {
- pub fn _wcstoul_l(
- _String: *const wchar_t,
- _EndPtr: *mut *mut wchar_t,
- _Radix: ::std::os::raw::c_int,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_ulong;
-}
-extern "C" {
- pub fn wcstoull(
- _String: *const wchar_t,
- _EndPtr: *mut *mut wchar_t,
- _Radix: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_ulonglong;
-}
-extern "C" {
- pub fn _wcstoull_l(
- _String: *const wchar_t,
- _EndPtr: *mut *mut wchar_t,
- _Radix: ::std::os::raw::c_int,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_ulonglong;
-}
-extern "C" {
- pub fn wcstold(_String: *const wchar_t, _EndPtr: *mut *mut wchar_t) -> f64;
-}
-extern "C" {
- pub fn _wcstold_l(
- _String: *const wchar_t,
- _EndPtr: *mut *mut wchar_t,
- _Locale: _locale_t,
- ) -> f64;
-}
-extern "C" {
- pub fn wcstof(_String: *const wchar_t, _EndPtr: *mut *mut wchar_t) -> f32;
-}
-extern "C" {
- pub fn _wcstof_l(
- _String: *const wchar_t,
- _EndPtr: *mut *mut wchar_t,
- _Locale: _locale_t,
- ) -> f32;
-}
-extern "C" {
- pub fn _wtof(_String: *const wchar_t) -> f64;
-}
-extern "C" {
- pub fn _wtof_l(_String: *const wchar_t, _Locale: _locale_t) -> f64;
-}
-extern "C" {
- pub fn _wtoi(_String: *const wchar_t) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _wtoi_l(_String: *const wchar_t, _Locale: _locale_t) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _wtol(_String: *const wchar_t) -> ::std::os::raw::c_long;
-}
-extern "C" {
- pub fn _wtol_l(_String: *const wchar_t, _Locale: _locale_t) -> ::std::os::raw::c_long;
-}
-extern "C" {
- pub fn _wtoll(_String: *const wchar_t) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn _wtoll_l(_String: *const wchar_t, _Locale: _locale_t) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn _i64tow_s(
- _Value: ::std::os::raw::c_longlong,
- _Buffer: *mut wchar_t,
- _BufferCount: usize,
- _Radix: ::std::os::raw::c_int,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _i64tow(
- _Value: ::std::os::raw::c_longlong,
- _Buffer: *mut wchar_t,
- _Radix: ::std::os::raw::c_int,
- ) -> *mut wchar_t;
-}
-extern "C" {
- pub fn _ui64tow_s(
- _Value: ::std::os::raw::c_ulonglong,
- _Buffer: *mut wchar_t,
- _BufferCount: usize,
- _Radix: ::std::os::raw::c_int,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _ui64tow(
- _Value: ::std::os::raw::c_ulonglong,
- _Buffer: *mut wchar_t,
- _Radix: ::std::os::raw::c_int,
- ) -> *mut wchar_t;
-}
-extern "C" {
- pub fn _wtoi64(_String: *const wchar_t) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn _wtoi64_l(_String: *const wchar_t, _Locale: _locale_t) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn _wcstoi64(
- _String: *const wchar_t,
- _EndPtr: *mut *mut wchar_t,
- _Radix: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn _wcstoi64_l(
- _String: *const wchar_t,
- _EndPtr: *mut *mut wchar_t,
- _Radix: ::std::os::raw::c_int,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn _wcstoui64(
- _String: *const wchar_t,
- _EndPtr: *mut *mut wchar_t,
- _Radix: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_ulonglong;
-}
-extern "C" {
- pub fn _wcstoui64_l(
- _String: *const wchar_t,
- _EndPtr: *mut *mut wchar_t,
- _Radix: ::std::os::raw::c_int,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_ulonglong;
-}
-extern "C" {
- pub fn _wfullpath(
- _Buffer: *mut wchar_t,
- _Path: *const wchar_t,
- _BufferCount: usize,
- ) -> *mut wchar_t;
-}
-extern "C" {
- pub fn _wmakepath_s(
- _Buffer: *mut wchar_t,
- _BufferCount: usize,
- _Drive: *const wchar_t,
- _Dir: *const wchar_t,
- _Filename: *const wchar_t,
- _Ext: *const wchar_t,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _wmakepath(
- _Buffer: *mut wchar_t,
- _Drive: *const wchar_t,
- _Dir: *const wchar_t,
- _Filename: *const wchar_t,
- _Ext: *const wchar_t,
- );
-}
-extern "C" {
- pub fn _wsplitpath(
- _FullPath: *const wchar_t,
- _Drive: *mut wchar_t,
- _Dir: *mut wchar_t,
- _Filename: *mut wchar_t,
- _Ext: *mut wchar_t,
- );
-}
-extern "C" {
- pub fn _wsplitpath_s(
- _FullPath: *const wchar_t,
- _Drive: *mut wchar_t,
- _DriveCount: usize,
- _Dir: *mut wchar_t,
- _DirCount: usize,
- _Filename: *mut wchar_t,
- _FilenameCount: usize,
- _Ext: *mut wchar_t,
- _ExtCount: usize,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _wdupenv_s(
- _Buffer: *mut *mut wchar_t,
- _BufferCount: *mut usize,
- _VarName: *const wchar_t,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _wgetenv(_VarName: *const wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn _wgetenv_s(
- _RequiredCount: *mut usize,
- _Buffer: *mut wchar_t,
- _BufferCount: usize,
- _VarName: *const wchar_t,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _wputenv(_EnvString: *const wchar_t) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _wputenv_s(_Name: *const wchar_t, _Value: *const wchar_t) -> errno_t;
-}
-extern "C" {
- pub fn _wsearchenv_s(
- _Filename: *const wchar_t,
- _VarName: *const wchar_t,
- _Buffer: *mut wchar_t,
- _BufferCount: usize,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _wsearchenv(
- _Filename: *const wchar_t,
- _VarName: *const wchar_t,
- _ResultPath: *mut wchar_t,
- );
-}
-extern "C" {
- pub fn _wsystem(_Command: *const wchar_t) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _swab(
- _Buf1: *mut ::std::os::raw::c_char,
- _Buf2: *mut ::std::os::raw::c_char,
- _SizeInBytes: ::std::os::raw::c_int,
- );
-}
-extern "C" {
- pub fn exit(_Code: ::std::os::raw::c_int);
-}
-extern "C" {
- pub fn _exit(_Code: ::std::os::raw::c_int);
-}
-extern "C" {
- pub fn _Exit(_Code: ::std::os::raw::c_int);
-}
-extern "C" {
- pub fn quick_exit(_Code: ::std::os::raw::c_int);
-}
-extern "C" {
- pub fn abort();
-}
-extern "C" {
- pub fn _set_abort_behavior(
- _Flags: ::std::os::raw::c_uint,
- _Mask: ::std::os::raw::c_uint,
- ) -> ::std::os::raw::c_uint;
-}
-pub type _onexit_t = ::std::option::Option<unsafe extern "C" fn() -> ::std::os::raw::c_int>;
-extern "C" {
- pub fn atexit(arg1: ::std::option::Option<unsafe extern "C" fn()>) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _onexit(_Func: _onexit_t) -> _onexit_t;
-}
-extern "C" {
- pub fn at_quick_exit(
- arg1: ::std::option::Option<unsafe extern "C" fn()>,
- ) -> ::std::os::raw::c_int;
-}
-pub type _purecall_handler = ::std::option::Option<unsafe extern "C" fn()>;
-pub type _invalid_parameter_handler = ::std::option::Option<
- unsafe extern "C" fn(
- arg1: *const wchar_t,
- arg2: *const wchar_t,
- arg3: *const wchar_t,
- arg4: ::std::os::raw::c_uint,
- arg5: usize,
- ),
->;
-extern "C" {
- pub fn _set_purecall_handler(_Handler: _purecall_handler) -> _purecall_handler;
-}
-extern "C" {
- pub fn _get_purecall_handler() -> _purecall_handler;
-}
-extern "C" {
- pub fn _set_invalid_parameter_handler(
- _Handler: _invalid_parameter_handler,
- ) -> _invalid_parameter_handler;
-}
-extern "C" {
- pub fn _get_invalid_parameter_handler() -> _invalid_parameter_handler;
-}
-extern "C" {
- pub fn _set_thread_local_invalid_parameter_handler(
- _Handler: _invalid_parameter_handler,
- ) -> _invalid_parameter_handler;
-}
-extern "C" {
- pub fn _get_thread_local_invalid_parameter_handler() -> _invalid_parameter_handler;
-}
-extern "C" {
- pub fn _set_error_mode(_Mode: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __doserrno() -> *mut ::std::os::raw::c_ulong;
-}
-extern "C" {
- pub fn _set_doserrno(_Value: ::std::os::raw::c_ulong) -> errno_t;
-}
-extern "C" {
- pub fn _get_doserrno(_Value: *mut ::std::os::raw::c_ulong) -> errno_t;
-}
-extern "C" {
- pub fn __sys_errlist() -> *mut *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn __sys_nerr() -> *mut ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __p__pgmptr() -> *mut *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn __p__wpgmptr() -> *mut *mut wchar_t;
-}
-extern "C" {
- pub fn __p__fmode() -> *mut ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _get_pgmptr(_Value: *mut *mut ::std::os::raw::c_char) -> errno_t;
-}
-extern "C" {
- pub fn _get_wpgmptr(_Value: *mut *mut wchar_t) -> errno_t;
-}
-extern "C" {
- pub fn _set_fmode(_Mode: ::std::os::raw::c_int) -> errno_t;
-}
-extern "C" {
- pub fn _get_fmode(_PMode: *mut ::std::os::raw::c_int) -> errno_t;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _div_t {
- pub quot: ::std::os::raw::c_int,
- pub rem: ::std::os::raw::c_int,
-}
-pub type div_t = _div_t;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _ldiv_t {
- pub quot: ::std::os::raw::c_long,
- pub rem: ::std::os::raw::c_long,
-}
-pub type ldiv_t = _ldiv_t;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _lldiv_t {
- pub quot: ::std::os::raw::c_longlong,
- pub rem: ::std::os::raw::c_longlong,
-}
-pub type lldiv_t = _lldiv_t;
-extern "C" {
- pub fn abs(_Number: ::std::os::raw::c_int) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn labs(_Number: ::std::os::raw::c_long) -> ::std::os::raw::c_long;
-}
-extern "C" {
- pub fn llabs(_Number: ::std::os::raw::c_longlong) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn _abs64(_Number: ::std::os::raw::c_longlong) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn _byteswap_ushort(_Number: ::std::os::raw::c_ushort) -> ::std::os::raw::c_ushort;
-}
-extern "C" {
- pub fn _byteswap_ulong(_Number: ::std::os::raw::c_ulong) -> ::std::os::raw::c_ulong;
-}
-extern "C" {
- pub fn _byteswap_uint64(_Number: ::std::os::raw::c_ulonglong) -> ::std::os::raw::c_ulonglong;
-}
-extern "C" {
- pub fn div(_Numerator: ::std::os::raw::c_int, _Denominator: ::std::os::raw::c_int) -> div_t;
-}
-extern "C" {
- pub fn ldiv(_Numerator: ::std::os::raw::c_long, _Denominator: ::std::os::raw::c_long)
- -> ldiv_t;
-}
-extern "C" {
- pub fn lldiv(
- _Numerator: ::std::os::raw::c_longlong,
- _Denominator: ::std::os::raw::c_longlong,
- ) -> lldiv_t;
-}
-extern "C" {
- pub fn _rotl(
- _Value: ::std::os::raw::c_uint,
- _Shift: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_uint;
-}
-extern "C" {
- pub fn _lrotl(
- _Value: ::std::os::raw::c_ulong,
- _Shift: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_ulong;
-}
-extern "C" {
- pub fn _rotl64(
- _Value: ::std::os::raw::c_ulonglong,
- _Shift: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_ulonglong;
-}
-extern "C" {
- pub fn _rotr(
- _Value: ::std::os::raw::c_uint,
- _Shift: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_uint;
-}
-extern "C" {
- pub fn _lrotr(
- _Value: ::std::os::raw::c_ulong,
- _Shift: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_ulong;
-}
-extern "C" {
- pub fn _rotr64(
- _Value: ::std::os::raw::c_ulonglong,
- _Shift: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_ulonglong;
-}
-extern "C" {
- pub fn srand(_Seed: ::std::os::raw::c_uint);
-}
-extern "C" {
- pub fn rand() -> ::std::os::raw::c_int;
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _LDOUBLE {
- pub ld: [::std::os::raw::c_uchar; 10usize],
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _CRT_DOUBLE {
- pub x: f64,
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _CRT_FLOAT {
- pub f: f32,
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _LONGDOUBLE {
- pub x: f64,
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct _LDBL12 {
- pub ld12: [::std::os::raw::c_uchar; 12usize],
-}
-extern "C" {
- pub fn atof(_String: *const ::std::os::raw::c_char) -> f64;
-}
-extern "C" {
- pub fn atoi(_String: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn atol(_String: *const ::std::os::raw::c_char) -> ::std::os::raw::c_long;
-}
-extern "C" {
- pub fn atoll(_String: *const ::std::os::raw::c_char) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn _atoi64(_String: *const ::std::os::raw::c_char) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn _atof_l(_String: *const ::std::os::raw::c_char, _Locale: _locale_t) -> f64;
-}
-extern "C" {
- pub fn _atoi_l(
- _String: *const ::std::os::raw::c_char,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _atol_l(
- _String: *const ::std::os::raw::c_char,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_long;
-}
-extern "C" {
- pub fn _atoll_l(
- _String: *const ::std::os::raw::c_char,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn _atoi64_l(
- _String: *const ::std::os::raw::c_char,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn _atoflt(
- _Result: *mut _CRT_FLOAT,
- _String: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _atodbl(
- _Result: *mut _CRT_DOUBLE,
- _String: *mut ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _atoldbl(
- _Result: *mut _LDOUBLE,
- _String: *mut ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _atoflt_l(
- _Result: *mut _CRT_FLOAT,
- _String: *const ::std::os::raw::c_char,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _atodbl_l(
- _Result: *mut _CRT_DOUBLE,
- _String: *mut ::std::os::raw::c_char,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _atoldbl_l(
- _Result: *mut _LDOUBLE,
- _String: *mut ::std::os::raw::c_char,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn strtof(
- _String: *const ::std::os::raw::c_char,
- _EndPtr: *mut *mut ::std::os::raw::c_char,
- ) -> f32;
-}
-extern "C" {
- pub fn _strtof_l(
- _String: *const ::std::os::raw::c_char,
- _EndPtr: *mut *mut ::std::os::raw::c_char,
- _Locale: _locale_t,
- ) -> f32;
-}
-extern "C" {
- pub fn strtod(
- _String: *const ::std::os::raw::c_char,
- _EndPtr: *mut *mut ::std::os::raw::c_char,
- ) -> f64;
-}
-extern "C" {
- pub fn _strtod_l(
- _String: *const ::std::os::raw::c_char,
- _EndPtr: *mut *mut ::std::os::raw::c_char,
- _Locale: _locale_t,
- ) -> f64;
-}
-extern "C" {
- pub fn strtold(
- _String: *const ::std::os::raw::c_char,
- _EndPtr: *mut *mut ::std::os::raw::c_char,
- ) -> f64;
-}
-extern "C" {
- pub fn _strtold_l(
- _String: *const ::std::os::raw::c_char,
- _EndPtr: *mut *mut ::std::os::raw::c_char,
- _Locale: _locale_t,
- ) -> f64;
-}
-extern "C" {
- pub fn strtol(
- _String: *const ::std::os::raw::c_char,
- _EndPtr: *mut *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_long;
-}
-extern "C" {
- pub fn _strtol_l(
- _String: *const ::std::os::raw::c_char,
- _EndPtr: *mut *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_long;
-}
-extern "C" {
- pub fn strtoll(
- _String: *const ::std::os::raw::c_char,
- _EndPtr: *mut *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn _strtoll_l(
- _String: *const ::std::os::raw::c_char,
- _EndPtr: *mut *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn strtoul(
- _String: *const ::std::os::raw::c_char,
- _EndPtr: *mut *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_ulong;
-}
-extern "C" {
- pub fn _strtoul_l(
- _String: *const ::std::os::raw::c_char,
- _EndPtr: *mut *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_ulong;
-}
-extern "C" {
- pub fn strtoull(
- _String: *const ::std::os::raw::c_char,
- _EndPtr: *mut *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_ulonglong;
-}
-extern "C" {
- pub fn _strtoull_l(
- _String: *const ::std::os::raw::c_char,
- _EndPtr: *mut *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_ulonglong;
-}
-extern "C" {
- pub fn _strtoi64(
- _String: *const ::std::os::raw::c_char,
- _EndPtr: *mut *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn _strtoi64_l(
- _String: *const ::std::os::raw::c_char,
- _EndPtr: *mut *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_longlong;
-}
-extern "C" {
- pub fn _strtoui64(
- _String: *const ::std::os::raw::c_char,
- _EndPtr: *mut *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_ulonglong;
-}
-extern "C" {
- pub fn _strtoui64_l(
- _String: *const ::std::os::raw::c_char,
- _EndPtr: *mut *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_ulonglong;
-}
-extern "C" {
- pub fn _itoa_s(
- _Value: ::std::os::raw::c_int,
- _Buffer: *mut ::std::os::raw::c_char,
- _BufferCount: usize,
- _Radix: ::std::os::raw::c_int,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _itoa(
- _Value: ::std::os::raw::c_int,
- _Buffer: *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _ltoa_s(
- _Value: ::std::os::raw::c_long,
- _Buffer: *mut ::std::os::raw::c_char,
- _BufferCount: usize,
- _Radix: ::std::os::raw::c_int,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _ltoa(
- _Value: ::std::os::raw::c_long,
- _Buffer: *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _ultoa_s(
- _Value: ::std::os::raw::c_ulong,
- _Buffer: *mut ::std::os::raw::c_char,
- _BufferCount: usize,
- _Radix: ::std::os::raw::c_int,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _ultoa(
- _Value: ::std::os::raw::c_ulong,
- _Buffer: *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _i64toa_s(
- _Value: ::std::os::raw::c_longlong,
- _Buffer: *mut ::std::os::raw::c_char,
- _BufferCount: usize,
- _Radix: ::std::os::raw::c_int,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _i64toa(
- _Value: ::std::os::raw::c_longlong,
- _Buffer: *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _ui64toa_s(
- _Value: ::std::os::raw::c_ulonglong,
- _Buffer: *mut ::std::os::raw::c_char,
- _BufferCount: usize,
- _Radix: ::std::os::raw::c_int,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _ui64toa(
- _Value: ::std::os::raw::c_ulonglong,
- _Buffer: *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _ecvt_s(
- _Buffer: *mut ::std::os::raw::c_char,
- _BufferCount: usize,
- _Value: f64,
- _DigitCount: ::std::os::raw::c_int,
- _PtDec: *mut ::std::os::raw::c_int,
- _PtSign: *mut ::std::os::raw::c_int,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _ecvt(
- _Value: f64,
- _DigitCount: ::std::os::raw::c_int,
- _PtDec: *mut ::std::os::raw::c_int,
- _PtSign: *mut ::std::os::raw::c_int,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _fcvt_s(
- _Buffer: *mut ::std::os::raw::c_char,
- _BufferCount: usize,
- _Value: f64,
- _FractionalDigitCount: ::std::os::raw::c_int,
- _PtDec: *mut ::std::os::raw::c_int,
- _PtSign: *mut ::std::os::raw::c_int,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _fcvt(
- _Value: f64,
- _FractionalDigitCount: ::std::os::raw::c_int,
- _PtDec: *mut ::std::os::raw::c_int,
- _PtSign: *mut ::std::os::raw::c_int,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _gcvt_s(
- _Buffer: *mut ::std::os::raw::c_char,
- _BufferCount: usize,
- _Value: f64,
- _DigitCount: ::std::os::raw::c_int,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _gcvt(
- _Value: f64,
- _DigitCount: ::std::os::raw::c_int,
- _Buffer: *mut ::std::os::raw::c_char,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn ___mb_cur_max_func() -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn ___mb_cur_max_l_func(_Locale: _locale_t) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn mblen(_Ch: *const ::std::os::raw::c_char, _MaxCount: usize) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _mblen_l(
- _Ch: *const ::std::os::raw::c_char,
- _MaxCount: usize,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _mbstrlen(_String: *const ::std::os::raw::c_char) -> usize;
-}
-extern "C" {
- pub fn _mbstrlen_l(_String: *const ::std::os::raw::c_char, _Locale: _locale_t) -> usize;
-}
-extern "C" {
- pub fn _mbstrnlen(_String: *const ::std::os::raw::c_char, _MaxCount: usize) -> usize;
-}
-extern "C" {
- pub fn _mbstrnlen_l(
- _String: *const ::std::os::raw::c_char,
- _MaxCount: usize,
- _Locale: _locale_t,
- ) -> usize;
-}
-extern "C" {
- pub fn mbtowc(
- _DstCh: *mut wchar_t,
- _SrcCh: *const ::std::os::raw::c_char,
- _SrcSizeInBytes: usize,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _mbtowc_l(
- _DstCh: *mut wchar_t,
- _SrcCh: *const ::std::os::raw::c_char,
- _SrcSizeInBytes: usize,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn mbstowcs_s(
- _PtNumOfCharConverted: *mut usize,
- _DstBuf: *mut wchar_t,
- _SizeInWords: usize,
- _SrcBuf: *const ::std::os::raw::c_char,
- _MaxCount: usize,
- ) -> errno_t;
-}
-extern "C" {
- pub fn mbstowcs(
- _Dest: *mut wchar_t,
- _Source: *const ::std::os::raw::c_char,
- _MaxCount: usize,
- ) -> usize;
-}
-extern "C" {
- pub fn _mbstowcs_s_l(
- _PtNumOfCharConverted: *mut usize,
- _DstBuf: *mut wchar_t,
- _SizeInWords: usize,
- _SrcBuf: *const ::std::os::raw::c_char,
- _MaxCount: usize,
- _Locale: _locale_t,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _mbstowcs_l(
- _Dest: *mut wchar_t,
- _Source: *const ::std::os::raw::c_char,
- _MaxCount: usize,
- _Locale: _locale_t,
- ) -> usize;
-}
-extern "C" {
- pub fn wctomb(_MbCh: *mut ::std::os::raw::c_char, _WCh: wchar_t) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _wctomb_l(
- _MbCh: *mut ::std::os::raw::c_char,
- _WCh: wchar_t,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn wctomb_s(
- _SizeConverted: *mut ::std::os::raw::c_int,
- _MbCh: *mut ::std::os::raw::c_char,
- _SizeInBytes: rsize_t,
- _WCh: wchar_t,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _wctomb_s_l(
- _SizeConverted: *mut ::std::os::raw::c_int,
- _MbCh: *mut ::std::os::raw::c_char,
- _SizeInBytes: usize,
- _WCh: wchar_t,
- _Locale: _locale_t,
- ) -> errno_t;
-}
-extern "C" {
- pub fn wcstombs_s(
- _PtNumOfCharConverted: *mut usize,
- _Dst: *mut ::std::os::raw::c_char,
- _DstSizeInBytes: usize,
- _Src: *const wchar_t,
- _MaxCountInBytes: usize,
- ) -> errno_t;
-}
-extern "C" {
- pub fn wcstombs(
- _Dest: *mut ::std::os::raw::c_char,
- _Source: *const wchar_t,
- _MaxCount: usize,
- ) -> usize;
-}
-extern "C" {
- pub fn _wcstombs_s_l(
- _PtNumOfCharConverted: *mut usize,
- _Dst: *mut ::std::os::raw::c_char,
- _DstSizeInBytes: usize,
- _Src: *const wchar_t,
- _MaxCountInBytes: usize,
- _Locale: _locale_t,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _wcstombs_l(
- _Dest: *mut ::std::os::raw::c_char,
- _Source: *const wchar_t,
- _MaxCount: usize,
- _Locale: _locale_t,
- ) -> usize;
-}
-extern "C" {
- pub fn _fullpath(
- _Buffer: *mut ::std::os::raw::c_char,
- _Path: *const ::std::os::raw::c_char,
- _BufferCount: usize,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _makepath_s(
- _Buffer: *mut ::std::os::raw::c_char,
- _BufferCount: usize,
- _Drive: *const ::std::os::raw::c_char,
- _Dir: *const ::std::os::raw::c_char,
- _Filename: *const ::std::os::raw::c_char,
- _Ext: *const ::std::os::raw::c_char,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _makepath(
- _Buffer: *mut ::std::os::raw::c_char,
- _Drive: *const ::std::os::raw::c_char,
- _Dir: *const ::std::os::raw::c_char,
- _Filename: *const ::std::os::raw::c_char,
- _Ext: *const ::std::os::raw::c_char,
- );
-}
-extern "C" {
- pub fn _splitpath(
- _FullPath: *const ::std::os::raw::c_char,
- _Drive: *mut ::std::os::raw::c_char,
- _Dir: *mut ::std::os::raw::c_char,
- _Filename: *mut ::std::os::raw::c_char,
- _Ext: *mut ::std::os::raw::c_char,
- );
-}
-extern "C" {
- pub fn _splitpath_s(
- _FullPath: *const ::std::os::raw::c_char,
- _Drive: *mut ::std::os::raw::c_char,
- _DriveCount: usize,
- _Dir: *mut ::std::os::raw::c_char,
- _DirCount: usize,
- _Filename: *mut ::std::os::raw::c_char,
- _FilenameCount: usize,
- _Ext: *mut ::std::os::raw::c_char,
- _ExtCount: usize,
- ) -> errno_t;
-}
-extern "C" {
- pub fn getenv_s(
- _RequiredCount: *mut usize,
- _Buffer: *mut ::std::os::raw::c_char,
- _BufferCount: rsize_t,
- _VarName: *const ::std::os::raw::c_char,
- ) -> errno_t;
-}
-extern "C" {
- pub fn __p___argc() -> *mut ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __p___argv() -> *mut *mut *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn __p___wargv() -> *mut *mut *mut wchar_t;
-}
-extern "C" {
- pub fn __p__environ() -> *mut *mut *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn __p__wenviron() -> *mut *mut *mut wchar_t;
-}
-extern "C" {
- pub fn getenv(_VarName: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _dupenv_s(
- _Buffer: *mut *mut ::std::os::raw::c_char,
- _BufferCount: *mut usize,
- _VarName: *const ::std::os::raw::c_char,
- ) -> errno_t;
-}
-extern "C" {
- pub fn system(_Command: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _putenv(_EnvString: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _putenv_s(
- _Name: *const ::std::os::raw::c_char,
- _Value: *const ::std::os::raw::c_char,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _searchenv_s(
- _Filename: *const ::std::os::raw::c_char,
- _VarName: *const ::std::os::raw::c_char,
- _Buffer: *mut ::std::os::raw::c_char,
- _BufferCount: usize,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _searchenv(
- _Filename: *const ::std::os::raw::c_char,
- _VarName: *const ::std::os::raw::c_char,
- _Buffer: *mut ::std::os::raw::c_char,
- );
-}
-extern "C" {
- pub fn _seterrormode(_Mode: ::std::os::raw::c_int);
-}
-extern "C" {
- pub fn _beep(_Frequency: ::std::os::raw::c_uint, _Duration: ::std::os::raw::c_uint);
-}
-extern "C" {
- pub fn _sleep(_Duration: ::std::os::raw::c_ulong);
-}
-extern "C" {
- pub fn ecvt(
- _Value: f64,
- _DigitCount: ::std::os::raw::c_int,
- _PtDec: *mut ::std::os::raw::c_int,
- _PtSign: *mut ::std::os::raw::c_int,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn fcvt(
- _Value: f64,
- _FractionalDigitCount: ::std::os::raw::c_int,
- _PtDec: *mut ::std::os::raw::c_int,
- _PtSign: *mut ::std::os::raw::c_int,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn gcvt(
- _Value: f64,
- _DigitCount: ::std::os::raw::c_int,
- _DstBuf: *mut ::std::os::raw::c_char,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn itoa(
- _Value: ::std::os::raw::c_int,
- _Buffer: *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn ltoa(
- _Value: ::std::os::raw::c_long,
- _Buffer: *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn swab(
- _Buf1: *mut ::std::os::raw::c_char,
- _Buf2: *mut ::std::os::raw::c_char,
- _SizeInBytes: ::std::os::raw::c_int,
- );
-}
-extern "C" {
- pub fn ultoa(
- _Value: ::std::os::raw::c_ulong,
- _Buffer: *mut ::std::os::raw::c_char,
- _Radix: ::std::os::raw::c_int,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn putenv(_EnvString: *const ::std::os::raw::c_char) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn onexit(_Func: _onexit_t) -> _onexit_t;
-}
-extern "C" {
- pub fn memchr(
- _Buf: *const ::std::os::raw::c_void,
- _Val: ::std::os::raw::c_int,
- _MaxCount: ::std::os::raw::c_ulonglong,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn memcmp(
- _Buf1: *const ::std::os::raw::c_void,
- _Buf2: *const ::std::os::raw::c_void,
- _Size: ::std::os::raw::c_ulonglong,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn memcpy(
- _Dst: *mut ::std::os::raw::c_void,
- _Src: *const ::std::os::raw::c_void,
- _Size: ::std::os::raw::c_ulonglong,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn memmove(
- _Dst: *mut ::std::os::raw::c_void,
- _Src: *const ::std::os::raw::c_void,
- _Size: ::std::os::raw::c_ulonglong,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn memset(
- _Dst: *mut ::std::os::raw::c_void,
- _Val: ::std::os::raw::c_int,
- _Size: ::std::os::raw::c_ulonglong,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn strchr(
- _Str: *const ::std::os::raw::c_char,
- _Val: ::std::os::raw::c_int,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn strrchr(
- _Str: *const ::std::os::raw::c_char,
- _Ch: ::std::os::raw::c_int,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn strstr(
- _Str: *const ::std::os::raw::c_char,
- _SubStr: *const ::std::os::raw::c_char,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn wcschr(
- _Str: *const ::std::os::raw::c_ushort,
- _Ch: ::std::os::raw::c_ushort,
- ) -> *mut ::std::os::raw::c_ushort;
-}
-extern "C" {
- pub fn wcsrchr(_Str: *const wchar_t, _Ch: wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn wcsstr(_Str: *const wchar_t, _SubStr: *const wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn _memicmp(
- _Buf1: *const ::std::os::raw::c_void,
- _Buf2: *const ::std::os::raw::c_void,
- _Size: usize,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _memicmp_l(
- _Buf1: *const ::std::os::raw::c_void,
- _Buf2: *const ::std::os::raw::c_void,
- _Size: usize,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn memccpy(
- _Dst: *mut ::std::os::raw::c_void,
- _Src: *const ::std::os::raw::c_void,
- _Val: ::std::os::raw::c_int,
- _Size: usize,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn memicmp(
- _Buf1: *const ::std::os::raw::c_void,
- _Buf2: *const ::std::os::raw::c_void,
- _Size: usize,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn wcscat_s(
- _Destination: *mut wchar_t,
- _SizeInWords: rsize_t,
- _Source: *const wchar_t,
- ) -> errno_t;
-}
-extern "C" {
- pub fn wcscpy_s(
- _Destination: *mut wchar_t,
- _SizeInWords: rsize_t,
- _Source: *const wchar_t,
- ) -> errno_t;
-}
-extern "C" {
- pub fn wcsncat_s(
- _Destination: *mut wchar_t,
- _SizeInWords: rsize_t,
- _Source: *const wchar_t,
- _MaxCount: rsize_t,
- ) -> errno_t;
-}
-extern "C" {
- pub fn wcsncpy_s(
- _Destination: *mut wchar_t,
- _SizeInWords: rsize_t,
- _Source: *const wchar_t,
- _MaxCount: rsize_t,
- ) -> errno_t;
-}
-extern "C" {
- pub fn wcstok_s(
- _String: *mut wchar_t,
- _Delimiter: *const wchar_t,
- _Context: *mut *mut wchar_t,
- ) -> *mut wchar_t;
-}
-extern "C" {
- pub fn _wcsdup(_String: *const wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn wcscat(_Destination: *mut wchar_t, _Source: *const wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn wcscmp(
- _String1: *const ::std::os::raw::c_ushort,
- _String2: *const ::std::os::raw::c_ushort,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn wcscpy(_Destination: *mut wchar_t, _Source: *const wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn wcscspn(_String: *const wchar_t, _Control: *const wchar_t) -> usize;
-}
-extern "C" {
- pub fn wcslen(_String: *const ::std::os::raw::c_ushort) -> ::std::os::raw::c_ulonglong;
-}
-extern "C" {
- pub fn wcsnlen(_Source: *const wchar_t, _MaxCount: usize) -> usize;
-}
-extern "C" {
- pub fn wcsncat(
- _Destination: *mut wchar_t,
- _Source: *const wchar_t,
- _Count: usize,
- ) -> *mut wchar_t;
-}
-extern "C" {
- pub fn wcsncmp(
- _String1: *const ::std::os::raw::c_ushort,
- _String2: *const ::std::os::raw::c_ushort,
- _MaxCount: ::std::os::raw::c_ulonglong,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn wcsncpy(
- _Destination: *mut wchar_t,
- _Source: *const wchar_t,
- _Count: usize,
- ) -> *mut wchar_t;
-}
-extern "C" {
- pub fn wcspbrk(_String: *const wchar_t, _Control: *const wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn wcsspn(_String: *const wchar_t, _Control: *const wchar_t) -> usize;
-}
-extern "C" {
- pub fn wcstok(
- _String: *mut wchar_t,
- _Delimiter: *const wchar_t,
- _Context: *mut *mut wchar_t,
- ) -> *mut wchar_t;
-}
-extern "C" {
- pub fn _wcserror(_ErrorNumber: ::std::os::raw::c_int) -> *mut wchar_t;
-}
-extern "C" {
- pub fn _wcserror_s(
- _Buffer: *mut wchar_t,
- _SizeInWords: usize,
- _ErrorNumber: ::std::os::raw::c_int,
- ) -> errno_t;
-}
-extern "C" {
- pub fn __wcserror(_String: *const wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn __wcserror_s(
- _Buffer: *mut wchar_t,
- _SizeInWords: usize,
- _ErrorMessage: *const wchar_t,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _wcsicmp(_String1: *const wchar_t, _String2: *const wchar_t) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _wcsicmp_l(
- _String1: *const wchar_t,
- _String2: *const wchar_t,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _wcsnicmp(
- _String1: *const wchar_t,
- _String2: *const wchar_t,
- _MaxCount: usize,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _wcsnicmp_l(
- _String1: *const wchar_t,
- _String2: *const wchar_t,
- _MaxCount: usize,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _wcsnset_s(
- _Destination: *mut wchar_t,
- _SizeInWords: usize,
- _Value: wchar_t,
- _MaxCount: usize,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _wcsnset(_String: *mut wchar_t, _Value: wchar_t, _MaxCount: usize) -> *mut wchar_t;
-}
-extern "C" {
- pub fn _wcsrev(_String: *mut wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn _wcsset_s(_Destination: *mut wchar_t, _SizeInWords: usize, _Value: wchar_t) -> errno_t;
-}
-extern "C" {
- pub fn _wcsset(_String: *mut wchar_t, _Value: wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn _wcslwr_s(_String: *mut wchar_t, _SizeInWords: usize) -> errno_t;
-}
-extern "C" {
- pub fn _wcslwr(_String: *mut wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn _wcslwr_s_l(_String: *mut wchar_t, _SizeInWords: usize, _Locale: _locale_t) -> errno_t;
-}
-extern "C" {
- pub fn _wcslwr_l(_String: *mut wchar_t, _Locale: _locale_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn _wcsupr_s(_String: *mut wchar_t, _Size: usize) -> errno_t;
-}
-extern "C" {
- pub fn _wcsupr(_String: *mut wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn _wcsupr_s_l(_String: *mut wchar_t, _Size: usize, _Locale: _locale_t) -> errno_t;
-}
-extern "C" {
- pub fn _wcsupr_l(_String: *mut wchar_t, _Locale: _locale_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn wcsxfrm(_Destination: *mut wchar_t, _Source: *const wchar_t, _MaxCount: usize) -> usize;
-}
-extern "C" {
- pub fn _wcsxfrm_l(
- _Destination: *mut wchar_t,
- _Source: *const wchar_t,
- _MaxCount: usize,
- _Locale: _locale_t,
- ) -> usize;
-}
-extern "C" {
- pub fn wcscoll(_String1: *const wchar_t, _String2: *const wchar_t) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _wcscoll_l(
- _String1: *const wchar_t,
- _String2: *const wchar_t,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _wcsicoll(_String1: *const wchar_t, _String2: *const wchar_t) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _wcsicoll_l(
- _String1: *const wchar_t,
- _String2: *const wchar_t,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _wcsncoll(
- _String1: *const wchar_t,
- _String2: *const wchar_t,
- _MaxCount: usize,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _wcsncoll_l(
- _String1: *const wchar_t,
- _String2: *const wchar_t,
- _MaxCount: usize,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _wcsnicoll(
- _String1: *const wchar_t,
- _String2: *const wchar_t,
- _MaxCount: usize,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _wcsnicoll_l(
- _String1: *const wchar_t,
- _String2: *const wchar_t,
- _MaxCount: usize,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn wcsdup(_String: *const wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn wcsicmp(_String1: *const wchar_t, _String2: *const wchar_t) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn wcsnicmp(
- _String1: *const wchar_t,
- _String2: *const wchar_t,
- _MaxCount: usize,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn wcsnset(_String: *mut wchar_t, _Value: wchar_t, _MaxCount: usize) -> *mut wchar_t;
-}
-extern "C" {
- pub fn wcsrev(_String: *mut wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn wcsset(_String: *mut wchar_t, _Value: wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn wcslwr(_String: *mut wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn wcsupr(_String: *mut wchar_t) -> *mut wchar_t;
-}
-extern "C" {
- pub fn wcsicoll(_String1: *const wchar_t, _String2: *const wchar_t) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn strcpy_s(
- _Destination: *mut ::std::os::raw::c_char,
- _SizeInBytes: rsize_t,
- _Source: *const ::std::os::raw::c_char,
- ) -> errno_t;
-}
-extern "C" {
- pub fn strcat_s(
- _Destination: *mut ::std::os::raw::c_char,
- _SizeInBytes: rsize_t,
- _Source: *const ::std::os::raw::c_char,
- ) -> errno_t;
-}
-extern "C" {
- pub fn strerror_s(
- _Buffer: *mut ::std::os::raw::c_char,
- _SizeInBytes: usize,
- _ErrorNumber: ::std::os::raw::c_int,
- ) -> errno_t;
-}
-extern "C" {
- pub fn strncat_s(
- _Destination: *mut ::std::os::raw::c_char,
- _SizeInBytes: rsize_t,
- _Source: *const ::std::os::raw::c_char,
- _MaxCount: rsize_t,
- ) -> errno_t;
-}
-extern "C" {
- pub fn strncpy_s(
- _Destination: *mut ::std::os::raw::c_char,
- _SizeInBytes: rsize_t,
- _Source: *const ::std::os::raw::c_char,
- _MaxCount: rsize_t,
- ) -> errno_t;
-}
-extern "C" {
- pub fn strtok_s(
- _String: *mut ::std::os::raw::c_char,
- _Delimiter: *const ::std::os::raw::c_char,
- _Context: *mut *mut ::std::os::raw::c_char,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _memccpy(
- _Dst: *mut ::std::os::raw::c_void,
- _Src: *const ::std::os::raw::c_void,
- _Val: ::std::os::raw::c_int,
- _MaxCount: usize,
- ) -> *mut ::std::os::raw::c_void;
-}
-extern "C" {
- pub fn strcat(
- _Destination: *mut ::std::os::raw::c_char,
- _Source: *const ::std::os::raw::c_char,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn strcmp(
- _Str1: *const ::std::os::raw::c_char,
- _Str2: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _strcmpi(
- _String1: *const ::std::os::raw::c_char,
- _String2: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn strcoll(
- _String1: *const ::std::os::raw::c_char,
- _String2: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _strcoll_l(
- _String1: *const ::std::os::raw::c_char,
- _String2: *const ::std::os::raw::c_char,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn strcpy(
- _Destination: *mut ::std::os::raw::c_char,
- _Source: *const ::std::os::raw::c_char,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn strcspn(
- _Str: *const ::std::os::raw::c_char,
- _Control: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_ulonglong;
-}
-extern "C" {
- pub fn _strdup(_Source: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _strerror(_ErrorMessage: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _strerror_s(
- _Buffer: *mut ::std::os::raw::c_char,
- _SizeInBytes: usize,
- _ErrorMessage: *const ::std::os::raw::c_char,
- ) -> errno_t;
-}
-extern "C" {
- pub fn strerror(_ErrorMessage: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _stricmp(
- _String1: *const ::std::os::raw::c_char,
- _String2: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _stricoll(
- _String1: *const ::std::os::raw::c_char,
- _String2: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _stricoll_l(
- _String1: *const ::std::os::raw::c_char,
- _String2: *const ::std::os::raw::c_char,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _stricmp_l(
- _String1: *const ::std::os::raw::c_char,
- _String2: *const ::std::os::raw::c_char,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn strlen(_Str: *const ::std::os::raw::c_char) -> ::std::os::raw::c_ulonglong;
-}
-extern "C" {
- pub fn _strlwr_s(_String: *mut ::std::os::raw::c_char, _Size: usize) -> errno_t;
-}
-extern "C" {
- pub fn _strlwr(_String: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _strlwr_s_l(
- _String: *mut ::std::os::raw::c_char,
- _Size: usize,
- _Locale: _locale_t,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _strlwr_l(
- _String: *mut ::std::os::raw::c_char,
- _Locale: _locale_t,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn strncat(
- _Destination: *mut ::std::os::raw::c_char,
- _Source: *const ::std::os::raw::c_char,
- _Count: ::std::os::raw::c_ulonglong,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn strncmp(
- _Str1: *const ::std::os::raw::c_char,
- _Str2: *const ::std::os::raw::c_char,
- _MaxCount: ::std::os::raw::c_ulonglong,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _strnicmp(
- _String1: *const ::std::os::raw::c_char,
- _String2: *const ::std::os::raw::c_char,
- _MaxCount: usize,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _strnicmp_l(
- _String1: *const ::std::os::raw::c_char,
- _String2: *const ::std::os::raw::c_char,
- _MaxCount: usize,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _strnicoll(
- _String1: *const ::std::os::raw::c_char,
- _String2: *const ::std::os::raw::c_char,
- _MaxCount: usize,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _strnicoll_l(
- _String1: *const ::std::os::raw::c_char,
- _String2: *const ::std::os::raw::c_char,
- _MaxCount: usize,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _strncoll(
- _String1: *const ::std::os::raw::c_char,
- _String2: *const ::std::os::raw::c_char,
- _MaxCount: usize,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn _strncoll_l(
- _String1: *const ::std::os::raw::c_char,
- _String2: *const ::std::os::raw::c_char,
- _MaxCount: usize,
- _Locale: _locale_t,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn __strncnt(_String: *const ::std::os::raw::c_char, _Count: usize) -> usize;
-}
-extern "C" {
- pub fn strncpy(
- _Destination: *mut ::std::os::raw::c_char,
- _Source: *const ::std::os::raw::c_char,
- _Count: ::std::os::raw::c_ulonglong,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn strnlen(_String: *const ::std::os::raw::c_char, _MaxCount: usize) -> usize;
-}
-extern "C" {
- pub fn _strnset_s(
- _String: *mut ::std::os::raw::c_char,
- _SizeInBytes: usize,
- _Value: ::std::os::raw::c_int,
- _MaxCount: usize,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _strnset(
- _Destination: *mut ::std::os::raw::c_char,
- _Value: ::std::os::raw::c_int,
- _Count: usize,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn strpbrk(
- _Str: *const ::std::os::raw::c_char,
- _Control: *const ::std::os::raw::c_char,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _strrev(_Str: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _strset_s(
- _Destination: *mut ::std::os::raw::c_char,
- _DestinationSize: usize,
- _Value: ::std::os::raw::c_int,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _strset(
- _Destination: *mut ::std::os::raw::c_char,
- _Value: ::std::os::raw::c_int,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn strspn(
- _Str: *const ::std::os::raw::c_char,
- _Control: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_ulonglong;
-}
-extern "C" {
- pub fn strtok(
- _String: *mut ::std::os::raw::c_char,
- _Delimiter: *const ::std::os::raw::c_char,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _strupr_s(_String: *mut ::std::os::raw::c_char, _Size: usize) -> errno_t;
-}
-extern "C" {
- pub fn _strupr(_String: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn _strupr_s_l(
- _String: *mut ::std::os::raw::c_char,
- _Size: usize,
- _Locale: _locale_t,
- ) -> errno_t;
-}
-extern "C" {
- pub fn _strupr_l(
- _String: *mut ::std::os::raw::c_char,
- _Locale: _locale_t,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn strxfrm(
- _Destination: *mut ::std::os::raw::c_char,
- _Source: *const ::std::os::raw::c_char,
- _MaxCount: ::std::os::raw::c_ulonglong,
- ) -> ::std::os::raw::c_ulonglong;
-}
-extern "C" {
- pub fn _strxfrm_l(
- _Destination: *mut ::std::os::raw::c_char,
- _Source: *const ::std::os::raw::c_char,
- _MaxCount: usize,
- _Locale: _locale_t,
- ) -> usize;
-}
-extern "C" {
- pub fn strdup(_String: *const ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn strcmpi(
- _String1: *const ::std::os::raw::c_char,
- _String2: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn stricmp(
- _String1: *const ::std::os::raw::c_char,
- _String2: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn strlwr(_String: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn strnicmp(
- _String1: *const ::std::os::raw::c_char,
- _String2: *const ::std::os::raw::c_char,
- _MaxCount: usize,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn strnset(
- _String: *mut ::std::os::raw::c_char,
- _Value: ::std::os::raw::c_int,
- _MaxCount: usize,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn strrev(_String: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn strset(
- _String: *mut ::std::os::raw::c_char,
- _Value: ::std::os::raw::c_int,
- ) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn strupr(_String: *mut ::std::os::raw::c_char) -> *mut ::std::os::raw::c_char;
-}
-pub type slist_index = ::std::os::raw::c_int;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct slist {
- pub n: slist_index,
- pub max: slist_index,
- pub sorted: ::std::os::raw::c_int,
- pub strs: *mut str,
-}
-extern "C" {
- pub fn slists_init(a: *mut slist, ...);
-}
-extern "C" {
- pub fn slists_free(a: *mut slist, ...);
-}
-extern "C" {
- pub fn slists_empty(a: *mut slist, ...);
-}
-extern "C" {
- pub fn slist_init(a: *mut slist);
-}
-extern "C" {
- pub fn slist_init_values(a: *mut slist, ...) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_init_valuesc(a: *mut slist, ...) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_free(a: *mut slist);
-}
-extern "C" {
- pub fn slist_empty(a: *mut slist);
-}
-extern "C" {
- pub fn slist_new() -> *mut slist;
-}
-extern "C" {
- pub fn slist_delete(arg1: *mut slist);
-}
-extern "C" {
- pub fn slist_deletev(v: *mut ::std::os::raw::c_void);
-}
-extern "C" {
- pub fn slist_dup(a: *mut slist) -> *mut slist;
-}
-extern "C" {
- pub fn slist_copy(to: *mut slist, from: *mut slist) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_copy_ret(
- to: *mut slist,
- from: *mut slist,
- retok: ::std::os::raw::c_int,
- reterr: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_swap(a: *mut slist, n1: slist_index, n2: slist_index);
-}
-extern "C" {
- pub fn slist_addvp(
- a: *mut slist,
- mode: ::std::os::raw::c_int,
- vp: *mut ::std::os::raw::c_void,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_addc(a: *mut slist, value: *const ::std::os::raw::c_char)
- -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_add(a: *mut slist, value: *mut str) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_addvp_ret(
- a: *mut slist,
- mode: ::std::os::raw::c_int,
- vp: *mut ::std::os::raw::c_void,
- retok: ::std::os::raw::c_int,
- reterr: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_addc_ret(
- a: *mut slist,
- value: *const ::std::os::raw::c_char,
- retok: ::std::os::raw::c_int,
- reterr: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_add_ret(
- a: *mut slist,
- value: *mut str,
- retok: ::std::os::raw::c_int,
- reterr: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_addvp_all(
- a: *mut slist,
- mode: ::std::os::raw::c_int,
- ...
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_addc_all(a: *mut slist, ...) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_add_all(a: *mut slist, ...) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_addvp_unique(
- a: *mut slist,
- mode: ::std::os::raw::c_int,
- vp: *mut ::std::os::raw::c_void,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_addc_unique(
- a: *mut slist,
- value: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_add_unique(a: *mut slist, value: *mut str) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_addvp_unique_ret(
- a: *mut slist,
- mode: ::std::os::raw::c_int,
- vp: *mut ::std::os::raw::c_void,
- retok: ::std::os::raw::c_int,
- reterr: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_addc_unique_ret(
- a: *mut slist,
- value: *const ::std::os::raw::c_char,
- retok: ::std::os::raw::c_int,
- reterr: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_add_unique_ret(
- a: *mut slist,
- value: *mut str,
- retok: ::std::os::raw::c_int,
- reterr: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_append(a: *mut slist, toadd: *mut slist) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_append_ret(
- a: *mut slist,
- toadd: *mut slist,
- retok: ::std::os::raw::c_int,
- reterr: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_append_unique(a: *mut slist, toadd: *mut slist) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_append_unique_ret(
- a: *mut slist,
- toadd: *mut slist,
- retok: ::std::os::raw::c_int,
- reterr: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_remove(a: *mut slist, n: slist_index) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_str(a: *mut slist, n: slist_index) -> *mut str;
-}
-extern "C" {
- pub fn slist_cstr(a: *mut slist, n: slist_index) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn slist_set(a: *mut slist, n: slist_index, s: *mut str) -> *mut str;
-}
-extern "C" {
- pub fn slist_setc(a: *mut slist, n: slist_index, s: *const ::std::os::raw::c_char) -> *mut str;
-}
-extern "C" {
- pub fn slist_sort(a: *mut slist);
-}
-extern "C" {
- pub fn slist_revsort(a: *mut slist);
-}
-extern "C" {
- pub fn slist_find(a: *mut slist, searchstr: *mut str) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_findc(
- a: *mut slist,
- searchstr: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_findnocase(a: *mut slist, searchstr: *mut str) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_findnocasec(
- a: *mut slist,
- searchstr: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_wasfound(a: *mut slist, n: slist_index) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_wasnotfound(a: *mut slist, n: slist_index) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_match_entry(
- a: *mut slist,
- n: slist_index,
- s: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_trimend(a: *mut slist, n: slist_index);
-}
-extern "C" {
- pub fn slist_get_maxlen(a: *mut slist) -> ::std::os::raw::c_ulong;
-}
-extern "C" {
- pub fn slist_dump(a: *mut slist, fp: *mut FILE, newline: ::std::os::raw::c_int);
-}
-extern "C" {
- pub fn slist_fill(
- a: *mut slist,
- filename: *const ::std::os::raw::c_char,
- skip_blank_lines: ::std::os::raw::c_uchar,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_fillfp(
- a: *mut slist,
- fp: *mut FILE,
- skip_blank_lines: ::std::os::raw::c_uchar,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_tokenize(
- tokens: *mut slist,
- in_: *mut str,
- delim: *const ::std::os::raw::c_char,
- merge_delim: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn slist_tokenizec(
- tokens: *mut slist,
- p: *mut ::std::os::raw::c_char,
- delim: *const ::std::os::raw::c_char,
- merge_delim: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn charset_get_xmlname(n: ::std::os::raw::c_int) -> *mut ::std::os::raw::c_char;
-}
-extern "C" {
- pub fn charset_find(name: *mut ::std::os::raw::c_char) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn charset_list_all(fp: *mut FILE);
-}
-extern "C" {
- pub fn charset_lookupchar(
- charsetin: ::std::os::raw::c_int,
- c: ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_uint;
-}
-extern "C" {
- pub fn charset_lookupuni(
- charsetout: ::std::os::raw::c_int,
- unicode: ::std::os::raw::c_uint,
- ) -> ::std::os::raw::c_uint;
-}
-extern "C" {
- pub fn str_convert(
- s: *mut str,
- charsetin: ::std::os::raw::c_int,
- latexin: ::std::os::raw::c_int,
- utf8in: ::std::os::raw::c_int,
- xmlin: ::std::os::raw::c_int,
- charsetout: ::std::os::raw::c_int,
- latexout: ::std::os::raw::c_int,
- utf8out: ::std::os::raw::c_int,
- xmlout: ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int;
-}
-pub type uchar = ::std::os::raw::c_uchar;
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct param {
- pub readformat: ::std::os::raw::c_int,
- pub writeformat: ::std::os::raw::c_int,
- pub charsetin: ::std::os::raw::c_int,
- pub charsetin_src: uchar,
- pub latexin: uchar,
- pub utf8in: uchar,
- pub xmlin: uchar,
- pub nosplittitle: uchar,
- pub charsetout: ::std::os::raw::c_int,
- pub charsetout_src: uchar,
- pub latexout: uchar,
- pub utf8out: uchar,
- pub utf8bom: uchar,
- pub xmlout: uchar,
- pub format_opts: ::std::os::raw::c_int,
- pub addcount: ::std::os::raw::c_int,
- pub output_raw: uchar,
- pub verbose: uchar,
- pub singlerefperfile: uchar,
- pub asis: slist,
- pub corps: slist,
- pub progname: *mut ::std::os::raw::c_char,
- pub readf: ::std::option::Option<
- unsafe extern "C" fn(
- arg1: *mut FILE,
- arg2: *mut ::std::os::raw::c_char,
- arg3: ::std::os::raw::c_int,
- arg4: *mut ::std::os::raw::c_int,
- arg5: *mut str,
- arg6: *mut str,
- arg7: *mut ::std::os::raw::c_int,
- ) -> ::std::os::raw::c_int,
- >,
- pub processf: ::std::option::Option<
- unsafe extern "C" fn(
- arg1: *mut fields,
- arg2: *const ::std::os::raw::c_char,
- arg3: *const ::std::os::raw::c_char,
- arg4: ::std::os::raw::c_long,
- arg5: *mut param,
- ) -> ::std::os::raw::c_int,
- >,
- pub cleanf: ::std::option::Option<
- unsafe extern "C" fn(arg1: *mut bibl, arg2: *mut param) -> ::std::os::raw::c_int,
- >,
- pub typef: ::std::option::Option<
- unsafe extern "C" fn(
- arg1: *mut fields,
- arg2: *const ::std::os::raw::c_char,
- arg3: ::std::os::raw::c_int,
- arg4: *mut param,
- ) -> ::std::os::raw::c_int,
- >,
- pub convertf: ::std::option::Option<
- unsafe extern "C" fn(
- arg1: *mut fields,
- arg2: *mut fields,
- arg3: ::std::os::raw::c_int,
- arg4: *mut param,
- ) -> ::std::os::raw::c_int,
- >,
- pub headerf: ::std::option::Option<unsafe extern "C" fn(arg1: *mut FILE, arg2: *mut param)>,
- pub footerf: ::std::option::Option<unsafe extern "C" fn(arg1: *mut FILE)>,
- pub assemblef: ::std::option::Option<
- unsafe extern "C" fn(
- arg1: *mut fields,
- arg2: *mut fields,
- arg3: *mut param,
- arg4: ::std::os::raw::c_ulong,
- ) -> ::std::os::raw::c_int,
- >,
- pub writef: ::std::option::Option<
- unsafe extern "C" fn(
- arg1: *mut fields,
- arg2: *mut FILE,
- arg3: *mut param,
- arg4: ::std::os::raw::c_ulong,
- ) -> ::std::os::raw::c_int,
- >,
- pub all: *mut variants,
- pub nall: ::std::os::raw::c_int,
-}
-extern "C" {
- pub fn bibl_initparams(
- p: *mut param,
- readmode: ::std::os::raw::c_int,
- writemode: ::std::os::raw::c_int,
- progname: *const ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn bibl_freeparams(p: *mut param);
-}
-extern "C" {
- pub fn bibl_readasis(
- p: *mut param,
- filename: *mut ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn bibl_addtoasis(
- p: *mut param,
- entry: *mut ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn bibl_readcorps(
- p: *mut param,
- filename: *mut ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn bibl_addtocorps(
- p: *mut param,
- entry: *mut ::std::os::raw::c_char,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn bibl_read(
- b: *mut bibl,
- fp: *mut FILE,
- filename: *const ::std::os::raw::c_char,
- p: *mut param,
- ) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn bibl_write(b: *mut bibl, fp: *mut FILE, p: *mut param) -> ::std::os::raw::c_int;
-}
-extern "C" {
- pub fn bibl_reporterr(err: ::std::os::raw::c_int);
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct __crt_locale_data {
- pub _address: u8,
-}
-#[repr(C)]
-#[derive(Debug, Copy, Clone)]
-pub struct __crt_multibyte_data {
- pub _address: u8,
-}
-pub type __builtin_va_list = *mut ::std::os::raw::c_char;
diff --git a/support/texlab/crates/bibutils_sys/src/marc_auth.c b/support/texlab/crates/bibutils_sys/src/marc_auth.c
deleted file mode 100644
index 4ef2899b78..0000000000
--- a/support/texlab/crates/bibutils_sys/src/marc_auth.c
+++ /dev/null
@@ -1,458 +0,0 @@
-/*
- * marc_auth.c
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include "marc_auth.h"
-#include <string.h>
-#include "msvc_fix.h"
-
-static const char *marc_genre[] = {
- "abstract or summary",
- "art original",
- "art reproduction",
- "article",
- "atlas",
- "autobiography",
- "bibliography",
- "biography",
- "book",
- "calendar",
- "catalog",
- "chart",
- "comic or graphic novel",
- "comic strip",
- "conference publication",
- "database",
- "dictionary",
- "diorama",
- "directory",
- "discography",
- "drama",
- "encyclopedia",
- "essay",
- "festschrift",
- "fiction",
- "filmography",
- "filmstrip",
- "finding aid",
- "flash card",
- "folktale",
- "font",
- "game",
- "government publication",
- "graphic",
- "globe",
- "handbook",
- "history",
- "humor, satire",
- "hymnal",
- "index",
- "instruction",
- "interview",
- "issue",
- "journal",
- "kit",
- "language instruction",
- "law report or digest",
- "legal article",
- "legal case and case notes",
- "legislation",
- "letter",
- "loose-leaf",
- "map",
- "memoir",
- "microscope slide",
- "model",
- "motion picture",
- "multivolume monograph",
- "newspaper",
- "novel",
- "numeric data",
- "offprint",
- "online system or service",
- "patent",
- "periodical",
- "picture",
- "poetry",
- "programmed text",
- "realia",
- "rehearsal",
- "remote sensing image",
- "reporting",
- "review",
- "series",
- "short story",
- "slide",
- "sound",
- "speech",
- "standard or specification",
- "statistics",
- "survey of literature",
- "technical drawing",
- "technical report",
- "thesis",
- "toy",
- "transparency",
- "treaty",
- "videorecording",
- "web site",
- "yearbook",
-};
-static const int nmarc_genre = sizeof( marc_genre ) / sizeof( const char* );
-
-static const char *marc_resource[] = {
- "cartographic",
- "kit",
- "mixed material",
- "moving image",
- "notated music",
- "software, multimedia",
- "sound recording",
- "sound recording - musical",
- "sound recording - nonmusical",
- "still image",
- "text",
- "three dimensional object"
-};
-static const int nmarc_resource = sizeof( marc_resource ) / sizeof( const char* );
-
-
-/* www.loc.gov/marc/relators/relacode.html */
-
-typedef struct marc_trans {
- char *abbreviation;
- char *internal_name;
-} marc_trans;
-
-static const marc_trans relators[] = {
- { "abr", "ABRIDGER" }, /* Abridger */
- { "acp", "ART_COPYIST" }, /* Art copyist */
- { "act", "ACTOR" }, /* Actor */
- { "adi", "ART_DIRECTOR" }, /* Art director */
- { "adp", "ADAPTER" }, /* Adapter */
- { "aft", "AUTHOR" }, /* Author of afterword, colophon, etc. */
- { "anl", "ANALYST" }, /* Analyst */
- { "anm", "ANIMATOR" }, /* Animator */
- { "ann", "ANNOTATOR" }, /* Annotator */
- { "ant", "BIBLIOGRAPHIC_ANTECENDENT" }, /* Bibliographic antecedent */
- { "ape", "APPELLEE" }, /* Appellee */
- { "apl", "APPELLANT" }, /* Appellant */
- { "app", "APPLICANT" }, /* Applicant */
- { "aqt", "AUTHOR" }, /* Author in quotations or text abstracts */
- { "arc", "ARCHITECT" }, /* Architect */
- { "ard", "ARTISTIC_DIRECTOR" }, /* Artistic director */
- { "arr", "ARRANGER" }, /* Arranger */
- { "art", "ARTIST" }, /* Artist */
- { "asg", "ASSIGNEE" }, /* Assignee */
- { "asn", "ASSOCIATED_NAME" }, /* Associated name */
- { "ato", "AUTOGRAPHER" }, /* Autographer */
- { "att", "ATTRIBUTED_NAME" }, /* Attributed name */
- { "auc", "AUCTIONEER" }, /* Auctioneer */
- { "aud", "AUTHOR" }, /* Author of dialog */
- { "aui", "AUTHOR" }, /* Author of introduction, etc. */
- { "aus", "AUTHOR" }, /* Screenwriter */
- { "aut", "AUTHOR" }, /* Author */
- { "author", "AUTHOR" },
- { "bdd", "BINDING_DESIGNER" }, /* Binding designer */
- { "bjd", "BOOKJACKET_DESIGNER" }, /* Bookjacket designer */
- { "bkd", "BOOK_DESIGNER" }, /* Book designer */
- { "bkp", "BOOK_PRODUCER" }, /* Book producer */
- { "blw", "AUTHOR" }, /* Blurb writer */
- { "bnd", "BINDER" }, /* Binder */
- { "bpd", "BOOKPLATE_DESIGNER" }, /* Bookplate designer */
- { "brd", "BROADCASTER" }, /* Broadcaster */
- { "brl", "BRAILLE_EMBOSSER" }, /* Braille embosser */
- { "bsl", "BOOKSELLER" }, /* Bookseller */
- { "cas", "CASTER" }, /* Caster */
- { "ccp", "CONCEPTOR" }, /* Conceptor */
- { "chr", "CHOREOGRAPHER" }, /* Choreographer */
- { "clb", "COLLABORATOR" }, /* Collaborator */
- { "cli", "CLIENT" }, /* Client */
- { "cll", "CALLIGRAPHER" }, /* Calligrapher */
- { "clr", "COLORIST" }, /* Colorist */
- { "clt", "COLLOTYPER" }, /* Collotyper */
- { "cmm", "COMMENTATOR" }, /* Commentator */
- { "cmp", "COMPOSER" }, /* Composer */
- { "cmt", "COMPOSITOR" }, /* Compositor */
- { "cnd", "CONDUCTOR" }, /* Conductor */
- { "cng", "CINEMATOGRAPHER" }, /* Cinematographer */
- { "cns", "CENSOR" }, /* Censor */
- { "coe", "CONTESTANT-APPELLEE" }, /* Contestant-appellee */
- { "col", "COLLECTOR" }, /* Collector */
- { "com", "COMPILER" }, /* Compiler */
- { "con", "CONSERVATOR" }, /* Conservator */
- { "cor", "COLLECTION_REGISTRAR" }, /* Collection registrar */
- { "cos", "CONTESTANT" }, /* Contestant */
- { "cot", "CONTESTANT-APPELLANT" }, /* Contestant-appellant */
- { "cou", "COURT_GOVERNED" }, /* Court governed */
- { "cov", "COVER_DESIGNER" }, /* Cover designer */
- { "cpc", "COPYRIGHT_CLAIMANT" }, /* Copyright claimant */
- { "cpe", "COMPLAINANT-APPELLEE" }, /* Complainant-appellee */
- { "cph", "COPYRIGHT_HOLDER" }, /* Copyright holder */
- { "cpl", "COMPLAINANT" }, /* Complainant */
- { "cpt", "COMPLAINANT-APPELLANT" }, /* Complainant-appellant */
- { "cre", "AUTHOR" }, /* Creator */
- { "creator", "AUTHOR" },
- { "crp", "CORRESPONDENT" }, /* Correspondent */
- { "crr", "CORRECTOR" }, /* Corrector */
- { "crt", "COURT_REPORTER" }, /* Court reporter */
- { "csl", "CONSULTANT" }, /* Consultant */
- { "csp", "CONSULTANT_TO_A_PROJECT" }, /* Consultant to a project */
- { "cst", "COSTUME_DESIGNER" }, /* Costume designer */
- { "ctb", "CONTRIBUTOR" }, /* Contributor */
- { "cte", "CONTESTEE-APPELLEE" }, /* Contestee-appellee */
- { "ctg", "CARTOGRAPHER" }, /* Cartographer */
- { "ctr", "CONTRACTOR" }, /* Contractor */
- { "cts", "CONTESTEE" }, /* Contestee */
- { "ctt", "CONTESTEE-APPELLANT" }, /* Contestee-appellant */
- { "cur", "CURATOR" }, /* Curator */
- { "cwt", "COMMENTATOR_FOR_WRITTEN_TEXT" }, /* Commentator for written text */
- { "dbp", "DISTRIBUTION_PLACE" }, /* Distribution place */
- { "degree grantor", "DEGREEGRANTOR" },
- { "dfd", "DEFENDANT" }, /* Defendant */
- { "dfe", "DEFENDANT-APPELLEE" }, /* Defendant-appellee */
- { "dft", "DEFENDANT-APPELLANT" }, /* Defendant-appellant */
- { "dgg", "DEGREEGRANTOR" }, /* Degree granting institution */
- { "dgs", "DEGREE_SUPERVISOR" }, /* Degree supervisor */
- { "dis", "DISSERTANT" }, /* Dissertant */
- { "dln", "DELINEATOR" }, /* Delineator */
- { "dnc", "DANCER" }, /* Dancer */
- { "dnr", "DONOR" }, /* Donor */
- { "dpc", "DEPICTED" }, /* Depicted */
- { "dpt", "DEPOSITOR" }, /* Depositor */
- { "drm", "DRAFTSMAN" }, /* Draftsman */
- { "drt", "DIRECTOR" }, /* Director */
- { "dsr", "DESIGNER" }, /* Designer */
- { "dst", "DISTRIBUTOR" }, /* Distributor */
- { "dtc", "DATA_CONTRIBUTOR" }, /* Data contributor */
- { "dte", "DEDICATEE" }, /* Dedicatee */
- { "dtm", "DATA_MANAGER" }, /* Data manager */
- { "dto", "DEDICATOR" }, /* Dedicator */
- { "dub", "AUTHOR" }, /* Dubious author */
- { "edc", "EDITOR" }, /* Editor of compilation */
- { "edm", "EDITOR" }, /* Editor of moving image work */
- { "edt", "EDITOR" }, /* Editor */
- { "egr", "ENGRAVER" }, /* Engraver */
- { "elg", "ELECTRICIAN" }, /* Electrician */
- { "elt", "ELECTROTYPER" }, /* Electrotyper */
- { "eng", "ENGINEER" }, /* Engineer */
- { "enj", "ENACTING_JURISICTION" }, /* Enacting jurisdiction */
- { "etr", "ETCHER" }, /* Etcher */
- { "evp", "EVENT_PLACE" }, /* Event place */
- { "exp", "EXPERT" }, /* Expert */
- { "fac", "FACSIMILIST" }, /* Facsimilist */
- { "fds", "FILM_DISTRIBUTOR" }, /* Film distributor */
- { "fld", "FIELD_DIRECTOR" }, /* Field director */
- { "flm", "FILM_EDITOR" }, /* Film editor */
- { "fmd", "FILM_DIRECTOR" }, /* Film director */
- { "fmk", "FILMMAKER" }, /* Filmmaker */
- { "fmo", "FORMER_OWNER" }, /* Former owner */
- { "fmp", "FILM_PRODUCER" }, /* Film producer */
- { "fnd", "FUNDER" }, /* Funder */
- { "fpy", "FIRST_PARTY" }, /* First party */
- { "frg", "FORGER" }, /* Forger */
- { "gis", "GEOGRAPHIC_INFORMATON_SPECIALIST" }, /* Geographic information specialist */
- { "grt", "GRAPHIC_TECHNICIAN" }, /* Graphic technician */
- { "his", "HOST_INSTITUTION" }, /* Host institution */
- { "hnr", "HONOREE" }, /* Honoree */
- { "hst", "HOST" }, /* Host */
- { "ill", "ILLUSTRATOR" }, /* Illustrator */
- { "ilu", "ILLUMINATOR" }, /* Illuminator */
- { "ins", "INSCRIBER" }, /* Inscriber */
- { "inv", "INVENTOR" }, /* Inventor */
- { "isb", "ISSUING_BODY" }, /* Issuing body */
- { "itr", "INSTRUMENTALIST" }, /* Instrumentalist */
- { "ive", "INTERVIEWEE" }, /* Interviewee */
- { "ivr", "INTERVIEWER" }, /* Interviewer */
- { "jud", "JUDGE" }, /* Judge */
- { "jug", "JURISDICTION_GOVERNED" }, /* Jurisdiction governed */
- { "lbr", "LABORATORY" }, /* Laboratory */
- { "lbt", "LIBRETTIST" }, /* Librettist */
- { "ldr", "LABORATORY_DIRECTORY" }, /* Laboratory director */
- { "led", "LEAD" }, /* Lead */
- { "lee", "LIBELEE-APPELLEE" }, /* Libelee-appellee */
- { "lel", "LIBELEE" }, /* Libelee */
- { "len", "LENDER" }, /* Lender */
- { "let", "LIBELEE-APPELLANT" }, /* Libelee-appellant */
- { "lgd", "LIGHTING_DESIGNER" }, /* Lighting designer */
- { "lie", "LIBELANT-APPELLEE" }, /* Libelant-appellee */
- { "lil", "LIBELANT" }, /* Libelant */
- { "lit", "LIBELANT-APPELLANT" }, /* Libelant-appellant */
- { "lsa", "LANDSCAPE_ARCHITECT" }, /* Landscape architect */
- { "lse", "LICENSEE" }, /* Licensee */
- { "lso", "LICENSOR" }, /* Licensor */
- { "ltg", "LITHOGRAPHER" }, /* Lithographer */
- { "lyr", "LYRICIST" }, /* Lyricist */
- { "mcp", "MUSIC_COPYIST" }, /* Music copyist */
- { "mdc", "METADATA_CONTACT" }, /* Metadata contact */
- { "med", "MEDIUM" }, /* Medium */
- { "mfp", "MANUFACTURE_PLACE" }, /* Manufacture place */
- { "mfr", "MANUFACTURER" }, /* Manufacturer */
- { "mod", "MODERATOR" }, /* Moderator */
- { "mon", "THESIS_EXAMINER" }, /* Monitor */
- { "mrb", "MARBLER" }, /* Marbler */
- { "mrk", "EDITOR" }, /* Markup editor */
- { "msd", "MUSICAL_DIRECTOR" }, /* Musical director */
- { "mte", "METAL-ENGRAVER" }, /* Metal-engraver */
- { "mtk", "MINUTE_TAKER" }, /* Minute taker */
- { "mus", "MUSICIAN" }, /* Musician */
- { "nrt", "NARRATOR" }, /* Narrator */
- { "opn", "THESIS_OPPONENT" }, /* Opponent */
- { "org", "ORIGINATOR" }, /* Originator */
- { "organizer of meeting", "ORGANIZER" },
- { "orm", "ORGANIZER" }, /* Organizer */
- { "osp", "ONSCREEN_PRESENTER" }, /* Onscreen presenter */
- { "oth", "THESIS_OTHER" }, /* Other */
- { "own", "OWNER" }, /* Owner */
- { "pan", "PANELIST" }, /* Panelist */
- { "pat", "PATRON" }, /* Patron */
- { "patent holder", "ASSIGNEE" },
- { "pbd", "PUBLISHING_DIRECTOR" }, /* Publishing director */
- { "pbl", "PUBLISHER" }, /* Publisher */
- { "pdr", "PROJECT_DIRECTOR" }, /* Project director */
- { "pfr", "PROOFREADER" }, /* Proofreader */
- { "pht", "PHOTOGRAPHER" }, /* Photographer */
- { "plt", "PLATEMAKER" }, /* Platemaker */
- { "pma", "PERMITTING_AGENCY" }, /* Permitting agency */
- { "pmn", "PRODUCTION_MANAGER" }, /* Production manager */
- { "pop", "PRINTER_OF_PLATES" }, /* Printer of plates */
- { "ppm", "PAPERMAKER" }, /* Papermaker */
- { "ppt", "PUPPETEER" }, /* Puppeteer */
- { "pra", "PRAESES" }, /* Praeses */
- { "prc", "PROCESS_CONTRACT" }, /* Process contact */
- { "prd", "PRODUCTION_PERSONNEL" }, /* Production personnel */
- { "pre", "PRESENTER" }, /* Presenter */
- { "prf", "PERFORMER" }, /* Performer */
- { "prg", "AUTHOR" }, /* Programmer */
- { "prm", "PRINTMAKER" }, /* Printmaker */
- { "prn", "PRODUCTION_COMPANY" }, /* Production company */
- { "pro", "PRODUCER" }, /* Producer */
- { "prp", "PRODUCTION_PLACE" }, /* Production place */
- { "prs", "PRODUCTION_DESIGNER" }, /* Production designer */
- { "prt", "PRINTER" }, /* Printer */
- { "prv", "PROVIDER" }, /* Provider */
- { "pta", "PATENT_APPLICANT" }, /* Patent applicant */
- { "pte", "PLAINTIFF-APPELLEE" }, /* Plaintiff-appellee */
- { "ptf", "PLAINTIFF" }, /* Plaintiff */
- { "pth", "ASSIGNEE" }, /* Patent holder */
- { "ptt", "PLAINTIFF-APPELLANT" }, /* Plaintiff-appellant */
- { "pup", "PUBLICATION_PLACE" }, /* Publication place */
- { "rbr", "RUBRICATOR" }, /* Rubricator */
- { "rcd", "RECORDIST" }, /* Recordist */
- { "rce", "RECORDING_ENGINEER" }, /* Recording engineer */
- { "rcp", "ADDRESSEE" }, /* Addressee */
- { "rdd", "RADIO_DIRECTOR" }, /* Radio director */
- { "red", "REDAKTOR" }, /* Redaktor */
- { "ren", "RENDERER" }, /* Renderer */
- { "res", "RESEARCHER" }, /* Researcher */
- { "rev", "REVIEWER" }, /* Reviewer */
- { "rpc", "RADIO_PRODUCER" }, /* Radio producer */
- { "rps", "REPOSITORY" }, /* Repository */
- { "rpt", "REPORTER" }, /* Reporter */
- { "rpy", "RESPONSIBLE_PARTY" }, /* Responsible party */
- { "rse", "RESPONDENT-APPELLEE" }, /* Respondent-appellee */
- { "rsg", "RESTAGER" }, /* Restager */
- { "rsp", "RESPONDENT" }, /* Respondent */
- { "rsr", "RESTORATIONIST" }, /* Restorationist */
- { "rst", "RESPONDENT-APPELLANT" }, /* Respondent-appellant */
- { "rth", "RESEARCH_TEAM_HEAD" }, /* Research team head */
- { "rtm", "RESEARCH_TEAM_MEMBER" }, /* Research team member */
- { "sad", "SCIENTIFIC_ADVISOR" }, /* Scientific advisor */
- { "sce", "SCENARIST" }, /* Scenarist */
- { "scl", "SCULPTOR" }, /* Sculptor */
- { "scr", "SCRIBE" }, /* Scribe */
- { "sds", "SOUND_DESIGNER" }, /* Sound designer */
- { "sec", "SECRETARY" }, /* Secretary */
- { "sgd", "STAGE_DIRECTOR" }, /* Stage director */
- { "sgn", "SIGNER" }, /* Signer */
- { "sht", "SUPPORTING_HOST" }, /* Supporting host */
- { "sll", "SELLER" }, /* Seller */
- { "sng", "SINGER" }, /* Singer */
- { "spk", "SPEAKER" }, /* Speaker */
- { "spn", "SPONSOR" }, /* Sponsor */
- { "spy", "SECOND_PARTY" }, /* Second party */
- { "srv", "SURVEYOR" }, /* Surveyor */
- { "std", "SET_DESIGNER" }, /* Set designer */
- { "stg", "SETTING" }, /* Setting */
- { "stl", "STORYTELLER" }, /* Storyteller */
- { "stm", "STAGE_MANAGER" }, /* Stage manager */
- { "stn", "STANDARDS_BODY" }, /* Standards body */
- { "str", "STEREOTYPER" }, /* Stereotyper */
- { "tcd", "TECHNICAL_DIRECTOR" }, /* Technical director */
- { "tch", "TEACHER" }, /* Teacher */
- { "ths", "THESIS_ADVISOR" }, /* Thesis advisor */
- { "tld", "TELEVISION_DIRECTOR" }, /* Television director */
- { "tlp", "TELEVISION_PRODUCER" }, /* Television producer */
- { "trc", "TRANSCRIBER" }, /* Transcriber */
- { "trl", "TRANSLATOR" }, /* Translator */
- { "tyd", "TYPE_DIRECTOR" }, /* Type designer */
- { "tyg", "TYPOGRAPHER" }, /* Typographer */
- { "uvp", "UNIVERSITY_PLACE" }, /* University place */
- { "vac", "VOICE_ACTOR" }, /* Voice actor */
- { "vdg", "VIDEOGRAPHER" }, /* Videographer */
- { "voc", "VOCALIST" }, /* Vocalist */
- { "wac", "AUTHOR" }, /* Writer of added commentary */
- { "wal", "AUTHOR" }, /* Writer of added lyrics */
- { "wam", "AUTHOR" }, /* Writer of accompanying material */
- { "wat", "AUTHOR" }, /* Writer of added text */
- { "wdc", "WOODCUTTER" }, /* Woodcutter */
- { "wde", "WOOD_ENGRAVER" }, /* Wood engraver */
- { "win", "AUTHOR" }, /* Writer of introduction */
- { "wit", "WITNESS" }, /* Witness */
- { "wpr", "AUTHOR" }, /* Writer of preface */
- { "wst", "AUTHOR" }, /* Writer of supplementary textual content */
-};
-
-static const int nrealtors = sizeof( relators ) / sizeof( relators[0] );
-
-char *
-marc_convertrole( const char *query )
-{
- int i;
-
- for ( i=0; i<nrealtors; ++i ) {
- if ( !strcasecmp( query, relators[i].abbreviation ) )
- return relators[i].internal_name;
- }
- return NULL;
-}
-
-static int
-position_in_list( const char *list[], int nlist, const char *query )
-{
- int i;
- for ( i=0; i<nlist; ++i ) {
- if ( !strcasecmp( query, list[i] ) ) return i;
- }
- return -1;
-}
-
-int
-marc_findgenre( const char *query )
-{
- return position_in_list( marc_genre, nmarc_genre, query );
-}
-
-int
-is_marc_genre( const char *query )
-{
- if ( marc_findgenre( query ) != -1 ) return 1;
- else return 0;
-}
-
-int
-marc_findresource( const char *query )
-{
- return position_in_list( marc_resource, nmarc_resource, query );
-}
-
-int
-is_marc_resource( const char *query )
-{
- if ( marc_findresource( query ) != -1 ) return 1;
- else return 0;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/marc_auth.h b/support/texlab/crates/bibutils_sys/src/marc_auth.h
deleted file mode 100644
index 3821f4651a..0000000000
--- a/support/texlab/crates/bibutils_sys/src/marc_auth.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * marc_auth.h
- *
- * Recognize the MARC authority vocabulary for genre and resource.
- *
- * Copyright (c) Chris Putnam 2008-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef MARC_AUTH_H
-#define MARC_AUTH_H
-
-int marc_findgenre( const char *query );
-int is_marc_genre( const char *query );
-int marc_findresource( const char *query );
-int is_marc_resource( const char *query );
-char *marc_convertrole( const char *query );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/medin.c b/support/texlab/crates/bibutils_sys/src/medin.c
deleted file mode 100644
index 5bc39cfc33..0000000000
--- a/support/texlab/crates/bibutils_sys/src/medin.c
+++ /dev/null
@@ -1,645 +0,0 @@
-/*
- * medin.c
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include "is_ws.h"
-#include "str.h"
-#include "str_conv.h"
-#include "fields.h"
-#include "xml.h"
-#include "xml_encoding.h"
-#include "iso639_2.h"
-#include "bibutils.h"
-#include "bibformats.h"
-
-static int medin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset );
-static int medin_processf( fields *medin, const char *data, const char *filename, long nref, param *p );
-
-
-/*****************************************************
- PUBLIC: void medin_initparams()
-*****************************************************/
-int
-medin_initparams( param *pm, const char *progname )
-{
- pm->readformat = BIBL_MEDLINEIN;
- pm->charsetin = BIBL_CHARSET_UNICODE;
- pm->charsetin_src = BIBL_SRC_DEFAULT;
- pm->latexin = 0;
- pm->xmlin = 1;
- pm->utf8in = 1;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->output_raw = BIBL_RAW_WITHMAKEREFID |
- BIBL_RAW_WITHCHARCONVERT;
-
- pm->readf = medin_readf;
- pm->processf = medin_processf;
- pm->cleanf = NULL;
- pm->typef = NULL;
- pm->convertf = NULL;
- pm->all = NULL;
- pm->nall = 0;
-
- slist_init( &(pm->asis) );
- slist_init( &(pm->corps) );
-
- if ( !progname ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int medin_readf()
-*****************************************************/
-
-/*
- * The only difference between MEDLINE and PUBMED in format is
- * that the entire library is wrapped in <MedlineCitationSet>
- * or <PubmedArticle> tags...
- */
-static char *wrapper[] = { "PubmedArticle", "MedlineCitation" };
-static int nwrapper = sizeof( wrapper ) / sizeof( wrapper[0] );
-
-static char *
-medin_findstartwrapper( char *buf, int *ntype )
-{
- char *startptr=NULL;
- int i;
- for ( i=0; i<nwrapper && startptr==NULL; ++i ) {
- startptr = xml_find_start( buf, wrapper[ i ] );
- if ( startptr && *ntype==-1 ) *ntype = i;
- }
- return startptr;
-}
-
-static char *
-medin_findendwrapper( char *buf, int ntype )
-{
- char *endptr = xml_find_end( buf, wrapper[ ntype ] );
- return endptr;
-}
-
-static int
-medin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset )
-{
- str tmp;
- char *startptr = NULL, *endptr;
- int haveref = 0, inref = 0, file_charset = CHARSET_UNKNOWN, m, type = -1;
- str_init( &tmp );
- while ( !haveref && str_fget( fp, buf, bufsize, bufpos, line ) ) {
- if ( line->data ) {
- m = xml_getencoding( line );
- if ( m!=CHARSET_UNKNOWN ) file_charset = m;
- }
- if ( line->data ) {
- startptr = medin_findstartwrapper( line->data, &type );
- }
- if ( startptr || inref ) {
- if ( inref ) str_strcat( &tmp, line );
- else {
- str_strcatc( &tmp, startptr );
- inref = 1;
- }
- endptr = medin_findendwrapper( str_cstr( &tmp ), type );
- if ( endptr ) {
- str_segcpy( reference, str_cstr( &tmp ), endptr );
- haveref = 1;
- }
- }
- }
- str_free( &tmp );
- *fcharset = file_charset;
- return haveref;
-}
-
-/*****************************************************
- PUBLIC: int medin_processf()
-*****************************************************/
-
-typedef struct xml_convert {
- char *in; /* The input tag */
- char *a, *aval; /* The attribute="attribute_value" pair, if nec. */
- char *out; /* The output tag */
- int level;
-} xml_convert;
-
-static int
-medin_doconvert( xml *node, fields *info, xml_convert *c, int nc, int *found )
-{
- int i, fstatus;
- char *d;
- *found = 0;
- if ( !xml_has_value( node ) ) return BIBL_OK;
- d = xml_value_cstr( node );
- for ( i=0; i<nc && *found==0; ++i ) {
- if ( c[i].a==NULL ) {
- if ( xml_tag_matches( node, c[i].in ) ) {
- *found = 1;
- fstatus = fields_add( info, c[i].out, d, c[i].level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- } else {
- if ( xml_tag_has_attribute( node, c[i].in, c[i].a, c[i].aval ) ) {
- *found = 1;
- fstatus = fields_add( info, c[i].out, d, c[i].level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- }
-
- }
- return BIBL_OK;
-}
-
-/* <ArticleTitle>Mechanism and.....</ArticleTitle>
- */
-static int
-medin_articletitle( xml *node, fields *info )
-{
- int fstatus, status = BIBL_OK;
- if ( xml_has_value( node ) ) {
- fstatus = fields_add( info, "TITLE", xml_value_cstr( node ), 0 );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
- }
- return status;
-}
-
-/* <MedlineDate>2003 Jan-Feb</MedlineDate> */
-static int
-medin_medlinedate( fields *info, const char *p, int level )
-{
- int fstatus;
- str tmp;
-
- str_init( &tmp );
-
- p = str_cpytodelim( &tmp, skip_ws( p ), " \t\n\r", 0 );
- if ( str_memerr( &tmp ) ) return BIBL_ERR_MEMERR;
-
- if ( str_has_value( &tmp ) ) {
- fstatus = fields_add( info, "PARTDATE:YEAR", str_cstr( &tmp ), level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
-
- p = str_cpytodelim( &tmp, skip_ws( p ), " \t\n\r", 0 );
- if ( str_memerr( &tmp ) ) return BIBL_ERR_MEMERR;
-
- if ( str_has_value( &tmp ) ) {
- str_findreplace( &tmp, "-", "/" );
- fstatus = fields_add( info, "PARTDATE:MONTH", str_cstr( &tmp ), level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
-
- (void) str_cpytodelim( &tmp, skip_ws( p ), " \t\n\r", 0 );
- if ( str_memerr( &tmp ) ) return BIBL_ERR_MEMERR;
-
- if ( str_has_value( &tmp ) ) {
- fstatus = fields_add( info, "PARTDATE:DAY", str_cstr( &tmp ), level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
-
- str_free( &tmp );
-
- return BIBL_OK;
-}
-
-/* <Langauge>eng</Language>
- */
-static int
-medin_language( xml *node, fields *info, int level )
-{
- char *code, *language;
- int fstatus;
- code = xml_value_cstr( node );
- if ( !code ) return BIBL_OK;
- language = iso639_2_from_code( code );
- if ( language )
- fstatus = fields_add( info, "LANGUAGE", language, level );
- else
- fstatus = fields_add( info, "LANGUAGE", code, level );
- if ( fstatus==FIELDS_OK ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
-}
-
-/* <Journal>
- * <ISSN>0027-8424</ISSN>
- * <JournalIssue PrintYN="Y">
- * <Volume>100</Volume>
- * <Issue>21</Issue>
- * <PubDate>
- * <Year>2003</Year>
- * <Month>Oct</Month>
- * <Day>14</Day>
- * </PubDate>
- * </Journal Issue>
- * </Journal>
- *
- * or....
- *
- * <Journal>
- * <ISSN IssnType="Print">0735-0414</ISSN>
- * <JournalIssue CitedMedium="Print">
- * <Volume>38</Volume>
- * <Issue>1</Issue>
- * <PubDate>
- * <MedlineDate>2003 Jan-Feb</MedlineDate>
- * </PubDate>
- * </JournalIssue>
- * <Title>Alcohol and alcoholism (Oxford, Oxfordshire) </Title>
- * <ISOAbbreviation>Alcohol Alcohol.</ISOAbbreviation>
- * </Journal>
- */
-static int
-medin_journal1( xml *node, fields *info )
-{
- xml_convert c[] = {
- { "Title", NULL, NULL, "TITLE", 1 },
- { "ISOAbbreviation", NULL, NULL, "SHORTTITLE", 1 },
- { "ISSN", NULL, NULL, "ISSN", 1 },
- { "Volume", NULL, NULL, "VOLUME", 1 },
- { "Issue", NULL, NULL, "ISSUE", 1 },
- { "Year", NULL, NULL, "PARTDATE:YEAR", 1 },
- { "Month", NULL, NULL, "PARTDATE:MONTH", 1 },
- { "Day", NULL, NULL, "PARTDATE:DAY", 1 },
- };
- int nc = sizeof( c ) / sizeof( c[0] ), status, found;
- if ( xml_has_value( node ) ) {
- status = medin_doconvert( node, info, c, nc, &found );
- if ( status!=BIBL_OK ) return status;
- if ( !found ) {
- if ( xml_tag_matches( node, "MedlineDate" ) ) {
- status = medin_medlinedate( info, xml_value_cstr( node ), 1 );
- if ( status!=BIBL_OK ) return status;
- }
- if ( xml_tag_matches( node, "Language" ) ) {
- status = medin_language( node, info, 1 );
- if ( status!=BIBL_OK ) return status;
- }
- }
- }
- if ( node->down ) {
- status = medin_journal1( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) {
- status = medin_journal1( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-/* <Pagination>
- * <MedlinePgn>12111-6</MedlinePgn>
- * </Pagination>
- */
-static int
-medin_pagination( xml *node, fields *info )
-{
- int i, fstatus, status;
- str sp, ep;
- const char *p, *pp;
- if ( xml_tag_matches( node, "MedlinePgn" ) && node->value.len ) {
- strs_init( &sp, &ep, NULL );
- p = str_cpytodelim( &sp, xml_value_cstr( node ), "-", 1 );
- if ( str_memerr( &sp ) ) return BIBL_ERR_MEMERR;
- if ( str_has_value( &sp ) ) {
- fstatus = fields_add( info, "PAGES:START", str_cstr( &sp ), 1 );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- (void) str_cpytodelim( &ep, p, "", 0 );
- if ( str_memerr( &ep ) ) return BIBL_ERR_MEMERR;
- if ( str_has_value( &ep ) ) {
- if ( sp.len > ep.len ) {
- for ( i=sp.len-ep.len; i<sp.len; ++i )
- sp.data[i] = ep.data[i-sp.len+ep.len];
- pp = sp.data;
- } else pp = ep.data;
- fstatus = fields_add( info, "PAGES:STOP", pp, 1 );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- strs_free( &sp, &ep, NULL );
- }
- if ( node->down ) {
- status = medin_pagination( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) {
- status = medin_pagination( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-/* <Abstract>
- * <AbstractText>ljwejrelr</AbstractText>
- * </Abstract>
- */
-static int
-medin_abstract( xml *node, fields *info )
-{
- int fstatus;
- if ( xml_tag_matches_has_value( node, "AbstractText" ) ) {
- fstatus = fields_add( info, "ABSTRACT", xml_value_cstr( node ), 0 );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- } else if ( node->next ) return medin_abstract( node->next, info );
- return BIBL_OK;
-}
-
-/* <AuthorList CompleteYN="Y">
- * <Author>
- * <LastName>Barondeau</LastName>
- * <ForeName>David P</ForeName>
- * ( or <FirstName>David P</FirstName> )
- * <Initials>DP</Initials>
- * </Author>
- * <Author>
- * <CollectiveName>Organization</CollectiveName>
- * </Author>
- * </AuthorList>
- */
-static int
-medin_author( xml *node, str *name )
-{
- char *p;
- if ( xml_tag_matches( node, "LastName" ) ) {
- if ( str_has_value( name ) ) {
- str_prepend( name, "|" );
- str_prepend( name, xml_value_cstr( node ) );
- }
- else str_strcat( name, xml_value( node ) );
- } else if ( xml_tag_matches( node, "ForeName" ) ||
- xml_tag_matches( node, "FirstName" ) ) {
- p = xml_value_cstr( node );
- while ( p && *p ) {
- if ( str_has_value( name ) ) str_addchar( name, '|' );
- while ( *p==' ' ) p++;
- while ( *p && *p!=' ' ) str_addchar( name, *p++ );
- }
- } else if ( xml_tag_matches( node, "Initials" ) && !strchr( name->data, '|' )) {
- p = xml_value_cstr( node );
- while ( p && *p ) {
- if ( str_has_value( name ) ) str_addchar( name, '|' );
- if ( !is_ws(*p) ) str_addchar( name, *p++ );
- }
- }
- if ( node->next ) medin_author( node->next, name );
- return BIBL_OK;
-}
-
-static int
-medin_corpauthor( xml *node, str *name )
-{
- if ( xml_tag_matches( node, "CollectiveName" ) ) {
- str_strcpy( name, xml_value( node ) );
- } else if ( node->next ) medin_corpauthor( node->next, name );
- return BIBL_OK;
-}
-
-static int
-medin_authorlist( xml *node, fields *info )
-{
- int fstatus, status;
- str name;
- char *tag;
- str_init( &name );
- node = node->down;
- while ( node ) {
- if ( xml_tag_matches( node, "Author" ) && node->down ) {
- status = medin_author( node->down, &name );
- tag = "AUTHOR";
- if ( str_is_empty( &name ) ) {
- status = medin_corpauthor( node->down, &name );
- tag = "AUTHOR:CORP";
- }
- if ( str_memerr( &name ) || status!=BIBL_OK ) return BIBL_ERR_MEMERR;
- if ( str_has_value( &name ) ) {
- fstatus = fields_add(info,tag,name.data,0);
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- str_empty( &name );
- }
- node = node->next;
- }
- str_free( &name );
- return BIBL_OK;
-}
-
-/* <PublicationTypeList>
- * <PublicationType>Journal Article</PublicationType>
- * </PublicationTypeList>
- */
-
-/* <MedlineJournalInfo>
- * <Country>United States</Country>
- * <MedlineTA>Proc Natl Acad Sci U S A</MedlineTA>
- * <NlmUniqueID>7507876</NlmUniqueID>
- * </MedlineJournalInfo>
- */
-
-static int
-medin_journal2( xml *node, fields *info )
-{
- int fstatus, status = BIBL_OK;
- if ( xml_tag_matches_has_value( node, "MedlineTA" ) && fields_find( info, "TITLE", LEVEL_HOST )==FIELDS_NOTFOUND ) {
- fstatus = fields_add( info, "TITLE", xml_value_cstr( node ), 1 );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- if ( node->down ) {
- status = medin_journal2( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) status = medin_journal2( node->next, info );
- return status;
-}
-
-/*
-<MeshHeadingList>
-<MeshHeading>
-<DescriptorName MajorTopicYN="N">Biophysics</DescriptorName>
-</MeshHeading>
-<MeshHeading>
-<DescriptorName MajorTopicYN="N">Crystallography, X-Ray</DescriptorName>
-</MeshHeading>
-</MeshHeadingList>
-*/
-static int
-medin_meshheading( xml *node, fields *info )
-{
- int fstatus, status = BIBL_OK;
- if ( xml_tag_matches_has_value( node, "DescriptorName" ) ) {
- fstatus = fields_add( info, "KEYWORD", xml_value_cstr( node ), 0 );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- if ( node->next ) status = medin_meshheading( node->next, info );
- return status;
-}
-
-static int
-medin_meshheadinglist( xml *node, fields *info )
-{
- int status = BIBL_OK;
- if ( xml_tag_matches( node, "MeshHeading" ) && node->down ) {
- status = medin_meshheading( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) status = medin_meshheadinglist( node->next, info );
- return status;
-}
-
-/* <PubmedData>
- * ....
- * <ArticleIdList>
- * <ArticleId IdType="pubmed">14523232</ArticleId>
- * <ArticleId IdType="doi">10.1073/pnas.2133463100</ArticleId>
- * <ArticleId IdType="pii">2133463100</ArticleId>
- * <ArticleId IdType="pmc">PMC4833866</ArticleId>
- * </ArticleIdList>
- * </PubmedData>
- *
- * I think "pii" is "Publisher Item Identifier"
- */
-static int
-medin_pubmeddata( xml *node, fields *info )
-{
- xml_convert c[] = {
- { "ArticleId", "IdType", "doi", "DOI", 0 },
- { "ArticleId", "IdType", "pubmed", "PMID", 0 },
- { "ArticleId", "IdType", "medline", "MEDLINE", 0 },
- { "ArticleId", "IdType", "pmc", "PMC", 0 },
- { "ArticleId", "IdType", "pii", "PII", 0 },
- };
- int nc = sizeof( c ) / sizeof( c[0] ), found, status;
- status = medin_doconvert( node, info, c, nc, &found );
- if ( status!=BIBL_OK ) return status;
- if ( node->next ) {
- status = medin_pubmeddata( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->down ) {
- status = medin_pubmeddata( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- return BIBL_OK;
-}
-
-static int
-medin_article( xml *node, fields *info )
-{
- int fstatus, status = BIBL_OK;
- if ( xml_tag_matches( node, "Journal" ) )
- status = medin_journal1( node, info );
- else if ( xml_tag_matches( node, "ArticleTitle" ) )
- status = medin_articletitle( node, info );
- else if ( xml_tag_matches( node, "Pagination" ) && node->down )
- status = medin_pagination( node->down, info );
- else if ( xml_tag_matches( node, "Abstract" ) && node->down )
- status = medin_abstract( node->down, info );
- else if ( xml_tag_matches( node, "AuthorList" ) )
- status = medin_authorlist( node, info );
- else if ( xml_tag_matches( node, "Language" ) )
- status = medin_language( node, info, 0 );
- else if ( xml_tag_matches( node, "Affiliation" ) ) {
- fstatus = fields_add( info, "ADDRESS", xml_value_cstr( node ), 0 );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
- }
- if ( status!=BIBL_OK ) return status;
- if ( node->next ) status = medin_article( node->next, info );
- return status;
-}
-
-static int
-medin_medlinecitation( xml *node, fields *info )
-{
- int fstatus, status = BIBL_OK;
- if ( xml_tag_matches_has_value( node, "PMID" ) ) {
- fstatus = fields_add( info, "PMID", xml_value_cstr( node ), 0 );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- if ( node->down ) {
- if ( xml_tag_matches( node, "Article" ) ) {
- status = medin_article( node->down, info );
- } else if ( xml_tag_matches( node, "MedlineJournalInfo" ) ) {
- status = medin_journal2( node->down, info );
- } else if ( xml_tag_matches( node, "MeshHeadingList" ) )
- status = medin_meshheadinglist( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) status = medin_medlinecitation( node->next, info );
- return status;
-}
-
-static int
-medin_pubmedarticle( xml *node, fields *info )
-{
- int status = BIBL_OK;
- if ( node->down ) {
- if ( xml_tag_matches( node, "MedlineCitation" ) )
- status = medin_medlinecitation( node->down, info );
- else if ( xml_tag_matches( node, "PubmedData" ) )
- status = medin_pubmeddata( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) status = medin_pubmedarticle( node->next, info );
- return status;
-}
-
-static int
-medin_assembleref( xml *node, fields *info )
-{
- int status = BIBL_OK;
- if ( node->down ) {
- if ( xml_tag_matches( node, "PubmedArticle" ) )
- status = medin_pubmedarticle( node->down, info );
- else if ( xml_tag_matches( node, "MedlineCitation" ) )
- status = medin_medlinecitation( node->down, info );
- else
- status = medin_assembleref( node->down, info );
- }
- if ( status!=BIBL_OK ) return status;
-
- if ( node->next ) {
- status = medin_assembleref( node->next, info );
- if ( status!=BIBL_OK ) return status;
- }
-
- /* assume everything is a journal article */
- if ( fields_num( info ) ) {
- status = fields_add( info, "RESOURCE", "text", 0 );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- status = fields_add( info, "ISSUANCE", "continuing", 1 );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- status = fields_add( info, "GENRE:MARC", "periodical", 1 );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- status = fields_add( info, "GENRE:BIBUTILS", "academic journal", 1 );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- status = BIBL_OK;
- }
-
- return status;
-}
-
-static int
-medin_processf( fields *medin, const char *data, const char *filename, long nref, param *p )
-{
- int status;
- xml top;
-
- xml_init( &top );
- xml_parse( data, &top );
- status = medin_assembleref( &top, medin );
- xml_free( &top );
-
- if ( status==BIBL_OK ) return 1;
- return 0;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/modsin.c b/support/texlab/crates/bibutils_sys/src/modsin.c
deleted file mode 100644
index 5280a6e2e8..0000000000
--- a/support/texlab/crates/bibutils_sys/src/modsin.c
+++ /dev/null
@@ -1,1139 +0,0 @@
-/*
- * modsin.c
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include "is_ws.h"
-#include "str.h"
-#include "str_conv.h"
-#include "xml.h"
-#include "xml_encoding.h"
-#include "fields.h"
-#include "name.h"
-#include "reftypes.h"
-#include "modstypes.h"
-#include "bu_auth.h"
-#include "marc_auth.h"
-#include "url.h"
-#include "iso639_1.h"
-#include "iso639_2.h"
-#include "iso639_3.h"
-#include "bibutils.h"
-#include "bibformats.h"
-#include "msvc_fix.h"
-
-static int modsin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset );
-static int modsin_processf( fields *medin, const char *data, const char *filename, long nref, param *p );
-
-/*****************************************************
- PUBLIC: void modsin_initparams()
-*****************************************************/
-int
-modsin_initparams( param *pm, const char *progname )
-{
-
- pm->readformat = BIBL_MODSIN;
- pm->format_opts = 0;
- pm->charsetin = BIBL_CHARSET_UNICODE;
- pm->charsetin_src = BIBL_SRC_DEFAULT;
- pm->latexin = 0;
- pm->utf8in = 1;
- pm->xmlin = 1;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->singlerefperfile = 0;
- pm->output_raw = BIBL_RAW_WITHMAKEREFID |
- BIBL_RAW_WITHCHARCONVERT;
-
- pm->readf = modsin_readf;
- pm->processf = modsin_processf;
- pm->cleanf = NULL;
- pm->typef = NULL;
- pm->convertf = NULL;
- pm->all = NULL;
- pm->nall = 0;
-
- slist_init( &(pm->asis) );
- slist_init( &(pm->corps) );
-
- if ( !progname ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int modsin_processf()
-*****************************************************/
-
-static char modsns[]="mods";
-
-static int
-modsin_detailr( xml *node, str *value )
-{
- int status = BIBL_OK;
- if ( xml_has_value( node ) ) {
- if ( value->len ) str_addchar( value, ' ' );
- str_strcat( value, xml_value( node ) );
- if ( str_memerr( value ) ) return BIBL_ERR_MEMERR;
- }
- if ( node->down ) {
- status = modsin_detailr( node->down, value );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next )
- status = modsin_detailr( node->next, value );
- return status;
-}
-
-static int
-modsin_detail( xml *node, fields *info, int level )
-{
- str type, value, *tp;
- int fstatus, status = BIBL_OK;
- if ( node->down ) {
- strs_init( &type, &value, NULL );
- tp = xml_attribute( node, "type" );
- if ( tp ) {
- str_strcpy( &type, tp );
- str_toupper( &type );
- if ( str_memerr( &type ) ) goto out;
- }
- status = modsin_detailr( node->down, &value );
- if ( status!=BIBL_OK ) goto out;
- if ( type.data && !strcasecmp( type.data, "PAGE" ) ) {
- fstatus = fields_add( info, "PAGES:START", value.data, level );
- } else {
- fstatus = fields_add( info, type.data, value.data, level );
- }
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
-out:
- strs_free( &type, &value, NULL );
- }
- return status;
-}
-
-static int
-modsin_date( xml *node, fields *info, int level, int part )
-{
- int fstatus, status = BIBL_OK;
- const char *tag, *p;
- str s;
-
- str_init( &s );
-
- p = xml_value_cstr( node );
-
- if ( p ) {
-
- p = str_cpytodelim( &s, skip_ws( p ), "-", 1 );
- if ( str_memerr( &s ) ) { status = BIBL_ERR_MEMERR; goto out; }
- if ( str_has_value( &s ) ) {
- tag = ( part ) ? "PARTDATE:YEAR" : "DATE:YEAR";
- fstatus = fields_add( info, tag, str_cstr( &s ), level );
- if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; }
- }
-
- p = str_cpytodelim( &s, skip_ws( p ), "-", 1 );
- if ( str_memerr( &s ) ) { status = BIBL_ERR_MEMERR; goto out; }
- if ( str_has_value( &s ) ) {
- tag = ( part ) ? "PARTDATE:MONTH" : "DATE:MONTH";
- fstatus = fields_add( info, tag, str_cstr( &s ), level );
- if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; }
- }
-
- (void) str_cpytodelim( &s, skip_ws( p ), "", 0 );
- if ( str_memerr( &s ) ) { status = BIBL_ERR_MEMERR; goto out; }
- if ( str_has_value( &s ) ) {
- tag = ( part ) ? "PARTDATE:DAY" : "DATE:DAY";
- fstatus = fields_add( info, tag, str_cstr( &s ), level );
- if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; }
- }
-
- }
-
-out:
- str_free( &s );
- return status;
-}
-
-static int
-modsin_pager( xml *node, str *sp, str *ep, str *tp, str *lp )
-{
- int status = BIBL_OK;
- if ( xml_tag_matches_has_value( node, "start" ) ) {
- str_strcpy( sp, xml_value( node ) );
- if ( str_memerr( sp ) ) return BIBL_ERR_MEMERR;
- } else if ( xml_tag_matches_has_value( node, "end" ) ) {
- str_strcpy( ep, xml_value( node ) );
- if ( str_memerr( ep ) ) return BIBL_ERR_MEMERR;
- } else if ( xml_tag_matches_has_value( node, "total" ) ) {
- str_strcpy( tp, xml_value( node ) );
- if ( str_memerr( tp ) ) return BIBL_ERR_MEMERR;
- } else if ( xml_tag_matches_has_value( node, "list" ) ) {
- str_strcpy( lp, xml_value( node ) );
- if ( str_memerr( lp ) ) return BIBL_ERR_MEMERR;
- }
- if ( node->down ) {
- status = modsin_pager( node->down, sp, ep, tp, lp );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next )
- status = modsin_pager( node->next, sp, ep, tp, lp );
- return status;
-}
-
-static int
-modsin_page( xml *node, fields *info, int level )
-{
- int fstatus, status = BIBL_OK;
- str sp, ep, tp, lp;
- xml *dnode = node->down;
-
- if ( !dnode ) return BIBL_OK;
-
- strs_init( &sp, &ep, &tp, &lp, NULL );
-
- status = modsin_pager( dnode, &sp, &ep, &tp, &lp );
- if ( status!=BIBL_OK ) goto out;
-
- if ( str_has_value( &sp ) || str_has_value( &ep ) ) {
- if ( str_has_value( &sp ) ) {
- fstatus = fields_add( info, "PAGES:START", str_cstr( &sp ), level );
- if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; }
- }
- if ( str_has_value( &ep ) ) {
- fstatus = fields_add( info, "PAGES:STOP", str_cstr( &ep ), level );
- if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; }
- }
- } else if ( str_has_value( &lp ) ) {
- fstatus = fields_add( info, "PAGES:START", str_cstr( &lp ), level );
- if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; }
- }
- if ( str_has_value( &tp ) ) {
- fstatus = fields_add( info, "PAGES:TOTAL", str_cstr( &tp ), level );
- if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; }
- }
-out:
- strs_free( &sp, &ep, &tp, &lp, NULL );
- return status;
-}
-
-static int
-modsin_titler( xml *node, str *title, str *subtitle )
-{
- int status = BIBL_OK;
- if ( xml_tag_matches_has_value( node, "title" ) ) {
- if ( str_has_value( title ) ) str_strcatc( title, " : " );
- str_strcat( title, xml_value( node ) );
- if ( str_memerr( title ) ) return BIBL_ERR_MEMERR;
- } else if ( xml_tag_matches_has_value( node, "subTitle" ) ) {
- str_strcat( subtitle, xml_value( node ) );
- if ( str_memerr( subtitle ) ) return BIBL_ERR_MEMERR;
- }
- if ( node->down ) {
- status = modsin_titler( node->down, title, subtitle );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next )
- status = modsin_titler( node->next, title, subtitle );
- return status;
-}
-
-static int
-modsin_title( xml *node, fields *info, int level )
-{
- char *titletag[2][2] = {
- { "TITLE", "SHORTTITLE" },
- { "SUBTITLE", "SHORTSUBTITLE" },
- };
- int fstatus, status = BIBL_OK;
- str title, subtitle;
- xml *dnode;
- int abbr;
-
- dnode = node->down;
- if ( !dnode ) return status;
-
- strs_init( &title, &subtitle, NULL );
- abbr = xml_tag_has_attribute( node, "titleInfo", "type", "abbreviated" );
-
- status = modsin_titler( dnode, &title, &subtitle );
- if ( status!=BIBL_OK ) goto out;
-
- if ( str_has_value( &title ) ) {
- fstatus = fields_add( info, titletag[0][abbr], str_cstr( &title ), level );
- if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; }
- }
-
- if ( str_has_value( &subtitle ) ) {
- fstatus = fields_add( info, titletag[1][abbr], str_cstr( &subtitle ), level );
- if ( fstatus!=FIELDS_OK ) { status = BIBL_ERR_MEMERR; goto out; }
- }
-
-out:
- strs_free( &title, &subtitle, NULL );
- return status;
-}
-
-/* modsin_marcrole_convert()
- *
- * Map MARC-authority roles for people or organizations associated
- * with a reference to internal roles.
- *
- * Take input strings with roles separated by '|' characters, e.g.
- * "author" or "author|creator" or "edt" or "editor|edt".
- */
-static int
-modsin_marcrole_convert( str *s, char *suffix, str *out )
-{
- int i, sstatus, status = BIBL_OK;
- slist tokens;
- char *p;
-
- slist_init( &tokens );
-
- /* ...default to author on an empty string */
- if ( str_is_empty( s ) ) {
- str_strcpyc( out, "AUTHOR" );
- }
-
- else {
- sstatus = slist_tokenize( &tokens, s, "|", 1 );
- if ( sstatus!=SLIST_OK ) {
- status = BIBL_ERR_MEMERR;
- goto done;
- }
- /* ...take first match */
- for ( i=0; i<tokens.n; ++i ) {
- p = marc_convertrole( slist_cstr( &tokens, i ) );
- if ( p ) {
- str_strcpyc( out, p );
- goto done;
- }
- }
- /* ...otherwise just copy input */
- str_strcpy( out, slist_str( &tokens, 0 ) );
- str_toupper( out );
- }
-
-done:
- if ( suffix ) str_strcatc( out, suffix );
- slist_free( &tokens );
- if ( str_memerr( out ) ) return BIBL_ERR_MEMERR;
- return status;
-}
-
-static int
-modsin_asis_corp_r( xml *node, str *name, str *role )
-{
- int status = BIBL_OK;
- if ( xml_tag_matches_has_value( node, "namePart" ) ) {
- str_strcpy( name, xml_value( node ) );
- if ( str_memerr( name ) ) return BIBL_ERR_MEMERR;
- } else if ( xml_tag_matches_has_value( node, "roleTerm" ) ) {
- if ( role->len ) str_addchar( role, '|' );
- str_strcat( role, xml_value( node ) );
- if ( str_memerr( role ) ) return BIBL_ERR_MEMERR;
- }
- if ( node->down ) {
- status = modsin_asis_corp_r( node->down, name, role );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next )
- status = modsin_asis_corp_r( node->next, name, role );
- return status;
-}
-
-static int
-modsin_asis_corp( xml *node, fields *info, int level, char *suffix )
-{
- int fstatus, status = BIBL_OK;
- str name, roles, role_out;
- xml *dnode = node->down;
- if ( dnode ) {
- strs_init( &name, &roles, &role_out, NULL );
- status = modsin_asis_corp_r( dnode, &name, &roles );
- if ( status!=BIBL_OK ) goto out;
- status = modsin_marcrole_convert( &roles, suffix, &role_out );
- if ( status!=BIBL_OK ) goto out;
- fstatus = fields_add( info, str_cstr( &role_out ), str_cstr( &name ), level );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
-out:
- strs_free( &name, &roles, &role_out, NULL );
- }
- return status;
-}
-
-static int
-modsin_roler( xml *node, str *roles )
-{
- if ( xml_has_value( node ) ) {
- if ( roles->len ) str_addchar( roles, '|' );
- str_strcat( roles, xml_value( node ) );
- }
- if ( str_memerr( roles ) ) return BIBL_ERR_MEMERR;
- else return BIBL_OK;
-}
-
-static int
-modsin_personr( xml *node, str *familyname, str *givenname, str *suffix )
-{
- int status = BIBL_OK;
-
- if ( !xml_has_value( node ) ) return status;
-
- if ( xml_tag_has_attribute( node, "namePart", "type", "family" ) ) {
- if ( str_has_value( familyname ) ) str_addchar( familyname, ' ' );
- str_strcat( familyname, xml_value( node ) );
- if ( str_memerr( familyname ) ) status = BIBL_ERR_MEMERR;
- }
-
- else if ( xml_tag_has_attribute( node, "namePart", "type", "suffix" ) ||
- xml_tag_has_attribute( node, "namePart", "type", "termsOfAddress" ) ) {
- if ( str_has_value( suffix ) ) str_addchar( suffix, ' ' );
- str_strcat( suffix, xml_value( node ) );
- if ( str_memerr( suffix ) ) status = BIBL_ERR_MEMERR;
- }
-
- else if ( xml_tag_has_attribute( node, "namePart", "type", "date" ) ) {
- /* no nothing */
- }
-
- else {
- if ( str_has_value( givenname ) ) str_addchar( givenname, '|' );
- str_strcat( givenname, xml_value( node ) );
- if ( str_memerr( givenname ) ) status = BIBL_ERR_MEMERR;
- }
-
- return status;
-}
-
-static int
-modsin_person( xml *node, fields *info, int level )
-{
- str familyname, givenname, name, suffix, roles, role_out;
- int fstatus, status = BIBL_OK;
- xml *dnode, *rnode;
-
- dnode = node->down;
- if ( !dnode ) return status;
-
- strs_init( &name, &familyname, &givenname, &suffix, &roles, &role_out, NULL );
-
- while ( dnode ) {
-
- if ( xml_tag_matches( dnode, "namePart" ) ) {
- status = modsin_personr( dnode, &familyname, &givenname, &suffix );
- if ( status!=BIBL_OK ) goto out;
- }
-
- else if ( xml_tag_matches( dnode, "role" ) ) {
- rnode = dnode->down;
- while ( rnode ) {
- if ( xml_tag_matches( rnode, "roleTerm" ) ) {
- status = modsin_roler( rnode, &roles );
- if ( status!=BIBL_OK ) goto out;
- }
- rnode = rnode->next;
- }
- }
-
- dnode = dnode->next;
-
- }
-
- /*
- * Handle:
- * <namePart type='given'>Noah A.</namePart>
- * <namePart type='family'>Smith</namePart>
- * without mangling the order of "Noah A."
- */
- if ( str_has_value( &familyname ) ) {
- str_strcpy( &name, &familyname );
- if ( givenname.len ) {
- str_addchar( &name, '|' );
- str_strcat( &name, &givenname );
- }
- }
-
- /*
- * Handle:
- * <namePart>Noah A. Smith</namePart>
- * with name order mangling.
- */
- else {
- if ( str_has_value( &givenname ) )
- name_parse( &name, &givenname, NULL, NULL );
- }
-
- if ( str_has_value( &suffix ) ) {
- str_strcatc( &name, "||" );
- str_strcat( &name, &suffix );
- }
-
- if ( str_memerr( &name ) ) {
- status=BIBL_ERR_MEMERR;
- goto out;
- }
-
- status = modsin_marcrole_convert( &roles, NULL, &role_out );
- if ( status!=BIBL_OK ) goto out;
-
- fstatus = fields_add_can_dup( info, str_cstr( &role_out ), str_cstr( &name ), level );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
-
-out:
- strs_free( &name, &familyname, &givenname, &suffix, &roles, &role_out, NULL );
- return status;
-}
-
-static int
-modsin_placeterm_text( xml *node, fields *info, int level, int school )
-{
- char address_tag[] = "ADDRESS";
- char school_tag[] = "SCHOOL";
- char *tag;
- int fstatus;
-
- tag = ( school ) ? school_tag : address_tag;
-
- fstatus = fields_add( info, tag, xml_value_cstr( node ), level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
-
- return BIBL_OK;
-}
-
-static int
-modsin_placeterm_code( xml *node, fields *info, int level )
-{
- int fstatus, status = BIBL_OK;
- str s, *auth;
-
- str_init( &s );
-
- auth = xml_attribute( node, "authority" );
- if ( auth && auth->len ) {
- str_strcpy( &s, auth );
- str_addchar( &s, '|' );
- }
- str_strcat( &s, xml_value( node ) );
-
- if ( str_memerr( &s ) ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
-
- fstatus = fields_add( info, "CODEDADDRESS", str_cstr( &s ), level );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
-out:
- str_free( &s );
- return status;
-}
-
-static int
-modsin_placeterm( xml *node, fields *info, int level, int school )
-{
- int status = BIBL_OK;
- str *type;
-
- type = xml_attribute( node, "type" );
- if ( str_has_value( type ) ) {
- if ( !strcmp( str_cstr( type ), "text" ) )
- status = modsin_placeterm_text( node, info, level, school );
- else if ( !strcmp( str_cstr( type ), "code" ) )
- status = modsin_placeterm_code( node, info, level );
- }
-
- return status;
-}
-
-static int
-modsin_placer( xml *node, fields *info, int level, int school )
-{
- int status = BIBL_OK;
-
- if ( xml_tag_has_attribute( node, "place", "type", "school" ) ) {
- school = 1;
- } else if ( xml_tag_matches( node, "placeTerm" ) ) {
- status = modsin_placeterm( node, info, level, school );
- }
-
- if ( node->down ) {
- status = modsin_placer( node->down, info, level, school );
- if ( status!=BIBL_OK ) return status;
- }
-
- if ( node->next ) status = modsin_placer( node->next, info, level, school );
-
- return status;
-}
-
-static int
-modsin_origininfor( xml *node, fields *info, int level, str *pub, str *add, str *addc, str *ed, str *iss )
-{
- int status = BIBL_OK;
-
- if ( xml_tag_matches( node, "dateIssued" ) ) {
- status = modsin_date( node, info, level, 0 );
- } else if ( xml_tag_matches( node, "place" ) ) {
- status = modsin_placer( node, info, level, 0 );
- } else if ( xml_tag_matches_has_value( node, "publisher" ) ) {
- str_strcat( pub, xml_value( node ) );
- if ( str_memerr( pub ) ) return BIBL_ERR_MEMERR;
- } else if ( xml_tag_matches_has_value( node, "edition" ) ) {
- str_strcat( ed, xml_value( node ) );
- if( str_memerr( ed ) ) return BIBL_ERR_MEMERR;
- } else if ( xml_tag_matches_has_value( node, "issuance" ) ) {
- str_strcat( iss, xml_value( node ) );
- if ( str_memerr( iss ) ) return BIBL_ERR_MEMERR;
- }
- if ( status!=BIBL_OK ) return status;
-
- if ( node->down ) {
- status = modsin_origininfor( node->down, info, level, pub, add, addc, ed, iss );
- if ( status!=BIBL_OK ) return status;
- }
-
- if ( node->next )
- status = modsin_origininfor( node->next, info, level, pub, add, addc, ed, iss );
-
- return status;
-}
-
-static int
-modsin_origininfo( xml *node, fields *info, int level )
-{
- str publisher, address, addcode, edition, issuance;
- int fstatus, status = BIBL_OK;
- if ( node->down ) {
- strs_init( &publisher, &address, &addcode, &edition, &issuance, NULL );
- status = modsin_origininfor( node->down, info, level, &publisher,
- &address, &addcode, &edition, &issuance );
- if ( status!=BIBL_OK ) goto out;
- if ( str_has_value( &publisher ) ) {
- fstatus = fields_add( info, "PUBLISHER", str_cstr( &publisher ), level );
- if ( fstatus!=FIELDS_OK ) { status=BIBL_ERR_MEMERR; goto out; }
- }
- if ( str_has_value( &address ) ) {
- fstatus = fields_add( info, "ADDRESS", str_cstr( &address ), level );
- if ( fstatus!=FIELDS_OK ) { status=BIBL_ERR_MEMERR; goto out; }
- }
- if ( str_has_value( &addcode ) ) {
- fstatus = fields_add( info, "CODEDADDRESS", str_cstr( &addcode ), level );
- if ( fstatus!=FIELDS_OK ) { status=BIBL_ERR_MEMERR; goto out; }
- }
- if ( str_has_value( &edition ) ) {
- fstatus = fields_add( info, "EDITION", str_cstr( &edition ), level );
- if ( fstatus!=FIELDS_OK ) { status=BIBL_ERR_MEMERR; goto out; }
- }
- if ( str_has_value( &issuance ) ) {
- fstatus = fields_add( info, "ISSUANCE", str_cstr( &issuance ), level );
- if ( fstatus!=FIELDS_OK ) { status=BIBL_ERR_MEMERR; goto out; }
- }
-out:
- strs_free( &publisher, &address, &addcode, &edition, &issuance, NULL );
- }
- return status;
-}
-
-static int
-modsin_subjectr( xml *node, fields *info, int level )
-{
- int fstatus, status = BIBL_OK;
- if ( xml_tag_has_attribute( node, "topic", "class", "primary" ) && xml_has_value( node ) ) {
- fstatus = fields_add( info, "EPRINTCLASS", xml_value_cstr( node ), level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- else if ( xml_tag_matches_has_value( node, "topic" ) ) {
- fstatus = fields_add( info, "KEYWORD", xml_value_cstr( node ), level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- else if ( xml_tag_matches_has_value( node, "geographic" ) ) {
- fstatus = fields_add( info, "KEYWORD", xml_value_cstr( node ), level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- if ( node->down ) {
- status = modsin_subjectr( node->down, info, level );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) status = modsin_subjectr( node->next, info, level );
- return status;
-}
-
-static int
-modsin_subject( xml *node, fields *info, int level )
-{
- int status = BIBL_OK;
- if ( node->down ) status = modsin_subjectr( node->down, info, level );
- return status;
-}
-
-static int
-modsin_id1( xml *node, fields *info, int level )
-{
- int fstatus;
- str *ns;
- ns = xml_attribute( node, "ID" );
- if ( str_has_value( ns ) ) {
- fstatus = fields_add( info, "REFNUM", str_cstr( ns ), level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- return BIBL_OK;
-}
-
-/* modsin_genre()
- *
- * MARC authority terms tagged with "GENRE:MARC"
- * bibutils authority terms tagged with "GENRE:BIBUTILS"
- * unknown terms tagged with "GENRE:UNKNOWN"
- */
-static int
-modsin_genre( xml *node, fields *info, int level )
-{
- int fstatus;
- char *d;
-
- if ( !xml_has_value( node ) ) return BIBL_OK;
-
- d = xml_value_cstr( node );
-
- /* ...handle special genres in KTH DivA */
- if ( !strcmp( d, "conferenceProceedings" ) || !strcmp( d, "conferencePaper" ) )
- d = "conference publication";
- else if ( !strcmp( d, "artisticOutput" ) || !strcmp( d, "other" ) )
- d = "miscellaneous";
- else if ( !strcmp( d, "studentThesis" ) )
- d = "thesis";
- else if ( !strcmp( d, "monographDoctoralThesis" ) )
- d = "Ph.D. thesis";
- else if ( !strcmp( d, "comprehensiveDoctoralThesis" ) )
- d = "Ph.D. thesis";
- else if ( !strcmp( d, "monographLicentiateThesis" ) )
- d = "Licentiate thesis";
- else if ( !strcmp( d, "comprehensiveLicentiateThesis" ) )
- d = "Licentiate thesis";
-
- if ( is_marc_genre( d ) )
- fstatus = fields_add( info, "GENRE:MARC", d, level );
- else if ( is_bu_genre( d ) )
- fstatus = fields_add( info, "GENRE:BIBUTILS", d, level );
- else
- fstatus = fields_add( info, "GENRE:UNKNOWN", d, level );
-
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- else return BIBL_OK;
-}
-
-/* in MODS version 3.5
- * <languageTerm type="text">....</languageTerm>
- * <languageTerm type="code" authority="xxx">...</languageTerm>
- * xxx = rfc3066
- * xxx = iso639-2b
- * xxx = iso639-3
- * xxx = rfc4646
- * xxx = rfc5646
- */
-static int
-modsin_languager( xml *node, fields *info, int level )
-{
- int fstatus, status = BIBL_OK;
- char *d = NULL;
- if ( xml_tag_matches( node, "languageTerm" ) ) {
- if ( xml_has_value( node ) ) {
- if ( xml_has_attribute( node, "type", "code" ) ) {
- if ( xml_has_attribute( node, "authority", "iso639-1" ) )
- d = iso639_1_from_code( xml_value_cstr( node ) );
- else if ( xml_has_attribute( node, "authority", "iso639-2b" ) )
- d = iso639_2_from_code( xml_value_cstr( node ) );
- else if ( xml_has_attribute( node, "authority", "iso639-3" ))
- d = iso639_3_from_code( xml_value_cstr( node ) );
- }
- if ( !d ) d = xml_value_cstr( node );
- fstatus = fields_add( info, "LANGUAGE", d, level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- }
- if ( node->next ) status = modsin_languager( node->next, info, level );
- return status;
-}
-
-static int
-modsin_language( xml *node, fields *info, int level )
-{
- int fstatus, status = BIBL_OK;
- /* Old versions of MODS had <language>English</language> */
- if ( xml_has_value( node ) ) {
- fstatus = fields_add( info, "LANGUAGE", xml_value_cstr( node ), level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
-
- /* New versions of MODS have <language><languageTerm>English</languageTerm></language> */
- if ( node->down ) status = modsin_languager( node->down, info, level );
- return status;
-}
-
-static int
-modsin_simple( xml *node, fields *info, char *tag, int level )
-{
- int fstatus;
- if ( xml_has_value( node ) ) {
- fstatus = fields_add( info, tag, xml_value_cstr( node ), level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- return BIBL_OK;
-}
-
-static int
-modsin_locationr( xml *node, fields *info, int level )
-{
- int fstatus, status = BIBL_OK;
- char *url = "URL";
- char *fileattach = "FILEATTACH";
- char *tag=NULL;
-
- if ( xml_tag_matches( node, "url" ) ) {
- if ( xml_has_attribute( node, "access", "raw object" ) )
- tag = fileattach;
- else
- tag = url;
- }
- else if ( xml_tag_matches( node, "physicalLocation" ) ) {
- if ( xml_has_attribute( node, "type", "school" ) )
- tag = "SCHOOL";
- else
- tag = "LOCATION";
- }
-
- if ( tag == url ) {
- status = urls_split_and_add( xml_value_cstr( node ), info, level );
- if ( status!=BIBL_OK ) return status;
- }
- else if ( tag ) {
- fstatus = fields_add( info, tag, xml_value_cstr( node ), level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
-
- if ( node->down ) {
- status = modsin_locationr( node->down, info, level );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) status = modsin_locationr( node->next, info, level );
- return status;
-}
-
-static int
-modsin_location( xml *node, fields *info, int level )
-{
- int status = BIBL_OK;
- if ( node->down ) status = modsin_locationr( node->down, info, level );
- return status;
-}
-
-static int
-modsin_descriptionr( xml *node, str *s )
-{
- int status = BIBL_OK;
- if ( xml_tag_matches( node, "extent" ) ||
- xml_tag_matches( node, "note" ) ) {
- str_strcpy( s, &(node->value) );
- if ( str_memerr( s ) ) return BIBL_ERR_MEMERR;
- }
- if ( node->down ) {
- status = modsin_descriptionr( node->down, s );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) status = modsin_descriptionr( node->next, s );
- return status;
-}
-
-static int
-modsin_description( xml *node, fields *info, int level )
-{
- int fstatus, status = BIBL_OK;
- str s;
- str_init( &s );
- if ( node->down ) {
- status = modsin_descriptionr( node->down, &s );
- if ( status!=BIBL_OK ) goto out;
- } else {
- if ( node->value.len > 0 )
- str_strcpy( &s, &(node->value) );
- if ( str_memerr( &s ) ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- }
- if ( str_has_value( &s ) ) {
- fstatus = fields_add( info, "DESCRIPTION", str_cstr( &s ), level );
- if ( fstatus!=FIELDS_OK ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- }
-out:
- str_free( &s );
- return status;
-}
-
-static int
-modsin_partr( xml *node, fields *info, int level )
-{
- int status = BIBL_OK;
- if ( xml_tag_matches( node, "detail" ) )
- status = modsin_detail( node, info, level );
- else if ( xml_tag_has_attribute( node, "extent", "unit", "page" ) )
- status = modsin_page( node, info, level );
- else if ( xml_tag_has_attribute( node, "extent", "unit", "pages" ) )
- status = modsin_page( node, info, level );
- else if ( xml_tag_matches( node, "date" ) )
- status = modsin_date( node, info, level, 1 );
- if ( status!=BIBL_OK ) return status;
- if ( node->next ) status = modsin_partr( node->next, info, level );
- return status;
-}
-
-static int
-modsin_part( xml *node, fields *info, int level )
-{
- if ( node->down ) return modsin_partr( node->down, info, level );
- return BIBL_OK;
-}
-
-/* <classification authority="lcc">Q3 .A65</classification> */
-static int
-modsin_classification( xml *node, fields *info, int level )
-{
- int fstatus, status = BIBL_OK;
- char *tag;
- if ( xml_has_value( node ) ) {
- if ( xml_tag_has_attribute( node, "classification", "authority", "lcc" ) )
- tag = "LCC";
- else
- tag = "CLASSIFICATION";
- fstatus = fields_add( info, tag, xml_value_cstr( node ), level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- if ( node->down ) status = modsin_classification( node->down, info, level );
- return status;
-}
-
-static int
-modsin_recordinfo( xml *node, fields *info, int level )
-{
- int fstatus;
- xml *curr;
-
- /* extract recordIdentifier */
- curr = node;
- while ( curr ) {
- if ( xml_tag_matches_has_value( curr, "recordIdentifier" ) ) {
- fstatus = fields_add( info, "REFNUM", xml_value_cstr( curr ), level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- curr = curr->next;
- }
- return BIBL_OK;
-}
-
-static int
-modsin_identifier( xml *node, fields *info, int level )
-{
- convert ids[] = {
- { "citekey", "REFNUM", 0, 0 },
- { "issn", "ISSN", 0, 0 },
- { "coden", "CODEN", 0, 0 },
- { "isbn", "ISBN", 0, 0 },
- { "doi", "DOI", 0, 0 },
- { "url", "URL", 0, 0 },
- { "uri", "URL", 0, 0 },
- { "pmid", "PMID", 0, 0 },
- { "pubmed", "PMID", 0, 0 },
- { "medline", "MEDLINE", 0, 0 },
- { "pmc", "PMC", 0, 0 },
- { "arXiv", "ARXIV", 0, 0 },
- { "MRnumber", "MRNUMBER", 0, 0 },
- { "pii", "PII", 0, 0 },
- { "isi", "ISIREFNUM", 0, 0 },
- { "serial number", "SERIALNUMBER",0, 0 },
- { "accessnum", "ACCESSNUM", 0, 0 },
- { "jstor", "JSTOR", 0, 0 },
- };
- int i, fstatus, n = sizeof( ids ) / sizeof( ids[0] );
- if ( node->value.len==0 ) return BIBL_OK;
- for ( i=0; i<n; ++i ) {
- if ( xml_tag_has_attribute( node, "identifier", "type", ids[i].mods ) ) {
- fstatus = fields_add( info, ids[i].internal, xml_value_cstr( node ), level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- }
- return BIBL_OK;
-}
-
-static int
-modsin_mods( xml *node, fields *info, int level )
-{
- convert simple[] = {
- { "note", "NOTES", 0, 0 },
- { "abstract", "ABSTRACT", 0, 0 },
- { "bibtex-annote", "ANNOTE", 0, 0 },
- { "typeOfResource", "RESOURCE", 0, 0 },
- { "tableOfContents", "CONTENTS", 0, 0 },
- };
- int nsimple = sizeof( simple ) / sizeof( simple[0] );
- int i, found = 0, status = BIBL_OK;
-
- for ( i=0; i<nsimple && found==0; i++ ) {
- if ( xml_tag_matches( node, simple[i].mods ) ) {
- status = modsin_simple( node, info, simple[i].internal, level );
- if ( status!=BIBL_OK ) return status;
- found = 1;
- }
- }
-
- if ( !found ) {
- if ( xml_tag_matches( node, "titleInfo" ) )
- modsin_title( node, info, level );
- else if ( xml_tag_has_attribute( node, "name", "type", "personal" ) )
- status = modsin_person( node, info, level );
- else if ( xml_tag_has_attribute( node, "name", "type", "corporate" ) )
- status = modsin_asis_corp( node, info, level, ":CORP" );
- else if ( xml_tag_matches( node, "name" ) )
- status = modsin_asis_corp( node, info, level, ":ASIS" );
- else if ( xml_tag_matches( node, "recordInfo" ) && node->down )
- status = modsin_recordinfo( node->down, info, level );
- else if ( xml_tag_matches( node, "part" ) )
- modsin_part( node, info, level );
- else if ( xml_tag_matches( node, "identifier" ) )
- status = modsin_identifier( node, info, level );
- else if ( xml_tag_matches( node, "originInfo" ) )
- status = modsin_origininfo( node, info, level );
- else if ( xml_tag_matches( node, "language" ) )
- status = modsin_language( node, info, level );
- else if ( xml_tag_matches( node, "genre" ) )
- status = modsin_genre( node, info, level );
- else if ( xml_tag_matches( node, "date" ) )
- status = modsin_date( node, info, level, 0 );
- else if ( xml_tag_matches( node, "subject" ) )
- status = modsin_subject( node, info, level );
- else if ( xml_tag_matches( node, "classification" ) )
- status = modsin_classification( node, info, level );
- else if ( xml_tag_matches( node, "location" ) )
- status = modsin_location( node, info, level );
- else if ( xml_tag_matches( node, "physicalDescription" ) )
- status = modsin_description( node, info, level );
- else if ( xml_tag_has_attribute( node, "relatedItem", "type", "host" ) ||
- xml_tag_has_attribute( node, "relatedItem", "type", "series" ) ) {
- if ( node->down ) status = modsin_mods( node->down, info, level+1 );
- }
- else if ( xml_tag_has_attribute( node, "relatedItem", "type", "original" ) ) {
- if ( node->down ) status = modsin_mods( node->down, info, LEVEL_ORIG );
- }
-
- if ( status!=BIBL_OK ) return status;
- }
-
- if ( node->next ) status = modsin_mods( node->next, info, level );
-
- return status;
-}
-
-static int
-modsin_assembleref( xml *node, fields *info )
-{
- int status = BIBL_OK;
- if ( xml_tag_matches( node, "mods" ) ) {
- status = modsin_id1( node, info, 0 );
- if ( status!=BIBL_OK ) return status;
- if ( node->down ) {
- status = modsin_mods( node->down, info, 0 );
- if ( status!=BIBL_OK ) return status;
- }
- } else if ( node->down ) {
- status = modsin_assembleref( node->down, info );
- if ( status!=BIBL_OK ) return status;
- }
- if ( node->next ) status = modsin_assembleref( node->next, info );
- return status;
-}
-
-static int
-modsin_processf( fields *modsin, const char *data, const char *filename, long nref, param *p )
-{
- int status;
- xml top;
-
- xml_init( &top );
- xml_parse( data, &top );
- status = modsin_assembleref( &top, modsin );
- xml_free( &top );
-
- if ( status==BIBL_OK ) return 1;
- else return 0;
-}
-
-/*****************************************************
- PUBLIC: int modsin_readf()
-*****************************************************/
-
-static char *
-modsin_startptr( char *p )
-{
- char *startptr;
- startptr = xml_find_start( p, "mods:mods" );
- if ( startptr ) {
- /* set namespace if found */
- xml_pns = modsns;
- } else {
- startptr = xml_find_start( p, "mods" );
- if ( startptr ) xml_pns = NULL;
- }
- return startptr;
-}
-
-static char *
-modsin_endptr( char *p )
-{
- return xml_find_end( p, "mods" );
-}
-
-static int
-modsin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset )
-{
- str tmp;
- int m, file_charset = CHARSET_UNKNOWN;
- char *startptr = NULL, *endptr = NULL;
-
- str_init( &tmp );
-
- do {
- if ( line->data ) str_strcat( &tmp, line );
- if ( str_has_value( &tmp ) ) {
- m = xml_getencoding( &tmp );
- if ( m!=CHARSET_UNKNOWN ) file_charset = m;
- startptr = modsin_startptr( tmp.data );
- endptr = modsin_endptr( tmp.data );
- } else startptr = endptr = NULL;
- str_empty( line );
- if ( startptr && endptr ) {
- str_segcpy( reference, startptr, endptr );
- str_strcpyc( line, endptr );
- }
- } while ( !endptr && str_fget( fp, buf, bufsize, bufpos, line ) );
-
- str_free( &tmp );
- *fcharset = file_charset;
- return ( reference->len > 0 );
-}
-
diff --git a/support/texlab/crates/bibutils_sys/src/modsout.c b/support/texlab/crates/bibutils_sys/src/modsout.c
deleted file mode 100644
index 7187308c7f..0000000000
--- a/support/texlab/crates/bibutils_sys/src/modsout.c
+++ /dev/null
@@ -1,1177 +0,0 @@
-/*
- * modsout.c
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include "is_ws.h"
-#include "str.h"
-#include "charsets.h"
-#include "str_conv.h"
-#include "fields.h"
-#include "iso639_2.h"
-#include "utf8.h"
-#include "modstypes.h"
-#include "bu_auth.h"
-#include "marc_auth.h"
-#include "bibformats.h"
-#include "msvc_fix.h"
-
-/*****************************************************
- PUBLIC: int modsout_initparams()
-*****************************************************/
-
-static void modsout_writeheader( FILE *outptr, param *p );
-static void modsout_writefooter( FILE *outptr );
-static int modsout_write( fields *info, FILE *outptr, param *p, unsigned long numrefs );
-
-int
-modsout_initparams( param *pm, const char *progname )
-{
- pm->writeformat = BIBL_MODSOUT;
- pm->format_opts = 0;
- pm->charsetout = BIBL_CHARSET_UNICODE;
- pm->charsetout_src = BIBL_SRC_DEFAULT;
- pm->latexout = 0;
- pm->utf8out = 1;
- pm->utf8bom = 1;
- pm->xmlout = BIBL_XMLOUT_TRUE;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->singlerefperfile = 0;
-
- pm->headerf = modsout_writeheader;
- pm->footerf = modsout_writefooter;
- pm->assemblef = NULL;
- pm->writef = modsout_write;
-
- if ( !pm->progname ) {
- if ( !progname ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int modsout_write()
-*****************************************************/
-
-/* output_tag()
- *
- * mode = TAG_OPEN, "<tag>"
- * mode = TAG_CLOSE, "</tag>"
- * mode = TAG_OPENCLOSE, "<tag>data</tag>"
- * mode = TAG_SELFCLOSE, "<tag/>"
- *
- * newline = TAG_NONEWLINE, "<tag>"
- * newline = TAG_NEWLINE, "<tag>\n"
- *
- */
-#define TAG_OPEN (0)
-#define TAG_CLOSE (1)
-#define TAG_OPENCLOSE (2)
-#define TAG_SELFCLOSE (3)
-
-#define TAG_NONEWLINE (0)
-#define TAG_NEWLINE (1)
-
-static void
-output_tag_core( FILE *outptr, int nindents, char *tag, char *data, unsigned char mode, unsigned char newline, va_list *attrs )
-{
- char *attr, *val;
- int i;
-
- for ( i=0; i<nindents; ++i ) fprintf( outptr, " " );
-
- if ( mode!=TAG_CLOSE )
- fprintf( outptr, "<" );
- else
- fprintf( outptr, "</" );
-
- fprintf( outptr, "%s", tag );
-
- do {
- attr = va_arg( *attrs, char * );
- if ( attr ) val = va_arg( *attrs, char * );
- if ( attr && val )
- fprintf( outptr, " %s=\"%s\"", attr, val );
- } while ( attr && val );
-
- if ( mode!=TAG_SELFCLOSE )
- fprintf( outptr, ">" );
- else
- fprintf( outptr, "/>" );
-
- if ( mode==TAG_OPENCLOSE ) {
- fprintf( outptr, "%s</%s>", data, tag );
- }
-
- if ( newline==TAG_NEWLINE )
- fprintf( outptr, "\n" );
-}
-
-/* output_tag()
- *
- * output XML tag
- *
- * mode = [ TAG_OPEN | TAG_CLOSE | TAG_OPENCLOSE | TAG_SELFCLOSE ]
- * newline = [ TAG_NEWLINE | TAG_NONEWLINE ]
- *
- * for mode TAG_OPENCLOSE, ensure that value is non-NULL, as string pointed to by value
- * will be output in the tag
- */
-static void
-output_tag( FILE *outptr, int nindents, char *tag, char *value, unsigned char mode, unsigned char newline, ... )
-{
- va_list attrs;
-
- va_start( attrs, newline );
- output_tag_core( outptr, nindents, tag, value, mode, newline, &attrs );
- va_end( attrs );
-}
-
-/* output_fil()
- *
- * output XML tag, but lookup data in fields struct
- *
- * mode = [ TAG_OPEN | TAG_CLOSE | TAG_OPENCLOSE | TAG_SELFCLOSE ]
- * newline = [ TAG_NEWLINE | TAG_NONEWLINE ]
- *
- * value looked up in fields will only be used in mode TAG_OPENCLOSE
- */
-static void
-output_fil( FILE *outptr, int nindents, char *tag, fields *f, int n, unsigned char mode, unsigned char newline, ... )
-{
- va_list attrs;
- char *value;
-
- if ( n!=-1 ) {
- value = (char *) fields_value( f, n, FIELDS_CHRP );
- va_start( attrs, newline );
- output_tag_core( outptr, nindents, tag, value, mode, newline, &attrs );
- va_end( attrs );
- }
-}
-
-static inline int
-lvl2indent( int level )
-{
- if ( level < -1 ) return -level + 1;
- else return level + 1;
-}
-
-static inline int
-incr_level( int level, int amt )
-{
- if ( level > -1 ) return level+amt;
- else return level-amt;
-}
-
-/* convert_findallfields()
- *
- * Find the positions of all convert.internal tags in the fields
- * structure and store the locations in convert.pos element.
- *
- * Return number of the tags found.
- */
-static int
-convert_findallfields( fields *f, convert *parts, int nparts, int level )
-{
- int i, n = 0;
-
- for ( i=0; i<nparts; ++i ) {
- parts[i].pos = fields_find( f, parts[i].internal, level );
- n += ( parts[i].pos!=FIELDS_NOTFOUND );
- }
-
- return n;
-}
-
-static void
-output_title( fields *f, FILE *outptr, int level )
-{
- int ttl = fields_find( f, "TITLE", level );
- int subttl = fields_find( f, "SUBTITLE", level );
- int shrttl = fields_find( f, "SHORTTITLE", level );
- int parttl = fields_find( f, "PARTTITLE", level );
- char *val;
-
- output_tag( outptr, lvl2indent(level), "titleInfo", NULL, TAG_OPEN, TAG_NEWLINE, NULL );
- output_fil( outptr, lvl2indent(incr_level(level,1)), "title", f, ttl, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- output_fil( outptr, lvl2indent(incr_level(level,1)), "subTitle", f, subttl, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- output_fil( outptr, lvl2indent(incr_level(level,1)), "partName", f, parttl, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- /* MODS output doesn't verify if we don't at least have a <title/> element */
- if ( ttl==-1 && subttl==-1 )
- output_tag( outptr, lvl2indent(incr_level(level,1)), "title", NULL, TAG_SELFCLOSE, TAG_NEWLINE, NULL );
- output_tag( outptr, lvl2indent(level), "titleInfo", NULL, TAG_CLOSE, TAG_NEWLINE, NULL );
-
- /* output shorttitle if it's different from normal title */
- if ( shrttl!=FIELDS_NOTFOUND ) {
- val = (char *) fields_value( f, shrttl, FIELDS_CHRP );
- if ( ttl==FIELDS_NOTFOUND || subttl!=FIELDS_NOTFOUND || strcmp(f->data[ttl].data,val) ) {
- output_tag( outptr, lvl2indent(level), "titleInfo", NULL, TAG_OPEN, TAG_NEWLINE, "type", "abbreviated", NULL );
- output_tag( outptr, lvl2indent(incr_level(level,1)), "title", val, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- output_tag( outptr, lvl2indent(level), "titleInfo", NULL, TAG_CLOSE, TAG_NEWLINE, NULL );
- }
- }
-}
-
-static void
-output_name( FILE *outptr, char *p, int level )
-{
- str family, part, suffix;
- int n=0;
-
- strs_init( &family, &part, &suffix, NULL );
-
- while ( *p && *p!='|' ) str_addchar( &family, *p++ );
- if ( *p=='|' ) p++;
-
- while ( *p ) {
- while ( *p && *p!='|' ) str_addchar( &part, *p++ );
- /* truncate periods from "A. B. Jones" names */
- if ( part.len ) {
- if ( part.len==2 && part.data[1]=='.' ) {
- part.len=1;
- part.data[1]='\0';
- }
- if ( n==0 )
- output_tag( outptr, lvl2indent(level), "name", NULL, TAG_OPEN, TAG_NEWLINE, "type", "personal", NULL );
- output_tag( outptr, lvl2indent(incr_level(level,1)), "namePart", part.data, TAG_OPENCLOSE, TAG_NEWLINE, "type", "given", NULL );
- n++;
- }
- if ( *p=='|' ) {
- p++;
- if ( *p=='|' ) {
- p++;
- while ( *p && *p!='|' ) str_addchar( &suffix, *p++ );
- }
- str_empty( &part );
- }
- }
-
- if ( family.len ) {
- if ( n==0 )
- output_tag( outptr, lvl2indent(level), "name", NULL, TAG_OPEN, TAG_NEWLINE, "type", "personal", NULL );
- output_tag( outptr, lvl2indent(incr_level(level,1)), "namePart", family.data, TAG_OPENCLOSE, TAG_NEWLINE, "type", "family", NULL );
- n++;
- }
-
- if ( suffix.len ) {
- if ( n==0 )
- output_tag( outptr, lvl2indent(level), "name", NULL, TAG_OPEN, TAG_NEWLINE, "type", "personal", NULL );
- output_tag( outptr, lvl2indent(incr_level(level,1)), "namePart", suffix.data, TAG_OPENCLOSE, TAG_NEWLINE, "type", "suffix", NULL );
- }
-
- strs_free( &part, &family, &suffix, NULL );
-}
-
-
-/* MODS v 3.4
- *
- * <name [type="corporation"/type="conference"]>
- * <namePart></namePart>
- * <displayForm></displayForm>
- * <affiliation></affiliation>
- * <role>
- * <roleTerm [authority="marcrealtor"] type="text"></roleTerm>
- * </role>
- * <description></description>
- * </name>
- */
-
-#define NO_AUTHORITY (0)
-#define MARC_AUTHORITY (1)
-
-static void
-output_names( fields *f, FILE *outptr, int level )
-{
- convert names[] = {
- { "author", "AUTHOR", 0, MARC_AUTHORITY },
- { "editor", "EDITOR", 0, MARC_AUTHORITY },
- { "annotator", "ANNOTATOR", 0, MARC_AUTHORITY },
- { "artist", "ARTIST", 0, MARC_AUTHORITY },
- { "author", "2ND_AUTHOR", 0, MARC_AUTHORITY },
- { "author", "3RD_AUTHOR", 0, MARC_AUTHORITY },
- { "author", "SUB_AUTHOR", 0, MARC_AUTHORITY },
- { "author", "COMMITTEE", 0, MARC_AUTHORITY },
- { "author", "COURT", 0, MARC_AUTHORITY },
- { "author", "LEGISLATIVEBODY", 0, MARC_AUTHORITY },
- { "author of afterword, colophon, etc.", "AFTERAUTHOR", 0, MARC_AUTHORITY },
- { "author of introduction, etc.", "INTROAUTHOR", 0, MARC_AUTHORITY },
- { "cartographer", "CARTOGRAPHER", 0, MARC_AUTHORITY },
- { "collaborator", "COLLABORATOR", 0, MARC_AUTHORITY },
- { "commentator", "COMMENTATOR", 0, MARC_AUTHORITY },
- { "compiler", "COMPILER", 0, MARC_AUTHORITY },
- { "degree grantor", "DEGREEGRANTOR", 0, MARC_AUTHORITY },
- { "director", "DIRECTOR", 0, MARC_AUTHORITY },
- { "event", "EVENT", 0, NO_AUTHORITY },
- { "inventor", "INVENTOR", 0, MARC_AUTHORITY },
- { "organizer of meeting", "ORGANIZER", 0, MARC_AUTHORITY },
- { "patent holder", "ASSIGNEE", 0, MARC_AUTHORITY },
- { "performer", "PERFORMER", 0, MARC_AUTHORITY },
- { "producer", "PRODUCER", 0, MARC_AUTHORITY },
- { "addressee", "ADDRESSEE", 0, MARC_AUTHORITY },
- { "redactor", "REDACTOR", 0, MARC_AUTHORITY },
- { "reporter", "REPORTER", 0, MARC_AUTHORITY },
- { "sponsor", "SPONSOR", 0, MARC_AUTHORITY },
- { "translator", "TRANSLATOR", 0, MARC_AUTHORITY },
- { "writer", "WRITER", 0, MARC_AUTHORITY },
- };
- int i, n, nfields, ntypes = sizeof( names ) / sizeof( convert );
- int f_asis, f_corp, f_conf;
- str role;
-
- str_init( &role );
- nfields = fields_num( f );
- for ( n=0; n<ntypes; ++n ) {
- for ( i=0; i<nfields; ++i ) {
- if ( fields_level( f, i )!=level ) continue;
- if ( f->data[i].len==0 ) continue;
- f_asis = f_corp = f_conf = 0;
- str_strcpyc( &role, f->tag[i].data );
- if ( str_findreplace( &role, ":ASIS", "" )) f_asis=1;
- if ( str_findreplace( &role, ":CORP", "" )) f_corp=1;
- if ( str_findreplace( &role, ":CONF", "" )) f_conf=1;
- if ( strcasecmp( role.data, names[n].internal ) )
- continue;
- if ( f_asis ) {
- output_tag( outptr, lvl2indent(level), "name", NULL, TAG_OPEN, TAG_NEWLINE, NULL );
- output_fil( outptr, lvl2indent(incr_level(level,1)), "namePart", f, i, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- } else if ( f_corp ) {
- output_tag( outptr, lvl2indent(level), "name", NULL, TAG_OPEN, TAG_NEWLINE, "type", "corporate", NULL );
- output_fil( outptr, lvl2indent(incr_level(level,1)), "namePart", f, i, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- } else if ( f_conf ) {
- output_tag( outptr, lvl2indent(level), "name", NULL, TAG_OPEN, TAG_NEWLINE, "type", "conference", NULL );
- output_fil( outptr, lvl2indent(incr_level(level,1)), "namePart", f, i, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- } else {
- output_name(outptr, f->data[i].data, level);
- }
- output_tag( outptr, lvl2indent(incr_level(level,1)), "role", NULL, TAG_OPEN, TAG_NEWLINE, NULL );
- if ( names[n].code & MARC_AUTHORITY )
- output_tag( outptr, lvl2indent(incr_level(level,2)), "roleTerm", names[n].mods, TAG_OPENCLOSE, TAG_NEWLINE, "authority", "marcrelator", "type", "text", NULL );
- else
- output_tag( outptr, lvl2indent(incr_level(level,2)), "roleTerm", names[n].mods, TAG_OPENCLOSE, TAG_NEWLINE, "type", "text", NULL );
- output_tag( outptr, lvl2indent(incr_level(level,1)), "role", NULL, TAG_CLOSE, TAG_NEWLINE, NULL );
- output_tag( outptr, lvl2indent(level), "name", NULL, TAG_CLOSE, TAG_NEWLINE, NULL );
- fields_setused( f, i );
- }
- }
- str_free( &role );
-}
-
-/* datepos[ NUM_DATE_TYPES ]
- * use define to ensure that the array and loops don't get out of sync
- * datepos[0] -> DATE:YEAR/PARTDATE:YEAR
- * datepos[1] -> DATE:MONTH/PARTDATE:MONTH
- * datepos[2] -> DATE:DAY/PARTDATE:DAY
- * datepos[3] -> DATE/PARTDATE
- */
-#define DATE_YEAR (0)
-#define DATE_MONTH (1)
-#define DATE_DAY (2)
-#define DATE_ALL (3)
-#define NUM_DATE_TYPES (4)
-
-static int
-find_datepos( fields *f, int level, unsigned char use_altnames, int datepos[NUM_DATE_TYPES] )
-{
- char *src_names[] = { "DATE:YEAR", "DATE:MONTH", "DATE:DAY", "DATE" };
- char *alt_names[] = { "PARTDATE:YEAR", "PARTDATE:MONTH", "PARTDATE:DAY", "PARTDATE" };
- int found = 0;
- int i;
-
- for ( i=0; i<NUM_DATE_TYPES; ++i ) {
- if ( !use_altnames )
- datepos[i] = fields_find( f, src_names[i], level );
- else
- datepos[i] = fields_find( f, alt_names[i], level );
- if ( datepos[i]!=FIELDS_NOTFOUND ) found = 1;
- }
-
- return found;
-}
-
-/* find_dateinfo()
- *
- * fill datepos[] array with position indexes to date information in fields *f
- *
- * when generating dates for LEVEL_MAIN, first look at level=LEVEL_MAIN, but if that
- * fails, use LEVEL_ANY (-1)
- *
- * returns 1 if date information found, 0 otherwise
- */
-static int
-find_dateinfo( fields *f, int level, int datepos[ NUM_DATE_TYPES ] )
-{
- int found;
-
- /* default to finding date information for the current level */
- found = find_datepos( f, level, 0, datepos );
-
- /* for LEVEL_MAIN, do whatever it takes to find a date */
- if ( !found && level == LEVEL_MAIN ) {
- found = find_datepos( f, -1, 0, datepos );
- }
- if ( !found && level == LEVEL_MAIN ) {
- found = find_datepos( f, -1, 1, datepos );
- }
-
- return found;
-}
-
-static void
-output_datepieces( fields *f, FILE *outptr, int pos[ NUM_DATE_TYPES ] )
-{
- str *s;
- int i;
-
- for ( i=0; i<3 && pos[i]!=-1; ++i ) {
- if ( i>0 ) fprintf( outptr, "-" );
- /* zero pad month or days written as "1", "2", "3" ... */
- if ( i==DATE_MONTH || i==DATE_DAY ) {
- s = fields_value( f, pos[i], FIELDS_STRP_NOUSE );
- if ( s->len==1 ) {
- fprintf( outptr, "0" );
- }
- }
- fprintf( outptr, "%s", (char *) fields_value( f, pos[i], FIELDS_CHRP ) );
- }
-}
-
-static void
-output_dateissued( fields *f, FILE *outptr, int level, int pos[ NUM_DATE_TYPES ] )
-{
- output_tag( outptr, lvl2indent(incr_level(level,1)), "dateIssued", NULL, TAG_OPEN, TAG_NONEWLINE, NULL );
- if ( pos[ DATE_YEAR ]!=-1 || pos[ DATE_MONTH ]!=-1 || pos[ DATE_DAY ]!=-1 ) {
- output_datepieces( f, outptr, pos );
- } else {
- fprintf( outptr, "%s", (char *) fields_value( f, pos[ DATE_ALL ], FIELDS_CHRP ) );
- }
- fprintf( outptr, "</dateIssued>\n" );
-}
-
-static void
-output_origin( fields *f, FILE *outptr, int level )
-{
- convert parts[] = {
- { "issuance", "ISSUANCE", 0, 0 },
- { "publisher", "PUBLISHER", 0, 0 },
- { "place", "ADDRESS", 0, 1 },
- { "place", "ADDRESS:PUBLISHER", 0, 0 },
- { "place", "ADDRESS:AUTHOR", 0, 0 },
- { "edition", "EDITION", 0, 0 },
- { "dateCaptured", "URLDATE", 0, 0 }
- };
- int nparts = sizeof( parts ) / sizeof( parts[0] );
- int i, found, datefound, datepos[ NUM_DATE_TYPES ];
-
- found = convert_findallfields( f, parts, nparts, level );
- datefound = find_dateinfo( f, level, datepos );
- if ( !found && !datefound ) return;
-
-
- output_tag( outptr, lvl2indent(level), "originInfo", NULL, TAG_OPEN, TAG_NEWLINE, NULL );
-
- /* issuance must precede date */
- if ( parts[0].pos!=-1 )
- output_fil( outptr, lvl2indent(incr_level(level,1)), "issuance", f, parts[0].pos, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
-
- /* date */
- if ( datefound )
- output_dateissued( f, outptr, level, datepos );
-
- /* rest of the originInfo elements */
- for ( i=1; i<nparts; i++ ) {
-
- /* skip missing originInfo elements */
- if ( parts[i].pos==-1 ) continue;
-
- /* normal originInfo element */
- if ( parts[i].code==0 ) {
- output_fil( outptr, lvl2indent(incr_level(level,1)), parts[i].mods, f, parts[i].pos, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- }
-
- /* originInfo with placeTerm info */
- else {
- output_tag( outptr, lvl2indent(incr_level(level,1)), parts[i].mods, NULL, TAG_OPEN, TAG_NEWLINE, NULL );
- output_fil( outptr, lvl2indent(incr_level(level,2)), "placeTerm", f, parts[i].pos, TAG_OPENCLOSE, TAG_NEWLINE, "type", "text", NULL );
- output_tag( outptr, lvl2indent(incr_level(level,1)), parts[i].mods, NULL, TAG_CLOSE, TAG_NEWLINE, NULL );
- }
- }
-
- output_tag( outptr, lvl2indent(level), "originInfo", NULL, TAG_CLOSE, TAG_NEWLINE, NULL );
-}
-
-/* output_language_core()
- *
- * generates language output for tag="langauge" or tag="languageOfCataloging"
- * if possible, outputs iso639-2b code for the language
- *
- * <language>
- * <languageTerm type="text">xxx</languageTerm>
- * </language>
- *
- * <language>
- * <languageTerm type="text">xxx</languageTerm>
- * <languageTerm type="code" authority="iso639-2b">xxx</languageTerm>
- * </language>
- *
- */
-static void
-output_language_core( fields *f, int n, FILE *outptr, char *tag, int level )
-{
- char *lang, *code;
-
- lang = (char *) fields_value( f, n, FIELDS_CHRP );
- code = iso639_2_from_language( lang );
-
- output_tag( outptr, lvl2indent(level), tag, NULL, TAG_OPEN, TAG_NEWLINE, NULL );
- output_tag( outptr, lvl2indent(incr_level(level,1)), "languageTerm", lang, TAG_OPENCLOSE, TAG_NEWLINE, "type", "text", NULL );
- if ( code ) {
- output_tag( outptr, lvl2indent(incr_level(level,1)), "languageTerm", code, TAG_OPENCLOSE, TAG_NEWLINE, "type", "code", "authority", "iso639-2b", NULL );
- }
- output_tag( outptr, lvl2indent(level), tag, NULL, TAG_CLOSE, TAG_NEWLINE, NULL );
-}
-
-static void
-output_language( fields *f, FILE *outptr, int level )
-{
- int n;
- n = fields_find( f, "LANGUAGE", level );
- if ( n!=FIELDS_NOTFOUND )
- output_language_core( f, n, outptr, "language", level );
-}
-
-static void
-output_description( fields *f, FILE *outptr, int level )
-{
- char *val;
- int n;
-
- n = fields_find( f, "DESCRIPTION", level );
- if ( n!=FIELDS_NOTFOUND ) {
- val = ( char * ) fields_value( f, n, FIELDS_CHRP );
- output_tag( outptr, lvl2indent(level), "physicalDescription", NULL, TAG_OPEN, TAG_NEWLINE, NULL );
- output_tag( outptr, lvl2indent(incr_level(level,1)), "note", val, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- output_tag( outptr, lvl2indent(level), "physicalDescription", NULL, TAG_CLOSE, TAG_NEWLINE, NULL );
- }
-}
-
-static void
-output_toc( fields *f, FILE *outptr, int level )
-{
- char *val;
- int n;
-
- n = fields_find( f, "CONTENTS", level );
- if ( n!=FIELDS_NOTFOUND ) {
- val = (char *) fields_value( f, n, FIELDS_CHRP );
- output_tag( outptr, lvl2indent(level), "tableOfContents", val, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- }
-}
-
-/* detail output
- *
- * for example:
- *
- * <detail type="volume"><number>xxx</number></detail
- */
-static void
-mods_output_detail( fields *f, FILE *outptr, int n, char *item_name, int level )
-{
- if ( n!=-1 ) {
- output_tag( outptr, lvl2indent(incr_level(level,1)), "detail", NULL, TAG_OPEN, TAG_NONEWLINE, "type", item_name, NULL );
- output_fil( outptr, 0, "number", f, n, TAG_OPENCLOSE, TAG_NONEWLINE, NULL );
- output_tag( outptr, 0, "detail", NULL, TAG_CLOSE, TAG_NEWLINE, NULL );
- }
-}
-
-
-/* extents output
- *
- * <extent unit="page">
- * <start>xxx</start>
- * <end>xxx</end>
- * </extent>
- */
-static void
-mods_output_extents( fields *f, FILE *outptr, int start, int end, int total, char *extype, int level )
-{
- char *val;
-
- output_tag( outptr, lvl2indent(incr_level(level,1)), "extent", NULL, TAG_OPEN, TAG_NEWLINE, "unit", extype, NULL );
- if ( start!=-1 ) {
- val = (char *) fields_value( f, start, FIELDS_CHRP );
- output_tag( outptr, lvl2indent(incr_level(level,2)), "start", val, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- }
- if ( end!=-1 ) {
- val = (char *) fields_value( f, end, FIELDS_CHRP );
- output_tag( outptr, lvl2indent(incr_level(level,2)), "end", val, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- }
- if ( total!=-1 ) {
- val = (char *) fields_value( f, total, FIELDS_CHRP );
- output_tag( outptr, lvl2indent(incr_level(level,2)), "total", val, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- }
- output_tag( outptr, lvl2indent(incr_level(level,1)), "extent", NULL, TAG_CLOSE, TAG_NEWLINE, NULL );
-}
-
-static void
-try_output_partheader( FILE *outptr, int wrote_header, int level )
-{
- if ( !wrote_header )
- output_tag( outptr, lvl2indent(level), "part", NULL, TAG_OPEN, TAG_NEWLINE, NULL );
-}
-
-static void
-try_output_partfooter( FILE *outptr, int wrote_header, int level )
-{
- if ( wrote_header )
- output_tag( outptr, lvl2indent(level), "part", NULL, TAG_CLOSE, TAG_NEWLINE, NULL );
-}
-
-/* part date output
- *
- * <date>xxxx-xx-xx</date>
- *
- */
-static int
-output_partdate( fields *f, FILE *outptr, int level, int wrote_header )
-{
- convert parts[] = {
- { "", "PARTDATE:YEAR", 0, 0 },
- { "", "PARTDATE:MONTH", 0, 0 },
- { "", "PARTDATE:DAY", 0, 0 },
- };
- int nparts = sizeof(parts)/sizeof(parts[0]);
-
- if ( !convert_findallfields( f, parts, nparts, level ) ) return 0;
-
- try_output_partheader( outptr, wrote_header, level );
-
- output_tag( outptr, lvl2indent(incr_level(level,1)), "date", NULL, TAG_OPEN, TAG_NONEWLINE, NULL );
-
- if ( parts[0].pos!=-1 ) {
- fprintf( outptr, "%s", (char *) fields_value( f, parts[0].pos, FIELDS_CHRP ) );
- } else fprintf( outptr, "XXXX" );
-
- if ( parts[1].pos!=-1 ) {
- fprintf( outptr, "-%s", (char *) fields_value( f, parts[1].pos, FIELDS_CHRP ) );
- }
-
- if ( parts[2].pos!=-1 ) {
- if ( parts[1].pos==-1 )
- fprintf( outptr, "-XX" );
- fprintf( outptr, "-%s", (char *) fields_value( f, parts[2].pos, FIELDS_CHRP ) );
- }
-
- fprintf( outptr,"</date>\n");
-
- return 1;
-}
-
-static int
-output_partpages( fields *f, FILE *outptr, int level, int wrote_header )
-{
- convert parts[] = {
- { "", "PAGES:START", 0, 0 },
- { "", "PAGES:STOP", 0, 0 },
- { "", "PAGES", 0, 0 },
- { "", "PAGES:TOTAL", 0, 0 }
- };
- int nparts = sizeof(parts)/sizeof(parts[0]);
-
- if ( !convert_findallfields( f, parts, nparts, level ) ) return 0;
-
- try_output_partheader( outptr, wrote_header, level );
-
- /* If PAGES:START or PAGES:STOP are undefined */
- if ( parts[0].pos==-1 || parts[1].pos==-1 ) {
- if ( parts[0].pos!=-1 )
- mods_output_detail( f, outptr, parts[0].pos, "page", level );
- if ( parts[1].pos!=-1 )
- mods_output_detail( f, outptr, parts[1].pos, "page", level );
- if ( parts[2].pos!=-1 )
- mods_output_detail( f, outptr, parts[2].pos, "page", level );
- if ( parts[3].pos!=-1 )
- mods_output_extents( f, outptr, -1, -1, parts[3].pos, "page", level );
- }
- /* If both PAGES:START and PAGES:STOP are defined */
- else {
- mods_output_extents( f, outptr, parts[0].pos, parts[1].pos, parts[3].pos, "page", level );
- }
-
- return 1;
-}
-
-static int
-output_partelement( fields *f, FILE *outptr, int level, int wrote_header )
-{
- convert parts[] = {
- { "", "NUMVOLUMES", 0, 0 },
- { "volume", "VOLUME", 0, 0 },
- { "section", "SECTION", 0, 0 },
- { "issue", "ISSUE", 0, 0 },
- { "number", "NUMBER", 0, 0 },
- { "publiclawnumber", "PUBLICLAWNUMBER", 0, 0 },
- { "session", "SESSION", 0, 0 },
- { "articlenumber", "ARTICLENUMBER", 0, 0 },
- { "part", "PART", 0, 0 },
- { "chapter", "CHAPTER", 0, 0 },
- { "report number", "REPORTNUMBER", 0, 0 },
- };
- int i, nparts = sizeof( parts ) / sizeof( convert );
-
- if ( !convert_findallfields( f, parts, nparts, level ) ) return 0;
-
- try_output_partheader( outptr, wrote_header, level );
-
- /* start loop at 1 to skip NUMVOLUMES */
- for ( i=1; i<nparts; ++i ) {
- if ( parts[i].pos==-1 ) continue;
- mods_output_detail( f, outptr, parts[i].pos, parts[i].mods, level );
- }
-
- if ( parts[0].pos!=-1 )
- mods_output_extents( f, outptr, -1, -1, parts[0].pos, "volumes", level );
-
- return 1;
-}
-
-static void
-output_part( fields *f, FILE *outptr, int level )
-{
- int wrote_hdr;
- wrote_hdr = output_partdate( f, outptr, level, 0 );
- wrote_hdr += output_partelement( f, outptr, level, wrote_hdr );
- wrote_hdr += output_partpages( f, outptr, level, wrote_hdr );
- try_output_partfooter( outptr, wrote_hdr, level );
-}
-
-static void
-output_recordInfo( fields *f, FILE *outptr, int level )
-{
- int n;
- n = fields_find( f, "LANGCATALOG", level );
- if ( n!=FIELDS_NOTFOUND ) {
- output_tag( outptr, lvl2indent(level), "recordInfo", NULL, TAG_OPEN, TAG_NEWLINE, NULL );
- output_language_core( f, n, outptr, "languageOfCataloging", incr_level(level,1) );
- output_tag( outptr, lvl2indent(level), "recordInfo", NULL, TAG_CLOSE, TAG_NEWLINE, NULL );
- }
-}
-
-/* output_genre()
- *
- * <genre authority="marcgt">thesis</genre>
- * <genre authority="bibutilsgt">Diploma thesis</genre>
- */
-static void
-output_genre( fields *f, FILE *outptr, int level )
-{
- char *value, *attr = NULL, *attrvalue = NULL;
- int i, n;
-
- n = fields_num( f );
- for ( i=0; i<n; ++i ) {
- if ( fields_level( f, i ) != level ) continue;
- if ( !fields_match_tag( f, i, "GENRE:MARC" ) && !fields_match_tag( f, i, "GENRE:BIBUTILS" ) && !fields_match_tag( f, i, "GENRE:UNKNOWN" ) ) continue;
- value = fields_value( f, i, FIELDS_CHRP );
- if ( is_marc_genre( value ) ) {
- attr = "authority";
- attrvalue = "marcgt";
- }
- else if ( is_bu_genre( value ) ) {
- attr = "authority";
- attrvalue = "bibutilsgt";
- }
- output_tag( outptr, lvl2indent(level), "genre", value, TAG_OPENCLOSE, TAG_NEWLINE, attr, attrvalue, NULL );
- }
-}
-
-/* output_resource()
- *
- * <typeOfResource>text</typeOfResource>
- */
-static void
-output_resource( fields *f, FILE *outptr, int level )
-{
- char *value;
- int n;
-
- n = fields_find( f, "RESOURCE", level );
- if ( n!=FIELDS_NOTFOUND ) {
- value = fields_value( f, n, FIELDS_CHRP );
- if ( is_marc_resource( value ) ) {
- output_fil( outptr, lvl2indent(level), "typeOfResource", f, n, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- } else {
- fprintf( stderr, "Illegal typeofResource = '%s'\n", value );
- }
- }
-}
-
-static void
-output_type( fields *f, FILE *outptr, int level )
-{
- int n;
-
- /* silence warnings about INTERNAL_TYPE being unused */
- n = fields_find( f, "INTERNAL_TYPE", LEVEL_MAIN );
- if ( n!=FIELDS_NOTFOUND ) fields_setused( f, n );
-
- output_resource( f, outptr, level );
- output_genre( f, outptr, level );
-}
-
-/* output_abs()
- *
- * <abstract>xxxx</abstract>
- */
-static void
-output_abs( fields *f, FILE *outptr, int level )
-{
- int n;
-
- n = fields_find( f, "ABSTRACT", level );
- output_fil( outptr, lvl2indent(level), "abstract", f, n, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
-}
-
-static void
-output_notes( fields *f, FILE *outptr, int level )
-{
- int i, n;
- char *t;
-
- n = fields_num( f );
- for ( i=0; i<n; ++i ) {
- if ( fields_level( f, i ) != level ) continue;
- t = fields_tag( f, i, FIELDS_CHRP_NOUSE );
- if ( !strcasecmp( t, "NOTES" ) )
- output_fil( outptr, lvl2indent(level), "note", f, i, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- else if ( !strcasecmp( t, "PUBSTATE" ) )
- output_fil( outptr, lvl2indent(level), "note", f, i, TAG_OPENCLOSE, TAG_NEWLINE, "type", "publication status", NULL );
- else if ( !strcasecmp( t, "ANNOTE" ) )
- output_fil( outptr, lvl2indent(level), "bibtex-annote", f, i, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- else if ( !strcasecmp( t, "TIMESCITED" ) )
- output_fil( outptr, lvl2indent(level), "note", f, i, TAG_OPENCLOSE, TAG_NEWLINE, "type", "times cited", NULL );
- else if ( !strcasecmp( t, "ANNOTATION" ) )
- output_fil( outptr, lvl2indent(level), "note", f, i, TAG_OPENCLOSE, TAG_NEWLINE, "type", "annotation", NULL );
- else if ( !strcasecmp( t, "ADDENDUM" ) )
- output_fil( outptr, lvl2indent(level), "note", f, i, TAG_OPENCLOSE, TAG_NEWLINE, "type", "addendum", NULL );
- else if ( !strcasecmp( t, "BIBKEY" ) )
- output_fil( outptr, lvl2indent(level), "note", f, i, TAG_OPENCLOSE, TAG_NEWLINE, "type", "bibliography key", NULL );
- }
-}
-
-/* output_key()
- *
- * <subject>
- * <topic>xxxx</topic>
- * </subject>
- */
-static void
-output_key( fields *f, FILE *outptr, int level )
-{
- int i, n;
-
- n = fields_num( f );
- for ( i=0; i<n; ++i ) {
- if ( fields_level( f, i ) != level ) continue;
- if ( !strcasecmp( f->tag[i].data, "KEYWORD" ) ) {
- output_tag( outptr, lvl2indent(level), "subject", NULL, TAG_OPEN, TAG_NEWLINE, NULL );
- output_fil( outptr, lvl2indent(incr_level(level,1)), "topic", f, i, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- output_tag( outptr, lvl2indent(level), "subject", NULL, TAG_CLOSE, TAG_NEWLINE, NULL );
- }
- else if ( !strcasecmp( f->tag[i].data, "EPRINTCLASS" ) ) {
- output_tag( outptr, lvl2indent(level), "subject", NULL, TAG_OPEN, TAG_NEWLINE, NULL );
- output_fil( outptr, lvl2indent(incr_level(level,1)), "topic", f, i, TAG_OPENCLOSE, TAG_NEWLINE, "class", "primary", NULL );
- output_tag( outptr, lvl2indent(level), "subject", NULL, TAG_CLOSE, TAG_NEWLINE, NULL );
- }
- }
-}
-
-static void
-output_sn( fields *f, FILE *outptr, int level )
-{
- convert sn_types[] = {
- { "isbn", "ISBN", 0, 0 },
- { "isbn", "ISBN13", 0, 0 },
- { "lccn", "LCCN", 0, 0 },
- { "issn", "ISSN", 0, 0 },
- { "coden", "CODEN", 0, 0 },
- { "citekey", "REFNUM", 0, 0 },
- { "doi", "DOI", 0, 0 },
- { "eid", "EID", 0, 0 },
- { "eprint", "EPRINT", 0, 0 },
- { "eprinttype","EPRINTTYPE",0, 0 },
- { "pubmed", "PMID", 0, 0 },
- { "MRnumber", "MRNUMBER", 0, 0 },
- { "medline", "MEDLINE", 0, 0 },
- { "pii", "PII", 0, 0 },
- { "pmc", "PMC", 0, 0 },
- { "arXiv", "ARXIV", 0, 0 },
- { "isi", "ISIREFNUM", 0, 0 },
- { "accessnum", "ACCESSNUM", 0, 0 },
- { "jstor", "JSTOR", 0, 0 },
- { "isrn", "ISRN", 0, 0 },
- };
- int ntypes = sizeof( sn_types ) / sizeof( sn_types[0] );
- int i, n, found;
-
- /* output call number */
- n = fields_find( f, "CALLNUMBER", level );
- output_fil( outptr, lvl2indent(level), "classification", f, n, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
-
- /* output specialized serialnumber */
- found = convert_findallfields( f, sn_types, ntypes, level );
- if ( found ) {
- for ( i=0; i<ntypes; ++i ) {
- if ( sn_types[i].pos==-1 ) continue;
- output_fil( outptr, lvl2indent(level), "identifier", f, sn_types[i].pos, TAG_OPENCLOSE, TAG_NEWLINE, "type", sn_types[i].mods, NULL );
- }
- }
-
- /* output _all_ elements of type SERIALNUMBER */
- n = fields_num( f );
- for ( i=0; i<n; ++i ) {
- if ( f->level[i]!=level ) continue;
- if ( strcasecmp( f->tag[i].data, "SERIALNUMBER" ) ) continue;
- output_fil( outptr, lvl2indent(level), "identifier", f, i, TAG_OPENCLOSE, TAG_NEWLINE, "type", "serial number", NULL );
- }
-}
-
-/* output_url()
- *
- * <location>
- * <url>URL</url>
- * <url urlType="pdf">PDFLINK</url>
- * <url displayLabel="Electronic full text" access="raw object">PDFLINK</url>
- * <physicalLocation>LOCATION</physicalLocation>
- * </location>
- */
-static void
-output_url( fields *f, FILE *outptr, int level )
-{
- int location = fields_find( f, "LOCATION", level );
- int url = fields_find( f, "URL", level );
- int fileattach = fields_find( f, "FILEATTACH", level );
- int pdflink = fields_find( f, "PDFLINK", level );
- int i, n;
-
- if ( url==FIELDS_NOTFOUND && location==FIELDS_NOTFOUND && pdflink==FIELDS_NOTFOUND && fileattach==FIELDS_NOTFOUND ) return;
- output_tag( outptr, lvl2indent(level), "location", NULL, TAG_OPEN, TAG_NEWLINE, NULL );
-
- n = fields_num( f );
- for ( i=0; i<n; ++i ) {
- if ( f->level[i]!=level ) continue;
- if ( strcasecmp( f->tag[i].data, "URL" ) ) continue;
- output_fil( outptr, lvl2indent(incr_level(level,1)), "url", f, i, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- }
- for ( i=0; i<n; ++i ) {
- if ( f->level[i]!=level ) continue;
- if ( strcasecmp( f->tag[i].data, "PDFLINK" ) ) continue;
-/* output_fil( outptr, lvl2indent(incr_level(level,1)), "url", f, i, TAG_OPENCLOSE, TAG_NEWLINE, "urlType", "pdf", NULL ); */
- output_fil( outptr, lvl2indent(incr_level(level,1)), "url", f, i, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
- }
- for ( i=0; i<n; ++i ) {
- if ( f->level[i]!=level ) continue;
- if ( strcasecmp( f->tag[i].data, "FILEATTACH" ) ) continue;
- output_fil( outptr, lvl2indent(incr_level(level,1)), "url", f, i, TAG_OPENCLOSE, TAG_NEWLINE, "displayLabel", "Electronic full text", "access", "raw object", NULL );
- }
- if ( location!=-1 )
- output_fil( outptr, lvl2indent(incr_level(level,1)), "physicalLocation", f, location, TAG_OPENCLOSE, TAG_NEWLINE, NULL );
-
- output_tag( outptr, lvl2indent(level), "location", NULL, TAG_CLOSE, TAG_NEWLINE, NULL );
-}
-
-/* refnum should start with a non-number and not include spaces -- ignore this */
-static void
-output_refnum( fields *f, int n, FILE *outptr )
-{
- char *p = fields_value( f, n, FIELDS_CHRP_NOUSE );
-/* if ( p && ((*p>='0' && *p<='9') || *p=='-' || *p=='_' ))
- fprintf( outptr, "ref" );*/
- while ( p && *p ) {
- if ( !is_ws(*p) ) fprintf( outptr, "%c", *p );
-/* if ( (*p>='A' && *p<='Z') ||
- (*p>='a' && *p<='z') ||
- (*p>='0' && *p<='9') ||
- (*p=='-') || (*p=='
- (*p=='_') ) fprintf( outptr, "%c", *p );*/
- p++;
- }
-}
-
-static void
-output_head( fields *f, FILE *outptr, int dropkey, unsigned long numrefs )
-{
- int n;
- fprintf( outptr, "<mods");
- if ( !dropkey ) {
- n = fields_find( f, "REFNUM", LEVEL_MAIN );
- if ( n!=FIELDS_NOTFOUND ) {
- fprintf( outptr, " ID=\"");
- output_refnum( f, n, outptr );
- fprintf( outptr, "\"");
- }
- }
- fprintf( outptr, ">\n" );
-}
-
-static int
-original_items( fields *f, int level )
-{
- int i, targetlevel, n;
- if ( level < 0 ) return 0;
- targetlevel = -( level + 2 );
- n = fields_num( f );
- for ( i=0; i<n; ++i ) {
- if ( fields_level( f, i ) == targetlevel )
- return targetlevel;
- }
- return 0;
-}
-
-static void
-output_citeparts( fields *f, FILE *outptr, int level, int max )
-{
- int orig_level;
-
- output_title( f, outptr, level );
- output_names( f, outptr, level );
- output_origin( f, outptr, level );
- output_type( f, outptr, level );
- output_language( f, outptr, level );
- output_description( f, outptr, level );
-
- if ( level >= 0 && level < max ) {
- output_tag( outptr, lvl2indent(level), "relatedItem", NULL, TAG_OPEN, TAG_NEWLINE, "type", "host", NULL );
- output_citeparts( f, outptr, incr_level(level,1), max );
- output_tag( outptr, lvl2indent(level), "relatedItem", NULL, TAG_CLOSE, TAG_NEWLINE, NULL );
- }
- /* Look for original item things */
- orig_level = original_items( f, level );
- if ( orig_level ) {
- output_tag( outptr, lvl2indent(level), "relatedItem", NULL, TAG_OPEN, TAG_NEWLINE, "type", "original", NULL );
- output_citeparts( f, outptr, orig_level, max );
- output_tag( outptr, lvl2indent(level), "relatedItem", NULL, TAG_CLOSE, TAG_NEWLINE, NULL );
- }
- output_abs( f, outptr, level );
- output_notes( f, outptr, level );
- output_toc( f, outptr, level );
- output_key( f, outptr, level );
- output_sn( f, outptr, level );
- output_url( f, outptr, level );
- output_part( f, outptr, level );
-
- output_recordInfo( f, outptr, level );
-}
-
-static void
-modsout_report_unused_tags( fields *f, param *p, unsigned long numrefs )
-{
- int i, n, nwritten, nunused = 0, level;
- char *tag, *value;
- n = fields_num( f );
- for ( i=0; i<n; ++i ) {
- if ( fields_used( f, i ) ) continue;
- nunused++;
- }
- if ( nunused ) {
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Reference %lu has unused tags.\n", numrefs+1 );
- /* Find author from level 0 */
- nwritten = 0;
- for ( i=0; i<n; ++i ) {
- if ( fields_level( f, i ) != 0 ) continue;
- tag = fields_tag( f, i, FIELDS_CHRP_NOUSE );
- if ( strcasecmp( tag, "AUTHOR" ) && strcasecmp( tag, "AUTHOR:ASIS" ) && strcasecmp( tag, "AUTHOR:CORP" ) ) continue;
- value = fields_value( f, i, FIELDS_CHRP_NOUSE );
- if ( nwritten==0 ) fprintf( stderr, "\tAuthor(s) (level=0):\n" );
- fprintf( stderr, "\t\t'%s'\n", value );
- nwritten++;
- }
- nwritten = 0;
- for ( i=0; i<n; ++i ) {
- if ( fields_level( f, i ) != 0 ) continue;
- tag = fields_tag( f, i, FIELDS_CHRP_NOUSE );
- if ( strcasecmp( tag, "DATE:YEAR" ) && strcasecmp( tag, "PARTDATE:YEAR" ) ) continue;
- value = fields_value( f, i, FIELDS_CHRP_NOUSE );
- if ( nwritten==0 ) fprintf( stderr, "\tYear(s) (level=0):\n" );
- fprintf( stderr, "\t\t'%s'\n", value );
- nwritten++;
- }
- nwritten = 0;
- for ( i=0; i<n; ++i ) {
- if ( fields_level( f, i ) != 0 ) continue;
- tag = fields_tag( f, i, FIELDS_CHRP_NOUSE );
- if ( strncasecmp( tag, "TITLE", 5 ) ) continue;
- value = fields_value( f, i, FIELDS_CHRP_NOUSE );
- if ( nwritten==0 ) fprintf( stderr, "\tTitle(s) (level=0):\n" );
- fprintf( stderr, "\t\t'%s'\n", value );
- nwritten++;
- }
-
- fprintf( stderr, "\tUnused tags:\n" );
- for ( i=0; i<n; ++i ) {
- if ( fields_used( f, i ) ) continue;
- tag = fields_tag( f, i, FIELDS_CHRP_NOUSE );
- value = fields_value( f, i, FIELDS_CHRP_NOUSE );
- level = fields_level( f, i );
- fprintf( stderr, "\t\ttag: '%s' value: '%s' level: %d\n",
- tag, value, level );
- }
- }
-}
-
-static int
-modsout_write( fields *f, FILE *outptr, param *p, unsigned long numrefs )
-{
- int max, dropkey;
- max = fields_maxlevel( f );
- dropkey = ( p->format_opts & BIBL_FORMAT_MODSOUT_DROPKEY );
-
- output_head( f, outptr, dropkey, numrefs );
- output_citeparts( f, outptr, 0, max );
- modsout_report_unused_tags( f, p, numrefs );
-
- fprintf( outptr, "</mods>\n" );
- fflush( outptr );
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int modsout_writeheader()
-*****************************************************/
-
-static void
-modsout_writeheader( FILE *outptr, param *p )
-{
- if ( p->utf8bom ) utf8_writebom( outptr );
- fprintf(outptr,"<?xml version=\"1.0\" encoding=\"%s\"?>\n",
- charset_get_xmlname( p->charsetout ) );
- fprintf(outptr,"<modsCollection xmlns=\"http://www.loc.gov/mods/v3\">\n");
-}
-
-/*****************************************************
- PUBLIC: int modsout_writefooter()
-*****************************************************/
-
-static void
-modsout_writefooter( FILE *outptr )
-{
- fprintf(outptr,"</modsCollection>\n");
- fflush( outptr );
-}
-
diff --git a/support/texlab/crates/bibutils_sys/src/modstypes.c b/support/texlab/crates/bibutils_sys/src/modstypes.c
deleted file mode 100644
index 95b0a4ab57..0000000000
--- a/support/texlab/crates/bibutils_sys/src/modstypes.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * modstypes.c
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <string.h>
-#include "modstypes.h"
-
-/* Conversion information for identifier type attributes:
- *
- * <identifier type="issn">XXXX-XXXX</identifier>
- *
- */
-convert identifier_types[] = {
- { "citekey", "REFNUM" },
- { "issn", "ISSN" },
- { "isbn", "ISBN" },
- { "doi", "DOI" },
- { "url", "URL" },
- { "uri", "URL" },
- { "pubmed", "PMID", },
- { "medline", "MEDLINE" },
- { "pmc", "PMC" },
- { "pii", "PII" },
- { "isi", "ISIREFNUM" },
- { "lccn", "LCCN" },
- { "serial number", "SERIALNUMBER" },
- { "accessnum", "ACCESSNUM" }
-};
-
-int nidentifier_types = sizeof( identifier_types ) / sizeof( identifier_types[0] );
-
-char *
-mods_find_attrib( char *internal_name, convert *data, int ndata )
-{
- int i;
- for ( i=0; i<ndata; ++i ) {
- if ( !strcasecmp( data[i].internal, internal_name ) )
- return data[i].mods;
- }
- return NULL;
-}
-
-char *
-mods_find_internal( char *mods_name, convert *data, int ndata )
-{
- int i;
- for ( i=0; i<ndata; ++i ) {
- if ( !strcasecmp( data[i].mods, mods_name ) )
- return data[i].internal;
- }
- return NULL;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/modstypes.h b/support/texlab/crates/bibutils_sys/src/modstypes.h
deleted file mode 100644
index 44c85fc99f..0000000000
--- a/support/texlab/crates/bibutils_sys/src/modstypes.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * modstypes.h
- *
- * Copyright (c) Chris Putnam 2008-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef MODSTYPES_H
-#define MODSTYPES_H
-typedef struct convert {
- char *mods; /* old */
- char *internal; /* new */
- int pos;
- int code;
-} convert;
-
-extern convert identifier_types[];
-extern int nidentifier_types;
-
-extern char *mods_find_attrib( char *internal_name, convert *data, int ndata );
-extern char *mods_find_internal( char *mods_name, convert *data, int ndata );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/msvc_fix.h b/support/texlab/crates/bibutils_sys/src/msvc_fix.h
deleted file mode 100644
index cca99bed06..0000000000
--- a/support/texlab/crates/bibutils_sys/src/msvc_fix.h
+++ /dev/null
@@ -1,7 +0,0 @@
-// Patch: Fix build on MSVC
-#if defined(_WIN32) || defined(_WIN64)
- #define snprintf _snprintf
- #define vsnprintf _vsnprintf
- #define strcasecmp _stricmp
- #define strncasecmp _strnicmp
-#endif \ No newline at end of file
diff --git a/support/texlab/crates/bibutils_sys/src/mycvout.c b/support/texlab/crates/bibutils_sys/src/mycvout.c
deleted file mode 100644
index d42e2b0a4c..0000000000
--- a/support/texlab/crates/bibutils_sys/src/mycvout.c
+++ /dev/null
@@ -1,614 +0,0 @@
-/*
- * mycvout.c
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include "str.h"
-#include "strsearch.h"
-#include "utf8.h"
-#include "xml.h"
-#include "fields.h"
-#include "bibl.h"
-#include "doi.h"
-#include "bibutils.h"
-
-void
-bibtexout_initparams( param *pm, const char *progname )
-{
- pm->writeformat = BIBL_BIBTEXOUT;
- pm->format_opts = 0;
- pm->charsetout = BIBL_CHARSET_DEFAULT;
- pm->charsetout_src = BIBL_SRC_DEFAULT;
- pm->latexout = 1;
- pm->utf8out = 0;
- pm->utf8bom = 0;
- pm->xmlout = BIBL_XMLOUT_FALSE;
- pm->nosplittitle = 0;
- p->verbose = 0;
- pm->addcount = 0;
- pm->singlerefperfile = 0;
-
- pm->headerf = bibtexout_writeheader;
- pm->footerf = NULL;
- pm->writef = bibtexout_write;
-
- if ( !p->progname && progname )
- p->progname = strdup( progname );
-}
-
-enum {
- TYPE_UNKNOWN = 0,
- TYPE_ARTICLE,
- TYPE_INBOOK,
- TYPE_INPROCEEDINGS,
- TYPE_PROCEEDINGS,
- TYPE_INCOLLECTION,
- TYPE_COLLECTION,
- TYPE_BOOK,
- TYPE_PHDTHESIS,
- TYPE_MASTERSTHESIS,
- TYPE_REPORT,
- TYPE_MANUAL,
- TYPE_UNPUBLISHED,
- TYPE_ELECTRONIC,
- TYPE_MISC
-};
-
-static void
-output_citekey( FILE *fp, fields *info, unsigned long refnum, int format_opts )
-{
- int n = fields_find( info, "REFNUM", -1 );
- char *p;
- if ( n!=-1 ) {
- p = info->data[n].data;
- while ( p && *p && *p!='|' ) {
- if ( format_opts & BIBL_FORMAT_BIBOUT_STRICTKEY ) {
- if ( isdigit((unsigned char)*p) || (*p>='A' && *p<='Z') ||
- (*p>='a' && *p<='z' ) )
- fprintf( fp, "%c", *p );
- }
- else {
- if ( *p!=' ' && *p!='\t' ) {
- fprintf( fp, "%c", *p );
- }
- }
- p++;
- }
- }
-}
-
-static int
-bibtexout_type( fields *info, char *filename, int refnum, param *p )
-{
- char *genre;
- int type = TYPE_UNKNOWN, i, maxlevel, n, level;
-
- /* determine bibliography type */
- for ( i=0; i<info->n; ++i ) {
- if ( strcasecmp( info->tag[i].data, "GENRE:MARC" ) &&
- strcasecmp( info->tag[i].data, "GENRE:BIBUTILS" ) ) continue;
- genre = info->data[i].data;
- level = info->level[i];
- if ( !strcasecmp( genre, "periodical" ) ||
- !strcasecmp( genre, "academic journal" ) ||
- !strcasecmp( genre, "magazine" ) ||
- !strcasecmp( genre, "newspaper" ) ||
- !strcasecmp( genre, "article" ) )
- type = TYPE_ARTICLE;
- else if ( !strcasecmp( genre, "instruction" ) )
- type = TYPE_MANUAL;
- else if ( !strcasecmp( genre, "unpublished" ) )
- type = TYPE_UNPUBLISHED;
- else if ( !strcasecmp( genre, "conference publication" ) ) {
- if ( level==0 ) type=TYPE_PROCEEDINGS;
- else type = TYPE_INPROCEEDINGS;
- } else if ( !strcasecmp( genre, "collection" ) ) {
- if ( level==0 ) type=TYPE_COLLECTION;
- else type = TYPE_INCOLLECTION;
- } else if ( !strcasecmp( genre, "technical report" ) )
- type = TYPE_REPORT;
- else if ( !strcasecmp( genre, "book" ) ) {
- if ( level==0 ) type=TYPE_BOOK;
- else type=TYPE_INBOOK;
- } else if ( !strcasecmp( genre, "thesis" ) ) {
- if ( type==TYPE_UNKNOWN ) type=TYPE_PHDTHESIS;
- } else if ( !strcasecmp( genre, "Ph.D. thesis" ) )
- type = TYPE_PHDTHESIS;
- else if ( !strcasecmp( genre, "Masters thesis" ) )
- type = TYPE_MASTERSTHESIS;
- else if ( !strcasecmp( genre, "electronic" ) )
- type = TYPE_ELECTRONIC;
- }
- if ( type==TYPE_UNKNOWN ) {
- for ( i=0; i<info->n; ++i ) {
- if ( strcasecmp( info->tag[i].data, "ISSUANCE" ) ) continue;
- if ( !strcasecmp( info->data[i].data, "monographic" ) ) {
- if ( info->level[i]==0 ) type = TYPE_BOOK;
- else if ( info->level[i]==1 ) type=TYPE_INBOOK;
- }
- }
- }
-
- /* default to BOOK type */
- if ( type==TYPE_UNKNOWN ) {
- maxlevel = fields_maxlevel( info );
- if ( maxlevel > 0 ) type = TYPE_INBOOK;
- else {
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Cannot identify TYPE "
- "in reference %d ", refnum+1 );
- n = fields_find( info, "REFNUM", -1 );
- if ( n!=-1 )
- fprintf( stderr, " %s", info->data[n].data);
- fprintf( stderr, " (defaulting to @Misc)\n" );
- type = TYPE_MISC;
- }
- }
- return type;
-}
-
-static void
-output_type( FILE *fp, int type, int format_opts )
-{
- typedef struct {
- int bib_type;
- char *type_name;
- } typenames;
-
- typenames types[] = {
- { TYPE_ARTICLE, "Article" },
- { TYPE_INBOOK, "Inbook" },
- { TYPE_PROCEEDINGS, "Proceedings" },
- { TYPE_INPROCEEDINGS, "InProceedings" },
- { TYPE_BOOK, "Book" },
- { TYPE_PHDTHESIS, "PhdThesis" },
- { TYPE_MASTERSTHESIS, "MastersThesis" },
- { TYPE_REPORT, "TechReport" },
- { TYPE_MANUAL, "Manual" },
- { TYPE_COLLECTION, "Collection" },
- { TYPE_INCOLLECTION, "InCollection" },
- { TYPE_UNPUBLISHED, "Unpublished" },
- { TYPE_ELECTRONIC, "Electronic" },
- { TYPE_MISC, "Misc" } };
- int i, len, ntypes = sizeof( types ) / sizeof( types[0] );
- char *s = NULL;
- for ( i=0; i<ntypes; ++i ) {
- if ( types[i].bib_type == type ) {
- s = types[i].type_name;
- break;
- }
- }
- if ( !s ) s = types[ntypes-1].type_name; /* default to TYPE_MISC */
- if ( !(format_opts & BIBL_FORMAT_BIBOUT_UPPERCASE ) ) fprintf( fp, "@%s{", s );
- else {
- len = strlen( s );
- fprintf( fp, "@" );
- for ( i=0; i<len; ++i )
- fprintf( fp, "%c", toupper((unsigned char)s[i]) );
- fprintf( fp, "{" );
- }
-}
-
-static void
-output_element( FILE *fp, char *tag, char *data, int format_opts )
-{
- int i, len, nquotes = 0;
- char ch;
- fprintf( fp, ",\n" );
- if ( format_opts & BIBL_FORMAT_BIBOUT_WHITESPACE ) fprintf( fp, " " );
- if ( !(format_opts & BIBL_FORMAT_BIBOUT_UPPERCASE ) ) fprintf( fp, "%s", tag );
- else {
- len = strlen( tag );
- for ( i=0; i<len; ++i )
- fprintf( fp, "%c", toupper((unsigned char)tag[i]) );
- }
- if ( format_opts & BIBL_FORMAT_BIBOUT_WHITESPACE ) fprintf( fp, " = \t" );
- else fprintf( fp, "=" );
-
- if ( format_opts & BIBL_FORMAT_BIBOUT_BRACKETS ) fprintf( fp, "{" );
- else fprintf( fp, "\"" );
-
- len = strlen( data );
- for ( i=0; i<len; ++i ) {
- ch = data[i];
- if ( ch!='\"' ) fprintf( fp, "%c", ch );
- else {
- if ( format_opts & BIBL_FORMAT_BIBOUT_BRACKETS ||
- ( i>0 && data[i-1]=='\\' ) )
- fprintf( fp, "\"" );
- else {
- if ( nquotes % 2 == 0 )
- fprintf( fp, "``" );
- else fprintf( fp, "\'\'" );
- nquotes++;
- }
- }
- }
-
- if ( format_opts & BIBL_FORMAT_BIBOUT_BRACKETS ) fprintf( fp, "}" );
- else fprintf( fp, "\"" );
-}
-
-static void
-output_and_use( FILE *fp, fields *info, int n, char *outtag, int format_opts )
-{
- output_element( fp, outtag, info->data[n].data, format_opts );
- fields_setused( info, n );
-}
-
-static void
-output_simple( FILE *fp, fields *info, char *intag, char *outtag,
- int format_opts )
-{
- int n = fields_find( info, intag, -1 );
- if ( n!=-1 ) {
- output_and_use( fp, info, n, outtag, format_opts );
- }
-}
-
-static void
-output_simpleall( FILE *fp, fields *info, char *intag, char *outtag,
- int format_opts )
-{
- int i;
- for ( i=0; i<info->n; ++i ) {
- if ( strcasecmp( info->tag[i].data, intag ) ) continue;
- output_and_use( fp, info, i, outtag, format_opts );
- }
-}
-
-static void
-output_fileattach( FILE *fp, fields *info, int format_opts )
-{
- str data;
- int i;
- str_init( &data );
- for ( i=0; i<info->n; ++i ) {
- if ( strcasecmp( info->tag[i].data, "FILEATTACH" ) ) continue;
- str_strcpy( &data, ":" );
- str_strcatc( &data, &(info->data[i]) );
- if ( strsearch( info->data[i].data, ".pdf" ) )
- str_strcatc( &data, ":PDF" );
- else if ( strsearch( info->data[i].data, ".html" ) )
- str_strcatc( &data, ":HTML" );
- else str_strcatc( &data, ":TYPE" );
- output_element( fp, "file", data.data, format_opts );
- fields_setused( info, i );
- str_empty( &data );
- }
- str_free( &data );
-}
-
-static void
-add_person( str *s, char *p )
-{
- int nseps = 0, nch;
- while ( *p ) {
- nch = 0;
- if ( nseps==1 ) str_addchar( s, ',' );
- if ( nseps ) str_addchar( s, ' ' );
- while ( *p && *p!='|' ) {
- str_addchar( s, *p++ );
- nch++;
- }
- if ( *p=='|' ) p++;
- if ( nseps!=0 && nch==1 ) str_addchar( s, '.' );
- nseps++;
- }
-}
-
-static void
-output_people( FILE *fp, fields *info, unsigned long refnum, char *tag,
- char *ctag, char *atag, char *bibtag, int level,
- int format_opts )
-{
- str allpeople;
- int i, npeople, person, corp, asis;
-
- /* primary citation authors */
- npeople = 0;
- for ( i=0; i<info->n; ++i ) {
- if ( level!=-1 && info->level[i]!=level ) continue;
- person = ( strcasecmp( info->tag[i].data, tag ) == 0 );
- corp = ( strcasecmp( info->tag[i].data, ctag ) == 0 );
- asis = ( strcasecmp( info->tag[i].data, atag ) == 0 );
- if ( person || corp || asis ) {
- if ( npeople==0 ) str_init( &allpeople );
- else {
- if ( format_opts & BIBL_FORMAT_BIBOUT_WHITESPACE )
- str_strcatc(&allpeople,"\n\t\tand ");
- else str_strcatc( &allpeople, "\nand " );
- }
- if ( corp ) {
- str_addchar( &allpeople, '{' );
- str_strcatc( &allpeople, info->data[i].data );
- str_addchar( &allpeople, '}' );
- } else if ( asis ) {
- str_addchar( &allpeople, '{' );
- str_strcatc( &allpeople, info->data[i].data );
- str_addchar( &allpeople, '}' );
- } else add_person( &allpeople, info->data[i].data );
- fields_setused( info, i );
- npeople++;
- }
- }
- if ( npeople ) {
- output_element( fp, bibtag, allpeople.data, format_opts );
- str_free( &allpeople );
- }
-}
-
-static void
-output_title( FILE *fp, fields *info, unsigned long refnum, char *bibtag, int level, int format_opts )
-{
- str title;
- int n1 = -1, n2 = -1;
- /* Option is for short titles of journals */
- if ( ( format_opts & BIBL_FORMAT_BIBOUT_SHORTTITLE ) && level==1 ) {
- n1 = fields_find( info, "SHORTTITLE", level );
- n2 = fields_find( info, "SHORTSUBTITLE", level );
- }
- if ( n1==-1 ) {
- n1 = fields_find( info, "TITLE", level );
- n2 = fields_find( info, "SUBTITLE", level );
- }
- if ( n1!=-1 ) {
- str_init( &title );
- str_strcpy( &title, &(info->data[n1]) );
- fields_setused( info, n1 );
- if ( n2!=-1 ) {
- if ( info->data[n1].data[info->data[n1].len]!='?' )
- str_strcatc( &title, ": " );
- else str_addchar( &title, ' ' );
- str_strcatc( &title, info->data[n2].data );
- fields_setused( info, n2 );
- }
- output_element( fp, bibtag, title.data, format_opts );
- str_free( &title );
- }
-}
-
-static void
-output_date( FILE *fp, fields *info, unsigned long refnum, int format_opts )
-{
- char *months[12] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
- int n, month;
- n = fields_find( info, "DATE:YEAR", -1 );
- if ( n==-1 ) n = fields_find( info, "PARTDATE:YEAR", -1 );
- if ( n!=-1 ) {
- output_element( fp, "year", info->data[n].data, format_opts );
- fields_setused( info, n );
- }
- n = fields_find( info, "DATE:MONTH", -1 );
- if ( n==-1 ) n = fields_find( info, "PARTDATE:MONTH", -1 );
- if ( n!=-1 ) {
- month = atoi( info->data[n].data );
- if ( month>0 && month<13 )
- output_element( fp, "month", months[month-1], format_opts );
- else
- output_element( fp, "month", info->data[n].data, format_opts );
- fields_setused( info, n );
- }
- n = fields_find( info, "DATE:DAY", -1 );
- if ( n==-1 ) n = fields_find( info, "PARTDATE:DAY", -1 );
- if ( n!=-1 ) {
- output_element( fp, "day", info->data[n].data, format_opts );
- fields_setused( info, n );
- }
-}
-
-
-/* output article number as pages if true pages aren't found */
-static void
-output_articlenumber( FILE *fp, fields *info, unsigned long refnum,
- int format_opts )
-{
- int ar = fields_find( info, "ARTICLENUMBER", -1 );
- if ( ar!=-1 ) {
- str pages;
- str_init( &pages );
- str_strcatc( &pages, info->data[ar].data );
- output_element( fp, "pages", pages.data, format_opts );
- fields_setused( info, ar );
- str_free( &pages );
- }
-}
-
-static void
-output_arxiv( FILE *fp, fields *info, int format_opts )
-{
- int ar = fields_find( info, "ARXIV", -1 );
- if ( ar!=-1 ) {
- str arxiv;
- str_init( &arxiv );
- arxiv_to_url( info, ar, "URL", &arxiv );
- if ( arxiv.len )
- output_element( fp, "url", arxiv.data, format_opts );
- str_free( &arxiv );
- }
-}
-
-static void
-output_pmid( FILE *fp, fields *info, int format_opts )
-{
- int pm = fields_find( info, "PMID", -1 );
- if ( pm!=-1 ) {
- str pmid;
- str_init( &pmid );
- pmid_to_url( info, pm, "URL", &pmid );
- if ( pmid.len )
- output_element( fp, "url", pmid.data, format_opts );
- str_free( &pmid );
- }
-}
-
-static void
-output_jstor( FILE *fp, fields *info, int format_opts )
-{
- int js = fields_find( info, "JSTOR", -1 );
- if ( js!=-1 ) {
- str jstor;
- str_init( &jstor );
- jstor_to_url( info, js, "URL", &jstor );
- if ( jstor.len )
- output_element( fp, "url", jstor.data, format_opts );
- str_free( &jstor );
- }
-}
-
-static void
-output_pages( FILE *fp, fields *info, unsigned long refnum, int format_opts )
-{
- str pages;
- int sn, en;
- sn = fields_find( info, "PAGES:START", -1 );
- en = fields_find( info, "PAGES:STOP", -1 );
- if ( sn==-1 && en==-1 ) {
- output_articlenumber( fp, info, refnum, format_opts );
- return;
- }
- str_init( &pages );
- if ( sn!=-1 ) {
- str_strcat( &pages, info->data[sn].data );
- fields_setused( info, sn );
- }
- if ( sn!=-1 && en!=-1 ) {
- if ( format_opts & BIBL_FORMAT_BIBOUT_SINGLEDASH )
- str_strcat( &pages, "-" );
- else
- str_strcat( &pages, "--" );
- }
- if ( en!=-1 ) {
- str_strcat( &pages, info->data[en].data );
- fields_setused( info, en );
- }
- output_element( fp, "pages", pages.data, format_opts );
- str_free( &pages );
-}
-
-/*
- * from Tim Hicks:
- * I'm no expert on bibtex, but those who know more than I on our mailing
- * list suggest that 'issue' isn't a recognised key for bibtex and
- * therefore that bibutils should be aliasing IS to number at some point in
- * the conversion.
- *
- * Therefore prefer outputting issue/number as number and only keep
- * a distinction if both issue and number are present for a particular
- * reference.
- */
-
-static void
-output_issue_number( FILE *fp, fields *info, int format_opts )
-{
- int nissue = fields_find( info, "ISSUE", -1 );
- int nnumber = fields_find( info, "NUMBER", -1 );
- if ( nissue!=-1 && nnumber!=-1 ) {
- output_and_use( fp, info, nissue, "issue", format_opts );
- output_and_use( fp, info, nnumber, "number", format_opts );
-/* output_element( fp, "issue", info->data[nissue].data,
- format_opts );
- fields_setused( info, nissue );
- output_element( fp, "number", info->data[nnumber].data,
- format_opts );
- fields_setused( info, nnumber );*/
- } else if ( nissue!=-1 ) {
- output_and_use( fp, info, nissue, "number", format_opts );
-/*
- output_element( fp, "number", info->data[nissue].data,
- format_opts );
- fields_setused( info, nissue );*/
- } else if ( nnumber!=-1 ) {
- output_and_use( fp, info, nnumber, "number", format_opts );
-/*
- output_element( fp, "number", info->data[nnumber].data,
- format_opts );
- fields_setused( info, nnumber );
-*/
- }
-}
-
-void
-bibtexout_write( fields *info, FILE *fp, param *p, unsigned long refnum )
-{
- int type;
- fields_clearused( info );
- type = bibtexout_type( info, "", refnum, p );
- output_type( fp, type, p->format_opts );
- if ( !( p->format_opts & BIBL_FORMAT_BIBOUT_DROPKEY ) )
- output_citekey( fp, info, refnum, p->format_opts );
- output_people( fp, info, refnum, "AUTHOR", "AUTHOR:CORP", "AUTHOR:ASIS", "author", 0,
- p->format_opts );
- output_people( fp, info, refnum, "EDITOR", "EDITOR:CORP", "EDITOR:ASIS", "editor", -1,
- p->format_opts );
- output_people( fp, info, refnum, "TRANSLATOR", "TRANSLATOR:CORP", "TRANSLATOR:ASIS", "translator", -1, p->format_opts );
-
- /* item=main level title */
- if ( type==TYPE_INBOOK )
- output_title( fp, info, refnum, "chapter", 0, p->format_opts );
- else
- output_title( fp, info, refnum, "title", 0, p->format_opts );
-
- /* item=host level title */
- if ( type==TYPE_ARTICLE )
- output_title( fp, info, refnum, "journal", 1, p->format_opts );
- else if ( type==TYPE_INBOOK ) {
- output_title( fp, info, refnum, "title", 1, p->format_opts );
- output_title( fp, info, refnum, "series", 2, p->format_opts );
- }
- else if ( type==TYPE_INPROCEEDINGS || type==TYPE_INCOLLECTION ) {
- output_title( fp, info, refnum, "booktitle", 1, p->format_opts );
- output_title( fp, info, refnum, "series", 2, p->format_opts );
- }
- else if ( type==TYPE_PHDTHESIS || type==TYPE_MASTERSTHESIS ) {
- output_title( fp, info, refnum, "series", 1, p->format_opts );
- }
- else if ( type==TYPE_BOOK || type==TYPE_COLLECTION || type==TYPE_PROCEEDINGS )
- output_title( fp, info, refnum, "series", 1, p->format_opts );
-
- output_date( fp, info, refnum, p->format_opts );
- output_simple( fp, info, "EDITION", "edition", p->format_opts );
- output_simple( fp, info, "PUBLISHER", "publisher", p->format_opts );
- output_simple( fp, info, "ADDRESS", "address", p->format_opts );
- output_simple( fp, info, "VOLUME", "volume", p->format_opts );
- output_issue_number( fp, info, p->format_opts );
-/* output_simple( fp, info, "ISSUE", "issue", p->format_opts );
- output_simple( fp, info, "NUMBER", "number", p->format_opts );s*/
- output_pages( fp, info, refnum, p->format_opts );
- output_simpleall( fp, info, "KEYWORD", "keywords", p->format_opts );
- output_simple( fp, info, "CONTENTS", "contents", p->format_opts );
- output_simple( fp, info, "ABSTRACT", "abstract", p->format_opts );
- output_simple( fp, info, "LOCATION", "location", p->format_opts );
- output_simple( fp, info, "DEGREEGRANTOR", "school", p->format_opts );
- output_simple( fp, info, "DEGREEGRANTOR:ASIS", "school", p->format_opts );
- output_simple( fp, info, "DEGREEGRANTOR:CORP", "school", p->format_opts );
- output_simpleall( fp, info, "NOTES", "note", p->format_opts );
- output_simpleall( fp, info, "ANNOTE", "annote", p->format_opts );
- output_simple( fp, info, "ISBN", "isbn", p->format_opts );
- output_simple( fp, info, "ISSN", "issn", p->format_opts );
- output_simple( fp, info, "DOI", "doi", p->format_opts );
- output_simpleall( fp, info, "URL", "url", p->format_opts );
- output_fileattach( fp, info, p->format_opts );
- output_arxiv( fp, info, p->format_opts );
- output_pmid( fp, info, p->format_opts );
- output_jstor( fp, info, p->format_opts );
- output_simple( fp, info, "LANGUAGE", "language", p->format_opts );
- if ( p->format_opts & BIBL_FORMAT_BIBOUT_FINALCOMMA ) fprintf( fp, "," );
- fprintf( fp, "\n}\n\n" );
- fflush( fp );
-}
-
-void
-bibtexout_writeheader( FILE *outptr, param *p )
-{
- if ( p->utf8bom ) utf8_writebom( outptr );
-}
-
diff --git a/support/texlab/crates/bibutils_sys/src/name.c b/support/texlab/crates/bibutils_sys/src/name.c
deleted file mode 100644
index fe2c2c08fd..0000000000
--- a/support/texlab/crates/bibutils_sys/src/name.c
+++ /dev/null
@@ -1,535 +0,0 @@
-/*
- * name.c
- *
- * mangle names w/ and w/o commas
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <ctype.h>
-#include <string.h>
-#include "utf8.h"
-#include "unicode.h"
-#include "is_ws.h"
-#include "str.h"
-#include "fields.h"
-#include "slist.h"
-#include "intlist.h"
-#include "name.h"
-#include "msvc_fix.h"
-
-/* name_build_withcomma()
- *
- * reconstruct parsed names in format: 'family|given|given||suffix'
- * to 'family suffix, given given
- */
-void
-name_build_withcomma( str *s, const char *p )
-{
- const char *suffix, *stopat;
- int nseps = 0, nch;
-
- str_empty( s );
-
- suffix = strstr( p, "||" );
- if ( suffix ) stopat = suffix;
- else stopat = strchr( p, '\0' );
-
- while ( p != stopat ) {
- nch = 0;
- if ( nseps==1 ) {
- if ( suffix ) {
- str_strcatc( s, " " );
- str_strcatc( s, suffix+2 );
- }
- str_addchar( s, ',' );
- }
- if ( nseps ) str_addchar( s, ' ' );
- while ( p!=stopat && *p!='|' ) {
- str_addchar( s, *p++ );
- nch++;
- }
- if ( p!=stopat && *p=='|' ) p++;
- if ( nseps!=0 && nch==1 ) str_addchar( s, '.' );
- nseps++;
- }
-}
-
-/* name_findetal()
- *
- * Returns number of final tokens to be skipped in processing
- * of name lists.
- */
-int
-name_findetal( slist *tokens )
-{
- str *s1, *s2;
-
- if ( tokens->n==0 ) return 0;
-
- /* ...check last entry for full 'et al.' or variant */
- s2 = slist_str( tokens, tokens->n - 1 );
- if ( !strcasecmp( s2->data, "et alia" ) ||
- !strcasecmp( s2->data, "et al." ) ||
- !strcasecmp( s2->data, "et al.," ) ||
- !strcasecmp( s2->data, "et al" ) ||
- !strcasecmp( s2->data, "etalia" ) ||
- !strcasecmp( s2->data, "etal." ) ||
- !strcasecmp( s2->data, "etal" ) ) {
- return 1;
- }
-
- if ( tokens->n==1 ) return 0;
-
- /* ...check last two entries for full 'et' and 'al.' */
- s1 = slist_str( tokens, tokens->n - 2 );
- if ( !strcasecmp( s1->data, "et" ) ) {
- if ( !strcasecmp( s2->data, "alia" ) ||
- !strcasecmp( s2->data, "al." ) ||
- !strcasecmp( s2->data, "al.," ) ||
- !strcasecmp( s2->data, "al" ) ) {
- return 2;
- }
- }
-
- return 0;
-}
-
-#define WITHCOMMA (1)
-#define JUNIOR (2)
-#define SENIOR (4)
-#define THIRD (8)
-#define FOURTH (16)
-
-typedef struct {
- char *s;
- unsigned short value;
-} suffix_value_t;
-
-static int
-identify_suffix( char *p )
-{
- suffix_value_t suffixes[] = {
- { "Jr." , JUNIOR },
- { "Jr" , JUNIOR },
- { "Jr.," , JUNIOR | WITHCOMMA },
- { "Jr," , JUNIOR | WITHCOMMA },
- { "Sr." , SENIOR },
- { "Sr" , SENIOR },
- { "Sr.," , SENIOR | WITHCOMMA },
- { "Sr," , SENIOR | WITHCOMMA },
- { "III" , THIRD },
- { "III," , THIRD | WITHCOMMA },
- { "IV" , FOURTH },
- { "IV," , FOURTH | WITHCOMMA },
- };
- int i, nsuffixes = sizeof( suffixes ) / sizeof( suffixes[0] );
- for ( i=0; i<nsuffixes; ++i ) {
- if ( !strcmp( p, suffixes[i].s ) )
- return suffixes[i].value;
- }
- return 0;
-}
-
-static int
-has_suffix( slist *tokens, int begin, int end, int *suffixpos )
-{
- int i, ret;
- str *s;
-
- /* ...check last element, e.g. "H. F. Author, Sr." */
- s = slist_str( tokens, end - 1 );
- ret = identify_suffix( s->data );
- if ( ret ) {
- *suffixpos = end - 1;
- return ret;
- }
-
- /* ...try to find one after a comma, e.g. "Author, Sr., H. F." */
- for ( i=begin; i<end-1; ++i ) {
- s = slist_str( tokens, i );
- if ( s->len && s->data[ s->len - 1 ]==',' ) {
- s = slist_str( tokens, i+1 );
- ret = identify_suffix( s->data );
- if ( ret ) {
- *suffixpos = i+1;
- return ret;
- }
- }
- }
-
- return 0;
-}
-
-static int
-add_given_split( str *name, str *s )
-{
- unsigned int unicode_char;
- unsigned int pos = 0;
- char utf8s[7];
- while ( pos < s->len ) {
- unicode_char = utf8_decode( s->data, &pos );
- if ( is_ws( (char) unicode_char ) ) continue;
- else if ( unicode_char==(unsigned int)'.' ) {
- if ( s->data[pos]=='-' ) {
- str_strcatc( name, ".-" );
- pos += 1;
- unicode_char = utf8_decode( s->data, &pos );
- utf8_encode_str( unicode_char, utf8s );
- str_strcatc( name, utf8s );
- str_addchar( name, '.' );
- }
- } else if ( unicode_char==(unsigned int)'-' ) {
- str_strcatc( name, ".-" );
- unicode_char = utf8_decode( s->data, &pos );
- utf8_encode_str( unicode_char, utf8s );
- str_strcatc( name, utf8s );
- str_addchar( name, '.' );
- } else if ( unicode_char==(unsigned int)',' ) { /* nothing */
- } else {
- str_addchar( name, '|' );
- utf8_encode_str( unicode_char, utf8s );
- str_strcatc( name, utf8s );
- }
- }
- return 1;
-}
-
-static unsigned char
-token_has_no_upper( slist *tokens, int n )
-{
- unsigned short m;
- str *s;
- s = slist_str( tokens, n );
- m = unicode_utf8_classify_str( s );
- if ( m & UNICODE_UPPER ) return 0;
- else return 1;
-}
-
-static unsigned char
-token_has_upper( slist *tokens, int n )
-{
- if ( token_has_no_upper( tokens, n ) ) return 0;
- else return 1;
-}
-
-static int
-name_multielement_nocomma( intlist *given, intlist *family, slist *tokens, int begin, int end, int suffixpos )
-{
- int family_start, family_end;
- int i, n;
-
- /* ...family name(s) */
- family_start = family_end = end - 1;
- if ( family_start == suffixpos ) family_start = family_end = end - 2;
-
- /* ...if family name is capitalized, then look for first non-capitalized
- * ...token and combine range to family name, e.g. single quoted parts of
- * ..."Ludwig 'von Beethoven'"
- * ..."Johannes Diderik 'van der Waals'"
- * ..."Charles Louis Xavier Joseph 'de la Valla Poussin' */
- if ( token_has_upper( tokens, family_start ) ) {
- i = family_start - 1;
- n = -1;
- while ( i >= begin && ( n==-1 || token_has_no_upper( tokens, i ) ) ) {
- if ( token_has_no_upper( tokens, i ) ) n = i;
- i--;
- }
- if ( n != -1 ) family_start = n;
- }
- for ( i=family_start; i<family_end+1; i++ )
- intlist_add( family, i );
-
- /* ...given names */
- for ( i=begin; i<end-1; i++ ) {
- if ( i>=family_start && i<=family_end ) continue;
- if ( i==suffixpos ) continue;
- intlist_add( given, i );
- }
-
- return 1;
-}
-
-static int
-name_multielement_comma( intlist *given, intlist *family, slist *tokens, int begin, int end, int comma, int suffixpos )
-{
- str *s;
- int i;
-
- /* ...family names */
- for ( i=begin; i<comma; ++i ) {
- if ( i==suffixpos ) continue;
- intlist_add( family, i );
- }
- s = slist_str( tokens, comma );
- str_trimend( s, 1 ); /* remove comma */
- intlist_add( family, comma );
-
- /* ...given names */
- for ( i=comma+1; i<end; ++i ) {
- if ( i==suffixpos ) continue;
- intlist_add( given, i );
- }
-
- return 1;
-}
-
-static int
-name_mutlielement_build( str *name, intlist *given, intlist *family, slist *tokens )
-{
- unsigned short case_given = 0, case_family = 0, should_split = 0;
- str *s;
- int i, m;
-
- /* ...copy and analyze family name */
- for ( i=0; i<family->n; ++i ) {
- m = intlist_get( family, i );
- s = slist_str( tokens, m );
- if ( i ) str_addchar( name, ' ' );
- str_strcat( name, s );
- case_family |= unicode_utf8_classify_str( s );
- }
-
- /* ...check given name case */
- for ( i=0; i<given->n; ++i ) {
- m = intlist_get( given, i );
- s = slist_str( tokens, m );
- case_given |= unicode_utf8_classify_str( s );
- }
-
- if ( ( ( case_family & UNICODE_MIXEDCASE ) == UNICODE_MIXEDCASE ) &&
- ( ( case_given & UNICODE_MIXEDCASE ) == UNICODE_UPPER ) ) {
- should_split = 1;
- }
-
- for ( i=0; i<given->n; ++i ) {
- m = intlist_get( given, i );
- s = slist_str( tokens, m );
- if ( !should_split ) {
- str_addchar( name, '|' );
- str_strcat( name, s );
- } else add_given_split( name, s );
- }
- return 1;
-}
-
-static int
-name_construct_multi( str *outname, slist *tokens, int begin, int end )
-{
- int i, suffix, suffixpos=-1, comma=-1;
- intlist given, family;
- str *s;
-
- intlist_init( &family );
- intlist_init( &given );
-
- str_empty( outname );
-
- suffix = has_suffix( tokens, begin, end, &suffixpos );
-
- for ( i=begin; i<end && comma==-1; i++ ) {
- if ( i==suffixpos ) continue;
- s = slist_str( tokens, i );
- if ( s->data[ s->len -1 ] == ',' ) {
- if ( suffix && i==suffixpos-1 && !(suffix&WITHCOMMA) )
- str_trimend( s, 1 );
- else
- comma = i;
- }
- }
-
- if ( comma != -1 )
- name_multielement_comma( &given, &family, tokens, begin, end, comma, suffixpos );
- else
- name_multielement_nocomma( &given, &family, tokens, begin, end, suffixpos );
-
- name_mutlielement_build( outname, &given, &family, tokens );
-
- if ( suffix ) {
- if ( suffix & JUNIOR ) str_strcatc( outname, "||Jr." );
- if ( suffix & SENIOR ) str_strcatc( outname, "||Sr." );
- if ( suffix & THIRD ) str_strcatc( outname, "||III" );
- if ( suffix & FOURTH ) str_strcatc( outname, "||IV" );
- }
-
- intlist_free( &given );
- intlist_free( &family );
-
- return 1;
-}
-
-int
-name_addmultielement( fields *info, const char *tag, slist *tokens, int begin, int end, int level )
-{
- int status, ok = 1;
- str name;
-
- str_init( &name );
-
- name_construct_multi( &name, tokens, begin, end );
- status = fields_add_can_dup( info, tag, name.data, level );
- if ( status!=FIELDS_OK ) ok = 0;
-
- str_free( &name );
-
- return ok;
-}
-
-
-/* name_addsingleelement()
- *
- * Treat names that are single tokens, e.g. {Random Corporation, Inc.} in bibtex
- * as a name that should not be mangled (e.g. AUTHOR:ASIS or AUTHOR:CORP, if corp
- * is set).
- */
-int
-name_addsingleelement( fields *info, const char *tag, const char *name, int level, int corp )
-{
- int status, ok = 1;
- str outtag;
-
- str_init( &outtag );
-
- str_strcpyc( &outtag, tag );
- if ( !corp ) str_strcatc( &outtag, ":ASIS" );
- else str_strcatc( &outtag, ":CORP" );
-
- status = fields_add_can_dup( info, outtag.data, name, level );
- if ( status!=FIELDS_OK ) ok = 0;
-
- str_free( &outtag );
- return ok;
-}
-
-/*
- * Takes a single name in a string and parses it.
- * Skipped by bibtex/biblatex that come pre-parsed.
- *
- * Returns 0 on error.
- * Returns 1 on ok.
- * Returns 2 on ok and name in asis list
- * Returns 3 on ok and name in corps list
- */
-int
-name_parse( str *outname, str *inname, slist *asis, slist *corps )
-{
- int status, ret = 1;
- slist tokens;
-
- str_empty( outname );
- if ( !inname || !inname->len ) return ret;
-
- slist_init( &tokens );
-
- if ( asis && slist_find( asis, inname ) !=-1 ) {
- str_strcpy( outname, inname );
- ret = 2;
- goto out;
- } else if ( corps && slist_find( corps, inname ) != -1 ) {
- str_strcpy( outname, inname );
- ret = 3;
- goto out;
- }
-
- str_findreplace( inname, ",", ", " );
- status = slist_tokenize( &tokens, inname, " ", 1 );
- if ( status!=SLIST_OK ) {
- str_strcpy( outname, inname );
- ret = 2;
- goto out;
- }
-
- if ( tokens.n==1 ) {
- str_strcpy( outname, inname );
- ret = 2;
- } else {
- name_construct_multi( outname, &tokens, 0, tokens.n );
- ret = 1;
- }
-
-out:
-
- slist_free( &tokens );
-
- return ret;
-}
-
-static const char *
-name_copy( str *name, const char *p )
-{
- const char *start, *end, *q;
-
- str_empty( name );
-
- start = p = skip_ws( p );
-
- /* strip tailing whitespace and commas */
- while ( *p && *p!='|' ) p++;
-
- end = p;
- while ( is_ws( *end ) || *end==',' || *end=='|' || *end=='\0' )
- end--;
- if ( *p=='|' ) p++;
-
- for ( q=start; q<=end; q++ )
- str_addchar( name, *q );
-
- return p;
-}
-
-/*
- * name_add( info, newtag, data, level )
- *
- * take name(s) in data, multiple names should be separated by
- * '|' characters and divide into individual name, e.g.
- * "H. F. Author|W. G. Author|Q. X. Author"
- *
- * for each name, compare to names in the "as is" or "corporation"
- * lists...these are not personal names and should be added to the
- * bibliography fields directly and should not be mangled
- *
- * for each personal name, send to appropriate algorithm depending
- * on if the author name is in the format "H. F. Author" or
- * "Author, H. F."
- */
-int
-name_add( fields *info, const char *tag, const char *q, int level, slist *asis, slist *corps )
-{
- int ok, status, nametype, ret = 1;
- str inname, outname;
- slist tokens;
-
- if ( !q ) return 0;
-
- slist_init( &tokens );
- strs_init( &inname, &outname, NULL );
-
- while ( *q ) {
-
- q = name_copy( &inname, q );
-
- nametype = name_parse( &outname, &inname, asis, corps );
- if ( !nametype ) { ret = 0; goto out; }
-
- if ( nametype==1 ) {
- status = fields_add_can_dup( info, tag, outname.data, level );
- ok = ( status==FIELDS_OK ) ? 1 : 0;
- }
- else if ( nametype==2 )
- ok = name_addsingleelement( info, tag, outname.data, level, 0 );
- else
- ok = name_addsingleelement( info, tag, outname.data, level, 1 );
-
- if ( !ok ) { ret = 0; goto out; }
-
- }
-
-out:
- strs_free( &inname, &outname, NULL );
- slist_free( &tokens );
-
- return ret;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/name.h b/support/texlab/crates/bibutils_sys/src/name.h
deleted file mode 100644
index cd501fcbfd..0000000000
--- a/support/texlab/crates/bibutils_sys/src/name.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * name.h
- *
- * mangle names w/ and w/o commas
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef NAME_H
-#define NAME_H
-
-#include "str.h"
-#include "slist.h"
-#include "fields.h"
-
-int name_add( fields *info, const char *tag, const char *q, int level, slist *asis, slist *corps );
-void name_build_withcomma( str *s, const char *p );
-int name_parse( str *outname, str *inname, slist *asis, slist *corps );
-int name_addsingleelement( fields *info, const char *tag, const char *name, int level, int corp );
-int name_addmultielement( fields *info, const char *tag, slist *tokens, int begin, int end, int level );
-int name_findetal( slist *tokens );
-
-#endif
-
diff --git a/support/texlab/crates/bibutils_sys/src/nbibin.c b/support/texlab/crates/bibutils_sys/src/nbibin.c
deleted file mode 100644
index 9df56f6c7f..0000000000
--- a/support/texlab/crates/bibutils_sys/src/nbibin.c
+++ /dev/null
@@ -1,536 +0,0 @@
-/*
- * nbibin.c
- *
- * Copyright (c) Chris Putnam 2016-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include "is_ws.h"
-#include "str.h"
-#include "str_conv.h"
-#include "fields.h"
-#include "name.h"
-#include "title.h"
-#include "url.h"
-#include "serialno.h"
-#include "reftypes.h"
-#include "bibformats.h"
-#include "generic.h"
-
-extern variants nbib_all[];
-extern int nbib_nall;
-
-/*****************************************************
- PUBLIC: void nbib_initparams()
-*****************************************************/
-
-static int nbib_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset );
-static int nbib_processf( fields *nbib, const char *p, const char *filename, long nref, param *pm );
-static int nbib_typef( fields *nbib, const char *filename, int nref, param *p );
-static int nbib_convertf( fields *nbib, fields *info, int reftype, param *p );
-
-int
-nbibin_initparams( param *pm, const char *progname )
-{
- pm->readformat = BIBL_NBIBIN;
- pm->charsetin = BIBL_CHARSET_DEFAULT;
- pm->charsetin_src = BIBL_SRC_DEFAULT;
- pm->latexin = 0;
- pm->xmlin = 0;
- pm->utf8in = 0;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->output_raw = 0;
-
- pm->readf = nbib_readf;
- pm->processf = nbib_processf;
- pm->cleanf = NULL;
- pm->typef = nbib_typef;
- pm->convertf = nbib_convertf;
- pm->all = nbib_all;
- pm->nall = nbib_nall;
-
- slist_init( &(pm->asis) );
- slist_init( &(pm->corps) );
-
- if ( !progname ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int nbib_readf()
-*****************************************************/
-
-/* RIS definition of a tag is strict:
- character 1 = uppercase alphabetic character
- character 2 = uppercase alphabetic character
- character 3 = character or space (ansi 32)
- character 4 = character or space (ansi 32)
- character 5 = dash (ansi 45)
- character 6 = space (ansi 32)
-*/
-static inline int
-is_upperchar( const char c )
-{
- if ( c>='A' && c<='Z' ) return 1;
- else return 0;
-}
-
-static inline int
-is_upperchar_space( const char c )
-{
- if ( c==' ' ) return 1;
- if ( c>='A' && c<='Z' ) return 1;
- else return 0;
-}
-
-static int
-nbib_istag( const char *buf )
-{
- if ( !is_upperchar( buf[0] ) ) return 0;
- if ( !is_upperchar( buf[1] ) ) return 0;
- if ( !is_upperchar_space( buf[2] ) ) return 0;
- if ( !is_upperchar_space( buf[3] ) ) return 0;
- if (buf[4]!='-') return 0;
- if (buf[5]!=' ') return 0;
- return 1;
-}
-
-static int
-readmore( FILE *fp, char *buf, int bufsize, int *bufpos, str *line )
-{
- if ( line->len ) return 1;
- else return str_fget( fp, buf, bufsize, bufpos, line );
-}
-
-static int
-skip_utf8_bom( str *line, int *fcharset )
-{
- unsigned char *up;
-
- if ( line->len < 3 ) return 0;
-
- up = ( unsigned char *) str_cstr( line );
- if ( up[0]==0xEF && up[1]==0xBB && up[2]==0xBF ) {
- *fcharset = CHARSET_UNICODE;
- return 3;
- }
-
- return 0;
-}
-
-static int
-nbib_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset )
-{
- int n, haveref = 0, inref = 0, readtoofar = 0;
- char *p;
-
- *fcharset = CHARSET_UNKNOWN;
-
- while ( !haveref && readmore( fp, buf, bufsize, bufpos, line ) ) {
-
- /* ...references are terminated by an empty line */
- if ( str_is_empty( line ) ) {
- if ( reference->len ) haveref = 1;
- continue;
- }
-
- /* ...recognize and skip over UTF8 BOM */
- n = skip_utf8_bom( line, fcharset );
- p = &( line->data[n] );
-
- /* Each reference starts with 'PMID- ' && ends with blank line */
- if ( strncmp(p,"PMID- ",6)==0 ) {
- if ( !inref ) {
- inref = 1;
- } else {
- /* we've read too far.... */
- readtoofar = 1;
- inref = 0;
- }
- }
- if ( nbib_istag( p ) ) {
- if ( !inref ) {
- fprintf(stderr,"Warning. Tagged line not "
- "in properly started reference.\n");
- fprintf(stderr,"Ignored: '%s'\n", p );
- } else if ( !strncmp(p,"ER -",5) ) {
- inref = 0;
- } else {
- str_addchar( reference, '\n' );
- str_strcatc( reference, p );
- }
- }
- /* not a tag, but we'll append to last values ...*/
- else if ( inref && strlen( p ) >= 6 ) {
- str_strcatc( reference, p+5 );
- }
- if ( !readtoofar ) str_empty( line );
- }
- if ( inref ) haveref = 1;
- return haveref;
-}
-
-/*****************************************************
- PUBLIC: int nbib_processf()
-*****************************************************/
-
-static const char*
-process_line2( str *tag, str *value, const char *p )
-{
- while ( *p==' ' || *p=='\t' ) p++;
- while ( *p && *p!='\r' && *p!='\n' )
- str_addchar( value, *p++ );
- while ( *p=='\r' || *p=='\n' ) p++;
- return p;
-}
-
-static const char*
-process_line( str *tag, str *value, const char *p )
-{
- int i;
-
- i = 0;
- while ( i<6 && *p ) {
- if ( *p!=' ' && *p!='-' ) str_addchar( tag, *p );
- p++;
- i++;
- }
- while ( *p==' ' || *p=='\t' ) p++;
- while ( *p && *p!='\r' && *p!='\n' )
- str_addchar( value, *p++ );
- str_trimendingws( value );
- while ( *p=='\n' || *p=='\r' ) p++;
- return p;
-}
-
-static int
-nbib_processf( fields *nbib, const char *p, const char *filename, long nref, param *pm )
-{
- str tag, value;
- int status, n;
-
- strs_init( &tag, &value, NULL );
-
- while ( *p ) {
- if ( nbib_istag( p ) )
- p = process_line( &tag, &value, p );
- /* no anonymous fields allowed */
- if ( str_has_value( &tag ) ) {
- status = fields_add( nbib, str_cstr( &tag ), str_cstr( &value ), 0 );
- if ( status!=FIELDS_OK ) return 0;
- } else {
- p = process_line2( &tag, &value, p );
- n = fields_num( nbib );
- if ( value.len && n>0 ) {
- str *od;
- od = fields_value( nbib, n-1, FIELDS_STRP );
- str_addchar( od, ' ' );
- str_strcat( od, &value );
- }
- }
- strs_empty( &tag, &value, NULL );
- }
-
- strs_free( &tag, &value, NULL );
- return 1;
-}
-
-/*****************************************************
- PUBLIC: int nbib_typef()
-*****************************************************/
-
-/*
- * PT - Case Reports
- * PT - Journal Article
- * PT - Research Support, N.I.H., Extramural
- * PT - Review
- */
-static int
-nbib_typef( fields *nbib, const char *filename, int nref, param *p )
-{
- int reftype = 0, nrefname, is_default;
- char *typename, *refname = "";
- vplist_index i;
- vplist a;
-
- nrefname = fields_find( nbib, "PMID", LEVEL_MAIN );
- if ( nrefname!=FIELDS_NOTFOUND ) refname = fields_value( nbib, nrefname, FIELDS_CHRP_NOUSE );
-
- vplist_init( &a );
-
- fields_findv_each( nbib, LEVEL_MAIN, FIELDS_CHRP_NOUSE, &a, "PT" );
- is_default = 1;
- for ( i=0; i<a.n; ++i ) {
- typename = vplist_get( &a, i );
- reftype = get_reftype( typename, nref, p->progname, p->all, p->nall, refname, &is_default, REFTYPE_SILENT );
- if ( !is_default ) break;
- }
-
- if ( a.n==0 )
- reftype = get_reftype( "", nref, p->progname, p->all, p->nall, refname, &is_default, REFTYPE_CHATTY );
- else if ( is_default ) {
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Did not recognize type of refnum %d (%s).\n"
- "\tDefaulting to %s.\n", nref, refname, p->all[0].type );
- }
-
- vplist_free( &a );
-
- return reftype;
-}
-
-/*****************************************************
- PUBLIC: int nbib_convertf()
-*****************************************************/
-
-/* PB - 2016 May 7 */
-
-static int
-nbibin_date( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int fstatus, status = BIBL_OK;
- str s;
- char *p;
-
- p = str_cstr( invalue );
- if ( !p ) return status;
-
- str_init( &s );
-
- /* ...handle year */
- while ( *p && !is_ws( *p ) ) {
- str_addchar( &s, *p );
- p++;
- }
-
- if ( str_memerr( &s ) ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
-
- if ( str_has_value( &s ) ) {
- fstatus = fields_add( bibout, "DATE:YEAR", str_cstr( &s ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- }
-
- /* ...handle month */
- str_empty( &s );
- while ( is_ws( *p ) ) p++;
- while ( *p && !is_ws( *p ) ) {
- str_addchar( &s, *p );
- p++;
- }
-
- if ( str_memerr( &s ) ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
-
- if ( str_has_value( &s ) ) {
- fstatus = fields_add( bibout, "DATE:MONTH", str_cstr( &s ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- }
-
- /* ...handle day */
- str_empty( &s );
- while ( is_ws( *p ) ) p++;
- while ( *p && !is_ws( *p ) ) {
- str_addchar( &s, *p );
- p++;
- }
-
- if ( str_memerr( &s ) ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
-
- if ( str_has_value( &s ) ) {
- fstatus = fields_add( bibout, "DATE:DAY", str_cstr( &s ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- }
-
-out:
- str_free( &s );
-
- return status;
-}
-
-/* the LID and AID fields that can be doi's or pii's */
-static int
-nbibin_doi( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int fstatus, sstatus, status = BIBL_OK;
- char *id, *type, *usetag="";
- slist tokens;
-
- slist_init( &tokens );
-
- sstatus = slist_tokenize( &tokens, invalue, " ", 1 );
- if ( sstatus!=SLIST_OK ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
-
- if ( tokens.n == 2 ) {
- id = slist_cstr( &tokens, 0 );
- type = slist_cstr( &tokens, 1 );
- if ( !strcmp( type, "[doi]" ) ) usetag = "DOI";
- else if ( !strcmp( type, "[pii]" ) ) usetag = "PII";
- if ( strlen( outtag ) > 0 ) {
- fstatus = fields_add( bibout, usetag, id, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- }
- }
-out:
- slist_free( &tokens );
- return status;
-}
-
-static int
-nbibin_pages( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int fstatus, status = BIBL_OK;
- str sp, tmp, ep;
- char *p;
- int i;
-
- p = str_cstr( invalue );
- if ( !p ) return BIBL_OK;
-
- strs_init( &sp, &tmp, &ep, NULL );
-
- while ( *p && *p!='-' ) {
- str_addchar( &sp, *p );
- p++;
- }
-
- if ( str_memerr( &sp ) ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
-
- while ( *p=='-' ) p++;
-
- while ( *p ) {
- str_addchar( &tmp, *p );
- p++;
- }
-
- if ( sp.len ) {
- fstatus = fields_add( bibout, "PAGES:START", str_cstr( &sp ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- }
-
- if ( tmp.len ) {
- for ( i=0; i<sp.len - tmp.len; ++i )
- str_addchar( &ep, sp.data[i] );
- str_strcat( &ep, &tmp );
-
- fstatus = fields_add( bibout, "PAGES:STOP", str_cstr( &ep ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
- }
-out:
- strs_free( &sp, &tmp, &ep, NULL );
- return status;
-}
-
-static void
-nbib_report_notag( param *p, char *tag )
-{
- if ( p->verbose && strcmp( tag, "TY" ) ) {
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Did not identify NBIB tag '%s'\n", tag );
- }
-}
-
-static int
-nbib_convertf( fields *bibin, fields *bibout, int reftype, param *p )
-{
- static int (*convertfns[NUM_REFTYPES])(fields *, int i, str *, str *, int, param *, char *, fields *) = {
- // Patch: Fix compilation on MSVC target
- [ 0 ] = generic_null,
- [ 1 ] = generic_null,
- [ 2 ] = generic_null,
- [ 3 ] = generic_null,
- [ 4 ] = generic_null,
- [ 5 ] = generic_null,
- [ 6 ] = generic_null,
- [ 7 ] = generic_null,
- [ 8 ] = generic_null,
- [ 9 ] = generic_null,
- [ 10 ] = generic_null,
- [ 11 ] = generic_null,
- [ 12 ] = generic_null,
- [ 13 ] = generic_null,
- [ 14 ] = generic_null,
- [ 15 ] = generic_null,
- [ 16 ] = generic_null,
- [ 17 ] = generic_null,
- [ 18 ] = generic_null,
- [ 19 ] = generic_null,
- [ 20 ] = generic_null,
- [ 21 ] = generic_null,
- [ 22 ] = generic_null,
- [ 23 ] = generic_null,
- [ 24 ] = generic_null,
- [ 25 ] = generic_null,
- [ SIMPLE ] = generic_simple,
- [ TITLE ] = generic_title,
- [ PERSON ] = generic_person,
- [ SKIP ] = generic_skip,
- [ DATE ] = nbibin_date,
- [ PAGES ] = nbibin_pages,
- [ DOI ] = nbibin_doi,
- };
- int process, level, i, nfields, status = BIBL_OK;
- str *intag, *invalue;
- char *outtag;
-
- nfields = fields_num( bibin );
-
- for ( i=0; i<nfields; ++i ) {
- intag = fields_tag( bibin, i, FIELDS_STRP );
- if ( !translate_oldtag( str_cstr( intag ), reftype, p->all, p->nall, &process, &level, &outtag ) ) {
- nbib_report_notag( p, str_cstr( intag ) );
- continue;
- }
- invalue = fields_value( bibin, i, FIELDS_STRP );
-
- status = convertfns[ process ] ( bibin, i, intag, invalue, level, p, outtag, bibout );
- if ( status!=BIBL_OK ) return status;
- }
-
- if ( status==BIBL_OK && p->verbose ) fields_report( bibout, stderr );
-
- return status;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/nbibout.c b/support/texlab/crates/bibutils_sys/src/nbibout.c
deleted file mode 100644
index 04d70a0f35..0000000000
--- a/support/texlab/crates/bibutils_sys/src/nbibout.c
+++ /dev/null
@@ -1,556 +0,0 @@
-/*
- * nbibout.c
- *
- * Copyright (c) Chris Putnam 2018-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include "utf8.h"
-#include "str.h"
-#include "is_ws.h"
-#include "fields.h"
-#include "generic.h"
-#include "iso639_3.h"
-#include "title.h"
-#include "bibutils.h"
-#include "bibformats.h"
-#include "msvc_fix.h"
-
-/*****************************************************
- PUBLIC: int nbibout_initparams()
-*****************************************************/
-
-static int nbibout_write( fields *info, FILE *fp, param *p, unsigned long refnum );
-
-int
-nbibout_initparams( param *pm, const char *progname )
-{
- pm->writeformat = BIBL_NBIBOUT;
- pm->format_opts = 0;
- pm->charsetout = BIBL_CHARSET_DEFAULT;
- pm->charsetout_src = BIBL_SRC_DEFAULT;
- pm->latexout = 0;
- pm->utf8out = BIBL_CHARSET_UTF8_DEFAULT;
- pm->utf8bom = BIBL_CHARSET_BOM_DEFAULT;
- pm->xmlout = BIBL_XMLOUT_FALSE;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->singlerefperfile = 0;
-
- if ( pm->charsetout == BIBL_CHARSET_UNICODE ) {
- pm->utf8out = pm->utf8bom = 1;
- }
-
- pm->headerf = generic_writeheader;
- pm->footerf = NULL;
- pm->writef = nbibout_write;
-
- if ( !pm->progname ) {
- if ( !progname ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int nbibout_write()
-*****************************************************/
-
-enum {
- TYPE_UNKNOWN = 0,
- TYPE_ARTICLE = 1,
- TYPE_INBOOK = 2,
- TYPE_BOOK = 3,
-};
-
-static void
-append_type( fields *in, fields *out, int *status )
-{
- int fstatus;
- char *s;
- int type = TYPE_UNKNOWN, i, n, level;
- char *tag, *value;
-
- n = fields_num( in );
- for ( i=0; i<n; ++i ) {
- tag = fields_tag( in, i, FIELDS_CHRP );
- if ( strcasecmp( tag, "GENRE:MARC" ) &&
- strcasecmp( tag, "GENRE:BIBUTILS" ) &&
- strcasecmp( tag, "GENRE:UNKNOWN" ) ) continue;
- value = fields_value( in, i, FIELDS_CHRP );
- level = fields_level( in, i );
- if ( !strcasecmp( value, "periodical" ) ||
- !strcasecmp( value, "academic journal" ) ||
- !strcasecmp( value, "journal article" ) ) {
- type = TYPE_ARTICLE;
- } else if ( !strcasecmp( value, "book" ) ) {
- if ( level==0 ) type=TYPE_BOOK;
- else type=TYPE_INBOOK;
- } else if ( !strcasecmp( value, "book chapter" ) ) {
- type = TYPE_INBOOK;
- }
- }
-
- if ( type==TYPE_ARTICLE ) s = "Journal Article";
- else if ( type==TYPE_INBOOK ) s = "Chapter";
- else if ( type==TYPE_BOOK ) s = "Book";
- else s = "Miscellaneous";
-
- fstatus = fields_add( out, "PT", s, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
-}
-
-static void
-append_titlecore( fields *in, char *nbibtag, int level, char *maintag, char *subtag, fields *out, int *status )
-{
- str *mainttl = fields_findv( in, level, FIELDS_STRP, maintag );
- str *subttl = fields_findv( in, level, FIELDS_STRP, subtag );
- str fullttl;
- int fstatus;
-
- str_init( &fullttl );
- title_combine( &fullttl, mainttl, subttl );
-
- if ( str_memerr( &fullttl ) ) {
- *status = BIBL_ERR_MEMERR;
- goto out;
- }
-
- if ( str_has_value( &fullttl ) ) {
- fstatus = fields_add( out, nbibtag, str_cstr( &fullttl ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-out:
- str_free( &fullttl );
-}
-
-static void
-append_title( fields *in, char *nbibtag, int level, fields *out, int *status )
-{
- append_titlecore( in, nbibtag, level, "TITLE", "SUBTITLE", out, status );
-}
-
-static void
-append_abbrtitle( fields *in, char *nbibtag, int level, fields *out, int *status )
-{
- append_titlecore( in, nbibtag, level, "SHORTTITLE", "SHORTSUBTITLE", out, status );
-}
-
-static void
-process_person( str *person, char *name, int full )
-{
- str family, given, suffix;
- char *p = name;
-
- str_empty( person );
-
- strs_init( &family, &given, &suffix, NULL );
-
- while ( *p && *p!='|' )
- str_addchar( &family, *p++ );
-
- if ( full ) {
- while ( *p=='|' && *(p+1)!='|' ) {
- p++;
- if ( *p!='|' && str_has_value( &given ) ) str_addchar( &given, ' ' );
- while ( *p && *p!='|' ) str_addchar( &given, *p++ );
- }
- }
- else {
- while ( *p=='|' && *(p+1)!='|' ) {
- p++;
- if ( *p!='|' ) str_addchar( &given, *p++ );
- while ( *p && *p!='|' ) p++;
- }
- }
-
- if ( *p=='|' && *(p+1)=='|' ) {
- p += 2;
- while ( *p && *p!='|' ) str_addchar( &suffix, *p++ );
- }
-
- if ( str_has_value( &family ) ) str_strcat( person, &family );
- if ( str_has_value( &suffix ) ) {
- if ( str_has_value( &family ) ) str_strcatc( person, " " );
- str_strcat( person, &suffix );
- }
- if ( str_has_value( &given ) ) {
- if ( str_has_value( person ) ) {
- if ( full ) str_strcatc( person, ", " );
- else str_strcatc( person, " " );
- }
- str_strcat( person, &given );
- }
-
- strs_free( &family, &given, &suffix, NULL );
-}
-
-static void
-append_people( fields *f, char *tag, char *nbibtag_full, char *nbibtag_abbr, int level, fields *out, int *status )
-{
- vplist_index i;
- vplist people;
- str person;
- int fstatus;
-
- str_init( &person );
- vplist_init( &people );
-
- fields_findv_each( f, level, FIELDS_CHRP, &people, tag );
- for ( i=0; i<people.n; ++i ) {
-
- process_person( &person, (char *)vplist_get( &people, i ), 1 );
- if ( str_memerr( &person ) ) { *status = BIBL_ERR_MEMERR; goto out; }
- fstatus = fields_add_can_dup( out, nbibtag_full, str_cstr( &person ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) { *status = BIBL_ERR_MEMERR; goto out; }
-
- process_person( &person, (char *)vplist_get( &people, i ), 0 );
- if ( str_memerr( &person ) ) { *status = BIBL_ERR_MEMERR; goto out; }
- fstatus = fields_add_can_dup( out, nbibtag_abbr, str_cstr( &person ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) { *status = BIBL_ERR_MEMERR; goto out; }
-
- }
-
-out:
- vplist_free( &people );
- str_free( &person );
-}
-
-static void
-append_easy( fields *in, char *tag, char *nbibtag, int level, fields *out, int *status )
-{
- char *value;
- int fstatus;
-
- value = fields_findv( in, level, FIELDS_CHRP, tag );
- if ( value ) {
- fstatus = fields_add( out, nbibtag, value, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-}
-
-static void
-append_easyall( fields *in, char *tag, char *nbibtag, int level, fields *out, int *status )
-{
- vplist_index i;
- int fstatus;
- vplist a;
-
- vplist_init( &a );
- fields_findv_each( in, level, FIELDS_CHRP, &a, tag );
- for ( i=0; i<a.n; ++i ) {
- fstatus = fields_add( out, nbibtag, (char *) vplist_get( &a, i ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- vplist_free( &a );
-}
-
-static void
-append_pages( fields *in, char *nbibtag, int level, fields *out, int *status )
-{
- str *start, *stop, *articlenumber;
- int fstatus;
- str pages;
- char *p, *q;
-
- str_init( &pages );
-
- start = fields_findv_firstof( in, level, FIELDS_STRP, "PAGES:START", NULL );
- if ( start ) {
- str_strcpy( &pages, start );
- }
-
- stop = fields_findv_firstof( in, level, FIELDS_STRP, "PAGES:STOP", NULL );
- if ( stop ) {
- /* nbib from pubmed doesn't do "PG - 101-109", but rather "PG - 101-9" */
- if ( start ) {
- p = str_cstr( start );
- q = str_cstr( stop );
- while ( *p && *p == *q ) {
- p++;
- q++;
- }
- if ( *q ) {
- str_addchar( &pages, '-' );
- str_strcatc( &pages, q );
- }
- }
- else {
- str_strcat( &pages, stop );
- }
- }
-
- articlenumber = fields_findv_firstof( in, level, FIELDS_STRP, "ARTICLENUMBER", NULL );
- if ( str_is_empty( &pages ) && articlenumber ) {
- str_strcpy( &pages, articlenumber );
- }
-
- if ( str_has_value( &pages ) ) {
- fstatus = fields_add( out, nbibtag, str_cstr( &pages ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-
- str_free( &pages );
-}
-
-/* location identifier */
-static void
-append_lid( fields *in, char *nbibtag, int level, fields *out, int *status )
-{
- str *doi, *pii, *isi;
- int fstatus;
- str lid;
-
- str_init( &lid );
-
- doi = fields_findv( in, level, FIELDS_STRP, "DOI" );
- if ( doi ) {
- str_strcpy( &lid, doi );
- str_strcatc( &lid, " [doi]" );
- fstatus = fields_add( out, nbibtag, str_cstr( &lid ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-
- pii = fields_findv( in, level, FIELDS_STRP, "PII" );
- if ( pii ) {
- str_strcpy( &lid, pii );
- str_strcatc( &lid, " [pii]" );
- fstatus = fields_add( out, nbibtag, str_cstr( &lid ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-
- isi = fields_findv( in, level, FIELDS_STRP, "ISIREFNUM" );
- if ( isi ) {
- str_strcpy( &lid, isi );
- str_strcatc( &lid, " [isi]" );
- fstatus = fields_add( out, nbibtag, str_cstr( &lid ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-
-
-
- str_free( &lid );
-}
-
-static void
-append_date( fields *in, char *nbibtag, int level, fields *out, int *status )
-{
- str *day, *month, *year;
- int fstatus;
- str date;
-
- str_init( &date );
-
- year = fields_findv_firstof( in, level, FIELDS_STRP, "PARTDATE:YEAR", "DATE:YEAR", NULL );
- if ( year ) {
- str_strcpy( &date, year );
- }
-
- month = fields_findv_firstof( in, level, FIELDS_STRP, "PARTDATE:MONTH", "DATE:MONTH", NULL );
- if ( month ) {
- if ( str_has_value( &date ) ) str_addchar( &date, ' ' );
- str_strcat( &date, month );
- }
-
- day = fields_findv_firstof( in, level, FIELDS_STRP, "PARTDATE:DAY", "DATE:DAY", NULL );
- if ( day ) {
- if ( str_has_value( &date ) ) str_addchar( &date, ' ' );
- str_strcat( &date, day );
- }
-
- if ( str_has_value( &date ) ) {
- fstatus = fields_add( out, nbibtag, str_cstr( &date ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-
- str_free( &date );
-}
-
-static void
-append_lang( fields *in, char *nbibtag, int level, fields *out, int *status )
-{
- int fstatus;
- str *lang;
- char *code;
-
- lang = fields_findv( in, level, FIELDS_STRP, "LANGUAGE" );
- if ( lang ) {
- code = iso639_3_from_name( str_cstr( lang ) );
- if ( !code ) code = str_cstr( lang );
- fstatus = fields_add( out, nbibtag, code, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-}
-
-static void
-append_keywords( fields *in, char *nbibtag, int level, fields *out, int *status )
-{
- vplist keywords;
- int fstatus;
- char *kw;
- int i;
-
- vplist_init( &keywords );
-
- fields_findv_each( in, level, FIELDS_CHRP, &keywords, "KEYWORD" );
- for ( i=0; i<keywords.n; ++i ) {
- kw = vplist_get( &keywords, i );
- fstatus = fields_add( out, nbibtag, kw, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-
-}
-
-static int
-append_data( fields *in, fields *out )
-{
- int status = BIBL_OK;
-
- append_easy ( in, "PMID", "PMID", LEVEL_ANY, out, &status );
- append_easyall( in, "ISSN", "IS", LEVEL_ANY, out, &status );
- append_easy ( in, "VOLUME", "VI", LEVEL_ANY, out, &status );
- append_easy ( in, "ISSUE", "IP", LEVEL_ANY, out, &status );
- append_easy ( in, "NUMBER", "IP", LEVEL_ANY, out, &status );
- append_date ( in, "DP", LEVEL_ANY, out, &status );
- append_title( in, "TI", LEVEL_MAIN, out, &status );
- append_pages( in, "PG", LEVEL_ANY, out, &status );
- append_lid ( in, "LID", LEVEL_MAIN, out, &status );
- append_easy ( in, "ABSTRACT", "AB", LEVEL_MAIN, out, &status );
- append_people ( in, "AUTHOR", "FAU", "AU", LEVEL_MAIN, out, &status );
- append_easyall( in, "AUTHOR:CORP", "FAU", LEVEL_MAIN, out, &status );
- append_easyall( in, "AUTHOR:ASIS", "FAU", LEVEL_MAIN, out, &status );
- append_lang ( in, "LA", LEVEL_ANY, out, &status );
- append_type ( in, out, &status );
- append_easy( in, "ADDRESS", "PL", LEVEL_MAIN, out, &status );
- append_abbrtitle( in, "TA", LEVEL_HOST, out, &status );
- append_title( in, "JT", LEVEL_HOST, out, &status );
- append_easy ( in, "PMC", "PMC", LEVEL_ANY, out, &status );
- append_keywords( in, "OT", LEVEL_ANY, out, &status );
- return status;
-}
-
-static void
-output_verbose( fields *f, const char *type, unsigned long refnum )
-{
- char *tag, *value;
- int i, n, level;
-
- fprintf( stderr, "REF #%lu %s---\n", refnum+1, type );
-
- n = fields_num( f );
- for ( i=0; i<n; ++i ) {
- tag = fields_tag( f, i, FIELDS_CHRP_NOUSE );
- value = fields_value( f, i, FIELDS_CHRP_NOUSE );
- level = fields_level( f, i );
- fprintf( stderr, "\t'%s'\t'%s'\t%d\n", tag, value, level );
- }
-
- fflush( stderr );
-}
-
-static void
-output_tag( FILE *fp, char *p )
-{
- int i = 0;
-
- while ( i < 4 && p && *p ) {
- fprintf( fp, "%c", *p );
- i++;
- p++;
- }
-
- for ( ; i<4; ++i )
- fprintf( fp, " " );
- fprintf( fp, "- " );
-}
-
-static void
-output_value( FILE *fp, str *value )
-{
- char *p, *q, *lastws;
- int n;
-
- if ( value->len < 82 ) {
- fprintf( fp, "%s", str_cstr( value ) );
- return;
- }
-
- p = str_cstr( value );
- while ( p && *p ) {
- n = 0;
- q = p;
- lastws = NULL;
- while ( n < 82 && *q ) {
- if ( is_ws( *q ) ) lastws = q;
- q++;
- n++;
- }
- if ( *q && lastws ) {
- while ( p!=lastws ) {
- fprintf( fp, "%c", *p );
- p++;
- }
- p++; /* skip ws separator */
- }
- else {
- while ( p!=q ) {
- fprintf( fp, "%c", *p );
- p++;
- }
- p = q;
- }
- if ( *p ) {
- fprintf( fp, "\n" );
- fprintf( fp, " " );
- }
- }
-}
-
-static void
-output_reference( FILE *fp, fields *out )
-{
- int i;
-
- for ( i=0; i<out->n; ++i ) {
-
- output_tag( fp, ( char * ) fields_tag( out, i, FIELDS_CHRP ) );
- output_value( fp, ( str * ) fields_value( out, i, FIELDS_STRP ) );
- fprintf( fp, "\n" );
- }
-
- fprintf( fp, "\n\n" );
- fflush( fp );
-}
-
-static int
-nbibout_write( fields *in, FILE *fp, param *p, unsigned long refnum )
-{
- int status;
- fields out;
-
- fields_init( &out );
-
- if ( p->format_opts & BIBL_FORMAT_VERBOSE )
- output_verbose( in, "IN", refnum );
-
- status = append_data( in, &out );
-
- if ( status==BIBL_OK ) output_reference( fp, &out );
-
- if ( p->format_opts & BIBL_FORMAT_VERBOSE )
- output_verbose( &out, "OUT", refnum );
-
- fields_free( &out );
-
- return status;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/nbibtypes.c b/support/texlab/crates/bibutils_sys/src/nbibtypes.c
deleted file mode 100644
index 27992cccec..0000000000
--- a/support/texlab/crates/bibutils_sys/src/nbibtypes.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * nbibtypes.c
- *
- * Copyright (c) Chris Putnam 2016-2019
- *
- * Program and source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <string.h>
-#include "is_ws.h"
-#include "fields.h"
-#include "reftypes.h"
-
-static lookups article[] = {
- { "PMID", "PMID", SIMPLE, LEVEL_MAIN },
- { "OWN", "", SKIP, LEVEL_MAIN },
- { "STAT", "", SKIP, LEVEL_MAIN },
- { "DA", "", SKIP, LEVEL_MAIN },
- { "DCOM", "", SKIP, LEVEL_MAIN },
- { "LR", "", SKIP, LEVEL_MAIN },
- { "IS", "", SKIP, LEVEL_MAIN },
- { "VI", "VOLUME", SIMPLE, LEVEL_MAIN },
- { "IP", "ISSUE", SIMPLE, LEVEL_MAIN },
- { "DP", "", DATE, LEVEL_MAIN }, /* date published? */
- { "TI", "TITLE", TITLE, LEVEL_MAIN },
- { "PG", "PAGES", PAGES, LEVEL_MAIN },
- { "LID", "DOI", DOI, LEVEL_MAIN }, /* linking ID? -- can be DOI/PII */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN },
- { "FAU", "AUTHOR", PERSON, LEVEL_MAIN },
- { "AU", "", SKIP, LEVEL_MAIN },
- { "AD", "ADDRESS:AUTHOR", SIMPLE, LEVEL_MAIN },
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN },
- { "GR", "", SKIP, LEVEL_MAIN },
- { "DEP", "", SKIP, LEVEL_MAIN }, /* a date */
- { "PL", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Publisher location */
- { "TA", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* Journal title abbreviation */
- { "JT", "TITLE", SIMPLE, LEVEL_HOST }, /* Journal title */
- { "JID", "", SKIP, LEVEL_HOST }, /* Journal ID? */
- { "SB", "", SKIP, LEVEL_MAIN },
- { "MH", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "OT", "KEYWORD", SIMPLE, LEVEL_MAIN },
- { "PMC", "PMC", SIMPLE, LEVEL_MAIN },
- { "OID", "", SKIP, LEVEL_MAIN },
- { "EDAT", "", SKIP, LEVEL_MAIN },
- { "MHDA", "", SKIP, LEVEL_MAIN },
- { "CRDT", "", SKIP, LEVEL_MAIN },
- { "PHST", "", SKIP, LEVEL_MAIN }, /* Publication history? */
- { "AID", "DOI", DOI, LEVEL_MAIN }, /* Article ID? -- can be DOI/PII */
- { "PST", "", SKIP, LEVEL_MAIN },
- { "SO", "", SKIP, LEVEL_MAIN },
- { " ", "INTERNAL_TYPE|ARTICLE", ALWAYS, LEVEL_MAIN },
- { " ", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:BIBUTILS|journal article", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|periodical", ALWAYS, LEVEL_HOST },
- { " ", "GENRE:BIBUTILS|academic journal", ALWAYS, LEVEL_HOST }
-};
-
-#define ORIG(a) ( &(a[0]) )
-#define SIZE(a) ( sizeof( a ) / sizeof( lookups ) )
-#define REFTYPE(a,b) { a, ORIG(b), SIZE(b) }
-
-variants nbib_all[] = {
- REFTYPE( "Journal article", article ),
- REFTYPE( "News", article ),
-};
-
-int nbib_nall = sizeof( nbib_all ) / sizeof( variants );
-
diff --git a/support/texlab/crates/bibutils_sys/src/notes.c b/support/texlab/crates/bibutils_sys/src/notes.c
deleted file mode 100644
index f18953f556..0000000000
--- a/support/texlab/crates/bibutils_sys/src/notes.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * notes.c
- *
- * Copyright (c) Chris Putnam 2016-2019
- *
- * Program and source code released under the GPL version 2
- *
- */
-#include <string.h>
-#include "url.h"
-#include "notes.h"
-#include "msvc_fix.h"
-
-/*
- * notes are mostly directly copies; however, lots of formats hide
- * URLs/DOIs in the notes fields. For example:
- *
- * For RIS, Oxford Journals hides DOI in the N1 field.
- * For Endnote, Wiley hides DOI in the %1 field.
- * etc.
- */
-
-typedef struct url_t {
- char *prefix;
- char *tag;
- int offset;
-} url_t;
-
-static void
-notes_added_url( fields *bibout, str *invalue, int level, int *ok )
-{
- url_t prefixes[] = {
- { "arXiv:", "ARXIV", 6 },
- { "http://arxiv.org/abs/", "ARXIV", 21 },
- { "jstor:", "JSTOR", 6 },
- { "http://www.jstor.org/stable/", "JSTOR", 28 },
- { "medline:", "MEDLINE", 8 },
- { "pubmed:", "PMID", 7 },
- { "http://www.ncbi.nlm.nih.gov/pubmed/", "PMID", 35 },
- { "http://www.ncbi.nlm.nih.gov/pmc/articles/", "PMC", 41 },
- { "http://dx.doi.org/", "DOI", 19 },
- { "isi:", "ISIREFNUM", 4 },
- };
- int nprefixes = sizeof( prefixes ) / sizeof( prefixes[0] );
-
- const char *p = str_cstr( invalue );
- char *tag = "URL";
- int fstatus;
- int i;
-
- /* bibtex/biblatex-specific */
- if ( !strncasecmp( p, "\\urllink", 8 ) ) p += 8;
- if ( !strncasecmp( p, "\\url", 4 ) ) p += 4;
-
- for ( i=0; i<nprefixes; ++i ) {
- if ( !strncasecmp( p, prefixes[i].prefix, prefixes[i].offset ) ) {
- tag = prefixes[i].tag;
- p = p + prefixes[i].offset;
- break;
- }
- }
-
- fstatus = fields_add( bibout, tag, p, level );
-
- if ( fstatus==FIELDS_OK ) *ok = 1;
- else *ok = 0;
-}
-
-static int
-notes_added_doi( fields *bibout, str *invalue, int level, int *ok )
-{
- int doi, fstatus;
-
- doi = is_doi( str_cstr( invalue ) );
-
- if ( doi != -1 ) {
- fstatus = fields_add( bibout, "DOI", &(invalue->data[doi]), level );
- if ( fstatus != FIELDS_OK ) *ok = 0;
- return 1;
- }
-
- else return 0;
-}
-
-int
-notes_add( fields *bibout, str *invalue, int level )
-{
- int fstatus, done = 0, ok = 1;
-
- if ( !is_embedded_link( str_cstr( invalue ) ) ) {
- fstatus = fields_add( bibout, "NOTES", str_cstr( invalue ), level );
- if ( fstatus != FIELDS_OK ) ok = 0;
- }
-
- else {
-
- done = notes_added_doi( bibout, invalue, level, &ok );
- if ( !done ) notes_added_url( bibout, invalue, level, &ok );
-
- }
-
- return ok;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/notes.h b/support/texlab/crates/bibutils_sys/src/notes.h
deleted file mode 100644
index 965b5798e4..0000000000
--- a/support/texlab/crates/bibutils_sys/src/notes.h
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * notes.h
- *
- * Copyright (c) Chris Putnam 2016-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef NOTES_H
-#define NOTES_H
-
-#include "bibutils.h"
-
-int notes_add( fields *bibout, str *invalue, int level );
-
-#endif
-
diff --git a/support/texlab/crates/bibutils_sys/src/pages.c b/support/texlab/crates/bibutils_sys/src/pages.c
deleted file mode 100644
index b972b1f25f..0000000000
--- a/support/texlab/crates/bibutils_sys/src/pages.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * pages.c
- *
- * Copyright (c) Chris Putnam 2016-2019
- *
- * Program and source code released under GPL verison 2
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "is_ws.h"
-#include "utf8.h"
-#include "pages.h"
-
-/* extract_range()
- *
- * Handle input strings like:
- *
- * "1-15"
- * " 1 - 15 "
- * " 1000--- 1500"
- * " 1 <<em-dash>> 10"
- * " 107 111"
- */
-static void
-extract_range( str *input, str *begin, str *end )
-{
- /* -30 is the first character of a UTF8 em-dash and en-dash */
- const char terminators[] = { ' ', '-', '\t', '\r', '\n', -30, '\0' };
- const char *p;
-
- str_empty( begin );
- str_empty( end );
-
- if ( input->len==0 ) return;
-
- p = skip_ws( str_cstr( input ) );
- while ( *p && !strchr( terminators, *p ) )
- str_addchar( begin, *p++ );
-
- p = skip_ws( p );
-
- while ( *p=='-' ) p++;
- while ( utf8_is_emdash( p ) ) p+=3;
- while ( utf8_is_endash( p ) ) p+=3;
-
- p = skip_ws( p );
-
- while ( *p && !strchr( terminators, *p ) )
- str_addchar( end, *p++ );
-}
-
-int
-pages_add( fields *bibout, char *outtag, str *invalue, int level )
-{
- int fstatus, status = 1;
- str start, stop;
-
- str_init( &start );
- str_init( &stop );
-
- extract_range( invalue, &start, &stop );
-
- if ( str_memerr( &start ) || str_memerr( &stop ) ) {
- status = 0;
- goto out;
- }
-
- if ( start.len>0 ) {
- fstatus = fields_add( bibout, "PAGES:START", str_cstr( &start ), level );
- if ( fstatus!=FIELDS_OK ) {
- status = 0;
- goto out;
- }
- }
-
- if ( stop.len>0 ) {
- fstatus = fields_add( bibout, "PAGES:STOP", str_cstr( &stop ), level );
- if ( fstatus!=FIELDS_OK ) status = 0;
- }
-
-out:
- str_free( &start );
- str_free( &stop );
- return status;
-}
-
diff --git a/support/texlab/crates/bibutils_sys/src/pages.h b/support/texlab/crates/bibutils_sys/src/pages.h
deleted file mode 100644
index c1bb78599d..0000000000
--- a/support/texlab/crates/bibutils_sys/src/pages.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * pages.h
- *
- * Copyright (c) Chris Putnam 2016-2019
- *
- * Program and source code released under the GPL version 2
- */
-#ifndef PAGES_H
-#define PAGES_H
-
-#include "bibl.h"
-
-int pages_add( fields *bibout, char *outtag, str *invalue, int level );
-
-#endif
-
diff --git a/support/texlab/crates/bibutils_sys/src/reftypes.c b/support/texlab/crates/bibutils_sys/src/reftypes.c
deleted file mode 100644
index 0826c252cd..0000000000
--- a/support/texlab/crates/bibutils_sys/src/reftypes.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * reftypes.c
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <string.h>
-#include "is_ws.h"
-#include "fields.h"
-#include "reftypes.h"
-#include "msvc_fix.h"
-
-int
-get_reftype( const char *p, long refnum, char *progname, variants *all, int nall, char *tag, int *is_default, int chattiness )
-{
- int i;
-
- p = skip_ws( p );
-
- *is_default = 0;
-
- for ( i=0; i<nall; ++i ) {
- if ( !strncasecmp( all[i].type, p, strlen(all[i].type) ) )
- return i;
- }
-
- *is_default = 1;
-
- if ( chattiness==REFTYPE_CHATTY ) {
- if ( progname ) fprintf( stderr, "%s: ", progname );
- fprintf( stderr, "Did not recognize type '%s' of refnum %ld (%s).\n"
- "\tDefaulting to %s.\n", p, refnum, tag, all[0].type );
- }
-
- return 0;
-}
-
-int
-process_findoldtag( const char *oldtag, int reftype, variants all[], int nall )
-{
- variants *v;
- int i;
-
- v = &(all[reftype]);
- for ( i=0; i<v->ntags; ++i ) {
- if ( !strcasecmp( (v->tags[i]).oldstr, oldtag ) )
- return i;
- }
- return -1;
-}
-
-/* translate_oldtag()
- */
-int
-translate_oldtag( const char *oldtag, int reftype, variants all[], int nall,
- int *processingtype, int *level, char **newtag )
-{
- int n;
-
- n = process_findoldtag( oldtag, reftype, all, nall );
- if ( n!=-1 ) {
- *processingtype = ((all[reftype]).tags[n]).processingtype;
- *level = ((all[reftype]).tags[n]).level;
- *newtag = ((all[reftype]).tags[n]).newstr;
- return 1;
- }
-
- return 0;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/reftypes.h b/support/texlab/crates/bibutils_sys/src/reftypes.h
deleted file mode 100644
index eeade09060..0000000000
--- a/support/texlab/crates/bibutils_sys/src/reftypes.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * reftypes.h
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef REFTYPES_H
-#define REFTYPES_H
-
-#define REFTYPE_CHATTY (0)
-#define REFTYPE_SILENT (1)
-
-/* Reftypes handled by core code */
-#define ALWAYS (0)
-#define DEFAULT (1)
-#define SKIP (2)
-
-/* Reftypes to be handled by converters */
-#define SIMPLE (3)
-#define TYPE (4)
-#define PERSON (5)
-#define DATE (6)
-#define PAGES (7)
-#define SERIALNO (8)
-#define TITLE (9)
-#define NOTES (10)
-#define DOI (11)
-#define HOWPUBLISHED (12)
-#define LINKEDFILE (13)
-#define KEYWORD (14)
-#define URL (15)
-#define GENRE (16)
-#define BT_SENTE (17) /* Bibtex 'Sente' */
-#define BT_EPRINT (18) /* Bibtex 'Eprint' */
-#define BT_ORG (19) /* Bibtex Organization */
-#define BLT_THESIS_TYPE (20) /* Biblatex Thesis Type */
-#define BLT_SCHOOL (21) /* Biblatex School */
-#define BLT_EDITOR (22) /* Biblatex Editor */
-#define BLT_SUBTYPE (23) /* Biblatex entrysubtype */
-#define BLT_SKIP (24) /* Biblatex Skip Entry */
-#define EPRINT (25)
-#define NUM_REFTYPES (26)
-
-typedef struct {
- char *oldstr;
- char *newstr;
- int processingtype;
- int level;
-} lookups;
-
-typedef struct {
- char type[25];
- lookups *tags;
- int ntags;
-} variants;
-
-int get_reftype( const char *q, long refnum, char *progname, variants *all, int nall, char *tag, int *is_default, int chattiness );
-int process_findoldtag( const char *oldtag, int reftype, variants all[], int nall );
-int translate_oldtag( const char *oldtag, int reftype, variants all[], int nall, int *processingtype, int *level, char **newtag );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/risin.c b/support/texlab/crates/bibutils_sys/src/risin.c
deleted file mode 100644
index 25acde5d42..0000000000
--- a/support/texlab/crates/bibutils_sys/src/risin.c
+++ /dev/null
@@ -1,582 +0,0 @@
-/*
- * risin.c
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include "str.h"
-#include "str_conv.h"
-#include "fields.h"
-#include "name.h"
-#include "title.h"
-#include "url.h"
-#include "utf8.h"
-#include "serialno.h"
-#include "reftypes.h"
-#include "bibformats.h"
-#include "generic.h"
-#include "msvc_fix.h"
-
-extern variants ris_all[];
-extern int ris_nall;
-
-/*****************************************************
- PUBLIC: void risin_initparams()
-*****************************************************/
-
-static int risin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset );
-static int risin_processf( fields *risin, const char *p, const char *filename, long nref, param *pm );
-static int risin_typef( fields *risin, const char *filename, int nref, param *p );
-static int risin_convertf( fields *risin, fields *info, int reftype, param *p );
-
-int
-risin_initparams( param *pm, const char *progname )
-{
- pm->readformat = BIBL_RISIN;
- pm->charsetin = BIBL_CHARSET_DEFAULT;
- pm->charsetin_src = BIBL_SRC_DEFAULT;
- pm->latexin = 0;
- pm->xmlin = 0;
- pm->utf8in = 0;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->output_raw = 0;
-
- pm->readf = risin_readf;
- pm->processf = risin_processf;
- pm->cleanf = NULL;
- pm->typef = risin_typef;
- pm->convertf = risin_convertf;
- pm->all = ris_all;
- pm->nall = ris_nall;
-
- slist_init( &(pm->asis) );
- slist_init( &(pm->corps) );
-
- if ( !progname ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int risin_readf()
-*****************************************************/
-
-/* RIS definition of a tag is strict:
- character 1 = uppercase alphabetic character
- character 2 = uppercase alphabetic character or digit
- character 3 = space (ansi 32)
- character 4 = space (ansi 32)
- character 5 = dash (ansi 45)
- character 6 = space (ansi 32)
-
- some sources don't have a space at character 6 if there
- is no data (such as "ER -" records). Handle this.
-
- www.omicsonline.org mangles the RIS specification and
- puts _three_ spaces before the dash. Handle this too.
-*/
-
-static int
-is_ris_tag( const char *buf )
-{
- if ( !isupper( (unsigned char )buf[0] ) ) return 0;
- if ( !( isupper( (unsigned char )buf[1] ) || isdigit( (unsigned char )buf[1] ) ) ) return 0;
- if ( buf[2]!=' ' ) return 0;
- if ( buf[3]!=' ' ) return 0;
-
- /*...RIS tags with two spaces */
- if ( buf[4]=='-' ) {
- if ( buf[5]==' ' || buf[5]=='\0' || buf[5]=='\n' || buf[5]=='\r' ) return 1;
- }
-
- /* ...RIS tags with three spaces */
- else if ( buf[4]==' ' ) {
- if ( buf[5]!='-' ) return 0;
- if ( buf[6]==' ' || buf[6]=='\0' || buf[6]=='\n' || buf[6]=='\r' ) return 1;
- }
-
- return 0;
-}
-
-static int
-is_ris_start_tag( char *p )
-{
- /* ...TY tag that fits specifications */
- if ( !strncmp( p, "TY - ", 6 ) ) return 1;
- /* ...TY tag with an extra space? */
- if ( !strncmp( p, "TY - ", 7 ) ) return 1;
- return 0;
-}
-
-static int
-is_ris_end_tag( char *p )
-{
- /* ...ER tag that fits specifications */
- if ( !strncmp( p, "ER -", 5 ) ) return 1;
- /* ...ER tag with an extra space? */
- if ( !strncmp( p, "ER -", 6 ) ) return 1;
- return 0;
-}
-
-static int
-readmore( FILE *fp, char *buf, int bufsize, int *bufpos, str *line )
-{
- if ( line->len ) return 1;
- else return str_fget( fp, buf, bufsize, bufpos, line );
-}
-
-static int
-risin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset )
-{
- int haveref = 0, inref = 0, readtoofar = 0;
- char *p;
-
- *fcharset = CHARSET_UNKNOWN;
-
- while ( !haveref && readmore( fp, buf, bufsize, bufpos, line ) ) {
-
- if ( str_is_empty( line ) ) continue;
-
- p = str_cstr( line );
-
- if ( utf8_is_bom( p ) ) {
- *fcharset = CHARSET_UNICODE;
- p += 3;
- }
-
- /* References are bounded by tags 'TY - ' && 'ER - ' */
- if ( is_ris_start_tag( p ) ) {
- if ( !inref ) inref = 1;
- else {
- /* we've read too far.... */
- readtoofar = 1;
- inref = 0;
- }
- }
-
- if ( is_ris_tag( p ) ) {
- if ( !inref ) {
- fprintf(stderr,"Warning. Tagged line not "
- "in properly started reference.\n");
- fprintf(stderr,"Ignored: '%s'\n", p );
- } else if ( is_ris_end_tag( p ) ) {
- inref = 0;
- } else {
- str_addchar( reference, '\n' );
- str_strcatc( reference, p );
- }
- }
- /* not a tag, but we'll append to last values ...*/
- else if ( inref && !is_ris_end_tag( p ) ) {
- str_addchar( reference, '\n' );
- str_strcatc( reference, p );
- }
- if ( !inref && reference->len ) haveref = 1;
- if ( !readtoofar ) str_empty( line );
- }
-
- if ( inref ) haveref = 1;
-
- return haveref;
-}
-
-/*****************************************************
- PUBLIC: int risin_processf()
-*****************************************************/
-
-static const char*
-process_untagged_line( str *value, const char *p )
-{
- while ( *p==' ' || *p=='\t' ) p++;
- while ( *p && *p!='\r' && *p!='\n' )
- str_addchar( value, *p++ );
- while ( *p=='\r' || *p=='\n' ) p++;
- return p;
-}
-
-static const char*
-process_tagged_line( str *tag, str *value, const char *p )
-{
- int i = 0;
-
- while ( i<6 && *p && *p!='\n' && *p!='\r' ) {
- if ( i<2 ) str_addchar( tag, *p );
- p++;
- i++;
- }
-
- while ( *p==' ' || *p=='\t' ) p++;
-
- while ( *p && *p!='\r' && *p!='\n' )
- str_addchar( value, *p++ );
- str_trimendingws( value );
-
- while ( *p=='\n' || *p=='\r' ) p++;
-
- return p;
-}
-
-static int
-merge_tag_value( fields *risin, str *tag, str *value, int *tag_added )
-{
- str *oldval;
- int n, status;
-
- if ( str_has_value( value ) ) {
- if ( *tag_added==1 ) {
- n = fields_num( risin );
- if ( n>0 ) {
- oldval = fields_value( risin, n-1, FIELDS_STRP );
- str_addchar( oldval, ' ' );
- str_strcat( oldval, value );
- if ( str_memerr( oldval ) ) return BIBL_ERR_MEMERR;
- }
- }
- else {
- status = fields_add( risin, str_cstr( tag ), str_cstr( value ), 0 );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- *tag_added = 1;
- }
- }
- return BIBL_OK;
-}
-
-static int
-add_tag_value( fields *risin, str *tag, str *value, int *tag_added )
-{
- int status;
-
- if ( str_has_value( value ) ) {
- status = fields_add( risin, str_cstr( tag ), str_cstr( value ), 0 );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- *tag_added = 1;
- }
-
- else {
- *tag_added = 0;
- }
-
- return BIBL_OK;
-}
-
-static int
-risin_processf( fields *risin, const char *p, const char *filename, long nref, param *pm )
-{
- int status, tag_added = 0, ret = 1;
- str tag, value;
-
- strs_init( &tag, &value, NULL );
-
- while ( *p ) {
-
- /* ...tag, add entry */
- if ( is_ris_tag( p ) ) {
- str_empty( &tag );
- str_empty( &value );
- p = process_tagged_line( &tag, &value, p );
- status = add_tag_value( risin, &tag, &value, &tag_added );
- if ( status!=BIBL_OK ) {
- ret = 0;
- goto out;
- }
- }
-
- /* ...no tag, merge with previous line */
- else {
- str_empty( &value );
- p = process_untagged_line( &value, p );
- status = merge_tag_value( risin, &tag, &value, &tag_added );
- if ( status!=BIBL_OK ) {
- ret = 0;
- goto out;
- }
- }
-
- }
-out:
-
- strs_free( &tag, &value, NULL );
- return ret;
-}
-
-/*****************************************************
- PUBLIC: int risin_typef()
-*****************************************************/
-
-static int
-risin_typef( fields *risin, const char *filename, int nref, param *p )
-{
- int ntypename, nrefname, is_default;
- char *refname = "", *typename = "";
-
- ntypename = fields_find( risin, "TY", LEVEL_MAIN );
- nrefname = fields_find( risin, "ID", LEVEL_MAIN );
- if ( ntypename!=FIELDS_NOTFOUND ) typename = fields_value( risin, ntypename, FIELDS_CHRP_NOUSE );
- if ( nrefname!=FIELDS_NOTFOUND ) refname = fields_value( risin, nrefname, FIELDS_CHRP_NOUSE );
-
- return get_reftype( typename, nref, p->progname, p->all, p->nall, refname, &is_default, REFTYPE_CHATTY );
-}
-
-/*****************************************************
- PUBLIC: int risin_convertf()
-*****************************************************/
-
-static int
-is_uri_file_scheme( char *p )
-{
- if ( !strncmp( p, "file:", 5 ) ) return 5;
- return 0;
-}
-
-static int
-risin_linkedfile( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int fstatus, m;
- char *p;
-
- /* if URL is file:///path/to/xyz.pdf, only store "///path/to/xyz.pdf" */
- m = is_uri_file_scheme( str_cstr( invalue ) );
- if ( m ) {
- /* skip past "file:" and store only actual path */
- p = invalue->data + m;
- fstatus = fields_add( bibout, outtag, p, level );
- if ( fstatus==FIELDS_OK ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
- }
-
- /* if URL is http:, ftp:, etc. store as a URL */
- m = is_uri_remote_scheme( str_cstr( invalue ) );
- if ( m!=-1 ) {
- fstatus = fields_add( bibout, "URL", str_cstr( invalue ), level );
- if ( fstatus==FIELDS_OK ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
- }
-
- /* badly formed, RIS wants URI, but store value anyway */
- fstatus = fields_add( bibout, outtag, str_cstr( invalue ), level );
- if ( fstatus==FIELDS_OK ) return BIBL_OK;
- else return BIBL_ERR_MEMERR;
-}
-
-/* scopus puts DOI in the DO or DI tag, but it needs cleaning */
-static int
-risin_doi( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int fstatus, doi;
- doi = is_doi( str_cstr( invalue ) );
- if ( doi!=-1 ) {
- fstatus = fields_add( bibout, "DOI", &(invalue->data[doi]), level );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- return BIBL_OK;
-}
-
-static int
-risin_date( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- char *p = str_cstr( invalue );
- int part, status;
- str date;
-
- part = ( !strncasecmp( outtag, "PART", 4 ) );
-
- str_init( &date );
- while ( *p && *p!='/' ) str_addchar( &date, *p++ );
- if ( str_memerr( &date ) ) return BIBL_ERR_MEMERR;
- if ( *p=='/' ) p++;
- if ( str_has_value( &date ) ) {
- if ( part ) status = fields_add( bibout, "PARTDATE:YEAR", str_cstr( &date ), level );
- else status = fields_add( bibout, "DATE:YEAR", str_cstr( &date ), level );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
-
- str_empty( &date );
- while ( *p && *p!='/' ) str_addchar( &date, *p++ );
- if ( str_memerr( &date ) ) return BIBL_ERR_MEMERR;
- if ( *p=='/' ) p++;
- if ( str_has_value( &date ) ) {
- if ( part ) status = fields_add( bibout, "PARTDATE:MONTH", str_cstr( &date ), level );
- else status = fields_add( bibout, "DATE:MONTH", str_cstr( &date ), level );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
-
- str_empty( &date );
- while ( *p && *p!='/' ) str_addchar( &date, *p++ );
- if ( str_memerr( &date ) ) return BIBL_ERR_MEMERR;
- if ( *p=='/' ) p++;
- if ( str_has_value( &date ) ) {
- if ( part ) status = fields_add( bibout, "PARTDATE:DAY", str_cstr( &date ), level );
- else status = fields_add( bibout, "DATE:DAY", str_cstr( &date ), level );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
-
- str_empty( &date );
- while ( *p ) str_addchar( &date, *p++ );
- if ( str_memerr( &date ) ) return BIBL_ERR_MEMERR;
- if ( str_has_value( &date ) ) {
- if ( part ) status = fields_add( bibout, "PARTDATE:OTHER", str_cstr( &date ), level );
- else status = fields_add( bibout, "DATE:OTHER", str_cstr( &date ), level );
- if ( status!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- str_free( &date );
- return BIBL_OK;
-}
-
-static int
-risin_person( fields *bibin, int n, str *intag, str *invalue, int level, param *pm, char *outtag, fields *bibout )
-{
- int i, begin, end, ok, status = BIBL_OK;
- slist tokens;
- str name;
-
- str_init( &name );
- slist_init( &tokens );
-
- status = slist_tokenize( &tokens, invalue, " \t\r\n", 1 );
- if ( status!=SLIST_OK ) { status = BIBL_ERR_MEMERR; goto out; }
-
- begin = 0;
- while ( begin < tokens.n ) {
-
- end = begin + 1;
-
- while ( end < tokens.n && strcasecmp( slist_cstr( &tokens, end ), "and" ) )
- end++;
-
- str_empty( &name );
- for ( i=begin; i<end; ++i ) {
- if ( i>begin ) str_addchar( &name, ' ' );
- str_strcat( &name, slist_str( &tokens, i ) );
- }
-
- ok = name_add( bibout, outtag, str_cstr( &name ), level, &(pm->asis), &(pm->corps) );
- if ( !ok ) { status = BIBL_ERR_MEMERR; goto out; }
-
- begin = end + 1;
-
- /* Handle repeated 'and' errors */
- while ( begin < tokens.n && !strcasecmp( slist_cstr( &tokens, begin ), "and" ) )
- begin++;
-
- }
-
-out:
- str_free( &name );
- slist_free( &tokens );
- return status;
-}
-
-/* look for thesis-type hint */
-static int
-risin_thesis_hints( fields *bibin, int reftype, param *p, fields *bibout )
-{
- int i, nfields, fstatus;
- char *tag, *value;
-
- if ( strcasecmp( p->all[reftype].type, "THES" ) ) return BIBL_OK;
-
- nfields = fields_num( bibin );
- for ( i=0; i<nfields; ++i ) {
- tag = fields_tag( bibin, i, FIELDS_CHRP );
- if ( strcasecmp( tag, "U1" ) ) continue;
- value = fields_value( bibin, i, FIELDS_CHRP );
- if ( !strcasecmp(value,"Ph.D. Thesis")||
- !strcasecmp(value,"Masters Thesis")||
- !strcasecmp(value,"Diploma Thesis")||
- !strcasecmp(value,"Doctoral Thesis")||
- !strcasecmp(value,"Habilitation Thesis")||
- !strcasecmp(value,"Licentiate Thesis")) {
- fstatus = fields_add( bibout, "GENRE:BIBUTILS", value, 0 );
- if ( fstatus!=FIELDS_OK ) return BIBL_ERR_MEMERR;
- }
- }
- return BIBL_OK;
-}
-
-static void
-risin_report_notag( param *p, char *tag )
-{
- if ( p->verbose && strcmp( tag, "TY" ) ) {
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Did not identify RIS tag '%s'\n", tag );
- }
-}
-
-static int
-risin_convertf( fields *bibin, fields *bibout, int reftype, param *p )
-{
- static int (*convertfns[NUM_REFTYPES])(fields *, int, str *, str *, int, param *, char *, fields *) = {
- // Patch: Fix compilation on MSVC target
- [ 0 ] = generic_null,
- [ 1 ] = generic_null,
- [ 2 ] = generic_null,
- [ 3 ] = generic_null,
- [ 4 ] = generic_null,
- [ 5 ] = generic_null,
- [ 6 ] = generic_null,
- [ 7 ] = generic_null,
- [ 8 ] = generic_null,
- [ 9 ] = generic_null,
- [ 10 ] = generic_null,
- [ 11 ] = generic_null,
- [ 12 ] = generic_null,
- [ 13 ] = generic_null,
- [ 14 ] = generic_null,
- [ 15 ] = generic_null,
- [ 16 ] = generic_null,
- [ 17 ] = generic_null,
- [ 18 ] = generic_null,
- [ 19 ] = generic_null,
- [ 20 ] = generic_null,
- [ 21 ] = generic_null,
- [ 22 ] = generic_null,
- [ 23 ] = generic_null,
- [ 24 ] = generic_null,
- [ 25 ] = generic_null,
- [ SIMPLE ] = generic_simple,
- [ TITLE ] = generic_title,
- [ SERIALNO ] = generic_serialno,
- [ NOTES ] = generic_notes,
- [ URL ] = generic_url,
- [ GENRE ] = generic_genre,
- [ PERSON ] = risin_person,
- [ DATE ] = risin_date,
- [ DOI ] = risin_doi,
- [ LINKEDFILE ] = risin_linkedfile,
- };
- int process, level, i, nfields, status = BIBL_OK;
- str *intag, *invalue;
- char *outtag;
-
- nfields = fields_num( bibin );
-
- for ( i=0; i<nfields; ++i ) {
- intag = fields_tag( bibin, i, FIELDS_STRP );
- if ( !translate_oldtag( str_cstr( intag ), reftype, p->all, p->nall, &process, &level, &outtag ) ) {
- risin_report_notag( p, str_cstr( intag ) );
- continue;
- }
- invalue = fields_value( bibin, i, FIELDS_STRP );
-
- status = convertfns[ process ] ( bibin, i, intag, invalue, level, p, outtag, bibout );
- if ( status!=BIBL_OK ) return status;
- }
-
- if ( status == BIBL_OK ) status = risin_thesis_hints( bibin, reftype, p, bibout );
-
- if ( status==BIBL_OK && p->verbose ) fields_report( bibout, stderr );
-
- return status;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/risout.c b/support/texlab/crates/bibutils_sys/src/risout.c
deleted file mode 100644
index 03106afc2c..0000000000
--- a/support/texlab/crates/bibutils_sys/src/risout.c
+++ /dev/null
@@ -1,793 +0,0 @@
-/*
- * risout.c
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "bibformats.h"
-#include "fields.h"
-#include "generic.h"
-#include "name.h"
-#include "str.h"
-#include "title.h"
-#include "url.h"
-#include "utf8.h"
-#include "msvc_fix.h"
-
-/*****************************************************
- PUBLIC: int risout_initparams()
-*****************************************************/
-
-static int risout_write( fields *info, FILE *fp, param *p, unsigned long refnum );
-static int risout_assemble( fields *in, fields *out, param *pm, unsigned long refnum );
-
-int
-risout_initparams( param *pm, const char *progname )
-{
- pm->writeformat = BIBL_RISOUT;
- pm->format_opts = 0;
- pm->charsetout = BIBL_CHARSET_DEFAULT;
- pm->charsetout_src = BIBL_SRC_DEFAULT;
- pm->latexout = 0;
- pm->utf8out = BIBL_CHARSET_UTF8_DEFAULT;
- pm->utf8bom = BIBL_CHARSET_BOM_DEFAULT;
- pm->xmlout = BIBL_XMLOUT_FALSE;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->singlerefperfile = 0;
-
- if ( pm->charsetout == BIBL_CHARSET_UNICODE ) {
- pm->utf8out = pm->utf8bom = 1;
- }
-
- pm->headerf = generic_writeheader;
- pm->footerf = NULL;
- pm->assemblef = risout_assemble;
- pm->writef = risout_write;
-
- if ( !pm->progname ) {
- if ( progname==NULL ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int risout_assemble()
-*****************************************************/
-
-enum {
- TYPE_UNKNOWN = 0,
- TYPE_STD, /* standard/generic (1) */
- TYPE_ABSTRACT, /* abstract (2) */
- TYPE_ARTICLE, /* article (3) */
- TYPE_BOOK, /* book (4) */
- TYPE_CASE, /* case (5) */
- TYPE_INBOOK, /* chapter (6) */
- TYPE_CONF, /* conference (7) */
- TYPE_ELEC, /* electronic (8) */
- TYPE_HEAR, /* hearing (9) */
- TYPE_MAGARTICLE, /* magazine article (10) */
- TYPE_NEWSPAPER, /* newspaper (11) */
- TYPE_MPCT, /* mpct (12) */
- TYPE_PAMPHLET, /* pamphlet (13) */
- TYPE_PATENT, /* patent (14) */
- TYPE_PCOMM, /* personal communication (15) */
- TYPE_PROGRAM, /* program (16) */
- TYPE_REPORT, /* report (17) */
- TYPE_STATUTE, /* statute (18) */
- TYPE_THESIS, /* thesis (19) */
- TYPE_LICENTIATETHESIS, /* thesis (20) */
- TYPE_MASTERSTHESIS, /* thesis (21) */
- TYPE_PHDTHESIS, /* thesis (22) */
- TYPE_DIPLOMATHESIS, /* thesis (23) */
- TYPE_DOCTORALTHESIS, /* thesis (24) */
- TYPE_HABILITATIONTHESIS, /* thesis (25) */
- TYPE_MAP, /* map, cartographic data (26) */
- TYPE_UNPUBLISHED, /* unpublished (27) */
- NUM_TYPES /* (28) */
-};
-
-static int type_is_element[ NUM_TYPES ] = {
- // Patch: Fix compilation on MSVC
- // [ 0 ... NUM_TYPES-1 ] = 0,
- [ 0 ] = 0,
- [ 1 ] = 0,
- [ 2 ] = 0,
- [ 3 ] = 0,
- [ 4 ] = 0,
- [ 5 ] = 0,
- [ 6 ] = 0,
- [ 7 ] = 0,
- [ 8 ] = 0,
- [ 9 ] = 0,
- [ 10 ] = 0,
- [ 11 ] = 0,
- [ 12 ] = 0,
- [ 13 ] = 0,
- [ 14 ] = 0,
- [ 15 ] = 0,
- [ 16 ] = 0,
- [ 17 ] = 0,
- [ 18 ] = 0,
- [ 19 ] = 0,
- [ 20 ] = 0,
- [ 21 ] = 0,
- [ 22 ] = 0,
- [ 23 ] = 0,
- [ 24 ] = 0,
- [ 25 ] = 0,
- [ 26 ] = 0,
- [ 27 ] = 0,
- [ TYPE_ARTICLE ] = 1,
- [ TYPE_INBOOK ] = 1,
- [ TYPE_MAGARTICLE ] = 1,
- [ TYPE_NEWSPAPER ] = 1,
- [ TYPE_ABSTRACT ] = 1,
- [ TYPE_CONF ] = 1,
-};
-
-static int type_uses_journal[ NUM_TYPES ] = {
- // Patch: Fix compilation on MSVC
- // [ 0 ... NUM_TYPES-1 ] = 0,
- [ 0 ] = 0,
- [ 1 ] = 0,
- [ 2 ] = 0,
- [ 3 ] = 0,
- [ 4 ] = 0,
- [ 5 ] = 0,
- [ 6 ] = 0,
- [ 7 ] = 0,
- [ 8 ] = 0,
- [ 9 ] = 0,
- [ 10 ] = 0,
- [ 11 ] = 0,
- [ 12 ] = 0,
- [ 13 ] = 0,
- [ 14 ] = 0,
- [ 15 ] = 0,
- [ 16 ] = 0,
- [ 17 ] = 0,
- [ 18 ] = 0,
- [ 19 ] = 0,
- [ 20 ] = 0,
- [ 21 ] = 0,
- [ 22 ] = 0,
- [ 23 ] = 0,
- [ 24 ] = 0,
- [ 25 ] = 0,
- [ 26 ] = 0,
- [ 27 ] = 0,
- [ TYPE_ARTICLE ] = 1,
- [ TYPE_MAGARTICLE ] = 1,
-};
-
-static void
-write_type( FILE *fp, int type )
-{
- const char *typenames[ NUM_TYPES ] = {
- [ TYPE_UNKNOWN ] = "TYPE_UNKNOWN",
- [ TYPE_STD ] = "TYPE_STD",
- [ TYPE_ABSTRACT ] = "TYPE_ABSTRACT",
- [ TYPE_ARTICLE ] = "TYPE_ARTICLE",
- [ TYPE_BOOK ] = "TYPE_BOOK",
- [ TYPE_CASE ] = "TYPE_CASE",
- [ TYPE_INBOOK ] = "TYPE_INBOOK",
- [ TYPE_CONF ] = "TYPE_CONF",
- [ TYPE_ELEC ] = "TYPE_ELEC",
- [ TYPE_HEAR ] = "TYPE_HEAR",
- [ TYPE_MAGARTICLE ] = "TYPE_MAGARTICLE",
- [ TYPE_NEWSPAPER ] = "TYPE_NEWSPAPER",
- [ TYPE_MPCT ] = "TYPE_MPCT",
- [ TYPE_PAMPHLET ] = "TYPE_PAMPHLET",
- [ TYPE_PATENT ] = "TYPE_PATENT",
- [ TYPE_PCOMM ] = "TYPE_PCOMM",
- [ TYPE_PROGRAM ] = "TYPE_PROGRAM",
- [ TYPE_REPORT ] = "TYPE_REPORT",
- [ TYPE_STATUTE ] = "TYPE_STATUTE",
- [ TYPE_THESIS ] = "TYPE_THESIS",
- [ TYPE_LICENTIATETHESIS ] = "TYPE_LICENTIATETHESIS",
- [ TYPE_MASTERSTHESIS ] = "TYPE_MASTERSTHESIS",
- [ TYPE_PHDTHESIS ] = "TYPE_PHDTHESIS",
- [ TYPE_DIPLOMATHESIS ] = "TYPE_DIPLOMATHESIS",
- [ TYPE_DOCTORALTHESIS ] = "TYPE_DOCTORALTHESIS",
- [ TYPE_HABILITATIONTHESIS ] = "TYPE_HABILITATIONTHESIS",
- [ TYPE_MAP ] = "TYPE_MAP",
- [ TYPE_UNPUBLISHED ] = "TYPE_UNPUBLISHED",
- };
-
- if ( type < 0 || type >= NUM_TYPES ) fprintf( fp, "Error - type not in enum" );
- else fprintf( fp, "%s", typenames[ type ] );
-}
-
-static void
-verbose_type_identified( char *element_type, param *p, int type )
-{
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Type from %s element: ", element_type );
- write_type( stderr, type );
- fprintf( stderr, "\n" );
-}
-
-static void
-verbose_type_assignment( char *tag, char *value, param *p, int type )
-{
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Type from tag '%s' data '%s': ", tag, value );
- write_type( stderr, type );
- fprintf( stderr, "\n" );
-}
-
-typedef struct match_type {
- char *name;
- int type;
-} match_type;
-
-/* Try to determine type of reference from
- * <genre></genre>
- */
-static int
-get_type_genre( fields *f, param *p )
-{
- match_type match_genres[] = {
- { "academic journal", TYPE_ARTICLE },
- { "article", TYPE_ARTICLE },
- { "journal article", TYPE_ARTICLE },
- { "magazine", TYPE_MAGARTICLE },
- { "conference publication", TYPE_CONF },
- { "newspaper", TYPE_NEWSPAPER },
- { "legislation", TYPE_STATUTE },
- { "communication", TYPE_PCOMM },
- { "hearing", TYPE_HEAR },
- { "electronic", TYPE_ELEC },
- { "legal case and case notes", TYPE_CASE },
- { "book chapter", TYPE_INBOOK },
- { "Ph.D. thesis", TYPE_PHDTHESIS },
- { "Licentiate thesis", TYPE_LICENTIATETHESIS },
- { "Masters thesis", TYPE_MASTERSTHESIS },
- { "Diploma thesis", TYPE_DIPLOMATHESIS },
- { "Doctoral thesis", TYPE_DOCTORALTHESIS },
- { "Habilitation thesis", TYPE_HABILITATIONTHESIS },
- { "report", TYPE_REPORT },
- { "technical report", TYPE_REPORT },
- { "abstract or summary", TYPE_ABSTRACT },
- { "patent", TYPE_PATENT },
- { "unpublished", TYPE_UNPUBLISHED },
- { "manuscript", TYPE_UNPUBLISHED },
- { "map", TYPE_MAP },
- };
- int nmatch_genres = sizeof( match_genres ) / sizeof( match_genres[0] );
- char *tag, *value;
- int type, i, j;
-
- type = TYPE_UNKNOWN;
-
- for ( i=0; i<fields_num( f ); ++i ) {
- tag = ( char * ) fields_tag( f, i, FIELDS_CHRP );
- if ( strcmp( tag, "GENRE:MARC" ) && strcmp( tag, "GENRE:BIBUTILS" ) && strcmp( tag, "GENRE:UNKNOWN") ) continue;
- value = ( char * ) fields_value( f, i, FIELDS_CHRP );
- for ( j=0; j<nmatch_genres; ++j )
- if ( !strcasecmp( match_genres[j].name, value ) )
- type = match_genres[j].type;
- if ( p->verbose ) verbose_type_assignment( tag, value, p, type );
- if ( type==TYPE_UNKNOWN ) {
- if ( !strcasecmp( value, "periodical" ) )
- type = TYPE_ARTICLE;
- else if ( !strcasecmp( value, "thesis" ) )
- type = TYPE_THESIS;
- else if ( !strcasecmp( value, "book" ) ) {
- if ( fields_level( f, i )==0 ) type=TYPE_BOOK;
- else type=TYPE_INBOOK;
- }
- else if ( !strcasecmp( value, "collection" ) ) {
- if ( fields_level( f, i )==0 ) type=TYPE_BOOK;
- else type=TYPE_INBOOK;
- }
- }
-
- }
-
- if ( p->verbose ) verbose_type_identified( "genre", p, type );
-
- return type;
-}
-
-/* Try to determine type of reference from
- * <TypeOfResource></TypeOfResource>
- */
-static int
-get_type_resource( fields *f, param *p )
-{
- match_type match_res[] = {
- { "software, multimedia", TYPE_PROGRAM },
- { "cartographic", TYPE_MAP },
- };
- int nmatch_res = sizeof( match_res ) / sizeof( match_res[0] );
- vplist_index i;
- int type, j;
- char *value;
- vplist a;
-
- type = TYPE_UNKNOWN;
-
- vplist_init( &a );
- fields_findv_each( f, LEVEL_ANY, FIELDS_CHRP, &a, "RESOURCE" );
-
- for ( i=0; i<a.n; ++i ) {
- value = ( char * ) vplist_get( &a, i );
- for ( j=0; j<nmatch_res; ++j ) {
- if ( !strcasecmp( value, match_res[j].name ) )
- type = match_res[j].type;
- }
- if ( p->verbose ) verbose_type_assignment( "RESOURCE", value, p, type );
- }
-
- if ( p->verbose ) verbose_type_identified( "resource", p, type );
-
- vplist_free( &a );
- return type;
-}
-
-/* Try to determine type of reference from <issuance></issuance> and */
-/* <typeOfReference></typeOfReference> */
-static int
-get_type_issuance( fields *f, param *p )
-{
- int type = TYPE_UNKNOWN;
- int i, monographic = 0, monographic_level = 0;
-// int text = 0;
- for ( i=0; i<f->n; ++i ) {
- if ( !strcasecmp( (char *) fields_tag( f, i, FIELDS_CHRP_NOUSE ), "issuance" ) &&
- !strcasecmp( (char *) fields_value( f, i, FIELDS_CHRP_NOUSE ), "MONOGRAPHIC" ) ){
- monographic = 1;
- monographic_level = f->level[i];
- }
-// if ( !strcasecmp( (char *) fields_tag( f, i, FIELDS_CHRP_NOUSE ), "typeOfResource" ) &&
-// !strcasecmp( (char *) fields_value( f, i, FIELDS_CHRP_NOUSE ), "text" ) ) {
-// text = 1;
-// }
- }
-// if ( monographic && text ) {
- if ( monographic ) {
- if ( monographic_level==0 ) type=TYPE_BOOK;
- else if ( monographic_level>0 ) type=TYPE_INBOOK;
- }
-
- if ( p->verbose ) {
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Type from issuance/typeOfReference elements: " );
- write_type( stderr, type );
- fprintf( stderr, "\n" );
- }
-
- return type;
-}
-
-static int
-get_type( fields *f, param *p )
-{
- int type;
- type = get_type_genre( f, p );
- if ( type==TYPE_UNKNOWN ) type = get_type_resource( f, p );
- if ( type==TYPE_UNKNOWN ) type = get_type_issuance( f, p );
- if ( type==TYPE_UNKNOWN ) {
- if ( fields_maxlevel( f ) > 0 ) type = TYPE_INBOOK;
- else type = TYPE_STD;
- }
-
- if ( p->verbose ) {
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Final type: " );
- write_type( stderr, type );
- fprintf( stderr, "\n" );
- }
-
-
- return type;
-}
-
-static void
-append_type( int type, param *p, fields *out, int *status )
-{
- char *typenames[ NUM_TYPES ] = {
- [ TYPE_STD ] = "STD",
- [ TYPE_ABSTRACT ] = "ABST",
- [ TYPE_ARTICLE ] = "JOUR",
- [ TYPE_BOOK ] = "BOOK",
- [ TYPE_CASE ] = "CASE",
- [ TYPE_INBOOK ] = "CHAP",
- [ TYPE_CONF ] = "CONF",
- [ TYPE_ELEC ] = "ELEC",
- [ TYPE_HEAR ] = "HEAR",
- [ TYPE_MAGARTICLE ] = "MGZN",
- [ TYPE_NEWSPAPER ] = "NEWS",
- [ TYPE_MPCT ] = "MPCT",
- [ TYPE_PAMPHLET ] = "PAMP",
- [ TYPE_PATENT ] = "PAT",
- [ TYPE_PCOMM ] = "PCOMM",
- [ TYPE_PROGRAM ] = "COMP",
- [ TYPE_REPORT ] = "RPRT",
- [ TYPE_STATUTE ] = "STAT",
- [ TYPE_THESIS ] = "THES",
- [ TYPE_MASTERSTHESIS ] = "THES",
- [ TYPE_PHDTHESIS ] = "THES",
- [ TYPE_DIPLOMATHESIS ] = "THES",
- [ TYPE_DOCTORALTHESIS ] = "THES",
- [ TYPE_HABILITATIONTHESIS ] = "THES",
- [ TYPE_MAP ] = "MAP",
- [ TYPE_UNPUBLISHED ] = "UNPB",
- };
- int fstatus;
-
- if ( type < 0 || type >= NUM_TYPES ) {
- if ( p->progname ) fprintf( stderr, "%s: ", p->progname );
- fprintf( stderr, "Internal error: Cannot recognize type %d, switching to TYPE_STD %d\n", type, TYPE_STD );
- type = TYPE_STD;
- }
-
- fstatus = fields_add( out, "TY", typenames[ type ], LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
-}
-
-static void
-append_people( fields *f, char *tag, char *ristag, int level, fields *out, int *status )
-{
- vplist_index i;
- str oneperson;
- vplist people;
- int fstatus;
-
- str_init( &oneperson );
- vplist_init( &people );
- fields_findv_each( f, level, FIELDS_CHRP, &people, tag );
- for ( i=0; i<people.n; ++i ) {
- name_build_withcomma( &oneperson, ( char * ) vplist_get( &people, i ) );
- if ( str_memerr( &oneperson ) ) { *status = BIBL_ERR_MEMERR; goto out; }
- fstatus = fields_add_can_dup( out, ristag, str_cstr( &oneperson ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) { *status = BIBL_ERR_MEMERR; goto out; }
- }
-out:
- vplist_free( &people );
- str_free( &oneperson );
-}
-
-static void
-append_date( fields *in, fields *out, int *status )
-{
- char *year, *month, *day;
- str date;
- int fstatus;
-
- year = fields_findv_firstof( in, LEVEL_ANY, FIELDS_CHRP, "DATE:YEAR", "PARTDATE:YEAR", NULL );
- month = fields_findv_firstof( in, LEVEL_ANY, FIELDS_CHRP, "DATE:MONTH", "PARTDATE:MONTH", NULL );
- day = fields_findv_firstof( in, LEVEL_ANY, FIELDS_CHRP, "DATE:DAY", "PARTDATE:DAY", NULL );
-
- if ( year ) {
- fstatus = fields_add( out, "PY", year, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-
- if ( year || month || day ) {
- str_init( &date );
-
- if ( year ) str_strcatc( &date, year );
- str_addchar( &date, '/' );
- if ( month ) str_strcatc( &date, month );
- str_addchar( &date, '/' );
- if ( day ) str_strcatc( &date, day );
-
- if ( str_memerr( &date ) ) { *status = BIBL_ERR_MEMERR; str_free( &date ); return; }
-
- fstatus = fields_add( out, "DA", str_cstr( &date ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
-
- str_free( &date );
- }
-}
-
-static void
-append_titlecore( fields *in, char *ristag, int level, char *maintag, char *subtag, fields *out, int *status )
-{
- str *mainttl = fields_findv( in, level, FIELDS_STRP, maintag );
- str *subttl = fields_findv( in, level, FIELDS_STRP, subtag );
- str fullttl;
- int fstatus;
-
- str_init( &fullttl );
-
- title_combine( &fullttl, mainttl, subttl );
-
- if ( str_memerr( &fullttl ) ) {
- *status = BIBL_ERR_MEMERR;
- goto out;
- }
-
- if ( str_has_value( &fullttl ) ) {
- fstatus = fields_add( out, ristag, str_cstr( &fullttl ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-
-out:
- str_free( &fullttl );
-}
-
-static void
-append_alltitles( fields *in, int type, fields *out, int *status )
-{
- append_titlecore( in, "TI", 0, "TITLE", "SUBTITLE", out, status );
- append_titlecore( in, "T2", -1, "SHORTTITLE", "SHORTSUBTITLE", out, status );
- if ( type_is_element[ type ] ) {
- if ( type_uses_journal[ type ] )
- append_titlecore( in, "JO", 1, "TITLE", "SUBTITLE", out, status );
- else append_titlecore( in, "BT", 1, "TITLE", "SUBTITLE", out, status );
- append_titlecore( in, "T3", 2, "TITLE", "SUBTITLE", out, status );
- } else {
- append_titlecore( in, "T3", 1, "TITLE", "SUBTITLE", out, status );
- }
-}
-
-static void
-append_pages( fields *in, fields *out, int *status )
-{
- char *sn, *en, *ar;
- int fstatus;
-
- sn = fields_findv( in, LEVEL_ANY, FIELDS_CHRP, "PAGES:START" );
- en = fields_findv( in, LEVEL_ANY, FIELDS_CHRP, "PAGES:STOP" );
-
- if ( sn || en ) {
- if ( sn ) {
- fstatus = fields_add( out, "SP", sn, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- if ( en ) {
- fstatus = fields_add( out, "EP", en, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- } else {
- ar = fields_findv( in, LEVEL_ANY, FIELDS_CHRP, "ARTICLENUMBER" );
- if ( ar ) {
- fstatus = fields_add( out, "SP", ar, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- }
-}
-
-static void
-append_keywords( fields *in, fields *out, int *status )
-{
- vplist_index i;
- int fstatus;
- vplist vpl;
-
- vplist_init( &vpl );
- fields_findv_each( in, LEVEL_ANY, FIELDS_CHRP, &vpl, "KEYWORD" );
- for ( i=0; i<vpl.n; ++i ) {
- fstatus = fields_add( out, "KW", ( char * ) vplist_get( &vpl, i ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- vplist_free( &vpl );
-}
-
-static void
-append_urls( fields *in, fields *out, int *status )
-{
- int lstatus;
- slist types;
-
- lstatus = slist_init_valuesc( &types, "URL", "DOI", "PMID", "PMC", "ARXIV", "JSTOR", "MRNUMBER", NULL );
- if ( lstatus!=SLIST_OK ) {
- *status = BIBL_ERR_MEMERR;
- return;
- }
-
- *status = urls_merge_and_add( in, LEVEL_ANY, out, "UR", LEVEL_MAIN, &types );
-
- slist_free( &types );
-
-}
-
-static void
-append_thesishint( int type, fields *out, int *status )
-{
- int fstatus;
-
- if ( type==TYPE_MASTERSTHESIS ) {
- fstatus = fields_add( out, "U1", "Masters thesis", LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-
- else if ( type==TYPE_PHDTHESIS ) {
- fstatus = fields_add( out, "U1", "Ph.D. thesis", LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-
- else if ( type==TYPE_DIPLOMATHESIS ) {
- fstatus = fields_add( out, "U1", "Diploma thesis", LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-
- else if ( type==TYPE_DOCTORALTHESIS ) {
- fstatus = fields_add( out, "U1", "Doctoral thesis", LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-
- else if ( type==TYPE_HABILITATIONTHESIS ) {
- fstatus = fields_add( out, "U1", "Habilitation thesis", LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-
- else if ( type==TYPE_LICENTIATETHESIS ) {
- fstatus = fields_add( out, "U1", "Licentiate thesis", LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-}
-
-static int
-is_uri_scheme( char *p )
-{
- char *scheme[] = { "http:", "https:", "file:", "ftp:", "git:", "gopher:" };
- int i, len, nschemes = sizeof( scheme ) / sizeof( scheme[0] );
- for ( i=0; i<nschemes; ++i ) {
- len = strlen( scheme[i] );
- if ( !strncmp( p, scheme[i], len ) ) return len;
- }
- return 0;
-}
-
-
-static void
-append_file( fields *in, char *tag, char *ristag, int level, fields *out, int *status )
-{
- vplist_index i;
- str filename;
- int fstatus;
- vplist a;
- char *fl;
-
- str_init( &filename );
- vplist_init( &a );
- fields_findv_each( in, level, FIELDS_CHRP, &a, tag );
- for ( i=0; i<a.n; ++i ) {
- fl = ( char * ) vplist_get( &a, i );
- str_empty( &filename );
- if ( !is_uri_scheme( fl ) ) str_strcatc( &filename, "file:" );
- str_strcatc( &filename, fl );
- if ( str_memerr( &filename ) ) { *status = BIBL_ERR_MEMERR; goto out; }
- fstatus = fields_add( out, ristag, str_cstr( &filename ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) { *status = BIBL_ERR_MEMERR; goto out; }
- }
-out:
- vplist_free( &a );
- str_free( &filename );
-}
-
-static void
-append_easy( fields *in, char *tag, char *ristag, int level, fields *out, int *status )
-{
- char *value;
- int fstatus;
-
- value = fields_findv( in, level, FIELDS_CHRP, tag );
- if ( value ) {
- fstatus = fields_add( out, ristag, value, LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
-}
-
-static void
-append_easyall( fields *in, char *tag, char *ristag, int level, fields *out, int *status )
-{
- vplist_index i;
- int fstatus;
- vplist a;
-
- vplist_init( &a );
- fields_findv_each( in, level, FIELDS_CHRP, &a, tag );
- for ( i=0; i<a.n; ++i ) {
- fstatus = fields_add( out, ristag, (char *) vplist_get( &a, i ), LEVEL_MAIN );
- if ( fstatus!=FIELDS_OK ) *status = BIBL_ERR_MEMERR;
- }
- vplist_free( &a );
-}
-
-static void
-append_allpeople( fields *in, int type, fields *out, int *status )
-{
- append_people ( in, "AUTHOR", "AU", LEVEL_MAIN, out, status );
- append_easyall( in, "AUTHOR:CORP", "AU", LEVEL_MAIN, out, status );
- append_easyall( in, "AUTHOR:ASIS", "AU", LEVEL_MAIN, out, status );
- append_people ( in, "AUTHOR", "A2", LEVEL_HOST, out, status );
- append_easyall( in, "AUTHOR:CORP", "A2", LEVEL_HOST, out, status );
- append_easyall( in, "AUTHOR:ASIS", "A2", LEVEL_HOST, out, status );
- append_people ( in, "AUTHOR", "A3", LEVEL_SERIES, out, status );
- append_easyall( in, "AUTHOR:CORP", "A3", LEVEL_SERIES, out, status );
- append_easyall( in, "AUTHOR:ASIS", "A3", LEVEL_SERIES, out, status );
- append_people ( in, "EDITOR", "ED", LEVEL_MAIN, out, status );
- append_easyall( in, "EDITOR:CORP", "ED", LEVEL_MAIN, out, status );
- append_easyall( in, "EDITOR:ASIS", "ED", LEVEL_MAIN, out, status );
- if ( type_is_element[ type ] ) {
- append_people ( in, "EDITOR", "ED", LEVEL_HOST, out, status );
- append_easyall( in, "EDITOR:CORP", "ED", LEVEL_HOST, out, status );
- append_easyall( in, "EDITOR:ASIS", "ED", LEVEL_HOST, out, status );
- } else {
- append_people ( in, "EDITOR", "A3", LEVEL_HOST, out, status );
- append_easyall( in, "EDITOR:CORP", "A3", LEVEL_HOST, out, status );
- append_easyall( in, "EDITOR:ASIS", "A3", LEVEL_HOST, out, status );
- }
- append_people ( in, "EDITOR", "A3", LEVEL_SERIES, out, status );
- append_easyall( in, "EDITOR:CORP", "A3", LEVEL_SERIES, out, status );
- append_easyall( in, "EDITOR:ASIS", "A3", LEVEL_SERIES, out, status );
-}
-
-static int
-risout_assemble( fields *in, fields *out, param *pm, unsigned long refnum )
-{
- int type, status = BIBL_OK;
-
- type = get_type( in, pm );
-
- append_type ( type, pm, out, &status );
- append_allpeople ( in, type, out, &status );
- append_date ( in, out, &status );
- append_alltitles ( in, type, out, &status );
- append_pages ( in, out, &status );
- append_easy ( in, "VOLUME", "VL", LEVEL_ANY, out, &status );
- append_easy ( in, "ISSUE", "IS", LEVEL_ANY, out, &status );
- append_easy ( in, "NUMBER", "IS", LEVEL_ANY, out, &status );
- append_easy ( in, "EDITION", "ET", LEVEL_ANY, out, &status );
- append_easy ( in, "NUMVOLUMES", "NV", LEVEL_ANY, out, &status );
- append_easy ( in, "ADDRESS:AUTHOR", "AD", LEVEL_ANY, out, &status );
- append_easy ( in, "PUBLISHER", "PB", LEVEL_ANY, out, &status );
- append_easy ( in, "DEGREEGRANTOR", "PB", LEVEL_ANY, out, &status );
- append_easy ( in, "DEGREEGRANTOR:ASIS", "PB", LEVEL_ANY, out, &status );
- append_easy ( in, "DEGREEGRANTOR:CORP", "PB", LEVEL_ANY, out, &status );
- append_easy ( in, "ADDRESS", "CY", LEVEL_ANY, out, &status );
- append_keywords ( in, out, &status );
- append_easy ( in, "ABSTRACT", "AB", LEVEL_ANY, out, &status );
- append_easy ( in, "CALLNUMBER", "CN", LEVEL_ANY, out, &status );
- append_easy ( in, "ISSN", "SN", LEVEL_ANY, out, &status );
- append_easy ( in, "ISBN", "SN", LEVEL_ANY, out, &status );
- append_file ( in, "FILEATTACH", "L1", LEVEL_ANY, out, &status );
- append_file ( in, "FIGATTACH", "L4", LEVEL_ANY, out, &status );
- append_easy ( in, "CAPTION", "CA", LEVEL_ANY, out, &status );
- append_urls ( in, out, &status );
- append_easyall ( in, "DOI", "DO", LEVEL_ANY, out, &status );
- append_easy ( in, "LANGUAGE", "LA", LEVEL_ANY, out, &status );
- append_easy ( in, "NOTES", "N1", LEVEL_ANY, out, &status );
- append_easy ( in, "REFNUM", "ID", LEVEL_ANY, out, &status );
- append_thesishint( type, out, &status );
-
- return status;
-}
-
-/*****************************************************
- PUBLIC: int risout_write()
-*****************************************************/
-
-static int
-risout_write( fields *out, FILE *fp, param *p, unsigned long refnum )
-{
- const char *tag, *value;
- int i;
-
- for ( i=0; i<out->n; ++i ) {
- tag = fields_tag ( out, i, FIELDS_CHRP );
- value = fields_value( out, i, FIELDS_CHRP );
- fprintf( fp, "%s - %s\n", tag, value );
- }
-
- fprintf( fp, "ER - \n" );
- fflush( fp );
- return BIBL_OK;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/ristypes.c b/support/texlab/crates/bibutils_sys/src/ristypes.c
deleted file mode 100644
index 798e25c94f..0000000000
--- a/support/texlab/crates/bibutils_sys/src/ristypes.c
+++ /dev/null
@@ -1,1594 +0,0 @@
-/*
- * ristypes.c
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "fields.h"
-#include "reftypes.h"
-
-static lookups generic[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author -- Series editors */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "BT", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Name of Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachments (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */
- { "PY", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Resarch Notes -> Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Deprecated? */
- { "Y2", "DATE:MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */
-};
-
-static lookups article[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author -- Series editor */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_HOST }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_SERIES }, /* Alternate Title, abbreviated book or journal */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_HOST }, /* Publisher */
- { "PY", "PARTDATE:YEAR",DATE, LEVEL_MAIN }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Research Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_HOST }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "PARTDATE:YEAR",DATE, LEVEL_MAIN }, /* Deprecated */
- { "Y2", "PARTDATE:MONTH",SIMPLE, LEVEL_MAIN }, /* Access Date */
- { " ", "INTERNAL_TYPE|ARTICLE", ALWAYS, LEVEL_MAIN },
- { " ", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:BIBUTILS|journal article", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|periodical", ALWAYS, LEVEL_HOST },
- { " ", "GENRE:BIBUTILS|academic journal", ALWAYS, LEVEL_HOST }
-};
-
-/* magazine article */
-static lookups magarticle[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editors */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_HOST }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_SERIES }, /* Alternate Title, abbreviated book or journal */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_HOST }, /* Publisher */
- { "PY", "PARTDATE:YEAR",DATE, LEVEL_MAIN }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Research Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_HOST }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "PARTDATE:YEAR",DATE, LEVEL_MAIN }, /* Deprecated */
- { "Y2", "PARTDATE:MONTH",SIMPLE, LEVEL_MAIN }, /* Access Date */
- { " ", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|periodical", ALWAYS, LEVEL_HOST },
- { " ", "GENRE:BIBUTILS|magazine", ALWAYS, LEVEL_HOST }
-};
-
-static lookups newsarticle[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_HOST }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_SERIES }, /* Alternate Title, abbreviated book or journal */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_HOST }, /* Publisher */
- { "PY", "PARTDATE:YEAR",DATE, LEVEL_MAIN }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Research Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_HOST }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "PARTDATE:YEAR",DATE, LEVEL_MAIN }, /* Deprecated */
- { "Y2", "PARTDATE:MONTH",SIMPLE, LEVEL_MAIN }, /* Access Date */
- { " ", "INTERNAL_TYPE|NEWSARTICLE", ALWAYS, LEVEL_MAIN },
- { " ", "ISSUANCE|continuing", ALWAYS, LEVEL_HOST },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|newspaper", ALWAYS, LEVEL_HOST }
-};
-
-static lookups book[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */
- { "A3", "EDITOR", PERSON, LEVEL_HOST }, /* 'Tertiary' Author - Series editor */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */
- { "PY", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Research Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title -- here abbreviated title for series*/
- { "T3", "TITLE", SIMPLE, LEVEL_HOST }, /* 'Tertiary' Title -- series title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Deprecated */
- { "Y2", "DATE:MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */
- { " ", "ISSUANCE|monographic", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|book", ALWAYS, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups inbook[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - series editor */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "BT", "TITLE", SIMPLE, LEVEL_HOST }, /* Book Title - Deprecated? */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_HOST }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_HOST }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_HOST }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_HOST }, /* Number */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_HOST }, /* Publisher */
- { "PY", "DATE:YEAR", DATE, LEVEL_HOST }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Research Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_HOST }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_SERIES }, /* 'Secondary' Title -- here abbreviated title for series*/
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_HOST }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "Y1", "DATE:YEAR", DATE, LEVEL_HOST }, /* Deprecated */
- { "Y2", "DATE:MONTH", SIMPLE, LEVEL_HOST }, /* Access Date */
- { " ", "GENRE:BIBUTILS|book chapter", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|book", ALWAYS, LEVEL_HOST },
- { " ", "ISSUANCE|monographic", ALWAYS, LEVEL_HOST },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups conference[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR:ASIS", SIMPLE, LEVEL_HOST }, /* 'Secondary' Author - Name of conference */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_HOST }, /* Publisher */
- { "PY", "DATE:YEAR", DATE, LEVEL_HOST }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Research Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "BT", "TITLE", SIMPLE, LEVEL_HOST }, /* Book Title */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_SERIES }, /* 'Secondary' Title - Abbreviated series TItle*/
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title - Series Title*/
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "DATE:YEAR", DATE, LEVEL_HOST }, /* Deprecated */
- { "Y2", "DATE:MONTH", SIMPLE, LEVEL_HOST }, /* Access Date */
- { " ", "INTERNAL_TYPE|CONFERENCE", ALWAYS, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|conference publication", ALWAYS, LEVEL_HOST }
-};
-
-static lookups statute[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "BT", "TITLE", SIMPLE, LEVEL_HOST }, /* Book Title - Deprecated? */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */
- { "PY", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Research Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Deprecated */
- { "Y2", "DATE:MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */
- { " ", "INTERNAL_TYPE|STATUTE", ALWAYS, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|legislation", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups hearing[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - series editor */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */
- { "PY", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Research Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Deprecated */
- { "Y2", "DATE:MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */
- { " ", "INTERNAL_TYPE|HEARING", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:BIBUTILS|hearing", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups cases[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - series editor */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */
- { "PY", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Research Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Deprecated */
- { "Y2", "DATE:MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */
- { " ", "INTERNAL_TYPE|CASE", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|legal case and case notes", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups communication[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "ADDRESSEE", PERSON, LEVEL_MAIN }, /* SPECIAL */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "GENRE:UKNOWN", GENRE, LEVEL_MAIN }, /* Misc or Number? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */
- { "PY", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Research Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Deprecated */
- { "Y2", "DATE:MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */
- { " ", "INTERNAL_TYPE|ARTICLE", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:BIBUTILS|communication", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups thesis[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", SIMPLE, LEVEL_MAIN }, /* Misc or Number? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */
- { "PY", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Research Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Deprecated */
- { "Y2", "DATE:MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */
- { " ", "INTERNAL_TYPE|THESIS", ALWAYS, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|thesis", ALWAYS, LEVEL_MAIN },
-};
-
-static lookups report[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", SIMPLE, LEVEL_MAIN }, /* Misc or Number? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */
- { "PY", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Research Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Deprecated */
- { "Y2", "DATE:MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */
- { " ", "INTERNAL_TYPE|REPORT", ALWAYS, LEVEL_MAIN },
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|technical report", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups abstract[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", SIMPLE, LEVEL_MAIN }, /* Misc or Number? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */
- { "PY", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Research Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Deprecated */
- { "Y2", "DATE:MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */
- { " ", "GENRE:MARC|abstract or summary", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups program[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", SIMPLE, LEVEL_MAIN }, /* Misc or Number? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */
- { "PY", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Research Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Deprecated */
- { "Y2", "DATE:MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */
- { " ", "RESOURCE|software, multimedia", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups patent[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */
- { "PY", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Research Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Deprecated */
- { "Y2", "DATE:MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|patent", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups electric[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */
- { "PY", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Research Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Deprecated */
- { "Y2", "DATE:MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */
- { " ", "RESOURCE|software, multimedia", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|electronic", ALWAYS, LEVEL_MAIN },
-};
-
-static lookups pamphlet[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */
- { "PY", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Research Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Deprecated */
- { "Y2", "DATE:MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:BIBUTILS|pamphlet", ALWAYS, LEVEL_MAIN },
-};
-
-static lookups map[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "BT", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Name of Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachments (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Number? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */
- { "PY", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Resarch Notes -> Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Deprecated? */
- { "Y2", "DATE:MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */
- { " ", "RESOURCE|cartographic", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:MARC|map", ALWAYS, LEVEL_MAIN }
-};
-
-static lookups unpublished[] = {
- { "A1", "AUTHOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "A2", "AUTHOR", PERSON, LEVEL_HOST }, /* 'Secondary' Author */
- { "A3", "EDITOR", PERSON, LEVEL_SERIES }, /* 'Tertiary' Author - Series editor */
- { "A4", "AUTHOR", PERSON, LEVEL_SERIES }, /* 'Subsidiary' Author */
- { "AB", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Abstract */
- { "AD", "ADDRESS:AUTHOR",SIMPLE, LEVEL_MAIN }, /* Author Address */
- { "AU", "AUTHOR", PERSON, LEVEL_MAIN }, /* Author */
- { "BT", "TITLE", SIMPLE, LEVEL_MAIN }, /* Book Title - Deprecated? */
- { "C1", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C2", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C3", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C4", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C5", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C6", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C7", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "C8", "NOTES", NOTES, LEVEL_MAIN }, /* 'Custom' - put in "notes" */
- { "CA", "CAPTION", SIMPLE, LEVEL_MAIN }, /* Caption */
- { "CN", "CALLNUMBER", SIMPLE, LEVEL_MAIN }, /* Call Number */
- { "CP", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CT", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "CY", "ADDRESS", SIMPLE, LEVEL_MAIN }, /* Place Published */
- { "DA", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Date */
- { "DB", "DATABASE", SIMPLE, LEVEL_MAIN }, /* Database */
- { "DI", "DOI", DOI, LEVEL_MAIN }, /* Deprecated? */
- { "DO", "DOI", DOI, LEVEL_MAIN }, /* DOI */
- { "DP", "DATABASEPROV", SIMPLE, LEVEL_MAIN }, /* Database Provider */
- { "ED", "EDITOR", PERSON, LEVEL_MAIN }, /* Deprecated? */
- { "EP", "PAGES:STOP", SIMPLE, LEVEL_MAIN }, /* End Page */
- { "ET", "EDITION", SIMPLE, LEVEL_MAIN }, /* Edition */
- { "ID", "REFNUM", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "IS", "ISSUE", SIMPLE, LEVEL_MAIN }, /* Number */
- { "J1", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "J2", "TITLE", SIMPLE, LEVEL_HOST }, /* Alternate Title, abbreviated book or journal */
- { "JA", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JF", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "JO", "TITLE", SIMPLE, LEVEL_HOST }, /* Deprecated? */
- { "KW", "KEYWORD", SIMPLE, LEVEL_MAIN }, /* Keywords */
- { "L1", "FILEATTACH", LINKEDFILE, LEVEL_MAIN }, /* File Attachment (local, not URL) */
- { "L4", "FIGATTACH", LINKEDFILE, LEVEL_MAIN }, /* Figure Attachment (local, not URL) */
- { "LA", "LANGUAGE", SIMPLE, LEVEL_MAIN }, /* Language */
- { "LB", "LABEL", SIMPLE, LEVEL_MAIN }, /* Label */
- { "M1", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M2", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Deprecated? */
- { "M3", "NOTES", NOTES, LEVEL_MAIN }, /* Misc or Type of Work? */
- { "N1", "NOTES", NOTES, LEVEL_MAIN }, /* Notes */
- { "N2", "ABSTRACT", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "NV", "NUMVOLUMES", SIMPLE, LEVEL_MAIN }, /* Number of Volumes */
- { "OP", "ORIGPUB", SIMPLE, LEVEL_MAIN }, /* Original Publication */
- { "PB", "PUBLISHER", SIMPLE, LEVEL_MAIN }, /* Publisher */
- { "PY", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Year */
- { "RI", "REVIEWEDITEM", SIMPLE, LEVEL_MAIN }, /* Reviewed Item */
- { "RN", "NOTES", NOTES, LEVEL_MAIN }, /* Research Notes */
- { "RP", "REPRINTSTATUS",SIMPLE, LEVEL_MAIN }, /* Reprint Edition */
- { "SE", "SECTION", SIMPLE, LEVEL_MAIN }, /* Section */
- { "SN", "SERIALNUMBER", SERIALNO,LEVEL_MAIN }, /* ISBN/ISSN */
- { "SP", "PAGES:START", SIMPLE, LEVEL_MAIN }, /* Start Page */
- { "ST", "SHORTTITLE", SIMPLE, LEVEL_MAIN }, /* Short Title */
- { "T1", "TITLE", TITLE, LEVEL_MAIN }, /* Deprecated? */
- { "T2", "SHORTTITLE", SIMPLE, LEVEL_HOST }, /* 'Secondary' Title */
- { "T3", "TITLE", SIMPLE, LEVEL_SERIES }, /* 'Tertiary' Title */
- { "TI", "TITLE", TITLE, LEVEL_MAIN }, /* Title */
- { "TT", "TRANSTITLE", TITLE, LEVEL_MAIN }, /* Translated Title */
- { "U1", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U2", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U3", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U4", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "U5", "NOTES", NOTES, LEVEL_MAIN }, /* 'User' - Deprecated? */
- { "UR", "URL", URL, LEVEL_MAIN }, /* URL */
- { "VL", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Volume */
- { "VO", "VOLUME", SIMPLE, LEVEL_MAIN }, /* Deprecated? */
- { "Y1", "DATE:YEAR", DATE, LEVEL_MAIN }, /* Deprecated */
- { "Y2", "DATE:MONTH", SIMPLE, LEVEL_MAIN }, /* Access Date */
- { " ", "RESOURCE|text", ALWAYS, LEVEL_MAIN },
- { " ", "GENRE:BIBUTILS|unpublished", ALWAYS, LEVEL_MAIN }
-};
-
-#define ORIG(a) ( &(a[0]) )
-#define SIZE(a) ( sizeof( a ) / sizeof( lookups ) )
-#define REFTYPE(a,b) { a, ORIG(b), SIZE(b) }
-
-variants ris_all[] = {
- REFTYPE( "STD", generic ),
- REFTYPE( "GEN", generic ),
- REFTYPE( "JOUR", article ),
- REFTYPE( "MGZN", magarticle ),
- REFTYPE( "BOOK", book ),
- REFTYPE( "CHAP", inbook ),
- REFTYPE( "CONF", conference ),
- REFTYPE( "STAT", statute ),
- REFTYPE( "HEAR", hearing ),
- REFTYPE( "CASE", cases ),
- REFTYPE( "NEWS", newsarticle ),
- REFTYPE( "MPCT", generic ),
- REFTYPE( "PCOMM", communication ),
- REFTYPE( "PAMP", pamphlet ),
- REFTYPE( "ELEC", electric ),
- REFTYPE( "THES", thesis ),
- REFTYPE( "RPRT", report ),
- REFTYPE( "ABST", abstract ),
- REFTYPE( "COMP", program ),
- REFTYPE( "PAT", patent ),
- REFTYPE( "MAP", map ),
- REFTYPE( "UNPB", unpublished ),
-};
-
-int ris_nall = sizeof( ris_all ) / sizeof( variants );
-
diff --git a/support/texlab/crates/bibutils_sys/src/serialno.c b/support/texlab/crates/bibutils_sys/src/serialno.c
deleted file mode 100644
index 77e09b456d..0000000000
--- a/support/texlab/crates/bibutils_sys/src/serialno.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- * serialno.c
- *
- * Copyright (c) Chris Putnam 2005-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <string.h>
-#include "serialno.h"
-#include "msvc_fix.h"
-
-int
-addsn( fields *info, char *buf, int level )
-{
- int ndigits, issn=0, isbn=0, isbn10=0, isbn13=0, status;
- char *p = buf, *tag;
-
- if ( !strncasecmp( p, "ISSN", 4 ) ) issn=1;
- else if ( !strncasecmp( p, "ISBN", 4 ) ) isbn=1;
-
- if ( isbn ) {
- ndigits = 0;
- while ( *p && !(ndigits && (*p==';'||*p==':')) ) {
- if ( ( *p>='0' && *p<='9' ) || *p=='x' || *p=='X' )
- ndigits++;
- p++;
- }
- if ( ndigits==13 ) isbn13 = 1;
- else /* ( ndigits==10) */ isbn10 = 1;
- }
-
- if ( !issn && !isbn ) {
- /* a lot have semicolons between multiple ISBN's for
- paperbacks and hardbacks with different numbers */
- ndigits = 0;
- while ( *p && !(ndigits && (*p==';'||*p==':')) ) {
- if ( ( *p>='0' && *p<='9' ) || *p=='x' || *p=='X' )
- ndigits++;
- p++;
- }
- if ( ndigits==8 ) issn = 1;
- else if ( ndigits==10 ) isbn10 = 1;
- else if ( ndigits==13 ) isbn13 = 1;
- }
-
- if ( issn ) tag = "ISSN";
- else if ( isbn10 ) tag = "ISBN";
- else if ( isbn13 ) tag = "ISBN13";
- else tag = "SERIALNUMBER";
-
- status = fields_add( info, tag, buf, level );
-
- if ( status==FIELDS_OK ) return 1;
- else return 0;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/serialno.h b/support/texlab/crates/bibutils_sys/src/serialno.h
deleted file mode 100644
index ccd4c35052..0000000000
--- a/support/texlab/crates/bibutils_sys/src/serialno.h
+++ /dev/null
@@ -1,16 +0,0 @@
-/*
- * serialno.h
- *
- * Copyright (c) Chris Putnam 2005-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef SERIALNO_H
-#define SERIALNO_H
-
-#include "fields.h"
-
-int addsn( fields *info, char *buf, int level );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/slist.c b/support/texlab/crates/bibutils_sys/src/slist.c
deleted file mode 100644
index 5382e4b7df..0000000000
--- a/support/texlab/crates/bibutils_sys/src/slist.c
+++ /dev/null
@@ -1,946 +0,0 @@
-/*
- * slist.c
- *
- * version: 2019-01-14
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Source code released under the GPL version 2
- *
- * Implements a simple managed array of strs.
- *
- */
-#include "slist.h"
-
-/* Do not use asserts in VPLIST_NOASSERT defined */
-#ifdef VPLIST_NOASSERT
-#define NDEBUG
-#endif
-#include <assert.h>
-
-#define SLIST_MINALLOC (20)
-
-#define SLIST_EXACT_SIZE (0)
-#define SLIST_DOUBLE_SIZE (1)
-
-/*
- * returns 1 if n is valid string in slist
- */
-static inline int
-slist_valid_num( slist *a, slist_index n )
-{
- if ( n < 0 || n >= a->n ) return 0;
- return 1;
-}
-
-void
-slist_init( slist *a )
-{
- assert( a );
-
- a->strs = NULL;
- a->max = 0;
- a->n = 0;
- a->sorted = 1;
-}
-
-int
-slist_init_values( slist *a, ... )
-{
- int status = SLIST_OK;
- va_list ap;
- str *s;
-
- slist_init( a );
-
- va_start( ap, a );
- do {
- s = va_arg( ap, str * );
- if ( s ) {
- status = slist_add( a, s );
- if ( status!=SLIST_OK ) goto out;
- }
- } while ( s );
-out:
- va_end( ap );
-
- return status;
-}
-
-int
-slist_init_valuesc( slist *a, ... )
-{
- int status = SLIST_OK;
- va_list ap;
- char *s;
-
- slist_init( a );
-
- va_start( ap, a );
- do {
- s = va_arg( ap, char * );
- if ( s ) {
- status = slist_addc( a, s );
- if ( status!=SLIST_OK ) goto out;
- }
- } while ( s );
-out:
- va_end( ap );
-
- return status;
-}
-
-void
-slist_empty( slist *a )
-{
- slist_index i;
-
- assert( a );
-
- for ( i=0; i<a->max; ++i )
- str_empty( &(a->strs[i]) );
-
- a->n = 0;
- a->sorted = 1;
-}
-
-void
-slist_free( slist *a )
-{
- slist_index i;
-
- assert( a );
-
- for ( i=0; i<a->max; ++i )
- str_free( &(a->strs[i]) );
-
- free( a->strs );
- slist_init( a );
-}
-
-slist *
-slist_new( void )
-{
- slist *a;
-
- a = ( slist * ) malloc( sizeof ( slist ) );
- if ( a ) slist_init( a );
-
- return a;
-}
-
-void
-slist_delete( slist *a )
-{
- assert( a );
-
- slist_free( a );
- free( a );
-}
-
-void
-slist_deletev( void *v )
-{
- slist_delete( (slist*) v );
-}
-
-void
-slist_swap( slist *a, slist_index n1, slist_index n2 )
-{
- assert( a );
-
- if ( slist_valid_num( a, n1 ) && slist_valid_num( a, n2 ) )
- str_swapstrings( &(a->strs[n1]), &(a->strs[n2]) );
-}
-
-static int
-slist_revcomp( const void *v1, const void *v2 )
-{
- str *s1 = ( str *) v1;
- str *s2 = ( str *) v2;
- int n;
-
- if ( !s1->len && !s2->len ) return 0;
- else if ( !s1->len ) return 1;
- else if ( !s2->len ) return -1;
-
- n = str_strcmp( s1, s2 );
- if ( n==0 ) return 0;
- else if ( n > 0 ) return -1;
- else return 1;
-}
-
-static int
-slist_comp( const void *v1, const void *v2 )
-{
- str *s1 = ( str *) v1;
- str *s2 = ( str *) v2;
- if ( !s1->len && !s2->len ) return 0;
- else if ( !s1->len ) return -1;
- else if ( !s2->len ) return 1;
- else return str_strcmp( s1, s2 );
-}
-
-static int
-slist_comp_step( slist *a, slist_index n1, slist_index n2 )
-{
- return slist_comp( (const void*) &(a->strs[n1]), (const void*) &(a->strs[n2]) );
-}
-
-static str *
-slist_set_cleanup( slist *a, slist_index n )
-{
- if ( str_memerr( &(a->strs[n]) ) ) return NULL;
- if ( a->sorted ) {
- if ( n>0 && slist_comp_step( a, n-1, n )>0 )
- a->sorted = 0;
- }
- if ( a->sorted ) {
- if ( n<a->n-1 && slist_comp_step( a, n, n+1 )>0 )
- a->sorted = 0;
- }
- return &(a->strs[n]);
-}
-
-str *
-slist_setc( slist *a, slist_index n, const char *s )
-{
- assert( a );
- assert( s );
-
- if ( !slist_valid_num( a, n ) ) return NULL;
- str_strcpyc( &(a->strs[n]), s );
- return slist_set_cleanup( a, n );
-}
-
-str *
-slist_set( slist *a, slist_index n, str *s )
-{
- assert( s );
-
- return slist_setc( a, n, str_cstr( s ) );
-}
-
-/*
- * return pointer to str 'n'
- */
-str *
-slist_str( slist *a, slist_index n )
-{
- assert( a );
-
- if ( !slist_valid_num( a, n ) ) return NULL;
- else return &(a->strs[n]);
-}
-
-/*
- * return pointer to C string 'n'
- *
- * So long as the index is a valid number ensure
- * that a pointer is returned even if the newstr isn't
- * allocated. Only return NULL if the index
- * is invalid. Thus we can convert loops like:
- *
- * for ( i=0; i<a->n; ++i ) {
- * p = slist_cstr( a, i );
- * if ( p==NULL ) continue; // empty string
- * ...
- * }
- *
- * to
- *
- * i = 0;
- * while ( ( p = slist_cstr( a, i ) ) ) {
- * ...
- * i++;
- * }
- *
- */
-char *
-slist_cstr( slist *a, slist_index n )
-{
- static char empty[] = "";
- char *p;
-
- assert( a );
-
- if ( !slist_valid_num( a, n ) ) return NULL;
- p = str_cstr( &(a->strs[n]) );
- if ( p ) return p;
- else return empty;
-}
-
-static inline int
-slist_alloc( slist *a, slist_index alloc )
-{
- slist_index i;
-
- a->strs = ( str* ) malloc( sizeof( str ) * alloc );
- if ( !(a->strs) ) return SLIST_ERR_MEMERR;
-
- a->max = alloc;
- a->n = 0;
-
- for ( i=0; i<alloc; ++i )
- str_init( &(a->strs[i]) );
-
- return SLIST_OK;
-}
-
-static inline int
-slist_realloc( slist *a, slist_index alloc )
-{
- slist_index i;
- str *more;
-
- more = ( str* ) realloc( a->strs, sizeof( str ) * alloc );
- if ( !more ) return SLIST_ERR_MEMERR;
-
- a->strs = more;
-
- for ( i=a->max; i<alloc; ++i )
- str_init( &(a->strs[i]) );
-
- a->max = alloc;
-
- return SLIST_OK;
-}
-
-#define SLIST_EXACT_SIZE (0)
-#define SLIST_DOUBLE_SIZE (1)
-
-static int
-slist_ensure_space( slist *a, slist_index n, int mode )
-{
- int status = SLIST_OK;
- int alloc = n;
-
- if ( a->max==0 ) {
- if ( mode == SLIST_DOUBLE_SIZE && alloc < SLIST_MINALLOC ) alloc = SLIST_MINALLOC;
- status = slist_alloc( a, alloc );
- }
-
- else if ( a->max < n ) {
- if ( mode == SLIST_DOUBLE_SIZE && alloc < a->max * 2 ) alloc = a->max * 2;
- status = slist_realloc( a, alloc );
- }
-
- return status;
-}
-
-int
-slist_addvp( slist *a, int mode, void *vp )
-{
- str *s = NULL;
- int status;
-
- status = slist_ensure_space( a, a->n+1, SLIST_DOUBLE_SIZE );
-
- if ( status==SLIST_OK ) {
-
- s = &( a->strs[a->n] );
-
- if ( mode==SLIST_CHR )
- str_strcpyc( s, (const char*) vp );
- else
- str_strcpy( s, (str*) vp );
-
- if ( str_memerr( s ) ) return SLIST_ERR_MEMERR;
- a->n++;
- if ( a->sorted && a->n > 1 ) {
- if ( slist_comp_step( a, a->n-2, a->n-1 ) > 0 )
- a->sorted = 0;
- }
-
- }
-
- return SLIST_OK;
-}
-int
-slist_addc( slist *a, const char *s )
-{
- return slist_addvp( a, SLIST_CHR, (void*)s );
-}
-int
-slist_add( slist *a, str *s )
-{
- return slist_addvp( a, SLIST_STR, (void*)s );
-}
-
-int
-slist_addvp_ret( slist *a, int mode, void *vp, int retok, int reterr )
-{
- int status = slist_addvp( a, mode, vp );
- if ( status==SLIST_OK ) return retok;
- else return reterr;
-}
-int
-slist_addc_ret( slist *a, const char *value, int retok, int reterr )
-{
- int status = slist_addc( a, value );
- if ( status==SLIST_OK ) return retok;
- else return reterr;
-}
-int
-slist_add_ret( slist *a, str *value, int retok, int reterr )
-{
- int status = slist_add( a, value );
- if ( status==SLIST_OK ) return retok;
- else return reterr;
-}
-
-int
-slist_addvp_unique( slist *a, int mode, void *vp )
-{
- int n;
-
- if ( mode==SLIST_CHR )
- n = slist_findc( a, (const char*) vp );
- else
- n = slist_find( a, (str*) vp );
-
- if ( slist_wasfound( a, n ) )
- return SLIST_OK;
- else
- return slist_addvp( a, mode, vp );
-}
-int
-slist_addc_unique( slist *a, const char *s )
-{
- return slist_addvp_unique( a, SLIST_CHR, (void*)s );
-}
-int
-slist_add_unique( slist *a, str *s )
-{
- return slist_addvp_unique( a, SLIST_STR, (void*)s );
-}
-
-int
-slist_addvp_unique_ret( slist *a, int mode, void *vp, int retok, int reterr )
-{
- int status = slist_addvp_unique( a, mode, vp );
- if ( status==SLIST_OK ) return retok;
- else return reterr;
-}
-int
-slist_addc_unique_ret( slist *a, const char *s, int retok, int reterr )
-{
- int status = slist_addc_unique( a, s );
- if ( status==SLIST_OK ) return retok;
- else return reterr;
-}
-int
-slist_add_unique_ret( slist *a, str *s, int retok, int reterr )
-{
- int status = slist_add_unique( a, s );
- if ( status==SLIST_OK ) return retok;
- else return reterr;
-}
-
-int
-slist_addvp_all( slist *a, int mode, ... )
-{
- int status = SLIST_OK;
- va_list ap;
- void *v;
-
- va_start( ap, mode );
-
- do {
-
- if ( mode==SLIST_CHR )
- v = va_arg( ap, char * );
- else
- v = va_arg( ap, str * );
-
- if ( v ) {
- status = slist_addvp( a, mode, v );
- if ( status!=SLIST_OK ) goto out;
- }
-
- } while ( v );
-
-out:
- va_end( ap );
- return status;
-}
-
-int
-slist_add_all( slist *a, ... )
-{
- int status = SLIST_OK;
- va_list ap;
- str *v;
-
- va_start( ap, a );
-
- do {
- v = va_arg( ap, str * );
-
- if ( v ) {
- status = slist_addvp( a, SLIST_STR, (void*)v );
- if ( status!=SLIST_OK ) goto out;
- }
-
- } while ( v );
-out:
- va_end( ap );
- return status;
-}
-
-int
-slist_addc_all( slist *a, ... )
-{
- int status = SLIST_OK;
- const char *v;
- va_list ap;
-
- va_start( ap, a );
-
- do {
-
- v = va_arg( ap, const char * );
-
- if ( v ) {
- status = slist_addvp( a, SLIST_CHR, (void*)v );
- if ( status!=SLIST_OK ) goto out;
- }
-
- } while ( v );
-out:
- va_end( ap );
- return status;
-}
-
-int
-slist_append( slist *a, slist *toadd )
-{
- int i, status;
-
- assert( a );
- assert( toadd );
-
- status = slist_ensure_space( a, a->n + toadd->n, SLIST_EXACT_SIZE );
-
- if ( status == SLIST_OK ) {
-
- for ( i=0; i<toadd->n; ++i ) {
- str_strcpy( &(a->strs[a->n+i]), &(toadd->strs[i]) );
- if ( str_memerr( &(a->strs[a->n+i]) ) ) return SLIST_ERR_MEMERR;
- }
-
- if ( a->sorted && toadd->sorted == 0 ) a->sorted = 0;
- if ( a->sorted && a->n > 0 ) {
- if ( slist_comp_step( a, a->n-1, a->n ) > 0 ) {
- a->sorted = 0;
- }
- }
-
- a->n += toadd->n;
-
- }
-
- return status;
-}
-
-int
-slist_append_unique( slist *a, slist *toadd )
-{
- int i, status;
-
- assert( a );
- assert( toadd );
-
- for ( i=0; i<toadd->n; ++i ) {
- status = slist_add_unique( a, &(toadd->strs[i]) );
- if ( status!=SLIST_OK ) return status;
- }
-
- return SLIST_OK;
-}
-
-int
-slist_append_ret( slist *a, slist *toadd, int retok, int reterr )
-{
- int status;
-
- status = slist_append( a, toadd );
- if ( status==SLIST_OK ) return retok;
- else return reterr;
-}
-
-int
-slist_append_unique_ret( slist *a, slist *toadd, int retok, int reterr )
-{
- int status;
-
- status = slist_append_unique( a, toadd );
- if ( status==SLIST_OK ) return retok;
- else return reterr;
-}
-
-int
-slist_remove( slist *a, slist_index n )
-{
- int i;
-
- assert( a );
-
- if ( !slist_valid_num( a, n ) ) return SLIST_ERR_BADPARAM;
-
- for ( i=n+1; i<a->n; ++i ) {
- str_strcpy( &(a->strs[i-1]), &(a->strs[i]) );
- if ( str_memerr( &(a->strs[i-1]) ) ) return SLIST_ERR_MEMERR;
- }
-
- a->n--;
-
- return SLIST_OK;
-}
-
-void
-slist_sort( slist *a )
-{
- qsort( a->strs, a->n, sizeof( str ), slist_comp );
- a->sorted = 1;
-}
-
-void
-slist_revsort( slist *a )
-{
- qsort( a->strs, a->n, sizeof( str ), slist_revcomp );
- a->sorted = 0;
-}
-
-static slist_index
-slist_find_sorted( slist *a, const char *searchstr )
-{
- slist_index min, max, mid;
- str s, *cs;
- int comp;
-
- assert( a );
- assert( searchstr );
-
- str_initstrc( &s, searchstr );
- min = 0;
- max = a->n - 1;
- while ( min <= max ) {
- mid = ( min + max ) / 2;
- cs = slist_str( a, mid );
- comp = slist_comp( (void*)cs, (void*) (&s) );
- if ( comp==0 ) {
- str_free( &s );
- return mid;
- }
- else if ( comp > 0 ) max = mid - 1;
- else if ( comp < 0 ) min = mid + 1;
- }
- str_free( &s );
- return -1;
-}
-
-static slist_index
-slist_find_simple( slist *a, const char *searchstr, int nocase )
-{
- slist_index i;
-
- assert( a );
- assert( searchstr );
-
- if ( nocase ) {
- for ( i=0; i<a->n; ++i )
- if ( !str_strcasecmpc( &(a->strs[i]), searchstr ) )
- return i;
- } else {
- for ( i=0; i<a->n; ++i )
- if ( !str_strcmpc( &(a->strs[i]), searchstr ) )
- return i;
- }
- return -1;
-}
-
-slist_index
-slist_findc( slist *a, const char *searchstr )
-{
- assert( a );
-
- if ( a->n==0 ) return -1;
- if ( a->sorted )
- return slist_find_sorted( a, searchstr );
- else
- return slist_find_simple( a, searchstr, 0 );
-}
-
-slist_index
-slist_find( slist *a, str *searchstr )
-{
- if ( searchstr->len==0 ) return -1;
- return slist_findc( a, str_cstr( searchstr ) );
-}
-
-slist_index
-slist_findnocasec( slist *a, const char *searchstr )
-{
- assert( a );
-
- return slist_find_simple( a, searchstr, 1 );
-}
-
-slist_index
-slist_findnocase( slist *a, str *searchstr )
-{
- if ( searchstr->len==0 ) return -1;
- return slist_findnocasec( a, str_cstr( searchstr ) );
-}
-
-int
-slist_wasfound( slist *a, slist_index n )
-{
- return ( n!=-1 );
-}
-
-int
-slist_wasnotfound( slist *a, slist_index n )
-{
- return ( n==-1 );
-}
-
-int
-slist_fillfp( slist *a, FILE *fp, unsigned char skip_blank_lines )
-{
- int status, ret = SLIST_OK;
- str line;
-
- assert( a );
- assert( fp );
-
- slist_empty( a );
- str_init( &line );
-
- while ( str_fgetline( &line, fp ) ) {
- if ( skip_blank_lines && line.len==0 ) continue;
- status = slist_add( a, &line );
- if ( status!=SLIST_OK ) {
- ret = SLIST_ERR_MEMERR;
- goto out;
- }
- }
-
-out:
- str_free( &line );
- return ret;
-}
-
-int
-slist_fill( slist *a, const char *filename, unsigned char skip_blank_lines )
-{
- FILE *fp;
- int ret;
-
- fp = fopen( filename, "r" );
- if ( !fp ) return SLIST_ERR_CANTOPEN;
-
- ret = slist_fillfp( a, fp, skip_blank_lines );
-
- fclose( fp );
-
- return ret;
-}
-
-int
-slist_copy( slist *to, slist *from )
-{
- slist_index i;
- int status;
-
- assert( to );
- assert( from );
-
- slist_free( to );
-
- if ( from->n==0 ) return SLIST_OK;
-
- status = slist_ensure_space( to, from->n, SLIST_EXACT_SIZE );
-
- if ( status == SLIST_OK ) {
-
- to->sorted = from->sorted;
- to->n = from->n;
-
- for ( i=0; i<from->n; i++ ) {
- str_strcpy( &(to->strs[i]), &(from->strs[i]) );
- if ( str_memerr( &(to->strs[i]) ) ) return SLIST_ERR_MEMERR;
- }
-
- }
- return SLIST_OK;
-}
-
-int
-slist_copy_ret( slist *to, slist *from, int retok, int reterr )
-{
- int status = slist_copy( to, from );
- if ( status==SLIST_OK ) return retok;
- else return reterr;
-}
-
-slist *
-slist_dup( slist *from )
-{
- int status;
- slist *to;
-
- to = slist_new();
- if ( to ) {
- status = slist_copy( to, from );
- if ( status!=SLIST_OK ) {
- slist_delete( to );
- to = NULL;
- }
- }
-
- return to;
-}
-
-unsigned long
-slist_get_maxlen( slist *a )
-{
- unsigned long max = 0;
- slist_index i;
- str *s;
-
- assert( a );
-
- for ( i=0; i<a->n; ++i ) {
- s = slist_str( a, i );
- if ( s->len > max ) max = s->len;
- }
-
- return max;
-}
-
-void
-slist_dump( slist *a, FILE *fp, int newline )
-{
- slist_index i;
-
- assert( a );
- assert( fp );
-
- if ( newline ) {
- for ( i=0; i<a->n; ++i )
- fprintf( fp, "%s\n", slist_cstr( a, i ) );
- }
-
- else {
- for ( i=0; i<a->n; ++i )
- fprintf( fp, "%s", slist_cstr( a, i ) );
- }
-}
-
-int
-slist_match_entry( slist *a, int n, const char *s )
-{
- assert( a );
-
- if ( !slist_valid_num( a, n ) ) return 0;
- if ( str_strcmpc( &(a->strs[n]), s ) ) return 0;
- return 1;
-}
-
-void
-slist_trimend( slist *a, int n )
-{
- slist_index i;
-
- assert( a );
-
- if ( a->n - n < 1 ) {
- slist_empty( a );
- } else {
- for ( i=a->n -n; i<a->n; ++i ) {
- str_empty( &(a->strs[i]) );
- }
- a->n -= n;
- }
-}
-
-int
-slist_tokenizec( slist *tokens, char *p, const char *delim, int merge_delim )
-{
- int status, ret = SLIST_OK;
- char *q;
- str s;
-
- assert( tokens );
-
- slist_empty( tokens );
- str_init( &s );
- while ( p && *p ) {
- q = p;
- while ( *q && !strchr( delim, *q ) ) q++;
- str_segcpy( &s, p, q );
- if ( str_memerr( &s ) ) { ret = SLIST_ERR_MEMERR; goto out; }
- if ( s.len ) {
- status = slist_addvp( tokens, SLIST_STR, (void*) &s );
- if ( status!=SLIST_OK ) { ret = SLIST_ERR_MEMERR; goto out; }
- } else if ( !merge_delim ) {
- status = slist_addvp( tokens, SLIST_CHR, (void*) "" );
- if ( status!=SLIST_OK ) { ret = SLIST_ERR_MEMERR; goto out; }
- }
- p = q;
- if ( *p ) p++;
- }
-out:
- str_free( &s );
- return ret;
-}
-
-int
-slist_tokenize( slist *tokens, str *in, const char *delim, int merge_delim )
-{
- return slist_tokenizec( tokens, str_cstr( in ), delim, merge_delim );
-}
-
-void
-slists_init( slist *a, ... )
-{
- slist *a2;
- va_list ap;
- slist_init( a );
- va_start( ap, a );
- do {
- a2 = va_arg( ap, slist * );
- if ( a2 ) slist_init( a2 );
- } while ( a2 );
- va_end( ap );
-}
-
-void
-slists_free( slist *a, ... )
-{
- slist *a2;
- va_list ap;
- slist_free( a );
- va_start( ap, a );
- do {
- a2 = va_arg( ap, slist * );
- if ( a2 ) slist_free( a2 );
- } while ( a2 );
- va_end( ap );
-}
-
-void
-slists_empty( slist *a, ... )
-{
- slist *a2;
- va_list ap;
- slist_empty( a );
- va_start( ap, a );
- do {
- a2 = va_arg( ap, slist * );
- if ( a2 ) slist_empty( a2 );
- } while ( a2 );
- va_end( ap );
-}
diff --git a/support/texlab/crates/bibutils_sys/src/slist.h b/support/texlab/crates/bibutils_sys/src/slist.h
deleted file mode 100644
index e63f7e404a..0000000000
--- a/support/texlab/crates/bibutils_sys/src/slist.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * slist.h
- *
- * version: 2019-01-14
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Source code released under the GPL version 2
- *
- */
-
-#ifndef SLIST_H
-#define SLIST_H
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include "str.h"
-
-#define SLIST_OK (0)
-#define SLIST_ERR_MEMERR (-1)
-#define SLIST_ERR_CANTOPEN (-2)
-#define SLIST_ERR_BADPARAM (-3)
-
-#define SLIST_CHR (0)
-#define SLIST_STR (1)
-
-typedef int slist_index;
-
-typedef struct slist {
- slist_index n, max;
- int sorted;
- str *strs;
-} slist;
-
-
-void slists_init( slist *a, ... );
-void slists_free( slist *a, ... );
-void slists_empty( slist *a, ... );
-
-
-void slist_init( slist *a );
-int slist_init_values ( slist *a, ... );
-int slist_init_valuesc( slist *a, ... );
-void slist_free( slist *a );
-void slist_empty( slist *a );
-
-slist * slist_new( void );
-void slist_delete( slist * );
-void slist_deletev( void *v );
-
-slist * slist_dup( slist *a );
-int slist_copy( slist *to, slist *from );
-int slist_copy_ret( slist *to, slist *from, int retok, int reterr );
-void slist_swap( slist *a, slist_index n1, slist_index n2 );
-
-int slist_addvp( slist *a, int mode, void *vp );
-int slist_addc( slist *a, const char *value );
-int slist_add( slist *a, str *value );
-
-int slist_addvp_ret( slist *a, int mode, void *vp, int retok, int reterr );
-int slist_addc_ret( slist *a, const char *value, int retok, int reterr );
-int slist_add_ret( slist *a, str *value, int retok, int reterr );
-
-int slist_addvp_all( slist *a, int mode, ... );
-int slist_addc_all( slist *a, ... );
-int slist_add_all( slist *a, ... );
-
-int slist_addvp_unique( slist *a, int mode, void *vp );
-int slist_addc_unique( slist *a, const char *value );
-int slist_add_unique( slist *a, str *value );
-
-int slist_addvp_unique_ret( slist *a, int mode, void *vp, int retok, int reterr );
-int slist_addc_unique_ret( slist *a, const char *value, int retok, int reterr );
-int slist_add_unique_ret( slist *a, str *value, int retok, int reterr );
-
-int slist_append( slist *a, slist *toadd );
-int slist_append_ret( slist *a, slist *toadd, int retok, int reterr );
-int slist_append_unique( slist *a, slist *toadd );
-int slist_append_unique_ret( slist *a, slist *toadd, int retok, int reterr );
-
-int slist_remove( slist *a, slist_index n );
-
-str * slist_str( slist *a, slist_index n );
-char * slist_cstr( slist *a, slist_index n );
-
-str * slist_set( slist *a, slist_index n, str *s );
-str * slist_setc( slist *a, slist_index n, const char *s );
-
-void slist_sort( slist *a );
-void slist_revsort( slist *a );
-
-int slist_find( slist *a, str *searchstr );
-int slist_findc( slist *a, const char *searchstr );
-int slist_findnocase( slist *a, str *searchstr );
-int slist_findnocasec( slist *a, const char *searchstr );
-int slist_wasfound( slist *a, slist_index n );
-int slist_wasnotfound( slist *a, slist_index n );
-
-int slist_match_entry( slist *a, slist_index n, const char *s );
-void slist_trimend( slist *a, slist_index n );
-
-unsigned long slist_get_maxlen( slist *a );
-void slist_dump( slist *a, FILE *fp, int newline );
-
-int slist_fill( slist *a, const char *filename, unsigned char skip_blank_lines );
-int slist_fillfp( slist *a, FILE *fp, unsigned char skip_blank_lines );
-int slist_tokenize( slist *tokens, str *in, const char *delim, int merge_delim );
-int slist_tokenizec( slist *tokens, char *p, const char *delim, int merge_delim );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/str.c b/support/texlab/crates/bibutils_sys/src/str.c
deleted file mode 100644
index 75b76bce70..0000000000
--- a/support/texlab/crates/bibutils_sys/src/str.c
+++ /dev/null
@@ -1,1126 +0,0 @@
-/*
- * str.c
- *
- * Version: 2018-09-21
- *
- * Copyright (c) Chris Putnam 1999-2019
- *
- * Source code released under the GPL version 2
- *
- *
- * routines for dynamically allocated strings
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <ctype.h>
-#include <limits.h>
-#include "is_ws.h"
-#include "str.h"
-#include "msvc_fix.h"
-
-/* Do not use asserts in STR_NOASSERT defined */
-#ifdef STR_NOASSERT
-#define NDEBUG
-#endif
-#include <assert.h>
-
-#define str_initlen (64)
-
-#ifndef STR_SMALL
-
-#define str_clear_status( s ) s->status = STR_OK;
-#define handle_memerr( s, f ) s->status = STR_MEMERR;
-#define return_if_memerr( s ) \
-{ \
- if ( s->status != STR_OK ) return; \
-}
-#define return_zero_if_memerr( s ) \
-{ \
- if ( s->status != STR_OK ) return 0; \
-}
-#define return_after_delim_if_memerr( s, p, delim, finalstep ) \
-{ \
- if ( s->status != STR_OK ) { \
- while ( p && *p && !strchr( delim, *p ) ) p++; \
- if ( p && *p && finalstep ) p++; \
- return p; \
- } \
-}
-
-#else
-
-#define str_clear_status( s ) {}
-#define handle_memerr( s, f ) \
-{ \
- fprintf( stderr,"Error. Cannot allocate memory in %s.\n", f ); \
- exit( EXIT_FAILURE ); \
-}
-#define return_if_memerr( s ) {}
-#define return_zero_if_memerr( s ) {}
-#define return_after_delim_if_memerr( s, p, delim, finalstep ) {}
-
-#endif
-
-
-/* Clear memory in resize/free if STR_PARANOIA defined */
-
-#ifndef STR_PARANOIA
-
-static void
-str_realloc( str *s, unsigned long minsize )
-{
- unsigned long size;
- char *newptr;
-
- assert( s );
- return_if_memerr( s );
-
- size = 2 * s->dim;
- if (size < minsize) size = minsize;
-
- newptr = (char *) realloc( s->data, sizeof( *(s->data) )*size );
- if ( !newptr ) handle_memerr( s, __FUNCTION__ );
-
- s->data = newptr;
- s->dim = size;
-}
-
-/* define as a no-op */
-#define str_nullify( s )
-
-#else
-
-static void
-str_realloc( str *s, unsigned long minsize )
-{
- unsigned long size;
- char *newptr;
-
- assert( s );
- return_if_memerr( s );
-
- size = 2 * s->dim;
- if ( size < minsize ) size = minsize;
-
- newptr = (char *) malloc( sizeof( *(s->data) ) * size );
- if ( !newptr ) handle_memerr( s, __FUNCTION__ );
-
- if ( s->data ) {
- str_nullify( s );
- free( s->data );
- }
- s->data = newptr;
- s->dim = size;
-}
-
-static inline void
-str_nullify( str *s )
-{
- memset( s->data, 0, s->dim );
-}
-
-#endif
-
-void
-str_init( str *s )
-{
- assert( s );
- s->dim = 0;
- s->len = 0;
- s->data = NULL;
- str_clear_status( s );
-}
-
-void
-str_initstr( str *s, str *from )
-{
- assert( s );
- assert( from );
- str_init( s );
- str_strcpy( s, from );
-}
-
-void
-str_initstrc( str *s, const char *initstr )
-{
- assert( s );
- assert( initstr );
- str_init( s );
- str_strcpyc( s, initstr );
-}
-
-void
-str_initstrsc( str *s, ... )
-{
- const char *c;
- va_list ap;
- str_init( s );
- va_start( ap, s );
- do {
- c = va_arg( ap, const char * );
- if ( c ) str_strcatc( s, c );
- } while ( c );
- va_end( ap );
-}
-
-void
-strs_init( str *s, ... )
-{
- str *s2;
- va_list ap;
- str_init( s );
- va_start( ap, s );
- do {
- s2 = va_arg( ap, str * );
- if ( s2 ) str_init( s2 );
- } while ( s2 );
- va_end( ap );
-}
-
-int
-str_memerr( str *s )
-{
-#ifndef STR_SMALL
- return s->status == STR_MEMERR;
-#else
- return 0;
-#endif
-}
-
-void
-str_mergestrs( str *s, ... )
-{
- va_list ap;
- const char *cp;
- str_clear_status( s );
- str_empty( s );
- va_start( ap, s );
- do {
- cp = va_arg( ap, const char * );
- if ( cp ) str_strcatc( s, cp );
- } while ( cp );
- va_end( ap );
-}
-
-static void
-str_initalloc( str *s, unsigned long minsize )
-{
- unsigned long size = str_initlen;
- assert( s );
- if ( minsize > str_initlen ) size = minsize;
- s->data = (char *) malloc( sizeof( *(s->data) ) * size );
- if ( !s->data ) {
- fprintf(stderr,"Error. Cannot allocate memory in str_initalloc, requested %lu characters.\n", size );
- exit( EXIT_FAILURE );
- }
- s->data[0]='\0';
- s->dim=size;
- s->len=0;
- str_clear_status( s );
-}
-
-str *
-str_new( void )
-{
- str *s = (str *) malloc( sizeof( *s ) );
- if ( s )
- str_initalloc( s, str_initlen );
- return s;
-}
-
-void
-str_free( str *s )
-{
- assert( s );
- if ( s->data ) {
- str_nullify( s );
- free( s->data );
- }
- s->dim = 0;
- s->len = 0;
- s->data = NULL;
-}
-
-void
-strs_free( str *s, ... )
-{
- str *s2;
- va_list ap;
- str_free( s );
- va_start( ap, s );
- do {
- s2 = va_arg( ap, str * );
- if ( s2 ) str_free( s2 );
- } while ( s2 );
- va_end( ap );
-}
-
-void
-str_delete( str *s )
-{
- assert( s );
- str_free( s );
- free( s );
-}
-
-void
-str_empty( str *s )
-{
- assert( s );
- str_clear_status( s );
- if ( s->data ) {
- str_nullify( s );
- s->data[0] = '\0';
- }
- s->len = 0;
-}
-
-void
-strs_empty( str *s, ... )
-{
- str *s2;
- va_list ap;
- str_empty( s );
- va_start( ap, s );
- do {
- s2 = va_arg( ap, str * );
- if ( s2 ) str_empty( s2 );
- } while ( s2 );
- va_end( ap );
-}
-
-void
-str_addchar( str *s, char newchar )
-{
- assert( s );
-
- return_if_memerr( s );
-
- if ( newchar=='\0' ) return; /* appending '\0' is a null operation */
-
- if ( !s->data || s->dim==0 )
- str_initalloc( s, str_initlen );
- if ( s->len + 2 > s->dim )
- str_realloc( s, s->len*2 );
-
- s->data[s->len++] = newchar;
- s->data[s->len] = '\0';
-}
-
-/* str_addutf8
- *
- * Add potential multibyte character to s starting at pointer p.
- * Multibyte Unicode characters have the high bit set.
- *
- * Since we can progress more than one byte at p, return the
- * properly updated pointer p.
- */
-const char *
-str_addutf8( str *s, const char *p )
-{
- if ( ! ((*p) & 128 ) ) {
- str_addchar( s, *p );
- p++;
- } else {
- while ( ((*p) & 128) ) {
- str_addchar( s, *p );
- p++;
- }
- }
- return p;
-}
-
-char *
-str_cstr( str *s )
-{
- assert( s );
- return s->data;
-}
-
-void
-str_fprintf( FILE *fp, str *s )
-{
- assert( s );
- if ( s->data ) fprintf( fp, "%s", s->data );
-}
-
-void
-str_prepend( str *s, const char *addstr )
-{
- unsigned long lenaddstr, i;
-
- assert( s && addstr );
-
- return_if_memerr( s );
-
- lenaddstr = strlen( addstr );
- if ( lenaddstr==0 ) return; /* appending an empty string is a null op */
-
- if ( !s->data || !s->dim )
- str_initalloc( s, lenaddstr+1 );
- else {
- if ( s->len + lenaddstr + 1 > s->dim )
- str_realloc( s, s->len + lenaddstr + 1 );
- for ( i=s->len+lenaddstr-1; i>=lenaddstr; i-- )
- s->data[i] = s->data[i-lenaddstr];
- }
- strncpy( s->data, addstr, lenaddstr );
- s->len += lenaddstr;
- s->data[ s->len ] = '\0';
-}
-
-static inline void
-str_strcat_ensurespace( str *s, unsigned long n )
-{
- unsigned long m = s->len + n + 1;
- if ( !s->data || !s->dim )
- str_initalloc( s, m );
- else if ( s->len + n + 1 > s->dim )
- str_realloc( s, m );
-}
-
-static inline void
-str_strcat_internal( str *s, const char *addstr, unsigned long n )
-{
- return_if_memerr( s );
- str_strcat_ensurespace( s, n );
- strncat( &(s->data[s->len]), addstr, n );
- s->len += n;
- s->data[s->len]='\0';
-}
-
-void
-str_strcat( str *s, str *from )
-{
- assert ( s && from );
- if ( !from->data ) return;
- else str_strcat_internal( s, from->data, from->len );
-}
-
-void
-str_strcatc( str *s, const char *from )
-{
- unsigned long n;
- assert( s && from );
- n = strlen( from );
- str_strcat_internal( s, from, n );
-}
-
-void
-str_segcat( str *s, char *startat, char *endat )
-{
- unsigned long n;
- char *p;
-
- assert( s && startat && endat );
- assert( (size_t) startat < (size_t) endat );
-
- return_if_memerr( s );
-
- if ( startat==endat ) return;
-
- n = 0;
- p = startat;
- while ( p!=endat ) {
- n++;
- p++;
- }
-
- str_strcat_internal( s, startat, n );
-}
-
-void
-str_indxcat( str *s, char *p, unsigned long start, unsigned long stop )
-{
- unsigned long i;
-
- assert( s && p );
- assert( start <= stop );
-
- return_if_memerr( s );
-
- for ( i=start; i<stop; ++i )
- str_addchar( s, p[i] );
-}
-
-/* str_cpytodelim()
- * term = string of characters to be used as terminators
- * finalstep = set to non-zero to position return value past the
- * terminating character
- */
-const char *
-str_cpytodelim( str *s, const char *p, const char *delim, unsigned char finalstep )
-{
- assert( s );
-
- str_empty( s );
- return str_cattodelim( s, p, delim, finalstep );
-}
-
-/* str_cpytodelim()
- * term = string of characters to be used as terminators
- * finalstep = set to non-zero to position return value past the
- * terminating character
- */
-const char *
-str_cattodelim( str *s, const char *p, const char *delim, unsigned char finalstep )
-{
- assert( s );
-
- return_after_delim_if_memerr( s, p, delim, finalstep );
-
- while ( p && *p && !strchr( delim, *p ) ) {
- str_addchar( s, *p );
- p++;
- }
- if ( p && *p && finalstep ) p++;
- return p;
-}
-
-static inline void
-str_strcpy_ensurespace( str *s, unsigned long n )
-{
- unsigned long m = n + 1;
- if ( !s->data || !s->dim )
- str_initalloc( s, m );
- else if ( m > s->dim )
- str_realloc( s, m );
-}
-
-static inline void
-str_strcpy_internal( str *s, const char *p, unsigned long n )
-{
- return_if_memerr( s );
-
- str_strcpy_ensurespace( s, n );
- strncpy( s->data, p, n );
- s->data[n] = '\0';
- s->len = n;
-}
-
-void
-str_strcpy( str *s, str *from )
-{
- assert( s );
- assert( from );
- if ( s==from ) return;
- else if ( !from || from->len==0 ) str_empty( s );
- else str_strcpy_internal( s, from->data, from->len );
-}
-
-void
-str_strcpyc( str *s, const char *from )
-{
- unsigned long n;
- assert( s && from );
- n = strlen( from );
- str_strcpy_internal( s, from, n );
-}
-
-/* str_segcpy( s, start, end );
- *
- * copies [start,end) into s
- */
-void
-str_segcpy( str *s, char *startat, char *endat )
-{
- unsigned long n;
- char *p;
-
- assert( s && startat && endat );
- assert( ((size_t) startat) <= ((size_t) endat) );
-
- return_if_memerr( s );
-
- if ( startat==endat ) {
- str_empty( s );
- return;
- }
-
- n = 0;
- p = startat;
- while ( p!=endat ) {
- p++;
- n++;
- }
-
- str_strcpy_internal( s, startat, n );
-}
-
-/*
- * str_indxcpy( s, in, start, stop );
- *
- * copies in[start,stop) (excludes stop) into s
- */
-void
-str_indxcpy( str *s, char *p, unsigned long start, unsigned long stop )
-{
- unsigned long i;
-
- assert( s && p );
- assert( start <= stop );
-
- return_if_memerr( s );
-
- if ( start == stop ) {
- str_empty( s );
- return;
- }
- str_strcpy_ensurespace( s, stop-start+1 );
- for ( i=start; i<stop; ++i )
- s->data[i-start] = p[i];
- s->len = stop-start;
- s->data[s->len] = '\0';
-}
-
-str *
-str_strdup( str *from )
-{
- str *s = str_new();
- if ( s )
- str_strcpy( s, from );
- return s;
-}
-
-str *
-str_strdupc( const char *from )
-{
- str *s = str_new();
- if ( s )
- str_strcpyc( s, from );
- return s;
-}
-
-void
-str_segdel( str *s, char *p, char *q )
-{
- str tmp1, tmp2;
- char *r;
-
- assert( s );
-
- return_if_memerr( s );
-
- r = &(s->data[s->len]);
- str_init( &tmp1 );
- str_init( &tmp2 );
- str_segcpy( &tmp1, s->data, p );
- str_segcpy( &tmp2, q, r );
- str_empty( s );
- if ( tmp1.data ) str_strcat( s, &tmp1 );
- if ( tmp2.data ) str_strcat( s, &tmp2 );
- str_free( &tmp2 );
- str_free( &tmp1 );
-}
-
-/*
- * str_findreplace()
- *
- * if replace is "" or NULL, then delete find
- */
-
-int
-str_findreplace( str *s, const char *find, const char *replace )
-{
- long diff;
- size_t findstart, searchstart;
- size_t p1, p2;
- size_t find_len, rep_len, curr_len;
- char empty[2] = "";
- unsigned long minsize;
- char *p;
- int n = 0;
-
- assert( s && find );
-
- return_zero_if_memerr( s );
-
- if ( !s->data || !s->dim ) return 0;
- if ( !replace ) replace = empty;
-
- find_len = strlen( find );
- rep_len = strlen( replace );
- diff = rep_len - find_len;
- if ( diff < 0 ) diff = 0;
-
- searchstart=0;
- while ((p=strstr(s->data + searchstart,find))!=NULL) {
- curr_len = strlen(s->data);
- findstart=(size_t) p - (size_t) s->data;
- minsize = curr_len + diff + 1;
- if (s->dim <= minsize) str_realloc( s, minsize );
- if ( find_len > rep_len ) {
- p1 = findstart + rep_len;
- p2 = findstart + find_len;
- while( s->data[p2] )
- s->data[p1++]=s->data[p2++];
- s->data[p1]='\0';
- n++;
- } else if ( find_len < rep_len ) {
- for ( p1=curr_len; p1>=findstart+find_len; p1-- )
- s->data[p1+diff] = s->data[p1];
- n++;
- }
- for (p1=0; p1<rep_len; p1++)
- s->data[findstart+p1]=replace[p1];
- searchstart = findstart + rep_len;
- s->len += rep_len - find_len;
- }
- return n;
-}
-
-
-/* str_fget()
- * returns 0 if we're done, 1 if we're not done
- * extracts line by line (regardless of end characters)
- * and feeds from buf....
- */
-int
-str_fget( FILE *fp, char *buf, int bufsize, int *pbufpos, str *outs )
-{
- int bufpos = *pbufpos, done = 0;
- char *ok;
- assert( fp && outs );
- str_empty( outs );
- while ( !done ) {
- while ( buf[bufpos] && buf[bufpos]!='\r' && buf[bufpos]!='\n' )
- str_addchar( outs, buf[bufpos++] );
- if ( buf[bufpos]=='\0' ) {
- ok = fgets( buf, bufsize, fp );
- bufpos=*pbufpos=0;
- if ( !ok && feof(fp) ) { /* end-of-file */
- buf[bufpos] = 0;
- if ( outs->len==0 ) return 0; /*nothing in out*/
- else return 1; /*one last out */
- }
- } else if ( buf[bufpos]=='\r' || buf[bufpos]=='\n' ) done=1;
- }
- if ( ( buf[bufpos]=='\n' && buf[bufpos+1]=='\r') ||
- ( buf[bufpos]=='\r' && buf[bufpos+1]=='\n') ) bufpos+=2;
- else if ( buf[bufpos]=='\n' || buf[bufpos]=='\r' ) bufpos+=1;
- *pbufpos = bufpos;
- return 1;
-}
-
-void
-str_toupper( str *s )
-{
- unsigned long i;
- assert( s );
- for ( i=0; i<s->len; ++i )
- s->data[i] = toupper( (unsigned char)s->data[i] );
-}
-
-void
-str_tolower( str *s )
-{
- unsigned long i;
- assert( s );
- for ( i=0; i<s->len; ++i )
- s->data[i] = tolower( (unsigned char)s->data[i] );
-}
-
-/* str_swapstrings( s1, s2 )
- * be sneaky and swap internal string data from one
- * string to another
- */
-void
-str_swapstrings( str *s1, str *s2 )
-{
- char *tmpp;
- int tmp;
-
- assert( s1 && s2 );
-
- /* swap dimensioning info */
- tmp = s1->dim;
- s1->dim = s2->dim;
- s2->dim = tmp;
-
- /* swap length info */
- tmp = s1->len;
- s1->len = s2->len;
- s2->len = tmp;
-
- /* swap data */
- tmpp = s1->data;
- s1->data = s2->data;
- s2->data = tmpp;
-}
-
-void
-str_trimstartingws( str *s )
-{
- char *p, *q;
- int n;
-
- assert( s );
-
- if ( s->len==0 || !is_ws( s->data[0] ) ) return;
-
- n = 0;
- p = s->data;
- while ( is_ws( *p ) ) p++;
-
- q = s->data;
- while ( *p ) {
- *q++ = *p++;
- n++;
- }
- *q = '\0';
-
- s->len = n;
-}
-
-void
-str_trimendingws( str *s )
-{
- assert( s );
- while ( s->len > 0 && is_ws( s->data[s->len-1] ) ) {
- s->data[s->len-1] = '\0';
- s->len--;
- }
-}
-
-int
-str_match_first( str *s, char ch )
-{
- assert( s );
- if ( !s->len ) return 0;
- if ( s->data[0] == ch ) return 1;
- return 0;
-}
-
-int
-str_match_end( str *s, char ch )
-{
- assert( s );
- if ( !s->len ) return 0;
- if ( s->data[ s->len - 1 ] == ch ) return 1;
- return 0;
-}
-
-void
-str_trimbegin( str *s, unsigned long n )
-{
- char *p, *q;
-
- assert( s );
-
- if ( n==0 ) return;
- if ( s->len==0 ) return;
- if ( n >= s->len ) {
- str_empty( s );
- return;
- }
-
- p = s->data;
- while ( n-- > 0 ) p++;
-
- n = 0;
- q = s->data;
- while ( *p ) {
- *q++ = *p++;
- n++;
- }
- *q = '\0';
-
- s->len = n;
-}
-
-void
-str_trimend( str *s, unsigned long n )
-{
- assert( s );
-
- if ( n==0 ) return;
- if ( n >= s->len ) {
- str_empty( s );
- return;
- }
-
- s->len -= n;
- s->data[ s->len ] = '\0';
-}
-
-void
-str_pad( str *s, unsigned long len, char ch )
-{
- unsigned long i;
- assert( s );
- for ( i=s->len; i<len; i++ )
- str_addchar( s, ch );
-}
-
-void
-str_copyposlen( str *s, str *in, unsigned long pos, unsigned long len )
-{
- unsigned long i, max;
- assert( s );
- str_empty( s );
- max = pos+len;
- if ( max > in->len ) max = in->len;
- for ( i=pos; i<max; ++i )
- str_addchar( s, in->data[i] );
-}
-
-static void
-str_check_case( str *s, int *lowercase, int *uppercase )
-{
- int i;
- assert( s );
- *lowercase = 0;
- *uppercase = 0;
- if ( s->len < 1 ) return;
- for ( i=0; i<s->len && !( *lowercase && *uppercase ); ++i ) {
- if ( isalpha( (unsigned char)s->data[i] ) ) {
- if ( isupper( (unsigned char)s->data[i] ) ) *uppercase += 1;
- else if ( islower( (unsigned char)s->data[i] ) ) *lowercase += 1;
- }
- }
-}
-
-int
-str_is_mixedcase( str *s )
-{
- int lowercase, uppercase;
- str_check_case( s, &lowercase, &uppercase );
- if ( lowercase > 0 && uppercase > 0 ) return 1;
- return 0;
-}
-
-int
-str_is_lowercase( str *s )
-{
- int lowercase, uppercase;
- str_check_case( s, &lowercase, &uppercase );
- if ( lowercase > 0 && uppercase == 0 ) return 1;
- return 0;
-}
-
-int
-str_is_uppercase( str *s )
-{
- int lowercase, uppercase;
- str_check_case( s, &lowercase, &uppercase );
- if ( lowercase == 0 && uppercase > 0 ) return 1;
- return 0;
-}
-
-void
-str_stripws( str *s )
-{
- unsigned long len = 0;
- char *p, *q;
- assert( s );
- if ( s->len ) {
- p = q = s->data;
- while ( *p ) {
- if ( !is_ws( *p ) ) {
- *q = *p;
- q++;
- len++;
- }
- p++;
- }
- *q = '\0';
- }
- s->len = len;
-}
-
-int
-str_strcmp( const str *s, const str *t )
-{
- assert( s );
- assert( t );
- if ( s->len == 0 && t->len == 0 ) return 0;
- if ( s->len == 0 ) return strcmp( "", t->data );
- if ( t->len == 0 ) return strcmp( s->data, "" );
- return strcmp( s->data, t->data );
-}
-
-int
-str_strcmpc( const str *s, const char *t )
-{
- assert( s );
- assert( t );
- if ( s->len == 0 ) return strcmp( "", t );
- return strcmp( s->data, t );
-}
-
-int
-str_strncmp( const str *s, const str *t, size_t n )
-{
- assert( s );
- assert( t );
- if ( s->len == 0 && t->len == 0 ) return 0;
- if ( s->len == 0 ) return strncmp( "", t->data, n );
- if ( t->len == 0 ) return strncmp( s->data, "", n );
- return strncmp( s->data, t->data, n );
-}
-
-int
-str_strncmpc( const str *s, const char *t, size_t n )
-{
- assert( s );
- assert( t );
- if ( s->len == 0 ) return strncmp( "", t, n );
- return strncmp( s->data, t, n );
-}
-
-int
-str_strcasecmp( const str *s, const str *t )
-{
- assert( s );
- assert( t );
- if ( s->len == 0 && t->len == 0 ) return 0;
- if ( s->len == 0 ) return strcasecmp( "", t->data );
- if ( t->len == 0 ) return strcasecmp( s->data, "" );
- return strcasecmp( s->data, t->data );
-}
-
-int
-str_strcasecmpc( const str *s, const char *t )
-{
- assert( s );
- assert( t );
- if ( s->len == 0 ) return strcasecmp( "", t );
- return strcasecmp( s->data, t );
-}
-
-char *
-str_strstr( const str *s, const str *t )
-{
- assert( s );
- assert( t );
- if ( s->len == 0 && t->len == 0 ) return strstr( "", "" );
- if ( s->len == 0 ) return strstr( "", t->data );
- if ( t->len == 0 ) return strstr( s->data, "" );
- return strstr( s->data, t->data );
-}
-
-char *
-str_strstrc( const str *s, const char *t )
-{
- assert( s );
- assert( t );
- if ( s->len == 0 ) return strstr( "", t );
- return strstr( s->data, t );
-}
-
-void
-str_reverse( str *s )
-{
- unsigned long i, max;
- char tmp;
- assert( s );
- max = s->len / 2;
- for ( i=0; i<max; ++i ) {
- tmp = s->data[ i ];
- s->data[ i ] = s->data[ s->len - 1 - i ];
- s->data[ s->len - 1 - i ] = tmp;
- }
-}
-
-int
-str_fgetline( str *s, FILE *fp )
-{
- int ch, eol = 0;
- assert( s );
- assert( fp );
- str_empty( s );
- if ( feof( fp ) ) return 0;
- while ( !feof( fp ) && !eol ) {
- ch = fgetc( fp );
- if ( ch == EOF ) {
- if ( s->len ) return 1;
- else return 0;
- }
- else if ( ch == '\n' ) eol = 1;
- else if ( ch == '\r' ) {
- ch = fgetc( fp );
- if ( ch != '\n' ) ungetc( ch, fp );
- eol = 1;
- } else {
- str_addchar( s, (char) ch );
- }
- }
- return 1;
-}
-
-/*
- * s = "Hi!\0", s.len = 3
- *
- * str_char( s, 0 ) = 'H' str_revchar( s, 0 ) = '!'
- * str_char( s, 1 ) = 'i' str_revchar( s, 1 ) = 'i'
- * str_char( s, 2 ) = '!' str_revchar( s, 2 ) = 'H'
- * str_char( s, 3 ) = '\0' str_revchar( s, 3 ) = '\0'
- */
-char
-str_char( str *s, unsigned long n )
-{
- assert( s );
- if ( s->len==0 || n >= s->len ) return '\0';
- return s->data[ n ];
-}
-
-char
-str_revchar( str *s, unsigned long n )
-{
- assert( s );
- if ( s->len==0 || n >= s->len ) return '\0';
- return s->data[ s->len - n - 1];
-}
-
-void
-str_makepath( str *path, const char *dirname, const char *filename, char sep )
-{
- assert( path );
- if ( dirname ) str_strcpyc( path, dirname );
- else str_empty( path );
-
- if ( path->len && path->data[path->len-1]!=sep )
- str_addchar( path, sep );
-
- if ( filename ) str_strcatc( path, filename );
-}
-
-void
-str_fill( str *s, unsigned long n, char fillchar )
-{
- unsigned long i;
- assert( s );
- str_clear_status( s );
- if ( !s->data || s->dim==0 )
- str_initalloc( s, n+1 );
- if ( n + 1 > s->dim )
- str_realloc( s, n+1 );
- for ( i=0; i<n; ++i )
- s->data[i] = fillchar;
- s->data[n] = '\0';
- s->len = n;
-}
-
-int
-str_has_value( str *s )
-{
- if ( !s || s->len==0 ) return 0;
- return 1;
-}
-
-int
-str_is_empty( str *s )
-{
- if ( !s || s->len==0 ) return 1;
- return 0;
-}
-
-unsigned long
-str_strlen( str *s )
-{
- if ( !s ) return 0;
- else return s->len;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/str.h b/support/texlab/crates/bibutils_sys/src/str.h
deleted file mode 100644
index f1698c8cfd..0000000000
--- a/support/texlab/crates/bibutils_sys/src/str.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * str.h
- *
- * Version: 2018-09-21
- *
- * Copyright (c) Chris Putnam 1999-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef STR_H
-#define STR_H
-
-#define STR_OK (0)
-#define STR_MEMERR (-1)
-
-#include <stdio.h>
-
-typedef struct str {
- char *data;
- unsigned long dim;
- unsigned long len;
-#ifndef STR_SMALL
- int status;
-#endif
-} str;
-
-str * str_new ( void );
-void str_delete ( str *s );
-
-void str_init ( str *s );
-void str_initstr ( str *s, str *from );
-void str_initstrc ( str *s, const char *initstr );
-void str_initstrsc ( str *s, ... );
-void str_empty ( str *s );
-void str_free ( str *s );
-
-void strs_init ( str *s, ... );
-void strs_empty ( str *s, ... );
-void strs_free ( str *s, ... );
-
-str* str_strdup ( str *s );
-str* str_strdupc( const char *p );
-
-void str_strcat ( str *s, str *from );
-void str_strcatc( str *s, const char *from );
-
-void str_strcpy ( str *s, str *from );
-void str_strcpyc( str *s, const char *from );
-
-int str_strcmp ( const str *s, const str *t );
-int str_strcmpc( const str *s, const char *t );
-
-int str_strncmp ( const str *s, const str *t, size_t n );
-int str_strncmpc( const str *s, const char *t, size_t n );
-
-int str_strcasecmp ( const str *s, const str *t );
-int str_strcasecmpc( const str *s, const char *t );
-
-char * str_strstr ( const str *s, const str *t );
-char * str_strstrc( const str *s, const char *t );
-
-void str_prepend ( str *s, const char *addstr );
-void str_mergestrs ( str *s, ... );
-
-void str_addchar ( str *s, char newchar );
-void str_reverse ( str *s );
-const char *str_addutf8 ( str *s, const char *p );
-void str_segcat ( str *s, char *startat, char *endat );
-const char *str_cpytodelim ( str *s, const char *p, const char *delim, unsigned char finalstep );
-const char *str_cattodelim ( str *s, const char *p, const char *delim, unsigned char finalstep );
-void str_prepend ( str *s, const char *addstr );
-void str_segcpy ( str *s, char *startat, char *endat );
-void str_segdel ( str *s, char *startat, char *endat );
-void str_indxcpy ( str *s, char *p, unsigned long start, unsigned long stop );
-void str_indxcat ( str *s, char *p, unsigned long start, unsigned long stop );
-void str_fprintf ( FILE *fp, str *s );
-int str_fget ( FILE *fp, char *buf, int bufsize, int *pbufpos,
- str *outs );
-char * str_cstr ( str *s );
-char str_char ( str *s, unsigned long n );
-char str_revchar ( str *s, unsigned long n );
-int str_fgetline ( str *s, FILE *fp );
-int str_findreplace ( str *s, const char *find, const char *replace );
-void str_toupper ( str *s );
-void str_tolower ( str *s );
-void str_trimstartingws( str *s );
-void str_trimendingws( str *s );
-void str_swapstrings ( str *s1, str *s2 );
-void str_stripws ( str *s );
-
-int str_match_first ( str *s, char ch );
-int str_match_end ( str *s, char ch );
-void str_trimbegin ( str *s, unsigned long n );
-void str_trimend ( str *s, unsigned long n );
-
-void str_pad ( str *s, unsigned long len, char ch );
-void str_copyposlen ( str *s, str *in, unsigned long pos, unsigned long len );
-
-void str_makepath ( str *path, const char *dirname, const char *filename, char sep );
-
-void str_fill ( str *s, unsigned long n, char fillchar );
-
-int str_is_mixedcase( str *s );
-int str_is_lowercase( str *s );
-int str_is_uppercase( str *s );
-
-int str_memerr( str *s );
-
-unsigned long str_strlen( str *s );
-
-int str_has_value( str *s );
-int str_is_empty( str *s );
-
-
-/* #define STR_PARANOIA
- *
- * set to clear memory before it is freed or reallocated
- * note that this is slower...may be important if string
- * contains sensitive information
- */
-
-/* #define STR_NOASSERT
- *
- * set to turn off the use of asserts (and associated call to exit)
- * in str functions...useful for library construction for
- * Linux distributions that don't want libraries calling exit, but
- * not useful during code development
- */
-
-/* #define STR_SMALL
- *
- * set to make the smallest possible struct str, but will get
- * exit( EXIT_FAILURE ) upon memory failures
- */
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/str_conv.c b/support/texlab/crates/bibutils_sys/src/str_conv.c
deleted file mode 100644
index 943224a6e2..0000000000
--- a/support/texlab/crates/bibutils_sys/src/str_conv.c
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * str_conv.c
- *
- * Copyright (c) Chris Putnam 1999-2019
- *
- * Source code released under the GPL version 2
- *
- * str routines for converting strs between character sets
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include <limits.h>
-#include "latex.h"
-#include "entities.h"
-#include "utf8.h"
-#include "gb18030.h"
-#include "charsets.h"
-#include "str_conv.h"
-
-static void
-addentity( str *s, unsigned int ch )
-{
- char buf[512];
- sprintf( buf, "&#%u;", ch );
- str_strcatc( s, buf );
-}
-
-/* These are the five minimal predefined entites in XML */
-static int
-minimalxmlchars( str *s, unsigned int ch )
-{
- if ( ch==34 ) { str_strcatc( s, "&quot;" ); return 1; }
- else if ( ch==38 ) { str_strcatc( s, "&amp;" ); return 1; }
- else if ( ch==39 ) { str_strcatc( s, "&apos;" ); return 1; }
- else if ( ch==60 ) { str_strcatc( s, "&lt;" ); return 1; }
- else if ( ch==62 ) { str_strcatc( s, "&gt;" ); return 1; }
- return 0;
-}
-
-static void
-addxmlchar( str *s, unsigned int ch )
-{
- if ( minimalxmlchars( s, ch ) ) return;
- if ( ch > 127 ) addentity( s, ch );
- else str_addchar( s, ch );
-}
-
-static void
-addutf8char( str *s, unsigned int ch, int xmlout )
-{
- unsigned char code[6];
- int nc, i;
- if ( xmlout ) {
- if ( minimalxmlchars( s, ch ) ) return;
- if ( ch > 127 && xmlout == STR_CONV_XMLOUT_ENTITIES )
- { addentity( s, ch ); return; }
- }
- nc = utf8_encode( ch, code );
- for ( i=0; i<nc; ++i )
- str_addchar( s, code[i] );
-}
-
-static void
-addgb18030char( str *s, unsigned int ch, int xmlout )
-{
- unsigned char code[4];
- int nc, i;
- if ( xmlout ) {
- if ( minimalxmlchars( s, ch ) ) return;
- if ( ch > 127 && xmlout == STR_CONV_XMLOUT_ENTITIES )
- { addentity( s, ch ); return; }
- }
- nc = gb18030_encode( ch, code );
- for ( i=0; i<nc; ++i )
- str_addchar( s, code[i] );
-}
-
-static void
-addlatexchar( str *s, unsigned int ch, int xmlout, int utf8out )
-{
- char buf[512];
- uni2latex( ch, buf, sizeof( buf ) );
- /* If the unicode character isn't recognized as latex output
- * a '?' unless the user has requested unicode output. If so,
- * output the unicode.
- */
- if ( utf8out && !strcmp( buf, "?" ) ) {
- addutf8char( s, ch, xmlout );
- } else {
- str_strcatc( s, buf );
- }
-}
-
-/*
- * get_unicode()
- *
- * This can be a little tricky. If the character is simply encoded
- * such as UTF8 for > 128 or by numeric xml entities such as "&#534;"
- * then the output of decode_entity() and utf8_decode will necessarily
- * be in the charsetin character set. On the other hand, if it's a
- * fancy latex expression, such as "\alpha", or a non-numeric xml entity
- * like "&amp;", then we'll get the Unicode value (because our lists only
- * keep the Unicode equivalent).
- *
- * The unicode variable indicates whether or not a Unicode-based listing
- * was used to convert the character (remember that charsetin could be
- * Unicode independently).
- *
- * The charset variable is used to keep track of what character set
- * the character is in prior to conversion.
- *
- */
-
-static unsigned int
-get_unicode( str *s, unsigned int *pi, int charsetin, int latexin, int utf8in, int xmlin )
-{
- unsigned int ch;
- int unicode = 0, err = 0;
- if ( xmlin && s->data[*pi]=='&' ) {
- ch = decode_entity( s->data, pi, &unicode, &err );
- } else if ( charsetin==CHARSET_GB18030 ) {
- ch = gb18030_decode( s->data, pi );
- unicode = 1;
- } else if ( latexin ) {
- /* Must handle bibtex files in UTF8/Unicode */
- if ( utf8in && ( s->data[*pi] & 128 ) ) {
- ch = utf8_decode( s->data, pi );
- unicode = 1;
- } else ch = latex2char( s->data, pi, &unicode );
- }
- else if ( utf8in )
- ch = utf8_decode( s->data, pi );
- else {
- ch = (unsigned int) s->data[*pi];
- *pi = *pi + 1;
- }
- if ( !unicode && charsetin!=CHARSET_UNICODE )
- ch = charset_lookupchar( charsetin, ch );
- return ch;
-}
-
-static int
-write_unicode( str *s, unsigned int ch, int charsetout, int latexout,
- int utf8out, int xmlout )
-{
- unsigned int c;
- if ( latexout ) {
- addlatexchar( s, ch, xmlout, utf8out );
- } else if ( utf8out ) {
- addutf8char( s, ch, xmlout );
- } else if ( charsetout==CHARSET_GB18030 ) {
- addgb18030char( s, ch, xmlout );
- } else {
- c = charset_lookupuni( charsetout, ch );
- if ( xmlout ) addxmlchar( s, c );
- else str_addchar( s, c );
- }
- return 1;
-}
-
-/*
- * Returns 1 on memory error condition
- */
-int
-str_convert( str *s,
- int charsetin, int latexin, int utf8in, int xmlin,
- int charsetout, int latexout, int utf8out, int xmlout )
-{
- unsigned int pos = 0;
- unsigned int ch;
- str ns;
- int ok = 1;
-
- if ( !s || s->len==0 ) return ok;
-
- /* Ensure that string is internally allocated.
- * This fixes NULL pointer derefernce in CVE-2018-10775 in bibutils
- * as a string with a valid data pointer is potentially replaced
- * by a string without a valid data pointer due to it being invalid
- * unicode.
- * This probably also fixes CVE-2018-10773 and CVE-2018-10774 which
- * are NULL dereferences also likely due to a fuzzer, but without
- * test cases in the report, I can't be completely sure.
- */
- str_initstrc( &ns, "" );
-
- if ( charsetin==CHARSET_UNKNOWN ) charsetin = CHARSET_DEFAULT;
- if ( charsetout==CHARSET_UNKNOWN ) charsetout = CHARSET_DEFAULT;
-
- while ( s->data[pos] ) {
- ch = get_unicode( s, &pos, charsetin, latexin, utf8in, xmlin );
- ok = write_unicode( &ns, ch, charsetout, latexout, utf8out, xmlout );
- if ( !ok ) goto out;
- }
-
- str_swapstrings( s, &ns );
-out:
- str_free( &ns );
-
- return ok;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/str_conv.h b/support/texlab/crates/bibutils_sys/src/str_conv.h
deleted file mode 100644
index b86b586a28..0000000000
--- a/support/texlab/crates/bibutils_sys/src/str_conv.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * str_conv.h
- *
- * Copyright (c) Chris Putnam 1999-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef STR_CONV_H
-#define STR_CONV_H
-
-#define STR_CONV_XMLOUT_FALSE (0)
-#define STR_CONV_XMLOUT_TRUE (1)
-#define STR_CONV_XMLOUT_ENTITIES (3)
-
-#include "str.h"
-
-extern int str_convert( str *s,
- int charsetin, int latexin, int utf8in, int xmlin,
- int charsetout, int latexout, int utf8out, int xmlout );
-
-#endif
-
diff --git a/support/texlab/crates/bibutils_sys/src/strsearch.c b/support/texlab/crates/bibutils_sys/src/strsearch.c
deleted file mode 100644
index 86a427610f..0000000000
--- a/support/texlab/crates/bibutils_sys/src/strsearch.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* strsearch.c
- *
- * Copyright (c) Chris Putnam 1995-2019
- *
- * Source code released under the GPL version 2
- *
- * strsearch() locates a case-independent substring
- * e.g. a case-independent version of strstr()
- *
- * returns pointer to first occurrence of substring needle in
- * the string haystack when found, NULL if not found
- *
- * '\0' characters terminating strings are not compared
- *
- * strsearch returns haystack when needle is empty as per strstr()
- * conventions
- *
- */
-#include <stdio.h>
-#include <ctype.h>
-#include "strsearch.h"
-
-char *strsearch (const char *haystack, const char *needle)
-{
- char *returnptr=NULL;
- unsigned long pos=0;
-
- if ( !(*needle) ) returnptr = (char *) haystack;
-
- while (*(haystack+pos) && returnptr==NULL) {
- if ( toupper((unsigned char)*(haystack+pos)) == toupper((unsigned char)*(needle+pos)) )
- pos++;
- else {
- pos = 0;
- haystack++;
- }
- if ( ! (*(needle+pos)) ) returnptr = (char *) haystack;
- }
- return returnptr;
-}
-
diff --git a/support/texlab/crates/bibutils_sys/src/strsearch.h b/support/texlab/crates/bibutils_sys/src/strsearch.h
deleted file mode 100644
index 924093994d..0000000000
--- a/support/texlab/crates/bibutils_sys/src/strsearch.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/*
- * strsearch.h
- *
- * Copyright (c) Chris Putnam 1995-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef STRSEARCH_H
-#define STRSEARCH_H
-
-char *strsearch (const char *haystack, const char *needle);
-
-#endif
-
diff --git a/support/texlab/crates/bibutils_sys/src/title.c b/support/texlab/crates/bibutils_sys/src/title.c
deleted file mode 100644
index 6b2981442d..0000000000
--- a/support/texlab/crates/bibutils_sys/src/title.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * title.c
- *
- * process titles into title/subtitle pairs for MODS
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "str.h"
-#include "fields.h"
-#include "title.h"
-#include "is_ws.h"
-#include "msvc_fix.h"
-
-int
-title_process( fields *info, const char *tag, const char *value, int level, unsigned char nosplittitle )
-{
- str title, subtitle;
- const char *p, *q;
- int status;
-
- str_init( &title );
- str_init( &subtitle );
-
- if ( nosplittitle ) q = NULL;
- else {
- q = strstr( value, ": " );
- if ( !q ) q = strstr( value, "? " );
- }
-
- if ( !q ) str_strcpyc( &title, value );
- else {
- p = value;
- while ( p!=q ) str_addchar( &title, *p++ );
- if ( *q=='?' ) str_addchar( &title, '?' );
- q++;
- q = skip_ws( q );
- while ( *q ) str_addchar( &subtitle, *q++ );
- }
-
- if ( strncasecmp( "SHORT", tag, 5 ) ) {
- if ( str_has_value( &title ) ) {
- status = fields_add( info, "TITLE", str_cstr( &title ), level );
- if ( status!=FIELDS_OK ) return 0;
- }
- if ( str_has_value( &subtitle ) ) {
- status = fields_add( info, "SUBTITLE", str_cstr( &subtitle ), level );
- if ( status!=FIELDS_OK ) return 0;
- }
- } else {
- if ( str_has_value( &title ) ) {
- status = fields_add( info, "SHORTTITLE", str_cstr( &title ), level );
- if ( status!=FIELDS_OK ) return 0;
- }
- /* no SHORT-SUBTITLE! */
- }
-
- str_free( &subtitle );
- str_free( &title );
-
- return 1;
-}
-
-/* title_combine()
- *
- * Combine a main title and a subtitle into a full title.
- *
- * Example:
- * Main title = "A Clearing in the Distance"
- * Subtitle = "The Biography of Frederick Law Olmstead"
- * Full title = "A Clearing in the Distance: The Biography of Frederick Law Olmstead"
- * Example:
- * Main title = "What Makes a Good Team Player?"
- * Subtitle = "Personality and Team Effectiveness"
- * Full title = "What Makes a Good Team Player? Personality and Team Effectiveness"
- */
-void
-title_combine( str *fullttl, str *mainttl, str *subttl )
-{
- str_empty( fullttl );
-
- if ( !mainttl ) return;
-
- str_strcpy( fullttl, mainttl );
-
- if ( subttl ) {
- if ( str_has_value( mainttl ) ) {
- if ( mainttl->data[ mainttl->len - 1 ] != '?' && mainttl->data[ mainttl->len - 1] != ':' )
- str_strcatc( fullttl, ": " );
- else
- str_strcatc( fullttl, " " );
- }
- str_strcat( fullttl, subttl );
- }
-}
diff --git a/support/texlab/crates/bibutils_sys/src/title.h b/support/texlab/crates/bibutils_sys/src/title.h
deleted file mode 100644
index 6f9e4fb8d3..0000000000
--- a/support/texlab/crates/bibutils_sys/src/title.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * title.h
- *
- * process titles into title/subtitle pairs for MODS
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Source code released under the GPL verison 2
- *
- */
-#ifndef TITLE_H
-#define TITLE_H
-
-#include "str.h"
-#include "fields.h"
-
-int title_process( fields *info, const char *tag, const char *value, int level, unsigned char nosplittitle );
-void title_combine( str *fullttl, str *mainttl, str *subttl );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/type.c b/support/texlab/crates/bibutils_sys/src/type.c
deleted file mode 100644
index ad457363d6..0000000000
--- a/support/texlab/crates/bibutils_sys/src/type.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * type.c
- *
- * Copyright (c) Chris Putnam 2003-2019
- *
- * Source code released under the GPL version 2
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "type.h"
-#include "msvc_fix.h"
-
-static int
-is_genre_element( fields *in, int n )
-{
- char *tag;
-
- tag = fields_tag( in, n, FIELDS_CHRP );
-
- if ( !strcasecmp( tag, "GENRE:MARC" ) ) return 1;
- if ( !strcasecmp( tag, "GENRE:BIBUTILS" ) ) return 1;
- if ( !strcasecmp( tag, "GENRE:UNKNOWN" ) ) return 1;
-
- return 0;
-}
-
-static int
-is_resource_element( fields *in, int n )
-{
- if ( !strcasecmp( fields_tag( in, n, FIELDS_CHRP ), "RESOURCE" ) ) return 1;
- return 0;
-}
-
-static int
-is_issuance_element( fields *in, int n )
-{
- if ( !strcasecmp( fields_tag( in, n, FIELDS_CHRP ), "ISSUANCE" ) ) return 1;
- else return 0;
-}
-
-static int
-match_hints( const char *value, int level, const char *match_name, int match_level )
-{
- if ( strcasecmp( value, match_name ) ) return 0;
- if ( match_level!=LEVEL_ANY && level!=match_level ) return 0;
- return 1;
-}
-
-/* type_from_mods_hints()
- *
- * We return the first match from the match list that works...this makes us
- * independent of how the genre hints are internally stored in fields *in.
- *
- * Thus we can distinguish between 'book' and 'book chapter' in which book is
- * at different MODS levels by match_type arrays of:
- *
- * ...
- * { "book", TYPE_BOOK, LEVEL_MAIN },
- * { "book", TYPE_BOOKCHAPTER, LEVEL_ANY },
- * ...
- *
- * e.g. "book" at LEVEL_ANY matches any values of "book" not caught by the "book" LEVEL_MAIN line
- *
- */
-int
-type_from_mods_hints( fields *in, int mode, match_type matches[], int nmatches, int type_unknown )
-{
- int i, j, level, type = type_unknown;
- char *value;
-
- for ( i=0; i<nmatches; ++i ) {
-
- for ( j=0; j<in->n; ++j ) {
- if ( mode==TYPE_FROM_GENRE && !is_genre_element( in, j ) ) continue;
- if ( mode==TYPE_FROM_RESOURCE && !is_resource_element( in, j ) ) continue;
- if ( mode==TYPE_FROM_ISSUANCE && !is_issuance_element( in, j ) ) continue;
- value = fields_value( in, j, FIELDS_CHRP );
- level = fields_level( in, j );
- if ( match_hints( value, level, matches[i].name, matches[i].level ) ) {
- if ( type==type_unknown ) type = matches[i].type;
- }
- }
- }
-
- return type;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/type.h b/support/texlab/crates/bibutils_sys/src/type.h
deleted file mode 100644
index 839b040d8d..0000000000
--- a/support/texlab/crates/bibutils_sys/src/type.h
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * type.h
- *
- * Copyright (c) Chris Putnam 2019
- *
- * Source code released under the GPL version 2
- */
-#ifndef TYPE_H
-#define TYPE_H
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "fields.h"
-
-#define TYPE_FROM_GENRE (0)
-#define TYPE_FROM_RESOURCE (1)
-#define TYPE_FROM_ISSUANCE (2)
-
-typedef struct match_type {
- char *name;
- int type;
- int level;
-} match_type;
-
-int type_from_mods_hints( fields *in, int mode, match_type matches[], int nmatches, int type_unknown );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/unicode.c b/support/texlab/crates/bibutils_sys/src/unicode.c
deleted file mode 100644
index ec9b2e1133..0000000000
--- a/support/texlab/crates/bibutils_sys/src/unicode.c
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * unicode.c
- *
- * Helper unicode functions/values to determine the
- * types of unicode characters.
- */
-#include "utf8.h"
-#include "unicode.h"
-
-typedef struct {
- unsigned int value;
- unsigned short info;
-} unicodeinfo_t;
-
-static unicodeinfo_t unicodeinfo[] = {
- { 48, UNICODE_NUMBER }, /* 0 */
- { 49, UNICODE_NUMBER }, /* 1 */
- { 50, UNICODE_NUMBER }, /* 2 */
- { 51, UNICODE_NUMBER }, /* 3 */
- { 52, UNICODE_NUMBER }, /* 4 */
- { 53, UNICODE_NUMBER }, /* 5 */
- { 54, UNICODE_NUMBER }, /* 6 */
- { 55, UNICODE_NUMBER }, /* 7 */
- { 56, UNICODE_NUMBER }, /* 8 */
- { 57, UNICODE_NUMBER }, /* 9 */
- { 65, UNICODE_UPPER }, /* Latin Capital A */
- { 66, UNICODE_UPPER }, /* Latin Capital B */
- { 67, UNICODE_UPPER }, /* Latin Capital C */
- { 68, UNICODE_UPPER }, /* Latin Capital D */
- { 69, UNICODE_UPPER }, /* Latin Capital E */
- { 70, UNICODE_UPPER }, /* Latin Capital F */
- { 71, UNICODE_UPPER }, /* Latin Capital G */
- { 72, UNICODE_UPPER }, /* Latin Capital H */
- { 73, UNICODE_UPPER }, /* Latin Capital I */
- { 74, UNICODE_UPPER }, /* Latin Capital J */
- { 75, UNICODE_UPPER }, /* Latin Capital K */
- { 76, UNICODE_UPPER }, /* Latin Capital L */
- { 77, UNICODE_UPPER }, /* Latin Capital M */
- { 78, UNICODE_UPPER }, /* Latin Capital N */
- { 79, UNICODE_UPPER }, /* Latin Capital O */
- { 80, UNICODE_UPPER }, /* Latin Capital P */
- { 81, UNICODE_UPPER }, /* Latin Capital Q */
- { 82, UNICODE_UPPER }, /* Latin Capital R */
- { 83, UNICODE_UPPER }, /* Latin Capital S */
- { 84, UNICODE_UPPER }, /* Latin Capital T */
- { 85, UNICODE_UPPER }, /* Latin Capital U */
- { 86, UNICODE_UPPER }, /* Latin Capital V */
- { 87, UNICODE_UPPER }, /* Latin Capital W */
- { 88, UNICODE_UPPER }, /* Latin Capital X */
- { 89, UNICODE_UPPER }, /* Latin Capital Y */
- { 90, UNICODE_UPPER }, /* Latin Capital Z */
- { 97, UNICODE_LOWER }, /* Latin Small a */
- { 98, UNICODE_LOWER }, /* Latin Small b */
- { 99, UNICODE_LOWER }, /* Latin Small c */
- { 100, UNICODE_LOWER }, /* Latin Small d */
- { 101, UNICODE_LOWER }, /* Latin Small e */
- { 102, UNICODE_LOWER }, /* Latin Small f */
- { 103, UNICODE_LOWER }, /* Latin Small g */
- { 104, UNICODE_LOWER }, /* Latin Small h */
- { 105, UNICODE_LOWER }, /* Latin Small i */
- { 106, UNICODE_LOWER }, /* Latin Small j */
- { 107, UNICODE_LOWER }, /* Latin Small k */
- { 108, UNICODE_LOWER }, /* Latin Small l */
- { 109, UNICODE_LOWER }, /* Latin Small m */
- { 110, UNICODE_LOWER }, /* Latin Small n */
- { 111, UNICODE_LOWER }, /* Latin Small o */
- { 112, UNICODE_LOWER }, /* Latin Small p */
- { 113, UNICODE_LOWER }, /* Latin Small q */
- { 114, UNICODE_LOWER }, /* Latin Small r */
- { 115, UNICODE_LOWER }, /* Latin Small s */
- { 116, UNICODE_LOWER }, /* Latin Small t */
- { 117, UNICODE_LOWER }, /* Latin Small u */
- { 118, UNICODE_LOWER }, /* Latin Small v */
- { 119, UNICODE_LOWER }, /* Latin Small w */
- { 120, UNICODE_LOWER }, /* Latin Small x */
- { 121, UNICODE_LOWER }, /* Latin Small y */
- { 122, UNICODE_LOWER }, /* Latin Small z */
- { 192, UNICODE_UPPER }, /* Latin Capital A with grave */
- { 193, UNICODE_UPPER }, /* Latin Capital A with acute */
- { 194, UNICODE_UPPER }, /* Latin Capital A with circumflex */
- { 195, UNICODE_UPPER }, /* Latin Capital A with tilde */
- { 196, UNICODE_UPPER }, /* Latin Capital A with diuresis */
- { 197, UNICODE_UPPER }, /* Latin Capital A with ring above */
- { 198, UNICODE_UPPER }, /* Latin Capital AE */
- { 199, UNICODE_UPPER }, /* Latin Capital C with cedilla */
- { 200, UNICODE_UPPER }, /* Latin Capital E with grave */
- { 201, UNICODE_UPPER }, /* Latin Capital E with acute */
- { 202, UNICODE_UPPER }, /* Latin Capital E with circumflex */
- { 203, UNICODE_UPPER }, /* Latin Capital E with diuresis */
- { 204, UNICODE_UPPER }, /* Latin Capital I with grave */
- { 205, UNICODE_UPPER }, /* Latin Capital I with acute */
- { 206, UNICODE_UPPER }, /* Latin Capital I with circumflex */
- { 207, UNICODE_UPPER }, /* Latin Capital I with diuresis */
- { 208, UNICODE_UPPER }, /* Latin Capital ETH */
- { 209, UNICODE_UPPER }, /* Latin Capital N with tilde */
- { 210, UNICODE_UPPER }, /* Latin Capital O with grave */
- { 211, UNICODE_UPPER }, /* Latin Capital O with acute */
- { 212, UNICODE_UPPER }, /* Latin Capital O with circumflex */
- { 213, UNICODE_UPPER }, /* Latin Capital O with tilde */
- { 214, UNICODE_UPPER }, /* Latin Captial O with diaeresis */
- { 216, UNICODE_UPPER }, /* Latin Capital O with stroke */
- { 217, UNICODE_UPPER }, /* Latin Capital U with grave */
- { 218, UNICODE_UPPER }, /* Latin Capital U with acute */
- { 219, UNICODE_UPPER }, /* Latin Capital U with circumflex */
- { 220, UNICODE_UPPER }, /* Latin Capital U with diaeresis */
- { 221, UNICODE_UPPER }, /* Latin Capital Y with acute */
- { 222, UNICODE_UPPER }, /* Latin Capital THORN */
- { 223, UNICODE_LOWER }, /* German sz ligature */
- { 224, UNICODE_LOWER }, /* Latin Small a with grave */
- { 225, UNICODE_LOWER }, /* Latin Small a with acute */
- { 226, UNICODE_LOWER }, /* Latin Small a with circumflex */
- { 227, UNICODE_LOWER }, /* Latin Small a with tilde */
- { 228, UNICODE_LOWER }, /* Latin Small a with diuresis */
- { 229, UNICODE_LOWER }, /* Latin Small a with ring above */
- { 230, UNICODE_LOWER }, /* Latin Small ae */
- { 231, UNICODE_LOWER }, /* Latin Small c with cedilla */
- { 232, UNICODE_LOWER }, /* Latin Small e with grave */
- { 233, UNICODE_LOWER }, /* Latin Small e with acute */
- { 234, UNICODE_LOWER }, /* Latin Small e with circumflex */
- { 235, UNICODE_LOWER }, /* Latin Small e with diuresis */
- { 236, UNICODE_LOWER }, /* Latin Small i with grave */
- { 237, UNICODE_LOWER }, /* Latin Small i with acute */
- { 238, UNICODE_LOWER }, /* Latin Small i with circumflex */
- { 239, UNICODE_LOWER }, /* Latin Small i with diuresis */
- { 240, UNICODE_LOWER }, /* Latin Small eth */
- { 241, UNICODE_LOWER }, /* Latin Small n with tilde */
- { 242, UNICODE_LOWER }, /* Latin Small o with grave */
- { 243, UNICODE_LOWER }, /* Latin Small o with acute */
- { 244, UNICODE_LOWER }, /* Latin Small o with circumflex */
- { 245, UNICODE_LOWER }, /* Latin Small o with tilde */
- { 246, UNICODE_LOWER }, /* Latin Small o with diaeresis */
- { 248, UNICODE_LOWER }, /* Latin Small o with stroke */
- { 249, UNICODE_LOWER }, /* Latin Small u with grave */
- { 250, UNICODE_LOWER }, /* Latin Small u with acute */
- { 251, UNICODE_LOWER }, /* Latin Small u with circumflex */
- { 252, UNICODE_LOWER }, /* Latin Small u with diaeresis */
- { 253, UNICODE_LOWER }, /* Latin Small y with acute */
- { 254, UNICODE_LOWER }, /* Latin Small thorn */
- { 255, UNICODE_LOWER }, /* Latin Small y with diaeresis */
- { 256, UNICODE_UPPER }, /* Latin Capital A with macron */
- { 257, UNICODE_LOWER }, /* Latin Small a with macron */
- { 258, UNICODE_UPPER }, /* Latin Capital A with breve */
- { 259, UNICODE_LOWER }, /* Latin Small a with breve */
- { 260, UNICODE_UPPER }, /* Latin Capital A with ogonek */
- { 261, UNICODE_LOWER }, /* Latin Small a with ogonek */
- { 262, UNICODE_UPPER }, /* Latin Capital C with acute */
- { 263, UNICODE_LOWER }, /* Latin Small c with acute */
- { 264, UNICODE_UPPER }, /* Latin Capital C with circumflex */
- { 265, UNICODE_LOWER }, /* Latin Small c with circumflex */
- { 266, UNICODE_UPPER }, /* Latin Capital C with dot above */
- { 267, UNICODE_LOWER }, /* Latin Small c with dot above */
- { 268, UNICODE_UPPER }, /* Latin Capital C with caron (hacek) */
- { 269, UNICODE_LOWER }, /* Latin Small c with caron (hacek) */
- { 270, UNICODE_UPPER }, /* Latin Capital D with caron (hacek) */
- { 271, UNICODE_LOWER }, /* Latin Small d with caron (hacek) */
- { 272, UNICODE_UPPER }, /* Latin Capital D with stroke */
- { 273, UNICODE_LOWER }, /* Latin Small d with stroke */
- { 274, UNICODE_UPPER }, /* Latin Capital E with macron */
- { 275, UNICODE_LOWER }, /* Latin Small e with macron */
- { 276, UNICODE_UPPER }, /* Latin Capital E with breve */
- { 277, UNICODE_LOWER }, /* Latin Small e with breve */
- { 278, UNICODE_UPPER }, /* Latin Capital E with dot above */
- { 279, UNICODE_LOWER }, /* Latin Small e with dot above */
- { 280, UNICODE_UPPER }, /* Latin Capital E with ogonek */
- { 281, UNICODE_LOWER }, /* Latin Small e with ogonek */
- { 282, UNICODE_UPPER }, /* Latin Capital E with caron (hacek) */
- { 283, UNICODE_LOWER }, /* Latin Small e with caron */
- { 284, UNICODE_UPPER }, /* Latin Capital G with circumflex */
- { 285, UNICODE_LOWER }, /* Latin Small g with circumflex */
- { 286, UNICODE_UPPER }, /* Latin Capital G with breve */
- { 287, UNICODE_LOWER }, /* Latin Small g with breve */
- { 288, UNICODE_UPPER }, /* Latin Capital G with dot above */
- { 289, UNICODE_LOWER }, /* Latin Small g with dot above */
- { 290, UNICODE_UPPER }, /* Latin Capital G with cedilla */
- { 291, UNICODE_LOWER }, /* Latin Small g with cedilla */
- { 292, UNICODE_UPPER }, /* Latin Capital H with circumflex */
- { 293, UNICODE_LOWER }, /* Latin Small h with circumflex */
- { 294, UNICODE_UPPER }, /* Latin Capital H with stroke */
- { 295, UNICODE_LOWER }, /* Latin Small h with stroke */
- { 296, UNICODE_UPPER }, /* Latin Capital I with tilde */
- { 297, UNICODE_LOWER }, /* Latin Small i with tilde */
- { 298, UNICODE_UPPER }, /* Latin Capital I with macron */
- { 299, UNICODE_LOWER }, /* Latin Small i with macron */
- { 300, UNICODE_UPPER }, /* Latin Capital I with breve */
- { 301, UNICODE_LOWER }, /* Latin Small i with breve */
- { 302, UNICODE_UPPER }, /* Latin Capital I with ogonek */
- { 303, UNICODE_LOWER }, /* Latin Small i with ogonek */
- { 304, UNICODE_UPPER }, /* Latin Capital I with dot above */
- { 305, UNICODE_LOWER }, /* Latin Small i without dot above */
- { 306, UNICODE_UPPER }, /* Latin Capital IJ */
- { 307, UNICODE_LOWER }, /* Latin Small IJ */
- { 308, UNICODE_UPPER }, /* Latin Capital J with circumflex */
- { 309, UNICODE_LOWER }, /* Latin Small j with circumflex */
- { 310, UNICODE_UPPER }, /* Latin Capital K with cedilla */
- { 311, UNICODE_LOWER }, /* Latin Small j with cedilla */
- { 312, UNICODE_LOWER }, /* Latin Small kra */
- { 313, UNICODE_UPPER }, /* Latin Capital L with acute */
- { 314, UNICODE_LOWER }, /* Latin Small l with acute */
- { 315, UNICODE_UPPER }, /* Latin Capital L with cedilla */
- { 316, UNICODE_LOWER }, /* Latin Small l with cedilla */
- { 317, UNICODE_UPPER }, /* Latin Capital L with caron */
- { 318, UNICODE_LOWER }, /* Latin Small l with caron */
- { 319, UNICODE_UPPER }, /* Latin Capital L with middle dot */
- { 320, UNICODE_LOWER }, /* Latin Small l with middle dot */
- { 321, UNICODE_UPPER }, /* Latin Capital L with stroke */
- { 322, UNICODE_LOWER }, /* Latin Small l with stroke */
- { 323, UNICODE_UPPER }, /* Latin Capital N with acute */
- { 324, UNICODE_LOWER }, /* Latin Small n with acute */
- { 325, UNICODE_UPPER }, /* Latin Capital N with cedilla */
- { 326, UNICODE_LOWER }, /* Latin Small n with cedilla */
- { 327, UNICODE_UPPER }, /* Latin Capital N with caron */
- { 328, UNICODE_LOWER }, /* Latin Small n with caron */
- { 329, UNICODE_LOWER }, /* Latin Small n preceeded by apostrophe */
- { 330, UNICODE_UPPER }, /* Latin Capital Eng */
- { 331, UNICODE_LOWER }, /* Latin Small eng */
- { 332, UNICODE_UPPER }, /* Latin Capital O with macron */
- { 333, UNICODE_LOWER }, /* Latin Small o with macron */
- { 334, UNICODE_UPPER }, /* Latin Capital O with breve */
- { 335, UNICODE_LOWER }, /* Latin Small o with breve */
- { 336, UNICODE_UPPER }, /* Latin Capital O with double acute */
- { 337, UNICODE_LOWER }, /* Latin Small o with double acute */
- { 338, UNICODE_UPPER }, /* Latin Capital OE */
- { 339, UNICODE_LOWER }, /* Latin Small oe */
- { 340, UNICODE_UPPER }, /* Latin Capital R with acute */
- { 341, UNICODE_LOWER }, /* Latin Small r with acute */
- { 342, UNICODE_UPPER }, /* Latin Capital R with cedilla */
- { 343, UNICODE_LOWER }, /* Latin Small r with cedilla */
- { 344, UNICODE_UPPER }, /* Latin Capital R with caron */
- { 345, UNICODE_LOWER }, /* Latin Small r with caron */
- { 346, UNICODE_UPPER }, /* Latin Capital S with acute */
- { 347, UNICODE_LOWER }, /* Latin Small s with acute */
- { 348, UNICODE_UPPER }, /* Latin Capital S with circumflex */
- { 349, UNICODE_LOWER }, /* Latin Small s with circumflex */
- { 350, UNICODE_UPPER }, /* Latin Capital S with cedilla */
- { 351, UNICODE_LOWER }, /* Latin Small s with cedilla */
- { 352, UNICODE_UPPER }, /* Latin Capital S with caron */
- { 353, UNICODE_LOWER }, /* Latin Small s with caron */
- { 354, UNICODE_UPPER }, /* Latin Capital T with cedilla */
- { 355, UNICODE_LOWER }, /* Latin Small t with cedilla */
- { 356, UNICODE_UPPER }, /* Latin Capital T with caron */
- { 357, UNICODE_LOWER }, /* Latin Small t with caron */
- { 358, UNICODE_UPPER }, /* Latin Capital T with stroke */
- { 359, UNICODE_LOWER }, /* Latin Small t with stroke */
- { 360, UNICODE_UPPER }, /* Latin Capital U with tilde */
- { 361, UNICODE_LOWER }, /* Latin Small u with tilde */
- { 362, UNICODE_UPPER }, /* Latin Capital U with macron */
- { 363, UNICODE_LOWER }, /* Latin Small u with macron */
- { 364, UNICODE_UPPER }, /* Latin Capital U with breve */
- { 365, UNICODE_LOWER }, /* Latin Small u with breve */
- { 366, UNICODE_UPPER }, /* Latin Capital U with ring above */
- { 367, UNICODE_LOWER }, /* Latin Small u with ring above */
- { 368, UNICODE_UPPER }, /* Latin Capital U with double acute */
- { 369, UNICODE_LOWER }, /* Latin Small u with double acute */
- { 370, UNICODE_UPPER }, /* Latin Capital U with ogonek */
- { 371, UNICODE_LOWER }, /* Latin Small u with ogonek */
- { 372, UNICODE_UPPER }, /* Latin Capital W with circumflex */
- { 373, UNICODE_LOWER }, /* Latin Small w with circumflex */
- { 374, UNICODE_UPPER }, /* Latin Capital Y with circumflex */
- { 375, UNICODE_LOWER }, /* Latin Small y with circumflex */
- { 376, UNICODE_UPPER }, /* Latin Capital Y with diaeresis */
- { 377, UNICODE_UPPER }, /* Latin Capital Z with acute */
- { 378, UNICODE_LOWER }, /* Latin Small z with acute */
- { 379, UNICODE_UPPER }, /* Latin Capital Z with dot above */
- { 380, UNICODE_LOWER }, /* Latin Small z with dot above */
- { 381, UNICODE_UPPER }, /* Latin Capital Z with caron */
- { 382, UNICODE_LOWER }, /* Latin Small z with caron */
- { 383, UNICODE_LOWER }, /* Latin Small long S */
-
- { 461, UNICODE_UPPER }, /* Latin Capital A with caron (hacek) */
- { 462, UNICODE_LOWER }, /* Latin Small a with caron (hacek) */
- { 463, UNICODE_UPPER }, /* Latin Capital I with caron (hacek) */
- { 464, UNICODE_LOWER }, /* Latin Small i with caron (hacek) */
- { 465, UNICODE_UPPER }, /* Latin Capital O with caron (hacek) */
- { 466, UNICODE_LOWER }, /* Latin Small o with caron (hacek) */
- { 467, UNICODE_UPPER }, /* Latin Capital U with caron (hacek) */
- { 468, UNICODE_LOWER }, /* Latin Small u with caron (hacek) */
-
- { 486, UNICODE_UPPER }, /* Latin Capital G with caron */
- { 487, UNICODE_LOWER }, /* Latin Small g with caron */
- { 488, UNICODE_UPPER }, /* Latin Capital J with caron */
- { 489, UNICODE_LOWER }, /* Latin Small j with caron */
- { 490, UNICODE_UPPER }, /* Latin Capital O with caron */
- { 491, UNICODE_LOWER }, /* Latin Small o with caron */
-
- { 500, UNICODE_UPPER }, /* Latin Capital G with acute */
- { 501, UNICODE_LOWER }, /* Latin Small g with caron */
-};
-
-static int nunicodeinfo = sizeof( unicodeinfo ) / sizeof( unicodeinfo[0] );
-
-static int
-unicode_find( unsigned int unicode_character )
-{
- int min = 0, max = nunicodeinfo, mid;
- while ( min < max ) {
- mid = ( min + max ) / 2;
- if ( unicodeinfo[mid].value < unicode_character )
- min = mid + 1;
- else
- max = mid;
- }
- if ( ( max==min ) && ( unicodeinfo[min].value == unicode_character ) )
- return min;
- else
- return -1;
-}
-
-unsigned short
-unicode_utf8_classify( char *p )
-{
- unsigned int unicode_character, pos = 0;
- int n;
- unicode_character = utf8_decode( p, &pos );
- n = unicode_find( unicode_character );
- if ( n==-1 ) return UNICODE_SYMBOL;
- else return unicodeinfo[n].info;
-}
-
-unsigned short
-unicode_utf8_classify_str( str *s )
-{
- unsigned int unicode_character, pos = 0;
- unsigned short value = 0;
- int n;
- while ( pos < s->len ) {
- unicode_character = utf8_decode( str_cstr( s ), &pos );
- n = unicode_find( unicode_character );
- if ( n==-1 ) value |= UNICODE_SYMBOL;
- else value |= unicodeinfo[n].info;
- }
- return value;
-}
-
diff --git a/support/texlab/crates/bibutils_sys/src/unicode.h b/support/texlab/crates/bibutils_sys/src/unicode.h
deleted file mode 100644
index 41c292b352..0000000000
--- a/support/texlab/crates/bibutils_sys/src/unicode.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * unicode.h
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Program and source code released under the GPL version 2
- */
-#ifndef UNICODE_H
-#define UNICODE_H
-
-#include "str.h"
-
-#define UNICODE_SYMBOL (1)
-#define UNICODE_UPPER (2) /* Uppercase letter */
-#define UNICODE_LOWER (4) /* Lowercase letter */
-#define UNICODE_NUMBER (8) /* Numeric character */
-#define UNICODE_MIXEDCASE ( UNICODE_UPPER | UNICODE_LOWER )
-
-extern unsigned short unicode_utf8_classify( char *p );
-extern unsigned short unicode_utf8_classify_str( str *s );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/url.c b/support/texlab/crates/bibutils_sys/src/url.c
deleted file mode 100644
index b7a9c9e96f..0000000000
--- a/support/texlab/crates/bibutils_sys/src/url.c
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- * url.c
- *
- * doi_to_url()
- * Handle outputing DOI as a URL (Endnote and RIS formats)
- * 1) Append https://doi.org as necessary
- * 2) Check for overlap with pre-existing URL for the DOI
- *
- * is_doi()
- * Check for DOI buried in another field.
- *
- * Copyright (c) Chris Putnam 2008-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-#include "bibutils.h"
-#include "url.h"
-#include "msvc_fix.h"
-
-static void
-construct_url( char *prefix, str *id, str *id_url, char sep )
-{
- if ( !strncasecmp( str_cstr( id ), "http:", 5 ) )
- str_strcpy( id_url, id );
- else {
- str_strcpyc( id_url, prefix );
- if ( sep!='\0' ) {
- if ( id->data[0]!=sep ) str_addchar( id_url, sep );
- }
- str_strcat( id_url, id );
- }
-}
-
-static int
-url_exists( fields *f, char *urltag, str *doi_url )
-{
- int i, n;
- if ( urltag ) {
- n = fields_num( f );
- for ( i=0; i<n; ++i ) {
- if ( strcmp( fields_tag( f, i, FIELDS_CHRP ), urltag ) ) continue;
- if ( strcmp( fields_value( f, i, FIELDS_CHRP ), str_cstr( doi_url ) ) ) continue;
- return 1;
- }
- }
- return 0;
-}
-
-static void
-xxx_to_url( fields *f, int n, char *http_prefix, char *urltag, str *xxx_url, char sep )
-{
- str_empty( xxx_url );
- construct_url( http_prefix, fields_value( f, n, FIELDS_STRP ), xxx_url, sep );
- if ( url_exists( f, urltag, xxx_url ) )
- str_empty( xxx_url );
-}
-void
-doi_to_url( fields *f, int n, char *urltag, str *url )
-{
- xxx_to_url( f, n, "https://doi.org", urltag, url, '/' );
-}
-void
-jstor_to_url( fields *f, int n, char *urltag, str *url )
-{
- xxx_to_url( f, n, "http://www.jstor.org/stable", urltag, url, '/' );
-}
-void
-pmid_to_url( fields *f, int n, char *urltag, str *url )
-{
- xxx_to_url( f, n, "http://www.ncbi.nlm.nih.gov/pubmed", urltag, url, '/' );
-}
-void
-pmc_to_url( fields *f, int n, char *urltag, str *url )
-{
- xxx_to_url( f, n, "http://www.ncbi.nlm.nih.gov/pmc/articles", urltag, url, '/' );
-}
-void
-arxiv_to_url( fields *f, int n, char *urltag, str *url )
-{
- xxx_to_url( f, n, "http://arxiv.org/abs", urltag, url, '/' );
-}
-void
-mrnumber_to_url( fields *f, int n, char *urltag, str *url )
-{
- xxx_to_url( f, n, "http://www.ams.org/mathscinet-getitem?mr=", urltag, url, '\0' );
-}
-
-/* Rules for the pattern:
- * '#' = number
- * isalpha() = match precisely (matchcase==1) or match regardless of case
- * (matchcase==0)
- * all others must match precisely
- */
-static int
-string_pattern( char *s, char *pattern, int matchcase )
-{
- int patlen, match, i;
- patlen = strlen( pattern );
- if ( strlen( s ) < patlen ) return 0; /* too short */
- for ( i=0; i<patlen; ++i ) {
- match = 0;
- if ( pattern[i]=='#' ) {
- if ( isdigit( (unsigned char)s[i] ) ) match = 1;
- } else if ( !matchcase && isalpha( (unsigned char)pattern[i] ) ) {
- if ( tolower((unsigned char)pattern[i])==tolower((unsigned char)s[i])) match = 1;
- } else {
- if ( pattern[i] == s[i] ) match = 1;
- }
- if ( !match ) return 0;
- }
- return 1;
-}
-
-/* science direct is now doing "M3 - doi: DOI: 10.xxxx/xxxxx" */
-/* elsevier is doing "DO - https://doi.org/xx.xxxx/xxxx..." */
-int
-is_doi( char *s )
-{
- if ( string_pattern( s, "##.####/", 0 ) ) return 0;
- if ( string_pattern( s, "doi:##.####/", 0 ) ) return 4;
- if ( string_pattern( s, "doi: ##.####/", 0 ) ) return 5;
- if ( string_pattern( s, "doi: DOI: ##.####/", 0 ) ) return 10;
- if ( string_pattern( s, "https://doi.org/##.####/", 0 ) ) return 16;
- return -1;
-}
-
-/* determine if string has the header of a Universal Resource Identifier
- *
- * returns -1, if not true
- * returns offset that skips over the URI scheme, if true
- */
-int
-is_uri_remote_scheme( char *p )
-{
- char *scheme[] = { "http:", "https:", "ftp:", "git:", "gopher:" };
- int schemelen[] = { 5, 6, 4, 4, 7 };
- int i, nschemes = sizeof( scheme ) / sizeof( scheme[0] );
- for ( i=0; i<nschemes; ++i ) {
- if ( !strncasecmp( p, scheme[i], schemelen[i] ) ) return schemelen[i];
- }
- return -1;
-}
-
-int
-is_reference_database( char *p )
-{
- char *scheme[] = { "arXiv:", "pubmed:", "medline:", "isi:" };
- int schemelen[] = { 6, 7, 8, 4 };
- int i, nschemes = sizeof( scheme ) / sizeof( scheme[0] );
- for ( i=0; i<nschemes; ++i ) {
- if ( !strncasecmp( p, scheme[i], schemelen[i] ) ) return schemelen[i];
- }
- return -1;
-}
-
-/* many fields have been abused to embed URLs, DOIs, etc. */
-int
-is_embedded_link( char *s )
-{
- if ( is_uri_remote_scheme( s ) != -1 ) return 1;
- if ( is_reference_database( s ) != -1 ) return 1;
- if ( is_doi( s ) !=-1 ) return 1;
- return 0;
-}
-
-typedef struct url_t {
- char *tag;
- char *prefix;
- int offset;
-} url_t;
-
-static url_t prefixes[] = {
- /* 00000000001111111112222222222333333333344444444445 */
- /* 12345678901234567890123456789012345678901234567890 */
- { "ARXIV", "http://arxiv.org/abs/", 21 },
- { "DOI", "https://doi.org/", 16 },
- { "JSTOR", "http://www.jstor.org/stable/", 28 },
- { "MRNUMBER", "http://www.ams.org/mathscinet-getitem?mr=", 41 },
- { "PMID", "http://www.ncbi.nlm.nih.gov/pubmed/", 35 },
- { "PMC", "http://www.ncbi.nlm.nih.gov/pmc/articles/", 41 },
- { "ISIREFNUM", "isi:", 4 },
-};
-static int nprefixes = sizeof( prefixes ) / sizeof( prefixes[0] );
-
-/* do not add, but recognize */
-static url_t extraprefixes[] = {
- /* 00000000001111111112222222222333333333344444444445 */
- /* 12345678901234567890123456789012345678901234567890 */
- { "ARXIV", "arXiv:", 6 },
- { "DOI", "http://dx.doi.org/", 18 },
- { "JSTOR", "jstor:", 6 },
- { "PMID", "pmid:", 5 },
- { "PMID", "pubmed:", 7 },
- { "PMC", "pmc:", 4 },
- { "URL", "\\urllink", 8 },
- { "URL", "\\url", 4 },
-};
-static int nextraprefixes = sizeof( extraprefixes ) / sizeof( extraprefixes[0] );
-
-static int
-find_prefix( char *s, url_t *p, int np )
-{
- int i;
-
- for ( i=0; i<np; ++i )
- if ( !strncmp( p[i].prefix, s, p[i].offset ) ) return i;
-
- return -1;
-}
-
-int
-urls_split_and_add( char *value_in, fields *out, int lvl_out )
-{
- int n, fstatus, status = BIBL_OK;
- char *tag = "URL";
- int offset = 0;
-
- n = find_prefix( value_in, prefixes, nprefixes );
- if ( n!=-1 ) {
- tag = prefixes[n].tag;
- offset = prefixes[n].offset;
- } else {
- n = find_prefix( value_in, extraprefixes, nextraprefixes );
- if ( n!=-1 ) {
- tag = extraprefixes[n].tag;
- offset = extraprefixes[n].offset;
- }
- }
-
- fstatus = fields_add( out, tag, &(value_in[offset]), lvl_out );
- if ( fstatus!=FIELDS_OK ) status = BIBL_ERR_MEMERR;
-
- return status;
-}
-
-/* urls_add_type()
- *
- * Append urls of a specific type with a specific prefix (which can be empty).
- * We don't allow duplications here.
- *
- */
-static int
-urls_merge_and_add_type( fields *out, char *tag_out, int lvl_out, char *prefix, vplist *values )
-{
- int fstatus, status = BIBL_OK;
- vplist_index i;
- str url;
-
- str_init( &url );
-
- for ( i=0; i<values->n; ++i ) {
- str_strcpyc( &url, prefix );
- str_strcatc( &url, ( char * ) vplist_get( values, i ) );
- fstatus = fields_add( out, tag_out, str_cstr( &url ), lvl_out );
- if ( fstatus!=FIELDS_OK ) {
- status = BIBL_ERR_MEMERR;
- goto out;
- }
-
- }
-out:
- str_free( &url );
- return status;
-}
-
-/*
- * urls_merge_and_add()
- *
- * Append urls of types controlled by the list type and automatically append appropriate
- * prefixes. If no prefix is found for the entry, don't add one (e.g. "URL" entries).
- *
- * Control of the types to be added by list type is necessary as some reference formats
- * like bibtex ought to do special things with DOI, ARXIV, MRNUMBER, and the like.
- */
-int
-urls_merge_and_add( fields *in, int lvl_in, fields *out, char *tag_out, int lvl_out, slist *types )
-{
- int i, j, status = BIBL_OK;
- char *tag, *prefix, *empty="";
- vplist a;
-
- vplist_init( &a );
-
- for ( i=0; i<types->n; ++i ) {
-
- tag = slist_cstr( types, i );
-
- /* ...look for data of requested type; if not found skip */
- vplist_empty( &a );
- fields_findv_each( in, lvl_in, FIELDS_CHRP, &a, tag );
- if ( a.n==0 ) continue;
-
- /* ...find the prefix (if present) */
- prefix = empty;
- for ( j=0; j<nprefixes; ++j ) {
- if ( !strcmp( prefixes[j].tag, tag ) ) {
- prefix = prefixes[j].prefix;
- break; /* take the first prefix in the list */
- }
- }
-
- /* ...append all data of this type */
- status = urls_merge_and_add_type( out, tag_out, lvl_out, prefix, &a );
- if ( status!=BIBL_OK ) goto out;
- }
-
-out:
- vplist_free( &a );
-
- return status;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/url.h b/support/texlab/crates/bibutils_sys/src/url.h
deleted file mode 100644
index 5348ad3cb3..0000000000
--- a/support/texlab/crates/bibutils_sys/src/url.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * url.h
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef URL_H
-#define URL_H
-
-#include "slist.h"
-#include "fields.h"
-
-int is_doi( char *s );
-int is_uri_remote_scheme( char *p );
-int is_embedded_link( char *s );
-
-void doi_to_url( fields *info, int n, char *urltag, str *doi_url );
-void pmid_to_url( fields *info, int n, char *urltag, str *pmid_url );
-void pmc_to_url( fields *info, int n, char *urltag, str *pmid_url );
-void arxiv_to_url( fields *info, int n, char *urltag, str *arxiv_url );
-void jstor_to_url( fields *info, int n, char *urltag, str *jstor_url );
-void mrnumber_to_url( fields *info, int n, char *urltag, str *jstor_url );
-
-int urls_merge_and_add( fields *in, int lvl_in, fields *out, char *tag_out, int lvl_out, slist *types );
-int urls_split_and_add( char *value_in, fields *out, int lvl_out );
-
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/utf8.c b/support/texlab/crates/bibutils_sys/src/utf8.c
deleted file mode 100644
index fcc14365a4..0000000000
--- a/support/texlab/crates/bibutils_sys/src/utf8.c
+++ /dev/null
@@ -1,188 +0,0 @@
-/*
- * utf8.c
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <string.h>
-#include "utf8.h"
-
-/* UTF-8 encoding
-
-U-00000000 - U-0000007F: 0xxxxxxx
-U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
-U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
-U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
-U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
-U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
-
-*/
-
-static void
-utf8_build( unsigned int value, unsigned char out[6], int in_pos, int out_pos )
-{
- unsigned int in_mask, out_mask;
- int byte = 0;
- while ( in_pos < 32 ) {
- in_mask = 1 << ( 31 - in_pos );
- out_mask = 1 << ( 7 - out_pos );
- if ( value & in_mask ) out[byte] |= out_mask;
- in_pos++;
- out_pos++;
- if ( out_pos > 7 ) {
- out_pos=2;
- byte++;
- }
- }
-}
-
-/* int utf8( in, out[6] );
- *
- * in is character code 0x0 -> 0x7FFFFFFF
- * int is number of characters for output
- *
- */
-int
-utf8_encode( unsigned int value, unsigned char out[6] )
-{
- int i;
- for ( i=1; i<6; ++i ) out[i] = 0x80; /* 10xxxxxx */
- if ( value < 0x80 ) {
- out[0] = 0x0; /* 0xxxxxxx */
- utf8_build( value, out, 25, 1 );
- return 1;
- } else if ( value < 0x800 ) {
- out[0] = 0xC0; /* 110xxxxx */
- utf8_build( value, out, 21, 3 );
- return 2;
- } else if ( value < 0x10000 ) {
- out[0] = 0xE0; /* 1110xxxx */
- utf8_build( value, out, 16, 4 );
- return 3;
- } else if ( value < 0x200000 ) {
- out[0] = 0xF0; /* 11110xxx */
- utf8_build( value, out, 11, 5 );
- return 4;
- } else if ( value < 0x4000000 ) {
- out[0] = 0xF8; /* 111110xx */
- utf8_build( value, out, 6, 6 );
- return 5;
- } else if ( value < (unsigned int ) 0x80000000 ) {
- out[0] = 0xFC; /* 1111110x */
- utf8_build( value, out, 1, 7 );
- return 6;
- } else {
- /* error, above 2^31 bits encodable by UTF-8 */
- return 0;
- }
-}
-
-/* Generate UTF8 character as null-terminated string */
-void
-utf8_encode_str( unsigned int value, char outstr[7] )
-{
- unsigned char encoded[6];
- int i, n;
- n = utf8_encode( value, encoded );
- for ( i=0; i<n; ++i )
- outstr[i] = ( char ) encoded[i];
- outstr[n] = '\0';
-}
-
-unsigned int
-utf8_decode( const char *s, unsigned int *pi )
-{
- unsigned int c;
- int i = *pi;
- /* one digit utf-8 */
- if ((s[i] & 128)== 0 ) {
- c = (unsigned int) s[i];
- i += 1;
- } else if ((s[i] & 224)== 192 ) { /* 110xxxxx & 111xxxxx == 110xxxxx */
- c = (( (unsigned int) s[i] & 31 ) << 6) +
- ( (unsigned int) s[i+1] & 63 );
- i += 2;
- } else if ((s[i] & 240)== 224 ) { /* 1110xxxx & 1111xxxx == 1110xxxx */
- c = ( ( (unsigned int) s[i] & 15 ) << 12 ) +
- ( ( (unsigned int) s[i+1] & 63 ) << 6 ) +
- ( (unsigned int) s[i+2] & 63 );
- i += 3;
- } else if ((s[i] & 248)== 240 ) { /* 11110xxx & 11111xxx == 11110xxx */
- c = ( ( (unsigned int) s[i] & 7 ) << 18 ) +
- ( ( (unsigned int) s[i+1] & 63 ) << 12 ) +
- ( ( (unsigned int) s[i+2] & 63 ) << 6 ) +
- ( (unsigned int) s[i+3] & 63 );
- i+= 4;
- } else if ((s[i] & 252)== 248 ) { /* 111110xx & 111111xx == 111110xx */
- c = ( ( (unsigned int) s[i] & 3 ) << 24 ) +
- ( ( (unsigned int) s[i+1] & 63 ) << 18 ) +
- ( ( (unsigned int) s[i+2] & 63 ) << 12 ) +
- ( ( (unsigned int) s[i+3] & 63 ) << 6 ) +
- ( (unsigned int) s[i+4] & 63 );
- i += 5;
- } else if ((s[i] & 254)== 252 ) { /* 1111110x & 1111111x == 1111110x */
- c = ( ( (unsigned int) s[i] & 1 ) << 30 ) +
- ( ( (unsigned int) s[i+1] & 63 ) << 24 ) +
- ( ( (unsigned int) s[i+2] & 63 ) << 18 ) +
- ( ( (unsigned int) s[i+3] & 63 ) << 12 ) +
- ( ( (unsigned int) s[i+4] & 63 ) << 6 ) +
- ( (unsigned int) s[i+5] & 63 );
- i += 6;
- } else {
- c = '?';
- i++;
- }
- *pi = i;
- return c;
-}
-
-void
-utf8_writebom( FILE *outptr )
-{
- int i, nc;
- unsigned char code[6];
- nc = utf8_encode( 0xFEFF, code );
- for ( i=0; i<nc; ++i )
- fprintf(outptr,"%c",code[i]);
-}
-
-int
-utf8_is_bom( const char *p )
-{
- const unsigned char *up = ( unsigned char * ) p;
-
- /* ...if null-terminated string is too short, we're ok */
- if ( up[0]!=0xEF ) return 0;
- if ( up[1]!=0xBB ) return 0;
- if ( up[2]!=0xBF ) return 0;
-
- return 1;
-}
-
-/* utf8_is_emdash()
- *
- *emdash = 0xE2 (-30) 0x80 (-128) 0x94 (-108)
- */
-int
-utf8_is_emdash( const char *p )
-{
- const char emdash[3] = { -30, -128, -108 };
- if ( strncmp( p, emdash, 3 ) ) return 0;
- return 1;
-}
-
-/* utf8_is_endash()
- *
- * endash = 0xE2 (-30) 0x80 (-128) 0x93 (-109)
- */
-int
-utf8_is_endash( const char *p )
-{
- const char endash[3] = { -30, -128, -109 };
- if ( strncmp( p, endash, 3 ) ) return 0;
- return 1;
-}
-
diff --git a/support/texlab/crates/bibutils_sys/src/utf8.h b/support/texlab/crates/bibutils_sys/src/utf8.h
deleted file mode 100644
index 2e3a1e63b7..0000000000
--- a/support/texlab/crates/bibutils_sys/src/utf8.h
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * utf8.h
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef UTF8_H
-#define UTF8_H
-
-#include <stdio.h>
-
-int utf8_encode( unsigned int value, unsigned char out[6] );
-void utf8_encode_str( unsigned int value, char outstr[7] );
-unsigned int utf8_decode( const char *s, unsigned int *pi );
-void utf8_writebom( FILE *outptr );
-int utf8_is_bom( const char *p );
-int utf8_is_emdash( const char *p );
-int utf8_is_endash( const char *p );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/vplist.c b/support/texlab/crates/bibutils_sys/src/vplist.c
deleted file mode 100644
index 7f4e2927c9..0000000000
--- a/support/texlab/crates/bibutils_sys/src/vplist.c
+++ /dev/null
@@ -1,387 +0,0 @@
-/*
- * vplist.c
- *
- * Version: 1/9/2017
- *
- * Copyright (c) Chris Putnam 2011-2019
- *
- * Source code released under the GPL version 2
- *
- * Implements a simple managed array of pointers to void
- *
- */
-#include <stdlib.h>
-#include "vplist.h"
-
-/* Do not use asserts in VPLIST_NOASSERT defined */
-#ifdef VPLIST_NOASSERT
-#define NDEBUG
-#endif
-#include <assert.h>
-
-#define VPLIST_MINALLOC (20)
-
-#define VPLIST_EXACT_SIZE (0)
-#define VPLIST_DOUBLE_SIZE (1)
-
-void
-vplist_init( vplist *vpl )
-{
- assert( vpl );
- vpl->data = NULL;
- vpl->n = vpl->max = 0;
-}
-
-vplist *
-vplist_new( void )
-{
- vplist *vpl;
- vpl = ( vplist * ) malloc( sizeof( vplist ) );
- if ( vpl ) vplist_init( vpl );
- return vpl;
-}
-
-static inline int
-vplist_alloc( vplist *vpl, vplist_index alloc )
-{
- vpl->data = ( void ** ) malloc( sizeof( void * ) * alloc );
- if ( !vpl->data ) return VPLIST_MEMERR;
-
- vpl->max = alloc;
- vpl->n = 0;
-
- return VPLIST_OK;
-}
-
-static inline int
-vplist_realloc( vplist *vpl, vplist_index alloc )
-{
- void **more;
-
- more = ( void ** ) realloc( vpl->data, sizeof( void * ) * alloc );
- if ( !more ) return VPLIST_MEMERR;
-
- vpl->data = more;
- vpl->max = alloc;
-
- return VPLIST_OK;
-}
-
-/* vplist_ensure_space( vpl, n, mode )
- *
- * Makes sure that vplist can hold at least n members, allocating memory if required.
- *
- * mode
- * - Can either be VPLIST_DOUBLE_SIZE or VPLIST_EXACT_SIZE.
- * - If VPLIST_EXACT_SIZE and current size < n, size will be exactly n.
- * - If VPLIST_DOUBLE_SIZE and current size < n, size will be doubled (or VPLIST_MINALLOC
- * if the vplist is empty) or n, whichever is bigger.
- *
- * Returns VPLIST_OK or VPLIST_MEMERR.
- */
-static int
-vplist_ensure_space( vplist *vpl, vplist_index n, unsigned char mode )
-{
- vplist_index alloc = n;
- int status = VPLIST_OK;
-
- if ( vpl->max == 0 ) {
- if ( mode == VPLIST_DOUBLE_SIZE && alloc < VPLIST_MINALLOC ) alloc = VPLIST_MINALLOC;
- status = vplist_alloc( vpl, alloc );
- }
-
- else if ( vpl->max < n ) {
- if ( mode == VPLIST_DOUBLE_SIZE && alloc < 2 * vpl->max ) alloc = 2 * vpl->max;
- status = vplist_realloc( vpl, alloc );
- }
-
- return status;
-}
-
-int
-vplist_copy( vplist *to, vplist *from )
-{
- vplist_index i;
- int status;
-
- assert( to );
- assert( from );
-
- status = vplist_ensure_space( to, from->n, VPLIST_EXACT_SIZE );
-
- if ( status == VPLIST_OK ) {
-
- for ( i=0; i<from->n; ++i )
- to->data[i] = from->data[i];
- to->n = from->n;
-
- }
-
- return status;
-}
-
-int
-vplist_fill( vplist *vpl, vplist_index n, void *v )
-{
- vplist_index i;
- int status;
-
- assert( vpl );
-
- status = vplist_ensure_space( vpl, n, VPLIST_EXACT_SIZE );
-
- if ( status == VPLIST_OK ) {
-
- for ( i=0; i<n; ++i )
- vpl->data[i] = v;
- vpl->n = n;
-
- }
-
- return status;
-}
-
-int
-vplist_add( vplist *vpl, void *v )
-{
- int status;
-
- assert( vpl );
-
- status = vplist_ensure_space( vpl, vpl->n + 1, VPLIST_DOUBLE_SIZE );
-
- if ( status == VPLIST_OK ) {
-
- vpl->data[vpl->n] = v;
- vpl->n++;
-
- }
-
- return status;
-}
-
-int
-vplist_insert_list( vplist *vpl, vplist_index pos, vplist *add )
-{
- vplist_index i;
- int status;
-
- assert( vpl );
- assert( add );
- assert( pos <= vpl->n );
-
- /* nothing to do here */
- if ( add->n < 1 ) return VPLIST_OK;
-
- status = vplist_ensure_space( vpl, vpl->n + add->n, VPLIST_DOUBLE_SIZE );
-
- if ( status == VPLIST_OK ) {
-
- for ( i=vpl->n-1; i>=pos; --i )
- vpl->data[i+add->n] = vpl->data[i];
-
- for ( i=0; i<add->n; ++i )
- vpl->data[pos+i] = add->data[i];
-
- vpl->n += add->n;
- }
-
- return status;
-}
-
-int
-vplist_append( vplist *vpl, vplist *add )
-{
- vplist_index i;
- int status;
-
- assert( vpl );
- assert( add );
-
- status = vplist_ensure_space( vpl, vpl->n + add->n, VPLIST_DOUBLE_SIZE );
-
- if ( status == VPLIST_OK ) {
-
- for ( i=0; i<add->n; ++i )
- vpl->data[ vpl->n + i ] = add->data[i];
-
- vpl->n += add->n;
-
- }
-
- return status;
-}
-
-static void
-vplist_freemembers( vplist *vpl, vplist_ptrfree vpf )
-{
- vplist_index i;
- void *v;
- for ( i=0; i<vpl->n; ++i ) {
- v = vplist_get( vpl, i );
- if ( v ) (*vpf)( v );
- }
-}
-
-void
-vplist_emptyfn( vplist *vpl, vplist_ptrfree vpf )
-{
- assert( vpl );
- if ( vpf ) vplist_freemembers( vpl, vpf );
- vpl->n = 0;
-}
-
-void
-vplist_empty( vplist *vpl )
-{
- vplist_emptyfn( vpl, NULL );
-}
-
-void
-vplist_freefn( vplist *vpl, vplist_ptrfree vpf )
-{
- assert( vpl );
- if ( vpf ) vplist_freemembers( vpl, vpf );
- if ( vpl->data ) free( vpl->data );
- vplist_init( vpl );
-}
-
-void
-vplist_free( vplist *vpl )
-{
- vplist_freefn( vpl, NULL );
-}
-
-void
-vplist_deletefn( vplist **vpl, vplist_ptrfree vpf )
-{
- vplist_freefn( *vpl, vpf );
- free( *vpl );
- *vpl = NULL;
-}
-
-void
-vplist_delete( vplist **vpl )
-{
- vplist_deletefn( vpl, NULL );
-}
-
-static inline int
-vplist_validindex( vplist *vpl, vplist_index n )
-{
- if ( n < 0 || n >= vpl->n ) return 0;
- return 1;
-}
-
-void *
-vplist_get( vplist *vpl, vplist_index n )
-{
- assert( vpl );
- if ( !vplist_validindex( vpl, n ) ) return NULL;
- return vpl->data[ n ];
-}
-
-void
-vplist_set( vplist *vpl, vplist_index n, void *v )
-{
- assert( vpl );
- assert( vplist_validindex( vpl, n ) );
- vpl->data[ n ] = v;
-}
-
-int
-vplist_find( vplist *vpl, void *v )
-{
- vplist_index i;
- assert( vpl );
- for ( i=0; i<vpl->n; ++i )
- if ( vpl->data[i]==v ) return i;
- return -1;
-}
-
-void
-vplist_swap( vplist *vpl, vplist_index n1, vplist_index n2 )
-{
- void *tmp;
-
- assert( vpl );
- assert( vplist_validindex( vpl, n1 ) );
- assert( vplist_validindex( vpl, n2 ) );
-
- tmp = vpl->data[n1];
- vpl->data[n1] = vpl->data[n2];
- vpl->data[n2] = tmp;
-}
-
-int
-vplist_removefn( vplist *vpl, vplist_index n, vplist_ptrfree vpf )
-{
- vplist_index i;
-
- assert( vpl );
- assert( vplist_validindex( vpl, n ) );
-
- if ( vpf ) (*vpf)( vplist_get( vpl, n ) );
-
- for ( i=n+1; i<vpl->n; ++i )
- vpl->data[ i-1 ] = vpl->data[ i ];
- vpl->n -= 1;
-
- return 1;
-}
-
-int
-vplist_remove( vplist *vpl, vplist_index n )
-{
- return vplist_removefn( vpl, n, NULL );
-}
-
-int
-vplist_removevpfn( vplist *vpl, void *v, vplist_ptrfree vpf )
-{
- vplist_index n;
- int count = 0;
-
- assert( vpl );
-
- do {
- n = vplist_find( vpl, v );
- if ( vplist_found( vpl, n ) ) {
- vplist_removefn( vpl, n, vpf );
- count++;
- }
- } while ( vplist_found( vpl, n ) );
-
- return count;
-}
-
-int
-vplist_removevp( vplist *vpl, void *v )
-{
- return vplist_removevpfn( vpl, v, NULL );
-}
-
-void
-vplist_remove_rangefn( vplist *vpl, vplist_index start, vplist_index endplusone, vplist_ptrfree vpf )
-{
- vplist_index i, n;
-
- assert( endplusone <= vpl->n );
- assert( endplusone > start );
-
- n = endplusone - start;
- if ( vpf ) {
- for ( i=start; i<endplusone; ++i )
- (*vpf)( vplist_get( vpl, i ) );
- }
- for ( i=endplusone; i<vpl->n; ++i ) {
- vpl->data[i-n] = vpl->data[i];
- }
- vpl->n -= n;
-}
-
-void
-vplist_remove_range( vplist *vpl, vplist_index start, vplist_index endplusone )
-{
- vplist_remove_rangefn( vpl, start, endplusone, NULL );
-}
diff --git a/support/texlab/crates/bibutils_sys/src/vplist.h b/support/texlab/crates/bibutils_sys/src/vplist.h
deleted file mode 100644
index 9a1c7ba037..0000000000
--- a/support/texlab/crates/bibutils_sys/src/vplist.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * vplist.h
- *
- * generic container to hold a list of pointers to void
- *
- * Version: 1/9/2017
- *
- * Copyright (c) Chris Putnam 2011-2019
- *
- * Source code released under the GPL version 2
- *
- */
-
-#ifndef VPLIST_H
-#define VPLIST_H
-
-#define VPLIST_MEMERR (-1)
-#define VPLIST_OK (0)
-
-typedef int vplist_index;
-
-typedef struct vplist {
- vplist_index n, max;
- void **data;
-} vplist;
-
-#define vplist_found( vpl, n ) ( n!=-1 )
-#define vplist_notfound( vpl, n ) ( n==-1 )
-
-typedef void (*vplist_ptrfree)(void*);
-
-vplist * vplist_new( void );
-
-void vplist_init ( vplist *vpl );
-int vplist_add ( vplist *vpl, void *v );
-int vplist_fill ( vplist *vpl, vplist_index n, void *v );
-int vplist_copy ( vplist *to, vplist *from );
-int vplist_append ( vplist *vpl, vplist *add );
-int vplist_insert_list ( vplist *vpl, vplist_index pos, vplist *add );
-void * vplist_get ( vplist *vpl, vplist_index n );
-void vplist_set ( vplist *vpl, vplist_index n, void *v );
-void vplist_swap ( vplist *vpl, vplist_index n1, vplist_index n2 );
-int vplist_remove ( vplist *vpl, vplist_index n );
-int vplist_removefn ( vplist *vpl, vplist_index n, vplist_ptrfree vpf );
-int vplist_removevp ( vplist *vpl, void *v );
-int vplist_removevpfn ( vplist *vpl, void *v, vplist_ptrfree vpf );
-void vplist_remove_rangefn( vplist *vpl, vplist_index start, vplist_index endplusone, vplist_ptrfree vpf );
-void vplist_remove_range ( vplist *vpl, vplist_index start, vplist_index endplusone );
-
-vplist_index vplist_find( vplist *vpl, void *v );
-
-/*
- * vplist_empty does not free space
- *
- * if members require their own free calls, then call vplist_emptyfn()
- *
- * void
- * member_free( void *v )
- * {
- * member *m = ( member * ) v;
- * member_free( m );
- * free( m );
- * }
- * vplist_emptyfn( &vpl, member_free );
- *
- * if members are simply allocated with malloc(), then use free()
- *
- * vplist_emptyfn( &vpl, free );
- */
-void vplist_empty ( vplist *vpl );
-void vplist_emptyfn( vplist *vpl, vplist_ptrfree fn );
-/*
- * vplist_free frees the space for the data array of void * elements.
- *
- * if members require their own free calls, then call vplist_freefn()
- */
-void vplist_free ( vplist *vpl );
-void vplist_freefn( vplist *vpl, vplist_ptrfree fn );
-/*
- * vplist_delete does vplist_free and deallocates the struct
- * vplist * and replaces with NULL.
- */
-void vplist_delete ( vplist **vpl );
-void vplist_deletefn( vplist **vpl, vplist_ptrfree fn );
-
-#endif
diff --git a/support/texlab/crates/bibutils_sys/src/wordin.c b/support/texlab/crates/bibutils_sys/src/wordin.c
deleted file mode 100644
index 10e3a53850..0000000000
--- a/support/texlab/crates/bibutils_sys/src/wordin.c
+++ /dev/null
@@ -1,322 +0,0 @@
-/*
- * wordin.c
- *
- * Copyright (c) Chris Putnam 2010-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include "is_ws.h"
-#include "str.h"
-#include "str_conv.h"
-#include "fields.h"
-#include "xml.h"
-#include "xml_encoding.h"
-#include "bibformats.h"
-
-static int wordin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset );
-static int wordin_processf( fields *wordin, const char *data, const char *filename, long nref, param *p );
-
-
-/*****************************************************
- PUBLIC: void wordin_initparams()
-*****************************************************/
-
-int
-wordin_initparams( param *pm, const char *progname )
-{
- pm->readformat = BIBL_WORDIN;
- pm->charsetin = BIBL_CHARSET_DEFAULT;
- pm->charsetin_src = BIBL_SRC_DEFAULT;
- pm->latexin = 0;
- pm->xmlin = 1;
- pm->utf8in = 1;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->output_raw = BIBL_RAW_WITHMAKEREFID |
- BIBL_RAW_WITHCHARCONVERT;
-
- pm->readf = wordin_readf;
- pm->processf = wordin_processf;
- pm->cleanf = NULL;
- pm->typef = NULL;
- pm->convertf = NULL;
- pm->all = NULL;
- pm->nall = 0;
-
- slist_init( &(pm->asis) );
- slist_init( &(pm->corps) );
-
- if ( !progname ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int wordin_readf()
-*****************************************************/
-
-static char *
-wordin_findstartwrapper( char *buf, int *ntype )
-{
- return xml_find_start( buf, "b:Source" );
-}
-
-static char *
-wordin_findendwrapper( char *buf, int ntype )
-{
- return xml_find_end( buf, "b:Source" );
-}
-
-static int
-wordin_readf( FILE *fp, char *buf, int bufsize, int *bufpos, str *line, str *reference, int *fcharset )
-{
- str tmp;
- char *startptr = NULL, *endptr;
- int haveref = 0, inref = 0, file_charset = CHARSET_UNKNOWN, m, type = 1;
- str_init( &tmp );
- while ( !haveref && str_fget( fp, buf, bufsize, bufpos, line ) ) {
- if ( str_cstr( line ) ) {
- m = xml_getencoding( line );
- if ( m!=CHARSET_UNKNOWN ) file_charset = m;
- }
- if ( str_cstr( line ) ) {
- startptr = wordin_findstartwrapper( str_cstr( line ), &type );
- }
- if ( startptr || inref ) {
- if ( inref ) str_strcat( &tmp, line );
- else {
- str_strcatc( &tmp, startptr );
- inref = 1;
- }
- endptr = wordin_findendwrapper( str_cstr( &tmp ), type );
- if ( endptr ) {
- str_segcpy( reference, str_cstr( &tmp ), endptr );
- haveref = 1;
- }
- }
- }
- str_free( &tmp );
- *fcharset = file_charset;
- return haveref;
-}
-
-/*****************************************************
- PUBLIC: int wordin_processf()
-*****************************************************/
-
-typedef struct xml_convert {
- char *in; /* The input tag */
- char *a, *aval; /* The attribute="attribute_value" pair, if nec. */
- char *out; /* The output tag */
- int level;
-} xml_convert;
-
-/* wordin_person_last()
- *
- * From an xml list, extract the value from the first entry
- * of <b:Last>xxxx</b:Last> and copy into name
- *
- * Additional <b:Last>yyyyy</b:Last> will be ignored.
- *
- * Returns BIBL_ERR_MEMERR on memory error, BIBL_OK otherwise.
- */
-static int
-wordin_person_last( xml *node, str *name )
-{
- while ( node && !xml_tag_matches( node, "b:Last" ) )
- node = node->next;
- if ( xml_has_value( node ) ) {
- str_strcpy( name, xml_value( node ) );
- if ( str_memerr( name ) ) return BIBL_ERR_MEMERR;
- }
- return BIBL_OK;
-}
-
-/* wordin_person_first()
- *
- * From an xml list, extract the value of any
- * <b:First>xxxx</b:First> and append "|xxxx" to name.
- *
- * Returns BIBL_ERR_MEMERR on memory error, BIBL_OK otherwise
- */
-static int
-wordin_person_first( xml *node, str *name )
-{
- for ( ; node; node=node->next ) {
- if ( !xml_tag_matches( node, "b:First" ) ) continue;
- if ( xml_has_value( node ) ) {
- if ( str_has_value( name ) ) str_addchar( name, '|' );
- str_strcat( name, xml_value( node ) );
- if ( str_memerr( name ) ) return BIBL_ERR_MEMERR;
- }
- }
- return BIBL_OK;
-}
-
-static int
-wordin_person( xml *node, fields *info, char *type )
-{
- int status, ret = BIBL_OK;
- str name;
-
- str_init( &name );
-
- status = wordin_person_last( node, &name );
- if ( status!=BIBL_OK ) {
- ret = status;
- goto out;
- }
-
- status = wordin_person_first( node, &name );
- if ( status!=BIBL_OK ) {
- ret = status;
- goto out;
- }
-
- status = fields_add( info, type, str_cstr( &name ), 0 );
- if ( status != FIELDS_OK ) ret = BIBL_ERR_MEMERR;
-out:
- str_free( &name );
- return ret;
-}
-
-static int
-wordin_people( xml *node, fields *info, char *type )
-{
- int ret = BIBL_OK;
- if ( xml_tag_matches( node, "b:Author" ) && node->down ) {
- ret = wordin_people( node->down, info, type );
- } else if ( xml_tag_matches( node, "b:NameList" ) && node->down ) {
- ret = wordin_people( node->down, info, type );
- } else if ( xml_tag_matches( node, "b:Person" ) ) {
- if ( node->down ) ret = wordin_person( node->down, info, type );
- if ( ret!=BIBL_OK ) return ret;
- if ( node->next ) ret = wordin_people( node->next, info, type );
- }
- return ret;
-}
-
-static int
-wordin_pages( xml *node, fields *info )
-{
- int i, status, ret = BIBL_OK;
- str sp, ep;
- char *p;
-
- strs_init( &sp, &ep, NULL );
-
- p = xml_value_cstr( node );
- while ( *p && *p!='-' )
- str_addchar( &sp, *p++ );
- if ( str_memerr( &sp ) ) {
- ret = BIBL_ERR_MEMERR;
- goto out;
- }
-
- if ( *p=='-' ) p++;
- while ( *p )
- str_addchar( &ep, *p++ );
- if ( str_memerr( &ep ) ) {
- ret = BIBL_ERR_MEMERR;
- goto out;
- }
-
- if ( str_has_value( &sp ) ) {
- status = fields_add( info, "PAGES:START", str_cstr( &sp ), 1 );
- if ( status!=FIELDS_OK ) {
- ret = BIBL_ERR_MEMERR;
- goto out;
- }
- }
-
- if ( str_has_value( &ep ) ) {
- if ( sp.len > ep.len ) {
- for ( i=sp.len-ep.len; i<sp.len; ++i )
- sp.data[i] = ep.data[i-sp.len+ep.len];
- status = fields_add( info, "PAGES:STOP", str_cstr( &sp ), 1 );
- } else
- status = fields_add( info, "PAGES:STOP", str_cstr( &ep ), 1 );
- if ( status!=FIELDS_OK ) {
- ret = BIBL_ERR_MEMERR;
- goto out;
- }
- }
-
-out:
- strs_free( &sp, &ep, NULL );
- return ret;
-}
-
-static int
-wordin_reference( xml *node, fields *info )
-{
- int status, ret = BIBL_OK;
- if ( xml_has_value( node ) ) {
- if ( xml_tag_matches( node, "b:Tag" ) ) {
- status = fields_add( info, "REFNUM", xml_value_cstr( node ), 0 );
- if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR;
- } else if ( xml_tag_matches( node, "b:SourceType" ) ) {
- } else if ( xml_tag_matches( node, "b:City" ) ) {
- status = fields_add( info, "ADDRESS", xml_value_cstr( node ), 0 );
- if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR;
- } else if ( xml_tag_matches( node, "b:Publisher" ) ) {
- status = fields_add( info, "PUBLISHER", xml_value_cstr( node ), 0 );
- if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR;
- } else if ( xml_tag_matches( node, "b:Title" ) ) {
- status = fields_add( info, "TITLE", xml_value_cstr( node ), 0 );
- if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR;
- } else if ( xml_tag_matches( node, "b:JournalName" ) ) {
- status = fields_add( info, "TITLE", xml_value_cstr( node ), 1 );
- if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR;
- } else if ( xml_tag_matches( node, "b:Volume" ) ) {
- status = fields_add( info, "VOLUME", xml_value_cstr( node ), 1 );
- if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR;
- } else if ( xml_tag_matches( node, "b:Comments" ) ) {
- status = fields_add( info, "NOTES", xml_value_cstr( node ), 0 );
- if ( status!=FIELDS_OK ) ret = BIBL_ERR_MEMERR;
- } else if ( xml_tag_matches( node, "b:Pages" ) ) {
- ret = wordin_pages( node, info );
- } else if ( xml_tag_matches( node, "b:Author" ) && node->down ) {
- ret = wordin_people( node->down, info, "AUTHOR" );
- } else if ( xml_tag_matches( node, "b:Editor" ) && node->down ) {
- ret = wordin_people( node->down, info, "EDITOR" );
- }
- }
- if ( ret==BIBL_OK && node->next ) wordin_reference( node->next, info );
- return ret;
-}
-
-static int
-wordin_assembleref( xml *node, fields *info )
-{
- int ret = BIBL_OK;
- if ( xml_tag_matches( node, "b:Source" ) ) {
- if ( node->down ) ret = wordin_reference( node->down, info );
- } else if ( str_is_empty( &(node->tag) ) && node->down ) {
- ret = wordin_assembleref( node->down, info );
- }
- return ret;
-}
-
-static int
-wordin_processf( fields *wordin, const char *data, const char *filename, long nref, param *p )
-{
- int status, ret = 1;
- xml top;
-
- xml_init( &top );
- xml_parse( data, &top );
- status = wordin_assembleref( &top, wordin );
- xml_free( &top );
-
- if ( status==BIBL_ERR_MEMERR ) ret = 0;
- return ret;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/wordout.c b/support/texlab/crates/bibutils_sys/src/wordout.c
deleted file mode 100644
index 4e1747e978..0000000000
--- a/support/texlab/crates/bibutils_sys/src/wordout.c
+++ /dev/null
@@ -1,693 +0,0 @@
-/*
- * wordout.c
- *
- * (Word 2007 format)
- *
- * Copyright (c) Chris Putnam 2007-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "str.h"
-#include "fields.h"
-#include "utf8.h"
-#include "bibformats.h"
-#include "msvc_fix.h"
-
-/*****************************************************
- PUBLIC: int wordout_initparams()
-*****************************************************/
-
-static void wordout_writeheader( FILE *outptr, param *p );
-static void wordout_writefooter( FILE *outptr );
-static int wordout_write( fields *info, FILE *outptr, param *p, unsigned long numrefs );
-
-int
-wordout_initparams( param *pm, const char *progname )
-{
- pm->writeformat = BIBL_WORD2007OUT;
- pm->format_opts = 0;
- pm->charsetout = BIBL_CHARSET_UNICODE;
- pm->charsetout_src = BIBL_SRC_DEFAULT;
- pm->latexout = 0;
- pm->utf8out = BIBL_CHARSET_UTF8_DEFAULT;
- pm->utf8bom = BIBL_CHARSET_BOM_DEFAULT;
- if ( !pm->utf8out )
- pm->xmlout = BIBL_XMLOUT_ENTITIES;
- else
- pm->xmlout = BIBL_XMLOUT_TRUE;
- pm->nosplittitle = 0;
- pm->verbose = 0;
- pm->addcount = 0;
- pm->singlerefperfile = 0;
-
- pm->headerf = wordout_writeheader;
- pm->footerf = wordout_writefooter;
- pm->assemblef = NULL;
- pm->writef = wordout_write;
-
- if ( !pm->progname ) {
- if ( !progname ) pm->progname = NULL;
- else {
- pm->progname = strdup( progname );
- if ( !pm->progname ) return BIBL_ERR_MEMERR;
- }
- }
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: int wordout_write()
-*****************************************************/
-
-typedef struct convert {
- char *oldtag;
- char *newtag;
- char *prefix;
- int code;
-} convert;
-
-/*
-At the moment 17 unique types of sources are defined:
-
-{code}
- Art
- ArticleInAPeriodical
- Book
- BookSection
- Case
- Conference
- DocumentFromInternetSite
- ElectronicSource
- Film
- InternetSite
- Interview
- JournalArticle
- Report
- Misc
- Patent
- Performance
- Proceedings
- SoundRecording
-{code}
-
-*/
-
-enum {
- TYPE_UNKNOWN = 0,
- TYPE_ART,
- TYPE_ARTICLEINAPERIODICAL,
- TYPE_BOOK,
- TYPE_BOOKSECTION,
- TYPE_CASE,
- TYPE_CONFERENCE,
- TYPE_DOCUMENTFROMINTERNETSITE,
- TYPE_ELECTRONICSOURCE,
- TYPE_FILM,
- TYPE_INTERNETSITE,
- TYPE_INTERVIEW,
- TYPE_JOURNALARTICLE,
- TYPE_MISC,
- TYPE_PATENT,
- TYPE_PERFORMANCE,
- TYPE_PROCEEDINGS,
- TYPE_REPORT,
- TYPE_SOUNDRECORDING,
-
- TYPE_THESIS,
- TYPE_MASTERSTHESIS,
- TYPE_PHDTHESIS,
-};
-
-/*
- * fixed output
- */
-static void
-output_fixed( FILE *outptr, char *tag, char *value, int level )
-{
- int i;
- for ( i=0; i<level; ++i ) fprintf( outptr, " " );
- fprintf( outptr, "<%s>%s</%s>\n", tag, value, tag );
-}
-
-/* detail output
- *
- */
-static void
-output_item( fields *info, FILE *outptr, char *tag, char *prefix, int item, int level )
-{
- int i;
- if ( item==-1 ) return;
- for ( i=0; i<level; ++i ) fprintf( outptr, " " );
- fprintf( outptr, "<%s>%s%s</%s>\n",
- tag,
- prefix,
- (char*) fields_value( info, item, FIELDS_CHRP ),
- tag
- );
-}
-
-static void
-output_itemv( FILE *outptr, char *tag, char *item, int level )
-{
- int i;
- for ( i=0; i<level; ++i ) fprintf( outptr, " " );
- fprintf( outptr, "<%s>%s</%s>\n", tag, item, tag );
-}
-
-/* range output
- *
- * <TAG>start-end</TAG>
- *
- */
-static void
-output_range( FILE *outptr, char *tag, char *start, char *end, int level )
-{
- int i;
- if ( start==NULL && end==NULL ) return;
- if ( start==NULL )
- output_itemv( outptr, tag, end, 0 );
- else if ( end==NULL )
- output_itemv( outptr, tag, start, 0 );
- else {
- for ( i=0; i<level; ++i )
- fprintf( outptr, " " );
- fprintf( outptr, "<%s>%s-%s</%s>\n", tag, start, end, tag );
- }
-}
-
-static void
-output_list( fields *info, FILE *outptr, convert *c, int nc )
-{
- int i, n;
- for ( i=0; i<nc; ++i ) {
- n = fields_find( info, c[i].oldtag, c[i].code );
- if ( n!=FIELDS_NOTFOUND ) output_item( info, outptr, c[i].newtag, c[i].prefix, n, 0 );
- }
-
-}
-
-typedef struct outtype {
- int value;
- char *out;
-} outtype;
-
-static
-outtype genres[] = {
- { TYPE_PATENT, "patent" },
- { TYPE_REPORT, "report" },
- { TYPE_REPORT, "technical report" },
- { TYPE_CASE, "legal case and case notes" },
- { TYPE_ART, "art original" },
- { TYPE_ART, "art reproduction" },
- { TYPE_ART, "comic strip" },
- { TYPE_ART, "diorama" },
- { TYPE_ART, "graphic" },
- { TYPE_ART, "model" },
- { TYPE_ART, "picture" },
- { TYPE_ELECTRONICSOURCE, "electronic" },
- { TYPE_FILM, "videorecording" },
- { TYPE_FILM, "motion picture" },
- { TYPE_SOUNDRECORDING, "sound" },
- { TYPE_PERFORMANCE, "rehersal" },
- { TYPE_INTERNETSITE, "web site" },
- { TYPE_INTERVIEW, "interview" },
- { TYPE_INTERVIEW, "communication" },
- { TYPE_MISC, "misc" },
-};
-int ngenres = sizeof( genres ) / sizeof( genres[0] );
-
-static int
-get_type_from_genre( fields *info )
-{
- int type = TYPE_UNKNOWN, i, j, level;
- char *genre, *tag;
- for ( i=0; i<info->n; ++i ) {
- tag = (char *) fields_tag( info, i, FIELDS_CHRP );
- if ( strcasecmp( tag, "GENRE:MARC" ) && strcasecmp( tag, "GENRE:BIBUTILS" ) && strcasecmp( tag, "GENRE:UNKNOWN" ) ) continue;
- genre = (char *) fields_value( info, i, FIELDS_CHRP );
- for ( j=0; j<ngenres; ++j ) {
- if ( !strcasecmp( genres[j].out, genre ) )
- type = genres[j].value;
- }
- if ( type==TYPE_UNKNOWN ) {
- level = info->level[i];
- if ( !strcasecmp( genre, "academic journal" ) ) {
- type = TYPE_JOURNALARTICLE;
- }
- else if ( !strcasecmp( genre, "periodical" ) ) {
- if ( type == TYPE_UNKNOWN )
- type = TYPE_ARTICLEINAPERIODICAL;
- }
- else if ( !strcasecmp( genre, "book" ) ||
- !strcasecmp( genre, "collection" ) ) {
- if ( info->level[i]==0 ) type = TYPE_BOOK;
- else type = TYPE_BOOKSECTION;
- }
- else if ( !strcasecmp( genre, "conference publication" ) ) {
- if ( level==0 ) type=TYPE_CONFERENCE;
- else type = TYPE_PROCEEDINGS;
- }
- else if ( !strcasecmp( genre, "thesis" ) ) {
- if ( type==TYPE_UNKNOWN ) type=TYPE_THESIS;
- }
- else if ( !strcasecmp( genre, "Ph.D. thesis" ) ) {
- type = TYPE_PHDTHESIS;
- }
- else if ( !strcasecmp( genre, "Masters thesis" ) ) {
- type = TYPE_MASTERSTHESIS;
- }
- }
- }
- return type;
-}
-
-static int
-get_type_from_resource( fields *info )
-{
- int type = TYPE_UNKNOWN, i;
- char *tag, *resource;
- for ( i=0; i<info->n; ++i ) {
- tag = (char *) fields_tag( info, i, FIELDS_CHRP );
- if ( strcasecmp( tag, "RESOURCE" ) ) continue;
- resource = (char *) fields_value( info, i, FIELDS_CHRP );
- if ( !strcasecmp( resource, "moving image" ) )
- type = TYPE_FILM;
- }
- return type;
-}
-
-static int
-get_type( fields *info )
-{
- int type;
- type = get_type_from_genre( info );
- if ( type==TYPE_UNKNOWN )
- type = get_type_from_resource( info );
- return type;
-}
-
-static void
-output_titlebits( char *mainttl, char *subttl, FILE *outptr )
-{
- if ( mainttl ) fprintf( outptr, "%s", mainttl );
- if ( subttl ) {
- if ( mainttl ) {
- if ( mainttl[ strlen( mainttl ) - 1 ] != '?' )
- fprintf( outptr, ": " );
- else fprintf( outptr, " " );
- }
- fprintf( outptr, "%s", subttl );
- }
-}
-
-static void
-output_titleinfo( char *mainttl, char *subttl, FILE *outptr, char *tag, int level )
-{
- if ( mainttl || subttl ) {
- fprintf( outptr, "<%s>", tag );
- output_titlebits( mainttl, subttl, outptr );
- fprintf( outptr, "</%s>\n", tag );
- }
-}
-
-static void
-output_generaltitle( fields *info, FILE *outptr, char *tag, int level )
-{
- char *ttl = fields_findv( info, level, FIELDS_CHRP, "TITLE" );
- char *subttl = fields_findv( info, level, FIELDS_CHRP, "SUBTITLE" );
- char *shrttl = fields_findv( info, level, FIELDS_CHRP, "SHORTTITLE" );
- char *shrsubttl = fields_findv( info, level, FIELDS_CHRP, "SHORTSUBTITLE" );
-
- if ( ttl ) {
- output_titleinfo( ttl, subttl, outptr, tag, level );
- }
- else if ( shrttl ) {
- output_titleinfo( shrttl, shrsubttl, outptr, tag, level );
- }
-}
-
-static void
-output_maintitle( fields *info, FILE *outptr, int level )
-{
- char *ttl = fields_findv( info, level, FIELDS_CHRP, "TITLE" );
- char *subttl = fields_findv( info, level, FIELDS_CHRP, "SUBTITLE" );
- char *shrttl = fields_findv( info, level, FIELDS_CHRP, "SHORTTITLE" );
- char *shrsubttl = fields_findv( info, level, FIELDS_CHRP, "SHORTSUBTITLE" );
-
- if ( ttl ) {
- output_titleinfo( ttl, subttl, outptr, "b:Title", level );
-
- /* output shorttitle if it's different from normal title */
- if ( shrttl ) {
- if ( !ttl || ( strcmp( shrttl, ttl ) || subttl ) ) {
- fprintf( outptr, " <b:ShortTitle>" );
- output_titlebits( shrttl, shrsubttl, outptr );
- fprintf( outptr, "</b:ShortTitle>\n" );
- }
- }
- }
- else if ( shrttl ) {
- output_titleinfo( shrttl, shrsubttl, outptr, "b:Title", level );
- }
-}
-
-static void
-output_name_nomangle( FILE *outptr, char *p )
-{
- fprintf( outptr, "<b:Person>" );
- fprintf( outptr, "<b:Last>%s</b:Last>", p );
- fprintf( outptr, "</b:Person>\n" );
-}
-
-static void
-output_name( FILE *outptr, char *p )
-{
- str family, part;
- int n=0, npart=0;
-
- str_init( &family );
- while ( *p && *p!='|' ) str_addchar( &family, *p++ );
- if ( *p=='|' ) p++;
- if ( str_has_value( &family ) ) {
- fprintf( outptr, "<b:Person>" );
- fprintf( outptr, "<b:Last>%s</b:Last>", str_cstr( &family ) );
- n++;
- }
- str_free( &family );
-
- str_init( &part );
- while ( *p ) {
- while ( *p && *p!='|' ) str_addchar( &part, *p++ );
- if ( str_has_value( &part ) ) {
- if ( n==0 ) fprintf( outptr, "<b:Person>" );
- if ( npart==0 )
- fprintf( outptr, "<b:First>%s</b:First>", str_cstr( &part ) );
- else
- fprintf( outptr, "<b:Middle>%s</b:Middle>", str_cstr( &part ) );
- n++;
- npart++;
- }
- if ( *p=='|' ) {
- p++;
- str_empty( &part );
- }
- }
- if ( n ) fprintf( outptr, "</b:Person>\n" );
-
- str_free( &part );
-}
-
-
-#define NAME (1)
-#define NAME_ASIS (2)
-#define NAME_CORP (4)
-
-static int
-extract_name_and_info( str *outtag, str *intag )
-{
- int code = NAME;
- str_strcpy( outtag, intag );
- if ( str_findreplace( outtag, ":ASIS", "" ) ) code = NAME_ASIS;
- if ( str_findreplace( outtag, ":CORP", "" ) ) code = NAME_CORP;
- return code;
-}
-
-static void
-output_name_type( fields *info, FILE *outptr, int level,
- char *map[], int nmap, char *tag )
-{
- str ntag;
- int i, j, n=0, code, nfields;
- str_init( &ntag );
- nfields = fields_num( info );
- for ( j=0; j<nmap; ++j ) {
- for ( i=0; i<nfields; ++i ) {
- code = extract_name_and_info( &ntag, &(info->tag[i]) );
- if ( strcasecmp( str_cstr( &ntag ), map[j] ) ) continue;
- if ( n==0 )
- fprintf( outptr, "<%s><b:NameList>\n", tag );
- if ( code != NAME )
- output_name_nomangle( outptr, (char *) fields_value( info, i, FIELDS_CHRP ) );
- else
- output_name( outptr, (char *) fields_value( info, i, FIELDS_CHRP ) );
- n++;
- }
- }
- str_free( &ntag );
- if ( n )
- fprintf( outptr, "</b:NameList></%s>\n", tag );
-}
-
-static void
-output_names( fields *info, FILE *outptr, int level, int type )
-{
- char *authors[] = { "AUTHOR", "WRITER", "ASSIGNEE", "ARTIST",
- "CARTOGRAPHER", "INVENTOR", "ORGANIZER", "DIRECTOR",
- "PERFORMER", "REPORTER", "TRANSLATOR", "ADDRESSEE",
- "2ND_AUTHOR", "3RD_AUTHOR", "SUB_AUTHOR", "COMMITTEE",
- "COURT", "LEGISLATIVEBODY" };
- int nauthors = sizeof( authors ) / sizeof( authors[0] );
-
- char *editors[] = { "EDITOR" };
- int neditors = sizeof( editors ) / sizeof( editors[0] );
-
- char author_default[] = "b:Author", inventor[] = "b:Inventor";
- char *author_type = author_default;
-
- if ( type == TYPE_PATENT ) author_type = inventor;
-
- fprintf( outptr, "<b:Author>\n" );
- output_name_type( info, outptr, level, authors, nauthors, author_type );
- output_name_type( info, outptr, level, editors, neditors, "b:Editor" );
- fprintf( outptr, "</b:Author>\n" );
-}
-
-static void
-output_date( fields *info, FILE *outptr, int level )
-{
- char *year = fields_findv_firstof( info, level, FIELDS_CHRP,
- "PARTDATE:YEAR", "DATE:YEAR", NULL );
- char *month = fields_findv_firstof( info, level, FIELDS_CHRP,
- "PARTDATE:MONTH", "DATE:MONTH", NULL );
- char *day = fields_findv_firstof( info, level, FIELDS_CHRP,
- "PARTDATE:DAY", "DATE:DAY", NULL );
- if ( year ) output_itemv( outptr, "b:Year", year, 0 );
- if ( month ) output_itemv( outptr, "b:Month", month, 0 );
- if ( day ) output_itemv( outptr, "b:Day", day, 0 );
-}
-
-static void
-output_pages( fields *info, FILE *outptr, int level )
-{
- char *sn = fields_findv( info, LEVEL_ANY, FIELDS_CHRP, "PAGES:START" );
- char *en = fields_findv( info, LEVEL_ANY, FIELDS_CHRP, "PAGES:STOP" );
- char *ar = fields_findv( info, LEVEL_ANY, FIELDS_CHRP, "ARTICLENUMBER" );
- if ( sn || en )
- output_range( outptr, "b:Pages", sn, en, level );
- else if ( ar )
- output_range( outptr, "b:Pages", ar, NULL, level );
-}
-
-static void
-output_includedin( fields *info, FILE *outptr, int type )
-{
- if ( type==TYPE_JOURNALARTICLE ) {
- output_generaltitle( info, outptr, "b:JournalName", 1 );
- } else if ( type==TYPE_ARTICLEINAPERIODICAL ) {
- output_generaltitle( info, outptr, "b:PeriodicalTitle", 1 );
- } else if ( type==TYPE_BOOKSECTION ) {
- output_generaltitle( info, outptr, "b:ConferenceName", 1 ); /*??*/
- } else if ( type==TYPE_PROCEEDINGS ) {
- output_generaltitle( info, outptr, "b:ConferenceName", 1 );
- }
-}
-
-static int
-type_is_thesis( int type )
-{
- if ( type==TYPE_THESIS ||
- type==TYPE_PHDTHESIS ||
- type==TYPE_MASTERSTHESIS )
- return 1;
- else
- return 0;
-}
-
-static void
-output_thesisdetails( fields *info, FILE *outptr, int type )
-{
- char *tag;
- int i, n;
-
- if ( type==TYPE_PHDTHESIS )
- output_fixed( outptr, "b:ThesisType", "Ph.D. Thesis", 0 );
- else if ( type==TYPE_MASTERSTHESIS )
- output_fixed( outptr, "b:ThesisType", "Masters Thesis", 0 );
-
- n = fields_num( info );
- for ( i=0; i<n; ++i ) {
- tag = fields_tag( info, i, FIELDS_CHRP );
- if ( strcasecmp( tag, "DEGREEGRANTOR" ) &&
- strcasecmp( tag, "DEGREEGRANTOR:ASIS") &
- strcasecmp( tag, "DEGREEGRANTOR:CORP"))
- continue;
- output_item( info, outptr, "b:Institution", "", i, 0 );
- }
-}
-
-static
-outtype types[] = {
- { TYPE_UNKNOWN, "Misc" },
- { TYPE_MISC, "Misc" },
- { TYPE_BOOK, "Book" },
- { TYPE_BOOKSECTION, "BookSection" },
- { TYPE_CASE, "Case" },
- { TYPE_CONFERENCE, "Conference" },
- { TYPE_ELECTRONICSOURCE, "ElectronicSource" },
- { TYPE_FILM, "Film" },
- { TYPE_INTERNETSITE, "InternetSite" },
- { TYPE_INTERVIEW, "Interview" },
- { TYPE_SOUNDRECORDING, "SoundRecording" },
- { TYPE_ARTICLEINAPERIODICAL, "ArticleInAPeriodical" },
- { TYPE_DOCUMENTFROMINTERNETSITE, "DocumentFromInternetSite" },
- { TYPE_JOURNALARTICLE, "JournalArticle" },
- { TYPE_REPORT, "Report" },
- { TYPE_PATENT, "Patent" },
- { TYPE_PERFORMANCE, "Performance" },
- { TYPE_PROCEEDINGS, "Proceedings" },
-};
-static
-int ntypes = sizeof( types ) / sizeof( types[0] );
-
-static void
-output_type( fields *info, FILE *outptr, int type )
-{
- int i, found = 0;
- fprintf( outptr, "<b:SourceType>" );
- for ( i=0; i<ntypes && !found; ++i ) {
- if ( types[i].value!=type ) continue;
- found = 1;
- fprintf( outptr, "%s", types[i].out );
- }
- if ( !found ) {
- if ( type_is_thesis( type ) ) fprintf( outptr, "Report" );
- else fprintf( outptr, "Misc" );
- }
- fprintf( outptr, "</b:SourceType>\n" );
-
- if ( type_is_thesis( type ) )
- output_thesisdetails( info, outptr, type );
-}
-
-static void
-output_comments( fields *info, FILE *outptr, int level )
-{
- vplist_index i;
- vplist notes;
- char *abs;
-
- vplist_init( &notes );
-
- abs = fields_findv( info, level, FIELDS_CHRP, "ABSTRACT" );
- fields_findv_each( info, level, FIELDS_CHRP, &notes, "NOTES" );
-
- if ( abs || notes.n ) fprintf( outptr, "<b:Comments>" );
- if ( abs ) fprintf( outptr, "%s", abs );
- for ( i=0; i<notes.n; ++i )
- fprintf( outptr, "%s", (char*)vplist_get( &notes, i ) );
- if ( abs || notes.n ) fprintf( outptr, "</b:Comments>\n" );
-
- vplist_free( &notes );
-}
-
-static void
-output_bibkey( fields *info, FILE *outptr )
-{
- char *bibkey = fields_findv_firstof( info, LEVEL_ANY, FIELDS_CHRP,
- "REFNUM", "BIBKEY", NULL );
- if ( bibkey ) output_itemv( outptr, "b:Tag", bibkey, 0 );
-}
-
-static void
-output_citeparts( fields *info, FILE *outptr, int level, int max, int type )
-{
- convert origin[] = {
- { "ADDRESS", "b:City", "", LEVEL_ANY },
- { "PUBLISHER", "b:Publisher", "", LEVEL_ANY },
- { "EDITION", "b:Edition", "", LEVEL_ANY }
- };
- int norigin = sizeof( origin ) / sizeof ( convert );
-
- convert parts[] = {
- { "VOLUME", "b:Volume", "", LEVEL_ANY },
- { "SECTION", "b:Section", "", LEVEL_ANY },
- { "ISSUE", "b:Issue", "", LEVEL_ANY },
- { "NUMBER", "b:Issue", "", LEVEL_ANY },
- { "PUBLICLAWNUMBER", "b:Volume", "", LEVEL_ANY },
- { "SESSION", "b:Issue", "", LEVEL_ANY },
- { "URL", "b:Url", "", LEVEL_ANY },
- { "JSTOR", "b:Url", "http://www.jstor.org/stable/", LEVEL_ANY },
- { "ARXIV", "b:Url", "http://arxiv.org/abs/", LEVEL_ANY },
- { "PMID", "b:Url", "http://www.ncbi.nlm.nih.gov/pubmed/", LEVEL_ANY },
- { "PMC", "b:Url", "http://www.ncbi.nlm.nih.gov/pmc/articles/", LEVEL_ANY },
- { "DOI", "b:Url", "https://doi.org/", LEVEL_ANY },
- { "MRNUMBER", "b:Url", "http://www.ams.org/mathscinet-getitem?mr=", LEVEL_ANY },
- };
- int nparts=sizeof(parts)/sizeof(convert);
-
- output_bibkey( info, outptr );
- output_type( info, outptr, type );
- output_list( info, outptr, origin, norigin );
- output_date( info, outptr, level );
- output_includedin( info, outptr, type );
- output_list( info, outptr, parts, nparts );
- output_pages( info, outptr, level );
- output_names( info, outptr, level, type );
- output_maintitle( info, outptr, 0 );
- output_comments( info, outptr, level );
-}
-
-static int
-wordout_write( fields *info, FILE *outptr, param *p, unsigned long numrefs )
-{
- int max = fields_maxlevel( info );
- int type = get_type( info );
-
- fprintf( outptr, "<b:Source>\n" );
- output_citeparts( info, outptr, -1, max, type );
- fprintf( outptr, "</b:Source>\n" );
-
- fflush( outptr );
-
- return BIBL_OK;
-}
-
-/*****************************************************
- PUBLIC: void wordout_writeheader()
-*****************************************************/
-
-static void
-wordout_writeheader( FILE *outptr, param *p )
-{
- if ( p->utf8bom ) utf8_writebom( outptr );
- fprintf(outptr,"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
- fprintf(outptr,"<b:Sources SelectedStyle=\"\" "
- "xmlns:b=\"http://schemas.openxmlformats.org/officeDocument/2006/bibliography\" "
- " xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/bibliography\" >\n");
-}
-
-/*****************************************************
- PUBLIC: void wordout_writefooter()
-*****************************************************/
-
-static void
-wordout_writefooter( FILE *outptr )
-{
- fprintf(outptr,"</b:Sources>\n");
- fflush( outptr );
-}
diff --git a/support/texlab/crates/bibutils_sys/src/wrapper.h b/support/texlab/crates/bibutils_sys/src/wrapper.h
deleted file mode 100644
index a7a05beb9b..0000000000
--- a/support/texlab/crates/bibutils_sys/src/wrapper.h
+++ /dev/null
@@ -1,3 +0,0 @@
-// Wrapper file for bindgen
-#include "bibl.h"
-#include "bibutils.h"
diff --git a/support/texlab/crates/bibutils_sys/src/xml.c b/support/texlab/crates/bibutils_sys/src/xml.c
deleted file mode 100644
index 922a24075f..0000000000
--- a/support/texlab/crates/bibutils_sys/src/xml.c
+++ /dev/null
@@ -1,420 +0,0 @@
-/*
- * xml.c
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "is_ws.h"
-#include "strsearch.h"
-#include "xml.h"
-#include "msvc_fix.h"
-
-char *xml_pns = NULL;
-
-void
-xml_init( xml *node )
-{
- str_init( &(node->tag) );
- str_init( &(node->value) );
- slist_init( &(node->attributes) );
- slist_init( &(node->attribute_values) );
- node->down = NULL;
- node->next = NULL;
-}
-
-static xml *
-xml_new( void )
-{
- xml *node = ( xml * ) malloc( sizeof( xml ) );
- if ( node ) xml_init( node );
- return node;
-}
-
-static void
-xml_delete( xml *node )
-{
- xml_free( node );
- free( node );
-}
-
-void
-xml_free( xml *node )
-{
- str_free( &(node->tag) );
- str_free( &(node->value) );
- slist_free( &(node->attributes) );
- slist_free( &(node->attribute_values) );
- if ( node->down ) xml_delete( node->down );
- if ( node->next ) xml_delete( node->next );
-}
-
-enum {
- XML_DESCRIPTOR,
- XML_COMMENT,
- XML_OPEN,
- XML_CLOSE,
- XML_OPENCLOSE
-};
-
-static int
-xml_is_terminator( const char *p, int *type )
-{
- if ( *p=='>' ) {
- return 1;
- } else if ( *p=='/' && *(p+1)=='>' ) {
- if ( *type==XML_OPENCLOSE ) return 1;
- else if ( *type==XML_OPEN ) {
- *type = XML_OPENCLOSE;
- return 1;
- }
- } else if ( *p=='?' && *(p+1)=='>' && *type==XML_DESCRIPTOR ) {
- return 1;
- } else if ( *p=='!' && *(p+1)=='>' && *type==XML_COMMENT ) {
- return 1;
- }
- return 0;
-}
-
-static int
-xml_add_attribute( xml *node, char *attribute, char *attribute_value )
-{
- int status;
-
- if ( attribute )
- status = slist_addc( &(node->attributes), attribute );
- else
- status = slist_addc( &(node->attributes), "" );
- if ( status!=SLIST_OK ) return 0;
-
- if ( attribute_value )
- status = slist_addc( &(node->attribute_values), attribute_value );
- else
- status = slist_addc( &(node->attribute_values), "" );
- if ( status!=SLIST_OK ) {
- (void) slist_remove( &(node->attributes), node->attributes.n-1 );
- return 0;
- }
- return 1;
-}
-
-static const char *
-xml_processattrib( const char *p, xml *node, int *type )
-{
- char quote_character = '\"';
- int inquotes = 0;
- str aname, aval;
-
- str_init( &aname );
- str_init( &aval );
-
- while ( *p && !xml_is_terminator( p, type ) ) {
-
- /* get attribute name */
- while ( *p==' ' || *p=='\t' ) p++;
- while ( *p && !strchr( "= \t", *p ) && !xml_is_terminator( p, type ) ){
- str_addchar( &aname, *p );
- p++;
- }
-
- /* equals sign */
- while ( *p==' ' || *p=='\t' ) p++;
- if ( *p=='=' ) p++;
- while ( *p==' ' || *p=='\t' ) p++;
-
- /* get attribute value */
- if ( *p=='\"' || *p=='\'' ) {
- if ( *p=='\'' ) quote_character = *p;
- inquotes=1;
- p++;
- }
- while ( *p && ((!xml_is_terminator(p,type) && !strchr("= \t", *p ))||inquotes)){
- if ( *p==quote_character ) inquotes=0;
- else str_addchar( &aval, *p );
- p++;
- }
- if ( str_has_value( &aname ) ) {
- xml_add_attribute( node, str_cstr( &aname ), str_cstr( &aval ) );
- }
-
- str_empty( &aname );
- str_empty( &aval );
- }
-
- str_free( &aname );
- str_free( &aval );
-
- return p;
-}
-
-/*
- * xml_processtag
- *
- * start right after '<'
- * *
- * XML_COMMENT <!-- .... -->
- * XML_DESCRIPTOR <?.....>
- * XML_OPEN <A>
- * XML_CLOSE </A>
- * XML_OPENCLOSE <A/>
- */
-static const char *
-xml_processtag( const char *p, xml *node, int *type )
-{
- str tag;
-
- str_init( &tag );
-
- if ( *p=='!' ) {
- *type = XML_COMMENT;
- while ( *p && *p!='>' ) p++;
- }
- else if ( *p=='?' ) {
- *type = XML_DESCRIPTOR;
- p++; /* skip '?' */
- while ( *p && !strchr( " \t", *p ) && !xml_is_terminator(p,type) )
- str_addchar( &tag, *p++ );
- if ( *p==' ' || *p=='\t' )
- p = xml_processattrib( p, node, type );
- }
- else if ( *p=='/' ) {
- *type = XML_CLOSE;
- while ( *p && !strchr( " \t", *p ) && !xml_is_terminator(p,type) )
- str_addchar( &tag, *p++ );
- if ( *p==' ' || *p=='\t' )
- p = xml_processattrib( p, node, type );
- }
- else {
- *type = XML_OPEN;
- while ( *p && !strchr( " \t", *p ) && !xml_is_terminator(p,type) )
- str_addchar( &tag, *p++ );
- if ( *p==' ' || *p=='\t' )
- p = xml_processattrib( p, node, type );
- }
- while ( *p && *p!='>' ) p++;
- if ( *p=='>' ) p++;
-
- str_strcpy( &(node->tag), &tag );
-
- str_free( &tag );
-
- return p;
-}
-
-static void
-xml_appendnode( xml *onode, xml *nnode )
-{
- if ( !onode->down ) onode->down = nnode;
- else {
- xml *p = onode->down;
- while ( p->next ) p = p->next;
- p->next = nnode;
- }
-}
-
-const char *
-xml_parse( const char *p, xml *onode )
-{
- int type, is_style = 0;
- xml *nnode;
-
- while ( *p ) {
-
- /* retain white space for <style> tags in endnote xml */
- if ( str_cstr( &(onode->tag) ) &&
- !strcasecmp( str_cstr( &(onode->tag) ),"style") ) is_style=1;
-
- while ( *p && *p!='<' ) {
- if ( onode->value.len>0 || is_style || !is_ws( *p ) )
- str_addchar( &(onode->value), *p );
- p++;
- }
-
- if ( *p=='<' ) {
- nnode = xml_new();
- p = xml_processtag( p+1, nnode, &type );
- if ( type==XML_OPEN || type==XML_OPENCLOSE || type==XML_DESCRIPTOR ) {
- xml_appendnode( onode, nnode );
- if ( type==XML_OPEN )
- p = xml_parse( p, nnode );
- } else if ( type==XML_CLOSE ) {
- /*check to see if it's closing for this one*/
- xml_delete( nnode );
- goto out; /* assume it's right for now */
- } else {
- xml_delete( nnode );
- }
- }
-
- }
-out:
- return p;
-}
-
-void
-xml_draw( xml *node, int n )
-{
- slist_index j;
- int i;
-
- if ( !node ) return;
-
- for ( i=0; i<n; ++i ) printf( " " );
-
- printf("n=%d tag='%s' value='%s'\n", n, str_cstr( &(node->tag) ), str_cstr( &(node->value) ) );
-
- for ( j=0; j<node->attributes.n; ++j ) {
- for ( i=0; i<n; ++i ) printf( " " );
- printf( " attribute='%s' value='%s'\n",
- slist_cstr( &(node->attributes), j ),
- slist_cstr( &(node->attribute_values), j )
- );
- }
-
- if ( node->down ) xml_draw( node->down, n+1 );
- if ( node->next ) xml_draw( node->next, n );
-}
-
-char *
-xml_find_start( char *buffer, char *tag )
-{
- str starttag;
- char *p;
-
- str_initstrsc( &starttag, "<", tag, " ", NULL );
-
- p = strsearch( buffer, str_cstr( &starttag ) );
- if ( !p ) {
- starttag.data[ starttag.len-1 ] = '>';
- p = strsearch( buffer, str_cstr( &starttag ) );
- }
-
- str_free( &starttag );
-
- return p;
-}
-
-char *
-xml_find_end( char *buffer, char *tag )
-{
- str endtag;
- char *p;
-
- if ( xml_pns )
- str_initstrsc( &endtag, "</", xml_pns, ":", tag, ">", NULL );
- else
- str_initstrsc( &endtag, "</", tag, ">", NULL );
-
- p = strsearch( buffer, str_cstr( &endtag ) );
- if ( p && *p ) {
- if ( *p ) p++; /* skip <random_tag></end> combo */
- while ( *p && *(p-1)!='>' ) p++;
- }
-
- str_free( &endtag );
- return p;
-}
-
-static int
-xml_tag_matches_simple( xml* node, const char *tag )
-{
- if ( node->tag.len!=strlen( tag ) ) return 0;
- if ( strcasecmp( str_cstr( &(node->tag) ), tag ) ) return 0;
- return 1;
-}
-static int
-xml_tag_matches_pns( xml* node, const char *tag )
-{
- int found = 0;
- str pnstag;
-
- str_initstrsc( &pnstag, xml_pns, ":", tag, NULL );
- if ( node->tag.len==pnstag.len &&
- !strcasecmp( str_cstr( &(node->tag) ), str_cstr( &pnstag ) ) )
- found = 1;
- str_free( &pnstag );
-
- return found;
-}
-int
-xml_tag_matches( xml *node, const char *tag )
-{
- if ( xml_pns ) return xml_tag_matches_pns ( node, tag );
- else return xml_tag_matches_simple( node, tag );
-}
-
-int
-xml_tag_matches_has_value( xml *node, const char *tag )
-{
- if ( xml_tag_matches( node, tag ) && xml_has_value( node ) ) return 1;
- return 0;
-}
-
-int
-xml_has_attribute( xml *node, const char *attribute, const char *attribute_value )
-{
- slist_index i;
- char *a, *v;
-
- for ( i=0; i<node->attributes.n; ++i ) {
- a = slist_cstr( &(node->attributes), i );
- v = slist_cstr( &(node->attribute_values), i );
- if ( !a || !v ) continue;
- if ( !strcasecmp( a, attribute ) && !strcasecmp( v, attribute_value ) )
- return 1;
- }
-
- return 0;
-}
-
-int
-xml_tag_has_attribute( xml *node, const char *tag, const char *attribute, const char *attribute_value )
-{
- if ( !xml_tag_matches( node, tag ) ) return 0;
- return xml_has_attribute( node, attribute, attribute_value );
-}
-
-str *
-xml_attribute( xml *node, const char *attribute )
-{
- slist_index n;
-
- n = slist_findc( &(node->attributes), attribute );
- if ( slist_wasnotfound( &(node->attributes), n ) ) return NULL;
- else return slist_str( &(node->attribute_values), n );
-}
-
-int
-xml_has_value( xml *node )
-{
- if ( node && str_has_value( &(node->value) ) ) return 1;
- return 0;
-}
-
-str *
-xml_tag( xml *node )
-{
- return &(node->tag);
-}
-
-char *
-xml_tag_cstr( xml *node )
-{
- return str_cstr( &(node->tag) );
-}
-
-str *
-xml_value( xml *node )
-{
- return &(node->value);
-}
-
-char *
-xml_value_cstr( xml *node )
-{
- return str_cstr( &(node->value) );
-}
diff --git a/support/texlab/crates/bibutils_sys/src/xml.h b/support/texlab/crates/bibutils_sys/src/xml.h
deleted file mode 100644
index 56f3eea402..0000000000
--- a/support/texlab/crates/bibutils_sys/src/xml.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * xml.h
- *
- * Copyright (c) Chris Putnam 2004-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef XML_H
-#define XML_H
-
-#include "slist.h"
-#include "str.h"
-
-typedef struct xml {
- str tag;
- str value;
- slist attributes;
- slist attribute_values;
- struct xml *down;
- struct xml *next;
-} xml;
-
-void xml_init ( xml *node );
-void xml_free ( xml *node );
-int xml_has_value ( xml *node );
-str * xml_value ( xml *node );
-char * xml_value_cstr ( xml *node );
-str * xml_tag ( xml *node );
-char * xml_tag_cstr ( xml *node );
-int xml_tag_matches ( xml *node, const char *tag );
-int xml_tag_matches_has_value( xml *node, const char *tag );
-str * xml_attribute ( xml *node, const char *attribute );
-char * xml_find_start ( char *buffer, char *tag );
-char * xml_find_end ( char *buffer, char *tag );
-int xml_tag_has_attribute ( xml *node, const char *tag, const char *attribute, const char *attribute_value );
-int xml_has_attribute ( xml *node, const char *attribute, const char *attribute_value );
-const char * xml_parse ( const char *p, xml *onode );
-
-extern char * xml_pns; /* global Namespace */
-
-#endif
-
diff --git a/support/texlab/crates/bibutils_sys/src/xml_encoding.c b/support/texlab/crates/bibutils_sys/src/xml_encoding.c
deleted file mode 100644
index 135821528c..0000000000
--- a/support/texlab/crates/bibutils_sys/src/xml_encoding.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * xml_getencoding.c
- *
- * Copyright (c) Chris Putnam 2007-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include "charsets.h"
-#include "str.h"
-#include "str_conv.h"
-#include "xml.h"
-#include "xml_encoding.h"
-#include "msvc_fix.h"
-
-static int
-xml_getencodingr( xml *node )
-{
- int n = CHARSET_UNKNOWN, m;
- str *s;
- char *t;
-
- if ( xml_tag_matches( node, "xml" ) ) {
- s = xml_attribute( node, "encoding" );
- if ( str_has_value( s ) ) {
- t = str_cstr( s );
- if ( !strcasecmp( t, "UTF-8" ) )
- n = CHARSET_UNICODE;
- else if ( !strcasecmp( t, "UTF8" ) )
- n = CHARSET_UNICODE;
- else if ( !strcasecmp( t, "GB18030" ) )
- n = CHARSET_GB18030;
- else n = charset_find( t );
- if ( n==CHARSET_UNKNOWN ) {
- fprintf( stderr, "Warning: did not recognize encoding '%s'\n", t );
- }
- }
- }
- if ( node->down ) {
- m = xml_getencodingr( node->down );
- if ( m!=CHARSET_UNKNOWN ) n = m;
- }
- if ( node->next ) {
- m = xml_getencodingr( node->next );
- if ( m!=CHARSET_UNKNOWN ) n = m;
- }
-
- return n;
-}
-
-int
-xml_getencoding( str *s )
-{
- int file_charset = CHARSET_UNKNOWN;
- str descriptor;
- xml descriptxml;
- char *p, *q;
-
- p = strstr( str_cstr( s ), "<?xml" );
- if ( !p ) p = strstr( str_cstr( s ), "<?XML" );
- if ( p ) {
- q = strstr( p, "?>" );
- if ( q ) {
- str_init( &descriptor );
- str_segcpy( &descriptor, p, q+2 );
- xml_init( &descriptxml );
- xml_parse( str_cstr( &descriptor ), &descriptxml );
- file_charset = xml_getencodingr( &descriptxml );
- xml_free( &descriptxml );
- str_free( &descriptor );
- str_segdel( s, p, q+2 );
- }
- }
- return file_charset;
-}
diff --git a/support/texlab/crates/bibutils_sys/src/xml_encoding.h b/support/texlab/crates/bibutils_sys/src/xml_encoding.h
deleted file mode 100644
index b3a0acfe64..0000000000
--- a/support/texlab/crates/bibutils_sys/src/xml_encoding.h
+++ /dev/null
@@ -1,14 +0,0 @@
-/*
- * xml_getencoding.h
- *
- * Copyright (c) Chris Putnam 2007-2019
- *
- * Source code released under the GPL version 2
- *
- */
-#ifndef XML_GETENCODING_H
-#define XML_GETENCODING_H
-
-int xml_getencoding( str *s );
-
-#endif
diff --git a/support/texlab/crates/futures_boxed/Cargo.toml b/support/texlab/crates/futures_boxed/Cargo.toml
deleted file mode 100644
index 2bb4decd4e..0000000000
--- a/support/texlab/crates/futures_boxed/Cargo.toml
+++ /dev/null
@@ -1,14 +0,0 @@
-[package]
-name = "futures-boxed"
-version = "0.1.0"
-authors = [
- "Eric Förster <efoerster@users.noreply.github.com>",
- "Patrick Förster <pfoerster@users.noreply.github.com>"]
-edition = "2018"
-
-[lib]
-proc-macro = true
-
-[dependencies]
-syn = "1.0"
-quote = "1.0"
diff --git a/support/texlab/crates/futures_boxed/src/lib.rs b/support/texlab/crates/futures_boxed/src/lib.rs
deleted file mode 100644
index b957a4d724..0000000000
--- a/support/texlab/crates/futures_boxed/src/lib.rs
+++ /dev/null
@@ -1,69 +0,0 @@
-#![recursion_limit = "128"]
-
-extern crate proc_macro;
-
-use proc_macro::{TokenStream, TokenTree};
-use quote::quote;
-use quote::ToTokens;
-use std::iter::FromIterator;
-use syn::export::TokenStream2;
-use syn::*;
-
-#[proc_macro_attribute]
-pub fn boxed(_attr: TokenStream, item: TokenStream) -> TokenStream {
- match parse::<ItemFn>(item.clone()) {
- Ok(fn_) => boxed_fn(fn_),
- Err(_) => {
- let item = TokenStream::from_iter(item.into_iter().filter(|x| match x {
- TokenTree::Ident(x) if x.to_string() == "async" => false,
- _ => true,
- }));
-
- let method: TraitItemMethod = parse(item).unwrap();
- boxed_trait_method(method)
- }
- }
-}
-
-fn boxed_fn(fn_: ItemFn) -> TokenStream {
- let attrs = &fn_.attrs;
- let vis = &fn_.vis;
- let sig = boxed_fn_sig(&fn_.sig);
- let block = &fn_.block;
- let tokens = quote! {
- #(#attrs)*
- #vis #sig {
- use futures::future::FutureExt;
- let task = async move #block;
- task.boxed()
- }
- };
-
- tokens.into()
-}
-
-fn boxed_trait_method(method: TraitItemMethod) -> TokenStream {
- let attrs = &method.attrs;
- let sig = boxed_fn_sig(&method.sig);
- let tokens = quote! {
- #(#attrs)*
- #sig;
- };
-
- tokens.into()
-}
-
-fn boxed_fn_sig(sig: &Signature) -> TokenStream2 {
- let constness = &sig.constness;
- let ident = &sig.ident;
- let generics = &sig.generics;
- let inputs = &sig.inputs;
- let return_ty = match &sig.output {
- ReturnType::Default => quote!(()),
- ReturnType::Type(_, ty) => ty.into_token_stream(),
- };
-
- quote! {
- #constness fn #ident #generics(#inputs) -> futures::future::BoxFuture<'_, #return_ty>
- }
-}
diff --git a/support/texlab/crates/jsonrpc/Cargo.toml b/support/texlab/crates/jsonrpc/Cargo.toml
index d806759f3f..cae7107ae1 100644
--- a/support/texlab/crates/jsonrpc/Cargo.toml
+++ b/support/texlab/crates/jsonrpc/Cargo.toml
@@ -2,16 +2,19 @@
name = "jsonrpc"
version = "0.1.0"
authors = [
- "Eric Förster <efoerster@users.noreply.github.com>",
- "Patrick Förster <pfoerster@users.noreply.github.com>"]
+ "Eric Förster <eric.foerster@outlook.com>",
+ "Patrick Förster <patrick.foerster@outlook.de>"]
edition = "2018"
+[lib]
+doctest = false
+
[dependencies]
+async-trait = "0.1"
chashmap = "2.2"
-futures-boxed = { path = "../futures_boxed" }
-futures-preview = "0.3.0-alpha.18"
-log = "0.4.6"
-tokio = "0.2.0-alpha.6"
-serde = { version = "1.0", features = ["derive"] }
+futures = "0.3"
+log = "0.4"
+serde = { version = "1.0", features = ["derive", "rc"] }
serde_json = "1.0"
serde_repr = "0.1"
+tokio = { version = "0.2", features = ["rt-core"] }
diff --git a/support/texlab/crates/jsonrpc/src/client.rs b/support/texlab/crates/jsonrpc/src/client.rs
index 2cf18af1ff..7d714283c6 100644
--- a/support/texlab/crates/jsonrpc/src/client.rs
+++ b/support/texlab/crates/jsonrpc/src/client.rs
@@ -1,19 +1,22 @@
-use crate::types::*;
+use super::types::*;
+use async_trait::async_trait;
use chashmap::CHashMap;
-use futures::channel::*;
-use futures::prelude::*;
-use futures_boxed::boxed;
+use futures::{
+ channel::{mpsc, oneshot},
+ prelude::*,
+};
use serde::Serialize;
use serde_json::json;
use std::sync::atomic::{AtomicU64, Ordering};
pub type Result<T> = std::result::Result<T, Error>;
+#[async_trait]
pub trait ResponseHandler {
- #[boxed]
async fn handle(&self, response: Response);
}
+#[derive(Debug)]
pub struct Client {
output: mpsc::Sender<String>,
request_id: AtomicU64,
@@ -22,7 +25,7 @@ pub struct Client {
impl Client {
pub fn new(output: mpsc::Sender<String>) -> Self {
- Client {
+ Self {
output,
request_id: AtomicU64::new(0),
senders_by_id: CHashMap::new(),
@@ -56,8 +59,8 @@ impl Client {
}
}
+#[async_trait]
impl ResponseHandler for Client {
- #[boxed]
async fn handle(&self, response: Response) {
let id = response.id.expect("Expected response with id");
let result = match response.error {
diff --git a/support/texlab/crates/jsonrpc/src/lib.rs b/support/texlab/crates/jsonrpc/src/lib.rs
index 8786598d58..3a771e6ba5 100644
--- a/support/texlab/crates/jsonrpc/src/lib.rs
+++ b/support/texlab/crates/jsonrpc/src/lib.rs
@@ -8,59 +8,54 @@ pub use self::{
types::*,
};
-use futures::channel::*;
-use futures::prelude::*;
+use futures::{channel::mpsc, prelude::*};
use log::error;
-use std::io;
use std::sync::Arc;
-pub struct MessageHandler<S, C, I> {
+#[derive(Debug)]
+pub struct MessageHandler<S, C> {
pub server: Arc<S>,
pub client: Arc<C>,
- pub input: I,
pub output: mpsc::Sender<String>,
}
-impl<S, C, I> MessageHandler<S, C, I>
+impl<S, C> MessageHandler<S, C>
where
S: RequestHandler + Middleware + Send + Sync + 'static,
C: ResponseHandler + Send + Sync + 'static,
- I: Stream<Item = io::Result<String>> + Unpin,
{
- pub async fn listen(&mut self) {
- while let Some(json) = self.input.next().await {
- self.server.before_message().await;
+ pub async fn handle(&mut self, json: &str) {
+ self.server.before_message().await;
- match serde_json::from_str(&json.unwrap()).map_err(|_| Error::parse_error()) {
- Ok(Message::Request(request)) => {
- let server = Arc::clone(&self.server);
- let mut output = self.output.clone();
- tokio::spawn(async move {
- let response = server.handle_request(request).await;
- if let Some(error) = response.error.as_ref() {
- error!("{:?}", error);
- }
- let json = serde_json::to_string(&response).unwrap();
- output.send(json).await.unwrap();
- server.after_message().await;
- });
- }
- Ok(Message::Notification(notification)) => {
- self.server.handle_notification(notification);
- self.after_message();
- }
- Ok(Message::Response(response)) => {
- self.client.handle(response).await;
- self.after_message();
- }
- Err(why) => {
- let response = Response::error(why, None);
+ match serde_json::from_str(json).map_err(|_| Error::parse_error()) {
+ Ok(Message::Request(request)) => {
+ let server = Arc::clone(&self.server);
+ let mut output = self.output.clone();
+ tokio::spawn(async move {
+ let response = server.handle_request(request).await;
+ if let Some(error) = response.error.as_ref() {
+ error!("{:?}", error);
+ }
let json = serde_json::to_string(&response).unwrap();
- self.output.send(json).await.unwrap();
- self.after_message();
- }
- };
- }
+ output.send(json).await.unwrap();
+ server.after_message().await;
+ });
+ }
+ Ok(Message::Notification(notification)) => {
+ self.server.handle_notification(notification).await;
+ self.after_message();
+ }
+ Ok(Message::Response(response)) => {
+ self.client.handle(response).await;
+ self.after_message();
+ }
+ Err(why) => {
+ let response = Response::error(why, None);
+ let json = serde_json::to_string(&response).unwrap();
+ self.output.send(json).await.unwrap();
+ self.after_message();
+ }
+ };
}
fn after_message(&self) {
diff --git a/support/texlab/crates/jsonrpc/src/server.rs b/support/texlab/crates/jsonrpc/src/server.rs
index ccc04f286e..ce34dc8b60 100644
--- a/support/texlab/crates/jsonrpc/src/server.rs
+++ b/support/texlab/crates/jsonrpc/src/server.rs
@@ -1,24 +1,22 @@
-use crate::types::*;
+use super::types::*;
+use async_trait::async_trait;
use futures::prelude::*;
-use futures_boxed::boxed;
-use serde::de::DeserializeOwned;
-use serde::Serialize;
+use serde::{de::DeserializeOwned, Serialize};
use serde_json::json;
pub type Result<T> = std::result::Result<T, String>;
+#[async_trait]
pub trait RequestHandler {
- #[boxed]
async fn handle_request(&self, request: Request) -> Response;
- fn handle_notification(&self, notification: Notification);
+ async fn handle_notification(&self, notification: Notification);
}
+#[async_trait]
pub trait Middleware {
- #[boxed]
async fn before_message(&self);
- #[boxed]
async fn after_message(&self);
}
@@ -29,12 +27,10 @@ where
I: DeserializeOwned + Send,
O: Serialize,
{
- let handle = |json| {
- async move {
- let params: I = serde_json::from_value(json).map_err(|_| Error::deserialize_error())?;
- let result = handler(params).await.map_err(Error::internal_error)?;
- Ok(result)
- }
+ let handle = |json| async move {
+ let params: I = serde_json::from_value(json).map_err(|_| Error::deserialize_error())?;
+ let result = handler(params).await.map_err(Error::internal_error)?;
+ Ok(result)
};
match handle(request.params).await {
@@ -43,20 +39,20 @@ where
}
}
-pub fn handle_notification<'a, H, I>(notification: Notification, handler: H)
+pub async fn handle_notification<'a, H, F, I>(notification: Notification, handler: H)
where
- H: Fn(I) -> () + Send + Sync + 'a,
+ H: Fn(I) -> F + Send + Sync + 'a,
+ F: Future<Output = ()> + Send,
I: DeserializeOwned + Send,
{
- let params =
- serde_json::from_value(notification.params).expect(&Error::deserialize_error().message);
- handler(params);
+ let error = Error::deserialize_error().message;
+ let params = serde_json::from_value(notification.params).expect(&error);
+ handler(params).await;
}
#[cfg(test)]
mod tests {
use super::*;
- use futures::executor::block_on;
const METHOD_NAME: &str = "foo";
@@ -64,7 +60,7 @@ mod tests {
Ok(i + 1)
}
- fn panic(_params: ()) {
+ async fn panic(_params: ()) {
panic!("success");
}
@@ -85,15 +81,15 @@ mod tests {
}
}
- #[test]
- fn test_request_valid() {
+ #[tokio::test]
+ async fn request_valid() {
let value = 42;
let request = setup_request(value);
- let response = block_on(handle_request(request.clone(), increment));
+ let response = handle_request(request.clone(), increment).await;
let expected = Response {
jsonrpc: request.jsonrpc,
- result: Some(json!(block_on(increment(value)).unwrap())),
+ result: Some(json!(increment(value).await.unwrap())),
error: None,
id: Some(request.id),
};
@@ -101,11 +97,11 @@ mod tests {
assert_eq!(response, expected);
}
- #[test]
- fn test_request_invalid_params() {
+ #[tokio::test]
+ async fn request_invalid_params() {
let request = setup_request((0, 0));
- let response = block_on(handle_request(request.clone(), increment));
+ let response = handle_request(request.clone(), increment).await;
let expected = Response {
jsonrpc: request.jsonrpc.clone(),
result: None,
@@ -116,22 +112,20 @@ mod tests {
assert_eq!(response, expected);
}
- #[test]
+ #[tokio::test]
#[should_panic(expected = "success")]
- fn test_notification_valid() {
+ async fn notification_valid() {
let notification = setup_notification();
- handle_notification(notification, panic);
+ handle_notification(notification, panic).await;
}
- #[test]
+ #[tokio::test]
#[should_panic]
- fn test_notification_invalid_params() {
- let notification = setup_notification();
+ async fn notification_invalid_params() {
let notification = Notification {
params: json!(0),
- ..notification
+ ..setup_notification()
};
-
- handle_notification(notification, panic);
+ handle_notification(notification, panic).await;
}
}
diff --git a/support/texlab/crates/jsonrpc/src/types.rs b/support/texlab/crates/jsonrpc/src/types.rs
index 90116ac793..30036d1c7f 100644
--- a/support/texlab/crates/jsonrpc/src/types.rs
+++ b/support/texlab/crates/jsonrpc/src/types.rs
@@ -28,8 +28,8 @@ pub struct Error {
pub code: ErrorCode,
pub message: String,
- #[serde(skip_serializing_if = "serde_json::Value::is_null")]
- pub data: serde_json::Value,
+ #[serde(skip_serializing_if = "Option::is_none")]
+ pub data: Option<serde_json::Value>,
}
impl Error {
@@ -37,7 +37,7 @@ impl Error {
Self {
code: ErrorCode::ParseError,
message: "Could not parse the input".to_owned(),
- data: serde_json::Value::Null,
+ data: None,
}
}
@@ -45,7 +45,7 @@ impl Error {
Self {
code: ErrorCode::MethodNotFound,
message: "Method not found".to_owned(),
- data: serde_json::Value::Null,
+ data: None,
}
}
@@ -53,7 +53,7 @@ impl Error {
Self {
code: ErrorCode::InvalidParams,
message: "Could not deserialize parameter object".to_owned(),
- data: serde_json::Value::Null,
+ data: None,
}
}
@@ -61,7 +61,7 @@ impl Error {
Self {
code: ErrorCode::InternalError,
message,
- data: serde_json::Value::Null,
+ data: None,
}
}
}
@@ -76,7 +76,7 @@ pub struct Request {
impl Request {
pub fn new(method: String, params: serde_json::Value, id: Id) -> Self {
- Request {
+ Self {
jsonrpc: PROTOCOL_VERSION.to_owned(),
method,
params,
@@ -100,7 +100,7 @@ pub struct Response {
impl Response {
pub fn result(result: serde_json::Value, id: Id) -> Self {
- Response {
+ Self {
jsonrpc: PROTOCOL_VERSION.to_owned(),
result: Some(result),
error: None,
@@ -109,7 +109,7 @@ impl Response {
}
pub fn error(error: Error, id: Option<Id>) -> Self {
- Response {
+ Self {
jsonrpc: PROTOCOL_VERSION.to_owned(),
result: None,
error: Some(error),
@@ -127,7 +127,7 @@ pub struct Notification {
impl Notification {
pub fn new(method: String, params: serde_json::Value) -> Self {
- Notification {
+ Self {
jsonrpc: PROTOCOL_VERSION.to_owned(),
method,
params,
diff --git a/support/texlab/crates/jsonrpc_derive/Cargo.toml b/support/texlab/crates/jsonrpc_derive/Cargo.toml
index c53c86a369..98611c486d 100644
--- a/support/texlab/crates/jsonrpc_derive/Cargo.toml
+++ b/support/texlab/crates/jsonrpc_derive/Cargo.toml
@@ -2,14 +2,14 @@
name = "jsonrpc-derive"
version = "0.1.0"
authors = [
- "Eric Förster <efoerster@users.noreply.github.com>",
- "Patrick Förster <pfoerster@users.noreply.github.com>"]
+ "Eric Förster <eric.foerster@outlook.com>",
+ "Patrick Förster <patrick.foerster@outlook.de>"]
edition = "2018"
[lib]
proc-macro = true
+doctest = false
[dependencies]
-futures-boxed = { path = "../futures_boxed" }
syn = "1.0"
quote = "1.0"
diff --git a/support/texlab/crates/jsonrpc_derive/src/lib.rs b/support/texlab/crates/jsonrpc_derive/src/lib.rs
index fe4da8d4b6..283be858db 100644
--- a/support/texlab/crates/jsonrpc_derive/src/lib.rs
+++ b/support/texlab/crates/jsonrpc_derive/src/lib.rs
@@ -4,9 +4,7 @@ extern crate proc_macro;
use proc_macro::TokenStream;
use quote::quote;
-use std::str::FromStr;
-use syn::export::TokenStream2;
-use syn::*;
+use syn::{export::TokenStream2, *};
macro_rules! unwrap {
($input:expr, $arm:pat => $value:expr) => {{
@@ -67,8 +65,8 @@ pub fn jsonrpc_server(_attr: TokenStream, item: TokenStream) -> TokenStream {
let tokens = quote! {
#impl_
+ #[async_trait::async_trait]
impl #generics jsonrpc::RequestHandler for #self_ty {
- #[boxed]
async fn handle_request(&self, request: jsonrpc::Request) -> jsonrpc::Response {
use jsonrpc::*;
@@ -80,7 +78,7 @@ pub fn jsonrpc_server(_attr: TokenStream, item: TokenStream) -> TokenStream {
}
}
- fn handle_notification(&self, notification: jsonrpc::Notification) {
+ async fn handle_notification(&self, notification: jsonrpc::Notification) {
match notification.method.as_str() {
#(#notifications),*,
_ => log::warn!("{}: {}", "Method not found", notification.method),
@@ -94,7 +92,6 @@ pub fn jsonrpc_server(_attr: TokenStream, item: TokenStream) -> TokenStream {
#[proc_macro_attribute]
pub fn jsonrpc_client(attr: TokenStream, item: TokenStream) -> TokenStream {
- let item = TokenStream::from_str(&item.to_string().replace("async ", "")).unwrap();
let trait_: ItemTrait = parse_macro_input!(item);
let trait_ident = &trait_.ident;
let stubs = generate_client_stubs(&trait_.items);
@@ -102,6 +99,7 @@ pub fn jsonrpc_client(attr: TokenStream, item: TokenStream) -> TokenStream {
let struct_ident = unwrap!(attr.first().unwrap(), NestedMeta::Meta(Meta::Path(x)) => x);
let tokens = quote! {
+ #[async_trait::async_trait]
#trait_
pub struct #struct_ident {
@@ -117,14 +115,15 @@ pub fn jsonrpc_client(attr: TokenStream, item: TokenStream) -> TokenStream {
}
}
+ #[async_trait::async_trait]
impl #trait_ident for #struct_ident
{
#(#stubs)*
}
+ #[async_trait::async_trait]
impl jsonrpc::ResponseHandler for #struct_ident
{
- #[boxed]
async fn handle(&self, response: jsonrpc::Response) -> () {
self.client.handle(response).await
}
@@ -163,11 +162,11 @@ fn generate_server_skeletons(items: &Vec<ImplItem>) -> (Vec<TokenStream2>, Vec<T
MethodKind::Notification => {
notifications.push(quote!(
#name => {
- let handler = move |param: #param_ty| {
- self.#ident(param);
+ let handler = |param: #param_ty| async move {
+ self.#ident(param).await;
};
- jsonrpc::handle_notification(notification, handler);
+ jsonrpc::handle_notification(notification, handler).await;
}
));
}
@@ -189,14 +188,12 @@ fn generate_client_stubs(items: &Vec<TraitItem>) -> Vec<TokenStream2> {
let stub = match meta.kind {
MethodKind::Request => quote!(
- #[boxed]
#sig {
let result = self.client.send_request(#name.to_owned(), #param).await?;
serde_json::from_value(result).map_err(|_| jsonrpc::Error::deserialize_error())
}
),
MethodKind::Notification => quote!(
- #[boxed]
#sig {
self.client.send_notification(#name.to_owned(), #param).await
}
diff --git a/support/texlab/crates/tex/Cargo.toml b/support/texlab/crates/tex/Cargo.toml
deleted file mode 100644
index 5c26ff83d8..0000000000
--- a/support/texlab/crates/tex/Cargo.toml
+++ /dev/null
@@ -1,18 +0,0 @@
-[package]
-name = "tex"
-version = "0.1.0"
-authors = [
- "Eric Förster <efoerster@users.noreply.github.com>",
- "Patrick Förster <pfoerster@users.noreply.github.com>"]
-edition = "2018"
-
-[dependencies]
-byteorder = "1"
-futures-boxed = { path = "../futures_boxed" }
-futures-preview = "0.3.0-alpha.18"
-log = "0.4.6"
-tempfile = "3"
-tokio = "0.2.0-alpha.6"
-tokio-net = { version = "0.2.0-alpha.6", features = ["process"]}
-serde = { version = "1.0", features = ["derive"] }
-serde_json = "1.0"
diff --git a/support/texlab/crates/tex/src/compile.rs b/support/texlab/crates/tex/src/compile.rs
deleted file mode 100644
index eeb7db9e4e..0000000000
--- a/support/texlab/crates/tex/src/compile.rs
+++ /dev/null
@@ -1,87 +0,0 @@
-use futures::future::TryFutureExt;
-use std::io;
-use std::process::Stdio;
-use std::time::Duration;
-use tempfile::{tempdir, TempDir};
-use tokio::fs;
-use tokio::future::FutureExt;
-use tokio_net::process::Command;
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub enum Format {
- Latex,
- Pdflatex,
- Xelatex,
- Lualatex,
-}
-
-impl Format {
- pub fn executable(self) -> &'static str {
- match self {
- Self::Latex => "latex",
- Self::Pdflatex => "pdflatex",
- Self::Xelatex => "xelatex",
- Self::Lualatex => "lualatex",
- }
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub enum OutputKind {
- Dvi,
- Pdf,
-}
-
-#[derive(Debug)]
-pub struct CompileResult {
- pub log: String,
- pub directory: TempDir,
-}
-
-#[derive(Debug)]
-pub enum CompileError {
- IO(io::Error),
- NotInstalled,
- Timeout,
-}
-
-impl From<io::Error> for CompileError {
- fn from(error: io::Error) -> Self {
- Self::IO(error)
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct CompileParams<'a> {
- pub file_name: &'a str,
- pub code: &'a str,
- pub format: Format,
- pub timeout: Duration,
-}
-
-pub async fn compile<'a>(
- executable: &'a str,
- args: &'a [&'a str],
- params: CompileParams<'a>,
-) -> Result<CompileResult, CompileError> {
- let directory = tempdir()?;
- let code_file = directory.path().join(params.file_name);
- fs::write(code_file.clone(), params.code).await?;
-
- Command::new(executable)
- .args(args)
- .current_dir(&directory)
- .stdout(Stdio::null())
- .stderr(Stdio::null())
- .status()
- .map_err(|_| CompileError::NotInstalled)
- .timeout(params.timeout)
- .map_err(|_| CompileError::Timeout)
- .await?
- .map_err(|_| CompileError::NotInstalled)?;
-
- let log_file = code_file.with_extension("log");
- let log_bytes = fs::read(log_file).await?;
- let log = String::from_utf8_lossy(&log_bytes).into_owned();
- Ok(CompileResult { log, directory })
-}
diff --git a/support/texlab/crates/tex/src/language.rs b/support/texlab/crates/tex/src/language.rs
deleted file mode 100644
index ea2b6eec90..0000000000
--- a/support/texlab/crates/tex/src/language.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub enum Language {
- Latex,
- Bibtex,
-}
-
-impl Language {
- pub fn by_extension(extension: &str) -> Option<Self> {
- match extension.to_lowercase().as_ref() {
- "tex" | "sty" | "cls" | "lco" | "aux" => Some(Language::Latex),
- "bib" => Some(Language::Bibtex),
- _ => None,
- }
- }
-
- pub fn by_language_id(language_id: &str) -> Option<Self> {
- match language_id {
- "latex" | "tex" => Some(Language::Latex),
- "bibtex" | "bib" => Some(Language::Bibtex),
- _ => None,
- }
- }
-}
diff --git a/support/texlab/crates/tex/src/lib.rs b/support/texlab/crates/tex/src/lib.rs
deleted file mode 100644
index 5075ec0efb..0000000000
--- a/support/texlab/crates/tex/src/lib.rs
+++ /dev/null
@@ -1,106 +0,0 @@
-mod compile;
-mod language;
-mod miktex;
-mod tectonic;
-mod texlive;
-
-pub use self::compile::*;
-pub use self::language::Language;
-
-use self::miktex::Miktex;
-use self::tectonic::Tectonic;
-use self::texlive::Texlive;
-use futures_boxed::boxed;
-use tokio_net::process::Command;
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub enum DistributionKind {
- Texlive,
- Miktex,
- Tectonic,
- Unknown,
-}
-
-impl DistributionKind {
- pub async fn detect() -> Self {
- if Command::new("tectonic")
- .arg("--version")
- .status()
- .await
- .is_ok()
- {
- return Self::Tectonic;
- }
-
- match Command::new("latex").arg("--version").output().await {
- Ok(output) => {
- let stdout = String::from_utf8_lossy(&output.stdout);
- if stdout.contains("TeX Live") {
- Self::Texlive
- } else if stdout.contains("MiKTeX") {
- Self::Miktex
- } else {
- Self::Unknown
- }
- }
- Err(_) => Self::Unknown,
- }
- }
-}
-
-pub trait Distribution: Send + Sync {
- fn kind(&self) -> DistributionKind;
-
- fn supports_format(&self, format: Format) -> bool;
-
- fn output_kind(&self, format: Format) -> OutputKind {
- match format {
- Format::Latex => OutputKind::Dvi,
- Format::Pdflatex | Format::Xelatex | Format::Lualatex => OutputKind::Pdf,
- }
- }
-
- #[boxed]
- async fn compile<'a>(
- &'a self,
- params: CompileParams<'a>,
- ) -> Result<CompileResult, CompileError> {
- let executable = params.format.executable();
- let args = &["--interaction=batchmode", "-shell-escape", params.file_name];
- compile(executable, args, params).await
- }
-}
-
-impl dyn Distribution {
- pub async fn detect() -> Box<Self> {
- let kind = DistributionKind::detect().await;
- let distro: Box<Self> = match kind {
- DistributionKind::Texlive => Box::new(Texlive),
- DistributionKind::Miktex => Box::new(Miktex),
- DistributionKind::Tectonic => Box::new(Tectonic),
- DistributionKind::Unknown => Box::new(Unknown),
- };
- distro
- }
-}
-
-#[derive(Debug, Default)]
-pub struct Unknown;
-
-impl Distribution for Unknown {
- fn kind(&self) -> DistributionKind {
- DistributionKind::Unknown
- }
-
- fn supports_format(&self, _format: Format) -> bool {
- false
- }
-
- #[boxed]
- async fn compile<'a>(
- &'a self,
- _params: CompileParams<'a>,
- ) -> Result<CompileResult, CompileError> {
- Err(CompileError::NotInstalled)
- }
-}
diff --git a/support/texlab/crates/tex/src/miktex.rs b/support/texlab/crates/tex/src/miktex.rs
deleted file mode 100644
index 8ab399dc2b..0000000000
--- a/support/texlab/crates/tex/src/miktex.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-use super::compile::*;
-use super::{Distribution, DistributionKind};
-
-#[derive(Debug, Default)]
-pub struct Miktex;
-
-impl Distribution for Miktex {
- fn kind(&self) -> DistributionKind {
- DistributionKind::Miktex
- }
-
- fn supports_format(&self, format: Format) -> bool {
- match format {
- Format::Latex | Format::Pdflatex => true,
- Format::Xelatex | Format::Lualatex => true,
- }
- }
-}
diff --git a/support/texlab/crates/tex/src/tectonic.rs b/support/texlab/crates/tex/src/tectonic.rs
deleted file mode 100644
index 605e79dc92..0000000000
--- a/support/texlab/crates/tex/src/tectonic.rs
+++ /dev/null
@@ -1,32 +0,0 @@
-use super::compile::*;
-use super::{Distribution, DistributionKind};
-use futures_boxed::boxed;
-
-#[derive(Debug, Default)]
-pub struct Tectonic;
-
-impl Distribution for Tectonic {
- fn kind(&self) -> DistributionKind {
- DistributionKind::Tectonic
- }
-
- fn supports_format(&self, format: Format) -> bool {
- match format {
- Format::Latex | Format::Pdflatex | Format::Xelatex => true,
- Format::Lualatex => false,
- }
- }
-
- fn output_kind(&self, _format: Format) -> OutputKind {
- OutputKind::Pdf
- }
-
- #[boxed]
- async fn compile<'a>(
- &'a self,
- params: CompileParams<'a>,
- ) -> Result<CompileResult, CompileError> {
- let args = [params.file_name];
- compile("tectonic", &args, params).await
- }
-}
diff --git a/support/texlab/crates/tex/src/texlive.rs b/support/texlab/crates/tex/src/texlive.rs
deleted file mode 100644
index 4f90d07926..0000000000
--- a/support/texlab/crates/tex/src/texlive.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-use super::compile::*;
-use super::{Distribution, DistributionKind};
-
-#[derive(Debug, Default)]
-pub struct Texlive;
-
-impl Distribution for Texlive {
- fn kind(&self) -> DistributionKind {
- DistributionKind::Texlive
- }
-
- fn supports_format(&self, format: Format) -> bool {
- match format {
- Format::Latex | Format::Pdflatex => true,
- Format::Xelatex | Format::Lualatex => true,
- }
- }
-}
diff --git a/support/texlab/src/completion/data.json b/support/texlab/data/components.json
index 74a6aefea6..74a6aefea6 100644
--- a/support/texlab/src/completion/data.json
+++ b/support/texlab/data/components.json
diff --git a/support/texlab/src/syntax/language.json b/support/texlab/data/lang_data.json
index 8ffcdd03e1..09ced3053a 100644
--- a/support/texlab/src/syntax/language.json
+++ b/support/texlab/data/lang_data.json
@@ -580,19 +580,19 @@
{
"name": "\\newcommand",
"definitionIndex": 0,
- "argumentCountIndex": 0,
+ "argCountIndex": 0,
"implementationIndex": 1
},
{
"name": "\\renewcommand",
"definitionIndex": 0,
- "argumentCountIndex": 0,
+ "argCountIndex": 0,
"implementationIndex": 1
},
{
"name": "\\DeclareRobustCommand",
"definitionIndex": 0,
- "argumentCountIndex": 0,
+ "argCountIndex": 0,
"implementationIndex": 1
}
],
@@ -2205,9 +2205,5 @@
"vmatrix",
"vmatrix*"
],
- "enumEnvironments": [
- "enumerate",
- "itemize",
- "description"
- ]
-} \ No newline at end of file
+ "enumEnvironments": ["enumerate", "itemize", "description"]
+}
diff --git a/support/texlab/src/action.rs b/support/texlab/src/action.rs
deleted file mode 100644
index da52333ff0..0000000000
--- a/support/texlab/src/action.rs
+++ /dev/null
@@ -1,37 +0,0 @@
-use crate::workspace::Uri;
-use lsp_types::ProgressToken;
-use std::mem;
-use std::sync::Mutex;
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub enum LintReason {
- Change,
- Save,
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub enum Action {
- CheckInstalledDistribution,
- DetectRoot(Uri),
- PublishDiagnostics,
- RunLinter(Uri, LintReason),
- Build(Uri),
- CancelBuild(ProgressToken),
-}
-
-#[derive(Debug, Default)]
-pub struct ActionManager {
- actions: Mutex<Vec<Action>>,
-}
-
-impl ActionManager {
- pub fn push(&self, action: Action) {
- let mut actions = self.actions.lock().unwrap();
- actions.push(action);
- }
-
- pub fn take(&self) -> Vec<Action> {
- let mut actions = self.actions.lock().unwrap();
- mem::replace(&mut *actions, Vec::new())
- }
-}
diff --git a/support/texlab/src/build.rs b/support/texlab/src/build.rs
index c4f284c21e..fe4597c0d7 100644
--- a/support/texlab/src/build.rs
+++ b/support/texlab/src/build.rs
@@ -1,124 +1,60 @@
-use crate::capabilities::ClientCapabilitiesExt;
-use crate::client::LspClient;
-use crate::workspace::*;
-use futures::future::{AbortHandle, Abortable, Aborted};
-use futures::lock::Mutex;
-use futures::prelude::*;
-use futures::stream;
-use futures_boxed::boxed;
-use lsp_types::*;
-use serde::{Deserialize, Serialize};
-use serde_repr::*;
-use std::collections::HashMap;
-use std::io;
-use std::path::Path;
-use std::process::Stdio;
-use std::sync::Arc;
-use tokio::io::{AsyncBufReadExt, BufReader};
-use tokio_net::process::Command;
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{
+ BuildParams, BuildResult, BuildStatus, ClientCapabilitiesExt, LatexOptions,
+ LogMessageParams, LspClient, MessageType, ProgressParams, ProgressParamsValue,
+ ProgressToken, Uri, WorkDoneProgress, WorkDoneProgressBegin, WorkDoneProgressCreateParams,
+ WorkDoneProgressEnd,
+ },
+};
+use async_trait::async_trait;
+use chashmap::CHashMap;
+use futures::{
+ future::{AbortHandle, Abortable, Aborted},
+ lock::Mutex,
+ prelude::*,
+ stream,
+};
+use log::error;
+use std::{collections::HashMap, io, path::Path, process::Stdio, sync::Arc};
+use tokio::{
+ io::{AsyncBufReadExt, BufReader},
+ process::Command,
+};
use uuid::Uuid;
-#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
-#[serde(rename_all = "camelCase")]
-pub struct BuildParams {
- pub text_document: TextDocumentIdentifier,
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Default, Serialize, Deserialize)]
-#[serde(rename_all = "camelCase")]
-pub struct BuildOptions {
- pub executable: Option<String>,
- pub args: Option<Vec<String>>,
- pub on_save: Option<bool>,
-}
-
-impl BuildOptions {
- pub fn executable(&self) -> String {
- self.executable
- .as_ref()
- .map(Clone::clone)
- .unwrap_or_else(|| "latexmk".to_owned())
- }
-
- pub fn args(&self) -> Vec<String> {
- self.args.as_ref().map(Clone::clone).unwrap_or_else(|| {
- vec![
- "-pdf".to_owned(),
- "-interaction=nonstopmode".to_owned(),
- "-synctex=1".to_owned(),
- ]
- })
- }
-
- pub fn on_save(&self) -> bool {
- self.on_save.unwrap_or(false)
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize_repr, Deserialize_repr)]
-#[repr(i32)]
-pub enum BuildStatus {
- Success = 0,
- Error = 1,
- Failure = 2,
- Cancelled = 3,
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
-#[serde(rename_all = "camelCase")]
-pub struct BuildResult {
- pub status: BuildStatus,
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
pub struct BuildProvider<C> {
- pub client: Arc<C>,
- pub options: BuildOptions,
- pub token: ProgressToken,
+ client: Arc<C>,
+ handles_by_token: Mutex<HashMap<ProgressToken, AbortHandle>>,
+ current_docs: CHashMap<Uri, ()>,
}
-impl<C> BuildProvider<C>
-where
- C: LspClient + Send + Sync + 'static,
-{
- pub fn new(client: Arc<C>, options: BuildOptions) -> Self {
+impl<C> BuildProvider<C> {
+ pub fn new(client: Arc<C>) -> Self {
Self {
client,
- options,
- token: ProgressToken::String(format!("texlab-build-{}", Uuid::new_v4())),
+ handles_by_token: Mutex::new(HashMap::new()),
+ current_docs: CHashMap::new(),
}
}
- async fn build<'a>(&'a self, path: &'a Path) -> io::Result<bool> {
- let mut args = Vec::new();
- args.append(&mut self.options.args());
- args.push(path.file_name().unwrap().to_string_lossy().into_owned());
-
- let mut process = Command::new(self.options.executable())
- .args(args)
- .stdin(Stdio::null())
- .stdout(Stdio::piped())
- .stderr(Stdio::piped())
- .current_dir(path.parent().unwrap())
- .spawn()?;
-
- let stdout = BufReader::new(process.stdout().take().unwrap()).lines();
- let stderr = BufReader::new(process.stderr().take().unwrap()).lines();
- let mut output = stream::select(stdout, stderr);
-
- while let Some(Ok(line)) = output.next().await {
- let params = LogMessageParams {
- typ: MessageType::Log,
- message: line,
- };
+ pub fn is_building(&self) -> bool {
+ self.current_docs.len() > 0
+ }
- self.client.log_message(params).await;
+ pub async fn cancel(&self, token: ProgressToken) {
+ let handles_by_token = self.handles_by_token.lock().await;
+ if let Some(handle) = handles_by_token.get(&token) {
+ handle.abort();
+ } else if let ProgressToken::String(id) = token {
+ if id == "texlab-build-*" {
+ handles_by_token.values().for_each(|handle| handle.abort());
+ }
}
-
- Ok(process.await?.success())
}
}
+#[async_trait]
impl<C> FeatureProvider for BuildProvider<C>
where
C: LspClient + Send + Sync + 'static,
@@ -126,106 +62,142 @@ where
type Params = BuildParams;
type Output = BuildResult;
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<BuildParams>) -> BuildResult {
- let document = request
- .workspace()
- .find_parent(&request.document().uri)
- .unwrap();
- let path = document.uri.to_file_path().unwrap();
-
- if request.client_capabilities.has_work_done_progress() {
- let params = WorkDoneProgressCreateParams {
- token: self.token.clone(),
- };
- self.client.work_done_progress_create(params).await.unwrap();
-
- let title = path.file_name().unwrap().to_string_lossy().into_owned();
- let params = ProgressParams {
- token: self.token.clone(),
- value: ProgressParamsValue::WorkDone(WorkDoneProgress::Begin(
- WorkDoneProgressBegin {
- title,
- cancellable: Some(true),
- message: Some("Building".into()),
- percentage: None,
- },
- )),
- };
- self.client.progress(params).await;
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<BuildParams>) -> BuildResult {
+ let token = ProgressToken::String(format!("texlab-build-{}", Uuid::new_v4()));
+ let (handle, reg) = AbortHandle::new_pair();
+ {
+ let mut handles_by_token = self.handles_by_token.lock().await;
+ handles_by_token.insert(token.clone(), handle);
}
- let status = match self.build(&path).await {
- Ok(true) => BuildStatus::Success,
- Ok(false) => BuildStatus::Error,
- Err(_) => BuildStatus::Failure,
- };
-
- BuildResult { status }
- }
-}
-
-pub struct BuildManager<C> {
- handles_by_token: Mutex<HashMap<ProgressToken, AbortHandle>>,
- client: Arc<C>,
-}
+ let doc = req
+ .snapshot()
+ .parent(&req.current().uri, &req.options, &req.current_dir)
+ .unwrap_or_else(|| Arc::clone(&req.view.current));
-impl<C> BuildManager<C>
-where
- C: LspClient + Send + Sync + 'static,
-{
- pub fn new(client: Arc<C>) -> Self {
- Self {
- handles_by_token: Mutex::new(HashMap::new()),
- client,
+ if !doc.is_file() {
+ error!("Unable to build the document {}: wrong URI scheme", doc.uri);
+ return BuildResult {
+ status: BuildStatus::Failure,
+ };
}
- }
- pub async fn build(
- &self,
- request: FeatureRequest<BuildParams>,
- options: BuildOptions,
- ) -> BuildResult {
- let provider = BuildProvider::new(Arc::clone(&self.client), options);
- let (handle, reg) = AbortHandle::new_pair();
- {
- let mut handles_by_token = self.handles_by_token.lock().await;
- handles_by_token.insert(provider.token.clone(), handle);
+ if self.current_docs.get(&doc.uri).is_some() {
+ return BuildResult {
+ status: BuildStatus::Success,
+ };
}
-
- let result = match Abortable::new(provider.execute(&request), reg).await {
- Ok(result) => result,
- Err(Aborted) => BuildResult {
- status: BuildStatus::Cancelled,
- },
+ self.current_docs.insert(doc.uri.clone(), ());
+
+ let status = match doc.uri.to_file_path() {
+ Ok(path) => {
+ if req.client_capabilities.has_work_done_progress_support() {
+ let params = WorkDoneProgressCreateParams {
+ token: token.clone(),
+ };
+ self.client.work_done_progress_create(params).await.unwrap();
+
+ let title = path.file_name().unwrap().to_string_lossy().into_owned();
+ let params = ProgressParams {
+ token: token.clone(),
+ value: ProgressParamsValue::WorkDone(WorkDoneProgress::Begin(
+ WorkDoneProgressBegin {
+ title,
+ cancellable: Some(true),
+ message: Some("Building".into()),
+ percentage: None,
+ },
+ )),
+ };
+ self.client.progress(params).await;
+ }
+
+ let latex_options = req.options.latex.clone().unwrap_or_default();
+ let client = Arc::clone(&self.client);
+ match Abortable::new(build(&path, &latex_options, client), reg).await {
+ Ok(Ok(true)) => BuildStatus::Success,
+ Ok(Ok(false)) => BuildStatus::Error,
+ Ok(Err(why)) => {
+ error!("Unable to build the document {}: {}", doc.uri, why);
+ BuildStatus::Failure
+ }
+ Err(Aborted) => BuildStatus::Cancelled,
+ }
+ }
+ Err(()) => {
+ error!("Unable to build the document {}: invalid URI", doc.uri);
+ BuildStatus::Failure
+ }
};
- if request.client_capabilities.has_work_done_progress() {
+ if req.client_capabilities.has_work_done_progress_support() {
let params = ProgressParams {
- token: provider.token.clone(),
- value: ProgressParamsValue::WorkDone(WorkDoneProgress::Done(
- WorkDoneProgressDone { message: None },
- )),
+ token: token.clone(),
+ value: ProgressParamsValue::WorkDone(WorkDoneProgress::End(WorkDoneProgressEnd {
+ message: None,
+ })),
};
self.client.progress(params).await;
}
-
{
let mut handles_by_token = self.handles_by_token.lock().await;
- handles_by_token.remove(&provider.token);
+ handles_by_token.remove(&token);
}
- result
+ self.current_docs.remove(&doc.uri);
+ BuildResult { status }
}
+}
- pub async fn cancel(&self, token: ProgressToken) {
- let handles_by_token = self.handles_by_token.lock().await;
- if let Some(handle) = handles_by_token.get(&token) {
- handle.abort();
- } else if let ProgressToken::String(id) = token {
- if id == "texlab-build-*" {
- handles_by_token.values().for_each(|handle| handle.abort());
- }
+async fn build<C>(path: &Path, options: &LatexOptions, client: Arc<C>) -> io::Result<bool>
+where
+ C: LspClient + Send + Sync + 'static,
+{
+ let build_options = options.build.as_ref().cloned().unwrap_or_default();
+ let build_dir = options
+ .root_directory
+ .as_ref()
+ .map(AsRef::as_ref)
+ .or_else(|| path.parent())
+ .unwrap();
+
+ let args: Vec<_> = build_options
+ .args()
+ .into_iter()
+ .map(|arg| replace_placeholder(arg, path))
+ .collect();
+
+ let mut process = Command::new(build_options.executable())
+ .args(args)
+ .stdin(Stdio::null())
+ .stdout(Stdio::piped())
+ .stderr(Stdio::piped())
+ .current_dir(build_dir)
+ .kill_on_drop(true)
+ .spawn()?;
+
+ let stdout = BufReader::new(process.stdout.take().unwrap()).lines();
+ let stderr = BufReader::new(process.stderr.take().unwrap()).lines();
+ let mut output = stream::select(stdout, stderr);
+
+ tokio::spawn(async move {
+ while let Some(Ok(line)) = output.next().await {
+ let params = LogMessageParams {
+ typ: MessageType::Log,
+ message: line,
+ };
+
+ client.log_message(params).await;
}
+ });
+
+ Ok(process.await?.success())
+}
+
+fn replace_placeholder(arg: String, file: &Path) -> String {
+ if arg.starts_with('"') || arg.ends_with('"') {
+ arg
+ } else {
+ arg.replace("%f", &file.to_string_lossy())
}
}
diff --git a/support/texlab/src/capabilities.rs b/support/texlab/src/capabilities.rs
deleted file mode 100644
index 92acd2fbee..0000000000
--- a/support/texlab/src/capabilities.rs
+++ /dev/null
@@ -1,46 +0,0 @@
-use lsp_types::{ClientCapabilities, MarkupKind};
-
-pub trait ClientCapabilitiesExt {
- fn has_definition_link_support(&self) -> bool;
-
- fn has_hierarchical_document_symbol_support(&self) -> bool;
-
- fn has_work_done_progress(&self) -> bool;
-
- fn has_hover_markdown_support(&self) -> bool;
-}
-
-impl ClientCapabilitiesExt for ClientCapabilities {
- fn has_definition_link_support(&self) -> bool {
- self.text_document
- .as_ref()
- .and_then(|cap| cap.definition.as_ref())
- .and_then(|cap| cap.link_support)
- == Some(true)
- }
-
- fn has_hierarchical_document_symbol_support(&self) -> bool {
- self.text_document
- .as_ref()
- .and_then(|cap| cap.document_symbol.as_ref())
- .and_then(|cap| cap.hierarchical_document_symbol_support)
- == Some(true)
- }
-
- fn has_work_done_progress(&self) -> bool {
- self.window.as_ref().and_then(|cap| cap.work_done_progress) == Some(true)
- }
-
- fn has_hover_markdown_support(&self) -> bool {
- if let Some(formats) = self
- .text_document
- .as_ref()
- .and_then(|cap| cap.hover.as_ref())
- .and_then(|cap| cap.content_format.as_ref())
- {
- formats.contains(&MarkupKind::Markdown)
- } else {
- false
- }
- }
-}
diff --git a/support/texlab/crates/bibutils/src/lib.rs b/support/texlab/src/citeproc/bibutils.rs
index f14db68b59..03a5c2996a 100644
--- a/support/texlab/crates/bibutils/src/lib.rs
+++ b/support/texlab/src/citeproc/bibutils.rs
@@ -1,8 +1,11 @@
-use bibutils_sys::*;
-use std::ffi::CString;
-use std::fs;
-use std::mem::MaybeUninit;
-use std::path::Path;
+use bibutils_sys::{
+ bibl, bibl_free, bibl_freeparams, bibl_init, bibl_initparams, bibl_read, bibl_write, fclose,
+ fopen, param, BIBL_ADSABSOUT, BIBL_BIBLATEXIN, BIBL_BIBTEXIN, BIBL_BIBTEXOUT, BIBL_COPACIN,
+ BIBL_EBIIN, BIBL_ENDNOTEIN, BIBL_ENDNOTEOUT, BIBL_ENDNOTEXMLIN, BIBL_ISIOUT, BIBL_MEDLINEIN,
+ BIBL_MODSIN, BIBL_MODSOUT, BIBL_NBIBIN, BIBL_NBIBOUT, BIBL_OK, BIBL_RISIN, BIBL_RISOUT,
+ BIBL_WORD2007OUT, BIBL_WORDIN, FILE,
+};
+use std::{ffi::CString, fs, mem::MaybeUninit, path::Path};
use tempfile::tempdir;
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
@@ -102,7 +105,7 @@ impl Params {
inner.as_mut_ptr(),
from.read_mode() as i32,
to.write_mode() as i32,
- program.as_ptr(),
+ program.as_ptr() as *mut i8,
);
}
Self { inner }
@@ -143,7 +146,7 @@ impl Drop for File {
unsafe impl Send for File {}
-pub fn convert(input: String, from: InputFormat, to: OutputFormat) -> Option<String> {
+pub fn convert(input: &str, from: InputFormat, to: OutputFormat) -> Option<String> {
let mut context = Context::new();
let mut params = Params::new(from, to);
let dir = tempdir().expect("failed to create a temporary directory");
@@ -155,7 +158,7 @@ pub fn convert(input: String, from: InputFormat, to: OutputFormat) -> Option<Str
let status = bibl_read(
context.inner.as_mut_ptr(),
input_file.handle,
- input_file.path.as_ptr(),
+ input_file.path.as_ptr() as *mut i8,
params.inner.as_mut_ptr(),
);
diff --git a/support/texlab/src/citeproc/mod.rs b/support/texlab/src/citeproc/mod.rs
index 9827c190f3..6def2ed8a4 100644
--- a/support/texlab/src/citeproc/mod.rs
+++ b/support/texlab/src/citeproc/mod.rs
@@ -1,52 +1,88 @@
+mod bibutils;
mod name;
mod ris;
-use self::ris::*;
-use crate::formatting::bibtex::{format_entry, format_string, BibtexFormattingParams};
-use crate::syntax::*;
-use bibutils::{InputFormat, OutputFormat};
+use self::{
+ bibutils::{InputFormat, OutputFormat},
+ ris::{RisLibrary, RisReference},
+};
+use crate::{
+ protocol::{BibtexFormattingOptions, MarkupContent, MarkupKind},
+ syntax::bibtex,
+};
use citeproc::prelude::*;
use citeproc_db::PredefinedLocales;
-use lsp_types::{MarkupContent, MarkupKind};
+use once_cell::sync::Lazy;
+use regex::Regex;
use std::sync::Arc;
static APA_STYLE: &str = include_str!("apa.csl");
-pub fn render_citation(tree: &BibtexSyntaxTree, key: &str) -> Option<MarkupContent> {
- let reference: Reference = convert_to_ris(tree, key)?.into();
+static DOI_URL_PATTERN: &str = r#"https://doi.org/\[.*\]\(.*\)"#;
- let html = generate_bibliography(reference)?;
- let markdown = html2md::parse_html(&html).trim().to_owned();
+static DOI_URL_REGEX: Lazy<Regex> = Lazy::new(|| Regex::new(DOI_URL_PATTERN).unwrap());
+
+pub fn render_citation(tree: &bibtex::Tree, key: &str) -> Option<MarkupContent> {
+ let ris_reference = convert_to_ris(tree, key)?;
+ let doi_url = get_doi_url_markdown(&ris_reference);
+ let csl_reference: Reference = ris_reference.into();
+ let html = generate_bibliography(csl_reference)?;
+
+ let mut markdown = html2md::parse_html(&html).trim().to_owned();
if markdown == "" {
return None;
}
+ if let Some(doi_url) = doi_url {
+ markdown = DOI_URL_REGEX
+ .replace(&markdown, doi_url.as_str())
+ .into_owned();
+ }
+
+ markdown = markdown
+ .replace("..", ".")
+ .replace("\\\'", "'")
+ .replace("\\-", "-")
+ .replace("\\\\textsubscript", "")
+ .replace("\\\\textsuperscript", "");
let content = MarkupContent {
kind: MarkupKind::Markdown,
- value: markdown.replace("..", "."),
+ value: markdown,
};
Some(content)
}
-fn convert_to_ris(tree: &BibtexSyntaxTree, key: &str) -> Option<RisReference> {
- let bib_params = BibtexFormattingParams::default();
- let mut bib_code = String::new();
+fn convert_to_ris(tree: &bibtex::Tree, key: &str) -> Option<RisReference> {
+ let options = BibtexFormattingOptions {
+ line_length: None,
+ formatter: None,
+ };
+ let params = bibtex::FormattingParams {
+ insert_spaces: true,
+ tab_size: 4,
+ options: &options,
+ };
- for string in tree.strings() {
- bib_code.push_str(&format_string(string, &bib_params));
- bib_code.push('\n');
- }
+ let mut bib_code = String::new();
+ tree.children(tree.root)
+ .filter(|node| tree.as_string(*node).is_some())
+ .map(|node| bibtex::format(tree, node, params))
+ .for_each(|string| {
+ bib_code.push_str(&string);
+ bib_code.push('\n');
+ });
- let entry = tree.find_entry(key)?;
- if let Some(crossref) = tree.resolve_crossref(entry) {
- bib_code.push_str(&format_entry(crossref, &bib_params));
+ let entry = tree.entry_by_key(key)?;
+ if let Some(crossref) = tree.crossref(entry) {
+ bib_code.push_str(&bibtex::format(tree, crossref, params));
bib_code.push('\n');
}
- bib_code.push_str(&format_entry(entry, &bib_params));
+ bib_code.push_str(&bibtex::format(tree, entry, params));
bib_code.push('\n');
+ bib_code = bib_code.replace("\\hypen", "-");
- let ris_code = bibutils::convert(bib_code, InputFormat::Biblatex, OutputFormat::Ris)?;
+ let ris_code = bibutils::convert(&bib_code, InputFormat::Biblatex, OutputFormat::Ris)?;
let ris_lib = RisLibrary::parse(ris_code.lines());
ris_lib
.references
@@ -54,16 +90,124 @@ fn convert_to_ris(tree: &BibtexSyntaxTree, key: &str) -> Option<RisReference> {
.find(|reference| reference.id.as_ref().map(AsRef::as_ref) == Some(key))
}
+fn get_doi_url_markdown(ris_reference: &RisReference) -> Option<String> {
+ ris_reference
+ .doi
+ .as_ref()
+ .map(|doi| format!("[doi:{}](https://doi.org/{})", doi, doi))
+}
+
fn generate_bibliography(reference: Reference) -> Option<String> {
let locales = Arc::new(PredefinedLocales::bundled_en_us());
let mut processor = Processor::new(APA_STYLE, locales, false, SupportedFormat::Html).unwrap();
let cite = Cite::basic(&reference.id);
- let cluster = Cluster2::Note {
+ let cluster = Cluster {
id: 1,
- note: IntraNote::Single(1),
cites: vec![cite],
};
processor.insert_reference(reference);
processor.init_clusters(vec![cluster]);
+ processor
+ .set_cluster_order(&[ClusterPosition {
+ id: 1,
+ note: Some(1),
+ }])
+ .unwrap();
processor.get_bibliography().pop()
}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use indoc::indoc;
+
+ #[test]
+ fn simple() {
+ let tree = bibtex::open(indoc!(
+ r#"
+ @article{foo,
+ author = {Foo Bar},
+ title = {Baz Qux},
+ year = {2020}
+ }
+ "#
+ ));
+
+ let actual_md = render_citation(&tree, "foo").unwrap();
+
+ let expected_md = MarkupContent {
+ kind: MarkupKind::Markdown,
+ value: "Bar, F. (2020). *Baz Qux*.".into(),
+ };
+
+ assert_eq!(actual_md, expected_md);
+ }
+
+ #[test]
+ fn crossref() {
+ let tree = bibtex::open(indoc!(
+ r#"
+ https://tex.stackexchange.com/questions/401138/what-is-the-bibtex-crossref-field-used-for
+
+ @inproceedings{duck2015,
+ author = {Duck, D.},
+ title = {Duck tales},
+ crossref = {ICRC2015},
+ }
+
+ @inproceedings{mouse2015,
+ author = {Mouse, M.},
+ title = {Mouse stories},
+ crossref = {ICRC2015},
+ }
+
+ @proceedings{ICRC2015,
+ title = "{Proceedings of the 34\textsuperscript{th} International Cosmic Ray Conference}",
+ year = "2015",
+ month = aug,
+ }
+ "#
+ ));
+
+ let actual_md = render_citation(&tree, "mouse2015").unwrap();
+
+ let expected_md = MarkupContent {
+ kind: MarkupKind::Markdown,
+ value: "Mouse, M. (2015). Mouse stories. In *Proceedings of the 34th International Cosmic Ray Conference*.".into(),
+ };
+
+ assert_eq!(actual_md, expected_md);
+ }
+
+ #[test]
+ fn string() {
+ let tree = bibtex::open(indoc!(
+ r#"
+ @string{author = "Foo Bar"}
+ @article{foo,
+ author = author,
+ title = {Baz Qux},
+ year = {2020}
+ }
+ "#
+ ));
+
+ let actual_md = render_citation(&tree, "foo").unwrap();
+
+ let expected_md = MarkupContent {
+ kind: MarkupKind::Markdown,
+ value: "Bar, F. (2020). *Baz Qux*.".into(),
+ };
+
+ assert_eq!(actual_md, expected_md);
+ }
+
+ #[test]
+ fn unknown_key() {
+ let tree = bibtex::open("");
+
+ let actual_md = render_citation(&tree, "foo");
+
+ assert_eq!(actual_md, None);
+ }
+}
diff --git a/support/texlab/src/citeproc/name/mod.rs b/support/texlab/src/citeproc/name/mod.rs
index 7668d0fff8..ef97d30130 100644
--- a/support/texlab/src/citeproc/name/mod.rs
+++ b/support/texlab/src/citeproc/name/mod.rs
@@ -1,7 +1,10 @@
// Ported from: https://github.com/michel-kraemer/citeproc-java/blob/master/citeproc-java/grammars/InternalName.g4
// Michel Kraemer
// Apache License 2.0
-mod parser;
+mod parser {
+ #![allow(warnings)]
+ include!(concat!(env!("OUT_DIR"), "/citeproc/name/parser.rs"));
+}
use self::parser::NamesParser;
use citeproc_io::Name;
@@ -21,7 +24,7 @@ mod tests {
use citeproc_io::PersonName;
#[test]
- fn test_family_only() {
+ fn family_only() {
let name = Name::Person(PersonName {
family: Some("Thompson".into()),
given: None,
@@ -33,7 +36,7 @@ mod tests {
}
#[test]
- fn test_simple() {
+ fn simple() {
let name = Name::Person(PersonName {
family: Some("Thompson".into()),
given: Some("Ken".into()),
@@ -45,7 +48,7 @@ mod tests {
}
#[test]
- fn test_middle_name() {
+ fn middle_name() {
let name = Name::Person(PersonName {
family: Some("Ritchie".into()),
given: Some("Dennis M.".into()),
@@ -57,7 +60,7 @@ mod tests {
}
#[test]
- fn test_initials() {
+ fn initials() {
let name = Name::Person(PersonName {
family: Some("Johnson".into()),
given: Some("S. C.".into()),
@@ -69,7 +72,7 @@ mod tests {
}
#[test]
- fn test_non_dropping_particle() {
+ fn non_dropping_particle() {
let name = Name::Person(PersonName {
family: Some("Gerwen".into()),
given: Some("Michael".into()),
@@ -81,7 +84,7 @@ mod tests {
}
#[test]
- fn test_non_dropping_particle_family_only() {
+ fn non_dropping_particle_family_only() {
let name = Name::Person(PersonName {
family: Some("Gerwen".into()),
given: None,
@@ -93,7 +96,7 @@ mod tests {
}
#[test]
- fn test_comma() {
+ fn comma() {
let name = Name::Person(PersonName {
family: Some("Thompson".into()),
given: Some("Ken".into()),
@@ -105,7 +108,7 @@ mod tests {
}
#[test]
- fn test_comma_junior() {
+ fn comma_junior() {
let name = Name::Person(PersonName {
family: Some("Friedman".into()),
given: Some("George".into()),
@@ -117,7 +120,7 @@ mod tests {
}
#[test]
- fn test_comma_no_junior() {
+ fn comma_no_junior() {
let name = Name::Person(PersonName {
family: Some("Familya Familyb".into()),
given: Some("Given".into()),
@@ -129,7 +132,7 @@ mod tests {
}
#[test]
- fn test_comma_initials() {
+ fn comma_initials() {
let name = Name::Person(PersonName {
family: Some("Ritchie".into()),
given: Some("Dennis M.".into()),
@@ -141,7 +144,7 @@ mod tests {
}
#[test]
- fn test_comma_non_dropping_particle() {
+ fn comma_non_dropping_particle() {
let name = Name::Person(PersonName {
family: Some("Gerwen".into()),
given: Some("Michael".into()),
@@ -153,7 +156,7 @@ mod tests {
}
#[test]
- fn test_comma_non_dropping_particles() {
+ fn comma_non_dropping_particles() {
let name = Name::Person(PersonName {
family: Some("Voort".into()),
given: Some("Vincent".into()),
@@ -165,7 +168,7 @@ mod tests {
}
#[test]
- fn test_and() {
+ fn and() {
let name1 = Name::Person(PersonName {
family: Some("Gerwen".into()),
given: Some("Michael".into()),
@@ -187,7 +190,7 @@ mod tests {
}
#[test]
- fn test_and_comma1() {
+ fn and_comma1() {
let name1 = Name::Person(PersonName {
family: Some("Gerwen".into()),
given: Some("Michael".into()),
@@ -209,7 +212,7 @@ mod tests {
}
#[test]
- fn test_and_comma2() {
+ fn and_comma2() {
let name1 = Name::Person(PersonName {
family: Some("Gerwen".into()),
given: Some("Michael".into()),
@@ -231,7 +234,7 @@ mod tests {
}
#[test]
- fn test_and_comma_mix() {
+ fn and_comma_mix() {
let name1 = Name::Person(PersonName {
family: Some("Gerwen".into()),
given: Some("Michael".into()),
@@ -253,7 +256,7 @@ mod tests {
}
#[test]
- fn test_junior() {
+ fn junior() {
let name = Name::Person(PersonName {
family: Some("Friedman".into()),
given: Some("George".into()),
@@ -265,7 +268,7 @@ mod tests {
}
#[test]
- fn test_non_parseable() {
+ fn non_parseable() {
let literal = "Jerry Peek and Tim O'Reilly and Mike Loukides and other authors of the Nutshell handbooks";
let name = Name::Literal {
literal: literal.into(),
diff --git a/support/texlab/src/citeproc/name/parser.lalrpop b/support/texlab/src/citeproc/name/parser.lalrpop
index 556e3bd361..e7bce8a302 100644
--- a/support/texlab/src/citeproc/name/parser.lalrpop
+++ b/support/texlab/src/citeproc/name/parser.lalrpop
@@ -144,9 +144,7 @@ Word: &'input str = {
LWord => (<>),
};
+
UWord: &'input str = r"[A-Z\u00C0-\uFFFF(?][A-Z\u00C0-\uFFFF(?a-z\-)&/.]+" => (<>);
LWord: &'input str = r"[a-z\-)&/.][A-Z\u00C0-\uFFFF(?a-z\-)&/.]+" => (<>);
-
-
-
diff --git a/support/texlab/src/citeproc/ris.rs b/support/texlab/src/citeproc/ris.rs
index 4a0379a698..1cb5754aec 100644
--- a/support/texlab/src/citeproc/ris.rs
+++ b/support/texlab/src/citeproc/ris.rs
@@ -226,8 +226,8 @@ impl RisLibrary {
continue;
}
- let key: String = (&chars[..2]).into_iter().collect();
- let value: String = (&chars[6..]).into_iter().collect();
+ let key: String = (&chars[..2]).iter().collect();
+ let value: String = (&chars[6..]).iter().collect();
match key.to_uppercase().as_str() {
"TY" => reference.ty = RisType::parse(&value),
"A2" => reference.editors.push(value),
@@ -347,7 +347,7 @@ impl Into<Reference> for RisReference {
if let Some(place) = self.place {
ordinary.insert(Variable::EventPlace, place.clone());
- ordinary.insert(Variable::PublisherPlace, place.clone());
+ ordinary.insert(Variable::PublisherPlace, place);
}
if let Some(abstrct) = self.abstrct {
diff --git a/support/texlab/src/completion/bibtex/cmd.rs b/support/texlab/src/completion/bibtex/cmd.rs
new file mode 100644
index 0000000000..eab905386a
--- /dev/null
+++ b/support/texlab/src/completion/bibtex/cmd.rs
@@ -0,0 +1,177 @@
+use crate::{
+ completion::types::{Item, ItemData},
+ components::COMPONENT_DATABASE,
+ feature::FeatureRequest,
+ protocol::{CompletionParams, RangeExt},
+ syntax::SyntaxNode,
+ workspace::DocumentContent,
+};
+
+pub async fn complete_bibtex_commands<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ if let DocumentContent::Bibtex(tree) = &req.current().content {
+ let pos = req.params.text_document_position.position;
+ if let Some(cmd) = tree
+ .find(pos)
+ .into_iter()
+ .last()
+ .and_then(|node| tree.as_command(node))
+ {
+ if cmd.token.range().contains(pos) && cmd.token.start().character != pos.character {
+ let mut range = cmd.range();
+ range.start.character += 1;
+ for cmd in &COMPONENT_DATABASE.kernel().commands {
+ let item = Item::new(
+ range,
+ ItemData::ComponentCommand {
+ name: &cmd.name,
+ image: cmd.image.as_deref(),
+ glyph: cmd.glyph.as_deref(),
+ file_names: &[],
+ },
+ );
+ items.push(item);
+ }
+ }
+ }
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::{feature::FeatureTester, protocol::Range};
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_commands(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_commands(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn inside_comment() {
+ let req = FeatureTester::new()
+ .file("main.bib", r#"\"#)
+ .main("main.bib")
+ .position(0, 1)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_commands(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn inside_command() {
+ let req = FeatureTester::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @article{foo, bar=
+ \}
+ "#
+ ),
+ )
+ .main("main.bib")
+ .position(1, 1)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_commands(&req, &mut actual_items).await;
+
+ assert!(!actual_items.is_empty());
+ assert_eq!(actual_items[0].range, Range::new_simple(1, 1, 1, 2));
+ }
+
+ #[tokio::test]
+ async fn start_of_command() {
+ let req = FeatureTester::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @article{foo, bar=
+ \}
+ "#
+ ),
+ )
+ .main("main.bib")
+ .position(1, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_commands(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn inside_text() {
+ let req = FeatureTester::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @article{foo, bar=
+ }
+ "#
+ ),
+ )
+ .main("main.bib")
+ .position(1, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_commands(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn inside_latex_command() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\"#)
+ .main("main.tex")
+ .position(0, 1)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_commands(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+}
diff --git a/support/texlab/src/completion/bibtex/command.rs b/support/texlab/src/completion/bibtex/command.rs
deleted file mode 100644
index 5d61a8e568..0000000000
--- a/support/texlab/src/completion/bibtex/command.rs
+++ /dev/null
@@ -1,112 +0,0 @@
-use crate::completion::factory::{self, LatexComponentId};
-use crate::completion::DATABASE;
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct BibtexCommandCompletionProvider;
-
-impl FeatureProvider for BibtexCommandCompletionProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- let mut items = Vec::new();
- if let SyntaxTree::Bibtex(tree) = &request.document().tree {
- let position = request.params.text_document_position.position;
- if let Some(BibtexNode::Command(command)) = tree.find(position).last() {
- if command.token.range().contains(position)
- && command.token.start().character != position.character
- {
- let mut range = command.range();
- range.start.character += 1;
-
- let component = LatexComponentId::kernel();
- for command in &DATABASE.kernel().commands {
- let text_edit = TextEdit::new(range, (&command.name).into());
- let item = factory::command(
- request,
- (&command.name).into(),
- command.image.as_ref().map(AsRef::as_ref),
- command.glyph.as_ref().map(AsRef::as_ref),
- text_edit,
- &component,
- );
- items.push(item);
- }
- }
- }
- }
- items
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use lsp_types::{Position, Range};
-
- #[test]
- fn test_inside_command() {
- let items = test_feature(
- BibtexCommandCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo, bar=\n\\}")],
- main_file: "foo.bib",
- position: Position::new(1, 1),
- ..FeatureSpec::default()
- },
- );
- assert!(!items.is_empty());
- assert_eq!(
- items[0].text_edit.as_ref().map(|edit| edit.range),
- Some(Range::new_simple(1, 1, 1, 2))
- );
- }
-
- #[test]
- fn test_start_of_command() {
- let items = test_feature(
- BibtexCommandCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo, bar=\n\\}")],
- main_file: "foo.bib",
- position: Position::new(1, 0),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
- }
-
- #[test]
- fn test_inside_text() {
- let items = test_feature(
- BibtexCommandCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo, bar=\n}")],
- main_file: "foo.bib",
- position: Position::new(1, 0),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
- }
-
- #[test]
- fn test_latex() {
- let items = test_feature(
- BibtexCommandCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\")],
- main_file: "foo.tex",
- position: Position::new(0, 1),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
- }
-}
diff --git a/support/texlab/src/completion/bibtex/entry_type.rs b/support/texlab/src/completion/bibtex/entry_type.rs
index 8deabdb33e..e3b12ef00d 100644
--- a/support/texlab/src/completion/bibtex/entry_type.rs
+++ b/support/texlab/src/completion/bibtex/entry_type.rs
@@ -1,155 +1,164 @@
-use crate::completion::factory;
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct BibtexEntryTypeCompletionProvider;
-
-impl FeatureProvider for BibtexEntryTypeCompletionProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- if let SyntaxTree::Bibtex(tree) = &request.document().tree {
- let position = request.params.text_document_position.position;
- for declaration in &tree.root.children {
- match declaration {
- BibtexDeclaration::Preamble(preamble) => {
- if contains(&preamble.ty, position) {
- return make_items(request, preamble.ty.range());
- }
+use crate::{
+ completion::types::{Item, ItemData},
+ feature::FeatureRequest,
+ protocol::{CompletionParams, Position, Range, RangeExt},
+ syntax::{bibtex, SyntaxNode, LANGUAGE_DATA},
+ workspace::DocumentContent,
+};
+
+pub async fn complete_bibtex_entry_types<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ if let DocumentContent::Bibtex(tree) = &req.current().content {
+ let pos = req.params.text_document_position.position;
+ for decl in tree.children(tree.root) {
+ match &tree.graph[decl] {
+ bibtex::Node::Preamble(preamble) => {
+ if contains(&preamble.ty, pos) {
+ make_items(items, preamble.ty.range());
+ return;
}
- BibtexDeclaration::String(string) => {
- if contains(&string.ty, position) {
- return make_items(request, string.ty.range());
- }
+ }
+ bibtex::Node::String(string) => {
+ if contains(&string.ty, pos) {
+ make_items(items, string.ty.range());
+ return;
}
- BibtexDeclaration::Entry(entry) => {
- if contains(&entry.ty, position) {
- return make_items(request, entry.ty.range());
- }
+ }
+ bibtex::Node::Entry(entry) => {
+ if contains(&entry.ty, pos) {
+ make_items(items, entry.ty.range());
+ return;
}
- BibtexDeclaration::Comment(_) => {}
}
+ _ => {}
}
}
- Vec::new()
}
}
-fn contains(ty: &BibtexToken, position: Position) -> bool {
- ty.range().contains(position) && ty.start().character != position.character
+fn contains(ty: &bibtex::Token, pos: Position) -> bool {
+ ty.range().contains(pos) && ty.start().character != pos.character
}
-fn make_items(request: &FeatureRequest<CompletionParams>, mut range: Range) -> Vec<CompletionItem> {
+fn make_items(items: &mut Vec<Item>, mut range: Range) {
range.start.character += 1;
- let mut items = Vec::new();
for ty in &LANGUAGE_DATA.entry_types {
- let text_edit = TextEdit::new(range, (&ty.name).into());
- let item = factory::entry_type(request, ty, text_edit);
+ let item = Item::new(range, ItemData::EntryType { ty });
items.push(item);
}
- items
}
#[cfg(test)]
mod tests {
use super::*;
- use lsp_types::Position;
-
- #[test]
- fn test_before_at_sign() {
- let items = test_feature(
- BibtexEntryTypeCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@")],
- main_file: "foo.bib",
- position: Position::new(0, 0),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
+ use crate::feature::FeatureTester;
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_entry_types(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_entry_types(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_after_at_sign() {
- let items = test_feature(
- BibtexEntryTypeCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@")],
- main_file: "foo.bib",
- position: Position::new(0, 1),
- ..FeatureSpec::default()
- },
- );
- assert!(!items.is_empty());
- assert_eq!(
- items[0].text_edit.as_ref().map(|edit| edit.range),
- Some(Range::new_simple(0, 1, 0, 1))
- );
+ #[tokio::test]
+ async fn before_at_sign() {
+ let req = FeatureTester::new()
+ .file("main.bib", "@")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_entry_types(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_inside_entry_type() {
- let items = test_feature(
- BibtexEntryTypeCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@foo")],
- main_file: "foo.bib",
- position: Position::new(0, 2),
- ..FeatureSpec::default()
- },
- );
- assert!(!items.is_empty());
- assert_eq!(
- items[0].text_edit.as_ref().map(|edit| edit.range),
- Some(Range::new_simple(0, 1, 0, 4))
- );
+ #[tokio::test]
+ async fn after_at_sign() {
+ let req = FeatureTester::new()
+ .file("main.bib", "@")
+ .main("main.bib")
+ .position(0, 1)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_entry_types(&req, &mut actual_items).await;
+
+ assert!(!actual_items.is_empty());
+ assert_eq!(actual_items[0].range, Range::new_simple(0, 1, 0, 1));
}
- #[test]
- fn test_inside_entry_key() {
- let items = test_feature(
- BibtexEntryTypeCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo,}")],
- main_file: "foo.bib",
- position: Position::new(0, 11),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
+ #[tokio::test]
+ async fn inside_entry_type() {
+ let req = FeatureTester::new()
+ .file("main.bib", "@foo")
+ .main("main.bib")
+ .position(0, 2)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_entry_types(&req, &mut actual_items).await;
+
+ assert!(!actual_items.is_empty());
+ assert_eq!(actual_items[0].range, Range::new_simple(0, 1, 0, 4));
}
- #[test]
- fn test_inside_comments() {
- let items = test_feature(
- BibtexEntryTypeCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "foo")],
- main_file: "foo.bib",
- position: Position::new(0, 2),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
+ #[tokio::test]
+ async fn inside_entry_key() {
+ let req = FeatureTester::new()
+ .file("main.bib", "@article{foo,}")
+ .main("main.bib")
+ .position(0, 11)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_entry_types(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_latex() {
- let items = test_feature(
- BibtexEntryTypeCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "@")],
- main_file: "foo.tex",
- position: Position::new(0, 1),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
+ #[tokio::test]
+ async fn inside_comments() {
+ let req = FeatureTester::new()
+ .file("main.bib", "foo")
+ .main("main.bib")
+ .position(0, 2)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_entry_types(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
}
diff --git a/support/texlab/src/completion/bibtex/field_name.rs b/support/texlab/src/completion/bibtex/field_name.rs
index abddad4f5a..039cc5d6b3 100644
--- a/support/texlab/src/completion/bibtex/field_name.rs
+++ b/support/texlab/src/completion/bibtex/field_name.rs
@@ -1,176 +1,190 @@
-use crate::completion::factory;
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{CompletionItem, CompletionParams, Range, TextEdit};
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct BibtexFieldNameCompletionProvider;
-
-impl FeatureProvider for BibtexFieldNameCompletionProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- if let SyntaxTree::Bibtex(tree) = &request.document().tree {
- let position = request.params.text_document_position.position;
- match tree.find(position).last() {
- Some(BibtexNode::Field(field)) => {
- if field.name.range().contains(position) {
- return make_items(request, field.name.range());
- }
+use crate::{
+ completion::types::{Item, ItemData},
+ feature::FeatureRequest,
+ protocol::{CompletionParams, Range, RangeExt},
+ syntax::{bibtex, SyntaxNode, LANGUAGE_DATA},
+ workspace::DocumentContent,
+};
+
+pub async fn complete_bibtex_fields<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ if let DocumentContent::Bibtex(tree) = &req.current().content {
+ let pos = req.params.text_document_position.position;
+ match tree
+ .find(pos)
+ .into_iter()
+ .last()
+ .map(|node| &tree.graph[node])
+ {
+ Some(bibtex::Node::Field(field)) => {
+ if field.name.range().contains(pos) {
+ make_items(items, field.name.range());
+ return;
}
- Some(BibtexNode::Entry(entry)) => {
- if !entry.is_comment() && !entry.ty.range().contains(position) {
- let edit_range = Range::new(position, position);
- if let Some(key) = &entry.key {
- if !key.range().contains(position) {
- return make_items(request, edit_range);
- }
- } else {
- return make_items(request, edit_range);
+ }
+ Some(bibtex::Node::Entry(entry)) => {
+ if !entry.is_comment() && !entry.ty.range().contains(pos) {
+ let range = Range::new(pos, pos);
+ if let Some(key) = &entry.key {
+ if !key.range().contains(pos) {
+ make_items(items, range);
+ return;
}
+ } else {
+ make_items(items, range);
+ return;
}
}
- _ => {}
}
+ _ => (),
}
- Vec::new()
}
}
-fn make_items(
- request: &FeatureRequest<CompletionParams>,
- edit_range: Range,
-) -> Vec<CompletionItem> {
- let mut items = Vec::new();
+fn make_items(items: &mut Vec<Item>, range: Range) {
for field in &LANGUAGE_DATA.fields {
- let text_edit = TextEdit::new(edit_range, (&field.name).into());
- let item = factory::field_name(request, field, text_edit);
+ let item = Item::new(range, ItemData::Field { field });
items.push(item);
}
- items
}
#[cfg(test)]
mod tests {
use super::*;
- use lsp_types::Position;
-
- #[test]
- fn test_inside_first_field() {
- let items = test_feature(
- BibtexFieldNameCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo,\nbar}")],
- main_file: "foo.bib",
- position: Position::new(1, 1),
- ..FeatureSpec::default()
- },
- );
- assert!(!items.is_empty());
- assert_eq!(
- items[0].text_edit.as_ref().map(|edit| edit.range),
- Some(Range::new_simple(1, 0, 1, 3))
- );
+ use crate::{feature::FeatureTester, protocol::Range};
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_fields(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_inside_second_field() {
- let items = test_feature(
- BibtexFieldNameCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.bib",
- "@article{foo, bar = {baz}, qux}",
- )],
- main_file: "foo.bib",
- position: Position::new(0, 27),
- ..FeatureSpec::default()
- },
- );
- assert!(!items.is_empty());
- assert_eq!(
- items[0].text_edit.as_ref().map(|edit| edit.range),
- Some(Range::new_simple(0, 27, 0, 30))
- );
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_fields(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_inside_entry() {
- let items = test_feature(
- BibtexFieldNameCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo, \n}")],
- main_file: "foo.bib",
- position: Position::new(1, 0),
- ..FeatureSpec::default()
- },
- );
- assert!(!items.is_empty());
- assert_eq!(
- items[0].text_edit.as_ref().map(|edit| edit.range),
- Some(Range::new_simple(1, 0, 1, 0))
- );
+ #[tokio::test]
+ async fn inside_first_field() {
+ let req = FeatureTester::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @article{foo,
+ bar}
+ "#
+ ),
+ )
+ .main("main.bib")
+ .position(1, 1)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_fields(&req, &mut actual_items).await;
+
+ assert!(!actual_items.is_empty());
+ assert_eq!(actual_items[0].range, Range::new_simple(1, 0, 1, 3));
}
- #[test]
- fn test_inside_content() {
- let items = test_feature(
- BibtexFieldNameCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo,\nbar = {baz}}")],
- main_file: "foo.bib",
- position: Position::new(1, 7),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
+ #[tokio::test]
+ async fn inside_second_field() {
+ let req = FeatureTester::new()
+ .file("main.bib", "@article{foo, bar = {baz}, qux}")
+ .main("main.bib")
+ .position(0, 27)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_fields(&req, &mut actual_items).await;
+
+ assert!(!actual_items.is_empty());
+ assert_eq!(actual_items[0].range, Range::new_simple(0, 27, 0, 30));
+ }
+
+ #[tokio::test]
+ async fn inside_entry() {
+ let req = FeatureTester::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @article{foo,
+ }
+ "#
+ ),
+ )
+ .main("main.bib")
+ .position(1, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_fields(&req, &mut actual_items).await;
+
+ assert!(!actual_items.is_empty());
+ assert_eq!(actual_items[0].range, Range::new_simple(1, 0, 1, 0));
}
- #[test]
- fn test_inside_entry_type() {
- let items = test_feature(
- BibtexFieldNameCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo,}")],
- main_file: "foo.bib",
- position: Position::new(0, 3),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
+ #[tokio::test]
+ async fn inside_content() {
+ let req = FeatureTester::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @article{foo,
+ bar = {baz}}
+ "#
+ ),
+ )
+ .main("main.bib")
+ .position(1, 7)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_fields(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- // TODO: Improve behavior of this provider
- //
- // #[test]
- // fn test_after_equals_sign() {
- // let items = test_feature(
- // BibtexFieldNameCompletionProvider,
- // FeatureSpec {
- // files: vec![FeatureSpec::file("foo.bib", "@article{foo, bar = \n}")],
- // main_file: "foo.bib",
- // position: Position::new(1, 0),
- // ..FeatureSpec::default()
- // },
- // );
- // assert!(items.is_empty());
- // }
-
- #[test]
- fn test_inside_latex() {
- let items = test_feature(
- BibtexFieldNameCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "@article{foo,}")],
- main_file: "foo.tex",
- position: Position::new(0, 3),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
+ #[tokio::test]
+ async fn inside_entry_type() {
+ let req = FeatureTester::new()
+ .file("main.bib", "@article{foo,}")
+ .main("main.bib")
+ .position(0, 3)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_bibtex_fields(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
}
diff --git a/support/texlab/src/completion/bibtex/mod.rs b/support/texlab/src/completion/bibtex/mod.rs
index 9117d7f266..96f3a94932 100644
--- a/support/texlab/src/completion/bibtex/mod.rs
+++ b/support/texlab/src/completion/bibtex/mod.rs
@@ -1,3 +1,3 @@
-pub mod command;
+pub mod cmd;
pub mod entry_type;
pub mod field_name;
diff --git a/support/texlab/src/completion/factory.rs b/support/texlab/src/completion/factory.rs
deleted file mode 100644
index a046665b48..0000000000
--- a/support/texlab/src/completion/factory.rs
+++ /dev/null
@@ -1,439 +0,0 @@
-use crate::formatting::bibtex::{self, BibtexFormattingParams};
-use crate::lsp_kind::Structure;
-use crate::syntax::*;
-use crate::workspace::*;
-use lsp_types::*;
-use once_cell::sync::Lazy;
-use regex::Regex;
-use serde::{Deserialize, Serialize};
-use std::path::Path;
-
-static WHITESPACE_REGEX: Lazy<Regex> = Lazy::new(|| Regex::new("\\s+").unwrap());
-
-#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
-#[serde(rename_all = "camelCase")]
-pub enum CompletionItemData {
- Command,
- CommandSnippet,
- Environment,
- Label,
- Folder,
- File,
- PgfLibrary,
- TikzLibrary,
- Color,
- ColorModel,
- Package,
- Class,
- EntryType,
- FieldName,
- Citation { uri: Uri, key: String },
- Argument,
- GlossaryEntry,
-}
-
-impl Into<serde_json::Value> for CompletionItemData {
- fn into(self) -> serde_json::Value {
- serde_json::to_value(self).unwrap()
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub enum LatexComponentId<'a> {
- User,
- Component(Vec<&'a str>),
-}
-
-impl<'a> LatexComponentId<'a> {
- pub fn kernel() -> Self {
- LatexComponentId::Component(vec![])
- }
-
- pub fn detail(&self) -> String {
- match self {
- LatexComponentId::User => "user-defined".to_owned(),
- LatexComponentId::Component(files) => {
- if files.is_empty() {
- "built-in".to_owned()
- } else {
- files.join(", ")
- }
- }
- }
- }
-}
-
-fn supports_images(request: &FeatureRequest<CompletionParams>) -> bool {
- request
- .client_capabilities
- .text_document
- .as_ref()
- .and_then(|cap| cap.completion.as_ref())
- .and_then(|cap| cap.completion_item.as_ref())
- .and_then(|cap| cap.documentation_format.as_ref())
- .map_or(true, |formats| formats.contains(&MarkupKind::Markdown))
-}
-
-pub fn command(
- request: &FeatureRequest<CompletionParams>,
- name: String,
- image: Option<&str>,
- glyph: Option<&str>,
- text_edit: TextEdit,
- component: &LatexComponentId,
-) -> CompletionItem {
- let detail = glyph.map_or_else(
- || component.detail(),
- |glyph| format!("{}, {}", glyph, component.detail()),
- );
- CompletionItem {
- kind: Some(adjust_kind(request, Structure::Command.completion_kind())),
- data: Some(CompletionItemData::Command.into()),
- documentation: image.and_then(|image| image_documentation(&request, &name, image)),
- text_edit: Some(text_edit),
- ..CompletionItem::new_simple(name, detail)
- }
-}
-
-pub fn command_snippet(
- request: &FeatureRequest<CompletionParams>,
- name: &'static str,
- image: Option<&str>,
- template: &'static str,
- component: &LatexComponentId,
-) -> CompletionItem {
- CompletionItem {
- kind: Some(adjust_kind(request, Structure::Snippet.completion_kind())),
- data: Some(CompletionItemData::CommandSnippet.into()),
- documentation: image.and_then(|image| image_documentation(&request, &name, image)),
- insert_text: Some(template.into()),
- insert_text_format: Some(InsertTextFormat::Snippet),
- ..CompletionItem::new_simple(name.into(), component.detail())
- }
-}
-
-pub fn environment(
- request: &FeatureRequest<CompletionParams>,
- name: String,
- text_edit: TextEdit,
- component: &LatexComponentId,
-) -> CompletionItem {
- CompletionItem {
- kind: Some(adjust_kind(
- request,
- Structure::Environment.completion_kind(),
- )),
- data: Some(CompletionItemData::Environment.into()),
- text_edit: Some(text_edit),
- ..CompletionItem::new_simple(name, component.detail())
- }
-}
-
-pub fn label(
- request: &FeatureRequest<CompletionParams>,
- name: String,
- text_edit: TextEdit,
- context: Option<&OutlineContext>,
-) -> CompletionItem {
- let kind = match context.as_ref().map(|ctx| &ctx.item) {
- Some(OutlineContextItem::Section { .. }) => Structure::Section.completion_kind(),
- Some(OutlineContextItem::Caption { .. }) => Structure::Float.completion_kind(),
- Some(OutlineContextItem::Theorem { .. }) => Structure::Theorem.completion_kind(),
- Some(OutlineContextItem::Equation) => Structure::Equation.completion_kind(),
- Some(OutlineContextItem::Item) => Structure::Item.completion_kind(),
- None => Structure::Label.completion_kind(),
- };
-
- let detail = context.as_ref().and_then(|ctx| ctx.detail());
-
- let filter_text = context
- .as_ref()
- .map(|ctx| format!("{} {}", name, ctx.reference()));
-
- let documentation = context
- .and_then(|ctx| match &ctx.item {
- OutlineContextItem::Caption { text, .. } => Some(text.clone()),
- _ => None,
- })
- .map(Documentation::String);
-
- CompletionItem {
- label: name,
- kind: Some(adjust_kind(request, kind)),
- data: Some(CompletionItemData::Label.into()),
- text_edit: Some(text_edit),
- filter_text,
- detail,
- documentation,
- ..CompletionItem::default()
- }
-}
-
-pub fn folder(
- request: &FeatureRequest<CompletionParams>,
- path: &Path,
- text_edit: TextEdit,
-) -> CompletionItem {
- CompletionItem {
- label: path.file_name().unwrap().to_string_lossy().into_owned(),
- kind: Some(adjust_kind(request, Structure::Folder.completion_kind())),
- data: Some(CompletionItemData::Folder.into()),
- text_edit: Some(text_edit),
- ..CompletionItem::default()
- }
-}
-
-pub fn file(
- request: &FeatureRequest<CompletionParams>,
- path: &Path,
- text_edit: TextEdit,
-) -> CompletionItem {
- CompletionItem {
- label: path.file_name().unwrap().to_string_lossy().into_owned(),
- kind: Some(adjust_kind(request, Structure::File.completion_kind())),
- data: Some(CompletionItemData::File.into()),
- text_edit: Some(text_edit),
- ..CompletionItem::default()
- }
-}
-
-pub fn pgf_library(
- request: &FeatureRequest<CompletionParams>,
- name: &'static str,
- text_edit: TextEdit,
-) -> CompletionItem {
- CompletionItem {
- label: name.into(),
- kind: Some(adjust_kind(
- request,
- Structure::PgfLibrary.completion_kind(),
- )),
- data: Some(CompletionItemData::PgfLibrary.into()),
- text_edit: Some(text_edit),
- ..CompletionItem::default()
- }
-}
-
-pub fn tikz_library(
- request: &FeatureRequest<CompletionParams>,
- name: &'static str,
- text_edit: TextEdit,
-) -> CompletionItem {
- CompletionItem {
- label: name.into(),
- kind: Some(adjust_kind(
- request,
- Structure::TikzLibrary.completion_kind(),
- )),
- data: Some(CompletionItemData::TikzLibrary.into()),
- text_edit: Some(text_edit),
- ..CompletionItem::default()
- }
-}
-
-pub fn color(
- request: &FeatureRequest<CompletionParams>,
- name: &'static str,
- text_edit: TextEdit,
-) -> CompletionItem {
- CompletionItem {
- label: name.into(),
- kind: Some(adjust_kind(request, Structure::Color.completion_kind())),
- data: Some(CompletionItemData::Color.into()),
- text_edit: Some(text_edit),
- ..CompletionItem::default()
- }
-}
-
-pub fn color_model(
- request: &FeatureRequest<CompletionParams>,
- name: &'static str,
- text_edit: TextEdit,
-) -> CompletionItem {
- CompletionItem {
- label: name.into(),
- kind: Some(adjust_kind(
- request,
- Structure::ColorModel.completion_kind(),
- )),
- data: Some(CompletionItemData::ColorModel.into()),
- text_edit: Some(text_edit),
- ..CompletionItem::default()
- }
-}
-
-pub fn package(
- request: &FeatureRequest<CompletionParams>,
- name: &'static str,
- text_edit: TextEdit,
-) -> CompletionItem {
- CompletionItem {
- label: name.into(),
- kind: Some(adjust_kind(request, Structure::Package.completion_kind())),
- data: Some(CompletionItemData::Package.into()),
- text_edit: Some(text_edit),
- ..CompletionItem::default()
- }
-}
-
-pub fn class(
- request: &FeatureRequest<CompletionParams>,
- name: &'static str,
- text_edit: TextEdit,
-) -> CompletionItem {
- CompletionItem {
- label: name.into(),
- kind: Some(adjust_kind(request, Structure::Class.completion_kind())),
- data: Some(CompletionItemData::Class.into()),
- text_edit: Some(text_edit),
- ..CompletionItem::default()
- }
-}
-
-pub fn citation(
- request: &FeatureRequest<CompletionParams>,
- uri: Uri,
- entry: &BibtexEntry,
- key: String,
- text_edit: TextEdit,
-) -> CompletionItem {
- let params = BibtexFormattingParams::default();
- let entry_code = bibtex::format_entry(&entry, &params);
- let filter_text = format!(
- "{} {}",
- &key,
- WHITESPACE_REGEX
- .replace_all(
- &entry_code
- .replace('{', "")
- .replace('}', "")
- .replace(',', " ")
- .replace('=', " "),
- " ",
- )
- .trim()
- );
-
- let kind = LANGUAGE_DATA
- .find_entry_type(&entry.ty.text()[1..])
- .map(|ty| Structure::Entry(ty.category).completion_kind())
- .unwrap_or_else(|| Structure::Entry(BibtexEntryTypeCategory::Misc).completion_kind());
-
- CompletionItem {
- label: key.to_owned(),
- kind: Some(adjust_kind(request, kind)),
- filter_text: Some(filter_text),
- data: Some(CompletionItemData::Citation { uri, key }.into()),
- text_edit: Some(text_edit),
- ..CompletionItem::default()
- }
-}
-
-pub fn entry_type(
- request: &FeatureRequest<CompletionParams>,
- ty: &BibtexEntryTypeDoc,
- text_edit: TextEdit,
-) -> CompletionItem {
- let kind = Structure::Entry(ty.category).completion_kind();
- CompletionItem {
- label: (&ty.name).into(),
- kind: Some(adjust_kind(request, kind)),
- data: Some(CompletionItemData::EntryType.into()),
- text_edit: Some(text_edit),
- documentation: ty.documentation.as_ref().map(|doc| {
- Documentation::MarkupContent(MarkupContent {
- kind: MarkupKind::Markdown,
- value: doc.into(),
- })
- }),
- ..CompletionItem::default()
- }
-}
-
-pub fn field_name(
- request: &FeatureRequest<CompletionParams>,
- field: &'static BibtexFieldDoc,
- text_edit: TextEdit,
-) -> CompletionItem {
- CompletionItem {
- label: (&field.name).into(),
- kind: Some(adjust_kind(request, Structure::Field.completion_kind())),
- data: Some(CompletionItemData::FieldName.into()),
- text_edit: Some(text_edit),
- documentation: Some(Documentation::MarkupContent(MarkupContent {
- kind: MarkupKind::Markdown,
- value: (&field.documentation).into(),
- })),
- ..CompletionItem::default()
- }
-}
-
-pub fn argument(
- request: &FeatureRequest<CompletionParams>,
- name: &'static str,
- text_edit: TextEdit,
- image: Option<&str>,
-) -> CompletionItem {
- CompletionItem {
- label: name.into(),
- kind: Some(adjust_kind(request, Structure::Argument.completion_kind())),
- data: Some(CompletionItemData::Argument.into()),
- text_edit: Some(text_edit),
- documentation: image.and_then(|image| image_documentation(&request, &name, image)),
- ..CompletionItem::default()
- }
-}
-
-pub fn glossary_entry(
- request: &FeatureRequest<CompletionParams>,
- label: String,
- text_edit: TextEdit,
-) -> CompletionItem {
- CompletionItem {
- label,
- kind: Some(adjust_kind(
- request,
- Structure::GlossaryEntry.completion_kind(),
- )),
- data: Some(CompletionItemData::GlossaryEntry.into()),
- text_edit: Some(text_edit),
- ..CompletionItem::default()
- }
-}
-
-fn image_documentation(
- request: &FeatureRequest<CompletionParams>,
- name: &str,
- image: &str,
-) -> Option<Documentation> {
- if supports_images(request) {
- Some(Documentation::MarkupContent(MarkupContent {
- kind: MarkupKind::Markdown,
- value: format!(
- "![{}](data:image/png;base64,{}|width=48,height=48)",
- name, image
- ),
- }))
- } else {
- None
- }
-}
-
-fn adjust_kind(
- request: &FeatureRequest<CompletionParams>,
- kind: CompletionItemKind,
-) -> CompletionItemKind {
- if let Some(value_set) = request
- .client_capabilities
- .text_document
- .as_ref()
- .and_then(|cap| cap.completion.as_ref())
- .and_then(|cap| cap.completion_item_kind.as_ref())
- .and_then(|cap| cap.value_set.as_ref())
- {
- if value_set.contains(&kind) {
- return kind;
- }
- }
- CompletionItemKind::Text
-}
diff --git a/support/texlab/src/completion/latex/argument.rs b/support/texlab/src/completion/latex/argument.rs
index db05bca824..5736099ca6 100644
--- a/support/texlab/src/completion/latex/argument.rs
+++ b/support/texlab/src/completion/latex/argument.rs
@@ -1,44 +1,204 @@
use super::combinators::{self, Parameter};
-use crate::completion::factory;
-use crate::completion::DATABASE;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
+use crate::{
+ completion::types::{Item, ItemData},
+ feature::FeatureRequest,
+ protocol::CompletionParams,
+};
use std::iter;
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub async fn complete_latex_arguments<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ for comp in req.view.components() {
+ for cmd in &comp.commands {
+ for (i, param) in cmd.parameters.iter().enumerate() {
+ complete_internal(req, items, &cmd.name, i, param).await;
+ }
+ }
+ }
+}
+
+async fn complete_internal<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+ name: &'a str,
+ index: usize,
+ param: &'a crate::components::Parameter,
+) {
+ combinators::argument(
+ req,
+ iter::once(Parameter { name, index }),
+ |ctx| async move {
+ for arg in &param.0 {
+ let item = Item::new(
+ ctx.range,
+ ItemData::Argument {
+ name: &arg.name,
+ image: arg.image.as_deref(),
+ },
+ );
+ items.push(item);
+ }
+ },
+ )
+ .await;
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::{
+ feature::FeatureTester,
+ protocol::{Range, RangeExt},
+ };
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_arguments(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_arguments(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn inside_mathbb_empty() {
+ let req = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \usepackage{amsfonts}
+ \mathbb{}
+ "#
+ ),
+ )
+ .main("main.tex")
+ .position(1, 8)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_arguments(&req, &mut actual_items).await;
+
+ assert!(!actual_items.is_empty());
+ assert_eq!(actual_items[0].range, Range::new_simple(1, 8, 1, 8));
+ }
+
+ #[tokio::test]
+ async fn inside_mathbb_non_empty() {
+ let req = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \usepackage{amsfonts}
+ \mathbb{foo}
+ "#
+ ),
+ )
+ .main("main.tex")
+ .position(1, 8)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_arguments(&req, &mut actual_items).await;
+
+ assert!(!actual_items.is_empty());
+ assert_eq!(actual_items[0].range, Range::new_simple(1, 8, 1, 11));
+ }
+
+ #[tokio::test]
+ async fn outside_mathbb_empty() {
+ let req = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \usepackage{amsfonts}
+ \mathbb{}
+ "#
+ ),
+ )
+ .main("main.tex")
+ .position(1, 9)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_arguments(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+}
+
+/*
+use super::combinators::{self, Parameter};
+use crate::{
+ completion::factory,
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{CompletionItem, CompletionParams, TextEdit},
+};
+use async_trait::async_trait;
+use std::iter;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
pub struct LatexArgumentCompletionProvider;
+#[async_trait]
impl FeatureProvider for LatexArgumentCompletionProvider {
type Params = CompletionParams;
type Output = Vec<CompletionItem>;
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
let mut all_items = Vec::new();
- for component in DATABASE.related_components(request.related_documents()) {
- for command in &component.commands {
- let name = format!("\\{}", command.name);
- for (i, parameter) in command.parameters.iter().enumerate() {
+ for comp in req.view.components() {
+ for cmd in &comp.commands {
+ let name = format!("\\{}", cmd.name);
+ for (i, param) in cmd.parameters.iter().enumerate() {
let mut items = combinators::argument(
- request,
- iter::once(Parameter::new(&name, i)),
- |context| {
- async move {
- let mut items = Vec::new();
- for argument in &parameter.0 {
- let text_edit =
- TextEdit::new(context.range, (&argument.name).into());
- let item = factory::argument(
- request,
- &argument.name,
- text_edit,
- argument.image.as_ref().map(AsRef::as_ref),
- );
- items.push(item);
- }
- items
+ req,
+ iter::once(Parameter {
+ name: &name,
+ index: i,
+ }),
+ |ctx| async move {
+ let mut items = Vec::new();
+ for arg in &param.0 {
+ let text_edit = TextEdit::new(ctx.range, (&arg.name).into());
+ let item = factory::argument(
+ req,
+ &arg.name,
+ text_edit,
+ arg.image.as_ref().map(AsRef::as_ref),
+ );
+ items.push(item);
}
+ items
},
)
.await;
@@ -50,68 +210,6 @@ impl FeatureProvider for LatexArgumentCompletionProvider {
}
}
-#[cfg(test)]
-mod tests {
- use super::*;
- use crate::range::RangeExt;
- use lsp_types::{Position, Range};
-
- #[test]
- fn test_inside_mathbb_empty() {
- let items = test_feature(
- LatexArgumentCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.tex",
- "\\usepackage{amsfonts}\n\\mathbb{}",
- )],
- main_file: "foo.tex",
- position: Position::new(1, 8),
- ..FeatureSpec::default()
- },
- );
- assert!(!items.is_empty());
- assert_eq!(
- items[0].text_edit.as_ref().map(|edit| edit.range),
- Some(Range::new_simple(1, 8, 1, 8))
- );
- }
- #[test]
- fn test_inside_mathbb_non_empty() {
- let items = test_feature(
- LatexArgumentCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.tex",
- "\\usepackage{amsfonts}\n\\mathbb{foo}",
- )],
- main_file: "foo.tex",
- position: Position::new(1, 8),
- ..FeatureSpec::default()
- },
- );
- assert!(!items.is_empty());
- assert_eq!(
- items[0].text_edit.as_ref().map(|edit| edit.range),
- Some(Range::new_simple(1, 8, 1, 11))
- );
- }
- #[test]
- fn test_outside_mathbb() {
- let items = test_feature(
- LatexArgumentCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.tex",
- "\\usepackage{amsfonts}\n\\mathbb{}",
- )],
- main_file: "foo.tex",
- position: Position::new(1, 9),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
- }
-}
+*/
diff --git a/support/texlab/src/completion/latex/begin_cmd.rs b/support/texlab/src/completion/latex/begin_cmd.rs
new file mode 100644
index 0000000000..44e7a4f60d
--- /dev/null
+++ b/support/texlab/src/completion/latex/begin_cmd.rs
@@ -0,0 +1,70 @@
+use super::combinators;
+use crate::{
+ completion::types::{Item, ItemData},
+ feature::FeatureRequest,
+ protocol::CompletionParams,
+};
+
+pub async fn complete_latex_begin_command<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ combinators::command(req, |cmd_node| async move {
+ let table = req.current().content.as_latex().unwrap();
+ let cmd = table.as_command(cmd_node).unwrap();
+ let range = cmd.short_name_range();
+ items.push(Item::new(range, ItemData::BeginCommand));
+ })
+ .await;
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::feature::FeatureTester;
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_begin_command(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_begin_command(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn after_backslash() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\"#)
+ .main("main.tex")
+ .position(0, 1)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_begin_command(&req, &mut actual_items).await;
+
+ assert_eq!(actual_items.len(), 1);
+ }
+}
diff --git a/support/texlab/src/completion/latex/begin_command.rs b/support/texlab/src/completion/latex/begin_command.rs
deleted file mode 100644
index ce6ba17afa..0000000000
--- a/support/texlab/src/completion/latex/begin_command.rs
+++ /dev/null
@@ -1,30 +0,0 @@
-use super::combinators;
-use crate::completion::factory::{self, LatexComponentId};
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{CompletionItem, CompletionParams};
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexBeginCommandCompletionProvider;
-
-impl FeatureProvider for LatexBeginCommandCompletionProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- combinators::command(request, |_| {
- async move {
- let snippet = factory::command_snippet(
- request,
- "begin",
- None,
- "begin{$1}\n\t$0\n\\end{$1}",
- &LatexComponentId::kernel(),
- );
- vec![snippet]
- }
- })
- .await
- }
-}
diff --git a/support/texlab/src/completion/latex/citation.rs b/support/texlab/src/completion/latex/citation.rs
index a217c24bff..3e7b1851d1 100644
--- a/support/texlab/src/completion/latex/citation.rs
+++ b/support/texlab/src/completion/latex/citation.rs
@@ -1,144 +1,261 @@
-use super::combinators::{self, Parameter};
-use crate::completion::factory;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{CompletionItem, CompletionParams, TextEdit};
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexCitationCompletionProvider;
-
-impl FeatureProvider for LatexCitationCompletionProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- let parameters = LANGUAGE_DATA
- .citation_commands
- .iter()
- .map(|cmd| Parameter::new(&cmd.name, cmd.index));
-
- combinators::argument(request, parameters, |context| {
- async move {
- let mut items = Vec::new();
- for document in request.related_documents() {
- if let SyntaxTree::Bibtex(tree) = &document.tree {
- for entry in &tree.entries() {
- if !entry.is_comment() {
- if let Some(key) = &entry.key {
- let key = key.text().to_owned();
- let text_edit = TextEdit::new(context.range, key.clone());
- let item = factory::citation(
- request,
- document.uri.clone(),
- entry,
- key,
- text_edit,
- );
- items.push(item);
- }
- }
- }
+use super::combinators::{self, ArgumentContext, Parameter};
+use crate::{
+ completion::types::{Item, ItemData},
+ feature::FeatureRequest,
+ protocol::{BibtexFormattingOptions, CompletionParams},
+ syntax::{bibtex, BibtexEntryTypeCategory, Structure, LANGUAGE_DATA},
+ workspace::{Document, DocumentContent},
+};
+use once_cell::sync::Lazy;
+use petgraph::graph::NodeIndex;
+use regex::Regex;
+
+pub async fn complete_latex_citations<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ let parameters = LANGUAGE_DATA.citation_commands.iter().map(|cmd| Parameter {
+ name: &cmd.name[1..],
+ index: cmd.index,
+ });
+
+ combinators::argument(req, parameters, |ctx| async move {
+ for doc in req.related() {
+ if let DocumentContent::Bibtex(tree) = &doc.content {
+ for entry_node in tree.children(tree.root) {
+ if let Some(item) = make_item(ctx, doc, tree, entry_node) {
+ items.push(item);
}
}
- items
}
- })
- .await
+ }
+ })
+ .await;
+}
+
+fn make_item<'a>(
+ ctx: ArgumentContext,
+ doc: &'a Document,
+ tree: &'a bibtex::Tree,
+ entry_node: NodeIndex,
+) -> Option<Item<'a>> {
+ let entry = tree.as_entry(entry_node)?;
+ if entry.is_comment() {
+ return None;
}
+
+ let key = entry.key.as_ref()?.text();
+ let options = BibtexFormattingOptions::default();
+ let params = bibtex::FormattingParams {
+ insert_spaces: true,
+ tab_size: 4,
+ options: &options,
+ };
+ let entry_code = bibtex::format(tree, entry_node, params);
+ let text = format!(
+ "{} {}",
+ &key,
+ WHITESPACE_REGEX
+ .replace_all(
+ &entry_code
+ .replace('{', "")
+ .replace('}', "")
+ .replace(',', " ")
+ .replace('=', " "),
+ " ",
+ )
+ .trim()
+ );
+
+ let ty = LANGUAGE_DATA
+ .find_entry_type(&entry.ty.text()[1..])
+ .map(|ty| Structure::Entry(ty.category))
+ .unwrap_or_else(|| Structure::Entry(BibtexEntryTypeCategory::Misc));
+
+ let item = Item::new(
+ ctx.range,
+ ItemData::Citation {
+ uri: &doc.uri,
+ key,
+ text,
+ ty,
+ },
+ );
+ Some(item)
}
+static WHITESPACE_REGEX: Lazy<Regex> = Lazy::new(|| Regex::new("\\s+").unwrap());
+
#[cfg(test)]
mod tests {
use super::*;
- use crate::range::RangeExt;
- use lsp_types::{Position, Range};
-
- #[test]
- fn test_empty() {
- let items = test_feature(
- LatexCitationCompletionProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\addbibresource{bar.bib}\n\\cite{}"),
- FeatureSpec::file("bar.bib", "@article{foo,}"),
- FeatureSpec::file("baz.bib", "@article{bar,}"),
- ],
- main_file: "foo.tex",
- position: Position::new(1, 6),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(items.len(), 1);
- assert_eq!(items[0].label, "foo");
- assert_eq!(
- items[0].text_edit.as_ref().map(|edit| edit.range),
- Some(Range::new_simple(1, 6, 1, 6))
- );
+ use crate::{
+ feature::FeatureTester,
+ protocol::{Range, RangeExt},
+ };
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_citations(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_single_key() {
- let items = test_feature(
- LatexCitationCompletionProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\addbibresource{bar.bib}\n\\cite{foo}"),
- FeatureSpec::file("bar.bib", "@article{foo,}"),
- FeatureSpec::file("baz.bib", "@article{bar,}"),
- ],
- main_file: "foo.tex",
- position: Position::new(1, 6),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(items.len(), 1);
- assert_eq!(items[0].label, "foo");
- assert_eq!(
- items[0].text_edit.as_ref().map(|edit| edit.range),
- Some(Range::new_simple(1, 6, 1, 9))
- );
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_citations(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_second_key() {
- let items = test_feature(
- LatexCitationCompletionProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\addbibresource{bar.bib}\n\\cite{foo,}"),
- FeatureSpec::file("bar.bib", "@article{foo,}"),
- FeatureSpec::file("baz.bib", "@article{bar,}"),
- ],
- main_file: "foo.tex",
- position: Position::new(1, 10),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(items.len(), 1);
- assert_eq!(items[0].label, "foo");
- assert_eq!(
- items[0].text_edit.as_ref().map(|edit| edit.range),
- Some(Range::new_simple(1, 10, 1, 10))
- );
+ #[tokio::test]
+ async fn incomplete() {
+ let req = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \addbibresource{main.bib}
+ \cite{
+ \begin{foo}
+ \end{bar}
+ "#
+ ),
+ )
+ .file("main.bib", "@article{foo,}")
+ .main("main.tex")
+ .position(1, 6)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_citations(&req, &mut actual_items).await;
+
+ assert_eq!(actual_items.len(), 1);
+ assert_eq!(actual_items[0].data.label(), "foo");
+ assert_eq!(actual_items[0].range, Range::new_simple(1, 6, 1, 6));
}
- #[test]
- fn test_outside_cite() {
- let items = test_feature(
- LatexCitationCompletionProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\addbibresource{bar.bib}\n\\cite{}"),
- FeatureSpec::file("bar.bib", "@article{foo,}"),
- FeatureSpec::file("baz.bib", "@article{bar,}"),
- ],
- main_file: "foo.tex",
- position: Position::new(1, 7),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
+ #[tokio::test]
+ async fn empty_key() {
+ let req = FeatureTester::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \addbibresource{bar.bib}
+ \cite{}
+ "#
+ ),
+ )
+ .file("bar.bib", "@article{foo,}")
+ .file("baz.bib", "@article{bar,}")
+ .main("foo.tex")
+ .position(1, 6)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_citations(&req, &mut actual_items).await;
+
+ assert_eq!(actual_items.len(), 1);
+ assert_eq!(actual_items[0].data.label(), "foo");
+ assert_eq!(actual_items[0].range, Range::new_simple(1, 6, 1, 6));
+ }
+
+ #[tokio::test]
+ async fn single_key() {
+ let req = FeatureTester::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \addbibresource{bar.bib}
+ \cite{foo}
+ "#
+ ),
+ )
+ .file("bar.bib", "@article{foo,}")
+ .file("baz.bib", "@article{bar,}")
+ .main("foo.tex")
+ .position(1, 6)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_citations(&req, &mut actual_items).await;
+
+ assert_eq!(actual_items.len(), 1);
+ assert_eq!(actual_items[0].data.label(), "foo");
+ assert_eq!(actual_items[0].range, Range::new_simple(1, 6, 1, 9));
+ }
+
+ #[tokio::test]
+ async fn second_key() {
+ let req = FeatureTester::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \addbibresource{bar.bib}
+ \cite{foo,}
+ "#
+ ),
+ )
+ .file("bar.bib", "@article{foo,}")
+ .file("baz.bib", "@article{bar,}")
+ .main("foo.tex")
+ .position(1, 10)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_citations(&req, &mut actual_items).await;
+
+ assert_eq!(actual_items.len(), 1);
+ assert_eq!(actual_items[0].data.label(), "foo");
+ assert_eq!(actual_items[0].range, Range::new_simple(1, 10, 1, 10));
+ }
+
+ #[tokio::test]
+ async fn outside_cite() {
+ let req = FeatureTester::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \addbibresource{bar.bib}
+ \cite{}
+ "#
+ ),
+ )
+ .file("bar.bib", "@article{foo,}")
+ .file("baz.bib", "@article{bar,}")
+ .main("foo.tex")
+ .position(1, 7)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_citations(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
}
diff --git a/support/texlab/src/completion/latex/color.rs b/support/texlab/src/completion/latex/color.rs
index b2d390b7d8..93b06b178e 100644
--- a/support/texlab/src/completion/latex/color.rs
+++ b/support/texlab/src/completion/latex/color.rs
@@ -1,74 +1,91 @@
use super::combinators::{self, Parameter};
-use crate::completion::factory;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{CompletionItem, CompletionParams, TextEdit};
+use crate::{
+ completion::types::{Item, ItemData},
+ feature::FeatureRequest,
+ protocol::CompletionParams,
+ syntax::LANGUAGE_DATA,
+};
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexColorCompletionProvider;
+pub async fn complete_latex_colors<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ let parameters = LANGUAGE_DATA.color_commands.iter().map(|cmd| Parameter {
+ name: &cmd.name[1..],
+ index: cmd.index,
+ });
-impl FeatureProvider for LatexColorCompletionProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- let parameters = LANGUAGE_DATA
- .color_commands
- .iter()
- .map(|cmd| Parameter::new(&cmd.name, cmd.index));
-
- combinators::argument(request, parameters, |context| {
- async move {
- let mut items = Vec::new();
- for name in &LANGUAGE_DATA.colors {
- let text_edit = TextEdit::new(context.range, name.into());
- let item = factory::color(request, name, text_edit);
- items.push(item);
- }
- items
- }
- })
- .await
- }
+ combinators::argument(req, parameters, |ctx| async move {
+ for name in &LANGUAGE_DATA.colors {
+ let item = Item::new(ctx.range, ItemData::Color { name });
+ items.push(item);
+ }
+ })
+ .await;
}
#[cfg(test)]
mod tests {
use super::*;
- use crate::range::RangeExt;
- use lsp_types::{Position, Range};
+ use crate::{
+ feature::FeatureTester,
+ protocol::{Range, RangeExt},
+ };
- #[test]
- fn test_inside_color() {
- let items = test_feature(
- LatexColorCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\color{}")],
- main_file: "foo.tex",
- position: Position::new(0, 7),
- ..FeatureSpec::default()
- },
- );
- assert!(!items.is_empty());
- assert_eq!(
- items[0].text_edit.as_ref().map(|edit| edit.range),
- Some(Range::new_simple(0, 7, 0, 7))
- );
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+ complete_latex_colors(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_outside_color() {
- let items = test_feature(
- LatexColorCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\color{}")],
- main_file: "foo.tex",
- position: Position::new(0, 8),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+ complete_latex_colors(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn inside_color() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\color{}"#)
+ .main("main.tex")
+ .position(0, 7)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+ complete_latex_colors(&req, &mut actual_items).await;
+
+ assert!(!actual_items.is_empty());
+ assert_eq!(actual_items[0].range, Range::new_simple(0, 7, 0, 7));
+ }
+
+ #[tokio::test]
+ async fn inside_define_color_set() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\color{}"#)
+ .main("main.tex")
+ .position(0, 8)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+ complete_latex_colors(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
}
diff --git a/support/texlab/src/completion/latex/color_model.rs b/support/texlab/src/completion/latex/color_model.rs
index 5b6e85fa31..e0151da2f0 100644
--- a/support/texlab/src/completion/latex/color_model.rs
+++ b/support/texlab/src/completion/latex/color_model.rs
@@ -1,94 +1,101 @@
use super::combinators::{self, Parameter};
-use crate::completion::factory;
-use crate::syntax::LANGUAGE_DATA;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{CompletionItem, CompletionParams, TextEdit};
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexColorModelCompletionProvider;
-
-impl FeatureProvider for LatexColorModelCompletionProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- let parameters = LANGUAGE_DATA
- .color_model_commands
- .iter()
- .map(|cmd| Parameter::new(&cmd.name, cmd.index));
-
- combinators::argument(&request, parameters, |context| {
- async move {
- let mut items = Vec::new();
- for name in MODEL_NAMES {
- let text_edit = TextEdit::new(context.range, (*name).into());
- let item = factory::color_model(request, name, text_edit);
- items.push(item);
- }
- items
- }
- })
- .await
- }
-}
+use crate::{
+ completion::types::{Item, ItemData},
+ feature::FeatureRequest,
+ protocol::CompletionParams,
+ syntax::LANGUAGE_DATA,
+};
const MODEL_NAMES: &[&str] = &["gray", "rgb", "RGB", "HTML", "cmyk"];
+pub async fn complete_latex_color_models<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ let parameters = LANGUAGE_DATA
+ .color_model_commands
+ .iter()
+ .map(|cmd| Parameter {
+ name: &cmd.name[1..],
+ index: cmd.index,
+ });
+
+ combinators::argument(req, parameters, |ctx| async move {
+ for name in MODEL_NAMES {
+ let item = Item::new(ctx.range, ItemData::ColorModel { name });
+ items.push(item);
+ }
+ })
+ .await;
+}
+
#[cfg(test)]
mod tests {
use super::*;
- use crate::range::RangeExt;
- use lsp_types::{Position, Range};
-
- #[test]
- fn test_inside_define_color() {
- let items = test_feature(
- LatexColorModelCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\definecolor{name}{}")],
- main_file: "foo.tex",
- position: Position::new(0, 19),
- ..FeatureSpec::default()
- },
- );
- assert!(!items.is_empty());
- assert_eq!(
- items[0].text_edit.as_ref().map(|edit| edit.range),
- Some(Range::new_simple(0, 19, 0, 19))
- );
+ use crate::{
+ feature::FeatureTester,
+ protocol::{Range, RangeExt},
+ };
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_color_models(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_outside_define_color() {
- let items = test_feature(
- LatexColorModelCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\definecolor{name}{}")],
- main_file: "foo.tex",
- position: Position::new(0, 18),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_color_models(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn inside_define_color() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\definecolor{name}{}"#)
+ .main("main.tex")
+ .position(0, 19)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_color_models(&req, &mut actual_items).await;
+
+ assert!(!actual_items.is_empty());
+ assert_eq!(actual_items[0].range, Range::new_simple(0, 19, 0, 19));
}
- #[test]
- fn tet_inside_define_color_set() {
- let items = test_feature(
- LatexColorModelCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\definecolorset{}")],
- main_file: "foo.tex",
- position: Position::new(0, 16),
- ..FeatureSpec::default()
- },
- );
- assert!(!items.is_empty());
- assert_eq!(
- items[0].text_edit.as_ref().map(|edit| edit.range),
- Some(Range::new_simple(0, 16, 0, 16))
- );
+ #[tokio::test]
+ async fn inside_define_color_set() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\definecolorset{}"#)
+ .main("main.tex")
+ .position(0, 16)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_color_models(&req, &mut actual_items).await;
+
+ assert!(!actual_items.is_empty());
+ assert_eq!(actual_items[0].range, Range::new_simple(0, 16, 0, 16));
}
}
diff --git a/support/texlab/src/completion/latex/combinators.rs b/support/texlab/src/completion/latex/combinators.rs
index 74337f85b6..d8ef336421 100644
--- a/support/texlab/src/completion/latex/combinators.rs
+++ b/support/texlab/src/completion/latex/combinators.rs
@@ -1,9 +1,10 @@
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use lsp_types::*;
+use crate::{
+ feature::FeatureRequest,
+ protocol::{CompletionParams, Position, Range, RangeExt},
+ syntax::{latex, AstNodeIndex, SyntaxNode, LANGUAGE_DATA},
+ workspace::DocumentContent,
+};
use std::future::Future;
-use std::sync::Arc;
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub struct Parameter<'a> {
@@ -11,142 +12,132 @@ pub struct Parameter<'a> {
pub index: usize,
}
-impl<'a> Parameter<'a> {
- pub fn new(name: &'a str, index: usize) -> Self {
- Self { name, index }
- }
-}
-
-pub async fn command<E, F>(
- request: &FeatureRequest<CompletionParams>,
- execute: E,
-) -> Vec<CompletionItem>
+pub async fn command<E, F>(req: &FeatureRequest<CompletionParams>, execute: E)
where
- E: FnOnce(Arc<LatexCommand>) -> F,
- F: Future<Output = Vec<CompletionItem>>,
+ E: FnOnce(AstNodeIndex) -> F,
+ F: Future<Output = ()>,
{
- if let SyntaxTree::Latex(tree) = &request.document().tree {
- if let Some(command) =
- tree.find_command_by_name(request.params.text_document_position.position)
- {
- return execute(command).await;
+ if let DocumentContent::Latex(table) = &req.current().content {
+ let pos = req.params.text_document_position.position;
+ if let Some(cmd) = table.find_command_by_short_name_range(pos) {
+ execute(cmd).await;
}
}
- Vec::new()
}
-#[derive(Debug, PartialEq, Eq, Clone)]
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub struct ArgumentContext<'a> {
pub parameter: Parameter<'a>,
- pub command: Arc<LatexCommand>,
+ pub node: AstNodeIndex,
pub range: Range,
}
pub async fn argument<'a, I, E, F>(
- request: &'a FeatureRequest<CompletionParams>,
+ req: &'a FeatureRequest<CompletionParams>,
mut parameters: I,
execute: E,
-) -> Vec<CompletionItem>
-where
+) where
I: Iterator<Item = Parameter<'a>>,
E: FnOnce(ArgumentContext<'a>) -> F,
- F: Future<Output = Vec<CompletionItem>>,
+ F: Future<Output = ()>,
{
- if let SyntaxTree::Latex(tree) = &request.document().tree {
- let position = request.params.text_document_position.position;
- if let Some(command) = find_command(tree, position) {
- for parameter in parameters.by_ref() {
- if command.name.text() != parameter.name {
- continue;
- }
-
- if let Some(args) = command.args.get(parameter.index) {
- if args.right.is_some() && !args.range().contains_exclusive(position) {
+ if let DocumentContent::Latex(table) = &req.current().content {
+ let pos = req.params.text_document_position.position;
+ if let Some(node) = find_command(&table, pos) {
+ let cmd = table.as_command(node).unwrap();
+ for parameter in parameters
+ .by_ref()
+ .filter(|param| param.name == &cmd.name.text()[1..])
+ {
+ if let Some(args_node) =
+ table.extract_group(node, latex::GroupKind::Group, parameter.index)
+ {
+ let args = table.as_group(args_node).unwrap();
+ if args.right.is_some() && !args.range().contains_exclusive(pos) {
continue;
}
- let mut range = None;
- for child in &args.children {
- if let LatexContent::Text(text) = &child {
- for word in &text.words {
- if word.range().contains(position) {
- range = Some(word.range());
- break;
- }
- }
- }
- }
- let text_range = range.unwrap_or_else(|| Range::new(position, position));
+ let range = table
+ .children(args_node)
+ .filter_map(|child| table.as_text(child))
+ .flat_map(|text| text.words.iter())
+ .map(|word| word.range())
+ .find(|range| range.contains(pos))
+ .unwrap_or_else(|| Range::new(pos, pos));
+
let context = ArgumentContext {
parameter,
- command: Arc::clone(&command),
- range: text_range,
+ node,
+ range,
};
- return execute(context).await;
+ execute(context).await;
+ return;
}
}
}
}
- Vec::new()
}
pub async fn argument_word<'a, I, E, F>(
- request: &'a FeatureRequest<CompletionParams>,
+ req: &'a FeatureRequest<CompletionParams>,
mut parameters: I,
execute: E,
-) -> Vec<CompletionItem>
-where
+) where
I: Iterator<Item = Parameter<'a>>,
- E: FnOnce(Arc<LatexCommand>, usize) -> F,
- F: Future<Output = Vec<CompletionItem>>,
+ E: FnOnce(AstNodeIndex, usize) -> F,
+ F: Future<Output = ()>,
{
- if let SyntaxTree::Latex(tree) = &request.document().tree {
- let position = request.params.text_document_position.position;
- if let Some(command) = find_command(tree, position) {
- for parameter in parameters.by_ref() {
- if command.name.text() != parameter.name {
- continue;
- }
-
- if let Some(args) = command.args.get(parameter.index) {
- if args.right.is_some() && !args.range().contains_exclusive(position) {
+ if let DocumentContent::Latex(table) = &req.current().content {
+ let pos = req.params.text_document_position.position;
+ if let Some(node) = find_command(&table, pos) {
+ let cmd = table.as_command(node).unwrap();
+ for parameter in parameters
+ .by_ref()
+ .filter(|param| param.name == &cmd.name.text()[1..])
+ {
+ if let Some(args_node) =
+ table.extract_group(node, latex::GroupKind::Group, parameter.index)
+ {
+ let args = table.as_group(args_node).unwrap();
+ if args.right.is_some() && !args.range().contains_exclusive(pos) {
continue;
}
- if !args.children.is_empty() && !command.has_word(parameter.index) {
+ if table.children(args_node).next().is_some()
+ && table
+ .extract_word(node, latex::GroupKind::Group, parameter.index)
+ .is_none()
+ {
continue;
}
- return execute(Arc::clone(&command), parameter.index).await;
+ execute(node, parameter.index).await;
+ return;
}
}
}
}
- Vec::new()
}
-pub async fn environment<'a, E, F>(
- request: &'a FeatureRequest<CompletionParams>,
- execute: E,
-) -> Vec<CompletionItem>
+pub async fn environment<'a, E, F>(req: &'a FeatureRequest<CompletionParams>, execute: E)
where
E: FnOnce(ArgumentContext<'a>) -> F,
- F: Future<Output = Vec<CompletionItem>>,
+ F: Future<Output = ()>,
{
let parameters = LANGUAGE_DATA
.environment_commands
.iter()
- .map(|cmd| Parameter::new(&cmd.name, cmd.index));
- argument(request, parameters, execute).await
+ .map(|cmd| Parameter {
+ name: &cmd.name[1..],
+ index: cmd.index,
+ });
+ argument(req, parameters, execute).await;
}
-fn find_command(tree: &LatexSyntaxTree, position: Position) -> Option<Arc<LatexCommand>> {
- let mut nodes = tree.find(position);
- nodes.reverse();
- for node in nodes {
- if let LatexNode::Command(command) = node {
- return Some(command);
- }
- }
- None
+fn find_command(table: &latex::SymbolTable, pos: Position) -> Option<AstNodeIndex> {
+ table
+ .find(pos)
+ .into_iter()
+ .rev()
+ .find(|node| table.as_command(*node).is_some())
}
diff --git a/support/texlab/src/completion/latex/component.rs b/support/texlab/src/completion/latex/component.rs
index 3699a4959e..8cf9f494a4 100644
--- a/support/texlab/src/completion/latex/component.rs
+++ b/support/texlab/src/completion/latex/component.rs
@@ -1,278 +1,351 @@
use super::combinators;
-use crate::completion::factory::{self, LatexComponentId};
-use crate::completion::DATABASE;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexComponentCommandCompletionProvider;
-
-impl FeatureProvider for LatexComponentCommandCompletionProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- combinators::command(request, |command| {
- async move {
- let range = command.short_name_range();
- let mut items = Vec::new();
- for component in DATABASE.related_components(request.related_documents()) {
- let file_names = component.file_names.iter().map(AsRef::as_ref).collect();
- let id = LatexComponentId::Component(file_names);
- for command in &component.commands {
- let text_edit = TextEdit::new(range, (&command.name).into());
- let item = factory::command(
- request,
- (&command.name).into(),
- command.image.as_ref().map(AsRef::as_ref),
- command.glyph.as_ref().map(AsRef::as_ref),
- text_edit,
- &id,
- );
- items.push(item);
- }
- }
- items
+use crate::{
+ completion::types::{Item, ItemData},
+ feature::FeatureRequest,
+ protocol::CompletionParams,
+};
+
+pub async fn complete_latex_component_commands<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ combinators::command(req, |cmd_node| async move {
+ let table = req.current().content.as_latex().unwrap();
+ let cmd = table.as_command(cmd_node).unwrap();
+ let range = cmd.short_name_range();
+
+ for comp in req.view.components() {
+ for cmd in &comp.commands {
+ items.push(Item::new(
+ range,
+ ItemData::ComponentCommand {
+ name: &cmd.name,
+ image: cmd.image.as_deref(),
+ glyph: cmd.glyph.as_deref(),
+ file_names: &comp.file_names,
+ },
+ ));
}
- })
- .await
- }
+ }
+ })
+ .await;
}
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexComponentEnvironmentCompletionProvider;
-
-impl FeatureProvider for LatexComponentEnvironmentCompletionProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- combinators::environment(request, |context| {
- async move {
- let mut items = Vec::new();
- for component in DATABASE.related_components(request.related_documents()) {
- let file_names = component.file_names.iter().map(AsRef::as_ref).collect();
- let id = LatexComponentId::Component(file_names);
- for environment in &component.environments {
- let text_edit = TextEdit::new(context.range, environment.into());
- let item =
- factory::environment(request, environment.into(), text_edit, &id);
- items.push(item);
- }
- }
- items
+pub async fn complete_latex_component_environments<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ combinators::environment(req, |ctx| async move {
+ for comp in req.view.components() {
+ for env in &comp.environments {
+ items.push(Item::new(
+ ctx.range,
+ ItemData::ComponentEnvironment {
+ name: env,
+ file_names: &comp.file_names,
+ },
+ ));
}
- })
- .await
- }
+ }
+ })
+ .await;
}
#[cfg(test)]
mod tests {
use super::*;
- use crate::range::RangeExt;
- use lsp_types::{Position, Range};
-
- #[test]
- fn test_command_start() {
- let items = test_feature(
- LatexComponentCommandCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\use")],
- main_file: "foo.tex",
- position: Position::new(0, 0),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
+ use crate::{
+ feature::FeatureTester,
+ protocol::{Range, RangeExt},
+ };
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn empty_latex_document_command() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_component_commands(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_command_end() {
- let items = test_feature(
- LatexComponentCommandCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\use")],
- main_file: "foo.tex",
- position: Position::new(0, 4),
- ..FeatureSpec::default()
- },
- );
- assert!(!items.is_empty());
- assert_eq!(
- items[0].text_edit.as_ref().map(|edit| edit.range),
- Some(Range::new_simple(0, 1, 0, 4))
- );
+ #[tokio::test]
+ async fn empty_bibtex_document_command() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_component_commands(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_command_word() {
- let items = test_feature(
- LatexComponentCommandCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "use")],
- main_file: "foo.tex",
- position: Position::new(0, 2),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
+ #[tokio::test]
+ async fn empty_latex_document_environment() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_component_environments(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_command_package() {
- let items = test_feature(
- LatexComponentCommandCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\usepackage{lipsum}\n\\lips")],
- main_file: "foo.tex",
- position: Position::new(1, 2),
- ..FeatureSpec::default()
- },
- );
- assert!(items.iter().any(|item| item.label == "lipsum"));
+ #[tokio::test]
+ async fn empty_bibtex_document_environment() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_component_environments(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_command_package_comma_separated() {
- let items = test_feature(
- LatexComponentCommandCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.tex",
- "\\usepackage{geometry, lipsum}\n\\lips",
- )],
- main_file: "foo.tex",
- position: Position::new(1, 2),
- ..FeatureSpec::default()
- },
- );
- assert!(items.iter().any(|item| item.label == "lipsum"));
+ #[tokio::test]
+ async fn command_start() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\use"#)
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_component_commands(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_command_class() {
- let items = test_feature(
- LatexComponentCommandCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.tex",
- "\\documentclass{book}\n\\chap",
- )],
- main_file: "foo.tex",
- position: Position::new(1, 2),
- ..FeatureSpec::default()
- },
- );
- assert!(items.iter().any(|item| item.label == "chapter"));
+ #[tokio::test]
+ async fn command_end() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\use"#)
+ .main("main.tex")
+ .position(0, 4)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_component_commands(&req, &mut actual_items).await;
+
+ assert!(!actual_items.is_empty());
+ assert_eq!(actual_items[0].range, Range::new_simple(0, 1, 0, 4));
}
- #[test]
- fn test_environment_inside_of_empty_begin() {
- let items = test_feature(
- LatexComponentEnvironmentCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\begin{}")],
- main_file: "foo.tex",
- position: Position::new(0, 7),
- ..FeatureSpec::default()
- },
- );
- assert!(!items.is_empty());
- assert_eq!(
- items[0].text_edit.as_ref().map(|edit| edit.range),
- Some(Range::new_simple(0, 7, 0, 7))
- );
+ #[tokio::test]
+ async fn command_word() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"use"#)
+ .main("main.tex")
+ .position(0, 2)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_component_commands(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_environment_inside_of_non_empty_end() {
- let items = test_feature(
- LatexComponentEnvironmentCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\end{foo}")],
- main_file: "foo.tex",
- position: Position::new(0, 6),
- ..FeatureSpec::default()
- },
- );
- assert!(!items.is_empty());
- assert_eq!(
- items[0].text_edit.as_ref().map(|edit| edit.range),
- Some(Range::new_simple(0, 5, 0, 8))
- );
+ #[tokio::test]
+ async fn command_package() {
+ let req = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \usepackage{lipsum}
+ \lips
+ "#
+ ),
+ )
+ .main("main.tex")
+ .position(1, 2)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_component_commands(&req, &mut actual_items).await;
+
+ assert!(actual_items
+ .iter()
+ .any(|item| item.data.label() == "lipsum"));
}
- #[test]
- fn test_environment_outside_of_empty_begin() {
- let items = test_feature(
- LatexComponentEnvironmentCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\begin{}")],
- main_file: "foo.tex",
- position: Position::new(0, 6),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
+ #[tokio::test]
+ async fn command_package_comma_separated() {
+ let req = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \usepackage{geometry, lipsum}
+ \lips
+ "#
+ ),
+ )
+ .main("main.tex")
+ .position(1, 2)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_component_commands(&req, &mut actual_items).await;
+
+ assert!(actual_items
+ .iter()
+ .any(|item| item.data.label() == "lipsum"));
}
- #[test]
- fn test_environment_outside_of_empty_end() {
- let items = test_feature(
- LatexComponentEnvironmentCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\end{}")],
- main_file: "foo.tex",
- position: Position::new(0, 6),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
+ #[tokio::test]
+ async fn command_class() {
+ let req = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{book}
+ \chap
+ "#
+ ),
+ )
+ .main("main.tex")
+ .position(1, 2)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_component_commands(&req, &mut actual_items).await;
+
+ assert!(actual_items
+ .iter()
+ .any(|item| item.data.label() == "chapter"));
+ }
+
+ #[tokio::test]
+ async fn environment_inside_of_empty_begin() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\begin{}"#)
+ .main("main.tex")
+ .position(0, 7)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_component_environments(&req, &mut actual_items).await;
+
+ assert!(!actual_items.is_empty());
+ assert_eq!(actual_items[0].range, Range::new_simple(0, 7, 0, 7));
}
- #[test]
- fn test_environment_inside_of_other_command() {
- let items = test_feature(
- LatexComponentEnvironmentCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\foo{bar}")],
- main_file: "foo.tex",
- position: Position::new(0, 6),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
+ #[tokio::test]
+ async fn environment_inside_of_non_empty_end() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\end{foo}"#)
+ .main("main.tex")
+ .position(0, 6)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_component_environments(&req, &mut actual_items).await;
+
+ assert!(!actual_items.is_empty());
+ assert_eq!(actual_items[0].range, Range::new_simple(0, 5, 0, 8));
}
- #[test]
- fn test_environment_inside_second_argument() {
- let items = test_feature(
- LatexComponentEnvironmentCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\begin{foo}{bar}")],
- main_file: "foo.tex",
- position: Position::new(0, 14),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
+ #[tokio::test]
+ async fn environment_outside_of_empty_begin() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\begin{}"#)
+ .main("main.tex")
+ .position(0, 6)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_component_environments(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_environment_unterminated() {
- let items = test_feature(
- LatexComponentEnvironmentCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\begin{ foo")],
- main_file: "foo.tex",
- position: Position::new(0, 7),
- ..FeatureSpec::default()
- },
- );
- assert!(!items.is_empty());
+ #[tokio::test]
+ async fn environment_outside_of_empty_end() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\end{}"#)
+ .main("main.tex")
+ .position(0, 6)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_component_environments(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn environment_inside_of_other_command() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\foo{bar}"#)
+ .main("main.tex")
+ .position(0, 6)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_component_environments(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn environment_inside_second_argument() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\begin{foo}{bar}"#)
+ .main("main.tex")
+ .position(0, 14)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_component_environments(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn environment_unterminated() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\begin{foo"#)
+ .main("main.tex")
+ .position(0, 7)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_component_environments(&req, &mut actual_items).await;
+
+ assert!(!actual_items.is_empty());
+ assert_eq!(actual_items[0].range, Range::new_simple(0, 7, 0, 10));
}
}
diff --git a/support/texlab/src/completion/latex/glossary.rs b/support/texlab/src/completion/latex/glossary.rs
index ca6600b690..417152dd21 100644
--- a/support/texlab/src/completion/latex/glossary.rs
+++ b/support/texlab/src/completion/latex/glossary.rs
@@ -1,53 +1,114 @@
use super::combinators::{self, Parameter};
-use crate::completion::factory;
-use crate::syntax::LatexGlossaryEntryKind::*;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{CompletionItem, CompletionParams, TextEdit};
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexGlossaryCompletionProvider;
-
-impl FeatureProvider for LatexGlossaryCompletionProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- let parameters = LANGUAGE_DATA
+use crate::{
+ completion::types::{Item, ItemData},
+ feature::FeatureRequest,
+ protocol::CompletionParams,
+ syntax::{
+ LatexGlossaryEntryKind::{Acronym, General},
+ LANGUAGE_DATA,
+ },
+ workspace::DocumentContent,
+};
+
+pub async fn complete_latex_glossary_entries<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ let parameters = LANGUAGE_DATA
+ .glossary_entry_reference_commands
+ .iter()
+ .map(|cmd| Parameter {
+ name: &cmd.name[1..],
+ index: cmd.index,
+ });
+
+ combinators::argument(req, parameters, |ctx| async move {
+ let cmd_kind = LANGUAGE_DATA
.glossary_entry_reference_commands
.iter()
- .map(|cmd| Parameter::new(&cmd.name, cmd.index));
-
- combinators::argument(request, parameters, |context| {
- async move {
- let cmd_kind = LANGUAGE_DATA
- .glossary_entry_reference_commands
- .iter()
- .find(|cmd| cmd.name == context.parameter.name)
- .unwrap()
- .kind;
-
- let mut items = Vec::new();
- for document in request.related_documents() {
- if let SyntaxTree::Latex(tree) = &document.tree {
- for entry in &tree.glossary.entries {
- match (cmd_kind, entry.kind) {
- (Acronym, Acronym) | (General, General) | (General, Acronym) => {
- let label = entry.label().text().to_owned();
- let text_edit = TextEdit::new(context.range, label.clone());
- let item = factory::glossary_entry(request, label, text_edit);
- items.push(item);
- }
- (Acronym, General) => {}
- }
+ .find(|cmd| &cmd.name[1..] == ctx.parameter.name)
+ .unwrap()
+ .kind;
+
+ for doc in req.related() {
+ if let DocumentContent::Latex(table) = &doc.content {
+ for entry in &table.glossary_entries {
+ match (cmd_kind, entry.kind) {
+ (Acronym, Acronym) | (General, General) | (General, Acronym) => {
+ let name = entry.label(&table).text();
+ let item = Item::new(ctx.range, ItemData::GlossaryEntry { name });
+ items.push(item);
}
+ (Acronym, General) => {}
}
}
- items
}
- })
- .await
+ }
+ })
+ .await
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::{
+ feature::FeatureTester,
+ protocol::{Range, RangeExt},
+ };
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_glossary_entries(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_glossary_entries(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn acronym() {
+ let req = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \newacronym{lvm}{LVM}{Logical Volume Manager}
+ \acrfull{foo}
+ "#
+ ),
+ )
+ .main("main.tex")
+ .position(1, 9)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_glossary_entries(&req, &mut actual_items).await;
+
+ assert_eq!(actual_items.len(), 1);
+ assert_eq!(actual_items[0].data.label(), "lvm");
+ assert_eq!(actual_items[0].range, Range::new_simple(1, 9, 1, 12));
}
}
diff --git a/support/texlab/src/completion/latex/import.rs b/support/texlab/src/completion/latex/import.rs
index 7f333f17ae..06c28e189b 100644
--- a/support/texlab/src/completion/latex/import.rs
+++ b/support/texlab/src/completion/latex/import.rs
@@ -1,44 +1,40 @@
use super::combinators::{self, Parameter};
-use crate::completion::factory;
-use crate::completion::DATABASE;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{CompletionItem, CompletionParams, TextEdit};
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexClassImportProvider;
-
-impl FeatureProvider for LatexClassImportProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- import(request, LatexIncludeKind::Class, factory::class).await
- }
-}
+use crate::{
+ completion::types::{Item, ItemData},
+ components::COMPONENT_DATABASE,
+ feature::FeatureRequest,
+ protocol::CompletionParams,
+ syntax::{LatexIncludeKind, LANGUAGE_DATA},
+};
+use std::{borrow::Cow, collections::HashSet};
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexPackageImportProvider;
-
-impl FeatureProvider for LatexPackageImportProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
+pub async fn complete_latex_classes<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ complete_latex_imports(req, items, LatexIncludeKind::Class, |name| {
+ ItemData::Class { name }
+ })
+ .await;
+}
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- import(request, LatexIncludeKind::Package, factory::package).await
- }
+pub async fn complete_latex_packages<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ complete_latex_imports(req, items, LatexIncludeKind::Package, |name| {
+ ItemData::Package { name }
+ })
+ .await;
}
-async fn import<F>(
- request: &FeatureRequest<CompletionParams>,
+async fn complete_latex_imports<'a, F>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
kind: LatexIncludeKind,
- factory: F,
-) -> Vec<CompletionItem>
-where
- F: Fn(&FeatureRequest<CompletionParams>, &'static str, TextEdit) -> CompletionItem,
+ mut factory: F,
+) where
+ F: FnMut(Cow<'a, str>) -> ItemData<'a>,
{
let extension = if kind == LatexIncludeKind::Package {
"sty"
@@ -50,61 +46,143 @@ where
.include_commands
.iter()
.filter(|cmd| cmd.kind == kind)
- .map(|cmd| Parameter::new(&cmd.name, cmd.index));
-
- combinators::argument(request, parameters, |context| {
- async move {
- let mut items = Vec::new();
- for component in &DATABASE.components {
- for file_name in &component.file_names {
- if file_name.ends_with(extension) {
- let stem = &file_name[0..file_name.len() - 4];
- let text_edit = TextEdit::new(context.range, stem.into());
- let item = factory(request, stem, text_edit);
- items.push(item);
- }
- }
- }
- items
- }
+ .map(|cmd| Parameter {
+ name: &cmd.name[1..],
+ index: cmd.index,
+ });
+
+ combinators::argument(req, parameters, |ctx| async move {
+ let resolver = req.distro.resolver().await;
+ let mut file_names = HashSet::new();
+ COMPONENT_DATABASE
+ .components
+ .iter()
+ .flat_map(|comp| comp.file_names.iter())
+ .filter(|file_name| file_name.ends_with(extension))
+ .for_each(|file_name| {
+ file_names.insert(file_name);
+ let stem = &file_name[0..file_name.len() - 4];
+ let data = factory(stem.into());
+ let item = Item::new(ctx.range, data);
+ items.push(item);
+ });
+
+ resolver
+ .files_by_name
+ .keys()
+ .filter(|file_name| file_name.ends_with(extension) && !file_names.contains(file_name))
+ .for_each(|file_name| {
+ let stem = &file_name[0..file_name.len() - 4];
+ let data = factory(stem.to_owned().into());
+ let item = Item::new(ctx.range, data);
+ items.push(item);
+ });
})
- .await
+ .await;
}
#[cfg(test)]
mod tests {
use super::*;
- use lsp_types::Position;
-
- #[test]
- fn test_class() {
- let items = test_feature(
- LatexClassImportProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\documentclass{}")],
- main_file: "foo.tex",
- position: Position::new(0, 15),
- ..FeatureSpec::default()
- },
- );
-
- assert!(items.iter().any(|item| item.label == "beamer"));
- assert!(items.iter().all(|item| item.label != "amsmath"));
+ use crate::feature::FeatureTester;
+
+ #[tokio::test]
+ async fn empty_latex_document_class() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_classes(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document_class() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_classes(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn empty_latex_document_package() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_packages(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_package() {
- let items = test_feature(
- LatexPackageImportProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\usepackage{}")],
- main_file: "foo.tex",
- position: Position::new(0, 12),
- ..FeatureSpec::default()
- },
- );
-
- assert!(items.iter().all(|item| item.label != "beamer"));
- assert!(items.iter().any(|item| item.label == "amsmath"));
+ #[tokio::test]
+ async fn empty_bibtex_document_package() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_packages(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn class() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\documentclass{}"#)
+ .main("main.tex")
+ .position(0, 15)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_classes(&req, &mut actual_items).await;
+
+ assert!(actual_items
+ .iter()
+ .any(|item| item.data.label() == "beamer"));
+ assert!(actual_items
+ .iter()
+ .all(|item| item.data.label() != "amsmath"));
+ }
+
+ #[tokio::test]
+ async fn package() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\usepackage{}"#)
+ .main("main.tex")
+ .position(0, 12)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_packages(&req, &mut actual_items).await;
+
+ assert!(actual_items
+ .iter()
+ .all(|item| item.data.label() != "beamer"));
+ assert!(actual_items
+ .iter()
+ .any(|item| item.data.label() == "amsmath"));
}
}
diff --git a/support/texlab/src/completion/latex/include.rs b/support/texlab/src/completion/latex/include.rs
index 2f4090b3f3..1a8555d07c 100644
--- a/support/texlab/src/completion/latex/include.rs
+++ b/support/texlab/src/completion/latex/include.rs
@@ -1,129 +1,133 @@
use super::combinators::{self, Parameter};
-use crate::completion::factory;
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{CompletionItem, CompletionParams, Range, TextEdit};
+use crate::{
+ completion::types::{Item, ItemData},
+ feature::FeatureRequest,
+ protocol::{CompletionParams, Range, RangeExt},
+ syntax::{latex, AstNodeIndex, SyntaxNode, LANGUAGE_DATA},
+};
use std::path::{Path, PathBuf};
-use walkdir::WalkDir;
+use tokio::fs;
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexIncludeCompletionProvider;
+pub async fn complete_latex_includes<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ let parameters = LANGUAGE_DATA.include_commands.iter().map(|cmd| Parameter {
+ name: &cmd.name[1..],
+ index: cmd.index,
+ });
-impl FeatureProvider for LatexIncludeCompletionProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
+ combinators::argument_word(req, parameters, |cmd_node, index| async move {
+ if !req.current().is_file() {
+ return;
+ }
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- let parameters = LANGUAGE_DATA
- .include_commands
- .iter()
- .map(|cmd| Parameter::new(&cmd.name, cmd.index));
+ make_items(req, items, cmd_node, index).await;
+ })
+ .await;
+}
- combinators::argument_word(request, parameters, |command, index| {
- async move {
- if !request.document().is_file() {
- return Vec::new();
- }
+async fn make_items<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+ cmd_node: AstNodeIndex,
+ index: usize,
+) -> Option<()> {
+ let table = req.current().content.as_latex()?;
+ let pos = req.params.text_document_position.position;
+ let path_word = table.extract_word(cmd_node, latex::GroupKind::Group, index);
+ let name_range = match path_word {
+ Some(path_word) => Range::new_simple(
+ path_word.start().line,
+ path_word.end().character - path_word.text().split('/').last()?.chars().count() as u64,
+ path_word.end().line,
+ path_word.end().character,
+ ),
+ None => Range::new(pos, pos),
+ };
- let position = request.params.text_document_position.position;
- let mut items = Vec::new();
- let path_word = command.extract_word(index);
- let name_range = match path_word {
- Some(path_word) => Range::new_simple(
- path_word.start().line,
- path_word.end().character
- - path_word.text().split('/').last().unwrap().chars().count() as u64,
- path_word.end().line,
- path_word.end().character,
- ),
- None => Range::new(position, position),
- };
- let directory = current_directory(&request, &command);
+ let cmd = table.as_command(cmd_node)?;
+ let current_dir = current_dir(req, table, cmd_node)?;
+ let mut entries = fs::read_dir(current_dir).await.ok()?;
+ while let Some(entry) = entries.next_entry().await.ok()? {
+ let mut path = entry.path();
- for entry in WalkDir::new(directory)
- .min_depth(1)
- .max_depth(1)
- .follow_links(false)
- .into_iter()
- .filter_map(std::result::Result::ok)
- {
- if entry.file_type().is_file() && is_included(&command, &entry.path()) {
- let mut path = entry.into_path();
- let include_extension = LANGUAGE_DATA
- .include_commands
- .iter()
- .find(|cmd| command.name.text() == cmd.name)
- .unwrap()
- .include_extension;
+ let file_type = entry.file_type().await.ok()?;
+ if file_type.is_file() && is_included(&cmd, &path) {
+ let include_extension = LANGUAGE_DATA
+ .include_commands
+ .iter()
+ .find(|c| cmd.name.text() == c.name)?
+ .include_extension;
- if !include_extension {
- remove_extension(&mut path);
- }
- let text_edit = make_text_edit(name_range, &path);
- items.push(factory::file(request, &path, text_edit));
- } else if entry.file_type().is_dir() {
- let path = entry.into_path();
- let text_edit = make_text_edit(name_range, &path);
- items.push(factory::folder(request, &path, text_edit));
- }
- }
- items
+ if !include_extension {
+ remove_extension(&mut path);
}
- })
- .await
+ let name = path.file_name().unwrap().to_string_lossy().into_owned();
+ let item = Item::new(name_range, ItemData::File { name });
+ items.push(item);
+ } else if file_type.is_dir() {
+ let name = path.file_name().unwrap().to_string_lossy().into_owned();
+ let item = Item::new(name_range, ItemData::Directory { name });
+ items.push(item);
+ }
}
+ Some(())
}
-fn current_directory(
- request: &FeatureRequest<CompletionParams>,
- command: &LatexCommand,
-) -> PathBuf {
- let mut path = request.document().uri.to_file_path().unwrap();
- path = PathBuf::from(path.to_string_lossy().into_owned().replace('\\', "/"));
+fn current_dir(
+ req: &FeatureRequest<CompletionParams>,
+ table: &latex::SymbolTable,
+ cmd_node: AstNodeIndex,
+) -> Option<PathBuf> {
+ let mut path = req
+ .options
+ .latex
+ .as_ref()
+ .and_then(|latex| latex.root_directory.as_ref())
+ .map_or_else(
+ || {
+ let mut path = req.current().uri.to_file_path().unwrap();
+ path.pop();
+ path
+ },
+ Clone::clone,
+ );
- path.pop();
- if let Some(include) = command.extract_word(0) {
+ path = PathBuf::from(path.to_str()?.replace('\\', "/"));
+ if let Some(include) = table.extract_word(cmd_node, latex::GroupKind::Group, 0) {
path.push(include.text());
if !include.text().ends_with('/') {
path.pop();
}
}
- path
+ Some(path)
}
-fn is_included(command: &LatexCommand, file: &Path) -> bool {
+fn is_included(cmd: &latex::Command, file: &Path) -> bool {
if let Some(allowed_extensions) = LANGUAGE_DATA
.include_commands
.iter()
- .find(|cmd| command.name.text() == cmd.name)
- .unwrap()
- .kind
- .extensions()
+ .find(|c| c.name == cmd.name.text())
+ .and_then(|c| c.kind.extensions())
{
file.extension()
- .map(|extension| extension.to_string_lossy().to_lowercase())
- .map(|extension| allowed_extensions.contains(&extension.as_str()))
- .unwrap_or(false)
+ .and_then(|ext| ext.to_str())
+ .map(|ext| ext.to_lowercase())
+ .map(|ext| allowed_extensions.contains(&ext.as_str()))
+ .unwrap_or_default()
} else {
true
}
}
fn remove_extension(path: &mut PathBuf) {
- let stem = path
+ if let Some(stem) = path
.file_stem()
- .map(|stem| stem.to_string_lossy().into_owned());
-
- if let Some(stem) = stem {
+ .and_then(|stem| stem.to_str())
+ .map(ToOwned::to_owned)
+ {
path.pop();
- path.push(PathBuf::from(stem));
+ path.push(stem);
}
}
-
-fn make_text_edit(range: Range, path: &Path) -> TextEdit {
- let text = path.file_name().unwrap().to_string_lossy().into_owned();
- TextEdit::new(range, text)
-}
diff --git a/support/texlab/src/completion/latex/label.rs b/support/texlab/src/completion/latex/label.rs
index f8d74f4a22..91aa80e532 100644
--- a/support/texlab/src/completion/latex/label.rs
+++ b/support/texlab/src/completion/latex/label.rs
@@ -1,156 +1,230 @@
use super::combinators::{self, ArgumentContext, Parameter};
-use crate::completion::factory;
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
+use crate::{
+ completion::types::{Item, ItemData},
+ feature::{DocumentView, FeatureRequest},
+ outline::{Outline, OutlineContext, OutlineContextItem},
+ protocol::{CompletionParams, RangeExt},
+ syntax::{
+ latex, LatexLabelKind, LatexLabelReferenceSource, Structure, SyntaxNode, LANGUAGE_DATA,
+ },
+ workspace::DocumentContent,
+};
use std::sync::Arc;
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexLabelCompletionProvider;
+pub async fn complete_latex_labels<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ let parameters = LANGUAGE_DATA
+ .label_commands
+ .iter()
+ .filter(|cmd| cmd.kind.is_reference())
+ .map(|cmd| Parameter {
+ name: &cmd.name[1..],
+ index: cmd.index,
+ });
-impl FeatureProvider for LatexLabelCompletionProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
+ combinators::argument(req, parameters, |ctx| async move {
+ let source = find_source(ctx);
+ for doc in req.related() {
+ let snapshot = Arc::clone(&req.view.snapshot);
+ let view =
+ DocumentView::analyze(snapshot, Arc::clone(&doc), &req.options, &req.current_dir);
+ let outline = Outline::analyze(&view, &req.options, &req.current_dir);
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- let parameters = LANGUAGE_DATA
- .label_commands
- .iter()
- .filter(|cmd| cmd.kind.is_reference())
- .map(|cmd| Parameter::new(&cmd.name, cmd.index));
-
- combinators::argument(request, parameters, |context| {
- async move {
- let source = Self::find_source(&context);
- let mut items = Vec::new();
- for document in request.related_documents() {
- let workspace = Arc::clone(&request.view.workspace);
- let view = DocumentView::new(workspace, Arc::clone(&document));
- let outline = Outline::from(&view);
-
- if let SyntaxTree::Latex(tree) = &document.tree {
- for label in tree
- .structure
- .labels
- .iter()
- .filter(|label| label.kind == LatexLabelKind::Definition)
- .filter(|label| Self::is_included(tree, label, source))
- {
- let outline_context = OutlineContext::parse(&view, &label, &outline);
- for name in label.names() {
- let text = name.text().to_owned();
- let text_edit = TextEdit::new(context.range, text.clone());
- let item = factory::label(
- request,
- text,
- text_edit,
- outline_context.as_ref(),
- );
- items.push(item);
- }
- }
+ if let DocumentContent::Latex(table) = &doc.content {
+ for label in table
+ .labels
+ .iter()
+ .filter(|label| label.kind == LatexLabelKind::Definition)
+ .filter(|label| is_included(&table, label, source))
+ {
+ let outline_ctx = OutlineContext::parse(&view, &outline, *label);
+
+ let kind = match outline_ctx.as_ref().map(|ctx| &ctx.item) {
+ Some(OutlineContextItem::Section { .. }) => Structure::Section,
+ Some(OutlineContextItem::Caption { .. }) => Structure::Float,
+ Some(OutlineContextItem::Theorem { .. }) => Structure::Theorem,
+ Some(OutlineContextItem::Equation) => Structure::Equation,
+ Some(OutlineContextItem::Item) => Structure::Item,
+ None => Structure::Label,
+ };
+
+ for name in label.names(&table) {
+ let header = outline_ctx.as_ref().and_then(|ctx| ctx.detail());
+ let footer = outline_ctx.as_ref().and_then(|ctx| match &ctx.item {
+ OutlineContextItem::Caption { text, .. } => Some(text.clone()),
+ _ => None,
+ });
+
+ let text = outline_ctx
+ .as_ref()
+ .map(|ctx| format!("{} {}", name.text(), ctx.reference()))
+ .unwrap_or_else(|| name.text().into());
+
+ let item = Item::new(
+ ctx.range,
+ ItemData::Label {
+ name: name.text(),
+ kind,
+ header,
+ footer,
+ text,
+ },
+ );
+ items.push(item);
}
}
- items
}
- })
- .await
- }
+ }
+ })
+ .await;
}
-impl LatexLabelCompletionProvider {
- fn find_source(context: &ArgumentContext) -> LatexLabelReferenceSource {
- match LANGUAGE_DATA
- .label_commands
- .iter()
- .find(|cmd| cmd.name == context.parameter.name && cmd.index == context.parameter.index)
- .map(|cmd| cmd.kind)
- .unwrap()
- {
- LatexLabelKind::Definition => unreachable!(),
- LatexLabelKind::Reference(source) => source,
- }
+fn find_source(ctx: ArgumentContext) -> LatexLabelReferenceSource {
+ match LANGUAGE_DATA
+ .label_commands
+ .iter()
+ .find(|cmd| &cmd.name[1..] == ctx.parameter.name && cmd.index == ctx.parameter.index)
+ .map(|cmd| cmd.kind)
+ .unwrap()
+ {
+ LatexLabelKind::Definition => unreachable!(),
+ LatexLabelKind::Reference(source) => source,
}
+}
- fn is_included(
- tree: &LatexSyntaxTree,
- label: &LatexLabel,
- source: LatexLabelReferenceSource,
- ) -> bool {
- match source {
- LatexLabelReferenceSource::Everything => true,
- LatexLabelReferenceSource::Math => tree
- .env
- .environments
- .iter()
- .filter(|env| env.left.is_math())
- .any(|env| env.range().contains_exclusive(label.start())),
- }
+fn is_included(
+ table: &latex::SymbolTable,
+ label: &latex::Label,
+ source: LatexLabelReferenceSource,
+) -> bool {
+ let label_range = table[label.parent].range();
+ match source {
+ LatexLabelReferenceSource::Everything => true,
+ LatexLabelReferenceSource::Math => table
+ .environments
+ .iter()
+ .filter(|env| env.left.is_math(&table))
+ .any(|env| env.range(&table).contains_exclusive(label_range.start)),
}
}
#[cfg(test)]
mod tests {
use super::*;
- use lsp_types::Position;
-
- #[test]
- fn test_inside_of_ref() {
- let items = test_feature(
- LatexLabelCompletionProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file(
- "foo.tex",
- "\\addbibresource{bar.bib}\\include{baz}\n\\ref{}",
- ),
- FeatureSpec::file("bar.bib", ""),
- FeatureSpec::file("baz.tex", "\\label{foo}\\label{bar}\\ref{baz}"),
- ],
- main_file: "foo.tex",
- position: Position::new(1, 5),
- ..FeatureSpec::default()
- },
- );
- let labels: Vec<&str> = items.iter().map(|item| item.label.as_ref()).collect();
- assert_eq!(labels, vec!["foo", "bar"]);
+ use crate::feature::FeatureTester;
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_labels(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_labels(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn inside_of_ref() {
+ let req = FeatureTester::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \addbibresource{bar.bib}
+ \include{baz}
+ \ref{}
+ "#
+ ),
+ )
+ .file("bar.bib", "")
+ .file("baz.tex", r#"\label{foo}\label{bar}\ref{baz}"#)
+ .main("foo.tex")
+ .position(2, 5)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_labels(&req, &mut actual_items).await;
+
+ let actual_labels: Vec<_> = actual_items
+ .into_iter()
+ .map(|item| item.data.label().to_owned())
+ .collect();
+ assert_eq!(actual_labels, vec!["foo", "bar"]);
}
- #[test]
- fn test_outside_of_ref() {
- let items = test_feature(
- LatexLabelCompletionProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\include{bar}\\ref{}"),
- FeatureSpec::file("bar.tex", "\\label{foo}\\label{bar}"),
- ],
- main_file: "foo.tex",
- position: Position::new(1, 6),
- ..FeatureSpec::default()
- },
- );
- assert!(items.is_empty());
+ #[tokio::test]
+ async fn outside_of_ref() {
+ let req = FeatureTester::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \include{bar}
+ \ref{}
+ "#
+ ),
+ )
+ .file("bar.tex", r#"\label{foo}\label{bar}"#)
+ .main("foo.tex")
+ .position(1, 6)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_labels(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_eqref() {
- let items = test_feature(
- LatexLabelCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.tex",
- "\\begin{align}\\label{foo}\\end{align}\\label{bar}\n\\eqref{}",
- )],
- main_file: "foo.tex",
- position: Position::new(1, 7),
- ..FeatureSpec::default()
- },
- );
- let labels: Vec<&str> = items.iter().map(|item| item.label.as_ref()).collect();
- assert_eq!(labels, vec!["foo"]);
+ #[tokio::test]
+ async fn eqref() {
+ let req = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \begin{align}\label{foo}\end{align}\label{bar}
+ \eqref{}
+ "#
+ ),
+ )
+ .main("main.tex")
+ .position(1, 7)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_labels(&req, &mut actual_items).await;
+
+ let actual_labels: Vec<_> = actual_items
+ .into_iter()
+ .map(|item| item.data.label().to_owned())
+ .collect();
+
+ assert_eq!(actual_labels, vec!["foo"]);
}
}
diff --git a/support/texlab/src/completion/latex/mod.rs b/support/texlab/src/completion/latex/mod.rs
index 2902678c11..519d00e5f7 100644
--- a/support/texlab/src/completion/latex/mod.rs
+++ b/support/texlab/src/completion/latex/mod.rs
@@ -1,14 +1,14 @@
pub mod argument;
-pub mod begin_command;
+pub mod begin_cmd;
pub mod citation;
pub mod color;
pub mod color_model;
-pub mod combinators;
+mod combinators;
pub mod component;
pub mod glossary;
pub mod import;
pub mod include;
pub mod label;
pub mod theorem;
-pub mod tikz;
+pub mod tikz_lib;
pub mod user;
diff --git a/support/texlab/src/completion/latex/theorem.rs b/support/texlab/src/completion/latex/theorem.rs
index 993ef5c7e8..a8706bed0b 100644
--- a/support/texlab/src/completion/latex/theorem.rs
+++ b/support/texlab/src/completion/latex/theorem.rs
@@ -1,70 +1,115 @@
use super::combinators;
-use crate::completion::factory::{self, LatexComponentId};
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{CompletionItem, CompletionParams, TextEdit};
+use crate::{
+ completion::types::{Item, ItemData},
+ feature::FeatureRequest,
+ protocol::CompletionParams,
+};
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexTheoremEnvironmentCompletionProvider;
-
-impl FeatureProvider for LatexTheoremEnvironmentCompletionProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- combinators::environment(request, |context| {
- async move {
- let mut items = Vec::new();
- for document in request.related_documents() {
- if let SyntaxTree::Latex(tree) = &document.tree {
- for theorem in &tree.math.theorem_definitions {
- let name = theorem.name().text().to_owned();
- let text_edit = TextEdit::new(context.range, name.clone());
- let item = factory::environment(
- request,
- name,
- text_edit,
- &LatexComponentId::User,
- );
- items.push(item);
- }
- }
- }
- items
+pub async fn complete_latex_theorem_environments<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ combinators::environment(req, |ctx| async move {
+ for table in req
+ .related()
+ .into_iter()
+ .filter_map(|doc| doc.content.as_latex())
+ {
+ for theorem in &table.theorem_definitions {
+ let name = theorem.name(&table).text();
+ let data = ItemData::UserEnvironment { name };
+ let item = Item::new(ctx.range, data);
+ items.push(item);
}
- })
- .await
- }
+ }
+ })
+ .await;
}
#[cfg(test)]
mod tests {
use super::*;
- use crate::range::RangeExt;
- use lsp_types::{Position, Range};
- use std::borrow::Cow;
+ use crate::{
+ feature::FeatureTester,
+ protocol::{Range, RangeExt},
+ };
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_theorem_environments(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_theorem_environments(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn inside_begin() {
+ let req = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \newtheorem{theorem}{Theorem}
+ \begin{th}
+ "#
+ ),
+ )
+ .main("main.tex")
+ .position(1, 8)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_theorem_environments(&req, &mut actual_items).await;
+
+ assert_eq!(actual_items.len(), 1);
+ assert_eq!(actual_items[0].data.label(), "theorem");
+ assert_eq!(actual_items[0].range, Range::new_simple(1, 7, 1, 9));
+ }
+
+ #[tokio::test]
+ async fn outside_begin() {
+ let req = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \newtheorem{theorem}{Theorem}
+ \begin{th}
+ "#
+ ),
+ )
+ .main("main.tex")
+ .position(1, 10)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_theorem_environments(&req, &mut actual_items).await;
- #[test]
- fn test() {
- let items = test_feature(
- LatexTheoremEnvironmentCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.tex",
- "\\newtheorem{theorem}{Theorem}\n\\begin{th}",
- )],
- main_file: "foo.tex",
- position: Position::new(1, 8),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(items.len(), 1);
- assert_eq!(items[0].label, Cow::from("theorem"));
- assert_eq!(
- items[0].text_edit.as_ref().map(|edit| edit.range),
- Some(Range::new_simple(1, 7, 1, 9))
- );
+ assert!(actual_items.is_empty());
}
}
diff --git a/support/texlab/src/completion/latex/tikz.rs b/support/texlab/src/completion/latex/tikz.rs
deleted file mode 100644
index 2d6740e1a8..0000000000
--- a/support/texlab/src/completion/latex/tikz.rs
+++ /dev/null
@@ -1,90 +0,0 @@
-use super::combinators::{self, Parameter};
-use crate::completion::factory;
-use crate::syntax::LANGUAGE_DATA;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{CompletionItem, CompletionParams, TextEdit};
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexPgfLibraryCompletionProvider;
-
-impl FeatureProvider for LatexPgfLibraryCompletionProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- let parameter = Parameter::new("\\usepgflibrary", 0);
- combinators::argument(request, std::iter::once(parameter), |context| {
- async move {
- let mut items = Vec::new();
- for name in &LANGUAGE_DATA.pgf_libraries {
- let text_edit = TextEdit::new(context.range, name.into());
- let item = factory::pgf_library(request, name, text_edit);
- items.push(item);
- }
- items
- }
- })
- .await
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexTikzLibraryCompletionProvider;
-
-impl FeatureProvider for LatexTikzLibraryCompletionProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- let parameter = Parameter::new("\\usetikzlibrary", 0);
- combinators::argument(request, std::iter::once(parameter), |context| {
- async move {
- let mut items = Vec::new();
- for name in &LANGUAGE_DATA.tikz_libraries {
- let text_edit = TextEdit::new(context.range, name.into());
- let item = factory::tikz_library(request, name, text_edit);
- items.push(item);
- }
- items
- }
- })
- .await
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use lsp_types::Position;
-
- #[test]
- fn test_pgf_library() {
- let items = test_feature(
- LatexPgfLibraryCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\usepgflibrary{}")],
- main_file: "foo.tex",
- position: Position::new(0, 15),
- ..FeatureSpec::default()
- },
- );
- assert!(!items.is_empty());
- }
-
- #[test]
- fn test_tikz_library() {
- let items = test_feature(
- LatexTikzLibraryCompletionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\usetikzlibrary{}")],
- main_file: "foo.tex",
- position: Position::new(0, 16),
- ..FeatureSpec::default()
- },
- );
- assert!(!items.is_empty());
- }
-}
diff --git a/support/texlab/src/completion/latex/tikz_lib.rs b/support/texlab/src/completion/latex/tikz_lib.rs
new file mode 100644
index 0000000000..fb51fd7229
--- /dev/null
+++ b/support/texlab/src/completion/latex/tikz_lib.rs
@@ -0,0 +1,138 @@
+use super::combinators::{self, Parameter};
+use crate::{
+ completion::types::{Item, ItemData},
+ feature::FeatureRequest,
+ protocol::CompletionParams,
+ syntax::LANGUAGE_DATA,
+};
+use std::iter;
+
+pub async fn complete_latex_pgf_libraries<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ let param = Parameter {
+ name: "usepgflibrary",
+ index: 0,
+ };
+ combinators::argument(req, iter::once(param), |ctx| async move {
+ for name in &LANGUAGE_DATA.pgf_libraries {
+ let item = Item::new(ctx.range, ItemData::PgfLibrary { name });
+ items.push(item);
+ }
+ })
+ .await;
+}
+
+pub async fn complete_latex_tikz_libraries<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ let param = Parameter {
+ name: "usetikzlibrary",
+ index: 0,
+ };
+ combinators::argument(req, iter::once(param), |ctx| async move {
+ for name in &LANGUAGE_DATA.tikz_libraries {
+ let item = Item::new(ctx.range, ItemData::TikzLibrary { name });
+ items.push(item);
+ }
+ })
+ .await;
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::feature::FeatureTester;
+
+ #[tokio::test]
+ async fn empty_latex_document_pgf() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_pgf_libraries(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document_pgf() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_pgf_libraries(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn empty_latex_document_tikz() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_tikz_libraries(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document_tikz() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_tikz_libraries(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn pgf_library() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\usepgflibrary{}"#)
+ .main("main.tex")
+ .position(0, 15)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_pgf_libraries(&req, &mut actual_items).await;
+
+ assert!(!actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn tikz_library() {
+ let req = FeatureTester::new()
+ .file("main.tex", r#"\usetikzlibrary{}"#)
+ .main("main.tex")
+ .position(0, 16)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_tikz_libraries(&req, &mut actual_items).await;
+
+ assert!(!actual_items.is_empty());
+ }
+}
diff --git a/support/texlab/src/completion/latex/user.rs b/support/texlab/src/completion/latex/user.rs
index 890a75882b..0a5706958a 100644
--- a/support/texlab/src/completion/latex/user.rs
+++ b/support/texlab/src/completion/latex/user.rs
@@ -1,156 +1,204 @@
use super::combinators;
-use crate::completion::factory::{self, LatexComponentId};
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use itertools::Itertools;
-use lsp_types::*;
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexUserCommandCompletionProvider;
-
-impl FeatureProvider for LatexUserCommandCompletionProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- combinators::command(request, |current_command| {
- async move {
- let mut items = Vec::new();
- for document in request.related_documents() {
- if let SyntaxTree::Latex(tree) = &document.tree {
- tree.commands
- .iter()
- .filter(|command| command.range() != current_command.range())
- .map(|command| &command.name.text()[1..])
- .unique()
- .map(|command| {
- let text_edit = TextEdit::new(
- current_command.short_name_range(),
- command.to_owned(),
- );
- factory::command(
- request,
- command.to_owned(),
- None,
- None,
- text_edit,
- &LatexComponentId::User,
- )
- })
- .for_each(|item| items.push(item));
- }
- }
- items
- }
- })
- .await
- }
-}
+use crate::{
+ completion::{Item, ItemData},
+ feature::FeatureRequest,
+ protocol::{CompletionParams, Range},
+ syntax::latex,
+ workspace::DocumentContent,
+};
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexUserEnvironmentCompletionProvider;
-
-impl FeatureProvider for LatexUserEnvironmentCompletionProvider {
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- combinators::environment(request, |context| {
- async move {
- let mut items = Vec::new();
- for document in request.related_documents() {
- if let SyntaxTree::Latex(tree) = &document.tree {
- for environment in &tree.env.environments {
- if environment.left.command == context.command
- || environment.right.command == context.command
- {
- continue;
- }
-
- if let Some(item) =
- Self::make_item(request, &environment.left, context.range)
- {
- items.push(item);
- }
-
- if let Some(item) =
- Self::make_item(request, &environment.right, context.range)
- {
- items.push(item);
- }
- }
- }
- }
- items
- }
- })
- .await
- }
+pub async fn complete_latex_user_commands<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
+ combinators::command(req, |current_cmd_node| async move {
+ let current_cmd = req
+ .current()
+ .content
+ .as_latex()
+ .unwrap()
+ .as_command(current_cmd_node)
+ .unwrap();
+
+ for table in req
+ .related()
+ .into_iter()
+ .flat_map(|doc| doc.content.as_latex())
+ {
+ table
+ .commands
+ .iter()
+ .filter(|cmd_node| **cmd_node != current_cmd_node)
+ .map(|cmd_node| {
+ let name = &table.as_command(*cmd_node).unwrap().name.text()[1..];
+ Item::new(
+ current_cmd.short_name_range(),
+ ItemData::UserCommand { name },
+ )
+ })
+ .for_each(|item| items.push(item));
+ }
+ })
+ .await;
}
-impl LatexUserEnvironmentCompletionProvider {
+pub async fn complete_latex_user_environments<'a>(
+ req: &'a FeatureRequest<CompletionParams>,
+ items: &mut Vec<Item<'a>>,
+) {
fn make_item(
- request: &FeatureRequest<CompletionParams>,
- delimiter: &LatexEnvironmentDelimiter,
+ table: &latex::SymbolTable,
+ delim: latex::EnvironmentDelimiter,
name_range: Range,
- ) -> Option<CompletionItem> {
- if let Some(name) = delimiter.name() {
- let text = name.text().to_owned();
- let text_edit = TextEdit::new(name_range, text.clone());
- let item = factory::environment(request, text, text_edit, &LatexComponentId::User);
- return Some(item);
- }
- None
+ ) -> Option<Item> {
+ delim
+ .name(&table)
+ .map(|name| Item::new(name_range, ItemData::UserEnvironment { name: &name.text() }))
}
+
+ combinators::environment(req, |ctx| async move {
+ for doc in req.related() {
+ if let DocumentContent::Latex(table) = &doc.content {
+ for env in &table.environments {
+ if (env.left.parent == ctx.node || env.right.parent == ctx.node)
+ && doc.uri == req.current().uri
+ {
+ continue;
+ }
+
+ if let Some(item) = make_item(&table, env.left, ctx.range) {
+ items.push(item);
+ }
+
+ if let Some(item) = make_item(&table, env.right, ctx.range) {
+ items.push(item);
+ }
+ }
+ }
+ }
+ })
+ .await;
}
#[cfg(test)]
mod tests {
use super::*;
- use lsp_types::Position;
-
- #[test]
- fn test_command() {
- let items = test_feature(
- LatexUserCommandCompletionProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\include{bar.tex}\n\\foo"),
- FeatureSpec::file("bar.tex", "\\bar"),
- FeatureSpec::file("baz.tex", "\\baz"),
- ],
- main_file: "foo.tex",
- position: Position::new(1, 2),
- ..FeatureSpec::default()
- },
- );
- let labels: Vec<&str> = items.iter().map(|item| item.label.as_ref()).collect();
- assert_eq!(labels, vec!["include", "bar"]);
+ use crate::feature::FeatureTester;
+ use indoc::indoc;
+ use itertools::Itertools;
+
+ #[tokio::test]
+ async fn empty_latex_document_command() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+ complete_latex_user_commands(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document_command() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+ complete_latex_user_commands(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
}
- #[test]
- fn test_environment() {
- let items = test_feature(
- LatexUserEnvironmentCompletionProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\include{bar.tex}\n\\begin{foo}"),
- FeatureSpec::file("bar.tex", "\\begin{bar}\\end{bar}"),
- FeatureSpec::file("baz.tex", "\\begin{baz}\\end{baz}"),
- ],
- main_file: "foo.tex",
- position: Position::new(1, 9),
- ..FeatureSpec::default()
- },
- );
- let labels: Vec<&str> = items
- .iter()
- .map(|item| item.label.as_ref())
+ #[tokio::test]
+ async fn empty_latex_document_environment() {
+ let req = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+ complete_latex_user_environments(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document_environment() {
+ let req = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+ complete_latex_user_environments(&req, &mut actual_items).await;
+
+ assert!(actual_items.is_empty());
+ }
+
+ #[tokio::test]
+ async fn command() {
+ let req = FeatureTester::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \include{bar}
+ \foo
+ "#
+ ),
+ )
+ .file("bar.tex", r#"\bar"#)
+ .file("baz.tex", r#"\baz"#)
+ .main("foo.tex")
+ .position(1, 2)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_user_commands(&req, &mut actual_items).await;
+
+ let actual_labels: Vec<_> = actual_items
+ .into_iter()
+ .map(|item| item.data.label().to_owned())
+ .collect();
+ assert_eq!(actual_labels, vec!["include", "bar"]);
+ }
+
+ #[tokio::test]
+ async fn environment() {
+ let req = FeatureTester::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \include{bar}
+ \begin{foo}
+ "#
+ ),
+ )
+ .file("bar.tex", r#"\begin{bar}\end{bar}"#)
+ .file("baz.tex", r#"\begin{baz}\end{baz}"#)
+ .main("foo.tex")
+ .position(1, 9)
+ .test_completion_request()
+ .await;
+ let mut actual_items = Vec::new();
+
+ complete_latex_user_environments(&req, &mut actual_items).await;
+
+ let actual_labels: Vec<_> = actual_items
+ .into_iter()
+ .map(|item| item.data.label().to_owned())
.unique()
.collect();
- assert_eq!(labels, vec!["bar"]);
+ assert_eq!(actual_labels, vec!["bar"]);
}
}
diff --git a/support/texlab/src/completion/mod.rs b/support/texlab/src/completion/mod.rs
index 6f81c3c4d3..1b28f51ebc 100644
--- a/support/texlab/src/completion/mod.rs
+++ b/support/texlab/src/completion/mod.rs
@@ -1,112 +1,417 @@
mod bibtex;
-mod data;
-mod factory;
mod latex;
-mod preselect;
-mod quality;
+mod types;
+mod util;
-use self::bibtex::command::BibtexCommandCompletionProvider;
-use self::bibtex::entry_type::BibtexEntryTypeCompletionProvider;
-use self::bibtex::field_name::BibtexFieldNameCompletionProvider;
-pub use self::data::DATABASE;
-pub use self::factory::CompletionItemData;
-use self::latex::argument::LatexArgumentCompletionProvider;
-use self::latex::begin_command::LatexBeginCommandCompletionProvider;
-use self::latex::citation::LatexCitationCompletionProvider;
-use self::latex::color::LatexColorCompletionProvider;
-use self::latex::color_model::LatexColorModelCompletionProvider;
-use self::latex::component::*;
-use self::latex::glossary::LatexGlossaryCompletionProvider;
-use self::latex::import::{LatexClassImportProvider, LatexPackageImportProvider};
-use self::latex::include::LatexIncludeCompletionProvider;
-use self::latex::label::LatexLabelCompletionProvider;
-use self::latex::theorem::LatexTheoremEnvironmentCompletionProvider;
-use self::latex::tikz::*;
-use self::latex::user::*;
-use self::preselect::PreselectCompletionProvider;
-use self::quality::OrderByQualityCompletionProvider;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use itertools::Itertools;
-use lsp_types::{CompletionItem, CompletionParams};
-use std::hash::{Hash, Hasher};
+pub use self::types::{CompletionItemData, Item, ItemData};
-pub const COMPLETION_LIMIT: usize = 50;
+use self::{
+ bibtex::{
+ cmd::complete_bibtex_commands, entry_type::complete_bibtex_entry_types,
+ field_name::complete_bibtex_fields,
+ },
+ latex::{
+ argument::complete_latex_arguments,
+ begin_cmd::complete_latex_begin_command,
+ citation::complete_latex_citations,
+ color::complete_latex_colors,
+ color_model::complete_latex_color_models,
+ component::{complete_latex_component_commands, complete_latex_component_environments},
+ glossary::complete_latex_glossary_entries,
+ import::{complete_latex_classes, complete_latex_packages},
+ include::complete_latex_includes,
+ label::complete_latex_labels,
+ theorem::complete_latex_theorem_environments,
+ tikz_lib::{complete_latex_pgf_libraries, complete_latex_tikz_libraries},
+ user::{complete_latex_user_commands, complete_latex_user_environments},
+ },
+ util::{adjust_kind, component_detail, current_word, image_documentation},
+};
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{
+ CompletionItem, CompletionParams, CompletionTextEdit, Documentation, InsertTextFormat,
+ MarkupContent, MarkupKind, RangeExt, TextEdit,
+ },
+ syntax::{self, Structure, SyntaxNode},
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
+use fuzzy_matcher::skim::fuzzy_match;
+use std::collections::HashSet;
-type MergeProvider = ConcatProvider<CompletionParams, CompletionItem>;
+pub const COMPLETION_LIMIT: usize = 50;
-pub struct CompletionProvider {
- provider: OrderByQualityCompletionProvider<PreselectCompletionProvider<MergeProvider>>,
-}
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
+pub struct CompletionProvider;
impl CompletionProvider {
pub fn new() -> Self {
- Self {
- provider: OrderByQualityCompletionProvider::new(PreselectCompletionProvider::new(
- ConcatProvider::new(vec![
- Box::new(BibtexEntryTypeCompletionProvider),
- Box::new(BibtexFieldNameCompletionProvider),
- Box::new(BibtexCommandCompletionProvider),
- Box::new(LatexPgfLibraryCompletionProvider),
- Box::new(LatexTikzLibraryCompletionProvider),
- Box::new(LatexColorCompletionProvider),
- Box::new(LatexColorModelCompletionProvider),
- Box::new(LatexArgumentCompletionProvider),
- Box::new(LatexComponentEnvironmentCompletionProvider),
- Box::new(LatexTheoremEnvironmentCompletionProvider),
- Box::new(LatexLabelCompletionProvider),
- Box::new(LatexCitationCompletionProvider),
- Box::new(LatexGlossaryCompletionProvider),
- Box::new(LatexIncludeCompletionProvider),
- Box::new(LatexClassImportProvider),
- Box::new(LatexPackageImportProvider),
- Box::new(LatexBeginCommandCompletionProvider),
- Box::new(LatexComponentCommandCompletionProvider),
- Box::new(LatexUserCommandCompletionProvider),
- Box::new(LatexUserEnvironmentCompletionProvider),
- ]),
- )),
- }
- }
-}
-
-impl Default for CompletionProvider {
- fn default() -> Self {
- Self::new()
+ Self
}
}
+#[async_trait]
impl FeatureProvider for CompletionProvider {
type Params = CompletionParams;
type Output = Vec<CompletionItem>;
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- self.provider
- .execute(request)
- .await
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ let items = complete_all(req).await;
+ let mut items = dedup(items);
+ preselect(req, &mut items);
+ score(req, &mut items);
+
+ items.sort_by_key(|item| (!item.preselect, -item.score.unwrap_or(std::i64::MIN + 1)));
+ items
.into_iter()
- .map(LabeledCompletionItem)
- .unique()
- .map(|item| item.0)
.take(COMPLETION_LIMIT)
+ .filter(|item| item.score.is_some())
+ .map(|item| convert(req, item))
+ .enumerate()
+ .map(|(i, item)| append_sort_text(item, i))
.collect()
}
}
-#[derive(Debug, Clone)]
-struct LabeledCompletionItem(CompletionItem);
+async fn complete_all<'a>(req: &'a FeatureRequest<CompletionParams>) -> Vec<Item<'a>> {
+ let mut items = Vec::new();
+ complete_bibtex_commands(req, &mut items).await;
+ complete_bibtex_entry_types(req, &mut items).await;
+ complete_bibtex_fields(req, &mut items).await;
+ complete_latex_arguments(req, &mut items).await;
+ complete_latex_begin_command(req, &mut items).await;
+ complete_latex_colors(req, &mut items).await;
+ complete_latex_color_models(req, &mut items).await;
+ complete_latex_glossary_entries(req, &mut items).await;
+ complete_latex_citations(req, &mut items).await;
+ complete_latex_classes(req, &mut items).await;
+ complete_latex_packages(req, &mut items).await;
+ complete_latex_includes(req, &mut items).await;
+ complete_latex_labels(req, &mut items).await;
+ complete_latex_pgf_libraries(req, &mut items).await;
+ complete_latex_tikz_libraries(req, &mut items).await;
+ complete_latex_component_environments(req, &mut items).await;
+ complete_latex_theorem_environments(req, &mut items).await;
+ complete_latex_user_environments(req, &mut items).await;
+ complete_latex_component_commands(req, &mut items).await;
+ complete_latex_user_commands(req, &mut items).await;
+ items
+}
-impl PartialEq for LabeledCompletionItem {
- fn eq(&self, other: &Self) -> bool {
- self.0.label == other.0.label
+fn dedup<'a>(items: Vec<Item<'a>>) -> Vec<Item<'a>> {
+ let mut labels = HashSet::new();
+ let mut insert = vec![false; items.len()];
+ for (i, item) in items.iter().enumerate() {
+ insert[i] = labels.insert(item.data.label());
}
+ items
+ .into_iter()
+ .enumerate()
+ .filter(|(i, _)| insert[*i])
+ .map(|(_, item)| item)
+ .collect()
}
-impl Eq for LabeledCompletionItem {}
+fn preselect(req: &FeatureRequest<CompletionParams>, items: &mut [Item]) {
+ let pos = req.params.text_document_position.position;
+ if let DocumentContent::Latex(table) = &req.current().content {
+ for env in &table.environments {
+ if let Some(name) = env.left.name(&table) {
+ let right_args = table
+ .extract_group(env.right.parent, syntax::latex::GroupKind::Group, 0)
+ .unwrap();
+ let right_args_range = table[right_args].range();
+ let cond1 = right_args_range.contains_exclusive(pos);
+ let cond2 = table
+ .as_group(right_args)
+ .and_then(|group| group.right.as_ref())
+ .is_none()
+ && right_args_range.contains(pos);
-impl Hash for LabeledCompletionItem {
- fn hash<H: Hasher>(&self, state: &mut H) {
- self.0.label.hash(state);
+ if cond1 || cond2 {
+ for symbol in items.iter_mut() {
+ if symbol.data.label() == name.text() {
+ symbol.preselect = true;
+ break;
+ }
+ }
+ }
+ }
+ }
}
}
+
+fn score(req: &FeatureRequest<CompletionParams>, items: &mut Vec<Item>) {
+ let current_word = current_word(req);
+ let pattern = current_word.as_deref().unwrap_or_default();
+ for item in items {
+ item.score = match &item.data {
+ ItemData::ComponentCommand { name, .. } => fuzzy_match(name, pattern),
+ ItemData::ComponentEnvironment { name, .. } => fuzzy_match(name, pattern),
+ ItemData::UserCommand { name } => fuzzy_match(name, pattern),
+ ItemData::UserEnvironment { name } => fuzzy_match(name, pattern),
+ ItemData::Label { text, .. } => fuzzy_match(&text, pattern),
+ ItemData::Class { name } => fuzzy_match(&name, pattern),
+ ItemData::Package { name } => fuzzy_match(&name, pattern),
+ ItemData::PgfLibrary { name } => fuzzy_match(name, pattern),
+ ItemData::TikzLibrary { name } => fuzzy_match(name, pattern),
+ ItemData::File { name } => fuzzy_match(name, pattern),
+ ItemData::Directory { name } => fuzzy_match(name, pattern),
+ ItemData::Citation { text, .. } => fuzzy_match(&text, pattern),
+ ItemData::Argument { name, .. } => fuzzy_match(&name, pattern),
+ ItemData::BeginCommand => fuzzy_match("begin", pattern),
+ ItemData::Color { name } => fuzzy_match(name, pattern),
+ ItemData::ColorModel { name } => fuzzy_match(name, pattern),
+ ItemData::GlossaryEntry { name } => fuzzy_match(name, pattern),
+ ItemData::EntryType { ty } => fuzzy_match(&ty.name, pattern),
+ ItemData::Field { field } => fuzzy_match(&field.name, pattern),
+ };
+ }
+}
+
+fn convert(req: &FeatureRequest<CompletionParams>, item: Item) -> CompletionItem {
+ let mut new_item = match item.data {
+ ItemData::ComponentCommand {
+ name,
+ image,
+ glyph,
+ file_names,
+ } => {
+ let detail = glyph.map_or_else(
+ || component_detail(file_names),
+ |glyph| format!("{}, {}", glyph, component_detail(file_names)),
+ );
+ let documentation = image.and_then(|img| image_documentation(&req, &name, img));
+ let text_edit = TextEdit::new(item.range, name.into());
+ CompletionItem {
+ kind: Some(adjust_kind(req, Structure::Command.completion_kind())),
+ data: Some(CompletionItemData::Command.into()),
+ documentation,
+ text_edit: Some(CompletionTextEdit::Edit(text_edit)),
+ ..CompletionItem::new_simple(name.into(), detail)
+ }
+ }
+ ItemData::ComponentEnvironment { name, file_names } => {
+ let text_edit = TextEdit::new(item.range, name.into());
+ CompletionItem {
+ kind: Some(adjust_kind(req, Structure::Environment.completion_kind())),
+ data: Some(CompletionItemData::Environment.into()),
+ text_edit: Some(CompletionTextEdit::Edit(text_edit)),
+ ..CompletionItem::new_simple(name.into(), component_detail(file_names))
+ }
+ }
+ ItemData::UserCommand { name } => {
+ let detail = "user-defined".into();
+ let text_edit = TextEdit::new(item.range, name.into());
+ CompletionItem {
+ kind: Some(adjust_kind(req, Structure::Command.completion_kind())),
+ data: Some(CompletionItemData::Command.into()),
+ text_edit: Some(CompletionTextEdit::Edit(text_edit)),
+ ..CompletionItem::new_simple(name.into(), detail)
+ }
+ }
+ ItemData::UserEnvironment { name } => {
+ let detail = "user-defined".into();
+ let text_edit = TextEdit::new(item.range, name.into());
+ CompletionItem {
+ kind: Some(adjust_kind(req, Structure::Environment.completion_kind())),
+ data: Some(CompletionItemData::Environment.into()),
+ text_edit: Some(CompletionTextEdit::Edit(text_edit)),
+ ..CompletionItem::new_simple(name.into(), detail)
+ }
+ }
+ ItemData::Label {
+ name,
+ kind,
+ header,
+ footer,
+ text,
+ } => {
+ let text_edit = TextEdit::new(item.range, name.into());
+ CompletionItem {
+ label: name.into(),
+ kind: Some(adjust_kind(req, kind.completion_kind())),
+ data: Some(CompletionItemData::Label.into()),
+ text_edit: Some(CompletionTextEdit::Edit(text_edit)),
+ filter_text: Some(text.clone()),
+ sort_text: Some(text),
+ detail: header,
+ documentation: footer.map(Documentation::String),
+ ..CompletionItem::default()
+ }
+ }
+ ItemData::Class { name } => {
+ let text_edit = TextEdit::new(item.range, name.as_ref().into());
+ CompletionItem {
+ label: name.into_owned(),
+ kind: Some(adjust_kind(req, Structure::Class.completion_kind())),
+ data: Some(CompletionItemData::Class.into()),
+ text_edit: Some(CompletionTextEdit::Edit(text_edit)),
+ ..CompletionItem::default()
+ }
+ }
+ ItemData::Package { name } => {
+ let text_edit = TextEdit::new(item.range, name.as_ref().into());
+ CompletionItem {
+ label: name.into_owned(),
+ kind: Some(adjust_kind(req, Structure::Package.completion_kind())),
+ data: Some(CompletionItemData::Package.into()),
+ text_edit: Some(CompletionTextEdit::Edit(text_edit)),
+ ..CompletionItem::default()
+ }
+ }
+ ItemData::PgfLibrary { name } => {
+ let text_edit = TextEdit::new(item.range, name.into());
+ CompletionItem {
+ label: name.into(),
+ kind: Some(adjust_kind(req, Structure::PgfLibrary.completion_kind())),
+ data: Some(CompletionItemData::PgfLibrary.into()),
+ text_edit: Some(CompletionTextEdit::Edit(text_edit)),
+ ..CompletionItem::default()
+ }
+ }
+ ItemData::TikzLibrary { name } => {
+ let text_edit = TextEdit::new(item.range, name.into());
+ CompletionItem {
+ label: name.into(),
+ kind: Some(adjust_kind(req, Structure::TikzLibrary.completion_kind())),
+ data: Some(CompletionItemData::TikzLibrary.into()),
+ text_edit: Some(CompletionTextEdit::Edit(text_edit)),
+ ..CompletionItem::default()
+ }
+ }
+ ItemData::File { name } => {
+ let text_edit = TextEdit::new(item.range, name.clone());
+ CompletionItem {
+ label: name,
+ kind: Some(adjust_kind(req, Structure::File.completion_kind())),
+ data: Some(CompletionItemData::File.into()),
+ text_edit: Some(CompletionTextEdit::Edit(text_edit)),
+ ..CompletionItem::default()
+ }
+ }
+ ItemData::Directory { name } => {
+ let text_edit = TextEdit::new(item.range, name.clone());
+ CompletionItem {
+ label: name,
+ kind: Some(adjust_kind(req, Structure::Folder.completion_kind())),
+ data: Some(CompletionItemData::Folder.into()),
+ text_edit: Some(CompletionTextEdit::Edit(text_edit)),
+ ..CompletionItem::default()
+ }
+ }
+ ItemData::Citation { uri, key, text, ty } => {
+ let text_edit = TextEdit::new(item.range, key.into());
+ CompletionItem {
+ label: key.into(),
+ kind: Some(adjust_kind(req, ty.completion_kind())),
+ filter_text: Some(text.clone()),
+ sort_text: Some(text),
+ data: Some(
+ CompletionItemData::Citation {
+ uri: uri.clone(),
+ key: key.into(),
+ }
+ .into(),
+ ),
+ text_edit: Some(CompletionTextEdit::Edit(text_edit)),
+ ..CompletionItem::default()
+ }
+ }
+ ItemData::Argument { name, image } => {
+ let text_edit = TextEdit::new(item.range, name.into());
+ CompletionItem {
+ label: name.into(),
+ kind: Some(adjust_kind(req, Structure::Argument.completion_kind())),
+ data: Some(CompletionItemData::Argument.into()),
+ text_edit: Some(CompletionTextEdit::Edit(text_edit)),
+ documentation: image.and_then(|image| image_documentation(&req, &name, image)),
+ ..CompletionItem::default()
+ }
+ }
+ ItemData::BeginCommand => CompletionItem {
+ kind: Some(adjust_kind(req, Structure::Snippet.completion_kind())),
+ data: Some(CompletionItemData::CommandSnippet.into()),
+ insert_text: Some("begin{$1}\n\t$0\n\\end{$1}".into()),
+ insert_text_format: Some(InsertTextFormat::Snippet),
+ ..CompletionItem::new_simple("begin".into(), component_detail(&[]))
+ },
+ ItemData::Color { name } => {
+ let text_edit = TextEdit::new(item.range, name.into());
+ CompletionItem {
+ label: name.into(),
+ kind: Some(adjust_kind(req, Structure::Color.completion_kind())),
+ data: Some(CompletionItemData::Color.into()),
+ text_edit: Some(CompletionTextEdit::Edit(text_edit)),
+ ..CompletionItem::default()
+ }
+ }
+ ItemData::ColorModel { name } => {
+ let text_edit = TextEdit::new(item.range, name.into());
+ CompletionItem {
+ label: name.into(),
+ kind: Some(adjust_kind(req, Structure::ColorModel.completion_kind())),
+ data: Some(CompletionItemData::ColorModel.into()),
+ text_edit: Some(CompletionTextEdit::Edit(text_edit)),
+ ..CompletionItem::default()
+ }
+ }
+ ItemData::GlossaryEntry { name } => {
+ let text_edit = TextEdit::new(item.range, name.into());
+ CompletionItem {
+ label: name.into(),
+ kind: Some(adjust_kind(req, Structure::GlossaryEntry.completion_kind())),
+ data: Some(CompletionItemData::GlossaryEntry.into()),
+ text_edit: Some(CompletionTextEdit::Edit(text_edit)),
+ ..CompletionItem::default()
+ }
+ }
+ ItemData::EntryType { ty } => {
+ let text_edit = TextEdit::new(item.range, (&ty.name).into());
+ let kind = Structure::Entry(ty.category).completion_kind();
+ CompletionItem {
+ label: (&ty.name).into(),
+ kind: Some(adjust_kind(req, kind)),
+ data: Some(CompletionItemData::EntryType.into()),
+ text_edit: Some(CompletionTextEdit::Edit(text_edit)),
+ documentation: ty.documentation.as_ref().map(|doc| {
+ Documentation::MarkupContent(MarkupContent {
+ kind: MarkupKind::Markdown,
+ value: doc.into(),
+ })
+ }),
+ ..CompletionItem::default()
+ }
+ }
+ ItemData::Field { field } => {
+ let text_edit = TextEdit::new(item.range, (&field.name).into());
+ CompletionItem {
+ label: (&field.name).into(),
+ kind: Some(adjust_kind(req, Structure::Field.completion_kind())),
+ data: Some(CompletionItemData::FieldName.into()),
+ text_edit: Some(CompletionTextEdit::Edit(text_edit)),
+ documentation: Some(Documentation::MarkupContent(MarkupContent {
+ kind: MarkupKind::Markdown,
+ value: (&field.documentation).into(),
+ })),
+ ..CompletionItem::default()
+ }
+ }
+ };
+ new_item.preselect = Some(item.preselect);
+ new_item
+}
+
+fn append_sort_text(mut item: CompletionItem, index: usize) -> CompletionItem {
+ let sort_prefix = format!("{:0>2}", index);
+ match &item.sort_text {
+ Some(sort_text) => {
+ item.sort_text = Some(format!("{} {}", sort_prefix, sort_text));
+ }
+ None => {
+ item.sort_text = Some(sort_prefix);
+ }
+ };
+ item
+}
diff --git a/support/texlab/src/completion/preselect.rs b/support/texlab/src/completion/preselect.rs
deleted file mode 100644
index dd4265f5c6..0000000000
--- a/support/texlab/src/completion/preselect.rs
+++ /dev/null
@@ -1,55 +0,0 @@
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{CompletionItem, CompletionParams};
-
-#[derive(Debug)]
-pub struct PreselectCompletionProvider<F> {
- provider: F,
-}
-
-impl<F> PreselectCompletionProvider<F> {
- pub fn new(provider: F) -> Self {
- Self { provider }
- }
-}
-
-impl<F> FeatureProvider for PreselectCompletionProvider<F>
-where
- F: FeatureProvider<Params = CompletionParams, Output = Vec<CompletionItem>> + Send + Sync,
-{
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- let mut items = self.provider.execute(request).await;
- if let SyntaxTree::Latex(tree) = &request.document().tree {
- for environment in &tree.env.environments {
- if let Some(name) = environment.left.name() {
- let right_args = &environment.right.command.args[0];
- let cond1 = right_args
- .range()
- .contains_exclusive(request.params.text_document_position.position);
- let cond2 = right_args.right.is_none()
- && right_args
- .range()
- .contains(request.params.text_document_position.position);
-
- if cond1 || cond2 {
- for item in &mut items {
- item.preselect = Some(false);
- if item.label == name.text() {
- item.preselect = Some(true);
- break;
- }
- }
- }
- }
- }
- }
-
- items
- }
-}
diff --git a/support/texlab/src/completion/quality.rs b/support/texlab/src/completion/quality.rs
deleted file mode 100644
index d643219809..0000000000
--- a/support/texlab/src/completion/quality.rs
+++ /dev/null
@@ -1,125 +0,0 @@
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{CompletionItem, CompletionParams, Position};
-use std::borrow::Cow;
-
-pub struct OrderByQualityCompletionProvider<F> {
- pub provider: F,
-}
-
-impl<F> OrderByQualityCompletionProvider<F> {
- pub fn new(provider: F) -> Self {
- Self { provider }
- }
-}
-
-impl<F> FeatureProvider for OrderByQualityCompletionProvider<F>
-where
- F: FeatureProvider<Params = CompletionParams, Output = Vec<CompletionItem>> + Send + Sync,
-{
- type Params = CompletionParams;
- type Output = Vec<CompletionItem>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- let query = Self::get_query(
- request.document(),
- request.params.text_document_position.position,
- );
- let mut items = self.provider.execute(&request).await;
- items.sort_by_key(|item| -Self::get_quality(&query, &item));
- items
- }
-}
-
-impl<F> OrderByQualityCompletionProvider<F> {
- fn get_query(document: &Document, position: Position) -> Option<Cow<str>> {
- match &document.tree {
- SyntaxTree::Latex(tree) => {
- let node = tree
- .find_command_by_name(position)
- .map(LatexNode::Command)
- .or_else(|| tree.find(position).into_iter().last())?;
-
- match node {
- LatexNode::Root(_) | LatexNode::Group(_) => Some("".into()),
- LatexNode::Command(command) => Some(command.name.text()[1..].to_owned().into()),
- LatexNode::Text(text) => text
- .words
- .iter()
- .find(|word| word.range().contains(position))
- .map(|word| word.text().to_owned().into()),
- LatexNode::Comma(_) => Some(",".into()),
- LatexNode::Math(math) => Some(math.token.text().to_owned().into()),
- }
- }
- SyntaxTree::Bibtex(tree) => {
- fn get_type_query(ty: &BibtexToken, position: Position) -> Option<Cow<str>> {
- if ty.range().contains(position) {
- Some((&ty.text()[1..]).into())
- } else {
- Some("".into())
- }
- }
- match tree.find(position).pop()? {
- BibtexNode::Root(_) => Some("".into()),
- BibtexNode::Preamble(preamble) => get_type_query(&preamble.ty, position),
- BibtexNode::String(string) => get_type_query(&string.ty, position),
- BibtexNode::Entry(entry) => get_type_query(&entry.ty, position),
- BibtexNode::Comment(comment) => Some(comment.token.text().into()),
- BibtexNode::Field(field) => {
- if field.name.range().contains(position) {
- Some(field.name.text().into())
- } else {
- Some("".into())
- }
- }
- BibtexNode::Word(word) => Some(word.token.text().into()),
- BibtexNode::Command(command) => Some((&command.token.text()[1..]).into()),
- BibtexNode::QuotedContent(_)
- | BibtexNode::BracedContent(_)
- | BibtexNode::Concat(_) => Some("".into()),
- }
- }
- }
- }
-
- fn get_quality(query: &Option<Cow<str>>, item: &CompletionItem) -> i32 {
- if item.preselect == Some(true) {
- return 8;
- }
-
- let label = &item.label;
- if let Some(query) = query {
- if label == query {
- return 7;
- }
-
- if label.to_lowercase() == query.to_lowercase() {
- return 6;
- }
-
- if label.starts_with(query.as_ref()) {
- return 5;
- }
-
- if label.to_lowercase().starts_with(&query.to_lowercase()) {
- return 4;
- }
-
- if label.contains(query.as_ref()) {
- return 3;
- }
-
- if label.to_lowercase().contains(&query.to_lowercase()) {
- return 2;
- }
-
- 1
- } else {
- 0
- }
- }
-}
diff --git a/support/texlab/src/completion/types.rs b/support/texlab/src/completion/types.rs
new file mode 100644
index 0000000000..f1b272f21e
--- /dev/null
+++ b/support/texlab/src/completion/types.rs
@@ -0,0 +1,150 @@
+use crate::{
+ protocol::{Range, Uri},
+ syntax::{BibtexEntryTypeDoc, BibtexFieldDoc, Structure},
+};
+use serde::{Deserialize, Serialize};
+use std::borrow::Cow;
+
+#[derive(Debug, Clone)]
+pub struct Item<'a> {
+ pub range: Range,
+ pub data: ItemData<'a>,
+ pub preselect: bool,
+ pub score: Option<i64>,
+}
+
+impl<'a> Item<'a> {
+ pub fn new(range: Range, data: ItemData<'a>) -> Self {
+ Self {
+ range,
+ data,
+ preselect: false,
+ score: None,
+ }
+ }
+}
+
+#[derive(Debug, Clone)]
+pub enum ItemData<'a> {
+ ComponentCommand {
+ name: &'a str,
+ image: Option<&'a str>,
+ glyph: Option<&'a str>,
+ file_names: &'a [String],
+ },
+ ComponentEnvironment {
+ name: &'a str,
+ file_names: &'a [String],
+ },
+ UserCommand {
+ name: &'a str,
+ },
+ UserEnvironment {
+ name: &'a str,
+ },
+ Label {
+ name: &'a str,
+ kind: Structure,
+ header: Option<String>,
+ footer: Option<String>,
+ text: String,
+ },
+ PgfLibrary {
+ name: &'a str,
+ },
+ TikzLibrary {
+ name: &'a str,
+ },
+ Package {
+ name: Cow<'a, str>,
+ },
+ Class {
+ name: Cow<'a, str>,
+ },
+ File {
+ name: String,
+ },
+ Directory {
+ name: String,
+ },
+ Citation {
+ uri: &'a Uri,
+ key: &'a str,
+ text: String,
+ ty: Structure,
+ },
+ Argument {
+ name: &'a str,
+ image: Option<&'a str>,
+ },
+ BeginCommand,
+ Color {
+ name: &'a str,
+ },
+ ColorModel {
+ name: &'a str,
+ },
+ GlossaryEntry {
+ name: &'a str,
+ },
+ EntryType {
+ ty: &'a BibtexEntryTypeDoc,
+ },
+ Field {
+ field: &'a BibtexFieldDoc,
+ },
+}
+
+impl<'a> ItemData<'a> {
+ pub fn label<'b: 'a>(&'b self) -> &'b str {
+ match self {
+ Self::ComponentCommand { name, .. } => name,
+ Self::ComponentEnvironment { name, .. } => name,
+ Self::UserCommand { name } => name,
+ Self::UserEnvironment { name } => name,
+ Self::Label { name, .. } => name,
+ Self::Class { name } => &name,
+ Self::Package { name } => &name,
+ Self::PgfLibrary { name } => name,
+ Self::TikzLibrary { name } => name,
+ Self::File { name } => &name,
+ Self::Directory { name } => &name,
+ Self::Citation { key, .. } => key,
+ Self::Argument { name, .. } => name,
+ Self::BeginCommand => "begin",
+ Self::Color { name } => name,
+ Self::ColorModel { name } => name,
+ Self::GlossaryEntry { name } => name,
+ Self::EntryType { ty } => &ty.name,
+ Self::Field { field } => &field.name,
+ }
+ }
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub enum CompletionItemData {
+ Command,
+ CommandSnippet,
+ Environment,
+ Label,
+ Folder,
+ File,
+ PgfLibrary,
+ TikzLibrary,
+ Color,
+ ColorModel,
+ Package,
+ Class,
+ EntryType,
+ FieldName,
+ Citation { uri: Uri, key: String },
+ Argument,
+ GlossaryEntry,
+}
+
+impl Into<serde_json::Value> for CompletionItemData {
+ fn into(self) -> serde_json::Value {
+ serde_json::to_value(self).unwrap()
+ }
+}
diff --git a/support/texlab/src/completion/util.rs b/support/texlab/src/completion/util.rs
new file mode 100644
index 0000000000..ec3c8eb406
--- /dev/null
+++ b/support/texlab/src/completion/util.rs
@@ -0,0 +1,121 @@
+use crate::{
+ feature::FeatureRequest,
+ protocol::{
+ CompletionItemKind, CompletionParams, Documentation, MarkupContent, MarkupKind, Position,
+ RangeExt,
+ },
+ syntax::{bibtex, latex, SyntaxNode},
+ workspace::DocumentContent,
+};
+use std::borrow::Cow;
+
+pub fn current_word(req: &FeatureRequest<CompletionParams>) -> Option<Cow<str>> {
+ let pos = req.params.text_document_position.position;
+ match &req.current().content {
+ DocumentContent::Latex(table) => {
+ if let Some(node) = table.find_command_by_short_name_range(pos) {
+ return Some(command_word(table.as_command(node).unwrap()));
+ }
+
+ match &table[table.find(pos).into_iter().last()?] {
+ latex::Node::Root(_) | latex::Node::Group(_) => Some("".into()),
+ latex::Node::Command(cmd) => Some(command_word(cmd)),
+ latex::Node::Text(text) => text
+ .words
+ .iter()
+ .find(|word| word.range().contains(pos))
+ .map(|word| word.text().split('/').last().unwrap().to_owned().into()),
+ latex::Node::Comma(_) => Some(",".into()),
+ latex::Node::Math(math) => Some(math.token.text().to_owned().into()),
+ }
+ }
+ DocumentContent::Bibtex(tree) => {
+ fn type_query(ty: &bibtex::Token, pos: Position) -> Option<Cow<str>> {
+ if ty.range().contains(pos) {
+ Some((&ty.text()[1..]).into())
+ } else {
+ Some("".into())
+ }
+ }
+
+ match &tree.graph[tree.find(pos).pop()?] {
+ bibtex::Node::Root(_) => Some("".into()),
+ bibtex::Node::Preamble(preamble) => type_query(&preamble.ty, pos),
+ bibtex::Node::String(string) => type_query(&string.ty, pos),
+ bibtex::Node::Entry(entry) => type_query(&entry.ty, pos),
+ bibtex::Node::Comment(comment) => Some(comment.token.text().into()),
+ bibtex::Node::Field(field) => {
+ if field.name.range().contains(pos) {
+ Some(field.name.text().into())
+ } else {
+ Some("".into())
+ }
+ }
+ bibtex::Node::Word(word) => Some(word.token.text().into()),
+ bibtex::Node::Command(cmd) => Some((&cmd.token.text()[1..]).into()),
+ bibtex::Node::QuotedContent(_)
+ | bibtex::Node::BracedContent(_)
+ | bibtex::Node::Concat(_) => Some("".into()),
+ }
+ }
+ }
+}
+
+fn command_word(cmd: &latex::Command) -> Cow<str> {
+ cmd.name.text()[1..].into()
+}
+
+pub fn component_detail(file_names: &[String]) -> String {
+ if file_names.is_empty() {
+ "built-in".to_owned()
+ } else {
+ file_names.join(", ")
+ }
+}
+
+pub fn image_documentation(
+ req: &FeatureRequest<CompletionParams>,
+ name: &str,
+ image: &str,
+) -> Option<Documentation> {
+ if supports_images(req) {
+ Some(Documentation::MarkupContent(MarkupContent {
+ kind: MarkupKind::Markdown,
+ value: format!(
+ "![{}](data:image/png;base64,{}|width=48,height=48)",
+ name, image
+ ),
+ }))
+ } else {
+ None
+ }
+}
+
+fn supports_images(req: &FeatureRequest<CompletionParams>) -> bool {
+ req.client_capabilities
+ .text_document
+ .as_ref()
+ .and_then(|cap| cap.completion.as_ref())
+ .and_then(|cap| cap.completion_item.as_ref())
+ .and_then(|cap| cap.documentation_format.as_ref())
+ .map_or(true, |formats| formats.contains(&MarkupKind::Markdown))
+}
+
+pub fn adjust_kind(
+ req: &FeatureRequest<CompletionParams>,
+ kind: CompletionItemKind,
+) -> CompletionItemKind {
+ if let Some(value_set) = req
+ .client_capabilities
+ .text_document
+ .as_ref()
+ .and_then(|cap| cap.completion.as_ref())
+ .and_then(|cap| cap.completion_item_kind.as_ref())
+ .and_then(|cap| cap.value_set.as_ref())
+ {
+ if value_set.contains(&kind) {
+ return kind;
+ }
+ }
+ CompletionItemKind::Text
+}
diff --git a/support/texlab/src/completion/data.rs b/support/texlab/src/components.rs
index 827b99bac1..76890c8b15 100644
--- a/support/texlab/src/completion/data.rs
+++ b/support/texlab/src/components.rs
@@ -1,10 +1,6 @@
-use crate::syntax::*;
-use crate::workspace::Document;
-use itertools::Itertools;
-use lsp_types::{MarkupContent, MarkupKind};
+use crate::protocol::{MarkupContent, MarkupKind};
use once_cell::sync::Lazy;
use serde::{Deserialize, Serialize};
-use std::sync::Arc;
#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
@@ -36,33 +32,6 @@ impl Database {
.unwrap()
}
- pub fn related_components(&self, documents: &[Arc<Document>]) -> Vec<&Component> {
- let mut start_components = vec![self.kernel()];
- for document in documents {
- if let SyntaxTree::Latex(tree) = &document.tree {
- tree.components
- .iter()
- .flat_map(|file| self.find(file))
- .for_each(|component| start_components.push(component))
- }
- }
-
- let mut all_components = Vec::new();
- for component in start_components {
- all_components.push(component);
- component
- .references
- .iter()
- .flat_map(|file| self.find(&file))
- .for_each(|component| all_components.push(component))
- }
-
- all_components
- .into_iter()
- .unique_by(|component| &component.file_names)
- .collect()
- }
-
pub fn exists(&self, file_name: &str) -> bool {
self.components
.iter()
@@ -120,6 +89,6 @@ pub struct Metadata {
pub description: Option<String>,
}
-const JSON: &str = include_str!("data.json");
+const JSON: &str = include_str!("../data/components.json");
-pub static DATABASE: Lazy<Database> = Lazy::new(|| serde_json::from_str(JSON).unwrap());
+pub static COMPONENT_DATABASE: Lazy<Database> = Lazy::new(|| serde_json::from_str(JSON).unwrap());
diff --git a/support/texlab/src/config.rs b/support/texlab/src/config.rs
new file mode 100644
index 0000000000..84de2268fa
--- /dev/null
+++ b/support/texlab/src/config.rs
@@ -0,0 +1,103 @@
+use crate::protocol::*;
+use futures::lock::Mutex;
+use log::{error, warn};
+use serde::de::DeserializeOwned;
+use std::sync::Arc;
+
+#[derive(Debug)]
+pub struct ConfigManager<C> {
+ client: Arc<C>,
+ client_capabilities: Arc<ClientCapabilities>,
+ options: Mutex<Options>,
+}
+
+impl<C: LspClient + Send + Sync + 'static> ConfigManager<C> {
+ pub fn new(client: Arc<C>, client_capabilities: Arc<ClientCapabilities>) -> Self {
+ Self {
+ client,
+ client_capabilities,
+ options: Mutex::default(),
+ }
+ }
+
+ pub async fn get(&self) -> Options {
+ self.options.lock().await.clone()
+ }
+
+ pub async fn register(&self) {
+ if !self.client_capabilities.has_pull_configuration_support()
+ && self.client_capabilities.has_push_configuration_support()
+ {
+ let registration = Registration {
+ id: "pull-config".into(),
+ method: "workspace/didChangeConfiguration".into(),
+ register_options: None,
+ };
+ let params = RegistrationParams {
+ registrations: vec![registration],
+ };
+
+ if let Err(why) = self.client.register_capability(params).await {
+ error!(
+ "Failed to register \"workspace/didChangeConfiguration\": {}",
+ why.message
+ );
+ }
+ }
+ }
+
+ pub async fn push(&self, options: serde_json::Value) {
+ match serde_json::from_value(options) {
+ Ok(options) => {
+ *self.options.lock().await = options;
+ }
+ Err(why) => {
+ error!("Invalid configuration: {}", why);
+ }
+ }
+ }
+
+ pub async fn pull(&self) -> bool {
+ if self.client_capabilities.has_pull_configuration_support() {
+ let latex = self.pull_section("latex").await;
+ let bibtex = self.pull_section("bibtex").await;
+
+ let new_options = Options {
+ latex: Some(latex),
+ bibtex: Some(bibtex),
+ };
+ let mut old_options = self.options.lock().await;
+ let has_changed = *old_options != new_options;
+ *old_options = new_options;
+ has_changed
+ } else {
+ false
+ }
+ }
+
+ async fn pull_section<T: DeserializeOwned + Default>(&self, section: &str) -> T {
+ let params = ConfigurationParams {
+ items: vec![ConfigurationItem {
+ section: Some(section.into()),
+ scope_uri: None,
+ }],
+ };
+
+ match self.client.configuration(params).await {
+ Ok(json) => match serde_json::from_value::<Vec<T>>(json) {
+ Ok(config) => config.into_iter().next().unwrap(),
+ Err(_) => {
+ warn!("Invalid configuration: {}", section);
+ T::default()
+ }
+ },
+ Err(why) => {
+ error!(
+ "Retrieving configuration for {} failed: {}",
+ section, why.message
+ );
+ T::default()
+ }
+ }
+ }
+}
diff --git a/support/texlab/src/definition/bibtex_string.rs b/support/texlab/src/definition/bibtex_string.rs
index 0e4f643153..a1fe5132c0 100644
--- a/support/texlab/src/definition/bibtex_string.rs
+++ b/support/texlab/src/definition/bibtex_string.rs
@@ -1,20 +1,23 @@
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{LocationLink, Position, TextDocumentPositionParams};
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{LocationLink, Position, TextDocumentPositionParams, Uri},
+ syntax::{bibtex, SyntaxNode},
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
pub struct BibtexStringDefinitionProvider;
+#[async_trait]
impl FeatureProvider for BibtexStringDefinitionProvider {
type Params = TextDocumentPositionParams;
type Output = Vec<LocationLink>;
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- if let SyntaxTree::Bibtex(tree) = &request.document().tree {
- if let Some(reference) = Self::find_reference(tree, request.params.position) {
- return Self::find_definitions(&request.view.document.uri, tree, reference);
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ if let DocumentContent::Bibtex(tree) = &req.current().content {
+ if let Some(reference) = Self::find_reference(tree, req.params.position) {
+ return Self::find_definitions(&req.current().uri, tree, reference);
}
}
Vec::new()
@@ -22,31 +25,36 @@ impl FeatureProvider for BibtexStringDefinitionProvider {
}
impl BibtexStringDefinitionProvider {
- fn find_reference(tree: &BibtexSyntaxTree, position: Position) -> Option<&BibtexToken> {
- let mut nodes = tree.find(position);
+ fn find_reference(tree: &bibtex::Tree, pos: Position) -> Option<&bibtex::Token> {
+ let mut nodes = tree.find(pos);
nodes.reverse();
- match (&nodes[0], &nodes.get(1)) {
- (BibtexNode::Word(word), Some(BibtexNode::Field(_)))
- | (BibtexNode::Word(word), Some(BibtexNode::Concat(_))) => Some(&word.token),
+ match (
+ &tree.graph[nodes[0]],
+ nodes.get(1).map(|node| &tree.graph[*node]),
+ ) {
+ (bibtex::Node::Word(word), Some(bibtex::Node::Field(_)))
+ | (bibtex::Node::Word(word), Some(bibtex::Node::Concat(_))) => Some(&word.token),
_ => None,
}
}
fn find_definitions(
uri: &Uri,
- tree: &BibtexSyntaxTree,
- reference: &BibtexToken,
+ tree: &bibtex::Tree,
+ reference: &bibtex::Token,
) -> Vec<LocationLink> {
let mut links = Vec::new();
- for string in tree.strings() {
- if let Some(name) = &string.name {
- if name.text() == reference.text() {
- links.push(LocationLink {
- origin_selection_range: Some(reference.range()),
- target_uri: uri.clone().into(),
- target_range: string.range(),
- target_selection_range: name.range(),
- });
+ for node in tree.children(tree.root) {
+ if let Some(string) = tree.as_string(node) {
+ if let Some(name) = &string.name {
+ if name.text() == reference.text() {
+ links.push(LocationLink {
+ origin_selection_range: Some(reference.range()),
+ target_uri: uri.clone().into(),
+ target_range: string.range(),
+ target_selection_range: name.range(),
+ });
+ }
}
}
}
@@ -57,76 +65,107 @@ impl BibtexStringDefinitionProvider {
#[cfg(test)]
mod tests {
use super::*;
- use crate::range::RangeExt;
- use lsp_types::{Position, Range};
-
- #[test]
- fn test_simple() {
- let links = test_feature(
- BibtexStringDefinitionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.bib",
- "@string{foo = {bar}}\n@article{bar, author = foo}",
- )],
- main_file: "foo.bib",
- position: Position::new(1, 24),
- ..FeatureSpec::default()
- },
- );
-
- assert_eq!(
- links,
- vec![LocationLink {
- origin_selection_range: Some(Range::new_simple(1, 23, 1, 26)),
- target_uri: FeatureSpec::uri("foo.bib"),
- target_range: Range::new_simple(0, 0, 0, 20),
- target_selection_range: Range::new_simple(0, 8, 0, 11)
- }]
- );
+ use crate::{
+ feature::FeatureTester,
+ protocol::{Range, RangeExt},
+ };
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_links = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_position(BibtexStringDefinitionProvider)
+ .await;
+
+ assert!(actual_links.is_empty());
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_links = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_position(BibtexStringDefinitionProvider)
+ .await;
+
+ assert!(actual_links.is_empty());
+ }
+
+ #[tokio::test]
+ async fn simple() {
+ let actual_links = FeatureTester::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @string{foo = {bar}}
+ @article{bar, author = foo}
+ "#
+ ),
+ )
+ .main("main.bib")
+ .position(1, 24)
+ .test_position(BibtexStringDefinitionProvider)
+ .await;
+
+ let expected_links = vec![LocationLink {
+ origin_selection_range: Some(Range::new_simple(1, 23, 1, 26)),
+ target_uri: FeatureTester::uri("main.bib").into(),
+ target_range: Range::new_simple(0, 0, 0, 20),
+ target_selection_range: Range::new_simple(0, 8, 0, 11),
+ }];
+
+ assert_eq!(actual_links, expected_links);
}
- #[test]
- fn test_concat() {
- let links = test_feature(
- BibtexStringDefinitionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.bib",
- "@string{foo = {bar}}\n@article{bar, author = foo # \"bar\"}",
- )],
- main_file: "foo.bib",
- position: Position::new(1, 24),
- ..FeatureSpec::default()
- },
- );
-
- assert_eq!(
- links,
- vec![LocationLink {
- origin_selection_range: Some(Range::new_simple(1, 23, 1, 26)),
- target_uri: FeatureSpec::uri("foo.bib"),
- target_range: Range::new_simple(0, 0, 0, 20),
- target_selection_range: Range::new_simple(0, 8, 0, 11)
- }]
- );
+ #[tokio::test]
+ async fn concat() {
+ let actual_links = FeatureTester::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @string{foo = {bar}}
+ @article{bar, author = foo # "bar"}
+ "#
+ ),
+ )
+ .main("main.bib")
+ .position(1, 24)
+ .test_position(BibtexStringDefinitionProvider)
+ .await;
+
+ let expected_links = vec![LocationLink {
+ origin_selection_range: Some(Range::new_simple(1, 23, 1, 26)),
+ target_uri: FeatureTester::uri("main.bib").into(),
+ target_range: Range::new_simple(0, 0, 0, 20),
+ target_selection_range: Range::new_simple(0, 8, 0, 11),
+ }];
+
+ assert_eq!(actual_links, expected_links);
}
- #[test]
- fn test_field() {
- let links = test_feature(
- BibtexStringDefinitionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.bib",
- "@string{foo = {bar}}\n@article{bar, author = foo}",
- )],
- main_file: "foo.bib",
- position: Position::new(1, 18),
- ..FeatureSpec::default()
- },
- );
-
- assert!(links.is_empty());
+ #[tokio::test]
+ async fn field() {
+ let actual_links = FeatureTester::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @string{foo = {bar}}
+ @article{bar, author = foo}
+ "#
+ ),
+ )
+ .main("main.bib")
+ .position(1, 18)
+ .test_position(BibtexStringDefinitionProvider)
+ .await;
+
+ assert!(actual_links.is_empty());
}
}
diff --git a/support/texlab/src/definition/latex_citation.rs b/support/texlab/src/definition/latex_citation.rs
index daefa8b2ef..aa93e25fc0 100644
--- a/support/texlab/src/definition/latex_citation.rs
+++ b/support/texlab/src/definition/latex_citation.rs
@@ -1,22 +1,24 @@
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{LocationLink, TextDocumentPositionParams};
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{LocationLink, RangeExt, TextDocumentPositionParams},
+ syntax::{latex, SyntaxNode},
+ workspace::{Document, DocumentContent},
+};
+use async_trait::async_trait;
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct LatexCitationDefinitionProvider;
+#[async_trait]
impl FeatureProvider for LatexCitationDefinitionProvider {
type Params = TextDocumentPositionParams;
type Output = Vec<LocationLink>;
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
let mut links = Vec::new();
- if let Some(reference) = Self::find_reference(&request) {
- for document in request.related_documents() {
- Self::find_definitions(&document, &reference, &mut links);
+ if let Some(reference) = Self::find_reference(req) {
+ for doc in req.related() {
+ Self::find_definitions(&doc, &reference, &mut links);
}
}
links
@@ -24,96 +26,93 @@ impl FeatureProvider for LatexCitationDefinitionProvider {
}
impl LatexCitationDefinitionProvider {
- fn find_definitions(
- document: &Document,
- reference: &LatexToken,
- links: &mut Vec<LocationLink>,
- ) {
- if let SyntaxTree::Bibtex(tree) = &document.tree {
- for entry in tree.entries() {
+ fn find_reference(req: &FeatureRequest<TextDocumentPositionParams>) -> Option<&latex::Token> {
+ req.current().content.as_latex().and_then(|table| {
+ table
+ .citations
+ .iter()
+ .flat_map(|citation| citation.keys(&table))
+ .find(|key| key.range().contains(req.params.position))
+ })
+ }
+
+ fn find_definitions(doc: &Document, reference: &latex::Token, links: &mut Vec<LocationLink>) {
+ if let DocumentContent::Bibtex(tree) = &doc.content {
+ for entry in tree
+ .children(tree.root)
+ .filter_map(|node| tree.as_entry(node))
+ {
if let Some(key) = &entry.key {
if key.text() == reference.text() {
- let link = LocationLink {
+ links.push(LocationLink {
origin_selection_range: Some(reference.range()),
- target_uri: document.uri.clone().into(),
+ target_uri: doc.uri.clone().into(),
target_range: entry.range(),
target_selection_range: key.range(),
- };
- links.push(link);
+ });
}
}
}
}
}
-
- fn find_reference(request: &FeatureRequest<TextDocumentPositionParams>) -> Option<&LatexToken> {
- if let SyntaxTree::Latex(tree) = &request.document().tree {
- tree.citations
- .iter()
- .flat_map(LatexCitation::keys)
- .find(|key| key.range().contains(request.params.position))
- } else {
- None
- }
- }
}
#[cfg(test)]
mod tests {
use super::*;
- use lsp_types::{Position, Range};
+ use crate::{feature::FeatureTester, protocol::Range};
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_links = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_position(LatexCitationDefinitionProvider)
+ .await;
- #[test]
- fn test_has_definition() {
- let links = test_feature(
- LatexCitationDefinitionProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\addbibresource{baz.bib}\n\\cite{foo}"),
- FeatureSpec::file("bar.bib", "@article{foo, bar = {baz}}"),
- FeatureSpec::file("baz.bib", "@article{foo, bar = {baz}}"),
- ],
- main_file: "foo.tex",
- position: Position::new(1, 6),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- links,
- vec![LocationLink {
- origin_selection_range: Some(Range::new_simple(1, 6, 1, 9)),
- target_uri: FeatureSpec::uri("baz.bib"),
- target_range: Range::new_simple(0, 0, 0, 26),
- target_selection_range: Range::new_simple(0, 9, 0, 12)
- }]
- );
+ assert!(actual_links.is_empty());
}
- #[test]
- fn test_no_definition_latex() {
- let links = test_feature(
- LatexCitationDefinitionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "")],
- main_file: "foo.tex",
- position: Position::new(0, 0),
- ..FeatureSpec::default()
- },
- );
- assert!(links.is_empty());
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_links = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_position(LatexCitationDefinitionProvider)
+ .await;
+
+ assert!(actual_links.is_empty());
}
- #[test]
- fn test_no_definition_bibtex() {
- let links = test_feature(
- LatexCitationDefinitionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "")],
- main_file: "foo.bib",
- position: Position::new(0, 0),
- ..FeatureSpec::default()
- },
- );
- assert!(links.is_empty());
+ #[tokio::test]
+ async fn has_definition() {
+ let actual_links = FeatureTester::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \addbibresource{baz.bib}
+ \cite{foo}
+ "#
+ ),
+ )
+ .file("bar.bib", r#"@article{foo, bar = {baz}}"#)
+ .file("baz.bib", r#"@article{foo, bar = {baz}}"#)
+ .main("foo.tex")
+ .position(1, 6)
+ .test_position(LatexCitationDefinitionProvider)
+ .await;
+
+ let exepcted_links = vec![LocationLink {
+ origin_selection_range: Some(Range::new_simple(1, 6, 1, 9)),
+ target_uri: FeatureTester::uri("baz.bib").into(),
+ target_range: Range::new_simple(0, 0, 0, 26),
+ target_selection_range: Range::new_simple(0, 9, 0, 12),
+ }];
+
+ assert_eq!(actual_links, exepcted_links);
}
}
diff --git a/support/texlab/src/definition/latex_cmd.rs b/support/texlab/src/definition/latex_cmd.rs
new file mode 100644
index 0000000000..35fc42be4f
--- /dev/null
+++ b/support/texlab/src/definition/latex_cmd.rs
@@ -0,0 +1,154 @@
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{LocationLink, TextDocumentPositionParams},
+ syntax::SyntaxNode,
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
+pub struct LatexCommandDefinitionProvider;
+
+#[async_trait]
+impl FeatureProvider for LatexCommandDefinitionProvider {
+ type Params = TextDocumentPositionParams;
+ type Output = Vec<LocationLink>;
+
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ let mut links = Vec::new();
+ if let DocumentContent::Latex(table) = &req.current().content {
+ if let Some(cmd) = table
+ .find(req.params.position)
+ .last()
+ .and_then(|node| table.as_command(*node))
+ {
+ for doc in req.related() {
+ if let DocumentContent::Latex(table) = &doc.content {
+ table
+ .command_definitions
+ .iter()
+ .filter(|def| def.definition_name(&table) == cmd.name.text())
+ .map(|def| {
+ let def_range = table[def.parent].range();
+ LocationLink {
+ origin_selection_range: Some(cmd.range()),
+ target_uri: doc.uri.clone().into(),
+ target_range: def_range,
+ target_selection_range: def_range,
+ }
+ })
+ .for_each(|link| links.push(link));
+
+ table
+ .math_operators
+ .iter()
+ .filter(|op| op.definition_name(&table) == cmd.name.text())
+ .map(|op| {
+ let def_range = table[op.parent].range();
+ LocationLink {
+ origin_selection_range: Some(cmd.range()),
+ target_uri: doc.uri.clone().into(),
+ target_range: def_range,
+ target_selection_range: def_range,
+ }
+ })
+ .for_each(|link| links.push(link));
+ }
+ }
+ }
+ }
+ links
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::{
+ feature::FeatureTester,
+ protocol::{Range, RangeExt},
+ };
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_links = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_position(LatexCommandDefinitionProvider)
+ .await;
+
+ assert!(actual_links.is_empty());
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_links = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_position(LatexCommandDefinitionProvider)
+ .await;
+
+ assert!(actual_links.is_empty());
+ }
+
+ #[tokio::test]
+ async fn command_definition() {
+ let actual_links = FeatureTester::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \include{bar}
+ \foo
+ "#
+ ),
+ )
+ .file("bar.tex", r#"\newcommand{\foo}{bar}"#)
+ .file("baz.tex", r#"\newcommand{\foo}{baz}"#)
+ .main("foo.tex")
+ .position(1, 3)
+ .test_position(LatexCommandDefinitionProvider)
+ .await;
+
+ let expected_links = vec![LocationLink {
+ origin_selection_range: Some(Range::new_simple(1, 0, 1, 4)),
+ target_uri: FeatureTester::uri("bar.tex").into(),
+ target_range: Range::new_simple(0, 0, 0, 22),
+ target_selection_range: Range::new_simple(0, 0, 0, 22),
+ }];
+
+ assert_eq!(actual_links, expected_links);
+ }
+
+ #[tokio::test]
+ async fn math_operator() {
+ let actual_links = FeatureTester::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \include{bar}
+ \foo
+ "#
+ ),
+ )
+ .file("bar.tex", r#"\DeclareMathOperator{\foo}{bar}"#)
+ .file("baz.tex", r#"\DeclareMathOperator{\foo}{baz}"#)
+ .main("foo.tex")
+ .position(1, 3)
+ .test_position(LatexCommandDefinitionProvider)
+ .await;
+
+ let expected_links = vec![LocationLink {
+ origin_selection_range: Some(Range::new_simple(1, 0, 1, 4)),
+ target_uri: FeatureTester::uri("bar.tex").into(),
+ target_range: Range::new_simple(0, 0, 0, 31),
+ target_selection_range: Range::new_simple(0, 0, 0, 31),
+ }];
+
+ assert_eq!(actual_links, expected_links);
+ }
+}
diff --git a/support/texlab/src/definition/latex_command.rs b/support/texlab/src/definition/latex_command.rs
deleted file mode 100644
index 7f91412ef7..0000000000
--- a/support/texlab/src/definition/latex_command.rs
+++ /dev/null
@@ -1,106 +0,0 @@
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{LocationLink, TextDocumentPositionParams};
-
-pub struct LatexCommandDefinitionProvider;
-
-impl FeatureProvider for LatexCommandDefinitionProvider {
- type Params = TextDocumentPositionParams;
- type Output = Vec<LocationLink>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- let mut definitions = Vec::new();
- if let SyntaxTree::Latex(tree) = &request.document().tree {
- if let Some(LatexNode::Command(command)) = tree.find(request.params.position).last() {
- for document in request.related_documents() {
- if let SyntaxTree::Latex(tree) = &document.tree {
- tree.command_definitions
- .iter()
- .filter(|def| def.definition.name.text() == command.name.text())
- .map(|def| LocationLink {
- origin_selection_range: Some(command.range()),
- target_uri: document.uri.clone().into(),
- target_range: def.range(),
- target_selection_range: def.range(),
- })
- .for_each(|def| definitions.push(def));
-
- tree.math
- .operators
- .iter()
- .filter(|op| op.definition.name.text() == command.name.text())
- .map(|op| LocationLink {
- origin_selection_range: Some(command.range()),
- target_uri: document.uri.clone().into(),
- target_range: op.range(),
- target_selection_range: op.range(),
- })
- .for_each(|def| definitions.push(def));
- }
- }
- }
- }
- definitions
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use crate::range::RangeExt;
- use lsp_types::{Position, Range};
-
- #[test]
- fn test_command_definition() {
- let links = test_feature(
- LatexCommandDefinitionProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\include{bar}\n\\foo"),
- FeatureSpec::file("bar.tex", "\\newcommand{\\foo}{bar}"),
- FeatureSpec::file("baz.tex", "\\newcommand{\\foo}{baz}"),
- ],
- main_file: "foo.tex",
- position: Position::new(1, 3),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- links,
- vec![LocationLink {
- origin_selection_range: Some(Range::new_simple(1, 0, 1, 4)),
- target_uri: FeatureSpec::uri("bar.tex"),
- target_range: Range::new_simple(0, 0, 0, 22),
- target_selection_range: Range::new_simple(0, 0, 0, 22),
- }]
- );
- }
-
- #[test]
- fn test_math_operator() {
- let links = test_feature(
- LatexCommandDefinitionProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\include{bar}\n\\foo"),
- FeatureSpec::file("bar.tex", "\\DeclareMathOperator{\\foo}{bar}"),
- FeatureSpec::file("baz.tex", "\\DeclareMathOperator{\\foo}{baz}"),
- ],
- main_file: "foo.tex",
- position: Position::new(1, 3),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- links,
- vec![LocationLink {
- origin_selection_range: Some(Range::new_simple(1, 0, 1, 4)),
- target_uri: FeatureSpec::uri("bar.tex"),
- target_range: Range::new_simple(0, 0, 0, 31),
- target_selection_range: Range::new_simple(0, 0, 0, 31)
- }]
- );
- }
-}
diff --git a/support/texlab/src/definition/latex_label.rs b/support/texlab/src/definition/latex_label.rs
index 8d1a415749..5318982ccd 100644
--- a/support/texlab/src/definition/latex_label.rs
+++ b/support/texlab/src/definition/latex_label.rs
@@ -1,26 +1,40 @@
-use crate::range::RangeExt;
-use crate::symbol::build_section_tree;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{LocationLink, TextDocumentPositionParams};
-use std::sync::Arc;
+use crate::{
+ feature::{DocumentView, FeatureProvider, FeatureRequest},
+ outline::{Outline, OutlineContext, OutlineContextItem},
+ protocol::{LocationLink, Options, RangeExt, TextDocumentPositionParams},
+ symbol::build_section_tree,
+ syntax::{latex, LatexLabelKind, SyntaxNode},
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
+use std::{path::Path, sync::Arc};
-#[derive(Debug, PartialEq, Eq, Clone)]
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
pub struct LatexLabelDefinitionProvider;
+#[async_trait]
impl FeatureProvider for LatexLabelDefinitionProvider {
type Params = TextDocumentPositionParams;
type Output = Vec<LocationLink>;
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
let mut links = Vec::new();
- if let Some(reference) = Self::find_reference(&request) {
- for document in request.related_documents() {
- let workspace = Arc::clone(&request.view.workspace);
- let view = DocumentView::new(workspace, Arc::clone(&document));
- Self::find_definitions(&view, &reference, &mut links);
+ if let Some(reference) = Self::find_reference(req) {
+ for doc in req.related() {
+ let snapshot = Arc::clone(&req.view.snapshot);
+ let view = DocumentView::analyze(
+ snapshot,
+ Arc::clone(&doc),
+ &req.options,
+ &req.current_dir,
+ );
+ Self::find_definitions(
+ &view,
+ &req.options,
+ &req.current_dir,
+ &reference,
+ &mut links,
+ );
}
}
links
@@ -28,18 +42,32 @@ impl FeatureProvider for LatexLabelDefinitionProvider {
}
impl LatexLabelDefinitionProvider {
+ fn find_reference(req: &FeatureRequest<TextDocumentPositionParams>) -> Option<&latex::Token> {
+ if let DocumentContent::Latex(table) = &req.current().content {
+ table
+ .labels
+ .iter()
+ .flat_map(|label| label.names(&table))
+ .find(|label| label.range().contains(req.params.position))
+ } else {
+ None
+ }
+ }
+
fn find_definitions(
view: &DocumentView,
- reference: &LatexToken,
+ options: &Options,
+ current_dir: &Path,
+ reference: &latex::Token,
links: &mut Vec<LocationLink>,
) {
- if let SyntaxTree::Latex(tree) = &view.document.tree {
- let outline = Outline::from(view);
- let section_tree = build_section_tree(view, tree);
- for label in &tree.structure.labels {
+ if let DocumentContent::Latex(table) = &view.current.content {
+ let outline = Outline::analyze(view, options, current_dir);
+ let section_tree = build_section_tree(view, table, options, current_dir);
+ for label in &table.labels {
if label.kind == LatexLabelKind::Definition {
- let context = OutlineContext::parse(view, label, &outline);
- for name in label.names() {
+ let context = OutlineContext::parse(view, &outline, *label);
+ for name in label.names(&table) {
if name.text() == reference.text() {
let target_range = if let Some(OutlineContextItem::Section { .. }) =
context.as_ref().map(|ctx| &ctx.item)
@@ -53,9 +81,10 @@ impl LatexLabelDefinitionProvider {
links.push(LocationLink {
origin_selection_range: Some(reference.range()),
- target_uri: view.document.uri.clone().into(),
- target_range: target_range.unwrap_or_else(|| label.range()),
- target_selection_range: label.range(),
+ target_uri: view.current.uri.clone().into(),
+ target_range: target_range
+ .unwrap_or_else(|| table[label.parent].range()),
+ target_selection_range: table[label.parent].range(),
});
}
}
@@ -63,79 +92,64 @@ impl LatexLabelDefinitionProvider {
}
}
}
-
- fn find_reference(request: &FeatureRequest<TextDocumentPositionParams>) -> Option<&LatexToken> {
- if let SyntaxTree::Latex(tree) = &request.document().tree {
- tree.structure
- .labels
- .iter()
- .flat_map(LatexLabel::names)
- .find(|label| label.range().contains(request.params.position))
- } else {
- None
- }
- }
}
#[cfg(test)]
mod tests {
use super::*;
- use lsp_types::{Position, Range};
+ use crate::{feature::FeatureTester, protocol::Range};
+ use indoc::indoc;
- #[test]
- fn test_has_definition() {
- let links = test_feature(
- LatexLabelDefinitionProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\label{foo}"),
- FeatureSpec::file(
- "bar.tex",
- "\\begin{a}\\begin{b}\\label{foo}\\end{b}\\end{a}\n\\input{baz.tex}",
- ),
- FeatureSpec::file("baz.tex", "\\ref{foo}"),
- ],
- main_file: "baz.tex",
- position: Position::new(0, 5),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- links,
- vec![LocationLink {
- origin_selection_range: Some(Range::new_simple(0, 5, 0, 8)),
- target_uri: FeatureSpec::uri("bar.tex"),
- target_range: Range::new_simple(0, 18, 0, 29),
- target_selection_range: Range::new_simple(0, 18, 0, 29)
- }]
- );
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_links = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_position(LatexLabelDefinitionProvider)
+ .await;
+
+ assert!(actual_links.is_empty());
}
- #[test]
- fn test_no_definition_latex() {
- let links = test_feature(
- LatexLabelDefinitionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "")],
- main_file: "foo.tex",
- position: Position::new(0, 0),
- ..FeatureSpec::default()
- },
- );
- assert!(links.is_empty());
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_links = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_position(LatexLabelDefinitionProvider)
+ .await;
+
+ assert!(actual_links.is_empty());
}
- #[test]
- fn test_no_definition_bibtex() {
- let links = test_feature(
- LatexLabelDefinitionProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "")],
- main_file: "foo.bib",
- position: Position::new(0, 0),
- ..FeatureSpec::default()
- },
- );
- assert!(links.is_empty());
+ #[tokio::test]
+ async fn unknown_context() {
+ let actual_links = FeatureTester::new()
+ .file("foo.tex", r#"\label{foo}"#)
+ .file(
+ "bar.tex",
+ indoc!(
+ r#"
+ \begin{a}\begin{b}\label{foo}\end{b}\end{a}
+ \input{baz.tex}
+ "#
+ ),
+ )
+ .file("baz.tex", r#"\ref{foo}"#)
+ .main("baz.tex")
+ .position(0, 5)
+ .test_position(LatexLabelDefinitionProvider)
+ .await;
+
+ let expected_links = vec![LocationLink {
+ origin_selection_range: Some(Range::new_simple(0, 5, 0, 8)),
+ target_uri: FeatureTester::uri("bar.tex").into(),
+ target_range: Range::new_simple(0, 18, 0, 29),
+ target_selection_range: Range::new_simple(0, 18, 0, 29),
+ }];
+
+ assert_eq!(actual_links, expected_links);
}
}
diff --git a/support/texlab/src/definition/mod.rs b/support/texlab/src/definition/mod.rs
index 9c7ac0145a..08901454fe 100644
--- a/support/texlab/src/definition/mod.rs
+++ b/support/texlab/src/definition/mod.rs
@@ -1,16 +1,17 @@
mod bibtex_string;
mod latex_citation;
-mod latex_command;
+mod latex_cmd;
mod latex_label;
-use self::bibtex_string::BibtexStringDefinitionProvider;
-use self::latex_citation::LatexCitationDefinitionProvider;
-use self::latex_command::LatexCommandDefinitionProvider;
-use self::latex_label::LatexLabelDefinitionProvider;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{Location, LocationLink, TextDocumentPositionParams};
-use serde::{Deserialize, Serialize};
+use self::{
+ bibtex_string::BibtexStringDefinitionProvider, latex_citation::LatexCitationDefinitionProvider,
+ latex_cmd::LatexCommandDefinitionProvider, latex_label::LatexLabelDefinitionProvider,
+};
+use crate::{
+ feature::{ConcatProvider, FeatureProvider, FeatureRequest},
+ protocol::{LocationLink, TextDocumentPositionParams},
+};
+use async_trait::async_trait;
pub struct DefinitionProvider {
provider: ConcatProvider<TextDocumentPositionParams, LocationLink>,
@@ -35,19 +36,12 @@ impl Default for DefinitionProvider {
}
}
+#[async_trait]
impl FeatureProvider for DefinitionProvider {
type Params = TextDocumentPositionParams;
type Output = Vec<LocationLink>;
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- self.provider.execute(request).await
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ self.provider.execute(req).await
}
}
-
-#[serde(untagged)]
-#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
-pub enum DefinitionResponse {
- Locations(Vec<Location>),
- LocationLinks(Vec<LocationLink>),
-}
diff --git a/support/texlab/src/diagnostics/bibtex.rs b/support/texlab/src/diagnostics/bibtex.rs
index 8e5b602bcd..80cca80319 100644
--- a/support/texlab/src/diagnostics/bibtex.rs
+++ b/support/texlab/src/diagnostics/bibtex.rs
@@ -1,6 +1,9 @@
-use crate::syntax::*;
-use crate::workspace::Document;
-use lsp_types::{Diagnostic, DiagnosticSeverity, Position, Range};
+use crate::{
+ protocol::{Diagnostic, DiagnosticSeverity, Position, Range},
+ syntax::{bibtex, SyntaxNode},
+ workspace::{Document, DocumentContent},
+};
+use petgraph::graph::NodeIndex;
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub enum BibtexErrorCode {
@@ -38,82 +41,91 @@ impl BibtexError {
Self { code, position }
}
- pub fn analyze(tree: &BibtexSyntaxTree) -> Vec<Self> {
+ pub fn analyze(tree: &bibtex::Tree) -> Vec<Self> {
let mut errors = Vec::new();
- for entry in tree.entries() {
- if entry.is_comment() {
- continue;
- }
-
- if entry.left.is_none() {
- errors.push(BibtexError::new(
- BibtexErrorCode::MissingBeginBrace,
- entry.ty.end(),
- ));
- continue;
- }
-
- if entry.key.is_none() {
- errors.push(BibtexError::new(
- BibtexErrorCode::MissingEntryKey,
- entry.left.as_ref().unwrap().end(),
- ));
- continue;
- }
-
- if entry.comma.is_none() {
- errors.push(BibtexError::new(
- BibtexErrorCode::MissingComma,
- entry.key.as_ref().unwrap().end(),
- ));
- continue;
- }
+ for entry_node in tree.children(tree.root) {
+ if let Some(entry) = tree.as_entry(entry_node) {
+ if entry.is_comment() {
+ continue;
+ }
- for i in 0..entry.fields.len() {
- let field = &entry.fields[i];
- if field.assign.is_none() {
+ if entry.left.is_none() {
errors.push(BibtexError::new(
- BibtexErrorCode::MissingAssign,
- field.name.end(),
+ BibtexErrorCode::MissingBeginBrace,
+ entry.ty.end(),
));
continue;
}
- if field.content.is_none() {
+ if entry.key.is_none() {
errors.push(BibtexError::new(
- BibtexErrorCode::MissingContent,
- field.assign.as_ref().unwrap().end(),
+ BibtexErrorCode::MissingEntryKey,
+ entry.left.as_ref().unwrap().end(),
));
continue;
}
- Self::analyze_content(&mut errors, &field.content.as_ref().unwrap());
-
- if i != entry.fields.len() - 1 && field.comma.is_none() {
+ if entry.comma.is_none() {
errors.push(BibtexError::new(
BibtexErrorCode::MissingComma,
- field.content.as_ref().unwrap().end(),
+ entry.key.as_ref().unwrap().end(),
));
continue;
}
- }
- if entry.right.is_none() {
- errors.push(BibtexError::new(
- BibtexErrorCode::MissingEndBrace,
- entry.end(),
- ));
- continue;
+ let field_count = tree.children(entry_node).count();
+ for (i, field_node) in tree.children(entry_node).enumerate() {
+ let field = tree.as_field(field_node).unwrap();
+ if field.assign.is_none() {
+ errors.push(BibtexError::new(
+ BibtexErrorCode::MissingAssign,
+ field.name.end(),
+ ));
+ continue;
+ }
+
+ let content = tree.children(field_node).next();
+
+ if content.is_none() {
+ errors.push(BibtexError::new(
+ BibtexErrorCode::MissingContent,
+ field.assign.as_ref().unwrap().end(),
+ ));
+ continue;
+ }
+
+ Self::analyze_content(&mut errors, tree, content.unwrap());
+
+ if i != field_count - 1 && field.comma.is_none() {
+ errors.push(BibtexError::new(
+ BibtexErrorCode::MissingComma,
+ tree.graph[content.unwrap()].end(),
+ ));
+ continue;
+ }
+ }
+
+ if entry.right.is_none() {
+ errors.push(BibtexError::new(
+ BibtexErrorCode::MissingEndBrace,
+ entry.end(),
+ ));
+ continue;
+ }
}
}
errors
}
- fn analyze_content(mut errors: &mut Vec<BibtexError>, content: &BibtexContent) {
- match content {
- BibtexContent::QuotedContent(content) => {
- for child in &content.children {
- Self::analyze_content(&mut errors, &child);
+ fn analyze_content(
+ mut errors: &mut Vec<BibtexError>,
+ tree: &bibtex::Tree,
+ content_node: NodeIndex,
+ ) {
+ match &tree.graph[content_node] {
+ bibtex::Node::QuotedContent(content) => {
+ for child in tree.children(content_node) {
+ Self::analyze_content(&mut errors, tree, child);
}
if content.right.is_none() {
@@ -123,9 +135,9 @@ impl BibtexError {
));
}
}
- BibtexContent::BracedContent(content) => {
- for child in &content.children {
- Self::analyze_content(&mut errors, &child);
+ bibtex::Node::BracedContent(content) => {
+ for child in tree.children(content_node) {
+ Self::analyze_content(&mut errors, tree, child);
}
if content.right.is_none() {
@@ -135,11 +147,12 @@ impl BibtexError {
));
}
}
- BibtexContent::Concat(concat) => {
- Self::analyze_content(&mut errors, &concat.left);
- match &concat.right {
+ bibtex::Node::Concat(concat) => {
+ let mut children = tree.children(content_node);
+ Self::analyze_content(&mut errors, tree, children.next().unwrap());
+ match children.next() {
Some(right) => {
- Self::analyze_content(&mut errors, right);
+ Self::analyze_content(&mut errors, tree, right);
}
None => {
errors.push(BibtexError::new(
@@ -149,7 +162,14 @@ impl BibtexError {
}
}
}
- BibtexContent::Word(_) | BibtexContent::Command(_) => {}
+ bibtex::Node::Root(_)
+ | bibtex::Node::Comment(_)
+ | bibtex::Node::Preamble(_)
+ | bibtex::Node::String(_)
+ | bibtex::Node::Entry(_)
+ | bibtex::Node::Field(_)
+ | bibtex::Node::Word(_)
+ | bibtex::Node::Command(_) => {}
}
}
}
@@ -163,6 +183,7 @@ impl Into<Diagnostic> for BibtexError {
severity: Some(DiagnosticSeverity::Error),
code: None,
related_information: None,
+ tags: None,
}
}
}
@@ -171,8 +192,8 @@ impl Into<Diagnostic> for BibtexError {
pub struct BibtexDiagnosticsProvider;
impl BibtexDiagnosticsProvider {
- pub fn get(self, document: &Document) -> Vec<Diagnostic> {
- if let SyntaxTree::Bibtex(tree) = &document.tree {
+ pub fn get(self, doc: &Document) -> Vec<Diagnostic> {
+ if let DocumentContent::Bibtex(tree) = &doc.content {
BibtexError::analyze(&tree)
.into_iter()
.map(Into::into)
@@ -188,8 +209,8 @@ mod tests {
use super::*;
#[test]
- fn test_begin_brace() {
- let errors = BibtexError::analyze(&"@article".into());
+ fn begin_brace() {
+ let errors = BibtexError::analyze(&bibtex::open("@article"));
assert_eq!(
errors,
vec![BibtexError::new(
@@ -200,8 +221,8 @@ mod tests {
}
#[test]
- fn test_entry_key() {
- let errors = BibtexError::analyze(&"@article{".into());
+ fn entry_key() {
+ let errors = BibtexError::analyze(&bibtex::open("@article{"));
assert_eq!(
errors,
vec![BibtexError::new(
@@ -212,8 +233,8 @@ mod tests {
}
#[test]
- fn test_entry_comma() {
- let errors = BibtexError::analyze(&"@article{foo".into());
+ fn entry_comma() {
+ let errors = BibtexError::analyze(&bibtex::open("@article{foo"));
assert_eq!(
errors,
vec![BibtexError::new(
@@ -224,8 +245,8 @@ mod tests {
}
#[test]
- fn test_entry_end_brace() {
- let errors = BibtexError::analyze(&"@article{foo,".into());
+ fn entry_end_brace() {
+ let errors = BibtexError::analyze(&bibtex::open("@article{foo,"));
assert_eq!(
errors,
vec![BibtexError::new(
@@ -236,8 +257,8 @@ mod tests {
}
#[test]
- fn test_field_equals() {
- let errors = BibtexError::analyze(&"@article{foo, bar}".into());
+ fn field_equals() {
+ let errors = BibtexError::analyze(&bibtex::open("@article{foo, bar}"));
assert_eq!(
errors,
vec![BibtexError::new(
@@ -248,8 +269,8 @@ mod tests {
}
#[test]
- fn test_field_content() {
- let errors = BibtexError::analyze(&"@article{foo,\nbar = }".into());
+ fn field_content() {
+ let errors = BibtexError::analyze(&bibtex::open("@article{foo,\nbar = }"));
assert_eq!(
errors,
vec![BibtexError::new(
@@ -260,9 +281,9 @@ mod tests {
}
#[test]
- fn test_field_comma() {
+ fn field_comma() {
let text = "@article{foo,\nfoo = bar\nbaz = qux}";
- let errors = BibtexError::analyze(&text.into());
+ let errors = BibtexError::analyze(&bibtex::open(text));
assert_eq!(
errors,
vec![BibtexError::new(
@@ -273,9 +294,9 @@ mod tests {
}
#[test]
- fn test_content_quote() {
+ fn content_quote() {
let text = "@article{foo, bar =\n\"}";
- let errors = BibtexError::analyze(&text.into());
+ let errors = BibtexError::analyze(&bibtex::open(text));
assert_eq!(
errors,
vec![BibtexError::new(
@@ -286,9 +307,9 @@ mod tests {
}
#[test]
- fn test_content_brace() {
+ fn content_brace() {
let text = "@article{foo, bar =\n{";
- let errors = BibtexError::analyze(&text.into());
+ let errors = BibtexError::analyze(&bibtex::open(text));
assert_eq!(
errors,
vec![
@@ -299,9 +320,9 @@ mod tests {
}
#[test]
- fn test_content_concat() {
+ fn content_concat() {
let text = "@article{foo, bar = baz \n# }";
- let errors = BibtexError::analyze(&text.into());
+ let errors = BibtexError::analyze(&bibtex::open(text));
assert_eq!(
errors,
vec![BibtexError::new(
@@ -312,9 +333,9 @@ mod tests {
}
#[test]
- fn test_entry_valid() {
+ fn entry_valid() {
let text = "@article{foo, bar = \"baz {qux}\" # quux}";
- let errors = BibtexError::analyze(&text.into());
+ let errors = BibtexError::analyze(&bibtex::open(text));
assert_eq!(errors, Vec::new());
}
}
diff --git a/support/texlab/src/diagnostics/build.rs b/support/texlab/src/diagnostics/build.rs
index 5447075820..16870e8fd8 100644
--- a/support/texlab/src/diagnostics/build.rs
+++ b/support/texlab/src/diagnostics/build.rs
@@ -1,15 +1,19 @@
-use crate::workspace::{Document, Uri};
-use lsp_types::{Diagnostic, DiagnosticSeverity, Position, Range};
+use crate::{
+ protocol::{Diagnostic, DiagnosticSeverity, Options, Position, Range, Uri},
+ workspace::{Document, Snapshot},
+};
+use futures::lock::Mutex;
use once_cell::sync::Lazy;
-use path_clean::PathClean;
use regex::{Match, Regex};
-use std::cmp::Ordering;
-use std::collections::HashMap;
-use std::fs;
-use std::io;
-use std::path::{Path, PathBuf};
-use std::str;
-use std::time::SystemTime;
+use std::{
+ cmp::Ordering,
+ collections::HashMap,
+ io,
+ path::{Path, PathBuf},
+ str,
+ time::SystemTime,
+};
+use tokio::fs;
#[derive(Debug, PartialEq, Eq, Clone)]
struct LogFile {
@@ -17,57 +21,65 @@ struct LogFile {
modified: SystemTime,
}
-#[derive(Debug, PartialEq, Eq, Clone, Default)]
+#[derive(Debug, Default)]
pub struct BuildDiagnosticsProvider {
- diagnostics_by_uri: HashMap<Uri, Vec<Diagnostic>>,
- log_files: Vec<LogFile>,
+ diagnostics_by_uri: Mutex<HashMap<Uri, Vec<Diagnostic>>>,
+ log_files: Mutex<Vec<LogFile>>,
}
impl BuildDiagnosticsProvider {
- pub fn get(&self, document: &Document) -> Vec<Diagnostic> {
- match self.diagnostics_by_uri.get(&document.uri) {
+ pub async fn get(&self, doc: &Document) -> Vec<Diagnostic> {
+ match self.diagnostics_by_uri.lock().await.get(&doc.uri) {
Some(diagnostics) => diagnostics.to_owned(),
None => Vec::new(),
}
}
- pub fn update(&mut self, tex_uri: &Uri) -> io::Result<bool> {
- if tex_uri.scheme() != "file" {
- return Ok(false);
- }
-
- let log_path = tex_uri.to_file_path().unwrap().with_extension("log");
- if !log_path.exists() {
- return Ok(false);
- }
-
- let modified = fs::metadata(&log_path)?.modified()?;
-
- for log_file in &mut self.log_files {
- if log_file.path == log_path {
- return if modified > log_file.modified {
- log_file.modified = modified;
- self.update_diagnostics(tex_uri, &log_path)
- } else {
- Ok(false)
- };
+ pub async fn update(
+ &self,
+ snapshot: &Snapshot,
+ tex_uri: &Uri,
+ options: &Options,
+ current_dir: &Path,
+ ) -> io::Result<bool> {
+ let log_uris = snapshot
+ .resolve_aux_targets(tex_uri, options, current_dir, "log")
+ .unwrap_or_default();
+ if let Some(log_path) = log_uris
+ .into_iter()
+ .filter(|uri| uri.scheme() == "file")
+ .filter_map(|uri| uri.to_file_path().ok())
+ .find(|path| path.exists())
+ {
+ let modified = fs::metadata(&log_path).await?.modified()?;
+ let mut log_files = self.log_files.lock().await;
+ for log_file in log_files.iter_mut() {
+ if log_file.path == log_path {
+ return if modified > log_file.modified {
+ log_file.modified = modified;
+ self.update_diagnostics(tex_uri, &log_path).await
+ } else {
+ Ok(false)
+ };
+ }
}
+
+ self.update_diagnostics(tex_uri, &log_path).await?;
+ log_files.push(LogFile {
+ path: log_path,
+ modified,
+ });
}
- self.update_diagnostics(tex_uri, &log_path)?;
- self.log_files.push(LogFile {
- path: log_path,
- modified,
- });
Ok(true)
}
- fn update_diagnostics(&mut self, tex_uri: &Uri, log_path: &Path) -> io::Result<bool> {
- let log = String::from_utf8_lossy(&fs::read(log_path)?).into_owned();
- self.diagnostics_by_uri.clear();
+ async fn update_diagnostics(&self, tex_uri: &Uri, log_path: &Path) -> io::Result<bool> {
+ let log = String::from_utf8_lossy(&fs::read(log_path).await?).into_owned();
+ let mut diagnostics_by_uri = self.diagnostics_by_uri.lock().await;
+ diagnostics_by_uri.clear();
for error in parse_build_log(tex_uri, &log) {
- let diagnostics = self
- .diagnostics_by_uri
+ let diagnostics = diagnostics_by_uri
.entry(error.uri.clone())
.or_insert_with(Vec::new);
diagnostics.push(error.into());
@@ -92,7 +104,7 @@ pub struct BuildError {
impl BuildError {
pub fn new(uri: Uri, kind: BuildErrorKind, message: String, line: Option<u64>) -> Self {
- BuildError {
+ Self {
uri,
kind,
message,
@@ -109,14 +121,15 @@ impl Into<Diagnostic> for BuildError {
BuildErrorKind::Warning => DiagnosticSeverity::Warning,
};
let range = Range::new(position, position);
- Diagnostic::new(
+ Diagnostic {
range,
- Some(severity),
- None,
- Some("latex".into()),
- self.message,
- None,
- )
+ severity: Some(severity),
+ source: Some("latex".into()),
+ code: None,
+ message: self.message,
+ tags: None,
+ related_information: None,
+ }
}
}
@@ -235,19 +248,14 @@ fn create_file_range(parent: Uri, log: &str, result: Match) -> FileRange {
}
let captures = FILE_REGEX.captures(result.as_str()).unwrap();
- let mut base_path = PathBuf::from(parent.path());
- base_path.pop();
+ let base_path = PathBuf::from(parent.path());
let mut full_path = base_path.clone();
full_path.push(captures.name("file").unwrap().as_str());
let uri = if full_path.starts_with(base_path) {
- let mut full_path = PathBuf::from(full_path.to_string_lossy().replace("\\", "/"))
- .clean()
- .to_string_lossy()
- .into_owned();
- if cfg!(windows) && full_path.starts_with('/') {
- full_path.remove(0);
- }
- Uri::from_file_path(full_path).ok()
+ parent
+ .join(captures.name("file").unwrap().as_str())
+ .map(Into::into)
+ .ok()
} else {
None
};
@@ -264,7 +272,7 @@ struct FileRange {
impl FileRange {
fn new(uri: Option<Uri>, start: usize, end: usize) -> Self {
- FileRange { uri, start, end }
+ Self { uri, start, end }
}
fn length(&self) -> usize {
@@ -291,88 +299,792 @@ impl PartialOrd for FileRange {
#[cfg(test)]
mod tests {
use super::*;
+ use indoc::indoc;
fn create_uri(name: &str) -> Uri {
let path = PathBuf::from(env!("CARGO_MANIFEST_DIR")).join(name);
Uri::from_file_path(path.to_str().unwrap()).unwrap()
}
- fn verify(name: &str, expected: Vec<BuildError>) {
- let log_path = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
- .join("tests")
- .join("logs")
- .join(name);
+ #[test]
+ fn bad_box() {
+ let log = indoc!(
+ r#"
+ This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:50
+ entering extended mode
+ restricted \write18 enabled.
+ %&-line parsing enabled.
+ **./parent.tex
+ (./parent.tex
+ LaTeX2e <2017-04-15>
+ Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
+ (/TexLive/texmf-dist/tex/latex/base/article.cls
+ Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
+ (/TexLive/texmf-dist/tex/latex/base/size10.clo
+ File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
+ )
+ \c@part=\count79
+ \c@section=\count80
+ \c@subsection=\count81
+ \c@subsubsection=\count82
+ \c@paragraph=\count83
+ \c@subparagraph=\count84
+ \c@figure=\count85
+ \c@table=\count86
+ \abovecaptionskip=\skip41
+ \belowcaptionskip=\skip42
+ \bibindent=\dimen102
+ )
+ (/TexLive/texmf-dist/tex/latex/multirow/bigstrut.sty
+ Package: bigstrut 2016/11/25 v2.2 Provide larger struts in tabulars
+ \bigstrutjot=\dimen103
+ )
+ (/TexLive/texmf-dist/tex/latex/multirow/multirow.sty
+ Package: multirow 2016/11/25 v2.2 Span multiple rows of a table
+ \multirow@colwidth=\skip43
+ \multirow@cntb=\count87
+ \multirow@dima=\skip44
+ ) (./parent.aux)
+ \openout1 = `parent.aux'.
- let log = std::fs::read_to_string(log_path).unwrap();
- let actual = parse_build_log(&create_uri("parent.tex"), &log);
- assert_eq!(expected, actual);
- }
+ LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 6.
+ LaTeX Font Info: ... okay on input line 6.
+ LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 6.
+ LaTeX Font Info: ... okay on input line 6.
+ LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 6.
+ LaTeX Font Info: ... okay on input line 6.
+ LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 6.
+ LaTeX Font Info: ... okay on input line 6.
+ LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 6.
+ LaTeX Font Info: ... okay on input line 6.
+ LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 6.
+ LaTeX Font Info: ... okay on input line 6.
+
+ Overfull \hbox (200.00162pt too wide) in paragraph at lines 8--9
+ []\OT1/cmr/m/n/10 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ []
+
+ LaTeX Font Info: External font `cmex10' loaded for size
+ (Font) <7> on input line 11.
+ LaTeX Font Info: External font `cmex10' loaded for size
+ (Font) <5> on input line 11.
+
+ Overfull \vbox (3.19998pt too high) detected at line 23
+ []
+
+ [1
+
+ {/TexLive/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] (./parent.aux) )
+ Here is how much of TeX's memory you used:
+ 265 strings out of 492995
+ 3121 string characters out of 6138727
+ 55074 words of memory out of 5000000
+ 3896 multiletter control sequences out of 15000+600000
+ 3640 words of font info for 14 fonts, out of 8000000 for 9000
+ 1141 hyphenation exceptions out of 8191
+ 23i,20n,20p,124b,282s stack positions out of 5000i,500n,10000p,200000b,80000s
+ </
+ TexLive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></TexLive/texmf-d
+ ist/fonts/type1/public/amsfonts/cm/cmr7.pfb>
+ Output written on parent.pdf (1 page, 17505 bytes).
+ PDF statistics:
+ 16 PDF objects out of 1000 (max. 8388607)
+ 10 compressed objects within 1 object stream
+ 0 named destinations out of 1000 (max. 500000)
+ 1 words of extra memory for PDF output out of 10000 (max. 10000000)"#
+ );
+
+ let actual_errors = parse_build_log(&create_uri("parent.tex"), log);
- #[test]
- fn test_bad_box() {
let error1 = BuildError::new(
create_uri("parent.tex"),
BuildErrorKind::Warning,
- "Overfull \\hbox (200.00162pt too wide) in paragraph at lines 8--9".to_owned(),
+ "Overfull \\hbox (200.00162pt too wide) in paragraph at lines 8--9".into(),
Some(7),
);
let error2 = BuildError::new(
create_uri("parent.tex"),
BuildErrorKind::Warning,
- "Overfull \\vbox (3.19998pt too high) detected at line 23".to_owned(),
+ "Overfull \\vbox (3.19998pt too high) detected at line 23".into(),
Some(22),
);
- verify("bad-box.log", vec![error1, error2]);
+ assert_eq!(actual_errors, vec![error1, error2]);
}
#[test]
- fn test_related_documents() {
+ fn related() {
+ let log = indoc!(
+ r#"
+ This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:52
+ entering extended mode
+ restricted \write18 enabled.
+ %&-line parsing enabled.
+ **./parent.tex
+ (./parent.tex
+ LaTeX2e <2017-04-15>
+ Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
+ (/TexLive/texmf-dist/tex/latex/base/article.cls
+ Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
+ (/TexLive/texmf-dist/tex/latex/base/size10.clo
+ File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
+ )
+ \c@part=\count79
+ \c@section=\count80
+ \c@subsection=\count81
+ \c@subsubsection=\count82
+ \c@paragraph=\count83
+ \c@subparagraph=\count84
+ \c@figure=\count85
+ \c@table=\count86
+ \abovecaptionskip=\skip41
+ \belowcaptionskip=\skip42
+ \bibindent=\dimen102
+ ) (./parent.aux (./child.aux))
+ \openout1 = `parent.aux'.
+
+ LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 4.
+ LaTeX Font Info: ... okay on input line 4.
+ LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 4.
+ LaTeX Font Info: ... okay on input line 4.
+ LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 4.
+ LaTeX Font Info: ... okay on input line 4.
+ LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 4.
+ LaTeX Font Info: ... okay on input line 4.
+ LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 4.
+ LaTeX Font Info: ... okay on input line 4.
+ LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 4.
+ LaTeX Font Info: ... okay on input line 4.
+ (./child.tex
+ ! Undefined control sequence.
+ l.1 \foo
+
+ The control sequence at the end of the top line
+ of your error message was never \def'ed. If you have
+ misspelled it (e.g., `\hobx'), type `I' and the correct
+ spelling (e.g., `I\hbox'). Otherwise just continue,
+ and I'll forget about whatever was undefined.
+
+ ) (./parent.aux) )
+ Here is how much of TeX's memory you used:
+ 205 strings out of 492995
+ 2149 string characters out of 6138727
+ 54074 words of memory out of 5000000
+ 3841 multiletter control sequences out of 15000+600000
+ 3640 words of font info for 14 fonts, out of 8000000 for 9000
+ 1141 hyphenation exceptions out of 8191
+ 23i,1n,17p,116b,36s stack positions out of 5000i,500n,10000p,200000b,80000s
+
+ No pages of output.
+ PDF statistics:
+ 0 PDF objects out of 1000 (max. 8388607)
+ 0 named destinations out of 1000 (max. 500000)
+ 1 words of extra memory for PDF output out of 10000 (max. 10000000)"#
+ );
+
+ let actual_errors = parse_build_log(&create_uri("parent.tex"), log);
+
let error = BuildError::new(
create_uri("child.tex"),
BuildErrorKind::Error,
- "Undefined control sequence.".to_owned(),
+ "Undefined control sequence.".into(),
Some(0),
);
- verify("child-error.log", vec![error]);
+ assert_eq!(actual_errors, vec![error]);
}
#[test]
- fn test_citation_warning() {
+ fn citation_warning() {
+ let log = indoc!(
+ r#"
+ This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:51
+ entering extended mode
+ restricted \write18 enabled.
+ %&-line parsing enabled.
+ **./parent.tex
+ (./parent.tex
+ LaTeX2e <2017-04-15>
+ Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
+ (/TexLive/texmf-dist/tex/latex/base/article.cls
+ Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
+ (/TexLive/texmf-dist/tex/latex/base/size10.clo
+ File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
+ )
+ \c@part=\count79
+ \c@section=\count80
+ \c@subsection=\count81
+ \c@subsubsection=\count82
+ \c@paragraph=\count83
+ \c@subparagraph=\count84
+ \c@figure=\count85
+ \c@table=\count86
+ \abovecaptionskip=\skip41
+ \belowcaptionskip=\skip42
+ \bibindent=\dimen102
+ ) (./parent.aux)
+ \openout1 = `parent.aux'.
+
+ LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 4.
+ LaTeX Font Info: ... okay on input line 4.
+ LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 4.
+ LaTeX Font Info: ... okay on input line 4.
+ LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 4.
+ LaTeX Font Info: ... okay on input line 4.
+ LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 4.
+ LaTeX Font Info: ... okay on input line 4.
+ LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 4.
+ LaTeX Font Info: ... okay on input line 4.
+ LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 4.
+ LaTeX Font Info: ... okay on input line 4.
+
+
+ LaTeX Warning: Citation `foo' on page 1 undefined on input line 6.
+
+ [1
+
+ {/TexLive/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] (./parent.aux)
+
+ LaTeX Warning: There were undefined references.
+
+ )
+ Here is how much of TeX's memory you used:
+ 204 strings out of 492995
+ 2142 string characters out of 6138727
+ 54074 words of memory out of 5000000
+ 3842 multiletter control sequences out of 15000+600000
+ 3948 words of font info for 15 fonts, out of 8000000 for 9000
+ 1141 hyphenation exceptions out of 8191
+ 23i,4n,21p,116b,107s stack positions out of 5000i,500n,10000p,200000b,80000s
+ </TexLive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb></TexLive/
+ texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
+ Output written on parent.pdf (1 page, 17339 bytes).
+ PDF statistics:
+ 16 PDF objects out of 1000 (max. 8388607)
+ 10 compressed objects within 1 object stream
+ 0 named destinations out of 1000 (max. 500000)
+ 1 words of extra memory for PDF output out of 10000 (max. 10000000)"#
+ );
+
+ let actual_errors = parse_build_log(&create_uri("parent.tex"), log);
+
let error1 = BuildError::new(
create_uri("parent.tex"),
BuildErrorKind::Warning,
- "Citation `foo' on page 1 undefined on input line 6.".to_owned(),
+ "Citation `foo' on page 1 undefined on input line 6.".into(),
None,
);
let error2 = BuildError::new(
create_uri("parent.tex"),
BuildErrorKind::Warning,
- "There were undefined references.".to_owned(),
+ "There were undefined references.".into(),
None,
);
- verify("citation-warning.log", vec![error1, error2]);
+ assert_eq!(actual_errors, vec![error1, error2]);
}
#[test]
- fn test_package_error() {
+ fn package_error() {
+ let log = indoc!(
+ r#"
+ This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:40
+ entering extended mode
+ restricted \write18 enabled.
+ %&-line parsing enabled.
+ **./parent.tex
+ (./parent.tex
+ LaTeX2e <2017-04-15>
+ Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
+ (/TexLive/texmf-dist/tex/latex/base/article.cls
+ Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
+ (/TexLive/texmf-dist/tex/latex/base/size10.clo
+ File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
+ )
+ \c@part=\count79
+ \c@section=\count80
+ \c@subsection=\count81
+ \c@subsubsection=\count82
+ \c@paragraph=\count83
+ \c@subparagraph=\count84
+ \c@figure=\count85
+ \c@table=\count86
+ \abovecaptionskip=\skip41
+ \belowcaptionskip=\skip42
+ \bibindent=\dimen102
+ )
+ (/TexLive/texmf-dist/tex/generic/babel/babel.sty
+ Package: babel 2017/05/19 3.10 The Babel package
+
+
+ ! Package babel Error: Unknown option `foo'. Either you misspelled it
+ (babel) or the language definition file foo.ldf was not found.
+
+ See the babel package documentation for explanation.
+ Type H <return> for immediate help.
+ ...
+
+ l.393 \ProcessOptions*
+
+ Valid options are: shorthands=, KeepShorthandsActive,
+ activeacute, activegrave, noconfigs, safe=, main=, math=
+ headfoot=, strings=, config=, hyphenmap=, or a language name.
+
+
+ ! Package babel Error: You haven't specified a language option.
+
+ See the babel package documentation for explanation.
+ Type H <return> for immediate help.
+ ...
+
+ l.426 ...ry to proceed from here, type x to quit.}
+
+ You need to specify a language, either as a global option
+ or as an optional argument to the \usepackage command;
+ You shouldn't try to proceed from here, type x to quit.
+
+ ) (./parent.aux)
+ \openout1 = `parent.aux'.
+
+ LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 5.
+ LaTeX Font Info: ... okay on input line 5.
+ LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 5.
+ LaTeX Font Info: ... okay on input line 5.
+ LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 5.
+ LaTeX Font Info: ... okay on input line 5.
+ LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 5.
+ LaTeX Font Info: ... okay on input line 5.
+ LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 5.
+ LaTeX Font Info: ... okay on input line 5.
+ LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 5.
+ LaTeX Font Info: ... okay on input line 5.
+ (./parent.aux) )
+ Here is how much of TeX's memory you used:
+ 304 strings out of 492995
+ 3421 string characters out of 6138727
+ 56035 words of memory out of 5000000
+ 3938 multiletter control sequences out of 15000+600000
+ 3640 words of font info for 14 fonts, out of 8000000 for 9000
+ 1141 hyphenation exceptions out of 8191
+ 23i,1n,17p,116b,36s stack positions out of 5000i,500n,10000p,200000b,80000s
+
+ No pages of output.
+ PDF statistics:
+ 0 PDF objects out of 1000 (max. 8388607)
+ 0 named destinations out of 1000 (max. 500000)
+ 1 words of extra memory for PDF output out of 10000 (max. 10000000)"#
+ );
+
+ let actual_errors = parse_build_log(&create_uri("parent.tex"), log);
+
let error1 = BuildError::new(
create_uri("parent.tex"),
BuildErrorKind::Error,
"Package babel Error: Unknown option `foo'. Either you misspelled it or the language definition file foo.ldf was not found."
- .to_owned(),
+ .into(),
Some(392),
);
let error2 = BuildError::new(
create_uri("parent.tex"),
BuildErrorKind::Error,
- "Package babel Error: You haven't specified a language option.".to_owned(),
+ "Package babel Error: You haven't specified a language option.".into(),
Some(425),
);
- verify("package-error.log", vec![error1, error2]);
+ assert_eq!(actual_errors, vec![error1, error2]);
}
#[test]
- fn test_package_warning() {
+ fn package_warning() {
+ let log = indoc!(
+ r#"
+ This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:45
+ entering extended mode
+ restricted \write18 enabled.
+ %&-line parsing enabled.
+ **./parent.tex
+ (./parent.tex
+ LaTeX2e <2017-04-15>
+ Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
+ (/TexLive/texmf-dist/tex/latex/base/article.cls
+ Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
+ (/TexLive/texmf-dist/tex/latex/base/size10.clo
+ File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
+ )
+ \c@part=\count79
+ \c@section=\count80
+ \c@subsection=\count81
+ \c@subsubsection=\count82
+ \c@paragraph=\count83
+ \c@subparagraph=\count84
+ \c@figure=\count85
+ \c@table=\count86
+ \abovecaptionskip=\skip41
+ \belowcaptionskip=\skip42
+ \bibindent=\dimen102
+ )
+ (/TexLive/texmf-dist/tex/generic/babel/babel.sty
+ Package: babel 2017/05/19 3.10 The Babel package
+
+ (/TexLive/texmf-dist/tex/generic/babel-spanish/spanish.ldf
+ Language: spanish.ldf 2016/03/03 v5.0p Spanish support from the babel system
+
+ (/TexLive/texmf-dist/tex/generic/babel/babel.def
+ File: babel.def 2017/05/19 3.10 Babel common definitions
+ \babel@savecnt=\count87
+ \U@D=\dimen103
+ )
+ \es@quottoks=\toks14
+ \es@quotdepth=\count88
+ Package babel Info: Making " an active character on input line 561.
+ Package babel Info: Making . an active character on input line 662.
+ Package babel Info: Making < an active character on input line 707.
+ Package babel Info: Making > an active character on input line 707.
+ ))
+ (/TexLive/texmf-dist/tex/latex/biblatex/biblatex.sty
+ Package: biblatex 2016/12/05 v3.7 programmable bibliographies (PK/JW/AB)
+
+ (/TexLive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
+ Package: pdftexcmds 2017/03/19 v0.25 Utility functions of pdfTeX for LuaTeX (HO
+ )
+
+ (/TexLive/texmf-dist/tex/generic/oberdiek/infwarerr.sty
+ Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO)
+ )
+ (/TexLive/texmf-dist/tex/generic/oberdiek/ifluatex.sty
+ Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO)
+ Package ifluatex Info: LuaTeX not detected.
+ )
+ (/TexLive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
+ Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO)
+ )
+ (/TexLive/texmf-dist/tex/generic/oberdiek/ifpdf.sty
+ Package: ifpdf 2017/03/15 v3.2 Provides the ifpdf switch
+ )
+ Package pdftexcmds Info: LuaTeX not detected.
+ Package pdftexcmds Info: \pdf@primitive is available.
+ Package pdftexcmds Info: \pdf@ifprimitive is available.
+ Package pdftexcmds Info: \pdfdraftmode found.
+ )
+ (/TexLive/texmf-dist/tex/latex/etoolbox/etoolbox.sty
+ Package: etoolbox 2017/01/02 v2.4 e-TeX tools for LaTeX (JAW)
+ \etb@tempcnta=\count89
+ )
+ (/TexLive/texmf-dist/tex/latex/graphics/keyval.sty
+ Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
+ \KV@toks@=\toks15
+ )
+ (/TexLive/texmf-dist/tex/latex/oberdiek/kvoptions.sty
+ Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO)
+
+ (/TexLive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
+ Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO)
+
+ (/TexLive/texmf-dist/tex/generic/oberdiek/etexcmds.sty
+ Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO)
+ Package etexcmds Info: Could not find \expanded.
+ (etexcmds) That can mean that you are not using pdfTeX 1.50 or
+ (etexcmds) that some package has redefined \expanded.
+ (etexcmds) In the latter case, load this package earlier.
+ )))
+ (/TexLive/texmf-dist/tex/latex/logreq/logreq.sty
+ Package: logreq 2010/08/04 v1.0 xml request logger
+ \lrq@indent=\count90
+
+ (/TexLive/texmf-dist/tex/latex/logreq/logreq.def
+ File: logreq.def 2010/08/04 v1.0 logreq spec v1.0
+ ))
+ (/TexLive/texmf-dist/tex/latex/base/ifthen.sty
+ Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC)
+ )
+ (/TexLive/texmf-dist/tex/latex/url/url.sty
+ \Urlmuskip=\muskip10
+ Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
+ )
+ (/TexLive/texmf-dist/tex/generic/xstring/xstring.sty
+ (/TexLive/texmf-dist/tex/generic/xstring/xstring.tex
+ \@xs@message=\write3
+ \integerpart=\count91
+ \decimalpart=\count92
+ )
+ Package: xstring 2013/10/13 v1.7c String manipulations (C Tellechea)
+ )
+ \c@tabx@nest=\count93
+ \c@listtotal=\count94
+ \c@listcount=\count95
+ \c@liststart=\count96
+ \c@liststop=\count97
+ \c@citecount=\count98
+ \c@citetotal=\count99
+ \c@multicitecount=\count100
+ \c@multicitetotal=\count101
+ \c@instcount=\count102
+ \c@maxnames=\count103
+ \c@minnames=\count104
+ \c@maxitems=\count105
+ \c@minitems=\count106
+ \c@citecounter=\count107
+ \c@savedcitecounter=\count108
+ \c@uniquelist=\count109
+ \c@uniquename=\count110
+ \c@refsection=\count111
+ \c@refsegment=\count112
+ \c@maxextratitle=\count113
+ \c@maxextratitleyear=\count114
+ \c@maxextrayear=\count115
+ \c@maxextraalpha=\count116
+ \c@abbrvpenalty=\count117
+ \c@highnamepenalty=\count118
+ \c@lownamepenalty=\count119
+ \c@maxparens=\count120
+ \c@parenlevel=\count121
+ \blx@tempcnta=\count122
+ \blx@tempcntb=\count123
+ \blx@tempcntc=\count124
+ \blx@maxsection=\count125
+ \blx@maxsegment@0=\count126
+ \blx@notetype=\count127
+ \blx@parenlevel@text=\count128
+ \blx@parenlevel@foot=\count129
+ \blx@sectionciteorder@0=\count130
+ \labelnumberwidth=\skip43
+ \labelalphawidth=\skip44
+ \biblabelsep=\skip45
+ \bibitemsep=\skip46
+ \bibnamesep=\skip47
+ \bibinitsep=\skip48
+ \bibparsep=\skip49
+ \bibhang=\skip50
+ \blx@bcfin=\read1
+ \blx@bcfout=\write4
+ \c@mincomprange=\count131
+ \c@maxcomprange=\count132
+ \c@mincompwidth=\count133
+ Package biblatex Info: Trying to load biblatex default data model...
+ Package biblatex Info: ... file 'blx-dm.def' found.
+
+ (/TexLive/texmf-dist/tex/latex/biblatex/blx-dm.def)
+ Package biblatex Info: Trying to load biblatex style data model...
+ Package biblatex Info: ... file 'ieee.dbx' not found.
+ Package biblatex Info: Trying to load biblatex custom data model...
+ Package biblatex Info: ... file 'biblatex-dm.cfg' not found.
+ \c@afterword=\count134
+ \c@savedafterword=\count135
+ \c@annotator=\count136
+ \c@savedannotator=\count137
+ \c@author=\count138
+ \c@savedauthor=\count139
+ \c@bookauthor=\count140
+ \c@savedbookauthor=\count141
+ \c@commentator=\count142
+ \c@savedcommentator=\count143
+ \c@editor=\count144
+ \c@savededitor=\count145
+ \c@editora=\count146
+ \c@savededitora=\count147
+ \c@editorb=\count148
+ \c@savededitorb=\count149
+ \c@editorc=\count150
+ \c@savededitorc=\count151
+ \c@foreword=\count152
+ \c@savedforeword=\count153
+ \c@holder=\count154
+ \c@savedholder=\count155
+ \c@introduction=\count156
+ \c@savedintroduction=\count157
+ \c@namea=\count158
+ \c@savednamea=\count159
+ \c@nameb=\count160
+ \c@savednameb=\count161
+ \c@namec=\count162
+ \c@savednamec=\count163
+ \c@translator=\count164
+ \c@savedtranslator=\count165
+ \c@shortauthor=\count166
+ \c@savedshortauthor=\count167
+ \c@shorteditor=\count168
+ \c@savedshorteditor=\count169
+ \c@labelname=\count170
+ \c@savedlabelname=\count171
+ \c@institution=\count172
+ \c@savedinstitution=\count173
+ \c@lista=\count174
+ \c@savedlista=\count175
+ \c@listb=\count176
+ \c@savedlistb=\count177
+ \c@listc=\count178
+ \c@savedlistc=\count179
+ \c@listd=\count180
+ \c@savedlistd=\count181
+ \c@liste=\count182
+ \c@savedliste=\count183
+ \c@listf=\count184
+ \c@savedlistf=\count185
+ \c@location=\count186
+ \c@savedlocation=\count187
+ \c@organization=\count188
+ \c@savedorganization=\count189
+ \c@origlocation=\count190
+ \c@savedoriglocation=\count191
+ \c@origpublisher=\count192
+ \c@savedorigpublisher=\count193
+ \c@publisher=\count194
+ \c@savedpublisher=\count195
+ \c@language=\count196
+ \c@savedlanguage=\count197
+ \c@pageref=\count198
+ \c@savedpageref=\count199
+ \shorthandwidth=\skip51
+ \shortjournalwidth=\skip52
+ \shortserieswidth=\skip53
+ \shorttitlewidth=\skip54
+ \shortauthorwidth=\skip55
+ \shorteditorwidth=\skip56
+ Package biblatex Info: Trying to load compatibility code...
+ Package biblatex Info: ... file 'blx-compat.def' found.
+
+ (/TexLive/texmf-dist/tex/latex/biblatex/blx-compat.def
+ File: blx-compat.def 2016/12/05 v3.7 biblatex compatibility (PK/JW/AB)
+ )
+ Package biblatex Info: Trying to load generic definitions...
+ Package biblatex Info: ... file 'biblatex.def' found.
+
+ (/TexLive/texmf-dist/tex/latex/biblatex/biblatex.def
+ File: biblatex.def 2016/12/05 v3.7 biblatex compatibility (PK/JW/AB)
+ \c@textcitecount=\count266
+ \c@textcitetotal=\count267
+ \c@textcitemaxnames=\count268
+ \c@biburlnumpenalty=\count269
+ \c@biburlucpenalty=\count270
+ \c@biburllcpenalty=\count271
+ \c@smartand=\count272
+ )
+ Package biblatex Info: Trying to load bibliography style 'ieee'...
+ Package biblatex Info: ... file 'ieee.bbx' found.
+
+ (/TexLive/texmf-dist/tex/latex/biblatex-ieee/ieee.bbx
+ File: ieee.bbx 2017/03/27 v1.2d biblatex bibliography style
+ Package biblatex Info: Trying to load bibliography style 'numeric-comp'...
+ Package biblatex Info: ... file 'numeric-comp.bbx' found.
+
+ (/TexLive/texmf-dist/tex/latex/biblatex/bbx/numeric-comp.bbx
+ File: numeric-comp.bbx 2016/12/05 v3.7 biblatex bibliography style (PK/JW/AB)
+ Package biblatex Info: Trying to load bibliography style 'numeric'...
+ Package biblatex Info: ... file 'numeric.bbx' found.
+
+ (/TexLive/texmf-dist/tex/latex/biblatex/bbx/numeric.bbx
+ File: numeric.bbx 2016/12/05 v3.7 biblatex bibliography style (PK/JW/AB)
+ Package biblatex Info: Trying to load bibliography style 'standard'...
+ Package biblatex Info: ... file 'standard.bbx' found.
+
+ (/TexLive/texmf-dist/tex/latex/biblatex/bbx/standard.bbx
+ File: standard.bbx 2016/12/05 v3.7 biblatex bibliography style (PK/JW/AB)
+ \c@bbx:relatedcount=\count273
+ \c@bbx:relatedtotal=\count274
+ ))))
+ Package biblatex Info: Trying to load citation style 'ieee'...
+ Package biblatex Info: ... file 'ieee.cbx' found.
+
+ (/TexLive/texmf-dist/tex/latex/biblatex-ieee/ieee.cbx
+ File: ieee.cbx 2017/03/27 v1.2d biblatex citation style
+ Package biblatex Info: Trying to load citation style 'numeric-comp'...
+ Package biblatex Info: ... file 'numeric-comp.cbx' found.
+
+ (/TexLive/texmf-dist/tex/latex/biblatex/cbx/numeric-comp.cbx
+ File: numeric-comp.cbx 2016/12/05 v3.7 biblatex citation style (PK/JW/AB)
+ \c@cbx@tempcnta=\count275
+ \c@cbx@tempcntb=\count276
+ Package biblatex Info: Redefining '\cite'.
+ Package biblatex Info: Redefining '\parencite'.
+ Package biblatex Info: Redefining '\footcite'.
+ Package biblatex Info: Redefining '\footcitetext'.
+ Package biblatex Info: Redefining '\smartcite'.
+ Package biblatex Info: Redefining '\supercite'.
+ Package biblatex Info: Redefining '\textcite'.
+ Package biblatex Info: Redefining '\textcites'.
+ Package biblatex Info: Redefining '\cites'.
+ Package biblatex Info: Redefining '\parencites'.
+ Package biblatex Info: Redefining '\smartcites'.
+ )
+ Package biblatex Info: Redefining '\cite'.
+ Package biblatex Info: Redefining '\cites'.
+ )
+ Package biblatex Info: Trying to load configuration file...
+ Package biblatex Info: ... file 'biblatex.cfg' found.
+
+ (/TexLive/texmf-dist/tex/latex/biblatex/biblatex.cfg
+ File: biblatex.cfg
+ ))
+ Package biblatex Info: Trying to load language 'spanish'...
+ Package biblatex Info: ... file 'spanish.lbx' found.
+
+ (/TexLive/texmf-dist/tex/latex/biblatex/lbx/spanish.lbx
+ File: spanish.lbx 2016/12/05 v3.7 biblatex localization (PK/JW/AB)
+ )
+
+ Package biblatex Warning: 'babel/polyglossia' detected but 'csquotes' missing.
+ (biblatex) Loading 'csquotes' recommended.
+
+ \@quotelevel=\count277
+ \@quotereset=\count278
+ (./parent.aux)
+ \openout1 = `parent.aux'.
+
+ LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 6.
+ LaTeX Font Info: ... okay on input line 6.
+ LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 6.
+ LaTeX Font Info: ... okay on input line 6.
+ LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 6.
+ LaTeX Font Info: ... okay on input line 6.
+ LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 6.
+ LaTeX Font Info: ... okay on input line 6.
+ LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 6.
+ LaTeX Font Info: ... okay on input line 6.
+ LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 6.
+ LaTeX Font Info: ... okay on input line 6.
+ LaTeX Info: Redefining \sptext on input line 6.
+ LaTeX Info: Redefining \. on input line 6.
+ LaTeX Info: Redefining \% on input line 6.
+ Package biblatex Info: No input encoding detected.
+ (biblatex) Assuming 'ascii'.
+ Package biblatex Info: Automatic encoding selection.
+ (biblatex) Assuming data encoding 'ascii'.
+ \openout4 = `parent.bcf'.
+
+ Package biblatex Info: Trying to load bibliographic data...
+ Package biblatex Info: ... file 'parent.bbl' not found.
+
+ No file parent.bbl.
+ Package biblatex Info: Reference section=0 on input line 6.
+ Package biblatex Info: Reference segment=0 on input line 6.
+ (./parent.aux)
+
+ LaTeX Warning: There were undefined references.
+
+
+ Package biblatex Warning: Please (re)run Biber on the file:
+ (biblatex) parent
+ (biblatex) and rerun LaTeX afterwards.
+
+ Package logreq Info: Writing requests to 'parent.run.xml'.
+ \openout1 = `parent.run.xml'.
+
+ )
+ Here is how much of TeX's memory you used:
+ 7717 strings out of 492995
+ 133301 string characters out of 6138727
+ 557258 words of memory out of 5000000
+ 11248 multiletter control sequences out of 15000+600000
+ 3640 words of font info for 14 fonts, out of 8000000 for 9000
+ 1141 hyphenation exceptions out of 8191
+ 35i,1n,30p,856b,700s stack positions out of 5000i,500n,10000p,200000b,80000s
+
+ No pages of output.
+ PDF statistics:
+ 0 PDF objects out of 1000 (max. 8388607)
+ 0 named destinations out of 1000 (max. 500000)
+ 1 words of extra memory for PDF output out of 10000 (max. 10000000)"#
+ );
+
+ let actual_errors = parse_build_log(&create_uri("parent.tex"), log);
+
let error1 = BuildError::new(
create_uri("parent.tex"),
BuildErrorKind::Warning,
@@ -383,59 +1095,189 @@ mod tests {
let error2 = BuildError::new(
create_uri("parent.tex"),
BuildErrorKind::Warning,
- "There were undefined references.".to_owned(),
+ "There were undefined references.".into(),
None,
);
let error3 = BuildError::new(
create_uri("parent.tex"),
BuildErrorKind::Warning,
- "Please (re)run Biber on the file: parent and rerun LaTeX afterwards.".to_owned(),
+ "Please (re)run Biber on the file: parent and rerun LaTeX afterwards.".into(),
None,
);
- verify("package-warning.log", vec![error1, error2, error3]);
+ assert_eq!(actual_errors, vec![error1, error2, error3]);
}
#[test]
- fn test_tex_error() {
+ fn tex_error() {
+ let log = indoc!(
+ r#"
+ This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:33
+ entering extended mode
+ restricted \write18 enabled.
+ %&-line parsing enabled.
+ **./parent.tex
+ (./parent.tex
+ LaTeX2e <2017-04-15>
+ Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
+ (/TexLive/texmf-dist/tex/latex/base/article.cls
+ Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
+ (/TexLive/texmf-dist/tex/latex/base/size10.clo
+ File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
+ )
+ \c@part=\count79
+ \c@section=\count80
+ \c@subsection=\count81
+ \c@subsubsection=\count82
+ \c@paragraph=\count83
+ \c@subparagraph=\count84
+ \c@figure=\count85
+ \c@table=\count86
+ \abovecaptionskip=\skip41
+ \belowcaptionskip=\skip42
+ \bibindent=\dimen102
+ ) (./parent.aux
+ (./child.tex.aux))
+ \openout1 = `parent.aux'.
+
+ LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 3.
+ LaTeX Font Info: ... okay on input line 3.
+ LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 3.
+ LaTeX Font Info: ... okay on input line 3.
+ LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 3.
+ LaTeX Font Info: ... okay on input line 3.
+ LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 3.
+ LaTeX Font Info: ... okay on input line 3.
+ LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 3.
+ LaTeX Font Info: ... okay on input line 3.
+ LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 3.
+ LaTeX Font Info: ... okay on input line 3.
+ \openout2 = `child.aux'.
+
+ (./child.tex)
+ ! Undefined control sequence.
+ l.7 \foo
+
+ The control sequence at the end of the top line
+ of your error message was never \def'ed. If you have
+ misspelled it (e.g., `\hobx'), type `I' and the correct
+ spelling (e.g., `I\hbox'). Otherwise just continue,
+ and I'll forget about whatever was undefined.
+
+ ! Missing $ inserted.
+ <inserted text>
+ $
+ l.8 \bar
+
+ I've inserted a begin-math/end-math symbol since I think
+ you left one out. Proceed, with fingers crossed.
+
+ LaTeX Font Info: External font `cmex10' loaded for size
+ (Font) <7> on input line 8.
+ LaTeX Font Info: External font `cmex10' loaded for size
+ (Font) <5> on input line 8.
+ ! Undefined control sequence.
+ l.9 \baz
+
+ The control sequence at the end of the top line
+ of your error message was never \def'ed. If you have
+ misspelled it (e.g., `\hobx'), type `I' and the correct
+ spelling (e.g., `I\hbox'). Otherwise just continue,
+ and I'll forget about whatever was undefined.
+
+ ! Missing { inserted.
+ <to be read again>
+ \par
+ l.10
+
+ A left brace was mandatory here, so I've put one in.
+ You might want to delete and/or insert some corrections
+ so that I will find a matching right brace soon.
+ (If you're confused by all this, try typing `I}' now.)
+
+ ! Missing $ inserted.
+ <inserted text>
+ $
+ l.10
+
+ I've inserted a begin-math/end-math symbol since I think
+ you left one out. Proceed, with fingers crossed.
+
+ ! Missing } inserted.
+ <inserted text>
+ }
+ l.10
+
+ I've inserted something that you may have forgotten.
+ (See the <inserted text> above.)
+ With luck, this will get me unwedged. But if you
+ really didn't forget anything, try typing `2' now; then
+ my insertion and my current dilemma will both disappear.
+
+ [1
+
+
+
+ {/TexLive/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] (./parent.aux
+ (./child.aux)) )
+ Here is how much of TeX's memory you used:
+ 212 strings out of 492995
+ 2238 string characters out of 6138727
+ 54074 words of memory out of 5000000
+ 3843 multiletter control sequences out of 15000+600000
+ 3640 words of font info for 14 fonts, out of 8000000 for 9000
+ 1141 hyphenation exceptions out of 8191
+ 23i,4n,17p,116b,107s stack positions out of 5000i,500n,10000p,200000b,80000s
+ </TexLive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb
+ >
+ Output written on parent.pdf (1 page, 8329 bytes).
+ PDF statistics:
+ 12 PDF objects out of 1000 (max. 8388607)
+ 7 compressed objects within 1 object stream
+ 0 named destinations out of 1000 (max. 500000)
+ 1 words of extra memory for PDF output out of 10000 (max. 10000000)"#
+ );
+
+ let actual_errors = parse_build_log(&create_uri("parent.tex"), log);
+
let error1 = BuildError::new(
create_uri("parent.tex"),
BuildErrorKind::Error,
- "Undefined control sequence.".to_owned(),
+ "Undefined control sequence.".into(),
Some(6),
);
let error2 = BuildError::new(
create_uri("parent.tex"),
BuildErrorKind::Error,
- "Missing $ inserted.".to_owned(),
+ "Missing $ inserted.".into(),
Some(7),
);
let error3 = BuildError::new(
create_uri("parent.tex"),
BuildErrorKind::Error,
- "Undefined control sequence.".to_owned(),
+ "Undefined control sequence.".into(),
Some(8),
);
let error4 = BuildError::new(
create_uri("parent.tex"),
BuildErrorKind::Error,
- "Missing { inserted.".to_owned(),
+ "Missing { inserted.".into(),
Some(9),
);
let error5 = BuildError::new(
create_uri("parent.tex"),
BuildErrorKind::Error,
- "Missing $ inserted.".to_owned(),
+ "Missing $ inserted.".into(),
Some(9),
);
let error6 = BuildError::new(
create_uri("parent.tex"),
BuildErrorKind::Error,
- "Missing } inserted.".to_owned(),
+ "Missing } inserted.".into(),
Some(9),
);
- verify(
- "tex-error.log",
- vec![error1, error2, error3, error4, error5, error6],
+ assert_eq!(
+ actual_errors,
+ vec![error1, error2, error3, error4, error5, error6]
);
}
}
diff --git a/support/texlab/src/diagnostics/latex.rs b/support/texlab/src/diagnostics/latex.rs
index 8b15f67dfc..95fcaeeacf 100644
--- a/support/texlab/src/diagnostics/latex.rs
+++ b/support/texlab/src/diagnostics/latex.rs
@@ -1,33 +1,22 @@
-use crate::range::RangeExt;
-use crate::workspace::{Document, Uri};
-use lsp_types::*;
+use crate::{
+ protocol::{Diagnostic, DiagnosticSeverity, NumberOrString, Range, RangeExt, Uri},
+ workspace::Document,
+};
+use chashmap::CHashMap;
+use futures::{
+ future::{AbortHandle, Abortable, Aborted},
+ lock::Mutex,
+};
+use log::trace;
use once_cell::sync::Lazy;
use regex::Regex;
-use serde::{Deserialize, Serialize};
-use std::collections::HashMap;
-use std::io::{Read, Write};
-use std::process::{Command, Stdio};
+use std::process::Stdio;
+use tokio::{prelude::*, process::Command};
-#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, Default)]
-#[serde(rename_all = "camelCase")]
-pub struct LatexLintOptions {
- pub on_change: Option<bool>,
- pub on_save: Option<bool>,
-}
-
-impl LatexLintOptions {
- pub fn on_change(&self) -> bool {
- self.on_change.unwrap_or(false)
- }
-
- pub fn on_save(&self) -> bool {
- self.on_save.unwrap_or(false)
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Default)]
+#[derive(Debug, Default)]
pub struct LatexDiagnosticsProvider {
- diagnostics_by_uri: HashMap<Uri, Vec<Diagnostic>>,
+ diagnostics_by_uri: CHashMap<Uri, Vec<Diagnostic>>,
+ handle: Mutex<Option<AbortHandle>>,
}
impl LatexDiagnosticsProvider {
@@ -38,34 +27,52 @@ impl LatexDiagnosticsProvider {
}
}
- pub fn update(&mut self, uri: &Uri, text: &str) {
+ pub async fn update(&self, uri: &Uri, text: &str) {
if uri.scheme() != "file" {
return;
}
- self.diagnostics_by_uri
- .insert(uri.clone(), lint(text).unwrap_or_default());
+ let mut handle_guard = self.handle.lock().await;
+ if let Some(handle) = &*handle_guard {
+ handle.abort();
+ }
+
+ let (handle, registration) = AbortHandle::new_pair();
+ *handle_guard = Some(handle);
+ drop(handle_guard);
+
+ let future = Abortable::new(
+ async move {
+ self.diagnostics_by_uri
+ .insert(uri.clone(), lint(text.into()).await.unwrap_or_default());
+ },
+ registration,
+ );
+
+ if let Err(Aborted) = future.await {
+ trace!("Killed ChkTeX because it took too long to execute")
+ }
}
}
pub static LINE_REGEX: Lazy<Regex> =
- Lazy::new(|| Regex::new("(\\d+):(\\d+):(\\d+):(\\w+):(\\w)+:(.*)").unwrap());
+ Lazy::new(|| Regex::new("(\\d+):(\\d+):(\\d+):(\\w+):(\\w+):(.*)").unwrap());
-fn lint(text: &str) -> Option<Vec<Diagnostic>> {
- let mut process = Command::new("chktex")
+async fn lint(text: String) -> io::Result<Vec<Diagnostic>> {
+ let mut process: tokio::process::Child = Command::new("chktex")
.args(&["-I0", "-f%l:%c:%d:%k:%n:%m\n"])
.stdin(Stdio::piped())
.stdout(Stdio::piped())
.stderr(Stdio::null())
- .spawn()
- .ok()?;
+ .kill_on_drop(true)
+ .spawn()?;
process
.stdin
.take()
.unwrap()
.write_all(text.as_bytes())
- .ok()?;
+ .await?;
let mut stdout = String::new();
process
@@ -73,7 +80,7 @@ fn lint(text: &str) -> Option<Vec<Diagnostic>> {
.take()
.unwrap()
.read_to_string(&mut stdout)
- .ok()?;
+ .await?;
let mut diagnostics = Vec::new();
for line in stdout.lines() {
@@ -83,7 +90,7 @@ fn lint(text: &str) -> Option<Vec<Diagnostic>> {
let digit = captures[3].parse::<u64>().unwrap();
let kind = &captures[4];
let code = &captures[5];
- let message = captures[6].to_owned();
+ let message = captures[6].into();
let range = Range::new_simple(line, character, line, character + digit);
let severity = match kind {
"Message" => DiagnosticSeverity::Information,
@@ -93,13 +100,14 @@ fn lint(text: &str) -> Option<Vec<Diagnostic>> {
diagnostics.push(Diagnostic {
source: Some("chktex".into()),
- code: Some(NumberOrString::String(code.to_owned())),
+ code: Some(NumberOrString::String(code.into())),
message,
severity: Some(severity),
range,
related_information: None,
+ tags: None,
})
}
}
- Some(diagnostics)
+ Ok(diagnostics)
}
diff --git a/support/texlab/src/diagnostics/mod.rs b/support/texlab/src/diagnostics/mod.rs
index c738395028..906da9858f 100644
--- a/support/texlab/src/diagnostics/mod.rs
+++ b/support/texlab/src/diagnostics/mod.rs
@@ -2,27 +2,27 @@ mod bibtex;
mod build;
mod latex;
-use self::bibtex::BibtexDiagnosticsProvider;
-pub use self::bibtex::BibtexErrorCode;
-use self::build::BuildDiagnosticsProvider;
-use self::latex::LatexDiagnosticsProvider;
-pub use self::latex::LatexLintOptions;
-use crate::workspace::Document;
-use lsp_types::Diagnostic;
+pub use self::{
+ bibtex::{BibtexDiagnosticsProvider, BibtexError, BibtexErrorCode},
+ build::BuildDiagnosticsProvider,
+ latex::LatexDiagnosticsProvider,
+};
-#[derive(Debug, PartialEq, Eq, Clone, Default)]
+use crate::{protocol::Diagnostic, workspace::Document};
+
+#[derive(Debug, Default)]
pub struct DiagnosticsManager {
- pub build: BuildDiagnosticsProvider,
- pub latex: LatexDiagnosticsProvider,
pub bibtex: BibtexDiagnosticsProvider,
+ pub latex: LatexDiagnosticsProvider,
+ pub build: BuildDiagnosticsProvider,
}
impl DiagnosticsManager {
- pub fn get(&self, document: &Document) -> Vec<Diagnostic> {
+ pub async fn get(&self, doc: &Document) -> Vec<Diagnostic> {
let mut diagnostics = Vec::new();
- diagnostics.append(&mut self.build.get(document));
- diagnostics.append(&mut self.latex.get(document));
- diagnostics.append(&mut self.bibtex.get(document));
+ diagnostics.append(&mut self.bibtex.get(doc));
+ diagnostics.append(&mut self.latex.get(doc));
+ diagnostics.append(&mut self.build.get(doc).await);
diagnostics
}
}
diff --git a/support/texlab/src/feature.rs b/support/texlab/src/feature.rs
new file mode 100644
index 0000000000..2b32b64188
--- /dev/null
+++ b/support/texlab/src/feature.rs
@@ -0,0 +1,405 @@
+use crate::{
+ components::{Component, COMPONENT_DATABASE},
+ protocol::*,
+ tex::{Distribution, Language, UnknownDistribution},
+ workspace::{Document, DocumentContent, DocumentParams, Snapshot},
+};
+use async_trait::async_trait;
+use itertools::Itertools;
+use std::{
+ env,
+ path::{Path, PathBuf},
+ sync::Arc,
+};
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+pub struct DocumentView {
+ pub snapshot: Arc<Snapshot>,
+ pub current: Arc<Document>,
+ pub related: Vec<Arc<Document>>,
+}
+
+impl DocumentView {
+ pub fn analyze(
+ snapshot: Arc<Snapshot>,
+ current: Arc<Document>,
+ options: &Options,
+ current_dir: &Path,
+ ) -> Self {
+ let related = snapshot.relations(&current.uri, options, current_dir);
+ Self {
+ snapshot,
+ current,
+ related,
+ }
+ }
+
+ pub fn components(&self) -> Vec<&'static Component> {
+ let mut start_components = vec![COMPONENT_DATABASE.kernel()];
+ for doc in &self.related {
+ if let DocumentContent::Latex(table) = &doc.content {
+ table
+ .components
+ .iter()
+ .flat_map(|file| COMPONENT_DATABASE.find(file))
+ .for_each(|component| start_components.push(component))
+ }
+ }
+
+ let mut all_components = Vec::new();
+ for component in start_components {
+ all_components.push(component);
+ component
+ .references
+ .iter()
+ .flat_map(|file| COMPONENT_DATABASE.find(&file))
+ .for_each(|component| all_components.push(component))
+ }
+
+ all_components
+ .into_iter()
+ .unique_by(|component| &component.file_names)
+ .collect()
+ }
+}
+
+#[derive(Clone)]
+pub struct FeatureRequest<P> {
+ pub params: P,
+ pub view: DocumentView,
+ pub distro: Arc<dyn Distribution>,
+ pub client_capabilities: Arc<ClientCapabilities>,
+ pub options: Options,
+ pub current_dir: Arc<PathBuf>,
+}
+
+impl<P> FeatureRequest<P> {
+ pub fn snapshot(&self) -> &Snapshot {
+ &self.view.snapshot
+ }
+
+ pub fn current(&self) -> &Document {
+ &self.view.current
+ }
+
+ pub fn related(&self) -> &[Arc<Document>] {
+ &self.view.related
+ }
+}
+
+#[async_trait]
+pub trait FeatureProvider {
+ type Params;
+ type Output;
+
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output;
+}
+
+type ListProvider<P, O> = Box<dyn FeatureProvider<Params = P, Output = Vec<O>> + Send + Sync>;
+
+#[derive(Default)]
+pub struct ConcatProvider<P, O> {
+ providers: Vec<ListProvider<P, O>>,
+}
+
+impl<P, O> ConcatProvider<P, O> {
+ pub fn new(providers: Vec<ListProvider<P, O>>) -> Self {
+ Self { providers }
+ }
+}
+
+#[async_trait]
+impl<P, O> FeatureProvider for ConcatProvider<P, O>
+where
+ P: Send + Sync,
+ O: Send + Sync,
+{
+ type Params = P;
+ type Output = Vec<O>;
+
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<P>) -> Vec<O> {
+ let mut items = Vec::new();
+ for provider in &self.providers {
+ items.append(&mut provider.execute(req).await);
+ }
+ items
+ }
+}
+
+type OptionProvider<P, O> = Box<dyn FeatureProvider<Params = P, Output = Option<O>> + Send + Sync>;
+
+#[derive(Default)]
+pub struct ChoiceProvider<P, O> {
+ providers: Vec<OptionProvider<P, O>>,
+}
+
+impl<P, O> ChoiceProvider<P, O> {
+ pub fn new(providers: Vec<OptionProvider<P, O>>) -> Self {
+ Self { providers }
+ }
+}
+
+#[async_trait]
+impl<P, O> FeatureProvider for ChoiceProvider<P, O>
+where
+ P: Send + Sync,
+ O: Send + Sync,
+{
+ type Params = P;
+ type Output = Option<O>;
+
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<P>) -> Option<O> {
+ for provider in &self.providers {
+ let item = provider.execute(req).await;
+ if item.is_some() {
+ return item;
+ }
+ }
+ None
+ }
+}
+
+#[derive(Debug)]
+pub struct FeatureTester {
+ main: String,
+ files: Vec<(String, String)>,
+ distro: Arc<dyn Distribution>,
+ position: Position,
+ new_name: String,
+ include_declaration: bool,
+ client_capabilities: Arc<ClientCapabilities>,
+ current_dir: Arc<PathBuf>,
+ root_dir: Option<PathBuf>,
+ output_dir: Option<PathBuf>,
+}
+
+impl Default for FeatureTester {
+ fn default() -> Self {
+ Self::new()
+ }
+}
+
+impl FeatureTester {
+ pub fn new() -> Self {
+ Self {
+ main: String::new(),
+ files: Vec::new(),
+ distro: Arc::new(UnknownDistribution::default()),
+ position: Position::default(),
+ new_name: String::new(),
+ include_declaration: false,
+ client_capabilities: Arc::default(),
+ current_dir: Arc::new(env::temp_dir()),
+ root_dir: None,
+ output_dir: None,
+ }
+ }
+
+ pub fn main<S: Into<String>>(&mut self, name: S) -> &mut Self {
+ self.main = name.into();
+ self
+ }
+
+ pub fn file<S, T>(&mut self, name: S, text: T) -> &mut Self
+ where
+ S: Into<String>,
+ T: Into<String>,
+ {
+ self.files.push((name.into(), text.into()));
+ self
+ }
+
+ pub fn position(&mut self, line: u64, character: u64) -> &mut Self {
+ self.position = Position::new(line, character);
+ self
+ }
+
+ pub fn new_name<S: Into<String>>(&mut self, value: S) -> &mut Self {
+ self.new_name = value.into();
+ self
+ }
+
+ pub fn include_declaration(&mut self) -> &mut Self {
+ self.include_declaration = true;
+ self
+ }
+
+ pub fn root_directory<P: Into<PathBuf>>(&mut self, path: P) -> &mut Self {
+ self.root_dir = Some(path.into());
+ self
+ }
+
+ pub fn output_directory<P: Into<PathBuf>>(&mut self, path: P) -> &mut Self {
+ self.output_dir = Some(path.into());
+ self
+ }
+
+ pub fn uri(name: &str) -> Uri {
+ let path = env::temp_dir().join(name);
+ Uri::from_file_path(path).unwrap()
+ }
+
+ fn identifier(&self) -> TextDocumentIdentifier {
+ let uri = Self::uri(&self.main);
+ TextDocumentIdentifier::new(uri.into())
+ }
+
+ fn options(&self) -> Options {
+ Options {
+ latex: Some(LatexOptions {
+ build: Some(LatexBuildOptions {
+ output_directory: self.output_dir.clone(),
+ ..LatexBuildOptions::default()
+ }),
+ root_directory: self.root_dir.clone(),
+ ..LatexOptions::default()
+ }),
+ ..Options::default()
+ }
+ }
+
+ async fn view(&self) -> DocumentView {
+ let mut snapshot = Snapshot::new();
+ let resolver = self.distro.resolver().await;
+ let options = self.options();
+ for (name, text) in &self.files {
+ let uri = Self::uri(name);
+ let path = uri.to_file_path().unwrap();
+ let language = path
+ .extension()
+ .and_then(|ext| ext.to_str())
+ .and_then(Language::by_extension)
+ .unwrap();
+ let doc = Document::open(DocumentParams {
+ uri,
+ text: text.trim().into(),
+ language,
+ resolver: &resolver,
+ options: &options,
+ current_dir: &self.current_dir,
+ });
+ snapshot.push(doc);
+ }
+ let current = snapshot.find(&Self::uri(&self.main)).unwrap();
+ DocumentView::analyze(Arc::new(snapshot), current, &options, &self.current_dir)
+ }
+
+ async fn request<P>(&self, params: P) -> FeatureRequest<P> {
+ FeatureRequest {
+ params,
+ view: self.view().await,
+ client_capabilities: Arc::clone(&self.client_capabilities),
+ distro: self.distro.clone(),
+ options: self.options(),
+ current_dir: Arc::clone(&self.current_dir),
+ }
+ }
+
+ pub async fn test_position<F, O>(&self, provider: F) -> O
+ where
+ F: FeatureProvider<Params = TextDocumentPositionParams, Output = O>,
+ {
+ let text_document = self.identifier();
+ let params = TextDocumentPositionParams::new(text_document, self.position);
+ let req = self.request(params).await;
+ provider.execute(&req).await
+ }
+
+ pub async fn test_completion<F, O>(&self, provider: F) -> O
+ where
+ F: FeatureProvider<Params = CompletionParams, Output = O>,
+ {
+ let req = self.test_completion_request().await;
+ provider.execute(&req).await
+ }
+
+ pub async fn test_completion_request(&self) -> FeatureRequest<CompletionParams> {
+ let params = CompletionParams {
+ text_document_position: TextDocumentPositionParams::new(
+ self.identifier(),
+ self.position,
+ ),
+ context: None,
+ work_done_progress_params: WorkDoneProgressParams::default(),
+ partial_result_params: PartialResultParams::default(),
+ };
+ self.request(params).await
+ }
+
+ pub async fn test_folding<F, O>(&self, provider: F) -> O
+ where
+ F: FeatureProvider<Params = FoldingRangeParams, Output = O>,
+ {
+ let text_document = self.identifier();
+ let params = FoldingRangeParams {
+ text_document,
+ work_done_progress_params: WorkDoneProgressParams::default(),
+ partial_result_params: PartialResultParams::default(),
+ };
+ let req = self.request(params).await;
+ provider.execute(&req).await
+ }
+
+ pub async fn test_link<F, O>(&self, provider: F) -> O
+ where
+ F: FeatureProvider<Params = DocumentLinkParams, Output = O>,
+ {
+ let text_document = self.identifier();
+ let params = DocumentLinkParams {
+ text_document,
+ work_done_progress_params: WorkDoneProgressParams::default(),
+ partial_result_params: PartialResultParams::default(),
+ };
+ let req = self.request(params).await;
+ provider.execute(&req).await
+ }
+
+ pub async fn test_reference<F, O>(&self, provider: F) -> O
+ where
+ F: FeatureProvider<Params = ReferenceParams, Output = O>,
+ {
+ let params = ReferenceParams {
+ text_document_position: TextDocumentPositionParams::new(
+ self.identifier(),
+ self.position,
+ ),
+ context: ReferenceContext {
+ include_declaration: self.include_declaration,
+ },
+ work_done_progress_params: WorkDoneProgressParams::default(),
+ partial_result_params: PartialResultParams::default(),
+ };
+ let req = self.request(params).await;
+ provider.execute(&req).await
+ }
+
+ pub async fn test_rename<F, O>(&self, provider: F) -> O
+ where
+ F: FeatureProvider<Params = RenameParams, Output = O>,
+ {
+ let params = RenameParams {
+ text_document_position: TextDocumentPositionParams::new(
+ self.identifier(),
+ self.position,
+ ),
+ new_name: self.new_name.clone(),
+ work_done_progress_params: WorkDoneProgressParams::default(),
+ };
+ let req = self.request(params).await;
+ provider.execute(&req).await
+ }
+
+ pub async fn test_symbol<F, O>(&self, provider: F) -> O
+ where
+ F: FeatureProvider<Params = DocumentSymbolParams, Output = O>,
+ {
+ let text_document = self.identifier();
+ let params = DocumentSymbolParams {
+ text_document,
+ work_done_progress_params: WorkDoneProgressParams::default(),
+ partial_result_params: PartialResultParams::default(),
+ };
+ let req = self.request(params).await;
+ provider.execute(&req).await
+ }
+}
diff --git a/support/texlab/src/folding/bibtex_decl.rs b/support/texlab/src/folding/bibtex_decl.rs
new file mode 100644
index 0000000000..f0ffa787e1
--- /dev/null
+++ b/support/texlab/src/folding/bibtex_decl.rs
@@ -0,0 +1,159 @@
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{FoldingRange, FoldingRangeKind, FoldingRangeParams},
+ syntax::{bibtex, SyntaxNode},
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
+use petgraph::graph::NodeIndex;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
+pub struct BibtexDeclarationFoldingProvider;
+
+#[async_trait]
+impl FeatureProvider for BibtexDeclarationFoldingProvider {
+ type Params = FoldingRangeParams;
+ type Output = Vec<FoldingRange>;
+
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ if let DocumentContent::Bibtex(tree) = &req.current().content {
+ tree.children(tree.root)
+ .filter_map(|decl| Self::fold(tree, decl))
+ .collect()
+ } else {
+ Vec::new()
+ }
+ }
+}
+
+impl BibtexDeclarationFoldingProvider {
+ fn fold(tree: &bibtex::Tree, decl: NodeIndex) -> Option<FoldingRange> {
+ let (ty, right) = match &tree.graph[decl] {
+ bibtex::Node::Preamble(preamble) => (Some(&preamble.ty), preamble.right.as_ref()),
+ bibtex::Node::String(string) => (Some(&string.ty), string.right.as_ref()),
+ bibtex::Node::Entry(entry) => (Some(&entry.ty), entry.right.as_ref()),
+ bibtex::Node::Root(_)
+ | bibtex::Node::Comment(_)
+ | bibtex::Node::Field(_)
+ | bibtex::Node::Word(_)
+ | bibtex::Node::Command(_)
+ | bibtex::Node::QuotedContent(_)
+ | bibtex::Node::BracedContent(_)
+ | bibtex::Node::Concat(_) => (None, None),
+ };
+
+ Some(FoldingRange {
+ start_line: ty?.start().line,
+ start_character: Some(ty?.start().character),
+ end_line: right?.end().line,
+ end_character: Some(right?.end().character),
+ kind: Some(FoldingRangeKind::Region),
+ })
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::feature::FeatureTester;
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn preamble() {
+ let actual_foldings = FeatureTester::new()
+ .file("main.bib", r#"@preamble{"foo"}"#)
+ .main("main.bib")
+ .test_folding(BibtexDeclarationFoldingProvider)
+ .await;
+
+ let expected_foldings = vec![FoldingRange {
+ start_line: 0,
+ start_character: Some(0),
+ end_line: 0,
+ end_character: Some(16),
+ kind: Some(FoldingRangeKind::Region),
+ }];
+
+ assert_eq!(actual_foldings, expected_foldings);
+ }
+
+ #[tokio::test]
+ async fn string() {
+ let actual_foldings = FeatureTester::new()
+ .file("main.bib", r#"@string{foo = "bar"}"#)
+ .main("main.bib")
+ .test_folding(BibtexDeclarationFoldingProvider)
+ .await;
+
+ let expected_foldings = vec![FoldingRange {
+ start_line: 0,
+ start_character: Some(0),
+ end_line: 0,
+ end_character: Some(20),
+ kind: Some(FoldingRangeKind::Region),
+ }];
+
+ assert_eq!(actual_foldings, expected_foldings);
+ }
+
+ #[tokio::test]
+ async fn entry() {
+ let actual_foldings = FeatureTester::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @article{foo,
+ bar = baz
+ }
+ "#
+ ),
+ )
+ .main("main.bib")
+ .test_folding(BibtexDeclarationFoldingProvider)
+ .await;
+
+ let expected_foldings = vec![FoldingRange {
+ start_line: 0,
+ start_character: Some(0),
+ end_line: 2,
+ end_character: Some(1),
+ kind: Some(FoldingRangeKind::Region),
+ }];
+
+ assert_eq!(actual_foldings, expected_foldings);
+ }
+
+ #[tokio::test]
+ async fn comment() {
+ let actual_foldings = FeatureTester::new()
+ .file("main.bib", "foo")
+ .main("main.bib")
+ .test_folding(BibtexDeclarationFoldingProvider)
+ .await;
+
+ assert!(actual_foldings.is_empty());
+ }
+
+ #[tokio::test]
+ async fn entry_invalid() {
+ let actual_foldings = FeatureTester::new()
+ .file("main.bib", "@article{foo,")
+ .main("main.bib")
+ .test_folding(BibtexDeclarationFoldingProvider)
+ .await;
+
+ assert!(actual_foldings.is_empty());
+ }
+
+ #[tokio::test]
+ async fn latex() {
+ let actual_foldings = FeatureTester::new()
+ .file("main.tex", "foo")
+ .main("main.tex")
+ .test_folding(BibtexDeclarationFoldingProvider)
+ .await;
+
+ assert!(actual_foldings.is_empty());
+ }
+}
diff --git a/support/texlab/src/folding/bibtex_declaration.rs b/support/texlab/src/folding/bibtex_declaration.rs
deleted file mode 100644
index cea17daa7d..0000000000
--- a/support/texlab/src/folding/bibtex_declaration.rs
+++ /dev/null
@@ -1,160 +0,0 @@
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{FoldingRange, FoldingRangeKind, FoldingRangeParams};
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct BibtexDeclarationFoldingProvider;
-
-impl FeatureProvider for BibtexDeclarationFoldingProvider {
- type Params = FoldingRangeParams;
- type Output = Vec<FoldingRange>;
-
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<FoldingRangeParams>,
- ) -> Vec<FoldingRange> {
- if let SyntaxTree::Bibtex(tree) = &request.document().tree {
- tree.root.children.iter().flat_map(Self::fold).collect()
- } else {
- Vec::new()
- }
- }
-}
-
-impl BibtexDeclarationFoldingProvider {
- fn fold(declaration: &BibtexDeclaration) -> Option<FoldingRange> {
- let ty = match declaration {
- BibtexDeclaration::Comment(_) => None,
- BibtexDeclaration::Preamble(preamble) => Some(&preamble.ty),
- BibtexDeclaration::String(string) => Some(&string.ty),
- BibtexDeclaration::Entry(entry) => Some(&entry.ty),
- }?;
-
- let right = match declaration {
- BibtexDeclaration::Comment(_) => None,
- BibtexDeclaration::Preamble(preamble) => preamble.right.as_ref(),
- BibtexDeclaration::String(string) => string.right.as_ref(),
- BibtexDeclaration::Entry(entry) => entry.right.as_ref(),
- }?;
-
- Some(FoldingRange {
- start_line: ty.range().start.line,
- start_character: Some(ty.range().start.character),
- end_line: right.range().start.line,
- end_character: Some(right.range().start.character),
- kind: Some(FoldingRangeKind::Region),
- })
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn test_preamble() {
- let foldings = test_feature(
- BibtexDeclarationFoldingProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "\n@preamble{\"foo\"}")],
- main_file: "foo.bib",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- foldings,
- vec![FoldingRange {
- start_line: 1,
- start_character: Some(0),
- end_line: 1,
- end_character: Some(15),
- kind: Some(FoldingRangeKind::Region),
- }]
- );
- }
-
- #[test]
- fn test_string() {
- let foldings = test_feature(
- BibtexDeclarationFoldingProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@string{foo = \"bar\"}")],
- main_file: "foo.bib",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- foldings,
- vec![FoldingRange {
- start_line: 0,
- start_character: Some(0),
- end_line: 0,
- end_character: Some(19),
- kind: Some(FoldingRangeKind::Region),
- }]
- );
- }
-
- #[test]
- fn test_entry() {
- let foldings = test_feature(
- BibtexDeclarationFoldingProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo, bar = baz\n}")],
- main_file: "foo.bib",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- foldings,
- vec![FoldingRange {
- start_line: 0,
- start_character: Some(0),
- end_line: 1,
- end_character: Some(0),
- kind: Some(FoldingRangeKind::Region),
- }]
- );
- }
-
- #[test]
- fn test_comment() {
- let foldings = test_feature(
- BibtexDeclarationFoldingProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "foo")],
- main_file: "foo.bib",
- ..FeatureSpec::default()
- },
- );
- assert!(foldings.is_empty());
- }
-
- #[test]
- fn test_entry_invalid() {
- let foldings = test_feature(
- BibtexDeclarationFoldingProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo,")],
- main_file: "foo.bib",
- ..FeatureSpec::default()
- },
- );
- assert!(foldings.is_empty());
- }
-
- #[test]
- fn test_latex() {
- let foldings = test_feature(
- BibtexDeclarationFoldingProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "")],
- main_file: "foo.tex",
- ..FeatureSpec::default()
- },
- );
- assert!(foldings.is_empty());
- }
-}
diff --git a/support/texlab/src/folding/latex_env.rs b/support/texlab/src/folding/latex_env.rs
new file mode 100644
index 0000000000..ced2567b41
--- /dev/null
+++ b/support/texlab/src/folding/latex_env.rs
@@ -0,0 +1,80 @@
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{FoldingRange, FoldingRangeKind, FoldingRangeParams},
+ syntax::SyntaxNode,
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
+pub struct LatexEnvironmentFoldingProvider;
+
+#[async_trait]
+impl FeatureProvider for LatexEnvironmentFoldingProvider {
+ type Params = FoldingRangeParams;
+ type Output = Vec<FoldingRange>;
+
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ let mut foldings = Vec::new();
+ if let DocumentContent::Latex(table) = &req.current().content {
+ for env in &table.environments {
+ let left_node = &table[env.left.parent];
+ let right_node = &table[env.right.parent];
+ let folding = FoldingRange {
+ start_line: left_node.end().line,
+ start_character: Some(left_node.end().character),
+ end_line: right_node.start().line,
+ end_character: Some(right_node.start().character),
+ kind: Some(FoldingRangeKind::Region),
+ };
+ foldings.push(folding);
+ }
+ }
+ foldings
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::feature::FeatureTester;
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn multiline() {
+ let actual_foldings = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \begin{foo}
+ \end{foo}
+ "#
+ ),
+ )
+ .main("main.tex")
+ .test_folding(LatexEnvironmentFoldingProvider)
+ .await;
+
+ let expected_foldings = vec![FoldingRange {
+ start_line: 0,
+ start_character: Some(11),
+ end_line: 1,
+ end_character: Some(0),
+ kind: Some(FoldingRangeKind::Region),
+ }];
+
+ assert_eq!(actual_foldings, expected_foldings);
+ }
+
+ #[tokio::test]
+ async fn bibtex() {
+ let actual_foldings = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .test_folding(LatexEnvironmentFoldingProvider)
+ .await;
+
+ assert!(actual_foldings.is_empty());
+ }
+}
diff --git a/support/texlab/src/folding/latex_environment.rs b/support/texlab/src/folding/latex_environment.rs
deleted file mode 100644
index 853ece7a09..0000000000
--- a/support/texlab/src/folding/latex_environment.rs
+++ /dev/null
@@ -1,74 +0,0 @@
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{FoldingRange, FoldingRangeKind, FoldingRangeParams};
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexEnvironmentFoldingProvider;
-
-impl FeatureProvider for LatexEnvironmentFoldingProvider {
- type Params = FoldingRangeParams;
- type Output = Vec<FoldingRange>;
-
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<FoldingRangeParams>,
- ) -> Vec<FoldingRange> {
- let mut foldings = Vec::new();
- if let SyntaxTree::Latex(tree) = &request.document().tree {
- for environment in &tree.env.environments {
- let start = environment.left.command.end();
- let end = environment.right.command.start();
- foldings.push(FoldingRange {
- start_line: start.line,
- start_character: Some(start.character),
- end_line: end.line,
- end_character: Some(end.character),
- kind: Some(FoldingRangeKind::Region),
- })
- }
- }
- foldings
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- #[test]
- fn test_multiline() {
- let foldings = test_feature(
- LatexEnvironmentFoldingProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\begin{foo}\n\\end{foo}")],
- main_file: "foo.tex",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- foldings,
- vec![FoldingRange {
- start_line: 0,
- start_character: Some(11),
- end_line: 1,
- end_character: Some(0),
- kind: Some(FoldingRangeKind::Region),
- }]
- );
- }
-
- #[test]
- fn test_bibtex() {
- let foldings = test_feature(
- LatexEnvironmentFoldingProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo, bar = baz}")],
- main_file: "foo.bib",
- ..FeatureSpec::default()
- },
- );
- assert!(foldings.is_empty());
- }
-}
diff --git a/support/texlab/src/folding/latex_section.rs b/support/texlab/src/folding/latex_section.rs
index ca7b8387be..a37efe1a7a 100644
--- a/support/texlab/src/folding/latex_section.rs
+++ b/support/texlab/src/folding/latex_section.rs
@@ -1,36 +1,37 @@
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{FoldingRange, FoldingRangeKind, FoldingRangeParams};
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{FoldingRange, FoldingRangeKind, FoldingRangeParams},
+ syntax::SyntaxNode,
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
-#[derive(Debug, PartialEq, Eq, Clone)]
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
pub struct LatexSectionFoldingProvider;
+#[async_trait]
impl FeatureProvider for LatexSectionFoldingProvider {
type Params = FoldingRangeParams;
type Output = Vec<FoldingRange>;
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<FoldingRangeParams>,
- ) -> Vec<FoldingRange> {
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
let mut foldings = Vec::new();
- if let SyntaxTree::Latex(tree) = &request.document().tree {
- let sections = &tree.structure.sections;
+ if let DocumentContent::Latex(table) = &req.current().content {
+ let sections = &table.sections;
for i in 0..sections.len() {
let current = &sections[i];
- let next = sections
+ if let Some(next) = sections
.iter()
.skip(i + 1)
- .find(|sec| current.level >= sec.level);
-
- if let Some(next) = next {
- if next.command.start().line > 0 {
+ .find(|sec| current.level >= sec.level)
+ {
+ let next_node = &table[next.parent];
+ if next_node.start().line > 0 {
+ let current_node = &table[current.parent];
let folding = FoldingRange {
- start_line: current.command.end().line,
- start_character: Some(current.command.end().character),
- end_line: next.command.start().line - 1,
+ start_line: current_node.end().line,
+ start_character: Some(current_node.end().character),
+ end_line: next_node.start().line - 1,
end_character: Some(0),
kind: Some(FoldingRangeKind::Region),
};
@@ -46,55 +47,65 @@ impl FeatureProvider for LatexSectionFoldingProvider {
#[cfg(test)]
mod tests {
use super::*;
+ use crate::feature::FeatureTester;
+ use indoc::indoc;
- #[test]
- fn test_nesting() {
- let foldings = test_feature(
- LatexSectionFoldingProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\section{Foo}\nfoo\n\\subsection{Bar}\nbar\n\\section{Baz}\nbaz\n\\section{Qux}")],
- main_file: "foo.tex",
- ..FeatureSpec::default()
- }
- );
- assert_eq!(
- foldings,
- vec![
- FoldingRange {
- start_line: 0,
- start_character: Some(13),
- end_line: 3,
- end_character: Some(0),
- kind: Some(FoldingRangeKind::Region),
- },
- FoldingRange {
- start_line: 2,
- start_character: Some(16),
- end_line: 3,
- end_character: Some(0),
- kind: Some(FoldingRangeKind::Region),
- },
- FoldingRange {
- start_line: 4,
- start_character: Some(13),
- end_line: 5,
- end_character: Some(0),
- kind: Some(FoldingRangeKind::Region),
- }
- ]
- );
- }
+ #[tokio::test]
+ async fn nested() {
+ let actual_foldings = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \section{Foo}
+ foo
+ \subsection{Bar}
+ bar
+ \section{Baz}
+ baz
+ \section{Qux}
+ "#
+ ),
+ )
+ .main("main.tex")
+ .test_folding(LatexSectionFoldingProvider)
+ .await;
- #[test]
- fn test_bibtex() {
- let foldings = test_feature(
- LatexSectionFoldingProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo, bar = baz}")],
- main_file: "foo.bib",
- ..FeatureSpec::default()
+ let expected_foldings = vec![
+ FoldingRange {
+ start_line: 0,
+ start_character: Some(13),
+ end_line: 3,
+ end_character: Some(0),
+ kind: Some(FoldingRangeKind::Region),
+ },
+ FoldingRange {
+ start_line: 2,
+ start_character: Some(16),
+ end_line: 3,
+ end_character: Some(0),
+ kind: Some(FoldingRangeKind::Region),
},
- );
- assert!(foldings.is_empty());
+ FoldingRange {
+ start_line: 4,
+ start_character: Some(13),
+ end_line: 5,
+ end_character: Some(0),
+ kind: Some(FoldingRangeKind::Region),
+ },
+ ];
+
+ assert_eq!(actual_foldings, expected_foldings);
+ }
+
+ #[tokio::test]
+ async fn bibtex() {
+ let actual_foldings = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .test_folding(LatexSectionFoldingProvider)
+ .await;
+
+ assert!(actual_foldings.is_empty());
}
}
diff --git a/support/texlab/src/folding/mod.rs b/support/texlab/src/folding/mod.rs
index 52c8149a31..448e3d26fc 100644
--- a/support/texlab/src/folding/mod.rs
+++ b/support/texlab/src/folding/mod.rs
@@ -1,13 +1,16 @@
-mod bibtex_declaration;
-mod latex_environment;
+mod bibtex_decl;
+mod latex_env;
mod latex_section;
-use self::bibtex_declaration::BibtexDeclarationFoldingProvider;
-use self::latex_environment::LatexEnvironmentFoldingProvider;
-use self::latex_section::LatexSectionFoldingProvider;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{FoldingRange, FoldingRangeParams};
+use self::{
+ bibtex_decl::BibtexDeclarationFoldingProvider, latex_env::LatexEnvironmentFoldingProvider,
+ latex_section::LatexSectionFoldingProvider,
+};
+use crate::{
+ feature::{ConcatProvider, FeatureProvider, FeatureRequest},
+ protocol::{FoldingRange, FoldingRangeParams},
+};
+use async_trait::async_trait;
pub struct FoldingProvider {
provider: ConcatProvider<FoldingRangeParams, FoldingRange>,
@@ -31,15 +34,12 @@ impl Default for FoldingProvider {
}
}
+#[async_trait]
impl FeatureProvider for FoldingProvider {
type Params = FoldingRangeParams;
type Output = Vec<FoldingRange>;
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<FoldingRangeParams>,
- ) -> Vec<FoldingRange> {
- self.provider.execute(request).await
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ self.provider.execute(req).await
}
}
diff --git a/support/texlab/src/formatting/bibtex.rs b/support/texlab/src/formatting/bibtex.rs
deleted file mode 100644
index aba3299468..0000000000
--- a/support/texlab/src/formatting/bibtex.rs
+++ /dev/null
@@ -1,376 +0,0 @@
-use crate::syntax::*;
-use serde::{Deserialize, Serialize};
-
-#[derive(Debug, PartialEq, Eq, Clone, Default, Serialize, Deserialize)]
-#[serde(rename_all = "camelCase")]
-pub struct BibtexFormattingOptions {
- pub line_length: Option<i32>,
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
-#[serde(rename_all = "camelCase")]
-pub struct BibtexFormattingParams {
- pub tab_size: usize,
- pub insert_spaces: bool,
- pub options: BibtexFormattingOptions,
-}
-
-impl BibtexFormattingParams {
- pub fn line_length(&self) -> i32 {
- let line_length = self.options.line_length.unwrap_or(120);
- if line_length <= 0 {
- std::i32::MAX
- } else {
- line_length
- }
- }
-}
-
-impl Default for BibtexFormattingParams {
- fn default() -> Self {
- BibtexFormattingParams {
- tab_size: 4,
- insert_spaces: true,
- options: BibtexFormattingOptions::default(),
- }
- }
-}
-
-struct BibtexFormatter<'a> {
- params: &'a BibtexFormattingParams,
- indent: String,
- output: String,
-}
-
-impl<'a> BibtexFormatter<'a> {
- fn new(params: &'a BibtexFormattingParams) -> Self {
- let indent = if params.insert_spaces {
- let mut buffer = String::new();
- for _ in 0..params.tab_size {
- buffer.push(' ');
- }
- buffer
- } else {
- "\t".into()
- };
-
- Self {
- params,
- indent,
- output: String::new(),
- }
- }
-
- fn format_comment(&mut self, comment: &BibtexComment) {
- self.output.push_str(comment.token.text());
- }
-
- fn format_preamble(&mut self, preamble: &BibtexPreamble) {
- self.format_token(&preamble.ty);
- self.output.push('{');
- if let Some(ref content) = preamble.content {
- self.format_content(content, self.output.chars().count());
- self.output.push('}');
- }
- }
-
- fn format_string(&mut self, string: &BibtexString) {
- self.format_token(&string.ty);
- self.output.push('{');
- if let Some(ref name) = string.name {
- self.output.push_str(name.text());
- self.output.push_str(" = ");
- if let Some(ref value) = string.value {
- self.format_content(value, self.output.chars().count());
- self.output.push('}');
- }
- }
- }
-
- fn format_entry(&mut self, entry: &BibtexEntry) {
- self.format_token(&entry.ty);
- self.output.push('{');
- if let Some(ref key) = entry.key {
- self.output.push_str(key.text());
- self.output.push(',');
- self.output.push('\n');
- for field in &entry.fields {
- self.format_field(field);
- }
- self.output.push('}');
- }
- }
-
- fn format_field(&mut self, field: &BibtexField) {
- self.output.push_str(self.indent.as_ref());
- self.format_token(&field.name);
- self.output.push_str(" = ");
- let count = field.name.text().chars().count();
- let align = self.params.tab_size as usize + count + 3;
- if let Some(ref content) = field.content {
- self.format_content(content, align);
- self.output.push(',');
- self.output.push('\n');
- }
- }
-
- fn format_content(&mut self, content: &BibtexContent, align: usize) {
- let mut analyzer = BibtexContentAnalyzer::new();
- content.accept(&mut analyzer);
- let tokens = analyzer.tokens;
- self.output.push_str(tokens[0].text());
-
- let mut length = align + tokens[0].text().chars().count();
- for i in 1..tokens.len() {
- let previous = tokens[i - 1];
- let current = tokens[i];
- let current_length = current.text().chars().count();
-
- let insert_space = Self::should_insert_space(previous, current);
- let space_length = if insert_space { 1 } else { 0 };
-
- if length + current_length + space_length > self.params.line_length() as usize {
- self.output.push('\n');
- self.output.push_str(self.indent.as_ref());
- for _ in 0..=align - self.params.tab_size {
- self.output.push(' ');
- }
- length = align;
- } else if insert_space {
- self.output.push(' ');
- length += 1;
- }
- self.output.push_str(current.text());
- length += current_length;
- }
- }
-
- fn format_token(&mut self, token: &BibtexToken) {
- self.output.push_str(token.text().to_lowercase().as_ref());
- }
-
- fn should_insert_space(previous: &BibtexToken, current: &BibtexToken) -> bool {
- previous.start().line != current.start().line
- || previous.end().character < current.start().character
- }
-}
-
-struct BibtexContentAnalyzer<'a> {
- pub tokens: Vec<&'a BibtexToken>,
-}
-
-impl<'a> BibtexContentAnalyzer<'a> {
- pub fn new() -> Self {
- BibtexContentAnalyzer { tokens: Vec::new() }
- }
-}
-
-impl<'a> BibtexVisitor<'a> for BibtexContentAnalyzer<'a> {
- fn visit_root(&mut self, _root: &'a BibtexRoot) {}
-
- fn visit_comment(&mut self, _comment: &'a BibtexComment) {}
-
- fn visit_preamble(&mut self, _preamble: &'a BibtexPreamble) {}
-
- fn visit_string(&mut self, _string: &'a BibtexString) {}
-
- fn visit_entry(&mut self, _entry: &'a BibtexEntry) {}
-
- fn visit_field(&mut self, _field: &'a BibtexField) {}
-
- fn visit_word(&mut self, word: &'a BibtexWord) {
- self.tokens.push(&word.token);
- }
-
- fn visit_command(&mut self, command: &'a BibtexCommand) {
- self.tokens.push(&command.token);
- }
-
- fn visit_quoted_content(&mut self, content: &'a BibtexQuotedContent) {
- self.tokens.push(&content.left);
- BibtexWalker::walk_quoted_content(self, content);
- if let Some(ref right) = content.right {
- self.tokens.push(right);
- }
- }
-
- fn visit_braced_content(&mut self, content: &'a BibtexBracedContent) {
- self.tokens.push(&content.left);
- BibtexWalker::walk_braced_content(self, content);
- if let Some(ref right) = content.right {
- self.tokens.push(right);
- }
- }
-
- fn visit_concat(&mut self, concat: &'a BibtexConcat) {
- concat.left.accept(self);
- self.tokens.push(&concat.operator);
- if let Some(ref right) = concat.right {
- right.accept(self);
- }
- }
-}
-
-pub fn format_declaration(
- declaration: &BibtexDeclaration,
- params: &BibtexFormattingParams,
-) -> String {
- match declaration {
- BibtexDeclaration::Comment(comment) => format_comment(comment, params),
- BibtexDeclaration::Preamble(preamble) => format_preamble(preamble, params),
- BibtexDeclaration::String(string) => format_string(string, params),
- BibtexDeclaration::Entry(entry) => format_entry(entry, params),
- }
-}
-
-pub fn format_comment(comment: &BibtexComment, params: &BibtexFormattingParams) -> String {
- let mut formatter = BibtexFormatter::new(params);
- formatter.format_comment(&comment);
- formatter.output
-}
-
-pub fn format_preamble(preamble: &BibtexPreamble, params: &BibtexFormattingParams) -> String {
- let mut formatter = BibtexFormatter::new(params);
- formatter.format_preamble(&preamble);
- formatter.output
-}
-
-pub fn format_string(string: &BibtexString, params: &BibtexFormattingParams) -> String {
- let mut formatter = BibtexFormatter::new(params);
- formatter.format_string(&string);
- formatter.output
-}
-
-pub fn format_entry(entry: &BibtexEntry, params: &BibtexFormattingParams) -> String {
- let mut formatter = BibtexFormatter::new(params);
- formatter.format_entry(&entry);
- formatter.output
-}
-
-pub fn format_content(content: &BibtexContent, params: &BibtexFormattingParams) -> String {
- let mut formatter = BibtexFormatter::new(params);
- formatter.format_content(content, 0);
- formatter.output
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use indoc::indoc;
-
- fn verify(source: &str, expected: &str, line_length: i32) {
- let tree = BibtexSyntaxTree::from(source);
- let params = BibtexFormattingParams {
- tab_size: 4,
- insert_spaces: true,
- options: BibtexFormattingOptions {
- line_length: Some(line_length),
- },
- };
- assert_eq!(
- expected,
- format_declaration(&tree.root.children[0], &params)
- );
- }
-
- #[test]
- fn test_wrap_long_lines() {
- let source =
- "@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}";
- let expected = indoc!(
- "
- @article{foo,
- bar = {Lorem ipsum dolor
- sit amet,
- consectetur
- adipiscing elit.},
- }"
- );
- verify(source, expected, 30);
- }
-
- #[test]
- fn test_line_length_zero() {
- let source =
- "@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}";
- let expected = indoc!(
- "
- @article{foo,
- bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit.},
- }"
- );
- verify(source, expected, 0);
- }
-
- #[test]
- fn test_trailing_commas() {
- let source = "@article{foo, bar = baz}";
- let expected = indoc!(
- "
- @article{foo,
- bar = baz,
- }"
- );
- verify(source, expected, 30);
- }
-
- #[test]
- fn test_insert_braces() {
- let source = "@article{foo, bar = baz,";
- let expected = indoc!(
- "
- @article{foo,
- bar = baz,
- }"
- );
- verify(source, expected, 30);
- }
-
- #[test]
- fn test_commands() {
- let source = "@article{foo, bar = \"\\baz\",}";
- let expected = indoc!(
- "@article{foo,
- bar = \"\\baz\",
- }"
- );
- verify(source, expected, 30);
- }
-
- #[test]
- fn test_concatenation() {
- let source = "@article{foo, bar = \"baz\" # \"qux\"}";
- let expected = indoc!(
- "
- @article{foo,
- bar = \"baz\" # \"qux\",
- }"
- );
- verify(source, expected, 30);
- }
-
- #[test]
- fn test_parentheses() {
- let source = "@article(foo,)";
- let expected = indoc!(
- "
- @article{foo,
- }"
- );
- verify(source, expected, 30);
- }
-
- #[test]
- fn test_string() {
- let source = "@string{foo=\"bar\"}";
- let expected = "@string{foo = \"bar\"}";
- verify(source, expected, 30);
- }
-
- #[test]
- fn test_preamble() {
- let source = "@preamble{\n\"foo bar baz\"}";
- let expected = "@preamble{\"foo bar baz\"}";
- verify(source, expected, 30);
- }
-}
diff --git a/support/texlab/src/formatting/mod.rs b/support/texlab/src/formatting/mod.rs
deleted file mode 100644
index 792a33950e..0000000000
--- a/support/texlab/src/formatting/mod.rs
+++ /dev/null
@@ -1 +0,0 @@
-pub mod bibtex;
diff --git a/support/texlab/src/forward_search.rs b/support/texlab/src/forward_search.rs
index 6dbe924051..a3911ed9f3 100644
--- a/support/texlab/src/forward_search.rs
+++ b/support/texlab/src/forward_search.rs
@@ -1,55 +1,58 @@
-use log::*;
-use serde::{Deserialize, Serialize};
-use serde_repr::*;
-use std::io;
-use std::path::Path;
-use std::process::Stdio;
-use tokio_net::process::Command;
-
-#[derive(Debug, PartialEq, Eq, Clone, Default, Serialize, Deserialize)]
-pub struct ForwardSearchOptions {
- pub executable: Option<String>,
- pub args: Option<Vec<String>>,
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize_repr, Deserialize_repr)]
-#[repr(i32)]
-pub enum ForwardSearchStatus {
- Success = 0,
- Error = 1,
- Failure = 2,
- Unconfigured = 3,
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
-pub struct ForwardSearchResult {
- pub status: ForwardSearchStatus,
-}
+use crate::{
+ protocol::{ForwardSearchResult, ForwardSearchStatus, Options, Uri},
+ workspace::Snapshot,
+};
+use log::error;
+use std::{io, path::Path, process::Stdio};
+use tokio::process::Command;
pub async fn search<'a>(
- tex_file: &'a Path,
- parent: &'a Path,
+ snapshot: &'a Snapshot,
+ tex_uri: &'a Uri,
line_number: u64,
- options: ForwardSearchOptions,
+ options: &Options,
+ current_dir: &'a Path,
) -> Option<ForwardSearchResult> {
- if options.executable.is_none() || options.args.is_none() {
+ let pdf_path = snapshot
+ .resolve_aux_targets(
+ &snapshot.parent_subfile(tex_uri, options, current_dir)?.uri,
+ options,
+ current_dir,
+ "pdf",
+ )?
+ .into_iter()
+ .filter(|uri| uri.scheme() == "file")
+ .filter_map(|uri| uri.to_file_path().ok())
+ .find(|path| path.exists())?;
+
+ if tex_uri.scheme() != "file" {
return Some(ForwardSearchResult {
- status: ForwardSearchStatus::Unconfigured,
+ status: ForwardSearchStatus::Failure,
});
}
- let pdf_file = parent
- .parent()?
- .join(format!("{}.pdf", parent.file_stem()?.to_str()?));
+ let search_options = options
+ .latex
+ .as_ref()
+ .and_then(|opts| opts.forward_search.as_ref())
+ .map(Clone::clone)
+ .unwrap_or_default();
+
+ if search_options.executable.is_none() || search_options.args.is_none() {
+ return Some(ForwardSearchResult {
+ status: ForwardSearchStatus::Unconfigured,
+ });
+ }
- let args: Vec<String> = options
+ let tex_path = tex_uri.to_file_path().ok()?;
+ let args: Vec<String> = search_options
.args
.unwrap()
.into_iter()
- .flat_map(|arg| replace_placeholder(&tex_file, &pdf_file, line_number, arg))
+ .flat_map(|arg| replace_placeholder(&tex_path, &pdf_path, line_number, arg))
.collect();
- let status = match spawn_process(options.executable.unwrap(), args).await {
+ let status = match spawn_process(search_options.executable.unwrap(), args).await {
Ok(()) => ForwardSearchStatus::Success,
Err(why) => {
error!("Unable to execute forward search: {}", why);
@@ -71,7 +74,7 @@ fn replace_placeholder(
argument
.replace("%f", tex_file.to_str()?)
.replace("%p", pdf_file.to_str()?)
- .replace("%l", &line_number.to_string())
+ .replace("%l", &(line_number + 1).to_string())
};
Some(result)
}
diff --git a/support/texlab/src/highlight/latex_label.rs b/support/texlab/src/highlight/latex_label.rs
index a586a7a1bf..c6d4aab6ee 100644
--- a/support/texlab/src/highlight/latex_label.rs
+++ b/support/texlab/src/highlight/latex_label.rs
@@ -1,40 +1,40 @@
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{DocumentHighlight, DocumentHighlightKind, TextDocumentPositionParams};
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{DocumentHighlight, DocumentHighlightKind, RangeExt, TextDocumentPositionParams},
+ syntax::{latex, LatexLabelKind, SyntaxNode},
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
-#[derive(Debug, PartialEq, Eq, Clone)]
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
pub struct LatexLabelHighlightProvider;
+#[async_trait]
impl FeatureProvider for LatexLabelHighlightProvider {
type Params = TextDocumentPositionParams;
type Output = Vec<DocumentHighlight>;
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<TextDocumentPositionParams>,
- ) -> Vec<DocumentHighlight> {
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
let mut highlights = Vec::new();
- if let SyntaxTree::Latex(tree) = &request.document().tree {
- if let Some(name) = tree
- .structure
+ if let DocumentContent::Latex(table) = &req.current().content {
+ if let Some(name) = table
.labels
.iter()
- .flat_map(LatexLabel::names)
- .find(|label| label.range().contains(request.params.position))
- .map(|label| label.text())
+ .flat_map(|label| label.names(&table))
+ .find(|label| label.range().contains(req.params.position))
+ .map(latex::Token::text)
{
- for label_group in &tree.structure.labels {
- for label in label_group.names() {
+ for label_group in &table.labels {
+ for label in label_group.names(&table) {
if label.text() == name {
+ let kind = match label_group.kind {
+ LatexLabelKind::Definition => DocumentHighlightKind::Write,
+ LatexLabelKind::Reference(_) => DocumentHighlightKind::Read,
+ };
+
let highlight = DocumentHighlight {
range: label.range(),
- kind: Some(match label_group.kind {
- LatexLabelKind::Definition => DocumentHighlightKind::Write,
- LatexLabelKind::Reference(_) => DocumentHighlightKind::Read,
- }),
+ kind: Some(kind),
};
highlights.push(highlight);
}
@@ -49,59 +49,61 @@ impl FeatureProvider for LatexLabelHighlightProvider {
#[cfg(test)]
mod tests {
use super::*;
- use lsp_types::{Position, Range};
+ use crate::{feature::FeatureTester, protocol::Range};
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn has_label() {
+ let actual_highlights = FeatureTester::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \label{foo}
+ \ref{foo}
+ "#
+ ),
+ )
+ .main("foo.tex")
+ .position(0, 7)
+ .test_position(LatexLabelHighlightProvider)
+ .await;
- #[test]
- fn test_has_label() {
- let highlights = test_feature(
- LatexLabelHighlightProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\label{foo}\n\\ref{foo}")],
- main_file: "foo.tex",
- position: Position::new(0, 7),
- ..FeatureSpec::default()
+ let expected_highlights = vec![
+ DocumentHighlight {
+ range: Range::new_simple(0, 7, 0, 10),
+ kind: Some(DocumentHighlightKind::Write),
},
- );
- assert_eq!(
- highlights,
- vec![
- DocumentHighlight {
- range: Range::new_simple(0, 7, 0, 10),
- kind: Some(DocumentHighlightKind::Write),
- },
- DocumentHighlight {
- range: Range::new_simple(1, 5, 1, 8),
- kind: Some(DocumentHighlightKind::Read),
- }
- ]
- );
+ DocumentHighlight {
+ range: Range::new_simple(1, 5, 1, 8),
+ kind: Some(DocumentHighlightKind::Read),
+ },
+ ];
+
+ assert_eq!(actual_highlights, expected_highlights);
}
- #[test]
- fn test_no_label_latex() {
- let highlights = test_feature(
- LatexLabelHighlightProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "")],
- main_file: "foo.tex",
- position: Position::new(0, 0),
- ..FeatureSpec::default()
- },
- );
- assert!(highlights.is_empty());
+ #[tokio::test]
+ async fn no_label_latex() {
+ let actual_highlights = FeatureTester::new()
+ .file("foo.tex", "")
+ .main("foo.tex")
+ .position(0, 0)
+ .test_position(LatexLabelHighlightProvider)
+ .await;
+
+ assert!(actual_highlights.is_empty());
}
- #[test]
- fn test_no_label_bibtex() {
- let highlights = test_feature(
- LatexLabelHighlightProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "")],
- main_file: "foo.bib",
- position: Position::new(0, 0),
- ..FeatureSpec::default()
- },
- );
- assert!(highlights.is_empty());
+ #[tokio::test]
+ async fn no_label_bibtex() {
+ let actual_highlights = FeatureTester::new()
+ .file("foo.bib", "")
+ .main("foo.bib")
+ .position(0, 0)
+ .test_position(LatexLabelHighlightProvider)
+ .await;
+
+ assert!(actual_highlights.is_empty());
}
}
diff --git a/support/texlab/src/highlight/mod.rs b/support/texlab/src/highlight/mod.rs
index c6cf1fcfb9..e47a7f99c2 100644
--- a/support/texlab/src/highlight/mod.rs
+++ b/support/texlab/src/highlight/mod.rs
@@ -1,9 +1,11 @@
mod latex_label;
use self::latex_label::LatexLabelHighlightProvider;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{DocumentHighlight, TextDocumentPositionParams};
+use crate::{
+ feature::{ConcatProvider, FeatureProvider, FeatureRequest},
+ protocol::{DocumentHighlight, TextDocumentPositionParams},
+};
+use async_trait::async_trait;
pub struct HighlightProvider {
provider: ConcatProvider<TextDocumentPositionParams, DocumentHighlight>,
@@ -23,15 +25,12 @@ impl Default for HighlightProvider {
}
}
+#[async_trait]
impl FeatureProvider for HighlightProvider {
type Params = TextDocumentPositionParams;
type Output = Vec<DocumentHighlight>;
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<TextDocumentPositionParams>,
- ) -> Vec<DocumentHighlight> {
- self.provider.execute(request).await
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ self.provider.execute(req).await
}
}
diff --git a/support/texlab/src/hover/bibtex/entry_type.rs b/support/texlab/src/hover/bibtex/entry_type.rs
new file mode 100644
index 0000000000..1e009565d7
--- /dev/null
+++ b/support/texlab/src/hover/bibtex/entry_type.rs
@@ -0,0 +1,116 @@
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{
+ Hover, HoverContents, MarkupContent, MarkupKind, RangeExt, TextDocumentPositionParams,
+ },
+ syntax::{SyntaxNode, LANGUAGE_DATA},
+};
+use async_trait::async_trait;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
+pub struct BibtexEntryTypeHoverProvider;
+
+#[async_trait]
+impl FeatureProvider for BibtexEntryTypeHoverProvider {
+ type Params = TextDocumentPositionParams;
+ type Output = Option<Hover>;
+
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ let tree = req.current().content.as_bibtex()?;
+ for entry in tree
+ .children(tree.root)
+ .filter_map(|node| tree.as_entry(node))
+ {
+ if entry.ty.range().contains(req.params.position) {
+ let ty = &entry.ty.text()[1..];
+ let docs = LANGUAGE_DATA.entry_type_documentation(ty)?;
+ return Some(Hover {
+ contents: HoverContents::Markup(MarkupContent {
+ kind: MarkupKind::Markdown,
+ value: docs.into(),
+ }),
+ range: Some(entry.ty.range()),
+ });
+ }
+ }
+ None
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::{feature::FeatureTester, protocol::Range};
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_hover = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_position(BibtexEntryTypeHoverProvider)
+ .await;
+
+ assert_eq!(actual_hover, None);
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_hover = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_position(BibtexEntryTypeHoverProvider)
+ .await;
+
+ assert_eq!(actual_hover, None);
+ }
+
+ #[tokio::test]
+ async fn known_entry_type() {
+ let actual_hover = FeatureTester::new()
+ .file("main.bib", "@article{foo,}")
+ .main("main.bib")
+ .position(0, 3)
+ .test_position(BibtexEntryTypeHoverProvider)
+ .await
+ .unwrap();
+
+ let expected_hover = Hover {
+ contents: HoverContents::Markup(MarkupContent {
+ kind: MarkupKind::Markdown,
+ value: LANGUAGE_DATA
+ .entry_type_documentation("article")
+ .unwrap()
+ .into(),
+ }),
+ range: Some(Range::new_simple(0, 0, 0, 8)),
+ };
+
+ assert_eq!(actual_hover, expected_hover);
+ }
+
+ #[tokio::test]
+ async fn unknown_entry_type() {
+ let actual_hover = FeatureTester::new()
+ .file("main.bib", "@foo{bar,}")
+ .main("main.bib")
+ .position(0, 3)
+ .test_position(BibtexEntryTypeHoverProvider)
+ .await;
+
+ assert_eq!(actual_hover, None);
+ }
+
+ #[tokio::test]
+ async fn entry_key() {
+ let actual_hover = FeatureTester::new()
+ .file("main.bib", "@article{foo,}")
+ .main("main.bib")
+ .position(0, 11)
+ .test_position(BibtexEntryTypeHoverProvider)
+ .await;
+
+ assert_eq!(actual_hover, None);
+ }
+}
diff --git a/support/texlab/src/hover/bibtex/field.rs b/support/texlab/src/hover/bibtex/field.rs
new file mode 100644
index 0000000000..4b00f3364c
--- /dev/null
+++ b/support/texlab/src/hover/bibtex/field.rs
@@ -0,0 +1,111 @@
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{
+ Hover, HoverContents, MarkupContent, MarkupKind, RangeExt, TextDocumentPositionParams,
+ },
+ syntax::{SyntaxNode, LANGUAGE_DATA},
+};
+use async_trait::async_trait;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
+pub struct BibtexFieldHoverProvider;
+
+#[async_trait]
+impl FeatureProvider for BibtexFieldHoverProvider {
+ type Params = TextDocumentPositionParams;
+ type Output = Option<Hover>;
+
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ let tree = req.current().content.as_bibtex()?;
+ let name = tree
+ .find(req.params.position)
+ .into_iter()
+ .filter_map(|node| tree.as_field(node))
+ .map(|field| &field.name)
+ .find(|name| name.range().contains(req.params.position))?;
+
+ let docs = LANGUAGE_DATA.field_documentation(name.text())?;
+ Some(Hover {
+ contents: HoverContents::Markup(MarkupContent {
+ kind: MarkupKind::Markdown,
+ value: docs.into(),
+ }),
+ range: Some(name.range()),
+ })
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::{feature::FeatureTester, protocol::Range};
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_hover = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_position(BibtexFieldHoverProvider)
+ .await;
+
+ assert_eq!(actual_hover, None);
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_hover = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_position(BibtexFieldHoverProvider)
+ .await;
+
+ assert_eq!(actual_hover, None);
+ }
+
+ #[tokio::test]
+ async fn known_field() {
+ let actual_hover = FeatureTester::new()
+ .file("main.bib", "@article{foo, author = bar}")
+ .main("main.bib")
+ .position(0, 15)
+ .test_position(BibtexFieldHoverProvider)
+ .await
+ .unwrap();
+
+ let expected_hover = Hover {
+ contents: HoverContents::Markup(MarkupContent {
+ kind: MarkupKind::Markdown,
+ value: LANGUAGE_DATA.field_documentation("author").unwrap().into(),
+ }),
+ range: Some(Range::new_simple(0, 14, 0, 20)),
+ };
+
+ assert_eq!(actual_hover, expected_hover);
+ }
+
+ #[tokio::test]
+ async fn unknown_field() {
+ let actual_hover = FeatureTester::new()
+ .file("main.bib", "@article{foo, bar = baz}")
+ .main("main.bib")
+ .position(0, 15)
+ .test_position(BibtexFieldHoverProvider)
+ .await;
+
+ assert_eq!(actual_hover, None);
+ }
+
+ #[tokio::test]
+ async fn entry_key() {
+ let actual_hover = FeatureTester::new()
+ .file("main.bib", "@article{foo, bar = baz}")
+ .main("main.bib")
+ .position(0, 11)
+ .test_position(BibtexFieldHoverProvider)
+ .await;
+
+ assert_eq!(actual_hover, None);
+ }
+}
diff --git a/support/texlab/src/hover/bibtex/mod.rs b/support/texlab/src/hover/bibtex/mod.rs
new file mode 100644
index 0000000000..59ff356fa0
--- /dev/null
+++ b/support/texlab/src/hover/bibtex/mod.rs
@@ -0,0 +1,3 @@
+pub mod entry_type;
+pub mod field;
+pub mod string_reference;
diff --git a/support/texlab/src/hover/bibtex/string_reference.rs b/support/texlab/src/hover/bibtex/string_reference.rs
new file mode 100644
index 0000000000..46724a4f60
--- /dev/null
+++ b/support/texlab/src/hover/bibtex/string_reference.rs
@@ -0,0 +1,165 @@
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{
+ BibtexFormattingOptions, Hover, HoverContents, MarkupContent, MarkupKind, Position,
+ TextDocumentPositionParams,
+ },
+ syntax::{bibtex, SyntaxNode},
+};
+use async_trait::async_trait;
+use petgraph::graph::NodeIndex;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
+pub struct BibtexStringReferenceHoverProvider;
+
+#[async_trait]
+impl FeatureProvider for BibtexStringReferenceHoverProvider {
+ type Params = TextDocumentPositionParams;
+ type Output = Option<Hover>;
+
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ let tree = req.current().content.as_bibtex()?;
+ let reference = Self::find_reference(tree, req.params.position)?;
+ for string_node in tree.children(tree.root) {
+ let hover = Self::find_definition(tree, string_node, reference);
+ if hover.is_some() {
+ return hover;
+ }
+ }
+ None
+ }
+}
+
+impl BibtexStringReferenceHoverProvider {
+ fn find_reference(tree: &bibtex::Tree, pos: Position) -> Option<&bibtex::Token> {
+ let mut results = tree.find(pos);
+ results.reverse();
+ match (
+ &tree.graph[results[0]],
+ results.get(1).map(|node| &tree.graph[*node]),
+ ) {
+ (bibtex::Node::Word(reference), Some(bibtex::Node::Concat(_))) => {
+ Some(&reference.token)
+ }
+ (bibtex::Node::Word(reference), Some(bibtex::Node::Field(_))) => Some(&reference.token),
+ _ => None,
+ }
+ }
+
+ fn find_definition(
+ tree: &bibtex::Tree,
+ string_node: NodeIndex,
+ reference: &bibtex::Token,
+ ) -> Option<Hover> {
+ let string = tree.as_string(string_node)?;
+ if string.name.as_ref()?.text() != reference.text() {
+ return None;
+ }
+
+ let options = BibtexFormattingOptions {
+ line_length: None,
+ formatter: None,
+ };
+ let text = bibtex::format(
+ tree,
+ tree.children(string_node).next()?,
+ bibtex::FormattingParams {
+ tab_size: 4,
+ insert_spaces: true,
+ options: &options,
+ },
+ );
+ Some(Hover {
+ contents: HoverContents::Markup(MarkupContent {
+ kind: MarkupKind::PlainText,
+ value: text,
+ }),
+ range: Some(reference.range()),
+ })
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::{
+ feature::FeatureTester,
+ protocol::{Range, RangeExt},
+ };
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_hover = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_position(BibtexStringReferenceHoverProvider)
+ .await;
+
+ assert_eq!(actual_hover, None);
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_hover = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_position(BibtexStringReferenceHoverProvider)
+ .await;
+
+ assert_eq!(actual_hover, None);
+ }
+
+ #[tokio::test]
+ async fn inside_reference() {
+ let actual_hover = FeatureTester::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @string{foo = "Foo"}
+ @string{bar = "Bar"}
+ @article{baz, author = bar}
+ "#
+ ),
+ )
+ .main("main.bib")
+ .position(2, 24)
+ .test_position(BibtexStringReferenceHoverProvider)
+ .await
+ .unwrap();
+
+ let expected_hover = Hover {
+ contents: HoverContents::Markup(MarkupContent {
+ kind: MarkupKind::PlainText,
+ value: "\"Bar\"".into(),
+ }),
+ range: Some(Range::new_simple(2, 23, 2, 26)),
+ };
+
+ assert_eq!(actual_hover, expected_hover);
+ }
+
+ #[tokio::test]
+ async fn outside_reference() {
+ let actual_hover = FeatureTester::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @string{foo = "Foo"}
+ @string{bar = "Bar"}
+ @article{baz, author = bar}
+ "#
+ ),
+ )
+ .main("main.bib")
+ .position(2, 20)
+ .test_position(BibtexStringReferenceHoverProvider)
+ .await;
+
+ assert_eq!(actual_hover, None);
+ }
+}
diff --git a/support/texlab/src/hover/bibtex_entry_type.rs b/support/texlab/src/hover/bibtex_entry_type.rs
deleted file mode 100644
index adf833b689..0000000000
--- a/support/texlab/src/hover/bibtex_entry_type.rs
+++ /dev/null
@@ -1,111 +0,0 @@
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct BibtexEntryTypeHoverProvider;
-
-impl FeatureProvider for BibtexEntryTypeHoverProvider {
- type Params = TextDocumentPositionParams;
- type Output = Option<Hover>;
-
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<TextDocumentPositionParams>,
- ) -> Option<Hover> {
- if let SyntaxTree::Bibtex(tree) = &request.document().tree {
- for entry in tree.entries() {
- if entry.ty.range().contains(request.params.position) {
- let ty = &entry.ty.text()[1..];
- if let Some(documentation) = LANGUAGE_DATA.entry_type_documentation(ty) {
- return Some(Hover {
- contents: HoverContents::Markup(MarkupContent {
- kind: MarkupKind::Markdown,
- value: documentation.into(),
- }),
- range: None,
- });
- }
- }
- }
- }
- None
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use lsp_types::Position;
-
- #[test]
- fn test_known_entry_type() {
- let hover = test_feature(
- BibtexEntryTypeHoverProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo,}")],
- main_file: "foo.bib",
- position: Position::new(0, 3),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- hover,
- Some(Hover {
- contents: HoverContents::Markup(MarkupContent {
- kind: MarkupKind::Markdown,
- value: LANGUAGE_DATA
- .entry_type_documentation("article")
- .unwrap()
- .into(),
- }),
- range: None,
- })
- );
- }
-
- #[test]
- fn test_unknown_entry_type() {
- let hover = test_feature(
- BibtexEntryTypeHoverProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@foo{bar,}")],
- main_file: "foo.bib",
- position: Position::new(0, 3),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(hover, None);
- }
-
- #[test]
- fn test_entry_key() {
- let hover = test_feature(
- BibtexEntryTypeHoverProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo,}")],
- main_file: "foo.bib",
- position: Position::new(0, 11),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(hover, None);
- }
-
- #[test]
- fn test_latex() {
- let hover = test_feature(
- BibtexEntryTypeHoverProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\foo")],
- main_file: "foo.tex",
- position: Position::new(0, 3),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(hover, None);
- }
-}
diff --git a/support/texlab/src/hover/bibtex_field.rs b/support/texlab/src/hover/bibtex_field.rs
deleted file mode 100644
index cbe03078cf..0000000000
--- a/support/texlab/src/hover/bibtex_field.rs
+++ /dev/null
@@ -1,108 +0,0 @@
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct BibtexFieldHoverProvider;
-
-impl FeatureProvider for BibtexFieldHoverProvider {
- type Params = TextDocumentPositionParams;
- type Output = Option<Hover>;
-
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<TextDocumentPositionParams>,
- ) -> Option<Hover> {
- if let SyntaxTree::Bibtex(tree) = &request.document().tree {
- for node in tree.find(request.params.position) {
- if let BibtexNode::Field(field) = node {
- if field.name.range().contains(request.params.position) {
- let documentation = LANGUAGE_DATA.field_documentation(field.name.text())?;
- return Some(Hover {
- contents: HoverContents::Markup(MarkupContent {
- kind: MarkupKind::Markdown,
- value: documentation.into(),
- }),
- range: Some(field.name.range()),
- });
- }
- }
- }
- }
- None
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use lsp_types::Position;
-
- #[test]
- fn test_known_field() {
- let hover = test_feature(
- BibtexFieldHoverProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo, author = bar}")],
- main_file: "foo.bib",
- position: Position::new(0, 15),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- hover,
- Some(Hover {
- contents: HoverContents::Markup(MarkupContent {
- kind: MarkupKind::Markdown,
- value: LANGUAGE_DATA.field_documentation("author").unwrap().into(),
- }),
- range: Some(Range::new_simple(0, 14, 0, 20)),
- })
- );
- }
-
- #[test]
- fn test_unknown_field() {
- let hover = test_feature(
- BibtexFieldHoverProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo, bar = baz}")],
- main_file: "foo.bib",
- position: Position::new(0, 15),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(hover, None);
- }
-
- #[test]
- fn test_entry_key() {
- let hover = test_feature(
- BibtexFieldHoverProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo, bar = baz}")],
- main_file: "foo.bib",
- position: Position::new(0, 11),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(hover, None);
- }
-
- #[test]
- fn test_latex() {
- let hover = test_feature(
- BibtexFieldHoverProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "")],
- main_file: "foo.tex",
- position: Position::new(0, 0),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(hover, None);
- }
-}
diff --git a/support/texlab/src/hover/bibtex_string_reference.rs b/support/texlab/src/hover/bibtex_string_reference.rs
deleted file mode 100644
index 28df138291..0000000000
--- a/support/texlab/src/hover/bibtex_string_reference.rs
+++ /dev/null
@@ -1,106 +0,0 @@
-use crate::formatting::bibtex::{self, BibtexFormattingParams};
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct BibtexStringReferenceHoverProvider;
-
-impl FeatureProvider for BibtexStringReferenceHoverProvider {
- type Params = TextDocumentPositionParams;
- type Output = Option<Hover>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- if let SyntaxTree::Bibtex(tree) = &request.document().tree {
- let reference = Self::find_reference(tree, request.params.position)?;
- for declaration in &tree.root.children {
- if let BibtexDeclaration::String(string) = &declaration {
- let definition = Self::find_definition(string, reference);
- if definition.is_some() {
- return definition;
- }
- }
- }
- }
- None
- }
-}
-
-impl BibtexStringReferenceHoverProvider {
- fn find_reference(tree: &BibtexSyntaxTree, position: Position) -> Option<&BibtexToken> {
- let mut results = tree.find(position);
- results.reverse();
- match (&results[0], results.get(1)) {
- (BibtexNode::Word(reference), Some(BibtexNode::Concat(_))) => Some(&reference.token),
- (BibtexNode::Word(reference), Some(BibtexNode::Field(_))) => Some(&reference.token),
- _ => None,
- }
- }
-
- fn find_definition(string: &BibtexString, reference: &BibtexToken) -> Option<Hover> {
- if string.name.as_ref()?.text() != reference.text() {
- return None;
- }
-
- let text =
- bibtex::format_content(string.value.as_ref()?, &BibtexFormattingParams::default());
- Some(Hover {
- contents: HoverContents::Markup(MarkupContent {
- kind: MarkupKind::PlainText,
- value: text,
- }),
- range: Some(reference.range()),
- })
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use crate::range::RangeExt;
-
- #[test]
- fn test_inside_reference() {
- let hover = test_feature(
- BibtexStringReferenceHoverProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.bib",
- "@string{foo = \"Foo\"}\n@string{bar = \"Bar\"}\n@article{baz, author = bar}",
- )],
- main_file: "foo.bib",
- position: Position::new(2, 24),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- hover,
- Some(Hover {
- contents: HoverContents::Markup(MarkupContent {
- kind: MarkupKind::PlainText,
- value: "\"Bar\"".into(),
- }),
- range: Some(Range::new_simple(2, 23, 2, 26)),
- })
- );
- }
-
- #[test]
- fn test_outside_reference() {
- let hover = test_feature(
- BibtexStringReferenceHoverProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.bib",
- "@string{foo = \"Foo\"}\n@string{bar = \"Bar\"}\n@article{baz, author = bar}",
- )],
- main_file: "foo.bib",
- position: Position::new(2, 20),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(hover, None);
- }
-}
diff --git a/support/texlab/src/hover/latex/citation.rs b/support/texlab/src/hover/latex/citation.rs
new file mode 100644
index 0000000000..8b5468e52e
--- /dev/null
+++ b/support/texlab/src/hover/latex/citation.rs
@@ -0,0 +1,179 @@
+use crate::{
+ citeproc::render_citation,
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{Hover, HoverContents, RangeExt, TextDocumentPositionParams},
+ syntax::{bibtex, Span, SyntaxNode},
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
+use log::warn;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
+pub struct LatexCitationHoverProvider;
+
+#[async_trait]
+impl FeatureProvider for LatexCitationHoverProvider {
+ type Params = TextDocumentPositionParams;
+ type Output = Option<Hover>;
+
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ let (tree, src_key, entry) = Self::get_entry(req)?;
+ if entry.is_comment() {
+ None
+ } else {
+ let key = entry.key.as_ref()?;
+ match render_citation(&tree, key.text()) {
+ Some(markdown) => Some(Hover {
+ contents: HoverContents::Markup(markdown),
+ range: Some(src_key.range()),
+ }),
+ None => {
+ warn!("Failed to render entry: {}", key.text());
+ None
+ }
+ }
+ }
+ }
+}
+
+impl LatexCitationHoverProvider {
+ fn get_entry(
+ req: &FeatureRequest<TextDocumentPositionParams>,
+ ) -> Option<(&bibtex::Tree, &Span, &bibtex::Entry)> {
+ let key = Self::get_key(req)?;
+ for tree in req
+ .related()
+ .iter()
+ .filter_map(|doc| doc.content.as_bibtex())
+ {
+ for entry in tree
+ .children(tree.root)
+ .filter_map(|node| tree.as_entry(node))
+ {
+ if let Some(current_key) = &entry.key {
+ if current_key.text() == key.text {
+ return Some((tree, key, entry));
+ }
+ }
+ }
+ }
+ None
+ }
+
+ fn get_key(req: &FeatureRequest<TextDocumentPositionParams>) -> Option<&Span> {
+ match &req.current().content {
+ DocumentContent::Latex(table) => table
+ .citations
+ .iter()
+ .flat_map(|citation| citation.keys(&table))
+ .find(|key| key.range().contains(req.params.position))
+ .map(|token| &token.span),
+ DocumentContent::Bibtex(tree) => tree
+ .children(tree.root)
+ .filter_map(|node| tree.as_entry(node))
+ .filter_map(|entry| entry.key.as_ref())
+ .find(|key| key.range().contains(req.params.position))
+ .map(|token| &token.span),
+ }
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::{
+ feature::FeatureTester,
+ protocol::{MarkupContent, MarkupKind, Range, RangeExt},
+ };
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_hover = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_position(LatexCitationHoverProvider)
+ .await;
+
+ assert_eq!(actual_hover, None);
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_hover = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_position(LatexCitationHoverProvider)
+ .await;
+
+ assert_eq!(actual_hover, None);
+ }
+
+ #[tokio::test]
+ async fn inside_label() {
+ let actual_hover = FeatureTester::new()
+ .file(
+ "main.bib",
+ "@article{foo, author = {Foo Bar}, title = {Baz Qux}, year = 1337}",
+ )
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \addbibresource{main.bib}
+ \cite{foo}
+ "#
+ ),
+ )
+ .main("main.tex")
+ .position(1, 7)
+ .test_position(LatexCitationHoverProvider)
+ .await
+ .unwrap();
+
+ let expected_hover = Hover {
+ contents: HoverContents::Markup(MarkupContent {
+ kind: MarkupKind::Markdown,
+ value: "Bar, F. (1337). *Baz Qux*.".into(),
+ }),
+ range: Some(Range::new_simple(1, 6, 1, 9)),
+ };
+
+ assert_eq!(actual_hover, expected_hover);
+ }
+
+ #[tokio::test]
+ async fn inside_entry() {
+ let actual_hover = FeatureTester::new()
+ .file(
+ "main.bib",
+ "@article{foo, author = {Foo Bar}, title = {Baz Qux}, year = 1337}",
+ )
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \addbibresource{main.bib}
+ \cite{foo}
+ "#
+ ),
+ )
+ .main("main.bib")
+ .position(0, 11)
+ .test_position(LatexCitationHoverProvider)
+ .await
+ .unwrap();
+
+ let expected_hover = Hover {
+ contents: HoverContents::Markup(MarkupContent {
+ kind: MarkupKind::Markdown,
+ value: "Bar, F. (1337). *Baz Qux*.".into(),
+ }),
+ range: Some(Range::new_simple(0, 9, 0, 12)),
+ };
+
+ assert_eq!(actual_hover, expected_hover);
+ }
+}
diff --git a/support/texlab/src/hover/latex/component.rs b/support/texlab/src/hover/latex/component.rs
new file mode 100644
index 0000000000..5285ec795a
--- /dev/null
+++ b/support/texlab/src/hover/latex/component.rs
@@ -0,0 +1,95 @@
+use crate::{
+ components::COMPONENT_DATABASE,
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{Hover, HoverContents, RangeExt, TextDocumentPositionParams},
+ syntax::{LatexIncludeKind, SyntaxNode},
+};
+use async_trait::async_trait;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
+pub struct LatexComponentHoverProvider;
+
+#[async_trait]
+impl FeatureProvider for LatexComponentHoverProvider {
+ type Params = TextDocumentPositionParams;
+ type Output = Option<Hover>;
+
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ let table = req.current().content.as_latex()?;
+ for include in &table.includes {
+ match include.kind {
+ LatexIncludeKind::Package | LatexIncludeKind::Class => {
+ for path in include.paths(&table) {
+ if path.range().contains(req.params.position) {
+ let docs = COMPONENT_DATABASE.documentation(path.text())?;
+ return Some(Hover {
+ contents: HoverContents::Markup(docs),
+ range: Some(path.range()),
+ });
+ }
+ }
+ }
+ _ => {}
+ }
+ }
+ None
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::{
+ feature::FeatureTester,
+ protocol::{Range, RangeExt},
+ };
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_hover = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_position(LatexComponentHoverProvider)
+ .await;
+
+ assert_eq!(actual_hover, None);
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_hover = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_position(LatexComponentHoverProvider)
+ .await;
+
+ assert_eq!(actual_hover, None);
+ }
+
+ #[tokio::test]
+ async fn known_package() {
+ let actual_hover = FeatureTester::new()
+ .file("main.tex", r#"\usepackage{amsmath}"#)
+ .main("main.tex")
+ .position(0, 15)
+ .test_position(LatexComponentHoverProvider)
+ .await
+ .unwrap();
+
+ assert_eq!(actual_hover.range.unwrap(), Range::new_simple(0, 12, 0, 19));
+ }
+
+ #[tokio::test]
+ async fn unknown_class() {
+ let actual_hover = FeatureTester::new()
+ .file("main.tex", r#"\documentclass{abcdefghijklmnop}"#)
+ .main("main.tex")
+ .position(0, 20)
+ .test_position(LatexComponentHoverProvider)
+ .await;
+
+ assert_eq!(actual_hover, None);
+ }
+}
diff --git a/support/texlab/src/hover/latex/label.rs b/support/texlab/src/hover/latex/label.rs
new file mode 100644
index 0000000000..66724d442b
--- /dev/null
+++ b/support/texlab/src/hover/latex/label.rs
@@ -0,0 +1,118 @@
+use crate::{
+ feature::{DocumentView, FeatureProvider, FeatureRequest},
+ outline::{Outline, OutlineContext},
+ protocol::{Hover, HoverContents, Position, RangeExt, TextDocumentPositionParams},
+ syntax::{latex, LatexLabelKind, SyntaxNode},
+ workspace::{Document, DocumentContent},
+};
+use async_trait::async_trait;
+use std::sync::Arc;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
+pub struct LatexLabelHoverProvider;
+
+#[async_trait]
+impl FeatureProvider for LatexLabelHoverProvider {
+ type Params = TextDocumentPositionParams;
+ type Output = Option<Hover>;
+
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ let table = req.current().content.as_latex()?;
+ let reference = Self::find_reference(table, req.params.position)?;
+ let (doc, def) = Self::find_definition(&req.view, reference)?;
+
+ let snapshot = Arc::clone(&req.view.snapshot);
+ let view = DocumentView::analyze(snapshot, doc, &req.options, &req.current_dir);
+ let outline = Outline::analyze(&view, &req.options, &req.current_dir);
+ let outline_ctx = OutlineContext::parse(&view, &outline, def)?;
+ let markup = outline_ctx.documentation();
+ Some(Hover {
+ contents: HoverContents::Markup(markup),
+ range: Some(reference.range()),
+ })
+ }
+}
+
+impl LatexLabelHoverProvider {
+ fn find_reference(table: &latex::SymbolTable, pos: Position) -> Option<&latex::Token> {
+ for label in &table.labels {
+ let names = label.names(&table);
+ if names.len() == 1 && table[label.parent].range().contains(pos) {
+ return Some(&label.names(&table)[0]);
+ }
+
+ for name in &names {
+ if name.range().contains(pos) {
+ return Some(name);
+ }
+ }
+ }
+ None
+ }
+
+ fn find_definition(
+ view: &DocumentView,
+ reference: &latex::Token,
+ ) -> Option<(Arc<Document>, latex::Label)> {
+ for doc in &view.related {
+ if let DocumentContent::Latex(table) = &doc.content {
+ for label in &table.labels {
+ if label.kind == LatexLabelKind::Definition {
+ for name in label.names(&table) {
+ if name.text() == reference.text() {
+ return Some((Arc::clone(&doc), *label));
+ }
+ }
+ }
+ }
+ }
+ }
+ None
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::{
+ feature::FeatureTester,
+ protocol::{Range, RangeExt},
+ };
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_hover = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_position(LatexLabelHoverProvider)
+ .await;
+
+ assert_eq!(actual_hover, None);
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_hover = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_position(LatexLabelHoverProvider)
+ .await;
+
+ assert_eq!(actual_hover, None);
+ }
+
+ #[tokio::test]
+ async fn section() {
+ let actual_hover = FeatureTester::new()
+ .file("main.tex", r#"\section{Foo}\label{sec:foo}"#)
+ .main("main.tex")
+ .position(0, 23)
+ .test_position(LatexLabelHoverProvider)
+ .await
+ .unwrap();
+
+ assert_eq!(actual_hover.range.unwrap(), Range::new_simple(0, 20, 0, 27));
+ }
+}
diff --git a/support/texlab/src/hover/latex/mod.rs b/support/texlab/src/hover/latex/mod.rs
new file mode 100644
index 0000000000..c119bfc832
--- /dev/null
+++ b/support/texlab/src/hover/latex/mod.rs
@@ -0,0 +1,6 @@
+#[cfg(feature = "citation")]
+pub mod citation;
+
+pub mod component;
+pub mod label;
+pub mod preview;
diff --git a/support/texlab/src/hover/latex/preview.rs b/support/texlab/src/hover/latex/preview.rs
new file mode 100644
index 0000000000..8d2ca00cb5
--- /dev/null
+++ b/support/texlab/src/hover/latex/preview.rs
@@ -0,0 +1,338 @@
+use crate::{
+ components::COMPONENT_DATABASE,
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{
+ ClientCapabilitiesExt, Hover, HoverContents, MarkupContent, MarkupKind, Range, RangeExt,
+ TextDocumentPositionParams,
+ },
+ syntax::{latex, CharStream, LatexIncludeKind, SyntaxNode},
+ tex::{CompileError, CompileParams, DistributionKind, Format},
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
+use image::{png::PNGEncoder, ColorType, DynamicImage, GenericImageView, ImageBuffer, RgbaImage};
+use io::Cursor;
+use log::warn;
+use std::{io, process::Stdio, time::Duration};
+use tempfile::TempDir;
+use thiserror::Error;
+use tokio::process::Command;
+
+const PREVIEW_ENVIRONMENTS: &[&str] = &[
+ "align",
+ "alignat",
+ "aligned",
+ "alignedat",
+ "algorithmic",
+ "array",
+ "Bmatrix",
+ "bmatrix",
+ "cases",
+ "CD",
+ "eqnarray",
+ "equation",
+ "gather",
+ "gathered",
+ "matrix",
+ "multline",
+ "pmatrix",
+ "smallmatrix",
+ "split",
+ "subarray",
+ "Vmatrix",
+ "vmatrix",
+];
+
+const IGNORED_PACKAGES: &[&str] = &["biblatex", "pgf", "tikz"];
+
+#[derive(Debug, Clone, Copy)]
+enum MathElement {
+ Environment(latex::Environment),
+ Equation(latex::Equation),
+ Inline(latex::Inline),
+}
+
+impl MathElement {
+ fn range(&self, tree: &latex::Tree) -> Range {
+ match self {
+ Self::Environment(env) => env.range(tree),
+ Self::Equation(eq) => eq.range(tree),
+ Self::Inline(inline) => inline.range(tree),
+ }
+ }
+}
+
+#[derive(Debug, Error)]
+enum RenderError {
+ #[error("an I/O error occurred: `{0}`")]
+ IO(#[from] io::Error),
+ #[error("a compile error occurred: `{0}`")]
+ Compile(#[from] CompileError),
+ #[error("compilation failed")]
+ DviNotFound,
+ #[error("dvipng is not installed")]
+ DviPngNotInstalled,
+ #[error("calling dvipng failed")]
+ DviPngFaulty,
+ #[error("failed to decode image")]
+ DecodeImage,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
+pub struct LatexPreviewHoverProvider;
+
+impl LatexPreviewHoverProvider {
+ fn is_preview_environment(
+ req: &FeatureRequest<TextDocumentPositionParams>,
+ table: &latex::SymbolTable,
+ environment: latex::Environment,
+ ) -> bool {
+ let canonical_name = environment
+ .left
+ .name(&table)
+ .map(latex::Token::text)
+ .unwrap_or_default()
+ .replace('*', "");
+
+ PREVIEW_ENVIRONMENTS.contains(&canonical_name.as_ref())
+ || Self::theorem_environments(req).contains(&canonical_name.as_ref())
+ }
+
+ fn theorem_environments(req: &FeatureRequest<TextDocumentPositionParams>) -> Vec<&str> {
+ let mut names = Vec::new();
+ for doc in req.related() {
+ if let DocumentContent::Latex(table) = &doc.content {
+ table
+ .theorem_definitions
+ .iter()
+ .map(|thm| thm.name(&table).text())
+ .for_each(|thm| names.push(thm));
+ }
+ }
+ names
+ }
+
+ async fn render(
+ req: &FeatureRequest<TextDocumentPositionParams>,
+ range: Range,
+ ) -> Result<Hover, RenderError> {
+ let code = Self::generate_code(req, range);
+ let params = CompileParams {
+ file_name: "preview.tex",
+ code: &code,
+ format: Format::Latex,
+ timeout: Duration::from_secs(10),
+ };
+ let dir = req.distro.compile(params).await?.dir;
+ if !dir.path().join("preview.dvi").exists() {
+ return Err(RenderError::DviNotFound);
+ }
+
+ let img = Self::add_margin(Self::dvipng(&dir).await?);
+ let base64 = Self::encode_image(img);
+ let markdown = format!("![preview](data:image/png;base64,{})", base64);
+ dir.close()?;
+ Ok(Hover {
+ contents: HoverContents::Markup(MarkupContent {
+ kind: MarkupKind::Markdown,
+ value: markdown,
+ }),
+ range: Some(range),
+ })
+ }
+
+ fn generate_code(req: &FeatureRequest<TextDocumentPositionParams>, range: Range) -> String {
+ let mut code = String::new();
+ code.push_str("\\documentclass{article}\n");
+ code.push_str("\\thispagestyle{empty}\n");
+ Self::generate_includes(req, &mut code);
+ Self::generate_command_definitions(req, &mut code);
+ Self::generate_math_operators(req, &mut code);
+ Self::generate_theorem_definitions(req, &mut code);
+ code.push_str("\\begin{document}\n");
+ code.push_str(&CharStream::extract(&req.current().text, range));
+ code.push('\n');
+ code.push_str("\\end{document}\n");
+ code
+ }
+
+ fn generate_includes(req: &FeatureRequest<TextDocumentPositionParams>, code: &mut String) {
+ for doc in req.related() {
+ if let DocumentContent::Latex(table) = &doc.content {
+ let text = &doc.text;
+ for include in &table.includes {
+ if include.kind == LatexIncludeKind::Package {
+ if include
+ .paths(&table)
+ .iter()
+ .all(|path| IGNORED_PACKAGES.contains(&path.text()))
+ {
+ continue;
+ }
+
+ if include
+ .paths(&table)
+ .iter()
+ .map(|path| format!("{}.sty", path.text()))
+ .any(|name| !COMPONENT_DATABASE.exists(&name))
+ {
+ continue;
+ }
+
+ code.push_str(&CharStream::extract(&text, table[include.parent].range()));
+ code.push('\n');
+ }
+ }
+ }
+ }
+ }
+
+ fn generate_command_definitions(
+ req: &FeatureRequest<TextDocumentPositionParams>,
+ code: &mut String,
+ ) {
+ for doc in req.related() {
+ if let DocumentContent::Latex(table) = &doc.content {
+ table
+ .command_definitions
+ .iter()
+ .filter(|def| !def.definition_name(&table).contains("@"))
+ .map(|def| CharStream::extract(&doc.text, table[def.parent].range()))
+ .for_each(|def| {
+ code.push_str(&def);
+ code.push('\n');
+ });
+ }
+ }
+ }
+
+ fn generate_math_operators(
+ req: &FeatureRequest<TextDocumentPositionParams>,
+ code: &mut String,
+ ) {
+ for doc in req.related() {
+ if let DocumentContent::Latex(table) = &doc.content {
+ table
+ .math_operators
+ .iter()
+ .filter(|op| !op.definition_name(&table).contains("@"))
+ .map(|op| CharStream::extract(&doc.text, table[op.parent].range()))
+ .for_each(|op| {
+ code.push_str(&op);
+ code.push('\n');
+ });
+ }
+ }
+ }
+
+ fn generate_theorem_definitions(
+ req: &FeatureRequest<TextDocumentPositionParams>,
+ code: &mut String,
+ ) {
+ for doc in req.related() {
+ if let DocumentContent::Latex(table) = &doc.content {
+ table
+ .theorem_definitions
+ .iter()
+ .map(|thm| CharStream::extract(&doc.text, table[thm.parent].range()))
+ .for_each(|thm| {
+ code.push_str(&thm);
+ code.push('\n');
+ })
+ }
+ }
+ }
+
+ async fn dvipng(dir: &TempDir) -> Result<DynamicImage, RenderError> {
+ let process = Command::new("dvipng")
+ .args(&["-D", "175", "-T", "tight", "preview.dvi"])
+ .current_dir(dir.path())
+ .stdout(Stdio::null())
+ .stderr(Stdio::null())
+ .spawn()
+ .map_err(|_| RenderError::DviPngNotInstalled)?;
+
+ process.await.map_err(|_| RenderError::DviPngFaulty)?;
+
+ let png_file = dir.path().join("preview1.png");
+ let png = image::open(png_file).map_err(|_| RenderError::DecodeImage)?;
+ Ok(png)
+ }
+
+ fn add_margin(image: DynamicImage) -> RgbaImage {
+ let margin = 5;
+ let width = image.width() + 2 * margin;
+ let height = image.height() + 2 * margin;
+ let mut result =
+ ImageBuffer::from_pixel(width, height, image::Rgba([0xFF, 0xFF, 0xFF, 0xFF]));
+
+ for x in 0..image.width() {
+ for y in 0..image.height() {
+ let pixel = image.get_pixel(x, y);
+ result.put_pixel(x + margin, y + margin, pixel);
+ }
+ }
+ result
+ }
+
+ fn encode_image(image: RgbaImage) -> String {
+ let mut image_buf = Cursor::new(Vec::new());
+ let png_encoder = PNGEncoder::new(&mut image_buf);
+ let width = image.width();
+ let height = image.height();
+ png_encoder
+ .encode(&image.into_raw(), width, height, ColorType::Rgba8)
+ .unwrap();
+ base64::encode(&image_buf.into_inner())
+ }
+}
+
+#[async_trait]
+impl FeatureProvider for LatexPreviewHoverProvider {
+ type Params = TextDocumentPositionParams;
+ type Output = Option<Hover>;
+
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ if !req.client_capabilities.has_hover_markdown_support()
+ || req.distro.kind() == DistributionKind::Tectonic
+ {
+ return None;
+ }
+
+ if let DocumentContent::Latex(table) = &req.current().content {
+ let mut elements = Vec::new();
+ table
+ .inlines
+ .iter()
+ .map(|inline| MathElement::Inline(*inline))
+ .for_each(|inline| elements.push(inline));
+
+ table
+ .equations
+ .iter()
+ .map(|eq| MathElement::Equation(*eq))
+ .for_each(|eq| elements.push(eq));
+
+ table
+ .environments
+ .iter()
+ .filter(|env| Self::is_preview_environment(req, table, **env))
+ .map(|env| MathElement::Environment(*env))
+ .for_each(|env| elements.push(env));
+
+ let range = elements
+ .iter()
+ .map(|elem| elem.range(&table))
+ .find(|range| range.contains(req.params.position))?;
+
+ return match Self::render(req, range).await {
+ Ok(hover) => Some(hover),
+ Err(why) => {
+ warn!("Preview failed: {}", why);
+ None
+ }
+ };
+ }
+ None
+ }
+}
diff --git a/support/texlab/src/hover/latex_citation.rs b/support/texlab/src/hover/latex_citation.rs
deleted file mode 100644
index 339dd1b35f..0000000000
--- a/support/texlab/src/hover/latex_citation.rs
+++ /dev/null
@@ -1,79 +0,0 @@
-use crate::citeproc::render_citation;
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use log::warn;
-use lsp_types::*;
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexCitationHoverProvider;
-
-impl FeatureProvider for LatexCitationHoverProvider {
- type Params = TextDocumentPositionParams;
- type Output = Option<Hover>;
-
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<TextDocumentPositionParams>,
- ) -> Option<Hover> {
- let (tree, entry) = Self::get_entry(request)?;
- if entry.is_comment() {
- None
- } else {
- let key = entry.key.as_ref().unwrap().text();
- match render_citation(&tree, key) {
- Some(markdown) => Some(Hover {
- contents: HoverContents::Markup(markdown),
- range: None,
- }),
- None => {
- warn!("Failed to render entry: {}", key);
- None
- }
- }
- }
- }
-}
-
-impl LatexCitationHoverProvider {
- fn get_entry(
- request: &FeatureRequest<TextDocumentPositionParams>,
- ) -> Option<(&BibtexSyntaxTree, &BibtexEntry)> {
- let key = Self::get_key(request)?;
- for document in request.related_documents() {
- if let SyntaxTree::Bibtex(tree) = &document.tree {
- for entry in tree.entries() {
- if let Some(current_key) = &entry.key {
- if current_key.text() == key {
- return Some((tree, entry));
- }
- }
- }
- }
- }
- None
- }
-
- fn get_key(request: &FeatureRequest<TextDocumentPositionParams>) -> Option<&str> {
- match &request.document().tree {
- SyntaxTree::Latex(tree) => tree
- .citations
- .iter()
- .flat_map(LatexCitation::keys)
- .find(|citation| citation.range().contains(request.params.position))
- .map(LatexToken::text),
- SyntaxTree::Bibtex(tree) => {
- for entry in tree.entries() {
- if let Some(key) = &entry.key {
- if key.range().contains(request.params.position) {
- return Some(key.text());
- }
- }
- }
- None
- }
- }
- }
-}
diff --git a/support/texlab/src/hover/latex_component.rs b/support/texlab/src/hover/latex_component.rs
deleted file mode 100644
index 4d262a6891..0000000000
--- a/support/texlab/src/hover/latex_component.rs
+++ /dev/null
@@ -1,39 +0,0 @@
-use crate::completion::DATABASE;
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{Hover, HoverContents, TextDocumentPositionParams};
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexComponentHoverProvider;
-
-impl FeatureProvider for LatexComponentHoverProvider {
- type Params = TextDocumentPositionParams;
- type Output = Option<Hover>;
-
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<TextDocumentPositionParams>,
- ) -> Option<Hover> {
- if let SyntaxTree::Latex(tree) = &request.document().tree {
- for include in &tree.includes {
- if include.kind == LatexIncludeKind::Package
- || include.kind == LatexIncludeKind::Class
- {
- for path in include.paths() {
- if path.range().contains(request.params.position) {
- let documentation = DATABASE.documentation(path.text())?;
- return Some(Hover {
- contents: HoverContents::Markup(documentation),
- range: Some(path.range()),
- });
- }
- }
- }
- }
- }
- None
- }
-}
diff --git a/support/texlab/src/hover/latex_include.rs b/support/texlab/src/hover/latex_include.rs
deleted file mode 100644
index 9073d99465..0000000000
--- a/support/texlab/src/hover/latex_include.rs
+++ /dev/null
@@ -1,104 +0,0 @@
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexIncludeHoverProvider;
-
-impl FeatureProvider for LatexIncludeHoverProvider {
- type Params = TextDocumentPositionParams;
- type Output = Option<Hover>;
-
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<TextDocumentPositionParams>,
- ) -> Option<Hover> {
- let (range, targets) = Self::find_include(request)?;
- for target in targets {
- if let Some(document) = request.workspace().find(&target) {
- let path = document.uri.to_file_path().ok()?;
- return Some(Hover {
- range: Some(range),
- contents: HoverContents::Markup(MarkupContent {
- kind: MarkupKind::PlainText,
- value: path.to_string_lossy().into_owned(),
- }),
- });
- }
- }
- None
- }
-}
-
-impl LatexIncludeHoverProvider {
- fn find_include(
- request: &FeatureRequest<TextDocumentPositionParams>,
- ) -> Option<(Range, &[Uri])> {
- if let SyntaxTree::Latex(tree) = &request.document().tree {
- for include in &tree.includes {
- for (i, path) in include.paths().iter().enumerate() {
- let range = path.range();
- if range.contains(request.params.position) {
- return Some((range, &include.all_targets[i]));
- }
- }
- }
- }
- None
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use crate::range::RangeExt;
-
- #[test]
- fn test_multiple_paths() {
- let hover = test_feature(
- LatexIncludeHoverProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\include{bar, baz}"),
- FeatureSpec::file("bar.tex", ""),
- FeatureSpec::file("baz.tex", ""),
- ],
- main_file: "foo.tex",
- position: Position::new(0, 16),
- ..FeatureSpec::default()
- },
- );
-
- assert_eq!(
- hover,
- Some(Hover {
- contents: HoverContents::Markup(MarkupContent {
- kind: MarkupKind::PlainText,
- value: FeatureSpec::uri("baz.tex")
- .to_file_path()
- .unwrap()
- .to_string_lossy()
- .into_owned(),
- }),
- range: Some(Range::new_simple(0, 14, 0, 17)),
- })
- );
- }
-
- #[test]
- fn test_empty() {
- let hover = test_feature(
- LatexIncludeHoverProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "")],
- main_file: "foo.tex",
- position: Position::new(0, 0),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(hover, None);
- }
-}
diff --git a/support/texlab/src/hover/latex_label.rs b/support/texlab/src/hover/latex_label.rs
deleted file mode 100644
index 2b3a8f51e7..0000000000
--- a/support/texlab/src/hover/latex_label.rs
+++ /dev/null
@@ -1,71 +0,0 @@
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
-use std::sync::Arc;
-
-pub struct LatexLabelHoverProvider;
-
-impl FeatureProvider for LatexLabelHoverProvider {
- type Params = TextDocumentPositionParams;
- type Output = Option<Hover>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- if let SyntaxTree::Latex(tree) = &request.document().tree {
- let reference = Self::find_reference(tree, request.params.position)?;
- let (document, definition) = Self::find_definition(&request.view, reference)?;
-
- let workspace = Arc::clone(&request.view.workspace);
- let view = DocumentView::new(workspace, document);
- let outline = Outline::from(&view);
- let outline_context = OutlineContext::parse(&view, &definition, &outline)?;
- let markup = outline_context.documentation();
- Some(Hover {
- contents: HoverContents::Markup(markup),
- range: Some(reference.range()),
- })
- } else {
- None
- }
- }
-}
-
-impl LatexLabelHoverProvider {
- fn find_reference(tree: &LatexSyntaxTree, position: Position) -> Option<&LatexToken> {
- for label in &tree.structure.labels {
- let names = label.names();
- if names.len() == 1 && label.range().contains(position) {
- return Some(&label.names()[0]);
- }
-
- for name in &names {
- if name.range().contains(position) {
- return Some(name);
- }
- }
- }
- None
- }
-
- fn find_definition<'a, 'b>(
- view: &'a DocumentView,
- reference: &'b LatexToken,
- ) -> Option<(Arc<Document>, &'a LatexLabel)> {
- for document in &view.related_documents {
- if let SyntaxTree::Latex(tree) = &document.tree {
- for label in &tree.structure.labels {
- if label.kind == LatexLabelKind::Definition {
- for name in label.names() {
- if name.text() == reference.text() {
- return Some((Arc::clone(&document), label));
- }
- }
- }
- }
- }
- }
- None
- }
-}
diff --git a/support/texlab/src/hover/latex_preview.rs b/support/texlab/src/hover/latex_preview.rs
deleted file mode 100644
index 7af66f6a52..0000000000
--- a/support/texlab/src/hover/latex_preview.rs
+++ /dev/null
@@ -1,357 +0,0 @@
-use crate::capabilities::ClientCapabilitiesExt;
-use crate::completion::DATABASE;
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use image::png::PNGEncoder;
-use image::{DynamicImage, GenericImage, GenericImageView};
-use log::*;
-use lsp_types::*;
-use std::io;
-use std::io::Cursor;
-use std::process::Stdio;
-use std::time::Duration;
-use tempfile::TempDir;
-use tokio_net::process::Command;
-
-const PREVIEW_ENVIRONMENTS: &[&str] = &[
- "align",
- "alignat",
- "aligned",
- "alignedat",
- "algorithmic",
- "array",
- "Bmatrix",
- "bmatrix",
- "cases",
- "CD",
- "eqnarray",
- "equation",
- "gather",
- "gathered",
- "matrix",
- "multline",
- "pmatrix",
- "smallmatrix",
- "split",
- "subarray",
- "Vmatrix",
- "vmatrix",
-];
-
-const IGNORED_PACKAGES: &[&str] = &["biblatex", "pgf", "tikz"];
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-enum MathElement<'a> {
- Environment(&'a LatexEnvironment),
- Equation(&'a LatexEquation),
- Inline(&'a LatexInline),
-}
-
-impl<'a> SyntaxNode for MathElement<'a> {
- fn range(&self) -> Range {
- match self {
- MathElement::Environment(environment) => environment.range(),
- MathElement::Equation(equation) => equation.range(),
- MathElement::Inline(inline) => inline.range(),
- }
- }
-}
-
-#[derive(Debug)]
-enum RenderError {
- IO(io::Error),
- Compile(tex::CompileError),
- DviNotFound,
- DviPngNotInstalled,
- DviPngFaulty,
- DecodeImage,
-}
-
-impl From<io::Error> for RenderError {
- fn from(error: io::Error) -> Self {
- RenderError::IO(error)
- }
-}
-
-impl From<tex::CompileError> for RenderError {
- fn from(error: tex::CompileError) -> Self {
- RenderError::Compile(error)
- }
-}
-
-pub struct LatexPreviewHoverProvider;
-
-impl LatexPreviewHoverProvider {
- fn is_math_environment(
- request: &FeatureRequest<TextDocumentPositionParams>,
- environment: &LatexEnvironment,
- ) -> bool {
- let canonical_name = environment
- .left
- .name()
- .map(LatexToken::text)
- .unwrap_or_default()
- .replace('*', "");
-
- PREVIEW_ENVIRONMENTS.contains(&canonical_name.as_ref())
- || Self::theorem_environments(request).contains(&canonical_name.as_ref())
- }
-
- fn theorem_environments(request: &FeatureRequest<TextDocumentPositionParams>) -> Vec<&str> {
- let mut names = Vec::new();
- for document in request.related_documents() {
- if let SyntaxTree::Latex(tree) = &document.tree {
- tree.math
- .theorem_definitions
- .iter()
- .map(|thm| thm.name().text())
- .for_each(|thm| names.push(thm));
- }
- }
- names
- }
-
- async fn render(
- request: &FeatureRequest<TextDocumentPositionParams>,
- range: Range,
- ) -> Result<Hover, RenderError> {
- let code = Self::generate_code(request, range);
- let params = tex::CompileParams {
- file_name: "preview.tex",
- code: &code,
- format: tex::Format::Latex,
- timeout: Duration::from_secs(10),
- };
- let directory = request.distribution.compile(params).await?.directory;
-
- if !directory.path().join("preview.dvi").exists() {
- return Err(RenderError::DviNotFound);
- }
-
- let image = Self::add_margin(Self::dvipng(&directory).await?);
- let base64 = Self::encode_image(image);
- let markdown = format!("![preview](data:image/png;base64,{})", base64);
- directory.close()?;
- Ok(Hover {
- range: Some(range),
- contents: HoverContents::Markup(MarkupContent {
- kind: MarkupKind::Markdown,
- value: markdown,
- }),
- })
- }
-
- fn generate_code(request: &FeatureRequest<TextDocumentPositionParams>, range: Range) -> String {
- let mut code = String::new();
- code.push_str("\\documentclass{article}\n");
- code.push_str("\\thispagestyle{empty}\n");
- Self::generate_includes(request, &mut code);
- Self::generate_command_definitions(request, &mut code);
- Self::generate_math_operators(request, &mut code);
- Self::generate_theorem_definitions(request, &mut code);
- code.push_str("\\begin{document}\n");
- code.push_str(&CharStream::extract(&request.document().text, range));
- code.push('\n');
- code.push_str("\\end{document}\n");
- code
- }
-
- fn generate_includes(request: &FeatureRequest<TextDocumentPositionParams>, code: &mut String) {
- for document in request.related_documents() {
- if let SyntaxTree::Latex(tree) = &document.tree {
- let text = &request.document().text;
- for include in &tree.includes {
- if include.kind == LatexIncludeKind::Package {
- if include
- .paths()
- .iter()
- .all(|path| IGNORED_PACKAGES.contains(&path.text()))
- {
- continue;
- }
-
- if include
- .paths()
- .iter()
- .map(|path| format!("{}.sty", path.text()))
- .any(|name| !DATABASE.exists(&name))
- {
- continue;
- }
-
- code.push_str(&CharStream::extract(&text, include.command.range));
- code.push('\n');
- }
- }
- }
- }
- }
-
- fn generate_command_definitions(
- request: &FeatureRequest<TextDocumentPositionParams>,
- code: &mut String,
- ) {
- for document in request.related_documents() {
- if let SyntaxTree::Latex(tree) = &document.tree {
- tree.command_definitions
- .iter()
- .map(|def| CharStream::extract(&document.text, def.range()))
- .for_each(|def| {
- code.push_str(&def);
- code.push('\n');
- });
- }
- }
- }
-
- fn generate_math_operators(
- request: &FeatureRequest<TextDocumentPositionParams>,
- code: &mut String,
- ) {
- for document in request.related_documents() {
- if let SyntaxTree::Latex(tree) = &document.tree {
- tree.math
- .operators
- .iter()
- .map(|op| CharStream::extract(&document.text, op.range()))
- .for_each(|op| {
- code.push_str(&op);
- code.push('\n');
- });
- }
- }
- }
-
- fn generate_theorem_definitions(
- request: &FeatureRequest<TextDocumentPositionParams>,
- code: &mut String,
- ) {
- for document in request.related_documents() {
- if let SyntaxTree::Latex(tree) = &document.tree {
- tree.math
- .theorem_definitions
- .iter()
- .map(|thm| CharStream::extract(&document.text, thm.range()))
- .for_each(|thm| {
- code.push_str(&thm);
- code.push('\n');
- })
- }
- }
- }
-
- async fn dvipng(directory: &TempDir) -> Result<DynamicImage, RenderError> {
- let process = Command::new("dvipng")
- .args(&["-D", "175", "-T", "tight", "preview.dvi"])
- .current_dir(directory.path())
- .stdout(Stdio::null())
- .stderr(Stdio::null())
- .spawn()
- .map_err(|_| RenderError::DviPngNotInstalled)?;
-
- process.await.map_err(|_| RenderError::DviPngFaulty)?;
-
- let png_file = directory.path().join("preview1.png");
- let png = image::open(png_file).map_err(|_| RenderError::DecodeImage)?;
- Ok(png)
- }
-
- fn add_margin(image: DynamicImage) -> DynamicImage {
- let margin = 5;
- let width = image.width() + 2 * margin;
- let height = image.height() + 2 * margin;
- let mut result = DynamicImage::new_rgb8(width, height);
- for x in 0..result.width() {
- for y in 0..result.height() {
- result.put_pixel(x, y, image::Rgba([0xFF, 0xFF, 0xFF, 0xFF]))
- }
- }
-
- for x in 0..image.width() {
- for y in 0..image.height() {
- let pixel = image.get_pixel(x, y);
- result.put_pixel(x + margin, y + margin, pixel);
- }
- }
- result
- }
-
- fn encode_image(image: DynamicImage) -> String {
- let mut image_buf = Cursor::new(Vec::new());
- let png_encoder = PNGEncoder::new(&mut image_buf);
- png_encoder
- .encode(
- &image.raw_pixels(),
- image.width(),
- image.height(),
- image.color(),
- )
- .unwrap();
- base64::encode(&image_buf.into_inner())
- }
-}
-
-impl FeatureProvider for LatexPreviewHoverProvider {
- type Params = TextDocumentPositionParams;
- type Output = Option<Hover>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- if !request.client_capabilities.has_hover_markdown_support()
- || !request.distribution.supports_format(tex::Format::Latex)
- || request.distribution.output_kind(tex::Format::Latex) != tex::OutputKind::Dvi
- {
- return None;
- }
-
- if let SyntaxTree::Latex(tree) = &request.document().tree {
- let mut elements = Vec::new();
- tree.math
- .inlines
- .iter()
- .map(MathElement::Inline)
- .for_each(|inline| elements.push(inline));
-
- tree.math
- .equations
- .iter()
- .map(MathElement::Equation)
- .for_each(|eq| elements.push(eq));
-
- tree.env
- .environments
- .iter()
- .filter(|env| Self::is_math_environment(request, env))
- .map(MathElement::Environment)
- .for_each(|env| elements.push(env));
-
- let range = elements
- .iter()
- .find(|elem| elem.range().contains(request.params.position))
- .map(MathElement::range)?;
-
- return match Self::render(request, range).await {
- Ok(hover) => Some(hover),
- Err(why) => {
- let message = match why {
- RenderError::IO(why) => format!("I/O error: {}", why),
- RenderError::Compile(why) => match why {
- tex::CompileError::NotInstalled => "latex not installed".into(),
- tex::CompileError::Timeout => "compilation timed out".into(),
- tex::CompileError::IO(_) => "an I/O error occurred".into(),
- },
- RenderError::DviNotFound => "compilation failed".to_owned(),
- RenderError::DviPngNotInstalled => "dvipng is not installed".to_owned(),
- RenderError::DviPngFaulty => "dvipng failed".to_owned(),
- RenderError::DecodeImage => "failed to decode image".to_owned(),
- };
- warn!("Preview failed: {}", message);
- None
- }
- };
- }
- None
- }
-}
diff --git a/support/texlab/src/hover/mod.rs b/support/texlab/src/hover/mod.rs
index ddb36a3354..e740657add 100644
--- a/support/texlab/src/hover/mod.rs
+++ b/support/texlab/src/hover/mod.rs
@@ -1,23 +1,24 @@
-mod bibtex_entry_type;
-mod bibtex_field;
-mod bibtex_string_reference;
-mod latex_citation;
-mod latex_component;
-mod latex_include;
-mod latex_label;
-mod latex_preview;
+mod bibtex;
+mod latex;
-use self::bibtex_entry_type::BibtexEntryTypeHoverProvider;
-use self::bibtex_field::BibtexFieldHoverProvider;
-use self::bibtex_string_reference::BibtexStringReferenceHoverProvider;
-use self::latex_citation::LatexCitationHoverProvider;
-use self::latex_component::LatexComponentHoverProvider;
-use self::latex_include::LatexIncludeHoverProvider;
-use self::latex_label::LatexLabelHoverProvider;
-use self::latex_preview::LatexPreviewHoverProvider;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{Hover, TextDocumentPositionParams};
+#[cfg(feature = "citation")]
+use self::latex::citation::LatexCitationHoverProvider;
+
+use self::{
+ bibtex::{
+ entry_type::BibtexEntryTypeHoverProvider, field::BibtexFieldHoverProvider,
+ string_reference::BibtexStringReferenceHoverProvider,
+ },
+ latex::{
+ component::LatexComponentHoverProvider, label::LatexLabelHoverProvider,
+ preview::LatexPreviewHoverProvider,
+ },
+};
+use crate::{
+ feature::{ChoiceProvider, FeatureProvider, FeatureRequest},
+ protocol::{Hover, TextDocumentPositionParams},
+};
+use async_trait::async_trait;
pub struct HoverProvider {
provider: ChoiceProvider<TextDocumentPositionParams, Hover>,
@@ -30,9 +31,9 @@ impl HoverProvider {
Box::new(BibtexEntryTypeHoverProvider),
Box::new(BibtexStringReferenceHoverProvider),
Box::new(BibtexFieldHoverProvider),
+ #[cfg(feature = "citation")]
Box::new(LatexCitationHoverProvider),
Box::new(LatexComponentHoverProvider),
- Box::new(LatexIncludeHoverProvider),
Box::new(LatexLabelHoverProvider),
Box::new(LatexPreviewHoverProvider),
]),
@@ -46,15 +47,12 @@ impl Default for HoverProvider {
}
}
+#[async_trait]
impl FeatureProvider for HoverProvider {
type Params = TextDocumentPositionParams;
type Output = Option<Hover>;
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<TextDocumentPositionParams>,
- ) -> Option<Hover> {
- self.provider.execute(request).await
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ self.provider.execute(req).await
}
}
diff --git a/support/texlab/src/lib.rs b/support/texlab/src/lib.rs
index bc5c3d3303..8644a40f10 100644
--- a/support/texlab/src/lib.rs
+++ b/support/texlab/src/lib.rs
@@ -1,25 +1,33 @@
-#![recursion_limit = "128"]
-
-pub mod action;
-pub mod build;
-pub mod capabilities;
+#[cfg(feature = "citation")]
pub mod citeproc;
-pub mod client;
-pub mod codec;
+
+#[cfg(feature = "test")]
+pub mod test;
+
+cfg_if::cfg_if! {
+ if #[cfg(feature = "server")] {
+ mod config;
+ mod build;
+
+ pub mod server;
+ }
+}
+
pub mod completion;
+pub mod components;
pub mod definition;
pub mod diagnostics;
+pub mod feature;
pub mod folding;
-pub mod formatting;
pub mod forward_search;
pub mod highlight;
pub mod hover;
pub mod link;
-pub mod lsp_kind;
-pub mod range;
+pub mod outline;
+pub mod protocol;
pub mod reference;
pub mod rename;
-pub mod server;
pub mod symbol;
pub mod syntax;
+pub mod tex;
pub mod workspace;
diff --git a/support/texlab/src/link/latex_import.rs b/support/texlab/src/link/latex_import.rs
new file mode 100644
index 0000000000..494a72b481
--- /dev/null
+++ b/support/texlab/src/link/latex_import.rs
@@ -0,0 +1,99 @@
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{DocumentLink, DocumentLinkParams},
+ syntax::{latex, SyntaxNode},
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
+pub struct LatexImportLinkProvider;
+
+#[async_trait]
+impl FeatureProvider for LatexImportLinkProvider {
+ type Params = DocumentLinkParams;
+ type Output = Vec<DocumentLink>;
+
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ if let DocumentContent::Latex(table) = &req.current().content {
+ table
+ .imports
+ .iter()
+ .flat_map(|import| Self::resolve(req, table, import))
+ .collect()
+ } else {
+ Vec::new()
+ }
+ }
+}
+
+impl LatexImportLinkProvider {
+ fn resolve(
+ req: &FeatureRequest<DocumentLinkParams>,
+ table: &latex::SymbolTable,
+ import: &latex::Import,
+ ) -> Vec<DocumentLink> {
+ let mut links = Vec::new();
+ let file = import.file(&table);
+ for target in &import.targets {
+ if let Some(link) = req.snapshot().find(target).map(|doc| DocumentLink {
+ range: file.range(),
+ target: doc.uri.clone().into(),
+ tooltip: None,
+ }) {
+ links.push(link);
+ break;
+ }
+ }
+ links
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::{
+ feature::FeatureTester,
+ protocol::{Range, RangeExt},
+ };
+
+ #[tokio::test]
+ async fn empty_latex_document_command() {
+ let actual_links = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .test_link(LatexImportLinkProvider)
+ .await;
+
+ assert!(actual_links.is_empty());
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document_command() {
+ let actual_links = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .test_link(LatexImportLinkProvider)
+ .await;
+
+ assert!(actual_links.is_empty());
+ }
+
+ #[tokio::test]
+ async fn has_links() {
+ let actual_links = FeatureTester::new()
+ .file("foo.tex", r#"\import{bar/}{baz}"#)
+ .file("bar/baz.tex", r#""#)
+ .main("foo.tex")
+ .test_link(LatexImportLinkProvider)
+ .await;
+
+ let expected_links = vec![DocumentLink {
+ range: Range::new_simple(0, 14, 0, 17),
+ target: FeatureTester::uri("bar/baz.tex").into(),
+ tooltip: None,
+ }];
+
+ assert_eq!(actual_links, expected_links);
+ }
+}
diff --git a/support/texlab/src/link/latex_include.rs b/support/texlab/src/link/latex_include.rs
index 0cc6c36364..5f4f592f14 100644
--- a/support/texlab/src/link/latex_include.rs
+++ b/support/texlab/src/link/latex_include.rs
@@ -1,49 +1,49 @@
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{DocumentLink, DocumentLinkParams};
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{DocumentLink, DocumentLinkParams},
+ syntax::{latex, SyntaxNode},
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
-#[derive(Debug, PartialEq, Eq, Clone)]
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
pub struct LatexIncludeLinkProvider;
+#[async_trait]
impl FeatureProvider for LatexIncludeLinkProvider {
type Params = DocumentLinkParams;
type Output = Vec<DocumentLink>;
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<DocumentLinkParams>,
- ) -> Vec<DocumentLink> {
- if let SyntaxTree::Latex(tree) = &request.document().tree {
- return tree
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ if let DocumentContent::Latex(table) = &req.current().content {
+ table
.includes
.iter()
- .flat_map(|include| Self::resolve(request, include))
- .collect();
+ .flat_map(|include| Self::resolve(req, table, include))
+ .collect()
+ } else {
+ Vec::new()
}
- Vec::new()
}
}
impl LatexIncludeLinkProvider {
fn resolve(
- request: &FeatureRequest<DocumentLinkParams>,
- include: &LatexInclude,
+ req: &FeatureRequest<DocumentLinkParams>,
+ table: &latex::SymbolTable,
+ include: &latex::Include,
) -> Vec<DocumentLink> {
let mut links = Vec::new();
- let paths = include.paths();
+ let paths = include.paths(&table);
for (i, targets) in include.all_targets.iter().enumerate() {
for target in targets {
- if let Some(link) = request
- .workspace()
- .find(target)
- .map(|document| DocumentLink {
- range: paths[i].range(),
- target: document.uri.clone().into(),
- })
- {
+ if let Some(link) = req.snapshot().find(target).map(|doc| DocumentLink {
+ range: paths[i].range(),
+ target: doc.uri.clone().into(),
+ tooltip: None,
+ }) {
links.push(link);
+ break;
}
}
}
@@ -54,57 +54,48 @@ impl LatexIncludeLinkProvider {
#[cfg(test)]
mod tests {
use super::*;
- use crate::range::RangeExt;
- use lsp_types::{Position, Range};
+ use crate::{
+ feature::FeatureTester,
+ protocol::{Range, RangeExt},
+ };
+
+ #[tokio::test]
+ async fn empty_latex_document_command() {
+ let actual_links = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .test_link(LatexIncludeLinkProvider)
+ .await;
- #[test]
- fn test_has_links() {
- let links = test_feature(
- LatexIncludeLinkProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\input{bar.tex}"),
- FeatureSpec::file("bar.tex", ""),
- ],
- main_file: "foo.tex",
- position: Position::new(0, 15),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- links,
- vec![DocumentLink {
- range: Range::new_simple(0, 7, 0, 14),
- target: FeatureSpec::uri("bar.tex"),
- }]
- );
+ assert!(actual_links.is_empty());
}
- #[test]
- fn test_no_links_latex() {
- let links = test_feature(
- LatexIncludeLinkProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "")],
- main_file: "foo.tex",
- position: Position::new(0, 15),
- ..FeatureSpec::default()
- },
- );
- assert!(links.is_empty());
+ #[tokio::test]
+ async fn empty_bibtex_document_command() {
+ let actual_links = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .test_link(LatexIncludeLinkProvider)
+ .await;
+
+ assert!(actual_links.is_empty());
}
- #[test]
- fn test_no_links_bibtex() {
- let links = test_feature(
- LatexIncludeLinkProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "")],
- main_file: "foo.bib",
- position: Position::new(0, 15),
- ..FeatureSpec::default()
- },
- );
- assert!(links.is_empty());
+ #[tokio::test]
+ async fn has_links() {
+ let actual_links = FeatureTester::new()
+ .file("foo.tex", r#"\input{bar.tex}"#)
+ .file("bar.tex", r#""#)
+ .main("foo.tex")
+ .test_link(LatexIncludeLinkProvider)
+ .await;
+
+ let expected_links = vec![DocumentLink {
+ range: Range::new_simple(0, 7, 0, 14),
+ target: FeatureTester::uri("bar.tex").into(),
+ tooltip: None,
+ }];
+
+ assert_eq!(actual_links, expected_links);
}
}
diff --git a/support/texlab/src/link/mod.rs b/support/texlab/src/link/mod.rs
index 33d5556332..934975f060 100644
--- a/support/texlab/src/link/mod.rs
+++ b/support/texlab/src/link/mod.rs
@@ -1,9 +1,12 @@
+mod latex_import;
mod latex_include;
-use crate::link::latex_include::LatexIncludeLinkProvider;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{DocumentLink, DocumentLinkParams};
+use self::{latex_import::LatexImportLinkProvider, latex_include::LatexIncludeLinkProvider};
+use crate::{
+ feature::{ConcatProvider, FeatureProvider, FeatureRequest},
+ protocol::{DocumentLink, DocumentLinkParams},
+};
+use async_trait::async_trait;
pub struct LinkProvider {
provider: ConcatProvider<DocumentLinkParams, DocumentLink>,
@@ -12,7 +15,10 @@ pub struct LinkProvider {
impl LinkProvider {
pub fn new() -> Self {
Self {
- provider: ConcatProvider::new(vec![Box::new(LatexIncludeLinkProvider)]),
+ provider: ConcatProvider::new(vec![
+ Box::new(LatexImportLinkProvider),
+ Box::new(LatexIncludeLinkProvider),
+ ]),
}
}
}
@@ -23,15 +29,12 @@ impl Default for LinkProvider {
}
}
+#[async_trait]
impl FeatureProvider for LinkProvider {
type Params = DocumentLinkParams;
type Output = Vec<DocumentLink>;
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<DocumentLinkParams>,
- ) -> Vec<DocumentLink> {
- self.provider.execute(request).await
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ self.provider.execute(req).await
}
}
diff --git a/support/texlab/src/main.rs b/support/texlab/src/main.rs
index 40209e5095..16c5be8f26 100644
--- a/support/texlab/src/main.rs
+++ b/support/texlab/src/main.rs
@@ -1,56 +1,49 @@
-use clap::{app_from_crate, crate_authors, crate_description, crate_name, crate_version, Arg};
-use futures::channel::mpsc;
-use futures::prelude::*;
+use futures::{channel::mpsc, prelude::*};
use jsonrpc::MessageHandler;
-use std::error::Error;
-use std::io::Write;
-use std::sync::Arc;
-use stderrlog::{ColorChoice, Timestamp};
-use texlab::client::LatexLspClient;
-use texlab::codec::LspCodec;
-use texlab::server::LatexLspServer;
-use tokio::codec::{FramedRead, FramedWrite};
+use log::LevelFilter;
+use std::path::PathBuf;
+use std::{env, error, fs::OpenOptions, sync::Arc};
+use structopt::StructOpt;
+use texlab::{
+ protocol::{LatexLspClient, LspCodec},
+ server::LatexLspServer,
+ tex::Distribution,
+};
+use tokio_util::codec::{FramedRead, FramedWrite};
-#[tokio::main]
-async fn main() -> Result<(), Box<dyn Error>> {
- let matches = app_from_crate!()
- .author("")
- .arg(
- Arg::with_name("verbosity")
- .short("v")
- .multiple(true)
- .help("Increase message verbosity"),
- )
- .arg(
- Arg::with_name("quiet")
- .long("quiet")
- .short("q")
- .help("No output printed to stderr"),
- )
- .get_matches();
+/// An implementation of the Language Server Protocol for LaTeX
+#[derive(Debug, StructOpt)]
+struct Opts {
+ /// Increase message verbosity (-vvvv for max verbosity)
+ #[structopt(short, long, parse(from_occurrences))]
+ verbosity: u8,
+
+ /// No output printed to stderr
+ #[structopt(short, long)]
+ quiet: bool,
- stderrlog::new()
- .module(module_path!())
- .module("jsonrpc")
- .verbosity(matches.occurrences_of("verbosity") as usize)
- .quiet(matches.is_present("quiet"))
- .timestamp(Timestamp::Off)
- .color(ColorChoice::Never)
- .init()
- .unwrap();
+ /// Write the logging output to FILE
+ #[structopt(long, name = "FILE", parse(from_os_str))]
+ log_file: Option<PathBuf>,
+}
- let stdin = FramedRead::new(tokio::io::stdin(), LspCodec);
+#[tokio::main]
+async fn main() -> Result<(), Box<dyn error::Error>> {
+ let opts = Opts::from_args();
+ setup_logger(opts);
+
+ let mut stdin = FramedRead::new(tokio::io::stdin(), LspCodec);
let (stdout_tx, mut stdout_rx) = mpsc::channel(0);
let client = Arc::new(LatexLspClient::new(stdout_tx.clone()));
let server = Arc::new(LatexLspServer::new(
- Arc::new(tex::Distribution::detect().await),
+ Distribution::detect().await,
Arc::clone(&client),
+ Arc::new(env::current_dir().expect("failed to get working directory")),
));
let mut handler = MessageHandler {
server,
client,
- input: stdin,
output: stdout_tx,
};
@@ -59,10 +52,45 @@ async fn main() -> Result<(), Box<dyn Error>> {
loop {
let message = stdout_rx.next().await.unwrap();
stdout.send(message).await.unwrap();
- std::io::stdout().flush().unwrap(); // Workaround for tokio-rs/tokio#1527
}
});
- handler.listen().await;
+ while let Some(json) = stdin.next().await {
+ handler.handle(&json.unwrap()).await;
+ }
+
Ok(())
}
+
+fn setup_logger(opts: Opts) {
+ let verbosity_level = if !opts.quiet {
+ match opts.verbosity {
+ 0 => LevelFilter::Error,
+ 1 => LevelFilter::Warn,
+ 2 => LevelFilter::Info,
+ 3 => LevelFilter::Debug,
+ _ => LevelFilter::Trace,
+ }
+ } else {
+ LevelFilter::Off
+ };
+
+ let logger = fern::Dispatch::new()
+ .format(|out, message, record| out.finish(format_args!("{} - {}", record.level(), message)))
+ .level(verbosity_level)
+ .filter(|metadata| metadata.target() == "jsonrpc" || metadata.target().contains("texlab"))
+ .chain(std::io::stderr());
+
+ let logger = match opts.log_file {
+ Some(log_file) => logger.chain(
+ OpenOptions::new()
+ .write(true)
+ .create(true)
+ .open(log_file)
+ .expect("failed to open log file"),
+ ),
+ None => logger,
+ };
+
+ logger.apply().expect("failed to initialize logger");
+}
diff --git a/support/texlab/src/outline.rs b/support/texlab/src/outline.rs
new file mode 100644
index 0000000000..07ffaee09f
--- /dev/null
+++ b/support/texlab/src/outline.rs
@@ -0,0 +1,437 @@
+use crate::{
+ feature::DocumentView,
+ protocol::{MarkupContent, MarkupKind, Options, Position, Range, RangeExt, Uri},
+ syntax::{latex, SyntaxNode},
+ workspace::{Document, DocumentContent},
+};
+use std::{borrow::Cow, collections::HashSet, path::Path};
+use titlecase::titlecase;
+use OutlineContextItem::*;
+
+#[derive(Debug, Clone, Copy)]
+pub struct OutlineSection<'a> {
+ pub document: &'a Document,
+ pub item: &'a latex::Section,
+}
+
+pub struct Outline<'a> {
+ sections: Vec<OutlineSection<'a>>,
+}
+
+impl<'a> Outline<'a> {
+ pub fn find(&'a self, uri: &Uri, pos: Position) -> Option<&'a latex::Section> {
+ self.sections
+ .iter()
+ .filter(|section| section.document.uri == *uri)
+ .rev()
+ .find(|section| {
+ let table = section.document.content.as_latex().unwrap();
+ table[section.item.parent].end() <= pos
+ })
+ .map(|sec| sec.item)
+ }
+
+ pub fn analyze(view: &'a DocumentView, options: &Options, current_dir: &Path) -> Self {
+ let mut finder = OutlineSectionFinder::default();
+ let doc = view
+ .snapshot
+ .parent(&view.current.uri, options, current_dir)
+ .map(|parent| {
+ view.related
+ .iter()
+ .find(|doc| doc.uri == parent.uri)
+ .unwrap()
+ })
+ .unwrap_or(&view.current);
+
+ finder.analyze(view, doc);
+ Self {
+ sections: finder.sections,
+ }
+ }
+}
+
+#[derive(Debug, Clone, Copy)]
+enum OutlineItem<'a> {
+ Section(&'a latex::Section),
+ Include(&'a latex::Include),
+}
+
+#[derive(Debug, Default)]
+struct OutlineSectionFinder<'a> {
+ visited: HashSet<&'a Uri>,
+ sections: Vec<OutlineSection<'a>>,
+}
+
+impl<'a> OutlineSectionFinder<'a> {
+ fn analyze(&mut self, view: &'a DocumentView, doc: &'a Document) {
+ if !self.visited.insert(&doc.uri) {
+ return;
+ }
+
+ if let DocumentContent::Latex(table) = &doc.content {
+ let mut items = Vec::new();
+ for section in &table.sections {
+ items.push(OutlineItem::Section(section));
+ }
+ for include in &table.includes {
+ items.push(OutlineItem::Include(include));
+ }
+ items.sort_by_key(|item| match item {
+ OutlineItem::Include(include) => table[include.parent].start(),
+ OutlineItem::Section(section) => table[section.parent].start(),
+ });
+
+ for item in items {
+ match item {
+ OutlineItem::Section(item) => {
+ let section = OutlineSection {
+ document: doc,
+ item,
+ };
+ self.sections.push(section);
+ }
+ OutlineItem::Include(item) => {
+ for doc in &view.related {
+ for targets in &item.all_targets {
+ if targets.contains(&doc.uri) {
+ self.analyze(view, doc);
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub enum OutlineCaptionKind {
+ Figure,
+ Table,
+ Listing,
+ Algorithm,
+}
+
+impl OutlineCaptionKind {
+ pub fn as_str(self) -> &'static str {
+ match self {
+ Self::Figure => "Figure",
+ Self::Table => "Table",
+ Self::Listing => "Listing",
+ Self::Algorithm => "Algorithm",
+ }
+ }
+
+ pub fn parse(env_name: &str) -> Option<Self> {
+ match env_name {
+ "figure" | "subfigure" => Some(Self::Figure),
+ "table" | "subtable" => Some(Self::Table),
+ "listing" | "lstlisting" => Some(Self::Listing),
+ "algorithm" => Some(Self::Algorithm),
+ _ => None,
+ }
+ }
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+pub enum OutlineContextItem {
+ Section {
+ prefix: Cow<'static, str>,
+ text: String,
+ },
+ Caption {
+ kind: Option<OutlineCaptionKind>,
+ text: String,
+ },
+ Theorem {
+ kind: String,
+ description: Option<String>,
+ },
+ Equation,
+ Item,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+pub struct OutlineContext {
+ pub range: Range,
+ pub number: Option<String>,
+ pub item: OutlineContextItem,
+}
+
+impl OutlineContext {
+ pub fn reference(&self) -> String {
+ match &self.number {
+ Some(number) => match &self.item {
+ Section { prefix, text } => format!("{} {} ({})", prefix, number, text),
+ Caption { kind: None, text } => format!("{} {}", number, text),
+ Caption {
+ kind: Some(kind),
+ text,
+ } => format!("{} {}: {}", kind.as_str(), number, text),
+ Theorem {
+ kind,
+ description: None,
+ } => format!("{} {}", kind, number),
+ Theorem {
+ kind,
+ description: Some(description),
+ } => format!("{} {} ({})", kind, number, description),
+ Equation => format!("Equation ({})", number),
+ Item => format!("Item {}", number),
+ },
+ None => match &self.item {
+ Section { prefix, text } => format!("{} ({})", prefix, text),
+ Caption { kind: None, text } => text.clone(),
+ Caption {
+ kind: Some(kind),
+ text,
+ } => format!("{}: {}", kind.as_str(), text),
+ Theorem {
+ kind,
+ description: None,
+ } => kind.into(),
+ Theorem {
+ kind,
+ description: Some(description),
+ } => format!("{} ({})", kind, description),
+ Equation => "Equation".into(),
+ Item => "Item".into(),
+ },
+ }
+ }
+
+ pub fn detail(&self) -> Option<String> {
+ match &self.item {
+ Section { .. } | Theorem { .. } | Equation | Item => Some(self.reference()),
+ Caption {
+ kind: Some(kind), ..
+ } => {
+ let result = match &self.number {
+ Some(number) => format!("{} {}", kind.as_str(), number),
+ None => kind.as_str().to_owned(),
+ };
+ Some(result)
+ }
+ Caption { .. } => None,
+ }
+ }
+
+ pub fn documentation(&self) -> MarkupContent {
+ MarkupContent {
+ kind: MarkupKind::PlainText,
+ value: self.reference(),
+ }
+ }
+
+ pub fn parse(view: &DocumentView, outline: &Outline, label: latex::Label) -> Option<Self> {
+ if let DocumentContent::Latex(table) = &view.current.content {
+ Self::find_caption(view, table, label)
+ .or_else(|| Self::find_theorem(view, table, label))
+ .or_else(|| Self::find_equation(view, table, label))
+ .or_else(|| Self::find_item(view, table, label))
+ .or_else(|| Self::find_section(view, outline, table, label))
+ } else {
+ None
+ }
+ }
+
+ fn find_caption(
+ view: &DocumentView,
+ table: &latex::SymbolTable,
+ label: latex::Label,
+ ) -> Option<Self> {
+ let label_range = table[label.parent].range();
+ let caption_env = table
+ .environments
+ .iter()
+ .filter(|env| !env.is_root(&table))
+ .find(|env| env.range(&table).contains(label_range.start))?;
+
+ let caption = table
+ .captions
+ .iter()
+ .find(|cap| table.is_direct_child(*caption_env, table[cap.parent].start()))?;
+
+ let caption_text = table.print_group_content(
+ caption.parent,
+ latex::GroupKind::Group,
+ caption.arg_index,
+ )?;
+
+ let caption_kind = caption_env
+ .left
+ .name(&table)
+ .map(latex::Token::text)
+ .and_then(OutlineCaptionKind::parse);
+
+ Some(Self {
+ range: caption_env.range(&table),
+ number: Self::find_number(view, table, label),
+ item: Caption {
+ kind: caption_kind,
+ text: caption_text,
+ },
+ })
+ }
+
+ fn find_theorem(
+ view: &DocumentView,
+ main_table: &latex::SymbolTable,
+ label: latex::Label,
+ ) -> Option<Self> {
+ let label_range = main_table[label.parent].range();
+ let env = main_table
+ .environments
+ .iter()
+ .find(|env| env.range(&main_table).contains(label_range.start))?;
+
+ let env_name = env.left.name(&main_table).map(latex::Token::text)?;
+
+ for doc in &view.related {
+ if let DocumentContent::Latex(table) = &doc.content {
+ for def in &table.theorem_definitions {
+ if env_name == def.name(&table).text() {
+ let kind = table
+ .print_group_content(
+ def.parent,
+ latex::GroupKind::Group,
+ def.arg_index + 1,
+ )
+ .unwrap_or_else(|| titlecase(&env_name));
+
+ let description = main_table.print_group_content(
+ env.left.parent,
+ latex::GroupKind::Options,
+ 0,
+ );
+
+ return Some(Self {
+ range: env.range(&main_table),
+ number: Self::find_number(view, main_table, label),
+ item: Theorem { kind, description },
+ });
+ }
+ }
+ }
+ }
+ None
+ }
+
+ fn find_equation(
+ view: &DocumentView,
+ table: &latex::SymbolTable,
+ label: latex::Label,
+ ) -> Option<Self> {
+ let label_range = table[label.parent].range();
+ table
+ .environments
+ .iter()
+ .filter(|env| env.left.is_math(&table))
+ .map(|env| env.range(&table))
+ .find(|range| range.contains(label_range.start))
+ .map(|range| Self {
+ range,
+ number: Self::find_number(view, table, label),
+ item: Equation,
+ })
+ }
+
+ fn find_item(
+ view: &DocumentView,
+ table: &latex::SymbolTable,
+ label: latex::Label,
+ ) -> Option<Self> {
+ let label_range = table[label.parent].range();
+ struct LatexItemNode {
+ item: latex::Item,
+ range: Range,
+ }
+
+ let enumeration = table
+ .environments
+ .iter()
+ .filter(|env| env.left.is_enum(&table))
+ .find(|env| env.range(&table).contains(label_range.start))?;
+
+ let mut item_nodes: Vec<_> = table
+ .items
+ .iter()
+ .filter(|item| table.is_enum_item(*enumeration, **item))
+ .map(|item| LatexItemNode {
+ item: *item,
+ range: Range::default(),
+ })
+ .collect();
+
+ for i in 0..item_nodes.len() {
+ let start = table[item_nodes[i].item.parent].start();
+ let end = item_nodes
+ .get(i + 1)
+ .map(|node| table[node.item.parent].start())
+ .unwrap_or_else(|| table[enumeration.right.parent].start());
+ item_nodes[i].range = Range::new(start, end);
+ }
+
+ let node = item_nodes
+ .iter()
+ .find(|node| node.range.contains(label_range.start))?;
+
+ let number = node
+ .item
+ .name(&table)
+ .or_else(|| Self::find_number(view, table, label));
+
+ Some(Self {
+ range: enumeration.range(&table),
+ number,
+ item: Item,
+ })
+ }
+
+ fn find_section(
+ view: &DocumentView,
+ outline: &Outline,
+ table: &latex::SymbolTable,
+ label: latex::Label,
+ ) -> Option<Self> {
+ let label_range = table[label.parent].range();
+ let section = outline.find(&view.current.uri, label_range.start)?;
+ Some(Self {
+ range: table[section.parent].range(),
+ number: Self::find_number(view, table, label),
+ item: Section {
+ prefix: section.prefix.clone(),
+ text: table.print_group_content(
+ section.parent,
+ latex::GroupKind::Group,
+ section.arg_index,
+ )?,
+ },
+ })
+ }
+
+ pub fn find_number(
+ view: &DocumentView,
+ table: &latex::SymbolTable,
+ label: latex::Label,
+ ) -> Option<String> {
+ let label_names = label.names(&table);
+ if label_names.len() != 1 {
+ return None;
+ }
+
+ for doc in &view.related {
+ if let DocumentContent::Latex(table) = &doc.content {
+ for numbering in &table.label_numberings {
+ if numbering.name(&table).text() == label_names[0].text() {
+ return Some(numbering.number.clone());
+ }
+ }
+ }
+ }
+ None
+ }
+}
diff --git a/support/texlab/src/protocol/capabilities.rs b/support/texlab/src/protocol/capabilities.rs
new file mode 100644
index 0000000000..c83b205aa8
--- /dev/null
+++ b/support/texlab/src/protocol/capabilities.rs
@@ -0,0 +1,145 @@
+use lsp_types::{ClientCapabilities, MarkupKind};
+
+pub trait ClientCapabilitiesExt {
+ fn has_definition_link_support(&self) -> bool;
+
+ fn has_hierarchical_document_symbol_support(&self) -> bool;
+
+ fn has_work_done_progress_support(&self) -> bool;
+
+ fn has_hover_markdown_support(&self) -> bool;
+
+ fn has_pull_configuration_support(&self) -> bool;
+
+ fn has_push_configuration_support(&self) -> bool;
+}
+
+impl ClientCapabilitiesExt for ClientCapabilities {
+ fn has_definition_link_support(&self) -> bool {
+ self.text_document
+ .as_ref()
+ .and_then(|cap| cap.definition.as_ref())
+ .and_then(|cap| cap.link_support)
+ == Some(true)
+ }
+
+ fn has_hierarchical_document_symbol_support(&self) -> bool {
+ self.text_document
+ .as_ref()
+ .and_then(|cap| cap.document_symbol.as_ref())
+ .and_then(|cap| cap.hierarchical_document_symbol_support)
+ == Some(true)
+ }
+
+ fn has_work_done_progress_support(&self) -> bool {
+ self.window.as_ref().and_then(|cap| cap.work_done_progress) == Some(true)
+ }
+
+ fn has_hover_markdown_support(&self) -> bool {
+ self.text_document
+ .as_ref()
+ .and_then(|cap| cap.hover.as_ref())
+ .and_then(|cap| cap.content_format.as_ref())
+ .filter(|formats| formats.contains(&MarkupKind::Markdown))
+ .is_some()
+ }
+
+ fn has_pull_configuration_support(&self) -> bool {
+ self.workspace.as_ref().and_then(|cap| cap.configuration) == Some(true)
+ }
+
+ fn has_push_configuration_support(&self) -> bool {
+ self.workspace
+ .as_ref()
+ .and_then(|cap| cap.did_change_configuration)
+ .and_then(|cap| cap.dynamic_registration)
+ == Some(true)
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use lsp_types::*;
+
+ #[test]
+ fn has_definition_link_support_true() {
+ let capabilities = ClientCapabilities {
+ text_document: Some(TextDocumentClientCapabilities {
+ definition: Some(GotoCapability {
+ link_support: Some(true),
+ ..GotoCapability::default()
+ }),
+ ..TextDocumentClientCapabilities::default()
+ }),
+ ..ClientCapabilities::default()
+ };
+ assert!(capabilities.has_definition_link_support());
+ }
+
+ #[test]
+ fn has_definition_link_support_false() {
+ let capabilities = ClientCapabilities::default();
+ assert!(!capabilities.has_definition_link_support());
+ }
+
+ #[test]
+ fn has_hierarchical_document_symbol_support_true() {
+ let capabilities = ClientCapabilities {
+ text_document: Some(TextDocumentClientCapabilities {
+ document_symbol: Some(DocumentSymbolCapability {
+ hierarchical_document_symbol_support: Some(true),
+ ..DocumentSymbolCapability::default()
+ }),
+ ..TextDocumentClientCapabilities::default()
+ }),
+ ..ClientCapabilities::default()
+ };
+ assert!(capabilities.has_hierarchical_document_symbol_support());
+ }
+
+ #[test]
+ fn has_hierarchical_document_symbol_support_false() {
+ let capabilities = ClientCapabilities::default();
+ assert!(!capabilities.has_hierarchical_document_symbol_support());
+ }
+
+ #[test]
+ fn has_work_done_progress_support_true() {
+ let capabilities = ClientCapabilities {
+ window: Some(WindowClientCapabilities {
+ work_done_progress: Some(true),
+ ..WindowClientCapabilities::default()
+ }),
+ ..ClientCapabilities::default()
+ };
+ assert!(capabilities.has_work_done_progress_support());
+ }
+
+ #[test]
+ fn has_work_done_progress_support_false() {
+ let capabilities = ClientCapabilities::default();
+ assert!(!capabilities.has_work_done_progress_support());
+ }
+
+ #[test]
+ fn has_hover_markdown_support_true() {
+ let capabilities = ClientCapabilities {
+ text_document: Some(TextDocumentClientCapabilities {
+ hover: Some(HoverCapability {
+ content_format: Some(vec![MarkupKind::PlainText, MarkupKind::Markdown]),
+ ..HoverCapability::default()
+ }),
+ ..TextDocumentClientCapabilities::default()
+ }),
+ ..ClientCapabilities::default()
+ };
+ assert!(capabilities.has_hover_markdown_support());
+ }
+
+ #[test]
+ fn has_hover_markdown_support_false() {
+ let capabilities = ClientCapabilities::default();
+ assert!(!capabilities.has_hover_markdown_support());
+ }
+}
diff --git a/support/texlab/src/client.rs b/support/texlab/src/protocol/client.rs
index bed6c3b8c8..471f1fa41d 100644
--- a/support/texlab/src/client.rs
+++ b/support/texlab/src/protocol/client.rs
@@ -1,4 +1,3 @@
-use futures_boxed::boxed;
use jsonrpc::client::Result;
use jsonrpc_derive::{jsonrpc_client, jsonrpc_method};
use lsp_types::*;
@@ -6,30 +5,23 @@ use lsp_types::*;
#[jsonrpc_client(LatexLspClient)]
pub trait LspClient {
#[jsonrpc_method("workspace/configuration", kind = "request")]
- #[boxed]
async fn configuration(&self, params: ConfigurationParams) -> Result<serde_json::Value>;
#[jsonrpc_method("window/showMessage", kind = "notification")]
- #[boxed]
async fn show_message(&self, params: ShowMessageParams);
#[jsonrpc_method("client/registerCapability", kind = "request")]
- #[boxed]
async fn register_capability(&self, params: RegistrationParams) -> Result<()>;
#[jsonrpc_method("textDocument/publishDiagnostics", kind = "notification")]
- #[boxed]
async fn publish_diagnostics(&self, params: PublishDiagnosticsParams);
#[jsonrpc_method("$/progress", kind = "notification")]
- #[boxed]
async fn progress(&self, params: ProgressParams);
#[jsonrpc_method("window/workDoneProgress/create", kind = "request")]
- #[boxed]
async fn work_done_progress_create(&self, params: WorkDoneProgressCreateParams) -> Result<()>;
#[jsonrpc_method("window/logMessage", kind = "notification")]
- #[boxed]
async fn log_message(&self, params: LogMessageParams);
}
diff --git a/support/texlab/src/codec.rs b/support/texlab/src/protocol/codec.rs
index 53f5e3d6b3..980ae1307e 100644
--- a/support/texlab/src/codec.rs
+++ b/support/texlab/src/protocol/codec.rs
@@ -1,9 +1,7 @@
use bytes::{BufMut, BytesMut};
-use log::*;
+use log::trace;
use std::io::{Error, ErrorKind};
-use std::option::Option;
-use std::string::String;
-use tokio::codec::{Decoder, Encoder};
+use tokio_util::codec::{Decoder, Encoder};
pub struct LspCodec;
@@ -17,7 +15,7 @@ impl Decoder for LspCodec {
trace!("Received message:\n{}\n", content);
let offset = src.len() - remaining.len();
- src.split_to(offset);
+ let _ = src.split_to(offset);
Ok(Some(content))
}
Err(error) => {
@@ -31,26 +29,26 @@ impl Decoder for LspCodec {
}
}
-impl Encoder for LspCodec {
- type Item = String;
+impl Encoder<String> for LspCodec {
type Error = Error;
- fn encode(&mut self, item: Self::Item, dst: &mut BytesMut) -> Result<(), Self::Error> {
+ fn encode(&mut self, item: String, dst: &mut BytesMut) -> Result<(), Self::Error> {
let message = format!("Content-Length: {}\r\n\r\n{}", item.len(), item);
trace!("Sent message:\n{}\n", message);
dst.reserve(message.len());
- dst.put(message);
+ dst.put(message.as_bytes());
Ok(())
}
}
mod parser {
- use nom::bytes::streaming::{tag, take, take_while};
- use nom::character::is_digit;
- use nom::character::streaming::line_ending;
- use nom::combinator::{map_res, opt};
- use nom::IResult;
+ use nom::{
+ bytes::streaming::{tag, take, take_while},
+ character::{is_digit, streaming::line_ending},
+ combinator::{map_res, opt},
+ IResult,
+ };
use std::str;
pub fn parse(input: &[u8]) -> IResult<&[u8], String> {
@@ -85,26 +83,26 @@ mod parser {
use super::*;
#[test]
- fn test_parse_content_type() {
+ fn parse_content_type() {
let result =
content_type(b"Content-Type: application/vscode-jsonrpc;charset=utf-8\r\n");
assert!(result.is_ok());
}
#[test]
- fn test_parse_content_type_utf8() {
+ fn parse_content_type_utf8() {
let result = content_type(b"Content-Type: application/vscode-jsonrpc;charset=utf8\r\n");
assert!(result.is_ok());
}
#[test]
- fn test_parse_content_length() {
+ fn parse_content_length() {
let result = content_length(b"Content-Length: 42\r\n");
assert_eq!(result.unwrap().1, 42usize);
}
#[test]
- fn test_parse_message_full() {
+ fn parse_message_full() {
let result = parse(
b"Content-Length: 2\r\nContent-Type: application/vscode-jsonrpc;charset=utf8\r\n\r\n{}",
);
@@ -112,7 +110,7 @@ mod parser {
}
#[test]
- fn test_parse_message_type_first() {
+ fn parse_message_type_first() {
let result = parse(
b"Content-Type: application/vscode-jsonrpc;charset=utf8\r\nContent-Length: 2\r\n\r\n{}",
);
@@ -120,25 +118,25 @@ mod parser {
}
#[test]
- fn test_parse_message_without_type() {
+ fn parse_message_without_type() {
let result = parse(b"Content-Length: 2\r\n\r\n{}");
assert_eq!(result.unwrap().1, "{}");
}
#[test]
- fn test_parse_message_incomplete() {
+ fn parse_message_incomplete() {
let result = parse(b"Content-Length:");
assert!(result.unwrap_err().is_incomplete());
}
#[test]
- fn test_parse_message_invalid() {
+ fn parse_message_invalid() {
let error = parse(b"foo").unwrap_err();
assert!(!error.is_incomplete());
}
#[test]
- fn test_parse_message_overflow() {
+ fn parse_message_overflow() {
let result = parse(b"Content-Length: 4\r\n\r\n{}");
assert!(result.unwrap_err().is_incomplete());
}
diff --git a/support/texlab/src/protocol/edit.rs b/support/texlab/src/protocol/edit.rs
new file mode 100644
index 0000000000..9091f2d393
--- /dev/null
+++ b/support/texlab/src/protocol/edit.rs
@@ -0,0 +1,12 @@
+use lsp_types::{CompletionTextEdit, TextEdit};
+
+pub trait CompletionTextEditExt {
+ fn text_edit(&self) -> Option<&TextEdit>;
+}
+
+impl CompletionTextEditExt for CompletionTextEdit {
+ fn text_edit(&self) -> Option<&TextEdit> {
+ let CompletionTextEdit::Edit(edit) = self;
+ Some(edit)
+ }
+}
diff --git a/support/texlab/src/protocol/mod.rs b/support/texlab/src/protocol/mod.rs
new file mode 100644
index 0000000000..c08a7d82f5
--- /dev/null
+++ b/support/texlab/src/protocol/mod.rs
@@ -0,0 +1,71 @@
+cfg_if::cfg_if! {
+ if #[cfg(feature = "server")] {
+ mod client;
+ mod codec;
+
+ pub use self::{
+ client::{LatexLspClient, LspClient},
+ codec::LspCodec,
+ };
+ }
+}
+
+mod capabilities;
+mod edit;
+mod options;
+mod range;
+mod uri;
+
+pub use self::{
+ capabilities::ClientCapabilitiesExt,
+ edit::*,
+ options::*,
+ range::RangeExt,
+ uri::{AsUri, Uri},
+};
+pub use lsp_types::*;
+
+use serde::{Deserialize, Serialize};
+use serde_repr::*;
+
+#[serde(untagged)]
+#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub enum DefinitionResponse {
+ Locations(Vec<Location>),
+ LocationLinks(Vec<LocationLink>),
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize_repr, Deserialize_repr)]
+#[repr(i32)]
+pub enum ForwardSearchStatus {
+ Success = 0,
+ Error = 1,
+ Failure = 2,
+ Unconfigured = 3,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub struct ForwardSearchResult {
+ pub status: ForwardSearchStatus,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct BuildParams {
+ pub text_document: TextDocumentIdentifier,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize_repr, Deserialize_repr)]
+#[repr(i32)]
+pub enum BuildStatus {
+ Success = 0,
+ Error = 1,
+ Failure = 2,
+ Cancelled = 3,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct BuildResult {
+ pub status: BuildStatus,
+}
diff --git a/support/texlab/src/protocol/options.rs b/support/texlab/src/protocol/options.rs
new file mode 100644
index 0000000000..86718d1e72
--- /dev/null
+++ b/support/texlab/src/protocol/options.rs
@@ -0,0 +1,104 @@
+use serde::{Deserialize, Serialize};
+use std::path::PathBuf;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub enum BibtexFormatter {
+ Texlab,
+ Latexindent,
+}
+
+impl Default for BibtexFormatter {
+ fn default() -> Self {
+ Self::Texlab
+ }
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct BibtexFormattingOptions {
+ pub line_length: Option<i32>,
+ pub formatter: Option<BibtexFormatter>,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Default, Serialize, Deserialize)]
+pub struct LatexForwardSearchOptions {
+ pub executable: Option<String>,
+ pub args: Option<Vec<String>>,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize, Default)]
+#[serde(rename_all = "camelCase")]
+pub struct LatexLintOptions {
+ pub on_change: Option<bool>,
+ pub on_save: Option<bool>,
+}
+
+impl LatexLintOptions {
+ pub fn on_change(&self) -> bool {
+ self.on_change.unwrap_or(false)
+ }
+
+ pub fn on_save(&self) -> bool {
+ self.on_save.unwrap_or(false)
+ }
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct LatexBuildOptions {
+ pub executable: Option<String>,
+ pub args: Option<Vec<String>>,
+ pub on_save: Option<bool>,
+ pub output_directory: Option<PathBuf>,
+ pub forward_search_after: Option<bool>,
+}
+
+impl LatexBuildOptions {
+ pub fn executable(&self) -> String {
+ self.executable
+ .as_ref()
+ .map(Clone::clone)
+ .unwrap_or_else(|| "latexmk".to_owned())
+ }
+
+ pub fn args(&self) -> Vec<String> {
+ self.args.as_ref().map(Clone::clone).unwrap_or_else(|| {
+ vec![
+ "-pdf".to_owned(),
+ "-interaction=nonstopmode".to_owned(),
+ "-synctex=1".to_owned(),
+ ]
+ })
+ }
+
+ pub fn on_save(&self) -> bool {
+ self.on_save.unwrap_or(false)
+ }
+
+ pub fn forward_search_after(&self) -> bool {
+ self.forward_search_after.unwrap_or(false)
+ }
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct LatexOptions {
+ pub forward_search: Option<LatexForwardSearchOptions>,
+ pub lint: Option<LatexLintOptions>,
+ pub build: Option<LatexBuildOptions>,
+ pub root_directory: Option<PathBuf>,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct BibtexOptions {
+ pub formatting: Option<BibtexFormattingOptions>,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Default, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
+pub struct Options {
+ pub latex: Option<LatexOptions>,
+ pub bibtex: Option<BibtexOptions>,
+}
diff --git a/support/texlab/src/protocol/range.rs b/support/texlab/src/protocol/range.rs
new file mode 100644
index 0000000000..774df1e699
--- /dev/null
+++ b/support/texlab/src/protocol/range.rs
@@ -0,0 +1,97 @@
+use lsp_types::{Position, Range};
+
+pub trait RangeExt {
+ fn new_simple(start_line: u64, start_character: u64, end_line: u64, end_character: u64)
+ -> Self;
+
+ fn contains(&self, pos: Position) -> bool;
+
+ fn contains_exclusive(&self, pos: Position) -> bool;
+}
+
+impl RangeExt for Range {
+ fn new_simple(
+ start_line: u64,
+ start_character: u64,
+ end_line: u64,
+ end_character: u64,
+ ) -> Self {
+ Self {
+ start: Position::new(start_line, start_character),
+ end: Position::new(end_line, end_character),
+ }
+ }
+
+ fn contains(&self, pos: Position) -> bool {
+ pos >= self.start && pos <= self.end
+ }
+
+ fn contains_exclusive(&self, pos: Position) -> bool {
+ pos > self.start && pos < self.end
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+
+ #[test]
+ fn contains_inside() {
+ let range = Range::new_simple(1, 2, 3, 4);
+ assert!(range.contains(Position::new(2, 5)));
+ }
+
+ #[test]
+ fn contains_begin() {
+ let range = Range::new_simple(1, 2, 3, 4);
+ assert!(range.contains(range.start));
+ }
+
+ #[test]
+ fn contains_end() {
+ let range = Range::new_simple(1, 2, 3, 4);
+ assert!(range.contains(range.end));
+ }
+
+ #[test]
+ fn contains_outside_left() {
+ let range = Range::new_simple(1, 2, 3, 4);
+ assert!(!range.contains(Position::new(0, 5)));
+ }
+
+ #[test]
+ fn contains_outside_right() {
+ let range = Range::new_simple(1, 2, 3, 4);
+ assert!(!range.contains(Position::new(5, 1)));
+ }
+
+ #[test]
+ fn contains_exclusive_inside() {
+ let range = Range::new_simple(1, 2, 3, 4);
+ assert!(range.contains_exclusive(Position::new(2, 5)));
+ }
+
+ #[test]
+ fn contains_exclusive_begin() {
+ let range = Range::new_simple(1, 2, 3, 4);
+ assert!(!range.contains_exclusive(range.start));
+ }
+
+ #[test]
+ fn contains_exclusive_end() {
+ let range = Range::new_simple(1, 2, 3, 4);
+ assert!(!range.contains_exclusive(range.end));
+ }
+
+ #[test]
+ fn contains_exclusive_outside_left() {
+ let range = Range::new_simple(1, 2, 3, 4);
+ assert!(!range.contains_exclusive(Position::new(0, 5)));
+ }
+
+ #[test]
+ fn contains_exclusive_outside_right() {
+ let range = Range::new_simple(1, 2, 3, 4);
+ assert!(!range.contains_exclusive(Position::new(5, 1)));
+ }
+}
diff --git a/support/texlab/src/workspace/uri.rs b/support/texlab/src/protocol/uri.rs
index 7fc24d238f..e8dd1ba160 100644
--- a/support/texlab/src/workspace/uri.rs
+++ b/support/texlab/src/protocol/uri.rs
@@ -1,14 +1,32 @@
-use lsp_types::*;
+use lsp_types::{TextDocumentIdentifier, TextDocumentPositionParams};
use serde::{Deserialize, Serialize};
-use std::fmt;
-use std::hash::{Hash, Hasher};
-use std::ops::Deref;
-use std::path::Path;
+use std::{
+ fmt,
+ hash::{Hash, Hasher},
+ ops::Deref,
+ path::Path,
+};
+use url::{ParseError, Url};
-#[derive(Debug, Eq, Clone, Serialize, Deserialize)]
+#[derive(Eq, Clone, Serialize, Deserialize)]
pub struct Uri(Url);
impl Uri {
+ pub fn with_extension(&self, extension: &str) -> Option<Self> {
+ let file_name = self.path_segments()?.last()?;
+ let file_stem = match file_name.rfind('.') {
+ Some(index) => &file_name[..index],
+ None => file_name,
+ };
+ self.join(&format!("{}.{}", file_stem, extension))
+ .ok()
+ .map(Into::into)
+ }
+
+ pub fn parse(input: &str) -> Result<Self, ParseError> {
+ Url::parse(input).map(|url| url.into())
+ }
+
pub fn from_file_path<P: AsRef<Path>>(path: P) -> Result<Self, ()> {
Url::from_file_path(path).map(|url| url.into())
}
@@ -50,6 +68,12 @@ impl Into<Url> for Uri {
}
}
+impl fmt::Debug for Uri {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ self.0.fmt(f)
+ }
+}
+
impl fmt::Display for Uri {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.0.fmt(f)
diff --git a/support/texlab/src/range.rs b/support/texlab/src/range.rs
deleted file mode 100644
index 515ec187a6..0000000000
--- a/support/texlab/src/range.rs
+++ /dev/null
@@ -1,32 +0,0 @@
-use lsp_types::*;
-
-pub trait RangeExt {
- fn new_simple(start_line: u64, start_character: u64, end_line: u64, end_character: u64)
- -> Self;
-
- fn contains(&self, position: Position) -> bool;
-
- fn contains_exclusive(&self, position: Position) -> bool;
-}
-
-impl RangeExt for Range {
- fn new_simple(
- start_line: u64,
- start_character: u64,
- end_line: u64,
- end_character: u64,
- ) -> Self {
- Range {
- start: Position::new(start_line, start_character),
- end: Position::new(end_line, end_character),
- }
- }
-
- fn contains(&self, position: Position) -> bool {
- position >= self.start && position <= self.end
- }
-
- fn contains_exclusive(&self, position: Position) -> bool {
- position > self.start && position < self.end
- }
-}
diff --git a/support/texlab/src/reference/bibtex_entry.rs b/support/texlab/src/reference/bibtex_entry.rs
index 23e09bdbb6..2acf7bdfef 100644
--- a/support/texlab/src/reference/bibtex_entry.rs
+++ b/support/texlab/src/reference/bibtex_entry.rs
@@ -1,76 +1,65 @@
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{Location, ReferenceParams};
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{Location, RangeExt, ReferenceParams, Url},
+ syntax::{bibtex, latex, SyntaxNode},
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
-#[derive(Debug, PartialEq, Eq, Clone)]
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
pub struct BibtexEntryReferenceProvider;
+#[async_trait]
impl FeatureProvider for BibtexEntryReferenceProvider {
type Params = ReferenceParams;
type Output = Vec<Location>;
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<ReferenceParams>) -> Vec<Location> {
- let mut references = Vec::new();
- if let Some(key) = Self::find_key(request) {
- for document in request.related_documents() {
- match &document.tree {
- SyntaxTree::Latex(tree) => tree
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ let mut refs = Vec::new();
+ if let Some(key) = Self::find_key(req) {
+ for doc in req.related() {
+ match &doc.content {
+ DocumentContent::Latex(table) => table
.citations
.iter()
- .flat_map(LatexCitation::keys)
+ .flat_map(|citation| citation.keys(&table))
.filter(|citation| citation.text() == key)
- .map(|citation| {
- Location::new(document.uri.clone().into(), citation.range())
- })
- .for_each(|location| references.push(location)),
- SyntaxTree::Bibtex(tree) => {
- if request.params.context.include_declaration {
- for entry in tree.entries() {
- if let Some(key_token) = &entry.key {
- if key_token.text() == key {
- let uri = document.uri.clone();
- let location = Location::new(uri.into(), key_token.range());
- references.push(location);
- }
- }
- }
+ .map(|citation| Location::new(doc.uri.clone().into(), citation.range()))
+ .for_each(|location| refs.push(location)),
+ DocumentContent::Bibtex(tree) => {
+ if req.params.context.include_declaration {
+ let uri: Url = doc.uri.clone().into();
+ tree.children(tree.root)
+ .filter_map(|node| tree.as_entry(node))
+ .filter_map(|entry| entry.key.as_ref())
+ .filter(|key_tok| key_tok.text() == key)
+ .map(|key_tok| Location::new(uri.clone(), key_tok.range()))
+ .for_each(|location| refs.push(location));
}
}
}
}
}
- references
+ refs
}
}
impl BibtexEntryReferenceProvider {
- fn find_key(request: &FeatureRequest<ReferenceParams>) -> Option<&str> {
- match &request.document().tree {
- SyntaxTree::Latex(tree) => tree
+ fn find_key(req: &FeatureRequest<ReferenceParams>) -> Option<&str> {
+ let pos = req.params.text_document_position.position;
+ match &req.current().content {
+ DocumentContent::Latex(table) => table
.citations
.iter()
- .flat_map(LatexCitation::keys)
- .find(|key| {
- key.range()
- .contains(request.params.text_document_position.position)
- })
- .map(LatexToken::text),
- SyntaxTree::Bibtex(tree) => {
- for entry in tree.entries() {
- if let Some(key) = &entry.key {
- if key
- .range()
- .contains(request.params.text_document_position.position)
- {
- return Some(key.text());
- }
- }
- }
- None
- }
+ .flat_map(|citation| citation.keys(&table))
+ .find(|key| key.range().contains(pos))
+ .map(latex::Token::text),
+ DocumentContent::Bibtex(tree) => tree
+ .children(tree.root)
+ .filter_map(|node| tree.as_entry(node))
+ .filter_map(|entry| entry.key.as_ref())
+ .find(|key| key.range().contains(pos))
+ .map(bibtex::Token::text),
}
}
}
@@ -78,120 +67,152 @@ impl BibtexEntryReferenceProvider {
#[cfg(test)]
mod tests {
use super::*;
- use crate::range::RangeExt;
- use lsp_types::{Position, Range};
-
- #[test]
- fn test_entry() {
- let references = test_feature(
- BibtexEntryReferenceProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.bib", "@article{foo, bar = {baz}}"),
- FeatureSpec::file("bar.tex", "\\addbibresource{foo.bib}\n\\cite{foo}"),
- FeatureSpec::file("baz.tex", "\\cite{foo}"),
- ],
- main_file: "foo.bib",
- position: Position::new(0, 9),
- include_declaration: false,
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- references,
- vec![Location::new(
- FeatureSpec::uri("bar.tex"),
- Range::new_simple(1, 6, 1, 9)
- )]
- );
+ use crate::{feature::FeatureTester, protocol::Range};
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn entry() {
+ let actual_refs = FeatureTester::new()
+ .file("foo.bib", r#"@article{foo, bar = {baz}}"#)
+ .file(
+ "bar.tex",
+ indoc!(
+ r#"
+ \addbibresource{foo.bib}
+ \cite{foo}
+ "#
+ ),
+ )
+ .file("baz.tex", r#"\cite{foo}"#)
+ .main("foo.bib")
+ .position(0, 9)
+ .test_reference(BibtexEntryReferenceProvider)
+ .await;
+
+ let expected_refs = vec![Location::new(
+ FeatureTester::uri("bar.tex").into(),
+ Range::new_simple(1, 6, 1, 9),
+ )];
+
+ assert_eq!(actual_refs, expected_refs);
}
- #[test]
- fn test_entry_include_declaration() {
- let references = test_feature(
- BibtexEntryReferenceProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.bib", "@article{foo, bar = {baz}}"),
- FeatureSpec::file("bar.tex", "\\addbibresource{foo.bib}\n\\cite{foo}"),
- FeatureSpec::file("baz.tex", "\\cite{foo}"),
- ],
- main_file: "foo.bib",
- position: Position::new(0, 9),
- include_declaration: true,
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- references,
- vec![
- Location::new(FeatureSpec::uri("foo.bib"), Range::new_simple(0, 9, 0, 12)),
- Location::new(FeatureSpec::uri("bar.tex"), Range::new_simple(1, 6, 1, 9)),
- ]
- );
+ #[tokio::test]
+ async fn entry_include_declaration() {
+ let actual_refs = FeatureTester::new()
+ .file("foo.bib", r#"@article{foo, bar = {baz}}"#)
+ .file(
+ "bar.tex",
+ indoc!(
+ r#"
+ \addbibresource{foo.bib}
+ \cite{foo}
+ "#
+ ),
+ )
+ .file("baz.tex", r#"\cite{foo}"#)
+ .main("foo.bib")
+ .position(0, 9)
+ .include_declaration()
+ .test_reference(BibtexEntryReferenceProvider)
+ .await;
+
+ let expected_refs = vec![
+ Location::new(
+ FeatureTester::uri("foo.bib").into(),
+ Range::new_simple(0, 9, 0, 12),
+ ),
+ Location::new(
+ FeatureTester::uri("bar.tex").into(),
+ Range::new_simple(1, 6, 1, 9),
+ ),
+ ];
+
+ assert_eq!(actual_refs, expected_refs);
}
- #[test]
- fn test_citation() {
- let references = test_feature(
- BibtexEntryReferenceProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.bib", "@article{foo, bar = {baz}}"),
- FeatureSpec::file("bar.tex", "\\addbibresource{foo.bib}\n\\cite{foo}"),
- FeatureSpec::file("baz.tex", "\\cite{foo}"),
- ],
- main_file: "bar.tex",
- position: Position::new(1, 8),
- include_declaration: false,
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- references,
- vec![Location::new(
- FeatureSpec::uri("bar.tex"),
- Range::new_simple(1, 6, 1, 9)
- )]
- );
+ #[tokio::test]
+ async fn citation() {
+ let actual_refs = FeatureTester::new()
+ .file("foo.bib", r#"@article{foo, bar = {baz}}"#)
+ .file(
+ "bar.tex",
+ indoc!(
+ r#"
+ \addbibresource{foo.bib}
+ \cite{foo}
+ "#
+ ),
+ )
+ .file("baz.tex", r#"\cite{foo}"#)
+ .main("bar.tex")
+ .position(1, 8)
+ .test_reference(BibtexEntryReferenceProvider)
+ .await;
+
+ let expected_refs = vec![Location::new(
+ FeatureTester::uri("bar.tex").into(),
+ Range::new_simple(1, 6, 1, 9),
+ )];
+
+ assert_eq!(actual_refs, expected_refs);
+ }
+
+ #[tokio::test]
+ async fn citation_include_declaration() {
+ let actual_refs = FeatureTester::new()
+ .file("foo.bib", r#"@article{foo, bar = {baz}}"#)
+ .file(
+ "bar.tex",
+ indoc!(
+ r#"
+ \addbibresource{foo.bib}
+ \cite{foo}
+ "#
+ ),
+ )
+ .file("baz.tex", r#"\cite{foo}"#)
+ .main("bar.tex")
+ .position(1, 8)
+ .include_declaration()
+ .test_reference(BibtexEntryReferenceProvider)
+ .await;
+
+ let expected_refs = vec![
+ Location::new(
+ FeatureTester::uri("bar.tex").into(),
+ Range::new_simple(1, 6, 1, 9),
+ ),
+ Location::new(
+ FeatureTester::uri("foo.bib").into(),
+ Range::new_simple(0, 9, 0, 12),
+ ),
+ ];
+
+ assert_eq!(actual_refs, expected_refs);
}
- #[test]
- fn test_citation_include_declaration() {
- let references = test_feature(
- BibtexEntryReferenceProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.bib", "@article{foo, bar = {baz}}"),
- FeatureSpec::file("bar.tex", "\\addbibresource{foo.bib}\n\\cite{foo}"),
- FeatureSpec::file("baz.tex", "\\cite{foo}"),
- ],
- main_file: "bar.tex",
- position: Position::new(1, 9),
- include_declaration: true,
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- references,
- vec![
- Location::new(FeatureSpec::uri("bar.tex"), Range::new_simple(1, 6, 1, 9)),
- Location::new(FeatureSpec::uri("foo.bib"), Range::new_simple(0, 9, 0, 12)),
- ]
- );
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_refs = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_reference(BibtexEntryReferenceProvider)
+ .await;
+
+ assert!(actual_refs.is_empty());
}
- #[test]
- fn test_empty() {
- let references = test_feature(
- BibtexEntryReferenceProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "")],
- main_file: "foo.tex",
- position: Position::new(0, 0),
- ..FeatureSpec::default()
- },
- );
- assert!(references.is_empty());
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_refs = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_reference(BibtexEntryReferenceProvider)
+ .await;
+
+ assert!(actual_refs.is_empty());
}
}
diff --git a/support/texlab/src/reference/bibtex_string.rs b/support/texlab/src/reference/bibtex_string.rs
index 58888dbf11..5f9804fbd6 100644
--- a/support/texlab/src/reference/bibtex_string.rs
+++ b/support/texlab/src/reference/bibtex_string.rs
@@ -1,235 +1,253 @@
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{Location, Position, ReferenceParams, Url};
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{Location, Position, RangeExt, ReferenceParams, Url},
+ syntax::{
+ bibtex::{self, Visitor},
+ SyntaxNode,
+ },
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
+use petgraph::graph::NodeIndex;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
pub struct BibtexStringReferenceProvider;
+#[async_trait]
impl FeatureProvider for BibtexStringReferenceProvider {
type Params = ReferenceParams;
type Output = Vec<Location>;
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<ReferenceParams>) -> Vec<Location> {
- let mut references = Vec::new();
- if let SyntaxTree::Bibtex(tree) = &request.document().tree {
- if let Some(name) =
- Self::find_name(tree, request.params.text_document_position.position)
- {
- let uri: Url = request.document().uri.clone().into();
- if request.params.context.include_declaration {
- for string in tree.strings() {
- if let Some(string_name) = &string.name {
- if string_name.text() == name.text() {
- references.push(Location::new(uri.clone(), string_name.range()));
- }
- }
- }
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ let mut refs = Vec::new();
+ if let DocumentContent::Bibtex(tree) = &req.current().content {
+ if let Some(name) = Self::find_name(tree, req.params.text_document_position.position) {
+ let uri: Url = req.current().uri.clone().into();
+ if req.params.context.include_declaration {
+ tree.children(tree.root)
+ .filter_map(|node| tree.as_string(node))
+ .filter_map(|string| string.name.as_ref())
+ .filter(|string| string.text() == name.text())
+ .for_each(|string| refs.push(Location::new(uri.clone(), string.range())));
}
let mut visitor = BibtexStringReferenceVisitor::default();
- visitor.visit_root(&tree.root);
+ visitor.visit(tree, tree.root);
visitor
- .references
+ .refs
.into_iter()
.filter(|reference| reference.text() == name.text())
- .map(|reference| Location::new(uri.clone(), reference.range()))
- .for_each(|reference| references.push(reference));
+ .for_each(|reference| refs.push(Location::new(uri.clone(), reference.range())));
}
}
- references
+ refs
}
}
impl BibtexStringReferenceProvider {
- fn find_name(tree: &BibtexSyntaxTree, position: Position) -> Option<&BibtexToken> {
- let mut nodes = tree.find(position);
+ fn find_name(tree: &bibtex::Tree, pos: Position) -> Option<&bibtex::Token> {
+ let mut nodes = tree.find(pos);
nodes.reverse();
- match (&nodes[0], nodes.get(1)) {
- (BibtexNode::Word(word), Some(BibtexNode::Field(_)))
- | (BibtexNode::Word(word), Some(BibtexNode::Concat(_))) => Some(&word.token),
- (BibtexNode::String(string), _) => string
+ let node0 = &tree.graph[nodes[0]];
+ let node1 = nodes.get(1).map(|node| &tree.graph[*node]);
+ match (node0, node1) {
+ (bibtex::Node::Word(word), Some(bibtex::Node::Field(_)))
+ | (bibtex::Node::Word(word), Some(bibtex::Node::Concat(_))) => Some(&word.token),
+ (bibtex::Node::String(string), _) => string
.name
.as_ref()
- .filter(|name| name.range().contains(position)),
+ .filter(|name| name.range().contains(pos)),
_ => None,
}
}
}
#[derive(Debug, Default)]
-struct BibtexStringReferenceVisitor<'a> {
- references: Vec<&'a BibtexToken>,
+pub struct BibtexStringReferenceVisitor<'a> {
+ refs: Vec<&'a bibtex::Token>,
}
-impl<'a> BibtexVisitor<'a> for BibtexStringReferenceVisitor<'a> {
- fn visit_root(&mut self, root: &'a BibtexRoot) {
- BibtexWalker::walk_root(self, root);
- }
-
- fn visit_comment(&mut self, _comment: &'a BibtexComment) {}
-
- fn visit_preamble(&mut self, preamble: &'a BibtexPreamble) {
- BibtexWalker::walk_preamble(self, preamble);
- }
-
- fn visit_string(&mut self, string: &'a BibtexString) {
- BibtexWalker::walk_string(self, string);
- }
-
- fn visit_entry(&mut self, entry: &'a BibtexEntry) {
- BibtexWalker::walk_entry(self, entry);
- }
-
- fn visit_field(&mut self, field: &'a BibtexField) {
- if let Some(BibtexContent::Word(word)) = &field.content {
- self.references.push(&word.token);
- }
-
- BibtexWalker::walk_field(self, field);
- }
-
- fn visit_word(&mut self, _word: &'a BibtexWord) {}
-
- fn visit_command(&mut self, _command: &'a BibtexCommand) {}
-
- fn visit_quoted_content(&mut self, content: &'a BibtexQuotedContent) {
- BibtexWalker::walk_quoted_content(self, content);
- }
-
- fn visit_braced_content(&mut self, content: &'a BibtexBracedContent) {
- BibtexWalker::walk_braced_content(self, content);
- }
-
- fn visit_concat(&mut self, concat: &'a BibtexConcat) {
- if let BibtexContent::Word(word) = &concat.left {
- self.references.push(&word.token);
- }
+impl<'a> bibtex::Visitor<'a> for BibtexStringReferenceVisitor<'a> {
+ fn visit(&mut self, tree: &'a bibtex::Tree, node: NodeIndex) {
+ match &tree.graph[node] {
+ bibtex::Node::Root(_)
+ | bibtex::Node::Comment(_)
+ | bibtex::Node::Preamble(_)
+ | bibtex::Node::String(_)
+ | bibtex::Node::Entry(_)
+ | bibtex::Node::Word(_)
+ | bibtex::Node::Command(_)
+ | bibtex::Node::QuotedContent(_)
+ | bibtex::Node::BracedContent(_) => (),
+ bibtex::Node::Field(_) => {
+ if let Some(word) = tree
+ .children(node)
+ .next()
+ .and_then(|content| tree.as_word(content))
+ {
+ self.refs.push(&word.token);
+ }
+ }
+ bibtex::Node::Concat(_) => {
+ let mut children = tree.children(node);
+ if let Some(word) = children.next().and_then(|left| tree.as_word(left)) {
+ self.refs.push(&word.token);
+ }
- if let Some(BibtexContent::Word(word)) = &concat.right {
- self.references.push(&word.token);
+ if let Some(word) = children.next().and_then(|right| tree.as_word(right)) {
+ self.refs.push(&word.token);
+ }
+ }
}
-
- BibtexWalker::walk_concat(self, concat);
+ tree.walk(self, node);
}
}
#[cfg(test)]
mod tests {
use super::*;
- use crate::range::RangeExt;
- use lsp_types::{Position, Range};
-
- #[test]
- fn test_definition() {
- let references = test_feature(
- BibtexStringReferenceProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.bib",
- "@string{foo = {Foo}}\n@string{bar = {Bar}}\n@article{baz, author = foo}",
- )],
- main_file: "foo.bib",
- position: Position::new(2, 24),
- include_declaration: false,
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- references,
- vec![Location::new(
- FeatureSpec::uri("foo.bib"),
- Range::new_simple(2, 23, 2, 26)
- )]
- );
+ use crate::{feature::FeatureTester, protocol::Range};
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn definition() {
+ let actual_refs = FeatureTester::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @string{foo = {Foo}}
+ @string{bar = {Bar}}
+ @article{baz, author = foo}
+ "#
+ ),
+ )
+ .main("main.bib")
+ .position(2, 24)
+ .test_reference(BibtexStringReferenceProvider)
+ .await;
+
+ let expected_refs = vec![Location::new(
+ FeatureTester::uri("main.bib").into(),
+ Range::new_simple(2, 23, 2, 26),
+ )];
+
+ assert_eq!(actual_refs, expected_refs);
}
- #[test]
- fn test_definition_include_declaration() {
- let references = test_feature(
- BibtexStringReferenceProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.bib",
- "@string{foo = {Foo}}\n@string{bar = {Bar}}\n@article{baz, author = foo}",
- )],
- main_file: "foo.bib",
- position: Position::new(2, 24),
- include_declaration: true,
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- references,
- vec![
- Location::new(FeatureSpec::uri("foo.bib"), Range::new_simple(0, 8, 0, 11)),
- Location::new(FeatureSpec::uri("foo.bib"), Range::new_simple(2, 23, 2, 26))
- ]
- );
+ #[tokio::test]
+ async fn definition_include_declaration() {
+ let actual_refs = FeatureTester::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @string{foo = {Foo}}
+ @string{bar = {Bar}}
+ @article{baz, author = foo}
+ "#
+ ),
+ )
+ .main("main.bib")
+ .position(2, 24)
+ .include_declaration()
+ .test_reference(BibtexStringReferenceProvider)
+ .await;
+
+ let expected_refs = vec![
+ Location::new(
+ FeatureTester::uri("main.bib").into(),
+ Range::new_simple(0, 8, 0, 11),
+ ),
+ Location::new(
+ FeatureTester::uri("main.bib").into(),
+ Range::new_simple(2, 23, 2, 26),
+ ),
+ ];
+
+ assert_eq!(actual_refs, expected_refs);
}
- #[test]
- fn test_reference() {
- let references = test_feature(
- BibtexStringReferenceProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.bib",
- "@string{foo = {Foo}}\n@string{bar = {Bar}}\n@article{baz, author = foo}",
- )],
- main_file: "foo.bib",
- position: Position::new(0, 10),
- include_declaration: false,
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- references,
- vec![Location::new(
- FeatureSpec::uri("foo.bib"),
- Range::new_simple(2, 23, 2, 26)
- )]
- );
+ #[tokio::test]
+ async fn reference() {
+ let actual_refs = FeatureTester::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @string{foo = {Foo}}
+ @string{bar = {Bar}}
+ @article{baz, author = foo}
+ "#
+ ),
+ )
+ .main("main.bib")
+ .position(0, 10)
+ .test_reference(BibtexStringReferenceProvider)
+ .await;
+
+ let expected_refs = vec![Location::new(
+ FeatureTester::uri("main.bib").into(),
+ Range::new_simple(2, 23, 2, 26),
+ )];
+
+ assert_eq!(actual_refs, expected_refs);
}
- #[test]
- fn test_reference_include_declaration() {
- let references = test_feature(
- BibtexStringReferenceProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.bib",
- "@string{foo = {Foo}}\n@string{bar = {Bar}}\n@article{baz, author = foo}",
- )],
- main_file: "foo.bib",
- position: Position::new(0, 10),
- include_declaration: true,
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- references,
- vec![
- Location::new(FeatureSpec::uri("foo.bib"), Range::new_simple(0, 8, 0, 11)),
- Location::new(FeatureSpec::uri("foo.bib"), Range::new_simple(2, 23, 2, 26))
- ]
- );
+ #[tokio::test]
+ async fn reference_include_declaration() {
+ let actual_refs = FeatureTester::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @string{foo = {Foo}}
+ @string{bar = {Bar}}
+ @article{baz, author = foo}
+ "#
+ ),
+ )
+ .main("main.bib")
+ .position(0, 10)
+ .include_declaration()
+ .test_reference(BibtexStringReferenceProvider)
+ .await;
+
+ let expected_refs = vec![
+ Location::new(
+ FeatureTester::uri("main.bib").into(),
+ Range::new_simple(0, 8, 0, 11),
+ ),
+ Location::new(
+ FeatureTester::uri("main.bib").into(),
+ Range::new_simple(2, 23, 2, 26),
+ ),
+ ];
+
+ assert_eq!(actual_refs, expected_refs);
}
- #[test]
- fn test_empty() {
- let references = test_feature(
- BibtexStringReferenceProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "")],
- main_file: "foo.bib",
- position: Position::new(0, 0),
- include_declaration: false,
- ..FeatureSpec::default()
- },
- );
- assert!(references.is_empty());
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_refs = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_reference(BibtexStringReferenceProvider)
+ .await;
+
+ assert!(actual_refs.is_empty());
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_refs = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_reference(BibtexStringReferenceProvider)
+ .await;
+
+ assert!(actual_refs.is_empty());
}
}
diff --git a/support/texlab/src/reference/latex_label.rs b/support/texlab/src/reference/latex_label.rs
index 424429b60e..16686f6015 100644
--- a/support/texlab/src/reference/latex_label.rs
+++ b/support/texlab/src/reference/latex_label.rs
@@ -1,59 +1,58 @@
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{Location, ReferenceParams};
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{Location, RangeExt, ReferenceParams},
+ syntax::{latex, LatexLabelKind, SyntaxNode},
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
-#[derive(Debug, PartialEq, Eq, Clone)]
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
pub struct LatexLabelReferenceProvider;
+#[async_trait]
impl FeatureProvider for LatexLabelReferenceProvider {
type Params = ReferenceParams;
type Output = Vec<Location>;
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<ReferenceParams>) -> Vec<Location> {
- let mut references = Vec::new();
- if let Some(definition) = Self::find_name(request) {
- for document in request.related_documents() {
- if let SyntaxTree::Latex(tree) = &document.tree {
- tree.structure
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ let mut refs = Vec::new();
+ if let Some(def) = Self::find_name(req) {
+ for doc in req.related() {
+ if let DocumentContent::Latex(table) = &doc.content {
+ table
.labels
.iter()
- .filter(|label| Self::is_included(request, label))
- .flat_map(LatexLabel::names)
- .filter(|label| label.text() == definition)
- .map(|label| Location::new(document.uri.clone().into(), label.range()))
- .for_each(|location| references.push(location))
+ .filter(|label| Self::is_included(req, label))
+ .flat_map(|label| label.names(&table))
+ .filter(|label| label.text() == def)
+ .map(|label| Location::new(doc.uri.clone().into(), label.range()))
+ .for_each(|location| refs.push(location));
}
}
}
- references
+ refs
}
}
impl LatexLabelReferenceProvider {
- fn find_name(request: &FeatureRequest<ReferenceParams>) -> Option<&str> {
- if let SyntaxTree::Latex(tree) = &request.document().tree {
- tree.structure
+ fn find_name(req: &FeatureRequest<ReferenceParams>) -> Option<&str> {
+ let pos = req.params.text_document_position.position;
+ if let DocumentContent::Latex(table) = &req.current().content {
+ table
.labels
.iter()
- .flat_map(LatexLabel::names)
- .find(|label| {
- label
- .range()
- .contains(request.params.text_document_position.position)
- })
- .map(LatexToken::text)
+ .flat_map(|label| label.names(&table))
+ .find(|label| label.range().contains(pos))
+ .map(latex::Token::text)
} else {
None
}
}
- fn is_included(request: &FeatureRequest<ReferenceParams>, label: &LatexLabel) -> bool {
+ fn is_included(req: &FeatureRequest<ReferenceParams>, label: &latex::Label) -> bool {
match label.kind {
LatexLabelKind::Reference(_) => true,
- LatexLabelKind::Definition => request.params.context.include_declaration,
+ LatexLabelKind::Definition => req.params.context.include_declaration,
}
}
}
@@ -61,120 +60,152 @@ impl LatexLabelReferenceProvider {
#[cfg(test)]
mod tests {
use super::*;
- use crate::range::RangeExt;
- use lsp_types::{Position, Range};
-
- #[test]
- fn test_definition() {
- let references = test_feature(
- LatexLabelReferenceProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\label{foo}"),
- FeatureSpec::file("bar.tex", "\\input{foo.tex}\n\\ref{foo}"),
- FeatureSpec::file("baz.tex", "\\ref{foo}"),
- ],
- main_file: "foo.tex",
- include_declaration: false,
- position: Position::new(0, 8),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- references,
- vec![Location::new(
- FeatureSpec::uri("bar.tex"),
- Range::new_simple(1, 5, 1, 8)
- )]
- );
+ use crate::{feature::FeatureTester, protocol::Range};
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn definition() {
+ let actual_refs = FeatureTester::new()
+ .file("foo.tex", r#"\label{foo}"#)
+ .file(
+ "bar.tex",
+ indoc!(
+ r#"
+ \input{foo.tex}
+ \ref{foo}
+ "#
+ ),
+ )
+ .file("baz.tex", r#"\ref{foo}"#)
+ .main("foo.tex")
+ .position(0, 8)
+ .test_reference(LatexLabelReferenceProvider)
+ .await;
+
+ let expected_refs = vec![Location::new(
+ FeatureTester::uri("bar.tex").into(),
+ Range::new_simple(1, 5, 1, 8),
+ )];
+
+ assert_eq!(actual_refs, expected_refs);
}
- #[test]
- fn test_definition_include_declaration() {
- let references = test_feature(
- LatexLabelReferenceProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\label{foo}"),
- FeatureSpec::file("bar.tex", "\\input{foo.tex}\n\\ref{foo}"),
- FeatureSpec::file("baz.tex", "\\ref{foo}"),
- ],
- main_file: "foo.tex",
- include_declaration: true,
- position: Position::new(0, 8),
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- references,
- vec![
- Location::new(FeatureSpec::uri("foo.tex"), Range::new_simple(0, 7, 0, 10)),
- Location::new(FeatureSpec::uri("bar.tex"), Range::new_simple(1, 5, 1, 8)),
- ]
- );
+ #[tokio::test]
+ async fn definition_include_declaration() {
+ let actual_refs = FeatureTester::new()
+ .file("foo.tex", r#"\label{foo}"#)
+ .file(
+ "bar.tex",
+ indoc!(
+ r#"
+ \input{foo.tex}
+ \ref{foo}
+ "#
+ ),
+ )
+ .file("baz.tex", r#"\ref{foo}"#)
+ .main("foo.tex")
+ .position(0, 8)
+ .include_declaration()
+ .test_reference(LatexLabelReferenceProvider)
+ .await;
+
+ let expected_refs = vec![
+ Location::new(
+ FeatureTester::uri("foo.tex").into(),
+ Range::new_simple(0, 7, 0, 10),
+ ),
+ Location::new(
+ FeatureTester::uri("bar.tex").into(),
+ Range::new_simple(1, 5, 1, 8),
+ ),
+ ];
+
+ assert_eq!(actual_refs, expected_refs);
}
- #[test]
- fn test_reference() {
- let references = test_feature(
- LatexLabelReferenceProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\label{foo}"),
- FeatureSpec::file("bar.tex", "\\input{foo.tex}\n\\ref{foo}"),
- FeatureSpec::file("baz.tex", "\\ref{foo}"),
- ],
- main_file: "bar.tex",
- position: Position::new(1, 7),
- include_declaration: false,
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- references,
- vec![Location::new(
- FeatureSpec::uri("bar.tex"),
- Range::new_simple(1, 5, 1, 8)
- ),]
- );
+ #[tokio::test]
+ async fn reference() {
+ let actual_refs = FeatureTester::new()
+ .file("foo.tex", r#"\label{foo}"#)
+ .file(
+ "bar.tex",
+ indoc!(
+ r#"
+ \input{foo.tex}
+ \ref{foo}
+ "#
+ ),
+ )
+ .file("baz.tex", r#"\ref{foo}"#)
+ .main("bar.tex")
+ .position(1, 7)
+ .test_reference(LatexLabelReferenceProvider)
+ .await;
+
+ let expected_refs = vec![Location::new(
+ FeatureTester::uri("bar.tex").into(),
+ Range::new_simple(1, 5, 1, 8),
+ )];
+
+ assert_eq!(actual_refs, expected_refs);
}
- #[test]
- fn test_reference_include_declaration() {
- let references = test_feature(
- LatexLabelReferenceProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\label{foo}"),
- FeatureSpec::file("bar.tex", "\\input{foo.tex}\n\\ref{foo}"),
- FeatureSpec::file("baz.tex", "\\ref{foo}"),
- ],
- main_file: "bar.tex",
- position: Position::new(1, 7),
- include_declaration: true,
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- references,
- vec![
- Location::new(FeatureSpec::uri("bar.tex"), Range::new_simple(1, 5, 1, 8)),
- Location::new(FeatureSpec::uri("foo.tex"), Range::new_simple(0, 7, 0, 10)),
- ]
- );
+ #[tokio::test]
+ async fn reference_include_declaration() {
+ let actual_refs = FeatureTester::new()
+ .file("foo.tex", r#"\label{foo}"#)
+ .file(
+ "bar.tex",
+ indoc!(
+ r#"
+ \input{foo.tex}
+ \ref{foo}
+ "#
+ ),
+ )
+ .file("baz.tex", r#"\ref{foo}"#)
+ .main("bar.tex")
+ .position(1, 7)
+ .include_declaration()
+ .test_reference(LatexLabelReferenceProvider)
+ .await;
+
+ let expected_refs = vec![
+ Location::new(
+ FeatureTester::uri("bar.tex").into(),
+ Range::new_simple(1, 5, 1, 8),
+ ),
+ Location::new(
+ FeatureTester::uri("foo.tex").into(),
+ Range::new_simple(0, 7, 0, 10),
+ ),
+ ];
+
+ assert_eq!(actual_refs, expected_refs);
+ }
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_refs = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .test_reference(LatexLabelReferenceProvider)
+ .await;
+
+ assert!(actual_refs.is_empty());
}
- #[test]
- fn test_bibtex() {
- let references = test_feature(
- LatexLabelReferenceProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "")],
- main_file: "foo.bib",
- position: Position::new(0, 0),
- ..FeatureSpec::default()
- },
- );
- assert!(references.is_empty());
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_refs = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .test_reference(LatexLabelReferenceProvider)
+ .await;
+
+ assert!(actual_refs.is_empty());
}
}
diff --git a/support/texlab/src/reference/mod.rs b/support/texlab/src/reference/mod.rs
index 120807a9f1..fc4379d394 100644
--- a/support/texlab/src/reference/mod.rs
+++ b/support/texlab/src/reference/mod.rs
@@ -2,12 +2,15 @@ mod bibtex_entry;
mod bibtex_string;
mod latex_label;
-use self::bibtex_entry::BibtexEntryReferenceProvider;
-use self::bibtex_string::BibtexStringReferenceProvider;
-use self::latex_label::LatexLabelReferenceProvider;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::{Location, ReferenceParams};
+use self::{
+ bibtex_entry::BibtexEntryReferenceProvider, bibtex_string::BibtexStringReferenceProvider,
+ latex_label::LatexLabelReferenceProvider,
+};
+use crate::{
+ feature::{ConcatProvider, FeatureProvider, FeatureRequest},
+ protocol::{Location, ReferenceParams},
+};
+use async_trait::async_trait;
pub struct ReferenceProvider {
provider: ConcatProvider<ReferenceParams, Location>,
@@ -31,12 +34,12 @@ impl Default for ReferenceProvider {
}
}
+#[async_trait]
impl FeatureProvider for ReferenceProvider {
type Params = ReferenceParams;
type Output = Vec<Location>;
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<ReferenceParams>) -> Vec<Location> {
- self.provider.execute(request).await
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ self.provider.execute(req).await
}
}
diff --git a/support/texlab/src/rename/bibtex_entry.rs b/support/texlab/src/rename/bibtex_entry.rs
index 46484c7f23..97eaa8fd9d 100644
--- a/support/texlab/src/rename/bibtex_entry.rs
+++ b/support/texlab/src/rename/bibtex_entry.rs
@@ -1,172 +1,192 @@
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{
+ Position, Range, RangeExt, RenameParams, TextDocumentPositionParams, TextEdit,
+ WorkspaceEdit,
+ },
+ syntax::{Span, SyntaxNode},
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
use std::collections::HashMap;
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
pub struct BibtexEntryPrepareRenameProvider;
+#[async_trait]
impl FeatureProvider for BibtexEntryPrepareRenameProvider {
type Params = TextDocumentPositionParams;
type Output = Option<Range>;
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<TextDocumentPositionParams>,
- ) -> Option<Range> {
- find_key(&request.document().tree, request.params.position).map(Span::range)
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ find_key(&req.current().content, req.params.position).map(Span::range)
}
}
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
pub struct BibtexEntryRenameProvider;
+#[async_trait]
impl FeatureProvider for BibtexEntryRenameProvider {
type Params = RenameParams;
type Output = Option<WorkspaceEdit>;
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<RenameParams>,
- ) -> Option<WorkspaceEdit> {
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
let key_name = find_key(
- &request.document().tree,
- request.params.text_document_position.position,
+ &req.current().content,
+ req.params.text_document_position.position,
)?;
let mut changes = HashMap::new();
- for document in request.related_documents() {
- let mut edits = Vec::new();
- match &document.tree {
- SyntaxTree::Latex(tree) => {
- tree.citations
- .iter()
- .flat_map(LatexCitation::keys)
- .filter(|citation| citation.text() == key_name.text)
- .map(|citation| {
- TextEdit::new(citation.range(), request.params.new_name.clone())
- })
- .for_each(|edit| edits.push(edit));
- }
- SyntaxTree::Bibtex(tree) => {
- for entry in tree.entries() {
- if let Some(key) = &entry.key {
- if key.text() == key_name.text {
- edits.push(TextEdit::new(
- key.range(),
- request.params.new_name.clone(),
- ));
- }
- }
- }
- }
+ for doc in req.related() {
+ let edits = match &doc.content {
+ DocumentContent::Latex(table) => table
+ .citations
+ .iter()
+ .flat_map(|citation| citation.keys(&table))
+ .filter(|citation| citation.text() == key_name.text)
+ .map(|citation| TextEdit::new(citation.range(), req.params.new_name.clone()))
+ .collect(),
+ DocumentContent::Bibtex(tree) => tree
+ .children(tree.root)
+ .filter_map(|node| tree.as_entry(node))
+ .filter_map(|entry| entry.key.as_ref())
+ .filter(|entry_key| entry_key.text() == key_name.text)
+ .map(|entry_key| TextEdit::new(entry_key.range(), req.params.new_name.clone()))
+ .collect(),
};
- changes.insert(document.uri.clone().into(), edits);
+ changes.insert(doc.uri.clone().into(), edits);
}
Some(WorkspaceEdit::new(changes))
}
}
-fn find_key(tree: &SyntaxTree, position: Position) -> Option<&Span> {
- match tree {
- SyntaxTree::Latex(tree) => {
- for citation in &tree.citations {
- let keys = citation.keys();
- for key in keys {
- if key.range().contains(position) {
- return Some(&key.span);
- }
- }
- }
- None
- }
- SyntaxTree::Bibtex(tree) => {
- for entry in tree.entries() {
- if let Some(key) = &entry.key {
- if key.range().contains(position) {
- return Some(&key.span);
- }
- }
- }
- None
- }
+fn find_key(content: &DocumentContent, pos: Position) -> Option<&Span> {
+ match content {
+ DocumentContent::Latex(table) => table
+ .citations
+ .iter()
+ .flat_map(|citation| citation.keys(&table))
+ .find(|key| key.range().contains(pos))
+ .map(|key| &key.span),
+ DocumentContent::Bibtex(tree) => tree
+ .children(tree.root)
+ .filter_map(|node| tree.as_entry(node))
+ .filter_map(|entry| entry.key.as_ref())
+ .find(|key| key.range().contains(pos))
+ .map(|key| &key.span),
}
}
#[cfg(test)]
mod tests {
use super::*;
- use lsp_types::Position;
-
- #[test]
- fn test_entry() {
- let edit = test_feature(
- BibtexEntryRenameProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.bib", "@article{foo, bar = baz}"),
- FeatureSpec::file("bar.tex", "\\addbibresource{foo.bib}\n\\cite{foo}"),
- ],
- main_file: "foo.bib",
- position: Position::new(0, 9),
- new_name: "qux",
- ..FeatureSpec::default()
- },
- );
- let mut changes = HashMap::new();
- changes.insert(
- FeatureSpec::uri("foo.bib"),
+ use crate::{feature::FeatureTester, protocol::RangeExt};
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn entry() {
+ let actual_edit = FeatureTester::new()
+ .file("main.bib", r#"@article{foo, bar = baz}"#)
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \addbibresource{main.bib}
+ \cite{foo}
+ "#
+ ),
+ )
+ .main("main.bib")
+ .position(0, 9)
+ .new_name("qux")
+ .test_rename(BibtexEntryRenameProvider)
+ .await
+ .unwrap();
+
+ let mut expected_changes = HashMap::new();
+ expected_changes.insert(
+ FeatureTester::uri("main.bib").into(),
vec![TextEdit::new(Range::new_simple(0, 9, 0, 12), "qux".into())],
);
- changes.insert(
- FeatureSpec::uri("bar.tex"),
+ expected_changes.insert(
+ FeatureTester::uri("main.tex").into(),
vec![TextEdit::new(Range::new_simple(1, 6, 1, 9), "qux".into())],
);
- assert_eq!(edit, Some(WorkspaceEdit::new(changes)));
+ let expected_edit = WorkspaceEdit::new(expected_changes);
+
+ assert_eq!(actual_edit, expected_edit);
}
- #[test]
- fn test_citation() {
- let edit = test_feature(
- BibtexEntryRenameProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.bib", "@article{foo, bar = baz}"),
- FeatureSpec::file("bar.tex", "\\addbibresource{foo.bib}\n\\cite{foo}"),
- ],
- main_file: "bar.tex",
- position: Position::new(1, 6),
- new_name: "qux",
- ..FeatureSpec::default()
- },
- );
- let mut changes = HashMap::new();
- changes.insert(
- FeatureSpec::uri("foo.bib"),
+ #[tokio::test]
+ async fn citation() {
+ let actual_edit = FeatureTester::new()
+ .file("main.bib", r#"@article{foo, bar = baz}"#)
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \addbibresource{main.bib}
+ \cite{foo}
+ "#
+ ),
+ )
+ .main("main.tex")
+ .position(1, 6)
+ .new_name("qux")
+ .test_rename(BibtexEntryRenameProvider)
+ .await
+ .unwrap();
+
+ let mut expected_changes = HashMap::new();
+ expected_changes.insert(
+ FeatureTester::uri("main.bib").into(),
vec![TextEdit::new(Range::new_simple(0, 9, 0, 12), "qux".into())],
);
- changes.insert(
- FeatureSpec::uri("bar.tex"),
+ expected_changes.insert(
+ FeatureTester::uri("main.tex").into(),
vec![TextEdit::new(Range::new_simple(1, 6, 1, 9), "qux".into())],
);
- assert_eq!(edit, Some(WorkspaceEdit::new(changes)));
+ let expected_edit = WorkspaceEdit::new(expected_changes);
+
+ assert_eq!(actual_edit, expected_edit);
}
- #[test]
- fn test_field_name() {
- let edit = test_feature(
- BibtexEntryRenameProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo, bar = baz}")],
- main_file: "foo.bib",
- position: Position::new(0, 14),
- new_name: "qux",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(edit, None);
+ #[tokio::test]
+ async fn field_name() {
+ let actual_edit = FeatureTester::new()
+ .file("main.bib", r#"@article{foo, bar = baz}"#)
+ .main("main.bib")
+ .position(0, 14)
+ .new_name("qux")
+ .test_rename(BibtexEntryRenameProvider)
+ .await;
+
+ assert_eq!(actual_edit, None);
+ }
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_edit = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .new_name("")
+ .test_rename(BibtexEntryRenameProvider)
+ .await;
+
+ assert_eq!(actual_edit, None);
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_edit = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .new_name("")
+ .test_rename(BibtexEntryRenameProvider)
+ .await;
+
+ assert_eq!(actual_edit, None);
}
}
diff --git a/support/texlab/src/rename/latex_cmd.rs b/support/texlab/src/rename/latex_cmd.rs
new file mode 100644
index 0000000000..4770c4c485
--- /dev/null
+++ b/support/texlab/src/rename/latex_cmd.rs
@@ -0,0 +1,128 @@
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{
+ Position, Range, RenameParams, TextDocumentPositionParams, TextEdit, WorkspaceEdit,
+ },
+ syntax::{latex, SyntaxNode},
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
+use std::collections::HashMap;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
+pub struct LatexCommandPrepareRenameProvider;
+
+#[async_trait]
+impl FeatureProvider for LatexCommandPrepareRenameProvider {
+ type Params = TextDocumentPositionParams;
+ type Output = Option<Range>;
+
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ let pos = req.params.position;
+ find_command(&req.current().content, pos).map(SyntaxNode::range)
+ }
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
+pub struct LatexCommandRenameProvider;
+
+#[async_trait]
+impl FeatureProvider for LatexCommandRenameProvider {
+ type Params = RenameParams;
+ type Output = Option<WorkspaceEdit>;
+
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ let pos = req.params.text_document_position.position;
+ let cmd_name = find_command(&req.current().content, pos)?.name.text();
+ let mut changes = HashMap::new();
+ for doc in req.related() {
+ if let DocumentContent::Latex(table) = &doc.content {
+ let edits = table
+ .commands
+ .iter()
+ .filter_map(|node| table.as_command(*node))
+ .filter(|cmd| cmd.name.text() == cmd_name)
+ .map(|cmd| {
+ TextEdit::new(cmd.name.range(), format!("\\{}", req.params.new_name))
+ })
+ .collect();
+ changes.insert(doc.uri.clone().into(), edits);
+ }
+ }
+ Some(WorkspaceEdit::new(changes))
+ }
+}
+
+fn find_command(content: &DocumentContent, pos: Position) -> Option<&latex::Command> {
+ if let DocumentContent::Latex(table) = &content {
+ table.as_command(table.find_command_by_short_name_range(pos)?)
+ } else {
+ None
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::{feature::FeatureTester, protocol::RangeExt};
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn command() {
+ let actual_edit = FeatureTester::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \include{bar.tex}
+ \baz
+ "#
+ ),
+ )
+ .file("bar.tex", r#"\baz"#)
+ .main("foo.tex")
+ .position(1, 2)
+ .new_name("qux")
+ .test_rename(LatexCommandRenameProvider)
+ .await
+ .unwrap();
+
+ let mut expected_changes = HashMap::new();
+ expected_changes.insert(
+ FeatureTester::uri("foo.tex").into(),
+ vec![TextEdit::new(Range::new_simple(1, 0, 1, 4), "\\qux".into())],
+ );
+ expected_changes.insert(
+ FeatureTester::uri("bar.tex").into(),
+ vec![TextEdit::new(Range::new_simple(0, 0, 0, 4), "\\qux".into())],
+ );
+
+ assert_eq!(actual_edit, WorkspaceEdit::new(expected_changes));
+ }
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_edit = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .new_name("")
+ .test_rename(LatexCommandRenameProvider)
+ .await;
+
+ assert_eq!(actual_edit, None);
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_edit = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .new_name("")
+ .test_rename(LatexCommandRenameProvider)
+ .await;
+
+ assert_eq!(actual_edit, None);
+ }
+}
diff --git a/support/texlab/src/rename/latex_command.rs b/support/texlab/src/rename/latex_command.rs
deleted file mode 100644
index 52bac7a8c9..0000000000
--- a/support/texlab/src/rename/latex_command.rs
+++ /dev/null
@@ -1,114 +0,0 @@
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
-use std::collections::HashMap;
-use std::sync::Arc;
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexCommandPrepareRenameProvider;
-
-impl FeatureProvider for LatexCommandPrepareRenameProvider {
- type Params = TextDocumentPositionParams;
- type Output = Option<Range>;
-
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<TextDocumentPositionParams>,
- ) -> Option<Range> {
- let position = request.params.position;
- find_command(&request.document().tree, position).map(|cmd| cmd.range())
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexCommandRenameProvider;
-
-impl FeatureProvider for LatexCommandRenameProvider {
- type Params = RenameParams;
- type Output = Option<WorkspaceEdit>;
-
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<RenameParams>,
- ) -> Option<WorkspaceEdit> {
- let command = find_command(
- &request.document().tree,
- request.params.text_document_position.position,
- )?;
- let mut changes = HashMap::new();
- for document in request.related_documents() {
- if let SyntaxTree::Latex(tree) = &document.tree {
- let edits: Vec<TextEdit> = tree
- .commands
- .iter()
- .filter(|cmd| cmd.name.text() == command.name.text())
- .map(|cmd| {
- TextEdit::new(cmd.name.range(), format!("\\{}", request.params.new_name))
- })
- .collect();
- changes.insert(document.uri.clone().into(), edits);
- }
- }
- Some(WorkspaceEdit::new(changes))
- }
-}
-
-fn find_command(tree: &SyntaxTree, position: Position) -> Option<Arc<LatexCommand>> {
- if let SyntaxTree::Latex(tree) = tree {
- tree.find_command_by_name(position)
- } else {
- None
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use crate::range::RangeExt;
- use lsp_types::{Position, Range};
-
- #[test]
- fn test() {
- let edit = test_feature(
- LatexCommandRenameProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\include{bar.tex}\n\\baz"),
- FeatureSpec::file("bar.tex", "\\baz"),
- ],
- main_file: "foo.tex",
- position: Position::new(1, 2),
- new_name: "qux",
- ..FeatureSpec::default()
- },
- );
- let mut changes = HashMap::new();
- changes.insert(
- FeatureSpec::uri("foo.tex"),
- vec![TextEdit::new(Range::new_simple(1, 0, 1, 4), "\\qux".into())],
- );
- changes.insert(
- FeatureSpec::uri("bar.tex"),
- vec![TextEdit::new(Range::new_simple(0, 0, 0, 4), "\\qux".into())],
- );
- assert_eq!(edit, Some(WorkspaceEdit::new(changes)));
- }
-
- #[test]
- fn test_bibtex() {
- let edit = test_feature(
- LatexCommandRenameProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@article{foo, bar = baz}")],
- main_file: "foo.bib",
- position: Position::new(0, 14),
- new_name: "qux",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(edit, None);
- }
-}
diff --git a/support/texlab/src/rename/latex_env.rs b/support/texlab/src/rename/latex_env.rs
new file mode 100644
index 0000000000..6e302ef8b6
--- /dev/null
+++ b/support/texlab/src/rename/latex_env.rs
@@ -0,0 +1,157 @@
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{
+ Position, Range, RangeExt, RenameParams, TextDocumentPositionParams, TextEdit,
+ WorkspaceEdit,
+ },
+ syntax::{latex, SyntaxNode},
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
+use std::collections::HashMap;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
+pub struct LatexEnvironmentPrepareRenameProvider;
+
+#[async_trait]
+impl FeatureProvider for LatexEnvironmentPrepareRenameProvider {
+ type Params = TextDocumentPositionParams;
+ type Output = Option<Range>;
+
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ let pos = req.params.position;
+ let (left_name, right_name) = find_environment(&req.current().content, pos)?;
+ let range = if left_name.range().contains(pos) {
+ left_name.range()
+ } else {
+ right_name.range()
+ };
+ Some(range)
+ }
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
+pub struct LatexEnvironmentRenameProvider;
+
+#[async_trait]
+impl FeatureProvider for LatexEnvironmentRenameProvider {
+ type Params = RenameParams;
+ type Output = Option<WorkspaceEdit>;
+
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ let (left_name, right_name) = find_environment(
+ &req.current().content,
+ req.params.text_document_position.position,
+ )?;
+ let edits = vec![
+ TextEdit::new(left_name.range(), req.params.new_name.clone()),
+ TextEdit::new(right_name.range(), req.params.new_name.clone()),
+ ];
+ let mut changes = HashMap::new();
+ changes.insert(req.current().uri.clone().into(), edits);
+ Some(WorkspaceEdit::new(changes))
+ }
+}
+
+fn find_environment(
+ content: &DocumentContent,
+ pos: Position,
+) -> Option<(&latex::Token, &latex::Token)> {
+ if let DocumentContent::Latex(table) = content {
+ for env in &table.environments {
+ if let Some(left_name) = env.left.name(&table) {
+ if let Some(right_name) = env.right.name(&table) {
+ if left_name.range().contains(pos) || right_name.range().contains(pos) {
+ return Some((left_name, right_name));
+ }
+ }
+ }
+ }
+ }
+ None
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::feature::FeatureTester;
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn environment() {
+ let actual_edit = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \begin{foo}
+ \end{bar}
+ "#
+ ),
+ )
+ .main("main.tex")
+ .position(0, 8)
+ .new_name("baz")
+ .test_rename(LatexEnvironmentRenameProvider)
+ .await
+ .unwrap();
+
+ let mut expected_changes = HashMap::new();
+ expected_changes.insert(
+ FeatureTester::uri("main.tex").into(),
+ vec![
+ TextEdit::new(Range::new_simple(0, 7, 0, 10), "baz".into()),
+ TextEdit::new(Range::new_simple(1, 5, 1, 8), "baz".into()),
+ ],
+ );
+
+ assert_eq!(actual_edit, WorkspaceEdit::new(expected_changes));
+ }
+
+ #[tokio::test]
+ async fn command() {
+ let actual_edit = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \begin{foo}
+ \end{bar}
+ "#
+ ),
+ )
+ .main("main.tex")
+ .position(0, 5)
+ .new_name("baz")
+ .test_rename(LatexEnvironmentRenameProvider)
+ .await;
+
+ assert_eq!(actual_edit, None);
+ }
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_edit = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .new_name("")
+ .test_rename(LatexEnvironmentRenameProvider)
+ .await;
+
+ assert_eq!(actual_edit, None);
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_edit = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .new_name("")
+ .test_rename(LatexEnvironmentRenameProvider)
+ .await;
+
+ assert_eq!(actual_edit, None);
+ }
+}
diff --git a/support/texlab/src/rename/latex_environment.rs b/support/texlab/src/rename/latex_environment.rs
deleted file mode 100644
index 28d6450356..0000000000
--- a/support/texlab/src/rename/latex_environment.rs
+++ /dev/null
@@ -1,137 +0,0 @@
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
-use std::collections::HashMap;
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexEnvironmentPrepareRenameProvider;
-
-impl FeatureProvider for LatexEnvironmentPrepareRenameProvider {
- type Params = TextDocumentPositionParams;
- type Output = Option<Range>;
-
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<TextDocumentPositionParams>,
- ) -> Option<Range> {
- let position = request.params.position;
- let environment = find_environment(&request.document().tree, position)?;
- let left_range = environment.left.name().unwrap().range();
- let right_range = environment.right.name().unwrap().range();
- if left_range.contains(position) {
- Some(left_range)
- } else {
- Some(right_range)
- }
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub struct LatexEnvironmentRenameProvider;
-
-impl FeatureProvider for LatexEnvironmentRenameProvider {
- type Params = RenameParams;
- type Output = Option<WorkspaceEdit>;
-
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<RenameParams>,
- ) -> Option<WorkspaceEdit> {
- let environment = find_environment(
- &request.document().tree,
- request.params.text_document_position.position,
- )?;
- let edits = vec![
- TextEdit::new(
- environment.left.name().unwrap().range(),
- request.params.new_name.clone(),
- ),
- TextEdit::new(
- environment.right.name().unwrap().range(),
- request.params.new_name.clone(),
- ),
- ];
- let mut changes = HashMap::new();
- changes.insert(request.document().uri.clone().into(), edits);
- Some(WorkspaceEdit::new(changes))
- }
-}
-
-fn find_environment(tree: &SyntaxTree, position: Position) -> Option<&LatexEnvironment> {
- if let SyntaxTree::Latex(tree) = &tree {
- for environment in &tree.env.environments {
- if let Some(left_name) = environment.left.name() {
- if let Some(right_name) = environment.right.name() {
- if left_name.range().contains(position) || right_name.range().contains(position)
- {
- return Some(environment);
- }
- }
- }
- }
- }
- None
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
- use lsp_types::{Position, Range};
-
- #[test]
- fn test_environment() {
- let edit = test_feature(
- LatexEnvironmentRenameProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\begin{foo}\n\\end{bar}")],
- main_file: "foo.tex",
- position: Position::new(0, 8),
- new_name: "baz",
- ..FeatureSpec::default()
- },
- );
- let mut changes = HashMap::new();
- changes.insert(
- FeatureSpec::uri("foo.tex"),
- vec![
- TextEdit::new(Range::new_simple(0, 7, 0, 10), "baz".into()),
- TextEdit::new(Range::new_simple(1, 5, 1, 8), "baz".into()),
- ],
- );
- assert_eq!(edit, Some(WorkspaceEdit::new(changes)));
- }
-
- #[test]
- fn test_command() {
- let edit = test_feature(
- LatexEnvironmentRenameProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\begin{foo}\n\\end{bar}")],
- main_file: "foo.tex",
- position: Position::new(0, 5),
- new_name: "baz",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(edit, None);
- }
-
- #[test]
- fn test_bibtex() {
- let edit = test_feature(
- LatexEnvironmentRenameProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "")],
- main_file: "foo.bib",
- position: Position::new(0, 0),
- new_name: "baz",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(edit, None);
- }
-}
diff --git a/support/texlab/src/rename/latex_label.rs b/support/texlab/src/rename/latex_label.rs
index 1cf5e3ea9d..27e0f9b224 100644
--- a/support/texlab/src/rename/latex_label.rs
+++ b/support/texlab/src/rename/latex_label.rs
@@ -1,67 +1,64 @@
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::{
+ Position, Range, RangeExt, RenameParams, TextDocumentPositionParams, TextEdit,
+ WorkspaceEdit,
+ },
+ syntax::{Span, SyntaxNode},
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
use std::collections::HashMap;
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
pub struct LatexLabelPrepareRenameProvider;
+#[async_trait]
impl FeatureProvider for LatexLabelPrepareRenameProvider {
type Params = TextDocumentPositionParams;
type Output = Option<Range>;
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<TextDocumentPositionParams>,
- ) -> Option<Range> {
- find_label(&request.document().tree, request.params.position).map(Span::range)
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ let pos = req.params.position;
+ find_label(&req.current().content, pos).map(Span::range)
}
}
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
pub struct LatexLabelRenameProvider;
+#[async_trait]
impl FeatureProvider for LatexLabelRenameProvider {
type Params = RenameParams;
type Output = Option<WorkspaceEdit>;
- #[boxed]
- async fn execute<'a>(
- &'a self,
- request: &'a FeatureRequest<RenameParams>,
- ) -> Option<WorkspaceEdit> {
- let name = find_label(
- &request.document().tree,
- request.params.text_document_position.position,
- )?;
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ let pos = req.params.text_document_position.position;
+ let name = find_label(&req.current().content, pos)?;
let mut changes = HashMap::new();
- for document in request.related_documents() {
- if let SyntaxTree::Latex(tree) = &document.tree {
- let edits = tree
- .structure
+ for doc in req.related() {
+ if let DocumentContent::Latex(table) = &doc.content {
+ let edits = table
.labels
.iter()
- .flat_map(LatexLabel::names)
+ .flat_map(|label| label.names(&table))
.filter(|label| label.text() == name.text)
- .map(|label| TextEdit::new(label.range(), request.params.new_name.clone()))
+ .map(|label| TextEdit::new(label.range(), req.params.new_name.clone()))
.collect();
- changes.insert(document.uri.clone().into(), edits);
+ changes.insert(doc.uri.clone().into(), edits);
}
}
Some(WorkspaceEdit::new(changes))
}
}
-fn find_label(tree: &SyntaxTree, position: Position) -> Option<&Span> {
- if let SyntaxTree::Latex(tree) = tree {
- tree.structure
+fn find_label(content: &DocumentContent, pos: Position) -> Option<&Span> {
+ if let DocumentContent::Latex(table) = content {
+ table
.labels
.iter()
- .flat_map(LatexLabel::names)
- .find(|label| label.range().contains(position))
+ .flat_map(|label| label.names(&table))
+ .find(|label| label.range().contains(pos))
.map(|label| &label.span)
} else {
None
@@ -71,63 +68,79 @@ fn find_label(tree: &SyntaxTree, position: Position) -> Option<&Span> {
#[cfg(test)]
mod tests {
use super::*;
- use lsp_types::{Position, Range};
-
- #[test]
- fn test_label() {
- let edit = test_feature(
- LatexLabelRenameProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\label{foo}\n\\include{bar}"),
- FeatureSpec::file("bar.tex", "\\ref{foo}"),
- FeatureSpec::file("baz.tex", "\\ref{foo}"),
- ],
- main_file: "foo.tex",
- position: Position::new(0, 7),
- new_name: "bar",
- ..FeatureSpec::default()
- },
- );
- let mut changes = HashMap::new();
- changes.insert(
- FeatureSpec::uri("foo.tex"),
+ use crate::feature::FeatureTester;
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn label() {
+ let actual_edit = FeatureTester::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \label{foo}
+ \include{bar}
+ "#
+ ),
+ )
+ .file("bar.tex", r#"\ref{foo}"#)
+ .file("baz.tex", r#"\ref{foo}"#)
+ .main("foo.tex")
+ .position(0, 7)
+ .new_name("bar")
+ .test_rename(LatexLabelRenameProvider)
+ .await
+ .unwrap();
+
+ let mut expected_changes = HashMap::new();
+ expected_changes.insert(
+ FeatureTester::uri("foo.tex").into(),
vec![TextEdit::new(Range::new_simple(0, 7, 0, 10), "bar".into())],
);
- changes.insert(
- FeatureSpec::uri("bar.tex"),
+ expected_changes.insert(
+ FeatureTester::uri("bar.tex").into(),
vec![TextEdit::new(Range::new_simple(0, 5, 0, 8), "bar".into())],
);
- assert_eq!(edit, Some(WorkspaceEdit::new(changes)));
+
+ assert_eq!(actual_edit, WorkspaceEdit::new(expected_changes));
}
- #[test]
- fn test_command_args() {
- let edit = test_feature(
- LatexLabelRenameProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.tex", "\\foo{bar}")],
- main_file: "foo.tex",
- position: Position::new(0, 5),
- new_name: "baz",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(edit, None);
+ #[tokio::test]
+ async fn command_args() {
+ let actual_edit = FeatureTester::new()
+ .file("main.tex", r#"\foo{bar}"#)
+ .main("main.tex")
+ .position(0, 5)
+ .new_name("baz")
+ .test_rename(LatexLabelRenameProvider)
+ .await;
+
+ assert_eq!(actual_edit, None);
}
- #[test]
- fn test_bibtex() {
- let edit = test_feature(
- LatexLabelRenameProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "")],
- main_file: "foo.bib",
- position: Position::new(0, 0),
- new_name: "baz",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(edit, None);
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_edit = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .position(0, 0)
+ .new_name("")
+ .test_rename(LatexLabelRenameProvider)
+ .await;
+
+ assert_eq!(actual_edit, None);
+ }
+
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_edit = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .position(0, 0)
+ .new_name("")
+ .test_rename(LatexLabelRenameProvider)
+ .await;
+
+ assert_eq!(actual_edit, None);
}
}
diff --git a/support/texlab/src/rename/mod.rs b/support/texlab/src/rename/mod.rs
index e8816d1e95..40bf8ce1e1 100644
--- a/support/texlab/src/rename/mod.rs
+++ b/support/texlab/src/rename/mod.rs
@@ -1,15 +1,19 @@
mod bibtex_entry;
-mod latex_command;
-mod latex_environment;
+mod latex_cmd;
+mod latex_env;
mod latex_label;
-use self::bibtex_entry::*;
-use self::latex_command::*;
-use self::latex_environment::*;
-use self::latex_label::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
+use self::{
+ bibtex_entry::{BibtexEntryPrepareRenameProvider, BibtexEntryRenameProvider},
+ latex_cmd::{LatexCommandPrepareRenameProvider, LatexCommandRenameProvider},
+ latex_env::{LatexEnvironmentPrepareRenameProvider, LatexEnvironmentRenameProvider},
+ latex_label::{LatexLabelPrepareRenameProvider, LatexLabelRenameProvider},
+};
+use crate::{
+ feature::{ChoiceProvider, FeatureProvider, FeatureRequest},
+ protocol::{Range, RenameParams, TextDocumentPositionParams, WorkspaceEdit},
+};
+use async_trait::async_trait;
pub struct PrepareRenameProvider {
provider: ChoiceProvider<TextDocumentPositionParams, Range>,
@@ -34,16 +38,16 @@ impl Default for PrepareRenameProvider {
}
}
+#[async_trait]
impl FeatureProvider for PrepareRenameProvider {
type Params = TextDocumentPositionParams;
type Output = Option<Range>;
- #[boxed]
async fn execute<'a>(
&'a self,
- request: &'a FeatureRequest<TextDocumentPositionParams>,
+ req: &'a FeatureRequest<TextDocumentPositionParams>,
) -> Option<Range> {
- self.provider.execute(request).await
+ self.provider.execute(req).await
}
}
@@ -70,11 +74,11 @@ impl Default for RenameProvider {
}
}
+#[async_trait]
impl FeatureProvider for RenameProvider {
type Params = RenameParams;
type Output = Option<WorkspaceEdit>;
- #[boxed]
async fn execute<'a>(
&'a self,
request: &'a FeatureRequest<RenameParams>,
diff --git a/support/texlab/src/server.rs b/support/texlab/src/server.rs
index 23bf973a3a..e22fe4f5c9 100644
--- a/support/texlab/src/server.rs
+++ b/support/texlab/src/server.rs
@@ -1,108 +1,112 @@
-use crate::action::{Action, ActionManager, LintReason};
-use crate::build::*;
-use crate::capabilities::ClientCapabilitiesExt;
+#[cfg(feature = "citation")]
use crate::citeproc::render_citation;
-use crate::client::LspClient;
-use crate::completion::{CompletionItemData, CompletionProvider, DATABASE};
-use crate::definition::{DefinitionProvider, DefinitionResponse};
-use crate::diagnostics::{DiagnosticsManager, LatexLintOptions};
-use crate::folding::FoldingProvider;
-use crate::formatting::bibtex::{self, BibtexFormattingOptions, BibtexFormattingParams};
-use crate::forward_search::{self, ForwardSearchOptions, ForwardSearchResult};
-use crate::highlight::HighlightProvider;
-use crate::hover::HoverProvider;
-use crate::link::LinkProvider;
-use crate::reference::ReferenceProvider;
-use crate::rename::{PrepareRenameProvider, RenameProvider};
-use crate::symbol::{self, SymbolProvider, SymbolResponse};
-use crate::syntax::*;
-use crate::workspace::*;
+
+use crate::{
+ build::BuildProvider,
+ completion::{CompletionItemData, CompletionProvider},
+ components::COMPONENT_DATABASE,
+ config::ConfigManager,
+ definition::DefinitionProvider,
+ diagnostics::DiagnosticsManager,
+ feature::{DocumentView, FeatureProvider, FeatureRequest},
+ folding::FoldingProvider,
+ forward_search,
+ highlight::HighlightProvider,
+ hover::HoverProvider,
+ link::LinkProvider,
+ protocol::*,
+ reference::ReferenceProvider,
+ rename::{PrepareRenameProvider, RenameProvider},
+ symbol::{document_symbols, workspace_symbols, SymbolProvider},
+ syntax::{bibtex, latexindent, CharStream, SyntaxNode},
+ tex::{Distribution, DistributionKind, KpsewhichError},
+ workspace::{DocumentContent, Workspace},
+};
+use async_trait::async_trait;
+use chashmap::CHashMap;
use futures::lock::Mutex;
-use futures_boxed::boxed;
-use jsonrpc::server::Middleware;
-use jsonrpc::server::Result;
+use jsonrpc::{server::Result, Middleware};
use jsonrpc_derive::{jsonrpc_method, jsonrpc_server};
-use log::*;
-use lsp_types::*;
+use log::{debug, error, info, warn};
use once_cell::sync::{Lazy, OnceCell};
-use serde::de::DeserializeOwned;
-use std::ffi::OsStr;
-use std::fs;
-use std::future::Future;
-use std::sync::Arc;
-use tex::Language;
-use walkdir::WalkDir;
+use std::{mem, path::PathBuf, sync::Arc};
pub struct LatexLspServer<C> {
- distribution: Arc<Box<dyn tex::Distribution>>,
- build_manager: BuildManager<C>,
+ distro: Arc<dyn Distribution>,
client: Arc<C>,
client_capabilities: OnceCell<Arc<ClientCapabilities>>,
- workspace_manager: WorkspaceManager,
+ current_dir: Arc<PathBuf>,
+ config_manager: OnceCell<ConfigManager<C>>,
action_manager: ActionManager,
- diagnostics_manager: Mutex<DiagnosticsManager>,
+ workspace: Workspace,
+ build_provider: BuildProvider<C>,
completion_provider: CompletionProvider,
definition_provider: DefinitionProvider,
folding_provider: FoldingProvider,
highlight_provider: HighlightProvider,
- symbol_provider: SymbolProvider,
- hover_provider: HoverProvider,
link_provider: LinkProvider,
reference_provider: ReferenceProvider,
prepare_rename_provider: PrepareRenameProvider,
rename_provider: RenameProvider,
+ symbol_provider: SymbolProvider,
+ hover_provider: HoverProvider,
+ diagnostics_manager: DiagnosticsManager,
+ last_position_by_uri: CHashMap<Uri, Position>,
}
#[jsonrpc_server]
impl<C: LspClient + Send + Sync + 'static> LatexLspServer<C> {
- pub fn new(distribution: Arc<Box<dyn tex::Distribution>>, client: Arc<C>) -> Self {
- LatexLspServer {
- distribution,
- build_manager: BuildManager::new(Arc::clone(&client)),
- client,
+ pub fn new(distro: Arc<dyn Distribution>, client: Arc<C>, current_dir: Arc<PathBuf>) -> Self {
+ let workspace = Workspace::new(distro.clone(), Arc::clone(&current_dir));
+ Self {
+ distro,
+ client: Arc::clone(&client),
client_capabilities: OnceCell::new(),
- workspace_manager: WorkspaceManager::default(),
+ current_dir,
+ config_manager: OnceCell::new(),
action_manager: ActionManager::default(),
- diagnostics_manager: Mutex::new(DiagnosticsManager::default()),
+ workspace,
+ build_provider: BuildProvider::new(client),
completion_provider: CompletionProvider::new(),
definition_provider: DefinitionProvider::new(),
folding_provider: FoldingProvider::new(),
highlight_provider: HighlightProvider::new(),
- symbol_provider: SymbolProvider::new(),
- hover_provider: HoverProvider::new(),
link_provider: LinkProvider::new(),
reference_provider: ReferenceProvider::new(),
prepare_rename_provider: PrepareRenameProvider::new(),
rename_provider: RenameProvider::new(),
+ symbol_provider: SymbolProvider::new(),
+ hover_provider: HoverProvider::new(),
+ diagnostics_manager: DiagnosticsManager::default(),
+ last_position_by_uri: CHashMap::new(),
}
}
- pub async fn execute<'a, T, A>(&'a self, action: A) -> T
- where
- A: FnOnce(&'a Self) -> T,
- {
- self.before_message().await;
- let result = action(&self);
- self.after_message().await;
- result
+ fn client_capabilities(&self) -> Arc<ClientCapabilities> {
+ Arc::clone(
+ self.client_capabilities
+ .get()
+ .expect("initialize has not been called"),
+ )
}
- pub async fn execute_async<'a, T, F, A>(&'a self, action: A) -> T
- where
- F: Future<Output = T>,
- A: FnOnce(&'a Self) -> F,
- {
- self.before_message().await;
- let result = action(&self).await;
- self.after_message().await;
- result
+ fn config_manager(&self) -> &ConfigManager<C> {
+ self.config_manager
+ .get()
+ .expect("initialize has not been called")
}
#[jsonrpc_method("initialize", kind = "request")]
pub async fn initialize(&self, params: InitializeParams) -> Result<InitializeResult> {
self.client_capabilities
.set(Arc::new(params.capabilities))
- .unwrap();
+ .expect("initialize was called two times");
+
+ let _ = self.config_manager.set(ConfigManager::new(
+ Arc::clone(&self.client),
+ self.client_capabilities(),
+ ));
+
let capabilities = ServerCapabilities {
text_document_sync: Some(TextDocumentSyncCapability::Options(
TextDocumentSyncOptions {
@@ -119,48 +123,49 @@ impl<C: LspClient + Send + Sync + 'static> LatexLspServer<C> {
completion_provider: Some(CompletionOptions {
resolve_provider: Some(true),
trigger_characters: Some(vec![
- "\\".to_owned(),
- "{".to_owned(),
- "}".to_owned(),
- "@".to_owned(),
- "/".to_owned(),
- " ".to_owned(),
+ "\\".into(),
+ "{".into(),
+ "}".into(),
+ "@".into(),
+ "/".into(),
+ " ".into(),
]),
+ ..CompletionOptions::default()
}),
- signature_help_provider: None,
definition_provider: Some(true),
- type_definition_provider: None,
- implementation_provider: None,
references_provider: Some(true),
document_highlight_provider: Some(true),
document_symbol_provider: Some(true),
workspace_symbol_provider: Some(true),
- code_action_provider: None,
- code_lens_provider: None,
document_formatting_provider: Some(true),
- document_range_formatting_provider: None,
- document_on_type_formatting_provider: None,
rename_provider: Some(RenameProviderCapability::Options(RenameOptions {
prepare_provider: Some(true),
+ work_done_progress_options: WorkDoneProgressOptions::default(),
})),
document_link_provider: Some(DocumentLinkOptions {
resolve_provider: Some(false),
+ work_done_progress_options: WorkDoneProgressOptions::default(),
}),
- color_provider: None,
folding_range_provider: Some(FoldingRangeProviderCapability::Simple(true)),
- execute_command_provider: None,
- workspace: None,
- selection_range_provider: None,
+ ..ServerCapabilities::default()
};
- Lazy::force(&DATABASE);
- Ok(InitializeResult { capabilities })
+ Lazy::force(&COMPONENT_DATABASE);
+ Ok(InitializeResult {
+ capabilities,
+ server_info: Some(ServerInfo {
+ name: "TexLab".to_owned(),
+ version: Some(env!("CARGO_PKG_VERSION").to_owned()),
+ }),
+ })
}
#[jsonrpc_method("initialized", kind = "notification")]
- pub fn initialized(&self, _params: InitializedParams) {
- self.action_manager.push(Action::CheckInstalledDistribution);
- self.action_manager.push(Action::PublishDiagnostics);
+ pub async fn initialized(&self, _params: InitializedParams) {
+ self.action_manager.push(Action::PullConfiguration).await;
+ self.action_manager.push(Action::RegisterCapabilities).await;
+ self.action_manager.push(Action::LoadDistribution).await;
+ self.action_manager.push(Action::PublishDiagnostics).await;
}
#[jsonrpc_method("shutdown", kind = "request")]
@@ -169,58 +174,88 @@ impl<C: LspClient + Send + Sync + 'static> LatexLspServer<C> {
}
#[jsonrpc_method("exit", kind = "notification")]
- pub fn exit(&self, _params: ()) {}
+ pub async fn exit(&self, _params: ()) {}
#[jsonrpc_method("$/cancelRequest", kind = "notification")]
- pub fn cancel_request(&self, _params: CancelParams) {}
+ pub async fn cancel_request(&self, _params: CancelParams) {}
#[jsonrpc_method("textDocument/didOpen", kind = "notification")]
- pub fn did_open(&self, params: DidOpenTextDocumentParams) {
+ pub async fn did_open(&self, params: DidOpenTextDocumentParams) {
let uri = params.text_document.uri.clone();
- self.workspace_manager.add(params.text_document);
- self.action_manager.push(Action::DetectRoot(uri.into()));
- self.action_manager.push(Action::PublishDiagnostics);
+ let options = self.config_manager().get().await;
+ self.workspace.add(params.text_document, &options).await;
+ self.action_manager
+ .push(Action::DetectRoot(uri.clone().into()))
+ .await;
+ self.action_manager
+ .push(Action::RunLinter(uri.into(), LintReason::Save))
+ .await;
+ self.action_manager.push(Action::PublishDiagnostics).await;
}
#[jsonrpc_method("textDocument/didChange", kind = "notification")]
- pub fn did_change(&self, params: DidChangeTextDocumentParams) {
+ pub async fn did_change(&self, params: DidChangeTextDocumentParams) {
+ let options = self.config_manager().get().await;
for change in params.content_changes {
let uri = params.text_document.uri.clone();
- self.workspace_manager.update(uri.into(), change.text);
+ self.workspace
+ .update(uri.into(), change.text, &options)
+ .await;
}
- self.action_manager.push(Action::RunLinter(
- params.text_document.uri.into(),
- LintReason::Change,
- ));
- self.action_manager.push(Action::PublishDiagnostics);
+ self.action_manager
+ .push(Action::RunLinter(
+ params.text_document.uri.clone().into(),
+ LintReason::Change,
+ ))
+ .await;
+ self.action_manager.push(Action::PublishDiagnostics).await;
}
#[jsonrpc_method("textDocument/didSave", kind = "notification")]
- pub fn did_save(&self, params: DidSaveTextDocumentParams) {
- self.action_manager.push(Action::RunLinter(
- params.text_document.uri.clone().into(),
- LintReason::Save,
- ));
- self.action_manager.push(Action::PublishDiagnostics);
+ pub async fn did_save(&self, params: DidSaveTextDocumentParams) {
+ self.action_manager
+ .push(Action::Build(params.text_document.uri.clone().into()))
+ .await;
+
self.action_manager
- .push(Action::Build(params.text_document.uri.into()));
+ .push(Action::RunLinter(
+ params.text_document.uri.into(),
+ LintReason::Save,
+ ))
+ .await;
+ self.action_manager.push(Action::PublishDiagnostics).await;
}
#[jsonrpc_method("textDocument/didClose", kind = "notification")]
- pub fn did_close(&self, _params: DidCloseTextDocumentParams) {}
+ pub async fn did_close(&self, _params: DidCloseTextDocumentParams) {}
+
+ #[jsonrpc_method("workspace/didChangeConfiguration", kind = "notification")]
+ pub async fn did_change_configuration(&self, params: DidChangeConfigurationParams) {
+ let config_manager = self.config_manager();
+ config_manager.push(params.settings).await;
+ let options = config_manager.get().await;
+ self.workspace.reparse(&options).await;
+ }
#[jsonrpc_method("window/workDoneProgress/cancel", kind = "notification")]
- pub fn work_done_progress_cancel(&self, params: WorkDoneProgressCancelParams) {
- self.action_manager.push(Action::CancelBuild(params.token));
+ pub async fn work_done_progress_cancel(&self, params: WorkDoneProgressCancelParams) {
+ self.build_provider.cancel(params.token).await;
}
#[jsonrpc_method("textDocument/completion", kind = "request")]
pub async fn completion(&self, params: CompletionParams) -> Result<CompletionList> {
- let request = self.make_feature_request(params.text_document_position.as_uri(), params)?;
- let items = self.completion_provider.execute(&request).await;
+ let req = self
+ .make_feature_request(params.text_document_position.text_document.as_uri(), params)
+ .await?;
+
+ self.last_position_by_uri.insert(
+ req.current().uri.clone(),
+ req.params.text_document_position.position,
+ );
+
Ok(CompletionList {
is_incomplete: true,
- items,
+ items: self.completion_provider.execute(&req).await,
})
}
@@ -229,14 +264,15 @@ impl<C: LspClient + Send + Sync + 'static> LatexLspServer<C> {
let data: CompletionItemData = serde_json::from_value(item.data.clone().unwrap()).unwrap();
match data {
CompletionItemData::Package | CompletionItemData::Class => {
- item.documentation = DATABASE
+ item.documentation = COMPONENT_DATABASE
.documentation(&item.label)
.map(Documentation::MarkupContent);
}
+ #[cfg(feature = "citation")]
CompletionItemData::Citation { uri, key } => {
- let workspace = self.workspace_manager.get();
- if let Some(document) = workspace.find(&uri) {
- if let SyntaxTree::Bibtex(tree) = &document.tree {
+ let snapshot = self.workspace.get().await;
+ if let Some(doc) = snapshot.find(&uri) {
+ if let DocumentContent::Bibtex(tree) = &doc.content {
let markup = render_citation(&tree, &key);
item.documentation = markup.map(Documentation::MarkupContent);
}
@@ -249,9 +285,14 @@ impl<C: LspClient + Send + Sync + 'static> LatexLspServer<C> {
#[jsonrpc_method("textDocument/hover", kind = "request")]
pub async fn hover(&self, params: TextDocumentPositionParams) -> Result<Option<Hover>> {
- let request = self.make_feature_request(params.text_document.as_uri(), params)?;
- let hover = self.hover_provider.execute(&request).await;
- Ok(hover)
+ let req = self
+ .make_feature_request(params.text_document.as_uri(), params)
+ .await?;
+
+ self.last_position_by_uri
+ .insert(req.current().uri.clone(), req.params.position);
+
+ Ok(self.hover_provider.execute(&req).await)
}
#[jsonrpc_method("textDocument/definition", kind = "request")]
@@ -259,9 +300,11 @@ impl<C: LspClient + Send + Sync + 'static> LatexLspServer<C> {
&self,
params: TextDocumentPositionParams,
) -> Result<DefinitionResponse> {
- let request = self.make_feature_request(params.text_document.as_uri(), params)?;
- let results = self.definition_provider.execute(&request).await;
- let response = if request.client_capabilities.has_definition_link_support() {
+ let req = self
+ .make_feature_request(params.text_document.as_uri(), params)
+ .await?;
+ let results = self.definition_provider.execute(&req).await;
+ let response = if req.client_capabilities.has_definition_link_support() {
DefinitionResponse::LocationLinks(results)
} else {
DefinitionResponse::Locations(
@@ -277,9 +320,10 @@ impl<C: LspClient + Send + Sync + 'static> LatexLspServer<C> {
#[jsonrpc_method("textDocument/references", kind = "request")]
pub async fn references(&self, params: ReferenceParams) -> Result<Vec<Location>> {
- let request = self.make_feature_request(params.text_document_position.as_uri(), params)?;
- let results = self.reference_provider.execute(&request).await;
- Ok(results)
+ let req = self
+ .make_feature_request(params.text_document_position.as_uri(), params)
+ .await?;
+ Ok(self.reference_provider.execute(&req).await)
}
#[jsonrpc_method("textDocument/documentHighlight", kind = "request")]
@@ -287,9 +331,10 @@ impl<C: LspClient + Send + Sync + 'static> LatexLspServer<C> {
&self,
params: TextDocumentPositionParams,
) -> Result<Vec<DocumentHighlight>> {
- let request = self.make_feature_request(params.text_document.as_uri(), params)?;
- let results = self.highlight_provider.execute(&request).await;
- Ok(results)
+ let req = self
+ .make_feature_request(params.text_document.as_uri(), params)
+ .await?;
+ Ok(self.highlight_provider.execute(&req).await)
}
#[jsonrpc_method("workspace/symbol", kind = "request")]
@@ -297,22 +342,38 @@ impl<C: LspClient + Send + Sync + 'static> LatexLspServer<C> {
&self,
params: WorkspaceSymbolParams,
) -> Result<Vec<SymbolInformation>> {
- let distribution = Arc::clone(&self.distribution);
- let client_capabilities = Arc::clone(&self.client_capabilities.get().unwrap());
- let workspace = self.workspace_manager.get();
- let symbols =
- symbol::workspace_symbols(distribution, client_capabilities, workspace, &params).await;
+ let distro = self.distro.clone();
+ let client_capabilities = self.client_capabilities();
+ let snapshot = self.workspace.get().await;
+ let options = self.config_manager().get().await;
+ let symbols = workspace_symbols(
+ distro,
+ client_capabilities,
+ snapshot,
+ &options,
+ Arc::clone(&self.current_dir),
+ &params,
+ )
+ .await;
Ok(symbols)
}
#[jsonrpc_method("textDocument/documentSymbol", kind = "request")]
- pub async fn document_symbol(&self, params: DocumentSymbolParams) -> Result<SymbolResponse> {
- let request = self.make_feature_request(params.text_document.as_uri(), params)?;
- let symbols = self.symbol_provider.execute(&request).await;
- let response = SymbolResponse::new(
- &self.client_capabilities.get().unwrap(),
- &request.view.workspace,
- &request.document().uri,
+ pub async fn document_symbol(
+ &self,
+ params: DocumentSymbolParams,
+ ) -> Result<DocumentSymbolResponse> {
+ let req = self
+ .make_feature_request(params.text_document.as_uri(), params)
+ .await?;
+
+ let symbols = self.symbol_provider.execute(&req).await;
+ let response = document_symbols(
+ &req.client_capabilities,
+ req.snapshot(),
+ &req.current().uri,
+ &req.options,
+ &req.current_dir,
symbols.into_iter().map(Into::into).collect(),
);
Ok(response)
@@ -320,69 +381,127 @@ impl<C: LspClient + Send + Sync + 'static> LatexLspServer<C> {
#[jsonrpc_method("textDocument/documentLink", kind = "request")]
pub async fn document_link(&self, params: DocumentLinkParams) -> Result<Vec<DocumentLink>> {
- let request = self.make_feature_request(params.text_document.as_uri(), params)?;
- let links = self.link_provider.execute(&request).await;
- Ok(links)
+ let req = self
+ .make_feature_request(params.text_document.as_uri(), params)
+ .await?;
+ Ok(self.link_provider.execute(&req).await)
}
#[jsonrpc_method("textDocument/formatting", kind = "request")]
pub async fn formatting(&self, params: DocumentFormattingParams) -> Result<Vec<TextEdit>> {
- let request = self.make_feature_request(params.text_document.as_uri(), params)?;
+ let req = self
+ .make_feature_request(params.text_document.as_uri(), params)
+ .await?;
let mut edits = Vec::new();
- if let SyntaxTree::Bibtex(tree) = &request.document().tree {
- let params = BibtexFormattingParams {
- tab_size: request.params.options.tab_size as usize,
- insert_spaces: request.params.options.insert_spaces,
- options: self
- .configuration::<BibtexFormattingOptions>("bibtex.formatting")
- .await,
- };
+ match &req.current().content {
+ DocumentContent::Latex(_) => {
+ Self::run_latexindent(&req.current().text, "tex", &mut edits).await;
+ }
+ DocumentContent::Bibtex(tree) => {
+ let options = req
+ .options
+ .bibtex
+ .clone()
+ .and_then(|opts| opts.formatting)
+ .unwrap_or_default();
+
+ match options.formatter.unwrap_or_default() {
+ BibtexFormatter::Texlab => {
+ let params = bibtex::FormattingParams {
+ tab_size: req.params.options.tab_size as usize,
+ insert_spaces: req.params.options.insert_spaces,
+ options: &options,
+ };
- for declaration in &tree.root.children {
- let should_format = match declaration {
- BibtexDeclaration::Comment(_) => false,
- BibtexDeclaration::Preamble(_) | BibtexDeclaration::String(_) => true,
- BibtexDeclaration::Entry(entry) => !entry.is_comment(),
- };
- if should_format {
- let text = bibtex::format_declaration(&declaration, &params);
- edits.push(TextEdit::new(declaration.range(), text));
+ for node in tree.children(tree.root) {
+ let should_format = match &tree.graph[node] {
+ bibtex::Node::Preamble(_) | bibtex::Node::String(_) => true,
+ bibtex::Node::Entry(entry) => !entry.is_comment(),
+ _ => false,
+ };
+ if should_format {
+ let text = bibtex::format(&tree, node, params);
+ edits.push(TextEdit::new(tree.graph[node].range(), text));
+ }
+ }
+ }
+ BibtexFormatter::Latexindent => {
+ Self::run_latexindent(&req.current().text, "bib", &mut edits).await;
+ }
}
}
}
Ok(edits)
}
+ async fn run_latexindent(old_text: &str, extension: &str, edits: &mut Vec<TextEdit>) {
+ match latexindent::format(old_text, extension).await {
+ Ok(new_text) => {
+ let mut stream = CharStream::new(&old_text);
+ while stream.next().is_some() {}
+ let range = Range::new(Position::new(0, 0), stream.current_position);
+ edits.push(TextEdit::new(range, new_text));
+ }
+ Err(why) => {
+ debug!("Failed to run latexindent.pl: {}", why);
+ }
+ }
+ }
+
#[jsonrpc_method("textDocument/prepareRename", kind = "request")]
pub async fn prepare_rename(
&self,
params: TextDocumentPositionParams,
) -> Result<Option<Range>> {
- let request = self.make_feature_request(params.as_uri(), params)?;
- let range = self.prepare_rename_provider.execute(&request).await;
- Ok(range)
+ let req = self
+ .make_feature_request(params.text_document.as_uri(), params)
+ .await?;
+ Ok(self.prepare_rename_provider.execute(&req).await)
}
#[jsonrpc_method("textDocument/rename", kind = "request")]
pub async fn rename(&self, params: RenameParams) -> Result<Option<WorkspaceEdit>> {
- let request = self.make_feature_request(params.text_document_position.as_uri(), params)?;
- let edit = self.rename_provider.execute(&request).await;
- Ok(edit)
+ let req = self
+ .make_feature_request(params.text_document_position.text_document.as_uri(), params)
+ .await?;
+ Ok(self.rename_provider.execute(&req).await)
}
#[jsonrpc_method("textDocument/foldingRange", kind = "request")]
pub async fn folding_range(&self, params: FoldingRangeParams) -> Result<Vec<FoldingRange>> {
- let request = self.make_feature_request(params.text_document.as_uri(), params)?;
- let foldings = self.folding_provider.execute(&request).await;
- Ok(foldings)
+ let req = self
+ .make_feature_request(params.text_document.as_uri(), params)
+ .await?;
+ Ok(self.folding_provider.execute(&req).await)
}
#[jsonrpc_method("textDocument/build", kind = "request")]
pub async fn build(&self, params: BuildParams) -> Result<BuildResult> {
- let request = self.make_feature_request(params.text_document.as_uri(), params)?;
- let options = self.configuration::<BuildOptions>("latex.build").await;
- let result = self.build_manager.build(request, options).await;
- Ok(result)
+ let req = self
+ .make_feature_request(params.text_document.as_uri(), params)
+ .await?;
+
+ let pos = self
+ .last_position_by_uri
+ .get(&req.current().uri)
+ .map(|pos| *pos)
+ .unwrap_or_default();
+
+ let res = self.build_provider.execute(&req).await;
+
+ if req
+ .options
+ .latex
+ .and_then(|opts| opts.build)
+ .unwrap_or_default()
+ .forward_search_after()
+ && !self.build_provider.is_building()
+ {
+ let params = TextDocumentPositionParams::new(req.params.text_document, pos);
+ self.forward_search(params).await?;
+ }
+
+ Ok(res)
}
#[jsonrpc_method("textDocument/forwardSearch", kind = "request")]
@@ -390,240 +509,234 @@ impl<C: LspClient + Send + Sync + 'static> LatexLspServer<C> {
&self,
params: TextDocumentPositionParams,
) -> Result<ForwardSearchResult> {
- let request = self.make_feature_request(params.text_document.as_uri(), params)?;
- let options = self
- .configuration::<ForwardSearchOptions>("latex.forwardSearch")
- .await;
-
- let tex_file = request.document().uri.to_file_path().unwrap();
- let parent = request
- .workspace()
- .find_parent(&request.document().uri)
- .unwrap_or(request.view.document);
- let parent = parent.uri.to_file_path().unwrap();
- forward_search::search(&tex_file, &parent, request.params.position.line, options)
- .await
- .ok_or_else(|| "Unable to execute forward search".into())
- }
-
- async fn configuration<T>(&self, section: &'static str) -> T
- where
- T: DeserializeOwned + Default,
- {
- if !self
- .client_capabilities
- .get()
- .and_then(|cap| cap.workspace.as_ref())
- .and_then(|cap| cap.configuration)
- .unwrap_or(false)
- {
- return T::default();
- }
-
- let params = ConfigurationParams {
- items: vec![ConfigurationItem {
- section: Some(section.into()),
- scope_uri: None,
- }],
- };
-
- match self.client.configuration(params).await {
- Ok(json) => match serde_json::from_value::<Vec<T>>(json) {
- Ok(config) => config.into_iter().next().unwrap(),
- Err(_) => {
- warn!("Invalid configuration: {}", section);
- T::default()
- }
- },
- Err(why) => {
- error!(
- "Retrieving configuration for {} failed: {}",
- section, why.message
- );
- T::default()
- }
- }
+ let req = self
+ .make_feature_request(params.text_document.as_uri(), params)
+ .await?;
+
+ forward_search::search(
+ &req.view.snapshot,
+ &req.current().uri,
+ req.params.position.line,
+ &req.options,
+ &self.current_dir,
+ )
+ .await
+ .ok_or_else(|| "Unable to execute forward search".into())
+ }
+
+ #[jsonrpc_method("$/detectRoot", kind = "request")]
+ pub async fn detect_root(&self, params: TextDocumentIdentifier) -> Result<()> {
+ let options = self.config_manager().get().await;
+ let _ = self.workspace.detect_root(&params.as_uri(), &options).await;
+ Ok(())
}
- fn make_feature_request<P>(&self, uri: Uri, params: P) -> Result<FeatureRequest<P>> {
- let workspace = self.workspace_manager.get();
- let client_capabilities = self
- .client_capabilities
- .get()
- .expect("Failed to retrieve client capabilities");
-
- if let Some(document) = workspace.find(&uri) {
- Ok(FeatureRequest {
+ async fn make_feature_request<P>(&self, uri: Uri, params: P) -> Result<FeatureRequest<P>> {
+ let options = self.pull_configuration().await;
+ let snapshot = self.workspace.get().await;
+ let client_capabilities = self.client_capabilities();
+ match snapshot.find(&uri) {
+ Some(current) => Ok(FeatureRequest {
params,
- view: DocumentView::new(workspace, document),
- client_capabilities: Arc::clone(&client_capabilities),
- distribution: Arc::clone(&self.distribution),
- })
- } else {
- let msg = format!("Unknown document: {}", uri);
- Err(msg)
- }
- }
-
- async fn detect_children(&self) {
- loop {
- let mut changed = false;
-
- let workspace = self.workspace_manager.get();
- for path in workspace.unresolved_includes() {
- if path.exists() {
- changed |= self.workspace_manager.load(&path).is_ok();
- }
- }
-
- if !changed {
- break;
+ view: DocumentView::analyze(snapshot, current, &options, &self.current_dir),
+ distro: self.distro.clone(),
+ client_capabilities,
+ options,
+ current_dir: Arc::clone(&self.current_dir),
+ }),
+ None => {
+ let msg = format!("Unknown document: {}", uri);
+ Err(msg)
}
}
}
- fn update_document(&self, document: &Document) -> std::result::Result<(), LoadError> {
- if document.uri.scheme() != "file" {
- return Ok(());
- }
-
- let path = document.uri.to_file_path().unwrap();
- let data = fs::metadata(&path).map_err(LoadError::IO)?;
- if data.modified().map_err(LoadError::IO)? > document.modified {
- self.workspace_manager.load(&path)
- } else {
- Ok(())
+ async fn pull_configuration(&self) -> Options {
+ let config_manager = self.config_manager();
+ let has_changed = config_manager.pull().await;
+ let options = config_manager.get().await;
+ if has_changed {
+ self.workspace.reparse(&options).await;
}
+ options
}
async fn update_build_diagnostics(&self) {
- let workspace = self.workspace_manager.get();
- let mut diagnostics_manager = self.diagnostics_manager.lock().await;
- for document in &workspace.documents {
- if document.uri.scheme() != "file" {
- continue;
- }
-
- if let SyntaxTree::Latex(tree) = &document.tree {
- if tree.env.is_standalone {
- match diagnostics_manager.build.update(&document.uri) {
- Ok(true) => self.action_manager.push(Action::PublishDiagnostics),
+ let snapshot = self.workspace.get().await;
+ let options = self.config_manager().get().await;
+
+ for doc in snapshot.0.iter().filter(|doc| doc.uri.scheme() == "file") {
+ if let DocumentContent::Latex(table) = &doc.content {
+ if table.is_standalone {
+ match self
+ .diagnostics_manager
+ .build
+ .update(&snapshot, &doc.uri, &options, &self.current_dir)
+ .await
+ {
+ Ok(true) => self.action_manager.push(Action::PublishDiagnostics).await,
Ok(false) => (),
- Err(why) => warn!(
- "Unable to read log file ({}): {}",
- why,
- document.uri.as_str()
- ),
+ Err(why) => {
+ warn!("Unable to read log file ({}): {}", why, doc.uri.as_str())
+ }
}
}
}
}
}
+
+ async fn load_distribution(&self) {
+ info!("Detected TeX distribution: {}", self.distro.kind());
+ if self.distro.kind() == DistributionKind::Unknown {
+ let params = ShowMessageParams {
+ message: "Your TeX distribution could not be detected. \
+ Please make sure that your distribution is in your PATH."
+ .into(),
+ typ: MessageType::Error,
+ };
+ self.client.show_message(params).await;
+ }
+
+ if let Err(why) = self.distro.load().await {
+ let message = match why {
+ KpsewhichError::NotInstalled | KpsewhichError::InvalidOutput => {
+ "An error occurred while executing `kpsewhich`.\
+ Please make sure that your distribution is in your PATH \
+ environment variable and provides the `kpsewhich` tool."
+ }
+ KpsewhichError::CorruptDatabase | KpsewhichError::NoDatabase => {
+ "The file database of your TeX distribution seems \
+ to be corrupt. Please rebuild it and try again."
+ }
+ KpsewhichError::Decode(_) => {
+ "An error occurred while decoding the output of `kpsewhich`."
+ }
+ KpsewhichError::IO(why) => {
+ error!("An I/O error occurred while executing 'kpsewhich': {}", why);
+ "An I/O error occurred while executing 'kpsewhich'"
+ }
+ };
+ let params = ShowMessageParams {
+ message: message.into(),
+ typ: MessageType::Error,
+ };
+ self.client.show_message(params).await;
+ };
+ }
}
+#[async_trait]
impl<C: LspClient + Send + Sync + 'static> Middleware for LatexLspServer<C> {
- #[boxed]
async fn before_message(&self) {
- self.detect_children().await;
-
- let workspace = self.workspace_manager.get();
- for document in &workspace.documents {
- drop(self.update_document(document));
+ if let Some(config_manager) = self.config_manager.get() {
+ let options = config_manager.get().await;
+ self.workspace.detect_children(&options).await;
+ self.workspace.reparse_all_if_newer(&options).await;
}
}
- #[boxed]
async fn after_message(&self) {
self.update_build_diagnostics().await;
- for action in self.action_manager.take() {
+ for action in self.action_manager.take().await {
match action {
- Action::CheckInstalledDistribution => {
- info!("Detected TeX distribution: {:?}", self.distribution.kind());
- if self.distribution.kind() == tex::DistributionKind::Unknown {
- let params = ShowMessageParams {
- message: "Your TeX distribution could not be detected. \
- Please make sure that your distribution is in your PATH."
- .into(),
- typ: MessageType::Error,
- };
- self.client.show_message(params).await;
- }
+ Action::LoadDistribution => {
+ self.load_distribution().await;
+ }
+ Action::RegisterCapabilities => {
+ let config_manager = self.config_manager();
+ config_manager.register().await;
+ }
+ Action::PullConfiguration => {
+ self.pull_configuration().await;
}
Action::DetectRoot(uri) => {
- if uri.scheme() == "file" {
- let mut path = uri.to_file_path().unwrap();
- while path.pop() {
- let workspace = self.workspace_manager.get();
- if workspace.find_parent(&uri).is_some() {
- break;
- }
-
- for entry in WalkDir::new(&path)
- .min_depth(1)
- .max_depth(1)
- .into_iter()
- .filter_map(std::result::Result::ok)
- .filter(|entry| entry.file_type().is_file())
- .filter(|entry| {
- entry
- .path()
- .extension()
- .and_then(OsStr::to_str)
- .and_then(Language::by_extension)
- .is_some()
- })
- {
- if let Ok(parent_uri) = Uri::from_file_path(entry.path()) {
- if workspace.find(&parent_uri).is_none() {
- drop(self.workspace_manager.load(entry.path()));
- }
- }
- }
- }
- }
+ let options = self.config_manager().get().await;
+ let _ = self.workspace.detect_root(&uri, &options).await;
}
Action::PublishDiagnostics => {
- let workspace = self.workspace_manager.get();
- for document in &workspace.documents {
- let diagnostics = {
- let manager = self.diagnostics_manager.lock().await;
- manager.get(&document)
- };
-
+ let snapshot = self.workspace.get().await;
+ for doc in &snapshot.0 {
+ let diagnostics = self.diagnostics_manager.get(doc).await;
let params = PublishDiagnosticsParams {
- uri: document.uri.clone().into(),
+ uri: doc.uri.clone().into(),
diagnostics,
+ version: None,
};
self.client.publish_diagnostics(params).await;
}
}
+ Action::Build(uri) => {
+ let options = self
+ .config_manager()
+ .get()
+ .await
+ .latex
+ .and_then(|opts| opts.build)
+ .unwrap_or_default();
+
+ if options.on_save() {
+ let text_document = TextDocumentIdentifier::new(uri.into());
+ self.build(BuildParams { text_document }).await.unwrap();
+ }
+ }
Action::RunLinter(uri, reason) => {
- let config: LatexLintOptions = self.configuration("latex.lint").await;
+ let options = self
+ .config_manager()
+ .get()
+ .await
+ .latex
+ .and_then(|opts| opts.lint)
+ .unwrap_or_default();
+
let should_lint = match reason {
- LintReason::Change => config.on_change(),
- LintReason::Save => config.on_save(),
+ LintReason::Change => options.on_change(),
+ LintReason::Save => options.on_save() || options.on_change(),
};
+
if should_lint {
- let workspace = self.workspace_manager.get();
- if let Some(document) = workspace.find(&uri) {
- if let SyntaxTree::Latex(_) = &document.tree {
- let mut diagnostics_manager = self.diagnostics_manager.lock().await;
- diagnostics_manager.latex.update(&uri, &document.text);
+ let snapshot = self.workspace.get().await;
+ if let Some(doc) = snapshot.find(&uri) {
+ if let DocumentContent::Latex(_) = &doc.content {
+ self.diagnostics_manager.latex.update(&uri, &doc.text).await;
}
}
}
}
- Action::Build(uri) => {
- let config: BuildOptions = self.configuration("latex.build").await;
- if config.on_save() {
- let text_document = TextDocumentIdentifier::new(uri.into());
- self.build(BuildParams { text_document }).await.unwrap();
- }
- }
- Action::CancelBuild(token) => {
- self.build_manager.cancel(token).await;
- }
}
}
}
}
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+enum LintReason {
+ Change,
+ Save,
+}
+
+#[derive(Debug, PartialEq, Clone)]
+enum Action {
+ LoadDistribution,
+ RegisterCapabilities,
+ PullConfiguration,
+ DetectRoot(Uri),
+ PublishDiagnostics,
+ Build(Uri),
+ RunLinter(Uri, LintReason),
+}
+
+#[derive(Debug, Default)]
+struct ActionManager {
+ actions: Mutex<Vec<Action>>,
+}
+
+impl ActionManager {
+ pub async fn push(&self, action: Action) {
+ let mut actions = self.actions.lock().await;
+ actions.push(action);
+ }
+
+ pub async fn take(&self) -> Vec<Action> {
+ let mut actions = self.actions.lock().await;
+ mem::replace(&mut *actions, Vec::new())
+ }
+}
diff --git a/support/texlab/src/symbol/bibtex_entry.rs b/support/texlab/src/symbol/bibtex_entry.rs
index f19c2fb734..f719937e80 100644
--- a/support/texlab/src/symbol/bibtex_entry.rs
+++ b/support/texlab/src/symbol/bibtex_entry.rs
@@ -1,42 +1,47 @@
-use super::{LatexSymbol, LatexSymbolKind};
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
+use super::types::{LatexSymbol, LatexSymbolKind};
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::DocumentSymbolParams,
+ syntax::{bibtex, BibtexEntryTypeCategory, SyntaxNode, LANGUAGE_DATA},
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
+use petgraph::graph::NodeIndex;
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
pub struct BibtexEntrySymbolProvider;
+#[async_trait]
impl FeatureProvider for BibtexEntrySymbolProvider {
type Params = DocumentSymbolParams;
type Output = Vec<LatexSymbol>;
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
let mut symbols = Vec::new();
- if let SyntaxTree::Bibtex(tree) = &request.document().tree {
- for entry in tree
- .entries()
- .iter()
- .filter(|entry| !entry.is_comment())
- .filter(|entry| entry.key.is_some())
- {
- let category = LANGUAGE_DATA
- .find_entry_type(&entry.ty.text()[1..])
- .map(|ty| ty.category)
- .unwrap_or(BibtexEntryTypeCategory::Misc);
+ if let DocumentContent::Bibtex(tree) = &req.current().content {
+ for entry_node in tree.children(tree.root) {
+ if let Some(entry) = tree
+ .as_entry(entry_node)
+ .filter(|entry| !entry.is_comment())
+ .filter(|entry| entry.key.is_some())
+ {
+ let category = LANGUAGE_DATA
+ .find_entry_type(&entry.ty.text()[1..])
+ .map(|ty| ty.category)
+ .unwrap_or(BibtexEntryTypeCategory::Misc);
- let key = entry.key.as_ref().unwrap();
- let symbol = LatexSymbol {
- name: key.text().to_owned(),
- label: None,
- kind: LatexSymbolKind::Entry(category),
- deprecated: false,
- full_range: entry.range(),
- selection_range: key.range(),
- children: Self::field_symbols(&entry),
- };
- symbols.push(symbol);
+ let key = entry.key.as_ref().unwrap();
+ let symbol = LatexSymbol {
+ name: key.text().to_owned(),
+ label: None,
+ kind: LatexSymbolKind::Entry(category),
+ deprecated: false,
+ full_range: entry.range(),
+ selection_range: key.range(),
+ children: Self::field_symbols(tree, entry_node),
+ };
+ symbols.push(symbol);
+ }
}
}
symbols
@@ -44,9 +49,12 @@ impl FeatureProvider for BibtexEntrySymbolProvider {
}
impl BibtexEntrySymbolProvider {
- fn field_symbols(entry: &BibtexEntry) -> Vec<LatexSymbol> {
+ fn field_symbols(tree: &bibtex::Tree, entry_node: NodeIndex) -> Vec<LatexSymbol> {
let mut symbols = Vec::new();
- for field in &entry.fields {
+ for field in tree
+ .children(entry_node)
+ .filter_map(|node| tree.as_field(node))
+ {
let symbol = LatexSymbol {
name: field.name.text().to_owned(),
label: None,
@@ -65,83 +73,81 @@ impl BibtexEntrySymbolProvider {
#[cfg(test)]
mod tests {
use super::*;
- use crate::range::RangeExt;
+ use crate::{
+ feature::FeatureTester,
+ protocol::{Range, RangeExt},
+ };
- #[test]
- fn test_entry() {
- let symbols = test_feature(
- BibtexEntrySymbolProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.bib",
- "@article{key, foo = bar, baz = qux}",
- )],
- main_file: "foo.bib",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- symbols,
- vec![LatexSymbol {
- name: "key".into(),
- label: None,
- kind: LatexSymbolKind::Entry(BibtexEntryTypeCategory::Article),
- deprecated: false,
- full_range: Range::new_simple(0, 0, 0, 35),
- selection_range: Range::new_simple(0, 9, 0, 12),
- children: vec![
- LatexSymbol {
- name: "foo".into(),
- label: None,
- kind: LatexSymbolKind::Field,
- deprecated: false,
- full_range: Range::new_simple(0, 14, 0, 24),
- selection_range: Range::new_simple(0, 14, 0, 17),
- children: Vec::new(),
- },
- LatexSymbol {
- name: "baz".into(),
- label: None,
- kind: LatexSymbolKind::Field,
- deprecated: false,
- full_range: Range::new_simple(0, 25, 0, 34),
- selection_range: Range::new_simple(0, 25, 0, 28),
- children: Vec::new(),
- },
- ],
- }]
- );
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_symbols = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .test_symbol(BibtexEntrySymbolProvider)
+ .await;
+
+ assert!(actual_symbols.is_empty());
}
- #[test]
- fn test_comment() {
- let symbols = test_feature(
- BibtexEntrySymbolProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.bib",
- "@comment{key, foo = bar, baz = qux}",
- )],
- main_file: "foo.bib",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(symbols, Vec::new());
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_symbols = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .test_symbol(BibtexEntrySymbolProvider)
+ .await;
+
+ assert!(actual_symbols.is_empty());
+ }
+
+ #[tokio::test]
+ async fn entry() {
+ let actual_symbols = FeatureTester::new()
+ .file("main.bib", r#"@article{key, foo = bar, baz = qux}"#)
+ .main("main.bib")
+ .test_symbol(BibtexEntrySymbolProvider)
+ .await;
+
+ let expected_symbols = vec![LatexSymbol {
+ name: "key".into(),
+ label: None,
+ kind: LatexSymbolKind::Entry(BibtexEntryTypeCategory::Article),
+ deprecated: false,
+ full_range: Range::new_simple(0, 0, 0, 35),
+ selection_range: Range::new_simple(0, 9, 0, 12),
+ children: vec![
+ LatexSymbol {
+ name: "foo".into(),
+ label: None,
+ kind: LatexSymbolKind::Field,
+ deprecated: false,
+ full_range: Range::new_simple(0, 14, 0, 24),
+ selection_range: Range::new_simple(0, 14, 0, 17),
+ children: Vec::new(),
+ },
+ LatexSymbol {
+ name: "baz".into(),
+ label: None,
+ kind: LatexSymbolKind::Field,
+ deprecated: false,
+ full_range: Range::new_simple(0, 25, 0, 34),
+ selection_range: Range::new_simple(0, 25, 0, 28),
+ children: Vec::new(),
+ },
+ ],
+ }];
+
+ assert_eq!(actual_symbols, expected_symbols);
}
- #[test]
- fn test_latex() {
- let symbols = test_feature(
- BibtexEntrySymbolProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.tex",
- "@article{key, foo = bar, baz = qux}",
- )],
- main_file: "foo.tex",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(symbols, Vec::new());
+ #[tokio::test]
+ async fn comment() {
+ let actual_symbols = FeatureTester::new()
+ .file("main.bib", r#"@comment{key, foo = bar, baz = qux}"#)
+ .main("main.bib")
+ .test_symbol(BibtexEntrySymbolProvider)
+ .await;
+
+ assert!(actual_symbols.is_empty());
}
}
diff --git a/support/texlab/src/symbol/bibtex_string.rs b/support/texlab/src/symbol/bibtex_string.rs
index 8f1f436048..d2283f640b 100644
--- a/support/texlab/src/symbol/bibtex_string.rs
+++ b/support/texlab/src/symbol/bibtex_string.rs
@@ -1,25 +1,28 @@
-use super::{LatexSymbol, LatexSymbolKind};
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
+use super::types::{LatexSymbol, LatexSymbolKind};
+use crate::{
+ feature::{FeatureProvider, FeatureRequest},
+ protocol::DocumentSymbolParams,
+ syntax::SyntaxNode,
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
pub struct BibtexStringSymbolProvider;
+#[async_trait]
impl FeatureProvider for BibtexStringSymbolProvider {
type Params = DocumentSymbolParams;
type Output = Vec<LatexSymbol>;
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
let mut symbols = Vec::new();
- if let SyntaxTree::Bibtex(tree) = &request.document().tree {
- for child in &tree.root.children {
- if let BibtexDeclaration::String(string) = &child {
+ if let DocumentContent::Bibtex(tree) = &req.current().content {
+ for string_node in tree.children(tree.root) {
+ if let Some(string) = &tree.as_string(string_node) {
if let Some(name) = &string.name {
symbols.push(LatexSymbol {
- name: name.text().to_owned(),
+ name: name.text().into(),
label: None,
kind: LatexSymbolKind::String,
deprecated: false,
@@ -38,42 +41,62 @@ impl FeatureProvider for BibtexStringSymbolProvider {
#[cfg(test)]
mod tests {
use super::*;
- use crate::range::RangeExt;
+ use crate::{
+ feature::FeatureTester,
+ protocol::{Range, RangeExt},
+ };
- #[test]
- fn test_valid() {
- let symbols = test_feature(
- BibtexStringSymbolProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@string{key = \"value\"}")],
- main_file: "foo.bib",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- symbols,
- vec![LatexSymbol {
- name: "key".into(),
- label: None,
- kind: LatexSymbolKind::String,
- deprecated: false,
- full_range: Range::new_simple(0, 0, 0, 22),
- selection_range: Range::new_simple(0, 8, 0, 11),
- children: Vec::new(),
- }]
- );
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_symbols = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .test_symbol(BibtexStringSymbolProvider)
+ .await;
+
+ assert!(actual_symbols.is_empty());
}
- #[test]
- fn test_invalid() {
- let symbols = test_feature(
- BibtexStringSymbolProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file("foo.bib", "@string{}")],
- main_file: "foo.bib",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(symbols, Vec::new());
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_symbols = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .test_symbol(BibtexStringSymbolProvider)
+ .await;
+
+ assert!(actual_symbols.is_empty());
+ }
+
+ #[tokio::test]
+ async fn valid() {
+ let actual_symbols = FeatureTester::new()
+ .file("main.bib", r#"@string{key = "value"}"#)
+ .main("main.bib")
+ .test_symbol(BibtexStringSymbolProvider)
+ .await;
+
+ let expected_symbols = vec![LatexSymbol {
+ name: "key".into(),
+ label: None,
+ kind: LatexSymbolKind::String,
+ deprecated: false,
+ full_range: Range::new_simple(0, 0, 0, 22),
+ selection_range: Range::new_simple(0, 8, 0, 11),
+ children: Vec::new(),
+ }];
+
+ assert_eq!(actual_symbols, expected_symbols);
+ }
+
+ #[tokio::test]
+ async fn invalid() {
+ let actual_symbols = FeatureTester::new()
+ .file("main.bib", r#"@string{}"#)
+ .main("main.bib")
+ .test_symbol(BibtexStringSymbolProvider)
+ .await;
+
+ assert!(actual_symbols.is_empty());
}
}
diff --git a/support/texlab/src/symbol/latex_section/enumeration.rs b/support/texlab/src/symbol/latex_section/enumeration.rs
index 34f4dff72f..e96a856eac 100644
--- a/support/texlab/src/symbol/latex_section/enumeration.rs
+++ b/support/texlab/src/symbol/latex_section/enumeration.rs
@@ -1,59 +1,58 @@
use super::{label_name, selection_range};
-use crate::range::RangeExt;
-use crate::symbol::{LatexSymbol, LatexSymbolKind};
-use crate::syntax::*;
-use crate::workspace::*;
-use lsp_types::Range;
+use crate::{
+ feature::DocumentView,
+ outline::OutlineContext,
+ protocol::{Range, RangeExt},
+ symbol::types::{LatexSymbol, LatexSymbolKind},
+ syntax::{latex, SyntaxNode},
+};
+use titlecase::titlecase;
-pub fn symbols(view: &DocumentView, tree: &LatexSyntaxTree) -> Vec<LatexSymbol> {
- let mut symbols = Vec::new();
- for environment in &tree.env.environments {
- if environment.left.is_enum() {
- symbols.push(make_symbol(view, tree, environment));
- }
- }
- symbols
+pub fn symbols(view: &DocumentView, table: &latex::SymbolTable) -> Vec<LatexSymbol> {
+ table
+ .environments
+ .iter()
+ .filter(|env| env.left.is_enum(&table))
+ .map(|enumeration| make_symbol(view, table, *enumeration))
+ .collect()
}
fn make_symbol(
view: &DocumentView,
- tree: &LatexSyntaxTree,
- enumeration: &LatexEnvironment,
+ table: &latex::SymbolTable,
+ enumeration: latex::Environment,
) -> LatexSymbol {
- let name = titlelize(enumeration.left.name().unwrap().text());
+ let name = titlecase(enumeration.left.name(&table).unwrap().text());
- let items: Vec<_> = tree
- .structure
+ let items: Vec<_> = table
.items
.iter()
- .filter(|item| tree.is_enumeration_item(enumeration, item))
+ .filter(|item| table.is_enum_item(enumeration, **item))
.collect();
let mut children = Vec::new();
for i in 0..items.len() {
- let start = items[i].start();
+ let start = table[items[i].parent].start();
let end = items
.get(i + 1)
- .map(|item| item.start())
- .unwrap_or_else(|| enumeration.right.start());
+ .map(|item| table[item.parent].start())
+ .unwrap_or_else(|| table[enumeration.right.parent].start());
let range = Range::new(start, end);
- let label = find_item_label(tree, range);
+ let label = find_item_label(table, range);
- let number = items[i].name().or_else(|| {
- label
- .as_ref()
- .and_then(|label| OutlineContext::find_number(view, label))
- });
+ let number = items[i]
+ .name(&table)
+ .or_else(|| label.and_then(|label| OutlineContext::find_number(view, table, *label)));
let name = number.unwrap_or_else(|| "Item".into());
children.push(LatexSymbol {
name,
- label: label_name(label),
+ label: label_name(table, label),
kind: LatexSymbolKind::EnumerationItem,
deprecated: false,
full_range: range,
- selection_range: selection_range(items[i].range(), label),
+ selection_range: selection_range(table, table[items[i].parent].range(), label),
children: Vec::new(),
});
}
@@ -63,23 +62,18 @@ fn make_symbol(
label: None,
kind: LatexSymbolKind::Enumeration,
deprecated: false,
- full_range: enumeration.range(),
- selection_range: enumeration.range(),
+ full_range: enumeration.range(&table),
+ selection_range: enumeration.range(&table),
children,
}
}
-fn find_item_label(tree: &LatexSyntaxTree, item_range: Range) -> Option<&LatexLabel> {
- let label = tree.find_label_by_range(item_range)?;
- if tree
- .env
- .environments
- .iter()
- .filter(|env| item_range.contains(env.start()))
- .all(|env| !env.range().contains(label.start()))
- {
- Some(label)
- } else {
- None
- }
+fn find_item_label(table: &latex::SymbolTable, item_range: Range) -> Option<&latex::Label> {
+ table.find_label_by_range(item_range).filter(|label| {
+ table
+ .environments
+ .iter()
+ .filter(|env| item_range.contains(env.range(&table).start))
+ .all(|env| !env.range(&table).contains(table[label.parent].start()))
+ })
}
diff --git a/support/texlab/src/symbol/latex_section/equation.rs b/support/texlab/src/symbol/latex_section/equation.rs
index 4c2fcbe295..2889aefd4d 100644
--- a/support/texlab/src/symbol/latex_section/equation.rs
+++ b/support/texlab/src/symbol/latex_section/equation.rs
@@ -1,41 +1,41 @@
use super::{label_name, selection_range};
-use crate::symbol::{LatexSymbol, LatexSymbolKind};
-use crate::syntax::*;
-use crate::workspace::*;
-use lsp_types::Range;
+use crate::{
+ feature::DocumentView,
+ outline::OutlineContext,
+ protocol::Range,
+ symbol::types::{LatexSymbol, LatexSymbolKind},
+ syntax::latex,
+};
-pub fn symbols(view: &DocumentView, tree: &LatexSyntaxTree) -> Vec<LatexSymbol> {
+pub fn symbols(view: &DocumentView, table: &latex::SymbolTable) -> Vec<LatexSymbol> {
let mut symbols = Vec::new();
- for equation in &tree.math.equations {
- symbols.push(make_symbol(view, tree, equation.range()));
+ for equation in &table.equations {
+ symbols.push(make_symbol(view, table, equation.range(&table)));
}
- for equation in &tree.env.environments {
- if equation.left.is_math() {
- symbols.push(make_symbol(view, tree, equation.range()));
+ for equation in &table.environments {
+ if equation.left.is_math(&table) {
+ symbols.push(make_symbol(view, table, equation.range(&table)));
}
}
symbols
}
-fn make_symbol(view: &DocumentView, tree: &LatexSyntaxTree, full_range: Range) -> LatexSymbol {
- let label = tree.find_label_by_range(full_range);
+fn make_symbol(view: &DocumentView, table: &latex::SymbolTable, full_range: Range) -> LatexSymbol {
+ let label = table.find_label_by_range(full_range);
- let name = match label
- .as_ref()
- .and_then(|label| OutlineContext::find_number(view, label))
- {
+ let name = match label.and_then(|label| OutlineContext::find_number(view, table, *label)) {
Some(num) => format!("Equation ({})", num),
None => "Equation".to_owned(),
};
LatexSymbol {
name,
- label: label_name(label),
+ label: label_name(table, label),
kind: LatexSymbolKind::Equation,
deprecated: false,
full_range,
- selection_range: selection_range(full_range, label),
+ selection_range: selection_range(table, full_range, label),
children: Vec::new(),
}
}
diff --git a/support/texlab/src/symbol/latex_section/float.rs b/support/texlab/src/symbol/latex_section/float.rs
index 9356d0ed3e..7ade3602cf 100644
--- a/support/texlab/src/symbol/latex_section/float.rs
+++ b/support/texlab/src/symbol/latex_section/float.rs
@@ -1,38 +1,40 @@
use super::{label_name, selection_range};
-use crate::symbol::{LatexSymbol, LatexSymbolKind};
-use crate::syntax::*;
-use crate::workspace::*;
+use crate::{
+ feature::DocumentView,
+ outline::{OutlineCaptionKind, OutlineContext},
+ symbol::types::{LatexSymbol, LatexSymbolKind},
+ syntax::{latex, SyntaxNode},
+};
-pub fn symbols(view: &DocumentView, tree: &LatexSyntaxTree) -> Vec<LatexSymbol> {
- tree.structure
+pub fn symbols(view: &DocumentView, table: &latex::SymbolTable) -> Vec<LatexSymbol> {
+ table
.captions
.iter()
- .filter_map(|caption| make_symbol(view, tree, caption))
+ .filter_map(|caption| make_symbol(view, table, *caption))
.collect()
}
fn make_symbol(
view: &DocumentView,
- tree: &LatexSyntaxTree,
- caption: &LatexCaption,
+ table: &latex::SymbolTable,
+ caption: latex::Caption,
) -> Option<LatexSymbol> {
- let environment = tree
- .env
+ let env = table
.environments
.iter()
- .find(|env| tree.is_direct_child(env, caption.start()))?;
- let text = extract_group(&caption.command.args[caption.index]);
+ .find(|env| table.is_direct_child(**env, table[caption.parent].start()))?;
- let kind = environment
+ let text =
+ table.print_group_content(caption.parent, latex::GroupKind::Group, caption.arg_index)?;
+
+ let kind = env
.left
- .name()
- .map(LatexToken::text)
+ .name(&table)
+ .map(latex::Token::text)
.and_then(OutlineCaptionKind::parse)?;
- let label = tree.find_label_by_environment(environment);
- let number = label
- .as_ref()
- .and_then(|label| OutlineContext::find_number(view, label));
+ let label = table.find_label_by_environment(*env);
+ let number = label.and_then(|label| OutlineContext::find_number(view, table, *label));
let name = match &number {
Some(number) => format!("{} {}: {}", kind.as_str(), number, text),
@@ -41,7 +43,7 @@ fn make_symbol(
let symbol = LatexSymbol {
name,
- label: label_name(label),
+ label: label_name(table, label),
kind: match kind {
OutlineCaptionKind::Figure => LatexSymbolKind::Figure,
OutlineCaptionKind::Table => LatexSymbolKind::Table,
@@ -49,8 +51,8 @@ fn make_symbol(
OutlineCaptionKind::Algorithm => LatexSymbolKind::Algorithm,
},
deprecated: false,
- full_range: environment.range(),
- selection_range: selection_range(environment.range(), label),
+ full_range: env.range(&table),
+ selection_range: selection_range(table, env.range(&table), label),
children: Vec::new(),
};
Some(symbol)
diff --git a/support/texlab/src/symbol/latex_section/mod.rs b/support/texlab/src/symbol/latex_section/mod.rs
index f6fe2aede9..fc81695b50 100644
--- a/support/texlab/src/symbol/latex_section/mod.rs
+++ b/support/texlab/src/symbol/latex_section/mod.rs
@@ -3,38 +3,57 @@ mod equation;
mod float;
mod theorem;
-use super::{LatexSymbol, LatexSymbolKind};
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+use super::types::{LatexSymbol, LatexSymbolKind};
+use crate::{
+ feature::{DocumentView, FeatureProvider, FeatureRequest},
+ outline::{Outline, OutlineContext, OutlineContextItem},
+ protocol::{DocumentSymbolParams, Options, Position, Range, RangeExt},
+ syntax::{latex, CharStream, LatexLabelKind, SyntaxNode},
+ workspace::DocumentContent,
+};
+use async_trait::async_trait;
+use std::path::Path;
+
+fn label_name(table: &latex::SymbolTable, label: Option<&latex::Label>) -> Option<String> {
+ label.map(|label| label.names(&table)[0].text().to_owned())
+}
+
+fn selection_range(
+ table: &latex::SymbolTable,
+ full_range: Range,
+ label: Option<&latex::Label>,
+) -> Range {
+ label
+ .map(|label| table[label.parent].range())
+ .unwrap_or(full_range)
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Default)]
pub struct LatexSectionSymbolProvider;
+#[async_trait]
impl FeatureProvider for LatexSectionSymbolProvider {
type Params = DocumentSymbolParams;
type Output = Vec<LatexSymbol>;
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
let mut symbols = Vec::new();
- if let SyntaxTree::Latex(tree) = &request.document().tree {
- let mut section_tree = build_section_tree(&request.view, tree);
- for symbol in enumeration::symbols(&request.view, tree) {
+ if let DocumentContent::Latex(table) = &req.current().content {
+ let mut section_tree =
+ build_section_tree(&req.view, table, &req.options, &req.current_dir);
+ for symbol in enumeration::symbols(&req.view, table) {
section_tree.insert_symbol(&symbol);
}
- for symbol in equation::symbols(&request.view, tree) {
+ for symbol in equation::symbols(&req.view, table) {
section_tree.insert_symbol(&symbol);
}
- for symbol in float::symbols(&request.view, tree) {
+ for symbol in float::symbols(&req.view, table) {
section_tree.insert_symbol(&symbol);
}
- for symbol in theorem::symbols(&request.view, tree) {
+ for symbol in theorem::symbols(&req.view, table) {
section_tree.insert_symbol(&symbol);
}
@@ -52,33 +71,36 @@ impl FeatureProvider for LatexSectionSymbolProvider {
pub fn build_section_tree<'a>(
view: &'a DocumentView,
- tree: &'a LatexSyntaxTree,
+ table: &'a latex::SymbolTable,
+ options: &'a Options,
+ current_dir: &'a Path,
) -> LatexSectionTree<'a> {
- let mut section_tree = LatexSectionTree::from(tree);
- section_tree.set_full_text(&view.document.text);
- let end_position = compute_end_position(tree, &view.document.text);
- LatexSectionNode::set_full_range(&mut section_tree.children, end_position);
- let outline = Outline::from(view);
+ let mut section_tree = LatexSectionTree::from(table);
+ section_tree.set_full_text(&view.current.text);
+ let end_position = compute_end_position(table, &view.current.text);
+ LatexSectionNode::set_full_range(&mut section_tree.children, table, end_position);
+ let outline = Outline::analyze(view, options, current_dir);
for child in &mut section_tree.children {
- child.set_label(tree, view, &outline);
+ child.set_label(view, &outline);
}
section_tree
}
-fn compute_end_position(tree: &LatexSyntaxTree, text: &str) -> Position {
+fn compute_end_position(table: &latex::SymbolTable, text: &str) -> Position {
let mut stream = CharStream::new(text);
while stream.next().is_some() {}
- tree.env
+ table
.environments
.iter()
- .find(|env| env.left.name().map(LatexToken::text) == Some("document"))
- .map(|env| env.right.start())
+ .find(|env| env.left.name(&table).map(latex::Token::text) == Some("document"))
+ .map(|env| table[env.right.parent].start())
.unwrap_or(stream.current_position)
}
-#[derive(Debug, PartialEq, Eq, Clone)]
+#[derive(Debug, Clone)]
pub struct LatexSectionNode<'a> {
- pub section: &'a LatexSection,
+ pub table: &'a latex::SymbolTable,
+ pub section: &'a latex::Section,
pub full_range: Range,
full_text: &'a str,
label: Option<String>,
@@ -88,8 +110,9 @@ pub struct LatexSectionNode<'a> {
}
impl<'a> LatexSectionNode<'a> {
- fn new(section: &'a LatexSection) -> Self {
+ fn new(table: &'a latex::SymbolTable, section: &'a latex::Section) -> Self {
Self {
+ table,
section,
full_range: Range::default(),
full_text: "",
@@ -108,37 +131,45 @@ impl<'a> LatexSectionNode<'a> {
}
fn name(&self) -> String {
- self.section
- .extract_text(self.full_text)
- .unwrap_or_else(|| "Unknown".to_owned())
+ self.table
+ .print_group_content(
+ self.section.parent,
+ latex::GroupKind::Group,
+ self.section.arg_index,
+ )
+ .unwrap_or_else(|| "Unknown".into())
}
- fn set_full_range(children: &mut Vec<Self>, end_position: Position) {
+ fn set_full_range(
+ children: &mut Vec<Self>,
+ table: &latex::SymbolTable,
+ end_position: Position,
+ ) {
for i in 0..children.len() {
let current_end = children
.get(i + 1)
- .map(|next| next.section.start())
+ .map(|next| table[next.section.parent].start())
.unwrap_or(end_position);
let mut current = &mut children[i];
- current.full_range = Range::new(current.section.start(), current_end);
- Self::set_full_range(&mut current.children, current_end);
+ current.full_range = Range::new(table[current.section.parent].start(), current_end);
+ Self::set_full_range(&mut current.children, table, current_end);
}
}
- fn set_label(&mut self, tree: &LatexSyntaxTree, view: &DocumentView, outline: &Outline) {
- if let Some(label) = tree
- .structure
+ fn set_label(&mut self, view: &DocumentView, outline: &Outline) {
+ if let Some(label) = self
+ .table
.labels
.iter()
.filter(|label| label.kind == LatexLabelKind::Definition)
- .find(|label| self.full_range.contains(label.start()))
+ .find(|label| self.full_range.contains(self.table[label.parent].start()))
{
- if let Some(ctx) = OutlineContext::parse(view, label, outline) {
+ if let Some(ctx) = OutlineContext::parse(view, outline, *label) {
let mut is_section = false;
if let OutlineContextItem::Section { text, .. } = &ctx.item {
if self.name() == *text {
- for name in label.names() {
+ for name in label.names(&self.table) {
self.label = Some(name.text().to_owned());
}
@@ -153,21 +184,25 @@ impl<'a> LatexSectionNode<'a> {
}
for child in &mut self.children {
- child.set_label(tree, view, outline);
+ child.set_label(view, outline);
}
}
- fn insert_section(nodes: &mut Vec<Self>, section: &'a LatexSection) {
+ fn insert_section(
+ nodes: &mut Vec<Self>,
+ table: &'a latex::SymbolTable,
+ section: &'a latex::Section,
+ ) {
match nodes.last_mut() {
Some(parent) => {
if parent.section.level < section.level {
- Self::insert_section(&mut parent.children, section);
+ Self::insert_section(&mut parent.children, table, section);
} else {
- nodes.push(LatexSectionNode::new(section));
+ nodes.push(LatexSectionNode::new(table, section));
}
}
None => {
- nodes.push(LatexSectionNode::new(section));
+ nodes.push(LatexSectionNode::new(table, section));
}
}
}
@@ -223,13 +258,13 @@ impl<'a> Into<LatexSymbol> for LatexSectionNode<'a> {
kind: LatexSymbolKind::Section,
deprecated: false,
full_range: self.full_range,
- selection_range: self.section.range(),
+ selection_range: self.table[self.section.parent].range(),
children,
}
}
}
-#[derive(Debug, PartialEq, Eq, Clone)]
+#[derive(Debug, Clone)]
pub struct LatexSectionTree<'a> {
symbols: Vec<LatexSymbol>,
children: Vec<LatexSectionNode<'a>>,
@@ -269,366 +304,368 @@ impl<'a> LatexSectionTree<'a> {
}
}
-impl<'a> From<&'a LatexSyntaxTree> for LatexSectionTree<'a> {
- fn from(tree: &'a LatexSyntaxTree) -> Self {
+impl<'a> From<&'a latex::SymbolTable> for LatexSectionTree<'a> {
+ fn from(table: &'a latex::SymbolTable) -> Self {
let mut root = Self::new();
- for section in &tree.structure.sections {
- LatexSectionNode::insert_section(&mut root.children, section);
+ for section in &table.sections {
+ LatexSectionNode::insert_section(&mut root.children, table, section);
}
root
}
}
-pub fn label_name(label: Option<&LatexLabel>) -> Option<String> {
- label.map(|label| label.names()[0].text().to_owned())
-}
-
-pub fn selection_range(full_range: Range, label: Option<&LatexLabel>) -> Range {
- label.map(|label| label.range()).unwrap_or(full_range)
-}
-
#[cfg(test)]
mod tests {
use super::*;
- use crate::range::RangeExt;
-
- #[test]
- fn test_subsection() {
- let symbols = test_feature(
- LatexSectionSymbolProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file(
- "foo.tex",
- "\\section{Foo}\n\\subsection{Bar}\\label{sec:bar}\n\\subsection{Baz}\n\\section{Qux}",
- ),
- FeatureSpec::file(
- "foo.aux",
- "\\newlabel{sec:bar}{{\\relax 2.1}{4}{Bar\\relax }{figure.caption.4}{}}"
- ),
- ],
- main_file: "foo.tex",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- symbols,
- vec![
- LatexSymbol {
- name: "Foo".into(),
- label: None,
- kind: LatexSymbolKind::Section,
- deprecated: false,
- full_range: Range::new_simple(0, 0, 3, 0),
- selection_range: Range::new_simple(0, 0, 0, 13),
- children: vec![
- LatexSymbol {
- name: "2.1 Bar".into(),
- label: Some("sec:bar".into()),
- kind: LatexSymbolKind::Section,
- deprecated: false,
- full_range: Range::new_simple(1, 0, 2, 0),
- selection_range: Range::new_simple(1, 0, 1, 16),
- children: Vec::new(),
- },
- LatexSymbol {
- name: "Baz".into(),
- label: None,
- kind: LatexSymbolKind::Section,
- deprecated: false,
- full_range: Range::new_simple(2, 0, 3, 0),
- selection_range: Range::new_simple(2, 0, 2, 16),
- children: Vec::new(),
- },
- ],
- },
- LatexSymbol {
- name: "Qux".into(),
- label: None,
- kind: LatexSymbolKind::Section,
- deprecated: false,
- full_range: Range::new_simple(3, 0, 3, 13),
- selection_range: Range::new_simple(3, 0, 3, 13),
- children: Vec::new(),
- }
- ]
- );
+ use crate::feature::FeatureTester;
+ use indoc::indoc;
+
+ #[tokio::test]
+ async fn empty_latex_document() {
+ let actual_symbols = FeatureTester::new()
+ .file("main.tex", "")
+ .main("main.tex")
+ .test_symbol(LatexSectionSymbolProvider)
+ .await;
+
+ assert!(actual_symbols.is_empty());
}
- #[test]
- fn test_section_inside_document_environment() {
- let symbols = test_feature(
- LatexSectionSymbolProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.tex",
- "\\begin{document}\\section{Foo}\\relax\n\\end{document}",
- )],
- main_file: "foo.tex",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- symbols,
- vec![LatexSymbol {
+ #[tokio::test]
+ async fn empty_bibtex_document() {
+ let actual_symbols = FeatureTester::new()
+ .file("main.bib", "")
+ .main("main.bib")
+ .test_symbol(LatexSectionSymbolProvider)
+ .await;
+
+ assert!(actual_symbols.is_empty());
+ }
+
+ #[tokio::test]
+ async fn subsection() {
+ let actual_symbols = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \section{Foo}
+ \subsection{Bar}\label{sec:bar}
+ \subsection{Baz}
+ \section{Qux}
+ "#
+ ),
+ )
+ .file(
+ "main.aux",
+ r#"\newlabel{sec:bar}{{\relax 2.1}{4}{Bar\relax }{figure.caption.4}{}}"#,
+ )
+ .main("main.tex")
+ .test_symbol(LatexSectionSymbolProvider)
+ .await;
+
+ let expected_symbols = vec![
+ LatexSymbol {
name: "Foo".into(),
label: None,
kind: LatexSymbolKind::Section,
deprecated: false,
- full_range: Range::new_simple(0, 16, 1, 0),
- selection_range: Range::new_simple(0, 16, 0, 29),
- children: Vec::new()
- }]
- );
- }
-
- #[test]
- fn test_enumeration() {
- let symbols = test_feature(
- LatexSectionSymbolProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.tex",
- "\\section{Foo}\n\\begin{enumerate}\n\\end{enumerate}",
- )],
- main_file: "foo.tex",
- ..FeatureSpec::default()
+ full_range: Range::new_simple(0, 0, 3, 0),
+ selection_range: Range::new_simple(0, 0, 0, 13),
+ children: vec![
+ LatexSymbol {
+ name: "2.1 Bar".into(),
+ label: Some("sec:bar".into()),
+ kind: LatexSymbolKind::Section,
+ deprecated: false,
+ full_range: Range::new_simple(1, 0, 2, 0),
+ selection_range: Range::new_simple(1, 0, 1, 16),
+ children: Vec::new(),
+ },
+ LatexSymbol {
+ name: "Baz".into(),
+ label: None,
+ kind: LatexSymbolKind::Section,
+ deprecated: false,
+ full_range: Range::new_simple(2, 0, 3, 0),
+ selection_range: Range::new_simple(2, 0, 2, 16),
+ children: Vec::new(),
+ },
+ ],
},
- );
- assert_eq!(
- symbols,
- vec![LatexSymbol {
- name: "Foo".into(),
+ LatexSymbol {
+ name: "Qux".into(),
label: None,
kind: LatexSymbolKind::Section,
deprecated: false,
- full_range: Range::new_simple(0, 0, 2, 15),
- selection_range: Range::new_simple(0, 0, 0, 13),
- children: vec![LatexSymbol {
- name: "Enumerate".into(),
- label: None,
- kind: LatexSymbolKind::Enumeration,
- deprecated: false,
- full_range: Range::new_simple(1, 0, 2, 15),
- selection_range: Range::new_simple(1, 0, 2, 15),
- children: Vec::new(),
- },],
- },]
- );
+ full_range: Range::new_simple(3, 0, 3, 13),
+ selection_range: Range::new_simple(3, 0, 3, 13),
+ children: Vec::new(),
+ },
+ ];
+
+ assert_eq!(actual_symbols, expected_symbols);
}
- #[test]
- fn test_equation() {
- let symbols = test_feature(
- LatexSectionSymbolProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.tex",
- "\\[Foo\\]\n\\begin{equation}\\label{eq:foo}\\end{equation}",
- )],
- main_file: "foo.tex",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- symbols,
- vec![
- LatexSymbol {
- name: "Equation".into(),
- label: None,
- kind: LatexSymbolKind::Equation,
- deprecated: false,
- full_range: Range::new_simple(0, 0, 0, 7),
- selection_range: Range::new_simple(0, 0, 0, 7),
- children: Vec::new(),
- },
- LatexSymbol {
- name: "Equation".into(),
- label: Some("eq:foo".into()),
- kind: LatexSymbolKind::Equation,
- deprecated: false,
- full_range: Range::new_simple(1, 0, 1, 44),
- selection_range: Range::new_simple(1, 16, 1, 30),
- children: Vec::new(),
- },
- ]
- );
+ #[tokio::test]
+ async fn section_inside_document_environment() {
+ let actual_symbols = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \begin{document}\section{Foo}\relax
+ \end{document}
+ "#
+ ),
+ )
+ .main("main.tex")
+ .test_symbol(LatexSectionSymbolProvider)
+ .await;
+
+ let expected_symbols = vec![LatexSymbol {
+ name: "Foo".into(),
+ label: None,
+ kind: LatexSymbolKind::Section,
+ deprecated: false,
+ full_range: Range::new_simple(0, 16, 1, 0),
+ selection_range: Range::new_simple(0, 16, 0, 29),
+ children: Vec::new(),
+ }];
+
+ assert_eq!(actual_symbols, expected_symbols);
}
- #[test]
- fn test_equation_number() {
- let symbols = test_feature(
- LatexSectionSymbolProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file("foo.tex", "\\[\\label{eq:foo}\\]"),
- FeatureSpec::file(
- "foo.aux",
- "\\newlabel{eq:foo}{{\\relax 2.1}{4}{Bar\\relax }{figure.caption.4}{}}",
- ),
- ],
- main_file: "foo.tex",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- symbols,
- vec![LatexSymbol {
- name: "Equation (2.1)".into(),
- label: Some("eq:foo".into()),
- kind: LatexSymbolKind::Equation,
+ #[tokio::test]
+ async fn enumeration() {
+ let actual_symbols = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \section{Foo}
+ \begin{enumerate}
+ \end{enumerate}
+ "#
+ ),
+ )
+ .main("main.tex")
+ .test_symbol(LatexSectionSymbolProvider)
+ .await;
+
+ let expected_symbols = vec![LatexSymbol {
+ name: "Foo".into(),
+ label: None,
+ kind: LatexSymbolKind::Section,
+ deprecated: false,
+ full_range: Range::new_simple(0, 0, 2, 15),
+ selection_range: Range::new_simple(0, 0, 0, 13),
+ children: vec![LatexSymbol {
+ name: "Enumerate".into(),
+ label: None,
+ kind: LatexSymbolKind::Enumeration,
deprecated: false,
- full_range: Range::new_simple(0, 0, 0, 18),
- selection_range: Range::new_simple(0, 2, 0, 16),
+ full_range: Range::new_simple(1, 0, 2, 15),
+ selection_range: Range::new_simple(1, 0, 2, 15),
children: Vec::new(),
- },]
- );
+ }],
+ }];
+
+ assert_eq!(actual_symbols, expected_symbols);
}
- #[test]
- fn test_table() {
- let symbols = test_feature(
- LatexSectionSymbolProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.tex",
- "\\begin{table}\\caption{Foo}\\end{table}",
- )],
- main_file: "foo.tex",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- symbols,
- vec![LatexSymbol {
- name: "Table: Foo".into(),
+ #[tokio::test]
+ async fn equation() {
+ let actual_symbols = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \[Foo\]
+ \begin{equation}\label{eq:foo}\end{equation}
+ "#
+ ),
+ )
+ .main("main.tex")
+ .test_symbol(LatexSectionSymbolProvider)
+ .await;
+
+ let expected_symbols = vec![
+ LatexSymbol {
+ name: "Equation".into(),
label: None,
- kind: LatexSymbolKind::Table,
+ kind: LatexSymbolKind::Equation,
deprecated: false,
- full_range: Range::new_simple(0, 0, 0, 37),
- selection_range: Range::new_simple(0, 0, 0, 37),
+ full_range: Range::new_simple(0, 0, 0, 7),
+ selection_range: Range::new_simple(0, 0, 0, 7),
children: Vec::new(),
- },]
- );
- }
-
- #[test]
- fn test_figure_number() {
- let symbols = test_feature(
- LatexSectionSymbolProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file(
- "foo.tex",
- "\\begin{figure}\\caption{Foo}\\label{fig:foo}\\end{figure}",
- ),
- FeatureSpec::file(
- "foo.aux",
- "\\newlabel{fig:foo}{{\\relax 2.1}{4}{Bar\\relax }{figure.caption.4}{}}",
- ),
- ],
- main_file: "foo.tex",
- ..FeatureSpec::default()
},
- );
- assert_eq!(
- symbols,
- vec![LatexSymbol {
- name: "Figure 2.1: Foo".into(),
- label: Some("fig:foo".into()),
- kind: LatexSymbolKind::Figure,
+ LatexSymbol {
+ name: "Equation".into(),
+ label: Some("eq:foo".into()),
+ kind: LatexSymbolKind::Equation,
deprecated: false,
- full_range: Range::new_simple(0, 0, 0, 54),
- selection_range: Range::new_simple(0, 27, 0, 42),
+ full_range: Range::new_simple(1, 0, 1, 44),
+ selection_range: Range::new_simple(1, 16, 1, 30),
children: Vec::new(),
- },]
- );
+ },
+ ];
+
+ assert_eq!(actual_symbols, expected_symbols);
}
- #[test]
- fn test_lemma() {
- let symbols = test_feature(
- LatexSectionSymbolProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.tex",
- "\\newtheorem{lemma}{Lemma}\\begin{lemma}\\end{lemma}",
- )],
- main_file: "foo.tex",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- symbols,
- vec![LatexSymbol {
- name: "Lemma".into(),
- label: None,
- kind: LatexSymbolKind::Theorem,
- deprecated: false,
- full_range: Range::new_simple(0, 25, 0, 49),
- selection_range: Range::new_simple(0, 25, 0, 49),
- children: Vec::new(),
- },]
- );
+ #[tokio::test]
+ async fn equation_number() {
+ let actual_symbols = FeatureTester::new()
+ .file("main.tex", r#"\[\label{eq:foo}\]"#)
+ .file(
+ "main.aux",
+ r#"\newlabel{eq:foo}{{\relax 2.1}{4}{Bar\relax }{figure.caption.4}{}}"#,
+ )
+ .main("main.tex")
+ .test_symbol(LatexSectionSymbolProvider)
+ .await;
+
+ let expected_symbols = vec![LatexSymbol {
+ name: "Equation (2.1)".into(),
+ label: Some("eq:foo".into()),
+ kind: LatexSymbolKind::Equation,
+ deprecated: false,
+ full_range: Range::new_simple(0, 0, 0, 18),
+ selection_range: Range::new_simple(0, 2, 0, 16),
+ children: Vec::new(),
+ }];
+
+ assert_eq!(actual_symbols, expected_symbols);
}
- #[test]
- fn test_lemma_number() {
- let symbols = test_feature(
- LatexSectionSymbolProvider,
- FeatureSpec {
- files: vec![
- FeatureSpec::file(
- "foo.tex",
- "\\newtheorem{lemma}{Lemma}\n\\begin{lemma}\\label{thm:foo}\\end{lemma}",
- ),
- FeatureSpec::file(
- "foo.aux",
- "\\newlabel{thm:foo}{{\\relax 2.1}{4}{Bar\\relax }{figure.caption.4}{}}",
- ),
- ],
- main_file: "foo.tex",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- symbols,
- vec![LatexSymbol {
- name: "Lemma 2.1".into(),
- label: Some("thm:foo".into()),
- kind: LatexSymbolKind::Theorem,
- deprecated: false,
- full_range: Range::new_simple(1, 0, 1, 39),
- selection_range: Range::new_simple(1, 13, 1, 28),
- children: Vec::new(),
- },]
- );
+ #[tokio::test]
+ async fn table() {
+ let actual_symbols = FeatureTester::new()
+ .file("main.tex", r#"\begin{table}\caption{Foo}\end{table}"#)
+ .main("main.tex")
+ .test_symbol(LatexSectionSymbolProvider)
+ .await;
+
+ let expected_symbols = vec![LatexSymbol {
+ name: "Table: Foo".into(),
+ label: None,
+ kind: LatexSymbolKind::Table,
+ deprecated: false,
+ full_range: Range::new_simple(0, 0, 0, 37),
+ selection_range: Range::new_simple(0, 0, 0, 37),
+ children: Vec::new(),
+ }];
+
+ assert_eq!(actual_symbols, expected_symbols);
}
- #[test]
- fn test_lemma_description() {
- let symbols = test_feature(
- LatexSectionSymbolProvider,
- FeatureSpec {
- files: vec![FeatureSpec::file(
- "foo.tex",
- "\\newtheorem{lemma}{Lemma}\\begin{lemma}[Foo]\\end{lemma}",
- )],
- main_file: "foo.tex",
- ..FeatureSpec::default()
- },
- );
- assert_eq!(
- symbols,
- vec![LatexSymbol {
- name: "Lemma (Foo)".into(),
- label: None,
- kind: LatexSymbolKind::Theorem,
- deprecated: false,
- full_range: Range::new_simple(0, 25, 0, 54),
- selection_range: Range::new_simple(0, 25, 0, 54),
- children: Vec::new(),
- },]
- );
+ #[tokio::test]
+ async fn figure_number() {
+ let actual_symbols = FeatureTester::new()
+ .file(
+ "main.tex",
+ r#"\begin{figure}\caption{Foo}\label{fig:foo}\end{figure}"#,
+ )
+ .file(
+ "main.aux",
+ r#"\newlabel{fig:foo}{{\relax 2.1}{4}{Bar\relax }{figure.caption.4}{}}"#,
+ )
+ .main("main.tex")
+ .test_symbol(LatexSectionSymbolProvider)
+ .await;
+
+ let expected_symbols = vec![LatexSymbol {
+ name: "Figure 2.1: Foo".into(),
+ label: Some("fig:foo".into()),
+ kind: LatexSymbolKind::Figure,
+ deprecated: false,
+ full_range: Range::new_simple(0, 0, 0, 54),
+ selection_range: Range::new_simple(0, 27, 0, 42),
+ children: Vec::new(),
+ }];
+
+ assert_eq!(actual_symbols, expected_symbols);
+ }
+
+ #[tokio::test]
+ async fn lemma() {
+ let actual_symbols = FeatureTester::new()
+ .file(
+ "main.tex",
+ r#"\newtheorem{lemma}{Lemma}\begin{lemma}\end{lemma}"#,
+ )
+ .main("main.tex")
+ .test_symbol(LatexSectionSymbolProvider)
+ .await;
+
+ let expected_symbols = vec![LatexSymbol {
+ name: "Lemma".into(),
+ label: None,
+ kind: LatexSymbolKind::Theorem,
+ deprecated: false,
+ full_range: Range::new_simple(0, 25, 0, 49),
+ selection_range: Range::new_simple(0, 25, 0, 49),
+ children: Vec::new(),
+ }];
+
+ assert_eq!(actual_symbols, expected_symbols);
+ }
+
+ #[tokio::test]
+ async fn lemma_number() {
+ let actual_symbols = FeatureTester::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \newtheorem{lemma}{Lemma}
+ \begin{lemma}\label{thm:foo}\end{lemma}
+ "#
+ ),
+ )
+ .file(
+ "main.aux",
+ r#"\newlabel{thm:foo}{{\relax 2.1}{4}{Bar\relax }{figure.caption.4}{}}"#,
+ )
+ .main("main.tex")
+ .test_symbol(LatexSectionSymbolProvider)
+ .await;
+
+ let expected_symbols = vec![LatexSymbol {
+ name: "Lemma 2.1".into(),
+ label: Some("thm:foo".into()),
+ kind: LatexSymbolKind::Theorem,
+ deprecated: false,
+ full_range: Range::new_simple(1, 0, 1, 39),
+ selection_range: Range::new_simple(1, 13, 1, 28),
+ children: Vec::new(),
+ }];
+
+ assert_eq!(actual_symbols, expected_symbols);
+ }
+
+ #[tokio::test]
+ async fn lemma_description() {
+ let actual_symbols = FeatureTester::new()
+ .file(
+ "main.tex",
+ r#"\newtheorem{lemma}{Lemma}\begin{lemma}[Foo]\end{lemma}"#,
+ )
+ .main("main.tex")
+ .test_symbol(LatexSectionSymbolProvider)
+ .await;
+
+ let expected_symbols = vec![LatexSymbol {
+ name: "Lemma (Foo)".into(),
+ label: None,
+ kind: LatexSymbolKind::Theorem,
+ deprecated: false,
+ full_range: Range::new_simple(0, 25, 0, 54),
+ selection_range: Range::new_simple(0, 25, 0, 54),
+ children: Vec::new(),
+ }];
+
+ assert_eq!(actual_symbols, expected_symbols);
}
}
diff --git a/support/texlab/src/symbol/latex_section/theorem.rs b/support/texlab/src/symbol/latex_section/theorem.rs
index 1f2190ea47..dac231fbfa 100644
--- a/support/texlab/src/symbol/latex_section/theorem.rs
+++ b/support/texlab/src/symbol/latex_section/theorem.rs
@@ -1,47 +1,51 @@
use super::{label_name, selection_range};
-use crate::symbol::{LatexSymbol, LatexSymbolKind};
-use crate::syntax::*;
-use crate::workspace::*;
+use crate::{
+ feature::DocumentView,
+ outline::OutlineContext,
+ symbol::types::{LatexSymbol, LatexSymbolKind},
+ syntax::latex,
+ workspace::DocumentContent,
+};
+use titlecase::titlecase;
-pub fn symbols(view: &DocumentView, tree: &LatexSyntaxTree) -> Vec<LatexSymbol> {
- tree.env
+pub fn symbols(view: &DocumentView, table: &latex::SymbolTable) -> Vec<LatexSymbol> {
+ table
.environments
.iter()
- .filter_map(|env| make_symbol(view, tree, env))
+ .filter_map(|env| make_symbol(view, table, *env))
.collect()
}
fn make_symbol(
view: &DocumentView,
- main_tree: &LatexSyntaxTree,
- environment: &LatexEnvironment,
+ main_table: &latex::SymbolTable,
+ env: latex::Environment,
) -> Option<LatexSymbol> {
- let environment_name = environment.left.name().map(LatexToken::text)?;
+ let env_name = env.left.name(&main_table).map(latex::Token::text)?;
- for document in &view.related_documents {
- if let SyntaxTree::Latex(tree) = &document.tree {
- for definition in &tree.math.theorem_definitions {
- if environment_name == definition.name().text() {
- let kind = definition
- .command
- .args
- .get(definition.index + 1)
- .map(|content| extract_group(content))
- .unwrap_or_else(|| titlelize(environment_name));
+ for document in &view.related {
+ if let DocumentContent::Latex(table) = &document.content {
+ for definition in &table.theorem_definitions {
+ if definition.name(&table).text() == env_name {
+ let kind = table
+ .print_group_content(
+ definition.parent,
+ latex::GroupKind::Group,
+ definition.arg_index + 1,
+ )
+ .unwrap_or_else(|| titlecase(env_name));
- let description = environment
- .left
- .command
- .options
- .get(0)
- .map(|content| extract_group(content));
+ let desc = main_table.print_group_content(
+ env.left.parent,
+ latex::GroupKind::Options,
+ 0,
+ );
- let label = main_tree.find_label_by_environment(environment);
+ let label = main_table.find_label_by_environment(env);
let number = label
- .as_ref()
- .and_then(|label| OutlineContext::find_number(view, label));
+ .and_then(|label| OutlineContext::find_number(view, &main_table, *label));
- let name = match (description, number) {
+ let name = match (desc, number) {
(Some(desc), Some(num)) => format!("{} {} ({})", kind, num, desc),
(Some(desc), None) => format!("{} ({})", kind, desc),
(None, Some(num)) => format!("{} {}", kind, num),
@@ -50,11 +54,11 @@ fn make_symbol(
let symbol = LatexSymbol {
name,
- label: label_name(label),
+ label: label_name(main_table, label),
kind: LatexSymbolKind::Theorem,
deprecated: false,
- full_range: environment.range(),
- selection_range: selection_range(environment.range(), label),
+ full_range: env.range(&main_table),
+ selection_range: selection_range(main_table, env.range(&main_table), label),
children: Vec::new(),
};
return Some(symbol);
diff --git a/support/texlab/src/symbol/mod.rs b/support/texlab/src/symbol/mod.rs
index ec68d70c3e..b292f15bb2 100644
--- a/support/texlab/src/symbol/mod.rs
+++ b/support/texlab/src/symbol/mod.rs
@@ -2,122 +2,30 @@ mod bibtex_entry;
mod bibtex_string;
mod latex_section;
mod project_order;
-
-use self::bibtex_entry::BibtexEntrySymbolProvider;
-use self::bibtex_string::BibtexStringSymbolProvider;
-use self::latex_section::LatexSectionSymbolProvider;
-use self::project_order::ProjectOrdering;
-use crate::capabilities::ClientCapabilitiesExt;
-use crate::lsp_kind::Structure;
-use crate::syntax::*;
-use crate::workspace::*;
-use futures_boxed::boxed;
-use lsp_types::*;
-use serde::{Deserialize, Serialize};
-use std::cmp::Reverse;
-use std::sync::Arc;
+mod types;
pub use self::latex_section::{build_section_tree, LatexSectionNode, LatexSectionTree};
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub enum LatexSymbolKind {
- Section,
- Figure,
- Algorithm,
- Table,
- Listing,
- Enumeration,
- EnumerationItem,
- Theorem,
- Equation,
- Entry(BibtexEntryTypeCategory),
- Field,
- String,
-}
-
-impl Into<SymbolKind> for LatexSymbolKind {
- fn into(self) -> SymbolKind {
- match self {
- Self::Section => Structure::Section.symbol_kind(),
- Self::Figure | Self::Algorithm | Self::Table | Self::Listing => {
- Structure::Float.symbol_kind()
- }
- Self::Enumeration => Structure::Environment.symbol_kind(),
- Self::EnumerationItem => Structure::Item.symbol_kind(),
- Self::Theorem => Structure::Theorem.symbol_kind(),
- Self::Equation => Structure::Equation.symbol_kind(),
- Self::Entry(category) => Structure::Entry(category).symbol_kind(),
- Self::Field => Structure::Field.symbol_kind(),
- Self::String => Structure::Entry(BibtexEntryTypeCategory::String).symbol_kind(),
- }
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexSymbol {
- pub name: String,
- pub label: Option<String>,
- pub kind: LatexSymbolKind,
- pub deprecated: bool,
- pub full_range: Range,
- pub selection_range: Range,
- pub children: Vec<LatexSymbol>,
-}
-
-impl LatexSymbol {
- pub fn search_text(&self) -> String {
- let kind = match self.kind {
- LatexSymbolKind::Section => "latex section",
- LatexSymbolKind::Figure => "latex float figure",
- LatexSymbolKind::Algorithm => "latex float algorithm",
- LatexSymbolKind::Table => "latex float table",
- LatexSymbolKind::Listing => "latex float listing",
- LatexSymbolKind::Enumeration => "latex enumeration",
- LatexSymbolKind::EnumerationItem => "latex enumeration item",
- LatexSymbolKind::Theorem => "latex math",
- LatexSymbolKind::Equation => "latex math equation",
- LatexSymbolKind::Entry(_) => "bibtex entry",
- LatexSymbolKind::Field => "bibtex field",
- LatexSymbolKind::String => "bibtex string",
- };
- format!("{} {}", kind, self.name).to_lowercase()
- }
-
- pub fn flatten(mut self, buffer: &mut Vec<Self>) {
- if self.kind == LatexSymbolKind::Field {
- return;
- }
- for symbol in self.children.drain(..) {
- symbol.flatten(buffer);
- }
- buffer.push(self);
- }
-
- pub fn into_symbol_info(self, uri: Uri) -> SymbolInformation {
- SymbolInformation {
- name: self.name,
- deprecated: Some(self.deprecated),
- kind: self.kind.into(),
- container_name: None,
- location: Location::new(uri.clone().into(), self.full_range),
- }
- }
-}
-
-impl Into<DocumentSymbol> for LatexSymbol {
- fn into(self) -> DocumentSymbol {
- let children = self.children.into_iter().map(Into::into).collect();
- DocumentSymbol {
- name: self.name,
- deprecated: Some(self.deprecated),
- detail: self.label,
- kind: self.kind.into(),
- selection_range: self.selection_range,
- range: self.full_range,
- children: Some(children),
- }
- }
-}
+use self::{
+ bibtex_entry::BibtexEntrySymbolProvider, bibtex_string::BibtexStringSymbolProvider,
+ latex_section::LatexSectionSymbolProvider, project_order::ProjectOrdering, types::LatexSymbol,
+};
+use crate::{
+ feature::{ConcatProvider, DocumentView, FeatureProvider, FeatureRequest},
+ protocol::{
+ ClientCapabilities, ClientCapabilitiesExt, DocumentSymbolParams, DocumentSymbolResponse,
+ Options, PartialResultParams, SymbolInformation, TextDocumentIdentifier, Uri,
+ WorkDoneProgressParams, WorkspaceSymbolParams,
+ },
+ tex::Distribution,
+ workspace::Snapshot,
+};
+use async_trait::async_trait;
+use std::{
+ cmp::Reverse,
+ path::{Path, PathBuf},
+ sync::Arc,
+};
pub struct SymbolProvider {
provider: ConcatProvider<DocumentSymbolParams, LatexSymbol>,
@@ -141,44 +49,37 @@ impl Default for SymbolProvider {
}
}
+#[async_trait]
impl FeatureProvider for SymbolProvider {
type Params = DocumentSymbolParams;
type Output = Vec<LatexSymbol>;
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output {
- self.provider.execute(request).await
+ async fn execute<'a>(&'a self, req: &'a FeatureRequest<Self::Params>) -> Self::Output {
+ self.provider.execute(req).await
}
}
-#[serde(untagged)]
-#[derive(Debug, PartialEq, Eq, Serialize, Deserialize)]
-pub enum SymbolResponse {
- Flat(Vec<SymbolInformation>),
- Hierarchical(Vec<DocumentSymbol>),
-}
-
-impl SymbolResponse {
- pub fn new(
- client_capabilities: &ClientCapabilities,
- workspace: &Workspace,
- uri: &Uri,
- symbols: Vec<LatexSymbol>,
- ) -> Self {
- if client_capabilities.has_hierarchical_document_symbol_support() {
- Self::Hierarchical(symbols.into_iter().map(Into::into).collect())
- } else {
- let mut buffer = Vec::new();
- for symbol in symbols {
- symbol.flatten(&mut buffer);
- }
- let mut buffer = buffer
- .into_iter()
- .map(|symbol| symbol.into_symbol_info(uri.clone()))
- .collect();
- sort_symbols(workspace, &mut buffer);
- Self::Flat(buffer)
+pub fn document_symbols(
+ client_capabilities: &ClientCapabilities,
+ snapshot: &Snapshot,
+ uri: &Uri,
+ options: &Options,
+ current_dir: &Path,
+ symbols: Vec<LatexSymbol>,
+) -> DocumentSymbolResponse {
+ if client_capabilities.has_hierarchical_document_symbol_support() {
+ DocumentSymbolResponse::Nested(symbols.into_iter().map(Into::into).collect())
+ } else {
+ let mut buffer = Vec::new();
+ for symbol in symbols {
+ symbol.flatten(&mut buffer);
}
+ let mut buffer = buffer
+ .into_iter()
+ .map(|symbol| symbol.into_symbol_info(uri.clone()))
+ .collect();
+ sort_symbols(snapshot, options, &current_dir, &mut buffer);
+ DocumentSymbolResponse::Flat(buffer)
}
}
@@ -187,28 +88,39 @@ struct WorkspaceSymbol {
search_text: String,
}
-pub async fn workspace_symbols(
- distribution: Arc<Box<dyn tex::Distribution>>,
+pub async fn workspace_symbols<'a>(
+ distro: Arc<dyn Distribution>,
client_capabilities: Arc<ClientCapabilities>,
- workspace: Arc<Workspace>,
- params: &WorkspaceSymbolParams,
+ snapshot: Arc<Snapshot>,
+ options: &'a Options,
+ current_dir: Arc<PathBuf>,
+ params: &'a WorkspaceSymbolParams,
) -> Vec<SymbolInformation> {
let provider = SymbolProvider::new();
let mut symbols = Vec::new();
- for document in &workspace.documents {
- let uri: Uri = document.uri.clone();
- let request = FeatureRequest {
- client_capabilities: Arc::clone(&client_capabilities),
- view: DocumentView::new(Arc::clone(&workspace), Arc::clone(&document)),
+ for doc in &snapshot.0 {
+ let uri: Uri = doc.uri.clone();
+ let req = FeatureRequest {
params: DocumentSymbolParams {
text_document: TextDocumentIdentifier::new(uri.clone().into()),
+ work_done_progress_params: WorkDoneProgressParams::default(),
+ partial_result_params: PartialResultParams::default(),
},
- distribution: Arc::clone(&distribution),
+ view: DocumentView::analyze(
+ Arc::clone(&snapshot),
+ Arc::clone(&doc),
+ &options,
+ &current_dir,
+ ),
+ distro: distro.clone(),
+ client_capabilities: Arc::clone(&client_capabilities),
+ options: options.clone(),
+ current_dir: Arc::clone(&current_dir),
};
let mut buffer = Vec::new();
- for symbol in provider.execute(&request).await {
+ for symbol in provider.execute(&req).await {
symbol.flatten(&mut buffer);
}
@@ -239,12 +151,17 @@ pub async fn workspace_symbols(
filtered.push(symbol.info);
}
}
- sort_symbols(&workspace, &mut filtered);
+ sort_symbols(&snapshot, options, &current_dir, &mut filtered);
filtered
}
-fn sort_symbols(workspace: &Workspace, symbols: &mut Vec<SymbolInformation>) {
- let ordering = ProjectOrdering::new(workspace);
+fn sort_symbols(
+ snapshot: &Snapshot,
+ options: &Options,
+ current_dir: &Path,
+ symbols: &mut Vec<SymbolInformation>,
+) {
+ let ordering = ProjectOrdering::analyze(snapshot, options, current_dir);
symbols.sort_by(|left, right| {
let left_key = (
ordering.get(&Uri::from(left.location.uri.clone())),
diff --git a/support/texlab/src/symbol/project_order.rs b/support/texlab/src/symbol/project_order.rs
index 31b71f36bb..8a2ec5f6d0 100644
--- a/support/texlab/src/symbol/project_order.rs
+++ b/support/texlab/src/symbol/project_order.rs
@@ -1,9 +1,9 @@
-use crate::syntax::*;
-use crate::workspace::*;
-use petgraph::algo::tarjan_scc;
-use petgraph::{Directed, Graph};
-use std::collections::HashSet;
-use std::sync::Arc;
+use crate::{
+ protocol::{Options, Uri},
+ workspace::{Document, DocumentContent, Snapshot},
+};
+use petgraph::{algo::tarjan_scc, Directed, Graph};
+use std::{collections::HashSet, path::Path, sync::Arc, usize};
#[derive(Debug, PartialEq, Eq, Clone)]
pub struct ProjectOrdering {
@@ -11,27 +11,34 @@ pub struct ProjectOrdering {
}
impl ProjectOrdering {
- pub fn new(workspace: &Workspace) -> Self {
+ pub fn get(&self, uri: &Uri) -> usize {
+ self.ordering
+ .iter()
+ .position(|doc| doc.uri == *uri)
+ .unwrap_or(usize::MAX)
+ }
+
+ pub fn analyze(snapshot: &Snapshot, options: &Options, current_dir: &Path) -> Self {
let mut ordering = Vec::new();
- let connected_components = Self::connected_components(workspace);
- for connected_component in connected_components {
- let graph = Self::build_dependency_graph(&connected_component);
+ let comps = Self::connected_components(snapshot, options, current_dir);
+ for comp in comps {
+ let graph = Self::build_dependency_graph(&comp);
let mut visited = HashSet::new();
let root_index = *graph.node_weight(tarjan_scc(&graph)[0][0]).unwrap();
- let mut stack = vec![Arc::clone(&connected_component[root_index])];
+ let mut stack = vec![Arc::clone(&comp[root_index])];
- while let Some(document) = stack.pop() {
- if !visited.insert(document.uri.as_str().to_owned()) {
+ while let Some(doc) = stack.pop() {
+ if !visited.insert(doc.uri.as_str().to_owned()) {
continue;
}
- ordering.push(Arc::clone(&document));
- if let SyntaxTree::Latex(tree) = &document.tree {
+ ordering.push(Arc::clone(&doc));
+ if let DocumentContent::Latex(tree) = &doc.content {
for include in tree.includes.iter().rev() {
for targets in &include.all_targets {
for target in targets {
- if let Some(child) = workspace.find(target) {
+ if let Some(child) = snapshot.find(target) {
stack.push(child);
}
}
@@ -44,36 +51,40 @@ impl ProjectOrdering {
Self { ordering }
}
- fn connected_components(workspace: &Workspace) -> Vec<Vec<Arc<Document>>> {
- let mut components = Vec::new();
+ fn connected_components(
+ snapshot: &Snapshot,
+ options: &Options,
+ current_dir: &Path,
+ ) -> Vec<Vec<Arc<Document>>> {
+ let mut comps = Vec::new();
let mut visited = HashSet::new();
- for root in &workspace.documents {
+ for root in &snapshot.0 {
if !visited.insert(root.uri.clone()) {
continue;
}
- let component = workspace.related_documents(&root.uri);
- for document in &component {
+ let comp = snapshot.relations(&root.uri, options, current_dir);
+ for document in &comp {
visited.insert(document.uri.clone());
}
- components.push(component);
+ comps.push(comp);
}
- components
+ comps
}
- fn build_dependency_graph(documents: &[Arc<Document>]) -> Graph<usize, (), Directed> {
+ fn build_dependency_graph(docs: &[Arc<Document>]) -> Graph<usize, (), Directed> {
let mut graph = Graph::new();
- let nodes: Vec<_> = (0..documents.len()).map(|i| graph.add_node(i)).collect();
+ let nodes: Vec<_> = (0..docs.len()).map(|i| graph.add_node(i)).collect();
- for (i, document) in documents.iter().enumerate() {
- if let SyntaxTree::Latex(tree) = &document.tree {
+ for (i, doc) in docs.iter().enumerate() {
+ if let DocumentContent::Latex(tree) = &doc.content {
for targets in tree
.includes
.iter()
.flat_map(|include| &include.all_targets)
{
for target in targets {
- if let Some(j) = documents.iter().position(|doc| doc.uri == *target) {
+ if let Some(j) = docs.iter().position(|doc| doc.uri == *target) {
graph.add_edge(nodes[j], nodes[i], ());
break;
}
@@ -83,60 +94,88 @@ impl ProjectOrdering {
}
graph
}
-
- pub fn get(&self, uri: &Uri) -> usize {
- self.ordering
- .iter()
- .position(|doc| doc.uri == *uri)
- .unwrap_or(std::usize::MAX)
- }
}
#[cfg(test)]
mod tests {
use super::*;
+ use crate::{
+ tex::{Language, Resolver},
+ workspace::DocumentParams,
+ };
+ use std::env;
+
+ fn create_simple_document(uri: &Uri, language: Language, text: &str) -> Arc<Document> {
+ Arc::new(Document::open(DocumentParams {
+ uri: uri.clone(),
+ text: text.into(),
+ language,
+ resolver: &Resolver::default(),
+ options: &Options::default(),
+ current_dir: &env::current_dir().unwrap(),
+ }))
+ }
#[test]
- fn test_no_cycles() {
- let mut builder = WorkspaceBuilder::new();
- let a = builder.document("a.tex", "");
- let b = builder.document("b.tex", "");
- let c = builder.document("c.tex", "\\include{b}\\include{a}");
-
- let project_ordering = ProjectOrdering::new(&builder.workspace);
-
- assert_eq!(project_ordering.get(&a), 2);
- assert_eq!(project_ordering.get(&b), 1);
- assert_eq!(project_ordering.get(&c), 0);
+ fn no_cycles() {
+ let a = Uri::parse("http://example.com/a.tex").unwrap();
+ let b = Uri::parse("http://example.com/b.tex").unwrap();
+ let c = Uri::parse("http://example.com/c.tex").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![
+ create_simple_document(&a, Language::Latex, ""),
+ create_simple_document(&b, Language::Latex, ""),
+ create_simple_document(&c, Language::Latex, r#"\include{b}\include{a}"#),
+ ];
+
+ let current_dir = env::current_dir().unwrap();
+ let ordering = ProjectOrdering::analyze(&snapshot, &Options::default(), &current_dir);
+
+ assert_eq!(ordering.get(&a), 2);
+ assert_eq!(ordering.get(&b), 1);
+ assert_eq!(ordering.get(&c), 0);
}
#[test]
- fn test_cycles() {
- let mut builder = WorkspaceBuilder::new();
- let a = builder.document("a.tex", "\\include{b}");
- let b = builder.document("b.tex", "\\include{a}");
- let c = builder.document("c.tex", "\\include{a}");
-
- let project_ordering = ProjectOrdering::new(&builder.workspace);
-
- assert_eq!(project_ordering.get(&a), 1);
- assert_eq!(project_ordering.get(&b), 2);
- assert_eq!(project_ordering.get(&c), 0);
+ fn cycles() {
+ let a = Uri::parse("http://example.com/a.tex").unwrap();
+ let b = Uri::parse("http://example.com/b.tex").unwrap();
+ let c = Uri::parse("http://example.com/c.tex").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![
+ create_simple_document(&a, Language::Latex, r#"\include{b}"#),
+ create_simple_document(&b, Language::Latex, r#"\include{a}"#),
+ create_simple_document(&c, Language::Latex, r#"\include{a}"#),
+ ];
+
+ let current_dir = env::current_dir().unwrap();
+ let ordering = ProjectOrdering::analyze(&snapshot, &Options::default(), &current_dir);
+
+ assert_eq!(ordering.get(&a), 1);
+ assert_eq!(ordering.get(&b), 2);
+ assert_eq!(ordering.get(&c), 0);
}
#[test]
- fn test_multiple_roots() {
- let mut builder = WorkspaceBuilder::new();
- let a = builder.document("a.tex", "\\include{b}");
- let b = builder.document("b.tex", "");
- let c = builder.document("c.tex", "");
- let d = builder.document("d.tex", "\\include{c}");
-
- let project_ordering = ProjectOrdering::new(&builder.workspace);
-
- assert_eq!(project_ordering.get(&a), 0);
- assert_eq!(project_ordering.get(&b), 1);
- assert_eq!(project_ordering.get(&d), 2);
- assert_eq!(project_ordering.get(&c), 3);
+ fn multiple_roots() {
+ let a = Uri::parse("http://example.com/a.tex").unwrap();
+ let b = Uri::parse("http://example.com/b.tex").unwrap();
+ let c = Uri::parse("http://example.com/c.tex").unwrap();
+ let d = Uri::parse("http://example.com/d.tex").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![
+ create_simple_document(&a, Language::Latex, r#"\include{b}"#),
+ create_simple_document(&b, Language::Latex, ""),
+ create_simple_document(&c, Language::Latex, ""),
+ create_simple_document(&d, Language::Latex, r#"\include{c}"#),
+ ];
+
+ let current_dir = env::current_dir().unwrap();
+ let ordering = ProjectOrdering::analyze(&snapshot, &Options::default(), &current_dir);
+
+ assert_eq!(ordering.get(&a), 0);
+ assert_eq!(ordering.get(&b), 1);
+ assert_eq!(ordering.get(&d), 2);
+ assert_eq!(ordering.get(&c), 3);
}
}
diff --git a/support/texlab/src/symbol/types.rs b/support/texlab/src/symbol/types.rs
new file mode 100644
index 0000000000..f10f43c637
--- /dev/null
+++ b/support/texlab/src/symbol/types.rs
@@ -0,0 +1,104 @@
+use crate::{
+ protocol::{DocumentSymbol, Location, Range, SymbolInformation, SymbolKind, Uri},
+ syntax::{BibtexEntryTypeCategory, Structure},
+};
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub enum LatexSymbolKind {
+ Section,
+ Figure,
+ Algorithm,
+ Table,
+ Listing,
+ Enumeration,
+ EnumerationItem,
+ Theorem,
+ Equation,
+ Entry(BibtexEntryTypeCategory),
+ Field,
+ String,
+}
+
+impl Into<SymbolKind> for LatexSymbolKind {
+ fn into(self) -> SymbolKind {
+ match self {
+ Self::Section => Structure::Section.symbol_kind(),
+ Self::Figure | Self::Algorithm | Self::Table | Self::Listing => {
+ Structure::Float.symbol_kind()
+ }
+ Self::Enumeration => Structure::Environment.symbol_kind(),
+ Self::EnumerationItem => Structure::Item.symbol_kind(),
+ Self::Theorem => Structure::Theorem.symbol_kind(),
+ Self::Equation => Structure::Equation.symbol_kind(),
+ Self::Entry(category) => Structure::Entry(category).symbol_kind(),
+ Self::Field => Structure::Field.symbol_kind(),
+ Self::String => Structure::Entry(BibtexEntryTypeCategory::String).symbol_kind(),
+ }
+ }
+}
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+pub struct LatexSymbol {
+ pub name: String,
+ pub label: Option<String>,
+ pub kind: LatexSymbolKind,
+ pub deprecated: bool,
+ pub full_range: Range,
+ pub selection_range: Range,
+ pub children: Vec<LatexSymbol>,
+}
+
+impl LatexSymbol {
+ pub fn search_text(&self) -> String {
+ let kind = match self.kind {
+ LatexSymbolKind::Section => "latex section",
+ LatexSymbolKind::Figure => "latex float figure",
+ LatexSymbolKind::Algorithm => "latex float algorithm",
+ LatexSymbolKind::Table => "latex float table",
+ LatexSymbolKind::Listing => "latex float listing",
+ LatexSymbolKind::Enumeration => "latex enumeration",
+ LatexSymbolKind::EnumerationItem => "latex enumeration item",
+ LatexSymbolKind::Theorem => "latex math",
+ LatexSymbolKind::Equation => "latex math equation",
+ LatexSymbolKind::Entry(_) => "bibtex entry",
+ LatexSymbolKind::Field => "bibtex field",
+ LatexSymbolKind::String => "bibtex string",
+ };
+ format!("{} {}", kind, self.name).to_lowercase()
+ }
+
+ pub fn flatten(mut self, buffer: &mut Vec<Self>) {
+ if self.kind == LatexSymbolKind::Field {
+ return;
+ }
+ for symbol in self.children.drain(..) {
+ symbol.flatten(buffer);
+ }
+ buffer.push(self);
+ }
+
+ pub fn into_symbol_info(self, uri: Uri) -> SymbolInformation {
+ SymbolInformation {
+ name: self.name,
+ deprecated: Some(self.deprecated),
+ kind: self.kind.into(),
+ container_name: None,
+ location: Location::new(uri.into(), self.full_range),
+ }
+ }
+}
+
+impl Into<DocumentSymbol> for LatexSymbol {
+ fn into(self) -> DocumentSymbol {
+ let children = self.children.into_iter().map(Into::into).collect();
+ DocumentSymbol {
+ name: self.name,
+ deprecated: Some(self.deprecated),
+ detail: self.label,
+ kind: self.kind.into(),
+ selection_range: self.selection_range,
+ range: self.full_range,
+ children: Some(children),
+ }
+ }
+}
diff --git a/support/texlab/src/syntax/bibtex/ast.rs b/support/texlab/src/syntax/bibtex/ast.rs
index 09f2ee5b88..77ee98e26d 100644
--- a/support/texlab/src/syntax/bibtex/ast.rs
+++ b/support/texlab/src/syntax/bibtex/ast.rs
@@ -1,9 +1,14 @@
-use crate::range::RangeExt;
-use crate::syntax::text::{Span, SyntaxNode};
-use lsp_types::Range;
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub enum BibtexTokenKind {
+use crate::{
+ protocol::{Position, Range, RangeExt},
+ syntax::{Span, SyntaxNode},
+};
+use itertools::Itertools;
+use petgraph::graph::{Graph, NodeIndex};
+use serde::{Deserialize, Serialize};
+use std::fmt;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
+pub enum TokenKind {
PreambleKind,
StringKind,
EntryKind,
@@ -19,559 +24,408 @@ pub enum BibtexTokenKind {
EndParen,
}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct BibtexToken {
+#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub struct Token {
pub span: Span,
- pub kind: BibtexTokenKind,
+ pub kind: TokenKind,
}
-impl BibtexToken {
- pub fn new(span: Span, kind: BibtexTokenKind) -> Self {
- BibtexToken { span, kind }
+impl SyntaxNode for Token {
+ fn range(&self) -> Range {
+ self.span.range()
}
+}
- pub fn text(&self) -> &str {
- &self.span.text
+impl Token {
+ pub fn new(span: Span, kind: TokenKind) -> Self {
+ Self { span, kind }
}
-}
-impl SyntaxNode for BibtexToken {
- fn range(&self) -> Range {
- self.span.range
+ pub fn text(&self) -> &str {
+ &self.span.text
}
}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct BibtexRoot {
- pub children: Vec<BibtexDeclaration>,
+#[derive(PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
+pub struct Root {
+ pub range: Range,
}
-impl BibtexRoot {
- pub fn new(children: Vec<BibtexDeclaration>) -> Self {
- BibtexRoot { children }
+impl SyntaxNode for Root {
+ fn range(&self) -> Range {
+ self.range
}
}
-impl SyntaxNode for BibtexRoot {
- fn range(&self) -> Range {
- if self.children.is_empty() {
- Range::new_simple(0, 0, 0, 0)
- } else {
- Range::new(
- self.children[0].start(),
- self.children[self.children.len() - 1].end(),
- )
- }
+impl fmt::Debug for Root {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "Root")
}
}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub enum BibtexDeclaration {
- Comment(Box<BibtexComment>),
- Preamble(Box<BibtexPreamble>),
- String(Box<BibtexString>),
- Entry(Box<BibtexEntry>),
+#[derive(PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub struct Comment {
+ pub token: Token,
}
-impl BibtexDeclaration {
- pub fn accept<'a, T: BibtexVisitor<'a>>(&'a self, visitor: &mut T) {
- match self {
- BibtexDeclaration::Comment(comment) => visitor.visit_comment(comment),
- BibtexDeclaration::Preamble(preamble) => visitor.visit_preamble(preamble),
- BibtexDeclaration::String(string) => visitor.visit_string(string),
- BibtexDeclaration::Entry(entry) => visitor.visit_entry(entry),
- }
+impl SyntaxNode for Comment {
+ fn range(&self) -> Range {
+ self.token.range()
}
}
-impl SyntaxNode for BibtexDeclaration {
- fn range(&self) -> Range {
- match self {
- BibtexDeclaration::Comment(comment) => comment.range,
- BibtexDeclaration::Preamble(preamble) => preamble.range,
- BibtexDeclaration::String(string) => string.range,
- BibtexDeclaration::Entry(entry) => entry.range,
- }
+impl fmt::Debug for Comment {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "Comment({})", self.token.text())
}
}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct BibtexComment {
+#[derive(PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub struct Preamble {
pub range: Range,
- pub token: BibtexToken,
+ pub ty: Token,
+ pub left: Option<Token>,
+ pub right: Option<Token>,
}
-impl BibtexComment {
- pub fn new(token: BibtexToken) -> Self {
- BibtexComment {
- range: token.range(),
- token,
- }
+impl SyntaxNode for Preamble {
+ fn range(&self) -> Range {
+ self.range
}
}
-impl SyntaxNode for BibtexComment {
- fn range(&self) -> Range {
- self.range
+impl fmt::Debug for Preamble {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "Preamble")
}
}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct BibtexPreamble {
+#[derive(PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub struct String {
pub range: Range,
- pub ty: BibtexToken,
- pub left: Option<BibtexToken>,
- pub content: Option<BibtexContent>,
- pub right: Option<BibtexToken>,
-}
-
-impl BibtexPreamble {
- pub fn new(
- ty: BibtexToken,
- left: Option<BibtexToken>,
- content: Option<BibtexContent>,
- right: Option<BibtexToken>,
- ) -> Self {
- let end = if let Some(ref right) = right {
- right.end()
- } else if let Some(ref content) = content {
- content.end()
- } else if let Some(ref left) = left {
- left.end()
- } else {
- ty.end()
- };
- BibtexPreamble {
- range: Range::new(ty.start(), end),
- ty,
- left,
- content,
- right,
- }
- }
+ pub ty: Token,
+ pub left: Option<Token>,
+ pub name: Option<Token>,
+ pub assign: Option<Token>,
+ pub right: Option<Token>,
}
-impl SyntaxNode for BibtexPreamble {
+impl SyntaxNode for String {
fn range(&self) -> Range {
self.range
}
}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct BibtexString {
- pub range: Range,
- pub ty: BibtexToken,
- pub left: Option<BibtexToken>,
- pub name: Option<BibtexToken>,
- pub assign: Option<BibtexToken>,
- pub value: Option<BibtexContent>,
- pub right: Option<BibtexToken>,
-}
-
-impl BibtexString {
- pub fn new(
- ty: BibtexToken,
- left: Option<BibtexToken>,
- name: Option<BibtexToken>,
- assign: Option<BibtexToken>,
- value: Option<BibtexContent>,
- right: Option<BibtexToken>,
- ) -> Self {
- let end = if let Some(ref right) = right {
- right.end()
- } else if let Some(ref value) = value {
- value.end()
- } else if let Some(ref assign) = assign {
- assign.end()
- } else if let Some(ref name) = name {
- name.end()
- } else if let Some(ref left) = left {
- left.end()
- } else {
- ty.end()
- };
-
- BibtexString {
- range: Range::new(ty.start(), end),
- ty,
- left,
- name,
- assign,
- value,
- right,
- }
+impl fmt::Debug for String {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "String({:?})", self.name.as_ref().map(Token::text))
}
}
-impl SyntaxNode for BibtexString {
+#[derive(PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub struct Entry {
+ pub range: Range,
+ pub ty: Token,
+ pub left: Option<Token>,
+ pub key: Option<Token>,
+ pub comma: Option<Token>,
+ pub right: Option<Token>,
+}
+
+impl SyntaxNode for Entry {
fn range(&self) -> Range {
self.range
}
}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct BibtexEntry {
- pub range: Range,
- pub ty: BibtexToken,
- pub left: Option<BibtexToken>,
- pub key: Option<BibtexToken>,
- pub comma: Option<BibtexToken>,
- pub fields: Vec<BibtexField>,
- pub right: Option<BibtexToken>,
-}
-
-impl BibtexEntry {
- pub fn new(
- ty: BibtexToken,
- left: Option<BibtexToken>,
- key: Option<BibtexToken>,
- comma: Option<BibtexToken>,
- fields: Vec<BibtexField>,
- right: Option<BibtexToken>,
- ) -> Self {
- let end = if let Some(ref right) = right {
- right.end()
- } else if !fields.is_empty() {
- fields[fields.len() - 1].range.end
- } else if let Some(ref comma) = comma {
- comma.end()
- } else if let Some(ref key) = key {
- key.end()
- } else if let Some(ref left) = left {
- left.end()
- } else {
- ty.end()
- };
-
- BibtexEntry {
- range: Range::new(ty.start(), end),
- ty,
- left,
- key,
- comma,
- fields,
- right,
- }
+impl fmt::Debug for Entry {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "Entry({:?})", self.key.as_ref().map(Token::text))
}
+}
+impl Entry {
pub fn is_comment(&self) -> bool {
self.ty.text().to_lowercase() == "@comment"
}
+}
- pub fn find_field(&self, name: &str) -> Option<&BibtexField> {
- self.fields
- .iter()
- .find(|field| field.name.text().to_lowercase() == name)
- }
+#[derive(PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub struct Field {
+ pub range: Range,
+ pub name: Token,
+ pub assign: Option<Token>,
+ pub comma: Option<Token>,
}
-impl SyntaxNode for BibtexEntry {
+impl SyntaxNode for Field {
fn range(&self) -> Range {
self.range
}
}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct BibtexField {
- pub range: Range,
- pub name: BibtexToken,
- pub assign: Option<BibtexToken>,
- pub content: Option<BibtexContent>,
- pub comma: Option<BibtexToken>,
-}
-
-impl BibtexField {
- pub fn new(
- name: BibtexToken,
- assign: Option<BibtexToken>,
- content: Option<BibtexContent>,
- comma: Option<BibtexToken>,
- ) -> Self {
- let end = if let Some(ref comma) = comma {
- comma.end()
- } else if let Some(ref content) = content {
- content.end()
- } else if let Some(ref assign) = assign {
- assign.end()
- } else {
- name.end()
- };
-
- BibtexField {
- range: Range::new(name.start(), end),
- name,
- assign,
- content,
- comma,
- }
- }
-}
-
-impl SyntaxNode for BibtexField {
- fn range(&self) -> Range {
- self.range
+impl fmt::Debug for Field {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "Field({})", self.name.text())
}
}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub enum BibtexContent {
- Word(BibtexWord),
- Command(BibtexCommand),
- QuotedContent(BibtexQuotedContent),
- BracedContent(BibtexBracedContent),
- Concat(Box<BibtexConcat>),
+#[derive(PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub struct Word {
+ pub token: Token,
}
-impl BibtexContent {
- pub fn accept<'a, T: BibtexVisitor<'a>>(&'a self, visitor: &mut T) {
- match self {
- BibtexContent::Word(word) => visitor.visit_word(word),
- BibtexContent::Command(command) => visitor.visit_command(command),
- BibtexContent::QuotedContent(content) => visitor.visit_quoted_content(content),
- BibtexContent::BracedContent(content) => visitor.visit_braced_content(content),
- BibtexContent::Concat(concat) => visitor.visit_concat(concat),
- }
+impl SyntaxNode for Word {
+ fn range(&self) -> Range {
+ self.token.range()
}
}
-impl SyntaxNode for BibtexContent {
- fn range(&self) -> Range {
- match self {
- BibtexContent::Word(word) => word.range(),
- BibtexContent::Command(command) => command.range(),
- BibtexContent::QuotedContent(content) => content.range(),
- BibtexContent::BracedContent(content) => content.range(),
- BibtexContent::Concat(concat) => concat.range(),
- }
+impl fmt::Debug for Word {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "Word({})", self.token.text())
}
}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct BibtexWord {
- pub range: Range,
- pub token: BibtexToken,
+#[derive(PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub struct Command {
+ pub token: Token,
}
-impl BibtexWord {
- pub fn new(token: BibtexToken) -> Self {
- BibtexWord {
- range: token.range(),
- token,
- }
+impl SyntaxNode for Command {
+ fn range(&self) -> Range {
+ self.token.range()
}
}
-impl SyntaxNode for BibtexWord {
- fn range(&self) -> Range {
- self.range
+impl fmt::Debug for Command {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "Command({})", self.token.text())
}
}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct BibtexCommand {
+#[derive(PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub struct QuotedContent {
pub range: Range,
- pub token: BibtexToken,
+ pub left: Token,
+ pub right: Option<Token>,
}
-impl BibtexCommand {
- pub fn new(token: BibtexToken) -> Self {
- BibtexCommand {
- range: token.range(),
- token,
- }
+impl SyntaxNode for QuotedContent {
+ fn range(&self) -> Range {
+ self.range
}
}
-impl SyntaxNode for BibtexCommand {
- fn range(&self) -> Range {
- self.range
+impl fmt::Debug for QuotedContent {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "QuotedContent")
}
}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct BibtexQuotedContent {
+#[derive(PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub struct BracedContent {
pub range: Range,
- pub left: BibtexToken,
- pub children: Vec<BibtexContent>,
- pub right: Option<BibtexToken>,
-}
-
-impl BibtexQuotedContent {
- pub fn new(
- left: BibtexToken,
- children: Vec<BibtexContent>,
- right: Option<BibtexToken>,
- ) -> Self {
- let end = if let Some(ref right) = right {
- right.end()
- } else if !children.is_empty() {
- children[children.len() - 1].end()
- } else {
- left.end()
- };
-
- BibtexQuotedContent {
- range: Range::new(left.start(), end),
- left,
- children,
- right,
- }
- }
+ pub left: Token,
+ pub right: Option<Token>,
}
-impl SyntaxNode for BibtexQuotedContent {
+impl SyntaxNode for BracedContent {
fn range(&self) -> Range {
self.range
}
}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct BibtexBracedContent {
- pub range: Range,
- pub left: BibtexToken,
- pub children: Vec<BibtexContent>,
- pub right: Option<BibtexToken>,
-}
-
-impl BibtexBracedContent {
- pub fn new(
- left: BibtexToken,
- children: Vec<BibtexContent>,
- right: Option<BibtexToken>,
- ) -> Self {
- let end = if let Some(ref right) = right {
- right.end()
- } else if !children.is_empty() {
- children[children.len() - 1].end()
- } else {
- left.end()
- };
-
- BibtexBracedContent {
- range: Range::new(left.start(), end),
- left,
- children,
- right,
- }
+impl fmt::Debug for BracedContent {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "BracedContent")
}
}
-impl SyntaxNode for BibtexBracedContent {
+#[derive(PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub struct Concat {
+ pub range: Range,
+ pub operator: Token,
+}
+
+impl SyntaxNode for Concat {
fn range(&self) -> Range {
self.range
}
}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct BibtexConcat {
- pub range: Range,
- pub left: BibtexContent,
- pub operator: BibtexToken,
- pub right: Option<BibtexContent>,
+impl fmt::Debug for Concat {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "Concat")
+ }
}
-impl BibtexConcat {
- pub fn new(left: BibtexContent, operator: BibtexToken, right: Option<BibtexContent>) -> Self {
- let end = if let Some(ref right) = right {
- right.end()
- } else {
- operator.end()
- };
-
- BibtexConcat {
- range: Range::new(left.start(), end),
- left,
- operator,
- right,
- }
- }
+#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub enum Node {
+ Root(Root),
+ Comment(Comment),
+ Preamble(Box<Preamble>),
+ String(Box<String>),
+ Entry(Box<Entry>),
+ Field(Box<Field>),
+ Word(Word),
+ Command(Command),
+ QuotedContent(QuotedContent),
+ BracedContent(BracedContent),
+ Concat(Concat),
}
-impl SyntaxNode for BibtexConcat {
+impl SyntaxNode for Node {
fn range(&self) -> Range {
- self.range
+ match self {
+ Self::Root(root) => root.range(),
+ Self::Comment(comment) => comment.range(),
+ Self::Preamble(preamble) => preamble.range(),
+ Self::String(string) => string.range(),
+ Self::Entry(entry) => entry.range(),
+ Self::Field(field) => field.range(),
+ Self::Word(word) => word.range(),
+ Self::Command(cmd) => cmd.range(),
+ Self::QuotedContent(content) => content.range(),
+ Self::BracedContent(content) => content.range(),
+ Self::Concat(concat) => concat.range(),
+ }
}
}
-pub trait BibtexVisitor<'a> {
- fn visit_root(&mut self, root: &'a BibtexRoot);
-
- fn visit_comment(&mut self, comment: &'a BibtexComment);
-
- fn visit_preamble(&mut self, preamble: &'a BibtexPreamble);
-
- fn visit_string(&mut self, string: &'a BibtexString);
-
- fn visit_entry(&mut self, entry: &'a BibtexEntry);
-
- fn visit_field(&mut self, field: &'a BibtexField);
-
- fn visit_word(&mut self, word: &'a BibtexWord);
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Tree {
+ pub graph: Graph<Node, ()>,
+ pub root: NodeIndex,
+}
- fn visit_command(&mut self, command: &'a BibtexCommand);
+impl Tree {
+ pub fn children(&self, parent: NodeIndex) -> impl Iterator<Item = NodeIndex> {
+ self.graph
+ .neighbors(parent)
+ .sorted_by_key(|child| self.graph[*child].start())
+ }
- fn visit_quoted_content(&mut self, content: &'a BibtexQuotedContent);
+ pub fn has_children(&self, parent: NodeIndex) -> bool {
+ self.children(parent).next().is_some()
+ }
- fn visit_braced_content(&mut self, content: &'a BibtexBracedContent);
+ pub fn walk<'a, V: Visitor<'a>>(&'a self, visitor: &mut V, parent: NodeIndex) {
+ for child in self.children(parent) {
+ visitor.visit(self, child);
+ }
+ }
- fn visit_concat(&mut self, concat: &'a BibtexConcat);
-}
+ pub fn find(&self, pos: Position) -> Vec<NodeIndex> {
+ let mut finder = Finder::new(pos);
+ finder.visit(self, self.root);
+ finder.results
+ }
-pub struct BibtexWalker;
+ pub fn as_preamble(&self, node: NodeIndex) -> Option<&Preamble> {
+ if let Node::Preamble(preamble) = &self.graph[node] {
+ Some(preamble)
+ } else {
+ None
+ }
+ }
-impl BibtexWalker {
- pub fn walk_root<'a, T: BibtexVisitor<'a>>(visitor: &mut T, root: &'a BibtexRoot) {
- for declaration in &root.children {
- declaration.accept(visitor);
+ pub fn as_string(&self, node: NodeIndex) -> Option<&String> {
+ if let Node::String(string) = &self.graph[node] {
+ Some(string)
+ } else {
+ None
}
}
- pub fn walk_preamble<'a, T: BibtexVisitor<'a>>(visitor: &mut T, preamble: &'a BibtexPreamble) {
- if let Some(ref content) = preamble.content {
- content.accept(visitor);
+ pub fn as_entry(&self, node: NodeIndex) -> Option<&Entry> {
+ if let Node::Entry(entry) = &self.graph[node] {
+ Some(entry)
+ } else {
+ None
}
}
- pub fn walk_string<'a, T: BibtexVisitor<'a>>(visitor: &mut T, string: &'a BibtexString) {
- if let Some(ref value) = string.value {
- value.accept(visitor);
+ pub fn as_field(&self, node: NodeIndex) -> Option<&Field> {
+ if let Node::Field(field) = &self.graph[node] {
+ Some(field)
+ } else {
+ None
}
}
- pub fn walk_entry<'a, T: BibtexVisitor<'a>>(visitor: &mut T, entry: &'a BibtexEntry) {
- for field in &entry.fields {
- visitor.visit_field(field);
+ pub fn as_command(&self, node: NodeIndex) -> Option<&Command> {
+ if let Node::Command(cmd) = &self.graph[node] {
+ Some(cmd)
+ } else {
+ None
}
}
- pub fn walk_field<'a, T: BibtexVisitor<'a>>(visitor: &mut T, field: &'a BibtexField) {
- if let Some(ref content) = field.content {
- content.accept(visitor);
+ pub fn as_word(&self, node: NodeIndex) -> Option<&Word> {
+ if let Node::Word(word) = &self.graph[node] {
+ Some(word)
+ } else {
+ None
}
}
- pub fn walk_quoted_content<'a, T: BibtexVisitor<'a>>(
- visitor: &mut T,
- content: &'a BibtexQuotedContent,
- ) {
- for child in &content.children {
- child.accept(visitor);
+ pub fn entry_by_key(&self, key: &str) -> Option<NodeIndex> {
+ for node in self.children(self.root) {
+ if let Some(entry) = self.as_entry(node) {
+ if entry.key.as_ref().map(Token::text) == Some(key) {
+ return Some(node);
+ }
+ }
+ }
+ None
+ }
+
+ pub fn field_by_name(&self, parent: NodeIndex, name: &str) -> Option<NodeIndex> {
+ let name = name.to_lowercase();
+ self.as_entry(parent)?;
+ for node in self.children(parent) {
+ if let Some(field) = self.as_field(node) {
+ if field.name.text() == name {
+ return Some(node);
+ }
+ }
}
+ None
+ }
+
+ pub fn crossref(&self, entry: NodeIndex) -> Option<NodeIndex> {
+ let field = self.field_by_name(entry, "crossref")?;
+ let content = self.children(field).next()?;
+ let key = self.as_word(self.children(content).next()?)?;
+ self.entry_by_key(key.token.text())
}
+}
+
+pub trait Visitor<'a> {
+ fn visit(&mut self, tree: &'a Tree, node: NodeIndex);
+}
- pub fn walk_braced_content<'a, T: BibtexVisitor<'a>>(
- visitor: &mut T,
- content: &'a BibtexBracedContent,
- ) {
- for child in &content.children {
- child.accept(visitor);
+#[derive(Debug)]
+struct Finder {
+ position: Position,
+ results: Vec<NodeIndex>,
+}
+
+impl Finder {
+ fn new(position: Position) -> Self {
+ Self {
+ position,
+ results: Vec::new(),
}
}
+}
- pub fn walk_concat<'a, T: BibtexVisitor<'a>>(visitor: &mut T, concat: &'a BibtexConcat) {
- concat.left.accept(visitor);
- if let Some(ref right) = concat.right {
- right.accept(visitor);
+impl<'a> Visitor<'a> for Finder {
+ fn visit(&mut self, tree: &'a Tree, node: NodeIndex) {
+ if tree.graph[node].range().contains(self.position) {
+ self.results.push(node);
+ tree.walk(self, node);
}
}
}
diff --git a/support/texlab/src/syntax/bibtex/finder.rs b/support/texlab/src/syntax/bibtex/finder.rs
deleted file mode 100644
index acc46c6f45..0000000000
--- a/support/texlab/src/syntax/bibtex/finder.rs
+++ /dev/null
@@ -1,110 +0,0 @@
-use super::ast::*;
-use crate::range::RangeExt;
-use crate::syntax::text::SyntaxNode;
-use lsp_types::Position;
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub enum BibtexNode<'a> {
- Root(&'a BibtexRoot),
- Preamble(&'a BibtexPreamble),
- String(&'a BibtexString),
- Entry(&'a BibtexEntry),
- Comment(&'a BibtexComment),
- Field(&'a BibtexField),
- Word(&'a BibtexWord),
- Command(&'a BibtexCommand),
- QuotedContent(&'a BibtexQuotedContent),
- BracedContent(&'a BibtexBracedContent),
- Concat(&'a BibtexConcat),
-}
-
-#[derive(Debug)]
-pub struct BibtexFinder<'a> {
- pub position: Position,
- pub results: Vec<BibtexNode<'a>>,
-}
-
-impl<'a> BibtexFinder<'a> {
- pub fn new(position: Position) -> Self {
- BibtexFinder {
- position,
- results: Vec::new(),
- }
- }
-}
-
-impl<'a> BibtexVisitor<'a> for BibtexFinder<'a> {
- fn visit_root(&mut self, root: &'a BibtexRoot) {
- if root.range().contains(self.position) {
- self.results.push(BibtexNode::Root(root));
- BibtexWalker::walk_root(self, root);
- }
- }
-
- fn visit_comment(&mut self, comment: &'a BibtexComment) {
- if comment.range.contains(self.position) {
- self.results.push(BibtexNode::Comment(comment));
- }
- }
-
- fn visit_preamble(&mut self, preamble: &'a BibtexPreamble) {
- if preamble.range.contains(self.position) {
- self.results.push(BibtexNode::Preamble(preamble));
- BibtexWalker::walk_preamble(self, preamble);
- }
- }
-
- fn visit_string(&mut self, string: &'a BibtexString) {
- if string.range.contains(self.position) {
- self.results.push(BibtexNode::String(string));
- BibtexWalker::walk_string(self, string);
- }
- }
-
- fn visit_entry(&mut self, entry: &'a BibtexEntry) {
- if entry.range.contains(self.position) {
- self.results.push(BibtexNode::Entry(entry));
- BibtexWalker::walk_entry(self, entry);
- }
- }
-
- fn visit_field(&mut self, field: &'a BibtexField) {
- if field.range.contains(self.position) {
- self.results.push(BibtexNode::Field(field));
- BibtexWalker::walk_field(self, field);
- }
- }
-
- fn visit_word(&mut self, word: &'a BibtexWord) {
- if word.range.contains(self.position) {
- self.results.push(BibtexNode::Word(word));
- }
- }
-
- fn visit_command(&mut self, command: &'a BibtexCommand) {
- if command.range.contains(self.position) {
- self.results.push(BibtexNode::Command(command));
- }
- }
-
- fn visit_quoted_content(&mut self, content: &'a BibtexQuotedContent) {
- if content.range.contains(self.position) {
- self.results.push(BibtexNode::QuotedContent(content));
- BibtexWalker::walk_quoted_content(self, content);
- }
- }
-
- fn visit_braced_content(&mut self, content: &'a BibtexBracedContent) {
- if content.range.contains(self.position) {
- self.results.push(BibtexNode::BracedContent(content));
- BibtexWalker::walk_braced_content(self, content);
- }
- }
-
- fn visit_concat(&mut self, concat: &'a BibtexConcat) {
- if concat.range.contains(self.position) {
- self.results.push(BibtexNode::Concat(concat));
- BibtexWalker::walk_concat(self, concat);
- }
- }
-}
diff --git a/support/texlab/src/syntax/bibtex/formatter.rs b/support/texlab/src/syntax/bibtex/formatter.rs
new file mode 100644
index 0000000000..d4965e7cd4
--- /dev/null
+++ b/support/texlab/src/syntax/bibtex/formatter.rs
@@ -0,0 +1,329 @@
+use super::ast::*;
+use crate::{protocol::BibtexFormattingOptions, syntax::text::SyntaxNode};
+use petgraph::graph::NodeIndex;
+use std::{i32, string::String as StdString};
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub struct FormattingParams<'a> {
+ pub tab_size: usize,
+ pub insert_spaces: bool,
+ pub options: &'a BibtexFormattingOptions,
+}
+
+impl<'a> FormattingParams<'a> {
+ fn line_length(self) -> i32 {
+ let line_length = self.options.line_length.unwrap_or(120);
+ if line_length <= 0 {
+ i32::MAX
+ } else {
+ line_length
+ }
+ }
+
+ fn indent(self) -> StdString {
+ if self.insert_spaces {
+ let mut buffer = StdString::new();
+ for _ in 0..self.tab_size {
+ buffer.push(' ');
+ }
+ buffer
+ } else {
+ "\t".into()
+ }
+ }
+}
+
+#[derive(Debug, Clone)]
+struct Formatter<'a> {
+ params: FormattingParams<'a>,
+ indent: StdString,
+ output: StdString,
+ align: Vec<usize>,
+}
+
+impl<'a> Formatter<'a> {
+ fn new(params: FormattingParams<'a>) -> Self {
+ Self {
+ params,
+ indent: params.indent(),
+ output: StdString::new(),
+ align: Vec::new(),
+ }
+ }
+
+ fn visit_token_lowercase(&mut self, token: &Token) {
+ self.output.push_str(token.text().to_lowercase().as_ref());
+ }
+
+ fn should_insert_space(previous: &Token, current: &Token) -> bool {
+ previous.start().line != current.start().line
+ || previous.end().character < current.start().character
+ }
+}
+
+impl<'a, 'b> Visitor<'b> for Formatter<'a> {
+ fn visit(&mut self, tree: &'b Tree, node: NodeIndex) {
+ match &tree.graph[node] {
+ Node::Root(_) => tree.walk(self, node),
+ Node::Comment(comment) => self.output.push_str(comment.token.text()),
+ Node::Preamble(preamble) => {
+ self.visit_token_lowercase(&preamble.ty);
+ self.output.push('{');
+ if tree.has_children(node) {
+ self.align.push(self.output.chars().count());
+ tree.walk(self, node);
+ self.output.push('}');
+ }
+ }
+ Node::String(string) => {
+ self.visit_token_lowercase(&string.ty);
+ self.output.push('{');
+ if let Some(name) = &string.name {
+ self.output.push_str(name.text());
+ self.output.push_str(" = ");
+ if tree.has_children(node) {
+ self.align.push(self.output.chars().count());
+ tree.walk(self, node);
+ self.output.push('}');
+ }
+ }
+ }
+ Node::Entry(entry) => {
+ self.visit_token_lowercase(&entry.ty);
+ self.output.push('{');
+ if let Some(key) = &entry.key {
+ self.output.push_str(key.text());
+ self.output.push(',');
+ self.output.push('\n');
+ tree.walk(self, node);
+ self.output.push('}');
+ }
+ }
+ Node::Field(field) => {
+ self.output.push_str(&self.indent);
+ self.visit_token_lowercase(&field.name);
+ self.output.push_str(" = ");
+ if tree.has_children(node) {
+ let count = field.name.text().chars().count();
+ self.align.push(self.params.tab_size as usize + count + 3);
+ tree.walk(self, node);
+ self.output.push(',');
+ self.output.push('\n');
+ }
+ }
+ Node::Word(_)
+ | Node::Command(_)
+ | Node::BracedContent(_)
+ | Node::QuotedContent(_)
+ | Node::Concat(_) => {
+ let mut analyzer = ContentAnalyzer::default();
+ analyzer.visit(tree, node);
+ let tokens = analyzer.tokens;
+ self.output.push_str(tokens[0].text());
+
+ let align = self.align.pop().unwrap_or_default();
+ let mut length = align + tokens[0].text().chars().count();
+ for i in 1..tokens.len() {
+ let previous = tokens[i - 1];
+ let current = tokens[i];
+ let current_length = current.text().chars().count();
+
+ let insert_space = Self::should_insert_space(previous, current);
+ let space_length = if insert_space { 1 } else { 0 };
+
+ if length + current_length + space_length > self.params.line_length() as usize {
+ self.output.push('\n');
+ self.output.push_str(self.indent.as_ref());
+ for _ in 0..=align - self.params.tab_size {
+ self.output.push(' ');
+ }
+ length = align;
+ } else if insert_space {
+ self.output.push(' ');
+ length += 1;
+ }
+ self.output.push_str(current.text());
+ length += current_length;
+ }
+ }
+ }
+ }
+}
+
+#[derive(Debug, Default)]
+struct ContentAnalyzer<'a> {
+ tokens: Vec<&'a Token>,
+}
+
+impl<'a> Visitor<'a> for ContentAnalyzer<'a> {
+ fn visit(&mut self, tree: &'a Tree, node: NodeIndex) {
+ match &tree.graph[node] {
+ Node::Root(_)
+ | Node::Comment(_)
+ | Node::Preamble(_)
+ | Node::String(_)
+ | Node::Entry(_)
+ | Node::Field(_) => tree.walk(self, node),
+ Node::Word(word) => self.tokens.push(&word.token),
+ Node::Command(cmd) => self.tokens.push(&cmd.token),
+ Node::QuotedContent(content) => {
+ self.tokens.push(&content.left);
+ tree.walk(self, node);
+ if let Some(right) = &content.right {
+ self.tokens.push(right);
+ }
+ }
+ Node::BracedContent(content) => {
+ self.tokens.push(&content.left);
+ tree.walk(self, node);
+ if let Some(right) = &content.right {
+ self.tokens.push(right);
+ }
+ }
+ Node::Concat(concat) => {
+ let mut children = tree.children(node);
+ let left = children.next().unwrap();
+ self.visit(tree, left);
+ self.tokens.push(&concat.operator);
+ children.for_each(|right| self.visit(tree, right));
+ }
+ }
+ }
+}
+
+pub fn format(tree: &Tree, node: NodeIndex, params: FormattingParams) -> StdString {
+ let mut formatter = Formatter::new(params);
+ formatter.visit(tree, node);
+ formatter.output
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::syntax::bibtex;
+ use indoc::indoc;
+
+ fn verify(source: &str, expected: &str, line_length: i32) {
+ let tree = bibtex::open(source);
+ let options = BibtexFormattingOptions {
+ line_length: Some(line_length),
+ formatter: None,
+ };
+
+ let mut children = tree.children(tree.root);
+ let declaration = children.next().unwrap();
+ assert_eq!(children.next(), None);
+
+ let actual = format(
+ &tree,
+ declaration,
+ FormattingParams {
+ tab_size: 4,
+ insert_spaces: true,
+ options: &options,
+ },
+ );
+ assert_eq!(actual, expected);
+ }
+
+ #[test]
+ fn wrap_long_lines() {
+ let source =
+ "@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}";
+ let expected = indoc!(
+ "
+ @article{foo,
+ bar = {Lorem ipsum dolor
+ sit amet,
+ consectetur
+ adipiscing elit.},
+ }"
+ );
+ verify(source, expected, 30);
+ }
+
+ #[test]
+ fn line_length_zero() {
+ let source =
+ "@article{foo, bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit.},}";
+ let expected = indoc!(
+ "
+ @article{foo,
+ bar = {Lorem ipsum dolor sit amet, consectetur adipiscing elit.},
+ }"
+ );
+ verify(source, expected, 0);
+ }
+
+ #[test]
+ fn trailing_commas() {
+ let source = "@article{foo, bar = baz}";
+ let expected = indoc!(
+ "
+ @article{foo,
+ bar = baz,
+ }"
+ );
+ verify(source, expected, 30);
+ }
+
+ #[test]
+ fn insert_braces() {
+ let source = "@article{foo, bar = baz,";
+ let expected = indoc!(
+ "
+ @article{foo,
+ bar = baz,
+ }"
+ );
+ verify(source, expected, 30);
+ }
+
+ #[test]
+ fn commands() {
+ let source = "@article{foo, bar = \"\\baz\",}";
+ let expected = indoc!(
+ "@article{foo,
+ bar = \"\\baz\",
+ }"
+ );
+ verify(source, expected, 30);
+ }
+
+ #[test]
+ fn concatenation() {
+ let source = "@article{foo, bar = \"baz\" # \"qux\"}";
+ let expected = indoc!(
+ "
+ @article{foo,
+ bar = \"baz\" # \"qux\",
+ }"
+ );
+ verify(source, expected, 30);
+ }
+
+ #[test]
+ fn parentheses() {
+ let source = "@article(foo,)";
+ let expected = indoc!(
+ "
+ @article{foo,
+ }"
+ );
+ verify(source, expected, 30);
+ }
+
+ #[test]
+ fn string() {
+ let source = "@string{foo=\"bar\"}";
+ let expected = "@string{foo = \"bar\"}";
+ verify(source, expected, 30);
+ }
+
+ #[test]
+ fn preamble() {
+ let source = "@preamble{\n\"foo bar baz\"}";
+ let expected = "@preamble{\"foo bar baz\"}";
+ verify(source, expected, 30);
+ }
+}
diff --git a/support/texlab/src/syntax/bibtex/lexer.rs b/support/texlab/src/syntax/bibtex/lexer.rs
index 8278ef2631..e089b15864 100644
--- a/support/texlab/src/syntax/bibtex/lexer.rs
+++ b/support/texlab/src/syntax/bibtex/lexer.rs
@@ -1,18 +1,19 @@
-use super::ast::{BibtexToken, BibtexTokenKind};
+use super::ast::{Token, TokenKind};
use crate::syntax::text::CharStream;
-pub struct BibtexLexer<'a> {
+#[derive(Debug)]
+pub struct Lexer<'a> {
stream: CharStream<'a>,
}
-impl<'a> BibtexLexer<'a> {
+impl<'a> Lexer<'a> {
pub fn new(text: &'a str) -> Self {
- BibtexLexer {
+ Self {
stream: CharStream::new(text),
}
}
- fn kind(&mut self) -> BibtexToken {
+ fn kind(&mut self) -> Token {
fn is_type_char(c: char) -> bool {
c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z'
}
@@ -24,26 +25,26 @@ impl<'a> BibtexLexer<'a> {
}
let span = self.stream.end_span();
let kind = match span.text.to_lowercase().as_ref() {
- "@preamble" => BibtexTokenKind::PreambleKind,
- "@string" => BibtexTokenKind::StringKind,
- _ => BibtexTokenKind::EntryKind,
+ "@preamble" => TokenKind::PreambleKind,
+ "@string" => TokenKind::StringKind,
+ _ => TokenKind::EntryKind,
};
- BibtexToken::new(span, kind)
+ Token::new(span, kind)
}
- fn single_character(&mut self, kind: BibtexTokenKind) -> BibtexToken {
+ fn single_character(&mut self, kind: TokenKind) -> Token {
self.stream.start_span();
self.stream.next();
let span = self.stream.end_span();
- BibtexToken::new(span, kind)
+ Token::new(span, kind)
}
- fn command(&mut self) -> BibtexToken {
+ fn command(&mut self) -> Token {
let span = self.stream.command();
- BibtexToken::new(span, BibtexTokenKind::Command)
+ Token::new(span, TokenKind::Command)
}
- fn word(&mut self) -> BibtexToken {
+ fn word(&mut self) -> Token {
fn is_word_char(c: char) -> bool {
!c.is_whitespace()
&& c != '@'
@@ -62,25 +63,25 @@ impl<'a> BibtexLexer<'a> {
self.stream.next();
}
let span = self.stream.end_span();
- BibtexToken::new(span, BibtexTokenKind::Word)
+ Token::new(span, TokenKind::Word)
}
}
-impl<'a> Iterator for BibtexLexer<'a> {
- type Item = BibtexToken;
+impl<'a> Iterator for Lexer<'a> {
+ type Item = Token;
- fn next(&mut self) -> Option<BibtexToken> {
+ fn next(&mut self) -> Option<Token> {
loop {
match self.stream.peek() {
Some('@') => return Some(self.kind()),
- Some('=') => return Some(self.single_character(BibtexTokenKind::Assign)),
- Some(',') => return Some(self.single_character(BibtexTokenKind::Comma)),
- Some('#') => return Some(self.single_character(BibtexTokenKind::Concat)),
- Some('"') => return Some(self.single_character(BibtexTokenKind::Quote)),
- Some('{') => return Some(self.single_character(BibtexTokenKind::BeginBrace)),
- Some('}') => return Some(self.single_character(BibtexTokenKind::EndBrace)),
- Some('(') => return Some(self.single_character(BibtexTokenKind::BeginParen)),
- Some(')') => return Some(self.single_character(BibtexTokenKind::EndParen)),
+ Some('=') => return Some(self.single_character(TokenKind::Assign)),
+ Some(',') => return Some(self.single_character(TokenKind::Comma)),
+ Some('#') => return Some(self.single_character(TokenKind::Concat)),
+ Some('"') => return Some(self.single_character(TokenKind::Quote)),
+ Some('{') => return Some(self.single_character(TokenKind::BeginBrace)),
+ Some('}') => return Some(self.single_character(TokenKind::EndBrace)),
+ Some('(') => return Some(self.single_character(TokenKind::BeginParen)),
+ Some(')') => return Some(self.single_character(TokenKind::EndParen)),
Some('\\') => return Some(self.command()),
Some(c) => {
if c.is_whitespace() {
@@ -100,77 +101,73 @@ impl<'a> Iterator for BibtexLexer<'a> {
#[cfg(test)]
mod tests {
use super::*;
- use crate::syntax::text::Span;
- use lsp_types::{Position, Range};
-
- fn verify<'a>(
- lexer: &mut BibtexLexer<'a>,
- line: u64,
- character: u64,
- text: &str,
- kind: BibtexTokenKind,
- ) {
+ use crate::{
+ protocol::{Position, Range},
+ syntax::text::Span,
+ };
+
+ fn verify<'a>(lexer: &mut Lexer<'a>, line: u64, character: u64, text: &str, kind: TokenKind) {
let start = Position::new(line, character);
let end = Position::new(line, character + text.chars().count() as u64);
let range = Range::new(start, end);
let span = Span::new(range, text.to_owned());
- let token = BibtexToken::new(span, kind);
+ let token = Token::new(span, kind);
assert_eq!(Some(token), lexer.next());
}
#[test]
- fn test_word() {
- let mut lexer = BibtexLexer::new("foo bar baz");
- verify(&mut lexer, 0, 0, "foo", BibtexTokenKind::Word);
- verify(&mut lexer, 0, 4, "bar", BibtexTokenKind::Word);
- verify(&mut lexer, 0, 8, "baz", BibtexTokenKind::Word);
+ fn word() {
+ let mut lexer = Lexer::new("foo bar baz");
+ verify(&mut lexer, 0, 0, "foo", TokenKind::Word);
+ verify(&mut lexer, 0, 4, "bar", TokenKind::Word);
+ verify(&mut lexer, 0, 8, "baz", TokenKind::Word);
assert_eq!(None, lexer.next());
}
#[test]
- fn test_command() {
- let mut lexer = BibtexLexer::new("\\foo\\bar@baz");
- verify(&mut lexer, 0, 0, "\\foo", BibtexTokenKind::Command);
- verify(&mut lexer, 0, 4, "\\bar@baz", BibtexTokenKind::Command);
+ fn command() {
+ let mut lexer = Lexer::new("\\foo\\bar@baz");
+ verify(&mut lexer, 0, 0, "\\foo", TokenKind::Command);
+ verify(&mut lexer, 0, 4, "\\bar@baz", TokenKind::Command);
assert_eq!(None, lexer.next());
}
#[test]
- fn test_escape_sequence() {
- let mut lexer = BibtexLexer::new("\\foo*\n\\%\\**");
- verify(&mut lexer, 0, 0, "\\foo*", BibtexTokenKind::Command);
- verify(&mut lexer, 1, 0, "\\%", BibtexTokenKind::Command);
- verify(&mut lexer, 1, 2, "\\*", BibtexTokenKind::Command);
- verify(&mut lexer, 1, 4, "*", BibtexTokenKind::Word);
+ fn escape_sequence() {
+ let mut lexer = Lexer::new("\\foo*\n\\%\\**");
+ verify(&mut lexer, 0, 0, "\\foo*", TokenKind::Command);
+ verify(&mut lexer, 1, 0, "\\%", TokenKind::Command);
+ verify(&mut lexer, 1, 2, "\\*", TokenKind::Command);
+ verify(&mut lexer, 1, 4, "*", TokenKind::Word);
assert_eq!(None, lexer.next());
}
#[test]
- fn test_delimiter() {
- let mut lexer = BibtexLexer::new("{}()\"");
- verify(&mut lexer, 0, 0, "{", BibtexTokenKind::BeginBrace);
- verify(&mut lexer, 0, 1, "}", BibtexTokenKind::EndBrace);
- verify(&mut lexer, 0, 2, "(", BibtexTokenKind::BeginParen);
- verify(&mut lexer, 0, 3, ")", BibtexTokenKind::EndParen);
- verify(&mut lexer, 0, 4, "\"", BibtexTokenKind::Quote);
+ fn delimiter() {
+ let mut lexer = Lexer::new("{}()\"");
+ verify(&mut lexer, 0, 0, "{", TokenKind::BeginBrace);
+ verify(&mut lexer, 0, 1, "}", TokenKind::EndBrace);
+ verify(&mut lexer, 0, 2, "(", TokenKind::BeginParen);
+ verify(&mut lexer, 0, 3, ")", TokenKind::EndParen);
+ verify(&mut lexer, 0, 4, "\"", TokenKind::Quote);
assert_eq!(None, lexer.next());
}
#[test]
- fn test_kind() {
- let mut lexer = BibtexLexer::new("@pReAmBlE\n@article\n@string");
- verify(&mut lexer, 0, 0, "@pReAmBlE", BibtexTokenKind::PreambleKind);
- verify(&mut lexer, 1, 0, "@article", BibtexTokenKind::EntryKind);
- verify(&mut lexer, 2, 0, "@string", BibtexTokenKind::StringKind);
+ fn kind() {
+ let mut lexer = Lexer::new("@pReAmBlE\n@article\n@string");
+ verify(&mut lexer, 0, 0, "@pReAmBlE", TokenKind::PreambleKind);
+ verify(&mut lexer, 1, 0, "@article", TokenKind::EntryKind);
+ verify(&mut lexer, 2, 0, "@string", TokenKind::StringKind);
assert_eq!(None, lexer.next());
}
#[test]
- fn test_operator() {
- let mut lexer = BibtexLexer::new("=,#");
- verify(&mut lexer, 0, 0, "=", BibtexTokenKind::Assign);
- verify(&mut lexer, 0, 1, ",", BibtexTokenKind::Comma);
- verify(&mut lexer, 0, 2, "#", BibtexTokenKind::Concat);
+ fn operator() {
+ let mut lexer = Lexer::new("=,#");
+ verify(&mut lexer, 0, 0, "=", TokenKind::Assign);
+ verify(&mut lexer, 0, 1, ",", TokenKind::Comma);
+ verify(&mut lexer, 0, 2, "#", TokenKind::Concat);
assert_eq!(None, lexer.next());
}
}
diff --git a/support/texlab/src/syntax/bibtex/mod.rs b/support/texlab/src/syntax/bibtex/mod.rs
index 9910390fe7..aa7242c1f7 100644
--- a/support/texlab/src/syntax/bibtex/mod.rs
+++ b/support/texlab/src/syntax/bibtex/mod.rs
@@ -1,75 +1,396 @@
mod ast;
-mod finder;
+mod formatter;
mod lexer;
mod parser;
-use self::lexer::BibtexLexer;
-use self::parser::BibtexParser;
+pub use self::{ast::*, formatter::*};
-pub use self::ast::*;
-pub use self::finder::*;
-use lsp_types::Position;
+use self::{lexer::Lexer, parser::Parser};
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct BibtexSyntaxTree {
- pub root: BibtexRoot,
+pub fn open(text: &str) -> Tree {
+ let lexer = Lexer::new(text);
+ let parser = Parser::new(lexer);
+ parser.parse()
}
-impl BibtexSyntaxTree {
- pub fn entries(&self) -> Vec<&BibtexEntry> {
- let mut entries: Vec<&BibtexEntry> = Vec::new();
- for declaration in &self.root.children {
- if let BibtexDeclaration::Entry(entry) = declaration {
- entries.push(&entry);
- }
- }
- entries
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::{
+ protocol::{Range, RangeExt},
+ syntax::text::SyntaxNode,
+ };
+ use petgraph::graph::NodeIndex;
+
+ #[derive(Debug, Default)]
+ struct TreeTraversal {
+ nodes: Vec<NodeIndex>,
}
- pub fn strings(&self) -> Vec<&BibtexString> {
- let mut strings: Vec<&BibtexString> = Vec::new();
- for declaration in &self.root.children {
- if let BibtexDeclaration::String(string) = declaration {
- strings.push(&string);
- }
+ impl<'a> Visitor<'a> for TreeTraversal {
+ fn visit(&mut self, tree: &Tree, node: NodeIndex) {
+ self.nodes.push(node);
+ tree.walk(self, node);
}
- strings
}
- pub fn find(&self, position: Position) -> Vec<BibtexNode> {
- let mut finder = BibtexFinder::new(position);
- finder.visit_root(&self.root);
- finder.results
- }
+ mod range {
+ use super::*;
+ use indoc::indoc;
- pub fn find_entry(&self, key: &str) -> Option<&BibtexEntry> {
- self.entries()
- .into_iter()
- .find(|entry| entry.key.as_ref().map(BibtexToken::text) == Some(key))
- }
+ fn verify(expected_ranges: Vec<Range>, text: &str) {
+ let tree = open(text.trim());
- pub fn resolve_crossref(&self, entry: &BibtexEntry) -> Option<&BibtexEntry> {
- if let Some(field) = entry.find_field("crossref") {
- if let Some(BibtexContent::BracedContent(content)) = &field.content {
- if let Some(BibtexContent::Word(name)) = content.children.get(0) {
- return self.find_entry(name.token.text());
- }
- }
+ let mut traversal = TreeTraversal::default();
+ traversal.visit(&tree, tree.root);
+ let actual_ranges: Vec<_> = traversal
+ .nodes
+ .into_iter()
+ .map(|node| tree.graph[node].range())
+ .collect();
+
+ assert_eq!(actual_ranges, expected_ranges);
}
- None
- }
-}
-impl From<BibtexRoot> for BibtexSyntaxTree {
- fn from(root: BibtexRoot) -> Self {
- BibtexSyntaxTree { root }
- }
-}
+ #[test]
+ fn empty_document() {
+ verify(vec![Range::new_simple(0, 0, 0, 0)], "");
+ }
+
+ #[test]
+ fn comment() {
+ verify(
+ vec![Range::new_simple(0, 0, 0, 3), Range::new_simple(0, 0, 0, 3)],
+ "foo",
+ );
+ }
+
+ #[test]
+ fn preamble_no_left() {
+ verify(
+ vec![Range::new_simple(0, 0, 0, 9), Range::new_simple(0, 0, 0, 9)],
+ "@preamble",
+ );
+ }
+
+ #[test]
+ fn preamble_no_content() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 10),
+ Range::new_simple(0, 0, 0, 10),
+ ],
+ "@preamble{",
+ );
+ }
+
+ #[test]
+ fn preamble_no_right() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 15),
+ Range::new_simple(0, 0, 0, 15),
+ Range::new_simple(0, 10, 0, 15),
+ Range::new_simple(0, 11, 0, 14),
+ ],
+ r#"@preamble{"foo""#,
+ );
+ }
+
+ #[test]
+ fn preamble_complete() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 16),
+ Range::new_simple(0, 0, 0, 16),
+ Range::new_simple(0, 10, 0, 15),
+ Range::new_simple(0, 11, 0, 14),
+ ],
+ r#"@preamble{"foo"}"#,
+ );
+ }
+
+ #[test]
+ fn string_no_left() {
+ verify(
+ vec![Range::new_simple(0, 0, 0, 7), Range::new_simple(0, 0, 0, 7)],
+ r#"@string"#,
+ );
+ }
+
+ #[test]
+ fn string_no_name() {
+ verify(
+ vec![Range::new_simple(0, 0, 0, 8), Range::new_simple(0, 0, 0, 8)],
+ r#"@string{"#,
+ );
+ }
+
+ #[test]
+ fn string_no_assign() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 11),
+ Range::new_simple(0, 0, 0, 11),
+ ],
+ r#"@string{foo"#,
+ );
+ }
+
+ #[test]
+ fn string_no_value() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 13),
+ Range::new_simple(0, 0, 0, 13),
+ ],
+ r#"@string{foo ="#,
+ );
+ }
+
+ #[test]
+ fn string_no_right() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 19),
+ Range::new_simple(0, 0, 0, 19),
+ Range::new_simple(0, 14, 0, 19),
+ Range::new_simple(0, 15, 0, 18),
+ ],
+ r#"@string{foo = "bar""#,
+ );
+ }
+
+ #[test]
+ fn string_complete() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 20),
+ Range::new_simple(0, 0, 0, 20),
+ Range::new_simple(0, 14, 0, 19),
+ Range::new_simple(0, 15, 0, 18),
+ ],
+ r#"@string{foo = "bar"}"#,
+ );
+ }
-impl From<&str> for BibtexSyntaxTree {
- fn from(text: &str) -> Self {
- let lexer = BibtexLexer::new(text);
- let mut parser = BibtexParser::new(lexer);
- parser.root().into()
+ #[test]
+ fn entry_no_left() {
+ verify(
+ vec![Range::new_simple(0, 0, 0, 8), Range::new_simple(0, 0, 0, 8)],
+ r#"@article"#,
+ );
+ }
+
+ #[test]
+ fn entry_no_key() {
+ verify(
+ vec![Range::new_simple(0, 0, 0, 9), Range::new_simple(0, 0, 0, 9)],
+ r#"@article{"#,
+ );
+ }
+
+ #[test]
+ fn entry_no_comma() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 12),
+ Range::new_simple(0, 0, 0, 12),
+ ],
+ r#"@article{foo"#,
+ );
+ }
+
+ #[test]
+ fn entry_no_right() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 13),
+ Range::new_simple(0, 0, 0, 13),
+ ],
+ r#"@article{foo,"#,
+ );
+ }
+
+ #[test]
+ fn entry_parentheses() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 14),
+ Range::new_simple(0, 0, 0, 14),
+ ],
+ r#"@article(foo,)"#,
+ );
+ }
+
+ #[test]
+ fn field_no_assign() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 1, 10),
+ Range::new_simple(0, 0, 1, 10),
+ Range::new_simple(1, 4, 1, 10),
+ ],
+ indoc!(
+ r#"
+ @article{foo,
+ author
+ "#
+ ),
+ );
+ }
+
+ #[test]
+ fn field_no_value() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 1, 12),
+ Range::new_simple(0, 0, 1, 12),
+ Range::new_simple(1, 4, 1, 12),
+ ],
+ indoc!(
+ r#"
+ @article{foo,
+ author =
+ "#
+ ),
+ );
+ }
+
+ #[test]
+ fn field_no_comma() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 1, 16),
+ Range::new_simple(0, 0, 1, 16),
+ Range::new_simple(1, 4, 1, 16),
+ Range::new_simple(1, 13, 1, 16),
+ ],
+ indoc!(
+ r#"
+ @article{foo,
+ author = bar
+ "#
+ ),
+ );
+ }
+
+ #[test]
+ fn field_complete() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 2, 1),
+ Range::new_simple(0, 0, 2, 1),
+ Range::new_simple(1, 4, 1, 17),
+ Range::new_simple(1, 13, 1, 16),
+ ],
+ indoc!(
+ r#"
+ @article{foo,
+ author = bar,
+ }
+ "#
+ ),
+ );
+ }
+
+ #[test]
+ fn entry_two_fields() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 3, 1),
+ Range::new_simple(0, 0, 3, 1),
+ Range::new_simple(1, 4, 1, 17),
+ Range::new_simple(1, 13, 1, 16),
+ Range::new_simple(2, 4, 2, 16),
+ Range::new_simple(2, 12, 2, 15),
+ ],
+ indoc!(
+ r#"
+ @article{foo,
+ author = bar,
+ title = baz,
+ }
+ "#
+ ),
+ );
+ }
+
+ #[test]
+ fn quoted_content_no_children() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 12),
+ Range::new_simple(0, 0, 0, 12),
+ Range::new_simple(0, 10, 0, 11),
+ ],
+ r#"@preamble{"}"#,
+ );
+ }
+
+ #[test]
+ fn quoted_content_no_right() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 16),
+ Range::new_simple(0, 0, 0, 16),
+ Range::new_simple(0, 10, 0, 15),
+ Range::new_simple(0, 11, 0, 15),
+ ],
+ r#"@preamble{"word}"#,
+ );
+ }
+
+ #[test]
+ fn braced_content_no_children() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 11),
+ Range::new_simple(0, 0, 0, 11),
+ Range::new_simple(0, 10, 0, 11),
+ ],
+ r#"@preamble{{"#,
+ );
+ }
+
+ #[test]
+ fn braced_content_no_right() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 15),
+ Range::new_simple(0, 0, 0, 15),
+ Range::new_simple(0, 10, 0, 15),
+ Range::new_simple(0, 11, 0, 15),
+ ],
+ r#"@preamble{{word"#,
+ );
+ }
+
+ #[test]
+ fn concat_no_right() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 16),
+ Range::new_simple(0, 0, 0, 16),
+ Range::new_simple(0, 10, 0, 15),
+ Range::new_simple(0, 10, 0, 13),
+ ],
+ r#"@preamble{foo #}"#,
+ );
+ }
+
+ #[test]
+ fn concat_complete() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 20),
+ Range::new_simple(0, 0, 0, 20),
+ Range::new_simple(0, 10, 0, 19),
+ Range::new_simple(0, 10, 0, 13),
+ Range::new_simple(0, 16, 0, 19),
+ ],
+ r#"@preamble{foo # bar}"#,
+ );
+ }
}
}
diff --git a/support/texlab/src/syntax/bibtex/parser.rs b/support/texlab/src/syntax/bibtex/parser.rs
index ffc33da545..b23903aeb3 100644
--- a/support/texlab/src/syntax/bibtex/parser.rs
+++ b/support/texlab/src/syntax/bibtex/parser.rs
@@ -1,197 +1,379 @@
use super::ast::*;
+use crate::{
+ protocol::{Range, RangeExt},
+ syntax::text::SyntaxNode,
+};
+use petgraph::graph::{Graph, NodeIndex};
use std::iter::Peekable;
-pub struct BibtexParser<I: Iterator<Item = BibtexToken>> {
+pub struct Parser<I: Iterator<Item = Token>> {
+ graph: Graph<Node, ()>,
tokens: Peekable<I>,
}
-impl<I: Iterator<Item = BibtexToken>> BibtexParser<I> {
+impl<I: Iterator<Item = Token>> Parser<I> {
pub fn new(tokens: I) -> Self {
- BibtexParser {
+ Self {
tokens: tokens.peekable(),
+ graph: Graph::new(),
}
}
- pub fn root(&mut self) -> BibtexRoot {
+ pub fn parse(mut self) -> Tree {
let mut children = Vec::new();
+
while let Some(ref token) = self.tokens.peek() {
match token.kind {
- BibtexTokenKind::PreambleKind => {
- let preamble = Box::new(self.preamble());
- children.push(BibtexDeclaration::Preamble(preamble));
- }
- BibtexTokenKind::StringKind => {
- let string = Box::new(self.string());
- children.push(BibtexDeclaration::String(string));
- }
- BibtexTokenKind::EntryKind => {
- let entry = Box::new(self.entry());
- children.push(BibtexDeclaration::Entry(entry));
- }
- _ => {
- let comment = BibtexComment::new(self.tokens.next().unwrap());
- children.push(BibtexDeclaration::Comment(Box::new(comment)));
- }
+ TokenKind::PreambleKind => children.push(self.preamble()),
+ TokenKind::StringKind => children.push(self.string()),
+ TokenKind::EntryKind => children.push(self.entry()),
+ _ => children.push(self.comment()),
}
}
- BibtexRoot::new(children)
+
+ let range = if children.is_empty() {
+ Range::new_simple(0, 0, 0, 0)
+ } else {
+ let start = self.graph[children[0]].start();
+ let end = self.graph[children[children.len() - 1]].end();
+ Range::new(start, end)
+ };
+
+ let root = self.graph.add_node(Node::Root(Root { range }));
+ self.connect(root, &children);
+ Tree {
+ graph: self.graph,
+ root,
+ }
}
- fn preamble(&mut self) -> BibtexPreamble {
+ fn preamble(&mut self) -> NodeIndex {
let ty = self.tokens.next().unwrap();
- let left = self.expect2(BibtexTokenKind::BeginBrace, BibtexTokenKind::BeginParen);
+ let left = self.expect2(TokenKind::BeginBrace, TokenKind::BeginParen);
if left.is_none() {
- return BibtexPreamble::new(ty, None, None, None);
+ return self.graph.add_node(Node::Preamble(Box::new(Preamble {
+ range: ty.range(),
+ ty,
+ left: None,
+ right: None,
+ })));
}
if !self.can_match_content() {
- return BibtexPreamble::new(ty, left, None, None);
+ return self.graph.add_node(Node::Preamble(Box::new(Preamble {
+ range: Range::new(ty.start(), left.as_ref().unwrap().end()),
+ ty,
+ left,
+ right: None,
+ })));
}
+
let content = self.content();
- let right = self.expect2(BibtexTokenKind::EndBrace, BibtexTokenKind::EndParen);
- BibtexPreamble::new(ty, left, Some(content), right)
+ let right = self.expect2(TokenKind::EndBrace, TokenKind::EndParen);
+ let end = right
+ .as_ref()
+ .map(Token::end)
+ .unwrap_or_else(|| self.graph[content].end());
+
+ let parent = self.graph.add_node(Node::Preamble(Box::new(Preamble {
+ range: Range::new(ty.start(), end),
+ ty,
+ left,
+ right,
+ })));
+ self.graph.add_edge(parent, content, ());
+ parent
}
- fn string(&mut self) -> BibtexString {
+ fn string(&mut self) -> NodeIndex {
let ty = self.tokens.next().unwrap();
- let left = self.expect2(BibtexTokenKind::BeginBrace, BibtexTokenKind::BeginParen);
+ let left = self.expect2(TokenKind::BeginBrace, TokenKind::BeginParen);
if left.is_none() {
- return BibtexString::new(ty, None, None, None, None, None);
+ return self.graph.add_node(Node::String(Box::new(String {
+ range: ty.range(),
+ ty,
+ left: None,
+ name: None,
+ assign: None,
+ right: None,
+ })));
}
- let name = self.expect1(BibtexTokenKind::Word);
+ let name = self.expect1(TokenKind::Word);
if name.is_none() {
- return BibtexString::new(ty, left, None, None, None, None);
+ return self.graph.add_node(Node::String(Box::new(String {
+ range: Range::new(ty.start(), left.as_ref().unwrap().end()),
+ ty,
+ left,
+ name: None,
+ assign: None,
+ right: None,
+ })));
}
- let assign = self.expect1(BibtexTokenKind::Assign);
+ let assign = self.expect1(TokenKind::Assign);
if assign.is_none() {
- return BibtexString::new(ty, left, name, None, None, None);
+ return self.graph.add_node(Node::String(Box::new(String {
+ range: Range::new(ty.start(), name.as_ref().unwrap().end()),
+ ty,
+ left,
+ name,
+ assign: None,
+ right: None,
+ })));
}
if !self.can_match_content() {
- return BibtexString::new(ty, left, name, assign, None, None);
+ return self.graph.add_node(Node::String(Box::new(String {
+ range: Range::new(ty.start(), assign.as_ref().unwrap().end()),
+ ty,
+ left,
+ name,
+ assign,
+ right: None,
+ })));
}
let value = self.content();
- let right = self.expect2(BibtexTokenKind::EndBrace, BibtexTokenKind::EndParen);
- BibtexString::new(ty, left, name, assign, Some(value), right)
+ let right = self.expect2(TokenKind::EndBrace, TokenKind::EndParen);
+ let end = right
+ .as_ref()
+ .map(Token::end)
+ .unwrap_or_else(|| self.graph[value].end());
+
+ let parent = self.graph.add_node(Node::String(Box::new(String {
+ range: Range::new(ty.start(), end),
+ ty,
+ left,
+ name,
+ assign,
+ right,
+ })));
+ self.graph.add_edge(parent, value, ());
+ parent
}
- fn entry(&mut self) -> BibtexEntry {
+ fn entry(&mut self) -> NodeIndex {
let ty = self.tokens.next().unwrap();
- let left = self.expect2(BibtexTokenKind::BeginBrace, BibtexTokenKind::BeginParen);
+ let left = self.expect2(TokenKind::BeginBrace, TokenKind::BeginParen);
if left.is_none() {
- return BibtexEntry::new(ty, None, None, None, Vec::new(), None);
+ return self.graph.add_node(Node::Entry(Box::new(Entry {
+ range: ty.range(),
+ ty,
+ left: None,
+ key: None,
+ comma: None,
+ right: None,
+ })));
}
- let name = self.expect1(BibtexTokenKind::Word);
- if name.is_none() {
- return BibtexEntry::new(ty, left, None, None, Vec::new(), None);
+ let key = self.expect1(TokenKind::Word);
+ if key.is_none() {
+ return self.graph.add_node(Node::Entry(Box::new(Entry {
+ range: Range::new(ty.start(), left.as_ref().unwrap().end()),
+ ty,
+ left,
+ key: None,
+ comma: None,
+ right: None,
+ })));
}
- let comma = self.expect1(BibtexTokenKind::Comma);
+ let comma = self.expect1(TokenKind::Comma);
if comma.is_none() {
- return BibtexEntry::new(ty, left, name, None, Vec::new(), None);
+ return self.graph.add_node(Node::Entry(Box::new(Entry {
+ range: Range::new(ty.start(), key.as_ref().unwrap().end()),
+ ty,
+ left,
+ key,
+ comma: None,
+ right: None,
+ })));
}
let mut fields = Vec::new();
- while self.next_of_kind(BibtexTokenKind::Word) {
+ while self.next_of_kind(TokenKind::Word) {
fields.push(self.field());
}
- let right = self.expect2(BibtexTokenKind::EndBrace, BibtexTokenKind::EndParen);
- BibtexEntry::new(ty, left, name, comma, fields, right)
+ let right = self.expect2(TokenKind::EndBrace, TokenKind::EndParen);
+
+ let end = right
+ .as_ref()
+ .map(Token::end)
+ .or_else(|| fields.last().map(|field| self.graph[*field].end()))
+ .unwrap_or_else(|| comma.as_ref().unwrap().end());
+ let parent = self.graph.add_node(Node::Entry(Box::new(Entry {
+ range: Range::new(ty.start(), end),
+ ty,
+ left,
+ key,
+ comma,
+ right,
+ })));
+ self.connect(parent, &fields);
+ parent
}
- fn field(&mut self) -> BibtexField {
+ fn comment(&mut self) -> NodeIndex {
+ let token = self.tokens.next().unwrap();
+ self.graph.add_node(Node::Comment(Comment { token }))
+ }
+
+ fn field(&mut self) -> NodeIndex {
let name = self.tokens.next().unwrap();
- let assign = self.expect1(BibtexTokenKind::Assign);
+ let assign = self.expect1(TokenKind::Assign);
if assign.is_none() {
- return BibtexField::new(name, None, None, None);
+ return self.graph.add_node(Node::Field(Box::new(Field {
+ range: name.range(),
+ name,
+ assign: None,
+ comma: None,
+ })));
}
if !self.can_match_content() {
- return BibtexField::new(name, assign, None, None);
+ return self.graph.add_node(Node::Field(Box::new(Field {
+ range: Range::new(name.start(), assign.as_ref().unwrap().end()),
+ name,
+ assign,
+ comma: None,
+ })));
}
+
let content = self.content();
- let comma = self.expect1(BibtexTokenKind::Comma);
- BibtexField::new(name, assign, Some(content), comma)
+ let comma = self.expect1(TokenKind::Comma);
+
+ let end = comma
+ .as_ref()
+ .map(Token::end)
+ .unwrap_or_else(|| self.graph[content].end());
+ let parent = self.graph.add_node(Node::Field(Box::new(Field {
+ range: Range::new(name.start(), end),
+ name,
+ assign,
+ comma,
+ })));
+ self.graph.add_edge(parent, content, ());
+ parent
}
- fn content(&mut self) -> BibtexContent {
+ fn content(&mut self) -> NodeIndex {
let token = self.tokens.next().unwrap();
let left = match token.kind {
- BibtexTokenKind::PreambleKind
- | BibtexTokenKind::StringKind
- | BibtexTokenKind::EntryKind
- | BibtexTokenKind::Word
- | BibtexTokenKind::Assign
- | BibtexTokenKind::Comma
- | BibtexTokenKind::BeginParen
- | BibtexTokenKind::EndParen => BibtexContent::Word(BibtexWord::new(token)),
- BibtexTokenKind::Command => BibtexContent::Command(BibtexCommand::new(token)),
- BibtexTokenKind::Quote => {
+ TokenKind::PreambleKind
+ | TokenKind::StringKind
+ | TokenKind::EntryKind
+ | TokenKind::Word
+ | TokenKind::Assign
+ | TokenKind::Comma
+ | TokenKind::BeginParen
+ | TokenKind::EndParen => self.graph.add_node(Node::Word(Word { token })),
+ TokenKind::Command => self.graph.add_node(Node::Command(Command { token })),
+ TokenKind::Quote => {
let mut children = Vec::new();
while self.can_match_content() {
- if self.next_of_kind(BibtexTokenKind::Quote) {
+ if self.next_of_kind(TokenKind::Quote) {
break;
}
children.push(self.content());
}
- let right = self.expect1(BibtexTokenKind::Quote);
- BibtexContent::QuotedContent(BibtexQuotedContent::new(token, children, right))
+ let right = self.expect1(TokenKind::Quote);
+
+ let end = right
+ .as_ref()
+ .map(Token::end)
+ .or_else(|| children.last().map(|child| self.graph[*child].end()))
+ .unwrap_or_else(|| token.end());
+ let parent = self.graph.add_node(Node::QuotedContent(QuotedContent {
+ range: Range::new(token.start(), end),
+ left: token,
+ right,
+ }));
+ self.connect(parent, &children);
+ parent
}
- BibtexTokenKind::BeginBrace => {
+ TokenKind::BeginBrace => {
let mut children = Vec::new();
while self.can_match_content() {
children.push(self.content());
}
- let right = self.expect1(BibtexTokenKind::EndBrace);
- BibtexContent::BracedContent(BibtexBracedContent::new(token, children, right))
+ let right = self.expect1(TokenKind::EndBrace);
+
+ let end = right
+ .as_ref()
+ .map(Token::end)
+ .or_else(|| children.last().map(|child| self.graph[*child].end()))
+ .unwrap_or_else(|| token.end());
+ let parent = self.graph.add_node(Node::BracedContent(BracedContent {
+ range: Range::new(token.start(), end),
+ left: token,
+ right,
+ }));
+ self.connect(parent, &children);
+ parent
}
_ => unreachable!(),
};
- if let Some(operator) = self.expect1(BibtexTokenKind::Concat) {
- let right = if self.can_match_content() {
- Some(self.content())
- } else {
- None
- };
- BibtexContent::Concat(Box::new(BibtexConcat::new(left, operator, right)))
- } else {
- left
+
+ match self.expect1(TokenKind::Concat) {
+ Some(operator) => {
+ if self.can_match_content() {
+ let right = self.content();
+ let parent = self.graph.add_node(Node::Concat(Concat {
+ range: Range::new(self.graph[left].start(), self.graph[right].end()),
+ operator,
+ }));
+ self.graph.add_edge(parent, left, ());
+ self.graph.add_edge(parent, right, ());
+ parent
+ } else {
+ let parent = self.graph.add_node(Node::Concat(Concat {
+ range: Range::new(self.graph[left].start(), operator.end()),
+ operator,
+ }));
+ self.graph.add_edge(parent, left, ());
+ parent
+ }
+ }
+ None => left,
+ }
+ }
+
+ fn connect(&mut self, parent: NodeIndex, children: &[NodeIndex]) {
+ for child in children {
+ self.graph.add_edge(parent, *child, ());
}
}
fn can_match_content(&mut self) -> bool {
if let Some(ref token) = self.tokens.peek() {
match token.kind {
- BibtexTokenKind::PreambleKind
- | BibtexTokenKind::StringKind
- | BibtexTokenKind::EntryKind
- | BibtexTokenKind::Word
- | BibtexTokenKind::Command
- | BibtexTokenKind::Assign
- | BibtexTokenKind::Comma
- | BibtexTokenKind::Quote
- | BibtexTokenKind::BeginBrace
- | BibtexTokenKind::BeginParen
- | BibtexTokenKind::EndParen => true,
- BibtexTokenKind::Concat | BibtexTokenKind::EndBrace => false,
+ TokenKind::PreambleKind
+ | TokenKind::StringKind
+ | TokenKind::EntryKind
+ | TokenKind::Word
+ | TokenKind::Command
+ | TokenKind::Assign
+ | TokenKind::Comma
+ | TokenKind::Quote
+ | TokenKind::BeginBrace
+ | TokenKind::BeginParen
+ | TokenKind::EndParen => true,
+ TokenKind::Concat | TokenKind::EndBrace => false,
}
} else {
false
}
}
- fn expect1(&mut self, kind: BibtexTokenKind) -> Option<BibtexToken> {
+ fn expect1(&mut self, kind: TokenKind) -> Option<Token> {
if let Some(ref token) = self.tokens.peek() {
if token.kind == kind {
return self.tokens.next();
@@ -200,7 +382,7 @@ impl<I: Iterator<Item = BibtexToken>> BibtexParser<I> {
None
}
- fn expect2(&mut self, kind1: BibtexTokenKind, kind2: BibtexTokenKind) -> Option<BibtexToken> {
+ fn expect2(&mut self, kind1: TokenKind, kind2: TokenKind) -> Option<Token> {
if let Some(ref token) = self.tokens.peek() {
if token.kind == kind1 || token.kind == kind2 {
return self.tokens.next();
@@ -209,7 +391,7 @@ impl<I: Iterator<Item = BibtexToken>> BibtexParser<I> {
None
}
- fn next_of_kind(&mut self, kind: BibtexTokenKind) -> bool {
+ fn next_of_kind(&mut self, kind: TokenKind) -> bool {
if let Some(token) = self.tokens.peek() {
token.kind == kind
} else {
diff --git a/support/texlab/src/syntax/generic_ast.rs b/support/texlab/src/syntax/generic_ast.rs
new file mode 100644
index 0000000000..3311460c0a
--- /dev/null
+++ b/support/texlab/src/syntax/generic_ast.rs
@@ -0,0 +1,51 @@
+use serde::{Deserialize, Serialize};
+use std::ops::Index;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
+pub struct AstNodeIndex(usize);
+
+#[derive(Debug, PartialEq, Eq, Clone, Default)]
+pub struct Ast<T> {
+ nodes: Vec<T>,
+ edges: Vec<Vec<AstNodeIndex>>,
+}
+
+impl<T> Ast<T> {
+ pub fn new() -> Self {
+ Self {
+ nodes: Vec::new(),
+ edges: Vec::new(),
+ }
+ }
+
+ pub fn nodes(&self) -> Vec<AstNodeIndex> {
+ let mut nodes = Vec::new();
+ for i in 0..self.nodes.len() {
+ nodes.push(AstNodeIndex(i));
+ }
+ nodes
+ }
+
+ pub fn add_node(&mut self, value: T) -> AstNodeIndex {
+ let node = AstNodeIndex(self.nodes.len());
+ self.nodes.push(value);
+ self.edges.push(Vec::new());
+ node
+ }
+
+ pub fn add_edge(&mut self, parent: AstNodeIndex, child: AstNodeIndex) {
+ self.edges[parent.0].push(child);
+ }
+
+ pub fn children<'a>(&'a self, parent: AstNodeIndex) -> impl Iterator<Item = AstNodeIndex> + 'a {
+ self.edges[parent.0].iter().map(|child| *child)
+ }
+}
+
+impl<T> Index<AstNodeIndex> for Ast<T> {
+ type Output = T;
+
+ fn index(&self, index: AstNodeIndex) -> &Self::Output {
+ &self.nodes[index.0]
+ }
+}
diff --git a/support/texlab/src/syntax/language.rs b/support/texlab/src/syntax/lang_data.rs
index 3618a079fd..4ea7cc44da 100644
--- a/support/texlab/src/syntax/language.rs
+++ b/support/texlab/src/syntax/lang_data.rs
@@ -97,7 +97,7 @@ pub struct LatexIncludeCommand {
pub struct LatexCommandDefinitionCommand {
pub name: String,
pub definition_index: usize,
- pub argument_count_index: usize,
+ pub arg_count_index: usize,
pub implementation_index: usize,
}
@@ -226,6 +226,6 @@ impl LanguageData {
}
pub static LANGUAGE_DATA: Lazy<LanguageData> = Lazy::new(|| {
- const JSON: &str = include_str!("language.json");
+ const JSON: &str = include_str!("../../data/lang_data.json");
serde_json::from_str(JSON).expect("Failed to deserialize language.json")
});
diff --git a/support/texlab/src/syntax/latex/analysis.rs b/support/texlab/src/syntax/latex/analysis.rs
new file mode 100644
index 0000000000..af8b756f31
--- /dev/null
+++ b/support/texlab/src/syntax/latex/analysis.rs
@@ -0,0 +1,913 @@
+use crate::{
+ protocol::{Options, Position, Range, RangeExt, Uri},
+ syntax::{generic_ast::AstNodeIndex, lang_data::*, latex::ast::*, text::SyntaxNode},
+ tex::Resolver,
+};
+use itertools::{iproduct, Itertools};
+use serde::{Deserialize, Serialize};
+use std::{borrow::Cow, ops::Deref, path::Path};
+
+#[derive(Debug, Clone)]
+pub struct SymbolTableParams<'a> {
+ pub tree: Tree,
+ pub uri: &'a Uri,
+ pub resolver: &'a Resolver,
+ pub options: &'a Options,
+ pub current_dir: &'a Path,
+}
+
+#[derive(Debug, Clone)]
+pub struct SymbolTable {
+ pub(crate) tree: Tree,
+ pub commands: Vec<AstNodeIndex>,
+ pub environments: Vec<Environment>,
+ pub is_standalone: bool,
+ pub includes: Vec<Include>,
+ pub imports: Vec<Import>,
+ pub components: Vec<String>,
+ pub citations: Vec<Citation>,
+ pub command_definitions: Vec<CommandDefinition>,
+ pub glossary_entries: Vec<GlossaryEntry>,
+ pub equations: Vec<Equation>,
+ pub inlines: Vec<Inline>,
+ pub math_operators: Vec<MathOperator>,
+ pub theorem_definitions: Vec<TheoremDefinition>,
+ pub sections: Vec<Section>,
+ pub labels: Vec<Label>,
+ pub label_numberings: Vec<LabelNumbering>,
+ pub captions: Vec<Caption>,
+ pub items: Vec<Item>,
+}
+
+impl SymbolTable {
+ pub fn analyze(params: SymbolTableParams) -> Self {
+ let SymbolTableParams {
+ tree,
+ uri,
+ resolver,
+ options,
+ current_dir,
+ } = params;
+
+ let commands: Vec<_> = tree.commands().collect();
+ let ctx = SymbolContext {
+ tree: &tree,
+ commands: &commands,
+ uri,
+ resolver,
+ options,
+ current_dir,
+ };
+
+ let mut environments = None;
+ let mut includes = None;
+ let mut imports = None;
+ let mut citations = None;
+ let mut command_definitions = None;
+ let mut glossary_entries = None;
+ let mut equations = None;
+ let mut inlines = None;
+ let mut math_operators = None;
+ let mut theorem_definitions = None;
+ let mut sections = None;
+ let mut labels = None;
+ let mut label_numberings = None;
+ let mut captions = None;
+ let mut items = None;
+
+ rayon::scope(|s| {
+ s.spawn(|_| environments = Some(Environment::parse(ctx)));
+ s.spawn(|_| includes = Some(Include::parse(ctx)));
+ s.spawn(|_| imports = Some(Import::parse(ctx)));
+ s.spawn(|_| citations = Some(Citation::parse(ctx)));
+ s.spawn(|_| command_definitions = Some(CommandDefinition::parse(ctx)));
+ s.spawn(|_| glossary_entries = Some(GlossaryEntry::parse(ctx)));
+ s.spawn(|_| equations = Some(Equation::parse(ctx)));
+ s.spawn(|_| inlines = Some(Inline::parse(ctx)));
+ s.spawn(|_| math_operators = Some(MathOperator::parse(ctx)));
+ s.spawn(|_| theorem_definitions = Some(TheoremDefinition::parse(ctx)));
+ s.spawn(|_| sections = Some(Section::parse(ctx)));
+ s.spawn(|_| labels = Some(Label::parse(ctx)));
+ s.spawn(|_| label_numberings = Some(LabelNumbering::parse(ctx)));
+ s.spawn(|_| captions = Some(Caption::parse(ctx)));
+ s.spawn(|_| items = Some(Item::parse(ctx)));
+ });
+
+ let is_standalone = environments
+ .as_ref()
+ .unwrap()
+ .iter()
+ .any(|env| env.is_root(&tree));
+
+ let components = includes
+ .as_ref()
+ .unwrap()
+ .iter()
+ .flat_map(|include| include.components(&tree))
+ .collect();
+
+ Self {
+ tree,
+ commands,
+ environments: environments.unwrap(),
+ is_standalone,
+ includes: includes.unwrap(),
+ imports: imports.unwrap(),
+ components,
+ citations: citations.unwrap(),
+ command_definitions: command_definitions.unwrap(),
+ glossary_entries: glossary_entries.unwrap(),
+ equations: equations.unwrap(),
+ inlines: inlines.unwrap(),
+ math_operators: math_operators.unwrap(),
+ theorem_definitions: theorem_definitions.unwrap(),
+ sections: sections.unwrap(),
+ labels: labels.unwrap(),
+ label_numberings: label_numberings.unwrap(),
+ captions: captions.unwrap(),
+ items: items.unwrap(),
+ }
+ }
+
+ pub fn is_direct_child(&self, env: Environment, pos: Position) -> bool {
+ env.range(&self.tree).contains(pos)
+ && !self
+ .environments
+ .iter()
+ .filter(|e| e.left.parent != env.left.parent)
+ .filter(|e| env.range(&self.tree).contains(e.range(&self.tree).start))
+ .any(|e| e.range(&self.tree).contains(pos))
+ }
+
+ pub fn is_enum_item(&self, enumeration: Environment, item: Item) -> bool {
+ let item_range = self.tree[item.parent].range();
+ enumeration.range(&self.tree).contains(item_range.start)
+ && !self
+ .environments
+ .iter()
+ .filter(|env| env.left.parent != enumeration.left.parent)
+ .filter(|env| env.left.is_enum(&self.tree))
+ .filter(|env| {
+ enumeration
+ .range(&self.tree)
+ .contains(env.range(&self.tree).start)
+ })
+ .any(|env| env.range(&self.tree).contains(item_range.start))
+ }
+
+ pub fn find_label_by_range(&self, range: Range) -> Option<&Label> {
+ self.labels
+ .iter()
+ .filter(|label| label.kind == LatexLabelKind::Definition)
+ .filter(|label| label.names(&self).len() == 1)
+ .find(|label| range.contains(self[label.parent].range().start))
+ }
+
+ pub fn find_label_by_environment(&self, env: Environment) -> Option<&Label> {
+ self.labels
+ .iter()
+ .filter(|label| label.kind == LatexLabelKind::Definition)
+ .filter(|label| label.names(&self.tree).len() == 1)
+ .find(|label| self.is_direct_child(env, self.tree[label.parent].start()))
+ }
+}
+
+impl Deref for SymbolTable {
+ type Target = Tree;
+
+ fn deref(&self) -> &Self::Target {
+ &self.tree
+ }
+}
+
+#[derive(Debug, Clone, Copy)]
+pub struct SymbolContext<'a> {
+ tree: &'a Tree,
+ commands: &'a [AstNodeIndex],
+ uri: &'a Uri,
+ resolver: &'a Resolver,
+ options: &'a Options,
+ current_dir: &'a Path,
+}
+
+#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
+pub struct EnvironmentDelimiter {
+ pub parent: AstNodeIndex,
+}
+
+impl EnvironmentDelimiter {
+ pub fn name(self, tree: &Tree) -> Option<&Token> {
+ tree.extract_word(self.parent, GroupKind::Group, 0)
+ }
+
+ pub fn is_math(self, tree: &Tree) -> bool {
+ self.is_special(tree, LANGUAGE_DATA.math_environments.iter())
+ }
+
+ pub fn is_enum(self, tree: &Tree) -> bool {
+ self.is_special(tree, LANGUAGE_DATA.enum_environments.iter())
+ }
+
+ fn is_special<'a, I: Iterator<Item = &'a String>>(self, tree: &Tree, mut values: I) -> bool {
+ match self.name(tree) {
+ Some(name) => values.any(|env| env == name.text()),
+ None => false,
+ }
+ }
+}
+
+#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
+pub struct Environment {
+ pub left: EnvironmentDelimiter,
+ pub right: EnvironmentDelimiter,
+}
+
+impl Environment {
+ pub fn is_root(self, tree: &Tree) -> bool {
+ self.left
+ .name(tree)
+ .iter()
+ .chain(self.right.name(tree).iter())
+ .any(|name| name.text() == "document")
+ }
+
+ pub fn range(self, tree: &Tree) -> Range {
+ let start = tree[self.left.parent].start();
+ let end = tree[self.right.parent].end();
+ Range::new(start, end)
+ }
+
+ fn parse(ctx: SymbolContext) -> Vec<Self> {
+ let mut stack = Vec::new();
+ let mut envs = Vec::new();
+ for parent in ctx.commands {
+ if let Some((delim, delim_cmd)) = Self::parse_delimiter(ctx.tree, *parent) {
+ if delim_cmd.name.text() == "\\begin" {
+ stack.push(delim);
+ } else if let Some(left) = stack.pop() {
+ envs.push(Self { left, right: delim });
+ }
+ }
+ }
+ envs
+ }
+
+ fn parse_delimiter(
+ tree: &Tree,
+ parent: AstNodeIndex,
+ ) -> Option<(EnvironmentDelimiter, &Command)> {
+ let cmd = tree.as_command(parent)?;
+ if cmd.name.text() != "\\begin" && cmd.name.text() != "\\end" {
+ return None;
+ }
+
+ let group = tree.extract_group(parent, GroupKind::Group, 0)?;
+ if tree.extract_word(parent, GroupKind::Group, 0).is_some()
+ || tree.children(group).next().is_none()
+ || tree.as_group(group)?.right.is_none()
+ {
+ Some((EnvironmentDelimiter { parent }, cmd))
+ } else {
+ None
+ }
+ }
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Include {
+ pub parent: AstNodeIndex,
+ pub arg_index: usize,
+ pub kind: LatexIncludeKind,
+ pub all_targets: Vec<Vec<Uri>>,
+ pub include_extension: bool,
+}
+
+impl Include {
+ pub fn paths<'a>(&self, tree: &'a Tree) -> Vec<&'a Token> {
+ tree.extract_comma_separated_words(self.parent, GroupKind::Group, self.arg_index)
+ .unwrap()
+ }
+
+ pub fn components<'a>(&self, tree: &'a Tree) -> impl Iterator<Item = String> + 'a {
+ let kind = self.kind;
+ self.paths(tree)
+ .into_iter()
+ .filter_map(move |path| match kind {
+ LatexIncludeKind::Package => Some(format!("{}.sty", path.text())),
+ LatexIncludeKind::Class => Some(format!("{}.cls", path.text())),
+ LatexIncludeKind::Latex
+ | LatexIncludeKind::Bibliography
+ | LatexIncludeKind::Image
+ | LatexIncludeKind::Svg
+ | LatexIncludeKind::Pdf
+ | LatexIncludeKind::Everything => None,
+ })
+ }
+
+ fn parse(ctx: SymbolContext) -> Vec<Self> {
+ iproduct!(ctx.commands, LANGUAGE_DATA.include_commands.iter())
+ .filter_map(|(parent, desc)| Self::parse_single(ctx, *parent, desc))
+ .collect()
+ }
+
+ fn parse_single(
+ ctx: SymbolContext,
+ parent: AstNodeIndex,
+ desc: &LatexIncludeCommand,
+ ) -> Option<Self> {
+ let cmd = ctx.tree.as_command(parent)?;
+ if cmd.name.text() != desc.name {
+ return None;
+ }
+
+ let mut all_targets = Vec::new();
+ let paths = ctx
+ .tree
+ .extract_comma_separated_words(parent, GroupKind::Group, desc.index)?;
+ for path in paths {
+ let mut targets = Vec::new();
+ let base_url = base_url(ctx)?;
+ targets.push(base_url.join(path.text()).ok()?.into());
+
+ if let Some(extensions) = desc.kind.extensions() {
+ for extension in extensions {
+ let path = format!("{}.{}", path.text(), extension);
+ targets.push(base_url.join(&path).ok()?.into());
+ }
+ }
+
+ if let Some(target) = Self::resolve_distro_file(ctx, desc, path.text()) {
+ targets.push(target);
+ }
+ all_targets.push(targets);
+ }
+
+ let include = Self {
+ parent,
+ arg_index: desc.index,
+ kind: desc.kind,
+ all_targets,
+ include_extension: desc.include_extension,
+ };
+ Some(include)
+ }
+
+ fn resolve_distro_file(
+ ctx: SymbolContext,
+ desc: &LatexIncludeCommand,
+ name: &str,
+ ) -> Option<Uri> {
+ let mut path = ctx.resolver.files_by_name.get(name);
+ if let Some(extensions) = desc.kind.extensions() {
+ for extension in extensions {
+ path = path.or_else(|| {
+ let full_name = format!("{}.{}", name, extension);
+ ctx.resolver.files_by_name.get(&full_name)
+ });
+ }
+ }
+ path.and_then(|p| Uri::from_file_path(p).ok())
+ }
+}
+
+fn base_url(ctx: SymbolContext) -> Option<Uri> {
+ if let Some(root_directory) = ctx
+ .options
+ .latex
+ .as_ref()
+ .and_then(|opts| opts.root_directory.as_ref())
+ {
+ let file_name = ctx.uri.path_segments()?.last()?;
+ let path = ctx.current_dir.join(root_directory).join(file_name);
+ Uri::from_file_path(path).ok()
+ } else {
+ Some(ctx.uri.clone())
+ }
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Import {
+ pub parent: AstNodeIndex,
+ pub targets: Vec<Uri>,
+}
+
+impl Import {
+ pub fn dir<'a>(&self, tree: &'a Tree) -> &'a Token {
+ tree.extract_word(self.parent, GroupKind::Group, 0).unwrap()
+ }
+
+ pub fn file<'a>(&self, tree: &'a Tree) -> &'a Token {
+ tree.extract_word(self.parent, GroupKind::Group, 1).unwrap()
+ }
+
+ fn parse(ctx: SymbolContext) -> Vec<Self> {
+ ctx.commands
+ .iter()
+ .filter_map(|parent| Self::parse_single(ctx, *parent))
+ .collect()
+ }
+
+ fn parse_single(ctx: SymbolContext, parent: AstNodeIndex) -> Option<Self> {
+ let cmd = ctx.tree.as_command(parent)?;
+ if cmd.name.text() != "\\import" && cmd.name.text() != "\\subimport" {
+ return None;
+ }
+
+ let dir = ctx.tree.extract_word(parent, GroupKind::Group, 0)?;
+ let file = ctx.tree.extract_word(parent, GroupKind::Group, 1)?;
+
+ let mut targets = Vec::new();
+ let base_url = base_url(ctx)?.join(dir.text()).ok()?;
+ targets.push(base_url.join(file.text()).ok()?.into());
+ targets.push(base_url.join(&format!("{}.tex", file.text())).ok()?.into());
+ Some(Self { parent, targets })
+ }
+}
+
+#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
+pub struct Citation {
+ parent: AstNodeIndex,
+ arg_index: usize,
+}
+
+impl Citation {
+ pub fn keys(self, tree: &Tree) -> Vec<&Token> {
+ tree.extract_comma_separated_words(self.parent, GroupKind::Group, self.arg_index)
+ .unwrap()
+ }
+
+ fn parse(ctx: SymbolContext) -> Vec<Self> {
+ iproduct!(ctx.commands, LANGUAGE_DATA.citation_commands.iter())
+ .filter_map(|(parent, desc)| Self::parse_single(ctx, *parent, desc))
+ .collect()
+ }
+
+ fn parse_single(
+ ctx: SymbolContext,
+ parent: AstNodeIndex,
+ desc: &LatexCitationCommand,
+ ) -> Option<Self> {
+ let cmd = ctx.tree.as_command(parent)?;
+ if cmd.name.text() != desc.name {
+ return None;
+ }
+
+ ctx.tree
+ .extract_comma_separated_words(parent, GroupKind::Group, desc.index)?;
+
+ Some(Self {
+ parent,
+ arg_index: desc.index,
+ })
+ }
+}
+
+#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
+pub struct CommandDefinition {
+ pub parent: AstNodeIndex,
+ pub definition: AstNodeIndex,
+ pub definition_index: usize,
+ pub implementation: AstNodeIndex,
+ pub implementation_index: usize,
+ pub arg_count_index: usize,
+}
+
+impl CommandDefinition {
+ pub fn definition_name(self, tree: &Tree) -> &str {
+ tree.as_command(self.definition).unwrap().name.text()
+ }
+
+ fn parse(ctx: SymbolContext) -> Vec<Self> {
+ let def = LANGUAGE_DATA.command_definition_commands.iter();
+ iproduct!(ctx.commands, def)
+ .filter_map(|(parent, desc)| Self::parse_single(ctx, *parent, desc))
+ .collect()
+ }
+
+ fn parse_single(
+ ctx: SymbolContext,
+ parent: AstNodeIndex,
+ desc: &LatexCommandDefinitionCommand,
+ ) -> Option<Self> {
+ let cmd = ctx.tree.as_command(parent)?;
+ if cmd.name.text() != desc.name {
+ return None;
+ }
+
+ let group_kind = GroupKind::Group;
+ let implementation =
+ ctx.tree
+ .extract_group(parent, group_kind, desc.implementation_index)?;
+
+ let def_group = ctx
+ .tree
+ .extract_group(parent, group_kind, desc.definition_index)?;
+
+ let mut def_children = ctx.tree.children(def_group);
+ let definition = def_children.next()?;
+ ctx.tree.as_command(definition)?;
+ Some(Self {
+ parent,
+ definition,
+ definition_index: desc.definition_index,
+ implementation,
+ implementation_index: desc.implementation_index,
+ arg_count_index: desc.arg_count_index,
+ })
+ }
+}
+
+#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
+pub struct GlossaryEntry {
+ pub parent: AstNodeIndex,
+ pub label_index: usize,
+ pub kind: LatexGlossaryEntryKind,
+}
+
+impl GlossaryEntry {
+ pub fn label(self, tree: &Tree) -> &Token {
+ tree.extract_word(self.parent, GroupKind::Group, self.label_index)
+ .unwrap()
+ }
+
+ fn parse(ctx: SymbolContext) -> Vec<Self> {
+ let entry = LANGUAGE_DATA.glossary_entry_definition_commands.iter();
+ iproduct!(ctx.commands, entry)
+ .filter_map(|(parent, desc)| Self::parse_single(ctx, *parent, desc))
+ .collect()
+ }
+
+ fn parse_single(
+ ctx: SymbolContext,
+ parent: AstNodeIndex,
+ desc: &LatexGlossaryEntryDefinitionCommand,
+ ) -> Option<Self> {
+ let cmd = ctx.tree.as_command(parent)?;
+ if cmd.name.text() != desc.name {
+ return None;
+ }
+
+ ctx.tree
+ .extract_word(parent, GroupKind::Group, desc.label_index)?;
+
+ Some(Self {
+ parent,
+ label_index: desc.label_index,
+ kind: desc.kind,
+ })
+ }
+}
+
+#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
+pub struct Equation {
+ pub left: AstNodeIndex,
+ pub right: AstNodeIndex,
+}
+
+impl Equation {
+ pub fn range(self, tree: &Tree) -> Range {
+ let start = tree[self.left].start();
+ let end = tree[self.right].end();
+ Range::new(start, end)
+ }
+
+ fn parse(ctx: SymbolContext) -> Vec<Self> {
+ let mut equations = Vec::new();
+ let mut left = None;
+ for node in ctx.commands {
+ let cmd = ctx.tree.as_command(*node).unwrap();
+ let name = cmd.name.text();
+ if name == "\\[" || name == "\\(" {
+ left = Some(node);
+ } else if name == "\\]" || name == "\\)" {
+ if let Some(begin) = left {
+ equations.push(Self {
+ left: *begin,
+ right: *node,
+ });
+ left = None;
+ }
+ }
+ }
+ equations
+ }
+}
+
+#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
+pub struct Inline {
+ pub left: AstNodeIndex,
+ pub right: AstNodeIndex,
+}
+
+impl Inline {
+ pub fn range(self, tree: &Tree) -> Range {
+ let start = tree[self.left].start();
+ let end = tree[self.right].end();
+ Range::new(start, end)
+ }
+
+ fn parse(ctx: SymbolContext) -> Vec<Self> {
+ let mut inlines = Vec::new();
+ let mut left = None;
+ for node in ctx
+ .tree
+ .nodes()
+ .into_iter()
+ .filter(|node| ctx.tree.as_math(*node).is_some())
+ .sorted_by_key(|node| ctx.tree[*node].start())
+ {
+ if let Some(l) = left {
+ inlines.push(Inline {
+ left: l,
+ right: node,
+ });
+ left = None;
+ } else {
+ left = Some(node);
+ }
+ }
+ inlines
+ }
+}
+
+#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
+pub struct MathOperator {
+ pub parent: AstNodeIndex,
+ pub definition: AstNodeIndex,
+ pub definition_index: usize,
+ pub implementation: AstNodeIndex,
+ pub implementation_index: usize,
+}
+
+impl MathOperator {
+ pub fn definition_name(self, tree: &Tree) -> &str {
+ tree.as_command(self.definition).unwrap().name.text()
+ }
+
+ fn parse(ctx: SymbolContext) -> Vec<Self> {
+ iproduct!(ctx.commands, LANGUAGE_DATA.math_operator_commands.iter())
+ .filter_map(|(parent, desc)| Self::parse_single(ctx, *parent, desc))
+ .collect()
+ }
+
+ fn parse_single(
+ ctx: SymbolContext,
+ parent: AstNodeIndex,
+ desc: &LatexMathOperatorCommand,
+ ) -> Option<Self> {
+ let cmd = ctx.tree.as_command(parent)?;
+ if cmd.name.text() != desc.name {
+ return None;
+ }
+
+ let group_kind = GroupKind::Group;
+ let def_group = ctx
+ .tree
+ .extract_group(parent, group_kind, desc.definition_index)?;
+ let implementation =
+ ctx.tree
+ .extract_group(parent, group_kind, desc.implementation_index)?;
+
+ let mut def_children = ctx.tree.children(def_group);
+ let definition = def_children.next()?;
+ Some(Self {
+ parent,
+ definition,
+ definition_index: desc.definition_index,
+ implementation,
+ implementation_index: desc.implementation_index,
+ })
+ }
+}
+
+#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
+pub struct TheoremDefinition {
+ pub parent: AstNodeIndex,
+ pub arg_index: usize,
+}
+
+impl TheoremDefinition {
+ pub fn name(self, tree: &Tree) -> &Token {
+ tree.extract_word(self.parent, GroupKind::Group, self.arg_index)
+ .unwrap()
+ }
+
+ fn parse(ctx: SymbolContext) -> Vec<Self> {
+ let thm = LANGUAGE_DATA.theorem_definition_commands.iter();
+ iproduct!(ctx.commands, thm)
+ .filter_map(|(parent, desc)| Self::parse_single(ctx, *parent, desc))
+ .collect()
+ }
+
+ fn parse_single(
+ ctx: SymbolContext,
+ parent: AstNodeIndex,
+ desc: &LatexTheoremDefinitionCommand,
+ ) -> Option<Self> {
+ let cmd = ctx.tree.as_command(parent)?;
+ if cmd.name.text() != desc.name {
+ return None;
+ }
+
+ let group_kind = GroupKind::Group;
+ ctx.tree.extract_word(parent, group_kind, desc.index)?;
+
+ Some(Self {
+ parent,
+ arg_index: desc.index,
+ })
+ }
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct Section {
+ pub parent: AstNodeIndex,
+ pub arg_index: usize,
+ pub level: i32,
+ pub prefix: Cow<'static, str>,
+}
+
+impl Section {
+ pub fn print(&self, tree: &Tree) -> Option<String> {
+ tree.print_group_content(self.parent, GroupKind::Group, self.arg_index)
+ }
+
+ fn parse(ctx: SymbolContext) -> Vec<Self> {
+ iproduct!(ctx.commands, LANGUAGE_DATA.section_commands.iter())
+ .filter_map(|(parent, desc)| Self::parse_single(ctx, *parent, desc))
+ .collect()
+ }
+
+ fn parse_single(
+ ctx: SymbolContext,
+ parent: AstNodeIndex,
+ desc: &'static LatexSectionCommand,
+ ) -> Option<Self> {
+ let cmd = ctx.tree.as_command(parent)?;
+ if cmd.name.text() != desc.name {
+ return None;
+ }
+
+ let group_kind = GroupKind::Group;
+ ctx.tree.extract_group(parent, group_kind, desc.index)?;
+
+ Some(Self {
+ parent,
+ arg_index: desc.index,
+ level: desc.level,
+ prefix: Cow::from(&desc.prefix),
+ })
+ }
+}
+
+#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
+pub struct Label {
+ pub parent: AstNodeIndex,
+ pub arg_index: usize,
+ pub kind: LatexLabelKind,
+}
+
+impl Label {
+ pub fn names(self, tree: &Tree) -> Vec<&Token> {
+ tree.extract_comma_separated_words(self.parent, GroupKind::Group, self.arg_index)
+ .unwrap()
+ }
+
+ fn parse(ctx: SymbolContext) -> Vec<Self> {
+ iproduct!(ctx.commands, LANGUAGE_DATA.label_commands.iter())
+ .filter_map(|(parent, desc)| Self::parse_single(ctx, *parent, desc))
+ .collect()
+ }
+
+ fn parse_single(
+ ctx: SymbolContext,
+ parent: AstNodeIndex,
+ desc: &LatexLabelCommand,
+ ) -> Option<Self> {
+ let cmd = ctx.tree.as_command(parent)?;
+ if cmd.name.text() != desc.name {
+ return None;
+ }
+
+ ctx.tree
+ .extract_comma_separated_words(parent, GroupKind::Group, desc.index)?;
+
+ Some(Self {
+ parent,
+ arg_index: desc.index,
+ kind: desc.kind,
+ })
+ }
+}
+
+#[derive(Debug, Clone, Serialize, Deserialize)]
+pub struct LabelNumbering {
+ pub parent: AstNodeIndex,
+ pub number: String,
+}
+
+impl LabelNumbering {
+ pub fn name<'a>(&self, tree: &'a Tree) -> &'a Token {
+ tree.extract_word(self.parent, GroupKind::Group, 0).unwrap()
+ }
+
+ fn parse(ctx: SymbolContext) -> Vec<Self> {
+ ctx.commands
+ .iter()
+ .filter_map(|parent| Self::parse_single(ctx, *parent))
+ .collect()
+ }
+
+ fn parse_single(ctx: SymbolContext, parent: AstNodeIndex) -> Option<Self> {
+ let cmd = ctx.tree.as_command(parent)?;
+ if cmd.name.text() != "\\newlabel" {
+ return None;
+ }
+
+ ctx.tree.extract_word(parent, GroupKind::Group, 0)?;
+
+ let arg = ctx.tree.extract_group(parent, GroupKind::Group, 1)?;
+ let mut analyzer = FirstText::default();
+ analyzer.visit(ctx.tree, arg);
+ Some(Self {
+ parent,
+ number: analyzer.text?,
+ })
+ }
+}
+
+#[derive(Debug, Default)]
+struct FirstText {
+ text: Option<String>,
+}
+
+impl Visitor for FirstText {
+ fn visit(&mut self, tree: &Tree, node: AstNodeIndex) {
+ if let Some(text) = tree.as_text(node) {
+ self.text = Some(text.words.iter().map(Token::text).join(" "));
+ }
+
+ if self.text.is_none() {
+ tree.walk(self, node);
+ }
+ }
+}
+
+#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
+pub struct Caption {
+ pub parent: AstNodeIndex,
+ pub arg_index: usize,
+}
+
+impl Caption {
+ pub fn print(self, tree: &Tree) -> Option<String> {
+ tree.print_group_content(self.parent, GroupKind::Group, self.arg_index)
+ }
+
+ fn parse(ctx: SymbolContext) -> Vec<Self> {
+ ctx.commands
+ .iter()
+ .flat_map(|parent| Self::parse_single(ctx, *parent))
+ .collect()
+ }
+
+ fn parse_single(ctx: SymbolContext, parent: AstNodeIndex) -> Option<Self> {
+ let cmd = ctx.tree.as_command(parent)?;
+ if cmd.name.text() != "\\caption" {
+ return None;
+ }
+
+ ctx.tree.extract_group(parent, GroupKind::Group, 0)?;
+ Some(Self {
+ parent,
+ arg_index: 0,
+ })
+ }
+}
+
+#[derive(Debug, Clone, Copy, Serialize, Deserialize)]
+pub struct Item {
+ pub parent: AstNodeIndex,
+}
+
+impl Item {
+ pub fn name(self, tree: &Tree) -> Option<String> {
+ tree.print_group_content(self.parent, GroupKind::Options, 0)
+ }
+
+ fn parse(ctx: SymbolContext) -> Vec<Self> {
+ ctx.commands
+ .iter()
+ .filter_map(|parent| Self::parse_single(ctx, *parent))
+ .collect()
+ }
+
+ fn parse_single(ctx: SymbolContext, parent: AstNodeIndex) -> Option<Self> {
+ let cmd = ctx.tree.as_command(parent)?;
+ if cmd.name.text() != "\\item" {
+ return None;
+ }
+
+ Some(Self { parent })
+ }
+}
diff --git a/support/texlab/src/syntax/latex/ast.rs b/support/texlab/src/syntax/latex/ast.rs
index 0af980b595..ab7c6863e1 100644
--- a/support/texlab/src/syntax/latex/ast.rs
+++ b/support/texlab/src/syntax/latex/ast.rs
@@ -1,11 +1,15 @@
-use crate::range::RangeExt;
-use crate::syntax::text::{Span, SyntaxNode};
-use itertools::Itertools;
-use lsp_types::Range;
-use std::sync::Arc;
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub enum LatexTokenKind {
+use crate::{
+ protocol::{Position, Range, RangeExt},
+ syntax::{
+ generic_ast::{Ast, AstNodeIndex},
+ text::{Span, SyntaxNode},
+ },
+};
+use serde::{Deserialize, Serialize};
+use std::ops::Deref;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
+pub enum TokenKind {
Word,
Command,
Math,
@@ -16,14 +20,14 @@ pub enum LatexTokenKind {
EndOptions,
}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexToken {
+#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub struct Token {
pub span: Span,
- pub kind: LatexTokenKind,
+ pub kind: TokenKind,
}
-impl LatexToken {
- pub fn new(span: Span, kind: LatexTokenKind) -> Self {
+impl Token {
+ pub fn new(span: Span, kind: TokenKind) -> Self {
Self { span, kind }
}
@@ -32,314 +36,379 @@ impl LatexToken {
}
}
-impl SyntaxNode for LatexToken {
+impl SyntaxNode for Token {
fn range(&self) -> Range {
self.span.range()
}
}
-#[derive(Debug, PartialEq, Eq, Clone, Default)]
-pub struct LatexRoot {
- pub children: Vec<LatexContent>,
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
+pub struct Root {
+ pub range: Range,
}
-impl LatexRoot {
- pub fn new(children: Vec<LatexContent>) -> Self {
- Self { children }
+impl SyntaxNode for Root {
+ fn range(&self) -> Range {
+ self.range
}
}
-impl SyntaxNode for LatexRoot {
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Serialize, Deserialize)]
+pub enum GroupKind {
+ Group,
+ Options,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub struct Group {
+ pub range: Range,
+ pub left: Token,
+ pub right: Option<Token>,
+ pub kind: GroupKind,
+}
+
+impl SyntaxNode for Group {
fn range(&self) -> Range {
- if self.children.is_empty() {
- Range::new_simple(0, 0, 0, 0)
- } else {
- Range::new(
- self.children[0].start(),
- self.children[self.children.len() - 1].end(),
- )
- }
+ self.range
}
}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub enum LatexContent {
- Group(Arc<LatexGroup>),
- Command(Arc<LatexCommand>),
- Text(Arc<LatexText>),
- Comma(Arc<LatexComma>),
- Math(Arc<LatexMath>),
+#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub struct Command {
+ pub range: Range,
+ pub name: Token,
}
-impl LatexContent {
- pub fn accept<T: LatexVisitor>(&self, visitor: &mut T) {
- match self {
- LatexContent::Group(group) => visitor.visit_group(Arc::clone(&group)),
- LatexContent::Command(command) => visitor.visit_command(Arc::clone(&command)),
- LatexContent::Text(text) => visitor.visit_text(Arc::clone(&text)),
- LatexContent::Comma(comma) => visitor.visit_comma(Arc::clone(&comma)),
- LatexContent::Math(math) => visitor.visit_math(Arc::clone(&math)),
- }
+impl Command {
+ pub fn short_name_range(&self) -> Range {
+ Range::new_simple(
+ self.name.start().line,
+ self.name.start().character + 1,
+ self.name.end().line,
+ self.name.end().character,
+ )
}
}
-impl SyntaxNode for LatexContent {
+impl SyntaxNode for Command {
fn range(&self) -> Range {
- match self {
- LatexContent::Group(group) => group.range(),
- LatexContent::Command(command) => command.range(),
- LatexContent::Text(text) => text.range(),
- LatexContent::Comma(comma) => comma.range(),
- LatexContent::Math(math) => math.range(),
- }
+ self.range
}
}
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub enum LatexGroupKind {
- Group,
- Options,
+#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub struct Text {
+ pub range: Range,
+ pub words: Vec<Token>,
}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexGroup {
- pub range: Range,
- pub left: LatexToken,
- pub children: Vec<LatexContent>,
- pub right: Option<LatexToken>,
- pub kind: LatexGroupKind,
+impl SyntaxNode for Text {
+ fn range(&self) -> Range {
+ self.range
+ }
}
-impl LatexGroup {
- pub fn new(
- left: LatexToken,
- children: Vec<LatexContent>,
- right: Option<LatexToken>,
- kind: LatexGroupKind,
- ) -> Self {
- let end = if let Some(ref right) = right {
- right.end()
- } else if !children.is_empty() {
- children[children.len() - 1].end()
- } else {
- left.end()
- };
+#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub struct Comma {
+ pub range: Range,
+ pub token: Token,
+}
- Self {
- range: Range::new(left.start(), end),
- left,
- children,
- right,
- kind,
- }
+impl SyntaxNode for Comma {
+ fn range(&self) -> Range {
+ self.range
}
}
-impl SyntaxNode for LatexGroup {
+#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub struct Math {
+ pub range: Range,
+ pub token: Token,
+}
+
+impl SyntaxNode for Math {
fn range(&self) -> Range {
self.range
}
}
+#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
+pub enum Node {
+ Root(Root),
+ Group(Group),
+ Command(Command),
+ Text(Text),
+ Comma(Comma),
+ Math(Math),
+}
+
+impl SyntaxNode for Node {
+ fn range(&self) -> Range {
+ match self {
+ Self::Root(root) => root.range(),
+ Self::Group(group) => group.range(),
+ Self::Command(cmd) => cmd.range(),
+ Self::Text(text) => text.range(),
+ Self::Comma(comma) => comma.range(),
+ Self::Math(math) => math.range(),
+ }
+ }
+}
+
#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexCommand {
- pub range: Range,
- pub name: LatexToken,
- pub options: Vec<Arc<LatexGroup>>,
- pub args: Vec<Arc<LatexGroup>>,
- pub groups: Vec<Arc<LatexGroup>>,
+pub struct Tree {
+ pub inner: Ast<Node>,
+ pub root: AstNodeIndex,
}
-impl LatexCommand {
- pub fn new(
- name: LatexToken,
- options: Vec<Arc<LatexGroup>>,
- args: Vec<Arc<LatexGroup>>,
- ) -> Self {
- let groups: Vec<Arc<LatexGroup>> = args
- .iter()
- .chain(options.iter())
- .sorted_by_key(|group| group.range.start)
- .map(Arc::clone)
- .collect();
-
- let end = if let Some(group) = groups.last() {
- group.end()
- } else {
- name.end()
- };
+impl Deref for Tree {
+ type Target = Ast<Node>;
- Self {
- range: Range::new(name.start(), end),
- name,
- options,
- args,
- groups,
+ fn deref(&self) -> &Self::Target {
+ &self.inner
+ }
+}
+
+impl Tree {
+ pub fn walk<V: Visitor>(&self, visitor: &mut V, parent: AstNodeIndex) {
+ for child in self.children(parent) {
+ visitor.visit(self, child);
}
}
- pub fn short_name_range(&self) -> Range {
- Range::new_simple(
- self.name.start().line,
- self.name.start().character + 1,
- self.name.end().line,
- self.name.end().character,
- )
+ pub fn find(&self, pos: Position) -> Vec<AstNodeIndex> {
+ let mut finder = Finder::new(pos);
+ finder.visit(self, self.root);
+ finder.results
}
- pub fn extract_text(&self, index: usize) -> Option<&LatexText> {
- if self.args.len() > index && self.args[index].children.len() == 1 {
- if let LatexContent::Text(ref text) = self.args[index].children[0] {
- Some(text)
- } else {
- None
- }
+ pub fn find_command_by_short_name_range(&self, pos: Position) -> Option<AstNodeIndex> {
+ self.find(pos).into_iter().find(|node| {
+ self.as_command(*node)
+ .filter(|cmd| {
+ cmd.name.range().contains(pos) && cmd.name.start().character != pos.character
+ })
+ .is_some()
+ })
+ }
+
+ pub fn print(&self, node: AstNodeIndex) -> String {
+ let start_position = self[node].start();
+ let mut printer = Printer::new(start_position);
+ printer.visit(self, node);
+ printer.output
+ }
+
+ pub fn commands<'a>(&'a self) -> impl Iterator<Item = AstNodeIndex> + 'a {
+ self.inner
+ .nodes()
+ .into_iter()
+ .filter(move |node| self.as_command(*node).is_some())
+ }
+
+ pub fn as_group(&self, node: AstNodeIndex) -> Option<&Group> {
+ if let Node::Group(group) = &self[node] {
+ Some(group)
} else {
None
}
}
- pub fn extract_word(&self, index: usize) -> Option<&LatexToken> {
- let text = self.extract_text(index)?;
- if text.words.len() == 1 {
- Some(&text.words[0])
+ pub fn as_command(&self, node: AstNodeIndex) -> Option<&Command> {
+ if let Node::Command(cmd) = &self[node] {
+ Some(cmd)
} else {
None
}
}
- pub fn has_word(&self, index: usize) -> bool {
- self.extract_word(index).is_some()
- }
-
- pub fn extract_comma_separated_words(&self, index: usize) -> Vec<&LatexToken> {
- let mut words = Vec::new();
- for child in &self.args[index].children {
- if let LatexContent::Text(text) = child {
- for word in &text.words {
- words.push(word);
- }
- }
+ pub fn as_text(&self, node: AstNodeIndex) -> Option<&Text> {
+ if let Node::Text(text) = &self[node] {
+ Some(text)
+ } else {
+ None
}
- words
}
- pub fn has_comma_separated_words(&self, index: usize) -> bool {
- if self.args.len() <= index {
- return false;
- }
-
- for node in &self.args[index].children {
- match node {
- LatexContent::Text(_) | LatexContent::Comma(_) => (),
- LatexContent::Command(_) | LatexContent::Group(_) | LatexContent::Math(_) => {
- return false;
- }
- }
+ pub fn as_math(&self, node: AstNodeIndex) -> Option<&Math> {
+ if let Node::Math(math) = &self[node] {
+ Some(math)
+ } else {
+ None
}
- true
}
-}
-impl SyntaxNode for LatexCommand {
- fn range(&self) -> Range {
- self.range
+ pub fn extract_group(
+ &self,
+ parent: AstNodeIndex,
+ group_kind: GroupKind,
+ index: usize,
+ ) -> Option<AstNodeIndex> {
+ self.children(parent)
+ .filter(|child| {
+ self.as_group(*child)
+ .filter(|group| group.kind == group_kind)
+ .is_some()
+ })
+ .nth(index)
}
-}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexText {
- pub range: Range,
- pub words: Vec<LatexToken>,
-}
-
-impl LatexText {
- pub fn new(words: Vec<LatexToken>) -> Self {
- Self {
- range: Range::new(words[0].start(), words[words.len() - 1].end()),
- words,
+ pub fn extract_text(
+ &self,
+ parent: AstNodeIndex,
+ group_kind: GroupKind,
+ index: usize,
+ ) -> Option<&Text> {
+ let group = self.extract_group(parent, group_kind, index)?;
+ let mut contents = self.children(group);
+ let text = self.as_text(contents.next()?);
+ if contents.next().is_none() {
+ text
+ } else {
+ None
}
}
-}
-impl SyntaxNode for LatexText {
- fn range(&self) -> Range {
- self.range
+ pub fn extract_word(
+ &self,
+ parent: AstNodeIndex,
+ group_kind: GroupKind,
+ index: usize,
+ ) -> Option<&Token> {
+ let text = self.extract_text(parent, group_kind, index)?;
+ if text.words.len() == 1 {
+ Some(&text.words[0])
+ } else {
+ None
+ }
}
-}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexComma {
- pub token: LatexToken,
-}
+ pub fn extract_comma_separated_words(
+ &self,
+ parent: AstNodeIndex,
+ group_kind: GroupKind,
+ index: usize,
+ ) -> Option<Vec<&Token>> {
+ let group = self.extract_group(parent, group_kind, index)?;
+ let mut words = Vec::new();
+ for child in self.children(group) {
+ match &self[child] {
+ Node::Root(_) | Node::Group(_) | Node::Command(_) | Node::Math(_) => return None,
+ Node::Text(text) => {
+ for word in &text.words {
+ words.push(word);
+ }
+ }
+ Node::Comma(_) => (),
+ }
+ }
+ Some(words)
+ }
-impl LatexComma {
- pub fn new(token: LatexToken) -> Self {
- Self { token }
+ pub fn print_group_content(
+ &self,
+ parent: AstNodeIndex,
+ group_kind: GroupKind,
+ index: usize,
+ ) -> Option<String> {
+ let arg = self.extract_group(parent, group_kind, index)?;
+ let text = self.print(arg);
+ self.as_group(arg)?.right.as_ref()?;
+ Some(text[1..text.len() - 1].trim().into())
}
}
-impl SyntaxNode for LatexComma {
- fn range(&self) -> Range {
- self.token.range()
- }
+pub trait Visitor {
+ fn visit(&mut self, tree: &Tree, node: AstNodeIndex);
}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexMath {
- pub token: LatexToken,
+#[derive(Debug)]
+struct Finder {
+ position: Position,
+ results: Vec<AstNodeIndex>,
}
-impl LatexMath {
- pub fn new(token: LatexToken) -> Self {
- Self { token }
+impl Finder {
+ fn new(position: Position) -> Self {
+ Self {
+ position,
+ results: Vec::new(),
+ }
}
}
-impl SyntaxNode for LatexMath {
- fn range(&self) -> Range {
- self.token.range()
+impl Visitor for Finder {
+ fn visit(&mut self, tree: &Tree, node: AstNodeIndex) {
+ if tree[node].range().contains(self.position) {
+ self.results.push(node);
+ tree.walk(self, node);
+ }
}
}
-pub trait LatexVisitor {
- fn visit_root(&mut self, root: Arc<LatexRoot>);
-
- fn visit_group(&mut self, group: Arc<LatexGroup>);
-
- fn visit_command(&mut self, command: Arc<LatexCommand>);
-
- fn visit_text(&mut self, text: Arc<LatexText>);
-
- fn visit_comma(&mut self, comma: Arc<LatexComma>);
-
- fn visit_math(&mut self, math: Arc<LatexMath>);
+#[derive(Debug)]
+struct Printer {
+ output: String,
+ position: Position,
}
-pub struct LatexWalker;
-
-impl LatexWalker {
- pub fn walk_root<T: LatexVisitor>(visitor: &mut T, root: Arc<LatexRoot>) {
- for child in &root.children {
- child.accept(visitor);
+impl Printer {
+ fn new(start_position: Position) -> Self {
+ Self {
+ output: String::new(),
+ position: start_position,
}
}
- pub fn walk_group<T: LatexVisitor>(visitor: &mut T, group: Arc<LatexGroup>) {
- for child in &group.children {
- child.accept(visitor);
+ fn synchronize(&mut self, position: Position) {
+ while self.position.line < position.line {
+ self.output.push('\n');
+ self.position.line += 1;
+ self.position.character = 0;
}
- }
- pub fn walk_command<T: LatexVisitor>(visitor: &mut T, command: Arc<LatexCommand>) {
- for arg in &command.groups {
- visitor.visit_group(Arc::clone(&arg));
+ while self.position.character < position.character {
+ self.output.push(' ');
+ self.position.character += 1;
}
- }
- pub fn walk_text<T: LatexVisitor>(_visitor: &mut T, _text: Arc<LatexText>) {}
+ assert_eq!(self.position, position);
+ }
- pub fn walk_comma<T: LatexVisitor>(_visitor: &mut T, _comma: Arc<LatexComma>) {}
+ fn print_token(&mut self, token: &Token) {
+ self.synchronize(token.start());
+ self.output.push_str(token.text());
+ self.position.character += token.end().character - token.start().character;
+ self.synchronize(token.end());
+ }
+}
- pub fn walk_math<T: LatexVisitor>(_visitor: &mut T, _math: Arc<LatexMath>) {}
+impl Visitor for Printer {
+ fn visit(&mut self, tree: &Tree, node: AstNodeIndex) {
+ match &tree[node] {
+ Node::Root(_) => tree.walk(self, node),
+ Node::Group(group) => {
+ self.print_token(&group.left);
+ tree.walk(self, node);
+ if let Some(right) = &group.right {
+ self.print_token(right);
+ }
+ }
+ Node::Command(cmd) => {
+ self.print_token(&cmd.name);
+ tree.walk(self, node);
+ }
+ Node::Text(text) => {
+ for word in &text.words {
+ self.print_token(word);
+ }
+ }
+ Node::Comma(comma) => {
+ self.print_token(&comma.token);
+ }
+ Node::Math(math) => {
+ self.print_token(&math.token);
+ }
+ }
+ }
}
diff --git a/support/texlab/src/syntax/latex/env.rs b/support/texlab/src/syntax/latex/env.rs
deleted file mode 100644
index 163db02ca8..0000000000
--- a/support/texlab/src/syntax/latex/env.rs
+++ /dev/null
@@ -1,123 +0,0 @@
-use super::ast::*;
-use crate::syntax::language::*;
-use crate::syntax::text::SyntaxNode;
-use lsp_types::Range;
-use std::sync::Arc;
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexEnvironmentDelimiter {
- pub command: Arc<LatexCommand>,
-}
-
-impl LatexEnvironmentDelimiter {
- pub fn name(&self) -> Option<&LatexToken> {
- self.command.extract_word(0)
- }
-
- pub fn is_math(&self) -> bool {
- if let Some(name) = self.name() {
- LANGUAGE_DATA
- .math_environments
- .iter()
- .any(|env| env == name.text())
- } else {
- false
- }
- }
-
- pub fn is_enum(&self) -> bool {
- if let Some(name) = self.name() {
- LANGUAGE_DATA
- .enum_environments
- .iter()
- .any(|env| env == name.text())
- } else {
- false
- }
- }
-}
-
-impl SyntaxNode for LatexEnvironmentDelimiter {
- fn range(&self) -> Range {
- self.command.range()
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexEnvironment {
- pub left: LatexEnvironmentDelimiter,
- pub right: LatexEnvironmentDelimiter,
-}
-
-impl LatexEnvironment {
- pub fn is_root(&self) -> bool {
- self.left
- .name()
- .iter()
- .chain(self.right.name().iter())
- .any(|name| name.text() == "document")
- }
-
- fn parse(commands: &[Arc<LatexCommand>]) -> Vec<Self> {
- let mut stack = Vec::new();
- let mut environments = Vec::new();
- for command in commands {
- if let Some(delimiter) = Self::parse_delimiter(command) {
- if delimiter.command.name.text() == "\\begin" {
- stack.push(delimiter);
- } else if let Some(begin) = stack.pop() {
- environments.push(Self {
- left: begin,
- right: delimiter,
- });
- }
- }
- }
- environments
- }
-
- fn parse_delimiter(command: &Arc<LatexCommand>) -> Option<LatexEnvironmentDelimiter> {
- if command.name.text() != "\\begin" && command.name.text() != "\\end" {
- return None;
- }
-
- if command.args.is_empty() {
- return None;
- }
-
- if command.has_word(0)
- || command.args[0].children.is_empty()
- || command.args[0].right.is_none()
- {
- let delimiter = LatexEnvironmentDelimiter {
- command: Arc::clone(&command),
- };
- Some(delimiter)
- } else {
- None
- }
- }
-}
-
-impl SyntaxNode for LatexEnvironment {
- fn range(&self) -> Range {
- Range::new(self.left.start(), self.right.end())
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexEnvironmentInfo {
- pub environments: Vec<LatexEnvironment>,
- pub is_standalone: bool,
-}
-
-impl LatexEnvironmentInfo {
- pub fn parse(commands: &[Arc<LatexCommand>]) -> Self {
- let environments = LatexEnvironment::parse(commands);
- let is_standalone = environments.iter().any(LatexEnvironment::is_root);
- Self {
- environments,
- is_standalone,
- }
- }
-}
diff --git a/support/texlab/src/syntax/latex/finder.rs b/support/texlab/src/syntax/latex/finder.rs
deleted file mode 100644
index b59388dc07..0000000000
--- a/support/texlab/src/syntax/latex/finder.rs
+++ /dev/null
@@ -1,74 +0,0 @@
-use super::ast::*;
-use crate::range::RangeExt;
-use crate::syntax::text::SyntaxNode;
-use lsp_types::Position;
-use std::sync::Arc;
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub enum LatexNode {
- Root(Arc<LatexRoot>),
- Group(Arc<LatexGroup>),
- Command(Arc<LatexCommand>),
- Text(Arc<LatexText>),
- Comma(Arc<LatexComma>),
- Math(Arc<LatexMath>),
-}
-
-#[derive(Debug)]
-pub struct LatexFinder {
- pub position: Position,
- pub results: Vec<LatexNode>,
-}
-
-impl LatexFinder {
- pub fn new(position: Position) -> Self {
- Self {
- position,
- results: Vec::new(),
- }
- }
-}
-
-impl LatexVisitor for LatexFinder {
- fn visit_root(&mut self, root: Arc<LatexRoot>) {
- if root.range().contains(self.position) {
- self.results.push(LatexNode::Root(Arc::clone(&root)));
- LatexWalker::walk_root(self, root);
- }
- }
-
- fn visit_group(&mut self, group: Arc<LatexGroup>) {
- if group.range.contains(self.position) {
- self.results.push(LatexNode::Group(Arc::clone(&group)));
- LatexWalker::walk_group(self, group);
- }
- }
-
- fn visit_command(&mut self, command: Arc<LatexCommand>) {
- if command.range.contains(self.position) {
- self.results.push(LatexNode::Command(Arc::clone(&command)));
- LatexWalker::walk_command(self, command);
- }
- }
-
- fn visit_text(&mut self, text: Arc<LatexText>) {
- if text.range.contains(self.position) {
- self.results.push(LatexNode::Text(Arc::clone(&text)));
- LatexWalker::walk_text(self, text);
- }
- }
-
- fn visit_comma(&mut self, comma: Arc<LatexComma>) {
- if comma.range().contains(self.position) {
- self.results.push(LatexNode::Comma(Arc::clone(&comma)));
- LatexWalker::walk_comma(self, comma);
- }
- }
-
- fn visit_math(&mut self, math: Arc<LatexMath>) {
- if math.range().contains(self.position) {
- self.results.push(LatexNode::Math(Arc::clone(&math)));
- LatexWalker::walk_math(self, math);
- }
- }
-}
diff --git a/support/texlab/src/syntax/latex/glossary.rs b/support/texlab/src/syntax/latex/glossary.rs
deleted file mode 100644
index 14f87ef130..0000000000
--- a/support/texlab/src/syntax/latex/glossary.rs
+++ /dev/null
@@ -1,58 +0,0 @@
-use super::ast::*;
-use crate::syntax::language::*;
-use crate::syntax::text::SyntaxNode;
-use lsp_types::Range;
-use std::sync::Arc;
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexGlossaryEntry {
- pub command: Arc<LatexCommand>,
- pub label_index: usize,
- pub kind: LatexGlossaryEntryKind,
-}
-
-impl SyntaxNode for LatexGlossaryEntry {
- fn range(&self) -> Range {
- self.command.range()
- }
-}
-
-impl LatexGlossaryEntry {
- pub fn label(&self) -> &LatexToken {
- self.command.extract_word(self.label_index).unwrap()
- }
-
- fn parse(commands: &[Arc<LatexCommand>]) -> Vec<Self> {
- let mut entries = Vec::new();
- for command in commands {
- for LatexGlossaryEntryDefinitionCommand {
- name,
- label_index,
- kind,
- } in &LANGUAGE_DATA.glossary_entry_definition_commands
- {
- if command.name.text() == name && command.has_word(*label_index) {
- entries.push(Self {
- command: Arc::clone(&command),
- label_index: *label_index,
- kind: *kind,
- });
- }
- }
- }
- entries
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexGlossaryInfo {
- pub entries: Vec<LatexGlossaryEntry>,
-}
-
-impl LatexGlossaryInfo {
- pub fn parse(commands: &[Arc<LatexCommand>]) -> Self {
- Self {
- entries: LatexGlossaryEntry::parse(commands),
- }
- }
-}
diff --git a/support/texlab/src/syntax/latex/lexer.rs b/support/texlab/src/syntax/latex/lexer.rs
index f753d7afce..e14f1f6d85 100644
--- a/support/texlab/src/syntax/latex/lexer.rs
+++ b/support/texlab/src/syntax/latex/lexer.rs
@@ -1,40 +1,41 @@
-use super::ast::{LatexToken, LatexTokenKind};
+use super::ast::{Token, TokenKind};
use crate::syntax::text::CharStream;
-pub struct LatexLexer<'a> {
+#[derive(Debug)]
+pub struct Lexer<'a> {
stream: CharStream<'a>,
}
-impl<'a> LatexLexer<'a> {
+impl<'a> Lexer<'a> {
pub fn new(text: &'a str) -> Self {
- LatexLexer {
+ Self {
stream: CharStream::new(text),
}
}
- fn single_char(&mut self, kind: LatexTokenKind) -> LatexToken {
+ fn single_char(&mut self, kind: TokenKind) -> Token {
self.stream.start_span();
self.stream.next();
let span = self.stream.end_span();
- LatexToken::new(span, kind)
+ Token::new(span, kind)
}
- fn math(&mut self) -> LatexToken {
+ fn math(&mut self) -> Token {
self.stream.start_span();
self.stream.next();
if self.stream.satifies(|c| *c == '$') {
self.stream.next();
}
let span = self.stream.end_span();
- LatexToken::new(span, LatexTokenKind::Math)
+ Token::new(span, TokenKind::Math)
}
- fn command(&mut self) -> LatexToken {
+ fn command(&mut self) -> Token {
let span = self.stream.command();
- LatexToken::new(span, LatexTokenKind::Command)
+ Token::new(span, TokenKind::Command)
}
- fn word(&mut self) -> LatexToken {
+ fn word(&mut self) -> Token {
self.stream.start_span();
self.stream.next();
while self.stream.satifies(|c| is_word_char(*c)) {
@@ -42,36 +43,36 @@ impl<'a> LatexLexer<'a> {
}
let span = self.stream.end_span();
- LatexToken::new(span, LatexTokenKind::Word)
+ Token::new(span, TokenKind::Word)
}
}
-impl<'a> Iterator for LatexLexer<'a> {
- type Item = LatexToken;
+impl<'a> Iterator for Lexer<'a> {
+ type Item = Token;
- fn next(&mut self) -> Option<LatexToken> {
+ fn next(&mut self) -> Option<Token> {
loop {
match self.stream.peek() {
Some('%') => {
self.stream.skip_rest_of_line();
}
Some('{') => {
- return Some(self.single_char(LatexTokenKind::BeginGroup));
+ return Some(self.single_char(TokenKind::BeginGroup));
}
Some('}') => {
- return Some(self.single_char(LatexTokenKind::EndGroup));
+ return Some(self.single_char(TokenKind::EndGroup));
}
Some('[') => {
- return Some(self.single_char(LatexTokenKind::BeginOptions));
+ return Some(self.single_char(TokenKind::BeginOptions));
}
Some(']') => {
- return Some(self.single_char(LatexTokenKind::EndOptions));
+ return Some(self.single_char(TokenKind::EndOptions));
}
Some('$') => {
return Some(self.math());
}
Some(',') => {
- return Some(self.single_char(LatexTokenKind::Comma));
+ return Some(self.single_char(TokenKind::Comma));
}
Some('\\') => {
return Some(self.command());
@@ -106,74 +107,70 @@ fn is_word_char(c: char) -> bool {
#[cfg(test)]
mod tests {
use super::*;
- use crate::syntax::text::Span;
- use lsp_types::{Position, Range};
-
- fn verify<'a>(
- lexer: &mut LatexLexer<'a>,
- line: u64,
- character: u64,
- text: &str,
- kind: LatexTokenKind,
- ) {
+ use crate::{
+ protocol::{Position, Range},
+ syntax::text::Span,
+ };
+
+ fn verify<'a>(lexer: &mut Lexer<'a>, line: u64, character: u64, text: &str, kind: TokenKind) {
let start = Position::new(line, character);
let end = Position::new(line, character + text.chars().count() as u64);
let range = Range::new(start, end);
let span = Span::new(range, text.to_owned());
- let token = LatexToken::new(span, kind);
+ let token = Token::new(span, kind);
assert_eq!(Some(token), lexer.next());
}
#[test]
- fn test_word() {
- let mut lexer = LatexLexer::new("foo bar baz");
- verify(&mut lexer, 0, 0, "foo", LatexTokenKind::Word);
- verify(&mut lexer, 0, 4, "bar", LatexTokenKind::Word);
- verify(&mut lexer, 0, 8, "baz", LatexTokenKind::Word);
+ fn word() {
+ let mut lexer = Lexer::new("foo bar baz");
+ verify(&mut lexer, 0, 0, "foo", TokenKind::Word);
+ verify(&mut lexer, 0, 4, "bar", TokenKind::Word);
+ verify(&mut lexer, 0, 8, "baz", TokenKind::Word);
assert_eq!(None, lexer.next());
}
#[test]
- fn test_command() {
- let mut lexer = LatexLexer::new("\\foo\\bar@baz\n\\foo*");
- verify(&mut lexer, 0, 0, "\\foo", LatexTokenKind::Command);
- verify(&mut lexer, 0, 4, "\\bar@baz", LatexTokenKind::Command);
- verify(&mut lexer, 1, 0, "\\foo*", LatexTokenKind::Command);
+ fn command() {
+ let mut lexer = Lexer::new("\\foo\\bar@baz\n\\foo*");
+ verify(&mut lexer, 0, 0, "\\foo", TokenKind::Command);
+ verify(&mut lexer, 0, 4, "\\bar@baz", TokenKind::Command);
+ verify(&mut lexer, 1, 0, "\\foo*", TokenKind::Command);
assert_eq!(None, lexer.next());
}
#[test]
- fn test_escape_sequence() {
- let mut lexer = LatexLexer::new("\\%\\**");
- verify(&mut lexer, 0, 0, "\\%", LatexTokenKind::Command);
- verify(&mut lexer, 0, 2, "\\*", LatexTokenKind::Command);
- verify(&mut lexer, 0, 4, "*", LatexTokenKind::Word);
+ fn escape_sequence() {
+ let mut lexer = Lexer::new("\\%\\**");
+ verify(&mut lexer, 0, 0, "\\%", TokenKind::Command);
+ verify(&mut lexer, 0, 2, "\\*", TokenKind::Command);
+ verify(&mut lexer, 0, 4, "*", TokenKind::Word);
assert_eq!(None, lexer.next());
}
#[test]
- fn test_group_delimiter() {
- let mut lexer = LatexLexer::new("{}[]");
- verify(&mut lexer, 0, 0, "{", LatexTokenKind::BeginGroup);
- verify(&mut lexer, 0, 1, "}", LatexTokenKind::EndGroup);
- verify(&mut lexer, 0, 2, "[", LatexTokenKind::BeginOptions);
- verify(&mut lexer, 0, 3, "]", LatexTokenKind::EndOptions);
+ fn group_delimiter() {
+ let mut lexer = Lexer::new("{}[]");
+ verify(&mut lexer, 0, 0, "{", TokenKind::BeginGroup);
+ verify(&mut lexer, 0, 1, "}", TokenKind::EndGroup);
+ verify(&mut lexer, 0, 2, "[", TokenKind::BeginOptions);
+ verify(&mut lexer, 0, 3, "]", TokenKind::EndOptions);
assert_eq!(None, lexer.next());
}
#[test]
- fn test_math() {
- let mut lexer = LatexLexer::new("$$ $ $");
- verify(&mut lexer, 0, 0, "$$", LatexTokenKind::Math);
- verify(&mut lexer, 0, 3, "$", LatexTokenKind::Math);
- verify(&mut lexer, 0, 5, "$", LatexTokenKind::Math);
+ fn math() {
+ let mut lexer = Lexer::new("$$ $ $");
+ verify(&mut lexer, 0, 0, "$$", TokenKind::Math);
+ verify(&mut lexer, 0, 3, "$", TokenKind::Math);
+ verify(&mut lexer, 0, 5, "$", TokenKind::Math);
assert_eq!(None, lexer.next());
}
#[test]
- fn test_line_comment() {
- let mut lexer = LatexLexer::new(" %foo \nfoo");
- verify(&mut lexer, 1, 0, "foo", LatexTokenKind::Word);
+ fn line_comment() {
+ let mut lexer = Lexer::new(" %foo \nfoo");
+ verify(&mut lexer, 1, 0, "foo", TokenKind::Word);
assert_eq!(None, lexer.next());
}
}
diff --git a/support/texlab/src/syntax/latex/math.rs b/support/texlab/src/syntax/latex/math.rs
deleted file mode 100644
index c234232c14..0000000000
--- a/support/texlab/src/syntax/latex/math.rs
+++ /dev/null
@@ -1,199 +0,0 @@
-use super::ast::*;
-use crate::syntax::language::*;
-use crate::syntax::text::SyntaxNode;
-use lsp_types::Range;
-use std::sync::Arc;
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexEquation {
- pub left: Arc<LatexCommand>,
- pub right: Arc<LatexCommand>,
-}
-
-impl LatexEquation {
- fn parse(commands: &[Arc<LatexCommand>]) -> Vec<Self> {
- let mut equations = Vec::new();
- let mut left = None;
- for command in commands {
- let name = command.name.text();
- if name == "\\[" || name == "\\(" {
- left = Some(command);
- } else if name == "\\]" || name == "\\)" {
- if let Some(begin) = left {
- equations.push(Self {
- left: Arc::clone(&begin),
- right: Arc::clone(&command),
- });
- left = None;
- }
- }
- }
- equations
- }
-}
-
-impl SyntaxNode for LatexEquation {
- fn range(&self) -> Range {
- Range::new(self.left.start(), self.right.end())
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexInline {
- pub left: Arc<LatexMath>,
- pub right: Arc<LatexMath>,
-}
-
-impl LatexInline {
- fn parse(root: Arc<LatexRoot>) -> Vec<Self> {
- let mut analyzer = LatexInlineAnalyzer::default();
- analyzer.visit_root(root);
- analyzer.inlines
- }
-}
-
-impl SyntaxNode for LatexInline {
- fn range(&self) -> Range {
- Range::new(self.left.start(), self.right.end())
- }
-}
-
-#[derive(Debug, Default)]
-struct LatexInlineAnalyzer {
- inlines: Vec<LatexInline>,
- left: Option<Arc<LatexMath>>,
-}
-
-impl LatexVisitor for LatexInlineAnalyzer {
- fn visit_root(&mut self, root: Arc<LatexRoot>) {
- LatexWalker::walk_root(self, root);
- }
-
- fn visit_group(&mut self, group: Arc<LatexGroup>) {
- LatexWalker::walk_group(self, group);
- }
-
- fn visit_command(&mut self, command: Arc<LatexCommand>) {
- LatexWalker::walk_command(self, command);
- }
-
- fn visit_text(&mut self, text: Arc<LatexText>) {
- LatexWalker::walk_text(self, text);
- }
-
- fn visit_comma(&mut self, comma: Arc<LatexComma>) {
- LatexWalker::walk_comma(self, comma);
- }
-
- fn visit_math(&mut self, math: Arc<LatexMath>) {
- if let Some(left) = &self.left {
- let inline = LatexInline {
- left: Arc::clone(&left),
- right: Arc::clone(&math),
- };
- self.inlines.push(inline);
- self.left = None;
- } else {
- self.left = Some(Arc::clone(&math));
- }
- LatexWalker::walk_math(self, math);
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexMathOperator {
- pub command: Arc<LatexCommand>,
- pub definition: Arc<LatexCommand>,
- pub definition_index: usize,
- pub implementation_index: usize,
-}
-
-impl LatexMathOperator {
- fn parse(commands: &[Arc<LatexCommand>]) -> Vec<Self> {
- let mut operators = Vec::new();
- for command in commands {
- for LatexMathOperatorCommand {
- name,
- definition_index,
- implementation_index,
- } in &LANGUAGE_DATA.math_operator_commands
- {
- if command.name.text() == name
- && command.args.len() > *definition_index
- && command.args.len() > *implementation_index
- {
- let definition = command.args[0].children.iter().next();
- if let Some(LatexContent::Command(definition)) = definition {
- operators.push(Self {
- command: Arc::clone(command),
- definition: Arc::clone(definition),
- definition_index: *definition_index,
- implementation_index: *implementation_index,
- })
- }
- }
- }
- }
- operators
- }
-}
-
-impl SyntaxNode for LatexMathOperator {
- fn range(&self) -> Range {
- self.command.range()
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexTheoremDefinition {
- pub command: Arc<LatexCommand>,
- pub index: usize,
-}
-
-impl LatexTheoremDefinition {
- pub fn name(&self) -> &LatexToken {
- self.command.extract_word(self.index).unwrap()
- }
-
- fn parse(commands: &[Arc<LatexCommand>]) -> Vec<Self> {
- let mut definitions = Vec::new();
- for command in commands {
- for LatexTheoremDefinitionCommand { name, index } in
- &LANGUAGE_DATA.theorem_definition_commands
- {
- if command.name.text() == name && command.has_word(*index) {
- definitions.push(Self {
- command: Arc::clone(&command),
- index: *index,
- });
- }
- }
- }
- definitions
- }
-}
-
-impl SyntaxNode for LatexTheoremDefinition {
- fn range(&self) -> Range {
- self.command.range()
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexMathInfo {
- pub equations: Vec<LatexEquation>,
- pub inlines: Vec<LatexInline>,
- pub operators: Vec<LatexMathOperator>,
- pub theorem_definitions: Vec<LatexTheoremDefinition>,
-}
-
-impl LatexMathInfo {
- pub fn parse(root: Arc<LatexRoot>, commands: &[Arc<LatexCommand>]) -> Self {
- Self {
- equations: LatexEquation::parse(commands),
- inlines: LatexInline::parse(root),
- operators: LatexMathOperator::parse(commands),
- theorem_definitions: LatexTheoremDefinition::parse(commands),
- }
- }
-}
diff --git a/support/texlab/src/syntax/latex/mod.rs b/support/texlab/src/syntax/latex/mod.rs
index dc24682752..cee83ab04e 100644
--- a/support/texlab/src/syntax/latex/mod.rs
+++ b/support/texlab/src/syntax/latex/mod.rs
@@ -1,358 +1,686 @@
+mod analysis;
mod ast;
-mod env;
-mod finder;
-mod glossary;
mod lexer;
-mod math;
mod parser;
-mod printer;
-mod structure;
-
-pub use self::ast::*;
-pub use self::env::*;
-pub use self::finder::LatexNode;
-pub use self::glossary::*;
-pub use self::math::*;
-pub use self::printer::LatexPrinter;
-pub use self::structure::*;
-
-use self::finder::LatexFinder;
-use self::lexer::LatexLexer;
-use self::parser::LatexParser;
-use super::language::*;
-use super::text::SyntaxNode;
-use crate::range::RangeExt;
-use crate::workspace::Uri;
-use lsp_types::{Position, Range};
-use path_clean::PathClean;
-use std::path::PathBuf;
-use std::sync::Arc;
-
-#[derive(Debug, Default)]
-struct LatexCommandAnalyzer {
- commands: Vec<Arc<LatexCommand>>,
+
+pub use self::{analysis::*, ast::*};
+
+use self::{lexer::Lexer, parser::Parser};
+use crate::{
+ protocol::{Options, Uri},
+ tex::Resolver,
+};
+use std::path::Path;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub struct OpenParams<'a> {
+ pub text: &'a str,
+ pub uri: &'a Uri,
+ pub resolver: &'a Resolver,
+ pub options: &'a Options,
+ pub current_dir: &'a Path,
}
-impl LatexCommandAnalyzer {
- fn parse(root: Arc<LatexRoot>) -> Vec<Arc<LatexCommand>> {
- let mut analyzer = Self::default();
- analyzer.visit_root(root);
- analyzer.commands
- }
+pub fn open(params: OpenParams) -> SymbolTable {
+ let OpenParams {
+ text,
+ uri,
+ resolver,
+ options,
+ current_dir,
+ } = params;
+
+ let lexer = Lexer::new(text);
+ let parser = Parser::new(lexer);
+ let tree = parser.parse();
+
+ let params = SymbolTableParams {
+ tree,
+ uri,
+ resolver,
+ options,
+ current_dir,
+ };
+ SymbolTable::analyze(params)
}
-impl LatexVisitor for LatexCommandAnalyzer {
- fn visit_root(&mut self, root: Arc<LatexRoot>) {
- LatexWalker::walk_root(self, root);
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::{
+ protocol::{Options, Range, RangeExt, Uri},
+ syntax::{generic_ast::AstNodeIndex, text::SyntaxNode},
+ tex::Resolver,
+ };
+ use indoc::indoc;
+ use std::env;
+
+ fn open_simple(text: &str) -> SymbolTable {
+ open(OpenParams {
+ text: text.trim(),
+ uri: &Uri::parse("http://www.foo.com/bar.tex").unwrap(),
+ resolver: &Resolver::default(),
+ options: &Options::default(),
+ current_dir: &env::current_dir().unwrap(),
+ })
}
- fn visit_group(&mut self, group: Arc<LatexGroup>) {
- LatexWalker::walk_group(self, group);
+ #[derive(Debug, Default)]
+ struct TreeTraversal {
+ nodes: Vec<AstNodeIndex>,
}
- fn visit_command(&mut self, command: Arc<LatexCommand>) {
- self.commands.push(Arc::clone(&command));
- LatexWalker::walk_command(self, command);
+ impl Visitor for TreeTraversal {
+ fn visit(&mut self, tree: &Tree, node: AstNodeIndex) {
+ self.nodes.push(node);
+ tree.walk(self, node);
+ }
}
- fn visit_text(&mut self, text: Arc<LatexText>) {
- LatexWalker::walk_text(self, text);
- }
+ mod range {
+ use super::*;
- fn visit_comma(&mut self, comma: Arc<LatexComma>) {
- LatexWalker::walk_comma(self, comma);
- }
+ fn verify(expected_ranges: Vec<Range>, text: &str) {
+ let table = open_simple(text);
- fn visit_math(&mut self, math: Arc<LatexMath>) {
- LatexWalker::walk_math(self, math);
- }
-}
+ let mut traversal = TreeTraversal::default();
+ traversal.visit(&table.tree, table.tree.root);
+ let actual_ranges: Vec<_> = traversal
+ .nodes
+ .into_iter()
+ .map(|node| table[node].range())
+ .collect();
+ assert_eq!(actual_ranges, expected_ranges);
+ }
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexCitation {
- pub command: Arc<LatexCommand>,
- pub index: usize,
-}
+ #[test]
+ fn command() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 2, 14),
+ Range::new_simple(0, 0, 0, 23),
+ Range::new_simple(0, 14, 0, 23),
+ Range::new_simple(0, 15, 0, 22),
+ Range::new_simple(1, 0, 1, 20),
+ Range::new_simple(1, 11, 1, 20),
+ Range::new_simple(1, 12, 1, 19),
+ Range::new_simple(2, 0, 2, 14),
+ Range::new_simple(2, 4, 2, 9),
+ Range::new_simple(2, 5, 2, 8),
+ Range::new_simple(2, 9, 2, 14),
+ Range::new_simple(2, 10, 2, 13),
+ ],
+ indoc!(
+ r#"
+ \documentclass{article}
+ \usepackage{amsmath}
+ \foo[bar]{baz}
+ "#
+ ),
+ );
+ }
-impl LatexCitation {
- pub fn keys(&self) -> Vec<&LatexToken> {
- self.command.extract_comma_separated_words(0)
- }
+ #[test]
+ fn text() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 11),
+ Range::new_simple(0, 0, 0, 11),
+ ],
+ indoc!(
+ r#"
+ foo bar baz
+ "#
+ ),
+ );
+ }
- fn parse(commands: &[Arc<LatexCommand>]) -> Vec<Self> {
- let mut citations = Vec::new();
- for command in commands {
- for LatexCitationCommand { name, index } in &LANGUAGE_DATA.citation_commands {
- if command.name.text() == name && command.has_comma_separated_words(*index) {
- citations.push(Self {
- command: Arc::clone(command),
- index: *index,
- });
- }
- }
+ #[test]
+ fn text_bracket() {
+ verify(
+ vec![Range::new_simple(0, 0, 0, 5), Range::new_simple(0, 0, 0, 5)],
+ indoc!(
+ r#"
+ ]foo[
+ "#
+ ),
+ );
}
- citations
- }
-}
-impl SyntaxNode for LatexCitation {
- fn range(&self) -> Range {
- self.command.range()
- }
-}
+ #[test]
+ fn group() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 15),
+ Range::new_simple(0, 0, 0, 15),
+ Range::new_simple(0, 2, 0, 5),
+ Range::new_simple(0, 6, 0, 13),
+ Range::new_simple(0, 8, 0, 11),
+ ],
+ indoc!(
+ r#"
+ { foo { bar } }
+ "#
+ ),
+ );
+ }
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexInclude {
- pub command: Arc<LatexCommand>,
- pub index: usize,
- pub kind: LatexIncludeKind,
- pub all_targets: Vec<Vec<Uri>>,
- pub include_extension: bool,
-}
+ #[test]
+ fn group_incomplete() {
+ verify(
+ vec![Range::new_simple(0, 1, 0, 2), Range::new_simple(0, 1, 0, 2)],
+ indoc!(
+ r#"
+ }{
+ "#
+ ),
+ );
+ }
-impl LatexInclude {
- pub fn paths(&self) -> Vec<&LatexToken> {
- self.command.extract_comma_separated_words(self.index)
+ #[test]
+ fn math() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 9),
+ Range::new_simple(0, 0, 0, 1),
+ Range::new_simple(0, 2, 0, 7),
+ Range::new_simple(0, 8, 0, 9),
+ ],
+ indoc!(
+ r#"
+ $ x = 1 $
+ "#
+ ),
+ );
+ }
+
+ #[test]
+ fn comma() {
+ verify(
+ vec![
+ Range::new_simple(0, 0, 0, 8),
+ Range::new_simple(0, 0, 0, 3),
+ Range::new_simple(0, 3, 0, 4),
+ Range::new_simple(0, 5, 0, 8),
+ ],
+ indoc!(
+ r#"
+ foo, bar
+ "#
+ ),
+ );
+ }
}
- pub fn components(&self) -> Vec<String> {
- let mut components = Vec::new();
- for path in self.paths() {
- match self.kind {
- LatexIncludeKind::Package => components.push(format!("{}.sty", path.text())),
- LatexIncludeKind::Class => components.push(format!("{}.cls", path.text())),
- LatexIncludeKind::Latex
- | LatexIncludeKind::Bibliography
- | LatexIncludeKind::Image
- | LatexIncludeKind::Svg
- | LatexIncludeKind::Pdf
- | LatexIncludeKind::Everything => (),
- }
+ mod command {
+ use super::*;
+
+ fn verify(expected_names: Vec<&str>, text: &str) {
+ let table = open(OpenParams {
+ text,
+ uri: &Uri::parse("http://www.foo.com/bar.tex").unwrap(),
+ resolver: &Resolver::default(),
+ options: &Options::default(),
+ current_dir: &env::current_dir().unwrap(),
+ });
+
+ let actual_names: Vec<_> = table
+ .commands
+ .iter()
+ .map(|node| table.tree.as_command(*node).unwrap().name.text())
+ .collect();
+
+ assert_eq!(actual_names, expected_names);
+ }
+
+ #[test]
+ fn basic() {
+ verify(
+ vec!["\\documentclass", "\\usepackage", "\\begin", "\\end"],
+ indoc!(
+ r#"
+ \documentclass{article}
+ \usepackage{amsmath}
+ \begin{document}
+ Hello World
+ \end{document}
+ "#
+ ),
+ );
+ }
+
+ #[test]
+ fn star() {
+ verify(
+ vec!["\\section*", "\\subsection*"],
+ indoc!(
+ r#"
+ \section*{Foo}
+ \subsection**{Bar}
+ "#
+ ),
+ );
+ }
+
+ #[test]
+ fn at() {
+ verify(vec!["\\foo@bar"], indoc!(r#"\foo@bar"#));
+ }
+
+ #[test]
+ fn escape() {
+ verify(vec!["\\%"], indoc!(r#"\%foo"#))
}
- components
}
- fn parse(uri: &Uri, commands: &[Arc<LatexCommand>]) -> Vec<Self> {
- let mut includes = Vec::new();
- for command in commands {
- for description in &LANGUAGE_DATA.include_commands {
- if let Some(include) = Self::parse_single(uri, &command, &description) {
- includes.push(include);
- }
- }
+ mod environment {
+ use super::*;
+
+ fn verify(expected_names: Vec<(&str, &str)>, text: &str) {
+ let table = open_simple(text);
+ let actual_names: Vec<_> = table
+ .environments
+ .iter()
+ .map(|env| {
+ (
+ env.left
+ .name(&table.tree)
+ .map(Token::text)
+ .unwrap_or_default(),
+ env.right
+ .name(&table.tree)
+ .map(Token::text)
+ .unwrap_or_default(),
+ )
+ })
+ .collect();
+
+ assert_eq!(actual_names, expected_names);
+ }
+
+ #[test]
+ fn nested() {
+ verify(
+ vec![("b", "b"), ("a", "a")],
+ indoc!(
+ r#"
+ \begin{a}
+ \begin{b}
+ \end{b}
+ \end{a}
+ "#
+ ),
+ );
+ }
+
+ #[test]
+ fn empty_name() {
+ verify(
+ vec![("a", ""), ("", "b")],
+ indoc!(
+ r#"
+ \begin{a}
+ \end{}
+ \begin{}
+ \end{b}
+ "#
+ ),
+ );
+ }
+
+ #[test]
+ fn incomplete() {
+ verify(
+ Vec::new(),
+ indoc!(
+ r#"
+ \end{a}
+ \begin{a}
+ "#
+ ),
+ );
+ }
+
+ #[test]
+ fn standalone_true() {
+ let table = open_simple(r#"\begin{document}\end{document}"#);
+ assert!(table.is_standalone);
+ }
+
+ #[test]
+ fn standalone_false() {
+ let table = open_simple(r#"\begin{doc}\end{doc}"#);
+ assert!(!table.is_standalone);
}
- includes
}
- fn parse_single(
- uri: &Uri,
- command: &Arc<LatexCommand>,
- description: &LatexIncludeCommand,
- ) -> Option<Self> {
- if command.name.text() != description.name {
- return None;
+ mod include {
+ use super::*;
+
+ fn verify(expected_targets: Vec<Vec<&str>>, resolver: Resolver, text: &str) {
+ let table = open(OpenParams {
+ text,
+ uri: &Uri::parse("http://www.foo.com/dir1/dir2/foo.tex").unwrap(),
+ resolver: &resolver,
+ options: &Options::default(),
+ current_dir: &env::current_dir().unwrap(),
+ });
+
+ assert_eq!(table.includes.len(), 1);
+ let include = &table.includes[0];
+ let actual_targets: Vec<Vec<&str>> = include
+ .all_targets
+ .iter()
+ .map(|targets| targets.iter().map(|target| target.as_str()).collect())
+ .collect();
+
+ assert_eq!(actual_targets, expected_targets);
+ }
+
+ #[test]
+ fn same_directory() {
+ verify(
+ vec![vec![
+ "http://www.foo.com/dir1/dir2/bar",
+ "http://www.foo.com/dir1/dir2/bar.tex",
+ ]],
+ Resolver::default(),
+ indoc!(r#"\include{bar}"#),
+ );
+ }
+
+ #[test]
+ fn two_paths() {
+ verify(
+ vec![
+ vec![
+ "http://www.foo.com/dir1/dir2/bar.tex",
+ "http://www.foo.com/dir1/dir2/bar.tex.tex",
+ ],
+ vec![
+ "http://www.foo.com/dir1/dir2/baz.tex",
+ "http://www.foo.com/dir1/dir2/baz.tex.tex",
+ ],
+ ],
+ Resolver::default(),
+ indoc!(r#"\input{bar.tex, ./baz.tex}"#),
+ );
+ }
+
+ #[test]
+ fn sub_directory() {
+ verify(
+ vec![vec![
+ "http://www.foo.com/dir1/dir2/dir3/bar",
+ "http://www.foo.com/dir1/dir2/dir3/bar.tex",
+ ]],
+ Resolver::default(),
+ indoc!(r#"\include{dir3/bar}"#),
+ );
}
- if command.args.len() <= description.index {
- return None;
+ #[test]
+ fn parent_directory() {
+ verify(
+ vec![vec![
+ "http://www.foo.com/dir1/bar",
+ "http://www.foo.com/dir1/bar.tex",
+ ]],
+ Resolver::default(),
+ indoc!(r#"\include{../bar}"#),
+ );
}
- let mut all_targets = Vec::new();
- for relative_path in command.extract_comma_separated_words(description.index) {
- let mut path = uri.to_file_path().ok()?;
- path.pop();
- path.push(relative_path.text());
- path = PathBuf::from(path.to_string_lossy().into_owned().replace('\\', "/"));
- path = path.clean();
- let path = path.to_str()?.to_owned();
-
- let mut targets = Vec::new();
- targets.push(Uri::from_file_path(&path).ok()?);
- if let Some(extensions) = description.kind.extensions() {
- for extension in extensions {
- let path = format!("{}.{}", &path, extension);
- targets.push(Uri::from_file_path(&path).ok()?);
- }
- }
- all_targets.push(targets);
+ #[test]
+ fn distro_file() {
+ let mut resolver = Resolver::default();
+ let path = env::current_dir().unwrap().join("biblatex-examples.bib");
+ resolver
+ .files_by_name
+ .insert("biblatex-examples.bib".into(), path.clone());
+ verify(
+ vec![vec![
+ "http://www.foo.com/dir1/dir2/biblatex-examples.bib",
+ "http://www.foo.com/dir1/dir2/biblatex-examples.bib.bib",
+ Uri::from_file_path(&path).unwrap().as_str(),
+ ]],
+ resolver,
+ indoc!(r#"\addbibresource{biblatex-examples.bib}"#),
+ );
}
- let include = Self {
- command: Arc::clone(command),
- index: description.index,
- kind: description.kind,
- all_targets,
- include_extension: description.include_extension,
- };
- Some(include)
+ #[test]
+ fn component() {
+ let table = open(OpenParams {
+ text: indoc!(
+ r#"
+ \documentclass{article}
+ \usepackage{amsmath}
+ \usepackage{geometry, lipsum}
+ "#
+ ),
+ uri: &Uri::parse("http://www.foo.com/bar.tex").unwrap(),
+ resolver: &Resolver::default(),
+ options: &Options::default(),
+ current_dir: &env::current_dir().unwrap(),
+ });
+ assert_eq!(
+ table.components,
+ vec!["article.cls", "amsmath.sty", "geometry.sty", "lipsum.sty"]
+ );
+ }
}
-}
-impl SyntaxNode for LatexInclude {
- fn range(&self) -> Range {
- self.command.range()
+ #[test]
+ fn citation() {
+ let table = open_simple(indoc!(
+ r#"
+ \cite{key1}
+ \cite{key2, key3}
+ \nocite{*}
+ "#
+ ));
+
+ let expected_keys = vec![vec!["key1"], vec!["key2", "key3"], vec!["*"]];
+
+ let actual_keys: Vec<Vec<&str>> = table
+ .citations
+ .iter()
+ .map(|cit| cit.keys(&table.tree).into_iter().map(Token::text).collect())
+ .collect();
+
+ assert_eq!(actual_keys, expected_keys);
}
-}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexCommandDefinition {
- pub command: Arc<LatexCommand>,
- pub definition: Arc<LatexCommand>,
- pub definition_index: usize,
- pub implementation: Arc<LatexGroup>,
- pub implementation_index: usize,
- pub argument_count_index: usize,
-}
+ #[test]
+ fn command_definition() {
+ let table = open_simple(indoc!(
+ r#"
+ \newcommand{\foo}{Foo}
+ \newcommand[2]{\bar}{Bar}
+ \renewcommand{\baz}{Baz}
+ \qux
+ "#
+ ));
+
+ let expected_cmds = vec!["\\foo", "\\bar", "\\baz"];
+
+ let actual_cmds: Vec<&str> = table
+ .command_definitions
+ .iter()
+ .map(|def| def.definition_name(&table.tree))
+ .collect();
-impl LatexCommandDefinition {
- fn parse(commands: &[Arc<LatexCommand>]) -> Vec<Self> {
- let mut definitions = Vec::new();
- for command in commands {
- for LatexCommandDefinitionCommand {
- name,
- definition_index,
- argument_count_index,
- implementation_index,
- } in &LANGUAGE_DATA.command_definition_commands
- {
- if command.name.text() == name
- && command.args.len() > *definition_index
- && command.args.len() > *implementation_index
- {
- let definition = command.args[0].children.iter().next();
- if let Some(LatexContent::Command(definition)) = definition {
- definitions.push(Self {
- command: Arc::clone(command),
- definition: Arc::clone(definition),
- definition_index: *definition_index,
- implementation: Arc::clone(&command.args[*implementation_index]),
- implementation_index: *implementation_index,
- argument_count_index: *argument_count_index,
- })
- }
- }
- }
- }
- definitions
+ assert_eq!(actual_cmds, expected_cmds);
}
-}
-impl SyntaxNode for LatexCommandDefinition {
- fn range(&self) -> Range {
- self.command.range()
+ #[test]
+ fn glossary_entry() {
+ let table = open_simple(indoc!(
+ r#"
+ \newglossaryentry{foo}{...}
+ \newacronym{bar}{...}
+ "#
+ ));
+
+ let expected_entries = vec!["foo", "bar"];
+
+ let actual_entries: Vec<&str> = table
+ .glossary_entries
+ .iter()
+ .map(|entry| entry.label(&table.tree).text())
+ .collect();
+
+ assert_eq!(actual_entries, expected_entries);
}
-}
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexSyntaxTree {
- pub root: Arc<LatexRoot>,
- pub commands: Vec<Arc<LatexCommand>>,
- pub includes: Vec<LatexInclude>,
- pub components: Vec<String>,
- pub env: LatexEnvironmentInfo,
- pub structure: LatexStructureInfo,
- pub citations: Vec<LatexCitation>,
- pub math: LatexMathInfo,
- pub command_definitions: Vec<LatexCommandDefinition>,
- pub glossary: LatexGlossaryInfo,
-}
+ #[test]
+ fn equation() {
+ let table = open_simple(indoc!(
+ r#"
+ \[
+ e^{i \pi} + 1 = 0
+ \]
+ \] \[
+ "#
+ ));
+
+ assert_eq!(table.equations.len(), 1);
+ }
-impl LatexSyntaxTree {
- pub fn parse(uri: &Uri, text: &str) -> Self {
- let lexer = LatexLexer::new(text);
- let mut parser = LatexParser::new(lexer);
- let root = Arc::new(parser.root());
- let commands = LatexCommandAnalyzer::parse(Arc::clone(&root));
- let includes = LatexInclude::parse(uri, &commands);
- let components = includes.iter().flat_map(LatexInclude::components).collect();
- let env = LatexEnvironmentInfo::parse(&commands);
- let structure = LatexStructureInfo::parse(&commands);
- let citations = LatexCitation::parse(&commands);
- let math = LatexMathInfo::parse(Arc::clone(&root), &commands);
- let command_definitions = LatexCommandDefinition::parse(&commands);
- let glossary = LatexGlossaryInfo::parse(&commands);
- Self {
- root,
- commands,
- includes,
- components,
- env,
- structure,
- citations,
- math,
- command_definitions,
- glossary,
- }
+ #[test]
+ fn inline() {
+ let table = open_simple(indoc!(
+ r#"
+ $ x $
+ $
+ "#
+ ));
+
+ assert_eq!(table.inlines.len(), 1);
}
- pub fn find(&self, position: Position) -> Vec<LatexNode> {
- let mut finder = LatexFinder::new(position);
- finder.visit_root(Arc::clone(&self.root));
- finder.results
+ #[test]
+ fn math_operator() {
+ let table = open_simple(indoc!(
+ r#"
+ \DeclareMathOperator{\foo}{foo}
+ "#
+ ));
+
+ assert_eq!(table.math_operators.len(), 1);
+ assert_eq!(
+ table.math_operators[0].definition_name(&table.tree),
+ "\\foo"
+ );
}
- pub fn find_command_by_name(&self, position: Position) -> Option<Arc<LatexCommand>> {
- for result in self.find(position) {
- if let LatexNode::Command(command) = result {
- if command.name.range().contains(position)
- && command.name.start().character != position.character
- {
- return Some(command);
- }
- }
- }
- None
+ #[test]
+ fn theorem_definition() {
+ let table = open_simple(indoc!(
+ r#"
+ \newtheorem{lemma}{Lemma}
+ "#
+ ));
+
+ assert_eq!(table.theorem_definitions.len(), 1);
+ assert_eq!(
+ table.theorem_definitions[0].name(&table.tree).text(),
+ "lemma"
+ );
}
- pub fn find_label_by_range(&self, range: Range) -> Option<&LatexLabel> {
- self.structure
- .labels
- .iter()
- .filter(|label| label.kind == LatexLabelKind::Definition)
- .filter(|label| label.names().len() == 1)
- .find(|label| range.contains(label.start()))
+ #[test]
+ fn section() {
+ let table = open_simple(indoc!(
+ r#"
+ \section{Introduction to \LaTeX}
+ \subsection*{Foo
+ "#
+ ));
+ assert_eq!(table.sections.len(), 2);
+ assert_eq!(
+ table.sections[0].print(&table.tree).unwrap(),
+ "Introduction to \\LaTeX"
+ );
+ assert_eq!(table.sections[1].print(&table.tree), None);
}
- pub fn find_label_by_environment(&self, environment: &LatexEnvironment) -> Option<&LatexLabel> {
- self.structure
+ #[test]
+ fn label() {
+ let table = open_simple(indoc!(
+ r#"
+ \label{foo}
+ \ref{bar, baz}
+ "#
+ ));
+
+ let expected_names = vec![vec!["foo"], vec!["bar", "baz"]];
+
+ let actual_names: Vec<Vec<&str>> = table
.labels
.iter()
- .filter(|label| label.kind == LatexLabelKind::Definition)
- .filter(|label| label.names().len() == 1)
- .find(|label| self.is_direct_child(environment, label.start()))
+ .map(|label| {
+ label
+ .names(&table.tree)
+ .into_iter()
+ .map(Token::text)
+ .collect()
+ })
+ .collect();
+
+ assert_eq!(actual_names, expected_names);
}
- pub fn is_enumeration_item(&self, enumeration: &LatexEnvironment, item: &LatexItem) -> bool {
- enumeration.range().contains(item.start())
- && !self
- .env
- .environments
- .iter()
- .filter(|env| *env != enumeration)
- .filter(|env| env.left.is_enum() && enumeration.range().contains(env.start()))
- .any(|env| env.range().contains(item.start()))
+ #[test]
+ fn label_numbering() {
+ let table = open_simple(indoc!(
+ r#"
+ \newlabel{foo}{{1}{1}}
+ "#
+ ));
+
+ assert_eq!(table.label_numberings.len(), 1);
+ assert_eq!(table.label_numberings[0].name(&table.tree).text(), "foo");
+ assert_eq!(table.label_numberings[0].number, "1");
}
- pub fn is_direct_child(&self, environment: &LatexEnvironment, position: Position) -> bool {
- environment.range().contains(position)
- && !self
- .env
- .environments
- .iter()
- .filter(|env| *env != environment)
- .filter(|env| environment.range().contains(env.start()))
- .any(|env| env.range().contains(position))
+ #[test]
+ fn caption() {
+ let table = open_simple(indoc!(
+ r#"
+ \caption{Foo \LaTeX Bar}
+ "#
+ ));
+
+ assert_eq!(table.captions.len(), 1);
+ assert_eq!(
+ table.captions[0].print(&table.tree).unwrap(),
+ "Foo \\LaTeX Bar"
+ );
}
-}
-pub fn extract_group(content: &LatexGroup) -> String {
- if content.children.is_empty() || content.right.is_none() {
- return String::new();
+ #[test]
+ fn item_without_name() {
+ let table = open_simple(indoc!(
+ r#"
+ \item
+ "#
+ ));
+
+ assert_eq!(table.items.len(), 1);
+ assert_eq!(table.items[0].name(&table.tree), None);
}
- let mut printer = LatexPrinter::new(content.children[0].start());
- for child in &content.children {
- child.accept(&mut printer);
+ #[test]
+ fn item_with_name() {
+ let table = open_simple(indoc!(
+ r#"
+ \item[foo bar]
+ "#
+ ));
+
+ assert_eq!(table.items.len(), 1);
+ assert_eq!(table.items[0].name(&table.tree).unwrap(), "foo bar");
}
- printer.output
}
diff --git a/support/texlab/src/syntax/latex/parser.rs b/support/texlab/src/syntax/latex/parser.rs
index 40693071c2..4ace4fbcd6 100644
--- a/support/texlab/src/syntax/latex/parser.rs
+++ b/support/texlab/src/syntax/latex/parser.rs
@@ -1,62 +1,84 @@
use super::ast::*;
+use crate::{
+ protocol::{Range, RangeExt},
+ syntax::{
+ generic_ast::{Ast, AstNodeIndex},
+ text::SyntaxNode,
+ },
+};
use std::iter::Peekable;
-use std::sync::Arc;
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-enum LatexScope {
+enum Scope {
Root,
Group,
Options,
}
-pub struct LatexParser<I: Iterator<Item = LatexToken>> {
+#[derive(Debug)]
+pub struct Parser<I: Iterator<Item = Token>> {
+ tree: Ast<Node>,
tokens: Peekable<I>,
}
-impl<I: Iterator<Item = LatexToken>> LatexParser<I> {
+impl<I: Iterator<Item = Token>> Parser<I> {
pub fn new(tokens: I) -> Self {
- LatexParser {
+ Self {
+ tree: Ast::new(),
tokens: tokens.peekable(),
}
}
- pub fn root(&mut self) -> LatexRoot {
- let children = self.content(LatexScope::Root);
- LatexRoot::new(children)
+ pub fn parse(mut self) -> Tree {
+ let children = self.content(Scope::Root);
+
+ let range = if children.is_empty() {
+ Range::new_simple(0, 0, 0, 0)
+ } else {
+ let start = self.tree[children[0]].start();
+ let end = self.tree[children[children.len() - 1]].end();
+ Range::new(start, end)
+ };
+
+ let root = self.tree.add_node(Node::Root(Root { range }));
+ self.connect(root, &children);
+ Tree {
+ inner: self.tree,
+ root,
+ }
}
- fn content(&mut self, scope: LatexScope) -> Vec<LatexContent> {
+ fn content(&mut self, scope: Scope) -> Vec<AstNodeIndex> {
let mut children = Vec::new();
while let Some(ref token) = self.tokens.peek() {
match token.kind {
- LatexTokenKind::Word | LatexTokenKind::BeginOptions => {
- children.push(LatexContent::Text(self.text(scope)));
+ TokenKind::Word | TokenKind::BeginOptions => {
+ children.push(self.text(scope));
}
- LatexTokenKind::Command => {
- children.push(LatexContent::Command(self.command()));
+ TokenKind::Command => {
+ children.push(self.command());
}
- LatexTokenKind::Comma => {
- let node = LatexComma::new(self.tokens.next().unwrap());
- children.push(LatexContent::Comma(Arc::new(node)));
+ TokenKind::Comma => {
+ children.push(self.comma());
}
- LatexTokenKind::Math => {
- children.push(LatexContent::Math(self.math()));
+ TokenKind::Math => {
+ children.push(self.math());
}
- LatexTokenKind::BeginGroup => {
- children.push(LatexContent::Group(self.group(LatexGroupKind::Group)));
+ TokenKind::BeginGroup => {
+ children.push(self.group(GroupKind::Group));
}
- LatexTokenKind::EndGroup => {
- if scope == LatexScope::Root {
+ TokenKind::EndGroup => {
+ if scope == Scope::Root {
self.tokens.next();
} else {
return children;
}
}
- LatexTokenKind::EndOptions => {
- if scope == LatexScope::Options {
+ TokenKind::EndOptions => {
+ if scope == Scope::Options {
return children;
} else {
- children.push(LatexContent::Text(self.text(scope)));
+ children.push(self.text(scope));
}
}
}
@@ -64,37 +86,17 @@ impl<I: Iterator<Item = LatexToken>> LatexParser<I> {
children
}
- fn command(&mut self) -> Arc<LatexCommand> {
- let name = self.tokens.next().unwrap();
-
- let mut options = Vec::new();
- let mut args = Vec::new();
- while let Some(token) = self.tokens.peek() {
- match token.kind {
- LatexTokenKind::BeginGroup => {
- args.push(self.group(LatexGroupKind::Group));
- }
- LatexTokenKind::BeginOptions => {
- options.push(self.group(LatexGroupKind::Options));
- }
- _ => {
- break;
- }
- }
- }
- Arc::new(LatexCommand::new(name, options, args))
- }
-
- fn group(&mut self, kind: LatexGroupKind) -> Arc<LatexGroup> {
+ fn group(&mut self, kind: GroupKind) -> AstNodeIndex {
let left = self.tokens.next().unwrap();
let scope = match kind {
- LatexGroupKind::Group => LatexScope::Group,
- LatexGroupKind::Options => LatexScope::Options,
+ GroupKind::Group => Scope::Group,
+ GroupKind::Options => Scope::Options,
};
+
let children = self.content(scope);
let right_kind = match kind {
- LatexGroupKind::Group => LatexTokenKind::EndGroup,
- LatexGroupKind::Options => LatexTokenKind::EndOptions,
+ GroupKind::Group => TokenKind::EndGroup,
+ GroupKind::Options => TokenKind::EndOptions,
};
let right = if self.next_of_kind(right_kind) {
@@ -103,33 +105,82 @@ impl<I: Iterator<Item = LatexToken>> LatexParser<I> {
None
};
- Arc::new(LatexGroup::new(left, children, right, kind))
+ let end = right
+ .as_ref()
+ .map(SyntaxNode::end)
+ .or_else(|| children.last().map(|child| self.tree[*child].end()))
+ .unwrap_or_else(|| left.end());
+ let range = Range::new(left.start(), end);
+
+ let node = self.tree.add_node(Node::Group(Group {
+ range,
+ left,
+ kind,
+ right,
+ }));
+ self.connect(node, &children);
+ node
}
- fn text(&mut self, scope: LatexScope) -> Arc<LatexText> {
+ fn command(&mut self) -> AstNodeIndex {
+ let name = self.tokens.next().unwrap();
+ let mut children = Vec::new();
+ while let Some(token) = self.tokens.peek() {
+ match token.kind {
+ TokenKind::BeginGroup => children.push(self.group(GroupKind::Group)),
+ TokenKind::BeginOptions => children.push(self.group(GroupKind::Options)),
+ _ => break,
+ }
+ }
+
+ let end = children
+ .last()
+ .map(|child| self.tree[*child].end())
+ .unwrap_or_else(|| name.end());
+ let range = Range::new(name.start(), end);
+
+ let node = self.tree.add_node(Node::Command(Command { range, name }));
+ self.connect(node, &children);
+ node
+ }
+
+ fn text(&mut self, scope: Scope) -> AstNodeIndex {
let mut words = Vec::new();
while let Some(ref token) = self.tokens.peek() {
let kind = token.kind;
- let opts = kind == LatexTokenKind::EndOptions && scope != LatexScope::Options;
- if kind == LatexTokenKind::Word || kind == LatexTokenKind::BeginOptions || opts {
+ let opts = kind == TokenKind::EndOptions && scope != Scope::Options;
+ if kind == TokenKind::Word || kind == TokenKind::BeginOptions || opts {
words.push(self.tokens.next().unwrap());
} else {
break;
}
}
- Arc::new(LatexText::new(words))
+ let range = Range::new(words[0].start(), words[words.len() - 1].end());
+ self.tree.add_node(Node::Text(Text { range, words }))
}
- fn math(&mut self) -> Arc<LatexMath> {
+ fn comma(&mut self) -> AstNodeIndex {
let token = self.tokens.next().unwrap();
- Arc::new(LatexMath::new(token))
+ let range = token.range();
+ self.tree.add_node(Node::Comma(Comma { range, token }))
}
- fn next_of_kind(&mut self, kind: LatexTokenKind) -> bool {
- if let Some(ref token) = self.tokens.peek() {
- token.kind == kind
- } else {
- false
+ fn math(&mut self) -> AstNodeIndex {
+ let token = self.tokens.next().unwrap();
+ let range = token.range();
+ self.tree.add_node(Node::Math(Math { range, token }))
+ }
+
+ fn connect(&mut self, parent: AstNodeIndex, children: &[AstNodeIndex]) {
+ for child in children {
+ self.tree.add_edge(parent, *child);
}
}
+
+ fn next_of_kind(&mut self, kind: TokenKind) -> bool {
+ self.tokens
+ .peek()
+ .filter(|token| token.kind == kind)
+ .is_some()
+ }
}
diff --git a/support/texlab/src/syntax/latex/printer.rs b/support/texlab/src/syntax/latex/printer.rs
deleted file mode 100644
index ce03778033..0000000000
--- a/support/texlab/src/syntax/latex/printer.rs
+++ /dev/null
@@ -1,77 +0,0 @@
-use super::ast::*;
-use crate::syntax::text::*;
-use lsp_types::Position;
-use std::sync::Arc;
-
-#[derive(Debug)]
-pub struct LatexPrinter {
- pub output: String,
- position: Position,
-}
-
-impl LatexPrinter {
- pub fn new(start_position: Position) -> Self {
- Self {
- output: String::new(),
- position: start_position,
- }
- }
-
- fn synchronize(&mut self, position: Position) {
- while self.position.line < position.line {
- self.output.push('\n');
- self.position.line += 1;
- }
-
- while self.position.character < position.character {
- self.output.push(' ');
- self.position.character += 1;
- }
- }
-
- fn print_token(&mut self, token: &LatexToken) {
- self.synchronize(token.start());
- self.output.push_str(token.text());
- self.position.character += token.end().character - token.start().character;
- self.synchronize(token.end());
- }
-}
-
-impl LatexVisitor for LatexPrinter {
- fn visit_root(&mut self, root: Arc<LatexRoot>) {
- for child in &root.children {
- child.accept(self);
- }
- }
-
- fn visit_group(&mut self, group: Arc<LatexGroup>) {
- self.print_token(&group.left);
- for child in &group.children {
- child.accept(self);
- }
- if let Some(right) = &group.right {
- self.print_token(right);
- }
- }
-
- fn visit_command(&mut self, command: Arc<LatexCommand>) {
- self.print_token(&command.name);
- for group in &command.groups {
- self.visit_group(Arc::clone(&group));
- }
- }
-
- fn visit_text(&mut self, text: Arc<LatexText>) {
- for word in &text.words {
- self.print_token(word);
- }
- }
-
- fn visit_comma(&mut self, comma: Arc<LatexComma>) {
- self.print_token(&comma.token);
- }
-
- fn visit_math(&mut self, math: Arc<LatexMath>) {
- self.print_token(&math.token)
- }
-}
diff --git a/support/texlab/src/syntax/latex/structure.rs b/support/texlab/src/syntax/latex/structure.rs
deleted file mode 100644
index 79c9aac216..0000000000
--- a/support/texlab/src/syntax/latex/structure.rs
+++ /dev/null
@@ -1,250 +0,0 @@
-use super::ast::*;
-use crate::range::RangeExt;
-use crate::syntax::language::*;
-use crate::syntax::text::{CharStream, SyntaxNode};
-use itertools::Itertools;
-use lsp_types::Range;
-use std::sync::Arc;
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexSection {
- pub command: Arc<LatexCommand>,
- pub index: usize,
- pub level: i32,
- pub prefix: &'static str,
-}
-
-impl LatexSection {
- fn parse(commands: &[Arc<LatexCommand>]) -> Vec<Self> {
- let mut sections = Vec::new();
- for command in commands {
- for LatexSectionCommand {
- name,
- index,
- level,
- prefix,
- } in &LANGUAGE_DATA.section_commands
- {
- if command.name.text() == name && command.args.len() > *index {
- sections.push(Self {
- command: Arc::clone(command),
- index: *index,
- level: *level,
- prefix: prefix.as_ref(),
- })
- }
- }
- }
- sections
- }
-
- pub fn extract_text(&self, text: &str) -> Option<String> {
- let content = &self.command.args[self.index];
- let right = content.right.as_ref()?;
- let range = Range::new_simple(
- content.left.start().line,
- content.left.start().character + 1,
- right.end().line,
- right.end().character - 1,
- );
- Some(CharStream::extract(&text, range))
- }
-}
-
-impl SyntaxNode for LatexSection {
- fn range(&self) -> Range {
- self.command.range()
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexLabel {
- pub command: Arc<LatexCommand>,
- index: usize,
- pub kind: LatexLabelKind,
-}
-
-impl LatexLabel {
- pub fn names(&self) -> Vec<&LatexToken> {
- self.command.extract_comma_separated_words(self.index)
- }
-
- fn parse(commands: &[Arc<LatexCommand>]) -> Vec<Self> {
- let mut labels = Vec::new();
- for command in commands {
- for LatexLabelCommand { name, index, kind } in &LANGUAGE_DATA.label_commands {
- if command.name.text() == name && command.has_comma_separated_words(*index) {
- labels.push(Self {
- command: Arc::clone(command),
- index: *index,
- kind: *kind,
- });
- }
- }
- }
- labels
- }
-}
-
-impl SyntaxNode for LatexLabel {
- fn range(&self) -> Range {
- self.command.range
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexLabelNumbering {
- pub command: Arc<LatexCommand>,
- pub number: String,
-}
-
-impl LatexLabelNumbering {
- pub fn name(&self) -> &LatexToken {
- self.command.extract_word(0).unwrap()
- }
-
- fn parse(commands: &[Arc<LatexCommand>]) -> Vec<Self> {
- commands
- .iter()
- .map(Arc::clone)
- .filter_map(Self::parse_single)
- .collect()
- }
-
- fn parse_single(command: Arc<LatexCommand>) -> Option<Self> {
- #[derive(Debug, Default)]
- struct FirstText {
- text: Option<Arc<LatexText>>,
- }
-
- impl LatexVisitor for FirstText {
- fn visit_root(&mut self, root: Arc<LatexRoot>) {
- LatexWalker::walk_root(self, root);
- }
-
- fn visit_group(&mut self, group: Arc<LatexGroup>) {
- LatexWalker::walk_group(self, group);
- }
-
- fn visit_command(&mut self, command: Arc<LatexCommand>) {
- LatexWalker::walk_command(self, command);
- }
-
- fn visit_text(&mut self, text: Arc<LatexText>) {
- if self.text.is_none() {
- self.text = Some(text);
- }
- }
-
- fn visit_comma(&mut self, comma: Arc<LatexComma>) {
- LatexWalker::walk_comma(self, comma);
- }
-
- fn visit_math(&mut self, math: Arc<LatexMath>) {
- LatexWalker::walk_math(self, math);
- }
- }
-
- if command.name.text() != "\\newlabel" || !command.has_word(0) {
- return None;
- }
-
- let mut analyzer = FirstText::default();
- analyzer.visit_group(Arc::clone(command.args.get(1)?));
- let number = analyzer
- .text?
- .words
- .iter()
- .map(|word| word.text())
- .join(" ");
-
- Some(Self {
- command: Arc::clone(&command),
- number,
- })
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexCaption {
- pub command: Arc<LatexCommand>,
- pub index: usize,
-}
-
-impl LatexCaption {
- fn parse(commands: &[Arc<LatexCommand>]) -> Vec<Self> {
- let mut captions = Vec::new();
- for command in commands {
- if command.name.text() == "\\caption" && !command.args.is_empty() {
- captions.push(Self {
- command: Arc::clone(&command),
- index: 0,
- });
- }
- }
- captions
- }
-}
-
-impl SyntaxNode for LatexCaption {
- fn range(&self) -> Range {
- self.command.range()
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexItem {
- pub command: Arc<LatexCommand>,
-}
-
-impl LatexItem {
- fn parse(commands: &[Arc<LatexCommand>]) -> Vec<Self> {
- let mut items = Vec::new();
- for command in commands {
- if command.name.text() == "\\item" {
- items.push(Self {
- command: Arc::clone(&command),
- });
- }
- }
- items
- }
-
- pub fn name(&self) -> Option<String> {
- if let Some(options) = self.command.options.get(0) {
- if options.children.len() == 1 {
- if let LatexContent::Text(text) = &options.children[0] {
- return Some(text.words.iter().map(|word| word.text()).join(" "));
- }
- }
- }
- None
- }
-}
-
-impl SyntaxNode for LatexItem {
- fn range(&self) -> Range {
- self.command.range()
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct LatexStructureInfo {
- pub sections: Vec<LatexSection>,
- pub labels: Vec<LatexLabel>,
- pub label_numberings: Vec<LatexLabelNumbering>,
- pub captions: Vec<LatexCaption>,
- pub items: Vec<LatexItem>,
-}
-
-impl LatexStructureInfo {
- pub fn parse(commands: &[Arc<LatexCommand>]) -> Self {
- Self {
- sections: LatexSection::parse(commands),
- labels: LatexLabel::parse(commands),
- label_numberings: LatexLabelNumbering::parse(commands),
- captions: LatexCaption::parse(commands),
- items: LatexItem::parse(commands),
- }
- }
-}
diff --git a/support/texlab/src/syntax/latexindent.rs b/support/texlab/src/syntax/latexindent.rs
new file mode 100644
index 0000000000..c45c95d4e5
--- /dev/null
+++ b/support/texlab/src/syntax/latexindent.rs
@@ -0,0 +1,21 @@
+use std::{io, process::Stdio};
+use tempfile::tempdir;
+use tokio::{fs, process::Command};
+
+pub async fn format(text: &str, extension: &str) -> io::Result<String> {
+ let dir = tempdir()?;
+ let input = format!("input.{}", extension);
+ let output = format!("output.{}", extension);
+ fs::write(dir.path().join(&input), text).await?;
+
+ Command::new("latexindent")
+ .args(&["-o", &output, &input])
+ .current_dir(dir.path())
+ .stdin(Stdio::null())
+ .stdout(Stdio::null())
+ .stderr(Stdio::null())
+ .spawn()?
+ .await?;
+
+ fs::read_to_string(dir.path().join(&output)).await
+}
diff --git a/support/texlab/src/lsp_kind.rs b/support/texlab/src/syntax/lsp_kind.rs
index 0196850c61..7d92fd4ee4 100644
--- a/support/texlab/src/lsp_kind.rs
+++ b/support/texlab/src/syntax/lsp_kind.rs
@@ -1,5 +1,5 @@
-use crate::syntax::*;
-use lsp_types::*;
+use super::lang_data::BibtexEntryTypeCategory;
+use crate::protocol::{CompletionItemKind, SymbolKind};
#[derive(Debug, PartialEq, Eq, Clone, Copy)]
pub enum Structure {
diff --git a/support/texlab/src/syntax/mod.rs b/support/texlab/src/syntax/mod.rs
index c92aa995f9..87b33792df 100644
--- a/support/texlab/src/syntax/mod.rs
+++ b/support/texlab/src/syntax/mod.rs
@@ -1,27 +1,14 @@
-mod bibtex;
-mod language;
-mod latex;
+pub mod bibtex;
+mod generic_ast;
+mod lang_data;
+pub mod latex;
+pub mod latexindent;
+mod lsp_kind;
mod text;
-pub use self::bibtex::*;
-pub use self::language::*;
-pub use self::latex::*;
-pub use self::text::*;
-
-use crate::workspace::Uri;
-use tex::Language;
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub enum SyntaxTree {
- Latex(Box<LatexSyntaxTree>),
- Bibtex(Box<BibtexSyntaxTree>),
-}
-
-impl SyntaxTree {
- pub fn parse(uri: &Uri, text: &str, language: Language) -> Self {
- match language {
- Language::Latex => SyntaxTree::Latex(Box::new(LatexSyntaxTree::parse(uri, text))),
- Language::Bibtex => SyntaxTree::Bibtex(Box::new(text.into())),
- }
- }
-}
+pub use self::{
+ generic_ast::{Ast, AstNodeIndex},
+ lang_data::*,
+ lsp_kind::Structure,
+ text::{CharStream, Span, SyntaxNode},
+};
diff --git a/support/texlab/src/syntax/text.rs b/support/texlab/src/syntax/text.rs
index df38635940..17d6876126 100644
--- a/support/texlab/src/syntax/text.rs
+++ b/support/texlab/src/syntax/text.rs
@@ -1,6 +1,6 @@
-use lsp_types::{Position, Range};
-use std::iter::Peekable;
-use std::str::CharIndices;
+use crate::protocol::{Position, Range};
+use serde::{Deserialize, Serialize};
+use std::{iter::Peekable, str::CharIndices};
pub trait SyntaxNode {
fn range(&self) -> Range;
@@ -14,7 +14,8 @@ pub trait SyntaxNode {
}
}
-#[derive(Debug, PartialEq, Eq, Clone)]
+#[derive(Debug, PartialEq, Eq, Clone, Serialize, Deserialize)]
+#[serde(rename_all = "camelCase")]
pub struct Span {
pub range: Range,
pub text: String,
@@ -22,7 +23,7 @@ pub struct Span {
impl Span {
pub fn new(range: Range, text: String) -> Self {
- Span { range, text }
+ Self { range, text }
}
}
@@ -32,6 +33,7 @@ impl SyntaxNode for Span {
}
}
+#[derive(Debug)]
pub struct CharStream<'a> {
text: &'a str,
chars: Peekable<CharIndices<'a>>,
@@ -43,7 +45,7 @@ pub struct CharStream<'a> {
impl<'a> CharStream<'a> {
pub fn new(text: &'a str) -> Self {
- CharStream {
+ Self {
text,
chars: text.char_indices().peekable(),
current_position: Position::new(0, 0),
@@ -149,21 +151,13 @@ fn is_command_char(c: char) -> bool {
c >= 'a' && c <= 'z' || c >= 'A' && c <= 'Z' || c == '@'
}
-pub fn titlelize(string: &str) -> String {
- let mut chars = string.chars();
- match chars.next() {
- None => String::new(),
- Some(c) => c.to_uppercase().chain(chars).collect(),
- }
-}
-
#[cfg(test)]
mod tests {
use super::*;
- use crate::range::RangeExt;
+ use crate::protocol::RangeExt;
#[test]
- fn test_peek() {
+ fn peek() {
let mut stream = CharStream::new("ab\nc");
assert_eq!(Some('a'), stream.peek());
assert_eq!(Some('a'), stream.next());
@@ -178,7 +172,7 @@ mod tests {
}
#[test]
- fn test_span() {
+ fn span() {
let mut stream = CharStream::new("abc\ndef");
stream.next();
stream.start_span();
@@ -194,7 +188,7 @@ mod tests {
}
#[test]
- fn test_span_unicode() {
+ fn span_unicode() {
let mut stream = CharStream::new("😀😃😄😁");
stream.next();
stream.start_span();
@@ -208,7 +202,7 @@ mod tests {
}
#[test]
- fn test_satifies() {
+ fn satifies() {
let mut stream = CharStream::new("aBc");
assert_eq!(true, stream.satifies(|c| c.is_lowercase()));
stream.next();
@@ -216,7 +210,7 @@ mod tests {
}
#[test]
- fn test_skip_rest_of_line() {
+ fn skip_rest_of_line() {
let mut stream = CharStream::new("abc\ndef");
stream.skip_rest_of_line();
assert_eq!(Some('d'), stream.next());
@@ -227,7 +221,7 @@ mod tests {
}
#[test]
- fn test_seek() {
+ fn seek() {
let mut stream = CharStream::new("abc\ndefghi");
let pos = Position::new(1, 2);
stream.seek(pos);
@@ -235,7 +229,7 @@ mod tests {
}
#[test]
- fn test_command_basic() {
+ fn command_basic() {
let mut stream = CharStream::new("\\foo@bar");
let span = stream.command();
assert_eq!(
@@ -245,7 +239,7 @@ mod tests {
}
#[test]
- fn test_command_star() {
+ fn command_star() {
let mut stream = CharStream::new("\\foo*");
let span = stream.command();
assert_eq!(
@@ -255,7 +249,7 @@ mod tests {
}
#[test]
- fn test_command_escape() {
+ fn command_escape() {
let mut stream = CharStream::new("\\**");
let span = stream.command();
assert_eq!(
diff --git a/support/texlab/src/test/client.rs b/support/texlab/src/test/client.rs
new file mode 100644
index 0000000000..b8806cc933
--- /dev/null
+++ b/support/texlab/src/test/client.rs
@@ -0,0 +1,73 @@
+use crate::protocol::*;
+use jsonrpc::client::Result;
+use jsonrpc_derive::{jsonrpc_client, jsonrpc_method};
+
+#[jsonrpc_client(TestLatexLspClient)]
+pub trait TestLspClient {
+ #[jsonrpc_method("initialize", kind = "request")]
+ async fn initialize(&self, params: InitializeParams) -> Result<InitializeResult>;
+
+ #[jsonrpc_method("initialized", kind = "notification")]
+ async fn initialized(&self, params: InitializedParams);
+
+ #[jsonrpc_method("shutdown", kind = "request")]
+ async fn shutdown(&self, params: ()) -> Result<()>;
+
+ #[jsonrpc_method("exit", kind = "notification")]
+ async fn exit(&self, params: ());
+
+ #[jsonrpc_method("textDocument/didOpen", kind = "notification")]
+ async fn did_open(&self, params: DidOpenTextDocumentParams);
+
+ #[jsonrpc_method("textDocument/didChange", kind = "notification")]
+ async fn did_change(&self, params: DidChangeTextDocumentParams);
+
+ #[jsonrpc_method("workspace/didChangeConfiguration", kind = "notification")]
+ async fn did_change_configuration(&self, params: DidChangeConfigurationParams);
+
+ #[jsonrpc_method("textDocument/definition", kind = "request")]
+ async fn definition(&self, params: TextDocumentPositionParams) -> Result<DefinitionResponse>;
+
+ #[jsonrpc_method("textDocument/completion", kind = "request")]
+ async fn completion(&self, params: CompletionParams) -> Result<CompletionList>;
+
+ #[jsonrpc_method("completionItem/resolve", kind = "request")]
+ async fn completion_resolve(&self, item: CompletionItem) -> Result<CompletionItem>;
+
+ #[jsonrpc_method("textDocument/foldingRange", kind = "request")]
+ async fn folding_range(&self, params: FoldingRangeParams) -> Result<Vec<FoldingRange>>;
+
+ #[jsonrpc_method("textDocument/documentHighlight", kind = "request")]
+ async fn document_highlight(
+ &self,
+ params: TextDocumentPositionParams,
+ ) -> Result<Vec<DocumentHighlight>>;
+
+ #[jsonrpc_method("textDocument/documentLink", kind = "request")]
+ async fn document_link(&self, params: DocumentLinkParams) -> Result<Vec<DocumentLink>>;
+
+ #[jsonrpc_method("textDocument/references", kind = "request")]
+ async fn references(&self, params: ReferenceParams) -> Result<Vec<Location>>;
+
+ #[jsonrpc_method("textDocument/prepareRename", kind = "request")]
+ async fn prepare_rename(&self, params: TextDocumentPositionParams) -> Result<Option<Range>>;
+
+ #[jsonrpc_method("textDocument/rename", kind = "request")]
+ async fn rename(&self, params: RenameParams) -> Result<Option<WorkspaceEdit>>;
+
+ #[jsonrpc_method("textDocument/hover", kind = "request")]
+ async fn hover(&self, params: TextDocumentPositionParams) -> Result<Option<Hover>>;
+
+ #[jsonrpc_method("workspace/symbol", kind = "request")]
+ async fn workspace_symbol(
+ &self,
+ params: WorkspaceSymbolParams,
+ ) -> Result<Vec<SymbolInformation>>;
+
+ #[jsonrpc_method("textDocument/documentSymbol", kind = "request")]
+ async fn document_symbol(&self, params: DocumentSymbolParams)
+ -> Result<DocumentSymbolResponse>;
+
+ #[jsonrpc_method("$/detectRoot", kind = "request")]
+ async fn detect_root(&self, params: TextDocumentIdentifier) -> Result<()>;
+}
diff --git a/support/texlab/src/test/mod.rs b/support/texlab/src/test/mod.rs
new file mode 100644
index 0000000000..5f26fb0dcc
--- /dev/null
+++ b/support/texlab/src/test/mod.rs
@@ -0,0 +1,632 @@
+#![allow(deprecated)]
+
+mod client;
+mod server;
+
+pub use self::{
+ client::{TestLatexLspClient, TestLspClient},
+ server::TestLatexLspServer,
+};
+
+use crate::{
+ protocol::*,
+ server::LatexLspServer,
+ tex::{Distribution, UnknownDistribution},
+};
+use futures::{
+ channel::mpsc,
+ future::{join, AbortHandle, Abortable},
+ lock::Mutex,
+ prelude::*,
+};
+use jsonrpc::MessageHandler;
+use once_cell::sync::Lazy;
+use std::{path::PathBuf, sync::Arc};
+use tempfile::{tempdir, TempDir};
+use tokio::fs;
+
+struct GlobalDistribution {
+ distro: Mutex<Option<Arc<dyn Distribution>>>,
+}
+
+impl GlobalDistribution {
+ fn new() -> Self {
+ Self {
+ distro: Mutex::new(None),
+ }
+ }
+
+ async fn get(&self, use_distro: bool) -> Arc<dyn Distribution> {
+ if use_distro {
+ let mut distro_lock = self.distro.lock().await;
+ match &*distro_lock {
+ Some(distro) => distro.clone(),
+ None => {
+ let distro = Distribution::detect().await;
+ *distro_lock = Some(distro.clone());
+ distro
+ }
+ }
+ } else {
+ Arc::new(UnknownDistribution::default())
+ }
+ }
+}
+
+static DISTRO: Lazy<GlobalDistribution> = Lazy::new(GlobalDistribution::new);
+
+#[derive(Debug)]
+struct Endpoint<S, C> {
+ receiver: mpsc::Receiver<String>,
+ client: Arc<C>,
+ server: Arc<S>,
+ handler: MessageHandler<S, C>,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Default)]
+pub struct TestBedBuilder {
+ files: Vec<(PathBuf, String)>,
+ use_distro: bool,
+ root_dir: Option<PathBuf>,
+ latex_build: Option<LatexBuildOptions>,
+ latex_lint: Option<LatexLintOptions>,
+ latex_forward_search: Option<LatexForwardSearchOptions>,
+ bibtex_formatting: Option<BibtexFormattingOptions>,
+}
+
+impl TestBedBuilder {
+ pub fn new() -> Self {
+ Self::default()
+ }
+
+ pub fn file<P: Into<PathBuf>>(&mut self, path: P, text: &str) -> &mut Self {
+ self.files.push((path.into(), text.trim().into()));
+ self
+ }
+
+ pub fn use_distro(&mut self) -> &mut Self {
+ self.use_distro = true;
+ self
+ }
+
+ pub fn root_dir<P: Into<PathBuf>>(&mut self, path: P) -> &mut Self {
+ self.root_dir = Some(path.into());
+ self
+ }
+
+ pub fn latex_build(&mut self, options: LatexBuildOptions) -> &mut Self {
+ self.latex_build = Some(options);
+ self
+ }
+
+ pub fn latex_lint(&mut self, options: LatexLintOptions) -> &mut Self {
+ self.latex_lint = Some(options);
+ self
+ }
+
+ pub fn latex_forward_search(&mut self, options: LatexForwardSearchOptions) -> &mut Self {
+ self.latex_forward_search = Some(options);
+ self
+ }
+
+ pub fn bibtex_formatting(&mut self, options: BibtexFormattingOptions) -> &mut Self {
+ self.bibtex_formatting = Some(options);
+ self
+ }
+
+ pub async fn build(&self) -> TestBed {
+ let dir = tempdir().expect("failed to create temporary directory");
+ for (path, text) in &self.files {
+ let full_path = dir.path().join(path);
+ fs::create_dir_all(full_path.parent().unwrap())
+ .await
+ .unwrap();
+ fs::write(&full_path, text).await.unwrap();
+ }
+
+ let (tx1, rx1) = mpsc::channel(0);
+ let (tx2, rx2) = mpsc::channel(0);
+
+ let endpoint1 = self.build_endpoint1(&dir, tx2, rx1).await;
+ let endpoint2 = self.build_endpoint2(&dir, tx1, rx2).await;
+ let server = Arc::clone(&endpoint2.server);
+ let client = Arc::clone(&endpoint2.client);
+ TestBed {
+ dir,
+ server,
+ client,
+ endpoint1: Some(endpoint1),
+ endpoint2: Some(endpoint2),
+ handle: None,
+ }
+ }
+
+ async fn build_endpoint1(
+ &self,
+ dir: &TempDir,
+ tx2: mpsc::Sender<String>,
+ rx1: mpsc::Receiver<String>,
+ ) -> Endpoint<LatexLspServer<LatexLspClient>, LatexLspClient> {
+ let client = Arc::new(LatexLspClient::new(tx2.clone()));
+ let server = Arc::new(LatexLspServer::new(
+ DISTRO.get(self.use_distro).await,
+ Arc::clone(&client),
+ Arc::new(dir.path().to_path_buf()),
+ ));
+
+ Endpoint {
+ receiver: rx1,
+ client: Arc::clone(&client),
+ server: Arc::clone(&server),
+ handler: MessageHandler {
+ client,
+ server,
+ output: tx2.clone(),
+ },
+ }
+ }
+
+ async fn build_endpoint2(
+ &self,
+ dir: &TempDir,
+ tx1: mpsc::Sender<String>,
+ rx2: mpsc::Receiver<String>,
+ ) -> Endpoint<TestLatexLspServer, TestLatexLspClient> {
+ let options = Options {
+ latex: Some(LatexOptions {
+ root_directory: self.root_dir.as_ref().map(|path| dir.path().join(path)),
+ build: self.latex_build.clone(),
+ forward_search: self.latex_forward_search.clone(),
+ lint: self.latex_lint.clone(),
+ }),
+ bibtex: Some(BibtexOptions {
+ formatting: self.bibtex_formatting.clone(),
+ }),
+ };
+
+ let test_client = Arc::new(TestLatexLspClient::new(tx1.clone()));
+ let test_server = Arc::new(TestLatexLspServer::new(options));
+
+ Endpoint {
+ receiver: rx2,
+ client: Arc::clone(&test_client),
+ server: Arc::clone(&test_server),
+ handler: MessageHandler {
+ client: test_client,
+ server: test_server,
+ output: tx1,
+ },
+ }
+ }
+}
+
+pub struct TestBed {
+ pub dir: TempDir,
+ pub server: Arc<TestLatexLspServer>,
+ pub client: Arc<TestLatexLspClient>,
+ endpoint1: Option<Endpoint<LatexLspServer<LatexLspClient>, LatexLspClient>>,
+ endpoint2: Option<Endpoint<TestLatexLspServer, TestLatexLspClient>>,
+ handle: Option<AbortHandle>,
+}
+
+impl TestBed {
+ pub fn spawn(&mut self) {
+ let (handle, reg) = AbortHandle::new_pair();
+
+ let endpoint1 = self.endpoint1.take().unwrap();
+ let endpoint2 = self.endpoint2.take().unwrap();
+ let mut rx1 = endpoint1.receiver;
+ let mut rx2 = endpoint2.receiver;
+ let mut handler1 = endpoint1.handler;
+ let mut handler2 = endpoint2.handler;
+
+ tokio::spawn(Abortable::new(
+ async move {
+ let task1 = async move {
+ while let Some(json) = rx2.next().await {
+ handler2.handle(&json).await;
+ }
+ };
+
+ let task2 = async move {
+ while let Some(json) = rx1.next().await {
+ handler1.handle(&json).await;
+ }
+ };
+
+ join(task1, task2).await;
+ },
+ reg,
+ ));
+ self.handle = Some(handle);
+ }
+
+ pub async fn initialize(&self, capabilities: ClientCapabilities) {
+ self.client
+ .initialize(InitializeParams {
+ capabilities,
+ initialization_options: None,
+ process_id: None,
+ root_path: None,
+ root_uri: None,
+ trace: None,
+ workspace_folders: None,
+ client_info: None,
+ })
+ .await
+ .unwrap();
+ self.client.initialized(InitializedParams {}).await;
+ }
+
+ pub fn path(&self, relative_path: &str) -> PathBuf {
+ self.dir.path().join(relative_path)
+ }
+
+ pub fn uri(&self, relative_path: &str) -> Uri {
+ Uri::from_file_path(self.path(relative_path)).unwrap()
+ }
+
+ pub fn identifier(&self, relative_path: &str) -> TextDocumentIdentifier {
+ TextDocumentIdentifier::new(self.uri(relative_path).into())
+ }
+
+ pub async fn open(&self, relative_path: &str) {
+ let full_path = self.path(relative_path);
+ let params = DidOpenTextDocumentParams {
+ text_document: TextDocumentItem {
+ language_id: if relative_path.ends_with("bib") {
+ "bibtex".into()
+ } else {
+ "latex".into()
+ },
+ uri: Uri::from_file_path(&full_path).unwrap().into(),
+ version: 0,
+ text: fs::read_to_string(&full_path).await.unwrap(),
+ },
+ };
+ self.client.did_open(params).await;
+ }
+
+ pub async fn edit<S: Into<String>>(&self, relative_path: &str, text: S) {
+ let uri = self.uri(relative_path).into();
+ let params = DidChangeTextDocumentParams {
+ text_document: VersionedTextDocumentIdentifier::new(uri, 0),
+ content_changes: vec![TextDocumentContentChangeEvent {
+ range: None,
+ range_length: None,
+ text: text.into(),
+ }],
+ };
+ self.client.did_change(params).await;
+ }
+
+ pub async fn push_options(&self) {
+ let options = self.server.options.lock().await.clone();
+ let params = DidChangeConfigurationParams {
+ settings: serde_json::to_value::<Options>(options).unwrap(),
+ };
+ self.client.did_change_configuration(params).await
+ }
+
+ pub async fn definition_link(
+ &self,
+ relative_path: &str,
+ line: u64,
+ character: u64,
+ ) -> Option<Vec<LocationLink>> {
+ let params = TextDocumentPositionParams {
+ text_document: self.identifier(relative_path),
+ position: Position::new(line, character),
+ };
+ let response = self.client.definition(params).await.ok()?;
+ match response {
+ DefinitionResponse::LocationLinks(links) => Some(links),
+ DefinitionResponse::Locations(_) => unreachable!(),
+ }
+ }
+
+ pub async fn definition_location(
+ &self,
+ relative_path: &str,
+ line: u64,
+ character: u64,
+ ) -> Option<Vec<Location>> {
+ let params = TextDocumentPositionParams {
+ text_document: self.identifier(relative_path),
+ position: Position::new(line, character),
+ };
+ let response = self.client.definition(params).await.ok()?;
+ match response {
+ DefinitionResponse::LocationLinks(_) => unreachable!(),
+ DefinitionResponse::Locations(locations) => Some(locations),
+ }
+ }
+
+ pub async fn completion(
+ &self,
+ relative_path: &str,
+ line: u64,
+ character: u64,
+ ) -> Option<Vec<CompletionItem>> {
+ let params = CompletionParams {
+ text_document_position: TextDocumentPositionParams {
+ text_document: self.identifier(relative_path),
+ position: Position::new(line, character),
+ },
+ context: None,
+ work_done_progress_params: WorkDoneProgressParams::default(),
+ partial_result_params: PartialResultParams::default(),
+ };
+ self.client
+ .completion(params)
+ .await
+ .ok()
+ .map(|list| list.items)
+ }
+
+ pub async fn folding_range(&self, relative_path: &str) -> Option<Vec<FoldingRange>> {
+ let params = FoldingRangeParams {
+ text_document: self.identifier(relative_path),
+ work_done_progress_params: WorkDoneProgressParams::default(),
+ partial_result_params: PartialResultParams::default(),
+ };
+ self.client.folding_range(params).await.ok()
+ }
+
+ pub async fn document_highlight(
+ &self,
+ relative_path: &str,
+ line: u64,
+ character: u64,
+ ) -> Option<Vec<DocumentHighlight>> {
+ let params = TextDocumentPositionParams {
+ text_document: self.identifier(relative_path),
+ position: Position::new(line, character),
+ };
+ self.client.document_highlight(params).await.ok()
+ }
+
+ pub async fn document_link(&self, relative_path: &str) -> Option<Vec<DocumentLink>> {
+ let params = DocumentLinkParams {
+ text_document: self.identifier(relative_path),
+ work_done_progress_params: WorkDoneProgressParams::default(),
+ partial_result_params: PartialResultParams::default(),
+ };
+ self.client.document_link(params).await.ok()
+ }
+
+ pub async fn references(
+ &self,
+ relative_path: &str,
+ line: u64,
+ character: u64,
+ include_declaration: bool,
+ ) -> Option<Vec<Location>> {
+ let params = ReferenceParams {
+ text_document_position: TextDocumentPositionParams::new(
+ self.identifier(relative_path),
+ Position::new(line, character),
+ ),
+ context: ReferenceContext {
+ include_declaration,
+ },
+ work_done_progress_params: WorkDoneProgressParams::default(),
+ partial_result_params: PartialResultParams::default(),
+ };
+ self.client.references(params).await.ok()
+ }
+
+ pub async fn prepare_rename(
+ &self,
+ relative_path: &str,
+ line: u64,
+ character: u64,
+ ) -> Option<Option<Range>> {
+ let pos = Position::new(line, character);
+ let params = TextDocumentPositionParams::new(self.identifier(relative_path), pos);
+ self.client.prepare_rename(params).await.ok()
+ }
+
+ pub async fn rename<S: Into<String>>(
+ &self,
+ relative_path: &str,
+ line: u64,
+ character: u64,
+ new_name: S,
+ ) -> Option<Option<WorkspaceEdit>> {
+ let params = RenameParams {
+ text_document_position: TextDocumentPositionParams::new(
+ self.identifier(relative_path),
+ Position::new(line, character),
+ ),
+ new_name: new_name.into(),
+ work_done_progress_params: WorkDoneProgressParams::default(),
+ };
+ self.client.rename(params).await.ok()
+ }
+
+ pub async fn document_symbol_flat(
+ &self,
+ relative_path: &str,
+ ) -> Option<Vec<SymbolInformation>> {
+ let params = DocumentSymbolParams {
+ text_document: self.identifier(relative_path),
+ work_done_progress_params: WorkDoneProgressParams::default(),
+ partial_result_params: PartialResultParams::default(),
+ };
+ match self.client.document_symbol(params).await.ok()? {
+ DocumentSymbolResponse::Flat(symbols) => Some(symbols),
+ DocumentSymbolResponse::Nested(_) => unreachable!(),
+ }
+ }
+
+ pub async fn document_symbol_nested(&self, relative_path: &str) -> Option<Vec<DocumentSymbol>> {
+ let params = DocumentSymbolParams {
+ text_document: self.identifier(relative_path),
+ work_done_progress_params: WorkDoneProgressParams::default(),
+ partial_result_params: PartialResultParams::default(),
+ };
+ match self.client.document_symbol(params).await.ok()? {
+ DocumentSymbolResponse::Flat(_) => unreachable!(),
+ DocumentSymbolResponse::Nested(symbols) => Some(symbols),
+ }
+ }
+
+ pub async fn hover(
+ &self,
+ relative_path: &str,
+ line: u64,
+ character: u64,
+ ) -> Option<Option<Hover>> {
+ let params = TextDocumentPositionParams {
+ text_document: self.identifier(relative_path),
+ position: Position::new(line, character),
+ };
+ self.client.hover(params).await.ok()
+ }
+
+ pub async fn detect_root(&self, relative_path: &str) {
+ self.client
+ .detect_root(self.identifier(relative_path))
+ .await
+ .unwrap();
+ }
+
+ pub async fn shutdown(&self) {
+ self.client.shutdown(()).await.unwrap();
+ self.client.exit(()).await;
+ }
+}
+
+impl Drop for TestBed {
+ fn drop(&mut self) {
+ if let Some(handle) = self.handle.as_ref() {
+ handle.abort();
+ }
+ }
+}
+
+pub static PULL_CAPABILITIES: ClientCapabilities = {
+ ClientCapabilities {
+ experimental: None,
+ text_document: None,
+ window: None,
+ workspace: Some(WorkspaceClientCapabilities {
+ apply_edit: None,
+ configuration: Some(true),
+ did_change_configuration: None,
+ did_change_watched_files: None,
+ execute_command: None,
+ symbol: None,
+ workspace_edit: None,
+ workspace_folders: None,
+ }),
+ }
+};
+
+pub static PUSH_CAPABILITIES: ClientCapabilities = {
+ ClientCapabilities {
+ experimental: None,
+ text_document: None,
+ window: None,
+ workspace: Some(WorkspaceClientCapabilities {
+ apply_edit: None,
+ configuration: None,
+ did_change_configuration: Some(GenericCapability {
+ dynamic_registration: Some(true),
+ }),
+ did_change_watched_files: None,
+ execute_command: None,
+ symbol: None,
+ workspace_edit: None,
+ workspace_folders: None,
+ }),
+ }
+};
+
+pub static NESTED_SYMBOL_CAPABILITIES: ClientCapabilities = {
+ ClientCapabilities {
+ experimental: None,
+ text_document: Some(TextDocumentClientCapabilities {
+ code_action: None,
+ code_lens: None,
+ color_provider: None,
+ completion: None,
+ declaration: None,
+ definition: None,
+ document_highlight: None,
+ document_link: None,
+ document_symbol: Some(DocumentSymbolCapability {
+ hierarchical_document_symbol_support: Some(true),
+ dynamic_registration: None,
+ symbol_kind: None,
+ }),
+ folding_range: None,
+ formatting: None,
+ hover: None,
+ implementation: None,
+ on_type_formatting: None,
+ publish_diagnostics: None,
+ range_formatting: None,
+ references: None,
+ rename: None,
+ signature_help: None,
+ synchronization: None,
+ type_definition: None,
+ }),
+ window: None,
+ workspace: Some(WorkspaceClientCapabilities {
+ apply_edit: None,
+ configuration: Some(true),
+ did_change_configuration: None,
+ did_change_watched_files: None,
+ execute_command: None,
+ symbol: None,
+ workspace_edit: None,
+ workspace_folders: None,
+ }),
+ }
+};
+
+pub static LOCATION_LINK_CAPABILITIES: ClientCapabilities = {
+ ClientCapabilities {
+ experimental: None,
+ text_document: Some(TextDocumentClientCapabilities {
+ code_action: None,
+ code_lens: None,
+ color_provider: None,
+ completion: None,
+ declaration: None,
+ definition: Some(GotoCapability {
+ dynamic_registration: None,
+ link_support: Some(true),
+ }),
+ document_highlight: None,
+ document_link: None,
+ document_symbol: None,
+ folding_range: None,
+ formatting: None,
+ hover: None,
+ implementation: None,
+ on_type_formatting: None,
+ publish_diagnostics: None,
+ range_formatting: None,
+ references: None,
+ rename: None,
+ signature_help: None,
+ synchronization: None,
+ type_definition: None,
+ }),
+ window: None,
+ workspace: Some(WorkspaceClientCapabilities {
+ apply_edit: None,
+ configuration: Some(true),
+ did_change_configuration: None,
+ did_change_watched_files: None,
+ execute_command: None,
+ symbol: None,
+ workspace_edit: None,
+ workspace_folders: None,
+ }),
+ }
+};
diff --git a/support/texlab/src/test/server.rs b/support/texlab/src/test/server.rs
new file mode 100644
index 0000000000..77bed68c07
--- /dev/null
+++ b/support/texlab/src/test/server.rs
@@ -0,0 +1,87 @@
+use crate::protocol::*;
+use aovec::Aovec;
+use async_trait::async_trait;
+use chashmap::CHashMap;
+use futures::lock::Mutex;
+use jsonrpc::server::{Middleware, Result};
+use jsonrpc_derive::{jsonrpc_method, jsonrpc_server};
+
+pub struct TestLatexLspServer {
+ pub options: Mutex<Options>,
+ pub show_message_buf: Aovec<ShowMessageParams>,
+ pub register_capability_buf: Aovec<RegistrationParams>,
+ pub diagnostics_by_uri: CHashMap<Uri, Vec<Diagnostic>>,
+ pub progress_buf: Aovec<ProgressParams>,
+ pub work_done_progress_create_buf: Aovec<WorkDoneProgressCreateParams>,
+ pub log_message_buf: Aovec<LogMessageParams>,
+}
+
+#[jsonrpc_server]
+impl TestLatexLspServer {
+ pub fn new(options: Options) -> Self {
+ let base = 16;
+ Self {
+ options: Mutex::new(options),
+ show_message_buf: Aovec::new(base),
+ register_capability_buf: Aovec::new(base),
+ diagnostics_by_uri: CHashMap::new(),
+ progress_buf: Aovec::new(base),
+ work_done_progress_create_buf: Aovec::new(base),
+ log_message_buf: Aovec::new(base),
+ }
+ }
+
+ #[jsonrpc_method("workspace/configuration", kind = "request")]
+ pub async fn configuration(&self, params: ConfigurationParams) -> Result<serde_json::Value> {
+ let options = self.options.lock().await;
+ if params.items[0].section.as_ref().unwrap() == "latex" {
+ Ok(serde_json::to_value(vec![options.latex.clone().unwrap_or_default()]).unwrap())
+ } else {
+ Ok(serde_json::to_value(vec![options.bibtex.clone().unwrap_or_default()]).unwrap())
+ }
+ }
+
+ #[jsonrpc_method("window/showMessage", kind = "notification")]
+ pub async fn show_message(&self, params: ShowMessageParams) {
+ self.show_message_buf.push(params);
+ }
+
+ #[jsonrpc_method("client/registerCapability", kind = "request")]
+ pub async fn register_capability(&self, params: RegistrationParams) -> Result<()> {
+ self.register_capability_buf.push(params);
+ Ok(())
+ }
+
+ #[jsonrpc_method("textDocument/publishDiagnostics", kind = "notification")]
+ pub async fn publish_diagnostics(&self, params: PublishDiagnosticsParams) {
+ let _ = self
+ .diagnostics_by_uri
+ .insert(params.uri.into(), params.diagnostics);
+ }
+
+ #[jsonrpc_method("$/progress", kind = "notification")]
+ pub async fn progress(&self, params: ProgressParams) {
+ self.progress_buf.push(params);
+ }
+
+ #[jsonrpc_method("window/workDoneProgress/create", kind = "request")]
+ pub async fn work_done_progress_create(
+ &self,
+ params: WorkDoneProgressCreateParams,
+ ) -> Result<()> {
+ self.work_done_progress_create_buf.push(params);
+ Ok(())
+ }
+
+ #[jsonrpc_method("window/logMessage", kind = "notification")]
+ pub async fn log_message(&self, params: LogMessageParams) {
+ self.log_message_buf.push(params);
+ }
+}
+
+#[async_trait]
+impl Middleware for TestLatexLspServer {
+ async fn before_message(&self) {}
+
+ async fn after_message(&self) {}
+}
diff --git a/support/texlab/src/tex/compile.rs b/support/texlab/src/tex/compile.rs
new file mode 100644
index 0000000000..a2b0d2f37d
--- /dev/null
+++ b/support/texlab/src/tex/compile.rs
@@ -0,0 +1,97 @@
+use std::{io, process::Stdio, time::Duration};
+use tempfile::{tempdir, TempDir};
+use thiserror::Error;
+use tokio::{
+ fs,
+ process::Command,
+ time::{timeout, Elapsed},
+};
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub enum Format {
+ Latex,
+ Pdflatex,
+ Xelatex,
+ Lualatex,
+}
+
+impl Format {
+ pub fn executable(self) -> &'static str {
+ match self {
+ Self::Latex => "latex",
+ Self::Pdflatex => "pdflatex",
+ Self::Xelatex => "xelatex",
+ Self::Lualatex => "lualatex",
+ }
+ }
+}
+
+#[derive(Debug)]
+pub struct Artifacts {
+ pub dir: TempDir,
+ pub log: String,
+}
+
+#[derive(Debug, Error)]
+pub enum CompileError {
+ #[error("an I/O error occurred: `{0}`")]
+ IO(#[from] io::Error),
+ #[error("TeX engine is not installed")]
+ NotInstalled,
+ #[error("build timeout: `{0}`")]
+ Timeout(#[from] Elapsed),
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub struct CompileParams<'a> {
+ pub format: Format,
+ pub file_name: &'a str,
+ pub code: &'a str,
+ pub timeout: Duration,
+}
+
+impl<'a> Default for CompileParams<'a> {
+ fn default() -> Self {
+ Self {
+ format: Format::Lualatex,
+ file_name: "code.tex",
+ code: "",
+ timeout: Duration::from_secs(15),
+ }
+ }
+}
+
+#[derive(Debug, Clone, Copy)]
+pub struct Compiler<'a> {
+ pub executable: &'a str,
+ pub args: &'a [&'a str],
+ pub file_name: &'a str,
+ pub timeout: Duration,
+}
+
+impl<'a> Compiler<'a> {
+ pub async fn compile<'b>(&'a self, code: &'b str) -> Result<Artifacts, CompileError> {
+ let directory = tempdir()?;
+ let tex_file = directory.path().join(self.file_name);
+ fs::write(&tex_file, code).await?;
+
+ let child = Command::new(self.executable)
+ .args(self.args)
+ .current_dir(&directory)
+ .stdout(Stdio::null())
+ .stderr(Stdio::null())
+ .status();
+
+ timeout(self.timeout, child)
+ .await?
+ .map_err(|_| CompileError::NotInstalled)?;
+
+ let log_file = tex_file.with_extension("log");
+ let log_bytes = fs::read(log_file).await?;
+ let log = String::from_utf8_lossy(&log_bytes).into_owned();
+ Ok(Artifacts {
+ dir: directory,
+ log,
+ })
+ }
+}
diff --git a/support/texlab/src/tex/kpsewhich.rs b/support/texlab/src/tex/kpsewhich.rs
new file mode 100644
index 0000000000..cb2ab89de5
--- /dev/null
+++ b/support/texlab/src/tex/kpsewhich.rs
@@ -0,0 +1,112 @@
+use super::Language;
+use futures::Future;
+use std::{
+ collections::HashMap,
+ env,
+ ffi::OsStr,
+ io,
+ path::{Path, PathBuf},
+ string::FromUtf8Error,
+};
+use thiserror::Error;
+use tokio::{fs, process::Command};
+
+#[derive(Debug, Error)]
+pub enum KpsewhichError {
+ #[error("an I/O error occurred: `{0}`")]
+ IO(#[from] io::Error),
+ #[error("an utf8 error occurred: `{0}`")]
+ Decode(#[from] FromUtf8Error),
+ #[error("invalid output from kpsewhich")]
+ InvalidOutput,
+ #[error("kpsewhich not installed")]
+ NotInstalled,
+ #[error("no kpsewhich database")]
+ NoDatabase,
+ #[error("corrupt kpsewhich database")]
+ CorruptDatabase,
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Default)]
+pub struct Resolver {
+ pub files_by_name: HashMap<String, PathBuf>,
+}
+
+impl Resolver {
+ pub fn new(files_by_name: HashMap<String, PathBuf>) -> Self {
+ Self { files_by_name }
+ }
+}
+
+pub async fn parse_database<'a, R, F>(
+ root_directories: &'a [PathBuf],
+ reader: R,
+) -> Result<Resolver, KpsewhichError>
+where
+ R: Fn(&'a Path) -> F,
+ F: Future<Output = Result<Vec<PathBuf>, KpsewhichError>>,
+{
+ let mut files_by_name = HashMap::new();
+ for directory in root_directories {
+ for path in reader(directory).await? {
+ if is_tex_file(&path) {
+ if let Some(path) = make_absolute(root_directories, &path).await {
+ if let Some(name) = path
+ .file_name()
+ .and_then(OsStr::to_str)
+ .map(ToString::to_string)
+ {
+ files_by_name.insert(name, path);
+ }
+ }
+ }
+ }
+ }
+ Ok(Resolver::new(files_by_name))
+}
+
+fn is_tex_file(path: &Path) -> bool {
+ path.extension()
+ .and_then(OsStr::to_str)
+ .and_then(Language::by_extension)
+ .is_some()
+}
+
+async fn make_absolute(root_directories: &[PathBuf], relative_path: &Path) -> Option<PathBuf> {
+ for dir in root_directories.iter().rev() {
+ if let Ok(path) = fs::canonicalize(dir.join(&relative_path)).await {
+ return Some(path);
+ }
+ }
+ None
+}
+
+pub async fn root_directories() -> Result<Vec<PathBuf>, KpsewhichError> {
+ let texmf = run(&["-var-value", "TEXMF"]).await?;
+ let expand_arg = format!("--expand-braces={}", texmf);
+ let expanded = run(&[&expand_arg]).await?;
+ let directories = env::split_paths(&expanded.replace("!", ""))
+ .filter(|path| path.exists())
+ .collect();
+ Ok(directories)
+}
+
+async fn run<I, S>(args: I) -> Result<String, KpsewhichError>
+where
+ I: IntoIterator<Item = S>,
+ S: AsRef<OsStr>,
+{
+ let output = Command::new("kpsewhich")
+ .args(args)
+ .output()
+ .await
+ .map_err(|_| KpsewhichError::NotInstalled)?;
+
+ let result = String::from_utf8(output.stdout)?
+ .lines()
+ .next()
+ .ok_or(KpsewhichError::InvalidOutput)?
+ .into();
+
+ Ok(result)
+}
diff --git a/support/texlab/src/tex/miktex.rs b/support/texlab/src/tex/miktex.rs
new file mode 100644
index 0000000000..9f1551df44
--- /dev/null
+++ b/support/texlab/src/tex/miktex.rs
@@ -0,0 +1,108 @@
+use super::{
+ compile,
+ kpsewhich::{self, KpsewhichError, Resolver},
+ Artifacts, CompileError, CompileParams, Distribution, DistributionKind,
+};
+use async_trait::async_trait;
+use byteorder::{LittleEndian, ReadBytesExt};
+use futures::lock::Mutex;
+use std::{
+ ffi::OsStr,
+ io::{self, Cursor},
+ mem,
+ path::{Path, PathBuf},
+ sync::Arc,
+};
+use tokio::fs;
+
+#[derive(Debug, Default)]
+pub struct Miktex {
+ resolver: Mutex<Arc<Resolver>>,
+}
+
+#[async_trait]
+impl Distribution for Miktex {
+ fn kind(&self) -> DistributionKind {
+ DistributionKind::Miktex
+ }
+
+ async fn compile<'a>(&'a self, params: CompileParams<'a>) -> Result<Artifacts, CompileError> {
+ compile(params).await
+ }
+
+ async fn load(&self) -> Result<(), KpsewhichError> {
+ let root_directories = kpsewhich::root_directories().await?;
+ let resolver = kpsewhich::parse_database(&root_directories, read_database).await?;
+ mem::replace(&mut *self.resolver.lock().await, Arc::new(resolver));
+ Ok(())
+ }
+
+ async fn resolver(&self) -> Arc<Resolver> {
+ let resolver = self.resolver.lock().await;
+ Arc::clone(&resolver)
+ }
+}
+
+const DATABASE_PATH: &str = "miktex/data/le";
+const FNDB_SIGNATURE: u32 = 0x42_44_4e_46;
+const FNDB_WORD_SIZE: usize = 4;
+const FNDB_TABLE_POINTER_OFFSET: usize = 4 * FNDB_WORD_SIZE;
+const FNDB_TABLE_SIZE_OFFSET: usize = 6 * FNDB_WORD_SIZE;
+const FNDB_ENTRY_SIZE: usize = 4 * FNDB_WORD_SIZE;
+
+async fn read_database(directory: &Path) -> Result<Vec<PathBuf>, KpsewhichError> {
+ let database_directory = directory.join(DATABASE_PATH);
+ if !database_directory.exists() {
+ return Ok(Vec::new());
+ }
+
+ let mut database = Vec::new();
+ let mut files: tokio::fs::ReadDir = fs::read_dir(database_directory).await?;
+ while let Some(file) = files.next_entry().await? {
+ if file.path().extension().and_then(OsStr::to_str) == Some("fndb-5") {
+ let bytes = fs::read(file.path()).await?;
+ database.extend(parse_database(&bytes).map_err(|_| KpsewhichError::CorruptDatabase)?);
+ }
+ }
+ Ok(database)
+}
+
+fn parse_database(bytes: &[u8]) -> io::Result<Vec<PathBuf>> {
+ let mut reader = Cursor::new(bytes);
+ if reader.read_u32::<LittleEndian>()? != FNDB_SIGNATURE {
+ return Err(io::ErrorKind::InvalidData.into());
+ }
+
+ reader.set_position(FNDB_TABLE_POINTER_OFFSET as u64);
+ let table_address = reader.read_u32::<LittleEndian>()?;
+
+ reader.set_position(FNDB_TABLE_SIZE_OFFSET as u64);
+ let table_size = reader.read_u32::<LittleEndian>()?;
+
+ let mut files = Vec::new();
+ for i in 0..table_size {
+ let offset = table_address + i * FNDB_ENTRY_SIZE as u32;
+ reader.set_position(offset as u64);
+ let file_name_offset = reader.read_u32::<LittleEndian>()? as usize;
+ let directory_offset = reader.read_u32::<LittleEndian>()? as usize;
+ let file_name = read_string(bytes, file_name_offset)?;
+ let directory = read_string(bytes, directory_offset)?;
+
+ let file = PathBuf::from(directory).join(file_name);
+ files.push(file);
+ }
+
+ Ok(files)
+}
+
+fn read_string(bytes: &[u8], offset: usize) -> io::Result<&str> {
+ let mut byte = bytes[offset];
+ let mut length = 0;
+ while byte != 0x00 {
+ length += 1;
+ byte = bytes[offset + length];
+ }
+
+ std::str::from_utf8(&bytes[offset..offset + length])
+ .map_err(|_| io::ErrorKind::InvalidData.into())
+}
diff --git a/support/texlab/src/tex/mod.rs b/support/texlab/src/tex/mod.rs
new file mode 100644
index 0000000000..6d60380e52
--- /dev/null
+++ b/support/texlab/src/tex/mod.rs
@@ -0,0 +1,154 @@
+mod compile;
+mod kpsewhich;
+mod miktex;
+mod tectonic;
+mod texlive;
+
+pub use self::{
+ compile::{Artifacts, CompileError, CompileParams, Format},
+ kpsewhich::{KpsewhichError, Resolver},
+};
+
+use self::{compile::Compiler, miktex::Miktex, tectonic::Tectonic, texlive::Texlive};
+use async_trait::async_trait;
+use std::{fmt, process::Stdio, sync::Arc};
+use tokio::process::Command;
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub enum DistributionKind {
+ Texlive,
+ Miktex,
+ Tectonic,
+ Unknown,
+}
+
+impl fmt::Display for DistributionKind {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ let name = match self {
+ Self::Texlive => "TeXLive",
+ Self::Miktex => "MikTeX",
+ Self::Tectonic => "Tectonic",
+ Self::Unknown => "Unknown",
+ };
+ write!(f, "{}", name)
+ }
+}
+
+impl DistributionKind {
+ pub async fn detect() -> Self {
+ if Command::new("tectonic")
+ .arg("--version")
+ .stdout(Stdio::null())
+ .stderr(Stdio::null())
+ .status()
+ .await
+ .is_ok()
+ {
+ return Self::Tectonic;
+ }
+
+ match Command::new("latex").arg("--version").output().await {
+ Ok(output) => {
+ let stdout = String::from_utf8_lossy(&output.stdout);
+ if stdout.contains("TeX Live") {
+ Self::Texlive
+ } else if stdout.contains("MiKTeX") {
+ Self::Miktex
+ } else {
+ Self::Unknown
+ }
+ }
+ Err(_) => Self::Unknown,
+ }
+ }
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub enum Language {
+ Latex,
+ Bibtex,
+}
+
+impl Language {
+ pub fn by_extension(extension: &str) -> Option<Self> {
+ match extension.to_lowercase().as_str() {
+ "tex" | "sty" | "cls" | "def" | "lco" | "aux" => Some(Language::Latex),
+ "bib" | "bibtex" => Some(Language::Bibtex),
+ _ => None,
+ }
+ }
+
+ pub fn by_language_id(language_id: &str) -> Option<Self> {
+ match language_id {
+ "latex" | "tex" => Some(Language::Latex),
+ "bibtex" | "bib" => Some(Language::Bibtex),
+ _ => None,
+ }
+ }
+}
+
+#[async_trait]
+pub trait Distribution: Send + Sync {
+ fn kind(&self) -> DistributionKind;
+
+ async fn compile<'a>(&'a self, params: CompileParams<'a>) -> Result<Artifacts, CompileError>;
+
+ async fn load(&self) -> Result<(), KpsewhichError>;
+
+ async fn resolver(&self) -> Arc<Resolver>;
+}
+
+impl dyn Distribution {
+ pub async fn detect() -> Arc<dyn Distribution> {
+ let kind = DistributionKind::detect().await;
+ let distro: Arc<dyn Distribution + Send + Sync> = match kind {
+ DistributionKind::Texlive => Arc::new(Texlive::default()),
+ DistributionKind::Miktex => Arc::new(Miktex::default()),
+ DistributionKind::Tectonic => Arc::new(Tectonic::default()),
+ DistributionKind::Unknown => Arc::new(UnknownDistribution::default()),
+ };
+ distro
+ }
+}
+
+impl fmt::Debug for dyn Distribution {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ write!(f, "{}", self.kind())
+ }
+}
+
+async fn compile(params: CompileParams<'_>) -> Result<Artifacts, CompileError> {
+ let executable = params.format.executable();
+ let args = &["--interaction=batchmode", "-shell-escape", params.file_name];
+ let compiler = Compiler {
+ executable,
+ args,
+ file_name: params.file_name,
+ timeout: params.timeout,
+ };
+ compiler.compile(params.code).await
+}
+
+#[derive(Debug, Default)]
+pub struct UnknownDistribution {
+ resolver: Arc<Resolver>,
+}
+
+#[async_trait]
+impl Distribution for UnknownDistribution {
+ fn kind(&self) -> DistributionKind {
+ DistributionKind::Unknown
+ }
+
+ async fn compile<'a>(&'a self, _params: CompileParams<'a>) -> Result<Artifacts, CompileError> {
+ Err(CompileError::NotInstalled)
+ }
+
+ async fn load(&self) -> Result<(), KpsewhichError> {
+ Ok(())
+ }
+
+ async fn resolver(&self) -> Arc<Resolver> {
+ Arc::clone(&self.resolver)
+ }
+}
diff --git a/support/texlab/src/tex/tectonic.rs b/support/texlab/src/tex/tectonic.rs
new file mode 100644
index 0000000000..1c19466830
--- /dev/null
+++ b/support/texlab/src/tex/tectonic.rs
@@ -0,0 +1,36 @@
+use super::{
+ compile::{Artifacts, CompileError, CompileParams, Compiler},
+ kpsewhich::{KpsewhichError, Resolver},
+ Distribution, DistributionKind,
+};
+use async_trait::async_trait;
+use std::sync::Arc;
+
+#[derive(Debug, Default)]
+pub struct Tectonic;
+
+#[async_trait]
+impl Distribution for Tectonic {
+ fn kind(&self) -> DistributionKind {
+ DistributionKind::Tectonic
+ }
+
+ async fn compile<'a>(&'a self, params: CompileParams<'a>) -> Result<Artifacts, CompileError> {
+ let args = [params.file_name];
+ let compiler = Compiler {
+ executable: "tectonic",
+ args: &args,
+ file_name: params.file_name,
+ timeout: params.timeout,
+ };
+ compiler.compile(params.code).await
+ }
+
+ async fn load(&self) -> Result<(), KpsewhichError> {
+ Ok(())
+ }
+
+ async fn resolver(&self) -> Arc<Resolver> {
+ Arc::new(Resolver::default())
+ }
+}
diff --git a/support/texlab/src/tex/texlive.rs b/support/texlab/src/tex/texlive.rs
new file mode 100644
index 0000000000..64bcfebdb7
--- /dev/null
+++ b/support/texlab/src/tex/texlive.rs
@@ -0,0 +1,71 @@
+use super::{
+ compile,
+ kpsewhich::{self, KpsewhichError, Resolver},
+ Artifacts, CompileError, CompileParams, Distribution, DistributionKind,
+};
+use async_trait::async_trait;
+use futures::lock::Mutex;
+use std::{
+ io, mem,
+ path::{Path, PathBuf},
+ str::Lines,
+ sync::Arc,
+};
+use tokio::fs;
+
+#[derive(Debug, Default)]
+pub struct Texlive {
+ resolver: Mutex<Arc<Resolver>>,
+}
+
+#[async_trait]
+impl Distribution for Texlive {
+ fn kind(&self) -> DistributionKind {
+ DistributionKind::Texlive
+ }
+
+ async fn compile<'a>(&'a self, params: CompileParams<'a>) -> Result<Artifacts, CompileError> {
+ compile(params).await
+ }
+
+ async fn load(&self) -> Result<(), KpsewhichError> {
+ let root_directories = kpsewhich::root_directories().await?;
+ let resolver = kpsewhich::parse_database(&root_directories, read_database).await?;
+ mem::replace(&mut *self.resolver.lock().await, Arc::new(resolver));
+ Ok(())
+ }
+
+ async fn resolver(&self) -> Arc<Resolver> {
+ let resolver = self.resolver.lock().await;
+ Arc::clone(&resolver)
+ }
+}
+
+const DATABASE_PATH: &str = "ls-R";
+
+async fn read_database(directory: &Path) -> Result<Vec<PathBuf>, KpsewhichError> {
+ let file = directory.join(DATABASE_PATH);
+ if !file.is_file() {
+ return Ok(Vec::new());
+ }
+
+ let text = fs::read_to_string(file)
+ .await
+ .map_err(|_| KpsewhichError::NoDatabase)?;
+ parse_database(text.lines()).map_err(|_| KpsewhichError::CorruptDatabase)
+}
+
+fn parse_database(lines: Lines) -> io::Result<Vec<PathBuf>> {
+ let mut paths = Vec::new();
+ let mut directory = "";
+
+ for line in lines.filter(|x| !x.trim().is_empty() && !x.starts_with('%')) {
+ if line.ends_with(':') {
+ directory = &line[..line.len() - 1];
+ } else {
+ let path = PathBuf::from(directory).join(line);
+ paths.push(path);
+ }
+ }
+ Ok(paths)
+}
diff --git a/support/texlab/src/workspace.rs b/support/texlab/src/workspace.rs
new file mode 100644
index 0000000000..914510dddc
--- /dev/null
+++ b/support/texlab/src/workspace.rs
@@ -0,0 +1,987 @@
+use crate::{
+ components::COMPONENT_DATABASE,
+ protocol::{Options, TextDocumentItem, Uri},
+ syntax::{bibtex, latex, LatexIncludeKind},
+ tex::{Distribution, Language, Resolver},
+};
+use futures::lock::Mutex;
+use log::{debug, error, warn};
+use petgraph::{graph::Graph, visit::Dfs};
+use std::{
+ collections::HashMap,
+ error,
+ ffi::OsStr,
+ fmt,
+ hash::{Hash, Hasher},
+ io,
+ path::{Path, PathBuf},
+ sync::Arc,
+ time::SystemTime,
+};
+use tokio::fs;
+
+#[derive(Debug, PartialEq, Eq, Clone)]
+pub struct DocumentParams<'a> {
+ pub uri: Uri,
+ pub text: String,
+ pub language: Language,
+ pub resolver: &'a Resolver,
+ pub options: &'a Options,
+ pub current_dir: &'a Path,
+}
+
+#[derive(Debug, Clone)]
+pub enum DocumentContent {
+ Latex(Box<latex::SymbolTable>),
+ Bibtex(Box<bibtex::Tree>),
+}
+
+impl DocumentContent {
+ pub fn as_latex(&self) -> Option<&latex::SymbolTable> {
+ if let Self::Latex(table) = self {
+ Some(&table)
+ } else {
+ None
+ }
+ }
+
+ pub fn as_bibtex(&self) -> Option<&bibtex::Tree> {
+ if let Self::Bibtex(tree) = self {
+ Some(&tree)
+ } else {
+ None
+ }
+ }
+}
+
+#[derive(Debug, Clone)]
+pub struct Document {
+ pub uri: Uri,
+ pub text: String,
+ pub content: DocumentContent,
+ pub modified: SystemTime,
+}
+
+impl Document {
+ pub fn is_file(&self) -> bool {
+ self.uri.scheme() == "file"
+ }
+
+ pub fn open(params: DocumentParams) -> Self {
+ let DocumentParams {
+ uri,
+ text,
+ language,
+ resolver,
+ options,
+ current_dir,
+ } = params;
+
+ let content = match language {
+ Language::Latex => {
+ let table = latex::open(latex::OpenParams {
+ uri: &uri,
+ text: &text,
+ resolver,
+ options,
+ current_dir,
+ });
+ DocumentContent::Latex(Box::new(table))
+ }
+ Language::Bibtex => {
+ let tree = bibtex::open(&text);
+ DocumentContent::Bibtex(Box::new(tree))
+ }
+ };
+
+ Self {
+ uri,
+ text,
+ content,
+ modified: SystemTime::now(),
+ }
+ }
+}
+
+impl PartialEq for Document {
+ fn eq(&self, other: &Self) -> bool {
+ self.uri == other.uri
+ }
+}
+
+impl Eq for Document {}
+
+impl Hash for Document {
+ fn hash<H: Hasher>(&self, state: &mut H) {
+ self.uri.hash(state);
+ }
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Default)]
+pub struct Snapshot(pub Vec<Arc<Document>>);
+
+impl Snapshot {
+ pub fn new() -> Self {
+ Self(Vec::new())
+ }
+
+ pub fn push(&mut self, doc: Document) {
+ self.0.push(Arc::new(doc));
+ }
+
+ pub fn find(&self, uri: &Uri) -> Option<Arc<Document>> {
+ self.0.iter().find(|doc| doc.uri == *uri).map(Arc::clone)
+ }
+
+ pub fn relations(
+ &self,
+ uri: &Uri,
+ options: &Options,
+ current_dir: &Path,
+ ) -> Vec<Arc<Document>> {
+ let mut graph = Graph::new_undirected();
+ let mut indices_by_uri = HashMap::new();
+ for document in &self.0 {
+ indices_by_uri.insert(&document.uri, graph.add_node(document));
+ }
+
+ for parent in &self.0 {
+ if let DocumentContent::Latex(table) = &parent.content {
+ table
+ .includes
+ .iter()
+ .flat_map(|include| include.all_targets.iter())
+ .filter_map(|targets| targets.iter().find_map(|target| self.find(target)))
+ .for_each(|child| {
+ graph.add_edge(indices_by_uri[&parent.uri], indices_by_uri[&child.uri], ());
+ });
+
+ table
+ .imports
+ .iter()
+ .flat_map(|import| import.targets.iter())
+ .find_map(|target| self.find(target))
+ .into_iter()
+ .for_each(|child| {
+ graph.add_edge(indices_by_uri[&parent.uri], indices_by_uri[&child.uri], ());
+ });
+
+ self.resolve_aux_targets(&parent.uri, options, current_dir, "aux")
+ .into_iter()
+ .flatten()
+ .find_map(|target| self.find(&target))
+ .into_iter()
+ .for_each(|child| {
+ graph.add_edge(indices_by_uri[&parent.uri], indices_by_uri[&child.uri], ());
+ });
+ }
+ }
+
+ let mut documents = Vec::new();
+ if self.find(uri).is_some() {
+ let mut dfs = Dfs::new(&graph, indices_by_uri[uri]);
+ while let Some(index) = dfs.next(&graph) {
+ documents.push(Arc::clone(&graph[index]));
+ }
+ }
+ documents
+ }
+
+ pub fn parent(
+ &self,
+ uri: &Uri,
+ options: &Options,
+ current_dir: &Path,
+ ) -> Option<Arc<Document>> {
+ for doc in self.relations(uri, options, current_dir) {
+ if let DocumentContent::Latex(table) = &doc.content {
+ if table.is_standalone {
+ return Some(doc);
+ }
+ }
+ }
+ None
+ }
+
+ pub fn parent_subfile(
+ &self,
+ uri: &Uri,
+ options: &Options,
+ current_dir: &Path,
+ ) -> Option<Arc<Document>> {
+ for doc in self.relations(uri, options, current_dir) {
+ if let DocumentContent::Latex(table) = &doc.content {
+ if table.is_standalone
+ && !table.components.iter().any(|comp| comp == "subfiles.cls")
+ {
+ return Some(doc);
+ }
+ }
+ }
+ None
+ }
+
+ pub fn expand(&self, options: &Options, current_dir: &Path) -> Vec<Uri> {
+ let mut unknown_targets = Vec::new();
+ for parent in &self.0 {
+ if let DocumentContent::Latex(table) = &parent.content {
+ table
+ .includes
+ .iter()
+ .filter(|include| Self::should_expand_include(&table, include))
+ .flat_map(|include| include.all_targets.iter())
+ .filter(|targets| targets.iter().all(|target| self.find(target).is_none()))
+ .flatten()
+ .for_each(|target| unknown_targets.push(target.clone()));
+
+ table
+ .imports
+ .iter()
+ .filter(|import| {
+ import
+ .targets
+ .iter()
+ .all(|target| self.find(target).is_none())
+ })
+ .flat_map(|import| import.targets.iter())
+ .for_each(|target| unknown_targets.push(target.clone()));
+
+ self.resolve_aux_targets(&parent.uri, options, current_dir, "aux")
+ .into_iter()
+ .filter(|targets| targets.iter().all(|target| self.find(target).is_none()))
+ .flatten()
+ .for_each(|target| unknown_targets.push(target));
+ }
+ }
+ unknown_targets
+ }
+
+ fn should_expand_include(tree: &latex::Tree, include: &latex::Include) -> bool {
+ match include.kind {
+ LatexIncludeKind::Bibliography | LatexIncludeKind::Latex => true,
+ LatexIncludeKind::Everything
+ | LatexIncludeKind::Image
+ | LatexIncludeKind::Pdf
+ | LatexIncludeKind::Svg => false,
+ LatexIncludeKind::Package | LatexIncludeKind::Class => !include
+ .paths(tree)
+ .into_iter()
+ .all(|name| COMPONENT_DATABASE.contains(name.text())),
+ }
+ }
+
+ pub fn resolve_aux_targets(
+ &self,
+ tex_uri: &Uri,
+ options: &Options,
+ current_dir: &Path,
+ extension: &str,
+ ) -> Option<Vec<Uri>> {
+ let mut targets = Vec::new();
+ targets.push(tex_uri.with_extension(extension)?);
+ if tex_uri.scheme() == "file" {
+ let tex_path = tex_uri.to_file_path().ok()?;
+ let file_stem = tex_path.file_stem()?;
+ let aux_name = format!("{}.{}", file_stem.to_str()?, extension);
+
+ if let Some(root_dir) = options
+ .latex
+ .as_ref()
+ .and_then(|opts| opts.root_directory.as_ref())
+ {
+ let path = current_dir.join(root_dir).join(&aux_name);
+ targets.push(Uri::from_file_path(path).ok()?);
+ }
+
+ if let Some(build_dir) = options
+ .latex
+ .as_ref()
+ .and_then(|opts| opts.build.as_ref())
+ .and_then(|opts| opts.output_directory.as_ref())
+ {
+ let path = current_dir.join(build_dir).join(&aux_name);
+ targets.push(Uri::from_file_path(path).ok()?);
+ }
+ }
+ Some(targets)
+ }
+}
+
+#[derive(Debug)]
+pub enum WorkspaceLoadError {
+ UnknownLanguage,
+ InvalidPath,
+ IO(io::Error),
+}
+
+impl From<io::Error> for WorkspaceLoadError {
+ fn from(why: io::Error) -> Self {
+ Self::IO(why)
+ }
+}
+
+impl fmt::Display for WorkspaceLoadError {
+ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+ match self {
+ Self::UnknownLanguage => write!(f, "Invalid language ID"),
+ Self::InvalidPath => write!(f, "Invalid file path"),
+ Self::IO(why) => write!(f, "{}", why),
+ }
+ }
+}
+
+impl error::Error for WorkspaceLoadError {
+ fn source(&self) -> Option<&(dyn error::Error + 'static)> {
+ match self {
+ Self::UnknownLanguage | Self::InvalidPath => None,
+ Self::IO(why) => why.source(),
+ }
+ }
+}
+
+pub struct Workspace {
+ distro: Arc<dyn Distribution>,
+ current_dir: Arc<PathBuf>,
+ snapshot: Mutex<Arc<Snapshot>>,
+}
+
+impl Workspace {
+ pub fn new(distro: Arc<dyn Distribution>, current_dir: Arc<PathBuf>) -> Self {
+ Self {
+ distro,
+ current_dir,
+ snapshot: Mutex::default(),
+ }
+ }
+
+ pub async fn get(&self) -> Arc<Snapshot> {
+ let snapshot = self.snapshot.lock().await;
+ Arc::clone(&snapshot)
+ }
+
+ pub async fn add(&self, document: TextDocumentItem, options: &Options) {
+ let language = match Language::by_language_id(&document.language_id) {
+ Some(language) => language,
+ None => {
+ error!(
+ "Invalid language id: {} ({})",
+ &document.language_id, &document.uri,
+ );
+ return;
+ }
+ };
+
+ debug!("Adding document: {}", document.uri);
+ let mut snapshot = self.snapshot.lock().await;
+ *snapshot = self
+ .add_or_update(
+ &snapshot,
+ document.uri.into(),
+ document.text,
+ language,
+ options,
+ )
+ .await;
+ }
+
+ pub async fn load(&self, path: &Path, options: &Options) -> Result<(), WorkspaceLoadError> {
+ let language = match path
+ .extension()
+ .and_then(OsStr::to_str)
+ .and_then(Language::by_extension)
+ {
+ Some(language) => language,
+ None => {
+ warn!("Could not determine language: {}", path.to_string_lossy());
+ return Err(WorkspaceLoadError::UnknownLanguage);
+ }
+ };
+
+ let uri = match Uri::from_file_path(path) {
+ Ok(uri) => uri,
+ Err(_) => {
+ error!("Invalid path: {}", path.to_string_lossy());
+ return Err(WorkspaceLoadError::InvalidPath);
+ }
+ };
+
+ let text = match fs::read_to_string(path).await {
+ Ok(text) => text,
+ Err(why) => {
+ warn!("Could not open file: {}", uri);
+ return Err(WorkspaceLoadError::IO(why));
+ }
+ };
+
+ debug!("Loading document: {}", uri);
+ let mut snapshot = self.snapshot.lock().await;
+ *snapshot = self
+ .add_or_update(&snapshot, uri, text, language, options)
+ .await;
+ Ok(())
+ }
+
+ pub async fn update(&self, uri: Uri, text: String, options: &Options) {
+ let mut snapshot = self.snapshot.lock().await;
+
+ let old_document = match snapshot.0.iter().find(|x| x.uri == uri) {
+ Some(document) => document,
+ None => {
+ warn!("Document not found: {}", uri);
+ return;
+ }
+ };
+
+ let language = match old_document.content {
+ DocumentContent::Latex(_) => Language::Latex,
+ DocumentContent::Bibtex(_) => Language::Bibtex,
+ };
+
+ *snapshot = self
+ .add_or_update(&snapshot, uri, text, language, options)
+ .await;
+ }
+
+ pub async fn reparse(&self, options: &Options) {
+ let snapshot = self.get().await;
+ for doc in &snapshot.0 {
+ let language = match doc.content {
+ DocumentContent::Latex(_) => Language::Latex,
+ DocumentContent::Bibtex(_) => Language::Bibtex,
+ };
+
+ let mut snapshot = self.snapshot.lock().await;
+ debug!("Reparsing document: {}", doc.uri);
+ *snapshot = self
+ .add_or_update(
+ &snapshot,
+ doc.uri.clone(),
+ doc.text.clone(),
+ language,
+ options,
+ )
+ .await;
+ }
+ }
+
+ pub async fn detect_root(&self, uri: &Uri, options: &Options) -> io::Result<()> {
+ if uri.scheme() != "file" {
+ return Ok(());
+ }
+
+ if let Ok(mut path) = uri.to_file_path() {
+ while path.pop() {
+ let snapshot = self.get().await;
+ if snapshot
+ .parent_subfile(&uri, &options, &self.current_dir)
+ .is_some()
+ {
+ break;
+ }
+
+ let mut entries = fs::read_dir(&path).await?;
+ while let Some(entry) = entries.next_entry().await? {
+ if entry.file_type().await?.is_file() {
+ let path = entry.path();
+ if path
+ .extension()
+ .and_then(OsStr::to_str)
+ .and_then(Language::by_extension)
+ .is_some()
+ {
+ if let Ok(parent_uri) = Uri::from_file_path(&path) {
+ if snapshot.find(&parent_uri).is_none() {
+ let _ = self.load(&path, options).await;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ Ok(())
+ }
+
+ pub async fn detect_children(&self, options: &Options) {
+ loop {
+ let mut changed = false;
+
+ let snapshot = self.get().await;
+ for path in snapshot
+ .expand(&options, &self.current_dir)
+ .into_iter()
+ .filter(|uri| uri.scheme() == "file" && uri.fragment().is_none())
+ .filter_map(|uri| uri.to_file_path().ok())
+ {
+ if path.exists() {
+ changed |= self.load(&path, &options).await.is_ok();
+ }
+ }
+
+ if !changed {
+ break;
+ }
+ }
+ }
+
+ pub async fn reparse_all_if_newer(&self, options: &Options) {
+ let snapshot = self.get().await;
+ for doc in &snapshot.0 {
+ if let Err(WorkspaceLoadError::IO(why)) = self.reparse_if_newer(doc, options).await {
+ warn!("Reparsing document {} failed: {}", doc.uri, why);
+ }
+ }
+ }
+
+ async fn reparse_if_newer(
+ &self,
+ doc: &Document,
+ options: &Options,
+ ) -> Result<(), WorkspaceLoadError> {
+ if !doc.is_file() {
+ return Ok(());
+ }
+
+ if let Ok(path) = doc.uri.to_file_path() {
+ let data = fs::metadata(&path).await?;
+ if data.modified()? > doc.modified {
+ self.load(&path, options).await?;
+ }
+ }
+ Ok(())
+ }
+
+ async fn add_or_update(
+ &self,
+ snapshot: &Snapshot,
+ uri: Uri,
+ text: String,
+ language: Language,
+ options: &Options,
+ ) -> Arc<Snapshot> {
+ let resolver = self.distro.resolver().await;
+ let document = Document::open(DocumentParams {
+ uri,
+ text,
+ language,
+ resolver: &resolver,
+ options,
+ current_dir: &self.current_dir,
+ });
+
+ let mut documents: Vec<Arc<Document>> = snapshot
+ .0
+ .iter()
+ .filter(|x| x.uri != document.uri)
+ .cloned()
+ .collect();
+
+ documents.push(Arc::new(document));
+ Arc::new(Snapshot(documents))
+ }
+}
+
+#[cfg(test)]
+mod tests {
+ use super::*;
+ use crate::protocol::{LatexBuildOptions, LatexOptions};
+ use itertools::Itertools;
+ use std::env;
+
+ fn create_simple_document(uri: &Uri, language: Language, text: &str) -> Arc<Document> {
+ Arc::new(Document::open(DocumentParams {
+ uri: uri.clone(),
+ text: text.into(),
+ language,
+ resolver: &Resolver::default(),
+ options: &Options::default(),
+ current_dir: &env::current_dir().unwrap(),
+ }))
+ }
+
+ #[test]
+ fn relations_append_missing_extension() {
+ let uri1 = Uri::parse("http://www.example.com/foo.tex").unwrap();
+ let uri2 = Uri::parse("http://www.example.com/bar/baz.tex").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![
+ create_simple_document(&uri1, Language::Latex, r#"\include{bar/baz}"#),
+ create_simple_document(&uri2, Language::Latex, r#""#),
+ ];
+ let actual_uris: Vec<_> = snapshot
+ .relations(&uri1, &Options::default(), &env::current_dir().unwrap())
+ .into_iter()
+ .map(|doc| doc.uri.clone())
+ .collect();
+
+ assert_eq!(actual_uris, vec![uri1, uri2]);
+ }
+
+ #[test]
+ fn relations_parent_directory() {
+ let uri1 = Uri::parse("http://www.example.com/foo.tex").unwrap();
+ let uri2 = Uri::parse("http://www.example.com/bar/baz.tex").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![
+ create_simple_document(&uri1, Language::Latex, r#""#),
+ create_simple_document(&uri2, Language::Latex, r#"\input{../foo.tex}"#),
+ ];
+ let actual_uris: Vec<_> = snapshot
+ .relations(&uri1, &Options::default(), &env::current_dir().unwrap())
+ .into_iter()
+ .map(|doc| doc.uri.clone())
+ .collect();
+
+ assert_eq!(actual_uris, vec![uri1, uri2]);
+ }
+
+ #[test]
+ fn relations_invalid_include() {
+ let uri = Uri::parse("http://www.example.com/foo.tex").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![create_simple_document(
+ &uri,
+ Language::Latex,
+ r#"\include{<foo>?|bar|:}"#,
+ )];
+ let actual_uris: Vec<_> = snapshot
+ .relations(&uri, &Options::default(), &env::current_dir().unwrap())
+ .into_iter()
+ .map(|doc| doc.uri.clone())
+ .collect();
+
+ assert_eq!(actual_uris, vec![uri]);
+ }
+
+ #[test]
+ fn relations_bibliography() {
+ let uri1 = Uri::parse("http://www.example.com/foo.tex").unwrap();
+ let uri2 = Uri::parse("http://www.example.com/bar.bib").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![
+ create_simple_document(&uri1, Language::Latex, r#"\addbibresource{bar.bib}"#),
+ create_simple_document(&uri2, Language::Bibtex, r#""#),
+ ];
+ let actual_uris: Vec<_> = snapshot
+ .relations(&uri2, &Options::default(), &env::current_dir().unwrap())
+ .into_iter()
+ .map(|doc| doc.uri.clone())
+ .collect();
+
+ assert_eq!(actual_uris, vec![uri2, uri1]);
+ }
+
+ #[test]
+ fn relations_unknown_include() {
+ let uri = Uri::parse("http://www.example.com/foo.tex").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![create_simple_document(
+ &uri,
+ Language::Latex,
+ r#"\input{bar.tex}"#,
+ )];
+ let actual_uris: Vec<_> = snapshot
+ .relations(&uri, &Options::default(), &env::current_dir().unwrap())
+ .into_iter()
+ .map(|doc| doc.uri.clone())
+ .collect();
+
+ assert_eq!(actual_uris, vec![uri]);
+ }
+
+ #[test]
+ fn relations_include_cycle() {
+ let uri1 = Uri::parse("http://www.example.com/foo.tex").unwrap();
+ let uri2 = Uri::parse("http://www.example.com/bar.tex").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![
+ create_simple_document(&uri1, Language::Latex, r#"\include{bar}"#),
+ create_simple_document(&uri2, Language::Latex, r#"\input{foo.tex}"#),
+ ];
+ let actual_uris: Vec<_> = snapshot
+ .relations(&uri1, &Options::default(), &env::current_dir().unwrap())
+ .into_iter()
+ .map(|doc| doc.uri.clone())
+ .collect();
+
+ assert_eq!(actual_uris, vec![uri1, uri2]);
+ }
+
+ #[test]
+ fn relations_same_parent() {
+ let uri1 = Uri::parse("http://www.example.com/foo.tex").unwrap();
+ let uri2 = Uri::parse("http://www.example.com/bar.tex").unwrap();
+ let uri3 = Uri::parse("http://www.example.com/baz.tex").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![
+ create_simple_document(&uri1, Language::Latex, r#"\input{bar.tex}\input{baz.tex}"#),
+ create_simple_document(&uri2, Language::Latex, r#""#),
+ create_simple_document(&uri3, Language::Latex, r#""#),
+ ];
+ let actual_uris: Vec<_> = snapshot
+ .relations(&uri3, &Options::default(), &env::current_dir().unwrap())
+ .into_iter()
+ .map(|doc| doc.uri.clone())
+ .collect();
+
+ assert_eq!(actual_uris, vec![uri3, uri1, uri2]);
+ }
+
+ #[test]
+ fn relations_aux_default_options() {
+ let uri1 = Uri::parse("http://www.example.com/foo.tex").unwrap();
+ let uri2 = Uri::parse("http://www.example.com/foo.aux").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![
+ create_simple_document(&uri1, Language::Latex, r#""#),
+ create_simple_document(&uri2, Language::Latex, r#""#),
+ ];
+ let actual_uris: Vec<_> = snapshot
+ .relations(&uri1, &Options::default(), &env::current_dir().unwrap())
+ .into_iter()
+ .map(|doc| doc.uri.clone())
+ .collect();
+
+ assert_eq!(actual_uris, vec![uri1, uri2]);
+ }
+
+ #[test]
+ fn relations_aux_output_directory() {
+ let cwd = env::current_dir().unwrap();
+ let options = Options {
+ latex: Some(LatexOptions {
+ build: Some(LatexBuildOptions {
+ output_directory: Some(PathBuf::from("build")),
+ ..LatexBuildOptions::default()
+ }),
+ ..LatexOptions::default()
+ }),
+ ..Options::default()
+ };
+
+ let uri1 = Uri::from_file_path(cwd.join("foo.tex")).unwrap();
+ let uri2 = Uri::from_file_path(cwd.join("build/foo.aux")).unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![
+ Arc::new(Document::open(DocumentParams {
+ uri: uri1.clone(),
+ text: String::new(),
+ language: Language::Latex,
+ resolver: &Resolver::default(),
+ options: &options,
+ current_dir: &cwd,
+ })),
+ Arc::new(Document::open(DocumentParams {
+ uri: uri2.clone(),
+ text: String::new(),
+ language: Language::Latex,
+ resolver: &Resolver::default(),
+ options: &options,
+ current_dir: &cwd,
+ })),
+ ];
+ let actual_uris: Vec<_> = snapshot
+ .relations(&uri1, &options, &cwd)
+ .into_iter()
+ .map(|doc| doc.uri.clone())
+ .collect();
+
+ assert_eq!(actual_uris, vec![uri1, uri2]);
+ }
+
+ #[test]
+ fn relations_aux_root_directory() {
+ let cwd = env::current_dir().unwrap();
+ let options = Options {
+ latex: Some(LatexOptions {
+ root_directory: Some(PathBuf::from(".")),
+ ..LatexOptions::default()
+ }),
+ ..Options::default()
+ };
+
+ let uri1 = Uri::from_file_path(cwd.join("src/foo.tex")).unwrap();
+ let uri2 = Uri::from_file_path(cwd.join("foo.aux")).unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![
+ Arc::new(Document::open(DocumentParams {
+ uri: uri1.clone(),
+ text: String::new(),
+ language: Language::Latex,
+ resolver: &Resolver::default(),
+ options: &options,
+ current_dir: &cwd,
+ })),
+ Arc::new(Document::open(DocumentParams {
+ uri: uri2.clone(),
+ text: String::new(),
+ language: Language::Latex,
+ resolver: &Resolver::default(),
+ options: &options,
+ current_dir: &cwd,
+ })),
+ ];
+ let actual_uris: Vec<_> = snapshot
+ .relations(&uri1, &options, &cwd)
+ .into_iter()
+ .map(|doc| doc.uri.clone())
+ .collect();
+
+ assert_eq!(actual_uris, vec![uri1, uri2]);
+ }
+
+ #[test]
+ fn relations_import() {
+ let uri1 = Uri::parse("http://www.example.com/foo.tex").unwrap();
+ let uri2 = Uri::parse("http://www.example.com/bar/baz.tex").unwrap();
+ let uri3 = Uri::parse("http://www.example.com/bar/qux/foo-bar.tex").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![
+ create_simple_document(&uri1, Language::Latex, r#"\import{bar/}{baz.tex}"#),
+ create_simple_document(&uri2, Language::Latex, r#"\subimport{qux/}{foo-bar}"#),
+ create_simple_document(&uri3, Language::Latex, r#""#),
+ ];
+
+ let actual_uris: Vec<_> = snapshot
+ .relations(&uri1, &Options::default(), &env::current_dir().unwrap())
+ .into_iter()
+ .map(|doc| doc.uri.clone())
+ .collect();
+
+ assert_eq!(actual_uris, vec![uri1, uri2, uri3]);
+ }
+
+ #[test]
+ fn parent() {
+ let uri1 = Uri::parse("http://www.example.com/foo.tex").unwrap();
+ let uri2 = Uri::parse("http://www.example.com/bar.tex").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![
+ create_simple_document(&uri1, Language::Latex, r#""#),
+ create_simple_document(
+ &uri2,
+ Language::Latex,
+ r#"\begin{document}\include{foo}\end{document}"#,
+ ),
+ ];
+ let doc = snapshot
+ .parent(&uri1, &Options::default(), &env::current_dir().unwrap())
+ .unwrap();
+ assert_eq!(doc.uri, uri2);
+ }
+
+ #[test]
+ fn parent_nothing_found() {
+ let uri1 = Uri::parse("http://www.example.com/foo.tex").unwrap();
+ let uri2 = Uri::parse("http://www.example.com/bar.tex").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![
+ create_simple_document(&uri1, Language::Latex, r#""#),
+ create_simple_document(&uri2, Language::Latex, r#"\begin{document}\end{document}"#),
+ ];
+ let doc = snapshot.parent(&uri1, &Options::default(), &env::current_dir().unwrap());
+ assert_eq!(doc, None);
+ }
+
+ #[test]
+ fn expand_aux_file() {
+ let uri = Uri::parse("http://www.example.com/foo.tex").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![create_simple_document(&uri, Language::Latex, r#""#)];
+ let expansion = snapshot.expand(&Options::default(), &env::current_dir().unwrap());
+ assert_eq!(
+ expansion
+ .iter()
+ .map(|uri| uri.as_str())
+ .filter(|uri| uri.ends_with(".aux"))
+ .collect_vec(),
+ vec!["http://www.example.com/foo.aux"]
+ );
+ }
+
+ #[test]
+ fn expand_local_package() {
+ let uri = Uri::parse("http://www.example.com/foo.tex").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![create_simple_document(
+ &uri,
+ Language::Latex,
+ r#"\usepackage{foo-bar-baz}"#,
+ )];
+ let expansion = snapshot.expand(&Options::default(), &env::current_dir().unwrap());
+
+ assert_eq!(
+ expansion
+ .iter()
+ .map(|uri| uri.as_str())
+ .filter(|uri| uri.ends_with(".sty"))
+ .collect_vec(),
+ vec!["http://www.example.com/foo-bar-baz.sty"]
+ );
+ }
+
+ #[test]
+ fn expand_system_package() {
+ let uri = Uri::parse("http://www.example.com/foo.tex").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![create_simple_document(
+ &uri,
+ Language::Latex,
+ r#"\usepackage{amsmath}"#,
+ )];
+ let expansion = snapshot.expand(&Options::default(), &env::current_dir().unwrap());
+
+ assert_eq!(
+ expansion
+ .iter()
+ .map(|uri| uri.as_str())
+ .filter(|uri| uri.ends_with(".sty"))
+ .collect_vec(),
+ Vec::<&str>::new()
+ );
+ }
+
+ #[test]
+ fn expand_subdirectory() {
+ let uri = Uri::parse("http://www.example.com/foo.tex").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![create_simple_document(
+ &uri,
+ Language::Latex,
+ r#"\include{bar/baz}"#,
+ )];
+ let expansion = snapshot.expand(&Options::default(), &env::current_dir().unwrap());
+ assert_eq!(
+ expansion
+ .iter()
+ .map(|uri| uri.as_str())
+ .filter(|uri| uri.ends_with(".tex"))
+ .collect_vec(),
+ vec!["http://www.example.com/bar/baz.tex"]
+ );
+ }
+
+ #[test]
+ fn expand_import() {
+ let uri1 = Uri::parse("http://www.example.com/qux/foo.tex").unwrap();
+ let uri2 = Uri::parse("http://www.example.com/qux/baz/bar.tex").unwrap();
+ let mut snapshot = Snapshot::new();
+ snapshot.0 = vec![
+ create_simple_document(
+ &uri1,
+ Language::Latex,
+ r#"\import{.}{foo}\import{baz/}{bar}\import{baz/foo-bar/}{qux}"#,
+ ),
+ create_simple_document(&uri2, Language::Latex, r#""#),
+ ];
+ let expansion = snapshot.expand(&Options::default(), &env::current_dir().unwrap());
+ assert_eq!(
+ expansion
+ .iter()
+ .map(|uri| uri.as_str())
+ .filter(|uri| uri.ends_with(".tex"))
+ .collect_vec(),
+ vec!["http://www.example.com/qux/baz/foo-bar/qux.tex"]
+ )
+ }
+}
diff --git a/support/texlab/src/workspace/feature.rs b/support/texlab/src/workspace/feature.rs
deleted file mode 100644
index 815f5e1724..0000000000
--- a/support/texlab/src/workspace/feature.rs
+++ /dev/null
@@ -1,246 +0,0 @@
-use super::{Document, DocumentView, Workspace, WorkspaceBuilder};
-use futures_boxed::boxed;
-use lsp_types::*;
-use std::sync::Arc;
-
-pub struct FeatureRequest<P> {
- pub params: P,
- pub view: DocumentView,
- pub client_capabilities: Arc<ClientCapabilities>,
- pub distribution: Arc<Box<dyn tex::Distribution>>,
-}
-
-impl<P> FeatureRequest<P> {
- pub fn workspace(&self) -> &Workspace {
- &self.view.workspace
- }
-
- pub fn document(&self) -> &Document {
- &self.view.document
- }
-
- pub fn related_documents(&self) -> &[Arc<Document>] {
- &self.view.related_documents
- }
-}
-
-pub trait FeatureProvider {
- type Params;
- type Output;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<Self::Params>) -> Self::Output;
-}
-
-type ListProvider<P, O> = Box<dyn FeatureProvider<Params = P, Output = Vec<O>> + Send + Sync>;
-
-#[derive(Default)]
-pub struct ConcatProvider<P, O> {
- providers: Vec<ListProvider<P, O>>,
-}
-
-impl<P, O> ConcatProvider<P, O> {
- pub fn new(providers: Vec<ListProvider<P, O>>) -> Self {
- Self { providers }
- }
-}
-
-impl<P, O> FeatureProvider for ConcatProvider<P, O>
-where
- P: Send + Sync,
- O: Send + Sync,
-{
- type Params = P;
- type Output = Vec<O>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<P>) -> Vec<O> {
- let mut items = Vec::new();
- for provider in &self.providers {
- items.append(&mut provider.execute(request).await);
- }
- items
- }
-}
-
-type OptionProvider<P, O> = Box<dyn FeatureProvider<Params = P, Output = Option<O>> + Send + Sync>;
-
-#[derive(Default)]
-pub struct ChoiceProvider<P, O> {
- providers: Vec<OptionProvider<P, O>>,
-}
-
-impl<P, O> ChoiceProvider<P, O> {
- pub fn new(providers: Vec<OptionProvider<P, O>>) -> Self {
- Self { providers }
- }
-}
-
-impl<P, O> FeatureProvider for ChoiceProvider<P, O>
-where
- P: Send + Sync,
- O: Send + Sync,
-{
- type Params = P;
- type Output = Option<O>;
-
- #[boxed]
- async fn execute<'a>(&'a self, request: &'a FeatureRequest<P>) -> Option<O> {
- for provider in &self.providers {
- let item = provider.execute(request).await;
- if item.is_some() {
- return item;
- }
- }
- None
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct FeatureSpecFile {
- name: &'static str,
- text: &'static str,
-}
-
-pub struct FeatureSpec {
- pub files: Vec<FeatureSpecFile>,
- pub main_file: &'static str,
- pub position: Position,
- pub new_name: &'static str,
- pub include_declaration: bool,
- pub client_capabilities: ClientCapabilities,
- pub distribution: Box<dyn tex::Distribution>,
-}
-
-impl Default for FeatureSpec {
- fn default() -> Self {
- Self {
- files: Vec::new(),
- main_file: "",
- position: Position::new(0, 0),
- new_name: "",
- include_declaration: false,
- client_capabilities: ClientCapabilities::default(),
- distribution: Box::new(tex::Unknown::default()),
- }
- }
-}
-
-impl FeatureSpec {
- pub fn file(name: &'static str, text: &'static str) -> FeatureSpecFile {
- FeatureSpecFile { name, text }
- }
-
- pub fn uri(name: &str) -> Url {
- let path = std::env::temp_dir().join(name);
- Url::from_file_path(path).unwrap()
- }
-
- fn identifier(&self) -> TextDocumentIdentifier {
- let uri = Self::uri(self.main_file);
- TextDocumentIdentifier::new(uri)
- }
-
- fn view(&self) -> DocumentView {
- let mut builder = WorkspaceBuilder::new();
- for file in &self.files {
- builder.document(file.name, file.text);
- }
- let workspace = builder.workspace;
- let main_uri = Self::uri(self.main_file);
- let main_document = workspace.find(&main_uri.into()).unwrap();
- DocumentView::new(Arc::new(workspace), main_document)
- }
-
- fn request<T>(self, params: T) -> FeatureRequest<T> {
- FeatureRequest {
- params,
- view: self.view(),
- client_capabilities: Arc::new(self.client_capabilities),
- distribution: Arc::new(self.distribution),
- }
- }
-}
-
-impl Into<FeatureRequest<TextDocumentPositionParams>> for FeatureSpec {
- fn into(self) -> FeatureRequest<TextDocumentPositionParams> {
- let params = TextDocumentPositionParams::new(self.identifier(), self.position);
- self.request(params)
- }
-}
-
-impl Into<FeatureRequest<CompletionParams>> for FeatureSpec {
- fn into(self) -> FeatureRequest<CompletionParams> {
- let params = CompletionParams {
- text_document_position: TextDocumentPositionParams::new(
- self.identifier(),
- self.position,
- ),
- context: None,
- };
- self.request(params)
- }
-}
-
-impl Into<FeatureRequest<FoldingRangeParams>> for FeatureSpec {
- fn into(self) -> FeatureRequest<FoldingRangeParams> {
- let params = FoldingRangeParams {
- text_document: self.identifier(),
- };
- self.request(params)
- }
-}
-
-impl Into<FeatureRequest<DocumentLinkParams>> for FeatureSpec {
- fn into(self) -> FeatureRequest<DocumentLinkParams> {
- let params = DocumentLinkParams {
- text_document: self.identifier(),
- };
- self.request(params)
- }
-}
-
-impl Into<FeatureRequest<ReferenceParams>> for FeatureSpec {
- fn into(self) -> FeatureRequest<ReferenceParams> {
- let params = ReferenceParams {
- text_document_position: TextDocumentPositionParams::new(
- self.identifier(),
- self.position,
- ),
- context: ReferenceContext {
- include_declaration: self.include_declaration,
- },
- };
- self.request(params)
- }
-}
-
-impl Into<FeatureRequest<RenameParams>> for FeatureSpec {
- fn into(self) -> FeatureRequest<RenameParams> {
- let params = RenameParams {
- text_document_position: TextDocumentPositionParams::new(
- self.identifier(),
- self.position,
- ),
- new_name: self.new_name.to_owned(),
- };
- self.request(params)
- }
-}
-
-impl Into<FeatureRequest<DocumentSymbolParams>> for FeatureSpec {
- fn into(self) -> FeatureRequest<DocumentSymbolParams> {
- let params = DocumentSymbolParams {
- text_document: self.identifier(),
- };
- self.request(params)
- }
-}
-
-pub fn test_feature<F, P, O, S>(provider: F, spec: S) -> O
-where
- F: FeatureProvider<Params = P, Output = O>,
- S: Into<FeatureRequest<P>>,
-{
- futures::executor::block_on(provider.execute(&spec.into()))
-}
diff --git a/support/texlab/src/workspace/mod.rs b/support/texlab/src/workspace/mod.rs
deleted file mode 100644
index 5ad2c21bf2..0000000000
--- a/support/texlab/src/workspace/mod.rs
+++ /dev/null
@@ -1,417 +0,0 @@
-mod feature;
-mod outline;
-mod uri;
-
-pub use self::feature::*;
-pub use self::outline::*;
-pub use self::uri::*;
-use crate::completion::DATABASE;
-use crate::syntax::*;
-use log::*;
-use lsp_types::*;
-use std::ffi::OsStr;
-use std::fs;
-use std::path::{Path, PathBuf};
-use std::sync::{Arc, Mutex};
-use std::time::SystemTime;
-use tex::Language;
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct Document {
- pub uri: Uri,
- pub text: String,
- pub tree: SyntaxTree,
- pub modified: SystemTime,
-}
-
-impl Document {
- pub fn new(uri: Uri, text: String, tree: SyntaxTree) -> Self {
- Self {
- uri,
- text,
- tree,
- modified: SystemTime::now(),
- }
- }
-
- pub fn parse(uri: Uri, text: String, language: Language) -> Self {
- let tree = SyntaxTree::parse(&uri, &text, language);
- Self::new(uri, text, tree)
- }
-
- pub fn is_file(&self) -> bool {
- self.uri.scheme() == "file"
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Default)]
-pub struct Workspace {
- pub documents: Vec<Arc<Document>>,
-}
-
-impl Workspace {
- pub fn new() -> Self {
- Workspace {
- documents: Vec::new(),
- }
- }
-
- pub fn find(&self, uri: &Uri) -> Option<Arc<Document>> {
- self.documents
- .iter()
- .find(|document| &document.uri == uri)
- .map(|document| Arc::clone(&document))
- }
-
- pub fn related_documents(&self, uri: &Uri) -> Vec<Arc<Document>> {
- let edges = self.build_dependency_graph();
- let mut results = Vec::new();
- if let Some(start) = self.find(uri) {
- let mut visited: Vec<Arc<Document>> = Vec::new();
- let mut stack = vec![start];
- while let Some(current) = stack.pop() {
- if visited.contains(&current) {
- continue;
- }
- visited.push(Arc::clone(&current));
-
- results.push(Arc::clone(&current));
- for edge in &edges {
- if edge.0 == current {
- stack.push(Arc::clone(&edge.1));
- }
- }
- }
- }
- results
- }
-
- fn build_dependency_graph(&self) -> Vec<(Arc<Document>, Arc<Document>)> {
- let mut edges: Vec<(Arc<Document>, Arc<Document>)> = Vec::new();
- for parent in self.documents.iter().filter(|document| document.is_file()) {
- if let SyntaxTree::Latex(tree) = &parent.tree {
- for include in &tree.includes {
- for targets in &include.all_targets {
- for target in targets {
- if let Some(ref child) = self.find(target) {
- edges.push((Arc::clone(&parent), Arc::clone(&child)));
- edges.push((Arc::clone(&child), Arc::clone(&parent)));
- }
- }
- }
- }
-
- let tex_path = parent.uri.to_file_path().unwrap();
- let aux_path = tex_path.with_extension("aux");
- if let Some(child) = self.find(&Uri::from_file_path(aux_path).unwrap()) {
- edges.push((Arc::clone(&parent), Arc::clone(&child)));
- edges.push((Arc::clone(&child), Arc::clone(&parent)));
- }
- }
- }
- edges
- }
-
- pub fn find_parent(&self, uri: &Uri) -> Option<Arc<Document>> {
- for document in self.related_documents(uri) {
- if let SyntaxTree::Latex(tree) = &document.tree {
- if tree.env.is_standalone {
- return Some(document);
- }
- }
- }
- None
- }
-
- pub fn unresolved_includes(&self) -> Vec<PathBuf> {
- let mut includes = Vec::new();
- for document in &self.documents {
- if let SyntaxTree::Latex(tree) = &document.tree {
- for include in &tree.includes {
- match include.kind {
- LatexIncludeKind::Bibliography | LatexIncludeKind::Latex => (),
- LatexIncludeKind::Everything
- | LatexIncludeKind::Image
- | LatexIncludeKind::Pdf
- | LatexIncludeKind::Svg => continue,
- LatexIncludeKind::Package | LatexIncludeKind::Class => {
- if include
- .paths()
- .iter()
- .all(|name| DATABASE.contains(name.text()))
- {
- continue;
- }
- }
- }
-
- for targets in &include.all_targets {
- if targets.iter().any(|target| self.find(target).is_some()) {
- continue;
- }
-
- for target in targets {
- let path = target.to_file_path().unwrap();
- if path.exists() {
- includes.push(path);
- }
- }
- }
- }
-
- let aux_path = document.uri.to_file_path().unwrap().with_extension("aux");
- if self
- .find(&Uri::from_file_path(&aux_path).unwrap())
- .is_none()
- {
- includes.push(aux_path);
- }
- }
- }
- includes
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct DocumentView {
- pub workspace: Arc<Workspace>,
- pub document: Arc<Document>,
- pub related_documents: Vec<Arc<Document>>,
-}
-
-impl DocumentView {
- pub fn new(workspace: Arc<Workspace>, document: Arc<Document>) -> Self {
- let related_documents = workspace.related_documents(&document.uri);
- Self {
- workspace,
- document,
- related_documents,
- }
- }
-}
-
-#[derive(Debug)]
-pub enum LoadError {
- UnknownLanguage,
- InvalidPath,
- IO(std::io::Error),
-}
-
-#[derive(Debug, Default)]
-pub struct WorkspaceManager {
- workspace: Mutex<Arc<Workspace>>,
-}
-
-impl WorkspaceManager {
- pub fn get(&self) -> Arc<Workspace> {
- let workspace = self.workspace.lock().unwrap();
- Arc::clone(&workspace)
- }
-
- pub fn add(&self, document: TextDocumentItem) {
- let language = match Language::by_language_id(&document.language_id) {
- Some(language) => language,
- None => {
- error!("Invalid language id: {}", &document.language_id);
- return;
- }
- };
-
- let mut workspace = self.workspace.lock().unwrap();
- *workspace = Self::add_or_update(&workspace, document.uri.into(), document.text, language);
- }
-
- pub fn load(&self, path: &Path) -> Result<(), LoadError> {
- let language = match path
- .extension()
- .and_then(OsStr::to_str)
- .and_then(Language::by_extension)
- {
- Some(language) => language,
- None => {
- warn!("Could not determine language: {}", path.to_string_lossy());
- return Err(LoadError::UnknownLanguage);
- }
- };
-
- let uri = match Uri::from_file_path(path) {
- Ok(uri) => uri,
- Err(_) => {
- error!("Invalid path: {}", path.to_string_lossy());
- return Err(LoadError::InvalidPath);
- }
- };
-
- let text = match fs::read_to_string(path) {
- Ok(text) => text,
- Err(why) => {
- warn!("Could not open file: {}", path.to_string_lossy());
- return Err(LoadError::IO(why));
- }
- };
-
- let mut workspace = self.workspace.lock().unwrap();
- *workspace = Self::add_or_update(&workspace, uri, text, language);
- Ok(())
- }
-
- pub fn update(&self, uri: Uri, text: String) {
- let mut workspace = self.workspace.lock().unwrap();
-
- let old_document = match workspace.documents.iter().find(|x| x.uri == uri) {
- Some(document) => document,
- None => {
- warn!("Document not found: {}", uri);
- return;
- }
- };
-
- let language = match old_document.tree {
- SyntaxTree::Latex(_) => Language::Latex,
- SyntaxTree::Bibtex(_) => Language::Bibtex,
- };
-
- *workspace = Self::add_or_update(&workspace, uri, text, language);
- }
-
- fn add_or_update(
- workspace: &Workspace,
- uri: Uri,
- text: String,
- language: Language,
- ) -> Arc<Workspace> {
- let document = Document::parse(uri, text, language);
- let mut documents: Vec<Arc<Document>> = workspace
- .documents
- .iter()
- .filter(|x| x.uri != document.uri)
- .cloned()
- .collect();
-
- documents.push(Arc::new(document));
- Arc::new(Workspace { documents })
- }
-}
-
-#[derive(Debug, Default)]
-pub struct WorkspaceBuilder {
- pub workspace: Workspace,
-}
-
-impl WorkspaceBuilder {
- pub fn new() -> Self {
- Self::default()
- }
-
- pub fn document(&mut self, name: &str, text: &str) -> Uri {
- let path = std::env::temp_dir().join(name);
- let language = Language::by_extension(path.extension().unwrap().to_str().unwrap()).unwrap();
- let uri = Uri::from_file_path(path).unwrap();
- let document = Document::parse(uri.clone(), text.to_owned(), language);
- self.workspace.documents.push(Arc::new(document));
- uri
- }
-}
-
-#[cfg(test)]
-mod tests {
- use super::*;
-
- fn verify_documents(expected: Vec<Uri>, actual: Vec<Arc<Document>>) {
- assert_eq!(expected.len(), actual.len());
- for i in 0..expected.len() {
- assert_eq!(expected[i], actual[i].uri);
- }
- }
-
- #[test]
- fn test_related_documents_append_extensions() {
- let mut builder = WorkspaceBuilder::new();
- let uri1 = builder.document("foo.tex", "\\include{bar/baz}");
- let uri2 = builder.document("bar/baz.tex", "");
- let documents = builder.workspace.related_documents(&uri1);
- verify_documents(vec![uri1, uri2], documents);
- }
-
- #[test]
- fn test_related_documents_relative_path() {
- let mut builder = WorkspaceBuilder::new();
- let uri1 = builder.document("foo.tex", "");
- let uri2 = builder.document("bar/baz.tex", "\\input{../foo.tex}");
- let documents = builder.workspace.related_documents(&uri1);
- verify_documents(vec![uri1, uri2], documents);
- }
-
- #[test]
- fn test_related_documents_invalid_includes() {
- let mut builder = WorkspaceBuilder::new();
- let uri = builder.document("foo.tex", "\\include{<foo>?|bar|:}\n\\include{}");
- let documents = builder.workspace.related_documents(&uri);
- verify_documents(vec![uri], documents);
- }
-
- #[test]
- fn test_related_documents_bibliographies() {
- let mut builder = WorkspaceBuilder::new();
- let uri1 = builder.document("foo.tex", "\\addbibresource{bar.bib}");
- let uri2 = builder.document("bar.bib", "");
- let documents = builder.workspace.related_documents(&uri2);
- verify_documents(vec![uri2, uri1], documents);
- }
-
- #[test]
- fn test_related_documents_unresolvable_include() {
- let mut builder = WorkspaceBuilder::new();
- let uri = builder.document("foo.tex", "\\include{bar.tex}");
- builder.document("baz.tex", "");
- let documents = builder.workspace.related_documents(&uri);
- verify_documents(vec![uri], documents);
- }
-
- #[test]
- fn test_related_documents_include_cycles() {
- let mut builder = WorkspaceBuilder::new();
- let uri1 = builder.document("foo.tex", "\\input{bar.tex}");
- let uri2 = builder.document("bar.tex", "\\input{foo.tex}");
- let documents = builder.workspace.related_documents(&uri1);
- verify_documents(vec![uri1, uri2], documents);
- }
-
- #[test]
- fn test_related_documents_same_parent() {
- let mut builder = WorkspaceBuilder::new();
- let uri1 = builder.document("test.tex", "\\include{test1}\\include{test2}");
- let uri2 = builder.document("test1.tex", "\\label{foo}");
- let uri3 = builder.document("test2.tex", "\\ref{foo}");
- let documents = builder.workspace.related_documents(&uri3);
- verify_documents(vec![uri3, uri1, uri2], documents);
- }
-
- #[test]
- fn test_related_documents_aux_file() {
- let mut builder = WorkspaceBuilder::new();
- let uri1 = builder.document("foo.tex", "\\include{bar}");
- let uri2 = builder.document("bar.tex", "");
- let uri3 = builder.document("foo.aux", "");
- let documents = builder.workspace.related_documents(&uri2);
- verify_documents(vec![uri2, uri1, uri3], documents);
- }
-
- #[test]
- fn test_find_parent() {
- let mut builder = WorkspaceBuilder::new();
- let uri1 = builder.document("foo.tex", "");
- let uri2 = builder.document("bar.tex", "\\begin{document}\\include{foo}\\end{document}");
- let document = builder.workspace.find_parent(&uri1).unwrap();
- assert_eq!(uri2, document.uri);
- }
-
- #[test]
- fn test_find_parent_no_parent() {
- let mut builder = WorkspaceBuilder::new();
- let uri = builder.document("foo.tex", "");
- builder.document("bar.tex", "\\begin{document}\\end{document}");
- let document = builder.workspace.find_parent(&uri);
- assert_eq!(None, document);
- }
-}
diff --git a/support/texlab/src/workspace/outline.rs b/support/texlab/src/workspace/outline.rs
deleted file mode 100644
index 818eed1a53..0000000000
--- a/support/texlab/src/workspace/outline.rs
+++ /dev/null
@@ -1,438 +0,0 @@
-use super::{Document, DocumentView};
-use crate::range::RangeExt;
-use crate::syntax::*;
-use crate::workspace::Uri;
-use lsp_types::*;
-use std::collections::HashSet;
-
-#[derive(Debug, PartialEq, Eq, Clone, Default)]
-pub struct Outline<'a> {
- sections: Vec<OutlineSection<'a>>,
-}
-
-impl<'a> Outline<'a> {
- fn new(sections: Vec<OutlineSection<'a>>) -> Self {
- Self { sections }
- }
-
- pub fn find(&self, uri: &Uri, position: Position) -> Option<&'a LatexSection> {
- self.sections
- .iter()
- .filter(|sec| sec.document.uri == *uri)
- .rev()
- .find(|sec| sec.item.end() <= position)
- .map(|sec| sec.item)
- }
-}
-
-impl<'a> From<&'a DocumentView> for Outline<'a> {
- fn from(view: &'a DocumentView) -> Self {
- let mut finder = OutlineSectionFinder::default();
- let document = if let Some(parent) = view.workspace.find_parent(&view.document.uri) {
- view.related_documents
- .iter()
- .find(|doc| doc.uri == parent.uri)
- .unwrap()
- } else {
- &view.document
- };
- finder.analyze(view, &document);
- Outline::new(finder.sections)
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-struct OutlineSection<'a> {
- pub document: &'a Document,
- pub item: &'a LatexSection,
-}
-
-impl<'a> OutlineSection<'a> {
- fn new(document: &'a Document, item: &'a LatexSection) -> Self {
- Self { document, item }
- }
-}
-
-#[derive(Debug, Default)]
-struct OutlineSectionFinder<'a> {
- visited: HashSet<&'a Uri>,
- sections: Vec<OutlineSection<'a>>,
-}
-
-impl<'a> OutlineSectionFinder<'a> {
- fn analyze(&mut self, view: &'a DocumentView, document: &'a Document) {
- if !self.visited.insert(&document.uri) {
- return;
- }
-
- if let SyntaxTree::Latex(tree) = &document.tree {
- let mut items = Vec::new();
- for section in &tree.structure.sections {
- items.push(OutlineItem::Section(section));
- }
- for include in &tree.includes {
- items.push(OutlineItem::Include(include));
- }
- items.sort_by_key(SyntaxNode::start);
-
- for item in items {
- match item {
- OutlineItem::Section(item) => {
- let section = OutlineSection::new(document, item);
- self.sections.push(section);
- }
- OutlineItem::Include(item) => {
- for document in &view.related_documents {
- for targets in &item.all_targets {
- if targets.contains(&document.uri) {
- self.analyze(view, document);
- break;
- }
- }
- }
- }
- }
- }
- }
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-enum OutlineItem<'a> {
- Section(&'a LatexSection),
- Include(&'a LatexInclude),
-}
-
-impl<'a> SyntaxNode for OutlineItem<'a> {
- fn range(&self) -> Range {
- match self {
- OutlineItem::Section(section) => section.range(),
- OutlineItem::Include(include) => include.range(),
- }
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone, Copy)]
-pub enum OutlineCaptionKind {
- Figure,
- Table,
- Listing,
- Algorithm,
-}
-
-impl OutlineCaptionKind {
- pub fn as_str(self) -> &'static str {
- match self {
- Self::Figure => "Figure",
- Self::Table => "Table",
- Self::Listing => "Listing",
- Self::Algorithm => "Algorithm",
- }
- }
-
- pub fn parse(environment_name: &str) -> Option<Self> {
- match environment_name {
- "figure" | "subfigure" => Some(Self::Figure),
- "table" | "subtable" => Some(Self::Table),
- "listing" | "lstlisting" => Some(Self::Listing),
- "algorithm" => Some(Self::Algorithm),
- _ => None,
- }
- }
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub enum OutlineContextItem {
- Section {
- prefix: &'static str,
- text: String,
- },
- Caption {
- kind: Option<OutlineCaptionKind>,
- text: String,
- },
- Theorem {
- kind: String,
- description: Option<String>,
- },
- Equation,
- Item,
-}
-
-#[derive(Debug, PartialEq, Eq, Clone)]
-pub struct OutlineContext {
- pub range: Range,
- pub number: Option<String>,
- pub item: OutlineContextItem,
-}
-
-impl OutlineContext {
- pub fn reference(&self) -> String {
- match (&self.number, &self.item) {
- (Some(number), OutlineContextItem::Section { prefix, text }) => {
- format!("{} {} ({})", prefix, number, text)
- }
- (Some(number), OutlineContextItem::Caption { kind: None, text }) => {
- format!("{} {}", number, text)
- }
- (
- Some(number),
- OutlineContextItem::Caption {
- kind: Some(kind),
- text,
- },
- ) => format!("{} {}: {}", kind.as_str(), number, text),
- (
- Some(number),
- OutlineContextItem::Theorem {
- kind,
- description: None,
- },
- ) => format!("{} {}", kind, number),
- (
- Some(number),
- OutlineContextItem::Theorem {
- kind,
- description: Some(description),
- },
- ) => format!("{} {} ({})", kind, number, description),
- (Some(number), OutlineContextItem::Equation) => format!("Equation ({})", number),
- (Some(number), OutlineContextItem::Item) => format!("Item {}", number),
- (None, OutlineContextItem::Section { prefix, text }) => {
- format!("{} ({})", prefix, text)
- }
- (None, OutlineContextItem::Caption { kind: None, text }) => text.clone(),
- (
- None,
- OutlineContextItem::Caption {
- kind: Some(kind),
- text,
- },
- ) => format!("{}: {}", kind.as_str(), text),
- (
- None,
- OutlineContextItem::Theorem {
- kind,
- description: None,
- },
- ) => kind.to_owned(),
- (
- None,
- OutlineContextItem::Theorem {
- kind,
- description: Some(description),
- },
- ) => format!("{} ({})", kind, description),
- (None, OutlineContextItem::Equation) => "Equation".to_owned(),
- (None, OutlineContextItem::Item) => "Item".to_owned(),
- }
- }
-
- pub fn detail(&self) -> Option<String> {
- match &self.item {
- OutlineContextItem::Section { .. }
- | OutlineContextItem::Theorem { .. }
- | OutlineContextItem::Equation
- | OutlineContextItem::Item => Some(self.reference()),
- OutlineContextItem::Caption {
- kind: Some(kind), ..
- } => Some(match &self.number {
- Some(number) => format!("{} {}", kind.as_str(), number),
- None => kind.as_str().to_owned(),
- }),
- OutlineContextItem::Caption { .. } => None,
- }
- }
-
- pub fn documentation(&self) -> MarkupContent {
- MarkupContent {
- kind: MarkupKind::PlainText,
- value: self.reference(),
- }
- }
-
- pub fn parse(view: &DocumentView, label: &LatexLabel, outline: &Outline) -> Option<Self> {
- if let SyntaxTree::Latex(tree) = &view.document.tree {
- Self::find_caption(view, label, tree)
- .or_else(|| Self::find_theorem(view, label, tree))
- .or_else(|| Self::find_equation(view, label, tree))
- .or_else(|| Self::find_item(view, label, tree))
- .or_else(|| Self::find_section(view, label, outline))
- } else {
- None
- }
- }
-
- fn find_caption(
- view: &DocumentView,
- label: &LatexLabel,
- tree: &LatexSyntaxTree,
- ) -> Option<Self> {
- let caption_env = tree
- .env
- .environments
- .iter()
- .filter(|env| env.left.name().map(LatexToken::text) != Some("document"))
- .find(|env| env.range().contains(label.start()))?;
-
- let caption = tree
- .structure
- .captions
- .iter()
- .find(|cap| tree.is_direct_child(caption_env, cap.start()))?;
-
- let caption_content = &caption.command.args[caption.index];
- let caption_text = extract_group(caption_content);
- let caption_kind = caption_env
- .left
- .name()
- .map(LatexToken::text)
- .and_then(OutlineCaptionKind::parse);
-
- Some(Self {
- range: caption_env.range(),
- number: Self::find_number(view, label),
- item: OutlineContextItem::Caption {
- kind: caption_kind,
- text: caption_text,
- },
- })
- }
-
- fn find_theorem(
- view: &DocumentView,
- label: &LatexLabel,
- tree: &LatexSyntaxTree,
- ) -> Option<Self> {
- let env = tree
- .env
- .environments
- .iter()
- .find(|env| env.range().contains(label.start()))?;
-
- let env_name = env.left.name().map(LatexToken::text)?;
-
- for document in &view.related_documents {
- if let SyntaxTree::Latex(tree) = &document.tree {
- for definition in &tree.math.theorem_definitions {
- if env_name == definition.name().text() {
- let kind = definition
- .command
- .args
- .get(definition.index + 1)
- .map(|content| extract_group(&content))
- .unwrap_or_else(|| titlelize(env_name));
-
- let description = env
- .left
- .command
- .options
- .get(0)
- .map(|content| extract_group(&content));
-
- return Some(Self {
- range: env.range(),
- number: Self::find_number(view, label),
- item: OutlineContextItem::Theorem { kind, description },
- });
- }
- }
- }
- }
- None
- }
-
- fn find_equation(
- view: &DocumentView,
- label: &LatexLabel,
- tree: &LatexSyntaxTree,
- ) -> Option<Self> {
- tree.env
- .environments
- .iter()
- .filter(|env| env.left.is_math())
- .map(|env| env.range())
- .find(|range| range.contains(label.start()))
- .map(|range| Self {
- range,
- number: Self::find_number(view, label),
- item: OutlineContextItem::Equation,
- })
- }
-
- fn find_item(view: &DocumentView, label: &LatexLabel, tree: &LatexSyntaxTree) -> Option<Self> {
- struct LatexItemNode<'a> {
- item: &'a LatexItem,
- range: Range,
- }
-
- let enumeration = tree
- .env
- .environments
- .iter()
- .find(|env| env.left.is_enum() && env.range().contains(label.start()))?;
-
- let mut item_nodes: Vec<_> = tree
- .structure
- .items
- .iter()
- .filter(|item| tree.is_enumeration_item(enumeration, item))
- .map(|item| LatexItemNode {
- item,
- range: Range::default(),
- })
- .collect();
-
- for i in 0..item_nodes.len() {
- let start = item_nodes[i].item.start();
- let end = item_nodes
- .get(i + 1)
- .map(|node| node.item.start())
- .unwrap_or_else(|| enumeration.right.start());
- item_nodes[i].range = Range::new(start, end);
- }
-
- let node = item_nodes
- .iter()
- .find(|node| node.range.contains(label.start()))?;
-
- let number = node.item.name().or_else(|| Self::find_number(view, label));
-
- Some(Self {
- range: enumeration.range(),
- number,
- item: OutlineContextItem::Item,
- })
- }
-
- fn find_section(view: &DocumentView, label: &LatexLabel, outline: &Outline) -> Option<Self> {
- let section = outline.find(&view.document.uri, label.start())?;
- let content = &section.command.args[section.index];
- Some(Self {
- range: section.range(),
- number: Self::find_number(view, label),
- item: OutlineContextItem::Section {
- prefix: section.prefix,
- text: extract_group(content),
- },
- })
- }
-
- pub fn find_number(view: &DocumentView, label: &LatexLabel) -> Option<String> {
- let label_names = label.names();
- if label_names.len() != 1 {
- return None;
- }
-
- for document in &view.related_documents {
- if let SyntaxTree::Latex(tree) = &document.tree {
- for numbering in &tree.structure.label_numberings {
- if numbering.name().text() == label_names[0].text() {
- return Some(numbering.number.clone());
- }
- }
- }
- }
- None
- }
-}
diff --git a/support/texlab/tests/integration/completion.rs b/support/texlab/tests/integration/completion.rs
new file mode 100644
index 0000000000..4b3b4ecd83
--- /dev/null
+++ b/support/texlab/tests/integration/completion.rs
@@ -0,0 +1,1227 @@
+#[cfg(feature = "citation")]
+use texlab::protocol::{MarkupContent, MarkupKind};
+
+use indoc::indoc;
+use itertools::Itertools;
+use texlab::{
+ protocol::{CompletionItem, CompletionTextEdit, Documentation, Range, RangeExt, TextEdit},
+ test::{TestBed, TestBedBuilder, TestLspClient, PULL_CAPABILITIES},
+};
+
+async fn run_item(
+ test_bed: &TestBed,
+ relative_path: &str,
+ line: u64,
+ character: u64,
+ label: &str,
+) -> CompletionItem {
+ let item = test_bed
+ .completion(relative_path, line, character)
+ .await
+ .unwrap()
+ .into_iter()
+ .find(|item| item.label == label)
+ .unwrap();
+
+ test_bed.client.completion_resolve(item).await.unwrap()
+}
+
+async fn run_list(
+ test_bed: &TestBed,
+ relative_path: &str,
+ line: u64,
+ character: u64,
+) -> Vec<String> {
+ test_bed
+ .completion(relative_path, line, character)
+ .await
+ .unwrap()
+ .into_iter()
+ .map(|item| item.label)
+ .sorted()
+ .collect()
+}
+
+fn verify_text_edit(
+ item: &CompletionItem,
+ start_line: u64,
+ start_character: u64,
+ end_line: u64,
+ end_character: u64,
+ text: &str,
+) {
+ assert_eq!(
+ *item.text_edit.as_ref().unwrap(),
+ CompletionTextEdit::Edit(TextEdit::new(
+ Range::new_simple(start_line, start_character, end_line, end_character),
+ text.into()
+ ))
+ );
+}
+
+fn verify_detail(item: &CompletionItem, detail: &str) {
+ assert_eq!(item.detail.as_ref().unwrap(), detail);
+}
+
+#[tokio::test]
+async fn empty_latex_document() {
+ let mut test_bed = TestBedBuilder::new().file("main.tex", "").build().await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_items = test_bed.completion("main.tex", 0, 0).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert!(actual_items.is_empty());
+}
+
+#[tokio::test]
+async fn empty_bibtex_document() {
+ let mut test_bed = TestBedBuilder::new().file("main.bib", "").build().await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_items = test_bed.completion("main.bib", 0, 0).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert!(actual_items.is_empty());
+}
+
+#[tokio::test]
+async fn bibtex_comment() {
+ let mut test_bed = TestBedBuilder::new().file("main.bib", "foo").build().await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_items = test_bed.completion("main.bib", 0, 2).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert!(actual_items.is_empty());
+}
+
+#[tokio::test]
+async fn bibtex_command_incomplete_entry() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @article{foo,
+ author = {\LaT
+ }
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_item = run_item(&test_bed, "main.bib", 1, 18, "LaTeX").await;
+
+ test_bed.shutdown().await;
+
+ verify_detail(&actual_item, "built-in");
+ verify_text_edit(&actual_item, 1, 15, 1, 18, "LaTeX");
+}
+
+#[tokio::test]
+async fn bibtex_command_complete_entry() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @article{foo,
+ author = {\LaT}
+ }
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_item = run_item(&test_bed, "main.bib", 1, 18, "LaTeX").await;
+
+ test_bed.shutdown().await;
+
+ verify_detail(&actual_item, "built-in");
+ verify_text_edit(&actual_item, 1, 15, 1, 18, "LaTeX");
+}
+
+#[tokio::test]
+async fn bibtex_type_empty() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_item = run_item(&test_bed, "main.bib", 0, 1, "article").await;
+
+ test_bed.shutdown().await;
+
+ assert!(actual_item.documentation.is_some());
+ verify_text_edit(&actual_item, 0, 1, 0, 1, "article");
+}
+
+#[tokio::test]
+async fn bibtex_type_incomplete() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @art
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_item = run_item(&test_bed, "main.bib", 0, 1, "article").await;
+
+ test_bed.shutdown().await;
+
+ assert!(actual_item.documentation.is_some());
+ verify_text_edit(&actual_item, 0, 1, 0, 4, "article");
+}
+
+#[tokio::test]
+async fn bibtex_type_complete() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @article
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_item = run_item(&test_bed, "main.bib", 0, 1, "article").await;
+
+ test_bed.shutdown().await;
+
+ assert!(actual_item.documentation.is_some());
+ verify_text_edit(&actual_item, 0, 1, 0, 8, "article");
+}
+
+#[tokio::test]
+async fn bibtex_field_incomplete_entry() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @article{foo,
+ titl
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_item = run_item(&test_bed, "main.bib", 1, 6, "title").await;
+
+ test_bed.shutdown().await;
+
+ assert!(actual_item.documentation.is_some());
+ verify_text_edit(&actual_item, 1, 4, 1, 8, "title");
+}
+
+#[tokio::test]
+async fn bibtex_field_complete_entry() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @article{foo,
+ title = {}
+ }
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_item = run_item(&test_bed, "main.bib", 1, 6, "title").await;
+
+ test_bed.shutdown().await;
+
+ assert!(actual_item.documentation.is_some());
+ verify_text_edit(&actual_item, 1, 4, 1, 9, "title");
+}
+
+#[tokio::test]
+async fn latex_begin_command() {
+ let mut test_bed = TestBedBuilder::new().file("main.tex", r#"\"#).build().await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 0, 1, "begin").await;
+
+ test_bed.shutdown().await;
+
+ verify_detail(&actual_item, "built-in");
+}
+
+#[cfg(feature = "citation")]
+#[tokio::test]
+async fn latex_citation_valid() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ \bibliography{main}
+ \begin{document}
+ \cite{
+ \end{document}
+ "#
+ ),
+ )
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @article{foo:2019,
+ author = {Foo Bar},
+ title = {Baz Qux},
+ year = {2019},
+ }
+
+ @article{bar:2005,}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+ test_bed.open("main.bib").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 3, 6, "foo:2019").await;
+
+ test_bed.shutdown().await;
+
+ verify_text_edit(&actual_item, 3, 6, 3, 6, "foo:2019");
+ assert_eq!(
+ actual_item.documentation.unwrap(),
+ Documentation::MarkupContent(MarkupContent {
+ kind: MarkupKind::Markdown,
+ value: "Bar, F. (2019). *Baz Qux*.".into()
+ })
+ );
+}
+
+#[cfg(feature = "citation")]
+#[tokio::test]
+async fn latex_citation_invalid() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ \bibliography{main}
+ \begin{document}
+ \cite{
+ \end{document}
+ "#
+ ),
+ )
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @article{foo:2019,
+ author = {Foo Bar},
+ title = {Baz Qux},
+ year = {2019},
+ }
+
+ @article{bar:2005,}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+ test_bed.open("main.bib").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 3, 6, "bar:2005").await;
+
+ test_bed.shutdown().await;
+
+ verify_text_edit(&actual_item, 3, 6, 3, 6, "bar:2005");
+ assert_eq!(actual_item.documentation, None);
+}
+
+#[tokio::test]
+async fn latex_color_name() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \color{re}
+ \definecolor{foo}{
+ \definecolorset{R}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 0, 9, "red").await;
+
+ test_bed.shutdown().await;
+
+ verify_text_edit(&actual_item, 0, 7, 0, 9, "red");
+}
+
+#[tokio::test]
+async fn latex_color_model_define_color() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \color{re}
+ \definecolor{foo}{
+ \definecolorset{R}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 1, 18, "rgb").await;
+
+ test_bed.shutdown().await;
+
+ verify_text_edit(&actual_item, 1, 18, 1, 18, "rgb");
+}
+
+#[tokio::test]
+async fn latex_model_define_color_set() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \color{re}
+ \definecolor{foo}{
+ \definecolorset{R}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 2, 17, "RGB").await;
+
+ test_bed.shutdown().await;
+
+ verify_text_edit(&actual_item, 2, 16, 2, 17, "RGB");
+}
+
+#[tokio::test]
+async fn latex_component_kernel_command() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{book}
+ \usepackage{amsmath}
+ \chap
+ \varDel
+ \begin{theind}
+ \end{alig}
+ \begin{doc}
+ \vareps
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 0, 1, "documentclass").await;
+
+ test_bed.shutdown().await;
+
+ verify_detail(&actual_item, "built-in");
+ verify_text_edit(&actual_item, 0, 1, 0, 14, "documentclass");
+}
+
+#[tokio::test]
+async fn latex_component_kernel_command_glyph() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{book}
+ \usepackage{amsmath}
+ \chap
+ \varDel
+ \begin{theind}
+ \end{alig}
+ \begin{doc}
+ \vareps
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 7, 7, "varepsilon").await;
+
+ test_bed.shutdown().await;
+
+ verify_detail(&actual_item, "ε, built-in");
+ verify_text_edit(&actual_item, 7, 1, 7, 7, "varepsilon");
+}
+
+#[tokio::test]
+async fn latex_component_kernel_environment() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{book}
+ \usepackage{amsmath}
+ \chap
+ \varDel
+ \begin{theind}
+ \end{alig}
+ \begin{doc}
+ \vareps
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 6, 10, "document").await;
+
+ test_bed.shutdown().await;
+
+ verify_detail(&actual_item, "built-in");
+ verify_text_edit(&actual_item, 6, 7, 6, 10, "document");
+}
+
+#[tokio::test]
+async fn latex_component_class_command() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{book}
+ \usepackage{amsmath}
+ \chap
+ \varDel
+ \begin{theind}
+ \end{alig}
+ \begin{doc}
+ \vareps
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 2, 5, "chapter").await;
+
+ test_bed.shutdown().await;
+
+ verify_detail(&actual_item, "book.cls");
+ verify_text_edit(&actual_item, 2, 1, 2, 5, "chapter");
+}
+
+#[tokio::test]
+async fn latex_component_class_environment() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{book}
+ \usepackage{amsmath}
+ \chap
+ \varDel
+ \begin{theind}
+ \end{alig}
+ \begin{doc}
+ \vareps
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 4, 13, "theindex").await;
+
+ test_bed.shutdown().await;
+
+ verify_detail(&actual_item, "book.cls");
+ verify_text_edit(&actual_item, 4, 7, 4, 13, "theindex");
+}
+
+#[tokio::test]
+async fn latex_component_package_command() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{book}
+ \usepackage{amsmath}
+ \chap
+ \varDel
+ \begin{theind}
+ \end{alig}
+ \begin{doc}
+ \vareps
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 3, 7, "varDelta").await;
+
+ test_bed.shutdown().await;
+
+ verify_detail(&actual_item, "amsmath.sty");
+ verify_text_edit(&actual_item, 3, 1, 3, 7, "varDelta");
+}
+
+#[tokio::test]
+async fn latex_component_package_environment() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{book}
+ \usepackage{amsmath}
+ \chap
+ \varDel
+ \begin{theind}
+ \end{alig}
+ \begin{doc}
+ \vareps
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 5, 5, "align").await;
+
+ test_bed.shutdown().await;
+
+ verify_detail(&actual_item, "amsmath.sty");
+ verify_text_edit(&actual_item, 5, 5, 5, 9, "align");
+}
+
+#[tokio::test]
+async fn latex_import_class() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{book}
+ \usepackage{amsmath}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 0, 19, "book").await;
+
+ test_bed.shutdown().await;
+
+ assert!(actual_item.documentation.is_some());
+ verify_text_edit(&actual_item, 0, 15, 0, 19, "book");
+}
+
+#[tokio::test]
+async fn latex_import_package() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{book}
+ \usepackage{amsmath}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 1, 15, "amsmath").await;
+
+ test_bed.shutdown().await;
+
+ assert!(actual_item.documentation.is_some());
+ verify_text_edit(&actual_item, 1, 12, 1, 19, "amsmath");
+}
+
+#[tokio::test]
+async fn latex_include_relative_root_no_extension() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ \include{}
+ \input{}
+ \input{qux/}
+ \addbibresource{}
+ "#
+ ),
+ )
+ .file("foo.bib", "")
+ .file("bar.tex", "")
+ .file("qux/baz.tex", "")
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_items = run_list(&test_bed, "main.tex", 1, 9).await;
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_items, vec!["bar", "main", "qux"]);
+}
+
+#[tokio::test]
+async fn latex_include_relative_root_with_extension() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ \include{}
+ \input{}
+ \input{qux/}
+ \addbibresource{}
+ "#
+ ),
+ )
+ .file("foo.bib", "")
+ .file("bar.tex", "")
+ .file("qux/baz.tex", "")
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_items = run_list(&test_bed, "main.tex", 2, 7).await;
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_items, vec!["bar.tex", "main.tex", "qux"]);
+}
+
+#[tokio::test]
+async fn latex_include_relative_subdir() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ \include{}
+ \input{}
+ \input{qux/}
+ \addbibresource{}
+ "#
+ ),
+ )
+ .file("foo.bib", "")
+ .file("bar.tex", "")
+ .file("qux/baz.tex", "")
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_items = run_list(&test_bed, "main.tex", 3, 11).await;
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_items, vec!["baz.tex"]);
+}
+
+#[tokio::test]
+async fn latex_include_relative_parent_dir() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ \include{}
+ \input{}
+ \input{qux/}
+ \addbibresource{}
+ "#
+ ),
+ )
+ .file("foo.bib", "")
+ .file("bar.tex", "")
+ .file("qux/baz.tex", r#"\input{../}"#)
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("qux/baz.tex").await;
+
+ let actual_items = run_list(&test_bed, "qux/baz.tex", 0, 10).await;
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_items, vec!["bar.tex", "main.tex", "qux"]);
+}
+
+#[tokio::test]
+async fn latex_include_relative_bibliography() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ \include{}
+ \input{}
+ \input{qux/}
+ \addbibresource{}
+ "#
+ ),
+ )
+ .file("foo.bib", "")
+ .file("bar.tex", "")
+ .file("qux/baz.tex", "")
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_items = run_list(&test_bed, "main.tex", 4, 16).await;
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_items, vec!["foo.bib", "qux"]);
+}
+
+#[tokio::test]
+async fn latex_include_root_dir() {
+ let mut test_bed = TestBedBuilder::new()
+ .file("src/main.tex", r#"\input{}"#)
+ .root_dir(".")
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("src/main.tex").await;
+
+ let actual_items = run_list(&test_bed, "src/main.tex", 0, 7).await;
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_items, vec!["src"]);
+}
+
+#[tokio::test]
+async fn latex_label() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ %
+ \usepackage{amsmath}
+ \usepackage{caption}
+ \usepackage{amsthm}
+ \newtheorem{lemma}{Lemma}
+ %
+ \begin{document}
+ %
+ \section{Foo}%
+ \label{sec:foo}
+ %
+ \begin{equation}%
+ \label{eq:foo}
+ 1 + 1 = 2
+ \end{equation}
+ %
+ \begin{equation}%
+ \label{eq:bar}
+ 1 + 1 = 2
+ \end{equation}
+ %
+ \begin{figure}%
+ \LaTeX{}
+ \caption{Baz}%
+ \label{fig:baz}
+ \end{figure}
+ %
+ \begin{lemma}%
+ \label{thm:foo}
+ 1 + 1 = 2
+ \end{lemma}
+ %
+ \include{bar}
+ %
+ \end{document}
+ "#
+ ),
+ )
+ .file(
+ "foo.aux",
+ indoc!(
+ r#"
+ \relax
+ \@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Baz\relax }}{1}\protected@file@percent }
+ \providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
+ \newlabel{fig:baz}{{1}{1}}
+ \@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}\protected@file@percent }
+ \newlabel{sec:foo}{{1}{1}}
+ \newlabel{eq:foo}{{1}{1}}
+ \newlabel{eq:bar}{{2}{1}}
+ \newlabel{thm:foo}{{1}{1}}
+ \@input{bar.aux}
+ "#
+ ),
+ )
+ .file(
+ "bar.tex",
+ indoc!(
+ r#"
+ \section{Bar}%
+ \label{sec:bar}
+ %
+ Lorem ipsum dolor sit amet.
+ \ref{}
+ \eqref{}
+ "#
+ ),
+ )
+ .file(
+ "bar.aux",
+ indoc!(
+ r#"
+ \relax
+ \@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{2}\protected@file@percent }
+ \newlabel{sec:bar}{{2}{2}}
+ \@setckpt{bar}{
+ \setcounter{page}{3}
+ \setcounter{equation}{2}
+ \setcounter{enumi}{0}
+ \setcounter{enumii}{0}
+ \setcounter{enumiii}{0}
+ \setcounter{enumiv}{0}
+ \setcounter{footnote}{0}
+ \setcounter{mpfootnote}{0}
+ \setcounter{part}{0}
+ \setcounter{section}{2}
+ \setcounter{subsection}{0}
+ \setcounter{subsubsection}{0}
+ \setcounter{paragraph}{0}
+ \setcounter{subparagraph}{0}
+ \setcounter{figure}{1}
+ \setcounter{table}{0}
+ \setcounter{parentequation}{0}
+ \setcounter{caption@flags}{0}
+ \setcounter{ContinuedFloat}{0}
+ \setcounter{lemma}{1}
+ }
+ "#),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("foo.tex").await;
+ test_bed.open("foo.aux").await;
+ test_bed.open("bar.tex").await;
+ test_bed.open("bar.aux").await;
+
+ let actual_items = test_bed.completion("bar.tex", 4, 5).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_items.len(), 6);
+ verify_text_edit(&actual_items[0], 4, 5, 4, 5, "sec:bar");
+ verify_text_edit(&actual_items[1], 4, 5, 4, 5, "sec:foo");
+ verify_text_edit(&actual_items[2], 4, 5, 4, 5, "eq:foo");
+ verify_text_edit(&actual_items[3], 4, 5, 4, 5, "eq:bar");
+ verify_text_edit(&actual_items[4], 4, 5, 4, 5, "fig:baz");
+ verify_text_edit(&actual_items[5], 4, 5, 4, 5, "thm:foo");
+ verify_detail(&actual_items[0], "Section 2 (Bar)");
+ verify_detail(&actual_items[1], "Section 1 (Foo)");
+ verify_detail(&actual_items[2], "Equation (1)");
+ verify_detail(&actual_items[3], "Equation (2)");
+ verify_detail(&actual_items[4], "Figure 1");
+ verify_detail(&actual_items[5], "Lemma 1");
+ assert_eq!(
+ *actual_items[4].documentation.as_ref().unwrap(),
+ Documentation::String("Baz".into())
+ );
+}
+
+#[tokio::test]
+async fn latex_preselect_environment() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \begin{document}
+ \end{
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 1, 5, "document").await;
+
+ test_bed.shutdown().await;
+
+ assert!(actual_item.preselect.unwrap());
+}
+
+#[tokio::test]
+async fn latex_theorem() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ \usepackage{amsthm}
+ \newtheorem{foo}{Foo}
+ \begin{f}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 3, 7, "foo").await;
+
+ test_bed.shutdown().await;
+
+ verify_text_edit(&actual_item, 3, 7, 3, 8, "foo");
+ verify_detail(&actual_item, "user-defined");
+}
+
+#[tokio::test]
+async fn latex_pgf_library() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \usepackage{tikz}
+ \usepgflibrary{}
+ \usetikzlibrary{}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 1, 15, "arrows").await;
+
+ test_bed.shutdown().await;
+
+ verify_text_edit(&actual_item, 1, 15, 1, 15, "arrows");
+}
+
+#[tokio::test]
+async fn latex_tikz_library() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \usepackage{tikz}
+ \usepgflibrary{}
+ \usetikzlibrary{}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 2, 16, "arrows").await;
+
+ test_bed.shutdown().await;
+
+ verify_text_edit(&actual_item, 2, 16, 2, 16, "arrows");
+}
+
+#[tokio::test]
+async fn latex_user_command() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \foo
+ \fo
+ \begin{foo}
+ \end{foo}
+ \begin{fo}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 1, 3, "foo").await;
+
+ test_bed.shutdown().await;
+
+ verify_detail(&actual_item, "user-defined");
+ verify_text_edit(&actual_item, 1, 1, 1, 3, "foo");
+}
+
+#[tokio::test]
+async fn latex_user_environment() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \foo
+ \fo
+ \begin{foo}
+ \end{foo}
+ \begin{fo}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_item = run_item(&test_bed, "main.tex", 4, 7, "foo").await;
+
+ test_bed.shutdown().await;
+
+ verify_detail(&actual_item, "user-defined");
+ verify_text_edit(&actual_item, 4, 7, 4, 9, "foo");
+}
diff --git a/support/texlab/tests/integration/definition.rs b/support/texlab/tests/integration/definition.rs
new file mode 100644
index 0000000000..685b121377
--- /dev/null
+++ b/support/texlab/tests/integration/definition.rs
@@ -0,0 +1,482 @@
+use indoc::indoc;
+use texlab::{
+ protocol::{LocationLink, Range, RangeExt},
+ test::{TestBedBuilder, LOCATION_LINK_CAPABILITIES, PULL_CAPABILITIES},
+};
+
+fn verify_origin_selection_range(
+ link: &LocationLink,
+ start_line: u64,
+ start_character: u64,
+ end_line: u64,
+ end_character: u64,
+) {
+ assert_eq!(
+ link.origin_selection_range,
+ Some(Range::new_simple(
+ start_line,
+ start_character,
+ end_line,
+ end_character
+ ))
+ );
+}
+
+#[tokio::test]
+async fn empty_latex_document() {
+ let mut test_bed = TestBedBuilder::new().file("main.tex", "").build().await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_locations = test_bed
+ .definition_location("main.tex", 0, 0)
+ .await
+ .unwrap();
+
+ test_bed.shutdown().await;
+
+ assert!(actual_locations.is_empty());
+}
+
+#[tokio::test]
+async fn empty_bibtex_document() {
+ let mut test_bed = TestBedBuilder::new().file("main.bib", "").build().await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_locations = test_bed
+ .definition_location("main.bib", 0, 0)
+ .await
+ .unwrap();
+
+ test_bed.shutdown().await;
+
+ assert!(actual_locations.is_empty());
+}
+
+#[tokio::test]
+async fn bibtex_string() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @string{foo = "Foo"}
+ %
+ @string{bar = "Bar"}
+ %
+ @article{baz,
+ author = bar
+ }
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed
+ .initialize(LOCATION_LINK_CAPABILITIES.clone())
+ .await;
+ test_bed.open("main.bib").await;
+
+ let mut actual_links = test_bed.definition_link("main.bib", 5, 14).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_links.len(), 1);
+ let link = actual_links.pop().unwrap();
+ verify_origin_selection_range(&link, 5, 13, 5, 16);
+ assert_eq!(link.target_uri, test_bed.uri("main.bib").into());
+ assert_eq!(link.target_range, Range::new_simple(2, 0, 2, 20));
+ assert_eq!(link.target_selection_range, Range::new_simple(2, 8, 2, 11));
+}
+
+#[tokio::test]
+async fn latex_citation_link() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \bibliography{bar}
+ \cite{bar}
+ "#
+ ),
+ )
+ .file(
+ "bar.bib",
+ indoc!(
+ r#"
+ @article{foo,}
+ %
+ @article{bar,}
+ "#
+ ),
+ )
+ .file(
+ "baz.bib",
+ indoc!(
+ r#"
+ @article{foo,}
+ %
+ @article{bar,}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed
+ .initialize(LOCATION_LINK_CAPABILITIES.clone())
+ .await;
+ test_bed.open("foo.tex").await;
+ test_bed.open("bar.bib").await;
+ test_bed.open("baz.bib").await;
+
+ let mut actual_links = test_bed.definition_link("foo.tex", 1, 7).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_links.len(), 1);
+ let link = actual_links.pop().unwrap();
+ verify_origin_selection_range(&link, 1, 6, 1, 9);
+ assert_eq!(link.target_uri, test_bed.uri("bar.bib").into());
+ assert_eq!(link.target_range, Range::new_simple(2, 0, 2, 14));
+ assert_eq!(link.target_selection_range, Range::new_simple(2, 9, 2, 12));
+}
+
+#[tokio::test]
+async fn latex_citation_location() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \bibliography{bar}
+ \cite{bar}
+ "#
+ ),
+ )
+ .file(
+ "bar.bib",
+ indoc!(
+ r#"
+ @article{foo,}
+ %
+ @article{bar,}
+ "#
+ ),
+ )
+ .file(
+ "baz.bib",
+ indoc!(
+ r#"
+ @article{foo,}
+ %
+ @article{bar,}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("foo.tex").await;
+ test_bed.open("bar.bib").await;
+ test_bed.open("baz.bib").await;
+
+ let mut actual_locations = test_bed.definition_location("foo.tex", 1, 7).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_locations.len(), 1);
+ let location = actual_locations.pop().unwrap();
+ assert_eq!(location.uri, test_bed.uri("bar.bib").into());
+ assert_eq!(location.range, Range::new_simple(2, 9, 2, 12));
+}
+
+#[tokio::test]
+async fn latex_command_link() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \newcommand{\foo}{Foo}
+ %
+ \foo
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed
+ .initialize(LOCATION_LINK_CAPABILITIES.clone())
+ .await;
+ test_bed.open("main.tex").await;
+
+ let mut actual_links = test_bed.definition_link("main.tex", 2, 2).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_links.len(), 1);
+ let link = actual_links.pop().unwrap();
+ verify_origin_selection_range(&link, 2, 0, 2, 4);
+ assert_eq!(link.target_uri, test_bed.uri("main.tex").into());
+ assert_eq!(link.target_range, Range::new_simple(0, 0, 0, 22));
+ assert_eq!(link.target_selection_range, Range::new_simple(0, 0, 0, 22));
+}
+
+#[tokio::test]
+async fn latex_math_operator_link() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \DeclareMathOperator{\foo}{foo}
+ %
+ \foo
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed
+ .initialize(LOCATION_LINK_CAPABILITIES.clone())
+ .await;
+ test_bed.open("main.tex").await;
+
+ let mut actual_links = test_bed.definition_link("main.tex", 2, 2).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_links.len(), 1);
+ let link = actual_links.pop().unwrap();
+ verify_origin_selection_range(&link, 2, 0, 2, 4);
+ assert_eq!(link.target_uri, test_bed.uri("main.tex").into());
+ assert_eq!(link.target_range, Range::new_simple(0, 0, 0, 31));
+ assert_eq!(link.target_selection_range, Range::new_simple(0, 0, 0, 31));
+}
+
+#[tokio::test]
+async fn latex_label_unknown_link() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \label{foo}
+ \ref{foo}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed
+ .initialize(LOCATION_LINK_CAPABILITIES.clone())
+ .await;
+ test_bed.open("main.tex").await;
+
+ let mut actual_links = test_bed.definition_link("main.tex", 1, 7).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_links.len(), 1);
+ let link = actual_links.pop().unwrap();
+ verify_origin_selection_range(&link, 1, 5, 1, 8);
+ assert_eq!(link.target_uri, test_bed.uri("main.tex").into());
+ assert_eq!(link.target_range, Range::new_simple(0, 0, 0, 11));
+ assert_eq!(link.target_selection_range, Range::new_simple(0, 0, 0, 11));
+}
+
+#[tokio::test]
+async fn latex_label_equation_link() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \begin{equation}%
+ \label{eq:foo}
+ Foo
+ \end{equation}
+ %
+ \ref{eq:foo}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed
+ .initialize(LOCATION_LINK_CAPABILITIES.clone())
+ .await;
+ test_bed.open("main.tex").await;
+
+ let mut actual_links = test_bed.definition_link("main.tex", 5, 8).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_links.len(), 1);
+ let link = actual_links.pop().unwrap();
+ verify_origin_selection_range(&link, 5, 5, 5, 11);
+ assert_eq!(link.target_uri, test_bed.uri("main.tex").into());
+ assert_eq!(link.target_range, Range::new_simple(0, 0, 3, 14));
+ assert_eq!(link.target_selection_range, Range::new_simple(1, 0, 1, 14));
+}
+
+#[tokio::test]
+async fn latex_label_float_link() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \begin{figure}
+ Foo
+ \caption{Bar}
+ \label{fig}
+ \end{figure}
+ %
+ \ref{fig}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed
+ .initialize(LOCATION_LINK_CAPABILITIES.clone())
+ .await;
+ test_bed.open("main.tex").await;
+
+ let mut actual_links = test_bed.definition_link("main.tex", 6, 6).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_links.len(), 1);
+ let link = actual_links.pop().unwrap();
+ verify_origin_selection_range(&link, 6, 5, 6, 8);
+ assert_eq!(link.target_uri, test_bed.uri("main.tex").into());
+ assert_eq!(link.target_range, Range::new_simple(0, 0, 4, 12));
+ assert_eq!(link.target_selection_range, Range::new_simple(3, 0, 3, 11));
+}
+
+#[tokio::test]
+async fn latex_label_item_link() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \begin{enumerate}
+ \item Foo
+ \item\label{bar} Bar
+ \item Baz
+ \end{enumerate}
+ %
+ \ref{bar}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed
+ .initialize(LOCATION_LINK_CAPABILITIES.clone())
+ .await;
+ test_bed.open("main.tex").await;
+
+ let mut actual_links = test_bed.definition_link("main.tex", 6, 6).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_links.len(), 1);
+ let link = actual_links.pop().unwrap();
+ verify_origin_selection_range(&link, 6, 5, 6, 8);
+ assert_eq!(link.target_uri, test_bed.uri("main.tex").into());
+ assert_eq!(link.target_range, Range::new_simple(0, 0, 4, 15));
+ assert_eq!(link.target_selection_range, Range::new_simple(2, 9, 2, 20));
+}
+
+#[tokio::test]
+async fn latex_label_section_link() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \section{Foo}
+ \label{sec:foo}
+ %
+ \section{Bar}
+ \label{sec:bar}
+ %
+ \ref{sec:foo}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed
+ .initialize(LOCATION_LINK_CAPABILITIES.clone())
+ .await;
+ test_bed.open("main.tex").await;
+
+ let mut actual_links = test_bed.definition_link("main.tex", 6, 6).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_links.len(), 1);
+ let link = actual_links.pop().unwrap();
+ verify_origin_selection_range(&link, 6, 5, 6, 12);
+ assert_eq!(link.target_uri, test_bed.uri("main.tex").into());
+ assert_eq!(link.target_range, Range::new_simple(0, 0, 3, 0));
+ assert_eq!(link.target_selection_range, Range::new_simple(1, 0, 1, 15));
+}
+
+#[tokio::test]
+async fn latex_label_theorem_link() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \usepackage{amsthm}
+ \newtheorem{lemma}{Lemma}
+ %
+ \begin{lemma}%
+ \label{thm:foo}
+ Foo
+ \end{lemma}
+ %
+ \ref{thm:foo}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed
+ .initialize(LOCATION_LINK_CAPABILITIES.clone())
+ .await;
+ test_bed.open("main.tex").await;
+
+ let mut actual_links = test_bed.definition_link("main.tex", 8, 7).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_links.len(), 1);
+ let link = actual_links.pop().unwrap();
+ verify_origin_selection_range(&link, 8, 5, 8, 12);
+ assert_eq!(link.target_uri, test_bed.uri("main.tex").into());
+ assert_eq!(link.target_range, Range::new_simple(3, 0, 6, 11));
+ assert_eq!(link.target_selection_range, Range::new_simple(4, 0, 4, 15));
+}
diff --git a/support/texlab/tests/integration/document_symbol.rs b/support/texlab/tests/integration/document_symbol.rs
new file mode 100644
index 0000000000..afc3d54831
--- /dev/null
+++ b/support/texlab/tests/integration/document_symbol.rs
@@ -0,0 +1,424 @@
+use indoc::indoc;
+use texlab::{
+ protocol::{DocumentSymbol, Range, RangeExt},
+ test::{TestBedBuilder, NESTED_SYMBOL_CAPABILITIES},
+};
+
+fn verify_symbol(
+ symbol: &DocumentSymbol,
+ name: &str,
+ detail: Option<&str>,
+ selection_range: Range,
+ range: Range,
+) {
+ assert_eq!(symbol.name, name);
+ assert_eq!(symbol.detail.as_ref().map(AsRef::as_ref), detail);
+ assert_eq!(symbol.selection_range, selection_range);
+ assert_eq!(symbol.range, range);
+}
+
+#[tokio::test]
+async fn enumerate() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ %
+ \begin{document}
+ %
+ \begin{enumerate}
+ \item\label{it:foo} Foo
+ \item\label{it:bar} Bar
+ \item[Baz] Baz
+ \item[Qux]\label{it:qux} Qux
+ \end{enumerate}
+ %
+ \end{document}
+ "#
+ ),
+ )
+ .file(
+ "main.aux",
+ indoc!(
+ r#"
+ \relax
+ \newlabel{it:foo}{{1}{1}}
+ \newlabel{it:qux}{{2}{1}}
+ "#
+ ),
+ )
+ .build()
+ .await;
+
+ test_bed.spawn();
+ test_bed
+ .initialize(NESTED_SYMBOL_CAPABILITIES.clone())
+ .await;
+ test_bed.open("main.tex").await;
+ test_bed.open("main.aux").await;
+
+ let mut actual_symbols = test_bed.document_symbol_nested("main.tex").await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_symbols.len(), 1);
+ verify_symbol(
+ &actual_symbols[0],
+ "Enumerate",
+ None,
+ Range::new_simple(4, 0, 9, 15),
+ Range::new_simple(4, 0, 9, 15),
+ );
+
+ let children = actual_symbols[0].children.take().unwrap();
+ assert_eq!(children.len(), 4);
+ verify_symbol(
+ &children[0],
+ "1",
+ Some("it:foo"),
+ Range::new_simple(5, 9, 5, 23),
+ Range::new_simple(5, 4, 6, 4),
+ );
+ verify_symbol(
+ &children[1],
+ "Item",
+ Some("it:bar"),
+ Range::new_simple(6, 9, 6, 23),
+ Range::new_simple(6, 4, 7, 4),
+ );
+ verify_symbol(
+ &children[2],
+ "Baz",
+ None,
+ Range::new_simple(7, 4, 7, 14),
+ Range::new_simple(7, 4, 8, 4),
+ );
+ verify_symbol(
+ &children[3],
+ "Qux",
+ Some("it:qux"),
+ Range::new_simple(8, 14, 8, 28),
+ Range::new_simple(8, 4, 9, 0),
+ );
+}
+
+#[tokio::test]
+async fn equation() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ %
+ \begin{document}
+ %
+ \begin{equation}\label{eq:foo}
+ Foo
+ \end{equation}
+ %
+ \begin{equation}\label{eq:bar}
+ Bar
+ \end{equation}
+ %
+ \begin{equation}
+ Baz
+ \end{equation}
+ %
+ \end{document}
+ "#
+ ),
+ )
+ .file(
+ "main.aux",
+ indoc!(
+ r#"
+ \relax
+ \newlabel{eq:foo}{{1}{1}}
+ "#
+ ),
+ )
+ .build()
+ .await;
+
+ test_bed.spawn();
+ test_bed
+ .initialize(NESTED_SYMBOL_CAPABILITIES.clone())
+ .await;
+ test_bed.open("main.tex").await;
+ test_bed.open("main.aux").await;
+
+ let actual_symbols = test_bed.document_symbol_nested("main.tex").await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_symbols.len(), 3);
+ verify_symbol(
+ &actual_symbols[0],
+ "Equation (1)",
+ Some("eq:foo"),
+ Range::new_simple(4, 16, 4, 30),
+ Range::new_simple(4, 0, 6, 14),
+ );
+ verify_symbol(
+ &actual_symbols[1],
+ "Equation",
+ Some("eq:bar"),
+ Range::new_simple(8, 16, 8, 30),
+ Range::new_simple(8, 0, 10, 14),
+ );
+ verify_symbol(
+ &actual_symbols[2],
+ "Equation",
+ None,
+ Range::new_simple(12, 0, 14, 14),
+ Range::new_simple(12, 0, 14, 14),
+ );
+}
+
+#[tokio::test]
+async fn float() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ %
+ \begin{document}
+ %
+ \begin{figure}
+ Foo
+ \caption{Foo}\label{fig:foo}
+ \end{figure}
+ %
+ \begin{figure}
+ Bar
+ \caption{Bar}\label{fig:bar}
+ \end{figure}
+ %
+ \begin{figure}
+ Baz
+ \caption{Baz}
+ \end{figure}
+ %
+ \begin{figure}
+ Qux
+ \end{figure}
+ %
+ \end{document}
+ "#
+ ),
+ )
+ .file(
+ "main.aux",
+ indoc!(
+ r#"
+ \relax
+ \@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Foo}}{1}\protected@file@percent }
+ \newlabel{fig:foo}{{1}{1}}
+ \@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Bar}}{1}\protected@file@percent }
+ \@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Baz}}{1}\protected@file@percent }
+ "#
+ ),
+ )
+ .build()
+ .await;
+
+ test_bed.spawn();
+ test_bed
+ .initialize(NESTED_SYMBOL_CAPABILITIES.clone())
+ .await;
+ test_bed.open("main.tex").await;
+ test_bed.open("main.aux").await;
+
+ let actual_symbols = test_bed.document_symbol_nested("main.tex").await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_symbols.len(), 3);
+ verify_symbol(
+ &actual_symbols[0],
+ "Figure 1: Foo",
+ Some("fig:foo"),
+ Range::new_simple(6, 17, 6, 32),
+ Range::new_simple(4, 0, 7, 12),
+ );
+ verify_symbol(
+ &actual_symbols[1],
+ "Figure: Bar",
+ Some("fig:bar"),
+ Range::new_simple(11, 17, 11, 32),
+ Range::new_simple(9, 0, 12, 12),
+ );
+ verify_symbol(
+ &actual_symbols[2],
+ "Figure: Baz",
+ None,
+ Range::new_simple(14, 0, 17, 12),
+ Range::new_simple(14, 0, 17, 12),
+ );
+}
+
+#[tokio::test]
+async fn section() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ %
+ \begin{document}
+ %
+ \section{Foo}
+ %
+ \section{Bar}\label{sec:bar}
+ %
+ \subsection{Baz}\label{sec:baz}
+ %
+ \end{document}
+ "#
+ ),
+ )
+ .file(
+ "main.aux",
+ indoc!(
+ r#"
+ \relax
+ \@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}\protected@file@percent }
+ \@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{1}\protected@file@percent }
+ \newlabel{sec:bar}{{2}{1}}
+ "#
+ ),
+ )
+ .build()
+ .await;
+
+ test_bed.spawn();
+ test_bed
+ .initialize(NESTED_SYMBOL_CAPABILITIES.clone())
+ .await;
+ test_bed.open("main.tex").await;
+ test_bed.open("main.aux").await;
+
+ let mut actual_symbols = test_bed.document_symbol_nested("main.tex").await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_symbols.len(), 2);
+ verify_symbol(
+ &actual_symbols[0],
+ "Foo",
+ None,
+ Range::new_simple(4, 0, 4, 13),
+ Range::new_simple(4, 0, 6, 0),
+ );
+ verify_symbol(
+ &actual_symbols[1],
+ "2 Bar",
+ Some("sec:bar"),
+ Range::new_simple(6, 0, 6, 13),
+ Range::new_simple(6, 0, 10, 0),
+ );
+
+ let children = actual_symbols[1].children.take().unwrap();
+ assert_eq!(children.len(), 1);
+ verify_symbol(
+ &children[0],
+ "Baz",
+ Some("sec:baz"),
+ Range::new_simple(8, 0, 8, 16),
+ Range::new_simple(8, 0, 10, 0),
+ );
+}
+
+#[tokio::test]
+async fn theorem() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ \usepackage{amsthm}
+ \newtheorem{lemma}{Lemma}
+ %
+ \begin{document}
+ %
+ \begin{lemma}[Foo]\label{thm:foo}
+ Foo
+ \end{lemma}
+ %
+ \begin{lemma}\label{thm:bar}
+ Bar
+ \end{lemma}
+ %
+ \begin{lemma}\label{thm:baz}
+ Baz
+ \end{lemma}
+ %
+ \begin{lemma}[Qux]
+ Qux
+ \end{lemma}
+ %
+ \end{document}
+ "#
+ ),
+ )
+ .file(
+ "main.aux",
+ indoc!(
+ r#"
+ \relax
+ \newlabel{thm:foo}{{1}{1}}
+ \newlabel{thm:bar}{{2}{1}}
+ "#
+ ),
+ )
+ .build()
+ .await;
+
+ test_bed.spawn();
+ test_bed
+ .initialize(NESTED_SYMBOL_CAPABILITIES.clone())
+ .await;
+ test_bed.open("main.tex").await;
+ test_bed.open("main.aux").await;
+
+ let actual_symbols = test_bed.document_symbol_nested("main.tex").await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_symbols.len(), 4);
+ verify_symbol(
+ &actual_symbols[0],
+ "Lemma 1 (Foo)",
+ Some("thm:foo"),
+ Range::new_simple(6, 18, 6, 33),
+ Range::new_simple(6, 0, 8, 11),
+ );
+ verify_symbol(
+ &actual_symbols[1],
+ "Lemma 2",
+ Some("thm:bar"),
+ Range::new_simple(10, 13, 10, 28),
+ Range::new_simple(10, 0, 12, 11),
+ );
+ verify_symbol(
+ &actual_symbols[2],
+ "Lemma",
+ Some("thm:baz"),
+ Range::new_simple(14, 13, 14, 28),
+ Range::new_simple(14, 0, 16, 11),
+ );
+ verify_symbol(
+ &actual_symbols[3],
+ "Lemma (Qux)",
+ None,
+ Range::new_simple(18, 0, 20, 11),
+ Range::new_simple(18, 0, 20, 11),
+ );
+}
diff --git a/support/texlab/tests/integration/folding.rs b/support/texlab/tests/integration/folding.rs
new file mode 100644
index 0000000000..3540e2c680
--- /dev/null
+++ b/support/texlab/tests/integration/folding.rs
@@ -0,0 +1,126 @@
+use indoc::indoc;
+use texlab::{
+ protocol::{FoldingRange, FoldingRangeKind},
+ test::{TestBedBuilder, PULL_CAPABILITIES},
+};
+
+#[tokio::test]
+async fn empty_latex_document() {
+ let mut test_bed = TestBedBuilder::new().file("main.tex", "").build().await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_foldings = test_bed.folding_range("main.tex").await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert!(actual_foldings.is_empty());
+}
+
+#[tokio::test]
+async fn empty_bibtex_document() {
+ let mut test_bed = TestBedBuilder::new().file("main.bib", "").build().await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_foldings = test_bed.folding_range("main.bib").await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert!(actual_foldings.is_empty());
+}
+
+#[tokio::test]
+async fn latex_sections_with_env() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \begin{document}
+ \section{Foo}
+ Foo
+ \section{Bar}
+ Bar
+ \end{document}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_foldings = test_bed.folding_range("main.tex").await.unwrap();
+
+ test_bed.shutdown().await;
+
+ let expected_foldings = vec![
+ FoldingRange {
+ start_line: 0,
+ start_character: Some(16),
+ end_line: 5,
+ end_character: Some(0),
+ kind: Some(FoldingRangeKind::Region),
+ },
+ FoldingRange {
+ start_line: 1,
+ start_character: Some(13),
+ end_line: 2,
+ end_character: Some(0),
+ kind: Some(FoldingRangeKind::Region),
+ },
+ ];
+ assert_eq!(actual_foldings, expected_foldings);
+}
+
+#[tokio::test]
+async fn bibtex_entry() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @article{foo,
+ author = {Foo Bar},
+ title = {Baz Qux},
+ }
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_foldings = test_bed.folding_range("main.bib").await.unwrap();
+
+ test_bed.shutdown().await;
+
+ let expected_foldings = vec![FoldingRange {
+ start_line: 0,
+ start_character: Some(0),
+ end_line: 3,
+ end_character: Some(1),
+ kind: Some(FoldingRangeKind::Region),
+ }];
+ assert_eq!(actual_foldings, expected_foldings);
+}
+
+#[tokio::test]
+async fn unknown_file() {
+ let mut test_bed = TestBedBuilder::new().build().await;
+
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+
+ let actual_foldings = test_bed.folding_range("main.tex").await;
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_foldings, None);
+}
diff --git a/support/texlab/tests/integration/highlight.rs b/support/texlab/tests/integration/highlight.rs
new file mode 100644
index 0000000000..ba77a7b8e3
--- /dev/null
+++ b/support/texlab/tests/integration/highlight.rs
@@ -0,0 +1,83 @@
+use indoc::indoc;
+use texlab::{
+ protocol::{DocumentHighlight, DocumentHighlightKind, Range, RangeExt},
+ test::{TestBedBuilder, PULL_CAPABILITIES},
+};
+
+#[tokio::test]
+async fn empty_latex_document() {
+ let mut test_bed = TestBedBuilder::new().file("main.tex", "").build().await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_highlights = test_bed.document_highlight("main.tex", 0, 0).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert!(actual_highlights.is_empty());
+}
+
+#[tokio::test]
+async fn empty_bibtex_document() {
+ let mut test_bed = TestBedBuilder::new().file("main.bib", "").build().await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_highlights = test_bed.document_highlight("main.bib", 0, 0).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert!(actual_highlights.is_empty());
+}
+
+#[tokio::test]
+async fn label() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \label{foo}
+ \ref{foo}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_highlights = test_bed.document_highlight("main.tex", 0, 7).await.unwrap();
+
+ let expected_highlights = vec![
+ DocumentHighlight {
+ range: Range::new_simple(0, 7, 0, 10),
+ kind: Some(DocumentHighlightKind::Write),
+ },
+ DocumentHighlight {
+ range: Range::new_simple(1, 5, 1, 8),
+ kind: Some(DocumentHighlightKind::Read),
+ },
+ ];
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_highlights, expected_highlights);
+}
+
+#[tokio::test]
+async fn unknown_file() {
+ let mut test_bed = TestBedBuilder::new().build().await;
+
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+
+ let actual_highlights = test_bed.document_highlight("main.tex", 0, 0).await;
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_highlights, None);
+}
diff --git a/support/texlab/tests/integration/hover.rs b/support/texlab/tests/integration/hover.rs
new file mode 100644
index 0000000000..319ebcc5e9
--- /dev/null
+++ b/support/texlab/tests/integration/hover.rs
@@ -0,0 +1,86 @@
+use indoc::indoc;
+use texlab::{
+ protocol::{HoverContents, MarkupContent, MarkupKind},
+ test::{TestBedBuilder, PULL_CAPABILITIES},
+};
+
+#[tokio::test]
+async fn label_theorem_child_file() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ \newtheorem{lemma}{Lemma}
+ \include{child}
+ \ref{thm:foo}
+ "#
+ ),
+ )
+ .file(
+ "child.tex",
+ indoc!(
+ r#"
+ \begin{lemma}\label{thm:foo}
+ 1 + 1 = 2
+ \end{lemma}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_hover = test_bed.hover("main.tex", 3, 8).await.unwrap().unwrap();
+ assert_eq!(
+ actual_hover.contents,
+ HoverContents::Markup(MarkupContent {
+ kind: MarkupKind::PlainText,
+ value: "Lemma".into()
+ })
+ );
+}
+
+#[tokio::test]
+async fn label_theorem_child_file_number() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ \newtheorem{lemma}{Lemma}
+ \include{child}
+ \ref{thm:foo}
+ "#
+ ),
+ )
+ .file(
+ "child.tex",
+ indoc!(
+ r#"
+ \begin{lemma}[Foo]\label{thm:foo}
+ 1 + 1 = 2
+ \end{lemma}
+ "#
+ ),
+ )
+ .file("child.aux", r#"\newlabel{thm:foo}{{1}{1}{Foo}{lemma.1}{}}"#)
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_hover = test_bed.hover("main.tex", 3, 8).await.unwrap().unwrap();
+ assert_eq!(
+ actual_hover.contents,
+ HoverContents::Markup(MarkupContent {
+ kind: MarkupKind::PlainText,
+ value: "Lemma 1 (Foo)".into()
+ })
+ );
+}
diff --git a/support/texlab/tests/integration/issues.rs b/support/texlab/tests/integration/issues.rs
new file mode 100644
index 0000000000..59a1bfeacb
--- /dev/null
+++ b/support/texlab/tests/integration/issues.rs
@@ -0,0 +1,350 @@
+use indoc::indoc;
+use texlab::{
+ protocol::{HoverContents, Location, LocationLink, MarkupContent, MarkupKind, Range, RangeExt},
+ test::{TestBedBuilder, LOCATION_LINK_CAPABILITIES, PULL_CAPABILITIES},
+};
+
+#[tokio::test]
+async fn issue_14() {
+ let mut test_bed = TestBedBuilder::new()
+ .file("main.tex", r#"\(\be\)"#)
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_items = test_bed.completion("main.tex", 0, 5).await.unwrap();
+
+ test_bed.shutdown().await;
+ assert!(actual_items.iter().any(|item| item.label == "beta"));
+}
+
+#[tokio::test]
+async fn issue_15_link() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ \begin{document}
+ \newcommand{\test}{test}
+ hello \test{}
+ \end{document}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed
+ .initialize(LOCATION_LINK_CAPABILITIES.clone())
+ .await;
+ test_bed.open("main.tex").await;
+
+ let actual_links = test_bed.definition_link("main.tex", 3, 9).await.unwrap();
+
+ test_bed.shutdown().await;
+ let expected_links = vec![LocationLink {
+ origin_selection_range: Some(Range::new_simple(3, 6, 3, 13)),
+ target_range: Range::new_simple(2, 0, 2, 24),
+ target_selection_range: Range::new_simple(2, 0, 2, 24),
+ target_uri: test_bed.uri("main.tex").into(),
+ }];
+ assert_eq!(actual_links, expected_links);
+}
+
+#[tokio::test]
+async fn issue_15_location() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ \begin{document}
+ \newcommand{\test}{test}
+ hello \test{}
+ \end{document}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_locations = test_bed
+ .definition_location("main.tex", 3, 9)
+ .await
+ .unwrap();
+
+ test_bed.shutdown().await;
+ let expected_locations = vec![Location {
+ range: Range::new_simple(2, 0, 2, 24),
+ uri: test_bed.uri("main.tex").into(),
+ }];
+ assert_eq!(actual_locations, expected_locations);
+}
+
+#[tokio::test]
+async fn issue_17() {
+ let mut test_bed = TestBedBuilder::new()
+ .file("main.bib", r#"@ARTICLE{foo,}"#)
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_hover = test_bed.hover("main.bib", 0, 3).await.unwrap().unwrap();
+
+ test_bed.shutdown().await;
+ assert_eq!(actual_hover.range.unwrap(), Range::new_simple(0, 0, 0, 8));
+}
+
+#[tokio::test]
+async fn issue_21() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \label{foo}
+ \cref{}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_items = test_bed.completion("main.tex", 1, 6).await.unwrap();
+
+ test_bed.shutdown().await;
+ assert!(actual_items.iter().any(|item| item.label == "foo"));
+}
+
+#[tokio::test]
+async fn issue_22_include() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \bibliography{bibfile}
+ \cite{}
+ "#
+ ),
+ )
+ .file("bibfile.bib", r#"@article{foo,}"#)
+ .build()
+ .await;
+
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_items = test_bed.completion("main.tex", 1, 6).await.unwrap();
+
+ test_bed.shutdown().await;
+ assert!(actual_items.iter().any(|item| item.label == "foo"));
+}
+
+#[tokio::test]
+async fn issue_22_definition() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \bibliography{bibfile}
+ \cite{A,B}
+ "#
+ ),
+ )
+ .file(
+ "bibfile.bib",
+ indoc!(
+ r#"
+ @article{A,}
+ @article{B,}
+ "#
+ ),
+ )
+ .build()
+ .await;
+
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_locations = test_bed
+ .definition_location("main.tex", 1, 8)
+ .await
+ .unwrap();
+
+ test_bed.shutdown().await;
+ let expected_locations = vec![Location {
+ range: Range::new_simple(1, 9, 1, 10),
+ uri: test_bed.uri("bibfile.bib").into(),
+ }];
+ assert_eq!(actual_locations, expected_locations);
+}
+
+#[tokio::test]
+async fn issue_23_completion() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ \begin{document}
+ \include{test1}
+ \include{test2}
+ \end{document}
+ "#
+ ),
+ )
+ .file("test1.tex", r#"\section{Section 1}\label{sec:1}"#)
+ .file(
+ "test2.tex",
+ indoc!(
+ r#"
+ \section{Section 2}\label{sec:2}
+ %
+ This section continues from Section \ref{sec}"#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("test2.tex").await;
+ test_bed.detect_root("test2.tex").await;
+
+ let actual_items = test_bed.completion("test2.tex", 2, 42).await.unwrap();
+
+ test_bed.shutdown().await;
+ assert_eq!(actual_items.len(), 2);
+}
+
+#[tokio::test]
+async fn issue_23_rename() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ \begin{document}
+ \include{test1}
+ \include{test2}
+ \end{document}
+ "#
+ ),
+ )
+ .file("test1.tex", r#"\section{Section 1}\label{sec:1}"#)
+ .file(
+ "test2.tex",
+ indoc!(
+ r#"
+ \section{Section 2}\label{sec:2}
+ %
+ This section continues from Section \ref{sec:1}"#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("test1.tex").await;
+ test_bed.detect_root("test1.tex").await;
+
+ let workspace_edit = test_bed
+ .rename("test1.tex", 0, 27, "foo")
+ .await
+ .unwrap()
+ .unwrap();
+
+ test_bed.shutdown().await;
+ let changes = workspace_edit.changes.unwrap();
+ assert!(changes.contains_key(&test_bed.uri("test1.tex")));
+ assert!(changes.contains_key(&test_bed.uri("test2.tex")));
+}
+
+#[tokio::test]
+async fn issue_23_hover() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ \begin{document}
+ \include{test1}
+ \include{test2}
+ \end{document}
+ "#
+ ),
+ )
+ .file("test1.tex", r#"\section{Section 1}\label{sec:1}"#)
+ .file(
+ "test2.tex",
+ indoc!(
+ r#"
+ \section{Section 2}\label{sec:2}
+ %
+ This section continues from Section \ref{sec:1}"#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("test2.tex").await;
+ test_bed.detect_root("test2.tex").await;
+
+ let actual_hover = test_bed.hover("test2.tex", 2, 42).await.unwrap().unwrap();
+
+ test_bed.shutdown().await;
+ assert_eq!(
+ actual_hover.contents,
+ HoverContents::Markup(MarkupContent {
+ kind: MarkupKind::PlainText,
+ value: "Section (Section 1)".into()
+ })
+ );
+}
+
+#[tokio::test]
+async fn issue_26() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \section{Foo}\label{sec:foo}
+ \begin{equation}\label{eq:bar}
+ \end{equation}
+ \eqref{}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_items = test_bed.completion("main.tex", 3, 7).await.unwrap();
+
+ test_bed.shutdown().await;
+ assert!(actual_items.iter().any(|item| item.label == "eq:bar"));
+ assert!(actual_items.iter().all(|item| item.label != "sec:foo"));
+}
diff --git a/support/texlab/tests/integration/link.rs b/support/texlab/tests/integration/link.rs
new file mode 100644
index 0000000000..8db718bd26
--- /dev/null
+++ b/support/texlab/tests/integration/link.rs
@@ -0,0 +1,173 @@
+use indoc::indoc;
+use texlab::{
+ protocol::{DocumentLink, Range, RangeExt},
+ test::{TestBedBuilder, PULL_CAPABILITIES, PUSH_CAPABILITIES},
+};
+
+#[tokio::test]
+async fn empty_latex_document() {
+ let mut test_bed = TestBedBuilder::new().file("main.tex", "").build().await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_links = test_bed.document_link("main.tex").await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert!(actual_links.is_empty());
+}
+
+#[tokio::test]
+async fn default_settings() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \include{foo/bar}
+ \input{qux.tex}
+ "#
+ ),
+ )
+ .file("foo/bar.tex", "")
+ .file("qux.tex", "")
+ .build()
+ .await;
+
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_links = test_bed.document_link("main.tex").await.unwrap();
+
+ test_bed.shutdown().await;
+
+ let expected_links = vec![
+ DocumentLink {
+ range: Range::new_simple(0, 9, 0, 16),
+ target: test_bed.uri("foo/bar.tex").into(),
+ tooltip: None,
+ },
+ DocumentLink {
+ range: Range::new_simple(1, 7, 1, 14),
+ target: test_bed.uri("qux.tex").into(),
+ tooltip: None,
+ },
+ ];
+ assert_eq!(actual_links, expected_links);
+}
+
+#[tokio::test]
+async fn root_directory() {
+ let mut test_bed = TestBedBuilder::new()
+ .file("src/main.tex", r#"\include{src/foo}"#)
+ .file("src/foo.tex", "")
+ .root_dir(".")
+ .build()
+ .await;
+
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("src/main.tex").await;
+
+ let actual_links = test_bed.document_link("src/main.tex").await.unwrap();
+
+ test_bed.shutdown().await;
+
+ let expected_links = vec![DocumentLink {
+ range: Range::new_simple(0, 9, 0, 16),
+ target: test_bed.uri("src/foo.tex").into(),
+ tooltip: None,
+ }];
+ assert_eq!(actual_links, expected_links);
+}
+
+#[tokio::test]
+async fn parent_directory() {
+ let mut test_bed = TestBedBuilder::new()
+ .file("src/main.tex", r#"\addbibresource{../foo.bib}"#)
+ .file("foo.bib", "")
+ .build()
+ .await;
+
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("src/main.tex").await;
+
+ let actual_links = test_bed.document_link("src/main.tex").await.unwrap();
+
+ test_bed.shutdown().await;
+
+ let expected_links = vec![DocumentLink {
+ range: Range::new_simple(0, 16, 0, 26),
+ target: test_bed.uri("foo.bib").into(),
+ tooltip: None,
+ }];
+ assert_eq!(actual_links, expected_links);
+}
+
+#[tokio::test]
+async fn unknown_file() {
+ let mut test_bed = TestBedBuilder::new().build().await;
+
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+
+ let actual_links = test_bed.document_link("main.tex").await;
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_links, None);
+}
+
+#[tokio::test]
+async fn edit_file() {
+ let mut test_bed = TestBedBuilder::new()
+ .file("main.tex", "")
+ .file("foo.tex", "")
+ .build()
+ .await;
+
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+ test_bed.edit("main.tex", r#"\include{foo}"#).await;
+
+ let actual_links = test_bed.document_link("main.tex").await.unwrap();
+
+ test_bed.shutdown().await;
+
+ let expected_links = vec![DocumentLink {
+ range: Range::new_simple(0, 9, 0, 12),
+ target: test_bed.uri("foo.tex").into(),
+ tooltip: None,
+ }];
+ assert_eq!(actual_links, expected_links);
+}
+
+#[tokio::test]
+async fn did_change_configuration() {
+ let mut test_bed = TestBedBuilder::new()
+ .file("src/main.tex", r#"\include{src/foo}"#)
+ .file("src/foo.tex", "")
+ .root_dir(".")
+ .build()
+ .await;
+
+ test_bed.spawn();
+ test_bed.initialize(PUSH_CAPABILITIES.clone()).await;
+ test_bed.open("src/main.tex").await;
+ test_bed.push_options().await;
+
+ let actual_links = test_bed.document_link("src/main.tex").await.unwrap();
+
+ test_bed.shutdown().await;
+
+ let expected_links = vec![DocumentLink {
+ range: Range::new_simple(0, 9, 0, 16),
+ target: test_bed.uri("src/foo.tex").into(),
+ tooltip: None,
+ }];
+ assert_eq!(actual_links, expected_links);
+}
diff --git a/support/texlab/tests/integration/main.rs b/support/texlab/tests/integration/main.rs
new file mode 100644
index 0000000000..99c0b23a5c
--- /dev/null
+++ b/support/texlab/tests/integration/main.rs
@@ -0,0 +1,12 @@
+mod completion;
+mod definition;
+mod document_symbol;
+mod folding;
+mod highlight;
+mod hover;
+mod issues;
+mod link;
+mod prepare_rename;
+mod reference;
+mod rename;
+mod workspace_symbol;
diff --git a/support/texlab/tests/integration/prepare_rename.rs b/support/texlab/tests/integration/prepare_rename.rs
new file mode 100644
index 0000000000..0efaa712b2
--- /dev/null
+++ b/support/texlab/tests/integration/prepare_rename.rs
@@ -0,0 +1,151 @@
+use texlab::{
+ protocol::{Range, RangeExt},
+ test::{TestBedBuilder, PULL_CAPABILITIES},
+};
+
+#[tokio::test]
+async fn empty_latex_document() {
+ let mut test_bed = TestBedBuilder::new().file("main.tex", "").build().await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_range = test_bed.prepare_rename("main.tex", 0, 0).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_range, None);
+}
+
+#[tokio::test]
+async fn empty_bibtex_document() {
+ let mut test_bed = TestBedBuilder::new().file("main.bib", "").build().await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_range = test_bed.prepare_rename("main.bib", 0, 0).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_range, None);
+}
+
+#[tokio::test]
+async fn bibtex_entry() {
+ let mut test_bed = TestBedBuilder::new()
+ .file("main.bib", r#"@article{foo,}"#)
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_range = test_bed
+ .prepare_rename("main.bib", 0, 10)
+ .await
+ .unwrap()
+ .unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_range, Range::new_simple(0, 9, 0, 12));
+}
+
+#[tokio::test]
+async fn latex_citation() {
+ let mut test_bed = TestBedBuilder::new()
+ .file("main.tex", r#"\cite{foo,bar}"#)
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_range = test_bed
+ .prepare_rename("main.tex", 0, 11)
+ .await
+ .unwrap()
+ .unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_range, Range::new_simple(0, 10, 0, 13));
+}
+
+#[tokio::test]
+async fn latex_command() {
+ let mut test_bed = TestBedBuilder::new()
+ .file("main.tex", r#"\foo"#)
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_range = test_bed
+ .prepare_rename("main.tex", 0, 1)
+ .await
+ .unwrap()
+ .unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_range, Range::new_simple(0, 0, 0, 4));
+}
+
+#[tokio::test]
+async fn latex_environment() {
+ let mut test_bed = TestBedBuilder::new()
+ .file("main.tex", r#"\begin{foo}\end{bar}"#)
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_range = test_bed
+ .prepare_rename("main.tex", 0, 7)
+ .await
+ .unwrap()
+ .unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_range, Range::new_simple(0, 7, 0, 10));
+}
+
+#[tokio::test]
+async fn latex_label() {
+ let mut test_bed = TestBedBuilder::new()
+ .file("main.tex", r#"\ref{foo,bar}"#)
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_range = test_bed
+ .prepare_rename("main.tex", 0, 9)
+ .await
+ .unwrap()
+ .unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_range, Range::new_simple(0, 9, 0, 12));
+}
+
+#[tokio::test]
+async fn unknown_file() {
+ let mut test_bed = TestBedBuilder::new().build().await;
+
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+
+ let actual_range = test_bed.prepare_rename("main.tex", 0, 0).await;
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_range, None);
+}
diff --git a/support/texlab/tests/integration/reference.rs b/support/texlab/tests/integration/reference.rs
new file mode 100644
index 0000000000..224f85fbfc
--- /dev/null
+++ b/support/texlab/tests/integration/reference.rs
@@ -0,0 +1,150 @@
+use indoc::indoc;
+use texlab::{
+ protocol::{Location, Range, RangeExt},
+ test::{TestBedBuilder, PULL_CAPABILITIES},
+};
+
+#[tokio::test]
+async fn empty_latex_document() {
+ let mut test_bed = TestBedBuilder::new().file("main.tex", "").build().await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_refs = test_bed.references("main.tex", 0, 0, false).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert!(actual_refs.is_empty());
+}
+
+#[tokio::test]
+async fn empty_bibtex_document() {
+ let mut test_bed = TestBedBuilder::new().file("main.bib", "").build().await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_refs = test_bed.references("main.bib", 0, 0, false).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert!(actual_refs.is_empty());
+}
+
+#[tokio::test]
+async fn bibtex_entry() {
+ let mut test_bed = TestBedBuilder::new()
+ .file("main.bib", r#"@article{foo,}"#)
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \addbibresource{main.bib}
+ \cite{foo}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+ test_bed.open("main.tex").await;
+
+ let actual_refs = test_bed.references("main.tex", 1, 8, true).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ let expected_refs = vec![
+ Location {
+ uri: test_bed.uri("main.tex").into(),
+ range: Range::new_simple(1, 6, 1, 9),
+ },
+ Location {
+ uri: test_bed.uri("main.bib").into(),
+ range: Range::new_simple(0, 9, 0, 12),
+ },
+ ];
+
+ assert_eq!(actual_refs, expected_refs);
+}
+
+#[tokio::test]
+async fn bibtex_string() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @string{foo = "foo"}
+ @article{bar, author = foo # foo}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_refs = test_bed.references("main.bib", 1, 31, false).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ let expected_refs = vec![
+ Location {
+ uri: test_bed.uri("main.bib").into(),
+ range: Range::new_simple(1, 23, 1, 26),
+ },
+ Location {
+ uri: test_bed.uri("main.bib").into(),
+ range: Range::new_simple(1, 29, 1, 32),
+ },
+ ];
+
+ assert_eq!(actual_refs, expected_refs);
+}
+
+#[tokio::test]
+async fn latex_label() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \label{foo}
+ \ref{foo}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_refs = test_bed.references("main.tex", 0, 7, false).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ let expected_refs = vec![Location {
+ uri: test_bed.uri("main.tex").into(),
+ range: Range::new_simple(1, 5, 1, 8),
+ }];
+
+ assert_eq!(actual_refs, expected_refs);
+}
+
+#[tokio::test]
+async fn unknown_file() {
+ let mut test_bed = TestBedBuilder::new().build().await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+
+ let actual_refs = test_bed.references("main.tex", 0, 0, false).await;
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_refs, None);
+}
diff --git a/support/texlab/tests/integration/rename.rs b/support/texlab/tests/integration/rename.rs
new file mode 100644
index 0000000000..d8522f1ec6
--- /dev/null
+++ b/support/texlab/tests/integration/rename.rs
@@ -0,0 +1,236 @@
+use indoc::indoc;
+use std::collections::HashMap;
+use texlab::{
+ protocol::{Range, RangeExt, TextEdit, WorkspaceEdit},
+ test::{TestBedBuilder, PULL_CAPABILITIES},
+};
+
+#[tokio::test]
+async fn empty_latex_document() {
+ let mut test_bed = TestBedBuilder::new().file("main.tex", "").build().await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_edit = test_bed.rename("main.tex", 0, 0, "").await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_edit, None);
+}
+
+#[tokio::test]
+async fn empty_bibtex_document() {
+ let mut test_bed = TestBedBuilder::new().file("main.bib", "").build().await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+
+ let actual_edit = test_bed.rename("main.bib", 0, 0, "").await.unwrap();
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_edit, None);
+}
+
+#[tokio::test]
+async fn bibtex_entry() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.bib",
+ indoc!(
+ r#"
+ @article{foo,}
+ @article{bar,}
+ "#
+ ),
+ )
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \addbibresource{main.bib}
+ \cite{foo,bar}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.bib").await;
+ test_bed.open("main.tex").await;
+
+ let actual_edit = test_bed
+ .rename("main.bib", 1, 10, "baz")
+ .await
+ .unwrap()
+ .unwrap();
+
+ test_bed.shutdown().await;
+
+ let mut expected_changes = HashMap::new();
+ expected_changes.insert(
+ test_bed.uri("main.bib").into(),
+ vec![TextEdit::new(Range::new_simple(1, 9, 1, 12), "baz".into())],
+ );
+ expected_changes.insert(
+ test_bed.uri("main.tex").into(),
+ vec![TextEdit::new(Range::new_simple(1, 10, 1, 13), "baz".into())],
+ );
+
+ assert_eq!(actual_edit, WorkspaceEdit::new(expected_changes));
+}
+
+#[tokio::test]
+async fn latex_command() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \input{bar.tex}
+ \foo
+ "#
+ ),
+ )
+ .file(
+ "bar.tex",
+ indoc!(
+ r#"
+ \foo
+ \bar
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("foo.tex").await;
+ test_bed.open("bar.tex").await;
+
+ let actual_edit = test_bed
+ .rename("foo.tex", 1, 2, "baz")
+ .await
+ .unwrap()
+ .unwrap();
+
+ test_bed.shutdown().await;
+
+ let mut expected_changes = HashMap::new();
+ expected_changes.insert(
+ test_bed.uri("foo.tex").into(),
+ vec![TextEdit::new(Range::new_simple(1, 0, 1, 4), "\\baz".into())],
+ );
+ expected_changes.insert(
+ test_bed.uri("bar.tex").into(),
+ vec![TextEdit::new(Range::new_simple(0, 0, 0, 4), "\\baz".into())],
+ );
+
+ assert_eq!(actual_edit, WorkspaceEdit::new(expected_changes));
+}
+
+#[tokio::test]
+async fn latex_environment() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "main.tex",
+ indoc!(
+ r#"
+ \begin{foo}
+ \begin{bar}
+ Baz
+ \end{bar}
+ \end{foo}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("main.tex").await;
+
+ let actual_edit = test_bed
+ .rename("main.tex", 3, 11, "baz")
+ .await
+ .unwrap()
+ .unwrap();
+
+ test_bed.shutdown().await;
+
+ let mut expected_changes = HashMap::new();
+ expected_changes.insert(
+ test_bed.uri("main.tex").into(),
+ vec![
+ TextEdit::new(Range::new_simple(1, 11, 1, 14), "baz".into()),
+ TextEdit::new(Range::new_simple(3, 9, 3, 12), "baz".into()),
+ ],
+ );
+
+ assert_eq!(actual_edit, WorkspaceEdit::new(expected_changes));
+}
+
+#[tokio::test]
+async fn latex_label() {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \input{bar.tex}
+ \ref{foo,bar}
+ "#
+ ),
+ )
+ .file(
+ "bar.tex",
+ indoc!(
+ r#"
+ \label{foo}
+ \label{bar}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("foo.tex").await;
+ test_bed.open("bar.tex").await;
+
+ let actual_edit = test_bed
+ .rename("foo.tex", 1, 10, "baz")
+ .await
+ .unwrap()
+ .unwrap();
+
+ test_bed.shutdown().await;
+
+ let mut expected_changes = HashMap::new();
+ expected_changes.insert(
+ test_bed.uri("foo.tex").into(),
+ vec![TextEdit::new(Range::new_simple(1, 9, 1, 12), "baz".into())],
+ );
+ expected_changes.insert(
+ test_bed.uri("bar.tex").into(),
+ vec![TextEdit::new(Range::new_simple(1, 7, 1, 10), "baz".into())],
+ );
+
+ assert_eq!(actual_edit, WorkspaceEdit::new(expected_changes));
+}
+
+#[tokio::test]
+async fn unknown_file() {
+ let mut test_bed = TestBedBuilder::new().build().await;
+
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+
+ let actual_edit = test_bed.rename("main.tex", 0, 0, "").await;
+
+ test_bed.shutdown().await;
+
+ assert_eq!(actual_edit, None);
+}
diff --git a/support/texlab/tests/integration/workspace_symbol.rs b/support/texlab/tests/integration/workspace_symbol.rs
new file mode 100644
index 0000000000..5eb8e1ace7
--- /dev/null
+++ b/support/texlab/tests/integration/workspace_symbol.rs
@@ -0,0 +1,228 @@
+use indoc::indoc;
+use texlab::{
+ protocol::{Location, Range, RangeExt, SymbolInformation, WorkspaceSymbolParams},
+ test::{TestBed, TestBedBuilder, TestLspClient, PULL_CAPABILITIES},
+};
+
+pub fn verify_symbol_info(
+ symbol: &SymbolInformation,
+ test_bed: &TestBed,
+ relative_path: &str,
+ name: &str,
+ start_line: u64,
+ start_character: u64,
+ end_line: u64,
+ end_character: u64,
+) {
+ assert_eq!(symbol.name, name);
+ let range = Range::new_simple(start_line, start_character, end_line, end_character);
+ assert_eq!(
+ symbol.location,
+ Location::new(test_bed.uri(relative_path).into(), range)
+ );
+}
+
+async fn run(query: &str) -> (TestBed, Vec<SymbolInformation>) {
+ let mut test_bed = TestBedBuilder::new()
+ .file(
+ "foo.tex",
+ indoc!(
+ r#"
+ \documentclass{article}
+ \usepackage{caption}
+ \usepackage{amsmath}
+ \usepackage{amsthm}
+ %
+ \begin{document}
+ %
+ \section{Foo}\label{sec:foo}
+ %
+ \begin{equation}\label{eq:foo}
+ Foo
+ \end{equation}
+ %
+ \section{Bar}\label{sec:bar}
+ %
+ \begin{figure}
+ Bar
+ \caption{Bar}
+ \label{fig:bar}
+ \end{figure}
+ %
+ \section{Baz}\label{sec:baz}
+ %
+ \begin{enumerate}
+ \item\label{itm:foo} Foo
+ \item\label{itm:bar} Bar
+ \item\label{itm:baz} Baz
+ \end{enumerate}
+ %
+ \section{Qux}\label{sec:qux}
+ %
+ \newtheorem{lemma}{Lemma}
+ %
+ \begin{lemma}[Qux]\label{thm:qux}
+ Qux
+ \end{lemma}
+ %
+ \end{document}
+ "#
+ ),
+ )
+ .file(
+ "foo.aux",
+ indoc!(
+ r#"
+ \relax
+ \@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Bar\relax }}{1}\protected@file@percent }
+ \providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
+ \newlabel{fig:bar}{{1}{1}}
+ \@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}\protected@file@percent }
+ \newlabel{sec:foo}{{1}{1}}
+ \newlabel{eq:foo}{{1}{1}}
+ \@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{1}\protected@file@percent }
+ \newlabel{sec:bar}{{2}{1}}
+ \@writefile{toc}{\contentsline {section}{\numberline {3}Baz}{1}\protected@file@percent }
+ \newlabel{sec:baz}{{3}{1}}
+ \newlabel{itm:foo}{{1}{1}}
+ \newlabel{itm:bar}{{2}{1}}
+ \newlabel{itm:baz}{{3}{1}}
+ \@writefile{toc}{\contentsline {section}{\numberline {4}Qux}{1}\protected@file@percent }
+ \newlabel{sec:qux}{{4}{1}}
+ \newlabel{thm:qux}{{1}{1}}
+ "#
+ ),
+ )
+ .file(
+ "bar.bib",
+ indoc!(
+ r#"
+ @article{foo,}
+ %
+ @string{bar = "bar"}
+ "#
+ ),
+ )
+ .build()
+ .await;
+ test_bed.spawn();
+ test_bed.initialize(PULL_CAPABILITIES.clone()).await;
+ test_bed.open("foo.tex").await;
+ test_bed.open("foo.aux").await;
+ test_bed.open("bar.bib").await;
+
+ let params = WorkspaceSymbolParams {
+ query: query.into(),
+ ..WorkspaceSymbolParams::default()
+ };
+ let actual_symbols = test_bed.client.workspace_symbol(params).await.unwrap();
+
+ test_bed.shutdown().await;
+
+ (test_bed, actual_symbols)
+}
+
+#[tokio::test]
+async fn filter_type_section() {
+ let (test_bed, actual_symbols) = run("section").await;
+ assert_eq!(actual_symbols.len(), 4);
+ verify_symbol_info(
+ &actual_symbols[0],
+ &test_bed,
+ "foo.tex",
+ "1 Foo",
+ 7,
+ 0,
+ 13,
+ 0,
+ );
+ verify_symbol_info(
+ &actual_symbols[1],
+ &test_bed,
+ "foo.tex",
+ "2 Bar",
+ 13,
+ 0,
+ 21,
+ 0,
+ );
+ verify_symbol_info(
+ &actual_symbols[2],
+ &test_bed,
+ "foo.tex",
+ "3 Baz",
+ 21,
+ 0,
+ 29,
+ 0,
+ );
+ verify_symbol_info(
+ &actual_symbols[3],
+ &test_bed,
+ "foo.tex",
+ "4 Qux",
+ 29,
+ 0,
+ 37,
+ 0,
+ );
+}
+
+#[tokio::test]
+async fn filter_type_figure() {
+ let (test_bed, actual_symbols) = run("figure").await;
+ assert_eq!(actual_symbols.len(), 1);
+ verify_symbol_info(
+ &actual_symbols[0],
+ &test_bed,
+ "foo.tex",
+ "Figure 1: Bar",
+ 15,
+ 0,
+ 19,
+ 12,
+ );
+}
+
+#[tokio::test]
+async fn filter_type_item() {
+ let (test_bed, actual_symbols) = run("item").await;
+ assert_eq!(actual_symbols.len(), 3);
+ verify_symbol_info(&actual_symbols[0], &test_bed, "foo.tex", "1", 24, 4, 25, 4);
+ verify_symbol_info(&actual_symbols[1], &test_bed, "foo.tex", "2", 25, 4, 26, 4);
+ verify_symbol_info(&actual_symbols[2], &test_bed, "foo.tex", "3", 26, 4, 27, 0);
+}
+
+#[tokio::test]
+async fn filter_type_math() {
+ let (test_bed, actual_symbols) = run("math").await;
+ assert_eq!(actual_symbols.len(), 2);
+ verify_symbol_info(
+ &actual_symbols[0],
+ &test_bed,
+ "foo.tex",
+ "Equation (1)",
+ 9,
+ 0,
+ 11,
+ 14,
+ );
+ verify_symbol_info(
+ &actual_symbols[1],
+ &test_bed,
+ "foo.tex",
+ "Lemma 1 (Qux)",
+ 33,
+ 0,
+ 35,
+ 11,
+ );
+}
+
+#[tokio::test]
+async fn filter_bibtex() {
+ let (test_bed, actual_symbols) = run("bibtex").await;
+ assert_eq!(actual_symbols.len(), 2);
+ verify_symbol_info(&actual_symbols[0], &test_bed, "bar.bib", "foo", 0, 0, 0, 14);
+ verify_symbol_info(&actual_symbols[1], &test_bed, "bar.bib", "bar", 2, 0, 2, 20);
+}
diff --git a/support/texlab/tests/logs/bad-box.log b/support/texlab/tests/logs/bad-box.log
deleted file mode 100644
index 39d13e0acd..0000000000
--- a/support/texlab/tests/logs/bad-box.log
+++ /dev/null
@@ -1,84 +0,0 @@
-This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:50
-entering extended mode
- restricted \write18 enabled.
- %&-line parsing enabled.
-**./parent.tex
-(./parent.tex
-LaTeX2e <2017-04-15>
-Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
-(/TexLive/texmf-dist/tex/latex/base/article.cls
-Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
-(/TexLive/texmf-dist/tex/latex/base/size10.clo
-File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
-)
-\c@part=\count79
-\c@section=\count80
-\c@subsection=\count81
-\c@subsubsection=\count82
-\c@paragraph=\count83
-\c@subparagraph=\count84
-\c@figure=\count85
-\c@table=\count86
-\abovecaptionskip=\skip41
-\belowcaptionskip=\skip42
-\bibindent=\dimen102
-)
-(/TexLive/texmf-dist/tex/latex/multirow/bigstrut.sty
-Package: bigstrut 2016/11/25 v2.2 Provide larger struts in tabulars
-\bigstrutjot=\dimen103
-)
-(/TexLive/texmf-dist/tex/latex/multirow/multirow.sty
-Package: multirow 2016/11/25 v2.2 Span multiple rows of a table
-\multirow@colwidth=\skip43
-\multirow@cntb=\count87
-\multirow@dima=\skip44
-) (./parent.aux)
-\openout1 = `parent.aux'.
-
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-
-Overfull \hbox (200.00162pt too wide) in paragraph at lines 8--9
-[]\OT1/cmr/m/n/10 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
- []
-
-LaTeX Font Info: External font `cmex10' loaded for size
-(Font) <7> on input line 11.
-LaTeX Font Info: External font `cmex10' loaded for size
-(Font) <5> on input line 11.
-
-Overfull \vbox (3.19998pt too high) detected at line 23
- []
-
-[1
-
-{/TexLive/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] (./parent.aux) )
-Here is how much of TeX's memory you used:
- 265 strings out of 492995
- 3121 string characters out of 6138727
- 55074 words of memory out of 5000000
- 3896 multiletter control sequences out of 15000+600000
- 3640 words of font info for 14 fonts, out of 8000000 for 9000
- 1141 hyphenation exceptions out of 8191
- 23i,20n,20p,124b,282s stack positions out of 5000i,500n,10000p,200000b,80000s
-</
-TexLive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb></TexLive/texmf-d
-ist/fonts/type1/public/amsfonts/cm/cmr7.pfb>
-Output written on parent.pdf (1 page, 17505 bytes).
-PDF statistics:
- 16 PDF objects out of 1000 (max. 8388607)
- 10 compressed objects within 1 object stream
- 0 named destinations out of 1000 (max. 500000)
- 1 words of extra memory for PDF output out of 10000 (max. 10000000)
-
diff --git a/support/texlab/tests/logs/child-error.log b/support/texlab/tests/logs/child-error.log
deleted file mode 100644
index d40d9201f4..0000000000
--- a/support/texlab/tests/logs/child-error.log
+++ /dev/null
@@ -1,65 +0,0 @@
-This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:52
-entering extended mode
- restricted \write18 enabled.
- %&-line parsing enabled.
-**./parent.tex
-(./parent.tex
-LaTeX2e <2017-04-15>
-Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
-(/TexLive/texmf-dist/tex/latex/base/article.cls
-Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
-(/TexLive/texmf-dist/tex/latex/base/size10.clo
-File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
-)
-\c@part=\count79
-\c@section=\count80
-\c@subsection=\count81
-\c@subsubsection=\count82
-\c@paragraph=\count83
-\c@subparagraph=\count84
-\c@figure=\count85
-\c@table=\count86
-\abovecaptionskip=\skip41
-\belowcaptionskip=\skip42
-\bibindent=\dimen102
-) (./parent.aux (./child.aux))
-\openout1 = `parent.aux'.
-
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-(./child.tex
-! Undefined control sequence.
-l.1 \foo
-
-The control sequence at the end of the top line
-of your error message was never \def'ed. If you have
-misspelled it (e.g., `\hobx'), type `I' and the correct
-spelling (e.g., `I\hbox'). Otherwise just continue,
-and I'll forget about whatever was undefined.
-
-) (./parent.aux) )
-Here is how much of TeX's memory you used:
- 205 strings out of 492995
- 2149 string characters out of 6138727
- 54074 words of memory out of 5000000
- 3841 multiletter control sequences out of 15000+600000
- 3640 words of font info for 14 fonts, out of 8000000 for 9000
- 1141 hyphenation exceptions out of 8191
- 23i,1n,17p,116b,36s stack positions out of 5000i,500n,10000p,200000b,80000s
-
-No pages of output.
-PDF statistics:
- 0 PDF objects out of 1000 (max. 8388607)
- 0 named destinations out of 1000 (max. 500000)
- 1 words of extra memory for PDF output out of 10000 (max. 10000000)
-
diff --git a/support/texlab/tests/logs/citation-warning.log b/support/texlab/tests/logs/citation-warning.log
deleted file mode 100644
index 0fae25fd4f..0000000000
--- a/support/texlab/tests/logs/citation-warning.log
+++ /dev/null
@@ -1,67 +0,0 @@
-This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:51
-entering extended mode
- restricted \write18 enabled.
- %&-line parsing enabled.
-**./parent.tex
-(./parent.tex
-LaTeX2e <2017-04-15>
-Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
-(/TexLive/texmf-dist/tex/latex/base/article.cls
-Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
-(/TexLive/texmf-dist/tex/latex/base/size10.clo
-File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
-)
-\c@part=\count79
-\c@section=\count80
-\c@subsection=\count81
-\c@subsubsection=\count82
-\c@paragraph=\count83
-\c@subparagraph=\count84
-\c@figure=\count85
-\c@table=\count86
-\abovecaptionskip=\skip41
-\belowcaptionskip=\skip42
-\bibindent=\dimen102
-) (./parent.aux)
-\openout1 = `parent.aux'.
-
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 4.
-LaTeX Font Info: ... okay on input line 4.
-
-
-LaTeX Warning: Citation `foo' on page 1 undefined on input line 6.
-
-[1
-
-{/TexLive/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] (./parent.aux)
-
-LaTeX Warning: There were undefined references.
-
- )
-Here is how much of TeX's memory you used:
- 204 strings out of 492995
- 2142 string characters out of 6138727
- 54074 words of memory out of 5000000
- 3842 multiletter control sequences out of 15000+600000
- 3948 words of font info for 15 fonts, out of 8000000 for 9000
- 1141 hyphenation exceptions out of 8191
- 23i,4n,21p,116b,107s stack positions out of 5000i,500n,10000p,200000b,80000s
-</TexLive/texmf-dist/fonts/type1/public/amsfonts/cm/cmbx10.pfb></TexLive/
-texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb>
-Output written on parent.pdf (1 page, 17339 bytes).
-PDF statistics:
- 16 PDF objects out of 1000 (max. 8388607)
- 10 compressed objects within 1 object stream
- 0 named destinations out of 1000 (max. 500000)
- 1 words of extra memory for PDF output out of 10000 (max. 10000000)
-
diff --git a/support/texlab/tests/logs/package-error.log b/support/texlab/tests/logs/package-error.log
deleted file mode 100644
index e79f1e851c..0000000000
--- a/support/texlab/tests/logs/package-error.log
+++ /dev/null
@@ -1,86 +0,0 @@
-This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:40
-entering extended mode
- restricted \write18 enabled.
- %&-line parsing enabled.
-**./parent.tex
-(./parent.tex
-LaTeX2e <2017-04-15>
-Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
-(/TexLive/texmf-dist/tex/latex/base/article.cls
-Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
-(/TexLive/texmf-dist/tex/latex/base/size10.clo
-File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
-)
-\c@part=\count79
-\c@section=\count80
-\c@subsection=\count81
-\c@subsubsection=\count82
-\c@paragraph=\count83
-\c@subparagraph=\count84
-\c@figure=\count85
-\c@table=\count86
-\abovecaptionskip=\skip41
-\belowcaptionskip=\skip42
-\bibindent=\dimen102
-)
-(/TexLive/texmf-dist/tex/generic/babel/babel.sty
-Package: babel 2017/05/19 3.10 The Babel package
-
-
-! Package babel Error: Unknown option `foo'. Either you misspelled it
-(babel) or the language definition file foo.ldf was not found.
-
-See the babel package documentation for explanation.
-Type H <return> for immediate help.
- ...
-
-l.393 \ProcessOptions*
-
-Valid options are: shorthands=, KeepShorthandsActive,
-activeacute, activegrave, noconfigs, safe=, main=, math=
-headfoot=, strings=, config=, hyphenmap=, or a language name.
-
-
-! Package babel Error: You haven't specified a language option.
-
-See the babel package documentation for explanation.
-Type H <return> for immediate help.
- ...
-
-l.426 ...ry to proceed from here, type x to quit.}
-
-You need to specify a language, either as a global option
-or as an optional argument to the \usepackage command;
-You shouldn't try to proceed from here, type x to quit.
-
-) (./parent.aux)
-\openout1 = `parent.aux'.
-
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 5.
-LaTeX Font Info: ... okay on input line 5.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 5.
-LaTeX Font Info: ... okay on input line 5.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 5.
-LaTeX Font Info: ... okay on input line 5.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 5.
-LaTeX Font Info: ... okay on input line 5.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 5.
-LaTeX Font Info: ... okay on input line 5.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 5.
-LaTeX Font Info: ... okay on input line 5.
- (./parent.aux) )
-Here is how much of TeX's memory you used:
- 304 strings out of 492995
- 3421 string characters out of 6138727
- 56035 words of memory out of 5000000
- 3938 multiletter control sequences out of 15000+600000
- 3640 words of font info for 14 fonts, out of 8000000 for 9000
- 1141 hyphenation exceptions out of 8191
- 23i,1n,17p,116b,36s stack positions out of 5000i,500n,10000p,200000b,80000s
-
-No pages of output.
-PDF statistics:
- 0 PDF objects out of 1000 (max. 8388607)
- 0 named destinations out of 1000 (max. 500000)
- 1 words of extra memory for PDF output out of 10000 (max. 10000000)
-
diff --git a/support/texlab/tests/logs/package-warning.log b/support/texlab/tests/logs/package-warning.log
deleted file mode 100644
index f3c4769e52..0000000000
--- a/support/texlab/tests/logs/package-warning.log
+++ /dev/null
@@ -1,387 +0,0 @@
-This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:45
-entering extended mode
- restricted \write18 enabled.
- %&-line parsing enabled.
-**./parent.tex
-(./parent.tex
-LaTeX2e <2017-04-15>
-Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
-(/TexLive/texmf-dist/tex/latex/base/article.cls
-Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
-(/TexLive/texmf-dist/tex/latex/base/size10.clo
-File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
-)
-\c@part=\count79
-\c@section=\count80
-\c@subsection=\count81
-\c@subsubsection=\count82
-\c@paragraph=\count83
-\c@subparagraph=\count84
-\c@figure=\count85
-\c@table=\count86
-\abovecaptionskip=\skip41
-\belowcaptionskip=\skip42
-\bibindent=\dimen102
-)
-(/TexLive/texmf-dist/tex/generic/babel/babel.sty
-Package: babel 2017/05/19 3.10 The Babel package
-
-(/TexLive/texmf-dist/tex/generic/babel-spanish/spanish.ldf
-Language: spanish.ldf 2016/03/03 v5.0p Spanish support from the babel system
-
-(/TexLive/texmf-dist/tex/generic/babel/babel.def
-File: babel.def 2017/05/19 3.10 Babel common definitions
-\babel@savecnt=\count87
-\U@D=\dimen103
-)
-\es@quottoks=\toks14
-\es@quotdepth=\count88
-Package babel Info: Making " an active character on input line 561.
-Package babel Info: Making . an active character on input line 662.
-Package babel Info: Making < an active character on input line 707.
-Package babel Info: Making > an active character on input line 707.
-))
-(/TexLive/texmf-dist/tex/latex/biblatex/biblatex.sty
-Package: biblatex 2016/12/05 v3.7 programmable bibliographies (PK/JW/AB)
-
-(/TexLive/texmf-dist/tex/generic/oberdiek/pdftexcmds.sty
-Package: pdftexcmds 2017/03/19 v0.25 Utility functions of pdfTeX for LuaTeX (HO
-)
-
-(/TexLive/texmf-dist/tex/generic/oberdiek/infwarerr.sty
-Package: infwarerr 2016/05/16 v1.4 Providing info/warning/error messages (HO)
-)
-(/TexLive/texmf-dist/tex/generic/oberdiek/ifluatex.sty
-Package: ifluatex 2016/05/16 v1.4 Provides the ifluatex switch (HO)
-Package ifluatex Info: LuaTeX not detected.
-)
-(/TexLive/texmf-dist/tex/generic/oberdiek/ltxcmds.sty
-Package: ltxcmds 2016/05/16 v1.23 LaTeX kernel commands for general use (HO)
-)
-(/TexLive/texmf-dist/tex/generic/oberdiek/ifpdf.sty
-Package: ifpdf 2017/03/15 v3.2 Provides the ifpdf switch
-)
-Package pdftexcmds Info: LuaTeX not detected.
-Package pdftexcmds Info: \pdf@primitive is available.
-Package pdftexcmds Info: \pdf@ifprimitive is available.
-Package pdftexcmds Info: \pdfdraftmode found.
-)
-(/TexLive/texmf-dist/tex/latex/etoolbox/etoolbox.sty
-Package: etoolbox 2017/01/02 v2.4 e-TeX tools for LaTeX (JAW)
-\etb@tempcnta=\count89
-)
-(/TexLive/texmf-dist/tex/latex/graphics/keyval.sty
-Package: keyval 2014/10/28 v1.15 key=value parser (DPC)
-\KV@toks@=\toks15
-)
-(/TexLive/texmf-dist/tex/latex/oberdiek/kvoptions.sty
-Package: kvoptions 2016/05/16 v3.12 Key value format for package options (HO)
-
-(/TexLive/texmf-dist/tex/generic/oberdiek/kvsetkeys.sty
-Package: kvsetkeys 2016/05/16 v1.17 Key value parser (HO)
-
-(/TexLive/texmf-dist/tex/generic/oberdiek/etexcmds.sty
-Package: etexcmds 2016/05/16 v1.6 Avoid name clashes with e-TeX commands (HO)
-Package etexcmds Info: Could not find \expanded.
-(etexcmds) That can mean that you are not using pdfTeX 1.50 or
-(etexcmds) that some package has redefined \expanded.
-(etexcmds) In the latter case, load this package earlier.
-)))
-(/TexLive/texmf-dist/tex/latex/logreq/logreq.sty
-Package: logreq 2010/08/04 v1.0 xml request logger
-\lrq@indent=\count90
-
-(/TexLive/texmf-dist/tex/latex/logreq/logreq.def
-File: logreq.def 2010/08/04 v1.0 logreq spec v1.0
-))
-(/TexLive/texmf-dist/tex/latex/base/ifthen.sty
-Package: ifthen 2014/09/29 v1.1c Standard LaTeX ifthen package (DPC)
-)
-(/TexLive/texmf-dist/tex/latex/url/url.sty
-\Urlmuskip=\muskip10
-Package: url 2013/09/16 ver 3.4 Verb mode for urls, etc.
-)
-(/TexLive/texmf-dist/tex/generic/xstring/xstring.sty
-(/TexLive/texmf-dist/tex/generic/xstring/xstring.tex
-\@xs@message=\write3
-\integerpart=\count91
-\decimalpart=\count92
-)
-Package: xstring 2013/10/13 v1.7c String manipulations (C Tellechea)
-)
-\c@tabx@nest=\count93
-\c@listtotal=\count94
-\c@listcount=\count95
-\c@liststart=\count96
-\c@liststop=\count97
-\c@citecount=\count98
-\c@citetotal=\count99
-\c@multicitecount=\count100
-\c@multicitetotal=\count101
-\c@instcount=\count102
-\c@maxnames=\count103
-\c@minnames=\count104
-\c@maxitems=\count105
-\c@minitems=\count106
-\c@citecounter=\count107
-\c@savedcitecounter=\count108
-\c@uniquelist=\count109
-\c@uniquename=\count110
-\c@refsection=\count111
-\c@refsegment=\count112
-\c@maxextratitle=\count113
-\c@maxextratitleyear=\count114
-\c@maxextrayear=\count115
-\c@maxextraalpha=\count116
-\c@abbrvpenalty=\count117
-\c@highnamepenalty=\count118
-\c@lownamepenalty=\count119
-\c@maxparens=\count120
-\c@parenlevel=\count121
-\blx@tempcnta=\count122
-\blx@tempcntb=\count123
-\blx@tempcntc=\count124
-\blx@maxsection=\count125
-\blx@maxsegment@0=\count126
-\blx@notetype=\count127
-\blx@parenlevel@text=\count128
-\blx@parenlevel@foot=\count129
-\blx@sectionciteorder@0=\count130
-\labelnumberwidth=\skip43
-\labelalphawidth=\skip44
-\biblabelsep=\skip45
-\bibitemsep=\skip46
-\bibnamesep=\skip47
-\bibinitsep=\skip48
-\bibparsep=\skip49
-\bibhang=\skip50
-\blx@bcfin=\read1
-\blx@bcfout=\write4
-\c@mincomprange=\count131
-\c@maxcomprange=\count132
-\c@mincompwidth=\count133
-Package biblatex Info: Trying to load biblatex default data model...
-Package biblatex Info: ... file 'blx-dm.def' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex/blx-dm.def)
-Package biblatex Info: Trying to load biblatex style data model...
-Package biblatex Info: ... file 'ieee.dbx' not found.
-Package biblatex Info: Trying to load biblatex custom data model...
-Package biblatex Info: ... file 'biblatex-dm.cfg' not found.
-\c@afterword=\count134
-\c@savedafterword=\count135
-\c@annotator=\count136
-\c@savedannotator=\count137
-\c@author=\count138
-\c@savedauthor=\count139
-\c@bookauthor=\count140
-\c@savedbookauthor=\count141
-\c@commentator=\count142
-\c@savedcommentator=\count143
-\c@editor=\count144
-\c@savededitor=\count145
-\c@editora=\count146
-\c@savededitora=\count147
-\c@editorb=\count148
-\c@savededitorb=\count149
-\c@editorc=\count150
-\c@savededitorc=\count151
-\c@foreword=\count152
-\c@savedforeword=\count153
-\c@holder=\count154
-\c@savedholder=\count155
-\c@introduction=\count156
-\c@savedintroduction=\count157
-\c@namea=\count158
-\c@savednamea=\count159
-\c@nameb=\count160
-\c@savednameb=\count161
-\c@namec=\count162
-\c@savednamec=\count163
-\c@translator=\count164
-\c@savedtranslator=\count165
-\c@shortauthor=\count166
-\c@savedshortauthor=\count167
-\c@shorteditor=\count168
-\c@savedshorteditor=\count169
-\c@labelname=\count170
-\c@savedlabelname=\count171
-\c@institution=\count172
-\c@savedinstitution=\count173
-\c@lista=\count174
-\c@savedlista=\count175
-\c@listb=\count176
-\c@savedlistb=\count177
-\c@listc=\count178
-\c@savedlistc=\count179
-\c@listd=\count180
-\c@savedlistd=\count181
-\c@liste=\count182
-\c@savedliste=\count183
-\c@listf=\count184
-\c@savedlistf=\count185
-\c@location=\count186
-\c@savedlocation=\count187
-\c@organization=\count188
-\c@savedorganization=\count189
-\c@origlocation=\count190
-\c@savedoriglocation=\count191
-\c@origpublisher=\count192
-\c@savedorigpublisher=\count193
-\c@publisher=\count194
-\c@savedpublisher=\count195
-\c@language=\count196
-\c@savedlanguage=\count197
-\c@pageref=\count198
-\c@savedpageref=\count199
-\shorthandwidth=\skip51
-\shortjournalwidth=\skip52
-\shortserieswidth=\skip53
-\shorttitlewidth=\skip54
-\shortauthorwidth=\skip55
-\shorteditorwidth=\skip56
-Package biblatex Info: Trying to load compatibility code...
-Package biblatex Info: ... file 'blx-compat.def' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex/blx-compat.def
-File: blx-compat.def 2016/12/05 v3.7 biblatex compatibility (PK/JW/AB)
-)
-Package biblatex Info: Trying to load generic definitions...
-Package biblatex Info: ... file 'biblatex.def' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex/biblatex.def
-File: biblatex.def 2016/12/05 v3.7 biblatex compatibility (PK/JW/AB)
-\c@textcitecount=\count266
-\c@textcitetotal=\count267
-\c@textcitemaxnames=\count268
-\c@biburlnumpenalty=\count269
-\c@biburlucpenalty=\count270
-\c@biburllcpenalty=\count271
-\c@smartand=\count272
-)
-Package biblatex Info: Trying to load bibliography style 'ieee'...
-Package biblatex Info: ... file 'ieee.bbx' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex-ieee/ieee.bbx
-File: ieee.bbx 2017/03/27 v1.2d biblatex bibliography style
-Package biblatex Info: Trying to load bibliography style 'numeric-comp'...
-Package biblatex Info: ... file 'numeric-comp.bbx' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex/bbx/numeric-comp.bbx
-File: numeric-comp.bbx 2016/12/05 v3.7 biblatex bibliography style (PK/JW/AB)
-Package biblatex Info: Trying to load bibliography style 'numeric'...
-Package biblatex Info: ... file 'numeric.bbx' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex/bbx/numeric.bbx
-File: numeric.bbx 2016/12/05 v3.7 biblatex bibliography style (PK/JW/AB)
-Package biblatex Info: Trying to load bibliography style 'standard'...
-Package biblatex Info: ... file 'standard.bbx' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex/bbx/standard.bbx
-File: standard.bbx 2016/12/05 v3.7 biblatex bibliography style (PK/JW/AB)
-\c@bbx:relatedcount=\count273
-\c@bbx:relatedtotal=\count274
-))))
-Package biblatex Info: Trying to load citation style 'ieee'...
-Package biblatex Info: ... file 'ieee.cbx' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex-ieee/ieee.cbx
-File: ieee.cbx 2017/03/27 v1.2d biblatex citation style
-Package biblatex Info: Trying to load citation style 'numeric-comp'...
-Package biblatex Info: ... file 'numeric-comp.cbx' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex/cbx/numeric-comp.cbx
-File: numeric-comp.cbx 2016/12/05 v3.7 biblatex citation style (PK/JW/AB)
-\c@cbx@tempcnta=\count275
-\c@cbx@tempcntb=\count276
-Package biblatex Info: Redefining '\cite'.
-Package biblatex Info: Redefining '\parencite'.
-Package biblatex Info: Redefining '\footcite'.
-Package biblatex Info: Redefining '\footcitetext'.
-Package biblatex Info: Redefining '\smartcite'.
-Package biblatex Info: Redefining '\supercite'.
-Package biblatex Info: Redefining '\textcite'.
-Package biblatex Info: Redefining '\textcites'.
-Package biblatex Info: Redefining '\cites'.
-Package biblatex Info: Redefining '\parencites'.
-Package biblatex Info: Redefining '\smartcites'.
-)
-Package biblatex Info: Redefining '\cite'.
-Package biblatex Info: Redefining '\cites'.
-)
-Package biblatex Info: Trying to load configuration file...
-Package biblatex Info: ... file 'biblatex.cfg' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex/biblatex.cfg
-File: biblatex.cfg
-))
-Package biblatex Info: Trying to load language 'spanish'...
-Package biblatex Info: ... file 'spanish.lbx' found.
-
-(/TexLive/texmf-dist/tex/latex/biblatex/lbx/spanish.lbx
-File: spanish.lbx 2016/12/05 v3.7 biblatex localization (PK/JW/AB)
-)
-
-Package biblatex Warning: 'babel/polyglossia' detected but 'csquotes' missing.
-(biblatex) Loading 'csquotes' recommended.
-
-\@quotelevel=\count277
-\@quotereset=\count278
-(./parent.aux)
-\openout1 = `parent.aux'.
-
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 6.
-LaTeX Font Info: ... okay on input line 6.
-LaTeX Info: Redefining \sptext on input line 6.
-LaTeX Info: Redefining \. on input line 6.
-LaTeX Info: Redefining \% on input line 6.
-Package biblatex Info: No input encoding detected.
-(biblatex) Assuming 'ascii'.
-Package biblatex Info: Automatic encoding selection.
-(biblatex) Assuming data encoding 'ascii'.
-\openout4 = `parent.bcf'.
-
-Package biblatex Info: Trying to load bibliographic data...
-Package biblatex Info: ... file 'parent.bbl' not found.
-
-No file parent.bbl.
-Package biblatex Info: Reference section=0 on input line 6.
-Package biblatex Info: Reference segment=0 on input line 6.
-(./parent.aux)
-
-LaTeX Warning: There were undefined references.
-
-
-Package biblatex Warning: Please (re)run Biber on the file:
-(biblatex) parent
-(biblatex) and rerun LaTeX afterwards.
-
-Package logreq Info: Writing requests to 'parent.run.xml'.
-\openout1 = `parent.run.xml'.
-
- )
-Here is how much of TeX's memory you used:
- 7717 strings out of 492995
- 133301 string characters out of 6138727
- 557258 words of memory out of 5000000
- 11248 multiletter control sequences out of 15000+600000
- 3640 words of font info for 14 fonts, out of 8000000 for 9000
- 1141 hyphenation exceptions out of 8191
- 35i,1n,30p,856b,700s stack positions out of 5000i,500n,10000p,200000b,80000s
-
-No pages of output.
-PDF statistics:
- 0 PDF objects out of 1000 (max. 8388607)
- 0 named destinations out of 1000 (max. 500000)
- 1 words of extra memory for PDF output out of 10000 (max. 10000000)
-
diff --git a/support/texlab/tests/logs/tex-error.log b/support/texlab/tests/logs/tex-error.log
deleted file mode 100644
index 33648f7f66..0000000000
--- a/support/texlab/tests/logs/tex-error.log
+++ /dev/null
@@ -1,125 +0,0 @@
-This is pdfTeX, Version 3.14159265-2.6-1.40.18 (TeX Live 2017/W32TeX) (preloaded format=pdflatex 2018.3.30) 26 DEC 2018 16:33
-entering extended mode
- restricted \write18 enabled.
- %&-line parsing enabled.
-**./parent.tex
-(./parent.tex
-LaTeX2e <2017-04-15>
-Babel <3.10> and hyphenation patterns for 84 language(s) loaded.
-(/TexLive/texmf-dist/tex/latex/base/article.cls
-Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
-(/TexLive/texmf-dist/tex/latex/base/size10.clo
-File: size10.clo 2014/09/29 v1.4h Standard LaTeX file (size option)
-)
-\c@part=\count79
-\c@section=\count80
-\c@subsection=\count81
-\c@subsubsection=\count82
-\c@paragraph=\count83
-\c@subparagraph=\count84
-\c@figure=\count85
-\c@table=\count86
-\abovecaptionskip=\skip41
-\belowcaptionskip=\skip42
-\bibindent=\dimen102
-) (./parent.aux
-(./child.tex.aux))
-\openout1 = `parent.aux'.
-
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 3.
-LaTeX Font Info: ... okay on input line 3.
-\openout2 = `child.aux'.
-
- (./child.tex)
-! Undefined control sequence.
-l.7 \foo
-
-The control sequence at the end of the top line
-of your error message was never \def'ed. If you have
-misspelled it (e.g., `\hobx'), type `I' and the correct
-spelling (e.g., `I\hbox'). Otherwise just continue,
-and I'll forget about whatever was undefined.
-
-! Missing $ inserted.
-<inserted text>
- $
-l.8 \bar
-
-I've inserted a begin-math/end-math symbol since I think
-you left one out. Proceed, with fingers crossed.
-
-LaTeX Font Info: External font `cmex10' loaded for size
-(Font) <7> on input line 8.
-LaTeX Font Info: External font `cmex10' loaded for size
-(Font) <5> on input line 8.
-! Undefined control sequence.
-l.9 \baz
-
-The control sequence at the end of the top line
-of your error message was never \def'ed. If you have
-misspelled it (e.g., `\hobx'), type `I' and the correct
-spelling (e.g., `I\hbox'). Otherwise just continue,
-and I'll forget about whatever was undefined.
-
-! Missing { inserted.
-<to be read again>
- \par
-l.10
-
-A left brace was mandatory here, so I've put one in.
-You might want to delete and/or insert some corrections
-so that I will find a matching right brace soon.
-(If you're confused by all this, try typing `I}' now.)
-
-! Missing $ inserted.
-<inserted text>
- $
-l.10
-
-I've inserted a begin-math/end-math symbol since I think
-you left one out. Proceed, with fingers crossed.
-
-! Missing } inserted.
-<inserted text>
- }
-l.10
-
-I've inserted something that you may have forgotten.
-(See the <inserted text> above.)
-With luck, this will get me unwedged. But if you
-really didn't forget anything, try typing `2' now; then
-my insertion and my current dilemma will both disappear.
-
-[1
-
-
-
-{/TexLive/texmf-var/fonts/map/pdftex/updmap/pdftex.map}] (./parent.aux
-(./child.aux)) )
-Here is how much of TeX's memory you used:
- 212 strings out of 492995
- 2238 string characters out of 6138727
- 54074 words of memory out of 5000000
- 3843 multiletter control sequences out of 15000+600000
- 3640 words of font info for 14 fonts, out of 8000000 for 9000
- 1141 hyphenation exceptions out of 8191
- 23i,4n,17p,116b,107s stack positions out of 5000i,500n,10000p,200000b,80000s
-</TexLive/texmf-dist/fonts/type1/public/amsfonts/cm/cmr10.pfb
->
-Output written on parent.pdf (1 page, 8329 bytes).
-PDF statistics:
- 12 PDF objects out of 1000 (max. 8388607)
- 7 compressed objects within 1 object stream
- 0 named destinations out of 1000 (max. 500000)
- 1 words of extra memory for PDF output out of 10000 (max. 10000000)
-
diff --git a/support/texlab/tests/scenarios/completion/bibtex/command/foo.bib b/support/texlab/tests/scenarios/completion/bibtex/command/foo.bib
deleted file mode 100644
index 918669ba68..0000000000
--- a/support/texlab/tests/scenarios/completion/bibtex/command/foo.bib
+++ /dev/null
@@ -1,7 +0,0 @@
-@article{foo,
- author = {\LaT
-}
-
-@article{foo,
- author = {\LaT}
-}
diff --git a/support/texlab/tests/scenarios/completion/bibtex/field/foo.bib b/support/texlab/tests/scenarios/completion/bibtex/field/foo.bib
deleted file mode 100644
index 6a24acd646..0000000000
--- a/support/texlab/tests/scenarios/completion/bibtex/field/foo.bib
+++ /dev/null
@@ -1,6 +0,0 @@
-@article{foo,
- titl
-
-@article{foo,
- title = {}
-} \ No newline at end of file
diff --git a/support/texlab/tests/scenarios/completion/bibtex/type/foo.bib b/support/texlab/tests/scenarios/completion/bibtex/type/foo.bib
deleted file mode 100644
index 2c645612b9..0000000000
--- a/support/texlab/tests/scenarios/completion/bibtex/type/foo.bib
+++ /dev/null
@@ -1,3 +0,0 @@
-@
-@art
-@article
diff --git a/support/texlab/tests/scenarios/completion/bibtex/word/foo.bib b/support/texlab/tests/scenarios/completion/bibtex/word/foo.bib
deleted file mode 100644
index b2b9e862db..0000000000
--- a/support/texlab/tests/scenarios/completion/bibtex/word/foo.bib
+++ /dev/null
@@ -1,8 +0,0 @@
-
-@article{foo,
- author = {},
-}
-
-@comment{foo,
- author = {},
-}
diff --git a/support/texlab/tests/scenarios/completion/latex/citation/bar.bib b/support/texlab/tests/scenarios/completion/latex/citation/bar.bib
deleted file mode 100644
index d96336de26..0000000000
--- a/support/texlab/tests/scenarios/completion/latex/citation/bar.bib
+++ /dev/null
@@ -1,7 +0,0 @@
-@article{foo:2019,
- author = {Foo Bar},
- title = {Baz Qux},
- year = {2019},
-}
-
-@article{bar:2005,}
diff --git a/support/texlab/tests/scenarios/completion/latex/citation/foo.tex b/support/texlab/tests/scenarios/completion/latex/citation/foo.tex
deleted file mode 100644
index fd75f22698..0000000000
--- a/support/texlab/tests/scenarios/completion/latex/citation/foo.tex
+++ /dev/null
@@ -1,8 +0,0 @@
-\documentclass{article}
-\bibliography{bar}
-
-\begin{document}
-
-\cite{
-
-\end{document} \ No newline at end of file
diff --git a/support/texlab/tests/scenarios/completion/latex/color/foo.tex b/support/texlab/tests/scenarios/completion/latex/color/foo.tex
deleted file mode 100644
index 72df702d12..0000000000
--- a/support/texlab/tests/scenarios/completion/latex/color/foo.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\color{re}
-\definecolor{foo}{
-\definecolorset{R}
diff --git a/support/texlab/tests/scenarios/completion/latex/component/foo.tex b/support/texlab/tests/scenarios/completion/latex/component/foo.tex
deleted file mode 100644
index 991b7f5f68..0000000000
--- a/support/texlab/tests/scenarios/completion/latex/component/foo.tex
+++ /dev/null
@@ -1,8 +0,0 @@
-\documentclass{book}
-\usepackage{amsmath}
-\chap
-\varDel
-\begin{theind}
-\end{alig}
-\begin{doc}
-\vareps
diff --git a/support/texlab/tests/scenarios/completion/latex/include/bar.tex b/support/texlab/tests/scenarios/completion/latex/include/bar.tex
deleted file mode 100644
index e69de29bb2..0000000000
--- a/support/texlab/tests/scenarios/completion/latex/include/bar.tex
+++ /dev/null
diff --git a/support/texlab/tests/scenarios/completion/latex/include/bibliography.bib b/support/texlab/tests/scenarios/completion/latex/include/bibliography.bib
deleted file mode 100644
index e69de29bb2..0000000000
--- a/support/texlab/tests/scenarios/completion/latex/include/bibliography.bib
+++ /dev/null
diff --git a/support/texlab/tests/scenarios/completion/latex/include/foo.tex b/support/texlab/tests/scenarios/completion/latex/include/foo.tex
deleted file mode 100644
index 545f78c491..0000000000
--- a/support/texlab/tests/scenarios/completion/latex/include/foo.tex
+++ /dev/null
@@ -1,7 +0,0 @@
-\documentclass{article}
-
-\include{}
-\input{}
-\input{qux/}
-\addbibresource{}
-
diff --git a/support/texlab/tests/scenarios/completion/latex/include/qux/baz.tex b/support/texlab/tests/scenarios/completion/latex/include/qux/baz.tex
deleted file mode 100644
index e69de29bb2..0000000000
--- a/support/texlab/tests/scenarios/completion/latex/include/qux/baz.tex
+++ /dev/null
diff --git a/support/texlab/tests/scenarios/completion/latex/label/bar.aux b/support/texlab/tests/scenarios/completion/latex/label/bar.aux
deleted file mode 100644
index 8d3449db60..0000000000
--- a/support/texlab/tests/scenarios/completion/latex/label/bar.aux
+++ /dev/null
@@ -1,25 +0,0 @@
-\relax
-\@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{2}\protected@file@percent }
-\newlabel{sec:bar}{{2}{2}}
-\@setckpt{bar}{
-\setcounter{page}{3}
-\setcounter{equation}{2}
-\setcounter{enumi}{0}
-\setcounter{enumii}{0}
-\setcounter{enumiii}{0}
-\setcounter{enumiv}{0}
-\setcounter{footnote}{0}
-\setcounter{mpfootnote}{0}
-\setcounter{part}{0}
-\setcounter{section}{2}
-\setcounter{subsection}{0}
-\setcounter{subsubsection}{0}
-\setcounter{paragraph}{0}
-\setcounter{subparagraph}{0}
-\setcounter{figure}{1}
-\setcounter{table}{0}
-\setcounter{parentequation}{0}
-\setcounter{caption@flags}{0}
-\setcounter{ContinuedFloat}{0}
-\setcounter{lemma}{1}
-}
diff --git a/support/texlab/tests/scenarios/completion/latex/label/bar.tex b/support/texlab/tests/scenarios/completion/latex/label/bar.tex
deleted file mode 100644
index 97dea2908f..0000000000
--- a/support/texlab/tests/scenarios/completion/latex/label/bar.tex
+++ /dev/null
@@ -1,6 +0,0 @@
-\section{Bar}%
-\label{sec:bar}
-
-Lorem ipsum dolor sit amet.
-\ref{}
-\eqref{}
diff --git a/support/texlab/tests/scenarios/completion/latex/label/foo.aux b/support/texlab/tests/scenarios/completion/latex/label/foo.aux
deleted file mode 100644
index cc82940c6b..0000000000
--- a/support/texlab/tests/scenarios/completion/latex/label/foo.aux
+++ /dev/null
@@ -1,10 +0,0 @@
-\relax
-\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Baz\relax }}{1}\protected@file@percent }
-\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
-\newlabel{fig:baz}{{1}{1}}
-\@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}\protected@file@percent }
-\newlabel{sec:foo}{{1}{1}}
-\newlabel{eq:foo}{{1}{1}}
-\newlabel{eq:bar}{{2}{1}}
-\newlabel{thm:foo}{{1}{1}}
-\@input{bar.aux}
diff --git a/support/texlab/tests/scenarios/completion/latex/label/foo.tex b/support/texlab/tests/scenarios/completion/latex/label/foo.tex
deleted file mode 100644
index c85be2fa36..0000000000
--- a/support/texlab/tests/scenarios/completion/latex/label/foo.tex
+++ /dev/null
@@ -1,36 +0,0 @@
-\documentclass{article}
-
-\usepackage{amsmath}
-\usepackage{caption}
-\usepackage{amsthm}
-\newtheorem{lemma}{Lemma}
-
-\begin{document}
-
-\section{Foo}%
-\label{sec:foo}
-
-\begin{equation}%
-\label{eq:foo}
- 1 + 1 = 2
-\end{equation}
-
-\begin{equation}%
-\label{eq:bar}
- 1 + 1 = 2
-\end{equation}
-
-\begin{figure}%
-\LaTeX{}
-\caption{Baz}%
-\label{fig:baz}
-\end{figure}
-
-\begin{lemma}%
-\label{thm:foo}
- 1 + 1 = 2
-\end{lemma}
-
-\include{bar}
-
-\end{document}
diff --git a/support/texlab/tests/scenarios/completion/latex/preselect/foo.tex b/support/texlab/tests/scenarios/completion/latex/preselect/foo.tex
deleted file mode 100644
index 9f62299192..0000000000
--- a/support/texlab/tests/scenarios/completion/latex/preselect/foo.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\begin{document}
-
-\end{
diff --git a/support/texlab/tests/scenarios/completion/latex/theorem/foo.tex b/support/texlab/tests/scenarios/completion/latex/theorem/foo.tex
deleted file mode 100644
index 04b53ecd0e..0000000000
--- a/support/texlab/tests/scenarios/completion/latex/theorem/foo.tex
+++ /dev/null
@@ -1,5 +0,0 @@
-\documentclass{article}
-\usepackage{amsthm}
-\newtheorem{foo}{Foo}
-
-\begin{f}
diff --git a/support/texlab/tests/scenarios/completion/latex/tikz/foo.tex b/support/texlab/tests/scenarios/completion/latex/tikz/foo.tex
deleted file mode 100644
index fde20c6336..0000000000
--- a/support/texlab/tests/scenarios/completion/latex/tikz/foo.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\usepackage{tikz}
-\usepgflibrary{}
-\usetikzlibrary{}
diff --git a/support/texlab/tests/scenarios/completion/latex/user/foo.tex b/support/texlab/tests/scenarios/completion/latex/user/foo.tex
deleted file mode 100644
index e1bcaef2ab..0000000000
--- a/support/texlab/tests/scenarios/completion/latex/user/foo.tex
+++ /dev/null
@@ -1,5 +0,0 @@
-\foo
-\fo
-\begin{foo}
-\end{foo}
-\begin{fo}
diff --git a/support/texlab/tests/scenarios/definition/bibtex/string/foo.bib b/support/texlab/tests/scenarios/definition/bibtex/string/foo.bib
deleted file mode 100644
index 9326d87cdd..0000000000
--- a/support/texlab/tests/scenarios/definition/bibtex/string/foo.bib
+++ /dev/null
@@ -1,7 +0,0 @@
-@string{foo = "Foo"}
-
-@string{bar = "Bar"}
-
-@article{baz,
- author = bar
-}
diff --git a/support/texlab/tests/scenarios/definition/latex/citation/bar.bib b/support/texlab/tests/scenarios/definition/latex/citation/bar.bib
deleted file mode 100644
index af2d2d9e66..0000000000
--- a/support/texlab/tests/scenarios/definition/latex/citation/bar.bib
+++ /dev/null
@@ -1,3 +0,0 @@
-@article{foo,}
-
-@article{bar,}
diff --git a/support/texlab/tests/scenarios/definition/latex/citation/baz.bib b/support/texlab/tests/scenarios/definition/latex/citation/baz.bib
deleted file mode 100644
index af2d2d9e66..0000000000
--- a/support/texlab/tests/scenarios/definition/latex/citation/baz.bib
+++ /dev/null
@@ -1,3 +0,0 @@
-@article{foo,}
-
-@article{bar,}
diff --git a/support/texlab/tests/scenarios/definition/latex/citation/foo.tex b/support/texlab/tests/scenarios/definition/latex/citation/foo.tex
deleted file mode 100644
index a6d704b46d..0000000000
--- a/support/texlab/tests/scenarios/definition/latex/citation/foo.tex
+++ /dev/null
@@ -1,2 +0,0 @@
-\bibliography{bar}
-\cite{bar}
diff --git a/support/texlab/tests/scenarios/definition/latex/command/foo.tex b/support/texlab/tests/scenarios/definition/latex/command/foo.tex
deleted file mode 100644
index 29b8ea127e..0000000000
--- a/support/texlab/tests/scenarios/definition/latex/command/foo.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\newcommand{\foo}{Foo}
-
-\foo
diff --git a/support/texlab/tests/scenarios/definition/latex/label/default.tex b/support/texlab/tests/scenarios/definition/latex/label/default.tex
deleted file mode 100644
index 263c0e861e..0000000000
--- a/support/texlab/tests/scenarios/definition/latex/label/default.tex
+++ /dev/null
@@ -1,2 +0,0 @@
-\label{foo}
-\ref{foo}
diff --git a/support/texlab/tests/scenarios/definition/latex/label/equation.tex b/support/texlab/tests/scenarios/definition/latex/label/equation.tex
deleted file mode 100644
index 436d886457..0000000000
--- a/support/texlab/tests/scenarios/definition/latex/label/equation.tex
+++ /dev/null
@@ -1,6 +0,0 @@
-\begin{equation}%
-\label{eq:foo}
- Foo
-\end{equation}
-
-\ref{eq:foo}
diff --git a/support/texlab/tests/scenarios/definition/latex/label/float.tex b/support/texlab/tests/scenarios/definition/latex/label/float.tex
deleted file mode 100644
index 9f3cd97fae..0000000000
--- a/support/texlab/tests/scenarios/definition/latex/label/float.tex
+++ /dev/null
@@ -1,7 +0,0 @@
-\begin{figure}
-Foo
-\caption{Bar}
-\label{fig}
-\end{figure}
-
-\ref{fig}
diff --git a/support/texlab/tests/scenarios/definition/latex/label/item.tex b/support/texlab/tests/scenarios/definition/latex/label/item.tex
deleted file mode 100644
index a04034f0f8..0000000000
--- a/support/texlab/tests/scenarios/definition/latex/label/item.tex
+++ /dev/null
@@ -1,7 +0,0 @@
-\begin{enumerate}
- \item Foo
- \item\label{bar} Bar
- \item Baz
-\end{enumerate}
-
-\ref{bar}
diff --git a/support/texlab/tests/scenarios/definition/latex/label/section.tex b/support/texlab/tests/scenarios/definition/latex/label/section.tex
deleted file mode 100644
index 9dd7eeec33..0000000000
--- a/support/texlab/tests/scenarios/definition/latex/label/section.tex
+++ /dev/null
@@ -1,7 +0,0 @@
-\section{Foo}
-\label{sec:foo}
-
-\section{Bar}
-\label{sec:bar}
-
-\ref{sec:foo}
diff --git a/support/texlab/tests/scenarios/definition/latex/label/theorem.tex b/support/texlab/tests/scenarios/definition/latex/label/theorem.tex
deleted file mode 100644
index 52cac48394..0000000000
--- a/support/texlab/tests/scenarios/definition/latex/label/theorem.tex
+++ /dev/null
@@ -1,9 +0,0 @@
-\usepackage{amsthm}
-\newtheorem{lemma}{Lemma}
-
-\begin{lemma}%
-\label{thm:foo}
- Foo
-\end{lemma}
-
-\ref{thm:foo}
diff --git a/support/texlab/tests/scenarios/definition/latex/math_operator/foo.tex b/support/texlab/tests/scenarios/definition/latex/math_operator/foo.tex
deleted file mode 100644
index 1953dc269c..0000000000
--- a/support/texlab/tests/scenarios/definition/latex/math_operator/foo.tex
+++ /dev/null
@@ -1,3 +0,0 @@
-\DeclareMathOperator{\foo}{foo}
-
-\foo
diff --git a/support/texlab/tests/scenarios/diagnostics/bibtex/foo.bib b/support/texlab/tests/scenarios/diagnostics/bibtex/foo.bib
deleted file mode 100644
index 43890b16c1..0000000000
--- a/support/texlab/tests/scenarios/diagnostics/bibtex/foo.bib
+++ /dev/null
@@ -1 +0,0 @@
-@article
diff --git a/support/texlab/tests/scenarios/diagnostics/build/foo.log b/support/texlab/tests/scenarios/diagnostics/build/foo.log
deleted file mode 100644
index e51517e553..0000000000
--- a/support/texlab/tests/scenarios/diagnostics/build/foo.log
+++ /dev/null
@@ -1,59 +0,0 @@
-This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2018/Arch Linux) (preloaded format=latex 2019.4.26) 31 MAY 2019 17:55
-entering extended mode
- restricted \write18 enabled.
- %&-line parsing enabled.
-**foo.tex
-(./foo.tex
-LaTeX2e <2018-12-01>
-(/usr/share/texmf-dist/tex/latex/base/article.cls
-Document Class: article 2018/09/03 v1.4i Standard LaTeX document class
-(/usr/share/texmf-dist/tex/latex/base/size10.clo
-File: size10.clo 2018/09/03 v1.4i Standard LaTeX file (size option)
-)
-\c@part=\count80
-\c@section=\count81
-\c@subsection=\count82
-\c@subsubsection=\count83
-\c@paragraph=\count84
-\c@subparagraph=\count85
-\c@figure=\count86
-\c@table=\count87
-\abovecaptionskip=\skip41
-\belowcaptionskip=\skip42
-\bibindent=\dimen102
-) (./foo.aux)
-\openout1 = `foo.aux'.
-
-LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 2.
-LaTeX Font Info: ... okay on input line 2.
-LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 2.
-LaTeX Font Info: ... okay on input line 2.
-LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 2.
-LaTeX Font Info: ... okay on input line 2.
-LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 2.
-LaTeX Font Info: ... okay on input line 2.
-LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 2.
-LaTeX Font Info: ... okay on input line 2.
-LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 2.
-LaTeX Font Info: ... okay on input line 2.
-
-! Undefined control sequence.
-l.4 \foo
-
-The control sequence at the end of the top line
-of your error message was never \def'ed. If you have
-misspelled it (e.g., `\hobx'), type `I' and the correct
-spelling (e.g., `I\hbox'). Otherwise just continue,
-and I'll forget about whatever was undefined.
-
-(./foo.aux) )
-Here is how much of TeX's memory you used:
- 199 strings out of 492617
- 2074 string characters out of 6135203
- 59592 words of memory out of 5000000
- 4199 multiletter control sequences out of 15000+600000
- 3640 words of font info for 14 fonts, out of 8000000 for 9000
- 1141 hyphenation exceptions out of 8191
- 23i,1n,17p,127b,36s stack positions out of 5000i,500n,10000p,200000b,80000s
-
-No pages of output.
diff --git a/support/texlab/tests/scenarios/diagnostics/build/foo.tex b/support/texlab/tests/scenarios/diagnostics/build/foo.tex
deleted file mode 100644
index d8c1e22e35..0000000000
--- a/support/texlab/tests/scenarios/diagnostics/build/foo.tex
+++ /dev/null
@@ -1,6 +0,0 @@
-\documentclass{article}
-\begin{document}
-
-\foo
-
-\end{document}
diff --git a/support/texlab/tests/scenarios/folding/bar.bib b/support/texlab/tests/scenarios/folding/bar.bib
deleted file mode 100644
index a292b387fb..0000000000
--- a/support/texlab/tests/scenarios/folding/bar.bib
+++ /dev/null
@@ -1,24 +0,0 @@
-@preamble{"Foo Bar Baz"}
-
-@string{foo = "foo"}
-
-@article{Rivest:1978:MOD:359340.359342,
- author = {Rivest, R. L. and Shamir, A. and Adleman, L.},
- title = {A Method for Obtaining Digital Signatures and Public-key Cryptosystems},
- journal = {Commun. ACM},
- issue_date = {Feb. 1978},
- volume = {21},
- number = {2},
- month = feb,
- year = {1978},
- issn = {0001-0782},
- pages = {120--126},
- numpages = {7},
- url = {http://doi.acm.org/10.1145/359340.359342},
- doi = {10.1145/359340.359342},
- acmid = {359342},
- publisher = {ACM},
- address = {New York, NY, USA},
- keywords = {authentication, cryptography, digital signatures, electronic funds transfer, electronic mail,
- factorization, message-passing, prime number, privacy, public-key cryptosystems, security},
-}
diff --git a/support/texlab/tests/scenarios/folding/foo.tex b/support/texlab/tests/scenarios/folding/foo.tex
deleted file mode 100644
index a742bad397..0000000000
--- a/support/texlab/tests/scenarios/folding/foo.tex
+++ /dev/null
@@ -1,13 +0,0 @@
-\documentclass{article}
-
-\usepackage{amsmath}
-
-\begin{document}
-
-\section{Foo}
-
-\subsection{Bar}
-
-\section{Baz}
-
-\end{document}
diff --git a/support/texlab/tests/scenarios/formatting/bibtex/default/formatted.bib b/support/texlab/tests/scenarios/formatting/bibtex/default/formatted.bib
deleted file mode 100644
index 1044ed1efd..0000000000
--- a/support/texlab/tests/scenarios/formatting/bibtex/default/formatted.bib
+++ /dev/null
@@ -1,4 +0,0 @@
-@article{foo,
- author = {Foo Bar},
- title = {Baz Qux},
-} \ No newline at end of file
diff --git a/support/texlab/tests/scenarios/formatting/bibtex/default/unformatted.bib b/support/texlab/tests/scenarios/formatting/bibtex/default/unformatted.bib
deleted file mode 100644
index e8d1b9c403..0000000000
--- a/support/texlab/tests/scenarios/formatting/bibtex/default/unformatted.bib
+++ /dev/null
@@ -1 +0,0 @@
-@article{foo, author = {Foo Bar}, title = {Baz Qux}}
diff --git a/support/texlab/tests/scenarios/formatting/bibtex/infinite_line_length/formatted.bib b/support/texlab/tests/scenarios/formatting/bibtex/infinite_line_length/formatted.bib
deleted file mode 100644
index febd1a8079..0000000000
--- a/support/texlab/tests/scenarios/formatting/bibtex/infinite_line_length/formatted.bib
+++ /dev/null
@@ -1,3 +0,0 @@
-@article{foo,
- title = {Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.},
-} \ No newline at end of file
diff --git a/support/texlab/tests/scenarios/formatting/bibtex/infinite_line_length/unformatted.bib b/support/texlab/tests/scenarios/formatting/bibtex/infinite_line_length/unformatted.bib
deleted file mode 100644
index 3ef68c5756..0000000000
--- a/support/texlab/tests/scenarios/formatting/bibtex/infinite_line_length/unformatted.bib
+++ /dev/null
@@ -1 +0,0 @@
-@article{foo, title = {Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.} }
diff --git a/support/texlab/tests/scenarios/hover/bibtex/field/foo.bib b/support/texlab/tests/scenarios/hover/bibtex/field/foo.bib
deleted file mode 100644
index 9d0a961b7a..0000000000
--- a/support/texlab/tests/scenarios/hover/bibtex/field/foo.bib
+++ /dev/null
@@ -1,4 +0,0 @@
-@article{foo,
- author = {Foo Bar},
- bar = {Baz Qux},
-} \ No newline at end of file
diff --git a/support/texlab/tests/scenarios/hover/bibtex/string_reference/foo.bib b/support/texlab/tests/scenarios/hover/bibtex/string_reference/foo.bib
deleted file mode 100644
index 434bb80185..0000000000
--- a/support/texlab/tests/scenarios/hover/bibtex/string_reference/foo.bib
+++ /dev/null
@@ -1,6 +0,0 @@
-@string{foo = "foo {bar} baz"}
-
-@article{bar,
- author = foo # bar,
- title = "Qux",
-}
diff --git a/support/texlab/tests/scenarios/hover/bibtex/type/foo.bib b/support/texlab/tests/scenarios/hover/bibtex/type/foo.bib
deleted file mode 100644
index 708bf7bbff..0000000000
--- a/support/texlab/tests/scenarios/hover/bibtex/type/foo.bib
+++ /dev/null
@@ -1,5 +0,0 @@
-@article{foo,}
-
-@bar{bar,}
-
-@baz{baz,}
diff --git a/support/texlab/tests/scenarios/hover/latex/citation/foo.bib b/support/texlab/tests/scenarios/hover/latex/citation/foo.bib
deleted file mode 100644
index ce704dcff8..0000000000
--- a/support/texlab/tests/scenarios/hover/latex/citation/foo.bib
+++ /dev/null
@@ -1,5 +0,0 @@
-@article{foo, author = {Foo Bar}, title = {Baz Qux}, year = {2019}}
-
-@article{bar, author = {Baz Qux}, title = {Foo Bar}, year = {2019}}
-
-@article{baz,}
diff --git a/support/texlab/tests/scenarios/hover/latex/citation/foo.tex b/support/texlab/tests/scenarios/hover/latex/citation/foo.tex
deleted file mode 100644
index 7ec4a6cdf2..0000000000
--- a/support/texlab/tests/scenarios/hover/latex/citation/foo.tex
+++ /dev/null
@@ -1,4 +0,0 @@
-\bibliography{foo}
-
-\cite{foo}
-\cite{baz}
diff --git a/support/texlab/tests/scenarios/hover/latex/component/foo.tex b/support/texlab/tests/scenarios/hover/latex/component/foo.tex
deleted file mode 100644
index c111318484..0000000000
--- a/support/texlab/tests/scenarios/hover/latex/component/foo.tex
+++ /dev/null
@@ -1,4 +0,0 @@
-\documentclass{article}
-\usepackage{amsmath}
-\documentclass{foo}
-\usepackage{foo}
diff --git a/support/texlab/tests/scenarios/hover/latex/label/section.tex b/support/texlab/tests/scenarios/hover/latex/label/section.tex
deleted file mode 100644
index 75a5d120b5..0000000000
--- a/support/texlab/tests/scenarios/hover/latex/label/section.tex
+++ /dev/null
@@ -1,5 +0,0 @@
-\documentclass{article}
-\begin{document}
-\section{Foo}
-\label{sec:foo}
-\end{document}
diff --git a/support/texlab/tests/scenarios/symbol/hierarchical/enumerate.aux b/support/texlab/tests/scenarios/symbol/hierarchical/enumerate.aux
deleted file mode 100644
index 40fcc334fa..0000000000
--- a/support/texlab/tests/scenarios/symbol/hierarchical/enumerate.aux
+++ /dev/null
@@ -1,3 +0,0 @@
-\relax
-\newlabel{it:foo}{{1}{1}}
-\newlabel{it:qux}{{2}{1}}
diff --git a/support/texlab/tests/scenarios/symbol/hierarchical/enumerate.tex b/support/texlab/tests/scenarios/symbol/hierarchical/enumerate.tex
deleted file mode 100644
index bbf85f2ee6..0000000000
--- a/support/texlab/tests/scenarios/symbol/hierarchical/enumerate.tex
+++ /dev/null
@@ -1,12 +0,0 @@
-\documentclass{article}
-
-\begin{document}
-
-\begin{enumerate}
- \item\label{it:foo} Foo
- \item\label{it:bar} Bar
- \item[Baz] Baz
- \item[Qux]\label{it:qux} Qux
-\end{enumerate}
-
-\end{document}
diff --git a/support/texlab/tests/scenarios/symbol/hierarchical/equation.aux b/support/texlab/tests/scenarios/symbol/hierarchical/equation.aux
deleted file mode 100644
index f7d3f25421..0000000000
--- a/support/texlab/tests/scenarios/symbol/hierarchical/equation.aux
+++ /dev/null
@@ -1,2 +0,0 @@
-\relax
-\newlabel{eq:foo}{{1}{1}}
diff --git a/support/texlab/tests/scenarios/symbol/hierarchical/equation.tex b/support/texlab/tests/scenarios/symbol/hierarchical/equation.tex
deleted file mode 100644
index 0999f270fa..0000000000
--- a/support/texlab/tests/scenarios/symbol/hierarchical/equation.tex
+++ /dev/null
@@ -1,17 +0,0 @@
-\documentclass{article}
-
-\begin{document}
-
-\begin{equation}\label{eq:foo}
- Foo
-\end{equation}
-
-\begin{equation}\label{eq:bar}
- Bar
-\end{equation}
-
-\begin{equation}
- Baz
-\end{equation}
-
-\end{document}
diff --git a/support/texlab/tests/scenarios/symbol/hierarchical/float.aux b/support/texlab/tests/scenarios/symbol/hierarchical/float.aux
deleted file mode 100644
index a23cc632d1..0000000000
--- a/support/texlab/tests/scenarios/symbol/hierarchical/float.aux
+++ /dev/null
@@ -1,5 +0,0 @@
-\relax
-\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Foo}}{1}\protected@file@percent }
-\newlabel{fig:foo}{{1}{1}}
-\@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Bar}}{1}\protected@file@percent }
-\@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Baz}}{1}\protected@file@percent }
diff --git a/support/texlab/tests/scenarios/symbol/hierarchical/float.tex b/support/texlab/tests/scenarios/symbol/hierarchical/float.tex
deleted file mode 100644
index e8f65b9f3a..0000000000
--- a/support/texlab/tests/scenarios/symbol/hierarchical/float.tex
+++ /dev/null
@@ -1,24 +0,0 @@
-\documentclass{article}
-
-\begin{document}
-
-\begin{figure}
- Foo
- \caption{Foo}\label{fig:foo}
-\end{figure}
-
-\begin{figure}
- Bar
- \caption{Bar}\label{fig:bar}
-\end{figure}
-
-\begin{figure}
- Baz
- \caption{Baz}
-\end{figure}
-
-\begin{figure}
- Qux
-\end{figure}
-
-\end{document}
diff --git a/support/texlab/tests/scenarios/symbol/hierarchical/section.aux b/support/texlab/tests/scenarios/symbol/hierarchical/section.aux
deleted file mode 100644
index d8c1d2c24f..0000000000
--- a/support/texlab/tests/scenarios/symbol/hierarchical/section.aux
+++ /dev/null
@@ -1,4 +0,0 @@
-\relax
-\@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}\protected@file@percent }
-\@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{1}\protected@file@percent }
-\newlabel{sec:bar}{{2}{1}}
diff --git a/support/texlab/tests/scenarios/symbol/hierarchical/section.tex b/support/texlab/tests/scenarios/symbol/hierarchical/section.tex
deleted file mode 100644
index ca2de74578..0000000000
--- a/support/texlab/tests/scenarios/symbol/hierarchical/section.tex
+++ /dev/null
@@ -1,11 +0,0 @@
-\documentclass{article}
-
-\begin{document}
-
-\section{Foo}
-
-\section{Bar}\label{sec:bar}
-
-\subsection{Baz}\label{sec:baz}
-
-\end{document}
diff --git a/support/texlab/tests/scenarios/symbol/hierarchical/theorem.aux b/support/texlab/tests/scenarios/symbol/hierarchical/theorem.aux
deleted file mode 100644
index ad163aeeae..0000000000
--- a/support/texlab/tests/scenarios/symbol/hierarchical/theorem.aux
+++ /dev/null
@@ -1,3 +0,0 @@
-\relax
-\newlabel{thm:foo}{{1}{1}}
-\newlabel{thm:bar}{{2}{1}}
diff --git a/support/texlab/tests/scenarios/symbol/hierarchical/theorem.tex b/support/texlab/tests/scenarios/symbol/hierarchical/theorem.tex
deleted file mode 100644
index e147cd6f90..0000000000
--- a/support/texlab/tests/scenarios/symbol/hierarchical/theorem.tex
+++ /dev/null
@@ -1,23 +0,0 @@
-\documentclass{article}
-\usepackage{amsthm}
-\newtheorem{lemma}{Lemma}
-
-\begin{document}
-
-\begin{lemma}[Foo]\label{thm:foo}
- Foo
-\end{lemma}
-
-\begin{lemma}\label{thm:bar}
- Bar
-\end{lemma}
-
-\begin{lemma}\label{thm:baz}
- Baz
-\end{lemma}
-
-\begin{lemma}[Qux]
- Qux
-\end{lemma}
-
-\end{document} \ No newline at end of file
diff --git a/support/texlab/tests/scenarios/symbol/workspace/bar.bib b/support/texlab/tests/scenarios/symbol/workspace/bar.bib
deleted file mode 100644
index 1fd540db29..0000000000
--- a/support/texlab/tests/scenarios/symbol/workspace/bar.bib
+++ /dev/null
@@ -1,3 +0,0 @@
-@article{foo,}
-
-@string{bar = "bar"}
diff --git a/support/texlab/tests/scenarios/symbol/workspace/foo.aux b/support/texlab/tests/scenarios/symbol/workspace/foo.aux
deleted file mode 100644
index 9713a1f333..0000000000
--- a/support/texlab/tests/scenarios/symbol/workspace/foo.aux
+++ /dev/null
@@ -1,17 +0,0 @@
-\relax
-\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Bar\relax }}{1}\protected@file@percent }
-\providecommand*\caption@xref[2]{\@setref\relax\@undefined{#1}}
-\newlabel{fig:bar}{{1}{1}}
-\@writefile{toc}{\contentsline {section}{\numberline {1}Foo}{1}\protected@file@percent }
-\newlabel{sec:foo}{{1}{1}}
-\newlabel{eq:foo}{{1}{1}}
-\@writefile{toc}{\contentsline {section}{\numberline {2}Bar}{1}\protected@file@percent }
-\newlabel{sec:bar}{{2}{1}}
-\@writefile{toc}{\contentsline {section}{\numberline {3}Baz}{1}\protected@file@percent }
-\newlabel{sec:baz}{{3}{1}}
-\newlabel{itm:foo}{{1}{1}}
-\newlabel{itm:bar}{{2}{1}}
-\newlabel{itm:baz}{{3}{1}}
-\@writefile{toc}{\contentsline {section}{\numberline {4}Qux}{1}\protected@file@percent }
-\newlabel{sec:qux}{{4}{1}}
-\newlabel{thm:qux}{{1}{1}}
diff --git a/support/texlab/tests/scenarios/symbol/workspace/foo.tex b/support/texlab/tests/scenarios/symbol/workspace/foo.tex
deleted file mode 100644
index 292cc5369b..0000000000
--- a/support/texlab/tests/scenarios/symbol/workspace/foo.tex
+++ /dev/null
@@ -1,38 +0,0 @@
-\documentclass{article}
-\usepackage{caption}
-\usepackage{amsmath}
-\usepackage{amsthm}
-
-\begin{document}
-
-\section{Foo}\label{sec:foo}
-
-\begin{equation}\label{eq:foo}
- Foo
-\end{equation}
-
-\section{Bar}\label{sec:bar}
-
-\begin{figure}
- Bar
- \caption{Bar}
- \label{fig:bar}
-\end{figure}
-
-\section{Baz}\label{sec:baz}
-
-\begin{enumerate}
- \item\label{itm:foo} Foo
- \item\label{itm:bar} Bar
- \item\label{itm:baz} Baz
-\end{enumerate}
-
-\section{Qux}\label{sec:qux}
-
-\newtheorem{lemma}{Lemma}
-
-\begin{lemma}[Qux]\label{thm:qux}
- Qux
-\end{lemma}
-
-\end{document}
diff --git a/support/texlab/tests/support/mod.rs b/support/texlab/tests/support/mod.rs
deleted file mode 100644
index abd1bfe313..0000000000
--- a/support/texlab/tests/support/mod.rs
+++ /dev/null
@@ -1,635 +0,0 @@
-use copy_dir::copy_dir;
-use futures::lock::Mutex;
-use futures_boxed::boxed;
-use jsonrpc::client::Result;
-use lsp_types::*;
-use serde::Serialize;
-use std::collections::HashMap;
-use std::fs::remove_dir;
-use std::path::PathBuf;
-use std::sync::Arc;
-use tempfile::{tempdir, TempDir};
-use texlab::build::BuildOptions;
-use texlab::client::LspClient;
-use texlab::diagnostics::LatexLintOptions;
-use texlab::formatting::bibtex::BibtexFormattingOptions;
-use texlab::server::LatexLspServer;
-use texlab::workspace::Uri;
-
-#[derive(Debug, PartialEq, Eq, Clone, Default)]
-pub struct MockLspClientOptions {
- pub bibtex_formatting: Option<BibtexFormattingOptions>,
- pub latex_lint: Option<LatexLintOptions>,
- pub latex_build: Option<BuildOptions>,
-}
-
-#[derive(Debug, Default)]
-pub struct MockLspClient {
- pub messages: Mutex<Vec<ShowMessageParams>>,
- pub options: Mutex<MockLspClientOptions>,
- pub diagnostics_by_uri: Mutex<HashMap<Uri, Vec<Diagnostic>>>,
- pub log_messages: Mutex<Vec<LogMessageParams>>,
-}
-
-impl MockLspClient {
- pub fn new() -> Self {
- Self::default()
- }
-}
-
-impl LspClient for MockLspClient {
- #[boxed]
- async fn configuration(&self, params: ConfigurationParams) -> Result<serde_json::Value> {
- fn serialize<T>(options: &Option<T>) -> Result<serde_json::Value>
- where
- T: Serialize,
- {
- options
- .as_ref()
- .map(|options| serde_json::to_value(vec![options]).unwrap())
- .ok_or_else(|| jsonrpc::Error::internal_error("Internal error".to_owned()))
- }
-
- let options = self.options.lock().await;
- match params.items[0].section.as_ref().unwrap().as_ref() {
- "bibtex.formatting" => serialize(&options.bibtex_formatting),
- "latex.lint" => serialize(&options.latex_lint),
- "latex.build" => serialize(&options.latex_build),
- _ => panic!("Invalid language configuration!"),
- }
- }
-
- #[boxed]
- async fn show_message(&self, params: ShowMessageParams) {
- let mut messages = self.messages.lock().await;
- messages.push(params);
- }
-
- #[boxed]
- async fn register_capability(&self, _params: RegistrationParams) -> Result<()> {
- Ok(())
- }
-
- #[boxed]
- async fn publish_diagnostics(&self, params: PublishDiagnosticsParams) {
- let mut diagnostics_by_uri = self.diagnostics_by_uri.lock().await;
- diagnostics_by_uri.insert(params.uri.into(), params.diagnostics);
- }
-
- #[boxed]
- async fn work_done_progress_create(&self, _params: WorkDoneProgressCreateParams) -> Result<()> {
- Ok(())
- }
-
- #[boxed]
- async fn progress(&self, _params: ProgressParams) {}
-
- #[boxed]
- async fn log_message(&self, params: LogMessageParams) {
- let mut messages = self.log_messages.lock().await;
- messages.push(params);
- }
-}
-
-pub struct Scenario {
- pub directory: TempDir,
- pub server: LatexLspServer<MockLspClient>,
- pub client: Arc<MockLspClient>,
-}
-
-impl Scenario {
- pub fn new(name: &str, distribution: Arc<Box<dyn tex::Distribution>>) -> Self {
- let directory = tempdir().unwrap();
- remove_dir(directory.path()).unwrap();
- let source = PathBuf::from(env!("CARGO_MANIFEST_DIR"))
- .join("tests")
- .join("scenarios")
- .join(name);
- copy_dir(source, directory.path()).unwrap();
-
- let client = Arc::new(MockLspClient::new());
- let server = LatexLspServer::new(distribution, Arc::clone(&client));
- Self {
- directory,
- server,
- client,
- }
- }
-
- pub async fn initialize(&self, capabilities: &ClientCapabilities) {
- let root_uri = Uri::from_file_path(self.directory.path()).unwrap();
- let params = InitializeParams {
- process_id: None,
- root_path: Some(self.directory.path().to_string_lossy().into_owned()),
- root_uri: Some(root_uri.into()),
- initialization_options: None,
- capabilities: capabilities.clone(),
- trace: None,
- workspace_folders: None,
- };
-
- self.server
- .execute_async(|svr| svr.initialize(params))
- .await
- .unwrap();
-
- self.server
- .execute(|svr| svr.initialized(InitializedParams {}))
- .await;
- }
-
- pub fn uri(&self, name: &str) -> Uri {
- let mut path = self.directory.path().to_owned();
- path.push(name);
- Uri::from_file_path(path).unwrap()
- }
-
- pub async fn read(&self, name: &'static str) -> String {
- let mut path = self.directory.path().to_owned();
- path.push(name);
- let data = tokio::fs::read(path).await.unwrap();
- let text = String::from_utf8_lossy(&data);
- text.replace('\r', "")
- }
-
- pub async fn open(&self, name: &'static str) {
- let text = self.read(name).await;
- let language_id = if name.ends_with(".bib") {
- "bibtex"
- } else {
- "latex"
- };
-
- let params = DidOpenTextDocumentParams {
- text_document: TextDocumentItem {
- uri: self.uri(name).into(),
- version: 0,
- language_id: language_id.to_owned(),
- text,
- },
- };
- self.server.execute(|svr| svr.did_open(params)).await;
- }
-}
-
-pub mod capabilities {
- use lsp_types::*;
-
- pub static CLIENT_FULL_CAPABILITIES: ClientCapabilities = ClientCapabilities {
- workspace: Some(WorkspaceClientCapabilities {
- configuration: Some(true),
- did_change_watched_files: None,
- workspace_folders: None,
- apply_edit: None,
- execute_command: None,
- symbol: None,
- workspace_edit: None,
- did_change_configuration: None,
- }),
- text_document: Some(TextDocumentClientCapabilities {
- synchronization: None,
- completion: None,
- hover: None,
- signature_help: None,
- references: None,
- document_highlight: None,
- document_symbol: Some(DocumentSymbolCapability {
- dynamic_registration: None,
- hierarchical_document_symbol_support: Some(true),
- symbol_kind: None,
- }),
- formatting: None,
- range_formatting: None,
- on_type_formatting: None,
- declaration: None,
- definition: Some(GotoCapability {
- dynamic_registration: None,
- link_support: Some(true),
- }),
- type_definition: None,
- implementation: None,
- code_action: None,
- code_lens: None,
- document_link: None,
- color_provider: None,
- rename: None,
- publish_diagnostics: None,
- folding_range: None,
- }),
- experimental: None,
- window: Some(WindowClientCapabilities {
- work_done_progress: Some(true),
- }),
- };
-
- pub static CLIENT_NO_LINK_CAPABILITIES: ClientCapabilities = ClientCapabilities {
- workspace: Some(WorkspaceClientCapabilities {
- configuration: Some(true),
- did_change_watched_files: None,
- workspace_folders: None,
- apply_edit: None,
- execute_command: None,
- symbol: None,
- workspace_edit: None,
- did_change_configuration: None,
- }),
- text_document: Some(TextDocumentClientCapabilities {
- synchronization: None,
- completion: None,
- hover: None,
- signature_help: None,
- references: None,
- document_highlight: None,
- document_symbol: None,
- formatting: None,
- range_formatting: None,
- on_type_formatting: None,
- declaration: None,
- definition: Some(GotoCapability {
- dynamic_registration: None,
- link_support: Some(false),
- }),
- type_definition: None,
- implementation: None,
- code_action: None,
- code_lens: None,
- document_link: None,
- color_provider: None,
- rename: None,
- publish_diagnostics: None,
- folding_range: None,
- }),
- experimental: None,
- window: Some(WindowClientCapabilities {
- work_done_progress: Some(true),
- }),
- };
-}
-
-pub mod completion {
- use super::*;
-
- pub async fn run_list(
- scenario_short_name: &'static str,
- file: &'static str,
- line: u64,
- character: u64,
- ) -> (Scenario, Vec<CompletionItem>) {
- let scenario_name = format!("completion/{}", scenario_short_name);
- let scenario = Scenario::new(&scenario_name, Arc::new(Box::new(tex::Unknown)));
- scenario.open(file).await;
- scenario
- .initialize(&capabilities::CLIENT_FULL_CAPABILITIES)
- .await;
-
- let params = CompletionParams {
- text_document_position: TextDocumentPositionParams {
- text_document: TextDocumentIdentifier::new(scenario.uri(file).into()),
- position: Position::new(line, character),
- },
- context: None,
- };
-
- let items = scenario
- .server
- .execute_async(|svr| svr.completion(params))
- .await
- .unwrap()
- .items;
-
- (scenario, items)
- }
-
- pub async fn run_empty(
- scenario_short_name: &'static str,
- file: &'static str,
- line: u64,
- character: u64,
- ) {
- assert!(run_list(scenario_short_name, file, line, character)
- .await
- .1
- .is_empty());
- }
-
- pub async fn run_item(
- scenario_short_name: &'static str,
- file: &'static str,
- line: u64,
- character: u64,
- item_name: &'static str,
- ) -> CompletionItem {
- let (scenario, items) = run_list(scenario_short_name, file, line, character).await;
-
- let item = items
- .into_iter()
- .find(|item| item.label == item_name)
- .unwrap();
-
- scenario
- .server
- .execute_async(|svr| svr.completion_resolve(item))
- .await
- .unwrap()
- }
-
- pub mod verify {
- use lsp_types::*;
- use texlab::range::RangeExt;
-
- pub fn text_edit(
- item: &CompletionItem,
- start_line: u64,
- start_character: u64,
- end_line: u64,
- end_character: u64,
- text: &str,
- ) {
- assert_eq!(
- item.text_edit,
- Some(TextEdit::new(
- Range::new_simple(start_line, start_character, end_line, end_character),
- text.into()
- ))
- );
- }
-
- pub fn detail(item: &CompletionItem, detail: &str) {
- assert_eq!(item.detail.as_ref().unwrap(), detail);
- }
-
- pub fn labels(items: &[CompletionItem], expected_labels: Vec<&'static str>) {
- let mut actual_labels: Vec<&str> =
- items.iter().map(|item| item.label.as_ref()).collect();
- actual_labels.sort();
- assert_eq!(actual_labels, expected_labels);
- }
- }
-}
-
-pub mod definition {
- use super::capabilities::*;
- use super::*;
- use texlab::definition::DefinitionResponse;
-
- pub async fn run(
- scenario_short_name: &'static str,
- file: &'static str,
- line: u64,
- character: u64,
- capabilities: &ClientCapabilities,
- ) -> (Scenario, DefinitionResponse) {
- let scenario_name = format!("definition/{}", scenario_short_name);
- let scenario = Scenario::new(&scenario_name, Arc::new(Box::new(tex::Unknown)));
- scenario.initialize(capabilities).await;
- scenario.open(file).await;
-
- let params = TextDocumentPositionParams {
- text_document: TextDocumentIdentifier::new(scenario.uri(file).into()),
- position: Position::new(line, character),
- };
-
- let response = scenario
- .server
- .execute_async(|svr| svr.definition(params))
- .await
- .unwrap();
-
- (scenario, response)
- }
-
- pub async fn run_link(
- scenario_short_name: &'static str,
- file: &'static str,
- line: u64,
- character: u64,
- ) -> (Scenario, Vec<LocationLink>) {
- let (scenario, response) = run(
- scenario_short_name,
- file,
- line,
- character,
- &CLIENT_FULL_CAPABILITIES,
- )
- .await;
- match response {
- DefinitionResponse::LocationLinks(links) => (scenario, links),
- DefinitionResponse::Locations(_) => unreachable!(),
- }
- }
-
- pub async fn run_location(
- scenario_short_name: &'static str,
- file: &'static str,
- line: u64,
- character: u64,
- ) -> (Scenario, Vec<Location>) {
- let (scenario, response) = run(
- scenario_short_name,
- file,
- line,
- character,
- &CLIENT_NO_LINK_CAPABILITIES,
- )
- .await;
- match response {
- DefinitionResponse::LocationLinks(_) => unreachable!(),
- DefinitionResponse::Locations(locations) => (scenario, locations),
- }
- }
-
- pub mod verify {
- use super::*;
- use texlab::range::RangeExt;
-
- pub fn origin_selection_range(
- link: &LocationLink,
- start_line: u64,
- start_character: u64,
- end_line: u64,
- end_character: u64,
- ) {
- assert_eq!(
- link.origin_selection_range,
- Some(Range::new_simple(
- start_line,
- start_character,
- end_line,
- end_character
- ))
- );
- }
- }
-}
-
-pub mod folding {
- use super::*;
- use std::cmp::Reverse;
-
- pub async fn run(file: &'static str) -> Vec<FoldingRange> {
- let scenario = Scenario::new("folding", Arc::new(Box::new(tex::Unknown)));
- scenario
- .initialize(&capabilities::CLIENT_FULL_CAPABILITIES)
- .await;
- scenario.open(file).await;
- let params = FoldingRangeParams {
- text_document: TextDocumentIdentifier::new(scenario.uri(file).into()),
- };
-
- let mut foldings = scenario
- .server
- .execute_async(|svr| svr.folding_range(params))
- .await
- .unwrap();
-
- foldings.sort_by_key(|folding| {
- let start = Position::new(folding.start_line, folding.start_character.unwrap());
- let end = Position::new(folding.end_line, folding.end_character.unwrap());
- (start, Reverse(end))
- });
- foldings
- }
-}
-
-pub mod formatting {
- use super::*;
- use texlab::formatting::bibtex::BibtexFormattingOptions;
-
- pub async fn run_bibtex(
- file: &'static str,
- options: Option<BibtexFormattingOptions>,
- ) -> (Scenario, Vec<TextEdit>) {
- let scenario = Scenario::new("formatting/bibtex", Arc::new(Box::new(tex::Unknown)));
- scenario
- .initialize(&capabilities::CLIENT_FULL_CAPABILITIES)
- .await;
- scenario.open(file).await;
- {
- scenario.client.options.lock().await.bibtex_formatting = options;
- }
-
- let params = DocumentFormattingParams {
- text_document: TextDocumentIdentifier::new(scenario.uri(file).into()),
- options: FormattingOptions {
- tab_size: 4,
- insert_spaces: true,
- properties: HashMap::new(),
- },
- };
-
- let edits = scenario
- .server
- .execute_async(|svr| svr.formatting(params))
- .await
- .unwrap();
- (scenario, edits)
- }
-}
-
-pub mod hover {
- use super::*;
-
- pub async fn run(
- scenario_short_name: &'static str,
- file: &'static str,
- line: u64,
- character: u64,
- ) -> Option<HoverContents> {
- let scenario_name = format!("hover/{}", scenario_short_name);
- let scenario = Scenario::new(&scenario_name, Arc::new(Box::new(tex::Unknown)));
- scenario
- .initialize(&capabilities::CLIENT_FULL_CAPABILITIES)
- .await;
- scenario.open(file).await;
- let identifier = TextDocumentIdentifier::new(scenario.uri(file).into());
- let params = TextDocumentPositionParams::new(identifier, Position::new(line, character));
- scenario
- .server
- .execute_async(|svr| svr.hover(params))
- .await
- .unwrap()
- .map(|hover| hover.contents)
- }
-}
-
-pub mod symbol {
- use super::*;
- use texlab::symbol::SymbolResponse;
-
- pub async fn run_hierarchical(file: &'static str) -> Vec<DocumentSymbol> {
- let scenario = Scenario::new("symbol/hierarchical", Arc::new(Box::new(tex::Unknown)));
- scenario
- .initialize(&capabilities::CLIENT_FULL_CAPABILITIES)
- .await;
- scenario.open(file).await;
- let params = DocumentSymbolParams {
- text_document: TextDocumentIdentifier::new(scenario.uri(file).into()),
- };
-
- let response = scenario
- .server
- .execute_async(|svr| svr.document_symbol(params))
- .await
- .unwrap();
-
- match response {
- SymbolResponse::Hierarchical(symbols) => symbols,
- SymbolResponse::Flat(_) => unreachable!(),
- }
- }
-
- pub async fn run_workspace(query: &'static str) -> (Scenario, Vec<SymbolInformation>) {
- let scenario = Scenario::new("symbol/workspace", Arc::new(Box::new(tex::Unknown)));
- scenario
- .initialize(&capabilities::CLIENT_FULL_CAPABILITIES)
- .await;
- scenario.open("foo.tex").await;
- scenario.open("bar.bib").await;
- let params = WorkspaceSymbolParams {
- query: query.into(),
- };
- let symbols = scenario
- .server
- .execute_async(|svr| svr.workspace_symbol(params))
- .await
- .unwrap();
-
- (scenario, symbols)
- }
-
- pub mod verify {
- use super::*;
- use texlab::range::RangeExt;
-
- pub fn symbol(
- symbol: &DocumentSymbol,
- name: &str,
- detail: Option<&str>,
- selection_range: Range,
- range: Range,
- ) {
- assert_eq!(symbol.name, name);
- assert_eq!(symbol.detail.as_ref().map(AsRef::as_ref), detail);
- assert_eq!(symbol.selection_range, selection_range);
- assert_eq!(symbol.range, range);
- }
-
- pub fn symbol_info(
- symbol: &SymbolInformation,
- scenario: &Scenario,
- file: &str,
- name: &str,
- start_line: u64,
- start_character: u64,
- end_line: u64,
- end_character: u64,
- ) {
- assert_eq!(symbol.name, name);
- let range = Range::new_simple(start_line, start_character, end_line, end_character);
- assert_eq!(
- symbol.location,
- Location::new(scenario.uri(file).into(), range)
- );
- }
- }
-}
diff --git a/support/texlab/tests/test_completion_bibtex_command.rs b/support/texlab/tests/test_completion_bibtex_command.rs
deleted file mode 100644
index 1d741d6976..0000000000
--- a/support/texlab/tests/test_completion_bibtex_command.rs
+++ /dev/null
@@ -1,19 +0,0 @@
-pub mod support;
-
-use support::completion::*;
-
-const SCENARIO: &str = "bibtex/command";
-
-#[tokio::test]
-async fn incomplete_entry() {
- let item = run_item(SCENARIO, "foo.bib", 1, 15, "LaTeX").await;
- verify::text_edit(&item, 1, 15, 1, 18, "LaTeX");
- verify::detail(&item, "built-in");
-}
-
-#[tokio::test]
-async fn complete_entry() {
- let item = run_item(SCENARIO, "foo.bib", 5, 15, "LaTeX").await;
- verify::text_edit(&item, 5, 15, 5, 18, "LaTeX");
- verify::detail(&item, "built-in");
-}
diff --git a/support/texlab/tests/test_completion_bibtex_field.rs b/support/texlab/tests/test_completion_bibtex_field.rs
deleted file mode 100644
index 766bcd7019..0000000000
--- a/support/texlab/tests/test_completion_bibtex_field.rs
+++ /dev/null
@@ -1,19 +0,0 @@
-pub mod support;
-
-use support::completion::*;
-
-const SCENARIO: &str = "bibtex/field";
-
-#[tokio::test]
-async fn incomplete_entry() {
- let item = run_item(SCENARIO, "foo.bib", 1, 6, "title").await;
- assert!(item.documentation.is_some());
- verify::text_edit(&item, 1, 4, 1, 8, "title");
-}
-
-#[tokio::test]
-async fn complete_entry() {
- let item = run_item(SCENARIO, "foo.bib", 4, 5, "title").await;
- assert!(item.documentation.is_some());
- verify::text_edit(&item, 4, 4, 4, 9, "title");
-}
diff --git a/support/texlab/tests/test_completion_bibtex_type.rs b/support/texlab/tests/test_completion_bibtex_type.rs
deleted file mode 100644
index 5d56e3c178..0000000000
--- a/support/texlab/tests/test_completion_bibtex_type.rs
+++ /dev/null
@@ -1,26 +0,0 @@
-pub mod support;
-
-use support::completion::*;
-
-const SCENARIO: &str = "bibtex/type";
-
-#[tokio::test]
-async fn empty_type() {
- let item = run_item(SCENARIO, "foo.bib", 0, 1, "article").await;
- assert!(item.documentation.is_some());
- verify::text_edit(&item, 0, 1, 0, 1, "article");
-}
-
-#[tokio::test]
-async fn incomplete_type() {
- let item = run_item(SCENARIO, "foo.bib", 1, 2, "article").await;
- assert!(item.documentation.is_some());
- verify::text_edit(&item, 1, 1, 1, 4, "article");
-}
-
-#[tokio::test]
-async fn complete_type() {
- let item = run_item(SCENARIO, "foo.bib", 2, 8, "article").await;
- assert!(item.documentation.is_some());
- verify::text_edit(&item, 2, 1, 2, 8, "article");
-}
diff --git a/support/texlab/tests/test_completion_bibtex_word.rs b/support/texlab/tests/test_completion_bibtex_word.rs
deleted file mode 100644
index 3f757047a3..0000000000
--- a/support/texlab/tests/test_completion_bibtex_word.rs
+++ /dev/null
@@ -1,20 +0,0 @@
-pub mod support;
-
-use support::completion::*;
-
-const SCENARIO: &str = "bibtex/word";
-
-#[tokio::test]
-async fn no_text() {
- run_empty(SCENARIO, "foo.bib", 0, 0).await;
-}
-
-#[tokio::test]
-async fn before_brace_entry() {
- run_empty(SCENARIO, "foo.bib", 2, 14).await;
-}
-
-#[tokio::test]
-async fn before_brace_comment() {
- run_empty(SCENARIO, "foo.bib", 6, 14).await;
-}
diff --git a/support/texlab/tests/test_completion_latex_citation.rs b/support/texlab/tests/test_completion_latex_citation.rs
deleted file mode 100644
index 07ecd6690f..0000000000
--- a/support/texlab/tests/test_completion_latex_citation.rs
+++ /dev/null
@@ -1,26 +0,0 @@
-pub mod support;
-
-use lsp_types::*;
-use support::completion::*;
-
-const SCENARIO: &str = "latex/citation";
-
-#[tokio::test]
-async fn valid_citation() {
- let item = run_item(SCENARIO, "foo.tex", 5, 6, "foo:2019").await;
- verify::text_edit(&item, 5, 6, 5, 6, "foo:2019");
- assert_eq!(
- item.documentation.unwrap(),
- Documentation::MarkupContent(MarkupContent {
- kind: MarkupKind::Markdown,
- value: "Bar, F. (2019). *Baz Qux*.".into()
- })
- );
-}
-
-#[tokio::test]
-async fn invalid_citation() {
- let item = run_item(SCENARIO, "foo.tex", 5, 6, "bar:2005").await;
- verify::text_edit(&item, 5, 6, 5, 6, "bar:2005");
- assert_eq!(item.documentation, None);
-}
diff --git a/support/texlab/tests/test_completion_latex_color.rs b/support/texlab/tests/test_completion_latex_color.rs
deleted file mode 100644
index 43c956ef78..0000000000
--- a/support/texlab/tests/test_completion_latex_color.rs
+++ /dev/null
@@ -1,23 +0,0 @@
-pub mod support;
-
-use support::completion::*;
-
-const SCENARIO: &str = "latex/color";
-
-#[tokio::test]
-async fn name() {
- let item = run_item(SCENARIO, "foo.tex", 0, 9, "red").await;
- verify::text_edit(&item, 0, 7, 0, 9, "red");
-}
-
-#[tokio::test]
-async fn model_definecolor() {
- let item = run_item(SCENARIO, "foo.tex", 1, 18, "rgb").await;
- verify::text_edit(&item, 1, 18, 1, 18, "rgb");
-}
-
-#[tokio::test]
-async fn model_definecolorset() {
- let item = run_item(SCENARIO, "foo.tex", 2, 17, "RGB").await;
- verify::text_edit(&item, 2, 16, 2, 17, "RGB");
-}
diff --git a/support/texlab/tests/test_completion_latex_component.rs b/support/texlab/tests/test_completion_latex_component.rs
deleted file mode 100644
index 6671fa9c07..0000000000
--- a/support/texlab/tests/test_completion_latex_component.rs
+++ /dev/null
@@ -1,68 +0,0 @@
-pub mod support;
-
-use support::completion::*;
-
-const SCENARIO: &str = "latex/component";
-
-#[tokio::test]
-async fn kernel_command() {
- let item = run_item(SCENARIO, "foo.tex", 0, 1, "documentclass").await;
- verify::text_edit(&item, 0, 1, 0, 14, "documentclass");
- verify::detail(&item, "built-in");
-}
-
-#[tokio::test]
-async fn kernel_command_glyph() {
- let item = run_item(SCENARIO, "foo.tex", 7, 7, "varepsilon").await;
- verify::text_edit(&item, 7, 1, 7, 7, "varepsilon");
- verify::detail(&item, "ε, built-in");
-}
-
-#[tokio::test]
-async fn kernel_environment() {
- let item = run_item(SCENARIO, "foo.tex", 6, 10, "document").await;
- verify::text_edit(&item, 6, 7, 6, 10, "document");
- verify::detail(&item, "built-in");
-}
-
-#[tokio::test]
-async fn class_import() {
- let item = run_item(SCENARIO, "foo.tex", 0, 19, "book").await;
- verify::text_edit(&item, 0, 15, 0, 19, "book");
- assert!(item.documentation.is_some());
-}
-
-#[tokio::test]
-async fn class_command() {
- let item = run_item(SCENARIO, "foo.tex", 2, 5, "chapter").await;
- verify::text_edit(&item, 2, 1, 2, 5, "chapter");
- verify::detail(&item, "book.cls");
-}
-
-#[tokio::test]
-async fn class_environment() {
- let item = run_item(SCENARIO, "foo.tex", 4, 13, "theindex").await;
- verify::text_edit(&item, 4, 7, 4, 13, "theindex");
- verify::detail(&item, "book.cls");
-}
-
-#[tokio::test]
-async fn package_import() {
- let item = run_item(SCENARIO, "foo.tex", 1, 15, "amsmath").await;
- verify::text_edit(&item, 1, 12, 1, 19, "amsmath");
- assert!(item.documentation.is_some());
-}
-
-#[tokio::test]
-async fn package_command() {
- let item = run_item(SCENARIO, "foo.tex", 3, 7, "varDelta").await;
- verify::text_edit(&item, 3, 1, 3, 7, "varDelta");
- verify::detail(&item, "amsmath.sty");
-}
-
-#[tokio::test]
-async fn package_environment() {
- let item = run_item(SCENARIO, "foo.tex", 5, 5, "align").await;
- verify::text_edit(&item, 5, 5, 5, 9, "align");
- verify::detail(&item, "amsmath.sty");
-}
diff --git a/support/texlab/tests/test_completion_latex_include.rs b/support/texlab/tests/test_completion_latex_include.rs
deleted file mode 100644
index b657804317..0000000000
--- a/support/texlab/tests/test_completion_latex_include.rs
+++ /dev/null
@@ -1,29 +0,0 @@
-pub mod support;
-
-use support::completion::*;
-
-const SCENARIO: &str = "latex/include";
-
-#[tokio::test]
-async fn include_root() {
- let (_, items) = run_list(SCENARIO, "foo.tex", 2, 9).await;
- verify::labels(&items, vec!["bar", "foo", "qux"]);
-}
-
-#[tokio::test]
-async fn input_root() {
- let (_, items) = run_list(SCENARIO, "foo.tex", 3, 7).await;
- verify::labels(&items, vec!["bar.tex", "foo.tex", "qux"]);
-}
-
-#[tokio::test]
-async fn input_subdirectory() {
- let (_, items) = run_list(SCENARIO, "foo.tex", 4, 11).await;
- verify::labels(&items, vec!["baz.tex"]);
-}
-
-#[tokio::test]
-async fn bibliography() {
- let (_, items) = run_list(SCENARIO, "foo.tex", 5, 16).await;
- verify::labels(&items, vec!["bibliography.bib", "qux"]);
-}
diff --git a/support/texlab/tests/test_completion_latex_label.rs b/support/texlab/tests/test_completion_latex_label.rs
deleted file mode 100644
index 78f302672e..0000000000
--- a/support/texlab/tests/test_completion_latex_label.rs
+++ /dev/null
@@ -1,34 +0,0 @@
-pub mod support;
-
-use lsp_types::Documentation;
-use support::completion::*;
-
-const SCENARIO: &str = "latex/label";
-
-#[tokio::test]
-async fn default() {
- let (_, items) = run_list(SCENARIO, "bar.tex", 4, 5).await;
- assert_eq!(items.len(), 6);
- verify::text_edit(&items[0], 4, 5, 4, 5, "sec:bar");
- verify::text_edit(&items[1], 4, 5, 4, 5, "sec:foo");
- verify::text_edit(&items[2], 4, 5, 4, 5, "eq:foo");
- verify::text_edit(&items[3], 4, 5, 4, 5, "eq:bar");
- verify::text_edit(&items[4], 4, 5, 4, 5, "fig:baz");
- verify::text_edit(&items[5], 4, 5, 4, 5, "thm:foo");
- verify::detail(&items[0], "Section 2 (Bar)");
- verify::detail(&items[1], "Section 1 (Foo)");
- verify::detail(&items[2], "Equation (1)");
- verify::detail(&items[3], "Equation (2)");
- verify::detail(&items[4], "Figure 1");
- verify::detail(&items[5], "Lemma 1");
- assert_eq!(
- *items[4].documentation.as_ref().unwrap(),
- Documentation::String("Baz".into())
- );
-}
-
-#[tokio::test]
-async fn equation() {
- let (_, items) = run_list(SCENARIO, "bar.tex", 5, 7).await;
- verify::labels(&items, vec!["eq:bar", "eq:foo"]);
-}
diff --git a/support/texlab/tests/test_completion_latex_preselect.rs b/support/texlab/tests/test_completion_latex_preselect.rs
deleted file mode 100644
index 8c56a8ec9f..0000000000
--- a/support/texlab/tests/test_completion_latex_preselect.rs
+++ /dev/null
@@ -1,11 +0,0 @@
-pub mod support;
-
-use support::completion::*;
-
-const SCENARIO: &str = "latex/preselect";
-
-#[tokio::test]
-async fn environment() {
- let item = run_item(SCENARIO, "foo.tex", 2, 5, "document").await;
- assert_eq!(item.preselect, Some(true));
-}
diff --git a/support/texlab/tests/test_completion_latex_theorem.rs b/support/texlab/tests/test_completion_latex_theorem.rs
deleted file mode 100644
index 25cb419c84..0000000000
--- a/support/texlab/tests/test_completion_latex_theorem.rs
+++ /dev/null
@@ -1,12 +0,0 @@
-pub mod support;
-
-use support::completion::*;
-
-const SCENARIO: &str = "latex/theorem";
-
-#[tokio::test]
-async fn newtheorem() {
- let item = run_item(SCENARIO, "foo.tex", 4, 7, "foo").await;
- verify::text_edit(&item, 4, 7, 4, 8, "foo");
- verify::detail(&item, "user-defined");
-}
diff --git a/support/texlab/tests/test_completion_latex_tikz.rs b/support/texlab/tests/test_completion_latex_tikz.rs
deleted file mode 100644
index d3558fb118..0000000000
--- a/support/texlab/tests/test_completion_latex_tikz.rs
+++ /dev/null
@@ -1,21 +0,0 @@
-// let item = run_completion_item("latex/tikz", "foo.tex", 1, 15, "arrows").await;
-// verify_text_edit(&item, 1, 15, 1, 15, "arrows");
-// let item = run_completion_item("latex/tikz", "foo.tex", 2, 16, "arrows").await;
-// verify_text_edit(&item, 2, 16, 2, 16, "arrows");
-pub mod support;
-
-use support::completion::*;
-
-const SCENARIO: &str = "latex/tikz";
-
-#[tokio::test]
-async fn pgf_library() {
- let item = run_item(SCENARIO, "foo.tex", 1, 15, "arrows").await;
- verify::text_edit(&item, 1, 15, 1, 15, "arrows");
-}
-
-#[tokio::test]
-async fn tikz_library() {
- let item = run_item(SCENARIO, "foo.tex", 2, 16, "arrows").await;
- verify::text_edit(&item, 2, 16, 2, 16, "arrows");
-}
diff --git a/support/texlab/tests/test_completion_latex_user.rs b/support/texlab/tests/test_completion_latex_user.rs
deleted file mode 100644
index d17a5c3f6a..0000000000
--- a/support/texlab/tests/test_completion_latex_user.rs
+++ /dev/null
@@ -1,19 +0,0 @@
-pub mod support;
-
-use support::completion::*;
-
-const SCENARIO: &str = "latex/user";
-
-#[tokio::test]
-async fn command() {
- let item = run_item(SCENARIO, "foo.tex", 1, 3, "foo").await;
- verify::text_edit(&item, 1, 1, 1, 3, "foo");
- verify::detail(&item, "user-defined");
-}
-
-#[tokio::test]
-async fn environment() {
- let item = run_item(SCENARIO, "foo.tex", 4, 7, "foo").await;
- verify::text_edit(&item, 4, 7, 4, 9, "foo");
- verify::detail(&item, "user-defined");
-}
diff --git a/support/texlab/tests/test_definition_bibtex_string.rs b/support/texlab/tests/test_definition_bibtex_string.rs
deleted file mode 100644
index 99382de534..0000000000
--- a/support/texlab/tests/test_definition_bibtex_string.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-pub mod support;
-
-use lsp_types::Range;
-use support::definition::*;
-use texlab::range::RangeExt;
-
-const SCENARIO: &str = "bibtex/string";
-
-#[tokio::test]
-async fn link() {
- let (scenario, mut links) = run_link(SCENARIO, "foo.bib", 5, 14).await;
- assert_eq!(links.len(), 1);
- let link = links.pop().unwrap();
- verify::origin_selection_range(&link, 5, 13, 5, 16);
- assert_eq!(link.target_uri, scenario.uri("foo.bib").into());
- assert_eq!(link.target_range, Range::new_simple(2, 0, 2, 20));
- assert_eq!(link.target_selection_range, Range::new_simple(2, 8, 2, 11));
-}
diff --git a/support/texlab/tests/test_definition_latex_citation.rs b/support/texlab/tests/test_definition_latex_citation.rs
deleted file mode 100644
index 20c39dfe9d..0000000000
--- a/support/texlab/tests/test_definition_latex_citation.rs
+++ /dev/null
@@ -1,27 +0,0 @@
-pub mod support;
-
-use lsp_types::Range;
-use support::definition::*;
-use texlab::range::RangeExt;
-
-const SCENARIO: &str = "latex/citation";
-
-#[tokio::test]
-async fn link() {
- let (scenario, mut links) = run_link(SCENARIO, "foo.tex", 1, 7).await;
- assert_eq!(links.len(), 1);
- let link = links.pop().unwrap();
- verify::origin_selection_range(&link, 1, 6, 1, 9);
- assert_eq!(link.target_uri, scenario.uri("bar.bib").into());
- assert_eq!(link.target_range, Range::new_simple(2, 0, 2, 14));
- assert_eq!(link.target_selection_range, Range::new_simple(2, 9, 2, 12));
-}
-
-#[tokio::test]
-async fn location() {
- let (scenario, mut locations) = run_location(SCENARIO, "foo.tex", 1, 7).await;
- assert_eq!(locations.len(), 1);
- let location = locations.pop().unwrap();
- assert_eq!(location.uri, scenario.uri("bar.bib").into());
- assert_eq!(location.range, Range::new_simple(2, 9, 2, 12));
-}
diff --git a/support/texlab/tests/test_definition_latex_command.rs b/support/texlab/tests/test_definition_latex_command.rs
deleted file mode 100644
index eba32f9a17..0000000000
--- a/support/texlab/tests/test_definition_latex_command.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-pub mod support;
-
-use lsp_types::Range;
-use support::definition::*;
-use texlab::range::RangeExt;
-
-const SCENARIO: &str = "latex/command";
-
-#[tokio::test]
-async fn link() {
- let (scenario, mut links) = run_link(SCENARIO, "foo.tex", 2, 2).await;
- assert_eq!(links.len(), 1);
- let link = links.pop().unwrap();
- verify::origin_selection_range(&link, 2, 0, 2, 4);
- assert_eq!(link.target_uri, scenario.uri("foo.tex").into());
- assert_eq!(link.target_range, Range::new_simple(0, 0, 0, 22));
- assert_eq!(link.target_selection_range, Range::new_simple(0, 0, 0, 22));
-}
diff --git a/support/texlab/tests/test_definition_latex_label.rs b/support/texlab/tests/test_definition_latex_label.rs
deleted file mode 100644
index 3979b2cabe..0000000000
--- a/support/texlab/tests/test_definition_latex_label.rs
+++ /dev/null
@@ -1,73 +0,0 @@
-pub mod support;
-
-use lsp_types::Range;
-use support::definition::*;
-use texlab::range::RangeExt;
-
-const SCENARIO: &str = "latex/label";
-
-#[tokio::test]
-async fn default_link() {
- let (scenario, mut links) = run_link(SCENARIO, "default.tex", 1, 7).await;
- assert_eq!(links.len(), 1);
- let link = links.pop().unwrap();
- verify::origin_selection_range(&link, 1, 5, 1, 8);
- assert_eq!(link.target_uri, scenario.uri("default.tex").into());
- assert_eq!(link.target_range, Range::new_simple(0, 0, 0, 11));
- assert_eq!(link.target_selection_range, Range::new_simple(0, 0, 0, 11));
-}
-
-#[tokio::test]
-async fn equation_link() {
- let (scenario, mut links) = run_link(SCENARIO, "equation.tex", 5, 8).await;
- assert_eq!(links.len(), 1);
- let link = links.pop().unwrap();
- verify::origin_selection_range(&link, 5, 5, 5, 11);
- assert_eq!(link.target_uri, scenario.uri("equation.tex").into());
- assert_eq!(link.target_range, Range::new_simple(0, 0, 3, 14));
- assert_eq!(link.target_selection_range, Range::new_simple(1, 0, 1, 14));
-}
-
-#[tokio::test]
-async fn float_link() {
- let (scenario, mut links) = run_link(SCENARIO, "float.tex", 6, 6).await;
- assert_eq!(links.len(), 1);
- let link = links.pop().unwrap();
- verify::origin_selection_range(&link, 6, 5, 6, 8);
- assert_eq!(link.target_uri, scenario.uri("float.tex").into());
- assert_eq!(link.target_range, Range::new_simple(0, 0, 4, 12));
- assert_eq!(link.target_selection_range, Range::new_simple(3, 0, 3, 11));
-}
-
-#[tokio::test]
-async fn item_link() {
- let (scenario, mut links) = run_link(SCENARIO, "item.tex", 6, 6).await;
- assert_eq!(links.len(), 1);
- let link = links.pop().unwrap();
- verify::origin_selection_range(&link, 6, 5, 6, 8);
- assert_eq!(link.target_uri, scenario.uri("item.tex").into());
- assert_eq!(link.target_range, Range::new_simple(0, 0, 4, 15));
- assert_eq!(link.target_selection_range, Range::new_simple(2, 9, 2, 20));
-}
-
-#[tokio::test]
-async fn section_link() {
- let (scenario, mut links) = run_link(SCENARIO, "section.tex", 6, 6).await;
- assert_eq!(links.len(), 1);
- let link = links.pop().unwrap();
- verify::origin_selection_range(&link, 6, 5, 6, 12);
- assert_eq!(link.target_uri, scenario.uri("section.tex").into());
- assert_eq!(link.target_range, Range::new_simple(0, 0, 3, 0));
- assert_eq!(link.target_selection_range, Range::new_simple(1, 0, 1, 15));
-}
-
-#[tokio::test]
-async fn theorem_link() {
- let (scenario, mut links) = run_link(SCENARIO, "theorem.tex", 8, 7).await;
- assert_eq!(links.len(), 1);
- let link = links.pop().unwrap();
- verify::origin_selection_range(&link, 8, 5, 8, 12);
- assert_eq!(link.target_uri, scenario.uri("theorem.tex").into());
- assert_eq!(link.target_range, Range::new_simple(3, 0, 6, 11));
- assert_eq!(link.target_selection_range, Range::new_simple(4, 0, 4, 15));
-}
diff --git a/support/texlab/tests/test_definition_latex_math_operator.rs b/support/texlab/tests/test_definition_latex_math_operator.rs
deleted file mode 100644
index 7cea12261d..0000000000
--- a/support/texlab/tests/test_definition_latex_math_operator.rs
+++ /dev/null
@@ -1,18 +0,0 @@
-pub mod support;
-
-use lsp_types::Range;
-use support::definition::*;
-use texlab::range::RangeExt;
-
-const SCENARIO: &str = "latex/math_operator";
-
-#[tokio::test]
-async fn link() {
- let (scenario, mut links) = run_link(SCENARIO, "foo.tex", 2, 2).await;
- assert_eq!(links.len(), 1);
- let link = links.pop().unwrap();
- verify::origin_selection_range(&link, 2, 0, 2, 4);
- assert_eq!(link.target_uri, scenario.uri("foo.tex").into());
- assert_eq!(link.target_range, Range::new_simple(0, 0, 0, 31));
- assert_eq!(link.target_selection_range, Range::new_simple(0, 0, 0, 31));
-}
diff --git a/support/texlab/tests/test_diagnostics_bibtex.rs b/support/texlab/tests/test_diagnostics_bibtex.rs
deleted file mode 100644
index 8198e9c152..0000000000
--- a/support/texlab/tests/test_diagnostics_bibtex.rs
+++ /dev/null
@@ -1,36 +0,0 @@
-pub mod support;
-
-use lsp_types::*;
-use std::sync::Arc;
-use support::*;
-use texlab::diagnostics::BibtexErrorCode;
-
-#[tokio::test]
-async fn did_change_update() {
- let scenario = Scenario::new("diagnostics/bibtex", Arc::new(Box::new(tex::Unknown)));
- scenario.open("foo.bib").await;
- {
- let diagnostics_by_uri = scenario.client.diagnostics_by_uri.lock().await;
- let diagnostics = &diagnostics_by_uri[&scenario.uri("foo.bib")];
- assert_eq!(diagnostics.len(), 1);
- assert_eq!(
- diagnostics[0].message,
- BibtexErrorCode::MissingBeginBrace.message()
- );
- assert_eq!(diagnostics[0].range.start.line, 0);
- }
- let params = DidChangeTextDocumentParams {
- text_document: VersionedTextDocumentIdentifier::new(scenario.uri("foo.bib").into(), 0),
- content_changes: vec![TextDocumentContentChangeEvent {
- range: None,
- range_length: None,
- text: "@article{foo,}\n".into(),
- }],
- };
- scenario.server.execute(|svr| svr.did_change(params)).await;
- {
- let diagnostics_by_uri = scenario.client.diagnostics_by_uri.lock().await;
- let diagnostics = &diagnostics_by_uri[&scenario.uri("foo.bib")];
- assert_eq!(diagnostics.len(), 0);
- }
-}
diff --git a/support/texlab/tests/test_diagnostics_build.rs b/support/texlab/tests/test_diagnostics_build.rs
deleted file mode 100644
index 9c953bee7a..0000000000
--- a/support/texlab/tests/test_diagnostics_build.rs
+++ /dev/null
@@ -1,25 +0,0 @@
-pub mod support;
-
-use std::sync::Arc;
-use support::*;
-use tokio::fs;
-
-#[tokio::test]
-async fn did_change_update() {
- let scenario = Scenario::new("diagnostics/build", Arc::new(Box::new(tex::Unknown)));
- scenario.open("foo.tex").await;
- {
- let diagnostics_by_uri = scenario.client.diagnostics_by_uri.lock().await;
- let diagnostics = &diagnostics_by_uri[&scenario.uri("foo.tex")];
- assert_eq!(diagnostics.len(), 1);
- assert_eq!(diagnostics[0].message, "Undefined control sequence.");
- }
- let log_path = scenario.uri("foo.log").to_file_path().unwrap();
- fs::write(log_path, "").await.unwrap();
- scenario.server.execute(|_| ()).await;
- {
- let diagnostics_by_uri = scenario.client.diagnostics_by_uri.lock().await;
- let diagnostics = &diagnostics_by_uri[&scenario.uri("foo.tex")];
- assert!(diagnostics.is_empty());
- }
-}
diff --git a/support/texlab/tests/test_folding.rs b/support/texlab/tests/test_folding.rs
deleted file mode 100644
index 0fafe553f0..0000000000
--- a/support/texlab/tests/test_folding.rs
+++ /dev/null
@@ -1,66 +0,0 @@
-pub mod support;
-
-use lsp_types::*;
-use support::folding::*;
-
-#[tokio::test]
-async fn bibtex() {
- let foldings = run("bar.bib").await;
- assert_eq!(
- foldings,
- vec![
- FoldingRange {
- start_line: 0,
- start_character: Some(0),
- end_line: 0,
- end_character: Some(23),
- kind: Some(FoldingRangeKind::Region)
- },
- FoldingRange {
- start_line: 2,
- start_character: Some(0),
- end_line: 2,
- end_character: Some(19),
- kind: Some(FoldingRangeKind::Region)
- },
- FoldingRange {
- start_line: 4,
- start_character: Some(0),
- end_line: 23,
- end_character: Some(0),
- kind: Some(FoldingRangeKind::Region)
- }
- ]
- );
-}
-
-#[tokio::test]
-async fn latex() {
- let foldings = run("foo.tex").await;
- assert_eq!(
- foldings,
- vec![
- FoldingRange {
- start_line: 4,
- start_character: Some(16),
- end_line: 12,
- end_character: Some(0),
- kind: Some(FoldingRangeKind::Region)
- },
- FoldingRange {
- start_line: 6,
- start_character: Some(13),
- end_line: 9,
- end_character: Some(0),
- kind: Some(FoldingRangeKind::Region)
- },
- FoldingRange {
- start_line: 8,
- start_character: Some(16),
- end_line: 9,
- end_character: Some(0),
- kind: Some(FoldingRangeKind::Region)
- },
- ]
- );
-}
diff --git a/support/texlab/tests/test_formatting_bibtex.rs b/support/texlab/tests/test_formatting_bibtex.rs
deleted file mode 100644
index 541b519d58..0000000000
--- a/support/texlab/tests/test_formatting_bibtex.rs
+++ /dev/null
@@ -1,34 +0,0 @@
-pub mod support;
-
-use lsp_types::*;
-use support::formatting::*;
-use texlab::formatting::bibtex::BibtexFormattingOptions;
-use texlab::range::RangeExt;
-
-#[tokio::test]
-async fn default_settings() {
- let (scenario, edits) = run_bibtex("default/unformatted.bib", None).await;
- assert_eq!(edits.len(), 1);
- assert_eq!(
- edits[0].new_text,
- scenario.read("default/formatted.bib").await
- );
- assert_eq!(edits[0].range, Range::new_simple(0, 0, 0, 52));
-}
-
-#[tokio::test]
-async fn infinite_line_length() {
- let (scenario, edits) = run_bibtex(
- "infinite_line_length/unformatted.bib",
- Some(BibtexFormattingOptions {
- line_length: Some(0),
- }),
- )
- .await;
- assert_eq!(edits.len(), 1);
- assert_eq!(
- edits[0].new_text,
- scenario.read("infinite_line_length/formatted.bib").await
- );
- assert_eq!(edits[0].range, Range::new_simple(0, 0, 0, 149));
-}
diff --git a/support/texlab/tests/test_hover_bibtex_field.rs b/support/texlab/tests/test_hover_bibtex_field.rs
deleted file mode 100644
index 06f12349ac..0000000000
--- a/support/texlab/tests/test_hover_bibtex_field.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-pub mod support;
-
-use lsp_types::*;
-use support::hover::*;
-use texlab::syntax::LANGUAGE_DATA;
-
-const SCENARIO: &str = "bibtex/field";
-
-#[tokio::test]
-async fn known() {
- let contents = run(SCENARIO, "foo.bib", 1, 4).await.unwrap();
- assert_eq!(
- contents,
- HoverContents::Markup(MarkupContent {
- kind: MarkupKind::Markdown,
- value: LANGUAGE_DATA
- .field_documentation("author")
- .unwrap()
- .to_owned()
- })
- );
-}
-
-#[tokio::test]
-async fn unknown() {
- let contents = run(SCENARIO, "foo.bib", 2, 5).await;
- assert_eq!(contents, None);
-}
diff --git a/support/texlab/tests/test_hover_bibtex_string_reference.rs b/support/texlab/tests/test_hover_bibtex_string_reference.rs
deleted file mode 100644
index d67f028990..0000000000
--- a/support/texlab/tests/test_hover_bibtex_string_reference.rs
+++ /dev/null
@@ -1,24 +0,0 @@
-pub mod support;
-
-use lsp_types::*;
-use support::hover::*;
-
-const SCENARIO: &str = "bibtex/string_reference";
-
-#[tokio::test]
-async fn valid() {
- let contents = run(SCENARIO, "foo.bib", 3, 15).await.unwrap();
- assert_eq!(
- contents,
- HoverContents::Markup(MarkupContent {
- kind: MarkupKind::PlainText,
- value: "\"foo {bar} baz\"".into(),
- })
- );
-}
-
-#[tokio::test]
-async fn invalid() {
- let contents = run(SCENARIO, "foo.bib", 3, 20).await;
- assert_eq!(contents, None);
-}
diff --git a/support/texlab/tests/test_hover_bibtex_type.rs b/support/texlab/tests/test_hover_bibtex_type.rs
deleted file mode 100644
index 23db7084d5..0000000000
--- a/support/texlab/tests/test_hover_bibtex_type.rs
+++ /dev/null
@@ -1,28 +0,0 @@
-pub mod support;
-
-use lsp_types::*;
-use support::hover::*;
-use texlab::syntax::LANGUAGE_DATA;
-
-const SCENARIO: &str = "bibtex/type";
-
-#[tokio::test]
-async fn known() {
- let contents = run(SCENARIO, "foo.bib", 0, 5).await.unwrap();
- assert_eq!(
- contents,
- HoverContents::Markup(MarkupContent {
- kind: MarkupKind::Markdown,
- value: LANGUAGE_DATA
- .entry_type_documentation("article")
- .unwrap()
- .to_owned()
- })
- );
-}
-
-#[tokio::test]
-async fn unknown() {
- let contents = run(SCENARIO, "foo.bib", 2, 2).await;
- assert_eq!(contents, None);
-}
diff --git a/support/texlab/tests/test_hover_latex_citation.rs b/support/texlab/tests/test_hover_latex_citation.rs
deleted file mode 100644
index cbefafd27b..0000000000
--- a/support/texlab/tests/test_hover_latex_citation.rs
+++ /dev/null
@@ -1,24 +0,0 @@
-pub mod support;
-
-use lsp_types::*;
-use support::hover::*;
-
-const SCENARIO: &str = "latex/citation";
-
-#[tokio::test]
-async fn valid() {
- let contents = run(SCENARIO, "foo.tex", 2, 7).await.unwrap();
- assert_eq!(
- contents,
- HoverContents::Markup(MarkupContent {
- kind: MarkupKind::Markdown,
- value: "Bar, F. (2019). *Baz Qux*.".into()
- })
- );
-}
-
-#[tokio::test]
-async fn invalid() {
- let contents = run(SCENARIO, "foo.bib", 3, 7).await;
- assert_eq!(contents, None);
-}
diff --git a/support/texlab/tests/test_hover_latex_component.rs b/support/texlab/tests/test_hover_latex_component.rs
deleted file mode 100644
index de5c9c8b6c..0000000000
--- a/support/texlab/tests/test_hover_latex_component.rs
+++ /dev/null
@@ -1,27 +0,0 @@
-pub mod support;
-
-use support::hover::*;
-
-const SCENARIO: &str = "latex/component";
-
-#[tokio::test]
-async fn class_known() {
- run(SCENARIO, "foo.tex", 0, 18).await.unwrap();
-}
-
-#[tokio::test]
-async fn class_unknown() {
- let contents = run(SCENARIO, "foo.tex", 2, 16).await;
- assert_eq!(contents, None);
-}
-
-#[tokio::test]
-async fn package_known() {
- run(SCENARIO, "foo.tex", 1, 17).await.unwrap();
-}
-
-#[tokio::test]
-async fn package_unknown() {
- let contents = run(SCENARIO, "foo.tex", 3, 14).await;
- assert_eq!(contents, None);
-}
diff --git a/support/texlab/tests/test_hover_latex_label.rs b/support/texlab/tests/test_hover_latex_label.rs
deleted file mode 100644
index 94a96ad533..0000000000
--- a/support/texlab/tests/test_hover_latex_label.rs
+++ /dev/null
@@ -1,59 +0,0 @@
-pub mod support;
-
-use lsp_types::*;
-use std::sync::Arc;
-use support::capabilities::CLIENT_FULL_CAPABILITIES;
-use support::*;
-use tokio::fs;
-
-const SCENARIO: &str = "hover/latex/label";
-
-#[tokio::test]
-async fn reload_aux() {
- let scenario = Scenario::new(SCENARIO, Arc::new(Box::new(tex::Unknown)));
- scenario.initialize(&CLIENT_FULL_CAPABILITIES).await;
- scenario.open("section.tex").await;
- let position = Position::new(3, 10);
- let identifier = TextDocumentIdentifier::new(scenario.uri("section.tex").into());
- let params = TextDocumentPositionParams::new(identifier, position);
- let contents = scenario
- .server
- .execute_async(|svr| svr.hover(params.clone()))
- .await
- .unwrap()
- .unwrap()
- .contents;
-
- assert_eq!(
- contents,
- HoverContents::Markup(MarkupContent {
- kind: MarkupKind::PlainText,
- value: "Section (Foo)".into()
- })
- );
-
- let aux_path = scenario
- .uri("section.tex")
- .to_file_path()
- .unwrap()
- .with_extension("aux");
- fs::write(aux_path, "\\newlabel{sec:foo}{{1}{1}}")
- .await
- .unwrap();
-
- let contents = scenario
- .server
- .execute_async(|svr| svr.hover(params))
- .await
- .unwrap()
- .unwrap()
- .contents;
-
- assert_eq!(
- contents,
- HoverContents::Markup(MarkupContent {
- kind: MarkupKind::PlainText,
- value: "Section 1 (Foo)".into()
- })
- );
-}
diff --git a/support/texlab/tests/test_symbol_hierarchical.rs b/support/texlab/tests/test_symbol_hierarchical.rs
deleted file mode 100644
index d83c0db455..0000000000
--- a/support/texlab/tests/test_symbol_hierarchical.rs
+++ /dev/null
@@ -1,167 +0,0 @@
-pub mod support;
-
-use lsp_types::Range;
-use support::symbol::*;
-use texlab::range::RangeExt;
-
-#[tokio::test]
-async fn enumerate() {
- let mut symbols = run_hierarchical("enumerate.tex").await;
- assert_eq!(symbols.len(), 1);
- verify::symbol(
- &symbols[0],
- "Enumerate",
- None,
- Range::new_simple(4, 0, 9, 15),
- Range::new_simple(4, 0, 9, 15),
- );
-
- let children = symbols[0].children.take().unwrap();
- assert_eq!(children.len(), 4);
- verify::symbol(
- &children[0],
- "1",
- Some("it:foo"),
- Range::new_simple(5, 9, 5, 23),
- Range::new_simple(5, 4, 6, 4),
- );
- verify::symbol(
- &children[1],
- "Item",
- Some("it:bar"),
- Range::new_simple(6, 9, 6, 23),
- Range::new_simple(6, 4, 7, 4),
- );
- verify::symbol(
- &children[2],
- "Baz",
- None,
- Range::new_simple(7, 4, 7, 14),
- Range::new_simple(7, 4, 8, 4),
- );
- verify::symbol(
- &children[3],
- "Qux",
- Some("it:qux"),
- Range::new_simple(8, 14, 8, 28),
- Range::new_simple(8, 4, 9, 0),
- );
-}
-
-#[tokio::test]
-async fn equation() {
- let symbols = run_hierarchical("equation.tex").await;
- assert_eq!(symbols.len(), 3);
- verify::symbol(
- &symbols[0],
- "Equation (1)",
- Some("eq:foo"),
- Range::new_simple(4, 16, 4, 30),
- Range::new_simple(4, 0, 6, 14),
- );
- verify::symbol(
- &symbols[1],
- "Equation",
- Some("eq:bar"),
- Range::new_simple(8, 16, 8, 30),
- Range::new_simple(8, 0, 10, 14),
- );
- verify::symbol(
- &symbols[2],
- "Equation",
- None,
- Range::new_simple(12, 0, 14, 14),
- Range::new_simple(12, 0, 14, 14),
- );
-}
-
-#[tokio::test]
-async fn float() {
- let symbols = run_hierarchical("float.tex").await;
- assert_eq!(symbols.len(), 3);
- verify::symbol(
- &symbols[0],
- "Figure 1: Foo",
- Some("fig:foo"),
- Range::new_simple(6, 17, 6, 32),
- Range::new_simple(4, 0, 7, 12),
- );
- verify::symbol(
- &symbols[1],
- "Figure: Bar",
- Some("fig:bar"),
- Range::new_simple(11, 17, 11, 32),
- Range::new_simple(9, 0, 12, 12),
- );
- verify::symbol(
- &symbols[2],
- "Figure: Baz",
- None,
- Range::new_simple(14, 0, 17, 12),
- Range::new_simple(14, 0, 17, 12),
- );
-}
-
-#[tokio::test]
-async fn section() {
- let mut symbols = run_hierarchical("section.tex").await;
- assert_eq!(symbols.len(), 2);
- verify::symbol(
- &symbols[0],
- "Foo",
- None,
- Range::new_simple(4, 0, 4, 13),
- Range::new_simple(4, 0, 6, 0),
- );
- verify::symbol(
- &symbols[1],
- "2 Bar",
- Some("sec:bar"),
- Range::new_simple(6, 0, 6, 13),
- Range::new_simple(6, 0, 10, 0),
- );
-
- let children = symbols[1].children.take().unwrap();
- assert_eq!(children.len(), 1);
- verify::symbol(
- &children[0],
- "Baz",
- Some("sec:baz"),
- Range::new_simple(8, 0, 8, 16),
- Range::new_simple(8, 0, 10, 0),
- );
-}
-
-#[tokio::test]
-async fn theorem() {
- let symbols = run_hierarchical("theorem.tex").await;
- assert_eq!(symbols.len(), 4);
- verify::symbol(
- &symbols[0],
- "Lemma 1 (Foo)",
- Some("thm:foo"),
- Range::new_simple(6, 18, 6, 33),
- Range::new_simple(6, 0, 8, 11),
- );
- verify::symbol(
- &symbols[1],
- "Lemma 2",
- Some("thm:bar"),
- Range::new_simple(10, 13, 10, 28),
- Range::new_simple(10, 0, 12, 11),
- );
- verify::symbol(
- &symbols[2],
- "Lemma",
- Some("thm:baz"),
- Range::new_simple(14, 13, 14, 28),
- Range::new_simple(14, 0, 16, 11),
- );
- verify::symbol(
- &symbols[3],
- "Lemma (Qux)",
- None,
- Range::new_simple(18, 0, 20, 11),
- Range::new_simple(18, 0, 20, 11),
- );
-}
diff --git a/support/texlab/tests/test_symbol_workspace.rs b/support/texlab/tests/test_symbol_workspace.rs
deleted file mode 100644
index cb6421c086..0000000000
--- a/support/texlab/tests/test_symbol_workspace.rs
+++ /dev/null
@@ -1,48 +0,0 @@
-pub mod support;
-
-use support::symbol::*;
-
-#[tokio::test]
-async fn filter_type_section() {
- let (scenario, symbols) = run_workspace("section").await;
- assert_eq!(symbols.len(), 4);
- verify::symbol_info(&symbols[0], &scenario, "foo.tex", "1 Foo", 07, 0, 13, 0);
- verify::symbol_info(&symbols[1], &scenario, "foo.tex", "2 Bar", 13, 0, 21, 0);
- verify::symbol_info(&symbols[2], &scenario, "foo.tex", "3 Baz", 21, 0, 29, 0);
- verify::symbol_info(&symbols[3], &scenario, "foo.tex", "4 Qux", 29, 0, 37, 0);
-}
-
-#[tokio::test]
-async fn filter_type_figure() {
- let (scenario, symbols) = run_workspace("figure").await;
- assert_eq!(symbols.len(), 1);
- let name = "Figure 1: Bar";
- verify::symbol_info(&symbols[0], &scenario, "foo.tex", name, 15, 0, 19, 12);
-}
-
-#[tokio::test]
-async fn filter_type_item() {
- let (scenario, symbols) = run_workspace("item").await;
- assert_eq!(symbols.len(), 3);
- verify::symbol_info(&symbols[0], &scenario, "foo.tex", "1", 24, 4, 25, 4);
- verify::symbol_info(&symbols[1], &scenario, "foo.tex", "2", 25, 4, 26, 4);
- verify::symbol_info(&symbols[2], &scenario, "foo.tex", "3", 26, 4, 27, 0);
-}
-
-#[tokio::test]
-async fn filter_type_math() {
- let (scenario, symbols) = run_workspace("math").await;
- assert_eq!(symbols.len(), 2);
- let name1 = "Equation (1)";
- let name2 = "Lemma 1 (Qux)";
- verify::symbol_info(&symbols[0], &scenario, "foo.tex", name1, 9, 0, 11, 14);
- verify::symbol_info(&symbols[1], &scenario, "foo.tex", name2, 33, 0, 35, 11);
-}
-
-#[tokio::test]
-async fn filter_bibtex() {
- let (scenario, symbols) = run_workspace("bibtex").await;
- assert_eq!(symbols.len(), 2);
- verify::symbol_info(&symbols[0], &scenario, "bar.bib", "foo", 0, 0, 0, 14);
- verify::symbol_info(&symbols[1], &scenario, "bar.bib", "bar", 2, 0, 2, 20);
-}
diff --git a/support/texlab/texlab.1 b/support/texlab/texlab.1
index c2ff8ba66e..8dd6b664a4 100644
--- a/support/texlab/texlab.1
+++ b/support/texlab/texlab.1
@@ -1,38 +1,26 @@
-.TH TEXLAB 1
+.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.15.
+.TH TEXLAB "1" "May 2020" "texlab " "User Commands"
.SH NAME
-texlab \- An implementation of the Language Server Protocol for LaTeX
-.SH SYNOPSIS
-\fBtexlab\fR [FLAGS]
-.SH FLAGS
+texlab \- manual page for texlab
+.SH DESCRIPTION
+An implementation of the Language Server Protocol for LaTeX
+.SS "USAGE:"
+.IP
+texlab [FLAGS] [OPTIONS]
+.SS "FLAGS:"
.TP
-\fB\-v\fR
-Increase message verbosity
-
+\fB\-h\fR, \fB\-\-help\fR
+Prints help information
.TP
\fB\-q\fR, \fB\-\-quiet\fR
No output printed to stderr
-.SH EXIT STATUS
.TP
-\fB0\fR
-Successful program execution.
-
+\fB\-V\fR, \fB\-\-version\fR
+Prints version information
.TP
-\fB1\fR
-Unsuccessful program execution.
-
+\fB\-v\fR, \fB\-\-verbosity\fR
+Increase message verbosity (\fB\-vvvv\fR for max verbosity)
+.SS "OPTIONS:"
.TP
-\fB101\fR
-The program panicked.
-.SH EXAMPLES
-.TP
-Run with debug verbosity
-\fB$ texlab \-vvv\fR
-.br
-Debug Mode: texlab will print debug messages to stderr
-
-.SH AUTHORS
-.P
-.RS 2
-.nf
-Eric Förster <eric.foerster@outlook.com>
-Patrick Förster <patrick.foerster@outlook.de>
+\fB\-\-log\-file\fR <FILE>
+Write the logging output to FILE
diff --git a/support/texlab/texlab.pdf b/support/texlab/texlab.pdf
new file mode 100644
index 0000000000..bf485f9295
--- /dev/null
+++ b/support/texlab/texlab.pdf
Binary files differ