summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CTAN.sites3
-rw-r--r--FILES.byname2119
-rw-r--r--FILES.byname.gzbin2224842 -> 2223462 bytes
-rw-r--r--FILES.last07days1248
-rwxr-xr-xfonts/utilities/fontools/bin/afm2afm4
-rwxr-xr-xfonts/utilities/fontools/bin/autoinst987
-rwxr-xr-xfonts/utilities/fontools/bin/ot2kpx4
-rwxr-xr-xfonts/utilities/fontools/bin/splitttc4
-rw-r--r--fonts/utilities/fontools/doc/afm2afm.pdfbin26835 -> 26884 bytes
-rw-r--r--fonts/utilities/fontools/doc/autoinst.pdfbin70196 -> 73484 bytes
-rw-r--r--fonts/utilities/fontools/doc/ot2kpx.pdfbin27213 -> 27270 bytes
-rw-r--r--fonts/utilities/fontools/doc/splitttc.pdfbin20344 -> 20395 bytes
-rw-r--r--fonts/utilities/fontools/share/fontools_oml.enc292
-rw-r--r--graphics/pgf/contrib/pgf-pie/COPYING11
-rw-r--r--graphics/pgf/contrib/pgf-pie/LICENSE-GPL2.txt (renamed from support/texlab/crates/bibutils_sys/src/Copying)42
-rw-r--r--graphics/pgf/contrib/pgf-pie/LICENSE-LPPL1.3c.txt417
-rw-r--r--graphics/pgf/contrib/pgf-pie/README3
-rw-r--r--graphics/pgf/contrib/pgf-pie/before-after-number.tex (renamed from graphics/pgf/contrib/pgf-pie/demo/before-after-number.tex)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/cloud.svg (renamed from graphics/pgf/contrib/pgf-pie/demo/cloud.svg)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/cloud.tex (renamed from graphics/pgf/contrib/pgf-pie/demo/cloud.tex)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/color.tex (renamed from graphics/pgf/contrib/pgf-pie/demo/color.tex)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/colorwheel.tex (renamed from graphics/pgf/contrib/pgf-pie/demo/colorwheel.tex)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/explode.tex (renamed from graphics/pgf/contrib/pgf-pie/demo/explode.tex)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/first-pie.svg (renamed from graphics/pgf/contrib/pgf-pie/demo/first-pie.svg)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/first-pie.tex (renamed from graphics/pgf/contrib/pgf-pie/demo/first-pie.tex)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/hide-number.tex3
-rw-r--r--graphics/pgf/contrib/pgf-pie/legend.tex (renamed from graphics/pgf/contrib/pgf-pie/demo/legend.tex)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/pgf-pie-manual.pdfbin202715 -> 84480 bytes
-rw-r--r--graphics/pgf/contrib/pgf-pie/pgf-pie-manual.tex10
-rw-r--r--graphics/pgf/contrib/pgf-pie/pgf-pie.sty85
-rw-r--r--graphics/pgf/contrib/pgf-pie/polar.svg (renamed from graphics/pgf/contrib/pgf-pie/demo/polar.svg)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/polar.tex (renamed from graphics/pgf/contrib/pgf-pie/demo/polar.tex)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/population.tex (renamed from graphics/pgf/contrib/pgf-pie/demo/population.tex)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/radius.tex (renamed from graphics/pgf/contrib/pgf-pie/demo/radius.tex)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/scalefont.tex (renamed from graphics/pgf/contrib/pgf-pie/demo/scalefont.tex)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/shadow.tex (renamed from graphics/pgf/contrib/pgf-pie/demo/shadow.tex)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/square.svg (renamed from graphics/pgf/contrib/pgf-pie/demo/square.svg)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/square.tex (renamed from graphics/pgf/contrib/pgf-pie/demo/square.tex)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/sum.tex (renamed from graphics/pgf/contrib/pgf-pie/demo/sum.tex)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/text-inside.tex (renamed from graphics/pgf/contrib/pgf-pie/demo/text-inside.tex)0
-rw-r--r--graphics/pgf/contrib/pgf-pie/text.tex (renamed from graphics/pgf/contrib/pgf-pie/demo/text.tex)0
-rw-r--r--language/marathi/README.txt4
-rw-r--r--language/marathi/article.tex2
-rw-r--r--language/marathi/book.tex2
-rw-r--r--language/marathi/glossaries.gls5
-rw-r--r--language/marathi/letter.tex11
-rw-r--r--language/marathi/marathi.dtx147
-rw-r--r--language/marathi/marathi.ins4
-rw-r--r--language/marathi/marathi.pdfbin68175 -> 74619 bytes
-rw-r--r--language/marathi/para.tex1
-rw-r--r--macros/latex-dev/base/README.md6
-rw-r--r--macros/latex-dev/base/alltt.pdfbin173077 -> 173077 bytes
-rw-r--r--macros/latex-dev/base/bugs.txt9
-rw-r--r--macros/latex-dev/base/cfgguide.pdfbin220211 -> 220211 bytes
-rw-r--r--macros/latex-dev/base/changes.txt1224
-rw-r--r--macros/latex-dev/base/classes.dtx135
-rw-r--r--macros/latex-dev/base/classes.pdfbin521080 -> 520906 bytes
-rw-r--r--macros/latex-dev/base/clsguide.pdfbin372505 -> 372505 bytes
-rw-r--r--macros/latex-dev/base/cmfonts.pdfbin264453 -> 264453 bytes
-rw-r--r--macros/latex-dev/base/cyrguide.pdfbin216976 -> 216976 bytes
-rw-r--r--macros/latex-dev/base/doc.pdfbin629318 -> 629536 bytes
-rw-r--r--macros/latex-dev/base/docstrip.dtx23
-rw-r--r--macros/latex-dev/base/docstrip.pdfbin469448 -> 470217 bytes
-rw-r--r--macros/latex-dev/base/encguide.pdfbin1532114 -> 1532114 bytes
-rw-r--r--macros/latex-dev/base/exscale.pdfbin195880 -> 195880 bytes
-rw-r--r--macros/latex-dev/base/fix-cm.pdfbin262051 -> 262051 bytes
-rw-r--r--macros/latex-dev/base/fntguide.pdfbin361810 -> 361810 bytes
-rw-r--r--macros/latex-dev/base/fontdef.dtx28
-rw-r--r--macros/latex-dev/base/graphpap.pdfbin156280 -> 156280 bytes
-rw-r--r--macros/latex-dev/base/ifthen.pdfbin205205 -> 205205 bytes
-rw-r--r--macros/latex-dev/base/inputenc.dtx12
-rw-r--r--macros/latex-dev/base/inputenc.pdfbin294824 -> 294723 bytes
-rw-r--r--macros/latex-dev/base/latexchanges.pdfbin232380 -> 232380 bytes
-rw-r--r--macros/latex-dev/base/latexrelease.pdfbin246174 -> 246174 bytes
-rw-r--r--macros/latex-dev/base/latexsym.pdfbin192289 -> 192289 bytes
-rw-r--r--macros/latex-dev/base/lb2.pdfbin138223 -> 138223 bytes
-rw-r--r--macros/latex-dev/base/letter.dtx100
-rw-r--r--macros/latex-dev/base/letter.pdfbin304792 -> 305750 bytes
-rw-r--r--macros/latex-dev/base/lgc2.pdfbin101344 -> 101344 bytes
-rw-r--r--macros/latex-dev/base/lppl.pdfbin0 -> 125828 bytes
-rw-r--r--macros/latex-dev/base/lppl.tex511
-rw-r--r--macros/latex-dev/base/ltboxes.dtx12
-rw-r--r--macros/latex-dev/base/ltclass.dtx248
-rw-r--r--macros/latex-dev/base/ltdefns.dtx78
-rw-r--r--macros/latex-dev/base/ltexpl.dtx43
-rw-r--r--macros/latex-dev/base/ltfiles.dtx129
-rw-r--r--macros/latex-dev/base/ltfloat.dtx66
-rw-r--r--macros/latex-dev/base/ltfssaxes.dtx15
-rw-r--r--macros/latex-dev/base/ltfssbas.dtx2
-rw-r--r--macros/latex-dev/base/ltfssdcl.dtx65
-rw-r--r--macros/latex-dev/base/ltfssini.dtx322
-rw-r--r--macros/latex-dev/base/ltlists.dtx8
-rw-r--r--macros/latex-dev/base/ltluatex.dtx7
-rw-r--r--macros/latex-dev/base/ltluatex.pdfbin304104 -> 304468 bytes
-rw-r--r--macros/latex-dev/base/ltmath.dtx131
-rw-r--r--macros/latex-dev/base/ltmiscen.dtx134
-rw-r--r--macros/latex-dev/base/ltnews.pdfbin959539 -> 972412 bytes
-rw-r--r--macros/latex-dev/base/ltnews.tex36
-rw-r--r--macros/latex-dev/base/ltnews01.pdfbin150020 -> 150020 bytes
-rw-r--r--macros/latex-dev/base/ltnews02.pdfbin134750 -> 134750 bytes
-rw-r--r--macros/latex-dev/base/ltnews03.pdfbin134730 -> 134730 bytes
-rw-r--r--macros/latex-dev/base/ltnews04.pdfbin128768 -> 128768 bytes
-rw-r--r--macros/latex-dev/base/ltnews05.pdfbin157174 -> 157174 bytes
-rw-r--r--macros/latex-dev/base/ltnews06.pdfbin133132 -> 133132 bytes
-rw-r--r--macros/latex-dev/base/ltnews07.pdfbin124028 -> 124028 bytes
-rw-r--r--macros/latex-dev/base/ltnews08.pdfbin144471 -> 144471 bytes
-rw-r--r--macros/latex-dev/base/ltnews09.pdfbin120208 -> 120208 bytes
-rw-r--r--macros/latex-dev/base/ltnews10.pdfbin147941 -> 147941 bytes
-rw-r--r--macros/latex-dev/base/ltnews11.pdfbin104942 -> 104942 bytes
-rw-r--r--macros/latex-dev/base/ltnews12.pdfbin137918 -> 137918 bytes
-rw-r--r--macros/latex-dev/base/ltnews13.pdfbin161066 -> 161066 bytes
-rw-r--r--macros/latex-dev/base/ltnews14.pdfbin150920 -> 150920 bytes
-rw-r--r--macros/latex-dev/base/ltnews15.pdfbin122088 -> 122088 bytes
-rw-r--r--macros/latex-dev/base/ltnews16.pdfbin130688 -> 130688 bytes
-rw-r--r--macros/latex-dev/base/ltnews17.pdfbin149835 -> 149835 bytes
-rw-r--r--macros/latex-dev/base/ltnews18.pdfbin36003 -> 36003 bytes
-rw-r--r--macros/latex-dev/base/ltnews19.pdfbin235068 -> 235068 bytes
-rw-r--r--macros/latex-dev/base/ltnews20.pdfbin283323 -> 283323 bytes
-rw-r--r--macros/latex-dev/base/ltnews21.pdfbin233491 -> 233491 bytes
-rw-r--r--macros/latex-dev/base/ltnews22.pdfbin302835 -> 302835 bytes
-rw-r--r--macros/latex-dev/base/ltnews23.pdfbin274453 -> 274453 bytes
-rw-r--r--macros/latex-dev/base/ltnews24.pdfbin252641 -> 252641 bytes
-rw-r--r--macros/latex-dev/base/ltnews25.pdfbin196325 -> 196325 bytes
-rw-r--r--macros/latex-dev/base/ltnews26.pdfbin362836 -> 362836 bytes
-rw-r--r--macros/latex-dev/base/ltnews27.pdfbin239755 -> 239755 bytes
-rw-r--r--macros/latex-dev/base/ltnews28.pdfbin368228 -> 368229 bytes
-rw-r--r--macros/latex-dev/base/ltnews28.tex4
-rw-r--r--macros/latex-dev/base/ltnews29.pdfbin433006 -> 433006 bytes
-rw-r--r--macros/latex-dev/base/ltnews30.pdfbin491245 -> 491245 bytes
-rw-r--r--macros/latex-dev/base/ltnews31.pdfbin500199 -> 500199 bytes
-rw-r--r--macros/latex-dev/base/ltnews32.pdfbin344268 -> 476890 bytes
-rw-r--r--macros/latex-dev/base/ltnews32.tex406
-rw-r--r--macros/latex-dev/base/ltoutenc.dtx10
-rw-r--r--macros/latex-dev/base/ltpictur.dtx30
-rw-r--r--macros/latex-dev/base/ltspace.dtx200
-rw-r--r--macros/latex-dev/base/lttab.dtx45
-rw-r--r--macros/latex-dev/base/lttextcomp.dtx35
-rw-r--r--macros/latex-dev/base/ltvers.dtx2
-rw-r--r--macros/latex-dev/base/ltx3info.pdfbin191528 -> 191528 bytes
-rw-r--r--macros/latex-dev/base/ltxdoc.pdfbin215600 -> 215600 bytes
-rw-r--r--macros/latex-dev/base/ltxref.dtx18
-rw-r--r--macros/latex-dev/base/makeindx.pdfbin160673 -> 160673 bytes
-rw-r--r--macros/latex-dev/base/manifest.txt18
-rw-r--r--macros/latex-dev/base/manual.pdfbin151354 -> 151354 bytes
-rw-r--r--macros/latex-dev/base/modguide.pdfbin220384 -> 220384 bytes
-rw-r--r--macros/latex-dev/base/nfssfont.pdfbin202429 -> 202429 bytes
-rw-r--r--macros/latex-dev/base/proc.pdfbin216899 -> 216899 bytes
-rw-r--r--macros/latex-dev/base/slides.pdfbin351660 -> 351660 bytes
-rw-r--r--macros/latex-dev/base/slifonts.pdfbin214708 -> 214708 bytes
-rw-r--r--macros/latex-dev/base/source2e.pdfbin3117644 -> 3182847 bytes
-rw-r--r--macros/latex-dev/base/syntonly.pdfbin181181 -> 181389 bytes
-rw-r--r--macros/latex-dev/base/tlc2.pdfbin164949 -> 164949 bytes
-rw-r--r--macros/latex-dev/base/tulm.pdfbin156534 -> 156534 bytes
-rw-r--r--macros/latex-dev/base/usrguide.pdfbin398281 -> 398989 bytes
-rw-r--r--macros/latex-dev/base/usrguide.tex94
-rw-r--r--macros/latex-dev/base/utf8ienc.pdfbin330773 -> 330713 bytes
-rw-r--r--macros/latex-dev/base/webcomp.pdfbin136153 -> 136153 bytes
-rw-r--r--macros/latex-dev/required/amsmath/README.md4
-rw-r--r--macros/latex-dev/required/amsmath/amsbsy.dtx6
-rw-r--r--macros/latex-dev/required/amsmath/amsbsy.ins8
-rw-r--r--macros/latex-dev/required/amsmath/amsbsy.pdfbin161330 -> 161323 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amscd.dtx6
-rw-r--r--macros/latex-dev/required/amsmath/amscd.ins8
-rw-r--r--macros/latex-dev/required/amsmath/amscd.pdfbin165748 -> 165742 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amsgen.dtx6
-rw-r--r--macros/latex-dev/required/amsmath/amsgen.ins8
-rw-r--r--macros/latex-dev/required/amsmath/amsgen.pdfbin164347 -> 164340 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amsldoc.pdfbin475103 -> 475924 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amsldoc.tex16
-rw-r--r--macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty12
-rw-r--r--macros/latex-dev/required/amsmath/amsmath.dtx191
-rw-r--r--macros/latex-dev/required/amsmath/amsmath.ins8
-rw-r--r--macros/latex-dev/required/amsmath/amsmath.pdfbin379045 -> 383566 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amsopn.dtx6
-rw-r--r--macros/latex-dev/required/amsmath/amsopn.ins8
-rw-r--r--macros/latex-dev/required/amsmath/amsopn.pdfbin129165 -> 129158 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amstex.sty4
-rw-r--r--macros/latex-dev/required/amsmath/amstext.dtx8
-rw-r--r--macros/latex-dev/required/amsmath/amstext.ins9
-rw-r--r--macros/latex-dev/required/amsmath/amstext.pdfbin193899 -> 194266 bytes
-rw-r--r--macros/latex-dev/required/amsmath/amsxtra.dtx6
-rw-r--r--macros/latex-dev/required/amsmath/amsxtra.ins9
-rw-r--r--macros/latex-dev/required/amsmath/amsxtra.pdfbin104544 -> 104540 bytes
-rw-r--r--macros/latex-dev/required/amsmath/changes.txt31
-rw-r--r--macros/latex-dev/required/amsmath/subeqn.pdfbin101297 -> 101292 bytes
-rw-r--r--macros/latex-dev/required/amsmath/subeqn.tex2
-rw-r--r--macros/latex-dev/required/amsmath/technote.pdfbin130477 -> 130587 bytes
-rw-r--r--macros/latex-dev/required/amsmath/testmath.pdfbin428682 -> 428947 bytes
-rw-r--r--macros/latex-dev/required/graphics/README.md2
-rw-r--r--macros/latex-dev/required/graphics/changes.txt3
-rw-r--r--macros/latex-dev/required/graphics/color.dtx6
-rw-r--r--macros/latex-dev/required/graphics/color.pdfbin201521 -> 200935 bytes
-rw-r--r--macros/latex-dev/required/graphics/drivers.pdfbin268843 -> 263724 bytes
-rw-r--r--macros/latex-dev/required/graphics/epsfig.pdfbin154491 -> 154485 bytes
-rw-r--r--macros/latex-dev/required/graphics/graphics.pdfbin289788 -> 284646 bytes
-rw-r--r--macros/latex-dev/required/graphics/graphicx.pdfbin232502 -> 232495 bytes
-rw-r--r--macros/latex-dev/required/graphics/grfguide.pdfbin310569 -> 310565 bytes
-rw-r--r--macros/latex-dev/required/graphics/keyval.pdfbin222531 -> 222525 bytes
-rw-r--r--macros/latex-dev/required/graphics/lscape.pdfbin150110 -> 150104 bytes
-rw-r--r--macros/latex-dev/required/graphics/rotating.pdfbin250716 -> 245867 bytes
-rw-r--r--macros/latex-dev/required/graphics/rotex.pdfbin162253 -> 162248 bytes
-rw-r--r--macros/latex-dev/required/graphics/trig.pdfbin191699 -> 191692 bytes
-rw-r--r--macros/latex-dev/required/tools/README.md2
-rw-r--r--macros/latex-dev/required/tools/afterpage.pdfbin189848 -> 189848 bytes
-rw-r--r--macros/latex-dev/required/tools/array-2020-02-10.sty374
-rw-r--r--macros/latex-dev/required/tools/array.dtx30
-rw-r--r--macros/latex-dev/required/tools/array.pdfbin480808 -> 481282 bytes
-rw-r--r--macros/latex-dev/required/tools/bm.pdfbin306775 -> 306775 bytes
-rw-r--r--macros/latex-dev/required/tools/calc.pdfbin340877 -> 340877 bytes
-rw-r--r--macros/latex-dev/required/tools/changes.txt22
-rw-r--r--macros/latex-dev/required/tools/dcolumn.pdfbin199221 -> 199221 bytes
-rw-r--r--macros/latex-dev/required/tools/delarray.pdfbin183432 -> 183432 bytes
-rw-r--r--macros/latex-dev/required/tools/enumerate.pdfbin199049 -> 199049 bytes
-rw-r--r--macros/latex-dev/required/tools/fileerr.pdfbin179882 -> 179548 bytes
-rw-r--r--macros/latex-dev/required/tools/fontsmpl.pdfbin138025 -> 138025 bytes
-rw-r--r--macros/latex-dev/required/tools/ftnright.pdfbin346724 -> 346379 bytes
-rw-r--r--macros/latex-dev/required/tools/hhline.pdfbin175678 -> 175678 bytes
-rw-r--r--macros/latex-dev/required/tools/indentfirst.pdfbin144779 -> 144779 bytes
-rw-r--r--macros/latex-dev/required/tools/layout.pdfbin246931 -> 246931 bytes
-rw-r--r--macros/latex-dev/required/tools/longtable.pdfbin349927 -> 349927 bytes
-rw-r--r--macros/latex-dev/required/tools/multicol.pdfbin491250 -> 491025 bytes
-rw-r--r--macros/latex-dev/required/tools/rawfonts.pdfbin135688 -> 135688 bytes
-rw-r--r--macros/latex-dev/required/tools/shellesc.pdfbin169757 -> 169757 bytes
-rw-r--r--macros/latex-dev/required/tools/showkeys.pdfbin242786 -> 242786 bytes
-rw-r--r--macros/latex-dev/required/tools/somedefs.pdfbin156511 -> 156511 bytes
-rw-r--r--macros/latex-dev/required/tools/tabularx.pdfbin254205 -> 254205 bytes
-rw-r--r--macros/latex-dev/required/tools/theorem.pdfbin323292 -> 322937 bytes
-rw-r--r--macros/latex-dev/required/tools/tools-overview.pdfbin68288 -> 68288 bytes
-rw-r--r--macros/latex-dev/required/tools/trace.pdfbin212730 -> 212730 bytes
-rw-r--r--macros/latex-dev/required/tools/varioref.pdfbin354736 -> 354736 bytes
-rw-r--r--macros/latex-dev/required/tools/verbatim.pdfbin302233 -> 302233 bytes
-rw-r--r--macros/latex-dev/required/tools/xr.dtx13
-rw-r--r--macros/latex-dev/required/tools/xr.pdfbin163785 -> 163612 bytes
-rw-r--r--macros/latex-dev/required/tools/xspace.pdfbin238007 -> 238007 bytes
-rw-r--r--macros/latex/contrib/achemso/CHANGELOG.md4
-rw-r--r--macros/latex/contrib/achemso/achemso-demo.pdfbin359125 -> 359004 bytes
-rw-r--r--macros/latex/contrib/achemso/achemso.dtx130
-rw-r--r--macros/latex/contrib/achemso/achemso.pdfbin514491 -> 514502 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-software/biblio.bib3
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-software/history.tex1
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-software/sample-use-sty.pdfbin112874 -> 112967 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.pdfbin169749 -> 169826 bytes
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.tex2
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-software/software.bbx13
-rw-r--r--macros/latex/contrib/biblatex-contrib/biblatex-software/swentries.tex3
-rw-r--r--macros/latex/contrib/nicematrix/README.md3
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-french.pdfbin349092 -> 355393 bytes
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix-french.tex2840
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix.dtx4061
-rw-r--r--macros/latex/contrib/nicematrix/nicematrix.pdfbin845357 -> 875835 bytes
-rw-r--r--macros/latex/contrib/poemscol/poemscol.dtx418
-rw-r--r--macros/latex/contrib/poemscol/poemscol.pdfbin712470 -> 727493 bytes
-rw-r--r--macros/latex/required/amscls/README7
-rw-r--r--macros/latex/required/amscls/amsclass.dtx52
-rw-r--r--macros/latex/required/amscls/amsclass.ins23
-rw-r--r--macros/latex/required/amscls/doc/amsclass.pdfbin373922 -> 340415 bytes
-rw-r--r--macros/latex/required/amscls/doc/diffs-c.txt9
-rw-r--r--macros/luatex/latex/cloze/README.md (renamed from macros/luatex/latex/cloze/README)54
-rw-r--r--macros/luatex/latex/cloze/cloze.dtx1207
-rw-r--r--macros/luatex/latex/cloze/cloze.ins9
-rw-r--r--macros/luatex/latex/cloze/cloze.lua1002
-rw-r--r--macros/luatex/latex/cloze/cloze.pdfbin257712 -> 318609 bytes
-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/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
-rw-r--r--systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl1
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb353
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.md52
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha5122
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc14
-rw-r--r--systems/texlive/tlnet/tlpkg/texlive.tlpdb.xzbin2204484 -> 2204452 bytes
-rw-r--r--systems/win32/miktex/tm/packages/next/pr.ini8
-rw-r--r--systems/win32/miktex/tm/packages/pr.ini8
-rw-r--r--systems/win32/w32tex/ChangeLog16
-rw-r--r--timestamp2
704 files changed, 36678 insertions, 136924 deletions
diff --git a/CTAN.sites b/CTAN.sites
index f697bbd887..2d5c3fcff8 100644
--- a/CTAN.sites
+++ b/CTAN.sites
@@ -143,6 +143,9 @@ by country):
URL: http://ftp.ktug.org/tex-archive/
URL: ftp://ftp.ktug.org/tex-archive/
+ mirror.kakao.com (Korea)
+ URL: http://mirror.kakao.com/CTAN/
+
mirror.navercorp.com (Korea)
URL: http://mirror.navercorp.com/CTAN/
diff --git a/FILES.byname b/FILES.byname
index 8c1b364d27..a844753e8f 100644
--- a/FILES.byname
+++ b/FILES.byname
@@ -5001,7 +5001,7 @@
1990/10/02 | 5440 | dviware/vutex/vaxvms.hlp
1990/10/02 | 812 | dviware/vutex/vaxvms.ins
1990/10/02 | 127576 | dviware/vutex/vutex.web
-2020/05/26 | 64252 | FILES.last07days
+2020/05/27 | 117229 | FILES.last07days
2018/06/27 | 99883 | fonts/academicons/academicons.pdf
2018/06/27 | 10779 | fonts/academicons/academicons.sty
2018/06/27 | 5774 | fonts/academicons/academicons.tex
@@ -123891,27 +123891,28 @@
1995/01/27 | 48128 | fonts/utilities/fontload/vms/subfont.exe-alpha
1995/01/27 | 89600 | fonts/utilities/fontload/vms/subfont.exe-vax
2007/11/24 | 136238 | fonts/utilities/fontload.zip
-2020/05/11 | 13334 | fonts/utilities/fontools/bin/afm2afm
-2020/05/11 | 129948 | fonts/utilities/fontools/bin/autoinst
-2020/05/11 | 27582 | fonts/utilities/fontools/bin/ot2kpx
-2020/05/11 | 9473 | fonts/utilities/fontools/bin/splitttc
-2020/05/11 | 26835 | fonts/utilities/fontools/doc/afm2afm.pdf
-2020/05/11 | 70196 | fonts/utilities/fontools/doc/autoinst.pdf
-2020/05/11 | 27213 | fonts/utilities/fontools/doc/ot2kpx.pdf
-2020/05/11 | 20344 | fonts/utilities/fontools/doc/splitttc.pdf
-2020/05/11 | 17997 | fonts/utilities/fontools/GPLv2.txt
-2020/05/11 | 2906 | fonts/utilities/fontools/README
-2020/05/11 | 8032 | fonts/utilities/fontools/share/fontools_lgr.enc
-2020/05/11 | 2855 | fonts/utilities/fontools/share/fontools_ly1.enc
-2020/05/11 | 2587 | fonts/utilities/fontools/share/fontools_ot1.enc
-2020/05/11 | 2815 | fonts/utilities/fontools/share/fontools_t1.enc
-2020/05/11 | 2907 | fonts/utilities/fontools/share/fontools_t2a.enc
-2020/05/11 | 3729 | fonts/utilities/fontools/share/fontools_t2b.enc
-2020/05/11 | 3651 | fonts/utilities/fontools/share/fontools_t2c.enc
-2020/05/11 | 2656 | fonts/utilities/fontools/share/fontools_t3.enc
-2020/05/11 | 3080 | fonts/utilities/fontools/share/fontools_ts1.enc
-2020/05/11 | 2751 | fonts/utilities/fontools/share/fontools_ts3.enc
-2020/05/11 | 197538 | fonts/utilities/fontools.zip
+2020/05/27 | 13334 | fonts/utilities/fontools/bin/afm2afm
+2020/05/27 | 155555 | fonts/utilities/fontools/bin/autoinst
+2020/05/27 | 27582 | fonts/utilities/fontools/bin/ot2kpx
+2020/05/27 | 9473 | fonts/utilities/fontools/bin/splitttc
+2020/05/27 | 26884 | fonts/utilities/fontools/doc/afm2afm.pdf
+2020/05/27 | 73484 | fonts/utilities/fontools/doc/autoinst.pdf
+2020/05/27 | 27270 | fonts/utilities/fontools/doc/ot2kpx.pdf
+2020/05/27 | 20395 | fonts/utilities/fontools/doc/splitttc.pdf
+2020/05/27 | 17997 | fonts/utilities/fontools/GPLv2.txt
+2020/05/27 | 2906 | fonts/utilities/fontools/README
+2020/05/27 | 8032 | fonts/utilities/fontools/share/fontools_lgr.enc
+2020/05/27 | 2855 | fonts/utilities/fontools/share/fontools_ly1.enc
+2020/05/27 | 2248 | fonts/utilities/fontools/share/fontools_oml.enc
+2020/05/27 | 2587 | fonts/utilities/fontools/share/fontools_ot1.enc
+2020/05/27 | 2815 | fonts/utilities/fontools/share/fontools_t1.enc
+2020/05/27 | 2907 | fonts/utilities/fontools/share/fontools_t2a.enc
+2020/05/27 | 3729 | fonts/utilities/fontools/share/fontools_t2b.enc
+2020/05/27 | 3651 | fonts/utilities/fontools/share/fontools_t2c.enc
+2020/05/27 | 2656 | fonts/utilities/fontools/share/fontools_t3.enc
+2020/05/27 | 3080 | fonts/utilities/fontools/share/fontools_ts1.enc
+2020/05/27 | 2751 | fonts/utilities/fontools/share/fontools_ts3.enc
+2020/05/27 | 206108 | fonts/utilities/fontools.zip
2007/11/26 | 1775673 | fonts/utilities/freetype/freetype-2.3.5.tar.gz
2007/11/26 | 189 | fonts/utilities/freetype/freetype-2.3.5.tar.gz.sig
2007/11/26 | 117706 | fonts/utilities/freetype/freetype-doc-2.3.5.tar.gz
@@ -135404,31 +135405,36 @@
2018/05/21 | 58401 | graphics/pgf/contrib/pgfornament-han/xiaoshan-sample.pdf
2018/05/21 | 1554 | graphics/pgf/contrib/pgfornament-han/xiaoshan-sample.tex
2019/08/11 | 1263633 | graphics/pgf/contrib/pgfornament-han.zip
-2012/02/21 | 104 | graphics/pgf/contrib/pgf-pie/demo/before-after-number.tex
-2012/02/21 | 21589 | graphics/pgf/contrib/pgf-pie/demo/cloud.svg
-2012/02/21 | 100 | graphics/pgf/contrib/pgf-pie/demo/cloud.tex
-2012/02/21 | 179 | graphics/pgf/contrib/pgf-pie/demo/color.tex
-2012/02/21 | 94 | graphics/pgf/contrib/pgf-pie/demo/colorwheel.tex
-2012/02/21 | 183 | graphics/pgf/contrib/pgf-pie/demo/explode.tex
-2012/02/21 | 12954 | graphics/pgf/contrib/pgf-pie/demo/first-pie.svg
-2012/02/21 | 68 | graphics/pgf/contrib/pgf-pie/demo/first-pie.tex
-2012/02/21 | 99 | graphics/pgf/contrib/pgf-pie/demo/legend.tex
-2012/02/21 | 12840 | graphics/pgf/contrib/pgf-pie/demo/polar.svg
-2012/02/21 | 75 | graphics/pgf/contrib/pgf-pie/demo/polar.tex
-2012/02/21 | 1596 | graphics/pgf/contrib/pgf-pie/demo/population.tex
-2012/02/21 | 165 | graphics/pgf/contrib/pgf-pie/demo/radius.tex
-2012/02/21 | 80 | graphics/pgf/contrib/pgf-pie/demo/scalefont.tex
-2012/02/21 | 115 | graphics/pgf/contrib/pgf-pie/demo/shadow.tex
-2012/02/21 | 12750 | graphics/pgf/contrib/pgf-pie/demo/square.svg
-2012/02/21 | 76 | graphics/pgf/contrib/pgf-pie/demo/square.tex
-2012/02/21 | 158 | graphics/pgf/contrib/pgf-pie/demo/sum.tex
-2012/02/21 | 81 | graphics/pgf/contrib/pgf-pie/demo/text-inside.tex
-2012/02/21 | 78 | graphics/pgf/contrib/pgf-pie/demo/text.tex
-2012/02/21 | 9181 | graphics/pgf/contrib/pgf-pie/logo.png
-2012/02/21 | 202715 | graphics/pgf/contrib/pgf-pie/pgf-pie-manual.pdf
-2012/02/21 | 5345 | graphics/pgf/contrib/pgf-pie/pgf-pie-manual.tex
-2012/02/21 | 10417 | graphics/pgf/contrib/pgf-pie/pgf-pie.sty
-2014/02/24 | 209163 | graphics/pgf/contrib/pgf-pie.zip
+2020/05/27 | 104 | graphics/pgf/contrib/pgf-pie/before-after-number.tex
+2020/05/27 | 21589 | graphics/pgf/contrib/pgf-pie/cloud.svg
+2020/05/27 | 100 | graphics/pgf/contrib/pgf-pie/cloud.tex
+2020/05/27 | 179 | graphics/pgf/contrib/pgf-pie/color.tex
+2020/05/27 | 94 | graphics/pgf/contrib/pgf-pie/colorwheel.tex
+2020/05/27 | 368 | graphics/pgf/contrib/pgf-pie/COPYING
+2020/05/27 | 183 | graphics/pgf/contrib/pgf-pie/explode.tex
+2020/05/27 | 12954 | graphics/pgf/contrib/pgf-pie/first-pie.svg
+2020/05/27 | 68 | graphics/pgf/contrib/pgf-pie/first-pie.tex
+2020/05/27 | 82 | graphics/pgf/contrib/pgf-pie/hide-number.tex
+2020/05/27 | 99 | graphics/pgf/contrib/pgf-pie/legend.tex
+2020/05/27 | 18093 | graphics/pgf/contrib/pgf-pie/LICENSE-GPL2.txt
+2020/05/27 | 19107 | graphics/pgf/contrib/pgf-pie/LICENSE-LPPL1.3c.txt
+2020/05/27 | 9181 | graphics/pgf/contrib/pgf-pie/logo.png
+2020/05/27 | 84480 | graphics/pgf/contrib/pgf-pie/pgf-pie-manual.pdf
+2020/05/27 | 5430 | graphics/pgf/contrib/pgf-pie/pgf-pie-manual.tex
+2020/05/27 | 10808 | graphics/pgf/contrib/pgf-pie/pgf-pie.sty
+2020/05/27 | 12840 | graphics/pgf/contrib/pgf-pie/polar.svg
+2020/05/27 | 75 | graphics/pgf/contrib/pgf-pie/polar.tex
+2020/05/27 | 1596 | graphics/pgf/contrib/pgf-pie/population.tex
+2020/05/27 | 165 | graphics/pgf/contrib/pgf-pie/radius.tex
+2020/05/27 | 165 | graphics/pgf/contrib/pgf-pie/README
+2020/05/27 | 80 | graphics/pgf/contrib/pgf-pie/scalefont.tex
+2020/05/27 | 115 | graphics/pgf/contrib/pgf-pie/shadow.tex
+2020/05/27 | 12750 | graphics/pgf/contrib/pgf-pie/square.svg
+2020/05/27 | 76 | graphics/pgf/contrib/pgf-pie/square.tex
+2020/05/27 | 158 | graphics/pgf/contrib/pgf-pie/sum.tex
+2020/05/27 | 81 | graphics/pgf/contrib/pgf-pie/text-inside.tex
+2020/05/27 | 78 | graphics/pgf/contrib/pgf-pie/text.tex
+2020/05/27 | 127468 | graphics/pgf/contrib/pgf-pie.zip
2020/03/01 | 136 | graphics/pgf/contrib/pgfplots/doc/Makefile
2020/03/01 | 2040887 | graphics/pgf/contrib/pgfplots/doc/pgfplots.doc.src.tar.bz2
2020/03/01 | 16161 | graphics/pgf/contrib/pgfplots/doc/pgfplotsexample-context.pdf
@@ -162976,7 +162982,7 @@
2018/11/24 | 6522794 | install/macros/latex/contrib/abntex2.tds.zip
2009/09/02 | 160216 | install/macros/latex/contrib/abstract.tds.zip
2019/12/05 | 340781 | install/macros/latex/contrib/accsupp.tds.zip
-2020/05/06 | 997615 | install/macros/latex/contrib/achemso.tds.zip
+2020/05/27 | 997577 | install/macros/latex/contrib/achemso.tds.zip
2010/11/19 | 165549 | install/macros/latex/contrib/acroterm.tds.zip
2019/01/04 | 821335 | install/macros/latex/contrib/adjustbox.tds.zip
2015/08/04 | 140785 | install/macros/latex/contrib/alertmessage.tds.zip
@@ -163302,12 +163308,12 @@
2020/04/09 | 806385 | install/macros/latex/contrib/zhlipsum.tds.zip
2020/05/01 | 293478 | install/macros/latex/contrib/zhnumber.tds.zip
2020/03/03 | 723658 | install/macros/latex/contrib/zref.tds.zip
-2020/03/06 | 22600138 | install/macros/latex-dev/latex-base-dev.tds.zip
-2019/11/18 | 2636412 | install/macros/latex-dev/required/latex-amsmath-dev.tds.zip
-2020/02/02 | 2551525 | install/macros/latex-dev/required/latex-graphics-dev.tds.zip
-2020/02/13 | 6933094 | install/macros/latex-dev/required/latex-tools-dev.tds.zip
+2020/05/27 | 22964254 | install/macros/latex-dev/latex-base-dev.tds.zip
+2020/05/27 | 2642179 | install/macros/latex-dev/required/latex-amsmath-dev.tds.zip
+2020/05/27 | 2534097 | install/macros/latex-dev/required/latex-graphics-dev.tds.zip
+2020/05/27 | 6952868 | install/macros/latex-dev/required/latex-tools-dev.tds.zip
2020/02/28 | 22237296 | install/macros/latex/latex-base.tds.zip
-2017/12/18 | 1359749 | install/macros/latex/required/amscls.tds.zip
+2020/05/27 | 1285496 | install/macros/latex/required/amscls.tds.zip
2013/03/08 | 2480846 | install/macros/latex/required/amslatex/math.tds.zip
2020/05/13 | 2675092 | install/macros/latex/required/babel-base.tds.zip
2020/02/02 | 2654475 | install/macros/latex/required/latex-amsmath.tds.zip
@@ -173324,17 +173330,18 @@
2005/04/24 | 364 | language/maltese/README.txt
2005/04/27 | 98071 | language/maltese.zip
2001/11/28 | 721 | language/manju/README
-2020/05/23 | 9329 | language/marathi/article.tex
+2020/05/27 | 9375 | language/marathi/article.tex
2020/05/08 | 2172 | language/marathi/beamer.tex
-2020/05/08 | 9396 | language/marathi/book.tex
-2020/05/25 | 1269 | language/marathi/glossaries.gls
-2020/05/08 | 1635 | language/marathi/letter.tex
-2020/05/25 | 28551 | language/marathi/marathi.dtx
-2020/05/25 | 2741 | language/marathi/marathi.ins
-2020/05/25 | 68175 | language/marathi/marathi.pdf
-2020/05/25 | 1183 | language/marathi/README.txt
+2020/05/27 | 9442 | language/marathi/book.tex
+2020/05/27 | 1629 | language/marathi/glossaries.gls
+2020/05/27 | 1994 | language/marathi/letter.tex
+2020/05/27 | 32579 | language/marathi/marathi.dtx
+2020/05/27 | 2741 | language/marathi/marathi.ins
+2020/05/27 | 74619 | language/marathi/marathi.pdf
+2020/05/27 | 1235 | language/marathi/para.tex
+2020/05/27 | 1183 | language/marathi/README.txt
2020/05/08 | 10660 | language/marathi/report.tex
-2020/05/25 | 79717 | language/marathi.zip
+2020/05/27 | 87724 | language/marathi.zip
2007/03/22 | 3923 | language/mongolian/babel/mn.def
2008/03/30 | 39157 | language/mongolian/babel/mongolian.dtx
2008/03/23 | 5112 | language/mongolian/babel/mongolian.ins
@@ -179184,15 +179191,15 @@
2019/12/05 | 310 | macros/latex/contrib/accsupp/README.md
2019/12/05 | 331978 | macros/latex/contrib/accsupp.zip
2020/02/04 | 5245 | macros/latex/contrib/achemso/achemso-demo.bib
-2020/05/06 | 359125 | macros/latex/contrib/achemso/achemso-demo.pdf
+2020/05/27 | 359004 | macros/latex/contrib/achemso/achemso-demo.pdf
2020/02/04 | 16202 | macros/latex/contrib/achemso/achemso-demo.tex
-2020/05/06 | 149726 | macros/latex/contrib/achemso/achemso.dtx
+2020/05/27 | 149789 | macros/latex/contrib/achemso/achemso.dtx
2020/05/06 | 6241 | macros/latex/contrib/achemso/achemso.ins
-2020/05/06 | 514491 | macros/latex/contrib/achemso/achemso.pdf
-2020/05/06 | 17923 | macros/latex/contrib/achemso/CHANGELOG.md
+2020/05/27 | 514502 | macros/latex/contrib/achemso/achemso.pdf
+2020/05/27 | 17998 | macros/latex/contrib/achemso/CHANGELOG.md
2017/08/09 | 464 | macros/latex/contrib/achemso/LICENSE.md
2017/08/09 | 1333 | macros/latex/contrib/achemso/README.md
-2020/05/06 | 898207 | macros/latex/contrib/achemso.zip
+2020/05/27 | 898098 | macros/latex/contrib/achemso.zip
2019/12/16 | 2608 | macros/latex/contrib/acmart/acmart.bib
2020/05/03 | 238751 | macros/latex/contrib/acmart/acmart.dtx
2019/04/21 | 1016 | macros/latex/contrib/acmart/acmart.ins
@@ -182524,26 +182531,26 @@
2018/05/24 | 109873 | macros/latex/contrib/biblatex-contrib/biblatex-socialscienceshuberlin/socialscienceshuberlin.pdf
2018/05/24 | 15495 | macros/latex/contrib/biblatex-contrib/biblatex-socialscienceshuberlin/socialscienceshuberlin.tex
2018/05/25 | 117753 | macros/latex/contrib/biblatex-contrib/biblatex-socialscienceshuberlin.zip
-2020/04/29 | 3440 | macros/latex/contrib/biblatex-contrib/biblatex-software/biblio.bib
+2020/05/27 | 3447 | macros/latex/contrib/biblatex-contrib/biblatex-software/biblio.bib
2020/04/25 | 755 | macros/latex/contrib/biblatex-contrib/biblatex-software/english-software.lbx
2020/04/25 | 758 | macros/latex/contrib/biblatex-contrib/biblatex-software/french-software.lbx
-2020/04/29 | 1406 | macros/latex/contrib/biblatex-contrib/biblatex-software/history.tex
+2020/05/27 | 1511 | macros/latex/contrib/biblatex-contrib/biblatex-software/history.tex
2020/04/25 | 931 | macros/latex/contrib/biblatex-contrib/biblatex-software/LICENSE
2020/04/29 | 1310 | macros/latex/contrib/biblatex-contrib/biblatex-software/Makefile
2020/04/29 | 4467 | macros/latex/contrib/biblatex-contrib/biblatex-software/manual.bib
2020/04/25 | 654 | macros/latex/contrib/biblatex-contrib/biblatex-software/mkbiblatexstubs.sh
2020/04/25 | 2788 | macros/latex/contrib/biblatex-contrib/biblatex-software/README.md
2020/04/25 | 2565 | macros/latex/contrib/biblatex-contrib/biblatex-software/sample.tex
-2020/04/29 | 112874 | macros/latex/contrib/biblatex-contrib/biblatex-software/sample-use-sty.pdf
+2020/05/27 | 112967 | macros/latex/contrib/biblatex-contrib/biblatex-software/sample-use-sty.pdf
2020/04/29 | 2605 | macros/latex/contrib/biblatex-contrib/biblatex-software/sample-use-sty.tex
-2020/04/29 | 8034 | macros/latex/contrib/biblatex-contrib/biblatex-software/software.bbx
-2020/04/29 | 169749 | macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.pdf
+2020/05/27 | 8210 | macros/latex/contrib/biblatex-contrib/biblatex-software/software.bbx
+2020/05/27 | 169826 | macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.pdf
2020/04/25 | 639 | macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.sty
-2020/04/29 | 10567 | macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.tex
+2020/05/27 | 10567 | macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.tex
2020/04/29 | 3149 | macros/latex/contrib/biblatex-contrib/biblatex-software/software.dbx
2020/04/25 | 359 | macros/latex/contrib/biblatex-contrib/biblatex-software/stublist
-2020/04/29 | 12779 | macros/latex/contrib/biblatex-contrib/biblatex-software/swentries.tex
-2020/04/30 | 302214 | macros/latex/contrib/biblatex-contrib/biblatex-software.zip
+2020/05/27 | 12786 | macros/latex/contrib/biblatex-contrib/biblatex-software/swentries.tex
+2020/05/27 | 302486 | macros/latex/contrib/biblatex-contrib/biblatex-software.zip
2017/09/21 | 742 | macros/latex/contrib/biblatex-contrib/biblatex-source-division/biblatex-source-division.bib
2017/09/21 | 62688 | macros/latex/contrib/biblatex-contrib/biblatex-source-division/biblatex-source-division.pdf
2017/09/21 | 3431 | macros/latex/contrib/biblatex-contrib/biblatex-source-division/biblatex-source-division.sty
@@ -195808,13 +195815,13 @@
1996/03/22 | 18862 | macros/latex/contrib/niceframe/umrandb.mf
2015/01/17 | 1370 | macros/latex/contrib/niceframe/umrand.mf
2015/01/17 | 287910 | macros/latex/contrib/niceframe.zip
-2020/05/08 | 367797 | macros/latex/contrib/nicematrix/nicematrix.dtx
-2020/05/08 | 349092 | macros/latex/contrib/nicematrix/nicematrix-french.pdf
-2020/05/08 | 103567 | macros/latex/contrib/nicematrix/nicematrix-french.tex
+2020/05/27 | 389337 | macros/latex/contrib/nicematrix/nicematrix.dtx
+2020/05/27 | 355393 | macros/latex/contrib/nicematrix/nicematrix-french.pdf
+2020/05/27 | 110157 | macros/latex/contrib/nicematrix/nicematrix-french.tex
2019/01/16 | 1423 | macros/latex/contrib/nicematrix/nicematrix.ins
-2020/05/08 | 845357 | macros/latex/contrib/nicematrix/nicematrix.pdf
-2019/10/07 | 974 | macros/latex/contrib/nicematrix/README.md
-2020/05/09 | 1256317 | macros/latex/contrib/nicematrix.zip
+2020/05/27 | 875835 | macros/latex/contrib/nicematrix/nicematrix.pdf
+2020/05/10 | 1063 | macros/latex/contrib/nicematrix/README.md
+2020/05/27 | 1297213 | macros/latex/contrib/nicematrix.zip
2015/11/21 | 217 | macros/latex/contrib/nicetext/ANNOUNCE.txt
2012/03/18 | 254582 | macros/latex/contrib/nicetext/demo/arseneau.pdf
2011/09/14 | 10 | macros/latex/contrib/nicetext/demo/iso.txt
@@ -197868,11 +197875,11 @@
2020/04/19 | 607658 | macros/latex/contrib/pm-isomath.zip
2017/12/23 | 54616 | macros/latex/contrib/poemscol/poemscolcheatsheet.pdf
2017/12/23 | 4455 | macros/latex/contrib/poemscol/poemscolcheatsheet.tex
-2019/10/29 | 466668 | macros/latex/contrib/poemscol/poemscol.dtx
+2020/05/27 | 477230 | macros/latex/contrib/poemscol/poemscol.dtx
2019/08/03 | 1109 | macros/latex/contrib/poemscol/poemscol.ins
-2019/10/29 | 712470 | macros/latex/contrib/poemscol/poemscol.pdf
+2020/05/27 | 727493 | macros/latex/contrib/poemscol/poemscol.pdf
2019/08/03 | 547 | macros/latex/contrib/poemscol/README
-2019/10/29 | 861074 | macros/latex/contrib/poemscol.zip
+2020/05/27 | 877210 | macros/latex/contrib/poemscol.zip
2019/12/14 | 683 | macros/latex/contrib/poetry/CHANGES
2019/12/14 | 19106 | macros/latex/contrib/poetry/lppl.txt
2019/12/14 | 62372 | macros/latex/contrib/poetry/poetry.dtx
@@ -208308,377 +208315,380 @@
2020/02/28 | 475910 | macros/latex/contrib/zwpagelayout/zwpagelayout.pdf
2020/02/28 | 36153 | macros/latex/contrib/zwpagelayout/zwpagelayout.sty
2020/02/28 | 69481 | macros/latex/contrib/zwpagelayout/zwpagelayout.tex
-2020/03/06 | 6654 | macros/latex-dev/base/alltt.dtx
-2020/03/06 | 2892 | macros/latex-dev/base/alltt.ins
-2020/03/06 | 173077 | macros/latex-dev/base/alltt.pdf
-2020/03/06 | 3282 | macros/latex-dev/base/bugs.txt
-2020/03/06 | 220211 | macros/latex-dev/base/cfgguide.pdf
-2020/03/06 | 22457 | macros/latex-dev/base/cfgguide.tex
-2020/03/06 | 42708 | macros/latex-dev/base/changes.old.txt
-2020/03/06 | 317093 | macros/latex-dev/base/changes.txt
-2020/03/06 | 155549 | macros/latex-dev/base/classes.dtx
-2020/03/06 | 4089 | macros/latex-dev/base/classes.ins
-2020/03/06 | 521080 | macros/latex-dev/base/classes.pdf
-2020/03/06 | 372505 | macros/latex-dev/base/clsguide.pdf
-2020/03/06 | 69051 | macros/latex-dev/base/clsguide.tex
-2020/03/06 | 5275 | macros/latex-dev/base/cmextra.ins
-2020/03/06 | 43637 | macros/latex-dev/base/cmfonts.fdd
-2020/03/06 | 4326 | macros/latex-dev/base/cmfonts.ins
-2020/03/06 | 264453 | macros/latex-dev/base/cmfonts.pdf
-2020/03/06 | 216976 | macros/latex-dev/base/cyrguide.pdf
-2020/03/06 | 17496 | macros/latex-dev/base/cyrguide.tex
-2020/03/06 | 203514 | macros/latex-dev/base/doc.dtx
-2020/03/06 | 629318 | macros/latex-dev/base/doc.pdf
-2020/03/06 | 163680 | macros/latex-dev/base/docstrip.dtx
-2020/03/06 | 4223 | macros/latex-dev/base/docstrip.ins
-2020/03/06 | 469448 | macros/latex-dev/base/docstrip.pdf
-2020/03/06 | 4392 | macros/latex-dev/base/ec.ins
-2020/03/06 | 1532114 | macros/latex-dev/base/encguide.pdf
-2020/03/06 | 52814 | macros/latex-dev/base/encguide.tex
-2020/03/06 | 7222 | macros/latex-dev/base/exscale.dtx
-2020/03/06 | 3340 | macros/latex-dev/base/exscale.ins
-2020/03/06 | 195880 | macros/latex-dev/base/exscale.pdf
-2020/03/06 | 23521 | macros/latex-dev/base/fix-cm.dtx
-2020/03/06 | 2894 | macros/latex-dev/base/fix-cm.ins
-2020/03/06 | 262051 | macros/latex-dev/base/fix-cm.pdf
-2020/03/06 | 361810 | macros/latex-dev/base/fntguide.pdf
-2020/03/06 | 74810 | macros/latex-dev/base/fntguide.tex
-2020/03/06 | 59690 | macros/latex-dev/base/fontdef.dtx
-2020/03/06 | 8770 | macros/latex-dev/base/format.ins
-2020/03/06 | 5515 | macros/latex-dev/base/graphpap.dtx
-2020/03/06 | 2894 | macros/latex-dev/base/graphpap.ins
-2020/03/06 | 156280 | macros/latex-dev/base/graphpap.pdf
-2020/03/06 | 2706 | macros/latex-dev/base/idx.tex
-2020/03/06 | 18305 | macros/latex-dev/base/ifthen.dtx
-2020/03/06 | 2890 | macros/latex-dev/base/ifthen.ins
-2020/03/06 | 205205 | macros/latex-dev/base/ifthen.pdf
-2020/03/06 | 107001 | macros/latex-dev/base/inputenc.dtx
-2020/03/06 | 5716 | macros/latex-dev/base/inputenc.ins
-2020/03/06 | 294824 | macros/latex-dev/base/inputenc.pdf
-2020/03/06 | 4080 | macros/latex-dev/base/lablst.tex
-2020/03/06 | 38533 | macros/latex-dev/base/latex209.dtx
-2020/03/06 | 4221 | macros/latex-dev/base/latex209.ins
-2020/03/06 | 232380 | macros/latex-dev/base/latexchanges.pdf
-2020/03/06 | 37980 | macros/latex-dev/base/latexchanges.tex
-2020/03/06 | 32164 | macros/latex-dev/base/latexrelease.dtx
-2020/03/06 | 5354 | macros/latex-dev/base/latexrelease.ins
-2020/03/06 | 246174 | macros/latex-dev/base/latexrelease.pdf
-2020/03/06 | 6715 | macros/latex-dev/base/latexsym.dtx
-2020/03/06 | 5044 | macros/latex-dev/base/latexsym.ins
-2020/03/06 | 192289 | macros/latex-dev/base/latexsym.pdf
-2020/03/06 | 52532 | macros/latex-dev/base/lb2.err
-2020/03/06 | 138223 | macros/latex-dev/base/lb2.pdf
-2020/03/06 | 1381 | macros/latex-dev/base/legal.txt
-2020/03/06 | 61549 | macros/latex-dev/base/letter.dtx
-2020/03/06 | 3374 | macros/latex-dev/base/letter.ins
-2020/03/06 | 304792 | macros/latex-dev/base/letter.pdf
-2020/03/06 | 20434 | macros/latex-dev/base/lgc2.err
-2020/03/06 | 101344 | macros/latex-dev/base/lgc2.pdf
-2020/03/06 | 9068 | macros/latex-dev/base/lppl-1-0.txt
-2020/03/06 | 14341 | macros/latex-dev/base/lppl-1-1.txt
-2020/03/06 | 14421 | macros/latex-dev/base/lppl-1-2.txt
-2020/03/06 | 19040 | macros/latex-dev/base/lppl.txt
-2020/03/06 | 4304 | macros/latex-dev/base/ltalloc.dtx
-2020/03/06 | 14440 | macros/latex-dev/base/ltbibl.dtx
-2020/03/06 | 40203 | macros/latex-dev/base/ltboxes.dtx
-2020/03/06 | 96249 | macros/latex-dev/base/ltclass.dtx
-2020/03/06 | 9562 | macros/latex-dev/base/ltcntrl.dtx
-2020/03/06 | 22676 | macros/latex-dev/base/ltcounts.dtx
-2020/03/06 | 55854 | macros/latex-dev/base/ltdefns.dtx
-2020/03/06 | 35162 | macros/latex-dev/base/ltdirchk.dtx
-2020/03/06 | 24016 | macros/latex-dev/base/lterror.dtx
-2020/03/06 | 3222 | macros/latex-dev/base/ltexpl.dtx
-2020/03/06 | 38115 | macros/latex-dev/base/ltfiles.dtx
-2020/03/06 | 40589 | macros/latex-dev/base/ltfinal.dtx
-2020/03/06 | 49835 | macros/latex-dev/base/ltfloat.dtx
-2020/03/06 | 29194 | macros/latex-dev/base/ltfntcmd.dtx
-2020/03/06 | 48359 | macros/latex-dev/base/ltfssaxes.dtx
-2020/03/06 | 79110 | macros/latex-dev/base/ltfssbas.dtx
-2020/03/06 | 10376 | macros/latex-dev/base/ltfsscmp.dtx
-2020/03/06 | 59163 | macros/latex-dev/base/ltfssdcl.dtx
-2020/03/06 | 59161 | macros/latex-dev/base/ltfssini.dtx
-2020/03/06 | 67333 | macros/latex-dev/base/ltfsstrc.dtx
-2020/03/06 | 4952 | macros/latex-dev/base/lthyphen.dtx
-2020/03/06 | 5865 | macros/latex-dev/base/ltidxglo.dtx
-2020/03/06 | 4762 | macros/latex-dev/base/ltlength.dtx
-2020/03/06 | 36054 | macros/latex-dev/base/ltlists.dtx
-2020/03/06 | 3731 | macros/latex-dev/base/ltlogos.dtx
-2020/03/06 | 63297 | macros/latex-dev/base/ltluatex.dtx
-2020/03/06 | 304104 | macros/latex-dev/base/ltluatex.pdf
-2020/03/06 | 35212 | macros/latex-dev/base/ltmath.dtx
-2020/03/06 | 44813 | macros/latex-dev/base/ltmiscen.dtx
-2020/03/06 | 150020 | macros/latex-dev/base/ltnews01.pdf
-2020/03/06 | 5239 | macros/latex-dev/base/ltnews01.tex
-2020/03/06 | 134750 | macros/latex-dev/base/ltnews02.pdf
-2020/03/06 | 5284 | macros/latex-dev/base/ltnews02.tex
-2020/03/06 | 134730 | macros/latex-dev/base/ltnews03.pdf
-2020/03/06 | 5201 | macros/latex-dev/base/ltnews03.tex
-2020/03/06 | 128768 | macros/latex-dev/base/ltnews04.pdf
-2020/03/06 | 5507 | macros/latex-dev/base/ltnews04.tex
-2020/03/06 | 157174 | macros/latex-dev/base/ltnews05.pdf
-2020/03/06 | 5609 | macros/latex-dev/base/ltnews05.tex
-2020/03/06 | 133132 | macros/latex-dev/base/ltnews06.pdf
-2020/03/06 | 5391 | macros/latex-dev/base/ltnews06.tex
-2020/03/06 | 124028 | macros/latex-dev/base/ltnews07.pdf
-2020/03/06 | 5426 | macros/latex-dev/base/ltnews07.tex
-2020/03/06 | 144471 | macros/latex-dev/base/ltnews08.pdf
-2020/03/06 | 5696 | macros/latex-dev/base/ltnews08.tex
-2020/03/06 | 120208 | macros/latex-dev/base/ltnews09.pdf
-2020/03/06 | 5294 | macros/latex-dev/base/ltnews09.tex
-2020/03/06 | 147941 | macros/latex-dev/base/ltnews10.pdf
-2020/03/06 | 5660 | macros/latex-dev/base/ltnews10.tex
-2020/03/06 | 104942 | macros/latex-dev/base/ltnews11.pdf
-2020/03/06 | 5530 | macros/latex-dev/base/ltnews11.tex
-2020/03/06 | 137918 | macros/latex-dev/base/ltnews12.pdf
-2020/03/06 | 5418 | macros/latex-dev/base/ltnews12.tex
-2020/03/06 | 161066 | macros/latex-dev/base/ltnews13.pdf
-2020/03/06 | 6872 | macros/latex-dev/base/ltnews13.tex
-2020/03/06 | 150920 | macros/latex-dev/base/ltnews14.pdf
-2020/03/06 | 6274 | macros/latex-dev/base/ltnews14.tex
-2020/03/06 | 122088 | macros/latex-dev/base/ltnews15.pdf
-2020/03/06 | 5840 | macros/latex-dev/base/ltnews15.tex
-2020/03/06 | 130688 | macros/latex-dev/base/ltnews16.pdf
-2020/03/06 | 5777 | macros/latex-dev/base/ltnews16.tex
-2020/03/06 | 149835 | macros/latex-dev/base/ltnews17.pdf
-2020/03/06 | 8864 | macros/latex-dev/base/ltnews17.tex
-2020/03/06 | 36003 | macros/latex-dev/base/ltnews18.pdf
-2020/03/06 | 1342 | macros/latex-dev/base/ltnews18.tex
-2020/03/06 | 235068 | macros/latex-dev/base/ltnews19.pdf
-2020/03/06 | 4171 | macros/latex-dev/base/ltnews19.tex
-2020/03/06 | 283323 | macros/latex-dev/base/ltnews20.pdf
-2020/03/06 | 7326 | macros/latex-dev/base/ltnews20.tex
-2020/03/06 | 233491 | macros/latex-dev/base/ltnews21.pdf
-2020/03/06 | 9810 | macros/latex-dev/base/ltnews21.tex
-2020/03/06 | 302835 | macros/latex-dev/base/ltnews22.pdf
-2020/03/06 | 10669 | macros/latex-dev/base/ltnews22.tex
-2020/03/06 | 274453 | macros/latex-dev/base/ltnews23.pdf
-2020/03/06 | 10688 | macros/latex-dev/base/ltnews23.tex
-2020/03/06 | 252641 | macros/latex-dev/base/ltnews24.pdf
-2020/03/06 | 12225 | macros/latex-dev/base/ltnews24.tex
-2020/03/06 | 196325 | macros/latex-dev/base/ltnews25.pdf
-2020/03/06 | 5474 | macros/latex-dev/base/ltnews25.tex
-2020/03/06 | 362836 | macros/latex-dev/base/ltnews26.pdf
-2020/03/06 | 10698 | macros/latex-dev/base/ltnews26.tex
-2020/03/06 | 239755 | macros/latex-dev/base/ltnews27.pdf
-2020/03/06 | 5507 | macros/latex-dev/base/ltnews27.tex
-2020/03/06 | 368228 | macros/latex-dev/base/ltnews28.pdf
-2020/03/06 | 14890 | macros/latex-dev/base/ltnews28.tex
-2020/03/06 | 433006 | macros/latex-dev/base/ltnews29.pdf
-2020/03/06 | 18941 | macros/latex-dev/base/ltnews29.tex
-2020/03/06 | 491245 | macros/latex-dev/base/ltnews30.pdf
-2020/03/06 | 23652 | macros/latex-dev/base/ltnews30.tex
-2020/03/06 | 500199 | macros/latex-dev/base/ltnews31.pdf
-2020/03/06 | 30463 | macros/latex-dev/base/ltnews31.tex
-2020/03/06 | 344268 | macros/latex-dev/base/ltnews32.pdf
-2020/03/06 | 7659 | macros/latex-dev/base/ltnews32.tex
-2020/03/06 | 20302 | macros/latex-dev/base/ltnews.cls
-2020/03/06 | 959539 | macros/latex-dev/base/ltnews.pdf
-2020/03/06 | 7666 | macros/latex-dev/base/ltnews.tex
-2020/03/06 | 143378 | macros/latex-dev/base/ltoutenc.dtx
-2020/03/06 | 3369 | macros/latex-dev/base/ltoutenc.ins
-2020/03/06 | 175355 | macros/latex-dev/base/ltoutput.dtx
-2020/03/06 | 11443 | macros/latex-dev/base/ltpage.dtx
-2020/03/06 | 2733 | macros/latex-dev/base/ltpageno.dtx
-2020/03/06 | 5854 | macros/latex-dev/base/ltpar.dtx
-2020/03/06 | 50244 | macros/latex-dev/base/ltpictur.dtx
-2020/03/06 | 47759 | macros/latex-dev/base/ltplain.dtx
-2020/03/06 | 31879 | macros/latex-dev/base/ltsect.dtx
-2020/03/06 | 40771 | macros/latex-dev/base/ltspace.dtx
-2020/03/06 | 46381 | macros/latex-dev/base/lttab.dtx
-2020/03/06 | 87967 | macros/latex-dev/base/lttextcomp.dtx
-2020/03/06 | 8737 | macros/latex-dev/base/ltthm.dtx
-2020/03/06 | 10365 | macros/latex-dev/base/ltvers.dtx
-2020/03/06 | 191528 | macros/latex-dev/base/ltx3info.pdf
-2020/03/06 | 18300 | macros/latex-dev/base/ltx3info.tex
-2020/03/06 | 27124 | macros/latex-dev/base/ltxcheck.tex
-2020/03/06 | 18558 | macros/latex-dev/base/ltxdoc.dtx
-2020/03/06 | 215600 | macros/latex-dev/base/ltxdoc.pdf
-2020/03/06 | 7526 | macros/latex-dev/base/ltxguide.cls
-2020/03/06 | 14797 | macros/latex-dev/base/ltxref.dtx
-2020/03/06 | 10606 | macros/latex-dev/base/makeindx.dtx
-2020/03/06 | 3436 | macros/latex-dev/base/makeindx.ins
-2020/03/06 | 160673 | macros/latex-dev/base/makeindx.pdf
-2020/03/06 | 9878 | macros/latex-dev/base/manifest.txt
-2020/03/06 | 12946 | macros/latex-dev/base/manual.err
-2020/03/06 | 151354 | macros/latex-dev/base/manual.pdf
-2020/03/06 | 1938 | macros/latex-dev/base/minimal.cls
-2020/03/06 | 220384 | macros/latex-dev/base/modguide.pdf
-2020/03/06 | 16234 | macros/latex-dev/base/modguide.tex
-2020/03/06 | 4256 | macros/latex-dev/base/newdc.ins
-2020/03/06 | 6363 | macros/latex-dev/base/newlfont.dtx
-2020/03/06 | 18407 | macros/latex-dev/base/nfssfont.dtx
-2020/03/06 | 2895 | macros/latex-dev/base/nfssfont.ins
-2020/03/06 | 202429 | macros/latex-dev/base/nfssfont.pdf
-2020/03/06 | 3962 | macros/latex-dev/base/olddc.ins
-2020/03/06 | 8632 | macros/latex-dev/base/oldlfont.dtx
-2020/03/06 | 9374 | macros/latex-dev/base/preload.dtx
-2020/03/06 | 13305 | macros/latex-dev/base/proc.dtx
-2020/03/06 | 3403 | macros/latex-dev/base/proc.ins
-2020/03/06 | 216899 | macros/latex-dev/base/proc.pdf
-2020/03/06 | 3752 | macros/latex-dev/base/README.md
-2020/03/06 | 7200 | macros/latex-dev/base/sample2e.tex
-2020/03/06 | 89720 | macros/latex-dev/base/slides.dtx
-2020/03/06 | 6764 | macros/latex-dev/base/slides.ins
-2020/03/06 | 351660 | macros/latex-dev/base/slides.pdf
-2020/03/06 | 15701 | macros/latex-dev/base/slifonts.fdd
-2020/03/06 | 214708 | macros/latex-dev/base/slifonts.pdf
-2020/03/06 | 1694 | macros/latex-dev/base/small2e.tex
-2020/03/06 | 3117644 | macros/latex-dev/base/source2e.pdf
-2020/03/06 | 14673 | macros/latex-dev/base/source2e.tex
-2020/03/06 | 9401 | macros/latex-dev/base/syntonly.dtx
-2020/03/06 | 2898 | macros/latex-dev/base/syntonly.ins
-2020/03/06 | 181181 | macros/latex-dev/base/syntonly.pdf
-2020/03/06 | 12521 | macros/latex-dev/base/testpage.tex
-2020/03/06 | 2738 | macros/latex-dev/base/tex2.txt
-2020/03/06 | 8493 | macros/latex-dev/base/texpert.txt
-2020/03/06 | 172216 | macros/latex-dev/base/tlc2.err
-2020/03/06 | 164949 | macros/latex-dev/base/tlc2.pdf
-2020/03/06 | 12120 | macros/latex-dev/base/tulm.fdd
-2020/03/06 | 3783 | macros/latex-dev/base/tulm.ins
-2020/03/06 | 156534 | macros/latex-dev/base/tulm.pdf
-2020/03/06 | 3183 | macros/latex-dev/base/unpack.ins
-2020/03/06 | 398281 | macros/latex-dev/base/usrguide.pdf
-2020/03/06 | 67907 | macros/latex-dev/base/usrguide.tex
-2020/03/06 | 89386 | macros/latex-dev/base/utf8ienc.dtx
-2020/03/06 | 330773 | macros/latex-dev/base/utf8ienc.pdf
-2020/03/06 | 10053 | macros/latex-dev/base/webcomp.err
-2020/03/06 | 136153 | macros/latex-dev/base/webcomp.pdf
-2020/03/06 | 22192050 | macros/latex-dev/base.zip
-2019/10/06 | 8657 | macros/latex-dev/required/amsmath/amsbsy.dtx
-2019/10/06 | 1470 | macros/latex-dev/required/amsmath/amsbsy.ins
-2019/11/18 | 161330 | macros/latex-dev/required/amsmath/amsbsy.pdf
-2019/10/06 | 11293 | macros/latex-dev/required/amsmath/amscd.dtx
-2019/10/06 | 1468 | macros/latex-dev/required/amsmath/amscd.ins
-2019/11/18 | 165748 | macros/latex-dev/required/amsmath/amscd.pdf
-2019/10/06 | 5323 | macros/latex-dev/required/amsmath/ams-external.txt
-2019/10/06 | 13452 | macros/latex-dev/required/amsmath/amsgen.dtx
-2019/10/06 | 1470 | macros/latex-dev/required/amsmath/amsgen.ins
-2019/11/18 | 164347 | macros/latex-dev/required/amsmath/amsgen.pdf
-2019/10/06 | 5860 | macros/latex-dev/required/amsmath/ams-internal.txt
-2019/11/18 | 475103 | macros/latex-dev/required/amsmath/amsldoc.pdf
-2019/11/15 | 104498 | macros/latex-dev/required/amsmath/amsldoc.tex
-2019/10/06 | 85093 | macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty
-2019/11/18 | 219900 | macros/latex-dev/required/amsmath/amsmath.dtx
-2019/10/06 | 1484 | macros/latex-dev/required/amsmath/amsmath.ins
-2019/11/18 | 379045 | macros/latex-dev/required/amsmath/amsmath.pdf
-2019/10/06 | 9204 | macros/latex-dev/required/amsmath/amsopn.dtx
-2019/10/06 | 1470 | macros/latex-dev/required/amsmath/amsopn.ins
-2019/11/18 | 129165 | macros/latex-dev/required/amsmath/amsopn.pdf
-2019/10/06 | 69722 | macros/latex-dev/required/amsmath/amstex.sty
-2019/10/06 | 11411 | macros/latex-dev/required/amsmath/amstext.dtx
-2019/10/06 | 1473 | macros/latex-dev/required/amsmath/amstext.ins
-2019/11/18 | 193899 | macros/latex-dev/required/amsmath/amstext.pdf
-2019/10/06 | 4345 | macros/latex-dev/required/amsmath/amsxtra.dtx
-2019/10/06 | 1473 | macros/latex-dev/required/amsmath/amsxtra.ins
-2019/11/18 | 104544 | macros/latex-dev/required/amsmath/amsxtra.pdf
-2019/11/18 | 4781 | macros/latex-dev/required/amsmath/changes.txt
-2019/10/06 | 22605 | macros/latex-dev/required/amsmath/diffs-m.txt
-2019/10/06 | 369 | macros/latex-dev/required/amsmath/manifest.txt
-2019/11/17 | 2726 | macros/latex-dev/required/amsmath/README.md
-2019/11/18 | 101297 | macros/latex-dev/required/amsmath/subeqn.pdf
-2019/10/06 | 6444 | macros/latex-dev/required/amsmath/subeqn.tex
-2019/11/18 | 130477 | macros/latex-dev/required/amsmath/technote.pdf
-2019/10/06 | 12005 | macros/latex-dev/required/amsmath/technote.tex
-2019/11/18 | 428682 | macros/latex-dev/required/amsmath/testmath.pdf
-2019/10/06 | 82371 | macros/latex-dev/required/amsmath/testmath.tex
-2019/11/18 | 2604985 | macros/latex-dev/required/amsmath.zip
-2019/10/06 | 15737 | macros/latex-dev/required/graphics/cat.eps
-2020/01/31 | 31947 | macros/latex-dev/required/graphics/changes.txt
-2020/01/31 | 31487 | macros/latex-dev/required/graphics/color.dtx
-2020/02/02 | 201521 | macros/latex-dev/required/graphics/color.pdf
-2020/01/31 | 50759 | macros/latex-dev/required/graphics/drivers.dtx
-2020/02/02 | 268843 | macros/latex-dev/required/graphics/drivers.pdf
-2020/01/31 | 4062 | macros/latex-dev/required/graphics/epsfig.dtx
-2020/02/02 | 154491 | macros/latex-dev/required/graphics/epsfig.pdf
-2020/01/31 | 15430 | macros/latex-dev/required/graphics/graphics-2017-06-25.sty
-2019/10/06 | 2994 | macros/latex-dev/required/graphics/graphics-drivers.ins
-2020/01/31 | 66967 | macros/latex-dev/required/graphics/graphics.dtx
-2019/10/06 | 1128 | macros/latex-dev/required/graphics/graphics.ins
-2020/02/02 | 289788 | macros/latex-dev/required/graphics/graphics.pdf
-2020/01/31 | 32247 | macros/latex-dev/required/graphics/graphicx.dtx
-2020/02/02 | 232502 | macros/latex-dev/required/graphics/graphicx.pdf
-2020/02/02 | 310569 | macros/latex-dev/required/graphics/grfguide.pdf
-2020/01/31 | 39395 | macros/latex-dev/required/graphics/grfguide.tex
-2020/01/31 | 13799 | macros/latex-dev/required/graphics/keyval.dtx
-2020/02/02 | 222531 | macros/latex-dev/required/graphics/keyval.pdf
-2020/01/31 | 3814 | macros/latex-dev/required/graphics/lscape.dtx
-2020/02/02 | 150110 | macros/latex-dev/required/graphics/lscape.pdf
-2020/02/02 | 2092 | macros/latex-dev/required/graphics/README.md
-2020/01/31 | 20994 | macros/latex-dev/required/graphics/rotating.dtx
-2020/02/02 | 250716 | macros/latex-dev/required/graphics/rotating.pdf
-2020/02/02 | 162253 | macros/latex-dev/required/graphics/rotex.pdf
-2020/01/31 | 14575 | macros/latex-dev/required/graphics/rotex.tex
-2020/01/31 | 10651 | macros/latex-dev/required/graphics/trig.dtx
-2020/02/02 | 191699 | macros/latex-dev/required/graphics/trig.pdf
-2020/02/02 | 2516515 | macros/latex-dev/required/graphics.zip
-2020/02/13 | 14078 | macros/latex-dev/required/tools/afterpage.dtx
-2020/02/13 | 2540 | macros/latex-dev/required/tools/afterpage.ins
-2020/02/13 | 189848 | macros/latex-dev/required/tools/afterpage.pdf
-2020/02/13 | 11750 | macros/latex-dev/required/tools/array-2016-10-06.sty
-2020/02/13 | 123817 | macros/latex-dev/required/tools/array.dtx
-2020/02/13 | 480808 | macros/latex-dev/required/tools/array.pdf
-2020/02/13 | 59410 | macros/latex-dev/required/tools/bm.dtx
-2020/02/13 | 2526 | macros/latex-dev/required/tools/bm.ins
-2020/02/13 | 306775 | macros/latex-dev/required/tools/bm.pdf
-2020/02/13 | 53174 | macros/latex-dev/required/tools/calc.dtx
-2020/02/13 | 340877 | macros/latex-dev/required/tools/calc.pdf
-2020/02/13 | 55987 | macros/latex-dev/required/tools/changes.txt
-2020/02/13 | 12715 | macros/latex-dev/required/tools/dcolumn.dtx
-2020/02/13 | 199221 | macros/latex-dev/required/tools/dcolumn.pdf
-2020/02/13 | 6795 | macros/latex-dev/required/tools/delarray.dtx
-2020/02/13 | 183432 | macros/latex-dev/required/tools/delarray.pdf
-2020/02/13 | 10650 | macros/latex-dev/required/tools/enumerate.dtx
-2020/02/13 | 199049 | macros/latex-dev/required/tools/enumerate.pdf
-2020/02/13 | 4965 | macros/latex-dev/required/tools/fileerr.dtx
-2020/02/13 | 179882 | macros/latex-dev/required/tools/fileerr.pdf
-2020/02/13 | 10777 | macros/latex-dev/required/tools/fontsmpl.dtx
-2020/02/13 | 138025 | macros/latex-dev/required/tools/fontsmpl.pdf
-2020/02/13 | 39702 | macros/latex-dev/required/tools/ftnright.dtx
-2020/02/13 | 346724 | macros/latex-dev/required/tools/ftnright.pdf
-2020/02/13 | 11154 | macros/latex-dev/required/tools/hhline.dtx
-2020/02/13 | 175678 | macros/latex-dev/required/tools/hhline.pdf
-2020/02/13 | 2226 | macros/latex-dev/required/tools/indentfirst.dtx
-2020/02/13 | 144779 | macros/latex-dev/required/tools/indentfirst.pdf
-2020/02/13 | 30962 | macros/latex-dev/required/tools/layout.dtx
-2020/02/13 | 246931 | macros/latex-dev/required/tools/layout.pdf
-2020/02/13 | 72225 | macros/latex-dev/required/tools/longtable.dtx
-2020/02/13 | 2540 | macros/latex-dev/required/tools/longtable.ins
-2020/02/13 | 349927 | macros/latex-dev/required/tools/longtable.pdf
-2020/02/13 | 3281 | macros/latex-dev/required/tools/manifest.txt
-2020/02/13 | 29714 | macros/latex-dev/required/tools/multicol-2017-04-11.sty
-2020/02/13 | 182355 | macros/latex-dev/required/tools/multicol.dtx
-2020/02/13 | 2578 | macros/latex-dev/required/tools/multicol.ins
-2020/02/13 | 491250 | macros/latex-dev/required/tools/multicol.pdf
-2020/02/13 | 8982 | macros/latex-dev/required/tools/rawfonts.dtx
-2020/02/13 | 135688 | macros/latex-dev/required/tools/rawfonts.pdf
-2020/02/13 | 1666 | macros/latex-dev/required/tools/README.md
-2020/02/13 | 9494 | macros/latex-dev/required/tools/shellesc.dtx
-2020/02/13 | 169757 | macros/latex-dev/required/tools/shellesc.pdf
-2020/02/13 | 29571 | macros/latex-dev/required/tools/showkeys.dtx
-2020/02/13 | 242786 | macros/latex-dev/required/tools/showkeys.pdf
-2020/02/13 | 5797 | macros/latex-dev/required/tools/somedefs.dtx
-2020/02/13 | 156511 | macros/latex-dev/required/tools/somedefs.pdf
-2020/02/13 | 35881 | macros/latex-dev/required/tools/tabularx.dtx
-2020/02/13 | 2537 | macros/latex-dev/required/tools/tabularx.ins
-2020/02/13 | 254205 | macros/latex-dev/required/tools/tabularx.pdf
-2020/02/13 | 43454 | macros/latex-dev/required/tools/theorem.dtx
-2020/02/13 | 323292 | macros/latex-dev/required/tools/theorem.pdf
-2020/02/13 | 5682 | macros/latex-dev/required/tools/tools.ins
-2020/02/13 | 68288 | macros/latex-dev/required/tools/tools-overview.pdf
-2020/02/13 | 5213 | macros/latex-dev/required/tools/tools-overview.tex
-2020/02/13 | 24649 | macros/latex-dev/required/tools/trace.dtx
-2020/02/13 | 212730 | macros/latex-dev/required/tools/trace.pdf
-2020/02/13 | 33864 | macros/latex-dev/required/tools/varioref-2016-02-16.sty
-2020/02/13 | 103573 | macros/latex-dev/required/tools/varioref.dtx
-2020/02/13 | 2533 | macros/latex-dev/required/tools/varioref.ins
-2020/02/13 | 354736 | macros/latex-dev/required/tools/varioref.pdf
-2020/02/13 | 71290 | macros/latex-dev/required/tools/verbatim.dtx
-2020/02/13 | 302233 | macros/latex-dev/required/tools/verbatim.pdf
-2020/02/13 | 5966 | macros/latex-dev/required/tools/xr.dtx
-2020/02/13 | 163785 | macros/latex-dev/required/tools/xr.pdf
-2020/02/13 | 17862 | macros/latex-dev/required/tools/xspace.dtx
-2020/02/13 | 238007 | macros/latex-dev/required/tools/xspace.pdf
-2020/02/13 | 6867914 | macros/latex-dev/required/tools.zip
+2020/05/27 | 6654 | macros/latex-dev/base/alltt.dtx
+2020/05/27 | 2892 | macros/latex-dev/base/alltt.ins
+2020/05/27 | 173077 | macros/latex-dev/base/alltt.pdf
+2020/05/27 | 3294 | macros/latex-dev/base/bugs.txt
+2020/05/27 | 220211 | macros/latex-dev/base/cfgguide.pdf
+2020/05/27 | 22457 | macros/latex-dev/base/cfgguide.tex
+2020/05/27 | 42708 | macros/latex-dev/base/changes.old.txt
+2020/05/27 | 350706 | macros/latex-dev/base/changes.txt
+2020/05/27 | 155735 | macros/latex-dev/base/classes.dtx
+2020/05/27 | 4089 | macros/latex-dev/base/classes.ins
+2020/05/27 | 520906 | macros/latex-dev/base/classes.pdf
+2020/05/27 | 372505 | macros/latex-dev/base/clsguide.pdf
+2020/05/27 | 69051 | macros/latex-dev/base/clsguide.tex
+2020/05/27 | 5275 | macros/latex-dev/base/cmextra.ins
+2020/05/27 | 43637 | macros/latex-dev/base/cmfonts.fdd
+2020/05/27 | 4326 | macros/latex-dev/base/cmfonts.ins
+2020/05/27 | 264453 | macros/latex-dev/base/cmfonts.pdf
+2020/05/27 | 216976 | macros/latex-dev/base/cyrguide.pdf
+2020/05/27 | 17496 | macros/latex-dev/base/cyrguide.tex
+2020/05/27 | 203514 | macros/latex-dev/base/doc.dtx
+2020/05/27 | 629536 | macros/latex-dev/base/doc.pdf
+2020/05/27 | 164376 | macros/latex-dev/base/docstrip.dtx
+2020/05/27 | 4223 | macros/latex-dev/base/docstrip.ins
+2020/05/27 | 470217 | macros/latex-dev/base/docstrip.pdf
+2020/05/27 | 4392 | macros/latex-dev/base/ec.ins
+2020/05/27 | 1532114 | macros/latex-dev/base/encguide.pdf
+2020/05/27 | 52814 | macros/latex-dev/base/encguide.tex
+2020/05/27 | 7222 | macros/latex-dev/base/exscale.dtx
+2020/05/27 | 3340 | macros/latex-dev/base/exscale.ins
+2020/05/27 | 195880 | macros/latex-dev/base/exscale.pdf
+2020/05/27 | 23521 | macros/latex-dev/base/fix-cm.dtx
+2020/05/27 | 2894 | macros/latex-dev/base/fix-cm.ins
+2020/05/27 | 262051 | macros/latex-dev/base/fix-cm.pdf
+2020/05/27 | 361810 | macros/latex-dev/base/fntguide.pdf
+2020/05/27 | 74810 | macros/latex-dev/base/fntguide.tex
+2020/05/27 | 60334 | macros/latex-dev/base/fontdef.dtx
+2020/05/27 | 8770 | macros/latex-dev/base/format.ins
+2020/05/27 | 5515 | macros/latex-dev/base/graphpap.dtx
+2020/05/27 | 2894 | macros/latex-dev/base/graphpap.ins
+2020/05/27 | 156280 | macros/latex-dev/base/graphpap.pdf
+2020/05/27 | 2706 | macros/latex-dev/base/idx.tex
+2020/05/27 | 18305 | macros/latex-dev/base/ifthen.dtx
+2020/05/27 | 2890 | macros/latex-dev/base/ifthen.ins
+2020/05/27 | 205205 | macros/latex-dev/base/ifthen.pdf
+2020/05/27 | 106914 | macros/latex-dev/base/inputenc.dtx
+2020/05/27 | 5716 | macros/latex-dev/base/inputenc.ins
+2020/05/27 | 294723 | macros/latex-dev/base/inputenc.pdf
+2020/05/27 | 4080 | macros/latex-dev/base/lablst.tex
+2020/05/27 | 38533 | macros/latex-dev/base/latex209.dtx
+2020/05/27 | 4221 | macros/latex-dev/base/latex209.ins
+2020/05/27 | 232380 | macros/latex-dev/base/latexchanges.pdf
+2020/05/27 | 37980 | macros/latex-dev/base/latexchanges.tex
+2020/05/27 | 32164 | macros/latex-dev/base/latexrelease.dtx
+2020/05/27 | 5354 | macros/latex-dev/base/latexrelease.ins
+2020/05/27 | 246174 | macros/latex-dev/base/latexrelease.pdf
+2020/05/27 | 6715 | macros/latex-dev/base/latexsym.dtx
+2020/05/27 | 5044 | macros/latex-dev/base/latexsym.ins
+2020/05/27 | 192289 | macros/latex-dev/base/latexsym.pdf
+2020/05/27 | 52532 | macros/latex-dev/base/lb2.err
+2020/05/27 | 138223 | macros/latex-dev/base/lb2.pdf
+2020/05/27 | 1381 | macros/latex-dev/base/legal.txt
+2020/05/27 | 62436 | macros/latex-dev/base/letter.dtx
+2020/05/27 | 3374 | macros/latex-dev/base/letter.ins
+2020/05/27 | 305750 | macros/latex-dev/base/letter.pdf
+2020/05/27 | 20434 | macros/latex-dev/base/lgc2.err
+2020/05/27 | 101344 | macros/latex-dev/base/lgc2.pdf
+2020/05/27 | 9068 | macros/latex-dev/base/lppl-1-0.txt
+2020/05/27 | 14341 | macros/latex-dev/base/lppl-1-1.txt
+2020/05/27 | 14421 | macros/latex-dev/base/lppl-1-2.txt
+2020/05/27 | 125828 | macros/latex-dev/base/lppl.pdf
+2020/05/27 | 23386 | macros/latex-dev/base/lppl.tex
+2020/05/27 | 19040 | macros/latex-dev/base/lppl.txt
+2020/05/27 | 4304 | macros/latex-dev/base/ltalloc.dtx
+2020/05/27 | 14440 | macros/latex-dev/base/ltbibl.dtx
+2020/05/27 | 40492 | macros/latex-dev/base/ltboxes.dtx
+2020/05/27 | 104693 | macros/latex-dev/base/ltclass.dtx
+2020/05/27 | 9562 | macros/latex-dev/base/ltcntrl.dtx
+2020/05/27 | 22676 | macros/latex-dev/base/ltcounts.dtx
+2020/05/27 | 57368 | macros/latex-dev/base/ltdefns.dtx
+2020/05/27 | 35162 | macros/latex-dev/base/ltdirchk.dtx
+2020/05/27 | 24016 | macros/latex-dev/base/lterror.dtx
+2020/05/27 | 4649 | macros/latex-dev/base/ltexpl.dtx
+2020/05/27 | 42214 | macros/latex-dev/base/ltfiles.dtx
+2020/05/27 | 40589 | macros/latex-dev/base/ltfinal.dtx
+2020/05/27 | 51314 | macros/latex-dev/base/ltfloat.dtx
+2020/05/27 | 29194 | macros/latex-dev/base/ltfntcmd.dtx
+2020/05/27 | 48875 | macros/latex-dev/base/ltfssaxes.dtx
+2020/05/27 | 79110 | macros/latex-dev/base/ltfssbas.dtx
+2020/05/27 | 10376 | macros/latex-dev/base/ltfsscmp.dtx
+2020/05/27 | 61221 | macros/latex-dev/base/ltfssdcl.dtx
+2020/05/27 | 69854 | macros/latex-dev/base/ltfssini.dtx
+2020/05/27 | 67333 | macros/latex-dev/base/ltfsstrc.dtx
+2020/05/27 | 4952 | macros/latex-dev/base/lthyphen.dtx
+2020/05/27 | 5865 | macros/latex-dev/base/ltidxglo.dtx
+2020/05/27 | 4762 | macros/latex-dev/base/ltlength.dtx
+2020/05/27 | 36154 | macros/latex-dev/base/ltlists.dtx
+2020/05/27 | 3731 | macros/latex-dev/base/ltlogos.dtx
+2020/05/27 | 63444 | macros/latex-dev/base/ltluatex.dtx
+2020/05/27 | 304468 | macros/latex-dev/base/ltluatex.pdf
+2020/05/27 | 38726 | macros/latex-dev/base/ltmath.dtx
+2020/05/27 | 47291 | macros/latex-dev/base/ltmiscen.dtx
+2020/05/27 | 150020 | macros/latex-dev/base/ltnews01.pdf
+2020/05/27 | 5239 | macros/latex-dev/base/ltnews01.tex
+2020/05/27 | 134750 | macros/latex-dev/base/ltnews02.pdf
+2020/05/27 | 5284 | macros/latex-dev/base/ltnews02.tex
+2020/05/27 | 134730 | macros/latex-dev/base/ltnews03.pdf
+2020/05/27 | 5201 | macros/latex-dev/base/ltnews03.tex
+2020/05/27 | 128768 | macros/latex-dev/base/ltnews04.pdf
+2020/05/27 | 5507 | macros/latex-dev/base/ltnews04.tex
+2020/05/27 | 157174 | macros/latex-dev/base/ltnews05.pdf
+2020/05/27 | 5609 | macros/latex-dev/base/ltnews05.tex
+2020/05/27 | 133132 | macros/latex-dev/base/ltnews06.pdf
+2020/05/27 | 5391 | macros/latex-dev/base/ltnews06.tex
+2020/05/27 | 124028 | macros/latex-dev/base/ltnews07.pdf
+2020/05/27 | 5426 | macros/latex-dev/base/ltnews07.tex
+2020/05/27 | 144471 | macros/latex-dev/base/ltnews08.pdf
+2020/05/27 | 5696 | macros/latex-dev/base/ltnews08.tex
+2020/05/27 | 120208 | macros/latex-dev/base/ltnews09.pdf
+2020/05/27 | 5294 | macros/latex-dev/base/ltnews09.tex
+2020/05/27 | 147941 | macros/latex-dev/base/ltnews10.pdf
+2020/05/27 | 5660 | macros/latex-dev/base/ltnews10.tex
+2020/05/27 | 104942 | macros/latex-dev/base/ltnews11.pdf
+2020/05/27 | 5530 | macros/latex-dev/base/ltnews11.tex
+2020/05/27 | 137918 | macros/latex-dev/base/ltnews12.pdf
+2020/05/27 | 5418 | macros/latex-dev/base/ltnews12.tex
+2020/05/27 | 161066 | macros/latex-dev/base/ltnews13.pdf
+2020/05/27 | 6872 | macros/latex-dev/base/ltnews13.tex
+2020/05/27 | 150920 | macros/latex-dev/base/ltnews14.pdf
+2020/05/27 | 6274 | macros/latex-dev/base/ltnews14.tex
+2020/05/27 | 122088 | macros/latex-dev/base/ltnews15.pdf
+2020/05/27 | 5840 | macros/latex-dev/base/ltnews15.tex
+2020/05/27 | 130688 | macros/latex-dev/base/ltnews16.pdf
+2020/05/27 | 5777 | macros/latex-dev/base/ltnews16.tex
+2020/05/27 | 149835 | macros/latex-dev/base/ltnews17.pdf
+2020/05/27 | 8864 | macros/latex-dev/base/ltnews17.tex
+2020/05/27 | 36003 | macros/latex-dev/base/ltnews18.pdf
+2020/05/27 | 1342 | macros/latex-dev/base/ltnews18.tex
+2020/05/27 | 235068 | macros/latex-dev/base/ltnews19.pdf
+2020/05/27 | 4171 | macros/latex-dev/base/ltnews19.tex
+2020/05/27 | 283323 | macros/latex-dev/base/ltnews20.pdf
+2020/05/27 | 7326 | macros/latex-dev/base/ltnews20.tex
+2020/05/27 | 233491 | macros/latex-dev/base/ltnews21.pdf
+2020/05/27 | 9810 | macros/latex-dev/base/ltnews21.tex
+2020/05/27 | 302835 | macros/latex-dev/base/ltnews22.pdf
+2020/05/27 | 10669 | macros/latex-dev/base/ltnews22.tex
+2020/05/27 | 274453 | macros/latex-dev/base/ltnews23.pdf
+2020/05/27 | 10688 | macros/latex-dev/base/ltnews23.tex
+2020/05/27 | 252641 | macros/latex-dev/base/ltnews24.pdf
+2020/05/27 | 12225 | macros/latex-dev/base/ltnews24.tex
+2020/05/27 | 196325 | macros/latex-dev/base/ltnews25.pdf
+2020/05/27 | 5474 | macros/latex-dev/base/ltnews25.tex
+2020/05/27 | 362836 | macros/latex-dev/base/ltnews26.pdf
+2020/05/27 | 10698 | macros/latex-dev/base/ltnews26.tex
+2020/05/27 | 239755 | macros/latex-dev/base/ltnews27.pdf
+2020/05/27 | 5507 | macros/latex-dev/base/ltnews27.tex
+2020/05/27 | 368229 | macros/latex-dev/base/ltnews28.pdf
+2020/05/27 | 14892 | macros/latex-dev/base/ltnews28.tex
+2020/05/27 | 433006 | macros/latex-dev/base/ltnews29.pdf
+2020/05/27 | 18941 | macros/latex-dev/base/ltnews29.tex
+2020/05/27 | 491245 | macros/latex-dev/base/ltnews30.pdf
+2020/05/27 | 23652 | macros/latex-dev/base/ltnews30.tex
+2020/05/27 | 500199 | macros/latex-dev/base/ltnews31.pdf
+2020/05/27 | 30463 | macros/latex-dev/base/ltnews31.tex
+2020/05/27 | 476890 | macros/latex-dev/base/ltnews32.pdf
+2020/05/27 | 23011 | macros/latex-dev/base/ltnews32.tex
+2020/05/27 | 20302 | macros/latex-dev/base/ltnews.cls
+2020/05/27 | 972412 | macros/latex-dev/base/ltnews.pdf
+2020/05/27 | 8100 | macros/latex-dev/base/ltnews.tex
+2020/05/27 | 143457 | macros/latex-dev/base/ltoutenc.dtx
+2020/05/27 | 3369 | macros/latex-dev/base/ltoutenc.ins
+2020/05/27 | 175355 | macros/latex-dev/base/ltoutput.dtx
+2020/05/27 | 11443 | macros/latex-dev/base/ltpage.dtx
+2020/05/27 | 2733 | macros/latex-dev/base/ltpageno.dtx
+2020/05/27 | 5854 | macros/latex-dev/base/ltpar.dtx
+2020/05/27 | 50893 | macros/latex-dev/base/ltpictur.dtx
+2020/05/27 | 47759 | macros/latex-dev/base/ltplain.dtx
+2020/05/27 | 31879 | macros/latex-dev/base/ltsect.dtx
+2020/05/27 | 45246 | macros/latex-dev/base/ltspace.dtx
+2020/05/27 | 47704 | macros/latex-dev/base/lttab.dtx
+2020/05/27 | 88411 | macros/latex-dev/base/lttextcomp.dtx
+2020/05/27 | 8737 | macros/latex-dev/base/ltthm.dtx
+2020/05/27 | 10365 | macros/latex-dev/base/ltvers.dtx
+2020/05/27 | 191528 | macros/latex-dev/base/ltx3info.pdf
+2020/05/27 | 18300 | macros/latex-dev/base/ltx3info.tex
+2020/05/27 | 27124 | macros/latex-dev/base/ltxcheck.tex
+2020/05/27 | 18558 | macros/latex-dev/base/ltxdoc.dtx
+2020/05/27 | 215600 | macros/latex-dev/base/ltxdoc.pdf
+2020/05/27 | 7526 | macros/latex-dev/base/ltxguide.cls
+2020/05/27 | 15474 | macros/latex-dev/base/ltxref.dtx
+2020/05/27 | 10606 | macros/latex-dev/base/makeindx.dtx
+2020/05/27 | 3436 | macros/latex-dev/base/makeindx.ins
+2020/05/27 | 160673 | macros/latex-dev/base/makeindx.pdf
+2020/05/27 | 10414 | macros/latex-dev/base/manifest.txt
+2020/05/27 | 12946 | macros/latex-dev/base/manual.err
+2020/05/27 | 151354 | macros/latex-dev/base/manual.pdf
+2020/05/27 | 1938 | macros/latex-dev/base/minimal.cls
+2020/05/27 | 220384 | macros/latex-dev/base/modguide.pdf
+2020/05/27 | 16234 | macros/latex-dev/base/modguide.tex
+2020/05/27 | 4256 | macros/latex-dev/base/newdc.ins
+2020/05/27 | 6363 | macros/latex-dev/base/newlfont.dtx
+2020/05/27 | 18407 | macros/latex-dev/base/nfssfont.dtx
+2020/05/27 | 2895 | macros/latex-dev/base/nfssfont.ins
+2020/05/27 | 202429 | macros/latex-dev/base/nfssfont.pdf
+2020/05/27 | 3962 | macros/latex-dev/base/olddc.ins
+2020/05/27 | 8632 | macros/latex-dev/base/oldlfont.dtx
+2020/05/27 | 9374 | macros/latex-dev/base/preload.dtx
+2020/05/27 | 13305 | macros/latex-dev/base/proc.dtx
+2020/05/27 | 3403 | macros/latex-dev/base/proc.ins
+2020/05/27 | 216899 | macros/latex-dev/base/proc.pdf
+2020/05/27 | 3514 | macros/latex-dev/base/README.md
+2020/05/27 | 7200 | macros/latex-dev/base/sample2e.tex
+2020/05/27 | 89720 | macros/latex-dev/base/slides.dtx
+2020/05/27 | 6764 | macros/latex-dev/base/slides.ins
+2020/05/27 | 351660 | macros/latex-dev/base/slides.pdf
+2020/05/27 | 15701 | macros/latex-dev/base/slifonts.fdd
+2020/05/27 | 214708 | macros/latex-dev/base/slifonts.pdf
+2020/05/27 | 1694 | macros/latex-dev/base/small2e.tex
+2020/05/27 | 3182847 | macros/latex-dev/base/source2e.pdf
+2020/05/27 | 14673 | macros/latex-dev/base/source2e.tex
+2020/05/27 | 9401 | macros/latex-dev/base/syntonly.dtx
+2020/05/27 | 2898 | macros/latex-dev/base/syntonly.ins
+2020/05/27 | 181389 | macros/latex-dev/base/syntonly.pdf
+2020/05/27 | 12521 | macros/latex-dev/base/testpage.tex
+2020/05/27 | 2738 | macros/latex-dev/base/tex2.txt
+2020/05/27 | 8493 | macros/latex-dev/base/texpert.txt
+2020/05/27 | 172216 | macros/latex-dev/base/tlc2.err
+2020/05/27 | 164949 | macros/latex-dev/base/tlc2.pdf
+2020/05/27 | 12120 | macros/latex-dev/base/tulm.fdd
+2020/05/27 | 3783 | macros/latex-dev/base/tulm.ins
+2020/05/27 | 156534 | macros/latex-dev/base/tulm.pdf
+2020/05/27 | 3183 | macros/latex-dev/base/unpack.ins
+2020/05/27 | 398989 | macros/latex-dev/base/usrguide.pdf
+2020/05/27 | 68428 | macros/latex-dev/base/usrguide.tex
+2020/05/27 | 89386 | macros/latex-dev/base/utf8ienc.dtx
+2020/05/27 | 330713 | macros/latex-dev/base/utf8ienc.pdf
+2020/05/27 | 10053 | macros/latex-dev/base/webcomp.err
+2020/05/27 | 136153 | macros/latex-dev/base/webcomp.pdf
+2020/05/27 | 22552209 | macros/latex-dev/base.zip
+2020/05/27 | 8654 | macros/latex-dev/required/amsmath/amsbsy.dtx
+2020/05/27 | 1466 | macros/latex-dev/required/amsmath/amsbsy.ins
+2020/05/27 | 161323 | macros/latex-dev/required/amsmath/amsbsy.pdf
+2020/05/27 | 11291 | macros/latex-dev/required/amsmath/amscd.dtx
+2020/05/27 | 1464 | macros/latex-dev/required/amsmath/amscd.ins
+2020/05/27 | 165742 | macros/latex-dev/required/amsmath/amscd.pdf
+2020/05/27 | 5323 | macros/latex-dev/required/amsmath/ams-external.txt
+2020/05/27 | 13449 | macros/latex-dev/required/amsmath/amsgen.dtx
+2020/05/27 | 1466 | macros/latex-dev/required/amsmath/amsgen.ins
+2020/05/27 | 164340 | macros/latex-dev/required/amsmath/amsgen.pdf
+2020/05/27 | 5860 | macros/latex-dev/required/amsmath/ams-internal.txt
+2020/05/27 | 475924 | macros/latex-dev/required/amsmath/amsldoc.pdf
+2020/05/27 | 104677 | macros/latex-dev/required/amsmath/amsldoc.tex
+2020/05/27 | 85087 | macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty
+2020/05/27 | 224684 | macros/latex-dev/required/amsmath/amsmath.dtx
+2020/05/27 | 1480 | macros/latex-dev/required/amsmath/amsmath.ins
+2020/05/27 | 383566 | macros/latex-dev/required/amsmath/amsmath.pdf
+2020/05/27 | 9202 | macros/latex-dev/required/amsmath/amsopn.dtx
+2020/05/27 | 1466 | macros/latex-dev/required/amsmath/amsopn.ins
+2020/05/27 | 129158 | macros/latex-dev/required/amsmath/amsopn.pdf
+2020/05/27 | 69720 | macros/latex-dev/required/amsmath/amstex.sty
+2020/05/27 | 11405 | macros/latex-dev/required/amsmath/amstext.dtx
+2020/05/27 | 1468 | macros/latex-dev/required/amsmath/amstext.ins
+2020/05/27 | 194266 | macros/latex-dev/required/amsmath/amstext.pdf
+2020/05/27 | 4343 | macros/latex-dev/required/amsmath/amsxtra.dtx
+2020/05/27 | 1468 | macros/latex-dev/required/amsmath/amsxtra.ins
+2020/05/27 | 104540 | macros/latex-dev/required/amsmath/amsxtra.pdf
+2020/05/27 | 5684 | macros/latex-dev/required/amsmath/changes.txt
+2020/05/27 | 22605 | macros/latex-dev/required/amsmath/diffs-m.txt
+2020/05/27 | 369 | macros/latex-dev/required/amsmath/manifest.txt
+2020/05/27 | 2726 | macros/latex-dev/required/amsmath/README.md
+2020/05/27 | 101292 | macros/latex-dev/required/amsmath/subeqn.pdf
+2020/05/27 | 6440 | macros/latex-dev/required/amsmath/subeqn.tex
+2020/05/27 | 130587 | macros/latex-dev/required/amsmath/technote.pdf
+2020/05/27 | 12005 | macros/latex-dev/required/amsmath/technote.tex
+2020/05/27 | 428947 | macros/latex-dev/required/amsmath/testmath.pdf
+2020/05/27 | 82371 | macros/latex-dev/required/amsmath/testmath.tex
+2020/05/27 | 2612146 | macros/latex-dev/required/amsmath.zip
+2020/05/27 | 15737 | macros/latex-dev/required/graphics/cat.eps
+2020/05/27 | 32057 | macros/latex-dev/required/graphics/changes.txt
+2020/05/27 | 31608 | macros/latex-dev/required/graphics/color.dtx
+2020/05/27 | 200935 | macros/latex-dev/required/graphics/color.pdf
+2020/05/27 | 50759 | macros/latex-dev/required/graphics/drivers.dtx
+2020/05/27 | 263724 | macros/latex-dev/required/graphics/drivers.pdf
+2020/05/27 | 4062 | macros/latex-dev/required/graphics/epsfig.dtx
+2020/05/27 | 154485 | macros/latex-dev/required/graphics/epsfig.pdf
+2020/05/27 | 15430 | macros/latex-dev/required/graphics/graphics-2017-06-25.sty
+2020/05/27 | 2994 | macros/latex-dev/required/graphics/graphics-drivers.ins
+2020/05/27 | 66967 | macros/latex-dev/required/graphics/graphics.dtx
+2020/05/27 | 1128 | macros/latex-dev/required/graphics/graphics.ins
+2020/05/27 | 284646 | macros/latex-dev/required/graphics/graphics.pdf
+2020/05/27 | 32247 | macros/latex-dev/required/graphics/graphicx.dtx
+2020/05/27 | 232495 | macros/latex-dev/required/graphics/graphicx.pdf
+2020/05/27 | 310565 | macros/latex-dev/required/graphics/grfguide.pdf
+2020/05/27 | 39395 | macros/latex-dev/required/graphics/grfguide.tex
+2020/05/27 | 13799 | macros/latex-dev/required/graphics/keyval.dtx
+2020/05/27 | 222525 | macros/latex-dev/required/graphics/keyval.pdf
+2020/05/27 | 3814 | macros/latex-dev/required/graphics/lscape.dtx
+2020/05/27 | 150104 | macros/latex-dev/required/graphics/lscape.pdf
+2020/05/27 | 2092 | macros/latex-dev/required/graphics/README.md
+2020/05/27 | 20994 | macros/latex-dev/required/graphics/rotating.dtx
+2020/05/27 | 245867 | macros/latex-dev/required/graphics/rotating.pdf
+2020/05/27 | 162248 | macros/latex-dev/required/graphics/rotex.pdf
+2020/05/27 | 14575 | macros/latex-dev/required/graphics/rotex.tex
+2020/05/27 | 10651 | macros/latex-dev/required/graphics/trig.dtx
+2020/05/27 | 191692 | macros/latex-dev/required/graphics/trig.pdf
+2020/05/27 | 2500887 | macros/latex-dev/required/graphics.zip
+2020/05/27 | 14078 | macros/latex-dev/required/tools/afterpage.dtx
+2020/05/27 | 2540 | macros/latex-dev/required/tools/afterpage.ins
+2020/05/27 | 189848 | macros/latex-dev/required/tools/afterpage.pdf
+2020/05/27 | 11750 | macros/latex-dev/required/tools/array-2016-10-06.sty
+2020/05/27 | 12560 | macros/latex-dev/required/tools/array-2020-02-10.sty
+2020/05/27 | 124717 | macros/latex-dev/required/tools/array.dtx
+2020/05/27 | 481282 | macros/latex-dev/required/tools/array.pdf
+2020/05/27 | 59410 | macros/latex-dev/required/tools/bm.dtx
+2020/05/27 | 2526 | macros/latex-dev/required/tools/bm.ins
+2020/05/27 | 306775 | macros/latex-dev/required/tools/bm.pdf
+2020/05/27 | 53174 | macros/latex-dev/required/tools/calc.dtx
+2020/05/27 | 340877 | macros/latex-dev/required/tools/calc.pdf
+2020/05/27 | 56717 | macros/latex-dev/required/tools/changes.txt
+2020/05/27 | 12715 | macros/latex-dev/required/tools/dcolumn.dtx
+2020/05/27 | 199221 | macros/latex-dev/required/tools/dcolumn.pdf
+2020/05/27 | 6795 | macros/latex-dev/required/tools/delarray.dtx
+2020/05/27 | 183432 | macros/latex-dev/required/tools/delarray.pdf
+2020/05/27 | 10650 | macros/latex-dev/required/tools/enumerate.dtx
+2020/05/27 | 199049 | macros/latex-dev/required/tools/enumerate.pdf
+2020/05/27 | 4965 | macros/latex-dev/required/tools/fileerr.dtx
+2020/05/27 | 179548 | macros/latex-dev/required/tools/fileerr.pdf
+2020/05/27 | 10777 | macros/latex-dev/required/tools/fontsmpl.dtx
+2020/05/27 | 138025 | macros/latex-dev/required/tools/fontsmpl.pdf
+2020/05/27 | 39702 | macros/latex-dev/required/tools/ftnright.dtx
+2020/05/27 | 346379 | macros/latex-dev/required/tools/ftnright.pdf
+2020/05/27 | 11154 | macros/latex-dev/required/tools/hhline.dtx
+2020/05/27 | 175678 | macros/latex-dev/required/tools/hhline.pdf
+2020/05/27 | 2226 | macros/latex-dev/required/tools/indentfirst.dtx
+2020/05/27 | 144779 | macros/latex-dev/required/tools/indentfirst.pdf
+2020/05/27 | 30962 | macros/latex-dev/required/tools/layout.dtx
+2020/05/27 | 246931 | macros/latex-dev/required/tools/layout.pdf
+2020/05/27 | 72225 | macros/latex-dev/required/tools/longtable.dtx
+2020/05/27 | 2540 | macros/latex-dev/required/tools/longtable.ins
+2020/05/27 | 349927 | macros/latex-dev/required/tools/longtable.pdf
+2020/05/27 | 3281 | macros/latex-dev/required/tools/manifest.txt
+2020/05/27 | 29714 | macros/latex-dev/required/tools/multicol-2017-04-11.sty
+2020/05/27 | 182355 | macros/latex-dev/required/tools/multicol.dtx
+2020/05/27 | 2578 | macros/latex-dev/required/tools/multicol.ins
+2020/05/27 | 491025 | macros/latex-dev/required/tools/multicol.pdf
+2020/05/27 | 8982 | macros/latex-dev/required/tools/rawfonts.dtx
+2020/05/27 | 135688 | macros/latex-dev/required/tools/rawfonts.pdf
+2020/05/27 | 1666 | macros/latex-dev/required/tools/README.md
+2020/05/27 | 9494 | macros/latex-dev/required/tools/shellesc.dtx
+2020/05/27 | 169757 | macros/latex-dev/required/tools/shellesc.pdf
+2020/05/27 | 29571 | macros/latex-dev/required/tools/showkeys.dtx
+2020/05/27 | 242786 | macros/latex-dev/required/tools/showkeys.pdf
+2020/05/27 | 5797 | macros/latex-dev/required/tools/somedefs.dtx
+2020/05/27 | 156511 | macros/latex-dev/required/tools/somedefs.pdf
+2020/05/27 | 35881 | macros/latex-dev/required/tools/tabularx.dtx
+2020/05/27 | 2537 | macros/latex-dev/required/tools/tabularx.ins
+2020/05/27 | 254205 | macros/latex-dev/required/tools/tabularx.pdf
+2020/05/27 | 43454 | macros/latex-dev/required/tools/theorem.dtx
+2020/05/27 | 322937 | macros/latex-dev/required/tools/theorem.pdf
+2020/05/27 | 5682 | macros/latex-dev/required/tools/tools.ins
+2020/05/27 | 68288 | macros/latex-dev/required/tools/tools-overview.pdf
+2020/05/27 | 5213 | macros/latex-dev/required/tools/tools-overview.tex
+2020/05/27 | 24649 | macros/latex-dev/required/tools/trace.dtx
+2020/05/27 | 212730 | macros/latex-dev/required/tools/trace.pdf
+2020/05/27 | 33864 | macros/latex-dev/required/tools/varioref-2016-02-16.sty
+2020/05/27 | 103573 | macros/latex-dev/required/tools/varioref.dtx
+2020/05/27 | 2533 | macros/latex-dev/required/tools/varioref.ins
+2020/05/27 | 354736 | macros/latex-dev/required/tools/varioref.pdf
+2020/05/27 | 71290 | macros/latex-dev/required/tools/verbatim.dtx
+2020/05/27 | 302233 | macros/latex-dev/required/tools/verbatim.pdf
+2020/05/27 | 6236 | macros/latex-dev/required/tools/xr.dtx
+2020/05/27 | 163612 | macros/latex-dev/required/tools/xr.pdf
+2020/05/27 | 17862 | macros/latex-dev/required/tools/xspace.dtx
+2020/05/27 | 238007 | macros/latex-dev/required/tools/xspace.pdf
+2020/05/27 | 6871586 | macros/latex-dev/required/tools.zip
1999/05/03 | 8998 | macros/latex/exptl/delimtxt/delimtxt.dtx
1999/03/28 | 143 | macros/latex/exptl/delimtxt/delimtxt.ins
2006/03/21 | 55074 | macros/latex/exptl/delimtxt/delimtxt.pdf
@@ -208881,36 +208891,36 @@
2019/12/23 | 269914 | macros/latex/exptl/thmtools.zip
1999/03/24 | 1506 | macros/latex/packages/index.html
1999/03/24 | 877 | macros/latex/packages/README
-2010/08/11 | 28675 | macros/latex/required/amscls/amsalpha.bst
+2010/08/12 | 28675 | macros/latex/required/amscls/amsalpha.bst
2014/07/12 | 19942 | macros/latex/required/amscls/amsbooka.dtx
-2014/07/11 | 2043 | macros/latex/required/amscls/amsbooka.ins
-2017/10/31 | 185557 | macros/latex/required/amscls/amsclass.dtx
-2017/10/31 | 2238 | macros/latex/required/amscls/amsclass.ins
+2014/07/12 | 2043 | macros/latex/required/amscls/amsbooka.ins
+2020/05/27 | 185302 | macros/latex/required/amscls/amsclass.dtx
+2020/05/27 | 1902 | macros/latex/required/amscls/amsclass.ins
2009/08/20 | 39492 | macros/latex/required/amscls/amsdtx.dtx
2009/08/20 | 2085 | macros/latex/required/amscls/amsdtx.ins
2007/09/26 | 7111 | macros/latex/required/amscls/amsmidx.dtx
2014/07/25 | 2017 | macros/latex/required/amscls/amsmidx.ins
-2010/08/11 | 25798 | macros/latex/required/amscls/amsplain.bst
-2010/05/10 | 7364 | macros/latex/required/amscls/doc/00LICENSE.txt
-2014/07/24 | 1982 | macros/latex/required/amscls/doc/amsart-template.tex
+2010/08/12 | 25798 | macros/latex/required/amscls/amsplain.bst
+2010/05/11 | 7364 | macros/latex/required/amscls/doc/00LICENSE.txt
+2014/07/25 | 1982 | macros/latex/required/amscls/doc/amsart-template.tex
2014/07/12 | 172376 | macros/latex/required/amscls/doc/amsbooka.pdf
-2014/07/24 | 3122 | macros/latex/required/amscls/doc/amsbook-template.tex
-2017/10/31 | 373922 | macros/latex/required/amscls/doc/amsclass.pdf
+2014/07/25 | 3122 | macros/latex/required/amscls/doc/amsbook-template.tex
+2020/05/26 | 340415 | macros/latex/required/amscls/doc/amsclass.pdf
2009/08/20 | 253639 | macros/latex/required/amscls/doc/amsdtx.pdf
-2007/09/25 | 74456 | macros/latex/required/amscls/doc/amsmidx.pdf
-2014/07/24 | 1986 | macros/latex/required/amscls/doc/amsproc-template.tex
+2007/09/26 | 74456 | macros/latex/required/amscls/doc/amsmidx.pdf
+2014/07/25 | 1986 | macros/latex/required/amscls/doc/amsproc-template.tex
2017/09/19 | 177495 | macros/latex/required/amscls/doc/amsthdoc.pdf
2017/09/19 | 33700 | macros/latex/required/amscls/doc/amsthdoc.tex
-2017/12/14 | 14811 | macros/latex/required/amscls/doc/diffs-c.txt
+2020/05/27 | 15003 | macros/latex/required/amscls/doc/diffs-c.txt
2017/12/14 | 4637 | macros/latex/required/amscls/doc/install.txt
2017/12/14 | 373 | macros/latex/required/amscls/doc/manifest.txt
2008/03/26 | 73682 | macros/latex/required/amscls/doc/thmtest.pdf
-2004/08/02 | 7403 | macros/latex/required/amscls/doc/thmtest.tex
+2004/08/03 | 7403 | macros/latex/required/amscls/doc/thmtest.tex
2008/03/18 | 62327 | macros/latex/required/amscls/doc/upref.pdf
-2017/12/18 | 7701 | macros/latex/required/amscls/README
-2007/03/14 | 5281 | macros/latex/required/amscls/upref.dtx
+2020/05/26 | 7794 | macros/latex/required/amscls/README
+2007/03/15 | 5281 | macros/latex/required/amscls/upref.dtx
2014/07/25 | 1999 | macros/latex/required/amscls/upref.ins
-2017/12/19 | 1282746 | macros/latex/required/amscls.zip
+2020/05/27 | 1208067 | macros/latex/required/amscls.zip
2020/01/31 | 8654 | macros/latex/required/amsmath/amsbsy.dtx
2020/01/31 | 1466 | macros/latex/required/amsmath/amsbsy.ins
2020/02/02 | 161330 | macros/latex/required/amsmath/amsbsy.pdf
@@ -209643,11 +209653,12 @@
2019/06/18 | 594 | macros/luatex/latex/bezierplot/bezierplot.sty
2019/06/18 | 741 | macros/luatex/latex/bezierplot/README
2019/06/18 | 261629 | macros/luatex/latex/bezierplot.zip
-2020/05/20 | 76926 | macros/luatex/latex/cloze/cloze.dtx
-2020/05/20 | 2244 | macros/luatex/latex/cloze/cloze.ins
-2020/05/20 | 257712 | macros/luatex/latex/cloze/cloze.pdf
-2020/05/20 | 1349 | macros/luatex/latex/cloze/README
-2020/05/20 | 259293 | macros/luatex/latex/cloze.zip
+2020/05/27 | 50280 | macros/luatex/latex/cloze/cloze.dtx
+2020/05/27 | 2113 | macros/luatex/latex/cloze/cloze.ins
+2020/05/27 | 27514 | macros/luatex/latex/cloze/cloze.lua
+2020/05/27 | 318609 | macros/luatex/latex/cloze/cloze.pdf
+2020/05/27 | 2451 | macros/luatex/latex/cloze/README.md
+2020/05/27 | 321257 | macros/luatex/latex/cloze.zip
2019/06/08 | 78828 | macros/luatex/latex/combofont/combofont.pdf
2019/06/08 | 3281 | macros/luatex/latex/combofont/combofont.sty
2019/06/08 | 15301 | macros/luatex/latex/combofont/combofont-test-fira-math.pdf
@@ -242620,94 +242631,94 @@
1994/05/11 | 11989 | support/bbfig/bb.ps
1994/05/11 | 462 | support/bbfig/installation
2006/03/12 | 6604 | support/bbfig.zip
-2020/03/23 | 16593 | support/bib2gls/bib2gls.1
-2020/03/23 | 726572 | support/bib2gls/bib2gls-begin.pdf
-2020/03/23 | 44445 | support/bib2gls/bib2gls-en.xml
-2020/03/23 | 275528 | support/bib2gls/bib2gls.jar
-2020/03/23 | 4692176 | support/bib2gls/bib2gls.pdf
-2020/03/23 | 630 | support/bib2gls/bib2gls.sh
-2020/03/23 | 11469 | support/bib2gls/CHANGES
-2020/03/23 | 9614 | support/bib2gls/convertgls2bib.1
-2020/03/23 | 39256 | support/bib2gls/convertgls2bib.jar
-2020/03/23 | 404 | support/bib2gls/convertgls2bib.sh
-2020/03/23 | 1603 | support/bib2gls/examples/animals.bib
-2020/03/23 | 1219 | support/bib2gls/examples/bacteria.bib
-2020/03/23 | 1031 | support/bib2gls/examples/baseunits.bib
-2020/03/23 | 2994 | support/bib2gls/examples/bigmathsymbols.bib
-2020/03/23 | 576 | support/bib2gls/examples/binaryoperators.bib
-2020/03/23 | 3496 | support/bib2gls/examples/books.bib
-2020/03/23 | 2585 | support/bib2gls/examples/chemicalformula.bib
-2020/03/23 | 1371 | support/bib2gls/examples/citations.bib
-2020/03/23 | 2392 | support/bib2gls/examples/constants.bib
-2020/03/23 | 1580 | support/bib2gls/examples/derivedunits.bib
-2020/03/23 | 5455 | support/bib2gls/examples/films.bib
-2020/03/23 | 338 | support/bib2gls/examples/interpret-preamble2.bib
-2020/03/23 | 328 | support/bib2gls/examples/interpret-preamble.bib
-2020/03/23 | 1772 | support/bib2gls/examples/markuplanguages.bib
-2020/03/23 | 3211 | support/bib2gls/examples/mathgreek.bib
-2020/03/23 | 3672 | support/bib2gls/examples/mathsobjects.bib
-2020/03/23 | 1265 | support/bib2gls/examples/mathsrelations.bib
-2020/03/23 | 2419 | support/bib2gls/examples/minerals.bib
-2020/03/23 | 2301 | support/bib2gls/examples/miscsymbols.bib
-2020/03/23 | 328 | support/bib2gls/examples/no-interpret-preamble.bib
-2020/03/23 | 4446 | support/bib2gls/examples/people.bib
-2020/03/23 | 49007 | support/bib2gls/examples/sample-authors.pdf
-2020/03/23 | 1506 | support/bib2gls/examples/sample-authors.tex
-2020/03/23 | 50457 | support/bib2gls/examples/sample-bacteria.pdf
-2020/03/23 | 1382 | support/bib2gls/examples/sample-bacteria.tex
-2020/03/23 | 50249 | support/bib2gls/examples/sample-chemical.pdf
-2020/03/23 | 1291 | support/bib2gls/examples/sample-chemical.tex
-2020/03/23 | 47241 | support/bib2gls/examples/sample-citations.pdf
-2020/03/23 | 1941 | support/bib2gls/examples/sample-citations.tex
-2020/03/23 | 89380 | support/bib2gls/examples/sample-constants.pdf
-2020/03/23 | 1378 | support/bib2gls/examples/sample-constants.tex
-2020/03/23 | 49656 | support/bib2gls/examples/sample-hierarchical.pdf
-2020/03/23 | 986 | support/bib2gls/examples/sample-hierarchical.tex
-2020/03/23 | 56324 | support/bib2gls/examples/sample-markuplanguages.pdf
-2020/03/23 | 1396 | support/bib2gls/examples/sample-markuplanguages.tex
-2020/03/23 | 110925 | support/bib2gls/examples/sample-maths.pdf
-2020/03/23 | 3129 | support/bib2gls/examples/sample-maths.tex
-2020/03/23 | 160836 | support/bib2gls/examples/sample-media.pdf
-2020/03/23 | 1734 | support/bib2gls/examples/sample-media.tex
-2020/03/23 | 103819 | support/bib2gls/examples/sample-msymbols.pdf
-2020/03/23 | 780 | support/bib2gls/examples/sample-msymbols.tex
-2020/03/23 | 243149 | support/bib2gls/examples/sample-multi1.pdf
-2020/03/23 | 5520 | support/bib2gls/examples/sample-multi1.tex
-2020/03/23 | 318033 | support/bib2gls/examples/sample-multi2.pdf
-2020/03/23 | 12775 | support/bib2gls/examples/sample-multi2.tex
-2020/03/23 | 49664 | support/bib2gls/examples/sample-nested.pdf
-2020/03/23 | 1344 | support/bib2gls/examples/sample-nested.tex
-2020/03/23 | 47742 | support/bib2gls/examples/sample-people.pdf
-2020/03/23 | 2367 | support/bib2gls/examples/sample-people.tex
-2020/03/23 | 67001 | support/bib2gls/examples/sample-textsymbols2.pdf
-2020/03/23 | 913 | support/bib2gls/examples/sample-textsymbols2.tex
-2020/03/23 | 69791 | support/bib2gls/examples/sample-textsymbols.pdf
-2020/03/23 | 1207 | support/bib2gls/examples/sample-textsymbols.tex
-2020/03/23 | 53003 | support/bib2gls/examples/sample-units1.pdf
-2020/03/23 | 1070 | support/bib2gls/examples/sample-units1.tex
-2020/03/23 | 54745 | support/bib2gls/examples/sample-units2.pdf
-2020/03/23 | 1234 | support/bib2gls/examples/sample-units2.tex
-2020/03/23 | 41132 | support/bib2gls/examples/sample-units3.pdf
-2020/03/23 | 1740 | support/bib2gls/examples/sample-units3.tex
-2020/03/23 | 23838 | support/bib2gls/examples/sample-usergroups.pdf
-2020/03/23 | 3254 | support/bib2gls/examples/sample-usergroups.tex
-2020/03/23 | 640 | support/bib2gls/examples/terms.bib
-2020/03/23 | 266 | support/bib2gls/examples/topics.bib
-2020/03/23 | 557 | support/bib2gls/examples/unaryoperators.bib
-2020/03/23 | 4053 | support/bib2gls/examples/usergroups.bib
-2020/03/23 | 1091 | support/bib2gls/examples/vegetables.bib
-2020/03/23 | 5852 | support/bib2gls/README.md
-2020/03/23 | 241545 | support/bib2gls/src/bib2gls-begin.tex
-2020/03/23 | 511470 | support/bib2gls/src/bib2gls.bib
-2020/03/23 | 4078 | support/bib2gls/src/bib2gls-cite.bib
-2020/03/23 | 9356 | support/bib2gls/src/bib2gls.pod
-2020/03/23 | 198175 | support/bib2gls/src/bib2gls-src.zip
-2020/03/23 | 959952 | support/bib2gls/src/bib2gls.tex
-2020/03/23 | 4045 | support/bib2gls/src/convertgls2bib.pod
-2020/03/23 | 32329 | support/bib2gls/src/gls2bib-src.zip
-2020/03/23 | 833840 | support/bib2gls/src/texparser-src.zip
-2020/03/23 | 993572 | support/bib2gls/texparserlib.jar
-2020/03/24 | 9627241 | support/bib2gls.zip
+2020/05/27 | 16593 | support/bib2gls/bib2gls.1
+2020/05/27 | 726550 | support/bib2gls/bib2gls-begin.pdf
+2020/05/27 | 44445 | support/bib2gls/bib2gls-en.xml
+2020/05/27 | 275529 | support/bib2gls/bib2gls.jar
+2020/05/27 | 4692754 | support/bib2gls/bib2gls.pdf
+2020/05/27 | 630 | support/bib2gls/bib2gls.sh
+2020/05/27 | 11595 | support/bib2gls/CHANGES
+2020/05/27 | 9614 | support/bib2gls/convertgls2bib.1
+2020/05/27 | 39257 | support/bib2gls/convertgls2bib.jar
+2020/05/27 | 404 | support/bib2gls/convertgls2bib.sh
+2020/05/27 | 1603 | support/bib2gls/examples/animals.bib
+2020/05/27 | 1219 | support/bib2gls/examples/bacteria.bib
+2020/05/27 | 1031 | support/bib2gls/examples/baseunits.bib
+2020/05/27 | 2994 | support/bib2gls/examples/bigmathsymbols.bib
+2020/05/27 | 576 | support/bib2gls/examples/binaryoperators.bib
+2020/05/27 | 3496 | support/bib2gls/examples/books.bib
+2020/05/27 | 2585 | support/bib2gls/examples/chemicalformula.bib
+2020/05/27 | 1371 | support/bib2gls/examples/citations.bib
+2020/05/27 | 2392 | support/bib2gls/examples/constants.bib
+2020/05/27 | 1580 | support/bib2gls/examples/derivedunits.bib
+2020/05/27 | 5455 | support/bib2gls/examples/films.bib
+2020/05/27 | 338 | support/bib2gls/examples/interpret-preamble2.bib
+2020/05/27 | 328 | support/bib2gls/examples/interpret-preamble.bib
+2020/05/27 | 1772 | support/bib2gls/examples/markuplanguages.bib
+2020/05/27 | 3211 | support/bib2gls/examples/mathgreek.bib
+2020/05/27 | 3672 | support/bib2gls/examples/mathsobjects.bib
+2020/05/27 | 1265 | support/bib2gls/examples/mathsrelations.bib
+2020/05/27 | 2419 | support/bib2gls/examples/minerals.bib
+2020/05/27 | 2301 | support/bib2gls/examples/miscsymbols.bib
+2020/05/27 | 328 | support/bib2gls/examples/no-interpret-preamble.bib
+2020/05/27 | 4446 | support/bib2gls/examples/people.bib
+2020/05/27 | 49018 | support/bib2gls/examples/sample-authors.pdf
+2020/05/27 | 1506 | support/bib2gls/examples/sample-authors.tex
+2020/05/27 | 50469 | support/bib2gls/examples/sample-bacteria.pdf
+2020/05/27 | 1382 | support/bib2gls/examples/sample-bacteria.tex
+2020/05/27 | 50259 | support/bib2gls/examples/sample-chemical.pdf
+2020/05/27 | 1291 | support/bib2gls/examples/sample-chemical.tex
+2020/05/27 | 47253 | support/bib2gls/examples/sample-citations.pdf
+2020/05/27 | 1941 | support/bib2gls/examples/sample-citations.tex
+2020/05/27 | 89393 | support/bib2gls/examples/sample-constants.pdf
+2020/05/27 | 1378 | support/bib2gls/examples/sample-constants.tex
+2020/05/27 | 49667 | support/bib2gls/examples/sample-hierarchical.pdf
+2020/05/27 | 986 | support/bib2gls/examples/sample-hierarchical.tex
+2020/05/27 | 56336 | support/bib2gls/examples/sample-markuplanguages.pdf
+2020/05/27 | 1396 | support/bib2gls/examples/sample-markuplanguages.tex
+2020/05/27 | 110937 | support/bib2gls/examples/sample-maths.pdf
+2020/05/27 | 3129 | support/bib2gls/examples/sample-maths.tex
+2020/05/27 | 160849 | support/bib2gls/examples/sample-media.pdf
+2020/05/27 | 1734 | support/bib2gls/examples/sample-media.tex
+2020/05/27 | 103831 | support/bib2gls/examples/sample-msymbols.pdf
+2020/05/27 | 780 | support/bib2gls/examples/sample-msymbols.tex
+2020/05/27 | 243161 | support/bib2gls/examples/sample-multi1.pdf
+2020/05/27 | 5520 | support/bib2gls/examples/sample-multi1.tex
+2020/05/27 | 318047 | support/bib2gls/examples/sample-multi2.pdf
+2020/05/27 | 12775 | support/bib2gls/examples/sample-multi2.tex
+2020/05/27 | 49676 | support/bib2gls/examples/sample-nested.pdf
+2020/05/27 | 1344 | support/bib2gls/examples/sample-nested.tex
+2020/05/27 | 47754 | support/bib2gls/examples/sample-people.pdf
+2020/05/27 | 2367 | support/bib2gls/examples/sample-people.tex
+2020/05/27 | 67011 | support/bib2gls/examples/sample-textsymbols2.pdf
+2020/05/27 | 913 | support/bib2gls/examples/sample-textsymbols2.tex
+2020/05/27 | 69804 | support/bib2gls/examples/sample-textsymbols.pdf
+2020/05/27 | 1207 | support/bib2gls/examples/sample-textsymbols.tex
+2020/05/27 | 53015 | support/bib2gls/examples/sample-units1.pdf
+2020/05/27 | 1070 | support/bib2gls/examples/sample-units1.tex
+2020/05/27 | 54758 | support/bib2gls/examples/sample-units2.pdf
+2020/05/27 | 1234 | support/bib2gls/examples/sample-units2.tex
+2020/05/27 | 41145 | support/bib2gls/examples/sample-units3.pdf
+2020/05/27 | 1740 | support/bib2gls/examples/sample-units3.tex
+2020/05/27 | 23840 | support/bib2gls/examples/sample-usergroups.pdf
+2020/05/27 | 3254 | support/bib2gls/examples/sample-usergroups.tex
+2020/05/27 | 640 | support/bib2gls/examples/terms.bib
+2020/05/27 | 266 | support/bib2gls/examples/topics.bib
+2020/05/27 | 557 | support/bib2gls/examples/unaryoperators.bib
+2020/05/27 | 4053 | support/bib2gls/examples/usergroups.bib
+2020/05/27 | 1091 | support/bib2gls/examples/vegetables.bib
+2020/05/27 | 5852 | support/bib2gls/README.md
+2020/05/27 | 241545 | support/bib2gls/src/bib2gls-begin.tex
+2020/05/27 | 511470 | support/bib2gls/src/bib2gls.bib
+2020/05/27 | 4078 | support/bib2gls/src/bib2gls-cite.bib
+2020/05/27 | 9356 | support/bib2gls/src/bib2gls.pod
+2020/05/27 | 198177 | support/bib2gls/src/bib2gls-src.zip
+2020/05/27 | 959952 | support/bib2gls/src/bib2gls.tex
+2020/05/27 | 4045 | support/bib2gls/src/convertgls2bib.pod
+2020/05/27 | 32332 | support/bib2gls/src/gls2bib-src.zip
+2020/05/27 | 833850 | support/bib2gls/src/texparser-src.zip
+2020/05/27 | 993572 | support/bib2gls/texparserlib.jar
+2020/05/27 | 9627743 | support/bib2gls.zip
1999/04/14 | 372041 | support/bibdb/bibdb20.zip
1999/04/14 | 1228948 | support/bibdb/bibdbsrc.zip
1999/04/14 | 686556 | support/bibdb/wbibdb22.zip
@@ -247556,27 +247567,27 @@
2003/03/08 | 2750 | support/latexcount/latexcount.pl
2006/10/01 | 31301 | support/latexdb/latexdb-0.3.tgz
2006/04/24 | 506 | support/latexdb/README
-2018/10/07 | 2212 | support/latexdiff/contrib/latexchanges.py
-2018/10/07 | 1491 | support/latexdiff/contrib/latexdiff.spec
-2018/10/07 | 4452 | support/latexdiff/contrib/latexdiff-wrap
-2018/10/07 | 575 | support/latexdiff/contrib/README.latexchanges
-2018/10/07 | 32474 | support/latexdiff/COPYING
-2018/10/07 | 4172 | support/latexdiff/doc/example-diff.tex
-2018/10/07 | 274601 | support/latexdiff/doc/latexdiff-man.pdf
-2018/10/07 | 12048 | support/latexdiff/doc/latexdiff-man.tex
-2018/10/07 | 1356 | support/latexdiff/example/example-draft.tex
-2018/10/07 | 1414 | support/latexdiff/example/example-rev.tex
-2018/10/07 | 215576 | support/latexdiff/latexdiff
-2018/10/07 | 48504 | support/latexdiff/latexdiff.1
-2018/10/07 | 231781 | support/latexdiff/latexdiff-fast
-2018/10/07 | 227392 | support/latexdiff/latexdiff-so
-2018/10/07 | 28726 | support/latexdiff/latexdiff-vc
-2018/10/07 | 13542 | support/latexdiff/latexdiff-vc.1
-2018/10/07 | 19869 | support/latexdiff/latexrevise
-2018/10/07 | 9462 | support/latexdiff/latexrevise.1
-2018/10/07 | 2668 | support/latexdiff/Makefile
-2018/10/07 | 5296 | support/latexdiff/README
-2018/10/16 | 527893 | support/latexdiff.zip
+2020/05/27 | 2212 | support/latexdiff/contrib/latexchanges.py
+2020/05/27 | 1491 | support/latexdiff/contrib/latexdiff.spec
+2020/05/27 | 4454 | support/latexdiff/contrib/latexdiff-wrap
+2020/05/27 | 575 | support/latexdiff/contrib/README.latexchanges
+2020/05/27 | 32474 | support/latexdiff/COPYING
+2020/05/27 | 4172 | support/latexdiff/doc/example-diff.tex
+2020/05/27 | 282069 | support/latexdiff/doc/latexdiff-man.pdf
+2020/05/27 | 12049 | support/latexdiff/doc/latexdiff-man.tex
+2020/05/27 | 1356 | support/latexdiff/example/example-draft.tex
+2020/05/27 | 1414 | support/latexdiff/example/example-rev.tex
+2020/05/27 | 224184 | support/latexdiff/latexdiff
+2020/05/27 | 49272 | support/latexdiff/latexdiff.1
+2020/05/27 | 240383 | support/latexdiff/latexdiff-fast
+2020/05/27 | 235994 | support/latexdiff/latexdiff-so
+2020/05/27 | 28671 | support/latexdiff/latexdiff-vc
+2020/05/27 | 13572 | support/latexdiff/latexdiff-vc.1
+2020/05/27 | 20729 | support/latexdiff/latexrevise
+2020/05/27 | 9551 | support/latexdiff/latexrevise.1
+2020/05/27 | 3148 | support/latexdiff/Makefile
+2020/05/27 | 5296 | support/latexdiff/README
+2020/05/27 | 543923 | support/latexdiff.zip
1997/05/24 | 9592 | support/latexdraw/bin/latex2epc
1996/03/06 | 8149 | support/latexdraw/bin/ldstapeldiagramm
1996/03/06 | 5576 | support/latexdraw/bin/ldtortendiagramm
@@ -250604,346 +250615,160 @@
1994/01/18 | 7272 | support/tex-it/texitrc.unx
1994/01/18 | 25068 | support/tex-it/texit.tex
2006/03/12 | 50172 | support/tex-it.zip
-2019/12/01 | 121 | support/texlab/build.rs
-2019/12/01 | 132216 | support/texlab/Cargo.lock
-2019/12/01 | 1918 | support/texlab/Cargo.toml
-2019/12/01 | 7389 | support/texlab/CHANGELOG.md
-2019/12/01 | 183 | support/texlab/CONTRIBUTING.md
-2019/12/01 | 306 | support/texlab/crates/bibutils/Cargo.toml
-2019/12/01 | 4185 | support/texlab/crates/bibutils/src/lib.rs
-2019/12/01 | 2164 | support/texlab/crates/bibutils_sys/build.rs
-2019/12/01 | 231 | support/texlab/crates/bibutils_sys/Cargo.toml
-2019/12/01 | 19740 | support/texlab/crates/bibutils_sys/src/adsout.c
-2019/12/01 | 210303 | support/texlab/crates/bibutils_sys/src/adsout_journals.c
-2019/12/01 | 26976 | support/texlab/crates/bibutils_sys/src/bibcore.c
-2019/12/01 | 1434 | support/texlab/crates/bibutils_sys/src/bibformats.h
-2019/12/01 | 39063 | support/texlab/crates/bibutils_sys/src/biblatexin.c
-2019/12/01 | 1934 | support/texlab/crates/bibutils_sys/src/bibl.c
-2019/12/01 | 467 | support/texlab/crates/bibutils_sys/src/bibl.h
-2019/12/01 | 37998 | support/texlab/crates/bibutils_sys/src/bibtexin.c
-2019/12/01 | 25001 | support/texlab/crates/bibutils_sys/src/bibtexout.c
-2019/12/01 | 35672 | support/texlab/crates/bibutils_sys/src/bibtextypes.c
-2019/12/01 | 2000 | support/texlab/crates/bibutils_sys/src/bibutils.c
-2019/12/01 | 4634 | support/texlab/crates/bibutils_sys/src/bibutils.h
-2019/12/01 | 78741 | support/texlab/crates/bibutils_sys/src/bltypes.c
-2019/12/01 | 1112 | support/texlab/crates/bibutils_sys/src/bu_auth.c
-2019/12/01 | 307 | support/texlab/crates/bibutils_sys/src/bu_auth.h
-2019/12/01 | 502860 | support/texlab/crates/bibutils_sys/src/charsets.c
-2019/12/01 | 648 | support/texlab/crates/bibutils_sys/src/charsets.h
-2019/12/01 | 8446 | support/texlab/crates/bibutils_sys/src/copacin.c
-2019/12/01 | 1481 | support/texlab/crates/bibutils_sys/src/copactypes.c
-2019/12/01 | 17995 | support/texlab/crates/bibutils_sys/src/Copying
-2019/12/01 | 20741 | support/texlab/crates/bibutils_sys/src/ebiin.c
-2019/12/01 | 17052 | support/texlab/crates/bibutils_sys/src/endin.c
-2019/12/01 | 33421 | support/texlab/crates/bibutils_sys/src/endout.c
-2019/12/01 | 62129 | support/texlab/crates/bibutils_sys/src/endtypes.c
-2019/12/01 | 15815 | support/texlab/crates/bibutils_sys/src/endxmlin.c
-2019/12/01 | 14701 | support/texlab/crates/bibutils_sys/src/entities.c
-2019/12/01 | 257 | support/texlab/crates/bibutils_sys/src/entities.h
-2019/12/01 | 11381 | support/texlab/crates/bibutils_sys/src/fields.c
-2019/12/01 | 3432 | support/texlab/crates/bibutils_sys/src/fields.h
-2019/12/01 | 5932 | support/texlab/crates/bibutils_sys/src/gb18030.c
-2019/12/01 | 1106648 | support/texlab/crates/bibutils_sys/src/gb18030_enumeration.c
-2019/12/01 | 300 | support/texlab/crates/bibutils_sys/src/gb18030.h
-2019/12/01 | 3219 | support/texlab/crates/bibutils_sys/src/generic.c
-2019/12/01 | 1491 | support/texlab/crates/bibutils_sys/src/generic.h
-2019/12/01 | 9195 | support/texlab/crates/bibutils_sys/src/intlist.c
-2019/12/01 | 1737 | support/texlab/crates/bibutils_sys/src/intlist.h
-2019/12/01 | 11835 | support/texlab/crates/bibutils_sys/src/isiin.c
-2019/12/01 | 10687 | support/texlab/crates/bibutils_sys/src/isiout.c
-2019/12/01 | 11326 | support/texlab/crates/bibutils_sys/src/isitypes.c
-2019/12/01 | 4596 | support/texlab/crates/bibutils_sys/src/iso639_1.c
-2019/12/01 | 115 | support/texlab/crates/bibutils_sys/src/iso639_1.h
-2019/12/01 | 21626 | support/texlab/crates/bibutils_sys/src/iso639_2.c
-2019/12/01 | 167 | support/texlab/crates/bibutils_sys/src/iso639_2.h
-2019/12/01 | 217682 | support/texlab/crates/bibutils_sys/src/iso639_3.c
-2019/12/01 | 162 | support/texlab/crates/bibutils_sys/src/iso639_3.h
-2019/12/01 | 740 | support/texlab/crates/bibutils_sys/src/is_ws.c
-2019/12/01 | 304 | support/texlab/crates/bibutils_sys/src/is_ws.h
-2019/12/01 | 46443 | support/texlab/crates/bibutils_sys/src/latex.c
-2019/12/01 | 302 | support/texlab/crates/bibutils_sys/src/latex.h
-2019/12/01 | 118642 | support/texlab/crates/bibutils_sys/src/lib.rs
-2019/12/01 | 20773 | support/texlab/crates/bibutils_sys/src/marc_auth.c
-2019/12/01 | 451 | support/texlab/crates/bibutils_sys/src/marc_auth.h
-2019/12/01 | 18408 | support/texlab/crates/bibutils_sys/src/medin.c
-2019/12/01 | 32553 | support/texlab/crates/bibutils_sys/src/modsin.c
-2019/12/01 | 39417 | support/texlab/crates/bibutils_sys/src/modsout.c
-2019/12/01 | 1344 | support/texlab/crates/bibutils_sys/src/modstypes.c
-2019/12/01 | 503 | support/texlab/crates/bibutils_sys/src/modstypes.h
-2019/12/01 | 195 | support/texlab/crates/bibutils_sys/src/msvc_fix.h
-2019/12/01 | 18132 | support/texlab/crates/bibutils_sys/src/mycvout.c
-2019/12/01 | 12451 | support/texlab/crates/bibutils_sys/src/name.c
-2019/12/01 | 717 | support/texlab/crates/bibutils_sys/src/name.h
-2019/12/01 | 13052 | support/texlab/crates/bibutils_sys/src/nbibin.c
-2019/12/01 | 14026 | support/texlab/crates/bibutils_sys/src/nbibout.c
-2019/12/01 | 3231 | support/texlab/crates/bibutils_sys/src/nbibtypes.c
-2019/12/01 | 2557 | support/texlab/crates/bibutils_sys/src/notes.c
-2019/12/01 | 238 | support/texlab/crates/bibutils_sys/src/notes.h
-2019/12/01 | 1642 | support/texlab/crates/bibutils_sys/src/pages.c
-2019/12/01 | 257 | support/texlab/crates/bibutils_sys/src/pages.h
-2019/12/01 | 1539 | support/texlab/crates/bibutils_sys/src/reftypes.c
-2019/12/01 | 1793 | support/texlab/crates/bibutils_sys/src/reftypes.h
-2019/12/01 | 15932 | support/texlab/crates/bibutils_sys/src/risin.c
-2019/12/01 | 24945 | support/texlab/crates/bibutils_sys/src/risout.c
-2019/12/01 | 108116 | support/texlab/crates/bibutils_sys/src/ristypes.c
-2019/12/01 | 1277 | support/texlab/crates/bibutils_sys/src/serialno.c
-2019/12/01 | 235 | support/texlab/crates/bibutils_sys/src/serialno.h
-2019/12/01 | 15915 | support/texlab/crates/bibutils_sys/src/slist.c
-2019/12/01 | 3576 | support/texlab/crates/bibutils_sys/src/slist.h
-2019/12/01 | 20101 | support/texlab/crates/bibutils_sys/src/str.c
-2019/12/01 | 5437 | support/texlab/crates/bibutils_sys/src/str_conv.c
-2019/12/01 | 441 | support/texlab/crates/bibutils_sys/src/str_conv.h
-2019/12/01 | 4211 | support/texlab/crates/bibutils_sys/src/str.h
-2019/12/01 | 972 | support/texlab/crates/bibutils_sys/src/strsearch.c
-2019/12/01 | 229 | support/texlab/crates/bibutils_sys/src/strsearch.h
-2019/12/01 | 2375 | support/texlab/crates/bibutils_sys/src/title.c
-2019/12/01 | 424 | support/texlab/crates/bibutils_sys/src/title.h
-2019/12/01 | 2253 | support/texlab/crates/bibutils_sys/src/type.c
-2019/12/01 | 503 | support/texlab/crates/bibutils_sys/src/type.h
-2019/12/01 | 16348 | support/texlab/crates/bibutils_sys/src/unicode.c
-2019/12/01 | 555 | support/texlab/crates/bibutils_sys/src/unicode.h
-2019/12/01 | 8887 | support/texlab/crates/bibutils_sys/src/url.c
-2019/12/01 | 885 | support/texlab/crates/bibutils_sys/src/url.h
-2019/12/01 | 4550 | support/texlab/crates/bibutils_sys/src/utf8.c
-2019/12/01 | 551 | support/texlab/crates/bibutils_sys/src/utf8.h
-2019/12/01 | 6767 | support/texlab/crates/bibutils_sys/src/vplist.c
-2019/12/01 | 2569 | support/texlab/crates/bibutils_sys/src/vplist.h
-2019/12/01 | 8681 | support/texlab/crates/bibutils_sys/src/wordin.c
-2019/12/01 | 19053 | support/texlab/crates/bibutils_sys/src/wordout.c
-2019/12/01 | 68 | support/texlab/crates/bibutils_sys/src/wrapper.h
-2019/12/01 | 8636 | support/texlab/crates/bibutils_sys/src/xml.c
-2019/12/01 | 1675 | support/texlab/crates/bibutils_sys/src/xml_encoding.c
-2019/12/01 | 217 | support/texlab/crates/bibutils_sys/src/xml_encoding.h
-2019/12/01 | 1301 | support/texlab/crates/bibutils_sys/src/xml.h
-2019/12/01 | 266 | support/texlab/crates/futures_boxed/Cargo.toml
-2019/12/01 | 1766 | support/texlab/crates/futures_boxed/src/lib.rs
-2019/12/01 | 434 | support/texlab/crates/jsonrpc/Cargo.toml
-2019/12/01 | 313 | support/texlab/crates/jsonrpc_derive/Cargo.toml
-2019/12/01 | 6285 | support/texlab/crates/jsonrpc_derive/src/lib.rs
-2019/12/01 | 2163 | support/texlab/crates/jsonrpc/src/client.rs
-2019/12/01 | 2397 | support/texlab/crates/jsonrpc/src/lib.rs
-2019/12/01 | 3547 | support/texlab/crates/jsonrpc/src/server.rs
-2019/12/01 | 3468 | support/texlab/crates/jsonrpc/src/types.rs
-2019/12/01 | 490 | support/texlab/crates/tex/Cargo.toml
-2019/12/01 | 2021 | support/texlab/crates/tex/src/compile.rs
-2019/12/01 | 619 | support/texlab/crates/tex/src/language.rs
-2019/12/01 | 2692 | support/texlab/crates/tex/src/lib.rs
-2019/12/01 | 434 | support/texlab/crates/tex/src/miktex.rs
-2019/12/01 | 791 | support/texlab/crates/tex/src/tectonic.rs
-2019/12/01 | 437 | support/texlab/crates/tex/src/texlive.rs
-2019/12/01 | 35149 | support/texlab/LICENSE
-2019/12/01 | 2253 | support/texlab/README.md
-2019/12/01 | 6 | support/texlab/rust-toolchain
-2019/12/01 | 793 | support/texlab/src/action.rs
-2019/12/01 | 6842 | support/texlab/src/build.rs
-2019/12/01 | 1353 | support/texlab/src/capabilities.rs
-2019/12/01 | 56296 | support/texlab/src/citeproc/apa.csl
-2019/12/01 | 2226 | support/texlab/src/citeproc/mod.rs
-2019/12/01 | 8324 | support/texlab/src/citeproc/name/mod.rs
-2019/12/01 | 4296 | support/texlab/src/citeproc/name/parser.lalrpop
-2019/12/01 | 16205 | support/texlab/src/citeproc/ris.rs
-2019/12/01 | 1289 | support/texlab/src/client.rs
-2019/12/01 | 4533 | support/texlab/src/codec.rs
-2019/12/01 | 3707 | support/texlab/src/completion/bibtex/command.rs
-2019/12/01 | 4929 | support/texlab/src/completion/bibtex/entry_type.rs
-2019/12/01 | 5710 | support/texlab/src/completion/bibtex/field_name.rs
-2019/12/01 | 57 | support/texlab/src/completion/bibtex/mod.rs
-2019/12/01 | 24234835 | support/texlab/src/completion/data.json
-2019/12/01 | 3716 | support/texlab/src/completion/data.rs
-2019/12/01 | 12849 | support/texlab/src/completion/factory.rs
-2019/12/01 | 3949 | support/texlab/src/completion/latex/argument.rs
-2019/12/01 | 932 | support/texlab/src/completion/latex/begin_command.rs
-2019/12/01 | 5039 | support/texlab/src/completion/latex/citation.rs
-2019/12/01 | 2960 | support/texlab/src/completion/latex/color_model.rs
-2019/12/01 | 2229 | support/texlab/src/completion/latex/color.rs
-2019/12/01 | 4668 | support/texlab/src/completion/latex/combinators.rs
-2019/12/01 | 9302 | support/texlab/src/completion/latex/component.rs
-2019/12/01 | 2084 | support/texlab/src/completion/latex/glossary.rs
-2019/12/01 | 3297 | support/texlab/src/completion/latex/import.rs
-2019/12/01 | 4521 | support/texlab/src/completion/latex/include.rs
-2019/12/01 | 5467 | support/texlab/src/completion/latex/label.rs
-2019/12/01 | 246 | support/texlab/src/completion/latex/mod.rs
-2019/12/01 | 2358 | support/texlab/src/completion/latex/theorem.rs
-2019/12/01 | 2934 | support/texlab/src/completion/latex/tikz.rs
-2019/12/01 | 5586 | support/texlab/src/completion/latex/user.rs
-2019/12/01 | 4059 | support/texlab/src/completion/mod.rs
-2019/12/01 | 1856 | support/texlab/src/completion/preselect.rs
-2019/12/01 | 4443 | support/texlab/src/completion/quality.rs
-2019/12/01 | 4224 | support/texlab/src/definition/bibtex_string.rs
-2019/12/01 | 3884 | support/texlab/src/definition/latex_citation.rs
-2019/12/01 | 4139 | support/texlab/src/definition/latex_command.rs
-2019/12/01 | 4988 | support/texlab/src/definition/latex_label.rs
-2019/12/01 | 1518 | support/texlab/src/definition/mod.rs
-2019/12/01 | 9460 | support/texlab/src/diagnostics/bibtex.rs
-2019/12/01 | 13459 | support/texlab/src/diagnostics/build.rs
-2019/12/01 | 3053 | support/texlab/src/diagnostics/latex.rs
-2019/12/01 | 850 | support/texlab/src/diagnostics/mod.rs
-2019/12/01 | 4818 | support/texlab/src/folding/bibtex_declaration.rs
-2019/12/01 | 2228 | support/texlab/src/folding/latex_environment.rs
-2019/12/01 | 3256 | support/texlab/src/folding/latex_section.rs
-2019/12/01 | 1174 | support/texlab/src/folding/mod.rs
-2019/12/01 | 11041 | support/texlab/src/formatting/bibtex.rs
-2019/12/01 | 16 | support/texlab/src/formatting/mod.rs
-2019/12/01 | 2309 | support/texlab/src/forward_search.rs
-2019/12/01 | 3488 | support/texlab/src/highlight/latex_label.rs
-2019/12/01 | 907 | support/texlab/src/highlight/mod.rs
-2019/12/01 | 3338 | support/texlab/src/hover/bibtex_entry_type.rs
-2019/12/01 | 3345 | support/texlab/src/hover/bibtex_field.rs
-2019/12/01 | 3520 | support/texlab/src/hover/bibtex_string_reference.rs
-2019/12/01 | 2523 | support/texlab/src/hover/latex_citation.rs
-2019/12/01 | 1360 | support/texlab/src/hover/latex_component.rs
-2019/12/01 | 3160 | support/texlab/src/hover/latex_include.rs
-2019/12/01 | 2423 | support/texlab/src/hover/latex_label.rs
-2019/12/01 | 11800 | support/texlab/src/hover/latex_preview.rs
-2019/12/01 | 1800 | support/texlab/src/hover/mod.rs
-2019/12/01 | 436 | support/texlab/src/lib.rs
-2019/12/01 | 3094 | support/texlab/src/link/latex_include.rs
-2019/12/01 | 840 | support/texlab/src/link/mod.rs
-2019/12/01 | 3947 | support/texlab/src/lsp_kind.rs
-2019/12/01 | 2040 | support/texlab/src/main.rs
-2019/12/01 | 827 | support/texlab/src/range.rs
-2019/12/01 | 6899 | support/texlab/src/reference/bibtex_entry.rs
-2019/12/01 | 7729 | support/texlab/src/reference/bibtex_string.rs
-2019/12/01 | 5992 | support/texlab/src/reference/latex_label.rs
-2019/12/01 | 1095 | support/texlab/src/reference/mod.rs
-2019/12/01 | 5623 | support/texlab/src/rename/bibtex_entry.rs
-2019/12/01 | 3517 | support/texlab/src/rename/latex_command.rs
-2019/12/01 | 4276 | support/texlab/src/rename/latex_environment.rs
-2019/12/01 | 4058 | support/texlab/src/rename/latex_label.rs
-2019/12/01 | 2044 | support/texlab/src/rename/mod.rs
-2019/12/01 | 25581 | support/texlab/src/server.rs
-2019/12/01 | 4785 | support/texlab/src/symbol/bibtex_entry.rs
-2019/12/01 | 2458 | support/texlab/src/symbol/bibtex_string.rs
-2019/12/01 | 2383 | support/texlab/src/symbol/latex_section/enumeration.rs
-2019/12/01 | 1198 | support/texlab/src/symbol/latex_section/equation.rs
-2019/12/01 | 1762 | support/texlab/src/symbol/latex_section/float.rs
-2019/12/01 | 20212 | support/texlab/src/symbol/latex_section/mod.rs
-2019/12/01 | 2487 | support/texlab/src/symbol/latex_section/theorem.rs
-2019/12/01 | 8005 | support/texlab/src/symbol/mod.rs
-2019/12/01 | 4792 | support/texlab/src/symbol/project_order.rs
-2019/12/01 | 14097 | support/texlab/src/syntax/bibtex/ast.rs
-2019/12/01 | 3388 | support/texlab/src/syntax/bibtex/finder.rs
-2019/12/01 | 6101 | support/texlab/src/syntax/bibtex/lexer.rs
-2019/12/01 | 2079 | support/texlab/src/syntax/bibtex/mod.rs
-2019/12/01 | 7746 | support/texlab/src/syntax/bibtex/parser.rs
-2019/12/01 | 75329 | support/texlab/src/syntax/language.json
-2019/12/01 | 6851 | support/texlab/src/syntax/language.rs
-2019/12/01 | 8284 | support/texlab/src/syntax/latex/ast.rs
-2019/12/01 | 3236 | support/texlab/src/syntax/latex/env.rs
-2019/12/01 | 2099 | support/texlab/src/syntax/latex/finder.rs
-2019/12/01 | 1539 | support/texlab/src/syntax/latex/glossary.rs
-2019/12/01 | 5477 | support/texlab/src/syntax/latex/lexer.rs
-2019/12/01 | 5727 | support/texlab/src/syntax/latex/math.rs
-2019/12/01 | 11404 | support/texlab/src/syntax/latex/mod.rs
-2019/12/01 | 4404 | support/texlab/src/syntax/latex/parser.rs
-2019/12/01 | 1976 | support/texlab/src/syntax/latex/printer.rs
-2019/12/01 | 6829 | support/texlab/src/syntax/latex/structure.rs
-2019/12/01 | 628 | support/texlab/src/syntax/mod.rs
-2019/12/01 | 6795 | support/texlab/src/syntax/text.rs
-2019/12/01 | 6729 | support/texlab/src/workspace/feature.rs
-2019/12/01 | 13757 | support/texlab/src/workspace/mod.rs
-2019/12/01 | 13853 | support/texlab/src/workspace/outline.rs
-2019/12/01 | 1408 | support/texlab/src/workspace/uri.rs
-2019/12/01 | 3212 | support/texlab/tests/logs/bad-box.log
-2019/12/01 | 2478 | support/texlab/tests/logs/child-error.log
-2019/12/01 | 2533 | support/texlab/tests/logs/citation-warning.log
-2019/12/01 | 3341 | support/texlab/tests/logs/package-error.log
-2019/12/01 | 13371 | support/texlab/tests/logs/package-warning.log
-2019/12/01 | 4199 | support/texlab/tests/logs/tex-error.log
-2019/12/01 | 72 | support/texlab/tests/scenarios/completion/bibtex/command/foo.bib
-2019/12/01 | 54 | support/texlab/tests/scenarios/completion/bibtex/field/foo.bib
-2019/12/01 | 16 | support/texlab/tests/scenarios/completion/bibtex/type/foo.bib
-2019/12/01 | 68 | support/texlab/tests/scenarios/completion/bibtex/word/foo.bib
-2019/12/01 | 108 | support/texlab/tests/scenarios/completion/latex/citation/bar.bib
-2019/12/01 | 84 | support/texlab/tests/scenarios/completion/latex/citation/foo.tex
-2019/12/01 | 49 | support/texlab/tests/scenarios/completion/latex/color/foo.tex
-2019/12/01 | 102 | support/texlab/tests/scenarios/completion/latex/component/foo.tex
-2019/12/01 | 0 | support/texlab/tests/scenarios/completion/latex/include/bar.tex
-2019/12/01 | 0 | support/texlab/tests/scenarios/completion/latex/include/bibliography.bib
-2019/12/01 | 77 | support/texlab/tests/scenarios/completion/latex/include/foo.tex
-2019/12/01 | 0 | support/texlab/tests/scenarios/completion/latex/include/qux/baz.tex
-2019/12/01 | 648 | support/texlab/tests/scenarios/completion/latex/label/bar.aux
-2019/12/01 | 76 | support/texlab/tests/scenarios/completion/latex/label/bar.tex
-2019/12/01 | 422 | support/texlab/tests/scenarios/completion/latex/label/foo.aux
-2019/12/01 | 448 | support/texlab/tests/scenarios/completion/latex/label/foo.tex
-2019/12/01 | 24 | support/texlab/tests/scenarios/completion/latex/preselect/foo.tex
-2019/12/01 | 77 | support/texlab/tests/scenarios/completion/latex/theorem/foo.tex
-2019/12/01 | 53 | support/texlab/tests/scenarios/completion/latex/tikz/foo.tex
-2019/12/01 | 42 | support/texlab/tests/scenarios/completion/latex/user/foo.tex
-2019/12/01 | 78 | support/texlab/tests/scenarios/definition/bibtex/string/foo.bib
-2019/12/01 | 31 | support/texlab/tests/scenarios/definition/latex/citation/bar.bib
-2019/12/01 | 31 | support/texlab/tests/scenarios/definition/latex/citation/baz.bib
-2019/12/01 | 30 | support/texlab/tests/scenarios/definition/latex/citation/foo.tex
-2019/12/01 | 29 | support/texlab/tests/scenarios/definition/latex/command/foo.tex
-2019/12/01 | 22 | support/texlab/tests/scenarios/definition/latex/label/default.tex
-2019/12/01 | 70 | support/texlab/tests/scenarios/definition/latex/label/equation.tex
-2019/12/01 | 69 | support/texlab/tests/scenarios/definition/latex/label/float.tex
-2019/12/01 | 98 | support/texlab/tests/scenarios/definition/latex/label/item.tex
-2019/12/01 | 76 | support/texlab/tests/scenarios/definition/latex/label/section.tex
-2019/12/01 | 113 | support/texlab/tests/scenarios/definition/latex/label/theorem.tex
-2019/12/01 | 38 | support/texlab/tests/scenarios/definition/latex/math_operator/foo.tex
-2019/12/01 | 9 | support/texlab/tests/scenarios/diagnostics/bibtex/foo.bib
-2019/12/01 | 2197 | support/texlab/tests/scenarios/diagnostics/build/foo.log
-2019/12/01 | 63 | support/texlab/tests/scenarios/diagnostics/build/foo.tex
-2019/12/01 | 825 | support/texlab/tests/scenarios/folding/bar.bib
-2019/12/01 | 128 | support/texlab/tests/scenarios/folding/foo.tex
-2019/12/01 | 62 | support/texlab/tests/scenarios/formatting/bibtex/default/formatted.bib
-2019/12/01 | 53 | support/texlab/tests/scenarios/formatting/bibtex/default/unformatted.bib
-2019/12/01 | 154 | support/texlab/tests/scenarios/formatting/bibtex/infinite_line_length/formatted.bib
-2019/12/01 | 150 | support/texlab/tests/scenarios/formatting/bibtex/infinite_line_length/unformatted.bib
-2019/12/01 | 60 | support/texlab/tests/scenarios/hover/bibtex/field/foo.bib
-2019/12/01 | 91 | support/texlab/tests/scenarios/hover/bibtex/string_reference/foo.bib
-2019/12/01 | 39 | support/texlab/tests/scenarios/hover/bibtex/type/foo.bib
-2019/12/01 | 153 | support/texlab/tests/scenarios/hover/latex/citation/foo.bib
-2019/12/01 | 42 | support/texlab/tests/scenarios/hover/latex/citation/foo.tex
-2019/12/01 | 82 | support/texlab/tests/scenarios/hover/latex/component/foo.tex
-2019/12/01 | 86 | support/texlab/tests/scenarios/hover/latex/label/section.tex
-2019/12/01 | 60 | support/texlab/tests/scenarios/symbol/hierarchical/enumerate.aux
-2019/12/01 | 201 | support/texlab/tests/scenarios/symbol/hierarchical/enumerate.tex
-2019/12/01 | 34 | support/texlab/tests/scenarios/symbol/hierarchical/equation.aux
-2019/12/01 | 209 | support/texlab/tests/scenarios/symbol/hierarchical/equation.tex
-2019/12/01 | 347 | support/texlab/tests/scenarios/symbol/hierarchical/float.aux
-2019/12/01 | 290 | support/texlab/tests/scenarios/symbol/hierarchical/float.tex
-2019/12/01 | 213 | support/texlab/tests/scenarios/symbol/hierarchical/section.aux
-2019/12/01 | 136 | support/texlab/tests/scenarios/symbol/hierarchical/section.tex
-2019/12/01 | 62 | support/texlab/tests/scenarios/symbol/hierarchical/theorem.aux
-2019/12/01 | 298 | support/texlab/tests/scenarios/symbol/hierarchical/theorem.tex
-2019/12/01 | 37 | support/texlab/tests/scenarios/symbol/workspace/bar.bib
-2019/12/01 | 808 | support/texlab/tests/scenarios/symbol/workspace/foo.aux
-2019/12/01 | 578 | support/texlab/tests/scenarios/symbol/workspace/foo.tex
-2019/12/01 | 19574 | support/texlab/tests/support/mod.rs
-2019/12/01 | 502 | support/texlab/tests/test_completion_bibtex_command.rs
-2019/12/01 | 502 | support/texlab/tests/test_completion_bibtex_field.rs
-2019/12/01 | 714 | support/texlab/tests/test_completion_bibtex_type.rs
-2019/12/01 | 372 | support/texlab/tests/test_completion_bibtex_word.rs
-2019/12/01 | 709 | support/texlab/tests/test_completion_latex_citation.rs
-2019/12/01 | 570 | support/texlab/tests/test_completion_latex_color.rs
-2019/12/01 | 2011 | support/texlab/tests/test_completion_latex_component.rs
-2019/12/01 | 749 | support/texlab/tests/test_completion_latex_include.rs
-2019/12/01 | 1145 | support/texlab/tests/test_completion_latex_label.rs
-2019/12/01 | 246 | support/texlab/tests/test_completion_latex_preselect.rs
-2019/12/01 | 286 | support/texlab/tests/test_completion_latex_theorem.rs
-2019/12/01 | 703 | support/texlab/tests/test_completion_latex_tikz.rs
-2019/12/01 | 480 | support/texlab/tests/test_completion_latex_user.rs
-2019/12/01 | 585 | support/texlab/tests/test_definition_bibtex_string.rs
-2019/12/01 | 913 | support/texlab/tests/test_definition_latex_citation.rs
-2019/12/01 | 582 | support/texlab/tests/test_definition_latex_command.rs
-2019/12/01 | 2886 | support/texlab/tests/test_definition_latex_label.rs
-2019/12/01 | 588 | support/texlab/tests/test_definition_latex_math_operator.rs
-2019/12/01 | 1279 | support/texlab/tests/test_diagnostics_bibtex.rs
-2019/12/01 | 890 | support/texlab/tests/test_diagnostics_build.rs
-2019/12/01 | 1776 | support/texlab/tests/test_folding.rs
-2019/12/01 | 932 | support/texlab/tests/test_formatting_bibtex.rs
-2019/12/01 | 637 | support/texlab/tests/test_hover_bibtex_field.rs
-2019/12/01 | 529 | support/texlab/tests/test_hover_bibtex_string_reference.rs
-2019/12/01 | 642 | support/texlab/tests/test_hover_bibtex_type.rs
-2019/12/01 | 525 | support/texlab/tests/test_hover_latex_citation.rs
-2019/12/01 | 548 | support/texlab/tests/test_hover_latex_component.rs
-2019/12/01 | 1521 | support/texlab/tests/test_hover_latex_label.rs
-2019/12/01 | 3998 | support/texlab/tests/test_symbol_hierarchical.rs
-2019/12/01 | 1826 | support/texlab/tests/test_symbol_workspace.rs
-2019/12/01 | 614 | support/texlab/texlab.1
-2019/12/02 | 7807801 | support/texlab.zip
+2020/05/27 | 105 | support/texlab/benches/bench_main.rs
+2020/05/27 | 4769 | support/texlab/benches/benchmarks/completion.rs
+2020/05/27 | 20 | support/texlab/benches/benchmarks/mod.rs
+2020/05/27 | 159 | support/texlab/build.rs
+2020/05/27 | 139693 | support/texlab/Cargo.lock
+2020/05/27 | 2729 | support/texlab/Cargo.toml
+2020/05/27 | 10424 | support/texlab/CHANGELOG.md
+2020/05/27 | 183 | support/texlab/CONTRIBUTING.md
+2020/05/27 | 429 | support/texlab/crates/jsonrpc/Cargo.toml
+2020/05/27 | 268 | support/texlab/crates/jsonrpc_derive/Cargo.toml
+2020/05/27 | 6243 | support/texlab/crates/jsonrpc_derive/src/lib.rs
+2020/05/27 | 2200 | support/texlab/crates/jsonrpc/src/client.rs
+2020/05/27 | 2137 | support/texlab/crates/jsonrpc/src/lib.rs
+2020/05/27 | 3530 | support/texlab/crates/jsonrpc/src/server.rs
+2020/05/27 | 3370 | support/texlab/crates/jsonrpc/src/types.rs
+2020/05/27 | 24234835 | support/texlab/data/components.json
+2020/05/27 | 75299 | support/texlab/data/lang_data.json
+2020/05/27 | 35149 | support/texlab/LICENSE
+2020/05/27 | 2992 | support/texlab/README.md
+2020/05/27 | 6 | support/texlab/rust-toolchain
+2020/05/27 | 6732 | support/texlab/src/build.rs
+2020/05/27 | 56296 | support/texlab/src/citeproc/apa.csl
+2020/05/27 | 4605 | support/texlab/src/citeproc/bibutils.rs
+2020/05/27 | 6076 | support/texlab/src/citeproc/mod.rs
+2020/05/27 | 8329 | support/texlab/src/citeproc/name/mod.rs
+2020/05/27 | 4294 | support/texlab/src/citeproc/name/parser.lalrpop
+2020/05/27 | 16187 | support/texlab/src/citeproc/ris.rs
+2020/05/27 | 4948 | support/texlab/src/completion/bibtex/cmd.rs
+2020/05/27 | 4797 | support/texlab/src/completion/bibtex/entry_type.rs
+2020/05/27 | 5401 | support/texlab/src/completion/bibtex/field_name.rs
+2020/05/27 | 53 | support/texlab/src/completion/bibtex/mod.rs
+2020/05/27 | 6097 | support/texlab/src/completion/latex/argument.rs
+2020/05/27 | 1887 | support/texlab/src/completion/latex/begin_cmd.rs
+2020/05/27 | 7406 | support/texlab/src/completion/latex/citation.rs
+2020/05/27 | 2787 | support/texlab/src/completion/latex/color_model.rs
+2020/05/27 | 2533 | support/texlab/src/completion/latex/color.rs
+2020/05/27 | 4630 | support/texlab/src/completion/latex/combinators.rs
+2020/05/27 | 10102 | support/texlab/src/completion/latex/component.rs
+2020/05/27 | 3304 | support/texlab/src/completion/latex/glossary.rs
+2020/05/27 | 5339 | support/texlab/src/completion/latex/import.rs
+2020/05/27 | 4095 | support/texlab/src/completion/latex/include.rs
+2020/05/27 | 7418 | support/texlab/src/completion/latex/label.rs
+2020/05/27 | 242 | support/texlab/src/completion/latex/mod.rs
+2020/05/27 | 3142 | support/texlab/src/completion/latex/theorem.rs
+2020/05/27 | 3743 | support/texlab/src/completion/latex/tikz_lib.rs
+2020/05/27 | 5973 | support/texlab/src/completion/latex/user.rs
+2020/05/27 | 17918 | support/texlab/src/completion/mod.rs
+2020/05/27 | 3374 | support/texlab/src/completion/types.rs
+2020/05/27 | 4258 | support/texlab/src/completion/util.rs
+2020/05/27 | 2715 | support/texlab/src/components.rs
+2020/05/27 | 3201 | support/texlab/src/config.rs
+2020/05/27 | 5268 | support/texlab/src/definition/bibtex_string.rs
+2020/05/27 | 3814 | support/texlab/src/definition/latex_citation.rs
+2020/05/27 | 5328 | support/texlab/src/definition/latex_cmd.rs
+2020/05/27 | 5402 | support/texlab/src/definition/latex_label.rs
+2020/05/27 | 1315 | support/texlab/src/definition/mod.rs
+2020/05/27 | 10469 | support/texlab/src/diagnostics/bibtex.rs
+2020/05/27 | 55964 | support/texlab/src/diagnostics/build.rs
+2020/05/27 | 3390 | support/texlab/src/diagnostics/latex.rs
+2020/05/27 | 773 | support/texlab/src/diagnostics/mod.rs
+2020/05/27 | 11900 | support/texlab/src/feature.rs
+2020/05/27 | 4828 | support/texlab/src/folding/bibtex_decl.rs
+2020/05/27 | 2423 | support/texlab/src/folding/latex_env.rs
+2020/05/27 | 3512 | support/texlab/src/folding/latex_section.rs
+2020/05/27 | 1155 | support/texlab/src/folding/mod.rs
+2020/05/27 | 2519 | support/texlab/src/forward_search.rs
+2020/05/27 | 3484 | support/texlab/src/highlight/latex_label.rs
+2020/05/27 | 912 | support/texlab/src/highlight/mod.rs
+2020/05/27 | 3440 | support/texlab/src/hover/bibtex/entry_type.rs
+2020/05/27 | 3282 | support/texlab/src/hover/bibtex/field.rs
+2020/05/27 | 61 | support/texlab/src/hover/bibtex/mod.rs
+2020/05/27 | 4829 | support/texlab/src/hover/bibtex/string_reference.rs
+2020/05/27 | 5443 | support/texlab/src/hover/latex/citation.rs
+2020/05/27 | 2884 | support/texlab/src/hover/latex/component.rs
+2020/05/27 | 3756 | support/texlab/src/hover/latex/label.rs
+2020/05/27 | 99 | support/texlab/src/hover/latex/mod.rs
+2020/05/27 | 11015 | support/texlab/src/hover/latex/preview.rs
+2020/05/27 | 1631 | support/texlab/src/hover/mod.rs
+2020/05/27 | 536 | support/texlab/src/lib.rs
+2020/05/27 | 2737 | support/texlab/src/link/latex_import.rs
+2020/05/27 | 2854 | support/texlab/src/link/latex_include.rs
+2020/05/27 | 992 | support/texlab/src/link/mod.rs
+2020/05/27 | 2808 | support/texlab/src/main.rs
+2020/05/27 | 13772 | support/texlab/src/outline.rs
+2020/05/27 | 4767 | support/texlab/src/protocol/capabilities.rs
+2020/05/27 | 1172 | support/texlab/src/protocol/client.rs
+2020/05/27 | 4426 | support/texlab/src/protocol/codec.rs
+2020/05/27 | 308 | support/texlab/src/protocol/edit.rs
+2020/05/27 | 1520 | support/texlab/src/protocol/mod.rs
+2020/05/27 | 2846 | support/texlab/src/protocol/options.rs
+2020/05/27 | 2446 | support/texlab/src/protocol/range.rs
+2020/05/27 | 2088 | support/texlab/src/protocol/uri.rs
+2020/05/27 | 7013 | support/texlab/src/reference/bibtex_entry.rs
+2020/05/27 | 8063 | support/texlab/src/reference/bibtex_string.rs
+2020/05/27 | 6291 | support/texlab/src/reference/latex_label.rs
+2020/05/27 | 1136 | support/texlab/src/reference/mod.rs
+2020/05/27 | 6225 | support/texlab/src/rename/bibtex_entry.rs
+2020/05/27 | 4000 | support/texlab/src/rename/latex_cmd.rs
+2020/05/27 | 4624 | support/texlab/src/rename/latex_env.rs
+2020/05/27 | 4399 | support/texlab/src/rename/latex_label.rs
+2020/05/27 | 2378 | support/texlab/src/rename/mod.rs
+2020/05/27 | 28284 | support/texlab/src/server.rs
+2020/05/27 | 5112 | support/texlab/src/symbol/bibtex_entry.rs
+2020/05/27 | 3082 | support/texlab/src/symbol/bibtex_string.rs
+2020/05/27 | 2463 | support/texlab/src/symbol/latex_section/enumeration.rs
+2020/05/27 | 1254 | support/texlab/src/symbol/latex_section/equation.rs
+2020/05/27 | 1870 | support/texlab/src/symbol/latex_section/float.rs
+2020/05/27 | 20796 | support/texlab/src/symbol/latex_section/mod.rs
+2020/05/27 | 2574 | support/texlab/src/symbol/latex_section/theorem.rs
+2020/05/27 | 5232 | support/texlab/src/symbol/mod.rs
+2020/05/27 | 6358 | support/texlab/src/symbol/project_order.rs
+2020/05/27 | 3467 | support/texlab/src/symbol/types.rs
+2020/05/27 | 9921 | support/texlab/src/syntax/bibtex/ast.rs
+2020/05/27 | 10189 | support/texlab/src/syntax/bibtex/formatter.rs
+2020/05/27 | 5702 | support/texlab/src/syntax/bibtex/lexer.rs
+2020/05/27 | 10692 | support/texlab/src/syntax/bibtex/mod.rs
+2020/05/27 | 12792 | support/texlab/src/syntax/bibtex/parser.rs
+2020/05/27 | 1268 | support/texlab/src/syntax/generic_ast.rs
+2020/05/27 | 6858 | support/texlab/src/syntax/lang_data.rs
+2020/05/27 | 27466 | support/texlab/src/syntax/latex/analysis.rs
+2020/05/27 | 9884 | support/texlab/src/syntax/latex/ast.rs
+2020/05/27 | 631 | support/texlab/src/syntax/latexindent.rs
+2020/05/27 | 5177 | support/texlab/src/syntax/latex/lexer.rs
+2020/05/27 | 18266 | support/texlab/src/syntax/latex/mod.rs
+2020/05/27 | 5618 | support/texlab/src/syntax/latex/parser.rs
+2020/05/27 | 4009 | support/texlab/src/syntax/lsp_kind.rs
+2020/05/27 | 251 | support/texlab/src/syntax/mod.rs
+2020/05/27 | 6655 | support/texlab/src/syntax/text.rs
+2020/05/27 | 3203 | support/texlab/src/test/client.rs
+2020/05/27 | 20013 | support/texlab/src/test/mod.rs
+2020/05/27 | 3079 | support/texlab/src/test/server.rs
+2020/05/27 | 2333 | support/texlab/src/tex/compile.rs
+2020/05/27 | 3019 | support/texlab/src/tex/kpsewhich.rs
+2020/05/27 | 3480 | support/texlab/src/tex/miktex.rs
+2020/05/27 | 4217 | support/texlab/src/tex/mod.rs
+2020/05/27 | 936 | support/texlab/src/tex/tectonic.rs
+2020/05/27 | 1955 | support/texlab/src/tex/texlive.rs
+2020/05/27 | 32093 | support/texlab/src/workspace.rs
+2020/05/27 | 33433 | support/texlab/tests/integration/completion.rs
+2020/05/27 | 13919 | support/texlab/tests/integration/definition.rs
+2020/05/27 | 11552 | support/texlab/tests/integration/document_symbol.rs
+2020/05/27 | 3328 | support/texlab/tests/integration/folding.rs
+2020/05/27 | 2260 | support/texlab/tests/integration/highlight.rs
+2020/05/27 | 2282 | support/texlab/tests/integration/hover.rs
+2020/05/27 | 9627 | support/texlab/tests/integration/issues.rs
+2020/05/27 | 4663 | support/texlab/tests/integration/link.rs
+2020/05/27 | 183 | support/texlab/tests/integration/main.rs
+2020/05/27 | 3771 | support/texlab/tests/integration/prepare_rename.rs
+2020/05/27 | 3890 | support/texlab/tests/integration/reference.rs
+2020/05/27 | 6021 | support/texlab/tests/integration/rename.rs
+2020/05/27 | 6532 | support/texlab/tests/integration/workspace_symbol.rs
+2020/05/27 | 643 | support/texlab/texlab.1
+2020/05/27 | 84894 | support/texlab/texlab.pdf
+2020/05/27 | 7309318 | support/texlab.zip
2011/11/27 | 456 | support/texlipse/plugin/1.5.0/README.TXT
2011/11/27 | 1726937 | support/texlipse/plugin/1.5.0/texlipse_1.5.0 src.zip
1999/01/30 | 6077 | support/texlist/README
@@ -255060,6 +254885,8 @@
2019/02/28 | 4172 | systems/texlive/tlnet/archive/biblatex-trad.r46668.tar.xz
2019/02/28 | 70876 | systems/texlive/tlnet/archive/biblatex-true-citepages-omit.doc.r44653.tar.xz
2019/02/28 | 1308 | systems/texlive/tlnet/archive/biblatex-true-citepages-omit.r44653.tar.xz
+2020/05/27 | 434816 | systems/texlive/tlnet/archive/biblatex-unified.doc.r55290.tar.xz
+2020/05/27 | 7704 | systems/texlive/tlnet/archive/biblatex-unified.r55290.tar.xz
2019/12/11 | 363996 | systems/texlive/tlnet/archive/bibleref.doc.r53090.tar.xz
2019/12/16 | 644116 | systems/texlive/tlnet/archive/bibleref-french.doc.r53138.tar.xz
2019/12/16 | 4552 | systems/texlive/tlnet/archive/bibleref-french.r53138.tar.xz
@@ -255954,7 +255781,7 @@
2019/02/28 | 2836 | systems/texlive/tlnet/archive/collectbox.r26557.tar.xz
2019/02/28 | 8068 | systems/texlive/tlnet/archive/collectbox.source.r26557.tar.xz
2020/03/09 | 640 | systems/texlive/tlnet/archive/collection-basic.r54186.tar.xz
-2020/04/26 | 1208 | systems/texlive/tlnet/archive/collection-bibtexextra.r54875.tar.xz
+2020/05/27 | 1212 | systems/texlive/tlnet/archive/collection-bibtexextra.r55290.tar.xz
2020/04/15 | 936 | systems/texlive/tlnet/archive/collection-binextra.r54732.tar.xz
2020/03/04 | 596 | systems/texlive/tlnet/archive/collection-context.r54074.tar.xz
2020/03/07 | 1796 | systems/texlive/tlnet/archive/collection-fontsextra.r54138.tar.xz
@@ -255980,14 +255807,14 @@
2020/03/04 | 408 | systems/texlive/tlnet/archive/collection-langpolish.r54074.tar.xz
2020/03/04 | 392 | systems/texlive/tlnet/archive/collection-langportuguese.r54074.tar.xz
2020/03/07 | 380 | systems/texlive/tlnet/archive/collection-langspanish.r54141.tar.xz
-2020/05/25 | 6100 | systems/texlive/tlnet/archive/collection-latexextra.r55262.tar.xz
+2020/05/27 | 6104 | systems/texlive/tlnet/archive/collection-latexextra.r55291.tar.xz
2020/03/04 | 676 | systems/texlive/tlnet/archive/collection-latex.r54074.tar.xz
2020/03/04 | 748 | systems/texlive/tlnet/archive/collection-latexrecommended.r54074.tar.xz
2020/05/17 | 664 | systems/texlive/tlnet/archive/collection-luatex.r55158.tar.xz
2020/05/20 | 1428 | systems/texlive/tlnet/archive/collection-mathscience.r55213.tar.xz
2019/03/09 | 540 | systems/texlive/tlnet/archive/collection-metapost.r50293.tar.xz
2020/04/12 | 472 | systems/texlive/tlnet/archive/collection-music.r54666.tar.xz
-2020/05/14 | 1360 | systems/texlive/tlnet/archive/collection-pictures.r55132.tar.xz
+2020/05/27 | 1364 | systems/texlive/tlnet/archive/collection-pictures.r55288.tar.xz
2020/05/26 | 908 | systems/texlive/tlnet/archive/collection-plaingeneric.r55277.tar.xz
2020/03/22 | 808 | systems/texlive/tlnet/archive/collection-pstricks.r54455.tar.xz
2020/05/14 | 1500 | systems/texlive/tlnet/archive/collection-publishers.r55121.tar.xz
@@ -256892,8 +256719,8 @@
2019/02/28 | 1932 | systems/texlive/tlnet/archive/doipubmed.r15878.tar.xz
2019/02/28 | 4020 | systems/texlive/tlnet/archive/doipubmed.source.r15878.tar.xz
2019/02/28 | 2152 | systems/texlive/tlnet/archive/doi.r48634.tar.xz
-2020/03/24 | 222404 | systems/texlive/tlnet/archive/domitian.doc.r54512.tar.xz
-2020/03/24 | 1056892 | systems/texlive/tlnet/archive/domitian.r54512.tar.xz
+2020/05/27 | 63244 | systems/texlive/tlnet/archive/domitian.doc.r55286.tar.xz
+2020/05/27 | 1376968 | systems/texlive/tlnet/archive/domitian.r55286.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/dosepsbin.aarch64-linux.r46208.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/dosepsbin.amd64-freebsd.r24759.tar.xz
2019/02/28 | 340 | systems/texlive/tlnet/archive/dosepsbin.amd64-netbsd.r30191.tar.xz
@@ -257629,8 +257456,8 @@
2019/02/28 | 6056 | systems/texlive/tlnet/archive/erdc.r15878.tar.xz
2019/02/28 | 16276 | systems/texlive/tlnet/archive/erdc.source.r15878.tar.xz
2020/05/14 | 354268 | systems/texlive/tlnet/archive/erewhon.doc.r55128.tar.xz
-2020/04/17 | 1472792 | systems/texlive/tlnet/archive/erewhon-math.doc.r54769.tar.xz
-2020/04/17 | 184112 | systems/texlive/tlnet/archive/erewhon-math.r54769.tar.xz
+2020/05/27 | 1470024 | systems/texlive/tlnet/archive/erewhon-math.doc.r55287.tar.xz
+2020/05/27 | 230912 | systems/texlive/tlnet/archive/erewhon-math.r55287.tar.xz
2020/05/14 | 2422672 | systems/texlive/tlnet/archive/erewhon.r55128.tar.xz
2019/02/28 | 147644 | systems/texlive/tlnet/archive/errata.doc.r42428.tar.xz
2019/02/28 | 1652 | systems/texlive/tlnet/archive/errata.r42428.tar.xz
@@ -258825,10 +258652,10 @@
2019/02/28 | 38768 | systems/texlive/tlnet/archive/HA-prosper.source.r15878.tar.xz
2020/03/04 | 216528 | systems/texlive/tlnet/archive/har2nat.doc.r54080.tar.xz
2020/03/04 | 1112 | systems/texlive/tlnet/archive/har2nat.r54080.tar.xz
-2020/05/25 | 3052 | systems/texlive/tlnet/archive/haranoaji.doc.r55265.tar.xz
+2020/05/27 | 3048 | systems/texlive/tlnet/archive/haranoaji.doc.r55283.tar.xz
2020/05/25 | 3060 | systems/texlive/tlnet/archive/haranoaji-extra.doc.r55265.tar.xz
2020/05/25 | 25912136 | systems/texlive/tlnet/archive/haranoaji-extra.r55265.tar.xz
-2020/05/25 | 26141208 | systems/texlive/tlnet/archive/haranoaji.r55265.tar.xz
+2020/05/27 | 26174240 | systems/texlive/tlnet/archive/haranoaji.r55283.tar.xz
2019/02/28 | 120084 | systems/texlive/tlnet/archive/hardwrap.doc.r21396.tar.xz
2019/02/28 | 2732 | systems/texlive/tlnet/archive/hardwrap.r21396.tar.xz
2019/02/28 | 11108 | systems/texlive/tlnet/archive/hardwrap.source.r21396.tar.xz
@@ -262771,8 +262598,8 @@
2019/02/28 | 4508 | systems/texlive/tlnet/archive/pst-calendar.r15878.tar.xz
2019/02/28 | 19771488 | systems/texlive/tlnet/archive/pst-cie.doc.r49422.tar.xz
2019/02/28 | 18200 | systems/texlive/tlnet/archive/pst-cie.r49422.tar.xz
-2019/02/28 | 498544 | systems/texlive/tlnet/archive/pst-circ.doc.r49791.tar.xz
-2019/02/28 | 24332 | systems/texlive/tlnet/archive/pst-circ.r49791.tar.xz
+2020/05/27 | 499776 | systems/texlive/tlnet/archive/pst-circ.doc.r55289.tar.xz
+2020/05/27 | 24300 | systems/texlive/tlnet/archive/pst-circ.r55289.tar.xz
2019/02/28 | 251024 | systems/texlive/tlnet/archive/pst-coil.doc.r37377.tar.xz
2019/02/28 | 3936 | systems/texlive/tlnet/archive/pst-coil.r37377.tar.xz
2019/02/28 | 764392 | systems/texlive/tlnet/archive/pst-contourplot.doc.r48230.tar.xz
@@ -264920,6 +264747,8 @@
2019/02/28 | 4532 | systems/texlive/tlnet/archive/tikz-karnaugh.r47026.tar.xz
2019/02/28 | 236908 | systems/texlive/tlnet/archive/tikz-ladder.doc.r46555.tar.xz
2019/02/28 | 4544 | systems/texlive/tlnet/archive/tikz-ladder.r46555.tar.xz
+2020/05/27 | 61388 | systems/texlive/tlnet/archive/tikz-lake-fig.doc.r55288.tar.xz
+2020/05/27 | 4320 | systems/texlive/tlnet/archive/tikz-lake-fig.r55288.tar.xz
2019/02/28 | 960 | systems/texlive/tlnet/archive/tikz-layers.doc.r46660.tar.xz
2019/02/28 | 1084 | systems/texlive/tlnet/archive/tikz-layers.r46660.tar.xz
2020/04/23 | 532152 | systems/texlive/tlnet/archive/tikzlings.doc.r54838.tar.xz
@@ -265567,6 +265396,8 @@
2019/02/28 | 4824 | systems/texlive/tlnet/archive/uspatent.r27744.tar.xz
2019/02/28 | 2840 | systems/texlive/tlnet/archive/utexasthesis.doc.r48648.tar.xz
2019/02/28 | 3744 | systems/texlive/tlnet/archive/utexasthesis.r48648.tar.xz
+2020/05/27 | 390028 | systems/texlive/tlnet/archive/utf8add.doc.r55291.tar.xz
+2020/05/27 | 4040 | systems/texlive/tlnet/archive/utf8add.r55291.tar.xz
2019/02/28 | 7496 | systems/texlive/tlnet/archive/utf8mex.doc.r15878.tar.xz
2019/02/28 | 2868 | systems/texlive/tlnet/archive/utf8mex.r15878.tar.xz
2019/02/28 | 2820 | systems/texlive/tlnet/archive/utopia.doc.r15878.tar.xz
@@ -266238,16 +266069,16 @@
2020/01/24 | 138180 | systems/texlive/tlnet/archive/zxjatype.doc.r53500.tar.xz
2020/01/24 | 8760 | systems/texlive/tlnet/archive/zxjatype.r53500.tar.xz
2020/05/18 | 107860 | systems/texlive/tlnet/install-tl
-2020/05/26 | 5500342 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2020/05/26 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2020/05/26 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2020/05/27 | 5500333 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2020/05/27 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2020/05/27 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2020/03/17 | 4641 | systems/texlive/tlnet/install-tl-windows.bat
-2020/05/26 | 19379445 | systems/texlive/tlnet/install-tl-windows.exe
-2020/05/26 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2020/05/26 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2020/05/26 | 24269869 | systems/texlive/tlnet/install-tl.zip
-2020/05/26 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2020/05/26 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2020/05/27 | 19379501 | systems/texlive/tlnet/install-tl-windows.exe
+2020/05/27 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2020/05/27 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2020/05/27 | 24269869 | systems/texlive/tlnet/install-tl.zip
+2020/05/27 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2020/05/27 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
2020/03/05 | 1215 | systems/texlive/tlnet/README.md
2020/04/06 | 5961 | systems/texlive/tlnet/tlpkg/gpg/pubring.gpg
2016/04/12 | 600 | systems/texlive/tlnet/tlpkg/gpg/random_seed
@@ -266303,12 +266134,12 @@
2020/05/17 | 20322 | systems/texlive/tlnet/tlpkg/TeXLive/TLCrypto.pm
2020/05/03 | 4786 | systems/texlive/tlnet/tlpkg/TeXLive/TLDownload.pm
2017/11/14 | 27560 | systems/texlive/tlnet/tlpkg/TeXLive/TLPaper.pm
-2020/05/26 | 16451404 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2020/05/26 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2020/05/27 | 16461788 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2020/05/27 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
2020/05/13 | 86417 | systems/texlive/tlnet/tlpkg/TeXLive/TLPDB.pm
-2020/05/26 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2020/05/26 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2020/05/26 | 2204032 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2020/05/27 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2020/05/27 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2020/05/27 | 2204484 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2020/04/15 | 58761 | systems/texlive/tlnet/tlpkg/TeXLive/TLPOBJ.pm
2020/03/20 | 41736 | systems/texlive/tlnet/tlpkg/TeXLive/TLPSRC.pm
2020/05/11 | 15010 | systems/texlive/tlnet/tlpkg/TeXLive/TLTREE.pm
@@ -270745,7 +270576,7 @@
2020/02/04 | 281488 | systems/win32/miktex/tm/packages/filehook.tar.lzma
2012/12/04 | 924573 | systems/win32/miktex/tm/packages/fileinfo.tar.lzma
2011/09/21 | 281409 | systems/win32/miktex/tm/packages/filemod.tar.lzma
-2020/05/26 | 536491 | systems/win32/miktex/tm/packages/files.csv.lzma
+2020/05/27 | 536491 | systems/win32/miktex/tm/packages/files.csv.lzma
2001/05/14 | 5617 | systems/win32/miktex/tm/packages/finbib.tar.lzma
2015/10/20 | 44379 | systems/win32/miktex/tm/packages/findhyph.tar.lzma
2011/10/21 | 89323 | systems/win32/miktex/tm/packages/fink.tar.lzma
@@ -271892,9 +271723,9 @@
2018/01/12 | 157226 | systems/win32/miktex/tm/packages/miktex-zip-bin-x64.tar.lzma
2020/05/17 | 39207 | systems/win32/miktex/tm/packages/miktex-zlib-bin-2.9.tar.lzma
2020/05/17 | 42854 | systems/win32/miktex/tm/packages/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/05/26 | 199955 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2020/05/26 | 1196697 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2020/05/26 | 1116665 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2020/05/27 | 199954 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2020/05/27 | 1197701 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2020/05/27 | 1117993 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
2020/05/17 | 13031 | systems/win32/miktex/tm/packages/miktex-zzip-bin-2.9.tar.lzma
2020/05/17 | 14067 | systems/win32/miktex/tm/packages/miktex-zzip-bin-x64-2.9.tar.lzma
2016/07/15 | 35914 | systems/win32/miktex/tm/packages/mil3.tar.lzma
@@ -272046,183 +271877,183 @@
2018/04/09 | 400132 | systems/win32/miktex/tm/packages/newunicodechar.tar.lzma
2011/09/19 | 101312 | systems/win32/miktex/tm/packages/newvbtm.tar.lzma
2019/09/11 | 231430 | systems/win32/miktex/tm/packages/newverbs.tar.lzma
-2020/05/26 | 536741 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2020/05/26 | 58559 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2020/05/26 | 66563 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
-2020/05/26 | 941128 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2020/05/26 | 1049744 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2020/05/26 | 28575 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2020/05/26 | 30784 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2020/05/26 | 29322 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2020/05/26 | 34939 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2020/05/26 | 49727 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
-2020/05/26 | 57270 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2020/05/26 | 84826 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2020/05/26 | 94351 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2020/05/26 | 62073 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2020/05/26 | 69344 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2020/05/26 | 26646 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2020/05/26 | 30214 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2020/05/26 | 328738 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2020/05/26 | 391508 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
-2020/05/26 | 32321 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2020/05/26 | 36417 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
-2020/05/26 | 71324 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2020/05/26 | 77908 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2020/05/26 | 203218 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2020/05/26 | 222867 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
-2020/05/26 | 169534 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2020/05/26 | 184301 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
-2020/05/26 | 52237 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2020/05/26 | 58597 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2020/05/26 | 20787 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2020/05/26 | 23007 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
-2020/05/26 | 460501 | systems/win32/miktex/tm/packages/next/miktex-doc-2.9.tar.lzma
-2020/05/26 | 41134 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
-2020/05/26 | 45953 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2020/05/26 | 273335 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2020/05/26 | 311643 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2020/05/26 | 40793 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2020/05/26 | 45081 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
-2020/05/26 | 115755 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2020/05/26 | 130481 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2020/05/26 | 1257174 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
-2020/05/26 | 1388764 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
-2020/05/26 | 95265 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2020/05/26 | 110121 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2020/05/26 | 43425 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2020/05/26 | 47995 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2020/05/26 | 45696 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2020/05/26 | 50764 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
-2020/05/26 | 56655 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2020/05/26 | 61713 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2020/05/26 | 133093 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2020/05/26 | 152147 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2020/05/26 | 69818 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2020/05/26 | 73060 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2020/05/26 | 68636 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2020/05/26 | 77414 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
-2020/05/26 | 246433 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2020/05/26 | 281649 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2020/05/26 | 25392 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
-2020/05/26 | 28791 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2020/05/26 | 100563 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
-2020/05/26 | 116882 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2020/05/26 | 63243 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2020/05/26 | 72577 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2020/05/26 | 94368 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2020/05/26 | 110963 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2020/05/26 | 57979 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
-2020/05/26 | 64578 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2020/05/26 | 457705 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2020/05/26 | 545599 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2020/05/26 | 137118 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
-2020/05/26 | 150094 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2020/05/26 | 92918 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2020/05/26 | 108822 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2020/05/26 | 15946 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
-2020/05/26 | 17729 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
-2020/05/26 | 27754 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2020/05/26 | 29756 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
-2020/05/26 | 615388 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2020/05/26 | 670001 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2020/05/26 | 498731 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2020/05/26 | 561639 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2020/05/26 | 539210 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2020/05/26 | 574786 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
-2020/05/26 | 93574 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2020/05/26 | 102529 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
-2020/05/26 | 1736493 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2020/05/26 | 2009805 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2020/05/26 | 67262 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2020/05/26 | 73609 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2020/05/26 | 26948 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2020/05/26 | 31348 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2020/05/26 | 7504 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2020/05/26 | 8476 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2020/05/26 | 170202 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2020/05/26 | 185810 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2020/05/26 | 247775 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2020/05/26 | 281420 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2020/05/26 | 86978 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
-2020/05/26 | 92143 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2020/05/26 | 78096 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2020/05/26 | 86705 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
-2020/05/26 | 164996 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2020/05/26 | 185136 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2020/05/26 | 148863 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2020/05/26 | 168385 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
-2020/05/26 | 194863 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
-2020/05/26 | 177527 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2020/05/26 | 81386 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
-2020/05/26 | 92922 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2020/05/26 | 30991 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2020/05/26 | 34807 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
-2020/05/26 | 55802 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2020/05/26 | 63016 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2020/05/26 | 63187 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2020/05/26 | 69172 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
-2020/05/26 | 45645 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2020/05/26 | 52076 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2020/05/26 | 189235 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
-2020/05/26 | 206534 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
-2020/05/26 | 323365 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2020/05/26 | 358102 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
-2020/05/26 | 186843 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2020/05/26 | 193877 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2020/05/26 | 207040 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2020/05/26 | 243000 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2020/05/26 | 78168 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2020/05/26 | 87187 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2020/05/26 | 932281 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2020/05/26 | 1042742 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2020/05/26 | 19890 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2020/05/26 | 23523 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2020/05/26 | 31151 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2020/05/26 | 36658 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2020/05/26 | 63365 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
-2020/05/26 | 71649 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2020/05/26 | 42620 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
-2020/05/26 | 50938 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2020/05/26 | 1150838 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2020/05/26 | 1286407 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
-2020/05/26 | 41930 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2020/05/26 | 50918 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2020/05/26 | 74460 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-2.9.tar.lzma
-2020/05/26 | 82295 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64-2.9.tar.lzma
-2020/05/26 | 26752 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2020/05/26 | 29035 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2020/05/26 | 16118 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2020/05/26 | 17827 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2020/05/26 | 63166 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2020/05/26 | 69251 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2020/05/26 | 149713 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2020/05/26 | 163962 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
-2020/05/26 | 74810 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
-2020/05/26 | 84877 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2020/05/26 | 91542 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
-2020/05/26 | 96602 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2020/05/26 | 2555486 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2020/05/26 | 2686057 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2020/05/26 | 54977 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2020/05/26 | 61450 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
-2020/05/26 | 26504 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2020/05/26 | 32352 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2020/05/26 | 61699 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2020/05/26 | 65265 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2020/05/26 | 248464 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2020/05/26 | 278139 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2020/05/26 | 591011 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
-2020/05/26 | 630127 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2020/05/26 | 39168 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2020/05/26 | 42926 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/05/26 | 199951 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2020/05/26 | 1197091 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2020/05/26 | 1116686 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2020/05/26 | 13049 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2020/05/26 | 14037 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2020/05/27 | 536741 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2020/05/27 | 58559 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2020/05/27 | 66564 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2020/05/27 | 941128 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2020/05/27 | 1049745 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2020/05/27 | 28575 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2020/05/27 | 30786 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2020/05/27 | 29323 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2020/05/27 | 34939 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2020/05/27 | 49730 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2020/05/27 | 57269 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2020/05/27 | 84826 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2020/05/27 | 94351 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2020/05/27 | 62072 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2020/05/27 | 69345 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2020/05/27 | 26647 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2020/05/27 | 30216 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2020/05/27 | 328738 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2020/05/27 | 391509 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2020/05/27 | 32321 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2020/05/27 | 36419 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2020/05/27 | 71321 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2020/05/27 | 77908 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2020/05/27 | 203217 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2020/05/27 | 222868 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2020/05/27 | 169535 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2020/05/27 | 184302 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2020/05/27 | 52238 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2020/05/27 | 58598 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2020/05/27 | 20787 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2020/05/27 | 23006 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2020/05/27 | 460502 | systems/win32/miktex/tm/packages/next/miktex-doc-2.9.tar.lzma
+2020/05/27 | 41134 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2020/05/27 | 45952 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2020/05/27 | 273333 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2020/05/27 | 311644 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2020/05/27 | 40794 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2020/05/27 | 45081 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2020/05/27 | 115756 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2020/05/27 | 130481 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2020/05/27 | 1257173 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2020/05/27 | 1388764 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/05/27 | 95266 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2020/05/27 | 110122 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2020/05/27 | 43426 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2020/05/27 | 47996 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2020/05/27 | 45696 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2020/05/27 | 50765 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2020/05/27 | 56656 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2020/05/27 | 61712 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2020/05/27 | 133093 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2020/05/27 | 152145 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2020/05/27 | 69819 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2020/05/27 | 73061 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2020/05/27 | 68635 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2020/05/27 | 77413 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2020/05/27 | 246434 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2020/05/27 | 281650 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2020/05/27 | 25392 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2020/05/27 | 28792 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2020/05/27 | 100563 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2020/05/27 | 116881 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2020/05/27 | 63244 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2020/05/27 | 72577 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2020/05/27 | 94371 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2020/05/27 | 110964 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2020/05/27 | 57978 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2020/05/27 | 64576 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2020/05/27 | 457706 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2020/05/27 | 545600 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2020/05/27 | 137121 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2020/05/27 | 150094 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2020/05/27 | 92919 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2020/05/27 | 108823 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2020/05/27 | 15947 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2020/05/27 | 17730 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2020/05/27 | 27754 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2020/05/27 | 29756 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2020/05/27 | 615387 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2020/05/27 | 670001 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2020/05/27 | 498732 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2020/05/27 | 561640 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2020/05/27 | 539210 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2020/05/27 | 574788 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2020/05/27 | 93574 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2020/05/27 | 102529 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2020/05/27 | 1736494 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2020/05/27 | 2009807 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2020/05/27 | 67262 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2020/05/27 | 73610 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2020/05/27 | 26947 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2020/05/27 | 31350 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2020/05/27 | 7505 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2020/05/27 | 8476 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2020/05/27 | 170203 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2020/05/27 | 185810 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2020/05/27 | 247776 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2020/05/27 | 281421 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2020/05/27 | 86977 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2020/05/27 | 92145 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2020/05/27 | 78094 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2020/05/27 | 86705 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2020/05/27 | 164997 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2020/05/27 | 185136 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2020/05/27 | 148864 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2020/05/27 | 168386 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2020/05/27 | 194862 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2020/05/27 | 177528 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2020/05/27 | 81386 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2020/05/27 | 92922 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2020/05/27 | 30992 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2020/05/27 | 34806 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2020/05/27 | 55802 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2020/05/27 | 63016 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2020/05/27 | 63187 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2020/05/27 | 69172 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2020/05/27 | 45647 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2020/05/27 | 52077 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2020/05/27 | 189235 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2020/05/27 | 206536 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2020/05/27 | 323365 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2020/05/27 | 358100 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2020/05/27 | 186844 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2020/05/27 | 193880 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2020/05/27 | 207040 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2020/05/27 | 242999 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2020/05/27 | 78170 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2020/05/27 | 87187 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2020/05/27 | 932286 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2020/05/27 | 1042744 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2020/05/27 | 19891 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2020/05/27 | 23525 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2020/05/27 | 31151 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2020/05/27 | 36658 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2020/05/27 | 63366 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2020/05/27 | 71650 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2020/05/27 | 42619 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2020/05/27 | 50940 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2020/05/27 | 1150838 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2020/05/27 | 1286408 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2020/05/27 | 41931 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2020/05/27 | 50918 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2020/05/27 | 74461 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-2.9.tar.lzma
+2020/05/27 | 82296 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64-2.9.tar.lzma
+2020/05/27 | 26753 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2020/05/27 | 29035 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2020/05/27 | 16119 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2020/05/27 | 17828 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2020/05/27 | 63166 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2020/05/27 | 69252 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2020/05/27 | 149713 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2020/05/27 | 163964 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2020/05/27 | 74810 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2020/05/27 | 84877 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2020/05/27 | 91545 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2020/05/27 | 96601 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2020/05/27 | 2555486 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2020/05/27 | 2686057 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2020/05/27 | 54976 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2020/05/27 | 61451 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2020/05/27 | 26504 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2020/05/27 | 32353 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2020/05/27 | 61700 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2020/05/27 | 65266 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2020/05/27 | 248466 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2020/05/27 | 278139 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2020/05/27 | 591010 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2020/05/27 | 630129 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2020/05/27 | 39168 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2020/05/27 | 42926 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2020/05/27 | 199965 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2020/05/27 | 1197865 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2020/05/27 | 1116392 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2020/05/27 | 13050 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2020/05/27 | 14037 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
2019/03/12 | 1412 | systems/win32/miktex/tm/packages/nextpage.tar.lzma
-2020/05/26 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2020/05/27 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
2018/07/06 | 145915 | systems/win32/miktex/tm/packages/nexus-otf.tar.lzma
2017/03/30 | 191149 | systems/win32/miktex/tm/packages/nfssext-cfr.tar.lzma
2012/12/20 | 612251 | systems/win32/miktex/tm/packages/nicefilelist.tar.lzma
@@ -272538,7 +272369,7 @@
2008/11/07 | 35981 | systems/win32/miktex/tm/packages/prettyref.tar.lzma
2017/07/26 | 201385 | systems/win32/miktex/tm/packages/preview.tar.lzma
2019/06/20 | 375963 | systems/win32/miktex/tm/packages/prftree.tar.lzma
-2020/05/26 | 882 | systems/win32/miktex/tm/packages/pr.ini
+2020/05/27 | 882 | systems/win32/miktex/tm/packages/pr.ini
2010/09/27 | 248469 | systems/win32/miktex/tm/packages/printlen.tar.lzma
2008/06/17 | 77313 | systems/win32/miktex/tm/packages/proba.tar.lzma
2017/07/12 | 988486 | systems/win32/miktex/tm/packages/probsoln.tar.lzma
@@ -273675,9 +273506,9 @@
2019/08/12 | 14654 | systems/win32/w32tex/00FILES.euc
2019/08/12 | 14654 | systems/win32/w32tex/00FILES.sjis
2020/05/16 | 4915928 | systems/win32/w32tex/aleph-w32.tar.xz
-2020/05/25 | 65831464 | systems/win32/w32tex/biblatex-biber.tar.xz
+2020/05/26 | 66260848 | systems/win32/w32tex/biblatex-biber.tar.xz
2016/12/13 | 65971452 | systems/win32/w32tex/cbfonts.tar.xz
-2020/05/25 | 654293 | systems/win32/w32tex/ChangeLog
+2020/05/26 | 654956 | systems/win32/w32tex/ChangeLog
2009/08/03 | 141221 | systems/win32/w32tex/ChangeLog.0
2009/08/03 | 221890 | systems/win32/w32tex/ChangeLog.1
2009/08/03 | 116462 | systems/win32/w32tex/ChangeLog.2
@@ -273685,7 +273516,7 @@
2017/06/24 | 644754 | systems/win32/w32tex/ChangeLog.4
2020/05/05 | 22412296 | systems/win32/w32tex/cjkzr.tar.xz
2013/04/27 | 15858676 | systems/win32/w32tex/context-doc.tar.xz
-2020/05/19 | 139764036 | systems/win32/w32tex/context.tar.xz
+2020/05/26 | 139767520 | systems/win32/w32tex/context.tar.xz
2020/05/07 | 909872 | systems/win32/w32tex/cweb-w32.tar.xz
2020/03/02 | 6281164 | systems/win32/w32tex/datetime2.tar.xz
2020/04/28 | 838668 | systems/win32/w32tex/dvi2ps-w32.tar.xz
@@ -273701,12 +273532,12 @@
2020/04/03 | 29248268 | systems/win32/w32tex/latex.tar.xz
2020/04/28 | 996756 | systems/win32/w32tex/lcdf-typetools-w32.tar.xz
2020/05/23 | 393334480 | systems/win32/w32tex/ltxpkgdocs.tar.xz
-2020/05/25 | 34552628 | systems/win32/w32tex/ltxpkgs.tar.xz
+2020/05/26 | 34541104 | systems/win32/w32tex/ltxpkgs.tar.xz
2020/05/25 | 3808340 | systems/win32/w32tex/luajittex-dev-w32.tar.xz
-2020/05/25 | 3785060 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
+2020/05/25 | 3780524 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
2020/05/25 | 3813564 | systems/win32/w32tex/luajittex-w32.tar.xz
2020/05/25 | 18125756 | systems/win32/w32tex/luatex-dev-w32.tar.xz
-2020/05/25 | 17932588 | systems/win32/w32tex/luatex-exp-w32.tar.xz
+2020/05/25 | 17933352 | systems/win32/w32tex/luatex-exp-w32.tar.xz
2020/05/25 | 69259880 | systems/win32/w32tex/luatexja.tar.xz
2020/05/25 | 17914044 | systems/win32/w32tex/luatex-w32.tar.xz
2020/05/10 | 1663268 | systems/win32/w32tex/makeindex-w32.tar.xz
@@ -273719,9 +273550,9 @@
2020/04/28 | 1228212 | systems/win32/w32tex/omegaj-w32.tar.xz
2020/03/01 | 355876 | systems/win32/w32tex/otfbeta.tar.xz
2020/05/16 | 20741596 | systems/win32/w32tex/pdftex-w32.tar.xz
-2020/05/17 | 80636148 | systems/win32/w32tex/pgfcontrib.tar.xz
+2020/05/26 | 80699768 | systems/win32/w32tex/pgfcontrib.tar.xz
2015/01/26 | 189072 | systems/win32/w32tex/plain2-2.54-w32.tar.xz
-2020/04/13 | 2820836 | systems/win32/w32tex/platex.tar.xz
+2020/05/26 | 2823676 | systems/win32/w32tex/platex.tar.xz
2020/03/20 | 1598792 | systems/win32/w32tex/pmx.tar.xz
2020/04/28 | 1169216 | systems/win32/w32tex/pstoedit-w32.tar.xz
2020/05/02 | 274450768 | systems/win32/w32tex/pstricks.tar.xz
@@ -273732,7 +273563,7 @@
2019/04/15 | 499188 | systems/win32/w32tex/sam2p-w32.tar.xz
2020/01/24 | 24929772 | systems/win32/w32tex/t1fonts.tar.xz
2020/01/19 | 135584 | systems/win32/w32tex/t1utils-w32.tar.xz
-2020/05/23 | 2479868 | systems/win32/w32tex/tex4htk-w32.tar.xz
+2020/05/26 | 2488232 | systems/win32/w32tex/tex4htk-w32.tar.xz
2018/06/20 | 15940044 | systems/win32/w32tex/tex-gyre.tar.xz
2020/05/25 | 4014628 | systems/win32/w32tex/texinfo-w32.tar.xz
2020/04/20 | 2050855 | systems/win32/w32tex/texinstwin.zip
@@ -273751,7 +273582,7 @@
2013/04/08 | 722652 | systems/win32/w32tex/utf.tar.xz
2013/04/08 | 13748 | systems/win32/w32tex/vf-n2bk.tar.xz
2020/03/27 | 38319492 | systems/win32/w32tex/w32tex-src.tar.xz
-2020/05/21 | 99166400 | systems/win32/w32tex/web2c-lib.tar.xz
+2020/05/26 | 99161448 | systems/win32/w32tex/web2c-lib.tar.xz
2020/05/15 | 44050204 | systems/win32/w32tex/web2c-w32.tar.xz
2020/04/28 | 810820 | systems/win32/w32tex/win64/aleph-w64.tar.xz
2019/12/09 | 22317480 | systems/win32/w32tex/win64/biblatex-biber-w64.tar.xz
@@ -273768,10 +273599,10 @@
2019/11/11 | 2568 | systems/win32/w32tex/win64/latex-dev-w64.tar.xz
2020/04/28 | 800220 | systems/win32/w32tex/win64/lcdf-typetools-w64.tar.xz
2020/05/25 | 3445184 | systems/win32/w32tex/win64/luajittex-dev-w64.tar.xz
-2020/05/25 | 3444032 | systems/win32/w32tex/win64/luajittex-exp-w64.tar.xz
+2020/05/25 | 3434060 | systems/win32/w32tex/win64/luajittex-exp-w64.tar.xz
2020/05/25 | 3445904 | systems/win32/w32tex/win64/luajittex-w64.tar.xz
2020/05/25 | 3114116 | systems/win32/w32tex/win64/luatex-dev-w64.tar.xz
-2020/05/25 | 3114908 | systems/win32/w32tex/win64/luatex-exp-w64.tar.xz
+2020/05/25 | 3121284 | systems/win32/w32tex/win64/luatex-exp-w64.tar.xz
2020/05/25 | 3104980 | systems/win32/w32tex/win64/luatex-w64.tar.xz
2020/05/10 | 1140264 | systems/win32/w32tex/win64/makeindex-w64.tar.xz
2020/04/28 | 431044 | systems/win32/w32tex/win64/mftools-w64.tar.xz
@@ -273891,7 +273722,7 @@
2004/06/04 | 404 | tds/tds.sed
2004/06/23 | 65418 | tds/tds.tex
2019/05/29 | 304264 | tds.zip
-2020/05/27 | 186 | timestamp
+2020/05/28 | 186 | timestamp
2002/08/26 | 61898 | usergrps/dante/antrag.pdf
2002/08/26 | 118217 | usergrps/dante/antrag.ps
2017/06/30 | 917 | usergrps/dante/dtk/doc/beispiel.bib
diff --git a/FILES.byname.gz b/FILES.byname.gz
index 9c68f14e08..a49fbe0dbf 100644
--- a/FILES.byname.gz
+++ b/FILES.byname.gz
Binary files differ
diff --git a/FILES.last07days b/FILES.last07days
index 7d287b74c7..317e1e46b9 100644
--- a/FILES.last07days
+++ b/FILES.last07days
@@ -1,252 +1,1015 @@
+2020/05/27 | 99 | support/texlab/src/hover/latex/mod.rs
+2020/05/27 | 99 | graphics/pgf/contrib/pgf-pie/legend.tex
+2020/05/27 | 997577 | install/macros/latex/contrib/achemso.tds.zip
+2020/05/27 | 993572 | support/bib2gls/texparserlib.jar
+2020/05/27 | 992 | support/texlab/src/link/mod.rs
+2020/05/27 | 9921 | support/texlab/src/syntax/bibtex/ast.rs
+2020/05/27 | 9884 | support/texlab/src/syntax/latex/ast.rs
+2020/05/27 | 986 | support/bib2gls/examples/sample-hierarchical.tex
+2020/05/27 | 9810 | macros/latex-dev/base/ltnews21.tex
+2020/05/27 | 972412 | macros/latex-dev/base/ltnews.pdf
+2020/05/27 | 96601 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
+2020/05/27 | 9627 | support/texlab/tests/integration/issues.rs
+2020/05/27 | 9627743 | support/bib2gls.zip
+2020/05/27 | 9614 | support/bib2gls/convertgls2bib.1
+2020/05/27 | 959952 | support/bib2gls/src/bib2gls.tex
+2020/05/27 | 9562 | macros/latex-dev/base/ltcntrl.dtx
+2020/05/27 | 9551 | support/latexdiff/latexrevise.1
+2020/05/27 | 95266 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
+2020/05/27 | 94 | graphics/pgf/contrib/pgf-pie/colorwheel.tex
+2020/05/27 | 9494 | macros/latex-dev/required/tools/shellesc.dtx
+2020/05/27 | 9473 | fonts/utilities/fontools/bin/splitttc
+2020/05/27 | 9442 | language/marathi/book.tex
+2020/05/27 | 94371 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
+2020/05/27 | 94351 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
+2020/05/27 | 941128 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
+2020/05/27 | 9401 | macros/latex-dev/base/syntonly.dtx
+2020/05/27 | 9375 | language/marathi/article.tex
+2020/05/27 | 9374 | macros/latex-dev/base/preload.dtx
+2020/05/27 | 936 | support/texlab/src/tex/tectonic.rs
+2020/05/27 | 93574 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
+2020/05/27 | 9356 | support/bib2gls/src/bib2gls.pod
+2020/05/27 | 932286 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
+2020/05/27 | 92922 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
+2020/05/27 | 92919 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
+2020/05/27 | 92145 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
+2020/05/27 | 9202 | macros/latex-dev/required/amsmath/amsopn.dtx
+2020/05/27 | 9181 | graphics/pgf/contrib/pgf-pie/logo.png
+2020/05/27 | 91545 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
+2020/05/27 | 913 | support/bib2gls/examples/sample-textsymbols2.tex
+2020/05/27 | 912 | support/texlab/src/highlight/mod.rs
+2020/05/27 | 9068 | macros/latex-dev/base/lppl-1-0.txt
+2020/05/27 | 8982 | macros/latex-dev/required/tools/rawfonts.dtx
+2020/05/27 | 898098 | macros/latex/contrib/achemso.zip
+2020/05/27 | 89720 | macros/latex-dev/base/slides.dtx
+2020/05/27 | 89393 | support/bib2gls/examples/sample-constants.pdf
+2020/05/27 | 89386 | macros/latex-dev/base/utf8ienc.dtx
+2020/05/27 | 8864 | macros/latex-dev/base/ltnews17.tex
+2020/05/27 | 88411 | macros/latex-dev/base/lttextcomp.dtx
+2020/05/27 | 882 | systems/win32/miktex/tm/packages/pr.ini
+2020/05/27 | 87724 | language/marathi.zip
+2020/05/27 | 877210 | macros/latex/contrib/poemscol.zip
+2020/05/27 | 8770 | macros/latex-dev/base/format.ins
+2020/05/27 | 875835 | macros/latex/contrib/nicematrix/nicematrix.pdf
+2020/05/27 | 8737 | macros/latex-dev/base/ltthm.dtx
+2020/05/27 | 87187 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
+2020/05/27 | 86977 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
+2020/05/27 | 86705 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
+2020/05/27 | 8654 | macros/latex-dev/required/amsmath/amsbsy.dtx
+2020/05/27 | 8632 | macros/latex-dev/base/oldlfont.dtx
+2020/05/27 | 85087 | macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty
+2020/05/27 | 8493 | macros/latex-dev/base/texpert.txt
+2020/05/27 | 84894 | support/texlab/texlab.pdf
+2020/05/27 | 84877 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
+2020/05/27 | 84826 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
+2020/05/27 | 8476 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
+2020/05/27 | 84480 | graphics/pgf/contrib/pgf-pie/pgf-pie-manual.pdf
+2020/05/27 | 833850 | support/bib2gls/src/texparser-src.zip
+2020/05/27 | 8329 | support/texlab/src/citeproc/name/mod.rs
+2020/05/27 | 82 | graphics/pgf/contrib/pgf-pie/hide-number.tex
+2020/05/27 | 82371 | macros/latex-dev/required/amsmath/testmath.tex
+2020/05/27 | 82296 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64-2.9.tar.lzma
+2020/05/27 | 8210 | macros/latex/contrib/biblatex-contrib/biblatex-software/software.bbx
+2020/05/27 | 81 | graphics/pgf/contrib/pgf-pie/text-inside.tex
+2020/05/27 | 81386 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2020/05/27 | 8100 | macros/latex-dev/base/ltnews.tex
+2020/05/27 | 80 | graphics/pgf/contrib/pgf-pie/scalefont.tex
+2020/05/27 | 8063 | support/texlab/src/reference/bibtex_string.rs
+2020/05/27 | 8032 | fonts/utilities/fontools/share/fontools_lgr.enc
+2020/05/27 | 79110 | macros/latex-dev/base/ltfssbas.dtx
+2020/05/27 | 78 | graphics/pgf/contrib/pgf-pie/text.tex
+2020/05/27 | 78170 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
+2020/05/27 | 780 | support/bib2gls/examples/sample-msymbols.tex
+2020/05/27 | 78094 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
+2020/05/27 | 77908 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
+2020/05/27 | 77413 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2020/05/27 | 773 | support/texlab/src/diagnostics/mod.rs
+2020/05/27 | 7704 | systems/texlive/tlnet/archive/biblatex-unified.r55290.tar.xz
+2020/05/27 | 76 | graphics/pgf/contrib/pgf-pie/square.tex
+2020/05/27 | 75 | graphics/pgf/contrib/pgf-pie/polar.tex
+2020/05/27 | 75299 | support/texlab/data/lang_data.json
+2020/05/27 | 7526 | macros/latex-dev/base/ltxguide.cls
+2020/05/27 | 7505 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
+2020/05/27 | 74810 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
+2020/05/27 | 74810 | macros/latex-dev/base/fntguide.tex
+2020/05/27 | 74619 | language/marathi/marathi.pdf
+2020/05/27 | 74461 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-2.9.tar.lzma
+2020/05/27 | 7418 | support/texlab/src/completion/latex/label.rs
+2020/05/27 | 7406 | support/texlab/src/completion/latex/citation.rs
+2020/05/27 | 73610 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
+2020/05/27 | 73484 | fonts/utilities/fontools/doc/autoinst.pdf
+2020/05/27 | 7326 | macros/latex-dev/base/ltnews20.tex
+2020/05/27 | 7309318 | support/texlab.zip
+2020/05/27 | 73061 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
+2020/05/27 | 727493 | macros/latex/contrib/poemscol/poemscol.pdf
+2020/05/27 | 726550 | support/bib2gls/bib2gls-begin.pdf
+2020/05/27 | 72577 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
+2020/05/27 | 7222 | macros/latex-dev/base/exscale.dtx
+2020/05/27 | 72225 | macros/latex-dev/required/tools/longtable.dtx
+2020/05/27 | 7200 | macros/latex-dev/base/sample2e.tex
+2020/05/27 | 71650 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
+2020/05/27 | 71321 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
+2020/05/27 | 71290 | macros/latex-dev/required/tools/verbatim.dtx
+2020/05/27 | 7013 | support/texlab/src/reference/bibtex_entry.rs
+2020/05/27 | 6 | support/texlab/rust-toolchain
+2020/05/27 | 69854 | macros/latex-dev/base/ltfssini.dtx
+2020/05/27 | 69819 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
+2020/05/27 | 69804 | support/bib2gls/examples/sample-textsymbols.pdf
+2020/05/27 | 69720 | macros/latex-dev/required/amsmath/amstex.sty
+2020/05/27 | 6952868 | install/macros/latex-dev/required/latex-tools-dev.tds.zip
+2020/05/27 | 69345 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
+2020/05/27 | 69252 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
+2020/05/27 | 69172 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
+2020/05/27 | 69051 | macros/latex-dev/base/clsguide.tex
+2020/05/27 | 68 | graphics/pgf/contrib/pgf-pie/first-pie.tex
+2020/05/27 | 6872 | macros/latex-dev/base/ltnews13.tex
+2020/05/27 | 6871586 | macros/latex-dev/required/tools.zip
+2020/05/27 | 68635 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
+2020/05/27 | 6858 | support/texlab/src/syntax/lang_data.rs
+2020/05/27 | 68428 | macros/latex-dev/base/usrguide.tex
+2020/05/27 | 68288 | macros/latex-dev/required/tools/tools-overview.pdf
+2020/05/27 | 6795 | macros/latex-dev/required/tools/delarray.dtx
+2020/05/27 | 6764 | macros/latex-dev/base/slides.ins
+2020/05/27 | 67333 | macros/latex-dev/base/ltfsstrc.dtx
+2020/05/27 | 6732 | support/texlab/src/build.rs
+2020/05/27 | 67262 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
+2020/05/27 | 6715 | macros/latex-dev/base/latexsym.dtx
+2020/05/27 | 67011 | support/bib2gls/examples/sample-textsymbols2.pdf
+2020/05/27 | 670001 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
+2020/05/27 | 66967 | macros/latex-dev/required/graphics/graphics.dtx
+2020/05/27 | 66564 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2020/05/27 | 6655 | support/texlab/src/syntax/text.rs
+2020/05/27 | 6654 | macros/latex-dev/base/alltt.dtx
+2020/05/27 | 6532 | support/texlab/tests/integration/workspace_symbol.rs
+2020/05/27 | 65266 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
+2020/05/27 | 64576 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
+2020/05/27 | 6440 | macros/latex-dev/required/amsmath/subeqn.tex
+2020/05/27 | 643 | support/texlab/texlab.1
+2020/05/27 | 640 | support/bib2gls/examples/terms.bib
+2020/05/27 | 6363 | macros/latex-dev/base/newlfont.dtx
+2020/05/27 | 6358 | support/texlab/src/symbol/project_order.rs
+2020/05/27 | 63444 | macros/latex-dev/base/ltluatex.dtx
+2020/05/27 | 63366 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2020/05/27 | 63244 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
+2020/05/27 | 63244 | systems/texlive/tlnet/archive/domitian.doc.r55286.tar.xz
+2020/05/27 | 631 | support/texlab/src/syntax/latexindent.rs
+2020/05/27 | 63187 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
+2020/05/27 | 63166 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
+2020/05/27 | 630 | support/bib2gls/bib2gls.sh
+2020/05/27 | 63016 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
+2020/05/27 | 630129 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
+2020/05/27 | 629536 | macros/latex-dev/base/doc.pdf
+2020/05/27 | 6291 | support/texlab/src/reference/latex_label.rs
+2020/05/27 | 6274 | macros/latex-dev/base/ltnews14.tex
+2020/05/27 | 6243 | support/texlab/crates/jsonrpc_derive/src/lib.rs
+2020/05/27 | 62436 | macros/latex-dev/base/letter.dtx
+2020/05/27 | 6236 | macros/latex-dev/required/tools/xr.dtx
+2020/05/27 | 6225 | support/texlab/src/rename/bibtex_entry.rs
+2020/05/27 | 62072 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
+2020/05/27 | 61 | support/texlab/src/hover/bibtex/mod.rs
+2020/05/27 | 61712 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
+2020/05/27 | 61700 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
+2020/05/27 | 615387 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
+2020/05/27 | 61451 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
+2020/05/27 | 61388 | systems/texlive/tlnet/archive/tikz-lake-fig.doc.r55288.tar.xz
+2020/05/27 | 61221 | macros/latex-dev/base/ltfssdcl.dtx
+2020/05/27 | 6104 | systems/texlive/tlnet/archive/collection-latexextra.r55291.tar.xz
+2020/05/27 | 6097 | support/texlab/src/completion/latex/argument.rs
+2020/05/27 | 6076 | support/texlab/src/citeproc/mod.rs
+2020/05/27 | 60334 | macros/latex-dev/base/fontdef.dtx
+2020/05/27 | 6021 | support/texlab/tests/integration/rename.rs
+2020/05/27 | 5973 | support/texlab/src/completion/latex/user.rs
+2020/05/27 | 59410 | macros/latex-dev/required/tools/bm.dtx
+2020/05/27 | 591010 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
+2020/05/27 | 5865 | macros/latex-dev/base/ltidxglo.dtx
+2020/05/27 | 5860 | macros/latex-dev/required/amsmath/ams-internal.txt
+2020/05/27 | 58598 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
+2020/05/27 | 58559 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
+2020/05/27 | 5854 | macros/latex-dev/base/ltpar.dtx
+2020/05/27 | 5852 | support/bib2gls/README.md
+2020/05/27 | 5840 | macros/latex-dev/base/ltnews15.tex
+2020/05/27 | 5797 | macros/latex-dev/required/tools/somedefs.dtx
+2020/05/27 | 57978 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
+2020/05/27 | 5777 | macros/latex-dev/base/ltnews16.tex
+2020/05/27 | 576 | support/bib2gls/examples/binaryoperators.bib
+2020/05/27 | 575 | support/latexdiff/contrib/README.latexchanges
+2020/05/27 | 574788 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
+2020/05/27 | 57368 | macros/latex-dev/base/ltdefns.dtx
+2020/05/27 | 57269 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
+2020/05/27 | 5716 | macros/latex-dev/base/inputenc.ins
+2020/05/27 | 5702 | support/texlab/src/syntax/bibtex/lexer.rs
+2020/05/27 | 5696 | macros/latex-dev/base/ltnews08.tex
+2020/05/27 | 5684 | macros/latex-dev/required/amsmath/changes.txt
+2020/05/27 | 5682 | macros/latex-dev/required/tools/tools.ins
+2020/05/27 | 56717 | macros/latex-dev/required/tools/changes.txt
+2020/05/27 | 56656 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
+2020/05/27 | 5660 | macros/latex-dev/base/ltnews10.tex
+2020/05/27 | 56336 | support/bib2gls/examples/sample-markuplanguages.pdf
+2020/05/27 | 56296 | support/texlab/src/citeproc/apa.csl
+2020/05/27 | 5618 | support/texlab/src/syntax/latex/parser.rs
+2020/05/27 | 561640 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
+2020/05/27 | 5609 | macros/latex-dev/base/ltnews05.tex
+2020/05/27 | 55964 | support/texlab/src/diagnostics/build.rs
+2020/05/27 | 55802 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
+2020/05/27 | 557 | support/bib2gls/examples/unaryoperators.bib
+2020/05/27 | 5530 | macros/latex-dev/base/ltnews11.tex
+2020/05/27 | 5520 | support/bib2gls/examples/sample-multi1.tex
+2020/05/27 | 5515 | macros/latex-dev/base/graphpap.dtx
+2020/05/27 | 5507 | macros/latex-dev/base/ltnews27.tex
+2020/05/27 | 5507 | macros/latex-dev/base/ltnews04.tex
+2020/05/27 | 5500333 | systems/texlive/tlnet/install-tl-unx.tar.gz
+2020/05/27 | 54976 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
+2020/05/27 | 54758 | support/bib2gls/examples/sample-units2.pdf
+2020/05/27 | 5474 | macros/latex-dev/base/ltnews25.tex
+2020/05/27 | 545600 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
+2020/05/27 | 5455 | support/bib2gls/examples/films.bib
+2020/05/27 | 5443 | support/texlab/src/hover/latex/citation.rs
+2020/05/27 | 543923 | support/latexdiff.zip
+2020/05/27 | 5430 | graphics/pgf/contrib/pgf-pie/pgf-pie-manual.tex
+2020/05/27 | 5426 | macros/latex-dev/base/ltnews07.tex
+2020/05/27 | 5418 | macros/latex-dev/base/ltnews12.tex
+2020/05/27 | 5402 | support/texlab/src/definition/latex_label.rs
+2020/05/27 | 5401 | support/texlab/src/completion/bibtex/field_name.rs
+2020/05/27 | 53 | support/texlab/src/completion/bibtex/mod.rs
+2020/05/27 | 539210 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
+2020/05/27 | 5391 | macros/latex-dev/base/ltnews06.tex
+2020/05/27 | 536 | support/texlab/src/lib.rs
+2020/05/27 | 536741 | systems/win32/miktex/tm/packages/next/files.csv.lzma
+2020/05/27 | 536491 | systems/win32/miktex/tm/packages/files.csv.lzma
+2020/05/27 | 5354 | macros/latex-dev/base/latexrelease.ins
+2020/05/27 | 5339 | support/texlab/src/completion/latex/import.rs
+2020/05/27 | 5328 | support/texlab/src/definition/latex_cmd.rs
+2020/05/27 | 5323 | macros/latex-dev/required/amsmath/ams-external.txt
+2020/05/27 | 53174 | macros/latex-dev/required/tools/calc.dtx
+2020/05/27 | 53015 | support/bib2gls/examples/sample-units1.pdf
+2020/05/27 | 5296 | support/latexdiff/README
+2020/05/27 | 5294 | macros/latex-dev/base/ltnews09.tex
+2020/05/27 | 5284 | macros/latex-dev/base/ltnews02.tex
+2020/05/27 | 52814 | macros/latex-dev/base/encguide.tex
+2020/05/27 | 5275 | macros/latex-dev/base/cmextra.ins
+2020/05/27 | 5268 | support/texlab/src/definition/bibtex_string.rs
+2020/05/27 | 52532 | macros/latex-dev/base/lb2.err
+2020/05/27 | 5239 | macros/latex-dev/base/ltnews01.tex
+2020/05/27 | 5232 | support/texlab/src/symbol/mod.rs
+2020/05/27 | 52238 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
+2020/05/27 | 5213 | macros/latex-dev/required/tools/tools-overview.tex
+2020/05/27 | 520906 | macros/latex-dev/base/classes.pdf
+2020/05/27 | 52077 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
+2020/05/27 | 5201 | macros/latex-dev/base/ltnews03.tex
+2020/05/27 | 5177 | support/texlab/src/syntax/latex/lexer.rs
+2020/05/27 | 514502 | macros/latex/contrib/achemso/achemso.pdf
+2020/05/27 | 51314 | macros/latex-dev/base/ltfloat.dtx
+2020/05/27 | 511470 | support/bib2gls/src/bib2gls.bib
+2020/05/27 | 5112 | support/texlab/src/symbol/bibtex_entry.rs
+2020/05/27 | 50940 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
+2020/05/27 | 50918 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
+2020/05/27 | 50893 | macros/latex-dev/base/ltpictur.dtx
+2020/05/27 | 50765 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
+2020/05/27 | 50759 | macros/latex-dev/required/graphics/drivers.dtx
+2020/05/27 | 50469 | support/bib2gls/examples/sample-bacteria.pdf
+2020/05/27 | 5044 | macros/latex-dev/base/latexsym.ins
+2020/05/27 | 50280 | macros/luatex/latex/cloze/cloze.dtx
+2020/05/27 | 50259 | support/bib2gls/examples/sample-chemical.pdf
+2020/05/27 | 500199 | macros/latex-dev/base/ltnews31.pdf
+2020/05/27 | 499776 | systems/texlive/tlnet/archive/pst-circ.doc.r55289.tar.xz
+2020/05/27 | 498732 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
+2020/05/27 | 49730 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
+2020/05/27 | 49676 | support/bib2gls/examples/sample-nested.pdf
+2020/05/27 | 49667 | support/bib2gls/examples/sample-hierarchical.pdf
+2020/05/27 | 4965 | macros/latex-dev/required/tools/fileerr.dtx
+2020/05/27 | 4952 | macros/latex-dev/base/lthyphen.dtx
+2020/05/27 | 4948 | support/texlab/src/completion/bibtex/cmd.rs
+2020/05/27 | 49272 | support/latexdiff/latexdiff.1
+2020/05/27 | 491245 | macros/latex-dev/base/ltnews30.pdf
+2020/05/27 | 491025 | macros/latex-dev/required/tools/multicol.pdf
+2020/05/27 | 49018 | support/bib2gls/examples/sample-authors.pdf
+2020/05/27 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+2020/05/27 | 48875 | macros/latex-dev/base/ltfssaxes.dtx
+2020/05/27 | 4829 | support/texlab/src/hover/bibtex/string_reference.rs
+2020/05/27 | 4828 | support/texlab/src/folding/bibtex_decl.rs
+2020/05/27 | 481282 | macros/latex-dev/required/tools/array.pdf
+2020/05/27 | 47996 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
+2020/05/27 | 4797 | support/texlab/src/completion/bibtex/entry_type.rs
+2020/05/27 | 47759 | macros/latex-dev/base/ltplain.dtx
+2020/05/27 | 47754 | support/bib2gls/examples/sample-people.pdf
+2020/05/27 | 477230 | macros/latex/contrib/poemscol/poemscol.dtx
+2020/05/27 | 47704 | macros/latex-dev/base/lttab.dtx
+2020/05/27 | 4769 | support/texlab/benches/benchmarks/completion.rs
+2020/05/27 | 476890 | macros/latex-dev/base/ltnews32.pdf
+2020/05/27 | 4767 | support/texlab/src/protocol/capabilities.rs
+2020/05/27 | 4762 | macros/latex-dev/base/ltlength.dtx
+2020/05/27 | 475924 | macros/latex-dev/required/amsmath/amsldoc.pdf
+2020/05/27 | 47291 | macros/latex-dev/base/ltmiscen.dtx
+2020/05/27 | 47253 | support/bib2gls/examples/sample-citations.pdf
+2020/05/27 | 470217 | macros/latex-dev/base/docstrip.pdf
+2020/05/27 | 4692754 | support/bib2gls/bib2gls.pdf
+2020/05/27 | 4663 | support/texlab/tests/integration/link.rs
+2020/05/27 | 4649 | macros/latex-dev/base/ltexpl.dtx
+2020/05/27 | 4630 | support/texlab/src/completion/latex/combinators.rs
+2020/05/27 | 4624 | support/texlab/src/rename/latex_env.rs
+2020/05/27 | 4605 | support/texlab/src/citeproc/bibutils.rs
+2020/05/27 | 460502 | systems/win32/miktex/tm/packages/next/miktex-doc-2.9.tar.lzma
+2020/05/27 | 45952 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
+2020/05/27 | 457706 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
+2020/05/27 | 45696 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
+2020/05/27 | 45647 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
+2020/05/27 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+2020/05/27 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
+2020/05/27 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
+2020/05/27 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
+2020/05/27 | 45246 | macros/latex-dev/base/ltspace.dtx
+2020/05/27 | 45081 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
+2020/05/27 | 4454 | support/latexdiff/contrib/latexdiff-wrap
+2020/05/27 | 4446 | support/bib2gls/examples/people.bib
+2020/05/27 | 44445 | support/bib2gls/bib2gls-en.xml
+2020/05/27 | 4426 | support/texlab/src/protocol/codec.rs
+2020/05/27 | 4399 | support/texlab/src/rename/latex_label.rs
+2020/05/27 | 4392 | macros/latex-dev/base/ec.ins
+2020/05/27 | 43637 | macros/latex-dev/base/cmfonts.fdd
+2020/05/27 | 434816 | systems/texlive/tlnet/archive/biblatex-unified.doc.r55290.tar.xz
+2020/05/27 | 43454 | macros/latex-dev/required/tools/theorem.dtx
+2020/05/27 | 4343 | macros/latex-dev/required/amsmath/amsxtra.dtx
+2020/05/27 | 43426 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
+2020/05/27 | 433006 | macros/latex-dev/base/ltnews29.pdf
+2020/05/27 | 4326 | macros/latex-dev/base/cmfonts.ins
+2020/05/27 | 4320 | systems/texlive/tlnet/archive/tikz-lake-fig.r55288.tar.xz
+2020/05/27 | 4304 | macros/latex-dev/base/ltalloc.dtx
+2020/05/27 | 429 | support/texlab/crates/jsonrpc/Cargo.toml
+2020/05/27 | 4294 | support/texlab/src/citeproc/name/parser.lalrpop
+2020/05/27 | 42926 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
+2020/05/27 | 428947 | macros/latex-dev/required/amsmath/testmath.pdf
+2020/05/27 | 42708 | macros/latex-dev/base/changes.old.txt
+2020/05/27 | 42619 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
+2020/05/27 | 4258 | support/texlab/src/completion/util.rs
+2020/05/27 | 4256 | macros/latex-dev/base/newdc.ins
+2020/05/27 | 4223 | macros/latex-dev/base/docstrip.ins
+2020/05/27 | 4221 | macros/latex-dev/base/latex209.ins
+2020/05/27 | 42214 | macros/latex-dev/base/ltfiles.dtx
+2020/05/27 | 4217 | support/texlab/src/tex/mod.rs
+2020/05/27 | 41931 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
+2020/05/27 | 4172 | support/latexdiff/doc/example-diff.tex
+2020/05/27 | 4171 | macros/latex-dev/base/ltnews19.tex
+2020/05/27 | 41145 | support/bib2gls/examples/sample-units3.pdf
+2020/05/27 | 41134 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
+2020/05/27 | 4095 | support/texlab/src/completion/latex/include.rs
+2020/05/27 | 4089 | macros/latex-dev/base/classes.ins
+2020/05/27 | 4080 | macros/latex-dev/base/lablst.tex
+2020/05/27 | 40794 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
+2020/05/27 | 4078 | support/bib2gls/src/bib2gls-cite.bib
+2020/05/27 | 4062 | macros/latex-dev/required/graphics/epsfig.dtx
+2020/05/27 | 40589 | macros/latex-dev/base/ltfinal.dtx
+2020/05/27 | 4053 | support/bib2gls/examples/usergroups.bib
+2020/05/27 | 404 | support/bib2gls/convertgls2bib.sh
+2020/05/27 | 40492 | macros/latex-dev/base/ltboxes.dtx
+2020/05/27 | 4045 | support/bib2gls/src/convertgls2bib.pod
+2020/05/27 | 4040 | systems/texlive/tlnet/archive/utf8add.r55291.tar.xz
+2020/05/27 | 4009 | support/texlab/src/syntax/lsp_kind.rs
+2020/05/27 | 4000 | support/texlab/src/rename/latex_cmd.rs
+2020/05/27 | 398989 | macros/latex-dev/base/usrguide.pdf
+2020/05/27 | 39702 | macros/latex-dev/required/tools/ftnright.dtx
+2020/05/27 | 3962 | macros/latex-dev/base/olddc.ins
+2020/05/27 | 39395 | macros/latex-dev/required/graphics/grfguide.tex
+2020/05/27 | 39257 | support/bib2gls/convertgls2bib.jar
+2020/05/27 | 39168 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
+2020/05/27 | 391509 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
+2020/05/27 | 390028 | systems/texlive/tlnet/archive/utf8add.doc.r55291.tar.xz
+2020/05/27 | 389337 | macros/latex/contrib/nicematrix/nicematrix.dtx
+2020/05/27 | 3890 | support/texlab/tests/integration/reference.rs
+2020/05/27 | 38726 | macros/latex-dev/base/ltmath.dtx
+2020/05/27 | 38533 | macros/latex-dev/base/latex209.dtx
+2020/05/27 | 383566 | macros/latex-dev/required/amsmath/amsmath.pdf
+2020/05/27 | 3814 | support/texlab/src/definition/latex_citation.rs
+2020/05/27 | 3814 | macros/latex-dev/required/graphics/lscape.dtx
+2020/05/27 | 37980 | macros/latex-dev/base/latexchanges.tex
+2020/05/27 | 3783 | macros/latex-dev/base/tulm.ins
+2020/05/27 | 3771 | support/texlab/tests/integration/prepare_rename.rs
+2020/05/27 | 3756 | support/texlab/src/hover/latex/label.rs
+2020/05/27 | 3743 | support/texlab/src/completion/latex/tikz_lib.rs
+2020/05/27 | 3731 | macros/latex-dev/base/ltlogos.dtx
+2020/05/27 | 3729 | fonts/utilities/fontools/share/fontools_t2b.enc
+2020/05/27 | 372505 | macros/latex-dev/base/clsguide.pdf
+2020/05/27 | 369 | macros/latex-dev/required/amsmath/manifest.txt
+2020/05/27 | 368 | graphics/pgf/contrib/pgf-pie/COPYING
+2020/05/27 | 368229 | macros/latex-dev/base/ltnews28.pdf
+2020/05/27 | 3672 | support/bib2gls/examples/mathsobjects.bib
+2020/05/27 | 36658 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
+2020/05/27 | 3651 | fonts/utilities/fontools/share/fontools_t2c.enc
+2020/05/27 | 36419 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
+2020/05/27 | 362836 | macros/latex-dev/base/ltnews26.pdf
+2020/05/27 | 361810 | macros/latex-dev/base/fntguide.pdf
+2020/05/27 | 36154 | macros/latex-dev/base/ltlists.dtx
+2020/05/27 | 36003 | macros/latex-dev/base/ltnews18.pdf
+2020/05/27 | 359004 | macros/latex/contrib/achemso/achemso-demo.pdf
+2020/05/27 | 35881 | macros/latex-dev/required/tools/tabularx.dtx
+2020/05/27 | 358100 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
+2020/05/27 | 355393 | macros/latex/contrib/nicematrix/nicematrix-french.pdf
+2020/05/27 | 354736 | macros/latex-dev/required/tools/varioref.pdf
+2020/05/27 | 3530 | support/texlab/crates/jsonrpc/src/server.rs
+2020/05/27 | 351660 | macros/latex-dev/base/slides.pdf
+2020/05/27 | 35162 | macros/latex-dev/base/ltdirchk.dtx
+2020/05/27 | 3514 | macros/latex-dev/base/README.md
+2020/05/27 | 35149 | support/texlab/LICENSE
+2020/05/27 | 3512 | support/texlab/src/folding/latex_section.rs
+2020/05/27 | 350706 | macros/latex-dev/base/changes.txt
+2020/05/27 | 349927 | macros/latex-dev/required/tools/longtable.pdf
+2020/05/27 | 3496 | support/bib2gls/examples/books.bib
+2020/05/27 | 34939 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
+2020/05/27 | 3484 | support/texlab/src/highlight/latex_label.rs
+2020/05/27 | 3480 | support/texlab/src/tex/miktex.rs
+2020/05/27 | 34806 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
+2020/05/27 | 3467 | support/texlab/src/symbol/types.rs
+2020/05/27 | 346379 | macros/latex-dev/required/tools/ftnright.pdf
+2020/05/27 | 3447 | macros/latex/contrib/biblatex-contrib/biblatex-software/biblio.bib
+2020/05/27 | 3440 | support/texlab/src/hover/bibtex/entry_type.rs
+2020/05/27 | 3436 | macros/latex-dev/base/makeindx.ins
+2020/05/27 | 340877 | macros/latex-dev/required/tools/calc.pdf
+2020/05/27 | 3403 | macros/latex-dev/base/proc.ins
+2020/05/27 | 3390 | support/texlab/src/diagnostics/latex.rs
+2020/05/27 | 338 | support/bib2gls/examples/interpret-preamble2.bib
+2020/05/27 | 33864 | macros/latex-dev/required/tools/varioref-2016-02-16.sty
+2020/05/27 | 3374 | support/texlab/src/completion/types.rs
+2020/05/27 | 3374 | macros/latex-dev/base/letter.ins
+2020/05/27 | 3370 | support/texlab/crates/jsonrpc/src/types.rs
+2020/05/27 | 3369 | macros/latex-dev/base/ltoutenc.ins
+2020/05/27 | 33433 | support/texlab/tests/integration/completion.rs
+2020/05/27 | 3340 | macros/latex-dev/base/exscale.ins
+2020/05/27 | 3328 | support/texlab/tests/integration/folding.rs
+2020/05/27 | 330713 | macros/latex-dev/base/utf8ienc.pdf
+2020/05/27 | 3304 | support/texlab/src/completion/latex/glossary.rs
+2020/05/27 | 3294 | macros/latex-dev/base/bugs.txt
+2020/05/27 | 328 | support/bib2gls/examples/no-interpret-preamble.bib
+2020/05/27 | 328 | support/bib2gls/examples/interpret-preamble.bib
+2020/05/27 | 328738 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
+2020/05/27 | 3282 | support/texlab/src/hover/bibtex/field.rs
+2020/05/27 | 3281 | macros/latex-dev/required/tools/manifest.txt
+2020/05/27 | 32579 | language/marathi/marathi.dtx
+2020/05/27 | 3254 | support/bib2gls/examples/sample-usergroups.tex
+2020/05/27 | 32474 | support/latexdiff/COPYING
+2020/05/27 | 32353 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
+2020/05/27 | 323365 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
+2020/05/27 | 32332 | support/bib2gls/src/gls2bib-src.zip
+2020/05/27 | 32321 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
+2020/05/27 | 322937 | macros/latex-dev/required/tools/theorem.pdf
+2020/05/27 | 32247 | macros/latex-dev/required/graphics/graphicx.dtx
+2020/05/27 | 32164 | macros/latex-dev/base/latexrelease.dtx
+2020/05/27 | 321257 | macros/luatex/latex/cloze.zip
+2020/05/27 | 3211 | support/bib2gls/examples/mathgreek.bib
+2020/05/27 | 32093 | support/texlab/src/workspace.rs
+2020/05/27 | 32057 | macros/latex-dev/required/graphics/changes.txt
+2020/05/27 | 3203 | support/texlab/src/test/client.rs
+2020/05/27 | 3201 | support/texlab/src/config.rs
+2020/05/27 | 31879 | macros/latex-dev/base/ltsect.dtx
+2020/05/27 | 318609 | macros/luatex/latex/cloze/cloze.pdf
+2020/05/27 | 3183 | macros/latex-dev/base/unpack.ins
+2020/05/27 | 3182847 | macros/latex-dev/base/source2e.pdf
+2020/05/27 | 318047 | support/bib2gls/examples/sample-multi2.pdf
+2020/05/27 | 31608 | macros/latex-dev/required/graphics/color.dtx
+2020/05/27 | 3148 | support/latexdiff/Makefile
+2020/05/27 | 3142 | support/texlab/src/completion/latex/theorem.rs
+2020/05/27 | 31350 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
+2020/05/27 | 3129 | support/bib2gls/examples/sample-maths.tex
+2020/05/27 | 311644 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
+2020/05/27 | 31151 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
+2020/05/27 | 310565 | macros/latex-dev/required/graphics/grfguide.pdf
+2020/05/27 | 30992 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
+2020/05/27 | 30962 | macros/latex-dev/required/tools/layout.dtx
+2020/05/27 | 308 | support/texlab/src/protocol/edit.rs
+2020/05/27 | 3082 | support/texlab/src/symbol/bibtex_string.rs
+2020/05/27 | 3080 | fonts/utilities/fontools/share/fontools_ts1.enc
+2020/05/27 | 3079 | support/texlab/src/test/server.rs
+2020/05/27 | 30786 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
+2020/05/27 | 306775 | macros/latex-dev/required/tools/bm.pdf
+2020/05/27 | 305750 | macros/latex-dev/base/letter.pdf
+2020/05/27 | 3048 | systems/texlive/tlnet/archive/haranoaji.doc.r55283.tar.xz
+2020/05/27 | 30463 | macros/latex-dev/base/ltnews31.tex
+2020/05/27 | 304468 | macros/latex-dev/base/ltluatex.pdf
+2020/05/27 | 302835 | macros/latex-dev/base/ltnews22.pdf
+2020/05/27 | 302486 | macros/latex/contrib/biblatex-contrib/biblatex-software.zip
+2020/05/27 | 302233 | macros/latex-dev/required/tools/verbatim.pdf
+2020/05/27 | 30216 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
+2020/05/27 | 3019 | support/texlab/src/tex/kpsewhich.rs
+2020/05/27 | 2994 | support/bib2gls/examples/bigmathsymbols.bib
+2020/05/27 | 2994 | macros/latex-dev/required/graphics/graphics-drivers.ins
+2020/05/27 | 2992 | support/texlab/README.md
+2020/05/27 | 29756 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
+2020/05/27 | 29714 | macros/latex-dev/required/tools/multicol-2017-04-11.sty
+2020/05/27 | 29571 | macros/latex-dev/required/tools/showkeys.dtx
+2020/05/27 | 294723 | macros/latex-dev/base/inputenc.pdf
+2020/05/27 | 29323 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
+2020/05/27 | 29194 | macros/latex-dev/base/ltfntcmd.dtx
+2020/05/27 | 2907 | fonts/utilities/fontools/share/fontools_t2a.enc
+2020/05/27 | 2906 | fonts/utilities/fontools/README
+2020/05/27 | 29035 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
+2020/05/27 | 2898 | macros/latex-dev/base/syntonly.ins
+2020/05/27 | 2895 | macros/latex-dev/base/nfssfont.ins
+2020/05/27 | 2894 | macros/latex-dev/base/graphpap.ins
+2020/05/27 | 2894 | macros/latex-dev/base/fix-cm.ins
+2020/05/27 | 2892 | macros/latex-dev/base/alltt.ins
+2020/05/27 | 2890 | macros/latex-dev/base/ifthen.ins
+2020/05/27 | 2884 | support/texlab/src/hover/latex/component.rs
+2020/05/27 | 28792 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
+2020/05/27 | 28671 | support/latexdiff/latexdiff-vc
+2020/05/27 | 28575 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
+2020/05/27 | 2855 | fonts/utilities/fontools/share/fontools_ly1.enc
+2020/05/27 | 2854 | support/texlab/src/link/latex_include.rs
+2020/05/27 | 2846 | support/texlab/src/protocol/options.rs
+2020/05/27 | 284646 | macros/latex-dev/required/graphics/graphics.pdf
+2020/05/27 | 283323 | macros/latex-dev/base/ltnews20.pdf
+2020/05/27 | 28284 | support/texlab/src/server.rs
+2020/05/27 | 282069 | support/latexdiff/doc/latexdiff-man.pdf
+2020/05/27 | 281650 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
+2020/05/27 | 2815 | fonts/utilities/fontools/share/fontools_t1.enc
+2020/05/27 | 281421 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
+2020/05/27 | 2808 | support/texlab/src/main.rs
+2020/05/27 | 2787 | support/texlab/src/completion/latex/color_model.rs
+2020/05/27 | 278139 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
+2020/05/27 | 27754 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
+2020/05/27 | 27582 | fonts/utilities/fontools/bin/ot2kpx
+2020/05/27 | 275529 | support/bib2gls/bib2gls.jar
+2020/05/27 | 2751 | fonts/utilities/fontools/share/fontools_ts3.enc
+2020/05/27 | 27514 | macros/luatex/latex/cloze/cloze.lua
+2020/05/27 | 27466 | support/texlab/src/syntax/latex/analysis.rs
+2020/05/27 | 274453 | macros/latex-dev/base/ltnews23.pdf
+2020/05/27 | 2741 | language/marathi/marathi.ins
+2020/05/27 | 2738 | macros/latex-dev/base/tex2.txt
+2020/05/27 | 2737 | support/texlab/src/link/latex_import.rs
+2020/05/27 | 2733 | macros/latex-dev/base/ltpageno.dtx
+2020/05/27 | 273333 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
+2020/05/27 | 2729 | support/texlab/Cargo.toml
+2020/05/27 | 27270 | fonts/utilities/fontools/doc/ot2kpx.pdf
+2020/05/27 | 2726 | macros/latex-dev/required/amsmath/README.md
+2020/05/27 | 2715 | support/texlab/src/components.rs
+2020/05/27 | 27124 | macros/latex-dev/base/ltxcheck.tex
+2020/05/27 | 2706 | macros/latex-dev/base/idx.tex
+2020/05/27 | 26947 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
+2020/05/27 | 268 | support/texlab/crates/jsonrpc_derive/Cargo.toml
+2020/05/27 | 26884 | fonts/utilities/fontools/doc/afm2afm.pdf
+2020/05/27 | 2686057 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
+2020/05/27 | 26753 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
+2020/05/27 | 266 | support/bib2gls/examples/topics.bib
+2020/05/27 | 26647 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
+2020/05/27 | 2656 | fonts/utilities/fontools/share/fontools_t3.enc
+2020/05/27 | 26504 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
+2020/05/27 | 264453 | macros/latex-dev/base/cmfonts.pdf
+2020/05/27 | 2642179 | install/macros/latex-dev/required/latex-amsmath-dev.tds.zip
+2020/05/27 | 263724 | macros/latex-dev/required/graphics/drivers.pdf
+2020/05/27 | 262051 | macros/latex-dev/base/fix-cm.pdf
+2020/05/27 | 26174240 | systems/texlive/tlnet/archive/haranoaji.r55283.tar.xz
+2020/05/27 | 2612146 | macros/latex-dev/required/amsmath.zip
+2020/05/27 | 2587 | fonts/utilities/fontools/share/fontools_ot1.enc
+2020/05/27 | 2585 | support/bib2gls/examples/chemicalformula.bib
+2020/05/27 | 2578 | macros/latex-dev/required/tools/multicol.ins
+2020/05/27 | 2574 | support/texlab/src/symbol/latex_section/theorem.rs
+2020/05/27 | 2555486 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
+2020/05/27 | 254205 | macros/latex-dev/required/tools/tabularx.pdf
+2020/05/27 | 2540 | macros/latex-dev/required/tools/longtable.ins
+2020/05/27 | 2540 | macros/latex-dev/required/tools/afterpage.ins
+2020/05/27 | 25392 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2020/05/27 | 2537 | macros/latex-dev/required/tools/tabularx.ins
+2020/05/27 | 2534097 | install/macros/latex-dev/required/latex-graphics-dev.tds.zip
+2020/05/27 | 2533 | support/texlab/src/completion/latex/color.rs
+2020/05/27 | 2533 | macros/latex-dev/required/tools/varioref.ins
+2020/05/27 | 2526 | macros/latex-dev/required/tools/bm.ins
+2020/05/27 | 252641 | macros/latex-dev/base/ltnews24.pdf
+2020/05/27 | 251 | support/texlab/src/syntax/mod.rs
+2020/05/27 | 2519 | support/texlab/src/forward_search.rs
+2020/05/27 | 2500887 | macros/latex-dev/required/graphics.zip
+2020/05/27 | 248466 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
+2020/05/27 | 247776 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
+2020/05/27 | 246931 | macros/latex-dev/required/tools/layout.pdf
+2020/05/27 | 24649 | macros/latex-dev/required/tools/trace.dtx
+2020/05/27 | 246434 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
+2020/05/27 | 2463 | support/texlab/src/symbol/latex_section/enumeration.rs
+2020/05/27 | 246174 | macros/latex-dev/base/latexrelease.pdf
+2020/05/27 | 245867 | macros/latex-dev/required/graphics/rotating.pdf
+2020/05/27 | 2451 | macros/luatex/latex/cloze/README.md
+2020/05/27 | 2446 | support/texlab/src/protocol/range.rs
+2020/05/27 | 243161 | support/bib2gls/examples/sample-multi1.pdf
+2020/05/27 | 24300 | systems/texlive/tlnet/archive/pst-circ.r55289.tar.xz
+2020/05/27 | 242 | support/texlab/src/completion/latex/mod.rs
+2020/05/27 | 242999 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
+2020/05/27 | 242786 | macros/latex-dev/required/tools/showkeys.pdf
+2020/05/27 | 24269869 | systems/texlive/tlnet/install-tl.zip
+2020/05/27 | 2423 | support/texlab/src/folding/latex_env.rs
+2020/05/27 | 24234835 | support/texlab/data/components.json
+2020/05/27 | 2419 | support/bib2gls/examples/minerals.bib
+2020/05/27 | 241545 | support/bib2gls/src/bib2gls-begin.tex
+2020/05/27 | 240383 | support/latexdiff/latexdiff-fast
+2020/05/27 | 24016 | macros/latex-dev/base/lterror.dtx
+2020/05/27 | 239755 | macros/latex-dev/base/ltnews27.pdf
+2020/05/27 | 2392 | support/bib2gls/examples/constants.bib
+2020/05/27 | 23840 | support/bib2gls/examples/sample-usergroups.pdf
+2020/05/27 | 238007 | macros/latex-dev/required/tools/xspace.pdf
+2020/05/27 | 2378 | support/texlab/src/rename/mod.rs
+2020/05/27 | 2367 | support/bib2gls/examples/sample-people.tex
+2020/05/27 | 23652 | macros/latex-dev/base/ltnews30.tex
+2020/05/27 | 235994 | support/latexdiff/latexdiff-so
+2020/05/27 | 23525 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
+2020/05/27 | 23521 | macros/latex-dev/base/fix-cm.dtx
+2020/05/27 | 235068 | macros/latex-dev/base/ltnews19.pdf
+2020/05/27 | 23386 | macros/latex-dev/base/lppl.tex
+2020/05/27 | 233491 | macros/latex-dev/base/ltnews21.pdf
+2020/05/27 | 2333 | support/texlab/src/tex/compile.rs
+2020/05/27 | 232495 | macros/latex-dev/required/graphics/graphicx.pdf
+2020/05/27 | 232380 | macros/latex-dev/base/latexchanges.pdf
+2020/05/27 | 230912 | systems/texlive/tlnet/archive/erewhon-math.r55287.tar.xz
+2020/05/27 | 2301 | support/bib2gls/examples/miscsymbols.bib
+2020/05/27 | 23011 | macros/latex-dev/base/ltnews32.tex
+2020/05/27 | 23006 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2020/05/27 | 22964254 | install/macros/latex-dev/latex-base-dev.tds.zip
+2020/05/27 | 2282 | support/texlab/tests/integration/hover.rs
+2020/05/27 | 22676 | macros/latex-dev/base/ltcounts.dtx
+2020/05/27 | 2260 | support/texlab/tests/integration/highlight.rs
+2020/05/27 | 22605 | macros/latex-dev/required/amsmath/diffs-m.txt
+2020/05/27 | 22552209 | macros/latex-dev/base.zip
+2020/05/27 | 2248 | fonts/utilities/fontools/share/fontools_oml.enc
+2020/05/27 | 224684 | macros/latex-dev/required/amsmath/amsmath.dtx
+2020/05/27 | 22457 | macros/latex-dev/base/cfgguide.tex
+2020/05/27 | 224184 | support/latexdiff/latexdiff
+2020/05/27 | 222868 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
+2020/05/27 | 2226 | macros/latex-dev/required/tools/indentfirst.dtx
+2020/05/27 | 222525 | macros/latex-dev/required/graphics/keyval.pdf
+2020/05/27 | 2212 | support/latexdiff/contrib/latexchanges.py
+2020/05/27 | 2204484 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+2020/05/27 | 220384 | macros/latex-dev/base/modguide.pdf
+2020/05/27 | 220211 | macros/latex-dev/base/cfgguide.pdf
+2020/05/27 | 2200 | support/texlab/crates/jsonrpc/src/client.rs
+2020/05/27 | 216976 | macros/latex-dev/base/cyrguide.pdf
+2020/05/27 | 216899 | macros/latex-dev/base/proc.pdf
+2020/05/27 | 21589 | graphics/pgf/contrib/pgf-pie/cloud.svg
+2020/05/27 | 215600 | macros/latex-dev/base/ltxdoc.pdf
+2020/05/27 | 214708 | macros/latex-dev/base/slifonts.pdf
+2020/05/27 | 2137 | support/texlab/crates/jsonrpc/src/lib.rs
+2020/05/27 | 212730 | macros/latex-dev/required/tools/trace.pdf
+2020/05/27 | 2113 | macros/luatex/latex/cloze/cloze.ins
+2020/05/27 | 20 | support/texlab/benches/benchmarks/mod.rs
+2020/05/27 | 20994 | macros/latex-dev/required/graphics/rotating.dtx
+2020/05/27 | 2092 | macros/latex-dev/required/graphics/README.md
+2020/05/27 | 2088 | support/texlab/src/protocol/uri.rs
+2020/05/27 | 20796 | support/texlab/src/symbol/latex_section/mod.rs
+2020/05/27 | 20787 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
+2020/05/27 | 20729 | support/latexdiff/latexrevise
+2020/05/27 | 207040 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
+2020/05/27 | 206536 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
+2020/05/27 | 206108 | fonts/utilities/fontools.zip
+2020/05/27 | 205205 | macros/latex-dev/base/ifthen.pdf
+2020/05/27 | 20434 | macros/latex-dev/base/lgc2.err
+2020/05/27 | 20395 | fonts/utilities/fontools/doc/splitttc.pdf
+2020/05/27 | 203514 | macros/latex-dev/base/doc.dtx
+2020/05/27 | 203217 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
+2020/05/27 | 20302 | macros/latex-dev/base/ltnews.cls
+2020/05/27 | 202429 | macros/latex-dev/base/nfssfont.pdf
+2020/05/27 | 2009807 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
+2020/05/27 | 200935 | macros/latex-dev/required/graphics/color.pdf
+2020/05/27 | 20013 | support/texlab/src/test/mod.rs
+2020/05/27 | 199965 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
+2020/05/27 | 199954 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
+2020/05/27 | 1994 | language/marathi/letter.tex
+2020/05/27 | 199221 | macros/latex-dev/required/tools/dcolumn.pdf
+2020/05/27 | 199049 | macros/latex-dev/required/tools/enumerate.pdf
+2020/05/27 | 19891 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
+2020/05/27 | 198177 | support/bib2gls/src/bib2gls-src.zip
+2020/05/27 | 196325 | macros/latex-dev/base/ltnews25.pdf
+2020/05/27 | 195880 | macros/latex-dev/base/exscale.pdf
+2020/05/27 | 1955 | support/texlab/src/tex/texlive.rs
+2020/05/27 | 194862 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
+2020/05/27 | 194266 | macros/latex-dev/required/amsmath/amstext.pdf
+2020/05/27 | 1941 | support/bib2gls/examples/sample-citations.tex
+2020/05/27 | 1938 | macros/latex-dev/base/minimal.cls
+2020/05/27 | 193880 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
+2020/05/27 | 19379501 | systems/texlive/tlnet/install-tl-windows.exe
+2020/05/27 | 192289 | macros/latex-dev/base/latexsym.pdf
+2020/05/27 | 191692 | macros/latex-dev/required/graphics/trig.pdf
+2020/05/27 | 191528 | macros/latex-dev/base/ltx3info.pdf
+2020/05/27 | 19107 | graphics/pgf/contrib/pgf-pie/LICENSE-LPPL1.3c.txt
+2020/05/27 | 19040 | macros/latex-dev/base/lppl.txt
+2020/05/27 | 1902 | macros/latex/required/amscls/amsclass.ins
+2020/05/27 | 189848 | macros/latex-dev/required/tools/afterpage.pdf
+2020/05/27 | 18941 | macros/latex-dev/base/ltnews29.tex
+2020/05/27 | 189235 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
+2020/05/27 | 1887 | support/texlab/src/completion/latex/begin_cmd.rs
+2020/05/27 | 1870 | support/texlab/src/symbol/latex_section/float.rs
+2020/05/27 | 186844 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
+2020/05/27 | 185810 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
+2020/05/27 | 18558 | macros/latex-dev/base/ltxdoc.dtx
+2020/05/27 | 185302 | macros/latex/required/amscls/amsclass.dtx
+2020/05/27 | 185136 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
+2020/05/27 | 184302 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
+2020/05/27 | 18407 | macros/latex-dev/base/nfssfont.dtx
+2020/05/27 | 183 | support/texlab/tests/integration/main.rs
+2020/05/27 | 183 | support/texlab/CONTRIBUTING.md
+2020/05/27 | 183 | graphics/pgf/contrib/pgf-pie/explode.tex
+2020/05/27 | 183432 | macros/latex-dev/required/tools/delarray.pdf
+2020/05/27 | 18305 | macros/latex-dev/base/ifthen.dtx
+2020/05/27 | 18300 | macros/latex-dev/base/ltx3info.tex
+2020/05/27 | 18266 | support/texlab/src/syntax/latex/mod.rs
+2020/05/27 | 182355 | macros/latex-dev/required/tools/multicol.dtx
+2020/05/27 | 181389 | macros/latex-dev/base/syntonly.pdf
+2020/05/27 | 18093 | graphics/pgf/contrib/pgf-pie/LICENSE-GPL2.txt
+2020/05/27 | 179 | graphics/pgf/contrib/pgf-pie/color.tex
+2020/05/27 | 17998 | macros/latex/contrib/achemso/CHANGELOG.md
+2020/05/27 | 17997 | fonts/utilities/fontools/GPLv2.txt
+2020/05/27 | 179548 | macros/latex-dev/required/tools/fileerr.pdf
+2020/05/27 | 17918 | support/texlab/src/completion/mod.rs
+2020/05/27 | 17862 | macros/latex-dev/required/tools/xspace.dtx
+2020/05/27 | 17828 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
+2020/05/27 | 177528 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
+2020/05/27 | 17730 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
+2020/05/27 | 1772 | support/bib2gls/examples/markuplanguages.bib
+2020/05/27 | 175678 | macros/latex-dev/required/tools/hhline.pdf
+2020/05/27 | 175355 | macros/latex-dev/base/ltoutput.dtx
+2020/05/27 | 17496 | macros/latex-dev/base/cyrguide.tex
+2020/05/27 | 1740 | support/bib2gls/examples/sample-units3.tex
+2020/05/27 | 1736494 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
+2020/05/27 | 1734 | support/bib2gls/examples/sample-media.tex
+2020/05/27 | 173077 | macros/latex-dev/base/alltt.pdf
+2020/05/27 | 172216 | macros/latex-dev/base/tlc2.err
+2020/05/27 | 170203 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
+2020/05/27 | 169826 | macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.pdf
+2020/05/27 | 169757 | macros/latex-dev/required/tools/shellesc.pdf
+2020/05/27 | 169535 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
+2020/05/27 | 1694 | macros/latex-dev/base/small2e.tex
+2020/05/27 | 168386 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
+2020/05/27 | 1666 | macros/latex-dev/required/tools/README.md
+2020/05/27 | 165 | graphics/pgf/contrib/pgf-pie/README
+2020/05/27 | 165 | graphics/pgf/contrib/pgf-pie/radius.tex
+2020/05/27 | 16593 | support/bib2gls/bib2gls.1
+2020/05/27 | 165742 | macros/latex-dev/required/amsmath/amscd.pdf
+2020/05/27 | 164997 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
+2020/05/27 | 164949 | macros/latex-dev/base/tlc2.pdf
+2020/05/27 | 16461788 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
+2020/05/27 | 164376 | macros/latex-dev/base/docstrip.dtx
+2020/05/27 | 164340 | macros/latex-dev/required/amsmath/amsgen.pdf
+2020/05/27 | 163964 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
+2020/05/27 | 163612 | macros/latex-dev/required/tools/xr.pdf
+2020/05/27 | 1631 | support/texlab/src/hover/mod.rs
+2020/05/27 | 1629 | language/marathi/glossaries.gls
+2020/05/27 | 16234 | macros/latex-dev/base/modguide.tex
+2020/05/27 | 162248 | macros/latex-dev/required/graphics/rotex.pdf
+2020/05/27 | 16187 | support/texlab/src/citeproc/ris.rs
+2020/05/27 | 161323 | macros/latex-dev/required/amsmath/amsbsy.pdf
+2020/05/27 | 16119 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
+2020/05/27 | 161066 | macros/latex-dev/base/ltnews13.pdf
+2020/05/27 | 160849 | support/bib2gls/examples/sample-media.pdf
+2020/05/27 | 160673 | macros/latex-dev/base/makeindx.pdf
+2020/05/27 | 1603 | support/bib2gls/examples/animals.bib
+2020/05/27 | 159 | support/texlab/build.rs
+2020/05/27 | 1596 | graphics/pgf/contrib/pgf-pie/population.tex
+2020/05/27 | 15947 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
+2020/05/27 | 158 | graphics/pgf/contrib/pgf-pie/sum.tex
+2020/05/27 | 1580 | support/bib2gls/examples/derivedunits.bib
+2020/05/27 | 15737 | macros/latex-dev/required/graphics/cat.eps
+2020/05/27 | 157174 | macros/latex-dev/base/ltnews05.pdf
+2020/05/27 | 15701 | macros/latex-dev/base/slifonts.fdd
+2020/05/27 | 156534 | macros/latex-dev/base/tulm.pdf
+2020/05/27 | 156511 | macros/latex-dev/required/tools/somedefs.pdf
+2020/05/27 | 156280 | macros/latex-dev/base/graphpap.pdf
+2020/05/27 | 155735 | macros/latex-dev/base/classes.dtx
+2020/05/27 | 155555 | fonts/utilities/fontools/bin/autoinst
+2020/05/27 | 15474 | macros/latex-dev/base/ltxref.dtx
+2020/05/27 | 154485 | macros/latex-dev/required/graphics/epsfig.pdf
+2020/05/27 | 15430 | macros/latex-dev/required/graphics/graphics-2017-06-25.sty
+2020/05/27 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
+2020/05/27 | 1532114 | macros/latex-dev/base/encguide.pdf
+2020/05/27 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
+2020/05/27 | 152145 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
+2020/05/27 | 1520 | support/texlab/src/protocol/mod.rs
+2020/05/27 | 151354 | macros/latex-dev/base/manual.pdf
+2020/05/27 | 1511 | macros/latex/contrib/biblatex-contrib/biblatex-software/history.tex
+2020/05/27 | 150920 | macros/latex-dev/base/ltnews14.pdf
+2020/05/27 | 1506 | support/bib2gls/examples/sample-authors.tex
+2020/05/27 | 150104 | macros/latex-dev/required/graphics/lscape.pdf
+2020/05/27 | 150094 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
+2020/05/27 | 15003 | macros/latex/required/amscls/doc/diffs-c.txt
+2020/05/27 | 150020 | macros/latex-dev/base/ltnews01.pdf
+2020/05/27 | 149835 | macros/latex-dev/base/ltnews17.pdf
+2020/05/27 | 149789 | macros/latex/contrib/achemso/achemso.dtx
+2020/05/27 | 149713 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
+2020/05/27 | 1491 | support/latexdiff/contrib/latexdiff.spec
+2020/05/27 | 14892 | macros/latex-dev/base/ltnews28.tex
+2020/05/27 | 148864 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
+2020/05/27 | 1480 | macros/latex-dev/required/amsmath/amsmath.ins
+2020/05/27 | 147941 | macros/latex-dev/base/ltnews10.pdf
+2020/05/27 | 1470024 | systems/texlive/tlnet/archive/erewhon-math.doc.r55287.tar.xz
+2020/05/27 | 1468 | macros/latex-dev/required/amsmath/amsxtra.ins
+2020/05/27 | 1468 | macros/latex-dev/required/amsmath/amstext.ins
+2020/05/27 | 14673 | macros/latex-dev/base/source2e.tex
+2020/05/27 | 1466 | macros/latex-dev/required/amsmath/amsopn.ins
+2020/05/27 | 1466 | macros/latex-dev/required/amsmath/amsgen.ins
+2020/05/27 | 1466 | macros/latex-dev/required/amsmath/amsbsy.ins
+2020/05/27 | 1464 | macros/latex-dev/required/amsmath/amscd.ins
+2020/05/27 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
+2020/05/27 | 14575 | macros/latex-dev/required/graphics/rotex.tex
+2020/05/27 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+2020/05/27 | 144779 | macros/latex-dev/required/tools/indentfirst.pdf
+2020/05/27 | 144471 | macros/latex-dev/base/ltnews08.pdf
+2020/05/27 | 14440 | macros/latex-dev/base/ltbibl.dtx
+2020/05/27 | 14421 | macros/latex-dev/base/lppl-1-2.txt
+2020/05/27 | 143457 | macros/latex-dev/base/ltoutenc.dtx
+2020/05/27 | 14341 | macros/latex-dev/base/lppl-1-1.txt
+2020/05/27 | 1414 | support/latexdiff/example/example-rev.tex
+2020/05/27 | 14078 | macros/latex-dev/required/tools/afterpage.dtx
+2020/05/27 | 14037 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
+2020/05/27 | 1396 | support/bib2gls/examples/sample-markuplanguages.tex
+2020/05/27 | 139693 | support/texlab/Cargo.lock
+2020/05/27 | 13919 | support/texlab/tests/integration/definition.rs
+2020/05/27 | 1388764 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/05/27 | 1382 | support/bib2gls/examples/sample-bacteria.tex
+2020/05/27 | 138223 | macros/latex-dev/base/lb2.pdf
+2020/05/27 | 1381 | macros/latex-dev/base/legal.txt
+2020/05/27 | 138025 | macros/latex-dev/required/tools/fontsmpl.pdf
+2020/05/27 | 13799 | macros/latex-dev/required/graphics/keyval.dtx
+2020/05/27 | 137918 | macros/latex-dev/base/ltnews12.pdf
+2020/05/27 | 1378 | support/bib2gls/examples/sample-constants.tex
+2020/05/27 | 13772 | support/texlab/src/outline.rs
+2020/05/27 | 1376968 | systems/texlive/tlnet/archive/domitian.r55286.tar.xz
+2020/05/27 | 1371 | support/bib2gls/examples/citations.bib
+2020/05/27 | 137121 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
+2020/05/27 | 1364 | systems/texlive/tlnet/archive/collection-pictures.r55288.tar.xz
+2020/05/27 | 136153 | macros/latex-dev/base/webcomp.pdf
+2020/05/27 | 13572 | support/latexdiff/latexdiff-vc.1
+2020/05/27 | 1356 | support/latexdiff/example/example-draft.tex
+2020/05/27 | 135688 | macros/latex-dev/required/tools/rawfonts.pdf
+2020/05/27 | 134750 | macros/latex-dev/base/ltnews02.pdf
+2020/05/27 | 134730 | macros/latex-dev/base/ltnews03.pdf
+2020/05/27 | 1344 | support/bib2gls/examples/sample-nested.tex
+2020/05/27 | 13449 | macros/latex-dev/required/amsmath/amsgen.dtx
+2020/05/27 | 1342 | macros/latex-dev/base/ltnews18.tex
+2020/05/27 | 13334 | fonts/utilities/fontools/bin/afm2afm
+2020/05/27 | 133132 | macros/latex-dev/base/ltnews06.pdf
+2020/05/27 | 133093 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
+2020/05/27 | 13305 | macros/latex-dev/base/proc.dtx
+2020/05/27 | 1315 | support/texlab/src/definition/mod.rs
+2020/05/27 | 130688 | macros/latex-dev/base/ltnews16.pdf
+2020/05/27 | 130587 | macros/latex-dev/required/amsmath/technote.pdf
+2020/05/27 | 13050 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
+2020/05/27 | 130481 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
+2020/05/27 | 1297213 | macros/latex/contrib/nicematrix.zip
+2020/05/27 | 12954 | graphics/pgf/contrib/pgf-pie/first-pie.svg
+2020/05/27 | 12946 | macros/latex-dev/base/manual.err
+2020/05/27 | 1291 | support/bib2gls/examples/sample-chemical.tex
+2020/05/27 | 129158 | macros/latex-dev/required/amsmath/amsopn.pdf
+2020/05/27 | 128768 | macros/latex-dev/base/ltnews04.pdf
+2020/05/27 | 1286408 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
+2020/05/27 | 1285496 | install/macros/latex/required/amscls.tds.zip
+2020/05/27 | 12840 | graphics/pgf/contrib/pgf-pie/polar.svg
+2020/05/27 | 12792 | support/texlab/src/syntax/bibtex/parser.rs
+2020/05/27 | 12786 | macros/latex/contrib/biblatex-contrib/biblatex-software/swentries.tex
+2020/05/27 | 12775 | support/bib2gls/examples/sample-multi2.tex
+2020/05/27 | 12750 | graphics/pgf/contrib/pgf-pie/square.svg
+2020/05/27 | 127468 | graphics/pgf/contrib/pgf-pie.zip
+2020/05/27 | 12715 | macros/latex-dev/required/tools/dcolumn.dtx
+2020/05/27 | 1268 | support/texlab/src/syntax/generic_ast.rs
+2020/05/27 | 1265 | support/bib2gls/examples/mathsrelations.bib
+2020/05/27 | 125828 | macros/latex-dev/base/lppl.pdf
+2020/05/27 | 1257173 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
+2020/05/27 | 12560 | macros/latex-dev/required/tools/array-2020-02-10.sty
+2020/05/27 | 1254 | support/texlab/src/symbol/latex_section/equation.rs
+2020/05/27 | 12521 | macros/latex-dev/base/testpage.tex
+2020/05/27 | 124717 | macros/latex-dev/required/tools/array.dtx
+2020/05/27 | 124028 | macros/latex-dev/base/ltnews07.pdf
+2020/05/27 | 1235 | language/marathi/para.tex
+2020/05/27 | 1234 | support/bib2gls/examples/sample-units2.tex
+2020/05/27 | 12225 | macros/latex-dev/base/ltnews24.tex
+2020/05/27 | 122088 | macros/latex-dev/base/ltnews15.pdf
+2020/05/27 | 1219 | support/bib2gls/examples/bacteria.bib
+2020/05/27 | 1212 | systems/texlive/tlnet/archive/collection-bibtexextra.r55290.tar.xz
+2020/05/27 | 12120 | macros/latex-dev/base/tulm.fdd
+2020/05/27 | 1208067 | macros/latex/required/amscls.zip
+2020/05/27 | 1207 | support/bib2gls/examples/sample-textsymbols.tex
+2020/05/27 | 12049 | support/latexdiff/doc/latexdiff-man.tex
+2020/05/27 | 120208 | macros/latex-dev/base/ltnews09.pdf
+2020/05/27 | 12005 | macros/latex-dev/required/amsmath/technote.tex
+2020/05/27 | 1197865 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
+2020/05/27 | 1197701 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
+2020/05/27 | 11900 | support/texlab/src/feature.rs
+2020/05/27 | 1183 | language/marathi/README.txt
+2020/05/27 | 11750 | macros/latex-dev/required/tools/array-2016-10-06.sty
+2020/05/27 | 1172 | support/texlab/src/protocol/client.rs
+2020/05/27 | 116881 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
+2020/05/27 | 115 | graphics/pgf/contrib/pgf-pie/shadow.tex
+2020/05/27 | 11595 | support/bib2gls/CHANGES
+2020/05/27 | 115756 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
+2020/05/27 | 1155 | support/texlab/src/folding/mod.rs
+2020/05/27 | 11552 | support/texlab/tests/integration/document_symbol.rs
+2020/05/27 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
+2020/05/27 | 1150838 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
+2020/05/27 | 11443 | macros/latex-dev/base/ltpage.dtx
+2020/05/27 | 11405 | macros/latex-dev/required/amsmath/amstext.dtx
+2020/05/27 | 1136 | support/texlab/src/reference/mod.rs
+2020/05/27 | 112967 | macros/latex/contrib/biblatex-contrib/biblatex-software/sample-use-sty.pdf
+2020/05/27 | 11291 | macros/latex-dev/required/amsmath/amscd.dtx
+2020/05/27 | 1128 | macros/latex-dev/required/graphics/graphics.ins
+2020/05/27 | 1117993 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
+2020/05/27 | 1116392 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
+2020/05/27 | 11154 | macros/latex-dev/required/tools/hhline.dtx
+2020/05/27 | 110964 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
+2020/05/27 | 110937 | support/bib2gls/examples/sample-maths.pdf
+2020/05/27 | 11015 | support/texlab/src/hover/latex/preview.rs
+2020/05/27 | 110157 | macros/latex/contrib/nicematrix/nicematrix-french.tex
+2020/05/27 | 110122 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
+2020/05/27 | 1091 | support/bib2gls/examples/vegetables.bib
+2020/05/27 | 108823 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
+2020/05/27 | 10808 | graphics/pgf/contrib/pgf-pie/pgf-pie.sty
+2020/05/27 | 10777 | macros/latex-dev/required/tools/fontsmpl.dtx
+2020/05/27 | 1070 | support/bib2gls/examples/sample-units1.tex
+2020/05/27 | 10698 | macros/latex-dev/base/ltnews26.tex
+2020/05/27 | 10692 | support/texlab/src/syntax/bibtex/mod.rs
+2020/05/27 | 106914 | macros/latex-dev/base/inputenc.dtx
+2020/05/27 | 10688 | macros/latex-dev/base/ltnews23.tex
+2020/05/27 | 10669 | macros/latex-dev/base/ltnews22.tex
+2020/05/27 | 10651 | macros/latex-dev/required/graphics/trig.dtx
+2020/05/27 | 10650 | macros/latex-dev/required/tools/enumerate.dtx
+2020/05/27 | 10606 | macros/latex-dev/base/makeindx.dtx
+2020/05/27 | 105 | support/texlab/benches/bench_main.rs
+2020/05/27 | 10567 | macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.tex
+2020/05/27 | 104 | graphics/pgf/contrib/pgf-pie/before-after-number.tex
+2020/05/27 | 1049745 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
+2020/05/27 | 104942 | macros/latex-dev/base/ltnews11.pdf
+2020/05/27 | 10469 | support/texlab/src/diagnostics/bibtex.rs
+2020/05/27 | 104693 | macros/latex-dev/base/ltclass.dtx
+2020/05/27 | 104677 | macros/latex-dev/required/amsmath/amsldoc.tex
+2020/05/27 | 104540 | macros/latex-dev/required/amsmath/amsxtra.pdf
+2020/05/27 | 1042744 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
+2020/05/27 | 10424 | support/texlab/CHANGELOG.md
+2020/05/27 | 10414 | macros/latex-dev/base/manifest.txt
+2020/05/27 | 103831 | support/bib2gls/examples/sample-msymbols.pdf
+2020/05/27 | 10376 | macros/latex-dev/base/ltfsscmp.dtx
+2020/05/27 | 10365 | macros/latex-dev/base/ltvers.dtx
+2020/05/27 | 103573 | macros/latex-dev/required/tools/varioref.dtx
+2020/05/27 | 1031 | support/bib2gls/examples/baseunits.bib
+2020/05/27 | 102529 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
+2020/05/27 | 10189 | support/texlab/src/syntax/bibtex/formatter.rs
+2020/05/27 | 101344 | macros/latex-dev/base/lgc2.pdf
+2020/05/27 | 101292 | macros/latex-dev/required/amsmath/subeqn.pdf
+2020/05/27 | 10102 | support/texlab/src/completion/latex/component.rs
+2020/05/27 | 100 | graphics/pgf/contrib/pgf-pie/cloud.tex
+2020/05/27 | 100563 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
+2020/05/27 | 10053 | macros/latex-dev/base/webcomp.err
+2020/05/26 | 99161448 | systems/win32/w32tex/web2c-lib.tar.xz
2020/05/26 | 98448 | systems/texlive/tlnet/archive/texinfo.r55267.tar.xz
-2020/05/26 | 96602 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-x64-2.9.tar.lzma
-2020/05/26 | 95265 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-2.9.tar.lzma
-2020/05/26 | 94368 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-2.9.tar.lzma
-2020/05/26 | 94351 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-x64-2.9.tar.lzma
-2020/05/26 | 941128 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-2.9.tar.lzma
-2020/05/26 | 93574 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-2.9.tar.lzma
-2020/05/26 | 932281 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-2.9.tar.lzma
-2020/05/26 | 92922 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-x64-2.9.tar.lzma
-2020/05/26 | 92918 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-2.9.tar.lzma
-2020/05/26 | 92143 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-x64-2.9.tar.lzma
-2020/05/26 | 91542 | systems/win32/miktex/tm/packages/next/miktex-texware-bin-2.9.tar.lzma
2020/05/26 | 908 | systems/texlive/tlnet/archive/collection-plaingeneric.r55277.tar.xz
-2020/05/26 | 882 | systems/win32/miktex/tm/packages/pr.ini
2020/05/26 | 876529 | graphics/pstricks/contrib/pst-circ/doc/pst-circ-doc.pdf
-2020/05/26 | 87187 | systems/win32/miktex/tm/packages/next/miktex-png-bin-x64-2.9.tar.lzma
-2020/05/26 | 86978 | systems/win32/miktex/tm/packages/next/miktex-mfware-bin-2.9.tar.lzma
2020/05/26 | 867832 | systems/texlive/tlnet/archive/tex4ht.r55278.tar.xz
-2020/05/26 | 86705 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-x64-2.9.tar.lzma
2020/05/26 | 8579236 | systems/texlive/tlnet/archive/reledmac.doc.r55273.tar.xz
-2020/05/26 | 84877 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-x64-2.9.tar.lzma
-2020/05/26 | 84826 | systems/win32/miktex/tm/packages/next/miktex-bibtex8bit-bin-2.9.tar.lzma
-2020/05/26 | 8476 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-x64-2.9.tar.lzma
-2020/05/26 | 82295 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-x64-2.9.tar.lzma
-2020/05/26 | 81386 | systems/win32/miktex/tm/packages/next/miktex-mpmcli-bin-2.9.tar.lzma
+2020/05/26 | 80699768 | systems/win32/w32tex/pgfcontrib.tar.xz
2020/05/26 | 784 | systems/texlive/tlnet/archive/collection-langother.r55281.tar.xz
-2020/05/26 | 78168 | systems/win32/miktex/tm/packages/next/miktex-png-bin-2.9.tar.lzma
-2020/05/26 | 78096 | systems/win32/miktex/tm/packages/next/miktex-mkfntmap-bin-2.9.tar.lzma
-2020/05/26 | 77908 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-x64-2.9.tar.lzma
-2020/05/26 | 77414 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-x64-2.9.tar.lzma
+2020/05/26 | 7794 | macros/latex/required/amscls/README
2020/05/26 | 7644 | systems/texlive/tlnet/archive/pwebmac.r55281.tar.xz
-2020/05/26 | 7504 | systems/win32/miktex/tm/packages/next/miktex-md5-bin-2.9.tar.lzma
-2020/05/26 | 74810 | systems/win32/miktex/tm/packages/next/miktex-texify-bin-2.9.tar.lzma
2020/05/26 | 7448 | systems/texlive/tlnet/archive/plautopatch.r55274.tar.xz
-2020/05/26 | 74460 | systems/win32/miktex/tm/packages/next/miktex-tdsutil-bin-2.9.tar.lzma
-2020/05/26 | 73609 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-x64-2.9.tar.lzma
-2020/05/26 | 73060 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-x64-2.9.tar.lzma
-2020/05/26 | 72577 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-x64-2.9.tar.lzma
-2020/05/26 | 71649 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-x64-2.9.tar.lzma
-2020/05/26 | 71324 | systems/win32/miktex/tm/packages/next/miktex-cjkutils-bin-2.9.tar.lzma
-2020/05/26 | 69818 | systems/win32/miktex/tm/packages/next/miktex-fonts-bin-2.9.tar.lzma
-2020/05/26 | 69344 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-x64-2.9.tar.lzma
-2020/05/26 | 69251 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-x64-2.9.tar.lzma
-2020/05/26 | 69172 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-x64-2.9.tar.lzma
2020/05/26 | 69084 | systems/texlive/tlnet/archive/marathi.doc.r55275.tar.xz
-2020/05/26 | 68636 | systems/win32/miktex/tm/packages/next/miktex-freeglut-bin-2.9.tar.lzma
-2020/05/26 | 67262 | systems/win32/miktex/tm/packages/next/miktex-lzma-bin-2.9.tar.lzma
-2020/05/26 | 670001 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-x64-2.9.tar.lzma
-2020/05/26 | 66563 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-x64-2.9.tar.lzma
+2020/05/26 | 66260848 | systems/win32/w32tex/biblatex-biber.tar.xz
2020/05/26 | 6604 | systems/texlive/tlnet/archive/marathi.source.r55275.tar.xz
-2020/05/26 | 65265 | systems/win32/miktex/tm/packages/next/miktex-web-bin-x64-2.9.tar.lzma
-2020/05/26 | 64578 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-x64-2.9.tar.lzma
-2020/05/26 | 63365 | systems/win32/miktex/tm/packages/next/miktex-ps2pk-bin-2.9.tar.lzma
+2020/05/26 | 654956 | systems/win32/w32tex/ChangeLog
2020/05/26 | 6326 | fonts/erewhon-math/fourier-otf.sty
-2020/05/26 | 63243 | systems/win32/miktex/tm/packages/next/miktex-graphite2-bin-2.9.tar.lzma
-2020/05/26 | 63187 | systems/win32/miktex/tm/packages/next/miktex-mtprint-bin-2.9.tar.lzma
-2020/05/26 | 63166 | systems/win32/miktex/tm/packages/next/miktex-tex4ht-bin-2.9.tar.lzma
-2020/05/26 | 63016 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-x64-2.9.tar.lzma
-2020/05/26 | 630127 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-x64-2.9.tar.lzma
-2020/05/26 | 62073 | systems/win32/miktex/tm/packages/next/miktex-bibtex-bin-2.9.tar.lzma
-2020/05/26 | 61713 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-x64-2.9.tar.lzma
-2020/05/26 | 61699 | systems/win32/miktex/tm/packages/next/miktex-web-bin-2.9.tar.lzma
-2020/05/26 | 615388 | systems/win32/miktex/tm/packages/next/miktex-lcdf-typetools-bin-2.9.tar.lzma
-2020/05/26 | 61450 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-x64-2.9.tar.lzma
2020/05/26 | 61192 | systems/texlive/tlnet/archive/tex4ht.doc.r55278.tar.xz
-2020/05/26 | 591011 | systems/win32/miktex/tm/packages/next/miktex-yap-bin-2.9.tar.lzma
2020/05/26 | 58698 | fonts/domitian/COPYING
-2020/05/26 | 58597 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-x64-2.9.tar.lzma
-2020/05/26 | 58559 | systems/win32/miktex/tm/packages/next/miktex-arctrl-bin-2.9.tar.lzma
-2020/05/26 | 57979 | systems/win32/miktex/tm/packages/next/miktex-gsf2pk-bin-2.9.tar.lzma
2020/05/26 | 5792 | macros/latex/contrib/utf8add/utf8add.tex
-2020/05/26 | 574786 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-x64-2.9.tar.lzma
2020/05/26 | 573864 | graphics/pstricks/contrib/pst-circ.zip
-2020/05/26 | 57270 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-x64-2.9.tar.lzma
-2020/05/26 | 56655 | systems/win32/miktex/tm/packages/next/miktex-fmt-bin-2.9.tar.lzma
-2020/05/26 | 561639 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-x64-2.9.tar.lzma
-2020/05/26 | 55802 | systems/win32/miktex/tm/packages/next/miktex-mthelp-bin-2.9.tar.lzma
-2020/05/26 | 5500342 | systems/texlive/tlnet/install-tl-unx.tar.gz
-2020/05/26 | 54977 | systems/win32/miktex/tm/packages/next/miktex-ttf2pk2-bin-2.9.tar.lzma
-2020/05/26 | 545599 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-x64-2.9.tar.lzma
-2020/05/26 | 539210 | systems/win32/miktex/tm/packages/next/miktex-log4cxx-bin-2.9.tar.lzma
-2020/05/26 | 536741 | systems/win32/miktex/tm/packages/next/files.csv.lzma
-2020/05/26 | 536491 | systems/win32/miktex/tm/packages/files.csv.lzma
2020/05/26 | 53424 | systems/texlive/tlnet/archive/reledmac.r55273.tar.xz
2020/05/26 | 529 | macros/latex/contrib/utf8add/README
-2020/05/26 | 52237 | systems/win32/miktex/tm/packages/next/miktex-cweb-bin-2.9.tar.lzma
-2020/05/26 | 52076 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-x64-2.9.tar.lzma
-2020/05/26 | 50938 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-x64-2.9.tar.lzma
-2020/05/26 | 50918 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-x64-2.9.tar.lzma
-2020/05/26 | 50764 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-x64-2.9.tar.lzma
2020/05/26 | 5050 | macros/latex/contrib/utf8add/utf8hax.tex
2020/05/26 | 503176 | systems/texlive/tlnet/archive/biblatex-philosophy.doc.r55276.tar.xz
-2020/05/26 | 498731 | systems/win32/miktex/tm/packages/next/miktex-libressl-bin-2.9.tar.lzma
-2020/05/26 | 49727 | systems/win32/miktex/tm/packages/next/miktex-bibarts-bin-2.9.tar.lzma
2020/05/26 | 4944 | macros/latex/contrib/utf8add/utf8hax.sty
-2020/05/26 | 48 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
-2020/05/26 | 47995 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-x64-2.9.tar.lzma
-2020/05/26 | 460501 | systems/win32/miktex/tm/packages/next/miktex-doc-2.9.tar.lzma
-2020/05/26 | 45953 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-x64-2.9.tar.lzma
-2020/05/26 | 457705 | systems/win32/miktex/tm/packages/next/miktex-harfbuzz-bin-2.9.tar.lzma
-2020/05/26 | 45696 | systems/win32/miktex/tm/packages/next/miktex-findtexmf-bin-2.9.tar.lzma
-2020/05/26 | 45645 | systems/win32/miktex/tm/packages/next/miktex-m-tx-bin-2.9.tar.lzma
-2020/05/26 | 455 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
-2020/05/26 | 455 | systems/texlive/tlnet/install-tl.zip.sha512.asc
-2020/05/26 | 455 | systems/texlive/tlnet/install-tl-windows.exe.sha512.asc
-2020/05/26 | 455 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512.asc
2020/05/26 | 4510 | graphics/pstricks/contrib/pst-circ/Changes
-2020/05/26 | 45081 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-x64-2.9.tar.lzma
2020/05/26 | 439747 | macros/latex/contrib/utf8add.zip
-2020/05/26 | 43425 | systems/win32/miktex/tm/packages/next/miktex-expat-bin-2.9.tar.lzma
-2020/05/26 | 42926 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-x64-2.9.tar.lzma
-2020/05/26 | 42620 | systems/win32/miktex/tm/packages/next/miktex-psutils-bin-2.9.tar.lzma
2020/05/26 | 4232 | systems/texlive/tlnet/archive/crossword.r55271.tar.xz
-2020/05/26 | 41930 | systems/win32/miktex/tm/packages/next/miktex-synctex-bin-2.9.tar.lzma
-2020/05/26 | 41134 | systems/win32/miktex/tm/packages/next/miktex-dvicopy-bin-2.9.tar.lzma
2020/05/26 | 40852 | systems/texlive/tlnet/archive/biblatex-philosophy.source.r55276.tar.xz
-2020/05/26 | 40793 | systems/win32/miktex/tm/packages/next/miktex-dvipng-bin-2.9.tar.lzma
-2020/05/26 | 39168 | systems/win32/miktex/tm/packages/next/miktex-zlib-bin-2.9.tar.lzma
-2020/05/26 | 391508 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-x64-2.9.tar.lzma
2020/05/26 | 388 | systems/texlive/tlnet/archive/texlive-docindex.r55280.tar.xz
-2020/05/26 | 36658 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-x64-2.9.tar.lzma
-2020/05/26 | 36417 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-x64-2.9.tar.lzma
2020/05/26 | 364108 | fonts/erewhon-math/Erewhon-Math.otf
-2020/05/26 | 358102 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-x64-2.9.tar.lzma
2020/05/26 | 35148 | macros/latex/contrib/utf8add/LICENSE
-2020/05/26 | 34939 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-x64-2.9.tar.lzma
-2020/05/26 | 34807 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-x64-2.9.tar.lzma
2020/05/26 | 3456 | systems/texlive/tlnet/archive/pwebmac.doc.r55281.tar.xz
+2020/05/26 | 34541104 | systems/win32/w32tex/ltxpkgs.tar.xz
+2020/05/26 | 340415 | macros/latex/required/amscls/doc/amsclass.pdf
2020/05/26 | 338744 | systems/texlive/tlnet/archive/crossword.doc.r55271.tar.xz
2020/05/26 | 33516 | systems/texlive/tlnet/archive/hitszthesis.source.r55272.tar.xz
-2020/05/26 | 328738 | systems/win32/miktex/tm/packages/next/miktex-cairo-bin-2.9.tar.lzma
-2020/05/26 | 32352 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-x64-2.9.tar.lzma
-2020/05/26 | 323365 | systems/win32/miktex/tm/packages/next/miktex-pdftex-bin-2.9.tar.lzma
-2020/05/26 | 32321 | systems/win32/miktex/tm/packages/next/miktex-chktex-bin-2.9.tar.lzma
-2020/05/26 | 31348 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-x64-2.9.tar.lzma
-2020/05/26 | 311643 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-x64-2.9.tar.lzma
-2020/05/26 | 31151 | systems/win32/miktex/tm/packages/next/miktex-posix-bin-2.9.tar.lzma
-2020/05/26 | 30991 | systems/win32/miktex/tm/packages/next/miktex-mspack-bin-2.9.tar.lzma
-2020/05/26 | 30784 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-x64-2.9.tar.lzma
-2020/05/26 | 30214 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-x64-2.9.tar.lzma
-2020/05/26 | 29756 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-x64-2.9.tar.lzma
2020/05/26 | 2956 | fonts/erewhon-math/README.md
-2020/05/26 | 29322 | systems/win32/miktex/tm/packages/next/miktex-axohelp-bin-2.9.tar.lzma
-2020/05/26 | 29035 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-x64-2.9.tar.lzma
-2020/05/26 | 28791 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-x64-2.9.tar.lzma
-2020/05/26 | 28575 | systems/win32/miktex/tm/packages/next/miktex-autosp-bin-2.9.tar.lzma
-2020/05/26 | 281649 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-x64-2.9.tar.lzma
-2020/05/26 | 281420 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-x64-2.9.tar.lzma
-2020/05/26 | 278139 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-x64-2.9.tar.lzma
-2020/05/26 | 27754 | systems/win32/miktex/tm/packages/next/miktex-lacheck-bin-2.9.tar.lzma
-2020/05/26 | 273335 | systems/win32/miktex/tm/packages/next/miktex-dvipdfmx-bin-2.9.tar.lzma
-2020/05/26 | 26948 | systems/win32/miktex/tm/packages/next/miktex-makeindex-bin-2.9.tar.lzma
-2020/05/26 | 2686057 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-x64-2.9.tar.lzma
-2020/05/26 | 26752 | systems/win32/miktex/tm/packages/next/miktex-teckit-bin-2.9.tar.lzma
-2020/05/26 | 26646 | systems/win32/miktex/tm/packages/next/miktex-bzip2-bin-2.9.tar.lzma
-2020/05/26 | 26504 | systems/win32/miktex/tm/packages/next/miktex-uriparser-bin-2.9.tar.lzma
-2020/05/26 | 2555486 | systems/win32/miktex/tm/packages/next/miktex-texworks-bin-2.9.tar.lzma
-2020/05/26 | 25392 | systems/win32/miktex/tm/packages/next/miktex-fribidixetex-bin-2.9.tar.lzma
+2020/05/26 | 2823676 | systems/win32/w32tex/platex.tar.xz
2020/05/26 | 24900 | systems/texlive/tlnet/archive/hitszthesis.r55272.tar.xz
-2020/05/26 | 248464 | systems/win32/miktex/tm/packages/next/miktex-xetex-bin-2.9.tar.lzma
-2020/05/26 | 247775 | systems/win32/miktex/tm/packages/next/miktex-metapost-bin-2.9.tar.lzma
-2020/05/26 | 246433 | systems/win32/miktex/tm/packages/next/miktex-freetype2-bin-2.9.tar.lzma
-2020/05/26 | 243000 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-x64-2.9.tar.lzma
-2020/05/26 | 24269869 | systems/texlive/tlnet/install-tl.zip
-2020/05/26 | 23523 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-x64-2.9.tar.lzma
-2020/05/26 | 23007 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-x64-2.9.tar.lzma
+2020/05/26 | 2488232 | systems/win32/w32tex/tex4htk-w32.tar.xz
2020/05/26 | 22380 | fonts/erewhon-math/Erewhon-Math.ltx
-2020/05/26 | 222867 | systems/win32/miktex/tm/packages/next/miktex-console-bin-x64-2.9.tar.lzma
2020/05/26 | 2228301 | fonts/domitian.zip
2020/05/26 | 2219304 | systems/texlive/tlnet/archive/luajittex.win32.r55269.tar.xz
-2020/05/26 | 2204032 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
2020/05/26 | 219479 | graphics/pstricks/contrib/pst-circ/tex/pst-circ.tex
2020/05/26 | 2180 | systems/texlive/tlnet/archive/marathi.r55275.tar.xz
2020/05/26 | 213512 | macros/latex/contrib/utf8add/utf8add.pdf
-2020/05/26 | 20787 | systems/win32/miktex/tm/packages/next/miktex-devnag-bin-2.9.tar.lzma
-2020/05/26 | 207040 | systems/win32/miktex/tm/packages/next/miktex-pmx-bin-2.9.tar.lzma
-2020/05/26 | 206534 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-x64-2.9.tar.lzma
2020/05/26 | 205767 | macros/latex/contrib/utf8add/utf8hax.pdf
2020/05/26 | 204492 | systems/texlive/tlnet/archive/reledmac.source.r55273.tar.xz
-2020/05/26 | 203218 | systems/win32/miktex/tm/packages/next/miktex-console-bin-2.9.tar.lzma
-2020/05/26 | 2009805 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-x64-2.9.tar.lzma
-2020/05/26 | 199955 | systems/win32/miktex/tm/packages/miktex-zzdb1-2.9.tar.lzma
-2020/05/26 | 199951 | systems/win32/miktex/tm/packages/next/miktex-zzdb1-2.9.tar.lzma
-2020/05/26 | 19890 | systems/win32/miktex/tm/packages/next/miktex-popt-bin-2.9.tar.lzma
-2020/05/26 | 194863 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-2.9.tar.lzma
2020/05/26 | 19455 | macros/latex/contrib/utf8add/utf8add.sty
-2020/05/26 | 193877 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-x64-2.9.tar.lzma
-2020/05/26 | 19379445 | systems/texlive/tlnet/install-tl-windows.exe
-2020/05/26 | 189235 | systems/win32/miktex/tm/packages/next/miktex-omegaware-bin-2.9.tar.lzma
-2020/05/26 | 186843 | systems/win32/miktex/tm/packages/next/miktex-pixman-bin-2.9.tar.lzma
-2020/05/26 | 185810 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-x64-2.9.tar.lzma
-2020/05/26 | 185136 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-x64-2.9.tar.lzma
-2020/05/26 | 184301 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-x64-2.9.tar.lzma
2020/05/26 | 1823600 | systems/texlive/tlnet/archive/luatex.win32.r55269.tar.xz
-2020/05/26 | 17827 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-x64-2.9.tar.lzma
-2020/05/26 | 177527 | systems/win32/miktex/tm/packages/next/miktex-mpfr-bin-x64-2.9.tar.lzma
-2020/05/26 | 17729 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-x64-2.9.tar.lzma
2020/05/26 | 1738702 | fonts/erewhon-math.zip
-2020/05/26 | 1736493 | systems/win32/miktex/tm/packages/next/miktex-luatex-bin-2.9.tar.lzma
-2020/05/26 | 170202 | systems/win32/miktex/tm/packages/next/miktex-metafont-bin-2.9.tar.lzma
-2020/05/26 | 169534 | systems/win32/miktex/tm/packages/next/miktex-curl-bin-2.9.tar.lzma
-2020/05/26 | 168385 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-x64-2.9.tar.lzma
2020/05/26 | 1676384 | systems/texlive/tlnet/archive/hitszthesis.doc.r55272.tar.xz
2020/05/26 | 166732 | systems/texlive/tlnet/archive/texlive-docindex.doc.r55280.tar.xz
-2020/05/26 | 164996 | systems/win32/miktex/tm/packages/next/miktex-mktex-bin-2.9.tar.lzma
-2020/05/26 | 16451404 | systems/texlive/tlnet/tlpkg/texlive.tlpdb
-2020/05/26 | 163962 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-x64-2.9.tar.lzma
2020/05/26 | 16353 | fonts/erewhon-math/unimath-erewhon.ltx
-2020/05/26 | 16118 | systems/win32/miktex/tm/packages/next/miktex-tex2xindy-bin-2.9.tar.lzma
-2020/05/26 | 15946 | systems/win32/miktex/tm/packages/next/miktex-kpathsea-bin-2.9.tar.lzma
2020/05/26 | 158532 | fonts/erewhon-math/Erewhon-Math.pdf
2020/05/26 | 15664 | systems/texlive/tlnet/archive/crossword.source.r55271.tar.xz
2020/05/26 | 1549916 | systems/texlive/tlnet/archive/luahbtex.win32.r55269.tar.xz
-2020/05/26 | 153 | systems/texlive/tlnet/install-tl-windows.exe.sha512
-2020/05/26 | 152 | systems/texlive/tlnet/install-tl-unx.tar.gz.sha512
-2020/05/26 | 152147 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-x64-2.9.tar.lzma
-2020/05/26 | 150094 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-x64-2.9.tar.lzma
-2020/05/26 | 149713 | systems/win32/miktex/tm/packages/next/miktex-tex-bin-2.9.tar.lzma
-2020/05/26 | 148863 | systems/win32/miktex/tm/packages/next/miktex-mo-bin-2.9.tar.lzma
-2020/05/26 | 145 | systems/texlive/tlnet/install-tl.zip.sha512
-2020/05/26 | 144 | systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
-2020/05/26 | 14037 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-x64-2.9.tar.lzma
-2020/05/26 | 1388764 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-x64-2.9.tar.lzma
+2020/05/26 | 139767520 | systems/win32/w32tex/context.tar.xz
2020/05/26 | 138608 | systems/texlive/tlnet/archive/plautopatch.doc.r55274.tar.xz
-2020/05/26 | 137118 | systems/win32/miktex/tm/packages/next/miktex-hunspell-bin-2.9.tar.lzma
2020/05/26 | 1347212 | fonts/erewhon-math/unimath-erewhon.pdf
-2020/05/26 | 133093 | systems/win32/miktex/tm/packages/next/miktex-fontconfig-bin-2.9.tar.lzma
-2020/05/26 | 13049 | systems/win32/miktex/tm/packages/next/miktex-zzip-bin-2.9.tar.lzma
-2020/05/26 | 130481 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-x64-2.9.tar.lzma
-2020/05/26 | 1286407 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-x64-2.9.tar.lzma
2020/05/26 | 12660 | systems/texlive/tlnet/archive/biblatex-philosophy.r55276.tar.xz
-2020/05/26 | 1257174 | systems/win32/miktex/tm/packages/next/miktex-dvisvgm-bin-2.9.tar.lzma
2020/05/26 | 123793 | graphics/pstricks/contrib/pst-circ/doc/pst-circ-doc.tex
-2020/05/26 | 1197091 | systems/win32/miktex/tm/packages/next/miktex-zzdb2-2.9.tar.lzma
-2020/05/26 | 1196697 | systems/win32/miktex/tm/packages/miktex-zzdb2-2.9.tar.lzma
-2020/05/26 | 116882 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-x64-2.9.tar.lzma
-2020/05/26 | 115755 | systems/win32/miktex/tm/packages/next/miktex-dvips-bin-2.9.tar.lzma
-2020/05/26 | 1153 | systems/win32/miktex/tm/packages/next/pr.ini
-2020/05/26 | 1150838 | systems/win32/miktex/tm/packages/next/miktex-runtime-bin-2.9.tar.lzma
-2020/05/26 | 1116686 | systems/win32/miktex/tm/packages/next/miktex-zzdb3-2.9.tar.lzma
-2020/05/26 | 1116665 | systems/win32/miktex/tm/packages/miktex-zzdb3-2.9.tar.lzma
-2020/05/26 | 110963 | systems/win32/miktex/tm/packages/next/miktex-gregorio-bin-x64-2.9.tar.lzma
-2020/05/26 | 110121 | systems/win32/miktex/tm/packages/next/miktex-epstopdf-bin-x64-2.9.tar.lzma
-2020/05/26 | 108822 | systems/win32/miktex/tm/packages/next/miktex-jpeg-bin-x64-2.9.tar.lzma
-2020/05/26 | 1049744 | systems/win32/miktex/tm/packages/next/miktex-asymptote-bin-x64-2.9.tar.lzma
-2020/05/26 | 1042742 | systems/win32/miktex/tm/packages/next/miktex-poppler-bin-x64-2.9.tar.lzma
-2020/05/26 | 102529 | systems/win32/miktex/tm/packages/next/miktex-lua53-bin-x64-2.9.tar.lzma
2020/05/26 | 1018 | fonts/domitian/README
-2020/05/26 | 100563 | systems/win32/miktex/tm/packages/next/miktex-gd-bin-2.9.tar.lzma
2020/05/25 | 985580 | systems/texlive/tlnet/archive/bookshelf.doc.r55262.tar.xz
2020/05/25 | 9846 | macros/latex/contrib/biblatex-contrib/biblatex-unified/unified.cbx
2020/05/25 | 97120 | systems/texlive/tlnet/archive/newcomputermodern.doc.r55265.tar.xz
@@ -284,7 +1047,6 @@
2020/05/25 | 8056 | fonts/domitian/tfm/Domitian-Roman-tlf-sc-ly1.tfm
2020/05/25 | 8052 | fonts/domitian/tfm/Domitian-Roman-tosf-sc-ly1.tfm
2020/05/25 | 802384 | systems/texlive/tlnet/archive/fontsetup.doc.r55263.tar.xz
-2020/05/25 | 79717 | language/marathi.zip
2020/05/25 | 790520 | systems/texlive/tlnet/archive/cnltx.doc.r55265.tar.xz
2020/05/25 | 760 | fonts/domitian/vf/Domitian-Roman-tosf-sc-lgr.vf
2020/05/25 | 760 | fonts/domitian/vf/Domitian-Roman-tlf-sc-lgr.vf
@@ -313,7 +1075,6 @@
2020/05/25 | 72052 | macros/latex/contrib/biblatex-contrib/biblatex-unified/biblatex-unified.pdf
2020/05/25 | 7171 | fonts/domitian/type1/Domitian-RomanLCDFJ.pfb
2020/05/25 | 69259880 | systems/win32/w32tex/luatexja.tar.xz
-2020/05/25 | 68175 | language/marathi/marathi.pdf
2020/05/25 | 672 | fonts/domitian/tfm/Domitian-Roman-tosf-sc-ts3.tfm
2020/05/25 | 672 | fonts/domitian/tfm/Domitian-Roman-tlf-sc-ts3.tfm
2020/05/25 | 668 | fonts/domitian/tfm/Domitian-BoldItalic-tosf-ts3.tfm
@@ -328,19 +1089,16 @@
2020/05/25 | 660 | fonts/domitian/tfm/Domitian-Italic-tlf-ts3.tfm
2020/05/25 | 660 | fonts/domitian/tfm/Domitian-Italic-sup-ts3.tfm
2020/05/25 | 660 | fonts/domitian/tfm/Domitian-Italic-inf-ts3.tfm
-2020/05/25 | 65831464 | systems/win32/w32tex/biblatex-biber.tar.xz
2020/05/25 | 656 | fonts/domitian/tfm/Domitian-Bold-tosf-ts3.tfm
2020/05/25 | 656 | fonts/domitian/tfm/Domitian-Bold-tlf-ts3.tfm
2020/05/25 | 656 | fonts/domitian/tfm/Domitian-Bold-sup-ts3.tfm
2020/05/25 | 656 | fonts/domitian/tfm/Domitian-Bold-inf-ts3.tfm
2020/05/25 | 65465 | graphics/pgf/contrib/tikz-lake-fig.zip
-2020/05/25 | 654293 | systems/win32/w32tex/ChangeLog
2020/05/25 | 6418 | language/japanese/plautopatch/plautopatch.tex
2020/05/25 | 6176 | systems/texlive/tlnet/archive/latexdemo.source.r55265.tar.xz
2020/05/25 | 61521 | graphics/pgf/contrib/tikz-lake-fig/tikz-lake-fig-doc.pdf
2020/05/25 | 6132 | fonts/domitian/tfm/Domitian-Roman-tlf-t1.tfm
2020/05/25 | 6128 | fonts/domitian/tfm/Domitian-Roman-tosf-t1.tfm
-2020/05/25 | 6100 | systems/texlive/tlnet/archive/collection-latexextra.r55262.tar.xz
2020/05/25 | 607425 | macros/latex/contrib/hitszthesis/hitszthesis.pdf
2020/05/25 | 6056 | fonts/domitian/tfm/Domitian-BoldItalic-tlf-t2a.tfm
2020/05/25 | 6052 | fonts/domitian/tfm/Domitian-Roman-tlf-sc-t2a.tfm
@@ -446,7 +1204,7 @@
2020/05/25 | 3813564 | systems/win32/w32tex/luajittex-w32.tar.xz
2020/05/25 | 3808340 | systems/win32/w32tex/luajittex-dev-w32.tar.xz
2020/05/25 | 379128 | systems/texlive/tlnet/archive/examplep.doc.r55265.tar.xz
-2020/05/25 | 3785060 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
+2020/05/25 | 3780524 | systems/win32/w32tex/luajittex-exp-w32.tar.xz
2020/05/25 | 37801 | macros/latex/contrib/reledmac/examples/3-reledpar_pages_different_languages_lualatex.pdf
2020/05/25 | 3764 | fonts/domitian/tfm/Domitian-Bold-tlf-ly1.tfm
2020/05/25 | 3760 | fonts/domitian/tfm/Domitian-Bold-tosf-ly1.tfm
@@ -455,10 +1213,9 @@
2020/05/25 | 358657 | systems/win32/miktex/tm/packages/crossword.tar.lzma
2020/05/25 | 35223 | language/japanese/plautopatch/plautopatch.pdf
2020/05/25 | 34840 | systems/texlive/tlnet/archive/cnltx.r55265.tar.xz
-2020/05/25 | 34552628 | systems/win32/w32tex/ltxpkgs.tar.xz
2020/05/25 | 3445904 | systems/win32/w32tex/win64/luajittex-w64.tar.xz
2020/05/25 | 3445184 | systems/win32/w32tex/win64/luajittex-dev-w64.tar.xz
-2020/05/25 | 3444032 | systems/win32/w32tex/win64/luajittex-exp-w64.tar.xz
+2020/05/25 | 3434060 | systems/win32/w32tex/win64/luajittex-exp-w64.tar.xz
2020/05/25 | 3424 | fonts/domitian/enc/a_kvnmfl.enc
2020/05/25 | 342124 | systems/texlive/tlnet/archive/cochineal.doc.r55265.tar.xz
2020/05/25 | 33788 | systems/texlive/tlnet/archive/examplep.r55265.tar.xz
@@ -504,7 +1261,7 @@
2020/05/25 | 3138 | fonts/domitian/enc/a_xhkga7.enc
2020/05/25 | 3135 | fonts/domitian/enc/a_6i6esj.enc
2020/05/25 | 3131 | fonts/domitian/enc/a_zkzzwq.enc
-2020/05/25 | 3114908 | systems/win32/w32tex/win64/luatex-exp-w64.tar.xz
+2020/05/25 | 3121284 | systems/win32/w32tex/win64/luatex-exp-w64.tar.xz
2020/05/25 | 3114116 | systems/win32/w32tex/win64/luatex-dev-w64.tar.xz
2020/05/25 | 3104980 | systems/win32/w32tex/win64/luatex-w64.tar.xz
2020/05/25 | 3101 | fonts/domitian/enc/a_uih534.enc
@@ -516,7 +1273,6 @@
2020/05/25 | 3091 | fonts/domitian/enc/a_hjkpcv.enc
2020/05/25 | 3062 | fonts/domitian/enc/a_d6ffl3.enc
2020/05/25 | 3060 | systems/texlive/tlnet/archive/haranoaji-extra.doc.r55265.tar.xz
-2020/05/25 | 3052 | systems/texlive/tlnet/archive/haranoaji.doc.r55265.tar.xz
2020/05/25 | 3052 | fonts/domitian/enc/a_walexi.enc
2020/05/25 | 3048 | fonts/domitian/enc/a_b7m3mh.enc
2020/05/25 | 3026 | fonts/domitian/enc/a_h7ftxd.enc
@@ -527,20 +1283,17 @@
2020/05/25 | 297346 | systems/win32/miktex/tm/packages/fontsize.tar.lzma
2020/05/25 | 2951 | fonts/domitian/enc/a_jdvb5w.enc
2020/05/25 | 29200 | systems/texlive/tlnet/archive/bookshelf.source.r55262.tar.xz
-2020/05/25 | 28551 | language/marathi/marathi.dtx
2020/05/25 | 282440 | systems/texlive/tlnet/archive/fontsize.doc.r55265.tar.xz
2020/05/25 | 281988 | macros/latex/contrib/biblatex-contrib/biblatex-unified/JournalUnifiedStyleSheet2007.pdf
2020/05/25 | 2799687 | systems/win32/miktex/tm/packages/cochineal.tar.lzma
2020/05/25 | 276684 | fonts/domitian/type1/Domitian-Roman.pfb
2020/05/25 | 2744 | systems/texlive/tlnet/archive/draftwatermark.r55265.tar.xz
-2020/05/25 | 2741 | language/marathi/marathi.ins
2020/05/25 | 27020 | graphics/pgf/contrib/tikz-lake-fig/tikz-lake-fig.sty
2020/05/25 | 267480 | systems/texlive/tlnet/archive/listings.source.r55265.tar.xz
2020/05/25 | 266036 | systems/texlive/tlnet/archive/draftwatermark.doc.r55265.tar.xz
2020/05/25 | 263410 | macros/latex/contrib/reledmac/examples/4-reledpar_pages_titles_in_line_numbering_with_notes.pdf
2020/05/25 | 2632 | fonts/domitian/tfm/Domitian-Roman-tlf-sc-ot1.tfm
2020/05/25 | 2628 | fonts/domitian/tfm/Domitian-Roman-tosf-sc-ot1.tfm
-2020/05/25 | 26141208 | systems/texlive/tlnet/archive/haranoaji.r55265.tar.xz
2020/05/25 | 26110608 | systems/win32/miktex/tm/packages/haranoaji.tar.lzma
2020/05/25 | 25912136 | systems/texlive/tlnet/archive/haranoaji-extra.r55265.tar.xz
2020/05/25 | 25842048 | systems/win32/miktex/tm/packages/haranoaji-extra.tar.lzma
@@ -667,7 +1420,7 @@
2020/05/25 | 1800 | fonts/domitian/tfm/Domitian-Italic-tlf-t2c--base.tfm
2020/05/25 | 1796 | fonts/domitian/tfm/Domitian-Italic-tosf-t2c--base.tfm
2020/05/25 | 1795 | web/pwebmac/README.md
-2020/05/25 | 17932588 | systems/win32/w32tex/luatex-exp-w32.tar.xz
+2020/05/25 | 17933352 | systems/win32/w32tex/luatex-exp-w32.tar.xz
2020/05/25 | 17914044 | systems/win32/w32tex/luatex-w32.tar.xz
2020/05/25 | 1788 | fonts/domitian/tfm/Domitian-Roman-tosf-t3.tfm
2020/05/25 | 1788 | fonts/domitian/tfm/Domitian-Roman-tlf-t3.tfm
@@ -1084,7 +1837,6 @@
2020/05/25 | 1316 | fonts/domitian/tfm/Domitian-Italic-tosf-ts1--base.tfm
2020/05/25 | 1316 | fonts/domitian/tfm/Domitian-Italic-tlf-ts1--base.tfm
2020/05/25 | 129005 | macros/latex/contrib/reledmac/examples/2-notes-width.pdf
-2020/05/25 | 1269 | language/marathi/glossaries.gls
2020/05/25 | 126229 | systems/win32/miktex/tm/packages/euflag.tar.lzma
2020/05/25 | 1260 | fonts/domitian/tfm/Domitian-BoldItalic-sup-ot1.tfm
2020/05/25 | 1260 | fonts/domitian/tfm/Domitian-BoldItalic-sup-ot1--base.tfm
@@ -1115,7 +1867,6 @@
2020/05/25 | 1208 | fonts/domitian/tfm/Domitian-Italic-inf-ot1--base.tfm
2020/05/25 | 118947 | macros/latex/contrib/reledmac/examples/4-reledpar_verse_text_between.pdf
2020/05/25 | 118717 | macros/latex/contrib/hitszthesis/hitszthesis.dtx
-2020/05/25 | 1183 | language/marathi/README.txt
2020/05/25 | 11712 | systems/texlive/tlnet/archive/fancyvrb.r55265.tar.xz
2020/05/25 | 11492 | systems/texlive/tlnet/archive/draftwatermark.source.r55265.tar.xz
2020/05/25 | 1144 | fonts/domitian/tfm/Domitian-Roman-tosf-sc-ot1--base.tfm
@@ -1202,7 +1953,6 @@
2020/05/24 | 10084 | macros/latex/contrib/fontsetup/doc/fontsetup-doc.tex
2020/05/23 | 997 | systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Packages.gz
2020/05/23 | 990 | systems/win32/miktex/setup/deb/dists/bionic/universe/binary-amd64/Packages.gz
-2020/05/23 | 9329 | language/marathi/article.tex
2020/05/23 | 92 | systems/win32/miktex/setup/deb/dists/stretch/universe/binary-amd64/Release
2020/05/23 | 923 | systems/win32/miktex/setup/deb/dists/focal/universe/binary-amd64/Packages.bz2
2020/05/23 | 89 | systems/win32/miktex/setup/deb/dists/xenial/universe/binary-amd64/Release
@@ -1274,7 +2024,6 @@
2020/05/23 | 2614 | systems/win32/miktex/setup/rpm/fedora/30/repodata/8adaacd3db834710c8a91f6d0f6c7ad2cb6d4d3c1727731b4e3bf717f7e603a9-primary.xml.gz
2020/05/23 | 2599 | systems/win32/miktex/setup/rpm/opensuse/15/repodata/6be53b4332b8bcda44fd587548dffc37317fba9917ea0b653a449708a8c43896-primary.xml.gz
2020/05/23 | 258720 | fonts/newcomputermodern/NewCM10-BoldItalic.otf
-2020/05/23 | 2479868 | systems/win32/w32tex/tex4htk-w32.tar.xz
2020/05/23 | 245992 | fonts/newcomputermodern/NewCMSans10-Regular.otf
2020/05/23 | 235 | systems/win32/miktex/setup/rpm/fedora/32/repodata/073df5a4a967d831d29362e913eb3e6d697089f3f6a0153be0a01ff3e3b41114-other.xml.gz
2020/05/23 | 232844 | fonts/newcomputermodern/NewCMSans10-Oblique.otf
@@ -1363,7 +2112,6 @@
2020/05/22 | 1215340 | systems/texlive/tlnet/archive/optex.doc.r55231.tar.xz
2020/05/22 | 1202 | macros/latex/contrib/ellipsis/README.md
2020/05/22 | 112648 | systems/texlive/tlnet/archive/rec-thy.doc.r55238.tar.xz
-2020/05/21 | 99166400 | systems/win32/w32tex/web2c-lib.tar.xz
2020/05/21 | 82915 | info/latex-veryshortguide/veryshortguide.dtx
2020/05/21 | 762256 | macros/latex/contrib/suftesi/suftesi.pdf
2020/05/21 | 74190 | macros/latex/contrib/babel-contrib/italian/italian.dtx
@@ -1401,75 +2149,3 @@
2020/05/21 | 1125 | macros/generic/chemfig/README
2020/05/21 | 1116252 | macros/generic/chemfig/chemfig-fr.pdf
2020/05/21 | 1088180 | macros/generic/chemfig/chemfig-en.pdf
-2020/05/20 | 99111 | systems/win32/miktex/tm/packages/helmholtz-ellis-ji-notation.tar.lzma
-2020/05/20 | 9854 | macros/luatex/optex/base/if-macros.opm
-2020/05/20 | 96464 | systems/texlive/tlnet/archive/toptesi.source.r55220.tar.xz
-2020/05/20 | 9174 | macros/latex/contrib/toptesi/README.txt
-2020/05/20 | 91743 | macros/xetex/latex/xepersian-hm/kashida-glyph-example.pdf
-2020/05/20 | 90701 | macros/xetex/latex/xepersian-hm/kashida-hrule-example.pdf
-2020/05/20 | 8640 | systems/texlive/tlnet/archive/ptex2pdf.doc.r55219.tar.xz
-2020/05/20 | 859 | macros/xetex/latex/xepersian-hm/README.txt
-2020/05/20 | 8394106 | macros/latex/contrib/toptesi.zip
-2020/05/20 | 8201 | support/classpack/README.md
-2020/05/20 | 78693 | macros/xetex/latex/xepersian-hm/kashida-xep-XB-example.pdf
-2020/05/20 | 7832 | systems/texlive/tlnet/archive/ptex2pdf.r55219.tar.xz
-2020/05/20 | 77091 | macros/luatex/optex/doc/optex-userdoc.tex
-2020/05/20 | 76926 | macros/luatex/latex/cloze/cloze.dtx
-2020/05/20 | 767306 | macros/xetex/latex/xepersian-hm.zip
-2020/05/20 | 70269 | macros/latex/contrib/rec-thy/rec-thy.sty
-2020/05/20 | 69 | support/classpack/MANIFEST
-2020/05/20 | 69146 | support/classpack/classpack.dtx
-2020/05/20 | 69077 | systems/win32/miktex/tm/packages/plantuml.tar.lzma
-2020/05/20 | 6622 | language/japanese/ptex2pdf/README.md
-2020/05/20 | 65545 | macros/xetex/latex/xepersian-hm/doc-samples-xep.pdf
-2020/05/20 | 6503156 | systems/win32/miktex/tm/packages/newtx.tar.lzma
-2020/05/20 | 63436 | macros/xetex/latex/xepersian-hm/doc-samples-glyph.pdf
-2020/05/20 | 6315844 | systems/texlive/tlnet/archive/toptesi.doc.r55220.tar.xz
-2020/05/20 | 62967 | macros/xetex/latex/xepersian-hm/doc-samples-hrule.pdf
-2020/05/20 | 6100 | systems/texlive/tlnet/archive/xepersian-hm.source.r55222.tar.xz
-2020/05/20 | 58016 | macros/xetex/latex/xepersian-hm/xepersian-hm.pdf
-2020/05/20 | 53427 | macros/latex/contrib/rec-thy/rec-thy.tex
-2020/05/20 | 5076 | systems/texlive/tlnet/archive/xepersian-hm.r55222.tar.xz
-2020/05/20 | 5004 | systems/texlive/tlnet/archive/cloze.r55221.tar.xz
-2020/05/20 | 479288 | systems/texlive/tlnet/archive/xepersian-hm.doc.r55222.tar.xz
-2020/05/20 | 41 | support/classpack/VERSION
-2020/05/20 | 3988491 | systems/win32/miktex/tm/packages/l3experimental.tar.lzma
-2020/05/20 | 3691 | macros/xetex/latex/xepersian-hm/kashida-glyph-example.tex
-2020/05/20 | 3647 | macros/xetex/latex/xepersian-hm/kashida-hrule-example.tex
-2020/05/20 | 3528482 | systems/win32/miktex/tm/packages/luatexja.tar.lzma
-2020/05/20 | 321743 | systems/win32/miktex/tm/packages/parskip.tar.lzma
-2020/05/20 | 2950 | macros/luatex/optex/README
-2020/05/20 | 26760 | macros/xetex/latex/xepersian-hm/xepersian-hm.dtx
-2020/05/20 | 264837 | macros/xetex/latex/xepersian-hm/xepersian-hm-doc.pdf
-2020/05/20 | 259293 | macros/luatex/latex/cloze.zip
-2020/05/20 | 257712 | macros/luatex/latex/cloze/cloze.pdf
-2020/05/20 | 242292 | systems/texlive/tlnet/archive/cloze.doc.r55221.tar.xz
-2020/05/20 | 24027 | macros/luatex/optex/base/parameters.opm
-2020/05/20 | 2292 | systems/texlive/tlnet/archive/classpack.r55218.tar.xz
-2020/05/20 | 2244 | macros/luatex/latex/cloze/cloze.ins
-2020/05/20 | 2206 | support/classpack/classpack.ins
-2020/05/20 | 21738 | macros/luatex/optex/base/table.opm
-2020/05/20 | 21084 | systems/texlive/tlnet/archive/classpack.source.r55218.tar.xz
-2020/05/20 | 20384 | systems/texlive/tlnet/archive/toptesi.r55220.tar.xz
-2020/05/20 | 2028082 | systems/win32/miktex/tm/packages/miktex-luatex-bin-x64-2.9.tar.lzma
-2020/05/20 | 2014922 | systems/win32/miktex/tm/packages/newpx.tar.lzma
-2020/05/20 | 1937 | macros/xetex/latex/xepersian-hm/xepersian-hm.ins
-2020/05/20 | 18092 | language/japanese/ptex2pdf/COPYING
-2020/05/20 | 1750602 | systems/win32/miktex/tm/packages/miktex-luatex-bin-2.9.tar.lzma
-2020/05/20 | 17268 | systems/texlive/tlnet/archive/cloze.source.r55221.tar.xz
-2020/05/20 | 166549 | support/classpack.zip
-2020/05/20 | 148774 | support/classpack/classpack.pdf
-2020/05/20 | 1459 | macros/xetex/latex/xepersian-hm/kashida-xep-XB-example.tex
-2020/05/20 | 143968 | systems/texlive/tlnet/archive/classpack.doc.r55218.tar.xz
-2020/05/20 | 14356 | language/japanese/ptex2pdf.zip
-2020/05/20 | 14066 | language/japanese/ptex2pdf/ptex2pdf.lua
-2020/05/20 | 1349 | macros/luatex/latex/cloze/README
-2020/05/20 | 13119 | macros/xetex/latex/xepersian-hm/doc-ligature-xephm.pdf
-2020/05/20 | 1286773 | systems/win32/miktex/tm/packages/miktex-runtime-bin-x64-2.9.tar.lzma
-2020/05/20 | 12376 | macros/xetex/latex/xepersian-hm/xepersian-hm-doc.ltx
-2020/05/20 | 1206961 | macros/luatex/optex/doc/optex-doc.pdf
-2020/05/20 | 1150804 | systems/win32/miktex/tm/packages/miktex-runtime-bin-2.9.tar.lzma
-2020/05/20 | 113103 | macros/latex/contrib/rec-thy/rec-thy.pdf
-2020/05/20 | 1097 | macros/xetex/latex/xepersian-hm/INSTALL.txt
-2020/05/20 | 10479532 | systems/win32/w32tex/ptex-w32.tar.xz
-2020/05/20 | 10115 | macros/xetex/latex/xepersian-hm/doc-ligature-xep.pdf
diff --git a/fonts/utilities/fontools/bin/afm2afm b/fonts/utilities/fontools/bin/afm2afm
index f1b6b33ce2..5cf132bb20 100755
--- a/fonts/utilities/fontools/bin/afm2afm
+++ b/fonts/utilities/fontools/bin/afm2afm
@@ -37,7 +37,7 @@ use File::Basename;
use Getopt::Long;
use Pod::Usage;
-my $VERSION = "20200511";
+my $VERSION = "20200527";
parse_commandline();
@@ -421,7 +421,7 @@ See the GNU General Public License for more details.
=head1 VERSION
-This document describes B<afm2afm> version 20200511.
+This document describes B<afm2afm> version 20200527.
=head1 RECENT CHANGES
diff --git a/fonts/utilities/fontools/bin/autoinst b/fonts/utilities/fontools/bin/autoinst
index 3ea9f5e9ef..0e4bae4eec 100755
--- a/fonts/utilities/fontools/bin/autoinst
+++ b/fonts/utilities/fontools/bin/autoinst
@@ -40,7 +40,7 @@ use Getopt::Long ();
use Pod::Usage ();
use POSIX ();
-my $VERSION = '20200511';
+my $VERSION = '20200527';
my ($d, $m, $y) = (localtime time)[3 .. 5];
my $TODAY = sprintf "%04d/%02d/%02d", $y + 1900, $m + 1, $d;
@@ -48,7 +48,7 @@ my $TODAY = sprintf "%04d/%02d/%02d", $y + 1900, $m + 1, $d;
my $RUNNING_AS_MAIN = (__PACKAGE__ eq 'main');
-=begin Architecture
+=begin Comment
----------------------------------------------------------------------------
@@ -86,7 +86,7 @@ my $RUNNING_AS_MAIN = (__PACKAGE__ eq 'main');
----------------------------------------------------------------------------
-=end Architecture
+=end Comment
=cut
@@ -156,8 +156,8 @@ sub get_fontinfo {
my $basicinfo = Font::Raw::get_basicinfo($filename);
$info->process_basicinfo($basicinfo);
- my $os2_table = Font::Raw::get_os2_table($filename);
- $info->process_os2_table($os2_table);
+ my $os2_table = Font::Raw::get_classdata($filename);
+ $info->process_classdata($os2_table);
my $featuredata = Font::Raw::get_featuredata($filename);
$info->process_featuredata($featuredata);
@@ -182,6 +182,7 @@ my $ERR_DETAIL =<<'END_ERR_DETAIL';
Width: %s
Shape: %s
Size: %s-%s
+ Smallcaps: %s
END_ERR_DETAIL
@@ -359,15 +360,19 @@ sub process_basicinfo {
$self->{family} = $1;
$self->{shape} = NFSS::unabbreviate(lc($2));
}
- # Ditto for the smallcaps shape; here we have to test both 'family'
- # and 'name' for hints that this is a small caps font, as some fonts
- # (e.g., Dolly) only mention this in their name.
+ # Ditto for the smallcaps shape; here we have to test both 'family',
+ # 'subfamily' and 'name' for hints that this is a small caps font,
+ # as some fonts (e.g., Dolly) only mention this in their name.
$shapes = join '|', Util::sort_desc_length(qw(smallcaps sc smcp caps));
- if ($self->{family} =~ m/(.+?) -? (?: $shapes) \z/xmsi) {
+ if ($self->{family} =~ m/(.+?) (?: $shapes) \z/xmsi) {
$self->{family} = $1;
$self->{is_smallcaps} = 1;
}
- if ($self->{name} =~ m/(.+?) -? (?: $shapes) \z/xmsi) {
+ if ($self->{subfamily} =~ m/(.+?) (?: $shapes) \z/xmsi) {
+ $self->{subfamily} = $1;
+ $self->{is_smallcaps} = 1;
+ }
+ if ($self->{name} =~ m/(.+?) (?: $shapes) \z/xmsi) {
$self->{name} = $1;
$self->{is_smallcaps} = 1;
}
@@ -417,12 +422,13 @@ sub process_basicinfo {
# --------------------------------------------------------------------------
-# Extracts usWeightClass and usWidthClass from the OS/2 table.
+# Processes the usWeightClass and usWidthClass data.
# --------------------------------------------------------------------------
-sub process_os2_table {
- my ($self, $os2_table) = @_;
+sub process_classdata {
+ my ($self, $classdata) = @_;
- @{$self}{qw(weight_class width_class)} = unpack '@4n @6n', $os2_table;
+ $self->{weight_class} = $classdata->{weight_class};
+ $self->{width_class} = $classdata->{width_class};
return;
}
@@ -444,34 +450,32 @@ sub process_featuredata {
# Extracts 'minsize' and 'maxsize' from the optical design size info.
# --------------------------------------------------------------------------
sub process_sizedata {
- my ($self, $data) = @_;
+ my ($self, $sizedata) = @_;
- if (my ($minsize, $maxsize)
- = $data =~ m/[(] ([\d.]+) \s* pt, \s*
- ([\d.]+) \s* pt \s* [)]]/xms) {
- # fix some known bugs
- if ($self->{name} eq 'GaramondPremrPro-It'
- && $minsize == 6 && $maxsize == 8.9) {
- ($minsize, $maxsize) = (8.9, 14.9);
- }
- elsif ($self->{family} eq 'KeplerStd'
- && $self->{subfamily} =~ m/Caption/xms
- && $minsize == 8.9 && $maxsize == 13.9) {
- ($minsize, $maxsize) = (6, 8.9);
- }
- elsif ($self->{family} eq 'KeplerStd'
- && $self->{subfamily} =~ m/Subhead/xms
- && $minsize == 8.9 && $maxsize == 13.9) {
- ($minsize, $maxsize) = (13.9, 23);
- }
- elsif ($self->{family} eq 'KeplerStd'
- && $self->{subfamily} =~ m/Display/xms
- && $minsize == 8.9 && $maxsize == 13.9) {
- ($minsize, $maxsize) = (23, 72);
- }
+ my ($minsize, $maxsize) = @$sizedata;
- @{$self}{qw(minsize maxsize)} = ($minsize, $maxsize);
+ # fix some known bugs
+ if ($self->{name} eq 'GaramondPremrPro-It'
+ && $minsize == 6 && $maxsize == 8.9) {
+ ($minsize, $maxsize) = (8.9, 14.9);
+ }
+ elsif ($self->{family} eq 'KeplerStd'
+ && $self->{subfamily} =~ m/Caption/xms
+ && $minsize == 8.9 && $maxsize == 13.9) {
+ ($minsize, $maxsize) = (6, 8.9);
}
+ elsif ($self->{family} eq 'KeplerStd'
+ && $self->{subfamily} =~ m/Subhead/xms
+ && $minsize == 8.9 && $maxsize == 13.9) {
+ ($minsize, $maxsize) = (13.9, 23);
+ }
+ elsif ($self->{family} eq 'KeplerStd'
+ && $self->{subfamily} =~ m/Display/xms
+ && $minsize == 8.9 && $maxsize == 13.9) {
+ ($minsize, $maxsize) = (23, 72);
+ }
+
+ @{$self}{qw(minsize maxsize)} = ($minsize, $maxsize);
return;
}
@@ -517,9 +521,9 @@ sub get_basicinfo {
# --------------------------------------------------------------------------
-# Returns the font's OS/2 table.
+# Returns usWeightClass and usWidthClass from the OS/2 table.
# --------------------------------------------------------------------------
-sub get_os2_table {
+sub get_classdata {
my $filename = shift;
my $os2_table;
@@ -532,7 +536,12 @@ sub get_os2_table {
or die "'$cmd' failed";
} or warn "[WARNING] $@";
- return $os2_table;
+ my ($weight_class, $width_class) = unpack '@4n @6n', $os2_table;
+
+ return {
+ weight_class => $weight_class,
+ width_class => $width_class,
+ };
}
@@ -579,7 +588,13 @@ sub get_sizedata {
close $otfinfo
or die "[ERROR] '$cmd' failed.";
- return $data;
+ my ($minsize, $maxsize)
+ = $data =~ m/[(] ([\d.]+) \s* pt, \s*
+ ([\d.]+) \s* pt \s* [])]/xms;
+
+ $minsize //= 0;
+ $maxsize //= 0;
+ return [ $minsize, $maxsize ];
}
@@ -638,7 +653,7 @@ sub create_support_files {
[ $minsize, $maxsize, $workitem->{fontname} ];
}
- create_stylefile($family, \%fddata);
+ create_stylefile($nfss_mapping, $family, \%fddata);
while (my ($enc, $encdata) = each %fddata) {
while (my ($sty, $stydata) = each %$encdata) {
create_fdfile($nfss_mapping, $family, $enc, $sty, $stydata);
@@ -662,7 +677,22 @@ my %SSUB_SHAPE = (
# Creates a LaTeX style file.
# --------------------------------------------------------------------------
sub create_stylefile {
- my ($fam, $data) = @_;
+ my ($nfss_mapping, $fam, $data) = @_;
+
+ my $testfont;
+ eval {
+ my $testenc = $ARGV{encoding}[0];
+ my $testfig = ( grep { exists $data->{$testenc}{$_} }
+ qw(OsF LF TOsF TLF) )[0] or die;
+ my $testweight = $nfss_mapping->{weight}{""}[0] or die;
+ my $testshape
+ = ( grep { exists $data->{$testenc}{$testfig}{$testweight}{$_} }
+ qw(n it sl sc)
+ )[0] or die;
+ $testfont
+ = $data->{$testenc}{$testfig}{$testweight}{$testshape}[0][2]
+ or die;
+ };
my %seen = %{Util::get_keys($data)};
@@ -687,6 +717,7 @@ END_STY_HEADER
print {$STY} "\\RequirePackage{fontenc}\n";
print {$STY} "\\RequirePackage{textcomp}\n" if $seen{TS1};
+ print {$STY} "\\RequirePackage{ifthen}\n";
print {$STY} <<'END_STY_FONTAXES_START';
\IfFileExists{mweights.sty}{\RequirePackage{mweights}}{}
@@ -709,10 +740,12 @@ END_STY_FONTAXES_SW
print {$STY} <<'END_STY_FONTAXES_SUP';
\fa@naming@exception{figures}{{superior}{proportional}}{Sup}
\fa@naming@exception{figures}{{superior}{tabular}}{Sup}
- \def\sufigures{\@nomath\sufigures
+ \def\supfigures{\@nomath\supfigures
\fontfigurestyle{superior}\selectfont}
- \DeclareTextFontCommand{\textsu}{\sufigures}
- \let\textsuperior\textsu
+ \let\sufigures\supfigures
+ \DeclareTextFontCommand{\textsup}{\supfigures}
+ \let\textsu\textsup
+ \let\textsuperior\textsup
END_STY_FONTAXES_SUP
}
@@ -721,10 +754,12 @@ END_STY_FONTAXES_SUP
print {$STY} <<'END_STY_FONTAXES_INF';
\fa@naming@exception{figures}{{inferior}{proportional}}{Inf}
\fa@naming@exception{figures}{{inferior}{tabular}}{Inf}
- \def\infigures{\@nomath\infigures
+ \def\inffigures{\@nomath\inffigures
\fontfigurestyle{inferior}\selectfont}
- \DeclareTextFontCommand{\textin}{\infigures}
- \let\textinferior\textin
+ \let\infigures\inffigures
+ \DeclareTextFontCommand{\textinf}{\inffigures}
+ \let\textin\textinf
+ \let\textinferior\textinf
END_STY_FONTAXES_INF
}
@@ -771,16 +806,10 @@ END_STY_FONTAXES_DNOM
print {$STY} "}{}\n\n";
print {$STY} <<"END_STY_XKEYVAL";
-\\IfFileExists{xkeyval.sty}{
- \\newcommand*{\\$fam\@scale}{1}
- \\RequirePackage{xkeyval}
- \\DeclareOptionX{scale}{\\renewcommand*{\\$fam\@scale}{##1}}
- \\DeclareOptionX{scaled}{\\renewcommand*{\\$fam\@scale}{##1}}
-}{
- \\let\\DeclareOptionX\\DeclareOption
- \\let\\ExecuteOptionsX\\ExecuteOptions
- \\let\\ProcessOptionsX\\ProcessOptions
-}
+\\RequirePackage{xkeyval}
+\\newcommand*{\\$fam\@scale}{1}
+\\DeclareOptionX{scale}{\\renewcommand*{\\$fam\@scale}{#1}}
+\\DeclareOptionX{scaled}{\\renewcommand*{\\$fam\@scale}{#1}}
END_STY_XKEYVAL
@@ -807,12 +836,51 @@ END_STY_XKEYVAL
}
END_STY_MAINFONT
+ if ($ARGV{math}) {
+ print {$STY} <<"END_STY_MATHOPTION";
+\\newif\\if$fam\@math\\$fam\@mathfalse
+\\DeclareOptionX{math}{\\$fam\@mathtrue}
+
+\\newcommand*{\\$fam\@mathstyle}{TeX}
+\\DeclareOptionX{math-style}{\\renewcommand*{\\$fam\@mathstyle}{#1}}
+
+END_STY_MATHOPTION
+
+ if ($seen{LF} or $seen{TLF}) {
+ print {$STY} "\\newcommand*{\\$fam\@mathfigurestyle}{LF}\n";
+ }
+ elsif ($seen{OsF} or $seen{TOsF}) {
+ print {$STY} "\\newcommand*{\\$fam\@mathfigurestyle}{OsF}\n";
+ }
+
+ if ($seen{OsF} or $seen{TOsF}) {
+ print {$STY}
+ "\\DeclareOptionX{matholdstyle}\n",
+ " {\\renewcommand*{\\$fam\@mathfigurestyle}{OsF}}\n";
+ }
+ if ($seen{LF} or $seen{TLF}) {
+ print {$STY}
+ "\\DeclareOptionX{mathlining}",
+ " {\\renewcommand{\\$fam\@mathfigurestyle}{LF}}\n";
+ }
+ print {$STY} "\n";
+
+ if ($seen{sw}) {
+ print {$STY} <<"END_STY_MATHCALOPTION";
+\\newif\\if$fam\@mathcal\\$fam\@mathcalfalse
+\\DeclareOptionX{mathcal}{\\$fam\@mathcaltrue}
+
+END_STY_MATHCALOPTION
+ }
+ }
+
my $defaults
= $seen{OsF} ? 'oldstyle,proportional'
: $seen{TOsF} ? 'oldstyle,tabular'
: $seen{LF} ? 'lining,proportional'
: $seen{TLF} ? 'lining,tabular'
- : die "[ERROR] Internal bug, please report!";
+ : die "[ERROR] Internal bug, please report!"
+ ;
my $default_bold;
for my $series (qw(heavy black extrabold demibold semibold bold)) {
@@ -836,17 +904,367 @@ END_STY_MAINFONT
}
$defaults .= ",$default_regular" if $default_regular;
- print {$STY} <<"END_STYLE_REST";
+ print {$STY} <<"END_STY_PROCESSOPTIONS";
\\ExecuteOptionsX{$defaults}
\\ProcessOptionsX\\relax
+END_STY_PROCESSOPTIONS
+
+ if (defined $testfont) {
+ print {$STY} <<"END_STY_MATCHLOWERCASE";
+\\ifthenelse{\\equal{\\$fam\@scale}{MatchLowercase}}
+ {\\newlength{\\$fam\@defaultx}
+ \\settoheight{\\$fam\@defaultx}{x}
+ \\newlength{\\$fam\@xheight}
+ \\settoheight{\\$fam\@xheight}
+ {{\\font\\testfont=$testfont at \\f\@size pt\\testfont x}}
+ \\renewcommand*{\\$fam\@scale}
+ {\\strip\@pt\\dimexpr\\number\\numexpr\\number\\dimexpr\\$fam\@defaultx\\relax*65536/\\number\\dimexpr\\$fam\@xheight\\relax\\relax sp\\relax}
+ }
+ {}
+
+END_STY_MATCHLOWERCASE
+ }
+
+ print {$STY} <<"END_STYLE_REST";
\\renewcommand*
{\\$ARGV{nfss}default}
{$fam-\\$fam\@figurealign\\$fam\@figurestyle}
-\\endinput
END_STYLE_REST
+ if ($ARGV{math}) {
+ print {$STY} <<"END_STY_MATH";
+\\newif\\if$fam\@mathLATINup\\$fam\@mathLATINupfalse
+\\newif\\if$fam\@mathlatinup\\$fam\@mathlatinupfalse
+\\newif\\if$fam\@mathGREEKup\\$fam\@mathGREEKupfalse
+\\newif\\if$fam\@mathgreekup\\$fam\@mathgreekupfalse
+
+\\if$fam\@math
+ \\DeclareSymbolFont{newoperators} {OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{n}
+ \\SetSymbolFont{newoperators}{bold}{OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{n}
+
+ \\DeclareSymbolFont{newletters} {OML}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{it}
+ \\SetSymbolFont{newletters}{bold}{OML}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{it}
+
+ \\DeclareSymbolFontAlphabet{\\mathrm}{newoperators}
+ \\DeclareSymbolFontAlphabet{\\mathnormal}{newletters}
+
+ \\def\\operator\@font{\\mathgroup\\symnewoperators}
+ \\SetMathAlphabet{\\mathit}{normal}{OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{it}
+ \\SetMathAlphabet{\\mathit}{bold} {OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{it}
+
+ \\SetMathAlphabet{\\mathbf}{normal}{OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{n}
+ \\SetMathAlphabet{\\mathbf}{bold} {OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{n}
+
+ \\def\\re\@DeclareMathSymbol#1#2#3#4{%
+ \\if\\relax\\noexpand#1\\let#1=\\undefined\\fi
+ \\DeclareMathSymbol{#1}{#2}{#3}{#4}}
+
+ \\def\\re\@DeclareMathDelimiter#1#2#3#4#5#6{%
+ \\let#1=\\undefined
+ \\DeclareMathDelimiter{#1}{#2}{#3}{#4}{#5}{#6}}
+
+ \\def\\re\@DeclareMathAccent#1#2#3#4{%
+ \\let#1=\\undefined
+ \\DeclareMathAccent{#1}{#2}{#3}{#4}}
+
+ \\re\@DeclareMathSymbol{0}{\\mathalpha}{newoperators}{`0}
+ \\re\@DeclareMathSymbol{1}{\\mathalpha}{newoperators}{`1}
+ \\re\@DeclareMathSymbol{2}{\\mathalpha}{newoperators}{`2}
+ \\re\@DeclareMathSymbol{3}{\\mathalpha}{newoperators}{`3}
+ \\re\@DeclareMathSymbol{4}{\\mathalpha}{newoperators}{`4}
+ \\re\@DeclareMathSymbol{5}{\\mathalpha}{newoperators}{`5}
+ \\re\@DeclareMathSymbol{6}{\\mathalpha}{newoperators}{`6}
+ \\re\@DeclareMathSymbol{7}{\\mathalpha}{newoperators}{`7}
+ \\re\@DeclareMathSymbol{8}{\\mathalpha}{newoperators}{`8}
+ \\re\@DeclareMathSymbol{9}{\\mathalpha}{newoperators}{`9}
+
+ \\re\@DeclareMathSymbol{a}{\\mathalpha}{newletters}{`a}
+ \\re\@DeclareMathSymbol{b}{\\mathalpha}{newletters}{`b}
+ \\re\@DeclareMathSymbol{c}{\\mathalpha}{newletters}{`c}
+ \\re\@DeclareMathSymbol{d}{\\mathalpha}{newletters}{`d}
+ \\re\@DeclareMathSymbol{e}{\\mathalpha}{newletters}{`e}
+ \\re\@DeclareMathSymbol{f}{\\mathalpha}{newletters}{`f}
+ \\re\@DeclareMathSymbol{g}{\\mathalpha}{newletters}{`g}
+ \\re\@DeclareMathSymbol{h}{\\mathalpha}{newletters}{`h}
+ \\re\@DeclareMathSymbol{i}{\\mathalpha}{newletters}{`i}
+ \\re\@DeclareMathSymbol{j}{\\mathalpha}{newletters}{`j}
+ \\re\@DeclareMathSymbol{k}{\\mathalpha}{newletters}{`k}
+ \\re\@DeclareMathSymbol{l}{\\mathalpha}{newletters}{`l}
+ \\re\@DeclareMathSymbol{m}{\\mathalpha}{newletters}{`m}
+ \\re\@DeclareMathSymbol{n}{\\mathalpha}{newletters}{`n}
+ \\re\@DeclareMathSymbol{o}{\\mathalpha}{newletters}{`o}
+ \\re\@DeclareMathSymbol{p}{\\mathalpha}{newletters}{`p}
+ \\re\@DeclareMathSymbol{q}{\\mathalpha}{newletters}{`q}
+ \\re\@DeclareMathSymbol{r}{\\mathalpha}{newletters}{`r}
+ \\re\@DeclareMathSymbol{s}{\\mathalpha}{newletters}{`s}
+ \\re\@DeclareMathSymbol{t}{\\mathalpha}{newletters}{`t}
+ \\re\@DeclareMathSymbol{u}{\\mathalpha}{newletters}{`u}
+ \\re\@DeclareMathSymbol{v}{\\mathalpha}{newletters}{`v}
+ \\re\@DeclareMathSymbol{w}{\\mathalpha}{newletters}{`w}
+ \\re\@DeclareMathSymbol{x}{\\mathalpha}{newletters}{`x}
+ \\re\@DeclareMathSymbol{y}{\\mathalpha}{newletters}{`y}
+ \\re\@DeclareMathSymbol{z}{\\mathalpha}{newletters}{`z}
+
+ \\re\@DeclareMathSymbol{A}{\\mathalpha}{newletters}{`A}
+ \\re\@DeclareMathSymbol{B}{\\mathalpha}{newletters}{`B}
+ \\re\@DeclareMathSymbol{C}{\\mathalpha}{newletters}{`C}
+ \\re\@DeclareMathSymbol{D}{\\mathalpha}{newletters}{`D}
+ \\re\@DeclareMathSymbol{E}{\\mathalpha}{newletters}{`E}
+ \\re\@DeclareMathSymbol{F}{\\mathalpha}{newletters}{`F}
+ \\re\@DeclareMathSymbol{G}{\\mathalpha}{newletters}{`G}
+ \\re\@DeclareMathSymbol{H}{\\mathalpha}{newletters}{`H}
+ \\re\@DeclareMathSymbol{I}{\\mathalpha}{newletters}{`I}
+ \\re\@DeclareMathSymbol{J}{\\mathalpha}{newletters}{`J}
+ \\re\@DeclareMathSymbol{K}{\\mathalpha}{newletters}{`K}
+ \\re\@DeclareMathSymbol{L}{\\mathalpha}{newletters}{`L}
+ \\re\@DeclareMathSymbol{M}{\\mathalpha}{newletters}{`M}
+ \\re\@DeclareMathSymbol{N}{\\mathalpha}{newletters}{`N}
+ \\re\@DeclareMathSymbol{O}{\\mathalpha}{newletters}{`O}
+ \\re\@DeclareMathSymbol{P}{\\mathalpha}{newletters}{`P}
+ \\re\@DeclareMathSymbol{Q}{\\mathalpha}{newletters}{`Q}
+ \\re\@DeclareMathSymbol{R}{\\mathalpha}{newletters}{`R}
+ \\re\@DeclareMathSymbol{S}{\\mathalpha}{newletters}{`S}
+ \\re\@DeclareMathSymbol{T}{\\mathalpha}{newletters}{`T}
+ \\re\@DeclareMathSymbol{U}{\\mathalpha}{newletters}{`U}
+ \\re\@DeclareMathSymbol{V}{\\mathalpha}{newletters}{`V}
+ \\re\@DeclareMathSymbol{W}{\\mathalpha}{newletters}{`W}
+ \\re\@DeclareMathSymbol{X}{\\mathalpha}{newletters}{`X}
+ \\re\@DeclareMathSymbol{Y}{\\mathalpha}{newletters}{`Y}
+ \\re\@DeclareMathSymbol{Z}{\\mathalpha}{newletters}{`Z}
+
+ \\re\@DeclareMathSymbol{\\imath}{\\mathord}{newletters}{"7B}
+ \\re\@DeclareMathSymbol{\\jmath}{\\mathord}{newletters}{"7C}
+
+ %
+ % A number of math symbol declarations have been commented out,
+ % since these characters generally do not work very well when
+ % typesetting maths (either because of spacing issues or because
+ % they don't mix with others symbols).
+ % The commented-out declarations have been left in this style file
+ % in case the user does want to re-activate those characters.
+ %
+
+ \\re\@DeclareMathSymbol{!}{\\mathclose}{newoperators}{"21}
+ % \\re\@DeclareMathSymbol{+}{\\mathbin} {newoperators}{"2B}
+ \\re\@DeclareMathSymbol{:}{\\mathrel} {newoperators}{"3A}
+ \\re\@DeclareMathSymbol{;}{\\mathpunct}{newoperators}{"3B}
+ % \\re\@DeclareMathSymbol{=}{\\mathrel} {newoperators}{"3D}
+ \\re\@DeclareMathSymbol{?}{\\mathclose}{newoperators}{"3F}
+
+ \\re\@DeclareMathSymbol{.}{\\mathord} {newletters}{"3A}
+ \\re\@DeclareMathSymbol{,}{\\mathpunct}{newletters}{"3B}
+ % \\re\@DeclareMathSymbol{<}{\\mathrel} {newletters}{"3C}
+ % \\re\@DeclareMathSymbol{/}{\\mathord} {newletters}{"3D}
+ % \\re\@DeclareMathSymbol{>}{\\mathrel} {newletters}{"3E}
+
+ \\re\@DeclareMathSymbol{\\mathdollar}{\\mathord} {newoperators}{"24}
+ \\re\@DeclareMathSymbol{\\colon} {\\mathpunct}{newoperators}{"3A}
+
+ % \\DeclareMathDelimiter{(}{\\mathopen} {newoperators}{"28}{largesymbols}{"00}
+ % \\DeclareMathDelimiter{)}{\\mathclose}{newoperators}{"29}{largesymbols}{"01}
+ % \\DeclareMathDelimiter{[}{\\mathopen} {newoperators}{"5B}{largesymbols}{"02}
+ % \\DeclareMathDelimiter{]}{\\mathclose}{newoperators}{"5D}{largesymbols}{"03}
+ % \\DeclareMathDelimiter{/}{\\mathord} {newoperators}{"2F}{largesymbols}{"0E}
+
+ \\re\@DeclareMathAccent{\\grave} {\\mathalpha}{newoperators}{"12}
+ \\re\@DeclareMathAccent{\\acute} {\\mathalpha}{newoperators}{"13}
+ \\re\@DeclareMathAccent{\\check} {\\mathalpha}{newoperators}{"14}
+ \\re\@DeclareMathAccent{\\breve} {\\mathalpha}{newoperators}{"15}
+ \\re\@DeclareMathAccent{\\bar} {\\mathalpha}{newoperators}{"16}
+ \\re\@DeclareMathAccent{\\mathring}{\\mathalpha}{newoperators}{"17}
+ \\re\@DeclareMathAccent{\\hat} {\\mathalpha}{newoperators}{"5E}
+ \\re\@DeclareMathAccent{\\dot} {\\mathalpha}{newoperators}{"5F}
+ \\re\@DeclareMathAccent{\\tilde} {\\mathalpha}{newoperators}{"7E}
+ \\re\@DeclareMathAccent{\\ddot} {\\mathalpha}{newoperators}{"7F}
+
+ \\re\@DeclareMathSymbol{\\Gamma} {\\mathalpha}{newoperators}{"00}
+ \\re\@DeclareMathSymbol{\\Delta} {\\mathalpha}{newoperators}{"01}
+ \\re\@DeclareMathSymbol{\\Theta} {\\mathalpha}{newoperators}{"02}
+ \\re\@DeclareMathSymbol{\\Lambda} {\\mathalpha}{newoperators}{"03}
+ \\re\@DeclareMathSymbol{\\Xi} {\\mathalpha}{newoperators}{"04}
+ \\re\@DeclareMathSymbol{\\Pi} {\\mathalpha}{newoperators}{"05}
+ \\re\@DeclareMathSymbol{\\Sigma} {\\mathalpha}{newoperators}{"06}
+ \\re\@DeclareMathSymbol{\\Upsilon}{\\mathalpha}{newoperators}{"07}
+ \\re\@DeclareMathSymbol{\\Phi} {\\mathalpha}{newoperators}{"08}
+ \\re\@DeclareMathSymbol{\\Psi} {\\mathalpha}{newoperators}{"09}
+ \\re\@DeclareMathSymbol{\\Omega} {\\mathalpha}{newoperators}{"0A}
+
+ \\re\@DeclareMathSymbol{\\alpha} {\\mathord}{newletters}{"0B}
+ \\re\@DeclareMathSymbol{\\beta} {\\mathord}{newletters}{"0C}
+ \\re\@DeclareMathSymbol{\\gamma} {\\mathord}{newletters}{"0D}
+ \\re\@DeclareMathSymbol{\\delta} {\\mathord}{newletters}{"0E}
+ \\re\@DeclareMathSymbol{\\epsilon} {\\mathord}{newletters}{"0F}
+ \\re\@DeclareMathSymbol{\\zeta} {\\mathord}{newletters}{"10}
+ \\re\@DeclareMathSymbol{\\eta} {\\mathord}{newletters}{"11}
+ \\re\@DeclareMathSymbol{\\theta} {\\mathord}{newletters}{"12}
+ \\re\@DeclareMathSymbol{\\iota} {\\mathord}{newletters}{"13}
+ \\re\@DeclareMathSymbol{\\kappa} {\\mathord}{newletters}{"14}
+ \\re\@DeclareMathSymbol{\\lambda} {\\mathord}{newletters}{"15}
+ \\re\@DeclareMathSymbol{\\mu} {\\mathord}{newletters}{"16}
+ \\re\@DeclareMathSymbol{\\nu} {\\mathord}{newletters}{"17}
+ \\re\@DeclareMathSymbol{\\xi} {\\mathord}{newletters}{"18}
+ \\re\@DeclareMathSymbol{\\pi} {\\mathord}{newletters}{"19}
+ \\re\@DeclareMathSymbol{\\rho} {\\mathord}{newletters}{"1A}
+ \\re\@DeclareMathSymbol{\\sigma} {\\mathord}{newletters}{"1B}
+ \\re\@DeclareMathSymbol{\\tau} {\\mathord}{newletters}{"1C}
+ \\re\@DeclareMathSymbol{\\upsilon} {\\mathord}{newletters}{"1D}
+ \\re\@DeclareMathSymbol{\\phi} {\\mathord}{newletters}{"1E}
+ \\re\@DeclareMathSymbol{\\chi} {\\mathord}{newletters}{"1F}
+ \\re\@DeclareMathSymbol{\\psi} {\\mathord}{newletters}{"20}
+ \\re\@DeclareMathSymbol{\\omega} {\\mathord}{newletters}{"21}
+ \\re\@DeclareMathSymbol{\\varepsilon}{\\mathord}{newletters}{"22}
+ \\re\@DeclareMathSymbol{\\vartheta} {\\mathord}{newletters}{"23}
+ \\re\@DeclareMathSymbol{\\varpi} {\\mathord}{newletters}{"24}
+ \\re\@DeclareMathSymbol{\\varrho} {\\mathord}{newletters}{"25}
+ \\re\@DeclareMathSymbol{\\varsigma} {\\mathord}{newletters}{"26}
+ \\re\@DeclareMathSymbol{\\varphi} {\\mathord}{newletters}{"27}
+
+ \\ifthenelse{\\equal{\\$fam\@mathstyle}{TeX}}
+ {\\$fam\@mathGREEKuptrue}
+ {}
+ \\ifthenelse{\\equal{\\$fam\@mathstyle}{french}}
+ {\\$fam\@mathLATINuptrue
+ \\$fam\@mathGREEKuptrue
+ \\$fam\@mathgreekuptrue}
+ {}
+ \\ifthenelse{\\equal{\\$fam\@mathstyle}{upright}}
+ {\\$fam\@mathLATINuptrue
+ \\$fam\@mathlatinuptrue
+ \\$fam\@mathGREEKuptrue
+ \\$fam\@mathgreekuptrue}
+ {}
+
+ \\if$fam\@mathLATINup
+ \\re\@DeclareMathSymbol{A}{\\mathalpha}{newoperators}{`A}
+ \\re\@DeclareMathSymbol{B}{\\mathalpha}{newoperators}{`B}
+ \\re\@DeclareMathSymbol{C}{\\mathalpha}{newoperators}{`C}
+ \\re\@DeclareMathSymbol{D}{\\mathalpha}{newoperators}{`D}
+ \\re\@DeclareMathSymbol{E}{\\mathalpha}{newoperators}{`E}
+ \\re\@DeclareMathSymbol{F}{\\mathalpha}{newoperators}{`F}
+ \\re\@DeclareMathSymbol{G}{\\mathalpha}{newoperators}{`G}
+ \\re\@DeclareMathSymbol{H}{\\mathalpha}{newoperators}{`H}
+ \\re\@DeclareMathSymbol{I}{\\mathalpha}{newoperators}{`I}
+ \\re\@DeclareMathSymbol{J}{\\mathalpha}{newoperators}{`J}
+ \\re\@DeclareMathSymbol{K}{\\mathalpha}{newoperators}{`K}
+ \\re\@DeclareMathSymbol{L}{\\mathalpha}{newoperators}{`L}
+ \\re\@DeclareMathSymbol{M}{\\mathalpha}{newoperators}{`M}
+ \\re\@DeclareMathSymbol{N}{\\mathalpha}{newoperators}{`N}
+ \\re\@DeclareMathSymbol{O}{\\mathalpha}{newoperators}{`O}
+ \\re\@DeclareMathSymbol{P}{\\mathalpha}{newoperators}{`P}
+ \\re\@DeclareMathSymbol{Q}{\\mathalpha}{newoperators}{`Q}
+ \\re\@DeclareMathSymbol{R}{\\mathalpha}{newoperators}{`R}
+ \\re\@DeclareMathSymbol{S}{\\mathalpha}{newoperators}{`S}
+ \\re\@DeclareMathSymbol{T}{\\mathalpha}{newoperators}{`T}
+ \\re\@DeclareMathSymbol{U}{\\mathalpha}{newoperators}{`U}
+ \\re\@DeclareMathSymbol{V}{\\mathalpha}{newoperators}{`V}
+ \\re\@DeclareMathSymbol{W}{\\mathalpha}{newoperators}{`W}
+ \\re\@DeclareMathSymbol{X}{\\mathalpha}{newoperators}{`X}
+ \\re\@DeclareMathSymbol{Y}{\\mathalpha}{newoperators}{`Y}
+ \\re\@DeclareMathSymbol{Z}{\\mathalpha}{newoperators}{`Z}
+ \\fi
+
+ \\if$fam\@mathlatinup
+ \\DeclareSymbolFont{upletters} {OML}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{n}
+ \\SetSymbolFont{upletters}{bold}{OML}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{n}
+
+ \\re\@DeclareMathSymbol{a}{\\mathord}{upletters}{`a}
+ \\re\@DeclareMathSymbol{b}{\\mathord}{upletters}{`b}
+ \\re\@DeclareMathSymbol{c}{\\mathord}{upletters}{`c}
+ \\re\@DeclareMathSymbol{d}{\\mathord}{upletters}{`d}
+ \\re\@DeclareMathSymbol{e}{\\mathord}{upletters}{`e}
+ \\re\@DeclareMathSymbol{f}{\\mathord}{upletters}{`f}
+ \\re\@DeclareMathSymbol{g}{\\mathord}{upletters}{`g}
+ \\re\@DeclareMathSymbol{h}{\\mathord}{upletters}{`h}
+ \\re\@DeclareMathSymbol{i}{\\mathord}{upletters}{`i}
+ \\re\@DeclareMathSymbol{j}{\\mathord}{upletters}{`j}
+ \\re\@DeclareMathSymbol{k}{\\mathord}{upletters}{`k}
+ \\re\@DeclareMathSymbol{l}{\\mathord}{upletters}{`l}
+ \\re\@DeclareMathSymbol{m}{\\mathord}{upletters}{`m}
+ \\re\@DeclareMathSymbol{n}{\\mathord}{upletters}{`n}
+ \\re\@DeclareMathSymbol{o}{\\mathord}{upletters}{`o}
+ \\re\@DeclareMathSymbol{p}{\\mathord}{upletters}{`p}
+ \\re\@DeclareMathSymbol{q}{\\mathord}{upletters}{`q}
+ \\re\@DeclareMathSymbol{r}{\\mathord}{upletters}{`r}
+ \\re\@DeclareMathSymbol{s}{\\mathord}{upletters}{`s}
+ \\re\@DeclareMathSymbol{t}{\\mathord}{upletters}{`t}
+ \\re\@DeclareMathSymbol{u}{\\mathord}{upletters}{`u}
+ \\re\@DeclareMathSymbol{v}{\\mathord}{upletters}{`v}
+ \\re\@DeclareMathSymbol{w}{\\mathord}{upletters}{`w}
+ \\re\@DeclareMathSymbol{x}{\\mathord}{upletters}{`x}
+ \\re\@DeclareMathSymbol{y}{\\mathord}{upletters}{`y}
+ \\re\@DeclareMathSymbol{z}{\\mathord}{upletters}{`z}
+
+ \\re\@DeclareMathSymbol{\\imath}{\\mathord}{upletters}{"7B}
+ \\re\@DeclareMathSymbol{\\jmath}{\\mathord}{upletters}{"7C}
+ \\fi
+
+ \\if$fam\@mathGREEKup
+ \\else
+ \\re\@DeclareMathSymbol{\\Gamma} {\\mathalpha}{newletters}{"00}
+ \\re\@DeclareMathSymbol{\\Delta} {\\mathalpha}{newletters}{"01}
+ \\re\@DeclareMathSymbol{\\Theta} {\\mathalpha}{newletters}{"02}
+ \\re\@DeclareMathSymbol{\\Lambda} {\\mathalpha}{newletters}{"03}
+ \\re\@DeclareMathSymbol{\\Xi} {\\mathalpha}{newletters}{"04}
+ \\re\@DeclareMathSymbol{\\Pi} {\\mathalpha}{newletters}{"05}
+ \\re\@DeclareMathSymbol{\\Sigma} {\\mathalpha}{newletters}{"06}
+ \\re\@DeclareMathSymbol{\\Upsilon}{\\mathalpha}{newletters}{"07}
+ \\re\@DeclareMathSymbol{\\Phi} {\\mathalpha}{newletters}{"08}
+ \\re\@DeclareMathSymbol{\\Psi} {\\mathalpha}{newletters}{"09}
+ \\re\@DeclareMathSymbol{\\Omega} {\\mathalpha}{newletters}{"0A}
+ \\fi
+
+ \\if$fam\@mathgreekup
+ \\DeclareSymbolFont{upletters} {OML}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{n}
+ \\SetSymbolFont{upletters}{bold}{OML}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{n}
+
+ \\re\@DeclareMathSymbol{\\alpha} {\\mathord}{upletters}{"0B}
+ \\re\@DeclareMathSymbol{\\beta} {\\mathord}{upletters}{"0C}
+ \\re\@DeclareMathSymbol{\\gamma} {\\mathord}{upletters}{"0D}
+ \\re\@DeclareMathSymbol{\\delta} {\\mathord}{upletters}{"0E}
+ \\re\@DeclareMathSymbol{\\epsilon} {\\mathord}{upletters}{"0F}
+ \\re\@DeclareMathSymbol{\\zeta} {\\mathord}{upletters}{"10}
+ \\re\@DeclareMathSymbol{\\eta} {\\mathord}{upletters}{"11}
+ \\re\@DeclareMathSymbol{\\theta} {\\mathord}{upletters}{"12}
+ \\re\@DeclareMathSymbol{\\iota} {\\mathord}{upletters}{"13}
+ \\re\@DeclareMathSymbol{\\kappa} {\\mathord}{upletters}{"14}
+ \\re\@DeclareMathSymbol{\\lambda} {\\mathord}{upletters}{"15}
+ \\re\@DeclareMathSymbol{\\mu} {\\mathord}{upletters}{"16}
+ \\re\@DeclareMathSymbol{\\nu} {\\mathord}{upletters}{"17}
+ \\re\@DeclareMathSymbol{\\xi} {\\mathord}{upletters}{"18}
+ \\re\@DeclareMathSymbol{\\pi} {\\mathord}{upletters}{"19}
+ \\re\@DeclareMathSymbol{\\rho} {\\mathord}{upletters}{"1A}
+ \\re\@DeclareMathSymbol{\\sigma} {\\mathord}{upletters}{"1B}
+ \\re\@DeclareMathSymbol{\\tau} {\\mathord}{upletters}{"1C}
+ \\re\@DeclareMathSymbol{\\upsilon} {\\mathord}{upletters}{"1D}
+ \\re\@DeclareMathSymbol{\\phi} {\\mathord}{upletters}{"1E}
+ \\re\@DeclareMathSymbol{\\chi} {\\mathord}{upletters}{"1F}
+ \\re\@DeclareMathSymbol{\\psi} {\\mathord}{upletters}{"20}
+ \\re\@DeclareMathSymbol{\\omega} {\\mathord}{upletters}{"21}
+ \\re\@DeclareMathSymbol{\\varepsilon}{\\mathord}{upletters}{"22}
+ \\re\@DeclareMathSymbol{\\vartheta} {\\mathord}{upletters}{"23}
+ \\re\@DeclareMathSymbol{\\varpi} {\\mathord}{upletters}{"24}
+ \\re\@DeclareMathSymbol{\\varrho} {\\mathord}{upletters}{"25}
+ \\re\@DeclareMathSymbol{\\varsigma} {\\mathord}{upletters}{"26}
+ \\re\@DeclareMathSymbol{\\varphi} {\\mathord}{upletters}{"27}
+ \\fi
+\\fi
+
+END_STY_MATH
+
+ if ($seen{sw}) {
+ print {$STY} <<"END_STY_MATHCAL";
+\\if$fam\@mathcal
+ \\SetMathAlphabet{\\mathcal}{normal}{OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\mdseries\@$ARGV{nfss}}{sw}
+ \\SetMathAlphabet{\\mathcal}{bold} {OT1}{$fam-\\$fam\@figurealign\\$fam\@mathfigurestyle}{\\bfseries\@$ARGV{nfss}}{sw}
+\\fi
+
+END_STY_MATHCAL
+ }
+ }
+
+ print {$STY} "\\endinput\n";
close $STY;
return;
@@ -889,7 +1307,9 @@ sub create_fdfile {
\\fi
\\DeclareFontFamily{$enc}{$fam-$sty}{@{[
- $ARGV{nfss} eq 'tt' ? '\hyphenchar\font=-1' : ""
+ $ARGV{nfss} eq 'tt' ? '\hyphenchar\font=-1'
+ : $enc eq 'OML' ? '\skewchar\font=127'
+ : q{}
]}}
END_FD_HEADER
@@ -1076,6 +1496,9 @@ I'm using the following options:
nfssweight: @{[ join q{, }, @{$ARGV{nfssweight}} ]}
nfsswidth: @{[ join q{, }, @{$ARGV{nfsswidth}} ]}
+ math: @{[ $ARGV{math} ? 'yes' : 'no' ]}
+ mathspacing: $ARGV{mathspacing}
+
END_ARGUMENTS
if ($ARGV{fig_height} or $ARGV{fig_width}) {
@@ -1182,7 +1605,7 @@ END_FONTINFO
$workitem->{encoding},
$workitem->{figurestyle},
$workitem->{fdshape},
- join(q(, ), @{$workitem->{features}});
+ join(q{, }, @{$workitem->{features}});
$prevfn = $workitem->{font}{filename};
}
@@ -1317,8 +1740,8 @@ my @WIDTH = (
c => [ qw( condensed ) ],
sc => [ qw( semicondensed narrow ) ],
'' => [ qw( regular ) ],
- sx => [ qw( semiextended semiexpanded ) ],
- x => [ qw( extended expanded wide ) ],
+ sx => [ qw( semiextended semiexpanded wide ) ],
+ x => [ qw( extended expanded ) ],
ex => [],
ux => [],
);
@@ -1645,7 +2068,7 @@ Possible options:
-defaulttabular considered 'default' for this font; see docs
-defaultproportional
- -extra="TEXT" Add TEXT to the command for 'otftotfm'
+ -extra="EXTRA" Add EXTRA to the otftotfm command for all fonts
-target="DIRECTORY" Install files into specified TEXMF tree
-vendor="VENDOR" Only used for naming directories
-typeface="TYPEFACE" Only used for naming directories
@@ -1664,6 +2087,9 @@ Possible options:
-verbose Print more data to log file
-version Print version number and exit
+ -math Generate basic math fonts
+ -mathspacing=AMOUNT Letterspace the math fonts by AMOUNT/1000 em
+
font[s] The fonts (.otf or .ttf format) to install.
Please report any bugs or suggestions to <marcpenninga@gmail.com>.
@@ -1700,6 +2126,8 @@ END_USAGE
verbose => 0,
nfsswidth => [],
nfssweight => [],
+ math => 0,
+ mathspacing => 0,
);
@@ -1765,12 +2193,14 @@ sub parse_options {
NFSS::set_widths($key, @values);
$ARGV{$key} = 'user-defined';
},
+ 'math!' => \$ARGV{math},
+ 'mathspacing=i' => \$ARGV{mathspacing},
)
or die "$USAGE";
if (!@ARGV) {
Pod::Usage::pod2usage(
- -msg => '[ERROR] No font files given, nothing to do!',
+ -msg => '[ERROR] No font files given, nothing to do!',
-verbose => 1);
}
@@ -1827,6 +2257,7 @@ sub get_targetdirs {
# The official names for various coding schemes.
my %SCHEME = (
OT1 => 'TEX TEXT',
+ OML => 'TEX MATH ITALIC',
T1 => 'EXTENDED TEX FONT ENCODING - LATIN',
TS1 => 'TEX TEXT COMPANION SYMBOLS 1---TS1',
LY1 => 'TEX TYPEWRITER AND WINDOWS ANSI',
@@ -1988,6 +2419,13 @@ my %STYLE = (
extra => '',
name => '',
},
+ math => {
+ code => { n => 'n', it => 'it', sl => 'sl' },
+ reqd => [],
+ nice => [ 'onum' ],
+ extra => '--math-spacing=127',
+ name => '',
+ },
);
=begin Comment
@@ -2024,25 +2462,25 @@ my %FIGURESTYLE = (
reqd => [],
nice => [ 'kern', 'liga' ],
extra => '',
- styles => [ 'normal', 'smallcaps', 'swash', 'textcomp' ],
+ styles => [ qw(normal smallcaps swash textcomp math) ],
},
LF => {
reqd => [],
nice => [ 'kern', 'liga' ],
extra => '',
- styles => [ 'normal', 'smallcaps', 'swash', 'textcomp' ],
+ styles => [ qw(normal smallcaps swash textcomp math) ],
},
TOsF => {
reqd => [],
nice => [ 'kern', 'liga' ],
extra => '',
- styles => [ 'normal', 'smallcaps', 'swash', 'textcomp' ],
+ styles => [ qw(normal smallcaps swash textcomp math) ],
},
OsF => {
reqd => [],
nice => [ 'kern', 'liga' ],
extra => '',
- styles => [ 'normal', 'smallcaps', 'swash', 'textcomp' ],
+ styles => [ qw(normal smallcaps swash textcomp math) ],
},
Sup => {
reqd => [ 'sups' ],
@@ -2097,9 +2535,8 @@ sub get_all_figurestyles {
sub get_styles {
my $figurestyle = shift;
- my $result = $FIGURESTYLE{$figurestyle}{styles} // [];
-
- return @{$result};
+ return grep { defined $STYLE{$_} }
+ @{$FIGURESTYLE{$figurestyle}{styles}};
}
@@ -2286,6 +2723,21 @@ sub process_encoding_options {
delete $STYLE{textcomp};
}
+ if ($ARGV{math}) {
+ if (!( grep { $_ eq 'OT1' } @{$ARGV{encoding}} )) {
+ $ARGV{encoding} = [ 'OT1', @{$ARGV{encoding}} ];
+ }
+ }
+ else {
+ delete $STYLE{math}
+ }
+
+ if ($ARGV{mathspacing}) {
+ if (defined $STYLE{math}{extra}) {
+ $STYLE{math}{extra} .= " --letterspacing=$ARGV{mathspacing}";
+ }
+ }
+
return;
}
@@ -2566,6 +3018,7 @@ sub expand_encodings {
= @{$workitem}{qw(font figurestyle style)};
my @encodings = $style eq 'textcomp' ? qw(ts1)
: $figurestyle eq 'Orn' ? qw(ly1)
+ : $style eq 'math' ? qw(oml)
: @{$ARGV{encoding}}
;
@@ -2600,8 +3053,12 @@ sub cleanup {
}
}
- # Look up the NFSS code for this font's shape.
+ # Look up the NFSS code for this font's shape...
$workitem->{fdshape} = Tables::get_fdshape($style, $font->{basicshape});
+ # ... but drop this workitem if we shouldn't generate this shape.
+ if (!defined $workitem->{fdshape}) {
+ return;
+ }
# Figure out which encoding file to use for this font.
my $try = Cwd::abs_path($workitem->{encoding});
@@ -2611,7 +3068,8 @@ sub cleanup {
}
else {
($workitem->{enc_file} = $workitem->{encoding})
- =~ s/\A(OT1|T1|TS1|LY1|LGR|T2[ABC]|T3|TS3)\z/fontools_\L$1\E/xmsi;
+ =~ s{ \A (OT1|OML|T1|TS1|LY1|LGR|T2[ABC]|T3|TS3) \z }
+ {fontools_\L$1\E}xmsi;
}
# Ornaments have no text encoding, and don't need kerning and ligatures.
@@ -2631,9 +3089,9 @@ sub cleanup {
# Don't create ligatures if the user doesn't want them.
delete $feature{liga} if !$ARGV{ligatures};
- # Don't create kerns and ligatures for TS* fonts.
+ # Don't create kerns and ligatures for symbol or math fonts.
delete @feature{qw(kern liga)}
- if $workitem->{encoding} =~ m/\A TS\d \z/xmsi;
+ if $workitem->{encoding} =~ m/\A ( TS\d | OML ) \z/xmsi;
$workitem->{features} = [ sort keys %feature ];
@@ -2668,7 +3126,7 @@ __END__
To create the documentation:
- pod2man --center="Marc Penninga" --release="fontools" --section=1 \
+ pod2man --center='Marc Penninga' --release='fontools' --section=1 \
autoinst - | groff -Tps -man - | ps2pdf - autoinst.pdf
@@ -2734,7 +3192,7 @@ Swash
=item I<nw>
-"Upright swash"
+`Upright swash'
=back
@@ -2752,11 +3210,11 @@ in roman, italic and slanted shapes.
=item -
-Families with "Titling" characters;
-these "... replace the default glyphs
+Families with `Titling' characters;
+these `... replace the default glyphs
with corresponding forms designed specifically for titling.
These may be all-capital and/or larger on the body,
-and adjusted for viewing at larger sizes"
+and adjusted for viewing at larger sizes'
(according to the OpenType Specification).
=item -
@@ -2770,7 +3228,7 @@ An ornament family, also in roman, italic and slanted shapes.
Of course, if your fonts don't contain italics, oldstyle digits, small caps
etc., the corresponding shapes and families are not created.
In addition, the creation of most families and shapes can be controlled
-by the user (see L</"COMMAND-LINE OPTIONS"> below).
+by the user (see L</COMMAND-LINE OPTIONS> below).
These families use the I<FontPro> project's naming scheme:
I<< <FontFamily>-<Suffix> >>, where I<< <Suffix> >> is:
@@ -2806,7 +3264,7 @@ normal forms for other characters
=item I<Titl>
-Titling characters; see above.
+Titling characters; see above
=item I<Orn>
@@ -2824,53 +3282,9 @@ denominators
The individual fonts are named I<< <FontName>-<suffix>-<shape>-<enc> >>,
where I<< <suffix> >> is the same as above (but in lowercase),
-I<< <shape> >> is either empty, "sc" or "swash",
+I<< <shape> >> is either empty, `sc' or `swash',
and I<< <enc> >> is the encoding (also in lowercase).
-A typical name in this scheme would be "FiraSans-Light-osf-sc-ly1".
-
-
-=head2 About the log file
-
-B<autoinst> writes some info about what it thinks it's doing to a log file.
-By default this is called F<< <fontfamily>.log >>,
-but this choice can be overridden by the user;
-see the I<-logfile> command-line option in L</"COMMAND-LINE OPTIONS"> below.
-If this log file already exists, B<autoinst> will append its data to the end
-rather than overwrite it.
-Use the I<-verbose> command-line option to ask for more detailed info.
-
-
-=head2 A note for MiKTeX users
-
-Automatically installing the fonts into a suitable TEXMF tree
-(as B<autoinst> tries to do by default) only works for TeX-installations
-that use the F<kpathsea> library; with TeX distributions that implement
-their own directory searching (such as MiKTeX), B<autoinst> will complain
-that it cannot find the F<kpsewhich> program and move all generated files
-into a subdirectory C<./autoinst_output/> of the current directory.
-If you use such a TeX distribution, you should either move these files
-to their correct destinations by hand, or use the I<-target> option
-(see L</"COMMAND-LINE OPTIONS"> below) to manually specify a TEXMF tree.
-
-Also, some OpenType fonts contain so many kerning pairs that the resulting
-F<pl> and F<vpl> files are too big for MiKTeX's F<pltotf> and F<vptovf>;
-the versions that come with W32TeX (F<http://www.w32tex.org>)
-and TeXLive (F<http://tug.org/texlive>) don't seem to have this problem.
-
-
-=head2 A note for MacTeX users
-
-By default, B<autoinst> will try to install all generated files into
-the $TEXMFLOCAL tree; when this directory isn't user-writable,
-it will use the $TEXMFHOME tree instead. Unfortunately, MacTeX's version
-of C<updmap-sys> (which is called behind the scenes) doesn't search
-in $TEXMFHOME, and hence MacTeX will not find the new fonts.
-
-To remedy this, either run B<autoinst> as root (so that it can install
-everything into $TEXMFLOCAL) or manually run C<updmap -user> to tell
-TeX about the files in $TEXMFHOME.
-The latter option does, however, have some caveats;
-see F<https://tug.org/texlive/scripts-sys-user.html>.
+A typical name in this scheme would be `FiraSans-Light-osf-sc-ly1'.
=head2 Using the fonts in your LaTeX documents
@@ -2897,30 +3311,32 @@ yourself.
=item C<lining>, C<oldstyle>, C<tabular>, C<proportional>
Choose which figure style to use.
-The defaults are "oldstyle" and "proportional" (if available).
+The defaults are `oldstyle' and `proportional' (if available).
-=item C<<< scale=I<< <number> >> >>>
+=item C<<< scale=I<< <number> >> >>>, C<scale=MatchLowercase>
Scale the font by a factor of I<< <number> >>.
E.g., to increase the size of the font by 5%, use
C<<< \usepackage[scale=1.05]{I<< <FontFamily> >>} >>>.
-May also be spelled C<scaled>.
-
-This option is only available when you have the F<xkeyval> package installed.
+The special value C<MatchLowercase> may be used to scale the font
+so that its x-height matches that of the previously active font
+(which is usually Computer Modern, unless you have loaded another
+font package before this one).
+The name C<scaled> may be used as a synonym for C<scale>.
=item C<medium>, C<book>, C<text>, C<regular>
-Select the weight that LaTeX will use as the "regular" weight;
+Select the weight that LaTeX will use as the `regular' weight;
the default is C<regular>.
=item C<heavy>, C<black>, C<extrabold>, C<demibold>, C<semibold>, C<bold>
-Select the weight that LaTeX will use as the "bold" weight;
+Select the weight that LaTeX will use as the `bold' weight;
the default is C<bold>.
=back
-The previous two groups of options will only work if
+The last two groups of options will only work if
you have the F<mweights> package installed.
The style file will also try to load the F<fontaxes> package
@@ -2935,8 +3351,8 @@ characters:
DECLARATION COMMAND SHORT FORM OF COMMAND
\tlshape \texttitling \texttl
- \sufigures \textsuperior \textsu
- \infigures \textinferior \textin
+ \supfigures \textsuperior \textsup, \textsu
+ \inffigures \textinferior \textinf, \textin
In addition, the C<\swshape> and C<\textsw> commands are redefined to place
@@ -2958,30 +3374,67 @@ standard NFSS (C<\fontfamily>, C<\fontseries>, C<\fontshape> etc.).
By default, B<autoinst> generates text fonts with OT1, LY1 and T1
encodings, and the generated style files use T1 as the default text encoding.
Other encodings can be chosen using the I<-encoding> option
-(see L</"COMMAND-LINE OPTIONS"> below).
+(see L</COMMAND-LINE OPTIONS> below).
-=head3 Ornaments
+=head2 Maths
-Ornament fonts are regular LY1-encoded fonts, with a number of
-'regular' characters replaced by ornament glyphs.
-The OpenType specification says that fonts should only put their
-ornaments in place of the lowercase ASCII letters or the 'bullet'
-character, but some fonts put them in other positions (such as those
-of the digits) as well.
+This is an experimental feature; B<USE AT YOUR OWN RISK!>
+Test the results thoroughly before using them in real documents,
+and be warned that future versions of B<autoinst> may introduce
+incompatible changes.
-Ornament glyphs can be accessed like C<{\ornaments abc}> and
-C<{\ornaments\char"61}>, or equivalently
-C<\textornaments{abc}> and C<\textornaments{\char"61}>.
-To see which ornaments a font contains (and at which positions),
-run LaTeX on the file F<nfssfont.tex> (which is included in any
-standard LaTeX installation), supply the name of the ornament font
-(i.e., C<GaramondLibre-Regular-orn-u>) and say C<\table\bye>;
-this will create a table of all glyphs in that font.
+The I<-math> option tells B<autoinst> to generate basic math fonts.
+When enabled, the generated style file defines a few extra options
+to access these math fonts:
-Note that versions of B<autoinst> up to 20200428 handled ornaments
-differently, and fonts and style files generated by those versions
-are not compatible with files generated by newer versions.
+=over 4
+
+=item C<math>
+
+Use these fonts for the maths in your document.
+
+=item C<mathlining>, C<matholdstyle>
+
+Choose which figure style to use in maths.
+The default is `mathlining'.
+
+=item C<mathcal>
+
+Use the swash characters from your fonts as the C<\mathcal> alphabet.
+(This option only exists if your fonts actually contain swash characters
+and a C<swsh> feature to access them).
+
+=item C<<< math-style=I<< <style> >> >>>
+
+Choose the `math style' to use.
+With C<math-style=ISO>, all latin and greek letters in math are italic;
+with C<math-style=TeX> (the default), uppercase greek is upright;
+with C<math-style=french>, all greek as well as uppercase latin is upright;
+and with C<math-style=upright> all letters are upright.
+
+=back
+
+Note that this `math' option only changes digits, latin and greek letters,
+plus a few basic punctuation characters; all other mathematical symbols,
+operators, delimiters etc. are left as they were before.
+If you don't want to use TeX's default versions of those symbols,
+load another math package (such as F<mathdesign> or F<newtxmath>)
+before loading the B<autoinst>-generated style file.
+
+Finally, note that B<autoinst> doesn't check if your fonts actually contains
+all of the required characters;
+it just assumes that they do and sets up the style file accordingly.
+Even if your fonts contain greek, characters such as C<\varepsilon>
+may be missing.
+You may also find that some glyphs I<are> present in your fonts,
+but don't work well in equations or don't match with other symbols;
+edit the generated style file to remove the declarations of
+these offending characters.
+Once again: test the results before using them!
+If the characters themselves are fine but spaced too tightly,
+you may try increasing the side bearings in math fonts with
+the I<-mathspacing> option (see below), e.g. C<-mathspacing=100>.
=head2 NFSS codes
@@ -2989,9 +3442,7 @@ are not compatible with files generated by newer versions.
LaTeX's New Font Selection System (NFSS)
identifies fonts by a combination of family,
series (the concatenation of weight and width), shape and size.
-B<autoinst> parses the font's metadata
-(more precisely: the output of C<otfinfo --info>)
-to determine these parameters.
+B<autoinst> parses the font's metadata to determine these parameters.
When this fails (usually because the font family contains uncommon weights,
widths or shapes),
B<autoinst> ends up with different fonts having the I<same> values
@@ -3013,16 +3464,16 @@ The mapping of shapes to NFSS codes is done using the following table:
Oblique, Slant(ed), Incline(d) sl
(I<Exception:> Adobe Silentium Pro contains two Roman shapes;
-we map the first of these to "n", for the second one we (ab)use the "it" code
+we map the first of these to `n', for the second one we (ab)use the `it' code
as this family doesn't contain an Italic shape.)
The mapping of weights and widths to NFSS codes is a more complex,
two-step proces.
-In the first step, all fonts are assigned a "series" name that is simply
+In the first step, all fonts are assigned a `series' name that is simply
the concatenation of its weight and width
(after expanding any abbreviations and converting to lowercase).
-A font with "Cond" width and "Ultra" weight will then be known
-as "ultrablackcondensed".
+A font with `Cond' width and `Ultra' weight will then be known
+as `ultrablackcondensed'.
In the second step, B<autoinst> tries to map all combinations of NFSS codes
(ul, el, l, sl, m, sb, b, eb and ub for weights;
@@ -3033,11 +3484,11 @@ and conversely it may not be possible to assign every existing font
a unique code in a sane way (especially for the weights, some font families
offer more choices or finer granularity than NFSS's codes can handle;
e.g., Fira Sans contains fifteen(!) different weights,
-including an additional "Medium" weight between Regular and Semibold).
+including an additional `Medium' weight between Regular and Semibold).
B<autoinst> tries hard to ensure that the most common NFSS codes
(and high-level commands such as C<\bfseries>,
-which are built on top of those codes) will "just work".
+which are built on top of those codes) will `just work'.
To see exactly which NFSS codes map to which fonts, see the log file
(pro tip: run B<autoinst> with the I<-dryrun> option
@@ -3050,6 +3501,28 @@ one can always use the C<\fontseries> command with the full series name
(i.e., C<\fontseries{demibold}\selectfont>).
+=head2 Ornaments
+
+Ornament fonts are regular LY1-encoded fonts, with a number of
+`regular' characters replaced by ornament glyphs.
+The OpenType specification says that fonts should only put their
+ornaments in place of the lowercase ASCII letters, but some fonts
+put them in other positions (such as those of the digits) as well.
+
+Ornaments can be accessed like C<{\ornaments a}> and
+C<{\ornaments\char"61}>, or equivalently
+C<\textornaments{a}> and C<\textornaments{\char"61}>.
+To see which ornaments a font contains (and at which positions),
+run LaTeX on the file F<nfssfont.tex> (which is included in any
+standard LaTeX installation), supply the name of the ornament font
+(i.e., C<GaramondLibre-Regular-orn-u>) and give the command C<\table\bye>;
+this will create a table of all glyphs in that font.
+
+Note that versions of B<autoinst> up to 20200428 handled ornaments
+differently, and fonts and style files generated by those versions
+are not compatible with files generated by newer versions.
+
+
=head1 COMMAND-LINE OPTIONS
B<autoinst> tries hard to do The Right Thing (TM) by default,
@@ -3091,7 +3564,7 @@ Add more details to the log file.
Generate the specified encoding(s) for the text fonts.
Multiple encodings may be specified as a comma-separated list
-(without spaces!); the default choice of encodings is "OT1,LY1,T1".
+(without spaces!); the default choice of encodings is `OT1,LY1,T1'.
For each specified encoding XYZ, B<autoinst> will first see if there is
an encoding file F<XYZ.enc> in the current directory, and if found it will
@@ -3099,7 +3572,7 @@ use that; otherwise it will use one of its built-in encoding files.
Currently B<autoinst> comes with support for the OT1, T1/TS1, LY1, LGR,
T2A/B/C and T3/TS3 encodings.
(These files are called F<fontools_ot1.enc> etc. to avoid name clashes
-with other packages; the "fontools_" prefix may be omitted.)
+with other packages; the `fontools_' prefix may be omitted.)
=item B<-ts1>/B<-nots1>
@@ -3118,15 +3591,15 @@ Installing the font as a typewriter font will cause two further changes:
it will - by default - turn off the use of f-ligatures
(though this can be overridden with the I<-ligatures> option),
and it will disable hyphenation for this font.
-This latter effect cannot be disabled in B<autoinst>;
+This latter effect cannot be re-enabled in B<autoinst>;
if you want typewriter text to be hyphenated, use the F<hyphenat> package.
If none of these options is specified, B<autoinst> tries to guess:
-if the font's filename contains the string "mono"
+if the font's filename contains the string `mono'
or if the field C<isFixedPitch> in the font's I<post> table is True,
it will select B<-typewriter>;
-else if the filename contains "sans" it selects B<-sanserif>;
-and otherwise it will opt for B<-serif>.
+else if the filename contains `sans' it will select B<-sanserif>;
+otherwise it will opt for B<-serif>.
=item B<-lining>/B<-nolining>
@@ -3171,12 +3644,12 @@ The default is B<-superiors>.
=item B<-inferiors> [= B<none> | B<auto> | B<subs> | B<sinf> | B<dnom> ]
The OpenType standard defines several kinds of digits that might be used
-as inferiors or subscripts: "Subscripts" (OpenType feature "subs"),
-"Scientific Inferiors" ("sinf"), and "Denominators" ("dnom").
+as inferiors or subscripts: `Subscripts' (OpenType feature `subs'),
+`Scientific Inferiors' ('sinf'), and `Denominators' ('dnom').
This option allows the user to determine which of these styles B<autoinst>
should use for the inferior characters.
-Alternatively, the value "auto" tells B<autoinst> to use the first value
-in "sinf", "subs" or "dnom" that is supported by the font.
+Alternatively, the value `auto' tells B<autoinst> to use the first value
+in `sinf', `subs' or `dnom' that is supported by the font.
Saying just B<-inferiors> is equivalent to B<-inferiors=auto>;
otherwise the default is B<-noinferiors>.
@@ -3196,14 +3669,25 @@ Control the creation of ornament fonts. The default is B<-ornaments>.
=item B<-ligatures>/B<-noligatures>
Some fonts create glyphs for the standard f-ligatures (ff, fi, fl, ffi, ffl),
-but don't provide a "liga" feature to access these.
+but don't provide a `liga' feature to access these.
This option tells B<autoinst> to add extra C<LIGKERN> rules to
the generated fonts to enable the use of these ligatures.
The default is B<-ligatures>,
unless the user specified the I<-typewriter> option.
Specify B<-noligatures> to disable the generation of ligatures even for fonts
-that do contain a "liga" feature.
+that do contain a `liga' feature.
+
+=item B<-math>
+
+Tells B<autoinst> to create basic math fonts (see above).
+
+=item B<-mathspacing>=I<amount>
+
+Letterspace each character in the math fonts by I<amount> units,
+where 1000 units equal one em.
+In my opinion, many text fonts benefit from letterspacing by 50 to 100 units
+when used in maths; some fonts need even more. Use your own judgement!
=item B<-defaultlining>/B<-defaultoldstyle>
@@ -3228,21 +3712,23 @@ to the commands for I<otftotfm> to suppress such kerns.
Note that this option leads to very long commands (it adds
one hundred I< --ligkern> options), which may cause problems on some systems.
-=item B<-nfssweight>=I<code>=I<weight>, B<-nfsswidth>=I<code>=I<width>
+=item B<-nfssweight>=I<code>=I<weight>
+
+=item B<-nfsswidth>=I<code>=I<width>
Map the NFSS code I<code> to the given weight or width,
overriding the built-in tables.
Each of these options may be given multiple times,
to override more than one NFSS code.
-Example: to map the "ul" code to the "Thin" weight,
+Example: to map the `ul' code to the `Thin' weight,
use C<-nfssweight=ul=thin>.
-To inhibit the use of the "ul" code completely,
+To inhibit the use of the `ul' code completely,
use C<-nfssweight=ul=>.
-=item B<-extra>=I<text>
+=item B<-extra>=I<extra>
-Append I<text> as extra options to the command lines for I<otftotfm>.
-To prevent I<text> from accidentily being interpreted as options
+Append I<extra> as extra options to the command lines for I<otftotfm>.
+To prevent I<extra> from accidentily being interpreted as options
to B<autoinst>, it should be properly quoted.
=item B<-manual>
@@ -3301,9 +3787,9 @@ F<texhash> and F<updmap> or similar).
=item B<-typeface>=I<TYPEFACE>
These options are equivalent to F<otftotfm>'s I< --vendor> and I< --typeface>
-options: they change the "vendor" and "typeface" parts of the names of the
+options: they change the `vendor' and `typeface' parts of the names of the
subdirectories in the TEXMF tree where generated files will be stored.
-The default values are "lcdftools" and the font's FontFamily name.
+The default values are `lcdftools' and the font's FontFamily name.
Note that these options change I<only> directory names,
not the names of any generated files.
@@ -3316,6 +3802,39 @@ The default is B<-updmap>.
=back
+=head2 A note for MiKTeX users
+
+Automatically installing the fonts into a suitable TEXMF tree
+(as B<autoinst> tries to do by default) only works for TeX-installations
+that use the F<kpathsea> library; with TeX distributions that implement
+their own directory searching (such as MiKTeX), B<autoinst> will complain
+that it cannot find the F<kpsewhich> program and move all generated files
+into a subdirectory C<./autoinst_output/> of the current directory.
+If you use such a TeX distribution, you should either move these files
+to their correct destinations by hand, or use the I<-target> option
+(see L</COMMAND-LINE OPTIONS> below) to manually specify a TEXMF tree.
+
+Also, some OpenType fonts contain so many kerning pairs that the resulting
+F<pl> and F<vpl> files are too big for MiKTeX's F<pltotf> and F<vptovf>;
+the versions that come with W32TeX (F<http://www.w32tex.org>)
+and TeXLive (F<http://tug.org/texlive>) don't seem to have this problem.
+
+
+=head2 A note for MacTeX users
+
+By default, B<autoinst> will try to install all generated files into
+the $TEXMFLOCAL tree; when this directory isn't user-writable,
+it will use the $TEXMFHOME tree instead. Unfortunately, MacTeX's version
+of C<updmap-sys> (which is called behind the scenes) doesn't search
+in $TEXMFHOME, and hence MacTeX will not find the new fonts.
+
+To remedy this, either run B<autoinst> as root (so that it can install
+everything into $TEXMFLOCAL) or manually run C<updmap -user> to tell
+TeX about the files in $TEXMFHOME.
+The latter option does, however, have some caveats;
+see F<https://tug.org/texlive/scripts-sys-user.html>.
+
+
=head1 SEE ALSO
Eddie Kohler's B<TypeTools> (F<http://www.lcdf.org/type>).
@@ -3371,7 +3890,7 @@ GNU General Public License for more details.
=head1 VERSION
-This document describes B<autoinst> version 20200511.
+This document describes B<autoinst> version 20200527.
=head1 RECENT CHANGES
@@ -3380,6 +3899,18 @@ This document describes B<autoinst> version 20200511.
=over 12
+=item I<2020-05-27>
+
+Added basic (and still somewhat experimental) math support.
+Implemented the C<scale=MatchLowercase> option value
+in the generated style files.
+`Wide' fonts are mapped to the `sx' NFSS code instead of `x',
+to cater for League Mono Variable's Wide and Extended widths.
+The generated style files now use C<\textsup> and C<\textinf>
+instead of the more cryptic C<\textsu> and C<\textin> to access
+superior and inferior characters
+(though the old forms are retained for backwards compatibility).
+
=item I<2020-05-11>
When present, use encoding files in the current working directory
@@ -3479,13 +4010,13 @@ Added the I<-version> option.
=item I<2019-05-17>
Changed the way the F<-ligatures> option works:
-F<-ligatures> enables f-ligatures (even without a "liga" feature),
-F<-noligatures> now disables f-ligatures (overriding a "liga" feature).
+F<-ligatures> enables f-ligatures (even without a `liga' feature),
+F<-noligatures> now disables f-ligatures (overriding a `liga' feature).
=item I<2019-05-11>
Separate small caps families are now also recognised when the family name
-ends with "SC" (previously B<autoinst> only looked for "SmallCaps").
+ends with `SC' (previously B<autoinst> only looked for `SmallCaps').
=item I<2019-04-22>
@@ -3500,7 +4031,7 @@ Fixed a bug that affected -mergesmallcaps with multiple encodings.
Added the <-mergesmallcaps> option, to handle cases where
the small caps fonts are in separate font families.
Titling shape is now treated as a separate family instead of a distinct shape;
-it is generated only for fonts with the 'titl' feature.
+it is generated only for fonts with the `titl' feature.
Only add f-ligatures to fonts when explicitly asked to (I<-ligatures>).
=item I<2019-04-11>
@@ -3522,7 +4053,7 @@ In manual mode, or when we can't find a user-writable TEXMF tree,
put all generated files into a subdirectory C<./autoinst_output/>
instead of all over the current working directory.
-Added "auto" value to the I<inferiors> option,
+Added `auto' value to the I<inferiors> option,
to tell B<autoinst> to use whatever inferior characters are available.
=item I<2019-03-14>
@@ -3530,9 +4061,9 @@ to tell B<autoinst> to use whatever inferior characters are available.
Overhauled the mapping of fonts (more specifically of weights and widths;
the mapping of shapes didn't change) to NFSS codes.
Instead of inventing our own codes to deal with every possible weight
-and width out there, we now create "long" codes based on the names
+and width out there, we now create `long' codes based on the names
in the font metadata.
-Then we add "ssub" rules to the F<fd> files to map the standard NFSS codes
+Then we add `ssub' rules to the F<fd> files to map the standard NFSS codes
to our fancy names (see the section B<NFSS codes>;
based on discussions with Frank Mittelbach and Bob Tennent).
@@ -3553,26 +4084,26 @@ Added the I<-(no)mergewidths> option; tried to improve the documentation.
=item I<2018-03-26>
-Added the "Text" weight and the I<-(no)mergewidths> option.
-Changed the NFSS codes for "Thin" and "Book" to "i" and "o", respectively.
+Added the `Text' weight and the I<-(no)mergewidths> option.
+Changed the NFSS codes for `Thin' and `Book' to `i' and `o', respectively.
Tried to improve the documentation.
=item I<2018-01-09>
-Added the "sl" weight for font families (such as Fira Sans) that contain both
-"Book" and "Regular" weights (reported by Bob Tennent).
-Added the "Two", "Four", "Eight" and "Hair" weights (for Fira Sans).
+Added the `sl' weight for font families (such as Fira Sans) that contain both
+`Book' and `Regular' weights (reported by Bob Tennent).
+Added the `Two', `Four', `Eight' and `Hair' weights (for Fira Sans).
=item I<2017-06-16>
Changed the I<-inferiors> option from a binary yes-or-no choice to allow
-the user to choose one of the "subs", "sinf" and "dnom" features.
+the user to choose one of the `subs', `sinf' and `dnom' features.
B<autoinst> now always creates a log file.
=item I<2017-03-21>
-Updated the F<fontools_ot1.enc> encoding file to include the "Lslash"
-and "lslash" glyphs (thanks to Bob Tennent).
+Updated the F<fontools_ot1.enc> encoding file to include the `Lslash'
+and `lslash' glyphs (thanks to Bob Tennent).
=item I<2015-11-22>
@@ -3588,8 +4119,8 @@ Fixed a bug in the font info parsing code.
=item I<2014-01-21>
-"Oblique" or "slanted" fonts are now mapped to NFSS code "sl" instead
-of "it"; added "ssub" rules to the F<fd> files to substitute slanted fonts
+`Oblique' or `slanted' fonts are now mapped to NFSS code `sl' instead
+of `it'; added `ssub' rules to the F<fd> files to substitute slanted fonts
for italic ones if the latter are missing. Fixed a few bugs.
=item I<2014-01-03>
@@ -3618,16 +4149,16 @@ Added C<scale> as an alias for the package option C<scaled>.
=item I<2013-02-06>
Bugfix: the directory names for map and encoding files contained
-the "vendor" instead of the "typeface".
+the `vendor' instead of the `typeface'.
=item I<2013-01-03>
-Added extra "ssub" rules to the F<fd> files that substitute "b" for "bx".
+Added extra `ssub' rules to the F<fd> files that substitute `b' for `bx'.
Verbose mode now also prints all generated commands before they're executed.
=item I<2012-10-25>
-Added extra "ssub" rules to the F<fd> files that substitute italic
+Added extra `ssub' rules to the F<fd> files that substitute italic
shapes for slanted ones.
=item I<2012-09-25>
@@ -3640,7 +4171,7 @@ Documentation update.
=item I<2012-03-06>
-Implemented the "splitting the font family into multiple subfamilies"
+Implemented the `splitting the font family into multiple subfamilies'
emergency strategy when font info parsing fails.
Added recognition for a number of unusual widths, weights and shapes.
@@ -3648,8 +4179,8 @@ Added recognition for a number of unusual widths, weights and shapes.
Fixed a bug in the font parsing code,
where possible widths, weights and shapes where tested in the wrong order;
-this led to "ExtraLight" fonts being recognised as "Light".
-Added recognition for "Narrow" and "Wide" widths.
+this led to `ExtraLight' fonts being recognised as `Light'.
+Added recognition for `Narrow' and `Wide' widths.
Also added the I<-(no)figurekern> command-line option.
=item I<2012-02-01>
@@ -3665,7 +4196,7 @@ Updated the documentation.
=item I<2011-06-15>
Fixed the font info parsing code for some fonts that are
-too lazy to spell out "Italic" in full.
+too lazy to spell out `Italic' in full.
=item I<2010-04-29>
@@ -3711,13 +4242,13 @@ in some extended families, different combinations of
weight and width were mapped to the same series.
Added a work-around for incorrect size info in some Kepler fonts.
Fixed a small bug in the generated commands for otftotfm
-(sometimes, the "onum" feature was included twice).
+(sometimes, the `onum' feature was included twice).
Added encoding file for OT1 to the I<fontools> collection.
=item I<2007-07-27>
Two bugfixes: a closing brace was missing in the generated style file,
-and the NFSS series was formed as "width plus weight" instead of the reverse.
+and the NFSS series was formed as `width plus weight' instead of the reverse.
=item I<2007-06-10>
@@ -3732,7 +4263,7 @@ Added the I< --no-updmap> option to all generated commands for F<otftotfm>
families (suggested by Steven E. Harris).
Tweaked the font info parsing to work around a bug in the naming of
some FontFont fonts, where every font is in a family of its own.
-Added the "scaled" option (including the loading of F<xkeyval>)
+Added the `scaled' option (including the loading of F<xkeyval>)
to the generated style file.
Extended the output of the I<-verbose> option.
@@ -3753,14 +4284,14 @@ Filenames with spaces now work as well.
=item I<2006-08-31>
-Made the generated style files try to include "fontaxes.sty";
+Made the generated style files try to include `fontaxes.sty';
changed the names of the generated fonts and families
(to make the previous change possible);
added command-line options for most font styles and shapes;
tweaked the filename parsing code for Cronos Pro and Gill Sans Pro;
added runtime generation of encoding vectors for ornament fonts
(because GaramondPremier's ornament names differ from other fonts);
-changed the NFSS-code for italic small caps and titling to "scit" and "tlit"
+changed the NFSS-code for italic small caps and titling to `scit' and `tlit'
(to work with F<fontaxes>);
and edited (and hopefully improved) the documentation.
@@ -3792,25 +4323,25 @@ and improved the layout of the generated files.
The generated commands weren't actually executed, only printed...
Also added a small hack to cater for fonts
(such as some recent versions of MinionPro)
-that contain swash characters but don't provide a "swsh" feature.
+that contain swash characters but don't provide a `swsh' feature.
=item I<2005-08-10>
-Dropped the "fontname" scheme in favor of a more verbose naming scheme,
+Dropped the `fontname' scheme in favor of a more verbose naming scheme,
since many filenames were still more than eight characters long anyway.
Added F<nfssext.sty>-like commands to the generated style file.
-Changed the default encoding to LY1 and added the "inferior" shape.
+Changed the default encoding to LY1 and added the `inferior' shape.
=item I<2005-08-01>
Rewrote (and hopefully improved) the user interface;
changed the program to by default execute the generated F<otftotfm> command
lines rather than writing them to a file;
-added automatic determination of the "fontname" code for the font family;
-changed the NFSS code for italic small caps to "si"; added titling shapes;
+added automatic determination of the `fontname' code for the font family;
+changed the NFSS code for italic small caps to `si'; added titling shapes;
changed the generated style
file to include an interface for the ornaments and to load Lehman's NFSS
-extensions F<nfssext.sty> if this is installed; corrected the "fontname" codes
+extensions F<nfssext.sty> if this is installed; corrected the `fontname' codes
for OT1, T1, LY1 and user-specific encodings; extended the output generated by
the I<-verbose> option; and rewrote and extended the documentation.
diff --git a/fonts/utilities/fontools/bin/ot2kpx b/fonts/utilities/fontools/bin/ot2kpx
index e0c9506601..db00bd6787 100755
--- a/fonts/utilities/fontools/bin/ot2kpx
+++ b/fonts/utilities/fontools/bin/ot2kpx
@@ -38,7 +38,7 @@ use Getopt::Long ();
use List::Util @List::Util::EXPORT_OK;
use Pod::Usage;
-my $VERSION = "20200511";
+my $VERSION = "20200527";
our ($NUM_GLYPHS, $UNITS_PER_EM, %kern);
@@ -858,7 +858,7 @@ See the GNU General Public License for more details.
=head1 VERSION
-This document describes B<ot2kpx> version 20200511.
+This document describes B<ot2kpx> version 20200527.
=head1 RECENT CHANGES
diff --git a/fonts/utilities/fontools/bin/splitttc b/fonts/utilities/fontools/bin/splitttc
index 19c7781427..1fa3e460e2 100755
--- a/fonts/utilities/fontools/bin/splitttc
+++ b/fonts/utilities/fontools/bin/splitttc
@@ -38,7 +38,7 @@ use File::Basename;
use Getopt::Long;
use Pod::Usage;
-my $VERSION = "20200511";
+my $VERSION = "20200527";
parse_commandline();
@@ -303,7 +303,7 @@ See the GNU General Public License for more details.
=head1 VERSION
-This document describes B<splitttc> version 20200511.
+This document describes B<splitttc> version 20200527.
=head1 RECENT CHANGES
diff --git a/fonts/utilities/fontools/doc/afm2afm.pdf b/fonts/utilities/fontools/doc/afm2afm.pdf
index 486bcc81fe..1529bcede2 100644
--- a/fonts/utilities/fontools/doc/afm2afm.pdf
+++ b/fonts/utilities/fontools/doc/afm2afm.pdf
Binary files differ
diff --git a/fonts/utilities/fontools/doc/autoinst.pdf b/fonts/utilities/fontools/doc/autoinst.pdf
index 4196af3c57..41cd9e7ede 100644
--- a/fonts/utilities/fontools/doc/autoinst.pdf
+++ b/fonts/utilities/fontools/doc/autoinst.pdf
Binary files differ
diff --git a/fonts/utilities/fontools/doc/ot2kpx.pdf b/fonts/utilities/fontools/doc/ot2kpx.pdf
index d65e32bd53..3cb9951fcf 100644
--- a/fonts/utilities/fontools/doc/ot2kpx.pdf
+++ b/fonts/utilities/fontools/doc/ot2kpx.pdf
Binary files differ
diff --git a/fonts/utilities/fontools/doc/splitttc.pdf b/fonts/utilities/fontools/doc/splitttc.pdf
index 0c9c2bac64..e1b191930d 100644
--- a/fonts/utilities/fontools/doc/splitttc.pdf
+++ b/fonts/utilities/fontools/doc/splitttc.pdf
Binary files differ
diff --git a/fonts/utilities/fontools/share/fontools_oml.enc b/fonts/utilities/fontools/share/fontools_oml.enc
new file mode 100644
index 0000000000..d67d3460e6
--- /dev/null
+++ b/fonts/utilities/fontools/share/fontools_oml.enc
@@ -0,0 +1,292 @@
+% A version of the OML encoding, intended for use with otftotfm.
+% CODINGSCHEME TEX MATH ITALIC
+/otftotfmOMLEncoding [
+% 0x00
+/Gamma
+/Delta
+/Theta
+/Lambda
+/Xi
+/Pi
+/Sigma
+/Upsilon
+% 0x08
+/Phi
+/Psi
+/Omega
+/alpha
+/beta
+/gamma
+/delta
+/epsilon1
+% 0x10
+/zeta
+/eta
+/theta
+/iota
+/kappa
+/lambda
+/mu
+/nu
+% 0x18
+/xi
+/pi
+/rho
+/sigma
+/tau
+/upsilon
+/phi
+/chi
+% 0x20
+/psi
+/omega
+/epsilon
+/theta1
+/pi1
+/rho1
+/sigma1
+/phi1
+% 0x28
+/harpoonleftup
+/harpoonleftdown
+/harpoonrightup
+/harpoonrightdown
+/hookrightchar
+/hookleftchar
+/triangleright
+/triangleleft
+% 0x30
+/zero
+/one
+/two
+/three
+/four
+/five
+/six
+/seven
+% 0x38
+/eight
+/nine
+/period
+/comma
+/less
+/slash
+/greater
+/star
+% 0x40
+/partialdiff
+/A
+/B
+/C
+/D
+/E
+/F
+/G
+% 0x48
+/H
+/I
+/J
+/K
+/L
+/M
+/N
+/O
+% 0x50
+/P
+/Q
+/R
+/S
+/T
+/U
+/V
+/W
+% 0x58
+/X
+/Y
+/Z
+/flat
+/natural
+/sharp
+/slurbelow
+/slurabove
+% 0x60
+/lscript
+/a
+/b
+/c
+/d
+/e
+/f
+/g
+% 0x68
+/h
+/i
+/j
+/k
+/l
+/m
+/n
+/o
+% 0x70
+/p
+/q
+/r
+/s
+/t
+/u
+/v
+/w
+% 0x78
+/x
+/y
+/z
+/dotlessi
+/dotlessj
+/weierstrass
+/vector
+/tie
+% 0x80
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0x88
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0x90
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0x98
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xA0
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xA8
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xB0
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xB8
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xC0
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xC8
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xD0
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xD8
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xE0
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xE8
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xF0
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+% 0xF8
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+/.notdef
+] def
diff --git a/graphics/pgf/contrib/pgf-pie/COPYING b/graphics/pgf/contrib/pgf-pie/COPYING
new file mode 100644
index 0000000000..63e7458132
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/COPYING
@@ -0,0 +1,11 @@
+This file is part of pgf-pie.
+
+Copyright 2011-2020 Yuan Xu
+
+pgf-pie is licensed under the terms of the The LaTeX Project Public License (LPPL) 1.3c, or
+alternatively under the terms of the General Public License (GPL) Version 2.
+
+The terms of each license can be found in the source repository:
+
+Apache License: ./LICENSE-LPPL1.3c.txt
+GPL2 License: ./LICENSE-GPL2.txt
diff --git a/support/texlab/crates/bibutils_sys/src/Copying b/graphics/pgf/contrib/pgf-pie/LICENSE-GPL2.txt
index 7a1fb3f001..1f963da0d1 100644
--- a/support/texlab/crates/bibutils_sys/src/Copying
+++ b/graphics/pgf/contrib/pgf-pie/LICENSE-GPL2.txt
@@ -1,12 +1,12 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
+ 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
+ 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
+ Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
@@ -15,7 +15,7 @@ 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
+the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@@ -55,8 +55,8 @@ 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
+
+ GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
@@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
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
@@ -168,7 +168,7 @@ 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
@@ -225,7 +225,7 @@ 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
@@ -255,7 +255,7 @@ 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
+ 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
@@ -277,9 +277,9 @@ 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
+ 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
@@ -303,17 +303,16 @@ the "copyright" line and a pointer to where the full notice is found.
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
-
+ 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.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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 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.
@@ -336,5 +335,6 @@ necessary. Here is a sample; alter the names:
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
+library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
+
diff --git a/graphics/pgf/contrib/pgf-pie/LICENSE-LPPL1.3c.txt b/graphics/pgf/contrib/pgf-pie/LICENSE-LPPL1.3c.txt
new file mode 100644
index 0000000000..9566bc7ca8
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/LICENSE-LPPL1.3c.txt
@@ -0,0 +1,417 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `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 Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
+
diff --git a/graphics/pgf/contrib/pgf-pie/README b/graphics/pgf/contrib/pgf-pie/README
new file mode 100644
index 0000000000..6849209916
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/README
@@ -0,0 +1,3 @@
+Some LaTeX macros for pie chart by using PGF/Tikz package.
+Home page of project: http://pgf-pie.googlecode.com/
+Please read pgf-pie-manual.pdf for more information.
diff --git a/graphics/pgf/contrib/pgf-pie/demo/before-after-number.tex b/graphics/pgf/contrib/pgf-pie/before-after-number.tex
index 0a50ebf9d9..0a50ebf9d9 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/before-after-number.tex
+++ b/graphics/pgf/contrib/pgf-pie/before-after-number.tex
diff --git a/graphics/pgf/contrib/pgf-pie/demo/cloud.svg b/graphics/pgf/contrib/pgf-pie/cloud.svg
index 3fb608e5fb..3fb608e5fb 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/cloud.svg
+++ b/graphics/pgf/contrib/pgf-pie/cloud.svg
diff --git a/graphics/pgf/contrib/pgf-pie/demo/cloud.tex b/graphics/pgf/contrib/pgf-pie/cloud.tex
index fba25f896c..fba25f896c 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/cloud.tex
+++ b/graphics/pgf/contrib/pgf-pie/cloud.tex
diff --git a/graphics/pgf/contrib/pgf-pie/demo/color.tex b/graphics/pgf/contrib/pgf-pie/color.tex
index cb79b8c0ef..cb79b8c0ef 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/color.tex
+++ b/graphics/pgf/contrib/pgf-pie/color.tex
diff --git a/graphics/pgf/contrib/pgf-pie/demo/colorwheel.tex b/graphics/pgf/contrib/pgf-pie/colorwheel.tex
index 1543fbe7c8..1543fbe7c8 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/colorwheel.tex
+++ b/graphics/pgf/contrib/pgf-pie/colorwheel.tex
diff --git a/graphics/pgf/contrib/pgf-pie/demo/explode.tex b/graphics/pgf/contrib/pgf-pie/explode.tex
index 94c83fc70a..94c83fc70a 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/explode.tex
+++ b/graphics/pgf/contrib/pgf-pie/explode.tex
diff --git a/graphics/pgf/contrib/pgf-pie/demo/first-pie.svg b/graphics/pgf/contrib/pgf-pie/first-pie.svg
index 9feb8fe15c..9feb8fe15c 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/first-pie.svg
+++ b/graphics/pgf/contrib/pgf-pie/first-pie.svg
diff --git a/graphics/pgf/contrib/pgf-pie/demo/first-pie.tex b/graphics/pgf/contrib/pgf-pie/first-pie.tex
index e8c63761b4..e8c63761b4 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/first-pie.tex
+++ b/graphics/pgf/contrib/pgf-pie/first-pie.tex
diff --git a/graphics/pgf/contrib/pgf-pie/hide-number.tex b/graphics/pgf/contrib/pgf-pie/hide-number.tex
new file mode 100644
index 0000000000..53252173e0
--- /dev/null
+++ b/graphics/pgf/contrib/pgf-pie/hide-number.tex
@@ -0,0 +1,3 @@
+\begin{tikzpicture}
+ \pie[hide number]{10/A, 20/B, 30/C, 40/D}
+\end{tikzpicture}
diff --git a/graphics/pgf/contrib/pgf-pie/demo/legend.tex b/graphics/pgf/contrib/pgf-pie/legend.tex
index f6665f6c8e..f6665f6c8e 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/legend.tex
+++ b/graphics/pgf/contrib/pgf-pie/legend.tex
diff --git a/graphics/pgf/contrib/pgf-pie/pgf-pie-manual.pdf b/graphics/pgf/contrib/pgf-pie/pgf-pie-manual.pdf
index 24dd816df6..961445766e 100644
--- a/graphics/pgf/contrib/pgf-pie/pgf-pie-manual.pdf
+++ b/graphics/pgf/contrib/pgf-pie/pgf-pie-manual.pdf
Binary files differ
diff --git a/graphics/pgf/contrib/pgf-pie/pgf-pie-manual.tex b/graphics/pgf/contrib/pgf-pie/pgf-pie-manual.tex
index 8afb987d26..f9235a2eb7 100644
--- a/graphics/pgf/contrib/pgf-pie/pgf-pie-manual.tex
+++ b/graphics/pgf/contrib/pgf-pie/pgf-pie-manual.tex
@@ -1,6 +1,6 @@
% Manual of pgf-pie.sty, a convenient set of macros for drawing pie
% chart. Written by Xu Yuan <xuyuan.cn@gmail.com> This file is part of
-% pgf-pie you may get it at http://code.google.com/p/pgf-pie/
+% pgf-pie you may get it at https://github.com/pgf-tikz/pgf-pie
\documentclass{article}
\usepackage[margin=12mm]{geometry}
@@ -70,7 +70,7 @@ keywordstyle=\color{blue}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\title{Drawing Pie Chart by using \texttt{pgf-pie}}
\author{\href{mailto:xuyuan.cn@gmail.com}{Yuan Xu}}
-\date{\today{}~(v0.2)}
+\date{\today{}~(v0.3)}
\maketitle
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -80,7 +80,7 @@ keywordstyle=\color{blue}
popular graphic package \texttt{PGF/TikZ}. This document presents
the usage of \texttt{pgf-pie} and collects some pie charts as
examples. \texttt{pgf-pie} can be downloaded from
- \href{http://code.google.com/p/pgf-pie/}{http://code.google.com/p/pgf-pie/}.
+ \href{https://github.com/pgf-tikz/pgf-pie}{https://github.com/pgf-tikz/pgf-pie}.
\end{abstract}
\tableofcontents
@@ -141,6 +141,10 @@ automatically if user doesn't set it.
\demo[0.6]{before-after-number}
+The number also can be hide by \texttt{hide number}:
+
+\demo[0.6]{hide-number}
+
\paragraph{Scale font}
The size of font in size pie can be scaled according to how big the
part is automatically.
diff --git a/graphics/pgf/contrib/pgf-pie/pgf-pie.sty b/graphics/pgf/contrib/pgf-pie/pgf-pie.sty
index 6a669e337f..0aaa3a0b54 100644
--- a/graphics/pgf/contrib/pgf-pie/pgf-pie.sty
+++ b/graphics/pgf/contrib/pgf-pie/pgf-pie.sty
@@ -7,7 +7,7 @@
%
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-\ProvidesPackage{pgf-pie}[2011/10/02 v0.2 Some LaTeX macros for pie
+\ProvidesPackage{pgf-pie}[2020/05/27 v0.3 Some LaTeX macros for pie
chart by using PGF/Tikz package.]
\RequirePackage{tikz}
@@ -31,10 +31,10 @@ chart by using PGF/Tikz package.]
\path (#8) -- ++(\midangle:#5) coordinate(O);
\pgfmathparse{#7+#5}
- \let\radius\pgfmathresult
+ \let\pgfpie@radius\pgfmathresult
% slice
- \draw[line join=round, fill=#6, \style] (O) -- ++(#1:#7) arc (#1:#2:#7) -- cycle;
+ \draw[line join=round, fill=#6, \pgfpie@style] (O) -- ++(#1:#7) arc (#1:#2:#7) -- cycle;
\pgfmathparse{min(((#2)-(#1)-10)/110*(-0.3),0)}
\let\temp\pgfmathresult
@@ -45,19 +45,19 @@ chart by using PGF/Tikz package.]
{
% label and number together
\path (O) -- ++(\midangle:\innerpos) node
- {\scalefont{#3}\shortstack{#4\\\beforenumber#3\afternumber}};
+ {\scalefont{#3}\shortstack{#4\\\pgfpie@numbertext{#3}}};
}
{
% label
\iflegend
\else
- \path (O) -- ++ (\midangle:\radius)
+ \path (O) -- ++ (\midangle:\pgfpie@radius)
node[inner sep=0, \pgfpie@text=\midangle:#4]{};
\fi
% number
\path (O) -- ++(\midangle:\innerpos) node
- {\scalefont{#3}\beforenumber#3\afternumber};
+ {\scalefont{#3}\pgfpie@numbertext{#3}};
}
}
@@ -65,7 +65,7 @@ chart by using PGF/Tikz package.]
{
\pgfmathparse{int(mod(#1,\value{pgfpie@colorLength}))}
\let\ci\pgfmathresult
- \foreach \c [count=\j from 0] in \color {
+ \foreach \c [count=\j from 0] in \pgfpie@color {
\ifnum \j=\ci
\xdef\thecolor{\c}
\thecolor
@@ -78,7 +78,7 @@ chart by using PGF/Tikz package.]
{
\pgfmathparse{int(mod(#1,\value{pgfpie@explodeLength}))}
\let\ei\pgfmathresult
- \foreach \e [count=\j from 0] in \explode {
+ \foreach \e [count=\j from 0] in \pgfpie@explode {
\ifnum \j=\ei
\xdef\theexplode{\e}
\breakforeach
@@ -95,12 +95,12 @@ chart by using PGF/Tikz package.]
{
\ifthenelse{\equal{\pgfpie@text}{inside}}
{
- \draw[fill=#4, \style] (#1) rectangle node
- {\scalefont{#3}\shortstack{#5\\\beforenumber#3\afternumber}} ++(#2);
+ \draw[fill=#4, \pgfpie@style] (#1) rectangle node
+ {\scalefont{#3}\shortstack{#5\\\pgfpie@numbertext{#3}}} ++(#2);
}
{
- \draw[fill=#4, \style] (#1) rectangle node
- {\scalefont{#3}\beforenumber#3\afternumber} ++(#2);
+ \draw[fill=#4, \pgfpie@style] (#1) rectangle node
+ {\scalefont{#3}\pgfpie@numbertext{#3}} ++(#2);
}
}
@@ -115,10 +115,10 @@ chart by using PGF/Tikz package.]
\draw[fill=#4, #5] (#1) circle[radius=#2];
\ifthenelse{\equal{\pgfpie@text}{inside}}
{
- \node at (#1) {\scalefont{#3}\shortstack{#6\\\beforenumber#3\afternumber}};
+ \node at (#1) {\scalefont{#3}\shortstack{#6\\\pgfpie@numbertext{#3}}};
}
{
- \node at (#1) {\scalefont{#3}\beforenumber#3\afternumber};
+ \node at (#1) {\scalefont{#3}\pgfpie@numbertext{#3}};
}
}
@@ -127,25 +127,25 @@ chart by using PGF/Tikz package.]
\newcounter{pgfpie@colorLength}
\newcounter{pgfpie@sliceLength}
-\def\setexplode#1\pgfeov{\def\explode{#1}}
+\def\setexplode#1\pgfeov{\def\pgfpie@explode{#1}}
\pgfkeyslet{/explode/.@cmd}{\setexplode}
-\def\setcolor#1\pgfeov{\def\color{#1}}
+\def\setcolor#1\pgfeov{\def\pgfpie@color{#1}}
\pgfkeyslet{/color/.@cmd}{\setcolor}
-\def\setradius#1\pgfeov{\def\radius{#1}}
+\def\setradius#1\pgfeov{\def\pgfpie@radius{#1}}
\pgfkeyslet{/radius/.@cmd}{\setradius}
-\def\setpos#1\pgfeov{\def\pos{#1}}
+\def\setpos#1\pgfeov{\def\pgfpie@pos{#1}}
\pgfkeyslet{/pos/.@cmd}{\setpos}
-\def\setstyle#1\pgfeov{\def\style{#1}}
+\def\setstyle#1\pgfeov{\def\pgfpie@style{#1}}
\pgfkeyslet{/style/.@cmd}{\setstyle}
-\def\setbeforenumber#1\pgfeov{\def\beforenumber{#1}}
+\def\setbeforenumber#1\pgfeov{\def\pgfpie@beforenumber{#1}}
\pgfkeyslet{/before number/.@cmd}{\setbeforenumber}
-\def\setafternumber#1\pgfeov{\def\afternumber{#1}}
+\def\setafternumber#1\pgfeov{\def\pgfpie@afternumber{#1}}
\pgfkeyslet{/after number/.@cmd}{\setafternumber}
\def\settext#1\pgfeov{\xdef\pgfpie@text{#1}}
@@ -154,7 +154,7 @@ chart by using PGF/Tikz package.]
\def\setsum#1\pgfeov{\xdef\pgfpie@sum{#1}}
\pgfkeyslet{/sum/.@cmd}{\setsum}
-\def\setrotate#1\pgfeov{\xdef\rotate{#1}}
+\def\setrotate#1\pgfeov{\xdef\pgfpie@rotate{#1}}
\pgfkeyslet{/rotate/.@cmd}{\setrotate}
\newif\ifpolar
@@ -179,6 +179,16 @@ chart by using PGF/Tikz package.]
\fi
}
+\newif\ifhidenumber
+\pgfkeys{/hide number/.is if=hidenumber}
+\newcommand{\pgfpie@numbertext}[1]
+{
+ \ifhidenumber
+ \else
+ \pgfpie@beforenumber#1\pgfpie@afternumber
+ \fi
+}
+
\newcommand{\pie}[2][]
{
% load default parameters
@@ -199,6 +209,7 @@ chart by using PGF/Tikz package.]
square=false,
cloud=false,
scale font=false,
+ hide number=false
}
% load user's parameters
\pgfkeys{#1}
@@ -229,10 +240,10 @@ chart by using PGF/Tikz package.]
% init counters
\setcounter{pgfpie@explodeLength}{0}
- \foreach \e in \explode { \addtocounter{pgfpie@explodeLength}{1} }
+ \foreach \e in \pgfpie@explode { \addtocounter{pgfpie@explodeLength}{1} }
\setcounter{pgfpie@colorLength}{0}
- \foreach \c in \color { \addtocounter{pgfpie@colorLength}{1} }
+ \foreach \c in \pgfpie@color { \addtocounter{pgfpie@colorLength}{1} }
\pgfmathsetlength{\pgfpie@angleEnd}{0}
@@ -241,10 +252,10 @@ chart by using PGF/Tikz package.]
\ifsquare
%%%%%%%%%% SQUARE PIE BEGIN %%%%%%%%%%%
- \pgfmathparse{\radius*2}
+ \pgfmathparse{\pgfpie@radius*2}
\xdef\verticalLength{\pgfmathresult}
\xdef\horizontalLength{\pgfmathresult}
- \path (\pos) -- ++(-\radius, -\radius) coordinate (start);
+ \path (\pgfpie@pos) -- ++(-\pgfpie@radius, -\pgfpie@radius) coordinate (start);
\pgfmathparse{\verticalLength * \horizontalLength / \pgfpie@sum}
\let\squareUnit\pgfmathresult
@@ -312,18 +323,18 @@ chart by using PGF/Tikz package.]
% find explode
\pgfpie@findExplode{\i}
\def\cloudGap{\theexplode + 0.1}
- \pgfmathparse{sqrt(\p / \pgfpie@sum) * \radius}
+ \pgfmathparse{sqrt(\p / \pgfpie@sum) * \pgfpie@radius}
\let\cloudR\pgfmathresult
\ifnum \i = 0
% first cloud
- \coordinate (O) at (\pos);
+ \coordinate (O) at (\pgfpie@pos);
\xdef\cloudRone{\cloudR}
- \xdef\cloudExtendDir{180+\rotate}
+ \xdef\cloudExtendDir{180+\pgfpie@rotate}
\else
\ifnum \i = 1
% second cloud
\xdef\cloudRtwo{\cloudR}
- \xdef\cloudExtendDir{45+\rotate}
+ \xdef\cloudExtendDir{45+\pgfpie@rotate}
\path (O) -- ++(\cloudExtendDir:\cloudRone+\cloudGap+\cloudRtwo) coordinate (O);
\else
% next cloud
@@ -353,7 +364,7 @@ chart by using PGF/Tikz package.]
\pgfpie@findColor{\i}
\pgfpie@cloud{O}{\cloudR}{\p}
- {\thecolor}{\style}{\t}
+ {\thecolor}{\pgfpie@style}{\t}
% label
\iflegend
@@ -378,10 +389,10 @@ chart by using PGF/Tikz package.]
}
\pgfmathparse{\pgfpie@sum / \value{pgfpie@sliceLength}}
\xdef\polarangle{\pgfmathresult}
- \pgfmathparse{\radius / sqrt(\maxValue)}
+ \pgfmathparse{\pgfpie@radius / sqrt(\maxValue)}
\xdef\polarRadiusUnit{\pgfmathresult}
\else
- \xdef\theradius{\radius}
+ \xdef\theradius{\pgfpie@radius}
\fi
\xdef\pgfpie@angleBegin{\the\pgfpie@angleEnd}
@@ -404,14 +415,14 @@ chart by using PGF/Tikz package.]
% find color
\pgfpie@findColor{\i}
- \pgfpie@slice{\pgfpie@angleBegin/\pgfpie@sum*360+\rotate}
- {\the\pgfpie@angleEnd/\pgfpie@sum*360+\rotate}
+ \pgfpie@slice{\pgfpie@angleBegin/\pgfpie@sum*360+\pgfpie@rotate}
+ {\the\pgfpie@angleEnd/\pgfpie@sum*360+\pgfpie@rotate}
{\p}
{\t}
{\theexplode}
{\thecolor}
{\theradius}
- {\pos}
+ {\pgfpie@pos}
\xdef\pgfpie@angleBegin{\the\pgfpie@angleEnd}
}
%%%%%%%%%% CIRCLE PIE END %%%%%%%%%%%
@@ -428,7 +439,7 @@ chart by using PGF/Tikz package.]
\foreach \p/\t [count=\i from 0] in {#2}
{
\pgfpie@findColor{\i}
- \node[draw, fill=\thecolor, \style, below of=legendpos, label=0:\t] (legendpos) {};
+ \node[draw, fill=\thecolor, \pgfpie@style, below of=legendpos, label=0:\t] (legendpos) {};
}
\end{scope}
\fi
diff --git a/graphics/pgf/contrib/pgf-pie/demo/polar.svg b/graphics/pgf/contrib/pgf-pie/polar.svg
index a4442a04df..a4442a04df 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/polar.svg
+++ b/graphics/pgf/contrib/pgf-pie/polar.svg
diff --git a/graphics/pgf/contrib/pgf-pie/demo/polar.tex b/graphics/pgf/contrib/pgf-pie/polar.tex
index 4d86872493..4d86872493 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/polar.tex
+++ b/graphics/pgf/contrib/pgf-pie/polar.tex
diff --git a/graphics/pgf/contrib/pgf-pie/demo/population.tex b/graphics/pgf/contrib/pgf-pie/population.tex
index 9267acb3fc..9267acb3fc 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/population.tex
+++ b/graphics/pgf/contrib/pgf-pie/population.tex
diff --git a/graphics/pgf/contrib/pgf-pie/demo/radius.tex b/graphics/pgf/contrib/pgf-pie/radius.tex
index 944e218219..944e218219 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/radius.tex
+++ b/graphics/pgf/contrib/pgf-pie/radius.tex
diff --git a/graphics/pgf/contrib/pgf-pie/demo/scalefont.tex b/graphics/pgf/contrib/pgf-pie/scalefont.tex
index df61709c40..df61709c40 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/scalefont.tex
+++ b/graphics/pgf/contrib/pgf-pie/scalefont.tex
diff --git a/graphics/pgf/contrib/pgf-pie/demo/shadow.tex b/graphics/pgf/contrib/pgf-pie/shadow.tex
index 9ccfd9ffb5..9ccfd9ffb5 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/shadow.tex
+++ b/graphics/pgf/contrib/pgf-pie/shadow.tex
diff --git a/graphics/pgf/contrib/pgf-pie/demo/square.svg b/graphics/pgf/contrib/pgf-pie/square.svg
index 8e0a48f86a..8e0a48f86a 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/square.svg
+++ b/graphics/pgf/contrib/pgf-pie/square.svg
diff --git a/graphics/pgf/contrib/pgf-pie/demo/square.tex b/graphics/pgf/contrib/pgf-pie/square.tex
index dd37da64cf..dd37da64cf 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/square.tex
+++ b/graphics/pgf/contrib/pgf-pie/square.tex
diff --git a/graphics/pgf/contrib/pgf-pie/demo/sum.tex b/graphics/pgf/contrib/pgf-pie/sum.tex
index 13e2b7365c..13e2b7365c 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/sum.tex
+++ b/graphics/pgf/contrib/pgf-pie/sum.tex
diff --git a/graphics/pgf/contrib/pgf-pie/demo/text-inside.tex b/graphics/pgf/contrib/pgf-pie/text-inside.tex
index 07cf42eafd..07cf42eafd 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/text-inside.tex
+++ b/graphics/pgf/contrib/pgf-pie/text-inside.tex
diff --git a/graphics/pgf/contrib/pgf-pie/demo/text.tex b/graphics/pgf/contrib/pgf-pie/text.tex
index 95ef108578..95ef108578 100644
--- a/graphics/pgf/contrib/pgf-pie/demo/text.tex
+++ b/graphics/pgf/contrib/pgf-pie/text.tex
diff --git a/language/marathi/README.txt b/language/marathi/README.txt
index 50a94b1e8f..684781cd31 100644
--- a/language/marathi/README.txt
+++ b/language/marathi/README.txt
@@ -1,6 +1,6 @@
आज्ञासंच: marathi
लेखक: निरंजन
-आवृत्ती: ०.१ (२५ मे, २०२०)
+आवृत्ती: १.१ (२७ मे, २०२०)
माहिती: लुआ-लाटेक् व झी-लाटेक् ह्यांच्यासह मराठीचा सुलभ वापर करण्यासाठी.
दुवा: https://gitlab.com/niranjanvikastambe/marathi
अडचणी: https://gitlab.com/niranjanvikastambe/marathi/-/issues
@@ -9,7 +9,7 @@
--------------------------------------------------------------------------
Package: marathi
Author: Niranjan
-Version: 1.0 (25 May, 2020)
+Version: 1.1 (27 May, 2020)
Description: For conveniently typesetting Marathi language with LuaLaTeX and XeLaTeX.
Repository: https://gitlab.com/niranjanvikastambe/marathi
Bug tracker: https://gitlab.com/niranjanvikastambe/marathi/-/issues
diff --git a/language/marathi/article.tex b/language/marathi/article.tex
index 80df0535ca..6b7a9c1b10 100644
--- a/language/marathi/article.tex
+++ b/language/marathi/article.tex
@@ -1,3 +1,5 @@
+\title{नमुना}
+\author{लेखक}
\maketitle
\begin{abstract}
नमस्कार! हा मजकूर अर्थशून्य आहे. ह्या ठिकाणी काय व कसे छापले जाईल ह्याचा हा केवळ एक नमुना आहे. जर तुम्ही हे वाचले, तर तुम्हाला कोणतीच माहिती मिळणार नाही. खरेच? ह्यात कोणतीच माहिती नाही काय? ह्या मजकुरात व `पिढ्ढ करढपाखू' अशा निरर्थक शब्दांमध्ये काही फरक आहे का? हो! ह्याला आंधळा मजकूर असे म्हणतात. हा मजकूर तुम्हाला निवडलेला टंक कोणता आहे, अक्षरे कशी दिसतात ह्या सगळ्याबाबत माहिती देतो. ह्यासाठी विशिष्ट शब्दांची गरज नाही, परंतु शब्द वापरल्या गेलेल्या भाषेशी जुळायला हवेत.
diff --git a/language/marathi/book.tex b/language/marathi/book.tex
index aaad876e61..bbda136118 100644
--- a/language/marathi/book.tex
+++ b/language/marathi/book.tex
@@ -1,3 +1,5 @@
+\title{नमुना}
+\author{लेखक}
\maketitle
\tableofcontents
\chapter{पहिल्या स्तरावरील शीर्षक (प्रकरण)}
diff --git a/language/marathi/glossaries.gls b/language/marathi/glossaries.gls
index cdd333d1d4..89153b90ed 100644
--- a/language/marathi/glossaries.gls
+++ b/language/marathi/glossaries.gls
@@ -1,4 +1,4 @@
-\newglossaryentry{टंकजुळणी}{name={टंकजुळणी},description={Typesetting}}
+\newglossaryentry{अक्षरजुळणी}{name={अक्षरजुळणी},description={Typesetting}}
\newglossaryentry{बीजधारिका}{name={बीजधारिका},description={Source file. पर्यायी - स्रोत-धारिका}}
\newglossaryentry{आज्ञासंच}{name={आज्ञासंच},description={Package}}
\newglossaryentry{चालक}{name={चालक},description={Compiler}}
@@ -10,3 +10,6 @@
\newglossaryentry{आज्ञापीठ}{name={आज्ञापीठ},description={Preamble}}
\newglossaryentry{धारिका}{name={धारिका},description={Files}}
\newglossaryentry{मूलटंक}{name={मूलटंक},description={Default font}}
+\newglossaryentry{पायाभूत माहिती}{name={पायाभूत माहिती},description={Metadata}}
+\newglossaryentry{फलित-धारिका}{name={फलित-धारिका},description={Output file}}
+\newglossaryentry{कार्यघटक}{name={कार्यघटक},description={Argument}} \ No newline at end of file
diff --git a/language/marathi/letter.tex b/language/marathi/letter.tex
index cf3b9ec9ab..e7f324b91b 100644
--- a/language/marathi/letter.tex
+++ b/language/marathi/letter.tex
@@ -1,3 +1,14 @@
+\title{नमुना}
+\author{लेखक}
+\name{लेखक}
+\signature{सही}
+\address{
+ लेखकाचे नाव\\
+ अबक मार्ग\\
+ मुंबई\\
+ पिन क्र. ४०००००}
+\location{लेखकाचे स्थान}
+\telephone{दूरध्वनी - ०२० २२९५ २१०८}
\begin{letter}{प्राप्तकर्त्याचे नाव\\
प्राप्तकर्त्याची संस्था\\
संस्थेचा संक्षिप्त पत्ता}
diff --git a/language/marathi/marathi.dtx b/language/marathi/marathi.dtx
index e4f500018f..e5eebabe7a 100644
--- a/language/marathi/marathi.dtx
+++ b/language/marathi/marathi.dtx
@@ -32,7 +32,7 @@
%<*readme>
आज्ञासंच: marathi
लेखक: निरंजन
-आवृत्ती: ०.१ (२५ मे, २०२०)
+आवृत्ती: १.१ (२७ मे, २०२०)
माहिती: लुआ-लाटेक् व झी-लाटेक् ह्यांच्यासह मराठीचा सुलभ वापर करण्यासाठी.
दुवा: https://gitlab.com/niranjanvikastambe/marathi
अडचणी: https://gitlab.com/niranjanvikastambe/marathi/-/issues
@@ -41,7 +41,7 @@
--------------------------------------------------------------------------
Package: marathi
Author: Niranjan
-Version: 1.0 (25 May, 2020)
+Version: 1.1 (27 May, 2020)
Description: For conveniently typesetting Marathi language with LuaLaTeX and XeLaTeX.
Repository: https://gitlab.com/niranjanvikastambe/marathi
Bug tracker: https://gitlab.com/niranjanvikastambe/marathi/-/issues
@@ -52,8 +52,8 @@ License: The LaTeX Project Public License v1.3c or later.
%</internal>
%<*driver|package>
\def\marathiPackageName{marathi}
-\def\marathiPackageVersion{१.०}
-\def\marathiPackageDate{२५ मे, २०२०}
+\def\marathiPackageVersion{१.१}
+\def\marathiPackageDate{२७ मे, २०२०}
\def\marathiPackageDescription{लुआ-लाटेक् व झी-लाटेक् ह्यांच्यासह मराठीचा सुलभ वापर करण्यासाठी.}
%</driver|package>
%<*driver>
@@ -69,10 +69,20 @@ License: The LaTeX Project Public License v1.3c or later.
urlcolor={blue!80!black}
}
\usepackage[sort=use]{glossaries}
+\usepackage{devanagaridigits}
+\usepackage{capt-of}
+\renewcommand{\tablename}{कोष्टक}
+\renewcommand{\arraystretch}{1.2}
+\usepackage{standalone}
+\makeatletter
+\RequirePackage{devanagaridigits}
+\def\@arabic#1{\expandafter\devanagaridigits\expandafter{\number#1}}
+\makeatother
+\renewcommand{\theCodelineNo}{{\scriptsize\arabic{CodelineNo}}\quad}
\input{glossaries.gls}
-\setmainfont[Script=Devanagari,Mapping=devanagarinumerals]{Shobhika}
-\setmonofont[Script=Devanagari]{Mukta}
-\newfontfamily{\mukta}[Script=Devanagari]{Mukta}
+\setmainfont[Renderer=Harfbuzz,Script=Devanagari,Mapping=devanagarinumerals]{Shobhika}
+\setmonofont[Renderer=Harfbuzz,Script=Devanagari]{Mukta}
+\newfontfamily{\mukta}[Renderer=Harfbuzz,Script=Devanagari]{Mukta}
\usepackage{minted}
\usemintedstyle{bw}
\usepackage{fontawesome5}
@@ -101,7 +111,7 @@ License: The LaTeX Project Public License v1.3c or later.
% \maketitle
%
% \begin{abstract}
-% \XeLaTeX\ चा वापर करून मराठीत \gls{टंकजुळणी}\footnote{ह्या दस्तऐवजात लाटेक्-मध्ये प्रचलित असणाऱ्या अनेक इंग्रजी संज्ञांसाठी पर्यायी मराठी संज्ञा वापरण्यात आल्या आहेत, हे सर्व प्रयोग तुलनेने नवे असल्याने ह्याच दस्तऐवजातील शेवटच्या संज्ञासूचीत सर्व संज्ञांचे इंग्रजी अर्थ दिले आहेत.} शक्य आहे, परंतु सुलभ नाही. \LaTeX\ सह मराठीत टंकजुळणी करताना आपली \gls{बीजधारिका} अनेक आज्ञांनी भरून जाते. हा \gls{आज्ञासंच} अशा सर्व उपयुक्त आज्ञा आधीच लिहून ठेवतो. त्यामुळे नव्या वापरकर्त्यांना त्या सर्व आज्ञा वेगळ्या शिकाव्या लागत नाहीत. शिवाय blindtext ह्या आज्ञासंचाप्रमाणे मराठीकरिता नमुना मजकूर उत्पन्न करण्यासाठीची सोय करण्यात आली आहे. \LuaLaTeX\ हा अत्याधुनिक \gls{चालक} वापरल्यास अंक रोमी लिपीत येतात, ती अडचणदेखील ह्या आज्ञासंचात सोडवण्यात आली आहे.
+% \XeLaTeX\ चा वापर करून मराठीत \gls{अक्षरजुळणी}\footnote{ह्या दस्तऐवजात लाटेक्-मध्ये प्रचलित असणाऱ्या अनेक इंग्रजी संज्ञांसाठी पर्यायी मराठी संज्ञा वापरण्यात आल्या आहेत, हे सर्व प्रयोग तुलनेने नवे असल्याने ह्याच दस्तऐवजातील शेवटच्या संज्ञासूचीत सर्व संज्ञांचे इंग्रजी अर्थ दिले आहेत.} शक्य आहे, परंतु सुलभ नाही. \LaTeX\ सह मराठीत अक्षरजुळणी करताना आपली \gls{बीजधारिका} अनेक आज्ञांनी भरून जाते. हा \gls{आज्ञासंच} अशा सर्व उपयुक्त आज्ञा आधीच लिहून ठेवतो. त्यामुळे नव्या वापरकर्त्यांना त्या सर्व आज्ञा वेगळ्या शिकाव्या लागत नाहीत. शिवाय blindtext ह्या आज्ञासंचाप्रमाणे मराठीकरिता नमुना मजकूर उत्पन्न करण्यासाठीची सोय करण्यात आली आहे. \LuaLaTeX\ हा अत्याधुनिक \gls{चालक} वापरल्यास अंक रोमी लिपीत येतात, ती अडचणदेखील ह्या आज्ञासंचात सोडवण्यात आली आहे.
% \end{abstract}
%
% \begin{documentation}
@@ -122,22 +132,48 @@ License: The LaTeX Project Public License v1.3c or later.
%
% ह्या उदाहरणाने देवनागरी दिसत असले तरी फलित हवे तसे दिसत नाही. जोडाक्षरे तुटक दिसतात. त्यासाठी \mintinline{latex}{\setmainfont} ह्या आज्ञेस {\mukta Script=Devanagari} असे \gls{प्राचल} द्यावे लागते. पुढील अडचण म्हणजे लाटेक् आपोआप पुरवणारे आकडे (उदा. पृष्ठक्रमांक, तळटिपांचे क्रमांक) देवनागरीत न येणे. त्याकरिता ह्या आज्ञेस {\mukta Mapping=devanagarinumerals} असे आणखी एक प्राचल द्यावे लागते. इतके करूनही भाषेचा प्रश्न उरतोच! उदा. लाटेक्-ला इंग्रजीव्यतिरिक्त इतर कोणतीही भाषा कळत नसल्यामुळे मूलभूत इंग्रजी शब्दांची भाषांतरे पुरवणारे बेबल अथवा पॉलिग्लॉसिया ह्यांसारखे आज्ञासंच वापरून भाषा निवडावी लागते. रोहित होळकरांच्या \href{https://ctan.org/pkg/latex-mr?lang=en}{\mukta latex-mr} ह्या पुस्तिकेत ह्या सर्व अडचणींची तपशीलवार चर्चा झाली आहे.
-% सद्यपरिस्थितीत लाटेक्-चे किमान ज्ञान असलेल्या नव्या वापरकर्त्याला मराठी लिहिण्यासाठी हा सगळा प्रपंच करायला लावणे म्हणजे ज्या फांदीवर आपण बसलो आहोत तीच तोडण्यासारखे आहे. त्यामुळे कोणत्याही वापरकर्त्याला केवळ लाटेक्-च्या किमान ज्ञानासह \mintinline{latex}{\usepackage{marathi}} एवढी एक आज्ञा लिहून उत्तम देवनागरी टंकजुळणी करता यावी हा ह्या आज्ञासंचाचा उद्देश आहे. ह्या आज्ञासंचात केवळ दोन आज्ञांचा समावेश आहे. त्या पुढीलप्रमाणे.
+% सद्यपरिस्थितीत लाटेक्-चे किमान ज्ञान असलेल्या नव्या वापरकर्त्याला मराठी लिहिण्यासाठी हा सगळा प्रपंच करायला लावणे म्हणजे ज्या फांदीवर आपण बसलो आहोत तीच तोडण्यासारखे आहे. त्यामुळे कोणत्याही वापरकर्त्याला केवळ लाटेक्-च्या किमान ज्ञानासह \mintinline{latex}{\usepackage{marathi}} एवढी एक आज्ञा लिहून उत्तम देवनागरी अक्षरजुळणी करता यावी हा ह्या आज्ञासंचाचा उद्देश आहे. ह्या आज्ञासंचात पुढील आज्ञांचा समावेश आहे.
+% \begin{function}{\परिच्छेद}
+% ही आज्ञा केवळ एक नमुना परिच्छेद निर्माण करते. ही आज्ञा एकामागोमाग एक अनेकदा टाकल्याने अनेक तितके परिच्छेद निर्माण केले जाऊ शकतात.
+% \end{function}
% \begin{function}{\नमुना}
-% नमुना ही आज्ञा सर्वप्रथम दिलेला \gls{लाटेक्-वर्ग} पाहते व त्यानुसार त्या वर्गाच्या किमान क्षमता दर्शवणारी एक फलित-धारिका निर्माण करते. उदाहरणादाखल {\mukta article, book, report, beamer व letter} ह्या लाटेक्-वर्गांसह \mintinline{latex}{\नमुना} ही आज्ञा चालवून पाहा. एकाच बीजधारिकेत केवळ लाटेक्-वर्ग बदलत असाल, तर लाटेक्-ने तयार केलेल्या \gls{साहाय्यक धारिका} काही वेळा अनपेक्षित अडचणी दाखवल्या जातात. जुनी माहिती शिल्लक असल्याने त्या दिल्या जातात. घाबरून न जाता, तीच धारिका दोनदा चालवावी. सर्व अडचणी सुटतात.
+% नमुना ही आज्ञा सर्वप्रथम दिलेला \gls{लाटेक्-वर्ग} पाहते व त्यानुसार त्या वर्गाच्या किमान क्षमता दर्शवणारी एक \gls{फलित-धारिका} निर्माण करते. उदाहरणादाखल {\mukta article, book, report, beamer व letter} ह्या लाटेक्-वर्गांसह \mintinline{latex}{\नमुना} ही आज्ञा चालवून पाहा. एकाच बीजधारिकेत केवळ लाटेक्-वर्ग बदलत असाल, तर लाटेक्-ने तयार केलेल्या \gls{साहाय्यक धारिका} काही वेळा अनपेक्षित अडचणी दाखवल्या जातात. जुनी माहिती शिल्लक असल्याने त्या दिल्या जातात. घाबरून न जाता, तीच धारिका दोनदा चालवावी. सर्व अडचणी सुटतात.
% \end{function}
% \begin{function}{\टंक}
% \begin{syntax}
% \cs{टंक} \marg{टंकाचे नाव}
% \end{syntax}
-% ह्या आज्ञासंचात शोभिका हा टंक \gls{मूलटंक} म्हणून निवडून ठेवला आहे. परंतु तो बदलायचा असेल तर \mintinline{latex}{\टंक} ह्या आज्ञेची सोय करण्यात आली आहे. ह्या आज्ञेसह आपोआप देवनागरी टंकासाठी आवश्यक असणारी {\mukta Renderer=Harfbuzz,Script=Devanagari,Mapping=devanagarinumerals} ही प्राचले लिहून ठेवली आहेत. शिवाय \mintinline{latex}{\setmainfont{टंकाचे नाव}} ही आज्ञा नेहमीप्रमाणे चालतेच.
+% ह्या आज्ञासंचात शोभिका हा टंक \gls{मूलटंक} म्हणून निवडून ठेवला आहे. परंतु तो बदलायचा असेल तर \mintinline{latex}{\टंक} ह्या आज्ञेची सोय करण्यात आली आहे. ह्या आज्ञेसह आपोआप देवनागरी टंकासाठी आवश्यक असणारी {\mukta Renderer=Harfbuzz,Script=Devanagari,Mapping=devanagarinumerals} ही प्राचले लिहून ठेवली आहेत. शिवाय \mintinline{latex}{\setmainfont{टंकाचे नाव}} ही आज्ञा नेहमीप्रमाणे चालतेच. टंकाचे नाव हा ह्या आज्ञेचा \gls{कार्यघटक} आहे.
+% \end{function}
+%\begin{function}{अंतर}\label{प्राचल}
+% हे प्राचल वापरल्यास आज्ञासंचातर्फे दोन ओळींमधील अंतरात कोणताही हस्तक्षेप केला जात नाही. अधिक माहितीसाठी \ref{अंतर} वाचा. ह्या प्राचलाला किंमतदेखील देता येते. उदा. \verb|\usepackage[अंतर=2]{marathi}| अशा प्रकारे आज्ञासंच वापरल्यास ओळींमधले अंतर दुप्पट होते. कोणत्याही प्राचलाशिवाय वापरल्यास आज्ञासंचातर्फे मूलभूत अंतराच्या दीडपट अंतर पुरवले जाते. पुढील कोष्टकाने अंतर ह्या प्राचलाचा वापर अधिक स्पष्ट होईल.
+%\begin{center}
+% \includestandalone{table}
+% \captionof{table}{ओळींमधले अंतर}
+%\end{center}
% \end{function}
+%\begin{function}{\बदल}
+%\begin{syntax}
+% \cs{बदल}\marg{अंतर = \underline{किंमत}}
+%\end{syntax}
+% दस्तऐवजात कुठेही अंतर बदलावयाचे असल्यास वरील मार्गाने ते बदलता येते. ह्या आज्ञेला एक कार्यघटक आहे. त्यात अंतर असे लिहून ओळींमधले मूळ अंतर जितक्या पटींनी बदलायचे आहे ती किंमत टाकावी. पुढील उदाहरण पाहा.
+% \begin{minted}[linenos]{latex}
+% \documentclass{article}
+% \usepackage{marathi}
+%
+% \begin{document}
+% \परिच्छेद
+% \बदल{अंतर=5}
+% \परिच्छेद
+% \end{document}
+% \end{minted}
+%\end{function}
% \end{documentation}
%
% \StopEventually{\PrintIndex}
%
% \begin{implementation}
-% \section*{आज्ञासंचाची घडण}
+% \section{आज्ञासंचाची घडण}
% आता आपण आज्ञासंचाची घडण व त्यातील आज्ञांचा उपयोग लक्षात घेऊयात.
% \begin{macrocode}
%<@@=marathi>
@@ -148,75 +184,58 @@ License: The LaTeX Project Public License v1.3c or later.
\NeedsTeXFormat{LaTeX2e}
% \end{macrocode}
% ह्या आज्ञांसह आज्ञासंचाची पायाभूत माहिती पुरवली.
-% \section{अंतर}
-% इंग्रजीमधली g, j, y अशी अक्षरे सोडली तर त्यांच्याहून जास्त खोली असणारा मजकूर त्या लिपीत आढळत नाही. देवनागरीचे तसे नाही. क ह्या अक्षराहून क्क थोडे अधिक खोल. ट्ट त्याहून थोडे अधिक व ट्टू त्याहून. अशा असमान उंचीच्या अक्षरांमुळे लाटेक् आपोआप दोन ओळींमधले अंतर बदलते व त्यामुळे ओळींची उंची असमान दिसू लागते. साध्या मजकुरातील ओळींप्रमाणेच कोष्टकेदेखील कुरूप दिसू लागतात. ह्यावर तोडगा काय? ह्याची दोन उत्तरे आहेत. पहिले उत्तर मराठीच्या आजवरच्या छपाईच्या इतिहासाचा अभ्यास करून, मराठी लिहिताना दोन ओळींमध्ये सोडले गेलेले सरासरी अंतर किती ह्याचे संशोधन करणे व त्यानुसार सर्व ठिकाणी ते अंतर लागू करणे. हा मार्ग सहज नाही. हा संशोधनाचा विषय आहे. त्याकरिता टंकाच्या आकाराचे व त्यानुसार बदलणाऱ्या ओळींच्या अंतराचे प्रमाणदेखील काळजीपूर्वक अभ्यासावे लागेल. हे सर्व करणे जरी इष्ट व आवश्यक असले तरी हे संशोधन पूर्ण होईस्तोवर सामान्य वापरकर्त्याला ज्या आज्ञा शिकण्याचे कष्ट पडतात ते कसे टाळावेत? त्यासाठी तात्पुरता तोडगा काढावा लागतो. तो असा की ओळींमधले अंतर दस्तऐवजाच्या सुरुवातीलाच वाढवून ठेवायचे. त्यासाठी पुढील आज्ञा वापरल्या जातात.
-
-% \noindent{\mukta\textbackslash renewcommand\{\textbackslash baselinestretch\}\{1.5\}}\par
-% \noindent{\mukta\textbackslash renewcommand\{\textbackslash arraystretch\}\{1.5\}}
-
-% आमच्या काही सहकाऱ्यांच्या मते हा निर्णय अतिशय उग्र आहे. त्यामुळे दस्तऐवजातील इतर काही ठिकाणच्या अंतरांवर सूक्ष्म परिणाम घडतात, जे टाळणे अधिक इष्ट. त्यांच्या ह्या मताचा विचार करून ह्या आज्ञासंचाकरिता \textbf{अंतर} नावाचे प्राचल विकसित केले आहे. हे प्राचल वापरल्यास आज्ञासंचातर्फे ओळींमधल्या अंतरात कोणताही हस्तक्षेप केला जात नाही. त्याकरिता पुढील आज्ञा समाविष्ट केल्या आहेत.
-
+% \subsection{अंतर}\label{अंतर}
+% इंग्रजीमधली g, j, y अशी अक्षरे सोडली तर त्यांच्याहून जास्त खोली असणारा मजकूर त्या लिपीत आढळत नाही. देवनागरीचे तसे नाही. क ह्या अक्षराहून क्क थोडे अधिक खोल. ट्ट त्याहून थोडे अधिक व ट्टू त्याहून. अशा असमान उंचीच्या अक्षरांमुळे लाटेक् आपोआप दोन ओळींमधले अंतर बदलते व त्यामुळे ओळींची उंची असमान दिसू लागते. साध्या मजकुरातील ओळींप्रमाणेच कोष्टकेदेखील कुरूप दिसू लागतात. ह्यावर तोडगा काय? ह्याची दोन उत्तरे आहेत. पहिले उत्तर मराठीच्या आजवरच्या छपाईच्या इतिहासाचा अभ्यास करून, मराठी लिहिताना दोन ओळींमध्ये सोडले गेलेले सरासरी अंतर किती ह्याचे संशोधन करणे व त्यानुसार सर्व ठिकाणी ते अंतर लागू करणे. हा मार्ग सहज नाही. हा संशोधनाचा विषय आहे. त्याकरिता टंकाच्या आकाराचे व त्यानुसार बदलणाऱ्या ओळींच्या अंतराचे प्रमाणदेखील काळजीपूर्वक अभ्यासावे लागेल. हे सर्व करणे जरी इष्ट व आवश्यक असले तरी हे संशोधन पूर्ण होईस्तोवर सामान्य वापरकर्त्याला ज्या आज्ञा शिकण्याचे कष्ट पडतात ते कसे टाळावेत? त्यासाठी तात्पुरता तोडगा काढावा लागतो. तो असा की ओळींमधले अंतर दस्तऐवजाच्या सुरुवातीलाच वाढवून ठेवायचे. त्यासाठी पुढील आज्ञा वापरल्या जातात. ओळींमधल्या अंतरासाठी {\mukta setspace} हा आज्ञासंच वापरावा असा सल्ला जोनाथन स्प्राट ह्यांनी \href{https://topanswers.xyz/tex}{टॉप-आन्सर्स} ह्या संकेतस्थळावर दिला. त्यानुसार हा बदल करत आहे.
+%
+% आमच्या काही सहकाऱ्यांच्या मते हा निर्णय अतिशय उग्र आहे. त्यामुळे दस्तऐवजातील इतर काही ठिकाणच्या अंतरांवर सूक्ष्म परिणाम घडतात, जे टाळणे अधिक इष्ट. त्यांच्या ह्या मताचा विचार करून ह्या आज्ञासंचाकरिता \textbf{अंतर} नावाचे प्राचल विकसित केले आहे. हे प्राचल वापरल्यास आज्ञासंचातर्फे ओळींमधल्या अंतरात कोणताही हस्तक्षेप केला जात नाही. त्याकरिता पुढील आज्ञा समाविष्ट केल्या आहेत. ह्या आज्ञांसाठी झूंग वोऊ ह्यांच्या टॉप-आन्सर्सवरील \href{https://topanswers.xyz/tex?q=1063#a1276}{ह्या उत्तराची} मदत झाली. ह्या प्राचलाबाबत अधिक माहिती \ref{प्राचल} मध्ये वाचता येईल.
% \begin{macrocode}
-\newif\ifmarathi@अंतर
-\marathi@अंतरfalse
-\DeclareOption{अंतर}{\marathi@अंतरtrue}
+\RequirePackage{setspace}
+\RequirePackage{pgfkeys}
+
+\def\बदल#1{\pgfkeys{marathi/.cd,#1}}
+\pgfkeys{
+ marathi/.is family,marathi/.cd,
+ अंतर/.code={\setstretch{#1}\selectfont},
+ अंतर=1.5,
+ अंतर/.default=1
+}
+\DeclareOption*{\expandafter\बदल\expandafter{\CurrentOption}}
\ProcessOptions
-\ifmarathi@अंतर
-\else
-\renewcommand{\baselinestretch}{1.5}
-\renewcommand{\arraystretch}{1.5}
-\fi
+\def\arraystretch{1.2}
% \end{macrocode}
-% \section{standalone लाटेक्-वर्ग}
-% standalone हा विशेष लाटेक्-वर्ग केवळ दस्तऐवजात दिलेल्या गोष्टींच्या आकाराचे फलित तयार करण्यासाठी वापरला जातो. उदा. article लाटेक्-वर्गात एखादे कोष्टक टाकले तर पानाच्या नेहमीच्या आकाराइतकी जागा कोष्टकाच्या आजूबाजूला सुटतेच. standalone लाटेक्-वर्गात मात्र तसे न होता केवळ कोष्टकाच्या आकाराइतके फलित निर्माण होते, परंतु ह्या वर्गास polyglossia आज्ञासंच व त्यातून पुरवली जाणारी भाषांतरे अनावश्यक आहेत, त्यामुळे ह्या लाटेक्-वर्गाकरिता केवळ fontspec हा आज्ञासंच वापरून, इतर सर्व वर्गांसाठी polyglossia हा आज्ञासंच वापरला आहे. त्यामुळे सर्व लाटेक्-वर्गांमध्ये भाषांतरेही मिळतात व standalone वर्गातदेखील आज्ञासंचामुळे कोणतीही अडचण येत नाही. पुढील आज्ञांनी हे साधले आहे.
+% \subsection{{\mukta standalone} लाटेक्-वर्ग}
+% {\mukta standalone} हा विशेष लाटेक्-वर्ग केवळ दस्तऐवजात दिलेल्या गोष्टींच्या आकाराचे फलित तयार करण्यासाठी वापरला जातो. उदा. {\mukta article} लाटेक्-वर्गात एखादे कोष्टक टाकले तर पानाच्या नेहमीच्या आकाराइतकी जागा कोष्टकाच्या आजूबाजूला सुटतेच. {\mukta standalone} लाटेक्-वर्गात मात्र तसे न होता केवळ कोष्टकाच्या आकाराइतके फलित निर्माण होते, परंतु ह्या वर्गास {\mukta polyglossia} आज्ञासंच व त्यातून पुरवली जाणारी भाषांतरे अनावश्यक आहेत, त्यामुळे ह्या लाटेक्-वर्गाकरिता केवळ fontspec हा आज्ञासंच वापरून, इतर सर्व वर्गांसाठी {\mukta polyglossia} हा आज्ञासंच वापरला आहे. त्यामुळे सर्व लाटेक्-वर्गांमध्ये भाषांतरेही मिळतात व {\mukta standalone} वर्गातदेखील आज्ञासंचामुळे कोणतीही अडचण येत नाही. पुढील आज्ञांनी हे साधले आहे.
% \begin{macrocode}
\@ifclassloaded{standalone}{\RequirePackage{fontspec}}{
\RequirePackage{polyglossia}
\setdefaultlanguage{marathi}
}
% \end{macrocode}
-% \section{लुआ-लाटेक्}
+% \subsection{लुआ-लाटेक्}
% लुआ-लाटेक् हा अत्याधुनिक चालक आता देवनागरीसाठी उपलब्ध झाला आहे. हर्फ़बझ ह्या लुआविशिष्ट आज्ञावलीच्या मदतीने देवनागरी व्यवस्थित दाखवली जात आहे. अशा वेळी तिचा पुरेपुर उपयोग का करू नये? परंतु वापर करताना सर्व अडचणी सुटायला हव्यात. लुआ-लाटेक् अजूनही अरबी आकड्यांऐवजी देवनागरी आकडे देत नाही. त्याकरिता पुढीलप्रकारे नवीन आज्ञा पुरवल्या आहेत.
% \begin{macrocode}
\RequirePackage{devanagaridigits}
\def\@arabic#1{\expandafter\devanagaridigits\expandafter{\number#1}}
% \end{macrocode}
% अशा प्रकारे आकडे बदलल्याचा एक फायदा असा की जिथे अरबी आकडे लिहायचे आहेत तिथे तेदेखील लिहिता येतात. झी-लाटेक् व {\mukta Mapping=devanagarinumerals} वापरल्यामुळे अरबी आकडे वापरण्यासाठी नवा टंक वापरावा लागतो.
-% \section{टंकनिवड}
-% शोभिका हा लाटेक्-वितरणासह येणारा व देवनागरीची अतिशय चांगली टंकजुळणी करणारा टंक आहे. तो मूलटंक म्हणून ह्या आज्ञासंचाद्वारे निवडला जातो. अर्थात तो बदलण्याच्या सुविधेसकट. शिवाय कुठल्याही देवनागरी टंकाचे योग्य फलित दिसण्यासाठी {\mukta Script=Devanagari} हे प्राचल वापरावे लागते. ह्या व अशा इतर काही प्राचलांसकट शोभिकाची निवड करून ठेवणे व त्याशिवाय \mintinline{latex}{\टंक} ह्या आज्ञेद्वारे निवडल्या जाणाऱ्या टंकासदेखील तीच प्राचले वापरणे हे पुढील आज्ञांनी साधले जाते.
+% \subsection{टंकनिवड}
+% शोभिका हा लाटेक्-वितरणासह येणारा व देवनागरीची अतिशय चांगली अक्षरजुळणी करणारा टंक आहे. तो मूलटंक म्हणून ह्या आज्ञासंचाद्वारे निवडला जातो. अर्थात तो बदलण्याच्या सुविधेसकट. शिवाय कुठल्याही देवनागरी टंकाचे योग्य फलित दिसण्यासाठी {\mukta Script=Devanagari} हे प्राचल वापरावे लागते. ह्या व अशा इतर काही प्राचलांसकट शोभिकाची निवड करून ठेवणे व त्याशिवाय \mintinline{latex}{\टंक} ह्या आज्ञेद्वारे निवडल्या जाणाऱ्या टंकासदेखील तीच प्राचले वापरणे हे पुढील आज्ञांनी साधले जाते.
% \begin{macrocode}
\setmainfont[Renderer=Harfbuzz,Script=Devanagari,Mapping=devanagarinumerals]{Shobhika}
-\newcommand{\टंक}[1]
+\providecommand{\टंक}[1]
{\setmainfont[Renderer=Harfbuzz,Script=Devanagari,Mapping=devanagarinumerals]{#1}}
% \end{macrocode}
% ह्या आज्ञांमुळे धारिका लुआ अथवा झी-लाटेक् ह्यांपैकी कोणत्याही चालकासह चालवता येते. {\mukta Renderer=Harfbuzz} हे प्राचल लुआविशिष्ट आहे. त्यामुळे झी-लाटेक् वापरल्यास ह्या प्राचलाकडे दुर्लक्ष केले जात आहे अशी एक सूचना आपल्याला मिळते. ही अडचण नसून केवळ एक सूचना आहे. झी-लाटेक्-प्रमाणेच आपणही तिच्याकडे दुर्लक्ष करावे!
-% \section{नमुना मजकूर}
-% मागे म्हटल्याप्रमाणे नमुना मजकूर तयार करण्यासाठी ह्या आज्ञासंचाचा वापर करता येतो, परंतु त्याकरिता लाटेक्-ला थोडी माहिती पुरवावी लागते. ही माहिती पुरवण्याचे विशिष्ट स्थान आहे. लाटेक्-मध्ये मूळ दस्तऐवज सुरू होण्यापूर्वी ही माहिती पुरविण्याकरिता \gls{आज्ञापीठ} असते. ह्या आज्ञासंचातर्फे पुरवल्या जाणाऱ्या नमुना मजकुराची माहिती पुढील आज्ञांनी पुरवली जाते. (तुमच्या दस्तऐवजात मराठी आज्ञासंचानंतर ती माहिती बदललीत तर आज्ञासंचातील माहिती आपोआप विसरली जाते.) letter ह्या लाटेक्-वर्गाकरिता लागणारी माहिती इतर वर्गांकरिता अप्रासंगिक असल्याने ती वेगळी पुरवली आहे.
+% \subsection{नमुना मजकूर}
+% \subsubsection{परिच्छेद}
+% परिच्छेद ही आज्ञा दस्तऐवजात कुठेही वापरली तरी एक लहानसा परिच्छेद आपोआप छापला जातो. त्याकरिता एक साहाय्यक धारिका आज्ञासंचासोबत येते. ती आज्ञासंचात पुढील आज्ञांनी समाविष्ट करून घेतली आहे.
% \begin{macrocode}
-\title{नमुना}
-\author{लेखक}
-\@ifclassloaded{letter}{
- \name{लेखक}
- \signature{सही}
- \address{
- लेखकाचे नाव\\
- अबक मार्ग\\
- मुंबई\\
- पिन क्र. ४०००००}
- \location{लेखकाचे स्थान}
- \telephone{दूरध्वनी - ०२० २२९५ २१०८}
-}
+\providecommand{\परिच्छेद}{\input{para}}
% \end{macrocode}
-% निरनिराळ्या लाटेक्-वर्गांसाठी स्वतंत्र \gls{धारिका} पुढीलप्रमाणे पुरवल्या आहेत.
-% \begin{macrocode}
-\providecommand{\mrarticle}{\input{article}}
-\providecommand{\mrbook}{\input{book}}
-\providecommand{\mrreport}{\input{report}}
-\providecommand{\mrbeamer}{\input{beamer}}
-\providecommand{\mrletter}{\input{letter}}
-% \end{macrocode}
-% निवडलेल्या लाटेक्-वर्गांप्रमाणे धारिका निवडण्यासाठीच्या आज्ञा पुढीलप्रमाणे.
+% \subsubsection{दस्तऐवज}
+% मागे म्हटल्याप्रमाणे नमुना मजकूर तयार करण्यासाठी ह्या आज्ञासंचाचा वापर करता येतो, परंतु त्याकरिता लाटेक्-ला थोडी माहिती पुरवावी लागते. उदा. दस्तऐवजाचा/ची लेखक/लेखिका, दस्तऐवजाचं शीर्षक इत्यादी. ही माहिती पुरवण्याचे विशिष्ट स्थान आहे. लाटेक्-मध्ये मूळ दस्तऐवज सुरू होण्यापूर्वी ही माहिती पुरविण्याकरिता \gls{आज्ञापीठ} असते, तिथे ही माहिती पुरवली जाते, परंतु ह्यामुळे फलित-धारिकेच्या \gls{पायाभूत माहिती}त ती नावे दिसू लागतात. ह्यासाठी आज्ञासंचात ही माहिती पुरवली गेली नाही आहे, ह्याउलट सोबत जोडलेल्या वेगवेगळ्या दस्तऐवजांमध्ये ती माहिती पुरवली गेली आहे. त्या धारिका केवळ नमुना मजकूर पुरवण्यासाठी आहेत. निरनिराळ्या लाटेक्-वर्गांसाठी संबंधित धारिका निवडणे व दस्तऐवजात लिहिलेला लाटेक्-वर्ग कोणता आहे हे पाहून त्यानुसार नमुना मजकूर छापणे ह्यासाठीच्या आज्ञा पुढीलप्रमाणे.
+
% \begin{macrocode}
\newcounter{क्र}
\@ifclassloaded{article}{\setcounter{क्र}{1}}{}
@@ -225,14 +244,14 @@ License: The LaTeX Project Public License v1.3c or later.
\@ifclassloaded{beamer}{\setcounter{क्र}{4}}{}
\@ifclassloaded{letter}{\setcounter{क्र}{5}}{}
\providecommand{\नमुना}{
- \ifnum\value{क्र}=1\mrarticle\else
- \ifnum\value{क्र}=2\mrbook\else
- \ifnum\value{क्र}=3\mrreport\else
- \ifnum\value{क्र}=4\mrbeamer\else
- \mrletter\relax\fi\fi\fi\fi
+ \ifnum\value{क्र}=1\input{article}\else
+ \ifnum\value{क्र}=2\input{book}\else
+ \ifnum\value{क्र}=3\input{report}\else
+ \ifnum\value{क्र}=4\input{beamer}\else
+ \input{letter}\relax\fi\fi\fi\fi
}
% \end{macrocode}
-% beamer लाटेक्-वर्ग वापरताना serif ही टंकछटा निवडावी लागते, त्याशिवाय देवनागरी लिपी दिसत नाही. त्या आज्ञा पुढीलप्रमाणे भरल्या आहेत.
+% {\mukta beamer} लाटेक्-वर्ग वापरताना {\mukta serif} ही टंकछटा निवडावी लागते, त्याशिवाय देवनागरी लिपी दिसत नाही. त्या आज्ञा पुढीलप्रमाणे भरल्या आहेत.
% \begin{macrocode}
\@ifclassloaded{beamer}{%
\usefonttheme{serif}}
diff --git a/language/marathi/marathi.ins b/language/marathi/marathi.ins
index 885841ad8b..47d1fa862d 100644
--- a/language/marathi/marathi.ins
+++ b/language/marathi/marathi.ins
@@ -9,7 +9,7 @@
-------------------------------------------------------------------------
आज्ञासंच: marathi
लेखक: निरंजन
-आवृत्ती: ०.१ (२३ मे, २०२०)
+आवृत्ती: १.१ (२७ मे, २०२०)
माहिती: लुआ-लाटेक् व झी-लाटेक् ह्यांच्यासह मराठीचा सुलभ वापर करण्यासाठी.
दुवा: https://gitlab.com/niranjanvikastambe/marathi
अडचणी: https://gitlab.com/niranjanvikastambe/marathi/-/issues
@@ -32,7 +32,7 @@ marathi.sty ही धारिका समाविष्ट आहे.
--------------------------------------------------------------------------
Package: marathi
Author: Niranjan
-Version: 1.0 (25 May, 2020)
+Version: 1.1 (27 May, 2020)
Description: For conveniently typesetting Marathi language with LuaLaTeX and XeLaTeX.
Repository: https://gitlab.com/niranjanvikastambe/marathi
Bug tracker: https://gitlab.com/niranjanvikastambe/marathi/-/issues
diff --git a/language/marathi/marathi.pdf b/language/marathi/marathi.pdf
index 870adc7226..6c0bf5973a 100644
--- a/language/marathi/marathi.pdf
+++ b/language/marathi/marathi.pdf
Binary files differ
diff --git a/language/marathi/para.tex b/language/marathi/para.tex
new file mode 100644
index 0000000000..de32f11bbc
--- /dev/null
+++ b/language/marathi/para.tex
@@ -0,0 +1 @@
+नमस्कार! हा मजकूर अर्थशून्य आहे. ह्या ठिकाणी काय व कसे छापले जाईल ह्याचा हा केवळ एक नमुना आहे. जर तुम्ही हे वाचले, तर तुम्हाला कोणतीच माहिती मिळणार नाही. खरेच? ह्यात कोणतीच माहिती नाही काय? ह्या मजकुरात व `पिढ्ढ करढपाखू' अशा निरर्थक शब्दांमध्ये काही फरक आहे का? हो! ह्याला आंधळा मजकूर असे म्हणतात. हा मजकूर तुम्हाला निवडलेला टंक कोणता आहे, अक्षरे कशी दिसतात ह्या सगळ्याबाबत माहिती देतो. ह्यासाठी विशिष्ट शब्दांची गरज नाही, परंतु शब्द वापरल्या गेलेल्या भाषेशी जुळायला हवेत. \par \ No newline at end of file
diff --git a/macros/latex-dev/base/README.md b/macros/latex-dev/base/README.md
index 95c699fdea..f2eb61eca3 100644
--- a/macros/latex-dev/base/README.md
+++ b/macros/latex-dev/base/README.md
@@ -1,7 +1,7 @@
The LaTeX kernel
================
-Release 2020-10-01 pre-release 5
+Release 2020-10-01 pre-release 6
Overview
--------
@@ -34,16 +34,12 @@ the most significant of these files are
- `README.md` is this file
- `manifest.txt` lists all the files in this LaTeX distribution,
with one line of information about the contents
-- `unpacked.txt` lists all the files in the unpacked LaTeX distribution
- `legal.txt` and `lppl.txt` (LaTeX Project Public License) describe the
LaTeX copyright, warranty and copying restrictions.
-- `patches.txt` describes the how important changes will be distributed
- between releases
- `texpert.txt` contains information about the system that may still be
useful for TeX experts
- `tex2.txt` contains important information for users of extremely
old versions of TeX (pre 1990)
-- `autoload.txt` describes a variant of LaTeX that is no longer supported
- `bugs.txt` describes how to submit a bug report for LaTeX
Other documentation files include files with names of the form:
diff --git a/macros/latex-dev/base/alltt.pdf b/macros/latex-dev/base/alltt.pdf
index 1e49f05ae1..033cb5ff35 100644
--- a/macros/latex-dev/base/alltt.pdf
+++ b/macros/latex-dev/base/alltt.pdf
Binary files differ
diff --git a/macros/latex-dev/base/bugs.txt b/macros/latex-dev/base/bugs.txt
index 1891476325..8fd071c8a7 100644
--- a/macros/latex-dev/base/bugs.txt
+++ b/macros/latex-dev/base/bugs.txt
@@ -1,6 +1,6 @@
LaTeX Error Reports
- January 2017
+ April 2020
ERROR REPORTS
@@ -15,7 +15,8 @@ Before you report an error, please check that:
distribution, e.g. in a .dtx file (in this case it is a feature :-).
* The error has not already been reported. If you have WWW
- access, you can search the LaTeX bugs database using this URL:
+ access, you can find out how to search the LaTeX bugs database
+ using this URL:
https://www.latex-project.org/bugs.html
@@ -52,7 +53,7 @@ core LaTeX software, please report it in the following way:
Submit the test and transcript files through the Web interface at:
- https://www.latex-project.org/bugs/bugs-upload.html
+ https://github.com/latex3/latex2e/issues
Please fill in all required fields; in particular, make sure
that your name, email address, and the summary description
@@ -84,4 +85,4 @@ given in that corresponding errata file.
Please *do not* send such reports to the latex-bugs address.
---- Copyright 1997,1998,2006,2008,2017 the LaTeX3 project. All rights reserved ---
+--- Copyright 1997,1998,2006,2008,2017,2020 the LaTeX3 project. All rights reserved ---
diff --git a/macros/latex-dev/base/cfgguide.pdf b/macros/latex-dev/base/cfgguide.pdf
index f5a3e68425..4c6572d7a3 100644
--- a/macros/latex-dev/base/cfgguide.pdf
+++ b/macros/latex-dev/base/cfgguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/changes.txt b/macros/latex-dev/base/changes.txt
index 96654ea52b..6c37210ae9 100644
--- a/macros/latex-dev/base/changes.txt
+++ b/macros/latex-dev/base/changes.txt
@@ -6,6 +6,141 @@ completeness or accuracy and it contains some references to files that
are not part of the distribution.
================================================================================
+2020-05-19 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltfssini.dtx (section{Custom series settings for main document families}):
+ Added \IfFontSeriesContextTF so that it is possible to reliably
+ detect the current font series context (gh/335)
+
+2020-05-15 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltdefns.dtx (subsection{Initex initialisations}):
+ Allow \par in the argument of \typeout and turn it into an empty line
+ if expanded, if not it remains \par (gh/335)
+
+2020-05-11 Marcel Krüger <Marcel.Krueger@latex-project.org>
+
+ * ltdefns.dtx:
+ Use primitive \- with LuaTeX
+
+2020-05-07 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+
+ * ltxref.dtx:
+ added \@currentcounter to \refstepcounter (gh/300)
+
+2020-05-06 Marcel Krüger <Marcel.Krueger@latex-project.org>
+
+ * ltspace.dtx:
+ Make Unicode softhyphen U+00AD active and defined as \-.
+
+2020-05-02 Johannes Braams <texniek at braams.xs4all.nl>
+
+ * ltexpl.dtx: Created aliases for two expl3 macros in order to use
+ them to remove leading and trailing spaces from filenames (gh/217)
+
+2020-05-02 Johannes Braams <texniek at braams.xs4all.nl>
+
+ * ltfiles.dtx: Modified \include and \includeony to support
+ filenames with spaces in them (gh/217)
+
+2020-04-29 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * lttextcomp.dtx (subsection{Sub-encoding 2}):
+ Make all captial accents text commands in Unicode engines for
+ hyperref (gh/332)}
+
+2020-04-22 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltmiscen.dtx (subsection{Verbatim}):
+ Drop spaces before \verb delimiter (gh/327)
+
+2020-04-22 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+
+ * ltoutenc.dtx (tuenc.def):
+ corrected unicode value of \=y from "0232 to "0233
+
+2020-04-22 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltspace.dtx (subsection{The code}):
+ Support calc syntax for \newline (gh/152)
+ Support calc syntax for \addvspace (gh/152)
+
+ * lttab.dtx (subsection{tabbing}):
+ Support calc syntax in tabbing (gh/152)
+
+ * ltpictur.dtx (section{Picture Mode}):
+ Support calc syntax in \shortstack (gh/152)
+
+ * ltmiscen.dtx (subsection{Center, Flushright, Flushleft}):
+ Support calc syntax for \\ (gh/152)
+
+ * ltmath.dtx (subsection{Math Environments}):
+ Support calc syntax for \\ (gh/152)
+
+2020-04-21 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltspace.dtx (subsection{Horizontal space (and breaks)}):
+ Support calc syntax with \hspace (gh/152)
+ (subsection{Vertical spacing}):
+ Support calc syntax with \vspace (gh/152)
+
+2020-04-13 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltfssini.dtx (subsection{Miscellaneous}):
+ Handling \seriesdefault changes in a better way (gh/315).
+
+2020-04-09 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltfloat.dtx (subsection{Footnotes}):
+ Set non-zero baselineskip inside \textsuperscript and \textsubscript
+ so that link boxes drawn by hyperref have a sensible height (gh/249)
+
+2020-04-07 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltclass.dtx (section{Implementation}):
+ Add \IfFormatAtLeastTF to test if the current format is equal or later than
+ the given date (gh/168)
+ Also add \IfClassAtLeastTF and \IfPackageAtLeastTF as a suggested
+ alternative to \@ifpackagelater and \@ifclasslater (which have a wrong
+ name, because it is really "later or equal") (gh/186)
+ Use different method to ignore unprocessed options (gh/22)
+
+
+2020-04-06 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltfssini.dtx (section{Custom series settings for main document families}):
+ Added hooks \@expandfontdefaultshook, \@setbfseriesdefaultshook and
+ \@setmdseriesdefaultshook to better support Japanese etc (gh/306)
+
+2020-03-19 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * fontdef.dtx (subsection{Defaults}):
+ Support legacy use of \bfdefault and \mddefault (gh/306)
+
+ * ltfssini.dtx (section{Custom series settings for main document families}):
+ Support legacy use of \bfdefault and \mddefault (gh/306)
+
+ * ltfssdcl.dtx (section{Interface Commands}):
+ Avoid generating an Ord math atom when loading a math alphabet using
+ the legacy interface ${\cal ...}$ (gnats/3357)
+
+2020-03-07 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltspace.dtx: Moved \cs{thinspace}, \cs{negthinspace} and \cs{,} to
+ ltmath.dtx (gh/303)
+
+ * ltmath.dtx (subsubsection{The UNSORTED Rest}):
+ Add \texttt{amsmath} math/text spacing commands to the kernel (gh/303)
+
+2020-03-08 Johannes Braams <texniek at braams.xs4all.nl>
+
+ * letter.dtx: merged changes to classes.dtx into letter.dtx
+
+2020-03-06 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * ltboxes.dtx (subsection{Some low-level constructs}):
+ Macro \clap added (from mathtools)
+
2020-03-05 Joseph Wright <joseph.wright@morningstar2.co.uk>
* ltexpl.dtx: Pre-load xparse where expl3 does not define \NewDocumentCommand
@@ -130,6 +265,11 @@ All changes above are only part of the development branch for the next release.
Use \@tabacckludge for tabbing where necessary if defining \capitalacute
and friends for Unicode engines (gh/271)
+2020-03-07 Marcel Krüger <Marcel.Krueger@latex-project.org>
+
+ * ltluatex.dtx: Fix remove_from_callback for mlist_to_hlist
+ and other engine callbacks hidden by user-defined ones
+
#########################
# 2020-02-02 PL 1 Release
#########################
@@ -10299,62 +10439,62 @@ All changes above are only part of the development branch for the next release.
1994-03-16 David Carlisle <latex-bugs@latex-project.org>
- * ltfiles.dtx v1.0c \document (DPC) directly add file list
+ * ltfiles.dtx: v1.0c \document (DPC) directly add file list
settings
- * ltclass.dtx 0.3f \listfiles Move this code directly into
+ * ltclass.dtx: 0.3f \listfiles Move this code directly into
\document
- * ltclass.dtx 0.3f "General" Add pkgindoc package
+ * ltclass.dtx: 0.3f "General" Add pkgindoc package
1994-03-15 David Carlisle <latex-bugs@latex-project.org>
- * ltdirchk.dtx 1.0c "General" Add \NeedsTeXFormat
+ * ltdirchk.dtx: 1.0c "General" Add \NeedsTeXFormat
- * ltclass.dtx 0.3e \@missingfileerror Quit on x or X just like
+ * ltclass.dtx: 0.3e \@missingfileerror Quit on x or X just like
a real error
- * fontcmds.dtx v3.2a "General" Removed defs of short-forms and
+ * fontcmds.dtx: v3.2a "General" Removed defs of short-forms and
all sizes except \normalize
- * fontcmds.dtx v3.2a "General" Removed \@renewfontswitch
+ * fontcmds.dtx: v3.2a "General" Removed \@renewfontswitch
- * fontcmds.dtx v3.2a "General" Changed \/ to \@@italiccorr
+ * fontcmds.dtx: v3.2a "General" Changed \/ to \@@italiccorr
- * fontcmds.dtx v3.2a "General" Adapted to mass formatting
+ * fontcmds.dtx: v3.2a "General" Adapted to mass formatting
1994-03-15 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
- * varioref.dtx (subsection{Options}):
+ * varioref.dtx: (subsection{Options}):
Text added for spanish default (Julio Sanchez).
Changed all \extra... to \extras... that was a bug
1994-03-14 David Carlisle <latex-bugs@latex-project.org>
- * ltherest.dtx v1.0c \end@float (DPC) Use \color@endgroup
+ * ltherest.dtx: v1.0c \end@float (DPC) Use \color@endgroup
- * ltherest.dtx v1.0c \@xfloat (DPC) Use \color@begingroup
+ * ltherest.dtx: v1.0c \@xfloat (DPC) Use \color@begingroup
- * ltherest.dtx v1.0c \@savemarbox (DPC) Use \color@begingroup
+ * ltherest.dtx: v1.0c \@savemarbox (DPC) Use \color@begingroup
- * ltherest.dtx v1.0c \@footnotetext (DPC) Use
+ * ltherest.dtx: v1.0c \@footnotetext (DPC) Use
\color@begingroup, add \endgraf
- * ltherest.dtx 1.0c \@xympar (DPC) Use \color@begingroup
+ * ltherest.dtx: 1.0c \@xympar (DPC) Use \color@begingroup
- * ltboxes.dtx 1.0b \sbox Use \color@begingroup
+ * ltboxes.dtx: 1.0b \sbox Use \color@begingroup
- * ltboxes.dtx 1.0b \lrbox Use \color@begingroup
+ * ltboxes.dtx: 1.0b \lrbox Use \color@begingroup
- * ltboxes.dtx 1.0b \color@endgroup macro added for colour
+ * ltboxes.dtx: 1.0b \color@endgroup macro added for colour
support
- * ltboxes.dtx 1.0b \color@begingroup macro added for colour
+ * ltboxes.dtx: 1.0b \color@begingroup macro added for colour
support
- * ltboxes.dtx 1.0b \@isavepicbox Use \color@begingroup
+ * ltboxes.dtx: 1.0b \@isavepicbox Use \color@begingroup
- * ltboxes.dtx 1.0b \@isavebox Use \color@begingroup
+ * ltboxes.dtx: 1.0b \@isavebox Use \color@begingroup
1994-03-14 Rainer Schoepf <latex-bugs@latex-project.org>
@@ -10364,21 +10504,21 @@ All changes above are only part of the development branch for the next release.
1994-03-14 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
- * classes.dtx (subsubsection{Margins}):
+ * classes.dtx: (subsubsection{Margins}):
Shortened calculation for margins.
1994-03-13 David Carlisle <latex-bugs@latex-project.org>
- * ltinit.dtx v1.0c \@tfor (DPC) Add \@tf@r so a single group is
+ * ltinit.dtx: v1.0c \@tfor (DPC) Add \@tf@r so a single group is
correctly treated.
- * ltfiles.dtx 0.3b \InputIfFileExists Use new cmd
+ * ltfiles.dtx: 0.3b \InputIfFileExists Use new cmd
\@addtofilelist
- * ltclass.dtx 0.3d \listfiles Reset \@addtofilelist at begin
+ * ltclass.dtx: 0.3d \listfiles Reset \@addtofilelist at begin
document
- * ltclass.dtx 0.3d \@addtofilelist Macro added
+ * ltclass.dtx: 0.3d \@addtofilelist Macro added
1994-03-13 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
@@ -10426,32 +10566,32 @@ All changes above are only part of the development branch for the next release.
1994-03-12 David Carlisle <latex-bugs@latex-project.org>
- * ltplain.dtx v1.0b "General" Name changed from lplain. The end
+ * ltplain.dtx: v1.0b "General" Name changed from lplain. The end
of an era
- * ltinit.dtx v1.0b \@yargdef Name changed from \XXX@Argdef
+ * ltinit.dtx: v1.0b \@yargdef Name changed from \XXX@Argdef
- * ltinit.dtx v1.0b \@reargdef New defn, in terms of \@yargdef
+ * ltinit.dtx: v1.0b \@reargdef New defn, in terms of \@yargdef
- * ltherest.dtx v0.1b \@xympar (DPC) Extra bgroup for colour
+ * ltherest.dtx: v0.1b \@xympar (DPC) Extra bgroup for colour
- * ltherest.dtx v0.1b \@savemarbox (DPC) Extra group for colour
+ * ltherest.dtx: v0.1b \@savemarbox (DPC) Extra group for colour
- * ltdirchk.dtx 1.0b "General" Minor edits to the typeouts in
+ * ltdirchk.dtx: 1.0b "General" Minor edits to the typeouts in
ltxcheck
- * ltdirchk.dtx 1.0b "General" Change name from dircheck.dtx
+ * ltdirchk.dtx: 1.0b "General" Change name from dircheck.dtx
- * ltclass.dtx 0.3c \ProvidesPackage use \@gtempa
+ * ltclass.dtx: 0.3c \ProvidesPackage use \@gtempa
- * ltclass.dtx 0.3c \ProvidesPackage Add \wlog
+ * ltclass.dtx: 0.3c \ProvidesPackage Add \wlog
- * ltclass.dtx 0.3c \ProvidesFile Add \wlog
+ * ltclass.dtx: 0.3c \ProvidesFile Add \wlog
- * ltclass.dtx 0.3c "General" Change name from docclass to
+ * ltclass.dtx: 0.3c "General" Change name from docclass to
ltclass
- * ltclass.dtx 0.3c \@fileswithoptions Do not use
+ * ltclass.dtx: 0.3c \@fileswithoptions Do not use
\@pr@videpackage to avoid typeout
1994-03-12 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
@@ -10500,12 +10640,12 @@ All changes above are only part of the development branch for the next release.
1994-03-08 David Carlisle <latex-bugs@latex-project.org>
- * ltplain.dtx v1.0a "General" Remove need for a driver file.
+ * ltplain.dtx: v1.0a "General" Remove need for a driver file.
- * ltdirchk.dtx 1.0a "General" Reorganise driver module into `new
+ * ltdirchk.dtx: 1.0a "General" Reorganise driver module into `new
style'
- * ltclass.dtx 0.3b "General" Modify driver code into `new style'
+ * ltclass.dtx: 0.3b "General" Modify driver code into `new style'
1994-03-08 Rainer Schoepf <latex-bugs@latex-project.org>
@@ -10634,60 +10774,60 @@ All changes above are only part of the development branch for the next release.
1994-03-07 David Carlisle <latex-bugs@latex-project.org>
- * lttab.dtx v1.0a "General" Long lines wrapped to 72 columns
+ * lttab.dtx: v1.0a "General" Long lines wrapped to 72 columns
- * ltpictur.dtx v0.1a "General" Long lines wrapped to 72 columns
+ * ltpictur.dtx: v0.1a "General" Long lines wrapped to 72 columns
- * ltpictur.dtx v0.1a "General" Initial version, split from
- latex.dtx
+ * ltpictur.dtx: v0.1a "General" Initial version, split from
+ latex.dtx:
- * ltlists.dtx v1.0a "General" Long lines wrapped to 72 columns
+ * ltlists.dtx: v1.0a "General" Long lines wrapped to 72 columns
- * ltinit.dtx v1.0a "General" (DPC) Removed input of nfsscode.ltx
+ * ltinit.dtx: v1.0a "General" (DPC) Removed input of nfsscode.ltx
- * ltinit.dtx v1.0a \@@italiccorr Macro added
+ * ltinit.dtx: v1.0a \@@italiccorr Macro added
- * ltinit.dtx v0.1a "General" Long lines wrapped to 72 columns
+ * ltinit.dtx: v0.1a "General" Long lines wrapped to 72 columns
- * ltinit.dtx v0.1a "General" Initial version, split from
- latex.dtx
+ * ltinit.dtx: v0.1a "General" Initial version, split from
+ latex.dtx:
- * ltherest.dtx v0.1a \end@float (DPC) Extra group for colour
+ * ltherest.dtx: v0.1a \end@float (DPC) Extra group for colour
- * ltherest.dtx v0.1a "General" Long lines wrapped to 72 columns
+ * ltherest.dtx: v0.1a "General" Long lines wrapped to 72 columns
- * ltherest.dtx v0.1a "General" Initial version, split from
- latex.dtx
+ * ltherest.dtx: v0.1a "General" Initial version, split from
+ latex.dtx:
- * ltherest.dtx v0.1a \@xfloat (DPC) Extra group for colour
+ * ltherest.dtx: v0.1a \@xfloat (DPC) Extra group for colour
- * ltherest.dtx v0.1a \@settodim (DPC) Extra group for colour
+ * ltherest.dtx: v0.1a \@settodim (DPC) Extra group for colour
- * ltherest.dtx v0.1a \@hangfrom (DPC)Extra groups for colour
+ * ltherest.dtx: v0.1a \@hangfrom (DPC)Extra groups for colour
- * ltherest.dtx v0.1a \@footnotetext (DPC) Extra group for colour
+ * ltherest.dtx: v0.1a \@footnotetext (DPC) Extra group for colour
- * ltfinal.dtx v0.1a "General" Remove oldcomments environment
+ * ltfinal.dtx: v0.1a "General" Remove oldcomments environment
- * ltfinal.dtx v0.1a "General" Initial version, split from
+ * ltfinal.dtx: v0.1a "General" Initial version, split from
latex.dtx
- * ltfinal.dtx 0.1a "General" use \InputIfFileExists not
+ * ltfinal.dtx: 0.1a "General" use \InputIfFileExists not
\IfFileExists
- * ltfinal.dtx 0.1a "General" move code here from lhyphen.dtx
+ * ltfinal.dtx: 0.1a "General" move code here from lhyphen.dtx
- * ltfinal.dtx 0.1a "General" Add code from the old dump.dtx
+ * ltfinal.dtx: 0.1a "General" Add code from the old dump.dtx
- * ltfiles.dtx v1.0a "General" Long lines wrapped to 72 columns
+ * ltfiles.dtx: v1.0a "General" Long lines wrapped to 72 columns
- * ltfiles.dtx v1.0a "General" Initial version, split from
+ * ltfiles.dtx: v1.0a "General" Initial version, split from
latex.dtx
- * ltboxes.dtx v1.0a "General" Unify format with other Kernel
+ * ltboxes.dtx: v1.0a "General" Unify format with other Kernel
files
- * ltboxes.dtx v0.1a \@mpfootnotetext (DPC) Extra group for
+ * ltboxes.dtx: v0.1a \@mpfootnotetext (DPC) Extra group for
colour
1994-03-07 Rainer Schoepf <latex-bugs@latex-project.org>
@@ -10713,13 +10853,13 @@ All changes above are only part of the development branch for the next release.
1994-03-04 David Carlisle <latex-bugs@latex-project.org>
- * ltvers.dtx v1.0a "General" Initial version, split from
+ * ltvers.dtx: v1.0a "General" Initial version, split from
latex.dtx
- * lttab.dtx v1.0a "General" Initial version, split from
+ * lttab.dtx: v1.0a "General" Initial version, split from
latex.dtx
- * ltlists.dtx v1.0a "General" Initial version, split from
+ * ltlists.dtx: v1.0a "General" Initial version, split from
latex.dtx
1994-03-04 Rainer Schoepf <latex-bugs@latex-project.org>
@@ -10730,7 +10870,7 @@ All changes above are only part of the development branch for the next release.
1994-03-03 David Carlisle <latex-bugs@latex-project.org>
- * ltboxes.dtx 0.1f \@irsbox Replaced a missing \else
+ * ltboxes.dtx: 0.1f \@irsbox Replaced a missing \else
1994-03-03 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
@@ -10742,11 +10882,11 @@ All changes above are only part of the development branch for the next release.
1994-03-02 David Carlisle <latex-bugs@latex-project.org>
- * ltclass.dtx 0.3a "General" Remove need for driver file
+ * ltclass.dtx: 0.3a "General" Remove need for driver file
- * ltboxes.dtx v0.1e "General" Remove need for drv file
+ * ltboxes.dtx: v0.1e "General" Remove need for drv file
- * ltboxes.dtx v0.1e "General" Add 2ekernel module
+ * ltboxes.dtx: v0.1e "General" Add 2ekernel module
1994-03-02 Rainer Schoepf <latex-bugs@latex-project.org>
@@ -10796,7 +10936,7 @@ All changes above are only part of the development branch for the next release.
option (reads fleqn.clo).
1994-03-01 David Carlisle <latex-bugs@latex-project.org>
- * ltdirchk.dtx 0.2k "General" Add unstripped module, so that
+ * ltdirchk.dtx: 0.2k "General" Add unstripped module, so that
dircheck.dtx may be used with initex
1994-03-01 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
@@ -10889,8 +11029,940 @@ All changes above are only part of the development branch for the next release.
1994-02-24 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+ * ltdirchk.dtx: 0.2j "General" \noboundaryis \relax not undef in
+ TeX2 (initialised in 2e format)
+
+ * ltdirchk.dtx: 0.2j "General" Remove need for drv file
+
* fam.dtx (subsection{Macros for loading fonts}):
Removed catcode settings from \try@load@fontshape and
\DeclareFontShape and placed them into a separate macro called
\nfss@catcodes so that it is easier to maintain special
requirements for packages that make certain characters active.
+
+1994-02-10 Alan Jeffrey <latex-bugs@latex-project.org>
+
+ * ltclass.dtx: 0.2z \@fileswithoptions Renamed \@compatibility to
+ \@documentclasshook. ASAJ.
+
+ * ltclass.dtx: 0.2z \@documentclasshook Changed the name from
+ \@compatibility to \@documentclasshook, and added the check
+ for whether \@normalsize has been defined. ASAJ.
+
+1994-02-07 Alan Jeffrey <latex-bugs@latex-project.org>
+
+ * ltclass.dtx: 0.2y \ProcessOptions* Add extra ,s so `two' is not
+ matched with `twocolumn'
+
+ * ltclass.dtx: 0.2y \ProcessOptions* Add extra ,s so `two' is not
+ matched with `twocolumn'
+
+ * ltclass.dtx: 0.2y \@ifclasswith Add extra ,s so `two' is not
+ matched with `twocolumn'
+
+ * ltclass.dtx: 0.2y \@fileswithoptions Run \@compatibility on the
+ first class to start (not the first to finish)
+
+1994-02-03 N.N. <latex-bugs@latex-project.org>
+
+ * ltinit.dtx: LaTeX2e "General" correct mistakes in the
+ documentation
+
+1994-02-02 N.N. <latex-bugs@latex-project.org>
+
+ * ltclass.dtx: 0.2x \@fileswithoptions Only run the hook and
+ options check if the file was loaded.
+
+1994-02-01 David Carlisle <latex-bugs@latex-project.org>
+
+ * ltherest.dtx: LaTeX2e \thispagestyle (DPC) Modify to get nicer
+ error message
+
+ * ltherest.dtx: LaTeX2e \pagestyle (DPC) Modify to get nicer
+ error message
+
+1994-01-31 N.N. <latex-bugs@latex-project.org>
+
+ * ltinit.dtx: LaTeX2e "General" use \@normalsize instead of
+ \normalsizeinternally
+
+ * ltfiles.dtx: v0.9t \document set `@normalsize or `normalsize if
+ necessary
+
+ * ltclass.dtx: 0.2w \g@addto@macro Use toks register to avoid
+ `hash' problems
+
+ * fontcmds.dtx: v3.1b "General" `@normalsize no longer defined
+
+1994-01-29 N.N. <latex-bugs@latex-project.org>
+
+ * ltclass.dtx: 0.2v \@fileswithoptions All options raise error if
+ no \ProcessOptions\ appears
+
+ * ltclass.dtx: 0.2v \@@unprocessedoptions Macro added.
+
+1994-01-28 N.N. <latex-bugs@latex-project.org>
+
+ * ltinit.dtx: LaTeX2e "General" Let \fmtversion point to current
+ file date.
+
+1994-01-27 N.N. <latex-bugs@latex-project.org>
+
+ * fontcmds.dtx: v3.1a \nocorrlist Only ., used as default for cm
+ fonts
+
+1994-01-25 David Carlisle <latex-bugs@latex-project.org>
+
+ * ltplain.dtx: LaTeX2e \bordermatrix Removed \p@renwd.
+
+ * ltdirchk.dtx: 0.2i "General" Protect against looping on
+ \@@input and \@@end
+
+1994-01-24 David Carlisle <latex-bugs@latex-project.org>
+
+ * ltherest.dtx: LaTeX2e \pagestyle (DPC) Complain if pagestyle is
+ undefined.
+
+ * ltdirchk.dtx: 0.2h \IfFileExists Stop testing once texsys.aux
+ has been found
+
+1994-01-21 David Carlisle <latex-bugs@latex-project.org>
+
+ * ltmiscen.dtx: v0.9s \verbatim@font Removed unnecessary category
+ code hackery.
+
+ * ltherest.dtx: LaTeX2e \@xfloat Added missing percent
+ characters.
+
+ * ltdirchk.dtx: 0.2g \today Name changeed from \stamp, to save
+ memory
+
+ * ltdirchk.dtx: 0.2g \filename@parse Minor changes, and add Mac
+ version (:)
+
+ * ltdirchk.dtx: 0.2g "General" Improve documentation, reorganise
+ docstrip module
+
+ * ltclass.dtx: 0.2u \documentstyle compatibility file now
+ latex209.def.
+
+1994-01-20 David Carlisle <latex-bugs@latex-project.org>
+
+ * ltdirchk.dtx: 0.2f \IfFileExists \@copytexsys removed
+
+ * ltdirchk.dtx: 0.2f "General" \@copytexsys and the texsys.new
+ file removed
+
+ * ltdirchk.dtx: 0.2f "General" Modify all of ltxcheck
+
+1994-01-19 David Carlisle <latex-bugs@latex-project.org>
+
+ * ltdirchk.dtx: 0.2e \strip@prefix name changed from
+ \strip@meaning, to match NFSS
+
+ * ltdirchk.dtx: 0.2e \input@path No longer check that an empty
+ group is in the path
+
+ * ltdirchk.dtx: 0.2e \IfFileExists name changed from \test
+
+1994-01-18 N.N. <latex-bugs@latex-project.org>
+
+ * ltmiscen.dtx: v0.9p \@verbatim Only add \penaltyif in hmode
+
+ * ltherest.dtx: LaTeX2e \bibliography Use \@input@ so include
+ files are listed.
+
+ * ltfiles.dtx: v0.9p \include Use \@input@ so include files are
+ listed.
+
+ * ltfiles.dtx: v0.9p \InputIfFileExists New Definition
+
+ * ltfiles.dtx: v0.9p \IfFileExists New Definition
+
+ * ltfiles.dtx: v0.9p \@input@ Macro added
+
+ * ltfiles.dtx: v0.9p \@input do not use a different definition
+ for \input@path
+
+ * ltfiles.dtx: v0.9p \@iffileonpath Macro added
+
+ * ltfiles.dtx: v0.9p \@break@loop Macro added
+
+ * ltclass.dtx: 0.2t \@ifclassloaded Fix typo \@pkgetension
+
+1994-01-17 N.N. <latex-bugs@latex-project.org>
+
+ * ltclass.dtx: 0.2s \listfiles New Version, adds `.tex' if
+ needed, and lines up columns
+
+ * ltclass.dtx: 0.2s "General" Wrapped long lines to column 72
+
+ * ltclass.dtx: 0.2s "General" Added many more \@onlypreamble
+ commands
+
+ * ltclass.dtx: 0.2s \@fileswithoptions Modify to reduce parameter
+ stack usage
+
+ * ltclass.dtx: 0.2s \@fileswithoptions Modify to reduce parameter
+ stack usage
+
+1994-01-15 N.N. <latex-bugs@latex-project.org>
+
+ * ltfiles.dtx: v0.9o \document move `@preamblecmds after document
+ hook
+
+1994-01-14 David Carlisle <latex-bugs@latex-project.org>
+
+ * ltdirchk.dtx: 0.2d \IfFileExists Close the texsys.aux output
+ stream
+
+1993-12-20 N.N. <latex-bugs@latex-project.org>
+
+ * ltinit.dtx: LaTeX2e \@reargdef Kept old version of \@reargdef,
+ for array.sty
+
+ * ltfiles.dtx: 0.9m \@obsoletefile Added this command, removed
+ @oldfilewarning
+
+1993-12-19 Alan Jeffrey <latex-bugs@latex-project.org>
+
+ * ltinit.dtx: LaTeX2e \@esphack There seem to be problems with
+ selfmade birthday presents
+
+ * ltclass.dtx: 0.2r \endfilecontents Different message when
+ ignoring a file
+
+ * fontcmds.dtx: v3.0b "General" Untidying added, so this is now a
+ TEMPORARY version.
+
+ * fontcmds.dtx: v3.0b "General" Some more tidying done.
+
+ * fontcmds.dtx: v3.0b "General" Other tidying
+
+ * fontcmds.dtx: v3.0b "General" @pdef comand added
+
+ * fontcmds.dtx: v3.0b \@protecteddef Command added
+
+ * fontcmds.dtx: v3.0b \@newtextcmd Corrected and tidied
+
+ * fontcmds.dtx: v3.0b \@newfontswitch Corrected and tidied
+
+ * fontcmds.dtx: 3.0b "General" Wording changes by CAR.
+
+ * fontcmds.dtx: 3.0b "General" Made \@newfontswitch produce an
+ error if the command already exists, and added
+ \@renewfontswitch. ASAJ.
+
+ * fontcmds.dtx: 3.0b "General" Added by ASAJ.
+
+1993-12-17 N.N. <latex-bugs@latex-project.org>
+
+ * ltoutput.dtx: v1.0j \@tracemessage tracefloatvals made a
+ document command
+
+ * ltoutput.dtx: v1.0j \@topnewpage check for vsize too small
+ added
+
+ * ltoutput.dtx: v1.0j \@startpagehook Hook removed
+
+ * ltoutput.dtx: v1.0j \@opcol Hook removed
+
+ * ltoutput.dtx: 1.0j \@topnewpage Page room test added
+
+ * ltoutput.dtx: 1.0j \@specialoutput Page room test added
+
+ * ltoutput.dtx: 1.0j \@addtocurcol Extra space test added
+
+ * ltherest.dtx: LaTeX2e \mark Removed init \mark at begin
+ document, since it doesn't work.
+
+ * ltclass.dtx: 0.2q \documentstyle Match Alan's new code.
+
+ * ltclass.dtx: 0.2q \@fileswithoptions Add \ompatibility hook
+
+ * ltclass.dtx: 0.2q \@documentclasshook Macro added
+
+ * ltmiscen.dtx: v0.9i \literal Macro added
+
+1993-12-16 N.N. <latex-bugs@latex-project.org>
+
+ * ltinit.dtx: LaTeX2e \LaTeXe Extended logo by DPC
+
+ * ltinit.dtx: LaTeX2e \@esphack Corrected optimisation :-)
+
+ * ltherest.dtx: LaTeX2e \mark Init \mark at begin document
+
+1993-12-15 N.N. <latex-bugs@latex-project.org>
+
+ * ltclass.dtx: 0.2p "General" Removed extra \.'s from \@@warnings
+
+ * ltboxes.dtx: 0.1d \parbox Changed default from `c' to `s'
+
+ * ltboxes.dtx: 0.1d \minipage extra space removed.
+
+ * ltboxes.dtx: 0.1d \minipage Changed default from `c' to `s'
+
+ * ltboxes.dtx: 0.1d \@iparbox Changed default from `c' to `s'
+
+ * ltboxes.dtx: 0.1d \@iminipage Changed default from `c' to `s'
+
+1993-12-14 N.N. <latex-bugs@latex-project.org>
+
+ * ltoutput.dtx: v1.0i "General" Section added to declare all
+ parameters
+
+1993-12-13 David Carlisle <latex-bugs@latex-project.org>
+
+ * ltlists.dtx: LaTeX2e Initialised \@itemlabel
+
+ * ltmiscen.dtx: v0.9h \@verbatim Removed optional argument of
+ \item
+
+ * ltmiscen.dtx: v0.9h \@verbatim Readded \@noligs
+
+ * ltmiscen.dtx: v0.9h \@noligs Readded \@noligs
+
+ * ltdirchk.dtx: 0.2a \strip@prefix modified, name changed from
+ \stripmeaning
+
+ * ltdirchk.dtx: 0.2a \IfFileExists Removed interactive prompting
+ for current directory syntax
+
+ * ltdirchk.dtx: 0.2a "General" on the `docstrip' pass, do not
+ check openin path
+
+ * ltclass.dtx: 0.2o \usepackage Fixed error handling
+
+ * ltclass.dtx: 0.2o \documentstyle compatibility file now
+ latex209.sty.
+
+ * ltclass.dtx: 0.2o "General" Removed setting \errcontextlines\
+ (now in latex.tex)
+
+1993-12-12 N.N. <latex-bugs@latex-project.org>
+
+ * ltoutput.dtx: v1.0h \@tracemessage Commands changed
+
+ * ltoutput.dtx: v1.0h \@testfp defs changed to lets
+
+ * ltoutput.dtx: v1.0h \@startdblcolumn defs changed to lets
+
+ * ltoutput.dtx: v1.0h \@startcolumn defs changed to lets
+
+ * ltoutput.dtx: v1.0h \@resethfps Warnings added: minimal
+
+ * ltoutput.dtx: v1.0h \@makecol defs changed to lets
+
+ * ltoutput.dtx: v1.0h \@doclearpage defs changed to lets
+
+ * ltoutput.dtx: v1.0h \@doclearpage defs changed to lets
+
+ * ltoutput.dtx: v1.0h \@doclearpage defs changed to lets
+
+ * ltoutput.dtx: v1.0h \@cflt name changed
+
+ * ltoutput.dtx: v1.0h \@ccflb defs changed to lets
+
+ * ltoutput.dtx: v1.0h \@ccflb boxmaxdepth setting moved
+
+1993-12-11 N.N. <latex-bugs@latex-project.org>
+
+ * ltmiscen.dtx: v0.9g \ref Macro reimplemented
+
+ * ltmiscen.dtx: v0.9g \pageref Macro reimplemented
+
+ * ltmiscen.dtx: v0.9g \frac Added group around first arg
+
+ * ltmiscen.dtx: v0.9g \@setref Macro added
+
+ * ltherest.dtx: LaTeX2e \@title Added default
+
+ * ltherest.dtx: LaTeX2e \@author Added default
+
+ * fontcmds.dtx: v3.0a \textup Macros changed
+
+ * fontcmds.dtx: v3.0a \sw@slant Macro changed
+
+ * fontcmds.dtx: v3.0a \maybe@ic@ Macro and name changed
+
+ * fontcmds.dtx: v3.0a \maybe@ic Macro name changed
+
+ * fontcmds.dtx: v3.0a \fix@penalty Macro added
+
+ * fontcmds.dtx: v3.0a \emph Macro changed
+
+ * fontcmds.dtx: v3.0a "General" newfontswitch command corrected
+ and changed
+
+ * fontcmds.dtx: v3.0a "General" newcommands replaced by defs
+
+ * fontcmds.dtx: v3.0a "General" italic correction now put in
+ front of penalty before glue
+
+ * fontcmds.dtx: v3.0a "General" Complete reworking of all text
+ commands, using just one creator function
+
+ * fontcmds.dtx: v3.0a \@newtextcmd Macro changed
+
+1993-12-09 N.N. <latex-bugs@latex-project.org>
+
+ * ltmiscen.dtx: v0.9e \enddocument Hook added
+
+ * ltfiles.dtx: v0.9e \document Hook added
+
+ * ltclass.dtx: 0.2n \documentstyle input 209 compatibility file.
+
+ * ltboxes.dtx: 0.1c \@irsbox fix another typo
+
+1993-12-08 N.N. <latex-bugs@latex-project.org>
+
+ * ltlists.dtx: LaTeX2e \@item use \sboxto support colour
+
+ * ltinit.dtx: LaTeX2e \@vbsphack Command added
+
+ * ltinit.dtx: LaTeX2e \@esphack Command reimplemented
+
+ * ltinit.dtx: LaTeX2e \@bsphack Command reimplemented; late
+ birthday present for Chris
+
+ * ltboxes.dtx: 0.1b \lrbox move \@endpefalse out of the inner
+ group
+
+ * ltboxes.dtx: 0.1b \@irsbox fix typo
+
+ * ltboxes.dtx: 0.1b \@iiiparbox \endgraf added due to extra group
+ in \@begin@tempboxa
+
+ * ltboxes.dtx: 0.1b \@begin@tempboxa Extra braces for color
+ support (braces removed from other macros)
+
+ * fontcmds.dtx: 2.1b "General" Macros \rm, \bf and \sf moved to
+ classes.dtx:
+
+1993-12-07 N.N. <latex-bugs@latex-project.org>
+
+ * ltclass.dtx: 0.2m \@fileswithoptions Reset \CurrentOption
+
+ * ltclass.dtx: 0.2l \ProvidesFile Macro added
+
+1993-12-06 N.N. <latex-bugs@latex-project.org>
+
+ * ltoutput.dtx: v1.0g \@topnewpage \@floatplacement placement bug
+ fixed
+
+ * ltoutput.dtx: v1.0f \@specialoutput Unboxing of 255 added to
+ rescue writes
+
+ * ltclass.dtx: 0.2k \ExecuteOptions Preserve \CurrentOption
+
+1993-12-05 N.N. <latex-bugs@latex-project.org>
+
+ * ltoutput.dtx: v1.0f \output Command changed
+
+ * ltoutput.dtx: v1.0f @\getfpsbit Command added
+
+ * ltoutput.dtx: v1.0f @\boxfpsbit Command added
+
+ * ltoutput.dtx: v1.0f \@topnewpage Commands changed
+
+ * ltoutput.dtx: v1.0f \@textfloatsheight Commands added
+
+ * ltoutput.dtx: v1.0f \@testfp Command changed
+
+ * ltoutput.dtx: v1.0f \@testfp Command added
+
+ * ltoutput.dtx: v1.0f \@startpagehook Hook added
+
+ * ltoutput.dtx: v1.0f \@startdblcolumn Command changed
+
+ * ltoutput.dtx: v1.0f \@startcolumn Command changed
+
+ * ltoutput.dtx: v1.0f \@shipoutsetup Command added
+
+ * ltoutput.dtx: v1.0f \@setfpsbit Command added
+
+ * ltoutput.dtx: v1.0f \@setfloattypecounts Command added
+
+ * ltoutput.dtx: v1.0f \@resethfps Command added
+
+ * ltoutput.dtx: v1.0f \@outputpage Command changed
+
+ * ltoutput.dtx: v1.0f \@opcol Hook added
+
+ * ltoutput.dtx: v1.0f \@opcol Command changed
+
+ * ltoutput.dtx: v1.0f \@fpsadddefault Command added
+
+ * ltoutput.dtx: v1.0f \@flupdates Command added
+
+ * ltoutput.dtx: v1.0f \@flstop Commands added
+
+ * ltoutput.dtx: v1.0f \@flsettextmin Command added
+
+ * ltoutput.dtx: v1.0f \@flsetnum Command added
+
+ * ltoutput.dtx: v1.0f \@flcheckspace Command added
+
+ * ltoutput.dtx: v1.0f \@addtotoporbot Command changed
+
+ * ltoutput.dtx: v1.0f \@addtonextcol Command changed
+
+ * ltoutput.dtx: v1.0f \@addtodblcol Command changed
+
+ * ltoutput.dtx: v1.0f \@addtocurcol Command changed
+
+ * ltoutput.dtx: v1.0f \@addtobot Command changed
+
+ * ltherest.dtx: LaTeX2e \@xfloat Command changed
+
+ * ltherest.dtx: LaTeX2e \@dblfloatplacement Command changed
+
+1993-12-04 N.N. <latex-bugs@latex-project.org>
+
+ * ltfiles.dtx: v0.9b \input Macro reimplemented
+
+ * ltfiles.dtx: v0.9b \InputIfFileExists Macro added
+
+ * ltfiles.dtx: v0.9b \IfFileExists Macro added
+
+ * ltfiles.dtx: v0.9b \@input Macro reimplemented
+
+ * ltfiles.dtx: v0.9b \@iinput Macro reimplemented
+
+1993-12-03 N.N. <latex-bugs@latex-project.org>
+
+ * ltinit.dtx: v0.9b \@latexerr Set \c@errorcontextlines to -1
+
+ * ltclass.dtx: 0.2i "General" \@onlypreamble: Many commands
+ declared.
+
+ * ltclass.dtx: 0.2i "General" Removed obsolete \@documentclass
+
+ * ltclass.dtx: 0.2i \@cls@pkg Name changed to avoid clash with
+ output routine.
+
+ * ltboxes.dtx: 0.1a \set@color macro added
+
+ * ltboxes.dtx: 0.1a \set@color color support
+
+ * ltboxes.dtx: 0.1a \sbox extra group
+
+ * ltboxes.dtx: 0.1a \sbox color support
+
+ * ltboxes.dtx: 0.1a \raisebox redefined to support \height
+
+ * ltboxes.dtx: 0.1a \parbox Redefined to support extra optional
+ arguments
+
+ * ltboxes.dtx: 0.1a \newsavebox Pass the whole of arg 1 to
+ \@ifdefinable
+
+ * ltboxes.dtx: 0.1a \minipage Redefined to support extra optional
+ arguments
+
+ * ltboxes.dtx: 0.1a \mbox extra group
+
+ * ltboxes.dtx: 0.1a \makebox modified
+
+ * ltboxes.dtx: 0.1a \lrbox macro added
+
+ * ltboxes.dtx: 0.1a \lrbox color support
+
+ * ltboxes.dtx: 0.1a \fbox extra group
+
+ * ltboxes.dtx: 0.1a \endlrbox macro added
+
+ * ltboxes.dtx: 0.1a \bm@b macros added
+
+ * ltboxes.dtx: 0.1a \@savebox default c not x
+
+ * ltboxes.dtx: 0.1a \@makepicbox macro modified
+
+ * ltboxes.dtx: 0.1a \@makebox default changed from x to c
+
+ * ltboxes.dtx: 0.1a \@isavepicbox extra group
+
+ * ltboxes.dtx: 0.1a \@isavebox extra group
+
+ * ltboxes.dtx: 0.1a \@isavebox color support
+
+ * ltboxes.dtx: 0.1a \@irsbox redefined to support \height
+
+ * ltboxes.dtx: 0.1a \@imakebox macro modified
+
+ * ltboxes.dtx: 0.1a \@iirsbox redefined to support \height
+
+ * ltboxes.dtx: 0.1a \@end@tempboxa macro added
+
+ * ltboxes.dtx: 0.1a \@begin@tempboxa macro added
+
+ * ltboxes.dtx: 0.1a \@argrsbox macro removed
+
+1993-12-01 N.N. <latex-bugs@latex-project.org>
+
+ * ltoutput.dtx: v1.0e \@reinserts Command added
+
+1993-11-30 N.N. <latex-bugs@latex-project.org>
+
+ * ltoutput.dtx: v1.0c \@tracemessage Commands added
+
+ * ltmiscen.dtx: LaTeX2e \eqnarray initialised everycr to {}
+
+1993-11-29 N.N. <latex-bugs@latex-project.org>
+
+ * ltplain.dtx: ??? "General" All accents in decimals; suggested
+ by Paul Taylor
+
+ * ltoutput.dtx: v1.0b \@makespecialcolbox Command added
+
+ * ltoutput.dtx: v1.0b \@makecol \@makespecialcolbox added
+
+1993-11-28 N.N. <latex-bugs@latex-project.org>
+
+ * ltclass.dtx: 0.2h \endfilecontents Don't globally allocate a
+ write stream (always use 15)
+
+ * ltclass.dtx: 0.2h "General" Primitive filenames now terminated
+ by space not \relax.
+
+ * ltclass.dtx: 0.2h "General" Directory syntax checing moved to
+ dircheck.dtx:
+
+ * ltclass.dtx: 0.2h "General" Assorted commands now in the kernel
+ removed.
+
+ * ltclass.dtx: 0.2h \@twoclasseserror Macro added
+
+ * ltclass.dtx: 0.2h \@missingfileerror Use filename parser from
+ dircheck
+
+1993-11-24 N.N. <latex-bugs@latex-project.org>
+
+ * ltinit.dtx: LaTeX2e \P@LaTeX Macro changed
+
+ * fontcmds.dtx: v2.1a \test@next Macro added
+
+ * fontcmds.dtx: v2.1a \maybe@ic@ Use \test@next
+
+1993-11-23 N.N. <latex-bugs@latex-project.org>
+
+ * ltoutput.dtx: v0.1c \enlargethispage* Commands added
+
+ * ltoutput.dtx: v0.1c \@specialoutput Command changed
+
+ * ltoutput.dtx: v0.1c \@makecol Command changed
+
+ * ltoutput.dtx: v0.1c \@kludgeins Insert added
+
+ * ltoutput.dtx: v0.1c \@enlargepage Command added
+
+ * ltoutput.dtx: v0.1a \paperwidth Register added
+
+ * ltoutput.dtx: v0.1a \paperheight Register added
+
+ * ltinit.dtx: LaTeX2e \two@digits Macro added
+
+ * ltinit.dtx: LaTeX2e \renewenvironment Macro reimplemented and
+ extended
+
+ * ltinit.dtx: LaTeX2e \renewcommand Macro reimplemented and
+ extended
+
+ * ltinit.dtx: LaTeX2e \newcommand Macro reimplemented and
+ extended
+
+ * ltinit.dtx: LaTeX2e "General" replaced plus by \@plus if
+ appropriate
+
+ * ltinit.dtx: LaTeX2e \@yargdef Macro interface changed
+
+ * ltinit.dtx: LaTeX2e \@yargdef Avoid \@?@? token
+
+ * ltinit.dtx: LaTeX2e \@xargdef Macro interface changed
+
+ * ltinit.dtx: LaTeX2e \@xargdef Macro added
+
+ * ltinit.dtx: LaTeX2e \@newenv Macro interface changed
+
+ * ltinit.dtx: LaTeX2e \@newcommand Macro added
+
+ * ltinit.dtx: LaTeX2e \@ifundefined Redefined to remove a
+ trailing \fi
+
+ * ltclass.dtx: 0.2g "General" Warnings and errors now directly
+ coded.
+
+ * ltclass.dtx: 0.2g "General" Various macros now moved to
+ latex.tex.
+
+ * ltclass.dtx: 0.2g \@use@ption Name changed from \@executeoption
+
+1993-11-22 N.N. <latex-bugs@latex-project.org>
+
+ * ltinit.dtx: LaTeX2e \providecommand Macro added
+
+ * ltinit.dtx: LaTeX2e \c@errorcontextlines Macro added
+
+ * ltinit.dtx: LaTeX2e \LaTeXe Macro added
+
+ * ltinit.dtx: LaTeX2e \@plus Macro added
+
+ * ltinit.dtx: LaTeX2e \@minus Macro added
+
+ * ltinit.dtx: LaTeX2e \@checkcommand Macro added
+
+ * ltherest.dtx: LaTeX2e \settoheight Macro added
+
+ * ltherest.dtx: LaTeX2e \settodepth Macro added
+
+ * ltherest.dtx: LaTeX2e \@settopoint Macro added
+
+ * ltherest.dtx: LaTeX2e \@settodim Macro added
+
+ * ltclass.dtx: 0.2f \listfiles Removed checking for
+ \@unknownversion
+
+ * ltclass.dtx: 0.2f \@unknownversion Macro removed
+
+ * ltclass.dtx: 0.2f \@ifclasslater Added //00 so parsing never
+ produces a runaway argument.
+
+ * ltclass.dtx: 0.2f \@fileswithoptions Made the initial version
+ [] not [\@unknownversion]
+
+ * ltclass.dtx: 0.2f \@fileswithoptions Made the default [] not
+ [\@unknownversion]
+
+1993-11-21 N.N. <latex-bugs@latex-project.org>
+
+ * ltmiscen.dtx: v0.9a \verbatim@font Macro added
+
+ * ltmiscen.dtx: v0.9a \verb use \verbatim@font instead of \tt
+
+1993-11-21 N.N. <latex-bugs@latex-project.org>
+
+ * ltmiscen.dtx: v0.9a \@verbatim use \verbatim@font instead of
+ \tt
+
+ * ltinit.dtx: LaTeX2e "General" replaced \tt by \ttfamily if
+ appropriate
+
+ * ltinit.dtx: LaTeX2e "General" replaced \sf by \sffamily if
+ appropriate
+
+ * ltinit.dtx: LaTeX2e "General" replaced \sc by \scshape if
+ appropriate
+
+ * ltinit.dtx: LaTeX2e "General" replaced \rm by \rmfamily if
+ appropriate
+
+ * ltinit.dtx: LaTeX2e "General" replaced \it by \itshape if
+ appropriate
+
+ * ltinit.dtx: LaTeX2e "General" replaced \bf by \bfseries if
+ appropriate
+
+ * ltclass.dtx: 0.2e \@missingfileerror Stop infinite looping on
+ \@er@ext
+
+1993-11-18 N.N. <latex-bugs@latex-project.org>
+
+ * ltclass.dtx: 0.2d \documentstyle Modified \RequirePackage stuff.
+
+ * ltclass.dtx: 0.2d \NeedsTeXFormat \fmtname \fmtversion not
+ \@\pldots
+
+ * ltclass.dtx: 0.2d \ExecuteOptions Use \CurrentOption not \@tempa
+
+1993-11-17 N.N. <latex-bugs@latex-project.org>
+
+ * ltclass.dtx: 0.2c \ProcessOptions* restoring \@fileswith@pti@ns
+ added.
+
+ * ltclass.dtx: 0.2c \NeedsTeXFormat Name changed from
+ \NeedsFormat
+
+ * ltclass.dtx: 0.2c \DeclareOption* Error checking added
+
+ * ltclass.dtx: 0.2c \CurrentOption Name changed from \@curroption
+
+ * ltclass.dtx: 0.2c \@twoloadclasserror Macro added
+
+ * ltclass.dtx: 0.2c \@fileswithoptions Added trap for two
+ \LoadClass commands.
+
+ * ltclass.dtx: 0.2c \@badrequireerror Macro added
+
+ * ltclass.dtx: 0.2c \@@fileswith@pti@ns Macro added
+
+1993-11-15 N.N. <latex-bugs@latex-project.org>
+
+ * ltclass.dtx: 0.2b \documentstyle Modified to match
+ \ProcessOption*
+
+ * ltclass.dtx: 0.2b \ProcessOptions* Star form added.
+
+1993-11-14 N.N. <latex-bugs@latex-project.org>
+
+ * ltclass.dtx: 0.2a \g@addto@macro Made global
+
+ * ltclass.dtx: 0.2a \documentstyle Added \RequirePackage
+ \@unusedoptionlist stuff.
+
+ * ltclass.dtx: 0.2a \ProcessOptions* Stop adding the global
+ option list inside class files.
+
+ * ltclass.dtx: 0.2a \ProcessOptions* Optimise `empty option'
+ code.
+
+ * ltclass.dtx: 0.2a \NeedsTeXFormat made more robust for
+ alternative syntax for other formats.
+
+ * ltclass.dtx: 0.2a \AtEndDocument Included extension in the
+ generated macro name for package and class hooks.
+
+ * ltclass.dtx: 0.2a \@reset@ptions macro added
+
+ * ltclass.dtx: 0.2a \@fileswithoptions Moved reseting of
+ \default@ds, \ds@ and \@declaredoptions here, from the end of
+ \ProcessOptions.
+
+ * ltclass.dtx: 0.2a \@currext Name changed from \@currextension
+
+1993-11-03 Rainer Schoepf <latex-bugs@latex-project.org>
+
+ * ltpictur.dtx: LaTeX2.09 "General" (RmS) changed \halign to
+ \ialignto initialize \tabskip and \everycr
+
+1993-09-08 N.N. <latex-bugs@latex-project.org>
+
+ * ltmiscen.dtx: LaTeX2.09 \enddocument Added warning in case of
+ undefined references.
+
+1993-09-07 N.N. <latex-bugs@latex-project.org>
+
+ * ltmiscen.dtx: LaTeX2.09 Changed definition of \verb so that
+ it detects a missing second delimiter.
+
+1993-09-03 N.N. <latex-bugs@latex-project.org>
+
+ * ltmiscen.dtx: LaTeX2.09 \verbatim@nolig@list Replaced \@noligs
+ by extensible list
+
+1993-08-05 Rainer Schoepf <latex-bugs@latex-project.org>
+
+ * ltherest.dtx: LaTeX2.09 \@sect (RmS) Made sure that
+ \protectworks correctly in expansion of \the<counter>
+
+1993-08-03 N.N. <latex-bugs@latex-project.org>
+
+ * ltmiscen.dtx: LaTeX2.09 \enddocument Changed redefinition of
+ \global to redefinition of \@setckpt.
+
+1993-05-05 N.N. <latex-bugs@latex-project.org>
+
+ * fontcmds.dtx: v2.0b "General" Removed all LaTeX related cmds
+
+1992-11-26 Rainer Schoepf <latex-bugs@latex-project.org>
+
+ * ltherest.dtx: LaTeX2.09 \footnote (RmS) Changed all to
+ \def\protect{\noexpand\protect\noexpand}
+
+ * ltherest.dtx: LaTeX2.09 \@footnotetext (RmS) added protection
+ for \edef
+
+ * ltboxes.dtx: LaTeX2.09 \@mpfootnotetext (RmS) added protection
+ for \edef
+
+1992-08-25 Frank Mittelbach <latex-bugs@latex-project.org>
+
+ * ltherest.dtx: LaTeX2.09 \@sect (FMi) replaced explicit setting
+ of \@svsec by call to \@seccntformat
+
+1992-08-24 N.N. <latex-bugs@latex-project.org>
+
+ * ltmiscen.dtx: LaTeX2.09 \verb Changed \verband \@sverb to work
+ correctly in math mode
+
+ * ltinit.dtx: LaTeX2.09 \@ifnextchar Changed so first argument
+ can be `='.
+
+1992-08-19 Rainer Schoepf <latex-bugs@latex-project.org>
+
+ * ltherest.dtx: LaTeX2.09 \@othm (RmS) Changed error message to
+ complain about undefined counter
+
+1992-03-18 Rainer Schoepf <latex-bugs@latex-project.org>
+
+ * ltherest.dtx: LaTeX2.09 \end@float (RmS) changed \@esphack to
+ \@Esphack
+
+ * ltherest.dtx: LaTeX2.09 \@xympar (RmS) added
+ \global\@ignorefalse
+
+1992-01-10 Rainer Schoepf <latex-bugs@latex-project.org>
+
+ * ltherest.dtx: LaTeX2.09 \@othm (RmS) Check for existence of
+ theorem environment
+
+1991-11-22 Rainer Schoepf <latex-bugs@latex-project.org>
+
+ * ltlists.dtx: LaTeX2.09 \@item (RmS) Changed second call to
+ \makelabelto \unhbox\@tempboxa. Avoids problems with side
+ effects in \makelabeland is more efficient.
+
+ * ltherest.dtx: LaTeX2.09 \footnote (RmS) Added
+ \let\protect\noexpandin \@xfootnote, \@xfootnotemark, and
+ \@xfootnotetext
+
+1991-11-06 Rainer Schoepf <latex-bugs@latex-project.org>
+
+ * ltherest.dtx: LaTeX2.09 \end@float (RmS) added warning message
+ perhaps we should use an error message
+
+1991-11-04 Rainer Schoepf <latex-bugs@latex-project.org>
+
+ * ltlists.dtx: LaTeX2.09 \makelabel (RmS) added default
+ definition for \makelabel, to produce an error message.
+
+1991-11-01 Rainer Schoepf <latex-bugs@latex-project.org>
+
+ * ltherest.dtx: LaTeX2.09 \footnote (RmS) Added
+ \let\protect\noexpandin \footnote, \footnotemark, and
+ \footnotetext, since \xdef is used
+
+1991-10-17 Rainer Schoepf <latex-bugs@latex-project.org>
+
+ * ltinit.dtx: LaTeX209 \@tfor (Rms) \xdef replaced by \def (See
+ FMi's array.doc)
+
+1991-09-29 Rainer Schoepf <latex-bugs@latex-project.org>
+
+ * ltherest.dtx: LaTeX2.09 \@footnotetext (RmS) added \reset@font
+
+ * ltherest.dtx: LaTeX2.09 \@dottedtocline (RmS) added
+ \reset@font for page number
+
+ * ltboxes.dtx: LaTeX2.09 \@mpfootnotetext (RmS) added
+ \reset@font
+
+1991-08-26 N.N. <latex-bugs@latex-project.org>
+
+ * ltmiscen.dtx: LaTeX2.09 \@verbatim \@@par added
+
+1991-08-14 Rainer Schoepf <latex-bugs@latex-project.org>
+
+ * ltplain.dtx: LaTeX2.09 \cases (RmS) inserted extra braces
+ around entry for NFSS
+
+ * ltpictur.dtx: LaTeX2.09 "General" (RmS) inserted extra braces
+ around entry for NFSS
+
+ * ltherest.dtx: LaTeX2.09 \@endtheorem Moved \itshapeafter \item
+ to make it work with NFSS
+
+1991-07-24 N.N. <latex-bugs@latex-project.org>
+
+ * ltmiscen.dtx: LaTeX2.09 \@verbatim Added
+ \penalty\interlinepenalty to definition of \par so that
+ \samepage works
diff --git a/macros/latex-dev/base/classes.dtx b/macros/latex-dev/base/classes.dtx
index ea3b014c89..d6f2bb64e6 100644
--- a/macros/latex-dev/base/classes.dtx
+++ b/macros/latex-dev/base/classes.dtx
@@ -53,7 +53,7 @@
%<*driver>
\ProvidesFile{classes.drv}
%</driver>
- [2019/12/20 v1.4l
+ [2020/04/10 v1.4m
%<article|report|book> Standard LaTeX document class]
%<10pt|11pt|12pt> Standard LaTeX file (size option)]
% \end{macrocode}
@@ -214,6 +214,7 @@
% options that are new in \LaTeXe.}
% \changes{v1.3v}{1997/06/16}{Documentation fixes.}
% \changes{v1.4j}{2019/08/27}{Various commands made robust}
+% \changes{v1.4m}{2020/04/10}{(JLB) prettyprinting the code}
%
%
% \title{Standard Document Classes for \LaTeX{} version 2e\thanks{This
@@ -221,7 +222,7 @@
%
% \author{%
% Copyright (C) 1992 by Leslie Lamport \and
-% Copyright (C) 1994-2019 by Frank Mittelbach \and Johannes Braams \and
+% Copyright (C) 1994-2020 by Frank Mittelbach \and Johannes Braams \and
% \LaTeX3 Project Team
% }
% \date{\filedate}
@@ -322,34 +323,34 @@
% \changes{v1.0g}{1993/12/09}{Removed typo, A4 is not 279 mm high}
% \begin{macrocode}
\if@compatibility\else
-\DeclareOption{a4paper}
- {\setlength\paperheight {297mm}%
- \setlength\paperwidth {210mm}}
-\DeclareOption{a5paper}
- {\setlength\paperheight {210mm}%
- \setlength\paperwidth {148mm}}
-\DeclareOption{b5paper}
- {\setlength\paperheight {250mm}%
- \setlength\paperwidth {176mm}}
-\DeclareOption{letterpaper}
- {\setlength\paperheight {11in}%
- \setlength\paperwidth {8.5in}}
-\DeclareOption{legalpaper}
- {\setlength\paperheight {14in}%
- \setlength\paperwidth {8.5in}}
-\DeclareOption{executivepaper}
- {\setlength\paperheight {10.5in}%
- \setlength\paperwidth {7.25in}}
+ \DeclareOption{a4paper}
+ {\setlength\paperheight {297mm}%
+ \setlength\paperwidth {210mm}}
+ \DeclareOption{a5paper}
+ {\setlength\paperheight {210mm}%
+ \setlength\paperwidth {148mm}}
+ \DeclareOption{b5paper}
+ {\setlength\paperheight {250mm}%
+ \setlength\paperwidth {176mm}}
+ \DeclareOption{letterpaper}
+ {\setlength\paperheight {11in}%
+ \setlength\paperwidth {8.5in}}
+ \DeclareOption{legalpaper}
+ {\setlength\paperheight {14in}%
+ \setlength\paperwidth {8.5in}}
+ \DeclareOption{executivepaper}
+ {\setlength\paperheight {10.5in}%
+ \setlength\paperwidth {7.25in}}
% \end{macrocode}
%
% The option \Lopt{landscape} switches the values of |\paperheight|
% and |\paperwidth|, assuming the dimensions were given for portrait
% paper.
% \begin{macrocode}
-\DeclareOption{landscape}
- {\setlength\@tempdima {\paperheight}%
- \setlength\paperheight {\paperwidth}%
- \setlength\paperwidth {\@tempdima}}
+ \DeclareOption{landscape}
+ {\setlength\@tempdima {\paperheight}%
+ \setlength\paperheight {\paperwidth}%
+ \setlength\paperwidth {\@tempdima}}
\fi
% \end{macrocode}
%
@@ -368,7 +369,7 @@
\if@compatibility
\renewcommand\@ptsize{0}
\else
-\DeclareOption{10pt}{\renewcommand\@ptsize{0}}
+ \DeclareOption{10pt}{\renewcommand\@ptsize{0}}
\fi
\DeclareOption{11pt}{\renewcommand\@ptsize{1}}
\DeclareOption{12pt}{\renewcommand\@ptsize{2}}
@@ -382,7 +383,7 @@
% paragraphs into the outside margin.
% \begin{macrocode}
\if@compatibility\else
-\DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}
+ \DeclareOption{oneside}{\@twosidefalse \@mparswitchfalse}
\fi
\DeclareOption{twoside}{\@twosidetrue \@mparswitchtrue}
% \end{macrocode}
@@ -395,7 +396,7 @@
% \begin{macrocode}
\DeclareOption{draft}{\setlength\overfullrule{5pt}}
\if@compatibility\else
-\DeclareOption{final}{\setlength\overfullrule{0pt}}
+ \DeclareOption{final}{\setlength\overfullrule{0pt}}
\fi
% \end{macrocode}
%
@@ -405,7 +406,7 @@
% \begin{macrocode}
\DeclareOption{titlepage}{\@titlepagetrue}
\if@compatibility\else
-\DeclareOption{notitlepage}{\@titlepagefalse}
+ \DeclareOption{notitlepage}{\@titlepagefalse}
\fi
% \end{macrocode}
%
@@ -427,7 +428,7 @@
% Two-column and one-column printing is again realized via a switch.
% \begin{macrocode}
\if@compatibility\else
-\DeclareOption{onecolumn}{\@twocolumnfalse}
+ \DeclareOption{onecolumn}{\@twocolumnfalse}
\fi
\DeclareOption{twocolumn}{\@twocolumntrue}
% \end{macrocode}
@@ -468,7 +469,7 @@
% First some hook into the bibliography environment is filled.
% \begin{macrocode}
\AtEndOfPackage{%
- \renewcommand\@openbib@code{%
+ \renewcommand\@openbib@code{%
\advance\leftmargin\bibindent
\itemindent -\bibindent
\listparindent \itemindent
@@ -477,7 +478,7 @@
% \end{macrocode}
% In addition the definition of |\newblock| is overwritten.
% \begin{macrocode}
- \renewcommand\newblock{\par}}%
+ \renewcommand\newblock{\par}}%
}
% \end{macrocode}
%
@@ -950,7 +951,7 @@
% |\topskip|.
% \begin{macrocode}
\if@compatibility \setlength\maxdepth{4\p@} \else
-\setlength\maxdepth{.5\topskip} \fi
+ \setlength\maxdepth{.5\topskip} \fi
% \end{macrocode}
% \end{macro}
%
@@ -1106,7 +1107,7 @@
% between two marginal notes is controlled by |\marginparpush|.
% \begin{macrocode}
\if@twocolumn
- \setlength\marginparsep {10\p@}
+ \setlength\marginparsep {10\p@}
\else
%<10pt&!bk> \setlength\marginparsep{11\p@}
%<11pt&!bk> \setlength\marginparsep{10\p@}
@@ -1801,7 +1802,7 @@
% \changes{v1.3o}{1995/11/02}{(CAR) Make \cs{footnote} always work in
% title, etc}
% \begin{macrocode}
- \if@titlepage
+\if@titlepage
\newcommand\maketitle{\begin{titlepage}%
\let\footnotesize\small
\let\footnoterule\relax
@@ -1867,7 +1868,7 @@
\global\let\author\relax
\global\let\date\relax
\global\let\and\relax
-}
+ }
% \end{macrocode}
% When the title is not on a page of its own, the layout of the
% title is a little different. We use symbols to mark the footnotes
@@ -1884,12 +1885,12 @@
% \cs{@makefntext} to a) work and b) without using math}
% \begin{macrocode}
\else
-\newcommand\maketitle{\par
- \begingroup
- \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
- \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
- \long\def\@makefntext##1{\parindent 1em\noindent
- \hb@xt@1.8em{%
+ \newcommand\maketitle{\par
+ \begingroup
+ \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
+ \def\@makefnmark{\rlap{\@textsuperscript{\normalfont\@thefnmark}}}%
+ \long\def\@makefntext##1{\parindent 1em\noindent
+ \hb@xt@1.8em{%
\hss\@textsuperscript{\normalfont\@thefnmark}}##1}%
% \end{macrocode}
% If this is a twocolumn document we start a new page in twocolumn
@@ -1899,27 +1900,27 @@
% \changes{v1.2k}{1994/05/06}{Added check on number of columns in use
% locally}
% \begin{macrocode}
- \if@twocolumn
- \ifnum \col@number=\@ne
- \@maketitle
+ \if@twocolumn
+ \ifnum \col@number=\@ne
+ \@maketitle
+ \else
+ \twocolumn[\@maketitle]%
+ \fi
\else
- \twocolumn[\@maketitle]%
- \fi
- \else
% \end{macrocode}
% When this is not a twocolumn document we just start a new page,
% prevent floating objects from appearing on the top of this page
% and print the title information.
% \begin{macrocode}
\newpage
- \global\@topnum\z@ % Prevents figures from going at top of page.
- \@maketitle
- \fi
+ \global\@topnum\z@ % Prevents figures from going at top of page.
+ \@maketitle
+ \fi
% \end{macrocode}
% This page gets a \pstyle{plain} layout. We call |\@thanks| to
% produce the footnotes.
% \begin{macrocode}
- \thispagestyle{plain}\@thanks
+ \thispagestyle{plain}\@thanks
% \end{macrocode}
% Now we can close the group, reset the \Lcount{footnote} counter,
% disable |\thanks|, |\maketitle| and |\@maketitle| and save some
@@ -1928,20 +1929,20 @@
% \changes{v1.3k}{1995/08/27}{Disable \cs{title} and similar decls}
% \changes{v1.3n}{1995/10/29}{Empty \cs{@date} as well}
% \begin{macrocode}
- \endgroup
- \setcounter{footnote}{0}%
- \global\let\thanks\relax
- \global\let\maketitle\relax
- \global\let\@maketitle\relax
- \global\let\@thanks\@empty
- \global\let\@author\@empty
- \global\let\@date\@empty
- \global\let\@title\@empty
- \global\let\title\relax
- \global\let\author\relax
- \global\let\date\relax
- \global\let\and\relax
-}
+ \endgroup
+ \setcounter{footnote}{0}%
+ \global\let\thanks\relax
+ \global\let\maketitle\relax
+ \global\let\@maketitle\relax
+ \global\let\@thanks\@empty
+ \global\let\@author\@empty
+ \global\let\@date\@empty
+ \global\let\@title\@empty
+ \global\let\title\relax
+ \global\let\author\relax
+ \global\let\date\relax
+ \global\let\and\relax
+ }
% \end{macrocode}
% \end{macro}
%
@@ -3144,7 +3145,7 @@
% First we do give the definition for compatibility mode.
% \begin{macrocode}
\if@compatibility
-\newenvironment{titlepage}
+ \newenvironment{titlepage}
{%
%<book> \cleardoublepage
\if@twocolumn
@@ -3162,7 +3163,7 @@
% And here is the one for native \LaTeXe{}.
% \begin{macrocode}
\else
-\newenvironment{titlepage}
+ \newenvironment{titlepage}
{%
%<book> \cleardoublepage
\if@twocolumn
diff --git a/macros/latex-dev/base/classes.pdf b/macros/latex-dev/base/classes.pdf
index f72dae4514..1c33a811b0 100644
--- a/macros/latex-dev/base/classes.pdf
+++ b/macros/latex-dev/base/classes.pdf
Binary files differ
diff --git a/macros/latex-dev/base/clsguide.pdf b/macros/latex-dev/base/clsguide.pdf
index b0459b419b..ef43b41db0 100644
--- a/macros/latex-dev/base/clsguide.pdf
+++ b/macros/latex-dev/base/clsguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/cmfonts.pdf b/macros/latex-dev/base/cmfonts.pdf
index b942338d53..cd291a5f9a 100644
--- a/macros/latex-dev/base/cmfonts.pdf
+++ b/macros/latex-dev/base/cmfonts.pdf
Binary files differ
diff --git a/macros/latex-dev/base/cyrguide.pdf b/macros/latex-dev/base/cyrguide.pdf
index a2f9f702ce..2bbc7d8f18 100644
--- a/macros/latex-dev/base/cyrguide.pdf
+++ b/macros/latex-dev/base/cyrguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/doc.pdf b/macros/latex-dev/base/doc.pdf
index 88da0aa984..f4f1b1fa76 100644
--- a/macros/latex-dev/base/doc.pdf
+++ b/macros/latex-dev/base/doc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/docstrip.dtx b/macros/latex-dev/base/docstrip.dtx
index 9cc7945d60..3ce6ed5696 100644
--- a/macros/latex-dev/base/docstrip.dtx
+++ b/macros/latex-dev/base/docstrip.dtx
@@ -29,8 +29,8 @@
\catcode`\{=1
\catcode`\}=2
\def\filename{docstrip.dtx}
-\def\fileversion{2.5g}
-\def\filedate{2018/05/03}
+\def\fileversion{v2.5h}
+\def\filedate{2020/04/18}
\def\docdate {2018/05/03}
%%
%
@@ -1635,6 +1635,16 @@ Z
\x
% \end{macrocode}
%
+% \begin{macro}{\quote@name}
+% \changes{v2.5h}{2020/04/18}{Macro added gfh/221)}
+% A macro copied from \texttt{ltfiles.dtx} in order to be able to
+% allow spaces in filenames.
+% \begin{macrocode}
+\def\quote@name#1{"\quote@@name#1\@gobble""}
+\def\quote@@name#1"{#1\quote@@name}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\StreamOpen}\begin{macro}{\StreamPut}
% \begin{macro}{\StreamClose}
% Here is stream opening operator. Its parameter should be a macro
@@ -1642,6 +1652,10 @@ Z
% write to file |foo.tex| use |\StreamOpen\foo|, then
% |\StreamPut\foo| and |\StreamClose\foo|.
%
+% \changes{v2.5h}{2020/04/18}{Allow spaces in filenames by enclosing
+% them in quotes (gh/221)}
+% \changes{v2.5h}{2020/04/18}{Added two times two \cs{expandafters} to
+% make the case with a filename in quotes work as well}
% \begin{macrocode}
\chardef\stream@closed=16
\def\StreamOpen#1{%
@@ -1649,7 +1663,10 @@ Z
\def\s@do##1{\ifnum##1=0
\chardef#1=\expandafter\@stripstr\string##1 %
\global\chardef##1=1 %
- \immediate\openout#1=\csname pth@\@stripstring#1\endcsname %
+ \edef\q@curr@file{%
+ \expandafter\expandafter\expandafter\quote@name
+ \expandafter\expandafter\expandafter{\csname pth@\@stripstring#1\endcsname}}
+ \immediate\openout#1=\q@curr@file\relax
\@streamfound
\fi}
\@outputstreams
diff --git a/macros/latex-dev/base/docstrip.pdf b/macros/latex-dev/base/docstrip.pdf
index dc31dee8fa..3f74e31d4e 100644
--- a/macros/latex-dev/base/docstrip.pdf
+++ b/macros/latex-dev/base/docstrip.pdf
Binary files differ
diff --git a/macros/latex-dev/base/encguide.pdf b/macros/latex-dev/base/encguide.pdf
index 64ceff2a9a..d651b88475 100644
--- a/macros/latex-dev/base/encguide.pdf
+++ b/macros/latex-dev/base/encguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/exscale.pdf b/macros/latex-dev/base/exscale.pdf
index 2912bad8fd..65bc658e9e 100644
--- a/macros/latex-dev/base/exscale.pdf
+++ b/macros/latex-dev/base/exscale.pdf
Binary files differ
diff --git a/macros/latex-dev/base/fix-cm.pdf b/macros/latex-dev/base/fix-cm.pdf
index 856c5c0ec2..2cd2d911b8 100644
--- a/macros/latex-dev/base/fix-cm.pdf
+++ b/macros/latex-dev/base/fix-cm.pdf
Binary files differ
diff --git a/macros/latex-dev/base/fntguide.pdf b/macros/latex-dev/base/fntguide.pdf
index 46a96dcb9a..2b2017d501 100644
--- a/macros/latex-dev/base/fntguide.pdf
+++ b/macros/latex-dev/base/fntguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/fontdef.dtx b/macros/latex-dev/base/fontdef.dtx
index c5623c5566..936db0d7a2 100644
--- a/macros/latex-dev/base/fontdef.dtx
+++ b/macros/latex-dev/base/fontdef.dtx
@@ -39,7 +39,7 @@
%<driver, >\ProvidesFile{fontdef.drv}
% \fi
% \ProvidesFile{fontdef.dtx}
-%<-latexrelease> [2020/02/11 v3.0g LaTeX Kernel
+%<-latexrelease> [2020/04/24 v3.0h LaTeX Kernel
% \iftrue (\else
%<text, >(Text
%<math, >(Math
@@ -489,8 +489,8 @@
% Series changing commands are influenced by the following hooks.
% \changes{v3.0e}{2019/12/17}{Set \cs{bfdefault} to ``b''}
% \begin{macrocode}
-\newcommand\bfdefault{b} % overwritten below
-\newcommand\mddefault{m}
+\newcommand\bfdefault{b} % overwritten below (for rollback)
+\newcommand\mddefault{m} % overwritten below (for rollback)
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -506,7 +506,7 @@
\newcommand\itdefault{it}
\newcommand\sldefault{sl}
\newcommand\scdefault{sc}
-\newcommand\updefault{up} % overwritten below
+\newcommand\updefault{up} % overwritten below (for rollback)
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -519,8 +519,21 @@
%<*text|latexrelease>
%<latexrelease>\IncludeInRelease{2020/02/02}%
%<latexrelease> {\updefault}{font defaults change}%
+% \begin{macrocode}
\renewcommand\updefault{up}
-\renewcommand\bfdefault{b}
+% \end{macrocode}
+% We append \cs{@empty} to the series value so that we can detect
+% if it got changed via \cs{def} or \cs{renewcommand} later.
+% \changes{v3.0h}{2020/03/19}{Support legacy use of \cs{bfdefault}
+% and \cs{mddefault} (gh/306)}
+% \begin{macrocode}
+\renewcommand\bfdefault{b\@empty}
+\renewcommand\mddefault{m\@empty}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\let\bfdefault@previous\bfdefault
+\let\mddefault@previous\mddefault
%</text|latexrelease>
%<latexrelease>\EndIncludeInRelease
%<latexrelease>\IncludeInRelease{0000/00/00}%
@@ -528,6 +541,9 @@
%<latexrelease>
%<latexrelease>\renewcommand\updefault{n}
%<latexrelease>\renewcommand\bfdefault{bx}
+%<latexrelease>
+%<latexrelease>\let\bfdefault@previous\undefined
+%<latexrelease>\let\mddefault@previous\undefined
%<latexrelease>\EndIncludeInRelease
%<*text>
% \end{macrocode}
@@ -549,8 +565,8 @@
% which resolved to \texttt{n}, but these days that is no longer
% the case (and \texttt{up} is wrong when you want to do a
% reset. So we now use \texttt{n} explicitly.
-% \begin{macrocode}
% \changes{v3.0e}{2019/12/17}{Set \cs{shapedefault} explicitly to ``n''}
+% \begin{macrocode}
\newcommand\shapedefault{n}
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex-dev/base/graphpap.pdf b/macros/latex-dev/base/graphpap.pdf
index 8c59ea2651..6445993704 100644
--- a/macros/latex-dev/base/graphpap.pdf
+++ b/macros/latex-dev/base/graphpap.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ifthen.pdf b/macros/latex-dev/base/ifthen.pdf
index be07cdedb5..d9c284461f 100644
--- a/macros/latex-dev/base/ifthen.pdf
+++ b/macros/latex-dev/base/ifthen.pdf
Binary files differ
diff --git a/macros/latex-dev/base/inputenc.dtx b/macros/latex-dev/base/inputenc.dtx
index 641125cc75..01a8303ecf 100644
--- a/macros/latex-dev/base/inputenc.dtx
+++ b/macros/latex-dev/base/inputenc.dtx
@@ -261,18 +261,18 @@
% turn should ``hopefully'' set up the corresponding UTF-8 mapping).
%
% This works well enough for the main Western languages for which \LaTeX{}
-% has proper font encoding support, but currently already falls short on
-% languages like Greek (which has some semi-official font support, but for
-% which corresponding UTF-8 mappings still need to be defined).
+% has proper font encoding support, but can fall short on other
+% languages.
%
-% For some languages (such as Greek mentioned above) all that remains doing is
+% For some of these languages all that remains doing is
% to provide the necessary mappings and stick them into |utf8ienc.dtx|, so
% volunteers are welcome. For other languages that do not fit well into
% \LaTeX{} font selection scheme, e.g., Asian languages the outlined inputenc
% approach will not work. If that is the case one can try using Dominique
% Unruh's option |utf8x| for inputenc which has a somewhat different approach
% and encodes many more UTF-8 characters than the standard |utf8| option.
-% However, we recommend to do so only if you really need such alphabets as
+% However, we recommend to do so only if you really need such alphabets and can not
+% switch to one of the unicode engines xelatex or lualatex as
% there are problems with this extended approach which were precisely the
% reason that we decided to limit the support to what is properly supported
% within the boundaries of \LaTeX's font selection.
@@ -410,7 +410,7 @@
%<cp1252&!ansinew> \ProvidesFile{cp1252.def}
%<cp1250> \ProvidesFile{cp1250.def}
%<cp1257> \ProvidesFile{cp1257.def}
- [2018/08/11 v1.3c Input encoding file]
+ [2020/04/14 v1.3c Input encoding file]
%<cp850>%%
%<cp850>%% If you need a Euro symbol, try cp858 instead.
%<cp850>%%
diff --git a/macros/latex-dev/base/inputenc.pdf b/macros/latex-dev/base/inputenc.pdf
index 48d288b0de..ee5a4e8bbe 100644
--- a/macros/latex-dev/base/inputenc.pdf
+++ b/macros/latex-dev/base/inputenc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/latexchanges.pdf b/macros/latex-dev/base/latexchanges.pdf
index 4730d7f8cd..d4b0bd2de2 100644
--- a/macros/latex-dev/base/latexchanges.pdf
+++ b/macros/latex-dev/base/latexchanges.pdf
Binary files differ
diff --git a/macros/latex-dev/base/latexrelease.pdf b/macros/latex-dev/base/latexrelease.pdf
index 396d04c8f5..e914f5ee30 100644
--- a/macros/latex-dev/base/latexrelease.pdf
+++ b/macros/latex-dev/base/latexrelease.pdf
Binary files differ
diff --git a/macros/latex-dev/base/latexsym.pdf b/macros/latex-dev/base/latexsym.pdf
index f6b265cee5..5a41af7123 100644
--- a/macros/latex-dev/base/latexsym.pdf
+++ b/macros/latex-dev/base/latexsym.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lb2.pdf b/macros/latex-dev/base/lb2.pdf
index b04c71d42c..abb4820d33 100644
--- a/macros/latex-dev/base/lb2.pdf
+++ b/macros/latex-dev/base/lb2.pdf
Binary files differ
diff --git a/macros/latex-dev/base/letter.dtx b/macros/latex-dev/base/letter.dtx
index ee9a87cf84..7b31dfbbc9 100644
--- a/macros/latex-dev/base/letter.dtx
+++ b/macros/latex-dev/base/letter.dtx
@@ -45,7 +45,7 @@
%<*driver>
\ProvidesFile{letter.drv}
%</driver>
- [2014/09/29 v1.2z
+ [2020/03/11 v1.3b
%<+letter> Standard LaTeX document class]
% \end{macrocode}
%
@@ -115,10 +115,10 @@
% \end{macrocode}
% Some commonly used abbreviations
% \begin{macrocode}
-\newcommand*{\Lopt}[1]{\textsf {#1}}
-\newcommand*{\file}[1]{\texttt {#1}}
-\newcommand*{\Lcount}[1]{\textsl {\small#1}}
-\newcommand*{\pstyle}[1]{\textsl {#1}}
+\newcommand*\Lopt[1]{\textsf {#1}}
+\newcommand*\file[1]{\texttt {#1}}
+\newcommand*\Lcount[1]{\textsl {\small#1}}
+\newcommand*\pstyle[1]{\textsl {#1}}
% \end{macrocode}
% We also want the full details.
% \begin{macrocode}
@@ -162,6 +162,7 @@
% \changes{v1.2q}{1995/05/17}{cleaned up \cs{changes entries}}
% \changes{v1.2q}{1995/05/18}{replaced \cs{hbox to} by \cs{hb@xt@}}
% \changes{v1.2r}{1995/05/23}{removed a superfluous brace}
+% \changes{v1.3a}{2020/03/07}{merged changes to classes.dtx into letter.dtx}
%
% \iffalse
% Copyright (C) 1994 LaTeX3 project, Frank Mittelbach
@@ -751,29 +752,29 @@
% \item |\name{Dr. L. User}| : to be used for the return address on
% the envelope.
% \begin{macrocode}
-\newcommand*{\name}[1]{\def\fromname{#1}}
+\newcommand*\name[1]{\def\fromname{#1}}
% \end{macrocode}
% \item |\signature{Larry User}| : goes after the closing.
% \begin{macrocode}
-\newcommand*{\signature}[1]{\def\fromsig{#1}}
+\newcommand*\signature[1]{\def\fromsig{#1}}
% \end{macrocode}
% \item |\address{3245 Foo St.\\Gnu York}| : used as the return
% address in the
% letter and on the envelope. If not declared, then an
% institutional standard address is used.
% \begin{macrocode}
-\newcommand*{\address}[1]{\def\fromaddress{#1}}
+\newcommand*\address[1]{\def\fromaddress{#1}}
% \end{macrocode}
% \item |\location{Room 374}| : Acts as modifier to the standard
% institutional address.
% \begin{macrocode}
-\newcommand*{\location}[1]{\def\fromlocation{#1}}
+\newcommand*\location[1]{\def\fromlocation{#1}}
% \end{macrocode}
% \item |\telephone{(415)123-4567}| : Just in case some style puts it
% on the letter.
% \changes{v1.2m}{1994/06/23}{Removed typo (\#[] instead of [1])}
% \begin{macrocode}
-\newcommand*{\telephone}[1]{\def\telephonenum{#1}}
+\newcommand*\telephone[1]{\def\telephonenum{#1}}
% \end{macrocode}
% \end{itemize}
% \end{macro}
@@ -805,7 +806,7 @@
% \begin{macro}{\makelabels}
% The |\makelabels| declaration causes mailing labels to be made.
% \begin{macrocode}
-\newcommand*{\makelabels}{%
+\newcommand*\makelabels{%
% \end{macrocode}
% At the beginning of the document, we need to activate the
% |\@mlabel| and |\@startlabels| commands, as well as write
@@ -914,7 +915,7 @@
% When the command |\stopbreaks| is issued no page breaks should
% occur until |\startbreaks| is called.
% \begin{macrocode}
-\newcommand*{\stopbreaks}{%
+\newcommand*\stopbreaks{%
\interlinepenalty\@M
\def\par{\@@par\nobreak}%
\let\\\@nobreakcr
@@ -953,7 +954,7 @@
% \begin{macro}{\startbreaks}
% This cancels the effect of |\stopbreaks|.
% \begin{macrocode}
-\newcommand*{\startbreaks}{%
+\newcommand*\startbreaks{%
\let\\\@normalcr
\interlinepenalty 200%
\def\par{\@@par\penalty 200\relax}}
@@ -1004,7 +1005,7 @@
% declaration--null if none.
% \end{itemize}
% \begin{macrocode}
-\newcommand*{\opening}[1]{\ifx\@empty\fromaddress
+\newcommand*\opening[1]{\ifx\@empty\fromaddress
\thispagestyle{firstpage}%
{\raggedleft\@date\par}%
\else % home address
@@ -1039,7 +1040,7 @@
% \item |\stopbreaks| : a macro that inhibits page breaking.
% \end{itemize}
% \begin{macrocode}
-\newcommand{\closing}[1]{\par\nobreak\vspace{\parskip}%
+\newcommand\closing[1]{\par\nobreak\vspace{\parskip}%
\stopbreaks
\noindent
\ifx\@empty\fromaddress\else
@@ -1085,7 +1086,7 @@
% \changes{v1.2s}{1995/05/25}{replace \cs{reset@font} with
% \cs{normalfont}; remove \cs{rm}}
% \begin{macrocode}
-\newcommand*{\cc}[1]{%
+\newcommand*\cc[1]{%
\par\noindent
\parbox[t]{\textwidth}{%
\@hangfrom{\normalfont\ccname: }%
@@ -1100,7 +1101,7 @@
% & Bar
% \end{tabular}
% \begin{macrocode}
-\newcommand*{\encl}[1]{%
+\newcommand*\encl[1]{%
\par\noindent
\parbox[t]{\textwidth}{%
\@hangfrom{\normalfont\enclname: }%
@@ -1110,7 +1111,7 @@
% The only thing |\ps| needs to do is call |\startbreaks|,
% which allows page breaking again.
% \begin{macrocode}
-\newcommand*{\ps}{\par\startbreaks}
+\newcommand*\ps{\par\startbreaks}
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1137,7 +1138,7 @@
% |\protect\standardreturnaddress|.
% \end{itemize}
% \begin{macrocode}
-\newcommand*{\stopletter}{}
+\newcommand*\stopletter{}
% \end{macrocode}
% \end{macro}
%
@@ -1159,7 +1160,7 @@
% The return address for the mailing labels can be stored in this
% macro.
% \begin{macrocode}
-\newcommand*{\returnaddress}{}
+\newcommand*\returnaddress{}
% \end{macrocode}
% \end{macro}
%
@@ -1177,7 +1178,7 @@
% 5352 address labels.
% \changes{v1.2q}{1995/03/14}{changed value of \cs{columnsep} by 1pt}
% \begin{macrocode}
-\newcommand*{\startlabels}{\labelcount\z@
+\newcommand*\startlabels{\labelcount\z@
\pagestyle{empty}%
\let\@texttop\relax
\topmargin -50\p@
@@ -1226,7 +1227,7 @@
% \changes{v1.2q}{1995/03/14}{changed width of the labels slightly to
% prevent \LaTeX\ stuffing two on each line}
% \begin{macrocode}
-\newcommand*{\mlabel}[2]{%
+\newcommand*\mlabel[2]{%
\parbox[b][2in][c]{262\p@}{\strut\ignorespaces #2}%
}
% \end{macrocode}
@@ -1267,7 +1268,7 @@
% For efficiency, level-one list's values are defined at top level, and
% |\@listi| is defined to set only |\leftmargin|.
% \begin{macrocode}
-\setlength\leftmargini {2.5em}
+\setlength\leftmargini {2.5em}
% \end{macrocode}
% The following three are calculated so that they are larger than
% the sum of |\labelsep| and the width of the default labels (which
@@ -1276,8 +1277,8 @@
\setlength\leftmarginii {2.2em}
\setlength\leftmarginiii {1.87em}
\setlength\leftmarginiv {1.7em}
-\setlength\leftmarginv {1em}
-\setlength\leftmarginvi {1em}
+\setlength\leftmarginv {1em}
+\setlength\leftmarginvi {1em}
% \end{macrocode}
% Here we set the top level leftmargin.
% \begin{macrocode}
@@ -1453,11 +1454,30 @@
% \changes{v1.2x}{1997/04/16}{Changed to \cs{textbullet},
% \cs{textasteriskcentered} and \cs{textperiodcentered}}
% \begin{macrocode}
-\newcommand\labelitemi{\textbullet}
-\newcommand\labelitemii{\normalfont\bfseries \textendash}
-\newcommand\labelitemiii{\textasteriskcentered}
-\newcommand\labelitemiv{\textperiodcentered}
+\newcommand\labelitemi {\labelitemfont \textbullet}
+\newcommand\labelitemii {\labelitemfont \bfseries \textendash}
+\newcommand\labelitemiii{\labelitemfont \textasteriskcentered}
+\newcommand\labelitemiv {\labelitemfont \textperiodcentered}
% \end{macrocode}
+%
+% \begin{macro}{\labelitemfont}
+% The default definition for \cs{labelitemfont} is to reset the
+% font to \cs{normalfont} so that always the same symbol is
+% produced regardless of surrounding conditions.
+%
+% \changes{v1.3a}{2020/03/07}{Normalize label fonts}
+% A possible alternative would be
+%\begin{verbatim}
+%\renewcommand\labelitemfont{%
+% \fontseries\seriesdefault
+% \fontshape\shapedefault\selectfont}
+%\end{verbatim}
+% which resets series and shape doesn't touch the family.
+% \begin{macrocode}
+\newcommand\labelitemfont{\normalfont}
+% \end{macrocode}
+% \changes{v1.3b}{2020/03/11}{Added a missing \cs{end{macro}} statement}
+% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
@@ -1484,8 +1504,8 @@
%
% \changes{v1.2q}{1995/03/14}{made command short}
% \begin{macrocode}
-\newcommand*{\descriptionlabel}[1]{\hspace\labelsep
- \normalfont\bfseries #1}
+\newcommand*\descriptionlabel[1]{\hspace\labelsep
+ \normalfont\bfseries #1}
% \end{macrocode}
% \end{macro}
%
@@ -1795,8 +1815,10 @@
% |\parindent| to the appropriate value for succeeding paragraphs
% and put the proper indentation before the mark.
%
+% \changes{v1.3b}{2020/03/11}{make the switch to the use of
+% \cs{newcommand} complete.}
% \begin{macrocode}
-\long\def\@makefntext#1{%
+\newcommand\@makefntext[1]{%
\noindent
\hangindent 5\p@
\hb@xt@5\p@{\hss\@makefnmark}#1}
@@ -1808,10 +1830,12 @@
% footnotes should be produced by the macro |\@makefnmark|. We use
% the default definition for it.
% \begin{macrocode}
-%\def\@makefnmark{\hbox{$^{\@thefnmark}\m@th$}}
+%\renewcommand\@makefnmark{\hbox{$^{\@thefnmark}\m@th$}}
% \end{macrocode}
% \end{macro}
%
+% \section{Initialization}
+%
% \subsection{Words}
%
% \begin{macro}{\ccname}
@@ -1823,10 +1847,10 @@
% English words must be replaced. All the English words that
% require replacement are defined below in command names.
% \begin{macrocode}
-\newcommand*{\ccname}{cc}
-\newcommand*{\enclname}{encl}
-\newcommand*{\pagename}{Page}
-\newcommand*{\headtoname}{To}
+\newcommand*\ccname{cc}
+\newcommand*\enclname{encl}
+\newcommand*\pagename{Page}
+\newcommand*\headtoname{To}
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1839,7 +1863,7 @@
% This macro uses the \TeX\ primitives |\month|, |\day| and |\year|
% to provide the date of the \LaTeX-run.
% \begin{macrocode}
-\newcommand*{\today}{\ifcase\month\or
+\newcommand*\today{\ifcase\month\or
January\or February\or March\or April\or May\or June\or
July\or August\or September\or October\or November\or December\fi
\space\number\day, \number\year}
diff --git a/macros/latex-dev/base/letter.pdf b/macros/latex-dev/base/letter.pdf
index ef5e8173e4..4df0771074 100644
--- a/macros/latex-dev/base/letter.pdf
+++ b/macros/latex-dev/base/letter.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lgc2.pdf b/macros/latex-dev/base/lgc2.pdf
index d365e0f353..f3c7b5ff3e 100644
--- a/macros/latex-dev/base/lgc2.pdf
+++ b/macros/latex-dev/base/lgc2.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lppl.pdf b/macros/latex-dev/base/lppl.pdf
new file mode 100644
index 0000000000..14c251a554
--- /dev/null
+++ b/macros/latex-dev/base/lppl.pdf
Binary files differ
diff --git a/macros/latex-dev/base/lppl.tex b/macros/latex-dev/base/lppl.tex
new file mode 100644
index 0000000000..c2a54c1532
--- /dev/null
+++ b/macros/latex-dev/base/lppl.tex
@@ -0,0 +1,511 @@
+%
+% Copyright 1999 2002-2011 LaTeX3 Project
+% Everyone is allowed to distribute verbatim copies of this
+% license document, but modification of it is not allowed.
+%
+%
+% If you wish to load it as part of a ``doc'' source, you have to
+% ensure that a) % is a comment character and b) that short verb
+% characters are being turned off, i.e.,
+%
+% \DeleteShortVerb{\'} % or whatever was made a shorthand
+% \MakePercentComment
+% \input{lppl}
+% \MakePercentIgnore
+% \MakeShortVerb{\'} % turn it on again if necessary
+%
+%
+% By default the license is produced with \section* as the highest
+% heading level. If this is not appropriate for the document in which
+% it is included define the commands listed below before loading this
+% document, e.g., for inclusion as a separate chapter define:
+%
+% \providecommand{\LPPLsection}{\chapter*}
+% \providecommand{\LPPLsubsection}{\section*}
+% \providecommand{\LPPLsubsubsection}{\subsection*}
+% \providecommand{\LPPLparagraph}{\subsubsection*}
+%
+%
+% To allow cross-referencing the headings \label's have been attached
+% to them, all starting with ``LPPL:''. As by default headings without
+% numbers are produced, this will only allow page references.
+% However, you can use the titleref package to produce textual
+% references or you change the definitions of \LPPLsection, and
+% friends to generated numbered headings.
+%
+%
+% We want it to be possible that this file can be processed by
+% (pdf)LaTeX on its own, or that this file can be included in another
+% LaTeX document without any modification whatsoever.
+% Hence the little test below.
+%
+%
+\makeatletter
+\ifx\@preamblecmds\@notprerr
+ % In this case the preamble has already been processed so this file
+ % is loaded as part of another document; just enclose everything in
+ % a group
+ \let\LPPLicense\bgroup
+ \let\endLPPLicense\egroup
+\else
+ % In this case the preamble has not been processed yet so this file
+ % is processed by itself.
+ \documentclass{article}
+ \let\LPPLicense\document
+ \let\endLPPLicense\enddocument
+\fi
+\makeatother
+
+
+\begin{LPPLicense}
+ \providecommand{\LPPLsection}{\section*}
+ \providecommand{\LPPLsubsection}{\subsection*}
+ \providecommand{\LPPLsubsubsection}{\subsubsection*}
+ \providecommand{\LPPLparagraph}{\paragraph*}
+ \providecommand*{\LPPLfile}[1]{\texttt{#1}}
+ \providecommand*{\LPPLdocfile}[1]{`\LPPLfile{#1.tex}'}
+ \providecommand*{\LPPL}{\textsc{lppl}}
+
+ \LPPLsection{The \LaTeX\ Project Public License}
+ \label{LPPL:LPPL}
+
+ \emph{LPPL Version 1.3c 2008-05-04}
+
+ \textbf{Copyright 1999, 2002--2008 \LaTeX3 Project}
+ \begin{quotation}
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+ \end{quotation}
+
+ \LPPLsubsection{Preamble}
+ \label{LPPL:Preamble}
+
+ The \LaTeX\ Project Public License (\LPPL) is the primary license
+ under which the \LaTeX\ kernel and the base \LaTeX\ packages are
+ distributed.
+
+ You may use this license for any work of which you hold the
+ copyright and which you wish to distribute. This license may be
+ particularly suitable if your work is \TeX-related (such as a
+ \LaTeX\ package), but it is written in such a way that you can use
+ it even if your work is unrelated to \TeX.
+
+ The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS
+ LICENSE', below, gives instructions, examples, and recommendations
+ for authors who are considering distributing their works under this
+ license.
+
+ This license gives conditions under which a work may be distributed
+ and modified, as well as conditions under which modified versions of
+ that work may be distributed.
+
+ We, the \LaTeX3 Project, believe that the conditions below give you
+ the freedom to make and distribute modified versions of your work
+ that conform with whatever technical specifications you wish while
+ maintaining the availability, integrity, and reliability of that
+ work. If you do not see how to achieve your goal while meeting
+ these conditions, then read the document \LPPLdocfile{cfgguide} and
+ \LPPLdocfile{modguide} in the base \LaTeX\ distribution for suggestions.
+
+
+ \LPPLsubsection{Definitions}
+ \label{LPPL:Definitions}
+
+ In this license document the following terms are used:
+
+ \begin{description}
+ \item[Work] Any work being distributed under this License.
+
+ \item[Derived Work] Any work that under any applicable law is
+ derived from the Work.
+
+ \item[Modification] Any procedure that produces a Derived Work under
+ any applicable law -- for example, the production of a file
+ containing an original file associated with the Work or a
+ significant portion of such a file, either verbatim or with
+ modifications and/or translated into another language.
+
+ \item[Modify] To apply any procedure that produces a Derived Work
+ under any applicable law.
+
+ \item[Distribution] Making copies of the Work available from one
+ person to another, in whole or in part. Distribution includes
+ (but is not limited to) making any electronic components of the
+ Work accessible by file transfer protocols such as \textsc{ftp} or
+ \textsc{http} or by shared file systems such as Sun's Network File
+ System (\textsc{nfs}).
+
+ \item[Compiled Work] A version of the Work that has been processed
+ into a form where it is directly usable on a computer system.
+ This processing may include using installation facilities provided
+ by the Work, transformations of the Work, copying of components of
+ the Work, or other activities. Note that modification of any
+ installation facilities provided by the Work constitutes
+ modification of the Work.
+
+ \item[Current Maintainer] A person or persons nominated as such
+ within the Work. If there is no such explicit nomination then it
+ is the `Copyright Holder' under any applicable law.
+
+ \item[Base Interpreter] A program or process that is normally needed
+ for running or interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these are
+ not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `\LaTeX-Format' or in the case of files belonging to the
+ `\LaTeX-format' a program implementing the `\TeX{} language'.
+ \end{description}
+
+ \LPPLsubsection{Conditions on Distribution and Modification}
+ \label{LPPL:Conditions}
+
+ \begin{enumerate}
+ \item Activities other than distribution and/or modification of the
+ Work are not covered by this license; they are outside its scope.
+ In particular, the act of running the Work is not restricted and
+ no requirements are made concerning any offers of support for the
+ Work.
+
+ \item\label{LPPL:item:distribute} You may distribute a complete, unmodified
+ copy of the Work as you received it. Distribution of only part of
+ the Work is considered modification of the Work, and no right to
+ distribute such a Derived Work may be assumed under the terms of
+ this clause.
+
+ \item You may distribute a Compiled Work that has been generated
+ from a complete, unmodified copy of the Work as distributed under
+ Clause~\ref{LPPL:item:distribute} above, as long as that Compiled Work is
+ distributed in such a way that the recipients may install the
+ Compiled Work on their system exactly as it would have been
+ installed if they generated a Compiled Work directly from the
+ Work.
+
+ \item\label{LPPL:item:currmaint} If you are the Current Maintainer of the
+ Work, you may, without restriction, modify the Work, thus creating
+ a Derived Work. You may also distribute the Derived Work without
+ restriction, including Compiled Works generated from the Derived
+ Work. Derived Works distributed in this manner by the Current
+ Maintainer are considered to be updated versions of the Work.
+
+ \item If you are not the Current Maintainer of the Work, you may
+ modify your copy of the Work, thus creating a Derived Work based
+ on the Work, and compile this Derived Work, thus creating a
+ Compiled Work based on the Derived Work.
+
+ \item\label{LPPL:item:conditions} If you are not the Current Maintainer
+ of the
+ Work, you may distribute a Derived Work provided the following
+ conditions are met for every component of the Work unless that
+ component clearly states in the copyright notice that it is exempt
+ from that condition. Only the Current Maintainer is allowed to
+ add such statements of exemption to a component of the Work.
+ \begin{enumerate}
+ \item If a component of this Derived Work can be a direct
+ replacement for a component of the Work when that component is
+ used with the Base Interpreter, then, wherever this component of
+ the Work identifies itself to the user when used interactively
+ with that Base Interpreter, the replacement component of this
+ Derived Work clearly and unambiguously identifies itself as a
+ modified version of this component to the user when used
+ interactively with that Base Interpreter.
+
+ \item\label{LPPL:item:changelog} Every component of the Derived Work
+ contains prominent
+ notices detailing the nature of the changes to that component,
+ or a prominent reference to another file that is distributed as
+ part of the Derived Work and that contains a complete and
+ accurate log of the changes.
+
+ \item No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original
+ version of the Work, provide any support, including (but not
+ limited to) the reporting and handling of errors, to recipients
+ of the Derived Work unless those persons have stated explicitly
+ that they do provide such support for the Derived Work.
+
+ \item\label{LPPL:item:unmodifiedcopy} You distribute at least one of
+ the following with the Derived Work:
+ \begin{enumerate}
+ \item A complete, unmodified copy of the Work; if your
+ distribution of a modified component is made by offering
+ access to copy the modified component from a designated place,
+ then offering equivalent access to copy the Work from the same
+ or some similar place meets this condition, even though third
+ parties are not compelled to copy the Work along with the
+ modified component;
+
+ \item Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+ \end{enumerate}
+ \end{enumerate}
+ \item If you are not the Current Maintainer of the Work, you may
+ distribute a Compiled Work generated from a Derived Work, as long
+ as the Derived Work is distributed to all recipients of the
+ Compiled Work, and as long as the conditions of
+ Clause~\ref{LPPL:item:conditions}, above, are met with regard to the
+ Derived Work.
+
+ \item The conditions above are not intended to prohibit, and hence
+ do not apply to, the modification, by any method, of any component
+ so that it becomes identical to an updated version of that
+ component of the Work as it is distributed by the Current
+ Maintainer under Clause~\ref{LPPL:item:currmaint}, above.
+
+ \item Distribution of the Work or any Derived Work in an alternative
+ format, where the Work or that Derived Work (in whole or in part)
+ is then produced by applying some process to that format, does not
+ relax or nullify any sections of this license as they pertain to
+ the results of applying that process.
+
+ \item
+ \begin{enumerate}
+ \item A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause~\ref{LPPL:item:conditions} above, in regard to the Work, though it
+ does not have to honor the rest of the conditions in this
+ license.
+
+ \item If a Derived Work is distributed under a different license,
+ that Derived Work must provide sufficient documentation as part
+ of itself to allow each recipient of that Derived Work to honor
+ the restrictions in Clause~\ref{LPPL:item:conditions} above, concerning
+ changes from the Work.
+ \end{enumerate}
+ \item This license places no restrictions on works that are
+ unrelated to the Work, nor does this license place any
+ restrictions on aggregating such works with the Work by any means.
+
+ \item Nothing in this license is intended to, or may be used to,
+ prevent complete compliance by all parties with all applicable
+ laws.
+ \end{enumerate}
+
+ \LPPLsubsection{No Warranty}
+ \label{LPPL:Warranty}
+
+ There is no warranty for the Work. Except when otherwise stated in
+ writing, the Copyright Holder provides the Work `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 Work is with you. Should the Work prove
+ defective, you assume the cost of all necessary servicing, repair,
+ or correction.
+
+ In no event unless required by applicable law or agreed to in
+ writing will The Copyright Holder, or any author named in the
+ components of the Work, or any other party who may distribute and/or
+ modify the Work as permitted above, be liable to you for damages,
+ including any general, special, incidental or consequential damages
+ arising out of any use of the Work or out of inability to use the
+ Work (including, but not limited to, loss of data, data being
+ rendered inaccurate, or losses sustained by anyone as a result of
+ any failure of the Work to operate with any other programs), even if
+ the Copyright Holder or said author or said other party has been
+ advised of the possibility of such damages.
+
+ \LPPLsubsection{Maintenance of The Work}
+ \label{LPPL:Maintenance}
+
+ The Work has the status `author-maintained' if the Copyright Holder
+ explicitly and prominently states near the primary copyright notice
+ in the Work that the Work can only be maintained by the Copyright
+ Holder or simply that it is `author-maintained'.
+
+ The Work has the status `maintained' if there is a Current
+ Maintainer who has indicated in the Work that they are willing to
+ receive error reports for the Work (for example, by supplying a
+ valid e-mail address). It is not required for the Current Maintainer
+ to acknowledge or act upon these error reports.
+
+ The Work changes from status `maintained' to `unmaintained' if there
+ is no Current Maintainer, or the person stated to be Current
+ Maintainer of the work cannot be reached through the indicated means
+ of communication for a period of six months, and there are no other
+ significant signs of active maintenance.
+
+ You can become the Current Maintainer of the Work by agreement with
+ any existing Current Maintainer to take over this role.
+
+ If the Work is unmaintained, you can become the Current Maintainer
+ of the Work through the following steps:
+ \begin{enumerate}
+ \item Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of an
+ Internet or similar search.
+ \item If this search is successful, then enquire whether the Work is
+ still maintained.
+ \begin{enumerate}
+ \item If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ \item\label{LPPL:item:intention} If the search is unsuccessful or
+ no action to resume active maintenance is taken by the Current
+ Maintainer, then announce within the pertinent community your
+ intention to take over maintenance. (If the Work is a \LaTeX{}
+ work, this could be done, for example, by posting to
+ \texttt{comp.text.tex}.)
+ \end{enumerate}
+ \item {}
+ \begin{enumerate}
+ \item If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ \item\label{LPPL:item:announce} If the Current Maintainer is not
+ reachable and the Copyright Holder agrees that maintenance of
+ the Work be passed to you, then this takes effect immediately
+ upon announcement.
+ \end{enumerate}
+ \item\label{LPPL:item:change} If you make an `intention
+ announcement' as described in~\ref{LPPL:item:intention} above and
+ after three months your intention is challenged neither by the
+ Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as to
+ name you as the (new) Current Maintainer.
+
+ \item If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of~\ref{LPPL:item:announce}
+ or~\ref{LPPL:item:change}, then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided they
+ then update their communication data within one month.
+ \end{enumerate}
+ A change in the Current Maintainer does not, of itself, alter the
+ fact that the Work is distributed under the \LPPL\ license.
+
+ If you become the Current Maintainer of the Work, you should
+ immediately provide, within the Work, a prominent and unambiguous
+ statement of your status as Current Maintainer. You should also
+ announce your new status to the same pertinent community as
+ in~\ref{LPPL:item:intention} above.
+
+ \LPPLsubsection{Whether and How to Distribute Works under This License}
+ \label{LPPL:Distribute}
+
+ This section contains important instructions, examples, and
+ recommendations for authors who are considering distributing their
+ works under this license. These authors are addressed as `you' in
+ this section.
+
+ \LPPLsubsubsection{Choosing This License or Another License}
+ \label{LPPL:Choosing}
+
+ If for any part of your work you want or need to use
+ \emph{distribution} conditions that differ significantly from those
+ in this license, then do not refer to this license anywhere in your
+ work but, instead, distribute your work under a different license.
+ You may use the text of this license as a model for your own
+ license, but your license should not refer to the \LPPL\ or
+ otherwise give the impression that your work is distributed under
+ the \LPPL.
+
+ The document \LPPLdocfile{modguide} in the base \LaTeX\ distribution
+ explains the motivation behind the conditions of this license. It
+ explains, for example, why distributing \LaTeX\ under the
+ \textsc{gnu} General Public License (\textsc{gpl}) was considered
+ inappropriate. Even if your work is unrelated to \LaTeX, the
+ discussion in \LPPLdocfile{modguide} may still be relevant, and authors
+ intending to distribute their works under any license are encouraged
+ to read it.
+
+ \LPPLsubsubsection{A Recommendation on Modification Without Distribution}
+ \label{LPPL:WithoutDistribution}
+
+ It is wise never to modify a component of the Work, even for your
+ own personal use, without also meeting the above conditions for
+ distributing the modified component. While you might intend that
+ such modifications will never be distributed, often this will happen
+ by accident -- you may forget that you have modified that component;
+ or it may not occur to you when allowing others to access the
+ modified version that you are thus distributing it and violating the
+ conditions of this license in ways that could have legal
+ implications and, worse, cause problems for the community. It is
+ therefore usually in your best interest to keep your copy of the
+ Work identical with the public one. Many works provide ways to
+ control the behavior of that work without altering any of its
+ licensed components.
+
+ \LPPLsubsubsection{How to Use This License}
+ \label{LPPL:HowTo}
+
+ To use this license, place in each of the components of your work
+ both an explicit copyright notice including your name and the year
+ the work was authored and/or last substantially modified. Include
+ also a statement that the distribution and/or modification of that
+ component is constrained by the conditions in this license.
+
+ Here is an example of such a notice and statement:
+\begin{verbatim}
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % https://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+\end{verbatim}
+
+ Given such a notice and statement in a file, the conditions given in
+ this license document would apply, with the `Work' referring to the
+ three files `\LPPLfile{pig.dtx}', `\LPPLfile{pig.ins}', and
+ `\LPPLfile{pig.sty}' (the last being generated from
+ `\LPPLfile{pig.dtx}' using `\LPPLfile{pig.ins}'), the `Base
+ Interpreter' referring to any `\LaTeX-Format', and both `Copyright
+ Holder' and `Current Maintainer' referring to the person `M. Y.
+ Name'.
+
+ If you do not want the Maintenance section of \LPPL\ to apply to
+ your Work, change `maintained' above into `author-maintained'.
+ However, we recommend that you use `maintained' as the Maintenance
+ section was added in order to ensure that your Work remains useful
+ to the community even when you can no longer maintain and support it
+ yourself.
+
+ \LPPLsubsubsection{Derived Works That Are Not Replacements}
+ \label{LPPL:NotReplacements}
+
+ Several clauses of the \LPPL\ specify means to provide reliability
+ and stability for the user community. They therefore concern
+ themselves with the case that a Derived Work is intended to be used
+ as a (compatible or incompatible) replacement of the original
+ Work. If this is not the case (e.g., if a few lines of code are
+ reused for a completely different task), then clauses
+ \ref{LPPL:item:changelog} and \ref{LPPL:item:unmodifiedcopy}
+ shall not apply.
+
+ \LPPLsubsubsection{Important Recommendations}
+ \label{LPPL:Recommendations}
+
+ \LPPLparagraph{Defining What Constitutes the Work}
+
+ The \LPPL\ requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a way
+ for the licensee to determine which files constitute the Work. This
+ could, for example, be achieved by explicitly listing all the files
+ of the Work near the copyright notice of each file or by using a
+ line such as:
+\begin{verbatim}
+ % This work consists of all files listed in manifest.txt.
+\end{verbatim}
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
+\end{LPPLicense}
+\endinput
diff --git a/macros/latex-dev/base/ltboxes.dtx b/macros/latex-dev/base/ltboxes.dtx
index 61ea87235a..051922b6f3 100644
--- a/macros/latex-dev/base/ltboxes.dtx
+++ b/macros/latex-dev/base/ltboxes.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltboxes.dtx}
- [2019/08/27 v1.3b LaTeX Kernel (Box Commands)]
+ [2020/03/06 v1.3c LaTeX Kernel (Box Commands)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltboxes.dtx}
@@ -1290,13 +1290,21 @@
%
% \begin{macro}{\rlap}
% \begin{macro}{\llap}
+% \begin{macro}{\clap}
% These macros place text to the left or right of the current
% reference point without taking up space.
-% \end{macro}
% \begin{macrocode}
\DeclareRobustCommand\rlap[1]{\hb@xt@\z@{#1\hss}}
\DeclareRobustCommand\llap[1]{\hb@xt@\z@{\hss#1}}
% \end{macrocode}
+% And here is the version that centers, it was initially introduced by
+% \texttt{mathtools}.
+% \changes{v1.3c}{2020/03/06}{Macro \cs{clap} added}
+% \begin{macrocode}
+\DeclareRobustCommand\clap[1]{\hb@xt@\z@{\hss#1\hss}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
% \end{macro}
%
% \begin{macrocode}
diff --git a/macros/latex-dev/base/ltclass.dtx b/macros/latex-dev/base/ltclass.dtx
index f43e8f0c0d..dd35be9ae4 100644
--- a/macros/latex-dev/base/ltclass.dtx
+++ b/macros/latex-dev/base/ltclass.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltclass.dtx}
- [2020/03/02 v1.3j LaTeX Kernel (Class & Package Interface)]
+ [2020/04/24 v1.3k LaTeX Kernel (Class & Package Interface)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltclass.dtx}
@@ -620,15 +620,60 @@
%
% \begin{macro}{\@ifpackagelater}
% \begin{macro}{\@ifclasslater}
-% |\@ifpackagelater{|\meta{name}|}{YYYY/MM/DD}|
-% Checks that the package loaded is more recent than the given date.
+% |\@ifpackagelater{|\meta{name}|}{YYYY/MM/DD}{|\meta{true
+% code}|}{|\meta{false code}|}|
+% Checks that the package loaded is more recent or equal to the
+% given date.
+% A better name for it would therefore been
+% |\@ifpackagelaterorequal| but it is in use for more than 30
+% years, so \ldots
% \begin{macrocode}
\def\@ifpackagelater{\@ifl@ter\@pkgextension}
\def\@ifclasslater{\@ifl@ter\@clsextension}
\@onlypreamble\@ifpackagelater
\@onlypreamble\@ifclasslater
% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
%
+%
+% \begin{macro}{\IfPackageAtLeastTF}
+% \begin{macro}{\IfClassAtLeastTF}
+% \begin{macro}{\IfFormatAtLeastTF}
+% |\IfFormatAtLeastTF{YYYY/MM/DD}{|\meta{true
+% code}|}{|\meta{false code}|}|
+% Test if the format is later or equal to the given date.
+% \changes{v1.3k}{2020/04/07}{Macro added; also in rollback (gh/168)}
+% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\IfFormatAtLeastTF}{Test format date}%
+\def\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
+\let\IfPackageAtLeastTF\@ifpackagelater
+\let\IfClassAtLeastTF\@ifclasslater
+\@onlypreamble\IfFormatAtLeastTF
+\@onlypreamble\IfPackageAtLeastTF
+\@onlypreamble\IfClassAtLeastTF
+% \end{macrocode}
+% For rollback pretend it was available since the beginning of dawn.
+% \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\IfFormatAtLeastTF}{Test format date}%
+%<latexrelease>\def\IfFormatAtLeastTF{\@ifl@t@r\fmtversion}
+%<latexrelease>\let\IfPackageAtLeastTF\@ifpackagelater
+%<latexrelease>\let\IfClassAtLeastTF\@ifclasslater
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@ifl@ter}
% \begin{macrocode}
\def\@ifl@ter#1#2{%
\expandafter\@ifl@t@r
@@ -675,6 +720,7 @@
% \begin{macrocode}
\@onlypreamble\@ifl@t@r
% \end{macrocode}
+% \end{macro}
%
% \changes{v1.1j}{2016/06/20}
% {don't declare as \cs{@onlypreamble}}
@@ -695,8 +741,8 @@
%</2ekernel|latexreleasefirst>
%<*2ekernel>
% \end{macrocode}
-% \end{macro}
-% \end{macro}
+%
+%
%
% \begin{macro}{\@ifpackagewith}
% \begin{macro}{\@ifclasswith}
@@ -1050,6 +1096,10 @@
%
% The common part of |\ProcessOptions| and |\ProcessOptions*|.
% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\@process@pti@ns}{Unused options issue}%
\def\@process@pti@ns{%
\@for\CurrentOption:=\@curroptions\do{%
\@ifundefined{ds@\CurrentOption}%
@@ -1073,11 +1123,33 @@
% \end{macrocode}
% \changes{v1.0r}{1995/10/17}
% {Reset \cs{CurrentOption} for graphics/1873}
+% \changes{v1.3k}{2020/04/07}{Use different method to ignore
+% unprocessed options (gh/22)}
% \begin{macrocode}
\let\CurrentOption\@empty
\let\@fileswith@pti@ns\@@fileswith@pti@ns
- \AtEndOfPackage{\let\@unprocessedoptions\relax}}
+ \AtEndOfPackage{\expandafter\let
+ \csname unprocessedoptions-\@currname.\@currext\endcsname
+ \relax}}
\@onlypreamble\@process@pti@ns
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\@process@pti@ns}{Unused options issue}%
+%<latexrelease>
+%<latexrelease>\def\@process@pti@ns{%
+%<latexrelease> \@for\CurrentOption:=\@curroptions\do{%
+%<latexrelease> \@ifundefined{ds@\CurrentOption}%
+%<latexrelease> {\@use@ption
+%<latexrelease> \default@ds}%
+%<latexrelease> \@use@ption}%
+%<latexrelease> \@for\CurrentOption:=\@declaredoptions\do{%
+%<latexrelease> \expandafter\let\csname ds@\CurrentOption\endcsname\relax}%
+%<latexrelease> \let\CurrentOption\@empty
+%<latexrelease> \let\@fileswith@pti@ns\@@fileswith@pti@ns
+%<latexrelease> \AtEndOfPackage{\let\@unprocessedoptions\relax}}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1243,13 +1315,45 @@
% \changes{v1.0v}{1996/10/04}{Reset \cs{@unprocessedoptions} for /2269}
% Load package `|#1|' with the current option list.
% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\RequirePackageWithOptions}{Unused options issue}%
\def\RequirePackageWithOptions{%
- \AtEndOfPackage{\let\@unprocessedoptions\relax}%
+% \end{macrocode}
+% The resetting of the unprocessed options is now done on a par package basis.
+% \changes{v1.3k}{2020/04/07}{Use different method to ignore
+% unprocessed options (gh/22)}
+% \begin{macrocode}
+ \AtEndOfPackage{\expandafter\let
+ \csname unprocessedoptions-\@currname.\@currext\endcsname
+ \relax}%
\@loadwithoptions\@pkgextension\RequirePackage}
\@onlypreamble\RequirePackageWithOptions
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\RequirePackageWithOptions}{Unused options issue}%
+%<latexrelease>
+%<latexrelease>\def\RequirePackageWithOptions{%
+%<latexrelease> \AtEndOfPackage{\let\@unprocessedoptions\relax}%
+%<latexrelease> \@loadwithoptions\@pkgextension\RequirePackage}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
% \end{macrocode}
% \end{macro}
%
+%
+
+
+
+
+
+
+%
% \begin{macro}{\usepackage}
% To begin with, |\usepackage| produces an error. This is reset by
% |\documentclass|.
@@ -1482,6 +1586,10 @@
% \changes{v1.3d}{2019/10/18}{Initialize \cs{...-h@@k} only when loading
% the package or class (gh/198)}
% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\@onefilewithoptions}{Unused options issue}%
\def\@onefilewithoptions#1[#2][#3]#4{%
\@pushfilename
\xdef\@currname{#1}%
@@ -1531,19 +1639,49 @@
{}%
{\@missingfileerror\@currname\@currext}%
% \end{macrocode}
-% |\@unprocessedoptions| will generate an error for each specified
-% option in a package unless a |\ProcessOptions| has appeared in the
-% package file.
+% In older versions of the code |\@unprocessedoptions| would
+% generate an error for each specified
+% option in a package unless a |\ProcessOptions| has appeared in the
+% package file.
% \changes{v0.2v}{1994/01/29}
% {All options raise error if no \cs{ProcessOptions} appears}
% \changes{v0.2x}{1994/02/02}
-% {Only run the hook and options check if the file was loaded.}
-% \begin{macrocode}
- \let\@unprocessedoptions\@@unprocessedoptions
+% {Only run the hook and options check if the file was
+% loaded.}
+%
+% This has changed in 2020. We now use a separate macro per package
+% to avoid interferences in case of nested packages. The whole
+% code for handling this issue (GitHub 22) was provided by Hironobu
+% Yamashita, thanks for that.
+% \changes{v1.3k}{2020/04/07}{Use different method to ignore
+% unprocessed options (gh/22)}
+% \begin{macrocode}
+ \expandafter\let\csname unprocessedoptions-\@currname.\@currext\endcsname
+ \@@unprocessedoptions
\csname\@currname.\@currext-h@@k\endcsname
\expandafter\let\csname\@currname.\@currext-h@@k\endcsname
\@undefined
- \@unprocessedoptions}%
+% \end{macrocode}
+% Catch the case where the packages has handled the options and
+% redefined \cs{@unprocessedoptions} to \cs{relax} (old interface).
+% In that case no error should be produced.
+% \changes{v1.3k}{2020/04/07}{Use different method to ignore
+% unprocessed options (gh/22)}
+% \begin{macrocode}
+ \ifx\@unprocessedoptions\relax
+ \let\@unprocessedoptions\@undefined
+% \end{macrocode}
+% Otherwise run the per package set of unused options.
+% \begin{macrocode}
+ \else
+ \csname unprocessedoptions-\@currname.\@currext\endcsname
+ \fi
+% \end{macrocode}
+% In either case we drop the macro afterwards as it is no longer needed.
+% \begin{macrocode}
+ \expandafter\let
+ \csname unprocessedoptions-\@currname.\@currext\endcsname
+ \@undefined}%
% \end{macrocode}
%
% \begin{macrocode}
@@ -1565,8 +1703,82 @@
\reserved@a}
\@onlypreamble\@onefilewithoptions
% \end{macrocode}
+%
+% The kernel no longer uses \cs{@unprocessedoptions}
+% \begin{macrocode}
+\let\@unprocessedoptions\@undefined
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\@onefilewithoptions}{Unused options issue}%
+%<latexrelease>
+% \end{macrocode}
+% Because of the way \cs{@onfilewithoptions} is changed for
+% rollback handling below we have to define
+% \cs{load@onefilewithoptions} when rollowing back!
+% \begin{macrocode}
+%<latexrelease>\def\load@onefilewithoptions#1[#2][#3]#4{%
+%<latexrelease> \@pushfilename
+%<latexrelease> \xdef\@currname{#1}%
+%<latexrelease> \global\let\@currext#4%
+%<latexrelease> \let\CurrentOption\@empty
+%<latexrelease> \@reset@ptions
+%<latexrelease> \makeatletter
+%<latexrelease> \def\reserved@a{%
+%<latexrelease> \@ifl@aded\@currext{#1}%
+%<latexrelease> {\@if@ptions\@currext{#1}{#2}{}%
+%<latexrelease> {\@latex@error
+%<latexrelease> {Option clash for \@cls@pkg\space #1}%
+%<latexrelease> {The package #1 has already been loaded
+%<latexrelease> with options:\MessageBreak
+%<latexrelease> \space\space[\@ptionlist{#1.\@currext}]\MessageBreak
+%<latexrelease> There has now been an attempt to load it
+%<latexrelease> with options\MessageBreak
+%<latexrelease> \space\space[#2]\MessageBreak
+%<latexrelease> Adding the global options:\MessageBreak
+%<latexrelease> \space\space
+%<latexrelease> \@ptionlist{#1.\@currext},#2\MessageBreak
+%<latexrelease> to your \noexpand\documentclass declaration may fix this.%
+%<latexrelease> \MessageBreak
+%<latexrelease> Try typing \space <return> \space to proceed.}}}%
+%<latexrelease> {\@pass@ptions\@currext{#2}{#1}%
+%<latexrelease> \global\expandafter
+%<latexrelease> \let\csname ver@\@currname.\@currext\endcsname\@empty
+%<latexrelease> \expandafter\let\csname\@currname.\@currext-h@@k\endcsname\@empty
+%<latexrelease> \InputIfFileExists
+%<latexrelease> {\@currname.\@currext}%
+%<latexrelease> {}%
+%<latexrelease> {\@missingfileerror\@currname\@currext}%
+%<latexrelease> \let\@unprocessedoptions\@@unprocessedoptions
+%<latexrelease> \csname\@currname.\@currext-h@@k\endcsname
+%<latexrelease> \expandafter\let\csname\@currname.\@currext-h@@k\endcsname
+%<latexrelease> \@undefined
+%<latexrelease> \@unprocessedoptions}%
+%<latexrelease> \@ifl@ter\@currext{#1}{#3}{}%
+%<latexrelease> {\@latex@warning@no@line
+%<latexrelease> {You have requested,\on@line,
+%<latexrelease> version\MessageBreak
+%<latexrelease> `#3' of \@cls@pkg\space #1,\MessageBreak
+%<latexrelease> but only version\MessageBreak
+%<latexrelease> `\csname ver@#1.\@currext\endcsname'\MessageBreak
+%<latexrelease> is available}}%
+%<latexrelease> \ifx\@currext\@clsextension\let\LoadClass\@twoloadclasserror\fi
+%<latexrelease> \@popfilename
+%<latexrelease> \@reset@ptions}%
+%<latexrelease> \reserved@a}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+% \end{macrocode}
% \end{macro}
%
+%
+%
+%
+%
+%
% \begin{macro}{\@@fileswith@pti@ns}
% Save the definition (for error checking).
% \changes{v0.2c}{1993/11/17}
@@ -1593,6 +1805,9 @@
% \end{macrocode}
% \end{macro}
%
+%
+%
+%
% \subsection{Hooks}
%
% Allow code do be saved to be executed at specific later times.
@@ -1760,6 +1975,7 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{environment}{filecontents}
% \begin{macro}{\filecontents}
% \begin{macro}{\endfilecontents}
% This environment implements inline files.
@@ -1776,13 +1992,12 @@
% \changes{v1.0m}{1995/04/21}
% {Close input check stream: latex/1487}
% \changes{v1.0p}{1995/05/25}{Delete \cs{filec@ntents} after preamble}
-% \begin{macrocode}
% \changes{v1.3a}{2019/07/01}{Support UTF8 and spaces in
% filecontents environment file name}
% \changes{v1.3b}{2019/08/27}{Make various commands robust}
% \changes{v1.3c}{2019/09/11}{Support optional argument for filecontents}
% \changes{v1.3f}{2020/01/05}{Support more write streams in LuaTeX gh/238}
-%
+% \begin{macrocode}
%</2ekernel>
%<*2ekernel|latexrelease>
%<latexrelease>\IncludeInRelease{2019/10/01}%
@@ -2142,6 +2357,7 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{environment}
%
%
%
diff --git a/macros/latex-dev/base/ltdefns.dtx b/macros/latex-dev/base/ltdefns.dtx
index 303b9e5604..8b7a307ad2 100644
--- a/macros/latex-dev/base/ltdefns.dtx
+++ b/macros/latex-dev/base/ltdefns.dtx
@@ -32,7 +32,7 @@
%<*driver>
% \fi
\ProvidesFile{ltdefns.dtx}
- [2020/02/27 v1.5g LaTeX Kernel (definition commands)]
+ [2020/05/15 v1.5h LaTeX Kernel (definition commands)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltdefns.dtx}
@@ -118,9 +118,25 @@
%
% \begin{macro}{\typeout}
% Display something on the terminal.
+% \changes{v1.5g}{2020/05/15}{Allow \cs{par} in the argument (gh/335)}
% \begin{macrocode}
-\def\typeout#1{\begingroup\set@display@protect
- \immediate\write\@unused{#1}\endgroup}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\typeout}{Allow "par" in \typeout}%
+\protected\long\def\typeout#1{\begingroup
+ \set@display@protect
+ \def\par{^^J^^J}%
+ \immediate\write\@unused{#1}\endgroup}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\typeout}{Allow "par" in \typeout}%
+%<latexrelease>
+%<latexrelease>\def\typeout#1{\begingroup\set@display@protect
+%<latexrelease> \immediate\write\@unused{#1}\endgroup}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
% \end{macrocode}
% \end{macro}
%
@@ -1560,6 +1576,7 @@
% \changes{v1.0g}{1994/04/12}
% {Define \cs{@dischyph}, was previously in ltboxes.dtx}
% \changes{v1.5b}{2017/03/27}{Define \cs{@dischyph} after \cs{-}}
+% \changes{v1.5h}{2020/05/11}{Do not overwrite \cs{-} under Lua\TeX}
% \end{macro}
% Moved here to be after the definition of |\DeclareRobustCommand|.
%
@@ -1589,35 +1606,56 @@
% older \LaTeX\ definition accessible via \textsf{latexrelease}
% as usual.
%
-% \begin{macrocode}
-%</2ekernel>
-%<latexrelease>\IncludeInRelease{2017/04/15}{\-}{Use \hyphenchar in \-}%
-% \end{macrocode}
+% In Lua\LaTeX\ the primitive definition of \cs{-} is used directly
+% because it's use of extended hyphenation parameters means that \cs{-}
+% works correctly even with \cs{hyphenchar} set to $-1$. This change
+% makes \cs{-} under Lua\LaTeX\ compatible with language specific
+% hyphenation characters.
+%
% Temporary definition of |\@latex@info|, final definition is later.
% \begin{macrocode}
-%<*2ekernel>
\def\@latex@info#1{}
-%</2ekernel>
% \end{macrocode}
%
% \begin{macrocode}
+%</2ekernel>
+%<latexrelease>\IncludeInRelease{2020/10/01}{\-}{Use primitive \- in Lua\LaTeX}%
%<*2ekernel|latexrelease>
-\DeclareRobustCommand{\-}{%
- \discretionary{%
- \char \ifnum\hyphenchar\font<\z@
- \defaulthyphenchar
- \else
- \hyphenchar\font
- \fi
- }{}{}%
-}
-\let\@dischyph=\-
+\ifx\directlua\@undefined
+ \DeclareRobustCommand{\-}{%
+ \discretionary{%
+ \char \ifnum\hyphenchar\font<\z@
+ \defaulthyphenchar
+ \else
+ \hyphenchar\font
+ \fi
+ }{}{}%
+ }
+\else
+ \let\-\@@hyph
+\fi
%</2ekernel|latexrelease>
%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{2017/04/15}{\-}{Use \hyphenchar in \-}%
+%<latexrelease>\DeclareRobustCommand{\-}{%
+%<latexrelease> \discretionary{%
+%<latexrelease> \char \ifnum\hyphenchar\font<\z@
+%<latexrelease> \defaulthyphenchar
+%<latexrelease> \else
+%<latexrelease> \hyphenchar\font
+%<latexrelease> \fi
+%<latexrelease> }{}{}%
+%<latexrelease>}
+%<latexrelease>\EndIncludeInRelease
%<latexrelease>\IncludeInRelease{0000/00/00}{\-}{Use \hyphenchar in \-}%
%<latexrelease>\def\-{\discretionary{-}{}{}}
-%<latexrelease>\let\@dischyph=\-
%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*2ekernel|latexrelease>
+\let\@dischyph=\-
+%</2ekernel|latexrelease>
%<*2ekernel>
% \end{macrocode}
% \end{macro}
diff --git a/macros/latex-dev/base/ltexpl.dtx b/macros/latex-dev/base/ltexpl.dtx
index e86b80acaf..5e726298b2 100644
--- a/macros/latex-dev/base/ltexpl.dtx
+++ b/macros/latex-dev/base/ltexpl.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltexpl.dtx}
- [2020-03-05 v1.1 LaTeX Kernel (expl3-dependent code)]
+ [2020-05-03 v1.2b LaTeX Kernel (expl3-dependent code)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltfinal.dtx}
@@ -75,7 +75,8 @@
% \changes{v1.0a}{2020/03/02}
% {Don't load expl3 if already in the format (gh/295)}
% \changes{v1.1}{2020/03/05}
-% {Load xparse.ltx if \cs{NewDocumentCommand} is not defined by expl3.ltx}
+% {Load xparse.ltx if \cs{NewDocumentCommand} is not defined
+% by expl3.ltx}
% \begin{macrocode}
\expandafter\ifx\csname tex\string _let:D\endcsname\relax
\IfFileExists{expl3.ltx}
@@ -111,6 +112,44 @@
\fi
%</2ekernel|latexrelease>
%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% \subsection{Using expl3 code}
+%
+% \begin{macrocode}
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\@expl@tl@trim@spaces@apply@@nN}
+%<latexrelease> {l3 macro for use in include}%
+% \end{macrocode}
+% In order to ease the implemantation of some new features in
+% \LaTeXe\ we may (temporarily) use some coding based on the
+% \pkg{expl3}-code.
+% Such macros will eventually vanish and may be changed
+% unannounced. They are there for internal use in the \LaTeXe\
+% kernel and are not meant to be used in third-party
+% packages. These macros will always have the \verb|@expl@|
+% prefix in their name.
+%
+% \changes{v1.2a}{2020/05/02}
+% {Define a macro based on l3 language to support inclusion of
+% files with space in the name (gh/217)}
+% \begin{macrocode}
+\ExplSyntaxOn
+\cs_new_eq:NN \@expl@tl@trim@spaces@apply@@nN \tl_trim_spaces_apply:nN
+\ExplSyntaxOff
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\@expl@tl@trim@spaces@apply@@nN}
+%<latexrelease> {l3 macro for use in include}%
+%<latexrelease>
+%<latexrelease>\let\@expl@tl@trim@spaces@apply@@nN\@undefined
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
%<*2ekernel>
% \end{macrocode}
%
diff --git a/macros/latex-dev/base/ltfiles.dtx b/macros/latex-dev/base/ltfiles.dtx
index 33594a7b91..8e9611d918 100644
--- a/macros/latex-dev/base/ltfiles.dtx
+++ b/macros/latex-dev/base/ltfiles.dtx
@@ -32,7 +32,7 @@
%<*driver>
% \fi
\ProvidesFile{ltfiles.dtx}
- [2019/11/11 v1.2f LaTeX Kernel (File Handling)]
+ [2020-05-05 v1.2g LaTeX Kernel (File Handling)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltfiles.dtx}
@@ -542,15 +542,32 @@
% \begin{macro}{\includeonly}
% \changes{v1.0p}{1995/04/22}{Allow blanks in argument}
% \changes{v1.2a}{2019/07/01}{Support UTF-8}
+% \changes{v1.2g}{2020/05/02}{Improved support for spaces in filenames
+% (gh/217)}
% \begin{macrocode}
%</2ekernel>
%<*2ekernel|latexrelease>
-%<latexrelease>\IncludeInRelease{2019/10/01}%
+%<latexrelease>\IncludeInRelease{2020/10/01}%
%<latexrelease> {\includeonly}{Spaces in file names}%
\def\includeonly#1{%
\@partswtrue
- \set@curr@file{\zap@space#1 \@empty}%
- \let\@partlist\@curr@file
+% \end{macrocode}
+% Because the argument to |\includeonly| is a comma-separated list
+% of filenames where there may be comma's precedeing some of the
+% filenames or trailing them. Therefore we need to take the list
+% apart, remove the unwanted spaces while leaving the spaces
+% \emph{in} the filenames intact.
+% \begin{macrocode}
+ \let\@partlist\@empty
+ \@for\reserved@a:=#1 \do
+ {
+ \expandafter\set@curr@file@trim@spaces\expandafter{\reserved@a}%
+ \ifx\@partlist\@empty
+ \edef\@partlist{\@curr@file}%
+ \else
+ \edef\@partlist{\@partlist,\@curr@file}%
+ \fi
+ }%
}
\@onlypreamble\includeonly
% \end{macrocode}
@@ -572,21 +589,68 @@
%
% Made |\include| check for being used inside an |\include|'d file, as
% this will not work and cause surprising results.
+% \changes{v1.2g}{2020/05/02}{Get rid of leading and trailing spaces
+% from the filename (gh/217)}
+% \changes{v1.2g}{2020-05-02}{Pass the filename to \cs{@include} by
+% value instead of by reference (gh/217)}
% \begin{macrocode}
\def\include#1{\relax
\ifnum\@auxout=\@partaux
\@latex@error{\string\include\space cannot be nested}\@eha
\else
- \set@curr@file{#1 }%
- \expandafter\@include\@curr@file
+ \set@curr@file@trim@spaces{#1}%
+% \end{macrocode}
+% For historical reasons \cs{@include} expects an argument
+% delimited by a space. This is kept (though uncessary now) to avoid
+% errors in other packages that use \cs{@include} directly.
+% \begin{macrocode}
+ \expandafter\@include\expandafter{\@curr@file} % deliberate space
\fi}
% \end{macrocode}
% \end{macro}
%
%
+%
+% \begin{macro}{\set@curr@file@trim@spaces}
+%
+% For |\include| and |\includeonly| we need a variant that removes
+% any leading and trailing spaces from the filename, while leaving
+% any spaces \emph{inside} the filename intact. In order simplify
+% the implementaion we borrow some code from the \texttt{expl3}
+% language, \textbf{\emph{beware}: this may change unannounced}.
+% \begin{macrocode}
+\def\set@curr@file@trim@spaces#1{%
+ \@expl@tl@trim@spaces@apply@@nN {#1} \set@curr@file }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
% \begin{macrocode}
%</2ekernel|latexrelease>
%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{2019/10/01}%
+%<latexrelease> {\includeonly}{Spaces in file names}%
+%<latexrelease>
+%<latexrelease>\def\includeonly#1{%
+%<latexrelease> \@partswtrue
+%<latexrelease> \set@curr@file{\zap@space#1 \@empty}%
+%<latexrelease> \let\@partlist\@curr@file
+%<latexrelease> }
+%<latexrelease>
+%<latexrelease>\def\include#1{\relax
+%<latexrelease> \ifnum\@auxout=\@partaux
+%<latexrelease> \@latex@error{\string\include\space cannot be nested}\@eha
+%<latexrelease> \else
+%<latexrelease> \set@curr@file{#1 }%
+%<latexrelease> \expandafter\@include\@curr@file
+%<latexrelease> \fi}
+%<latexrelease>
+%<latexrelease>\let\set@curr@file@trim@spaces\@undefined
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% \begin{macrocode}
%<latexrelease>\IncludeInRelease{0000/00/00}%
%<latexrelease> {\includeonly}{Spaces in file names}%
%<latexrelease>\def\includeonly#1{%
@@ -604,11 +668,20 @@
%
% \begin{macro}{\@include}
+% \changes{v1.2g}{2020/05/02}{Support spaces in filenames by enclosing
+% the names of \texttt{.aux}-files in quotes (gh/217)}
+% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\@include}{Spaces in file names}%
+% \end{macrocode}
+%
% \begin{macrocode}
\def\@include#1 {%
\clearpage
\if@filesw
- \immediate\write\@mainaux{\string\@input{#1.aux}}%
+ \immediate\write\@mainaux{\string\@input{"#1.aux"}}%
\fi
\@tempswatrue
\if@partsw
@@ -620,7 +693,7 @@
\if@tempswa
\let\@auxout\@partaux
\if@filesw
- \immediate\openout\@partaux #1.aux
+ \immediate\openout\@partaux "#1.aux"
\immediate\write\@partaux{\relax}%
\fi
\@input@{#1.tex}%
@@ -640,6 +713,42 @@
\@nameuse{cp@#1}%
\fi
\let\@auxout\@mainaux}
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\@include}{Spaces in file names}%
+%<latexrelease>\def\@include#1 {%
+%<latexrelease> \clearpage
+%<latexrelease> \if@filesw
+%<latexrelease> \immediate\write\@mainaux{\string\@input{#1.aux}}%
+%<latexrelease> \fi
+%<latexrelease> \@tempswatrue
+%<latexrelease> \if@partsw
+%<latexrelease> \@tempswafalse
+%<latexrelease> \edef\reserved@b{#1}%
+%<latexrelease> \@for\reserved@a:=\@partlist\do
+%<latexrelease> {\ifx\reserved@a\reserved@b\@tempswatrue\fi}%
+%<latexrelease> \fi
+%<latexrelease> \if@tempswa
+%<latexrelease> \let\@auxout\@partaux
+%<latexrelease> \if@filesw
+%<latexrelease> \immediate\openout\@partaux #1.aux
+%<latexrelease> \immediate\write\@partaux{\relax}%
+%<latexrelease> \fi
+%<latexrelease> \@input@{#1.tex}%
+%<latexrelease> \clearpage
+%<latexrelease> \@writeckpt{#1}%
+%<latexrelease> \if@filesw
+%<latexrelease> \immediate\closeout\@partaux
+%<latexrelease> \fi
+%<latexrelease> \else
+%<latexrelease> \deadcycles\z@
+%<latexrelease> \@nameuse{cp@#1}%
+%<latexrelease> \fi
+%<latexrelease> \let\@auxout\@mainaux}
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
% \end{macrocode}
% \end{macro}
%
@@ -698,8 +807,8 @@
% the code in \texttt{utf8.def}). By setting \cs{escapchar} to
% \texttt{-1} we ensure that we don't get a backslash in front. As a
% result we end up with all characters as catcode 12 (plus
-% spaces). We then sometimes add quotes around the contruct
-% (removing any existing inner quotes. Somes we only remove the
+% spaces). We then sometimes add quotes around the construct
+% (removing any existing inner quotes. Sometimes we only remove the
% quotes if they have been supplied by the user. There is clearly
% some room for improvement.
%
diff --git a/macros/latex-dev/base/ltfloat.dtx b/macros/latex-dev/base/ltfloat.dtx
index 23c3f464d3..dee9a10197 100644
--- a/macros/latex-dev/base/ltfloat.dtx
+++ b/macros/latex-dev/base/ltfloat.dtx
@@ -31,7 +31,7 @@
%
%<*driver>
% \fi
-\ProvidesFile{ltfloat.dtx}[2015/02/21 v1.2c LaTeX Kernel (Floats)]
+\ProvidesFile{ltfloat.dtx}[2020/04/09 v1.2d LaTeX Kernel (Floats)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltfloat.dtx}
@@ -1327,13 +1327,36 @@
% always start with a font selection command, to activate the font
% size switch.
% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\@textsuperscript}{superscript baseline}%
\def\@textsuperscript#1{%
- {\m@th\ensuremath{^{\mbox{\fontsize\sf@size\z@#1}}}}}
+ {\m@th\ensuremath{^{\mbox{\fontsize\sf@size\sf@size#1}}}}}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\@textsuperscript}{superscript baseline}%
+%<latexrelease>
+%<latexrelease>\def\@textsuperscript#1{%
+%<latexrelease> {\m@th\ensuremath{^{\mbox{\fontsize\sf@size\z@#1}}}}}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
% \end{macrocode}
% \end{macro}
%
+%
+%
+%
+%
+%
+%
% \begin{macro}{\textsubscript}
% \changes{v1.2a}{2014/12/30}{Command added (latexrelease)}
+% \changes{v1.2d}{2020/04/09}{Set non-zero baseline (gh/249)}
% \begin{macrocode}
%</2ekernel>
%<latexrelease>\IncludeInRelease{2015/01/01}%
@@ -1345,27 +1368,54 @@
\DeclareRobustCommand*\textsubscript[1]{%
\@textsubscript{\selectfont#1}}%
% \end{macrocode}
+%
+% \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\textsubscript}{\textsubscript}%
+%<latexrelease>\let\textsubscript\@undefined
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+% \end{macrocode}
% \end{macro}
%
+%
+%
+%
% \begin{macro}{\@textsubscript}
% \changes{v1.2a}{2014/12/30}{Command added (latexrelease)}
-%
+% \changes{v1.2d}{2020/04/09}{Set non-zero baseline (gh/249)}
% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\@textsubscript}{subscript baseline}%
\def\@textsubscript#1{%
- {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}}
+ {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\sf@size#1}}}}}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{2015/01/01}%
+%<latexrelease> {\@textsubscript}{subscript baseline}%
+%<latexrelease>
+%<latexrelease>\def\@textsubscript#1{%
+%<latexrelease> {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}}
% \end{macrocode}
-% \end{macro}
%
% \begin{macrocode}
-%</2ekernel|latexrelease>
%<latexrelease>\EndIncludeInRelease
%<latexrelease>\IncludeInRelease{0000/00/00}%
-%<latexrelease> {\textsubscript}{\textsubscript}%
-%<latexrelease>\let\textsubscript\@undefined
+%<latexrelease> {\@textsubscript}{subscript baseline}%
%<latexrelease>\let\@textsubscript\@undefined
%<latexrelease>\EndIncludeInRelease
%<*2ekernel>
% \end{macrocode}
+% \end{macro}
+%
+%
%
% \begin{macro}{\footnotesep}
% \begin{macrocode}
diff --git a/macros/latex-dev/base/ltfssaxes.dtx b/macros/latex-dev/base/ltfssaxes.dtx
index 58d9aa159e..08a0ff1b4c 100644
--- a/macros/latex-dev/base/ltfssaxes.dtx
+++ b/macros/latex-dev/base/ltfssaxes.dtx
@@ -35,7 +35,7 @@
%
%
\ProvidesFile{ltfssaxes.dtx}
- [2020/03/02 v1.0e LaTeX Kernel (NFSS Axes handing)]
+ [2020/05/19 v1.0f LaTeX Kernel (NFSS Axes handing)]
% \iffalse
\documentclass{ltxdoc}
\begin{document}
@@ -695,7 +695,7 @@
%
% \begin{macro}{\fontseriesforce}
% To change unconditionally to a new series you can use
-% \cs{fontseriesforce}. If course, if the series doesn't exist for
+% \cs{fontseriesforce}. Of course, if the series doesn't exist for
% the current family substitution still happens, but there is not
% dependency on the current series.
% \changes{v1.0c}{2020/02/10}{Switch \cs{if@forced@series} added}
@@ -881,7 +881,16 @@
,ulm,elm,lm,slm,mm,sbm,bm,ebm,ubm,muc,mec,mc,msc,msx,mx,mex,mux,{}{},#1,}%
\edef\in@@{\the\series@check@toks}%
\ifx\in@@\@empty
- \def#2{#1}%
+% \end{macrocode}
+% The default definition for \cs{bfdefault} etc is actually
+% \texttt{b\cs{@empty}} so that we can detect if the user has
+% changed the default. However that means a) the above test will
+% definitely fail (maybe something to change) and b) we better use
+% \cs{edef} on the next line to get rid of it as otherwise the test
+% against \verb=#2= (e.g. \cs{bfdef@ult}) will fail in other places.
+% \changes{v1.0e}{2020/05/19}{Need to use \cs{edef} (gh/336)}
+% \begin{macrocode}
+ \edef#2{#1}%
\else
\edef#2{\expandafter\series@drop@one@m #1m\series@drop@one@m}%
\fi
diff --git a/macros/latex-dev/base/ltfssbas.dtx b/macros/latex-dev/base/ltfssbas.dtx
index 5715106ca6..4a6afca3ac 100644
--- a/macros/latex-dev/base/ltfssbas.dtx
+++ b/macros/latex-dev/base/ltfssbas.dtx
@@ -1850,7 +1850,7 @@
% Finally, it is not possible to simply call the new definition
% since we
% have an argument (the third argument of |\use@mathgroup|
-% or more exactly the argument od |\math@egroup| if the {\ttfamily
+% or more exactly the argument of |\math@egroup| if the {\ttfamily
% margid} option is in force)
% which would swallow our closing |\fi|. So
% we use the |\expandafter| technique to remove the |\fi|
diff --git a/macros/latex-dev/base/ltfssdcl.dtx b/macros/latex-dev/base/ltfssdcl.dtx
index 951c6de2e5..291cd1368f 100644
--- a/macros/latex-dev/base/ltfssdcl.dtx
+++ b/macros/latex-dev/base/ltfssdcl.dtx
@@ -36,7 +36,7 @@
%
%
\ProvidesFile{ltfssdcl.dtx}
- [2020/01/20 v3.0t LaTeX Kernel (NFSS Declarative Interface)]
+ [2020/03/19 v3.0v LaTeX Kernel (NFSS Declarative Interface)]
% \iffalse
\documentclass{ltxdoc}
\begin{document}
@@ -465,7 +465,7 @@
% \changes{v3.0q}{2015/03/18}{Introduce \cs{e@mathgroup@top}}
% \begin{macrocode}
%</2ekernel>
-%<latexrelease>\IncludeInRelease{2015/01/01}
+%<latexrelease>\IncludeInRelease{2020/10/01}
%<latexrelease> {\document@select@group}{\document@select@group}%
%<*2ekernel|latexrelease>
\def\document@select@group#1#2#3#4{%
@@ -491,13 +491,54 @@
\@eha
\fi
\else \expandafter\non@alpherr\fi
- #1{#4}%
+% \end{macrocode}
+% If the legacy interface is used, e.g., \verb=$\sf -1$= the math
+% alphabet \verb=#1= does not take an argument so we better do not
+% surround \verb=#4= with braces, because then we get
+% \verb={\relax}= into the formula and introduce an extra Ord
+% atom. The two different cases can be distinguished by looking at
+% the current value of \cs{math@bgroup}.
+% \changes{v3.0u}{2020/03/19}{fix for (gnats/3357)}
+% \begin{macrocode}
+ \expandafter#1\ifx\math@bgroup\bgroup{#4}\else#4\fi
}%
}
%</2ekernel|latexrelease>
%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{2015/01/01}
+%<latexrelease> {\document@select@group}{\document@select@group}%
+%<latexrelease>
+%<latexrelease>\def\document@select@group#1#2#3#4{%
+%<latexrelease> \ifx\math@bgroup\bgroup\else\relax\expandafter\@firstofone\fi
+%<latexrelease> {%
+%<latexrelease> \ifmmode
+%<latexrelease> \ifnum\csname c@mv@\math@version\endcsname<\e@mathgroup@top
+%<latexrelease> \begingroup
+%<latexrelease> \escapechar\m@ne
+%<latexrelease> \getanddefine@fonts{\csname c@mv@\math@version\endcsname}#3%
+%<latexrelease> \globaldefs\@ne \math@fonts
+%<latexrelease> \endgroup
+%<latexrelease> \expandafter\extract@alph@from@version
+%<latexrelease> \csname mv@\math@version\expandafter\endcsname
+%<latexrelease> \expandafter{\number\csname
+%<latexrelease> c@mv@\math@version\endcsname}%
+%<latexrelease> #1%
+%<latexrelease> \global\advance\csname c@mv@\math@version\endcsname\@ne
+%<latexrelease> \else
+%<latexrelease> \let#1\relax
+%<latexrelease> \@latex@error{Too many math alphabets used
+%<latexrelease> in version \math@version}%
+%<latexrelease> \@eha
+%<latexrelease> \fi
+%<latexrelease> \else \expandafter\non@alpherr\fi
+%<latexrelease> #1{#4}%
+%<latexrelease> }%
+%<latexrelease>}
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>
%<latexrelease>\IncludeInRelease{0000/00/00}
%<latexrelease> {\document@select@group}{\document@select@group}%
+%<latexrelease>
%<latexrelease>\def\document@select@group#1#2#3#4{%
%<latexrelease> \ifx\math@bgroup\bgroup\else\relax\expandafter\@firstofone\fi
%<latexrelease> {%
@@ -582,17 +623,19 @@
% \begin{macrocode}
\let\select@group\document@select@group
% \end{macrocode}
-% Install the default font attributes they are currently pointing
-% to error font shape.
+% Install the default font attributes as they are currently pointing
+% to error font face. We can speed up the process by just using
+% \cs{edef}, thereby avoiding all kind of extra processing.
% Don't use |\reset@font| since that would trigger |\selectfont|.
+% \changes{v3.0v}{2020/04/13}{Small update for speed.}
% \begin{macrocode}
- \fontencoding{\encodingdefault}%
- \fontfamily{\familydefault}%
- \fontseries{\seriesdefault}%
- \fontshape{\shapedefault}%
+ \fontencoding\encodingdefault
+ \edef\f@family{\familydefault}%
+ \edef\f@series{\seriesdefault}%
+ \edef\f@shape{\shapedefault}%
% \end{macrocode}
-% kill all macros not longer needed.
-% we need to add many more!!!!!!
+% Drop stuff not longer needed.
+% We need to add many more!!!!!!
% \begin{macrocode}
\everyjob{}%
}
diff --git a/macros/latex-dev/base/ltfssini.dtx b/macros/latex-dev/base/ltfssini.dtx
index 3947b4d953..952025375b 100644
--- a/macros/latex-dev/base/ltfssini.dtx
+++ b/macros/latex-dev/base/ltfssini.dtx
@@ -36,7 +36,7 @@
%
%
\ProvidesFile{ltfssini.dtx}
- [2020/03/02 v3.1k LaTeX Kernel (NFSS Initialisation)]
+ [2020/05/19 v3.2a LaTeX Kernel (NFSS Initialisation)]
% \iffalse
\documentclass{ltxdoc}
\begin{document}
@@ -288,8 +288,16 @@
\ifx\reserved@a\@empty
\ifcsname #2series\endcsname % supported are
% \[md/bf]default
+% \end{macrocode}
+% Adding \cs{@empty} allows us to detect if the default gets
+% redefined with \cs{renewcommand} or \cs{def} by the user.
+% \changes{v3.1k}{2020/03/19}{Support legacy use of \cs{bfdefault}
+% and \cs{mddefault} (gh/306)}
+% \begin{macrocode}
\expandafter\def
- \csname #2default\endcsname{#3}%
+ \csname #2default\endcsname{#3\@empty}%
+ \expandafter\def
+ \csname #2default@previous\endcsname{#3\@empty}%
\else
% \end{macrocode}
%
@@ -381,6 +389,11 @@
% \begin{macro}{\expand@font@defaults}
+% \begin{macro}{\rm@def@ult}
+% \begin{macro}{\sf@def@ult}
+% \begin{macro}{\tt@def@ult}
+% \begin{macro}{\md@def@ult}
+% \begin{macro}{\bf@def@ult}
%
% The family specific defaults are fully expanded, i.e., they are
% defined via \cs{edef} inside \cs{DeclareFontSeriesDefault}.
@@ -402,10 +415,19 @@
% \begin{macrocode}
\series@maybe@drop@one@m\bfdefault\bfdef@ult
\series@maybe@drop@one@m\mddefault\mddef@ult
- \edef\famdef@ult{\familydefault}%
+% \end{macrocode}
+% Formats that set up parallel fonts, e.g., for Japanese, can use
+% this hook to add additional code here.
+% \changes{v3.1m}{2020/04/06}{Hook added (gh/306)}
+% \begin{macrocode}
+ \@expandfontdefaultshook
}
% \end{macrocode}
-%
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
% \end{macro}
@@ -425,6 +447,41 @@
% of \cs{fontseries} argument so that it is not done several times}
% \begin{macrocode}
\expand@font@defaults
+% \end{macrocode}
+% If \cs{bfdefault} and \cs{befdefault@previous} are different then
+% the default got changed directly through the legacy interface
+% (i.e., via \cs{def} or \cs{renewcommand}. In that case we reset
+% all meta family defaults so that the document behaves like it was
+% the case before the new mechanism was introduced.
+% \changes{v3.1k}{2020/03/19}{Support legacy use of \cs{bfdefault}
+% and \cs{mddefault} (gh/306)}
+% \begin{macrocode}
+ \ifx\bfdefault\bfdefault@previous\else
+% \end{macrocode}
+% We add \cs{@empty} and then let \cs{bfdefault@previous} to
+% \cs{bfdefault} so that we can detect any further change.
+% \begin{macrocode}
+ \expandafter\def\expandafter\bfdefault
+ \expandafter{\bfdefault\@empty}%
+ \let\bfseries@previous\bfdefault
+% \end{macrocode}
+% And we reset the meta family defaults (\cs{bfdef@ult} is an
+% expanded version of \cs{bfdefault}.
+% \begin{macrocode}
+ \let\bfseries@rm\bfdef@ult
+ \let\bfseries@sf\bfdef@ult
+ \let\bfseries@tt\bfdef@ult
+% \end{macrocode}
+%
+% Formats that set up parallel fonts, e.g., for Japanese, can use
+% this hook to add resets here.
+% \changes{v3.1m}{2020/04/06}{Hook added (gh/306)}
+% \begin{macrocode}
+ \@setbfseriesdefaultshook
+ \fi
+% \end{macrocode}
+%
+% \begin{macrocode}
\ifx\f@family\rmdef@ult \fontseries\bfseries@rm
\else\ifx\f@family\sfdef@ult \fontseries\bfseries@sf
\else\ifx\f@family\ttdef@ult \fontseries\bfseries@tt
@@ -444,10 +501,26 @@
% This document command switches to the medium series.
% \changes{v3.1i}{2020/02/18}{Make the \cs{ifx} selection outside
% of \cs{fontseries} argument so that it is not done several times}
+% \changes{v3.1k}{2020/03/19}{Support legacy use of \cs{bfdefault}
+% and \cs{mddefault} (gh/306)}
% \begin{macrocode}
\DeclareRobustCommand\mdseries{%
\not@math@alphabet\mdseries\relax
\expand@font@defaults
+ \ifx\mddefault\mddefault@previous\else
+ \expandafter\def\expandafter\mddefault\expandafter{\mddefault\@empty}%
+ \let\mdseries@previous\mddefault
+ \let\mdseries@rm\mddef@ult
+ \let\mdseries@sf\mddef@ult
+ \let\mdseries@tt\mddef@ult
+% \end{macrocode}
+%
+% Formats that set up parallel fonts, e.g., for Japanese, can use
+% this hook to add resets here.
+% \changes{v3.1m}{2020/04/06}{Hook added (gh/306)}
+% \begin{macrocode}
+ \@setmdseriesdefaultshook
+ \fi
\ifx\f@family\rmdef@ult \fontseries\mdseries@rm
\else\ifx\f@family\sfdef@ult \fontseries\mdseries@sf
\else\ifx\f@family\ttdef@ult \fontseries\mdseries@tt
@@ -610,11 +683,20 @@
% \end{macro}
%
%
+% \begin{macro}{\@expandfontdefaultshook}
+% \begin{macro}{\@setbfseriesdefaultshook}
+% \begin{macro}{\@setmdseriesdefaultshook}
% \begin{macro}{\@rmfamilyhook}
% \begin{macro}{\@sffamilyhook}
% \begin{macro}{\@ttfamilyhook}
% By default the hooks do nothing.
% \begin{macrocode}
+\let\@expandfontdefaultshook\@empty
+\let\@setbfseriesdefaultshook\@empty
+\let\@setmdseriesdefaultshook\@empty
+% \end{macrocode}
+%
+% \begin{macrocode}
\let\@rmfamilyhook\@empty
\let\@sffamilyhook\@empty
\let\@ttfamilyhook\@empty
@@ -622,6 +704,9 @@
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
%
%
%
@@ -873,23 +958,42 @@
% \end{macrocode}
%
% If the document preamble has changed the \cs{familydefault} or if
-% the if the \cs{rmdefault} contains a new font family, we have to
+% the if the \cs{rmdefault} contains a new font family, we may have to
% adjust the series defaults accordingly, before starting
% typesetting.
-%
-% On the other hand if we still typeset in CM or LM then
-% \cs{bfdefault} is wrong since it is now saying \texttt{b} and not
-% \texttt{bx}.
-
-% To fix this we run \cs{rmfamily}, \cs{sffamily} or
-% \cs{ttfamily} depending on the situation and this will correct
-% the setup for us.
-% \begin{macrocode}
- \expand@font@defaults
- \ifx\famdef@ult\rmdef@ult \rmfamily
- \else\ifx\famdef@ult\sfdef@ult \sffamily
- \else\ifx\famdef@ult\ttdef@ult \ttfamily
- \fi\fi\fi
+%
+% Similarly, if the user has changed the \cs{mddefault} or the
+% medium series for the family selected as document font we may
+% also have to adjust the \cs{seriesdefault}.
+%
+% On the other hand if the document font is still CM or LM then
+% \cs{bfdefault} is wrong, because it is now saying \texttt{b} and not
+% \texttt{bx} as it should for such fonts.
+%
+% To fix all this we first run \cs{reset@font} (the internal kernel
+% name for \cs{normalfont}). This will set up the document encoding,
+% family, series and shape based on the current values of
+% \cs{encodingdefault}, \cs{familydefault}, \cs{seriesdefault} and
+% \cs{shapedefault}.
+% However, if the family (from \cs{familydefault}) has special medium
+% default we should switch to that (and not use what is current
+% value from \cs{seriesdefault}). This can be achieved by afterwards
+% calling \cs{mediumseries} and then changing \cs{seriesdefault} to
+% the now current series value (in \cs{f@series}).
+%
+% But what should happen if \cs{seriesdefault} got explicitly
+% changed? In that case the explicit change should surive and we
+% should not alter \cs{seriesdefault}. This is solved by comparing
+% the current value of \cs{seriesdefault} with a kernel version
+% saved in the format and if they differ we do not call
+% \cs{mdseries} or change \cs{seriesdefault}.
+% \changes{v3.1n}{2020/04/13}{Handling \cs{seriesdefault} changes (gh/315)}
+% \begin{macrocode}
+ \reset@font
+ \ifx\seriesdefault\seriesdefault@kernel
+ \mdseries
+ \let\seriesdefault\f@series
+ \fi
}%
% \end{macrocode}
% \end{macro}
@@ -948,6 +1052,9 @@
%<latexrelease> {\not@math@alphabet\ttfamily\mathtt
%<latexrelease> \fontfamily\ttdefault\selectfont}
%<latexrelease>
+%<latexrelease>\let\@expandfontdefaultshook\@undefined
+%<latexrelease>\let\@setbfseriesdefaultshook\@undefined
+%<latexrelease>\let\@setmdseriesdefaultshook\@undefined
%<latexrelease>\let\@rmfamilyhook\@undefined
%<latexrelease>\let\@sffamilyhook\@undefined
%<latexrelease>\let\@ttfamilyhook\@undefined
@@ -963,9 +1070,166 @@
%<latexrelease>\EndIncludeInRelease
%<*2ekernel>
% \end{macrocode}
+%
+%
+%
+% \begin{macro}{\IfFontSeriesContextTF}
+%
+% With the ability for \cs{bfseries} or \cs{mdseries} to be mapped
+% to different NFSS axis values it becomes important to have the
+% ability to determine the current context as we can no longer look
+% at \cs{f@series} to answer a question such as ``am I currently
+% typsetting in a bold typeface?''
+%
+% This is provided by the test \cs{IfFontSeriesContextTF}. It takes
+% three arguments:
+% \begin{itemize}
+% \item
+% The context we try to check (either \texttt{bf} for bold or
+% \texttt{md} for medium, i.e., the same that can go into the
+% first mandatory argument of \cs{DeclareFontSeriesDefault}),
+%
+% \item
+% what to do if we are in this context (true case) and
+%
+% \item
+% what to do if we are not (false case).
+% \end{itemize}
+% This allows you to define commands like \cs{IfBold}, e.g.,
+%\begin{verbatim}
+% \newcommand\IfBold[2]{\IfSeriesContextTF{bf}{#1}{#2}}
+%\end{verbatim}
+% and then do
+%\begin{verbatim}
+% This is \IfBold{bold}{non-bold} text.
+%\end{verbatim}
+% and get the appropriate result.
+%
+% \changes{v3.2a}{2020/05/19}{Macros added (gh/335)}
+% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\IfFontSeriesContext}{Font series context}%
+\DeclareRobustCommand\IfFontSeriesContextTF[1]{%
+ \expand@font@defaults
+% \end{macrocode}
+% In the beginning we haven't found the context we are loking for.
+% \begin{macrocode}
+ \@font@series@contextfalse
+% \end{macrocode}
+% We store the requested context away for use in the tests.
+% \begin{macrocode}
+ \def\requested@test@context{#1}%
+% \end{macrocode}
+% The next definition is there to ensure that get a final match
+% during testing
+% even if the current family is non of the meta families
+% (\texttt{rm}, \texttt{sf} or \texttt{tt}). This will then
+% basically tests if the current font family matches the overall default.
+% \begin{macrocode}
+ \expandafter\edef\csname ??def@ult\endcsname{\f@family}%
+% \end{macrocode}
+% Then we run through the meta family list (currently containing
+% just the three values) followed by the artifical meta family
+% \texttt{??} and test each of them in turn using
+% \cs{test@font@series@context} as the testing command.
+% \begin{macrocode}
+ \let\@elt\test@font@series@context
+ \@meta@family@list
+ \@elt{??}%
+ \let\@elt\relax
+% \end{macrocode}
+% Following that we evaluate the status of
+% \cs{if@font@series@context} to determine which of the remaining
+% arguments (true/false case) we have to execute.
+% \begin{macrocode}
+ \if@font@series@context
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\test@font@series@context}
+% This tests the context (stored in \cs{requested@test@context})
+% and updates the bookean if the right context is found.
+% \begin{macrocode}
+\def\test@font@series@context#1{%
+% \end{macrocode}
+% First task is to figure out whether the current family matches
+% \cs{rmfamily}, \cs{sffamily}, etc.\ so in \cs{reserved@a} we
+% store the value of \cs{rmdef@ult} (or whatever the given meta
+% family is) and compare that to \cs{f@family}.
+% \begin{macrocode}
+ \edef\reserved@a{\csname #1def@ult\endcsname}%
+ \ifx\f@family\reserved@a
+% \end{macrocode}
+% If they match we have found the right meta family so we don't
+% need to test any of the remaining meta family and therefore
+% change \cs{@elt} to \cs{@gobble}.
+% \begin{macrocode}
+ \let\@elt\@gobble
+% \end{macrocode}
+% Now we have to test if \cs{f@series} matches the requested
+% context (e.g., whether \cs{bfseries@rm} has that value if the
+% current meta family is \texttt{rm} and we are looking for the
+% \texttt{bf} context).
+% \begin{macrocode}
+ \expandafter\ifx
+ \csname\requested@test@context series@#1\endcsname\f@series
+% \end{macrocode}
+% If yes we change the boolean and are done.
+% \begin{macrocode}
+ \@font@series@contexttrue
+% \end{macrocode}
+% If not then maybe the reason is that nothing special was set up
+% for that meta family so we also check now check if \cs{f@series}
+% matches the overall default (e.g., \cs{bfdef@ult} if we are
+% looking for the bold context). If that matches we change the boolean.
+% \begin{macrocode}
+ \else
+ \expandafter\ifx
+ \csname\requested@test@context def@ult\endcsname\f@series
+ \@font@series@contexttrue
+ \fi\fi\fi
+}
+% \end{macrocode}
+% \end{macro}
+
+
+% \begin{macro}{\if@font@series@context}
+% The boolean to signal if we found the requested font series context.
+% \begin{macrocode}
+\newif\if@font@series@context
+% \end{macrocode}
+% \end{macro}
%
%
+% \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\IfFontSeriesContext}{Font series context}%
+%<latexrelease>
+%<latexrelease>\let\IfFontSeriesContextTF\@undefined
+%<latexrelease>\let\test@font@series@context\@undefined
+%<latexrelease>\let\if@font@series@context\@undefined
+%<latexrelease>\let\@font@series@contexttrue\@undefined
+%<latexrelease>\let\@font@series@contextfalse\@undefined
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+% \end{macrocode}
+
+
+
%
% \section{Supporting nested emphasis}
%
@@ -1565,6 +1829,26 @@
% \end{macrocode}
%
%
+%
+% \begin{macro}{\seriesdefault}
+% \begin{macro}{\seriesdefault@kernel}
+% After \cs{seriesdefault} got defined inside \texttt{fonttext.ltx}
+% or a \texttt{.cfg} file overwriting it, we alter its value by
+% appending \cs{@empty} to it. This will vanish if expanded but
+% allows us to check if the default gets altered (even to the same
+% value) in the document preamble. All we have to do is to save the
+% current value somewhere and later compare the two. For this we
+% use \cs{seriesdefault@kernel}.
+% \changes{v3.1n}{2020/04/13}{Handling \cs{seriesdefault} changes (gh/315)}
+% \begin{macrocode}
+\expandafter\def\expandafter\seriesdefault\expandafter{\seriesdefault\@empty}
+\let\seriesdefault@kernel\seriesdefault
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
% \begin{macro}{\@acci}
% \begin{macro}{\@accii}
% \begin{macro}{\@acciii}
diff --git a/macros/latex-dev/base/ltlists.dtx b/macros/latex-dev/base/ltlists.dtx
index e8c9ebc16b..653e4e2edd 100644
--- a/macros/latex-dev/base/ltlists.dtx
+++ b/macros/latex-dev/base/ltlists.dtx
@@ -31,7 +31,7 @@
%<*driver>
% \fi
\ProvidesFile{ltlists.dtx}
- [2015/05/10 v1.0t LaTeX Kernel (List Environments)]
+ [2020/04/24 v1.0t LaTeX Kernel (List Environments)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltlists.dtx}
@@ -546,6 +546,7 @@
% \end{macrocode}
% \end{macro}\end{macro}\end{macro}
%
+% \begin{environment}{list}
% \begin{macro}{\list}
% \begin{macrocode}
\def\list#1#2{%
@@ -572,6 +573,7 @@
\ignorespaces}
% \end{macrocode}
% \end{macro}
+% \end{environment}
%
% \begin{macro}{\par@deathcycles}
% \begin{macrocode}
@@ -626,8 +628,9 @@
% \end{macrocode}
% \end{macro}
%
-% \changes{0.0}{1992/03/18}{RmS: added \cs{@nmbrlistfalse}}
+% \begin{environment}{trivlist}
% \begin{macro}{\trivlist}
+% \changes{0.0}{1992/03/18}{RmS: added \cs{@nmbrlistfalse}}
% \begin{macrocode}
\def\trivlist{%
\parsep\parskip
@@ -647,6 +650,7 @@
\def\makelabel##1{##1}}
% \end{macrocode}
% \end{macro}
+% \end{environment}
%
% \begin{macro}{\endlist}
% \begin{macrocode}
diff --git a/macros/latex-dev/base/ltluatex.dtx b/macros/latex-dev/base/ltluatex.dtx
index 1f9ab8d133..d7ca7d05ec 100644
--- a/macros/latex-dev/base/ltluatex.dtx
+++ b/macros/latex-dev/base/ltluatex.dtx
@@ -28,7 +28,7 @@
\ProvidesFile{ltluatex.dtx}
%</driver>
%<*tex>
-[2020/02/02 v1.1l
+[2020/03/07 v1.1m
%</tex>
%<plain> LuaTeX support for plain TeX (core)
%<*tex>
@@ -1716,6 +1716,7 @@ luatexbase.add_to_callback = add_to_callback
% \changes{v1.0a}{2015/09/24}{Function added}
% \changes{v1.0k}{2015/12/02}{adjust initialisation of cb local (PHG)}
% \changes{v1.0k}{2015/12/02}{Give more specific error messages (PHG)}
+% \changes{v1.1m}{2020/03/07}{Do not call callback.register for user-defined callbacks}
% Remove a function from a callback. First check arguments.
% \begin{macrocode}
local function remove_from_callback(name, description)
@@ -1761,7 +1762,9 @@ local function remove_from_callback(name, description)
)
if #l == 0 then
callbacklist[name] = nil
- callback_register(name, nil)
+ if user_callbacks_defaults[name] == nil then
+ callback_register(name, nil)
+ end
end
return cb.func,cb.description
end
diff --git a/macros/latex-dev/base/ltluatex.pdf b/macros/latex-dev/base/ltluatex.pdf
index 86769bca60..eaada989fa 100644
--- a/macros/latex-dev/base/ltluatex.pdf
+++ b/macros/latex-dev/base/ltluatex.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltmath.dtx b/macros/latex-dev/base/ltmath.dtx
index 86e62e7bf5..c4963cf0c6 100644
--- a/macros/latex-dev/base/ltmath.dtx
+++ b/macros/latex-dev/base/ltmath.dtx
@@ -38,7 +38,7 @@
%<*driver>
% \fi
\ProvidesFile{ltmath.dtx}
- [2020/02/18 v1.2d LaTeX Kernel (Math Setup)]
+ [2020/04/21 v1.2f LaTeX Kernel (Math Setup)]
% \iffalse
%</driver>
%
@@ -509,18 +509,103 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\>}
-% \begin{macro}{\;}
-% \begin{macro}{\!}
+
+
+%
+% \begin{macro}{\tmspace}
+% \begin{macro}{\,}
+% \begin{macro}{\thinspace}
+% \begin{macro}{\!}
+% \begin{macro}{\negthinspace}
+% \begin{macro}{\:}
+% \begin{macro}{\medspace}
+% \begin{macro}{\negmedspace}
+% \begin{macro}{\;}
+% \begin{macro}{\thickspace}
+% \begin{macro}{\negthickspace}
+%
+% Originally \LaTeX{} only provided a small set of spacing commands
+% for use in text and math, some of the commands like \cs{;} were
+% only supported in manth mode. \texttt{amsmath} normalized and
+% provided all of them in text and math. This code has now been
+% moved to the kernel so that it is generally available.
+%
+%
% \begin{macrocode}
-%\def\,{\mskip\thinmuskip} % already defined in ltspace
-\def\>{\mskip\medmuskip}
-\def\;{\mskip\thickmuskip}
-\def\!{\mskip-\thinmuskip}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\tmspace}{amsmath spacing commands}%
+% \end{macrocode}
+% \cs{tmspace} is really meant to be an internal command so it
+% doesn't necessarily has to be robust but it was robust in
+% \texttt{amsmath} so we leave it like that.
+% \changes{v1.2e}{2020/03/07}{Add \texttt{amsmath} math/text spacing
+% commands to the kernel (gh/303)}
+% \begin{macrocode}
+\DeclareRobustCommand\tmspace[3]{%
+ \ifmmode\mskip#1#2\else\leavevmode@ifvmode\kern#1#3\fi\relax}
+% \end{macrocode}
+% In \texttt{amsmath} the text kern is \texttt{.1667em}. For
+% compatibility reasons we keep the longer one.
+% \begin{macrocode}
+\DeclareRobustCommand\,{\tmspace+\thinmuskip{.16667em}}
+\let\thinspace\,
% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+%
+% \begin{macrocode}
+\DeclareRobustCommand\!{\tmspace-\thinmuskip{.16667em}}
+\let\negthinspace\!
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareRobustCommand\:{\tmspace+\medmuskip{.2222em}}
+\let\medspace\:
+% \end{macrocode}
+% \LaTeX{} has a second name for this in its manual:
+% \begin{macrocode}
+\let\>=\:
+\DeclareRobustCommand\negmedspace{\tmspace-\medmuskip{.2222em}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareRobustCommand\;{\tmspace+\thickmuskip{.2777em}}
+\let\thickspace\;
+\DeclareRobustCommand\negthickspace{\tmspace-\thickmuskip{.2777em}}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\tmspace}{amsmath spacing commands}%
+%<latexrelease>
+%<latexrelease>\let\tmspace\@undefined
+%<latexrelease>\DeclareRobustCommand{\,}{%
+%<latexrelease> \relax\ifmmode\mskip\thinmuskip\else\thinspace\fi}
+%<latexrelease>\DeclareRobustCommand\thinspace{\leavevmode@ifvmode\kern .16667em }
+%<latexrelease>\DeclareRobustCommand\negthinspace{\leavevmode@ifvmode\kern-.16667em }
+%<latexrelease>\def\>{\mskip\medmuskip}
+%<latexrelease>\let\:=\>
+%<latexrelease>\def\;{\mskip\thickmuskip}
+%<latexrelease>\def\!{\mskip-\thinmuskip}
+%<latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
%
% \begin{macro}{\*}
% \begin{macrocode}
@@ -532,7 +617,7 @@
% Nickname for the medium space since |\>| is not available inside
% \texttt{tabbing}.
% \begin{macrocode}
-\let\:=\>
+%\let\:=\>
% \end{macrocode}
% \end{macro}
%
@@ -884,12 +969,32 @@
\def\@yeqncr{\@testopt\@xeqncr\z@skip}
% \end{macrocode}
%
+% \changes{v1.2f}{2020/04/21}{Support calc syntax (gh/152)}
% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\@xeqncr}{eqnarray support calc syntax}%
\def\@xeqncr[#1]{%
\ifnum0=`{\fi}%
\@@eqncr
- \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}%
+ \noalign{\penalty\@eqpen\vskip\jot\@vspace@calcify{#1}}%
}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\@xeqncr}{eqnarray support calc syntax}%
+%<latexrelease>
+%<latexrelease>\def\@xeqncr[#1]{%
+%<latexrelease> \ifnum0=`{\fi}%
+%<latexrelease> \@@eqncr
+%<latexrelease> \noalign{\penalty\@eqpen\vskip\jot\vskip #1\relax}%
+%<latexrelease>}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
% \end{macrocode}
%
% \end{macro}
diff --git a/macros/latex-dev/base/ltmiscen.dtx b/macros/latex-dev/base/ltmiscen.dtx
index 97b1f4a572..5fb4e77d90 100644
--- a/macros/latex-dev/base/ltmiscen.dtx
+++ b/macros/latex-dev/base/ltmiscen.dtx
@@ -32,7 +32,7 @@
%<*driver>
% \fi
\ProvidesFile{ltmiscen.dtx}
- [2019/11/02 v1.1s LaTeX Kernel (Misc. Environments)]
+ [2020/04/24 v1.1t LaTeX Kernel (Misc. Environments)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltmiscen.dtx}
@@ -182,6 +182,7 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{environment}{document}
% \begin{macro}{\enddocument}
% \changes{LaTeX2.09}{1993/08/03}
% {Changed redefinition of \cs{global} to redefinition
@@ -294,6 +295,7 @@
\deadcycles\z@\@@end}
% \end{macrocode}
% \end{macro}
+% \end{environment}
%
% \begin{macro}{\@testdef}
% \begin{macrocode}
@@ -738,10 +740,25 @@
% \end{macro}
%
% \begin{macro}{\@icentercr}
+% \changes{v1.1t}{2020/04/21}{Support calc syntax (gh/152)}
% \begin{macrocode}
-\def\@icentercr[#1]{\vskip #1\ignorespaces}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\@icentercr}{centering, etc support calc}%
+\def\@icentercr[#1]{\@vspace@calcify{#1}\ignorespaces}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\@icentercr}{centering, etc support calc}%
+%<latexrelease>
+%<latexrelease>\def\@icentercr[#1]{\vskip #1\ignorespaces}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
% \end{macrocode}
-%
% \end{macro}
%
%
@@ -983,6 +1000,7 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{environment}{verbatim}
% \begin{macro}{\verbatim}
% \begin{macro}{\endverbatim}
% (RmS 93/09/19) Protected against `missing item' error message
@@ -993,6 +1011,7 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{environment}
%
% \begin{macro}{\verbatim@font}
% \changes{v0.9a}{1993/11/21}{Macro added}
@@ -1010,7 +1029,7 @@
%</2ekernel>
%<*2ekernel|latexrelease>
%<latexrelease>\IncludeInRelease{2018/12/01}%
-%<latexrelease> {\verbvisiblespace}{Setup visible space for verb}%
+%<latexrelease> {\verbvisiblespace}{Setup visible space for \verb}%
% \end{macrocode}
%
%
@@ -1092,15 +1111,71 @@
% \end{macrocode}
% \end{macro}
%
+%^^A \@sverb was here
+%
+% \begin{environment}{verbatim*}
+% For \texttt{verbatim*} we also set up the correct visible space
+% character definition and then run |\@vobeyspaces|. As this code
+% is not called as part of the normal verbatim environment (the
+% method is done the other way around this time) we don't have to
+% check if space is already active---it shouldn't be.
+% \changes{v1.1o}{2018/10/11}
+% {Provide visible space in \cs{verb*} also for XeTeX and LuaTeX (github/69)}
+% \begin{macrocode}
+\@namedef{verbatim*}{\@verbatim
+ \@setupverbvisiblespace
+ \frenchspacing\@vobeyspaces\@sxverbatim}
+\expandafter\let\csname endverbatim*\endcsname =\endverbatim
+% \end{macrocode}
+% \end{environment}
+%
+%
+%
+% \begin{macrocode}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\verbvisiblespace}{Setup visible space for \verb}%
+%<latexrelease>
+%<latexrelease>\@namedef{verbatim*}{\@verbatim\@sxverbatim}
+%<latexrelease>
+%<latexrelease>\let\asciispace \@undefined
+%<latexrelease>\let\verbvisiblespace \@undefined
+%<latexrelease>\let\@setupverbvisiblespace\@undefined
+%<latexrelease>\let\@verbvisiblespacebox \@undefined
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+% \end{macrocode}
+%
+%
%
% \begin{macro}{\@sverb}
+% \begin{macro}{\@@sverb}
% \changes{v1.0j}{1994/05/10}{Slight change in error message text.}
% Definitions of |\@sverb| and |\@verb| changed so |\verb+ foo+|
% does not lose leading blanks when it comes at the beginning of a line.
% Change made 24 May 89. Suggested by Frank Mittelbach and Rainer
% Sch\"opf.
% \begin{macrocode}
-\def\@sverb#1{%
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\@sverb}{Drop spaces before \verb delimiter}%
+% \end{macrocode}
+%
+% If the users types \verb=\verb !~! foo= then surprisingly we would
+% get the space as the delimiter and thus
+% ``\verb=!~!foo='' in the output.
+% To avoid this scenario we check if \verb=#1= has the character
+% code of a space, if so we recurse otherwise we call \cs{@@sverb}
+% (which is the original definition of \cs{@sverb}.
+% \changes{v1.1u}{2020/04/22}{Drop spaces before \cs{verb} delimiter (gh/327)}
+% \begin{macrocode}
+\def\@sverb#1{\if\noexpand#1 \expandafter\@sverb\else\@@sverb{#1}\fi}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\def\@@sverb#1{%
\catcode`#1\active
\lccode`\~`#1%
\gdef\verb@balance@group{\verb@egroup
@@ -1120,39 +1195,28 @@
\else \@setupverbvisiblespace \@vobeyspaces \fi
}
% \end{macrocode}
-% \end{macro}
-%
-% \begin{environment}{verbatim*}
-% For \texttt{verbatim*} we also set up the correct visible space
-% character definition and then run |\@vobeyspaces|. As this code
-% is not called as part of the normal verbatim environment (the
-% method is done the other way around this time) we don't have to
-% check if space is already active---it shouldn't be.
-% \changes{v1.1o}{2018/10/11}
-% {Provide visible space in \cs{verb*} also for XeTeX and LuaTeX (github/69)}
-% \begin{macrocode}
-\@namedef{verbatim*}{\@verbatim
- \@setupverbvisiblespace
- \frenchspacing\@vobeyspaces\@sxverbatim}
-\expandafter\let\csname endverbatim*\endcsname =\endverbatim
-% \end{macrocode}
-% \end{environment}
-%
-%
-%
+%
% \begin{macrocode}
%</2ekernel|latexrelease>
%<latexrelease>\EndIncludeInRelease
-%<latexrelease>\IncludeInRelease{0000/00/00}%
-%<latexrelease> {\verbvisiblespace}{Setup visible space for verb}%
-%<latexrelease>
-%<latexrelease>\@namedef{verbatim*}{\@verbatim\@sxverbatim}
+%<latexrelease>\IncludeInRelease{2018/12/01}%
+%<latexrelease> {\@sverb}{Setup visible space for \verb}%
%<latexrelease>
-%<latexrelease>\let\asciispace \@undefined
-%<latexrelease>\let\verbvisiblespace \@undefined
-%<latexrelease>\let\@setupverbvisiblespace\@undefined
-%<latexrelease>\let\@verbvisiblespacebox \@undefined
+%<latexrelease>\def\@sverb#1{%
+%<latexrelease> \catcode`#1\active
+%<latexrelease> \lccode`\~`#1%
+%<latexrelease> \gdef\verb@balance@group{\verb@egroup
+%<latexrelease> \@latex@error{\noexpand\verb illegal in command argument}\@ehc}%
+%<latexrelease> \aftergroup\verb@balance@group
+%<latexrelease> \lowercase{\let~\verb@egroup}%
+%<latexrelease> \ifnum\catcode`\ =\active
+%<latexrelease> \else \@setupverbvisiblespace \@vobeyspaces \fi
+%<latexrelease>}
+%<latexrelease>\let\@@sverb\@undefined
+%<latexrelease>\EndIncludeInRelease
%<latexrelease>
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\@sverb}{Setup visible space for \verb}%
%<latexrelease>\def\@sverb#1{%
%<latexrelease> \catcode`#1\active
%<latexrelease> \lccode`\~`#1%
@@ -1164,8 +1228,8 @@
%<latexrelease>\EndIncludeInRelease
%<*2ekernel>
% \end{macrocode}
-%
-%
+% \end{macro}
+% \end{macro}
%
%
% \begin{macro}{\@makeother}
diff --git a/macros/latex-dev/base/ltnews.pdf b/macros/latex-dev/base/ltnews.pdf
index ef7aa51e08..ced28ce0e1 100644
--- a/macros/latex-dev/base/ltnews.pdf
+++ b/macros/latex-dev/base/ltnews.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews.tex b/macros/latex-dev/base/ltnews.tex
index c69054aa82..ffc34da26c 100644
--- a/macros/latex-dev/base/ltnews.tex
+++ b/macros/latex-dev/base/ltnews.tex
@@ -30,11 +30,13 @@
% * Fix TOC issue
% 2020/01/30 v1.4b:
% * Fix TOC issue more generally and add page numbers
+% 2020/04/13 v1.4d:
+% * Use titletoc for partial toc'sa in the separate issues
% \fi
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{ltnews.tex}%
- [2020/01/30 v1.4c Master file for ltnews*.tex (LaTeX Project)]
+ [2020/04/13 v1.4d Master file for ltnews*.tex (LaTeX Project)]
\providecommand*{\lastissue}{32}
@@ -73,10 +75,11 @@
\RequirePackage{hologo}
\RequirePackage{graphicx}
-
\documentclass{ltnews}
\RequirePackage{url,csquotes}
+% 1.4d (JLB) also load the titletoc package
+\RequirePackage{titletoc}
% \small already robust so better not ...
%\expandafter
@@ -88,6 +91,9 @@
\RequirePackage{multicol}
\makeatletter
+% 1.4d (JLB) Titletoc thinks \contentsline has three arguments
+% but it has 4 in our case
+\def\ttl@gobblecontents#1#2#3#4{\ignorespaces}
\newcounter{issue}
\renewcommand*{\theissue}{%
@@ -178,6 +184,9 @@
\makefirsttitle
\pdfbookmark[0]{\contentsname}{toc}
+% 1.4d(JLB) Now that titletoc is used we can limit the depth
+% of the main toc
+\setcounter{tocdepth}{2}
\tableofcontents
\clearpage
@@ -219,14 +228,16 @@
\setcounter{footnote}{0}%
\gobbleopt
}%
+% 1.4d (JLB) Removed the extra lines that were written to the toc-files
\newcommand*{\gobbleopt}[1][]{}%
\let\org@twocolumn\twocolumn
\renewcommand\NeedsTeXFormat[1]{\NeedsTeXFormatdate}% ignore that inside
\newcommand\NeedsTeXFormatdate[1][]{}% % inidividual issues
\renewenvironment{document}{%
\clearpage
+% 1.4d (JLB) Normally |\ltn@tocend| shoud do nothing
+ \let\ltn@tocend\relax
\ifnum\@issue=20 %
- \addtocontents{toc}{\protect\setcounter{tocdepth}{5}}%
\addtocontents{toc}{%
\protect\makeatletter
}%
@@ -243,19 +254,14 @@
}%
\def\toclevel@subsection{1}%
\def\toclevel@subsubsection{2}%
- \addtocontents{toc}{\protect\setcounter{tocdepth}{4}}%
\renewcommand*{\tableofcontents}{%
\section*{\contentsname}%
- \@starttoc{toc\theissue}%
- }%
- \let\saved@addtocontents\addtocontents
- \renewcommand*{\addtocontents}[2]{%
- \saved@addtocontents{##1}{##2}%
- \def\temp@toc{toc}%
- \def\temp@param{##1}%
- \ifx\temp@toc\temp@param
- \saved@addtocontents{toc\theissue}{##2}%
- \fi
+% 1.4d (JLB) Start the partial contents
+ \startcontents[Issue\theissue]
+% 1.4d (JLB) Show it
+ \printcontents[Issue\theissue]{}{1}[3]{}
+% 1.4d (JLB)and make sure that |\end{document}| stops it again.
+ \gdef\ltn@tocend{\stopcontents[Issue\theissue]}
}%
\let\l@subsubsection\l@subsection
\let\l@subsection\l@section
@@ -278,6 +284,8 @@
\endgroup
}%
}{%
+% 1.4d (JLB) Adde |\ltn@tocend|
+ \ltn@tocend
\clearpage
}%
\makeatother
diff --git a/macros/latex-dev/base/ltnews01.pdf b/macros/latex-dev/base/ltnews01.pdf
index 44694047ca..fc3ed1119d 100644
--- a/macros/latex-dev/base/ltnews01.pdf
+++ b/macros/latex-dev/base/ltnews01.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews02.pdf b/macros/latex-dev/base/ltnews02.pdf
index b43d192424..34d40b49ec 100644
--- a/macros/latex-dev/base/ltnews02.pdf
+++ b/macros/latex-dev/base/ltnews02.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews03.pdf b/macros/latex-dev/base/ltnews03.pdf
index 4ccdc3613b..df30947cd9 100644
--- a/macros/latex-dev/base/ltnews03.pdf
+++ b/macros/latex-dev/base/ltnews03.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews04.pdf b/macros/latex-dev/base/ltnews04.pdf
index 7c8c60445d..8b18c27fda 100644
--- a/macros/latex-dev/base/ltnews04.pdf
+++ b/macros/latex-dev/base/ltnews04.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews05.pdf b/macros/latex-dev/base/ltnews05.pdf
index e4e3b4a417..7a079ebd73 100644
--- a/macros/latex-dev/base/ltnews05.pdf
+++ b/macros/latex-dev/base/ltnews05.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews06.pdf b/macros/latex-dev/base/ltnews06.pdf
index 33b0dd42c9..e6ca705920 100644
--- a/macros/latex-dev/base/ltnews06.pdf
+++ b/macros/latex-dev/base/ltnews06.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews07.pdf b/macros/latex-dev/base/ltnews07.pdf
index 45aab0c757..66a1457566 100644
--- a/macros/latex-dev/base/ltnews07.pdf
+++ b/macros/latex-dev/base/ltnews07.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews08.pdf b/macros/latex-dev/base/ltnews08.pdf
index 20e8980064..2732f77234 100644
--- a/macros/latex-dev/base/ltnews08.pdf
+++ b/macros/latex-dev/base/ltnews08.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews09.pdf b/macros/latex-dev/base/ltnews09.pdf
index 5c59f4537b..b81df70446 100644
--- a/macros/latex-dev/base/ltnews09.pdf
+++ b/macros/latex-dev/base/ltnews09.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews10.pdf b/macros/latex-dev/base/ltnews10.pdf
index 93cabf0b38..1fa4ff2997 100644
--- a/macros/latex-dev/base/ltnews10.pdf
+++ b/macros/latex-dev/base/ltnews10.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews11.pdf b/macros/latex-dev/base/ltnews11.pdf
index c569713011..33b9db87fc 100644
--- a/macros/latex-dev/base/ltnews11.pdf
+++ b/macros/latex-dev/base/ltnews11.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews12.pdf b/macros/latex-dev/base/ltnews12.pdf
index b0cebe5ef1..3df0f8da10 100644
--- a/macros/latex-dev/base/ltnews12.pdf
+++ b/macros/latex-dev/base/ltnews12.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews13.pdf b/macros/latex-dev/base/ltnews13.pdf
index 99a85c75db..9f250dda69 100644
--- a/macros/latex-dev/base/ltnews13.pdf
+++ b/macros/latex-dev/base/ltnews13.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews14.pdf b/macros/latex-dev/base/ltnews14.pdf
index e9c7b3c0e6..aeef5a6352 100644
--- a/macros/latex-dev/base/ltnews14.pdf
+++ b/macros/latex-dev/base/ltnews14.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews15.pdf b/macros/latex-dev/base/ltnews15.pdf
index 9cb9472821..e2df12335b 100644
--- a/macros/latex-dev/base/ltnews15.pdf
+++ b/macros/latex-dev/base/ltnews15.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews16.pdf b/macros/latex-dev/base/ltnews16.pdf
index 61ddf3036f..1eb4b41399 100644
--- a/macros/latex-dev/base/ltnews16.pdf
+++ b/macros/latex-dev/base/ltnews16.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews17.pdf b/macros/latex-dev/base/ltnews17.pdf
index 1136df63b6..d3c7bbda62 100644
--- a/macros/latex-dev/base/ltnews17.pdf
+++ b/macros/latex-dev/base/ltnews17.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews18.pdf b/macros/latex-dev/base/ltnews18.pdf
index 6b925fb64c..3f78dcfaeb 100644
--- a/macros/latex-dev/base/ltnews18.pdf
+++ b/macros/latex-dev/base/ltnews18.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews19.pdf b/macros/latex-dev/base/ltnews19.pdf
index e307c301b8..a5c96735c9 100644
--- a/macros/latex-dev/base/ltnews19.pdf
+++ b/macros/latex-dev/base/ltnews19.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews20.pdf b/macros/latex-dev/base/ltnews20.pdf
index 4115da16dd..fcf4ef9a2b 100644
--- a/macros/latex-dev/base/ltnews20.pdf
+++ b/macros/latex-dev/base/ltnews20.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews21.pdf b/macros/latex-dev/base/ltnews21.pdf
index 890e6ca687..948dec8917 100644
--- a/macros/latex-dev/base/ltnews21.pdf
+++ b/macros/latex-dev/base/ltnews21.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews22.pdf b/macros/latex-dev/base/ltnews22.pdf
index 9b46a67049..c7576c9e0e 100644
--- a/macros/latex-dev/base/ltnews22.pdf
+++ b/macros/latex-dev/base/ltnews22.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews23.pdf b/macros/latex-dev/base/ltnews23.pdf
index 6b95b99e63..513c215ff4 100644
--- a/macros/latex-dev/base/ltnews23.pdf
+++ b/macros/latex-dev/base/ltnews23.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews24.pdf b/macros/latex-dev/base/ltnews24.pdf
index 9100081fad..5d826a3aa1 100644
--- a/macros/latex-dev/base/ltnews24.pdf
+++ b/macros/latex-dev/base/ltnews24.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews25.pdf b/macros/latex-dev/base/ltnews25.pdf
index 24c36ca0b7..60f2c7f203 100644
--- a/macros/latex-dev/base/ltnews25.pdf
+++ b/macros/latex-dev/base/ltnews25.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews26.pdf b/macros/latex-dev/base/ltnews26.pdf
index bfda22ad97..4dce56adfa 100644
--- a/macros/latex-dev/base/ltnews26.pdf
+++ b/macros/latex-dev/base/ltnews26.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews27.pdf b/macros/latex-dev/base/ltnews27.pdf
index a4a4e355f6..483ff44824 100644
--- a/macros/latex-dev/base/ltnews27.pdf
+++ b/macros/latex-dev/base/ltnews27.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews28.pdf b/macros/latex-dev/base/ltnews28.pdf
index 3fd460e397..694668f4e7 100644
--- a/macros/latex-dev/base/ltnews28.pdf
+++ b/macros/latex-dev/base/ltnews28.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews28.tex b/macros/latex-dev/base/ltnews28.tex
index 71bdfc4711..6a683c83af 100644
--- a/macros/latex-dev/base/ltnews28.tex
+++ b/macros/latex-dev/base/ltnews28.tex
@@ -227,7 +227,7 @@ earlier than this release.
\subsection{BOM: byte order mark handling}
When using Unicode the first bytes of a file may be a, so called, BOM
-character (byte order mark) to indicate the byte oder used in the
+character (byte order mark) to indicate the byte order used in the
file. While this is not required with UTF-8 encoded files (where the
byte order is known) it is nevertheless allowed by the standard and
some editors add that byte sequence to the beginning of a file. In the
@@ -285,7 +285,7 @@ for this. For the programming level we also added
is defined. Unfortunately this had the side effect of \emph{defining}
the command to \verb|\relax| in the case that it had no definition.
The new release uses a modified definition
-(using extra testing possibilities available in \hologo{eTeX}. The new definition
+(using extra testing possibilities available in \hologo{eTeX}). The new definition
is more natural, however code that was relying on the side effect of the
command being tested being defined if it was previously undefined may have to add
\verb|\let\|\meta{command}\verb|\relax|.
diff --git a/macros/latex-dev/base/ltnews29.pdf b/macros/latex-dev/base/ltnews29.pdf
index 63b0467137..db198ebdd8 100644
--- a/macros/latex-dev/base/ltnews29.pdf
+++ b/macros/latex-dev/base/ltnews29.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews30.pdf b/macros/latex-dev/base/ltnews30.pdf
index bef0c7e194..5d045c4cf1 100644
--- a/macros/latex-dev/base/ltnews30.pdf
+++ b/macros/latex-dev/base/ltnews30.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews31.pdf b/macros/latex-dev/base/ltnews31.pdf
index 62024ac7f8..d4eea094cc 100644
--- a/macros/latex-dev/base/ltnews31.pdf
+++ b/macros/latex-dev/base/ltnews31.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews32.pdf b/macros/latex-dev/base/ltnews32.pdf
index c820928b65..7c8dc3fac7 100644
--- a/macros/latex-dev/base/ltnews32.pdf
+++ b/macros/latex-dev/base/ltnews32.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltnews32.tex b/macros/latex-dev/base/ltnews32.tex
index bd1ebffb10..fdf8211ef0 100644
--- a/macros/latex-dev/base/ltnews32.tex
+++ b/macros/latex-dev/base/ltnews32.tex
@@ -43,6 +43,7 @@
\providecommand\meta[1]{$\langle$\textit{#1}$\rangle$}
\providecommand\option[1]{\texttt{#1}}
\providecommand\env[1]{\texttt{#1}}
+\providecommand\Arg[1]{\texttt\{\meta{#1}\texttt\}}
\providecommand\XeTeX{\hologo{XeTeX}}
@@ -141,6 +142,51 @@ This document is under construction \ldots
+\section{Providing \pkg{xparse} in the format}
+
+The official interface in the \LaTeXe{} kernel for creating
+document-level commands has always been \cs{newcommand}. This was a
+big step forward from \LaTeX~2.09. However, it was still very limited
+in the types of command it can create: those taking at most one
+optional argument in square brackets, then zero or more mandatory
+arguments. Richer syntaxes required use of the \TeX{} \cs{def}
+primitive along with appropriate low-level macro programming.
+
+The \LaTeX{} team started work on a comprehensive document-command
+parser, \pkg{xparse}, in the late 1990s. In the past decade, the
+experimental ideas it provides have been carefully worked through and
+moved to a stable footing. As such, \pkg{xparse} is now used to define
+a very large number of document and package commands. It does this by
+providing a rich and self-consistent syntax to describe a wide range
+interfaces seen in \LaTeX{} packages.
+
+The ideas developed in \pkg{xparse} are now sufficiently well-tested
+that the majority can be transferred into the \LaTeX{} kernel. Thus
+the following commands have been added
+\begin{itemize}
+ \item \cs{NewDocumentCommand}, \cs{RenewDocumentCommand},
+ \cs{ProvideDocumentCommand}, \cs{DeclareDocumentCommand}
+ \item \cs{NewExpandableDocumentCommand}, \cs{RenewExpandableDocumentCommand},
+ \cs{ProvideExpandableDocumentCommand}, \cs{DeclareExpandableDocumentCommand}
+ \item \cs{NewDocumentEnvironment}, \cs{RenewDocumentEnvironment},
+ \cs{ProvideDocumentEnvironment}, \cs{DeclareDocumentEnvironment}
+ \item \cs{BooleanTrue} \cs{BooleanFalse}
+ \item \cs{IfBooleanTF}, \cs{IfBooleanT}, \cs{IfBooleanF}
+ \item \cs{IfNoValueTF}, \cs{IfNoValueT}, \cs{IfNoValueF}
+ \item \cs{IfValueTF}, \cs{IfValueT}, \cs{IfValueF}
+ \item \cs{SplitArgument}, \cs{SplitList}, \cs{TrimSpaces},
+ \cs{ProcessList}, \cs{ReverseBoolean}
+ \item \cs{GetDocumentCommandArgSpec}
+ \cs{GetDocumentEnvironmentArgSpec}
+\end{itemize}
+
+Most, but not all, of the argument types defined by \pkg{xparse} are
+now supported at the kernel level. In particular, the types
+\texttt{g}/\texttt{G}, \texttt{l} and \texttt{u} are \emph{not} provided by
+the kernel code; these are deprecated but still available by
+explicitly loading \pkg{xparse}. All other argument types \emph{are}
+now available directly within the \LaTeXe{} kernel.
+
\section{Other changes to the \LaTeX{} kernel}
@@ -149,7 +195,7 @@ This document is under construction \ldots
The \LaTeXe{} kernel defines the command \cs{symbol}, which allows
characters to be typeset by entering their `slot number'. With the
\LuaTeX{} and \XeTeX{} engines, these slot numbers can extend to very
-large values to accomodate Unicode characters in the upper Unicode
+large values to accommodate Unicode characters in the upper Unicode
planes (e.g., bold mathematical capital A is slot number
\texttt{"1D400} in hex or \texttt{119808} in decimal). The \XeTeX{}
engine did not allow \cs{symbol} in math mode for values above
@@ -158,23 +204,108 @@ $2^{16}$, and this limitation has now been lifted.
\githubissue{124}
+\subsection{Correct Unicode value of \cs{=y} (\=y)}
+
+The Unicode slot for \=y was incorrectly pointing to the slot for
+\=Y. This has been corrected.
+%
+\githubissue{326}
+
+\subsection{Add support for Unicode soft hyphens}
+
+For a long time, the UTF-8 option for \pkg{inputenc} made the Unicode
+soft hyphen character (U+00AD) an alias for the \LaTeX\ soft hyphen
+\cs{-}. The Unicode engines \XeTeX{} and \LuaTeX{} behaved
+different though: They either ignored U+00AD or interpreted it as an
+unconditional hyphen. This inconsistency is fixed now and \LaTeX{}
+always treats \texttt{U+00AD} as \cs{-}.
+%
+\githubissue{323}
+
+
+
+\subsection{Fix capital accents in Unicode engines}
+
+In Unicode engines the capital accents such as \cs{capitalcedilla},
+etc.\ have been implemented as trival short hands for the normal
+accents (because other than Computer Modern virtually no fonts support
+them), but that failed when \pkg{hyperref} got loaded. This has been
+corrected.
+%
+\githubissue{332}
+
+
+
+\subsection{Support \pkg{calc} in various kernel commands}
+
+The \cs{hspace}, \cs{vspace}, \cs{addvspace}, \cs{\textbackslash} and
+other commands simply passed their argument to a \TeX{} primitive to
+produce the necessary space. As a result it was impossible to specify
+anything other than a simple dimension value in such arguments. This
+has been changed, so that now \pkg{calc} syntax is also supported with
+these commands.
+%
+\githubissue{152}
+
+\subsection{Spaces in filenames of included files}
+
+File names containing spaces lead to unexpected results when used in
+the commands \cs{include} and \cs{includeonly}. This has now been
+fixed and the argument to \cs{include} can contain file name
+containing spaces. Leading or trailing spaces will be stripped off
+but spaces within the file name are kept. The argument to
+\cs{includeonly}, which is a comma-separated list of files to process,
+can also contain spaces with any leading and trailing spaces stripped
+from the individual filenames while the spaces \emph{in} the file
+names will remain intact.
+%
+\githubissue{217}
+
+
+
+\subsection{Set a non-zero \cs{baselineskip} in text scripts}
+
+As \cs{textsuperscript} and \cs{textsubscript} usually contain only a
+few characters on a single line the \cs{baselineskip} was set to
+zero. However, \pkg{hyperref} uses that value to determine the height
+of a link box which consequently came out far too small. This has
+been adjusted.
+%
+\githubissue{249}
+
+
\subsection{Spacing issues when using \cs{linethickness}}
In some circumstances the use of \cs{linethickness} introduced a
spurious space that shifted objects in a \texttt{picture} environments
to the right. This has been corrected.
%
-\githubissue{270}
+\githubissue{274}
+
+
+
+\subsection{Better support for the legacy series default interface}
+
+In the initial implementation of \LaTeX's font selection scheme (NFSS)
+changes to any default where always carried out by redefining some
+commands, e.g., \cs{seriesdefault}. In 2019 we introduced various
+extensions and with it new methods of customising certain parts of
+NFSS, e.g., the recommended way for changing the series default(s) is
+now through \cs{DeclareFontSeriesDefault}~\cite{32:ltnews31}. In this
+release we improved the support for legacy documents using the old
+method was improved to cover additional edge cases.
+%
+\githubissue[s]{306,315}
-\subsection{Better support for uncommon font series defaults}
+\subsection{Support for uncommon font series defaults}
If a font family was set up with fairly unusual font series defaults,
e.g.,
\begin{verbatim}
-\renewcommand\ttdefault{lmvtt}
-\DeclareFontSeriesDefault[tt]{md}{lm}
-\DeclareFontSeriesDefault[tt]{bf}{bm}
+ \renewcommand\ttdefault{lmvtt}
+ \DeclareFontSeriesDefault[tt]{md}{lm}
+ \DeclareFontSeriesDefault[tt]{bf}{bm}
\end{verbatim}
then a switch between the main document families, e.g.,
\verb=\ttfamily...\rmfamily= did not always correctly continued
@@ -185,6 +316,49 @@ been corrected.
\githubissue{291}
+\subsection{Checking the current font series context}
+
+Sometimes it is necessary to define commands that act differently when
+used in bold context (e.g., inside \cs{textbf}. Now that it is
+possible in \LaTeX{} to specify different \enquote{\texttt{bf}}
+defaults based for each of the three meta families (\texttt{rm},
+\texttt{sf} and \texttt{tt}) via \cs{DeclareFontSeriesDefault}, it is
+not any longer easy to answer the question \enquote{am I typsetting in
+ a bold context?}. To help with this problem a new command was provided:
+\begin{quote}
+ \cs{IfFontSeriesContextTF}\Arg{context}\\
+ \hspace*{4em} \Arg{true code}\Arg{false code}
+\end{quote}
+The \meta{context} can be either \texttt{bf} (bold) or \texttt{md}
+(medium) and depending on whether or not the current font is
+recognized as being selected through \cs{bfseries} or \cs{mdseries}
+the \meta{true code} or \meta{false code} is executed.
+As an example
+\begin{verbatim}
+\usepackage{bm} % (bold math)
+\newcommand\vbeta{\IfFontSeriesContextTF{bf}%
+ {\ensuremath{\bm{\beta}}}%
+ {\ensuremath{\beta}}}
+\end{verbatim}
+This way you can write \cs{vbeta}\texttt{-isotopes} and if used in a
+heading it comes out in a bolder version.
+%
+\githubissue{336}
+
+
+\subsection{Avoid spurious package option warning}
+
+When a package is loaded with a number of options, say \texttt{X},
+\texttt{Y} and \texttt{Z}, and then later another loading attempt was
+made with a subset of the options or no options, it was possible that
+you got an error message that option \texttt{X} is not known to the
+package. This obviously incorrect error was due to some timing issue
+where the list of available options got lost prematurely. This has now
+been fixed.
+%
+\githubissue{22}
+
+
\subsection{Adjusting \texttt{fleqn}}
In \pkg{amsmath} the \cs{mathindent} parameter used with the
@@ -193,7 +367,7 @@ it to a value such as \texttt{1em minus 1em}, i.e., so the the normal
indentation can be reduced in case of very wide math displays.
This is now also supported by the \LaTeX{} standard classes.
-In addition a compressable space between formula and equation number
+In addition a compressible space between formula and equation number
in the \texttt{equation} environment got added when the \texttt{fleqn}
option is used so that a very wide formula doesn't bump into the
equation number.
@@ -201,6 +375,121 @@ equation number.
\githubissue{252}
+\subsection{Provide \cs{clap}}
+
+\LaTeX{} has inherited \cs{llap} and \cs{rlap} from plain \TeX{}
+(zero-sized boxes whose content sticks out to the left or right,
+respectively) but there isn't a corresponding \cs{clap} command that
+centers the material. This missing command was added by several
+addon packages, e.g., \pkg{mathtools}, and has now been added to the
+kernel.
+
+
+\subsection{Fix to legacy math alphabet interface}
+
+When using the \LaTeX{}~2.09 legacy math alphabet interface, e.g.,
+\verb=$\sf -1$= instead of \verb=$\mathsf{-1}$=, an extra math Ord atom
+was added to the formula in case the math alphabet was used for the first
+time. In some cases this math atom would change the spacing, e.g.,
+change the unary minus sign into a binary minus in the above example. This
+has finally be fixed.
+%
+\gnatsissue{latex}{3357}
+
+
+
+\subsection{Added tests for format, package and class dates}
+
+To implement compatibility code or to ensure that certain features are
+available it is helpful and often necessary to check the date of the
+format or that of a package or class and execute different code based
+on the result. For that \LaTeX\ only had some internal commands
+(\cs{@ifpackagelater} and \cs{@ifclasslater}) for testting package or
+class names but nothing really for testing the format date. For the
+latter one had to resort to some obscure command \cs{@ifl@t@r} that,
+given its cryptic name, was clearly never intended for use even in
+package or class code. Furthermore, even the existing interface
+commands where defective as they are testing for \enquote{equal or
+ later} and not for \enquote{later} as their names indicate.
+
+We have therefore introduced three new CamelCase commands as the
+official interface for such tests
+\begin{quote}
+ \cs{IfFormatAtLeastTF}\Arg{date}\\
+ \hspace*{4em} \Arg{true code}\Arg{false code}
+\end{quote}
+and for package and class tests
+\begin{quote}
+ \cs{IfClassAtLeastTF}\Arg{class name}\Arg{date}\\
+ \hspace*{4em} \Arg{true code}\Arg{false code} \\
+ \cs{IfPackageAtLeastTF}\Arg{package name}\Arg{date}\\
+ \hspace*{4em} \Arg{true code}\Arg{false code}
+\end{quote}
+For compatibility reasons the legacy commands remain available, but we
+suggest to replace them over time and use the new interfaces in new
+code.
+%
+\githubissue{186}
+
+
+\subsection{Avoid a problem with \cs{verb}}
+
+If a user typed \verb*=\verb !~! foo= instead of
+\verb*=\verb!~! foo= by mistake, then surprisingly the result was
+``\verb=!~!=foo'' without any warning or error.
+%
+What happened was that the
+\verb*= = became the argument delimiter due to the rather complex
+processing done by \cs{verb} to render verbatim. This now got
+fixed and spaces directly following the command \cs{verb} or \cs{verb*}
+are ignored as elsewhere.
+%
+\githubissue{327}
+
+
+\subsection{Record the counter name stepped by \cs{refstepcounter}}
+
+\cs{refstepcounter} now stores the name of counter in \cs{\@currentcounter}.
+This allows packages like \pkg{zref} and \pkg{hyperref} to store the name without
+having to patch \cs{refstepcounter}.
+%
+\githubissue{300}
+
+
+\subsection{Add support for Unicode soft hyphens}
+
+For a long time, the UTF-8 option for \pkg{inputenc} made the Unicode
+soft hyphen character (U+00AD) an alias for the \LaTeX\ soft hyphen
+\cs{-}. The Unicode engines \XeTeX{} and \LuaTeX{} behaved
+different though: They either ignored U+00AD or interpreted it as an
+unconditional hyphen. This inconsistency is fixed now and \LaTeX{}
+always treats \texttt{U+00AD} as \cs{-}.
+%
+\githubissue{323}
+
+
+
+\subsection{Native Lua\TeX\ behaviour for \cs{-}}
+
+\LaTeX\ changes \cs{-} to add a discretionary hyphen even if \cs{hyphenchar}
+is set to $-1$. This change is not necessary under Lua\TeX\ because in there
+\cs{-} is not affected by \cs{hyphenchar} in the first place. Therefore this
+behaviour has been changed to ensure that Lua\TeX's (language specific)
+hyphenation characters are respected by \cs{-}.
+
+
+
+\subsection{Allow \cs{par} commands inside \cs{typeout}}
+
+\cs{typeout} used to choke when seeing an empty line or a \cs{par}
+command in its argument. However, sometimes it is used to display
+arbitrary user input or code (wrapped, for example, in
+\cs{unexpanded}) which may contain explicit \cs{par} commands. This is
+now allowed.
+%
+\githubissue{335}
+
+
\section{Changes to packages in the \pkg{graphics} category}
@@ -215,7 +504,7 @@ to the log file, because of a typo in the check. This has been corrected.
\section{Changes to packages in the \pkg{tools} category}
-\subsection{Support stretchable glue in \texttt{w}-columns}
+\subsection{\pkg{array}: Support stretchable glue in \texttt{w}-columns}
If stretchable glue, e.g., \cs{dotfill}, is used in \env{tabular}
columns made with the \pkg{array} package, it stretches as it would in
@@ -227,19 +516,118 @@ types in this respect.
%
\githubissue{270}
+\subsection{\pkg{array}: Use math mode for \texttt{w} and
+ \texttt{W}-cells in \env{array}}
+
+The \texttt{w} and \texttt{W}-columns are LR-columns very similar to
+\texttt{l}, \texttt{c} and \texttt{r}. It is therefore natural to
+expect their cell content to be typeset in math mode instead of text
+mode if they are used in an \env{array} environment. This has now
+been adjusted. Note that this is a breaking change in version v2.5!
+If you have used \texttt{w} or \texttt{W}-columns in older documents
+either add \texttt{\detokenize{>{$}...<{$}}} for such columns or
+remove the \texttt{\$} signs in the cells. Alternatively, you can roll
+back to the old version by loading \pkg{array} with
+\begin{verbatim}
+ \usepackage{array}[=v2.4]
+\end{verbatim}
+in such documents.
+%
+\githubissue{297}
+
+\subsection{\pkg{xr}: Support for spaces in filenames}
+The commannd \cs{externaldocument}, provided by \pkg{xr}, now also
+supports filenames with spaces, just like \cs{include} and
+\cs{includeonly}.
+%
+\githubissue{223}
\section{Changes to packages in the \pkg{amsmath} category}
\subsection{Placement corrections for two accent commands}
The accent commands \cs{dddot} and \cs{ddddot} (producing triple and
-quatruple dot accents) moved the base character vertically in certain
+quadruple dot accents) moved the base character vertically in certain
situations if it was a single glyph,
e.g., \verb=$Q \dddot{Q}$=
were not at the same baseline. This has been corrected.
%
\githubissue{126}
+\subsection{Fixes to \texttt{aligned} and \texttt{gathered}}
+
+The environments \texttt{aligned} and \texttt{gathered} have a
+trailing optional argument to specify the vertical position of the
+environment with respect to the rest of the line. Allowed values are
+\texttt{t}, \texttt{b} and \texttt{c} but the code only tested for
+\texttt{b} and \texttt{t} and assumed anything else is must be
+\texttt{c}. As a result, a formula starting with a bracket group would
+get mangled without warning---the group being dropped and interpreted
+as a request for centering. After more than 25 years this has now been
+corrected. If such a group is found a warning is given and the data is
+processed as part of the formula.
+%
+\githubissue{5}
+
+
+\section{Changes to the \pkg{babel} package}
+
+Multilingual typesetting has much evolved in the past years, and
+\pkg{babel}, like \LaTeX{} itself, has followed the footsteps of
+Unicode and the W3C consortiums to produce proper output in many
+languages.
+
+Furthermore, the traditional model to define and select languages
+(which can be called \enquote{vertical}), based on closed files, which
+is still the preferred one in monolingual documents, is being extended
+with a new model (which can be called \enquote{horizontal}) based on
+\emph{services} provided by \pkg{babel}, which allows to define and
+redefine locales with the help of simple |ini| files based on
+key/value pairs. Babel provides about of 250 of these files, which
+have been generated with the help of the Unicode Common Language Data
+Repository.
+
+Thanks to the recent advances in \texttt{lualatex} and
+\pkg{luaotfload}, babel currently provides \emph{services} for bidi
+typesetting, line breaking for South East Asian and CJK scripts,
+non-standard hyphenation (like ff to ff-f), alphabetic and additive
+counters, automatic selection of fonts and languages based on the
+script, etc. This means babel can be used to typeset such a variety of
+languages as Russian, Arabic, Hindi, Thai, Japanese, Bangla, Amharic,
+Greek, and many others.
+
+And since these \texttt{ini} files they are easily parsable, they can
+serve as a source for other packages.
+
+For further details take a look at the \pkg{babel}
+documentation~\cite{32:babel}.
+
+
+\begin{thebibliography}{9}
+
+\fontsize{9.3}{11.3}\selectfont
+
+\bibitem{32:ltnews31} \LaTeX{} Project Team:
+ \emph{\LaTeXe{} news 31}.\\
+ \url{https://latex-project.org/news/latex2e-news/ltnews31.pdf}
+
+\bibitem{32:site-doc}
+ \emph{\LaTeX{} documentation on the \LaTeX{} Project Website}.\\
+ \url{https://latex-project.org/help/documentation/}
+
+\bibitem{32:issue-tracker}
+ \emph{\LaTeX{} issue tracker}.
+ \url{https://github.com/latex3/latex2e/issues/}
+
+\bibitem{32:babel}
+ Javier Bezos and Johannes Braams.
+ \emph{Babel --- Localization and internationalization}.\\
+ \url{https://www.ctan.org/pkg/babel}
+
+\end{thebibliography}
+
+
+
\end{document}
diff --git a/macros/latex-dev/base/ltoutenc.dtx b/macros/latex-dev/base/ltoutenc.dtx
index f3c19000ed..8831b5655f 100644
--- a/macros/latex-dev/base/ltoutenc.dtx
+++ b/macros/latex-dev/base/ltoutenc.dtx
@@ -37,14 +37,14 @@
%<TS1>\ProvidesFile{ts1enc.def}[2001/06/05 v3.0e (jk/car/fm)
%<TU>\ProvidesFile{tuenc.def}
%<package>\ProvidesPackage{fontenc}
-%<OT1|T1|OMS|OML|OT4|TU|package> [2020/02/11 v2.0o
+%<OT1|T1|OMS|OML|OT4|TU|package> [2020/04/22 v2.0p
%<OT1|T1|OMS|OML|OT4|TS1|TU> Standard LaTeX file]
%<package> Standard LaTeX package]
%
%<*driver>
% \fi
\ProvidesFile{ltoutenc.dtx}
- [2020/02/11 v2.0o LaTeX Kernel (font encodings)]
+ [2020/04/22 v2.0p LaTeX Kernel (font encodings)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltoutenc.dtx}
@@ -188,6 +188,8 @@
% like.}
% \changes{v1.99m}{2015/02/21}
% {Removed autoload code}
+% \changes{v2.0p}{2020/04/22}
+% {corrected \=y unicode value in tuenc.def}
%
%
% \section{Font encodings}
@@ -3370,7 +3372,7 @@
\DeclareUnicodeComposite{\textcommabelow}{T}{"021A}
\DeclareUnicodeComposite{\textcommabelow}{t}{"021B}
\DeclareUnicodeComposite{\=} {Y}{"0232}
-\DeclareUnicodeComposite{\=} {y}{"0232}
+\DeclareUnicodeComposite{\=} {y}{"0233}
\DeclareUnicodeComposite{\.} {B}{"1E02}
\DeclareUnicodeComposite{\.} {b}{"1E03}
\DeclareUnicodeComposite{\d} {B}{"1E04}
@@ -3601,7 +3603,7 @@
\xdef\@fontenc@load@list{\@fontenc@load@list
\@elt{\csname opt@fontenc.sty\endcsname}}
% \end{macrocode}
-%
+%
% \begin{macrocode}
\global\expandafter\let\csname ver@fontenc.sty\endcsname\relax
\global\expandafter\let\csname opt@fontenc.sty\endcsname\relax
diff --git a/macros/latex-dev/base/ltpictur.dtx b/macros/latex-dev/base/ltpictur.dtx
index 4018adba59..bdac744e83 100644
--- a/macros/latex-dev/base/ltpictur.dtx
+++ b/macros/latex-dev/base/ltpictur.dtx
@@ -32,7 +32,7 @@
%<*driver>
% \fi
\ProvidesFile{ltpictur.dtx}
- [2020/02/14 v1.1n LaTeX Kernel (Picture Mode)]
+ [2020/05/12 v1.1o LaTeX Kernel (Picture Mode)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltpictur.dtx}
@@ -191,6 +191,7 @@
% \end{macro}
% \end{macro}
%
+% \begin{environment}{picture}
% \begin{macro}{\picture}
% \changes{v0.1c}{1994/04/28}{(DPC) Ignore spaces before (}
% |#1| should be white space.
@@ -229,6 +230,7 @@
\mbox{\box\@picbox}}
% \end{macrocode}
% \end{macro}
+% \end{environment}
%
% In the definitions of |\put| and |\multiput|, |\hskip| was replaced by
% |\kern| just in case arg |#3| = ``plus''. (Bug detected by Don Knuth.
@@ -275,9 +277,11 @@
% \begin{macro}{\thinlines}
% \begin{macro}{\thicklines}
% \begin{macrocode}
-\DeclareRobustCommand\thinlines{\let\@linefnt\tenln \let\@circlefnt\tencirc
+\DeclareRobustCommand\thinlines{\let\@linefnt\tenln
+ \let\@circlefnt\tencirc
\@wholewidth\fontdimen8\tenln \@halfwidth .5\@wholewidth}
-\DeclareRobustCommand\thicklines{\let\@linefnt\tenlnw \let\@circlefnt\tencircw
+\DeclareRobustCommand\thicklines{\let\@linefnt\tenlnw
+ \let\@circlefnt\tencircw
\@wholewidth\fontdimen8\tenlnw \@halfwidth .5\@wholewidth}
% \end{macrocode}
% \end{macro}
@@ -333,8 +337,24 @@
% \end{macro}
%
% \begin{macro}{\@istackcr}
+% \changes{v1.1o}{2020/04/21}{Support calc syntax (gh/152)}
% \begin{macrocode}
-\def\@istackcr[#1]{\cr\noalign{\vskip #1}\ignorespaces}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\@istackcr}{\shortstack calc support}%
+\def\@istackcr[#1]{\cr\noalign{\@vspace@calcify{#1}}\ignorespaces}
+%</2ekernel|latexrelease>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\@istackcr}{\shortstack calc support}%
+%<latexrelease>
+%<latexrelease>\def\@istackcr[#1]{\cr\noalign{\vskip #1}\ignorespaces}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
% \end{macrocode}
% \end{macro}
%
@@ -1341,7 +1361,7 @@
% \end{macro}
%
% \begin{macro}{\@xdim}
-% \begin{macro}{\yxdim}
+% \begin{macro}{\@ydim}
% Length registers.
% \begin{macrocode}
\newdimen\@xdim
diff --git a/macros/latex-dev/base/ltspace.dtx b/macros/latex-dev/base/ltspace.dtx
index 16d7dcb43a..1a672c6455 100644
--- a/macros/latex-dev/base/ltspace.dtx
+++ b/macros/latex-dev/base/ltspace.dtx
@@ -32,7 +32,7 @@
%<*driver>
% \fi
\ProvidesFile{ltspace.dtx}
- [2019/11/02 v1.3k LaTeX Kernel (spacing)]
+ [2020/05/06 v1.3n LaTeX Kernel (spacing)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltspace.dtx}
@@ -63,6 +63,8 @@
% \changes{v1.2r}{1996/07/27}{Correct documentation of problems}
% \changes{v1.2w}{1998/08/17}{Documentation fixes.}
% \changes{v1.3j}{2019/08/27}{Make various commands robust}
+% \changes{v1.3l}{2020/03/07}{Moved \cs{thinspace}, \cs{negthinspace}
+% and \cs{,} to ltmath.dtx (gh/303)}
%
%
% \section{Spacing}
@@ -428,6 +430,37 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
+%
+%
+%
+% \begin{macro}{\@vspace@calcify}
+% Helper command to produce a \cs{vskip} that is first run through
+% \cs{setlength}. This way the \texttt{calc} package can operate on
+% the argument value.
+% \changes{v1.3m}{2020/04/21}{Support calc syntax (gh/152)}
+% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\@vspace@calcify}{Add calc support}%
+\def\@vspace@calcify#1{\begingroup\setlength\skip@{#1}\vskip\skip@\endgroup}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\@vspace@calcify}{Add calc support}%
+%<latexrelease>
+%<latexrelease>\let\@vspace@calcify\@undefined
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
+% \end{macrocode}
+% \end{macro}
+%
+%
+
+
% \begin{macro}{\newline}
% A simple form of the `normal' definition of |\\|.
% \changes{v1.2v}{1997/05/07}{Made completely robust.}
@@ -445,12 +478,31 @@
% \end{macro}
%
% \begin{macro}{\@newline}
+% \changes{v1.3m}{2020/04/21}{Support calc syntax (gh/152)}
% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\@newline}{\newline calc support}%
\def\@newline[#1]{\let \reserved@e \vadjust
- \@gnewline {\vskip #1}}
+ \@gnewline {\@vspace@calcify{#1}}}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\@newline}{\newline calc support}%
+%<latexrelease>
+%<latexrelease>\def\@newline[#1]{\let \reserved@e \vadjust
+%<latexrelease> \@gnewline {\vskip #1}}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
% \end{macrocode}
% \end{macro}
%
+%
+%
% \begin{macro}{\@gnewline}
% \changes{v1.2u}{1996/10/29}{Added macro}
% The |\nobreak| added to prevent null lines when |\\|
@@ -518,7 +570,7 @@
% |\begin{@float}| \ldots |\end{@float}|
% that want to be invisible --- i.e.,
% not leave any extra space when used in the middle of text. Such
-% a macro should begin with |\@bsphack| and end with |\@esphack|
+% a macro should begin with |\@bsphack| and end with |\@esphack|.
% The macro in question should not create any text, nor change the
% mode.
%
@@ -823,20 +875,48 @@
% \changes{v1.2c}{1994/11/13}{Recorrected error message}
% Add vertical space taking into account space already added, as
% described above.
+% \changes{v1.3m}{2020/04/21}{Support calc syntax (gh/152)}
% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\addvspace}{\addvspace calc support}%
\def\addvspace#1{%
\ifvmode
\if@minipage\else
\ifdim \lastskip =\z@
- \vskip #1\relax
+ \@vspace@calcify{#1}%
\else
- \@tempskipb#1\relax
+ \setlength\@tempskipb{#1}%
\@xaddvskip
\fi
\fi
\else
\@noitemerr
\fi}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\addvspace}{\addvspace calc support}%
+%<latexrelease>
+%<latexrelease>\def\addvspace#1{%
+%<latexrelease> \ifvmode
+%<latexrelease> \if@minipage\else
+%<latexrelease> \ifdim \lastskip =\z@
+%<latexrelease> \vskip #1\relax
+%<latexrelease> \else
+%<latexrelease> \@tempskipb#1\relax
+%<latexrelease> \@xaddvskip
+%<latexrelease> \fi
+%<latexrelease> \fi
+%<latexrelease> \else
+%<latexrelease> \@noitemerr
+%<latexrelease> \fi}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
% \end{macrocode}
% \end{macro}
%
@@ -938,6 +1018,8 @@
% \end{macrocode}
% \end{macro}
%
+%
+%
% \begin{macro}{\vspace}
% \changes{v1.2m}{1996/01/20}{Made robust}
% \begin{macro}{\@vspace}
@@ -957,14 +1039,25 @@
% \end{itemize}
% \begin{macrocode}
\DeclareRobustCommand\vspace{\@ifstar\@vspacer\@vspace}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\@vspace}{Support calc in \vspace}%
+% \end{macrocode}
+% We support calc syntax in the argument and therefore use \cs{setlength}.
+% \changes{v1.3m}{2020/04/21}{Support calc syntax (gh/152)}
+% \begin{macrocode}
\def\@vspace #1{%
\ifvmode
- \vskip #1
+ \@vspace@calcify{#1}%
\vskip\z@skip
\else
\@bsphack
\vadjust{\@restorepar
- \vskip #1
+ \@vspace@calcify{#1}%
\vskip\z@skip
}%
\@esphack
@@ -977,7 +1070,7 @@
\dimen@\prevdepth
\hrule \@height\z@
\nobreak
- \vskip #1
+ \@vspace@calcify{#1}%
\vskip\z@skip
\prevdepth\dimen@
\else
@@ -985,10 +1078,46 @@
\vadjust{\@restorepar
\hrule \@height\z@
\nobreak
- \vskip #1
+ \@vspace@calcify{#1}%
\vskip\z@skip}%
\@esphack
\fi}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\@vspace}{Support calc in \vspace}%
+%<latexrelease>
+%<latexrelease>\def\@vspace #1{%
+%<latexrelease> \ifvmode
+%<latexrelease> \vskip #1
+%<latexrelease> \vskip\z@skip
+%<latexrelease> \else
+%<latexrelease> \@bsphack
+%<latexrelease> \vadjust{\@restorepar
+%<latexrelease> \vskip #1
+%<latexrelease> \vskip\z@skip
+%<latexrelease> }%
+%<latexrelease> \@esphack
+%<latexrelease> \fi}
+%<latexrelease>\def\@vspacer#1{%
+%<latexrelease> \ifvmode
+%<latexrelease> \dimen@\prevdepth
+%<latexrelease> \hrule \@height\z@
+%<latexrelease> \nobreak
+%<latexrelease> \vskip #1
+%<latexrelease> \vskip\z@skip
+%<latexrelease> \prevdepth\dimen@
+%<latexrelease> \else
+%<latexrelease> \@bsphack
+%<latexrelease> \vadjust{\@restorepar
+%<latexrelease> \hrule \@height\z@
+%<latexrelease> \nobreak
+%<latexrelease> \vskip #1
+%<latexrelease> \vskip\z@skip}%
+%<latexrelease> \@esphack
+%<latexrelease> \fi}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1094,17 +1223,6 @@
% \end{macrocode}
%
%
-% \begin{macro}{\,}
-% Used in paragraph mode produces a |\thinspace|. It has the
-% ordinary definition in math mode. Useful for quotes inside quotes,
-% as in |``\,`Foo', he said.''|
-% \changes{v1.0o}{1994/05/11}{Use \cs{DeclareRobustCommand}. ASAJ.}
-% \begin{macrocode}
-\DeclareRobustCommand{\,}{%
- \relax\ifmmode\mskip\thinmuskip\else\thinspace\fi
-}
-% \end{macrocode}
-% \end{macro}
%
% \begin{macro}{\@}
% Placed before a '.', makes it a sentence-ending period. Does the
@@ -1142,20 +1260,37 @@
% \changes{LaTeX2e}{1993/08/05}
% {(RmS) Removed superfluous \cs{leavevmode} in \cs{@hspace} and
% \cs{@hspacer}, as suggested by CAR.}
+% \changes{v1.3m}{2020/04/21}{Support calc syntax (gh/152)}
+% \begin{macrocode}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\@hspace}{Support calc with \hspace}%
+\def\@hspace#1{\begingroup\setlength\skip@{#1}\hskip\skip@\endgroup}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
% \begin{macrocode}
-\def\@hspace#1{\hskip #1\relax}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\@hspace}{Support calc with \hspace}%
+
+%<latexrelease>
+%<latexrelease>\def\@hspace#1{\hskip #1\relax}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
% \end{macrocode}
% \end{macro}
%
%
% \begin{macro}{\@hspacer}
-% extra |\hskip 0pt| added 1985/17/12 to guard
+% Extra |\hskip 0pt| added 1985/17/12 to guard
% against a following |\unskip|
% |\relax| added 13 Oct 88 for usual \TeX\ lossage
% replaced both changes by |\hskip\z@skip| 27 Nov 91
% \begin{macrocode}
\def\@hspacer#1{\vrule \@width\z@\nobreak
- \hskip #1\hskip \z@skip}
+ \@hspace{#1}\hskip \z@skip}
% \end{macrocode}
% \end{macro}
%
@@ -1184,19 +1319,12 @@
%<latexrelease> {\thinspace}{Start LR-mode}%
% \end{macrocode}
%
-%
-% \begin{macro}{\thinspace}
-% \begin{macro}{\negthinspace}
% \begin{macro}{\enspace}
% \changes{v1.3h}{2018/09/24}{Start LR-mode if necessary (git/49)}
% \begin{macrocode}
-\DeclareRobustCommand\thinspace{\leavevmode@ifvmode\kern .16667em }
-\DeclareRobustCommand\negthinspace{\leavevmode@ifvmode\kern-.16667em }
\DeclareRobustCommand\enspace{\leavevmode@ifvmode\kern.5em }
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
%
% \begin{macro}{\leavevmode@ifvmode}
% Leave vmode but only if we are really in vmode, otherwise the
@@ -1234,6 +1362,18 @@
% \end{macro}
% \end{macro}
%
+% \changes{v1.3n}{2020/05/06}{Made softhyphen active in TU engines}
+%
+% For Unicode engines, make the Unicode soft hyphen an active
+% character defined as \cs{-}.
+%
+% \begin{macrocode}
+\ifx\Umathcode\@undefined\else
+ \catcode "AD=13
+ \def^^ad{\-}
+\fi
+% \end{macrocode}
+%
% \begin{macro}{\obeycr}
% \begin{macro}{\restorecr}
% The following definitions will probably get deleted or moved to
diff --git a/macros/latex-dev/base/lttab.dtx b/macros/latex-dev/base/lttab.dtx
index 47cf4a6618..dedd9e5d37 100644
--- a/macros/latex-dev/base/lttab.dtx
+++ b/macros/latex-dev/base/lttab.dtx
@@ -31,7 +31,7 @@
%%% From File: lttab.dtx
%<*driver>
% \fi
-\ProvidesFile{lttab.dtx}[2019/10/07 v1.1q LaTeX Kernel (Columns)]
+\ProvidesFile{lttab.dtx}[2020/04/24 v1.1r LaTeX Kernel (Columns)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{lttab.dtx}
@@ -475,11 +475,28 @@
% \end{macro}
%
% \begin{macro}{\@itabcr}
+% \changes{v1.1r}{2020/04/21}{Support calc syntax (gh/152)}
% \begin{macrocode}
-\def\@itabcr[#1]{\vskip #1\@startline\ignorespaces}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\@itabcr}{Tabbing calc syntax}%
+\def\@itabcr[#1]{\@vspace@calcify{#1}\@startline\ignorespaces}
+%</2ekernel|latexrelease>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\@itabcr}{Tabbing calc syntax}%
+%<latexrelease>
+%<latexrelease>\def\@itabcr[#1]{\vskip #1\@startline\ignorespaces}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
% \end{macrocode}
%
%
+% \begin{environment}{tabbing}
% \begin{macro}{\tabbing}
% \changes{v1.1f}{1995/10/23}{(CAR)Make \cs{@hightab} consistently a
% local variable}
@@ -513,6 +530,8 @@
\@stopline\ifnum\@tabpush >\z@ \@badpoptabs \fi\endtrivlist}
% \end{macrocode}
% \end{macro}
+% \end{environment}
+%
%
% \begin{macro}{\@rtab}
% Omitted |\global| added to |\@rtab| 17 Jun 86
@@ -815,6 +834,7 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{environment}{array}
% \begin{macro}{\array}
% \begin{macrocode}
\def\array{\let\@acol\@arrayacol \let\@classz\@arrayclassz
@@ -822,6 +842,7 @@
\let\\\@arraycr\let\@halignto\@empty\@tabarray}
% \end{macrocode}
% \end{macro}
+% \end{environment}
%
% \begin{macro}{\endarray}
% \begin{macro}{\endtabular}
@@ -835,11 +856,13 @@
% \end{macro}
% \end{macro}
%
+% \begin{environment}{tabular}
% \begin{macro}{\tabular}
% \begin{macrocode}
\def\tabular{\let\@halignto\@empty\@tabular}
% \end{macrocode}
% \end{macro}
+% \end{environment}
%
% \begin{macro}{\tabular*}
% \changes{v1.1j}{1998/05/18}{Use \cs{setlength}, so that
@@ -1003,8 +1026,24 @@
% \end{macro}
%
% \begin{macro}{\@yargarraycr}
+% \changes{v1.1r}{2020/04/21}{Support calc syntax (gh/152)}
% \begin{macrocode}
-\def\@yargarraycr#1{\cr\noalign{\vskip #1}}
+%</2ekernel>
+%<*2ekernel|latexrelease>
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\@yargarraycr}{tabular support calc syntax}%
+\def\@yargarraycr#1{\cr\noalign{\@vspace@calcify{#1}}}
+%</2ekernel|latexrelease>
+%<latexrelease>\EndIncludeInRelease
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<latexrelease>\IncludeInRelease{0000/00/00}%
+%<latexrelease> {\@yargarraycr}{tabular support calc syntax}%
+%<latexrelease>
+%<latexrelease>\def\@yargarraycr#1{\cr\noalign{\vskip #1}}
+%<latexrelease>\EndIncludeInRelease
+%<*2ekernel>
% \end{macrocode}
% \end{macro}
%
diff --git a/macros/latex-dev/base/lttextcomp.dtx b/macros/latex-dev/base/lttextcomp.dtx
index dc2c2c49c7..3b6231dafd 100644
--- a/macros/latex-dev/base/lttextcomp.dtx
+++ b/macros/latex-dev/base/lttextcomp.dtx
@@ -33,7 +33,7 @@
%
%
\ProvidesFile{lttextcomp.dtx}
- [2020/02/20 v1.0c LaTeX Kernel (text companion symbols)]
+ [2020/04/29 v1.0d LaTeX Kernel (text companion symbols)]
% \iffalse
\documentclass{ltxdoc}
\begin{document}
@@ -565,24 +565,25 @@
%
% In Unicode engines we just execute the simple accents:
% \changes{v1.0c}{2020/02/10}{Use \cs{@tabacckludge} for tabbing where necessary (gh/271)}
+% \changes{v1.0d}{2020/04/29}{Make all captial accents text commands for hyperref (gh/332)}
% \begin{macrocode}
\else
- \def\capitalacute{\@tabacckludge'}
- \def\capitalbreve{\u}
- \def\capitalcaron{\v}
- \def\capitalcedilla{\c}
- \def\capitalcircumflex{\^}
- \def\capitaldieresis{\"}
- \def\capitaldotaccent{\.}
- \def\capitalgrave{\@tabacckludge`}
- \def\capitalhungarumlaut{\H}
- \def\capitalmacron{\@tabacckludge=}
- \def\capitalnewtie{\t}
- \def\capitalogonek{\k}
- \def\capitalring{\r}
- \def\capitaltie{\t}
- \def\capitaltilde{\~}
- \def\newtie{\t}
+ \DeclareTextCommandDefault\capitalacute{\@tabacckludge'}
+ \DeclareTextCommandDefault\capitalbreve{\u}
+ \DeclareTextCommandDefault\capitalcaron{\v}
+ \DeclareTextCommandDefault\capitalcedilla{\c}
+ \DeclareTextCommandDefault\capitalcircumflex{\^}
+ \DeclareTextCommandDefault\capitaldieresis{\"}
+ \DeclareTextCommandDefault\capitaldotaccent{\.}
+ \DeclareTextCommandDefault\capitalgrave{\@tabacckludge`}
+ \DeclareTextCommandDefault\capitalhungarumlaut{\H}
+ \DeclareTextCommandDefault\capitalmacron{\@tabacckludge=}
+ \DeclareTextCommandDefault\capitalnewtie{\t}
+ \DeclareTextCommandDefault\capitalogonek{\k}
+ \DeclareTextCommandDefault\capitalring{\r}
+ \DeclareTextCommandDefault\capitaltie{\t}
+ \DeclareTextCommandDefault\capitaltilde{\~}
+ \DeclareTextCommandDefault\newtie{\t}
\fi
% \end{macrocode}
%
diff --git a/macros/latex-dev/base/ltvers.dtx b/macros/latex-dev/base/ltvers.dtx
index ed2abe1088..dd39a67896 100644
--- a/macros/latex-dev/base/ltvers.dtx
+++ b/macros/latex-dev/base/ltvers.dtx
@@ -115,7 +115,7 @@
{2020-10-01}
%</2ekernel|latexrelease>
%<*2ekernel>
-\def\patch@level{-5}
+\def\patch@level{-6}
% \end{macrocode}
%
% \begin{macro}{\development@branch@name}
diff --git a/macros/latex-dev/base/ltx3info.pdf b/macros/latex-dev/base/ltx3info.pdf
index b0b6c36690..cee525e113 100644
--- a/macros/latex-dev/base/ltx3info.pdf
+++ b/macros/latex-dev/base/ltx3info.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltxdoc.pdf b/macros/latex-dev/base/ltxdoc.pdf
index f7d0cc4d62..ed04747867 100644
--- a/macros/latex-dev/base/ltxdoc.pdf
+++ b/macros/latex-dev/base/ltxdoc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/ltxref.dtx b/macros/latex-dev/base/ltxref.dtx
index c20a324558..9818757149 100644
--- a/macros/latex-dev/base/ltxref.dtx
+++ b/macros/latex-dev/base/ltxref.dtx
@@ -33,7 +33,7 @@
%<*driver>
% \fi
\ProvidesFile{ltxref.dtx}
- [2019/09/16 v1.1m LaTeX Kernel (Cross Referencing)]
+ [2020/05/07 v1.1n LaTeX Kernel (Cross Referencing)]
% \iffalse
\documentclass{ltxdoc}
\GetFileInfo{ltxref.dtx}
@@ -311,14 +311,16 @@
% \begin{macrocode}
%</2ekernel>
%<*2ekernel|latexrelease>
-%<latexrelease>\IncludeInRelease{2019/10/01}%
-%<latexrelease> {\refstepcounter}{Add \labelformat and \Ref}%
+%<latexrelease>\IncludeInRelease{2020/10/01}%
+%<latexrelease> {\refstepcounter}{Add \@currentcounter}%
% \end{macrocode}
%
% \begin{macro}{\refstepcounter}
% Step the counter and allow for labels to point to its current value.
+% \changes{v1.1n}{2020/05/05}{record the counter name in \cs{@currentcounter}}
% \begin{macrocode}
\def\refstepcounter#1{\stepcounter{#1}%
+ \edef\@currentcounter{#1}%
\protected@edef\@currentlabel
% \end{macrocode}
% By generating the second csname first the |\p@...| command can
@@ -381,6 +383,16 @@
% \begin{macrocode}
%</2ekernel|latexrelease>
%<latexrelease>\EndIncludeInRelease
+%<latexrelease>\IncludeInRelease{2019/10/01}%
+%<latexrelease> {\refstepcounter}{Add \labelformat and \Ref}%
+%<latexrelease>\def\refstepcounter#1{\stepcounter{#1}%
+%<latexrelease> \protected@edef\@currentlabel
+%<latexrelease> {\csname p@#1\expandafter\endcsname\csname the#1\endcsname}%
+%<latexrelease>}
+%<latexrelease>\def\labelformat#1{\expandafter\def\csname p@#1\endcsname##1}
+%<latexrelease>\DeclareRobustCommand\Ref[1]{\protected@edef\@tempa{\ref{#1}}%
+%<latexrelease> \expandafter\MakeUppercase\@tempa}
+%<latexrelease>\EndIncludeInRelease
%<latexrelease>\IncludeInRelease{0000/00/00}%
%<latexrelease> {\refstepcounter}{Add \labelformat and \Ref}%
%<latexrelease>
diff --git a/macros/latex-dev/base/makeindx.pdf b/macros/latex-dev/base/makeindx.pdf
index d6c2172b6e..fc3f0bb507 100644
--- a/macros/latex-dev/base/makeindx.pdf
+++ b/macros/latex-dev/base/makeindx.pdf
Binary files differ
diff --git a/macros/latex-dev/base/manifest.txt b/macros/latex-dev/base/manifest.txt
index 6d5462aeb9..20866ec2d9 100644
--- a/macros/latex-dev/base/manifest.txt
+++ b/macros/latex-dev/base/manifest.txt
@@ -1,5 +1,5 @@
%
-% The following files form the LaTeX2e distribution of 2017-04-15
+% The following files form the LaTeX2e distribution of 2020-10-01
%
%
% CONTENTS OF THE LaTeX DISTRIBUTION
@@ -8,13 +8,12 @@
% Documentation:
% --------------
%
-% README.txt -- The distribution guide. START BY READING THIS FILE
+% README.md -- The distribution guide. START BY READING THIS FILE
% manifest.txt -- This file.
%
% tex2.txt -- Extras for installing LaTeX on TeX2.
%
% texpert.txt -- Documentation for TeX experts.
-% patches.txt -- Explains the patch mechanism.
%
% legal.txt -- Copyright notice; warranty; copying conditions.
% lppl.txt -- The LaTeX Project Public License (current version).
@@ -27,6 +26,7 @@
%
% source2e.tex -- File to produce kernel documentation.
% changes.txt -- List of changes in reverse chronological order.
+% latexchanges.tex -- Describes the changes to the LaTeX format since 2014-05-01
%
% sample2e.tex -- Sample LaTeX input file.
% small2e.tex -- Small sample LaTeX input file.
@@ -65,6 +65,12 @@
% ltnews24.tex -- What was new in the release dated 2016/02.
% ltnews25.tex -- What was new in the release dated 2016/03.
% ltnews26.tex -- What was new in the release dated 2017/01.
+% ltnews27.tex -- What was new in the release dated 2017/04.
+% ltnews28.tex -- What was new in the release dated 2018/04.
+% ltnews29.tex -- What was new in the release dated 2018/12.
+% ltnews30.tex -- What was new in the release dated 2019/10.
+% ltnews31.tex -- What was new in the release dated 2020/02.
+% ltnews32.tex -- What was new in the release dated 2020/10.
%
% ltx3info.tex -- Information about the LaTeX3 project.
@@ -116,6 +122,7 @@
% ltpage.dtx -- Page styles and related commands.
% ltplain.dtx -- Things borrowed from the plain format.
% lttab.dtx -- The tabbing, tabular and array environments.
+% lttextcomp -- The text companion symbols
% ltthm.dtx -- The theorem-like environments.
% ltsect.dtx -- Sectioning and title commands.
% ltvers.dtx -- Version identification code.
@@ -183,15 +190,17 @@
% alltt.ins -- Installation script for the alltt package.
% classes.ins -- Installation script for standard classes.
% cmfonts.ins -- Installation script for OT* Computer Modern fonts.
+% ec.ins -- Installation script for T1 and TS1 EC fonts.
% newdc.ins -- Installation script for T* Computer Modern fonts.
% docstrip.ins -- Installation script for docstrip.
% exscale.ins -- Installation script for scaling the cmex font.
-% fixltx2e.ins -- Installation script for the fixltx2e package.
+% fix-cm.ins -- Installation script for modified cm font choices
% format.ins -- Installation script for latex.ltx.
% graphpap.ins -- Installation script for graphpap.dtx.
% inputenc.ins -- Installation script for inputenc.dtx.
% ifthen.ins -- Installation script for ifthen.dtx.
% latex209.ins -- Installation script for compatibility mode.
+% latexrelease.ins-- Installation script for release stability
% latexsym.ins -- Installation script for latexsym.dtx.
% letter.ins -- Installation script for document class letter.
% ltoutenc.ins -- Installation script for output encoding files.
@@ -206,7 +215,6 @@
% ----------------------------------------------
%
% cmextra.ins -- Installation script for additional CM fonts.
-% ec.ins -- Installation script for T1 and TS1 EC fonts.
% olddc.ins -- Installation script for obsolete dc fonts (v1.1).
%
%
diff --git a/macros/latex-dev/base/manual.pdf b/macros/latex-dev/base/manual.pdf
index 787714470f..19aca62958 100644
--- a/macros/latex-dev/base/manual.pdf
+++ b/macros/latex-dev/base/manual.pdf
Binary files differ
diff --git a/macros/latex-dev/base/modguide.pdf b/macros/latex-dev/base/modguide.pdf
index 9bcc7f9956..8b9cf82d07 100644
--- a/macros/latex-dev/base/modguide.pdf
+++ b/macros/latex-dev/base/modguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/nfssfont.pdf b/macros/latex-dev/base/nfssfont.pdf
index f64d059903..bd5c9aef0f 100644
--- a/macros/latex-dev/base/nfssfont.pdf
+++ b/macros/latex-dev/base/nfssfont.pdf
Binary files differ
diff --git a/macros/latex-dev/base/proc.pdf b/macros/latex-dev/base/proc.pdf
index 9c1d27f4e1..4a2bf11846 100644
--- a/macros/latex-dev/base/proc.pdf
+++ b/macros/latex-dev/base/proc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/slides.pdf b/macros/latex-dev/base/slides.pdf
index 30e0437bec..5922db016b 100644
--- a/macros/latex-dev/base/slides.pdf
+++ b/macros/latex-dev/base/slides.pdf
Binary files differ
diff --git a/macros/latex-dev/base/slifonts.pdf b/macros/latex-dev/base/slifonts.pdf
index 24093386ef..638b84873b 100644
--- a/macros/latex-dev/base/slifonts.pdf
+++ b/macros/latex-dev/base/slifonts.pdf
Binary files differ
diff --git a/macros/latex-dev/base/source2e.pdf b/macros/latex-dev/base/source2e.pdf
index 2ff5360a99..882d7b2cc6 100644
--- a/macros/latex-dev/base/source2e.pdf
+++ b/macros/latex-dev/base/source2e.pdf
Binary files differ
diff --git a/macros/latex-dev/base/syntonly.pdf b/macros/latex-dev/base/syntonly.pdf
index f653c51bba..e2387a21b2 100644
--- a/macros/latex-dev/base/syntonly.pdf
+++ b/macros/latex-dev/base/syntonly.pdf
Binary files differ
diff --git a/macros/latex-dev/base/tlc2.pdf b/macros/latex-dev/base/tlc2.pdf
index 230d37b431..90de5dd226 100644
--- a/macros/latex-dev/base/tlc2.pdf
+++ b/macros/latex-dev/base/tlc2.pdf
Binary files differ
diff --git a/macros/latex-dev/base/tulm.pdf b/macros/latex-dev/base/tulm.pdf
index b0f9e7b62d..483f155a56 100644
--- a/macros/latex-dev/base/tulm.pdf
+++ b/macros/latex-dev/base/tulm.pdf
Binary files differ
diff --git a/macros/latex-dev/base/usrguide.pdf b/macros/latex-dev/base/usrguide.pdf
index 93bf90b2ac..a2dcf1b785 100644
--- a/macros/latex-dev/base/usrguide.pdf
+++ b/macros/latex-dev/base/usrguide.pdf
Binary files differ
diff --git a/macros/latex-dev/base/usrguide.tex b/macros/latex-dev/base/usrguide.tex
index c76b27c0f0..4c2ddf24af 100644
--- a/macros/latex-dev/base/usrguide.tex
+++ b/macros/latex-dev/base/usrguide.tex
@@ -34,10 +34,10 @@
\title{\LaTeXe~for authors}
-\author{\copyright~Copyright 1995--2019, \LaTeX3 Project Team.\\
+\author{\copyright~Copyright 1995--2020, \LaTeX3 Project Team.\\
All rights reserved.}
-\date{27 January 2019}
+\date{25 May 2020}
\begin{document}
@@ -505,44 +505,6 @@ This section describes the new commands available in \LaTeXe.
They are covered in more detail in \emph{\LaTeXbook} and in
\emph{\LaTeXcomp}.
-\subsection{Initial commands}
-
-Initial commands can appear only before the |\documentclass|
-line.
-
-\begin{decl}
-|\begin{filecontents}| \arg{file-name} \\
- \m{file-contents} \\
-|\end{filecontents}|
-\end{decl}
-
-The |filecontents| environment is intended for bundling within a
-single document file the contents of packages, options, or other
-files. When the document file is run through \LaTeXe{} the body of
-this environment is written verbatim (preceded by a comment line) to a
-file whose name is given as the environment's only argument. However,
-if that file already exists then nothing happens except for an
-information message.
-
-Only normal ASCII text characters (7-bit visible text) should be
-included in a |filecontents| environment. Anything else, such as tab
-characters, form-feeds or 8-bit characters, should not be included in a
-|filecontents| environment.
-
-Tabs and form feeds produce a warning, explaining that they are turned
-into spaces or blank lines, respectively.
-What happens to 8-bit characters depends on the \TeX{} installation and
-is in general unpredictable.
-
-The |filecontents| environment is used for including \LaTeX{} files.
-For other plain text files (such as Encapsulated PostScript files),
-you should use the |filecontents*| environment which does not add a
-comment line.
-
-These environments are allowed only before |\documentclass|. This
-ensures that any packages that have been bundled in the document are
-present when needed.
-
\subsection{Preamble commands}
\label{Sec:pre}
@@ -559,8 +521,10 @@ This command replaces the
\LaTeX~2.09 command |\documentstyle|.
There must be exactly one |\documentclass| command in a document; and
-it must come after the |filecontents| environments, if any, but before
-any other commands.
+it should normally come before any other command. (There are some
+exceptions, e.g., you can have |filecontents| environments before it
+or |\RequirePackage| but these should be only used in special
+scenarios as discussed elsewhere.)
The \m{option-list} is a list of options, each of which may modify the
formatting of elements which are defined in the \m{class-name} file,
@@ -657,6 +621,52 @@ through the standard |\setcounter| command. As most \LaTeX\ users do
not want to see the internal definitions of \LaTeX\ commands each time
they make an error, \LaTeXe{} sets this to $-1$ by default.
+
+\subsection{Environments to write out support files}
+
+\NEWfeature{2019}
+%
+Until the \LaTeX\ release in 2019 the |filecontents| environment was
+restricted to a place before the |\documentclass| command. These days
+it can be used anywhere, though we still think that in most cases it is
+best to only use it a the top of your document or in the preamble.
+
+\begin{decl}
+|\begin{filecontents}| \oarg{option-list} \arg{file-name} \\
+ \m{file-contents} \\
+|\end{filecontents}|
+\end{decl}
+
+The |filecontents| environment is intended for bundling within a
+single document file the contents of packages, options, or other
+files. When the document file is run through \LaTeXe{} the body of
+this environment is written verbatim (preceded by a comment line) to a
+file whose name is given as the environment's only argument. However,
+if that file already exists then nothing happens except for an
+information message.
+
+These days most UTF-8 text characters can be used in a
+|filecontents| envi\-ronment---they will be written unchanged to the
+output file. However, tabs and form feeds produce a warning,
+explaining that they are turned into spaces or blank lines,
+respectively.
+
+By default the environment does not overwrite an existing file and it
+even refuses to write out the data if there exists a file that is
+anywhere in the path that \TeX\ searches when inputting files. With
+the option |nosearch| you can ask it to look only into the current
+directory and with the option |overwrite| (or |force|) you can request
+it to write the file regardless. It will, however, never write to
+|\jobname.tex| to avoid overwriting itself.
+
+The |filecontents| environment is used for including \LaTeX{} files.
+For other plain text files (such as Encapsulated PostScript files),
+you should use the |filecontents*| environment which does not add a
+comment line.
+
+
+
+
\subsection{Document structure}
The |book| document class introduces new commands to indicate
diff --git a/macros/latex-dev/base/utf8ienc.pdf b/macros/latex-dev/base/utf8ienc.pdf
index a4794e4ba3..c27ce9669b 100644
--- a/macros/latex-dev/base/utf8ienc.pdf
+++ b/macros/latex-dev/base/utf8ienc.pdf
Binary files differ
diff --git a/macros/latex-dev/base/webcomp.pdf b/macros/latex-dev/base/webcomp.pdf
index e576a8cda0..32a69c71c9 100644
--- a/macros/latex-dev/base/webcomp.pdf
+++ b/macros/latex-dev/base/webcomp.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/README.md b/macros/latex-dev/required/amsmath/README.md
index e10fadce5d..60947e6717 100644
--- a/macros/latex-dev/required/amsmath/README.md
+++ b/macros/latex-dev/required/amsmath/README.md
@@ -1,7 +1,7 @@
The amsmath bundle for LaTeX
============================
-Release 2020-02-01 pre-release 1
+Release 2020-10-01 pre-release 1
Overview
--------
@@ -77,5 +77,5 @@ version 1.3c or later.
-----
<p>Copyright (C) 2001-2004, 2007, 2008, 2010, 2011, 2013 American Mathematical Society. <br />
-<p>Copyright (C) 2016-2019 The LaTeX Project and American Mathematical Society. <br />
+<p>Copyright (C) 2016-2020 The LaTeX Project and American Mathematical Society. <br />
diff --git a/macros/latex-dev/required/amsmath/amsbsy.dtx b/macros/latex-dev/required/amsmath/amsbsy.dtx
index 890fbd0d82..1174784278 100644
--- a/macros/latex-dev/required/amsmath/amsbsy.dtx
+++ b/macros/latex-dev/required/amsmath/amsbsy.dtx
@@ -2,7 +2,7 @@
% \iffalse meta-comment
%
% Copyright (C) 1995, 1999 American Mathematical Society.
-% Copyright (C) 2016-2019 LaTeX3 Project and American Mathematical Society.
+% Copyright (C) 2016-2020 LaTeX3 Project and American Mathematical Society.
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -11,9 +11,9 @@
% https://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
-%
+%
% This work has the LPPL maintenance status `maintained'.
-%
+%
% The Current Maintainer of this work is the LaTeX3 Project.
%
% \fi
diff --git a/macros/latex-dev/required/amsmath/amsbsy.ins b/macros/latex-dev/required/amsmath/amsbsy.ins
index fe1cd5413d..07707907e9 100644
--- a/macros/latex-dev/required/amsmath/amsbsy.ins
+++ b/macros/latex-dev/required/amsmath/amsbsy.ins
@@ -1,7 +1,7 @@
-%%
+%%
%% Copyright 2010 American Mathematical Society.
%% Copyright 2016 LaTeX3 Project and American Mathematical Society.
-%%
+%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
%% of this license or (at your option) any later version.
@@ -9,9 +9,9 @@
%% https://www.latex-project.org/lppl.txt
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
-%%
+%%
%% This work has the LPPL maintenance status `maintained'.
-%%
+%%
%% The Current Maintainer of this work is the LaTeX3 Project.
%%
%% ====================================================================
diff --git a/macros/latex-dev/required/amsmath/amsbsy.pdf b/macros/latex-dev/required/amsmath/amsbsy.pdf
index 385669d431..7c3449cd04 100644
--- a/macros/latex-dev/required/amsmath/amsbsy.pdf
+++ b/macros/latex-dev/required/amsmath/amsbsy.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amscd.dtx b/macros/latex-dev/required/amsmath/amscd.dtx
index 2d0a35d685..12e94a11dc 100644
--- a/macros/latex-dev/required/amsmath/amscd.dtx
+++ b/macros/latex-dev/required/amsmath/amscd.dtx
@@ -2,7 +2,7 @@
% \iffalse meta-comment
%
% Copyright (C) 1995, 1999 American Mathematical Society.
-% Copyright (C) 2016-2019 LaTeX3 Project and American Mathematical Society.
+% Copyright (C) 2016-2020 LaTeX3 Project and American Mathematical Society.
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -11,9 +11,9 @@
% https://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
-%
+%
% This work has the LPPL maintenance status `maintained'.
-%
+%
% The Current Maintainer of this work is the LaTeX3 Project.
%
% \fi
diff --git a/macros/latex-dev/required/amsmath/amscd.ins b/macros/latex-dev/required/amsmath/amscd.ins
index 148c4cb32e..5890ca06c1 100644
--- a/macros/latex-dev/required/amsmath/amscd.ins
+++ b/macros/latex-dev/required/amsmath/amscd.ins
@@ -1,7 +1,7 @@
-%%
+%%
%% Copyright 2010 American Mathematical Society.
%% Copyright 2016 LaTeX3 Project and American Mathematical Society.
-%%
+%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
%% of this license or (at your option) any later version.
@@ -9,9 +9,9 @@
%% https://www.latex-project.org/lppl.txt
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
-%%
+%%
%% This work has the LPPL maintenance status `maintained'.
-%%
+%%
%% The Current Maintainer of this work is the LaTeX3 Project.
%%
%% ====================================================================
diff --git a/macros/latex-dev/required/amsmath/amscd.pdf b/macros/latex-dev/required/amsmath/amscd.pdf
index 3ef1ed5ed1..2fba393436 100644
--- a/macros/latex-dev/required/amsmath/amscd.pdf
+++ b/macros/latex-dev/required/amsmath/amscd.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amsgen.dtx b/macros/latex-dev/required/amsmath/amsgen.dtx
index 5edc26b9cc..92df548f12 100644
--- a/macros/latex-dev/required/amsmath/amsgen.dtx
+++ b/macros/latex-dev/required/amsmath/amsgen.dtx
@@ -2,7 +2,7 @@
% \iffalse meta-comment
%
% Copyright (C) 1995, 1999 American Mathematical Society.
-% Copyright (C) 2016-2019 LaTeX3 Project and American Mathematical Society.
+% Copyright (C) 2016-2020 LaTeX3 Project and American Mathematical Society.
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -11,9 +11,9 @@
% https://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
-%
+%
% This work has the LPPL maintenance status `maintained'.
-%
+%
% The Current Maintainer of this work is the LaTeX3 Project.
%
% \fi
diff --git a/macros/latex-dev/required/amsmath/amsgen.ins b/macros/latex-dev/required/amsmath/amsgen.ins
index 8c5683cb5a..be7720bc89 100644
--- a/macros/latex-dev/required/amsmath/amsgen.ins
+++ b/macros/latex-dev/required/amsmath/amsgen.ins
@@ -1,7 +1,7 @@
-%%
+%%
%% Copyright 2010 American Mathematical Society.
%% Copyright 2016 LaTeX3 Project and American Mathematical Society.
-%%
+%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
%% of this license or (at your option) any later version.
@@ -9,9 +9,9 @@
%% https://www.latex-project.org/lppl.txt
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
-%%
+%%
%% This work has the LPPL maintenance status `maintained'.
-%%
+%%
%% The Current Maintainer of this work is the LaTeX3 Project.
%%
%% ====================================================================
diff --git a/macros/latex-dev/required/amsmath/amsgen.pdf b/macros/latex-dev/required/amsmath/amsgen.pdf
index 9867352fe7..5a66176289 100644
--- a/macros/latex-dev/required/amsmath/amsgen.pdf
+++ b/macros/latex-dev/required/amsmath/amsgen.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amsldoc.pdf b/macros/latex-dev/required/amsmath/amsldoc.pdf
index 59248ae49f..53ff255a9d 100644
--- a/macros/latex-dev/required/amsmath/amsldoc.pdf
+++ b/macros/latex-dev/required/amsmath/amsldoc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amsldoc.tex b/macros/latex-dev/required/amsmath/amsldoc.tex
index 8573682a66..b29a8b8468 100644
--- a/macros/latex-dev/required/amsmath/amsldoc.tex
+++ b/macros/latex-dev/required/amsmath/amsldoc.tex
@@ -1,6 +1,6 @@
%
% Copyright (C) 1995, 2000, 2013 American Mathematical Society.
-% Copyright (C) 2016-2019 LaTeX3 Project and American Mathematical Society.
+% Copyright (C) 2016-2020 LaTeX3 Project and American Mathematical Society.
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -9,9 +9,9 @@
% https://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
-%
+%
% This work has the LPPL maintenance status `maintained'.
-%
+%
% The Current Maintainer of this work is the LaTeX3 Project.
%
\documentclass[leqno,titlepage,openany]{amsldoc}[1999/12/13]
@@ -64,7 +64,7 @@ Bug reports can be opened (category \texttt{#1}) at\\%
\title{User's Guide for the \nipkg{amsmath} Package (Version~2.1)}
\author{American Mathematical Society, \LaTeX3 Project}
-\date{1999-12-13\\(revised 2002-02-25, 2016-11-14, 2018-04-05, 2019-10-14)}
+\date{1999-12-13\\(revised 2002-02-25, 2016-11-14, 2018-04-05, 2019-10-14, 2020-02-18)}
\makeatletter
\def\@thanks{\bigskip\MaintainedByLaTeXTeam{amslatex}}
\makeatother
@@ -928,7 +928,11 @@ in accurately calculating the profile of an equation can occasionally
result in number movement that doesn't look right.
A \cn{raisetag} command is provided to adjust the vertical position of the
current equation number, if it has been shifted away from its normal
-position. To move a particular number up by six points, write
+position. If it is in its normal position the command has no effect whatsoever.
+In particular, this means that one can't use it to shift the tag of an \env{equation}
+environment.
+
+To move a particular number up by six points, write
|\raisetag{6pt}|. (At the end of a display, this also shifts up the
text following the display.)
This kind of adjustment is fine tuning like line
@@ -1032,7 +1036,7 @@ C.8.4]{lamport}:
This works pretty well, except that the equation counter won't be reset
to zero at the beginning of a new section or chapter, unless you do it
yourself using \cn{setcounter}. To make this a little more convenient,
-the \nipkg{amsmath} package provides a
+the \nipkg{amsmath} package provides a
command\index{equationn@equation numbers!hierarchy} \cn{numberwithin}.
To have equation numbering tied to section numbering, with automatic
reset of the equation counter, write
diff --git a/macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty b/macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty
index f684834649..6bcb03e217 100644
--- a/macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty
+++ b/macros/latex-dev/required/amsmath/amsmath-2018-12-01.sty
@@ -4,11 +4,11 @@
%%
%% The original source files were:
%%
-%% amsmath.dtx
-%%
+%% amsmath.dtx
+%%
%% Copyright 1995, 1999, 2000, 2013 American Mathematical Society.
%% Copyright 2016 LaTeX3 Project and American Mathematical Society.
-%%
+%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
%% of this license or (at your option) any later version.
@@ -16,11 +16,11 @@
%% https://www.latex-project.org/lppl.txt
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
-%%
+%%
%% This work has the LPPL maintenance status `maintained'.
-%%
+%%
%% The Current Maintainer of this work is the LaTeX3 project.
-%%
+%%
\NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX)
[1994/12/01]% LaTeX date must be December 1994 or later
\ProvidesPackage{amsmath}[2018/12/01 v2.17b AMS math features]
diff --git a/macros/latex-dev/required/amsmath/amsmath.dtx b/macros/latex-dev/required/amsmath/amsmath.dtx
index 11b7545c26..e3ad7c6042 100644
--- a/macros/latex-dev/required/amsmath/amsmath.dtx
+++ b/macros/latex-dev/required/amsmath/amsmath.dtx
@@ -2,7 +2,7 @@
% \iffalse meta-comment
%
% Copyright (C) 1995, 2000, 2013 American Mathematical Society.
-% Copyright (C) 2016-2019 LaTeX3 Project and American Mathematical Society.
+% Copyright (C) 2016-2020 LaTeX3 Project and American Mathematical Society.
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -11,9 +11,9 @@
% https://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
-%
+%
% This work has the LPPL maintenance status `maintained'.
-%
+%
% The Current Maintainer of this work is the LaTeX3 Project.
%
% \fi
@@ -86,7 +86,7 @@ Bug reports can be opened (category \texttt{#1}) at\\%
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesPackage{amsmath}[2019/11/16 v2.17d AMS math features]
+\ProvidesPackage{amsmath}[2020/03/17 v2.17g AMS math features]
% \end{macrocode}
%
% \section{Catcode defenses}
@@ -302,10 +302,13 @@ For additional information on amsmath, use the \lq ?\rq\space option.%
% \end{macrocode}
%
% Processing to handle the \opt{cmex10} option is a little tricky
-% because of different possible loading orders for \pkg{amsmath} and
-% \pkg{amsfonts}. The package \pkg{amsmath} sets the \cs{cmex@opt}
-% flag to 7 or 10, and the package \pkg{amsfonts} sets the flag to 1
-% or 0.
+% because of different possible loading orders for \pkg{amsmath}
+% and \pkg{amsfonts}. The package \pkg{amsmath} sets the
+% \cs{cmex@opt} flag to 0, 7 or 10, and in the past the package
+% \pkg{amsfonts} did set the flag to 1 or 0. These days it always
+% sets it to 10. The situation is a bit unsettled but we don't own
+% \pkg{amsfonts}.
+% \changes{v2.17d}{2019/12/01}{docu update, no code change (gh/200)}
% \begin{macrocode}
\ifnum\cmex@opt=7 \relax
\DeclareFontShape{OMX}{cmex}{m}{n}{%
@@ -463,24 +466,41 @@ For additional information on amsmath, use the \lq ?\rq\space option.%
% \cs{DeclareRobustCommand}.
% \changes{v2.17b}{2018/12/01}{Start LR-mode for \cs{thinspace} and
% friends if necessary (github/49)}
+%
+% We start by undefining a number of commands (which in a current
+% \LaTeX{} kernel will be defined, so that the
+% \cs{DeclareRobustCommand} declarations below do not add a
+% ``Command redefined'' info into the log.
+% \begin{macrocode}
+\let\tmspace\@undefined
+\let\,\@undefined
+\let\!\@undefined
+\let\:\@undefined
+\let\negmedspace\@undefined
+\let\negthickspace\@undefined
+% \end{macrocode}
+%
+%
+% \changes{v2.17g}{2020/03/07}{Math/text spacing commands are now in
+% the \LaTeX{} kernel and are made robust (gh/303)}
% \begin{macrocode}
\ifx\leavevmode@ifvmode\@undefined
-\DeclareRobustCommand{\tmspace}[3]{%
+\DeclareRobustCommand\tmspace[3]{%
\ifmmode\mskip#1#2\else\kern#1#3\fi\relax}
\else
-\DeclareRobustCommand{\tmspace}[3]{%
+\DeclareRobustCommand\tmspace[3]{%
\ifmmode\mskip#1#2\else\leavevmode@ifvmode\kern#1#3\fi\relax}
\fi
-\renewcommand{\,}{\tmspace+\thinmuskip{.1667em}}
+\DeclareRobustCommand\,{\tmspace+\thinmuskip{.1667em}}
\let\thinspace\,
-\renewcommand{\!}{\tmspace-\thinmuskip{.1667em}}
+\DeclareRobustCommand\!{\tmspace-\thinmuskip{.1667em}}
\let\negthinspace\!
-\renewcommand{\:}{\tmspace+\medmuskip{.2222em}}
+\DeclareRobustCommand\:{\tmspace+\medmuskip{.2222em}}
\let\medspace\:
-\newcommand{\negmedspace}{\tmspace-\medmuskip{.2222em}}
-\renewcommand{\;}{\tmspace+\thickmuskip{.2777em}}
+\DeclareRobustCommand\negmedspace{\tmspace-\medmuskip{.2222em}}
+\renewcommand\;{\tmspace+\thickmuskip{.2777em}}
\let\thickspace\;
-\newcommand{\negthickspace}{\tmspace-\thickmuskip{.2777em}}
+\DeclareRobustCommand\negthickspace{\tmspace-\thickmuskip{.2777em}}
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -517,9 +537,13 @@ For additional information on amsmath, use the \lq ?\rq\space option.%
\@xp\@tempa\vert\@empty\@nil
\ifnum\@tempcnta>\z@
\advance\@tempcnta "4000000
- \xdef\lvert{\delimiter\number\@tempcnta\space }
+% \end{macrocode}
+% Use \cs{protected} on the new delimiters.
+% \changes{v2.17e}{2020/01/20}{Make delimiters robust (gh/251))}
+% \begin{macrocode}
+ \protected\xdef\lvert{\delimiter\number\@tempcnta\space }
\advance\@tempcnta "1000000
- \xdef\rvert{\delimiter\number\@tempcnta\space }
+ \protected\xdef\rvert{\delimiter\number\@tempcnta\space }
\else
\ifx\@@undefined\lvert
% Fall back to cmex encoding since we don't know what else to do.
@@ -532,9 +556,9 @@ For additional information on amsmath, use the \lq ?\rq\space option.%
\@xp\@tempa\Vert\@empty\@nil
\ifnum\@tempcnta>\z@
\advance\@tempcnta "4000000
- \xdef\lVert{\delimiter\number\@tempcnta\space }
+ \protected\xdef\lVert{\delimiter\number\@tempcnta\space }
\advance\@tempcnta "1000000
- \xdef\rVert{\delimiter\number\@tempcnta\space }
+ \protected\xdef\rVert{\delimiter\number\@tempcnta\space }
\else
\ifx\@@undefined\lVert
\DeclareMathDelimiter{\lVert}
@@ -645,13 +669,13 @@ Foreign command \@backslashchar#1;\MessageBreak
% \end{macrocode}
%
% \begin{macrocode}
-\else
+\else
% \end{macrocode}
% XeTeX version
% \begin{macrocode}
\def\genfrac@rule#1#2#3#4{%
\hbox{$\left#1\vcenter{\hrule \@width\z@
- \@height
+ \@height
\ifdim\fontdimen#2#3\tw@=\z@
#4\fontdimen6#3\tw@
\else
@@ -697,7 +721,7 @@ Foreign command \@backslashchar#1;\MessageBreak
% \begin{macrocode}
\def\genfrac@rule#1#2#3{%
\hbox{$\left#1\vcenter{\hrule \@width\z@
- \@height
+ \@height
\ifdim\Umathfractiondelsize#2=\z@
#3\fontdimen6#3\tw@
\else
@@ -1093,7 +1117,7 @@ Foreign command \@backslashchar#1;\MessageBreak
% \changes{v2.15}{2016/02/20}{Indent \cs{mdots@@} for readability and add additional tests}
% \begin{macrocode}
\def\mdots@@{\gdef\thedots@{\dotso@}%
- \ifx\@let@token\boldsymbol
+ \ifx\@let@token\boldsymbol
\gdef\thedots@\boldsymbol{\boldsymboldots@}%
\else
\ifx,\@let@token \gdef\thedots@{\dotsc}%
@@ -1167,7 +1191,7 @@ Foreign command \@backslashchar#1;\MessageBreak
% \begin{macrocode}
\fi % end macro \ifgtest@ test (no else)
\fi % end if \Umathchar test
- \fi % end \math@ \ifgtest@
+ \fi % end \math@ \ifgtest@
\fi % end \keybin@ \ifgtest@ test (no else)
\fi % end if \not (no else)
\fi % end if comma (no else)
@@ -1626,13 +1650,15 @@ Foreign command \@backslashchar#1;\MessageBreak
% \begin{macro}{\dddot}
% \begin{macro}{\ddddot}
% Triple and quadruple dot accents.
+% \changes{v2.17f}{2020/02/20}{Add a kern so that a single char is not
+% vertically shifted and move the dots slightly to the right (gh/126)}
% \begin{macrocode}
\ams@newcommand{\dddot}[1]{%
- {\mathop{#1}\limits^{\vbox to-1.4\ex@{\kern-\tw@\ex@
- \hbox{\normalfont ...}\vss}}}}
+ {\mathop{\kern\z@#1}\limits^{\vbox to-1.4\ex@{\kern-\tw@\ex@
+ \hbox{\,\normalfont...}\vss}}}}
\ams@newcommand{\ddddot}[1]{%
- {\mathop{#1}\limits^{\vbox to-1.4\ex@{\kern-\tw@\ex@
- \hbox{\normalfont....}\vss}}}}
+ {\mathop{\kern\z@#1}\limits^{\vbox to-1.4\ex@{\kern-\tw@\ex@
+ \hbox{\,\normalfont....}\vss}}}}
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -3190,9 +3216,10 @@ ill-advised in LaTeX.%
% \end{macro}
%
% \begin{macro}{\ifst@rred}
-% The switch |st@rred| is set to true by all starred
-% environments
-% and set to false by the unstarred versions.
+% The switch |st@rred| is set to true by all starred environments
+% and set to false by the unstarred versions.
+% One exception is the \env{xxalignat} environment where this is set
+% to true.
% \begin{macrocode}
\newif\ifst@rred
% \end{macrocode}
@@ -3430,7 +3457,8 @@ and fix things up.}
% \end{macro}
%
% \begin{macro}{\black@}
-% \changes{v2.17a}{2017/09/02}{add fixed width box so overfull warning generated in centred environments in lists}
+% \changes{v2.17a}{2017/09/02}{Add fixed width box so overfull warning
+% generated in centred environments in lists}
% This macro is made to produce an overfull box message and
% possibly (depending on the value of \cs{overfullrule})
% a rule in the margin if the total width of an alignment
@@ -3443,7 +3471,8 @@ and fix things up.}
\nointerlineskip
\vskip-\ht\strutbox@
\vskip-\dp\strutbox@
- \vbox{\noindent\hbox to\displaywidth{\hbox to#1{\strut@\hfill}}}%
+ \vbox{\noindent\hbox to\displaywidth{%
+ \hbox to#1{\strut@\hfill}}}%
\prevdepth\dimen@
\fi
}%
@@ -3645,6 +3674,77 @@ and fix things up.}
% \end{macrocode}
% \end{macro}
%
+%
+%
+% \begin{macro}{\ams@start@box}
+% This macro tests the optional positioning argument (in
+% \texttt{gathered} or \texttt{aligned}. It explicitly tests for the
+% value \texttt{b}, \texttt{c} and \texttt{t} and if the value is
+% different, then we assume that it is a bracket group that belongs
+% to the formula instead of being an misspelled optional argument.
+% (In earlier versions of the code anything other than \texttt{b}
+% or \texttt{t} was interpreted as \texttt{c} and the data was
+% otherwise dropped.)
+% \changes{v2.17g}{2020/03/10}{Explicity test for b/t/c and return
+% optional argument is different (gh/5)}
+% \begin{macrocode}
+\def\ams@start@box#1{%
+% \end{macrocode}
+% As we may pick up an arbitrary part of the formula by mistake, we
+% need to be very careful with the testing to avoid low-level
+% errors. This is why we use \cs{detokenize}. But we also need to
+% expand the argument (if possible) in case the position value is
+% hidden inside a macro. We therefore apply the \cs{romannumeral}
+% trick (known as f-expansion in \texttt{expl3}) in its old form.
+% The code assumes that
+% the default is correctly set up (which in this case is \texttt{c}).
+% \begin{macrocode}
+ \edef\reserved@a{\csname ams@pos@\expandafter\detokenize
+ \expandafter{\romannumeral-`\0#1}\endcsname}%
+ \expandafter\ifx\reserved@a\relax
+% \end{macrocode}
+% If the argument is neither \texttt{b}, \texttt{c} or \texttt{t}
+% we save it in \cs{ams@return@opt@arg}, so it can later be
+% returned as part of the environment body. We could at this point
+% also issue a warning that bracket group was found at the start of
+% the formula and that it is safer to add a \cs{relax} before it.
+% \begin{macrocode}
+ \PackageWarning{amsmath}{%
+ Bracket group \detokenize{[#1]} at formula start!\MessageBreak
+ It could be a misspelled positional argument.\MessageBreak
+ If it belongs to the formula add a \relax in\MessageBreak
+ front to hide it}%
+ \def\ams@return@opt@arg{[#1]}\vcenter
+% \end{macrocode}
+% If the argument was identified then we clear
+% \cs{ams@return@opt@arg} (just in case somebod ever nests these
+% environment.
+% \begin{macrocode}
+ \else
+ \let\ams@return@opt@arg\@empty\reserved@a
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macro}{\ams@pos@t}
+% \begin{macro}{\ams@pos@b}
+% \begin{macro}{\ams@pos@c}
+%
+% \begin{macrocode}
+\def\ams@pos@t{\vtop}
+\def\ams@pos@b{\vbox}
+\def\ams@pos@c{\vcenter}
+% \end{macrocode}
+% And we accept an empty argument as a way to get the default (as
+% that was the case before as well, albeit by mistake in some sense).
+% \begin{macrocode}
+\let\ams@pos@\ams@pos@c
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
% \begin{macro}{\start@aligned}
% The \env{aligned} and \env{alignedat} environments are identical
% except that the latter takes a mandatory argument to specify the
@@ -3669,7 +3769,10 @@ and fix things up.}
% to the margin.
% \begin{macrocode}
\alignedspace@left
- \if #1t\vtop \else \if#1b \vbox \else \vcenter \fi \fi \bgroup
+% \end{macrocode}
+% Select the right kind of box based on the optional argument \verb=#1=.
+% \begin{macrocode}
+ \ams@start@box{#1}\bgroup
\maxfields@#2\relax
\ifnum\maxfields@>\m@ne
\multiply\maxfields@\tw@
@@ -3712,6 +3815,13 @@ and fix things up.}
\hfil
\tabskip\alignsep@
\crcr
+% \end{macrocode}
+% If we picked up a bracket group by mistake here is the place to
+% return it for processing.
+% \changes{v2.17g}{2020/03/10}{Explicity test for b/t/c and return
+% optional argument is different (gh/5)}
+% \begin{macrocode}
+ \ams@return@opt@arg
}
% \end{macrocode}
% \end{macro}
@@ -3796,12 +3906,21 @@ and fix things up.}
\nonmatherr@{\begin{gathered}}%
\fi
\alignedspace@left
- \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi\fi \bgroup
+% \end{macrocode}
+% Select the right kind of box based on the optional argument \verb=#1=.
+% \begin{macrocode}
+ \ams@start@box{#1}\bgroup
\Let@ \chardef\dspbrk@context\@ne \restore@math@cr
\spread@equation
\ialign\bgroup
\hfil\strut@$\m@th\displaystyle##$\hfil
\crcr
+% \end{macrocode}
+% And put a mistaking picked up bracket group back:
+% \changes{v2.17g}{2020/03/10}{Explicity test for b/t/c and return
+% optional argument is different (gh/5)}
+% \begin{macrocode}
+ \ams@return@opt@arg
}{%
\endaligned
}
diff --git a/macros/latex-dev/required/amsmath/amsmath.ins b/macros/latex-dev/required/amsmath/amsmath.ins
index 7a6a087359..55e4089804 100644
--- a/macros/latex-dev/required/amsmath/amsmath.ins
+++ b/macros/latex-dev/required/amsmath/amsmath.ins
@@ -1,7 +1,7 @@
-%%
+%%
%% Copyright 2010 American Mathematical Society.
%% Copyright 2016 LaTeX3 Project and American Mathematical Society.
-%%
+%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
%% of this license or (at your option) any later version.
@@ -9,9 +9,9 @@
%% https://www.latex-project.org/lppl.txt
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
-%%
+%%
%% This work has the LPPL maintenance status `maintained'.
-%%
+%%
%% The Current Maintainer of this work is the LaTeX3 Project.
%%
%% ====================================================================
diff --git a/macros/latex-dev/required/amsmath/amsmath.pdf b/macros/latex-dev/required/amsmath/amsmath.pdf
index ec130fb9d7..8a5dbcd335 100644
--- a/macros/latex-dev/required/amsmath/amsmath.pdf
+++ b/macros/latex-dev/required/amsmath/amsmath.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amsopn.dtx b/macros/latex-dev/required/amsmath/amsopn.dtx
index b7047377f3..35c3b1605b 100644
--- a/macros/latex-dev/required/amsmath/amsopn.dtx
+++ b/macros/latex-dev/required/amsmath/amsopn.dtx
@@ -2,7 +2,7 @@
% \iffalse meta-comment
%
% Copyright (C) 1995, 1999 American Mathematical Society.
-% Copyright (C) 2016-2019 LaTeX3 Project and American Mathematical Society.
+% Copyright (C) 2016-2020 LaTeX3 Project and American Mathematical Society.
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -11,9 +11,9 @@
% https://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
-%
+%
% This work has the LPPL maintenance status `maintained'.
-%
+%
% The Current Maintainer of this work is the LaTeX3 Project.
%
% \fi
diff --git a/macros/latex-dev/required/amsmath/amsopn.ins b/macros/latex-dev/required/amsmath/amsopn.ins
index 8c977446cc..84aff6243b 100644
--- a/macros/latex-dev/required/amsmath/amsopn.ins
+++ b/macros/latex-dev/required/amsmath/amsopn.ins
@@ -1,7 +1,7 @@
-%%
+%%
%% Copyright 2010 American Mathematical Society.
%% Copyright 2016 LaTeX3 Project and American Mathematical Society.
-%%
+%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
%% of this license or (at your option) any later version.
@@ -9,9 +9,9 @@
%% https://www.latex-project.org/lppl.txt
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
-%%
+%%
%% This work has the LPPL maintenance status `maintained'.
-%%
+%%
%% The Current Maintainer of this work is the LaTeX3 Project.
%%
%% ====================================================================
diff --git a/macros/latex-dev/required/amsmath/amsopn.pdf b/macros/latex-dev/required/amsmath/amsopn.pdf
index b518ffd88e..8da892be6d 100644
--- a/macros/latex-dev/required/amsmath/amsopn.pdf
+++ b/macros/latex-dev/required/amsmath/amsopn.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amstex.sty b/macros/latex-dev/required/amsmath/amstex.sty
index edb57c1214..6ce36f52c9 100644
--- a/macros/latex-dev/required/amsmath/amstex.sty
+++ b/macros/latex-dev/required/amsmath/amstex.sty
@@ -11,9 +11,9 @@
% https://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
-%
+%
% This work has the LPPL maintenance status `maintained'.
-%
+%
% The Current Maintainer of this work is the LaTeX3 Project.
%
% \fi
diff --git a/macros/latex-dev/required/amsmath/amstext.dtx b/macros/latex-dev/required/amsmath/amstext.dtx
index a4c9aeb5d9..5e7e6ca672 100644
--- a/macros/latex-dev/required/amsmath/amstext.dtx
+++ b/macros/latex-dev/required/amsmath/amstext.dtx
@@ -2,7 +2,7 @@
% \iffalse meta-comment
%
% Copyright (C) 1995, 1999 American Mathematical Society.
-% Copyright (C) 2016-2019 LaTeX3 Project and American Mathematical Society.
+% Copyright (C) 2016-2020 LaTeX3 Project and American Mathematical Society.
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -11,9 +11,9 @@
% https://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
-%
+%
% This work has the LPPL maintenance status `maintained'.
-%
+%
% The Current Maintainer of this work is the LaTeX3 Project.
%
% \fi
@@ -139,7 +139,7 @@ Bug reports can be opened (category \texttt{#1}) at\\%
% The macros \cs{f@size}, \cs{sf@size} and \cs{ssf@size} hold the
% sizes which should be used when we are loading a new font for use
% in \cs{textfont}, \cs{scriptfont} and \cs{scriptscriptfont}. There
-% is some question whether we should use use \cs{tf@size} or
+% is some question whether we should use \cs{tf@size} or
% \cs{f@size} for the main size, but since the primary purpose of the
% \cn{text} macro is to switch back to text within a display, it
% seems that \cs{f@size} is the better choice. (Indeed it could be
diff --git a/macros/latex-dev/required/amsmath/amstext.ins b/macros/latex-dev/required/amsmath/amstext.ins
index 84fcb0cb95..5f9a5c4076 100644
--- a/macros/latex-dev/required/amsmath/amstext.ins
+++ b/macros/latex-dev/required/amsmath/amstext.ins
@@ -1,7 +1,7 @@
-%%
+%%
%% Copyright 2010 American Mathematical Society.
%% Copyright 2016 LaTeX3 Project and American Mathematical Society.
-%%
+%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
%% of this license or (at your option) any later version.
@@ -9,9 +9,9 @@
%% https://www.latex-project.org/lppl.txt
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
-%%
+%%
%% This work has the LPPL maintenance status `maintained'.
-%%
+%%
%% The Current Maintainer of this work is the LaTeX3 Project.
%%
%% ====================================================================
@@ -48,4 +48,3 @@ The Current Maintainer of this work is the LaTeX3 project.
}
\endbatchfile
-
diff --git a/macros/latex-dev/required/amsmath/amstext.pdf b/macros/latex-dev/required/amsmath/amstext.pdf
index 2df324d60a..c0e854f4c7 100644
--- a/macros/latex-dev/required/amsmath/amstext.pdf
+++ b/macros/latex-dev/required/amsmath/amstext.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/amsxtra.dtx b/macros/latex-dev/required/amsmath/amsxtra.dtx
index 2165dde41a..9cc0b71027 100644
--- a/macros/latex-dev/required/amsmath/amsxtra.dtx
+++ b/macros/latex-dev/required/amsmath/amsxtra.dtx
@@ -2,7 +2,7 @@
% \iffalse meta-comment
%
% Copyright (C) 1995, 1999 American Mathematical Society.
-% Copyright (C) 2016-2019 LaTeX3 Project and American Mathematical Society.
+% Copyright (C) 2016-2020 LaTeX3 Project and American Mathematical Society.
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3c
@@ -11,9 +11,9 @@
% https://www.latex-project.org/lppl.txt
% and version 1.3c or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
-%
+%
% This work has the LPPL maintenance status `maintained'.
-%
+%
% The Current Maintainer of this work is the LaTeX3 Project.
%
% \fi
diff --git a/macros/latex-dev/required/amsmath/amsxtra.ins b/macros/latex-dev/required/amsmath/amsxtra.ins
index 9e739c3d4b..bbcd08e3f7 100644
--- a/macros/latex-dev/required/amsmath/amsxtra.ins
+++ b/macros/latex-dev/required/amsmath/amsxtra.ins
@@ -1,7 +1,7 @@
-%%
+%%
%% Copyright 2010 American Mathematical Society.
%% Copyright 2016 LaTeX3 Project and American Mathematical Society.
-%%
+%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
%% of this license or (at your option) any later version.
@@ -9,9 +9,9 @@
%% https://www.latex-project.org/lppl.txt
%% and version 1.3c or later is part of all distributions of LaTeX
%% version 2005/12/01 or later.
-%%
+%%
%% This work has the LPPL maintenance status `maintained'.
-%%
+%%
%% The Current Maintainer of this work is the LaTeX3 Project.
%%
%% ====================================================================
@@ -48,4 +48,3 @@ The Current Maintainer of this work is the LaTeX3 project.
}
\endbatchfile
-
diff --git a/macros/latex-dev/required/amsmath/amsxtra.pdf b/macros/latex-dev/required/amsmath/amsxtra.pdf
index 1130ed79aa..1fb0b379fa 100644
--- a/macros/latex-dev/required/amsmath/amsxtra.pdf
+++ b/macros/latex-dev/required/amsmath/amsxtra.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/changes.txt b/macros/latex-dev/required/amsmath/changes.txt
index e5e234cea2..bf5bbfe397 100644
--- a/macros/latex-dev/required/amsmath/changes.txt
+++ b/macros/latex-dev/required/amsmath/changes.txt
@@ -1,3 +1,31 @@
+2020-03-10 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * amsmath.dtx (subsection{Simple aligning environments}):
+ Explicity test for b,t,c and return optional argument is
+ different (gh/5)
+
+2020-03-07 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * amsmath.dtx (subsection{Math spacing commands}):
+ Math/text spacing commands are now in the \LaTeX{} kernel and are
+ made robust. We still define them here so that the package
+ continues to work with older formats (gh/303)
+
+
+#########################
+# 2020-02-02 Release
+#########################
+
+2020-01-20 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * amsmath.dtx (subsection{Vertical bar symbols}):
+ Make \lvert, \rvert, \lVert and \rVert robust to match kernel
+ correction (gh/251)
+
+2019-12-01 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * amsmath.dtx: docu update for gh/200 no code change.
+
#########################
# 2019-11-17 Release
#########################
@@ -14,7 +42,8 @@
2019-10-11 David Carlisle <David.Carlisle@latex-project.org>
- * build.lua: package amsmath-2018-12-01.sty (only ctan build script no source changes)
+ * build.lua: package amsmath-2018-12-01.sty (only ctan build script
+ no source changes)
#########################
# 2019-10-01 Release
diff --git a/macros/latex-dev/required/amsmath/subeqn.pdf b/macros/latex-dev/required/amsmath/subeqn.pdf
index 0b5cdd1ff6..2653db5fc6 100644
--- a/macros/latex-dev/required/amsmath/subeqn.pdf
+++ b/macros/latex-dev/required/amsmath/subeqn.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/subeqn.tex b/macros/latex-dev/required/amsmath/subeqn.tex
index c34b3f6952..7e07f61d01 100644
--- a/macros/latex-dev/required/amsmath/subeqn.tex
+++ b/macros/latex-dev/required/amsmath/subeqn.tex
@@ -90,7 +90,7 @@ C=D
And that was equation \eqref{e:prevprime}.
Notice, by the way, that when a \verb"\ref" occurs inside a \verb"\tag",
-and that \verb"\tag" is then \verb"\label"'d, a \verb"\ref" for the the
+and that \verb"\tag" is then \verb"\label"'d, a \verb"\ref" for the
second \verb"\label" requires \emph{three} runs of \LaTeX{} in order to
get the proper value. (If you run through the logic of \LaTeX{}'s
cross-referencing mechanisms as they apply in this case, you will see
diff --git a/macros/latex-dev/required/amsmath/technote.pdf b/macros/latex-dev/required/amsmath/technote.pdf
index c517a1cdf8..ed9eb2ff83 100644
--- a/macros/latex-dev/required/amsmath/technote.pdf
+++ b/macros/latex-dev/required/amsmath/technote.pdf
Binary files differ
diff --git a/macros/latex-dev/required/amsmath/testmath.pdf b/macros/latex-dev/required/amsmath/testmath.pdf
index e8e64c8fce..c764b160b8 100644
--- a/macros/latex-dev/required/amsmath/testmath.pdf
+++ b/macros/latex-dev/required/amsmath/testmath.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/README.md b/macros/latex-dev/required/graphics/README.md
index b75bb681cc..9195e612d1 100644
--- a/macros/latex-dev/required/graphics/README.md
+++ b/macros/latex-dev/required/graphics/README.md
@@ -1,7 +1,7 @@
The LaTeX `graphics` bundle
===========================
-Release 2020-10-01 pre-release 0
+Release 2020-10-01 pre-release 1
Overview
--------
diff --git a/macros/latex-dev/required/graphics/changes.txt b/macros/latex-dev/required/graphics/changes.txt
index 108723ddb4..42ce0dea02 100644
--- a/macros/latex-dev/required/graphics/changes.txt
+++ b/macros/latex-dev/required/graphics/changes.txt
@@ -4,6 +4,9 @@ completeness or accuracy and it contains some references to files that
are not part of the distribution.
=======================================================================
+2020-02-24 Ulrike Fischer <Ulrike.Fischer@latex-project.org>
+ * color.dtx: corrected a tests, graphics/3635
+
#########################
# 2020-02-02 Release
#########################
diff --git a/macros/latex-dev/required/graphics/color.dtx b/macros/latex-dev/required/graphics/color.dtx
index ad5df89a7e..cdc2dbe5fe 100644
--- a/macros/latex-dev/required/graphics/color.dtx
+++ b/macros/latex-dev/required/graphics/color.dtx
@@ -19,7 +19,7 @@
%<driver> \ProvidesFile{color.drv}
% \fi
% \ProvidesFile{color.dtx}
- [2019/11/23 v1.2a Standard LaTeX Color (DPC)]
+ [2020/02/24 v1.2b Standard LaTeX Color (DPC)]
%
% \iffalse
%<*driver>
@@ -558,6 +558,8 @@
% {usenames option added}
% \changes{v0.3f}{1994/10/04}
% {Give info about redefinitions}
+% \changes{v1.2b}{2020/02/24}
+% {corrected test, see https://www.latex-project.org/cgi-bin/ltxbugs2html?pr=graphics/3635}
%
% Driver files may opt to define a `named' colour model.
% Placing colour names rather than numeric specifications into the dvi
@@ -603,7 +605,7 @@
{\c@lor@error{model `#1'}}%
{\@ifundefined{color@#3}%
{\c@lor@error{model `#3'}}%
- {\@ifundefined{c@lor@#1@#2}{}%
+ {\@ifundefined{col@#2}{}%
{\PackageInfo{color}{Redefining color #2 in named color model}}%
\csname color@#3\endcsname\@tempa{#4}%
\csname define@color@#1\endcsname{#2}\@tempa
diff --git a/macros/latex-dev/required/graphics/color.pdf b/macros/latex-dev/required/graphics/color.pdf
index 0ecd33fafb..4749ea345f 100644
--- a/macros/latex-dev/required/graphics/color.pdf
+++ b/macros/latex-dev/required/graphics/color.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/drivers.pdf b/macros/latex-dev/required/graphics/drivers.pdf
index 1076d75a3d..418d8f8f47 100644
--- a/macros/latex-dev/required/graphics/drivers.pdf
+++ b/macros/latex-dev/required/graphics/drivers.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/epsfig.pdf b/macros/latex-dev/required/graphics/epsfig.pdf
index 74d0f4559e..3949a190c2 100644
--- a/macros/latex-dev/required/graphics/epsfig.pdf
+++ b/macros/latex-dev/required/graphics/epsfig.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/graphics.pdf b/macros/latex-dev/required/graphics/graphics.pdf
index 33fa244236..f7fb560c23 100644
--- a/macros/latex-dev/required/graphics/graphics.pdf
+++ b/macros/latex-dev/required/graphics/graphics.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/graphicx.pdf b/macros/latex-dev/required/graphics/graphicx.pdf
index 10f8c48f30..75b1f1e532 100644
--- a/macros/latex-dev/required/graphics/graphicx.pdf
+++ b/macros/latex-dev/required/graphics/graphicx.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/grfguide.pdf b/macros/latex-dev/required/graphics/grfguide.pdf
index 62e4f81a6a..caf1b70912 100644
--- a/macros/latex-dev/required/graphics/grfguide.pdf
+++ b/macros/latex-dev/required/graphics/grfguide.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/keyval.pdf b/macros/latex-dev/required/graphics/keyval.pdf
index e8a34f7567..8536c2c716 100644
--- a/macros/latex-dev/required/graphics/keyval.pdf
+++ b/macros/latex-dev/required/graphics/keyval.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/lscape.pdf b/macros/latex-dev/required/graphics/lscape.pdf
index fbd59d224f..02d9c42d63 100644
--- a/macros/latex-dev/required/graphics/lscape.pdf
+++ b/macros/latex-dev/required/graphics/lscape.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/rotating.pdf b/macros/latex-dev/required/graphics/rotating.pdf
index 88d1d1b909..5abe51370c 100644
--- a/macros/latex-dev/required/graphics/rotating.pdf
+++ b/macros/latex-dev/required/graphics/rotating.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/rotex.pdf b/macros/latex-dev/required/graphics/rotex.pdf
index da6de15300..98919825a3 100644
--- a/macros/latex-dev/required/graphics/rotex.pdf
+++ b/macros/latex-dev/required/graphics/rotex.pdf
Binary files differ
diff --git a/macros/latex-dev/required/graphics/trig.pdf b/macros/latex-dev/required/graphics/trig.pdf
index 9474549f6f..9863ea585e 100644
--- a/macros/latex-dev/required/graphics/trig.pdf
+++ b/macros/latex-dev/required/graphics/trig.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/README.md b/macros/latex-dev/required/tools/README.md
index 4b71d9f6eb..9167c2292c 100644
--- a/macros/latex-dev/required/tools/README.md
+++ b/macros/latex-dev/required/tools/README.md
@@ -1,7 +1,7 @@
The LaTeX `tools` bundle
========================
-Release 2020-10-01 pre-release 2
+Release 2020-10-01 pre-release 3
Overview
--------
diff --git a/macros/latex-dev/required/tools/afterpage.pdf b/macros/latex-dev/required/tools/afterpage.pdf
index b06001b416..8b7c701c7a 100644
--- a/macros/latex-dev/required/tools/afterpage.pdf
+++ b/macros/latex-dev/required/tools/afterpage.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/array-2020-02-10.sty b/macros/latex-dev/required/tools/array-2020-02-10.sty
new file mode 100644
index 0000000000..9fddc0d490
--- /dev/null
+++ b/macros/latex-dev/required/tools/array-2020-02-10.sty
@@ -0,0 +1,374 @@
+%%
+%% This is file `array.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% array.dtx (with options: `package,ncols')
+%%
+%% This is a generated file.
+%%
+%% The source is maintained by the LaTeX Project team and bug
+%% reports for it can be opened at https://latex-project.org/bugs/
+%% (but please observe conditions on bug reports sent to that address!)
+%%
+%%
+%% Copyright (C) 1993-2020
+%% The LaTeX3 Project and any individual authors listed elsewhere
+%% in this file.
+%%
+%% This file was generated from file(s) of the Standard LaTeX `Tools Bundle'.
+%% --------------------------------------------------------------------------
+%%
+%% It may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3c
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% https://www.latex-project.org/lppl.txt
+%% and version 1.3c or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This file may only be distributed together with a copy of the LaTeX
+%% `Tools Bundle'. You may however distribute the LaTeX `Tools Bundle'
+%% without such generated files.
+%%
+%% The list of all files belonging to the LaTeX `Tools Bundle' is
+%% given in the file `manifest.txt'.
+%%
+%% Package `array' to use with LaTeX 2e
+%% Copyright (C) 1989-1998 Frank Mittelbach, all rights reserved.
+\NeedsTeXFormat{LaTeX2e}[1995/06/01]
+\providecommand\DeclareRelease[3]{}
+\providecommand\DeclareCurrentRelease[2]{}
+
+\DeclareRelease{}{2016-10-06}{array-2016-10-06.sty}
+\DeclareCurrentRelease{}{2019-10-01}
+
+\ProvidesPackage{array}
+ [2020/02/10 v2.4m Tabular extension package (FMi)]
+%%
+
+\def\@addtopreamble#1{\xdef\@preamble{\@preamble #1}}
+\def\@testpach{\@chclass
+ \ifnum \@lastchclass=6 \@ne \@chnum \@ne \else
+ \ifnum \@lastchclass=7 5 \else
+ \ifnum \@lastchclass=8 \tw@ \else
+ \ifnum \@lastchclass=9 \thr@@
+ \else \z@
+ \ifnum \@lastchclass = 10 \else
+ \edef\@nextchar{\expandafter\string\@nextchar}%
+ \@chnum
+ \if \@nextchar c\z@ \else
+ \if \@nextchar l\@ne \else
+ \if \@nextchar r\tw@ \else
+ \z@ \@chclass
+ \if\@nextchar |\@ne \else
+ \if \@nextchar !6 \else
+ \if \@nextchar @7 \else
+ \if \@nextchar <8 \else
+ \if \@nextchar >9 \else
+ 10
+ \@chnum
+ \if \@nextchar m\thr@@\else
+ \if \@nextchar p4 \else
+ \if \@nextchar b5 \else
+ \z@ \@chclass \z@ \@preamerr \z@ \fi \fi \fi \fi
+ \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi \fi}
+\def\@xexpast#1*#2#3#4\@@{%
+ \@tempcnta #2
+ \toks@={#1}\@temptokena={#3}%
+ \let\the@toksz\relax \let\the@toks\relax
+ \def\@tempa{\the@toksz}%
+ \ifnum\@tempcnta >0 \@whilenum\@tempcnta >0\do
+ {\edef\@tempa{\@tempa\the@toks}\advance \@tempcnta \m@ne}%
+ \let \@tempb \@xexpast \else
+ \let \@tempb \@xexnoop \fi
+ \def\the@toksz{\the\toks@}\def\the@toks{\the\@temptokena}%
+ \edef\@tempa{\@tempa}%
+ \expandafter \@tempb \@tempa #4\@@}
+\def\prepnext@tok{\advance \count@ \@ne
+ \toks\count@{}}
+\def\save@decl{\toks\count@ \expandafter{\@nextchar}}
+\def\insert@column{%
+ \the@toks \the \@tempcnta
+ \ignorespaces \@sharp \unskip
+ \the@toks \the \count@ \relax}
+\newdimen\col@sep
+\def\@acol{\@addtopreamble{\hskip\col@sep}}
+\def\@classx{%
+ \ifcase \@lastchclass
+ \@acolampacol \or
+ \@addamp \@acol \or
+ \@acolampacol \or
+ \or
+ \@acol \@firstampfalse \or
+ \@addamp
+ \fi}
+\def\@classz{\@classx
+ \@tempcnta \count@
+ \prepnext@tok
+ \@addtopreamble{\ifcase \@chnum
+ \hfil
+ \hskip1sp%
+ \d@llarbegin
+ \insert@column
+ \d@llarend \do@row@strut \hfil \or
+ \hskip1sp\d@llarbegin \insert@column \d@llarend \do@row@strut \hfil \or
+ \hfil\hskip1sp\d@llarbegin \insert@column \d@llarend \do@row@strut \or
+ \setbox\ar@mcellbox\vbox
+ \@startpbox{\@nextchar}\insert@column \@endpbox
+ \ar@align@mcell
+ \do@row@strut \or
+ \vtop \@startpbox{\@nextchar}\insert@column \@endpbox\do@row@strut \or
+ \vbox \@startpbox{\@nextchar}\insert@column \@endpbox\do@row@strut
+ \fi}\prepnext@tok}
+
+\newbox\ar@mcellbox
+\def\ar@align@mcell{%
+ \ifdim \ht\ar@mcellbox > \ht\@arstrutbox
+ \begingroup
+ \dimen@\ht\ar@mcellbox
+ \advance\dimen@-\ht\@arstrutbox
+ \advance\dimen@\baselineskip
+ \lower.5\dimen@\box\ar@mcellbox
+ \endgroup
+ \else % assume one line and align at baseline
+ \box\ar@mcellbox
+ \fi}
+
+\def\@arrayrule{\@addtopreamble \vline}
+\def\@classvii{\ifnum \@lastchclass = \thr@@
+ \@preamerr \thr@@ \fi}
+\def\@classvi{\ifcase \@lastchclass
+ \@acol \or
+ \@addtopreamble{\hskip \doublerulesep}\or
+ \@acol \or
+ \@classvii
+ \fi}
+\def\@classii{\advance \count@ \m@ne
+ \save@decl\prepnext@tok}
+\def\@classi{\@classvi
+ \ifcase \@chnum \@arrayrule \or
+ \@classv \fi}
+\def\@startpbox#1{\bgroup
+ \color@begingroup
+ \setlength\hsize{#1}\@arrayparboxrestore
+ \everypar{%
+ \vrule \@height \ht\@arstrutbox \@width \z@
+ \everypar{}}%
+ }
+\def\@endpbox{\@finalstrut\@arstrutbox \color@endgroup \egroup\hfil}
+\def\@array[#1]#2{%
+ \@tempdima \ht \strutbox
+ \advance \@tempdima by\extrarowheight
+ \setbox \@arstrutbox \hbox{\vrule
+ \@height \arraystretch \@tempdima
+ \@depth \arraystretch \dp \strutbox
+ \@width \z@}%
+ \begingroup
+ \@mkpream{#2}%
+ \xdef\@preamble{\noexpand \ialign \@halignto
+ \bgroup \@arstrut \@preamble
+ \tabskip \z@ \cr}%
+ \endgroup
+ \@arrayleft
+ \if #1t\vtop \else \if#1b\vbox \else \vcenter \fi \fi
+ \bgroup
+ \let \@sharp ##\let \protect \relax
+ \lineskip \z@
+ \baselineskip \z@
+ \m@th
+ \let\\\@arraycr \let\tabularnewline\\\let\par\@empty \@preamble}
+\def\arraybackslash{\let\\\tabularnewline}
+\newdimen \extrarowheight
+\extrarowheight=0pt
+\def\@arstrut{\unhcopy\@arstrutbox}
+\def\@arraycr{\relax\iffalse{\fi\ifnum 0=`}\fi
+ \@ifstar \@xarraycr \@xarraycr}
+\def\@xarraycr{\@ifnextchar [%
+ \@argarraycr {\ifnum 0=`{}\fi\cr}}
+\def\@argarraycr[#1]{\ifnum0=`{}\fi\ifdim #1>\z@
+ \expandafter\@xargarraycr\else
+ \expandafter\@yargarraycr\fi{#1}}
+\def\@xargarraycr#1{\unskip\gdef\do@row@strut
+ {\@tempdima #1\advance\@tempdima \dp\@arstrutbox
+ \vrule \@depth\@tempdima \@width\z@\global\let\do@row@strut\relax}%
+ % \begin{macrocode}
+ \ifnum\@multicnt >\z@ \do@row@strut \fi
+ \cr}
+\let\do@row@strut\relax
+\def\@yargarraycr#1{\cr\noalign{\vskip #1}}
+\long\def\multicolumn#1#2#3{%
+ \multispan{#1}\begingroup
+ \def\@addamp{\if@firstamp \@firstampfalse \else
+ \@preamerr 5\fi}%
+ \@mkpream{#2}\@addtopreamble\@empty
+ \endgroup
+ \def\@sharp{#3}%
+ \@arstrut \@preamble
+ \null
+ \ignorespaces}
+\let\d@llarbegin\begingroup
+\let\d@llarend\endgroup
+\def\array{\col@sep\arraycolsep
+ \def\d@llarbegin{$}\let\d@llarend\d@llarbegin\def\@halignto{}%
+ \@tabarray}
+\def\tabular{\def\@halignto{}\@tabular}
+\expandafter\def\csname tabular*\endcsname#1{%
+ \setlength\dimen@{#1}%
+ \edef\@halignto{to\the\dimen@}\@tabular}
+\def\@tabular{%
+ \leavevmode
+ \hbox \bgroup $\col@sep\tabcolsep \let\d@llarbegin\begingroup
+ \let\d@llarend\endgroup
+ \@tabarray}
+\def\endtabular{\endarray $\egroup}
+\expandafter\let\csname endtabular*\endcsname=\endtabular
+\let\@ampacol=\relax \let\@expast=\relax
+\let\@arrayclassiv=\relax \let\@arrayclassz=\relax
+\let\@tabclassiv=\relax \let\@tabclassz=\relax
+\let\@arrayacol=\relax \let\@tabacol=\relax
+\let\@tabularcr=\relax \let\@@endpbox=\relax
+\let\@argtabularcr=\relax \let\@xtabularcr=\relax
+\def\@preamerr#1{\def\@tempd{{..} at wrong position: }%
+ \PackageError{array}{%
+ \ifcase #1 Illegal pream-token (\@nextchar): `c' used\or %0
+ Missing arg: token ignored\or %1
+ Empty preamble: `l' used\or %2
+ >\@tempd token ignored\or %3
+ <\@tempd changed to !{..}\or %4
+ Only one column-spec. allowed.\fi}\@ehc} %5
+\def\newcolumntype#1{%
+ \edef\NC@char{\string#1}%
+ \@ifundefined{NC@find@\NC@char}%
+ {\@tfor\next:=<>clrmbp@!|\do
+ {%
+ \if\expandafter\noexpand\next\NC@char
+ \PackageWarning{array}%
+ {Redefining primitive column \NC@char}\fi}%
+ \NC@list\expandafter{\the\NC@list\NC@do#1}}%
+ {\PackageWarning{array}{Column \NC@char\space is already defined}}%
+ \@namedef{NC@find@\NC@char}##1#1{\NC@{##1}}%
+ \@ifnextchar[{\newcol@{\NC@char}}{\newcol@{\NC@char}[0]}}
+\def\newcol@#1[#2]#3{\expandafter\@reargdef
+ \csname NC@rewrite@#1\endcsname[#2]{\NC@find#3}}
+\def\NC@#1{%
+ \@temptokena\expandafter{\the\@temptokena#1}\futurelet\next\NC@ifend}
+\def\NC@ifend{%
+ \ifx\next\relax
+ \else\@tempswatrue\expandafter\NC@rewrite\fi}
+\def\NC@do#1{%
+ \expandafter\let\expandafter\NC@rewrite
+ \csname NC@rewrite@\string#1\endcsname
+ \expandafter\let\expandafter\NC@find
+ \csname NC@find@\string#1\endcsname
+ \expandafter\@temptokena\expandafter{\expandafter}%
+ \expandafter\NC@find\the\@temptokena#1\relax}
+\def\showcols{{\def\NC@do##1{\let\NC@do\NC@show}\the\NC@list}}
+\def\NC@show#1{%
+ \typeout{Column #1\expandafter\expandafter\expandafter\NC@strip
+ \expandafter\meaning\csname NC@rewrite@#1\endcsname\@@}}
+\def\NC@strip#1:#2->#3 #4\@@{#2 -> #4}
+\newtoks\NC@list
+\newcolumntype{*}[2]{}
+\long\@namedef{NC@rewrite@*}#1#2{%
+ \count@#1\relax
+ \loop
+ \ifnum\count@>\z@
+ \advance\count@\m@ne
+ \@temptokena\expandafter{\the\@temptokena#2}%
+ \repeat
+ \NC@find}
+\let\@xexpast\relax
+\let\@xexnoop\relax
+\def\save@decl{\toks \count@ = \expandafter\expandafter\expandafter
+ {\expandafter\@nextchar\the\toks\count@}}
+\def\@mkpream#1{\gdef\@preamble{}\@lastchclass 4 \@firstamptrue
+ \let\@sharp\relax
+ \def\@startpbox##1{\unexpanded\expandafter{\expandafter
+ \@startpbox\expandafter{##1}}}\let\@endpbox\relax
+ \let\do@row@strut\relax
+ \let\ar@align@mcell\relax
+ \@temptokena{#1}\@tempswatrue
+ \@whilesw\if@tempswa\fi{\@tempswafalse\the\NC@list}%
+ \count@\m@ne
+ \let\the@toks\relax
+ \prepnext@tok
+ \expandafter \@tfor \expandafter \@nextchar
+ \expandafter :\expandafter =\the\@temptokena \do
+ {\@testpach
+ \ifcase \@chclass \@classz \or \@classi \or \@classii
+ \or \save@decl \or \or \@classv \or \@classvi
+ \or \@classvii \or \@classviii
+ \or \@classx
+ \or \@classx \fi
+ \@lastchclass\@chclass}%
+ \ifcase\@lastchclass
+ \@acol \or
+ \or
+ \@acol \or
+ \@preamerr \thr@@ \or
+ \@preamerr \tw@ \@addtopreamble\@sharp \or
+ \or
+ \else \@preamerr \@ne \fi
+ \def\the@toks{\the\toks}}
+\let\@classix\relax
+\def\@classviii{\ifnum \@lastchclass >\z@\ifnum\@lastchclass=\tw@\else
+ \@preamerr 4\@chclass 6 \@classvi \fi\fi}
+\def\@classv{\save@decl
+ \expandafter\NC@ecs\@nextchar\extracolsep{}\extracolsep\@@@
+ \@addtopreamble{\d@llarbegin\the@toks\the\count@\relax\d@llarend}%
+ \prepnext@tok}
+\def\NC@ecs#1\extracolsep#2#3\extracolsep#4\@@@{\def\@tempa{#2}%
+ \ifx\@tempa\@empty\else\toks\count@={#1\tabskip#2\relax#3}\fi}
+\def\@tabarray{\@ifnextchar[{\@@array}{\@@array[c]}}
+\let\@@array\@array
+\def\endarray{\crcr \egroup \egroup \@arrayright \gdef\@preamble{}}
+\let\@arrayleft\@empty
+\let\@arrayright\@empty
+\newlength{\extratabsurround}
+\setlength{\extratabsurround}{2pt}
+\newlength{\backup@length}
+\newcommand{\firsthline}{%
+ \multicolumn1c{%
+ \global\backup@length\ht\@arstrutbox
+ \global\advance\backup@length\dp\@arstrutbox
+ \global\advance\backup@length\arrayrulewidth
+ \raise\extratabsurround\copy\@arstrutbox
+ }\\[-\backup@length]\hline
+}
+\newcommand{\lasthline}{\hline\multicolumn1c{%
+ \global\backup@length2\ht\@arstrutbox
+ \global\advance\backup@length2\dp\@arstrutbox
+ \global\advance\backup@length\arrayrulewidth
+ }\\[-\backup@length]%
+ \multicolumn1c{%
+ \lower\extratabsurround\copy\@arstrutbox
+ }%
+}
+\CheckCommand*\@xhline{\ifx\reserved@a\hline
+ \vskip\doublerulesep
+ \vskip-\arrayrulewidth
+ \fi
+ \ifnum0=`{\fi}}
+\renewcommand*\@xhline{\ifx\reserved@a\hline
+ \vskip\doublerulesep
+ \fi
+ \ifnum0=`{\fi}}
+
+\newsavebox\ar@cellbox
+\newcolumntype{w}[2]{%
+ >{\begin{lrbox}\ar@cellbox}%
+ c%
+ <{\end{lrbox}%
+ \makebox[#2][#1]{\unhbox\ar@cellbox}}}
+
+\newcolumntype{W}[2]
+ {>{\begin{lrbox}\ar@cellbox}%
+ c%
+ <{\end{lrbox}%
+ \let\hss\hfil
+ \makebox[#2][#1]{\unhbox\ar@cellbox}}}
+\endinput
+%%
+%% End of file `array.sty'.
diff --git a/macros/latex-dev/required/tools/array.dtx b/macros/latex-dev/required/tools/array.dtx
index aca43a53c6..a84d4faf51 100644
--- a/macros/latex-dev/required/tools/array.dtx
+++ b/macros/latex-dev/required/tools/array.dtx
@@ -29,10 +29,11 @@
%<+package>\providecommand\DeclareCurrentRelease[2]{}
%<+package>
%<+package>\DeclareRelease{}{2016-10-06}{array-2016-10-06.sty}
-%<+package>\DeclareCurrentRelease{}{2019-10-01}
+%<+package>\DeclareRelease{v2.4}{2020-02-10}{array-2020-02-10.sty}
+%<+package>\DeclareCurrentRelease{}{2020-10-01}
%<+package>
%<+package>\ProvidesPackage{array}
-%<+package> [2020/02/10 v2.4m Tabular extension package (FMi)]
+%<+package> [2020/10/01 v2.5b Tabular extension package (FMi)]
%
% \fi
%
@@ -2206,8 +2207,13 @@
\let\do@row@strut\relax
% \end{macrocode}
%
+% \cs{@yargarraycr} is the same as in the \LaTeX{} kernel
+% (depending on the date of the kernel with one of the two
+% definitions below). We therefore do not define it again.
+% \changes{v2.5b}{200/04/22}{Don't define \cs{@yargarraycr} unnecessarily}
% \begin{macrocode}
-\def\@yargarraycr#1{\cr\noalign{\vskip #1}}
+%\def\@yargarraycr#1{\cr\noalign{\@vspace@calcify{#1}}} % 2020-10-01
+%\def\@yargarraycr#1{\cr\noalign{\vskip #1}}
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -3034,14 +3040,18 @@
% alignment which is either "l", "c", or "r" and the second is the
% nominal width of the column.
% \changes{v2.4f}{2017/11/07}{Column type added}
+% \changes{v2.5a}{2020/04/06}{Use \cs{d@llarbegin} and \cs{d@llarend} so
+% that cell is typeset in math mode inside \texttt{array} (gh/297)}
% \begin{macrocode}
\newcolumntype{w}[2]{%
% \end{macrocode}
% Before the cell content we start an "lrbox"-environment to
% collect the cell material into the previously allocated box
-% "\ar@cellbox".
+% "\ar@cellbox". We add \cs{d@llarbegin} (and later \cs{d@llarend})
+% so that the content is typeset in math mode if we are in an
+% \texttt{array} environment.
% \begin{macrocode}
- >{\begin{lrbox}\ar@cellbox}%
+ >{\begin{lrbox}\ar@cellbox\d@llarbegin}%
% \end{macrocode}
% Then comes a specifier for the cell content. We use "c", but
% that doesn't matter as in the end we will always put a box of a
@@ -3059,9 +3069,9 @@
% alignment within that width. We unbox the collected material so
% that any stretchable glue inside can interact with the alignment.
% \changes{v2.4m}{2020/02/10}{Unbox collected material so that
-% % stretchable glue inside can act (gh/270)}
+% stretchable glue inside can act (gh/270)}
% \begin{macrocode}
- <{\end{lrbox}%
+ <{\d@llarend \end{lrbox}%
\makebox[#2][#1]{\unhbox\ar@cellbox}}}
% \end{macrocode}
% \end{macro}
@@ -3072,11 +3082,13 @@
% The \texttt{W} is similar but in this case we want a warning if
% the cell content is too wide.
% \changes{v2.4f}{2017/11/07}{Column type added}
+% \changes{v2.5a}{2020/04/06}{Use \cs{d@llarbegin} and \cs{d@llarend} so
+% that cell is typeset in mathmode inside \texttt{array} (gh/297)}
% \begin{macrocode}
\newcolumntype{W}[2]
- {>{\begin{lrbox}\ar@cellbox}%
+ {>{\begin{lrbox}\ar@cellbox\d@llarbegin}%
c%
- <{\end{lrbox}%
+ <{\d@llarend\end{lrbox}%
\let\hss\hfil
\makebox[#2][#1]{\unhbox\ar@cellbox}}}
% \end{macrocode}
diff --git a/macros/latex-dev/required/tools/array.pdf b/macros/latex-dev/required/tools/array.pdf
index 2e55ae8a30..508b57f29b 100644
--- a/macros/latex-dev/required/tools/array.pdf
+++ b/macros/latex-dev/required/tools/array.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/bm.pdf b/macros/latex-dev/required/tools/bm.pdf
index 96dcc4270e..b780310b89 100644
--- a/macros/latex-dev/required/tools/bm.pdf
+++ b/macros/latex-dev/required/tools/bm.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/calc.pdf b/macros/latex-dev/required/tools/calc.pdf
index 9dc588dfb5..bb3cbeacf0 100644
--- a/macros/latex-dev/required/tools/calc.pdf
+++ b/macros/latex-dev/required/tools/calc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/changes.txt b/macros/latex-dev/required/tools/changes.txt
index ca9ea3d9f9..fc18afe98a 100644
--- a/macros/latex-dev/required/tools/changes.txt
+++ b/macros/latex-dev/required/tools/changes.txt
@@ -5,11 +5,31 @@ completeness or accuracy and it contains some references to files that
are not part of the distribution.
=======================================================================
+2020-05-10 Johannes Braams <Johannes.Braams@latex-project.org>
+
+ * xr.dtx: Remove leading and trailing spaces from the argument to
+ \externaldocument, making sure that spaces *in* filenames are
+ supprted (gh/217).
+
+2020-04-22 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * array.dtx (section{The line separator \\):
+ Don't define \@yargarraycr unnecessarily (gh/152)
+
+2020-04-06 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
+
+ * array.dtx (subsection{Implementing column types w and W}):
+ Use \d@llarbegin and \d@llarendde so that cell is typeset by
+ default in math mode inside array; the use of >{$} ... <{$}
+ to make such a column text mode remains possible
+ (gh/297) --- this is a breaking change!
+
+
2020-02-10 Frank Mittelbach <Frank.Mittelbach@latex-project.org>
* array.dtx (subsection{Implementing column types w and W}):
Unbox collected material so that stretchable glue
- inside can act (gh/270#)
+ inside can act (gh/270)
#########################
# 2020-02-02 Release
diff --git a/macros/latex-dev/required/tools/dcolumn.pdf b/macros/latex-dev/required/tools/dcolumn.pdf
index 3231278e2e..d6cf6917e8 100644
--- a/macros/latex-dev/required/tools/dcolumn.pdf
+++ b/macros/latex-dev/required/tools/dcolumn.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/delarray.pdf b/macros/latex-dev/required/tools/delarray.pdf
index d81b97c183..c171247f78 100644
--- a/macros/latex-dev/required/tools/delarray.pdf
+++ b/macros/latex-dev/required/tools/delarray.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/enumerate.pdf b/macros/latex-dev/required/tools/enumerate.pdf
index 706a026c3d..753327a1ab 100644
--- a/macros/latex-dev/required/tools/enumerate.pdf
+++ b/macros/latex-dev/required/tools/enumerate.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/fileerr.pdf b/macros/latex-dev/required/tools/fileerr.pdf
index 62480497da..6e98faa540 100644
--- a/macros/latex-dev/required/tools/fileerr.pdf
+++ b/macros/latex-dev/required/tools/fileerr.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/fontsmpl.pdf b/macros/latex-dev/required/tools/fontsmpl.pdf
index c10065911c..a8cfedb50a 100644
--- a/macros/latex-dev/required/tools/fontsmpl.pdf
+++ b/macros/latex-dev/required/tools/fontsmpl.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/ftnright.pdf b/macros/latex-dev/required/tools/ftnright.pdf
index ba324029b1..adea07ca13 100644
--- a/macros/latex-dev/required/tools/ftnright.pdf
+++ b/macros/latex-dev/required/tools/ftnright.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/hhline.pdf b/macros/latex-dev/required/tools/hhline.pdf
index c2b938bec4..934fe19a13 100644
--- a/macros/latex-dev/required/tools/hhline.pdf
+++ b/macros/latex-dev/required/tools/hhline.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/indentfirst.pdf b/macros/latex-dev/required/tools/indentfirst.pdf
index 70bd67980c..b03eec1024 100644
--- a/macros/latex-dev/required/tools/indentfirst.pdf
+++ b/macros/latex-dev/required/tools/indentfirst.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/layout.pdf b/macros/latex-dev/required/tools/layout.pdf
index 70ed8643bc..65c765dbc0 100644
--- a/macros/latex-dev/required/tools/layout.pdf
+++ b/macros/latex-dev/required/tools/layout.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/longtable.pdf b/macros/latex-dev/required/tools/longtable.pdf
index 93de1f8a67..e2efb5af88 100644
--- a/macros/latex-dev/required/tools/longtable.pdf
+++ b/macros/latex-dev/required/tools/longtable.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/multicol.pdf b/macros/latex-dev/required/tools/multicol.pdf
index 6fbeab8c4b..5749c44295 100644
--- a/macros/latex-dev/required/tools/multicol.pdf
+++ b/macros/latex-dev/required/tools/multicol.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/rawfonts.pdf b/macros/latex-dev/required/tools/rawfonts.pdf
index 1cd03f2c50..ac87123c56 100644
--- a/macros/latex-dev/required/tools/rawfonts.pdf
+++ b/macros/latex-dev/required/tools/rawfonts.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/shellesc.pdf b/macros/latex-dev/required/tools/shellesc.pdf
index 19760108ca..45dcd372a2 100644
--- a/macros/latex-dev/required/tools/shellesc.pdf
+++ b/macros/latex-dev/required/tools/shellesc.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/showkeys.pdf b/macros/latex-dev/required/tools/showkeys.pdf
index b3cd0b6330..853da80f2b 100644
--- a/macros/latex-dev/required/tools/showkeys.pdf
+++ b/macros/latex-dev/required/tools/showkeys.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/somedefs.pdf b/macros/latex-dev/required/tools/somedefs.pdf
index 24e37c6314..a0b4cab54d 100644
--- a/macros/latex-dev/required/tools/somedefs.pdf
+++ b/macros/latex-dev/required/tools/somedefs.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/tabularx.pdf b/macros/latex-dev/required/tools/tabularx.pdf
index 8157bb9860..ac1b6bf40e 100644
--- a/macros/latex-dev/required/tools/tabularx.pdf
+++ b/macros/latex-dev/required/tools/tabularx.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/theorem.pdf b/macros/latex-dev/required/tools/theorem.pdf
index c5a7e7a40f..a3695260c7 100644
--- a/macros/latex-dev/required/tools/theorem.pdf
+++ b/macros/latex-dev/required/tools/theorem.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/tools-overview.pdf b/macros/latex-dev/required/tools/tools-overview.pdf
index d5b9e0c0eb..599af2d14f 100644
--- a/macros/latex-dev/required/tools/tools-overview.pdf
+++ b/macros/latex-dev/required/tools/tools-overview.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/trace.pdf b/macros/latex-dev/required/tools/trace.pdf
index 3db16986f9..07e50dc222 100644
--- a/macros/latex-dev/required/tools/trace.pdf
+++ b/macros/latex-dev/required/tools/trace.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/varioref.pdf b/macros/latex-dev/required/tools/varioref.pdf
index d4607e7a49..2ecf15a73a 100644
--- a/macros/latex-dev/required/tools/varioref.pdf
+++ b/macros/latex-dev/required/tools/varioref.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/verbatim.pdf b/macros/latex-dev/required/tools/verbatim.pdf
index 4c73b9c758..b0452349ba 100644
--- a/macros/latex-dev/required/tools/verbatim.pdf
+++ b/macros/latex-dev/required/tools/verbatim.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/xr.dtx b/macros/latex-dev/required/tools/xr.dtx
index a6b2ffd819..a2dbea7c1e 100644
--- a/macros/latex-dev/required/tools/xr.dtx
+++ b/macros/latex-dev/required/tools/xr.dtx
@@ -25,7 +25,7 @@
%
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{xr}
-%<package> [2019/07/22 v5.05 eXternal References (DPC)]
+%<package> [2020-05-10 v5.06 eXternal References (DPC)]
%
%<*driver>
\documentclass{ltxdoc}
@@ -103,12 +103,15 @@
\let\externalcitedocument\externaldocument
% \end{macrocode}
%
-% Save the optional prefix. Start processing the first |aux| file.
+% Save the optional prefix. Start processing the first |aux| file.
+% \changes{v5.06}{2020-05-10}{Remove leading and trailing sapces from
+% the filename (gh/2223)}
% \begin{macrocode}
\def\XR@[#1]#2{{%
\makeatletter
\def\XR@prefix{#1}%
- \XR@next#2.aux\relax\\}}
+ \set@curr@file@trim@spaces{#2}%
+ \expandafter\XR@next\@curr@file.aux\relax\\}}
% \end{macrocode}
%
% Process the next |aux| file in the list and remove it from the head of
@@ -135,8 +138,10 @@
% If the |aux| file exists, loop through line by line, looking for
% |\newlabel| and |\@input|. Otherwise process the next file in the
% list.
+% \changes{v5.06}{2020-05-10}{Add braces around the filename to
+% support filenames with spaces (gh/223)}
% \begin{macrocode}
-\def\XR@loop#1{\openin\@inputcheck#1\relax
+\def\XR@loop#1{\openin\@inputcheck{#1}\relax
\ifeof\@inputcheck
\PackageWarning{xr}{^^JNo file #1^^JLABELS NOT IMPORTED.^^J}%
\expandafter\XR@aux
diff --git a/macros/latex-dev/required/tools/xr.pdf b/macros/latex-dev/required/tools/xr.pdf
index 6bd98591d7..8e3c988fc2 100644
--- a/macros/latex-dev/required/tools/xr.pdf
+++ b/macros/latex-dev/required/tools/xr.pdf
Binary files differ
diff --git a/macros/latex-dev/required/tools/xspace.pdf b/macros/latex-dev/required/tools/xspace.pdf
index c57dddbbf9..7eeda19972 100644
--- a/macros/latex-dev/required/tools/xspace.pdf
+++ b/macros/latex-dev/required/tools/xspace.pdf
Binary files differ
diff --git a/macros/latex/contrib/achemso/CHANGELOG.md b/macros/latex/contrib/achemso/CHANGELOG.md
index 2dd0780d95..c2b7a3dac8 100644
--- a/macros/latex/contrib/achemso/CHANGELOG.md
+++ b/macros/latex/contrib/achemso/CHANGELOG.md
@@ -4,6 +4,10 @@ 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/).
+## [v3.13a]
+## Fixed
+- Swap TOC height and width to give landscape output
+
## [v3.13]
### Added
- Style for _ACT ES&T Eng._ (`aeecco`)
diff --git a/macros/latex/contrib/achemso/achemso-demo.pdf b/macros/latex/contrib/achemso/achemso-demo.pdf
index 441d7fa772..ff7bde7bbb 100644
--- a/macros/latex/contrib/achemso/achemso-demo.pdf
+++ b/macros/latex/contrib/achemso/achemso-demo.pdf
Binary files differ
diff --git a/macros/latex/contrib/achemso/achemso.dtx b/macros/latex/contrib/achemso/achemso.dtx
index ae31de48be..7fcc65541e 100644
--- a/macros/latex/contrib/achemso/achemso.dtx
+++ b/macros/latex/contrib/achemso/achemso.dtx
@@ -762,7 +762,7 @@
% \begin{macrocode}
%<*class>
\ProvidesClass{achemso}
- [2020-05-06 v3.13 Submission to ACS journals]
+ [2020-05-27 v3.13a Submission to ACS journals]
\LoadClass[12pt,letter]{article}
% \end{macrocode}
%
@@ -782,7 +782,7 @@
% \begin{macrocode}
%<*package>
\ProvidesPackage{achemso}
- [2020-05-06 v3.13 Support for ACS journals]
+ [2020-05-27 v3.13a Support for ACS journals]
\@ifclassloaded{achemso}{%
\PackageInfo{achemso}{%
You have already loaded the `achemso' class:\MessageBreak
@@ -2786,8 +2786,8 @@
\newcommand*\acs@tocentry@text{TOC ENTRY REQUIRED}
\newlength{\acs@tocentry@height}
\newlength{\acs@tocentry@width}
-\setlength{\acs@tocentry@height}{3.25in}
-\setlength{\acs@tocentry@width}{1.75in}
+\setlength{\acs@tocentry@height}{1.75in}
+\setlength{\acs@tocentry@width}{3.25in}
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -3309,64 +3309,64 @@
% \begin{macrocode}
%<*achre4>
\ProvidesFile{achemso-achre4.cfg}
- [2020-05-06 v3.13 achemso configuration: Acc. Chem. Res.]
+ [2020-05-27 v3.13a achemso configuration: Acc. Chem. Res.]
\setkeys{acs}{biblabel = plain}
\def\acs@type@list{article,suppinfo}
\def\abstractname{Conspectus}
%</achre4>
%<*aaembp>
\ProvidesFile{achemso-aaembp.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Appl. Electron. Mater.]
+ [2020-05-27 v3.13a achemso configuration: ACS Appl. Electron. Mater.]
\def\acs@type@list{article,letter,suppinfo}
\setkeys{acs}{keywords = true}
%</aaembp>
%<*aaemcq>
\ProvidesFile{achemso-aaemcq.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Appl. Energy Mater.]
+ [2020-05-27 v3.13a achemso configuration: ACS Appl. Energy Mater.]
\def\acs@type@list{article,letter,suppinfo}
\setkeys{acs}{keywords = true}
%</aaemcq>
%<*aamick>
\ProvidesFile{achemso-aamick.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Appl. Mater. Interfaces]
+ [2020-05-27 v3.13a achemso configuration: ACS Appl. Mater. Interfaces]
\def\acs@type@list{article,letter,suppinfo}
\setkeys{acs}{keywords = true}
%</aamick>
%<*aanmf6>
\ProvidesFile{achemso-aanmf6.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Appl. Nano Mater.]
+ [2020-05-27 v3.13a achemso configuration: ACS Appl. Nano Mater.]
\def\acs@type@list{article,letter,suppinfo}
\setkeys{acs}{keywords = true}
%</aanmf6>
%<*aapmcd>
\ProvidesFile{achemso-aapmcd.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Appl. Polym. Mater.]
+ [2020-05-27 v3.13a achemso configuration: ACS Appl. Polym. Mater.]
\def\acs@type@list{article,letter,suppinfo}
\setkeys{acs}{keywords = true}
%</aapmcd>
%<*abseba>
\ProvidesFile{achemso-abseba.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Biomater. Sci. Eng.]
+ [2020-05-27 v3.13a achemso configuration: ACS Biomater. Sci. Eng.]
\setkeys{acs}{keywords = true}
\def\acs@type@list{article,review,suppinfo}
%</abseba>
%<*accacs>
\ProvidesFile{achemso-accacs.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Catal.]
+ [2020-05-27 v3.13a achemso configuration: ACS Catal.]
\setkeys{acs}{keywords = true}
\def\acs@type@list{article,letter,perspective,review,viewpoints,suppinfo}
\SectionNumbersOff
%</accacs>
%<*acscii>
\ProvidesFile{achemso-acscii.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Central Sci.]
+ [2020-05-27 v3.13a achemso configuration: ACS Central Sci.]
\def\acs@type@list{article,review,suppinfo}
\setkeys{acs}{doi = true}
\SectionNumbersOff
%</acscii>
%<*acbcct>
\ProvidesFile{achemso-acbcct.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Chem. Biol.]
+ [2020-05-27 v3.13a achemso configuration: ACS Chem. Biol.]
\setkeys{acs}{
biblabel = fullstop,
biochem = true,
@@ -3377,7 +3377,7 @@
%</acbcct>
%<*acncdm>
\ProvidesFile{achemso-acncdm.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Chem. Neurosci.]
+ [2020-05-27 v3.13a achemso configuration: ACS Chem. Neurosci.]
\def\acs@type@list{article,review,letter,suppinfo,viewpoint}
\setkeys{acs}{
biblabel = fullstop,
@@ -3388,43 +3388,43 @@
%</acncdm>
%<*acsccc>
\ProvidesFile{achemso-acsccc.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Combinatorial Sci.]
+ [2020-05-27 v3.13a achemso configuration: ACS Combinatorial Sci.]
\def\acs@type@list{article,letter,review,perspective,account,note,suppinfo}
\setkeys{acs}{keywords = true}
\SectionNumbersOff
%</acsccc>
%<*aesccq>
\ProvidesFile{achemso-aesccq.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Earth Space Chem.]
+ [2020-05-27 v3.13a achemso configuration: ACS Earth Space Chem.]
\def\acs@type@list{article,suppinfo}
\setkeys{acs}{keywords = true}
%</aesccq>
%<*aelccp>
\ProvidesFile{achemso-aelccp.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Energy Lett.]
+ [2020-05-27 v3.13a achemso configuration: ACS Energy Lett.]
\def\acs@type@list{letter,perspective,review,viewpoint,focus}
\SectionsOff
%</aelccp>
%<*aeecco>
\ProvidesFile{achemso-aeecco.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS ES&T Eng.]
+ [2020-05-27 v3.13a achemso configuration: ACS ES&T Eng.]
\def\acs@type@list{article,feature,perspective,review,viewpoint}
%</aeecco>
%<*aewcaa>
\ProvidesFile{achemso-aewcaa.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS ES&T Water]
+ [2020-05-27 v3.13a achemso configuration: ACS ES&T Water]
\def\acs@type@list{article,feature,perspective,review,viewpoint}
%</aewcaa>
%<*ascefj>
\ProvidesFile{achemso-ascefj.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Infect. Dis.]
+ [2020-05-27 v3.13a achemso configuration: ACS Infect. Dis.]
\def\acs@type@list{article,letter,perspective,review,viewpoint,suppinfo}
\setkeys{acs}{keywords = true}
\SectionsOff
%</ascefj>
%<*amlccd>
\ProvidesFile{achemso-amlccd.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Macro Lett.]
+ [2020-05-27 v3.13a achemso configuration: ACS Macro Lett.]
\def\acs@type@list{letter,suppinfo}
\SectionsOff
\setlength{\acs@tocentry@height}{8 cm}
@@ -3432,19 +3432,19 @@
%</amlccd>
%<*amlcef>
\ProvidesFile{achemso-amlcef.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Mater. Lett.]
+ [2020-05-27 v3.13a achemso configuration: ACS Mater. Lett.]
\def\acs@type@list{letter,perspective,review,viewpoint,focus}
\SectionsOff
%</amlcef>
%<*amclct>
\ProvidesFile{achemso-amclct.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Med. Chem. Lett.]
+ [2020-05-27 v3.13a achemso configuration: ACS Med. Chem. Lett.]
\def\acs@type@list{article,letter,perspective,suppinfo}
\SectionNumbersOff
%</amclct>
%<*ancac3>
\ProvidesFile{achemso-ancac3.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Nano]
+ [2020-05-27 v3.13a achemso configuration: ACS Nano]
\setkeys{acs}{
abbreviations = true,
biblabel = fullstop,
@@ -3458,12 +3458,12 @@
%</ancac3>
%<*acsodf>
\ProvidesFile{achemso-acsodf.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Omega.]
+ [2020-05-27 v3.13a achemso configuration: ACS Omega.]
\def\acs@type@list{article}
%</acsodf>
%<*apchd5>
\ProvidesFile{achemso-apchd5.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Photon.]
+ [2020-05-27 v3.13a achemso configuration: ACS Photon.]
\def\acs@type@list{article,letter,perspective,review,suppinfo}
\setkeys{acs}{keywords = true}
\ifx\acs@manuscript\acs@manuscript@letter
@@ -3472,14 +3472,14 @@
%</apchd5>
%<*aidcbc>
\ProvidesFile{achemso-aidcbc.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Sensors]
+ [2020-05-27 v3.13a achemso configuration: ACS Sensors]
\def\acs@type@list{article,letter,perspective,review,suppinfo}
\setkeys{acs}{keywords = true}
\SectionNumbersOff
%</aidcbc>
%<*ascecg>
\ProvidesFile{achemso-ascecg.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Sustainable Chem Eng.]
+ [2020-05-27 v3.13a achemso configuration: ACS Sustainable Chem Eng.]
\setkeys{acs}{
biblabel = fullstop,
keywords = true
@@ -3489,7 +3489,7 @@
%</ascecg>
%<*asbcd6>
\ProvidesFile{achemso-asbcd6.cfg}
- [2020-05-06 v3.13 achemso configuration: ACS Synth. Biol.]
+ [2020-05-27 v3.13a achemso configuration: ACS Synth. Biol.]
\setkeys{acs}{
abbreviations = true,
biblabel = fullstop,
@@ -3501,13 +3501,13 @@
%</asbcd6>
%<*ancham>
\ProvidesFile{achemso-ancham.cfg}
- [2020-05-06 v3.13 achemso configuration: Anal. Chem.]
+ [2020-05-27 v3.13a achemso configuration: Anal. Chem.]
\def\acs@type@list{article,note,suppinfo}
\SectionNumbersOff
%</ancham>
%<*bichaw>
\ProvidesFile{achemso-bichaw.cfg}
- [2020-05-06 v3.13 achemso configuration: Biochemistry]
+ [2020-05-27 v3.13a achemso configuration: Biochemistry]
\setkeys{acs}{
abbreviations = true,
biblabel = brackets,
@@ -3555,7 +3555,7 @@
%</bichaw>
%<*bcches>
\ProvidesFile{achemso-bcches.cfg}
- [2020-05-06 v3.13 achemso configuration: Bioconjugate Chem.]
+ [2020-05-27 v3.13a achemso configuration: Bioconjugate Chem.]
\setkeys{acs}{
biochem = true,
super = false
@@ -3564,14 +3564,14 @@
%</bcches>
%<*bomaf6>
\ProvidesFile{achemso-bomaf6.cfg}
- [2020-05-06 v3.13 achemso configuration: Biomacromolecules]
+ [2020-05-27 v3.13a achemso configuration: Biomacromolecules]
\def\acs@type@list{article,comment,communication,note,review,suppinfo}
\SectionNumbersOff
\AtEndOfClass{\SectionsOn}
%</bomaf6>
%<*crtoec>
\ProvidesFile{achemso-crtoec.cfg}
- [2020-05-06 v3.13 achemso configuration: Chem. Res. Toxicol.]
+ [2020-05-27 v3.13a achemso configuration: Chem. Res. Toxicol.]
\setkeys{acs}{
abbreviations = true,
biochem = true,
@@ -3588,7 +3588,7 @@
%</crtoec>
%<*chreay>
\ProvidesFile{achemso-chreay.cfg}
- [2020-05-06 v3.13 achemso configuration: Chem. Rev.]
+ [2020-05-27 v3.13a achemso configuration: Chem. Rev.]
\def\acs@type@default{review}
\def\acs@type@list{review}
% \end{macrocode}
@@ -3599,7 +3599,7 @@
%<*cmatex>
% \begin{macrocode}
\ProvidesFile{achemso-cmatex.cfg}
- [2020-05-06 v3.13 achemso configuration: Chem. Mater.]
+ [2020-05-27 v3.13a achemso configuration: Chem. Mater.]
\setkeys{acs}{keywords = true}
\SectionNumbersOff
\ifx\acs@manuscript\acs@manuscript@communication
@@ -3609,7 +3609,7 @@
%</cmatex>
%<*cgdefu>
\ProvidesFile{achemso-cgdefu.cfg}
- [2020-05-06 v3.13 achemso configuration: Cryst. Growth Des.]
+ [2020-05-27 v3.13a achemso configuration: Cryst. Growth Des.]
\def\acs@type@list{%
article,communication,perspective,suppinfo%
}
@@ -3622,31 +3622,31 @@
%</cgdefu>
%<*enfuem>
\ProvidesFile{achemso-enfuem.cfg}
- [2020-05-06 v3.13 achemso configuration: Energy Fuels]
+ [2020-05-27 v3.13a achemso configuration: Energy Fuels]
\def\acs@type@list{article,review,suppinfo}
\SectionNumbersOff
%</enfuem>
%<*esthag>
\ProvidesFile{achemso-esthag.cfg}
- [2020-05-06 v3.13 achemso configuration: Environ. Sci. Technol.]
+ [2020-05-27 v3.13a achemso configuration: Environ. Sci. Technol.]
\def\acs@type@list{article,suppinfo}
\SectionNumbersOff
%</esthag>
%<*estlcu>
\ProvidesFile{achemso-estlcu.cfg}
- [2020-05-06 v3.13 achemso configuration: Environ. Sci. Technol. Lett.]
+ [2020-05-27 v3.13a achemso configuration: Environ. Sci. Technol. Lett.]
\def\acs@type@list{letter,suppinfo}
\SectionNumbersOff
%</estlcu>
%<*iecred>
\ProvidesFile{achemso-iecred.cfg}
- [2020-05-06 v3.13 achemso configuration: Ind. Eng. Chem. Res.]
+ [2020-05-27 v3.13a achemso configuration: Ind. Eng. Chem. Res.]
\setkeys{acs}{biblabel = brackets}
\SectionNumbersOff
%</iecred>
%<*inoraj>
\ProvidesFile{achemso-inoraj.cfg}
- [2020-05-06 v3.13 achemso configuration: Inorg. Chem.]
+ [2020-05-27 v3.13a achemso configuration: Inorg. Chem.]
\SectionNumbersOff
\ifx\acs@manuscript\acs@manuscript@communication
\AbstractOff
@@ -3656,14 +3656,14 @@
%</inoraj>
%<*jafcau>
\ProvidesFile{achemso-jafcau.cfg}
- [2020-05-06 v3.13 achemso configuration: J. Agric. Food Chem.]
+ [2020-05-27 v3.13a achemso configuration: J. Agric. Food Chem.]
\setkeys{acs}{keywords = true}
\def\acs@type@list{article,suppinfo}
\SectionNumbersOff
%</jafcau>
%<*jceda8>
\ProvidesFile{achemso-jceda8.cfg}
- [2020-05-06 v3.13 achemso configuration: J. Chem. Ed.]
+ [2020-05-27 v3.13a achemso configuration: J. Chem. Ed.]
\setkeys{acs}{keywords = true}
\SectionNumbersOff
\def\acs@type@list{article,suppinfo}
@@ -3671,26 +3671,26 @@
%</jceda8>
%<*jceaax>
\ProvidesFile{achemso-jceaax.cfg}
- [2020-05-06 v3.13 achemso configuration: J. Chem. Eng. Data]
+ [2020-05-27 v3.13a achemso configuration: J. Chem. Eng. Data]
\def\acs@type@list{article,suppinfo}
\def\refname{Literature Cited}
\SectionNumbersOff
%</jceaax>
%<*jcisd8>
\ProvidesFile{achemso-jcisd8.cfg}
- [2020-05-06 v3.13 achemso configuration: J. Chem. Inf. Model.]
+ [2020-05-27 v3.13a achemso configuration: J. Chem. Inf. Model.]
\def\acs@type@list{article,suppinfo}
\SectionNumbersOff
%</jcisd8>
%<*jctcce>
\ProvidesFile{achemso-jctcce.cfg}
- [2020-05-06 v3.13 achemso configuration: J. Chem. Theory Comput.]
+ [2020-05-27 v3.13a achemso configuration: J. Chem. Theory Comput.]
\def\acs@type@list{article,suppinfo}
\setkeys{acs}{maxauthors = 0}
%</jctcce>
%<*jmcmar>
\ProvidesFile{achemso-jmcmar.cfg}
- [2020-05-06 v3.13 achemso configuration: J. Med. Chem.]
+ [2020-05-27 v3.13a achemso configuration: J. Med. Chem.]
\def\acs@type@list{article,letter,perspective,suppinfo}
\SectionNumbersOff
\setlength{\acs@tocentry@height}{5.5cm}
@@ -3698,7 +3698,7 @@
%</jmcmar>
%<*jnprdf>
\ProvidesFile{achemso-jnprdf.cfg}
- [2020-05-06 v3.13 achemso configuration: J. Nat. Prod.]
+ [2020-05-27 v3.13a achemso configuration: J. Nat. Prod.]
\renewcommand*{\abstractname}{ABSTRACT}
\renewcommand*{\acknowledgementname}{ACKNOWLEDGEMENT}
\renewcommand*{\suppinfoname}{ASSOCIATED CONTENT}
@@ -3720,7 +3720,7 @@
%</jnprdf>
%<*joceah>
\ProvidesFile{achemso-joceah.cfg}
- [2020-05-06 v3.13 achemso configuration: J. Org. Chem.]
+ [2020-05-27 v3.13a achemso configuration: J. Org. Chem.]
\ifx\acs@manuscript\acs@manuscript@communication
\AbstractOff
\SectionsOff
@@ -3734,7 +3734,7 @@
% \begin{macrocode}
%<*jpcafh>
\ProvidesFile{achemso-jpcafh.cfg}
- [2020-05-06 v3.13 achemso configuration: J. Phys. Chem. A]
+ [2020-05-27 v3.13a achemso configuration: J. Phys. Chem. A]
\def\acs@type@list{article,suppinfo}
\setkeys{acs}{
etalmode = truncate,
@@ -3749,7 +3749,7 @@
%</jpcafh>
%<*jpcbfk>
\ProvidesFile{achemso-jpcbfk.cfg}
- [2020-05-06 v3.13 achemso configuration: J. Phys. Chem. B]
+ [2020-05-27 v3.13a achemso configuration: J. Phys. Chem. B]
\def\acs@type@list{article,suppinfo}
\setkeys{acs}{
etalmode = truncate,
@@ -3761,7 +3761,7 @@
%</jpcbfk>
%<*jpccck>
\ProvidesFile{achemso-jpccck.cfg}
- [2020-05-06 v3.13 achemso configuration: J. Phys. Chem. C]
+ [2020-05-27 v3.13a achemso configuration: J. Phys. Chem. C]
\def\acs@type@list{article,suppinfo}
\setkeys{acs}{
etalmode = truncate,
@@ -3775,7 +3775,7 @@
% \begin{macrocode}
%<*jpclcd>
\ProvidesFile{achemso-jpclcd.cfg}
- [2020-05-06 v3.13 achemso configuration: J. Phys. Chem. Lett.]
+ [2020-05-27 v3.13a achemso configuration: J. Phys. Chem. Lett.]
\setkeys{acs}{
etalmode = truncate,
maxauthors = 10
@@ -3800,7 +3800,7 @@
%</jpclcd>
%<*jprobs>
\ProvidesFile{achemso-jprobs.cfg}
- [2020-05-06 v3.13 achemso configuration: J. Proteome Res.]
+ [2020-05-27 v3.13a achemso configuration: J. Proteome Res.]
\setkeys{acs}{keywords = true}
\def\acs@type@list{article,review,suppinfo}
\SectionNumbersOff
@@ -3812,7 +3812,7 @@
% \begin{macrocode}
%<*jacsat>
\ProvidesFile{achemso-jacsat.cfg}
- [2020-05-06 v3.13 achemso configuration: J. Am. Chem. Soc.]
+ [2020-05-27 v3.13a achemso configuration: J. Am. Chem. Soc.]
\SectionNumbersOff
\ifx\acs@manuscript\acs@manuscript@communication\else
\expandafter\endinput
@@ -4016,26 +4016,26 @@
%</jacsat>
%<*langd5>
\ProvidesFile{achemso-langd5.cfg}
- [2020-05-06 v3.13 achemso configuration: Langmuir]
+ [2020-05-27 v3.13a achemso configuration: Langmuir]
\def\acs@type@list{article,letter,suppinfo}
\SectionNumbersOff
%</langd5>
%<*mamobx>
\ProvidesFile{achemso-mamobx.cfg}
- [2020-05-06 v3.13 achemso configuration: Macromolecules]
+ [2020-05-27 v3.13a achemso configuration: Macromolecules]
\SectionNumbersOff
\setkeys{acs}{doi = true}
%</mamobx>
%<*mpohbp>
\ProvidesFile{achemso-mpohbp.cfg}
- [2020-05-06 v3.13 achemso configuration: Mol. Pharm.]
+ [2020-05-27 v3.13a achemso configuration: Mol. Pharm.]
\setkeys{acs}{keywords = true}
\def\acs@type@list{article,suppinfo}
\SectionNumbersOff
%</mpohbp>
%<*nalefd>
\ProvidesFile{achemso-nalefd.cfg}
- [2020-05-06 v3.13 achemso configuration: Nano Lett.]
+ [2020-05-27 v3.13a achemso configuration: Nano Lett.]
\setkeys{acs}{keywords = true}
\def\acs@type@default{letter}
\def\acs@type@list{letter}
@@ -4043,7 +4043,7 @@
%</nalefd>
%<*orlef7>
\ProvidesFile{achemso-orlef7.cfg}
- [2020-05-06 v3.13 achemso configuration: Org. Lett.]
+ [2020-05-27 v3.13a achemso configuration: Org. Lett.]
\def\acs@type@default{communication}
\def\acs@type@list{communication}
\SectionNumbersOff
@@ -4053,13 +4053,13 @@
%</orlef7>
%<*oprdfk>
\ProvidesFile{achemso-oprdfk.cfg}
- [2020-05-06 v3.13 achemso configuration: Org. Proc. Res. Dev.]
+ [2020-05-27 v3.13a achemso configuration: Org. Proc. Res. Dev.]
\def\acs@type@list{article,highlight,review,suppinfo}
\SectionNumbersOff
%</oprdfk>
%<*orgnd7>
\ProvidesFile{achemso-orgnd7.cfg}
- [2020-05-06 v3.13 achemso configuration: Organometallics]
+ [2020-05-27 v3.13a achemso configuration: Organometallics]
\SectionNumbersOff
%</orgnd7>
% \end{macrocode}
@@ -4724,7 +4724,7 @@ FUNCTION { count.entries } {
% Start and end of bibliography functions
FUNCTION { begin.bib } {
- "achemso 2020-05-06 v3.13" top$
+ "achemso 2020-05-27 v3.13a" top$
preamble$ empty$
{ }
{
diff --git a/macros/latex/contrib/achemso/achemso.pdf b/macros/latex/contrib/achemso/achemso.pdf
index c4d7a79346..5fa9b9e2b1 100644
--- a/macros/latex/contrib/achemso/achemso.pdf
+++ b/macros/latex/contrib/achemso/achemso.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-software/biblio.bib b/macros/latex/contrib/biblatex-contrib/biblatex-software/biblio.bib
index 53b227a4b6..72f0793ada 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-software/biblio.bib
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-software/biblio.bib
@@ -92,7 +92,8 @@
@codefragment {simplemapper,
subtitle = {Core mapping routine},
- swhid = {swh:1:cnt:43a6b232768017b03da934ba22d9cc3f2726a6c5;lines=192-228;
+ swhid = {swh:1:cnt:43a6b232768017b03da934ba22d9cc3f2726a6c5;
+ lines=192-228;
origin=https://github.com/rdicosmo/parmap},
crossref = {parmap}
}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-software/history.tex b/macros/latex/contrib/biblatex-contrib/biblatex-software/history.tex
index 28e960569e..d0ead656fd 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-software/history.tex
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-software/history.tex
@@ -9,3 +9,4 @@
\begin{release}{bltx-v0.3}{2020-04-05} \item Biblatex style with first complete example \end{release}
\begin{release}{bltx-v0.2}{2020-04-02} \item Biblatex style sent for review \end{release}
\begin{release}{bltx-v0.1}{2020-04-02} \item First version of the biblatex style \end{release}
+\begin{release}{bltx-1.2}{2020-05-27} \item Add swhid stylemap to support multiline SWHIDs \end{release}
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-software/sample-use-sty.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-software/sample-use-sty.pdf
index 2be521992e..c8d65110ec 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-software/sample-use-sty.pdf
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-software/sample-use-sty.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.pdf b/macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.pdf
index e6a6a61245..63503343ba 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.pdf
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.pdf
Binary files differ
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.tex b/macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.tex
index 5e04310ba8..72de0c520e 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.tex
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-software/software-biblatex.tex
@@ -14,7 +14,7 @@
url={http://mirror.ctan.org/macros/latex/exptl/biblatex-contrib/biblatex-software/},
author={Roberto Di Cosmo},
email={roberto@dicosmo.org},
- revision={1.1},
+ revision={1.2},
date={\today}}
\hypersetup{%
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-software/software.bbx b/macros/latex/contrib/biblatex-contrib/biblatex-software/software.bbx
index 007d6e8325..2358ec1032 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-software/software.bbx
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-software/software.bbx
@@ -53,7 +53,18 @@
{}%
{\setunit*{\addspace}%
\usebibmacro{urldate}}}
-
+
+%
+% Support multiline SWHIDs
+%
+\DeclareStyleSourcemap{
+ \maps[datatype=bibtex,overwrite=true]{
+ \map{
+ \step[fieldsource=swhid, match=\regexp{\s}, replace={}]
+ }
+ }
+}
+
%
% Formatting fields for the software entries
%
diff --git a/macros/latex/contrib/biblatex-contrib/biblatex-software/swentries.tex b/macros/latex/contrib/biblatex-contrib/biblatex-software/swentries.tex
index 03aaee2c9a..7cc89052fb 100644
--- a/macros/latex/contrib/biblatex-contrib/biblatex-software/swentries.tex
+++ b/macros/latex/contrib/biblatex-contrib/biblatex-software/swentries.tex
@@ -241,7 +241,8 @@ we can do this as follows:
@codefragment {simplemapper,
subtitle = {Core mapping routine},
- swhid = {swh:1:cnt:43a6b232768017b03da934ba22d9cc3f2726a6c5;lines=192-228;
+ swhid = {swh:1:cnt:43a6b232768017b03da934ba22d9cc3f2726a6c5;
+ lines=192-228;
origin=https://github.com/rdicosmo/parmap},
crossref = {parmap}
}
diff --git a/macros/latex/contrib/nicematrix/README.md b/macros/latex/contrib/nicematrix/README.md
index 62c2d06089..f3183a5cfc 100644
--- a/macros/latex/contrib/nicematrix/README.md
+++ b/macros/latex/contrib/nicematrix/README.md
@@ -26,4 +26,5 @@ For a manual installation:
The file `nicematrix.sty` will be generated.
-The file `nicematrix.sty` is the only file necessary to use the extension `nicematrix`.
+The file `nicematrix.sty` is the only file necessary to use the extension `nicematrix`.
+You have to put it in the same directory as your document or (best) in a `texmf` tree.
diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.pdf b/macros/latex/contrib/nicematrix/nicematrix-french.pdf
index 5e5910a1ed..6acb7b9f28 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-french.pdf
+++ b/macros/latex/contrib/nicematrix/nicematrix-french.pdf
Binary files differ
diff --git a/macros/latex/contrib/nicematrix/nicematrix-french.tex b/macros/latex/contrib/nicematrix/nicematrix-french.tex
index 7adcadf738..d79a0f3727 100644
--- a/macros/latex/contrib/nicematrix/nicematrix-french.tex
+++ b/macros/latex/contrib/nicematrix/nicematrix-french.tex
@@ -7,22 +7,14 @@
\usepackage{geometry}
\geometry{left=2.8cm,right=2.8cm,top=2.5cm,bottom=2.5cm,papersize={21cm,29.7cm}}
-\usepackage{amsmath}
-
-\usepackage{array}
\usepackage{nicematrix}
-% \usepackage{colortbl}
\usepackage{tikz}
\usetikzlibrary{fit}
\usepackage{enumitem}
-
\usepackage{siunitx}
-
-
-% \usepackage{arydshln}
\usepackage{verbatim}
% We use \MakeShortVerb of shortvrb and not \DefineShortVerb of fancyvrb
@@ -45,9 +37,7 @@
\def\emphase{\bgroup\color{RoyalPurple}\let\next=}
\usepackage{footnote}
-
\usepackage{booktabs}
-
\usepackage{varwidth}
\usepackage[hyperfootnotes = false]{hyperref}
@@ -83,38 +73,16 @@
\maketitle
+
\begin{abstract}
L'extension LaTeX \pkg{nicematrix} fournit de nouveaux environnements similaires aux environnements classiques
-|{tabular}|, |{array}| et |{matrix}| mais avec des fonctionnalités supplémentaires. Parmi ces fonctionnalités
-figurent la possibilité de fixer la largeur des colonnes et de tracer des traits en pointillés continus entre les
-cases du tableau.
+|{tabular}|, |{array}| et |{matrix}| de \pkg{array} et \pkg{amsmath} mais avec des fonctionnalités plus étendues.
\end{abstract}
-\vspace{1cm}
-\section{Présentation}
-
-Cette extension peut être utilisée avec |xelatex|, |lualatex| et |pdflatex| mais aussi avec le cheminement
-classique |latex|-|dvips|-|ps2pdf| (ou Adobe Distiller). Deux ou trois compilations successives peuvent être
-nécessaires. Cette extension nécessite et charge les extensions \pkg{expl3}, \pkg{l3keys2e}, \pkg{xparse},
-\pkg{array}, \pkg{amsmath} et \pkg{pgfcore} ainsi que le module \pkg{shapes} de \textsc{pgf} (l'extension
-\pkg{tikz} n'est \emph{pas} chargée). L'utilisateur final n'a qu'à charger l'extension \pkg{nicematrix} avec
-l'instruction habituelle : |\usepackage{nicematrix}|.
-
+\vspace{1cm}
-\medskip
-\begin{savenotes}
-\begin{minipage}{0.6\linewidth}
-Cette extension fournit quelques outils supplémentaires pour dessiner des matrices (au sens mathématique). Les
-principales caractéristiques sont les suivantes :
-\begin{itemize}\setlength{\itemsep}{0pt}
-\item des lignes en pointillés continues ;
-\item des rangées et colonnes extérieures pour les labels ;
-\item un contrôle sur la largeur des colonnes.
-\end{itemize}
-\end{minipage}
-\end{savenotes}
-\hspace{1.4cm}
+\hspace{1cm}
$\begin{bNiceArray}{CCCC}[first-row,first-col,
code-for-first-col=\color{blue}\scriptstyle,
code-for-first-row=\color{blue}\scriptstyle,
@@ -125,98 +93,1106 @@ L_2 & a_{21} & a_{22} & \Cdots & a_{2n} \\
\Vdots & \Vdots & \Vdots & \Ddots & \Vdots \\
L_n & a_{n1} & a_{n2} & \Cdots & a_{nn}
\end{bNiceArray}$
+\hspace{2cm}
+\begin{NiceTabular}[c]{LSSSS}%
+[code-before = \rowcolor{red!15}{1-2} \rowcolors{3}{blue!15}{}]
+\toprule
+\Block{2-1}{Produit} & \multicolumn{3}{C}{dimensions (cm)} & \Block{2-1}{\rotate Prix} \\
+\cmidrule(rl){2-4}
+ & L & l & h \\
+\midrule
+petit & 3 & 5.5 & 1 & 30 \\
+standard & 5.5 & 8 & 1.5 & 50.5 \\
+premium & 8.5 & 10.5 & 2 & 80 \\
+extra & 8.5 & 10 & 1.5 & 85.5 \\
+spécial & 12 & 12 & 0.5 & 70 \\
+\bottomrule
+\end{NiceTabular}
+\vspace{1cm}
-\medskip
+L'extension \pkg{nicematrix} est entièrement contenue dans le fichier |nicematrix.sty|. Ce fichier peut être placé
+dans le répertoire courant ou dans une arborescence |texmf|. Le mieux reste néanmoins d'installer \pkg{nicematrix}
+avec une distribution TeX comme MiKTeX ou TeXlive.
+
+\bigskip
+Cette extension peut être utilisée avec |xelatex|, |lualatex| et |pdflatex| mais aussi avec le cheminement
+classique |latex|-|dvips|-|ps2pdf| (ou Adobe Distiller).
+
+\bigskip
+Cette extension nécessite et charge les extensions \pkg{l3keys2e}, \pkg{xparse}, \pkg{array}, \pkg{amsmath} et
+\pkg{pgfcore} ainsi que le module \pkg{shapes} de \textsc{pgf} (l'extension \pkg{tikz}, qui est une surcouche de
+\textsc{pgf} n'est \emph{pas} chargée). L'utilisateur final n'a qu'à charger l'extension \pkg{nicematrix} avec
+l'instruction habituelle : |\usepackage{nicematrix}|.
+
+
+\bigskip
+L'idée de \pkg{nicematrix} est de créer des nœuds \textsc{pgf} derrière les cases et les positions des filets des
+tableaux créés par \pkg{array} et de les utiliser pour développer de nouvelles fonctionnalités. Comme toujours avec
+\textsc{pgf}, les coordonnées de ces nœuds sont écrites dans le fichier |.aux| pour être utilisées à la
+compilation suivante. C'est pourquoi l'utilisation de \pkg{nicematrix} nécessite \textbf{plusieurs compilations
+ successives}.
+
+\bigskip
+La plupart des fonctionnalités de \pkg{nicematrix} sont accessibles sans avoir à utiliser explicitement
+\textsc{pgf} ou Tikz (ce dernier n'est d'ailleurs pas chargé par défaut).
+
+\bigskip
Une commande|\NiceMatrixOptions| est fournie pour régler les options (la portée des options fixées par cette
-commande est le groupe TeX courant).
+commande est le groupe TeX courant : elles sont semi-globales).
+
+
+\newpage
+
+\section{Les environnements de cette extension}
+
+L'extension \pkg{nicematrix} définit les nouveaux environnements suivants :
+
+\medskip
+\begin{ttfamily}
+\setlength{\tabcolsep}{3mm}
+\begin{tabular}{llll}
+\{NiceTabular\} & \{NiceArray\} & \{NiceMatrix\} \\
+ & \{pNiceArray\} & \{pNiceMatrix\} \\
+ & \{bNiceArray\} & \{bNiceMatrix\} \\
+ & \{BNiceArray\} & \{BNiceMatrix\} \\
+ & \{vNiceArray\} & \{vNiceMatrix\} \\
+ & \{VNiceArray\} & \{VNiceMatrix\}
+\end{tabular}
+\end{ttfamily}
+
+
+\medskip
+Les environnements |{NiceArray}| et |{NiceTabular}| sont similaires aux environnements |{array}| et |{tabular}| de
+l'extension \pkg{array} (qui est chargée par \pkg{nicematrix}).
+
+\medskip
+Il y a néanmoins quelques différences :
+\begin{itemize}
+\item Pour des raisons techniques, dans le préambule de ces environnements, l'utilisateur doit utiliser les lettres
+|L|, |C| et~|R|\footnote{Les types de colonnes |L|, |C| et |R| sont définis localement à l'intérieur de
+ |{NiceTabular}| ou |{NiceArray}| avec la commande |\newcolumntype| de \pkg{array}. Cette définition masque une
+ éventuelle définition précédente.} au lieu de |l|, |c| et |r|, y compris dans les commandes |\multicolumn| et
+dans les types de colonnes définis par |\newcolumntype|.
+
+\item Dans |{NiceArray}| (et ses variantes), les colonnes de type |w| (ex. : |wc{1cm}|) sont composées en mode
+mathématique alors que dans |{array}| de \pkg{array}, elles sont composées en mode texte.
+\end{itemize}
+
+\medskip
+Les environnements |{pNiceArray}|, |{bNiceArray}|, etc. n'ont pas d'équivalents dans \pkg{array}.
+
+\medskip
+Les environnements |{NiceMatrix}|, |{pNiceMatrix}|, etc. sont similaires aux environnements correspondants de
+l'\pkg{amsmath} (qui est chargée par \pkg{nicematrix}) : |{matrix}|, |{pmatrix}|, etc.
+
+\medskip
+Tous les environnements de l'extension \pkg{nicematrix} acceptent, entre crochets, une liste optionnelle de paires
+de la forme \textsl{clé=valeur}. {\bfseries Il doit n'y avoir aucun espace devant le crochet ouvrant (|[|) de cette
+liste d'options.}
+
+
+
+\section{L'espace vertical entre les rangées}
+
+Il est bien connu que certaines rangées des tableaux créés par défault avec LaTeX sont trop proches l'une de
+l'autre. On en donne ci-dessous un exemple classique.
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+$\begin{pmatrix}
+\frac12 & -\frac12 \\
+\frac13 & \frac14 \\
+\end{pmatrix}$
+\end{BVerbatim}
+$\begin{pmatrix}
+\frac12 & -\frac12 \\
+\frac13 & \frac14 \\
+\end{pmatrix}$
+
+\bigskip
+En s'inspirant de l'extension \pkg{cellspace} qui traite de ce problème, l'extension \pkg{nicematrix} propose deux
+clés |cell-space-top-limit| et |cell-space-bottom-limit| qui sont similaires aux deux paramètres
+|\cellspacetoplimit| et |\cellspacebottomlimit| proposés par \pkg{cellspace}. La valeur initiale de ces paramètres
+est $0$~pt pour que les environnements de \pkg{nicematrix} aient par défaut le même comportement que ceux de
+\pkg{array} et de l'\pkg{amsmth} mais une valeur de $1$~pt serait un bon choix. On conseille de régler leurs
+valeurs avec la commande |\NiceMatrixOptions|.
+
+\medskip
+\begin{Verbatim}
+\NiceMatrixOptions{~emphase#cell-space-top-limit = 1pt,cell-space-bottom-limit = 1pt@}
+\end{Verbatim}
+
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+$\begin{pNiceMatrix}
+\frac12 & -\frac12 \\
+\frac13 & \frac14 \\
+\end{pNiceMatrix}$
+\end{BVerbatim}
+\begin{scope}
+\NiceMatrixOptions{
+ cell-space-top-limit = 1pt ,
+ cell-space-bottom-limit = 1pt ,
+}
+$\begin{pNiceMatrix}
+\frac12 & -\frac12 \\
+\frac13 & \frac14 \\
+\end{pNiceMatrix}$
+\end{scope}
+
\bigskip
-\textbf{Un exemple d'utilisation pour les lignes en pointillés continues}
+\section{La clé baseline}
+
+L'extension \pkg{nicematrix} propose une option |baseline| pour la position verticale des tableaux. Cette
+option |baseline| prend comme valeur un entier qui indique le numéro de rangée dont la ligne de base servira de
+ligne de base pour le tableau.
\medskip
-\begin{minipage}{10cm}
-Considérons par exemple le code suivant qui utilise un environnement |{pmatrix}| de l'extension \pkg{amsmath}.
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+$A = \begin{pNiceMatrix}[~emphase#baseline=2@]
+\frac{1}{\sqrt{1+p^2}} & p & 1-p \\
+1 & 1 & 1 \\
+1 & p & 1+p
+\end{pNiceMatrix}$
+\end{BVerbatim}
+$A = \begin{pNiceMatrix}[baseline=2]
+\frac{1}{\sqrt{1+p^2}} & p & 1-p \\
+1 & 1 & 1 \\
+1 & p & 1+p
+\end{pNiceMatrix}$
+
+
+\interitem
+L'option |baseline| peut aussi prendre les trois valeurs spéciales |t|, |c| et |b|. Ces trois lettres peuvent aussi
+être utilisées de manière absolue comme pour l'option des environnements |{tabular}| et |{array}| de \pkg{array}.
+La valeur initiale de |baseline| est~|c|.
+
+
+\bigskip
+Dans l'exemple suivant, on utilise l'option |t| (synonyme de |baseline=t|) immédiatement après un |\item| de liste.
+On remarquera que la présence d'un |\hline| initial n'empêche pas l'alignement sur la ligne de base de la première
+rangée (avec |{tabular}| ou |{array}| de \pkg{array}, il faut utiliser |\firsthline|\footnote{On peut aussi utiliser |\firsthline|
+ dans les environnements de \pkg{nicematrix}.}).
\smallskip
-\begin{BVerbatim}
-$A = \begin{pmatrix}
-1 & \cdots & \cdots & 1 \\
-0 & \ddots & & \vdots \\
-\vdots & \ddots & \ddots & \vdots \\
-0 & \cdots & 0 & 1
-\end{pmatrix}$
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+\begin{enumerate}
+\item un item
+\smallskip
+\item \renewcommand{\arraystretch}{1.2}
+$\begin{NiceArray}[t]{LCCCCCC}
+\hline
+n & 0 & 1 & 2 & 3 & 4 & 5 \\
+u_n & 1 & 2 & 4 & 8 & 16 & 32
+\hline
+\end{NiceArray}$
+\end{enumerate}
\end{BVerbatim}
+%
+\begin{minipage}{5cm}
+\begin{enumerate}
+\item un item
+\smallskip
+\item \renewcommand{\arraystretch}{1.2}
+$\begin{NiceArray}[t]{LCCCCCC}
+\hline
+n & 0 & 1 & 2 & 3 & 4 & 5 \\
+u_n & 1 & 2 & 4 & 8 & 16 & 32 \\
+\hline
+\end{NiceArray}$
+\end{enumerate}
+\end{minipage}
+
+
+\bigskip
+Il est également possible d'utiliser les outils de \pkg{booktabs}: |\toprule|,
+|\bottomrule|, |\midrule|, etc.\par\nobreak
\smallskip
-Ce code compose la matrice $A$ représentée à droite.
-\end{minipage}\hspace{1cm}
-$A = \begin{pmatrix}
-1 &\cdots &\cdots &1 \\
-0 &\ddots & &\vdots \\
-\vdots &\ddots &\ddots &\vdots \\
-0 &\cdots &0 &1
-\end{pmatrix}$
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+\begin{enumerate}
+\item an item
+\smallskip
+\item
+$\begin{NiceArray}[t]{LCCCCCC}
+~emphase#\toprule@
+n & 0 & 1 & 2 & 3 & 4 & 5 \\
+~emphase#\midrule@
+u_n & 1 & 2 & 4 & 8 & 16 & 32
+~emphase#\bottomrule@
+\end{NiceArray}$
+\end{enumerate}
+\end{BVerbatim}
+\begin{minipage}{5cm}
+\begin{enumerate}
+\item an item
+\smallskip
+\item
+$\begin{NiceArray}[t]{LCCCCCC}
+\toprule
+n & 0 & 1 & 2 & 3 & 4 & 5 \\
+\midrule
+u_n & 1 & 2 & 4 & 8 & 16 & 32 \\
+\bottomrule
+\end{NiceArray}$
+\end{enumerate}
+\end{minipage}
+
+
+
+\section{Les blocs}
+\label{Block}
+Dans les environnements de \pkg{nicematrix}, on peut utiliser la commande |\Block| pour placer un élément au centre
+d'un rectangle de cases fusionnées. La commande |\Block| ne crée pas d'espace par elle-même.
+La commande |\Block| doit être utilisée dans la case supérieure gauche du bloc avec deux arguments. Le premier
+argument est la taille de ce bloc avec la syntaxe $i$-$j$ où $i$ est le nombre de rangées et $j$ le nombre de
+colonnes du bloc. Le deuxième argument, est, sans surprise, le contenu du bloc.
+Dans |{NiceTabular}|, le contenu est composé en mode texte. Dans les autres environnements, il est composé en mode
+mathématique.
+
+\medskip
+\begin{BVerbatim}
+\begin{NiceTabular}{CCCC}
+rose & tulipe & marguerite & dahlia \\
+violette & ~emphase#\Block{2-2}{\LARGE\color{blue} fleurs}@ & & souci \\
+pervenche & & & lys \\
+arum & iris & jacinthe & muguet
+\end{NiceTabular}
+\end{BVerbatim}
+
+
+\medskip
+\begin{center}
+\begin{NiceTabular}{CCCC}
+rose & tulipe & marguerite & dahlia \\
+violette & \Block{2-2}{\LARGE\color{blue} fleurs} & & souci \\
+pervenche & & & lys \\
+arum & iris & jacinthe & muguet
+\end{NiceTabular}
+\end{center}
+
+
+
+\bigskip
+On peut aussi utiliser la commande |\Block| dans des matrices mathématiques.
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+$\begin{bNiceArray}{CCC|C}[margin]
+~emphase#\Block{3-3}{A}@ & & & 0 \\
+& \hspace*{1cm} & & \Vdots \\
+& & & 0 \\
+\hline
+0 & \Cdots& 0 & 0
+\end{bNiceArray}$
+\end{BVerbatim}
+$\begin{bNiceArray}{CCC|C}[margin]
+\Block{3-3}{A} & & & 0 \\
+& \hspace*{1cm} & & \Vdots \\
+& & & 0 \\
+\hline
+0 & \Cdots& 0 & 0
+\end{bNiceArray}$
\bigskip
+On peut souhaiter agrandir la taille du «$A$» placé dans le bloc de l'exemple précédent. Comme il est composé en
+mode mathématique, on ne peut pas directement utiliser une commande comme |\large|, |\Large| ou |\LARGE|. C'est
+pourquoi une option à mettre entre chevrons est proposée par |\Block| pour spécifier du code LaTeX qui sera inséré
+\emph{avant} le début du mode mathématique.
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+$\begin{bNiceArray}{CCC|C}[margin]
+\Block{3-3}~emphase#<\LARGE>@{A} & & & 0 \\
+& \hspace*{1cm} & & \Vdots \\
+& & & 0 \\
+\hline
+0 & \Cdots& 0 & 0
+\end{bNiceArray}$
+\end{BVerbatim}
+$\begin{bNiceArray}{CCC|C}[margin]
+\Block{3-3}<\LARGE>{A} & & & 0 \\
+& \hspace*{1cm} & & \Vdots \\
+& & & 0 \\
+\hline
+0 & \Cdots& 0 & 0
+\end{bNiceArray}$
+
+
+\section{Les filets horizontaux et verticaux}
+
+Les techniques habituelles pour tracer des filets peuvent être utilisées dans les environnements de
+\pkg{nicematrix}, à l'exception de |\vline|.
+
+\subsection{L'épaisseur et la couleur des filets}
+
+Les environnements de \pkg{nicematrix} proposent une clé |rules/width| pour fixer la largeur (en fait l'épaisseur)
+des filets dans l'environnement. En fait, cette clé ne fait que fixer la valeur de |\arrayrulewidth|.
+
+\smallskip
+On sait que \pkg{colortbl} propose la commande |\arrayrulecolor| pour spécifier la couleur de ces filets.
+
+\smallskip
+Avec \pkg{nicematrix}, il est possible de spécifier une couleur même si \pkg{colortbl} n'est pas chargé. Par souci
+de compatibilité, la commande est nommée également |\arrayrulecolor|. Les environnements de \pkg{nicematrix}
+proposent également une clé |rules/color| qui permet de fixer cette couleur pour l'environnement en question.
+
+\medskip
\begin{scope}
-\NiceMatrixOptions{transparent}
-\begin{minipage}{10cm}
-Maintenant, si nous utilisons l'extension \pkg{nicematrix} avec l'option |transparent|, le même code va donner le
-résultat ci-contre à droite.
-\end{minipage}\hspace{1cm}
-$A = \begin{pmatrix}
-1 & \cdots & \cdots & 1 \\
-0 & \ddots & & \vdots \\
-\vdots & \ddots & \ddots & \vdots \\
-0 & \cdots & 0 & 1
-\end{pmatrix}$
+\hfuzz=10cm
+\begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
+\begin{NiceTabular}{|CCC|}[~emphase#rules/color=[gray]{0.9},rules/width=1pt@]
+\hline
+rose & tulipe & lys \\
+arum & iris & violette \\
+muguet & dahlia & souci \\
+\hline
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{|CCC|}[rules/color=[gray]{0.9},rules/width=1pt]
+\hline
+rose & tulipe & lys \\
+arum & iris & violette \\
+muguet & dahlia & souci \\
+\hline
+\end{NiceTabular}
\end{scope}
+\medskip
+Si on veut définir de nouveaux spécificateurs de colonnes pour des filets (par exemple plus épais ou bien d'une
+couleur spécifique), on aura peut-être intérêt à utiliser la commande |\OnlyMainNiceMatrix| décrite p.~\pageref{OnlyMainNiceMatrix}.
+
+\bigskip
+\subsection{Une remarque concernant \textbackslash cline}
-\section{Les environnements de cette extension}
+\label{remark-cline}
-L'extension \pkg{nicematrix} définit les nouveaux environnements suivants :
+Les traits verticaux et horizontaux que l'on insère avec |\hline| et le spécificateur de colonne «\verb+|+» de
+\pkg{array} rendent le tableau plus large ou plus long d'une quantité égale à la largeur du trait.
+
+\smallskip
+Pour des raisons historiques, il n'en est pas de même pour la commande |\cline|, comme on peut le voir avec
+l'exemple suivant.
\medskip
-\begin{ttfamily}
-\setlength{\tabcolsep}{3mm}
-\begin{tabular}{llll}
-\{NiceMatrix\} & \{NiceArray\} & \{NiceTabular\} \\
-\{pNiceMatrix\} & \{pNiceArray\} \\
-\{bNiceMatrix\} & \{bNiceArray\} \\
-\{BNiceMatrix\} & \{BNiceArray\} \\
-\{vNiceMatrix\} & \{vNiceArray\} \\
-\{VNiceMatrix\} & \{VNiceArray\} \\
- & \{NiceArrayWithDelims\}
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+\setlength{\arrayrulewidth}{2pt}
+\begin{tabular}{cccc} \hline
+A&B&C&D \\ ~emphase#\cline{2-2}@
+A&B&C&D \\ \hline
\end{tabular}
-\end{ttfamily}
+\end{BVerbatim}
+%
+\begin{scope}
+\setlength{\arrayrulewidth}{2pt}
+\begin{tabular}[c]{cccc}
+\hline
+A&B&C&D \\
+\cline{2-2}
+A&B&C&D \\
+\hline
+\end{tabular}
+\end{scope}
+
+\medskip
+Dans les environnements de \pkg{nicematrix}, cette situation est corrigée (il est néanmoins possible de revenir au
+comportement par défaut de |\cline| avec la clé |standard-cline|).
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+\setlength{\arrayrulewidth}{2pt}
+\begin{NiceTabular}{CCCC} \hline
+A&B&C&D \\ ~emphase#\cline{2-2}@
+A&B&C&D \\ \hline
+\end{NiceTabular}
+\end{BVerbatim}
+%
+\begin{scope}
+\setlength{\arrayrulewidth}{2pt}
+\begin{NiceTabular}[c]{CCCC}
+\hline
+A&B&C&D \\
+\cline{2-2}
+A&B&C&D \\
+\hline
+\end{NiceTabular}
+\end{scope}
+
+
+\bigskip
+\subsection{Les clés hlines et vlines}
+
+La clé |hlines| demande un tracé de tous les filets horizontaux et la clé |vlines| demande un tracé de tous les
+filets verticaux. En fait, dans les environnements avec délimiteurs (comme |{pNiceMatrix}| ou |{bNiceArray}|), les
+filets extérieurs ne sont pas tracés (ce qui est le comportement certainement attendu).
\medskip
-Par défaut, les environnements |{NiceMatrix}|, |{pNiceMatrix}|, |{bNiceMatrix}|, |{BNiceMatrix}|, |{vNiceMatrix}|
-et |{VNiceMatrix}| se comportent quasiment comme les environnements correspondants de \pkg{amsmath} : |{matrix}|,
-|{pmatrix}|, |{bmatrix}|, |{Bmatrix}|, |{vmatrix}| et |{Vmatrix}|.
+\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+$\begin{pNiceMatrix}[~emphase#vlines@,rules/width=0.2pt]
+1 & 2 & 3 & 4 & 5 & 6 \\
+1 & 2 & 3 & 4 & 5 & 6 \\
+1 & 2 & 3 & 4 & 5 & 6
+\end{pNiceMatrix}$
+\end{BVerbatim}
+$\begin{pNiceMatrix}[vlines,rules/width=0.2pt]
+1 & 2 & 3 & 4 & 5 & 6 \\
+1 & 2 & 3 & 4 & 5 & 6 \\
+1 & 2 & 3 & 4 & 5 & 6
+\end{pNiceMatrix}$
+\bigskip
+Il y a néanmoins une différence entre l'utilisation de l'option |vlines| et du spécificateur «\verb+|+» dans le
+préambule de l'environnement : les filets tracés par |vlines| traversent les double-filets horizontaux tracés par
+|\hline\hline| (il n'y a pas besoin d'utiliser \pkg{hhline}).
+
\medskip
-Les environnements |{NiceArray}| et |{NiceTabular}| sont similaires aux environnements |{array}| et |{tabular}| de
-l'extension |{array}|. Néanmoins, pour des raisons techniques, dans le préambule de ces environnements,
-l'utilisateur doit utiliser les lettres |L|, |C| et~|R| au lieu de |l|, |c| et |r|. Il est possible d'utiliser les
-constructions |p{...}|, |m{...}|, |b{...}|, |w{...}{...}|, |W{...}{...}|, \verb+|+, |>{...}|, |<{...}|, |@{...}|,
-|!{...}| et |*{n}{...}|.
+\begin{BVerbatim}[baseline=c,boxwidth=11.5cm]
+$\begin{NiceMatrix}[~emphase#vlines@] \hline
+a & b & c & d \\ \hline \hline
+1 & 2 & 3 & 4 \\
+1 & 2 & 3 & 4 \\ \hline
+\end{NiceMatrix}$
+\end{BVerbatim}
+%
+$\begin{NiceMatrix}[vlines]
+\hline
+a & b & c & d \\
+\hline \hline
+1 & 2 & 3 & 4 \\
+1 & 2 & 3 & 4 \\
+\hline
+\end{NiceMatrix}$
+
+
+\bigskip
+Si vous utilisez \pkg{booktabs} (qui fournit |\toprule|, |\midrule|, |\bottomrule|, etc.) et que vous tenez
+absolument à mettre des filets verticaux (ce qui est contraire à l'esprit à \pkg{booktabs}), sachez que la clé
+|vlines| est compatible avec \pkg{booktabs}.
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=11.5cm]
+$\begin{NiceMatrix}[~emphase#vlines@] \toprule
+a & b & c & d \\ \midrule
+1 & 2 & 3 & 4 \\
+1 & 2 & 3 & 4 \\ \bottomrule
+\end{NiceMatrix}$
+\end{BVerbatim}
+%
+$\begin{NiceMatrix}[vlines]
+\toprule
+a & b & c & d \\
+\midrule
+1 & 2 & 3 & 4 \\
+1 & 2 & 3 & 4 \\
+\bottomrule
+\end{NiceMatrix}$
+
+
+\subsection{La clé hvlines}
+\label{hvlines}
+
+La clé |hvlines| demande le tracé de tous les filets horizontaux et verticaux \emph{sauf dans les
+ blocs}.\footnote{En fait, quand la clé |hvlines| est utilisée, les filets ne sont pas non plus tracés dans les blocs virtuels
+ délimités par des cases reliées par des lignes pointillées (cf. p. \pageref{dotted-and-hvlines}).}
+
+\medskip
+\begin{Verbatim}
+\begin{NiceTabular}{CCCC}[~emphase#hvlines@,rules/color=blue,rules/width=1pt]
+rose & tulipe & marguerite & dahlia \\
+violette & \Block{2-2}{\LARGE\color{blue} fleurs} & & souci \\
+pervenche & & & lys \\
+arum & iris & jacinthe & muguet
+\end{NiceTabular}
+\end{Verbatim}
+%
+\begin{center}
+\begin{NiceTabular}{CCCC}[hvlines,rules/color=blue,rules/width=1pt]
+rose & tulipe & marguerite & dahlia \\
+violette & \Block{2-2}{\LARGE\color{blue} fleurs} & & souci \\
+pervenche & & & lys \\
+arum & iris & jacinthe & muguet
+\end{NiceTabular}
+\end{center}
+
+
+
+\subsection{La commande \textbackslash diagbox}
+
+La commande |\diagbox| (inspirée par l'extension \pkg{diagbox}) permet, quand elle est utilisée dans une case, de
+couper cette case selon une diagonale descendante.\footnote{L'auteur de ce document considère que ce type de
+ construction est un piètre choix graphique.}
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+$\begin{NiceArray}{*{5}{C}}[hvlines]
+~emphase#\diagbox{x}{y}@ & e & a & b & c \\
+e & e & a & b & c \\
+a & a & e & c & b \\
+b & b & c & e & a \\
+c & c & b & a & e
+\end{NiceArray}$
+\end{BVerbatim}
+$\begin{NiceArray}{*{5}{C}}[hvlines]
+\diagbox{x}{y} & e & a & b & c \\
+e & e & a & b & c \\
+a & a & e & c & b \\
+b & b & c & e & a \\
+c & c & b & a & e
+\end{NiceArray}$
+
+
+
+
+
+\subsection{Filets en pointillés}
+
+
+Dans les environnements de \pkg{nicematrix}, il est possible d'utiliser la commande |\hdottedline| (fournie
+par \pkg{nicematrix}) qui est l'équivalent pour les pointillés des commandes |\hline| et |\hdashline|
+(cette dernière étant une commande de \pkg{arydshln}).
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
+\begin{pNiceMatrix}
+1 & 2 & 3 & 4 & 5 \\
+~emphase#\hdottedline@
+6 & 7 & 8 & 9 & 10 \\
+11 & 12 & 13 & 14 & 15
+\end{pNiceMatrix}
+\end{BVerbatim}
+$\begin{pNiceMatrix}
+1 & 2 & 3 & 4 & 5 \\
+\hdottedline
+6 & 7 & 8 & 9 & 10 \\
+11 & 12 & 13 & 14 & 15
+\end{pNiceMatrix}$
+
+
+\bigskip
+Dans les environnements avec un préambule explicite (comme |{NiceTabular}|, |{NiceArray}|, etc.), il est possible
+de dessiner un trait vertical en pointillés avec le spécificateur «|:|».
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
+\begin{pNiceArray}{CCCC~emphase#:@C}
+1 & 2 & 3 & 4 & 5 \\
+6 & 7 & 8 & 9 & 10 \\
+11 & 12 & 13 & 14 & 15
+\end{pNiceArray}
+\end{BVerbatim}
+$\begin{pNiceArray}{CCCC:C}
+1 & 2 & 3 & 4 & 5 \\
+6 & 7 & 8 & 9 & 10 \\
+11 & 12 & 13 & 14 & 15
+\end{pNiceArray}$
+
+\bigskip
+Il est possible de changer dans \pkg{nicematrix} la lettre utilisée pour indiquer dans le préambule un trait
+vertical en pointillés avec l'option |letter-for-dotted-lines| disponible dans |\NiceMatrixOptions|.
+
+
+\bigskip
+\emph{Remarque} : Quand l'extension \pkg{array} (sur laquelle s'appuie \pkg{nicematrix}) est chargée, les traits
+verticaux et horizontaux que l'on insère rendent le tableau plus large ou plus long d'une quantité égale à la
+largeur du trait\footnote{En fait, cela est vrai pour |\hline| et «\verb+|+» mais pas pour |\cline|.}. Avec
+\pkg{nicematrix}, les lignes en pointillés tracées par |\hdottedline| et «|:|» ont le même effet.
+
+
+
+
+\section{Les couleurs des rangées et des colonnes}
+
+L'extension \pkg{colortbl} permet de colorier des cases, des rangées ou des colonnes d'un tableau. Néanmoins,
+l'affichage du \textsc{pdf} résultant n'est pas toujours parfait, en particulier quand on utilise également des
+filets. Dans certains lecteurs de \textsc{pdf}, des filets verticaux semblent disparaître. De fines lignes blanches
+peuvent également apparaître.
+
+\medskip
+L'extension \pkg{nicematrix} propose des outils similaires qui ne présentent pas ces inconvénients. Elle propose
+une clé |code-before|\footnote{Il existe aussi une clé |code-after| : cf. p.~\pageref{code-after}.} pour du code
+qui sera exécuté \emph{avant} le tracé du tableau. Dans ce |code-before|, de nouvelles commandes sont disponibles :
+|\cellcolor|, |\rectanglecolor|, |\rowcolor|, |\columncolor|, |\rowcolors| et |\chessboardcolors|.
+\label{code-before}
+
+\medskip
+Ces outils sont indépendants de \pkg{colortbl}.\footnote{On peut donc colorier les filets, les cellules, les
+ rangées, les colonnes, etc. sans charger \pkg{colortbl}. Le présent document ne charge pas \pkg{colortbl}.}
+
+\medskip
+Toutes ces commandes acceptent un argument optionnel (entre crochets et en première position) qui est le modèle
+colorimétrique pour la spécification des couleurs.
+
+\medskip
+\begin{itemize}
+\item La commande |\cellcolor| tient son nom de la commande |\cellcolor| de \pkg{colortbl}.
+
+Elle prend en arguments obligatoires une couleur et une liste de cases sous le format $i$-$j$ où $i$ est le
+numéro de ligne et $j$ le numéro de colonne.
+
+\medskip
+\begin{scope}
+\hfuzz=10cm
+\begin{BVerbatim}[boxwidth=10cm,baseline=c]
+\begin{NiceTabular}{|C|C|C|}[code-before = ~emphase#\cellcolor{red!15}{3-1,2-2,1-3}@]
+\hline
+a & b & c \\ \hline
+e & f & g \\ \hline
+h & i & j \\ \hline
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{|C|C|C|}[code-before = \cellcolor{red!15}{3-1,2-2,1-3}]
+\hline
+a & b & c \\ \hline
+e & f & g \\ \hline
+h & i & j \\ \hline
+\end{NiceTabular}
+\end{scope}
+
+\bigskip
+\item La commande |\rectanglecolor| prend trois arguments obligatoires. Le premier est la couleur, les deux
+suivants fournissent la case en haut à gauche et la case en bas à droite du rectangle.
+
+\medskip
+\begin{scope}
+\hfuzz=10cm
+\begin{BVerbatim}[boxwidth=10cm,baseline=c]
+\begin{NiceTabular}{|C|C|C|}[code-before = ~emphase#\rectanglecolor{blue!15}{2-2}{3-3}@]
+\hline
+a & b & c \\ \hline
+e & f & g \\ \hline
+h & i & j \\ \hline
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{|C|C|C|}[code-before = \rectanglecolor{blue!15}{2-2}{3-3}]
+\hline
+a & b & c \\ \hline
+e & f & g \\ \hline
+h & i & j \\ \hline
+\end{NiceTabular}
+\end{scope}
+
+
+
+\bigskip
+\item La commande |\rowcolor| doit son nom à la commande |\rowcolor| de \pkg{colortbl}. Son premier argument
+obligatoire est la couleur et le deuxième est une liste de numéros de rangées ou bien d'intervalles de rangées sous
+la forme $a$-$b$ (un intervalle de la forme $a$- représente toutes les rangées à partir de la rangée~$a$).
+
+\medskip
+
+\begin{scope}
+\hfuzz=10cm
+\begin{BVerbatim}[boxwidth=9cm,baseline=c]
+$\begin{NiceArray}{LLL}[hvlines, ~emphase#code-before = \rowcolor{red!15}{1,3-5,8-}@]
+a_1 & b_1 & c_1 \\
+a_2 & b_2 & c_2 \\
+a_3 & b_3 & c_3 \\
+a_4 & b_4 & c_4 \\
+a_5 & b_5 & c_5 \\
+a_6 & b_6 & c_6 \\
+a_7 & b_7 & c_7 \\
+a_8 & b_8 & c_8 \\
+a_9 & b_9 & c_9 \\
+a_{10} & b_{10} & c_{10} \\
+\end{NiceArray}$
+\end{BVerbatim}
+%
+$\begin{NiceArray}{LLL}%
+[baseline=4,hvlines, code-before = \rowcolor{red!15}{1,3-5,8-}]
+a_1 & b_1 & c_1 \\
+a_2 & b_2 & c_2 \\
+a_3 & b_3 & c_3 \\
+a_4 & b_4 & c_4 \\
+a_5 & b_5 & c_5 \\
+a_6 & b_6 & c_6 \\
+a_7 & b_7 & c_7 \\
+a_8 & b_8 & c_8 \\
+a_9 & b_9 & c_9 \\
+a_{10} & b_{10} & c_{10} \\
+\end{NiceArray}$
+\end{scope}
+
+
+\bigskip
+\item La commande |\columncolor| doit son nom à la commande |\columncolor| de \pkg{colortbl}. Sa syntaxe est
+similaire à celle de |\rowcolor|.
+
+\bigskip
+\item La commande |\rowcolors| (avec un \emph{s}) doit son nom à la commande |\rowcolors| de
+\pkg{xcolor}\footnote{La commande |\rowcolors| de \pkg{xcolor} est disponible quand \pkg{xcolor} est chargé avec
+ l'option |table|.}. Le \emph{s} rappelle qu'il y a deux couleurs. Elle colorie alternativement les rangées avec
+les deux couleurs à partir de la rangée dont le numéro est donné en premier argument (obligatoire).
+
+\medskip
+\begin{scope}
+\hfuzz=10cm
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+\begin{NiceTabular}{LR}[hlines,code-before = ~emphase#\rowcolors{1}{blue!10}{}@]
+Pierre & 12 \\
+Jacques & 8 \\
+Stéphanie & 18 \\
+Amélie & 20 \\
+Henri & 14 \\
+Estelle & 15
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{LR}[hlines,code-before = \rowcolors{1}{blue!10}{},baseline=3]
+Pierre & 12 \\
+Jacques & 8 \\
+Stéphanie & 18 \\
+Amélie & 20 \\
+Henri & 14 \\
+Estelle & 15
+\end{NiceTabular}
+\end{scope}
+
+
+
+\bigskip
+\item La commande |\chessboardcolors| prend en arguments obligatoires deux couleurs et colorie les cases en
+quinconces avec les deux couleurs.
+
+\medskip
+\begin{scope}
+\hfuzz=10cm
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+$\begin{pNiceMatrix}[R,margin, ~emphase#code-before=\chessboardcolors{red!15}{blue!15}@]
+1 & -1 & 1 \\
+-1 & 1 & -1 \\
+1 & -1 & 1
+\end{pNiceMatrix}$
+\end{BVerbatim}
+$\begin{pNiceMatrix}%
+[baseline=1, R, margin, code-before = \chessboardcolors{red!15}{blue!15}]
+1 & -1 & 1 \\
+-1 & 1 & -1 \\
+1 & -1 & 1
+\end{pNiceMatrix}$
+\end{scope}
+
+\medskip
+On a utilisé la clé |R| qui impose que toutes les colonnes soient alignées à droite (cf. p.~\pageref{key-R}).
+\end{itemize}
+
+\bigskip
+On remarquera que ces commandes sont compatibles avec les commandes de \pkg{booktabs} (|\toprule|, |\midrule|,
+|\bottomrule|, etc).
+
+\medskip
+\begin{scope}
+\hfuzz=10cm
+\begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
+\begin{NiceTabular}{LSSSS}%
+[code-before = \rowcolor{red!15}{1-2} \rowcolors{3}{blue!15}{}]
+~emphase#\toprule@
+\Block{2-1}{Produit} \\
+\Block{1-3}{dimensions (cm)} & & &
+\Block{2-1}{\rotate Prix} \\
+~emphase#\cmidrule(rl){2-4}@
+ & L & l & h \\
+~emphase#\midrule@
+petit & 3 & 5.5 & 1 & 30 \\
+moyen & 5.5 & 8 & 1.5 & 50.5 \\
+premium & 8.5 & 10.5 & 2 & 80 \\
+extra & 8.5 & 10 & 1.5 & 85.5 \\
+spécial & 12 & 12 & 0.5 & 70 \\
+~emphase#\bottomrule@
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}[c]{LSSSS}%
+[code-before = \rowcolor{red!15}{1-2} \rowcolors{3}{blue!15}{}]
+\toprule
+\Block{2-1}{Produit} &
+\Block{1-3}{dimensions (cm)} & & &
+\Block{2-1}{\rotate Prix} \\
+\cmidrule(rl){2-4}
+ & L & l & h \\
+\midrule
+petit & 3 & 5.5 & 1 & 30 \\
+moyen & 5.5 & 8 & 1.5 & 50.5 \\
+premium & 8.5 & 10.5 & 2 & 80 \\
+extra & 8.5 & 10 & 1.5 & 85.5 \\
+spécial & 12 & 12 & 0.5 & 70 \\
+\bottomrule
+\end{NiceTabular}
+\end{scope}
+
+\medskip
+On a utilisé le type de colonne |S| de \pkg{siunitx}.
+
+
+\section{La largeur des colonnes}
+\label{width}
+
+Dans les environnements avec un préambule explicite (comme |{NiceTabular}|, |{NiceArray}|, etc.), il est possible
+de fixer la largeur d'une colonne avec les lettres classiques |w| et |W| de l'extension \pkg{array}. Dans
+|{NiceTabular}|, les cases des colonnes de ce type sont composées en mode texte mais, dans |{NiceArray}|,
+|{pNiceArray}|, etc., elles sont composées en mode mathématique (alors que dans |{array}| de \pkg{array}, elles
+sont composées en mode texte).
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=9cm]
+\begin{NiceTabular}{~emphase#Wc{2cm}@CC}[hvlines]
+Paris & New York & Madrid \\
+Berlin & London & Roma \\
+Rio & Tokyo & Oslo
+\end{NiceTabular}
+\end{BVerbatim}
+\begin{NiceTabular}{Wc{2cm}CC}[hvlines]
+Paris & New York & Madrid \\
+Berlin & London & Roma \\
+Rio & Tokyo & Oslo
+\end{NiceTabular}
+
+
+\bigskip
+Dans les environnements de \pkg{nicematrix}, il est aussi possible de fixer la largeur \emph{minimale} de toutes
+les colonnes de la matrice directement avec l'option |columns-width|.
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+$\begin{pNiceMatrix}[~emphase#columns-width = 1cm@]
+1 & 12 & -123 \\
+12 & 0 & 0 \\
+4 & 1 & 2
+\end{pNiceMatrix}$
+\end{BVerbatim}
+$\begin{pNiceMatrix}[columns-width = 1cm]
+1 & 12 & -123 \\
+12 & 0 & 0 \\
+4 & 1 & 2
+\end{pNiceMatrix}$
+
+\medskip
+Notez que l'espace inséré entre deux colonnes (égal à 2 |\tabcolsep| dans |{NiceTabular}| et à 2 |\arraycolsep|
+dans les autres environnements) n'est pas supprimé (il est évidemment possible de le supprimer en mettant
+|\tabcolsep| ou |\arraycolsep| à~$0$ avant).
+
+\bigskip
+Il est possible de donner la valeur spéciale |auto| à l'option |columns-width|: toutes les colonnes du tableau
+auront alors une largeur égale à la largeur de la case la plus large du tableau.\footnote{Le résultat est atteint
+ dès la première compilation (mais Tikz écrivant des informations dans le fichier |.aux|, un message demandant une
+ deuxième compilation apparaîtra).}\par\nobreak
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+$\begin{pNiceMatrix}[~emphase#columns-width = auto@]
+1 & 12 & -123 \\
+12 & 0 & 0 \\
+4 & 1 & 2
+\end{pNiceMatrix}$
+\end{BVerbatim}
+$\begin{pNiceMatrix}[columns-width = auto]
+1 & 12 & -123 \\
+12 & 0 & 0 \\
+4 & 1 & 2
+\end{pNiceMatrix}$
+
+\bigskip
+Sans surprise, il est possible de fixer la largeur minimale de toutes les colonnes de toutes les matrices dans une
+certaine portion de document avec la commande |\NiceMatrixOptions|.\par\nobreak
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
+~emphase#\NiceMatrixOptions{columns-width=10mm}@
+$\begin{pNiceMatrix}
+a & b \\ c & d
+\end{pNiceMatrix}
+=
+\begin{pNiceMatrix}
+1 & 1245 \\ 345 & 2
+\end{pNiceMatrix}$
+\end{BVerbatim}
+\begin{scope}
+\NiceMatrixOptions{columns-width=10mm}
+$\begin{pNiceMatrix}
+a & b \\
+c & d
+\end{pNiceMatrix}
+=
+\begin{pNiceMatrix}
+1 & 1245 \\
+345 & 2
+\end{pNiceMatrix}$
+\end{scope}
+
+
+\bigskip
+Mais il est aussi possible de fixer une zone dans laquelle toutes les matrices auront leurs colonnes de la même
+largeur, égale à la largeur de la case la plus large de toutes les matrices de la zone. Cette construction utilise
+l'environnement |{NiceMatrixBlock}| avec l'option |auto-columns-width|\footnote{Pour le moment, c'est le seul
+ usage de l'environnement |{NiceMatrixBlock}| mais il pourrait y en avoir davantage dans le futur.}.
+L'environnement |{NiceMatrixBlock}| n'a pas de rapport direct avec la commande |\Block| présentée précédemment dans
+ce document (cf.~p.~\pageref{Block}).
+
+\medskip
+\begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
+~emphase#\begin{NiceMatrixBlock}[auto-columns-width]@
+$\begin{array}{c}
+\begin{bNiceMatrix}
+ 9 & 17 \\ -2 & 5
+ \end{bNiceMatrix} \\ \\
+\begin{bNiceMatrix}
+ 1 & 1245345 \\ 345 & 2
+\end{bNiceMatrix}
+\end{array}$
+~emphase#\end{NiceMatrixBlock}@
+\end{BVerbatim}
+\begin{NiceMatrixBlock}[auto-columns-width]
+$\begin{array}{c}
+\begin{bNiceMatrix}
+ 9 & 17 \\ -2 & 5
+ \end{bNiceMatrix} \\ \\
+\begin{bNiceMatrix}
+ 1 & 1245345 \\ 345 & 2
+\end{bNiceMatrix}
+\end{array}$
+\end{NiceMatrixBlock}
+
+\medskip
+\textbf{Plusieurs compilations peuvent être nécessaires pour obtenir le résultat désiré.}
+
+
+
+\bigskip
+\section{Les rangées et colonnes extérieures}
+Les environnements de \pkg{nicematrix} permettent de composer des rangées et des colonnes «extérieures» grâce aux options
+|first-row|, |last-row|, |first-col| et |last-col|.
+\label{exterior}
+
+Si elle est présente, la «première rangée» (extérieure) est numérotée par $0$ (et non $1$). Il en est de même pour
+la «première colonne».
+
+\begin{Verbatim}
+$\begin{pNiceMatrix}[~emphase#first-row,last-row,first-col,last-col@,nullify-dots]
+ & C_1 & \Cdots & & C_4 & \\
+L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
+\Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
+ & a_{31} & a_{32} & a_{33} & a_{34} & \\
+L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
+ & C_1 & \Cdots & & C_4 &
+\end{pNiceMatrix}$
+\end{Verbatim}
+%
+\[\begin{pNiceMatrix}[first-row,last-row,first-col,last-col,nullify-dots]
+ & C_1 & \Cdots & & C_4 & \\
+L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
+\Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
+ & a_{31} & a_{32} & a_{33} & a_{34} & \\
+L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
+ & C_1 & \Cdots & & C_4 &
+\end{pNiceMatrix}\]
+
+\medskip
+Les lignes pointillées ont été tracées avec les outils présentés p.~\pageref{Cdots}.
+
+
+\bigskip
+Il y a plusieurs remarques à formuler.
+%
+\begin{itemize}[beginpenalty=10000]
+\item Si on utilise un environnement avec préambule explicite (c'est-à-dire |{NiceArray}| ou l'une de ses
+variantes), on ne doit pas mettre dans ce préambule de spécification de colonne pour les éventuelles première et
+dernière colonne : ce sera automatiquement (et nécessairement) une colonne |R| pour la première colonne et une
+colonne |L| pour la dernière.
+
+\item On peut se demander comment \pkg{nicematrix} détermine le nombre de rangées et de colonnes nécessaires à la
+composition de la «dernière rangée» et de la «dernière colonne».
+
+\begin{itemize}
+\item Dans le cas d'un environnement avec préambule, comme |{NiceTabular}| ou |{pNiceArray}|, le nombre de colonnes
+se déduit évidemment du préambule.
+
+\item Dans le cas où l'option |light-syntax| (cf. p. \pageref{light-syntax}) est utilisée, \pkg{nicematrix} profite
+du fait que cette option nécessite de toutes manières le chargement complet du contenu de l'environnement (d'où
+l'impossibilité de mettre du verbatim dans ce cas-là) avant composition du tableau. L'analyse du contenu de
+l'environnement donne le nombre de rangées (mais pas le nombre de colonnes).
+
+\item Dans les autres cas, \pkg{nicematrix} détermine le nombre de rangées et de colonnes à la première compilation
+et l'écrit dans le fichier |.aux| pour pouvoir l'utiliser à la compilation suivante.
+
+\textsl{Néanmoins, il est possible de donner le numéro de la dernière rangée et le numéro de la dernière colonne en
+arguments des options |last-row| et |last-col|, ce qui permettra d'accélérer le processus complet de
+compilation.} C'est ce que nous ferons dans la suite.
+\end{itemize}
+
+\end{itemize}
+
+
+
+\bigskip
+On peut contrôler l'apparence de ces rangées et colonnes avec les options |code-for-first-row|,
+|code-for-last-row|, |code-for-first-col| et |code-for-last-col|. Ces options sont des listes de tokens qui seront
+insérées au début de chaque case de la rangée ou de la colonne considérée.
+
+\begin{Verbatim}
+\NiceMatrixOptions{~emphase#code-for-first-row@ = \color{red},
+ ~emphase#code-for-first-col@ = \color{blue},
+ ~emphase#code-for-last-row@ = \color{green},
+ ~emphase#code-for-last-col@ = \color{magenta}}
+$\begin{pNiceArray}{CC|CC}[first-row,last-row=6,first-col,last-col,nullify-dots]
+ & C_1 & \Cdots & & C_4 & \\
+L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
+\Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
+\hline
+ & a_{31} & a_{32} & a_{33} & a_{34} & \\
+L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
+ & C_1 & \Cdots & & C_4 &
+\end{pNiceArray}$
+\end{Verbatim}
+%
+\begin{scope}
+\NiceMatrixOptions{code-for-first-row = \color{red},
+ code-for-first-col = \color{blue},
+ code-for-last-row = \color{green},
+ code-for-last-col = \color{magenta}}
+\begin{displaymath}
+\begin{pNiceArray}{CC|CC}[first-row,last-row=5,first-col,last-col,nullify-dots]
+ & C_1 & \multicolumn1C{\Cdots} & & C_4 & \\
+L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
+\Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
+\hline
+ & a_{31} & a_{32} & a_{33} & a_{34} & \\
+L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
+ & C_1 & \multicolumn1C{\Cdots} & & C_4 &
+\end{pNiceArray}
+\end{displaymath}
+\end{scope}
+
+
+
+\emph{Remarques}
+\begin{itemize}[beginpenalty=10000]
+\item Comme on peut le voir dans l'exemple précédent, les filets horizontaux et verticaux ne s'étendent pas dans
+les rangées et colonnes extérieures.
+
+Néanmoins, si on veut définir de nouveaux spécificateurs de colonnes pour des filets (par exemple plus épais), on
+aura sans doute intérêt à utiliser la commande |\OnlyMainNiceMatrix| décrite p.~\pageref{OnlyMainNiceMatrix}.
+\item Une spécification de couleur présente dans |code-for-first-row| s'applique à une ligne pointillée tracée
+dans cette «première rangée» (sauf si une valeur a été donnée à |xdots/color|). Idem pour les autres.
+\item Sans surprise, une éventuelle option |columns-width| (décrite p.~\pageref{width}) ne s'applique pas à la
+«première colonne» ni à la «dernière colonne».
+\item Pour des raisons techniques, il n'est pas possible d'utiliser l'option de la commande |\\| après la
+«première rangée» ou avant la «dernière rangée» (le placement des délimiteurs serait erroné).
+\end{itemize}
+
+
-Voir p.~\pageref{NiceArray} la partie concernant |{NiceArray}| et |{NiceTabular}|.
\section{Les lignes en pointillés continues}
+\label{Cdots}
+
À l'intérieur des environnements de l'extension \pkg{nicematrix}, de nouvelles commandes sont définies : |\Ldots|,
|\Cdots|, |\Vdots|, |\Ddots|, et |\Iddots|. Ces commandes sont conçues pour être utilisées à la place de |\dots|,
|\cdots|, |\vdots|, |\ddots| et |\iddots|.\footnote{La commande |\iddots|, définie dans \pkg{nicematrix}, est une
@@ -416,8 +1392,6 @@ x & \Ldots & & & & x
L'option |nullify-dots| «smashe» les instructions |\Ldots| (et ses variantes) horizontalement mais aussi
verticalement.
-\medskip
-{\bfseries Il doit n'y avoir aucun espace devant le crochet ouvrant (|[|) des options de l'environnement.}
\subsection{La commande \textbackslash Hdotsfor}
@@ -636,225 +1610,51 @@ b & a & b & \Ddots & & \Vdots \\
\end{pNiceMatrix}\]
-\section{Les nœuds PGF-Tikz créés par l'extension nicematrix}
+\subsection{Les lignes pointillées et la clé hvlines}
-\label{name}
+\label{dotted-and-hvlines}
-L'extension \pkg{nicematrix} crée un nœud PGF-Tikz pour chaque case (non vide) du tableau considéré. Ces nœuds sont
-utilisés pour tracer les lignes en pointillés entre les cases du tableau. Toutefois, l'utilisateur peut aussi
-utiliser directement ces nœuds (s'il a chargé Tikz\footnote{On rappelle que depuis la version 3.13,
- \pkg{nicematrix} ne charge plus Tikz par défaut, mais seulement \textsc{pgf} (Tikz est une surcouche de
- \textsc{pgf}).}). On commence par donner un nom au tableau (avec l'option |name|). Cela étant fait, les nœuds
-sont accessibles à travers les noms «\textsl{nom}-$i$-$j$» où \textsl{nom} est le nom donné au tableau et $i$ et
-$j$ les numéros de rangée et de colonne de la case considérée.
+On a dit (cf. p. \pageref{hvlines}) que la clé |hvlines| trace tous les filets horizontaux et verticaux, exceptés
+dans les blocs. En fait, avec cette clé, les filets ne sont pas non plus tracés dans les blocs virtuels délimités
+par des cases reliées par des lignes pointillées.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=11cm]
-$\begin{pNiceMatrix}[name=~emphase#ma-matrice@]
-1 & 2 & 3 \\
-4 & 5 & 6 \\
-7 & 8 & 9
+\NiceMatrixOptions{nullify-dots}
+$\begin{pNiceMatrix}[rules/color=gray,~emphase#hvlines@,margin]
+0 & \Cdots & & & & 0 \\
+1 & \Cdots & & & 1 & 2 \\
+0 & \Ddots & & & \Vdots & \Vdots \\
+\Vdots & \Ddots & & & & \\
+ & & & & & \\
+0 & \Cdots & & 0 & 1 & 2 \\
\end{pNiceMatrix}$
-\tikz[remember picture,overlay]
- \draw ~emphase#(ma-matrice-2-2)@ circle (2mm) ;
\end{BVerbatim}
-$\begin{pNiceMatrix}[name=ma-matrice]
-1 & 2 & 3 \\
-4 & 5 & 6 \\
-7 & 8 & 9
+\begin{scope}
+\NiceMatrixOptions{nullify-dots}
+$\begin{pNiceMatrix}[rules/color=gray,hvlines,margin]
+0 & \Cdots & & & & 0 \\
+1 & \Cdots & & & 1 & 2 \\
+0 & \Ddots & & & \Vdots & \Vdots \\
+\Vdots & \Ddots & & & & \\
+ & & & & & \\
+0 & \Cdots & & 0 & 1 & 2 \\
\end{pNiceMatrix}$
-\tikz[remember picture,overlay]
- \draw (ma-matrice-2-2) circle (2mm) ;
-
-\medskip
-Ne pas oublier les options |remember picture| et |overlay|.
-
-\bigskip
-Dans l'exemple suivant, nous avons surligné toutes les cases de la matrice.
-\[\begin{pNiceMatrix}
-a & a + b & a + b + c \\
-a & a & a + b \\
-a & a & a
-\CodeAfter
-\begin{tikzpicture}[
- every node/.style =
- {
- blend mode = multiply,
- inner sep = 0 pt ,
- fill = red!15
- }
- ]
-\node [fit = (1-1)] {} ;
-\node [fit = (1-3)] {} ;
-\node [fit = (2-2)] {} ;
-\node [fit = (3-1)] {} ;
-\node [fit = (3-3)] {} ;
-\node [fit = (1-2)] {} ;
-\node [fit = (2-1)] {} ;
-\node [fit = (2-3)] {} ;
-\node [fit = (3-2)] {} ;
-\end{tikzpicture}
-\end{pNiceMatrix}\]
-
-
-\bigskip
-En fait, l'extension \pkg{nicematrix} peut créer deux séries de nœuds supplémentaires (\emph{extra nodes} en
-anglais) : les «nœuds moyens» (\emph{medium nodes} en anglais) et les «nœuds larges» (\emph{large nodes} en
-anglais). Les premiers sont créés avec l'option |create-medium-nodes| et les seconds avec l'option
-|create-large-nodes|.\footnote{Il existe aussi l'option |create-extra-nodes| qui est un alias pour la conjonction
-de |create-medium-nodes| et |create-large-nodes|.}
-
-\medskip
-Les noms des «nœuds moyens» s'obtiennent en ajoutant le suffixe «|-medium|» au nom des nœuds normaux. Dans
-l'exemple suivant, on a surligné tous les «nœuds moyens». Nous considérons que cet exemple se suffit à lui-même
-comme définition de ces nœuds.
-\[\begin{pNiceMatrix}[
- create-medium-nodes,
- code-after = {\begin{tikzpicture}
- [every node/.style = {fill = red!15,
- blend mode = multiply,
- inner sep = 0 pt},
- name suffix = -medium]
- \node [fit = (1-1)] {} ;
- \node [fit = (1-2)] {} ;
- \node [fit = (1-3)] {} ;
- \node [fit = (2-1)] {} ;
- \node [fit = (2-2)] {} ;
- \node [fit = (2-3)] {} ;
- \node [fit = (3-1)] {} ;
- \node [fit = (3-2)] {} ;
- \node [fit = (3-3)] {} ;
- \end{tikzpicture}}]
-a & a + b & a + b + c \\
-a & a & a + b \\
-a & a & a
-\end{pNiceMatrix}\]
-
-
-\medskip
-Les noms des «nœuds larges» s'obtiennent en ajoutant le suffixe «|-large|» au nom des nœuds normaux. Dans l'exemple
-suivant, on a surligné tous les «nœuds larges». Nous considérons que cet exemple se suffit à lui-même comme
-définition de ces nœuds.\footnote{Il n'y a pas de «nœuds larges» créés dans les rangées et colonnes extérieures
- (pour ces rangées et colonnes, voir p.~\pageref{exterior}).}
-
-\[\begin{pNiceMatrix}[
- create-large-nodes,
- code-after = {\begin{tikzpicture}
- [every node/.style = {blend mode = multiply,
- inner sep = 0 pt},
- name suffix = -large]
- \node [fit = (1-1),fill = red!15] {} ;
- \node [fit = (1-3),fill = red!15] {} ;
- \node [fit = (2-2),fill = red!15] {} ;
- \node [fit = (3-1),fill = red!15] {} ;
- \node [fit = (3-3),fill = red!15] {} ;
- \node [fit = (1-2),fill = blue!15] {} ;
- \node [fit = (2-1),fill = blue!15] {} ;
- \node [fit = (2-3),fill = blue!15] {} ;
- \node [fit = (3-2),fill = blue!15] {} ;
- \end{tikzpicture}}]
-a & a + b & a + b + c \\
-a & a & a + b \\
-a & a & a
-\end{pNiceMatrix}\]
-
-
-\medskip
-Les «nœuds larges» de la première colonne et de la dernière colonne peuvent apparaître trop petits pour certains
-usages. C'est pourquoi il est possible d'utiliser les options |left-margin| et |right-margin| pour ajouter de
-l'espace des deux côtés du tableau et aussi de l'espace dans les «nœuds larges» de la première colonne et de la
-dernière colonne. Dans l'exemple suivant, nous avons utilisé les options |left-margin| et
-|right-margin|.\footnote{Les options |left-margin| et |right-margin| prennent des dimensions comme valeurs mais, si
- aucune valeur n'est donnée, c'est la valeur par défaut qui est utilisée et elle est égale à |\arraycolsep| (par
- défaut, 5~pt).Il existe aussi une option |margin| pour fixer à la fois |left-margin| et |right-margin|.}
-\[\begin{pNiceMatrix}[
- create-large-nodes,left-margin,right-margin,
- code-after = {\begin{tikzpicture}
- [every node/.style = {blend mode = multiply,
- inner sep = 0 pt},
- name suffix = -large]
- \node [fit = (1-1),fill = red!15] {} ;
- \node [fit = (1-3),fill = red!15] {} ;
- \node [fit = (2-2),fill = red!15] {} ;
- \node [fit = (3-1),fill = red!15] {} ;
- \node [fit = (3-3),fill = red!15] {} ;
- \node [fit = (1-2),fill = blue!15] {} ;
- \node [fit = (2-1),fill = blue!15] {} ;
- \node [fit = (2-3),fill = blue!15] {} ;
- \node [fit = (3-2),fill = blue!15] {} ;
- \end{tikzpicture}}]
-a & a + b & a + b + c \\
-a & a & a + b \\
-a & a & a
-\end{pNiceMatrix}\]
-
-\medskip
-Il est aussi possible d'ajouter de l'espace sur les côtés du tableau avec les options |extra-left-margin| et
-|extra-right-margin|. Ces marges ne sont pas incorporées dans les «nœuds larges». Dans l'exemple suivant, nous
-avons utilisé |extra-left-margin| et |extra-right-margin| avec la valeur $3$~pt.
-\[\begin{pNiceMatrix}[
- create-large-nodes,left-margin,right-margin,extra-right-margin=3pt,extra-left-margin=3pt,
- code-after = {\begin{tikzpicture}
- [every node/.style = {blend mode = multiply,
- inner sep = 0 pt},
- name suffix = -large]
- \node [fit = (1-1),fill = red!15] {} ;
- \node [fit = (1-3),fill = red!15] {} ;
- \node [fit = (2-2),fill = red!15] {} ;
- \node [fit = (3-1),fill = red!15] {} ;
- \node [fit = (3-3),fill = red!15] {} ;
- \node [fit = (1-2),fill = blue!15] {} ;
- \node [fit = (2-1),fill = blue!15] {} ;
- \node [fit = (2-3),fill = blue!15] {} ;
- \node [fit = (3-2),fill = blue!15] {} ;
- \end{tikzpicture}}]
-a & a + b & a + b + c \\
-a & a & a + b \\
-a & a & a
-\end{pNiceMatrix}\]
+\end{scope}
-\medskip
-Dans le cas présent, si on veut un contrôle sur la hauteur des rangées, on peut ajouter un |\strut| dans chaque
-rangée du tableau.
-\[\begin{pNiceMatrix}[
- create-large-nodes,left-margin,right-margin,extra-right-margin=3pt,extra-left-margin=3pt,
- code-after = {\begin{tikzpicture}
- [every node/.style = {blend mode = multiply,
- inner sep = 0 pt},
- name suffix = -large]
- \node [fit = (1-1),fill = red!15] {} ;
- \node [fit = (1-3),fill = red!15] {} ;
- \node [fit = (2-2),fill = red!15] {} ;
- \node [fit = (3-1),fill = red!15] {} ;
- \node [fit = (3-3),fill = red!15] {} ;
- \node [fit = (1-2),fill = blue!15] {} ;
- \node [fit = (2-1),fill = blue!15] {} ;
- \node [fit = (2-3),fill = blue!15] {} ;
- \node [fit = (3-2),fill = blue!15] {} ;
- \end{tikzpicture}}]
-\strut a & a + b & a + b + c \\
-\strut a & a & a + b \\
-\strut a & a & a
-\end{pNiceMatrix}\]
-\bigskip
-On explique plus loin comment surligner les nœuds créés par Tikz (cf. p. \pageref{highlight}).
\section{Le code-after}
\label{code-after}
-L'option |code-after| peut être utilisée pour indiquer du code qui sera exécuté après la construction de la matrice,
-et donc, en particulier, après la construction de tous les nœuds.
+L'option |code-after| peut être utilisée pour indiquer du code qui sera exécuté après la construction de la
+matrice.\footnote{Il existe aussi une clé |code-before| décrite p.~\pageref{code-before}.}
-\textbf{Si on a chargé Tikz}\footnote{On rappelle que depuis la version 3.13, \pkg{nicematrix} ne charge plus Tikz
- par défaut, mais seulement \textsc{pgf} (Tikz est une surcouche de \textsc{pgf}).}, on peut accéder à ces nœuds
-avec des instructions Tikz classiques. Les nœuds devront être désignés sous la forme $i$-$j$ (sans le préfixe
-correspondant au nom de l'environnement).
-
-De plus, une commande spéciale, nommée |\line| est disponible pour tracer directement des lignes en pointillés
-entre les nœuds). Elle peut par exemple être utilisée pour tracer une ligne entre deux cases adjacentes comme dans
-l'exemple suivant.
+Une commande spéciale, nommée |\line| est disponible pour tracer directement des lignes en pointillés entre les
+cases. Elle prend deux arguments correspondant aux deux cases à relier, chacun de la forme $i$-$j$ où $i$ est le
+numéro de ligne et $j$ est le numéro de colonne. Elle peut par exemple être utilisée pour tracer une ligne entre
+deux cases adjacentes comme dans l'exemple suivant.
\label{line-in-code-after}
\medskip
@@ -882,786 +1682,47 @@ Pour améliorer la lisibilité du code, une syntaxe alternative est proposée :
|code-after| à la fin de l'environnement, après le mot-clé |\CodeAfter|. Pour un exemple, voir page
\pageref{exemple-CodeAfter}.
-\section{Les environnements \{NiceArray\} et \{NiceTabular\}}
-\label{NiceArray}
-
-Les environnements |{NiceArray}| et |{NiceTabular}| sont similaires aux environnements |{array}| et |{tabular}|.
-L'argument obligatoire est le préambule du tableau. Néanmoins, pour des raisons techniques, l'utilisateur doit
-utiliser les lettres |L|, |C| et |R|\footnote{Les types de colonnes |L|, |C| et |R| sont définis localement à
- l'intérieur de |{NiceArray}| avec la commande |\newcolumntype| de \pkg{array}. Cette définition masque une
- éventuelle définition précédente.} au lieu de |l|, |c| et |r|. Dans une commande |\multicolumn|, on doit
-également utiliser les lettres |L|, |C| et |R|.
-
-Il est possible d'utiliser les constructions |p{...}|, |m{...}|, |b{...}|, |w{...}{...}|, |W{...}{...}|, \verb+|+,
-|>{...}|, |<{...}|, |@{...}|, |!{...}| et |*{n}{...}|. Néanmoins, dans l'environnement |{NiceArray}| (et ses
-variantes), le contenu des colonnes de type |w| ou |W| est composé en mode mathématique (dans |{array}| de
-\pkg{array}, elles sont composées en mode texte).
-\bigskip
-Sans surprise, l'extension \pkg{nicematrix} fournit également les variantes |{pNiceArray}|, |{vNiceArray}|,
-|{VNiceArray}|, |{bNiceArray}| et |{BNiceArray}|.
-\interitem
-L'un des intérêts de |{pNiceArray}| par rapport à |{pNiceMatrix}| est la possibilité de tracer des filets verticaux
-:
+\section{Autres fonctionnalités}
-\bigskip
-\begin{BVerbatim}[baseline=c,boxwidth=10cm]
-$\left[\begin{NiceArray}{CCCC|C}
-a_1 & ? & \Cdots & ? & ? \\
-0 & & \Ddots & \Vdots & \Vdots\\
-\Vdots & \Ddots & \Ddots & ? \\
-0 & \Cdots & 0 & a_n & ?
-\end{NiceArray}\right]$
-\end{BVerbatim}
-$\left[\begin{NiceArray}{CCCC|C}
-a_1 & ? & \Cdots & ? & ? \\
-0 & & \Ddots & \Vdots & \Vdots\\
-\Vdots & \Ddots & \Ddots & ? \\
-0 & \Cdots & 0 & a_n & ?
-\end{NiceArray}\right]$
-\interitem
-Un autre intérêt est la possibilité d'utiliser plusieurs types d'alignement de colonnes.
-\bigskip
-\begin{BVerbatim}[baseline=c,boxwidth=10cm]
-$\begin{pNiceArray}{LCR}
-a_{11} & \Cdots & a_{1n} \\
-a_{21} & & a_{2n} \\
-\Vdots & & \Vdots \\
-a_{n-1,1} & \Cdots & a_{n-1,n}
-\end{pNiceArray}$
-\end{BVerbatim}
-$\begin{pNiceArray}{LCR}
-a_{11} & \Cdots & a_{1n} \\
-a_{21} & & a_{2n} \\
-\Vdots & & \Vdots \\
-a_{n-1,1} & \Cdots & a_{n-1,n}
-\end{pNiceArray}$
-
-
-
-\interitem
-En fait, l'environnement |{pNiceArray}| et ses variantes sont fondés sur un environnement plus général, appelé
-|{NiceArrayWithDelims}|. Les deux premiers arguments obligatoires de cet environnement sont les délimiteurs gauche
-et droit qui seront utilisés dans la construction de la matrice. Il est possible d'utiliser |{NiceArrayWithDelims}|
-si on a besoin de délimiteurs atypiques ou asymétriques.
-
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=11cm]
-$\begin{~emphase#NiceArrayWithDelims@}
- {\downarrow}{\uparrow}{CCC}[margin]
-1 & 2 & 3 \\
-4 & 5 & 6 \\
-7 & 8 & 9
-\end{~emphase#NiceArrayWithDelims@}$
-\end{BVerbatim}
-$\begin{NiceArrayWithDelims}
- {\downarrow}{\uparrow}{CCC}[margin]
-1 & 2 & 3 \\
-4 & 5 & 6 \\
-7 & 8 & 9
-\end{NiceArrayWithDelims}$
-
-\bigskip
-\subsection{Le positionnement vertical des matrices}
-
-L'extension \pkg{nicematrix} propose aussi une option |baseline| pour la position verticale des matrices. Cette
-option |baseline| prend comme valeur un entier qui indique le numéro de rangée dont la ligne de base servira de
-ligne de base pour le tableau.
-
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=9cm]
-$A = \begin{pNiceMatrix}[~emphase#baseline=2@]
-\frac{1}{\sqrt{1+p^2}} & p & 1-p \\
-1 & 1 & 1 \\
-1 & p & 1+p
-\end{pNiceMatrix}$
-\end{BVerbatim}
-$A = \begin{pNiceMatrix}[baseline=2]
-\frac{1}{\sqrt{1+p^2}} & p & 1-p \\
-1 & 1 & 1 \\
-1 & p & 1+p
-\end{pNiceMatrix}$
-
-
-\interitem
-L'option |baseline| peut aussi prendre les trois valeurs spéciales |t|, |c| et |b|. Ces trois lettres peuvent aussi
-être utilisées de manière absolue comme pour l'option de l'environnement |{array}| de \pkg{array}. La valeur
-initiale de |baseline| est~|c|.
-
-
-\bigskip
-Dans l'exemple suivant, on utilise l'option |t| (synonyme de |baseline=t|) immédiatement après un |\item| de liste.
-On remarquera que la présence d'un |\hline| initial n'empêche pas l'alignement sur la ligne de base de la première
-rangée (avec |{array}| de {array}, il faut utiliser |\firsthline|\footnote{On peut aussi utiliser |\firsthline|
- avec |{NiceArray}|.}).
-
-\smallskip
-\begin{BVerbatim}[baseline=c,boxwidth=9cm]
-\begin{enumerate}
-\item un item
-\smallskip
-\item \renewcommand{\arraystretch}{1.2}
-$\begin{NiceArray}[t]{LCCCCCC}
-\hline
-n & 0 & 1 & 2 & 3 & 4 & 5 \\
-u_n & 1 & 2 & 4 & 8 & 16 & 32
-\hline
-\end{NiceArray}$
-\end{enumerate}
-\end{BVerbatim}
-%
-\begin{minipage}{5cm}
-\begin{enumerate}
-\item un item
-\smallskip
-\item \renewcommand{\arraystretch}{1.2}
-$\begin{NiceArray}[t]{LCCCCCC}
-\hline
-n & 0 & 1 & 2 & 3 & 4 & 5 \\
-u_n & 1 & 2 & 4 & 8 & 16 & 32 \\
-\hline
-\end{NiceArray}$
-\end{enumerate}
-\end{minipage}
-
-
-\bigskip
-Il est également possible d'utiliser les outils de \pkg{booktabs}: |\toprule|,
-|\bottomrule| et |\midrule|.\par\nobreak
-
-\smallskip
-\begin{BVerbatim}[baseline=c,boxwidth=9cm]
-\begin{enumerate}
-\item an item
-\smallskip
-\item
-$\begin{NiceArray}[t]{LCCCCCC}
-~emphase#\toprule@
-n & 0 & 1 & 2 & 3 & 4 & 5 \\
-~emphase#\midrule@
-u_n & 1 & 2 & 4 & 8 & 16 & 32
-~emphase#\bottomrule@
-\end{NiceArray}$
-\end{enumerate}
-\end{BVerbatim}
-\begin{minipage}{5cm}
-\begin{enumerate}
-\item an item
-\smallskip
-\item
-$\begin{NiceArray}[t]{LCCCCCC}
-\toprule
-n & 0 & 1 & 2 & 3 & 4 & 5 \\
-\midrule
-u_n & 1 & 2 & 4 & 8 & 16 & 32 \\
-\bottomrule
-\end{NiceArray}$
-\end{enumerate}
-\end{minipage}
-
-
-
-
-
-\bigskip
-\section{Les rangées et colonnes extérieures}
-Les environnements de \pkg{nicematrix} permettent de composer des rangées et des colonnes «extérieures» grâce aux options
-|first-row|, |last-row|, |first-col| et |last-col|.
-\label{exterior}
-
-Si elle est présente, la «première rangée» (extérieure) est numérotée par $0$ (et non $1$). Il en est de même pour
-la «première rangée».
-
-\begin{Verbatim}
-$\begin{pNiceMatrix}[~emphase#first-row,last-row,first-col,last-col@,nullify-dots]
- & C_1 & \Cdots & & C_4 & \\
-L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
-\Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
- & a_{31} & a_{32} & a_{33} & a_{34} & \\
-L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
- & C_1 & \Cdots & & C_4 &
-\end{pNiceMatrix}$
-\end{Verbatim}
-%
-\[\begin{pNiceMatrix}[first-row,last-row,first-col,last-col,nullify-dots]
- & C_1 & \Cdots & & C_4 & \\
-L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
-\Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
- & a_{31} & a_{32} & a_{33} & a_{34} & \\
-L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
- & C_1 & \Cdots & & C_4 &
-\end{pNiceMatrix}\]
-
-\bigskip
-Il y a plusieurs remarques à formuler.
-%
-\begin{itemize}[beginpenalty=10000]
-\item Si on utilise un environnement avec préambule explicite (c'est-à-dire |{NiceArray}| ou l'une de ses
-variantes), on ne doit pas mettre dans ce préambule de spécification de colonne pour les éventuelles première et
-dernière colonne : ce sera automatiquement (et nécessairement) une colonne |R| pour la première colonne et une
-colonne |L| pour la dernière.
-
-\item On peut se demander comment \pkg{nicematrix} détermine le nombre de rangées et de colonnes nécessaires à la
-composition de la «dernière rangée» et de la «dernière colonne».
-
-\begin{itemize}
-\item Dans le cas d'un environnement avec préambule, comme |{NiceTabular}| ou |{pNiceArray}|, le nombre de colonnes
-se déduit évidemment du préambule.
-
-\item Dans le cas où l'option |light-syntax| (cf. p. \pageref{light-syntax}) est utilisée, \pkg{nicematrix} profite
-du fait que cette option nécessite de toutes manières le chargement complet du contenu de l'environnement (d'où
-l'impossibilité de mettre du verbatim dans ce cas-là) avant composition du tableau. L'analyse du contenu de
-l'environnement donne le nombre de rangées (mais pas le nombre de colonnes).
-
-\item Dans les autres cas, \pkg{nicematrix} détermine le nombre de rangées et de colonnes à la première compilation
-et l'écrit dans le fichier |.aux| pour pouvoir l'utiliser à la compilation suivante.
-
-\textsl{Néanmoins, il est possible de donner le numéro de la dernière rangée et le numéro de la dernière colonne en
-arguments des options |last-row| et |last-col|, ce qui permettra d'accélérer le processus complet de
-compilation.} C'est ce que nous ferons dans la suite.
-\end{itemize}
-
-\end{itemize}
-
-
-
-\bigskip
-On peut contrôler l'apparence de ces rangées et colonnes avec les options |code-for-first-row|,
-|code-for-last-row|, |code-for-first-col| et |code-for-last-col|. Ces options sont des listes de tokens qui seront
-insérées au début de chaque case de la rangée ou de la colonne considérée.
-
-\begin{Verbatim}
-\NiceMatrixOptions{~emphase#code-for-first-row@ = \color{red},
- ~emphase#code-for-first-col@ = \color{blue},
- ~emphase#code-for-last-row@ = \color{green},
- ~emphase#code-for-last-col@ = \color{magenta}}
-$\begin{pNiceArray}{CC|CC}[first-row,last-row=6,first-col,last-col,nullify-dots]
- & C_1 & \Cdots & & C_4 & \\
-L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
-\Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
-\hline
- & a_{31} & a_{32} & a_{33} & a_{34} & \\
-L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
- & C_1 & \Cdots & & C_4 &
-\end{pNiceArray}$
-\end{Verbatim}
-%
-\begin{scope}
-\NiceMatrixOptions{code-for-first-row = \color{red},
- code-for-first-col = \color{blue},
- code-for-last-row = \color{green},
- code-for-last-col = \color{magenta}}
-\begin{displaymath}
-\begin{pNiceArray}{CC|CC}[first-row,last-row=5,first-col,last-col,nullify-dots]
- & C_1 & \multicolumn1C{\Cdots} & & C_4 & \\
-L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
-\Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
-\hline
- & a_{31} & a_{32} & a_{33} & a_{34} & \\
-L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
- & C_1 & \multicolumn1C{\Cdots} & & C_4 &
-\end{pNiceArray}
-\end{displaymath}
-\end{scope}
-
-
-
-\emph{Remarques}
-\begin{itemize}[beginpenalty=10000]
-\item Comme on peut le voir dans l'exemple précédent, un filet horizontal (tracé avec |\hline|) ne s'étend pas
-dans les colonnes extérieures et un filet vertical (spécifié par un caractère «\verb+|+» dans le préambule du
-tableau) ne s'étend pas dans les rangées extérieures.\footnote{Ce dernier point n'est pas valable si on a chargé,
- en plus de \pkg{nicematrix}, l'extension \pkg{arydshln}. Les extensions \pkg{nicematrix} et \pkg{arydshln} ne
- sont pas parfaitement compatibles car \pkg{arydshln} redéfinit beaucoup de structures internes à \pkg{array}. Par
-ailleurs, si on veut vraiment un filet qui s'étende dans la première et la dernière rangée, on peut utiliser
-|!{\vline}| dans le préambule à la place de \verb+|+.}
-
-Si on veut définir de nouveaux spécificateurs de colonnes pour des filets (par exemple plus épais), on aura
-peut-être intérêt à utiliser la commande |\OnlyMainNiceMatrix| décrite p.~\pageref{OnlyMainNiceMatrix}.
-\item Une spécification de couleur présente dans |code-for-first-row| s'applique à une ligne pointillée tracée
-dans cette «première rangée» (sauf si une valeur a été donnée à |xdots/color|). Idem pour les autres.
-\item Sans surprise, une éventuelle option |columns-width| (décrite p.~\pageref{width}) ne s'applique pas à la
-«première colonne» ni à la «dernière colonne».
-\item Pour des raisons techniques, il n'est pas possible d'utiliser l'option de la commande |\\| après la
-«première rangée» ou avant la «dernière rangée» (le placement des délimiteurs serait erroné).
-\end{itemize}
-
-
-
-
-
-\section[Les lignes en pointillés pour séparer les rangées et les colonnes]{Les lignes en pointillés pour séparer les rangées\\ et les colonnes}
-
-
-Dans les environnements de \pkg{nicematrix}, il est possible d'utiliser la commande |\hdottedline| (fournie
-par \pkg{nicematrix}) qui est l'équivalent pour les pointillés des commandes |\hline| et |\hdashline|
-(cette dernière étant une commande de \pkg{arydshln}).
-
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
-\begin{pNiceMatrix}
-1 & 2 & 3 & 4 & 5 \\
-~emphase#\hdottedline@
-6 & 7 & 8 & 9 & 10 \\
-11 & 12 & 13 & 14 & 15
-\end{pNiceMatrix}
-\end{BVerbatim}
-$\begin{pNiceMatrix}
-1 & 2 & 3 & 4 & 5 \\
-\hdottedline
-6 & 7 & 8 & 9 & 10 \\
-11 & 12 & 13 & 14 & 15
-\end{pNiceMatrix}$
-
-
-\bigskip
-Dans les environnements avec un préambule explicite (comme |{NiceArray}|, |{pNiceArray}|, etc.), il est possible de
-dessiner un trait vertical en pointillés avec le spécificateur «|:|».
-
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
-\begin{pNiceArray}{CCCC~emphase#:@C}
-1 & 2 & 3 & 4 & 5 \\
-6 & 7 & 8 & 9 & 10 \\
-11 & 12 & 13 & 14 & 15
-\end{pNiceArray}
-\end{BVerbatim}
-$\begin{pNiceArray}{CCCC:C}
-1 & 2 & 3 & 4 & 5 \\
-6 & 7 & 8 & 9 & 10 \\
-11 & 12 & 13 & 14 & 15
-\end{pNiceArray}$
-
-
-\bigskip
-Ces lignes en pointillés ne s'étendent pas dans les rangées et colonnes extérieures.\par\nobreak
-
-
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
-$\begin{pNiceArray}{CCC:C}%
- [first-row,last-col,
- code-for-first-row = \color{blue}\scriptstyle,
- code-for-last-col = \color{blue}\scriptstyle ]
-C_1 & C_2 & C_3 & C_4 \\
-1 & 2 & 3 & 4 & L_1 \\
-5 & 6 & 7 & 8 & L_2 \\
-9 & 10 & 11 & 12 & L_3 \\
-\hdottedline
-13 & 14 & 15 & 16 & L_4
-\end{pNiceArray}$
-\end{BVerbatim}
-$\begin{pNiceArray}{CCC:C}%
- [first-row,last-col,
- code-for-first-row = \color{blue}\scriptstyle,
- code-for-last-col = \color{blue}\scriptstyle ]
-C_1 & C_2 & C_3 & C_4 \\
-1 & 2 & 3 & 4 & L_1 \\
-5 & 6 & 7 & 8 & L_2 \\
-9 & 10 & 11 & 12 & L_3 \\
-\hdottedline
-13 & 14 & 15 & 16 & L_4
-\end{pNiceArray}$
-
-\bigskip
-Il est possible de changer dans \pkg{nicematrix} la lettre utilisée pour indiquer dans le préambule un trait
-vertical en pointillés avec l'option |letter-for-dotted-lines| disponible dans |\NiceMatrixOptions|.
-
-
-\bigskip
-\emph{Remarque} : Quand l'extension \pkg{array} (sur laquelle s'appuie \pkg{nicematrix}) est chargée, les traits
-verticaux et horizontaux que l'on insère rendent le tableau plus large ou plus long d'une quantité égale à la
-largeur du trait\footnote{En fait, cela est vrai pour |\hline| et «\verb+|+» mais pas pour |\cline|.}. Avec
-\pkg{nicematrix}, les lignes en pointillés tracées par |\hdottedline| et «|:|» ont le même effet.
-
-\section{La largeur des colonnes}
-\label{width}
+\subsection{Utilisation du type de colonne S de siunitx}
-Dans les environnements avec un préambule explicite (comme |{NiceArray}|, |{pNiceArray}|, etc.), il est possible de
-fixer la largeur d'une colonne avec les lettres classiques |w| et |W| de l'extension \pkg{array}. Dans les
-environnements de \pkg{nicematrix}, les cases des colonnes de ce type sont composées en mode mathématique (alors
-que dans |{array}| de \pkg{array}, elles sont composées en mode texte).
+Si l'extension \pkg{siunitx} est chargée (avant ou après \pkg{nicematrix}), il est possible d'utiliser les colonnes
+de type |S| de \pkg{siunitx} dans les environnements de \pkg{nicematrix}. L'implémentation n'utilise explicitement
+aucune macro privée de \pkg{siunitx}.
\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=10cm]
-$\begin{pNiceArray}{~emphase#Wc{1cm}@CC}
-1 & 12 & -123 \\
-12 & 0 & 0 \\
-4 & 1 & 2
+\begin{BVerbatim}[baseline = c, boxwidth = 10.5cm]
+$\begin{pNiceArray}{~emphase#S@CWc{1cm}C}[nullify-dots,first-row]
+{C_1} & \Cdots & & C_n \\
+2.3 & 0 & \Cdots & 0 \\
+12.4 & \Vdots & & \Vdots \\
+1.45 \\
+7.2 & 0 & \Cdots & 0
\end{pNiceArray}$
\end{BVerbatim}
-$\begin{pNiceArray}{Wc{1cm}CC}
-1 & 12 & -123 \\
-12 & 0 & 0 \\
-4 & 1 & 2
+$\begin{pNiceArray}{SCWc{1cm}C}[nullify-dots,first-row]
+{C_1} & \Cdots & & C_n \\
+2.3 & 0 & \Cdots & 0 \\
+12.4 & \Vdots & & \Vdots \\
+1.45 \\
+7.2 & 0 & \Cdots & 0
\end{pNiceArray}$
-
-\bigskip
-Dans les environnements de \pkg{nicematrix}, il est aussi possible de fixer la largeur \emph{minimale} de toutes
-les colonnes de la matrice directement avec l'option |columns-width|.
-
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=10cm]
-$\begin{pNiceMatrix}[~emphase#columns-width = 1cm@]
-1 & 12 & -123 \\
-12 & 0 & 0 \\
-4 & 1 & 2
-\end{pNiceMatrix}$
-\end{BVerbatim}
-$\begin{pNiceMatrix}[columns-width = 1cm]
-1 & 12 & -123 \\
-12 & 0 & 0 \\
-4 & 1 & 2
-\end{pNiceMatrix}$
-
-\medskip
-Noter que l'espace inséré entre deux colonnes (égal à 2 |\arraycolsep|) n'est pas supprimé (il est évidemment
-possible de le supprimer en mettant |\arraycolsep| à~$0$ avant).
-
-\bigskip
-Il est possible de donner la valeur spéciale |auto| à l'option |columns-width|: toutes les colonnes du tableau
-auront alors une largeur égale à la largeur de la case la plus large du tableau.\footnote{Le résultat est atteint
- dès la première compilation (mais Tikz écrivant des informations dans le fichier |.aux|, un message demandant une
- deuxième compilation apparaîtra).}\par\nobreak
-
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=10cm]
-$\begin{pNiceMatrix}[~emphase#columns-width = auto@]
-1 & 12 & -123 \\
-12 & 0 & 0 \\
-4 & 1 & 2
-\end{pNiceMatrix}$
-\end{BVerbatim}
-$\begin{pNiceMatrix}[columns-width = auto]
-1 & 12 & -123 \\
-12 & 0 & 0 \\
-4 & 1 & 2
-\end{pNiceMatrix}$
-
-\bigskip
-Sans surprise, il est possible de fixer la largeur minimale de toutes les colonnes de toutes les matrices dans une
-certaine portion de document avec la commande |\NiceMatrixOptions|.\par\nobreak
-
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
-~emphase#\NiceMatrixOptions{columns-width=10mm}@
-$\begin{pNiceMatrix}
-a & b \\ c & d
-\end{pNiceMatrix}
-=
-\begin{pNiceMatrix}
-1 & 1245 \\ 345 & 2
-\end{pNiceMatrix}$
-\end{BVerbatim}
-\begin{scope}
-\NiceMatrixOptions{columns-width=10mm}
-$\begin{pNiceMatrix}
-a & b \\
-c & d
-\end{pNiceMatrix}
-=
-\begin{pNiceMatrix}
-1 & 1245 \\
-345 & 2
-\end{pNiceMatrix}$
-\end{scope}
-
-
-\bigskip
-Mais il est aussi possible de fixer une zone dans laquelle toutes les matrices auront leurs colonnes de la même
-largeur, égale à la largeur de la case la plus large de toutes les matrices de la zone. Cette construction utilise
-l'environnement |{NiceMatrixBlock}| avec l'option |auto-columns-width|\footnote{Pour le moment, c'est le seul
- usage de l'environnement |{NiceMatrixBlock}| mais il pourrait y en avoir davantage dans le futur.}.
-L'environnement |{NiceMatrixBlock}| n'a pas de rapport direct avec la commande |\Block| présentée juste ci-dessous
-(cf.~p.~\pageref{Block}).
-
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
-~emphase#\begin{NiceMatrixBlock}[auto-columns-width]@
-$\begin{pNiceMatrix}
-a & b \\ c & d
-\end{pNiceMatrix}
-=
-\begin{pNiceMatrix}
-1 & 1245 \\ 345 & 2
-\end{pNiceMatrix}$
-~emphase#\end{NiceMatrixBlock}@
-\end{BVerbatim}
-\begin{NiceMatrixBlock}[auto-columns-width]
-$\begin{pNiceMatrix}
- a & b \\ c & d
- \end{pNiceMatrix}
-=
- \begin{pNiceMatrix}
- 1 & 1245 \\ 345 & 2
-\end{pNiceMatrix}$
-\end{NiceMatrixBlock}
-
-\medskip
-\textbf{Plusieurs compilations peuvent être nécessaires pour obtenir le résultat désiré.}
-
-\section{Les matrices par blocs}
-
-\label{Block}
-
-Cette partie, qui introduit une commande |\Block|, n'a pas de rapport direct avec l'environnement
-|{NiceMatrixBlock}| présenté dans la section précédente.
-
-\smallskip
-Dans les environnements de \pkg{nicematrix}, on peut utiliser la commande |\Block| pour placer un élément au centre
-d'un rectangle de cases fusionnées.
-
-La commande |\Block| doit être utilisée dans la case supérieure gauche du bloc avec deux arguments. Le premier
-argument est la taille de ce bloc avec la syntaxe $i$-$j$ où $i$ est le nombre de rangées et $j$ le nombre de
-colonnes du bloc. Le deuxième argument, est, sans surprise, le contenu du bloc (en mode mathématique). Un nœud Tikz
-correspondant à l'ensemble des cases fusionnées est créé sous le nom «$i$-$j$-block» où \textsl{nom} est le
-nom donné au tableau. Si on a demandé la création des nœuds |medium|, alors un nœud de ce type est aussi créé pour
-ce bloc avec un nom suffixé par |-medium|.
-
-\medskip
-Dans les exemples qui suivent, on utilise la commande |\arrayrulecolor| de \pkg{colortbl}.
-
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
-\arrayrulecolor{blue}
-$\begin{bNiceArray}{CCC|C}[margin]
-~emphase#\Block{3-3}{A}@ & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
-& & & 0 \\
-\hline
-0 & \Cdots& 0 & 0
-\end{bNiceArray}$
-\arrayrulecolor{black}
-\end{BVerbatim}
-\begin{scope}
-\arrayrulecolor{blue}
-$\begin{bNiceArray}{CCC|C}[margin]
-\Block{3-3}{A} & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
-& & & 0 \\
-\hline
-0 & \Cdots& 0 & 0
-\end{bNiceArray}$
-\arrayrulecolor{black}
-\end{scope}
-
-\bigskip
-On peut souhaiter agrandir la taille du «$A$» placé dans le bloc de l'exemple précédent. Comme il est composé en
-mode mathématique, on ne peut pas directement utiliser une commande comme |\large|, |\Large| ou |\LARGE|. C'est
-pourquoi une option à mettre entre chevrons est proposée par |\Block| pour spécifier du code LaTeX qui sera inséré
-\emph{avant} le début du mode mathématique.
-
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
-\arrayrulecolor{blue}
-$\begin{bNiceArray}{CCC|C}[margin]
-\Block{3-3}~emphase#<\Large>@{A} & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
-& & & 0 \\
-\hline
-0 & \Cdots& 0 & 0
-\end{bNiceArray}$
-\arrayrulecolor{black}
-\end{BVerbatim}
-\begin{scope}
-\arrayrulecolor{blue}
-$\begin{bNiceArray}{CCC|C}[margin]
-\Block{3-3}<\Large>{A} & & & 0 \\
-& \hspace*{1cm} & & \Vdots \\
-& & & 0 \\
-\hline
-0 & \Cdots& 0 & 0
-\end{bNiceArray}$
-\arrayrulecolor{black}
-\end{scope}
-
-
-\medskip
-Pour des raisons techniques, il n'est pas possible d'écrire |\Block{|$i$|-|$j$|}{<}|
-(mais on peut écrire |\Block{|$i$|-|$j$|}<>{<}| avec le résultat attendu).
-
-
-\section{Les couleurs des rangées et des colonnes}
-
-L'extension \pkg{colortbl} permet de colorier des cellules, des rangées ou des colonnes d'un tableau. Néanmoins,
-l'affichage du \textsc{pdf} résultant n'est pas toujours parfait, en particulier quand on utilise également des
-filets. Dans certains lecteurs de \textsc{pdf}, des filets verticaux semblent disparaître. De fines lignes
-blanches peuvent également apparaître.
-
-\medskip
-La version 4.0 de \pkg{nicematrix} propose des outils similaires qui ne présentent pas ces inconvénients. Elle
-propose une option |code-before| pour du code qui sera exécuté \emph{avant} le tracé du tableau. Dans ce
-|code-before|, de nouvelles commandes sont disponibles : |\cellcolor|, |\rectanglecolor|, |\rowcolor|,
-|\columncolor|, |\rowcolors| et |\chessboardcolors|.
-
-\medskip
-\begin{itemize}
-\item La commande |\cellcolor| tient son nom de la commande |\cellcolor| de \pkg{colortbl}.
-
-Elle prend en arguments une couleur et une liste de cellules sous le format $i$-$j$ où $i$ est le numéro de ligne
-et $j$ le numéro de colonne.
-
-\medskip
-\begin{scope}
-\hfuzz=10cm
-\begin{BVerbatim}[boxwidth=10cm,baseline=c]
-\begin{NiceTabular}{|C|C|C|}[code-before = ~emphase#\cellcolor{red!15}{3-1,2-2,1-3}@]
-\hline
-a & b & c \\ \hline
-e & f & g \\ \hline
-h & i & j \\ \hline
-\end{NiceTabular}
-\end{BVerbatim}
-\begin{NiceTabular}{|C|C|C|}[code-before = \cellcolor{red!15}{3-1,2-2,1-3}]
-\hline
-a & b & c \\ \hline
-e & f & g \\ \hline
-h & i & j \\ \hline
-\end{NiceTabular}
-\end{scope}
-
-\bigskip
-\item La commande |\rectanglecolor| prend trois arguments. Le premier est la couleur, les deux suivants fournissent
-la case en haut à gauche et la case en bas à droite du rectangle.
-
-\medskip
-\begin{scope}
-\hfuzz=10cm
-\begin{BVerbatim}[boxwidth=10cm,baseline=c]
-\begin{NiceTabular}{|C|C|C|}[code-before = ~emphase#\rectanglecolor{red!15}{2-2}{3-3}@]
-\hline
-a & b & c \\ \hline
-e & f & g \\ \hline
-h & i & j \\ \hline
-\end{NiceTabular}
-\end{BVerbatim}
-\begin{NiceTabular}{|C|C|C|}[code-before = \rectanglecolor{red!15}{2-2}{3-3}]
-\hline
-a & b & c \\ \hline
-e & f & g \\ \hline
-h & i & j \\ \hline
-\end{NiceTabular}
-\end{scope}
-
-
-
-\bigskip
-\item La commande |\rowcolor| doit son nom à la commande |\rowcolor| de \pkg{colortbl}. Son premier argument est la
-couleur et le deuxième est une liste de numéros de rangées ou bien d'intervalles de rangées sous la forme
-$a$-$b$ (un intervalle de la forme $a$- représente toutes les rangées à partir de la rangée~$a$).
-
-\medskip
-
-\begin{scope}
-\hfuzz=10cm
-\begin{BVerbatim}[boxwidth=9cm,baseline=c]
-$\begin{NiceArray}{LLL}[hvlines, ~emphase#code-before = \rowcolor{red!15}{1,3-5,8-}@]
-a_1 & b_1 & c_1 \\
-a_2 & b_2 & c_2 \\
-a_3 & b_3 & c_3 \\
-a_4 & b_4 & c_4 \\
-a_5 & b_5 & c_5 \\
-a_6 & b_6 & c_6 \\
-a_7 & b_7 & c_7 \\
-a_8 & b_8 & c_8 \\
-a_9 & b_9 & c_9 \\
-a_{10} & b_{10} & c_{10} \\
-\end{NiceArray}$
-\end{BVerbatim}
-%
-$\begin{NiceArray}{LLL}%
-[baseline=4,hvlines, code-before = \rowcolor{red!15}{1,3-5,8-}]
-a_1 & b_1 & c_1 \\
-a_2 & b_2 & c_2 \\
-a_3 & b_3 & c_3 \\
-a_4 & b_4 & c_4 \\
-a_5 & b_5 & c_5 \\
-a_6 & b_6 & c_6 \\
-a_7 & b_7 & c_7 \\
-a_8 & b_8 & c_8 \\
-a_9 & b_9 & c_9 \\
-a_{10} & b_{10} & c_{10} \\
-\end{NiceArray}$
-\end{scope}
-
-
-\bigskip
-\item La commande |\columncolor| doit son nom à la commande |\columncolor| de \pkg{colortbl}. Sa syntaxe est
-similaire à celle de |\rowcolor|.
-
-\bigskip
-\item La commande |\rowcolors| (avec un \emph{s}) doit son nom à la commande |\rowcolors| de \pkg{xcolor}. Le
-\emph{s} rappelle qu'il y a deux couleurs. Elle colorie alternativement les rangées avec les deux couleurs à partir
-de la rangée dont le numéro est donné en premier argument.
-
\medskip
-
-
-\begin{scope}
-\hfuzz=10cm
-\begin{BVerbatim}[baseline=c,boxwidth=9cm]
-\begin{NiceTabular}{LR}%
-[~emphase#code-before = \rowcolor{red!15}{1} \rowcolors{3}{blue!10}{}@]
-\toprule
-Ville & habitants \\
-\midrule
-Pau & 80000 \\
-Paris & 2000000 \\
-Toulouse & 700000 \\
-Reims & 40000 \\
-\bottomrule
-\end{NiceTabular}
-\end{BVerbatim}
-\begin{NiceTabular}{LR}[code-before =\rowcolor{red!15}{1} \rowcolors{3}{blue!10}{}]
-\toprule
-Ville & habitants \\
-\midrule
-Pau & 80000 \\
-Paris & 2000000 \\
-Toulouse & 700000 \\
-Reims & 40000 \\
-\bottomrule
-\end{NiceTabular}
-\end{scope}
-
-\bigskip
-\item La commande |\chessboardcolors| prend en arguments deux couleurs et colorie les cellules en quinconces avec
-les deux couleurs.
-
-\medskip
-\begin{scope}
-\hfuzz=10cm
-\begin{BVerbatim}[baseline=c,boxwidth=9cm]
-$\begin{pNiceMatrix}[R,margin, ~emphase#code-before=\chessboardcolors{red!15}{blue!15}@]
-1 & -1 & 1 \\
--1 & 1 & -1 \\
-1 & -1 & 1
-\end{pNiceMatrix}$
-\end{BVerbatim}
-$\begin{pNiceMatrix}%
-[baseline=1, R, margin, code-before = \chessboardcolors{red!15}{blue!15}]
-1 & -1 & 1 \\
--1 & 1 & -1 \\
-1 & -1 & 1
-\end{pNiceMatrix}$
-\end{scope}
-
-\end{itemize}
+En revanche, les colonnes |d| de l'extension \pkg{dcolumn} ne sont pas prises en charge par \pkg{nicematrix}.
-\section{Fonctionnalités avancées}
+\subsection{Option d'alignement dans \{NiceMatrix\}}
-\subsection{Option d'alignement dans NiceMatrix}
+\label{key-R}
Les environnements sans préambule (|{NiceMatrix}|, |{pNiceMatrix}|, |{bNiceMatrix}|, etc.) proposent les options
-|l| et |r| (possédant |L| et |R| comme alias) qui imposent des colonnes alignées à gauche ou à
-droite.\footnote{Cela reprend une partie des fonctionnalités proposées par les environnements |{pmatrix*}|,
- |{bmatrix*}|, etc. de \pkg{mathtools}.}
+|l| et |r| (possédant |L| et |R| comme alias) qui imposent des colonnes alignées à gauche ou à droite.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -1675,7 +1736,10 @@ $\begin{bNiceMatrix}[R]
\sin x & \cos x
\end{bNiceMatrix}$
-
+\medskip
+Il existe aussi l'option |S| qui impose que toutes les colonnes soient des colonnes |S| de \pkg{siunitx} (si cette
+extension est chargée).\footnote{Cela reprend une partie des fonctionnalités proposées par les environnements |{pmatrix*}|,
+ |{bmatrix*}|, etc. de \pkg{mathtools}.}
\subsection{La commande \textbackslash rotate}
@@ -1790,8 +1854,9 @@ numéro de la rangée courante et le numéro de la colonne courante\footnote{On
Bien entendu, l'utilisateur ne doit pas modifier les valeurs de ces compteurs qui sont utilisés en interne par
\pkg{nicematrix}.
-Dans le |code-after| (cf. p. \pageref{code-after}), |iRow| représente le nombre total de rangées (hors éventuelles
-rangées extérieures) et |jCol| le nombre total de colonnes (hors potentielles colonnes extérieures).
+Dans le |code-before| (cf. p. \pageref{code-before}) et dans le |code-after| (cf. p. \pageref{code-after}), |iRow|
+représente le nombre total de rangées (hors éventuelles rangées extérieures) et |jCol| le nombre total de colonnes
+(hors potentielles colonnes extérieures).
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
@@ -1818,8 +1883,8 @@ $\begin{pNiceMatrix}[first-row,
\medskip
Si des compteurs LaTeX nommés |iRow| ou |jCol| sont créés dans le document par d'autres extensions que
-\pkg{nicematrix} (ou tout simplement par l'utilisateur), ces compteurs sont masqués dans les environnements de
-\pkg{nicematrix}.
+\pkg{nicematrix} (ou tout simplement par l'utilisateur final), ces compteurs sont masqués dans les environnements
+de \pkg{nicematrix}.
\bigskip
@@ -1838,166 +1903,460 @@ $C = ~emphase#\pAutoNiceMatrix@{3-3}{C_{\arabic{iRow},\arabic{jCol}}}$
\end{Verbatim}
-$C = \pAutoNiceMatrix{3-3}{C_{\arabic{iRow},\arabic{jCol}}}$
+\[C = \pAutoNiceMatrix{3-3}{C_{\arabic{iRow},\arabic{jCol}}}\]
-\subsection{Les options hlines, vlines et hvlines}
-\label{hvlines}
-Dans les environnements de \pkg{nicematrix}, on peut bien entendu ajouter des filets horizontaux entre les rangées
-avec la commande~|\hline| et des filets verticaux avec le spécificateur ``\verb+|+'' dans le préambule de
-l'environnement. Par souci de commodité, l'extension \pkg{nicematrix} fournit aussi l'option |hlines| (resp.
-|vlines|) qui impose directement que tous les filets horizontaux (resp. verticaux) soient tracés (à l'exception,
-très naturelle, des filets extérieurs aux rangées et colonnes extérieures). L'option |hvlines| est la conjonction
-des options |hlines| et |vlines|.
+\subsection{L'option light-syntax}
+
+\label{light-syntax}
+
+L'option |light-syntax| (inspirée de l'extension \pkg{spalign}) permet d'alléger la saisie des matrices, ainsi que
+leur lisibilité dans le source TeX. Lorsque cette option est activée, on doit utiliser le point-virgule comme
+marqueur de fin de rangée et séparer les colonnes par des espaces ou des tabulations. On remarquera toutefois que,
+comme souvent dans le monde TeX, les espaces après les séquences de contrôle ne sont pas comptées et que les
+éléments entre accolades sont considérés comme un tout.
+
\medskip
-Dans l'exemple suivant, on utilise la commande |\arrayrulecolor| de \pkg{colortbl}.
+\begin{scope}
+\begin{BVerbatim}[baseline=c,boxwidth=10cm]
+$\begin{bNiceMatrix}[~emphase#light-syntax@,first-row,first-col]
+{} a b ;
+a 2\cos a {\cos a + \cos b} ;
+b \cos a+\cos b { 2 \cos b }
+\end{bNiceMatrix}$
+\end{BVerbatim}
+\end{scope}
+%
+$\begin{bNiceMatrix}[light-syntax,first-row,first-col]
+{} a b ;
+a 2\cos a {\cos a + \cos b} ;
+b \cos a+\cos b { 2 \cos b }
+\end{bNiceMatrix}$
+
+\medskip
+On peut changer le caractère utilisé pour indiquer les fins de rangées avec l'option |end-of-row|. Comme dit
+précédemment, la valeur initiale de ce paramètre est un point-virgule.
+
+\medskip
+Lorsque l'option |light-syntax| est utilisée, il n'est pas possible de mettre d'éléments en verbatim (avec par
+exemple la commande |\verb|) dans les cases du tableau.\footnote{La raison en est que lorsque l'option
+ |light-syntax| est utilisée, le contenu complet de l'environnement est chargé comme un argument de commande TeX.
+ L'environnement ne se comporte plus comme un «vrai» environnement de LaTeX qui se contente d'insérer des
+ commandes avant et après.}
+\subsection{L'environnement \{NiceArrayWithDelims\}}
+En fait, l'environnement |{pNiceArray}| et ses variantes sont fondés sur un environnement plus général, appelé
+|{NiceArrayWithDelims}|. Les deux premiers arguments obligatoires de cet environnement sont les délimiteurs gauche
+et droit qui seront utilisés dans la construction de la matrice. Il est possible d'utiliser |{NiceArrayWithDelims}|
+si on a besoin de délimiteurs atypiques ou asymétriques.
\medskip
\begin{BVerbatim}[baseline=c,boxwidth=11cm]
-\arrayrulecolor{blue}
-$\begin{NiceArray}{CCCC}[~emphase#hvlines@,first-row,first-col]
- & e & a & b & c \\
-e & e & a & b & c \\
-a & a & e & c & b \\
-b & b & c & e & a \\
-c & c & b & a & e
-\end{NiceArray}$
-\arrayrulecolor{black}
+$\begin{~emphase#NiceArrayWithDelims@}
+ {\downarrow}{\uparrow}{CCC}[margin]
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+7 & 8 & 9
+\end{~emphase#NiceArrayWithDelims@}$
\end{BVerbatim}
%
-\arrayrulecolor{blue}
-$\begin{NiceArray}{CCCC}[hvlines,first-row,first-col]
- & e & a & b & c \\
-e & e & a & b & c \\
-a & a & e & c & b \\
-b & b & c & e & a \\
-c & c & b & a & e
-\end{NiceArray}$
-\arrayrulecolor{black}
+$\begin{NiceArrayWithDelims}
+ {\downarrow}{\uparrow}{CCC}[margin]
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+7 & 8 & 9
+\end{NiceArrayWithDelims}$
+
+
+\section{Utilisation de Tikz avec nicematrix}
+
+\label{name}
+
+\subsection{Les nœuds correspondant aux contenus des cases}
+
+L'extension \pkg{nicematrix} crée un nœud PGF-Tikz pour chaque case (non vide) du tableau considéré. Ces nœuds sont
+utilisés, entre autres, pour tracer les lignes en pointillés entre les cases du tableau.
+
+\smallskip
+Tous les nœuds du document doivent avoir des noms deux à deux distincts et le nom de ces nœuds doit donc faire
+intervenir le numéro de l'environnement courant. Les environnements créés par \pkg{nicematrix} sont en effet
+numérotés par un compteur global interne.
+
+\smallskip
+Si l'environnement concerné a le numéro $n$, alors le nœud de la rangée~$i$ et de la colonne~$j$ a pour nom
+|nm-|$n$|-|$i$|-|$j$.
+
+\smallskip
+La commande |\NiceMatrixLastEnv| donne le numéro du dernier de ces environnements (pour LaTeX, il s'agit d'une
+commande — complètement développable — et non d'un compteur).
+
+\smallskip
+Il est néanmoins recommandé de passer plutôt par la clé |name|. Celle-ci permet de donner un nom à l'environnement.
+Une fois l'environnement nommé, les nœuds sont accessibles à travers les noms «\textsl{nom}-$i$-$j$» où
+\textsl{nom} est le nom donné au tableau et $i$ et $j$ les numéros de rangée et de colonne de la case considérée.
+On peut les utiliser avec \textsc{pgf} mais l'utilisateur final préférera sans doute utiliser Tikz (qui est une
+sur-couche de \textsc{pgf}). Il faut néanmoins se souvenir que \pkg{nicematrix} ne charge pas Tikz par défault.
\bigskip
-Il y a néanmoins une différence entre l'utilisation de l'option |vlines| et du spécificateur «\verb+|+» dans le
-préambule de l'environnement : les filets tracés par |vlines| traversent les double-filets horizontaux tracés par
-|\hline\hline|.
+\begin{BVerbatim}[baseline=c,boxwidth=11cm]
+$\begin{pNiceMatrix}[name=~emphase#ma-matrice@]
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+7 & 8 & 9
+\end{pNiceMatrix}$
+\tikz[remember picture,overlay]
+ \draw ~emphase#(ma-matrice-2-2)@ circle (2mm) ;
+\end{BVerbatim}
+$\begin{pNiceMatrix}[name=ma-matrice]
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+7 & 8 & 9
+\end{pNiceMatrix}$
+\tikz[remember picture,overlay]
+ \draw (ma-matrice-2-2) circle (2mm) ;
\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=11.5cm]
-$\begin{NiceArray}{CCCC}[vlines] \hline
-a & b & c & d \\ \hline \hline
-1 & 2 & 3 & 4 \\
-1 & 2 & 3 & 4 \\ \hline
-\end{NiceArray}$
-\end{BVerbatim}
-%
-$\begin{NiceArray}{CCCC}[vlines]
-\hline
-a & b & c & d \\
-\hline \hline
-1 & 2 & 3 & 4 \\
-1 & 2 & 3 & 4 \\
-\hline
-\end{NiceArray}$
+Ne pas oublier les options |remember picture| et |overlay|.
+
\bigskip
-Dans le cas d'un environnement avec délimiteurs (par exemple |{pNiceArray}| ou |{pNiceMatrix}|), l'option |vlines| ne
-trace pas de filets verticaux au niveau des deux délimiteurs (bien entendu).
+Dans le |code-after|, et si Tikz est chargé, les choses sont plus simples. On peut (et on doit) désigner les nœuds
+sous la forme $i$-$j$ : il n'y a pas besoin de préciser l'environnement qui est évidemment l'environnement courant.
+
\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
-\setlength{\arrayrulewidth}{0.2pt}
-$\begin{pNiceMatrix}[vlines]
-1 & 2 & 3 & 4 & 5 & 6 \\
-1 & 2 & 3 & 4 & 5 & 6 \\
-1 & 2 & 3 & 4 & 5 & 6 \\
+\begin{BVerbatim}[baseline=c,boxwidth=11cm]
+$\begin{pNiceMatrix}
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+7 & 8 & 9
+\CodeAfter
+\tikz \draw ~emphase#(2-2)@ circle (2mm) ;
\end{pNiceMatrix}$
\end{BVerbatim}
-%
-\begin{scope}
-\setlength{\arrayrulewidth}{0.2pt}
-$\begin{pNiceMatrix}[vlines]
-1 & 2 & 3 & 4 & 5 & 6 \\
-1 & 2 & 3 & 4 & 5 & 6 \\
-1 & 2 & 3 & 4 & 5 & 6 \\
+$\begin{pNiceMatrix}
+1 & 2 & 3 \\
+4 & 5 & 6 \\
+7 & 8 & 9
+\CodeAfter
+\tikz \draw (2-2) circle (2mm) ;
\end{pNiceMatrix}$
-\end{scope}
+\bigskip
+Dans l'exemple suivant, nous avons surligné tous nœuds de la matrice (on explique plus loin la technique utilisée :
+cf. p. \pageref{highlight}).
-\subsection{L'option light-syntax}
+\[\begin{pNiceMatrix}
+a & a + b & a + b + c \\
+a & a & a + b \\
+a & a & a
+\CodeAfter
+\begin{tikzpicture}[
+ every node/.style =
+ {
+ blend mode = multiply,
+ inner sep = 0 pt ,
+ fill = red!15
+ }
+ ]
+\node [fit = (1-1)] {} ;
+\node [fit = (1-3)] {} ;
+\node [fit = (2-2)] {} ;
+\node [fit = (3-1)] {} ;
+\node [fit = (3-3)] {} ;
+\node [fit = (1-2)] {} ;
+\node [fit = (2-1)] {} ;
+\node [fit = (2-3)] {} ;
+\node [fit = (3-2)] {} ;
+\end{tikzpicture}
+\end{pNiceMatrix}\]
-\label{light-syntax}
-L'option |light-syntax|\footnote{Cette option est inspirée de l'extension \pkg{spalign} de Joseph Rabinoff.} permet
-d'alléger la saisie des matrices, ainsi que leur lisibilité dans le source TeX. Lorsque cette option est activée,
-on doit utiliser le point-virgule comme marqueur de fin de rangée et séparer les colonnes par des espaces ou des
-tabulations. On remarquera toutefois que, comme souvent dans le monde TeX, les espaces après les séquences de
-contrôle ne sont pas comptées et que les éléments entre accolades sont considérés comme un tout.
+\subsection{Les «nœuds moyens» et les «nœuds larges»}
+En fait, l'extension \pkg{nicematrix} peut créer deux séries de nœuds supplémentaires (\emph{extra nodes} en
+anglais) : les «nœuds moyens» (\emph{medium nodes} en anglais) et les «nœuds larges» (\emph{large nodes} en
+anglais). Les premiers sont créés avec l'option |create-medium-nodes| et les seconds avec l'option
+|create-large-nodes|.\footnote{Il existe aussi l'option |create-extra-nodes| qui est un alias pour la conjonction
+de |create-medium-nodes| et |create-large-nodes|.}
+
\medskip
-\begin{scope}
-\begin{BVerbatim}[baseline=c,boxwidth=10cm]
-$\begin{bNiceMatrix}[~emphase#light-syntax@,first-row,first-col]
-{} a b ;
-a 2\cos a {\cos a + \cos b} ;
-b \cos a+\cos b { 2 \cos b }
-\end{bNiceMatrix}$
-\end{BVerbatim}
-\end{scope}
-%
-$\begin{bNiceMatrix}[light-syntax,first-row,first-col]
-{} a b ;
-a 2\cos a {\cos a + \cos b} ;
-b \cos a+\cos b { 2 \cos b }
-\end{bNiceMatrix}$
+Ces nœuds ne sont pas utilisés par défault par \pkg{nicematrix}.
\medskip
-On peut changer le caractère utilisé pour indiquer les fins de rangées avec l'option |end-of-row|. Comme dit
-précédemment, la valeur initiale de ce paramètre est un point-virgule.
+Les noms des «nœuds moyens» s'obtiennent en ajoutant le suffixe «|-medium|» au nom des nœuds normaux. Dans
+l'exemple suivant, on a surligné tous les «nœuds moyens». Nous considérons que cet exemple se suffit à lui-même
+comme définition de ces nœuds.
+\[\begin{pNiceMatrix}[
+ create-medium-nodes,
+ code-after = {\begin{tikzpicture}
+ [every node/.style = {fill = red!15,
+ blend mode = multiply,
+ inner sep = 0 pt},
+ name suffix = -medium]
+ \node [fit = (1-1)] {} ;
+ \node [fit = (1-2)] {} ;
+ \node [fit = (1-3)] {} ;
+ \node [fit = (2-1)] {} ;
+ \node [fit = (2-2)] {} ;
+ \node [fit = (2-3)] {} ;
+ \node [fit = (3-1)] {} ;
+ \node [fit = (3-2)] {} ;
+ \node [fit = (3-3)] {} ;
+ \end{tikzpicture}}]
+a & a + b & a + b + c \\
+a & a & a + b \\
+a & a & a
+\end{pNiceMatrix}\]
+
\medskip
-Lorsque l'option |light-syntax| est utilisée, il n'est pas possible de mettre d'éléments en verbatim (avec par
-exemple la commande |\verb|) dans les cases du tableau.\footnote{La raison en est que lorsque l'option
- |light-syntax| est utilisée, le contenu complet de l'environnement est chargé comme un argument de commande TeX.
- L'environnement ne se comporte plus comme un «vrai» environnement de LaTeX qui se contente d'insérer des
- commandes avant et après.}
+Les noms des «nœuds larges» s'obtiennent en ajoutant le suffixe «|-large|» au nom des nœuds normaux. Dans l'exemple
+suivant, on a surligné tous les «nœuds larges». Nous considérons que cet exemple se suffit à lui-même comme
+définition de ces nœuds.\footnote{Il n'y a pas de «nœuds larges» créés dans les rangées et colonnes extérieures
+ (pour ces rangées et colonnes, voir p.~\pageref{exterior}).}
-\subsection{Utilisation du type de colonne S de siunitx}
+\[\begin{pNiceMatrix}[
+ create-large-nodes,
+ code-after = {\begin{tikzpicture}
+ [every node/.style = {blend mode = multiply,
+ inner sep = 0 pt},
+ name suffix = -large]
+ \node [fit = (1-1),fill = red!15] {} ;
+ \node [fit = (1-3),fill = red!15] {} ;
+ \node [fit = (2-2),fill = red!15] {} ;
+ \node [fit = (3-1),fill = red!15] {} ;
+ \node [fit = (3-3),fill = red!15] {} ;
+ \node [fit = (1-2),fill = blue!15] {} ;
+ \node [fit = (2-1),fill = blue!15] {} ;
+ \node [fit = (2-3),fill = blue!15] {} ;
+ \node [fit = (3-2),fill = blue!15] {} ;
+ \end{tikzpicture}}]
+a & a + b & a + b + c \\
+a & a & a + b \\
+a & a & a
+\end{pNiceMatrix}\]
-Si l'extension \pkg{siunitx} est chargée (avant ou après \pkg{nicematrix}), il est possible d'utiliser les colonnes
-de type |S| de \pkg{siunitx} dans les environnements de \pkg{nicematrix}. L'implémentation n'utilise explicitement
-aucune macro privée de \pkg{siunitx}.
\medskip
-\begin{BVerbatim}[baseline = c, boxwidth = 10.5cm]
-$\begin{pNiceArray}{~emphase#S@CWc{1cm}C}[nullify-dots,first-row]
-{C_1} & \Cdots & & C_n \\
-2.3 & 0 & \Cdots & 0 \\
-12.4 & \Vdots & & \Vdots \\
-1.45 \\
-7.2 & 0 & \Cdots & 0
-\end{pNiceArray}$
-\end{BVerbatim}
-$\begin{pNiceArray}{SCWc{1cm}C}[nullify-dots,first-row]
-{C_1} & \Cdots & & C_n \\
-2.3 & 0 & \Cdots & 0 \\
-12.4 & \Vdots & & \Vdots \\
-1.45 \\
-7.2 & 0 & \Cdots & 0
-\end{pNiceArray}$
+Les «nœuds larges» de la première colonne et de la dernière colonne peuvent apparaître trop petits pour certains
+usages. C'est pourquoi il est possible d'utiliser les options |left-margin| et |right-margin| pour ajouter de
+l'espace des deux côtés du tableau et aussi de l'espace dans les «nœuds larges» de la première colonne et de la
+dernière colonne. Dans l'exemple suivant, nous avons utilisé les options |left-margin| et
+|right-margin|.\footnote{Les options |left-margin| et |right-margin| prennent des dimensions comme valeurs mais, si
+ aucune valeur n'est donnée, c'est la valeur par défaut qui est utilisée et elle est égale à |\arraycolsep| (par
+ défaut, 5~pt). Il existe aussi une option |margin| pour fixer à la fois |left-margin| et |right-margin|.}
+\[\begin{pNiceMatrix}[
+ create-large-nodes,left-margin,right-margin,
+ code-after = {\begin{tikzpicture}
+ [every node/.style = {blend mode = multiply,
+ inner sep = 0 pt},
+ name suffix = -large]
+ \node [fit = (1-1),fill = red!15] {} ;
+ \node [fit = (1-3),fill = red!15] {} ;
+ \node [fit = (2-2),fill = red!15] {} ;
+ \node [fit = (3-1),fill = red!15] {} ;
+ \node [fit = (3-3),fill = red!15] {} ;
+ \node [fit = (1-2),fill = blue!15] {} ;
+ \node [fit = (2-1),fill = blue!15] {} ;
+ \node [fit = (2-3),fill = blue!15] {} ;
+ \node [fit = (3-2),fill = blue!15] {} ;
+ \end{tikzpicture}}]
+a & a + b & a + b + c \\
+a & a & a + b \\
+a & a & a
+\end{pNiceMatrix}\]
\medskip
-En revanche, les colonnes |d| de l'extension \pkg{dcolumn} ne sont pas prises en charge par \pkg{nicematrix}.
+Il est aussi possible d'ajouter de l'espace sur les côtés du tableau avec les options |extra-left-margin| et
+|extra-right-margin|. Ces marges ne sont pas incorporées dans les «nœuds larges». Dans l'exemple suivant, nous
+avons utilisé |extra-left-margin| et |extra-right-margin| avec la valeur $3$~pt.
+\[\begin{pNiceMatrix}[
+ create-large-nodes,left-margin,right-margin,extra-right-margin=3pt,extra-left-margin=3pt,
+ code-after = {\begin{tikzpicture}
+ [every node/.style = {blend mode = multiply,
+ inner sep = 0 pt},
+ name suffix = -large]
+ \node [fit = (1-1),fill = red!15] {} ;
+ \node [fit = (1-3),fill = red!15] {} ;
+ \node [fit = (2-2),fill = red!15] {} ;
+ \node [fit = (3-1),fill = red!15] {} ;
+ \node [fit = (3-3),fill = red!15] {} ;
+ \node [fit = (1-2),fill = blue!15] {} ;
+ \node [fit = (2-1),fill = blue!15] {} ;
+ \node [fit = (2-3),fill = blue!15] {} ;
+ \node [fit = (3-2),fill = blue!15] {} ;
+ \end{tikzpicture}}]
+a & a + b & a + b + c \\
+a & a & a + b \\
+a & a & a
+\end{pNiceMatrix}\]
+
+
+\bigskip
+\textbf{Attention} : Ces nœuds sont reconstruits à partir des contenus des cases et ne correspondent donc pas
+nécessairement aux cases délimitées par des filets.
+
+\bigskip
+\begin{minipage}[c]{7.5cm}
+Voici un tableau qui a été composé de la manière suivante :
+
+\medskip
+\begin{BVerbatim}
+\large
+\begin{NiceTabular}{wl{2cm}LL}[hvlines]
+fraise & amande & abricot \\
+prune & pêche & poire \\[1ex]
+noix & noisette & brugnon
+\end{NiceTabular}
+\end{BVerbatim}
+\end{minipage}
+\hspace{1cm}
+\begin{scope}
+\large
+\begin{NiceTabular}[c]{wl{2cm}LL}[hvlines]
+fraise & amande & abricot \\
+prune & pêche & poire \\[1ex]
+noix & noisette & brugnon
+\end{NiceTabular}
+\end{scope}
+
+\vspace{1cm}
+\begin{minipage}[c]{7cm}
+Ci-contre, on a colorié toutes les cases de ce tableau avec |\chessboardcolors|.
+\end{minipage}
+\hspace{1.5cm}
+\begin{scope}
+\large
+\begin{NiceTabular}[c]{wl{2cm}LL}[hvlines,code-before = \chessboardcolors{red!15}{blue!15}]
+fraise & amande & abricot \\
+prune & pêche & poire \\[1ex]
+noix & noisette & brugnon
+\end{NiceTabular}
+\end{scope}
+
+
+\vspace{1cm}
+\begin{minipage}[c]{7cm}
+Voici maintenant tous les «nœuds larges» de ce tableau (sans utilisation de |margin| ni de |extra-margin|).
+\end{minipage}
+\hspace{1.5cm}
+\begin{scope}
+\large
+\begin{NiceTabular}[c]{wl{2cm}LL}[hvlines,
+ create-large-nodes,
+ code-after = {\begin{tikzpicture}
+ [every node/.style = {blend mode = multiply,
+ inner sep = 0 pt},
+ name suffix = -large]
+ \node [fit = (1-1),fill = red!15] {} ;
+ \node [fit = (1-3),fill = red!15] {} ;
+ \node [fit = (2-2),fill = red!15] {} ;
+ \node [fit = (3-1),fill = red!15] {} ;
+ \node [fit = (3-3),fill = red!15] {} ;
+ \node [fit = (1-2),fill = blue!15] {} ;
+ \node [fit = (2-1),fill = blue!15] {} ;
+ \node [fit = (2-3),fill = blue!15] {} ;
+ \node [fit = (3-2),fill = blue!15] {} ;
+ \end{tikzpicture}}]
+fraise & amande & abricot \\
+prune & pêche & poire \\[1ex]
+noix & noisette & brugnon
+\end{NiceTabular}
+\end{scope}
+
+
+
+
+
+
+\subsection{Les nœuds «row» et «col»}
+
+L'extension \pkg{nicematrix} crée un nœud PGF-Tikz indiquant la position potentielle de chaque filet horizontal
+(avec les noms |row-|$i$) et de chaque filet vertical (avec les noms |col-|$j$), comme décrit sur la figure
+ci-dessous. Ces nœuds sont accessibles dans le |code-before| et dans le |code-after|.
+\begin{center}
+\begin{NiceTabular}{CCC}[hvlines,rules/width=1pt,rules/color=gray]
+rose & tulipe & lys \\
+arum & iris & violette \\
+muguet & dahlia & souci
+\CodeAfter
+\tiny
+\begin{tikzpicture}
+\foreach \i in {1,2,3,4}
+ {
+ \fill [red] (row-\i) circle (0.5mm) ;
+ \node [red,anchor=east] at (row-\i) {row-\i} ;
+ }
+\foreach \j in {1,2,3,4}
+ {
+ \fill [blue] (col-\j) circle (0.5mm) ;
+ \node [blue,anchor=north] at (col-\j) {col-\j} ;
+ }
+\end{tikzpicture}
+\end{NiceTabular}
+\end{center}
+
+
+\bigskip
+Si on utilise Tikz (on rappelle que \pkg{nicematrix} ne charge pas Tikz par défaut), on peut donc accéder (dans le
+|code-before| et le |code-after|) à l'intersection du filet horizontal~$i$ et du filet vertical~$j$ avec la syntaxe
+|(row-|$i$\verb+-|col-+$j$|)|.
+
+
+\medskip
+\begin{Verbatim}
+\[\begin{NiceMatrix}[
+ code-before =
+ {
+~emphase# \tikz \draw [fill = red!15] @
+~emphase# (row-7-|col-4) -- (row-8-|col-4) -- (row-8-|col-5) -- @
+~emphase# (row-9-|col-5) -- (row-9-|col-6) |- cycle ; @
+ }
+]
+1 \\
+1 & 1 \\
+1 & 2 & 1 \\
+1 & 3 & 3 & 1 \\
+1 & 4 & 6 & 4 & 1 \\
+1 & 5 & 10 & 10 & 5 & 1 \\
+1 & 6 & 15 & 20 & 15 & 6 & 1 \\
+1 & 7 & 21 & 35 & 35 & 21 & 7 & 1 \\
+1 & 8 & 28 & 56 & 70 & 56 & 28 & 8 & 1
+\end{NiceMatrix}\]
+\end{Verbatim}
+%
+\[\begin{NiceMatrix}[
+ code-before =
+ {
+ \tikz \draw [fill = red!15]
+ (row-7-|col-4) -- (row-8-|col-4) -- (row-8-|col-5) --
+ (row-9-|col-5) -- (row-9-|col-6) |- cycle ;
+ }
+]
+1 \\
+1 & 1 \\
+1 & 2 & 1 \\
+1 & 3 & 3 & 1 \\
+1 & 4 & 6 & 4 & 1 \\
+1 & 5 & 10 & 10 & 5 & 1 \\
+1 & 6 & 15 & 20 & 15 & 6 & 1 \\
+1 & 7 & 21 & 35 & 35 & 21 & 7 & 1 \\
+1 & 8 & 28 & 56 & 70 & 56 & 28 & 8 & 1
+\end{NiceMatrix}\]
+
+
\section{Remarques techniques}
Première remarque : l'extension \pkg{nicematrix} doit être chargée après l'extension \pkg{underscore}. Si ce n'est
@@ -2040,26 +2399,13 @@ C_1 & C_2 & C_3 & C_4
\end{scope}
\medskip
-Le spécificateur |?| ainsi créé est aussi utilisable dans les environnements |{array}| (de \pkg{array}) et, dans ce
-cas, |\OnlyMainNiceMatrix| est sans effet.
-
+Le spécificateur |?| ainsi créé est aussi utilisable dans les environnements |{tabular}| et |{array}| (de
+\pkg{array}) et, dans ce cas, |\OnlyMainNiceMatrix| est sans effet.
-\subsection{Le nom des nœuds PGF créés par nicematrix}
-Les nœuds PGF-Tikz créés par \pkg{nicematrix} peuvent être utilisés hors des environnements de \pkg{nicematrix}
-après avoir nommé l'environnement concerné avec l'option |name| (cf. p.~\pageref{name}). Il s'agit là de la méthode
-conseillée mais on décrit néanmoins maintenant le nom Tikz interne de ces nœuds.
-
-Les environnements créés par \pkg{nicematrix} sont numérotés par un compteur global interne. La commande
-|\NiceMatrixLastEnv| donne le numéro du dernier de ces environnements (pour LaTeX, il s'agit d'une commande —
-complètement développable — et non d'un compteur).
-
-Si l'environnement concerné a le numéro $n$, alors le nœud de la rangée~$i$ et de la colonne~$j$ a pour nom
-|nm-|$n$|-|$i$|-|$j$. Les noms des nœuds |medium| et |large| correspondants s'obtiennent en suffixant par |-medium|
-et |-large|.
\subsection{Lignes diagonales}
@@ -2185,91 +2531,14 @@ Avec cette option, des espaces extérieurs de longueur |\arraycolsep| seront ins
-\subsection{Un problème technique avec l'argument de \textbackslash\textbackslash}
-
-Pour des raisons techniques, si vous utilisez l'argument optionnel de la commande |\\|, l'espace vertical sera
-aussi ajouté au nœud («normal») correspondant à la case précédente.
+\subsection{Incompatibilités}
+L'extension \pkg{nicematrix} n'est pas compatible with \pkg{threeparttable}.
\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=11cm]
- \begin{pNiceMatrix}
- a & \frac AB \\~emphase#[2mm]@
- b & c
- \end{pNiceMatrix}
-\end{BVerbatim}
-$\begin{pNiceMatrix}[
- code-after = {\tikz \node [inner sep = 0pt,
- fill = red!15,
- blend mode = multiply,
- fit = (1-2) ] {} ; } ]
-a & \frac AB \\[2mm]
-b & c
-\end{pNiceMatrix}$
-
-\bigskip
-Il y a deux solutions pour résoudre ce problème. La première solution est d'utiliser une commande TeX pour insérer
-l'espace entre les deux rangées.
-
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=11cm]
- \begin{pNiceMatrix}
- a & \frac AB \\
- ~emphase#\noalign{\kern2mm}@
- b & c
- \end{pNiceMatrix}
-\end{BVerbatim}
-$\begin{pNiceMatrix}[
- code-after = {\tikz \node [inner sep = 0pt,
- fill = red!15,
- blend mode = multiply,
- fit = (1-2) ] {} ; } ]
-a & \frac AB \\
-\noalign{\kern2mm}
-b & c
-\end{pNiceMatrix}$
-
-
-\bigskip
-L'autre solution est d'utiliser la commande |\multicolumn| dans la case précédente :
-
-\medskip
-\begin{BVerbatim}[baseline=c,boxwidth=11cm]
- \begin{pNiceMatrix}
- a & ~emphase#\multicolumn1C{\frac AB}@ \\[2mm]
- b & c
- \end{pNiceMatrix}
-\end{BVerbatim}
-$\begin{pNiceMatrix}[
- code-after = {\tikz \node [inner sep = 0pt,
- fill = red!15,
- blend mode = multiply,
- fit = (1-2) ] {} ; } ]
-a & \multicolumn1C{\frac AB} \\[2mm]
-b & c
-\end{pNiceMatrix}$
-
-\subsection{Environnements obsolètes}
-
-La version 3.0 de \pkg{nicematrix} a introduit l'environnement |{pNiceArray}| (et ses variantes) avec les options
-|first-row|, |last-row|, |first-col| et |last-col|.
-
-Par conséquent, les environnements suivants, présents dans les versions précédentes de \pkg{nicematrix} ont été
-supprimés.
-%
-\begin{itemize}
-\item |{NiceArrayCwithDelims}| ;
-\item |{pNiceArrayC}|, |{bNiceArrayC}|, |{BNiceArrayC}|, |{vNiceArrayC}|,
-|{VNiceArrayC}| ;
-\item |{NiceArrayRCwithDelims}| ;
-\item |{pNiceArrayRC}|, |{bNiceArrayRC}|, |{BNiceArrayRC}|, |{vNiceArrayRC}|,
-|{VNiceArrayRC}|.
-\end{itemize}
-
-Le code correspondant est toutefois encore présent à la fin du fichier |nicematrix.sty|, après une
-commande |\file_input_stop:|.
-
+L'extension \pkg{nicematrix} n'est pas parfaitement compatible avec l'extension \pkg{arydshln} (parce que cette
+extension redéfinit de nombreuses commandes internes de \pkg{array}).
\section{Exemples}
@@ -2402,11 +2671,9 @@ a_p & &&a_0 & & &b_1 \\
\end{scope}
\vspace{2cm}
-Un exemple avec un système linéaire (le trait vertical a été tracé en bleu avec les outils de
-\pkg{colortbl}):\par\nobreak
+Un exemple avec un système linéaire:\par\nobreak
\begin{Verbatim}
-\arrayrulecolor{blue}
$\begin{pNiceArray}{*6C|C}[nullify-dots,last-col,code-for-last-col=\scriptstyle]
1 & 1 & 1 &\Cdots & & 1 & 0 & \\
0 & 1 & 0 &\Cdots & & 0 & & L_2 \gets L_2-L_1 \\
@@ -2415,10 +2682,9 @@ $\begin{pNiceArray}{*6C|C}[nullify-dots,last-col,code-for-last-col=\scriptstyle]
\Vdots & & &\Ddots & & 0 & \\
0 & & &\Cdots & 0 & 1 & 0 & L_n \gets L_n-L_1
\end{pNiceArray}$
-\arrayrulecolor{black}
\end{Verbatim}
-\arrayrulecolor{blue}
+
\[\begin{pNiceArray}{*6C|C}[nullify-dots,last-col,code-for-last-col=\scriptstyle]
1 & 1 & 1 &\Cdots & & 1 & 0 & \\
0 & 1 & 0 &\Cdots & & 0 & & L_2 \gets L_2-L_1 \\
@@ -2427,7 +2693,7 @@ $\begin{pNiceArray}{*6C|C}[nullify-dots,last-col,code-for-last-col=\scriptstyle]
\Vdots & & &\Ddots & & 0 & \\
0 & & &\Cdots & 0 & 1 & 0 & L_n \gets L_n-L_1
\end{pNiceArray}\]
-\arrayrulecolor{black}
+
\subsection{Des lignes pointillées qui ne sont plus pointillées}
@@ -2617,19 +2883,16 @@ a_{41} & a_{42} & a_{43} & a_{44}
On remarquera que les traits que l'on vient de tracer sont dessinés \emph{après} la matrice sans modifier la
position des composantes de celle-ci. En revanche, les traits tracés par |\hline|, le spécificateur «\verb+|+» ou
-les options |hlines| et |vlines| «écartent» les composantes de la matrice (quand l'extension \pkg{array} est
-chargée, ce qui est toujours le cas avec \pkg{nicematrix}).\footnote{En revanche les traits tracés par |\ncline|
- n'écartent pas les lignes de la matrice.}
+les options |hlines|, |vlines| et |hvlines| «écartent» les composantes de la matrice.\footnote{Pour la commande
+ |\cline|, voir la remarque p.~\pageref{remark-cline}.}
\vspace{1cm}
-
-L'extension \pkg{nicematrix} est construite au-dessus de l'environnement |{array}| et, par conséquent, il est
-possible d'utiliser l'extension \pkg{colortbl} dans les environnements de \pkg{nicematrix}. Les possibilités de
-réglage de \pkg{colortbl} sont néanmoins assez limitées. C'est pourquoi nous proposons une autre méthode pour
-surligner une rangée de la matrice. Nous créons un nœud Tikz rectangulaire qui englobe les nœuds de la deuxième
-rangée en utilisant les outils de la bibliothèque Tikz \pkg{fit}. Ce nœud est rempli après la construction de la
-matrice. Pour que l'on puisse voir le texte \emph{sous} le nœud, nous devons utiliser la transparence avec le
-|blend mode| égal à |multiply|.
+Il est possible de colorier une rangée avec |\rowcolor| dans le |code-before| (ou avec |\rowcolor| de
+\pkg{colortbl} dans la première case de la rangée ). Les possibilités de réglages sont néanmoins limitées. C'est
+pourquoi nous présentons ici une autre méthode pour surligner une rangée de la matrice. Nous créons un nœud Tikz
+rectangulaire qui englobe les nœuds de la deuxième rangée en utilisant les outils de la bibliothèque Tikz
+\pkg{fit}. Ce nœud est rempli après la construction de la matrice. Pour que l'on puisse voir le texte \emph{sous}
+le nœud, nous devons utiliser la transparence avec le |blend mode| égal à |multiply|.
\tikzset{highlight/.style={rectangle,
@@ -2941,3 +3204,8 @@ documentation ici présente, ainsi que le code source commenté et un historique
\end{document}
+
+
+
+
+
diff --git a/macros/latex/contrib/nicematrix/nicematrix.dtx b/macros/latex/contrib/nicematrix/nicematrix.dtx
index a78a94ee50..7e22066769 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.dtx
+++ b/macros/latex/contrib/nicematrix/nicematrix.dtx
@@ -15,8 +15,8 @@
%
% \fi
% \iffalse
-\def\myfileversion{4.0}
-\def\myfiledate{2020/05/08}
+\def\myfileversion{4.1}
+\def\myfiledate{2020/05/27}
%
%
%<*batchfile>
@@ -123,38 +123,12 @@ version 2005/12/01 or later.
%
% \begin{abstract}
% The LaTeX package \pkg{nicematrix} provides new environments similar to the
-% classical environments |{tabular}|, |{array}| and |{matrix}| but with some
-% additional features. Among these features are the possibilities to fix the
-% width of the columns and to draw continuous ellipsis dots between the cells of
-% the array.
+% classical environments |{tabular}|, |{array}| and |{matrix}| of \pkg{array}
+% and \pkg{amsmath} but with extended features.
% \end{abstract}
%
% \vspace{1cm}
-% \section{Presentation}
-%
-%
-% This package can be used with |xelatex|, |lualatex|, |pdflatex| but also by
-% the classical workflow |latex|-|dvips|-|ps2pdf| (or Adobe Distiller). Two or
-% three compilations may be necessary. This package requires and \textbf{loads}
-% the packages \pkg{l3keys2e}, \pkg{xparse}, \pkg{array}, \pkg{amsmath},
-% \pkg{pgfcore} and the module \pkg{shapes} of \textsc{pgf} (\pkg{tikz} is
-% \emph{not} loaded). The final user only has to load the package with
-% |\usepackage{nicematrix}|.
-%
-%
-% \medskip
-% \begin{savenotes}
-% \begin{minipage}{0.6\linewidth}
-% This package provides some new tools to draw mathematical matrices. The main
-% features are the following:
-% \begin{itemize}\setlength{\itemsep}{0pt}
-% \item continuous dotted lines;
-% \item exterior rows and columns for labels;
-% \item a control of the width of the columns.
-% \end{itemize}
-% \end{minipage}
-% \end{savenotes}
-% \hspace{1.4cm}
+% \hspace{1cm}
% $\begin{bNiceArray}{CCCC}[first-row,first-col,
% code-for-first-col=\color{blue}\scriptstyle,
% code-for-first-row=\color{blue}\scriptstyle,
@@ -164,98 +138,1155 @@ version 2005/12/01 or later.
% L_2 & a_{21} & a_{22} & \Cdots & a_{2n} \\
% \Vdots & \Vdots & \Vdots & \Ddots & \Vdots\\
% L_n & a_{n1} & a_{n2} & \Cdots & a_{nn}
-% \end{bNiceArray}$
+% \end{bNiceArray}$\hspace{2cm}
+% \begin{NiceTabular}{LSSSS}[code-before = \rowcolor{red!15}{1-2} \rowcolors{3}{blue!15}{}]
+% \toprule
+% \Block{2-1}{Product} & \multicolumn{3}{C}{dimensions (cm)} & \Block{2-1}{\rotate Price} \\
+% \cmidrule(rl){2-4}
+% & L & l & h \\
+% \midrule
+% small & 3 & 5.5 & 1 & 30 \\
+% standard & 5.5 & 8 & 1.5 & 50.5 \\
+% premium & 8.5 & 10.5 & 2 & 80 \\
+% extra & 8.5 & 10 & 1.5 & 85.5 \\
+% special & 12 & 12 & 0.5 & 70 \\
+% \bottomrule
+% \end{NiceTabular}
+%
+% \vspace{1cm}
+% The package \pkg{nicematrix} is entirely contained in the file
+% |nicematrix.sty|. This file may be put in the current directory or in a
+% |texmf| tree. However, the best is to install \pkg{nicematrix} with a TeX
+% distribution as MiKTeX or TeXlive.
+%
+% \bigskip
+% This package can be used with |xelatex|, |lualatex|, |pdflatex| but also by
+% the classical workflow |latex|-|dvips|-|ps2pdf| (or Adobe Distiller).
+%
+% \bigskip
+% This package requires and \textbf{loads} the packages \pkg{l3keys2e},
+% \pkg{xparse}, \pkg{array}, \pkg{amsmath}, \pkg{pgfcore} and the module
+% \pkg{shapes} of \textsc{pgf} (\pkg{tikz}, which is a layer over \textsc{pgf}
+% is \emph{not} loaded). The final user only has to load the package with
+% |\usepackage{nicematrix}|.
+%
+%
+% \bigskip
+% The idea of \pkg{nicematrix} is to create \textsc{pgf} nodes under the cells
+% and the positions of the rules of the tabular created by \pkg{array} and to
+% use these nodes to develop new features. As usual with \textsc{pgf}, the
+% coordinates of these nodes are written in the |.aux| to be used on the next
+% compilation and that's why \pkg{nicematrix} may need \textbf{several
+% compilations}.
%
-% \medskip
+% \bigskip
+% Most features of \pkg{nicematrix} may be used without explicit use of
+% \textsc{pgf} or Tikz (which, in fact, is not loaded by default).
+%
+% \bigskip
% A command |\NiceMatrixOptions| is provided to fix the options (the
-% scope of the options fixed by this command is the current TeX group).
+% scope of the options fixed by this command is the current TeX group: they are
+% semi-global).
+%
%
+% \newpage
+%
+% \section{The environments of this package}
+%
+% The package \pkg{nicematrix} defines the following new environments.
+%
+% \medskip
+% \begin{ttfamily}
+% \setlength{\tabcolsep}{3mm}
+% \begin{tabular}{llll}
+% \{NiceTabular\} & \{NiceArray\} & \{NiceMatrix\} \\
+% & \{pNiceArray\} & \{pNiceMatrix\} \\
+% & \{bNiceArray\} & \{bNiceMatrix\} \\
+% & \{BNiceArray\} & \{BNiceMatrix\} \\
+% & \{vNiceArray\} & \{vNiceMatrix\} \\
+% & \{VNiceArray\} & \{VNiceMatrix\}
+% \end{tabular}
+% \end{ttfamily}
+%
+%
+%
+%
+% \medskip
+% The environments |{NiceArray}| and |{NiceTabular}| are similar to the
+% environments |{array}| and |{tabular}| of the package \pkg{array} (which is
+% loaded by \pkg{nicematrix} ).
+%
+% \medskip
+% However, there are some small differences:
+% \begin{itemize}
+% \item For technical reasons, in the preamble of these environments, the user
+% must use the letters |L|, |C| and~|R|\footnote{The column types |L|, |C| and
+% |R| are defined locally inside |{NiceTabular}| or |{NiceArray}| with
+% |\newcolumntype| of \pkg{array}. This definition overrides an eventual
+% previous definition.} instead of |l|, |c| and |r|, included in the commands
+% |\multicolumn| and in the types of columns defined by |\newcolumntype|.
+%
+% * In |{NiceArray}| (and its variants), the columns of type |w| (ex. :
+% |wc{1cm}|) are composed in math mode whereas, in |{array}| of \pkg{array},
+% they are composed in text mode.
+% \end{itemize}
+%
+% \medskip
+% The environments |{pNiceArray}|, |{bNiceArray}|, etc. have no equivalent in
+% \pkg{array}.
+%
+% \medskip
+% The environments |{NiceMatrix}|, |{pNiceMatrix}|, etc. are similar to the
+% corresponding environments of \pkg{amsmath} (which is loaded by
+% \pkg{nicematrix}): |{matrix}|, |{pmatrix}|, etc.
+%
+% \medskip
+% All the environments of the package \pkg{nicematrix} accept, between square
+% brackets, an optional list of \textsl{key=value} pairs. \textbf{There must be
+% no space before the opening bracket (|[|) of this list of options.}
+%
+% \section{The vertical space between the rows}
+%
+% It's well known that some rows of the arrays created by default with LaTeX
+% are, by default, too close to each other. Here is a classical example.
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
+% $\begin{pmatrix}
+% \frac12 & -\frac12 \\
+% \frac13 & \frac14 \\
+% \end{pmatrix}$
+% \end{BVerbatim}
+% $\begin{pmatrix}
+% \frac12 & -\frac12 \\
+% \frac13 & \frac14 \\
+% \end{pmatrix}$
%
% \bigskip
-% \textbf{An example for the continuous dotted lines}
+% Inspired by the package \pkg{cellspace} which deals with that problem, the
+% package \pkg{nicematrix} provides two keys |cell-space-top-limit| and
+% |cell-space-bottom-limit| similar to the parameters |\cellspacetoplimit| and
+% |\cellspacebottomlimit| of \pkg{cellspace}. The initial value of these
+% parameters is $0$~pt in order to have for the environments of \pkg{nicematrix}
+% the same behaviour as those of \pkg{array} and \pkg{amsmath}. However, a value
+% of $1$~pt would probably be a good choice and we suggest to set them with
+% |\NiceMatrixOptions|.
%
% \medskip
-% \begin{minipage}{10cm}
-% For example, consider the following code which uses an environment |{pmatrix}|
-% of \pkg{amsmath}.
+% \begin{Verbatim}
+% \NiceMatrixOptions{~emphase#cell-space-top-limit = 1pt,cell-space-bottom-limit = 1pt@}
+% \end{Verbatim}
%
+% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
+% $\begin{pNiceMatrix}
+% \frac12 & -\frac12 \\
+% \frac13 & \frac14 \\
+% \end{pNiceMatrix}$
+% \end{BVerbatim}
+% \begin{scope}
+% \NiceMatrixOptions{
+% cell-space-top-limit = 1pt ,
+% cell-space-bottom-limit = 1pt ,
+% }
+% $\begin{pNiceMatrix}
+% \frac12 & -\frac12 \\
+% \frac13 & \frac14 \\
+% \end{pNiceMatrix}$
+% \end{scope}
+%
+%
+%
+%
+%
+% \bigskip
+% \section{The vertical position of the arrays}
+%
+% The package \pkg{nicematrix} provides a option |baseline| for the vertical
+% position of the arrays. This option takes as value an integer which is the
+% number of the row on which the array will be aligned.
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
+% $A = \begin{pNiceMatrix}[~emphase#baseline=2@]
+% \frac{1}{\sqrt{1+p^2}} & p & 1-p \\
+% 1 & 1 & 1 \\
+% 1 & p & 1+p
+% \end{pNiceMatrix}$
+% \end{BVerbatim}
+% $A = \begin{pNiceMatrix}[baseline=2]
+% \frac{1}{\sqrt{1+p^2}} & p & 1-p \\
+% 1 & 1 & 1 \\
+% 1 & p & 1+p
+% \end{pNiceMatrix}$
+%
+%
+% \medskip
+% It's also possible to use the option |baseline| with one of the special values
+% |t|, |c| or |b|. These letters may also be used absolutely like the option of
+% the environments |{tabular}| and |{array}| of \pkg{array}. The initial value
+% of |baseline| is~|c|.
+%
+%
+% \medskip
+% In the following example, we use the option |t| (equivalent to |baseline=t|)
+% immediately after an |\item| of list. One should remark that the presence of a
+% |\hline| at the beginning of the array doesn't prevent the alignment of the
+% baseline with the baseline of the first row (with |{tabular}| or |{array}| of
+% \pkg{array}, one must use |\firsthline|\footnote{It's also possible to use
+% |\firsthline| in the environments of \pkg{nicematrix}.}).
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
+% \begin{enumerate}
+% \item an item
+% \smallskip
+% \item \renewcommand{\arraystretch}{1.2}
+% $\begin{NiceArray}~emphase#[t]@{LCCCCCC}
+% \hline
+% n & 0 & 1 & 2 & 3 & 4 & 5 \\
+% u_n & 1 & 2 & 4 & 8 & 16 & 32
+% \hline
+% \end{NiceArray}$
+% \end{enumerate}
+% \end{BVerbatim}
+% \begin{minipage}{5cm}
+% \begin{enumerate}
+% \item an item
+% \smallskip
+% \item \renewcommand{\arraystretch}{1.2}
+% $\begin{NiceArray}[t]{LCCCCCC}
+% \hline
+% n & 0 & 1 & 2 & 3 & 4 & 5 \\
+% u_n & 1 & 2 & 4 & 8 & 16 & 32 \\
+% \hline
+% \end{NiceArray}$
+% \end{enumerate}
+% \end{minipage}
+%
+% \medskip
+% However, it's also possible to use the tools of \pkg{booktabs}: |\toprule|,
+% |\bottomrule|, |\midrule|, etc.\par\nobreak
+%
+% \smallskip
+% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
+% \begin{enumerate}
+% \item an item
+% \smallskip
+% \item
+% $\begin{NiceArray}[t]{LCCCCCC}
+% ~emphase#\toprule@
+% n & 0 & 1 & 2 & 3 & 4 & 5 \\
+% ~emphase#\midrule@
+% u_n & 1 & 2 & 4 & 8 & 16 & 32
+% ~emphase#\bottomrule@
+% \end{NiceArray}$
+% \end{enumerate}
+% \end{BVerbatim}
+% \begin{minipage}{5cm}
+% \begin{enumerate}
+% \item an item
% \smallskip
+% \item
+% $\begin{NiceArray}[t]{LCCCCCC}
+% \toprule
+% n & 0 & 1 & 2 & 3 & 4 & 5 \\
+% \midrule
+% u_n & 1 & 2 & 4 & 8 & 16 & 32 \\
+% \bottomrule
+% \end{NiceArray}$
+% \end{enumerate}
+% \end{minipage}
+%
+%
+% \section{The blocks}
+% \label{Block}
+%
+% In the environments of \pkg{nicematrix}, it's possible to use the command
+% |\Block| in order to place an element in the center of a rectangle of merged
+% cells of the array. The command |\Block| don't create space by itself.
+%
+% The command |\Block| must be used in the upper leftmost cell of the array with
+% two arguments. The first argument is the size of the block with the syntax
+% $i$\verb|-|$j$ where $i$ is the number of rows of the block and $j$ its number
+% of columns. The second argument is the content of the block.
+%
+% In |{NiceTabular}| the content of the block is composed in text mode. In the
+% other environments, it is composed in math mode.
+%
+% \medskip
% \begin{BVerbatim}
-% $A = \begin{pmatrix}
-% 1 & \cdots & \cdots & 1 \\
-% 0 & \ddots & & \vdots \\
-% \vdots & \ddots & \ddots & \vdots \\
-% 0 & \cdots & 0 & 1
-% \end{pmatrix}$
+% \begin{NiceTabular}{CCCC}
+% rose & tulipe & marguerite & dahlia \\
+% violette & ~emphase#\Block{2-2}{\LARGE\color{blue} fleurs}@ & & souci \\
+% pervenche & & & lys \\
+% arum & iris & jacinthe & muguet
+% \end{NiceTabular}
% \end{BVerbatim}
%
+%
+% \medskip
+% \begin{center}
+% \begin{NiceTabular}{CCCC}
+% rose & tulipe & marguerite & dahlia \\
+% violette & \Block{2-2}{\LARGE\color{blue} fleurs} & & souci \\
+% pervenche & & & lys \\
+% arum & iris & jacinthe & muguet
+% \end{NiceTabular}
+% \end{center}
+%
+%
+%
+% \medskip
+% It's also possible to use the command |\Block| in mathematical matrices.
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+% $\begin{bNiceArray}{CCC|C}[margin]
+% ~emphase#\Block{3-3}{A}@ & & & 0 \\
+% & \hspace*{1cm} & & \Vdots \\
+% & & & 0 \\
+% \hline
+% 0 & \Cdots& 0 & 0
+% \end{bNiceArray}$
+% \end{BVerbatim}
+% $\begin{bNiceArray}{CCC|C}[margin]
+% \Block{3-3}{A} & & & 0 \\
+% & \hspace*{1cm} & & \Vdots \\
+% & & & 0 \\
+% \hline
+% 0 & \Cdots& 0 & 0
+% \end{bNiceArray}$
+%
+% \bigskip
+% One may wish to raise the size of the ``$A$'' placed in the block of the
+% previous example. Since this element is composed in math mode, it's not
+% possible to use directly a command like |\large|, |\Large| and |\LARGE|.
+% That's why the command |\Block| provides an option between angle brackets to
+% specify some TeX code which will be inserted before the beginning of the
+% math mode.
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+% $\begin{bNiceArray}{CCC|C}[margin]
+% \Block{3-3}~emphase#<\Large>@{A} & & & 0 \\
+% & \hspace*{1cm} & & \Vdots \\
+% & & & 0 \\
+% \hline
+% 0 & \Cdots& 0 & 0
+% \end{bNiceArray}$
+% \end{BVerbatim}
+% \begin{scope}
+% $\begin{bNiceArray}{CCC|C}[margin]
+% \Block{3-3}<\Large>{A} & & & 0 \\
+% & \hspace*{1cm} & & \Vdots \\
+% & & & 0 \\
+% \hline
+% 0 & \Cdots& 0 & 0
+% \end{bNiceArray}$
+% \end{scope}
+%
+% \section{The rules}
+%
+% The usual techniques for the rules may be used in the environments of
+% \pkg{nicematrix} (excepted |\vline|).
+%
+%
+% \subsection{The thickness and the color of the rules}
+%
+% The environments of \pkg{nicematrix} provide a key |rules/width| to set the
+% width (in fact the thickness) of the rules in the current environment. In
+% fact, this key merely sets the value of the length |\arrayrulewidth|.
+%
% \smallskip
-% This code composes the matrix $A$ on the right.
-% \end{minipage}\hspace{1cm}
-% $A = \begin{pmatrix}
-% 1 &\cdots &\cdots &1 \\
-% 0 &\ddots & &\vdots \\
-% \vdots &\ddots &\ddots &\vdots \\
-% 0 &\cdots &0 &1
-% \end{pmatrix}$
+% It's well known that \pkg{colortbl} provides the command |\arrayrulecolor| in
+% order to specify the color of the rules.
+%
+% \smallskip
+% With \pkg{nicematrix}, it's possible to specify the color of the rules even
+% when \pkg{colortbl} is not loaded. For sake of compatibility, the command is
+% also named |\arrayrulecolor|. The environments of \pkg{nicematrix} also
+% provide a key |rules/color| to fix the color of the rules in the current
+% environment.
+%
+% \medskip
+% \begin{scope}
+% \hfuzz=10cm
+% \begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
+% \begin{NiceTabular}{|CCC|}[~emphase#rules/color=[gray]{0.9},rules/width=1pt@]
+% \hline
+% rose & tulipe & lys \\
+% arum & iris & violette \\
+% muguet & dahlia & souci \\
+% \hline
+% \end{NiceTabular}
+% \end{BVerbatim}
+% \begin{NiceTabular}{|CCC|}[rules/color=[gray]{0.9},rules/width=1pt]
+% \hline
+% rose & tulipe & lys \\
+% arum & iris & violette \\
+% muguet & dahlia & souci \\
+% \hline
+% \end{NiceTabular}
+% \end{scope}
+%
+% \medskip
+% If one wishes to define new specifiers for columns in order to draw vertical
+% rules (for example with a specific color or thicker than the standard rules),
+% he should consider the command |\OnlyMainNiceMatrix| described on
+% page~\pageref{OnlyMainNiceMatrix}.
%
%
% \bigskip
+% \subsection{A remark about \textbackslash cline}
+%
+%\label{remark-cline}
+%
+% The horizontal and vertical rules drawn by |\hline| and the specifier
+% ``\verb+|+'' make the array larger or wider by a quantity equal to the width of the rule.
+%
+% \smallskip
+% For historical reasons, this is not the case with the command |\cline|, as
+% shown by the following example.
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=10cm]
+% \setlength{\arrayrulewidth}{2pt}
+% \begin{tabular}{cccc} \hline
+% A&B&C&D \\ ~emphase#\cline{2-2}@
+% A&B&C&D \\ \hline
+% \end{tabular}
+% \end{BVerbatim}
% \begin{scope}
-% \NiceMatrixOptions{transparent}
-% \begin{minipage}{10cm}
-% Now, if we use the package \pkg{nicematrix} with the option \\
-% |transparent|, the same code will give the result on the right.
-% \end{minipage}\hspace{1cm}
-% $A = \begin{pmatrix}
-% 1 & \cdots & \cdots & 1 \\
-% 0 & \ddots & & \vdots \\
-% \vdots & \ddots & \ddots & \vdots \\
-% 0 & \cdots & 0 & 1
-% \end{pmatrix}$
+% \setlength{\arrayrulewidth}{2pt}
+% \begin{tabular}[c]{cccc}
+% \hline
+% A&B&C&D \\
+% \cline{2-2}
+% A&B&C&D \\
+% \hline
+% \end{tabular}
% \end{scope}
%
+% \medskip
+% In the environments of \pkg{nicematrix}, this situation is corrected (it's
+% still possible to go to the standard behaviour of |\cline| with the key |standard-cline|).
%
-% \section{The environments of this package}
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=10cm]
+% \setlength{\arrayrulewidth}{2pt}
+% \begin{NiceTabular}{CCCC} \hline
+% A&B&C&D \\ ~emphase#\cline{2-2}@
+% A&B&C&D \\ \hline
+% \end{NiceTabular}
+% \end{BVerbatim}
+% \begin{scope}
+% \setlength{\arrayrulewidth}{2pt}
+% \begin{NiceTabular}[c]{CCCC}
+% \hline
+% A&B&C&D \\
+% \cline{2-2}
+% A&B&C&D \\
+% \hline
+% \end{NiceTabular}
+% \end{scope}
%
-% The package \pkg{nicematrix} defines the following new environments.
+% \subsection{The keys hlines and vlines}
+%
+% The key |hlines| draws all the horizontal rules and the key |vlines| draws all
+% the vertical rules. In fact, in the environments with delimiters (as
+% |{pNiceMatrix}| or |{bNiceArray}|) the exteriors rules are not drawn (as
+% expected).
%
% \medskip
-% \begin{ttfamily}
-% \setlength{\tabcolsep}{3mm}
-% \begin{tabular}{llll}
-% \{NiceMatrix\} & \{NiceArray\} & \{NiceTabular\} \\
-% \{pNiceMatrix\} & \{pNiceArray\} \\
-% \{bNiceMatrix\} & \{bNiceArray\} \\
-% \{BNiceMatrix\} & \{BNiceArray\} \\
-% \{vNiceMatrix\} & \{vNiceArray\} \\
-% \{VNiceMatrix\} & \{VNiceArray\} \\
-% & \{NiceArrayWithDelims\}
-% \end{tabular}
-% \end{ttfamily}
+% \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
+% $\begin{pNiceMatrix}[~emphase#vlines@,rules/width=0.2pt]
+% 1 & 2 & 3 & 4 & 5 & 6 \\
+% 1 & 2 & 3 & 4 & 5 & 6 \\
+% 1 & 2 & 3 & 4 & 5 & 6
+% \end{pNiceMatrix}$
+% \end{BVerbatim}
+% $\begin{pNiceMatrix}[vlines,rules/width=0.2pt]
+% 1 & 2 & 3 & 4 & 5 & 6 \\
+% 1 & 2 & 3 & 4 & 5 & 6 \\
+% 1 & 2 & 3 & 4 & 5 & 6
+% \end{pNiceMatrix}$
%
+% \bigskip
+% However, there is a difference between the key |vlines| and the use of
+% the specifier ``"|"'' in the preamble of the environment: the rules drawn by
+% |vlines| completely cross the double-rules drawn by |\hline\hline| (you don't
+% need \pkg{hhline}).
%
% \medskip
-% By default, the environments |{NiceMatrix}|, |{pNiceMatrix}|, |{bNiceMatrix}|,
-% |{BNiceMatrix}|, |{vNiceMatrix}| and |{VNiceMatrix}| behave almost exactly as
-% the corresponding environments of \pkg{amsmath}: |{matrix}|, |{pmatrix}|,
-% |{bmatrix}|, |{Bmatrix}|, |{vmatrix}| and |{Vmatrix}|.
+% \begin{BVerbatim}[baseline=c,boxwidth=11.5cm]
+% $\begin{NiceMatrix}[~emphase#vlines@] \hline
+% a & b & c & d \\ \hline \hline
+% 1 & 2 & 3 & 4 \\
+% 1 & 2 & 3 & 4 \\ \hline
+% \end{NiceMatrix}$
+% \end{BVerbatim}
+% $\begin{NiceMatrix}[vlines]
+% \hline
+% a & b & c & d \\
+% \hline \hline
+% 1 & 2 & 3 & 4 \\
+% 1 & 2 & 3 & 4 \\
+% \hline
+% \end{NiceMatrix}$
+%
+%
+% \bigskip
+% If you use \pkg{booktabs} (which provides |\toprule|, |midrule|, |bottomrule|,
+% etc.) and you really want to draw vertical rules (something opposed to the
+% spirit of \pkg{booktabs}), you should remark that the key |vlines| in
+% compatible with \pkg{booktabs}.
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=11.5cm]
+% $\begin{NiceMatrix}[~emphase#vlines@] \toprule
+% a & b & c & d \\ \midrule
+% 1 & 2 & 3 & 4 \\
+% 1 & 2 & 3 & 4 \\ \bottomrule
+% \end{NiceMatrix}$
+% \end{BVerbatim}
+% $\begin{NiceMatrix}[vlines]
+% \toprule
+% a & b & c & d \\
+% \midrule
+% 1 & 2 & 3 & 4 \\
+% 1 & 2 & 3 & 4 \\
+% \bottomrule
+% \end{NiceMatrix}$
+%
+%
+% \subsection{The key hvlines}
+% \label{hvlines}
+%
+% The key |hvlines| draws all the vertical and horizontal rules \emph{excepted
+% in the blocks}.\footnote{In fact, when the key |hvlines| is in force, the
+% rules are also not drawn in the virtual blocks delimited by cells relied par
+% dotted lines (cf. p. \pageref{dotted-and-hvlines}).}
+%
+% \medskip
+% \begin{Verbatim}
+% \setlength{\arrayrulewidth}{1pt}
+% \begin{NiceTabular}{CCCC}[~emphase#hvlines@,rules/color=blue]
+% rose & tulipe & marguerite & dahlia \\
+% violette & \Block{2-2}{\LARGE\color{blue} fleurs} & & souci \\
+% pervenche & & & lys \\
+% arum & iris & jacinthe & muguet
+% \end{NiceTabular}
+% \end{Verbatim}
+%
+% \begin{center}
+% \setlength{\arrayrulewidth}{1pt}
+% \begin{NiceTabular}{CCCC}[hvlines,rules/color=blue]
+% rose & tulipe & marguerite & dahlia \\
+% violette & \Block{2-2}{\LARGE\color{blue} fleurs} & & souci \\
+% pervenche & & & lys \\
+% arum & iris & jacinthe & muguet
+% \end{NiceTabular}
+% \end{center}
+%
+%
%
+% \subsection{La commande \textbackslash diagbox}
+%
+% The command |\diagbox| (inspired by the package \pkg{diagbox}), allows, when
+% it is used in a cell, to slash that cell diagonally downwards.\footnote{The
+% author of this document considers that type of construction as graphically
+% poor.}.
%
% \medskip
-% The environments |{NiceArray}| and |{NiceTabular}| are similar to the
-% environments |{array}| and |{tabular}| of the
-% package |{array}|. However, for technical reasons, in the preamble of these
-% environments, the user must use the letters |L|, |C| and~|R|
-% instead of |l|, |c| and |r|. It's possible to use the constructions
-% |w{...}{...}|, |W{...}{...}|, "|", |>{...}|, |<{...}|, |@{...}|, |!{...}| and
-% |*{n}{...}| but the letters |p|, |m| and |b| should not be used.
+% \begin{BVerbatim}[baseline=c,boxwidth=10cm]
+% $\begin{NiceArray}{*{5}{C}}[hvlines]
+% ~emphase#\diagbox{x}{y}@ & e & a & b & c \\
+% e & e & a & b & c \\
+% a & a & e & c & b \\
+% b & b & c & e & a \\
+% c & c & b & a & e
+% \end{NiceArray}$
+% \end{BVerbatim}
+% $\begin{NiceArray}{*{5}{C}}[hvlines]
+% \diagbox{x}{y} & e & a & b & c \\
+% e & e & a & b & c \\
+% a & a & e & c & b \\
+% b & b & c & e & a \\
+% c & c & b & a & e
+% \end{NiceArray}$
+%
+%
+%
+% \subsection{Dotted rules}
+%
+%
+% In the environments of the package \pkg{nicematrix}, it's possible to use
+% the command |\hdottedline| (provided by \pkg{nicematrix}) which is a
+% counterpart of the classical commands |\hline| and |\hdashline| (the latter is
+% a command of \pkg{arydshln}).
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
+% \begin{pNiceMatrix}
+% 1 & 2 & 3 & 4 & 5 \\
+% ~emphase#\hdottedline@
+% 6 & 7 & 8 & 9 & 10 \\
+% 11 & 12 & 13 & 14 & 15
+% \end{pNiceMatrix}
+% \end{BVerbatim}
+% $\begin{pNiceMatrix}
+% 1 & 2 & 3 & 4 & 5 \\
+% \hdottedline
+% 6 & 7 & 8 & 9 & 10 \\
+% 11 & 12 & 13 & 14 & 15
+% \end{pNiceMatrix}$
+%
+%
+% \bigskip
+% In the environments with an explicit preamble (like |{NiceTabular}|,
+% |{NiceArray}|, etc.), it's possible to draw a vertical dotted line with the
+% specifier ``|:|''.
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
+% \left(\begin{NiceArray}{CCCC~emphase#:@C}
+% 1 & 2 & 3 & 4 & 5 \\
+% 6 & 7 & 8 & 9 & 10 \\
+% 11 & 12 & 13 & 14 & 15
+% \end{NiceArray}\right)
+% \end{BVerbatim}
+% $\left(\begin{NiceArray}{CCCC:C}
+% 1 & 2 & 3 & 4 & 5 \\
+% 6 & 7 & 8 & 9 & 10 \\
+% 11 & 12 & 13 & 14 & 15
+% \end{NiceArray}\right)$
+%
+% \bigskip
+% It's possible to change in \pkg{nicematrix} the letter used to specify a
+% vertical dotted line with the option |letter-for-dotted-lines| available in
+% |\NiceMatrixOptions|.
+%
+% \bigskip
+% \emph{Remark} : In the package \pkg{array} (on which the package
+% \pkg{nicematrix} relies), horizontal and vertical rules make the array larger
+% or wider by a quantity equal to the width of the rule\footnote{In fact, this
+% is true only for |\hline| and ``"|"'' but not for |\cline|.}. In
+% \pkg{nicematrix}, the dotted lines drawn by |\hdottedline| and ``|:|'' do
+% likewise.
+%
+%
+%
+%\section{The color of the rows and columns}
+%
+% With the classical package \pkg{colortbl}, it's possible to color the cells,
+% rows and columns of a tabular. However, the resulting \textsc{pdf} is not
+% always perfectly displayed by the \textsc{pdf} viewers, in particular in
+% conjonction with rules. With some \textsc{pdf} viewers, some vertical rules
+% seem to vanish. On the other side, some thin horizontal white lines may appear
+% in some circonstances.
+%
+%
+% \medskip
+% The package \pkg{nicematrix} provides similar tools which do not present these
+% drawbacks. It provides a key |code-before|\footnote{There is also a key
+% |code-after| : see p.~\pageref{code-after}.} for some code which will be
+% executed \emph{before} the drawing of the tabular. In this |code-before|, new
+% commands are available: |\cellcolor|, |\rectanglecolor|, |\rowcolor|,
+% |\columncolor|, |\rowcolors| and |\chessboardcolors|.
+% \label{code-before}
+%
+% \medskip
+% These commands are independent of \pkg{colortbl}.\footnote{Thus, it's possible
+% to coloror the rules, the cells, the rows, the columns, etc. without loading \pkg{colortbl}.}
+%
+% \medskip
+% All these commands accept an optional argument (between square brackets and
+% in first position) which is the color model for the specification of the colors.
+%
+% \medskip
+% \begin{itemize}
+% \item The command |\cellcolor| takes its name from the command |\cellcolor| of
+% \pkg{colortbl}.
+%
+% This command takes in mandatory arguments a color and a list of cells, each of
+% which with the format $i$-$j$ where $i$ is the number of row and $j$ the
+% number of colummn of the cell.
+%
+%
+% \medskip
+% \begin{scope}
+% \hfuzz=10cm
+% \begin{BVerbatim}[boxwidth=10cm,baseline=c]
+% \begin{NiceTabular}{|C|C|C|}[code-before =
+% ~emphase#\cellcolor{red!15}{3-1,2-2,1-3}@]
+% \hline
+% a & b & c \\ \hline
+% e & f & g \\ \hline
+% h & i & j \\ \hline
+% \end{NiceTabular}
+% \end{BVerbatim}
+% \begin{NiceTabular}{|C|C|C|}[hvlines, code-before =
+% \cellcolor{red!15}{3-1,2-2,1-3}]
+% \hline
+% a & b & c \\ \hline
+% e & f & g \\ \hline
+% h & i & j \\ \hline
+% \end{NiceTabular}
+% \end{scope}
+%
+% \bigskip
+% \item The command |\rectanglecolor| takes three mandatory arguments. The first
+% is the color. The second is the upper-left cell of the rectangle and the third
+% is the lower-right cell of the rectangle.
%
-% See p.~\pageref{NiceArray} the section relating to |{NiceArray}| and |{NiceTabular}|.
+% \medskip
+% \begin{scope}
+% \hfuzz=10cm
+% \begin{BVerbatim}[boxwidth=10cm,baseline=c]
+% \begin{NiceTabular}{|C|C|C|}[code-before =
+% ~emphase#\rectanglecolor{blue!15}{2-2}{3-3}@]
+% \hline
+% a & b & c \\ \hline
+% e & f & g \\ \hline
+% h & i & j \\ \hline
+% \end{NiceTabular}
+% \end{BVerbatim}
+% \begin{NiceTabular}{|C|C|C|}[hvlines, code-before =
+% \rectanglecolor{blue!15}{2-2}{3-3}]
+% \hline
+% a & b & c \\ \hline
+% e & f & g \\ \hline
+% h & i & j \\ \hline
+% \end{NiceTabular}
+% \end{scope}
%
+%
+%
+% \bigskip
+% \item The command |\rowcolor| takes its name from the command |\rowcolor| of
+% \pkg{colortbl}. Its first mandatory argument is the color and the second is a
+% comma-separated list of rows or interval of rows with the form $a$-$b$ (an
+% interval of the form $a$- represent all the rows from the row $a$ until the end).
+%
+% \medskip
+% \begin{scope}
+% \hfuzz = 10cm
+% \begin{BVerbatim}[boxwidth=9cm,baseline=c]
+% $\begin{NiceArray}{LLL}[hvlines, ~emphase#code-before = \rowcolor{red!15}{1,3-5,8-}@]
+% a_1 & b_1 & c_1 \\
+% a_2 & b_2 & c_2 \\
+% a_3 & b_3 & c_3 \\
+% a_4 & b_4 & c_4 \\
+% a_5 & b_5 & c_5 \\
+% a_6 & b_6 & c_6 \\
+% a_7 & b_7 & c_7 \\
+% a_8 & b_8 & c_8 \\
+% a_9 & b_9 & c_9 \\
+% a_{10} & b_{10} & c_{10} \\
+% \end{NiceArray}$
+% \end{BVerbatim}
+% $\begin{NiceArray}{LLL}[baseline=4,hvlines, code-before = \rowcolor{red!15}{1,3-5,8-}]
+% a_1 & b_1 & c_1 \\
+% a_2 & b_2 & c_2 \\
+% a_3 & b_3 & c_3 \\
+% a_4 & b_4 & c_4 \\
+% a_5 & b_5 & c_5 \\
+% a_6 & b_6 & c_6 \\
+% a_7 & b_7 & c_7 \\
+% a_8 & b_8 & c_8 \\
+% a_9 & b_9 & c_9 \\
+% a_{10} & b_{10} & c_{10} \\
+% \end{NiceArray}$
+% \end{scope}
+%
+%
+% \bigskip
+% \item The command |\columncolor| takes its name from the command
+% |\columncolor| of \pkg{colortbl}. Its syntax is similar to the syntaxe of
+% |\rowcolor|.
+%
+% \bigskip
+% \item The command |\rowcolors| (with a \emph{s}) takes its name from the
+% command |\rowcolors| of \pkg{xcolor}\footnote{The command |\rowcolors| of
+% \pkg{color} is available when \pkg{xcolor} is loaded with the
+% option~|table|.}. The \emph{s} emphasizes the fact that there is \emph{two}
+% colors. This command colors alternately the rows of the tabular, beginning
+% with the row whose number is given in first (mandatory) argument. The two
+% other (mandatory) arguments are the colors.
+%
+% \medskip
+% \begin{scope}
+% \hfuzz=10cm
+% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
+% \begin{NiceTabular}{LR}[hlines,code-before = ~emphase#\rowcolors{1}{blue!10}{}@]
+% John & 12 \\
+% Stephen & 8 \\
+% Sarah & 18 \\
+% Ashley & 20 \\
+% Henry & 14 \\
+% Madison & 15
+% \end{NiceTabular}
+% \end{BVerbatim}
+% \begin{NiceTabular}{LR}[hlines,code-before = \rowcolors{1}{blue!10}{},baseline=3]
+% John & 12 \\
+% Stephen & 8 \\
+% Sarah & 18 \\
+% Ashley & 20 \\
+% Henry & 14 \\
+% Madison & 15
+% \end{NiceTabular}
+% \end{scope}
+%
+% \bigskip
+% \item The command |\chessboardcolors| takes in mandatory arguments two colors
+% and colors the cells of the tabular in quincunx with these colors.
+%
+% \medskip
+% \begin{scope}
+% \hfuzz=10cm
+% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
+% $\begin{pNiceMatrix}[R,margin, ~emphase#code-before=\chessboardcolors{red!15}{blue!15}@]
+% 1 & -1 & 1 \\
+% -1 & 1 & -1 \\
+% 1 & -1 & 1
+% \end{pNiceMatrix}$
+% \end{BVerbatim}
+% $\begin{pNiceMatrix}[R,baseline=1, margin, code-before = \chessboardcolors{red!15}{blue!15}]
+% 1 & -1 & 1 \\
+% -1 & 1 & -1 \\
+% 1 & -1 & 1
+% \end{pNiceMatrix}$
+% \end{scope}
+%
+% \medskip
+% We have used the key |R| which aligns all the columns rightwards (cf. p.~\pageref{key-R}).
+% \end{itemize}
+%
+%
+%
+% \bigskip
+% One should remark that these commands are compatible with the commands de
+% \pkg{booktabs} (|\toprule|, |\midrule|, |\bottomrule|, etc).
+%
+% \medskip
+% \begin{scope}
+% \hfuzz=10cm
+% \begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
+% \begin{NiceTabular}[c]{LSSSS}%
+% [code-before = \rowcolor{red!15}{1-2} \rowcolors{3}{blue!15}{}]
+% ~emphase#\toprule@
+% \Block{2-1}{Product} \\
+% \Block{1-3}{dimensions (cm)} & & &
+% \Block{2-1}{\rotate Price} \\
+% ~emphase#\cmidrule(rl){2-4}@
+% & L & l & h \\
+% ~emphase#\midrule@
+% small & 3 & 5.5 & 1 & 30 \\
+% standard & 5.5 & 8 & 1.5 & 50.5 \\
+% premium & 8.5 & 10.5 & 2 & 80 \\
+% extra & 8.5 & 10 & 1.5 & 85.5 \\
+% special & 12 & 12 & 0.5 & 70 \\
+% ~emphase#\bottomrule@
+% \end{NiceTabular}
+% \end{BVerbatim}
+% \begin{NiceTabular}[c]{LSSSS}[code-before = \rowcolor{red!15}{1-2}
+% \rowcolors{3}{blue!15}{}]
+% \toprule
+% \Block{2-1}{Product} &
+% \Block{1-3}{dimensions (cm)} & & &
+% \Block{2-1}{\rotate Price} \\
+% \cmidrule(rl){2-4}
+% & L & l & h \\
+% \midrule
+% small & 3 & 5.5 & 1 & 30 \\
+% standard & 5.5 & 8 & 1.5 & 50.5 \\
+% premium & 8.5 & 10.5 & 2 & 80 \\
+% extra & 8.5 & 10 & 1.5 & 85.5 \\
+% special & 12 & 12 & 0.5 & 70 \\
+% \bottomrule
+% \end{NiceTabular}
+% \end{scope}
+%
+% \medskip
+% We have used the type of column |S| of \pkg{siunitx}.
+%
+% \section{The width of the columns}
+% \label{width}
+%
+% In the environments with an explicit preamble (like |{NiceTabular}|,
+% |{NiceArray}|, etc.), it's possible to fix the width of a given column with
+% the standard letters |w| and |W| of the package \pkg{array}. In
+% |{NiceTabular}|, the cells of such columns are composed in texte mode but, in
+% |{NiceArray}|, |{pNiceArray}|, etc., they are composed in math mode (whereas,
+% in |{array}| of \pkg{array}, they are composed in text mode).
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
+% \begin{NiceTabular}{~emphase#Wc{2cm}@CC}[hvlines]
+% Paris & New York & Madrid \\
+% Berlin & London & Roma \\
+% Rio & Tokyo & Oslo
+% \end{NiceTabular}
+% \end{BVerbatim}
+% \begin{NiceTabular}{Wc{2cm}CC}[hvlines]
+% Paris & New York & Madrid \\
+% Berlin & London & Roma \\
+% Rio & Tokyo & Oslo
+% \end{NiceTabular}
+%
+%
+% \bigskip
+% In the environments of \pkg{nicematrix}, it's also possible to fix the \emph{minimal}
+% width of all the columns of an array directly with the key |columns-width|.
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=10cm]
+% $\begin{pNiceMatrix}[~emphase#columns-width = 1cm@]
+% 1 & 12 & -123 \\
+% 12 & 0 & 0 \\
+% 4 & 1 & 2
+% \end{pNiceMatrix}$
+% \end{BVerbatim}
+% $\begin{pNiceMatrix}[columns-width = 1cm]
+% 1 & 12 & -123 \\
+% 12 & 0 & 0 \\
+% 4 & 1 & 2
+% \end{pNiceMatrix}$
+%
+% \medskip
+% Note that the space inserted between two columns (equal to 2 |\tabcolsep| in
+% |{NiceTabular}| and to 2 |\arraycolsep| in the other environments)
+% is not suppressed (of course, it's possible to suppress this space by setting
+% |\tabcolsep| or |\arraycolsep| equal to $0$~pt before the environment).
+%
+% \bigskip
+% It's possible to give the special value |auto| to the option |columns-width|:
+% all the columns of the array will have a width equal to the widest cell of
+% the array.\footnote{The result is achieved with only one compilation (but Tikz
+% will have written informations in the |.aux| file and a message requiring a
+% second compilation will appear).}\par\nobreak
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=10cm]
+% $\begin{pNiceMatrix}[~emphase#columns-width = auto@]
+% 1 & 12 & -123 \\
+% 12 & 0 & 0 \\
+% 4 & 1 & 2
+% \end{pNiceMatrix}$
+% \end{BVerbatim}
+% $\begin{pNiceMatrix}[columns-width = auto]
+% 1 & 12 & -123 \\
+% 12 & 0 & 0 \\
+% 4 & 1 & 2
+% \end{pNiceMatrix}$
+%
+% \bigskip
+% Without surprise, it's possible to fix the minimal width of the columns of all
+% the matrices of a current scope with the command
+% |\NiceMatrixOptions|.\par\nobreak
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
+% ~emphase#\NiceMatrixOptions{columns-width=10mm}@
+% $\begin{pNiceMatrix}
+% a & b \\ c & d
+% \end{pNiceMatrix}
+% =
+% \begin{pNiceMatrix}
+% 1 & 1245 \\ 345 & 2
+% \end{pNiceMatrix}$
+% \end{BVerbatim}
+% \begin{scope}
+% \NiceMatrixOptions{columns-width=10mm}
+% $\begin{pNiceMatrix}
+% a & b \\
+% c & d
+% \end{pNiceMatrix}
+% =
+% \begin{pNiceMatrix}
+% 1 & 1245 \\
+% 345 & 2
+% \end{pNiceMatrix}$
+% \end{scope}
+%
+%
+% \bigskip
+% But it's also possible to fix a zone where all the matrices will have their
+% columns of the same width, equal to the widest cell of all the matrices. This
+% construction uses the environment |{NiceMatrixBlock}| with the option
+% |auto-columns-width|\footnote{At this time, this is the only usage of the
+% environment |{NiceMatrixBlock}| but it may have other usages in the future.}.
+% The environment |{NiceMatrixBlock}| has no direct link with the command
+% |\Block| presented previously in this document (cf.~p.~\pageref{Block}).
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
+% ~emphase#\begin{NiceMatrixBlock}[auto-columns-width]@
+% $\begin{array}{c}
+% \begin{bNiceMatrix}
+% 9 & 17 \\ -2 & 5
+% \end{bNiceMatrix} \\ \\
+% \begin{bNiceMatrix}
+% 1 & 1245345 \\ 345 & 2
+% \end{bNiceMatrix}
+% \end{array}$
+% ~emphase#\end{NiceMatrixBlock}@
+% \end{BVerbatim}
+% \begin{NiceMatrixBlock}[auto-columns-width]
+% $\begin{array}{c}
+% \begin{bNiceMatrix}
+% 9 & 17 \\ -2 & 5
+% \end{bNiceMatrix} \\ \\
+% \begin{bNiceMatrix}
+% 1 & 1245345 \\ 345 & 2
+% \end{bNiceMatrix}
+% \end{array}$
+% \end{NiceMatrixBlock}
+%
+% \medskip
+% \textbf{Several compilations may be necessary to achieve the job.}
+%
+%
+%
+% \bigskip
+% \section{The exterior rows and columns}
+%
+% The options |first-row|, |last-row|, |first-col| and |last-col| allow the
+% composition of exterior rows and columns in the environments of
+% \pkg{nicematrix}.
+% \label{exterior}
+%
+% A potential ``first row'' (exterior) has the number $0$ (and not $1$). Idem
+% for the potential ``first column''.
+%
+% \begin{Verbatim}
+% $\begin{pNiceMatrix}[~emphase#first-row,last-row,first-col,last-col@]
+% $\begin{pNiceMatrix}[~emphase#first-row,last-row,first-col,last-col@,nullify-dots]
+% & C_1 & \Cdots & & C_4 & \\
+% L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
+% \Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
+% & a_{31} & a_{32} & a_{33} & a_{34} & \\
+% L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
+% & C_1 & \Cdots & & C_4 &
+% \end{pNiceMatrix}$
+% \end{pNiceMatrix}$
+% \end{Verbatim}
+%
+% \[\begin{pNiceMatrix}[first-row,last-row,first-col,last-col,nullify-dots]
+% & C_1 & \Cdots & & C_4 & \\
+% L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
+% \Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
+% & a_{31} & a_{32} & a_{33} & a_{34} & \\
+% L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
+% & C_1 & \Cdots & & C_4 &
+% \end{pNiceMatrix}\]
+%
+% \medskip
+% The dotted lines have been drawn with the tools presented p.~\pageref{Cdots}.
+%
+% \bigskip
+% We have several remarks to do.
+% \begin{itemize}
+% \item For the environments with an explicit preamble (i.e. |{NiceArray}| and
+% its variants), no letter must be given in that preamble for the potential
+% first column and the potential last column: they will automatically (and
+% necessarily) be of type |R| for the first column and |L| for the last one.
+% \item One may wonder how \pkg{nicematrix} determines the number of rows and
+% columns which are needed for the composition of the ``last row'' and ``last
+% column''.
+% \begin{itemize}
+% \item For the environments with explicit preamble, like |{NiceTabular}| and
+% |{pNiceArray}|, the number of columns can obviously be computed from the
+% preamble.
+%
+% \item When the option |light-syntax| (cf. p. \pageref{light-syntax}) is used,
+% \pkg{nicematrix} has, in any case, to load the whole body of the environment
+% (and that's why it's not possible to put verbatim material in the array with
+% the option |light-syntax|). The analysis of this whole body gives the number
+% of rows (but not the number of columns).
+%
+% \item In the other cases, \pkg{nicematrix} compute the number of rows and
+% columns during the first compilation and write the result in the |aux| file
+% for the next run.
+%
+% \textsl{However, it's possible to provide the number of the last row and the
+% number of the last column as values of the options |last-row| and |last-col|,
+% tending to an acceleration of the whole compilation of the document.} That's
+% what we will do throughout the rest of the document.
+% \end{itemize}
+% \end{itemize}
+%
+% \bigskip
+% It's possible to control the appearance of these rows and columns with options
+% |code-for-first-row|, |code-for-last-row|, |code-for-first-col| and
+% |code-for-last-col|. These options
+% specify tokens that will be inserted before each cell of the corresponding row
+% or column.
+%
+%
+% \begin{Verbatim}
+% \NiceMatrixOptions{~emphase#code-for-first-row@ = \color{red},
+% ~emphase#code-for-first-col@ = \color{blue},
+% ~emphase#code-for-last-row@ = \color{green},
+% ~emphase#code-for-last-col@ = \color{magenta}}
+% $\begin{pNiceArray}{CC|CC}[first-row,last-row=5,first-col,last-col,nullify-dots]
+% & C_1 & \Cdots & & C_4 & \\
+% L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
+% \Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
+% \hline
+% & a_{31} & a_{32} & a_{33} & a_{34} & \\
+% L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
+% & C_1 & \Cdots & & C_4 &
+% \end{pNiceArray}$
+% \end{Verbatim}
+%
+% \begin{scope}
+% \NiceMatrixOptions{code-for-first-row = \color{red},
+% code-for-first-col = \color{blue},
+% code-for-last-row = \color{green},
+% code-for-last-col = \color{magenta}}
+% \begin{displaymath}
+% \begin{pNiceArray}{CC|CC}[first-row,last-row=5,first-col,last-col,nullify-dots]
+% & C_1 & \multicolumn1C{\Cdots} & & C_4 & \\
+% L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
+% \Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
+% \hline
+% & a_{31} & a_{32} & a_{33} & a_{34} & \\
+% L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
+% & C_1 & \multicolumn1C{\Cdots} & & C_4 &
+% \end{pNiceArray}
+% \end{displaymath}
+% \end{scope}
+%
+%
+% \emph{Remarks}
+% \begin{itemize}[beginpenalty=10000]
+% \item As shown in the previous example, the horizontal and rules doesn't
+% extend in the exterior rows and columns.
+%
+% However, if one wishes to define new specifiers for columns in order to draw
+% vertical rules (for example thicker than the standard rules), he should
+% consider the command |\OnlyMainNiceMatrix| described on
+% page~\pageref{OnlyMainNiceMatrix}.
+%
+% \item A specification of color present in |code-for-first-row| also applies to
+% a dotted line draw in this exterior ``first row'' (excepted if a value has
+% been given to |xdots/color|). Idem for the other exterior rows and columns.
+%
+% \item Logically, the potential option |columns-width| (described
+% p.~\pageref{width}) doesn't apply to the ``first column'' and ``last column''.
+% \item For technical reasons, it's not possible to use the option of the
+% command |\\| after the ``first row'' or before the ``last row'' (the placement
+% of the delimiters would be wrong).
+% \end{itemize}
+%
+%
+%
+%
%
% \section{The continuous dotted lines}
%
+% \label{Cdots}
% Inside the environments of the package \pkg{nicematrix}, new commands are
% defined: |\Ldots|, |\Cdots|, |\Vdots|, |\Ddots|, and |\Iddots|. These commands
% are intended to be used in place of |\dots|, |\cdots|, |\vdots|, |\ddots| and
@@ -275,7 +1306,8 @@ version 2005/12/01 or later.
% |\Iddots| diagonal ones. It's possible to change the color of these lines
% with the option |color|.\footnote{It's also possible to change the color of
% all theses dotted lines with the option |xdots/color| (\textsl{xdots} to
-% remind that it works for |\Cdots|, |\Ldots|, |\Vdots|, etc.): cf. p. \pageref{customization}.}\par\nobreak
+% remind that it works for |\Cdots|, |\Ldots|, |\Vdots|, etc.): cf. p.
+% \pageref{customization}.}\par\nobreak
%
% \bigskip
% \begin{BVerbatim}[baseline=c,boxwidth=10cm]
@@ -463,9 +1495,6 @@ version 2005/12/01 or later.
% The option |nullify-dots| smashes the instructions |\Ldots| (and the variants)
% horizontally but also vertically.
%
-% \medskip
-% \textbf{There must be no space before the opening bracket (|[|) of the options
-% of the environment.}
%
%
% \subsection{The command \textbackslash Hdotsfor}
@@ -692,234 +1721,52 @@ version 2005/12/01 or later.
% \end{pNiceMatrix}\]
%
%
-%
-% \section{The PGF/Tikz nodes created by nicematrix}
-%
-% \label{name}
+% \subsection{The dotted lines and the key hvlines}
%
-% The package \pkg{nicematrix} creates a PGF/Tikz node for each (non-empty) cell
-% of the considered array. These nodes are used to draw the dotted lines between
-% the cells of the matrix. However, the user may wish to use directly these
-% nodes. It's possible (if Tikz has been loaded\footnote{We remind that, since
-% the version 3.13, \pkg{nicematrix} doesn't load Tikz by default by only
-% \textsc{pgf} (Tikz is a layer over \textsc{pfg}).}). First, the user have to
-% give a name to the array (with the key called |name|). Then, the nodes are
-% accessible through the names ``\textsl{name}-$i$-$j$'' where \textsl{name} is
-% the name given to the array and $i$ and $j$ the numbers of the row and the
-% column of the considered cell.
+% \label{dotted-and-hvlines}
%
+% We have said (cf. p. \pageref{hvlines}) that the key |hvlines| draws all the
+% horizontal and vertical rules, excepted in the blocks. In fact, when this key
+% is in force, the rules are also not drawn in the virtual blocks delimited by
+% cells relied par dotted lines.
+%
% \medskip
% \begin{BVerbatim}[baseline=c,boxwidth=11cm]
-% $\begin{pNiceMatrix}[name=~emphase#mymatrix@]
-% 1 & 2 & 3 \\
-% 4 & 5 & 6 \\
-% 7 & 8 & 9
+% \NiceMatrixOptions{nullify-dots}
+% $\begin{pNiceMatrix}[rules/color=gray,~emphase#hvlines@,margin]
+% 0 & \Cdots & & & & 0 \\
+% 1 & \Cdots & & & 1 & 2 \\
+% 0 & \Ddots & & & \Vdots & \Vdots \\
+% \Vdots & \Ddots & & & & \\
+% & & & & & \\
+% 0 & \Cdots & & 0 & 1 & 2 \\
% \end{pNiceMatrix}$
-% \tikz[remember picture,overlay]
-% \draw ~emphase#(mymatrix-2-2)@ circle (2mm) ;
% \end{BVerbatim}
-% $\begin{pNiceMatrix}[name=mymatrix]
-% 1 & 2 & 3 \\
-% 4 & 5 & 6 \\
-% 7 & 8 & 9
+% \begin{scope}
+% \NiceMatrixOptions{nullify-dots}
+% $\begin{pNiceMatrix}[rules/color=gray,hvlines,margin]
+% 0 & \Cdots & & & & 0 \\
+% 1 & \Cdots & & & 1 & 2 \\
+% 0 & \Ddots & & & \Vdots & \Vdots \\
+% \Vdots & \Ddots & & & & \\
+% & & & & & \\
+% 0 & \Cdots & & 0 & 1 & 2 \\
% \end{pNiceMatrix}$
-% \tikz[remember picture,overlay]
-% \draw (mymatrix-2-2) circle (2mm) ;
-%
-% \medskip
-% Don't forget the options |remember picture| and |overlay|.
-%
-% \bigskip
-% In the following example, we have underlined all the nodes of the matrix.
-% \[\begin{pNiceMatrix}[
-% code-after = {\begin{tikzpicture}
-% [every node/.style = {blend mode = multiply,
-% fill = red!15,
-% inner sep = 0 pt }]
-% \node [fit = (1-1)] {} ;
-% \node [fit = (1-3)] {} ;
-% \node [fit = (2-2)] {} ;
-% \node [fit = (3-1)] {} ;
-% \node [fit = (3-3)] {} ;
-% \node [fit = (1-2)] {} ;
-% \node [fit = (2-1)] {} ;
-% \node [fit = (2-3)] {} ;
-% \node [fit = (3-2)] {} ;
-% \end{tikzpicture}}]
-% a & a + b & a + b + c \\
-% a & a & a + b \\
-% a & a & a
-% \end{pNiceMatrix}\]
-%
-%
-% \bigskip
-% In fact, the package \pkg{nicematrix} can create ``extra nodes'': the ``medium
-% nodes'' and the ``large nodes''. The first ones
-% are created with the option |create-medium-nodes| and the second ones with the
-% option |create-large-nodes|.\footnote{There is also an option
-% |create-extra-nodes| which is an alias for the conjonction of
-% |create-medium-nodes| and |create-large-nodes|.}
-%
-% \medskip
-% The names of the ``medium nodes'' are constructed by adding the suffix
-% ``|-medium|'' to the names of the ``normal nodes''. In the following example,
-% we have underlined the ``medium nodes''. We consider that this example is
-% self-explanatory.
-% \[\begin{pNiceMatrix}[
-% create-medium-nodes,
-% code-after = {\begin{tikzpicture}
-% [every node/.style = {fill = red!15,
-% blend mode = multiply,
-% inner sep = 0pt},
-% name suffix = -medium]
-% \node [fit = (1-1)] {} ;
-% \node [fit = (1-2)] {} ;
-% \node [fit = (1-3)] {} ;
-% \node [fit = (2-1)] {} ;
-% \node [fit = (2-2)] {} ;
-% \node [fit = (2-3)] {} ;
-% \node [fit = (3-1)] {} ;
-% \node [fit = (3-2)] {} ;
-% \node [fit = (3-3)] {} ;
-% \end{tikzpicture}}]
-% a & a + b & a + b + c \\
-% a & a & a + b \\
-% a & a & a
-% \end{pNiceMatrix}\]
-%
-%
-% \medskip
-% The names of the ``large nodes'' are constructed by adding the suffix
-% ``|-large|'' to the names of the ``normal nodes''. In the following example,
-% we have underlined the ``large nodes''. We consider that this example is
-% self-explanatory.\footnote{There is no ``large nodes'' created in the exterior
-% rows and columns (for these rows and columns, cf. p.~\pageref{exterior}).}
-%
-% \[\begin{pNiceMatrix}[
-% create-large-nodes,
-% code-after = {\begin{tikzpicture}
-% [every node/.style = {blend mode = multiply,
-% inner sep = 0pt},
-% name suffix = -large]
-% \node [fit = (1-1),fill = red!15] {} ;
-% \node [fit = (1-3),fill = red!15] {} ;
-% \node [fit = (2-2),fill = red!15] {} ;
-% \node [fit = (3-1),fill = red!15] {} ;
-% \node [fit = (3-3),fill = red!15] {} ;
-% \node [fit = (1-2),fill = blue!15] {} ;
-% \node [fit = (2-1),fill = blue!15] {} ;
-% \node [fit = (2-3),fill = blue!15] {} ;
-% \node [fit = (3-2),fill = blue!15] {} ;
-% \end{tikzpicture}}]
-% a & a + b & a + b + c \\
-% a & a & a + b \\
-% a & a & a
-% \end{pNiceMatrix}\]
+% \end{scope}
%
%
-% \medskip
-% The ``large nodes'' of the first column and last column may appear too small
-% for some usage. That's why it's possible to use the options |left-margin| and
-% |right-margin| to add space on both sides of the array and also space in the
-% ``large nodes'' of the first column and last column. In the following example,
-% we have used the options |left-margin| and |right-margin|.\footnote{The
-% options |left-margin| and |right-margin| take dimensions as values but, if no
-% value is given, the default value is used, which is |\arraycolsep| (by
-% default: 5~pt). There is also an option |margin| to fix both |left-margin| and
-% |right-margin| to the same value.}
-% \[\begin{pNiceMatrix}[
-% create-large-nodes,left-margin,right-margin,
-% code-after = {\begin{tikzpicture}
-% [every node/.style = {blend mode = multiply,
-% inner sep = 0pt},
-% name suffix = -large]
-% \node [fit = (1-1),fill = red!15] {} ;
-% \node [fit = (1-3),fill = red!15] {} ;
-% \node [fit = (2-2),fill = red!15] {} ;
-% \node [fit = (3-1),fill = red!15] {} ;
-% \node [fit = (3-3),fill = red!15] {} ;
-% \node [fit = (1-2),fill = blue!15] {} ;
-% \node [fit = (2-1),fill = blue!15] {} ;
-% \node [fit = (2-3),fill = blue!15] {} ;
-% \node [fit = (3-2),fill = blue!15] {} ;
-% \end{tikzpicture}}]
-% a & a + b & a + b + c \\
-% a & a & a + b \\
-% a & a & a
-% \end{pNiceMatrix}\]
-%
-% \medskip
-% It's also possible to add more space on both side of the array with the
-% options |extra-left-margin| and |extra-right-margin|. These margins are not
-% incorporated in the ``large nodes''. It's possible to fix both values with the
-% option |extra-margin| and, in the following example, we use |extra-margin|
-% with the value $3$~pt.
-% \[\begin{pNiceMatrix}[
-% create-large-nodes,margin,extra-margin=3pt,
-% code-after = {\begin{tikzpicture}
-% [every node/.style = {blend mode = multiply,
-% inner sep = 0 pt},
-% name suffix = -large]
-% \node [fit = (1-1),fill = red!15] {} ;
-% \node [fit = (1-3),fill = red!15] {} ;
-% \node [fit = (2-2),fill = red!15] {} ;
-% \node [fit = (3-1),fill = red!15] {} ;
-% \node [fit = (3-3),fill = red!15] {} ;
-% \node [fit = (1-2),fill = blue!15] {} ;
-% \node [fit = (2-1),fill = blue!15] {} ;
-% \node [fit = (2-3),fill = blue!15] {} ;
-% \node [fit = (3-2),fill = blue!15] {} ;
-% \end{tikzpicture}}]
-% a & a + b & a + b + c \\
-% a & a & a + b \\
-% a & a & a
-% \end{pNiceMatrix}\]
-%
-% \medskip
-% In this case, if we want a control over the height of the rows, we can add a
-% |\strut| in each row of the array.
-% \[\begin{pNiceMatrix}[
-% create-large-nodes,left-margin,right-margin,extra-right-margin=3pt,
-% extra-left-margin=3pt,
-% code-after = {\begin{tikzpicture}
-% [every node/.style = {blend mode = multiply,
-% inner sep = 0 pt},
-% name suffix = -large]
-% \node [fit = (1-1),fill = red!15] {} ;
-% \node [fit = (1-3),fill = red!15] {} ;
-% \node [fit = (2-2),fill = red!15] {} ;
-% \node [fit = (3-1),fill = red!15] {} ;
-% \node [fit = (3-3),fill = red!15] {} ;
-% \node [fit = (1-2),fill = blue!15] {} ;
-% \node [fit = (2-1),fill = blue!15] {} ;
-% \node [fit = (2-3),fill = blue!15] {} ;
-% \node [fit = (3-2),fill = blue!15] {} ;
-% \end{tikzpicture}}]
-% \strut a & a + b & a + b + c \\
-% \strut a & a & a + b \\
-% \strut a & a & a
-% \end{pNiceMatrix}\]
-%
-% \bigskip
-% We explain below how to fill the nodes created by \pkg{nicematrix} (cf. p.
-% \pageref{highlight}).
%
% \section{The code-after}
%
% \label{code-after}
% The option |code-after| may be used to give some code that will be excuted
-% after the construction of the matrix (and thus after the construction of
-% all the nodes).
+% after the construction of the matrix.\footnote{There is also a key
+% |code-before| described p.~\pageref{code-before}.}
%
-% \smallskip
-% \textbf{If Tikz is loaded}\footnote{We remind that, since the version 3.13,
-% \pkg{nicematrix} doesn't load Tikz by default but only \textsc{pgf} (Tikz is a
-% layer over \textsc{pfg}).}, one may access to that nodes with classical Tikz
-% instructions. The nodes should be designed as $i$-$j$ (without the prefix
-% corresponding to the name of the environment).
-%
-% Moreover, a special command, called |\line|, is available to draw directly
-% dotted lines between nodes. It may be used, for example, to draw a dotted line
+% A special command, called |\line|, is available to draw directly
+% dotted lines between nodes. It takes two arguments for the two cells to rely,
+% both of the form $i$-$j$ where is the number of row and $j$ is the number of
+% column. It may be used, for example, to draw a dotted line
% between two adjacents cells. \label{line-in-code-after}
%
% \medskip
@@ -949,823 +1796,49 @@ version 2005/12/01 or later.
% p.~\pageref{example-CodeAfter}.
%
%
-% \section{The environments \{NiceArray\} and \{NiceTabular\}}
-% \label{NiceArray}
-%
-% The environments |{NiceArray}| and |{NiceTabular}| are similar to the
-% environments |{array}| and |{tabular}|. The mandatory argument is the preamble
-% of the array. However, for technical reasons, in this preamble, the user must
-% use the letters |L|, |C| and~|R|\footnote{The column types |L|, |C| and |R|
-% are defined locally inside |{NiceArray}| with |\newcolumntype| of \pkg{array}.
-% This definition overrides an eventual previous definition.} instead of |l|,
-% |c| and |r|. In a command |\multicolumn|, one should also use the letters |L|,
-% |C|, |R|.
-%
-% It's possible to use the constructions |p{...}|, |m{...}|, |b{...}|,
-% |w{...}{...}|, |W{...}{...}|, "|", |>{...}|, |<{...}|, |@{...}|, |!{...}| and
-% |*{n}{...}|. However, in the environment |{NiceArray}| (and its variants), the
-% content of the columns of type |w| or |W| is composed in math mode (in
-% |{array}| of \pkg{array}, they are composed in text mode).
-%
-% \bigskip
-% The package \pkg{nicematrix} provides also the variants |{pNiceArray}|,
-%|{vNiceArray}|, |{VNiceArray}|, |{bNiceArray}| and |{BNiceArray}|.
-%
-% \bigskip
-% Of course, one of the benefits of |{pNiceArray}| over |{pNiceMatrix}| is the
-% possibility of drawing vertical rules:
-%
-%\bigskip
-% \begin{BVerbatim}[baseline=c,boxwidth=10cm]
-% $\left[\begin{NiceArray}{CCCC|C}
-% a_1 & ? & \Cdots & ? & ? \\
-% 0 & & \Ddots & \Vdots & \Vdots\\
-% \Vdots & \Ddots & \Ddots & ? \\
-% 0 & \Cdots & 0 & a_n & ?
-% \end{NiceArray}\right]$
-% \end{BVerbatim}
-% $\left[\begin{NiceArray}{CCCC|C}
-% a_1 & ? & \Cdots & ? & ? \\
-% 0 & & \Ddots & \Vdots & \Vdots\\
-% \Vdots & \Ddots & \Ddots & ? \\
-% 0 & \Cdots & 0 & a_n & ?
-% \end{NiceArray}\right]$
-%
-% \bigskip
-% Another benefit is the possibility of using different alignments of columns.
-%
-% \bigskip
-% \begin{BVerbatim}[baseline=c,boxwidth=10cm]
-% $\begin{pNiceArray}{LCR}
-% a_{11} & \Cdots & a_{1n} \\
-% a_{21} & & a_{2n} \\
-% \Vdots & & \Vdots \\
-% a_{n-1,1} & \Cdots & a_{n-1,n}
-% \end{pNiceArray}$
-% \end{BVerbatim}
-% $\begin{pNiceArray}{LCR}
-% a_{11} & \Cdots & a_{1n} \\
-% a_{21} & & a_{2n} \\
-% \Vdots & & \Vdots \\
-% a_{n-1,1} & \Cdots & a_{n-1,n}
-% \end{pNiceArray}$
-%
-%
-% \bigskip
-% In fact, the environment |{pNiceArray}| and its variants are based upon a
-% more general environment, called |{NiceArrayWithDelims}|. The first two
-% mandatory arguments of this environment are the left and right delimiters used
-% in the construction of the matrix. It's possible to use
-% |{NiceArrayWithDelims}| if we want to use atypical or asymetrical delimiters.
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=11cm]
-% $\begin{~emphase#NiceArrayWithDelims@}
-% {\downarrow}{\uparrow}{CCC}[margin]
-% 1 & 2 & 3 \\
-% 4 & 5 & 6 \\
-% 7 & 8 & 9
-% \end{~emphase#NiceArrayWithDelims@}$
-% \end{BVerbatim}
-% $\begin{NiceArrayWithDelims}
-% {\downarrow}{\uparrow}{CCC}[margin]
-% 1 & 2 & 3 \\
-% 4 & 5 & 6 \\
-% 7 & 8 & 9
-% \end{NiceArrayWithDelims}$
-%
-%
-% \bigskip
-% \section{The vertical position of the arrays}
-%
-% The package \pkg{nicematrix} provides a option |baseline| for the vertical
-% position of the arrays. This option takes as value an integer which is the
-% number of the row on which the array will be aligned.
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
-% $A = \begin{pNiceMatrix}[~emphase#baseline=2@]
-% \frac{1}{\sqrt{1+p^2}} & p & 1-p \\
-% 1 & 1 & 1 \\
-% 1 & p & 1+p
-% \end{pNiceMatrix}$
-% \end{BVerbatim}
-% $A = \begin{pNiceMatrix}[baseline=2]
-% \frac{1}{\sqrt{1+p^2}} & p & 1-p \\
-% 1 & 1 & 1 \\
-% 1 & p & 1+p
-% \end{pNiceMatrix}$
-%
-%
-% \medskip
-% It's also possible to use the option |baseline| with one of the special values
-% |t|, |c| or |b|. These letters may also be used absolutely like the option of
-% the environment |{array}| of \pkg{array}. The initial value of |baseline| is~|c|.
-%
-%
-% \medskip
-% In the following example, we use the option |t| (equivalent to |baseline=t|)
-% immediately after an |\item| of list. One should remark that the presence of
-% a |\hline| at the beginning of the array doesn't prevent the alignment of the
-% baseline with the baseline of the first row (with |{array}| of \pkg{array},
-% one must use |\firsthline|\footnote{It's also possible to use |\firsthline|
-% with |{NiceArray}|.}).
-%
-% \smallskip
-% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
-% \begin{enumerate}
-% \item an item
-% \smallskip
-% \item \renewcommand{\arraystretch}{1.2}
-% $\begin{NiceArray}~emphase#[t]@{LCCCCCC}
-% \hline
-% n & 0 & 1 & 2 & 3 & 4 & 5 \\
-% u_n & 1 & 2 & 4 & 8 & 16 & 32
-% \hline
-% \end{NiceArray}$
-% \end{enumerate}
-% \end{BVerbatim}
-% \begin{minipage}{5cm}
-% \begin{enumerate}
-% \item an item
-% \smallskip
-% \item \renewcommand{\arraystretch}{1.2}
-% $\begin{NiceArray}[t]{LCCCCCC}
-% \hline
-% n & 0 & 1 & 2 & 3 & 4 & 5 \\
-% u_n & 1 & 2 & 4 & 8 & 16 & 32 \\
-% \hline
-% \end{NiceArray}$
-% \end{enumerate}
-% \end{minipage}
-%
-% \medskip
-% However, it's also possible to use the tools of \pkg{booktabs}: |\toprule|,
-% |\bottomrule| and |\midrule|.\par\nobreak
-%
-% \smallskip
-% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
-% \begin{enumerate}
-% \item an item
-% \smallskip
-% \item
-% $\begin{NiceArray}[t]{LCCCCCC}
-% ~emphase#\toprule@
-% n & 0 & 1 & 2 & 3 & 4 & 5 \\
-% ~emphase#\midrule@
-% u_n & 1 & 2 & 4 & 8 & 16 & 32
-% ~emphase#\bottomrule@
-% \end{NiceArray}$
-% \end{enumerate}
-% \end{BVerbatim}
-% \begin{minipage}{5cm}
-% \begin{enumerate}
-% \item an item
-% \smallskip
-% \item
-% $\begin{NiceArray}[t]{LCCCCCC}
-% \toprule
-% n & 0 & 1 & 2 & 3 & 4 & 5 \\
-% \midrule
-% u_n & 1 & 2 & 4 & 8 & 16 & 32 \\
-% \bottomrule
-% \end{NiceArray}$
-% \end{enumerate}
-% \end{minipage}
-%
-%
-% \bigskip
-% \section{The exterior rows and columns}
-% The options |first-row|, |last-row|, |first-col| and |last-col| allow the
-% composition of exterior rows and columns in the environments of
-% \pkg{nicematrix}.
-% \label{exterior}
-%
-% A potential ``first row'' (exterior) has the number $0$ (and not $1$). Idem
-% for the potential ``first column''.
-%
-% \begin{Verbatim}
-% $\begin{pNiceMatrix}[~emphase#first-row,last-row,first-col,last-col@]
-% $\begin{pNiceMatrix}[~emphase#first-row,last-row,first-col,last-col@,nullify-dots]
-% & C_1 & \Cdots & & C_4 & \\
-% L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
-% \Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
-% & a_{31} & a_{32} & a_{33} & a_{34} & \\
-% L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
-% & C_1 & \Cdots & & C_4 &
-% \end{pNiceMatrix}$
-% \end{pNiceMatrix}$
-% \end{Verbatim}
-%
-% \[\begin{pNiceMatrix}[first-row,last-row,first-col,last-col,nullify-dots]
-% & C_1 & \Cdots & & C_4 & \\
-% L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
-% \Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
-% & a_{31} & a_{32} & a_{33} & a_{34} & \\
-% L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
-% & C_1 & \Cdots & & C_4 &
-% \end{pNiceMatrix}\]
-%
-%
-% \bigskip
-% We have several remarks to do.
-% \begin{itemize}
-% \item For the environments with an explicit preamble (i.e. |{NiceArray}| and
-% its variants), no letter must be given in that preamble for the potential
-% first column and the potential last column: they will automatically (and
-% necessarily) be of type |R| for the first column and |L| for the last one.
-% \item One may wonder how \pkg{nicematrix} determines the number of rows and
-% columns which are needed for the composition of the ``last row'' and ``last
-% column''.
-% \begin{itemize}
-% \item For the environments with explicit preamble, like |{NiceTabular}| and
-% |{pNiceArray}|, the number of columns can obviously be computed from the
-% preamble.
-%
-% \item When the option |light-syntax| (cf. p. \pageref{light-syntax}) is used,
-% \pkg{nicematrix} has, in any case, to load the whole body of the environment
-% (and that's why it's not possible to put verbatim material in the array with
-% the option |light-syntax|). The analysis of this whole body gives the number
-% of rows (but not the number of columns).
-%
-% \item In the other cases, \pkg{nicematrix} compute the number of rows and
-% columns during the first compilation and write the result in the |aux| file
-% for the next run.
-%
-% \textsl{However, it's possible to provide the number of the last row and the
-% number of the last column as values of the options |last-row| and |last-col|,
-% tending to an acceleration of the whole compilation of the document.} That's
-% what we will do throughout the rest of the document.
-% \end{itemize}
-% \end{itemize}
-%
-% \bigskip
-% It's possible to control the appearance of these rows and columns with options
-% |code-for-first-row|, |code-for-last-row|, |code-for-first-col| and
-% |code-for-last-col|. These options
-% specify tokens that will be inserted before each cell of the corresponding row
-% or column.
-%
-%
-% \begin{Verbatim}
-% \NiceMatrixOptions{~emphase#code-for-first-row@ = \color{red},
-% ~emphase#code-for-first-col@ = \color{blue},
-% ~emphase#code-for-last-row@ = \color{green},
-% ~emphase#code-for-last-col@ = \color{magenta}}
-% $\begin{pNiceArray}{CC|CC}[first-row,last-row=5,first-col,last-col,nullify-dots]
-% & C_1 & \Cdots & & C_4 & \\
-% L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
-% \Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
-% \hline
-% & a_{31} & a_{32} & a_{33} & a_{34} & \\
-% L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
-% & C_1 & \Cdots & & C_4 &
-% \end{pNiceArray}$
-% \end{Verbatim}
-%
-% \begin{scope}
-% \NiceMatrixOptions{code-for-first-row = \color{red},
-% code-for-first-col = \color{blue},
-% code-for-last-row = \color{green},
-% code-for-last-col = \color{magenta}}
-% \begin{displaymath}
-% \begin{pNiceArray}{CC|CC}[first-row,last-row=5,first-col,last-col,nullify-dots]
-% & C_1 & \multicolumn1C{\Cdots} & & C_4 & \\
-% L_1 & a_{11} & a_{12} & a_{13} & a_{14} & L_1 \\
-% \Vdots & a_{21} & a_{22} & a_{23} & a_{24} & \Vdots \\
-% \hline
-% & a_{31} & a_{32} & a_{33} & a_{34} & \\
-% L_4 & a_{41} & a_{42} & a_{43} & a_{44} & L_4 \\
-% & C_1 & \multicolumn1C{\Cdots} & & C_4 &
-% \end{pNiceArray}
-% \end{displaymath}
-% \end{scope}
-%
-%
-% \emph{Remarks}
-% \begin{itemize}[beginpenalty=10000]
-% \item As shown in the previous example, an horizontal rule (drawn by |\hline|)
-% doesn't extend in the exterior columns and a vertical rule (specified by a
-% ``\verb+|+'' in the preamble of the array) doesn't extend in the exterior
-% rows.\footnote{The latter is not true when the package \pkg{arydshln} is
-% loaded besides \pkg{nicematrix}. In fact, \pkg{nicematrix} and \pkg{arydhsln}
-% are not totally compatible because \pkg{arydshln} redefines many internals of
-% \pkg{array}. On another hand, if one really wants a vertical rule running in
-% the first and in the last row, he should use |!{\vline}| instead of \verb+|+
-% in the preamble of the array.}
-%
-% If one wishes to define new specifiers for columns in order to draw vertical
-% rules (for example thicker than the standard rules), he should consider the
-% command |\OnlyMainNiceMatrix| described on page~\pageref{OnlyMainNiceMatrix}.
-%
-% \item A specification of color present in |code-for-first-row| also applies to
-% a dotted line draw in this exterior ``first row'' (excepted if a value has
-% been given to |xdots/color|). Idem for the other exterior rows and columns.
-%
-% \item Logically, the potential option |columns-width| (described
-% p.~\pageref{width}) doesn't apply to the ``first column'' and ``last column''.
-% \item For technical reasons, it's not possible to use the option of the
-% command |\\| after the ``first row'' or before the ``last row'' (the placement
-% of the delimiters would be wrong).
-% \end{itemize}
-%
%
%
+% \section{Other features}
%
+% \subsection{Use of the column type S of siunitx}
%
-% \section{The dotted lines to separate rows or columns}
-%
-%
-% In the environments of the package \pkg{nicematrix}, it's possible to use
-% the command |\hdottedline| (provided by \pkg{nicematrix}) which is a
-% counterpart of the classical commands |\hline| and |\hdashline| (the latter is
-% a command of \pkg{arydshln}).
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
-% \begin{pNiceMatrix}
-% 1 & 2 & 3 & 4 & 5 \\
-% ~emphase#\hdottedline@
-% 6 & 7 & 8 & 9 & 10 \\
-% 11 & 12 & 13 & 14 & 15
-% \end{pNiceMatrix}
-% \end{BVerbatim}
-% $\begin{pNiceMatrix}
-% 1 & 2 & 3 & 4 & 5 \\
-% \hdottedline
-% 6 & 7 & 8 & 9 & 10 \\
-% 11 & 12 & 13 & 14 & 15
-% \end{pNiceMatrix}$
-%
-%
-% \bigskip
-% In the environments with an explicit preamble (like |{NiceArray}|, etc.), it's
-% possible to draw a vertical dotted line with the specifier ``|:|''.
+% If the package \pkg{siunitx} is loaded (before or after \pkg{nicematrix}),
+% it's possible to use the |S| column type of \pkg{siunitx} in the environments
+% of \pkg{nicematrix}. The implementation doesn't use explicitly any private
+% macro of \pkg{siunitx}.
%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
-% \left(\begin{NiceArray}{CCCC~emphase#:@C}
-% 1 & 2 & 3 & 4 & 5 \\
-% 6 & 7 & 8 & 9 & 10 \\
-% 11 & 12 & 13 & 14 & 15
-% \end{NiceArray}\right)
-% \end{BVerbatim}
-% $\left(\begin{NiceArray}{CCCC:C}
-% 1 & 2 & 3 & 4 & 5 \\
-% 6 & 7 & 8 & 9 & 10 \\
-% 11 & 12 & 13 & 14 & 15
-% \end{NiceArray}\right)$
-%
-%
-% \bigskip
-% These dotted lines do \emph{not} extend in the potential exterior rows and
-% columns.
-%
%
% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=9.5cm]
-% $\begin{pNiceArray}{CCC:C}[
-% first-row,last-col,
-% code-for-first-row = \color{blue}\scriptstyle,
-% code-for-last-col = \color{blue}\scriptstyle ]
-% C_1 & C_2 & C_3 & C_4 \\
-% 1 & 2 & 3 & 4 & L_1 \\
-% 5 & 6 & 7 & 8 & L_2 \\
-% 9 & 10 & 11 & 12 & L_3 \\
-% \hdottedline
-% 13 & 14 & 15 & 16 & L_4
+% \begin{BVerbatim}[baseline = c, boxwidth = 10.5cm]
+% $\begin{pNiceArray}{~emphase#S@CWc{1cm}C}[nullify-dots,first-row]
+% {C_1} & \Cdots & & C_n \\
+% 2.3 & 0 & \Cdots & 0 \\
+% 12.4 & \Vdots & & \Vdots \\
+% 1.45 \\
+% 7.2 & 0 & \Cdots & 0
% \end{pNiceArray}$
% \end{BVerbatim}
-% $\begin{pNiceArray}{CCC:C}[
-% first-row,last-col,
-% code-for-first-row = \color{blue}\scriptstyle,
-% code-for-last-col = \color{blue}\scriptstyle ]
-% C_1 & C_2 & C_3 & C_4 \\
-% 1 & 2 & 3 & 4 & L_1 \\
-% 5 & 6 & 7 & 8 & L_2 \\
-% 9 & 10 & 11 & 12 & L_3 \\
-% \hdottedline
-% 13 & 14 & 15 & 16 & L_4
+% $\begin{pNiceArray}{SCWc{1cm}C}[nullify-dots,first-row]
+% {C_1} & \Cdots & & C_n \\
+% 2.3 & 0 & \Cdots & 0 \\
+% 12.4 & \Vdots & & \Vdots \\
+% 1.45 \\
+% 7.2 & 0 & \Cdots & 0
% \end{pNiceArray}$
%
-% \bigskip
-% It's possible to change in \pkg{nicematrix} the letter used to specify a
-% vertical dotted line with the option |letter-for-dotted-lines| available in
-% |\NiceMatrixOptions|.
-%
-% \bigskip
-% \emph{Remark} : In the package \pkg{array} (on which the package
-% \pkg{nicematrix} relies), horizontal and vertical rules make the array larger
-% or wider by a quantity equal to the width of the rule\footnote{In fact, this
-% is true only for |\hline| and ``"|"'' but not for |\cline|.}. In
-% \pkg{nicematrix}, the dotted lines drawn by |\hdottedline| and ``|:|'' do
-% likewise.
-%
-%
-%
-% \section{The width of the columns}
-% \label{width}
-%
-% In the environments with an explicit preamble (like |{NiceArray}|,
-% |{pNiceArray}|, etc.), it's possible to fix the width of a given column with
-% the standard letters |w| and |W| of the package \pkg{array}. In the
-% environments of \pkg{nicematrix}, the cells of such columns are composed in
-% mathematical mode, whereas, in |{array}| of \pkg{array}, they are composed in
-% text mode.
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=10cm]
-% $\left(\begin{NiceArray}{~emphase#wc{1cm}@CC}
-% 1 & 12 & -123 \\
-% 12 & 0 & 0 \\
-% 4 & 1 & 2
-% \end{NiceArray}\right)$
-% \end{BVerbatim}
-% $\left(\begin{NiceArray}{wc{1cm}CC}
-% 1 & 12 & -123 \\
-% 12 & 0 & 0 \\
-% 4 & 1 & 2
-% \end{NiceArray}\right)$
-%
-%
-% \bigskip
-% In the environments of \pkg{nicematrix}, it's also possible to fix the \emph{minimal}
-% width of all the columns of a matrix directly with the option |columns-width|.
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=10cm]
-% $\begin{pNiceMatrix}[~emphase#columns-width = 1cm@]
-% 1 & 12 & -123 \\
-% 12 & 0 & 0 \\
-% 4 & 1 & 2
-% \end{pNiceMatrix}$
-% \end{BVerbatim}
-% $\begin{pNiceMatrix}[columns-width = 1cm]
-% 1 & 12 & -123 \\
-% 12 & 0 & 0 \\
-% 4 & 1 & 2
-% \end{pNiceMatrix}$
-%
-% \medskip
-% Note that the space inserted between two columns (equal to 2 |\arraycolsep|)
-% is not suppressed (of course, it's possible to suppress this space by setting
-% |\arraycolsep| equal to $0$~pt).
-%
-% \bigskip
-% It's possible to give the special value |auto| to the option |columns-width|:
-% all the columns of the array will have a width equal to the widest cell of
-% the array.\footnote{The result is achieved with only one compilation (but Tikz
-% will have written informations in the |.aux| file and a message requiring a
-% second compilation will appear).}\par\nobreak
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=10cm]
-% $\begin{pNiceMatrix}[~emphase#columns-width = auto@]
-% 1 & 12 & -123 \\
-% 12 & 0 & 0 \\
-% 4 & 1 & 2
-% \end{pNiceMatrix}$
-% \end{BVerbatim}
-% $\begin{pNiceMatrix}[columns-width = auto]
-% 1 & 12 & -123 \\
-% 12 & 0 & 0 \\
-% 4 & 1 & 2
-% \end{pNiceMatrix}$
-%
-% \bigskip
-% Without surprise, it's possible to fix the minimal width of the columns of all
-% the matrices of a current scope with the command
-% |\NiceMatrixOptions|.\par\nobreak
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
-% ~emphase#\NiceMatrixOptions{columns-width=10mm}@
-% $\begin{pNiceMatrix}
-% a & b \\ c & d
-% \end{pNiceMatrix}
-% =
-% \begin{pNiceMatrix}
-% 1 & 1245 \\ 345 & 2
-% \end{pNiceMatrix}$
-% \end{BVerbatim}
-% \begin{scope}
-% \NiceMatrixOptions{columns-width=10mm}
-% $\begin{pNiceMatrix}
-% a & b \\
-% c & d
-% \end{pNiceMatrix}
-% =
-% \begin{pNiceMatrix}
-% 1 & 1245 \\
-% 345 & 2
-% \end{pNiceMatrix}$
-% \end{scope}
-%
-%
-% \bigskip
-% But it's also possible to fix a zone where all the matrices will have their
-% columns of the same width, equal to the widest cell of all the matrices. This
-% construction uses the environment |{NiceMatrixBlock}| with the option
-% |auto-columns-width|\footnote{At this time, this is the only usage of the
-% environment |{NiceMatrixBlock}| but it may have other usages in the future.}.
-% The environment |{NiceMatrixBlock}| has no direct link with the command
-% |\Block| presented just below (cf.~p.~\pageref{Block}).
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=8.5cm]
-% ~emphase#\begin{NiceMatrixBlock}[auto-columns-width]@
-% $\begin{pNiceMatrix}
-% a & b \\ c & d
-% \end{pNiceMatrix}
-% =
-% \begin{pNiceMatrix}
-% 1 & 1245 \\ 345 & 2
-% \end{pNiceMatrix}$
-% ~emphase#\end{NiceMatrixBlock}@
-% \end{BVerbatim}
-% \begin{NiceMatrixBlock}[auto-columns-width]
-% $\begin{pNiceMatrix}
-% a & b \\ c & d
-% \end{pNiceMatrix}
-% =
-% \begin{pNiceMatrix}
-% 1 & 1245 \\ 345 & 2
-% \end{pNiceMatrix}$
-% \end{NiceMatrixBlock}
-%
-% \medskip
-% \textbf{Several compilations may be necessary to achieve the job.}
-%
-%
-% \section{Block matrices}
-% \label{Block}
-%
-% This section has no direct link with the previous one where an environment
-% |{NiceMatrixBlock}| was introduced.
-%
-% In the environments of \pkg{nicematrix}, it's possible to use the command
-% |\Block| in order to place an element in the center of a rectangle of merged
-% cells of the array.
-%
-% The command |\Block| must be used in the upper leftmost cell of the array with
-% two arguments. The first argument is the size of the block with the syntax
-% $i$\verb|-|$j$ where $i$ is the number of rows of the block and $j$ its number
-% of columns. The second argument is the content of the block (composed in math
-% mode). A Tikz node corresponding to the merged cells is created with the name
-% ``$i$-$j$-block''. If the user has required the creation of the ``medium
-% nodes'', a node of this type is also created with a name suffixed by
-% |-medium|.
-%
-% \medskip
-% In the following examples, we use the command |\arrayrulecolor| of
-% \pkg{colortbl}.
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
-% \arrayrulecolor{blue}
-% $\begin{bNiceArray}{CCC|C}[margin]
-% ~emphase#\Block{3-3}{A}@ & & & 0 \\
-% & \hspace*{1cm} & & \Vdots \\
-% & & & 0 \\
-% \hline
-% 0 & \Cdots& 0 & 0
-% \end{bNiceArray}$
-% \arrayrulecolor{black}
-% \end{BVerbatim}
-% \begin{scope}
-% \arrayrulecolor{blue}
-% $\begin{bNiceArray}{CCC|C}[margin]
-% \Block{3-3}{A} & & & 0 \\
-% & \hspace*{1cm} & & \Vdots \\
-% & & & 0 \\
-% \hline
-% 0 & \Cdots& 0 & 0
-% \end{bNiceArray}$
-% \arrayrulecolor{black}
-% \end{scope}
-%
-% \bigskip
-% One may wish to raise the size of the ``$A$'' placed in the block of the
-% previous example. Since this element is composed in math mode, it's not
-% possible to use directly a command like |\large|, |\Large| and |\LARGE|.
-% That's why the command |\Block| provides an option between angle brackets to
-% specify some TeX code which will be inserted before the beginning of the
-% math mode.
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
-% \arrayrulecolor{blue}
-% $\begin{bNiceArray}{CCC|C}[margin]
-% \Block{3-3}~emphase#<\Large>@{A} & & & 0 \\
-% & \hspace*{1cm} & & \Vdots \\
-% & & & 0 \\
-% \hline
-% 0 & \Cdots& 0 & 0
-% \end{bNiceArray}$
-% \arrayrulecolor{black}
-% \end{BVerbatim}
-% \begin{scope}
-% \arrayrulecolor{blue}
-% $\begin{bNiceArray}{CCC|C}[margin]
-% \Block{3-3}<\Large>{A} & & & 0 \\
-% & \hspace*{1cm} & & \Vdots \\
-% & & & 0 \\
-% \hline
-% 0 & \Cdots& 0 & 0
-% \end{bNiceArray}$
-% \arrayrulecolor{black}
-% \end{scope}
-%
-% \medskip
-% For technical reasons, you can't write |\Block{|$i$|-|$j$|}{<}|. But you can
-% write |\Block{|$i$|-|$j$|}<>{<}| with the expected result.
-%
-%
-% \section{The color of the rows and columns}
-%
-% With the classical package \pkg{colortbl}, it's possible to color the cells,
-% rows and columns of a tabular. However, the resulting \textsc{pdf} is not
-% always perfectly displayed by the \textsc{pdf} viewers, in particular in
-% conjonction with rules. With some \textsc{pdf} viewers, some vertical rules
-% seem to vanish. On the other side, some thin horizontal white lines may appear
-% in some circonstances.
-%
-%
-% \medskip
-% The version 4.0 of \pkg{nicematrix} provide similar tools which do not
-% present these drawbacks. This version provides a key |code-before| for some
-% code which will be executed \emph{before} the drawing of the tabular. In this
-% |code-before|, new commands are available: |\cellcolor|, |\rectanglecolor|,
-% |\rowcolor|, |\columncolor|, |\rowcolors| and |\chessboardcolors|.
-%
% \medskip
-% \begin{itemize}
-% \item The command |\cellcolor| takes its name from the command |\cellcolor| of
-% \pkg{colortbl}.
-%
-% This command takes in arguments a color and a list of cells, each of which
-% with the format $i$-$j$ where $i$ is the number of row and $j$ the number of
-% colummn of the cell.
-%
-%
-% \medskip
-% \begin{scope}
-% \hfuzz=10cm
-% \begin{BVerbatim}[boxwidth=10cm,baseline=c]
-% \begin{NiceTabular}{|C|C|C|}[code-before = ~emphase#\cellcolor{red!15}{3-1,2-2,1-3}@]
-% \hline
-% a & b & c \\ \hline
-% e & f & g \\ \hline
-% h & i & j \\ \hline
-% \end{NiceTabular}
-% \end{BVerbatim}
-% \begin{NiceTabular}{|C|C|C|}[code-before = \cellcolor{red!15}{3-1,2-2,1-3}]
-% \hline
-% a & b & c \\ \hline
-% e & f & g \\ \hline
-% h & i & j \\ \hline
-% \end{NiceTabular}
-% \end{scope}
-%
-% \bigskip
-% \item The command |\rectanglecolor| takes three arguments. The first is the
-% color. The second is the upper-left cell of the rectangle and the third is
-% the lower-right cell of the rectangle.
-%
-% \medskip
-% \begin{scope}
-% \hfuzz=10cm
-% \begin{BVerbatim}[boxwidth=10cm,baseline=c]
-% \begin{NiceTabular}{|C|C|C|}[code-before = ~emphase#\rectanglecolor{red!15}{2-2}{3-3}@]
-% \hline
-% a & b & c \\ \hline
-% e & f & g \\ \hline
-% h & i & j \\ \hline
-% \end{NiceTabular}
-% \end{BVerbatim}
-% \begin{NiceTabular}{|C|C|C|}[code-before = \rectanglecolor{red!15}{2-2}{3-3}]
-% \hline
-% a & b & c \\ \hline
-% e & f & g \\ \hline
-% h & i & j \\ \hline
-% \end{NiceTabular}
-% \end{scope}
-%
-%
-%
-% \bigskip
-% \item The command |\rowcolor| takes its name from the command |\rowcolor| of
-% \pkg{colortbl}. Its first argument is the color and the second is a
-% comma-separated list of rows or interval of rows with the form $a$-$b$ (an
-% interval of the form $a$- represent all the rows from the row $a$ until the end).
-%
-% \medskip
-% \begin{scope}
-% \hfuzz = 10cm
-% \begin{BVerbatim}[boxwidth=9cm,baseline=c]
-% $\begin{NiceArray}{LLL}[hvlines, ~emphase#code-before = \rowcolor{red!15}{1,3-5,8-}@]
-% a_1 & b_1 & c_1 \\
-% a_2 & b_2 & c_2 \\
-% a_3 & b_3 & c_3 \\
-% a_4 & b_4 & c_4 \\
-% a_5 & b_5 & c_5 \\
-% a_6 & b_6 & c_6 \\
-% a_7 & b_7 & c_7 \\
-% a_8 & b_8 & c_8 \\
-% a_9 & b_9 & c_9 \\
-% a_{10} & b_{10} & c_{10} \\
-% \end{NiceArray}$
-% \end{BVerbatim}
-% $\begin{NiceArray}{LLL}[baseline=4,hvlines, code-before = \rowcolor{red!15}{1,3-5,8-}]
-% a_1 & b_1 & c_1 \\
-% a_2 & b_2 & c_2 \\
-% a_3 & b_3 & c_3 \\
-% a_4 & b_4 & c_4 \\
-% a_5 & b_5 & c_5 \\
-% a_6 & b_6 & c_6 \\
-% a_7 & b_7 & c_7 \\
-% a_8 & b_8 & c_8 \\
-% a_9 & b_9 & c_9 \\
-% a_{10} & b_{10} & c_{10} \\
-% \end{NiceArray}$
-% \end{scope}
-%
-%
-% \bigskip
-% \item The command |\columncolor| takes its name from the command
-% |\columncolor| of \pkg{colortbl}. Its syntax is similar to the syntaxe of
-% |\rowcolor|.
-%
-% \bigskip
-% \item The command |\rowcolors| (with a \emph{s}) takes its name from the
-% command |\rowcolors| of \pkg{xcolor}. The \emph{s} emphasizes the fact that
-% there is \emph{two} colors. This command colors alternately the rows of the
-% tabular, beginning with the row whose number is given in first argument. The
-% two other arguments are the colors.
-%
-% \medskip
-% \begin{scope}
-% \hfuzz=10cm
-% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
-% \begin{NiceTabular}{LR}%
-% [~emphase#code-before = \rowcolor{red!15}{1} \rowcolors{3}{blue!10}{}@]
-% \toprule
-% Town & Habitants \\
-% \midrule
-% Pau & 80000 \\
-% Paris & 2000000 \\
-% Toulouse & 700000 \\
-% Reims & 40000 \\
-% \bottomrule
-% \end{NiceTabular}
-% \end{BVerbatim}
-% \begin{NiceTabular}{LR}[code-before =\rowcolor{red!15}{1} \rowcolors{3}{blue!10}{}]
-% \toprule
-% Ville & habitants \\
-% \midrule
-% Pau & 80000 \\
-% Paris & 2000000 \\
-% Toulouse & 700000 \\
-% Reims & 40000 \\
-% \bottomrule
-% \end{NiceTabular}
-% \end{scope}
-%
-% \bigskip
-% \item The command |\chessboardcolors| take in arguments two colors and colors
-% the cells of the tabular in quincunx with these colors.
-%
-% \medskip
-% \begin{scope}
-% \hfuzz=10cm
-% \begin{BVerbatim}[baseline=c,boxwidth=9cm]
-% $\begin{pNiceMatrix}[R,margin, ~emphase#code-before=\chessboardcolors{red!15}{blue!15}@]
-% 1 & -1 & 1 \\
-% -1 & 1 & -1 \\
-% 1 & -1 & 1
-% \end{pNiceMatrix}$
-% \end{BVerbatim}
-% $\begin{pNiceMatrix}[R,baseline=1, margin, code-before = \chessboardcolors{red!15}{blue!15}]
-% 1 & -1 & 1 \\
-% -1 & 1 & -1 \\
-% 1 & -1 & 1
-% \end{pNiceMatrix}$
-% \end{scope}
-%
-% \end{itemize}
-%
+% On the other hand, the |d| columns of the package \pkg{dcolumn} are not
+% supported by \pkg{nicematrix}.
%
-%
-% \section{Advanced features}
%
+% \subsection{Alignement option in \{NiceMatrix\}}
%
-% \subsection{Alignement option in NiceMatrix}
+% \label{key-R}
%
% The environments without preamble (|{NiceMatrix}|, |{pNiceMatrix}|,
% |{bNiceMatrix}|, etc.) provide two options |l| and |r| (equivalent at |L| and
% |R|) which generate all the columns aligned leftwards (or
-% rightwards).\footnote{This is a part of the functionality provided by the
-% environments |{pmatrix*}|, |{bmatrix*}|, etc. of \pkg{mathtools}.}
+% rightwards).
%
%
% \medskip
@@ -1780,6 +1853,11 @@ version 2005/12/01 or later.
% \sin x & \cos x
% \end{bNiceMatrix}$
%
+% \medskip
+% There is also a key |S| which sets all the columns all type |S| of
+% \pkg{siunitx} (if this package is loaded).\footnote{This is a part of the
+% functionality provided by the environments |{pmatrix*}|, |{bmatrix*}|, etc. of
+% \pkg{mathtools}.}
%
% \subsection{The command \textbackslash rotate}
%
@@ -1900,9 +1978,10 @@ version 2005/12/01 or later.
% exists) has also the number~$0$.}. Of course, the user must not change the
% value of these counters which are used internally by \pkg{nicematrix}.
%
-% In the |code-after| (cf. p. \pageref{code-after}), |iRow| represents the total
-% number of rows (excepted the potential exterior rows) and |jCol| represents
-% the total number of columns (excepted the potential exterior columns).
+% In the |code-before| (cf. p. \pageref{code-before}) and in the |code-after|
+% (cf. p. \pageref{code-after}), |iRow| represents the total number of rows
+% (excepted the potential exterior rows) and |jCol| represents the total number
+% of columns (excepted the potential exterior columns).
%
% \medskip
% \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
@@ -1929,8 +2008,8 @@ version 2005/12/01 or later.
%
% \medskip
% If LaTeX counters called |iRow| and |jCol| are defined in the document by
-% packages other than \pkg{nicematrix} (or by the user), they are shadowed in
-% the environments of \pkg{nicematrix}.
+% packages other than \pkg{nicematrix} (or by the final user), they are shadowed
+% in the environments of \pkg{nicematrix}.
%
% \bigskip
% The package \pkg{nicematrix} also provides commands in order to compose
@@ -1950,98 +2029,15 @@ version 2005/12/01 or later.
% \end{Verbatim}
%
%
-% $C = \pAutoNiceMatrix{3-3}{C_{\arabic{iRow},\arabic{jCol}}}$
-%
-% \subsection{The options hlines, vlines and hvlines}
-%
-% \label{hvlines}
-% You can add horizontal rules between rows in the environments of
-% \pkg{nicematrix} with the usual command |\hline| and you can use the specifier
-% ``"|"'' to add vertical rules. However, by convenience, the package
-% \pkg{nicematrix} also provides the option |hlines| (resp. |vlines|) which will
-% draw all the horizontal (resp. vertical) rules (excepted, of course, the
-% exterior rules corresponding to the exterior rows and columns). The key
-% |hvlines| is an alias for the conjonction for the keys |hlines| et |vlines|.
-%
-% % \medskip
-% In the following example, we use the command |\arrayrulecolor| of
-% \pkg{colortbl}.
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=11cm]
-% \arrayrulecolor{blue}
-% $\begin{NiceArray}{CCCC}%
-% [~emphase#hvlines@,first-row,first-col]
-% & e & a & b & c \\
-% e & e & a & b & c \\
-% a & a & e & c & b \\
-% b & b & c & e & a \\
-% c & c & b & a & e
-% \end{NiceArray}$
-% \arrayrulecolor{black}
-% \end{BVerbatim}
-% \arrayrulecolor{blue}
-% $\begin{NiceArray}{CCCC}[hvlines,first-row,first-col]
-% & e & a & b & c \\
-% e & e & a & b & c \\
-% a & a & e & c & b \\
-% b & b & c & e & a \\
-% c & c & b & a & e
-% \end{NiceArray}$
-% \arrayrulecolor{black}
-%
-% \bigskip
-% However, there is a difference between the key |vlines| and the use of
-% the specifier ``"|"'' in the preamble of the environment: the rules drawn by
-% |vlines| completely cross the double-rules drawn by |\hline\hline|.
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=11.5cm]
-% $\begin{NiceArray}{CCCC}[vlines] \hline
-% a & b & c & d \\ \hline \hline
-% 1 & 2 & 3 & 4 \\
-% 1 & 2 & 3 & 4 \\ \hline
-% \end{NiceArray}$
-% \end{BVerbatim}
-% $\begin{NiceArray}{CCCC}[vlines]
-% \hline
-% a & b & c & d \\
-% \hline \hline
-% 1 & 2 & 3 & 4 \\
-% 1 & 2 & 3 & 4 \\
-% \hline
-% \end{NiceArray}$
-%
-% \bigskip
-% For the environments with delimiters (for example |{pNiceArray}| or
-% |{pNiceMatrix}|), the option |vlines| don't draw vertical rules on both sides,
-% where are the delimiters (fortunately).
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=10.6cm]
-% \setlength{\arrayrulewidth}{0.2pt}
-% $\begin{pNiceMatrix}[vlines]
-% 1 & 2 & 3 & 4 & 5 & 6 \\
-% 1 & 2 & 3 & 4 & 5 & 6 \\
-% 1 & 2 & 3 & 4 & 5 & 6
-% \end{pNiceMatrix}$
-% \end{BVerbatim}
-% \begin{scope}
-% \setlength{\arrayrulewidth}{0.2pt}
-% $\begin{pNiceMatrix}[vlines]
-% 1 & 2 & 3 & 4 & 5 & 6 \\
-% 1 & 2 & 3 & 4 & 5 & 6 \\
-% 1 & 2 & 3 & 4 & 5 & 6
-% \end{pNiceMatrix}$
-% \end{scope}
+% \[C = \pAutoNiceMatrix{3-3}{C_{\arabic{iRow},\arabic{jCol}}}\]
%
%
% \subsection{The option light-syntax}
%
% \label{light-syntax}
-% The option |light-syntax|\footnote{This option is inspired by the package
-% \pkg{spalign} of Joseph Rabinoff.} allows the user to compose the arrays with a
-% lighter syntax, which gives a more readable TeX source.
+% The option |light-syntax| (inpired by the package \pkg{spalign}) allows the
+% user to compose the arrays with a lighter syntax, which gives a better
+% legibility of the TeX source.
%
% When this option is used, one should use the semicolon for the end of a row
% and spaces or tabulations to separate the columns. However, as usual in the
@@ -2080,36 +2076,419 @@ version 2005/12/01 or later.
% analyzed. The environment doesn't behave in that case as a standard
% environment of LaTeX which only put TeX commands before and after the content.}
%
-% \subsection{Use of the column type S of siunitx}
%
-% If the package \pkg{siunitx} is loaded (before or after \pkg{nicematrix}),
-% it's possible to use the |S| column type of \pkg{siunitx} in the environments
-% of \pkg{nicematrix}. The implementation doesn't use explicitly any private
-% macro of \pkg{siunitx}.
+%
+% \subsection{The environment \{NiceArrayWithDelims\}}
+%
+% In fact, the environment |{pNiceArray}| and its variants are based upon a
+% more general environment, called |{NiceArrayWithDelims}|. The first two
+% mandatory arguments of this environment are the left and right delimiters used
+% in the construction of the matrix. It's possible to use
+% |{NiceArrayWithDelims}| if we want to use atypical or asymetrical delimiters.
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=11cm]
+% $\begin{~emphase#NiceArrayWithDelims@}
+% {\downarrow}{\uparrow}{CCC}[margin]
+% 1 & 2 & 3 \\
+% 4 & 5 & 6 \\
+% 7 & 8 & 9
+% \end{~emphase#NiceArrayWithDelims@}$
+% \end{BVerbatim}
+% $\begin{NiceArrayWithDelims}
+% {\downarrow}{\uparrow}{CCC}[margin]
+% 1 & 2 & 3 \\
+% 4 & 5 & 6 \\
+% 7 & 8 & 9
+% \end{NiceArrayWithDelims}$
+%
+%
+%
+% \section{Utilisation of Tikz with nicematrix}
%
+% \label{name}
+% \subsection{The nodes corresponding to the contents of the cells}
+%
+% The package \pkg{nicematrix} creates a PGF/Tikz node for each (non-empty) cell
+% of the considered array. These nodes are used to draw the dotted lines between
+% the cells of the matrix (inter alia).
+%
+% \smallskip
+% The nodes of a document must have distinct names. That's why the names of the
+% nodes created by \pkg{nicematrix} contains the number of the current
+% environment. Indeed, the environments of \pkg{nicematrix} are numbered by a
+% internal global counter.
+%
+% \smallskip
+% In the environment with the number $n$, the node of the row $i$ and
+% column~$j$ has for name |nm-|$n$|-|$i$|-|$j$.
+%
+% \smallskip
+% The command |\NiceMatrixLastEnv| provides the number of the last environment
+% of \pkg{nicematrix} (for LaTeX, it's a ``fully expandable'' command and not a
+% counter).
+%
+% \smallskip
+% However, it's advisable to use instead the key |name|. This key gives a name
+% to the current environment. When the environment has a name, the nodes are
+% accessible with the name ``\textsl{name}-$i$-$j$'' where \textsl{name} is the
+% name given to the array and $i$ and $j$ the numbers of row and column. It's
+% possible to use these nodes with \textsc{pgf} but the final user will
+% probably prefer to use Tikz (which is a convenient layer upon \textsc{pgf}).
+% However, one should remind that \pkg{nicematrix} doesn't load Tikz by default.
%
+% \bigskip
+% \begin{BVerbatim}[baseline=c,boxwidth=11cm]
+% $\begin{pNiceMatrix}[name=~emphase#mymatrix@]
+% 1 & 2 & 3 \\
+% 4 & 5 & 6 \\
+% 7 & 8 & 9
+% \end{pNiceMatrix}$
+% \tikz[remember picture,overlay]
+% \draw ~emphase#(mymatrix-2-2)@ circle (2mm) ;
+% \end{BVerbatim}
+% $\begin{pNiceMatrix}[name=mymatrix]
+% 1 & 2 & 3 \\
+% 4 & 5 & 6 \\
+% 7 & 8 & 9
+% \end{pNiceMatrix}$
+% \tikz[remember picture,overlay]
+% \draw (mymatrix-2-2) circle (2mm) ;
+%
% \medskip
-% \begin{BVerbatim}[baseline = c, boxwidth = 10.5cm]
-% $\begin{pNiceArray}{~emphase#S@CWc{1cm}C}[nullify-dots,first-row]
-% {C_1} & \Cdots & & C_n \\
-% 2.3 & 0 & \Cdots & 0 \\
-% 12.4 & \Vdots & & \Vdots \\
-% 1.45 \\
-% 7.2 & 0 & \Cdots & 0
-% \end{pNiceArray}$
+% Don't forget the options |remember picture| and |overlay|.
+%
+% \bigskip
+% In the |code-after|, and if Tikz is loaded, the things are easier. One may
+% design the nodes with the form $i$-$j$: there is no need to indicate the
+% environment which is of course the current environment.
+%
+%
+% \medskip
+% \begin{BVerbatim}[baseline=c,boxwidth=11cm]
+% $\begin{pNiceMatrix}
+% 1 & 2 & 3 \\
+% 4 & 5 & 6 \\
+% 7 & 8 & 9
+% \CodeAfter
+% \tikz \draw ~emphase#(2-2)@ circle (2mm) ;
+% \end{pNiceMatrix}$
% \end{BVerbatim}
-% $\begin{pNiceArray}{SCWc{1cm}C}[nullify-dots,first-row]
-% {C_1} & \Cdots & & C_n \\
-% 2.3 & 0 & \Cdots & 0 \\
-% 12.4 & \Vdots & & \Vdots \\
-% 1.45 \\
-% 7.2 & 0 & \Cdots & 0
-% \end{pNiceArray}$
+% $\begin{pNiceMatrix}
+% 1 & 2 & 3 \\
+% 4 & 5 & 6 \\
+% 7 & 8 & 9
+% \CodeAfter
+% \tikz \draw (2-2) circle (2mm) ;
+% \end{pNiceMatrix}$
+%
+%
+% \bigskip
+% In the following example, we have underlined all the nodes of the matrix (we
+% explain below the technic used : cf. p. \pageref{highlight}).
+%
+% \[\begin{pNiceMatrix}[
+% code-after = {\begin{tikzpicture}
+% [every node/.style = {blend mode = multiply,
+% fill = red!15,
+% inner sep = 0 pt }]
+% \node [fit = (1-1)] {} ;
+% \node [fit = (1-3)] {} ;
+% \node [fit = (2-2)] {} ;
+% \node [fit = (3-1)] {} ;
+% \node [fit = (3-3)] {} ;
+% \node [fit = (1-2)] {} ;
+% \node [fit = (2-1)] {} ;
+% \node [fit = (2-3)] {} ;
+% \node [fit = (3-2)] {} ;
+% \end{tikzpicture}}]
+% a & a + b & a + b + c \\
+% a & a & a + b \\
+% a & a & a
+% \end{pNiceMatrix}\]
+%
+%
%
+% \subsection{The ``medium nodes'' and the ``large nodes''}
+%
+% In fact, the package \pkg{nicematrix} can create ``extra nodes'': the ``medium
+% nodes'' and the ``large nodes''. The first ones
+% are created with the option |create-medium-nodes| and the second ones with the
+% option |create-large-nodes|.\footnote{There is also an option
+% |create-extra-nodes| which is an alias for the conjonction of
+% |create-medium-nodes| and |create-large-nodes|.}
+%
% \medskip
-% On the other hand, the |d| columns of the package \pkg{dcolumn} are not
-% supported by \pkg{nicematrix}.
+% These nodes are not used by \pkg{nicematrix} by default, and that's why they
+% are not created by default.
+%
+% \medskip
+% The names of the ``medium nodes'' are constructed by adding the suffix
+% ``|-medium|'' to the names of the ``normal nodes''. In the following example,
+% we have underlined the ``medium nodes''. We consider that this example is
+% self-explanatory.
+% \[\begin{pNiceMatrix}[
+% create-medium-nodes,
+% code-after = {\begin{tikzpicture}
+% [every node/.style = {fill = red!15,
+% blend mode = multiply,
+% inner sep = 0pt},
+% name suffix = -medium]
+% \node [fit = (1-1)] {} ;
+% \node [fit = (1-2)] {} ;
+% \node [fit = (1-3)] {} ;
+% \node [fit = (2-1)] {} ;
+% \node [fit = (2-2)] {} ;
+% \node [fit = (2-3)] {} ;
+% \node [fit = (3-1)] {} ;
+% \node [fit = (3-2)] {} ;
+% \node [fit = (3-3)] {} ;
+% \end{tikzpicture}}]
+% a & a + b & a + b + c \\
+% a & a & a + b \\
+% a & a & a
+% \end{pNiceMatrix}\]
+%
+%
+% \medskip
+% The names of the ``large nodes'' are constructed by adding the suffix
+% ``|-large|'' to the names of the ``normal nodes''. In the following example,
+% we have underlined the ``large nodes''. We consider that this example is
+% self-explanatory.\footnote{There is no ``large nodes'' created in the exterior
+% rows and columns (for these rows and columns, cf. p.~\pageref{exterior}).}
+%
+% \[\begin{pNiceMatrix}[
+% create-large-nodes,
+% code-after = {\begin{tikzpicture}
+% [every node/.style = {blend mode = multiply,
+% inner sep = 0pt},
+% name suffix = -large]
+% \node [fit = (1-1),fill = red!15] {} ;
+% \node [fit = (1-3),fill = red!15] {} ;
+% \node [fit = (2-2),fill = red!15] {} ;
+% \node [fit = (3-1),fill = red!15] {} ;
+% \node [fit = (3-3),fill = red!15] {} ;
+% \node [fit = (1-2),fill = blue!15] {} ;
+% \node [fit = (2-1),fill = blue!15] {} ;
+% \node [fit = (2-3),fill = blue!15] {} ;
+% \node [fit = (3-2),fill = blue!15] {} ;
+% \end{tikzpicture}}]
+% a & a + b & a + b + c \\
+% a & a & a + b \\
+% a & a & a
+% \end{pNiceMatrix}\]
+%
+%
+% \medskip
+% The ``large nodes'' of the first column and last column may appear too small
+% for some usage. That's why it's possible to use the options |left-margin| and
+% |right-margin| to add space on both sides of the array and also space in the
+% ``large nodes'' of the first column and last column. In the following example,
+% we have used the options |left-margin| and |right-margin|.\footnote{The
+% options |left-margin| and |right-margin| take dimensions as values but, if no
+% value is given, the default value is used, which is |\arraycolsep| (by
+% default: 5~pt). There is also an option |margin| to fix both |left-margin| and
+% |right-margin| to the same value.}
+% \[\begin{pNiceMatrix}[
+% create-large-nodes,left-margin,right-margin,
+% code-after = {\begin{tikzpicture}
+% [every node/.style = {blend mode = multiply,
+% inner sep = 0pt},
+% name suffix = -large]
+% \node [fit = (1-1),fill = red!15] {} ;
+% \node [fit = (1-3),fill = red!15] {} ;
+% \node [fit = (2-2),fill = red!15] {} ;
+% \node [fit = (3-1),fill = red!15] {} ;
+% \node [fit = (3-3),fill = red!15] {} ;
+% \node [fit = (1-2),fill = blue!15] {} ;
+% \node [fit = (2-1),fill = blue!15] {} ;
+% \node [fit = (2-3),fill = blue!15] {} ;
+% \node [fit = (3-2),fill = blue!15] {} ;
+% \end{tikzpicture}}]
+% a & a + b & a + b + c \\
+% a & a & a + b \\
+% a & a & a
+% \end{pNiceMatrix}\]
+%
+% \medskip
+% It's also possible to add more space on both side of the array with the
+% options |extra-left-margin| and |extra-right-margin|. These margins are not
+% incorporated in the ``large nodes''. It's possible to fix both values with the
+% option |extra-margin| and, in the following example, we use |extra-margin|
+% with the value $3$~pt.
+% \[\begin{pNiceMatrix}[
+% create-large-nodes,margin,extra-margin=3pt,
+% code-after = {\begin{tikzpicture}
+% [every node/.style = {blend mode = multiply,
+% inner sep = 0 pt},
+% name suffix = -large]
+% \node [fit = (1-1),fill = red!15] {} ;
+% \node [fit = (1-3),fill = red!15] {} ;
+% \node [fit = (2-2),fill = red!15] {} ;
+% \node [fit = (3-1),fill = red!15] {} ;
+% \node [fit = (3-3),fill = red!15] {} ;
+% \node [fit = (1-2),fill = blue!15] {} ;
+% \node [fit = (2-1),fill = blue!15] {} ;
+% \node [fit = (2-3),fill = blue!15] {} ;
+% \node [fit = (3-2),fill = blue!15] {} ;
+% \end{tikzpicture}}]
+% a & a + b & a + b + c \\
+% a & a & a + b \\
+% a & a & a
+% \end{pNiceMatrix}\]
+%
+%
+%
+% \bigskip
+% \textbf{Be careful} : These nodes are reconstructed from the contents of the
+% contents cells of the array. Usually, they do not correspond to the cells
+% delimited by the rules (if we consider that these rules are drawn).
+%
+% \bigskip
+% \begin{minipage}[c]{7.6cm}
+% Here is a array composed with the following code:
+%
+% \medskip
+% \begin{BVerbatim}
+% \large
+% \begin{NiceTabular}{wl{2cm}LL}[hvlines]
+% fraise & amande & abricot \\
+% prune & pêche & poire \\[1ex]
+% noix & noisette & brugnon
+% \end{NiceTabular}
+% \end{BVerbatim}
+% \end{minipage}
+% \hspace{0.9cm}
+% \begin{scope}
+% \large
+% \begin{NiceTabular}[c]{wl{2cm}LL}[hvlines]
+% fraise & amande & abricot \\
+% prune & pêche & poire \\[1ex]
+% noix & noisette & brugnon
+% \end{NiceTabular}
+% \end{scope}
%
+% \vspace{1cm}
+% \begin{minipage}[c]{7cm}
+% Here, we have colored all the cells of the array with |\chessboardcolors|.
+% \end{minipage}
+% \hspace{1.5cm}
+% \begin{scope}
+% \large
+% \begin{NiceTabular}[c]{wl{2cm}LL}[hvlines,code-before = \chessboardcolors{red!15}{blue!15}]
+% fraise & amande & abricot \\
+% prune & pêche & poire \\[1ex]
+% noix & noisette & brugnon
+% \end{NiceTabular}
+% \end{scope}
+%
+%
+% \vspace{1cm}
+% \begin{minipage}[c]{7cm}
+% Here are the ``large nodes'' of this array (without utilisation of |margin|
+% nor |extra-margin|).
+% \end{minipage}
+% \hspace{1.5cm}
+% \begin{scope}
+% \large
+% \begin{NiceTabular}[c]{wl{2cm}LL}[hvlines,
+% create-large-nodes,
+% code-after = {\begin{tikzpicture}
+% [every node/.style = {blend mode = multiply,
+% inner sep = 0 pt},
+% name suffix = -large]
+% \node [fit = (1-1),fill = red!15] {} ;
+% \node [fit = (1-3),fill = red!15] {} ;
+% \node [fit = (2-2),fill = red!15] {} ;
+% \node [fit = (3-1),fill = red!15] {} ;
+% \node [fit = (3-3),fill = red!15] {} ;
+% \node [fit = (1-2),fill = blue!15] {} ;
+% \node [fit = (2-1),fill = blue!15] {} ;
+% \node [fit = (2-3),fill = blue!15] {} ;
+% \node [fit = (3-2),fill = blue!15] {} ;
+% \end{tikzpicture}}]
+% fraise & amande & abricot \\
+% prune & pêche & poire \\[1ex]
+% noix & noisette & brugnon
+% \end{NiceTabular}
+% \end{scope}
+%
+%
+%
+%
+% \subsection{The ``row-nodes'' and the ``col-nodes''}
+%
+% The package \pkg{nicematrix} creates a PGF/Tikz node indicating the potential
+% position of each horizontal rule (with the names |row-|$i$) and each vertical
+% rule (with the names |col-|$j$), as described in the following figure. These
+% nodes are available in the |code-before| and the |code-after|.
+% \begin{center}
+% \begin{NiceTabular}{CCC}[hvlines,rules/width=1pt,rules/color=gray]
+% rose & tulipe & lys \\
+% arum & iris & violette \\
+% muguet & dahlia & souci
+% \CodeAfter
+% \tiny
+% \begin{tikzpicture}
+% \foreach \i in {1,2,3,4}
+% {
+% \fill [red] (row-\i) circle (0.5mm) ;
+% \node [red,anchor=east] at (row-\i) {row-\i} ;
+% }
+% \foreach \j in {1,2,3,4}
+% {
+% \fill [blue] (col-\j) circle (0.5mm) ;
+% \node [blue,anchor=north] at (col-\j) {col-\j} ;
+% }
+% \end{tikzpicture}
+% \end{NiceTabular}
+% \end{center}
+%
+% \bigskip
+% If we use Tikz (we remind that \pkg{nicematrix} does not load Tikz by
+% default), we can access (in the |code-before| and the |code-after|) to the
+% intersection of the horizontal rule~$i$ and the vertical rule~$j$ with the
+% syntax |(row-|$i$\verb+-|col-+$j$|)|.
+%
+% \medskip
+% \begin{Verbatim}
+% \[\begin{NiceMatrix}[
+% code-before =
+% {
+% ~emphase# \tikz \draw [fill = red!15] @
+% ~emphase# (row-7-|col-4) -- (row-8-|col-4) -- (row-8-|col-5) -- @
+% ~emphase# (row-9-|col-5) -- (row-9-|col-6) |- cycle ; @
+% }
+% ]
+% 1 \\
+% 1 & 1 \\
+% 1 & 2 & 1 \\
+% 1 & 3 & 3 & 1 \\
+% 1 & 4 & 6 & 4 & 1 \\
+% 1 & 5 & 10 & 10 & 5 & 1 \\
+% 1 & 6 & 15 & 20 & 15 & 6 & 1 \\
+% 1 & 7 & 21 & 35 & 35 & 21 & 7 & 1 \\
+% 1 & 8 & 28 & 56 & 70 & 56 & 28 & 8 & 1
+% \end{NiceMatrix}\]
+% \end{Verbatim}
+% \[\begin{NiceMatrix}[
+% code-before =
+% {
+% \tikz \draw [fill = red!15]
+% (row-7-|col-4) -- (row-8-|col-4) -- (row-8-|col-5) --
+% (row-9-|col-5) -- (row-9-|col-6) |- cycle ;
+% }
+% ]
+% 1 \\
+% 1 & 1 \\
+% 1 & 2 & 1 \\
+% 1 & 3 & 3 & 1 \\
+% 1 & 4 & 6 & 4 & 1 \\
+% 1 & 5 & 10 & 10 & 5 & 1 \\
+% 1 & 6 & 15 & 20 & 15 & 6 & 1 \\
+% 1 & 7 & 21 & 35 & 35 & 21 & 7 & 1 \\
+% 1 & 8 & 28 & 56 & 70 & 56 & 28 & 8 & 1
+% \end{NiceMatrix}\]
%
%
% \section{Technical remarks}
@@ -2153,28 +2532,10 @@ version 2005/12/01 or later.
% \end{scope}
%
% \medskip
-% The specifier |?| may be used in a standard environment |{array}| (of the
-% package \pkg{array}) and, in this case, the command |\OnlyMainNiceMatrix| is
-% no-op.
-%
-%
-% \subsection{The names of the PGF nodes created by nicematrix}
-%
-% We have said that, when a name is given to an environment of \pkg{nicematrix},
-% it's possible to access the PGF/Tikz nodes through this name (cf.
-% p.~\pageref{name}).
+% This specifier |?| may be used in the standard environments |{tabular}| and
+% |{array}| (of the package \pkg{array}) and, in this case, the command
+% |\OnlyMainNiceMatrix| is no-op.
%
-% That's the recommended way to access these nodes. However, we describe now the
-% internal names of these nodes.
-%
-% The environments created by \pkg{nicematrix} are numbered by an internal
-% global counter. The command |\NiceMatrixLastEnv| provides the number of the
-% last environment of \pkg{nicematrix} (for LaTeX, it's a ``fully expandable''
-% command and not a counter).
-%
-% For the environment of number~$n$, the node in row~$i$ and column~$j$ has the
-% name |nm-|$n$|-|$i$|-|$j$. The |medium| and |large| nodes have the same name,
-% suffixed by |-medium| and |-large|.
%
%
% \subsection{Diagonal lines}
@@ -2310,95 +2671,16 @@ version 2005/12/01 or later.
% environments of \pkg{nicematrix} are not affected).
%
%
-%
-% \subsection{A technical problem with the argument of
-% \textbackslash\textbackslash}
-%
-%
-% For technical, reasons, if you use the optional argument of the command |\\|,
-% the vertical space added will also be added to the ``normal'' node
-% corresponding at the previous node.
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=11cm]
-% \begin{pNiceMatrix}
-% a & \frac AB \\~emphase#[2mm]@
-% b & c
-% \end{pNiceMatrix}
-% \end{BVerbatim}
-% $\begin{pNiceMatrix}[
-% code-after = {\tikz \node [inner sep = 0pt,
-% fill = red!15,
-% blend mode = multiply,
-% fit = (1-2) ] {} ; } ]
-% a & \frac AB \\[2mm]
-% b & c
-% \end{pNiceMatrix}$
%
-% \bigskip
-% There are two solutions to solve this problem. The first solution is to use a
-% TeX command to insert space between the rows.
-%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=11cm]
-% \begin{pNiceMatrix}
-% a & \frac AB \\
-% ~emphase#\noalign{\kern2mm}@
-% b & c
-% \end{pNiceMatrix}
-% \end{BVerbatim}
-% $\begin{pNiceMatrix}[
-% code-after = {\tikz \node [inner sep = 0pt,
-% fill = red!15,
-% blend mode = multiply,
-% fit = (1-2) ] {} ; } ]
-% a & \frac AB \\
-% \noalign{\kern2mm}
-% b & c
-% \end{pNiceMatrix}$
-%
-%
-% \bigskip
-% The other solution is to use the command |\multicolumn| in the previous cell.
+% \subsection{Incompatibilities}
%
-% \medskip
-% \begin{BVerbatim}[baseline=c,boxwidth=11cm]
-% \begin{pNiceMatrix}
-% a & ~emphase#\multicolumn1C{\frac AB}@ \\[2mm]
-% b & c
-% \end{pNiceMatrix}
-% \end{BVerbatim}
-% $\begin{pNiceMatrix}[
-% code-after = {\tikz \node [inner sep = 0pt,
-% fill = red!15,
-% blend mode = multiply,
-% fit = (1-2) ] {} ; } ]
-% a & \multicolumn1C{\frac AB} \\[2mm]
-% b & c
-% \end{pNiceMatrix}$
-%
-%
-% \subsection{Obsolete environments which have been deleted}
+% The package \pkg{nicematrix} is not compatible with \pkg{threeparttable}.
%
-% The version 3.0 of \pkg{nicematrix} has introduced the environment
-% |{pNiceArray}| (and its variants) with the options |first-row|, |last-row|,
-% |first-col| and |last-col|.
+% \medskip
+% The package \pkg{nicematrix} is not fully compatible with the package
+% \pkg{arydshln} (because this package redefines many internal of \pkg{array}).
%
-% Consequently the following environments present in previous versions of
-% have been deleted from \pkg{nicematrix}.
-% %
-% \begin{itemize}
-% \item |{NiceArrayCwithDelims}| ;
-% \item |{pNiceArrayC}|, |{bNiceArrayC}|, |{BNiceArrayC}|, |{vNiceArrayC}|,
-% |{VNiceArrayC}| ;
-% \item |{NiceArrayRCwithDelims}| ;
-% \item |{pNiceArrayRC}|, |{bNiceArrayRC}|, |{BNiceArrayRC}|, |{vNiceArrayRC}|,
-% |{VNiceArrayRC}|.
-% \end{itemize}
%
-% However, the definition of those environments is still available (temporarily)
-% at the end of the file |nicematrix.sty| after a command |\file_input_stop:|.
-%
% \section{Examples}
%
% \subsection{Dotted lines}
@@ -2531,11 +2813,9 @@ version 2005/12/01 or later.
% \end{scope}
%
% \vspace{2cm}
-% An example for a linear system (the vertical rule has been drawn in blue with
-% the tools of \pkg{colortbl}):\par\nobreak
+% An example for a linear system:\par\nobreak
%
% \begin{Verbatim}
-% \arrayrulecolor{blue}
% $\begin{pNiceArray}{*6C|C}[nullify-dots,last-col,code-for-last-col=\scriptstyle]
% 1 & 1 & 1 &\Cdots & & 1 & 0 & \\
% 0 & 1 & 0 &\Cdots & & 0 & & L_2 \gets L_2-L_1 \\
@@ -2544,10 +2824,9 @@ version 2005/12/01 or later.
% \Vdots & & &\Ddots & & 0 & \\
% 0 & & &\Cdots & 0 & 1 & 0 & L_n \gets L_n-L_1
% \end{pNiceArray}$
-% \arrayrulecolor{black}
% \end{Verbatim}
%
-% \arrayrulecolor{blue}
+%
% \[\begin{pNiceArray}{*6C|C}[nullify-dots,last-col,code-for-last-col=\scriptstyle]
% 1 & 1 & 1 &\Cdots & & 1 & 0 & \\
% 0 & 1 & 0 &\Cdots & & 0 & & L_2 \gets L_2-L_1 \\
@@ -2556,7 +2835,6 @@ version 2005/12/01 or later.
% \Vdots & & &\Ddots & & 0 & \\
% 0 & & &\Cdots & 0 & 1 & 0 & L_n \gets L_n-L_1
% \end{pNiceArray}\]
-% \arrayrulecolor{black}
%
%
%
@@ -2746,24 +3024,22 @@ version 2005/12/01 or later.
%
%
% We should remark that the rules we have drawn are drawn \emph{after} the
-% construction of the array and thus, they don't spread the cells of the
-% array. We recall that, on the other side, the command |\hline|, the specifier
-% ``"|"'' and the options |hlines| and |vlines| spread the cells (when the
-% package \pkg{array} is loaded but, when the package \pkg{nicematrix} is
-% loaded, \pkg{array} is always loaded).\footnote{On the other side, the command
-% |\cline| doesn't spread the rows of the array.}
+% construction of the array and thus, they don't spread the cells of the array.
+% We recall that, on the other side, the command |\hline|, the specifier ``"|"''
+% and the options |hlines|, |vlines| and |hvlines| spread the
+% cells.\footnote{For the command |\cline|, see the remark
+% p.~\pageref{remark-cline}.}
%
%
% \vspace{1cm}
-% The package \pkg{nicematrix} is constructed upon the environment |{array}|
-% and, therefore, it's possible to use the package \pkg{colortbl} in the
-% environments of \pkg{nicematrix}. However, it's not always easy to do a fine
-% tuning of \pkg{colortbl}. That's why we propose another method to highlight a
+% It's possible to color a row with |\rowcolor| in the |code-before| (or with
+% |\rowcolor| of \pkg{colortbl} in the first cell of the row). However, it's not
+% possible to do a fine tuning. That's why we describe now method to highlight a
% row of the matrix. We create a rectangular Tikz node which encompasses the
% nodes of the second row with the Tikz library \pkg{fit}. This Tikz node is
% filled after the construction of the matrix. In order to see the text
% \emph{under} this node, we have to use transparency with the |blend mode|
-% equal to |multiply|.
+% equal to |multiply|.
%
% \tikzset{highlight/.style={rectangle,
% fill=red!15,
@@ -3318,28 +3594,91 @@ version 2005/12/01 or later.
% the rules even if \pkg{colortbl} is not loaded.
% \begin{macrocode}
\cs_set_protected:Npn \CT@arc@ { }
- \NewDocumentCommand { \arrayrulecolor } { m }
- { \tl_gset:Nn \CT@arc@ { \color { #1 } } }
-% \end{macrocode}
-% The following line are from the redefinition of |\hline| of standard LaTeX by
-% \pkg{colortbl} (\pkg{array} does not redefine |\hline|).
-% \begin{macrocode}
+ \cs_set:Npn \arrayrulecolor #1 # { \CT@arc { #1 } }
+ \cs_set:Npn \CT@arc #1 #2
+ {
+ \dim_compare:nNnT \baselineskip = \c_zero_dim \noalign
+ { \cs_gset:Npn \CT@arc@ { \color #1 { #2 } } }
+ }
\cs_set:Npn \hline
{
\noalign { \ifnum 0 = `} \fi
- \let \hskip \vskip
- \let \vrule \hrule
- \let \@width \@height
+ \cs_set_eq:NN \hskip \vskip
+ \cs_set_eq:NN \vrule \hrule
+ \cs_set_eq:NN \@width \@height
{ \CT@arc@ \vline }
\futurelet \reserved@a
\@xhline
}
}
+ }
+% \end{macrocode}
+%
+% \bigskip
+% We have to redefine |\cline| for several reasons. The command |\@@_cline| will
+% be linked to |\cline| in the beginning of |{NiceArrayWithDelims}|. The
+% following commands must \emph{not} be protected.
+% \begin{macrocode}
+\cs_set:Npn \@@_standard_cline #1 { \@@_standard_cline:w #1 \q_stop }
+\cs_set:Npn \@@_standard_cline:w #1-#2 \q_stop
+ {
+ \int_compare:nNnT \l_@@_first_col_int = 0 { \omit & }
+ \int_compare:nNnT { #1 } > 1 { \multispan { \@@_pred:n { #1 } } & }
+ \multispan { \int_eval:n { #2 - #1 + 1 } }
+ { \CT@arc@ \leaders \hrule \@height \arrayrulewidth \hfill }
+% \end{macrocode}
+% Our |\everycr| has been modified. In particular, the creation of the |row|
+% node is in the |\everycr| (maybe we should put it with the incrementation of
+% |\c@iRow|). Since the following |\cr| correspond to a ``false row'', we have
+% to nullify |\everycr|.
+% \begin{macrocode}
+ \everycr { }
+ \cr
+ \noalign { \skip_vertical:N -\arrayrulewidth }
}
% \end{macrocode}
%
% \bigskip
-% The following command are only for efficiency. It must \emph{not} be protected
+% The following version of |\cline| spreads the array of a quantity equal
+% to |\arrayrulewidth| as does |\hline|. It will be loaded except if the key
+% |standard-cline| has been used.
+% \begin{macrocode}
+\cs_set:Npn \@@_cline
+% \end{macrocode}
+% We have to act in a fully expandable way since there may be |\noalign| (in the
+% |\multispan|) to detect. That's why we use |\exp_arg:Ne| and not |\exp_arg:Nx|.
+% \begin{macrocode}
+ { \exp_args:Ne \@@_cline_i:nn \l_@@_first_col_int }
+% \end{macrocode}
+% The command |\cline_i:nn| has two arguments. The first is the number of the
+% current column (it \emph{must} be used in that column). The second is a
+% standard argument of |\cline| of the form \textsl{i}-\textsl{j}.
+% \begin{macrocode}
+\cs_set:Npn \@@_cline_i:nn #1 #2 { \@@_cline_i:w #1-#2 \q_stop }
+\cs_set:Npn \@@_cline_i:w #1-#2-#3 \q_stop
+ {
+% \end{macrocode}
+% Now, |#1| is the number of the current column and we have to draw a line from
+% the column |#2| to the column |#3| (both included).
+% \begin{macrocode}
+ \int_compare:nNnT { #1 } < { #2 }
+ { \multispan { \int_eval:n { #2 - #1 } } & }
+ \multispan { \int_eval:n { #3 - #2 + 1 } }
+ { \CT@arc@ \leaders \hrule \@height \arrayrulewidth \hfill }
+% \end{macrocode}
+% You look whether there is another |\cline| to draw (the final user may put
+% several |\cline|).
+% \begin{macrocode}
+ \peek_meaning_remove_ignore_spaces:NTF \cline
+ { & \exp_args:Ne \@@_cline_i:nn { \@@_succ:n { #3 } } }
+ { \everycr { } \cr }
+ }
+
+
+% \end{macrocode}
+%
+% \bigskip
+% The following commands are only for efficiency. It must \emph{not} be protected
% because it will be used (for instance) in names of \textsc{pgf} nodes.
% \begin{macrocode}
\cs_new:Npn \@@_succ:n #1 { \the \numexpr #1 + 1 \relax }
@@ -3347,6 +3686,23 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
+% The following command is a small shortcut.
+% \begin{macrocode}
+\cs_new:Npn \@@_math_toggle_token:
+ { \bool_if:NF \l_@@_NiceTabular_bool \c_math_toggle_token }
+% \end{macrocode}
+%
+% \bigskip
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_set_CT@arc@:
+ { \peek_meaning:NTF [ \@@_set_CT@arc@_i: \@@_set_CT@arc@_ii: }
+\cs_new_protected:Npn \@@_set_CT@arc@_i: [ #1 ] #2 \q_stop
+ { \cs_set:Npn \CT@arc@ { \color [ #1 ] { #2 } } }
+\cs_new_protected:Npn \@@_set_CT@arc@_ii: #1 \q_stop
+ { \cs_set:Npn \CT@arc@ { \color { #1 } } }
+% \end{macrocode}
+%
+% \bigskip
% \textbf{The column S of siunitx}\par\nobreak
%
% \medskip
@@ -3486,6 +3842,20 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
+% The command |\NiceMatrixLastEnv| is not used by the package \pkg{nicematrix}.
+% It's only a facility given to the final user. It gives the number of the last
+% environment (in fact the number of the current environment but it's meant to
+% be used after the environment in order to refer to that environment --- and
+% its nodes --- without having to give it a name). This command \emph{must} be
+% expandable since it will be used in \pkg{pgf} nodes.
+% \begin{macrocode}
+\NewExpandableDocumentCommand \NiceMatrixLastEnv { }
+ { \int_use:N \g_@@_env_int }
+% \end{macrocode}
+%
+%
+%
+% \bigskip
% The following command is only a syntaxic shortcut. The |q| in |qpoint| means
% \emph{quick}.
% \begin{macrocode}
@@ -3525,11 +3895,8 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% If the user uses |{NiceArray}| (and not another environment relying upon
-% |{NiceArrayWithDelims}| like |{pNiceArray}|), we will raise the flag
-% |\l_@@_NiceArray_bool|. We have to know that, because, in |{NiceArray}|, we
-% won't use a structure with |\left| and |\right| and we will use the option of
-% position (|t|, |b| or |c|).
+% If the user uses |{NiceArray}| or |{NiceTabular}| the flag
+% |\l_@@_NiceArray_bool| will be raised.
% \begin{macrocode}
\bool_new:N \l_@@_NiceArray_bool
% \end{macrocode}
@@ -3615,7 +3982,14 @@ version 2005/12/01 or later.
%
% The TeX counters |\c@iRow| and |\c@jCol| will be created in the beginning of
% |{NiceArrayWithDelims}| (if they don't exist previously).
-%
+%
+% \bigskip
+% The following token list corresponds to the key |rules/color| available
+% in the environments.
+% \begin{macrocode}
+\tl_new:N \l_@@_rules_color_tl
+% \end{macrocode}
+%
% \bigskip
% A kind of false row will be inserted at the end of the array for the
% construction of the |col| nodes (and also to fix the width of the columns when
@@ -3676,6 +4050,42 @@ version 2005/12/01 or later.
\dim_new:N \g_@@_width_first_col_dim
% \end{macrocode}
%
+% \bigskip
+% The following sequence will contain the caracteristics of the blocks of the
+% array, specified by the command |\Block|. Each block is represented by 6
+% components surrounded by braces:
+%
+% |{|\textsl{imin}|}{|\textsl{jmin}|}{|\textsl{imax}|}{|\textsl{jmax}|}{|\textsl{options}|}{|\textsl{contents}|}|.
+%
+% The variable is global because it will be modified in the cells of the array.
+% \begin{macrocode}
+\seq_new:N \g_@@_blocks_seq
+% \end{macrocode}
+% We also manage a sequence of the \emph{positions} of the blocks. Of course,
+% it's redundant with the previous sequence, but it's for efficiency. In that
+% sequence, each block is represented by only the four first components:
+% |{|\textsl{imin}|}{|\textsl{jmin}|}{|\textsl{imax}|}{|\textsl{jmax}|}|.
+% \begin{macrocode}
+\seq_new:N \g_@@_pos_of_blocks_seq
+% \end{macrocode}
+% The sequence |\g_@@_pos_of_blocks_seq| will be used by the test of
+% non-overlapping of two blocks and when we will draw the rules required by the
+% key |hvlines| (these rules won't be drawn within the blocks).
+%
+% \bigskip
+% We will also manage a sequence for the positions of the dotted lines. These
+% dotted lines are created in the array by |\Cdots|, |\Vdots|, |\Ddots|, etc.
+% However, their positions, that is to say, their extremities, will be
+% determined only after the construction of the array. In this sequence, each
+% item contains four components:
+% |{|\textsl{imin}|}{|\textsl{jmin}|}{|\textsl{imax}|}{|\textsl{jmax}|}|.
+% \begin{macrocode}
+\seq_new:N \g_@@_pos_of_xdots_seq
+% \end{macrocode}
+% The sequence |\g_@@_pos_of_xdots_seq| will be used when we will draw the rules
+% required by the key |hvlines| (these rules won't be drawn within the virtual
+% blocks corresponding to the dotted lines).
+%
%
% \bigskip
% \textbf{Variables for the exterior rows and columns}\par\nobreak
@@ -3841,7 +4251,15 @@ version 2005/12/01 or later.
% \bigskip
% \subsection*{The options}
%
+% By default, the behaviour of |\cline| is changed in the environments of
+% \pkg{nicematrix}: a |\cline| spreads the array by an amount equal to
+% |\arrayrulewidht|. It's possible to disable this feature with the key
+% |\l_@@_standard_line_bool|.
+% \begin{macrocode}
+\bool_new:N \l_@@_standard_cline_bool
+% \end{macrocode}
%
+% \bigskip
% The following dimensions correspond to the options |cell-space-top-limit| and co
% (these parameters are inspired by the package \pkg{cellspace}).
% \begin{macrocode}
@@ -3922,11 +4340,15 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% The flag |\l_@@_hlines_bool| corresponds to the option |\hlines| and the flag
-% |\l_@@_vlines_bool| to the option |\vlines|.
+% The flag |\l_@@_hlines_bool| corresponds to the key |hlines|, the flag
+% |\l_@@_vlines_bool| to the key |vlines| and the flag |hvlines| to the key
+% |hvlines|. Since version 4.1, the key |hvlines| is no longer a mere alias for
+% the conjonction of |hlines| and |vlines|. Indeed, with |hvlines|, the vertical
+% and horizontal rules are \emph{not} drawn within the blocks (created by |\Block|).
% \begin{macrocode}
\bool_new:N \l_@@_hlines_bool
\bool_new:N \l_@@_vlines_bool
+\bool_new:N \l_@@_hvlines_bool
% \end{macrocode}
%
% \bigskip
@@ -4052,8 +4474,20 @@ version 2005/12/01 or later.
%
%
% \begin{macrocode}
+\keys_define:nn { NiceMatrix / rules }
+ {
+ color .tl_set:N = \l_@@_rules_color_tl ,
+ color .value_required:n = true ,
+ width .dim_set:N = \arrayrulewidth ,
+ width .value_required:n = true
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
\keys_define:nn { NiceMatrix / Global }
{
+ standard-cline .bool_set:N = \l_@@_standard_cline_bool ,
+ standard-cline .default:n = true ,
cell-space-top-limit .dim_set:N = \l_@@_cell_space_top_limit_dim ,
cell-space-top-limit .value_required:n = true ,
cell-space-bottom-limit .dim_set:N = \l_@@_cell_space_bottom_limit_dim ,
@@ -4078,7 +4512,12 @@ version 2005/12/01 or later.
code-for-last-row .value_required:n = true ,
hlines .bool_set:N = \l_@@_hlines_bool ,
vlines .bool_set:N = \l_@@_vlines_bool ,
- hvlines .meta:n = { hlines , vlines } ,
+ hvlines .code:n =
+ {
+ \bool_set_true:N \l_@@_hvlines_bool
+ \bool_set_true:N \l_@@_vlines_bool
+ \bool_set_true:N \l_@@_hlines_bool
+ } ,
parallelize-diags .bool_set:N = \l_@@_parallelize_diags_bool ,
% \end{macrocode}
%
@@ -4175,24 +4614,28 @@ version 2005/12/01 or later.
NiceMatrix / Env ,
} ,
NiceMatrix / xdots .inherit:n = NiceMatrix / xdots ,
+ NiceMatrix / rules .inherit:n = NiceMatrix / rules ,
NiceTabular .inherit:n =
{
NiceMatrix / Global ,
NiceMatrix / Env
} ,
NiceTabular / xdots .inherit:n = NiceMatrix / xdots ,
+ NiceTabular / rules .inherit:n = NiceMatrix / rules ,
NiceArray .inherit:n =
{
NiceMatrix / Global ,
NiceMatrix / Env ,
} ,
NiceArray / xdots .inherit:n = NiceMatrix / xdots ,
+ NiceArray / rules .inherit:n = NiceMatrix / rules ,
pNiceArray .inherit:n =
{
NiceMatrix / Global ,
NiceMatrix / Env ,
} ,
- pNiceArray / xdots .inherit:n = NiceMatrix / xdots
+ pNiceArray / xdots .inherit:n = NiceMatrix / xdots ,
+ pNiceArray / rules .inherit:n = NiceMatrix / rules ,
}
% \end{macrocode}
%
@@ -4358,6 +4801,9 @@ version 2005/12/01 or later.
% \begin{macrocode}
\keys_define:nn { NiceMatrix / NiceTabular }
{
+ last-col .code:n = \tl_if_empty:nF {#1}
+ { \@@_error:n { last-col~non~empty~for~NiceArray } }
+ \int_zero:N \l_@@_last_col_int ,
unknown .code:n = \@@_error:n { Unknown~option~for~NiceTabular }
}
% \end{macrocode}
@@ -4480,7 +4926,7 @@ version 2005/12/01 or later.
% \begin{macrocode}
\cs_new_protected:Npn \@@_end_Cell:
{
- \bool_if:NF \l_@@_NiceTabular_bool \c_math_toggle_token
+ \@@_math_toggle_token:
\hbox_set_end:
% \end{macrocode}
%
@@ -4712,7 +5158,8 @@ version 2005/12/01 or later.
{
\@@_create_row_node:
% \end{macrocode}
-% We add the potential horizontal lines specified by the option |hlines|.
+% We don't draw the rules of the key |hlines| (or |hvlines|) but we reserve the
+% vertical space for theses rules.
% \begin{macrocode}
\bool_if:NT \l_@@_hlines_bool
{
@@ -4730,7 +5177,7 @@ version 2005/12/01 or later.
% \pkg{colortbl} is not loaded. We use a TeX group in order to limit the scope
% of |\CT@arc@|.
% \begin{macrocode}
- { { \CT@arc@ \hrule height \arrayrulewidth } }
+ { \hrule height \arrayrulewidth width \c_zero_dim }
}
}
}
@@ -4895,6 +5342,9 @@ version 2005/12/01 or later.
\cs_set_eq:NN \@@_old_iddots \iddots
\cs_set_eq:NN \firsthline \hline
\cs_set_eq:NN \lasthline \hline
+ \bool_if:NTF \l_@@_standard_cline_bool
+ { \cs_set_eq:NN \cline \@@_standard_cline }
+ { \cs_set_eq:NN \cline \@@_cline }
\cs_set_eq:NN \Ldots \@@_Ldots
\cs_set_eq:NN \Cdots \@@_Cdots
\cs_set_eq:NN \Vdots \@@_Vdots
@@ -4910,7 +5360,7 @@ version 2005/12/01 or later.
\cs_set_eq:NN \OnlyMainNiceMatrix \@@_OnlyMainNiceMatrix:n
\cs_set_eq:NN \dotfill \@@_dotfill:
\cs_set_eq:NN \CodeAfter \@@_CodeAfter:n
- \cs_set_eq:NN \slashbox \@@_slashbox:nn
+ \cs_set_eq:NN \diagbox \@@_diagbox:nn
\bool_if:NT \l_@@_renew_dots_bool
{
\cs_set_eq:NN \ldots \@@_Ldots
@@ -5123,9 +5573,19 @@ version 2005/12/01 or later.
\bool_if:NT \l_@@_in_env_bool { \@@_fatal:n { Yet~in~env } }
\bool_set_true:N \l_@@_in_env_bool
% \end{macrocode}
+% The command |\CT@arc@| contains the instruction of color for the rules of the
+% array\footnote{e.g. |\color[rgb]{0.5,0.5,0}|)}. This command is used by |\CT@arc@| but
+% we use it also for compatibility with \pkg{colortbl}. But we want also to be
+% able to use color for the rules of the array when \pkg{colortbl} is \emph{not}
+% loaded. That's why we do the following instruction which is in the patch of
+% the beginning of arrays done by \pkg{colortbl}. Of course, we restore the
+% value of |\CT@arc@| at the end of our environment.
+% \begin{macrocode}
+ \cs_gset_eq:NN \@@_old_CT@arc@ \CT@arc@
+% \end{macrocode}
%
-% We deactivate Tikz externalization because we will use \textsc{pgf} pictures with the
-% options |overlay| and |remember picture| (or equivalent forms).
+% We deactivate Tikz externalization because we will use \textsc{pgf} pictures
+% with the options |overlay| and |remember picture| (or equivalent forms).
% \begin{macrocode}
\cs_if_exist:NT \tikz@library@external@loaded
{
@@ -5151,7 +5611,16 @@ version 2005/12/01 or later.
\cs_set_protected:Npn \@arrayrule { \@addtopreamble \@@_vline: }
% \end{macrocode}
%
-%
+% The sequence |\g_@@_blocks_seq| will contain the carateristics of the blocks
+% (specified by |\Block|) of the array. The sequence |\g_@@_pos_of_blocks_seq|
+% will contain only the position of the blocks. Of course, this is redundant but
+% it's for efficiency.
+% \begin{macrocode}
+ \seq_clear:N \g_@@_blocks_seq
+ \seq_clear:N \g_@@_pos_of_blocks_seq
+% \end{macrocode}
+%
+%
% The set of keys is not exactly the same for |{NiceArray}| and for the variants
% of |{NiceArray}| (|{pNiceArray}|, |{bNiceArray}|, etc.) because, for
% |{NiceArray}|, we have the options |t|, |c|, |b| and |baseline|.
@@ -5161,7 +5630,13 @@ version 2005/12/01 or later.
{ \keys_set:nn { NiceMatrix / pNiceArray } }
{ #3 , #5 }
% \end{macrocode}
-%
+%
+% \bigskip
+% \begin{macrocode}
+ \tl_if_empty:NF \l_@@_rules_color_tl
+ { \exp_after:wN \@@_set_CT@arc@: \l_@@_rules_color_tl \q_stop }
+% \end{macrocode}
+%
% \bigskip
% If the key |code-before| is used, we have to create the |col| nodes and the
% |row| nodes before the creation of the array. First, we have to test whether
@@ -5228,21 +5703,18 @@ version 2005/12/01 or later.
\group_begin:
\bool_if:NT \c_@@_tikz_loaded_bool
{
-% \end{macrocode}
-% Be careful: we must \emph{not} put ``|remember picture|'' in the |\pgfset|.
-% \begin{macrocode}
- \pgfset
+ \tikzset
{
every~picture / .style =
- { overlay , name~prefix = \@@_env: - }
+ { overlay , name~prefix = \@@_env: - }
}
- }
- \cs_set_eq:NN \cellcolor \@@_cellcolor:nn
- \cs_set_eq:NN \rectanglecolor \@@_rectanglecolor:nnn
- \cs_set_eq:NN \rowcolor \@@_rowcolor:nn
- \cs_set_eq:NN \rowcolors \@@_rowcolors:nnn
- \cs_set_eq:NN \columncolor \@@_columncolor:nn
- \cs_set_eq:NN \chessboardcolors \@@_chessboardcolors:nn
+ }
+ \cs_set_eq:NN \cellcolor \@@_cellcolor
+ \cs_set_eq:NN \rectanglecolor \@@_rectanglecolor
+ \cs_set_eq:NN \rowcolor \@@_rowcolor
+ \cs_set_eq:NN \rowcolors \@@_rowcolors
+ \cs_set_eq:NN \columncolor \@@_columncolor
+ \cs_set_eq:NN \chessboardcolors \@@_chessboardcolors
% \end{macrocode}
% We compose the |code-before| in math mode in order to nullify the spaces put
% by the user between instructions in the |code-before|.
@@ -5745,7 +6217,7 @@ version 2005/12/01 or later.
{ \box_ht:N \l_tmpa_box + \box_dp:N \l_tmpa_box }
{ }
}
- \right .
+ \right .
\c_math_toggle_token
}
\dim_set:Nn \l_@@_real_left_delim_dim
@@ -6106,7 +6578,7 @@ version 2005/12/01 or later.
% have to compute some dimensions of this box.
% \begin{macrocode}
\hbox_set:Nw \l_@@_cell_box
- \bool_if:NF \l_@@_NiceTabular_bool \c_math_toggle_token
+ \@@_math_toggle_token:
\bool_if:NT \l_@@_small_bool \scriptstyle
% \end{macrocode}
% We insert |\l_@@_code_for_first_col_tl|... but we don't insert it in the
@@ -6131,7 +6603,7 @@ version 2005/12/01 or later.
l
<
{
- \bool_if:NF \l_@@_NiceTabular_bool \c_math_toggle_token
+ \@@_math_toggle_token:
\hbox_set_end:
\@@_update_for_first_and_last_row:
% \end{macrocode}
@@ -6178,7 +6650,7 @@ version 2005/12/01 or later.
% have to compute some dimensions of this box.
% \begin{macrocode}
\hbox_set:Nw \l_@@_cell_box
- \bool_if:NF \l_@@_NiceTabular_bool \c_math_toggle_token
+ \@@_math_toggle_token:
\bool_if:NT \l_@@_small_bool \scriptstyle
% \end{macrocode}
% We insert |\l_@@_code_for_last_col_tl|... but we don't insert it in the
@@ -6198,7 +6670,7 @@ version 2005/12/01 or later.
l
<
{
- \bool_if:NF \l_@@_NiceTabular_bool \c_math_toggle_token
+ \@@_math_toggle_token:
\hbox_set_end:
\@@_update_for_first_and_last_row:
% \end{macrocode}
@@ -6354,6 +6826,7 @@ version 2005/12/01 or later.
% \begin{macrocode}
\NewDocumentEnvironment { NiceTabular } { O { } m ! O { } }
{
+ \str_gset:Nn \g_@@_name_env_str { NiceTabular }
\keys_set:nn { NiceMatrix / NiceTabular } { #1 , #3 }
\bool_set_true:N \l_@@_NiceTabular_bool
\NiceArray { #2 }
@@ -6537,18 +7010,26 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
-%
% \bigskip
-% Now, we really draw the dotted lines.
+% Now, we actually draw the dotted lines.
% \begin{macrocode}
\@@_draw_dotted_lines:
% \end{macrocode}
%
-% We draw the vertical rules of the option |vlines| before the
-% |internal-code-after| because the option |white| of a |\Block| may have to
-% erase these vertical rules.
% \begin{macrocode}
- \bool_if:NT \l_@@_vlines_bool \@@_draw_vlines:
+ \bool_if:NTF \l_@@_hvlines_bool
+ \@@_draw_hvlines:
+ {
+ \bool_if:NT \l_@@_hlines_bool \@@_draw_hlines:
+ \bool_if:NT \l_@@_vlines_bool \@@_draw_vlines:
+ }
+% \end{macrocode}
+%
+% We have to revert to a clean version of |\ialign| because there may be
+% tabulars in the |\Block| instructions that will be composed now.
+% \begin{macrocode}
+ \cs_set_eq:NN \ialign \@@_old_ialign:
+ \seq_if_empty:NF \g_@@_blocks_seq \@@_draw_blocks:
\g_@@_internal_code_after_tl
\tl_gclear:N \g_@@_internal_code_after_tl
\bool_if:NT \c_@@_tikz_loaded_bool
@@ -6579,9 +7060,19 @@ version 2005/12/01 or later.
\group_end:
\str_gclear:N \g_@@_name_env_str
\@@_restore_iRow_jCol:
+% \end{macrocode}
+% The command |\CT@arc@| contains the instruction of color for the rules of the
+% array\footnote{e.g. |\color[rgb]{0.5,0.5,0}|)}. This command is used by
+% |\CT@arc@| but we use it also for compatibility with \pkg{colortbl}. But we
+% want also to be able to use color for the rules of the array when
+% \pkg{colortbl} is \emph{not} loaded. That's why we do the following
+% instruction which is in the patch of the end of arrays done by \pkg{colortbl}.
+% \begin{macrocode}
+ \cs_gset_eq:NN \CT@arc@ \@@_old_CT@arc@
}
% \end{macrocode}
%
+%
% \bigskip
% We recall that, when externalization is used, |\tikzpicture| and
% |\endtikzpicture| (or |\pgfpicture| and |\endpgfpicture|) must be directly
@@ -6625,7 +7116,10 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+%
% \bigskip
+% \subsection*{We draw the dotted lines}
+%
% A dotted line will be said \emph{open} in one of its extremities when it stops
% on the edge of the matrix and \emph{closed} otherwise. In the following
% matrix, the dotted line is closed on its left extremity and open on its right.
@@ -6847,6 +7341,21 @@ version 2005/12/01 or later.
}
}
}
+% \end{macrocode}
+% If the key |hvlines| is used, we remind the rectangle described by all the
+% dotted lines in order to respect the corresponding virtual ``block'' when
+% drawing the horizontal and vertical rules.
+% \begin{macrocode}
+ \bool_if:NT \l_@@_hvlines_bool
+ {
+ \seq_gput_right:Nx \g_@@_pos_of_xdots_seq
+ {
+ { \int_use:N \l_@@_initial_i_int }
+ { \int_use:N \l_@@_initial_j_int }
+ { \int_use:N \l_@@_final_i_int }
+ { \int_use:N \l_@@_final_j_int }
+ }
+ }
}
% \end{macrocode}
%
@@ -7354,17 +7863,6 @@ version 2005/12/01 or later.
%
%
% \bigskip
-% The command |\NiceMatrixLastEnv| is not used by the package \pkg{nicematrix}.
-% It's only a facility given to the final user. It gives the number of the last
-% environment (in fact the number of the current environment but it's meant to
-% be used after the environment in order to refer to that environment --- and
-% its nodes --- without having to give it a name).
-% \begin{macrocode}
-\NewExpandableDocumentCommand \NiceMatrixLastEnv { }
- { \int_use:N \g_@@_env_int }
-% \end{macrocode}
-%
-% \bigskip
% \subsection*{The actual instructions for drawing the dotted line with Tikz}
%
% The command |\@@_draw_line:| should be used in a |{pgfpicture}|. It has six
@@ -7653,23 +8151,19 @@ version 2005/12/01 or later.
% \begin{macrocode}
\AtBeginDocument
{
- \tl_set:Nn \l_@@_argspec_tl { s O { } E { _ ^ } { { } { } } }
+ \tl_set:Nn \l_@@_argspec_tl { O { } E { _ ^ } { { } { } } }
\tl_set_rescan:Nno \l_@@_argspec_tl { } \l_@@_argspec_tl
\exp_args:NNV \NewDocumentCommand \@@_Ldots \l_@@_argspec_tl
{
- \bool_if:nTF { #1 }
- { \@@_error:n { starred~commands } }
+ \int_compare:nNnTF \c@jCol = 0
+ { \@@_error:nn { in~first~col } \Ldots }
{
- \int_compare:nNnTF \c@jCol = 0
- { \@@_error:nn { in~first~col } \Ldots }
+ \int_compare:nNnTF \c@jCol = \l_@@_last_col_int
+ { \@@_error:nn { in~last~col } \Ldots }
{
- \int_compare:nNnTF \c@jCol = \l_@@_last_col_int
- { \@@_error:nn { in~last~col } \Ldots }
- {
- \@@_instruction_of_type:nn { Ldots }
- { #2 , down = #3 , up = #4 }
- }
- }
+ \@@_instruction_of_type:nn { Ldots }
+ { #1 , down = #2 , up = #3 }
+ }
}
\bool_if:NF \l_@@_nullify_dots_bool { \phantom \@@_old_ldots }
\bool_gset_true:N \g_@@_empty_cell_bool
@@ -7680,19 +8174,15 @@ version 2005/12/01 or later.
% \begin{macrocode}
\exp_args:NNV \NewDocumentCommand \@@_Cdots \l_@@_argspec_tl
{
- \bool_if:nTF { #1 }
- { \@@_error:n { starred~commands } }
+ \int_compare:nNnTF \c@jCol = 0
+ { \@@_error:nn { in~first~col } \Cdots }
{
- \int_compare:nNnTF \c@jCol = 0
- { \@@_error:nn { in~first~col } \Cdots }
+ \int_compare:nNnTF \c@jCol = \l_@@_last_col_int
+ { \@@_error:nn { in~last~col } \Cdots }
{
- \int_compare:nNnTF \c@jCol = \l_@@_last_col_int
- { \@@_error:nn { in~last~col } \Cdots }
- {
- \@@_instruction_of_type:nn { Cdots }
- { #2 , down = #3 , up = #4 }
- }
- }
+ \@@_instruction_of_type:nn { Cdots }
+ { #1 , down = #2 , up = #3 }
+ }
}
\bool_if:NF \l_@@_nullify_dots_bool { \phantom \@@_old_cdots }
\bool_gset_true:N \g_@@_empty_cell_bool
@@ -7703,18 +8193,16 @@ version 2005/12/01 or later.
% \begin{macrocode}
\exp_args:NNV \NewDocumentCommand \@@_Vdots \l_@@_argspec_tl
{
- \bool_if:nTF { #1 }
- { \@@_error:n { starred~commands } }
- \int_compare:nNnTF \c@iRow = 0
- { \@@_error:nn { in~first~row } \Vdots }
+ \int_compare:nNnTF \c@iRow = 0
+ { \@@_error:nn { in~first~row } \Vdots }
+ {
+ \int_compare:nNnTF \c@iRow = \l_@@_last_row_int
+ { \@@_error:nn { in~last~row } \Vdots }
{
- \int_compare:nNnTF \c@iRow = \l_@@_last_row_int
- { \@@_error:nn { in~last~row } \Vdots }
- {
- \@@_instruction_of_type:nn { Vdots }
- { #2 , down = #3 , up = #4 }
- }
- }
+ \@@_instruction_of_type:nn { Vdots }
+ { #1 , down = #2 , up = #3 }
+ }
+ }
\bool_if:NF \l_@@_nullify_dots_bool { \phantom \@@_old_vdots }
\bool_gset_true:N \g_@@_empty_cell_bool
}
@@ -7724,27 +8212,23 @@ version 2005/12/01 or later.
% \begin{macrocode}
\exp_args:NNV \NewDocumentCommand \@@_Ddots \l_@@_argspec_tl
{
- \bool_if:nTF { #1 }
- { \@@_error:n { starred~commands } }
+ \int_case:nnF \c@iRow
+ {
+ 0 { \@@_error:nn { in~first~row } \Ddots }
+ \l_@@_last_row_int { \@@_error:nn { in~last~row } \Ddots }
+ }
{
- \int_case:nnF \c@iRow
+ \int_case:nnF \c@jCol
{
- 0 { \@@_error:nn { in~first~row } \Ddots }
- \l_@@_last_row_int { \@@_error:nn { in~last~row } \Ddots }
+ 0 { \@@_error:nn { in~first~col } \Ddots }
+ \l_@@_last_col_int { \@@_error:nn { in~last~col } \Ddots }
}
- {
- \int_case:nnF \c@jCol
- {
- 0 { \@@_error:nn { in~first~col } \Ddots }
- \l_@@_last_col_int { \@@_error:nn { in~last~col } \Ddots }
- }
- {
- \@@_instruction_of_type:nn { Ddots }
- { #2 , down = #3 , up = #4 }
- }
+ {
+ \@@_instruction_of_type:nn { Ddots }
+ { #1 , down = #2 , up = #3 }
+ }
- }
- }
+ }
\bool_if:NF \l_@@_nullify_dots_bool { \phantom \@@_old_ddots }
\bool_gset_true:N \g_@@_empty_cell_bool
}
@@ -7754,27 +8238,23 @@ version 2005/12/01 or later.
% \begin{macrocode}
\exp_args:NNV \NewDocumentCommand \@@_Iddots \l_@@_argspec_tl
{
- \bool_if:nTF { #1 }
- { \@@_error:n { starred~commands } }
+ \int_case:nnF \c@iRow
+ {
+ 0 { \@@_error:nn { in~first~row } \Iddots }
+ \l_@@_last_row_int { \@@_error:nn { in~last~row } \Iddots }
+ }
{
- \int_case:nnF \c@iRow
+ \int_case:nnF \c@jCol
{
- 0 { \@@_error:nn { in~first~row } \Iddots }
- \l_@@_last_row_int { \@@_error:nn { in~last~row } \Iddots }
+ 0 { \@@_error:nn { in~first~col } \Iddots }
+ \l_@@_last_col_int { \@@_error:nn { in~last~col } \Iddots }
}
- {
- \int_case:nnF \c@jCol
- {
- 0 { \@@_error:nn { in~first~col } \Iddots }
- \l_@@_last_col_int { \@@_error:nn { in~last~col } \Iddots }
- }
- {
- \@@_instruction_of_type:nn { Iddots }
- { #2 , down = #3 , up = #4 }
- }
+ {
+ \@@_instruction_of_type:nn { Iddots }
+ { #1 , down = #2 , up = #3 }
+ }
- }
- }
+ }
\bool_if:NF \l_@@_nullify_dots_bool { \phantom \@@_old_iddots }
\bool_gset_true:N \g_@@_empty_cell_bool
}
@@ -7803,13 +8283,26 @@ version 2005/12/01 or later.
\cs_new:Npn \@@_multicolumn:nnn #1 #2 #3
{
\@@_old_multicolumn { #1 } { #2 } { #3 }
- \int_compare:nNnT #1 > 1
+% \end{macrocode}
+% The |\peek_remove_spaces:n| is mandatory.
+% \begin{macrocode}
+ \peek_remove_spaces:n
{
- \seq_gput_left:Nx \g_@@_multicolumn_cells_seq
- { \int_use:N \c@iRow - \int_use:N \c@jCol }
- \seq_gput_left:Nn \g_@@_multicolumn_sizes_seq { #1 }
- }
- \int_gadd:Nn \c@jCol { #1 - 1 }
+ \int_compare:nNnT #1 > 1
+ {
+ \seq_gput_left:Nx \g_@@_multicolumn_cells_seq
+ { \int_use:N \c@iRow - \int_use:N \c@jCol }
+ \seq_gput_left:Nn \g_@@_multicolumn_sizes_seq { #1 }
+ \seq_gput_right:Nx \g_@@_pos_of_blocks_seq
+ {
+ { \int_use:N \c@iRow }
+ { \int_use:N \c@jCol }
+ { \int_use:N \c@iRow }
+ { \int_eval:n { \c@jCol + #1 - 1 } }
+ }
+ }
+ \int_gadd:Nn \c@jCol { #1 - 1 }
+ }
}
% \end{macrocode}
%
@@ -8044,14 +8537,20 @@ version 2005/12/01 or later.
% The command |\@@_rotate:| will be linked to |\rotate| in
% |{NiceArrayWithDelims}|.
%
-% The command will exit three levels of groups in order
+% The command will exit three levels of groups (only two in |{NiceTabular}|
+% because there is not the group of the math mode to exit) in order
% to execute the command
%
% \qquad ``|\box_rotate:Nn \l_@@_cell_box { 90 }|''
%
% just after the construction of the box |\l_@@_cell_box|.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_rotate: { \group_insert_after:N \@@_rotate_i: }
+\cs_new_protected:Npn \@@_rotate:
+ {
+ \bool_if:NTF \l_@@_NiceTabular_bool
+ { \group_insert_after:N \@@_rotate_ii: }
+ { \group_insert_after:N \@@_rotate_i: }
+ }
\cs_new_protected:Npn \@@_rotate_i: { \group_insert_after:N \@@_rotate_ii: }
\cs_new_protected:Npn \@@_rotate_ii: { \group_insert_after:N \@@_rotate_iii: }
\cs_new_protected:Npn \@@_rotate_iii:
@@ -8196,21 +8695,25 @@ version 2005/12/01 or later.
%
%
% \bigskip
-% Here an example : |\@@_rowcolor:nn {red!15} {1,3,5-7,10-}|
+% Here an example : |\@@_rowcolor {red!15} {1,3,5-7,10-}|
% \begin{macrocode}
-\cs_new_protected:Npn \@@_rowcolor:nn #1 #2
+\NewDocumentCommand \@@_rowcolor { O { } m m }
{
- \tl_if_blank:nF { #1 }
+ \tl_if_blank:nF { #2 }
{
\pgfpicture
\pgf@relevantforpicturesizefalse
- \pgfsetfillcolor { #1 }
+ \tl_if_empty:nTF { #1 } \color { \color [ #1 ] } { #2 }
% \end{macrocode}
-% |\l_tmpa_dim| is the $x$-value of the left side of the rows.
+% |\l_tmpa_dim| is the $x$-value of the right side of the rows.
% \begin{macrocode}
+ \@@_qpoint:n { col - 1}
+ \int_compare:nNnTF \l_@@_first_col_int = 0
+ { \dim_set:Nn \l_tmpc_dim { \pgf@x + 0.5 \arrayrulewidth } }
+ { \dim_set:Nn \l_tmpc_dim { \pgf@x - 0.5 \arrayrulewidth } }
\@@_qpoint:n { col - \@@_succ:n \c@jCol }
- \dim_set_eq:NN \l_tmpa_dim \pgf@x
- \clist_map_inline:nn { #2 }
+ \dim_set:Nn \l_tmpa_dim { \pgf@x + 0.5 \arrayrulewidth }
+ \clist_map_inline:nn { #3 }
{
\tl_set:Nn \l_tmpa_tl { ##1 }
\tl_if_in:NnTF \l_tmpa_tl { - }
@@ -8225,9 +8728,12 @@ version 2005/12/01 or later.
% Now, the numbers of both rows are in |\l_tmpa_tl| and |\l_tmpb_tl|.
% \begin{macrocode}
\@@_qpoint:n { row - \@@_succ:n \l_tmpb_tl }
+ \dim_set:Nn \l_tmpb_dim { \pgf@y + 0.5 \arrayrulewidth }
+ \@@_qpoint:n { row - \l_tmpa_tl }
+ \dim_set:Nn \l_tmpd_dim { \pgf@y + 0.5 \arrayrulewidth }
\pgfpathrectanglecorners
- { \@@_qpoint:n { row - \l_tmpa_tl } }
- { \pgfpoint \l_tmpa_dim \pgf@y }
+ { \pgfpoint \l_tmpc_dim \l_tmpd_dim }
+ { \pgfpoint \l_tmpa_dim \l_tmpb_dim }
}
\pgfusepathqfill
\endpgfpicture
@@ -8238,22 +8744,22 @@ version 2005/12/01 or later.
% \bigskip
% Here an example : |\@@_columncolor:nn {red!15} {1,3,5-7,10-}|
% \begin{macrocode}
-\cs_new_protected:Npn \@@_columncolor:nn #1 #2
+\NewDocumentCommand \@@_columncolor { O { } m m }
{
- \tl_if_blank:nF { #1 }
+ \tl_if_blank:nF { #2 }
{
\pgfpicture
\pgf@relevantforpicturesizefalse
- \pgfsetfillcolor { #1 }
+ \tl_if_empty:nTF { #1 } \color { \color [ #1 ] } { #2 }
\@@_qpoint:n { row - 1 }
% \end{macrocode}
% |\l_tmpa_dim| is the $y$-value of the top of the columns et |\l_tmpb_dim| is
% the $y$-value of the bottom.
% \begin{macrocode}
- \dim_set_eq:NN \l_tmpa_dim \pgf@y
+ \dim_set:Nn \l_tmpa_dim {\pgf@y + 0.5 \arrayrulewidth }
\@@_qpoint:n { row - \@@_succ:n \c@iRow }
- \dim_set_eq:NN \l_tmpb_dim \pgf@y
- \clist_map_inline:nn { #2 }
+ \dim_set:Nn \l_tmpb_dim { \pgf@y + 0.5 \arrayrulewidth }
+ \clist_map_inline:nn { #3 }
{
\tl_set:Nn \l_tmpa_tl { ##1 }
\tl_if_in:NnTF \l_tmpa_tl { - }
@@ -8268,11 +8774,14 @@ version 2005/12/01 or later.
% Now, the numbers of both columns are in |\l_tmpa_tl| and |\l_tmpb_tl|.
% \begin{macrocode}
\@@_qpoint:n { col - \l_tmpa_tl }
- \dim_set_eq:NN \l_tmpc_dim \pgf@x
+ \int_compare:nNnTF \l_@@_first_col_int = \l_tmpa_tl
+ { \dim_set:Nn \l_tmpc_dim { \pgf@x - 0.5 \arrayrulewidth } }
+ { \dim_set:Nn \l_tmpc_dim { \pgf@x + 0.5 \arrayrulewidth } }
\@@_qpoint:n { col - \@@_succ:n \l_tmpb_tl }
+ \dim_set:Nn \l_tmpd_dim { \pgf@x + 0.5 \arrayrulewidth }
\pgfpathrectanglecorners
{ \pgfpoint \l_tmpc_dim \l_tmpa_dim }
- { \pgfpoint \pgf@x \l_tmpb_dim }
+ { \pgfpoint \l_tmpd_dim \l_tmpb_dim }
}
\pgfusepathqfill
\endpgfpicture
@@ -8281,16 +8790,16 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \bigskip
-% Here an example : |\@@_cellcolor:nn {red!15}{2-3,3-4,4-5,5-6}|
+% Here an example : |\@@_cellcolor[rgb]{0.5,0.5,0}{2-3,3-4,4-5,5-6}|
% \begin{macrocode}
-\cs_new_protected:Npn \@@_cellcolor:nn #1 #2
+\NewDocumentCommand \@@_cellcolor { O { } m m }
{
- \tl_if_blank:nF { #1 }
+ \tl_if_blank:nF { #2 }
{
\pgfpicture
\pgf@relevantforpicturesizefalse
- \pgfsetfillcolor { #1 }
- \clist_map_inline:nn { #2 }
+ \tl_if_empty:nTF { #1 } \color { \color [ #1 ] } { #2 }
+ \clist_map_inline:nn { #3 }
{
\@@_cut_on_hyphen:w ##1 \q_stop
\@@_qpoint:n { row - \l_tmpa_tl }
@@ -8298,13 +8807,15 @@ version 2005/12/01 or later.
{ \int_compare_p:n { \l_tmpa_tl <= \c@iRow } }
{ \int_compare_p:n { \l_tmpb_tl <= \c@jCol } }
{
- \dim_set_eq:NN \l_tmpb_dim \pgf@y
+ \dim_set:Nn \l_tmpb_dim { \pgf@y + 0.5 \arrayrulewidth }
\@@_qpoint:n { row - \@@_succ:n \l_tmpa_tl }
- \dim_set_eq:NN \l_tmpa_dim \pgf@y
+ \dim_set:Nn \l_tmpa_dim { \pgf@y + 0.5 \arrayrulewidth }
\@@_qpoint:n { col - \l_tmpb_tl }
- \dim_set_eq:NN \l_tmpc_dim \pgf@x
+ \int_compare:nNnTF \l_@@_first_col_int = \l_tmpb_tl
+ { \dim_set:Nn \l_tmpc_dim { \pgf@x - 0.5 \arrayrulewidth } }
+ { \dim_set:Nn \l_tmpc_dim { \pgf@x + 0.5 \arrayrulewidth } }
\@@_qpoint:n { col - \@@_succ:n \l_tmpb_tl }
- \dim_set_eq:NN \l_tmpd_dim \pgf@x
+ \dim_set:Nn \l_tmpd_dim { \pgf@x + 0.5 \arrayrulewidth }
\pgfpathrectanglecorners
{ \pgfpoint \l_tmpc_dim \l_tmpb_dim }
{ \pgfpoint \l_tmpd_dim \l_tmpa_dim }
@@ -8312,38 +8823,40 @@ version 2005/12/01 or later.
}
\pgfusepathqfill
\endpgfpicture
- }
+ }
}
% \end{macrocode}
%
% \bigskip
-% Here an example : |\@@_rectanglecolor:nn {red!15}{2-3}{5-6}|
+% Here an example : |\@@_rectanglecolor{red!15}{2-3}{5-6}|
% \begin{macrocode}
-\cs_new_protected:Npn \@@_rectanglecolor:nnn #1 #2 #3
+\NewDocumentCommand \@@_rectanglecolor { O { } m m m }
{
- \tl_if_blank:nF { #1 }
+ \tl_if_blank:nF { #2 }
{
\pgfpicture
\pgf@relevantforpicturesizefalse
- \pgfsetfillcolor { #1 }
- \@@_cut_on_hyphen:w #2 \q_stop
+ \tl_if_empty:nTF { #1 } \color { \color [ #1 ] } { #2 }
+ \@@_cut_on_hyphen:w #3 \q_stop
\bool_lazy_and:nnT
{ \int_compare_p:n { \l_tmpa_tl <= \c@iRow } }
{ \int_compare_p:n { \l_tmpb_tl <= \c@jCol } }
{
\@@_qpoint:n { row - \l_tmpa_tl }
- \dim_set_eq:NN \l_tmpb_dim \pgf@y
+ \dim_set:Nn \l_tmpb_dim { \pgf@y + 0.5 \arrayrulewidth }
\@@_qpoint:n { col - \l_tmpb_tl }
- \@@_cut_on_hyphen:w #3 \q_stop
+ \int_compare:nNnTF \l_@@_first_col_int = \l_tmpb_tl
+ { \dim_set:Nn \l_tmpc_dim { \pgf@x - 0.5 \arrayrulewidth } }
+ { \dim_set:Nn \l_tmpc_dim { \pgf@x + 0.5 \arrayrulewidth } }
+ \@@_cut_on_hyphen:w #4 \q_stop
\int_compare:nNnT \l_tmpa_tl > \c@iRow
{ \tl_set:Nx \l_tmpa_tl { \int_use:N \c@iRow } }
\int_compare:nNnT \l_tmpb_tl > \c@jCol
{ \tl_set:Nx \l_tmpb_tl { \int_use:N \c@jCol } }
- \dim_set_eq:NN \l_tmpc_dim \pgf@x
\@@_qpoint:n { row - \@@_succ:n \l_tmpa_tl }
- \dim_set_eq:NN \l_tmpa_dim \pgf@y
+ \dim_set:Nn \l_tmpa_dim { \pgf@y + 0.5 \arrayrulewidth }
\@@_qpoint:n { col - \@@_succ:n \l_tmpb_tl }
- \dim_set_eq:NN \l_tmpd_dim \pgf@x
+ \dim_set:Nn \l_tmpd_dim { \pgf@x + 0.5 \arrayrulewidth }
\pgfpathrectanglecorners
{ \pgfpoint \l_tmpc_dim \l_tmpb_dim }
{ \pgfpoint \l_tmpd_dim \l_tmpa_dim }
@@ -8361,30 +8874,32 @@ version 2005/12/01 or later.
% However, the command |\rowcolors| of \pkg{nicematrix} has \emph{not} the
% optional argument of the command |\rowcolors| of \pkg{xcolor}.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_rowcolors:nnn #1 #2 #3
+\NewDocumentCommand \@@_rowcolors { O { } m m m }
{
- \int_step_inline:nnn { #1 } { \int_use:N \c@iRow }
+ \int_step_inline:nnn { #2 } { \int_use:N \c@iRow }
{
\int_if_odd:nTF { ##1 }
- { \@@_rowcolor:nn { #2 } { ##1 } }
- { \@@_rowcolor:nn { #3 } { ##1 } }
- }
+ { \@@_rowcolor [ #1 ] { #3 } }
+ { \@@_rowcolor [ #1 ] { #4 } }
+ { ##1 }
+ }
}
% \end{macrocode}
%
% \bigskip
% \begin{macrocode}
-\cs_new_protected:Npn \@@_chessboardcolors:nn #1 #2
+\NewDocumentCommand \@@_chessboardcolors { O { } m m }
{
\int_step_inline:nn { \int_use:N \c@iRow }
{
\int_step_inline:nn { \int_use:N \c@jCol }
{
\int_if_even:nTF { ####1 + ##1 }
- { \@@_cellcolor:nn { #1 } { ####1 - ##1 } }
- { \@@_cellcolor:nn { #2 } { ####1 - ##1 } }
+ { \@@_cellcolor [ #1 ] { #2 } }
+ { \@@_cellcolor [ #1 ] { #3 } }
+ { ##1 - ####1 }
}
- }
+ }
}
% \end{macrocode}
%
@@ -8500,10 +9015,8 @@ version 2005/12/01 or later.
% \begin{macrocode}
\@@_qpoint:n { row - 1 }
\dim_set_eq:NN \l_tmpa_dim \pgf@y
- \pgfusepathqfill
\@@_qpoint:n { row - \@@_succ:n \c@iRow }
\dim_sub:Nn \l_tmpa_dim \pgf@y
- \pgfusepathqfill
% \end{macrocode}
% We translate vertically to take into account the potential ``last row''.
% \begin{macrocode}
@@ -8516,7 +9029,7 @@ version 2005/12/01 or later.
% We adjust the value of |\l_tmpa_dim| by the width of the horizontal rule just
% before the ``last row''.
% \begin{macrocode}
- \@@_qpoint:n { row - \@@_succ:n\c@iRow }
+ \@@_qpoint:n { row - \@@_succ:n \c@iRow }
\dim_add:Nn \l_tmpa_dim \pgf@y
\@@_qpoint:n { row - \@@_succ:n \g_@@_row_total_int }
\dim_sub:Nn \l_tmpa_dim \pgf@y
@@ -8546,6 +9059,223 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+%%
+% \subsection*{The key hvlines}
+%
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_draw_hlines:
+ {
+ \pgfpicture
+ \CT@arc@
+ \pgfrememberpicturepositiononpagetrue
+ \pgf@relevantforpicturesizefalse
+ \pgfsetlinewidth \arrayrulewidth
+ \int_step_inline:nnn
+ { \bool_if:NTF \l_@@_NiceArray_bool 1 2 }
+ { \bool_if:NTF \l_@@_NiceArray_bool { \@@_succ:n \c@iRow } \c@iRow }
+ {
+ \@@_qpoint:n { row - ##1 }
+ \dim_set_eq:NN \l_tmpa_dim \pgf@y
+ \pgfpathmoveto { \pgfpoint \pgf@x \pgf@y }
+ \@@_qpoint:n { col - \@@_succ:n { \c@jCol } }
+ \dim_set:Nn \l_tmpb_dim { \pgf@x + 0.5 \arrayrulewidth }
+ \pgfpathlineto { \pgfpoint \l_tmpb_dim \l_tmpa_dim }
+ }
+ \pgfusepathqstroke
+ \endpgfpicture
+ }
+% \end{macrocode}
+%
+% \bigskip
+% Since version 4.1, the key |hvlines| is no longer a mere alias for
+% the conjonction of |hlines| and |vlines|. Indeed, with |hvlines|, the vertical
+% and horizontal rules are \emph{not} drawn within the blocks (created by
+% |\Block|) nor within the ``virtual blocks'' (corresponding to the dotted lines
+% drawn by |\Cdots|, |\Vdots|, etc.).
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_draw_hvlines:
+ {
+ \bool_lazy_and:nnTF
+ { \seq_if_empty_p:N \g_@@_pos_of_blocks_seq }
+ { \seq_if_empty_p:N \g_@@_pos_of_xdots_seq }
+ \@@_draw_hvlines_i:
+ \@@_draw_hvlines_ii:
+ }
+% \end{macrocode}
+%
+% \bigskip
+% This version is only for efficiency. The general case (in
+% |\@@_draw_hvlines_ii:|) does the job in all case (but slower).
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_draw_hvlines_i:
+ {
+ \@@_draw_hlines:
+ \@@_draw_vlines:
+ }
+% \end{macrocode}
+%
+% \bigskip
+% Now, the general case, where there are blocks or dots in the array.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_draw_hvlines_ii:
+ {
+ \group_begin:
+ \CT@arc@
+% \end{macrocode}
+%
+% First, the exterior rectangle of the array (only in |{NiceArray}| and
+% |{NiceTabular}|).
+% \begin{macrocode}
+ \bool_if:NT \l_@@_NiceArray_bool
+ {
+ \pgfpicture
+ \pgfrememberpicturepositiononpagetrue
+ \pgf@relevantforpicturesizefalse
+ \pgfsetlinewidth \arrayrulewidth
+ \pgfsetrectcap
+ \@@_qpoint:n { col - 1 }
+ \dim_set_eq:NN \l_tmpa_dim \pgf@x
+ \@@_qpoint:n { row -1 }
+ \dim_set_eq:NN \l_tmpb_dim \pgf@y
+ \@@_qpoint:n { col - \@@_succ:n \c@jCol }
+ \dim_set_eq:NN \l_tmpc_dim \pgf@x
+ \@@_qpoint:n { row - \@@_succ:n \c@iRow }
+ \pgfpathrectanglecorners
+ { \pgfpoint \l_tmpa_dim \l_tmpb_dim }
+ { \pgfpoint \l_tmpc_dim \pgf@y }
+ \pgfusepathqstroke
+ \endpgfpicture
+ }
+% \end{macrocode}
+%
+% First, the horizontal rules in the interior of the array.
+% \begin{macrocode}
+ \int_step_variable:nnNn 2 \c@iRow \l_tmpa_tl
+ {
+ \int_step_variable:nNn \c@jCol \l_tmpb_tl
+ {
+% \end{macrocode}
+% The boolean |\g_tmpa_bool| indicates whether the small horizontal rule will be
+% drawn. If we find that it is in a block (a real block, created by |\Block| or
+% a virtual block corresponding to a dotted line, created by |\Cdots|, |\Vdots|,
+% etc.), we will set |\g_tmpa_bool| to |false| and the small horizontal rule
+% won't be drawn.
+% \begin{macrocode}
+ \bool_gset_true:N \g_tmpa_bool
+ \seq_map_inline:Nn \g_@@_pos_of_blocks_seq
+ { \@@_test_if_hline_in_block:nnnn ##1 }
+ \seq_map_inline:Nn \g_@@_pos_of_xdots_seq
+ { \@@_test_if_hline_in_block:nnnn ##1 }
+ \bool_if:NT \g_tmpa_bool
+ {
+ \pgfpicture
+ \pgfrememberpicturepositiononpagetrue
+ \pgf@relevantforpicturesizefalse
+ \pgfsetlinewidth \arrayrulewidth
+ \pgfsetrectcap
+ \@@_qpoint:n { row - \l_tmpa_tl }
+ \dim_set_eq:NN \l_tmpb_dim \pgf@y
+ \@@_qpoint:n { col - \l_tmpb_tl }
+ \dim_set_eq:NN \l_tmpa_dim \pgf@x
+ \@@_qpoint:n { col - \@@_succ:n \l_tmpb_tl }
+ \dim_set_eq:NN \l_tmpc_dim \pgf@x
+ \pgfpathmoveto { \pgfpoint \l_tmpa_dim \l_tmpb_dim }
+ \pgfpathlineto { \pgfpoint \l_tmpc_dim \l_tmpb_dim }
+ \pgfusepathqstroke
+ \endpgfpicture
+ }
+ }
+ }
+% \end{macrocode}
+% Now, the vertical rules in the interior of the array.
+% \begin{macrocode}
+ \int_step_variable:nNn \c@iRow \l_tmpa_tl
+ {
+ \int_step_variable:nnNn 2 \c@jCol \l_tmpb_tl
+ {
+% \end{macrocode}
+% The boolean |\g_tmpa_bool| indicates whether the small vertial rule will be
+% drawn. If we find that it is in a block (a real block, created by |\Block| or
+% a virtual block corresponding to a dotted line, created by |\Cdots|, |\Vdots|,
+% etc.), we will set |\g_tmpa_bool| to |false| and the small vertial rule won't
+% be drawn.
+% \begin{macrocode}
+ \bool_gset_true:N \g_tmpa_bool
+ \seq_map_inline:Nn \g_@@_pos_of_blocks_seq
+ { \@@_test_if_vline_in_block:nnnn ##1 }
+ \seq_map_inline:Nn \g_@@_pos_of_xdots_seq
+ { \@@_test_if_vline_in_block:nnnn ##1 }
+ \bool_if:NT \g_tmpa_bool
+ {
+ \pgfpicture
+ \pgfrememberpicturepositiononpagetrue
+ \pgf@relevantforpicturesizefalse
+ \pgfsetlinewidth \arrayrulewidth
+ \pgfsetrectcap
+ \@@_qpoint:n { row - \l_tmpa_tl }
+ \dim_set_eq:NN \l_tmpb_dim \pgf@y
+ \@@_qpoint:n { col - \l_tmpb_tl }
+ \dim_set_eq:NN \l_tmpa_dim \pgf@x
+ \@@_qpoint:n { row - \@@_succ:n \l_tmpa_tl }
+ \dim_set_eq:NN \l_tmpc_dim \pgf@y
+ \pgfpathmoveto { \pgfpoint \l_tmpa_dim \l_tmpb_dim }
+ \pgfpathlineto { \pgfpoint \l_tmpa_dim \l_tmpc_dim }
+ \pgfusepathqstroke
+ \endpgfpicture
+ }
+ }
+ }
+% \end{macrocode}
+% The group was for the color of the rules.
+% \begin{macrocode}
+ \group_end:
+ \seq_gclear:N \g_@@_pos_of_xdots_seq
+ }
+% \end{macrocode}
+%
+% The following command tests wether the current position in the array (given by
+% |\l_tmpa_tl| for the row and |\l_tmpb_tl| for the col) would provide an
+% horizontal rule towards the right in the block delimited by the four arguments
+% |#1|, |#2|, |#3| and |#4|. If this rule would be in the block (it must not be
+% drawn), the boolean |\l_tmpa_bool| is set to |false|.
+% \begin{macrocode}
+\cs_set_protected:Npn \@@_test_if_hline_in_block:nnnn #1 #2 #3 #4
+ {
+ \int_compare:nNnT \l_tmpa_tl > { #1 }
+ {
+ \int_compare:nNnT \l_tmpa_tl < { #3 + 1 }
+ {
+ \int_compare:nNnT \l_tmpb_tl > { #2 - 1 }
+ {
+ \int_compare:nNnT \l_tmpb_tl < { #4 + 1 }
+ { \bool_gset_false:N \g_tmpa_bool }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+%
+% The same for vertical rules.
+% \begin{macrocode}
+\cs_set_protected:Npn \@@_test_if_vline_in_block:nnnn #1 #2 #3 #4
+ {
+ \int_compare:nNnT \l_tmpa_tl > { #1 - 1 }
+ {
+ \int_compare:nNnT \l_tmpa_tl < { #3 + 1 }
+ {
+ \int_compare:nNnT \l_tmpb_tl > { #2 }
+ {
+ \int_compare:nNnT \l_tmpb_tl < { #4 + 1 }
+ { \bool_gset_false:N \g_tmpa_bool }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+%
+%
+%
%
% \bigskip
% \subsection*{The commands to draw dotted lines to separate columns and rows}
@@ -9211,54 +9941,63 @@ version 2005/12/01 or later.
\cs_new_protected:Npn \@@_Block_ii:nnnnn #1 #2 #3 #4 #5
{
% \end{macrocode}
-% We write an instruction in the |code-after|. We write the instruction in the
-% beginning of the |code-after| (the |left| in |\tl_gput_left:Nx|) because we
-% want the Tikz nodes corresponding of the block created \emph{before} potential
-% instructions written by the user in the |code-after| (these instructions may
-% use the Tikz node of the created block).
+%
+% \medskip
% \begin{macrocode}
- \tl_gput_left:Nx \g_@@_internal_code_after_tl
+ \tl_set:Nx \l_tmpa_tl
{
- \@@_Block_iii:nnnnnn
{ \int_use:N \c@iRow }
{ \int_use:N \c@jCol }
{ \int_eval:n { \c@iRow + #1 - 1 } }
{ \int_eval:n { \c@jCol + #2 - 1 } }
- { #3 }
- \exp_not:n { { #4 $ #5 $ } }
- }
+ }
% \end{macrocode}
-% It's not allowed to use the command |\Block| twice in the same cell of the
-% array. That's why, at the first use, we link the command |\Block|
-% to a special version. The scope of this link is the cell of the array.
+% Now, |\l_tmpa_tl| constains a ``object'' corresponding to the position of the
+% block whith four components surrounded by brackets:
+%
+% |{|\textsl{imin}|}{|\textsl{jmin}|}{|\textsl{imax}|}{|\textsl{jmax}|}|.
+%
+% We store this information in the sequence |\g_@@_pos_of_blocks_seq|.
% \begin{macrocode}
- \cs_set_eq:NN \Block \@@_Block_error:nn
- }
+ \seq_gput_left:NV \g_@@_pos_of_blocks_seq \l_tmpa_tl
% \end{macrocode}
+% We also store a complete description of the block in the sequence
+% |\g_@@_blocks_seq|. Of course, the sequences |\g_@@_pos_of_blocks_seq| and
+% |\g_@@_blocks_seq| are redundant, but it's for efficiency. In
+% |\g_@@_blocks_seq|, each block is represented by an ``objet'' with six
+% components:
%
+% |{|\textsl{imin}|}{|\textsl{jmin}|}{|\textsl{imax}|}{|\textsl{jmax}|}{|\textsl{options}|}{|\textsl{contents}|}|.
% \begin{macrocode}
-\cs_new:Npn \@@_Block_error:nn #1 #2
- {
- \@@_error:n { Second~Block }
- \cs_set_eq:NN \Block \use:nn
+ \seq_gput_left:Nx \g_@@_blocks_seq
+ {
+ \l_tmpa_tl
+ { #3 }
+ \exp_not:n { { #4 \@@_math_toggle_token: #5 \@@_math_toggle_token: } }
+ }
}
% \end{macrocode}
+%
%
-% \medskip
+% \bigskip
+% The key |tikz| is for Tikz options used when the \textsc{pgf} node of the
+% block is created.
% \begin{macrocode}
\keys_define:nn { NiceMatrix / Block }
{
tikz .tl_set:N = \l_@@_tikz_tl ,
tikz .value_required:n = true ,
- white .bool_set:N = \l_@@_white_bool ,
- white .default:n = true ,
- white .value_forbidden:n = true ,
}
% \end{macrocode}
%
+% \bigskip
+% The command |\@@_draw_blocks:| will draw all the blocks. This command is used
+% after the construction of the array.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_draw_blocks:
+ { \seq_map_inline:Nn \g_@@_blocks_seq { \@@_Block_iii:nnnnnn ##1 } }
+% \end{macrocode}
%
-% \medskip
-% The following command |\@@_Block_iii:nnnnnn| will be used in the |code-after|.
% \begin{macrocode}
\cs_new_protected:Npn \@@_Block_iii:nnnnnn #1 #2 #3 #4 #5 #6
{
@@ -9270,11 +10009,9 @@ version 2005/12/01 or later.
% \end{macrocode}
%
% \begin{macrocode}
- \bool_if:nTF
- {
- \int_compare_p:nNn { #3 } > \c@iRow
- || \int_compare_p:nNn { #4 } > \c@jCol
- }
+ \bool_lazy_or:nnTF
+ { \int_compare_p:nNn { #3 } > \c@iRow }
+ { \int_compare_p:nNn { #4 } > \c@jCol }
{ \msg_error:nnnn { nicematrix } { Block~too~large } { #1 } { #2 } }
{
% \end{macrocode}
@@ -9299,33 +10036,6 @@ version 2005/12/01 or later.
\@@_qpoint:n { col - \@@_succ:n { #4 } }
\dim_set_eq:NN \l_tmpd_dim \pgf@x
% \end{macrocode}
-%
-% \medskip
-% The following code doesn't work for the first vertical rule. You should allow
-% the option |white| if and only if the option |vlines| and |hlines| has been used.
-% \begin{macrocode}
- \bool_if:NT \l_@@_white_bool
- {
- \begin { pgfscope }
- \pgfsetfillcolor { white }
-% \end{macrocode}
-%
-% \begin{macrocode}
- \pgfpathrectanglecorners
- {
- \pgfpoint
- { \l_tmpb_dim + 0.5 \arrayrulewidth }
- { \l_tmpa_dim - 0.5 \arrayrulewidth }
- }
- {
- \pgfpoint
- { \l_tmpd_dim - 0.5 \arrayrulewidth }
- { \l_tmpc_dim + 0.5 \arrayrulewidth }
- }
- \pgfusepathqfill
- \end { pgfscope }
- }
-% \end{macrocode}
%
% We construct the node for the block with the name |(#1-#2-block)|.
%
@@ -9510,7 +10220,9 @@ version 2005/12/01 or later.
% case of use of |\dotfill| ``internally'' in the cell (e.g. |\hbox to 1cm {\dotfill}|).
% \begin{macrocode}
\@@_dotfill
- \group_insert_after:N \@@_dotfill_i:
+ \bool_if:NT \l_@@_NiceTabular_bool
+ { \group_insert_after:N \@@_dotfill_ii: }
+ { \group_insert_after:N \@@_dotfill_i: }
}
\cs_new_protected:Npn \@@_dotfill_i: { \group_insert_after:N \@@_dotfill_ii: }
\cs_new_protected:Npn \@@_dotfill_ii: { \group_insert_after:N \@@_dotfill_iii: }
@@ -9518,32 +10230,32 @@ version 2005/12/01 or later.
% Now, if the box if not empty (unfornately, we can't actually test whether the
% box is empty and that's why we only consider it's width), we insert
% |\@@_dotfill| (which is the saved version of |\dotfill|) in the cell of the
-% array, and it will extends, since it's no longer in |\l_@@_cell_box|.
+% array, and it will extend, since it is no longer in |\l_@@_cell_box|.
% \begin{macrocode}
\cs_new_protected:Npn \@@_dotfill_iii:
{ \dim_compare:nNnT { \box_wd:N \l_@@_cell_box } = \c_zero_dim \@@_dotfill }
% \end{macrocode}
%
-% \subsection*{The command \textbackslash slashbox}
+% \subsection*{The command \textbackslash diagbox}
%
%
% \begin{macrocode}
-\cs_new_protected:Npn \@@_slashbox:nn #1 #2
+\cs_new_protected:Npn \@@_diagbox:nn #1 #2
{
\tl_gput_right:Nx \g_@@_internal_code_after_tl
{
- \@@_actually_slashbox:nnnn
+ \@@_actually_diagbox:nnnn
{ \int_use:N \c@iRow } { \int_use:N \c@jCol } { #1 } { #2 }
}
}
% \end{macrocode}
%
% \medskip
-% The two arguments of |\@@_actually_slashbox:nn| are the number of row and the
+% The two arguments of |\@@_actually_diagbox:nn| are the number of row and the
% number of column of the cell to slash. The two other are the elements to draw
% below and above the diagonal line.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_actually_slashbox:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \@@_actually_diagbox:nnnn #1 #2 #3 #4
{
\pgfpicture
\pgf@relevantforpicturesizefalse
@@ -9571,10 +10283,12 @@ version 2005/12/01 or later.
\pgfset { inner~sep = 1 pt }
\pgfscope
\pgftransformshift { \pgfpoint \l_tmpb_dim \l_tmpc_dim }
- \pgfnode { rectangle } { south~west } { $ #3 $ } { } { }
+ \pgfnode { rectangle } { south~west }
+ { \@@_math_toggle_token: #3 \@@_math_toggle_token: } { } { }
\endpgfscope
\pgftransformshift { \pgfpoint \l_tmpd_dim \l_tmpa_dim }
- \pgfnode { rectangle } { north~east } { $ #4 $ } { } { }
+ \pgfnode { rectangle } { north~east }
+ { \@@_math_toggle_token: #4 \@@_math_toggle_token: } { } { }
\endpgfpicture
}
% \end{macrocode}
@@ -9621,21 +10335,12 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+%
%
% \bigskip
-% \subsection*{We process the options}
+% \subsection*{We process the options at package loading}
%
%
-% \begin{macrocode}
-\@@_msg_new:nn { obsolete~environments }
- {
- The~obsolete~environments~(eg.~{pNiceArrayC})~have~been~deleted~
- from~the~package~nicematrix.\\
- However,~if~you~still~want~to~use~them,~you~will~find~the~code~for~
- those~environments~at~the~end~of~the~file~'nicematrix.sty',~after~
- a~command~'\token_to_str:N\file_input_stop:'.
- }
-% \end{macrocode}
%
% We process the options when the package is loaded (with |\usepackage|) but we
% recommend to use |\NiceMatrixOptions| instead.
@@ -9655,11 +10360,6 @@ version 2005/12/01 or later.
renew-matrix .value_forbidden:n = true ,
transparent .meta:n = { renew-dots , renew-matrix } ,
transparent .value_forbidden:n = true,
- obsolete-environments .code:n = \@@_fatal:n { obsolete~environments },
- starred-commands .code:n =
- \@@_msg_redirect_name:nn { starred~commands } { none } ,
- starred-commands .value_forbidden:n = true ,
-
}
\ProcessKeysOptions { NiceMatrix / Package }
% \end{macrocode}
@@ -9798,6 +10498,7 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+%
% \begin{macrocode}
\@@_msg_new:nn { option~S~without~siunitx }
{
@@ -9841,16 +10542,14 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
-% \begin{macrocode}
-\@@_msg_new:nn { starred~commands }
+% \begin{macrocode}
+\@@_msg_new:nn { standard-cline~in~document }
{
- The~starred~versions~of~\token_to_str:N \Cdots,~\token_to_str:N \Ldots,~
- \token_to_str:N \Vdots,~\token_to_str:N\Ddots\ and~\token_to_str:N\Iddots\
- are~deprecated.~However,~you~can~go~on~for~this~time.~If~you~don't~want~to~
- see~this~error~we~should~load~'nicematrix'~with~the~option~
- 'starred-commands'.
+ The~key~'standard-cline'~is~available~only~in~the~preamble.\\
+ If~you~go~on~this~command~will~be~ignored.
}
% \end{macrocode}
+%
%
% \begin{macrocode}
\@@_msg_new:nn { bad~value~for~baseline }
@@ -9862,14 +10561,6 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
-%
-% \begin{macrocode}
-\@@_msg_new:nn { Second~Block }
- {
- You~can't~use~\token_to_str:N \Block\ twice~in~the~same~cell~of~the~array.\\
- If~you~go~on,~this~command~(and~the~other)~will~be~ignored.
- }
-% \end{macrocode}
%
% \begin{macrocode}
\@@_msg_new:nn { empty~environment }
@@ -9896,6 +10587,7 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
+%
% \begin{macrocode}
\@@_msg_new:nn { last-col~non~empty~for~NiceMatrixOptions }
{
@@ -9961,7 +10653,7 @@ version 2005/12/01 or later.
The~key~'\tl_use:N\l_keys_key_str'~is~unknown~for~the~command~
\token_to_str:N \NiceMatrixOptions. \\
If~you~go~on,~it~will~be~ignored. \\
- For~a~list~of~the~available~keys,~type~H~<return>.
+ For~a~list~of~the~*principal*~available~keys,~type~H~<return>.
}
{
The~available~options~are~(in~alphabetic~order):~
@@ -9976,7 +10668,6 @@ version 2005/12/01 or later.
create-medium-nodes,~
create-large-nodes,~
end-of-row,~
- exterior-arraycolsep,~
first-col,~
first-row,~
hlines,~
@@ -9987,7 +10678,6 @@ version 2005/12/01 or later.
letter-for-dotted-lines,~
light-syntax,~
nullify-dots,~
- parallelize-diags,~
renew-dots,~
renew-matrix,~
right-margin,~
@@ -10006,7 +10696,7 @@ version 2005/12/01 or later.
The~option~'\tl_use:N\l_keys_key_str'~is~unknown~for~the~environment~
\{NiceArray\}. \\
If~you~go~on,~it~will~be~ignored. \\
- For~a~list~of~the~available~options,~type~H~<return>.
+ For~a~list~of~the~*principal*~available~options,~type~H~<return>.
}
{
The~available~options~are~(in~alphabetic~order):~
@@ -10024,7 +10714,6 @@ version 2005/12/01 or later.
create-extra-nodes,~
create-medium-nodes,~
create-large-nodes,~
- end-of-row,~
extra-left-margin,~
extra-right-margin,~
first-col,~
@@ -10037,9 +10726,10 @@ version 2005/12/01 or later.
light-syntax,~
name,~
nullify-dots,~
- parallelize-diags,~
renew-dots,~
right-margin,~
+ rules/color,~
+ rules/width,~
small,~
t,~
vlines,~
@@ -10059,7 +10749,7 @@ version 2005/12/01 or later.
The~option~'\tl_use:N\l_keys_key_str'~is~unknown~for~the~
\@@_full_name_env:. \\
If~you~go~on,~it~will~be~ignored. \\
- For~a~list~of~the~available~options,~type~H~<return>.
+ For~a~list~of~the~*principal*~available~options,~type~H~<return>.
}
{
The~available~options~are~(in~alphabetic~order):~
@@ -10077,7 +10767,6 @@ version 2005/12/01 or later.
create-extra-nodes,~
create-medium-nodes,~
create-large-nodes,~
- end-of-row,~
extra-left-margin,~
extra-right-margin,~
first-col,~
@@ -10091,10 +10780,11 @@ version 2005/12/01 or later.
light-syntax,~
name,~
nullify-dots,~
- parallelize-diags,~
r~(=R),~
renew-dots,~
right-margin,~
+ rules/color,~
+ rules/width,~
S,~
small,~
t,~
@@ -10111,7 +10801,7 @@ version 2005/12/01 or later.
The~option~'\tl_use:N\l_keys_key_str'~is~unknown~for~the~environment~
\{NiceTabular\}. \\
If~you~go~on,~it~will~be~ignored. \\
- For~a~list~of~the~available~options,~type~H~<return>.
+ For~a~list~of~the~*principal*~available~options,~type~H~<return>.
}
{
The~available~options~are~(in~alphabetic~order):~
@@ -10129,7 +10819,6 @@ version 2005/12/01 or later.
create-extra-nodes,~
create-medium-nodes,~
create-large-nodes,~
- end-of-row,~
extra-left-margin,~
extra-right-margin,~
first-col,~
@@ -10142,9 +10831,10 @@ version 2005/12/01 or later.
light-syntax,~
name,~
nullify-dots,~
- parallelize-diags,~
renew-dots,~
right-margin,~
+ rules/color,~
+ rules/width,~
t,~
vlines,~
xdots/color,~
@@ -10187,97 +10877,6 @@ version 2005/12/01 or later.
}
% \end{macrocode}
%
-%
-% \bigskip
-% \subsection*{Obsolete environments}
-%
-% The following environments are loaded only when the package \pkg{nicematrix}
-% has been loaded with the option |obsolete-environments|. However, they will be
-% completly deleted in a future version.
-%
-% \begin{macrocode}
-\file_input_stop:
-\NewDocumentEnvironment { pNiceArrayC } { }
- {
- \int_zero:N \l_@@_last_col_int
- \pNiceArray
- }
- { \endpNiceArray }
- \NewDocumentEnvironment { bNiceArrayC } { }
- {
- \int_zero:N \l_@@_last_col_int
- \bNiceArray
- }
- { \endbNiceArray }
-\NewDocumentEnvironment { BNiceArrayC } { }
- {
- \int_zero:N \l_@@_last_col_int
- \BNiceArray
- }
- { \endBNiceArray }
-\NewDocumentEnvironment { vNiceArrayC } { }
- {
- \int_zero:N \l_@@_last_col_int
- \vNiceArray
- }
- { \endvNiceArray }
-\NewDocumentEnvironment { VNiceArrayC } { }
- {
- \int_zero:N \l_@@_last_col_int
- \VNiceArray
- }
- { \endVNiceArray }
-\NewDocumentEnvironment { pNiceArrayRC } { }
- {
- \int_zero:N \l_@@_last_col_int
- \int_zero:N \l_@@_first_row_int
- \pNiceArray
- }
- { \endpNiceArray }
-\NewDocumentEnvironment { bNiceArrayRC } { }
- {
- \int_zero:N \l_@@_last_col_int
- \int_zero:N \l_@@_first_row_int
- \bNiceArray
- }
- { \endbNiceArray }
-\NewDocumentEnvironment { BNiceArrayRC } { }
- {
- \int_zero:N \l_@@_last_col_int
- \int_zero:N \l_@@_first_row_int
- \BNiceArray
- }
- { \endBNiceArray }
-\NewDocumentEnvironment { vNiceArrayRC } { }
- {
- \int_zero:N \l_@@_last_col_int
- \int_zero:N \l_@@_first_row_int
- \vNiceArray
- }
- { \endvNiceArray }
-\NewDocumentEnvironment { VNiceArrayRC } { }
- {
- \int_zero:N \l_@@_last_col_int
- \int_zero:N \l_@@_first_row_int
- \VNiceArray
- }
- { \endVNiceArray }
-\NewDocumentEnvironment { NiceArrayCwithDelims } { }
- {
- \int_zero:N \l_@@_last_col_int
- \NiceArrayWithDelims
- }
- { \endNiceArrayWithDelims }
-\NewDocumentEnvironment { NiceArrayRCwithDelims } { }
- {
- \int_zero:N \l_@@_last_col_int
- \int_zero:N \l_@@_first_row_int
- \NiceArrayWithDelims
- }
- { \endNiceArrayWithDelims }
-% \end{macrocode}
-%
-%
%
% \vspace{1cm}
% \section{History}
@@ -10576,6 +11175,14 @@ version 2005/12/01 or later.
%
% Commands to color cells, row and columns with a perfect result in the \textsc{pdf}.
%
+% \subsection*{Changes between versions 4.0 and 4.1}
+%
+% New keys |cell-space-top-limit| and |cell-space-bottom-limit|
+%
+% New command |\diagbox|
+%
+% The key |hvline| don't draw rules in the blocks (commands |\Block|) and in the
+% virtual blocks corresponding to the dotted lines.
%
% \PrintIndex
%
diff --git a/macros/latex/contrib/nicematrix/nicematrix.pdf b/macros/latex/contrib/nicematrix/nicematrix.pdf
index 8f7fb6b647..0004ec61cd 100644
--- a/macros/latex/contrib/nicematrix/nicematrix.pdf
+++ b/macros/latex/contrib/nicematrix/nicematrix.pdf
Binary files differ
diff --git a/macros/latex/contrib/poemscol/poemscol.dtx b/macros/latex/contrib/poemscol/poemscol.dtx
index 5794a2d575..0a360fbd3d 100644
--- a/macros/latex/contrib/poemscol/poemscol.dtx
+++ b/macros/latex/contrib/poemscol/poemscol.dtx
@@ -38,7 +38,7 @@
%</driver>
% \fi
%
-% \CheckSum{9964}
+% \CheckSum{10539}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -243,7 +243,7 @@
% attributions, and so on with the left margin of the verse block.}
% \changes{v3.01}{2019/08/04}{Corrections to manual}
% \changes{v3.04}{2019/08/18}{Appendix sections. New contents entries.}
-% \changes{v3.08}{2019/09/03}{Indentations of species of titles in text can be independenttly changed without changing the
+% \changes{v3.08}{2019/09/03}{Indentations of species of titles in text can be independently changed without changing the
% definition of the title. Appendix and Foreword section titles can be indented differently from notes section titles. }
% \changes{v3.081}{2019/09/05}{Fixed centertitles bug for subsections}
% \changes{v3.09}{2019/09/06}{New schemes for titles. Titles can be placed
@@ -255,7 +255,7 @@
% shortpoemattribution, JHshortepigraph, JHshortdedication. These
% commands are controlled by the same booleans that control placement
% of titles.}
-% \changes{v3.12}{2019/09/05}{Bug fix. Fix command clash with titlesec Manual revision}
+% \changes{v3.12}{2019/09/05}{Bug fix. Fix command clash with titlesec. Manual revision}
% \changes{v3.13}{2019/09/15}{Fixed subtitles in emendations and explanations, Fixed bug in sequencesectiontitlefirstline, changed sequence hierarchy of indentations, subsubsections of sequences no longer appear in contents}
% \changes{v3.14}{2019/09/27}{Bug fix: ifpagenumberinnotesfalse, Manual revision}
% \changes{v3.141}{2019/10/27}{Manual revisions. Fixed spacing of sentence and
@@ -263,6 +263,9 @@
% sections numbered by paragraph and sentence. You can suppress the appearance of the
% first sentence number, whether in the margin or in the running text. You can suppress
% the appearance of the first paragraph number, whether in the margin or in the running text.}
+% \changes{v3.14159}{2020/05/25}{Changed controlling how to place
+% marginal marks in JHpoemtitle and its siblings, and in JHtextnote
+% and its siblings. Marginal marks are now set using their own inserts, rather than using marginpar.}
% \DoNotIndex{\newcommand,\newenvironment,\def,\edef,\else,\renewcommand,\makeatletter,\makeatother}
% \DoNotIndex{\abovedisplayskip,\belowdisplayskip,\abovedisplayshortskip,\belowdisplayshortskip}
% \DoNotIndex{\newcommand, \section, \subsection, \subsubsection,
@@ -295,15 +298,15 @@
% \textsc, \unskip}
% \setcounter{IndexColumns}{2}
% \MakeShortVerb{|}
-% \def\fileversion{3.141}
-% \def\filedate{29 October 2019}
-% \def\docdate{29 October 2019}
+% \def\fileversion{3.1415}
+% \def\filedate{25 May 2020}
+% \def\docdate{25 May 2020}
% \title{Typesetting Poetry Collections with
% \textsf{poemscol}\thanks{This document corresponds to
% \textsf{poemscol}~\fileversion, dated \filedate.}}
% \author{John Burt
% \\ \texttt{burt@brandeis.edu}}
-% \date{29 October 2019}
+% \date{25 May 2020}
% \maketitle
% \begin{abstract} \textsf{poemscol} provides commands for \LaTeX\ for
% setting collections of poetry. It is especially suited for setting
@@ -556,15 +559,6 @@
% the style packages that do. I use \textsf{crop}, with the
% letter,pdftex,cam, and center options.
%
-% \subsection{~Poem titles with marginal references}
-% If
-% you are using the |\JHpoemtitle| alternate form of the |\poemtitle|
-% command, you need to add \textsf{mparhack} to your package list, to
-% make sure that the marginal references |\JHpoemtitle| adds appear on
-% the correct side of the page. You should make sure that
-% \textsf{poemscol} is the very last package you load in your
-% preamble, or at least is loaded after those packages upon which it
-% depends.
%
%
%
@@ -632,6 +626,16 @@
% the meaning of |\ifleftaligntitles| ambiguous. So I have changed that boolean to
% |\iftitlesatleftmarginofcenteredblock.|\end{sloppypar}
%
+% Up to version 3.141 the marginal marks associated with poem titles
+% set by |\JHpoemtitle| and |\margreftextnote| moved in towards the
+% verse block when the verse block is centered on the longest line.
+% These marks could be returned to their normal position in the
+% margin by setting the boolean |\margrefstomargin| to true. As of
+% version 3.141 these marks are set in the margin by default even
+% when verse block centering is in effect. The marks can be made to
+% move towards the verse block when verse block centering is in
+% effect by setting |\margrefstomargin| to false.
+%
% \section{Marking up individual poems}
% First, a word about the command names. The command names may seem
% ugly and long. And there are separate commands for many tasks that
@@ -2757,15 +2761,18 @@
% takes two arguments: first, the title of the poem, second, the label
% used by the |\label| command on the page of the notes section to
% which the title refers. So, you would issue the poem title command
-% this way: |\JHpoemtitle{Los desvelados}{EP_LosDesvelados_AC}|. Up to
+% this way: |\JHpoemtitle{Los desvelados}{EP_LosDesvelados_AC}|.
+%
+% (Up to
% version 2.49 of \textsf{poemscol} you had to be sure to define the
% label in the notes sections by issuing
% |\literaltextnote{\label{EP_LosDesvelados_AC}}|. This is no longer
% necessary, and |\JHpoemtitle| defines both the |\label| and the
-% |\pageref|. Instructions are given in section \ref{JHpoemtitle},
+% |\pageref|.)
+%
+% Instructions are given in section \ref{JHpoemtitle},
% p.~\pageref{JHpoemtitle} for how to construct similar commands for
% sequences, sequence sections, and so on.
-%
% The following related commands are defined already:
% \begin{itemize}
% \item |\JHsequencetitle| \item |\JHsequencefirstsectiontitle|
@@ -2774,20 +2781,11 @@
% \item |\JHpoemsubtitle| \item |\JHepigraph| \item |\JHprosesectiontitle|
% \item |\JHdedication| \end{itemize}
%
-% If you are using |\JHpoemtitle| and its siblings, you need to be
-% sure to add \textsf{mparhack} to your package list. You can prevent
-% the marginal reference from switching sides on alternate pages by issuing
-% |\@mparswitchfalse| (be sure to put |\makeatletter| and
-% |\makeatother| around this command). You can control the side on
-% which the marginal reference appears with |\normalmarginpar| (to
-% place them on the right) or |\reversemarginpar| (to place them on
-% the left). |\JHpoemtitle| and its siblings place the marginal
-% reference using |\marginpar|.
%
% \DescribeMacro{\setmargpoemtitle}
% |\setmargpoemtitle| is a more general version of
% |\JHpoemtitle|, with the second argument being any commands you
-% want to be issued while the title is being processed.
+% want to be issued just after the title is processed.
%
% \DescribeMacro{\margreftextnote}\label{margreftextnote}
% Another feature of Altenberg's Heredia edition is a marginal mark
@@ -2803,24 +2801,46 @@
% |\margreftextnote| generates its own label, so there is no need to
% make up one yourself.
%
-% |\margreftextnote| uses |\marginpar| rather
-% than |\pmclsidepar| to set the note, because I had to use
-% |\marginpar| for |\JHpoemtitle| and its siblings, and I wanted the
-% whole family of markers to be controlled by the same settings. You
-% use the settings that control the behavior of |\marginpar| (e.g.\
-% |\mparswitch| and |\reversemarginpar|) to control the behavior of
-% these marks.
-%
-% By default these marginal references are placed in the right margin. If you
-% are centering the verse block on the longest line, the marginal references
-% will move in closer to the line. (To center the verse block on the longest line,
-% see section \ref{centeringtextblock}.) If you would prefer to keep the marginal
-% references in the margin, set the boolean |\margrefstomargin| true.
+%\begin{sloppy}
+% |\margreftextnote| and its siblings use a
+% new kind of insert, |\JHmarginpar|, to set the marginal marks.
+% This is so that you can control the placement of these marks
+% independently of how you place the line numbers (which use
+% |\pmclsidepar|) or other marginal marks you may define using
+% |\marginpar|. Horizontal placement of the mark is controlled by the
+% length |\JHmarginparsep|, which is set by default to 0 pt. Vertical
+% placement of the marginal mark, relative to the baseline, is set by
+% the length |\JHmarginparvshift|, which is set by default to 0 pt.
+% |\JHpoemtitle|, however, uses the same commands to
+% control the placement of the mark after the title, and the two
+% kinds of mark
+% are designed so that they should always align vertically.
+% \end{sloppy}
+%
+% By default these marginal references are placed in the right
+% margin. If you wish to set them in the left margin, issue the
+% command |\JHmarksleft|. If you wish to place them back into the
+% right margin, issue the command |\JHmarksright|.
+% If you wish the
+% marks to aways be in the outer margin, issue the command
+% |\JHmarksouter|. If you wish the marks to always be in the inner
+% margin, issue |\JHmarksgutter|.
+%
+% If you are centering the verse block on the longest line, the verse
+% line numbers normally move in towards the verse block. (To center
+% the verse block on the longest line, see section
+% \ref{centeringtextblock}.) The marginal
+% marks for |\margeftextnote| do not do this, since they are designed to
+% line up with the marginal mark produced by |\JHpoemtitle|.
%
% \begin{sloppypar}
% If you define a new endnote type using |\definenewnotetype|,
% |\definenewnotetype| will also define a new |\margref| command to go
-% with it.\end{sloppypar}
+% with it. So, for example, if you define a new note type called
+% |\mynote|, you will automatically also define a ``margref'' command
+% called |\margrefmynote| which will place a mark in the margin with
+% a label showing where in the end notes sections the text of that
+% |\mynote| can be found. \end{sloppypar}
%
% \DescribeMacro{\setmargrefmarker} Altenberg's edition used a ding
% from the pifonts collection in the marginal marks made by
@@ -2829,6 +2849,11 @@
% choose another mark using |\setmargrefmarker| (e.g.\
% |\setmargrefmarker{\ding{228}}|).
%
+% \DescribeMacro{\settitlemargrefmarker} Altenberg's edition also used a
+% different marker for marginal marks for the titles of poems from that used
+% for marginal marks made by |\margreftextnote|. By default that marker
+% is |\dag|, but you can change it by using |\settitlemargrefmarker|,
+%
% \DescribeMacro{\margrefemendation} |\margrefemendation| is a
% version of |\margreftextnote| for emendations.
%
@@ -7100,6 +7125,256 @@
% |\setmargpoemtitle| with the second argument passed to |\JHlabel|,
% which actually makes the marginal mark.
% \begin{macrocode}
+\newlength{\JHtextwidth}
+\setlength{\JHtextwidth}{\textwidth}
+\newlength{\JHmarginparsep}
+\setlength{\JHmarginparsep}{0pt}
+\newlength{\JHmarginparvshift}
+\setlength{\JHmarginparvshift}{0pt}
+\newif{\ifJHmarkstoleft}
+\JHmarkstolefttrue
+\newif{\ifJHmarkstoright}
+\JHmarkstorightfalse
+\newif{\ifJHmarkstoouter}
+\JHmarkstoouterfalse
+\newif{\ifJHmarkstogutter}
+\JHmarkstogutterfalse
+\newif{\ifJHmarginparswitch}
+\JHmarginparswitchfalse
+\newif{\ifJHreversemarginpar}
+\JHreversemarginparfalse
+\newcommand{\JHmarksleft}{%
+\JHmarkstolefttrue%
+\JHmarkstorightfalse%
+\JHmarkstoouterfalse%
+\JHmarkstogutterfalse%
+\JHmarginparswitchfalse%
+\JHreversemarginparfalse%
+\reversemarginpar
+}
+\newcommand{\JHmarksright}{%
+\JHmarkstoleftfalse%
+\JHmarkstorighttrue%
+\JHmarkstoouterfalse%
+\JHmarkstogutterfalse%
+\JHmarginparswitchfalse%
+\JHreversemarginparfalse%
+\normalmarginpar
+}
+% JHmarksright is the default
+\JHmarksright
+\newcommand{\JHmarksouter}{%
+\JHmarkstoleftfalse%
+\JHmarkstorightfalse%
+\JHmarkstooutertrue%
+\JHmarkstogutterfalse%
+\JHmarginparswitchtrue%
+\JHreversemarginparfalse%
+\@mparswitchtrue
+}
+\newcommand{\JHmarksgutter}{%
+\JHmarkstoleftfalse%
+\JHmarkstorightfalse%
+\JHmarkstoouterfalse%
+\JHmarkstoguttertrue%
+\JHmarginparswitchtrue%
+\JHreversemarginpartrue%
+\@mparswitchtrue
+\reversemarginpar
+}
+% jhrightmarginpar command for notes % right side
+\newcommand{\JHrightmarginpar}[1]{%
+\pmclbsphack\strut\vadjust{%
+\rlap{\kern-\parindent%
+\kern\JHtextwidth\kern\JHmarginparsep% at right
+\setbox0=\vtop to 0pt{% added
+\begin{minipage}[t]{\marginparwidth}% added
+#1%
+\end{minipage}%
+\vss}%
+\vtop to 0pt{\kern\JHmarginparvshift% default should be 0pt
+\kern-\dp\strutbox \kern-\ht0 \box0 \vss}}}\pmclesphack}%
+% setmargref command %right side only for now
+%\newcommand{\setmargref}{
+%\JHrightmarginpar{\scriptsize {\the\margrefmarker~p.~\pageref{margref\themargrefnumber}}}
+%}
+% jhleftmarginpar command for notes % left side
+\newcommand{\JHleftmarginpar}[1]{%
+\pmclbsphack\strut\vadjust{% changed
+\rlap{\kern-\parindent%
+\kern -\JHmarginparsep \kern -\marginparwidth% at left
+\setbox0=\vtop to 0pt{
+\begin{minipage}[t]{\marginparwidth}% added
+#1%
+\end{minipage}%
+\vss}% changed
+\vtop to 0pt{\kern\JHmarginparvshift % default should be 0pt
+\kern-\dp\strutbox \kern-\ht0 \box0 \vss}}}\pmclesphack}% changed
+%
+%\newcommand{\JHoutermarginpar}{%
+%%\marginpar{\scriptsize {\the\margrefmarker~p.~\pageref{margref\themargrefnumber}}}
+%\checkoddpage%
+%\ifoddpage%
+%\JHrightmarginpar{\scriptsize {\the\margrefmarker~p.~\pageref{margref\themargrefnumber}}}%
+%\else% below is for even pages
+%\JHleftmarginpar{\scriptsize {\the\margrefmarker~p.~\pageref{margref\themargrefnumber}}}%
+%\fi%
+%}
+\newcommand{\JHoutermarginpar}{%
+%\marginpar{\scriptsize {\the\margrefmarker~p.~\pageref{margref\themargrefnumber}}}
+\strictpagechecktrue%
+\checkoddpage%
+\ifoddpage%
+\JHswitchmarginpar{\scriptsize {\the\margrefmarker~p.~\pageref{margref\themargrefnumber}}}%
+\else% below is for even pages
+\JHswitchmarginpar{\scriptsize {\the\margrefmarker~p.~\pageref{margref\themargrefnumber}}}%
+\fi%
+}
+%
+%\newcommand{\JHguttermarginpar}{%
+%%\marginpar{\scriptsize {\the\margrefmarker~p.~\pageref{margref\themargrefnumber}}}
+%\checkoddpage%
+%\ifoddpage%
+% \JHleftmarginpar{\scriptsize {\the\margrefmarker~p.~\pageref{margref\themargrefnumber}}}%
+%\else% below is for even pages
+% \JHrightmarginpar{\scriptsize {\the\margrefmarker~p.~\pageref{margref\themargrefnumber}}}%
+%\fi%
+%}
+%
+\newcommand{\JHguttermarginpar}{%
+\strictpagechecktrue
+\checkoddpage%
+\ifoddpage%
+\JHswitchmarginpar{\scriptsize {\the\margrefmarker~p.~\pageref{margref\themargrefnumber}}}%
+\else% below is for even pages
+\JHswitchmarginpar{\scriptsize {\the\margrefmarker~p.~\pageref{margref\themargrefnumber}}}%
+\fi%
+}
+%
+% jhswitchmarginpar command for notes in gutter and outer
+%
+\newcommand{\JHswitchmarginpar}{\@dblarg{\@JHswitchmarginpar}}
+%\long\def\@pmclsidepar[#1]#2{\@bsphack\leavevmode\vadjust{%
+\long\def\@JHswitchmarginpar[#1]#2{\@bsphack\strut\vadjust{% added
+\checkoddpage
+ \ifJHmarginparswitch
+ \ifJHreversemarginpar
+ \ifoddpage
+ \oddpagefalse
+ \else
+ \oddpagetrue
+ \fi
+ \fi
+ \else
+ \oddpagetrue
+ \ifJHreversemarginpar
+ \oddpagefalse
+ \fi
+ \fi
+ \rlap{\kern-\parindent
+ \if@twocolumn
+ \if@firstcolumn % put at left
+ \kern -\JHmarginparsep \kern -\marginparwidth % at left
+ \else % put at right
+ \kern \columnwidth \kern \JHmarginparsep % at right
+ \fi
+ \else
+ \ifoddpage % put at right
+ \kern \textwidth \kern \JHmarginparsep % at right
+ \else % put at left
+ \kern -\JHmarginparsep \kern -\marginparwidth % at left
+ \fi
+ \fi
+% \vbox to 0pt{%
+% \kern \JHmarginparvshift% % vertical shift to align top text lines
+% \begin{minipage}{\marginparwidth}%
+ \setbox0=\vtop to 0pt{% added
+ \begin{minipage}[t]{\marginparwidth}% added
+ \ifoddpage #2\else #1\fi%
+ \end{minipage}%
+% \vss}}}\@esphack}
+\vss}% added
+ \vtop to 0pt{\kern\JHmarginparvshift % default should be 0pt
+ \kern-\dp\strutbox \kern-\ht0 \box0 \vss}}}\@esphack}% added
+%
+% commands for placing the marginal marks for titles
+% right side
+\newcommand{\JHrighttitlemarginpar}[1]{%
+\pmclbsphack\strut\vadjust{%
+\rlap{\kern-\parindent%
+\kern\JHtextwidth\kern\JHmarginparsep% at right
+\kern-.5\JHtextwidth\kern\marginparsepmin
+\setbox0=\vtop to 0pt{% added
+\begin{minipage}[t]{\marginparwidth}% added
+#1%
+\end{minipage}%
+\vss}%
+\vtop to 0pt{\kern\JHmarginparvshift% default should be 0pt
+\kern-\dp\strutbox \kern-\ht0 \box0 \vss}}}\pmclesphack}%
+%
+% commands for placing the marginal marks for titles
+% left side
+\newcommand{\JHlefttitlemarginpar}[1]{%
+\pmclbsphack\strut\vadjust{% changed
+\rlap{\kern-\parindent%
+\kern -\JHmarginparsep \kern -\marginparwidth% at left
+\kern-.5\JHtextwidth\kern\marginparsepmin
+\setbox0=\vtop to 0pt{
+\begin{minipage}[t]{\marginparwidth}% added
+#1%
+\end{minipage}%
+\vss}% changed
+\vtop to 0pt{\kern\JHmarginparvshift % default should be 0pt
+\kern-\dp\strutbox \kern-\ht0 \box0 \vss}}}\pmclesphack}% changed
+%
+% command for JHmarks in title in outer margin or in gutter
+\newcommand{\JHswitchtitlemarginpar}{\@dblarg{\@JHswitchtitlemarginpar}}
+%\long\def\@pmclsidepar[#1]#2{\@bsphack\leavevmode\vadjust{%
+\long\def\@JHswitchtitlemarginpar[#1]#2{\@bsphack\strut\vadjust{% added
+\checkoddpage
+ \ifJHmarginparswitch
+ \ifJHreversemarginpar
+ \ifoddpage
+ \oddpagefalse
+ \else
+ \oddpagetrue
+ \fi
+ \fi
+ \else
+ \oddpagetrue
+ \ifJHreversemarginpar
+ \oddpagefalse
+ \fi
+ \fi
+ \rlap{\kern-\parindent
+ \if@twocolumn
+ \if@firstcolumn % put at left
+ \kern -\JHmarginparsep \kern -\marginparwidth % at left
+ \kern-.5\JHtextwidth\kern\marginparsepmin
+ \else % put at right
+ \kern \columnwidth \kern \JHmarginparsep % at right
+ \fi
+ \else
+ \ifoddpage % put at right
+ \kern \textwidth \kern \JHmarginparsep % at right
+ \kern-.5\JHtextwidth\kern\marginparsepmin
+ \else % put at left
+ \kern -\JHmarginparsep \kern -\marginparwidth % at left
+ \kern-.5\JHtextwidth\kern\marginparsepmin
+ \fi
+ \fi
+% \vbox to 0pt{%
+% \kern \pmclsideparvshift% % vertical shift to align top text lines
+% \begin{minipage}{\marginparwidth}%
+ \setbox0=\vtop to 0pt{% added
+ \begin{minipage}[t]{\marginparwidth}% added
+ \ifoddpage #2\else #1\fi%
+ \end{minipage}%
+% \vss}}}\@esphack}
+\vss}% added
+ \vtop to 0pt{\kern\JHmarginparvshift % default should be 0pt
+ \kern-\dp\strutbox \kern-\ht0 \box0 \vss}}}\@esphack}% added
+%
\newcommand{\set@margp@emtitle}[7]{\setlength{\titleentryoverrun}{#6}%
{#2}%
{#3 \begin{titleentryenvironment}%
@@ -7144,6 +7419,7 @@
% \newcommand{\JHpoemtitle}[2]{%
% \setmargpoemtitle{#1}{\JHlabel{#2}}%
% }
+\@mparswitchfalse % so the title marker won't switch sides on alternate pages
\newcommand{\JHpoemtitle}[2]{%
\set@margp@emtitle{#1}{\poemtitlepenalty}{\poemtitlefont}%
{\sequencetitleindent}{\nobreak\par\nobreak\afterpoemtitleskip\nobreak}{\z@}%
@@ -7162,8 +7438,23 @@
\t@xtnotesinfo{#1}%
\sources{\label{#2}}%
}
+%\newcommand{\JHlabel}[1]{%
+%\marginpar{{\scriptsize{\the\titlemargrefmarker~p.~\pageref{#1}}}}}
\newcommand{\JHlabel}[1]{%
-\marginpar{{\scriptsize{\the\margrefmarker~p.~\pageref{#1}}}}}
+\ifJHmarkstoright\JHrighttitlemarginpar
+{{\scriptsize{\the\margrefmarker~p.~\pageref{#1}}}}
+\fi
+\ifJHmarkstoleft
+\JHlefttitlemarginpar{{\scriptsize{\the\margrefmarker~p.~\pageref{#1}}}}
+\fi
+\ifJHmarkstoouter
+\JHswitchtitlemarginpar{{\scriptsize{\the\margrefmarker~p.~\pageref{#1}}}}
+\fi
+\ifJHmarkstogutter
+\JHswitchtitlemarginpar{{\scriptsize{\the\margrefmarker~p.~\pageref{#1}}}}
+\fi
+}
+
% \end{macrocode}
% \end{macro}
% \begin{macro}{\JHsequencetitle} Macros to set marginal page
@@ -7265,12 +7556,34 @@
\newtoks{\margrefmarker}
\margrefmarker={\dag}
\newcommand{\setmargrefmarker}[1]{\margrefmarker={#1}}
+\providecommand{\settitlemargrefmarker}[1]{\titlemargrefmarker={#1}}
+\newtoks{\titlemargrefmarker}
+\titlemargrefmarker={\dag}
\newcommand{\makemargreflabel}{\string\label\string{margref\themargrefnumber\string}}
\newif{\ifmargrefstomargin}
-\margrefstomarginfalse
-\newcommand{\setmargref}
-{\marginpar{\ifmargrefstomargin\hspace*{.5\leftmargin}\fi\scriptsize {\the\margrefmarker~p.~\pageref{margref\themargrefnumber}}}
+\margrefstomargintrue
+\newcommand{\setmargref}{\nolinebreak\begin{marginenvironment}%
+\nolinebreak%
+\ifJHmarkstoright%
+ \JHrightmarginpar{\scriptsize {\the\margrefmarker~p.~\pageref{margref\themargrefnumber}}}%
+\fi%
+\ifJHmarkstoleft%
+ \JHleftmarginpar{\scriptsize {\the\margrefmarker~p.~\pageref{margref\themargrefnumber}}}%
+ \fi%
+ \ifJHmarkstoouter%
+ \JHoutermarginpar%
+ \fi%
+ \ifJHmarkstogutter%
+ \JHguttermarginpar%
+ \fi%
+ \end{marginenvironment}%
+ \nolinebreak%
}
+
+%\newcommand{\setmargref}
+%{\marginpar{\ifmargrefstomargin\hspace*{.5\leftmargin}\fi%
+%\scriptsize {\the\margrefmarker~p.~\pageref{margref\themargrefnumber}}}
+%}
% \newcommand{\setmargref}
% {\marginpar{\scriptsize {\the\margrefmarker~p.~\pageref{margref\themargrefnumber}}}
% }
@@ -7419,6 +7732,17 @@
\else\setlength{\dateindent}{\leftmargin}%
\fi%
\bigskip\begin{raggedleft}\hspace{\dateindent}#1\end{raggedleft}\bigskip}%
+%
+\newlength{\poemattributionindent}%
+\setlength{\poemattributionindent}{\leftmargin}%
+\newcommand{\variablepoemattributionindent}{%
+\setlength{\poemattributionindent}{\linewidth}%
+\addtolength{\poemattributionindent}{-\versewidth}%
+\addtolength{\poemattributionindent}{-.5\poemattributionindent}}%
+\newcommand{\poemattribution}[1]{\iflastpoemcentered\variablepoemattributionindent%
+\else\setlength{\poemattributionindent}{\leftmargin}%
+\fi%
+\bigskip\begin{raggedleft}\hspace{\poemattributionindent}#1\end{raggedleft}\bigskip}%
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/macros/latex/contrib/poemscol/poemscol.pdf b/macros/latex/contrib/poemscol/poemscol.pdf
index 8ed00e4557..8d97ec5b82 100644
--- a/macros/latex/contrib/poemscol/poemscol.pdf
+++ b/macros/latex/contrib/poemscol/poemscol.pdf
Binary files differ
diff --git a/macros/latex/required/amscls/README b/macros/latex/required/amscls/README
index 7273ec23ec..9c4528e516 100644
--- a/macros/latex/required/amscls/README
+++ b/macros/latex/required/amscls/README
@@ -1,6 +1,6 @@
-README file for AMS document classes amsart/book/proc 2.20.4 [2017/10/31]
+README file for AMS document classes amsart/book/proc 2.20.5 [2020/05/21]
-Copyright 2004, 2010, 2014-2017 American Mathematical Society.
+Copyright 2004, 2010, 2014-2017, 2020 American Mathematical Society.
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3c
@@ -70,6 +70,9 @@ frozen or changes to the base class are under your control.)
========================================================================
RECENT CHANGES
+---amsclass.dtx 2.20.5 2020/05/21
+Added support for MSC 2020 and made it the default.
+
---amsclass.dtx 2.20.4 2017/10/31
Changed \emailaddrname: replaced "E-mail" by "Email"
diff --git a/macros/latex/required/amscls/amsclass.dtx b/macros/latex/required/amscls/amsclass.dtx
index eb6abaf520..b070629d7a 100644
--- a/macros/latex/required/amscls/amsclass.dtx
+++ b/macros/latex/required/amscls/amsclass.dtx
@@ -1,6 +1,6 @@
% \def\filename{amsclass.dtx}
-% \def\fileversion{2.20.4}
-% \def\filedate{2017/10/31}
+% \def\fileversion{2.20.5}
+% \def\filedate{2020/05/21}
%
% \iffalse meta-comment
%
@@ -15,20 +15,13 @@
% fax: (401) 331-3842
% email: tech-support@ams.org
%
-% Copyright 1995, 1999, 2004, 2009, 2015-2017 American Mathematical Society.
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3c
-% of this license or (at your option) any later version.
-% The latest version of this license is in
-% http://www.latex-project.org/lppl.txt
-% and version 1.3c or later is part of all distributions of LaTeX
-% version 2005/12/01 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is the American Mathematical
-% Society.
+% Copyright 1995, 1999, 2004, 2009, 2015, 2017, 2020 American
+% Mathematical Society.
+%
+% Unlimited copying and redistribution of this file are permitted as
+% long as this file is not modified. Modifications, and distribution
+% of modified versions, are permitted, but only if the resulting file
+% is renamed.
%
% \fi
%
@@ -82,13 +75,13 @@
\NeedsTeXFormat{LaTeX2e}% LaTeX 2.09 can't be used (nor non-LaTeX)
[1995/06/01]% LaTeX date must be June 1995 or later
%<*amsart>
-\ProvidesClass{amsart}[2017/10/31 v2.20.4]
+\ProvidesClass{amsart}[2020/05/21 v2.20.5]
%</amsart>
%<*amsproc>
-\ProvidesClass{amsproc}[2017/10/31 v2.20.4]
+\ProvidesClass{amsproc}[2020/05/21 v2.20.5]
%</amsproc>
%<*amsbook>
-\ProvidesClass{amsbook}[2017/10/31 v2.20.4]
+\ProvidesClass{amsbook}[2020/05/21 v2.20.5]
%</amsbook>
% \end{macrocode}
% For \pkg{amsthm} we need to guard against redundant loading via
@@ -105,7 +98,7 @@
\csname ver@\@currname.\@currext\endcsname
%</classes>
%<*amsthm>
-\ProvidesPackage{amsthm}[2017/10/31 v2.20.4]
+\ProvidesPackage{amsthm}[2020/05/21 v2.20.5]
%</amsthm>
% \end{macrocode}
%
@@ -1496,13 +1489,13 @@
% To allow various versions of the subject classification, accept an
% optional value to identify the version, provide text for the two
% currently in use, and give a warning if the version specified is
-% unknown. Default to 1991 version. [bnb, 1999/04/30]
+% unknown. Default to 2020 version.
% \begin{macrocode}
-\newcommand*\subjclass[2][1991]{%
+\newcommand*\subjclass[2][2020]{%
\def\@subjclass{#2}%
\@ifundefined{subjclassname@#1}{%
\ClassWarning{\@classname}{Unknown edition (#1) of Mathematics
- Subject Classification; using '1991'.}%
+ Subject Classification; using '2020'.}%
}{%
\@xp\let\@xp\subjclassname\csname subjclassname@#1\endcsname
}%
@@ -2018,23 +2011,26 @@
\newcommand{\abstractname}{Abstract}
\newcommand{\keywordsname}{Key words and phrases}
% \end{macrocode}
-% For now, support just the two most recent versions; earlier versions
+% Support the most recent versions. Earlier, unsupported versions
% were:
% \begin{itemize}
% \item \textup{1980} Mathematics Subject Classification
% \item \textup{1980} Mathematics Subject Classification
% \textup{(1985} Revision\textup{)}
% \end{itemize}
-% Default to the 1991 edition, as that's what is in production at the
-% time this change is made. [bnb, 1999/04/30]
% \begin{macrocode}
-\newcommand{\subjclassname}{%
+\@namedef{subjclassname@1991}{%
\textup{1991} Mathematics Subject Classification}
-\@xp\let\csname subjclassname@1991\endcsname \subjclassname
\@namedef{subjclassname@2000}{%
\textup{2000} Mathematics Subject Classification}
\@namedef{subjclassname@2010}{%
\textup{2010} Mathematics Subject Classification}
+\@namedef{subjclassname@2020}{%
+ \textup{2020} Mathematics Subject Classification}
+% \end{macrocode}
+% Default to the 2020 edition.
+% \begin{macrocode}
+\@xp\let\@xp\subjclassname\csname subjclassname@2020\endcsname
% \end{macrocode}
% For the date we have a special little problem: We only want to add
% the `Received by the editors' text for publication-specific
diff --git a/macros/latex/required/amscls/amsclass.ins b/macros/latex/required/amscls/amsclass.ins
index 5f5aa98303..9cebbc4939 100644
--- a/macros/latex/required/amscls/amsclass.ins
+++ b/macros/latex/required/amscls/amsclass.ins
@@ -13,7 +13,7 @@
%% fax: (401) 331-3842
%% email: tech-support@ams.org
%%
-%% Copyright 1999, 2010, 2011, 2014-2017 American Mathematical Society.
+%% Copyright 1999, 2010, 2011, 2014-2020 American Mathematical Society.
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3c
@@ -40,7 +40,8 @@
This is a generated file.
-Copyright 1995, 199, 2004, 2009, 2015, 2017 American Mathematical Society.
+Copyright 1995, 1999, 2004, 2009, 2015, 2017, 2020 American
+Mathematical Society.
American Mathematical Society
Technical Support
@@ -53,20 +54,10 @@ tel: (401) 455-4080
fax: (401) 331-3842
email: tech-support@ams.org
-This work may be distributed and/or modified under the
-conditions of the LaTeX Project Public License, either version 1.3c
-of this license or (at your option) any later version.
-The latest version of this license is in
- http://www.latex-project.org/lppl.txt
-and version 1.3c or later is part of all distributions of LaTeX
-version 2005/12/01 or later.
-
-This work has the LPPL maintenance status `maintained'.
-
-The Current Maintainer of this work is the American Mathematical
-Society.
-
-========================================================================
+Unlimited copying and redistribution of this file are permitted as
+long as this file is not modified. Modifications, and distribution
+of modified versions, are permitted, but only if the resulting file
+is renamed.
\endpreamble
diff --git a/macros/latex/required/amscls/doc/amsclass.pdf b/macros/latex/required/amscls/doc/amsclass.pdf
index 2e484a954e..cc7d0a7856 100644
--- a/macros/latex/required/amscls/doc/amsclass.pdf
+++ b/macros/latex/required/amscls/doc/amsclass.pdf
Binary files differ
diff --git a/macros/latex/required/amscls/doc/diffs-c.txt b/macros/latex/required/amscls/doc/diffs-c.txt
index 61c647df7f..2119589067 100644
--- a/macros/latex/required/amscls/doc/diffs-c.txt
+++ b/macros/latex/required/amscls/doc/diffs-c.txt
@@ -1,6 +1,6 @@
-diffs-c.txt [2017/10/31]
+diffs-c.txt [2020/05/27]
-Copyright 2004, 2010, 2017 American Mathematical Society.
+Copyright 2004, 2010, 2017, 2020 American Mathematical Society.
American Mathematical Society
Technical Support
@@ -32,6 +32,11 @@ History of changes for AMS document classes, the amsthm package, and
other packages distributed in this collection.
========================================================================
+Differences in amsart/amsbook/amsproc 2.20.5 (May 2020)
+
+---Added support for MSC 2020 and made it the default.
+
+========================================================================
Differences in amsart/amsbook/amsproc 2.20.4 (October 2017)
---Text for \emailaddrname changed from "E-mail" to "Email".
diff --git a/macros/luatex/latex/cloze/README b/macros/luatex/latex/cloze/README.md
index 1369553b81..04dc316ef3 100644
--- a/macros/luatex/latex/cloze/README
+++ b/macros/luatex/latex/cloze/README.md
@@ -8,7 +8,7 @@ Es nutzt die Möglichkeiten der modernen TeX-Engine LuaTeX.
# License
-Copyright (C) 2015 by Josef Friedrich <josef@friedrich.rocks>
+Copyright (C) 2015-2020 by Josef Friedrich <josef@friedrich.rocks>
------------------------------------------------------------------------
This work may be distributed and/or modified under the conditions of
the LaTeX Project Public License, either version 1.3 of this license
@@ -46,8 +46,56 @@ Compile:
or manually:
luatex cloze.ins
- lualatex cloze.dtx
+ lualatex --shell-escape cloze.dtx
makeindex -s gglo.ist -o cloze.gls cloze.glo
makeindex -s gind.ist -o cloze.ind cloze.idx
- lualatex cloze.dtx
+ lualatex --shell-escape cloze.dtx
+# Development
+
+First delete the stable version installed by TeX Live. Because the
+package `cloze` belongs to the collection `collection-latexextra`, the
+option `--force` must be used to delete the package.
+
+ tlmgr remove --force cloze
+
+## Deploying a new version
+
+Update the version number in the file `cloze.dtx` on this locations:
+
+### In the markup for the file `cloze.sty` (approximately at the line number 30)
+
+ %<*package>
+ [2020/05/20 v1.4 Package to typeset cloze worksheets or cloze tests]
+ %<*package>
+
+### In the markup for the package documentation (approximately at the line number 1250)
+
+Add a changes entry:
+
+```latex
+\changes{v1.4}{2020/05/20}{...}
+```
+
+### In the markup for the file `cloze.lua` (approximately at the line number 1900)
+
+```lua
+if not modules then modules = { } end modules ['cloze'] = {
+ version = '1.4'
+}
+```
+
+### Update the copyright year:
+
+```
+sed -i 's/(C) 2015-2020/(C) 2015-2021/g' cloze.ins
+sed -i 's/(C) 2015-2020/(C) 2015-2021/g' cloze.dtx
+```
+
+### Command line tasks:
+
+```
+git tag v1.4
+make
+make ctan
+```
diff --git a/macros/luatex/latex/cloze/cloze.dtx b/macros/luatex/latex/cloze/cloze.dtx
index e8d7e3ea17..f2ec1be8c5 100644
--- a/macros/luatex/latex/cloze/cloze.dtx
+++ b/macros/luatex/latex/cloze/cloze.dtx
@@ -28,7 +28,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{cloze}
%<*package>
- [2020/05/20 v1.4 Package to typeset cloze worksheets or cloze tests]
+ [2020/05/27 v1.5 Package to typeset cloze worksheets or cloze tests]
%</package>
%<*driver>
\documentclass{ltxdoc}
@@ -52,6 +52,16 @@
urlcolor=red,
]{hyperref}
+\usepackage{minted}
+\usemintedstyle{colorful}
+\BeforeBeginEnvironment{minted}{\begin{mdframed}[backgroundcolor=gray!3]}
+\AfterEndEnvironment{minted}{\end{mdframed}}
+\setminted{
+ breaklines=true,
+ fontsize=\footnotesize,
+}
+
+
\MakeShortVerb{\|}
\setlength{\fboxrule}{0.2pt}
@@ -357,17 +367,17 @@ Using the option |align| you can make nice tabulars like this:
The macro name |clozenol| stands for \emph{“cloze no line”}. As the
the name suggests this macro typesets cloze texts without a line.
-\begin{verbatim}
+\begin{minted}{latex}
Lorem \clozenol{ipsum dolor} sit amet.
-\end{verbatim}
+\end{minted}
\begin{example}
Lorem \clozenol{ipsum dolor} sit amet.
\end{example}
-\begin{verbatim}
+\begin{minted}{latex}
Lorem \clozenol[textcolor=green]{ipsum dolor} sit amet.
-\end{verbatim}
+\end{minted}
\begin{example}
Lorem \clozenol[textcolor=green]{ipsum dolor} sit amet.
@@ -403,7 +413,7 @@ Ut enim \clozefil{ad minim veniam} exercitation.
The command |\clozeextend| adds some invisible placeholders to extend
some cloze texts with blank space.
-\begin{verbatim}
+\begin{minted}{latex}
\begin{itemize}
\item \clozefil{Lorem ipsum dolor sit amet, consectetur adipisicing
elit, sed do eiusmod tempor incididunt ut labore et dolore magna
@@ -411,7 +421,7 @@ aliqua.}
\item \clozefil{Ut enim ad minim veniam \clozeextend[20]}
\item \clozefil{quis nostrud \clozeextend[20]}
\end{itemize}
-\end{verbatim}
+\end{minted}
\begin{example}
\begin{itemize}
@@ -462,12 +472,12 @@ around the box. Use the options |boxwidth| and |boxheight| to specify
the dimensions of the box. By default the width of the box is
|\linewidth|.
-\begin{verbatim}
+\begin{minted}{latex}
\begin{clozebox}
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua.
\end{clozebox}
-\end{verbatim}
+\end{minted}
\bigskip
\noindent
@@ -499,12 +509,12 @@ tempor incididunt ut labore et dolore magna aliqua.
\label{sec:command-clozebox-boxwidth}
See the documentation about the option \secref{sec:option-boxwidth}.
-\begin{verbatim}
+\begin{minted}{latex}
\begin{clozebox}[boxwidth=5cm]
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua.
\end{clozebox}
-\end{verbatim}
+\end{minted}
\begin{center}
\begin{clozebox}[boxwidth=5cm]
@@ -517,12 +527,12 @@ tempor incididunt ut labore et dolore magna aliqua.
\label{sec:command-clozebox-boxheight}
See the documentation about the option \secref{sec:option-boxheight}.
-\begin{verbatim}
+\begin{minted}{latex}
\begin{clozebox}[boxwidth=5cm,boxheight=5cm]
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua.
\end{clozebox}
-\end{verbatim}
+\end{minted}
\begin{center}
\begin{clozebox}[boxwidth=5cm,boxheight=5cm]
@@ -534,12 +544,12 @@ tempor incididunt ut labore et dolore magna aliqua.
\paragraph{starred}
% starred
-\begin{verbatim}
+\begin{minted}{latex}
\begin{clozebox}*[boxwidth=5cm,boxheight=5cm]
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua.
\end{clozebox}
-\end{verbatim}
+\end{minted}
\begin{center}
\begin{clozebox}*[boxwidth=5cm,boxheight=5cm]
@@ -558,7 +568,7 @@ tempor incididunt ut labore et dolore magna aliqua.
\DescribeEnv{clozespace} |\begin{clozespace}|\oarg{options} \dots
\textit{some text} \dots |\end{clozespace}|
-\begin{verbatim}
+\begin{minted}{latex}
\begin{clozespace}[spacing=2]
\clozesetfont{\ttfamily\Huge}
Lorem \cloze{ipsum} dolor sit \cloze{amet}, consectetur adipisicing
@@ -567,7 +577,7 @@ aliqua. Ut enim ad minim veniam, quis \cloze{nostrud}
exercitation ullamco \cloze{laboris} nisi ut aliquip ex ea commodo
consequat.
\end{clozespace}
-\end{verbatim}
+\end{minted}
\begin{example}
\begin{clozespace}[spacing=2]
@@ -595,11 +605,11 @@ To create a cloze line of a certain width, use the command
\tt{\getdefaults{width}}. In combination with the other cloze commands
you can create for example an irregular alignment of the cloze text.
-\begin{verbatim}
+\begin{minted}{latex}
Ut enim ad
\clozeline[width=1cm]\cloze{minim}\clozeline[width=3cm]
minim veniam
-\end{verbatim}
+\end{minted}
\begin{example}
Ut enim ad \clozeline[width=1cm]\cloze{minim}\clozeline[width=3cm] minim
@@ -633,17 +643,17 @@ Lorem\clozelinefil
\DescribeMacro{\clozestrike}
\cmd{\clozestrike}\oarg{options}\marg{wrong text}\marg{correct text}
-\begin{verbatim}
+\begin{minted}{latex}
Lorem \clozestrike{ipsum}{dolor} sit amet.
-\end{verbatim}
+\end{minted}
\begin{example}
Lorem \clozestrike{ipsum}{dolor} sit amet.
\end{example}
-\begin{verbatim}
+\begin{minted}{latex}
Lorem \clozestrike[textcolor=red]{ipsum}{dolor} sit amet.
-\end{verbatim}
+\end{minted}
\begin{example}
Lorem \clozestrike[textcolor=red]{ipsum}{dolor} sit amet.
@@ -705,10 +715,10 @@ declaration, the cloze package offers a special command to set
\cmd{\clozeset}\marg{global options}: The command can set \emph{global}
options for each paragraph.
-\begin{verbatim}
+\begin{minted}{latex}
\clozeset{textcolor=red} Lorem \cloze{ipsum} dolor \par
\clozeset{textcolor=green} Lorem \cloze{ipsum} dolor
-\end{verbatim}
+\end{minted}
\begin{example}
\clozeset{textcolor=red} Lorem \cloze{ipsum} dolor \par
@@ -719,10 +729,10 @@ options for each paragraph.
paragraph. As you can see in the example below the last \cmd{\clozeset}
applies the color green for both gaps.
-\begin{verbatim}
+\begin{minted}{latex}
\clozeset{textcolor=red} Lorem \cloze{ipsum} dolor
\clozeset{textcolor=green} Lorem \cloze{ipsum} dolor
-\end{verbatim}
+\end{minted}
\begin{example}
\clozeset{textcolor=red} Lorem \cloze{ipsum} dolor
@@ -742,14 +752,14 @@ applies the color green for both gaps.
\cmd{\clozereset}: The command resets all \emph{global} options to the
default values. It has no effect on the \emph{local} options.
-\begin{verbatim}
+\begin{minted}{latex}
\clozeset{
thickness=3mm,
linecolor=yellow,
textcolor=magenta,
margin=-2pt
}
-\end{verbatim}
+\end{minted}
\clozeset{thickness=3mm,linecolor=yellow,textcolor=magenta,margin=-2pt}
@@ -757,9 +767,9 @@ default values. It has no effect on the \emph{local} options.
Very \cloze{silly} global \cloze{options}.
\end{example}
-\begin{verbatim}
+\begin{minted}{latex}
\clozereset
-\end{verbatim}
+\end{minted}
\clozereset
\begin{example}
@@ -778,9 +788,9 @@ Very \cloze{silly} global \cloze{options}.
\cmd{\clozeshow} and \cmd{\clozehide}: This commands are shortcuts for
\cmd{\clozeset}\marg{show} and \cmd{\clozeset}\marg{hide}.
-\begin{verbatim}
+\begin{minted}{latex}
\clozehide
-\end{verbatim}
+\end{minted}
\clozehide
\begin{example}
@@ -788,9 +798,9 @@ Lorem \cloze{ipsum dolor sit} amet, consectetur \cloze{adipisicing}
elit.
\end{example}
-\begin{verbatim}
+\begin{minted}{latex}
\clozeshow
-\end{verbatim}
+\end{minted}
\clozeshow
\begin{example}
@@ -914,10 +924,10 @@ options -- |hide| and |show| -- the last option "wins".
Values for both color options are color names used by the xcolor
package. To define your own color use the following command:
-\begin{verbatim}
+\begin{minted}{latex}
\definecolor{myclozecolor}{rgb}{0.1,0.4,0.6}
\cloze[textcolor=myclozecolor]{Lorem ipsum}
-\end{verbatim}
+\end{minted}
\definecolor{myclozecolor}{rgb}{0.1,0.4,0.6}
\newcommand{\optioncolor}[2]{%
@@ -941,6 +951,17 @@ package. To define your own color use the following command:
\optioncolor{linecolor}{green}
\end{example}
+\noindent
+And now hide the clozes:
+
+\clozehide
+\begin{example}
+\optioncolor{linecolor}{myclozecolor}
+\optioncolor{linecolor}{red}
+\optioncolor{linecolor}{green}
+\end{example}
+\clozeshow
+
%%
% margin
%%
@@ -1051,18 +1072,72 @@ option is \tt{\getdefaults{width}}.
\subsection{Special application areas}
+This section lists examples that didn’t work in older versions of
+the cloze package and required special treatment to work as expected.
+
+\subsubsection{The math mode}
+
+By default the package uses |\itshape| to format the cloze text. In
+math mode you have to reset the cloze text format by calling
+|\clozesetfont{}|. A known bug ist: You can’t show and hide
+single display math formulas. Only the last |\clozeshow| or |\clozehide|
+takes effect on the whole document. Side note: The usage of the \TeX
+primitive syntax |$$| is not recommended.
+
+\clozesetfont{}
+
+\begin{minted}{latex}
+\clozesetfont{}
+$$1 + 1 = \cloze{2}$$
+\clozesetfont{\itshape}
+\end{minted}
+
+$$1 + 1 = \cloze{2}$$
+
+\noindent
+|\[\]| should be used instead.
+
+\begin{minted}{latex}
+\[123 + 456 = \cloze{579}\]
+\end{minted}
+
+\[123 + 456 = \cloze{579}\]
+
+\begin{minted}{latex}
+\begin{displaymath}
+2^{\cloze{2}} = 4
+\end{displaymath}
+\end{minted}
+
+\begin{displaymath}
+2^{\cloze{2}} = 4
+\end{displaymath}
+
+\noindent
+The inline math mode works too:
+
+\begin{minted}{latex}
+${\sqrt[3]{\cloze{8}}} = 2$ and ${\sqrt[\cloze{3}]{\cloze{8}}} = 2$
+\end{minted}
+
+\begin{center}
+${\sqrt[3]{\cloze{8}}} = 2$ and ${\sqrt[\cloze{3}]{\cloze{8}}} = 2$
+\end{center}
+
+\clozesetfont{\itshape}
+
%%
% tabbing
%%
\subsubsection{The \tt{tabbing} environment}
-\begin{verbatim}
+\begin{minted}{latex}
\begin{tabbing}
col1 \hspace{1cm} \= col2 \hspace{1cm} \= col3 \hspace{1cm} \= col4 \\
\cloze{col1} \> \> \clozefix{col3} \\
\end{tabbing}
-\end{verbatim}
+\end{minted}
\begin{example}
\begin{tabbing}
@@ -1077,13 +1152,13 @@ col1 \hspace{1cm} \= col2 \hspace{1cm} \= col3 \hspace{1cm} \= col4 \\
\subsubsection{The \tt{picture} environment}
-\begin{verbatim}
+\begin{minted}{latex}
\begin{picture}(320,100)
\put(80,25){\cloze{Lorem}}
\put(160,50){\clozefix{ipsum}}
\put(240,75){\clozefil{dolor}}
\end{picture}
-\end{verbatim}
+\end{minted}
\begin{example}
\begin{picture}(320,100)
@@ -1099,13 +1174,13 @@ col1 \hspace{1cm} \= col2 \hspace{1cm} \= col3 \hspace{1cm} \= col4 \\
\subsubsection{The \tt{tabular} environment}
-\begin{verbatim}
+\begin{minted}{latex}
\begin{tabular}{l c}
\cloze{Lorem} & \cloze{ipsum} \\
\clozefix{amet} & \clozefix{consectetur} \\
\cloze{sed} & \cloze{do} \\
\end{tabular}
-\end{verbatim}
+\end{minted}
% No |c| inside because of short verbatim.
@@ -1118,68 +1193,32 @@ col1 \hspace{1cm} \= col2 \hspace{1cm} \= col3 \hspace{1cm} \= col4 \\
\end{tabular}
\end{example}
- \DocInput{cloze.dtx}
- \pagebreak
- \PrintChanges
- \pagebreak
- \PrintIndex
-\end{document}
-%</driver>
-%<*readme>
-# Description
-
-EN: `cloze` is a LuaLaTeX/LaTeX package to generate cloze. It uses the
-capabilities of the modern TeX engine LuaTex.
-
-DE: `cloze` ist a LuaLaTeX/LaTeX-Paket zum Erstellen von Lückentexten.
-Es nutzt die Möglichkeiten der modernen TeX-Engine LuaTeX.
+\section{Some graphics for better understanding of the node tree}
-# License
+\subsection{Paragraph}
-Copyright (C) 2015 by Josef Friedrich <josef@friedrich.rocks>
-------------------------------------------------------------------------
-This work may be distributed and/or modified under the conditions of
-the LaTeX Project Public License, either version 1.3 of this license
-or (at your option) any later version. The latest version of this
-license is in:
+\noindent\includegraphics[width=\linewidth]{graphics/par}
- http://www.latex-project.org/lppl.txt
+\subsection{Tabular environment}
-and version 1.3 or later is part of all distributions of LaTeX
-version 2005/12/01 or later.
+\noindent\includegraphics[width=\linewidth]{graphics/tabular}
-# CTAN
+\subsection{Picture environment}
-Since July 2015 the cloze package is included in the Comprehensive TeX
-Archive Network (CTAN).
+\noindent\includegraphics[width=\linewidth]{graphics/picture}
-* TeX archive: http://mirror.ctan.org/tex-archive/macros/luatex/latex/cloze
-* Package page: https://www.ctan.org/pkg/cloze
+\DocInput{cloze.dtx}
-# Repository
+\subsection{The file cloze.lua}
-https://github.com/Josef-Friedrich/cloze
+\inputminted{lua}{cloze.lua}
-# Installation
-
-Get source:
-
- git clone git@github.com:Josef-Friedrich/cloze.git
- cd cloze
-
-Compile:
-
- make
-
-or manually:
-
- luatex cloze.ins
- lualatex cloze.dtx
- makeindex -s gglo.ist -o cloze.gls cloze.glo
- makeindex -s gind.ist -o cloze.ind cloze.idx
- lualatex cloze.dtx
-
-%</readme>
+\pagebreak
+\PrintChanges
+\pagebreak
+\PrintIndex
+\end{document}
+%</driver>
% \fi
%
% \CheckSum{0}
@@ -1202,17 +1241,34 @@ or manually:
%
%
% \changes{v0.1}{2015/06/16}{Converted to DTX file}
+%
% \changes{v1.0}{2015/07/08}{Inital release}
+%
% \changes{v1.1}{2016/06/13}{Make cloze compatible to LuaTeX version
% 0.95}
+%
% \changes{v1.2}{2016/06/23}{The cloze makros are now working in
% tabular, tabbing and picture environments}
+%
% \changes{v1.3}{2017/03/13}{Add the new macros \cmd{\clozenol} and
% \cmd{\clozeextend} and the environments \texttt{clozebox} and
% \texttt{clozespace} (This version was not published on CTAN.)}
+%
% \changes{v1.4}{2020/05/20}{Add the new macro \cmd{\clozestrike} and
% improve the documentation}
%
+% \changes{v1.5}{2020/05/27}{
+% The Lua part of the package (cloze.lua) is now being developed in a
+% separate file.
+% The readme file is now a standalone mardown file and not embedded in
+% the dtx file any more.
+% \href{https://github.com/stevedonovan/LDoc}{LDoc} is being used
+% to generate
+% \href{https://josef-friedrich.github.io/cloze}{source code documentation}.
+% This version fixes two bugs (cloze in display math, line color and
+% hide).
+% }
+%
% \DoNotIndex{\newcommand,\newenvironment,\def,\directlua}
%
% \StopEventually{}
@@ -1867,967 +1923,6 @@ or manually:
%
% \iffalse
%</package>
-%<*lua>
-% \fi
-%
-% \makeatletter
-% \c@CodelineNo 0 \relax
-% \makeatother
-%
-% \subsection{The file \tt{cloze.lua}}
-%
-% \setlength{\parindent}{0pt}
-%
-% \paragraph{Initialisation of the function tables}
-%
-% It is good form to provide some background informations about this Lua
-% module.
-% \begin{macrocode}
-if not modules then modules = { } end modules ['cloze'] = {
- version = '1.4',
- comment = 'cloze',
- author = 'Josef Friedrich, R.-M. Huber',
- copyright = 'Josef Friedrich, R.-M. Huber',
- license = 'The LaTeX Project Public License Version 1.3c 2008-05-04'
-}
-% \end{macrocode}
-%
-% |nodex| is a abbreviation for \emph{node eXtended}.
-% \begin{macrocode}
-local nodex = {}
-% \end{macrocode}
-%
-% All values and functions, which are related to the option management,
-% are stored in a table called |registry|.
-%
-% \begin{macrocode}
-local registry = {}
-% \end{macrocode}
-%
-% I didn't know what value I should take as |user_id|. Therefore I took
-% my birthday and transformed it to a large number.
-% \begin{macrocode}
-registry.user_id = 3121978
-registry.storage = {}
-registry.defaults = {
- ['align'] = 'l',
- ['boxheight'] = false,
- ['boxwidth'] = '\\linewidth',
- ['distance'] = '1.5pt',
- ['hide'] = false,
- ['linecolor'] = '0 0 0 rg 0 0 0 RG', -- black
- ['linecolor_name'] = 'black',
- ['margin'] = '3pt',
- ['resetcolor'] = '0 0 0 rg 0 0 0 RG', -- black
- ['resetcolor_name'] = 'black',
- ['show_text'] = true,
- ['show'] = true,
- ['spacing'] = '1.6',
- ['textcolor'] = '0 0 1 rg 0 0 1 RG', -- blue
- ['textcolor_name'] = 'blue', -- blue
- ['thickness'] = '0.4pt',
- ['width'] = '2cm',
-}
-registry.global_options = {}
-registry.local_options = {}
-% \end{macrocode}
-%
-% All those functions are stored in the table |cloze| that are
-% registered as callbacks to the pre and post linebreak filters.
-% \begin{macrocode}
-local cloze = {}
-% \end{macrocode}
-% In the status table are stored state information, which are necessary
-% for the recursive cloze generation.
-% \begin{macrocode}
-cloze.status = {}
-% \end{macrocode}
-%
-% The |base| table contains some basic functions. |base| is the only
-% table of this Lua module that will be exported.
-% \begin{macrocode}
-local base = {}
-base.is_registered = {}
-% \end{macrocode}
-%
-% \subsubsection{Node precessing (nodex)}
-%
-% All functions in this section are stored in a table called |nodex|.
-% |nodex| is a abbreviation for \emph{node eXtended}. The |nodex| table
-% bundles all functions, which extend the built-in |node| library.
-%
-% \paragraph{Color handling (color)}
-%
-% \clozeluafunction{create_colorstack}
-% Create a whatsit node of the subtype |pdf_colorstack|. |data| is a PDF
-% colorstack string like |0 0 0 rg 0 0 0 RG|.
-% \begin{macrocode}
-function nodex.create_colorstack(data)
- if not data then
- data = '0 0 0 rg 0 0 0 RG' -- black
- end
- local whatsit = node.new('whatsit', 'pdf_colorstack')
- whatsit.stack = 0
- whatsit.data = data
- return whatsit
-end
-% \end{macrocode}
-%
-% \clozeluafunction{create_color}
-% |nodex.create_color()| is a wrapper for the function
-% |nodex.create_colorstack()|. It queries the current values of the
-% options |linecolor| and |textcolor|. The argument |option| accepts the
-% strings |line|, |text| and |reset|.
-% \begin{macrocode}
-function nodex.create_color(option)
- local data
- if option == 'line' then
- data = registry.get_value('linecolor')
- elseif option == 'text' then
- data = registry.get_value('textcolor')
- elseif option == 'reset' then
- data = nil
- else
- data = nil
- end
- return nodex.create_colorstack(data)
-end
-% \end{macrocode}
-%
-% \paragraph{Line handling (line)}
-%
-% \clozeluafunction{create_line}
-% Create a rule node, which is used as a line for the cloze texts. The
-% |depth| and the |height| of the rule are calculated form the options
-% |thickness| and |distance|. The argument |width| must have the length
-% unit \emph{scaled points}.
-% \begin{macrocode}
-function nodex.create_line(width)
- local rule = node.new(node.id('rule'))
- local thickness = tex.sp(registry.get_value('thickness'))
- local distance = tex.sp(registry.get_value('distance'))
- rule.depth = distance + thickness
- rule.height = - distance
- rule.width = width
- return rule
-end
-% \end{macrocode}
-%
-% \clozeluafunction{insert_list}
-% Insert a |list| of nodes after or before the |current|. The |head|
-% argument is optional. In some edge cases it is unfortately necessary.
-% if |head| is omitted the |current| node is used. The argument
-% |position| can take the values |'after'| or |'before'|.
-% \begin{macrocode}
-function nodex.insert_list(position, current, list, head)
- if not head then
- head = current
- end
- for i, insert in ipairs(list) do
- if position == 'after' then
- head, current = node.insert_after(head, current, insert)
- elseif position == 'before' then
- head, current = node.insert_before(head, current, insert)
- end
- end
- return current
-end
-% \end{macrocode}
-%
-% \clozeluafunction{insert_line}
-% Enclose a rule node (cloze line) with two PDF colorstack whatsits. The
-% first colorstack node dyes the line, the seccond resets the color.
-%
-% \subparagraph*{Node list:}
-%
-% \begin{nodelist}
-% |n.color_line| & |whatsit| & |pdf_colorstack| & Line color \\
-% |n.line| & |rule| & & |width| \\
-% |n.color_reset| & |whatsit| & |pdf_colorstack| & Reset color \\
-% \end{nodelist}
-%
-% \begin{macrocode}
-function nodex.insert_line(current, width)
- return nodex.insert_list(
- 'after',
- current,
- {
- nodex.create_color('line'),
- nodex.create_line(width),
- nodex.create_color('reset')
- }
- )
-end
-% \end{macrocode}
-%
-% \clozeluafunction{write_line}
-% This function enclozes a rule node with color nodes as it the function
-% |nodex.insert_line| does. In contrast to |nodex.insert_line| the three
-% nodes are appended to \TeX’s ‘current list’. They are not inserted in
-% a node list, which is accessed by a Lua callback.
-%
-% \subparagraph*{Node list:}
-%
-% \begin{nodelist}
-% - & |whatsit| & |pdf_colorstack| & Line color \\
-% - & |rule| & & |width| \\
-% - & |whatsit| & |pdf_colorstack| & Reset color \\
-% \end{nodelist}
-%
-% \begin{macrocode}
-function nodex.write_line()
- node.write(nodex.create_color('line'))
- node.write(nodex.create_line(tex.sp(registry.get_value('width'))))
- node.write(nodex.create_color('reset'))
-end
-% \end{macrocode}
-%
-% \paragraph{Handling of extendable lines (linefil)}
-%
-% \clozeluafunction{create_linefil}
-% This function creates a line which stretchs indefinitely in the
-% horizontal direction.
-% \begin{macrocode}
-function nodex.create_linefil()
- local glue = node.new('glue')
- glue.subtype = 100
- glue.stretch = 65536
- glue.stretch_order = 3
- local rule = nodex.create_line(0)
- rule.dir = 'TLT'
- glue.leader = rule
- return glue
-end
-% \end{macrocode}
-%
-% \clozeluafunction{write_linefil}
-% The function |nodex.write_linefil| surrounds a indefinitely strechable
-% line with color whatsits and puts it to \TeX’s ‘current (node) list’.
-% \begin{macrocode}
-function nodex.write_linefil()
- node.write(nodex.create_color('line'))
- node.write(nodex.create_linefil())
- node.write(nodex.create_color('reset'))
-end
-% \end{macrocode}
-%
-% \paragraph{Kern handling (kern)}
-%
-% \clozeluafunction{create_kern}
-% This function creates a kern node with a given width. The argument
-% |width| had to be specified in scaled points.
-% \begin{macrocode}
-function nodex.create_kern(width)
- local kern = node.new(node.id('kern'))
- kern.kern = width
- return kern
-end
-% \end{macrocode}
-%
-% \clozeluafunction{strut_to_hlist}
-% To make life easier: We add at the beginning of each hlist a strut.
-% Now we can add line, color etc. nodes after the first node of a hlist
-% not before - after is much more easier.
-% \begin{macrocode}
-function nodex.strut_to_hlist(hlist)
- local n = {} -- node
- n.head = hlist.head
- n.kern = nodex.create_kern(0)
- n.strut = node.insert_before(n.head, n.head, n.kern)
- hlist.head = n.head.prev
- return hlist, n.strut, n.head
-end
-% \end{macrocode}
-%
-% \clozeluafunction{write_margin}
-% Write kern nodes to the current node list. This kern nodes can be used
-% to build a margin.
-% \begin{macrocode}
-function nodex.write_margin()
- local kern = nodex.create_kern(tex.sp(registry.get_value('margin')))
- node.write(kern)
-end
-% \end{macrocode}
-%
-% \clozeluafunction{search_hlist}
-% Search for a |hlist| (subtype |line|). Return false, if no |hlist| can
-% be found.
-% \begin{macrocode}
-function nodex.search_hlist(head)
- while head do
- if head.id == node.id('hlist') and head.subtype == 1 then
- return nodex.strut_to_hlist(head)
- end
- head = head.next
- end
- return false
-end
-% \end{macrocode}
-%
-% \subsubsection{Option handling (registry)}
-%
-% The table |registry| bundels functions that deal with option handling.
-%
-% \paragraph{Marker processing (marker)}
-%
-% A marker is a whatsit node of the subtype |user_defined|. A marker has
-% two purposes:
-%
-% \begin{enumerate}
-% \item Mark the begin and the end of a gap.
-% \item Store a index number, that points to a Lua table, which holds
-% some additional data like the local options.
-% \end{enumerate}
-%
-% \clozeluafunction{create_marker}
-% We create a user defined whatsit node that can store a number (type =
-% 100). In order to distinguish this node from other user defined
-% whatsit nodes we set the |user_id| to a large number. We call this
-% whatsit node a marker. The argument |index| is a number, which is
-% associated to values in the |registry.storage| table.
-% \begin{macrocode}
-function registry.create_marker(index)
- local marker = node.new('whatsit','user_defined')
- marker.type = 100 -- number
- marker.user_id = registry.user_id
- marker.value = index
- return marker
-end
-% \end{macrocode}
-%
-% \clozeluafunction{write_marker}
-% Write a marker node to \TeX's current node list. The argument |mode|
-% accepts the string values |basic|, |fix| and |par|. The argument
-% |position|. The argument |position| is either set to |start| or to
-% |stop|.
-% \begin{macrocode}
-function registry.write_marker(mode, position)
- local index = registry.set_storage(mode, position)
- local marker = registry.create_marker(index)
- node.write(marker)
-end
-% \end{macrocode}
-%
-% \clozeluafunction{is_marker}
-% This functions checks if the given node |item| is a marker.
-% \begin{macrocode}
-function registry.is_marker(item)
- if item.id == node.id('whatsit')
- and item.subtype == node.subtype('user_defined')
- and item.user_id == registry.user_id then
- return true
- else
- return false
- end
-end
-% \end{macrocode}
-%
-% \clozeluafunction{check_marker}
-% This functions tests, whether the given node |item| is a marker. The
-% argument |item| is a node. The argument |mode| accepts the string
-% values |basic|, |fix| and |par|. The argument |position| is either set
-% to |start| or to |stop|.
-% \begin{macrocode}
-function registry.check_marker(item, mode, position)
- local data = registry.get_marker_data(item)
- if data and data.mode == mode and data.position == position then
- return true
- else
- return false
- end
-end
-% \end{macrocode}
-%
-% \clozeluafunction{get_marker}
-% |registry.get_marker| returns the given marker. The argument |item| is
-% a node. The argument |mode| accepts the string values |basic|, |fix|
-% and |par|. The argument |position| is either set to |start| or to
-% |stop|.
-% \begin{macrocode}
-function registry.get_marker(item, mode, position)
- local out
- if registry.check_marker(item, mode, position) then
- out = item
- else
- out = false
- end
- if out and position == 'start' then
- registry.get_marker_values(item)
- end
- return out
-end
-% \end{macrocode}
-%
-% \clozeluafunction{get_marker_data}
-% |registry.get_marker_data| tests whether the node |item| is a marker.
-% The argument |item| is a node of unspecified type.
-% \begin{macrocode}
-function registry.get_marker_data(item)
- if item.id == node.id('whatsit')
- and item.subtype == node.subtype('user_defined')
- and item.user_id == registry.user_id then
- return registry.get_storage(item.value)
- else
- return false
- end
-end
-% \end{macrocode}
-%
-% \clozeluafunction{get_marker_values}
-% First this function saves the associatied values of a marker to the
-% local options table. Second it returns this values. The argument
-% |marker| is a whatsit node.
-% \begin{macrocode}
-function registry.get_marker_values(marker)
- local data = registry.get_marker_data(marker)
- registry.local_options = data.values
- return data.values
-end
-% \end{macrocode}
-%
-% \clozeluafunction{remove_marker}
-% This function removes a given whatsit marker. It only deletes a node,
-% if a marker is given.
-% \begin{macrocode}
-function registry.remove_marker(marker)
- if registry.is_marker(marker) then node.remove(marker, marker) end
-end
-% \end{macrocode}
-%
-% \paragraph{Storage functions (storage)}
-%
-% \clozeluafunction{get_index}
-% |registry.index| is a counter. The functions |registry.get_index()|
-% increases the counter by one and then returns it.
-% \begin{macrocode}
-function registry.get_index()
- if not registry.index then
- registry.index = 0
- end
- registry.index = registry.index + 1
- return registry.index
-end
-% \end{macrocode}
-%
-% \clozeluafunction{set_storage}
-% |registry.set_storage()| stores the local options in the Lua table
-% |registry.storage|. It returns a numeric index number. This index
-% number is the key, where the local options in the Lua table are
-% stored. The argument |mode| accepts the string values |basic|, |fix|
-% and |par|.
-% \begin{macrocode}
-function registry.set_storage(mode, position)
- local index = registry.get_index()
- local data = {
- ['mode'] = mode,
- ['position'] = position
- }
- data.values = registry.local_options
- registry.storage[index] = data
- return index
-end
-% \end{macrocode}
-%
-% \clozeluafunction{get_storage}
-% The function |registry.get_storage()| retrieves values which belong to
-% a whatsit marker. The argument |index| is a numeric value.
-% \begin{macrocode}
-function registry.get_storage(index)
- return registry.storage[index]
-end
-% \end{macrocode}
-%
-% \paragraph{Option processing (option)}
-%
-% \clozeluafunction{set_option}
-% This function stores a value |value| and his associated key |key|
-% either to the global (|registry.global_options|) or to the local
-% (|registry.local_options|) option table. The global boolean variable
-% |registry.local_options| controls in which table the values are
-% stored.
-% \begin{macrocode}
-function registry.set_option(key, value)
- if value == '' or value == '\\color@ ' then
- return false
- end
- if registry.is_global == true then
- registry.global_options[key] = value
- else
- registry.local_options[key] = value
- end
-end
-% \end{macrocode}
-%
-% \clozeluafunction{set_is_global}
-% |registry.set_is_global()| sets the variable |registry.is_global| to
-% the value |value|. It is intended, that the variable takes boolean
-% values.
-% \begin{macrocode}
-function registry.set_is_global(value)
- registry.is_global = value
-end
-% \end{macrocode}
-%
-% \clozeluafunction{unset_local_options}
-% This function unsets the local options.
-% \begin{macrocode}
-function registry.unset_local_options()
- registry.local_options = {}
-end
-% \end{macrocode}
-%
-% \clozeluafunction{unset_global_options}
-% |registry.unset_global_options| empties the global options storage.
-% \begin{macrocode}
-function registry.unset_global_options()
- registry.global_options = {}
-end
-% \end{macrocode}
-%
-% \clozeluafunction{get_value}
-% Retrieve a value from a given key. First search for the value in the
-% local options, then in the global options. If both option storages are
-% empty, the default value will be returned.
-% \begin{macrocode}
-function registry.get_value(key)
- if registry.has_value(registry.local_options[key]) then
- return registry.local_options[key]
- end
- if registry.has_value(registry.global_options[key]) then
- return registry.global_options[key]
- end
- return registry.defaults[key]
-end
-% \end{macrocode}
-%
-% \clozeluafunction{get_value_show}
-% The function |registry.get_value_show()| returns the boolean value
-% |true| if the option |show| is true. In contrast to the function
-% |registry.get_value()| it converts the string value `true' to a
-% boolean value.
-% \begin{macrocode}
-function registry.get_value_show()
- if
- registry.get_value('show') == true
- or
- registry.get_value('show') == 'true'
- then
- return true
- else
- return false
- end
-end
-% \end{macrocode}
-%
-% \clozeluafunction{has_value}
-% This function tests whether the value |value| is not empty and has a
-% value.
-% \begin{macrocode}
-function registry.has_value(value)
- if value == nil or value == '' or value == '\\color@ ' then
- return false
- else
- return true
- end
-end
-% \end{macrocode}
-%
-% \clozeluafunction{get_defaults}
-% |registry.get_defaults(option)| returns a the default value of the
-% given option.
-% \begin{macrocode}
-function registry.get_defaults(option)
- return registry.defaults[option]
-end
-% \end{macrocode}
-%
-% \subsubsection{Assembly to cloze texts (cloze)}
-%
-% Some graphics for better understanding of the node tree:
-%
-% \paragraph{Paragraph}
-%
-% \noindent\includegraphics[width=\linewidth]{graphics/par}
-%
-% \paragraph{Tabular environment}
-%
-% \noindent\includegraphics[width=\linewidth]{graphics/tabular}
-%
-% \paragraph{Picture environment}
-%
-% \noindent\includegraphics[width=\linewidth]{graphics/picture}
-%
-% \clozeluafunction{basic_make}
-% The function |cloze.basic_make()| makes one gap. The argument |start|
-% is the node, where the gap begins. The argument |stop| is the node,
-% where the gap ends.
-% \begin{macrocode}
-function cloze.basic_make(start, stop)
- local n = {}
- local l = {}
- n.head = start
- if not start or not stop then
- return
- end
- n.start = start
- n.stop = stop
- l.width = node.dimensions(
- cloze.status.hlist.glue_set,
- cloze.status.hlist.glue_sign,
- cloze.status.hlist.glue_order,
- n.start,
- n.stop
- )
- n.line = nodex.insert_line(n.start, l.width)
- n.color_text = nodex.insert_list('after', n.line, {nodex.create_color('text')})
- if registry.get_value_show() then
- nodex.insert_list('after', n.color_text, {nodex.create_kern(-l.width)})
- nodex.insert_list('before', n.stop, {nodex.create_color('reset')}, n.head)
- else
- n.line.next = n.stop.next
- n.stop.prev = n.line.prev
- end
-% \end{macrocode}
-% I some edge cases the lua callbacks get fired up twice. After the
-% cloze has been created, the start and stop whatsit markers can be
-% deleted.
-% \begin{macrocode}
- registry.remove_marker(n.start)
- registry.remove_marker(n.stop)
-end
-% \end{macrocode}
-%
-% \clozeluafunction{basic_search_stop}
-% Search for a stop marker.
-% \begin{macrocode}
-function cloze.basic_search_stop(head)
- local stop
- while head do
- cloze.status.continue = true
- stop = head
- if registry.check_marker(stop, 'basic', 'stop') then
- cloze.status.continue = false
- break
- end
- head = head.next
- end
- return stop
-end
-% \end{macrocode}
-%
-% \clozeluafunction{basic_search_start}
-% Search for a start marker. Also begin a new cloze, if the boolean
-% value |cloze.status.continue| is true. The knowledge of the last
-% hlist node is a requirement to begin a cloze.
-% \begin{macrocode}
-function cloze.basic_search_start(head)
- local start
- local stop
- local n = {}
- if cloze.status.continue then
- n.hlist = nodex.search_hlist(head)
- if n.hlist then
- cloze.status.hlist = n.hlist
- start = cloze.status.hlist.head
- end
- elseif registry.check_marker(head, 'basic', 'start') then
- start = head
- end
- if start then
- stop = cloze.basic_search_stop(start)
- cloze.basic_make(start, stop)
- end
-end
-% \end{macrocode}
-%
-% \clozeluafunction{basic_recursion}
-% Parse recursivley the node tree. Start and stop markers can be nested
-% deeply into the node tree.
-% \begin{macrocode}
-function cloze.basic_recursion(head)
- while head do
- if head.head then
- cloze.status.hlist = head
- cloze.basic_recursion(head.head)
- else
- cloze.basic_search_start(head)
- end
- head = head.next
- end
-end
-% \end{macrocode}
-%
-% \clozeluafunction{basic}
-% The corresponding \LaTeX{} command to this lua function is \cmd{\cloze}
-% \secref{sec:command-cloze}. The argument |head| is the head node of a
-% node list.
-% \begin{macrocode}
-function cloze.basic(head)
- cloze.status.continue = false
- cloze.basic_recursion(head)
- return head
-end
-% \end{macrocode}
-%
-% \clozeluafunction{fix_length}
-% Calculate the length of the whitespace before (|l.kern_start|) and
-% after (|l.kern_stopt|) the text.
-% \begin{macrocode}
-function cloze.fix_length(start, stop)
- local l = {}
- l.width = tex.sp(registry.get_value('width'))
- l.text_width = node.dimensions(start, stop)
- l.align = registry.get_value('align')
- if l.align == 'right' then
- l.kern_start = - l.text_width
- l.kern_stop = 0
- elseif l.align == 'center' then
- l.half = (l.width - l.text_width) / 2
- l.kern_start = - l.half - l.text_width
- l.kern_stop = l.half
- else
- l.kern_start = - l.width
- l.kern_stop = l.width - l.text_width
- end
- return l.width, l.kern_start, l.kern_stop
-end
-% \end{macrocode}
-%
-% \clozeluafunction{fix_make}
-% The function |cloze.fix_make| generates a gap of fixed width.
-%
-% \subparagraph*{Node lists}
-%
-% \subparagraph*{Show text:}
-%
-% \begin{nodelist}
-% |n.start| & |whatsit| & |user_definded| & |index| \\
-% |n.line| & |rule| & & |l.width| \\
-% |n.kern_start| & |kern| & & Depends on |align| \\
-% |n.color_text| & |whatsit| & |pdf_colorstack| & Text color \\
-% & |glyphs| & & Text to show \\
-% |n.color_reset| & |whatsit| & |pdf_colorstack| & Reset color \\
-% |n.kern_stop| & |kern| & & Depends on |align| \\
-% |n.stop| & |whatsit| & |user_definded| & |index| \\
-% \end{nodelist}
-%
-% \subparagraph*{Hide text:}
-%
-% \begin{nodelist}
-% |n.start| & |whatsit| & |user_definded| & |index| \\
-% |n.line| & |rule| & & |l.width| \\
-% |n.stop| & |whatsit| & |user_definded| & |index| \\
-% \end{nodelist}
-%
-% The argument |start| is the node, where the gap begins. The argument
-% |stop| is the node, where the gap ends.
-% \begin{macrocode}
-function cloze.fix_make(start, stop)
- local l = {} -- length
- local n = {} -- node
- l.width, l.kern_start, l.kern_stop = cloze.fix_length(start, stop)
- n.line = nodex.insert_line(start, l.width)
- if registry.get_value_show() then
- nodex.insert_list(
- 'after',
- n.line,
- {
- nodex.create_kern(l.kern_start),
- nodex.create_color('text')
- }
- )
- nodex.insert_list(
- 'before',
- stop,
- {
- nodex.create_color('reset'),
- nodex.create_kern(l.kern_stop)
- },
- start
- )
- else
- n.line.next = stop.next
- end
- registry.remove_marker(start)
- registry.remove_marker(stop)
-end
-% \end{macrocode}
-%
-% \clozeluafunction{fix_recursion}
-% Function to recurse the node list and search after marker. |head| is
-% the head node of a node list.
-% \begin{macrocode}
-function cloze.fix_recursion(head)
- local n = {} -- node
- n.start, n.stop = false
- while head do
- if head.head then
- cloze.fix_recursion(head.head)
- else
- if not n.start then
- n.start = registry.get_marker(head, 'fix', 'start')
- end
- if not n.stop then
- n.stop = registry.get_marker(head, 'fix', 'stop')
- end
- if n.start and n.stop then
- cloze.fix_make(n.start, n.stop)
- n.start, n.stop = false
- end
- end
- head = head.next
- end
-end
-% \end{macrocode}
-%
-% \clozeluafunction{fix}
-% The corresponding \LaTeX{} command to this Lua function is
-% \cmd{\clozefix} \secref{sec:command-clozefix}. The argument |head| is
-% the head node of a node list.
-% \begin{macrocode}
-function cloze.fix(head)
- cloze.fix_recursion(head)
- return head
-end
-% \end{macrocode}
-%
-% \clozeluafunction{par}
-% The corresponding \LaTeX{} environment to this lua function is
-% |clozepar| \secref{sec:command-clozepar}.
-%
-% \subparagraph*{Node lists}
-%
-% \subparagraph*{Show text:}
-%
-% \begin{nodelist}
-% |n.strut| & |kern| & & width = 0 \\
-% |n.line| & |rule| & & |l.width| (Width from hlist) \\
-% |n.kern| & |kern| & & |-l.width| \\
-% |n.color_text| & |whatsit| & |pdf_colorstack| & Text color \\
-% & |glyphs| & & Text to show \\
-% |n.tail| & |glyph| & & Last glyph in hlist \\
-% |n.color_reset| & |whatsit| & |pdf_colorstack| & Reset color \\
-% \end{nodelist}
-%
-% \subparagraph*{Hide text:}
-%
-% \begin{nodelist}
-% |n.strut| & |kern| & & width = 0 \\
-% |n.line| & |rule| & & |l.width| (Width from hlist) \\
-% \end{nodelist}
-%
-% The argument |head| is the head node of a node list.
-% \begin{macrocode}
-function cloze.par(head)
- local l = {} -- length
- local n = {} -- node
- for hlist in node.traverse_id(node.id('hlist'), head) do
- for whatsit in node.traverse_id(node.id('whatsit'), hlist.head) do
- registry.get_marker(whatsit, 'par', 'start')
- end
- l.width = hlist.width
- hlist, n.strut, n.head = nodex.strut_to_hlist(hlist)
- n.line = nodex.insert_line(n.strut, l.width)
- if registry.get_value_show() then
- nodex.insert_list(
- 'after',
- n.line,
- {
- nodex.create_kern(-l.width),
- nodex.create_color('text')
- }
- )
- nodex.insert_list(
- 'after',
- node.tail(head),
- {nodex.create_color('reset')}
- )
- else
- n.line.next = nil
- end
- end
- return head
-end
-% \end{macrocode}
-%
-% \subsubsection{Basic module functions (base)}
-%
-% The |base| table contains functions which are published to the
-% |cloze.sty| file.
-%
-% \clozeluafunction{register}
-% This function registers the functions |cloze.par|, |cloze.basic| and
-% |cloze.fix| the Lua callbacks. |cloze.par| and |cloze.basic| are
-% registered to the callback |post_linebreak_filter| and |cloze.fix| to
-% the callback |pre_linebreak_filter|. The argument |mode| accepts the
-% string values |basic|, |fix| and |par|.
-% \begin{macrocode}
-function base.register(mode)
- local basic
- if mode == 'par' then
- luatexbase.add_to_callback(
- 'post_linebreak_filter',
- cloze.par,
- mode
- )
- return true
- end
- if not base.is_registered[mode] then
- if mode == 'basic' then
- luatexbase.add_to_callback(
- 'post_linebreak_filter',
- cloze.basic,
- mode
- )
- elseif mode == 'fix' then
- luatexbase.add_to_callback(
- 'pre_linebreak_filter',
- cloze.fix,
- mode
- )
- else
- return false
- end
- base.is_registered[mode] = true
- end
-end
-% \end{macrocode}
-%
-% \clozeluafunction{unregister}
-% |base.unregister(mode)| deletes the registered functions from the Lua
-% callbacks. The argument |mode| accepts the string values |basic|,
-% |fix| and |par|.
-% \begin{macrocode}
-function base.unregister(mode)
- if mode == 'basic' then
- luatexbase.remove_from_callback('post_linebreak_filter', mode)
- elseif mode == 'fix' then
- luatexbase.remove_from_callback('pre_linebreak_filter', mode)
- else
- luatexbase.remove_from_callback('post_linebreak_filter', mode)
- end
-end
-% \end{macrocode}
-%
-% Publish some functions to the |cloze.sty| file.
-% \begin{macrocode}
-base.linefil = nodex.write_linefil
-base.line = nodex.write_line
-base.margin = nodex.write_margin
-base.set_option = registry.set_option
-base.set_is_global = registry.set_is_global
-base.unset_local_options = registry.unset_local_options
-base.reset = registry.unset_global_options
-base.get_defaults = registry.get_defaults
-base.get_value = registry.get_value
-base.marker = registry.write_marker
-% \end{macrocode}
-%
-% \begin{macrocode}
-return base
-% \end{macrocode}
-% \iffalse
-%</lua>
% \fi
%
% \Finale
diff --git a/macros/luatex/latex/cloze/cloze.ins b/macros/luatex/latex/cloze/cloze.ins
index 87a4e09d25..75f4839276 100644
--- a/macros/luatex/latex/cloze/cloze.ins
+++ b/macros/luatex/latex/cloze/cloze.ins
@@ -1,4 +1,4 @@
-% Copyright (C) 2015-2016 by Josef Friedrich <josef@friedrich.rocks>
+% Copyright (C) 2015-2020 by Josef Friedrich <josef@friedrich.rocks>
% ----------------------------------------------------------------------
% This work may be distributed and/or modified under the conditions of
% the LaTeX Project Public License, either version 1.3c of this license
@@ -22,7 +22,7 @@
This is a generated file.
-Copyright (C) 2015-2016 by Josef Friedrich <josef@friedrich.rocks>
+Copyright (C) 2015-2020 by Josef Friedrich <josef@friedrich.rocks>
----------------------------------------------------------------------
This work may be distributed and/or modified under the conditions of
the LaTeX Project Public License, either version 1.3c of this license
@@ -38,11 +38,6 @@ version 2008/05/05 or later.
\generate{\file{cloze.sty}{\from{cloze.dtx}{package}}}
-\nopreamble
-\nopostamble
-\generate{\file{cloze.lua}{\from{cloze.dtx}{lua}}}
-\generate{\file{README.md}{\from{cloze.dtx}{readme}}}
-
\obeyspaces
\Msg{*************************************************************}
\Msg{* *}
diff --git a/macros/luatex/latex/cloze/cloze.lua b/macros/luatex/latex/cloze/cloze.lua
new file mode 100644
index 0000000000..b9490354a5
--- /dev/null
+++ b/macros/luatex/latex/cloze/cloze.lua
@@ -0,0 +1,1002 @@
+--- Cloze uses [LDoc](https://github.com/stevedonovan/ldoc) for the
+-- source code documentation. The supported tags are described on in
+-- the [wiki](https://github.com/stevedonovan/LDoc/wiki).
+--
+-- <h3>Naming conventions</h3>
+--
+-- * _Variable_ names for _nodes_ are suffixed with `_node`, for example
+-- `head_node`.
+-- * _Variable_ names for _lengths_ (dimensions) are suffixed with
+-- `_length`, for example `width_length`.
+--
+-- @module cloze
+
+-- __cloze.lua}__
+
+-- __Initialisation of the function tables__
+
+-- It is good form to provide some background informations about this Lua
+-- module.
+if not modules then modules = { } end modules ['cloze'] = {
+ version = '1.5',
+ comment = 'cloze',
+ author = 'Josef Friedrich, R.-M. Huber',
+ copyright = 'Josef Friedrich, R.-M. Huber',
+ license = 'The LaTeX Project Public License Version 1.3c 2008-05-04'
+}
+
+--- `nodex` is a abbreviation for __node eXtended__.
+local nodex = {}
+
+--- All values and functions, which are related to the option management,
+-- are stored in a table called `registry`.
+local registry = {}
+
+--- I didn't know what value I should take as `user_id`. Therefore I
+-- took my birthday and transformed it to a large number.
+registry.user_id = 3121978
+registry.storage = {}
+registry.defaults = {
+ ['align'] = 'l',
+ ['boxheight'] = false,
+ ['boxwidth'] = '\\linewidth',
+ ['distance'] = '1.5pt',
+ ['hide'] = false,
+ ['linecolor'] = '0 0 0 rg 0 0 0 RG', -- black
+ ['linecolor_name'] = 'black',
+ ['margin'] = '3pt',
+ ['resetcolor'] = '0 0 0 rg 0 0 0 RG', -- black
+ ['resetcolor_name'] = 'black',
+ ['show_text'] = true,
+ ['show'] = true,
+ ['spacing'] = '1.6',
+ ['textcolor'] = '0 0 1 rg 0 0 1 RG', -- blue
+ ['textcolor_name'] = 'blue', -- blue
+ ['thickness'] = '0.4pt',
+ ['width'] = '2cm',
+}
+registry.global_options = {}
+registry.local_options = {}
+
+-- All those functions are stored in the table `cloze` that are
+-- registered as callbacks to the pre and post linebreak filters.
+local cloze = {}
+-- In the status table are stored state information, which are necessary
+-- for the recursive cloze generation.
+cloze.status = {}
+
+-- The `base` table contains some basic functions. `base` is the only
+-- table of this Lua module that will be exported.
+local base = {}
+base.is_registered = {}
+
+--- Node precessing (nodex)
+-- @section nodex
+
+-- All functions in this section are stored in a table called `nodex`.
+-- `nodex` is a abbreviation for __node eXtended__. The `nodex` table
+-- bundles all functions, which extend the built-in `node` library.
+
+-- __Color handling (color)__
+
+-- __create_colorstack__
+-- Create a whatsit node of the subtype `pdf_colorstack`. `data` is a PDF
+-- colorstack string like `0 0 0 rg 0 0 0 RG`.
+function nodex.create_colorstack(data)
+ if not data then
+ data = '0 0 0 rg 0 0 0 RG' -- black
+ end
+ local whatsit = node.new('whatsit', 'pdf_colorstack')
+ whatsit.stack = 0
+ whatsit.data = data
+ return whatsit
+end
+
+---
+-- `nodex.create_color()` is a wrapper for the function
+-- `nodex.create_colorstack()`. It queries the current values of the
+-- options `linecolor` and `textcolor`. The argument `option` accepts the
+-- strings `line`, `text` and `reset`.
+function nodex.create_color(option)
+ local data
+ if option == 'line' then
+ data = registry.get_value('linecolor')
+ elseif option == 'text' then
+ data = registry.get_value('textcolor')
+ elseif option == 'reset' then
+ data = nil
+ else
+ data = nil
+ end
+ return nodex.create_colorstack(data)
+end
+
+-- __Line handling (line)__
+
+--- Create a rule node, which is used as a line for the cloze texts. The
+-- `depth` and the `height` of the rule are calculated form the options
+-- `thickness` and `distance`. The argument `width` must have the length
+-- unit __scaled points__.
+function nodex.create_line(width)
+ local rule = node.new(node.id('rule'))
+ local thickness = tex.sp(registry.get_value('thickness'))
+ local distance = tex.sp(registry.get_value('distance'))
+ rule.depth = distance + thickness
+ rule.height = - distance
+ rule.width = width
+ return rule
+end
+
+--- Insert a `list` of nodes after or before the `current`. The `head`
+-- argument is optional. In some edge cases it is unfortately necessary.
+-- if `head` is omitted the `current` node is used. The argument
+-- `position` can take the values `'after'` or `'before'`.
+function nodex.insert_list(position, current, list, head_node)
+ if not head_node then
+ head_node = current
+ end
+ for i, insert in ipairs(list) do
+ if position == 'after' then
+ head_node, current = node.insert_after(head_node, current, insert)
+ elseif position == 'before' then
+ head_node, current = node.insert_before(head_node, current, insert)
+ end
+ end
+ return current
+end
+
+--- Enclose a rule node (cloze line) with two PDF colorstack whatsits.
+-- The first colorstack node dyes the line, the seccond resets the
+-- color.
+--
+-- __Node list__
+--
+-- <table>
+-- <thead>
+-- <tr>
+-- <th>`n.color_line`</th>
+-- <th>`whatsit`</th>
+-- <th>`pdf_colorstack`</th>
+-- <th>Line color</th>
+-- </tr>
+-- </thead>
+-- <tbody>
+-- <tr>
+-- <td>`n.line`</td>
+-- <td>`rule`</td>
+-- <td></td>
+-- <td>`width`</td>
+-- </tr>
+-- <tr>
+-- <td>`n.color_reset`</td>
+-- <td>`whatsit`</td>
+-- <td>`pdf_colorstack`</td>
+-- <td>Reset color</td>
+-- </tr>
+-- </tbody>
+-- </table>
+function nodex.insert_line(current, width)
+ return nodex.insert_list(
+ 'after',
+ current,
+ {
+ nodex.create_color('line'),
+ nodex.create_line(width),
+ nodex.create_color('reset')
+ }
+ )
+end
+
+--- This function enclozes a rule node with color nodes as it the function
+-- `nodex.insert_line` does. In contrast to `nodex.insert_line` the three
+-- nodes are appended to \TeX’s ‘current list’. They are not inserted in
+-- a node list, which is accessed by a Lua callback.
+--
+-- __Node list__
+--
+-- <table>
+-- <thead>
+-- <tr>
+-- <th>-</th>
+-- <th>`whatsit`</th>
+-- <th>`pdf_colorstack`</th>
+-- <th>Line color</th>
+-- </tr>
+-- </thead>
+-- <tbody>
+-- <tr>
+-- <td>-</td>
+-- <td>`rule`</td>
+-- <td></td>
+-- <td>`width`</td>
+-- </tr>
+-- <tr>
+-- <td>-</td>
+-- <td>`whatsit`</td>
+-- <td>`pdf_colorstack`</td>
+-- <td>Reset color</td>
+-- </tr>
+-- </tbody>
+-- </table>
+function nodex.write_line()
+ node.write(nodex.create_color('line'))
+ node.write(nodex.create_line(tex.sp(registry.get_value('width'))))
+ node.write(nodex.create_color('reset'))
+end
+
+-- __Handling of extendable lines (linefil)__
+
+--- This function creates a line which stretchs indefinitely in the
+-- horizontal direction.
+function nodex.create_linefil()
+ local glue = node.new('glue')
+ glue.subtype = 100
+ glue.stretch = 65536
+ glue.stretch_order = 3
+ local rule = nodex.create_line(0)
+ rule.dir = 'TLT'
+ glue.leader = rule
+ return glue
+end
+
+--- The function `nodex.write_linefil` surrounds a indefinitely strechable
+-- line with color whatsits and puts it to \TeX’s ‘current (node) list’.
+function nodex.write_linefil()
+ node.write(nodex.create_color('line'))
+ node.write(nodex.create_linefil())
+ node.write(nodex.create_color('reset'))
+end
+
+-- __Kern handling (kern)__
+
+--- This function creates a kern node with a given width. The argument
+-- `width` had to be specified in scaled points.
+local function create_kern_node(width)
+ local kern_node = node.new(node.id('kern'))
+ kern_node.kern = width
+ return kern_node
+end
+
+--- Add at the beginning of each `hlist` node list a strut (a invisible
+-- character).
+--
+-- Now we can add line, color etc. nodes after the first node of a hlist
+-- not before - after is much more easier.
+--
+-- @tparam node hlist_node
+--
+-- @treturn node hlist_node
+-- @treturn node strut_node
+-- @treturn node head_node
+local function insert_strut_into_hlist(hlist_node)
+ local head_node = hlist_node.head
+ local kern_node = create_kern_node(0)
+ local strut_node = node.insert_before(hlist_node.head, head_node, kern_node)
+ hlist_node.head = head_node.prev
+ return hlist_node, strut_node, head_node
+end
+
+--- Write kern nodes to the current node list. This kern nodes can be used
+-- to build a margin.
+function nodex.write_margin()
+ local kern = create_kern_node(tex.sp(registry.get_value('margin')))
+ node.write(kern)
+end
+
+--- Search for a `hlist` (subtype `line`).
+--
+-- Insert a strut node into the list if a hlist is found.
+--
+-- @tparam node head_node The head of a node list.
+--
+-- @treturn node|false Return false, if no `hlist` can
+-- be found.
+local function search_hlist(head_node)
+ while head_node do
+ if head_node.id == node.id('hlist') and head_node.subtype == 1 then
+ return insert_strut_into_hlist(head_node)
+ end
+ head_node = head_node.next
+ end
+ return false
+end
+
+--- Option handling.
+--
+-- The table `registry` bundels functions that deal with option handling.
+--
+-- <h2>Marker processing (marker)</h2>
+--
+-- A marker is a whatsit node of the subtype `user_defined`. A marker has
+-- two purposes:
+--
+-- * Mark the begin and the end of a gap.
+-- * Store a index number, that points to a Lua table, which holds
+-- some additional data like the local options.
+-- @section registry
+
+--- We create a user defined whatsit node that can store a number (type
+-- = 100).
+--
+-- In order to distinguish this node from other user defined whatsit
+-- nodes we set the `user_id` to a large number. We call this whatsit
+-- node a marker. The argument `index` is a number, which is associated
+-- to values in the `registry.storage` table.
+function registry.create_marker(index)
+ local marker = node.new('whatsit','user_defined')
+ marker.type = 100 -- number
+ marker.user_id = registry.user_id
+ marker.value = index
+ return marker
+end
+
+--- Write a marker node to \TeX's current node list.
+--
+-- The argument `mode` accepts the string values `basic`, `fix` and
+-- `par`. The argument `position`. The argument `position` is either set
+-- to `start` or to `stop`.
+function registry.write_marker(mode, position)
+ local index = registry.set_storage(mode, position)
+ local marker = registry.create_marker(index)
+ node.write(marker)
+end
+
+--- This functions checks if the given node `item` is a marker.
+function registry.is_marker(item)
+ if item.id == node.id('whatsit')
+ and item.subtype == node.subtype('user_defined')
+ and item.user_id == registry.user_id then
+ return true
+ else
+ return false
+ end
+end
+
+--- This functions tests, whether the given node `item` is a marker.
+--
+-- The argument `item` is a node. The argument `mode` accepts the string
+-- values `basic`, `fix` and `par`. The argument `position` is either
+-- set to `start` or to `stop`.
+function registry.check_marker(item, mode, position)
+ local data = registry.get_marker_data(item)
+ if data and data.mode == mode and data.position == position then
+ return true
+ else
+ return false
+ end
+end
+
+--- `registry.get_marker` returns the given marker.
+--
+-- The argument `item` is a node. The argument `mode` accepts the string
+-- values `basic`, `fix` and `par`. The argument `position` is either
+-- set to `start` or to `stop`.
+function registry.get_marker(item, mode, position)
+ local out
+ if registry.check_marker(item, mode, position) then
+ out = item
+ else
+ out = false
+ end
+ if out and position == 'start' then
+ registry.get_marker_values(item)
+ end
+ return out
+end
+
+--- `registry.get_marker_data` tests whether the node `item` is a
+-- marker.
+--
+-- The argument `item` is a node of unspecified type.
+function registry.get_marker_data(item)
+ if item.id == node.id('whatsit')
+ and item.subtype == node.subtype('user_defined')
+ and item.user_id == registry.user_id then
+ return registry.get_storage(item.value)
+ else
+ return false
+ end
+end
+
+--- First this function saves the associatied values of a marker to the
+-- local options table. Second it returns this values. The argument
+-- `marker` is a whatsit node.
+function registry.get_marker_values(marker)
+ local data = registry.get_marker_data(marker)
+ registry.local_options = data.values
+ return data.values
+end
+
+--- This function removes a given whatsit marker.
+--
+-- It only deletes a node, if a marker is given.
+function registry.remove_marker(marker)
+ if registry.is_marker(marker) then node.remove(marker, marker) end
+end
+
+-- __Storage functions (storage)__
+
+--- `registry.index` is a counter. The functions `registry.get_index()`
+-- increases the counter by one and then returns it.
+function registry.get_index()
+ if not registry.index then
+ registry.index = 0
+ end
+ registry.index = registry.index + 1
+ return registry.index
+end
+
+--- `registry.set_storage()` stores the local options in the Lua table
+-- `registry.storage`.
+--
+-- It returns a numeric index number. This index number is the key,
+-- where the local options in the Lua table are stored. The argument
+-- `mode` accepts the string values `basic`, `fix` and `par`.
+function registry.set_storage(mode, position)
+ local index = registry.get_index()
+ local data = {
+ ['mode'] = mode,
+ ['position'] = position
+ }
+ data.values = registry.local_options
+ registry.storage[index] = data
+ return index
+end
+
+--- The function `registry.get_storage()` retrieves values which belong
+-- to a whatsit marker.
+--
+-- The argument `index` is a numeric value.
+function registry.get_storage(index)
+ return registry.storage[index]
+end
+
+-- __Option processing (option)__
+
+--- This function stores a value `value` and his associated key `key`
+-- either to the global (`registry.global_options`) or to the local
+-- (`registry.local_options`) option table.
+--
+-- The global boolean variable `registry.local_options` controls in
+-- which table the values are stored.
+function registry.set_option(key, value)
+ if value == '' or value == '\\color@ ' then
+ return false
+ end
+ if registry.is_global == true then
+ registry.global_options[key] = value
+ else
+ registry.local_options[key] = value
+ end
+end
+
+--- `registry.set_is_global()` sets the variable `registry.is_global` to
+-- the value `value`. It is intended, that the variable takes boolean
+-- values.
+function registry.set_is_global(value)
+ registry.is_global = value
+end
+
+--- This function unsets the local options.
+function registry.unset_local_options()
+ registry.local_options = {}
+end
+
+--- `registry.unset_global_options` empties the global options storage.
+function registry.unset_global_options()
+ registry.global_options = {}
+end
+
+--- Retrieve a value from a given key. First search for the value in the
+-- local options, then in the global options. If both option storages are
+-- empty, the default value will be returned.
+function registry.get_value(key)
+ if registry.has_value(registry.local_options[key]) then
+ return registry.local_options[key]
+ end
+ if registry.has_value(registry.global_options[key]) then
+ return registry.global_options[key]
+ end
+ return registry.defaults[key]
+end
+
+
+--- The function `registry.get_value_show()` returns the boolean value
+-- `true` if the option `show` is true. In contrast to the function
+-- `registry.get_value()` it converts the string value `true' to a
+-- boolean value.
+function registry.get_value_show()
+ if
+ registry.get_value('show') == true
+ or
+ registry.get_value('show') == 'true'
+ then
+ return true
+ else
+ return false
+ end
+end
+
+--- This function tests whether the value `value` is not empty and has a
+-- value.
+function registry.has_value(value)
+ if value == nil or value == '' or value == '\\color@ ' then
+ return false
+ else
+ return true
+ end
+end
+
+--- `registry.get_defaults(option)` returns a the default value of the
+-- given option.
+function registry.get_defaults(option)
+ return registry.defaults[option]
+end
+
+--- Assembly to cloze texts.
+-- @section cloze_functions
+
+--- The function `cloze.basic_make()` makes one gap. The argument `start`
+-- is the node, where the gap begins. The argument `stop` is the node,
+-- where the gap ends.
+function cloze.basic_make(start_node, end_node)
+ local node_head = start_node
+ if not start_node or not end_node then
+ return
+ end
+ local line_width = node.dimensions(
+ cloze.status.hlist.glue_set,
+ cloze.status.hlist.glue_sign,
+ cloze.status.hlist.glue_order,
+ start_node,
+ end_node
+ )
+ local line_node = nodex.insert_line(start_node, line_width)
+ local color_text_node = nodex.insert_list('after', line_node, {nodex.create_color('text')})
+ if registry.get_value_show() then
+ nodex.insert_list('after', color_text_node, {create_kern_node(-line_width)})
+ nodex.insert_list('before', end_node, {nodex.create_color('reset')}, node_head)
+ else
+ line_node.next = end_node.next
+ end_node.prev = line_node -- not line_node.prev -> line color leaks out
+ end
+ -- In some edge cases the lua callbacks get fired up twice. After the
+ -- cloze has been created, the start and stop whatsit markers can be
+ -- deleted.
+ registry.remove_marker(start_node)
+ registry.remove_marker(end_node)
+end
+
+--- Search for a stop marker.
+--
+-- @tparam node head_node The head of a node list.
+--
+-- @treturn node The end node.
+function cloze.basic_search_stop(head_node)
+ local end_node
+ while head_node do
+ cloze.status.continue = true
+ end_node = head_node
+ if registry.check_marker(end_node, 'basic', 'stop') then
+ cloze.status.continue = false
+ break
+ end
+ head_node = head_node.next
+ end
+ return end_node
+end
+
+--- Search for a start marker or begin a new cloze if the value
+-- `cloze.status.continue` is true.
+--
+-- We have to find a hlist node and use its on the field `head`
+-- attached node list to search for a start marker.
+--
+-- @tparam node head_node The head of a node list.
+function cloze.basic_search_start(head_node)
+ local start_node, end_node, hlist_node
+ if cloze.status.continue then
+ hlist_node = search_hlist(head_node)
+ if hlist_node then
+ cloze.status.hlist = hlist_node
+ start_node = hlist_node.head
+ end
+ elseif registry.check_marker(head_node, 'basic', 'start') then
+ start_node = head_node
+ end
+ if start_node then
+ end_node = cloze.basic_search_stop(start_node)
+ cloze.basic_make(start_node, end_node)
+ end
+end
+
+--- Parse the node tree recursivley.
+--
+-- Start and end markers could be nested deeply in the node tree.
+--
+-- @tparam node head_node The head of a node list.
+function cloze.basic_recursion(head_node)
+ while head_node do
+ if head_node.head then
+ cloze.status.hlist = head_node
+ cloze.basic_recursion(head_node.head)
+ else
+ cloze.basic_search_start(head_node)
+ end
+ head_node = head_node.next
+ end
+end
+
+--- The corresponding LaTeX command to this lua function is `\cloze`.
+--
+-- @tparam node head_node The head of a node list.
+--
+-- @treturn node The head of the node list.
+function cloze.basic(head_node)
+ cloze.status.continue = false
+ cloze.basic_recursion(head_node)
+ return head_node
+end
+
+--- Calculate the length of the whitespace before (`l.kern_start`) and
+-- after (`l.kern_stop`) the text.
+function cloze.fix_length(start, stop)
+ local l = {}
+ l.width = tex.sp(registry.get_value('width'))
+ l.text_width = node.dimensions(start, stop)
+ l.align = registry.get_value('align')
+ if l.align == 'right' then
+ l.kern_start = - l.text_width
+ l.kern_stop = 0
+ elseif l.align == 'center' then
+ l.half = (l.width - l.text_width) / 2
+ l.kern_start = - l.half - l.text_width
+ l.kern_stop = l.half
+ else
+ l.kern_start = - l.width
+ l.kern_stop = l.width - l.text_width
+ end
+ return l.width, l.kern_start, l.kern_stop
+end
+
+--- The function `cloze.fix_make` generates a gap of fixed width.
+--
+-- __Node lists__
+--
+-- __Show text:__
+--
+-- <table>
+-- <tbody>
+-- <tr>
+-- <td>`n.start`</td>
+-- <td>`whatsit`</td>
+-- <td>`user_definded`</td>
+-- <td>`index`</td>
+-- </tr>
+-- <tr>
+-- <td>`n.line`</td>
+-- <td>`rule`</td>
+-- <td></td>
+-- <td>`l.width`</td>
+-- </tr>
+-- <tr>
+-- <td>`n.kern_start`</td>
+-- <td>`kern`</td>
+-- <td>&amp; Depends on `align`</td>
+-- <td></td>
+-- </tr>
+-- <tr>
+-- <td>`n.color_text`</td>
+-- <td>`whatsit`</td>
+-- <td>`pdf_colorstack`</td>
+-- <td>Text color</td>
+-- </tr>
+-- <tr>
+-- <td></td>
+-- <td>`glyphs`</td>
+-- <td>&amp; Text to show</td>
+-- <td></td>
+-- </tr>
+-- <tr>
+-- <td>`n.color_reset`</td>
+-- <td>`whatsit`</td>
+-- <td>`pdf_colorstack`</td>
+-- <td>Reset color</td>
+-- </tr>
+-- <tr>
+-- <td>`n.kern_stop`</td>
+-- <td>`kern`</td>
+-- <td>&amp; Depends on `align`</td>
+-- <td></td>
+-- </tr>
+-- <tr>
+-- <td>`n.stop`</td>
+-- <td>`whatsit`</td>
+-- <td>`user_definded`</td>
+-- <td>`index`</td>
+-- </tr>
+-- </tbody>
+-- </table>
+--
+-- __Hide text:__
+--
+-- <table>
+-- <thead>
+-- <tr>
+-- <th>`n.start`</th>
+-- <th>`whatsit`</th>
+-- <th>`user_definded`</th>
+-- <th>`index`</th>
+-- </tr>
+-- </thead>
+-- <tbody>
+-- <tr>
+-- <td>`n.line`</td>
+-- <td>`rule`</td>
+-- <td></td>
+-- <td>`l.width`</td>
+-- </tr>
+-- <tr>
+-- <td>`n.stop`</td>
+-- <td>`whatsit`</td>
+-- <td>`user_definded`</td>
+-- <td>`index`</td>
+-- </tr>
+-- </tbody>
+-- </table>
+--
+-- Make fixed size cloze.
+--
+-- @param start The node, where the gap begins
+-- @param stop The node, where the gap ends
+function cloze.fix_make(start, stop)
+ local l = {} -- length
+ local n = {} -- node
+ l.width, l.kern_start, l.kern_stop = cloze.fix_length(start, stop)
+ n.line = nodex.insert_line(start, l.width)
+ if registry.get_value_show() then
+ nodex.insert_list(
+ 'after',
+ n.line,
+ {
+ create_kern_node(l.kern_start),
+ nodex.create_color('text')
+ }
+ )
+ nodex.insert_list(
+ 'before',
+ stop,
+ {
+ nodex.create_color('reset'),
+ create_kern_node(l.kern_stop)
+ },
+ start
+ )
+ else
+ n.line.next = stop.next
+ end
+ registry.remove_marker(start)
+ registry.remove_marker(stop)
+end
+
+--- Function to recurse the node list and search after marker.
+--
+-- @tparam node head_node The head of a node list.
+function cloze.fix_recursion(head_node)
+ local n = {} -- node
+ n.start, n.stop = false
+ while head_node do
+ if head_node.head then
+ cloze.fix_recursion(head_node.head)
+ else
+ if not n.start then
+ n.start = registry.get_marker(head_node, 'fix', 'start')
+ end
+ if not n.stop then
+ n.stop = registry.get_marker(head_node, 'fix', 'stop')
+ end
+ if n.start and n.stop then
+ cloze.fix_make(n.start, n.stop)
+ n.start, n.stop = false
+ end
+ end
+ head_node = head_node.next
+ end
+end
+
+--- The corresponding LaTeX command to this Lua function is `\clozefix`.
+--
+-- @tparam node head_node The head of a node list.
+function cloze.fix(head_node)
+ cloze.fix_recursion(head_node)
+ return head_node
+end
+
+--- The corresponding LaTeX environment to this lua function is
+-- `clozepar`.
+--
+-- __Node lists__
+--
+-- __Show text:__
+--
+-- <table>
+-- <thead>
+-- <tr>
+-- <th>`n.strut`</th>
+-- <th>`kern`</th>
+-- <th></th>
+-- <th>width = 0</th>
+-- </tr>
+-- </thead>
+-- <tbody>
+-- <tr>
+-- <td>`n.line`</td>
+-- <td>`rule`</td>
+-- <td></td>
+-- <td>`l.width` (Width from hlist)</td>
+-- </tr>
+-- <tr>
+-- <td>`n.kern`</td>
+-- <td>`kern`</td>
+-- <td></td>
+-- <td>`-l.width`</td>
+-- </tr>
+-- <tr>
+-- <td>`n.color_text`</td>
+-- <td>`whatsit`</td>
+-- <td>`pdf_colorstack`</td>
+-- <td>Text color</td>
+-- </tr>
+-- <tr>
+-- <td></td>
+-- <td>`glyphs`</td>
+-- <td></td>
+-- <td>Text to show</td>
+-- </tr>
+-- <tr>
+-- <td>`n.tail`</td>
+-- <td>`glyph`</td>
+-- <td></td>
+-- <td>Last glyph in hlist</td>
+-- </tr>
+-- <tr>
+-- <td>`n.color_reset`</td>
+-- <td>`whatsit`</td>
+-- <td>`pdf_colorstack`</td>
+-- <td>Reset color</td>
+-- </tr>
+-- </tbody>
+-- </table>
+--
+-- __Hide text:__
+--
+-- <table>
+-- <thead>
+-- <tr>
+-- <th>`n.strut`</th>
+-- <th>`kern`</th>
+-- <th></th>
+-- <th>width = 0</th>
+-- </tr>
+-- </thead>
+-- <tbody>
+-- <tr>
+-- <td>`n.line`</td>
+-- <td>`rule`</td>
+-- <td></td>
+-- <td>`l.width` (Width from hlist)</td>
+-- </tr>
+-- </tbody>
+-- </table>
+--
+-- @tparam node head_node The head of a node list.
+function cloze.par(head_node)
+ local l = {} -- length
+ local n = {} -- node
+ for hlist in node.traverse_id(node.id('hlist'), head_node) do
+ for whatsit in node.traverse_id(node.id('whatsit'), hlist.head) do
+ registry.get_marker(whatsit, 'par', 'start')
+ end
+ l.width = hlist.width
+ hlist, n.strut, n.head = insert_strut_into_hlist(hlist)
+ n.line = nodex.insert_line(n.strut, l.width)
+ if registry.get_value_show() then
+ nodex.insert_list(
+ 'after',
+ n.line,
+ {
+ create_kern_node(-l.width),
+ nodex.create_color('text')
+ }
+ )
+ nodex.insert_list(
+ 'after',
+ node.tail(head_node),
+ {nodex.create_color('reset')}
+ )
+ else
+ n.line.next = nil
+ end
+ end
+ return head_node
+end
+
+--- Basic module functions.
+-- The `base` table contains functions which are published to the
+-- `cloze.sty` file.
+-- @section base
+
+--- This function registers the functions `cloze.par`, `cloze.basic` and
+-- `cloze.fix` the Lua callbacks.
+--
+-- `cloze.par` and `cloze.basic` are registered to the callback
+-- `post_linebreak_filter` and `cloze.fix` to the callback
+-- `pre_linebreak_filter`. The argument `mode` accepts the string values
+-- `basic`, `fix` and `par`. A special treatment is needed for clozes in
+-- display math mode. The `post_linebreak_filter` is not called on
+-- display math formulas. I’m not sure if the `pre_output_filter` is the
+-- right choice to capture the display math formulas.
+function base.register(mode)
+ local basic
+ if mode == 'par' then
+ luatexbase.add_to_callback(
+ 'post_linebreak_filter',
+ cloze.par,
+ mode
+ )
+ return true
+ end
+ if not base.is_registered[mode] then
+ if mode == 'basic' then
+ luatexbase.add_to_callback(
+ 'post_linebreak_filter',
+ cloze.basic,
+ mode
+ )
+ luatexbase.add_to_callback(
+ 'pre_output_filter',
+ cloze.basic,
+ mode
+ )
+ elseif mode == 'fix' then
+ luatexbase.add_to_callback(
+ 'pre_linebreak_filter',
+ cloze.fix,
+ mode
+ )
+ else
+ return false
+ end
+ base.is_registered[mode] = true
+ end
+end
+
+--- `base.unregister(mode)` deletes the registered functions from the
+-- Lua callbacks.
+--
+-- @tparam string mode The argument `mode` accepts the string values
+-- `basic`, `fix` and `par`.
+function base.unregister(mode)
+ if mode == 'basic' then
+ luatexbase.remove_from_callback('post_linebreak_filter', mode)
+ luatexbase.remove_from_callback('pre_output_filter', mode)
+ elseif mode == 'fix' then
+ luatexbase.remove_from_callback('pre_linebreak_filter', mode)
+ else
+ luatexbase.remove_from_callback('post_linebreak_filter', mode)
+ end
+end
+
+-- Publish some functions to the `cloze.sty` file.
+base.linefil = nodex.write_linefil
+base.line = nodex.write_line
+base.margin = nodex.write_margin
+base.set_option = registry.set_option
+base.set_is_global = registry.set_is_global
+base.unset_local_options = registry.unset_local_options
+base.reset = registry.unset_global_options
+base.get_defaults = registry.get_defaults
+base.get_value = registry.get_value
+base.marker = registry.write_marker
+
+return base
diff --git a/macros/luatex/latex/cloze/cloze.pdf b/macros/luatex/latex/cloze/cloze.pdf
index 7afedd6a8c..8f9b26bf23 100644
--- a/macros/luatex/latex/cloze/cloze.pdf
+++ b/macros/luatex/latex/cloze/cloze.pdf
Binary files differ
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/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
diff --git a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
index e6ca7796e8..fb67e27c5f 100644
--- a/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
+++ b/systems/texlive/tlnet/tlpkg/installer/ctan-mirrors.pl
@@ -7,7 +7,6 @@ $mirrors = {
'https://mirror.marwan.ma/ctan/' => 1,
},
'South Africa' => {
- 'http://ftp.leg.uct.ac.za/pub/packages/ctan/' => 1,
'http://ftp.sun.ac.za/ftp/CTAN/' => 1,
'http://mirror.ufs.ac.za/ctan/' => 1,
},
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
index bdcc297237..3539727940 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb
@@ -26,11 +26,11 @@ depend container_split_src_files/1
depend frozen/0
depend minrelease/2016
depend release/2020
-depend revision/55291
+depend revision/55306
name 00texlive.image
category TLCore
-revision 55291
+revision 55295
shortdesc TeX Live files only in the source repository
longdesc The files here are not copied by the installer and containers
longdesc are not built for them; they exist only in the source
@@ -2947,6 +2947,7 @@ runfiles size=5014
tlpkg/tlpsrc/pfarrei.tlpsrc
tlpkg/tlpsrc/pgf-blur.tlpsrc
tlpkg/tlpsrc/pgf-cmykshadings.tlpsrc
+ tlpkg/tlpsrc/pgf-pie.tlpsrc
tlpkg/tlpsrc/pgf-soroban.tlpsrc
tlpkg/tlpsrc/pgf-spectra.tlpsrc
tlpkg/tlpsrc/pgf-umlcd.tlpsrc
@@ -4212,7 +4213,7 @@ depend setting_available_architectures:aarch64-linux amd64-freebsd amd64-netbsd
name 00texlive.installer
category TLCore
-revision 55252
+revision 55293
shortdesc TeX Live standalone installer package
longdesc This package defines the files to go into the installer
longdesc archives (install-tl-unx.tar.gz, install-tl.zip) built by the
@@ -8396,7 +8397,7 @@ catalogue-version 0.6
name achemso
category Package
-revision 55045
+revision 55300
shortdesc Support for American Chemical Society journal submissions
relocated 1
longdesc The bundle provides the official macros (achemso.cls) and
@@ -8404,10 +8405,10 @@ longdesc BibTeX styles (achemso.bst and biochem.bst) for submission to
longdesc the journals of the American Chemical Society. The natmove
longdesc package, which moves citations relative to punctuation, is
longdesc distributed as part of the bundle.
-containersize 18624
-containerchecksum 33e4d71de43ab1342222f43739b2b42cc6bf0c23f92d6a95a2c87c875b2aa767d6fa68cac5d1239defd1d8732511633f9d2b7ce1fe238b6980abcb0cda4a5ba0
-doccontainersize 864132
-doccontainerchecksum e1b957362d32dd9e3d03e5b45037bc49dcd0c9dadcd5598ee3a70f98b621c865b2925c9b7be02f271774c61c6aafc1f633b8d170f8f6ccd54e3140b6dd44b57e
+containersize 18608
+containerchecksum 7b6a6b87116cfa6e72dc85cb73173285c511c71b229170770b549a40fe81da718103f129eab7268b1889752e5069724135a6b91afc462d22895a49939a954ff1
+doccontainersize 864040
+doccontainerchecksum 86a162edd0f6cfbda8169fb0b5615698ba5c86fc0ab9c32f9c1df254ead1f051612ecebc73862f5f47ffd8c796c8791f0844b62ef76be1eafa616c3b18a88013
docfiles size=227
RELOC/doc/latex/achemso/CHANGELOG.md
RELOC/doc/latex/achemso/LICENSE.md
@@ -8416,8 +8417,8 @@ docfiles size=227
RELOC/doc/latex/achemso/achemso-demo.pdf details="Example of use"
RELOC/doc/latex/achemso/achemso-demo.tex
RELOC/doc/latex/achemso/achemso.pdf details="Package documentation"
-srccontainersize 31848
-srccontainerchecksum ba3e43ffddeaeecc995bf9bf84cd0fb626703bf4b2bd4c407b4a6882517d98d6a3f251ababde31a290a2c606f284750b83c66abe2971f6f2cface9bfa24dff42
+srccontainersize 31856
+srccontainerchecksum 11add5880620cc26b7ac7fc6df37c7e7f6fef5e5a412b9326dcee093eaa910fa078c41580eb47e56a31e24304d0d0f07fa8e3eb3fa359619911a5ef00b565b0b
srcfiles size=39
RELOC/source/latex/achemso/achemso.dtx
RELOC/source/latex/achemso/achemso.ins
@@ -8490,7 +8491,7 @@ runfiles size=92
catalogue-ctan /macros/latex/contrib/achemso
catalogue-license lppl1.3c
catalogue-topics chemistry journalpub bibtex-sty class
-catalogue-version 3.13
+catalogue-version 3.13a
name acmart
category Package
@@ -16461,7 +16462,7 @@ catalogue-version 2.2x
name amscls
category Package
-revision 46099
+revision 55303
shortdesc AMS document classes for LaTeX
relocated 1
longdesc This bundle contains three AMS classes, amsart (for writing
@@ -16471,11 +16472,11 @@ longdesc material forms one branch of what was originally the AMS-LaTeX
longdesc distribution. The other branch, amsmath, is now maintained and
longdesc distributed separately. The user documentation can be found in
longdesc the package amscls-doc.
-containersize 32232
-containerchecksum 0b69a69452e148113c208d52b8221056378e6f869fa2efb0c52d49980ab574ac21a04d9957a2450a6881514645cd156580ad2a0ff2879e240e217642061afac2
-doccontainersize 1152212
-doccontainerchecksum 8c98528cd59e8da8c017fb49bc9a7cb617261f899770be56d92b1d52be274993b1777923189957f2ff70ef339223be569db586b80db7285cc824f321f258591a
-docfiles size=306
+containersize 32308
+containerchecksum 726ff24bc5c0ec47b71344defb801545119cacbef11c945fbf8f5508709b5a857c69de5ef00fd0a6549f4e0e7c718050e1b49cac7b8a0e3a2eef11f02cea87c5
+doccontainersize 1072256
+doccontainerchecksum 8fb5acab11ff7b359b223248a4a4fc900864a68b7bc5730beb10b176201466a0c447e1cff4fe40ebaca8239ff2539c76a177a29c63b8bf3e3fb9019346b90046
+docfiles size=298
RELOC/doc/latex/amscls/00LICENSE.txt
RELOC/doc/latex/amscls/README details="Readme"
RELOC/doc/latex/amscls/amsart-template.tex
@@ -16490,8 +16491,8 @@ docfiles size=306
RELOC/doc/latex/amscls/manifest.txt
RELOC/doc/latex/amscls/thmtest.pdf
RELOC/doc/latex/amscls/upref.pdf
-srccontainersize 76360
-srccontainerchecksum a6eb2d6fd0a9640ec2ba625e91703403b80564d069bf8b873b40cb38810c30f1d0f7d372b81a194e4022a33393ebc612288d4d833a38db756ef9c344b4cd1726
+srccontainersize 76468
+srccontainerchecksum e7b761cff5d841a7d0c2862dbc025133468305497f0e598c371d7ea9724e642724eebd3f61b3f1b9615c869257184c499e71a8eb9f38cce550d2ec3a40366a0e
srcfiles size=83
RELOC/source/latex/amscls/amsbooka.dtx
RELOC/source/latex/amscls/amsbooka.ins
@@ -16506,7 +16507,7 @@ srcfiles size=83
RELOC/source/latex/amscls/thmtest.tex
RELOC/source/latex/amscls/upref.dtx
RELOC/source/latex/amscls/upref.ins
-runfiles size=79
+runfiles size=77
RELOC/bibtex/bst/amscls/amsalpha.bst
RELOC/bibtex/bst/amscls/amsplain.bst
RELOC/tex/latex/amscls/amsart.cls
@@ -16521,9 +16522,9 @@ runfiles size=79
catalogue-also amslatex amscls-doc
catalogue-contact-home http://www.ams.org/tex/amslatex.html
catalogue-ctan /macros/latex/required/amscls
-catalogue-license lppl1.3c
+catalogue-license lppl1.3
catalogue-topics class maths
-catalogue-version 2.20.4
+catalogue-version 2.20.5
name amscls-doc
category Package
@@ -33333,7 +33334,7 @@ catalogue-version 1.5
name bib2gls
category Package
-revision 54525
+revision 55304
shortdesc Command line application to convert .bib files to glossaries-extra.sty resource files
longdesc This Java command line application may be used to extract
longdesc glossary information stored in a .bib file and convert it into
@@ -33350,10 +33351,10 @@ longdesc convertgls2bib can be used to convert existing .tex files
longdesc containing definitions (\newglossaryentry etc.) to the .bib
longdesc format required by bib2gls.
depend bib2gls.ARCH
-containersize 1186372
-containerchecksum 8ef832fdebd67c19d8a90ff371696479404df2339f13881ace83407a737f03e881705eefa066de9ff9bd2a84638544e2b32dbe91dd63ef537573955ae652096a
-doccontainersize 5143308
-doccontainerchecksum 5b83298933f5d227b4337de009cf15f92e469154a191390bd6066f0ffd97ca206e20c2aa75431703b870c347b47d487fb2375a82f934b201b851e69afd304fb9
+containersize 1186324
+containerchecksum f0ad227d0bb2c53572834f8947166b5bd6076758cfb4f0a0df76903a9dad1967a772c09e7282c36dd7c27610900f4a66a8fb8d958030fce368b17ae5e181cf43
+doccontainersize 5143404
+doccontainerchecksum 24d7e5083ead44d9402eaa03723791956da78672fc107627b0654f4f9cfa747f7dce827b6f8b51372d3fc1c0a57c9a10c5915b992528eaa176837a6532d3d657
docfiles size=1824
texmf-dist/doc/support/bib2gls/CHANGES
texmf-dist/doc/support/bib2gls/README.md details="Readme"
@@ -33427,8 +33428,8 @@ docfiles size=1824
texmf-dist/doc/support/bib2gls/examples/unaryoperators.bib
texmf-dist/doc/support/bib2gls/examples/usergroups.bib
texmf-dist/doc/support/bib2gls/examples/vegetables.bib
-srccontainersize 1181628
-srccontainerchecksum 683fb5e1ce0159351a9637f7cf4356dbea280127086e39966755306097eb2f39fb107e72dda5fa350902ff7ffee59fa45e9ee0e9e82042aef6a9151f1dcc096c
+srccontainersize 1181544
+srccontainerchecksum da02a0d86c9b78b529486de23b1f47af848e0993af5259fdf91f04f5487a0fd8ca82681fdf6c66f7127a88e66ac22fe7991ea792a65deeebe424f01b5a5a829f
srcfiles size=685
texmf-dist/source/support/bib2gls/src/bib2gls-begin.tex
texmf-dist/source/support/bib2gls/src/bib2gls-cite.bib
@@ -33452,7 +33453,7 @@ catalogue-contact-repository https://github.com/nlct/bib2gls
catalogue-ctan /support/bib2gls
catalogue-license gpl3+
catalogue-topics bibtex-util glossary
-catalogue-version 2.3
+catalogue-version 2.4
name bib2gls.aarch64-linux
category Package
@@ -36710,16 +36711,16 @@ catalogue-version 0.0.1
name biblatex-software
category Package
-revision 54950
+revision 55301
shortdesc BibLaTeX stylefiles for software products
relocated 1
longdesc This package implements software entry types for BibLaTeX in
longdesc the form of a bibliography style extension. It requires the
longdesc Biber backend.
-containersize 3116
-containerchecksum 2d83d5b28a3b9c9225f003878aa614d07c2ca3086d00b6a09e792a054fa47e466a8ecddfa4649a56d232daeb400c2fcac758bd134c3249e0b143f7b9f4d84982
-doccontainersize 293992
-doccontainerchecksum 3bf561c354078e73345f254a1875b768bc4a44f9299c53e5860adbf56f4774f5bed97114f9a0eb4ec33c6a77c15ccc186963a39e08859300980bf972acf378fa
+containersize 3220
+containerchecksum 2ffbd937b3656d30aa06b9d03523afad237b78b81f52c92755ea32a1fb05c30061bc12305b770e77f3b14b1423fee1c1ad18dae0219feb91f196be6e7c2c2b80
+doccontainersize 294196
+doccontainerchecksum 89daea1717f37c32d7c023acebc5f88df4cf0c7c026167c39bf7054d7fbd603b55663aee843a821c7c733057233bdf72a4b109cac427c1a5f2fa818baea27a27
docfiles size=87
RELOC/doc/latex/biblatex-software/LICENSE
RELOC/doc/latex/biblatex-software/README.md details="Readme"
@@ -36735,10 +36736,10 @@ docfiles size=87
RELOC/doc/latex/biblatex-software/stublist
RELOC/doc/latex/biblatex-software/swentries.tex
srccontainersize 952
-srccontainerchecksum cb5c5eec1b75aab24bdd16d5c16011d74e17a956b63158bdcc9b2c6f45c45b5f624a8a7e60bcbcc295089ea5da8912bc79eaff61290de3dd8c805a22d18908d3
+srccontainerchecksum 74c32bf413ba48f2dff8887ad83542a7407be127c85c1bea296d2e76edd2f5ac6889a36498f541da0d100d04cb918daf0f66520f597a197caed170a111a20364
srcfiles size=1
RELOC/source/latex/biblatex-software/Makefile
-runfiles size=6
+runfiles size=7
RELOC/tex/latex/biblatex-software/english-software.lbx
RELOC/tex/latex/biblatex-software/french-software.lbx
RELOC/tex/latex/biblatex-software/software-biblatex.sty
@@ -36746,10 +36747,11 @@ runfiles size=6
RELOC/tex/latex/biblatex-software/software.dbx
catalogue-contact-bugs https://gitlab.inria.fr/gt-sw-citation/bibtex-sw-entry/issues
catalogue-contact-home https://gitlab.inria.fr/gt-sw-citation/bibtex-sw-entry
+catalogue-contact-repository https://gitlab.inria.fr/gt-sw-citation/bibtex-sw-entry
catalogue-ctan /macros/latex/contrib/biblatex-contrib/biblatex-software
catalogue-license lppl1.3
catalogue-topics biblatex
-catalogue-version 1.1
+catalogue-version 1.2
name biblatex-source-division
category Package
@@ -56426,35 +56428,37 @@ binfiles arch=x86_64-solaris size=1
name cloze
category Package
-revision 55221
+revision 55296
shortdesc A LuaLaTeX package for creating cloze texts
relocated 1
longdesc This is a LuaLaTeX package for generating cloze texts. The main
longdesc feature of the package is that the formatting doesn't change
-longdesc when using the hide and show options. There are three commands
-longdesc and one environment to generate cloze texts: the commands
-longdesc \cloze, \clozefix, \clozefil, and the environment clozepar.
-containersize 5004
-containerchecksum 580cc07f328682e3ffd7d6853c8965051684afd1d9563f7b2c88c0bbf4271c1e50622d381fbe8d29115f62062a417f05148ac4cedc62f4a6438bb84583cdc25c
-doccontainersize 242292
-doccontainerchecksum 56d6ef0aa5fdf2400efe8caf04d0063adf3a01571d2a3b54e075d9b03d2cb1505639f407fe12fecd4e260df343c3ef37fb9922f902598e62dc6f3e4ce8cd81d2
-docfiles size=65
- RELOC/doc/lualatex/cloze/README details="Readme"
- RELOC/doc/lualatex/cloze/README.md
+longdesc when using the hide and show options. There are the commands
+longdesc \cloze, \clozefix, \clozefil, \clozenol, \clozestrike and the
+longdesc environments clozepar and clozebox to generate cloze texts.
+containersize 8632
+containerchecksum a9b17e0c7ae65f03a826e0919cdac49e14b50e4ccfb2431755ad2bd43e547c47b7164443b66821c40d75a0a6bd00a2a713f30291e44271ba25164a3dc576ccd2
+doccontainersize 303756
+doccontainerchecksum c71532258ad566bcde9560cc6a802e6c7d5325c12a14ba23880f80f938ee12b317572978097d43797475c12c68461f6dedeb597f70e031f275cf4b10802b0219
+docfiles size=79
+ RELOC/doc/lualatex/cloze/README.md details="Readme"
RELOC/doc/lualatex/cloze/cloze.pdf details="Package documentation"
-srccontainersize 17268
-srccontainerchecksum 04bf2a05e83a65c33570eca10a4beb5d9c50378284477f5a9e726ca5facd6df1a9868f45c5d69062a53c9e8ad5fd1b5b67fb5c57fcf69a095c8f20da923158fa
-srcfiles size=20
+srccontainersize 11924
+srccontainerchecksum f1f9c910174ca835f168cf1369f52f304e5568051d331fcda99ccfbdf42374e044782626f62b8bfdf2d57e93a24cd898f1b79fdc6ed28031ce1ffaf9311124c0
+srcfiles size=14
RELOC/source/lualatex/cloze/cloze.dtx
RELOC/source/lualatex/cloze/cloze.ins
-runfiles size=6
+runfiles size=9
RELOC/scripts/cloze/cloze.lua
RELOC/tex/lualatex/cloze/cloze.sty
+catalogue-contact-bugs https://github.com/Josef-Friedrich/cloze/issues
+catalogue-contact-development https://josef.friedrich.rocks
+catalogue-contact-home https://github.com/Josef-Friedrich/cloze
catalogue-contact-repository https://github.com/Josef-Friedrich/cloze
catalogue-ctan /macros/luatex/latex/cloze
catalogue-license lppl1.3
catalogue-topics exam luatex
-catalogue-version 1.4
+catalogue-version 1.5
name clrdblpg
category Package
@@ -66385,7 +66389,7 @@ containerchecksum bd76efc0bdec2bca391cb687a379c53f08beb55bd3ec8d781743296999cb5e
name collection-pictures
category Collection
-revision 55288
+revision 55295
shortdesc Graphics, pictures, diagrams
relocated 1
longdesc Including TikZ, pict, etc., but MetaPost and PStricks are
@@ -66484,6 +66488,7 @@ depend petri-nets
depend pgf
depend pgf-blur
depend pgf-cmykshadings
+depend pgf-pie
depend pgf-soroban
depend pgf-spectra
depend pgf-umlcd
@@ -66587,7 +66592,7 @@ depend visualpstricks
depend xpicture
depend xypic
containersize 1364
-containerchecksum 2a79a7b395d66bc83cc127b28463281a78f748d1d50ab06d67da432f3672272b2f0808bb01cc275c03a9693427765c0ca7ed4dcaffe22ea450441b38b1ce081a
+containerchecksum 471711e35e57dde380f7477813c5bc13edd182c89aff0c4b3a254997c8c2e09d91a6334f5605af1737c6fc58abc27ad86c53040c84baa319dbee153d69157b45
name collection-plaingeneric
category Collection
@@ -119261,7 +119266,7 @@ catalogue-topics font-doc
name fontools
category Package
-revision 55117
+revision 55297
shortdesc Tools to simplify using fonts (especially TT/OTF ones)
longdesc This package provides tools to simplify using OpenType fonts
longdesc with LaTeX. By far the most important program in this bundle is
@@ -119275,11 +119280,11 @@ longdesc - re-encode .afm files, ot2kpx - extract kerning pairs from
longdesc OpenType fonts, splitttc - split an OpenType Collection file
longdesc (ttc or otc) into individual fonts.
depend fontools.ARCH
-containersize 45556
-containerchecksum 9e9ff0f0e61a5a856a23c4e8147785769d96d1e416a3ab8e4524ff0bf1e27ed3c0984f658387fd8c7bdd29d69bac4e66ae4ae8d1ba012925a172ad42eaa8cdf9
-doccontainersize 127180
-doccontainerchecksum 6c3ca3f01892918bd483837f4b44cf53f5ff808f9c48065308be48a5112448842d8b79525e5b0cd0852ff1b117817851fae87eb6af12464b6f808b4687e10a1e
-docfiles size=56
+containersize 49188
+containerchecksum 94917c0c060a82a72d6cdf50c19ec782de3599c613bc54477939b7e1aeae70f40cf8a9dd684df1122a55d4b69a5e2aa156fe078565cf24887081e2deb7176ccc
+doccontainersize 130604
+doccontainerchecksum ed2dfc4cab80e80d89d9c87df45a3ee031c7ff0f1a3f45e009ef1c622dbe021c6bbcb3a8905073b50f0d42ac85cca57b4ff25c771495b939685a41f113fa8735
+docfiles size=57
texmf-dist/doc/man/man1/afm2afm.1
texmf-dist/doc/man/man1/afm2afm.man1.pdf
texmf-dist/doc/man/man1/autoinst.1
@@ -119289,9 +119294,10 @@ docfiles size=56
texmf-dist/doc/support/fontools/GPLv2.txt
texmf-dist/doc/support/fontools/README details="Bundle readme"
texmf-dist/doc/support/fontools/splitttc
-runfiles size=54
+runfiles size=61
texmf-dist/fonts/enc/dvips/fontools/fontools_lgr.enc
texmf-dist/fonts/enc/dvips/fontools/fontools_ly1.enc
+ texmf-dist/fonts/enc/dvips/fontools/fontools_oml.enc
texmf-dist/fonts/enc/dvips/fontools/fontools_ot1.enc
texmf-dist/fonts/enc/dvips/fontools/fontools_t1.enc
texmf-dist/fonts/enc/dvips/fontools/fontools_t2a.enc
@@ -157395,18 +157401,18 @@ catalogue-version 2020-02-02-PL5
name latex-amsmath-dev
category Package
-revision 52866
+revision 55299
shortdesc Development pre-release of the LaTeX amsmath bundle
relocated 1
longdesc This is a pre-release version of the standard LaTeX amsmath
longdesc bundle. It accompanies the pre-testing kernel code
longdesc (latex-base-dev), and is intended for testing by knowledgeable
longdesc users.
-containersize 30044
-containerchecksum 92a2d1957d2f79bfa96aad5ce8aaf56b76e01aff51971c18fe139173fb90a22884830769eb090e68acb84a6bdcec18540e29461fb3f76eb6e9e62b82b9248e36
-doccontainersize 2344808
-doccontainerchecksum 82fdc4e2ad9323a28f29d470841be560c37574acd4ef864003656f38f7ad80279ccfc5774311c90b7741dca26c3b6a38187d68a40a1b9b262cb2c2d351ae6c54
-docfiles size=665
+containersize 30468
+containerchecksum 331161bfe98afdd63056fcb14b9351c30385e6fce6ce44b6a10e96738e9626bd84736244e824e26ceba590e659d11c6af9691526380e9e2e2a79ee15b1ffebfe
+doccontainersize 2350296
+doccontainerchecksum fd362c15b44c74fab3ed46649f852e1b4af4518ed8f4d50159324a2db22a70a339838ce3e395d78d3bab6f1bf19526ccc043bfd3014c50bfc3e6913c8386bb71
+docfiles size=667
RELOC/doc/latex-dev/amsmath/README.md details="Readme"
RELOC/doc/latex-dev/amsmath/ams-external.txt
RELOC/doc/latex-dev/amsmath/ams-internal.txt
@@ -157428,9 +157434,9 @@ docfiles size=665
RELOC/doc/latex-dev/amsmath/technote.tex
RELOC/doc/latex-dev/amsmath/testmath.pdf details="Examples paper" language="en"
RELOC/doc/latex-dev/amsmath/testmath.tex
-srccontainersize 64080
-srccontainerchecksum 519dde0546b8c548e09d2df2ba1840da4cb877d0656a620476717f4a3997776c9846035f8dc7f1db63d5f5b6558e0268f8cd335078a7dcf64ebff7507af3e368
-srcfiles size=79
+srccontainersize 65140
+srccontainerchecksum 5ae4a3468228a60ebdbe82fa943a4bf960ce165ad2c5a7fcdac163025d5ec4e97fa8d26e4cb35d9e468cf04fe09dfb37fea5f7d7bd77fd579a8980070283c9c4
+srcfiles size=80
RELOC/source/latex-dev/amsmath/amsbsy.dtx
RELOC/source/latex-dev/amsmath/amsbsy.ins
RELOC/source/latex-dev/amsmath/amscd.dtx
@@ -157445,7 +157451,7 @@ srcfiles size=79
RELOC/source/latex-dev/amsmath/amstext.ins
RELOC/source/latex-dev/amsmath/amsxtra.dtx
RELOC/source/latex-dev/amsmath/amsxtra.ins
-runfiles size=69
+runfiles size=70
RELOC/tex/latex-dev/amsmath/amsbsy.sty
RELOC/tex/latex-dev/amsmath/amscd.sty
RELOC/tex/latex-dev/amsmath/amsgen.sty
@@ -157458,11 +157464,11 @@ runfiles size=69
catalogue-ctan /macros/latex-dev/required/amsmath
catalogue-license lppl1.3c
catalogue-topics maths
-catalogue-version 2020-02-01 pre-release 1
+catalogue-version 2020-10-01 pre-release 1
name latex-base-dev
category Package
-revision 54146
+revision 55299
shortdesc Development pre-release of the LaTeX kernel
relocated 1
longdesc This package provides a testing release for upcoming LaTeX2e
@@ -157472,11 +157478,11 @@ longdesc users is required by adding these changes to the release LaTeX
longdesc kernel. Typically, the code here will be used by a TeX system
longdesc to create dedicated formats, for example pdflatex-dev, which
longdesc can then be used explicitly for testing.
-containersize 168400
-containerchecksum bd30eb488ea5acc22c4a7ca455d92db0d76066d1f08cb28e15b1cd248b766571be28a14f0fe4b25a590c6ad1f5d27a8cb373443245cef30f7e4546c8d2014ed7
-doccontainersize 17906064
-doccontainerchecksum 1ec8159025cf783a8c3cf5fc6b46c1ae96aa057cabaad12f8f4183cc6aa7c3b53549b12975441d24ba043a87421aae821f90ef017814445e5a27fb4673871adc
-docfiles size=5688
+containersize 176456
+containerchecksum 072e9431b28b0f860240a4e6bb6a5cc47e4dfaf9308d87c06ce0ec19d9c1ed917e7db791a3eed372cf50b641e594c3af42b964c8213bc8e0f0d647824e4be5f5
+doccontainersize 18234536
+doccontainerchecksum daa5fdbfcb94d576a6ee243e625a28aeafd5a84000a4f3286a3e170afdc9e189ee8f8399e1b98b0fa61ff1ac2ea0ebab37d4ee4419f2c8407d091350502e43b9
+docfiles size=5782
RELOC/doc/latex-dev/base/README.md details="Readme"
RELOC/doc/latex-dev/base/alltt.pdf
RELOC/doc/latex-dev/base/bugs.txt
@@ -157514,6 +157520,7 @@ docfiles size=5688
RELOC/doc/latex-dev/base/lppl-1-0.txt
RELOC/doc/latex-dev/base/lppl-1-1.txt
RELOC/doc/latex-dev/base/lppl-1-2.txt
+ RELOC/doc/latex-dev/base/lppl.pdf
RELOC/doc/latex-dev/base/lppl.txt
RELOC/doc/latex-dev/base/ltluatex.pdf
RELOC/doc/latex-dev/base/ltnews.pdf details="Complete LaTeX2e news"
@@ -157608,9 +157615,9 @@ docfiles size=5688
RELOC/doc/latex-dev/base/utf8ienc.pdf
RELOC/doc/latex-dev/base/webcomp.err
RELOC/doc/latex-dev/base/webcomp.pdf
-srccontainersize 525788
-srccontainerchecksum 359e4934dfcd329040f7387017c362174da3f0330ae7f930b4d8a24f65d041d20ebbbd84407de6546477cd0f41c8f76f35f7f0095857055c06754de114474990
-srcfiles size=777
+srccontainersize 531916
+srccontainerchecksum 66f61198b9a8fcdf2f852cbcdd581bc7d6caaaf5ac22617e45de4ea30ca02295529bcf5ab7aaff31a748efa1f503c72ee2000495634a2bb4830a34430e6870a0
+srcfiles size=791
RELOC/source/latex-dev/base/alltt.dtx
RELOC/source/latex-dev/base/alltt.ins
RELOC/source/latex-dev/base/classes.dtx
@@ -157706,7 +157713,7 @@ srcfiles size=777
RELOC/source/latex-dev/base/tulm.ins
RELOC/source/latex-dev/base/unpack.ins
RELOC/source/latex-dev/base/utf8ienc.dtx
-runfiles size=460
+runfiles size=472
RELOC/tex/latex-dev/base/alltt.sty
RELOC/tex/latex-dev/base/ansinew.def
RELOC/tex/latex-dev/base/applemac.def
@@ -157765,6 +157772,7 @@ runfiles size=460
RELOC/tex/latex-dev/base/leqno.sty
RELOC/tex/latex-dev/base/letter.cls
RELOC/tex/latex-dev/base/letter.sty
+ RELOC/tex/latex-dev/base/lppl.tex
RELOC/tex/latex-dev/base/ltexpl.ltx
RELOC/tex/latex-dev/base/ltluatex.lua
RELOC/tex/latex-dev/base/ltluatex.tex
@@ -157869,7 +157877,7 @@ catalogue-also latex-base
catalogue-ctan /macros/latex-dev/base
catalogue-license lppl1.3c
catalogue-topics format class
-catalogue-version 2020-10-01 pre-release 5
+catalogue-version 2020-10-01 pre-release 6
name latex-bib-ex
category Package
@@ -159654,7 +159662,7 @@ catalogue-topics book-ex
name latex-graphics-dev
category Package
-revision 53651
+revision 55299
shortdesc Development pre-release of the LaTeX graphics bundle
relocated 1
longdesc This is a pre-release version of the standard LaTeX graphics
@@ -159662,11 +159670,11 @@ longdesc bundle. It accompanies the pre-testing kernel code
longdesc (latex-base-dev), and is intended for testing by knowledgeable
longdesc users.
depend graphics-cfg
-containersize 15044
-containerchecksum 52dfe7ed351ab0d02eb1de79c8a76f2fd0c8e2e566539a2c688abe281cce1e018ae56d1a4451c180577ad7456bb3ee90cad6bbbd4b05d8bfefd98777c096b20a
-doccontainersize 1988196
-doccontainerchecksum e51cefe0eea01972b029655605942bf78519ecc0d4d0e1812ed755e0caa91492972e627c0fae61d0166bf49f6d1ee6279249592cc025dc1bf31f0f31ad1d5a7b
-docfiles size=626
+containersize 15040
+containerchecksum 30273fc4d8a6e5f981007e295c029e8f705fa41abbe0d8c0e3df465410323e326c945f798726225c2449a21ba91bcc318d23ea91754920743488cafb03b18e2b
+doccontainersize 1993716
+doccontainerchecksum fac809ab629d41a731dd13ed55355c69de02e26caeabc3e8e125e5606969af9e73aadf390f29bd22576062055288326d34231f00842b7bf52fc30800bb28da35
+docfiles size=623
RELOC/doc/latex-dev/graphics/README.md details="Readme"
RELOC/doc/latex-dev/graphics/cat.eps
RELOC/doc/latex-dev/graphics/changes.txt
@@ -159683,8 +159691,8 @@ docfiles size=626
RELOC/doc/latex-dev/graphics/rotex.pdf
RELOC/doc/latex-dev/graphics/rotex.tex
RELOC/doc/latex-dev/graphics/trig.pdf
-srccontainersize 51840
-srccontainerchecksum e146e29297ffd54555590b2eee36d35c4cd989dc51ad1d96ec20a416b6b9d24f2076c4253eb16226d394f6a1a0175fe27917ecb8d5c1475623c71f6987999e58
+srccontainersize 51920
+srccontainerchecksum c936716c2a67252fd3491a453ff12e77ef7926df875d9b57f1eb05d692c85b4c5dc4aa4e1bc02a25a4ddb7427f7deabd57947951b5ce3e570134825a8e92d007
srcfiles size=63
RELOC/source/latex-dev/graphics/color.dtx
RELOC/source/latex-dev/graphics/drivers.dtx
@@ -159722,7 +159730,7 @@ catalogue-also latex-graphics
catalogue-ctan /macros/latex-dev/required/graphics
catalogue-license lppl1.3c
catalogue-topics graphics collection
-catalogue-version 2020-10-01 pre-release 0
+catalogue-version 2020-10-01 pre-release 1
name latex-make
category Package
@@ -160733,17 +160741,17 @@ catalogue-topics distribution obsolete
name latex-tools-dev
category Package
-revision 53773
+revision 55299
shortdesc Development pre-release of the LaTeX tools bundle
relocated 1
longdesc This is a pre-release version of the standard LaTeX tools
longdesc bundle. It accompanies the pre-testing kernel code
longdesc (latex-base-dev), and is intended for testing by knowledgeable
longdesc users.
-containersize 34980
-containerchecksum 3d4c711d21b2a64ed895bec4a144c22db6f2df8acf396cfb490c61ac924f2a73af06e28a4c7b1e4ec034979edaea62bdf5041e10145b4883186c190a91ecdcb1
-doccontainersize 5206040
-doccontainerchecksum 907666c610d9f56e2f182c7c958bd83dd7fa48dd259bb7ae58e1e33a0c7349f694174324c6eedae9a1cd2476ae68b7c6beffa337cbba4d0b92c1fe03de2320c7
+containersize 41292
+containerchecksum 48529312af92fa63af6f8f65f29b4a0eb33fc917af5ec1e24fcd9a5c9153701a0b48855ea8987745e0bfdd1e7b3cc9675a8d1038d20531c9e0149f8d7505fd90
+doccontainersize 5205812
+doccontainerchecksum 97be5d1536843acb67175385c17750c41d255c096df12539f56f4fe5bc9314a70d5600ea36b1f8f483122f53526b2e8fb48b66c67f43c7311999c6b74352c6ef
docfiles size=1640
RELOC/doc/latex-dev/tools/README.md details="Readme"
RELOC/doc/latex-dev/tools/afterpage.pdf
@@ -160776,8 +160784,8 @@ docfiles size=1640
RELOC/doc/latex-dev/tools/verbatim.pdf
RELOC/doc/latex-dev/tools/xr.pdf
RELOC/doc/latex-dev/tools/xspace.pdf
-srccontainersize 224292
-srccontainerchecksum c91c08cb02e6429e92be70af04d1442162e7b8d1b4caf02cb6a61b2032d557dd7850d7c5dbdd2cd547b6daf3f5d29d5a6d01db768a901a025c5e9c31014932e6
+srccontainersize 224540
+srccontainerchecksum 4fe9284571213acbcbe3a9e1629bb73ad4518ba6570335308956e40bd1a74419086eba1b28f345d9f94af26b33ec7a9c321555238c8a25fc02a0144215052dd1
srcfiles size=264
RELOC/source/latex-dev/tools/afterpage.dtx
RELOC/source/latex-dev/tools/afterpage.ins
@@ -160812,22 +160820,33 @@ srcfiles size=264
RELOC/source/latex-dev/tools/verbatim.dtx
RELOC/source/latex-dev/tools/xr.dtx
RELOC/source/latex-dev/tools/xspace.dtx
-runfiles size=81
+runfiles size=103
+ RELOC/tex/latex-dev/tools/.tex
RELOC/tex/latex-dev/tools/afterpage.sty
RELOC/tex/latex-dev/tools/array-2016-10-06.sty
+ RELOC/tex/latex-dev/tools/array-2020-02-10.sty
RELOC/tex/latex-dev/tools/array.sty
RELOC/tex/latex-dev/tools/bm.sty
+ RELOC/tex/latex-dev/tools/calc.sty
RELOC/tex/latex-dev/tools/dcolumn.sty
RELOC/tex/latex-dev/tools/delarray.sty
+ RELOC/tex/latex-dev/tools/e.tex
RELOC/tex/latex-dev/tools/enumerate.sty
RELOC/tex/latex-dev/tools/fontsmpl.sty
RELOC/tex/latex-dev/tools/fontsmpl.tex
RELOC/tex/latex-dev/tools/ftnright.sty
+ RELOC/tex/latex-dev/tools/h.tex
RELOC/tex/latex-dev/tools/hhline.sty
+ RELOC/tex/latex-dev/tools/indentfirst.sty
+ RELOC/tex/latex-dev/tools/layout.sty
RELOC/tex/latex-dev/tools/longtable.sty
RELOC/tex/latex-dev/tools/multicol-2017-04-11.sty
RELOC/tex/latex-dev/tools/multicol.sty
+ RELOC/tex/latex-dev/tools/q.tex
+ RELOC/tex/latex-dev/tools/r.tex
RELOC/tex/latex-dev/tools/rawfonts.sty
+ RELOC/tex/latex-dev/tools/s.tex
+ RELOC/tex/latex-dev/tools/shellesc.sty
RELOC/tex/latex-dev/tools/showkeys.sty
RELOC/tex/latex-dev/tools/somedefs.sty
RELOC/tex/latex-dev/tools/tabularx.sty
@@ -160838,16 +160857,18 @@ runfiles size=81
RELOC/tex/latex-dev/tools/thm.sty
RELOC/tex/latex-dev/tools/thmb.sty
RELOC/tex/latex-dev/tools/thp.sty
+ RELOC/tex/latex-dev/tools/trace.sty
RELOC/tex/latex-dev/tools/varioref-2016-02-16.sty
RELOC/tex/latex-dev/tools/varioref.sty
RELOC/tex/latex-dev/tools/verbatim.sty
RELOC/tex/latex-dev/tools/verbtest.tex
+ RELOC/tex/latex-dev/tools/x.tex
RELOC/tex/latex-dev/tools/xr.sty
RELOC/tex/latex-dev/tools/xspace.sty
catalogue-ctan /macros/latex-dev/required/tools
catalogue-license lppl1.3c
catalogue-topics collection
-catalogue-version 2020-10-01 pre-release 2
+catalogue-version 2020-10-01 pre-release 3
name latex-uni8
category Package
@@ -183438,7 +183459,7 @@ catalogue-topics index-multi
name marathi
category Package
-revision 55275
+revision 55298
shortdesc Typeset Marathi language using XeLaTeX or LuaLaTeX
relocated 1
longdesc The package preloads many necessary commands for typesetting
@@ -183450,32 +183471,32 @@ longdesc aahe. blindtext aajnyaasNcaace sthaanikiikrnn hyaa
longdesc aajnyaasNcaat kele aahe. article, book, report, letter v beamer
longdesc hyaa laattek-vrgaaNce nmune hyaa aajnyaasNcaash tyaar krtaa
longdesc yeuu shktaat.
-containersize 2180
-containerchecksum 3143067cefc8e693186ac2d21ff2be58daee25b823aa3e5a39a20170e357dcb989c663999e93f2a1e6a1371c1f4f6210d346bfa1012232b71575dada51b61439
-doccontainersize 69084
-doccontainerchecksum 545e4acb92d9acc09fd32aea5e64a0657f6b7204ab78fc89423657742b60775180d2b51e1eef8dc157602c490672f0841d57221611603366cd77535ae284b3f9
-docfiles size=29
+containersize 2060
+containerchecksum d5ef71953dccf2a2778b8c0ee1aca44bf6ba1d34fb3628a9f08c18e2839a8be6135a427f2c61c9be603d09f26d433275a1f6e887b10cf143e7e7887ccdefbf7b
+doccontainersize 75724
+doccontainerchecksum ae2c0fd091331fba77206729ee0fc1da2c34afb53bbfbc827a8703d1e7cc9ce1e65b4968202ffe8c5389704be190461ee206bf7a804f16b80d7553b017a06806
+docfiles size=32
RELOC/doc/latex/marathi/README.txt details="Readme"
RELOC/doc/latex/marathi/article.tex
RELOC/doc/latex/marathi/beamer.tex
RELOC/doc/latex/marathi/book.tex
RELOC/doc/latex/marathi/letter.tex
RELOC/doc/latex/marathi/marathi.pdf details="Package documentation"
+ RELOC/doc/latex/marathi/para.tex
RELOC/doc/latex/marathi/report.tex
-srccontainersize 6604
-srccontainerchecksum b5a1a2fd8a8ced2df699e88965ae35f6b3fe0e98f9eabc4c1e16cde4b7d065552db6b106c88e80433464c2400887c3ca0e3daea6e551259ce97905abdae740d0
-srcfiles size=8
+srccontainersize 7256
+srccontainerchecksum 4efccad0bc8d94d40d187fbe2885c0c9eb04ea48e7fabb73b88e1fa2a492a50989a0f03a0dd3bd5a3a9d09cb643651f83a1ef7e1a17128f9f2224fa78449e2fc
+srcfiles size=9
RELOC/source/latex/marathi/marathi.dtx
RELOC/source/latex/marathi/marathi.ins
runfiles size=2
RELOC/tex/latex/marathi/marathi.sty
catalogue-contact-bugs https://gitlab.com/niranjanvikastambe/marathi/-/issues
-catalogue-contact-home https://gitlab.com/niranjanvikastambe/marathi
catalogue-contact-repository https://gitlab.com/niranjanvikastambe/marathi/
catalogue-ctan /language/marathi
catalogue-license lppl1.3c
catalogue-topics indic
-catalogue-version 1.0
+catalogue-version 1.1
name marcellus
category Package
@@ -206504,7 +206525,7 @@ catalogue-topics font font-type1 font-decor
name nicematrix
category Package
-revision 55079
+revision 55302
shortdesc Improve the typesetting of mathematical matrices with PGF
relocated 1
longdesc This package provides new environments similar to the
@@ -206519,26 +206540,26 @@ longdesc a control over the width of the columns and the possibility to
longdesc add an exterior line and an exterior column. nicematrix
longdesc requires and loads amsmath, array, expl3, l3keys2e, xparse,
longdesc pgf, as well as the TikZ library fit.
-containersize 18160
-containerchecksum 15ee802bfe36a5973bac24f3eec50078483ae37f8f85c410801acdbcc2ee4e8c5e40409b96adfa3d067edb27a5e96a8b31ac326da04dcb3609f824b6d7c175d4
-doccontainersize 1176436
-doccontainerchecksum 19d5b103c87ecde489325dc36eb1860e3ee761182c388b7a2a7e819e98d9bc7227b611778342cd613240829814b3218895589bcadf9e5410e754974a90dda2ca
-docfiles size=320
+containersize 18620
+containerchecksum 91187e9b0de490a7f6c9a7446e91fcfdc482f863c267e510781d2a562fb27d5e3a4dd4c689317b1f840f1c6f4af7ac25e20d79236de82e45780b9b363f68a665
+doccontainersize 1214592
+doccontainerchecksum 26c62c65ef1476a48f2f42b40cb6bb930da2ba29a2e7bc16f021f18eae3b59ecd6c164de44d34d51780136a914bc9dc883b007a0d85609e2153c870125fc49c3
+docfiles size=329
RELOC/doc/latex/nicematrix/README.md details="Readme"
RELOC/doc/latex/nicematrix/nicematrix-french.pdf details="Package documentation in French" language="fr"
RELOC/doc/latex/nicematrix/nicematrix-french.tex
RELOC/doc/latex/nicematrix/nicematrix.pdf details="Package documentation"
-srccontainersize 62052
-srccontainerchecksum 67ae5b82194e81f4cd98582cb7a3cd682c4d67e0286479710ad95268b92b67e86753a5bea23cd39ebb18514b1facf2fb80baca4ae5d4d25b149606827d473b89
-srcfiles size=91
+srccontainersize 65392
+srccontainerchecksum 1e8ec58a732c58e30c19eddba3f401c4c5900c67222fab260bbe74d6ec7c0665a6cabbd9f16cd08e9a19e99d5cfcb8048999ed29c85dd73605d65c3d18530e9e
+srcfiles size=97
RELOC/source/latex/nicematrix/nicematrix.dtx
RELOC/source/latex/nicematrix/nicematrix.ins
-runfiles size=38
+runfiles size=39
RELOC/tex/latex/nicematrix/nicematrix.sty
catalogue-ctan /macros/latex/contrib/nicematrix
catalogue-license lppl1.3
catalogue-topics maths matrix pgf-tikz expl3
-catalogue-version 4.0
+catalogue-version 4.1
name nicetext
category Package
@@ -232581,6 +232602,57 @@ catalogue-license lppl1.3c
catalogue-topics colour pgf-tikz
catalogue-version 1.2
+name pgf-pie
+category Package
+revision 55295
+shortdesc Draw pie charts, using PGF
+relocated 1
+longdesc The package provides the means to draw pie (and variant)
+longdesc charts, using PGF/TikZ. The license of the package is MIT as
+longdesc mentioned here: https://code.google.com/archive/p/pgf-pie/.
+containersize 3300
+containerchecksum 39aad93cd4a9d57486a0c22a94db88d196a7933969b1912e33a91d0bbd29b154c1ba758e70bc8ead77cb97b58786328364ca946c4fb11e910126286c68247e5f
+doccontainersize 113008
+doccontainerchecksum 41d429da6adfb3b8c1417a7e6bac2da8a3bf3819e9835dbcde99b25d14e77a5831ca56db26e566bad09bf44ee575e833d90be48db3a7fe039306ad8e2bd1dd90
+docfiles size=73
+ RELOC/doc/latex/pgf-pie/COPYING
+ RELOC/doc/latex/pgf-pie/LICENSE-GPL2.txt
+ RELOC/doc/latex/pgf-pie/LICENSE-LPPL1.3c.txt
+ RELOC/doc/latex/pgf-pie/README details="Readme"
+ RELOC/doc/latex/pgf-pie/before-after-number.tex
+ RELOC/doc/latex/pgf-pie/cloud.svg
+ RELOC/doc/latex/pgf-pie/cloud.tex
+ RELOC/doc/latex/pgf-pie/color.tex
+ RELOC/doc/latex/pgf-pie/colorwheel.tex
+ RELOC/doc/latex/pgf-pie/explode.tex
+ RELOC/doc/latex/pgf-pie/first-pie.svg
+ RELOC/doc/latex/pgf-pie/first-pie.tex
+ RELOC/doc/latex/pgf-pie/hide-number.tex
+ RELOC/doc/latex/pgf-pie/legend.tex
+ RELOC/doc/latex/pgf-pie/logo.png
+ RELOC/doc/latex/pgf-pie/pgf-pie-manual.pdf details="Package documentation"
+ RELOC/doc/latex/pgf-pie/pgf-pie-manual.tex
+ RELOC/doc/latex/pgf-pie/polar.svg
+ RELOC/doc/latex/pgf-pie/polar.tex
+ RELOC/doc/latex/pgf-pie/population.tex
+ RELOC/doc/latex/pgf-pie/radius.tex
+ RELOC/doc/latex/pgf-pie/scalefont.tex
+ RELOC/doc/latex/pgf-pie/shadow.tex
+ RELOC/doc/latex/pgf-pie/square.svg
+ RELOC/doc/latex/pgf-pie/square.tex
+ RELOC/doc/latex/pgf-pie/sum.tex
+ RELOC/doc/latex/pgf-pie/text-inside.tex
+ RELOC/doc/latex/pgf-pie/text.tex
+runfiles size=3
+ RELOC/tex/latex/pgf-pie/pgf-pie.sty
+catalogue-contact-bugs https://github.com/pgf-tikz/pgf-pie/issues
+catalogue-contact-repository https://github.com/pgf-tikz/pgf-pie
+catalogue-contact-support https://tug.org/mailman/listinfo/pgf-tikz
+catalogue-ctan /graphics/pgf/contrib/pgf-pie
+catalogue-license gpl2 lppl1.3c
+catalogue-topics genchart pgf-tikz
+catalogue-version 0.3
+
name pgf-soroban
category Package
revision 32269
@@ -281505,7 +281577,7 @@ binfiles arch=x86_64-solaris size=1
name tex4ht
category Package
-revision 55278
+revision 55306
shortdesc Convert (La)TeX to HTML/XML
longdesc A converter from TeX and LaTeX to SGML-based formats such as
longdesc (X)HTML, MathML, OpenDocument, and DocBook, providing a
@@ -281520,10 +281592,10 @@ longdesc restricted-syntax systems such as hyperlatex and gellmu. Note
longdesc that CTAN no longer holds the definitive sources of the
longdesc package: see the 'Readme' file.
depend tex4ht.ARCH
-containersize 867832
-containerchecksum 3c8960a1c304f2dcf207994cd169ac62521da4f7481e183bcb506a2b6ca0149a7ca6e3758c246077d12647edc6f131ceb557a4ab6454eea82ed48f3896e7cdf2
+containersize 870636
+containerchecksum 5f88d7f53dc8004513385f24f842962583c373de879f80fb3f5c46dc23dcf31ef456f8a1a00f721aa54c7eaea5d96db9ee407e177291c26b553b45cb9d5179a9
doccontainersize 61192
-doccontainerchecksum 7c4147719f8d514d2185677215940aaeb59c26c002c2e46964bb9bfbf04d4aa248f1744f817c552fc7d6e103e028af8ba4370158b1e4ba1a6fb1b77b8e3226fd
+doccontainerchecksum a60420007271812afd506151ed18778c0854e9c6233e166e18ecaae7f7d21cb0a8e67d99ccb6d00ca3794a92ed7bc2aa7205ecdf48c3bbb24832a50b98e2132c
docfiles size=195
texmf-dist/doc/generic/tex4ht/bugfixes.css
texmf-dist/doc/generic/tex4ht/bugfixes.html
@@ -281598,7 +281670,7 @@ docfiles size=195
texmf-dist/doc/generic/tex4ht/mn7.html
texmf-dist/doc/generic/tex4ht/mn8.html
texmf-dist/doc/generic/tex4ht/mn9.html
-runfiles size=9081
+runfiles size=9417
texmf-dist/scripts/tex4ht/ht.sh
texmf-dist/scripts/tex4ht/htcontext.sh
texmf-dist/scripts/tex4ht/htcopy.pl
@@ -281659,6 +281731,7 @@ runfiles size=9081
texmf-dist/tex/generic/tex4ht/article.4ht
texmf-dist/tex/generic/tex4ht/austrian.4ht
texmf-dist/tex/generic/tex4ht/authblk.4ht
+ texmf-dist/tex/generic/tex4ht/awesomebox.4ht
texmf-dist/tex/generic/tex4ht/babel.4ht
texmf-dist/tex/generic/tex4ht/beamer.4ht
texmf-dist/tex/generic/tex4ht/beamerbasefont.4ht
@@ -289737,16 +289810,16 @@ docfiles size=592
name texlive-docindex
category TLCore
-revision 55280
+revision 55293
shortdesc top-level TeX Live doc.html, etc.
longdesc These files are regenerated as needed, which is often, so we
longdesc make them a separate package. See the tl-update-auto script for
longdesc the process.
-containersize 388
-containerchecksum f72c89b7cea61f842eedf6bcd0d227a6a4707448e43bc17c2d9511a9a2a49e34277cddd83b5a791ad8af8a8abf56f2320b73c96c12cde8beb6e7fcf901f2e1b5
-doccontainersize 166732
-doccontainerchecksum 37b3fbeedebc196d517a3d31721959acadb7529f440baaf3e65bda6177ef8d1620b9828f3759ceccbca86730cf6679d66a5e0e2ad20ecc8635fd59d85762e632
-docfiles size=330
+containersize 392
+containerchecksum 0a3f17cb04e540fce0f33094a0fc79953c20738d3ec5ce257aec96f04b0d6a6aaff1c9508d9b968f4932ea03b91ea213d4bb9e7fb085774117bcc8c4746a5563
+doccontainersize 166852
+doccontainerchecksum e1c6707bfe9c256523ea5865b1c9925278e92a628ce488ec61556468416b39a63dbd20997523405421fd0903f50e15eb44f753d1ae773f2bceed410972e4ae3d
+docfiles size=331
doc.html
name texlive-en
@@ -289967,7 +290040,7 @@ docfiles size=368
name texlive-scripts
category TLCore
-revision 55252
+revision 55294
shortdesc TeX Live infrastructure programs
longdesc Includes install-tl, tl-portable, rungs, etc.; not needed for
longdesc tlmgr to run but still ours. Not included in tlcritical.
@@ -289975,10 +290048,10 @@ depend texlive-scripts.ARCH
depend texlive.infra
execute addMap mathpple.map
postaction shortcut type=menu name="TeX Live command-line" cmd=TEXDIR/tlpkg/installer/tl-cmd.bat
-containersize 132508
-containerchecksum 824dcfa175efa8d1d0d2196cac51afeed0ef81e5497c144d6101a3edb234261c118aeaef0716def828c7d576f36497e7faac0afa2646020a398aa78c99dcbbe2
+containersize 132504
+containerchecksum 655dd17f4bab4b5302a078d8659376086e310dab33546e78bdbac9c607fdfb1ea881f932e36f1c83feb22f24394679932244dabbbacb8585b07541db76494519
doccontainersize 219412
-doccontainerchecksum 839e621da34395756da2b87c32146bfbd87790ad76481a861a920f424ec06575c2a5cd63575bbfb0f8fc7e3c95ad205be89460788ca996c019586d903fed00fc
+doccontainerchecksum 70084db3ea9a775334c16fa7169dce439e256e076efe55fe975f68f77d4d0c74533c49975d0ac60461f88a5ae44d791a3b2c23d08c7feb998835cdba4a2146c1
docfiles size=141
texmf-dist/doc/man/man1/fmtutil-sys.1
texmf-dist/doc/man/man1/fmtutil-sys.man1.pdf
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
index 2fc78d6dce..bc8cbbdafb 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.md5
@@ -1 +1 @@
-c20705a4948119e084e70a7b304832d0 texlive.tlpdb
+d921cd368098e0c4133a9a1e30e4c44a texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512 b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
index d8b63fcac5..bc6de8444b 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512
@@ -1 +1 @@
-f2e8e84782bc464e1e67714e5ee698b823b0c3bc1d04a570917c6eb316ab19112408f4914144e831307eedb4870cc9b87fb91a63e26e3805b499230e7de12cc8 texlive.tlpdb
+28f7ecae3e945515112e4b144069c304181bb4ed0b0eb71a36f27e22b6541be77aa8b3894fb41361d44abfa52edae34ab54f67c127459e82913c26b9b1b36e9f texlive.tlpdb
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
index 1223b19a31..2fc57d7ca0 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.sha512.asc
@@ -1,10 +1,10 @@
-----BEGIN PGP SIGNATURE-----
-iQEcBAEBCgAGBQJezZLTAAoJEEzhh34ZQ4xwONEH/1JDiZU4eKe61anDyfwqEzsQ
-m4rPerikeW2o2UgX31d9WJ/VdS4GhSaAcOUFwvg/ETCDb1Gq39hzMDkAJk5lLMKt
-bySPv8zftDy/PG1f2flsd0d0DRoTuvyBnWFOxQLDwwbKIk0liv6ofhPL1g2FJSPW
-dlZzJD78+OJ8Al0NsSM8Hm/QytTtvYtjEdX2hyLCmSoW3/kuxru9ApUlhIKbyuvp
-nYGD3e526v1R967jcU42/X2cEUTn2BdmZ2Awqr2WTAItC0yydLoCuSK36ys1lFMQ
-nh1TF3/Ll/UiJ2hDCIJTzF9y/TXQj2pgoudoC7jkUnD+wfyGlikpBreHc5dYvNE=
-=8slX
+iQEcBAEBCgAGBQJezvF+AAoJEEzhh34ZQ4xwjucH/3ywy8SpryZac10p6bKsHlls
+QxcpHO/pcuYes+oUPOd7S+VlkAm0AkNnKvrsGSDn8ro33jAXNMOm5tIhVSkX84GY
+6RyIkvRtVEjwrKP85qbbDOaV724GffAuSkhJX8Br38P0/If5Pukfm8SXtMpeJxQx
+EbC0SUH6NI0dPmAob5u9xJI/5agOTm9Pv/tlAUk//ZR+U5FPfDt6Qyk0mfgrCupt
+OgWCHV2jmXr1oxQ6Q5umPEM2Ir3pP6FDMET01KgPxPGFIuXBRkfRlBow8yinlYqv
+aYEmWAQya5hVZI4L83sdO2ko300DxCz6vSiEDxbfNuSQI7O9MHwqwgWJq5w6cXo=
+=edE7
-----END PGP SIGNATURE-----
diff --git a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
index 393c25485c..9677e7efcf 100644
--- a/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
+++ b/systems/texlive/tlnet/tlpkg/texlive.tlpdb.xz
Binary files differ
diff --git a/systems/win32/miktex/tm/packages/next/pr.ini b/systems/win32/miktex/tm/packages/next/pr.ini
index d2581e79cd..5e263413fb 100644
--- a/systems/win32/miktex/tm/packages/next/pr.ini
+++ b/systems/win32/miktex/tm/packages/next/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1590524170
+date=1590610627
lastupd=miktex-arctrl-bin-2.9 miktex-arctrl-bin-x64-2.9 miktex-asymptote-bin-2.9 miktex-asymptote-bin-x64-2.9 miktex-autosp-bin-2.9 miktex-autosp-bin-x64-2.9 miktex-axohelp-bin-2.9 miktex-axohelp-bin-x64-2.9 miktex-bibarts-bin-2.9 miktex-bibarts-bin-x64-2.9 miktex-bibtex-bin-2.9 miktex-bibtex-bin-x64-2.9 miktex-bibtex8bit-bin-2.9 miktex-bibtex8bit-bin-x64-2.9 miktex-bzip2-bin-2.9 miktex-bzip2-bin-x64-2.9 miktex-cairo-bin-2.9 miktex-cairo-bin-x64-2.9 miktex-chktex-bin-2.9 miktex-chktex-bin-x64-2.9
-lstdigest=978a1d080db19f114351d9e3bdf85a7a
+lstdigest=b8b372ce232f72c1eb2bb33add771582
numpkg=3913
relstate=next
-version=7451
+version=7452
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: u19K/YqSdsBwV7Reizr/CnR74Nknmi4szI/BXq6n+sWHk1GxeUVRck41GI84aKhskLQlbGC0DPRLnQ+cHTg5v77bWfEGiu0R1LOmtjVSdB5SQ/vixaJtMS/1XI0CrjHUFDyuc6ExSWdo3CexkqrU+r7ZjDNF/MMpQn7C62Sl0Q25ZiRfIwPUmW5K6Z83j3J13USnfsd1Zm2yHHL3U4XxGwTZ46Gcaj6dqbsUHPknm7+vz9ZFVj2xDBN+kobtqR6O7GqrU6u1GTPX9loGYWk8f1XszXppO7lZc57N5N9JB1oO1lmydP0oT4orN2tiSnuFu5NAAehTN/XyCI1qTgV8tQ==
+;;;; signature/miktex: bT7zWIR0u8VmXliBBfhdYbhu0b+IPLOI+8D451kcB0TMfje2dlBHZlHDjeqze931LWITjHvIubq6mHTuj5Q1iNoWV5przOp7RSYrg1/HHpXDOv0g5ZB6yg8T5c8BeGdBozFzRQ26vKCMyjJmmnenR/kP73cjfd85J02WrY0RBGBrjT+gVLxyjq2IPXyErHZoXGMczCjvpr4leA3lomu/dNzI4P7d4YutLVZSgTfjJKQfoelSsmCD9BznasT6aEJcLjqcJpXekKEisBMnY8cQDhdn+jPXBhM5y8LKB4Hh3rSHA4E6EextExX7XYhJebMWW6ZAl7XW3QwDV+skkkGszQ==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/miktex/tm/packages/pr.ini b/systems/win32/miktex/tm/packages/pr.ini
index 1a734e3f94..e05ce417ec 100644
--- a/systems/win32/miktex/tm/packages/pr.ini
+++ b/systems/win32/miktex/tm/packages/pr.ini
@@ -1,13 +1,13 @@
[repository]
-date=1590523904
+date=1590610300
lastupd=akshar antanilipsum biblatex-philosophy bookshelf cochineal crossword euflag fontsetup fontsize haranoaji haranoaji-extra miktex-misc newcomputermodern ellipsis latex-veryshortguide optex ptex2pdf rec-thy suftesi toptesi
-lstdigest=b95687eaf1c8ccbc19afb4eca762f4a3
+lstdigest=793e18fd871781d32ae1837501f6cf30
numpkg=3913
relstate=stable
-version=7451
+version=7452
;;;;This configuration file is signed by a MiKTeX maintainer. The signature follows.
;;;;-----BEGIN MIKTEX SIGNATURE-----
-;;;; signature/miktex: Cwj2bYHcAxYtk/zX1yiLT1E7V47UPCf2W1cfUZbvc02BshPkKXbliLGhh7152ldxCP41h6MlKBGscumxFZKKTkkbFwOP3Iq8KkEIjU9IeDsromlD/0Cz5bV9TrAljwIKBotEM4VFqWoi6hcqy+Tw8hctzq4eEp8VT1jlrBgkDg1Vgk8iNVT+5UxUIj+i6b5V6r2rkGUANUwdHc1U5wLz01CBdg38mxRVT7EuIErVoxbvWXJw2utqfRqpH0lNRlpOZ6uIfIAzN4GCPYPEvDRxC73s/e/cIupOaihe3qkXw/2040+mZfRA3um3ZXHSwD8+hlMZ8QiibD3yO4E8IMWjVg==
+;;;; signature/miktex: glhWO6AAxTbRLigwoGNi/23s+/4+hekMDQmUAd9+D+GgTydZHPrKfEWIoA1n6YOU8+H9fKnJo1ciblYgkfUpSliWSmyhrG02OxxvJVOZ3GGJphKnXayCPwEp5VLVo1UyGz2NsJPJYpvJliaI1Y1PbbyDKMBNity2Xaqc9FO7uouVTI3IXLLorVq7ggSx/wrrht8+AG43jGLix5LjnU0CR1+O11uGR56FmzGj4eXkTJBMPJLvMNUuCp6NOeydM41wPpA6DyNVWStnuNR61EtgQ1yyXYUfwqRPAt7G6kafLyK5qYxnbQ3AFfjQZrh6gybvFqPgODMRmAeEQ2+sgDY6vg==
;;;;-----END MIKTEX SIGNATURE-----
diff --git a/systems/win32/w32tex/ChangeLog b/systems/win32/w32tex/ChangeLog
index ac5966e37c..c3c757d425 100644
--- a/systems/win32/w32tex/ChangeLog
+++ b/systems/win32/w32tex/ChangeLog
@@ -1,5 +1,21 @@
W32TeX (x86 & x64) ChangeLog
+[2020/05/27]
+(01) dvipdfm-w32.tar.xz
+ Update dvipdfmx.dll (20200526).
+(02) pstricks.tar.xz
+ Update pst-circ.
+(03) ptex-ng-w32.tar.xz
+ Update libdpx.
+(04) xetex-w32.tar.xz
+ Update dvipdfmx.dll (20200526).
+(05) win64/dvipdfm-w64.tar.xz
+ Update dvipdfmx.dll (20200526).
+(06) win64/ptex-ng-w64.tar.xz
+ Update libdpx.
+(07) win64/xetex-w64.tar.x
+ Update dvipdfmx.dll (20200526).
+
[2020/05/26]
(01) biblatex-biber.tar.xz
Add biblatex-unified.
diff --git a/timestamp b/timestamp
index 6fa50d2483..6da68f67ac 100644
--- a/timestamp
+++ b/timestamp
@@ -2,4 +2,4 @@
# The source CTAN of this site's material:
dante.ctan.org
# The year-month-day-hour-minute of this site's material:
-2020-05-27-02-02
+2020-05-28-02-02