summaryrefslogtreecommitdiff
path: root/support
diff options
context:
space:
mode:
Diffstat (limited to 'support')
-rw-r--r--support/bib2gls/CHANGES5
-rw-r--r--support/bib2gls/bib2gls-begin.pdfbin726572 -> 726550 bytes
-rw-r--r--support/bib2gls/bib2gls.12
-rw-r--r--support/bib2gls/bib2gls.pdfbin4692176 -> 4692754 bytes
-rw-r--r--support/bib2gls/convertgls2bib.12
-rw-r--r--support/bib2gls/examples/sample-authors.pdfbin49007 -> 49018 bytes
-rw-r--r--support/bib2gls/examples/sample-bacteria.pdfbin50457 -> 50469 bytes
-rw-r--r--support/bib2gls/examples/sample-chemical.pdfbin50249 -> 50259 bytes
-rw-r--r--support/bib2gls/examples/sample-citations.pdfbin47241 -> 47253 bytes
-rw-r--r--support/bib2gls/examples/sample-constants.pdfbin89380 -> 89393 bytes
-rw-r--r--support/bib2gls/examples/sample-hierarchical.pdfbin49656 -> 49667 bytes
-rw-r--r--support/bib2gls/examples/sample-markuplanguages.pdfbin56324 -> 56336 bytes
-rw-r--r--support/bib2gls/examples/sample-maths.pdfbin110925 -> 110937 bytes
-rw-r--r--support/bib2gls/examples/sample-media.pdfbin160836 -> 160849 bytes
-rw-r--r--support/bib2gls/examples/sample-msymbols.pdfbin103819 -> 103831 bytes
-rw-r--r--support/bib2gls/examples/sample-multi1.pdfbin243149 -> 243161 bytes
-rw-r--r--support/bib2gls/examples/sample-multi2.pdfbin318033 -> 318047 bytes
-rw-r--r--support/bib2gls/examples/sample-nested.pdfbin49664 -> 49676 bytes
-rw-r--r--support/bib2gls/examples/sample-people.pdfbin47742 -> 47754 bytes
-rw-r--r--support/bib2gls/examples/sample-textsymbols.pdfbin69791 -> 69804 bytes
-rw-r--r--support/bib2gls/examples/sample-textsymbols2.pdfbin67001 -> 67011 bytes
-rw-r--r--support/bib2gls/examples/sample-units1.pdfbin53003 -> 53015 bytes
-rw-r--r--support/bib2gls/examples/sample-units2.pdfbin54745 -> 54758 bytes
-rw-r--r--support/bib2gls/examples/sample-units3.pdfbin41132 -> 41145 bytes
-rw-r--r--support/bib2gls/examples/sample-usergroups.pdfbin23838 -> 23840 bytes
-rw-r--r--support/latexdiff/Makefile12
-rw-r--r--support/latexdiff/README6
-rwxr-xr-xsupport/latexdiff/contrib/latexdiff-wrap4
-rw-r--r--support/latexdiff/doc/latexdiff-man.pdfbin274601 -> 282069 bytes
-rw-r--r--support/latexdiff/doc/latexdiff-man.tex6
-rwxr-xr-xsupport/latexdiff/latexdiff318
-rwxr-xr-xsupport/latexdiff/latexdiff-fast320
-rwxr-xr-xsupport/latexdiff/latexdiff-so320
-rwxr-xr-xsupport/latexdiff/latexdiff-vc23
-rw-r--r--support/latexdiff/latexdiff-vc.120
-rw-r--r--support/latexdiff/latexdiff.120
-rwxr-xr-xsupport/latexdiff/latexrevise58
-rw-r--r--support/latexdiff/latexrevise.19
-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
433 files changed, 22811 insertions, 130462 deletions
diff --git a/support/bib2gls/CHANGES b/support/bib2gls/CHANGES
index 7f1d128d1a..fa3ebe1b29 100644
--- a/support/bib2gls/CHANGES
+++ b/support/bib2gls/CHANGES
@@ -1,3 +1,8 @@
+v2.4 (2020-05-27):
+
+ * Bug fix (issue in TeX parser library used by bib2gls)
+ https://github.com/nlct/texparser/issues/3
+
v2.3 (2020-03-23):
* New sort methods: recordcount and recordcount-reverse
diff --git a/support/bib2gls/bib2gls-begin.pdf b/support/bib2gls/bib2gls-begin.pdf
index 0511e6a2cd..e2a0d87ca7 100644
--- a/support/bib2gls/bib2gls-begin.pdf
+++ b/support/bib2gls/bib2gls-begin.pdf
Binary files differ
diff --git a/support/bib2gls/bib2gls.1 b/support/bib2gls/bib2gls.1
index 55d4579a25..71b97ad0e8 100644
--- a/support/bib2gls/bib2gls.1
+++ b/support/bib2gls/bib2gls.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 4.12 (Pod::Simple 3.39)
+.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.40)
.\"
.\" Standard preamble:
.\" ========================================================================
diff --git a/support/bib2gls/bib2gls.pdf b/support/bib2gls/bib2gls.pdf
index 1ec0b544ba..5b80ab0d41 100644
--- a/support/bib2gls/bib2gls.pdf
+++ b/support/bib2gls/bib2gls.pdf
Binary files differ
diff --git a/support/bib2gls/convertgls2bib.1 b/support/bib2gls/convertgls2bib.1
index 4c44b2b86a..d648d74252 100644
--- a/support/bib2gls/convertgls2bib.1
+++ b/support/bib2gls/convertgls2bib.1
@@ -1,4 +1,4 @@
-.\" Automatically generated by Pod::Man 4.12 (Pod::Simple 3.39)
+.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.40)
.\"
.\" Standard preamble:
.\" ========================================================================
diff --git a/support/bib2gls/examples/sample-authors.pdf b/support/bib2gls/examples/sample-authors.pdf
index 9313283211..90e7ac5334 100644
--- a/support/bib2gls/examples/sample-authors.pdf
+++ b/support/bib2gls/examples/sample-authors.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-bacteria.pdf b/support/bib2gls/examples/sample-bacteria.pdf
index 4bea556abd..efc97d8e41 100644
--- a/support/bib2gls/examples/sample-bacteria.pdf
+++ b/support/bib2gls/examples/sample-bacteria.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-chemical.pdf b/support/bib2gls/examples/sample-chemical.pdf
index a40807a98f..7c5fbe9011 100644
--- a/support/bib2gls/examples/sample-chemical.pdf
+++ b/support/bib2gls/examples/sample-chemical.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-citations.pdf b/support/bib2gls/examples/sample-citations.pdf
index af0ca7379d..87d9cf70ea 100644
--- a/support/bib2gls/examples/sample-citations.pdf
+++ b/support/bib2gls/examples/sample-citations.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-constants.pdf b/support/bib2gls/examples/sample-constants.pdf
index f940272f17..135eec144e 100644
--- a/support/bib2gls/examples/sample-constants.pdf
+++ b/support/bib2gls/examples/sample-constants.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-hierarchical.pdf b/support/bib2gls/examples/sample-hierarchical.pdf
index e33b240606..2daf8a48af 100644
--- a/support/bib2gls/examples/sample-hierarchical.pdf
+++ b/support/bib2gls/examples/sample-hierarchical.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-markuplanguages.pdf b/support/bib2gls/examples/sample-markuplanguages.pdf
index 6688825d48..22f329333f 100644
--- a/support/bib2gls/examples/sample-markuplanguages.pdf
+++ b/support/bib2gls/examples/sample-markuplanguages.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-maths.pdf b/support/bib2gls/examples/sample-maths.pdf
index 43cd7710df..abbffb6a17 100644
--- a/support/bib2gls/examples/sample-maths.pdf
+++ b/support/bib2gls/examples/sample-maths.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-media.pdf b/support/bib2gls/examples/sample-media.pdf
index 1369546ba4..a40a38399c 100644
--- a/support/bib2gls/examples/sample-media.pdf
+++ b/support/bib2gls/examples/sample-media.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-msymbols.pdf b/support/bib2gls/examples/sample-msymbols.pdf
index 2b066570ab..2d0f48e67b 100644
--- a/support/bib2gls/examples/sample-msymbols.pdf
+++ b/support/bib2gls/examples/sample-msymbols.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-multi1.pdf b/support/bib2gls/examples/sample-multi1.pdf
index 49cc35baaf..f6494746d3 100644
--- a/support/bib2gls/examples/sample-multi1.pdf
+++ b/support/bib2gls/examples/sample-multi1.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-multi2.pdf b/support/bib2gls/examples/sample-multi2.pdf
index 90cdb481e9..d3898cedae 100644
--- a/support/bib2gls/examples/sample-multi2.pdf
+++ b/support/bib2gls/examples/sample-multi2.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-nested.pdf b/support/bib2gls/examples/sample-nested.pdf
index 8286cb0643..4c9af1c512 100644
--- a/support/bib2gls/examples/sample-nested.pdf
+++ b/support/bib2gls/examples/sample-nested.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-people.pdf b/support/bib2gls/examples/sample-people.pdf
index e56463c5cb..a8533a742f 100644
--- a/support/bib2gls/examples/sample-people.pdf
+++ b/support/bib2gls/examples/sample-people.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-textsymbols.pdf b/support/bib2gls/examples/sample-textsymbols.pdf
index 1b7fbffb08..3414021233 100644
--- a/support/bib2gls/examples/sample-textsymbols.pdf
+++ b/support/bib2gls/examples/sample-textsymbols.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-textsymbols2.pdf b/support/bib2gls/examples/sample-textsymbols2.pdf
index a9a33d0750..2e9da82f41 100644
--- a/support/bib2gls/examples/sample-textsymbols2.pdf
+++ b/support/bib2gls/examples/sample-textsymbols2.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-units1.pdf b/support/bib2gls/examples/sample-units1.pdf
index 82a539f6db..feb02bbc2f 100644
--- a/support/bib2gls/examples/sample-units1.pdf
+++ b/support/bib2gls/examples/sample-units1.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-units2.pdf b/support/bib2gls/examples/sample-units2.pdf
index 2bdd998fac..764ca3a8f4 100644
--- a/support/bib2gls/examples/sample-units2.pdf
+++ b/support/bib2gls/examples/sample-units2.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-units3.pdf b/support/bib2gls/examples/sample-units3.pdf
index c8a6133657..9a5e55bd64 100644
--- a/support/bib2gls/examples/sample-units3.pdf
+++ b/support/bib2gls/examples/sample-units3.pdf
Binary files differ
diff --git a/support/bib2gls/examples/sample-usergroups.pdf b/support/bib2gls/examples/sample-usergroups.pdf
index 2b0a48ce12..f87b928c2e 100644
--- a/support/bib2gls/examples/sample-usergroups.pdf
+++ b/support/bib2gls/examples/sample-usergroups.pdf
Binary files differ
diff --git a/support/latexdiff/Makefile b/support/latexdiff/Makefile
index 143ddd213c..cc5eb5ab79 100644
--- a/support/latexdiff/Makefile
+++ b/support/latexdiff/Makefile
@@ -12,7 +12,7 @@ default:
@echo " of the PERL package Algorithm::Diff available from "
@echo " the PERL archive www.cpan.org)"
@echo " "
- @echo "To install fast version (using UNIX diff) type: make install fast "
+ @echo "To install fast version (using UNIX diff) type: make install-fast "
@echo " "
@echo "To install the version which uses the system Algorithm::Diff package type: make install-ext"
@echo " "
@@ -62,3 +62,13 @@ test-fast:
@echo "latexdiff example/example-draft.tex example/example-rev.tex (stand-alone version)"
./latexdiff-fast -V example/example-draft.tex example/example-rev.tex > example/example-diff.tex
@echo "Difference file created: example/example-diff.tex"
+
+uninstall:
+# -f is needed to ignore missing files
+ @rm -f $(INSTALLPATH)/bin/latexdiff{,-cvs,-git,-hg,-rcs,-so,-svn,-vc,-fast} $(INSTALLPATH)/bin/latexrevise
+ @rm -f $(INSTALLPATH)/man/man1/latex{diff{,-vc},revise}.1
+# maybe remove potentially empty directories
+ @rmdir --ignore-fail-on-non-empty $(INSTALLPATH)/bin
+ @rmdir --ignore-fail-on-non-empty $(INSTALLPATH)/man/man1
+ @rmdir --ignore-fail-on-non-empty $(INSTALLPATH)/man
+ @rmdir --ignore-fail-on-non-empty $(INSTALLPATH)
diff --git a/support/latexdiff/README b/support/latexdiff/README
index b75fa841bc..6f4d1a280a 100644
--- a/support/latexdiff/README
+++ b/support/latexdiff/README
@@ -9,7 +9,7 @@ the latex source. Note that only files conforming to latex syntax will
be processed correctly, not generic TeX files. Some further
minor restrictions apply, see documentation.
-A rudimentary revision facilility is provided by another Perl script,
+A rudimentary revision facility is provided by another Perl script,
latexrevise, which accepts or rejects all changes. Manual
editing of the difference file can be used to override this default
behaviour and accept or reject selected changes only.
@@ -90,7 +90,7 @@ latexdiff-wrap (Author: V. Kuhlmann) An alternative wrapper script which can be
latexdiff.spec (Author: T. Doerges) spec file for RPM generation
-latexchanges (Author: Jan-Ake Larsson) Wrapper script for applying latexdiff with numbered documen version
+latexchanges (Author: Jan-Ake Larsson) Wrapper script for applying latexdiff with numbered document version
(see contrib/README.latexchanges for a more detailed description)
Contributions by the following authors were incorporated into the latexdiff code, or inspired me to
@@ -101,7 +101,7 @@ EXTERNAL LATEXDIFF SUPPORT PROGRAMS
LATEXDIFFCITE (Author: Christer van der Meeren) is a wrapper around latexdiff to make citations diff properly. It works by expanding \cite type commands using the bbl or bib file, such that citations are treated just like normal text rather than as atomic in the plain latexdiff.
https://latexdiffcite.readthedocs.org
-GIT-LATEXDIFF (lead author: Matthieu Moy) is a wrapper (bash scipt) around latexdiff that allows using it to diff two revisions of a LaTeX file under git revision control (similar functionality is provided by latexdiff-vc --git with --flatten option included with this distribution but git-latexdiff allows more fine-grained control on (not to be confused with latexdiff-git, which is normally installed as a soft link to latexdiff-vc)
+GIT-LATEXDIFF (lead author: Matthieu Moy) is a wrapper (bash script) around latexdiff that allows using it to diff two revisions of a LaTeX file under git revision control (similar functionality is provided by latexdiff-vc --git with --flatten option included with this distribution but git-latexdiff allows more fine-grained control on (not to be confused with latexdiff-git, which is normally installed as a soft link to latexdiff-vc)
https://gitorious.org/git-latexdiff/
LICENSE (also see file COPYING)
diff --git a/support/latexdiff/contrib/latexdiff-wrap b/support/latexdiff/contrib/latexdiff-wrap
index 894b424de3..ed569d6095 100755
--- a/support/latexdiff/contrib/latexdiff-wrap
+++ b/support/latexdiff/contrib/latexdiff-wrap
@@ -3,7 +3,7 @@
# latexdiff-wrap
#
# Wrapper for latexdiff, to
-# * provide support for documents consiting of more than 1 latex file
+# * provide support for documents consisting of more than 1 latex file
# * provide my common arguments
#
# Copyright (C) by Volker Kuhlmann <VolkerKuhlmann@gmx.de>
@@ -174,7 +174,7 @@ while [ $# -gt 0 ]; do
)
else
# Delete file, to make sure it's not clobbered by redirecting stdout
- # in case it's a symlink to te original.
+ # in case it's a symlink to the original.
test -f "$diffdir/$file" && (set -x
rm "$diffdir/$file"
)
diff --git a/support/latexdiff/doc/latexdiff-man.pdf b/support/latexdiff/doc/latexdiff-man.pdf
index 32bfa06e2b..d5a97b67cd 100644
--- a/support/latexdiff/doc/latexdiff-man.pdf
+++ b/support/latexdiff/doc/latexdiff-man.pdf
Binary files differ
diff --git a/support/latexdiff/doc/latexdiff-man.tex b/support/latexdiff/doc/latexdiff-man.tex
index 1059eb25a3..828f598b2b 100644
--- a/support/latexdiff/doc/latexdiff-man.tex
+++ b/support/latexdiff/doc/latexdiff-man.tex
@@ -20,7 +20,7 @@ latex packages such as {\em color.sty}. Changes not directly affecting visible
text, for example in formatting commands, are still marked in the
latex source.
-A rudimentary revision facilility is provided by another Perl script,
+A rudimentary revision facility is provided by another Perl script,
{\em latexrevise}, which accepts or rejects all changes. Manual editing
of the difference file can be used to override this default behaviour
and accept or reject selected changes only.
@@ -201,7 +201,7 @@ To compare both revisions, type
latexdiff -t UNDERLINE example-draft.tex example-rev.tex > example-diff.tex
\end{verbatim}
This results in the following difference file (a few newlines have been
-added in this listing for legibility reasosn):
+added in this listing for legibility reasons):
{\scriptsize
\begin{verbatim}
\documentclass[12pt,a4paper]{article}
@@ -359,7 +359,7 @@ The following is an incomplete list of wrappers written by others providing some
\begin{description}
\item[latexdiffcite] (Author: Christer van der Meeren) is a wrapper around latexdiff to make citations diff properly. It works by expanding \verb|\cite| type commands using the bbl or bib file, such that citations are treated just like normal text rather than as atomic in the plain latexdiff. \\
\verb|https://latexdiffcite.readthedocs.org|
-\item[git-latexdiff] (lead author: Matthieu Moy) is a wrapper (bash scipt) around latexdiff that allows using it to diff two revisions of a LaTeX file under git revision control Similar functionality is provided by \verb|latexdiff-vc --git| with \verb|--flatten| option included with this distribution but git-latexdiff allows more fine-grained control on varous aspects. (Not to be confused with latexdiff-git, which is normally installed as a soft link to latexdiff-vc) \\
+\item[git-latexdiff] (lead author: Matthieu Moy) is a wrapper (bash script) around latexdiff that allows using it to diff two revisions of a \LaTeX file under git revision control Similar functionality is provided by \verb|latexdiff-vc --git| with \verb|--flatten| option included with this distribution but git-latexdiff allows more fine-grained control on various aspects. (Not to be confused with latexdiff-git, which is normally installed as a soft link to latexdiff-vc) \\
\verb|https://gitorious.org/git-latexdiff/|
\end{description}
diff --git a/support/latexdiff/latexdiff b/support/latexdiff/latexdiff
index 227cc2c45e..b8fde01b78 100755
--- a/support/latexdiff/latexdiff
+++ b/support/latexdiff/latexdiff
@@ -23,6 +23,25 @@
# Detailed usage information at the end of the file
#
+
+# Version 1.3.1
+# Bug fixes:
+# - remove some uninitialised variable $2 warnings in string substitution in flatten function in case included file is not found
+# - add minimal postprocessing to diff processing of preamble commands (replace \RIGHTBRACE by \} )
+# - pre-processing: replace (contributed) routine take_comments_and_enter_from_frac() with take_comments_and_newline_from_frac(), which does the same thing
+# (remove whitespace characters and comments between the argument of \frac commands) in an easier and more robust way. In addition, it
+# will replace commands like \frac12 with \frac{1}{2} as pre-processing step. Fixes issue #184
+# - add "intertext" to list of unsafe math commands @UNSAFEMATHCMD . Fixes issue #179
+# - provide citation command patterns for biblatex and protect them with mbox'es. Fixes issue #199
+# - hardcode number of parameters for \href and \url commands to allow spaces between commands and arguments even if --allow-spaces option is not used (this
+# is needed because some bibliography styles add such in-command-sequence spaces) Fixes issues: #178 #198
+# - bibitem is now kept even in deleted blocks such that deleted references show up properly (this implies that the actual numbers in numerical referencing schemes will change)
+# (this is implemented by introducing a new class of commands KEEPCMD , which are kept as is in deleted environments (no effect in added environments). Currently
+# \bibitem is hardwired to be the only member of this class (fixes issue #194, #174)
+# Features:
+# - add some special processing for revtex bibliography commands, so that the spaces between bibliography commands \bibfield and \bibinfo and their arguments are ignored.
+# (fixes issue #194, should fix #174)
+#
# Version 1.3.0 (7 October 2018):
# - treat options to \documentclass as potential package names (some packages allow implicit loading of or imply selected packages
# - improved pattern matching: now allows nested angular brackets, and is no longer confused by escaped curly braces
@@ -34,6 +53,9 @@
# - added to textcmds: \intertext
# - new config variable CUSTOMDIFCMD to allow defining special versions of commands in added or deleted blocks (Pull request by github user jprotze)
# - added option -no-links (mostly for use by latexdiff-vc in only-changes modes) (Pull request by github user jprotze)
+# - new option --filter-script to run both input through a pre-processing script (PR jasonmccsmith #167)
+# new option --no-filter-stderr to hide stderr output from filter-script (potentially dangerous, as this might hide malfunctioning of filter scripts)
+# - --flatten now can deal with imports made using the import package {PR jasonmccsmith #173)
# Bug fixes:
# - pattern matching of \verb and \lstinline commands had an error which meant they would trigger on commands beginning with \verb.
# - In description environments, mark up item descriptions by effectively reating the insides of item commannds as text commands (fixes #161)
@@ -173,11 +195,13 @@ use strict ;
use warnings;
use utf8 ;
+use File::Spec ;
+
my ($algodiffversion)=split(/ /,$Algorithm::Diff::VERSION);
my ($versionstring)=<<EOF ;
-This is LATEXDIFF 1.3.0 (Algorithm::Diff $Algorithm::Diff::VERSION, Perl $^V)
+This is LATEXDIFF 1.3.1a (Algorithm::Diff $Algorithm::Diff::VERSION, Perl $^V)
(c) 2004-2018 F J Tilmann
EOF
@@ -198,7 +222,7 @@ my %CONFIG=(
COUNTERCMD => undef,
# COUNTERCMD textcmds which are associated with a counter
# If any of these commands occur in a deleted block
- # they will be succeeded by an \addtocounter{...}{-1}
+ # they will be followed by an \addtocounter{...}{-1}
# for the associated counter such that the overall numbers
# should be the same as in the new file
LISTENV => undef , # list making environments - they will generally be kept
@@ -247,7 +271,7 @@ my ($ARRENV,
my $LABELCMD='(?:label)'; # matching commands are disabled within deleted blocks - mostly useful for maths mode, as otherwise it would be fine to just not add those to SAFECMDLIST
-my @UNSAFEMATHCMD=('qedhere'); # Commands which are definitely unsafe for marking up in math mode (amsmath qedhere only tested to not work with UNDERLINE markup) (only affects WHOLE and COARSE math markup modes). Note that unlike text mode (or FINE math mode0 deleted unsafe commands are not deleted but simply taken outside \DIFdel
+my @UNSAFEMATHCMD=('qedhere','intertext'); # Commands which are definitely unsafe for marking up in math mode (amsmath qedhere only tested to not work with UNDERLINE markup) (only affects WHOLE and COARSE math markup modes). Note that unlike text mode (or FINE math mode0 deleted unsafe commands are not deleted but simply taken outside \DIFdel
my $MBOXINLINEMATH=0; # if set to 1 then surround marked-up inline maths expression with \mbox ( to get around compatibility
# problems between some maths packages and ulem package
@@ -302,6 +326,8 @@ our @SAFECMDEXCL=();
my @MBOXCMDLIST=(); # patterns for commands which are in principle safe but which need to be surrounded by an \mbox
my @MBOXCMDEXCL=(); # all the patterns in MBOXCMDLIST will be appended to SAFECMDLIST
+my @KEEPCMDLIST=( qr/^bibitem$/ ); # patterns for commands which should not be deleted in nominally delete text passages
+my @KEEPCMDEXCL=();
my ($i,$j,$l);
my ($old,$new);
@@ -315,6 +341,7 @@ my ($oldpost, $newpost);
my ($diffall);
# Option names
my ($type,$subtype,$floattype,$config,$preamblefile,$encoding,$nolabel,$visiblelabel,
+ $filterscript,$ignorefilterstderr,
$showpreamble,$showsafe,$showtext,$showconfig,$showall,
$replacesafe,$appendsafe,$excludesafe,
$replacetext,$appendtext,$excludetext,
@@ -416,6 +443,8 @@ GetOptions('type|t=s' => \$type,
'ignore-warnings' => \$ignorewarnings,
'driver=s'=> \$driver,
'flatten' => \$flatten,
+ 'filter-script=s' => \$filterscript,
+ 'ignore-filter-stderr' => \$ignorefilterstderr,
'no-links' => \$nolinks,
'version' => \$version,
'help|h' => \$help,
@@ -460,7 +489,8 @@ if (defined($mathmarkup)) {
# else use numerical value
}
-
+# Give filterscript a default empty string
+$filterscript="" unless defined($filterscript);
# setting extra preamble commands
if (defined($preamblefile)) {
@@ -618,17 +648,20 @@ if ( $mathmarkup == COARSE || $mathmarkup == WHOLE ) {
+
+
foreach $pkg ( @packagelist ) {
map { $packages{$_}="" } split(/,/,$pkg) ;
}
-
if ($showconfig || $showtext || $showsafe || $showpreamble) {
+
show_configuration();
exit 0;
}
+
if ( @ARGV != 2 ) {
print STDERR "2 and only 2 non-option arguments required. Write latexdiff -h to get help\n";
exit(2);
@@ -687,6 +720,17 @@ push(@SAFECMDLIST, qr/^QLEFTBRACE$/, qr/^QRIGHTBRACE$/);
# word: sequence of letters or accents followed by letter
my $word_ja='\p{Han}+|\p{InHiragana}+|\p{InKatakana}+';
my $word='(?:' . $word_ja . '|(?:(?:[-\w\d*]|\\\\[\"\'\`~^][A-Za-z\*])(?!(?:' . $word_ja . ')))+)';
+
+ # for selected commands, the number of arguments is known, and we can therefore allow spaces between command and its argument
+ # Note that it is still expected that the arguments are blocks marked by parentheses rather than single characters, and that intervening comments will inhibit the association
+ my $predefinedcmdoptseq01='\\\\(?:url|BibitemShut)\s*\s*(?:\{'. $pat_n . '\}\s*){1}'; # Commands with one non-optional argument
+ my $predefinedcmdoptseq12='\\\\(?:href|bibfield|bibinfo)\s*(?:\['.$brat_n.'\])?\s*(?:\{'. $pat_n . '\}\s*){2}'; # Commands with one optional and two non-optional arguments
+# my $predefinedcmdoptseq11='\\\\(?:bibitem)\s*(?:\['.$brat_n.'\])?\s*(?:\{'. $pat_n . '\}\s*){1}'; # Commands with one optional and one non-optional arguments
+# \bibitem in revtex styles appears to be always followed by \BibItemOpen. We bind \BibItemOpen to the bibitem (if present) in order to prevent the comparison algorithm to interpret the \BibItemOpen as an identical part of the sequence; this interpretation can lead to added and removed entries to the reference list to become mixed.
+ my $predefinedbibitem='\\\\(?:bibitem)\s*(?:\['.$brat_n.'\])?\s*(?:\{'. $pat_n . '\})(?:%?\s*\\\\BibitemOpen)?'; # Commands with one optional and one non-optional arguments
+
+ my $predefinedcmdoptseq='(?:'.$predefinedcmdoptseq12.'|'.$predefinedcmdoptseq01.'|'.$predefinedbibitem.')';
+
my $cmdleftright='\\\\(?:left|right|[Bb]igg?[lrm]?|middle)\s*(?:[<>()\[\]|\.]|\\\\(?:[|{}]|\w+))';
my $cmdoptseq='\\\\[\w\d@\*]+'.$extraspace.'(?:(?:<'.$abrat0.'>|\['.$brat_n.'\]|\{'. $pat_n . '\}|\(' . $coords .'\))'.$extraspace.')*';
my $defseq='\\\\def\\\\[\w\d@\*]+(?:#\d+|\[#\d+\])+(?:\{'. $pat_n . '\})?';
@@ -695,7 +739,7 @@ push(@SAFECMDLIST, qr/^QLEFTBRACE$/, qr/^QRIGHTBRACE$/);
my $math='\$(?:[^$]|\\\$)*?\$|\\\\[(](?:.|\n)*?\\\\[)]';
## the current maths command cannot cope with newline within the math expression
my $comment='%[^\n]*\n';
- my $pat=qr/(?:\A\s*)?(?:${and}|${quotemarks}|${number}|${word}|$quotedunderscore|${defseq}|$cmdleftright|${cmdoptseq}|${math}|${backslashnl}|${oneletcmd}|${comment}|${punct}|${mathpunct}|\{|\})\s*/ ;
+ my $pat=qr/(?:\A\s*)?(?:${and}|${quotemarks}|${number}|${word}|$quotedunderscore|${defseq}|$cmdleftright|${predefinedcmdoptseq}|${cmdoptseq}|${math}|${backslashnl}|${oneletcmd}|${comment}|${punct}|${mathpunct}|\{|\})\s*/ ;
@@ -746,9 +790,56 @@ if (lc($encoding) eq "utf8" ) {
binmode(STDERR, ":utf8");
}
+# filter($text)
+# Runs $text through the script provided in $filterscript argument, if set
+# If not set, just returns $text unchanged.
+# If flatten was set, defer filtering to flatten. flatten will run the filter
+# on all incoming text prior to its own processing.
+# If flatten was not set, filter each of old and new once (see just below this def)
+sub filter {
+ my ($text)=@_;
+ my ($textout,$pid);
+ if ($filterscript ne "") {
+ print STDERR "Passing " . length($text) . " chars to filter script " . $filterscript . "\n" if $verbose;
+
+ if ($ignorefilterstderr) {
+ # If we need to capture and bury STDERR, use the Open3 version, and close CHLD_ERR below.
+ use IPC::Open3;
+ # We consume STDERR from the process, and hide it
+ $pid = open3(\*CHLD_IN, \*CHLD_OUT, \*CHLD_ERR, $filterscript) or die "open3() failed $!";
+ }
+ else {
+ # Capture STDOUT and use as our new $text. Allow STDERR to go to console.
+ use IPC::Open2;
+ $pid = open2(\*CHLD_OUT, \*CHLD_IN, $filterscript) or die "open2() failed $!";
+ }
+ # Send in $text
+ print CHLD_IN $text."\n"; # Adding a newline just to make sure there is one.
+ close CHLD_IN;
+ # Wait for output and gather it up
+ while (<CHLD_OUT>) {
+ $textout = $textout.$_;
+ }
+ if ($ignorefilterstderr) {
+ close CHLD_ERR; # Enable only if Open3 used above
+ }
+ # On the off chance a very long running and/or frequently called script is used.
+ waitpid( $pid, 0 );
+ $text = $textout;
+ print STDERR "Received " . length($text) . " chars after filtering\n" if $verbose;
+ print STDERR $text if $verbose;
+ }
+ return $text;
+}
+
$old=read_file_with_encoding($oldfile,$encoding);
$new=read_file_with_encoding($newfile,$encoding);
+if (not defined($flatten)) {
+ $old=filter($old);
+ $new=filter($new);
+}
+
@@ -760,11 +851,11 @@ exetime(1);
if ($flatten) {
- $oldbody=flatten($oldbody,$oldpreamble,$oldfile,$encoding);
- $newbody=flatten($newbody,$newpreamble,$newfile,$encoding);
+ $oldbody=flatten($oldbody,$oldpreamble,File::Spec->rel2abs($oldfile),$encoding);
+ $newbody=flatten($newbody,$newpreamble,File::Spec->rel2abs($newfile),$encoding);
# flatten preamble
- $oldpreamble=flatten($oldpreamble,$oldpreamble,$oldfile,$encoding);
- $newpreamble=flatten($newpreamble,$newpreamble,$newfile,$encoding);
+ $oldpreamble=flatten($oldpreamble,$oldpreamble,File::Spec->rel2abs($oldfile),$encoding);
+ $newpreamble=flatten($newpreamble,$newpreamble,File::Spec->rel2abs($newfile),$encoding);
}
@@ -1019,6 +1110,9 @@ my ( $citpat);
if ( defined $packages{"apacite"} ) {
print STDERR "apacite package detected.\n" if $verbose ;
$citpat='(?:mask)?(?:full|short|no)?cite(?:A|author|year|meta)?(?:NP)?';
+} elsif (defined $packages{"biblatex"}) {
+ print STDERR "biblatex package detected.\n" if $verbose ;
+ $citpat='(?:[cC]ites?|(?:[pP]aren|foot|[Tt]ext|[sS]mart|super)cites?\*?|footnotecitetex)';
} else {
# citation command pattern for all other citation schemes
$citpat='(?:cite\w*|nocite)';
@@ -1341,11 +1435,13 @@ sub remove_endinput {
# encoding is the encoding
sub flatten {
my ($text,$preamble,$filename,$encoding)=@_;
- my ($includeonly,$dirname,$fname,$newpage,$fullfile,$filecontent,$replacement,$begline,$bblfile,$subfile,$command,$verbenv,$verboptions);
+ my ($includeonly,$dirname,$fname,$newpage,$fullfile,$filecontent,$replacement,$begline,$inputcmd,$bblfile,$subfile,$command,$verbenv,$verboptions,$ignore,$fileonly);
my ($subpreamble,$subbody,$subpost);
+ my ($subdir,$subdirfull,$importfilepath);
require File::Basename ;
- require File::Spec ;
- $dirname = File::Basename::dirname($filename);
+ ### require File::Spec ; # now this is needed even if flatten option not given
+ $filename = File::Spec->rel2abs( $filename ) ;
+ ($ignore, $dirname, $fileonly) = File::Spec->splitpath($filename) ;
$bblfile = $filename;
$bblfile=~s/\.tex$//;
$bblfile.=".bbl";
@@ -1358,11 +1454,51 @@ sub flatten {
print STDERR "DEBUG: includeonly $includeonly\n" if $debug;
+
+ # Run through filter, to let filterscript have a pass if it was set
+ $text = filter($text);
+
+ # Recursively replace \\import and \\subimport files
+ $text =~ s/(^(?:[^%\n]|\\%)*)(\\subimport\{(.*?)\}|\\import\{(.*?)\})(?:[\s]*)\{(.*?)\}/{
+ # $1 is begline
+ # $3 is directory if subimport
+ # $4 is directory if import
+ # $5 is filename
+ $begline = (defined($1)? $1 : "");
+ $subdir = $3 if defined($3);
+ $subdir = $4 if defined($4);
+ $fname = $5;
+ $fname .= ".tex" unless $fname =~ m|\.\w{3,4}$|;
+ print STDERR "DEBUG begline:", $begline, "\n" if $debug;
+ print STDERR "DEBUG", (defined($3)? "subimport_file:" : "import_file:"), $subdir, "\n" if $debug;
+ print STDERR "DEBUG file:", $fname, "\n" if $debug;
+
+ # subimport appends $subdir to the current $dirname. import replaces it with an absolute path.
+ $subdirfull = (defined($3) ? File::Spec->catdir($dirname,$subdir) : $subdir);
+
+ $importfilepath = File::Spec->catfile($subdirfull, $fname);
+
+ print STDERR "importing importfilepath:", $importfilepath,"\n" if $verbose;
+ if ( -f $importfilepath ) {
+ # If file exists, replace input or include command with expanded input
+ $replacement=flatten(read_file_with_encoding($importfilepath, $encoding), $preamble,$importfilepath,$encoding) or die "Could not open file ",$fullfile,": $!";
+ } else {
+ # if file does not exist, do not expand include or input command (do not warn if fname contains #[0-9] as it is then likely part of a command definition
+ # and is not meant to be expanded directly
+ print STDERR "WARNING: Could not find included file ",$importfilepath,". I will continue but not expand |$2|\n";
+ $replacement=(defined($3)? "\\subimport" : "\\import");
+ $replacement .= "{$subdir}{$fname} % Processed";
+ }
+ "$begline$replacement";
+ }/exgm;
+
# recursively replace \\input and \\include files
$text =~ s/(^(?:[^%\n]|\\%)*)(\\input\{(.*?)\}|\\include\{(${includeonly}(?:\.tex)?)\})/{
$begline=(defined($1)? $1 : "") ;
+ $inputcmd=$2;
$fname = $3 if defined($3) ;
$fname = $4 if defined($4) ;
+ $newpage=(defined($4)? " \\newpage " : "") ;
# # add tex extension unless there is a three or four letter extension already
$fname .= ".tex" unless $fname =~ m|\.\w{3,4}$|;
$fullfile = File::Spec->catfile($dirname,$fname);
@@ -1375,12 +1511,11 @@ sub flatten {
$replacement=flatten(read_file_with_encoding($fullfile, $encoding), $preamble,$filename,$encoding) or die "Could not open file ",$fullfile,": $!";
$replacement = remove_endinput($replacement);
# \include always starts a new page; use explicit \newpage command to simulate this
- $newpage=(defined($4)? " \\newpage " : "") ;
} else {
# if file does not exist, do not expand include or input command (do not warn if fname contains #[0-9] as it is then likely part of a command definition
# and is not meant to be expanded directly
- print STDERR "WARNING: Could not find included file ",$fullfile,". I will continue but not expand |$2|\n" unless $fname =~ m(#[0-9]) ;
- $replacement = $2 ; # i.e. just the original command again -> make no change file does not exist
+ print STDERR "WARNING: Could not find included file ",$fullfile,". I will continue but not expand |$inputcmd|\n" unless $fname =~ m(#[0-9])n ;
+ $replacement = $inputcmd ; # i.e. just the original command again -> make no change file does not exist
$newpage="";
}
"$begline$newpage$replacement$newpage";
@@ -1659,6 +1794,7 @@ sub splitlatex {
}
}
+
unshift(@retval,$leadin) if (length($leadin)>0);
return @retval;
}
@@ -1840,10 +1976,14 @@ sub extracttextblocks {
my $wpat=qr/^(?:[a-zA-Z.,'`:;?()!]*)[\s~]*$/; #'
my $retval=[];
+ # we redefine locally $extraspace (shadowing the global definition) to capture command sequences with intervening spaces no matter what the global setting
+ # this is done so we can capture those commands with a predefined number of arguments without having to introduce them again explicitly here
+ my $extraspace='\s*';
+
for ($i=0;$i< scalar @$block;$i++) {
($token,$index)=@{ $block->[$i] };
# store pure text blocks
- if ($token =~ /$wpat/ || ( $token =~/^\\((?:[`'^"~=.]|[\w\d@\*]+))((?:${extraspace}\[$brat_n\]${extraspace}|${extraspace}\{$pat_n\})*)/o
+ if ($token =~ /$wpat/ || ( $token =~/^\\((?:[`'^"~=.]|[\w\d@\*]+))((?:${extraspace}\[$brat_n\]${extraspace}|${extraspace}\{$pat_n\})*)/
&& iscmd($1,\@SAFECMDLIST,\@SAFECMDEXCL)
&& !iscmd($1,\@TEXTCMDLIST,\@TEXTCMDEXCL))) {
# we have text or a command which can be treated as text
@@ -1888,6 +2028,10 @@ sub extractcommands {
my ($i,$token,$index,$cmd,$open,$mid,$closing);
my $retval=[];
+ # we redefine locally $extraspace (shadowing the global definition) to capture command sequences with intervening spaces no matter what the global setting
+ # this is done so we can capture those commands with a predefined number of arguments without having to introduce them again explicitly here
+ my $extraspace='\s*';
+
for ($i=0;$i< scalar @$block;$i++) {
($token,$index)=@{ $block->[$i] };
# check if token is an alphanumeric command sequence with at least one non-optional argument
@@ -1899,6 +2043,7 @@ sub extractcommands {
# $4: } + trailing spaces
if ( ( $token =~ m/^(\\([\w\d\*]+)(?:${extraspace}\[$brat_n\]|${extraspace}\{$pat_n\})*${extraspace}\{)($pat_n)(\}\s*)$/so )
&& iscmd($2,\@TEXTCMDLIST,\@TEXTCMDEXCL) ) {
+ print STDERR "DEBUG EXTRACTCOMMANDS Match |$1|$2|$3|$4|$index \n" if $debug;
# push(@$retval,[ $2,$index,$1,$3,$4 ]);
($cmd,$open,$mid,$closing) = ($2,$1,$3,$4) ;
$closing =~ s/\}/\\RIGHTBRACE/ ;
@@ -1914,20 +2059,20 @@ sub extractcommands {
sub iscmd {
my ($cmd,$regexar,$regexexcl)=@_;
my ($ret)=0;
- print STDERR "DEBUG: iscmd($cmd)=" if $debug;
+ ### print STDERR "DEBUG: iscmd($cmd)=" if $debug;
foreach $pat ( @$regexar ) {
if ( $cmd =~ m/^${pat}$/ ) {
$ret=1 ;
last;
}
}
- print STDERR "0\n" if ($debug && !$ret) ;
+ ### print STDERR "0\n" if ($debug && !$ret) ;
return 0 unless $ret;
foreach $pat ( @$regexexcl ) {
- print STDERR "0\n" if ( $debug && $cmd =~ m/^${pat}$/) ;
+ ### print STDERR "0\n" if ( $debug && $cmd =~ m/^${pat}$/) ;
return 0 if ( $cmd =~ m/^${pat}$/ );
}
- print STDERR "1\n" if $debug;
+ ### print STDERR "1\n" if $debug;
return 1;
}
@@ -1986,7 +2131,6 @@ sub pass2 {
print STDERR " $deltokcnt discarded tokens in $delblkcnt blocks.\n";
print STDERR " $addtokcnt appended tokens in $addblkcnt blocks.\n";
}
-
return(@$retval);
}
@@ -2009,13 +2153,20 @@ sub marktags {
my $cmdcomment= ($opencmd =~ m/^%/); # Flag to indicate whether opencmd is a comment (i.e. if we intend to simply comment out changed commands)
my ($command,$commandword,$closingbracket) ; # temporary variables needed below to remember sub-pattern matches
-# split this block to flatten out sequences joined in pass1
+
+
+# split this block to split sequences joined in pass1
@$block=splitlatex(join "",@$block);
### print STDERR "DEBUG: marktags $openmark,$closemark,$open,$close,$opencmd,$closecmd,$comment\n" if $debug;
### print STDERR "DEBUG: marktags blocksplit ",join("|",@$block),"\n" if $debug;
+
+ # we redefine locally $extraspace (shadowing the global definition) to capture command sequences with intervening spaces no matter what the global setting
+ # this is done so we can capture those commands with a predefined number of arguments without having to introduce them again explicitly here
+ my $extraspace_mt='\s*';
+
+
foreach (@$block) {
$word=$_;
- ### print STDERR "DEBUG MARKTAGS: |$word|\n" if $debug;
if ( $word =~ s/^%/%$comment/ ) {
# a comment
if ($cmd==1) {
@@ -2040,9 +2191,7 @@ sub marktags {
}
# negative lookahead pattern (?!) in second clause is put in to avoid matching \( .. \) patterns
# also note that second pattern will match \\
- print STDERR "DEBUG marktags: Considering word |$word|\n" if $debug;
- if ( $word =~ /^[&{}\[\]]/ || ( $word =~ /^\\(?!\()(\\|[`'^"~=.]|[\w*@]+)/ && !iscmd($1,\@SAFECMDLIST,\@SAFECMDEXCL)) ) {
- ###print STDERR "DEBUG MARKTAGS is a non-safe command ($1)\n" if $debug;
+ if ( $word =~ /^[&{}\[\]]/ || ( $word =~ /^\\(?!\()(\\|[`'^"~=.]|[\w*@]+)/ && !iscmd($1,\@SAFECMDLIST,\@SAFECMDEXCL)) ) {
### if ( $word =~ /^[&{}\[\]]/ || ( $word =~ /^\\([\w*@\\% ]+)/ && !iscmd($1,\@SAFECMDLIST,\@SAFECMDEXCL)) ) {
# word is a command or other significant token (not in SAFECMDLIST)
## same conditions as in subroutine extractcommand:
@@ -2054,13 +2203,13 @@ sub marktags {
# $3: last argument
# $4: } + trailing spaces
### pre-0.3 if ( ( $token =~ m/^(\\([\w\d\*]+)(?:\[$brat0\]|\{$pat_n\})*\{)($pat_n)(\}\s*)$/so )
- if ( ( $word =~ m/^(\\([\w\d\*]+)(?:${extraspace}\[$brat_n\]|${extraspace}\{$pat_n\})*${extraspace}\{)($pat_n)(\}\s*)$/so )
+ if ( ( $word =~ m/^(\\([\w\d\*]+)(?:${extraspace_mt}\[$brat_n\]|${extraspace_mt}\{$pat_n\})*${extraspace_mt}\{)($pat_n)(\}\s*)$/so )
&& (iscmd($2,\@TEXTCMDLIST,\@TEXTCMDEXCL)|| iscmd($2,\@MATHTEXTCMDLIST,\@MATHTEXTCMDEXCL))
&& ( !$cmdcomment || !iscmd($2,\@CONTEXT2CMDLIST, \@CONTEXT2CMDEXCL) ) ) {
# Condition 1: word is a command? - if yes, $1,$2,.. will be set as above
# Condition 2: word is a text command - we mark up the interior of the word. There is a separate check for MATHTEXTCMDLIST
# because for $mathmarkup=WHOLE, the commands should not be split in pass1 (ie. math mode commands are not in
- # TEXTCMDLIST, but the interior of MATHTEXT commands should be highlighted in both deleted and added blocks
+ # TEXTCMDLIST, but the interior of MATHTEXT commnds should be highlighted in both deleted and added blocks
# Condition 3: But if we are in a deleted block ($cmdcomment=1) and
# $2 (the command) is in context2, just treat it as an ordinary command (i.e. comment it open with $opencmd)
# Because we do not want to disable this command
@@ -2096,6 +2245,13 @@ sub marktags {
}
push (@$retval,$AUXCMD,"\n") if $cmdcomment ;
$cmd=-1 ;
+ } elsif ( $cmdcomment &&
+ ( $word =~ m/^(\\([\w\d\*]+)(?:${extraspace_mt}\[$brat_n\]|${extraspace_mt}\{$pat_n\})*${extraspace_mt}\{)($pat_n)(\}\s*)/so )
+ && iscmd($2,\@KEEPCMDLIST, \@KEEPCMDEXCL) ) {
+ # 'keepcmd' in a deleted environment: keep the command as is
+ push (@$retval,$close) if $cmd==0 ;
+ push (@$retval,$word);
+ $cmd=-1; # pretend we are at the beginning of a sequence because we do not want to add an additional $closecmd or $close before the next token, no matter what it is
} else {
# ordinary command
push (@$retval,$opencmd) if $cmd==-1 ;
@@ -2132,52 +2288,19 @@ sub marktags {
}
#used in preprocess
-sub take_comments_and_enter_from_frac() {
- #*************take the \n and % between frac and {}***********
- #notice all of the substitution are made none global
- while( m/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)}(.*?)\\frac(([\s]*%[^\n]*?)*[\r\n|\r|\n])+\{(.*?)\\end\{\1}/s ) {
- # if there isn't any % or \n in the pattern $2 then there should be an \\end{...} in $2
- ### print STDERR "Match the following in take_comments and_enter_from_frac(1):\n****$&****\n" if $debug;
- if( $2 !~ m/\\end\{$1}/s ) {
- # take out % and \n from the next match only (none global)
- s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)}(.*?)\\frac(([\s]*%[^\n]*?)*[\r\n|\r|\n])+\{(.*?)\\end\{\1}/\\begin{$1}$2\\frac{$5\\end{$1}/s;
- }
- else{
- #there are no more % and \n in $2, we want to find the next one so we clear the begin-end from the pattern
- s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)}(.*?)\\end\{\1}/MATHBLOCK$1\{$2\}MATHBLOCKEND/s;
- }
- }
- ###cleaning up
- while( s/MATHBLOCK($MATHENV|$MATHARRENV|SQUAREBRACKET)\{(.*?)\}MATHBLOCKEND/\\begin{$1}$2\\end{$1}/s ){}
- ###*************take the \n and % between frac and {}***********
-
- ###**********take the \n and % between {} and {} of the frac***************
- while( m/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)\}(.*?)\\frac\{(.*?)\\end\{\1\}/s ) {
- # if there isn't any more //frac before the first //end in the pattern $2 then there should be an \\end{...} in $2
- ###print STDERR "Match the following in take_comments and_enter_from_frac(2):\n****$&****\n" if $debug;
- if( $2 !~ m/\\end\{$1\}/s ) {
- # from now on CURRFRAC is the frac we are looking at
- s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)\}(.*?)\\frac\{(.*?)\\end\{\1\}/\\begin\{$1\}$2CURRFRAC\{$3\\end\{$1\}/s;
- while( m/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)\}(.*?)CURRFRAC\{(.*?)\\end\{\1\}/s ) {
- if( m/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)\}(.*?)CURRFRAC\{($pat_n)\}([\s]*(%[^\n]*?)*[\r\n|\r|\n])+[\s]*\{(.*?)\\end\{\1}/s ) {
- s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)\}(.*?)CURRFRAC\{($pat_n)\}([\s]*(%[^\n]*?)*[\r\n|\r|\n])+[\s]*\{(.*?)\\end\{\1\}/\\begin\{$1\}$2CURRFRAC\{$3\}\{$6\\end\{$1\}/s;
- }
- else { # there is no comment or \n between the two brackets {}{}
- # change CURRFRAC to FRACSTART so we can change them all back to //frac{ when we finish
- s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)}(.*?)CURRFRAC\{(.*?)\\end\{\1}/\\begin{$1}$2FRACSTART\{$3\\end{$1}/s;
- }
- }
- }
- else{
- ###there are no more frac in $2, we want to find the next one so we clear the begin-end from the pattern
- s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)}(.*?)\\end\{\1}/MATHBLOCK$1\{$2\}MATHBLOCKEND/s;
- }
-
- }
- ###cleaning up
- while( s/MATHBLOCK($MATHENV|$MATHARRENV|SQUAREBRACKET)\{(.*?)\}MATHBLOCKEND/\\begin{$1}$2\\end{$1}/s ){}
- s/FRACSTART/\\frac/g;
- ###***************take the \n and % between {} and {} of the frac*********************
+sub take_comments_and_newline_from_frac() {
+ # some special magic for common usage of frac, which does not conform to the latexdiff requirements but can be made to fit
+ # note that this is a rare exception to the general rule that the new tex can be reconstructed from the diff file
+
+ # \frac12 -> \frac{1}{2}
+ s/\\frac(\d)(\w)/\\frac\{$1\}\{$2\}/g;
+
+ # \frac1{2b} -> \frac{1}{2b}
+ s/\\frac(\d)/\\frac\{$1\}/g;
+
+ # delete space and comment characters between \frac arguments
+# s/\\frac(?:\s*?%[^\n]*?)*?(\{$pat_n\})\s*(\{$pat_n\})/\\frac$1$2/g;
+ s/\\frac(?:\s|%[^\n]*?)*(\{$pat_n\})(?:\s|%[^\n]*?)*(\{$pat_n\})/\\frac$1$2/g;
}
# preprocess($string, ..)
@@ -2260,7 +2383,7 @@ sub preprocess {
# resort to WHOLE or FINE, or NONE math mode processing.
s/\\begin\{($ARRENV)}(.*?)\\end\{\1}/\\ARRAYBLOCK$1\{$2\\DIFANCHORARRB \}\\DIFANCHORARRE /sg;
- take_comments_and_enter_from_frac();
+ take_comments_and_newline_from_frac();
s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)\}(.*?)\\end\{\1\}/\\MATHBLOCK$1\{$2\\DIFANCHORMATHB \}\\DIFANCHORMATHE /sg;
}
@@ -2878,8 +3001,7 @@ sub restore_item_commands {
# pre-process preamble by looking for commands used in \maketitle (title, author, date etc commands)
# the list of commands is defined in CONTEXT2CMD
# if found then use a bodydiff to mark up content, and replace the corresponding commands
- # in both preambles by marked up version to 'fool' the linediff (such that only body is marked
- # up.
+ # in both preambles by marked up version to 'fool' the linediff (such that only body is marked up).
# A special case are e.g. author commands being added (or removed)
# 1. If commands are added, then the entire content is marked up as new, but also the lines are marked as new in the linediff
# 2. If commands are removed, then the linediff will mark the line as deleted. The program returns
@@ -2957,6 +3079,9 @@ EOF
}
$argnew=$newhash{$cmd}->[2];
$argdiff="{" . join("",bodydiff($argold,$argnew)) ."}";
+ # Replace \RIGHTBRACE by }
+ $argdiff =~ s/\\RIGHTBRACE/}/g;
+
if ( length $optargnew ) {
$optargdiff="[".join("",bodydiff($optargold,$optargnew))."]" ;
$optargdiff =~ s/\\DIFaddbegin /\\DIFaddbeginFL /g;
@@ -3302,6 +3427,7 @@ be real files (not pipes or similar) as they are opened twice.
reason package specific parsing needs to be switched off, use --packages=none.
The following packages trigger special behaviour:
endfloat hyperref amsmath apacite siunitx cleveref glossaries mhchem chemformula/chemmacros
+ biblatex
[ Default: scan the preamble for \\usepackage commands to determine
loaded packages.]
@@ -3383,7 +3509,17 @@ Miscelleneous options
be located in the same directories as the old and new master files,
respectively, making it possible to organise files into old and new directories.
--flatten is applied recursively, so inputted files can contain further
- \\input statements.
+ \\input statements. Also handles files included by the import package
+ (\\import and \\subimport), and \\subfile command.
+
+--filter-script=filterscript Run files through this filterscript (full path preferred) before processing.
+ The filterscript must take STDIN input and output to STDOUT.
+ When coupled with --flatten, each file will be run through the filter as it is brought in.
+
+--ignore-filter-stderr When running with --filter-script, STDERR from the script may cause readability issues.
+ Turn this flag on to ignore STDERR from the filter script.
+
+
--help
-h Show this help text.
@@ -3638,7 +3774,7 @@ define new C<\DIFadd> and C<\DIFdel> commands, which provide a wrapper for these
using them for the text but not for the link defining command (where any markup would cause
errors).
-=item C<apacite>
+=item C<apacite>, C<biblatex>
Redefine the commands recognised as citation commands.
@@ -3944,12 +4080,26 @@ included sections are not expanded. The included files are assumed to
be located in the same directories as the old and new master files,
respectively, making it possible to organise files into old and new directories.
--flatten is applied recursively, so inputted files can contain further
-C<\input> statements.
+C<\input> statements. Also handles files included by the import package
+(C<\import> and C<\subimport>), and C<\subfile> command.
Use of this option might result in prohibitive processing times for
larger documents, and the resulting difference document
no longer reflects the structure of the input documents.
+=item B<--filter-script=filterscript>
+
+Run files through this filterscript (full path preferred) before processing.
+The filterscript must take STDIN input and output to STDOUT.
+When coupled with --flatten, each file will be run through the filter as it is brought in.
+
+=item B<--ignore-filter-stderr>
+
+When running with --filter-script, STDERR from the script may cause readability issues.
+Turn this flag on to ignore STDERR from the filter script.
+
+
+
=item B<--help> or
B<-h>
@@ -4511,6 +4661,8 @@ min
Pr
sec
sup
+bibfield
+bibinfo
[Hclbkdruvt]
[`'^"~=.]
_
@@ -4537,6 +4689,7 @@ framebox
footnote
footnotetext
framebox
+href
intertext
part
(sub){0,2}section\*?
@@ -4550,6 +4703,7 @@ savebox
sbox
shortintertext
shortstack
+sidenote
signature
text.*
value
@@ -4694,7 +4848,7 @@ verbatim[*]?
%DIF CULINECHBAR PREAMBLE
\RequirePackage[normalem]{ulem}
\RequirePackage[dvips]{changebar}
-\RequirePackage{color}
+\RequirePackage{color}\definecolor{RED}{rgb}{1,0,0}\definecolor{BLUE}{rgb}{0,0,1}
\providecommand{\DIFadd}[1]{\protect\cbstart{\protect\color{blue}\uwave{#1}}\protect\cbend}
\providecommand{\DIFdel}[1]{\protect\cbdelete{\protect\color{red}\sout{#1}}\protect\cbdelete}
%DIF END CULINECHBAR PREAMBLE
diff --git a/support/latexdiff/latexdiff-fast b/support/latexdiff/latexdiff-fast
index 80ae57c743..a6a7d9164d 100755
--- a/support/latexdiff/latexdiff-fast
+++ b/support/latexdiff/latexdiff-fast
@@ -23,6 +23,25 @@
# Detailed usage information at the end of the file
#
+
+# Version 1.3.1
+# Bug fixes:
+# - remove some uninitialised variable $2 warnings in string substitution in flatten function in case included file is not found
+# - add minimal postprocessing to diff processing of preamble commands (replace \RIGHTBRACE by \} )
+# - pre-processing: replace (contributed) routine take_comments_and_enter_from_frac() with take_comments_and_newline_from_frac(), which does the same thing
+# (remove whitespace characters and comments between the argument of \frac commands) in an easier and more robust way. In addition, it
+# will replace commands like \frac12 with \frac{1}{2} as pre-processing step. Fixes issue #184
+# - add "intertext" to list of unsafe math commands @UNSAFEMATHCMD . Fixes issue #179
+# - provide citation command patterns for biblatex and protect them with mbox'es. Fixes issue #199
+# - hardcode number of parameters for \href and \url commands to allow spaces between commands and arguments even if --allow-spaces option is not used (this
+# is needed because some bibliography styles add such in-command-sequence spaces) Fixes issues: #178 #198
+# - bibitem is now kept even in deleted blocks such that deleted references show up properly (this implies that the actual numbers in numerical referencing schemes will change)
+# (this is implemented by introducing a new class of commands KEEPCMD , which are kept as is in deleted environments (no effect in added environments). Currently
+# \bibitem is hardwired to be the only member of this class (fixes issue #194, #174)
+# Features:
+# - add some special processing for revtex bibliography commands, so that the spaces between bibliography commands \bibfield and \bibinfo and their arguments are ignored.
+# (fixes issue #194, should fix #174)
+#
# Version 1.3.0 (7 October 2018):
# - treat options to \documentclass as potential package names (some packages allow implicit loading of or imply selected packages
# - improved pattern matching: now allows nested angular brackets, and is no longer confused by escaped curly braces
@@ -34,6 +53,9 @@
# - added to textcmds: \intertext
# - new config variable CUSTOMDIFCMD to allow defining special versions of commands in added or deleted blocks (Pull request by github user jprotze)
# - added option -no-links (mostly for use by latexdiff-vc in only-changes modes) (Pull request by github user jprotze)
+# - new option --filter-script to run both input through a pre-processing script (PR jasonmccsmith #167)
+# new option --no-filter-stderr to hide stderr output from filter-script (potentially dangerous, as this might hide malfunctioning of filter scripts)
+# - --flatten now can deal with imports made using the import package {PR jasonmccsmith #173)
# Bug fixes:
# - pattern matching of \verb and \lstinline commands had an error which meant they would trigger on commands beginning with \verb.
# - In description environments, mark up item descriptions by effectively reating the insides of item commannds as text commands (fixes #161)
@@ -180,7 +202,7 @@
# (the distribution on which this modification is based is available
# from http://search.cpan.org/~nedkonz/Algorithm-Diff-1.15
# the most recent version can be found via http://search.cpan.org/search?module=Algorithm::Diff )
-# Please note that the LICENCSE for Algorithm::Diff :
+# Please note the LICENCE for Algorithm::Diff :
# "Copyright (c) 2000-2002 Ned Konz. All rights reserved.
# This program is free software;
# you can redistribute it and/or modify it under the same terms
@@ -734,11 +756,13 @@ use strict ;
use warnings;
use utf8 ;
+use File::Spec ;
+
my ($algodiffversion)=split(/ /,$Algorithm::Diff::VERSION);
my ($versionstring)=<<EOF ;
-This is LATEXDIFF 1.3.0 (Algorithm::Diff $Algorithm::Diff::VERSION, Perl $^V)
+This is LATEXDIFF 1.3.1a (Algorithm::Diff $Algorithm::Diff::VERSION, Perl $^V)
(c) 2004-2018 F J Tilmann
EOF
@@ -759,7 +783,7 @@ my %CONFIG=(
COUNTERCMD => undef,
# COUNTERCMD textcmds which are associated with a counter
# If any of these commands occur in a deleted block
- # they will be succeeded by an \addtocounter{...}{-1}
+ # they will be followed by an \addtocounter{...}{-1}
# for the associated counter such that the overall numbers
# should be the same as in the new file
LISTENV => undef , # list making environments - they will generally be kept
@@ -808,7 +832,7 @@ my ($ARRENV,
my $LABELCMD='(?:label)'; # matching commands are disabled within deleted blocks - mostly useful for maths mode, as otherwise it would be fine to just not add those to SAFECMDLIST
-my @UNSAFEMATHCMD=('qedhere'); # Commands which are definitely unsafe for marking up in math mode (amsmath qedhere only tested to not work with UNDERLINE markup) (only affects WHOLE and COARSE math markup modes). Note that unlike text mode (or FINE math mode0 deleted unsafe commands are not deleted but simply taken outside \DIFdel
+my @UNSAFEMATHCMD=('qedhere','intertext'); # Commands which are definitely unsafe for marking up in math mode (amsmath qedhere only tested to not work with UNDERLINE markup) (only affects WHOLE and COARSE math markup modes). Note that unlike text mode (or FINE math mode0 deleted unsafe commands are not deleted but simply taken outside \DIFdel
my $MBOXINLINEMATH=0; # if set to 1 then surround marked-up inline maths expression with \mbox ( to get around compatibility
# problems between some maths packages and ulem package
@@ -863,6 +887,8 @@ our @SAFECMDEXCL=();
my @MBOXCMDLIST=(); # patterns for commands which are in principle safe but which need to be surrounded by an \mbox
my @MBOXCMDEXCL=(); # all the patterns in MBOXCMDLIST will be appended to SAFECMDLIST
+my @KEEPCMDLIST=( qr/^bibitem$/ ); # patterns for commands which should not be deleted in nominally delete text passages
+my @KEEPCMDEXCL=();
my ($i,$j,$l);
my ($old,$new);
@@ -876,6 +902,7 @@ my ($oldpost, $newpost);
my ($diffall);
# Option names
my ($type,$subtype,$floattype,$config,$preamblefile,$encoding,$nolabel,$visiblelabel,
+ $filterscript,$ignorefilterstderr,
$showpreamble,$showsafe,$showtext,$showconfig,$showall,
$replacesafe,$appendsafe,$excludesafe,
$replacetext,$appendtext,$excludetext,
@@ -977,6 +1004,8 @@ GetOptions('type|t=s' => \$type,
'ignore-warnings' => \$ignorewarnings,
'driver=s'=> \$driver,
'flatten' => \$flatten,
+ 'filter-script=s' => \$filterscript,
+ 'ignore-filter-stderr' => \$ignorefilterstderr,
'no-links' => \$nolinks,
'version' => \$version,
'help|h' => \$help,
@@ -1021,7 +1050,8 @@ if (defined($mathmarkup)) {
# else use numerical value
}
-
+# Give filterscript a default empty string
+$filterscript="" unless defined($filterscript);
# setting extra preamble commands
if (defined($preamblefile)) {
@@ -1179,17 +1209,20 @@ if ( $mathmarkup == COARSE || $mathmarkup == WHOLE ) {
+
+
foreach $pkg ( @packagelist ) {
map { $packages{$_}="" } split(/,/,$pkg) ;
}
-
if ($showconfig || $showtext || $showsafe || $showpreamble) {
+
show_configuration();
exit 0;
}
+
if ( @ARGV != 2 ) {
print STDERR "2 and only 2 non-option arguments required. Write latexdiff -h to get help\n";
exit(2);
@@ -1248,6 +1281,17 @@ push(@SAFECMDLIST, qr/^QLEFTBRACE$/, qr/^QRIGHTBRACE$/);
# word: sequence of letters or accents followed by letter
my $word_ja='\p{Han}+|\p{InHiragana}+|\p{InKatakana}+';
my $word='(?:' . $word_ja . '|(?:(?:[-\w\d*]|\\\\[\"\'\`~^][A-Za-z\*])(?!(?:' . $word_ja . ')))+)';
+
+ # for selected commands, the number of arguments is known, and we can therefore allow spaces between command and its argument
+ # Note that it is still expected that the arguments are blocks marked by parentheses rather than single characters, and that intervening comments will inhibit the association
+ my $predefinedcmdoptseq01='\\\\(?:url|BibitemShut)\s*\s*(?:\{'. $pat_n . '\}\s*){1}'; # Commands with one non-optional argument
+ my $predefinedcmdoptseq12='\\\\(?:href|bibfield|bibinfo)\s*(?:\['.$brat_n.'\])?\s*(?:\{'. $pat_n . '\}\s*){2}'; # Commands with one optional and two non-optional arguments
+# my $predefinedcmdoptseq11='\\\\(?:bibitem)\s*(?:\['.$brat_n.'\])?\s*(?:\{'. $pat_n . '\}\s*){1}'; # Commands with one optional and one non-optional arguments
+# \bibitem in revtex styles appears to be always followed by \BibItemOpen. We bind \BibItemOpen to the bibitem (if present) in order to prevent the comparison algorithm to interpret the \BibItemOpen as an identical part of the sequence; this interpretation can lead to added and removed entries to the reference list to become mixed.
+ my $predefinedbibitem='\\\\(?:bibitem)\s*(?:\['.$brat_n.'\])?\s*(?:\{'. $pat_n . '\})(?:%?\s*\\\\BibitemOpen)?'; # Commands with one optional and one non-optional arguments
+
+ my $predefinedcmdoptseq='(?:'.$predefinedcmdoptseq12.'|'.$predefinedcmdoptseq01.'|'.$predefinedbibitem.')';
+
my $cmdleftright='\\\\(?:left|right|[Bb]igg?[lrm]?|middle)\s*(?:[<>()\[\]|\.]|\\\\(?:[|{}]|\w+))';
my $cmdoptseq='\\\\[\w\d@\*]+'.$extraspace.'(?:(?:<'.$abrat0.'>|\['.$brat_n.'\]|\{'. $pat_n . '\}|\(' . $coords .'\))'.$extraspace.')*';
my $defseq='\\\\def\\\\[\w\d@\*]+(?:#\d+|\[#\d+\])+(?:\{'. $pat_n . '\})?';
@@ -1256,7 +1300,7 @@ push(@SAFECMDLIST, qr/^QLEFTBRACE$/, qr/^QRIGHTBRACE$/);
my $math='\$(?:[^$]|\\\$)*?\$|\\\\[(](?:.|\n)*?\\\\[)]';
## the current maths command cannot cope with newline within the math expression
my $comment='%[^\n]*\n';
- my $pat=qr/(?:\A\s*)?(?:${and}|${quotemarks}|${number}|${word}|$quotedunderscore|${defseq}|$cmdleftright|${cmdoptseq}|${math}|${backslashnl}|${oneletcmd}|${comment}|${punct}|${mathpunct}|\{|\})\s*/ ;
+ my $pat=qr/(?:\A\s*)?(?:${and}|${quotemarks}|${number}|${word}|$quotedunderscore|${defseq}|$cmdleftright|${predefinedcmdoptseq}|${cmdoptseq}|${math}|${backslashnl}|${oneletcmd}|${comment}|${punct}|${mathpunct}|\{|\})\s*/ ;
@@ -1307,9 +1351,56 @@ if (lc($encoding) eq "utf8" ) {
binmode(STDERR, ":utf8");
}
+# filter($text)
+# Runs $text through the script provided in $filterscript argument, if set
+# If not set, just returns $text unchanged.
+# If flatten was set, defer filtering to flatten. flatten will run the filter
+# on all incoming text prior to its own processing.
+# If flatten was not set, filter each of old and new once (see just below this def)
+sub filter {
+ my ($text)=@_;
+ my ($textout,$pid);
+ if ($filterscript ne "") {
+ print STDERR "Passing " . length($text) . " chars to filter script " . $filterscript . "\n" if $verbose;
+
+ if ($ignorefilterstderr) {
+ # If we need to capture and bury STDERR, use the Open3 version, and close CHLD_ERR below.
+ use IPC::Open3;
+ # We consume STDERR from the process, and hide it
+ $pid = open3(\*CHLD_IN, \*CHLD_OUT, \*CHLD_ERR, $filterscript) or die "open3() failed $!";
+ }
+ else {
+ # Capture STDOUT and use as our new $text. Allow STDERR to go to console.
+ use IPC::Open2;
+ $pid = open2(\*CHLD_OUT, \*CHLD_IN, $filterscript) or die "open2() failed $!";
+ }
+ # Send in $text
+ print CHLD_IN $text."\n"; # Adding a newline just to make sure there is one.
+ close CHLD_IN;
+ # Wait for output and gather it up
+ while (<CHLD_OUT>) {
+ $textout = $textout.$_;
+ }
+ if ($ignorefilterstderr) {
+ close CHLD_ERR; # Enable only if Open3 used above
+ }
+ # On the off chance a very long running and/or frequently called script is used.
+ waitpid( $pid, 0 );
+ $text = $textout;
+ print STDERR "Received " . length($text) . " chars after filtering\n" if $verbose;
+ print STDERR $text if $verbose;
+ }
+ return $text;
+}
+
$old=read_file_with_encoding($oldfile,$encoding);
$new=read_file_with_encoding($newfile,$encoding);
+if (not defined($flatten)) {
+ $old=filter($old);
+ $new=filter($new);
+}
+
@@ -1321,11 +1412,11 @@ exetime(1);
if ($flatten) {
- $oldbody=flatten($oldbody,$oldpreamble,$oldfile,$encoding);
- $newbody=flatten($newbody,$newpreamble,$newfile,$encoding);
+ $oldbody=flatten($oldbody,$oldpreamble,File::Spec->rel2abs($oldfile),$encoding);
+ $newbody=flatten($newbody,$newpreamble,File::Spec->rel2abs($newfile),$encoding);
# flatten preamble
- $oldpreamble=flatten($oldpreamble,$oldpreamble,$oldfile,$encoding);
- $newpreamble=flatten($newpreamble,$newpreamble,$newfile,$encoding);
+ $oldpreamble=flatten($oldpreamble,$oldpreamble,File::Spec->rel2abs($oldfile),$encoding);
+ $newpreamble=flatten($newpreamble,$newpreamble,File::Spec->rel2abs($newfile),$encoding);
}
@@ -1580,6 +1671,9 @@ my ( $citpat);
if ( defined $packages{"apacite"} ) {
print STDERR "apacite package detected.\n" if $verbose ;
$citpat='(?:mask)?(?:full|short|no)?cite(?:A|author|year|meta)?(?:NP)?';
+} elsif (defined $packages{"biblatex"}) {
+ print STDERR "biblatex package detected.\n" if $verbose ;
+ $citpat='(?:[cC]ites?|(?:[pP]aren|foot|[Tt]ext|[sS]mart|super)cites?\*?|footnotecitetex)';
} else {
# citation command pattern for all other citation schemes
$citpat='(?:cite\w*|nocite)';
@@ -1902,11 +1996,13 @@ sub remove_endinput {
# encoding is the encoding
sub flatten {
my ($text,$preamble,$filename,$encoding)=@_;
- my ($includeonly,$dirname,$fname,$newpage,$fullfile,$filecontent,$replacement,$begline,$bblfile,$subfile,$command,$verbenv,$verboptions);
+ my ($includeonly,$dirname,$fname,$newpage,$fullfile,$filecontent,$replacement,$begline,$inputcmd,$bblfile,$subfile,$command,$verbenv,$verboptions,$ignore,$fileonly);
my ($subpreamble,$subbody,$subpost);
+ my ($subdir,$subdirfull,$importfilepath);
require File::Basename ;
- require File::Spec ;
- $dirname = File::Basename::dirname($filename);
+ ### require File::Spec ; # now this is needed even if flatten option not given
+ $filename = File::Spec->rel2abs( $filename ) ;
+ ($ignore, $dirname, $fileonly) = File::Spec->splitpath($filename) ;
$bblfile = $filename;
$bblfile=~s/\.tex$//;
$bblfile.=".bbl";
@@ -1919,11 +2015,51 @@ sub flatten {
print STDERR "DEBUG: includeonly $includeonly\n" if $debug;
+
+ # Run through filter, to let filterscript have a pass if it was set
+ $text = filter($text);
+
+ # Recursively replace \\import and \\subimport files
+ $text =~ s/(^(?:[^%\n]|\\%)*)(\\subimport\{(.*?)\}|\\import\{(.*?)\})(?:[\s]*)\{(.*?)\}/{
+ # $1 is begline
+ # $3 is directory if subimport
+ # $4 is directory if import
+ # $5 is filename
+ $begline = (defined($1)? $1 : "");
+ $subdir = $3 if defined($3);
+ $subdir = $4 if defined($4);
+ $fname = $5;
+ $fname .= ".tex" unless $fname =~ m|\.\w{3,4}$|;
+ print STDERR "DEBUG begline:", $begline, "\n" if $debug;
+ print STDERR "DEBUG", (defined($3)? "subimport_file:" : "import_file:"), $subdir, "\n" if $debug;
+ print STDERR "DEBUG file:", $fname, "\n" if $debug;
+
+ # subimport appends $subdir to the current $dirname. import replaces it with an absolute path.
+ $subdirfull = (defined($3) ? File::Spec->catdir($dirname,$subdir) : $subdir);
+
+ $importfilepath = File::Spec->catfile($subdirfull, $fname);
+
+ print STDERR "importing importfilepath:", $importfilepath,"\n" if $verbose;
+ if ( -f $importfilepath ) {
+ # If file exists, replace input or include command with expanded input
+ $replacement=flatten(read_file_with_encoding($importfilepath, $encoding), $preamble,$importfilepath,$encoding) or die "Could not open file ",$fullfile,": $!";
+ } else {
+ # if file does not exist, do not expand include or input command (do not warn if fname contains #[0-9] as it is then likely part of a command definition
+ # and is not meant to be expanded directly
+ print STDERR "WARNING: Could not find included file ",$importfilepath,". I will continue but not expand |$2|\n";
+ $replacement=(defined($3)? "\\subimport" : "\\import");
+ $replacement .= "{$subdir}{$fname} % Processed";
+ }
+ "$begline$replacement";
+ }/exgm;
+
# recursively replace \\input and \\include files
$text =~ s/(^(?:[^%\n]|\\%)*)(\\input\{(.*?)\}|\\include\{(${includeonly}(?:\.tex)?)\})/{
$begline=(defined($1)? $1 : "") ;
+ $inputcmd=$2;
$fname = $3 if defined($3) ;
$fname = $4 if defined($4) ;
+ $newpage=(defined($4)? " \\newpage " : "") ;
# # add tex extension unless there is a three or four letter extension already
$fname .= ".tex" unless $fname =~ m|\.\w{3,4}$|;
$fullfile = File::Spec->catfile($dirname,$fname);
@@ -1936,12 +2072,11 @@ sub flatten {
$replacement=flatten(read_file_with_encoding($fullfile, $encoding), $preamble,$filename,$encoding) or die "Could not open file ",$fullfile,": $!";
$replacement = remove_endinput($replacement);
# \include always starts a new page; use explicit \newpage command to simulate this
- $newpage=(defined($4)? " \\newpage " : "") ;
} else {
# if file does not exist, do not expand include or input command (do not warn if fname contains #[0-9] as it is then likely part of a command definition
# and is not meant to be expanded directly
- print STDERR "WARNING: Could not find included file ",$fullfile,". I will continue but not expand |$2|\n" unless $fname =~ m(#[0-9]) ;
- $replacement = $2 ; # i.e. just the original command again -> make no change file does not exist
+ print STDERR "WARNING: Could not find included file ",$fullfile,". I will continue but not expand |$inputcmd|\n" unless $fname =~ m(#[0-9])n ;
+ $replacement = $inputcmd ; # i.e. just the original command again -> make no change file does not exist
$newpage="";
}
"$begline$newpage$replacement$newpage";
@@ -2220,6 +2355,7 @@ sub splitlatex {
}
}
+
unshift(@retval,$leadin) if (length($leadin)>0);
return @retval;
}
@@ -2401,10 +2537,14 @@ sub extracttextblocks {
my $wpat=qr/^(?:[a-zA-Z.,'`:;?()!]*)[\s~]*$/; #'
my $retval=[];
+ # we redefine locally $extraspace (shadowing the global definition) to capture command sequences with intervening spaces no matter what the global setting
+ # this is done so we can capture those commands with a predefined number of arguments without having to introduce them again explicitly here
+ my $extraspace='\s*';
+
for ($i=0;$i< scalar @$block;$i++) {
($token,$index)=@{ $block->[$i] };
# store pure text blocks
- if ($token =~ /$wpat/ || ( $token =~/^\\((?:[`'^"~=.]|[\w\d@\*]+))((?:${extraspace}\[$brat_n\]${extraspace}|${extraspace}\{$pat_n\})*)/o
+ if ($token =~ /$wpat/ || ( $token =~/^\\((?:[`'^"~=.]|[\w\d@\*]+))((?:${extraspace}\[$brat_n\]${extraspace}|${extraspace}\{$pat_n\})*)/
&& iscmd($1,\@SAFECMDLIST,\@SAFECMDEXCL)
&& !iscmd($1,\@TEXTCMDLIST,\@TEXTCMDEXCL))) {
# we have text or a command which can be treated as text
@@ -2449,6 +2589,10 @@ sub extractcommands {
my ($i,$token,$index,$cmd,$open,$mid,$closing);
my $retval=[];
+ # we redefine locally $extraspace (shadowing the global definition) to capture command sequences with intervening spaces no matter what the global setting
+ # this is done so we can capture those commands with a predefined number of arguments without having to introduce them again explicitly here
+ my $extraspace='\s*';
+
for ($i=0;$i< scalar @$block;$i++) {
($token,$index)=@{ $block->[$i] };
# check if token is an alphanumeric command sequence with at least one non-optional argument
@@ -2460,6 +2604,7 @@ sub extractcommands {
# $4: } + trailing spaces
if ( ( $token =~ m/^(\\([\w\d\*]+)(?:${extraspace}\[$brat_n\]|${extraspace}\{$pat_n\})*${extraspace}\{)($pat_n)(\}\s*)$/so )
&& iscmd($2,\@TEXTCMDLIST,\@TEXTCMDEXCL) ) {
+ print STDERR "DEBUG EXTRACTCOMMANDS Match |$1|$2|$3|$4|$index \n" if $debug;
# push(@$retval,[ $2,$index,$1,$3,$4 ]);
($cmd,$open,$mid,$closing) = ($2,$1,$3,$4) ;
$closing =~ s/\}/\\RIGHTBRACE/ ;
@@ -2475,20 +2620,20 @@ sub extractcommands {
sub iscmd {
my ($cmd,$regexar,$regexexcl)=@_;
my ($ret)=0;
- print STDERR "DEBUG: iscmd($cmd)=" if $debug;
+ ### print STDERR "DEBUG: iscmd($cmd)=" if $debug;
foreach $pat ( @$regexar ) {
if ( $cmd =~ m/^${pat}$/ ) {
$ret=1 ;
last;
}
}
- print STDERR "0\n" if ($debug && !$ret) ;
+ ### print STDERR "0\n" if ($debug && !$ret) ;
return 0 unless $ret;
foreach $pat ( @$regexexcl ) {
- print STDERR "0\n" if ( $debug && $cmd =~ m/^${pat}$/) ;
+ ### print STDERR "0\n" if ( $debug && $cmd =~ m/^${pat}$/) ;
return 0 if ( $cmd =~ m/^${pat}$/ );
}
- print STDERR "1\n" if $debug;
+ ### print STDERR "1\n" if $debug;
return 1;
}
@@ -2547,7 +2692,6 @@ sub pass2 {
print STDERR " $deltokcnt discarded tokens in $delblkcnt blocks.\n";
print STDERR " $addtokcnt appended tokens in $addblkcnt blocks.\n";
}
-
return(@$retval);
}
@@ -2570,13 +2714,20 @@ sub marktags {
my $cmdcomment= ($opencmd =~ m/^%/); # Flag to indicate whether opencmd is a comment (i.e. if we intend to simply comment out changed commands)
my ($command,$commandword,$closingbracket) ; # temporary variables needed below to remember sub-pattern matches
-# split this block to flatten out sequences joined in pass1
+
+
+# split this block to split sequences joined in pass1
@$block=splitlatex(join "",@$block);
### print STDERR "DEBUG: marktags $openmark,$closemark,$open,$close,$opencmd,$closecmd,$comment\n" if $debug;
### print STDERR "DEBUG: marktags blocksplit ",join("|",@$block),"\n" if $debug;
+
+ # we redefine locally $extraspace (shadowing the global definition) to capture command sequences with intervening spaces no matter what the global setting
+ # this is done so we can capture those commands with a predefined number of arguments without having to introduce them again explicitly here
+ my $extraspace_mt='\s*';
+
+
foreach (@$block) {
$word=$_;
- ### print STDERR "DEBUG MARKTAGS: |$word|\n" if $debug;
if ( $word =~ s/^%/%$comment/ ) {
# a comment
if ($cmd==1) {
@@ -2601,9 +2752,7 @@ sub marktags {
}
# negative lookahead pattern (?!) in second clause is put in to avoid matching \( .. \) patterns
# also note that second pattern will match \\
- print STDERR "DEBUG marktags: Considering word |$word|\n" if $debug;
- if ( $word =~ /^[&{}\[\]]/ || ( $word =~ /^\\(?!\()(\\|[`'^"~=.]|[\w*@]+)/ && !iscmd($1,\@SAFECMDLIST,\@SAFECMDEXCL)) ) {
- ###print STDERR "DEBUG MARKTAGS is a non-safe command ($1)\n" if $debug;
+ if ( $word =~ /^[&{}\[\]]/ || ( $word =~ /^\\(?!\()(\\|[`'^"~=.]|[\w*@]+)/ && !iscmd($1,\@SAFECMDLIST,\@SAFECMDEXCL)) ) {
### if ( $word =~ /^[&{}\[\]]/ || ( $word =~ /^\\([\w*@\\% ]+)/ && !iscmd($1,\@SAFECMDLIST,\@SAFECMDEXCL)) ) {
# word is a command or other significant token (not in SAFECMDLIST)
## same conditions as in subroutine extractcommand:
@@ -2615,13 +2764,13 @@ sub marktags {
# $3: last argument
# $4: } + trailing spaces
### pre-0.3 if ( ( $token =~ m/^(\\([\w\d\*]+)(?:\[$brat0\]|\{$pat_n\})*\{)($pat_n)(\}\s*)$/so )
- if ( ( $word =~ m/^(\\([\w\d\*]+)(?:${extraspace}\[$brat_n\]|${extraspace}\{$pat_n\})*${extraspace}\{)($pat_n)(\}\s*)$/so )
+ if ( ( $word =~ m/^(\\([\w\d\*]+)(?:${extraspace_mt}\[$brat_n\]|${extraspace_mt}\{$pat_n\})*${extraspace_mt}\{)($pat_n)(\}\s*)$/so )
&& (iscmd($2,\@TEXTCMDLIST,\@TEXTCMDEXCL)|| iscmd($2,\@MATHTEXTCMDLIST,\@MATHTEXTCMDEXCL))
&& ( !$cmdcomment || !iscmd($2,\@CONTEXT2CMDLIST, \@CONTEXT2CMDEXCL) ) ) {
# Condition 1: word is a command? - if yes, $1,$2,.. will be set as above
# Condition 2: word is a text command - we mark up the interior of the word. There is a separate check for MATHTEXTCMDLIST
# because for $mathmarkup=WHOLE, the commands should not be split in pass1 (ie. math mode commands are not in
- # TEXTCMDLIST, but the interior of MATHTEXT commands should be highlighted in both deleted and added blocks
+ # TEXTCMDLIST, but the interior of MATHTEXT commnds should be highlighted in both deleted and added blocks
# Condition 3: But if we are in a deleted block ($cmdcomment=1) and
# $2 (the command) is in context2, just treat it as an ordinary command (i.e. comment it open with $opencmd)
# Because we do not want to disable this command
@@ -2657,6 +2806,13 @@ sub marktags {
}
push (@$retval,$AUXCMD,"\n") if $cmdcomment ;
$cmd=-1 ;
+ } elsif ( $cmdcomment &&
+ ( $word =~ m/^(\\([\w\d\*]+)(?:${extraspace_mt}\[$brat_n\]|${extraspace_mt}\{$pat_n\})*${extraspace_mt}\{)($pat_n)(\}\s*)/so )
+ && iscmd($2,\@KEEPCMDLIST, \@KEEPCMDEXCL) ) {
+ # 'keepcmd' in a deleted environment: keep the command as is
+ push (@$retval,$close) if $cmd==0 ;
+ push (@$retval,$word);
+ $cmd=-1; # pretend we are at the beginning of a sequence because we do not want to add an additional $closecmd or $close before the next token, no matter what it is
} else {
# ordinary command
push (@$retval,$opencmd) if $cmd==-1 ;
@@ -2693,52 +2849,19 @@ sub marktags {
}
#used in preprocess
-sub take_comments_and_enter_from_frac() {
- #*************take the \n and % between frac and {}***********
- #notice all of the substitution are made none global
- while( m/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)}(.*?)\\frac(([\s]*%[^\n]*?)*[\r\n|\r|\n])+\{(.*?)\\end\{\1}/s ) {
- # if there isn't any % or \n in the pattern $2 then there should be an \\end{...} in $2
- ### print STDERR "Match the following in take_comments and_enter_from_frac(1):\n****$&****\n" if $debug;
- if( $2 !~ m/\\end\{$1}/s ) {
- # take out % and \n from the next match only (none global)
- s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)}(.*?)\\frac(([\s]*%[^\n]*?)*[\r\n|\r|\n])+\{(.*?)\\end\{\1}/\\begin{$1}$2\\frac{$5\\end{$1}/s;
- }
- else{
- #there are no more % and \n in $2, we want to find the next one so we clear the begin-end from the pattern
- s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)}(.*?)\\end\{\1}/MATHBLOCK$1\{$2\}MATHBLOCKEND/s;
- }
- }
- ###cleaning up
- while( s/MATHBLOCK($MATHENV|$MATHARRENV|SQUAREBRACKET)\{(.*?)\}MATHBLOCKEND/\\begin{$1}$2\\end{$1}/s ){}
- ###*************take the \n and % between frac and {}***********
-
- ###**********take the \n and % between {} and {} of the frac***************
- while( m/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)\}(.*?)\\frac\{(.*?)\\end\{\1\}/s ) {
- # if there isn't any more //frac before the first //end in the pattern $2 then there should be an \\end{...} in $2
- ###print STDERR "Match the following in take_comments and_enter_from_frac(2):\n****$&****\n" if $debug;
- if( $2 !~ m/\\end\{$1\}/s ) {
- # from now on CURRFRAC is the frac we are looking at
- s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)\}(.*?)\\frac\{(.*?)\\end\{\1\}/\\begin\{$1\}$2CURRFRAC\{$3\\end\{$1\}/s;
- while( m/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)\}(.*?)CURRFRAC\{(.*?)\\end\{\1\}/s ) {
- if( m/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)\}(.*?)CURRFRAC\{($pat_n)\}([\s]*(%[^\n]*?)*[\r\n|\r|\n])+[\s]*\{(.*?)\\end\{\1}/s ) {
- s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)\}(.*?)CURRFRAC\{($pat_n)\}([\s]*(%[^\n]*?)*[\r\n|\r|\n])+[\s]*\{(.*?)\\end\{\1\}/\\begin\{$1\}$2CURRFRAC\{$3\}\{$6\\end\{$1\}/s;
- }
- else { # there is no comment or \n between the two brackets {}{}
- # change CURRFRAC to FRACSTART so we can change them all back to //frac{ when we finish
- s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)}(.*?)CURRFRAC\{(.*?)\\end\{\1}/\\begin{$1}$2FRACSTART\{$3\\end{$1}/s;
- }
- }
- }
- else{
- ###there are no more frac in $2, we want to find the next one so we clear the begin-end from the pattern
- s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)}(.*?)\\end\{\1}/MATHBLOCK$1\{$2\}MATHBLOCKEND/s;
- }
-
- }
- ###cleaning up
- while( s/MATHBLOCK($MATHENV|$MATHARRENV|SQUAREBRACKET)\{(.*?)\}MATHBLOCKEND/\\begin{$1}$2\\end{$1}/s ){}
- s/FRACSTART/\\frac/g;
- ###***************take the \n and % between {} and {} of the frac*********************
+sub take_comments_and_newline_from_frac() {
+ # some special magic for common usage of frac, which does not conform to the latexdiff requirements but can be made to fit
+ # note that this is a rare exception to the general rule that the new tex can be reconstructed from the diff file
+
+ # \frac12 -> \frac{1}{2}
+ s/\\frac(\d)(\w)/\\frac\{$1\}\{$2\}/g;
+
+ # \frac1{2b} -> \frac{1}{2b}
+ s/\\frac(\d)/\\frac\{$1\}/g;
+
+ # delete space and comment characters between \frac arguments
+# s/\\frac(?:\s*?%[^\n]*?)*?(\{$pat_n\})\s*(\{$pat_n\})/\\frac$1$2/g;
+ s/\\frac(?:\s|%[^\n]*?)*(\{$pat_n\})(?:\s|%[^\n]*?)*(\{$pat_n\})/\\frac$1$2/g;
}
# preprocess($string, ..)
@@ -2821,7 +2944,7 @@ sub preprocess {
# resort to WHOLE or FINE, or NONE math mode processing.
s/\\begin\{($ARRENV)}(.*?)\\end\{\1}/\\ARRAYBLOCK$1\{$2\\DIFANCHORARRB \}\\DIFANCHORARRE /sg;
- take_comments_and_enter_from_frac();
+ take_comments_and_newline_from_frac();
s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)\}(.*?)\\end\{\1\}/\\MATHBLOCK$1\{$2\\DIFANCHORMATHB \}\\DIFANCHORMATHE /sg;
}
@@ -3439,8 +3562,7 @@ sub restore_item_commands {
# pre-process preamble by looking for commands used in \maketitle (title, author, date etc commands)
# the list of commands is defined in CONTEXT2CMD
# if found then use a bodydiff to mark up content, and replace the corresponding commands
- # in both preambles by marked up version to 'fool' the linediff (such that only body is marked
- # up.
+ # in both preambles by marked up version to 'fool' the linediff (such that only body is marked up).
# A special case are e.g. author commands being added (or removed)
# 1. If commands are added, then the entire content is marked up as new, but also the lines are marked as new in the linediff
# 2. If commands are removed, then the linediff will mark the line as deleted. The program returns
@@ -3518,6 +3640,9 @@ EOF
}
$argnew=$newhash{$cmd}->[2];
$argdiff="{" . join("",bodydiff($argold,$argnew)) ."}";
+ # Replace \RIGHTBRACE by }
+ $argdiff =~ s/\\RIGHTBRACE/}/g;
+
if ( length $optargnew ) {
$optargdiff="[".join("",bodydiff($optargold,$optargnew))."]" ;
$optargdiff =~ s/\\DIFaddbegin /\\DIFaddbeginFL /g;
@@ -3863,6 +3988,7 @@ be real files (not pipes or similar) as they are opened twice.
reason package specific parsing needs to be switched off, use --packages=none.
The following packages trigger special behaviour:
endfloat hyperref amsmath apacite siunitx cleveref glossaries mhchem chemformula/chemmacros
+ biblatex
[ Default: scan the preamble for \\usepackage commands to determine
loaded packages.]
@@ -3944,7 +4070,17 @@ Miscelleneous options
be located in the same directories as the old and new master files,
respectively, making it possible to organise files into old and new directories.
--flatten is applied recursively, so inputted files can contain further
- \\input statements.
+ \\input statements. Also handles files included by the import package
+ (\\import and \\subimport), and \\subfile command.
+
+--filter-script=filterscript Run files through this filterscript (full path preferred) before processing.
+ The filterscript must take STDIN input and output to STDOUT.
+ When coupled with --flatten, each file will be run through the filter as it is brought in.
+
+--ignore-filter-stderr When running with --filter-script, STDERR from the script may cause readability issues.
+ Turn this flag on to ignore STDERR from the filter script.
+
+
--help
-h Show this help text.
@@ -4199,7 +4335,7 @@ define new C<\DIFadd> and C<\DIFdel> commands, which provide a wrapper for these
using them for the text but not for the link defining command (where any markup would cause
errors).
-=item C<apacite>
+=item C<apacite>, C<biblatex>
Redefine the commands recognised as citation commands.
@@ -4505,12 +4641,26 @@ included sections are not expanded. The included files are assumed to
be located in the same directories as the old and new master files,
respectively, making it possible to organise files into old and new directories.
--flatten is applied recursively, so inputted files can contain further
-C<\input> statements.
+C<\input> statements. Also handles files included by the import package
+(C<\import> and C<\subimport>), and C<\subfile> command.
Use of this option might result in prohibitive processing times for
larger documents, and the resulting difference document
no longer reflects the structure of the input documents.
+=item B<--filter-script=filterscript>
+
+Run files through this filterscript (full path preferred) before processing.
+The filterscript must take STDIN input and output to STDOUT.
+When coupled with --flatten, each file will be run through the filter as it is brought in.
+
+=item B<--ignore-filter-stderr>
+
+When running with --filter-script, STDERR from the script may cause readability issues.
+Turn this flag on to ignore STDERR from the filter script.
+
+
+
=item B<--help> or
B<-h>
@@ -5072,6 +5222,8 @@ min
Pr
sec
sup
+bibfield
+bibinfo
[Hclbkdruvt]
[`'^"~=.]
_
@@ -5098,6 +5250,7 @@ framebox
footnote
footnotetext
framebox
+href
intertext
part
(sub){0,2}section\*?
@@ -5111,6 +5264,7 @@ savebox
sbox
shortintertext
shortstack
+sidenote
signature
text.*
value
@@ -5255,7 +5409,7 @@ verbatim[*]?
%DIF CULINECHBAR PREAMBLE
\RequirePackage[normalem]{ulem}
\RequirePackage[dvips]{changebar}
-\RequirePackage{color}
+\RequirePackage{color}\definecolor{RED}{rgb}{1,0,0}\definecolor{BLUE}{rgb}{0,0,1}
\providecommand{\DIFadd}[1]{\protect\cbstart{\protect\color{blue}\uwave{#1}}\protect\cbend}
\providecommand{\DIFdel}[1]{\protect\cbdelete{\protect\color{red}\sout{#1}}\protect\cbdelete}
%DIF END CULINECHBAR PREAMBLE
diff --git a/support/latexdiff/latexdiff-so b/support/latexdiff/latexdiff-so
index 6d07c9a88f..81387135c5 100755
--- a/support/latexdiff/latexdiff-so
+++ b/support/latexdiff/latexdiff-so
@@ -23,6 +23,25 @@
# Detailed usage information at the end of the file
#
+
+# Version 1.3.1
+# Bug fixes:
+# - remove some uninitialised variable $2 warnings in string substitution in flatten function in case included file is not found
+# - add minimal postprocessing to diff processing of preamble commands (replace \RIGHTBRACE by \} )
+# - pre-processing: replace (contributed) routine take_comments_and_enter_from_frac() with take_comments_and_newline_from_frac(), which does the same thing
+# (remove whitespace characters and comments between the argument of \frac commands) in an easier and more robust way. In addition, it
+# will replace commands like \frac12 with \frac{1}{2} as pre-processing step. Fixes issue #184
+# - add "intertext" to list of unsafe math commands @UNSAFEMATHCMD . Fixes issue #179
+# - provide citation command patterns for biblatex and protect them with mbox'es. Fixes issue #199
+# - hardcode number of parameters for \href and \url commands to allow spaces between commands and arguments even if --allow-spaces option is not used (this
+# is needed because some bibliography styles add such in-command-sequence spaces) Fixes issues: #178 #198
+# - bibitem is now kept even in deleted blocks such that deleted references show up properly (this implies that the actual numbers in numerical referencing schemes will change)
+# (this is implemented by introducing a new class of commands KEEPCMD , which are kept as is in deleted environments (no effect in added environments). Currently
+# \bibitem is hardwired to be the only member of this class (fixes issue #194, #174)
+# Features:
+# - add some special processing for revtex bibliography commands, so that the spaces between bibliography commands \bibfield and \bibinfo and their arguments are ignored.
+# (fixes issue #194, should fix #174)
+#
# Version 1.3.0 (7 October 2018):
# - treat options to \documentclass as potential package names (some packages allow implicit loading of or imply selected packages
# - improved pattern matching: now allows nested angular brackets, and is no longer confused by escaped curly braces
@@ -34,6 +53,9 @@
# - added to textcmds: \intertext
# - new config variable CUSTOMDIFCMD to allow defining special versions of commands in added or deleted blocks (Pull request by github user jprotze)
# - added option -no-links (mostly for use by latexdiff-vc in only-changes modes) (Pull request by github user jprotze)
+# - new option --filter-script to run both input through a pre-processing script (PR jasonmccsmith #167)
+# new option --no-filter-stderr to hide stderr output from filter-script (potentially dangerous, as this might hide malfunctioning of filter scripts)
+# - --flatten now can deal with imports made using the import package {PR jasonmccsmith #173)
# Bug fixes:
# - pattern matching of \verb and \lstinline commands had an error which meant they would trigger on commands beginning with \verb.
# - In description environments, mark up item descriptions by effectively reating the insides of item commannds as text commands (fixes #161)
@@ -176,7 +198,7 @@
# package and use the standard latexdiff version instead
# (current distribution available from http://search.cpan.org/~nedkonz/Algorithm-Diff-1.15
# the most recent version can be found via http://search.cpan.org/search?module=Algorithm::Diff )
-# Please note that the LICENCSE for Algorithm::Diff :
+# Please note the LICENCE for Algorithm::Diff :
# "Copyright (c) 2000-2002 Ned Konz. All rights reserved.
# This program is free software;
# you can redistribute it and/or modify it under the same terms
@@ -630,11 +652,13 @@ use strict ;
use warnings;
use utf8 ;
+use File::Spec ;
+
my ($algodiffversion)=split(/ /,$Algorithm::Diff::VERSION);
my ($versionstring)=<<EOF ;
-This is LATEXDIFF 1.3.0 (Algorithm::Diff $Algorithm::Diff::VERSION, Perl $^V)
+This is LATEXDIFF 1.3.1a (Algorithm::Diff $Algorithm::Diff::VERSION, Perl $^V)
(c) 2004-2018 F J Tilmann
EOF
@@ -655,7 +679,7 @@ my %CONFIG=(
COUNTERCMD => undef,
# COUNTERCMD textcmds which are associated with a counter
# If any of these commands occur in a deleted block
- # they will be succeeded by an \addtocounter{...}{-1}
+ # they will be followed by an \addtocounter{...}{-1}
# for the associated counter such that the overall numbers
# should be the same as in the new file
LISTENV => undef , # list making environments - they will generally be kept
@@ -704,7 +728,7 @@ my ($ARRENV,
my $LABELCMD='(?:label)'; # matching commands are disabled within deleted blocks - mostly useful for maths mode, as otherwise it would be fine to just not add those to SAFECMDLIST
-my @UNSAFEMATHCMD=('qedhere'); # Commands which are definitely unsafe for marking up in math mode (amsmath qedhere only tested to not work with UNDERLINE markup) (only affects WHOLE and COARSE math markup modes). Note that unlike text mode (or FINE math mode0 deleted unsafe commands are not deleted but simply taken outside \DIFdel
+my @UNSAFEMATHCMD=('qedhere','intertext'); # Commands which are definitely unsafe for marking up in math mode (amsmath qedhere only tested to not work with UNDERLINE markup) (only affects WHOLE and COARSE math markup modes). Note that unlike text mode (or FINE math mode0 deleted unsafe commands are not deleted but simply taken outside \DIFdel
my $MBOXINLINEMATH=0; # if set to 1 then surround marked-up inline maths expression with \mbox ( to get around compatibility
# problems between some maths packages and ulem package
@@ -759,6 +783,8 @@ our @SAFECMDEXCL=();
my @MBOXCMDLIST=(); # patterns for commands which are in principle safe but which need to be surrounded by an \mbox
my @MBOXCMDEXCL=(); # all the patterns in MBOXCMDLIST will be appended to SAFECMDLIST
+my @KEEPCMDLIST=( qr/^bibitem$/ ); # patterns for commands which should not be deleted in nominally delete text passages
+my @KEEPCMDEXCL=();
my ($i,$j,$l);
my ($old,$new);
@@ -772,6 +798,7 @@ my ($oldpost, $newpost);
my ($diffall);
# Option names
my ($type,$subtype,$floattype,$config,$preamblefile,$encoding,$nolabel,$visiblelabel,
+ $filterscript,$ignorefilterstderr,
$showpreamble,$showsafe,$showtext,$showconfig,$showall,
$replacesafe,$appendsafe,$excludesafe,
$replacetext,$appendtext,$excludetext,
@@ -873,6 +900,8 @@ GetOptions('type|t=s' => \$type,
'ignore-warnings' => \$ignorewarnings,
'driver=s'=> \$driver,
'flatten' => \$flatten,
+ 'filter-script=s' => \$filterscript,
+ 'ignore-filter-stderr' => \$ignorefilterstderr,
'no-links' => \$nolinks,
'version' => \$version,
'help|h' => \$help,
@@ -917,7 +946,8 @@ if (defined($mathmarkup)) {
# else use numerical value
}
-
+# Give filterscript a default empty string
+$filterscript="" unless defined($filterscript);
# setting extra preamble commands
if (defined($preamblefile)) {
@@ -1075,17 +1105,20 @@ if ( $mathmarkup == COARSE || $mathmarkup == WHOLE ) {
+
+
foreach $pkg ( @packagelist ) {
map { $packages{$_}="" } split(/,/,$pkg) ;
}
-
if ($showconfig || $showtext || $showsafe || $showpreamble) {
+
show_configuration();
exit 0;
}
+
if ( @ARGV != 2 ) {
print STDERR "2 and only 2 non-option arguments required. Write latexdiff -h to get help\n";
exit(2);
@@ -1144,6 +1177,17 @@ push(@SAFECMDLIST, qr/^QLEFTBRACE$/, qr/^QRIGHTBRACE$/);
# word: sequence of letters or accents followed by letter
my $word_ja='\p{Han}+|\p{InHiragana}+|\p{InKatakana}+';
my $word='(?:' . $word_ja . '|(?:(?:[-\w\d*]|\\\\[\"\'\`~^][A-Za-z\*])(?!(?:' . $word_ja . ')))+)';
+
+ # for selected commands, the number of arguments is known, and we can therefore allow spaces between command and its argument
+ # Note that it is still expected that the arguments are blocks marked by parentheses rather than single characters, and that intervening comments will inhibit the association
+ my $predefinedcmdoptseq01='\\\\(?:url|BibitemShut)\s*\s*(?:\{'. $pat_n . '\}\s*){1}'; # Commands with one non-optional argument
+ my $predefinedcmdoptseq12='\\\\(?:href|bibfield|bibinfo)\s*(?:\['.$brat_n.'\])?\s*(?:\{'. $pat_n . '\}\s*){2}'; # Commands with one optional and two non-optional arguments
+# my $predefinedcmdoptseq11='\\\\(?:bibitem)\s*(?:\['.$brat_n.'\])?\s*(?:\{'. $pat_n . '\}\s*){1}'; # Commands with one optional and one non-optional arguments
+# \bibitem in revtex styles appears to be always followed by \BibItemOpen. We bind \BibItemOpen to the bibitem (if present) in order to prevent the comparison algorithm to interpret the \BibItemOpen as an identical part of the sequence; this interpretation can lead to added and removed entries to the reference list to become mixed.
+ my $predefinedbibitem='\\\\(?:bibitem)\s*(?:\['.$brat_n.'\])?\s*(?:\{'. $pat_n . '\})(?:%?\s*\\\\BibitemOpen)?'; # Commands with one optional and one non-optional arguments
+
+ my $predefinedcmdoptseq='(?:'.$predefinedcmdoptseq12.'|'.$predefinedcmdoptseq01.'|'.$predefinedbibitem.')';
+
my $cmdleftright='\\\\(?:left|right|[Bb]igg?[lrm]?|middle)\s*(?:[<>()\[\]|\.]|\\\\(?:[|{}]|\w+))';
my $cmdoptseq='\\\\[\w\d@\*]+'.$extraspace.'(?:(?:<'.$abrat0.'>|\['.$brat_n.'\]|\{'. $pat_n . '\}|\(' . $coords .'\))'.$extraspace.')*';
my $defseq='\\\\def\\\\[\w\d@\*]+(?:#\d+|\[#\d+\])+(?:\{'. $pat_n . '\})?';
@@ -1152,7 +1196,7 @@ push(@SAFECMDLIST, qr/^QLEFTBRACE$/, qr/^QRIGHTBRACE$/);
my $math='\$(?:[^$]|\\\$)*?\$|\\\\[(](?:.|\n)*?\\\\[)]';
## the current maths command cannot cope with newline within the math expression
my $comment='%[^\n]*\n';
- my $pat=qr/(?:\A\s*)?(?:${and}|${quotemarks}|${number}|${word}|$quotedunderscore|${defseq}|$cmdleftright|${cmdoptseq}|${math}|${backslashnl}|${oneletcmd}|${comment}|${punct}|${mathpunct}|\{|\})\s*/ ;
+ my $pat=qr/(?:\A\s*)?(?:${and}|${quotemarks}|${number}|${word}|$quotedunderscore|${defseq}|$cmdleftright|${predefinedcmdoptseq}|${cmdoptseq}|${math}|${backslashnl}|${oneletcmd}|${comment}|${punct}|${mathpunct}|\{|\})\s*/ ;
@@ -1203,9 +1247,56 @@ if (lc($encoding) eq "utf8" ) {
binmode(STDERR, ":utf8");
}
+# filter($text)
+# Runs $text through the script provided in $filterscript argument, if set
+# If not set, just returns $text unchanged.
+# If flatten was set, defer filtering to flatten. flatten will run the filter
+# on all incoming text prior to its own processing.
+# If flatten was not set, filter each of old and new once (see just below this def)
+sub filter {
+ my ($text)=@_;
+ my ($textout,$pid);
+ if ($filterscript ne "") {
+ print STDERR "Passing " . length($text) . " chars to filter script " . $filterscript . "\n" if $verbose;
+
+ if ($ignorefilterstderr) {
+ # If we need to capture and bury STDERR, use the Open3 version, and close CHLD_ERR below.
+ use IPC::Open3;
+ # We consume STDERR from the process, and hide it
+ $pid = open3(\*CHLD_IN, \*CHLD_OUT, \*CHLD_ERR, $filterscript) or die "open3() failed $!";
+ }
+ else {
+ # Capture STDOUT and use as our new $text. Allow STDERR to go to console.
+ use IPC::Open2;
+ $pid = open2(\*CHLD_OUT, \*CHLD_IN, $filterscript) or die "open2() failed $!";
+ }
+ # Send in $text
+ print CHLD_IN $text."\n"; # Adding a newline just to make sure there is one.
+ close CHLD_IN;
+ # Wait for output and gather it up
+ while (<CHLD_OUT>) {
+ $textout = $textout.$_;
+ }
+ if ($ignorefilterstderr) {
+ close CHLD_ERR; # Enable only if Open3 used above
+ }
+ # On the off chance a very long running and/or frequently called script is used.
+ waitpid( $pid, 0 );
+ $text = $textout;
+ print STDERR "Received " . length($text) . " chars after filtering\n" if $verbose;
+ print STDERR $text if $verbose;
+ }
+ return $text;
+}
+
$old=read_file_with_encoding($oldfile,$encoding);
$new=read_file_with_encoding($newfile,$encoding);
+if (not defined($flatten)) {
+ $old=filter($old);
+ $new=filter($new);
+}
+
@@ -1217,11 +1308,11 @@ exetime(1);
if ($flatten) {
- $oldbody=flatten($oldbody,$oldpreamble,$oldfile,$encoding);
- $newbody=flatten($newbody,$newpreamble,$newfile,$encoding);
+ $oldbody=flatten($oldbody,$oldpreamble,File::Spec->rel2abs($oldfile),$encoding);
+ $newbody=flatten($newbody,$newpreamble,File::Spec->rel2abs($newfile),$encoding);
# flatten preamble
- $oldpreamble=flatten($oldpreamble,$oldpreamble,$oldfile,$encoding);
- $newpreamble=flatten($newpreamble,$newpreamble,$newfile,$encoding);
+ $oldpreamble=flatten($oldpreamble,$oldpreamble,File::Spec->rel2abs($oldfile),$encoding);
+ $newpreamble=flatten($newpreamble,$newpreamble,File::Spec->rel2abs($newfile),$encoding);
}
@@ -1476,6 +1567,9 @@ my ( $citpat);
if ( defined $packages{"apacite"} ) {
print STDERR "apacite package detected.\n" if $verbose ;
$citpat='(?:mask)?(?:full|short|no)?cite(?:A|author|year|meta)?(?:NP)?';
+} elsif (defined $packages{"biblatex"}) {
+ print STDERR "biblatex package detected.\n" if $verbose ;
+ $citpat='(?:[cC]ites?|(?:[pP]aren|foot|[Tt]ext|[sS]mart|super)cites?\*?|footnotecitetex)';
} else {
# citation command pattern for all other citation schemes
$citpat='(?:cite\w*|nocite)';
@@ -1798,11 +1892,13 @@ sub remove_endinput {
# encoding is the encoding
sub flatten {
my ($text,$preamble,$filename,$encoding)=@_;
- my ($includeonly,$dirname,$fname,$newpage,$fullfile,$filecontent,$replacement,$begline,$bblfile,$subfile,$command,$verbenv,$verboptions);
+ my ($includeonly,$dirname,$fname,$newpage,$fullfile,$filecontent,$replacement,$begline,$inputcmd,$bblfile,$subfile,$command,$verbenv,$verboptions,$ignore,$fileonly);
my ($subpreamble,$subbody,$subpost);
+ my ($subdir,$subdirfull,$importfilepath);
require File::Basename ;
- require File::Spec ;
- $dirname = File::Basename::dirname($filename);
+ ### require File::Spec ; # now this is needed even if flatten option not given
+ $filename = File::Spec->rel2abs( $filename ) ;
+ ($ignore, $dirname, $fileonly) = File::Spec->splitpath($filename) ;
$bblfile = $filename;
$bblfile=~s/\.tex$//;
$bblfile.=".bbl";
@@ -1815,11 +1911,51 @@ sub flatten {
print STDERR "DEBUG: includeonly $includeonly\n" if $debug;
+
+ # Run through filter, to let filterscript have a pass if it was set
+ $text = filter($text);
+
+ # Recursively replace \\import and \\subimport files
+ $text =~ s/(^(?:[^%\n]|\\%)*)(\\subimport\{(.*?)\}|\\import\{(.*?)\})(?:[\s]*)\{(.*?)\}/{
+ # $1 is begline
+ # $3 is directory if subimport
+ # $4 is directory if import
+ # $5 is filename
+ $begline = (defined($1)? $1 : "");
+ $subdir = $3 if defined($3);
+ $subdir = $4 if defined($4);
+ $fname = $5;
+ $fname .= ".tex" unless $fname =~ m|\.\w{3,4}$|;
+ print STDERR "DEBUG begline:", $begline, "\n" if $debug;
+ print STDERR "DEBUG", (defined($3)? "subimport_file:" : "import_file:"), $subdir, "\n" if $debug;
+ print STDERR "DEBUG file:", $fname, "\n" if $debug;
+
+ # subimport appends $subdir to the current $dirname. import replaces it with an absolute path.
+ $subdirfull = (defined($3) ? File::Spec->catdir($dirname,$subdir) : $subdir);
+
+ $importfilepath = File::Spec->catfile($subdirfull, $fname);
+
+ print STDERR "importing importfilepath:", $importfilepath,"\n" if $verbose;
+ if ( -f $importfilepath ) {
+ # If file exists, replace input or include command with expanded input
+ $replacement=flatten(read_file_with_encoding($importfilepath, $encoding), $preamble,$importfilepath,$encoding) or die "Could not open file ",$fullfile,": $!";
+ } else {
+ # if file does not exist, do not expand include or input command (do not warn if fname contains #[0-9] as it is then likely part of a command definition
+ # and is not meant to be expanded directly
+ print STDERR "WARNING: Could not find included file ",$importfilepath,". I will continue but not expand |$2|\n";
+ $replacement=(defined($3)? "\\subimport" : "\\import");
+ $replacement .= "{$subdir}{$fname} % Processed";
+ }
+ "$begline$replacement";
+ }/exgm;
+
# recursively replace \\input and \\include files
$text =~ s/(^(?:[^%\n]|\\%)*)(\\input\{(.*?)\}|\\include\{(${includeonly}(?:\.tex)?)\})/{
$begline=(defined($1)? $1 : "") ;
+ $inputcmd=$2;
$fname = $3 if defined($3) ;
$fname = $4 if defined($4) ;
+ $newpage=(defined($4)? " \\newpage " : "") ;
# # add tex extension unless there is a three or four letter extension already
$fname .= ".tex" unless $fname =~ m|\.\w{3,4}$|;
$fullfile = File::Spec->catfile($dirname,$fname);
@@ -1832,12 +1968,11 @@ sub flatten {
$replacement=flatten(read_file_with_encoding($fullfile, $encoding), $preamble,$filename,$encoding) or die "Could not open file ",$fullfile,": $!";
$replacement = remove_endinput($replacement);
# \include always starts a new page; use explicit \newpage command to simulate this
- $newpage=(defined($4)? " \\newpage " : "") ;
} else {
# if file does not exist, do not expand include or input command (do not warn if fname contains #[0-9] as it is then likely part of a command definition
# and is not meant to be expanded directly
- print STDERR "WARNING: Could not find included file ",$fullfile,". I will continue but not expand |$2|\n" unless $fname =~ m(#[0-9]) ;
- $replacement = $2 ; # i.e. just the original command again -> make no change file does not exist
+ print STDERR "WARNING: Could not find included file ",$fullfile,". I will continue but not expand |$inputcmd|\n" unless $fname =~ m(#[0-9])n ;
+ $replacement = $inputcmd ; # i.e. just the original command again -> make no change file does not exist
$newpage="";
}
"$begline$newpage$replacement$newpage";
@@ -2116,6 +2251,7 @@ sub splitlatex {
}
}
+
unshift(@retval,$leadin) if (length($leadin)>0);
return @retval;
}
@@ -2297,10 +2433,14 @@ sub extracttextblocks {
my $wpat=qr/^(?:[a-zA-Z.,'`:;?()!]*)[\s~]*$/; #'
my $retval=[];
+ # we redefine locally $extraspace (shadowing the global definition) to capture command sequences with intervening spaces no matter what the global setting
+ # this is done so we can capture those commands with a predefined number of arguments without having to introduce them again explicitly here
+ my $extraspace='\s*';
+
for ($i=0;$i< scalar @$block;$i++) {
($token,$index)=@{ $block->[$i] };
# store pure text blocks
- if ($token =~ /$wpat/ || ( $token =~/^\\((?:[`'^"~=.]|[\w\d@\*]+))((?:${extraspace}\[$brat_n\]${extraspace}|${extraspace}\{$pat_n\})*)/o
+ if ($token =~ /$wpat/ || ( $token =~/^\\((?:[`'^"~=.]|[\w\d@\*]+))((?:${extraspace}\[$brat_n\]${extraspace}|${extraspace}\{$pat_n\})*)/
&& iscmd($1,\@SAFECMDLIST,\@SAFECMDEXCL)
&& !iscmd($1,\@TEXTCMDLIST,\@TEXTCMDEXCL))) {
# we have text or a command which can be treated as text
@@ -2345,6 +2485,10 @@ sub extractcommands {
my ($i,$token,$index,$cmd,$open,$mid,$closing);
my $retval=[];
+ # we redefine locally $extraspace (shadowing the global definition) to capture command sequences with intervening spaces no matter what the global setting
+ # this is done so we can capture those commands with a predefined number of arguments without having to introduce them again explicitly here
+ my $extraspace='\s*';
+
for ($i=0;$i< scalar @$block;$i++) {
($token,$index)=@{ $block->[$i] };
# check if token is an alphanumeric command sequence with at least one non-optional argument
@@ -2356,6 +2500,7 @@ sub extractcommands {
# $4: } + trailing spaces
if ( ( $token =~ m/^(\\([\w\d\*]+)(?:${extraspace}\[$brat_n\]|${extraspace}\{$pat_n\})*${extraspace}\{)($pat_n)(\}\s*)$/so )
&& iscmd($2,\@TEXTCMDLIST,\@TEXTCMDEXCL) ) {
+ print STDERR "DEBUG EXTRACTCOMMANDS Match |$1|$2|$3|$4|$index \n" if $debug;
# push(@$retval,[ $2,$index,$1,$3,$4 ]);
($cmd,$open,$mid,$closing) = ($2,$1,$3,$4) ;
$closing =~ s/\}/\\RIGHTBRACE/ ;
@@ -2371,20 +2516,20 @@ sub extractcommands {
sub iscmd {
my ($cmd,$regexar,$regexexcl)=@_;
my ($ret)=0;
- print STDERR "DEBUG: iscmd($cmd)=" if $debug;
+ ### print STDERR "DEBUG: iscmd($cmd)=" if $debug;
foreach $pat ( @$regexar ) {
if ( $cmd =~ m/^${pat}$/ ) {
$ret=1 ;
last;
}
}
- print STDERR "0\n" if ($debug && !$ret) ;
+ ### print STDERR "0\n" if ($debug && !$ret) ;
return 0 unless $ret;
foreach $pat ( @$regexexcl ) {
- print STDERR "0\n" if ( $debug && $cmd =~ m/^${pat}$/) ;
+ ### print STDERR "0\n" if ( $debug && $cmd =~ m/^${pat}$/) ;
return 0 if ( $cmd =~ m/^${pat}$/ );
}
- print STDERR "1\n" if $debug;
+ ### print STDERR "1\n" if $debug;
return 1;
}
@@ -2443,7 +2588,6 @@ sub pass2 {
print STDERR " $deltokcnt discarded tokens in $delblkcnt blocks.\n";
print STDERR " $addtokcnt appended tokens in $addblkcnt blocks.\n";
}
-
return(@$retval);
}
@@ -2466,13 +2610,20 @@ sub marktags {
my $cmdcomment= ($opencmd =~ m/^%/); # Flag to indicate whether opencmd is a comment (i.e. if we intend to simply comment out changed commands)
my ($command,$commandword,$closingbracket) ; # temporary variables needed below to remember sub-pattern matches
-# split this block to flatten out sequences joined in pass1
+
+
+# split this block to split sequences joined in pass1
@$block=splitlatex(join "",@$block);
### print STDERR "DEBUG: marktags $openmark,$closemark,$open,$close,$opencmd,$closecmd,$comment\n" if $debug;
### print STDERR "DEBUG: marktags blocksplit ",join("|",@$block),"\n" if $debug;
+
+ # we redefine locally $extraspace (shadowing the global definition) to capture command sequences with intervening spaces no matter what the global setting
+ # this is done so we can capture those commands with a predefined number of arguments without having to introduce them again explicitly here
+ my $extraspace_mt='\s*';
+
+
foreach (@$block) {
$word=$_;
- ### print STDERR "DEBUG MARKTAGS: |$word|\n" if $debug;
if ( $word =~ s/^%/%$comment/ ) {
# a comment
if ($cmd==1) {
@@ -2497,9 +2648,7 @@ sub marktags {
}
# negative lookahead pattern (?!) in second clause is put in to avoid matching \( .. \) patterns
# also note that second pattern will match \\
- print STDERR "DEBUG marktags: Considering word |$word|\n" if $debug;
- if ( $word =~ /^[&{}\[\]]/ || ( $word =~ /^\\(?!\()(\\|[`'^"~=.]|[\w*@]+)/ && !iscmd($1,\@SAFECMDLIST,\@SAFECMDEXCL)) ) {
- ###print STDERR "DEBUG MARKTAGS is a non-safe command ($1)\n" if $debug;
+ if ( $word =~ /^[&{}\[\]]/ || ( $word =~ /^\\(?!\()(\\|[`'^"~=.]|[\w*@]+)/ && !iscmd($1,\@SAFECMDLIST,\@SAFECMDEXCL)) ) {
### if ( $word =~ /^[&{}\[\]]/ || ( $word =~ /^\\([\w*@\\% ]+)/ && !iscmd($1,\@SAFECMDLIST,\@SAFECMDEXCL)) ) {
# word is a command or other significant token (not in SAFECMDLIST)
## same conditions as in subroutine extractcommand:
@@ -2511,13 +2660,13 @@ sub marktags {
# $3: last argument
# $4: } + trailing spaces
### pre-0.3 if ( ( $token =~ m/^(\\([\w\d\*]+)(?:\[$brat0\]|\{$pat_n\})*\{)($pat_n)(\}\s*)$/so )
- if ( ( $word =~ m/^(\\([\w\d\*]+)(?:${extraspace}\[$brat_n\]|${extraspace}\{$pat_n\})*${extraspace}\{)($pat_n)(\}\s*)$/so )
+ if ( ( $word =~ m/^(\\([\w\d\*]+)(?:${extraspace_mt}\[$brat_n\]|${extraspace_mt}\{$pat_n\})*${extraspace_mt}\{)($pat_n)(\}\s*)$/so )
&& (iscmd($2,\@TEXTCMDLIST,\@TEXTCMDEXCL)|| iscmd($2,\@MATHTEXTCMDLIST,\@MATHTEXTCMDEXCL))
&& ( !$cmdcomment || !iscmd($2,\@CONTEXT2CMDLIST, \@CONTEXT2CMDEXCL) ) ) {
# Condition 1: word is a command? - if yes, $1,$2,.. will be set as above
# Condition 2: word is a text command - we mark up the interior of the word. There is a separate check for MATHTEXTCMDLIST
# because for $mathmarkup=WHOLE, the commands should not be split in pass1 (ie. math mode commands are not in
- # TEXTCMDLIST, but the interior of MATHTEXT commands should be highlighted in both deleted and added blocks
+ # TEXTCMDLIST, but the interior of MATHTEXT commnds should be highlighted in both deleted and added blocks
# Condition 3: But if we are in a deleted block ($cmdcomment=1) and
# $2 (the command) is in context2, just treat it as an ordinary command (i.e. comment it open with $opencmd)
# Because we do not want to disable this command
@@ -2553,6 +2702,13 @@ sub marktags {
}
push (@$retval,$AUXCMD,"\n") if $cmdcomment ;
$cmd=-1 ;
+ } elsif ( $cmdcomment &&
+ ( $word =~ m/^(\\([\w\d\*]+)(?:${extraspace_mt}\[$brat_n\]|${extraspace_mt}\{$pat_n\})*${extraspace_mt}\{)($pat_n)(\}\s*)/so )
+ && iscmd($2,\@KEEPCMDLIST, \@KEEPCMDEXCL) ) {
+ # 'keepcmd' in a deleted environment: keep the command as is
+ push (@$retval,$close) if $cmd==0 ;
+ push (@$retval,$word);
+ $cmd=-1; # pretend we are at the beginning of a sequence because we do not want to add an additional $closecmd or $close before the next token, no matter what it is
} else {
# ordinary command
push (@$retval,$opencmd) if $cmd==-1 ;
@@ -2589,52 +2745,19 @@ sub marktags {
}
#used in preprocess
-sub take_comments_and_enter_from_frac() {
- #*************take the \n and % between frac and {}***********
- #notice all of the substitution are made none global
- while( m/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)}(.*?)\\frac(([\s]*%[^\n]*?)*[\r\n|\r|\n])+\{(.*?)\\end\{\1}/s ) {
- # if there isn't any % or \n in the pattern $2 then there should be an \\end{...} in $2
- ### print STDERR "Match the following in take_comments and_enter_from_frac(1):\n****$&****\n" if $debug;
- if( $2 !~ m/\\end\{$1}/s ) {
- # take out % and \n from the next match only (none global)
- s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)}(.*?)\\frac(([\s]*%[^\n]*?)*[\r\n|\r|\n])+\{(.*?)\\end\{\1}/\\begin{$1}$2\\frac{$5\\end{$1}/s;
- }
- else{
- #there are no more % and \n in $2, we want to find the next one so we clear the begin-end from the pattern
- s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)}(.*?)\\end\{\1}/MATHBLOCK$1\{$2\}MATHBLOCKEND/s;
- }
- }
- ###cleaning up
- while( s/MATHBLOCK($MATHENV|$MATHARRENV|SQUAREBRACKET)\{(.*?)\}MATHBLOCKEND/\\begin{$1}$2\\end{$1}/s ){}
- ###*************take the \n and % between frac and {}***********
-
- ###**********take the \n and % between {} and {} of the frac***************
- while( m/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)\}(.*?)\\frac\{(.*?)\\end\{\1\}/s ) {
- # if there isn't any more //frac before the first //end in the pattern $2 then there should be an \\end{...} in $2
- ###print STDERR "Match the following in take_comments and_enter_from_frac(2):\n****$&****\n" if $debug;
- if( $2 !~ m/\\end\{$1\}/s ) {
- # from now on CURRFRAC is the frac we are looking at
- s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)\}(.*?)\\frac\{(.*?)\\end\{\1\}/\\begin\{$1\}$2CURRFRAC\{$3\\end\{$1\}/s;
- while( m/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)\}(.*?)CURRFRAC\{(.*?)\\end\{\1\}/s ) {
- if( m/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)\}(.*?)CURRFRAC\{($pat_n)\}([\s]*(%[^\n]*?)*[\r\n|\r|\n])+[\s]*\{(.*?)\\end\{\1}/s ) {
- s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)\}(.*?)CURRFRAC\{($pat_n)\}([\s]*(%[^\n]*?)*[\r\n|\r|\n])+[\s]*\{(.*?)\\end\{\1\}/\\begin\{$1\}$2CURRFRAC\{$3\}\{$6\\end\{$1\}/s;
- }
- else { # there is no comment or \n between the two brackets {}{}
- # change CURRFRAC to FRACSTART so we can change them all back to //frac{ when we finish
- s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)}(.*?)CURRFRAC\{(.*?)\\end\{\1}/\\begin{$1}$2FRACSTART\{$3\\end{$1}/s;
- }
- }
- }
- else{
- ###there are no more frac in $2, we want to find the next one so we clear the begin-end from the pattern
- s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)}(.*?)\\end\{\1}/MATHBLOCK$1\{$2\}MATHBLOCKEND/s;
- }
-
- }
- ###cleaning up
- while( s/MATHBLOCK($MATHENV|$MATHARRENV|SQUAREBRACKET)\{(.*?)\}MATHBLOCKEND/\\begin{$1}$2\\end{$1}/s ){}
- s/FRACSTART/\\frac/g;
- ###***************take the \n and % between {} and {} of the frac*********************
+sub take_comments_and_newline_from_frac() {
+ # some special magic for common usage of frac, which does not conform to the latexdiff requirements but can be made to fit
+ # note that this is a rare exception to the general rule that the new tex can be reconstructed from the diff file
+
+ # \frac12 -> \frac{1}{2}
+ s/\\frac(\d)(\w)/\\frac\{$1\}\{$2\}/g;
+
+ # \frac1{2b} -> \frac{1}{2b}
+ s/\\frac(\d)/\\frac\{$1\}/g;
+
+ # delete space and comment characters between \frac arguments
+# s/\\frac(?:\s*?%[^\n]*?)*?(\{$pat_n\})\s*(\{$pat_n\})/\\frac$1$2/g;
+ s/\\frac(?:\s|%[^\n]*?)*(\{$pat_n\})(?:\s|%[^\n]*?)*(\{$pat_n\})/\\frac$1$2/g;
}
# preprocess($string, ..)
@@ -2717,7 +2840,7 @@ sub preprocess {
# resort to WHOLE or FINE, or NONE math mode processing.
s/\\begin\{($ARRENV)}(.*?)\\end\{\1}/\\ARRAYBLOCK$1\{$2\\DIFANCHORARRB \}\\DIFANCHORARRE /sg;
- take_comments_and_enter_from_frac();
+ take_comments_and_newline_from_frac();
s/\\begin\{($MATHENV|$MATHARRENV|SQUAREBRACKET)\}(.*?)\\end\{\1\}/\\MATHBLOCK$1\{$2\\DIFANCHORMATHB \}\\DIFANCHORMATHE /sg;
}
@@ -3335,8 +3458,7 @@ sub restore_item_commands {
# pre-process preamble by looking for commands used in \maketitle (title, author, date etc commands)
# the list of commands is defined in CONTEXT2CMD
# if found then use a bodydiff to mark up content, and replace the corresponding commands
- # in both preambles by marked up version to 'fool' the linediff (such that only body is marked
- # up.
+ # in both preambles by marked up version to 'fool' the linediff (such that only body is marked up).
# A special case are e.g. author commands being added (or removed)
# 1. If commands are added, then the entire content is marked up as new, but also the lines are marked as new in the linediff
# 2. If commands are removed, then the linediff will mark the line as deleted. The program returns
@@ -3414,6 +3536,9 @@ EOF
}
$argnew=$newhash{$cmd}->[2];
$argdiff="{" . join("",bodydiff($argold,$argnew)) ."}";
+ # Replace \RIGHTBRACE by }
+ $argdiff =~ s/\\RIGHTBRACE/}/g;
+
if ( length $optargnew ) {
$optargdiff="[".join("",bodydiff($optargold,$optargnew))."]" ;
$optargdiff =~ s/\\DIFaddbegin /\\DIFaddbeginFL /g;
@@ -3759,6 +3884,7 @@ be real files (not pipes or similar) as they are opened twice.
reason package specific parsing needs to be switched off, use --packages=none.
The following packages trigger special behaviour:
endfloat hyperref amsmath apacite siunitx cleveref glossaries mhchem chemformula/chemmacros
+ biblatex
[ Default: scan the preamble for \\usepackage commands to determine
loaded packages.]
@@ -3840,7 +3966,17 @@ Miscelleneous options
be located in the same directories as the old and new master files,
respectively, making it possible to organise files into old and new directories.
--flatten is applied recursively, so inputted files can contain further
- \\input statements.
+ \\input statements. Also handles files included by the import package
+ (\\import and \\subimport), and \\subfile command.
+
+--filter-script=filterscript Run files through this filterscript (full path preferred) before processing.
+ The filterscript must take STDIN input and output to STDOUT.
+ When coupled with --flatten, each file will be run through the filter as it is brought in.
+
+--ignore-filter-stderr When running with --filter-script, STDERR from the script may cause readability issues.
+ Turn this flag on to ignore STDERR from the filter script.
+
+
--help
-h Show this help text.
@@ -4095,7 +4231,7 @@ define new C<\DIFadd> and C<\DIFdel> commands, which provide a wrapper for these
using them for the text but not for the link defining command (where any markup would cause
errors).
-=item C<apacite>
+=item C<apacite>, C<biblatex>
Redefine the commands recognised as citation commands.
@@ -4401,12 +4537,26 @@ included sections are not expanded. The included files are assumed to
be located in the same directories as the old and new master files,
respectively, making it possible to organise files into old and new directories.
--flatten is applied recursively, so inputted files can contain further
-C<\input> statements.
+C<\input> statements. Also handles files included by the import package
+(C<\import> and C<\subimport>), and C<\subfile> command.
Use of this option might result in prohibitive processing times for
larger documents, and the resulting difference document
no longer reflects the structure of the input documents.
+=item B<--filter-script=filterscript>
+
+Run files through this filterscript (full path preferred) before processing.
+The filterscript must take STDIN input and output to STDOUT.
+When coupled with --flatten, each file will be run through the filter as it is brought in.
+
+=item B<--ignore-filter-stderr>
+
+When running with --filter-script, STDERR from the script may cause readability issues.
+Turn this flag on to ignore STDERR from the filter script.
+
+
+
=item B<--help> or
B<-h>
@@ -4968,6 +5118,8 @@ min
Pr
sec
sup
+bibfield
+bibinfo
[Hclbkdruvt]
[`'^"~=.]
_
@@ -4994,6 +5146,7 @@ framebox
footnote
footnotetext
framebox
+href
intertext
part
(sub){0,2}section\*?
@@ -5007,6 +5160,7 @@ savebox
sbox
shortintertext
shortstack
+sidenote
signature
text.*
value
@@ -5151,7 +5305,7 @@ verbatim[*]?
%DIF CULINECHBAR PREAMBLE
\RequirePackage[normalem]{ulem}
\RequirePackage[dvips]{changebar}
-\RequirePackage{color}
+\RequirePackage{color}\definecolor{RED}{rgb}{1,0,0}\definecolor{BLUE}{rgb}{0,0,1}
\providecommand{\DIFadd}[1]{\protect\cbstart{\protect\color{blue}\uwave{#1}}\protect\cbend}
\providecommand{\DIFdel}[1]{\protect\cbdelete{\protect\color{red}\sout{#1}}\protect\cbdelete}
%DIF END CULINECHBAR PREAMBLE
diff --git a/support/latexdiff/latexdiff-vc b/support/latexdiff/latexdiff-vc
index 21bf1f3adf..9843238c45 100755
--- a/support/latexdiff/latexdiff-vc
+++ b/support/latexdiff/latexdiff-vc
@@ -26,18 +26,17 @@
# Detailed usage information at the end of the file
#
# TODO/IDEAS: - option to call external pre-processing codes
-# - choose type of latex processor / bibtex (luatex, xelatex etc)
# version 1.3.0 ((7 October 2018)
# - option --only-changes with hyperref will suppress hyperrefs (pull request jprotze)_
# - option --only-changes now moves (rather than copies) file with only changes
# version 1.2.1 (22 June 2017):
-# - update: use qpdf (instead of pdftk) to select particular pages of output (pull request #102 submited by Tom Scogland via github). This was necessary because pdftk is being deprecated. pdftk is still used as a fall-back
+# - update: use qpdf (instead of pdftk) to select particular pages of output (pull request #102 submitted by Tom Scogland via github). This was necessary because pdftk is being deprecated. pdftk is still used as a fall-back
# - bug fix: --hg option was not recognised (partially fixes github issue #93 )
# - wrap passed-through options to latexdiff in quotation marks (fix github issue #58 )
# - program names for latexdiff, latex, dvips, bibtex configurable (fixes issue #40)
#
# version 1.2.0:
-# - depracation fix: left brace in RegEx now needs to be escaped
+# - deprecation fix: left brace in RegEx now needs to be escaped
#
# version 1.1.1:
# - better detection of RCS system
@@ -72,8 +71,8 @@ use strict ;
use warnings ;
my $versionstring=<<EOF ;
-This is LATEXDIFF-VC 1.3.0
- (c) 2005-2018 F J Tilmann
+This is LATEXDIFF-VC 1.3.1
+ (c) 2005-2020 F J Tilmann
EOF
# output debug and intermediate files, set to 0 in final distribution
@@ -674,7 +673,7 @@ specified, and they result in different behaviour:
=item B<latexdiff-vc> -r F<file.tex> ...
-compares F<file.tex> with the most recent version checked into RCS.
+compares F<file.tex> with the most recently checked-in version checked.
=item B<latexdiff-vc> -r F<rev1> F<file.tex> ...
@@ -685,7 +684,7 @@ compares F<file.tex> with revision F<rev1>.
compares revisions F<rev1> and F<rev2> of F<file.tex>.
Multiple files can be specified for all of the above options. All files must have the
-extension C<.tex>, though.
+extensions C<.tex>, C<.bbl>, or C<.flt>, though.
=item B<latexdiff-vc> F<old.tex> F<new.tex>
@@ -701,7 +700,7 @@ reported to stdout.
Rather than appending the string C<diff> and optionally the version
numbers given to the output-file, this will prepend a directory name C<diff>
to the
-original filename, creating the directory and subdirectories should they not exist already. This is particularly useful in order to clone a
+original filename, creating the directory and sub-directories should they not exist already. This is particularly useful in order to clone a
complete directory hierarchy. Optionally, a pathname F<path> can be specified, which is prepended instead of C<diff>.
=item B<--flatten,--flatten=keep-intermediate>
@@ -713,9 +712,6 @@ The generic usage of this function is : C<latexdiff-vc --flatten -r rev1 [-r rev
With C<--flatten=keep-intermediate>, the intermediate revision snapshots are kept in the current directory (Default is to store them in a temporary directory and delete them after generating the diff file.)
-=item B<--config var1=val1,var2=val2,...> or B<-c var1=val1,..>
-
-
=item B<--only-changes>
@@ -738,6 +734,7 @@ run latex command on diff file after generation of diff file.
run latex and dvixxx commands after generation of diff file.
=item B<-c configfile>
+=item B<--config var1=val1,var2=val2,...> or B<-c var1=val1,..>
Set configuration variables for latexdiff and latexdiff-vc. The option can be repeated to set different
variables (as an alternative to the comma-separated list).
@@ -755,7 +752,7 @@ Available variables for latexdiff-vc:
=back
-All other config variables are passed to latexdiff. Explicity set configuration changes always override implicit
+All other config variables are passed to latexdiff. Explicitly set configuration changes always override implicit
changes by the following shortcut options B<--fast>, B<--so>, B<--ps> and B<--pdf>.
=item B<--fast> or B<--so>
@@ -803,7 +800,7 @@ L<latexdiff>
=head1 PORTABILITY
I<latexdiff-vc> uses external commands and is therefore dependent on the system architecture; it has been
-tested mainly on Unix-like systems. It also requires the a version control
+tested mainly on Unix-like systems. It also requires a version control
system and latex to be installed on the system to make use of all features. Modules from Perl 5.8
or higher are required.
diff --git a/support/latexdiff/latexdiff-vc.1 b/support/latexdiff/latexdiff-vc.1
index b4a00e943e..c8340e7104 100644
--- a/support/latexdiff/latexdiff-vc.1
+++ b/support/latexdiff/latexdiff-vc.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "LATEXDIFF-VC 1"
-.TH LATEXDIFF-VC 1 "2018-10-07" "perl v5.22.1" " "
+.TH LATEXDIFF-VC 1 "2020-05-27" "perl v5.22.1" " "
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -175,7 +175,7 @@ specified, and they result in different behaviour:
.RS 4
.IP "\fBlatexdiff-vc\fR \-r \fIfile.tex\fR ..." 4
.IX Item "latexdiff-vc -r file.tex ..."
-compares \fIfile.tex\fR with the most recent version checked into \s-1RCS.\s0
+compares \fIfile.tex\fR with the most recently checked-in version checked.
.IP "\fBlatexdiff-vc\fR \-r \fIrev1\fR \fIfile.tex\fR ..." 4
.IX Item "latexdiff-vc -r rev1 file.tex ..."
compares \fIfile.tex\fR with revision \fIrev1\fR.
@@ -184,7 +184,7 @@ compares \fIfile.tex\fR with revision \fIrev1\fR.
compares revisions \fIrev1\fR and \fIrev2\fR of \fIfile.tex\fR.
.Sp
Multiple files can be specified for all of the above options. All files must have the
-extension \f(CW\*(C`.tex\*(C'\fR, though.
+extensions \f(CW\*(C`.tex\*(C'\fR, \f(CW\*(C`.bbl\*(C'\fR, or \f(CW\*(C`.flt\*(C'\fR, though.
.IP "\fBlatexdiff-vc\fR \fIold.tex\fR \fInew.tex\fR" 4
.IX Item "latexdiff-vc old.tex new.tex"
compares two files.
@@ -199,7 +199,7 @@ reported to stdout.
Rather than appending the string \f(CW\*(C`diff\*(C'\fR and optionally the version
numbers given to the output-file, this will prepend a directory name \f(CW\*(C`diff\*(C'\fR
to the
-original filename, creating the directory and subdirectories should they not exist already. This is particularly useful in order to clone a
+original filename, creating the directory and sub-directories should they not exist already. This is particularly useful in order to clone a
complete directory hierarchy. Optionally, a pathname \fIpath\fR can be specified, which is prepended instead of \f(CW\*(C`diff\*(C'\fR.
.IP "\fB\-\-flatten,\-\-flatten=keep\-intermediate\fR" 4
.IX Item "--flatten,--flatten=keep-intermediate"
@@ -209,12 +209,8 @@ Note that if additional files are needed which are not included in the flatten p
The generic usage of this function is : \f(CW\*(C`latexdiff\-vc \-\-flatten \-r rev1 [\-r rev2] master.tex\*(C'\fR where master.tex is the project file containing the highest level of includes etc.
.Sp
With \f(CW\*(C`\-\-flatten=keep\-intermediate\*(C'\fR, the intermediate revision snapshots are kept in the current directory (Default is to store them in a temporary directory and delete them after generating the diff file.)
-.IP "\fB\-\-config var1=val1,var2=val2,...\fR or \fB\-c var1=val1,..\fR" 4
-.IX Item "--config var1=val1,var2=val2,... or -c var1=val1,.."
-.PD 0
.IP "\fB\-\-only\-changes\fR" 4
.IX Item "--only-changes"
-.PD
Post-process the output such that only pages with changes on them are displayed. This requires the use of subtype \s-1ZLABEL \s0
in latexdiff, which will be set automatically, but any manually set \-s option will be overruled (also requires zref package to
be installed). (note that this option must be combined with \-\-ps or \-\-pdf to make sense)
@@ -229,8 +225,8 @@ run latex command on diff file after generation of diff file.
.IP "\fB\-\-dvi\fR" 4
.IX Item "--dvi"
run latex and dvixxx commands after generation of diff file.
-.IP "\fB\-c configfile\fR" 4
-.IX Item "-c configfile"
+.IP "\fB\-c configfile\fR =item \fB\-\-config var1=val1,var2=val2,...\fR or \fB\-c var1=val1,..\fR" 4
+.IX Item "-c configfile =item --config var1=val1,var2=val2,... or -c var1=val1,.."
Set configuration variables for latexdiff and latexdiff-vc. The option can be repeated to set different
variables (as an alternative to the comma-separated list).
Available variables for latexdiff-vc:
@@ -252,7 +248,7 @@ Available variables for latexdiff-vc:
.RS 4
.PD
.Sp
-All other config variables are passed to latexdiff. Explicity set configuration changes always override implicit
+All other config variables are passed to latexdiff. Explicitly set configuration changes always override implicit
changes by the following shortcut options \fB\-\-fast\fR, \fB\-\-so\fR, \fB\-\-ps\fR and \fB\-\-pdf\fR.
.RE
.IP "\fB\-\-fast\fR or \fB\-\-so\fR" 4
@@ -290,7 +286,7 @@ latexdiff
.SH "PORTABILITY"
.IX Header "PORTABILITY"
\&\fIlatexdiff-vc\fR uses external commands and is therefore dependent on the system architecture; it has been
-tested mainly on Unix-like systems. It also requires the a version control
+tested mainly on Unix-like systems. It also requires a version control
system and latex to be installed on the system to make use of all features. Modules from Perl 5.8
or higher are required.
.SH "BUG REPORTING"
diff --git a/support/latexdiff/latexdiff.1 b/support/latexdiff/latexdiff.1
index f48444e307..f624ca652d 100644
--- a/support/latexdiff/latexdiff.1
+++ b/support/latexdiff/latexdiff.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "LATEXDIFF 1"
-.TH LATEXDIFF 1 "2018-10-07" "perl v5.22.1" " "
+.TH LATEXDIFF 1 "2020-05-26" "perl v5.22.1" " "
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -343,9 +343,9 @@ Change name of \f(CW\*(C`\eDIFadd\*(C'\fR and \f(CW\*(C`\eDIFdel\*(C'\fR command
define new \f(CW\*(C`\eDIFadd\*(C'\fR and \f(CW\*(C`\eDIFdel\*(C'\fR commands, which provide a wrapper for these commands,
using them for the text but not for the link defining command (where any markup would cause
errors).
-.ie n .IP """apacite""" 8
-.el .IP "\f(CWapacite\fR" 8
-.IX Item "apacite"
+.ie n .IP """apacite"", ""biblatex""" 8
+.el .IP "\f(CWapacite\fR, \f(CWbiblatex\fR" 8
+.IX Item "apacite, biblatex"
Redefine the commands recognised as citation commands.
.ie n .IP """siunitx""" 8
.el .IP "\f(CWsiunitx\fR" 8
@@ -621,11 +621,21 @@ included sections are not expanded. The included files are assumed to
be located in the same directories as the old and new master files,
respectively, making it possible to organise files into old and new directories.
\&\-\-flatten is applied recursively, so inputted files can contain further
-\&\f(CW\*(C`\einput\*(C'\fR statements.
+\&\f(CW\*(C`\einput\*(C'\fR statements. Also handles files included by the import package
+(\f(CW\*(C`\eimport\*(C'\fR and \f(CW\*(C`\esubimport\*(C'\fR), and \f(CW\*(C`\esubfile\*(C'\fR command.
.Sp
Use of this option might result in prohibitive processing times for
larger documents, and the resulting difference document
no longer reflects the structure of the input documents.
+.IP "\fB\-\-filter\-script=filterscript\fR" 4
+.IX Item "--filter-script=filterscript"
+Run files through this filterscript (full path preferred) before processing.
+The filterscript must take \s-1STDIN\s0 input and output to \s-1STDOUT.\s0
+When coupled with \-\-flatten, each file will be run through the filter as it is brought in.
+.IP "\fB\-\-ignore\-filter\-stderr\fR" 4
+.IX Item "--ignore-filter-stderr"
+When running with \-\-filter\-script, \s-1STDERR\s0 from the script may cause readability issues.
+Turn this flag on to ignore \s-1STDERR\s0 from the filter script.
.IP "\fB\-\-help\fR or \fB\-h\fR" 4
.IX Item "--help or -h"
Show help text
diff --git a/support/latexdiff/latexrevise b/support/latexdiff/latexrevise
index 956d13e506..f7f88f1b95 100755
--- a/support/latexdiff/latexrevise
+++ b/support/latexdiff/latexrevise
@@ -21,6 +21,7 @@
#
# Detailed usage information at the end of the file
# Note: version number now keeping up with latexdiff
+# Version 1.3.1 (Bug fix) Remove some deprecation warnings due to uncommented left parentheses
# Version 1.0.2 Option --version
# Version 1.0.1 no changes to latexrevise
# Version 0.3 Updated for compatibility with latexdiff 0.3 output (DIFAUXCMD removal)
@@ -31,8 +32,8 @@ use strict;
use warnings;
my $versionstring=<<EOF ;
-This is LATEXREVISE 1.0.2
- (c) 2005-2012 F J Tilmann
+This is LATEXREVISE 1.3.1
+ (c) 2005-2020 F J Tilmann
EOF
# Markup strings (make sure that this are set to the same value as in
@@ -62,14 +63,30 @@ my $PREAMBLEXTBEG='^%DIF PREAMBLE EXTENSION ADDED BY LATEXDIFF$';
my $PREAMBLEXTEND='^%DIF END PREAMBLE EXTENSION ADDED BY LATEXDIFF$';
-my $pat0 = '(?:[^{}]|\\\{|\\\})*';
-my $pat1 = '(?:[^{}]|\\\{|\\\}|\{'.$pat0.'\})*';
-my $pat2 = '(?:[^{}]|\\\{|\\\}|\{'.$pat1.'\})*';
-my $pat3 = '(?:[^{}]|\\\{|\\\}|\{'.$pat2.'\})*';
-my $pat4 = '(?:[^{}]|\\\{|\\\}|\{'.$pat3.'\})*';
+#my $pat0 = '(?:[^{}]|\\\{|\\\})*';
+#my $pat1 = '(?:[^{}]|\\\{|\\\}|\{'.$pat0.'\})*';
+#my $pat2 = '(?:[^{}]|\\\{|\\\}|\{'.$pat1.'\})*';
+#my $pat3 = '(?:[^{}]|\\\{|\\\}|\{'.$pat2.'\})*';
+#my $pat4 = '(?:[^{}]|\\\{|\\\}|\{'.$pat3.'\})*';
+
+my $pat0 = '(?:[^{}])*';
+my $pat_n = $pat0;
+# if you get "undefined control sequence MATHBLOCKmath" error, increase the maximum value in this loop
+for (my $i_pat = 0; $i_pat < 20; ++$i_pat){
+ $pat_n = '(?:[^{}]|\{'.$pat_n.'\}|\\\\\{|\\\\\})*';
+ # Actually within the text body, quoted braces are replaced in pre-processing. The only place where
+ # the last part of the pattern matters is when processing the arguments of context2cmds in the preamble
+ # and these contain a \{ or \} combination, probably rare.
+ # It should thus be fine to use the simpler version below.
+ ### $pat_n = '(?:[^{}]|\{'.$pat_n.'\})*';
+}
+
+
my $brat0 = '(?:[^\[\]]|\\\[|\\\])*';
+
+
my ($input,$preamble,$body,$post);
my (@matches);
my ($cnt,$prematch,$postmatch);
@@ -103,7 +120,7 @@ if ( $version ) {
if ( ($accept && $decline) || ($accept && $simplify) || ($decline && $simplify) ) {
- die '-a,-d and -s options are mutually axclusive. Type latexrevise -h to get more help.';
+ die '-a,-d and -s options are mutually exclusive. Type latexrevise -h to get more help.';
}
@@ -178,7 +195,7 @@ elsif ( $decline) {
# Mop up tokens. This must be done already now as otherwise
# detection of white-space problems does not work
- $cnt = $body =~ s/${DELOPEN}($pat4)${DELCLOSE}/$1/sg;
+ $cnt = $body =~ s/${DELOPEN}($pat_n)${DELCLOSE}/$1/sg;
# remove markup of deleted commands
$cnt += $body =~ s/${DELCMDOPEN}(.*?)${DELCMDCLOSE}/$1/sg ;
$cnt += $body =~ s/${DELCMDOPEN}//g ;
@@ -217,13 +234,13 @@ elsif ( $decline) {
# remove any remaining tokens
if ( $accept || $decline || $simplify ) {
# first substitution command deals with special case of added paragraph
- $cnt = $body =~ s/${ADDOPEN}($pat4)\n${ADDCLOSE}\n/$1\n/sg;
- $cnt += $body =~ s/${ADDOPEN}($pat4)${ADDCLOSE}/$1/sg;
+ $cnt = $body =~ s/${ADDOPEN}($pat_n)\n${ADDCLOSE}\n/$1\n/sg;
+ $cnt += $body =~ s/${ADDOPEN}($pat_n)${ADDCLOSE}/$1/sg;
$cnt==0 || warn 'Remaining $ADDOPEN tokens in DECLINE mode\n' unless ( $quiet || $accept || $simplify );
}
if ($accept || $simplify ) {
# Note: in decline mode these commands have already been removed above
- $cnt = $body =~ s/${DELOPEN}($pat4)${DELCLOSE}/$1/sg;
+ $cnt = $body =~ s/${DELOPEN}($pat_n)${DELCLOSE}/$1/sg;
#### remove markup of deleted commands
$cnt += $body =~ s/${DELCMDOPEN}(.*?)${DELCMDCLOSE}/$1/sg ;
$cnt += $body =~ s/${DELCMDOPEN}//g ;
@@ -238,11 +255,11 @@ if ($accept || $simplify ) {
# Remove comment commands
if (defined($comment)) {
- print STDERR "Removing \\$comment\{..\} sequences ..." if $verbose;
+ print STDERR "Removing \\$comment\{..\} sequences (incl. argument)..." if $verbose;
# protect $comments in comments by making them look different
$body =~ s/(%.*)${comment}(.*)$/$1${someword}$2/mg ;
# carry out the substitution
- $cnt = 0 + $body =~ s/\\${comment}(?:\[${brat0}\])?\{${pat4}\}//sg ;
+ $cnt = 0 + $body =~ s/\\${comment}(?:\[${brat0}\])?\{${pat_n}\}//sg ;
print STDERR "$cnt matches found and removed.\n" if $verbose;
# and undo the protection substitution
$body =~ s/(%.*)${someword}(.*)$/$1${comment}$2/mg ;
@@ -257,11 +274,11 @@ if (defined($comenv)) {
}
if (defined($markup)) {
- print STDERR "Removing \\$markup\{..\} cpmmands ..." if $verbose;
+ print STDERR "Removing \\$markup\{..\} commands (leaving argument)..." if $verbose;
# protect $markups in comments by making them look different
$body =~ s/(%.*)${markup}(.*)$/$1${someword}$2/mg ;
# carry out the substitution
- $cnt = 0 + $body =~ s/\\${markup}(?:\[${brat0}\])?\{(${pat4})\}/$1/sg ;
+ $cnt = 0 + $body =~ s/\\${markup}(?:\[${brat0}\])?\{(${pat_n})\}/$1/sg ;
print STDERR "$cnt matches found and removed.\n" if $verbose;
# and undo the protection substitution
$body =~ s/(%.*)${someword}(.*)$/$1${markup}$2/mg ;
@@ -378,7 +395,7 @@ options.
-c cmd
--comment=cmd Remove \\cmd{...}. cmd is supposed to mark some explicit
- anotations which should be removed from the file before
+ annotations which should be removed from the file before
release.
-e envir
@@ -470,7 +487,7 @@ options.
=item B<-c cmd> or B<--comment=cmd>
Remove C<\cmd{...}> sequences. C<cmd> is supposed to mark some explicit
-anotations which should be removed from the file before
+annotations which should be removed from the file before
release.
=item B<-e envir> or B<--comment-environment=envir>
@@ -508,8 +525,9 @@ which should have been removed already.
=head1 BUGS
The current version is a beta version which has not yet been
-extensively tested, but worked fine locally. Please submit bug reports using the issue tracker of the github repository page I<https://github.com/ftilmann/latexdiff.git>,
-or send them to I<tilmann -- AT -- gfz-potsdam.de>.. Include the serial number of I<latexrevise>
+extensively tested. It has not been actively maintained so might not process output of newer versions of latexdiff entirely correctly.
+Please submit bug reports using the issue tracker of the github repository page I<https://github.com/ftilmann/latexdiff.git>,
+or send them to I<tilmann -- AT -- gfz-potsdam.de>. Include the serial number of I<latexrevise>
(Option --version). If you come across latexdiff
output which is not processed correctly by I<latexrevise> please include the
problem file as well as the old and new files on which it is based,
diff --git a/support/latexdiff/latexrevise.1 b/support/latexdiff/latexrevise.1
index 49c8c35471..234addcce2 100644
--- a/support/latexdiff/latexrevise.1
+++ b/support/latexdiff/latexrevise.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "LATEXREVISE 1"
-.TH LATEXREVISE 1 "2015-12-27" "perl v5.22.1" " "
+.TH LATEXREVISE 1 "2020-05-27" "perl v5.22.1" " "
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -187,7 +187,7 @@ options.
.IP "\fB\-c cmd\fR or \fB\-\-comment=cmd\fR" 4
.IX Item "-c cmd or --comment=cmd"
Remove \f(CW\*(C`\ecmd{...}\*(C'\fR sequences. \f(CW\*(C`cmd\*(C'\fR is supposed to mark some explicit
-anotations which should be removed from the file before
+annotations which should be removed from the file before
release.
.IP "\fB\-e envir\fR or \fB\-\-comment\-environment=envir\fR" 4
.IX Item "-e envir or --comment-environment=envir"
@@ -218,8 +218,9 @@ which should have been removed already.
.SH "BUGS"
.IX Header "BUGS"
The current version is a beta version which has not yet been
-extensively tested, but worked fine locally. Please submit bug reports using the issue tracker of the github repository page \fIhttps://github.com/ftilmann/latexdiff.git\fR,
-or send them to \fItilmann \*(-- \s-1AT\s0 \*(-- gfz\-potsdam.de\fR.. Include the serial number of \fIlatexrevise\fR
+extensively tested. It has not been actively maintained so might not process output of newer versions of latexdiff entirely correctly.
+Please submit bug reports using the issue tracker of the github repository page \fIhttps://github.com/ftilmann/latexdiff.git\fR,
+or send them to \fItilmann \*(-- \s-1AT\s0 \*(-- gfz\-potsdam.de\fR. Include the serial number of \fIlatexrevise\fR
(Option \-\-version). If you come across latexdiff
output which is not processed correctly by \fIlatexrevise\fR please include the
problem file as well as the old and new files on which it is based,
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