summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2008-11-20 16:56:11 +0000
committerKarl Berry <karl@freefriends.org>2008-11-20 16:56:11 +0000
commitc0c091e5b6a1e5cc7816178df4d725290b8364ab (patch)
tree206ea9c94063a415d517e5f5cd115615e0f78484 /Master
parent2ef1581f8d9e92ff91fb3bf3907af849c01c86bc (diff)
texcount 2.1 (19nov08)
git-svn-id: svn://tug.org/texlive/trunk@11374 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/support/texcount/QuickReference.pdf1138
-rw-r--r--Master/texmf-dist/doc/support/texcount/QuickReference.tex121
-rw-r--r--Master/texmf-dist/doc/support/texcount/README5
-rw-r--r--Master/texmf-dist/doc/support/texcount/TeXcount.pdfbin139639 -> 147012 bytes
-rw-r--r--Master/texmf-dist/doc/support/texcount/TeXcount.tex166
-rw-r--r--Master/texmf-dist/doc/support/texcount/macros.tex39
-rwxr-xr-xMaster/texmf-dist/scripts/texcount/TeXcount.pl1026
-rwxr-xr-xMaster/tlpkg/bin/tlpkg-ctan-check3
8 files changed, 2149 insertions, 349 deletions
diff --git a/Master/texmf-dist/doc/support/texcount/QuickReference.pdf b/Master/texmf-dist/doc/support/texcount/QuickReference.pdf
new file mode 100644
index 00000000000..0661b721af4
--- /dev/null
+++ b/Master/texmf-dist/doc/support/texcount/QuickReference.pdf
@@ -0,0 +1,1138 @@
+%PDF-1.2
+7 0 obj
+<<
+/Type/Encoding
+/Differences[1/dotaccent/fi/fl/fraction/hungarumlaut/Lslash/lslash/ogonek/ring 11/breve/minus
+14/Zcaron/zcaron/caron/dotlessi/dotlessj/ff/ffi/ffl/notequal/infinity/lessequal/greaterequal/partialdiff/summation/product/pi/grave/quotesingle/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater/question/at/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/bracketleft/backslash/bracketright/asciicircum/underscore/quoteleft/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/braceleft/bar/braceright/asciitilde
+128/Euro/integral/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE/Omega/radical/approxequal
+147/quotedblleft/quotedblright/bullet/endash/emdash/tilde/trademark/scaron/guilsinglright/oe/Delta/lozenge/Ydieresis
+161/exclamdown/cent/sterling/currency/yen/brokenbar/section/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]
+>>
+endobj
+10 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F1
+/FontDescriptor 9 0 R
+/BaseFont/ZDNJCT+NimbusRomNo9L-Regu
+/FirstChar 1
+/LastChar 255
+/Widths[333 556 556 167 333 611 278 333 333 0 333 564 0 611 444 333 278 0 0 0 0 0
+0 0 0 0 0 0 0 333 180 250 333 408 500 500 833 778 333 333 333 500 564 250 333 250
+278 500 500 500 500 500 500 500 500 500 500 278 278 564 564 564 444 921 722 667 667
+722 611 556 722 722 333 389 722 611 889 722 722 556 722 667 556 611 722 722 944 722
+722 611 333 278 333 469 500 333 444 500 444 500 444 333 500 500 278 278 500 278 778
+500 500 500 500 333 389 278 500 500 722 500 500 444 480 200 480 541 0 0 0 333 500
+444 1000 500 500 333 1000 556 333 889 0 0 0 0 0 0 444 444 350 500 1000 333 980 389
+333 722 0 0 722 0 333 500 500 500 500 200 500 333 760 276 500 564 333 760 333 400
+564 300 300 333 500 453 250 333 300 310 500 750 750 750 444 722 722 722 722 722 722
+889 667 611 611 611 611 333 333 333 333 722 722 722 722 722 722 722 564 722 722 722
+722 722 722 556 500 444 444 444 444 444 444 667 444 444 444 444 444 278 278 278 278
+500 500 500 500 500 500 500 564 500 500 500 500 500 500 500 500]
+>>
+endobj
+13 0 obj
+<<
+/Type/Font
+/Subtype/Type1
+/Name/F2
+/FontDescriptor 12 0 R
+/BaseFont/JGUGLT+CMSY10
+/FirstChar 33
+/LastChar 196
+/Widths[1000 500 500 1000 1000 1000 777.8 1000 1000 611.1 611.1 1000 1000 1000 777.8
+275 1000 666.7 666.7 888.9 888.9 0 0 555.6 555.6 666.7 500 722.2 722.2 777.8 777.8
+611.1 798.5 656.8 526.5 771.4 527.8 718.7 594.9 844.5 544.5 677.8 762 689.7 1200.9
+820.5 796.1 695.6 816.7 847.5 605.6 544.6 625.8 612.8 987.8 713.3 668.3 724.7 666.7
+666.7 666.7 666.7 666.7 611.1 611.1 444.4 444.4 444.4 444.4 500 500 388.9 388.9 277.8
+500 500 611.1 500 277.8 833.3 750 833.3 416.7 666.7 666.7 777.8 777.8 444.4 444.4
+444.4 611.1 777.8 777.8 777.8 777.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 777.8 277.8 777.8 500 777.8 500 777.8 777.8 777.8 777.8 0 0 777.8
+777.8 777.8 1000 500 500 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8 777.8
+777.8 777.8 1000 1000 777.8 777.8 1000 777.8]
+>>
+endobj
+16 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F3
+/FontDescriptor 15 0 R
+/BaseFont/PILQXE+NimbusRomNo9L-Medi
+/FirstChar 1
+/LastChar 255
+/Widths[333 556 556 167 333 667 278 333 333 0 333 570 0 667 444 333 278 0 0 0 0 0
+0 0 0 0 0 0 0 333 278 250 333 555 500 500 1000 833 333 333 333 500 570 250 333 250
+278 500 500 500 500 500 500 500 500 500 500 333 333 570 570 570 500 930 722 667 722
+722 667 611 778 778 389 500 778 667 944 722 778 611 778 722 556 667 722 722 1000
+722 722 667 333 278 333 581 500 333 500 556 444 556 444 333 500 556 278 333 556 278
+833 556 500 556 556 444 389 333 556 500 722 500 500 444 394 220 394 520 0 0 0 333
+500 500 1000 500 500 333 1000 556 333 1000 0 0 0 0 0 0 500 500 350 500 1000 333 1000
+389 333 722 0 0 722 0 333 500 500 500 500 220 500 333 747 300 500 570 333 747 333
+400 570 300 300 333 556 540 250 333 300 330 500 750 750 750 500 722 722 722 722 722
+722 1000 722 667 667 667 667 389 389 389 389 722 722 778 778 778 778 778 570 778
+722 722 722 722 722 611 556 500 500 500 500 500 500 722 444 444 444 444 444 278 278
+278 278 500 556 500 500 500 500 500 570 500 556 556 556 556 500 556 500]
+>>
+endobj
+19 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F4
+/FontDescriptor 18 0 R
+/BaseFont/MTDDJC+NimbusMonL-Regu
+/FirstChar 1
+/LastChar 255
+/Widths[600 600 600 600 600 600 600 600 600 0 600 600 0 600 600 600 600 0 0 0 0 0
+0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 0 0 600 600
+600 600 600 600 600 600 600 600 600 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600
+600 0 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]
+>>
+endobj
+22 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F5
+/FontDescriptor 21 0 R
+/BaseFont/RZRCUW+NimbusMonL-ReguObli
+/FirstChar 1
+/LastChar 255
+/Widths[600 600 600 600 600 600 600 600 600 0 600 600 0 600 600 600 600 0 0 0 0 0
+0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 0 0 600 600
+600 600 600 600 600 600 600 600 600 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600
+600 0 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]
+>>
+endobj
+25 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F6
+/FontDescriptor 24 0 R
+/BaseFont/EFLDGF+NimbusMonL-Bold
+/FirstChar 1
+/LastChar 255
+/Widths[600 600 600 600 600 600 600 600 600 0 600 600 0 600 600 600 600 0 0 0 0 0
+0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 0 0 600 600
+600 600 600 600 600 600 600 600 600 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600
+600 0 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]
+>>
+endobj
+28 0 obj
+<<
+/Type/Font
+/Subtype/Type1
+/Name/F7
+/FontDescriptor 27 0 R
+/BaseFont/AFCVQE+CMSY6
+/FirstChar 33
+/LastChar 196
+/Widths[1222.2 638.9 638.9 1222.2 1222.2 1222.2 963 1222.2 1222.2 768.5 768.5 1222.2
+1222.2 1222.2 963 365.7 1222.2 833.3 833.3 1092.6 1092.6 0 0 703.7 703.7 833.3 638.9
+898.1 898.1 963 963 768.5 989.9 813.3 678.4 961.2 671.3 879.9 746.7 1059.3 709.3
+846.3 938.8 854.5 1427.2 1005.7 973 878.4 1008.3 1061.4 762 711.3 774.4 785.2 1222.7
+883.7 823.9 884 833.3 833.3 833.3 833.3 833.3 768.5 768.5 574.1 574.1 574.1 574.1
+638.9 638.9 509.3 509.3 379.6 638.9 638.9 768.5 638.9 379.6 1000 924.1 1027.8 541.7
+833.3 833.3 963 963 574.1 574.1 574.1 768.5 963 963 963 963 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 963 379.6 963 638.9 963 638.9 963 963
+963 963 0 0 963 963 963 1222.2 638.9 638.9 963 963 963 963 963 963 963 963 963 963
+963 963 1222.2 1222.2 963 963 1222.2 963]
+>>
+endobj
+30 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1758
+>>
+stream
+xڕXKs6WH͘ߏ&N͌DBk
+PA2Eю{bp|ν>8ܾz8AF];A$q<'iܾsons2hD\^D3}-E;5}H(OIIa㚑VP8ް揾.^fgbZwLb AIeǝ! PO1b p$'I7 /}}+[+T($Cj)7GTʞ1RhOziΒ0~UT饰`ޱǑ˓ae8p|K½[ q,"щ>5!LIʏ$VTk0f.3юfRֻ vx-=[ng-F,C4_F顂d9BH[K[k1-L
+:O($PE:Z7F>׋¥})A'J\˚w-*`lm|hKo({9o֜qg
+ШA}YdHyR#(}4O3Sc
+Vc&yptiAó4a!߮
+G0Z193%5yw:N"ڋDvDVUuka:;L2S^ڲE)*~ TX&z9pOk7n>YBVHGVehn`ZH;)ղoؑKCWnR3$M
+򬜥CӘ1M,e4J3T: 1hLk Vs<m#Ħ|Sҿ98_>`Sv^ۦj'aQLַp)) ٘q#E*xsM=F]|ATW3E S=.)kMG +Q,=o syN
+endstream
+endobj
+32 0 obj
+<<
+/F1 10 0 R
+/F2 13 0 R
+/F3 16 0 R
+/F4 19 0 R
+/F5 22 0 R
+/F6 25 0 R
+/F7 28 0 R
+>>
+endobj
+6 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 32 0 R
+>>
+endobj
+37 0 obj
+<<
+/Encoding 7 0 R
+/Type/Font
+/Subtype/Type1
+/Name/F8
+/FontDescriptor 36 0 R
+/BaseFont/XNWCOG+NimbusMonL-BoldObli
+/FirstChar 1
+/LastChar 255
+/Widths[600 600 600 600 600 600 600 600 600 0 600 600 0 600 600 600 600 0 0 0 0 0
+0 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 0 0 0 600 600
+600 600 600 600 600 600 600 600 600 0 0 0 0 0 0 600 600 600 600 600 600 600 600 600
+600 0 0 600 0 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600 600
+600 600 600 600 600 600 600 600 600 600 600 600 600 600 600]
+>>
+endobj
+40 0 obj
+<<
+/Type/Font
+/Subtype/Type1
+/Name/F9
+/FontDescriptor 39 0 R
+/BaseFont/WQYJPP+CMMI10
+/FirstChar 33
+/LastChar 196
+/Widths[622.5 466.3 591.4 828.1 517 362.8 654.2 1000 1000 1000 1000 277.8 277.8 500
+500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 777.8 500 777.8 500 530.9
+750 758.5 714.7 827.9 738.2 643.1 786.2 831.3 439.6 554.5 849.3 680.6 970.1 803.5
+762.8 642 790.6 759.3 613.2 584.4 682.8 583.3 944.4 828.5 580.6 682.6 388.9 388.9
+388.9 1000 1000 416.7 528.6 429.2 432.8 520.5 465.6 489.6 477 576.2 344.5 411.8 520.6
+298.4 878 600.2 484.7 503.1 446.4 451.2 468.8 361.1 572.5 484.7 715.9 571.5 490.3
+465 322.5 384 636.5 500 277.8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+0 0 0 0 0 0 0 615.3 833.3 762.8 694.4 742.4 831.3 779.9 583.3 666.7 612.2 0 0 772.4
+639.7 565.6 517.7 444.4 405.9 437.5 496.5 469.4 353.9 576.2 583.3 602.5 494 437.5
+570 517 571.4 437.2 540.3 595.8 625.7 651.4 277.8]
+>>
+endobj
+43 0 obj
+<<
+/Type/Font
+/Subtype/Type1
+/Name/F10
+/FontDescriptor 42 0 R
+/BaseFont/MWYZOO+CMR10
+/FirstChar 33
+/LastChar 196
+/Widths[277.8 500 833.3 500 833.3 777.8 277.8 388.9 388.9 500 777.8 277.8 333.3 277.8
+500 500 500 500 500 500 500 500 500 500 500 277.8 277.8 277.8 777.8 472.2 472.2 777.8
+750 708.3 722.2 763.9 680.6 652.8 784.7 750 361.1 513.9 777.8 625 916.7 750 777.8
+680.6 777.8 736.1 555.6 722.2 750 750 1027.8 750 750 611.1 277.8 500 277.8 500 277.8
+277.8 500 555.6 444.4 555.6 444.4 305.6 500 555.6 277.8 305.6 527.8 277.8 833.3 555.6
+500 555.6 527.8 391.7 394.4 388.9 555.6 527.8 722.2 527.8 527.8 444.4 500 1000 500
+500 500 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 625 833.3
+777.8 694.4 666.7 750 722.2 777.8 722.2 777.8 0 0 722.2 583.3 555.6 555.6 833.3 833.3
+277.8 305.6 500 500 500 500 500 750 444.4 500 722.2 777.8 500 902.8 1013.9 777.8
+277.8 500]
+>>
+endobj
+44 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 2691
+>>
+stream
+xڥˮu߯Ц
+D
+Sg-|k;kю3`j DV4oH>B#+ }@\2fM78!(Cal[ ~8c)B~fJj7M2ۅ>G}h휷.]{:cūd
+^ q2ȈJ (U=c  fgaur(V Rx]y#фmѵ2 R-Z|
+?SnyN~ZBH50AhuIxԐQ5 g,r%~;6C]잧kDdۦ||mN_7XV'}%|j1KP6To"z5s\:{V$Ҙ PoHм
+n
+4 ZMAWn؅ Œ3pe(~I恦!OE2i֭oU0jvƚ5h}08ccsZXYatS-4B:,eQcvNb3+V
+b>Apq{ " G^ L0M]ak}c2[7\PqwLP`~ 4*sU!u{9y\X47 F'w$\eBk<
+rg CjI
+8Cڢ&-ĎdH}
+qZ'$#pqEۂzX8KەkRW CRx%g#u<N֍dO{{#
+>آx {c Pӑ)k &E,]Q)O snJY|W NmJMQSɛX؆C|VnqHetb83h[X,<=0)bD6 p&"%,~)t
+h}5' Ǜk(\9mkQkl\4J}ث:N>ݶ2ƥ l19PAeK '2euU|b 0+whMs`F=NN$'xd rl^ +}ckU5[SL 2XC`<Oჶ-^LNeyLhAiT-u}US[
+'ÝYS%޻!QgU_Ǝ(8t@*,lb*[.*{ZqۜDWE(&ʧY~mnyYq^#)zL2 ES-Csۧaq3~WH_{dRZz{NN,WDX,6leP ֜'sG &IݤNP]dhv?m0 <^DC&^VSςn%a ,AU5 N(Z?їIX w8IW`Vepڨ=>"ӻ(2DGPBv(j¤yRw!Sv?]<|Uetnp5F BP zPWW}/
+endstream
+endobj
+45 0 obj
+<<
+/F6 25 0 R
+/F1 10 0 R
+/F3 16 0 R
+/F4 19 0 R
+/F5 22 0 R
+/F8 37 0 R
+/F9 40 0 R
+/F10 43 0 R
+/F2 13 0 R
+>>
+endobj
+34 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 45 0 R
+>>
+endobj
+48 0 obj
+<<
+/Filter[/FlateDecode]
+/Length 1436
+>>
+stream
+x}WKs6WHD0 ޚiҦg:
+^mDeIT4&1ɵUSG^S$mz
+#p_.\(,Nؕp{/\
+YJ\,I`{N')֤i4:
+̰p'.C9k N/‰,1acݵ'%4xM*sIm$J+>`æ,T{%){5 ( pSB(6_K%g5~[^ƨ2hXuɷqpPJ ;QʲYg߭"Sq(ZbU ɒ(U oGWAظ{]ӼN$gȋ{jnm:4԰1Rx%̍uVmI:ȫsm"};cu%C˳릹VL2IG_ZOgyAr`>5&]4x'q 7݁n ΰ1v;p8#}hU"[sZZNIa.6 $XLߎkhu-[H ltJM]뒥;bn @^GgeK:z]Tx(XI;zݢH¿Ss|=gVK=on<8#H mҖ?ѮU]{SY#p=|­b QʔK2${!Eg4HB/eF2u{Dxgye:KMf\zË\c43PSv20S߆Ikl["Пx@&sزD QPj^*PQ S:R v~h*
+@:\2a;9`gYWԭH#hb;@Jkld~r\ˍk=Fb9Q)vsu>֓n05a9ی_sbXF*(RrH?l^oc>;47膗@D<K
+endstream
+endobj
+49 0 obj
+<<
+/F6 25 0 R
+/F1 10 0 R
+/F4 19 0 R
+>>
+endobj
+47 0 obj
+<<
+/ProcSet[/PDF/Text/ImageC]
+/Font 49 0 R
+>>
+endobj
+9 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-168 -281 1000 924]
+/FontName/ZDNJCT+NimbusRomNo9L-Regu
+/ItalicAngle 0
+/StemV 85
+/FontFile 8 0 R
+/Flags 4
+>>
+endobj
+8 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 1662
+/Length2 19288
+/Length3 532
+/Length 20223
+>>
+stream
+xڬct}&v*mtR1*vGضmtl3}?̜y;e|k_k:= 3uuQsSvSdRts!PQI8[& ~9@ `CH88z:-@
+dffbfkڛ[8-_e0'&p[eao3ۮgѓT`[_r=%G\ `besob ?J& g@olJ?Hٛ93; {?_;M{"q;!ׁ[^XXxX!Dï3l3.G4; o)@۹1v/TP'7|e?.?c1}!"zфx;e
+l' yeۓA:>EH$Ӂi!lװ)5?YFN;c>WL^㎽,\U"j0;ǣ}$ɴVU/ΊC$!tbǒ Aw_vLr*cwQrWwkH~` 5/ݠx5@
+K8= Y"A/$mRiw\6
+=B8 olO!cc<E9R5܎)NDEҋSԜ_zc eE><a#HeY_V" xw}GKIhI+9QS@s詞aqew#
+s,)AVPMZ0}hC7" [2땴ȇwbJVWG-n+T GrBPxhޙto`ң_z?RV`Ǚ`<$۴Z\6}]vtD)p:W;2$^x{ēP"_Z6hgfmB` 2R==(.&{-{ 5 /]S8xzB/ <]b^G*
+H?;q,U3Iɢ}fܝK:Αl'Q| &ԭ1@ ӾuCN[8;K~R]9"WI<ajR^aHʸ!%BoSm@6=vC L終[f!~u?ag#c+-IVL `d;``E;(_>"^rZۑ$p822a]=}5*")(S!m63_#qD\y0m|F˒/ JMYo2LnhUqF!x-L3W_屲~q'E&VɌ¢N4oDAuP[ݍ:շ[Q:Z*5/yYX)EQ-qCۢ,x/':*|iup&^|l,_ B}4̕P lR?'rfI2Ǎ'xҼcs\kۼo`ɴw -VnAdfj-Ve&lKǷ;@VYCM>x]πDHuWU6t;&h*epor*o(*ajNS[wʂeTޯ& e.>x"l˄
+#k/ԿPjMݬ,T`
+]&T.V5Y/TZ ET&N˃bЫǚͧPi[. y~$:fA6EE~N ~(nM~?7W\@9t/a@!k؍{]5Gycuj@sПD[@El'\#RuL
+^>J^
+gOd@
+@l/7Hu4VzeH#OFV`T7M[+fN!b)sh&QWOZqfU0hZ59;Ċ?]գ@b76h3k]:8 M#A4E72 DS{kwɧ m5:7S㜒7KϻcgiFj_Q}Bٞx(bIbHx3㦲Ȝdq/Ee?Sq&Tv̿vn+`ckr|ē)RܜrGrdOMf=L{98 >UYlCy~%ծR˟0X &/߄yagewZ0"Y:*
+(qQjk#vv$:n9}HfPAG삂Z5GYg_ھdD63pGy' {c^3,.Ќjo3eC 8ҡ,2,{[ø5''-\,wV6:;EcZ#buP߹(,g*yW:gT2r -/2_y.aToW>:vt!R e5$B5"6>P02KW΋߈FJ氷2ғWKT@,\{HQvRriҵ<ݚ4$Uy6MK9Θ%luHbeYdoptd~NSelMPFo{% }/ {T+tD\ZD)4~ޱc̹r<q>y^P5[/8dHCQHP׺~:t^w 76O W']EGVMԲb[(L1^{Xꆃ&8hP`WP: yR: f%սFfܞft>yԽo8SΠ$g\v''d΋*9PcqB:n>)[af yK&DJE]&cz)wͲ4ݞp~PO H#Lc5KDW9TF%9yxACDni¼K_^0v6
+;W\M'VxiQ*.y
+į%)/ܸfF2@U< ʊ<{ 1ӌbn="/<fۡ8_;m9-T m Ktag3zGbjE7JSF2Bo@ӵK KH$eQi6u?uDS
+ {o|^62Yw[y3v9P`f+WԚP1ݣvqC8º0
+@9E'U eYFucКM?h]I/҄fD=Z, HzDN>jH()L9h`vtt2|AvLK@76c('6#Nyc@ݭs'=B8҈cSMw2$61&D>Ԋtbbi[_,& 8},j߬!3{#Ryy E#ۛBY&iMM9ӟ>D/:#~+g`>Ղ}X#;<Sz*JPJ,O0qgH2>;2oclI
+G FRz}H-c`?yfP{\; (xS$'1N5f].)D"!?~Tj g`e1yL#sF&cDǦD[2ǴsizK3c%fnl+ҩv#X6t@'L[jsUf#4[_CXJ}$>
+ ՇT^+5% Ѡ]{n־}?vux&znj}K_ Gw%_lIz9BJ3qAO !R |[9eע5MC<݋>ք)[wKdKe{n5Q 3<*8*!]_Ҹb<H;u[X.fBM /z2^}<Y<Ƿsցɒ#-Vtkq)*Zz>@I)P\zU
+HA
+T*_maBwpG)MCqthB
+ZW/PJG]Zx3}
+*I=ykFHU{(m
+5b1̪VE=9<RG<7bPQFc<s3vz3-:U(#`*<_E}VP\m! i \X4Ƃajfb,p4|^>mx|{lFݟPf`'qj Qu: k~Dm59ݜfqa
+Yje\VpwSjZ1mۇ5L|Q!'S
+}Aؼ붢MYf;כa KwMaJb{LPMi.\'{$<s6Vr_CРWݜVZVC{=G,SzPNm
+1_Zswp55$h=t[%"23, g}ÎVϏK8GQmqj5.,gQ+I@B
+`rO()
+wn5T}DL
+sL F{ {qeC#a "CDs(SX)t߃
+4]bɜYPшON.x*.+F+, Pf=xH@<z@4J™ҳB:9 dKG  L$]+ARNS|9AWq2'I0a3ﴈv'6vw>-%b(lٻZ 1o{ȃB` i>w傪q߱fr,4Lqݏjp#,_F#!OibOg+t 9 2dE(NOWxd\Άoh3`H}Eu@p
+!.2؅ÃY KAF:h Kڢ$C5qbA7 7shKY]y qK] fpaȅ@Kc)Ϗ;Yo )!J6-b_!LӐc?EU&o щ|Fhr<縋O[Y֎!uMXwb9KE/-;Ș.b
+ 귚<X'Vˉ6ྕ@1rU,||gGVRc)Gx
+cqnz MrE*"3,HM6B446fqϲaTk۟9AB>$@2Qyz؃$J$fCuᭋdkyi;-nP[kQr"7XsHa&. -tB24Sry_k ҷ&}! `d+8%" j,דeـ 0 ˜A=`lgS ˅
+)XW=n *Ҽ YqZYFFϞƝv D+he VF:=o$cDEB7Qj',^F
+X*작0ԗ mlWblA/%]ߔ*S<
+$GIY_Mm*:×~YvJ#vocM:k#y(2Z9="\1<*(Ϝ8{@DF χGr̰TXJ"H.(7+*Cm
+
+ol_S v(y mЅi$@Ua^kUѳс%<3*#;X gmCZV74FU?]UO]
+`qjCc(zj+)#mX2 Q<'*{+z/ۍrB 뇀Bu7' o|Ԅ)? df<!]j3.Ctvu%T!>8ISv%) ihm" OmFsѦ^(L4M e/IsNMGt`eB|L[W҈3X<^KoHFi:վ2жOF>:sZ<N0bSdA<
+MiL<lJU%aiNwX~rb ˟,ԑA_S#pnDA1mz͑X\v%檿_XpNC,c#9v_x,%V (,*(6”M!+lq<[97+ Gڕ.{1Eoé/x0(ȍŠ$6 QQCj\.
+{+Cb}K~Z,^抺Ny* 7?L{?7j?opQ#*Bp-gujȌY0G_IRR&[!
+nlug//r0"WJ6'
+J)יvףxJV糢
+bzyJk > }8kSkL |2כXN#?&_h(~(|sYX{MLnZ~CҾ{H ,^'r gvP
+vYiކOy&{d>ꞪץX% P J zp$ߣdga}>9TVYh33XEn4lYMvgS}wahm+u-P$^J:*Nop@Yz<ϩ'~zР
+ϞG6h #YԊR#
+`,.yL,dӠF*V>`O%^LGEwJ:ys&V"Hhl1ETGrZ`Ma
+aY~͞L
+<63"N:Nva,˙fpK<c7<&!Mo_r4M~݁#$tXՈ>b|ˮB8RxceʷqO6?v[x\S}c<-9w-jcO7M
+U%ҡO_aCJS+7@1#V(< ]Y@Kr<^UO+$,W @vX%(+IZ5i؁7I-%t8ksfOJebε aǭSk;CjFEk}:YlD7
+Y͌g>$sƱmK:AKN~42yæRoCԍ,v|ßtSe))aTnU7BX@'k_t|7nZ~{c|nt&`xɐ- QZz8ѐӠgGu\ ;}#Dߥ,S2Ц
+^/)1zvU(`0LTv 1zT.B$<Ro&vo*C4% |`ixr%< 
+EuM~G } gpXG[,
+S<6[~u`EےMc
+Fom)(ĄOA*
+ gU%4XklmYJt|3c//BMOe0+ftSFPZt:|LOd6K)(l~ܒ4࿥ 8@ʪq3>-IP1aML&~0h&ӹocHg(*R'@xhB~CPz>ܮPØ{& 9S I%)t(#SjdNo@Ir'tS4?sALYC^;|3fZv'"2{qĆ3֐ /<}9H@4DY_ kdx}I-PFP)JUbBbF=5Y#:W$i>cmHW]=/@@3 ḵ-?Ye2cśG)ؼ孄=\{#-u3e ۦ|נ'XΏZ¢]@IQb
+q 2cH)I=4hi*@J|"i㒠X] ÔUoW!1@HەAHmGY*9tss&!m?61N*A[rIsjBnoN
+ʳ|:wve"ha٠p4?
+ϸ{bh7u}XV~gh}T7<뿳,mmWӟS+(8;4x6qG QdYd`4|V#.p7*dȽIqO1ticpvD.KXKM+G29Yvq<
+u닥u[<?H_DtZ^a`'
+NC𾜙W8q(a>ΜirL{EdTX挶" ]?P:?kgqk
+E&~$N6xsҩ{&v~&t?:-On:Џuk4`;7w͇ʎ9§:_<8rD1zC(*#\N0R94 ?5Q#&vwzGYpu<27.ڼeIN}fI>Gw0Ǽp6a*[L\}F&җ3h~_iTeX^.~]e
+[e"gtRvOPc*
+j 't
+
+/`tmC Y,watlfi`)#ͰxwfS9_v)˂#|rd\l f%3EoYl]vhR9*"Z"ns_5Hoãʪ{UFiTM14*bؒ173b$cny
+7noQ5zdb)='6!W2eϤexu >Дp0p*^Co;:{_@Iq3;aOך9鼇&8o|S_] drݺB|nu7Ok`K?l_8YlMVrTwu2? 1jPd{-x/[z n)9yZ\qSؐM@fWMFbLB/<D ,M^k46ry?>)+iEb|LqHyQwa˨9.Ԝk7a; 7}JB2Z6Yޢh4"e'n;џJDڪCā- =W[jsW$ce_sz*lq
+/d} 9}!2b^6zF/u8v1zUN$x4N=< ٝmnfUF\ 7:oy)9+>dD{ $6J]Fo8g>. 9%; -qW 0`S୿gH{ſDk#^}4o*~+ʙf!Ҵ_ po0?+T1dHD@ AfI{w0 cK9fQn@]KKǘ󇮒!VܾgbJ\[\b6{RvgqPPWTbD:JxMf䵑H܏>W \;1?CR;=rW,ز:'ZCpFеfT(ש&߻l'eeak EҠPuJ^Ոfa6>_s@Θ'5蟽X]x1;""Ko131]t]KD<Y8R$hRc>U_ 1O~D'\zi!r-usbK^sT ">2pz Nr#R9FZ%ی^$*
+ӱC<L.g:i({\%V[2!5JsNFbɀ)8Ϧ׈uH.P(|ceLf;_5Ӿl46ze' l=
+8-ڈzupt4=lջ ť(j)/}:w%5keLMlL*0>M"mU8ْYECɴkG;`>hh}5!n}>\") `d0ڜ}%y$!\̸Ճ |'Z W~Sy֩
+}$^- <M_ȿNA2U(׋u >Ap86$t),p몐L:XaJf(L9 e2Ӗd@{0ߏ9m.JYq YOݒ{MP԰}:0I>y~ᅵ'z|b:{8޼SI!u($5E<2S8[ۖZi֊Z9<P~JTne0s@zu(č隲 kOᮠn:矱F(1>rN93#UY1xa3"cP(&ڢZ/aeKD>#f2HQ2`dU}5!_lٜ4
+s#/e-轙<9@,×iU j1!D]Ε Q>xKm޺#GzbwRAlW[Ʃ3ѧ^^nl8$,Ic
+]B1_XrlXUǚa(dKhVѐ-jcii,տZ[N[tHXYb_aK!r4F ڙ8twwwv8]wČ:5Lw}6tw1ݼy?S!8
+y/u&D q뗺Qfov;G{pݞj3Nue4%TLpŴè^uW2svØI5}^Ym
+نA$Q'pp0/ZY!4\dkٟlDOQ8l[ !zc.
+h?n3 p&x[7;\dimr&l NM']?qtQ9W2j"Fҋ}U6aw}Rɫ>E8Ux $aq.ыy3yra£P̻S!qY}:|5zwr
+_EstD1d PJ7S?n2x5
+Ȳ5;1/nλ89.#P X\YnW9 $ӏXOys닮
+M)U["
+e`MVݾa$kag
+ z=$y՘a
+l*:w|/WBo5xF 4d7 TV$Vv8@9^:mZu}&:VJqS= b*gB $ze8n qauG2m ۜMt1TSQm^$T+.=Tpg:UsLfTqsÕQ 2nX`F3(m Z*ֆ[dpSzY HS]6l\a+@ג)%0-Xn箑'F kBQ
+o xMTfCd ,RH}b <(:#*zʠwdxOfiNL;WɷwHƴ骞TK}<
+Ow`q'_g K"cv &Jz=3PZf5a+
+<}[#dL\l2[m%ANpt4k]'s&+W&ػO' meyc8GN`H-;`i/6W,SD6 ͐UĩY0m`07SUp =Վpp>fsD8-p3_@Yzs`#2u
+d1{\^صڮG̫<Z_}9>q~N]3Yuaw0T7C1Tףt17# .˦(ܼ51|
+)0j% ѸkYѻǫE>8Ԗg58Q˅E<87f7>dI\~
+h΋ZM"loEUep+/YCܱ3|9lXz᫇Lb
+zwM-ozJ'isI6gK`XPPWibWBN%w1YI} xs3 l @l)]\ۈ?琶yd(jhk<3ye|iBBF>S%!EǕVE0CQ7!l??[%})w
+j& `f?^
+endstream
+endobj
+12 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-29 -960 1116 775]
+/FontName/JGUGLT+CMSY10
+/ItalicAngle -14.035
+/StemV 85
+/FontFile 11 0 R
+/Flags 68
+>>
+endobj
+11 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 802
+/Length2 803
+/Length3 533
+/Length 1383
+>>
+stream
+xRkPWU`Q;ժjQ @ !eInf6H`,2(Ў@XD OKR TANJ
+ t??|; @b* 'E2(u~ (Pri18Ez` tPW|mGw*RGp,v_2
+m)8|{4㰿 8)Z
+~ٳ-}eeaIخ$^p>Kwy}hW/{SWYNEs:p|bt v~9*Rn`x,a&$@EY%tn&OLWCNYB񉇽7tyK݃G[m8BPz]?p={k+s5YޏNxATqvw ]32q!W<
+ӎW
+_3-un|SʲsOZ/HUD*iJ7سV<~`5oFᅯDʐH1 hiQ-צt[`-3 oUXt!m J婙aV?Qjz(_>%D_?Q@F@f(FGp8
+endstream
+endobj
+15 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-168 -341 1000 960]
+/FontName/PILQXE+NimbusRomNo9L-Medi
+/ItalicAngle 0
+/StemV 140
+/FontFile 14 0 R
+/Flags 4
+>>
+endobj
+14 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 1658
+/Length2 14737
+/Length3 532
+/Length 15624
+>>
+stream
+xzctefUmTPVl۶mFŨ8s=Ow{5c|&9MA bbkqb`adYX9;*Z2|X
+mtκ0S{2=$>qչ).50e
+*9=vȝׁ*((
+.6j(ƺGB^%tb庝YGBȢ$}9/ MmA@Hɪ3AKS٨d7+6lfn**1
+^&S/DG]`}Fa4'E#^]n>Lpe8TCKȠ>ZʪfBwlzoF ƍpb{%B 1=3dcucWe
+ 6R
+%P*ҕƤEKb pFaψڰٱ%X_W.1gF IU?rm 'a'BglD௝",ql V0Z5&|YbVoSX8bxjdJ x>=>2SS /AEDlm25F[ҐOCM{uEM`ĚiF5*a\.e&JP'~#ߟˁѰx}hr+Tl{('N@)" 8Χഄ3ר9j,A mw[#[ϥPр
+Sb 1%#3{ bS
+5RԫvK"g"<;87s\0ҋxujD~Kw# }ʃ1gj>ɦ#aU
+,)[ϔ8nnEJ$yi7*rfFZ cU5.K]sr+>
+16L鞕jxkTKt6ߦ|7~
+2Dm {;"v<^)UªC@ 522N#S^> аnq~sqrcXZ>*1 H'~{ﮍZ$ߡ|"+du)niυA?}T  ǟ\ߑGRު
+?lNABwo|'XO\9j:,Aqt
+/<pQZVf Znj゚!Lǁ3 [?N3"I$SڡXc˨CYDL"V1#֜/5Ba< 5Zbi/MM8Ua-IoY*@@B* <6QkB%7u!/ 0AD
+6:|awF՛Jk@- e PctBM_.<̱Q M?b/9iF⡼$m}$캡q(+u%SjϖN')J~G*v
+K(S LȚ5=) $\i gjJûu5ۚ`C.FA>iU/4feONHlpxr[ ni//"n`( #0Z*ٚ왟%v*lܾŌ`I|v'aaѫű_)2^p.el*YʃKǃ )4d+&aCQP-.=ߜUUqVIV)̀.Of6UMZNh.'ym)f2%~.K8^k?Dޣ|^_m7EQz"PzSRDx4/4[W8 UEnIVԒf%Y\ܽr놌\6:Vw[o<01<d>Cj3
+kHFL7l~QQ% MD@T7,Fddc.<'^E;Bp=P#Du'4go9*\uPkƇʹ4 CFqQƈ%g"+Q9r|#ڤcwj2T,!>n5(`C|nnCJϬ024'9ըmq+2h5VV8,fs6dEq! ݙ좜J/ҡC8h1Lh Qrg?y-WUq(MO͔,x"C7gFl3C.BXEg~pN,dܩ;giٝcڴ5IT,::|kT0n
+*-H(>QIjc#1NlqBtYrޙJ a 5{r~lQ $+2CdQC?K%;Vs)K9$
+V"utF} OWO1&6#9"|:xd!qQT^gxIb]",ڎ<;\Gyi7@fF${,^ R=_Cgg\𨯯b_`t͛<DgV͞
+kp(:0~Յ;Ѷn 8՝P}S|tٽq5 M> cIpu~&*aAyK&5 OOWNЏO#(%;NZkUajGuo0~a|8eC)8$7u/3=̇gѹ] m$
+V+Regٚ,̊'藕.hw5^_~ 嗌@h Ush.ŘIT2PnͭhyEd
+x{a(*yhڕKlVV ^$25}2켤 ݌ס+?U 1)\6.[Y>/4fJ$q,C{/#YhokA7Xe{Ѱ %R֓:-kϵi*P#H==OʣiaojP*o'RkDB)Z)8ʾ?Y`yH:+%!7>l P FlzIL}2r 910
+<b1;W1AqRnT98ݷNMDIv#wC۲eXf"ۺO'PӪz%8SV䅏!kŀ+d<=bLں&M|$KX~=ch &z=CrXOk*rUdXp
+U LQm|c5[Tk xkJrW^(HD}i@ 1PYׯq=M?{vbR>h!Ea t]$탷ZHmF h{PN% d2o\eN2D,!]nZIEÔll]W[~
+ P FQ +s9x'*ſR2P ɛԁr x&REOPoBhi2%0Zmg
+!B"%, lɰcf0Btm\j.ؑ MtCLހ
+q5gڐ_ I!op𬈮>xz\S2`[I*ƾ4[qg=RDʻ:IF
+_(W˕RrLÎm?~d^Ngg{)i
+Yb$bXZ,]sڽ"T;bqMv`?AOܲ
+-O/lP
+Y#V5/m9į= mt%r:^%Ej&KyWuGHYQ>p)D@5 sA'Dq0\?ɼ- <Ĩ8r7 v9UX&>6~u/ɱIl1k YS^`]ц=h; eͿ~%^;٩p{rѩ4
+o\!Ǹ q}"1C'ChhP -!{Ԉ(.N@g]gښl#b\)[!0lFi`wVׇ}>
+,!tw~ 6'$Q!%NOƶ<?'-9 !h 1Dv>*v nOKNJ0MvFOwd c&sLsdD3pypaR0Iۻ߽.fPx?J~ {ɶxH*I^!h[wdKߛM]Y?qv1Jˑ2`|XsP< _0}1|ɕC\SCB9,vsrdMjs* [!ZIV>005)!JU˓/I)ZJD}zQU1zµ}䧫5 'wP9(hǽ9-bZUCQ Ć~43 5(~yK׆cpQi#:=N:Tja7 w.:ޞlDP|0cXvs|+ܝ<F_d9@!4928lP sc}AYگCkH+Cr0CnCnEҷ UpޢӍyYzYeNFN~$)̽u+Ɔ
+b/UkܭY΢Y<IGV
+X#ߴ{31'ʴ6Rfe\ɧ
+IQ+ÀSP: JG })A{BP+Z.c捔 ?̢<W:vۅBf!fxh7 X^{f#GKn>{g7 1GG}׍-޳FL~m6\TqӪKnN fmi,Y쐫p_vEH !t"}(pѕ* ^cTg ilͼNQk)Y]蒧&% dp0Q_FS0 S=8#x.g^j wjKΕ
+3"*=v{Ԓuڶk-Yx+hBSU5Azj"LP 38,=f%mr6Hh7Ml,`V$U:Bm81xhZhb+ ʚ)+ꈇuk5M"CfsY_Z=JR(S—sh~6]`퐥#3-q &<`|Πνe~ȒEH_w۵.BCQLnNPY&$#R}
+avS`zt[PEi:~"[TAYw ّ! T*(L:xCG8| wN9"mB47,_b4HʉH{ڧyV 5r% k{ߛAbobPv4,sѽ9/-ANXEr"FֹT~Wƹ"0^Qqz{|<xH
+xwGSRxtW$~܉O~4a#}&tj ̀i'V5<, J_Ȅm8a=eqρ6Z*ކc=uQ+ě c3$.zn χ<y'LǵD@\$
+d,@Ob|ݫߏA=N$Qq)YM}SK!p< %/I'6RXSy<c|qp WoZWDcV2pUidR%]N`. P:0* ]U7 '4-a^V}sϢS+846:ymݤoss IfYQCn|B Gln
+\vJlEW-su_Rhl,cSbyI9E7\BL@I?G7,Fo@*+LNFˉjPW*@.XwH,, )J/ 4Mƃls Cedļ!l8Si<TI
+T:i1Yq[4
+zz٧Oת<Λo#%Zs&]=iv`q% +.QbW(dnqs&G[LeI< Bxӟ_6.zvMh`1
+U*n{2 tdociXJ"+quxx'J)quo 07*:I@KO_[td&sl cTOPf3:T+COE O@]oկ #5߸5$S, Nh&|[)|1qNG_GO]񋌛uM8aH-!&,Uϩ=P~jq,8V+vNBt4zBv
+W"xaPK'R@pȒn#2G|,鰰_3@H 0s\ |^g6NF:8/%Pf_|eG+GO>m v"(`hs`vONjb kZb[+o0=,:<1r8n W @D`'>I}t-5o4= e$´(^h(."܏N~/g,̢ eB-"cGhG>5 *C+e680\pE7$:W*rGK?3
+kx%ԮԸJ&rǩ| 'r1iv*Nm^5 }ns6 0^#<C3SCИR a)-6y _ sE8#uE|K<,=dN vWP/8uO]*Q! 9覽yKC*8-~ӿ=+$ @j`&rn$~G b9f X[A@l' &2&ê_3atA+^VD%G,4^bWVmh YBozZh%ϣZs{}N"OVdt*L,1#Y (>`̤ε$]Z ~RNr1IǸMf<qo-vWR>A/x7vq&U _kP ^#ѴTHþS+lB}cJE.ƪU'aw{]+(}7q؟?
+df%gSn"_QfE9VG9K̕ZfgI< DǚrÉ`l'ま-wt4k7I:/Xw?=;L|ѽV*Aς17 W]we_Y:x]#ea=Jҗ ^ zG8Y}kyѱv49=Y ×U&M*TCN*)kCڎ[nւI2mZ KrQP3"Jj bRLwVmXT力
+-FT `~_lκv̐˭J53zN'O@Q4緣@+߅+7uHBD7h|/NMA© ^VO1,3W?X! :W;2QH@%Î#y-=lkn ±Mh.4Qg߼Bn#k6)= =Ҧ:L#w`)[KG@P|;WhYRǯELT/@f*"sJČa%]i4/T_8>eՠ&
+!c׍L,r
+^O?dĶUn82C_6a3gjC) *jR(R=5e,sR#3
+ ӵQ7mi fj$i4-!WCk}|g̻m.tV?4ݴ 8yT|Db (EV6eo|gSv@ BE6ni턊#<~1d
+a۸E -@Uq!pXtꢿOe&Fypj&TLkHe<oaHu+F-R_ ߎ04<S&ToS9]׽զ1S͑L](Ay
+endstream
+endobj
+18 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-12 -237 650 811]
+/FontName/MTDDJC+NimbusMonL-Regu
+/ItalicAngle 0
+/StemV 41
+/FontFile 17 0 R
+/Flags 4
+>>
+endobj
+17 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 1644
+/Length2 16974
+/Length3 532
+/Length 17916
+>>
+stream
+xڬUPݲ%[,pw(uP[{nߗ"9rd+( l
+̊9"Mn) T9ڟc+J_xxh ڂ6|$<9 ‘+sޙ:rmv~ۯeJ9)#֪O?D8瑧]@XE؄o?PRkh rg=ޭR+n*;*E-h qFvC/gY6d =eeix;@ vc]pY!bM}5 @i/QAdڜFs"Jg(q.3p-D'ek.~1l!T\~uVfkeb|_bug렛&cۤ&ACTY/gP<Kcú
+Qȃ+v2#c{s4ojfNw$ y"}
+kF IvmT#{Q~e~Fd\1oD
+HڢHŲ=n#'.2llP%u1PDo8SqHFpP-Lc6e?hN59VT?I{$r?zrܗ^CAìMR*SNUZWxAF28h-MH2h1 T?L1 Y`X}{?TŃQT4q(5؊X+?#*OhߥL\jqbG'Mi]UFD5`RY ^rPQ8ƚ
+gJZM S*`7'Eo8thSm[@E)iA<.=ybrZ3b3UԘxAq &2 hPP;lMVs
+pxQr I0aAsbw:)OOj͵8z1O +mchF';@&O'*k_2nGQ4osF60ꓥ.Rn@xщۈ%
+"Uz%ItVm-FgJ6CGZ̼ӿ྄XR .Е<OÞi-&6-n*H@#FxϚ+鵾MLn1Qնvί[<{h0CL( pq?0@vQP5'9xv$N=;/4,e'HdFmJ4m9P,.r۽{G1E^jiwؽ j,O YHyNHpؘ*ѱၬ)
+:Ht!?2Y8 *
+U,-1U+icY);clode9=D0pLxf6u;*?m+x5Vǔ*{Q(* M,σOB Oцg싾}6~QRw[W f}l4̶Ɖl5]'`|H]s[usd:q JKC-hby-Zs͒8ԟ\Ϭ27u071ͳ!?,0cKeQ"i'7z
+ .лIz{4BV_IlS`{Q19c*u7_vla4~"% X)(0HXE-.Wf pŊ?MoIx8ˉe
+kg˥KouĉJ=n
+JE" %HmB9G|d_Kax PJTq{Nj 2UWǂ 
+K(zu7a=|PXx{UPܖ +MU}jpY śO2U`j'j9msAmI;Y[b6 GeMCK/ru#I-Z)<S['Z҃REq\LF+JI"3坈B; jo%8y`Z
+pzB* oulTӮz: GV1`G{
+7սGF$Yso}őPgls6
+ lɬ{k=MAN/NYkLj]Q*MG
+Rrљѫ;cl({dʑ=[@omw<i qs\YơC\7W, /ߗ!A&d 8 cT$J_=e2t%e#~>MdĖ&-H|4! c\pH5Lnjŕ,-fl^j5zoTɢTI'GIL!@}Aq[N-Mkqb߫^%$tM~l==93 l_̞<
+{ЊuvyZ. a[Ky1><wEmCagiꚕһ\B,ގغ<\ d5GK%r%8j
+wcZ&Ӏ_4-x^lGֈ(<qnKѬPn}7ShqT7enXtcćp$mS2{HqxBv.O\(` pQ$[%ja:@Jq"2U
+{Z8:ȩ**DHB|P| vXߎM3lY<BuH%j2xă^+-=0DT?uQm1 M*5*:fX@h0M|;u*Jŗ,_|;66탈0ў -nclEOBt`_r3CΎL:c3;-npsvrPz&w')~ ߃ȑWhz΋͎8u4|!A c`8NP4lч`͓n/'C8YR*.8+ OUL2UMd8|CWH{?2NuSTuTݳrwsG_e"1?n7^FC؅}
+k9 XIۂ
+Nn]D$*Չto#n{mw0š+#KO!1Jhn3&~7`e;PU?d,({D7+O}/דNk>.`?1
+x]%;; ?]Eϻs,,os/T}f`D| b
+m5okfQ}1TW
+碤^hBº 4gq-.h(
+Sr9.hiӋ3>#/^zzyTt~^zz ?0V3zs} nUB_``Rmkxd'{tb]FDv2]%N`䠴?Ivlm#q֑)f G449 cPm<q7G%`xgj*0@mG
+@%l7锿aЧu=ݧFYat&nQR!aL/Lt\
+Yod^x.
+'ROFoɎ X!K Csа^3p^8)AGR8=0I'Δ)Gl;3 (쀥iݘHNwxPnEV.| ZPj?zl$ԔȾ6uasJdQzLmMFuTMhFgt"v%Hi|`R/W^5IAm`z6'9N:sDq!/ڊWc<h&Ko!]Q:跛?ʪWj^Lm=4Ƅl-9jvX6S?NG/mq/gl~kqԜd[)j Ik֗Qxuc<T=0ЫK*5V}B+03-wv.b|~E?He|2?{u*xr
+,}vXO[ zj#,P&wQQ5QM<B!ԥR<¯5n$k~
+$lrɕs
+hY0c(@
+KM2Ҫ.}Tupļ<Kɿ9:CWyU׍28"yZAGjWa\Ѕl肠¤>%ͳ_lư h= n^MVtA;?e#7jyF ΊMJ#O*U~?ˉB.OIRJ˶0A`oi1[pʲ;-iA%Hc6Y'׈޾uv #J$6j^
+_"FrxBצ-`:8&bz},*hS@U7<+RK0ML>*{ (=H*R̒m
+ qH2JPY5Ś!蜒)neVm?"1*Ji9ƃ>8%r6I3^Ȑ^LrYT(DsӐ"$Uޯc  v~Z&4UYH#ُ^*wkn εL1]v qIv:&f -΂\/6f#|MZm2ZchOJ7gVCmc5PƘ:4~zA!DA;gؿI)gDN'$LytEw&kqoxEh,!I(xUBa$9P\Dd[sy2z% "GOvCd~Y=5-eNY=.$7ӛd2K̍%zM
+D?Dv? /K]bԧ p(KcwrV5Vi'+w)_<Ztд#9gsVmP;Ic=9}/(ԙt&8F/B@{mWdCzh~*B
+C]%df:
+"-of_X~j6P4Pa H
+F:vwSs6CRak$Da72CrԾ@̙-V Ic/Nj𰍨e*K>\s"laTZ&D\LOkk}Z,><%5~#1MNKACN0*)e~kqFgIW8s=m\gꖠPj 2(W꟰`NDMQ0~ ,cHr:הD/QЙ,h{ ‹?Rb ,JcpTF:m\yBc /\OLqԼ x-W?B2 SiJc4xuÀr^ćȗgY%jKD8b?ۀ9@s*FkP(Xms<
+%>8s ;D2z|g5?AK5H<و?Y:K 64c% 7CcIM1c${y|NLc}
+.e۹l|-sk*U"QdHH(Ŝ[s{=Q݊2-R )Z
+3:uF&'տR2GfByZ9<C
+ؽr/1P^%~8_#ZX8 HPEvؚfCQ-|=7`ek@NwE%fC70=\&?ZIw㥲l7rvg{dR D ;ODvzgBxlW[jDڔ|uD7 R p9d?pJq唣6@d 2$Ǽ}h '{3hLn*aTK|S'*D~&XhmVB|90^5m
+5{?Qn7bcGK9mآ4m0 FƒMU@E]C"0,1r/ f 4@J+3uHr
+vRg̡5yf`Z6@r1jvY6wi?YmpajԽhǔ/"9JsQ021.9&K濴!~{(=jbFLsd1i
+3/qN
+I{ܔ2E}fiWv4
++jSRhzD/*\"6Pڙ$҈k ޷z:hd]<~HHN썆FܙcJ_0+!ބE*,l2iis<L j i=6] y&q g n6fF~̜H
+Fw&CH 2ds;b;&^D{Xy=-"! kbKi~Eb1![sWWH,chH]BlsQZ" yjReE!uͅ_uD$'#J<e0fqbL ?2et:g<.{B,ר<cJ [a='hojsuc2-kA1-ny,r^;_\8k1tt5}j:DBuw%`or:zG绹[R}AW6Іg{xy% [M'UTFJ&FM}bXfo$ҪK [ZB3$`ת0h]b)yx鸟ޘ(b `[oY^x=v|5#yw3l
+`͠f
+nOToCyG+&+؋FE81;')ql?[o]S&Sl fƺY|1g@MAYl A!|_}5S,lQ<R_
+b p1I
+Mo}2l9zg 0|ȢΟYȈ1zC^S}㔺V &A"埂l7<4l,A(LٵK򘸁˙
+!3\]v3E $D($% ɪL^#td3LwwtRa6
+ }8ƊCejzX!}8>o)
+2
+RʹF_j&NC|{\~Af7ѿի1# l) ^PxNQh?>~Fz`==5T%U9R\`ADlG@-HERll%"s>6k·x [[9/z- JC>j(/G%Þos<z<WfJ;_9~-N^gus O~)_zK:jkbltPY>8Vbl &6Exωacq`$QUuM:';}7p="S;,a%p"?yb{ Lbڨ o)m%VAAZ@ha_@RF疀8k˂ $hK<$D6Wc$w [MI|nm
+8S{s؆GuѾ(5OãprNPīKe%;
+0t;_;%GHaZlG
+v_1.IKw.j[vZ
+{ R4̈m3ߧ罢А\BQN*(G8:cKw-h #eeu{Rr+<
+VW|G< 
+w\Me
+7?51~HƧ0_f`RM<Cp@]|sޞ,*/j*/S#Sw(㵁U9]O#۳ XaC}:00wƙVk`h!iS#Ul9+J>3VyxeYl܋žIc3`9Й_H"蹏2!zW~HvL7ڄ Mo$KX6Upç˞t7(H66xRW5WJDSURzwy gP!$φ rVt-CP QKoxo1:a?"[sA> *dr̽j?C=Kl\Zw?:ZqB0 T҉y!z-}4^8HwC%|/WV:ܪ7>mE~4ǐMעdĺx?[E8{[ܛ85!Hc꾞~zb⊦%@]4S֒13֔ }"r`*v "0k1cfIMjQ? bCzDh-EրUvD;rQP- ]G9Sa鍒(*u!-4KQ&ڄA2;ټ8W j Updbs}fC3}dz'38<E3Q]sO9T!bQk0RC"]G2AK3L:m{W#],?I6j'n6<( ?EKݐ4L߾EԶnBǝ7Y⑆#C
+Z>ֱ%U_&׭Ũ2moGn !rQIJ^Uk]=moV|gO'+z4 .,ްuF}Fac-Sl]6xF2=;2ʸAz??u\U(m2%hظn%ZZXUjxK:(M0}
+Eh *P@lIO9<Y?s{hTMКK&ubov-Q5'^0K^I3æ]n.Nf;Ѫz9i|WS.T9S­S 8t.|W߭h|SrfƵղύ:{r`=sb߻\0EfԧJL[VsO]W`/B* /RU[nS~^b7A5{-5E=|*"iQѺTg$U-w\u]ӥsM/#pʴWv?ꃉ2~Q<URLߣiVNM胫SǼZN OEc2ȧ:yk}bܜ
+k"s?y}`̇Oxo|ʛry;5[b77/غ nUλd-t͹ZWlM6Rq(ߍ)f+ѻ3$;vQ&]ߣQlu߰׻^?}+ iɓ[N/KfԠ/`sÃǛ<o#K?>3KZ;RkβB2?j|/ϝ/aӅ M׬WV9D=Tc2Yw(^aWrQGy9S W\>]Prˆ>֗'z.DbVڿnWZ`]4G_[*"s?c,at6eqk 'Ml-Vf09If[kNf^oWwO5*/`/M0bYQ֠_Z'>Y*q~{t~w7}v"GsNzzI{^[kX%W] "VL=|v}wn/~\cES<&]1lj.#=oiRx^u$wPfV4D$gBv3W<dH}K;sDo9]-W{Wjr9GGINۆiIenG- Q^z}) 2.F=~q_=V:gl=j:]3N\ s~]f!*BM[eSgO8j$͆FWebFGO^a3$Sz-S|7N%J}Flr^1U2ޣ趆kԀaa@rNjbQI~nbQ6
+endstream
+endobj
+21 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-61 -237 774 811]
+/FontName/RZRCUW+NimbusMonL-ReguObli
+/ItalicAngle -12
+/StemV 43
+/FontFile 20 0 R
+/Flags 68
+>>
+endobj
+20 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 1662
+/Length2 11975
+/Length3 532
+/Length 12869
+>>
+stream
+xweT\].-ܡqwwwwwhN=|s;̯Y:ԮsTEQ (PٛՀVnfv Rh
+rt0u
+`wjzjՄ{+jx9G[?9z>3rع
+ʚ&kr'םa4cq3)Yh6jXF9joGbqM;atC6>UBګ8.:/:=kMꮠnCI[t ]+Y/|TCe1JhR")5Gu5]0\d8jf_J*r?f̻j%͈@)>;JS_~s樐Ax3 lK @mY +n {1OSҭ+BYAlob}U)IBT[cOFsSKƫ`$^ c6/JdUԕӻ&c8nDȞidY{l% #^oUcsoƴkY)ࢦYF삱ňr'Ks+DgP?`цm}؁CHŽяY}YՒ^h:?Fi׶O5a6_:MkM!C:.^ Vݾ$}=<Oܯy~zpgJ/X?'uHV:#bYvs‹ΆR^ ?~*ƱWACBM:u
+[&vuƫrƙ:#>S'ȟ;'ID:FCGBm6c<?BJ) 4
+2 +Eev+,Y>|"2Zmr[9( kO4ƠN˩VzT:~P] 1.. ,KPMԀ/Y6"Ö0.Yn +Vί%Ԟ,e<YFF^cCN?pm!0HƭPqnngm'hӟff~y(Qܯc#*;kfтkpJ~.ѲkUkts KqR(-bkm|zV3˶*0''VӺs56^"nc]
+ܟcZjKaTt攸`ic{SoMi:Y |X*Z:9;&bt+v~1ͯsc);gb)?uo]>NGCf
+Hb8#BjJhݖRiƦl;3|m 9 ȨrM?soˆ/ YjE:4=T=6bafp˲:B+=ٜ- u;TSPF6<p [0?tO`7Sv:05 󍷶fx72"鲩軃>Qi2SKH\|
+,t:tm˷O|*J?D) @1U3/5ǡzP 2u1
+K2Kˠ ,cW?9ba7oؿF&t{}㗜ߴBH]f $ Ū-rHU^C' B.`>tXhIVSTZғ<X[;UIZD5w 7l*O?2},Dk~$J(SٿL^+*٘?o] OY&0;EYv3~CaR/4!
+pK&W&RdY0!뽺)
+NgD%M!Iw
+VZ'I<Ҫ6uvd6n/y3N6!p.a}+.
+(z1qNP.K;=W5Δ`+<*sSPa_W>6ݙ $6E!hwyN}RD-r}ntT/%bim2W6
+6B-z%9bh',7E9L'hpt@j0_AL5v!&n~0b!2_Ο6 %_]
+dF5cE&\(H2oA 3Ϭ7Mcu܋<{aʇB<*o虶 zn0Ua٘hX|!q~ަ: k(c*8
+DVuۈϰfsӑY^Z8Uk+icϙqѴG5}a,s{" g`~&Х{NR*
+8z[>H0jt^$ȅ"dw_U;_BEdt㯚I` TKh |NS<RG<C &RT܀jC1n0!Ȳ'3^'ǺԚ٦2dp(?pdPfh-hJq$`+ !a"y;bƞgd#]Ytzv@ʢ։ud,G؋*K"V#~?w5
+iCtS \i@Ծ5-yWAd:e>4=yrׁYZp#R2}քJ8!F/wY4xVw cZ-%y1ͤMD|'Sp"zd@R`Hy.k%#\1e] ~L~vK5vrh-X&#P%W
+≸9/4 ?~?I܌ciĊ9RTCOl[v^ 2ʾƔ4W3ڗLTD{tM?'1ydae Ս&o[&qeopXPk,y.D,CAĬL
+p}-k*n>'Zi:n"\}BцBYK}YxKVßm,@xĢEqY<y#$Yl "%f0=ՃU*>*J&Q4_N@'073݌d+%V9!R0Bor'ArۈQ=_/Ysa=JctGl\`fC+ ^ fWCdvG42BH&,+pfy:tyyeK'nhғ_V,}>Y`i;!nyn֞~bCQt}Ѕ}CKhFtv ]sy||.^ m1$a
+ A}`ydS,{gc ̊ĝiñdEˠ.0:ʯnqYY*DenWɢ=d0qwߚÉ˞ɫ{$pBͰk_,?T[:BFqcf`+]3VѤ?D=s}+WdeZaa ;j\/\ |5;#T> MpYevscV%@x0
+Ac(| `+:qM+,dT7T(̪wҙnFUP5BBCk,
+< nO( wTyo8'K}[-%6(o͉nmB_qm (ex߭fq)gs &}H=sqcS>Ic.?Hh `$w5iQ+V5g7EcnN
+ _
+}ɪzdFp=5^IJhSLp^3ä5zn u;<RW| ԦżVGdT.i'դUFe+*E}DC*F>M2CT/=fݪ2U\[u&,c %R|<eըu:p!R@Ikp[Iw\gHEfOQNVEt4iE*xeo,Q\=`2PFcT/RdNƖ|%NwgƬ
+NZ]կã\}@.uyc8/¢a Glݞg}*s-NFg*؃zy4Sͥ` UKbNls=k/S x"->܊4W>@7%HryaA& 1Kϔ qy%WhЀhz!dڑOTf')̿ˍI&j1./q5[iڹ8{oOWMtpF)pbFhE
+3#BĎe8U"kϸirB1q/` QdA/'
+j9׍qQ[LDLc2[
+ZȠ:_EuZjR2?fa=ueTHwjۆ(!ay?qvh6%:JF%POD_eq}^ՋZl\wk{Xd| gR+TTѠ#7z\i5Ř3:kAȐՇ^,OΖw(XL
+:R D Y֖.=)!vͳ:(WyCdb7<8xL51кGum7 9h^M/1c ,1\D;EI#/BV}E3#n[ 4PC8$gZuZ8'B|e4cEck8FU뉹?[RʁfWm:mgVڈ2e?1ѺZlFy= xr36fk#;艗?RMtlPuBufHlR~86,{ra5 qZ_IIK[.&=D0'_<+gL)o{4Ւc|vjr
+>$M8S x61"4gU%2)p *S+,d$FD憾2KX*pe泀qt@6+U nCq(9Mt>a:
+K=#B# ݟzR TJsJdV*&'rYS"~ܤӄ$Ѯ7A|iLb3ZxU}IWc zMۚ\_;v!5)6}(a'Vxl$e'3tǶýGTu@EbY9o|qHǂBh<X\\2v~u8!hY (wϧg67}%PKYF$Fyb HՕu.#
+,OFNLcذ: zqvv6}r^;'Cǂ*r=^~T?> # ^]*a==Cvv8_2KݣnzLvJ5uC03:E`@6-t fs̝]v>LS2صT^4H܌ҔÂDCalH>‟% }2>zywUwSdX9EIsfbֳ4VB*q(d!/gb67$HJ##Zf4eX_NVbOTV:\}EX:63J?`_J?~B:Hv- uJ/X}pWW(D+昌߻C3sZ-N> .CbMvw $l)|k$`eEHwA@F,2őPz`iL)L["}͔~T$WRZחdl(~ݪWP!7:L#hg4 ARx #"'2;%ӌ9k
+nʂEb<A%aİ9%,< \rEbyRsD%j\:׭ce1l\ǺrdY376}gɢ-nK[]40 q_
+vh_.=z7n#wjiJ
+J'߮UA7b<{4U!)/co%}ޜO~VkUKӌQϾ$2Rxwy co#+"?<ڽQ!7Wʆ|bK $.R,"$)6/[}d#b8smoۊzɺ ]o NS2χ#N#RoN{;R] 2ggH~яe9tV
+-UmZNr-=ܬcf5@/ę?=5l@ۃqyl1jd7}F@MT#PU0wR|Y7ާtϾd `jKS
+!s;` dןi ƽ/'-!k+i޾gQ .GQɟ +&X]F
+2>-zLrEe6L\p*'(]i+u(Ʋ5VBL6c<'HcbM>0YK˸Fjv) b+m
+m9 CQB7@yuxϭS雯ncVuƴ@bp<>Xjmز+y7cZ7v那 XS'^if 7oMLHm.6aWbXn-w
+V-4]-j*uFߍ-nYUw_!à-:lIN͜QjAuWus"[)W{v*=3! èl_6)֞p
+Ve&%Bm]ɐ:6Ѥ}\R lKJ]Lϳ/QOؕ79ZܲsPRP5.,|@iC:QAmlCL kK Ϋ;V Bcj kH2%JʵiOq(y.1IA;)/'?0*nȢTDEb{'-e>RahaqV*ّxE |ĊcUIڝvT-j3_4m`Yr| Ś+|E|.4_<#tWOaY*xlkf~ f,:]E8O
+QkYHouJڜH¬IYGOPy[ᨂJw lLGZ\0:O.ҿ7+{)-
+&Uj<&Bl'"|ozO( 34o}
+ތ ?A$;D2E{G2^B.y!'
+endstream
+endobj
+24 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-43 -278 681 871]
+/FontName/EFLDGF+NimbusMonL-Bold
+/ItalicAngle 0
+/StemV 101
+/FontFile 23 0 R
+/Flags 4
+>>
+endobj
+23 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 1638
+/Length2 17083
+/Length3 532
+/Length 18014
+>>
+stream
+xڬeX]%wqgn݂;$h
+489J|
+r_V#hd1Q:Z=YtqqJ_VswW׿zkm\
+
+juDOg7 m#1d
+Ձ%lHuEsg݂?×h&Uod*ivQL ߩD:SBWB^?[fm#$ zϝ1[~3dSɠgoAY,D\:ySP:'yHȨ~SQ@n244Dmܠf=GAٽ&BTޕ:}[UgW%on~PݚJ˹W15ľAThtնכ-!@S~5Rl#C).WHVYG֍A=JHiR $& M`MkΗlF&bT\^Q2[꜍#a?m_7cOtb ~,;tY{$边!"7 jWՖ{Qoܻ;zw".=
+ E-\*ڍ 6eFLR)_ Y _3Zu~MH_"k\D(g~B*)B' ,@jcN{ՒkG$ zԬ}\tvtIB[ %g[ BX#gX(ѝq͆T?/
+<V(9Tsժ'7dXO舴ܝ+mrLni3$l; KKVw(I Y
+> @}A+ZMtD3]zbv?T]'@S3),Q^_H~A:ƒf,\\8tYgnBb cYtօfT:eur8@lvX rÔ=*bǮ]^F+1ˋzme*{ʓGdDm {wl?~TžCe"nZv׺Iͩ84/TBTF|H2<kpO@j
+b鸎n\y:mH$CY݇ftʮd#u4[@L2ax~vĦƯS:4UY 3[c~1y,,6M Z5*?R站xآf%y/NeW _)I6lsaH§Ĭߕ#ݖLCqU_8q(r? R)XFhη1u66g5Djp gFWTlCxhGZ
+|{ИYGvs`zYk&el5m#8-SԮ|c1.ب7zQs+IE20AB(ӌϗ_Y o+ӌD}a)fjLs)B &<)󧕣wcG2m Q1Ȟ}*zVãQgdMSqv&O:gț/>4f:MiG7
+CjgY֖ 6%pho6xcs}Vy/3&{B'Wswԝ h} <S=<"*m0?)X~H+!nÑn,2k{"ItżOa1aB73&B@|OC? 1
+^}^K`S5U '`Hy[Y7={7>H,2@:,з\}2=?x-?&>x6~9?tb2 8bp&Jitf4=V~öUZdz=sxbujx]B .6uf G>q@$;ΩzIyf҅#M[oШ|?P{ iF0_5#P_X>C;#|% urWI0OYwZR[T!hWb}ɺT,=mFL|Vu!>gLZ̐!n< \ڰgi7u[l͢桮cs
++o9x;LqMl z}3IʨSoh\`n4ΦwJnrP` jƄñ!ZKT.72$gFp&$ذTӂ;k R o{5;
+hTm:*#Y /lejq=x]RVtC MTj<\L?M [QDLFC\Y _;kNvL?U."n~Rʨ eXTnT -J^ҹ\.~Nm7n4 6@Fk,ʮ:)
+gҹKN!ws2]aQ h۾1^WbS]Hf<'!hf"^|ͥb[
+XGN)DO$Z<$fi
+ 
+\Q _QY&ТG$9@%We4c PKDk\2ĢĦһDvlHZ9GKɼ9.X4JB &H
+1j<ZM]71ll Iȥ4T{tEOo[o>] :fW"Oc#:spى^su_6Y
+6;dd2tzR.B1k5<LhL#yχB.Y`~Q}޺^WC8X(gA%o3?HmOwh _6E}>pC{|&27IUԎG)w n7ar}vGnټ$ˡC
+ G\ckdmS.0݉
+)N*]T@-Ϥg
+W׍x3uA2Heԙ8|c@ᯍ?HHIJAAVtW
+N>&gϵxhȅʏ3w{ZL=Rl ߡWlLч5$eظFu|VQB@3{8qmx".Ƃ2 CW Q6QxNvX&1] d@8l;
+`a; .+Dr9y?(m{)B6<`.iFH5D1-Q˨-)9h1DŶz\(pgД]`H͑ަ
+W1d}GJpfyy0/ ',' ݚIpP5e"ؓȘӧ
+tȍk6W-b Ƥ#k ~YY>2u4,oMoWZȢ<=L
+Wդ~_sW&DNI({x-ZgI'F?jr
+G ;O2S4vɬU><vLC*̭g߮P!J-:RLH9EzAEV@KD'ňjsț:_!(#vޛSsܺAٌ]#$%Gҧ =Ngч` B8>0{⻥puxp!Nno^M^1{{*{C3,dnߪ,+Z,<>bR.Dxo){IS$2{`4!ݪI ,/.J ʔ =뤭_sL\P7i\~ +vשI=4aw
+6/F狿T~vG{e7ưNFŮqoەKڈu aQ3W5wsK*H&R3pvK9die~ ?s!,)=C+66]}kYs/9Tˬsx@Òc$(bUg1(pF\tFB$>v\CÏ"gVq1"dHa2+DBK`uyjsߗ1ft!k#?,ӱN:x{}KtB
+J>⼎ܧ4T 4,cG'1}Z9Xucu'\?gb~6H9D8q
+Iu4\+^A7L3tcK1S bYV#^?IIqBg[6(![IU"..y 瓁q yG^>OGZ[e'Trlw-|X8}5[9'2[P˘'HdYN%C'MӄvAz)y<T:v,`1B&)ZS|OY}7†}dd%'JWXZ CH{bkG]43F>HWXAu+Lckο߅e˚q7})9WpPVatƔ
+tHg:&i
+BQ+M+\NE հݡjpTΧ wWD7ʓ;@wxǘΊ%kEb+?yܲѽ-~R]*n<Q*(,#ofHDezq*zQk5huy5uo^}L>LmhEL2IS٢ćUR[Oljz9prs){EKhUE˶v
+'0[u>K$~%uvU<t T3#VI0L{ER(I/%ʇE%;wFm;ˇ}=3(px&M?@e3ڇp.hwj:P7cBD.MB?^g)F^lt >hy]:n7(@ǧkd7h|T]׍4G?Jӛҙ~Ֆ gK׍mTČ:V,/:8eX'Y?oֈU8uDĵ$& 02;p/ZK;^ǶUwWpX48tfB,oU);Ijȥ vp-{dGqe}n_.` l/!-[R*`冹poR9񂘘tPƏ21ǟRG0
+ ECq(|b{-}K_A$vϰ7ʊ#7X~HjC۪,,)(iqbt:֧Mik_uϗmr>Ɠ
+~fMMd'&}ᤩOL.i}boNv'<dѠ8{#p N9)GzAOUn#!mUùhr9~!D֢Q}.wd@sTb*{Eh#2Cu}M%ߵаN\\\/4uSh#)^"{p|gl i*Wl/a|IF #ySR+UQOp>͡@%0*A]9֣tsnw&|Rb |^U{V1M<j/'͘`|%q#TEjD#ݟLE\|p"e\BUm$t.E]IjؓF~ %Bf~:ȖiHV|P=z*(騢?h@. Nanmh7: {
+tϞPWCjU<Ѧ+5ǏYFr+1"pwp H>W\3n}/J$+j
+M_0;bǃJ]7cI)|Kz>x߰bPNTTB5 /DǦ|=ô9.)r1Ֆs.x_W!Դr
+nO5M%th+% $^tq{4K ҇k)H u .2槚6>7 o,GwD^DO^ 8u4\Xy@
+6!cLn# gۄ0&'p+e\\#U9fF%-41SPV nv*C4WQ,HŅb,
+JPu"xc<A_p٢ղdPwrzY YNJ
+>(㮵'1lT$!HD}m2tvʌvf)źjL`Poh,PBTj_ Rx<acuiXW:i.yM 7Q/;F혴ҥH& u֣$
+m p&G9XR_m (<X 2|n
+9`)W(Vi)^ʹp9y۔Y
+fF8^Xl/` qތLg:^Q I]KK?"A" H^ R3lѿE>~=ShSHz=~Dq\%`KWkVC;aq(a2?- 2fOVYN=5{p:ME{7%l:w=>AacJ"\M‹ 73ogE7 TyZHk2;W ca]RnpfOn=_@ {9eߤn].V {cDjX黨FPyAj(<ٞdw 击)ޓ!G,ѱZH`HX"-Ev/+ Mjpl:}wUȾ Rw|<أiބ;A On48j;sX͊N@bz%l<w}xg M]| ?N-b_-qx<Jmm;w!֠nP_Ϯ+DGM}J<Ɔn~2NBU#H߄0^t h`2\Ne*70۱;ӿK]Lš=7Ôl9֜Pg>fpNDY΋\M'V9Fy-~'INxvoŌ|_6
+_ #W*0)GWȁH0;9'jv rI?
+^٘R2'ԍa/50^g<y?~(T'wܱFU) JmA`]ب1+4ksTw±7[CUd],rZ$&y*}X" ֐**>!bV5y˥U30bD YGBS[yyHw)#N)HfEK8|"^=k*o"P
+N
+k(n᭙^ɨpِtF _!QrNqZ@E~Tt.ЇS>Cb-5,zxb3cuA]E[ѹ#dk(C3R+8nvbK&Q \͋0IL7E=x"#b,3`"-_^snj:Q)Sv h/s-&Hf@-, [uKf<|4(nvI+7LpD >:,FQ+vJ~f0)]-.G\{E bswʲ[iIscįѿöpymQ.Ea)D7 Vpv%~4x)[i}38lSퟝ%*:Ģk.zzdLE69;q35$O^qJ"׽0]TDo]ŏ5
+ Ob,Vh]NTfGޜV/*Gh8/愨d`'u:B 5ZVbݙS sۖj>ׁ{3h9:~YĈ.aLKc(
+Yeh+I>~my]} IB0K33<A;< Ûf|hHnX
+Tmܘ3I5msU*rsBۮɶ!454Gn1+|3l,-l=.:q#J^J"2:ӍjZ
+"zf;܍q$l!.MуĬ5릶bB-sk & ۹cFeJI0NnWJZ #`j֑Hj_M+tevf=z1LKo4T.C2K#E|Oq?V+{VĕOmǔ*W&h\if) Yo&Զz߮pX\ O2߿g<7RjrlEHv֮Aځz5(M1ODmU6PUYh5ݢ6'ٻin@
+nѶ~#u*"(c势 :GFfC2q8&3ч<f@}JBgiK_.}̨ՙ+ /
+sQC^{*?8IB/ϝ]"β **25xkֻJ
+%7%`^3ɠb Fs>}?o "[p:*l* Va$dͩ7q 9$=v)UB[DN,Q\ ax FU1b8 F9<WlQXҋa#h'r&7OU"qR . d%;>]KyM]EmsdOP_y]y&Jfȍԇ_s/ԍ̋EbXɉz}@a M
+w s=M悐 `U~nL @ZZD'aaXb7+c4ATQ,RQmcv'{f@!@nS8`a]Myp, g~ vL? \lߣݖ
+endstream
+endobj
+27 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-4 -948 1329 786]
+/FontName/AFCVQE+CMSY6
+/ItalicAngle -14.035
+/StemV 93
+/FontFile 26 0 R
+/Flags 68
+>>
+endobj
+26 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 779
+/Length2 751
+/Length3 533
+/Length 1321
+>>
+stream
+xRkPWAŵvUJE n UB*5KiPus,lva IBUyA*GkV|P.Pw=]W(\,! 0!(`BquUH90__ ȍZI
+L%:)d@,I4Py@CSb
+Qzxa4IZ )Y (/%H@*HZ
+Z^vACZWnI?N2\|Ot,ρ^#ܵ,32/~+#7sat{)">I2ug8A_UEGz4L/=bڷatC9ۘM[tK.=4*kRco~Ь56gJ^5Z?s7}FӡGjK7k6K<qZQ;k}lR
+R DW_KX9sÈP¸'gT}iKâ_:+oU٥** _>;.p1二='
+y!X~rJ!dwJf_ ?o߸wyƈ|QQ߹~KL+~朧xē1&YJ5vٸl2ÔnO&:
+Zft/4*\q|~ZTݑ|CӧI^I6+]Qd>)q%hY\sz;*>X_?!@Pg9F'
+endstream
+endobj
+36 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-61 -278 840 871]
+/FontName/XNWCOG+NimbusMonL-BoldObli
+/ItalicAngle -12
+/StemV 103
+/FontFile 35 0 R
+/Flags 68
+>>
+endobj
+35 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 1656
+/Length2 11490
+/Length3 532
+/Length 12378
+>>
+stream
+xweTm&N4=[ XN.';wwXۙo53l>OUuUwi
+ez!#5 32pt474)(DA`3kQ}02 
+)@NMKKO_.
+
+G1Ș@
+!kwJ虘P9
+δ&~ED0↏aAx
+-koΘٙ-x͸+`A'pyk>
+|Nt!ۅqYcF//nV
+7T(?g9NpU3ֺK~+u1|:GM!j4<Sڱ0|
+e>gBӠ_$ [^ l /}v?_6LVf09FXDY2iqj) {# ~wM!NIRN:l
+q?U"
+2OZ|R~9' \pa jvuP/q_!c)jKȚĺٞ5
+ u%eC
+ԘWxʏFL7 $iƢX%e:P,;I~ZdNy:1*}ɼ ]we' G?rK`Ǹۜ"kQq1j+h.X-F+GfV9U)
+ʐd:Zuz:>KgIE}\cPP~QpSVCx^[cXI,T2Wyf^1vRw? iV-Y.aK u}K^>OӤe3Dn((cA,Tu.)QJ3d"ܧi#<+)*U{`Q2ϣ@% hѫr-9b-~"IMΒks̩ 8UjQUFV|}{vݝܸsjT
+ռ1}t =[nԍS2'=_Y vcEv{Q\~C5N!Z+0yg5L9ūf+E;^ߪ/{שi-}%z
+ۋeJ)8_\f5BU7ќgf%Ww8;
+uKa
+b{2d3Ŵft-4[Mgd;WԽn獦Pu3^qbCsY7~ Mԃ/T03vK`,ecddkWXZ˚+jO^z|8+8Tf"L1/ΕgPZYJ3{ɪmcGd36Bhh{-/'FܗR7 t+rkmVlƫ<FkH+]sW*\pwtرp.WJY9inehz aVI 7$%Ohϛǚ&,CoSpfred
+z`G7DS?Q5㎀q|lVl1bI<ޚ+h#%l'b6"e1\d)1B>IG3ƙ*88hzpwwjǼgK%ޘ]8BePN#@y\CkHU.b7IL/}<gju%x8g(XS?8(h-|7MbRI<Y)ܞßԵ[h`7V.Sqd.yʾDmI;nB/ܗogif'q]nmUBAKea/.x^$ƚ(51G?@0+.تnaWANK^ zx<JY9|L2ޘD!1)t+B9?u&OVF%W.iYZFbjn_Mb~,vNi՞dC2J&]y4rOOu{v]T$ ]/kI_*8#C
+=AKӖX=}S}Dׇ^T_!cOYқW9fl,)>CIdyŔEZݧ6Իrx!d\?}O QSFGudbW)qKo;F iS_k\Ya%oCxѕ(>iUD{TwLtV/(=7(rĩJ>d ۦRA9}^>wT3p_^91#kLiRFw 1*#TO/3u?Bv%riDO}'f4R
+C {r;4tPRi9Cu.mUb7ϡ[1K/ `F-*KY.;x]/FMg&9G;Ѭw3#\nt18:1qȓ9SvoޘSgrU_79E_~P\?*
+? 47uk;镀+%`ljA^Jl.ͪLVe%!= wV}[{!<QٝҾ⾊6
+ȊVg͕IMf[ 6+!82f{i3_;-"›#bvj=9o*ӌLU;-|?$ڥ`7Rnb?u#}k;nnO
+CNsZդ]2I?| HQu63?¶żs*uqQÂnN_UJAnjrZ|R}E>zs 췂нQR%jؕm츝<RJAZy?FJ75>-Dͥk7"6}
+ȪDg^jL邂Ql1nCfs)!sm9\>gD31}(P!o5O !;!,e⹳, G*M^ո
+ .8ge0PԐ:
+>Bi4Ģ*ԚUY;x7w` ?gjªvJF;Nv[2Yʅ;ў"-pm~a [w+%)2/A}Y=$ɑT UAyp ABnӭMzȐOy|aRJ넊Hb&SkNקd<uzl(}v2PQV5WS/x܍{(N@  &4\P;/| F_[n7,b[7%6E5"3P.#]́g@IBނdS:<(U*/kW:˻DrL=lԧGQ4aǢ7Gy3ocH..[;L~1cS<16MF8?*SEC8FsU7$Fxu?I(A ӯr0QfJc!Мؐ CxKwy*{8 ('O6&9s:4}W>
+qMw;fZpeǃTEWs8 PEӓ8\7#t h; :kysb=%JGy'uUy+'
+P&Ň!vO#i⯑c"xu9dkwBPD{ Y 4'8>%/ Gqθ&AbA=1:?Kܰ 6$I.CڪA|T/&*$I&(?$ ]vfWK  )]5͞Sؒ!娃joCbDN+Ӑx[V~x'M 4\Šu~[Bq-dGAD11Q޴N7b<>֏ñm/ڱ2?f7'9ekL]ؑW$3}g }.DڢqHr4T'I)VDl0 @ck<ƟGؚ{[O-'8!F;[Ԝ8-Ae'ỴeK?xm+J>*`^KIITC%]?x{artÕq;Xxӱ< 5cX]xU[36 ubDcq*ʗlq?-,v6*IΖ_!q!K:R]?:%;e'bf'Ӕ֛e)~mPgɜyPZQFn]f)e򶴶 `U$?
+5eϮ,/CT:$93@"ih<ХZKZF_ѴOc^۶h#.
+
+!qJa
+FQNn9K6 zZ վ&Lǐ'3Ά Rm2Wې[9mjVsݢ!jv4y YXo!*ҬpB9u7'~ 0j3$+-U*v!]fյz_c:>֚[Kdi^vS
++Lb\UHvҋ'Oo^9Uyu`/6m,@4Uӧ z@,nCs _ݐ6 ?a Cw"&״6Rg7C'O
+ڊ cH`+!
+en}'LǼ"Մo&_ψ׫B&`JJuZs۽hUHr<Oq0os?ۋT
+PWf="Ź&tkw
+Y1Z8"CxW_w;r0Z)1 srw|$Dw 8CdR5= z@&V@MPbM, 0Đki»Ԥd5QG꺝c[wQ.8x#KdlsqB _LZKl" M1j*~#B|Cޔ+|LLh%#Nn>oNx͟rWk~+qH _DSR-A&ћTBZh|;k`j0ŠZ;bAf|$ê kw&g
+ܕR^;_>D!nP~/_ⱇQ2W>xofB\bJxקHu-Ϧ/H`p9>D!{..-}MRGa@0W8G:c7<8*=$彤 93FP(TRFO_pާtM~jv0yH諦#aa]Dߊdvˤ3\^`eKit.71.䭑ўx%Ⱦkڣxśzfɳ~omg)ߥfru]C>sூ]P0_vɶ26RꎠlFdHCb;^qՓ ,4*6|SrCrc8UDRQ9(9#0LUٿT(ӵ@m#s[_fFK@]Rj` 祐vD\h+.>k _V"C';|}qOU6e~*+Je mFuFte=`w%cbJ9޿z:Gq>c4n ꍘIBRT_r3q\pSShRu(  1LLjma!^-mx1C7dhB.KrCqŊ֋Q7R S^o`]cȠKg@aU 4ϰ7A>,Rk3&26Slȅv:|=kߍcV<{uϠ0h=) O:}pX,r~p 9ޛ` x0 {Agt%ú_#ai':F z^%e/oS`d$*.(ENUJ=Fd=0puu`;F [iݺ 8*.)%^?1eVUm`"Ŵx'KI*1'?Nwdjy"ÅU⏟,H"s˳iSQ M;cH_, ?KI.L>G}cԒ; LIth1G0ְUYxƻPebƧȴ3) H1sLw:3lm(P вG?ERU|]B!`7=ؽTWmNuZ T1S`e;Ƚpn4v݆51%QIBt)!87 j
+ĩ޲~l2[TvTeXVz 9$5-9vpPw?J垹(r2YZB0L=_M(nWpJ1L$uմt'Խ!~ͧP %"c3yd¯Ҡ!oC\['cogJz6#C+Pب
+6x8_tb/8Gx,]?3֠!su6`&TrgMǸq:$Zu&T)}~]Y,=53r~l'P)k K({?û'lXrJj֨?r92/;zPW/ZM8-ό:( 4mG,Z[V )@}PeK(foq&, =xUarEkԝDJ'}Q3;۴.lHTGtMmM9Io;RP F4Y+u dAs^;z Xu6;ϚŃ&RW,SgVW:dD2m~-I9#ѩy7
+d%u߫S/XԕE5– ;dDR͝8)a
+N
+endstream
+endobj
+39 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-32 -250 1048 750]
+/FontName/WQYJPP+CMMI10
+/ItalicAngle -14.04
+/StemV 72
+/FontFile 38 0 R
+/Flags 68
+>>
+endobj
+38 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 775
+/Length2 1246
+/Length3 533
+/Length 1823
+>>
+stream
+x}8ǩɜMs#ČcXRC4f<yk$jeJZKE"Wnꐲ^BQi 9C۵ױsu}ycb":a
+z{{R
+`A0ZD͓|I!f
+$ E"!1ăpr
+Ya..YmQS2h# ؒ4j+
+!D }a4TA\l56鲽K?yl83@@
+77bbLbz[-4GرY v٣qa~˝~f盞u$W5qtw8yEwݐ!Ӈ]tׯ\g{43*TecTw]C5},2FArA ?f}ź3(^._
+܅qz[6<M'*IM-Op1_n&^ ~y^,kz麑op bHiOs:**>rеR!DTO9>mM|h|qI'Ạlt{~m &7`v;FcAZ2~Gc__"K ]l"L&
+ʩH=M$.~nRU+hnK6KFm6OYF#M:II̺/?ҏEWE˾"6 Ύ Fu8K彀&#Av:Rp{^KT`R+G#O+WY 9{45fަ)< \g鯫V^tHj:3oqtۘX_N5Z8+r
+}LXn2G0V/4\Z{+6Sj*D͍HX^JU%v"qkQ*i;~}FSBw ^1
+iaS4VyC4uqqJvXSˎhm&K1l-=!*D[8d}X(MY,^Vj)<6a&0ء58ӗ{~P%8uNn:Fc)!HqُtO7Tz隞]OcJh(x1AK"̕ (f3>neUf̼޴AO[V+xV53Aw&=>Y5D=Eə6^GGɓD3[G3k t+_nK٬e" 9yZ<SgT#ea*?OH
+w<U{0ڹd%Sta0h0I$r=/ONkrfHv;7w/i} )62i~7 ,UrZL?]>Aoigf~ k4$yFx%2mҟL5 &ha>W .łh0
+'x
+endstream
+endobj
+42 0 obj
+<<
+/Type/FontDescriptor
+/CapHeight 850
+/Ascent 850
+/Descent -200
+/FontBBox[-251 -250 1009 969]
+/FontName/MWYZOO+CMR10
+/ItalicAngle 0
+/StemV 69
+/FontFile 41 0 R
+/Flags 4
+>>
+endobj
+41 0 obj
+<<
+/Filter[/FlateDecode]
+/Length1 820
+/Length2 3101
+/Length3 533
+/Length 3719
+>>
+stream
+xy8j31cٕ2-y0̢"{TlYK"K)E$f|:?:<s~>~=Ji`N.@Bʀ08\",EQ,
+E(`JDcA/
+Q1WǩN֦MTntMָCw9j
+(*~ʢDcwRW urr,
+?{>h9h<;P;NKKx2j*Zg>P-h /Uja yrἒ UMh1' ONոv;`m,&X+c<4YR~nܵ*g/l:Wp]F{8z')R.{½z|΅Nc -e R7zq\3!e#[o(a۷U/\+|hYS1NOm3]~:1[O#9\:Ӟ]*0A3چy6!&m(vsGNf+S}fZf{vq S2>ªt=rR"Ԭ~10F" '`!,B*S Ơ;;Glng8rb]׆څ|"4֍uD‘%ڀ".^.>IMkLOMDoeYY^m{,XWJ ~ٷV~4}UvD%0io݋Z}ɛ 떐}oD:,:=+mTL7JxiO:<0F+XJIaHFyk %1EDWw^GhMRCIIѺ<>#貀ǺR%0f0>^o-ۧW%?' @֙"6倸>ePE<= V"?8Wr.~j}{:ҧ)--ud}kLw$& ֬L_UoKqE7)=cBqtbd> (O,~ jfyqvRʡ谣"\[TJaS 7|=#O󖹘_PPO|Sy $Nyy}(Wұg
+lAb21a_o%&PN.ܚ҅&w[vh5
+1f6.GgFW4j>OG<az<ݐmQoXt]20=&s
+MG\yևWbX +Db;l(+ Ba(Ps-JC73`eD"d/kFÿ-'N&P|{o9ȼmlzv}JNwfHXވ=QِĴ1*zt$FdqFА"iwzpr g?/6f$k[q88SJ4='̫3|;u sS:oMQbڙUԹKnmCȵw'{.9m0qz }ּ뗣Aq,zHmX+A|rvI'kalȹ
+_&诬x?0A#뷋gܽ:6_L)Ή!pX0FO0aR5ݶw .]Brn_!?+f\7-*v\(ZӘ{^*ݫhxF0Wh0k
+8QV"׫]O
+,Q>9f|F`6%D|5°7K6̵~;"ej@f; e9őS}J#>[o]kꍶT|
+Sc/`3[}91trGafʤL
+uTVo][֚j,{)ҿ~bo[(@K{O^ּ-
+w$ݺ iy|JE⁍j$Δ
+܎j?)΃EZ檜ZjyCYW$MƳ*~P$6|lOTnc,# PQ*fp=殶RptܑΓϐ? (Ɓ(G!&
+endstream
+endobj
+1 0 obj
+<<
+/Creator( TeX output 2008.11.02:2000)
+/Producer(dvipdfm 0.13.2d, Copyright \251 1998, by Mark A. Wicks)
+/CreationDate(D:20081102200036+01'00')
+>>
+endobj
+5 0 obj
+<<
+/Type/Page
+/Resources 6 0 R
+/Contents[29 0 R 4 0 R 30 0 R 31 0 R]
+/Parent 3 0 R
+>>
+endobj
+33 0 obj
+<<
+/Type/Page
+/Resources 34 0 R
+/Contents[29 0 R 4 0 R 44 0 R 31 0 R]
+/Parent 3 0 R
+>>
+endobj
+46 0 obj
+<<
+/Type/Page
+/Resources 47 0 R
+/Contents[29 0 R 4 0 R 48 0 R 31 0 R]
+/Parent 3 0 R
+>>
+endobj
+3 0 obj
+<<
+/Type/Pages
+/Count 3
+/Kids[5 0 R 33 0 R 46 0 R]
+/MediaBox[0 0 595 842]
+>>
+endobj
+29 0 obj
+<<
+/Length 1
+>>
+stream
+
+endstream
+endobj
+31 0 obj
+<<
+/Length 1
+>>
+stream
+
+endstream
+endobj
+4 0 obj
+<<
+/Length 33
+>>
+stream
+1.00028 0 0 1.00028 72 769.82 cm
+endstream
+endobj
+50 0 obj
+<<
+>>
+endobj
+51 0 obj
+null
+endobj
+52 0 obj
+<<
+>>
+endobj
+2 0 obj
+<<
+/Type/Catalog
+/Pages 3 0 R
+/Outlines 50 0 R
+/Threads 51 0 R
+/Names 52 0 R
+>>
+endobj
+xref
+0 53
+0000000000 65535 f
+0000127296 00000 n
+0000128106 00000 n
+0000127767 00000 n
+0000127959 00000 n
+0000127460 00000 n
+0000011295 00000 n
+0000000009 00000 n
+0000019099 00000 n
+0000018900 00000 n
+0000001823 00000 n
+0000039633 00000 n
+0000039438 00000 n
+0000002961 00000 n
+0000041331 00000 n
+0000041129 00000 n
+0000003895 00000 n
+0000057268 00000 n
+0000057072 00000 n
+0000005039 00000 n
+0000075504 00000 n
+0000075301 00000 n
+0000006172 00000 n
+0000088687 00000 n
+0000088490 00000 n
+0000007309 00000 n
+0000107011 00000 n
+0000106818 00000 n
+0000008442 00000 n
+0000127859 00000 n
+0000009364 00000 n
+0000127909 00000 n
+0000011196 00000 n
+0000127561 00000 n
+0000017211 00000 n
+0000108649 00000 n
+0000108445 00000 n
+0000011356 00000 n
+0000121338 00000 n
+0000121144 00000 n
+0000012493 00000 n
+0000123463 00000 n
+0000123275 00000 n
+0000013422 00000 n
+0000014324 00000 n
+0000017089 00000 n
+0000127664 00000 n
+0000018838 00000 n
+0000017273 00000 n
+0000018783 00000 n
+0000128041 00000 n
+0000128063 00000 n
+0000128084 00000 n
+trailer
+<<
+/Size 53
+/Root 2 0 R
+/Info 1 0 R
+>>
+startxref
+128201
+%%EOF
diff --git a/Master/texmf-dist/doc/support/texcount/QuickReference.tex b/Master/texmf-dist/doc/support/texcount/QuickReference.tex
new file mode 100644
index 00000000000..8bd0fb55c97
--- /dev/null
+++ b/Master/texmf-dist/doc/support/texcount/QuickReference.tex
@@ -0,0 +1,121 @@
+\documentclass{article}
+\usepackage[latin1]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage{a4wide}
+\usepackage{times}
+
+\include{macros}
+
+
+\title{\TeXcount{}\footnote{Copyright 2008 Einar Andreas Rdland, distributed
+under the \LaTeX{} Project Public Licence (LPPL).}~
+Quick Reference Guide\\
+Version 2.1
+}
+
+\begin{document}
+
+\maketitle
+
+\section{Command line options}
+
+Syntax for running \TeXcount{}:
+\codeline{texcount \textit{[options] [files]}}
+where \code{texcount} refers to the TeXcount Perl-script, and the options may be amongst the following:
+\begin{description}
+\def\option[#1]{\item[\quad\code{#1}]}
+\def\alt#1{[#1]}
+
+\option[-v]Verbose (same as -v3).
+
+\option[-v0]No details (default).
+
+\option[-v1]Prints counted text, marks formulae.
+
+\option[-v2]Also prints ignored text.
+
+\option[-v3]Also includes comments and options.
+
+\option[-v4]Same as \code{-v3 -showstate}.
+
+\option[-showstate]Show internal states (with verbose).
+
+\option[-brief]Only prints a one line summary of the counts.
+
+\option[-total]Only give total sum, no per file sums.
+
+\option[-1]Same as specifying \code{-brief} and \code{-total}, and ensures there will only be one line of output. If used with \code{-sum}, the output will only be the total number.
+
+\option[-sub\alt{=\ldots}, -subcount\alt{=\ldots}]Generate subcounts. Valid option values are \code{none}, \code{part}, \code{chapter}, \code{section} and \code{subsection} (default), indicating at which level subcounts are generated.
+
+\option[-sum\alt{=n,n,\ldots}]Produces total sum, default being all words and formulae, but customizable to any weighted sum of the seven counts (list of weights for text words, header words, caption words, headers, floats, inlined formulae, displayed formulae).
+
+\option[-nc, -nocol]No colours (colours require ANSI).
+
+\option[-relaxed]Relaxes the rules for matching words and macro options.
+
+\option[-inc]Include tex files included in the document.
+
+\option[-noinc]Do not include included tex files (default).
+
+\option[-dir\alt{=\ldots}]Working directory, either taken from the first file given, or specified.
+
+\option[-html]Output in HTML format.
+
+\option[-htmlcore]Only HTML body contents.
+
+\option[-codes]Display an overview of the colour codes. Can be used as a separate option to only display the colour codes, or together with files to parse.
+
+\option[-nocodes]Do not display overview of colour codes.
+
+\option[-h, -?, --help, /?]Help.
+
+\option[--version]Print version number.
+
+\option[--license]License information.
+
+\end{description}
+
+
+\section{\TeXcount{} instructions embedded in \LaTeX{} documents}
+
+Instructions to \TeXcount{} can be given from within the
+\LaTeX{} document using \LaTeX{} comments on the format
+\codeline{\%TC:\textit{instruction [name] parameters}}
+where the name is use for instructions providing macro handling rules to give the name of the macro or group for which the rule applies.
+
+\begin{description}\def\option#1{\item[\bigcode{#1}]}
+
+\option{ignore}Indicates start of a region to be ignored. End region with the TC-instruction \code{endignore}.
+
+\option{break \textit{title}}Break point which initiates a new subcount. The title is used to identify the following region in the summary output.
+
+\end{description}
+
+\subsection{Adding macro handling rules}
+
+The macro handling rules all take the format
+\codeline{\%TC:\textit{instruction name parameters}}
+where the name indicates the macro (with backslash) or group name for which the rule applies.
+
+\begin{description}\def\option[#1]{\item[\bigcode{#1}]}
+
+\option[macro]Define macro handling rule for specified macro. Takes one parameter which is either an integer or a \code{[]}-enclosed array of integers (e.g. \code{[0,1,0]}). An integer value $n$ indicates that the $n$ first parameters to the macro should be ignored. An array of length $n$ indicates that the first $n$ parameters should be handled, and the numbers of the array specifies the parsing status (see below) with which they should be parsed. Giving the number $n$ as parameter is equivalent to giving an array of $n$ zeroes (\code{[0,\ldots,0]}) as zero is the parsing status for ignoring text.
+
+\option[macroword]This defines the given macro to represent a certain number of words, where the number is given as the parameter.
+
+\option[header]Define macro to give a header. This is specified much as the macro rule. The added effect is that the header counter is increase by 1. Note, however, that you should specify a parameter array, otherwise none of the parameters will be parsed as header text. The parser status for header text is 2, so a standard header macro that uses the first parameter as header should be given the parameter \code{[2]}.
+
+\option[breakmacro]Specify that the given macro should cause a break point. Defining it as a header macro does not do this, nor is it required of a break point macro that it be a header (although I suppose in most cases of interest it will be).
+
+\option[group]This specifies a begin-end group with the given name (no backslash). It takes two further parameters. The first parameter speficies the macro rule following \code{\bs{begin}\{\textit{name}\}}. The second parameter specifies the parser status with which the contents should be parsed: e.g. $1$ for text (default rule), $0$ to ignore, $-1$ to specify a float (table, group, etc.) for which text should not be counted but captions should, $6$ and $7$ for inline or displated math.
+
+\option[floatinclude]This may be used to specify macros which should be counted when within float groups. The handling rules are spefified as for \code{macro}, but like with \code{header} an array parameter should be provided and parameters that should be counted as text in floats should be specified by parsing status 3. Thus, a macro that takes one parameter which should be counted as float/caption text should take the parameter \code{[3]}.
+
+\option[preambleinclude]The preamble, i.e. text between \code{\bs{documentclass}} and \code{\bs{begin}\{document\}}, if the document contains one, should generally not be included in the word count. However, there may be definitions, e.g. \code{\bs{title}\{title text\}}, that should still be counted. In order to be able to include these special cases, there is a preambleinclude rule in which one may speficy handling rules for macros within the preamble. Again, the rule is speficied like the \code{macro} rules, but since the default is to ignore text the only relevant rules to be specified require an array.
+
+\option[fileinclude]By default, \TeXcount{} does not automatically add files included in the document using \code{\bs{input}} or \code{\bs{include}}, but inclusion may be turned on by using the option \code{-inc}. If other macros are used to include files, these may be specifed by adding fileinclude rules for these macros. The specification takes one parameter: 0 if the file name should be used as provided, 1 if file type \code{.tex} should be added to files without a file type, and 2 if the file tyle \code{.tex} should always be added.
+
+\end{description}
+
+\end{document}
diff --git a/Master/texmf-dist/doc/support/texcount/README b/Master/texmf-dist/doc/support/texcount/README
index fb8d53764fc..45512130d2f 100644
--- a/Master/texmf-dist/doc/support/texcount/README
+++ b/Master/texmf-dist/doc/support/texcount/README
@@ -1,8 +1,9 @@
-TeXcount.pl is a Perl script that counts the number of words in the
+TeXcount is a Perl script that counts the number of words in the
text of LaTeX files. It has rules for handling most of the common
macros and provides colour coded output indicating which parts have
been counted. Go to
http://folk.uio.no/einarro/Comp/texwordcount.html
for more information or to access the script online as a web service.
-The package is distributed under the LaTeX Project Public License.
+The package, i.e. the script and all accompanying files, is
+distributed under the LaTeX Project Public License.
diff --git a/Master/texmf-dist/doc/support/texcount/TeXcount.pdf b/Master/texmf-dist/doc/support/texcount/TeXcount.pdf
index c4dad88f01e..72f71722a9c 100644
--- a/Master/texmf-dist/doc/support/texcount/TeXcount.pdf
+++ b/Master/texmf-dist/doc/support/texcount/TeXcount.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/support/texcount/TeXcount.tex b/Master/texmf-dist/doc/support/texcount/TeXcount.tex
index a460d8be924..3ec27f73368 100644
--- a/Master/texmf-dist/doc/support/texcount/TeXcount.tex
+++ b/Master/texmf-dist/doc/support/texcount/TeXcount.tex
@@ -8,21 +8,12 @@
%\parindent=0pt\parskip=8pt
-%TC:macroword \TeXcount 1
-\newcommand\TeXcount{{\TeX}count}
-
-\newcommand\code[1]{\texttt{\small#1}}
-\newcommand\bigcode[1]{\texttt{#1}}
-\newcommand\codeline[1]{\begin{quote}\code{#1}\end{quote}}
-\newcommand\bs[1]{$\backslash$#1}
-\newcommand\URL[1]{\texttt{\small #1}}
-
-%TC:macro NB 1
-\newcommand\NB[1]{\marginpar{\textsf{\tiny#1}}}
\title{\TeXcount\footnote{Copyright 2008 Einar Andreas Rdland, distributed
under the \LaTeX{} Project Public Licence (LPPL).}\\
-Perl script for counting words in \LaTeX{} documents}
+\Large
+Perl script for counting words in \LaTeX{} documents\\
+Version 2.1}
\author{Einar Andreas Rdland}
\begin{document}
@@ -71,7 +62,7 @@ In general, while \TeXcount{} does the parsing in some detail, it does not do it
Another issue is that, since \TeXcount{} does not know how to expand macros, it cannot handle macros like \code{\bs{maketitle}}. Instead, it will count \code{\bs{title}\{title text\}} when it occurs.
-For users of languages containing letters other than A to Z, there may be an additional challenge. The script relies on Perl to recognize words as sequence of letters, and must therefore know which characters are considered to be letters. The Perl locale may be changed (as of now this is hard-coded!) to accommodate this, but this does not work for special letters encoded using \TeX{} or \LaTeX{} macros or codes: e.g. \code{\bs{aa}} and \code{\bs{"}a} will not be understood to be letters in the present implementation, whereas \code{\aa} and \code{\"a} will.
+For users of languages containing letters other than A to Z, there may be an additional challenge. The script relies on Perl to recognize words as sequence of letters, and must therefore know which characters are considered to be letters. The Perl locale may be changed (as of now this is hard-coded!) to accommodate this, but this does not work for special letters encoded using \TeX{} or \LaTeX{} macros or codes: e.g. \code{\bs{aa}} and \code{\bs{"}a} will not be understood to be letters in the present implementation, whereas \code{\aa} and \code{\"a} will. I have added a relaxed mode where some special character and character modifying macros are allowed as parts of words, which may be activated with the option \code{-relaxed}.
\section{Syntax and options}
@@ -87,45 +78,103 @@ Under Windows, running \code{texcount} from the command line suffices if \code{t
Alternatively, if the above methods do not work, you may have to execute it more exclicitly under Perl using \code{perl texcount.pl}. You then need to have the \code{perl} executable file in the path or give the explicit path.
I will simply write \code{texcount} in this manual for the code to execute the script. Then, the syntax becomes
-\codeline{texcount [options] [files]}
+\codeline{texcount \textit{[options] [files]}}
where the options may be amongst the following:
-\begin{description}\def\option[#1]{\item[\quad\code{#1}]}
-\option[-v]Verbose (same as -v3)
-\option[-v0]No details (default)
-\option[-v1]Prints counted text, marks formulae
-\option[-v2]Also prints ignored text
-\option[-v3]Also includes comments and options
-\option[-v4]Same as \code{-v3 -showstate}
-\option[-showstate]Show internal states (with verbose)
-\option[-brief]Only prints a one line summary of the counts
-\option[-nc, -nocol]No colours (colours require ANSI)
-\option[-inc]Include tex files included in the document
-\option[-noinc]Do not include included tex files (default)
-\option[-html]Output in HTML format
-\option[-htmlcore]Only HTML body contents
-\option[-h, -?, --help, /?]Help
-\option[--version]Print version number
-\option[--license]License information
+\begin{description}
+\def\option[#1]{\item[\quad\code{#1}]}
+\def\alt#1{[#1]}
+
+\option[-v]Verbose (same as -v3).
+
+\option[-v0]No details (default).
+
+\option[-v1]Prints counted text, marks formulae.
+
+\option[-v2]Also prints ignored text.
+
+\option[-v3]Also includes comments and options.
+
+\option[-v4]Same as \code{-v3 -showstate}.
+
+\option[-showstate]Show internal states (with verbose).
+
+\option[-brief]Only prints a one line summary of the counts.
+
+\option[-total]Only give total sum, no per file sums.
+
+\option[-1]Same as specifying \code{-brief} and \code{-total}, and ensures there will only be one line of output. If used with \code{-sum}, the output will only be the total number.
+
+\option[-sub\alt{=\ldots}, -subcount\alt{=\ldots}]Generate subcounts. Valid option values are \code{none}, \code{part}, \code{chapter}, \code{section} and \code{subsection} (default), indicating at which level subcounts are generated.
+
+\option[-sum\alt{=n,n,\ldots}]Produces total sum, default being all words and formulae, but customizable to any weighted sum of the seven counts (list of weights for text words, header words, caption words, headers, floats, inlined formulae, displayed formulae).
+
+\option[-nc, -nocol]No colours (colours require ANSI).
+
+\option[-relaxed]Relaxes the rules for matching words and macro options.
+
+\option[-inc]Include tex files included in the document.
+
+\option[-noinc]Do not include included tex files (default).
+
+\option[-dir\alt{=\ldots}]Working directory, either taken from the first file given, or specified.
+
+\option[-html]Output in HTML format.
+
+\option[-htmlcore]Only HTML body contents.
+
+\option[-codes]Display an overview of the colour codes. Can be used as a separate option to only display the colour codes, or together with files to parse.
+
+\option[-nocodes]Do not display overview of colour codes.
+
+\option[-h, -?, --help, /?]Help.
+
+\option[--version]Print version number.
+
+\option[--license]License information.
+
\end{description}
If more than one file is given, \TeXcount{} will perform the count on each of them printing the results for each, then print the total sum at the end.
-\subsection{Details}
+\subsection{Parsing details}
-By selecting one of the \code{-v} options, you can choose how much detail is printed. This is useful for checking what \TeXcount{} counts.
+By selecting one of the \code{-v} options, you can choose how much detail is printed. This is useful for checking what \TeXcount{} counts. The option \code{-showstate} shows the internal state and is for debugging purposes only.
-The output is colour coded with counted text coloured blue, other colours for other contexts. The colour coding is made using ANSI colour codes. These should work when printed directly to Linux xterm window, but need not work if piped through \code{more} or \code{less}: with \code{less} you need to use the option \code{-r} for the colours to be shown correcly. Under Windows or other operating systems, the ANSI colour codes cannot be expected to work, in which case the option \code{-nocol} (\code{-nc}) may be used to turn off colour coding; instead I recommend using HTML output which can be viewed in a browser.
+The output is colour coded with counted text coloured blue, other colours for other contexts. The colour coding is made using ANSI colour codes. These should work when printed directly to Linux xterm window, but need not work if piped through \code{more} or \code{less}: with \code{less} you need to use the option \code{-r} for the colours to be shown correcly.
+
+Under Windows or other operating systems, the ANSI colour codes cannot be expected to work, in which case the option \code{-nocol} (\code{-nc}) may be used to turn off colour coding; instead I recommend using HTML output which can be viewed in a browser.
To print the details encoded as HTML code, use the option \code{-html}; alternatively, with \code{-htmlcore} only the HTML body is printed. On Windows, I suggest using the options \code{-html -v} to get full detail, save this to a HTML file, e.g. using
\codeline{texcount -html -v texfile.tex > details.html}
and then view the details.html file in a browser.
+\subsection{Summary information}
+
+By default, \TeXcount{} outputs counts of text words, header words, caption words, number of headers, number of floats/figures, number of inlined formulae, and number of displayed formulae, and lists each of these counts. To shorten this to a one-line format, specify \code{-brief}.
+
+To get \TeXcount{} to produce a total count, specify \code{-sum}: this will compute the sum of all words plus the number of formulae. A customized sum may be computed by speficying \code{-sum=n,n,\ldots} with up to seven numbers separated by commas giving the weight (0=don't count, 1=count once) of each of the seven counts: e.g. the default is equivalent to \code{-sum=1,1,1,0,0,1,1}. To count words only, use \code{-sum=1,1,1}. Higher weights may also be used, e.g. to count displayed formulae or floats/figures as a given number of words.
+
+Specifying \code{-sum} has two main effects: the cumulative sum is added to the output in verbose formats, and the sum is added to the summary. If combined with \code{-brief}, the option \code{-total} is automatically set, resulting in a one line output containing only the total sum.
+
+For adding subcounts e.g. by sections, the option \code{-sub} (or \code{-subcount}) may be used. By default, this produces subcounts by part, chapter, section and subsection which are listed in a brief format. One may, however, specify \code{-sub=} followed by \code{part}, \code{chapter}, \code{section}, or \code{subsection} (default when given without value). Break points which initiate a new subcount may also be specified within the \LaTeX{} document using \code{\%TC:break name}.
+
+If included files are included in the count (\code{-inc}), counts per file will be produced followed by a total count. To suppress per file counts, the option \code{-total} may be used.
+
\subsection{Parsing options}
-If the option \code{-inc} is used, \TeXcount{} will automatically count documents that are included (using \code{\bs{input}} or \code{\bs{include}}. As when giving a list of files to count, it will print the sum per file and a total sum at the end.
+\TeXcount{} uses regular expressions to identify words and macro options. By default, these are moderately strict, but can be relaxed using the option \code{-relaxed}. This allows more general document elements to be identified as words or macro options, which may sometimes be desired, but may also have undesirable effects, so check the verbose output to verify that \TeXcount{} has counted the appropriate elements.
+
+Macro options, i.e. \code{[\ldots]} after macros and macro parameters are ignored. Since \TeXcount{} has no specific knowledge of which macros take options, this is a general rule. In order to avoid that uses of [\ldots] that are not macro options are mistaken as such, \TeXcount{} makes some restrictions on what may be contained in such an option. By default, this restriction is relatively strict under the assumption that it is better to count a few macro options as words than risk large fragments of text to be ignored. However, if your document contains macro options with more complicated values (e.g. certain special characters or macros), using \code{-relaxed} may help handle these correctly.
+
+By default, \TeXcount{} does not allow special characters or macros to be part of words. This may cause problems if character modifiers or some special characters are used which are entered as macros. The \code{-relaxed} option makes the word recognition regular expression somewhat more general.
-The default is \code{-noinc} indicating that included documents are not counted.
+\subsection{File inclusion}
+If the option \code{-inc} is used, \TeXcount{} will automatically count documents that are included (using \code{\bs{input}} or \code{\bs{include}}. As when giving a list of files to count, it will print the sum per file and a total sum at the end. The default is \code{-noinc} indicating that included documents are not counted.
+
+By default, \TeXcount{} assumes paths are relative to the working directory. Alternatively, an explicit path may be given using \code{-dir=path}. Note that the path must end in the path delimiter symbol (depending on the operating system, \code{/} under Linux, \textbackslash under Windows). If only \code{-dir} is used, the path of the first file given will be used.
+
+Note that included documents are analysed as separate files: the text of included documents are thus not included where the \code{\bs{input}} or \code{\bs{include}} is located. This has two consequences. First, since word counts are produced per file, subcounts f.ex. by chapter will only include the text in the same file as the \code{\bs{chapter}} macro. Secondly, if TC-instructions to \TeXcount{} are embedded in the \LaTeX{} document, e.g. defining additional macro handling rules, these take effect in the order they are parsed by \TeXcount{}. Since included documents are parsed after the parent document, definitions in the parent document will be in effect for the included documents; definitions made in the included documents will only be in effect for subsequently included documents, not in the parent or previously included documents.
\section{What \TeXcount{} counts}
@@ -150,9 +199,9 @@ A very few rules are hard-coded, e.g. that text between \code{\bs{documentclass}
\TeXcount{}, the reason being that the rule originally only gave the number of
parameters to ignore following a given macro.)
-\item[header]Macros that are specified to be counted as headers. In fact, this only indicates that the macro should cause the number of headers to be increased by one; a rule is added to the macro-rule to count the following parameter as header text.
+\item[header]Some macros are specified to be counted as headers. This initially only indicates that the macro should cause the number of headers to be increased by one, but an additional rule is added to the macro-rule to count the following parameter as header text.
-\item[group]For groups enclosed by \code{\bs{begin}\{\textit{name}\}} and \code{\bs{end}\{\textit{name}\}}, there are rules specifying how the contents should be interpreted. A macro rule is added for \code{begin\textit{name}} (without the backslash!) which is \TeXcount{}'s internal representation of \code{\bs{begin}\{\textit{name}\}}.
+\item[group]For groups enclosed by \code{\bs{begin}\{\textit{name}\}} and \code{\bs{end}\{\textit{name}\}}, there are rules specifying how the contents should be interpreted. A macro rule is added for \code{begin\textit{name}} (without the backslash!) which is \TeXcount{}'s internal representation of \code{\bs{begin}\{\textit{name}\}}. Some special characters will be ignored if following \code{\textit{name}}, e.g. \code{\bs{begin}\{equation*\}} will be treated as \code{\bs{begin}\{equation\}} since \code{*} is ignored.
\item[macroword]This type of rule indicates that the macro itself represents one or more words. Initially, \code{\bs{LaTeX}} and \code{\bs{TeX}} are defined with values 1 indicating that each represents one word.
@@ -160,7 +209,7 @@ parameters to ignore following a given macro.)
\item[float inclusion]Within floats (begin-end groups defined with parsing status $-1$) there may be texts that should still be counted: in particular captions. These are specified with the float inclusion rule.
-\item[file include]If \code{-inc} is specified, included files will also be parsed and the total presented at the end. Initially, \code{\bs{input}} and \code{\bs{include}} trigger file inclusion, but more macros may be added here.
+\item[file include]If \code{-inc} is specified, included files will also be parsed and the total presented at the end. Initially, \code{\bs{input}} and \code{\bs{include}} trigger file inclusion, but more file inclusion macros may be added.
\end{description}
@@ -177,7 +226,34 @@ More critically, since \TeXcount{} does not really know which macros take option
More advanced macros are not supported and can potentially confuse \TeXcount{}. In partcular, if you define macros that contain unbalanced begin--end groups, this will cause problems as \TeXcount{} needs to keep track of these to know where different groups start and end.
-\section{Adding your own rules}
+\section{\TeXcount{} instructions in the \LaTeX{} document}
+
+It is possible to give some instructions to \TeXcount{} from within the
+\LaTeX{} document. The general format of these instructions are
+\codeline{\%TC:\textit{instruction [name] parameters}}
+where the name parameter is used with macro handling instructions to specify the macro or group name for which the rule applies.
+
+Note that the comment should be on a separate line, and that instructions are case sensitive.
+
+\subsection{Ignoring segments of the file}
+
+The TC-instruction \code{ignore}, later canceled by \code{endignore}, may be used to turn of all counting in a segment of the \LaTeX{} file. The ignored segment should thus be started by
+\codeline{\%TC:ignore}
+end ended by
+\codeline{\%TC:endignore}
+causing all text inbetween to be ignored. Note that \TeXcount{} still parses this text and may be affected by unbalanced brackets.
+
+\subsection{Adding subcount break points}
+
+By specifying \code{-sub}, \TeXcount{} can produce subcounts, e.g. per section. Alternatively, or in addition, explicit break points can be entered in the \LaTeX{} document using the TC-instruction \code{break}. These take the form:
+\codeline{\%TC:break \textit{title}}
+A title (or name) may be given to identify the break point.
+
+If you define new section macros or macros you wish to cause a break point, these may be specified using the TC-instruction \code{breakmacro}:
+\codeline{\%TC:breakmacro \textit{macro} \textit{label}}
+This defines the given macro to cause a break point, and uses the given label to indicate the type of break (e.g. Section, Chapter, etc.).
+
+\subsection{Adding macro handling rules}
Adding your own macro handling rules is relatively simple. Although editing the script is possible, and not too difficult, this has the disadvantage that the modifications will be lost if updating to a new version of \TeXcount. A better and more flexible solution is to include instructions to \TeXcount{} in the \LaTeX{} documents, alternatively to make a definition file in which new macro handling rules are defined.
@@ -193,9 +269,13 @@ The instructions may be one of the following:
%
\begin{description}\def\option[#1]{\item[\bigcode{#1}]}
-\option[macro]Takes one parameter which is either an integer or a \code{[]}-enclosed array of integers (e.g. \code{[0,1,0]}). An integer value $n$ indicates that the $n$ first parameters to the macro should be ignored. An array of length $n$ indicates that the first $n$ parameters should be handled, and the numbers of the array specifies the parsing status (see below) with which they should be parsed. Giving the number $n$ as parameter is equivalent to giving an array of $n$ zeroes (\code{[0,\ldots,0]}) as zero is the parsing status for ignoring text.
+\option[macro]Define macro handling rule for the given macro. Takes one parameter which is either an integer or a \code{[]}-enclosed array of integers (e.g. \code{[0,1,0]}). An integer value $n$ indicates that the $n$ first parameters to the macro should be ignored. An array of length $n$ indicates that the first $n$ parameters should be handled, and the numbers of the array specifies the parsing status (see below) with which they should be parsed. Giving the number $n$ as parameter is equivalent to giving an array of $n$ zeroes (\code{[0,\ldots,0]}) as zero is the parsing status for ignoring text.
+
+\option[macroword]This defines the given macro to represent a certain number of words, where the number is given as the parameter.
+
+\option[header]Define macro to give a header. This is specified much as the macro rule. The added effect is that the header counter is increase by 1. Note, however, that you should specify a parameter array, otherwise none of the parameters will be parsed as header text. The parser status for header text is 2, so a standard header macro that uses the first parameter as header should be given the parameter \code{[2]}.
-\option[header]This is specified much as the macro rule. The added effect is that the header counter is increase by 1. Note, however, that you should specify a parameter array, otherwise none of the parameters will be parsed as header text. The parser status for header text is 2, so a standard header macro that uses the first parameter as header should be given the parameter \code{[2]}.
+\option[breakmacro]Specify that the given macro should cause a break point. Defining it as a header macro does not do this, nor is it required of a break point macro that it be a header (although I suppose in most cases of interest it will be).
\option[group]This specifies a begin-end group with the given name (no backslash). It takes two further parameters. The first parameter speficies the macro rule following \code{\bs{begin}\{\textit{name}\}}. The second parameter specifies the parser status with which the contents should be parsed: e.g. $1$ for text (default rule), $0$ to ignore, $-1$ to specify a float (table, group, etc.) for which text should not be counted but captions should, $6$ and $7$ for inline or displated math.
@@ -203,7 +283,7 @@ The instructions may be one of the following:
\option[preambleinclude]The preamble, i.e. text between \code{\bs{documentclass}} and \code{\bs{begin}\{document\}}, if the document contains one, should generally not be included in the word count. However, there may be definitions, e.g. \code{\bs{title}\{title text\}}, that should still be counted. In order to be able to include these special cases, there is a preambleinclude rule in which one may speficy handling rules for macros within the preamble. Again, the rule is speficied like the \code{macro} rules, but since the default is to ignore text the only relevant rules to be specified require an array.
-\option[fileinclude]By default, \TeXcount{} does not automatically add files included in the document using \code{\bs{input}} or \code{\bs{include}}, but inclusion may be turned on by using the option \code{-inc}. If other macros are used to include files, these may be specifed by adding fileinclude rules for these macros. The specification takes one parameter: 1 if filetype \code{.tex} should be added if the file is without a filetype, 0 if it should not.
+\option[fileinclude]By default, \TeXcount{} does not automatically add files included in the document using \code{\bs{input}} or \code{\bs{include}}, but inclusion may be turned on by using the option \code{-inc}. If other macros are used to include files, these may be specifed by adding fileinclude rules for these macros. The specification takes one parameter: 0 if the file name should be used as provided, 1 if file type \code{.tex} should be added to files without a file type, and 2 if the file tyle \code{.tex} should always be added.
\end{description}
diff --git a/Master/texmf-dist/doc/support/texcount/macros.tex b/Master/texmf-dist/doc/support/texcount/macros.tex
new file mode 100644
index 00000000000..09e304c736f
--- /dev/null
+++ b/Master/texmf-dist/doc/support/texcount/macros.tex
@@ -0,0 +1,39 @@
+%% LaTeX macros
+
+%TC:macroword \TeXcount 1
+\newcommand\TeXcount{{\TeX}count}
+
+\newcommand\code[1]{\texttt{\small#1}}
+\newcommand\bigcode[1]{\texttt{#1}}
+\newcommand\codeline[1]{\begin{quote}\code{#1}\end{quote}}
+\newcommand\bs[1]{\textbackslash#1}
+\newcommand\URL[1]{\texttt{\small #1}}
+
+%TC:macro NB 1
+\newcommand\NB[1]{\marginpar{\textsf{\tiny#1}}}
+
+
+\makeatletter
+
+\renewcommand\@maketitle{%
+\newpage\null\vskip 2em%
+\begin{center}%
+\let\footnote\thanks
+{\LARGE \@title \par}%
+\end{center}%
+\par
+\vskip 1.5em
+}
+
+\renewcommand\abstractname{ABSTRACT}
+\renewenvironment{abstract}{%
+ \begin{center}%
+ {\bfseries\large\abstractname\vspace{-.5em}\vspace{\z@}}%
+ \end{center}%
+ \vskip 4pt
+ \bfseries
+}{
+\vskip 0.5em
+}
+
+\makeatother
diff --git a/Master/texmf-dist/scripts/texcount/TeXcount.pl b/Master/texmf-dist/scripts/texcount/TeXcount.pl
index 1ed70fc8a56..8b68e4984c0 100755
--- a/Master/texmf-dist/scripts/texcount/TeXcount.pl
+++ b/Master/texmf-dist/scripts/texcount/TeXcount.pl
@@ -2,15 +2,33 @@
use strict;
use warnings;
use Term::ANSIColor;
-#--- --- ---#
use POSIX qw(locale_h);
use locale;
setlocale(LC_CTYPE,"no_NO");
-my $versionnumber="2.0";
-my $versiondate="2008 Feb 10";
+my $versionnumber="2.1";
+my $versiondate="2008 Nov 02";
-#--- --- ---#
+###### Set CMD specific settings and variables
+
+# Options and states
+my $verbose=0;
+my $showcodes=1;
+my $showstates=0;
+my $showsubcounts=0;
+my $htmlstyle=0;
+my $includeTeX=0;
+my $briefsum=0;
+my $totalflag=0;
+my @sumweights;
+my $globalworkdir="";
+
+# Global variables
+my $blankline=0;
+my @filelist;
+my $workdir;
+
+###### Set global settings and variables
### Macros for headers
# Macros that identify headers: i.e. following token or
@@ -109,10 +127,10 @@ my %TeXgroup=('document'=>1,'letter'=>1,'titlepage'=>0,
my %TeXfloatinc=('\caption'=>[3]);
### Macros for including tex files
-# Allows \macro{file} or \macro file. If the value is 1, the filetype .tex will
-# be added if file is without a filetype; if the value is 0, this will not be
-# done.
-my %TeXfileinclude=('\input'=>0,'\include'=>1);
+# Allows \macro{file} or \macro file. If the value is 0, the filename will
+# be used as is; if it is 1, the filetype .tex will be added if the
+# filename is without filetype; if it is 2, the filetype .tex will be added.
+my %TeXfileinclude=('\input'=>1,'\include'=>2);
### Count labels
# Labels used to describe the counts
@@ -120,113 +138,284 @@ my @countlabel=('Files','Words in text','Words in headers',
'Words in float captions','Number of headers','Number of floats',
'Number of math inlines','Number of math displayed');
-# Styles
+### Break points
+# Definition of macros that define break points that start a new subcount.
+# The values given are used as labels.
+my %BreakPointsOptions;
+$BreakPointsOptions{'none'}={};
+$BreakPointsOptions{'part'}={%{$BreakPointsOptions{'none'}},'\part'=>'Part'};
+$BreakPointsOptions{'chapter'}={%{$BreakPointsOptions{'part'}},'\chapter'=>'Chapter'};
+$BreakPointsOptions{'section'}={%{$BreakPointsOptions{'chapter'}},'\section'=>'Section'};
+$BreakPointsOptions{'subsection'}={%{$BreakPointsOptions{'section'}},'\subsection'=>'Subsection'};
+$BreakPointsOptions{'default'}=$BreakPointsOptions{'subsection'};
+my %BreakPoints=%{$BreakPointsOptions{'none'}};
+
+### Print styles
+# Definition of different print styles: maps of class labels
+# to ANSI codes. Class labels are as used by HTML styles.
my @STYLES=();
my %STYLE;
$STYLES[0]={'error'=>'bold red'};
$STYLES[1]={%{$STYLES[0]},
'word1'=>'blue','word2'=>'bold blue','word3'=>'blue',
'grouping'=>'red','document'=>'red','mathgroup'=>'magenta',
- 'state'=>'cyan underline'};
+ 'state'=>'cyan underline','sumcount'=>'yellow'};
$STYLES[2]={%{$STYLES[1]},
- 'word0'=>'yellow','word-1'=>'yellow',
'command'=>'green','exclgroup'=>'yellow','exclmath'=>'yellow',
'ignore'=>'cyan'};
$STYLES[3]={%{$STYLES[2]},
- 'tc'=>'bold yellow','comment'=>'yellow','option'=>'yellow','fileinclude'=>'bold green'};
+ 'tc'=>'bold yellow','comment'=>'yellow','option'=>'yellow',
+ 'fileinclude'=>'bold green'};
$STYLES[4]={%{$STYLES[3]}};
-# Options and states
-my $verbose=0;
-my $showstates=0;
-my $htmlstyle=0;
-my $blankline=0;
-my $includeTeX=0;
-my $briefsum=0;
+### Word regexp pattern list
+# List of regexp patterns that should be analysed as words.
+my $specialchars='\\\\(ae|AE|o|O|aa|AA)';
+my $modifiedchars='\\\\[\'\"\`\~\^\=](\w|\{\w\})';
+my @WordPatterns=('(\w+\.)+\w+\.?','\w+([\-\']\w+)*');
+my @WordPatternsRelaxed=('([\w\-\']|'.$modifiedchars.'|'.$specialchars.'(\{\})?|\{'.$specialchars.'\})+');
-#--- --- ---#
+### Macro option regexp list
+# List of regexp patterns to be gobbled as macro option in and after
+# a macro.
+my @MacroOptionPatterns=('\[(\w|[,\-\s\~\.\:\;\+\?\*\_\=])*\]');
+my @MacroOptionPatternsRelaxed=('\[[^\[\]\n]*\]');
-## SHORT HELP AND INFO
-if (!defined @ARGV) {
- print_version();
- print_syntax();
- print_reference();
- exit;
-} elsif ($ARGV[0]=~/^(\-(h|\?|\-?help)|\/\?)$/) {
- print_help();
- exit;
-} elsif ($ARGV[0]=~/^\-?\-version$/) {
- print_version();
- exit;
-} elsif ($ARGV[0]=~/^\-?\-license$/) {
- print_license();
- exit;
-}
-
-# PROCESS ARGUMENTS AND FILES
-my $totalcount=new_count();
-my @toplevelfiles;
-my @filelist;
-foreach my $arg (@ARGV) {
- if ($arg eq '-noinc') {$includeTeX=0; next;}
- if ($arg eq '-inc') {$includeTeX=1; next;}
- if ($arg eq '-brief') {$briefsum=1; next;}
- if ($arg eq '-v0') {$verbose=0; next;}
- if ($arg eq '-v1') {$verbose=1; next;}
- if ($arg eq '-vv' || $arg eq '-v2') {$verbose=2; next;}
- if ($arg eq '-vvv' || $arg eq '-v3' || $arg eq '-v') {$verbose=3; next;}
- if ($arg eq '-vvvv' || $arg eq '-v4') {$verbose=3; $showstates=1; next;}
- if ($arg =~ /^\-showstate/ ){$showstates=1; next;}
- if ($arg =~ /^\-html/ ) {
- $ENV{'ANSI_COLORS_DISABLED'} = 1;
- $htmlstyle = $arg eq '-htmlcore' ? 1 : 2;
- if ($htmlstyle>1) {html_head();}
- next;
- }
- if ($arg=~/^\-(nocol|nc$)/) {
- $ENV{'ANSI_COLORS_DISABLED'} = 1;
- next;
- }
- if ($arg=~/^\-/) {
- print 'Invalid opton '.$arg."\n";
+###### Main script
+
+###################################################
+
+MAIN(@ARGV);
+
+###################################################
+
+
+#########
+######### Main routines
+#########
+
+# MAIN ROUTINE: Handle arguments, then parse files
+sub MAIN {
+ my @args=@_;
+ my @toplevelfiles=Parse_Arguments(@args);
+ Apply_Options();
+ if (scalar(@toplevelfiles)==0) {
+ if ($showcodes>1) {print_help_style();}
+ else {print_error("No files specified.","p","error");}
+ } else {
+ conditional_print_help_style();
+ my $totalcount=parse_file_list(@toplevelfiles);
+ conditional_print_total($totalcount);
+ }
+ Close_Output();
+}
+
+# Checks arguments, exits on exit condition
+sub Check_Arguments {
+ my @args=@_;
+ if (!@args) {
+ print_version();
print_syntax();
+ print_reference();
+ exit;
+ } elsif ($args[0]=~/^(\-?\-(h|\?|help)|\/(\?|h))$/) {
+ print_help();
+ exit;
+ } elsif ($args[0]=~/^\-?\-(ver|version)$/) {
+ print_version();
exit;
+ } elsif ($args[0]=~/^\-?\-(lic|license)$/) {
+ print_license();
+ exit;
+ }
+ return 1;
+}
+
+# Parses arguments, sets options (global) and returns file list
+sub Parse_Arguments {
+ my @args=@_;
+ Check_Arguments(@args);
+ my @files;
+ foreach my $arg (@ARGV) {
+ if (Parse_Option($arg)) {next;}
+ if ($arg=~/^\-/) {
+ print 'Invalid opton '.$arg."\n";
+ print_syntax();
+ exit;
+ }
+ $arg=~s/\\/\//g;
+ push @files,$arg;
+ }
+ return @files;
+}
+
+# Parse individual option parameters
+sub Parse_Option {
+ my $arg=shift @_;
+ return parse_options_parsing($arg)
+ || parse_options_sums($arg)
+ || parse_options_output($arg)
+ || parse_options_format($arg)
+ ;
+}
+
+sub parse_options_parsing {
+ my $arg=shift @_;
+ if ($arg eq '-inc') {$includeTeX=1;}
+ elsif ($arg eq '-noinc') {$includeTeX=0;}
+ elsif ($arg eq '-dir') {$globalworkdir=undef;}
+ elsif ($arg=~/^-dir=(.*)$/) {$globalworkdir=$1;}
+ elsif ($arg eq '-relaxed') {
+ @MacroOptionPatterns=@MacroOptionPatternsRelaxed;
+ @WordPatterns=@WordPatternsRelaxed;
+ }
+ else {return 0;}
+ return 1;
+}
+
+sub parse_options_sums {
+ my $arg=shift @_;
+ if ($arg=~/^-sum(=(.+))?$/) {option_sum($2);}
+ elsif ($arg=~/^-(sub|subcounts?)(=(.+))?$/) {option_subcount($3);}
+ else {return 0;}
+ return 1;
+}
+
+sub option_subcount {
+ my $arg=shift @_;
+ $showsubcounts=1;
+ if (!defined $arg) {
+ %BreakPoints=%{$BreakPointsOptions{'default'}};
+ } elsif (my $option=$BreakPointsOptions{$arg}) {
+ %BreakPoints=%{$option};
+ } else {
+ print STDERR "Warning: Option value ".$arg." not valid, using default instead.\n";
+ %BreakPoints=%{$BreakPointsOptions{'default'}};
}
- $arg=~s/\\/\//g;
- push @toplevelfiles,$arg;
}
-%STYLE=%{$STYLES[$verbose]};
-for my $file (<@toplevelfiles>) {
+
+sub option_sum {
+ my $arg=shift @_;
+ if (!defined $arg) {
+ @sumweights=(1,1,1,0,0,1,1);
+ } elsif ($arg=~/^(\d+(,\d+){0,6})$/) {
+ @sumweights=split(',',$1);
+ } else {
+ print STDERR "Warning: Option value ".$arg." not valid, ignoring option.\n";
+ }
+}
+
+sub parse_options_format {
+ my $arg=shift @_;
+ if ($arg eq '-brief') {$briefsum=1; return 1;}
+ elsif ($arg eq '-total') {$totalflag=1; return 1;}
+ elsif ($arg eq '-1') {$briefsum=1;$totalflag=1;}
+ elsif ($arg eq "-html" ) {option_no_colours();$htmlstyle = 2;}
+ elsif ($arg eq "-htmlcore" ) {option_no_colours();$htmlstyle = 1;}
+ elsif ($arg=~/^\-(nocol|nc$)/) {option_no_colours();}
+ elsif ($arg eq '-codes') {
+ $showcodes=2;
+ if ($verbose==0) {$verbose=3;}
+ }
+ elsif ($arg eq '-nocodes') {$showcodes=0;}
+ else {return 0;}
+ return 1;
+}
+
+sub parse_options_output {
+ my $arg=shift @_;
+ if ($arg eq "-v0") {$verbose=0;}
+ elsif ($arg eq "-v1") {$verbose=1;}
+ elsif ($arg eq '-vv' || $arg eq '-v2') {$verbose=2;}
+ elsif ($arg eq '-vvv' || $arg eq '-v3' || $arg eq '-v') {$verbose=3;}
+ elsif ($arg eq '-vvvv' || $arg eq '-v4') {$verbose=3; $showstates=1;}
+ elsif ($arg =~ /^\-showstates?$/ ){$showstates=1;}
+ else {return 0;}
+ return 1;
+}
+
+# Parse file list and return total count
+sub parse_file_list {
+ my @filelist=@_;
+ my $listtotalcount=new_count("TOTAL COUNT");
+ for my $file (<@filelist>) {
+ my $filetotalcount=parse_file($file);
+ add_count($listtotalcount,$filetotalcount);
+ }
+ return $listtotalcount;
+}
+
+# Parse file and included files, and return total count
+sub parse_file {
+ my $file=shift @_;
+ $workdir=$globalworkdir;
+ if (!defined $workdir) {
+ $workdir=$file;
+ $workdir =~ s/^((.*[\\\/])?)[^\\\/]+$/$1/;
+ }
@filelist=($file);
+ if ($htmlstyle) {print "\n<div class='filegroup'>\n";}
+ my $filetotalcount=new_count("SUM COUNT FOR ".$file);
foreach my $f (@filelist) {
my $tex=TeXfile($f);
my $fpath=$f;
- $fpath=~s/^(.*[\\\/])[^\\\/]+/$1/;
+ $fpath=~s/^((.*[\\\/])?)[^\\\/]+$/$1/;
if (!defined $tex) {
- print "File not found or not readable: ".$f."\n";
+ #print_error("File not found or not readable: ".$f."\n");
+ formatprint("File not found or not readable: ".$f."\n","p","error");
} else {
parse($tex);
- print "\n";
- print_count($tex->{'count'},'FILE: '.$f);
- print "\n";
- add_count($totalcount,$tex->{'count'});
+ my $filecount=add_subcount($tex);
+ if (!$totalflag) {
+ print_count($filecount);
+ print "\n";
+ }
+ add_count($filetotalcount,$filecount);
}
}
+ if ($htmlstyle) {print "</div>\n\n";}
+ return $filetotalcount;
}
-if (${$totalcount}[0]>1) {
- print "\n";
- formatprint('Total','h1');
- print_count($totalcount,'SUM');
+
+######
+###### Subroutines
+######
+
+###### Option handling
+
+# Apply options to set values
+sub Apply_Options {
+ %STYLE=%{$STYLES[$verbose]};
+ if ($htmlstyle>1) {html_head();}
}
-if ($htmlstyle>1) {
- html_tail();
+
+# Close the output, e.g. adding HTML tail
+sub Close_Output {
+ if ($htmlstyle>1) {
+ html_tail();
+ }
}
+sub option_no_colours {
+ $ENV{'ANSI_COLORS_DISABLED'} = 1;
+}
+# Print count (total) if conditions are met
+sub conditional_print_total {
+ my $sumcount=shift @_;
+ if ($totalflag || get_count($sumcount,0)>1) {
+ if ($totalflag && $briefsum && @sumweights) {
+ print total_count($sumcount);
+ } else {
+ if ($htmlstyle) {
+ formatprint("Total word count",'h2');
+ }
+ print_count($sumcount);
+ }
+ }
+}
-#########
-######### Subroutines
-#########
+###### TeX File handle
sub TeXfile {
my $filename=shift @_;
@@ -235,7 +424,7 @@ sub TeXfile {
}
sub TeXcode {
- my ($texcode,$filename)=@_;
+ my ($texcode,$filename,$title)=@_;
my %TeX=();
$TeX{'filename'}=$filename;
if (!defined $filename) {
@@ -245,204 +434,39 @@ sub TeXcode {
} else {
$TeX{'filepath'}='';
}
+ if (defined $title) {}
+ elsif (defined $filename) {$title="FILE: ".$filename;}
+ else {$title="Word count";}
$TeX{'line'}=$texcode;
$TeX{'next'}=undef;
$TeX{'type'}=undef;
$TeX{'style'}=undef;
$TeX{'printstate'}=undef;
$TeX{'eof'}=0;
- $TeX{'count'}=new_count();
- $TeX{'count'}[0]++;
+ my $countsum=new_count($title);
+ $TeX{'countsum'}=$countsum;
+ my $count=new_count("_top_");
+ $TeX{'count'}=$count;
+ inc_count(\%TeX,0);
+ my @countlist=();
+ $TeX{'countlist'}=\@countlist;
+ $countsum->{'subcounts'}=\@countlist;
return \%TeX;
}
-sub set_style {
- my ($tex,$style)=@_;
- if (!(($tex->{'style'}) && ($tex->{'style'} eq '-'))) {$tex->{'style'}=$style;}
-}
-
-sub flush_style {
- my ($tex,$style)=@_;
- set_style($tex,$style);
- flush_next($tex);
-}
-
-sub line_return {
- my $blank=shift @_;
- if ($blank>$blankline) {
- if ($htmlstyle) {print "<br>\n";} else {print "\n";}
- $blankline++;
- }
-}
-
-sub print_style {
- my ($text,$style,$state)=@_;
- (($verbose>=0) && (defined $text) && (defined $style)) || return;
- my $colour;
- ($colour=$STYLE{$style}) || return;
- if (($colour) && !($colour eq '-')) {
- if ($htmlstyle) {
- print "<span class='".$style."'>".$text."</span>";
- } else {
- print Term::ANSIColor::colored($text,$colour);
- }
- if ($state) {
- print_style($state,'state');
- }
- $blankline=-1;
- }
-}
-
-sub print_error {
- my $text=shift @_;
- line_return(1);
- print_style("### ".$text." ###",'error');
- line_return(1);
-}
-
-sub formatprint {
- my ($text,$tag,$class)=@_;
- my $break=($text=~s/\n$//);
- if ($htmlstyle && defined $tag) {
- print '<'.$tag;
- if ($class) {print " class='".$class."'";}
- print '>'.$text.'</'.$tag.'>';
- } else {
- print $text;
- }
- if ($break) {print "\n";}
-}
-
sub read_file {
my $filename=shift @_;
open(FH,"<".$filename."") || return undef;
if ($verbose) {
- #line_return(1);
formatprint("File: ".$filename."\n",'h2');
$blankline=0;
}
- my @text=();
- while (my $line=<FH>) {
- push @text,$line;
- }
+ my @text=<FH>;
close(FH);
return join('',@text);
}
-sub next_token {
- my $tex=shift @_;
- my ($next,$type);
- if (defined $tex->{'next'}) {print_style($tex->{'next'}.' ',$tex->{'style'});}
- $tex->{'style'}=undef;
- while (defined ($next=get_next_token($tex))) {
- $type=$tex->{'type'};
- if ($type==0) {
- print_style($next,'comment');
- } elsif ($type==9) {
- if ($verbose) {line_return(1);}
- } else {
- return $next;
- }
- }
- return $next;
-}
-
-sub flush_next {
- my $tex=shift @_;
- if (defined $tex->{'next'}) {
- print_style($tex->{'next'}.' ',$tex->{'style'},$tex->{'printstate'});
- }
- $tex->{'printstate'}=undef;
- $tex->{'style'}='-';
-}
-
-sub get_next_token {
- # Token (or token group) category:
- # 0: comment
- # 1: word (or other forms of text or text components)
- # 2: symbol (not word, e.g. punctuation)
- # 3: macro
- # 4: curly braces {}
- # 5: brackets []
- # 6: maths
- # 999: end of line or blank line
- # 666: TeXcount instruction (%TC:instruction)
- my $tex=shift @_;
- my $next;
- (defined ($next=get_token($tex,'\%+TC:[^\n]*',666))) && return $next;
- (defined ($next=get_token($tex,'\%[^\n]*',0))) && return $next;
- (defined ($next=get_token($tex,'\n',9))) && return $next;
- (defined ($next=get_token($tex,'\\\\[\{\}]',2))) && return $next;
- (defined ($next=get_token($tex,'(\w+\.)+\w+\.?',1))) && return $next;
- (defined ($next=get_token($tex,'\w+([\-\']\w+)*',1))) && return $next;
- (defined ($next=get_token($tex,'[\"\'\`:\.,\(\)\[\]!\+\-\*=/\^\_\@\<\>\~\#\&]',2))) && return $next;
- (defined ($next=get_token($tex,'\\\\([a-zA-Z_]+|[^a-zA-Z_])',3))) && return $next;
- (defined ($next=get_token($tex,'[\{\}]',4))) && return $next;
- (defined ($next=get_token($tex,'[\[\]]',5))) && return $next;
- (defined ($next=get_token($tex,'\$\$',6))) && return $next;
- (defined ($next=get_token($tex,'\$',6))) && return $next;
- (defined ($next=get_token($tex,'.',999))) && return $next;
- (defined ($next=get_token($tex,'[^\s]+',999))) && return $next;
- $tex->{'eof'}=1;
- return undef;
-}
-
-sub get_token {
- my ($tex,$regexp,$type)=@_;
- if (!defined $regexp) {print_error("ERROR in get_token: undefined regex.");}
- if (!defined $tex->{'line'}) {print_error("ERROR in get_token: undefined tex-line. ".$tex->{'next'});}
- if ( $tex->{'line'} =~ s/^($regexp)[ \t\r\f]*// ) {
- $tex->{'next'}=$1;
- $tex->{'type'}=$type;
- return $1;
- }
- return undef;
-}
-
-sub new_count {
- my @count=(0,0,0,0,0,0,0,0);
- # files, text words, header words, float words,
- # headers, floats, math-inline, math-display;
- return \@count;
-}
-
-sub count_word {
- my ($count,$type,$word,$style,$verb)=@_;
- ($word) || ($word="");
- ($style) || ($style=0);
- ($verb) || ($verb=0);
- if ($type>0) {${$count}[$type]++;}
- if ($verb >= $verbose) {
- }
-}
-
-sub print_count {
- my ($count,$header)=@_;
- if ($briefsum) {
- if ($htmlstyle) {print "<p class='count'>\n";}
- print ${$count}[1]."+".${$count}[2]."+".${$count}[3].
- " (".${$count}[4]."/".${$count}[5]."/".${$count}[6]."/".${$count}[7].") ".
- $header;
- if ($htmlstyle) {print "</p>\n";}
- return;
- }
- if ($htmlstyle) {print "<dl class='count'>\n";}
- if (defined $header) {
- formatprint($header."\n",'dt','header');
- }
- for (my $i=1;$i<8;$i++) {
- formatprint($countlabel[$i].': ','dt');
- formatprint(${$count}[$i]."\n",'dd');
- }
- if ($htmlstyle) {print "</dl>\n";}
-}
-
-sub add_count {
- my ($a,$b)=@_;
- for (my $i=0;$i<8;$i++) {
- ${$a}[$i]+=${$b}[$i];
- }
-}
+###### Parsing routines
sub parse {
my ($tex)=@_;
@@ -471,7 +495,6 @@ sub parse_unit {
print_error("CRITICAL ERROR: Invalid parser status!");
exit;
}
- my $count=$tex->{'count'};
my $substat;
if ($showstates) {
if (defined $end) {
@@ -509,7 +532,7 @@ sub parse_unit {
} elsif ($tex->{'type'}==1) {
# word
if ($status>0) {
- ${$count}[$status]++;
+ inc_count($tex,$status);
set_style($tex,'word'.$status);
}
} elsif ($next eq '{') {
@@ -519,25 +542,31 @@ sub parse_unit {
set_style($tex,'ignore');
} elsif ($tex->{'type'}==3) {
# macro call
+ if (my $label=$BreakPoints{$next}) {
+ if ($tex->{'line'}=~ /^[*]?(\s*\[.*?\])*\s*\{(.+?)\}/ ) {
+ $label=$label.': '.$2;
+ }
+ add_subcount($tex,$label);
+ }
set_style($tex,'command');
if ($next eq '\begin' && $status!=-2) {
- parse_begin_end($tex,$count,$status);
+ parse_begin_end($tex,$status);
} elsif (($status==-1) && ($substat=$TeXfloatinc{$next})) {
# text included from float
gobble_macro_parms($tex,$substat);
} elsif ($status==-9 && defined ($substat=$TeXpreamble{$next})) {
# parse preamble include macros
- if (defined $TeXheader{$next}) {${$count}[4]++;}
+ if (defined $TeXheader{$next}) {inc_count($tex,4);}
gobble_macro_parms($tex,$substat,1);
} elsif ($status<0) {
# ignore
gobble_option($tex);
} elsif ($next eq '\(') {
# math inline
- parse_math($tex,$count,$status,6,'\)');
+ parse_math($tex,$status,6,'\)');
} elsif ($next eq '\[') {
# math display
- parse_math($tex,$count,$status,7,'\]');
+ parse_math($tex,$status,7,'\]');
} elsif ($next eq '\def') {
# ignore \def...
$tex->{'line'} =~ s/^([^\{]*)\{/\{/;
@@ -546,14 +575,14 @@ sub parse_unit {
parse_unit($tex,-2);
} elsif (defined (my $addsuffix=$TeXfileinclude{$next})) {
# include file: queue up for parsing
- parse_include_file($tex,$count,$status,$addsuffix);
+ parse_include_file($tex,$status,$addsuffix);
} elsif (defined ($substat=$TeXmacro{$next})) {
# macro: exclude options
- if (defined $TeXheader{$next}) {${$count}[4]++;}
+ if (defined $TeXheader{$next}) {inc_count($tex,4);}
gobble_macro_parms($tex,$substat,$status);
} elsif (defined ($substat=$TeXmacroword{$next})) {
# count macro as word (or a given number of words)
- ${$count}[$status]+=$substat;
+ inc_count($tex,$status,$substat);
set_style($tex,'word'.$status);
} elsif ($next =~ /^\\[^\w\_]/) {
} else {
@@ -561,10 +590,12 @@ sub parse_unit {
}
} elsif ($next eq '$') {
# math inline
- parse_math($tex,$count,$status,6,'$');
+ parse_math($tex,$status,6,'$');
} elsif ($next eq '$$') {
# math display (unless already in inlined math)
- if (! $end eq '$') {parse_math($tex,$count,$status,7,'$$');}
+ if (!(defined $end && $end eq '$')) {
+ parse_math($tex,$status,7,'$$');
+ }
}
if (!defined $end) {return;}
}
@@ -573,21 +604,32 @@ sub parse_unit {
sub gobble_option {
my $tex=shift @_;
flush_next($tex);
- if ($tex->{'line'} =~ s/^(\[(\w|[,\-\s\~\.\:\;\+\?\*\_\=])*\])//) {
- print_style($1,'option');
- return $1;
+ foreach my $pattern (@MacroOptionPatterns) {
+ if ($tex->{'line'}=~s/^($pattern)//) {
+ print_style($1,'option');
+ return $1;
+ }
}
return undef;
}
sub parse_tc {
my ($tex)=@_;
+ my $next=$tex->{'next'};
set_style($tex,'tc');
- if ($tex->{'next'}=~/^\%+TC:\s*(\w+)\s+([\\]*\w+)\s+([^\s\n]+)(\s+([0-9]+))?/) {
- my $instr=$1;
- my $macro=$2;
- my $param=$3;
- my $option=$5;
+ flush_next($tex);
+ if (!($next=~s/^\%+TC:\s*(\w+)\s*// )) {
+ print_error('Warning: TC command should have format %TC:instruction [macro] [parameters]');
+ return;
+ };
+ my $instr=$1;
+ if ($instr=~/^(break)$/) {
+ if ($instr eq 'break') {add_subcount($tex,$next);}
+ } elsif ($next=~/^([\\]*\w+)\s+([^\s\n]+)(\s+([0-9]+))?/) {
+ # Format = TC:word macro
+ my $macro=$1;
+ my $param=$2;
+ my $option=$4;
if ($param=~/^\[([0-9,]+)\]$/) {$param=[split(',',$1)];}
if (($instr eq 'macro') || ($instr eq 'exclude')) {$TeXmacro{$macro}=$param;}
elsif ($instr eq 'header') {$TeXheader{$macro}=$param;$TeXmacro{$macro}=$param;}
@@ -596,24 +638,34 @@ sub parse_tc {
elsif ($instr eq 'group') {$TeXmacro{'begin'.$macro}=$param;$TeXgroup{$macro}=$option;}
elsif ($instr eq 'floatinclude') {$TeXfloatinc{$macro}=$param;}
elsif ($instr eq 'fileinclude') {$TeXfileinclude{$macro}=$param;}
+ elsif ($instr eq 'breakmacro') {$BreakPoints{$macro}=$param;}
else {print_error("Warning: Unknown TC command: ".$instr);}
- } elsif ($tex->{'next'}=~/^\%+TC:\s*(\w+)/) {
- my $instr=$1;
- print_error("Warning: Unknown TC command: ".$instr);
+ } elsif ($instr eq 'ignore') {
+ tc_ignore_input($tex);
+ } else {
+ print_error("Warning: Invalid TC command format: ".$instr);
}
}
+sub tc_ignore_input {
+ my ($tex)=@_;
+ set_style($tex,'ignore');
+ parse_unit($tex,-3,"%TC:endignore");
+ set_style($tex,'tc');
+ flush_next($tex);
+}
+
sub parse_math {
- my ($tex,$count,$status,$substat,$end)=@_;
+ my ($tex,$status,$substat,$end)=@_;
my $localstyle=$status>0 ? 'mathgroup' : 'exclmath';
- if ($status>0) {${$count}[$substat]++;}
+ if ($status>0) {inc_count($tex,$substat);}
set_style($tex,$localstyle);
parse_unit($tex,0,$end);
set_style($tex,$localstyle);
}
sub parse_begin_end {
- my ($tex,$count,$status)=@_;
+ my ($tex,$status)=@_;
my $localstyle=$status>0 ? 'grouping' : 'exclgroup';
flush_style($tex,$localstyle);
gobble_option($tex);
@@ -635,11 +687,11 @@ sub parse_begin_end {
if ($status<=0 && $status<$substat) {$substat=$status;}
if (($status>0) && ($substat==-1)) {
# Count float
- ${$count}[5]++;
+ inc_count($tex,5);
}
if ($status>0 and $substat>3) {
# count item, exclude contents
- ${$count}[$substat]++;
+ inc_count($tex,$substat);
$substat=0;
}
parse_unit($tex,$substat,'\end');
@@ -653,7 +705,7 @@ sub parse_begin_end {
}
sub parse_include_file {
- my ($tex,$count,$status,$addsuffix)=@_;
+ my ($tex,$status,$addsuffix)=@_;
$tex->{'line'} =~ s/^\{([^\{\}\s]+)\}// ||
$tex->{'line'} =~ s/^\s*([^\{\}\%\\\s]+)// ||
return;
@@ -661,8 +713,10 @@ sub parse_include_file {
if ($status>0) {
print_style($&,'fileinclude');
my $fname=$1;
- if ($addsuffix && ($fname=~/^[^\.]+$/)) {$fname.='.tex';}
- if ($includeTeX) {push @filelist,$tex->{'filepath'}.$fname;}
+ if ($addsuffix==2) {$fname.='.tex';}
+ elsif ($addsuffix==1 && ($fname=~/^[^\.]+$/)) {$fname.='.tex';}
+ #if ($includeTeX) {push @filelist,$tex->{'filepath'}.$fname;}
+ if ($includeTeX) {push @filelist,$workdir.$fname;}
} else {
print_style($&,'ignored');
}
@@ -710,7 +764,264 @@ sub new_status {
return $substat;
}
-### HTML context
+sub next_token {
+ my $tex=shift @_;
+ my ($next,$type);
+ if (defined $tex->{'next'}) {print_style($tex->{'next'}.' ',$tex->{'style'});}
+ $tex->{'style'}=undef;
+ while (defined ($next=get_next_token($tex))) {
+ $type=$tex->{'type'};
+ if ($type==0) {
+ print_style($next,'comment');
+ } elsif ($type==9) {
+ if ($verbose) {line_return(1,$tex);}
+ } else {
+ return $next;
+ }
+ }
+ return $next;
+}
+
+
+sub get_next_token {
+ # Token (or token group) category:
+ # 0: comment
+ # 1: word (or other forms of text or text components)
+ # 2: symbol (not word, e.g. punctuation)
+ # 3: macro
+ # 4: curly braces {}
+ # 5: brackets []
+ # 6: maths
+ # 9: line break in file
+ # 999: end of line or blank line
+ # 666: TeXcount instruction (%TC:instruction)
+ my $tex=shift @_;
+ my $next;
+ (defined ($next=get_token($tex,'\%+TC:[^\n]*',666))) && return $next;
+ (defined ($next=get_token($tex,'\%[^\n]*',0))) && return $next;
+ (defined ($next=get_token($tex,'\n',9))) && return $next;
+ (defined ($next=get_token($tex,'\\\\[\{\}]',2))) && return $next;
+ foreach my $pattern (@WordPatterns) {
+ (defined ($next=get_token($tex,$pattern,1))) && return $next;
+ }
+ (defined ($next=get_token($tex,'[\"\'\`:\.,\(\)\[\]!\+\-\*=/\^\_\@\<\>\~\#\&]',2))) && return $next;
+ (defined ($next=get_token($tex,'\\\\([a-zA-Z_]+|[^a-zA-Z_])',3))) && return $next;
+ (defined ($next=get_token($tex,'[\{\}]',4))) && return $next;
+ (defined ($next=get_token($tex,'[\[\]]',5))) && return $next;
+ (defined ($next=get_token($tex,'\$\$',6))) && return $next;
+ (defined ($next=get_token($tex,'\$',6))) && return $next;
+ (defined ($next=get_token($tex,'.',999))) && return $next;
+ (defined ($next=get_token($tex,'[^\s]+',999))) && return $next;
+ $tex->{'eof'}=1;
+ return undef;
+}
+
+sub get_token {
+ my ($tex,$regexp,$type)=@_;
+ if (!defined $regexp) {print_error("ERROR in get_token: undefined regex.");}
+ if (!defined $tex->{'line'}) {print_error("ERROR in get_token: undefined tex-line. ".$tex->{'next'});}
+ if ( $tex->{'line'} =~ s/^($regexp)[ \t\r\f]*// ) {
+ $tex->{'next'}=$1;
+ $tex->{'type'}=$type;
+ return $1;
+ }
+ return undef;
+}
+
+###### Count handling routines
+
+sub new_count {
+ my ($title)=@_;
+ my @cnt=(0,0,0,0,0,0,0,0);
+ my %count=('count'=>\@cnt,'title'=>$title);
+ # files, text words, header words, float words,
+ # headers, floats, math-inline, math-display;
+ return \%count;
+}
+
+sub inc_count {
+ my ($tex,$type,$value)=@_;
+ my $count=$tex->{'count'};
+ if (!defined $value) {$value=1;}
+ ${$count->{'count'}}[$type]+=$value;
+}
+
+sub get_count {
+ my ($count,$type)=@_;
+ return ${$count->{'count'}}[$type];
+}
+
+sub total_count {
+ my ($count)=@_;
+ my $sum=0;
+ for (my $i=scalar(@sumweights);$i-->0;) {
+ $sum+=get_count($count,$i+1)*$sumweights[$i];
+ }
+ return $sum;
+}
+
+sub print_count {
+ my ($count,$header)=@_;
+ if ($briefsum && @sumweights) {
+ print_count_total($count,$header);
+ } elsif ($briefsum) {
+ if ($htmlstyle) {print "<p class='briefcount'>";}
+ print_count_brief($count,$header);
+ if ($htmlstyle) {print "</p>\n";}
+ } else {
+ print_count_details($count,$header);
+ }
+}
+
+sub print_count_with_header {
+ my ($count,$header)=@_;
+ if (!defined $header) {$header=$count->{'title'};}
+ if (!defined $header) {$header="";}
+ return $count,$header;
+}
+
+sub print_count_total {
+ my ($count,$header)=print_count_with_header(@_);
+ if ($htmlstyle) {print "<p class='count'>".$header;}
+ print total_count($count);
+ if ($htmlstyle) {print "</p>\n";}
+ else {print ": ".$header;}
+}
+
+sub print_count_brief {
+ my ($count,$header)=print_count_with_header(@_);
+ my $cnt=$count->{'count'};
+ print ${$cnt}[1]."+".${$cnt}[2]."+".${$cnt}[3].
+ " (".${$cnt}[4]."/".${$cnt}[5]."/".${$cnt}[6]."/".${$cnt}[7].") ".
+ $header;
+}
+
+sub print_count_details {
+ my ($count,$header)=print_count_with_header(@_);
+ if ($htmlstyle) {print "<dl class='count'>\n";}
+ if (defined $header) {
+ formatprint($header."\n",'dt','header');
+ }
+ if (get_count($count,0)>1) {
+ formatprint($countlabel[0].': ','dt');
+ formatprint(get_count($count,0)."\n",'dd');
+ }
+ if (@sumweights) {
+ formatprint('Sum count: ','dt');
+ formatprint(total_count($count)."\n",'dd');
+ }
+ for (my $i=1;$i<8;$i++) {
+ formatprint($countlabel[$i].': ','dt');
+ formatprint(get_count($count,$i)."\n",'dd');
+ }
+ my $subcounts=$count->{'subcounts'};
+ if ($showsubcounts && defined $subcounts && scalar(@{$subcounts})>1) {
+ formatprint("Subcounts: text+headers+captions (#headers/#floats/#inlines/#displayed)\n",'dt');
+ foreach my $subcount (@{$subcounts}) {
+ if ($htmlstyle) {print "<dd class='briefcount'>";}
+ print_count_brief($subcount);
+ if ($htmlstyle) {print "</dd>";}
+ print "\n";
+ }
+ }
+ if ($htmlstyle) {print "</dl>\n";}
+}
+
+sub add_count {
+ my ($a,$b)=@_;
+ for (my $i=0;$i<8;$i++) {
+ ${$a->{'count'}}[$i]+=${$b->{'count'}}[$i];
+ }
+}
+
+sub add_subcount {
+ my ($tex,$title)=@_;
+ add_count($tex->{'countsum'},$tex->{'count'});
+ push @{$tex->{'countlist'}},$tex->{'count'};
+ $tex->{'count'}=new_count($title);
+ return $tex->{'countsum'};
+}
+
+###### Printing routines
+
+sub set_style {
+ my ($tex,$style)=@_;
+ if (!(($tex->{'style'}) && ($tex->{'style'} eq '-'))) {$tex->{'style'}=$style;}
+}
+
+sub flush_style {
+ my ($tex,$style)=@_;
+ set_style($tex,$style);
+ flush_next($tex);
+}
+
+sub line_return {
+ my ($blank,$tex)=@_;
+ if ($blank>$blankline) {
+ if ((defined $tex) && @sumweights) {
+ my $num=total_count($tex->{'count'});
+ print_style(" [".$num."]","sumcount");
+ }
+ linebreak();
+ $blankline++;
+ }
+}
+
+sub linebreak {
+ if ($htmlstyle) {print "<br>\n";} else {print "\n";}
+}
+
+sub print_style {
+ my ($text,$style,$state)=@_;
+ (($verbose>=0) && (defined $text) && (defined $style)) || return 0;
+ my $colour;
+ ($colour=$STYLE{$style}) || return;
+ if (($colour) && !($colour eq '-')) {
+ if ($htmlstyle) {
+ print "<span class='".$style."'>".$text."</span>";
+ } else {
+ print Term::ANSIColor::colored($text,$colour);
+ }
+ if ($state) {
+ print_style($state,'state');
+ }
+ $blankline=-1;
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+sub print_error {
+ my $text=shift @_;
+ line_return(1);
+ print_style("### ".$text." ###",'error');
+ line_return(1);
+}
+
+sub formatprint {
+ my ($text,$tag,$class)=@_;
+ my $break=($text=~s/\n$//);
+ if ($htmlstyle && defined $tag) {
+ print '<'.$tag;
+ if ($class) {print " class='".$class."'";}
+ print '>'.$text.'</'.$tag.'>';
+ } else {
+ print $text;
+ }
+ if ($break) {print "\n";}
+}
+
+sub flush_next {
+ my $tex=shift @_;
+ if (defined $tex->{'next'}) {
+ print_style($tex->{'next'}.' ',$tex->{'style'},$tex->{'printstate'});
+ }
+ $tex->{'printstate'}=undef;
+ $tex->{'style'}='-';
+}
+
+###### HTML routines
sub html_head {
print '
@@ -718,13 +1029,11 @@ sub html_head {
<head>
<style>
<!--
-body {width:100%;padding:5;margin:5 10 5 5;}
+body {width:auto;padding:5;margin:5;}
.error {font-weight:bold;color:#f00;font-style:italic;}
-.parse {font-size: 80%; background: #eef;}
.word1,.word2,.word3 {color: #009;}
.word2 {font-weight: 700;}
.word3 {font-style: italic;}
-.word-1 {color: #66c;}
.command {color: #c00;}
.option {color: #cc0;}
.grouping, .document {color: #900; font-weight:bold;}
@@ -735,14 +1044,19 @@ body {width:100%;padding:5;margin:5 10 5 5;}
.tc {color: #999; font-weight:bold;}
.comment {color: #999; font-style: italic;}
.state {color: #990; font-size: 70%;}
+.sumcount {color: #999; font-size: 80%;}
.fileinclude {color: #696; font-weight:bold;}
dl.count {background: #cfc; color: 009;}
-dl.count dt.header {font-weight: 700; font-style: italic; float: none;}
-dl.count dt {clear: both; float: left;}
-dl.count dd {font-weight: 700;}
+dl.count dt.header {font-weight: bold; font-style: italic; float: none;}
+dl.count dt {clear: both; float: left; margin-right: .5em;}
+dl.count dd {font-weight: bold;}
+dl.count dd.briefcount {font-weight: 700; clear: both; font-size:80%; font-weight:normal; margin-left:8pt;}
.warning {color: #c00; font-weight: 700;}
-.parse, .count {border: solid 1px #999; margin: 0pt; padding: 4pt;}
+.parse, .count, .stylehelp, .filegroup {border: solid 1px #999; margin: 0pt; padding: 4pt;}
+.parse {font-size: 80%; background: #eef;}
.parse {border-bottom:none;}
+.stylehelp {font-size: 80%; background: #ffc; margin-bottom: 8pt;}
+.filegroup {background: #efe; margin-bottom: 8pt;}
-->
</style>
</head>
@@ -755,8 +1069,7 @@ sub html_tail {
print '</body></html>';
}
-
-### HELP AND INFO
+###### Help routines
sub print_version {
print "TeXcount version ".$versionnumber.", ".$versiondate.'.';
@@ -767,18 +1080,43 @@ sub print_syntax {
Syntax: TeXcount.pl [options] files
Options:
+ -relaxed Uses relaxed rules for word and option handling:
+ i.e. allows more general cases to be counted as
+ either words or macros.
-v Verbose (same as -v3)
-v0 Do not present parsing details
-v1 Verbose: print parsed words, mark formulae
-v2 More verbose: also print ignored text
-v3 Even more verbose: include comments and options
+ -v4 Same as -v3 -showstate
-showstate Show internal states (with verbose)
-brief Only prints a brief, one line summary of counts
+ -sum, -sum= Make sum of all word and equation counts. May also
+ use -sum=#[,#] with up to 7 numbers to indicate how
+ each of the counts (text words, header words, caption
+ words, #headers, #floats, #inlined formulae,
+ #displayed formulae) are summed. The default sum (if
+ only -sum is used) is the same as -sum=1,1,1,0,0,1,1.
+ -sub, -sub= Generate subcounts. Option values are none, part,
+ chapter, section or subsection. Default (-sub) is set
+ to subsection, whereas unset is none. (Alternative
+ option name is -subcount.)
-nc, -nocol No colours (colours require ANSI)
- -inc Include tex files included in the document
- -noinc Do not include included tex files (default)
-html Output in HTML format
-htmlcore Only HTML body contents
+ -inc Include tex files included in the document
+ -noinc Do not include included tex files (default)
+ -total Do not give sums per file, only total sum.
+ -1 Same as -brief and -total. Ensures there is only one
+ line of output. If used in conjunction with -sum, the
+ output will only be the total number. (NB: Character
+ is the number one, not the letter L.)
+ -dir, -dir= Specify the working directory using -dir=path.
+ Remember that the path must end with \ or /. If only
+ -dir is used, the directory of the parent file is used.
+ -codes Display output style code overview and explanation.
+ This is on by default.
+ -nocodes Do not display output style code overview.
-h, -?, --help, /? Help
--version Print version number
--license License information
@@ -821,6 +1159,37 @@ ensure that words in the text has been interpreted as such,
whereas mathematical formulae and text/non-text in begin-end
groups have been correctly interpreted.
+Parsing instructions may be passed to TeXcount using comments
+in the LaTeX files on the format
+ %TC:instruction arguments
+where valid instructions for setting parsing rules, typically
+set at the start of the document (applies globally), are:
+ %TC:macro [macro] [param.states]
+ macro handling rule, no. of and rules for parameters
+ %TC:macroword [macro] [number]
+ macro counted as a given number of words
+ %TC:header [macro] [param.states]
+ header macro rule, as macro but counts as one header
+ %TC:breakmacro [macro] [label]
+ macro causing subcount break point
+ %TC:group [name] [parsing-state]
+ begin-end-group handling rule
+ %TC:floatinclude [macro] [param.states]
+ as macro, but also counted inside floats
+ %TC:preambleinclude [macro] [param.states]
+ as macro, but also counted inside the preamble
+ %TC:fileinclue [macro] [rule]
+ file include, add .tex if rule=2, not if rule=0
+The [param.states] is used to indicate the number of parameters
+used by the macro and the rules of handling each of these: format
+is [#,#,...,#] with one number for each parameter, and main rules
+are 0 to ignore and 1 to count as text. Parsing instructions
+which may be used anywhere are:
+ %TC:ignore start block to ignore
+ %TC:endignore end block to ignore
+ %TC:break [title] add subcount break point here
+See the documentation for more details.
+
Unix hint: Use \'less -r\' instead of just \'less\' to view output:
the \'-r\' option makes less treat text formating codes properly.
@@ -830,6 +1199,7 @@ options or the output will be riddled with colour codes. Instead,
you can use -html to produce HTML code, write this to file and
view with your favourite browser.
';
+ print_help_style();
print_reference();
}
@@ -864,3 +1234,53 @@ The script has LPPL status "maintained" with Einar Andreas
Rdland being the current maintainer.
';
}
+
+sub print_help_style {
+ if ($verbose<=0) {return;}
+ formatprint("Format/colour codes of verbose output:","h2");
+ print "\n\n";
+ if ($htmlstyle) {print "<p class='stylehelp'>";}
+ help_style_line('Text which is counted',"word1","counted as text words");
+ help_style_line('Header and title text',"word2","counted as header words");
+ help_style_line('Caption text and footnotes',"word3","counted as caption words");
+ help_style_line("Ignored text or code","ignore","excluded or ignored");
+ help_style_line('\documentclass',"document","document start, beginning of preamble");
+ help_style_line('\macro',"command","macro not counted, but parameters may be");
+ help_style_line("[Macro options]","option","not counted");
+ help_style_line('\begin{group} \end{group}',"grouping","begin/end group");
+ help_style_line('\begin{group} \end{group}',"exclgroup","begin/end group in excluded region");
+ help_style_line('$ $',"mathgroup","counted as one equation");
+ help_style_line('$ $',"exclmath","equation in excluded region");
+ help_style_line('% Comments',"comment","not counted");
+ help_style_line('%TC:TeXcount instructions',"tc","not counted");
+ help_style_line("File to include","fileinclude","not counted but file may be counted later");
+ if ($showstates) {
+ help_style_line('[state]',"state","internal TeXcount state");
+ }
+ if (@sumweights) {
+ help_style_line('[sumcount]',"sumcount","cumulative sum count");
+ }
+ help_style_line("ERROR","error","TeXcount error message");
+ if ($htmlstyle) {print "</p>";}
+ print "\n\n";
+}
+
+sub help_style_line {
+ my ($text,$style,$comment)=@_;
+ if ($htmlstyle) {
+ $comment="&nbsp;&nbsp;....&nbsp;&nbsp;".$comment;
+ } else {
+ $comment=" .... ".$comment;
+ }
+ if (print_style($text,$style)) {
+ print $comment;
+ linebreak();
+ }
+}
+
+# Print output style codes if conditions are met
+sub conditional_print_help_style {
+ if ($showcodes) {print_help_style();}
+ return $showcodes;
+}
+
diff --git a/Master/tlpkg/bin/tlpkg-ctan-check b/Master/tlpkg/bin/tlpkg-ctan-check
index f93e6920085..c24e495bea7 100755
--- a/Master/tlpkg/bin/tlpkg-ctan-check
+++ b/Master/tlpkg/bin/tlpkg-ctan-check
@@ -209,7 +209,8 @@ my @WorkingTLP = qw(
t-angles t2 Tabbing tableaux tablists tablor tabulary tabvar talk
tamethebeast tdsfrmath
ted templates-fenn templates-sommer tengwarscript
- tensor termlist teubner tex-ewd tex-gyre texilikecover texmate
+ tensor termlist teubner tex-ewd tex-gyre texcount
+ texilikecover texmate
texpower texshade
textcase textfit textopo textpath textpos
theoremref thesis-titlepage-fhac