Import Upstream version 2.7
This commit is contained in:
commit
2f5ac4040c
|
@ -0,0 +1,478 @@
|
|||
This file contains the PGP keys of various developers.
|
||||
Please don't use them for email unless you have to. Their main
|
||||
purpose is code signing.
|
||||
|
||||
Users:
|
||||
pgp < KEYS
|
||||
(gpg --import < KEYS)
|
||||
Developers:
|
||||
pgp -kxa <your name> and append it to this file.
|
||||
(pgpk -ll <your name> && pgpk -xa <your name>) >> this file.
|
||||
(gpg --list-keys <your name>
|
||||
&& gpg --armor --export <your name>) >> this file.
|
||||
|
||||
pub 1024D/8408F755 2003-01-20 Christian Geisert <chrisg@apache.org>
|
||||
sub 1024g/41D98B12 2003-01-20
|
||||
pub 1024D/7C611584 2005-07-19 Jeremias M<>rki <jeremias@apache.org>
|
||||
sub 2048g/C0F1AD34 2005-07-19
|
||||
pub 1024D/4358C584 2006-12-08 Vincent Hennebert <vhennebert@apache.org>
|
||||
sub 2048g/0BD6AC9B 2006-12-08
|
||||
pub 1024D/CC31AE97 2008-03-27 [expires: 2011-01-01]
|
||||
uid Maximilian Berger <maxberger@apache.org>
|
||||
pub 1024R/C93C5700 2008-07-12
|
||||
uid Maximilian Berger <maxberger@apache.org>
|
||||
pub 4096R/72FA275A 2014-07-22
|
||||
uid Vincent Hennebert <vhennebert@apache.org>
|
||||
sub 4096R/EC50D2FD 2014-07-22
|
||||
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.0.6 (GNU/Linux)
|
||||
Comment: Weitere Infos: siehe http://www.gnupg.org
|
||||
|
||||
mQGiBD4rT6kRBADPozVPJAOKLqcgtnGFHj0Qav5OBPqjTprJji0BgxPrcZLZQFUO
|
||||
0AmeJpzwgE0vDISx+DgGOKPcqeCLnSqtoR3rYc5Tf57FPlZ/E2/fzMwC0soYzJ6e
|
||||
E9uSsXBIPeeRHcrxyCYJx69g2D/zS2vGnAIr0LYLXhadvChK1zngU0pFswCg5z0a
|
||||
TjCH+9VWzerOLaEQYqVyGgMD/i456FFD2lWes8amcN+wpBLSpxysyrbu1FOZ3sVi
|
||||
MjYsODDeLKRB1Cxn6UMx7WE+Av+UhtoJkoTsvcGBtkj+rFfEav2WmCsYDvLwbqpE
|
||||
P5Pun7qgXbznbzCqdNUavXM0goBQtyFhtGkJSoOVXM6H5raO3THEPXU971gkOC9+
|
||||
agZDA/0WdV3VumDwi9DvII58Fv8K5HKxkZrLeUWAYJzgzeroYgfvuNKr/SrAFuyR
|
||||
W8XxDMPMAMvO1qKUU1Zjffx6RUjeiptmF4ozLvU3I/Pr6atWJL8SPH6rrk6xDpZ5
|
||||
Ev/we0MmRU5kk9Y8KGavAsOjbMbTv77DL2AZ8qapUQYqfuuiR7QlQ2hyaXN0aWFu
|
||||
IEdlaXNlcnQgPGNocmlzZ0BhcGFjaGUub3JnPohXBBMRAgAXBQI+K0+pBQsHCgME
|
||||
AxUDAgMWAgECF4AACgkQc84u+4QI91W/OwCffMPR+FpADYlte9AabXRuzomhdh4A
|
||||
oNvl89kJdg43/nMw5CErpMvMFNjVuQENBD4rT6sQBACr7d7g+yOPuYaFeS9+wXlO
|
||||
vz3gVWZNUOPalrJwWPQ2yXxCzEd4chpBDUsq7TusEe/RCSUuSQYe0FAET2der4Uj
|
||||
6TJPB7SuJos3hrqsUQOluoEHS8bCPD7mpXIjd1+tQu57jxgcW4/VnEn3/c57blgY
|
||||
V2/rpAUE8nDRPB1Z8oveJwAECwQAp0zOTs1ehN4MFzy/3T1xO8HVN7LiaZSc4mEs
|
||||
oyIcEcD3iwxJqsVPmJLOfP8fhuqyv4QfG+7gdNBZqji5WTUK2o1vYgnEbvsnGDst
|
||||
Lx9kwaWCalGMXdbuEzXoheX2JJCeP8YkPQw/r9rCeP0jLXExU3B6RJkDXBrZB7L3
|
||||
Jdj2mxKIRgQYEQIABgUCPitPqwAKCRBzzi77hAj3VeUxAKCJXCs0vrCcfMSO/2M/
|
||||
Eq/rMruVPwCg34SJtFP5wtlgHa7kdhBLKoenD7g=
|
||||
=+cef
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.2 (MingW32)
|
||||
|
||||
mQGiBELdQqsRBACPvRuWTsO4Sv95wSFzaMJcSJs81b9lpAT4BKsi3K/1y7pcxTJW
|
||||
IKP5Khc6cOom3nnRDofEh1KcLnvx+X+A+WF5YF7c1qd4EG3tWgjzqnkT9NUsw6t/
|
||||
3yAHL9iHr5nB7aZuiDdXgsLL5F2wNjuiSrTEDVM1wSm+QLuqqJ2lSJOcCwCg97BA
|
||||
yyX59XauxdQNfF00pfYIW3UD/R2TzMD5YxHbCO2Ib3j5O2cJU+G56q1krLwFKSzq
|
||||
XsiKOh2+8Bvwj2bBlQ6uYMwZc08WOgtiG3uRMDsdPE3JIoDogIguuADzO1LFFoi5
|
||||
mAEizqCN+8OSZ6luVeznUKCObF+yJvqJyG9RoDgv+v8KdqVz5NZ2BdtcY7LxHGKI
|
||||
6k/LA/9WH1p8N10GETyagzNtU1tDMZGk8zB5C1qE9hgMDr5iRKrFuGnwBzMseKOj
|
||||
nQ4tPW47hWYeXLaou6JPTRhGP0wITnOoYmcP5ymgOPZJZwARfC3qXznrdOAmL8D2
|
||||
x+W7DP7ZtKPCYDa0norSEq3VPSUWjAjAPvskgiN6u6Y5/0J487QlSmVyZW1pYXMg
|
||||
TcOkcmtpIDxqZXJlbWlhc0BtYWVya2kub3JnPoheBBMRAgAeBQJC3VVHAhsjBgsJ
|
||||
CAcDAgMVAgMDFgIBAh4BAheAAAoJEPcwlXB8YRWECjoAnA90rdo+Ob3k1BOMz5cK
|
||||
PaQZtuuiAKCHOPtp1foBDjGPBA0FR9MtSCmMLYhGBBIRAgAGBQJC31YgAAoJEKIR
|
||||
WuFfa4tyKSsAnj6YCONElnEDA5vaa1lJES4UcVAeAJ9JG4bXlEPUqyBPhOtvetVS
|
||||
OWtNGIhGBBMRAgAGBQJC7u6uAAoJEME58VMjy3oqElwAnijYebpmsWIw86ilU2Zf
|
||||
epTWKSt1AJ0cMQZmjm/WrGI68rCRcEL7X2wTOYhGBBMRAgAGBQJDK/iDAAoJEDf2
|
||||
j/UBWvyKp3YAniyZxx/ee9g7asY2AR87yAVWPRjQAJ0U4l3dC/8ugLmyE7RbkFqL
|
||||
iALoRLQpSmVyZW1pYXMgTcOkcmtpIDxpbmZvQGplcmVtaWFzLW1hZXJraS5jaD6I
|
||||
XgQTEQIAHgUCQt1VXQIbIwYLCQgHAwIDFQIDAxYCAQIeAQIXgAAKCRD3MJVwfGEV
|
||||
hNNHAKDkYf0faxpqpmnwtFNeFETmTqd7HACeK0jaTfp7b/VhTlFmF+cSkrO4lK2I
|
||||
RgQSEQIABgUCQt9WIAAKCRCiEVrhX2uLcpUWAKClQPvTzFXFlDk/nDBa0wxesi4n
|
||||
qwCfWiXArQAoIm/hG9zpK+h2zHwlYg6IRgQTEQIABgUCQu7urgAKCRDBOfFTI8t6
|
||||
KpDiAKCCPK5ixmDxrKvvIKnx7hofZ0LiAQCfV6vfRmuVmfWo2LMMaa9xw5WBtUKI
|
||||
RgQTEQIABgUCQyv4gwAKCRA39o/1AVr8iqV2AJ9sBMWQ6YjZHIfBp+aoo84EI/Kg
|
||||
6wCfRDkrpQhjpeSM4DPaRiKgL1LQrVm0JUplcmVtaWFzIE3DpHJraSA8amVyZW1p
|
||||
YXNAYXBhY2hlLm9yZz6IXgQTEQIAHgUCQt1VgwIbIwYLCQgHAwIDFQIDAxYCAQIe
|
||||
AQIXgAAKCRD3MJVwfGEVhAjAAKDme5j7fzFk365pOZm1lJyEHMJuPACgspAO3iPV
|
||||
7G659xb8l8IQQIZn18CIRgQSEQIABgUCQt9WGAAKCRCiEVrhX2uLcirOAKCwgb9x
|
||||
2zr8Q3j7KnD9XSgqrwv33ACgzcUOgabzbXlJWEOiW4d2LIK4zjyIRgQTEQIABgUC
|
||||
Qu7uqQAKCRDBOfFTI8t6KuNXAJ40TlT/Goa/tV/5zL+ZH6OdWjTImACghZxdWnD+
|
||||
CLZORMpBFYUlUKffSlWIRgQTEQIABgUCQyv4bAAKCRA39o/1AVr8iv1/AKCX8NY8
|
||||
nffFDHsck7SMPWdb8toSvwCfd0Yf8OOYq3/O8JidWNpnNTAZabqIYQQTEQIAIQIb
|
||||
IwYLCQgHAwIDFQIDAxYCAQIeAQIXgAUCQt1VmwIZAQAKCRD3MJVwfGEVhOZyAJ9G
|
||||
J6pU0t9yrsVkuHcAkhF1YG6RDgCdFOb6NohfGeBbOraUGdQvKwJ3J0W5Ag0EQt1C
|
||||
vhAIAIhBOvTiliy95oxWLplZzCiXq6Dm3lYUOhDxmioKavI6KH2FzdnrHHvz91ES
|
||||
f7tGUNizHQyv4+zSAv8B8JmKiQ7Tk6DL5yJjZ6otwyOuR0ZIviXZwYirT8lOO4wP
|
||||
m3oV1V6Uf1oIwZQ2Y1fTFO4+8UPlTT0IUNMxuIIbvkRSMup6FIFGDoJQ/IYtBB4G
|
||||
4mo6DMilyNzDiaqJ5k+iSY/GcCIzdWUd7ryr7344DffnJHg0CDynR/gpISWWj0sf
|
||||
YCnjZJANrVGV7O5WnKsVKqzTIRfJKSGBoB1ekvQ8AtGq1X8DfGgKubjlzGjCNbeW
|
||||
YiKNEa/M4DOAwhFzvftGueuzujMAAwUH/1+A8nfA3YgoG8wGPifhXBrB5aUx5I12
|
||||
1akJvK4KQaIFE3dDRRYtwQHp0EyKB85z3lTlmdOupE5oKHd3ZYeeaQSUnt5i+dtz
|
||||
Xxz3RLBB6NYlcYJJyqSb31rTAMoq1iultLYbH+ugK/kUPTIOslvUJ/q4J22NJ/wS
|
||||
aIEqBlz/RczCAniNooQ/2ie733MpJ6NfROGIiOrNsRlQw+7P9TOmB3FxKLtzIunD
|
||||
F/Oo/4vznSoaVSUtVFMCKM2tLLbVV2LWBm9ztakfOXwmV0aoveAZ6a0J5+9RbC82
|
||||
HJW5Sez4fLZxK7tENCQoscjkjM/xfsDz5mz/8JF4T0tLehUjKrLBlsaIRgQYEQIA
|
||||
BgUCQt1CvgAKCRD3MJVwfGEVhD0+AJwLiZ/2jUDCKVngO+lqNscX8TQ0LQCeM4DI
|
||||
UKHCLjnj2UtX8OfockTGIic=
|
||||
=1nMU
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.2.2 (GNU/Linux)
|
||||
|
||||
mQGiBEV5mbgRBACBd9xGOGzs8ah/N11zlDi8woJUh02EgztXdMfij4F3u12DkneC
|
||||
OIwGH14fWHdkhKjwYMi5LQfvBsnd3P5v5PTBxYati7ZQDDjvYsAJiMXbyUdszdyQ
|
||||
ig/UuNMwdB5YBrdtklzZcOuiNt/yeoocURQRwkwklsVBIYWwovcdXLTRWwCglPVQ
|
||||
0NrC7VPRPTgK0Y1wxOgwzj0D/RpwFEAcl1SJHoOwhwKykNzA05YABaxXhksKi2qQ
|
||||
C8M4mUofqweU3ocU0tBqQAR351n7hQWAaIs6ScOQtcKPJj9SV8SQgqxwj7WfHscj
|
||||
9X3lkP6cxstW+W8SblTgrKwl7JLLkja1u1cNUeD0QzWImuRBpOjh4s97ZFwSHRoH
|
||||
hCLgA/4/GDXbOhC4Wi9i8HHQNhEA6l86ZBteGq5u4SW57cK69mnOGj8iBxenIWeU
|
||||
+NuB/LqVcG/75JnDvVGImvoykCBEl9xASNOj1C4HvBwNrU7iIpvRig1wwHK8/wqU
|
||||
Dhq5433rh40YbOfN0PLZDhQNhf3MysP3ipTZkVdwIKhsvl/vibQ2VmluY2VudCBI
|
||||
ZW5uZWJlcnQgPHZpbmNlbnQuaGVubmViZXJ0QGFueXdhcmUtdGVjaC5jb20+iGAE
|
||||
ExECACAFAkV5mgcCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAAKCRCgctTQQ1jF
|
||||
hH7uAJ9BFRNMuSpvSq//lEWLc6WOTMW70ACghjA0jtaMQUVjDU3RUOdGMRkqRZu0
|
||||
KVZpbmNlbnQgSGVubmViZXJ0IDx2aGVubmViZXJ0QGFwYWNoZS5vcmc+iGMEExEC
|
||||
ACMCGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIXgAUCRXmahgIZAQAKCRCgctTQQ1jF
|
||||
hLRSAJ9KgHLa9V4Q2k0NFiMpPuhfnsK9bQCeJbGjFdIgrzyIvYIUZUPQGww597+5
|
||||
Ag0ERXmZwhAIAJhskbWZaLuwdZ3aLqVimVu65bR2ve1U28dfsSVCKx0uYCl3YJkj
|
||||
lF9P3BfMMPVdNRqDz4Agz/Vrn13j+p4ZQQhVhv6IGhE4p4T4RebMaZ/d30/6REls
|
||||
DP3Luc9IrnJbA72jSeXt+vI3WysB/wuJJ/kb+3KtFa1NowwVVypHCiSmme0VCUaR
|
||||
K6jlN0245IpR0IA4Q1VziRO7v1VufZAef64/2U2T/IthwPqDoThNj++9Zg5Tctrt
|
||||
TL02Z++n2Nj9bQf9R+FhA3YhvHuf6OLAPE2emcM/0As+JwBHqcMrmybnrxEJg0Aq
|
||||
4Q1k1Ka7beb35QJ7158rzL1PU1V2totLeW8AAwUH/1NJVnMD/p4op2kbJYMgKSqz
|
||||
zZfypt60aWeImeJ2qZD7FAtsz6KQu2a5ZkcVmyCeuAo9Sj0IqxXyn8Z6bHuHXNe+
|
||||
aidjS+n5kc2Y+5RQ1oMGV+BzXQMPGOgh0ertbLaairT7mCljTEd4kUGxOIcfAh/q
|
||||
Ie+p7Guvw6+T4K7hgfY8bAiVgzhZLWIFTQXpjU+91q6kTt4eIWjdCGdNQ/OBezGY
|
||||
f5SCy0phzTmRqcu68nKaLznwUpI7SuSFSIeVemGz602KdFsLEHHbZE0KJgd6aHYu
|
||||
ynK3sugKIpz/NXpT2vBsVkK6EP5xzWYOpqMGb8uQD8CT7loY81SK+rHBm7dicgiI
|
||||
SQQYEQIACQUCRXmZwgIbDAAKCRCgctTQQ1jFhBc3AKCQ1X7oIVR8g7GvSGEUw6DE
|
||||
HgEaUgCgkl30lcl9gGa9hqk4cuGYn1OTyks=
|
||||
=XphF
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.7 (OpenBSD)
|
||||
|
||||
mQGiBEfrX/ARBADulGs9V7StbfK8CFfClihdh4lRpw2tktMuYiQJ/rIsNq4zghkT
|
||||
UGxFU0eUC2ZVPYvwG6sXgZ5SSm6i8Ii79YdIIxUG7oNwXaY/e9rK+xX193xqmDgl
|
||||
Vh5vm4LUtncHi9TZDSF+g1YU1DVHbSjTd2oQEHxbBppL0CLfaLv3U1qr2wCgxeGw
|
||||
ZIwb6KD6yesRLx6vGDkDzAMEAL99p0m4sNnjZdKC25Rrt6NZ7CROXWs89/+dkewg
|
||||
JCZiVEoAcdSa0z5d8+XaSzmqR8BJWM1PBPjG48eEdqOevwypd0F/U1mwZ42MvQEw
|
||||
oBayUY+7/pptW7C5L3Fjk18drE0a8lIzt9VBGX5fe3GoXtZKuOzDv0hEuHyzR9q9
|
||||
JLXsA/sELFfrHf0tBfXAdE7pj/Mahalu17/GAyb0RHSvuOfoUvXSXZA91cFg8ycB
|
||||
4x265NtYZk52M32wi5ePrYeSJIZ6vWRvPuWVAXDg5S6HCMjcXc6ElkgLcUt1NoPI
|
||||
DmRXe4FIDZkGSYSXdLTUByu7+8fCuWQHCFG2sALdOyVlucij2LQoTWF4aW1pbGlh
|
||||
biBCZXJnZXIgPG1heGJlcmdlckBhcGFjaGUub3JnPohmBBMRAgAmBQJH61/wAhsD
|
||||
BQkFM4sABgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQ4+RAT8wxrpcs1wCeIAoI
|
||||
B0MwZfWLV+wD3pt1wDkPXbsAnjuOsyZ7EeNOcpoqSteB17aPRGeLiEYEEBECAAYF
|
||||
Akfrb00ACgkQByq3OugVkrx76ACgqJ8W64IhBYgBvp3dTDLS825gCQQAnjB6X5+4
|
||||
eW/0pQUpJcvolxbT9xvF
|
||||
=bbQO
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.2.6 (GNU/Linux)
|
||||
|
||||
mI4ESHiTQAEEANXyMbT/YZLUQoG2e5bVl1OcZ4Ttpt+Uk7KfZd1vehgwkr7VOUT5
|
||||
Y5JZ74mS/XxdG3JoSI5AF96pAxEl/xplqnTXtR/ZG6IcK7BZPblpYf4l8zB+M9g0
|
||||
QbTphAAiYeWBLoDWNZW6jiicsQ27EZmGgotcJ855t1x3CbEey0KpmEeHACCrR/j3
|
||||
tChNYXhpbWlsaWFuIEJlcmdlciA8bWF4YmVyZ2VyQGFwYWNoZS5vcmc+iEYEEBEC
|
||||
AAYFAkh5tUsACgkQ4+RAT8wxrpeT/gCgvLNl0Ygmq8vBSdu6QXRzrWzQqGoAmQEq
|
||||
gEXNzkIENamBEmderAxauC8HiLYEEwECACAFAkh4lMECGwMGCwkIBwMCBBUCCAME
|
||||
FgIDAQIeAQIXgAAKCRD5iaLlyTxXAJlABACYHTf8nSIv0wR57ApHmF2AKub6OKPs
|
||||
KBzHP0/xQKpJ+75suk/0CNL7ve5RknHZ9f202DBQ1UOE2ibW6CbXokuhLPQHiWcD
|
||||
h/LNjn/gIB8y8yIr64SNX2u6563ZKhs2p72BTAJRquWdIwjcg6sXeWbvY/B7AFeJ
|
||||
14v8GKWL3YWxQbiOBEh4k0gBBADGhb6pch9zGC9pGDPEyOujwXK1Iq9V7k6ECBSs
|
||||
uzANb8GCAA+xj+jna20Nphnckd7ZMkiNyd+GD2fyFGL6BvIMGQZrLcuOK0yCkZqN
|
||||
SVZ/Tk98u0PaaFMBMh1XwdCgn5NKtzxBOZ2b2klBJlI3Rr4vBUqwe6/mytH96DfM
|
||||
cP5KWwAg9S7R24ifBBgBAgAJBQJIeJNIAhsgAAoJEPmJouXJPFcAFl8D/i5vkJOc
|
||||
O/x3ANfQE/tod4DVo1f5+oEULBZOrq03M3bBAQOqe41hvlmrLjr0gTcKAwBp70w4
|
||||
iu/YXdirZTx9eTRMhnMS7HRJE2Aeui2eE3adDQV0hl7MouOgdWidIAQC3H+sNwT2
|
||||
rvqbxAg5UkH8u6UUGuMmtbOteaHArPDrujg5uI4ESHiTVgEEANRz9ivIoA1WSH+4
|
||||
Sr8QhhFMn/SUit/o403tAhCkIRJszvzIfelTLQzv17jBgNiVsnxtOtY+dIJLFfWS
|
||||
cJohYlTEnLjeZeeA8abQUMjXpuKc0jUxspaHes3ywB/dcTAUZcsKxLboVT/X9S6j
|
||||
99ErdM4Map9KOVgAzPGZLNgxLcq9ACCUGpzdiJ8EGAECAAkFAkh4k1YCGwwACgkQ
|
||||
+Ymi5ck8VwBjxAQAhdcrZG0Q4LIk0d1RewO5dGua4XjqwyyhYuzHjs2X3Bel62bW
|
||||
oK46DpretsNxnP80m79leHQOJalTAW2jMU6KGdLvlGaaaaZ0aAcxzeRltBsBWwe8
|
||||
9TdzBiO/eMiU4XB3PW+cjsc/gN/T4+hcbculNFB9skt7ODV4JHu6EZdSLmO5AaIE
|
||||
SHm3yBEEALKRSNJ7OcgSRHAEDGLj0KZuy2PxMoCtUl4dPkdnWlcGe57j6l6PE5aW
|
||||
jK6lxKQ10i7J4KM5kOt4nudWCmxD4SzSiZx7O7md4PgLypzDG3nDvPImS0Yu3G+S
|
||||
g1oZ5bksqjd77X6f/OuGUl3/gOpo6IejlaMy21ixeRPR/8ZMl/OjAKDLontnXlp0
|
||||
y39oOJx+tQ8iWIzzuQP+NOqKnaO3aHnRE+Balyw/TpBpX5NnufgCFr0Psejf2fQz
|
||||
xTbPpny7CsmMbMJlPHXE+OZ8mSy8mdryUIFy8C9bwPe/6iSsv5rnZ6JWJ2oRc8qC
|
||||
fI38oSepEHTtHz9PhgaN8RNCqVyomuzXZmfkrcIVitsq3KVFTw8HhBA1Y/mHFjME
|
||||
AIW1VSa0Pxm2eHCCcuieqa8zVtg/dt3qO5bgyyR2qCvA5xuYLrnTRYiOkddw9MQx
|
||||
Zz5ZB2IGlF2jAyja+zHZqZAO3NiepvZwjo9zhQKzacKP/w94C1R/gL1V54/7p80H
|
||||
ySRD1JolwBjoYxdKFtDj5HoJ5rC3jTbWY3l1AQQMShJxiO0EGAECAA8FAkh5t8gC
|
||||
GwIFCQHhM4AAUgkQ+Ymi5ck8VwBHIAQZEQIABgUCSHm3yAAKCRCmAuWryUxvA7AE
|
||||
AJ9jajPUCTGt3apXlLI18VFpxB8yCACdHKZcZ1JoDN94BVI2Qyt5SJ7RKknmMQQA
|
||||
k6cWvEftN5Q94VOMjPuFOcrOvnjDGJkh4GgpbfSCLBTkX/nqus9iOMNYjHLL5pUi
|
||||
jWEfdXJUenPfo58avgTzvDtF1EGoTw8ykzbPUZ1+CmekCt1/NaVSSY8+8HxS2FiE
|
||||
kZoXlf56ekQOjeoa01Uo+MLc3aLBnFjW1fWAQmocRfC5AaIESHm4zBEEANrn/MA4
|
||||
BglSMlASTsCEnVJZ7vQwZYuQfxxCiGsjFckBWY/D4Xm+RB0L4y5bOuqNeAc01sb0
|
||||
+2MHpBqE1Zeq0nLFfTBACKH5GUnWB6f4T5P613Yjo3kR17/WSb28FnSQww2sP9gW
|
||||
oSDoTn1x6iNeXh2waXW9WJQoCZHUDfkT68OrAKC9nE6MeuSPd+PNhAfBcR3S6SOd
|
||||
hQQAuTmpLKGqx2auUnwDAajM/RuDCS1lNCAku2tHpvqSdDb0xfyLnTNwbjHG/cDX
|
||||
oZLx9CYEoNkxQmlyUfg91/64xXjskbs7aTRV4tERV24duQnNXrWvQ2bfJeYxWNrV
|
||||
VqlSeGokL5EYe7AViMwi+uLmDVlHjtxASiWaqqxIVC3dLXEEAK0F7bdFvw3RnPGT
|
||||
x+JJV/5+L8mbTFdfwvWVXuN8oDkgAu9PkCLcAuPD/ZYsaZDic8MkcMbo5dmbH9+j
|
||||
Qr8pft0pWJjueAj77zmETGKohqsf6LGRc10FAFF1E9zPFS8hvqdI9TfVBlxdPjwi
|
||||
pNisGmlYsIUBqnHvrQva5L0sEofziO0EGAECAA8FAkh5uMwCGwIFCQHhM4AAUgkQ
|
||||
+Ymi5ck8VwBHIAQZEQIABgUCSHm4zAAKCRCOHjXGZ1Q1G9DZAKC9K0qtWQE6CVic
|
||||
IV659tdM0rZzqgCfaOC25bYAp4ISZBo+HUH6zJy51BDMzAP/TyqD7Fme1lwF2dWT
|
||||
tWcUInqOwhLX896WaH9Y5NJYe98MNpQxr3wizYOwdJa3t9+MVvH0+s6ih4aaJ49n
|
||||
71yaef7YVkZ+0gbdKrOOrILwPg4hHizMKKDGbMaJ1OTJbE3PjFhEsdZRy1M1wjzX
|
||||
Jysr6rop4tOTfXLTX7m5hXkfJ/k=
|
||||
=soRW
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
|
||||
pub 1024D/5F298824 2006-09-30 [expires: 2011-09-29]
|
||||
uid Simon Pepping <spepping@leverkruid.eu>
|
||||
sub 2048g/40F32100 2006-09-30 [expires: 2011-09-29]
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.10 (GNU/Linux)
|
||||
|
||||
mQGiBEUeNZ4RBADSETFxXTVUP98ydSQKh6gEkS59JPaCAkeNbMeM5VBK6RcVvjtK
|
||||
zxadtIfcaFx++OCkABCdWnlIIVhjYMMYVV9h3DRFVwYEp1LZb9ktU+PxIw9kI75+
|
||||
eNMsxCpvYBvw9nFyHFPAdtnQPNpMSG7SeCNOHtSuErACuxOuo9JpwIWNwwCg469m
|
||||
S/sca2kkmYuKqrWXD2cfZdED/3awMvn3cThlTsT0zqtQjuGBJjH9bJwiRdvNpU0M
|
||||
cxw7xC1HGtfBYVQd9XastVj1xToDq7gCY5+qoHXLgv5BqLwecadtjuKEF4FXAmtN
|
||||
1qmz9sAVlYsnA4azCADyLv0A440Azbzg9ruEBAf1U6JL6BtpKuLQ3RSCrYicO3Vu
|
||||
fHJWA/0crJgn3GTDtFegMTDtlLvBcRXbsKBVAddbew9WOVfcTo1x7r71iziJZtgj
|
||||
o88pNLHy6IXWvZr+VvB4c0V5U0K7eB9B956G3/t+1G8lDfuzVBqkSqAQXv7XmIWB
|
||||
r4FIBMW20uNl8LO3461u+lDpIIXHZrucPmpHxrcFrzVTxknWqLQmU2ltb24gUGVw
|
||||
cGluZyA8c3BlcHBpbmdAbGV2ZXJrcnVpZC5ldT6IaQQTEQIAKQIbAwUJCWYBgAYL
|
||||
CQgHAwIEFQIIAwQWAgMBAh4BAheABQJFHkuQAhkBAAoJED4qb8JfKYgkvcAAnjXG
|
||||
Sg3CFkDVdHQNA8pURERLc0dkAKCx583xMH1Mj6Bicvu2Y6YBKBl03ohMBBMRAgAM
|
||||
BQJFIm1bBYMJYcnDAAoJEPcwlXB8YRWE5ykAoJHj4TgPp7PrHQBmvcU+6iUN9Iba
|
||||
AJ9yP6eQoewU5K6z3fgH533MeNJZn4hmBBMRAgAmBQJFHjWeAhsDBQkJZgGABgsJ
|
||||
CAcDAgQVAggDBBYCAwECHgECF4AACgkQPipvwl8piCSi+wCfbyubA0KeYeq81I21
|
||||
8k8EZBeh8hAAn0jfjHGnPRjLkTMntXKn5ecBMHl+iQEiBBABAgAMBQJFHkebBQMA
|
||||
EnUAAAoJEJcQuJvKV618iBYH/izt6qzYzon3wLNQWdsNpPE31we5HQK8dV1Q9n+Y
|
||||
eVBkPOvCJdFmIpWZ0GPzIa5c3Z5BUJ/Jl218eOOosmSme3I4Z2iWRvXTCzwxM7Ns
|
||||
AR07jsRtnpf/hwyyQsLM/CXC+XQ868/2CJ/a9BomBbweQ4uLX9YMfJaZfty+TN8p
|
||||
2Iw4ScluvM5zghYC9OYRNPtxGGpWwxiiz7XGxLvcDMzGvpq7Z7BT/3D895BAc15Z
|
||||
LOLUTgGmPJResjojlPuf8cN5IgzKbr3jb67MwFwa+p0kwMX0RxSmFSu1PciyXgsI
|
||||
vLHqIKq97SX226VReoojLXVlgH4692BAc8NDLmuhOufxCU6IRgQQEQIABgUCRXmd
|
||||
sAAKCRCgctTQQ1jFhI/HAKCBpbQJlBCg6c5pCpQA0pbWJj4H7wCdEn4Tp6cOL4om
|
||||
Mrn+WcndhYQV1VmInAQQAQIABgUCRjoJCwAKCRCazTzAqZ913b/cBADPHk651AFC
|
||||
fjEyV9ag281WhylVErEOEbnKuftRGLQmrR7DwPqbESVMBbdfPOQGcTCtaL518W0J
|
||||
A1nyF+0CR+VF5Ca+RVR7v5eN+EXaUYkSvEpGWGRizLZ4kXPC34MVV1+HWTO9hH0W
|
||||
4i/9GYeOmtN1h+EkObhKvPpQsKyQcKuDnIkBIgQQAQIADAUCRjUVOgUDABJ1AAAK
|
||||
CRCXELibyletfAVHCAC2d80OSi18/Q8eohrF7GGz3LpOs5pJlV03t8Ym0gpeUj36
|
||||
8sH14vtIcy4Ris809osV4Qwb1rHSdesTXcEmbXqp+DyGbny1FK0AqASWU7jx90iC
|
||||
eR17kHKQzKfXQzO8GLic8nM4baQoJc/G1hhNYHhv6e1KR7jjurIqETFsP1ilAjBz
|
||||
cK7WvPIHTKVNJtPE/JVPMoE20oM0AhbVTmqNuIezVar2LRnHq93ug3SO+p0/CJ2n
|
||||
KnJy5uXI9dPwmEkwoHvlfYygcCMlFMyWJdbVtX9Oip1LWCcmk0V3Gyzajx6gQ3Gp
|
||||
OT4Gm6I8DmdJ729PexLzB6REqseGewsbZGVbcKF5iEYEEBECAAYFAkY45HkACgkQ
|
||||
FUWz/uIi3k/4hQCdEveDkhYCwUZANCdt7/YnNzrLd8cAniY3rgKN5iADh079Y7BV
|
||||
pz0DGDNniEYEEBECAAYFAkY46RQACgkQY9CtrpESA+RUMQCffDDmM06WKNy6UtK9
|
||||
qZ1vuqxdaHQAnRi1+tt0C8AVxHLmrc8xJ4riWi8yiEYEEBECAAYFAkY6CQsACgkQ
|
||||
UI6uxTAtpWgkPwCglCV6zLcE6W5eWHDc5iEe9ZbmOuwAn146k5PkdrdDbZmxOjnS
|
||||
5K5nPoWyiEYEEBECAAYFAkY6CQsACgkQ3bpkuiwxLS8kPwCfWLpuiJrau1qcSBG5
|
||||
NXykWDOr0gIAn3aJCWmN+CGA4r34jYNRGtacXWlhiEYEEBECAAYFAkY8ymYACgkQ
|
||||
mHDv8/EvYHJe0wCgkB0m7in5++2gZcEmdttG45hfTj0AoI/ii53ITSPefqHmJQzB
|
||||
bals0Yu7iEYEExECAAYFAkY5GTYACgkQ4eHysJkO1Kq8GACeN5/Y3yzwehxoJGZh
|
||||
0JKOg8hvwYQAn3ovqhb6frS9LpofciPlQqMvXSWFiEwEExECAAwFAkY8T/EFgwhH
|
||||
5y0ACgkQTAQoGDEaPeXlSgCgtmGBnRIe8S5K3IpqlcfCAPdPxvUAoJGBgJHXg1Im
|
||||
UshwAbwteZkdQVGyiEYEExECAAYFAkY9pHAACgkQLrlGgoiBdAJNogCdE7iG/eKK
|
||||
O0VEFOSqQDYQ6Sng3MwAoIRMfBXZxir7htM/oidQDFkz7SJaiEYEEBECAAYFAkY+
|
||||
FAgACgkQAqWmBQt+bPrp7wCbBFHuKLDk6eRA0W3gdvyif6hJfVsAoKxSa6CAW8g5
|
||||
WNR952HrF8ppI8MciEYEEBECAAYFAkY+2+wACgkQVCINLMh0FVyfjwCeNCOwfFse
|
||||
NsdCgcshIX1bY3l4h6IAoIP3umLxOhE/yV5iS6FQHwa30zT5iEYEEBECAAYFAkY4
|
||||
++EACgkQc92MFgFTAjX0lwCght491w1RhqKIwrav3K/fXqzKr5QAnRpvWtad3/2X
|
||||
00mgOIpCrvKY/B/kiEYEEBECAAYFAkZGEngACgkQohFa4V9ri3JOogCdHeVASK7A
|
||||
nKQRtmieDzqKl1lChgIAoNqpkJ3VEyl/WvoFW9An/lHSzIC4iHEEEBECADEFAkZI
|
||||
xWEqHEhlbm5pbmcgU2NobWllZGVoYXVzZW4gPGhwc0BpbnRlcm1ldGEuZGU+AAoJ
|
||||
EDKGTkGchSIrOG8AnROvc1A0G8kgCdUWkJMC2XSwMmh9AJ46ANKYC8natSxqozxM
|
||||
gW7pOccPJoipBBARAgBpBQJGU8qlIBxTYW5kZXIgVGVtbWUgPHNhbmRlckB0ZW1t
|
||||
ZS5uZXQ+IhxTYW5kZXIgVGVtbWUgPHNjdGVtbWVAYXBhY2hlLm9yZz4eHFNhbmRl
|
||||
ciBUZW1tZSA8c2FuZGVyQG1hYy5jb20+AAoJELK+vEAVKSSvaB0AoNZvVKqr44P5
|
||||
+N2O67pg9raBEK1AAKDVfaF3I88KgwoxhVT9GI2UzjVB3YhGBBARAgAGBQJGPypG
|
||||
AAoJEPXCYBZM7tdfs9UAniR2tRh8h7s7RflPT6lYYm5qzFWEAJ91ffpU1A53yRVR
|
||||
+JhZejmuCarVN4hGBBARAgAGBQJGQL6SAAoJEG0LxzpAWBg3TucAn3Ae4QnaEqhe
|
||||
KEHP/equWOPxnWmrAJwLv0enRtVE1Db59OzRs0CHmf2cRYhGBBARAgAGBQJGTEbA
|
||||
AAoJEB8hI8Nr2HKgjukAn2gKtl0NF1OBdA8xqneWJPIxVircAKDRQZjglFLJLBez
|
||||
JQz8MnGJ/G7UaohGBBARAgAGBQJGTIJCAAoJEA9FCiZiEL/Ao3AAoMOpPKpPGxJf
|
||||
1KvbnEsH8v3CQN+zAJ9uUKEoBiGUxisZZqHXXd4Xf9G19IhGBBARAgAGBQJGUne3
|
||||
AAoJEDLB1u8PFDvBQycAni+fIPBFC36EF50yne0E0rXosVeiAJ9REycXBtugmf+5
|
||||
MDRR+fCgveyYYIhGBBARAgAGBQJGUnfBAAoJEMuuvjmkbEyhT4IAoNqs2oGq9pSa
|
||||
kOh1jRMjbBcs45+WAJwPrhkv5v4d1AXR/BHkFv7YAOE0nYhGBBARAgAGBQJGXt33
|
||||
AAoJEJqG18zRqupg020AoOpOpYtaGLZtLeKRFT1Cxv7jrIKgAJkBy1XCk3eyk0l6
|
||||
JPhcTMjeF2YEfohGBBARAgAGBQJGXt5SAAoJEJqG18zRqupgMMIAoNivpEP5OOfq
|
||||
ynsSlqy5mpZu5/NJAKDZZEYMVmnlbYIG+lq8beNIoOYej4hGBBARAgAGBQJGXt5b
|
||||
AAoJEJqG18zRqupgQMIAn0n53SiM2QT+Pyh0Abg/8N8th67HAKDvh31p6Nbs+Go+
|
||||
E34KkJhystH2EIkBIgQQAQIADAUCRmpbBQUDABJ1AAAKCRCXELibyletfMatB/0Q
|
||||
5EsLwryhcjAQUWrxisUl7Fx3JFv9txAr85yRirO6EmtjhfTjM1rCYVAQZ+G82PyA
|
||||
EWE5hAGqXAE75y2+o/PJZJTSsB2nCjie0cLhsuWh+epRcC7t8Q3jevV0Y0uobAP7
|
||||
1q7jFIAaE5hSHOC4glfCVv5R9plHJBxGJ+AA+kEf6OSXmakvBTRybI7dNltaxs6s
|
||||
z+XwfxOaPwHOcKDtOkIgF9zWPdWaNln4CYW50QRo4u0GTUTJncUqHF3RQE3mRF3s
|
||||
K+FDhtDf1biXdy+6B0gROchvjiek6kZxBTsoKdyqsFyl+rRUloEQ9d8Kr26VRCZM
|
||||
KPjAav8ZKI5aI77IxFt4iEYEEBECAAYFAkZ0E18ACgkQ1TNOdbExPeJFVwCgpGSO
|
||||
XyEXyod1fLU3qZ2ZYU+lCvAAn1KbMu+gtTrDtkw9Rsw5cZ9AJttBiEYEEBECAAYF
|
||||
AkalUscACgkQOb5RoQhMkRP87QCfb2LvY177HP7ggfvxFJjgMoAieuYAn1kCosw3
|
||||
DKlTqIe+gyc4P6X+iWmviGsEEBECACsFAkmMmbUFgwHihQAeGmh0dHA6Ly93d3cu
|
||||
Y2FjZXJ0Lm9yZy9jcHMucGhwAAoJENK7DQFl0P1YPjoAn1eJPt58UwBXT8tR5qm6
|
||||
rHY0P2UTAJ9NOUtxQeEestgMuHjToiguxhP35IhGBBARAgAGBQJGrdMCAAoJEDPN
|
||||
ZzOvXsRSgQAAoIBihP4nHW05Og6dyCFV/eFYoOoRAJ4nA6H9GTZM6+tt8H2OlfOz
|
||||
aR9W/4kBIgQQAQIADAUCRzgQ1gUDABJ1AAAKCRCXELibyletfDF0B/90XPtQD4tu
|
||||
MovOM++nGgpk7MINP+K1eOIyidGFD5NWHdJGOwvsP+NoNvXZxsO2+SXF/1ucnR+v
|
||||
RWmTSa8VumiKN/zcfMwd8e6tzHw3vQUlQCkW9RYtxHNqtff6IEJSQSb+d7hL6WbK
|
||||
RuGckVm7jJLTY4mdBvgbBXJ9dyYgAe0I3tptGx/KoChT4mBZkUofNLefs99ODdEP
|
||||
rqchJ+tQ9yLeEXA4wIHQUooZUVueQgllymTv1QLg4phLwAsyRuvzkOBVIjO9uzx9
|
||||
XNc3cN+Zodqti4aoRFwpxGDfkzSXw1HW+P9+dSqnhwfHj21dHGcW0TJdSZILINO0
|
||||
nHsO+slRqoWdiQEiBBABAgAMBQJIEj/lBQMAEnUAAAoJEJcQuJvKV618CEAIAJ8M
|
||||
+wBDED0VlEJFVNYJQOLS0TKwThI7LY73vgU0XyaGh0lsNaLJSfDktdzweo02UhCw
|
||||
DgnnYFBQfitV5jLBHKHJsmHLFC7vLLngbnKmYG63bjRC6PTfNBCbOuaDyPEXxgAR
|
||||
5g4z0tjme7t/wVAQgxKUJTfhAoXMK76y0RMlc0OjHCPs/L6Xn+jJawt7tKdIC5BY
|
||||
Rzy2R7Y7zas1vYhGjl7vlU44+jplAXSbmuXtdnRovvkxxc3x39Ej8CzPrSTeoa/I
|
||||
nWB55+C0Ud3zh7dsSmKXIU75ho/wOuDZbW+1l1pb9g5Tu6/lhGXlVs00bh1EjLhT
|
||||
MHg2zQcFVkMQzcVBsWu5Ag0ERR41qRAIAIhe8b/RLEnK4T9cbL4QobABV2NsnTPP
|
||||
2DJFOs5YKGxz+7MjptVSvGVAbBoSqxsIjvSovlaTsKcXXGUK618xrbxhdIm2U/OO
|
||||
9wAA8Mk7SSZdYnQxhgPeuh3t+qNuKlbZPldDhRn7+fcoOdXY+iGwGeacY5drfScL
|
||||
z6ALiahvNugiHyYFeqZk5wZbbYv/mJJZb5BTEeOcKU4JzU0VbCoui7KGmEBSM+H4
|
||||
z4uyx0zCgmTz4tcPwi6uJ0fOUxtThaR/67YpYmTsEvf9deX3LUhJ8MBkn2/N+zqK
|
||||
UaYqZpS+YzJKjGq66Nmt21r7HjYZnXjN3CsgZQtEtnQK/+xVywbzdpMAAwUH/iag
|
||||
f9dLI9A75pbMgdw+t95nNDOjRAvfQwpIpkmqgkAlqtrV1nsuUsi8IJ3W9ZH5QIk/
|
||||
LoWZ4gIDJ4ZtOmHzifurv0Ftvvp7MeoM5/Momu60wZfIeZloyy9RfymHCyr/A8VE
|
||||
/ayEZQnpo76HiyhjsmcIQIvkiK8gzGnLpQPchcwNTM3CiZ2Wc9e2wlJtp1/r60uz
|
||||
Lmv3m5iMms241FOfmxn0BnsVfFzEOG0uR5fQUXuanFAa7aGPxGticGi22mJkYhWO
|
||||
RLrKoDYnnccpp8cN3shNKZVLYrGAiLPtM2p83I830BV5rTET5oCM948ZtNxkXnWP
|
||||
ZAiIYSaFU+YapzevSpCITwQYEQIADwUCRR41qQIbDAUJCWYBgAAKCRA+Km/CXymI
|
||||
JCaWAKCbFrAAM1xAOda4Wkn+NodF2EMosACeOEChn8Oeu4bPGP4DuLJgQH0jpSQ=
|
||||
=geh1
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
pub 2048R/0ED3D317 2012-04-09 [expires: 2017-04-08]
|
||||
uid Glenn Adams <gadams@apache.org>
|
||||
sig 3 0ED3D317 2012-04-09 Glenn Adams <gadams@apache.org>
|
||||
sub 2048R/F23E86C1 2012-04-09 [expires: 2017-04-08]
|
||||
sig 0ED3D317 2012-04-09 Glenn Adams <gadams@apache.org>
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1.4.11 (Darwin)
|
||||
|
||||
mQENBE+DFvEBCACwHesM5hkZrlgPiq588FbZPe7QGtDRVdh0YbgI2A4Ky2odbFmA
|
||||
/n7lF9v+yf+FUn/0H2igwDYqLFx4JsB7z+Nvj+hwExdGQxuDaGSwMjjpJeEiuEmf
|
||||
b1Er5KYgpeFNm1MVP+r5kW5962O+HGIEx1xQ85AskNbr/jQkAg/wbbwWLFBQRMER
|
||||
PqFs1rXL2aWip8XtNPKnKBLPlFPn9a7glgB5Whgbls44KpR0dplAVoCWMnZEYnTA
|
||||
JYITcaDTCGFQI7aYgbj986RpS80o/Wcsnb8rjHKRZG8TaDr9MbgmmK39KwiJCflJ
|
||||
9LvXR9g1j3addxgqEUuQBEtoLkWs/eDT/KQ7ABEBAAG0H0dsZW5uIEFkYW1zIDxn
|
||||
YWRhbXNAYXBhY2hlLm9yZz6JAT4EEwECACgFAk+DFvECGwMFCQlmAYAGCwkIBwMC
|
||||
BhUIAgkKCwQWAgMBAh4BAheAAAoJEGZUur4O09MXl7MH/jfeyE012/ABTTjvwvRw
|
||||
2evD3cfghrZOQVT3PVEcVnXIcnVlmznO2DDs8aWXlhJ94ZnNdw8iKE8weK1FGXdd
|
||||
qWA7vHrOI1UAo7h+CDaBt0TM6OEM3Mp3+5baOJMRXyrjhbv74sj88HYRtoPhA2+z
|
||||
5ilVNmmX4PEAc6wqt87ZfNQ2ZqX2YzR+OaT5OggSB12qU/uE7d4d0NcDozEKQFUP
|
||||
CMAuPJRNd4/J5yFy0DStfgsDKuUTir0oldlUElAjbhF8WtAgRwufIYuG/r4Cbuid
|
||||
Qc32yVAoy069ZcggwBpkzVPOpL2by1fzeSohjIkntDIL474KuSSoBKCuw2nYxpyw
|
||||
b0O5AQ0ET4MW8QEIAMFUAScm2Dw1fmBhmKMVc0mzqpR8TvSQvwJLiXRSP86NI1zc
|
||||
DtuiXCFfNZykOifFk50otMH1hd91hqeQ6HfsxxYtXLg2UDHG2gTKzlWefwA+1eFc
|
||||
M8fz/oV0CanGjqaOd6VZoYeg+LSD6YgrJZVjuoxNN/S0A9fNd8B3CXsG+92udkkW
|
||||
YMyiUpD5qjMEwcjmj6ITX3M9VLxDCKKhYwN+u5wokuAk3yKtvBpWhJDQbaJcuDaC
|
||||
rLH788gFybZDzyJ8Ug/95peV9Z57OCjMJLtn67ES7fB544EQRYVmDGnX5tTo9sYj
|
||||
0bDjlbKX9lqS1sCGSezPxYxGgeXlnQrt+Sm+gd0AEQEAAYkBJQQYAQIADwUCT4MW
|
||||
8QIbDAUJCWYBgAAKCRBmVLq+DtPTF2YbB/0Vo8Xr9N1adqlY1UAofvo5AoXZFxFJ
|
||||
jkB0Eb3z1V3iSBh8P921LD0gUQz6JXptXZPVGnwgm/44RdqXC+kX+4MxiVBtNAHp
|
||||
0ODjIXiabBrixAHnT7EcAJkWue0RP2J5wiYKklwWFbEetjl0QSmitz8Jh33eA76j
|
||||
kFYW+vgKUMA8UrJ6j2Hk+vMFi0Odtntbc7AXvLifSPSmSztNe/Mws69EbuBph6bQ
|
||||
+zSmTQ6nt8PX+v3e0PnkXdGD8si9H6hj0K32pEMz86ttSnAtrhvsAdKPYOkY7/JD
|
||||
0Bl+bnb7FLxJjJGlGuO/Rn5SIR3fFNQGrE/zl2wsKtftUXse6kkZSue+
|
||||
=XDBB
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1
|
||||
|
||||
mQINBFPO06wBEADhHglUaaLI6Nk+CUkpKMRWtVScsljRTmS16wxTdJ22kHgzkVYq
|
||||
jomMDI2jAs0Bx//ju8Khsn3zZ/ipPVPgr9Wg3cwmnrmBDUP1qT34t0UQwBzot6PZ
|
||||
YHY2sGvCaIPbuh8ZOIbT7u73ir9L+pNl+BmeCPDGV7H++71HxvCAW+2fEjwo+14K
|
||||
Vua7HR/cwDa7DqnWXCLON7XMJmrzCr2YcKhyF9qAcMOyu/Y67yXEmlest6L/Nybm
|
||||
tuY8g9EBz3iyQ7Ahc6KPRw9uWTRwuUhQlEDRnqOgUGGwijBj6dArLCkK5Y4Uq/2w
|
||||
1MbWzjMcNVQO3nZJIhatczcvBWjR0MfdW5Px+lpdVanOTNPYz3lNsOcVr3UQEvJR
|
||||
T8sPB3qTRu/inQJ2HJwzh490z/FnCfGepxB+36RaEjy06vBTZYWH77adg1eklUQF
|
||||
h4pQq/mbEZvL/g1O3bWlUnWw/Xz1oBO/K8yqaryEEdTjcEVDXrvz3xDRSmXmZiei
|
||||
hcSbNuvEvZI8l4Pe3dDwkSeJxKpaIGgZfPZH833Uder3R8rO+WJynpNKdHChrDTN
|
||||
+y3CqOVNtmdd9Cf3mFS91U89ul0wqrGyESV0180FsRBMLTQX6xsGARpGZg+DW4DB
|
||||
MhidUJbTOT7C0LYK39mimgFlzM+oN0tfU7tfYsNWzjsPJ5Rni/KGc9s8vQARAQAB
|
||||
tClWaW5jZW50IEhlbm5lYmVydCA8dmhlbm5lYmVydEBhcGFjaGUub3JnPokCOAQT
|
||||
AQIAIgUCU87TrAIbAwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQ720xx3L6
|
||||
J1p8eg/+MkA0oWfP3SV47QtVxXSywCTGn1oN9R1k+iw+FHFitJ2u3dfZpVWbySSv
|
||||
o49OhlR5YoQjA5aR4hXpicSmu0DJyBbZQBHjzllZC8CcU810uwT5E7qMD6rKviwk
|
||||
cKM+q2ntI0yfZ0wI8rHWtTIV9FV0Y3YNuHoIPP86gyDTmNOMX5lR5EXGPYLZdD6e
|
||||
NTMzu5VlQoW11AgXx5N+2qbRVD07v9nJpbl8c76/9A4eahVSXV9nhFsP2PFuEsDu
|
||||
/EbszLALevu/ieE2delBpXcOErZsn4Tkg56pebOS4kjitERvzb5axAskulhQVVF0
|
||||
DTUOq21d77pD7Al6qRHODFH3hPGjCsk/2h8yVs1SK/IKRHR7LE5IP9EfVazJmOZa
|
||||
/7DQ1my5WGD61/i2qa4hXYmDVTNEUWfJ5eSZ9Newm8pwa4pAVx2umOLe0xqxbUnk
|
||||
SzbZGXKREIFOiDh0XA9VN7yNUWAFs6T49NsCHzn6q138I2Pp8hVL8Q142ywu5OLH
|
||||
RDNTYfJZ0qLV/UyQv53g0zss2OkJz/r9WL7feWNtj15N3jJj+SCtj4f7PsJ5O7GX
|
||||
LFWBV7HrXhfNQxwaRoE6ksDshW/AVIJ7mwNu4tXmXksFYd32VVHoHL+ppOqRo9aV
|
||||
iN5aRt6CJFWYk4CU47rm7Vfgp9RRCXJyen8vM+KOe8gfIMG7g/OIRgQQEQIABgUC
|
||||
U87YHgAKCRCgctTQQ1jFhA3gAJ9P8I4e6oTZrE7MPF0f+VlxW06BvQCfect5XgkZ
|
||||
SjzjS7htUjNUApEcbN25Ag0EU87TrAEQAJ34nOX/79PUAl8kAyyPl/3V2My0DxnB
|
||||
gyXwYne47fQxwYne1EWljO90KGRKiJoarClUZ3/QkD0jArGRgLKK2kEAF1RIkLdz
|
||||
xNYE/weo7vc2rjRePSsGieE1Jy5aZHZkejaD95d/8Ve39qZqc17wWwF1ccw2OFlZ
|
||||
e0Z4rwLo4f1nNrRoI+RHeB/2vdwYGdQRWQ8IQVCkEZs41wFh9XUVuM/SpY7+Tet7
|
||||
pL/NsSy0YmyXae0mHMOn1pXq0/K0zXZGy54EDD2flvyZhai+t+I/+R0xElrFsBDo
|
||||
gt291s9YGPLJaQOHKXS9vxwUp7nj64rkE4fo5ogCSP+4WReZRfJaz+8tee3NE1zM
|
||||
JHuc7oolZKUpxJlBmKrFs9qZCvAnpkrBcIZgUwiEqgZP8ptGXvcle9fqcIhpvqDo
|
||||
NRyW98cGQZOe9QwV9tCnBtSFMnoUFUXuvfy3stEBBWLYSWABip98W75TO8tVn8DG
|
||||
SX3ApIpIIBhUmnDR3RWN9N/5AFTiDLr/Ux+mUBM7u7vTImMvuQF8+UNxXCg//rmg
|
||||
vtYtMQ8Jv1k6V7RPbjEbkRXNt+JIpxSy5rQo/USEJxiwoiQKq5blGrBxURWS4jQs
|
||||
Vc/Mhh9OUdDftqyH4ZHgNbbzgTu9y9CCloD4N0gzGTjqPFvLpKMuiv3IKKlHe9wC
|
||||
Vtjq2eShQOxvABEBAAGJAh8EGAECAAkFAlPO06wCGwwACgkQ720xx3L6J1qAzw/+
|
||||
PQ1gpXiNz4+6GJqDWhtmzbPpg5XVUMkO1fCyaqdJu7QmQhZQo3ZNtqqq7zm2PuA8
|
||||
/HJEzbzq6s7jB+qiR7lsLIzqiXVTe0kBpjva8PbPf9m8o7sm79hDwIhxuP0vac+6
|
||||
bpdpbzuEQ9VczVVgz1UruHhfA2Jgd67D9gXykQCNWWTewZ6MX0bWUQFkI0kIcFSq
|
||||
QqPMoHBm1LNef6sUg+bCDn1lGiXZZYeMkbeMZ7zlsqERBijFGfAatyjUk/I/W/R6
|
||||
o9ZKHsWJTLYg9oKTzwYYErHXoDm0wYehGC8vhMlc4QpCx0HrLBl2w+br7AErfKO9
|
||||
5g/YF1lotpsgFm8gswmED0+8qM9xm7JbJah3ahv6anttk7FjUOxgcclMNf+8ZW8l
|
||||
oKnOev7LmF9pBLBZ2YYZPl/GOU/x5aRqU12qmxeHwPp1hZ0C7kngkhtlR/WGuWp3
|
||||
FfAihujJYCm/OLL/sfZYJcC1W1w5Q/tJsoVlwCuAJLifpHxvNcScdLYLfSVFX7L+
|
||||
WZd4RVs2TDptk5ovcQk0GnlMK090aGE8nV3+oV72wssjWlMycKfQnCN2fP/DvHic
|
||||
C7ntv74LfH+9sIY9lrW3mqPSUqBpEkVQvWfO5yaABDyKWQKbL0oTIOqwDSqOw0Ll
|
||||
Jb8/mPX9jDboY95OyNYZ8D7o+lwQFeUbNwQp/qCS52g=
|
||||
=zlG2
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
||||
pub 4096R/7CDB6DEA 2015-05-20
|
||||
uid Simon Steiner (CODE SIGNING KEY) <ssteiner@apache.org>
|
||||
sub 4096R/73382B77 2015-05-20
|
||||
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Version: GnuPG v1
|
||||
|
||||
mQINBFVcZesBEAC5Poew53ijRTE5kV2o2Tj+plJmoQMRtfiurMUpPQ4s/vTz8Bte
|
||||
WoHdNfJrzordHBZdy1S7V8p2kTtKWyaNFMyVoavBqo/BurmJ/3qUKH5otXkXuaAi
|
||||
zFaJPeEnR6y7pxTYkwFKyrn7TE4I84JKZEMLEbJIw1YF3t76nj055/OnzRtwc2Df
|
||||
cPyGqDALyoFXk6R04qIotVmlX3NwwF6A0M79+W+kWvPg4sD4R6SqwJb1UhcqHrqb
|
||||
kQOllg74cBjyAikRbqrCfoydHM10gc8f5w9+8v/fbDkSBtoh8Y31WSK6ocoWIg85
|
||||
I3odqHFxThwFTAYQC2tdw1M5kYcOiYVqw91JvBivpKH02vryH2BJu9zQDNFeyXud
|
||||
wyengMLlzUUmf9jBk3M8IUE4JTerw1AzWj0b3jdvG7FrgHrlszb6eCzE3BdY7zGS
|
||||
Qh6e+ROsF2LEKkbjxeAg58nl/h5iLythheY0S6sspeOTuDtgLgm8TZiGHA+j/qKH
|
||||
DY+aRReI0X2bzqNZROhTIXHSKsoX9+9g5a+1NYQeZmiICNo4vj+r4+i037QvIoy6
|
||||
3K4NSVQgKnR9bbgyQCUprifrkywKF5a8eP3wtUGtH2FNqFQg1rUKBgLjLbRJ8PF2
|
||||
Ag8O0jmJBPxdOIdVP4vz37m+jyKE6L4JWjnaFldtD3NDJI1QQYX4MmXEaQARAQAB
|
||||
tDZTaW1vbiBTdGVpbmVyIChDT0RFIFNJR05JTkcgS0VZKSA8c3N0ZWluZXJAYXBh
|
||||
Y2hlLm9yZz6JAjgEEwECACIFAlVcZesCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4B
|
||||
AheAAAoJEFuT8d98223qTtoP/j5AH1w90HOiYioGGgxrxOciQdGNht0yOVPXHDyj
|
||||
8oKNBKYhNYQ9tAxNxEZFVS2KxB3R5dy/Q/9XvOP/NYTP8p0VyXmxNMkicUhJQOJ/
|
||||
6mnxkTY/jk7y2XkYtdCby28SfMdExbM501arnG+vmXRtr3TpRRAxXCfS3FBI2n1H
|
||||
Y7aX8pVX3NNRQqGxjnSv4q/2NKrR1ZFt7aDuAO9VfLXd5NkJkaGJ7E7T4AQMJE6K
|
||||
KYUFkYKGeOc5dm1mHZMTVanyYRS0qWSpcnsamdU76HQgtC7koJmaeeI0MtntMkpB
|
||||
jObTY80iam97P81hfhEi9UsAPy0WPBmossNqQFYQ5kQzxq030C1ERJl1nXJCkIpl
|
||||
CpVv/aIV+kM+WQeA41IHgfLZsxHTkYRxtCZXh8HbFhpyKGwNRZhyvPn0oSbjQcke
|
||||
oAbfnxCj1YH6TQGJQH1R1rGPv3ph3omq9pRuJ/th4uFmq06xpO6VLjUICV9F1N1J
|
||||
kmiVpivC5iRDKw30YeRFe/J0BpflPizQh2gnTFCg0Q0ICUdehGovWKPDkJsG2+hb
|
||||
AJaxfYQg5cJQI1P0UOc3w6rLh2ye3qkSRxF1O9oyRHuAZtKtsabEg3v7bx6RnX1F
|
||||
BYGCB8ckud+qYlBjiGKLP7fJotuZv3hFWlFBoXb9F0WDpx+gUoEUH8H+9ygodEUq
|
||||
gjCRuQINBFVcZesBEADFcTVSAZoaax9xpw1zxwjVgfQrNfobqnJM33r2EBSB4b80
|
||||
NbPOtoHJ2OUvHq4w84PB+H4+JNAIA2KbPOvzB+u1Bn5IgJr9asH5lhrnrUSR+YCw
|
||||
UlnCw+2YJumdv/l6RKcFKbSRZHWSwTD3ZLBMuPUqX9uZkOuG1ftTkcVtfFHN3WAu
|
||||
ckHjVxTSkaHhZ7ALz8LIUH+8AL3/3eThM1KEgx+bcod8YttctzjTy9cAaT93DwKO
|
||||
qzqHXpk6Fpv9bvdiNye8Ye7f8487N0/3alMPpJqt2tHAqjxJRDb590/09cbt2N6l
|
||||
6B+WlpM5hgkV//7ViL357Hids64sqbYSnmpQjZWUdafDvVvMKYbITmx26BEoWtIq
|
||||
wwpj7+DdQlxd/7bAtyk8XiHe6Ej9FF1PUEvBQw5NXOUiCSBo0hzcMMNy1uRb/Wpd
|
||||
oZX3TFKXTWulv95uzKGAo3zrUuKcfOGfDgqZ/H2dy8Yw9DaWJRnXyYwweUi1Ptnc
|
||||
Nk9ktycypCcVbsOQhGdQJNyGVUVgVV1CWz5GJ3eqtjHY09r7HEm6bGviJRu/sosk
|
||||
XmmjRUFpqwtDCRACYShDpnFjpmWTZegPcwpN+492qLP6cjh1XSN4Cg1YZ/0BMY4N
|
||||
V/yeadQf/hbM5hzPOhN6mr+VHOLulyXuV49EWisIRferqaXG67zIXbVQ4qfqfwAR
|
||||
AQABiQIfBBgBAgAJBQJVXGXrAhsMAAoJEFuT8d98223qGKoP/RtyjtE5zEkrd7oa
|
||||
vRK5FmNtdh8r63v8lwjxayCfmpQw14AQaPY7//ulfJQExpxqcCLFIEBqZ8o22RYA
|
||||
XnsV6RF3JAIjSktAh57GMqUljeNxBtlix2zv5MVi/XiYcmQrID812KNfp3/guJfK
|
||||
3Us5BOxLyDwHylwyb88dLM3rP4W8VvaRAEXfd0/6rhEugdCdcHD1c+E1XliqBw/T
|
||||
UP3JjnnABfKR4NMZ67ENxc5jPDg2Jh3wychGGhvLddqk32KEIDTbV2SZYxtw3ylP
|
||||
cRUtEoVGvkCDj8KpcLvvTbE7QCOycQMj1aHt5tc0w+Ibqbj3X+DdJEAxuZhMDyR6
|
||||
hDkIr7YGkRjFacYeaunoY4tX4+x4tkf33eNsBa3DV6r6R18DWh8o6bWzHpPuEMZT
|
||||
ewbUuSHF9xm0Ti3uehDHNHIFsnEpGDanb2UMO1kd2Xr6kjabce4DIHn+PhOqwC1o
|
||||
bO9KBKaWO4uR7K1eWjOkqn70F7ykGz01AveouwRyOjh59VdpVe/Zpgtp/IvD6bP2
|
||||
FbW6pZZeHWWoj+zaDmyRDn5wRfGkNuLUIMblgCXQXttAm/nYdRwPQyAI+T5CP8f+
|
||||
nmZfX1E6PwDD9rT+fU+0R1eAIkEZE+0UfWoBwbnei19Xqpwx6VH5x8mtfvUH9J5H
|
||||
PYDEgpBqDxD3E1CYq/cVFhKQRxpK
|
||||
=n+z/
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
|
@ -0,0 +1,202 @@
|
|||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
|
@ -0,0 +1,5 @@
|
|||
Apache XML Graphics Commons
|
||||
Copyright 2006-2022 The Apache Software Foundation
|
||||
|
||||
This product includes software developed at
|
||||
The Apache Software Foundation (http://www.apache.org/).
|
|
@ -0,0 +1,177 @@
|
|||
$Id: README 1896948 2022-01-12 10:37:20Z ssteiner $
|
||||
|
||||
==============================================================================
|
||||
APACHE XML GRAPHICS COMMONS - README
|
||||
==============================================================================
|
||||
|
||||
Contents of this file:
|
||||
- What is Apache XML Graphics Commons?
|
||||
- Where to get help?
|
||||
- How do I build Apache XML Graphics Commons?
|
||||
- Legal information
|
||||
- Release Notes
|
||||
|
||||
==============================================================================
|
||||
|
||||
|
||||
What is Apache XML Graphics Commons?
|
||||
---------------------------------------
|
||||
|
||||
It is a place where the Apache Batik and Apache FOP share commonly used
|
||||
components. Many components in here are also usable and useful stand-alone.
|
||||
|
||||
Documentation
|
||||
---------------------
|
||||
|
||||
The documentation can be found under:
|
||||
http://xmlgraphics.apache.org/commons/
|
||||
|
||||
Where to get help?
|
||||
---------------------
|
||||
|
||||
Please subscribe to the general@xmlgraphics.apache.org mailing list by sending
|
||||
an empty mail to general-subscribe@xmlgraphics.apache.org. All you questions
|
||||
about XML Graphics Commons will be answered there.
|
||||
|
||||
Please report bugs to JIRA at http://issues.apache.org/jira/ (project
|
||||
XMLGraphicsCommons).
|
||||
|
||||
|
||||
How do I build Apache XML Graphics Commons?
|
||||
----------------------------------------------
|
||||
|
||||
If you've downloaded a binary distribution of Apache FOP or Apache Batik,
|
||||
you don't need to build XML Graphics Commons. It is distributed with these
|
||||
two products.
|
||||
|
||||
Otherwise, install Apache Ant (http://ant.apache.org) and run "ant" from the
|
||||
command-line in the directory where you find "build.xml".
|
||||
|
||||
Legal information
|
||||
--------------------
|
||||
|
||||
Apache XML Graphics Commons is published under the Apache License
|
||||
version 2.0. For the license text, please see the following files:
|
||||
- LICENSE
|
||||
- NOTICE
|
||||
|
||||
Legal information on libraries used by Apache XML Graphics Commons, i.e.
|
||||
its dependencies, can be found in the "lib/README.txt" file.
|
||||
|
||||
Apache XML Graphics Commons contains unmodified copies of the Adobe Glyph
|
||||
List and the ITC Zapf Dingbats Glyph List, available from:
|
||||
http://www.adobe.com/devnet/opentype/archives/glyph.html
|
||||
|
||||
License labeling (according to http://www.apache.org/legal/3party.html):
|
||||
- Multi-Licensed
|
||||
- Source Available
|
||||
- No Reciprocity Required
|
||||
|
||||
==============================================================================
|
||||
KNOWN ISSUES
|
||||
==============================================================================
|
||||
|
||||
- PostScript output: When TexturePaint is used with PSGraphics2D, the output
|
||||
violates the DSC specification. Extracting single pages from a multi-page
|
||||
PostScript file can result in errors.
|
||||
|
||||
==============================================================================
|
||||
RELEASE NOTES
|
||||
==============================================================================
|
||||
|
||||
For more detailed info about the changes, please see:
|
||||
http://xmlgraphics.apache.org/commons/changes.html
|
||||
|
||||
Version 2.7
|
||||
--------------
|
||||
|
||||
Minor release to be used with FOP 2.7
|
||||
|
||||
Version 2.6
|
||||
--------------
|
||||
|
||||
Minor release to be used with FOP 2.6
|
||||
|
||||
Version 2.4
|
||||
--------------
|
||||
|
||||
Minor release to be used with FOP 2.4
|
||||
|
||||
Version 2.3
|
||||
--------------
|
||||
|
||||
Minor release to be used with FOP 2.3
|
||||
|
||||
Version 2.2
|
||||
--------------
|
||||
|
||||
* Transition from Ant to Maven Build Process
|
||||
|
||||
Minor release to be used with FOP 2.2
|
||||
|
||||
Version 2.1
|
||||
--------------
|
||||
|
||||
Minor release to be used with FOP 2.1
|
||||
|
||||
Version 2.0.1
|
||||
--------------
|
||||
|
||||
Minor release to be used with FOP 2.0
|
||||
|
||||
Version 2.0
|
||||
--------------
|
||||
|
||||
The main new feature is the introduction of a URI resolution framework that
|
||||
makes it easier to control resource access in a cloud environment. Because of
|
||||
changes to the API, the version number has been bumped to 2.0.
|
||||
|
||||
This release also contains a number of bug fixes.
|
||||
|
||||
Version 1.5
|
||||
--------------
|
||||
|
||||
This release of Apache XML Graphics Commons primarily addresses bug fixes
|
||||
and also adds a number of new features.
|
||||
|
||||
Version 1.4
|
||||
-----------
|
||||
|
||||
This release adds the option to generate smaller PostScript files,
|
||||
support for the AdobeStandardCyrillic encoding, RefinedImageFlavor,
|
||||
TexturePaint support for PSGraphics2D (PostScript tiling patterns),
|
||||
improvements to the XMP framework, optimization for PostScript state
|
||||
handling in (E)PSDocumentGraphics2D, and more. In addition it contains
|
||||
a number of bug fixes.
|
||||
|
||||
Version 1.3.1
|
||||
--------------
|
||||
|
||||
This release is mostly a bugfix release for the image loading framework that
|
||||
has been introduced in version 1.3.
|
||||
|
||||
Version 1.3
|
||||
--------------
|
||||
|
||||
The most important addition in this release is an image loading framework
|
||||
which supports all sorts of different image formats (bitmap and vector) and
|
||||
is highly extensible.
|
||||
Besides that there were a larger number of smaller additions and bugfixes.
|
||||
Support for Java 1.3 has been dropped. Java 1.4 or later is required now.
|
||||
|
||||
Version 1.2
|
||||
--------------
|
||||
|
||||
This release mainly adds support for CMYK and GRAY color spaces for PSGenerator.
|
||||
|
||||
Version 1.1
|
||||
--------------
|
||||
|
||||
This release adds an XMP metadata framework and brings improvements for the
|
||||
ImageWriter package plus some minor fixes mainly in the PostScript area.
|
||||
|
||||
Version 1.0
|
||||
--------------
|
||||
|
||||
This is the first release of Apache XML Graphics Commons. There are currently
|
||||
no known issues with the code.
|
|
@ -0,0 +1,44 @@
|
|||
## This is a template for settings which are useful to be
|
||||
## overridden in a developer specific property files.
|
||||
## Copy this to build-local.properties, uncomment and change
|
||||
## properties which should be overridden.
|
||||
## The file buil-local.properties is not stored in the code
|
||||
## repository and ignored for file adds.
|
||||
|
||||
## ===================================================================
|
||||
## 1. Path settings
|
||||
|
||||
## Path to your IKVM installation. Set this if you want to compile
|
||||
## XML Graphics Commons to a .NET DLL.
|
||||
## NOTE: If you want to compile the .NET DLL you'll have to
|
||||
## disable the internal codecs. See below.
|
||||
#ikvm.dir=C:\\javalib\\ikvm-12-07-2004\\ikvm
|
||||
|
||||
## ===================================================================
|
||||
## 2. Switches for common tasks
|
||||
|
||||
## Javac switches
|
||||
# javac.debug = on
|
||||
# javac.optimize = off
|
||||
# javac.deprecation = on
|
||||
# javac.source = 1.4
|
||||
# javac.target = 1.4
|
||||
# javac.fork = on
|
||||
|
||||
## JUnit task switches
|
||||
# junit.fork = on
|
||||
|
||||
## Packages to produce javadoc.
|
||||
# javadoc.packages = org.apache.xmlgraphics.*
|
||||
|
||||
## ===================================================================
|
||||
## 3. Project specific properties
|
||||
|
||||
version = 2.7
|
||||
|
||||
## Allows you to switch off the compilation of the internal image
|
||||
## codecs which depend on Sun-private classes. Setting this to true
|
||||
## enabled compatibility with non-Sun Java implementations such as
|
||||
## Kaffe, IKVM, GCC/GCJ or even Apache Harmony (i.e. system which
|
||||
## are based on GNU Classpath, for example).
|
||||
# internal-codecs.disabled = false
|
|
@ -0,0 +1,726 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<project default="all" basedir="." name="xmlgraphics-commons">
|
||||
|
||||
<!-- See build.properties and build-local.properties for overriding build settings. -->
|
||||
<!-- build-local.properties is not stored in SVN and overrides values from build.properties -->
|
||||
<property environment="env"/>
|
||||
<property file="${basedir}/build-local.properties"/>
|
||||
<property file="${basedir}/build.properties"/>
|
||||
|
||||
<property name="Name" value="Apache XML Graphics Commons"/>
|
||||
<property name="name" value="xmlgraphics-commons"/>
|
||||
<property name="year" value="1999-2022"/>
|
||||
|
||||
<property name="javac.debug" value="on"/>
|
||||
<property name="javac.optimize" value="off"/>
|
||||
<property name="javac.deprecation" value="on"/>
|
||||
<property name="javac.source" value="1.7"/>
|
||||
<property name="javac.target" value="1.7"/>
|
||||
<property name="javac.fork" value="no"/>
|
||||
|
||||
<property name="junit.fork" value="on"/>
|
||||
<property name="junit.haltonfailure" value="off"/>
|
||||
<property name="junit.printsummary" value="off"/>
|
||||
<property name="junit.formatter.brief" value="on"/>
|
||||
|
||||
<property name="javadoc.packages" value="org.apache.xmlgraphics.*"/>
|
||||
|
||||
<property name="internal-codecs.disabled" value="false"/>
|
||||
|
||||
<property name="src.dir" value="${basedir}/src/main"/>
|
||||
<property name="src.java.dir" value="${src.dir}/java"/>
|
||||
<property name="src.res.dir" value="${src.dir}/resources"/>
|
||||
<property name="lib.dir" value="${basedir}/lib"/>
|
||||
<property name="optional.lib.dir" value="${lib.dir}/build" />
|
||||
|
||||
<property name="test.dir" value="${basedir}/src/test"/>
|
||||
<property name="test.java.dir" value="${test.dir}/java"/>
|
||||
<property name="test.res.dir" value="${test.dir}/resources"/>
|
||||
|
||||
<property name="tools.dir" value="${basedir}/src/tools"/>
|
||||
<property name="tools.checkstyle.dir" value="${tools.dir}/resources/checkstyle"/>
|
||||
<property name="tools.findbugs.dir" value="${tools.dir}/resources/findbugs"/>
|
||||
|
||||
<property name="build.dir" value="${basedir}/build"/>
|
||||
<property name="build.classes.dir" value="${build.dir}/classes"/>
|
||||
<property name="build.javadocs.dir" value="${build.dir}/javadocs"/>
|
||||
|
||||
<property name="dist.bin.dir" value="${basedir}/dist-bin"/>
|
||||
<property name="dist.src.dir" value="${basedir}/dist-src"/>
|
||||
<property name="dist.bin.result.dir" value="${dist.bin.dir}/${name}-${version}"/>
|
||||
<property name="dist.src.result.dir" value="${dist.src.dir}/${name}-${version}"/>
|
||||
<property name="samedir" value="${basedir}"/>
|
||||
|
||||
<!-- .NET support (using IKVM) -->
|
||||
<property name="ikvm.dir" value="."/>
|
||||
<property name="ikvmc" value="${ikvm.dir}/bin/ikvmc.exe"/>
|
||||
|
||||
<tstamp>
|
||||
<format property="ts" pattern="yyyyMMdd-HHmmss-z"/>
|
||||
</tstamp>
|
||||
|
||||
<path id="libs-build-classpath">
|
||||
<fileset dir="${lib.dir}">
|
||||
<include name="*.jar"/>
|
||||
</fileset>
|
||||
<fileset dir="${lib.dir}/build">
|
||||
<include name="*.jar"/>
|
||||
</fileset>
|
||||
</path>
|
||||
|
||||
<path id="libs-run-classpath">
|
||||
<path refid="libs-build-classpath"/>
|
||||
<fileset dir="${build.dir}">
|
||||
<include name="${name}.jar"/>
|
||||
</fileset>
|
||||
</path>
|
||||
|
||||
<fileset dir="${basedir}" id="dist.bin">
|
||||
<include name="examples/**"/>
|
||||
<include name="LICENSE"/>
|
||||
<include name="NOTICE"/>
|
||||
<include name="README"/>
|
||||
<include name="KEYS"/>
|
||||
<include name="status.xml"/>
|
||||
</fileset>
|
||||
|
||||
<fileset dir="${basedir}" id="dist.bin.lib">
|
||||
<patternset id="dist.lib">
|
||||
<include name="lib/commons-io*"/>
|
||||
<include name="lib/commons-logging*"/>
|
||||
<include name="lib/README*"/>
|
||||
</patternset>
|
||||
</fileset>
|
||||
|
||||
<fileset dir="${basedir}" id="dist.src.lib.build">
|
||||
<patternset id="dist.lib.build">
|
||||
<include name="lib/build/hamcrest.core*"/>
|
||||
<include name="lib/build/mockito-core*"/>
|
||||
<include name="lib/build/objenesis*"/>
|
||||
<include name="lib/build/resolver*"/>
|
||||
</patternset>
|
||||
</fileset>
|
||||
|
||||
<fileset dir="${basedir}" id="dist.src">
|
||||
<include name="src/**"/>
|
||||
<include name="test/**"/>
|
||||
<patternset refid="dist.lib"/>
|
||||
<patternset refid="dist.lib.build"/>
|
||||
<include name="examples/**"/>
|
||||
<include name="LICENSE"/>
|
||||
<include name="NOTICE"/>
|
||||
<include name="README"/>
|
||||
<include name="KEYS"/>
|
||||
<include name="status.xml"/>
|
||||
<include name="*.pom"/>
|
||||
<include name="pom.xml"/>
|
||||
<include name="build.*"/>
|
||||
<include name="checkstyle*"/>
|
||||
<exclude name="checkstyle-noframes.xsl"/>
|
||||
</fileset>
|
||||
|
||||
<!-- =================================================================== -->
|
||||
<!-- Initialization target -->
|
||||
<!-- =================================================================== -->
|
||||
<target name="info">
|
||||
<echo message="------------------- ${Name} ${version} [${year}] ----------------"/>
|
||||
<echo message="See build.properties and build-local.properties for additional build settings"/>
|
||||
<echo message="${ant.version}"/>
|
||||
<echo message="VM: ${java.vm.version}, ${java.vm.vendor}"/>
|
||||
<echo message="JAVA_HOME: ${env.JAVA_HOME}"/>
|
||||
</target>
|
||||
|
||||
<target name="init" depends="info, init-avail"/>
|
||||
|
||||
<target name="init-avail">
|
||||
<available property="jdk15.present" classname="java.lang.StringBuilder"/>
|
||||
<fail message="${Name} requires at least Java 1.5" unless="jdk15.present"/>
|
||||
|
||||
<condition property="internal-codecs.eff.disabled">
|
||||
<equals arg1="${internal-codecs.disabled}" arg2="true"/>
|
||||
</condition>
|
||||
|
||||
<available property="junit.present" classname="junit.framework.TestCase"
|
||||
classpathref="libs-build-classpath"/>
|
||||
<condition property="junit.message" value="JUnit Support PRESENT">
|
||||
<equals arg1="${junit.present}" arg2="true"/>
|
||||
</condition>
|
||||
<condition property="junit.message" value="JUnit Support NOT Present - Committers are required to have JUnit working">
|
||||
<not>
|
||||
<equals arg1="${junit.present}" arg2="true"/>
|
||||
</not>
|
||||
</condition>
|
||||
<echo message="${junit.message}"/>
|
||||
|
||||
<condition property="IKVM.present">
|
||||
<and>
|
||||
<available file="${ikvmc}"/>
|
||||
<equals arg1="${internal-codecs.eff.disabled}" arg2="true"/>
|
||||
</and>
|
||||
</condition>
|
||||
<condition property="ikvm.message" value="IKVM Support PRESENT and ENABLED">
|
||||
<equals arg1="${IKVM.present}" arg2="true"/>
|
||||
</condition>
|
||||
<condition property="ikvm.message" value="IKVM Support NOT Present">
|
||||
<not>
|
||||
<available file="${ikvmc}"/>
|
||||
</not>
|
||||
</condition>
|
||||
<condition property="ikvm.message" value="IKVM Support DISABLED">
|
||||
<not>
|
||||
<equals arg1="${IKVM.present}" arg2="true"/>
|
||||
</not>
|
||||
</condition>
|
||||
<echo message="${ikvm.message}"/>
|
||||
</target>
|
||||
|
||||
<!-- =================================================================== -->
|
||||
<!-- Help on usage -->
|
||||
<!-- =================================================================== -->
|
||||
<target name="usage">
|
||||
<echo message="Use the -projecthelp option instead"/>
|
||||
</target>
|
||||
|
||||
<!-- =================================================================== -->
|
||||
<!-- Compiles the source directory -->
|
||||
<!-- =================================================================== -->
|
||||
<target name="compile" depends="compile-java, compile-copy-resources" description="Compiles the source code"/>
|
||||
|
||||
<target name="compile-copy-resources" description="Copies the resource files into the build directory">
|
||||
<mkdir dir="${build.classes.dir}"/>
|
||||
<copy todir="${build.classes.dir}">
|
||||
<fileset dir="${src.res.dir}"/>
|
||||
</copy>
|
||||
</target>
|
||||
|
||||
<target name="compile-pattern-with-codecs" depends="init" unless="internal-codecs.eff.disabled">
|
||||
<echo message="Internal codecs will be compiled."/>
|
||||
<patternset id="compile-pattern">
|
||||
<include name="**/*.java"/>
|
||||
</patternset>
|
||||
</target>
|
||||
<target name="compile-pattern-without-codecs" depends="init" if="internal-codecs.eff.disabled">
|
||||
<echo message="Internal codecs will be skipped."/>
|
||||
<patternset id="compile-pattern">
|
||||
<include name="**/*.java"/>
|
||||
<exclude name="**/image/codec/tiff/**/*.java"/>
|
||||
<exclude name="**/image/writer/internal/TIFFImageWriter*.java"/>
|
||||
</patternset>
|
||||
</target>
|
||||
<target name="compile-java" depends="init, compile-pattern-with-codecs, compile-pattern-without-codecs">
|
||||
<!-- create directories -->
|
||||
<mkdir dir="${build.classes.dir}"/>
|
||||
<javac destdir="${build.classes.dir}" fork="${javac.fork}" debug="${javac.debug}"
|
||||
deprecation="${javac.deprecation}" optimize="${javac.optimize}"
|
||||
source="${javac.source}" target="${javac.target}" includeAntRuntime="true">
|
||||
<src path="${src.java.dir}"/>
|
||||
<patternset refid="compile-pattern"/>
|
||||
<classpath refid="libs-build-classpath"/>
|
||||
</javac>
|
||||
</target>
|
||||
|
||||
<!-- =================================================================== -->
|
||||
<!-- Creates JAR files -->
|
||||
<!-- =================================================================== -->
|
||||
|
||||
<target name="uptodate-jar-main" depends="compile">
|
||||
<uptodate property="jar.main.uptodate" targetfile="${build.dir}/${name}.jar">
|
||||
<srcfiles dir= "${build.classes.dir}"/>
|
||||
</uptodate>
|
||||
</target>
|
||||
|
||||
<target name="jar-main" depends="compile,uptodate-jar-main" description="Generates the main jar file" unless="jar.main.uptodate">
|
||||
<jar jarfile="${build.dir}/${name}-${version}.jar" basedir="${build.classes.dir}">
|
||||
<manifest>
|
||||
<attribute name="Implementation-Title" value="${Name}"/>
|
||||
<attribute name="Implementation-Version" value="${version}"/>
|
||||
<attribute name="Implementation-Vendor" value="The Apache Software Foundation (http://xmlgraphics.apache.org/)"/>
|
||||
<attribute name="Build-Id" value="${ts} (${user.name} [${os.name} ${os.version} ${os.arch}, Java ${java.runtime.version}])"/>
|
||||
</manifest>
|
||||
<metainf dir="${basedir}" includes="LICENSE,NOTICE"/>
|
||||
</jar>
|
||||
</target>
|
||||
|
||||
<target name="package.NET" depends="jar-main" if="IKVM.present" description="Generates the .NET DLL using IKVM">
|
||||
<property name="commons-io" value="commons-io-1.1"/>
|
||||
<exec executable="${ikvmc}">
|
||||
<arg value="-reference:${ikvm.dir}/bin/IKVM.GNU.Classpath.dll"/>
|
||||
<arg value="-target:library"/>
|
||||
<arg value="-out:${build.dir}\${commons-io}.dll"/>
|
||||
<arg value="${lib.dir}\${commons-io}.jar"/>
|
||||
</exec>
|
||||
<exec executable="${ikvmc}">
|
||||
<arg value="-reference:${ikvm.dir}/bin/IKVM.GNU.Classpath.dll"/>
|
||||
<arg value="-reference:${build.dir}/${commons-io}.dll"/>
|
||||
<!--arg value="-reference:${ikvm.dir}/bin/IKVM.AWT.WinForms.dll"/-->
|
||||
<arg value="-target:library"/>
|
||||
<arg value="-out:${build.dir}\${name}-${version}.dll"/>
|
||||
<arg value="${build.dir}\${name}-${version}.jar"/>
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<target name="uptodate-jar-sources" depends="init">
|
||||
<uptodate property="jar.sources.uptodate" targetfile="${build.dir}/${name}-${version}-sources.jar">
|
||||
<srcfiles dir="${src.java.dir}"/>
|
||||
</uptodate>
|
||||
</target>
|
||||
|
||||
<target name="jar-sources" depends="uptodate-jar-sources" description="Generates a jar file with all the sources" unless="jar.sources.uptodate">
|
||||
<patternset id="java-only">
|
||||
<include name="**/*.java"/>
|
||||
</patternset>
|
||||
<jar jarfile="${build.dir}/${name}-${version}-sources.jar">
|
||||
<manifest>
|
||||
<attribute name="Build-Id" value="${ts} (${user.name} [${os.name} ${os.version} ${os.arch}, Java ${java.runtime.version}])"/>
|
||||
</manifest>
|
||||
<fileset dir="${src.java.dir}">
|
||||
<patternset refid="java-only"/>
|
||||
</fileset>
|
||||
<metainf dir="${basedir}" includes="LICENSE,NOTICE"/>
|
||||
</jar>
|
||||
</target>
|
||||
|
||||
<target name="package" depends="jar-main, package.NET" description="Generates the jar files"/>
|
||||
|
||||
<!-- =================================================================== -->
|
||||
<!-- Testing -->
|
||||
<!-- =================================================================== -->
|
||||
<target name="junit-init" depends="init-avail">
|
||||
<condition property="junit.formatter.brief.use">
|
||||
<istrue value="${junit.formatter.brief}"/>
|
||||
</condition>
|
||||
</target>
|
||||
<target name="junit-compile" depends="package,junit-init" if="junit.present">
|
||||
<mkdir dir="${build.dir}/test-classes"/>
|
||||
<mkdir dir="${build.dir}/test-reports"/>
|
||||
<javac destdir="${build.dir}/test-classes" fork="${javac.fork}"
|
||||
debug="${javac.debug}" deprecation="${javac.deprecation}"
|
||||
optimize="${javac.optimize}" source="${javac.source}"
|
||||
target="${javac.target}" includeAntRuntime="true">
|
||||
<src path="${test.java.dir}"/>
|
||||
<patternset refid="compile-pattern"/>
|
||||
<classpath>
|
||||
<path refid="libs-build-classpath"/>
|
||||
<fileset dir="${build.dir}">
|
||||
<include name="${name}-${version}.jar"/>
|
||||
</fileset>
|
||||
</classpath>
|
||||
</javac>
|
||||
<copy todir="${build.dir}/test-classes" includeEmptyDirs="false">
|
||||
<fileset dir="${test.res.dir}"/>
|
||||
<fileset dir="${test.java.dir}">
|
||||
<exclude name="**/*.java"/>
|
||||
<exclude name="**/*.html"/>
|
||||
</fileset>
|
||||
</copy>
|
||||
</target>
|
||||
<target name="junit-basic" depends="junit-compile" description="Runs the standard JUnit test suite" if="junit.present">
|
||||
<echo message="Running basic functionality tests"/>
|
||||
<junit haltonerror="no" haltonfailure="${junit.haltonfailure}" fork="${junit.fork}" errorproperty="test.junit.error" failureproperty="test.junit.failure" printsummary="${junit.printsummary}">
|
||||
<sysproperty key="basedir" value="${basedir}"/>
|
||||
<sysproperty key="jawa.awt.headless" value="true"/>
|
||||
<jvmarg value="-enableassertions"/>
|
||||
<formatter type="brief" usefile="false" if="junit.formatter.brief.use"/>
|
||||
<formatter type="plain" usefile="true"/>
|
||||
<formatter type="xml" usefile="true"/>
|
||||
<classpath>
|
||||
<pathelement location="${build.dir}/test-classes"/>
|
||||
<path refid="libs-build-classpath"/>
|
||||
<fileset dir="build">
|
||||
<include name="${name}-${version}.jar"/>
|
||||
</fileset>
|
||||
</classpath>
|
||||
<batchtest fork="${junit.fork}" todir="${build.dir}/test-reports">
|
||||
<fileset dir="${test.java.dir}">
|
||||
<include name="**/*Test*.java"/>
|
||||
<exclude name="**/*TestSuite.java"/>
|
||||
<exclude name="**/image/writer/internal/TIFFImageWriter*.java" if="internal-codecs.eff.disabled"/>
|
||||
</fileset>
|
||||
</batchtest>
|
||||
</junit>
|
||||
</target>
|
||||
|
||||
<target name="junit" depends="junit-basic" description="Runs all JUnit tests" if="junit.present">
|
||||
<fail>
|
||||
<condition>
|
||||
<or>
|
||||
<isset property="test.junit.error"/>
|
||||
<isset property="test.junit.failure"/>
|
||||
</or>
|
||||
</condition>
|
||||
NOTE:
|
||||
**************************************************************************
|
||||
* One or more of the Junit tests had Failures or Errors or were skipped! *
|
||||
* Please check the output above for relevant messages. *
|
||||
**************************************************************************
|
||||
</fail>
|
||||
<echo>All Junit tests passed!</echo>
|
||||
</target>
|
||||
|
||||
<!-- =================================================================== -->
|
||||
<!-- Creates the API documentation -->
|
||||
<!-- =================================================================== -->
|
||||
<target name="javadocs" depends="init" description="Generates javadocs">
|
||||
<property name="javadoc.public" value="false"/>
|
||||
<property name="javadoc.package" value="false"/>
|
||||
<property name="javadoc.private" value="false"/>
|
||||
<condition property="javadoc.level" value=" (level: private)">
|
||||
<equals arg1="${javadoc.private}" arg2="true"/>
|
||||
</condition>
|
||||
<condition property="javadoc.level" value=" (level: package)">
|
||||
<equals arg1="${javadoc.package}" arg2="true"/>
|
||||
</condition>
|
||||
<condition property="javadoc.level" value=" (level: public)">
|
||||
<equals arg1="${javadoc.public}" arg2="true"/>
|
||||
</condition>
|
||||
<property name="javadoc.level" value=""/>
|
||||
<echo message="Producing the javadoc files${javadoc.level}"/>
|
||||
<mkdir dir="${build.javadocs.dir}"/>
|
||||
|
||||
<javadoc
|
||||
packagenames="${javadoc.packages}"
|
||||
destdir="${build.javadocs.dir}"
|
||||
author="true"
|
||||
version="true"
|
||||
windowtitle="${Name} ${version} API"
|
||||
doctitle="Apache XML Graphics Commons"
|
||||
bottom="Copyright ${year} The Apache Software Foundation. All Rights Reserved."
|
||||
overview="${src.dir}/java/org/apache/xmlgraphics/overview.html"
|
||||
use="true"
|
||||
failonerror="true"
|
||||
public="${javadoc.public}"
|
||||
package="${javadoc.package}"
|
||||
private="${javadoc.private}"
|
||||
source="${javac.source}">
|
||||
<header><![CDATA[${name} ${version}]]></header>
|
||||
<footer><![CDATA[${name} ${version}]]></footer>
|
||||
<link offline="false" href="http://java.sun.com/j2se/1.5.0/docs/api/"/>
|
||||
<classpath>
|
||||
<path refid="libs-build-classpath"/>
|
||||
<pathelement path="${java.class.path}"/>
|
||||
</classpath>
|
||||
<sourcepath>
|
||||
<pathelement path="${src.java.dir}"/>
|
||||
</sourcepath>
|
||||
<group title="Images">
|
||||
<package name="org.apache.xmlgraphics.image"/>
|
||||
<package name="org.apache.xmlgraphics.image.*"/>
|
||||
</group>
|
||||
<group title="Java2D">
|
||||
<package name="org.apache.xmlgraphics.java2d"/>
|
||||
<package name="org.apache.xmlgraphics.java2d.*"/>
|
||||
</group>
|
||||
<group title="PDF, PostScript...">
|
||||
<package name="org.apache.xmlgraphics.ps"/>
|
||||
<package name="org.apache.xmlgraphics.ps.*"/>
|
||||
<package name="org.apache.xmlgraphics.pdf"/>
|
||||
<package name="org.apache.xmlgraphics.pdf.*"/>
|
||||
</group>
|
||||
<group title="Fonts">
|
||||
<package name="org.apache.xmlgraphics.fonts"/>
|
||||
</group>
|
||||
<group title="XMP Metadata">
|
||||
<package name="org.apache.xmlgraphics.xmp"/>
|
||||
<package name="org.apache.xmlgraphics.xmp.*"/>
|
||||
</group>
|
||||
<group title="Utility">
|
||||
<package name="org.apache.xmlgraphics.util"/>
|
||||
<package name="org.apache.xmlgraphics.util.*"/>
|
||||
</group>
|
||||
</javadoc>
|
||||
</target>
|
||||
|
||||
<target name="jar-javadocs" depends="javadocs">
|
||||
<jar jarfile="${build.dir}/${name}-${version}-javadoc.jar">
|
||||
<manifest>
|
||||
<attribute name="Build-Id" value="${ts} (${user.name} [${os.name} ${os.version} ${os.arch}, Java ${java.runtime.version}])"/>
|
||||
</manifest>
|
||||
<fileset dir="${build.javadocs.dir}"/>
|
||||
<metainf dir="${basedir}" includes="LICENSE,NOTICE"/>
|
||||
</jar>
|
||||
</target>
|
||||
|
||||
<!-- =================================================================== -->
|
||||
<!-- Checkstyle -->
|
||||
<!-- =================================================================== -->
|
||||
<property name="checkstyle.location" value="${optional.lib.dir}/checkstyle-5.5-all.jar" />
|
||||
<property name="checkstyle.config" value="${tools.checkstyle.dir}/checkstyle.xml" />
|
||||
<property name="checkstyle.suppressions.file" value="${tools.checkstyle.dir}/suppressions.xml" />
|
||||
<path id="checkstyle-classpath">
|
||||
<path refid="libs-build-classpath"/>
|
||||
<pathelement location="${checkstyle.location}"/>
|
||||
</path>
|
||||
<condition property="checkstyle.avail">
|
||||
<and>
|
||||
<available classname="com.puppycrawl.tools.checkstyle.CheckStyleTask">
|
||||
<classpath refid="checkstyle-classpath"/>
|
||||
</available>
|
||||
<available file="${checkstyle.config}"/>
|
||||
</and>
|
||||
</condition>
|
||||
<target name="checkstyle-avail" unless="checkstyle.avail">
|
||||
<echo message="Checkstyle support NOT present. Please download it from http://checkstyle.sf.net/ and"/>
|
||||
<echo message="... please provide ${checkstyle.location}"/>
|
||||
<echo message="... please provide ${checkstyle.config}"/>
|
||||
</target>
|
||||
<target name="checkstyle" depends="package, checkstyle-avail" if="checkstyle.avail" description="Runs Checkstyle for a code quality report">
|
||||
<taskdef name="checkstyle" classname="com.puppycrawl.tools.checkstyle.CheckStyleTask" classpathref="checkstyle-classpath"/>
|
||||
<mkdir dir="${build.dir}"/>
|
||||
<checkstyle config="${checkstyle.config}" failonviolation="true" maxWarnings="0">
|
||||
<classpath>
|
||||
<path refid="checkstyle-classpath"/>
|
||||
<pathelement location="${build.classes.dir}"/>
|
||||
<pathelement location="${build.sandbox-classes.dir}"/>
|
||||
<pathelement location="${build.codegen-classes.dir}"/>
|
||||
</classpath>
|
||||
<fileset dir="${src.dir}" includes="**/*.java"/>
|
||||
<fileset dir="${basedir}/src/test" includes="**/*.java"/>
|
||||
<formatter type="xml" toFile="${build.dir}/report_checkstyle.xml"/>
|
||||
<formatter type="plain"/>
|
||||
</checkstyle>
|
||||
</target>
|
||||
|
||||
<!-- =================================================================== -->
|
||||
<!-- Creates the distribution -->
|
||||
<!-- =================================================================== -->
|
||||
<target name="dist" depends="distclean,dist-src,dist-bin,maven-artifacts" description="Generates the distribution package"/>
|
||||
|
||||
<!-- IMPORTANT: .NET binaries must not be included in the distribution. License policy! -->
|
||||
|
||||
<target name="dist-bin" depends="all,javadocs">
|
||||
<echo message="Building the binary distribution files (zip,tar)"/>
|
||||
<mkdir dir="${dist.bin.result.dir}"/>
|
||||
<copy todir="${dist.bin.result.dir}">
|
||||
<fileset refid="dist.bin"/>
|
||||
<fileset refid="dist.bin.lib"/>
|
||||
</copy>
|
||||
<copy todir="${dist.bin.result.dir}/javadocs">
|
||||
<fileset dir="${build.javadocs.dir}"/>
|
||||
</copy>
|
||||
<mkdir dir="${dist.bin.result.dir}/build"/>
|
||||
<copy todir="${dist.bin.result.dir}/build" file="build/${name}-${version}.jar"/>
|
||||
|
||||
<!--property name="bin.suffix" value="bin-jdk${java.specification.version}"/-->
|
||||
<property name="bin.suffix" value="bin"/>
|
||||
<zip zipfile="${name}-${version}-${bin.suffix}.zip" basedir="${dist.bin.dir}" includes="**"/>
|
||||
<tar longfile="gnu"
|
||||
destfile="${name}-${version}-${bin.suffix}.tar">
|
||||
<tarfileset dir="${dist.bin.dir}">
|
||||
<include name="**"/>
|
||||
</tarfileset>
|
||||
</tar>
|
||||
<gzip zipfile="${name}-${version}-${bin.suffix}.tar.gz" src="${name}-${version}-${bin.suffix}.tar"/>
|
||||
<delete file="${name}-${version}-${bin.suffix}.tar"/>
|
||||
</target>
|
||||
|
||||
<target name="dist-src" depends="all">
|
||||
<echo message="Building the source distribution files (zip,tar)"/>
|
||||
<mkdir dir="${dist.src.result.dir}"/>
|
||||
<copy todir="${dist.src.result.dir}">
|
||||
<fileset refid="dist.src"/>
|
||||
</copy>
|
||||
|
||||
<zip zipfile="${name}-${version}-src.zip">
|
||||
<zipfileset dir="${dist.src.dir}" filemode="644" dirmode="755">
|
||||
<include name="**"/>
|
||||
</zipfileset>
|
||||
</zip>
|
||||
<tar longfile="gnu"
|
||||
destfile="${name}-${version}-src.tar" >
|
||||
<tarfileset dir="${dist.src.dir}" mode="644" dirmode="755">
|
||||
<include name="**"/>
|
||||
</tarfileset>
|
||||
</tar>
|
||||
<gzip zipfile="${name}-${version}-src.tar.gz" src="${name}-${version}-src.tar"/>
|
||||
<delete file="${name}-${version}-src.tar"/>
|
||||
</target>
|
||||
|
||||
<target name="release-dist" depends="dist" description="Generates the distribution package and signs the release">
|
||||
<!--property name="bin.suffix" value="bin-jdk${java.specification.version}"/-->
|
||||
<property name="bin.suffix" value="bin"/>
|
||||
<input message="Passphrase for your default private key" addproperty="pwd">
|
||||
<handler classname="org.apache.tools.ant.input.SecureInputHandler" />
|
||||
</input>
|
||||
<antcall target="sha512">
|
||||
<param name="sign.archive" value="${name}-${version}-src.zip"/>
|
||||
</antcall>
|
||||
<antcall target="sign-file">
|
||||
<param name="sign.archive" value="${name}-${version}-src.zip"/>
|
||||
<param name="pwd" value="${pwd}"/>
|
||||
</antcall>
|
||||
<antcall target="sha512">
|
||||
<param name="sign.archive" value="${name}-${version}-src.tar.gz"/>
|
||||
</antcall>
|
||||
<antcall target="sign-file">
|
||||
<param name="sign.archive" value="${name}-${version}-src.tar.gz"/>
|
||||
<param name="pwd" value="${pwd}"/>
|
||||
</antcall>
|
||||
<antcall target="sha512">
|
||||
<param name="sign.archive" value="${name}-${version}-${bin.suffix}.zip"/>
|
||||
</antcall>
|
||||
<antcall target="sign-file">
|
||||
<param name="sign.archive" value="${name}-${version}-${bin.suffix}.zip"/>
|
||||
<param name="pwd" value="${pwd}"/>
|
||||
</antcall>
|
||||
<antcall target="sha512">
|
||||
<param name="sign.archive" value="${name}-${version}-${bin.suffix}.tar.gz"/>
|
||||
</antcall>
|
||||
<antcall target="sign-file">
|
||||
<param name="sign.archive" value="${name}-${version}-${bin.suffix}.tar.gz"/>
|
||||
<param name="pwd" value="${pwd}"/>
|
||||
</antcall>
|
||||
</target>
|
||||
|
||||
<target name="sha512">
|
||||
<property name="sha512.exec" value="sha512sum"/>
|
||||
<property name="sha512.options" value=""/>
|
||||
<exec executable="${sha512.exec}" output="${sign.archive}.sha512">
|
||||
<arg line="${sha512.options} ${sign.archive}"/>
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<target name="sign-file">
|
||||
<property name="gpg.exec" value="gpg"/>
|
||||
<property name="gpg.options" value="--armor --detach-sign --force-v3-sigs --batch --verbose --passphrase-fd 0"/>
|
||||
<delete file="${sign.archive}.asc"/>
|
||||
<exec executable="${gpg.exec}" inputstring="${pwd}">
|
||||
<arg line="${gpg.options} ${sign.archive}"/>
|
||||
</exec>
|
||||
</target>
|
||||
|
||||
<!-- =================================================================== -->
|
||||
<!-- Maven artifacts -->
|
||||
<!-- =================================================================== -->
|
||||
<target name="maven-artifacts" depends="jar-main, jar-sources, jar-javadocs" description="Builds a Maven artifact that can be uploaded to a Maven repository">
|
||||
<filter token="version" value="${version}"/>
|
||||
<mkdir dir="${build.dir}/maven"/>
|
||||
<copy file="${basedir}/xmlgraphics-commons-pom-template.pom" tofile="${build.dir}/maven/pom.xml" filtering="true"/>
|
||||
<fileset id="bundle-files" dir="${build.dir}">
|
||||
<patternset>
|
||||
<include name="${name}-${version}.jar"/>
|
||||
<include name="${name}-${version}-sources.jar"/>
|
||||
<include name="${name}-${version}-javadoc.jar"/>
|
||||
</patternset>
|
||||
<patternset>
|
||||
<include name="maven/pom.xml"/>
|
||||
</patternset>
|
||||
</fileset>
|
||||
<checksum algorithm="sha-512" fileext=".sha512">
|
||||
<fileset refid="bundle-files"/>
|
||||
</checksum>
|
||||
<input message="Passphrase for your default private key" addproperty="pwd">
|
||||
<handler classname="org.apache.tools.ant.input.SecureInputHandler" />
|
||||
</input>
|
||||
<antcall target="sign-file">
|
||||
<param name="sign.archive" value="${build.dir}/${name}-${version}.jar"/>
|
||||
<param name="pwd" value="${pwd}"/>
|
||||
</antcall>
|
||||
<antcall target="sign-file">
|
||||
<param name="sign.archive" value="${build.dir}/${name}-${version}-sources.jar"/>
|
||||
<param name="pwd" value="${pwd}"/>
|
||||
</antcall>
|
||||
<antcall target="sign-file">
|
||||
<param name="sign.archive" value="${build.dir}/${name}-${version}-javadoc.jar"/>
|
||||
<param name="pwd" value="${pwd}"/>
|
||||
</antcall>
|
||||
<antcall target="sign-file">
|
||||
<param name="sign.archive" value="${build.dir}/maven/pom.xml"/>
|
||||
<param name="pwd" value="${pwd}"/>
|
||||
</antcall>
|
||||
<jar jarfile="${build.dir}/${name}-${version}-bundle.jar">
|
||||
<manifest>
|
||||
<attribute name="Build-Id" value="${ts} (${user.name} [${os.name} ${os.version} ${os.arch}, Java ${java.runtime.version}])"/>
|
||||
</manifest>
|
||||
<fileset dir="${build.dir}">
|
||||
<patternset>
|
||||
<include name="${name}-${version}.jar*"/>
|
||||
<include name="${name}-${version}-sources.jar*"/>
|
||||
<include name="${name}-${version}-javadoc.jar*"/>
|
||||
</patternset>
|
||||
</fileset>
|
||||
<fileset dir="${build.dir}/maven">
|
||||
<patternset>
|
||||
<include name="pom.xml*"/>
|
||||
</patternset>
|
||||
</fileset>
|
||||
<metainf dir="${basedir}" includes="LICENSE,NOTICE"/>
|
||||
</jar>
|
||||
<move file="${build.dir}/${name}-${version}-bundle.jar" todir="${basedir}"/>
|
||||
</target>
|
||||
|
||||
<!-- =================================================================== -->
|
||||
<!-- Clean targets -->
|
||||
<!-- =================================================================== -->
|
||||
<target name="clean" description="Cleans the build directory">
|
||||
<delete dir="${build.dir}"/>
|
||||
</target>
|
||||
|
||||
<target name="distclean" depends="clean" description="Cleans the distribution target directories">
|
||||
<delete dir="${dist.src.dir}"/>
|
||||
<delete dir="${dist.bin.dir}"/>
|
||||
<delete>
|
||||
<fileset dir="${basedir}" includes="${name}-*.tar.gz*"/>
|
||||
<fileset dir="${basedir}" includes="${name}-*.zip*"/>
|
||||
<fileset dir="${basedir}" includes="${name}-*-bundle.jar*"/>
|
||||
</delete>
|
||||
</target>
|
||||
|
||||
<!-- =================================================================== -->
|
||||
<!-- Default Target -->
|
||||
<!-- =================================================================== -->
|
||||
|
||||
<target name="all" depends="package, junit"/> <!-- "all" target for us Makefile converts ;-) -->
|
||||
|
||||
<!-- =================================================================== -->
|
||||
<!-- Special target for Gump -->
|
||||
<!-- =================================================================== -->
|
||||
|
||||
<target name="gump" depends="all, javadocs"/>
|
||||
|
||||
<!-- =================================================================== -->
|
||||
<!-- Findbugs -->
|
||||
<!-- =================================================================== -->
|
||||
<property name="findbugs.lib" value="${findbugs.home.dir}/lib"/>
|
||||
<path id="libs-findbugs">
|
||||
<fileset dir="${findbugs.lib}">
|
||||
<include name="*.jar"/>
|
||||
</fileset>
|
||||
</path>
|
||||
<target name="findbugs-avail" unless="findbugs.home.dir">
|
||||
<echo message="Findbugs Support NOT Present. Please download it from http://findbugs.sf.net/ and set findbugs.home.dir in build-local.properties"/>
|
||||
</target>
|
||||
<target name="findbugs" depends="init, findbugs-avail, compile-java" if="findbugs.home.dir">
|
||||
<taskdef name="findbugs" classname="edu.umd.cs.findbugs.anttask.FindBugsTask" classpathref="libs-findbugs"/>
|
||||
<findbugs home="${findbugs.home.dir}" output="text" reportLevel="low" effort="max" excludeFilter="${tools.findbugs.dir}/exclusions.xml" jvmargs="-Xmx1024m" warningsProperty="findbugs.warnings">
|
||||
<sourcePath path="${src.java.dir}"/>
|
||||
<class location="${build.classes.dir}"/>
|
||||
<auxClasspath>
|
||||
<path refid="libs-build-classpath"/>
|
||||
<path>
|
||||
<fileset dir="${ant.library.dir}">
|
||||
<include name="ant.jar"/>
|
||||
<include name="ant-launcher.jar"/>
|
||||
</fileset>
|
||||
</path>
|
||||
</auxClasspath>
|
||||
</findbugs>
|
||||
<fail if="findbugs.warnings"/>
|
||||
</target>
|
||||
|
||||
</project>
|
|
@ -0,0 +1,139 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: ImageViewer.java 750418 2009-03-05 11:03:54Z vhennebert $ */
|
||||
|
||||
package image.loader;
|
||||
|
||||
import java.awt.BasicStroke;
|
||||
import java.awt.Color;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.xmlgraphics.image.loader.ImageException;
|
||||
import org.apache.xmlgraphics.image.loader.ImageFlavor;
|
||||
import org.apache.xmlgraphics.image.loader.ImageInfo;
|
||||
import org.apache.xmlgraphics.image.loader.ImageManager;
|
||||
import org.apache.xmlgraphics.image.loader.ImageSessionContext;
|
||||
import org.apache.xmlgraphics.image.loader.ImageSize;
|
||||
import org.apache.xmlgraphics.image.loader.impl.DefaultImageContext;
|
||||
import org.apache.xmlgraphics.image.loader.impl.DefaultImageSessionContext;
|
||||
import org.apache.xmlgraphics.image.loader.impl.ImageGraphics2D;
|
||||
import org.apache.xmlgraphics.java2d.Graphics2DImagePainter;
|
||||
|
||||
/**
|
||||
* Very simple image viewer application that demonstrates the use of the image loader framework.
|
||||
*/
|
||||
public class ImageViewer {
|
||||
|
||||
private ImageManager imageManager;
|
||||
|
||||
public ImageViewer() {
|
||||
//The ImageManager is set up for the whole application
|
||||
this.imageManager = new ImageManager(new DefaultImageContext());
|
||||
}
|
||||
|
||||
public void display(File f) throws IOException {
|
||||
//The ImageSessionContext might for each processing run
|
||||
ImageSessionContext sessionContext = new DefaultImageSessionContext(
|
||||
this.imageManager.getImageContext(), null);
|
||||
|
||||
//Construct URI from filename
|
||||
String uri = f.toURI().toASCIIString();
|
||||
|
||||
ImageGraphics2D g2dImage = null;
|
||||
try {
|
||||
//Preload image
|
||||
ImageInfo info = this.imageManager.getImageInfo(uri, sessionContext);
|
||||
|
||||
//Load image and request Graphics2D image
|
||||
g2dImage = (ImageGraphics2D)this.imageManager.getImage(
|
||||
info, ImageFlavor.GRAPHICS2D, sessionContext);
|
||||
|
||||
} catch (ImageException e) {
|
||||
e.printStackTrace();
|
||||
|
||||
//Create "error image" if the image cannot be displayed
|
||||
g2dImage = createErrorImage();
|
||||
}
|
||||
|
||||
//Display frame with image
|
||||
ViewerFrame frame = new ViewerFrame(g2dImage);
|
||||
frame.setVisible(true);
|
||||
}
|
||||
|
||||
private ImageGraphics2D createErrorImage() {
|
||||
Graphics2DImagePainter painter = new Graphics2DImagePainter() {
|
||||
|
||||
public Dimension getImageSize() {
|
||||
return new Dimension(10, 10);
|
||||
}
|
||||
|
||||
public void paint(Graphics2D g2d, Rectangle2D area) {
|
||||
g2d.translate(area.getX(), area.getY());
|
||||
double w = area.getWidth();
|
||||
double h = area.getHeight();
|
||||
|
||||
//Fit in paint area
|
||||
Dimension imageSize = getImageSize();
|
||||
double sx = w / imageSize.getWidth();
|
||||
double sy = h / imageSize.getHeight();
|
||||
if (sx != 1.0 || sy != 1.0) {
|
||||
g2d.scale(sx, sy);
|
||||
}
|
||||
|
||||
g2d.setColor(Color.RED);
|
||||
g2d.setStroke(new BasicStroke(0));
|
||||
g2d.drawRect(0, 0, imageSize.width, imageSize.height);
|
||||
g2d.drawLine(0, 0, imageSize.width, imageSize.height);
|
||||
g2d.drawLine(0, imageSize.height, imageSize.width, 0);
|
||||
}
|
||||
|
||||
};
|
||||
Dimension dim = painter.getImageSize();
|
||||
|
||||
ImageSize size = new ImageSize();
|
||||
size.setSizeInMillipoints(dim.width, dim.height);
|
||||
size.setResolution(imageManager.getImageContext().getSourceResolution());
|
||||
size.calcPixelsFromSize();
|
||||
|
||||
ImageInfo info = new ImageInfo(null, null);
|
||||
info.setSize(size);
|
||||
return new ImageGraphics2D(info, painter);
|
||||
}
|
||||
|
||||
/**
|
||||
* The application's main method.
|
||||
* @param args the command-line arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
ImageViewer app = new ImageViewer();
|
||||
if (args.length < 1) {
|
||||
throw new IllegalArgumentException("No filename given as application argument");
|
||||
}
|
||||
app.display(new File(args[0]));
|
||||
} catch (Throwable t) {
|
||||
t.printStackTrace();
|
||||
System.exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: ViewerFrame.java 750418 2009-03-05 11:03:54Z vhennebert $ */
|
||||
|
||||
package image.loader;
|
||||
|
||||
import java.awt.Dimension;
|
||||
import java.awt.Frame;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.event.WindowAdapter;
|
||||
import java.awt.event.WindowEvent;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
|
||||
import javax.swing.JPanel;
|
||||
|
||||
import org.apache.xmlgraphics.image.loader.impl.ImageGraphics2D;
|
||||
import org.apache.xmlgraphics.java2d.Graphics2DImagePainter;
|
||||
|
||||
/**
|
||||
* Viewer frame for the image viewer.
|
||||
*/
|
||||
public class ViewerFrame extends Frame {
|
||||
|
||||
public static final String TITLE = "Very Simple Image Viewer";
|
||||
|
||||
public ViewerFrame(ImageGraphics2D g2dImage) {
|
||||
super(TITLE);
|
||||
addWindowListener(new WindowHandler());
|
||||
buildGUI(g2dImage);
|
||||
setSize(500, 400);
|
||||
}
|
||||
|
||||
private void buildGUI(final ImageGraphics2D g2dImage) {
|
||||
JPanel imagePanel = new JPanel() {
|
||||
/** {@inheritDoc} */
|
||||
protected void paintComponent(Graphics graphics) {
|
||||
super.paintComponent(graphics);
|
||||
Graphics2D g2d = (Graphics2D)graphics.create();
|
||||
try {
|
||||
Rectangle paintRect = new Rectangle(
|
||||
30, 30,
|
||||
getWidth() - 60, getHeight() - 60);
|
||||
//g2d.translate(paintRect.getX(), paintRect.getY());
|
||||
|
||||
Graphics2DImagePainter painter = g2dImage.getGraphics2DImagePainter();
|
||||
Dimension dim = painter.getImageSize();
|
||||
double sx = paintRect.getWidth() / dim.getWidth();
|
||||
double sy = paintRect.getHeight() / dim.getHeight();
|
||||
//g2d.scale(sx, sy);
|
||||
|
||||
/*
|
||||
Rectangle2D targetRect = new Rectangle2D.Double(
|
||||
paintRect.x * sx, paintRect.y * sy,
|
||||
dim.width, dim.height);
|
||||
*/
|
||||
Rectangle2D targetRect = new Rectangle2D.Double(
|
||||
paintRect.x, paintRect.y,
|
||||
paintRect.width, paintRect.height);
|
||||
|
||||
|
||||
g2d.draw(targetRect);
|
||||
painter.paint(g2d, targetRect);
|
||||
} finally {
|
||||
g2d.dispose();
|
||||
}
|
||||
}
|
||||
};
|
||||
add("Center", imagePanel);
|
||||
}
|
||||
|
||||
private class WindowHandler extends WindowAdapter {
|
||||
public void windowClosing(WindowEvent we) {
|
||||
System.exit(0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,148 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: ImageWriterExample1.java 750418 2009-03-05 11:03:54Z vhennebert $ */
|
||||
|
||||
package image.writer;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Font;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.font.TextAttribute;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.text.AttributedString;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.xmlgraphics.image.writer.ImageWriter;
|
||||
import org.apache.xmlgraphics.image.writer.ImageWriterParams;
|
||||
import org.apache.xmlgraphics.image.writer.ImageWriterRegistry;
|
||||
|
||||
public class ImageWriterExample1 {
|
||||
|
||||
/**
|
||||
* Paints a few things on a Graphics2D instance.
|
||||
* @param g2d the Graphics2D instance
|
||||
* @param pageNum a page number
|
||||
*/
|
||||
protected void paintSome(Graphics2D g2d, int pageNum) {
|
||||
//Paint a bounding box
|
||||
g2d.drawRect(0, 0, 400, 200);
|
||||
|
||||
//A few rectangles rotated and with different color
|
||||
Graphics2D copy = (Graphics2D)g2d.create();
|
||||
int c = 12;
|
||||
for (int i = 0; i < c; i++) {
|
||||
float f = ((i + 1) / (float)c);
|
||||
Color col = new Color(0.0f, 1 - f, 0.0f);
|
||||
copy.setColor(col);
|
||||
copy.fillRect(70, 90, 50, 50);
|
||||
copy.rotate(-2 * Math.PI / (double)c, 70, 90);
|
||||
}
|
||||
copy.dispose();
|
||||
|
||||
//Some text
|
||||
copy = (Graphics2D)g2d.create();
|
||||
copy.rotate(-0.25);
|
||||
copy.setColor(Color.RED);
|
||||
copy.setFont(new Font("sans-serif", Font.PLAIN, 36));
|
||||
copy.drawString("Hello world!", 140, 140);
|
||||
copy.setColor(Color.RED.darker());
|
||||
copy.setFont(new Font("serif", Font.PLAIN, 36));
|
||||
copy.drawString("Hello world!", 140, 180);
|
||||
copy.dispose();
|
||||
|
||||
//Try attributed text
|
||||
AttributedString aString = new AttributedString("This is attributed text.");
|
||||
aString.addAttribute(TextAttribute.FAMILY, "SansSerif");
|
||||
aString.addAttribute(TextAttribute.FAMILY, "Serif", 8, 18);
|
||||
aString.addAttribute(TextAttribute.FOREGROUND, Color.orange, 8, 18);
|
||||
g2d.drawString(aString.getIterator(), 250, 170);
|
||||
|
||||
g2d.drawString("Page: " + pageNum, 250, 190);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a bitmap file. We paint a few things on a bitmap and then save the bitmap using
|
||||
* an ImageWriter.
|
||||
* @param outputFile the target file
|
||||
* @param format the target format (a MIME type, ex. "image/png")
|
||||
* @throws IOException In case of an I/O error
|
||||
*/
|
||||
public void generateBitmapUsingJava2D(File outputFile, String format)
|
||||
throws IOException {
|
||||
//String compression = "CCITT T.6";
|
||||
String compression = "PackBits";
|
||||
boolean monochrome = compression.startsWith("CCITT"); //CCITT is for 1bit b/w only
|
||||
|
||||
BufferedImage bimg;
|
||||
if (monochrome) {
|
||||
bimg = new BufferedImage(400, 200, BufferedImage.TYPE_BYTE_BINARY);
|
||||
} else {
|
||||
bimg = new BufferedImage(400, 200, BufferedImage.TYPE_INT_RGB);
|
||||
}
|
||||
|
||||
Graphics2D g2d = bimg.createGraphics();
|
||||
g2d.setBackground(Color.white);
|
||||
g2d.clearRect(0, 0, 400, 200);
|
||||
g2d.setColor(Color.black);
|
||||
|
||||
//Paint something
|
||||
paintSome(g2d, 1);
|
||||
|
||||
OutputStream out = new java.io.FileOutputStream(outputFile);
|
||||
out = new java.io.BufferedOutputStream(out);
|
||||
try {
|
||||
|
||||
ImageWriter writer = ImageWriterRegistry.getInstance().getWriterFor(format);
|
||||
ImageWriterParams params = new ImageWriterParams();
|
||||
params.setCompressionMethod(compression);
|
||||
params.setResolution(72);
|
||||
writer.writeImage(bimg, out, params);
|
||||
|
||||
} finally {
|
||||
IOUtils.closeQuietly(out);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Command-line interface
|
||||
* @param args command-line arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
File targetDir;
|
||||
if (args.length >= 1) {
|
||||
targetDir = new File(args[0]);
|
||||
} else {
|
||||
targetDir = new File(".");
|
||||
}
|
||||
if (!targetDir.exists()) {
|
||||
System.err.println("Target Directory does not exist: " + targetDir);
|
||||
}
|
||||
File outputFile = new File(targetDir, "eps-example1.tif");
|
||||
ImageWriterExample1 app = new ImageWriterExample1();
|
||||
app.generateBitmapUsingJava2D(outputFile, "image/tiff");
|
||||
System.out.println("File written: " + outputFile.getCanonicalPath());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,118 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: ImageWriterExample2.java 750418 2009-03-05 11:03:54Z vhennebert $ */
|
||||
|
||||
package image.writer;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.xmlgraphics.image.writer.ImageWriter;
|
||||
import org.apache.xmlgraphics.image.writer.ImageWriterParams;
|
||||
import org.apache.xmlgraphics.image.writer.ImageWriterRegistry;
|
||||
import org.apache.xmlgraphics.image.writer.MultiImageWriter;
|
||||
|
||||
public class ImageWriterExample2 extends ImageWriterExample1 {
|
||||
|
||||
private BufferedImage createAnImage(String compression, int pageNum) {
|
||||
boolean monochrome = compression.startsWith("CCITT"); //CCITT is for 1bit b/w only
|
||||
|
||||
BufferedImage bimg;
|
||||
if (monochrome) {
|
||||
bimg = new BufferedImage(400, 200, BufferedImage.TYPE_BYTE_BINARY);
|
||||
} else {
|
||||
bimg = new BufferedImage(400, 200, BufferedImage.TYPE_INT_RGB);
|
||||
}
|
||||
|
||||
Graphics2D g2d = bimg.createGraphics();
|
||||
g2d.setBackground(Color.white);
|
||||
g2d.clearRect(0, 0, 400, 200);
|
||||
g2d.setColor(Color.black);
|
||||
|
||||
//Paint something
|
||||
paintSome(g2d, pageNum);
|
||||
|
||||
return bimg;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a bitmap file. We paint a few things on a bitmap and then save the bitmap using
|
||||
* an ImageWriter.
|
||||
* @param outputFile the target file
|
||||
* @param format the target format (a MIME type, ex. "image/png")
|
||||
* @throws IOException In case of an I/O error
|
||||
*/
|
||||
public void generateBitmapUsingJava2D(File outputFile, String format)
|
||||
throws IOException {
|
||||
//String compression = "CCITT T.6";
|
||||
String compression = "PackBits";
|
||||
|
||||
OutputStream out = new java.io.FileOutputStream(outputFile);
|
||||
out = new java.io.BufferedOutputStream(out);
|
||||
try {
|
||||
|
||||
ImageWriter writer = ImageWriterRegistry.getInstance().getWriterFor(format);
|
||||
ImageWriterParams params = new ImageWriterParams();
|
||||
params.setCompressionMethod(compression);
|
||||
params.setResolution(72);
|
||||
|
||||
if (writer.supportsMultiImageWriter()) {
|
||||
MultiImageWriter multiWriter = writer.createMultiImageWriter(out);
|
||||
multiWriter.writeImage(createAnImage(compression, 1), params);
|
||||
multiWriter.writeImage(createAnImage(compression, 2), params);
|
||||
multiWriter.close();
|
||||
} else {
|
||||
throw new UnsupportedOperationException("multi-page images not supported for "
|
||||
+ format);
|
||||
}
|
||||
|
||||
} finally {
|
||||
IOUtils.closeQuietly(out);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Command-line interface
|
||||
* @param args command-line arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
File targetDir;
|
||||
if (args.length >= 1) {
|
||||
targetDir = new File(args[0]);
|
||||
} else {
|
||||
targetDir = new File(".");
|
||||
}
|
||||
if (!targetDir.exists()) {
|
||||
System.err.println("Target Directory does not exist: " + targetDir);
|
||||
}
|
||||
File outputFile = new File(targetDir, "eps-example2.tif");
|
||||
ImageWriterExample2 app = new ImageWriterExample2();
|
||||
app.generateBitmapUsingJava2D(outputFile, "image/tiff");
|
||||
System.out.println("File written: " + outputFile.getCanonicalPath());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,125 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: EPSColorsExample.java 1051421 2010-12-21 08:54:25Z jeremias $ */
|
||||
|
||||
package java2d.ps;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Font;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
import org.apache.xmlgraphics.java2d.color.CIELabColorSpace;
|
||||
import org.apache.xmlgraphics.java2d.color.ColorSpaces;
|
||||
import org.apache.xmlgraphics.java2d.color.DeviceCMYKColorSpace;
|
||||
import org.apache.xmlgraphics.java2d.color.NamedColorSpace;
|
||||
import org.apache.xmlgraphics.java2d.ps.EPSDocumentGraphics2D;
|
||||
|
||||
/**
|
||||
* This example demonstrates how colors are handled when generating PostScript/EPS.
|
||||
*/
|
||||
public class EPSColorsExample {
|
||||
|
||||
/**
|
||||
* Creates an EPS file. The contents are painted using a Graphics2D implementation that
|
||||
* generates an EPS file.
|
||||
* @param outputFile the target file
|
||||
* @throws IOException In case of an I/O error
|
||||
*/
|
||||
public static void generateEPSusingJava2D(File outputFile) throws IOException {
|
||||
OutputStream out = new java.io.FileOutputStream(outputFile);
|
||||
out = new java.io.BufferedOutputStream(out);
|
||||
try {
|
||||
//Instantiate the EPSDocumentGraphics2D instance
|
||||
EPSDocumentGraphics2D g2d = new EPSDocumentGraphics2D(false);
|
||||
g2d.setGraphicContext(new org.apache.xmlgraphics.java2d.GraphicContext());
|
||||
|
||||
//Set up the document size
|
||||
g2d.setupDocument(out, 400, 200); //400pt x 200pt
|
||||
|
||||
//Paint a bounding box
|
||||
g2d.drawRect(0, 0, 400, 200);
|
||||
|
||||
g2d.setFont(new Font("sans-serif", Font.BOLD, 14));
|
||||
g2d.drawString("Color usage example:", 10, 20);
|
||||
g2d.setFont(new Font("sans-serif", Font.PLAIN, 12));
|
||||
g2d.drawString("RGB", 10, 84);
|
||||
g2d.drawString("CMYK", 60, 84);
|
||||
g2d.drawString("(Lab)", 110, 84);
|
||||
g2d.drawString("(Named)", 160, 84);
|
||||
|
||||
//We're creating a few boxes all filled with some variant of the
|
||||
//"Postgelb" (postal yellow) color as used by Swiss Post.
|
||||
|
||||
Color colRGB = new Color(255, 204, 0);
|
||||
g2d.setColor(colRGB);
|
||||
g2d.fillRect(10, 30, 40, 40);
|
||||
|
||||
//Just convert RGB to CMYK and use that
|
||||
float[] compsRGB = colRGB.getColorComponents(null);
|
||||
DeviceCMYKColorSpace cmykCS = ColorSpaces.getDeviceCMYKColorSpace();
|
||||
float[] compsCMYK = cmykCS.fromRGB(compsRGB);
|
||||
Color colCMYK = DeviceCMYKColorSpace.createCMYKColor(compsCMYK);
|
||||
g2d.setColor(colCMYK);
|
||||
g2d.fillRect(60, 30, 40, 40);
|
||||
|
||||
//Try CIELab (not implemented, yet)
|
||||
CIELabColorSpace d50 = ColorSpaces.getCIELabColorSpaceD50();
|
||||
Color colLab = d50.toColor(83.25f, 16.45f, 96.89f, 1.0f);
|
||||
g2d.setColor(colLab);
|
||||
g2d.fillRect(110, 30, 40, 40);
|
||||
|
||||
//Try named color (Separation, not implemented, yet)
|
||||
float[] c1xyz = d50.toCIEXYZNative(83.25f, 16.45f, 96.89f);
|
||||
NamedColorSpace postgelb = new NamedColorSpace("Postgelb", c1xyz);
|
||||
Color colNamed = new Color(postgelb, new float[] {1.0f}, 1.0f);
|
||||
g2d.setColor(colNamed);
|
||||
g2d.fillRect(160, 30, 40, 40);
|
||||
|
||||
//Cleanup
|
||||
g2d.finish();
|
||||
} finally {
|
||||
IOUtils.closeQuietly(out);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Command-line interface
|
||||
* @param args command-line arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
File targetDir;
|
||||
if (args.length >= 1) {
|
||||
targetDir = new File(args[0]);
|
||||
} else {
|
||||
targetDir = new File(".");
|
||||
}
|
||||
if (!targetDir.exists()) {
|
||||
System.err.println("Target Directory does not exist: " + targetDir);
|
||||
}
|
||||
generateEPSusingJava2D(new File(targetDir, "eps-example-colors.eps"));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,107 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: EPSExample1.java 750418 2009-03-05 11:03:54Z vhennebert $ */
|
||||
|
||||
package java2d.ps;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Font;
|
||||
import java.awt.Graphics2D;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.xmlgraphics.java2d.ps.EPSDocumentGraphics2D;
|
||||
|
||||
/**
|
||||
* This example demonstrates how you can generate an EPS (Encapsulated PostScript) file in Java
|
||||
* using the EPSDocumentGraphics2D class from Apache XML Graphics Commons.
|
||||
*/
|
||||
public class EPSExample1 {
|
||||
|
||||
/**
|
||||
* Creates an EPS file. The contents are painted using a Graphics2D implementation that
|
||||
* generates an EPS file.
|
||||
* @param outputFile the target file
|
||||
* @throws IOException In case of an I/O error
|
||||
*/
|
||||
public static void generateEPSusingJava2D(File outputFile) throws IOException {
|
||||
OutputStream out = new java.io.FileOutputStream(outputFile);
|
||||
out = new java.io.BufferedOutputStream(out);
|
||||
try {
|
||||
//Instantiate the EPSDocumentGraphics2D instance
|
||||
EPSDocumentGraphics2D g2d = new EPSDocumentGraphics2D(false);
|
||||
g2d.setGraphicContext(new org.apache.xmlgraphics.java2d.GraphicContext());
|
||||
|
||||
//Set up the document size
|
||||
g2d.setupDocument(out, 400, 200); //400pt x 200pt
|
||||
|
||||
//Paint a bounding box
|
||||
g2d.drawRect(0, 0, 400, 200);
|
||||
|
||||
//A few rectangles rotated and with different color
|
||||
Graphics2D copy = (Graphics2D)g2d.create();
|
||||
int c = 12;
|
||||
for (int i = 0; i < c; i++) {
|
||||
float f = ((i + 1) / (float)c);
|
||||
Color col = new Color(0.0f, 1 - f, 0.0f);
|
||||
copy.setColor(col);
|
||||
copy.fillRect(70, 90, 50, 50);
|
||||
copy.rotate(-2 * Math.PI / (double)c, 70, 90);
|
||||
}
|
||||
copy.dispose();
|
||||
|
||||
//Some text
|
||||
g2d.rotate(-0.25);
|
||||
g2d.setColor(Color.RED);
|
||||
g2d.setFont(new Font("sans-serif", Font.PLAIN, 36));
|
||||
g2d.drawString("Hello world!", 140, 140);
|
||||
g2d.setColor(Color.RED.darker());
|
||||
g2d.setFont(new Font("serif", Font.PLAIN, 36));
|
||||
g2d.drawString("Hello world!", 140, 180);
|
||||
|
||||
//Cleanup
|
||||
g2d.finish();
|
||||
} finally {
|
||||
IOUtils.closeQuietly(out);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Command-line interface
|
||||
* @param args command-line arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
File targetDir;
|
||||
if (args.length >= 1) {
|
||||
targetDir = new File(args[0]);
|
||||
} else {
|
||||
targetDir = new File(".");
|
||||
}
|
||||
if (!targetDir.exists()) {
|
||||
System.err.println("Target Directory does not exist: " + targetDir);
|
||||
}
|
||||
generateEPSusingJava2D(new File(targetDir, "eps-example1.eps"));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,161 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: TilingPatternExample.java 752824 2009-03-12 10:05:32Z jeremias $ */
|
||||
|
||||
package java2d.ps;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Font;
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Polygon;
|
||||
import java.awt.Rectangle;
|
||||
import java.awt.TexturePaint;
|
||||
import java.awt.font.GlyphVector;
|
||||
import java.awt.geom.AffineTransform;
|
||||
import java.awt.geom.Rectangle2D;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
import org.apache.xmlgraphics.image.writer.ImageWriterUtil;
|
||||
import org.apache.xmlgraphics.java2d.ps.PSDocumentGraphics2D;
|
||||
|
||||
/**
|
||||
* This example demonstrates the usage of PostScript tiling patterns. The class also generated
|
||||
* a PNG file so the output can be compared.
|
||||
*/
|
||||
public class TilingPatternExample {
|
||||
|
||||
private BufferedImage tile;
|
||||
private TexturePaint paint;
|
||||
|
||||
/**
|
||||
* Default constructor.
|
||||
*/
|
||||
public TilingPatternExample() {
|
||||
//Created TexturePaint instance
|
||||
this.tile = new BufferedImage(40, 20, BufferedImage.TYPE_INT_RGB);
|
||||
Graphics2D tileg2d = tile.createGraphics();
|
||||
tileg2d.setBackground(Color.WHITE);
|
||||
tileg2d.clearRect(0, 0, tile.getWidth(), tile.getHeight());
|
||||
tileg2d.setColor(Color.BLUE);
|
||||
tileg2d.fillOval(2, 2, tile.getWidth() - 2, tile.getHeight() - 2);
|
||||
tileg2d.dispose();
|
||||
Rectangle2D rect = new Rectangle2D.Double(
|
||||
2, 2,
|
||||
tile.getWidth() / 2.0, tile.getHeight() / 2.0);
|
||||
this.paint = new TexturePaint(tile, rect);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a PostScript file. The contents are painted using a Graphics2D implementation.
|
||||
* @param outputFile the target file
|
||||
* @throws IOException In case of an I/O error
|
||||
*/
|
||||
public void generatePSusingJava2D(File outputFile) throws IOException {
|
||||
OutputStream out = new java.io.FileOutputStream(outputFile);
|
||||
out = new java.io.BufferedOutputStream(out);
|
||||
try {
|
||||
//Instantiate the PSDocumentGraphics2D instance
|
||||
PSDocumentGraphics2D g2d = new PSDocumentGraphics2D(false);
|
||||
g2d.setGraphicContext(new org.apache.xmlgraphics.java2d.GraphicContext());
|
||||
|
||||
//Set up the document size
|
||||
g2d.setupDocument(out, 400, 200); //400pt x 200pt
|
||||
|
||||
paintTileAlone(g2d);
|
||||
paintShapes(g2d);
|
||||
paintText(g2d);
|
||||
|
||||
g2d.nextPage();
|
||||
|
||||
paintText(g2d);
|
||||
|
||||
//Cleanup
|
||||
g2d.finish();
|
||||
} finally {
|
||||
IOUtils.closeQuietly(out);
|
||||
}
|
||||
}
|
||||
|
||||
private void generatePNGusingJava2D(File outputFile) throws IOException {
|
||||
BufferedImage image = new BufferedImage(400, 200, BufferedImage.TYPE_INT_ARGB);
|
||||
Graphics2D g2d = image.createGraphics();
|
||||
paintTileAlone(g2d);
|
||||
paintShapes(g2d);
|
||||
paintText(g2d);
|
||||
g2d.dispose();
|
||||
|
||||
ImageWriterUtil.saveAsPNG(image, outputFile);
|
||||
}
|
||||
|
||||
private void paintTileAlone(Graphics2D g2d) {
|
||||
AffineTransform at = new AffineTransform();
|
||||
at.translate(5, 5);
|
||||
g2d.drawRenderedImage(this.tile, at);
|
||||
}
|
||||
|
||||
private void paintShapes(Graphics2D g2d) {
|
||||
g2d.setPaint(paint);
|
||||
Rectangle rect = new Rectangle(10, 50, 30, 30);
|
||||
g2d.fill(rect);
|
||||
rect = new Rectangle(10, 90, 40, 20);
|
||||
g2d.fill(rect);
|
||||
Polygon poly = new Polygon(new int[] {50, 100, 150}, new int[] {100, 20, 100}, 3);
|
||||
g2d.fill(poly);
|
||||
}
|
||||
|
||||
private void paintText(Graphics2D g2d) {
|
||||
g2d.setPaint(paint);
|
||||
Font font = new Font("serif", Font.BOLD, 80);
|
||||
GlyphVector gv = font.createGlyphVector(g2d.getFontRenderContext(), "Java");
|
||||
g2d.translate(100, 180);
|
||||
g2d.fill(gv.getOutline());
|
||||
}
|
||||
|
||||
/**
|
||||
* Command-line interface
|
||||
* @param args command-line arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
File targetDir;
|
||||
if (args.length >= 1) {
|
||||
targetDir = new File(args[0]);
|
||||
} else {
|
||||
targetDir = new File(".");
|
||||
}
|
||||
if (!targetDir.exists()) {
|
||||
System.err.println("Target Directory does not exist: " + targetDir);
|
||||
}
|
||||
File outputFile = new File(targetDir, "tiling-example.ps");
|
||||
File pngFile = new File(targetDir, "tiling-example.png");
|
||||
TilingPatternExample app = new TilingPatternExample();
|
||||
app.generatePSusingJava2D(outputFile);
|
||||
System.out.println("File written: " + outputFile.getCanonicalPath());
|
||||
app.generatePNGusingJava2D(pngFile);
|
||||
System.out.println("File written: " + pngFile.getCanonicalPath());
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,101 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: DSCProcessingExample1.java 750418 2009-03-05 11:03:54Z vhennebert $ */
|
||||
|
||||
package ps;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.OutputStream;
|
||||
import java.io.InputStream;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.xmlgraphics.ps.dsc.DSCException;
|
||||
import org.apache.xmlgraphics.ps.dsc.tools.PageExtractor;
|
||||
|
||||
/**
|
||||
* Demonstrates how the DSC parser can be used to extract a series of pages from a DSC-compliant
|
||||
* PostScript file. For details how this works, please look into the PageExtractor class
|
||||
* where the actual functionality is located. This sample class only calls the code there.
|
||||
*/
|
||||
public class DSCProcessingExample1 {
|
||||
|
||||
/**
|
||||
* Extracts a series of pages from a DSC-compliant PostScript file.
|
||||
* @param srcFile the source PostScript file
|
||||
* @param tgtFile the target file to write the extracted pages to
|
||||
* @param from the starting page number
|
||||
* @param to the ending page number
|
||||
* @throws IOException In case of an I/O error
|
||||
*/
|
||||
public void extractPages(File srcFile, File tgtFile, int from, int to) throws IOException {
|
||||
InputStream in = new java.io.FileInputStream(srcFile);
|
||||
in = new java.io.BufferedInputStream(in);
|
||||
try {
|
||||
OutputStream out = new java.io.FileOutputStream(tgtFile);
|
||||
out = new java.io.BufferedOutputStream(out);
|
||||
try {
|
||||
PageExtractor.extractPages(in, out, from, to);
|
||||
} catch (DSCException e) {
|
||||
throw new RuntimeException(e.getMessage());
|
||||
} finally {
|
||||
IOUtils.closeQuietly(out);
|
||||
}
|
||||
} finally {
|
||||
IOUtils.closeQuietly(in);
|
||||
}
|
||||
}
|
||||
|
||||
private static void showInfo() {
|
||||
System.out.println(
|
||||
"Call: DSCProcessingExample1 <source-file> <target-file> <from-page> <to-page>");
|
||||
}
|
||||
|
||||
/**
|
||||
* Command-line interface
|
||||
* @param args command-line arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
File srcFile , tgtFile;
|
||||
int from, to;
|
||||
if (args.length >= 4) {
|
||||
srcFile = new File(args[0]);
|
||||
tgtFile = new File(args[1]);
|
||||
from = Integer.parseInt(args[2]);
|
||||
to = Integer.parseInt(args[3]);
|
||||
} else {
|
||||
throw new IllegalArgumentException("Invalid number of parameters!");
|
||||
}
|
||||
if (!srcFile.exists()) {
|
||||
throw new IllegalArgumentException("Source file not found: " + srcFile);
|
||||
}
|
||||
DSCProcessingExample1 app = new DSCProcessingExample1();
|
||||
app.extractPages(srcFile, tgtFile, from, to);
|
||||
System.out.println("File written: " + tgtFile.getCanonicalPath());
|
||||
} catch (IllegalArgumentException iae) {
|
||||
System.err.println(iae.getMessage());
|
||||
showInfo();
|
||||
System.exit(1);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
System.exit(-1);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,98 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: ExtractMetadataPacket.java 606567 2007-12-23 15:52:49Z jeremias $ */
|
||||
|
||||
package xmp;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URL;
|
||||
|
||||
import javax.xml.transform.TransformerException;
|
||||
|
||||
import org.apache.xmlgraphics.xmp.Metadata;
|
||||
import org.apache.xmlgraphics.xmp.XMPArray;
|
||||
import org.apache.xmlgraphics.xmp.XMPConstants;
|
||||
import org.apache.xmlgraphics.xmp.XMPPacketParser;
|
||||
import org.apache.xmlgraphics.xmp.XMPProperty;
|
||||
|
||||
/**
|
||||
* This example shows how to parse an XMP packet from an arbitrary file.
|
||||
*/
|
||||
public class ExtractMetadataPacket {
|
||||
|
||||
private static void parseMetadata() throws IOException, TransformerException {
|
||||
URL url = ExtractMetadataPacket.class.getResource("xmp-sandbox.fop.trunk.pdf");
|
||||
InputStream in = url.openStream();
|
||||
try {
|
||||
Metadata meta = XMPPacketParser.parse(in);
|
||||
if (meta == null) {
|
||||
System.err.println("No XMP packet found!");
|
||||
} else {
|
||||
dumpSomeMetadata(meta);
|
||||
}
|
||||
} finally {
|
||||
in.close();
|
||||
}
|
||||
}
|
||||
|
||||
private static void dumpSomeMetadata(Metadata meta) {
|
||||
XMPProperty prop;
|
||||
prop = meta.getProperty(XMPConstants.DUBLIN_CORE_NAMESPACE, "creator");
|
||||
if (prop != null) {
|
||||
XMPArray array;
|
||||
array = prop.getArrayValue();
|
||||
for (int i = 0, c = array.getSize(); i < c; i++) {
|
||||
System.out.println("Creator: " + array.getValue(i));
|
||||
}
|
||||
}
|
||||
prop = meta.getProperty(XMPConstants.DUBLIN_CORE_NAMESPACE, "title");
|
||||
if (prop != null) {
|
||||
System.out.println("Title: " + prop.getValue());
|
||||
}
|
||||
prop = meta.getProperty(XMPConstants.XMP_BASIC_NAMESPACE, "CreateDate");
|
||||
if (prop != null) {
|
||||
System.out.println("Creation Date: " + prop.getValue());
|
||||
}
|
||||
prop = meta.getProperty(XMPConstants.XMP_BASIC_NAMESPACE, "CreatorTool");
|
||||
if (prop != null) {
|
||||
System.out.println("Creator Tool: " + prop.getValue());
|
||||
}
|
||||
prop = meta.getProperty(XMPConstants.ADOBE_PDF_NAMESPACE, "Producer");
|
||||
if (prop != null) {
|
||||
System.out.println("Producer: " + prop.getValue());
|
||||
}
|
||||
prop = meta.getProperty(XMPConstants.ADOBE_PDF_NAMESPACE, "PDFVersion");
|
||||
if (prop != null) {
|
||||
System.out.println("PDF version: " + prop.getValue());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Command-line interface.
|
||||
* @param args the command-line arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
parseMetadata();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,87 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: MergeMetadata.java 750418 2009-03-05 11:03:54Z vhennebert $ */
|
||||
|
||||
package xmp;
|
||||
|
||||
import java.net.URL;
|
||||
import java.util.Date;
|
||||
|
||||
import javax.xml.transform.TransformerException;
|
||||
|
||||
import org.apache.xmlgraphics.xmp.Metadata;
|
||||
import org.apache.xmlgraphics.xmp.XMPConstants;
|
||||
import org.apache.xmlgraphics.xmp.XMPParser;
|
||||
import org.apache.xmlgraphics.xmp.XMPProperty;
|
||||
import org.apache.xmlgraphics.xmp.XMPSerializer;
|
||||
import org.apache.xmlgraphics.xmp.schemas.DublinCoreAdapter;
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
/**
|
||||
* This example shows how to parse an XMP metadata file.
|
||||
*/
|
||||
public class MergeMetadata {
|
||||
|
||||
private static void mergeMetadata() throws TransformerException, SAXException {
|
||||
URL url = MergeMetadata.class.getResource("pdf-example.xmp");
|
||||
Metadata meta1 = XMPParser.parseXMP(url);
|
||||
|
||||
Metadata meta2 = new Metadata();
|
||||
DublinCoreAdapter dc = new DublinCoreAdapter(meta2);
|
||||
dc.setTitle("de", "Der Herr der Ringe");
|
||||
dc.setTitle("en", "Lord of the Rings");
|
||||
dc.addCreator("J.R.R. Tolkien"); //Will replace creator from pdf-example.xmp
|
||||
dc.addDate(new Date());
|
||||
|
||||
meta2.mergeInto(meta1);
|
||||
|
||||
Metadata meta = meta1;
|
||||
XMPProperty prop;
|
||||
dc = new DublinCoreAdapter(meta);
|
||||
String[] creators = dc.getCreators();
|
||||
for (int i = 0, c = creators.length; i < c; i++) {
|
||||
System.out.println("Creator: " + creators[i]);
|
||||
}
|
||||
System.out.println("Title: " + dc.getTitle());
|
||||
System.out.println("Title de: " + dc.getTitle("de"));
|
||||
System.out.println("Title en: " + dc.getTitle("en"));
|
||||
prop = meta.getProperty(XMPConstants.XMP_BASIC_NAMESPACE, "CreateDate");
|
||||
System.out.println("Creation Date: " + prop.getValue());
|
||||
prop = meta.getProperty(XMPConstants.XMP_BASIC_NAMESPACE, "CreatorTool");
|
||||
System.out.println("Creator Tool: " + prop.getValue());
|
||||
prop = meta.getProperty(XMPConstants.ADOBE_PDF_NAMESPACE, "Producer");
|
||||
System.out.println("Producer: " + prop.getValue());
|
||||
prop = meta.getProperty(XMPConstants.ADOBE_PDF_NAMESPACE, "PDFVersion");
|
||||
System.out.println("PDF version: " + prop.getValue());
|
||||
|
||||
XMPSerializer.writeXMPPacket(meta, System.out, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Command-line interface.
|
||||
* @param args the command-line arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
mergeMetadata();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: MetadataFromScratch.java 889803 2009-12-11 20:36:36Z jeremias $ */
|
||||
|
||||
package xmp;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import javax.xml.transform.TransformerConfigurationException;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import org.apache.xmlgraphics.xmp.Metadata;
|
||||
import org.apache.xmlgraphics.xmp.XMPSerializer;
|
||||
import org.apache.xmlgraphics.xmp.schemas.DublinCoreAdapter;
|
||||
|
||||
/**
|
||||
* This example shows how to build an XMP metadata file from scratch in Java.
|
||||
*/
|
||||
public class MetadataFromScratch {
|
||||
|
||||
private static void buildAndPrintMetadata()
|
||||
throws TransformerConfigurationException, SAXException {
|
||||
Metadata meta = new Metadata();
|
||||
DublinCoreAdapter dc = new DublinCoreAdapter(meta);
|
||||
dc.setTitle("de", "Der Herr der Ringe");
|
||||
dc.setTitle("en", "Lord of the Rings");
|
||||
dc.addDate(new Date());
|
||||
dc.setFormat("application/pdf");
|
||||
dc.addCreator("J.R.R. Tolkien");
|
||||
|
||||
StreamResult res = new StreamResult(System.out);
|
||||
XMPSerializer.writeXML(meta, res);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Command-line interface.
|
||||
* @param args the command-line arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
buildAndPrintMetadata();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,86 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: ParseMetadata.java 750418 2009-03-05 11:03:54Z vhennebert $ */
|
||||
|
||||
package xmp;
|
||||
|
||||
import java.net.URL;
|
||||
|
||||
import javax.xml.transform.TransformerException;
|
||||
import javax.xml.transform.stream.StreamResult;
|
||||
|
||||
import org.xml.sax.SAXException;
|
||||
|
||||
import org.apache.xmlgraphics.xmp.Metadata;
|
||||
import org.apache.xmlgraphics.xmp.XMPArray;
|
||||
import org.apache.xmlgraphics.xmp.XMPConstants;
|
||||
import org.apache.xmlgraphics.xmp.XMPParser;
|
||||
import org.apache.xmlgraphics.xmp.XMPProperty;
|
||||
import org.apache.xmlgraphics.xmp.XMPSerializer;
|
||||
import org.apache.xmlgraphics.xmp.schemas.DublinCoreAdapter;
|
||||
import org.apache.xmlgraphics.xmp.schemas.DublinCoreSchema;
|
||||
|
||||
/**
|
||||
* This example shows how to parse an XMP metadata file.
|
||||
*/
|
||||
public class ParseMetadata {
|
||||
|
||||
private static void parseMetadata() throws TransformerException, SAXException {
|
||||
URL url = ParseMetadata.class.getResource("pdf-example.xmp");
|
||||
Metadata meta = XMPParser.parseXMP(url);
|
||||
XMPProperty prop;
|
||||
prop = meta.getProperty(XMPConstants.DUBLIN_CORE_NAMESPACE, "creator");
|
||||
XMPArray array;
|
||||
array = prop.getArrayValue();
|
||||
for (int i = 0, c = array.getSize(); i < c; i++) {
|
||||
System.out.println("Creator: " + array.getValue(i));
|
||||
}
|
||||
prop = meta.getProperty(XMPConstants.DUBLIN_CORE_NAMESPACE, "title");
|
||||
array = prop.getArrayValue();
|
||||
System.out.println("Default Title: " + array.getSimpleValue());
|
||||
System.out.println("German Title: " + array.getLangValue("de"));
|
||||
prop = meta.getProperty(XMPConstants.XMP_BASIC_NAMESPACE, "CreateDate");
|
||||
System.out.println("Creation Date: " + prop.getValue());
|
||||
prop = meta.getProperty(XMPConstants.XMP_BASIC_NAMESPACE, "CreatorTool");
|
||||
System.out.println("Creator Tool: " + prop.getValue());
|
||||
prop = meta.getProperty(XMPConstants.ADOBE_PDF_NAMESPACE, "Producer");
|
||||
System.out.println("Producer: " + prop.getValue());
|
||||
prop = meta.getProperty(XMPConstants.ADOBE_PDF_NAMESPACE, "PDFVersion");
|
||||
System.out.println("PDF version: " + prop.getValue());
|
||||
|
||||
DublinCoreAdapter dc = DublinCoreSchema.getAdapter(meta);
|
||||
System.out.println("Default title: " + dc.getTitle());
|
||||
System.out.println("German title: " + dc.getTitle("de"));
|
||||
|
||||
StreamResult res = new StreamResult(System.out);
|
||||
XMPSerializer.writeXML(meta, res);
|
||||
}
|
||||
|
||||
/**
|
||||
* Command-line interface.
|
||||
* @param args the command-line arguments
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
try {
|
||||
parseMetadata();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<x:xmpmeta xmlns:x="adobe:ns:meta/">
|
||||
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||
<rdf:Description xmlns:dc="http://purl.org/dc/elements/1.1/" rdf:about="">
|
||||
<dc:creator>
|
||||
<rdf:Seq>
|
||||
<rdf:li>John Doe</rdf:li>
|
||||
<rdf:li>Jane Doe</rdf:li>
|
||||
</rdf:Seq>
|
||||
</dc:creator>
|
||||
<dc:title>
|
||||
<rdf:Alt>
|
||||
<rdf:li xml:lang="x-default">Example document</rdf:li>
|
||||
<rdf:li xml:lang="de">Beispieldokument</rdf:li>
|
||||
</rdf:Alt>
|
||||
</dc:title>
|
||||
<dc:date>2006-06-02T10:36:40+02:00</dc:date>
|
||||
</rdf:Description>
|
||||
<rdf:Description xmlns:xmp="http://ns.adobe.com/xap/1.0/" rdf:about="">
|
||||
<xmp:CreateDate>2006-06-02T10:36:40+02:00</xmp:CreateDate>
|
||||
<xmp:CreatorTool>An XML editor</xmp:CreatorTool>
|
||||
</rdf:Description>
|
||||
<rdf:Description xmlns:pdf="http://ns.adobe.com/pdf/1.3/" rdf:about="">
|
||||
<pdf:Producer>Apache FOP Version SVN trunk</pdf:Producer>
|
||||
<pdf:PDFVersion>1.4</pdf:PDFVersion>
|
||||
</rdf:Description>
|
||||
</rdf:RDF>
|
||||
</x:xmpmeta>
|
Binary file not shown.
|
@ -0,0 +1,55 @@
|
|||
|
||||
Information on Apache XML Graphics Commons dependencies
|
||||
==========================================================
|
||||
|
||||
$Id: README.txt 606580 2007-12-23 17:45:02Z jeremias $
|
||||
|
||||
The Apache Licenses can also be found here:
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
|
||||
Normal Dependencies
|
||||
----------------------
|
||||
|
||||
- Apache Commons IO
|
||||
|
||||
commons-io-*.jar
|
||||
http://jakarta.apache.org/commons/io/
|
||||
(I/O routines)
|
||||
|
||||
Apache License v2.0
|
||||
|
||||
|
||||
- Apache Commons Logging
|
||||
|
||||
commons-logging-*.jar
|
||||
http://jakarta.apache.org/commons/logging/
|
||||
(Logger abstraction)
|
||||
|
||||
Apache License v2.0
|
||||
|
||||
|
||||
|
||||
Special Dependencies
|
||||
-----------------------
|
||||
|
||||
- JAXP 1.2 (Java 1.4 level)
|
||||
|
||||
|
||||
|
||||
Additional development-time dependencies
|
||||
-------------------------------------------
|
||||
|
||||
- Apache Ant (1.6.5 or later)
|
||||
|
||||
(not bundled, requires pre-installation)
|
||||
http://ant.apache.org
|
||||
(XML-based build system
|
||||
|
||||
Apache License V2.0
|
||||
|
||||
- JUnit (3.8.1 or later)
|
||||
|
||||
(not bundled, provided by Apache Ant or your IDE)
|
||||
http://www.junit.org
|
||||
Common Public License V1.0
|
|
@ -0,0 +1,27 @@
|
|||
BSD License
|
||||
|
||||
Copyright (c) 2000-2006, www.hamcrest.org
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
Redistributions of source code must retain the above copyright notice, this list of
|
||||
conditions and the following disclaimer. Redistributions in binary form must reproduce
|
||||
the above copyright notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the distribution.
|
||||
|
||||
Neither the name of Hamcrest nor the names of its contributors may be used to endorse
|
||||
or promote products derived from this software without specific prior written
|
||||
permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
|
||||
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
|
||||
SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY
|
||||
WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||||
DAMAGE.
|
Binary file not shown.
|
@ -0,0 +1,21 @@
|
|||
The MIT License
|
||||
|
||||
Copyright (c) 2007 Mockito contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
|
@ -0,0 +1,11 @@
|
|||
Mockito license - MIT.
|
||||
|
||||
Libraries used:
|
||||
|
||||
Cglib - Apache License 2.0
|
||||
ASM - BSD license
|
||||
|
||||
Mockito all distribution:
|
||||
|
||||
Objenesis - MIT license
|
||||
Hamcrest - BSD license
|
Binary file not shown.
|
@ -0,0 +1,18 @@
|
|||
Copyright (c) 2003-2008, Objenesis Team and all contributors
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
Binary file not shown.
|
@ -0,0 +1,202 @@
|
|||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
|
@ -0,0 +1,16 @@
|
|||
=========================================================================
|
||||
== NOTICE file corresponding to section 4(d) of the Apache License, ==
|
||||
== Version 2.0, in this case for the Apache xml-commons xml-apis ==
|
||||
== distribution. ==
|
||||
=========================================================================
|
||||
|
||||
Apache XML Commons
|
||||
Copyright 2001-2003,2006 The Apache Software Foundation.
|
||||
|
||||
This product includes software developed at
|
||||
The Apache Software Foundation (http://www.apache.org/).
|
||||
|
||||
Portions of this software were originally based on the following:
|
||||
- software copyright (c) 1999, IBM Corporation., http://www.ibm.com.
|
||||
- software copyright (c) 1999, Sun Microsystems., http://www.sun.com.
|
||||
- software copyright (c) 2000 World Wide Web Consortium, http://www.w3.org
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,203 @@
|
|||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
Apache Jakarta Commons IO
|
||||
Copyright 2001-2007 The Apache Software Foundation
|
||||
|
||||
This product includes software developed by
|
||||
The Apache Software Foundation (http://www.apache.org/).
|
||||
|
Binary file not shown.
|
@ -0,0 +1,202 @@
|
|||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
|
@ -0,0 +1,3 @@
|
|||
This product includes software developed by
|
||||
The Apache Software Foundation (http://www.apache.org/).
|
||||
|
|
@ -0,0 +1,234 @@
|
|||
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>org.apache.xmlgraphics</groupId>
|
||||
<artifactId>xmlgraphics-commons</artifactId>
|
||||
<version>2.7</version>
|
||||
<name>${project.groupId}:${project.artifactId}</name>
|
||||
<description>XML Graphics Commons</description>
|
||||
<url>http://xmlgraphics.apache.org/commons/</url>
|
||||
|
||||
<properties>
|
||||
<checkstyle.version>2.15</checkstyle.version>
|
||||
<exec.version>1.4.0</exec.version>
|
||||
<findbugs.version>3.0.4</findbugs.version>
|
||||
<java.version>1.7</java.version>
|
||||
<junit.version>4.11</junit.version>
|
||||
<project.info.reports.version>2.8</project.info.reports.version>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<release.version>2.5.2</release.version>
|
||||
<surefire.version>2.18.1</surefire.version>
|
||||
<jdk.path>${env.JAVA_HOME}</jdk.path>
|
||||
</properties>
|
||||
|
||||
<licenses>
|
||||
<license>
|
||||
<name>The Apache Software License, Version 2.0</name>
|
||||
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
||||
<distribution>repo</distribution>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
<scm>
|
||||
<connection>scm:svn:https://svn.apache.org/repos/asf/xmlgraphics/commons/trunk/</connection>
|
||||
<url>scm:svn:https://svn.apache.org/repos/asf/xmlgraphics/commons/trunk/</url>
|
||||
<developerConnection></developerConnection>
|
||||
</scm>
|
||||
|
||||
<organization>
|
||||
<name>Apache Software Foundation</name>
|
||||
<url>http://www.apache.org/</url>
|
||||
</organization>
|
||||
|
||||
<distributionManagement>
|
||||
<site>
|
||||
<id>${project.artifactId}-site</id>
|
||||
<url>${project.baseUri}</url>
|
||||
</site>
|
||||
</distributionManagement>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<version>1.3.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>commons-logging</groupId>
|
||||
<artifactId>commons-logging</artifactId>
|
||||
<version>1.2</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>${junit.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-core</artifactId>
|
||||
<version>2.28.2</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>xml-resolver</groupId>
|
||||
<artifactId>xml-resolver</artifactId>
|
||||
<version>1.2</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>${java.version}</source>
|
||||
<target>${java.version}</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-project-info-reports-plugin</artifactId>
|
||||
<version>${project.info.reports.version}</version>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>${surefire.version}</version>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||
<version>${checkstyle.version}</version>
|
||||
<configuration>
|
||||
<configLocation>${project.baseUri}src/tools/resources/checkstyle/checkstyle.xml</configLocation>
|
||||
<headerLocation>${project.baseUri}src/tools/resources/checkstyle/LICENSE.txt</headerLocation>
|
||||
<includeResources>false</includeResources>
|
||||
<includeTestResources>false</includeTestResources>
|
||||
<linkXRef>false</linkXRef>
|
||||
<logViolationsToConsole>true</logViolationsToConsole>
|
||||
<suppressionsLocation>${project.baseUri}src/tools/resources/checkstyle/suppressions.xml</suppressionsLocation>
|
||||
<violationSeverity>warning</violationSeverity>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>findbugs-maven-plugin</artifactId>
|
||||
<version>${findbugs.version}</version>
|
||||
<configuration>
|
||||
<excludeFilterFile>src/tools/resources/findbugs/exclusions.xml</excludeFilterFile>
|
||||
<effort>Max</effort>
|
||||
<threshold>Low</threshold>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-surefire-plugin</artifactId>
|
||||
<version>${surefire.version}</version><!--$NO-MVN-MAN-VER$-->
|
||||
<configuration>
|
||||
<includes>
|
||||
<include>**/*TestCase.java</include>
|
||||
<include>**/*TestCases.java</include>
|
||||
</includes>
|
||||
<redirectTestOutputToFile>true</redirectTestOutputToFile>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
</resource>
|
||||
<resource>
|
||||
<directory>${basedir}</directory>
|
||||
<includes>
|
||||
<include>LICENSE</include>
|
||||
<include>NOTICE</include>
|
||||
</includes>
|
||||
<targetPath>META-INF</targetPath>
|
||||
</resource>
|
||||
</resources>
|
||||
<testResources>
|
||||
<testResource>
|
||||
<!-- TBD - move following *.{png,tiff,txt,xmp} into test/resources, then remove these rules -->
|
||||
<directory>src/test/java</directory>
|
||||
<includes>
|
||||
<include>**/*.png</include>
|
||||
<include>**/*.tiff</include>
|
||||
<include>**/*.txt</include>
|
||||
<include>**/*.xmp</include>
|
||||
</includes>
|
||||
</testResource>
|
||||
<testResource>
|
||||
<directory>src/test/resources</directory>
|
||||
<includes>
|
||||
<include>**/*</include>
|
||||
</includes>
|
||||
</testResource>
|
||||
</testResources>
|
||||
</build>
|
||||
|
||||
<profiles>
|
||||
<profile>
|
||||
<id>custom-javac</id>
|
||||
<activation>
|
||||
<property>
|
||||
<name>jdk.path</name>
|
||||
</property>
|
||||
</activation>
|
||||
<build>
|
||||
<pluginManagement>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<configuration>
|
||||
<source>${java.version}</source>
|
||||
<target>${java.version}</target>
|
||||
<executable>${jdk.path}/bin/javac</executable>
|
||||
<fork>true</fork>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</pluginManagement>
|
||||
</build>
|
||||
</profile>
|
||||
</profiles>
|
||||
|
||||
<reporting>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||
<version>${checkstyle.version}</version>
|
||||
<configuration>
|
||||
<configLocation>${project.baseUri}src/tools/resources/checkstyle/checkstyle.xml</configLocation>
|
||||
<headerLocation>${project.baseUri}src/tools/resources/checkstyle/LICENSE.txt</headerLocation>
|
||||
<includeResources>false</includeResources>
|
||||
<includeTestResources>false</includeTestResources>
|
||||
<linkXRef>false</linkXRef>
|
||||
<suppressionsLocation>${project.baseUri}src/tools/resources/checkstyle/suppressions.xml</suppressionsLocation>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>findbugs-maven-plugin</artifactId>
|
||||
<version>${findbugs.version}</version>
|
||||
<configuration>
|
||||
<excludeFilterFile>src/tools/resources/findbugs/exclusions.xml</excludeFilterFile>
|
||||
<effort>Max</effort>
|
||||
<findBugsXmlOutput>true</findBugsXmlOutput>
|
||||
<findBugsXmlWithMessages>true</findBugsXmlWithMessages>
|
||||
<threshold>Low</threshold>
|
||||
<xmlOutput>true</xmlOutput>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</reporting>
|
||||
|
||||
</project>
|
|
@ -0,0 +1,7 @@
|
|||
This is the base documentation directory.
|
||||
|
||||
skinconf.xml # This file customizes Forrest for your project. In it, you
|
||||
# tell forrest the project name, logo, copyright info, etc
|
||||
|
||||
sitemap.xmap # Optional. This sitemap is consulted before all core sitemaps.
|
||||
# See http://forrest.apache.org/docs/project-sitemap.html
|
|
@ -0,0 +1,38 @@
|
|||
# Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
# contributor license agreements. See the NOTICE file distributed with
|
||||
# this work for additional information regarding copyright ownership.
|
||||
# The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
# (the "License"); you may not use this file except in compliance with
|
||||
# the License. You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
#=======================================================================
|
||||
# CatalogManager.properties
|
||||
#
|
||||
# This is the default properties file for Apache Forrest.
|
||||
# This facilitates local configuration of application-specific catalogs.
|
||||
#
|
||||
# See the Apache Forrest documentation:
|
||||
# http://forrest.apache.org/docs/your-project.html
|
||||
# http://forrest.apache.org/docs/validation.html
|
||||
|
||||
# verbosity ... level of messages for status/debug
|
||||
# See forrest/src/core/context/WEB-INF/cocoon.xconf
|
||||
|
||||
# catalogs ... list of additional catalogs to load
|
||||
# (Note that Apache Forrest will automatically load its own default catalog
|
||||
# from src/core/context/resources/schema/catalog.xcat)
|
||||
# use full pathnames
|
||||
# pathname separator is always semi-colon (;) regardless of operating system
|
||||
# directory separator is always slash (/) regardless of operating system
|
||||
#
|
||||
#catalogs=/home/me/forrest/my-site/src/documentation/resources/schema/catalog.xcat
|
||||
catalogs=
|
||||
|
|
@ -0,0 +1,101 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<rdf:RDF xml:lang="en"
|
||||
xmlns="http://usefulinc.com/ns/doap#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:asfext="http://projects.apache.org/ns/asfext#"
|
||||
xmlns:foaf="http://xmlns.com/foaf/0.1/">
|
||||
<Project rdf:about="http://xmlgraphics.apache.org/commons/">
|
||||
<created>2006-04-17</created>
|
||||
<license rdf:resource="http://usefulinc.com/doap/licenses/asl20"/>
|
||||
<name>Apache XML Graphics Commons</name>
|
||||
<homepage rdf:resource="http://xmlgraphics.apache.org/commons/"/>
|
||||
<asfext:pmc rdf:resource="http://xmlgraphics.apache.org"/>
|
||||
<shortdesc>Common components for Apache Batik and Apache FOP</shortdesc>
|
||||
<description>Apache XML Graphics Commons is a library that consists of several reusable components used by Apache Batik and Apache FOP. Many of these components can easily be used separately outside the domains of SVG and XSL-FO. You will find components such as a PDF library, an RTF library, Graphics2D implementations that let you generate PDF and PostScript files and much more.</description>
|
||||
<mailing-list rdf:resource="http://xmlgraphics.apache.org/mail.html"/>
|
||||
<download-page rdf:resource="http://xmlgraphics.apache.org/commons/download.html"/>
|
||||
<programming-language>Java</programming-language>
|
||||
<category rdf:resource="http://projects.apache.org/category/graphics"/>
|
||||
<asfext:implements>
|
||||
<asfext:Standard>
|
||||
<asfext:title>PostScript</asfext:title>
|
||||
<asfext:body>Adobe Systems Incorporated</asfext:body>
|
||||
<asfext:id>PS</asfext:id>
|
||||
<asfext:url rdf:resource="http://partners.adobe.com/public/developer/ps/index_specs.html"/>
|
||||
</asfext:Standard>
|
||||
</asfext:implements>
|
||||
<asfext:implements>
|
||||
<asfext:Standard>
|
||||
<asfext:title>Extensible Metadata Platform (XMP)</asfext:title>
|
||||
<asfext:body>Adobe Systems Incorporated</asfext:body>
|
||||
<asfext:id>XMP</asfext:id>
|
||||
<asfext:url rdf:resource="http://www.adobe.com/products/xmp/index.html"/>
|
||||
</asfext:Standard>
|
||||
</asfext:implements>
|
||||
<release>
|
||||
<Version>
|
||||
<name>Current release (stable)</name>
|
||||
<created>2012-10-20</created>
|
||||
<revision>1.5</revision>
|
||||
</Version>
|
||||
<Version>
|
||||
<name>Previous release (stable)</name>
|
||||
<created>2010-07-07</created>
|
||||
<revision>1.4</revision>
|
||||
</Version>
|
||||
<Version>
|
||||
<name>Previous release (stable)</name>
|
||||
<created>2008-06-11</created>
|
||||
<revision>1.3.1</revision>
|
||||
</Version>
|
||||
<Version>
|
||||
<name>Previous release (stable)</name>
|
||||
<created>2008-03-07</created>
|
||||
<revision>1.3</revision>
|
||||
</Version>
|
||||
<Version>
|
||||
<name>Previous release (stable)</name>
|
||||
<created>2007-07-21</created>
|
||||
<revision>1.2</revision>
|
||||
</Version>
|
||||
<Version>
|
||||
<name>Previous release (stable)</name>
|
||||
<created>2006-12-22</created>
|
||||
<revision>1.1</revision>
|
||||
</Version>
|
||||
<Version>
|
||||
<name>Previous release (stable)</name>
|
||||
<created>2006-04-17</created>
|
||||
<revision>1.0</revision>
|
||||
</Version>
|
||||
</release>
|
||||
<repository>
|
||||
<SVNRepository>
|
||||
<location rdf:resource="http://svn.apache.org/repos/asf/xmlgraphics/commons/trunk/"/>
|
||||
<browse rdf:resource="http://svn.apache.org/viewcvs.cgi/xmlgraphics/commons/trunk/"/>
|
||||
</SVNRepository>
|
||||
</repository>
|
||||
<maintainer>
|
||||
<foaf:Person>
|
||||
<foaf:name>Jeremias Maerki</foaf:name>
|
||||
<foaf:mbox rdf:resource="mailto:jeremias@apache.org"/>
|
||||
</foaf:Person>
|
||||
</maintainer>
|
||||
</Project>
|
||||
</rdf:RDF>
|
|
@ -0,0 +1,67 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<!-- $Id: bugs.xml 1297479 2012-03-06 14:06:23Z cbowditch $ -->
|
||||
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.3//EN" "http://forrest.apache.org/dtd/document-v13.dtd">
|
||||
|
||||
<document>
|
||||
<header>
|
||||
<title>Apache™ XML Graphics Commons: Bugs and Other Trackable Issues</title>
|
||||
<version>$Revision: 911792 $</version>
|
||||
</header>
|
||||
<body>
|
||||
<p>
|
||||
Information on this page applies to enhancement requests and other trackable
|
||||
issues as well as bugs.
|
||||
</p>
|
||||
<section id="issues_existing">
|
||||
<title>Reported Issues</title>
|
||||
<p>A list of unresolved reported bugs can be found at <link
|
||||
href="http://issues.apache.org/bugzilla/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&email1=&emailtype1=substring&emailassigned_to1=1&email2=&emailtype2=substring&emailreporter2=1&bugidtype=include&bug_id=&changedin=&votes=&chfieldfrom=&chfieldto=Now&chfieldvalue=&product=XMLGraphicsCommons&short_desc=&short_desc_type=allwordssubstr&long_desc=&long_desc_type=allwordssubstr&bug_file_loc=&bug_file_loc_type=allwordssubstr&keywords=&keywords_type=anywords&field0-0-0=noop&type0-0-0=noop&value0-0-0=">XML Graphics Commons Open Bugs (Bugzilla)</link>. If you have an
|
||||
interest in an issue already reported, please consider the
|
||||
following:
|
||||
</p>
|
||||
<ul>
|
||||
<li>If you have insight that may help developers solve an existing problem,
|
||||
please add comments and/or file attachments to the existing issue.</li>
|
||||
<li>If you would like to track the status of the issue, consider adding
|
||||
your email address to the list of "CC" recipients, so that you will receive
|
||||
an email as changes are made to the issue.</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section id="issues_new">
|
||||
<title>Unreported Issues (Reporting New Issues)</title>
|
||||
<p>User reports of bugs and requests for enhancements are extremely
|
||||
important parts of XML Graphics Commons development, and we appreciate the time you take to help
|
||||
us track these issues down.</p>
|
||||
<ul>
|
||||
<!-- <li>To help us ensure that the bug database is as useful as it should be, please
|
||||
use the <link href="gethelp.html">Getting Help</link> checklist to determine whether a bug report should be entered.</li> -->
|
||||
<li>Review the <link href="http://issues.apache.org/bugzilla/page.cgi?id=bug-writing.html">Apache Bug Writing Guidelines</link> before submitting your report.</li>
|
||||
<li>Enter a new issue report at the <link href="http://issues.apache.org/bugzilla/enter_bug.cgi?product=XMLGraphicsCommons">XML Graphics Commons issue database (Bugzilla)</link>.
|
||||
You will be asked to login to an existing Bugzilla account or to create a new
|
||||
one.
|
||||
When entering the bug report, please make your description complete and concise.
|
||||
If appropriate, attach a minimal fo file to your report which demonstrates the
|
||||
problem.</li>
|
||||
<li>After submission, a copy of your bug report will be automatically
|
||||
sent to the <link href="http://xmlgraphics.apache.org/mail.html#xmlgraphics-general">XML Graphics General discussion list</link>.</li>
|
||||
</ul>
|
||||
</section>
|
||||
</body>
|
||||
</document>
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">
|
||||
<document>
|
||||
<header>
|
||||
<title>Download Apache™ XML Graphics Commons</title>
|
||||
</header>
|
||||
<body>
|
||||
<section id="release">
|
||||
<title>Download a Release</title>
|
||||
<p>
|
||||
Source ("-src") and binary ("-bin") distributions can be downloaded from a
|
||||
<a href="http://www.apache.org/dyn/closer.cgi/xmlgraphics/commons">Apache™ XML Graphics Commons Distribution Mirror</a>.
|
||||
</p>
|
||||
</section>
|
||||
<section id="svn">
|
||||
<title>Download from Subversion</title>
|
||||
<p>
|
||||
The latest source code is available directly from the Subversion repository:
|
||||
</p>
|
||||
<table>
|
||||
<tr>
|
||||
<th colspan="2">Trunk</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Repository URL</td>
|
||||
<td>
|
||||
<a href="http://svn.apache.org/repos/asf/xmlgraphics/commons/trunk/">
|
||||
<code>http://svn.apache.org/repos/asf/xmlgraphics/commons/trunk/</code>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Web view</td>
|
||||
<td>
|
||||
<a href="http://svn.apache.org/viewvc/xmlgraphics/commons/trunk/">
|
||||
<code>http://svn.apache.org/viewvc/xmlgraphics/commons/trunk/</code>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<note>
|
||||
Committers need to replace "<code>http</code>" with "<code>https</code>"
|
||||
and then log in so they can gain write access!
|
||||
</note>
|
||||
</section>
|
||||
</body>
|
||||
</document>
|
Binary file not shown.
After Width: | Height: | Size: 3.6 KiB |
|
@ -0,0 +1,360 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">
|
||||
<document>
|
||||
<header>
|
||||
<title>Apache™ XML Graphics Commons: Image Loader Framework</title>
|
||||
</header>
|
||||
<body>
|
||||
<section id="overview">
|
||||
<title>Overview</title>
|
||||
<p>
|
||||
Apache™ XML Graphics Commons contains a unified framework for loading and
|
||||
processing images (bitmap and vector). The package name is
|
||||
<code>org.apache.xmlgraphics.image.loader</code>. Key features:
|
||||
</p>
|
||||
<ul>
|
||||
<li>
|
||||
Unified basic API for all supported image types.
|
||||
</li>
|
||||
<li>
|
||||
Image "Preloading": It allows automatic detection on the image
|
||||
content type and can extract the intrinsic size (in pixels and length
|
||||
units) of the image without loading the whole image into memory in
|
||||
most cases. <a href="ext:xmlgraphics.apache.org/fop">Apache FOP</a>
|
||||
uses this as it only needs the size of the image to do the layout.
|
||||
The image is only fully read at the rendering stage.
|
||||
</li>
|
||||
<li>
|
||||
Image conversion facility: Images can be converted into different
|
||||
representations depending on the needs of the consumer.
|
||||
</li>
|
||||
<li>
|
||||
Supported formats: All bitmap formats for which there are codecs
|
||||
for the ImageIO API (like JPEG, PNG, GIF etc.), EPS, EMF. These
|
||||
formats are bundled. Other formats such as SVG and WMF are available
|
||||
through plug-ins hosted elsewhere.
|
||||
</li>
|
||||
<li>
|
||||
Supported in-memory representations:
|
||||
<ul>
|
||||
<li>RenderedImage/BufferedImage</li>
|
||||
<li>raw/undecoded (JPEG, EPS, CCITT group 3/4)</li>
|
||||
<li>Java2D (Images painted through Graphics2D)</li>
|
||||
<li>XML DOM (for SVG, MathML etc.)</li>
|
||||
<li>Additional representations can be added as necessary.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>
|
||||
Custom image loaders and converters can be dynamically plugged in.
|
||||
Automatic plug-in detection through the application classpath.
|
||||
</li>
|
||||
<li>
|
||||
An image cache speeds up the processing for images that are requested
|
||||
multiple times.
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section id="tutorial">
|
||||
<title>Tutorial</title>
|
||||
<section id="manager-setup">
|
||||
<title>Setting up the manager</title>
|
||||
<p>
|
||||
Before we can start to work with the package we need to set up the
|
||||
<code>ImageManager</code>. It provides convenience methods to load
|
||||
and convert images and holds the image cache.
|
||||
</p>
|
||||
<p>
|
||||
The <code>ImageManager</code> needs an <code>ImageContext</code>.
|
||||
This interface provides the <code>ImageManager</code> with important
|
||||
context and configuration data. Currently this is only the source
|
||||
resolution. The <code>ImageManager</code> and
|
||||
<code>ImageContext</code> are intended to be shared within an
|
||||
application.
|
||||
</p>
|
||||
<source><![CDATA[
|
||||
import org.apache.xmlgraphics.image.loader.ImageContext;
|
||||
import org.apache.xmlgraphics.image.loader.ImageManager;
|
||||
import org.apache.xmlgraphics.image.loader.impl.DefaultImageContext;
|
||||
|
||||
[..]
|
||||
|
||||
ImageManager imageManager = new ImageManager(new DefaultImageContext());
|
||||
]]></source>
|
||||
<note>
|
||||
In this example, <code>DefaultImageContext</code> is used. You may
|
||||
need to write your own implementation of <code>ImageContext</code> for
|
||||
your use case.
|
||||
</note>
|
||||
</section>
|
||||
<section id="preloading">
|
||||
<title>Preloading an image</title>
|
||||
<p>
|
||||
In order to load an image, it needs to be "preloaded" first, i.e. the image content
|
||||
type is detected and the intrinsic size of the image is determined. The result of this
|
||||
process is an <code>ImageInfo</code> instance which contains the URI, MIME type and
|
||||
intrinsic size. In most cases, this is done without loading the whole image (see
|
||||
SPI section below for information on exceptions to this rule).
|
||||
</p>
|
||||
<p>
|
||||
Preloading is normally done through the <code>ImageManager</code>'s
|
||||
<code>getImageInfo()</code> method. For this operation
|
||||
an <code>ImageSessionContext</code> needs to be provided. It is responsible for
|
||||
supplying JAXP <code>Source</code> objects, URI resolution and providing other
|
||||
information needed for the image operations. In simple cases you can simply use
|
||||
<code>DefaultImageSessionContext</code>, but often you will want to write your own
|
||||
implementation of <code>ImageSessionContext</code>. In that case, it's recommended to
|
||||
subclass <code>AbstractImageSessionContext</code> which lets you avoid rewriting a
|
||||
lot of code for providing <code>Source</code> objects.
|
||||
</p>
|
||||
<p>
|
||||
</p>
|
||||
<source><![CDATA[
|
||||
import org.apache.xmlgraphics.image.loader.ImageInfo;
|
||||
import org.apache.xmlgraphics.image.loader.ImageSessionContext;
|
||||
import org.apache.xmlgraphics.image.loader.impl.DefaultImageSessionContext;
|
||||
|
||||
[..]
|
||||
ImageSessionContext sessionContext = new DefaultImageSessionContext(
|
||||
imageManager.getImageContext(), null);
|
||||
|
||||
ImageInfo info = imageManager.getImageInfo(uri, sessionContext);
|
||||
]]></source>
|
||||
</section>
|
||||
<section id="loading">
|
||||
<title>Loading an image</title>
|
||||
<p>
|
||||
Once the image is "preloaded", it can be fully loaded in the form/flavor that is
|
||||
needed by the consuming application. The required flavor is indicated through the
|
||||
<code>ImageFlavor</code> class. If you want the image as a bitmap image in memory,
|
||||
you could request an <code>ImageFlavor.RENDERED_IMAGE</code>. Again, the
|
||||
<code>ImageSessionContext</code> will be needed.
|
||||
</p>
|
||||
<source><![CDATA[
|
||||
import org.apache.xmlgraphics.image.loader.Image;
|
||||
import org.apache.xmlgraphics.image.loader.ImageFlavor;
|
||||
|
||||
[..]
|
||||
Image img = this.imageManager.getImage(
|
||||
info, ImageFlavor.RENDERED_IMAGE, sessionContext);
|
||||
|
||||
ImageRendered imageRend = (ImageRendered)img;
|
||||
RenderedImage ri = imageRend.getRenderedImage();
|
||||
//...and do anything with the RenderedImage
|
||||
]]></source>
|
||||
<p>
|
||||
In this example above, we simply acquire the image as a RenderedImage instance.
|
||||
If the original image was a vector graphic image (SVG, WMF etc.), it's automatically
|
||||
converted to a bitmap image. Note: The resolution of the created image is controlled
|
||||
by the target resolution returned by the <code>ImageSessionContext</code>.
|
||||
</p>
|
||||
<p>
|
||||
Of course, the framework can only provide images in the formats, it has image loaders
|
||||
or image converters for. An example: It is possible to load EPS images, but they
|
||||
can only be provided in raw form. In order to provide it as a bitmap image, a PostScript
|
||||
interpreter would be needed to interpret the PostScript code. This interpreter would
|
||||
be integrated using an <code>ImageConverter</code> implementation (see SPI section below).
|
||||
If the requested form of the image cannot be provided you will get an
|
||||
<code>ImageException</code> on which you'll have to react as needed.
|
||||
</p>
|
||||
<p>
|
||||
In <a href="ext:xmlgraphics.apache.org/fop">Apache FOP</a>, each renderer supports
|
||||
a different set of image flavors that can be embedded in the target format. For example:
|
||||
The PDF renderer can deal with Java2D image, bitmaps, XML, native JPEG and CCITT images.
|
||||
The PCL renderer, however, can only consume bitmap images. So, if you can accept
|
||||
more than one flavor, the package allows you to specify all of them in an ordered list
|
||||
(the first in the list is the preferred format). The package will then try to return
|
||||
the best representation possible. Here's a code example:
|
||||
</p>
|
||||
<source><![CDATA[
|
||||
import org.apache.xmlgraphics.image.loader.Image;
|
||||
import org.apache.xmlgraphics.image.loader.ImageFlavor;
|
||||
|
||||
[..]
|
||||
final ImageFlavor[] flavors = new ImageFlavor[]
|
||||
{ImageFlavor.GRAPHICS2D,
|
||||
ImageFlavor.BUFFERED_IMAGE,
|
||||
ImageFlavor.RENDERED_IMAGE};
|
||||
|
||||
Image img = manager.getImage(
|
||||
info, flavors, sessionContext);
|
||||
|
||||
if (img instanceof ImageGraphics2D) {
|
||||
//handle Java2D/Graphics2D image
|
||||
} else if (img instanceof ImageRendered) {
|
||||
//handle BufferedImage and RenderedImage
|
||||
//(BufferedImage is a subclass of RenderedImage)
|
||||
} else {
|
||||
throw new IllegalStateException("Unexpected flavor");
|
||||
}
|
||||
]]></source>
|
||||
<note>
|
||||
While each <code>BufferedImage</code> is also a <code>RenderedImage</code>,
|
||||
it can be more efficient to also specify <code>ImageFlavor.BUFFERED_IMAGE</code> in
|
||||
the flavor array.
|
||||
</note>
|
||||
</section>
|
||||
</section>
|
||||
<section id="tipsntricks">
|
||||
<title>Tips & Tricks</title>
|
||||
<p>
|
||||
If you are loading bitmap images and you get an error like
|
||||
<code>"Cannot load image (no suitable loader/converter combination available) for
|
||||
myimage.tif (image/tiff)</code>,
|
||||
you maybe be missing the necessary ImageIO codec to decode the image. A number of
|
||||
well-written codecs can be found in
|
||||
<a href="https://jai-imageio.dev.java.net/">JAI Image I/O Tools Project</a>. Just download
|
||||
the distribution and add the JAR to the classpath. ImageIO will automatically pick up
|
||||
the new codecs and they will subsequently be available to the image framework.
|
||||
</p>
|
||||
</section>
|
||||
<section id="spi">
|
||||
<title>Service Provider Interface (SPI, Plug-ins)</title>
|
||||
<p>
|
||||
The whole image framework is designed to be highly extensible. There are various
|
||||
extension points where new functionality can be added. The three main SPI interfaces are:
|
||||
</p>
|
||||
<ul>
|
||||
<li><code>ImagePreloader</code>: detects the content type and preloads an image</li>
|
||||
<li><code>ImageLoader</code> and <code>ImageLoaderFactory</code>: loads images</li>
|
||||
<li><code>ImageConverter</code>: converts images from one representation into another</li>
|
||||
</ul>
|
||||
<p>
|
||||
If you plan to write an implementation of one of the above interfaces, please also take
|
||||
a look at the existing implementations for reference.
|
||||
</p>
|
||||
<p>
|
||||
Throughout the SPI, you'll find a <code>Map</code> parameter (hints) in the most important
|
||||
methods. That's a way to supply additional information to the implementation by the
|
||||
caller. For example, the source and target resolutions from the image (session) context
|
||||
is stored in the hints. The implementation should not rely on the presence of specialized
|
||||
information and should always have sensible defaults to rely on in this case.
|
||||
</p>
|
||||
<section id="ImagePreloader">
|
||||
<title>ImagePreloader</title>
|
||||
<p>
|
||||
The first task is identifying whether the implementation supports the given image.
|
||||
If the image is loaded using an ImageInputStream it is important to always reset the
|
||||
stream position to the beginning of the file at the end of the
|
||||
<code>preloadImage()</code> method, because all registered preloaders are check in turn
|
||||
until one implementation signals that it supports the format. In that case, it has to
|
||||
extract only the minimal information from the image necessary to identify the image's
|
||||
intrinsic size. For most formats, this is doable without loading the whole image into
|
||||
memory.
|
||||
</p>
|
||||
<p>
|
||||
However, for some formats (like MathML or WMF), loading the whole image at preloading
|
||||
time is hard to avoid since the image's size can only be determined that way. In such
|
||||
a case, the <code>ImagePreloader</code> implementations shall pass the loaded
|
||||
document to the respective <code>ImageLoader</code> through the custom objects that
|
||||
can be attached to the <code>ImageInfo</code> object. If the preloader loads the whole
|
||||
document, it shall close the given <code>Source</code> object (calling
|
||||
<code>ImageUtil.closeQuietly(Source)</code>).
|
||||
</p>
|
||||
<p>
|
||||
The priority the implementation reports is used to sort all registered implementations.
|
||||
This is to fine-tune the inner workings and to optimize performance since some formats
|
||||
are usually used more frequently than others.
|
||||
</p>
|
||||
<note>
|
||||
Normally, if you implement an <code>ImagePreloader</code> you will also need to implement
|
||||
the respective <code>ImageLoader/ImageLoaderFactory</code>, or vice versa.
|
||||
</note>
|
||||
</section>
|
||||
<section id="ImageLoader">
|
||||
<title>ImageLoader and ImageLoaderFactory</title>
|
||||
<p>
|
||||
The factory interface has been created to allow checking if some library that an
|
||||
implementation depends on is really in the classpath so it can report back that the
|
||||
<code>ImageLoader</code> is not funtional. The factory also reports what kind of
|
||||
image formats it supports and which image flavors it can return. There can be a
|
||||
complex relationship between the two. It is recommmended, however, to write smaller
|
||||
implementations rather than big, almighty ones.
|
||||
</p>
|
||||
<p>
|
||||
The usage penalty is used when constructing image conversion pipelines. There can be
|
||||
multiple ways to provide an image in one of the supported flavors and this value helps
|
||||
to make the best decision.
|
||||
</p>
|
||||
<p>
|
||||
While the factory basically just provides information and creates new
|
||||
<code>ImageLoader</code> instances, the image loaders are doing the actual leg work
|
||||
of decoding the images. The image flavor returned by the loader must match the
|
||||
flavor that is returned by <code>getTargetFlavor()</code>.
|
||||
</p>
|
||||
</section>
|
||||
<section id="ImageConverter">
|
||||
<title>ImageConverter</title>
|
||||
<p>
|
||||
The image converter is responsible to transform one image representation into another.
|
||||
Bundled implementations support these conversions: Java2D to bitmap, bitmap to Java2D
|
||||
and RenderedImage to "raw" PNG. Ideas for additional image converters could be:
|
||||
PDF to Java2D, EPS to Java2D or MathML to SVG or Java2D.
|
||||
</p>
|
||||
<p>
|
||||
Each ImageConverter comes with a usage penalty which is used when constructing
|
||||
conversion pipelines so the pipeline with the least penalty value can be chosen. This
|
||||
is necessary as the consuming application my support multiple image flavors and there
|
||||
can be multiple ways to convert an image in one of the requested image flavors.
|
||||
Internally, <a href="http://en.wikipedia.org/wiki/Dijkstra%27s_algorithm">Dijkstra's
|
||||
shortest path algorithm</a> is used to find the best path using the penalties as "way
|
||||
lengths".
|
||||
</p>
|
||||
</section>
|
||||
</section>
|
||||
<section id="customization">
|
||||
<title>Customization</title>
|
||||
<section id="source-reuse">
|
||||
<title>Disabling Source Re-use</title>
|
||||
<p>
|
||||
By default, the Source object being used during the pre-loading stage is re-used when
|
||||
the image is fully loaded later (assuming an ImageSessionContext is used that descends
|
||||
from AbstractImageSessionContext). That means that a stream is only opened once and
|
||||
the image loading framework tries to re-wind the stream when it has to re-read portions
|
||||
of the stream when loading the complete image.
|
||||
</p>
|
||||
<p>
|
||||
In some situations, this behavior may be undesired. Therefore, it can be disabled
|
||||
through a system property
|
||||
(<code>org.apache.xmlgraphics.image.loader.impl.AbstractImageSessionContext.no-source-reuse</code>).
|
||||
Set it to "true" and that feature will be disabled.
|
||||
</p>
|
||||
</section>
|
||||
<section id="plugin-penalties">
|
||||
<title>Adjusting plug-in penalties</title>
|
||||
<p>
|
||||
Every image loader plug-in has a hard-coded usage penalty that influences which solution
|
||||
is chosen if there are multiple possibilities to load an image. Sometimes, though, these
|
||||
penalties need to be tweaked. The <code>ImageImplRegistry</code> (reachable through
|
||||
<code>ImageManager.getRegistry()</code>) supports storing additional penalty values.
|
||||
An example:
|
||||
</p>
|
||||
<source><![CDATA[ImageImplRegistry registry = imageManager.getRegistry();
|
||||
registry.setAdditionalPenalty(
|
||||
"org.apache.xmlgraphics.image.loader.impl.ImageLoaderRawCCITTFax",
|
||||
Penalty.toPenalty(10000));]]></source>
|
||||
<p>
|
||||
This increases the penalty for the raw CCITT loader significantly so it will only be
|
||||
used if no other solutions exist. You can also set <code>Penalty.INFINITE_PENALTY</code>
|
||||
to disable the plug-in altogether. Negative penalties are possible to promote a plug-in
|
||||
but a negative penalty sum will be treated as zero penalty in most cases.
|
||||
</p>
|
||||
</section>
|
||||
</section>
|
||||
</body>
|
||||
</document>
|
|
@ -0,0 +1,112 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">
|
||||
<document>
|
||||
<header>
|
||||
<title>Apache™ XML Graphics Commons</title>
|
||||
</header>
|
||||
<body>
|
||||
<section>
|
||||
<title>Overview</title>
|
||||
<p>
|
||||
Apache™ XML Graphics Commons is a library that consists of several reusable components
|
||||
used by <a href="ext:batik">Apache Batik</a> and <a href="ext:fop">Apache FOP</a>.
|
||||
Many of these components can easily be used separately outside the domains of SVG
|
||||
and XSL-FO. You will find components such as a PDF library, an RTF library, Graphics2D
|
||||
implementations that let you generate PDF & PostScript files, and much more.
|
||||
</p>
|
||||
<p>The Apache™ XML Graphics Commons project is part of the <a href="http://www.apache.org">Apache™</a>
|
||||
Software Foundation, which is a wider community of users and developers of open
|
||||
source projects.
|
||||
</p>
|
||||
<p>
|
||||
In the Wiki, we have a
|
||||
<a href="http://wiki.apache.org/xmlgraphics/XmlGraphicsCommonComponents">Roadmap for Apache XML Graphics Commons</a>.
|
||||
This roadmap is the place to describe new ideas for the project.
|
||||
</p>
|
||||
</section>
|
||||
<section id="features">
|
||||
<title>Features</title>
|
||||
<p>
|
||||
Components which have been ported from <a href="ext:batik">Apache Batik</a> and
|
||||
<a href="ext:fop">Apache FOP</a> include:
|
||||
</p>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Description</th>
|
||||
<th>Package</th>
|
||||
<th>Provenance</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Image codecs for PNG and TIFF</td>
|
||||
<td>org.apache.xmlgraphics.image.codec</td>
|
||||
<td>Batik</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Bitmap image writer abstraction with implementation for the above codecs and for the Image I/O API.</td>
|
||||
<td>org.apache.xmlgraphics.image.writer</td>
|
||||
<td>Batik</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Java2D helper classes</td>
|
||||
<td>org.apache.xmlgraphics.image.rendered and org.apache.xmlgraphics.java2d</td>
|
||||
<td>Batik</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Image loader framework (format detection, conversion and unified handling for bitmap and vector images).</td>
|
||||
<td>org.apache.xmlgraphics.image.loader</td>
|
||||
<td>new</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Graphics2D implementation that produces PostScript and EPS</td>
|
||||
<td>org.apache.xmlgraphics.java2d.ps</td>
|
||||
<td>FOP</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Helper classes for PostScript code production</td>
|
||||
<td>org.apache.xmlgraphics.ps</td>
|
||||
<td>FOP</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Parser/Processor for DSC-compliant PostScript files (DSC =
|
||||
<a href="http://partners.adobe.com/public/developer/en/ps/5001.DSC_Spec.pdf">Document Structuring Conventions</a>)
|
||||
</td>
|
||||
<td>org.apache.xmlgraphics.ps.dsc</td>
|
||||
<td>new</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td><a href="http://www.adobe.com/products/xmp/index.html">XMP metadata</a> framework</td>
|
||||
<td>org.apache.xmlgraphics.xmp</td>
|
||||
<td>new</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>Various I/O classes, encoders and decoders for various formats</td>
|
||||
<td>org.apache.xmlgraphics.util.io</td>
|
||||
<td>Batik/FOP</td>
|
||||
</tr>
|
||||
</table>
|
||||
</section>
|
||||
<section>
|
||||
<title>News</title>
|
||||
<p>
|
||||
RSS Feed: <a href="subproject-news-feed.rss"><img src="feed-icon-14x14.png" alt="Subproject News Feed"/></a>
|
||||
</p>
|
||||
<xi:include href="cocoon://subproject-news-document.xml#xpointer(/document/body/*)" xmlns:xi="http://www.w3.org/2001/XInclude"/>
|
||||
</section>
|
||||
</body>
|
||||
</document>
|
|
@ -0,0 +1,66 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<news>
|
||||
<item date="2012-10-20" title="Version 1.5 Released">
|
||||
<p>
|
||||
This release consists primarily of bug fixes, improved code practices, and improved coverage of
|
||||
CCITTFax Group 3 image formats. For details, please see
|
||||
<a href="changes.html#version_1.5">Changes</a>.
|
||||
</p>
|
||||
</item>
|
||||
<item date="2010-07-07" title="Version 1.4 Released">
|
||||
<p>
|
||||
This release adds the option to generate smaller PostScript
|
||||
files, support for the AdobeStandardCyrillic encoding,
|
||||
RefinedImageFlavor, TexturePaint support for PSGraphics2D
|
||||
(PostScript tiling patterns), improvements to the XMP framework,
|
||||
optimization for PostScript state handling in
|
||||
(E)PSDocumentGraphics2D, and more. In addition it contains a
|
||||
number of bug fixes. For details, please see the <a
|
||||
href="changes.html#version_1.4">Changes</a> page.
|
||||
</p>
|
||||
<p>
|
||||
We are pleased to note that many new features were contributed
|
||||
from outside the team of committers. Such broader interest
|
||||
ensures the healthy further development of the project.
|
||||
</p>
|
||||
</item>
|
||||
<item date="2008-06-11" title="Version 1.3.1 Released">
|
||||
<p>
|
||||
This release is mostly a bugfix release for the image loading framework
|
||||
that has been introduced in version 1.3. For details, please see the
|
||||
<a href="changes.html#version_1.3.1">Changes</a> page.
|
||||
</p>
|
||||
</item>
|
||||
<item date="2008-03-07" title="Version 1.3 Released">
|
||||
<p>
|
||||
The most important addition in this release is an image loading framework
|
||||
which supports all sorts of different image formats (bitmap and vector) and
|
||||
is highly extensible.
|
||||
</p>
|
||||
<p>
|
||||
Besides that there were a larger number of smaller additions and bugfixes.
|
||||
</p>
|
||||
<p>
|
||||
Support for Java 1.3 has been dropped. Java 1.4 or later is required now.
|
||||
</p>
|
||||
</item>
|
||||
<item date="2007-07-21" title="Version 1.2 Released">
|
||||
<p>
|
||||
This release mainly adds support for CMYK and GRAY color spaces for
|
||||
PSGenerator. For details about other fixes, please see the
|
||||
<a href="changes.html#version_1.2">Changes</a> page.
|
||||
</p>
|
||||
</item>
|
||||
<item date="2006-12-22" title="Version 1.1 Released">
|
||||
<p>
|
||||
This release adds an XMP metadata framework and brings improvements for the
|
||||
ImageWriter package plus some minor fixes mainly in the PostScript area.
|
||||
</p>
|
||||
</item>
|
||||
<item date="2006-04-17" title="Version 1.0 Released">
|
||||
<p>
|
||||
This is the first release of Apache XML Graphics Commons. There are currently no
|
||||
known issues with the code.
|
||||
</p>
|
||||
</item>
|
||||
</news>
|
|
@ -0,0 +1,142 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">
|
||||
<document>
|
||||
<header>
|
||||
<title>Tools for Adobe PostScript</title>
|
||||
</header>
|
||||
<body>
|
||||
<section id="overview">
|
||||
<title>Overview</title>
|
||||
<p>
|
||||
Apache™ XML Graphics Commons contains various tools for writing and processing Adobe
|
||||
PostScript files. This includes:
|
||||
</p>
|
||||
<ul>
|
||||
<li>A PostScript generator class which helps writing PostScript files from scratch.</li>
|
||||
<li>Two Graphics2D implementations, one for plain PostScript and one for writing
|
||||
Encapsulated PostScript (EPS).</li>
|
||||
<li>A DSC-parser/processor: Parse, post-process and change DSC-compliant PostScript files.</li>
|
||||
</ul>
|
||||
<note>
|
||||
We don't currently include a PostScript interpreter though we would love to have one. A
|
||||
Java-based PostScript interpreter to keep an eye on is the one from the
|
||||
<a href="http://foray.sourceforge.net">FOray project</a>.
|
||||
</note>
|
||||
</section>
|
||||
<section id="generator">
|
||||
<title>The PostScript generator</title>
|
||||
<p>
|
||||
The "PSGenerator" class can help writing PostScript files. It deals with things like
|
||||
escaping, saving/tracking/restoring graphics state, writing DSC comments and tracking of
|
||||
DSC resources.
|
||||
</p>
|
||||
<p>
|
||||
You will rarely interact with the PS generator itself, as it is probably more interesting
|
||||
to generate a PostScript file using Java2D which is described in the following section.
|
||||
</p>
|
||||
</section>
|
||||
<section id="java2d">
|
||||
<title>Java2D: Graphics2D implementation for generating PostScript and EPS</title>
|
||||
<p>
|
||||
We provide two classes (PSDocumentGraphics2D and EPSDocumentGraphics2D) which you can use
|
||||
to generated complete PostScript files using normal Java2D means. The difference between
|
||||
the two classes is that the EPS variant creates a fully compliant Encapsulated
|
||||
PostScript file while the PS variant simply creates a normal DSC-compliant level 2
|
||||
PostScript file. It depends on your requirement which variant you choose. The PS variant
|
||||
is mostly for printing purposes while the EPS variant is better suited for inclusion in
|
||||
other documents.
|
||||
</p>
|
||||
<section id="creating-eps">
|
||||
<title>Creating an EPS file</title>
|
||||
<p>
|
||||
Creating an EPS file using the Graphics2D implementation is easy. Instantiate
|
||||
EPSDocumentGraphics2D, set a GraphicContext and set up the output document. Here's an
|
||||
example:
|
||||
</p>
|
||||
<source><![CDATA[
|
||||
import org.apache.xmlgraphics.java2d.ps.EPSDocumentGraphics2D;
|
||||
|
||||
[..]
|
||||
|
||||
EPSDocumentGraphics2D g2d = new EPSDocumentGraphics2D(false);
|
||||
g2d.setGraphicContext(new org.apache.xmlgraphics.java2d.GraphicContext());
|
||||
|
||||
//Set up the document size
|
||||
g2d.setupDocument(out, 400, 200); //400pt x 200pt
|
||||
//out is the OutputStream to write the EPS to
|
||||
|
||||
g2d.drawRect(10, 10, 50, 50); //paint a rectangle using normal Java2D calls
|
||||
|
||||
g2d.finish(); //Wrap up and finalize the EPS file
|
||||
]]></source>
|
||||
<p>
|
||||
A complete example for generating an EPS files can be found in the
|
||||
<a href="http://svn.apache.org/viewvc/xmlgraphics/commons/trunk/examples/java/java2d/ps/">"examples" directory</a>
|
||||
in the distribution.
|
||||
</p>
|
||||
</section>
|
||||
</section>
|
||||
<section id="dsc">
|
||||
<title>DSC parser/processor</title>
|
||||
<p>
|
||||
Many PostScript files use special comments to structure a document. This allows manipulation
|
||||
of PostScript files without interpreting them. These special comments are defined in the
|
||||
<a href="http://partners.adobe.com/public/developer/en/ps/5001.DSC_Spec.pdf">Document Structuring Conventions</a>.
|
||||
The code in Commons is designed to work with DSC 3.0. For details on how DSC is used,
|
||||
please take a look at the DSC specification.
|
||||
</p>
|
||||
<p>
|
||||
The DSC support in Commons was primarily developed to implement resource optimization
|
||||
features in <a href="ext:fop">Apache FOP</a>'s PostScript output support. Resources like
|
||||
images which are used repeatedly in a document should not be written to the PostScript
|
||||
file each time it is used. Instead it is written once at the beginning of the file as a
|
||||
PostScript form. The form is then called whenever the image needs painting.
|
||||
</p>
|
||||
<p>
|
||||
But the DSC parser could potentially be used for other purposes. The most obvious is
|
||||
extracting a subset of pages from a DSC-compliant file. Assume you want to print only
|
||||
page 45 to 57 of a particular document. There's an example that demonstrates exactly this.
|
||||
Check out the "examples" directory in the distribution. Other potential use cases for the
|
||||
DSC parser are:
|
||||
</p>
|
||||
<ul>
|
||||
<li>Patching PostScript files, for example, adding OMR marks for automatic packaging</li>
|
||||
<li><a href="http://en.wikipedia.org/wiki/Imposition">Imposition</a> (2-up, n-up, rotation, etc.)</li>
|
||||
<li>EPS graphic extraction</li>
|
||||
<li>Inspecting the page count</li>
|
||||
<li>etc. etc.</li>
|
||||
</ul>
|
||||
<p>
|
||||
The DSC parser (DSCParser) was designed as a pull parser, i.e. you fetch new events from
|
||||
the parser inspecting them and acting on them as they are found. If you prefer to work
|
||||
with a push parser, you can pass the DSCParser a DSCHandler implementation and the parser
|
||||
will send you all the events.
|
||||
</p>
|
||||
<p>
|
||||
The best example to understand how to use the DSC parser is the PageExtractor class
|
||||
that implements the page extraction functionality mentioned above.
|
||||
</p>
|
||||
<note>
|
||||
The DSC parser is not considered feature-complete. The basic infrastructure is there but,
|
||||
for example, not all DSC comments are available as concrete Java classes. If you need
|
||||
to extend the DSC parser for your own use cases, please send us your patches.
|
||||
</note>
|
||||
</section>
|
||||
</body>
|
||||
</document>
|
|
@ -0,0 +1,64 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<!--
|
||||
Forrest site.xml
|
||||
|
||||
This file contains an outline of the site's information content. It is used to:
|
||||
- Generate the website menus (though these can be overridden - see docs)
|
||||
- Provide semantic, location-independent aliases for internal 'site:' URIs, eg
|
||||
<link href="site:changes"> links to changes.html (or ../changes.html if in
|
||||
subdir).
|
||||
- Provide aliases for external URLs in the external-refs section. Eg, <link
|
||||
href="ext:cocoon"> links to http://cocoon.apache.org/
|
||||
|
||||
See http://forrest.apache.org/docs/linking.html for more info
|
||||
-->
|
||||
|
||||
<site label="XMLGraphicsCommons" href="" xmlns="http://apache.org/forrest/linkmap/1.0" tab="">
|
||||
|
||||
<about label="Apache™ XML Graphics Commons">
|
||||
<index label="Overview" href="index.html" description="Overview"/>
|
||||
<download label="Download" href="download.html" description="Download"/>
|
||||
<asf-license label="Apache License" href="http://www.apache.org/licenses"/>"
|
||||
<asf-sponsorship label="ASF Sponsorship Program" href="http://www.apache.org/foundation/sponsorship.html"/>"
|
||||
<asf-thanks label="ASF Thanks" href="http://www.apache.org/foundation/thanks.html"/>"
|
||||
<asf-security label="Security" href="http://www.apache.org/security/"/>
|
||||
<documentation label="Documentation">
|
||||
<postscript label="Tools for Adobe PostScript" href="postscript.html" description="Tools for Adobe PostScript"/>
|
||||
<image-loader label="Image Loader Framework" href="image-loader.html" description="Image Loader Framework"/>
|
||||
</documentation>
|
||||
<information label="Information">
|
||||
<mail label="Mailing Lists" href="http://xmlgraphics.apache.org/mail.html" description="Information on Mailing Lists"/>
|
||||
<repo label="Code Repositories" href="http://xmlgraphics.apache.org/repo.html" description="Information on Code Repositories"/>
|
||||
<changes label="Changes" href="changes.html"/>
|
||||
<bugs label="Bugs" href="bugs.html"/>
|
||||
</information>
|
||||
</about>
|
||||
|
||||
<external-refs>
|
||||
<xmlgraphics.apache.org href="http://xmlgraphics.apache.org/">
|
||||
<fop href="fop/"/>
|
||||
<batik href="batik/"/>
|
||||
<commons href="commons/"/>
|
||||
</xmlgraphics.apache.org>
|
||||
<xml.apache.org href="http://xml.apache.org/"/>
|
||||
<www.apache.org href="http://www.apache.org/"/>
|
||||
</external-refs>
|
||||
|
||||
</site>
|
|
@ -0,0 +1,42 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<!DOCTYPE tabs PUBLIC "-//APACHE//DTD Cocoon Documentation Tab V1.1//EN" "tab-cocoon-v11.dtd">
|
||||
|
||||
<tabs software="XMLGraphicsCommons"
|
||||
title="XMLGraphicsCommons"
|
||||
copyright="@year@ The Apache Software Foundation"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
|
||||
<!-- The rules for tabs are:
|
||||
@dir will always have '/@indexfile' added.
|
||||
@indexfile gets appended to @dir if the tab is selected. Defaults to 'index.html'
|
||||
@href is not modified unless it is root-relative and obviously specifies a
|
||||
directory (ends in '/'), in which case /index.html will be added
|
||||
If @id's are present, site.xml entries with a matching @tab will be in that tab.
|
||||
|
||||
Tabs can be embedded to a depth of two. The second level of tabs will only
|
||||
be displayed when their parent tab is selected.
|
||||
-->
|
||||
|
||||
<tab id="" label="Home" dir="" indexfile="index.html"/>
|
||||
<!-- Add new tabs here, eg:
|
||||
<tab label="How-Tos" dir="community/howto/"/>
|
||||
<tab label="XML Site" dir="xml-site/"/>
|
||||
-->
|
||||
|
||||
</tabs>
|
Binary file not shown.
After Width: | Height: | Size: 6.8 KiB |
Binary file not shown.
After Width: | Height: | Size: 5.7 KiB |
Binary file not shown.
After Width: | Height: | Size: 17 KiB |
|
@ -0,0 +1,580 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<svg xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
id="body" width="220" height="51" viewBox="0 0 220 51" font-family="Tahoma"
|
||||
shape-rendering="geometricPrecision" text-rendering="geometricPrecision">
|
||||
|
||||
<defs>
|
||||
<!-- The glowing effect for the Apache feather and the black text -->
|
||||
<filter id="medGlow" x="-20%" y="-20%" width="140%" height="140%">
|
||||
<feGaussianBlur in="SourceGraphic" stdDeviation="2.0" result="glowSrc"/>
|
||||
<feComponentTransfer in="glowSrc" result="glowingGraphic">
|
||||
<feFuncA type="linear" slope="3"/>
|
||||
</feComponentTransfer>
|
||||
</filter>
|
||||
|
||||
<!-- Gradient for the XML text in the corner -->
|
||||
<linearGradient id="silverGrad">
|
||||
<stop stop-color="#aaa" offset="0"/>
|
||||
<stop stop-color="#aaa" stop-opacity="0" offset="1"/>
|
||||
</linearGradient>
|
||||
|
||||
<!-- Gradients for the feather -->
|
||||
<linearGradient id="AIgd1" gradientUnits="userSpaceOnUse"
|
||||
x1="-3510.3682" y1="4186.3037" x2="-3520.3882" y2="4153.2837"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 -2022.5977 2980.6621)">
|
||||
<stop offset="0" stop-color="#4F0C81"/>
|
||||
<stop offset="0.0701" stop-color="#690C73"/>
|
||||
<stop offset="0.209" stop-color="#9A0A5B"/>
|
||||
<stop offset="0.3368" stop-color="#C20748"/>
|
||||
<stop offset="0.4512" stop-color="#E0053A"/>
|
||||
<stop offset="0.5481" stop-color="#F20032"/>
|
||||
<stop offset="0.6158" stop-color="#FA002F"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd2" gradientUnits="userSpaceOnUse"
|
||||
x1="-3788.0986" y1="-3507.6162" x2="-3789.1638" y2="-3479.4058"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">
|
||||
<stop offset="0" stop-color="#4F0C81"/>
|
||||
<stop offset="0.0701" stop-color="#690C73"/>
|
||||
<stop offset="0.209" stop-color="#9A0A5B"/>
|
||||
<stop offset="0.3368" stop-color="#C20748"/>
|
||||
<stop offset="0.4512" stop-color="#E0053A"/>
|
||||
<stop offset="0.5481" stop-color="#F20032"/>
|
||||
<stop offset="0.6158" stop-color="#FA002F"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd3" gradientUnits="userSpaceOnUse"
|
||||
x1="-3817.4316" y1="-3498.7192" x2="-3818.3076" y2="-3475.5176"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">
|
||||
<stop offset="0" stop-color="#4F0C81"/>
|
||||
<stop offset="0.0701" stop-color="#690C73"/>
|
||||
<stop offset="0.209" stop-color="#9A0A5B"/>
|
||||
<stop offset="0.3368" stop-color="#C20748"/>
|
||||
<stop offset="0.4512" stop-color="#E0053A"/>
|
||||
<stop offset="0.5481" stop-color="#F20032"/>
|
||||
<stop offset="0.6158" stop-color="#FA002F"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd4" gradientUnits="userSpaceOnUse"
|
||||
x1="-3806.9058" y1="-3505.3105" x2="-3807.8401" y2="-3480.5605"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">
|
||||
<stop offset="0" stop-color="#4F0C81"/>
|
||||
<stop offset="0.0701" stop-color="#690C73"/>
|
||||
<stop offset="0.209" stop-color="#9A0A5B"/>
|
||||
<stop offset="0.3368" stop-color="#C20748"/>
|
||||
<stop offset="0.4512" stop-color="#E0053A"/>
|
||||
<stop offset="0.5481" stop-color="#F20032"/>
|
||||
<stop offset="0.6158" stop-color="#FA002F"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd6" gradientUnits="userSpaceOnUse"
|
||||
x1="-3825.4375" y1="-3503.8936" x2="-3826.3342" y2="-3480.1453"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">
|
||||
<stop offset="0" stop-color="#4F0C81"/>
|
||||
<stop offset="0.0701" stop-color="#690C73"/>
|
||||
<stop offset="0.209" stop-color="#9A0A5B"/>
|
||||
<stop offset="0.3368" stop-color="#C20748"/>
|
||||
<stop offset="0.4512" stop-color="#E0053A"/>
|
||||
<stop offset="0.5481" stop-color="#F20032"/>
|
||||
<stop offset="0.6158" stop-color="#FA002F"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd8" gradientUnits="userSpaceOnUse"
|
||||
x1="-3841.6636" y1="-3502.4297" x2="-3842.4236" y2="-3482.3"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">
|
||||
<stop offset="0" stop-color="#4F0C81"/>
|
||||
<stop offset="0.0701" stop-color="#690C73"/>
|
||||
<stop offset="0.209" stop-color="#9A0A5B"/>
|
||||
<stop offset="0.3368" stop-color="#C20748"/>
|
||||
<stop offset="0.4512" stop-color="#E0053A"/>
|
||||
<stop offset="0.5481" stop-color="#F20032"/>
|
||||
<stop offset="0.6158" stop-color="#FA002F"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd10" gradientUnits="userSpaceOnUse"
|
||||
x1="-3872.1543" y1="-3503.9727" x2="-3872.3848" y2="-3493.1567"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">
|
||||
<stop offset="0" stop-color="#F7EE5F"/>
|
||||
<stop offset="0.186" stop-color="#F5D65D"/>
|
||||
<stop offset="0.3825" stop-color="#F4C35B"/>
|
||||
<stop offset="0.5198" stop-color="#F4BC5A"/>
|
||||
<stop offset="0.7809" stop-color="#F5DA5D"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd11" gradientUnits="userSpaceOnUse"
|
||||
x1="-3878.0732" y1="-3508.4204" x2="-3874.5449" y2="-3484.9487"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">
|
||||
<stop offset="0" stop-color="#F7EE5F"/>
|
||||
<stop offset="0.186" stop-color="#F5D65D"/>
|
||||
<stop offset="0.3825" stop-color="#F4C35B"/>
|
||||
<stop offset="0.5198" stop-color="#F4BC5A"/>
|
||||
<stop offset="0.7809" stop-color="#F5DA5D"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd16" gradientUnits="userSpaceOnUse"
|
||||
x1="-3892.5645" y1="-3497.0415" x2="-3892.7126" y2="-3490.0823"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">
|
||||
<stop offset="0" stop-color="#F7EE5F"/>
|
||||
<stop offset="0.186" stop-color="#F5D65D"/>
|
||||
<stop offset="0.3825" stop-color="#F4C35B"/>
|
||||
<stop offset="0.5198" stop-color="#F4BC5A"/>
|
||||
<stop offset="0.7809" stop-color="#F5DA5D"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd18" gradientUnits="userSpaceOnUse"
|
||||
x1="-3716.793" y1="-3522.1724" x2="-3726.813" y2="-3555.1924"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">
|
||||
<stop offset="0" stop-color="#4F0C81"/>
|
||||
<stop offset="0.0701" stop-color="#690C73"/>
|
||||
<stop offset="0.209" stop-color="#9A0A5B"/>
|
||||
<stop offset="0.3368" stop-color="#C20748"/>
|
||||
<stop offset="0.4512" stop-color="#E0053A"/>
|
||||
<stop offset="0.5481" stop-color="#F20032"/>
|
||||
<stop offset="0.6158" stop-color="#FA002F"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd19" gradientUnits="userSpaceOnUse"
|
||||
x1="-3818.3081" y1="-3506.1616" x2="-3836.2568" y2="-3532.4282"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">
|
||||
<stop offset="0" stop-color="#4F0C81"/>
|
||||
<stop offset="0.0701" stop-color="#690C73"/>
|
||||
<stop offset="0.209" stop-color="#9A0A5B"/>
|
||||
<stop offset="0.3368" stop-color="#C20748"/>
|
||||
<stop offset="0.4512" stop-color="#E0053A"/>
|
||||
<stop offset="0.5481" stop-color="#F20032"/>
|
||||
<stop offset="0.6158" stop-color="#FA002F"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd31" gradientUnits="userSpaceOnUse"
|
||||
x1="-3644.5117" y1="-3531.5527" x2="-3636.6318" y2="-3508.3506"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">
|
||||
<stop offset="0" stop-color="#681083"/>
|
||||
<stop offset="0.0006" stop-color="#681083"/>
|
||||
<stop offset="0.072" stop-color="#8D0F6D"/>
|
||||
<stop offset="0.1459" stop-color="#AD0D5A"/>
|
||||
<stop offset="0.2229" stop-color="#C80A4A"/>
|
||||
<stop offset="0.3041" stop-color="#DE083E"/>
|
||||
<stop offset="0.3913" stop-color="#ED0335"/>
|
||||
<stop offset="0.4884" stop-color="#F60030"/>
|
||||
<stop offset="0.6158" stop-color="#FA002F"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd35" gradientUnits="userSpaceOnUse"
|
||||
x1="-3738.23" y1="-3453.355" x2="-3733.0664" y2="-3424.071"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2110.5286 1859.3658)">
|
||||
<stop offset="0" stop-color="#681083"/>
|
||||
<stop offset="0.0752" stop-color="#6F1182"/>
|
||||
<stop offset="0.1935" stop-color="#831380"/>
|
||||
<stop offset="0.3399" stop-color="#A3157B"/>
|
||||
<stop offset="0.5088" stop-color="#D11975"/>
|
||||
<stop offset="0.6158" stop-color="#F21B71"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd36" gradientUnits="userSpaceOnUse"
|
||||
x1="-3716.3066" y1="-3509.6641" x2="-3713.6802" y2="-3491.7153"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">
|
||||
<stop offset="0" stop-color="#681083"/>
|
||||
<stop offset="0.0006" stop-color="#681083"/>
|
||||
<stop offset="0.072" stop-color="#8D0F6D"/>
|
||||
<stop offset="0.1459" stop-color="#AD0D5A"/>
|
||||
<stop offset="0.2229" stop-color="#C80A4A"/>
|
||||
<stop offset="0.3041" stop-color="#DE083E"/>
|
||||
<stop offset="0.3913" stop-color="#ED0335"/>
|
||||
<stop offset="0.4884" stop-color="#F60030"/>
|
||||
<stop offset="0.6158" stop-color="#FA002F"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd38" gradientUnits="userSpaceOnUse"
|
||||
x1="-3716.5049" y1="-3512.9565" x2="-3712.3662" y2="-3473.3286"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">
|
||||
<stop offset="0" stop-color="#681083"/>
|
||||
<stop offset="0.0006" stop-color="#681083"/>
|
||||
<stop offset="0.072" stop-color="#8D0F6D"/>
|
||||
<stop offset="0.1459" stop-color="#AD0D5A"/>
|
||||
<stop offset="0.2229" stop-color="#C80A4A"/>
|
||||
<stop offset="0.3041" stop-color="#DE083E"/>
|
||||
<stop offset="0.3913" stop-color="#ED0335"/>
|
||||
<stop offset="0.4884" stop-color="#F60030"/>
|
||||
<stop offset="0.6158" stop-color="#FA002F"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd41" gradientUnits="userSpaceOnUse"
|
||||
x1="-3711.1768" y1="-3514.0366" x2="-3709.7402" y2="-3493.4663"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">
|
||||
<stop offset="0" stop-color="#681083"/>
|
||||
<stop offset="0.0006" stop-color="#681083"/>
|
||||
<stop offset="0.072" stop-color="#8D0F6D"/>
|
||||
<stop offset="0.1459" stop-color="#AD0D5A"/>
|
||||
<stop offset="0.2229" stop-color="#C80A4A"/>
|
||||
<stop offset="0.3041" stop-color="#DE083E"/>
|
||||
<stop offset="0.3913" stop-color="#ED0335"/>
|
||||
<stop offset="0.4884" stop-color="#F60030"/>
|
||||
<stop offset="0.6158" stop-color="#FA002F"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd42" gradientUnits="userSpaceOnUse"
|
||||
x1="-3718.4951" y1="-3510.1016" x2="-3716.7441" y2="-3482.9595"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">
|
||||
<stop offset="0" stop-color="#681083"/>
|
||||
<stop offset="0.0006" stop-color="#681083"/>
|
||||
<stop offset="0.072" stop-color="#8D0F6D"/>
|
||||
<stop offset="0.1459" stop-color="#AD0D5A"/>
|
||||
<stop offset="0.2229" stop-color="#C80A4A"/>
|
||||
<stop offset="0.3041" stop-color="#DE083E"/>
|
||||
<stop offset="0.3913" stop-color="#ED0335"/>
|
||||
<stop offset="0.4884" stop-color="#F60030"/>
|
||||
<stop offset="0.6158" stop-color="#FA002F"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd52" gradientUnits="userSpaceOnUse"
|
||||
x1="-3690.9155" y1="-3526.2993" x2="-3702.7354" y2="-3558.2568"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">
|
||||
<stop offset="0" stop-color="#4F0C81"/>
|
||||
<stop offset="0.0701" stop-color="#690C73"/>
|
||||
<stop offset="0.209" stop-color="#9A0A5B"/>
|
||||
<stop offset="0.3368" stop-color="#C20748"/>
|
||||
<stop offset="0.4512" stop-color="#E0053A"/>
|
||||
<stop offset="0.5481" stop-color="#F20032"/>
|
||||
<stop offset="0.6158" stop-color="#FA002F"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd69" gradientUnits="userSpaceOnUse"
|
||||
x1="-3772.377" y1="-3509.7163" x2="-3797.2949" y2="-3537.6816"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2070.8274 1900.0875)">
|
||||
<stop offset="0" stop-color="#4F0C81"/>
|
||||
<stop offset="0.0701" stop-color="#690C73"/>
|
||||
<stop offset="0.209" stop-color="#9A0A5B"/>
|
||||
<stop offset="0.3368" stop-color="#C20748"/>
|
||||
<stop offset="0.4512" stop-color="#E0053A"/>
|
||||
<stop offset="0.5481" stop-color="#F20032"/>
|
||||
<stop offset="0.6158" stop-color="#FA002F"/>
|
||||
<stop offset="1" stop-color="#F7EE5F"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd71" gradientUnits="userSpaceOnUse"
|
||||
x1="-3498.5225" y1="4158.0396" x2="-3482.3647" y2="4209.6001"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 -1982.8965 3021.3838)">
|
||||
<stop offset="0" stop-color="#D8E7EB"/>
|
||||
<stop offset="0.0849" stop-color="#C9D9DE"/>
|
||||
<stop offset="0.2184" stop-color="#A5B8C2"/>
|
||||
<stop offset="0.3836" stop-color="#728896"/>
|
||||
<stop offset="0.5537" stop-color="#405766"/>
|
||||
<stop offset="0.6417" stop-color="#667D8B"/>
|
||||
<stop offset="0.742" stop-color="#92A7B1"/>
|
||||
<stop offset="0.8374" stop-color="#B7C8D0"/>
|
||||
<stop offset="0.9257" stop-color="#CFDFE4"/>
|
||||
<stop offset="1" stop-color="#D8E7EB"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="AIgd72" gradientUnits="userSpaceOnUse"
|
||||
x1="-3704.9473" y1="-3493.9082" x2="-3688.7896" y2="-3442.3477"
|
||||
gradientTransform="matrix(0.5318 0.0004 -0.0004 0.5318 2110.5286 1859.3658)">
|
||||
<stop offset="0" stop-color="#D8E7EB"/>
|
||||
<stop offset="0.0849" stop-color="#C9D9DE"/>
|
||||
<stop offset="0.2184" stop-color="#A5B8C2"/>
|
||||
<stop offset="0.3836" stop-color="#728896"/>
|
||||
<stop offset="0.5537" stop-color="#405766"/>
|
||||
<stop offset="0.6417" stop-color="#667D8B"/>
|
||||
<stop offset="0.742" stop-color="#92A7B1"/>
|
||||
<stop offset="0.8374" stop-color="#B7C8D0"/>
|
||||
<stop offset="0.9257" stop-color="#CFDFE4"/>
|
||||
<stop offset="1" stop-color="#D8E7EB"/>
|
||||
</linearGradient>
|
||||
|
||||
<!-- Embedded Arial font for the URL text -->
|
||||
<font horiz-adv-x="904">
|
||||
<font-face font-family="Arial" units-per-em="2048"
|
||||
panose-1="2 11 6 4 2 2 2 2 2 4" ascent="1854" descent="-434"
|
||||
alphabetic="0"/>
|
||||
<missing-glyph horiz-adv-x="1536" d="M256 0V1280H1280V0H256ZM288 32H1248V1248H288V32Z"/>
|
||||
<glyph unicode="." glyph-name="period" horiz-adv-x="569" d="M186 0V205H391V0H186Z"/>
|
||||
<glyph unicode="/" glyph-name="slash" horiz-adv-x="569" d="M0 -25L425 1491H569L145 -25H0Z"/>
|
||||
<glyph unicode=":" glyph-name="colon" horiz-adv-x="569" d="M185 857V1062H390V857H185ZM185 0V205H390V0H185Z"/>
|
||||
<glyph unicode="a" glyph-name="a" horiz-adv-x="1139" d="M828 131Q728 46 636 11T437 -24Q262 -24 168 61T74 280Q74 358 109 422T202 526T332 585Q385 599 492 612Q710 638 813 674Q814 711 814 721Q814 831 763 876Q694 937 558 937Q431 937 371 893T281 735L105 759Q129 872 184 941T343 1048T584 1086Q720 1086 805 1054T930 974T986 851Q995 805 995 685V445Q995 194 1006 128T1052 0H864Q836 56 828 131ZM813 533Q715 493 519 465Q408 449 362 429T291 371T266 285Q266 213 320 165T480 117Q584 117 665 162T784 287Q813 348 813 467V533Z"/>
|
||||
<glyph unicode="c" glyph-name="c" horiz-adv-x="1024" d="M828 389L1005 366Q976 183 857 80T563 -24Q345 -24 213 118T80 527Q80 699 137 828T310 1021T564 1086Q737 1086 847 999T988 750L813 723Q788 830 725 884T571 938Q435 938 350 841T265 532Q265 318 347 221T561 124Q667 124 738 189T828 389Z"/>
|
||||
<glyph unicode="e" glyph-name="e" horiz-adv-x="1139" d="M862 342L1048 319Q1004 156 885 66T581 -24Q348 -24 212 119T75 522Q75 790 213 938T571 1086Q784 1086 919 941T1054 533Q1054 517 1053 485H261Q271 310 360 217T582 124Q681 124 751 176T862 342ZM271 633H864Q852 767 796 834Q710 938 573 938Q449 938 365 855T271 633Z"/>
|
||||
<glyph unicode="g" glyph-name="g" horiz-adv-x="1139" d="M102 -88L277 -114Q288 -195 338 -232Q405 -282 521 -282Q646 -282 714 -232T806 -92Q820 -37 819 139Q701 0 525 0Q306 0 186 158T66 537Q66 689 121 817T280 1016T526 1086Q714 1086 836 934V1062H1002V144Q1002 -104 952 -207T792 -371T522 -431Q332 -431 215 -346T102 -88ZM251 550Q251 341 334 245T542 149Q666 149 750 244T834 544Q834 739 748 838T539 937Q419 937 335 840T251 550Z"/>
|
||||
<glyph unicode="h" glyph-name="h" horiz-adv-x="1139" d="M135 0V1466H315V940Q441 1086 633 1086Q751 1086 838 1040T962 911T1000 673V0H820V673Q820 808 762 869T596 931Q516 931 446 890T345 777T315 581V0H135Z"/>
|
||||
<glyph unicode="i" glyph-name="i" horiz-adv-x="455" d="M136 1259V1466H316V1259H136ZM136 0V1062H316V0H136Z"/>
|
||||
<glyph unicode="l" glyph-name="l" horiz-adv-x="455" d="M131 0V1466H311V0H131Z"/>
|
||||
<glyph unicode="m" glyph-name="m" horiz-adv-x="1706" d="M135 0V1062H296V913Q346 991 429 1038T618 1086Q736 1086 811 1037T918 900Q1044 1086 1246 1086Q1404 1086 1489 999T1574 729V0H1395V669Q1395 777 1378 824T1314 901T1206 930Q1094 930 1020 856T946 617V0H766V690Q766 810 722 870T578 930Q502 930 438 890T344 773T315 551V0H135Z"/>
|
||||
<glyph unicode="o" glyph-name="o" horiz-adv-x="1139" d="M68 531Q68 826 232 968Q369 1086 566 1086Q785 1086 924 943T1063 546Q1063 341 1002 224T823 41T566 -24Q343 -24 206 119T68 531ZM253 531Q253 327 342 226T566 124Q700 124 789 226T878 537Q878 734 789 835T566 937Q431 937 342 836T253 531Z"/>
|
||||
<glyph unicode="p" glyph-name="p" horiz-adv-x="1139" d="M135 -407V1062H299V924Q357 1005 430 1045T607 1086Q743 1086 847 1016T1004 819T1057 539Q1057 376 999 246T829 46T594 -24Q504 -24 433 14T315 110V-407H135ZM298 525Q298 320 381 222T582 124Q702 124 787 225T873 540Q873 743 790 844T590 945Q475 945 387 838T298 525Z"/>
|
||||
<glyph unicode="r" glyph-name="r" horiz-adv-x="682" d="M133 0V1062H295V901Q357 1014 409 1050T525 1086Q616 1086 710 1028L648 861Q582 900 516 900Q457 900 410 865T343 766Q313 670 313 556V0H133Z"/>
|
||||
<glyph unicode="s" glyph-name="s" horiz-adv-x="1024" d="M63 317L241 345Q256 238 324 181T516 124Q640 124 700 174T760 293Q760 354 707 389Q670 413 523 450Q325 500 249 536T133 637T93 780Q93 851 125 911T214 1012Q256 1043 328 1064T484 1086Q609 1086 703 1050T843 953T905 788L729 764Q717 846 660 892T497 938Q373 938 320 897T267 801Q267 766 289 738Q311 709 358 690Q385 680 517 644Q708 593 783 561T902 466T945 312Q945 222 893 143T741 20T517 -24Q310 -24 202 62T63 317Z"/>
|
||||
<glyph unicode="t" glyph-name="t" horiz-adv-x="569" d="M528 161L554 2Q478 -14 418 -14Q320 -14 266 17T190 98T168 311V922H36V1062H168V1325L347 1433V1062H528V922H347V301Q347 224 356 202T387 167T449 154Q479 154 528 161Z"/>
|
||||
<glyph unicode="x" glyph-name="x" horiz-adv-x="1024" d="M15 0L403 552L44 1062H269L432 813Q478 742 506 694Q550 760 587 811L766 1062H981L614 562L1009 0H788L570 330L512 419L233 0H15Z"/>
|
||||
</font>
|
||||
|
||||
<!-- Embedded Tahoma font for the other text -->
|
||||
<font horiz-adv-x="1036">
|
||||
<font-face font-family="Tahoma" units-per-em="2048" alphabetic="0"
|
||||
panose-1="2 11 8 4 3 5 4 4 2 4" ascent="2049" descent="-423"/>
|
||||
<glyph unicode=" " glyph-name="space" horiz-adv-x="600"/>
|
||||
<glyph unicode="!" glyph-name="exclam" horiz-adv-x="702" d="M550 1489L509 429H193L152 1489H550ZM548 0H154V264H548V0Z"/>
|
||||
<glyph unicode="<" glyph-name="less" horiz-adv-x="1676" d="M1465 14L181 547V767L1465 1300V1024L566 656L1465 290V14Z"/>
|
||||
<glyph unicode="?" glyph-name="question" horiz-adv-x="1160" d="M1084 1126Q1084 1027 1055 949T971 812Q918 755 844 710T677 628V400H335V735Q391 750 459 776T580 840Q635 879 670 931T705 1054Q705 1153 642 1198T467 1243Q383 1243 289 1206T140 1132H111V1433Q175 1461 298 1490T562 1519Q688 1519 784 1490T949 1407Q1015 1354 1049 1283T1084 1126ZM705 0H311V264H705V0Z" />
|
||||
<glyph unicode="A" glyph-name="A" horiz-adv-x="1402" d="M-6 0L497 1489H905L1408 0H1023L930 304H462L369 0H-6ZM848 574L696 1065L544 574H848Z"/>
|
||||
<glyph unicode="C" glyph-name="C" horiz-adv-x="1367" d="M796 -29Q461 -29 264 173T67 743Q67 1097 264 1307T797 1518Q886 1518 957 1508T1093 1480Q1144 1465 1204 1439T1301 1394V1039H1263Q1236 1063 1195 1096T1102 1162Q1050 1194 988 1216T857 1239Q776 1239 709 1214T580 1125Q524 1068 489 971T453 742Q453 603 490 509T587 356Q645 300 716 275T859 250Q933 250 1000 274T1113 329Q1163 360 1201 392T1267 449H1301V99Q1260 80 1206 56T1095 14Q1025 -7 964 -18T796 -29Z"/>
|
||||
<glyph unicode="D" glyph-name="D" horiz-adv-x="1551" d="M1484 743Q1484 535 1393 371T1163 118Q1047 43 911 22T620 0H154V1489H616Q773 1489 910 1469T1167 1372Q1314 1278 1399 1119T1484 743ZM1100 746Q1100 893 1050 997T894 1161Q818 1203 735 1207T535 1211H528V279H535Q661 279 747 283T912 337Q1004 395 1052 497T1100 746Z"/>
|
||||
<glyph unicode="E" glyph-name="E" horiz-adv-x="1260" d="M154 0V1489H1161V1205H526V944H1111V660H526V284H1161V0H154Z"/>
|
||||
<glyph unicode="G" glyph-name="G" horiz-adv-x="1526" d="M1398 85Q1300 45 1144 7T835 -31Q484 -31 276 171T67 746Q67 1096 275 1307T846 1518Q1033 1518 1150 1483T1392 1386V1037H1358Q1331 1058 1281 1096T1182 1162Q1126 1194 1053 1217T897 1240Q801 1240 722 1210T581 1118Q522 1058 488 966T453 752Q453 491 584 367T942 243Q962 243 989 244T1036 247V539H747V818H1398V85Z"/>
|
||||
<glyph unicode="L" glyph-name="L" horiz-adv-x="1172" d="M1148 0H154V1489H528V284H1148V0Z"/>
|
||||
<glyph unicode="M" glyph-name="M" horiz-adv-x="1829" d="M1675 0H1303V987L1032 350H777L506 987V0H154V1489H585L915 754L1244 1489H1675V0Z"/>
|
||||
<glyph unicode="O" glyph-name="O" horiz-adv-x="1577" d="M1510 744Q1510 383 1317 176T788 -31Q451 -31 259 178T67 744Q67 1103 259 1311T788 1520Q1124 1520 1317 1313T1510 744ZM1124 745Q1124 878 1097 971T1023 1125Q975 1186 915 1212T789 1239Q720 1239 664 1215T556 1127Q510 1069 482 973T453 744Q453 607 480 517T554 365Q602 303 663 277T789 250Q855 250 917 278T1024 367Q1072 432 1098 518T1124 745Z"/>
|
||||
<glyph unicode="P" glyph-name="P" horiz-adv-x="1346" d="M1300 1019Q1300 915 1267 821T1172 664Q1134 625 1089 592T988 536Q933 513 869 500T724 487H528V0H154V1489H732Q861 1489 954 1466T1124 1391Q1208 1335 1254 1242T1300 1019ZM916 1010Q916 1073 886 1118T814 1181Q761 1204 713 1207T581 1211H528V765H554Q607 765 654 766T736 773Q766 778 799 792T851 825Q889 862 902 902T916 1010Z"/>
|
||||
<glyph unicode="T" glyph-name="T" horiz-adv-x="1254" d="M440 0V1205H0V1489H1254V1205H814V0H440Z"/>
|
||||
<glyph unicode="X" glyph-name="X" horiz-adv-x="1402" d="M1414 0H980L694 475L402 0H-12L471 750L7 1489H440L708 1040L983 1489H1398L931 765L1414 0Z"/>
|
||||
<glyph unicode="Y" glyph-name="Y" horiz-adv-x="1373" d="M1392 1489L878 622V0H504V603L-19 1489H407L699 957L980 1489H1392Z"/>
|
||||
<glyph unicode="a" glyph-name="a" horiz-adv-x="1226" d="M753 293V527Q664 518 609 512T501 486Q455 470 430 438T404 351Q404 272 446 243T572 213Q618 213 666 234T753 293ZM753 119Q717 89 689 65T612 17Q565 -6 521 -18T396 -30Q247 -30 149 70T50 322Q50 447 100 524T244 646Q339 692 471 710T755 738V744Q755 837 687 872T481 908Q419 908 336 886T174 828H144V1099Q196 1114 312 1134T546 1155Q836 1155 968 1059T1101 764V0H753V119Z"/>
|
||||
<glyph unicode="c" glyph-name="c" horiz-adv-x="1080" d="M685 -30Q546 -30 431 5T230 113Q146 186 99 296T52 557Q52 718 103 831T241 1017Q325 1087 438 1120T675 1154Q768 1154 861 1133T1048 1064V764H1003Q982 784 952 808T885 852Q847 873 799 887T692 902Q558 902 485 809T411 557Q411 388 489 305T698 222Q764 222 814 237T900 273Q935 294 960 316T1003 357H1048V57Q1018 44 979 27T898 -1Q847 -15 803 -22T685 -30Z"/>
|
||||
<glyph unicode="e" glyph-name="e" horiz-adv-x="1216" d="M709 -30Q391 -30 222 122T52 555Q52 830 210 994T652 1158Q910 1158 1040 1019T1170 621V495H403Q408 417 436 365T510 281Q555 250 615 237T746 223Q807 223 866 236T974 272Q1017 291 1053 313T1113 352H1150V63Q1107 46 1072 32T974 2Q917 -13 857 -21T709 -30ZM825 706Q822 817 774 875T625 933Q523 933 466 872T402 706H825Z"/>
|
||||
<glyph unicode="h" glyph-name="h" horiz-adv-x="1311" d="M1186 0H834V557Q834 625 829 692T808 792Q790 830 756 846T665 863Q622 863 578 847T484 796V0H134V1556H484V999Q570 1072 651 1113T832 1154Q1004 1154 1095 1046T1186 731V0Z" />
|
||||
<glyph unicode="i" glyph-name="i" horiz-adv-x="618" d="M484 0H134V1123H484V0ZM494 1283H124V1556H494V1283Z"/>
|
||||
<glyph unicode="j" glyph-name="j" horiz-adv-x="743" d="M609 -20Q609 -210 496 -316T204 -423Q108 -423 30 -415T-84 -397V-139H-57Q-23 -150 18 -156T85 -163Q186 -163 222 -101T259 103V879H57V1123H609V-20ZM609 1283H236V1556H609V1283Z"/>
|
||||
<glyph unicode="l" glyph-name="l" horiz-adv-x="618" d="M484 0H134V1556H484V0Z"/>
|
||||
<glyph unicode="m" glyph-name="m" horiz-adv-x="1953" d="M1476 0V561Q1476 644 1473 701T1455 794Q1440 830 1409 846T1320 863Q1280 863 1241 846T1156 796V0H804V561Q804 643 801 700T782 794Q767 830 736 846T648 863Q605 863 564 843T484 796V0H134V1123H484V999Q570 1072 646 1113T817 1154Q920 1154 998 1105T1117 959Q1218 1053 1307 1103T1489 1154Q1567 1154 1629 1129T1734 1054Q1781 1000 1804 926T1828 731V0H1476Z"/>
|
||||
<glyph unicode="n" glyph-name="n" horiz-adv-x="1311" d="M1186 0H834V557Q834 625 829 692T808 792Q790 830 756 846T665 863Q622 863 578 847T484 796V0H134V1123H484V999Q570 1072 651 1113T832 1154Q1004 1154 1095 1046T1186 731V0Z"/>
|
||||
<glyph unicode="o" glyph-name="o" horiz-adv-x="1264" d="M1212 561Q1212 284 1061 125T632 -35Q357 -35 205 124T52 561Q52 841 204 999T632 1158Q908 1158 1060 999T1212 561ZM853 559Q853 659 837 725T791 832Q760 874 721 890T632 907Q585 907 547 893T477 837Q447 798 429 730T411 559Q411 456 428 393T472 291Q500 252 542 234T635 216Q677 216 720 234T790 288Q821 331 837 391T853 559Z"/>
|
||||
<glyph unicode="p" glyph-name="p" horiz-adv-x="1289" d="M1235 577Q1235 308 1099 143T762 -22Q678 -22 616 -3T484 56V-412H134V1123H484V1006Q561 1072 641 1113T826 1154Q1021 1154 1128 999T1235 577ZM877 570Q877 734 827 808T669 882Q622 882 576 867T484 822V257Q512 245 545 240T625 235Q753 235 815 318T877 570Z"/>
|
||||
<glyph unicode="r" glyph-name="r" horiz-adv-x="888" d="M888 792H859Q839 799 801 802T717 806Q662 806 602 790T484 752V0H134V1123H484V962Q508 984 550 1017T628 1071Q666 1094 716 1110T812 1127Q829 1127 850 1126T888 1123V792Z"/>
|
||||
<glyph unicode="s" glyph-name="s" horiz-adv-x="1054" d="M476 -31Q352 -31 242 -4T59 59V355H88Q113 336 145 313T234 265Q283 242 344 226T478 209Q552 209 608 232T665 305Q665 344 639 364T538 402Q498 412 437 423T329 450Q197 491 131 571T64 783Q64 858 98 924T200 1043Q267 1094 365 1124T588 1154Q706 1154 805 1131T972 1074V790H944Q926 804 887 827T811 868Q767 888 713 901T601 914Q525 914 473 888T420 819Q420 781 446 759T559 716Q604 705 662 695T775 666Q896 627 958 552T1021 351Q1021 272 984 201T879 80Q807 27 710 -2T476 -31Z"/>
|
||||
<glyph unicode="t" glyph-name="t" horiz-adv-x="851" d="M564 -22Q350 -22 253 66T155 354V879H21V1123H155V1444H505V1123H842V879H505V481Q505 422 506 378T522 299Q536 264 571 244T675 223Q703 223 748 235T812 257H842V10Q785 -5 721 -13T564 -22Z"/>
|
||||
<glyph unicode="v" glyph-name="v" horiz-adv-x="1185" d="M1185 1123L782 0H400L0 1123H368L598 380L825 1123H1185Z"/>
|
||||
<glyph unicode="x" glyph-name="x" horiz-adv-x="1238" d="M1242 0H832L618 323L398 0H-4L409 561L3 1123H413L623 806L834 1123H1237L830 570L1242 0Z"/>
|
||||
</font>
|
||||
</defs>
|
||||
|
||||
<rect id="background" width="100%" height="100%" fill="white"/>
|
||||
|
||||
<g transform="translate(168,0) scale(-1, 1)" opacity="0.7">
|
||||
<g filter="url(#medGlow)" transform="translate(-0.5,-3.5)" fill="#D9D9D9"
|
||||
stroke="#D9D9D9" stroke-width="0.254">
|
||||
<path stroke-width="0.5956" d="M0.281,44.304c13.561-1.867,63.613-4.392,85.943-8.05c17.961-2.937,35.502-8.285,52.242-13.9c4.328-1.453,11.991-4.434,16.896-7.07c3.104-2.373,10.571-5.889,12.606-9.222c-32.45,15.407-45.513,19.649-83.582,27.354 c-15.436,3.169-71.617,7.72-84.105,10.888z"/>
|
||||
<path d="M48.301,50.277l1.454,0.498l1.418,0.119l1.417-0.23l1.417-0.574l1.379-0.766l1.38-0.994l1.305-1.145l1.301-1.227l1.228-1.26l1.149-1.266l1.111-1.225l1.035-1.148l0.958-0.957l0.881-0.763L66.5,38.84l0.689-0.228l-0.576,0.036l-0.611,0.038 l-0.689,0.077l-0.688,0.074l-0.69,0.078l-0.689,0.076l-0.689,0.038l-0.612,0.076l-0.957,0.88l-0.921,0.841l-0.805,0.842l-0.729,0.844l-0.727,0.801l-0.688,0.805l-0.652,0.764l-0.691,0.729l-0.688,0.727l-0.729,0.65l-0.767,0.65l-0.882,0.611l-0.919,0.576 l-1.034,0.535l-1.149,0.496l-1.302,0.42z"/>
|
||||
<path d="M43.551,50.082l1.688,0.271l1.569,0.037l1.455-0.15l1.377-0.344l1.265-0.535l1.151-0.652l1.148-0.766l1.034-0.879l1.035-0.918l0.957-0.994l0.959-1.072l0.921-1.033l0.956-1.033l0.96-1.033l0.958-0.955l0.995-0.881l-0.381,0.037h-0.423 l-0.384,0.039l-0.419,0.037l-0.424,0.037l-0.421,0.078l-0.42,0.035l-0.42,0.041l-0.421,0.037l-0.461,0.037l-0.422,0.078l-0.459,0.037l-0.459,0.037l-0.46,0.037h-0.46l-0.459,0.039l-0.347,0.535l-0.42,0.652l-0.537,0.764l-0.575,0.805l-0.69,0.881l-0.729,0.879 l-0.766,0.918l-0.805,0.879l-0.844,0.844l-0.84,0.805l-0.885,0.727l-0.842,0.611l-0.844,0.496l-0.843,0.346l-0.804,0.189h-0.768z"/>
|
||||
<path d="M40.411,50.119l0.958,0.115l0.919,0.076l0.881-0.037l0.881-0.152l0.882-0.189l0.843-0.344l0.841-0.422l0.883-0.574l0.882-0.65l0.882-0.764l0.882-0.92l0.919-0.994l0.958-1.188l0.997-1.301l1.034-1.416l1.074-1.607l-0.651-0.002l-0.613,0.039 l-0.614,0.076l-0.612,0.076l-0.611,0.078l-0.613,0.072h-0.688h-0.727l-0.616,0.613l-0.573,0.65l-0.576,0.613l-0.574,0.688l-0.575,0.65l-0.535,0.689l-0.576,0.648l-0.539,0.691l-0.572,0.65l-0.574,0.65l-0.612,0.65L43.094,47.9l-0.65,0.572l-0.652,0.574l-0.65,0.574 l-0.729,0.498z"/>
|
||||
<path d="M37.081,49.96l0.728,0.387l0.802,0.154l0.807-0.117l0.842-0.342l0.844-0.5l0.881-0.689l0.88-0.764l0.884-0.916l0.841-0.959l0.884-0.992l0.804-0.998l0.805-0.957l0.768-0.957l0.729-0.84l0.689-0.729l0.614-0.613l-4.099,0.382l-0.462,0.611 l-0.498,0.611l-0.458,0.615l-0.459,0.609l-0.46,0.613l-0.5,0.613l-0.461,0.611l-0.497,0.613l-0.537,0.572l-0.537,0.611l-0.536,0.578l-0.613,0.57l-0.612,0.574l-0.653,0.576l-0.688,0.537l-0.728,0.531z"/>
|
||||
<path d="M30.302,49.076l1.188,0.768l1.109,0.5l1.11,0.23h1.074l1.033-0.191l0.995-0.342l0.955-0.539l0.96-0.686l0.919-0.842l0.923-0.881l0.84-1.037l0.884-1.031l0.843-1.109l0.844-1.146l0.805-1.148l0.805-1.111L44.9,40.625l-0.536,0.037 l-0.384,0.037l-0.345,0.039l-0.343,0.039h-0.346l-0.499,0.037l-0.651,0.037l-0.729,1.033l-0.727,0.955l-0.729,0.922l-0.805,0.803l-0.767,0.727l-0.767,0.689l-0.804,0.611l-0.768,0.537l-0.766,0.457l-0.768,0.422l-0.727,0.305l-0.689,0.27l-0.689,0.229l-0.614,0.152 l-0.612,0.076l-0.537,0.037z"/>
|
||||
<path d="M26.74,48.843l1.228,0.152l1.186,0.08l1.149-0.078l1.109-0.15l1.036-0.227l1.033-0.346l0.958-0.422l0.92-0.535l0.92-0.572l0.844-0.65l0.843-0.727l0.803-0.805l0.766-0.842l0.73-0.918l0.729-0.959l0.689-0.994l-0.767,0.039l-0.844,0.074 l-0.802,0.076l-0.806,0.039l-0.69,0.076l-0.574,0.035L36.78,41.23l-0.191,0.037l-0.076,0.078l-0.191,0.191l-0.308,0.305l-0.382,0.385l-0.422,0.459l-0.536,0.537l-0.577,0.572l-0.648,0.615l-0.731,0.607l-0.764,0.65l-0.768,0.615l-0.843,0.611l-0.88,0.572 l-0.881,0.535l-0.921,0.461l-0.921,0.381z"/>
|
||||
<path d="M22.031,49.109l1.033,0.191l0.998,0.076l1.033-0.113l1.034-0.191l1.034-0.342l0.994-0.422l0.996-0.498l0.998-0.611l0.919-0.648l0.918-0.689l0.881-0.727l0.845-0.766l0.806-0.803l0.766-0.766l0.69-0.768l0.651-0.766h-0.461l-0.574,0.041 l-0.611,0.035H34.33l-0.613,0.074l-0.613,0.041l-0.496,0.039l-0.423,0.074v0.078l-0.154,0.189l-0.381,0.346l-0.537,0.42L30.46,43.14l-0.764,0.613l-0.845,0.652l-0.882,0.648l-0.92,0.686l-0.918,0.691l-0.881,0.65l-0.846,0.574l-0.766,0.535l-0.689,0.422 l-0.537,0.305l-0.382,0.191z"/>
|
||||
<path d="M16.822,49.066l0.612,0.613l0.806,0.266l0.996,0.002l1.11-0.266l1.227-0.461l1.262-0.646l1.341-0.768l1.305-0.84l1.302-0.92l1.227-0.916l1.147-0.879l0.999-0.844l0.881-0.688l0.65-0.574l0.423-0.381l0.192-0.154l-0.498,0.039l-0.538,0.035 l-0.574,0.037l-0.572,0.041l-0.614,0.072l-0.614,0.039l-0.611,0.041l-0.652,0.037l-0.688,0.42l-0.688,0.422l-0.693,0.455l-0.649,0.426l-0.689,0.455l-0.653,0.498l-0.688,0.459l-0.653,0.459l-0.69,0.496l-0.65,0.461l-0.688,0.459l-0.651,0.459l-0.688,0.42 l-0.691,0.422l-0.651,0.42l-0.69,0.383z"/>
|
||||
<path d="M12.993,49.14l0.652,0.229l0.649,0.115l0.65,0.037l0.653-0.109l0.65-0.195l0.689-0.264l0.727-0.383l0.768-0.461l0.843-0.535l0.881-0.611l0.959-0.688l1.072-0.729l1.187-0.803l1.265-0.881l1.379-0.918l1.534-0.957l-0.653,0.039l-0.727,0.039 h-0.65l-0.65,0.037l-0.574,0.037l-0.459,0.039l-0.307,0.039l-0.116,0.035l-0.077,0.115l-0.229,0.23l-0.346,0.307l-0.458,0.42l-0.574,0.496L21.077,44.4l-0.689,0.57l-0.805,0.613l-0.805,0.611l-0.843,0.613l-0.843,0.533l-0.882,0.537l-0.842,0.457l-0.842,0.383 l-0.805,0.268l-0.729,0.154z"/>
|
||||
<path d="M10.198,48.716l0.879,0.344l0.958,0.152l0.998-0.072l1.033-0.268l1.072-0.383l1.033-0.498l1.074-0.607l0.996-0.691l0.958-0.688l0.92-0.729l0.843-0.688l0.728-0.691l0.653-0.572l0.495-0.498l0.383-0.342l0.232-0.232l-0.613,0.039l-0.577,0.039 l-0.571,0.037l-0.575,0.074l-0.535,0.041l-0.577,0.037l-0.61,0.074l-0.613,0.039l-0.459,0.42l-0.501,0.42l-0.458,0.422l-0.499,0.459l-0.498,0.498l-0.497,0.459l-0.536,0.459l-0.538,0.459l-0.536,0.422l-0.534,0.422l-0.577,0.381l-0.534,0.342l-0.614,0.309 l-0.574,0.266l-0.613,0.193l-0.613,0.152z"/>
|
||||
<path d="M6.831,47.642l0.765,0.535l0.763,0.346l0.767,0.154l0.767,0.039l0.768-0.152l0.766-0.232l0.766-0.342l0.765-0.459l0.729-0.498l0.766-0.611l0.729-0.613l0.729-0.65l0.727-0.648l0.69-0.689l0.689-0.65l0.69-0.615l-0.422,0.041l-0.46,0.076 l-0.497,0.037l-0.535,0.039l-0.575,0.074l-0.612,0.039l-0.652,0.074l-0.612,0.037l-0.192,0.461l-0.267,0.459l-0.271,0.422l-0.346,0.422l-0.381,0.383l-0.424,0.383l-0.42,0.381l-0.496,0.307l-0.5,0.307l-0.537,0.268l-0.573,0.268l-0.576,0.191l-0.612,0.154 l-0.61,0.15L7.48,47.603l-0.649,0.039z"/>
|
||||
<path d="M3.803,47.066l0.652,0.266l0.69,0.193l0.726,0.115l0.806,0.002l0.767-0.039l0.842-0.115l0.805-0.229l0.803-0.229l0.768-0.344l0.729-0.383l0.65-0.422l0.614-0.494l0.536-0.539l0.46-0.572l0.345-0.65l0.23-0.652l-0.46,0.039l-0.46,0.037 l-0.497,0.076l-0.5,0.039l-0.495,0.037l-0.537,0.037l-0.574,0.039l-0.652,0.037L9.78,43.699l-0.307,0.385l-0.306,0.344l-0.306,0.307l-0.307,0.305l-0.348,0.229l-0.343,0.27l-0.347,0.229l-0.381,0.191l-0.422,0.191l-0.421,0.189l-0.459,0.154l-0.462,0.152 l-0.495,0.152l-0.537,0.115l-0.539,0.154z"/>
|
||||
<path d="M2.233,46.529l0.23,0.229l0.347,0.152l0.42,0.078h0.46l0.536-0.037L4.8,46.837l0.613-0.193l0.612-0.189l0.613-0.27l0.614-0.307l0.612-0.342l0.537-0.385l0.537-0.42l0.458-0.459l0.345-0.459l0.307-0.498l-0.343,0.041l-0.308,0.037 l-0.383,0.037L8.67,43.468l-0.344,0.039L8.02,43.544H7.752H7.483v0.152L7.14,44.001l-0.576,0.422l-0.767,0.498L4.88,45.417l-0.922,0.5l-0.919,0.381l-0.806,0.23z"/>
|
||||
<path d="M1.124,45.455l0.078,0.535l0.192,0.344l0.305,0.156l0.42,0.076l0.499-0.076l0.574-0.191l0.573-0.229l0.614-0.307l0.613-0.346l0.574-0.381l0.575-0.381l0.461-0.346l0.42-0.307l0.307-0.23l0.191-0.152l0.038-0.076l-2.986,0.342l-0.229,0.152 L3.959,44.23l-0.458,0.23l-0.5,0.229l-0.535,0.27l-0.497,0.189l-0.461,0.191l-0.384,0.115z"/>
|
||||
<path d="M4.573,43.886l-0.651,0.039l-0.574,0.039L2.812,44l-0.498,0.037l-0.46,0.041l-0.497,0.035l-0.498,0.078l-0.577,0.113l0.117,0.729l0.343,0.346h0.537l0.689-0.189l0.689-0.348l0.729-0.381l0.651-0.346l0.536-0.229z"/>
|
||||
<path d="M4.459,43.505l-0.653,0.113l-0.573,0.076l-0.497,0.113l-0.5,0.076l-0.458,0.113l-0.459,0.115L0.781,44.23l-0.574,0.152l-0.038-0.844l0.345-0.535l0.537-0.193l0.727-0.033l0.766,0.15l0.766,0.193l0.651,0.23l0.499,0.154z"/>
|
||||
<path d="M44.298,27.949l1.684-0.651l1.611-0.419l1.491-0.113l1.417,0.076l1.379,0.309l1.262,0.459l1.227,0.652l1.187,0.729l1.149,0.845l1.11,0.919l1.106,0.959l1.074,0.996l1.071,0.957l1.07,0.921l1.073,0.882l1.109,0.807l-0.384,0.073l-0.421,0.038 l-0.421,0.039l-0.383,0.076l-0.423,0.039l-0.421,0.038l-0.459,0.036l-0.421,0.039l-0.422,0.035l-0.461,0.041l-0.458,0.076l-0.422,0.037l-0.461,0.04l-0.457,0.074l-0.498,0.037l-0.461,0.077l-0.382-0.534l-0.495-0.653l-0.576-0.766l-0.688-0.768l-0.727-0.843 l-0.805-0.843l-0.879-0.844l-0.881-0.806l-0.959-0.766l-0.953-0.688l-0.957-0.615l-0.997-0.497l-0.957-0.385l-0.958-0.23l-0.956-0.039l-0.88,0.152z"/>
|
||||
<path d="M41.423,28.597l0.96-0.345l0.92-0.227l0.878-0.152l0.923-0.077l0.878,0.077l0.919,0.192l0.88,0.268l0.919,0.423l0.956,0.537l0.959,0.691l0.995,0.803l1.033,0.96l1.108,1.11l1.11,1.266l1.186,1.418l1.264,1.57l-0.69,0.039l-0.611,0.072 l-0.576,0.039l-0.534,0.076l-0.537,0.076l-0.573,0.076l-0.653,0.113l-0.765,0.117l-0.689-0.574l-0.65-0.613l-0.689-0.653l-0.612-0.653l-0.649-0.649l-0.649-0.65l-0.613-0.653l-0.651-0.651l-0.651-0.612l-0.688-0.574l-0.651-0.576l-0.688-0.574l-0.727-0.498 l-0.767-0.423l-0.766-0.421l-0.805-0.347z"/>
|
||||
<path d="M38.207,29.438l0.727-0.611l0.808-0.307l0.88-0.074l0.879,0.191l0.958,0.383l0.956,0.538l0.995,0.688l0.996,0.805l0.996,0.881l0.993,0.921l0.956,0.921l0.92,0.958l0.841,0.88l0.84,0.805l0.729,0.691l0.69,0.574l-4.176,0.496l-0.536-0.613 l-0.536-0.615l-0.498-0.613l-0.533-0.611l-0.537-0.613l-0.534-0.651l-0.573-0.614l-0.535-0.576l-0.613-0.574l-0.612-0.573l-0.652-0.538l-0.688-0.498l-0.728-0.497l-0.766-0.423l-0.804-0.383l-0.843-0.346z"/>
|
||||
<path d="M31.926,32.113l1.148-1.111l1.111-0.802l1.073-0.534l1.072-0.307l1.072-0.037l1.034,0.154l1.033,0.385l0.996,0.498l0.994,0.689l0.955,0.804l0.996,0.921l0.919,0.996l0.957,1.035l0.917,1.111l0.918,1.111l0.919,1.11l-0.729,0.04l-0.611,0.035 l-0.498,0.039l-0.461,0.076l-0.458,0.076l-0.499,0.075l-0.571,0.078l-0.692,0.112l-0.803-1.034l-0.766-0.919l-0.803-0.844l-0.766-0.728l-0.802-0.612l-0.766-0.538l-0.728-0.461l-0.768-0.382l-0.728-0.309l-0.688-0.229l-0.728-0.192l-0.689-0.152l-0.648-0.08 l-0.653-0.074h-0.649l-0.612-0.002z"/>
|
||||
<path d="M27.442,33.145l1.267-0.461l1.187-0.344l1.187-0.189l1.109-0.077l1.111,0.001l1.071,0.155l1.035,0.231l0.996,0.347l0.995,0.419l0.919,0.537l0.957,0.613l0.878,0.689l0.882,0.768l0.84,0.842l0.806,0.922l0.803,0.996l-0.803,0.115l-0.919,0.111 l-0.921,0.115l-0.921,0.115l-0.842,0.113l-0.649,0.078l-0.499,0.037l-0.191-0.002l-0.075-0.075l-0.192-0.153l-0.269-0.268l-0.343-0.346l-0.423-0.42l-0.495-0.424l-0.575-0.496l-0.65-0.538l-0.728-0.499l-0.765-0.536l-0.844-0.5l-0.918-0.495l-0.92-0.424 l-0.993-0.383l-1.034-0.348l-1.073-0.229z"/>
|
||||
<path d="M21.775,33.828l1.034-0.418l1.035-0.307l1.108-0.115l1.073,0.001l1.111,0.118l1.108,0.229l1.072,0.346l1.111,0.422l1.033,0.498l1.033,0.537l0.995,0.651l0.994,0.651l0.882,0.693l0.881,0.727l0.802,0.728l0.726,0.729l-0.495,0.037 l-0.612,0.076l-0.689,0.075l-0.728,0.077l-0.729,0.075l-0.652,0.076l-0.573,0.037h-0.422l-0.001-0.077l-0.191-0.191l-0.38-0.268l-0.574-0.385l-0.689-0.42l-0.805-0.5l-0.919-0.537l-0.956-0.533l-0.955-0.54l-0.996-0.538l-0.998-0.496l-0.916-0.457l-0.846-0.387 l-0.762-0.307l-0.616-0.193l-0.495-0.115z"/>
|
||||
<path d="M16.413,34.936l0.537-0.842l0.805-0.498l0.996-0.188h1.147l1.264,0.268l1.379,0.422l1.455,0.576l1.415,0.651l1.455,0.729l1.339,0.766l1.265,0.73l1.149,0.727l0.954,0.615l0.729,0.459l0.496,0.342l0.23,0.117l-0.537,0.116l-0.61,0.077 l-0.653,0.073l-0.689,0.038l-0.727,0.078l-0.729,0.074l-0.688,0.115l-0.689,0.115l-0.729-0.345l-0.688-0.348l-0.729-0.381l-0.688-0.385l-0.69-0.346l-0.688-0.383l-0.728-0.384l-0.688-0.382l-0.689-0.35l-0.688-0.382l-0.729-0.343l-0.688-0.307l-0.689-0.348 l-0.727-0.305l-0.727-0.311l-0.729-0.266z"/>
|
||||
<path d="M9.558,36.768l0.844-0.611l0.956-0.346l0.996-0.149l1.07,0.001l1.113,0.189l1.148,0.348l1.11,0.421l1.108,0.5l1.035,0.574l1.032,0.575l0.919,0.614l0.804,0.536l0.727,0.499l0.574,0.459l0.42,0.307l0.229,0.193l-0.612,0.074l-0.574,0.076 l-0.495,0.076l-0.501,0.037l-0.536,0.037l-0.496,0.076l-0.576,0.076l-0.61,0.074l-0.537-0.342l-0.536-0.348l-0.574-0.419l-0.574-0.383l-0.611-0.422l-0.613-0.421l-0.612-0.423l-0.612-0.383l-0.614-0.384l-0.647-0.308l-0.652-0.305l-0.613-0.232l-0.648-0.189 l-0.615-0.117H10.17l-0.612,0.037z"/>
|
||||
<path d="M12.084,35.661l0.653-0.423l0.688-0.305l0.652-0.154l0.688-0.074l0.689,0.037l0.728,0.152l0.807,0.27l0.838,0.308l0.921,0.423l0.959,0.459l1.07,0.576l1.147,0.614l1.265,0.65l1.378,0.692l1.49,0.765l1.648,0.768l-0.613,0.039l-0.689,0.074 l-0.688,0.078l-0.691,0.111L24.41,40.8l-0.457,0.078l-0.346,0.035l-0.153-0.035L23.379,40.8l-0.27-0.191l-0.345-0.308l-0.459-0.344l-0.573-0.422l-0.689-0.459l-0.729-0.5l-0.803-0.499l-0.879-0.498l-0.882-0.497l-0.955-0.425l-0.957-0.384L14.88,35.97l-0.957-0.196 l-0.92-0.111l-0.919-0.001z"/>
|
||||
<path d="M6.491,38.719l0.691-0.766l0.726-0.574l0.729-0.382l0.766-0.229l0.767-0.037l0.804,0.076l0.844,0.192l0.804,0.271l0.84,0.422l0.805,0.42l0.842,0.536l0.843,0.539l0.843,0.536l0.803,0.574l0.805,0.578l0.803,0.496l-0.459,0.076l-0.498,0.039 l-0.574,0.115l-0.613,0.072l-0.649,0.08l-0.69,0.072l-0.65,0.078l-0.653,0.076l-0.229-0.498l-0.269-0.422l-0.305-0.422l-0.384-0.382l-0.383-0.344l-0.419-0.27l-0.5-0.271l-0.497-0.229l-0.536-0.191l-0.572-0.154l-0.576-0.114l-0.612-0.079l-0.65-0.037l-0.652,0.001 l-0.65,0.073l-0.689,0.078z"/>
|
||||
<path d="M1.778,41.242l0.193-0.307l0.306-0.268l0.422-0.227l0.459-0.155l0.536-0.114l0.612-0.036l0.613,0.001l0.689,0.037l0.65,0.114l0.689,0.155l0.652,0.229l0.61,0.27l0.576,0.307l0.534,0.383l0.422,0.422l0.381,0.461l-0.343,0.076L9.36,42.666 l-0.42,0.076l-0.423,0.074l-0.382,0.037l-0.308,0.041H7.6H7.522l-0.153-0.078l-0.381-0.23l-0.652-0.307L5.57,41.937l-0.881-0.309l-0.995-0.27l-0.957-0.154l-0.959,0.037z"/>
|
||||
<path d="M0.858,42.81l-0.036-0.609l0.152-0.461l0.271-0.307l0.42-0.191l0.497-0.078l0.575,0.041l0.613,0.076l0.688,0.154l0.65,0.23l0.65,0.23l0.613,0.23l0.535,0.23l0.46,0.23l0.383,0.154l0.191,0.152l0.078,0.037l-3.065,0.533l-0.27-0.113 l-0.42-0.117l-0.459-0.152L2.85,42.927l-0.536-0.115l-0.535-0.074L1.28,42.736L0.858,42.81z"/>
|
||||
<path d="M3.389,40.248l0.612-0.498l0.651-0.383l0.729-0.342l0.805-0.231l0.806-0.153l0.803-0.11l0.844,0.001l0.841,0.072l0.804,0.156l0.804,0.27l0.729,0.307l0.689,0.383l0.649,0.461l0.536,0.535l0.421,0.613l0.344,0.689l-0.499,0.039l-0.457,0.078 l-0.5,0.035l-0.536,0.076l-0.535,0.078l-0.574,0.037l-0.612,0.115l-0.65,0.072l-0.231-0.34L9.591,41.9l-0.307-0.268l-0.343-0.27l-0.383-0.23l-0.421-0.23L7.715,40.71l-0.459-0.152l-0.459-0.154L6.3,40.289l-0.46-0.076l-0.499-0.04l-0.497-0.037l-0.496-0.001 l-0.499,0.038l-0.46,0.075z"/>
|
||||
<path d="M139.729,21.932l0.077,0.117l0.192,0.307l0.267,0.497l0.344,0.613l0.386,0.727l0.382,0.806l0.346,0.92l0.303,0.918l0.228,0.959l0.079,0.92l-0.041,0.918l-0.192,0.842l-0.422,0.768l-0.651,0.687l-0.919,0.535l-1.189,0.384l0.193-0.578 l0.117-0.611l0.113-0.611l0.076-0.689l0.039-0.689v-0.726l-0.037-0.69l-0.037-0.729l-0.076-0.729l-0.074-0.725l-0.116-0.69l-0.152-0.651l-0.113-0.651l-0.154-0.575l-0.188-0.574l-0.155-0.498l0.191-0.075l0.154-0.04l0.19-0.076l0.156-0.036l0.153-0.077l0.15-0.039 l0.191-0.078l0.19-0.076z"/>
|
||||
<path d="M138.429,22.468l0.534,2.108l0.382,1.914l0.189,1.646l0.037,1.455l-0.077,1.264l-0.23,1.072l-0.307,0.92l-0.347,0.764l-0.46,0.613l-0.497,0.496l-0.498,0.347l-0.495,0.267l-0.54,0.191l-0.459,0.076l-0.42,0.037h-0.384l0.229-0.613 l0.229-0.612l0.192-0.688l0.154-0.689l0.152-0.767l0.118-0.764l0.116-0.767l0.075-0.803l0.041-0.806l0.001-0.843l-0.041-0.804l-0.073-0.843l-0.114-0.804l-0.155-0.843l-0.188-0.766l-0.229-0.805l0.457-0.154l0.463-0.152l0.422-0.152l0.418-0.115l0.348-0.113 l0.381-0.115l0.306-0.076l0.27-0.077z"/>
|
||||
<path d="M135.325,23.424l0.231,0.765l0.227,0.959l0.155,1.073l0.072,1.186l0.041,1.303l-0.002,1.301l-0.116,1.301l-0.192,1.267l-0.271,1.187l-0.345,1.109l-0.499,0.957l-0.572,0.766l-0.731,0.574l-0.84,0.304l-0.96,0.04l-1.108-0.307l0.422-0.691 l0.421-0.727l0.347-0.766l0.307-0.727l0.229-0.803l0.231-0.768l0.152-0.805l0.154-0.805l0.077-0.804l0.038-0.841v-0.805l-0.073-0.842l-0.076-0.842l-0.152-0.806l-0.152-0.845l-0.229-0.803l0.383-0.152l0.458-0.152l0.461-0.153l0.46-0.153l0.46-0.151l0.382-0.153 l0.346-0.117l0.267-0.074z"/>
|
||||
<path d="M125.586,39.307l1.036,0.08l0.997-0.154l0.879-0.381l0.805-0.535l0.766-0.73l0.652-0.879l0.536-0.994l0.499-1.109l0.384-1.188l0.309-1.266l0.192-1.3l0.078-1.302l0.001-1.301l-0.114-1.303l-0.229-1.265l-0.343-1.188l-0.422,0.152 l-0.425,0.154l-0.456,0.114l-0.463,0.152l-0.458,0.154l-0.497,0.153l-0.46,0.152l-0.497,0.152v0.804l-0.001,0.879l-0.04,0.999l-0.039,1.033l-0.039,1.033l-0.038,1.072l-0.116,1.11l-0.113,1.032l-0.156,1.035l-0.152,0.957l-0.233,0.919l-0.268,0.806l-0.308,0.687 l-0.384,0.577l-0.421,0.419l-0.461,0.267z"/>
|
||||
<path d="M128.317,25.715l-0.384,0.153l-0.383,0.114l-0.343,0.115l-0.386,0.077l-0.382,0.114l-0.347,0.113l-0.384,0.116l-0.38,0.153l-0.077,0.766l-0.041,0.84l-0.039,0.92l-0.038,0.958l-0.001,0.958l-0.001,1.031l-0.04,1.037l-0.039,0.994 l-0.076,0.997l-0.115,0.994l-0.193,0.919l-0.191,0.844l-0.305,0.802l-0.346,0.727l-0.422,0.616l-0.536,0.496l1.108-0.267l0.919-0.383l0.767-0.533l0.651-0.614l0.537-0.729l0.423-0.839l0.306-0.919l0.232-0.959l0.156-1.072l0.112-1.11l0.039-1.15l0.042-1.225 l0.037-1.225l0.039-1.264l0.001-1.264l0.078-1.303z"/>
|
||||
<path d="M118.156,42.058l1.531-0.074l1.304-0.305l1.07-0.496l0.882-0.652l0.689-0.841l0.502-0.958l0.419-1.071l0.27-1.188l0.154-1.226l0.114-1.261l0.041-1.305l0.001-1.262l0.001-1.305l0.001-1.223l0.076-1.15l0.078-1.071l-0.421,0.114l-0.383,0.113 l-0.343,0.117l-0.387,0.113l-0.382,0.113l-0.343,0.115l-0.384,0.077l-0.423,0.114l0.039,0.113l0.075,0.269l0.078,0.423l0.114,0.537l0.074,0.688l0.078,0.768l0.039,0.881l-0.04,0.996l-0.114,1.035l-0.195,1.145l-0.347,1.189l-0.42,1.225l-0.614,1.265l-0.766,1.339 l-0.921,1.3l-1.15,1.338z"/>
|
||||
<path d="M112.945,43.703l1.035,0.191l1.035-0.074l0.995-0.346l0.996-0.537l0.956-0.725l0.92-0.881l0.844-1.07l0.769-1.188l0.649-1.265l0.576-1.378l0.462-1.456l0.309-1.489l0.192-1.496l0.041-1.531l-0.152-1.454l-0.308-1.456l-3.638,1.146 l0.037,0.613l0.037,0.729l-0.038,0.801l-0.08,0.92l-0.112,0.958l-0.192,1.034l-0.192,1.072l-0.308,1.109l-0.347,1.109l-0.421,1.073l-0.461,1.071l-0.575,1.035l-0.612,0.996l-0.729,0.918l-0.805,0.842l-0.883,0.727z"/>
|
||||
<path d="M118.702,28.619l-0.573,0.189L117.4,29l-0.807,0.268l-0.84,0.229l-0.806,0.27l-0.804,0.227l-0.689,0.191l-0.537,0.115l-0.076,0.881l-0.042,0.955l-0.075,0.959l-0.038,0.995l-0.117,0.995l-0.077,1.037l-0.115,0.994l-0.153,0.996l-0.19,0.956 l-0.232,0.921l-0.309,0.916l-0.344,0.842l-0.422,0.807l-0.498,0.688l-0.536,0.65l-0.65,0.576l0.766,0.115l0.803-0.039l0.804-0.189l0.805-0.344l0.804-0.5l0.807-0.611l0.768-0.764l0.766-0.957l0.689-1.035l0.611-1.227l0.578-1.339l0.495-1.528l0.388-1.65 l0.307-1.758l0.194-1.955l0.077-2.066z"/>
|
||||
<path d="M104.021,45.226l1.725,0.08l1.455-0.154l1.265-0.418l0.998-0.652l0.841-0.803l0.691-0.957l0.497-1.072l0.386-1.224l0.308-1.225l0.19-1.343l0.116-1.3l0.117-1.302l0.038-1.303l0.078-1.188l0.075-1.11l0.117-0.995l-0.535,0.114l-0.463,0.115 l-0.419,0.153l-0.418,0.112l-0.463,0.117l-0.422,0.111l-0.496,0.154l-0.576,0.151l-0.116,1.038l-0.112,0.992l-0.116,0.996l-0.156,0.955l-0.116,0.961l-0.153,0.918l-0.189,0.879l-0.194,0.881l-0.269,0.844l-0.308,0.841l-0.382,0.805l-0.422,0.805l-0.536,0.801 l-0.576,0.768L104.79,44.5l-0.77,0.727z"/>
|
||||
<path d="M99.389,46.066l1.532,0.078l1.34-0.193l1.188-0.418l1.036-0.65l0.88-0.805l0.766-0.957l0.615-1.107l0.537-1.188l0.458-1.226l0.347-1.3l0.269-1.266l0.194-1.299l0.19-1.226l0.116-1.15l0.116-1.073l0.079-0.919l-0.539,0.117l-0.459,0.112 l-0.42,0.115l-0.423,0.077l-0.38,0.113l-0.425,0.074l-0.495,0.152l-0.576,0.115l-0.192,1.496l-0.229,1.417l-0.27,1.301l-0.269,1.226l-0.31,1.109l-0.345,1.071l-0.383,0.918l-0.384,0.883l-0.383,0.803l-0.425,0.727l-0.459,0.613l-0.422,0.574l-0.459,0.535 l-0.461,0.42l-0.498,0.383l-0.459,0.346z"/>
|
||||
<path d="M95.021,46.636l1.457,0.078l1.302-0.189l1.151-0.424l1.071-0.611l0.881-0.801l0.805-0.92l0.69-1.072l0.614-1.145l0.535-1.189l0.422-1.263l0.347-1.264l0.308-1.262l0.271-1.188l0.192-1.149l0.152-1.031l0.155-0.922l-0.459,0.076l-0.46,0.116 l-0.462,0.114l-0.459,0.115l-0.462,0.115l-0.458,0.112l-0.46,0.114l-0.497,0.117l-0.038,0.725l-0.116,0.805l-0.153,0.843l-0.269,0.918l-0.27,0.995l-0.382,0.957l-0.385,1.033l-0.422,0.998l-0.499,0.996l-0.537,0.957l-0.534,0.879l-0.577,0.84l-0.574,0.807 l-0.614,0.689l-0.649,0.572l-0.617,0.459z"/>
|
||||
<path d="M90.237,47.513l1.49,0.193l1.38-0.191l1.264-0.496l1.15-0.766l1.073-0.955l0.921-1.148l0.84-1.301l0.77-1.34l0.613-1.416l0.537-1.381l0.46-1.302l0.384-1.262l0.23-1.074l0.192-0.88l0.114-0.65l0.001-0.381l-0.573,0.111l-0.537,0.115 l-0.535,0.152l-0.536,0.115l-0.536,0.152l-0.5,0.113l-0.497,0.115l-0.499,0.078l-0.191,0.651l-0.19,0.765l-0.229,0.879l-0.271,0.996l-0.308,1.035l-0.343,1.071l-0.384,1.069l-0.424,1.115l-0.461,1.07l-0.497,0.994l-0.537,0.959l-0.574,0.842l-0.653,0.725 l-0.65,0.574l-0.728,0.422l-0.765,0.229z"/>
|
||||
<path d="M86.752,47.32l1.377,0.307l1.223,0.002l1.113-0.268l1.034-0.535l0.882-0.729l0.805-0.881l0.727-1.068l0.652-1.15l0.539-1.225l0.498-1.262l0.384-1.264l0.385-1.227l0.307-1.147l0.231-1.035l0.23-0.918l0.189-0.727l-0.419,0.076l-0.423,0.038 l-0.38,0.075l-0.347,0.076l-0.384,0.076l-0.346,0.078l-0.305,0.074l-0.345,0.041l-0.118,0.879l-0.189,0.919l-0.232,0.917l-0.228,0.883l-0.309,0.918l-0.347,0.881l-0.382,0.843l-0.461,0.842l-0.46,0.842l-0.537,0.805l-0.615,0.764l-0.61,0.689l-0.729,0.689 l-0.727,0.611l-0.806,0.574l-0.879,0.535z"/>
|
||||
<path d="M82.385,48.005l1.147,0.002l1.112-0.115l1.07-0.268l1.037-0.383l0.956-0.533l0.959-0.65l0.842-0.764l0.841-0.842l0.73-0.959l0.69-1.033l0.614-1.15l0.573-1.185l0.461-1.264l0.385-1.34l0.347-1.379l0.23-1.414l-0.498,0.113l-0.499,0.076 l-0.536,0.115l-0.496,0.074l-0.497,0.078l-0.459,0.112l-0.5,0.077l-0.459,0.115l-0.231,0.805l-0.191,0.842l-0.231,0.805l-0.194,0.803l-0.23,0.804l-0.228,0.803l-0.307,0.766l-0.346,0.805l-0.42,0.766l-0.463,0.803l-0.576,0.766l-0.688,0.766l-0.768,0.729 l-0.918,0.766l-1.073,0.766l-1.188,0.725z"/>
|
||||
<path d="M76.18,48.728l1.495,0.117l1.454-0.076l1.34-0.229l1.266-0.383l1.187-0.496l1.112-0.65l1.033-0.768l0.918-0.916l0.844-0.955l0.767-1.074l0.693-1.148l0.573-1.221l0.496-1.304l0.425-1.34l0.307-1.377l0.233-1.381l-0.423,0.076l-0.46,0.117 l-0.456,0.074l-0.461,0.075l-0.459,0.078l-0.5,0.114l-0.497,0.076l-0.5,0.115l-0.152,0.955l-0.23,0.957l-0.31,0.96l-0.383,0.917l-0.457,0.917l-0.502,0.918l-0.574,0.883l-0.648,0.842l-0.691,0.844l-0.767,0.762l-0.808,0.727l-0.879,0.689l-0.921,0.611l-0.995,0.576 l-0.997,0.496l-1.072,0.42z"/>
|
||||
<path d="M72.772,49.107l1.264-0.074l1.226-0.189l1.228-0.307l1.186-0.457l1.112-0.537l1.109-0.648l1.034-0.729l0.958-0.842l0.881-0.916l0.843-0.994l0.73-1.076l0.65-1.109l0.536-1.183l0.46-1.226l0.348-1.267l0.229-1.299l-0.419,0.074l-0.385,0.037 l-0.346,0.039l-0.343,0.039l-0.346,0.037l-0.382,0.077l-0.458,0.075l-0.539,0.075l-0.537,1.112l-0.459,1.031l-0.46,0.997l-0.422,0.918l-0.46,0.881l-0.424,0.805l-0.461,0.764l-0.498,0.727l-0.537,0.729l-0.613,0.65l-0.688,0.689l-0.765,0.611l-0.884,0.65 l-0.996,0.611l-1.108,0.613l-1.265,0.609z"/>
|
||||
<path d="M66.645,49.488l1.877,0.076l1.763-0.072l1.57-0.268l1.455-0.422l1.34-0.572l1.187-0.691l1.113-0.801l0.993-0.92l0.921-0.992l0.844-1.072l0.729-1.109l0.688-1.189l0.652-1.184l0.577-1.187l0.538-1.227l0.496-1.187l-0.343,0.036l-0.461,0.078 l-0.573,0.076l-0.575,0.076l-0.613,0.115l-0.537,0.076l-0.456,0.076l-0.347,0.035l-0.46,1.074l-0.499,1.074l-0.577,0.994l-0.573,0.955l-0.652,0.881l-0.688,0.879l-0.729,0.805l-0.804,0.807l-0.804,0.727l-0.885,0.688l-0.917,0.688l-0.96,0.613l-0.995,0.572 l-1.072,0.535l-1.072,0.496l-1.149,0.461z"/>
|
||||
<path d="M63.006,50.019l1.034-0.037l1.071-0.152l1.15-0.268l1.186-0.42l1.188-0.494l1.189-0.613l1.188-0.727l1.187-0.803l1.149-0.918l1.111-0.957l1.035-1.07l0.999-1.15l0.879-1.188l0.804-1.261l0.691-1.34l0.576-1.38l-0.575,0.079l-0.575,0.074 l-0.611,0.037l-0.612,0.077l-0.536,0.037l-0.461,0.077l-0.382,0.076l-0.192,0.115l-0.69,0.535l-0.689,0.575l-0.729,0.688l-0.729,0.688l-0.727,0.765l-0.767,0.803l-0.767,0.844l-0.768,0.844l-0.766,0.879l-0.804,0.842l-0.805,0.842l-0.845,0.84l-0.842,0.844 l-0.845,0.762l-0.842,0.768l-0.882,0.688z"/>
|
||||
<path d="M57.415,50.015l0.997,0.654l1.032,0.268l1.034,0.002l1.073-0.268l1.071-0.537l1.073-0.729l1.111-0.916l1.11-1.033l1.112-1.188l1.148-1.225l1.189-1.301l1.188-1.299l1.188-1.264l1.226-1.263l1.228-1.148l1.226-1.031h-0.425l-0.494,0.074 l-0.576,0.038l-0.573,0.116l-0.614,0.076l-0.612,0.113l-0.572,0.115l-0.5,0.075l-0.956,0.88l-0.957,0.88l-0.923,0.918l-0.919,0.92l-0.881,0.916l-0.883,0.92l-0.88,0.92l-0.845,0.84l-0.844,0.84l-0.842,0.768l-0.805,0.688l-0.804,0.613l-0.805,0.535l-0.767,0.459 l-0.766,0.344l-0.767,0.229z"/>
|
||||
<path d="M53.086,50.511l1.572,0.002l1.492-0.152l1.342-0.385l1.304-0.494l1.187-0.613l1.109-0.766l1.075-0.84l0.995-0.92l0.997-0.994l0.956-1.033l0.921-1.035l0.959-1.07l0.959-1.07l0.994-1.034l1.035-0.957l1.072-0.918l-0.382,0.04l-0.458,0.037 l-0.577,0.074l-0.572,0.041l-0.577,0.073l-0.459,0.038l-0.382,0.041l-0.229-0.001l-0.651,0.151l-0.651,0.306l-0.649,0.423l-0.692,0.573l-0.689,0.686l-0.729,0.805l-0.766,0.844l-0.769,0.916l-0.88,0.957l-0.883,0.955l-0.997,0.996l-1.032,0.959l-1.111,0.955 l-1.188,0.881l-1.264,0.801l-1.381,0.729z"/>
|
||||
<path d="M138.314,18.982v-0.153l0.04-0.42l0.038-0.649l0.04-0.807l0.039-0.957l-0.037-1.033l-0.038-1.072l-0.111-1.111l-0.229-1.033l-0.309-0.996l-0.38-0.882l-0.572-0.728l-0.654-0.537l-0.843-0.307l-1.034-0.039l-1.186,0.306l0.385,0.384 l0.343,0.459l0.345,0.574l0.306,0.613l0.305,0.689l0.27,0.689l0.264,0.767l0.271,0.804l0.228,0.767l0.19,0.806l0.194,0.803l0.188,0.766l0.155,0.768l0.152,0.727l0.114,0.65l0.113,0.613l0.19-0.037l0.154-0.037l0.189-0.078l0.155-0.037l0.151-0.079l0.155-0.075 l0.192-0.037l0.226-0.078z"/>
|
||||
<path d="M136.9,19.558l-0.497-2.489l-0.535-2.108l-0.535-1.801l-0.532-1.492l-0.539-1.188l-0.534-0.958l-0.533-0.689l-0.499-0.497l-0.536-0.347l-0.458-0.153l-0.502-0.039l-0.42,0.078l-0.419,0.152l-0.382,0.191l-0.348,0.229l-0.306,0.23l0.536,0.497 l0.533,0.573l0.462,0.538l0.494,0.611l0.424,0.615l0.422,0.648l0.382,0.652l0.344,0.691l0.344,0.727l0.306,0.766l0.307,0.768l0.268,0.805l0.227,0.842l0.23,0.842l0.227,0.882l0.194,0.919l0.457-0.077l0.345-0.036l0.232-0.077l0.153-0.077l0.151-0.037l0.156-0.076 l0.153-0.039l0.229-0.075z"/>
|
||||
<path d="M134.984,20.283l-0.113-0.918l-0.194-1.035l-0.305-1.15l-0.379-1.226l-0.5-1.264l-0.571-1.227l-0.611-1.187l-0.688-1.111l-0.729-0.996l-0.765-0.843l-0.803-0.65l-0.842-0.425L127.603,8.1l-0.882,0.152l-0.842,0.499l-0.882,0.878l0.688,0.498 l0.65,0.576l0.613,0.574l0.574,0.576l0.574,0.611l0.496,0.689l0.459,0.691l0.42,0.688l0.423,0.769l0.343,0.767l0.345,0.805l0.267,0.842l0.267,0.879l0.193,0.92l0.189,0.959l0.155,0.994l0.416-0.114l0.461-0.152l0.499-0.153l0.498-0.191l0.461-0.189l0.421-0.154 l0.344-0.151l0.23-0.077z"/>
|
||||
<path d="M120.057,10.239l0.919-0.612l0.92-0.344l0.957-0.115l0.919,0.115l0.958,0.307l0.919,0.5l0.882,0.689l0.843,0.805l0.762,0.919l0.766,1.073l0.65,1.188l0.572,1.226l0.496,1.305l0.384,1.376l0.306,1.38l0.151,1.416L131,21.581l-0.459,0.116 l-0.46,0.15l-0.46,0.154l-0.497,0.191l-0.499,0.113l-0.457,0.154l-0.498,0.075l-0.346-0.88l-0.305-0.959l-0.383-0.957l-0.348-0.957l-0.379-0.996l-0.419-0.998l-0.423-0.956l-0.421-0.918l-0.456-0.884l-0.499-0.805l-0.533-0.766l-0.539-0.651l-0.609-0.575 l-0.615-0.459l-0.648-0.346l-0.69-0.19z"/>
|
||||
<path d="M115.844,11.383l1.455-0.648l1.302-0.344l1.149-0.038l1.034,0.193l0.919,0.421l0.806,0.65l0.724,0.807l0.65,0.957l0.575,1.072l0.495,1.188l0.5,1.229l0.457,1.225l0.457,1.264l0.421,1.264l0.459,1.188l0.497,1.111l-0.421,0.037l-0.384,0.115 l-0.383,0.113l-0.385,0.152l-0.381,0.118l-0.384,0.151l-0.421,0.114l-0.422,0.074l-0.038-0.151l-0.038-0.383l-0.114-0.498l-0.114-0.689l-0.189-0.803l-0.27-0.92l-0.306-0.996l-0.42-1.034l-0.494-1.034l-0.574-1.035l-0.728-1.035l-0.803-0.958l-0.96-0.918 l-1.07-0.767l-1.228-0.691l-1.375-0.5z"/>
|
||||
<path d="M110.406,12.185l0.882-0.651l0.997-0.42l1.069-0.153l1.072,0.04l1.149,0.229l1.148,0.461l1.108,0.615l1.111,0.768l1.07,0.956l0.997,1.075l0.878,1.225l0.805,1.342l0.687,1.416l0.537,1.533l0.342,1.57l0.19,1.687l-3.945,1.029l-0.228-0.649 l-0.307-0.77l-0.306-0.803l-0.382-0.881l-0.461-0.92l-0.457-0.956l-0.537-0.961l-0.573-0.956l-0.652-0.957l-0.725-0.92l-0.766-0.842l-0.803-0.808l-0.878-0.728l-0.959-0.613l-0.996-0.537l-1.07-0.421z"/>
|
||||
<path d="M120.542,25.02l-0.572,0.115l-0.727,0.152l-0.729,0.23l-0.808,0.229l-0.764,0.267l-0.729,0.191l-0.649,0.189l-0.536,0.152l-0.382-0.957l-0.421-0.995l-0.422-0.996l-0.42-1.036l-0.421-1.032l-0.458-0.997l-0.498-0.995l-0.497-0.997 l-0.533-0.918l-0.573-0.845l-0.614-0.804l-0.651-0.727l-0.65-0.652l-0.728-0.537l-0.804-0.423l-0.804-0.306l0.692-0.459l0.764-0.344l0.806-0.23l0.88-0.075l0.918,0.076l0.959,0.231l0.957,0.383l0.992,0.576l0.999,0.728l0.993,0.92l0.995,1.149l0.954,1.304 l0.919,1.532l0.917,1.723l0.843,1.992l0.802,2.184z"/>
|
||||
<path d="M101.328,14.973l1.571-0.841l1.415-0.498l1.304-0.114l1.187,0.193l1.032,0.458l0.996,0.691l0.841,0.883l0.805,1.073l0.688,1.188l0.649,1.265l0.573,1.341l0.534,1.34l0.536,1.302l0.498,1.265l0.458,1.148l0.456,1.035l-0.534,0.076 l-0.459,0.112l-0.422,0.079l-0.422,0.114l-0.421,0.114l-0.459,0.115l-0.498,0.076l-0.572,0.112l-0.5-1.033l-0.458-1.036l-0.46-0.994l-0.458-0.958l-0.459-0.958l-0.495-0.88l-0.5-0.881l-0.495-0.806l-0.575-0.807l-0.61-0.727l-0.612-0.688l-0.688-0.652l-0.769-0.615 l-0.801-0.536l-0.92-0.498l-0.956-0.46z"/>
|
||||
<path d="M96.577,16.348l1.419-0.765l1.339-0.383l1.265-0.075l1.225,0.191l1.111,0.461l1.069,0.689l0.996,0.844l0.921,0.998l0.841,1.149l0.802,1.187l0.726,1.227l0.652,1.264l0.611,1.266l0.537,1.148l0.455,1.111l0.423,0.957l-0.574,0.113l-0.5,0.115 l-0.46,0.113l-0.421,0.076l-0.458,0.115l-0.461,0.115l-0.536,0.076l-0.613,0.115l-0.688-1.533l-0.688-1.417l-0.646-1.302l-0.651-1.188l-0.614-1.071l-0.573-0.961l-0.61-0.84l-0.574-0.807l-0.612-0.651l-0.613-0.575l-0.611-0.498l-0.65-0.421l-0.653-0.308 l-0.685-0.269l-0.731-0.155l-0.765-0.113z"/>
|
||||
<path d="M92.977,17.379l1.378-0.65l1.307-0.308l1.222,0.001l1.19,0.233l1.07,0.458l1.033,0.654l0.956,0.844l0.92,0.957l0.802,1.072l0.766,1.148l0.726,1.188l0.613,1.188l0.609,1.189l0.5,1.15l0.456,1.033l0.421,0.959l-0.459,0.113l-0.42,0.113 l-0.424,0.076l-0.383,0.116l-0.421,0.077l-0.42,0.075l-0.462,0.113l-0.496,0.077l-0.231-0.765l-0.342-0.845l-0.42-0.842l-0.497-0.919l-0.535-0.919l-0.651-0.921l-0.649-0.92l-0.728-0.92l-0.765-0.841l-0.805-0.846l-0.803-0.766l-0.804-0.652l-0.843-0.613 l-0.805-0.498l-0.802-0.383l-0.806-0.23z"/>
|
||||
<path d="M88.648,18.484l1.417-0.762l1.38-0.345l1.379,0.039l1.301,0.385l1.264,0.612l1.226,0.879l1.149,1.038l1.069,1.147l0.995,1.229l0.881,1.264l0.8,1.227l0.65,1.187l0.536,1.036l0.422,0.879l0.23,0.652l0.113,0.383l-0.574,0.115l-0.498,0.113 l-0.498,0.115l-0.5,0.115l-0.496,0.115l-0.459,0.074l-0.499,0.077l-0.497,0.076l-0.344-0.651l-0.384-0.804l-0.458-0.882l-0.537-0.921l-0.571-1.033l-0.614-1.034l-0.646-0.997l-0.691-1.034l-0.727-0.959L93.7,20.939l-0.802-0.804l-0.803-0.652l-0.844-0.537 l-0.844-0.345l-0.878-0.152l-0.882,0.035z"/>
|
||||
<path d="M85.508,19.709l1.266-0.842l1.224-0.459l1.149-0.113l1.149,0.19l1.071,0.461l1.033,0.692l0.958,0.842l0.915,1.035l0.844,1.113l0.805,1.184l0.727,1.229l0.687,1.225l0.574,1.15l0.535,1.073l0.421,0.918l0.383,0.766l-0.46,0.077l-0.382,0.114 l-0.344,0.115l-0.308,0.113l-0.347,0.114l-0.305,0.115L96.796,30.9l-0.343,0.073l-0.344-0.955l-0.421-0.958l-0.422-0.921l-0.46-0.918l-0.537-0.919l-0.531-0.844l-0.613-0.844l-0.65-0.805l-0.689-0.767l-0.764-0.688l-0.765-0.614l-0.844-0.574l-0.919-0.5 l-0.919-0.421l-0.996-0.308l-1.071-0.229z"/>
|
||||
<path d="M81.523,20.625l1.113-0.422l1.109-0.266l1.148-0.077l1.074,0.078l1.109,0.231l1.032,0.345l1.034,0.536l1.034,0.652l0.956,0.768l0.918,0.92l0.881,0.996l0.842,1.112l0.802,1.226l0.689,1.34l0.688,1.418l0.571,1.491l-0.498,0.077l-0.495,0.076 l-0.501,0.115l-0.497,0.153l-0.496,0.115l-0.498,0.153l-0.497,0.115l-0.5,0.074l-0.343-0.842l-0.343-0.882l-0.347-0.843l-0.342-0.883l-0.422-0.842l-0.419-0.805l-0.501-0.842l-0.534-0.767l-0.649-0.729l-0.688-0.728l-0.805-0.652l-0.88-0.613l-0.996-0.537 l-1.11-0.498l-1.261-0.424l-1.381-0.344z"/>
|
||||
<path d="M75.855,21.961l1.455-0.609l1.457-0.385l1.34-0.189l1.34-0.037l1.265,0.191l1.226,0.346l1.147,0.498l1.111,0.652l0.992,0.805l0.994,0.919l0.884,1.036l0.84,1.15l0.764,1.264l0.652,1.34l0.611,1.381l0.535,1.491l-0.459,0.077l-0.46,0.076 l-0.536,0.078l-0.501,0.074l-0.533,0.078l-0.538,0.074l-0.535,0.076l-0.535,0.076l-0.269-1.072l-0.383-0.994l-0.42-0.996l-0.533-0.959l-0.575-0.881l-0.651-0.843l-0.688-0.805l-0.766-0.729l-0.842-0.689l-0.916-0.574l-0.959-0.539l-0.995-0.459l-1.071-0.346 L78.19,22.23l-1.146-0.191l-1.188-0.078z"/>
|
||||
<path d="M73.062,22.265l1.302-0.19l1.262-0.113L76.888,22l1.228,0.154l1.224,0.307l1.15,0.385l1.109,0.498l1.073,0.613l0.995,0.729l0.954,0.844l0.844,0.919l0.803,1.034l0.688,1.15l0.611,1.226l0.499,1.341l0.38,1.419l-0.46,0.035l-0.383,0.038 l-0.382,0.077l-0.384,0.077l-0.384,0.074l-0.382,0.078l-0.46,0.114l-0.496,0.076l-0.651-1.111l-0.613-1.073l-0.532-0.958l-0.5-0.956l-0.535-0.844l-0.498-0.804l-0.497-0.767l-0.572-0.69l-0.612-0.651l-0.688-0.575l-0.768-0.535l-0.842-0.498l-0.995-0.425 l-1.071-0.383l-1.264-0.346l-1.415-0.308z"/>
|
||||
<path d="M66.973,23.064l1.914-0.457l1.8-0.268l1.646-0.075l1.531,0.154l1.417,0.307l1.302,0.461l1.187,0.573l1.074,0.77l1.03,0.842l0.917,0.96l0.844,1.034l0.802,1.112l0.728,1.147l0.688,1.227l0.612,1.226l0.611,1.265l-0.307,0.037l-0.42,0.037 l-0.459,0.115l-0.501,0.076l-0.496,0.115l-0.462,0.114l-0.419,0.036l-0.346,0.039l-0.571-1.148l-0.613-1.035l-0.689-0.996l-0.726-0.918l-0.766-0.883l-0.805-0.806L76.618,27.4l-0.919-0.69l-0.956-0.616l-0.996-0.573l-1.034-0.498l-1.07-0.498l-1.111-0.423 l-1.147-0.383l-1.189-0.346l-1.222-0.309z"/>
|
||||
<path d="M63.335,23.443l1.068-0.189l1.113-0.037l1.225,0.038l1.263,0.192l1.267,0.271l1.3,0.384l1.303,0.497l1.302,0.614l1.3,0.729l1.224,0.845l1.186,0.92l1.147,1.035l1.035,1.149l0.956,1.225l0.841,1.342l0.728,1.455l-0.537,0.039l-0.533,0.076 l-0.538,0.115l-0.536,0.113l-0.459,0.113l-0.385,0.117l-0.306,0.036l-0.19-0.037l-0.769-0.46l-0.763-0.537l-0.804-0.613l-0.843-0.689l-0.843-0.729l-0.878-0.768l-0.92-0.768l-0.916-0.802l-0.959-0.806l-0.956-0.807l-0.995-0.803l-0.996-0.729l-1.033-0.729 l-0.995-0.652l-1.071-0.613l-1.031-0.537z"/>
|
||||
<path d="M58.237,24.895l0.958-0.955l1.034-0.572l1.074-0.23l1.109,0.077l1.148,0.308l1.225,0.575l1.227,0.769l1.3,0.879l1.301,1.074l1.341,1.11l1.34,1.19l1.34,1.188l1.377,1.188l1.377,1.112l1.376,1.035l1.381,0.92l-0.421,0.074l-0.499,0.037 l-0.612,0.041l-0.613,0.037l-0.648,0.037h-0.653h-0.574l-0.497-0.002l-1.034-0.766l-0.993-0.804l-0.996-0.808l-0.918-0.842l-0.919-0.805l-0.883-0.807l-0.878-0.805l-0.88-0.767l-0.919-0.688l-0.879-0.651l-0.92-0.575l-0.956-0.5l-0.996-0.422l-1.034-0.345 l-1.073-0.192l-1.11-0.117z"/>
|
||||
<path d="M54.408,25.352l1.61-0.381l1.493-0.152l1.415,0.076l1.343,0.271l1.262,0.461l1.226,0.575l1.186,0.729l1.148,0.805l1.11,0.919l1.109,0.922l1.071,0.995l1.111,0.996l1.109,0.958l1.107,0.959l1.188,0.843l1.185,0.807l-0.38,0.037l-0.498,0.075 l-0.576,0.078l-0.576,0.036l-0.572,0.079l-0.5,0.072l-0.38,0.041l-0.231,0.037l-0.688-0.002l-0.69-0.189l-0.727-0.348l-0.766-0.496l-0.766-0.614l-0.843-0.728l-0.879-0.807l-0.919-0.844l-0.959-0.881l-1.031-0.918l-1.109-0.882l-1.148-0.844l-1.262-0.808 l-1.302-0.728l-1.379-0.651l-1.494-0.5z"/>
|
||||
<path d="M49.583,26.689L51,25.885l1.495-0.342h1.455l1.49,0.309l1.495,0.576l1.494,0.804l1.454,0.96l1.415,1.034l1.339,1.149l1.302,1.15l1.263,1.075l1.148,0.993l1.033,0.844l0.956,0.65l0.843,0.385l0.726,0.116l-0.61,0.077l-0.653,0.113 l-0.727,0.113l-0.765,0.117l-0.767,0.074l-0.767,0.115l-0.728,0.038l-0.652,0.037l-1.07-0.806l-0.958-0.766l-0.879-0.767l-0.84-0.728l-0.767-0.73L59,31.752l-0.767-0.691l-0.726-0.651l-0.729-0.612l-0.804-0.576l-0.841-0.537l-0.919-0.496l-0.996-0.461 l-1.071-0.383l-1.226-0.348l-1.34-0.307z"/>
|
||||
<path d="M142.345,10.982l0.191-0.383l0.153-0.42l0.152-0.423l0.113-0.421l0.117-0.459l0.115-0.496l0.077-0.459l0.042-0.5l0.036-0.459l0.035-0.498l0.001-0.499l-0.035-0.46l-0.036-0.459l-0.08-0.457l-0.112-0.461l-0.114-0.42l0.611,0.804l0.459,0.882l0.345,0.842 l0.189,0.88l0.076,0.919v0.92l-0.116,0.918l-0.194,0.92l-0.228,0.918l-0.31,0.883l-0.343,0.879l-0.343,0.88l-0.385,0.843l-0.347,0.842l-0.346,0.765l-0.343,0.767l0.074-0.152l0.037-0.269l0.042-0.266v-0.345l0.037-0.424v-0.421v-0.46l0.001-0.496l0.038-0.499 v-0.498l0.039-0.534l0.04-0.498l0.038-0.461l0.078-0.461l0.075-0.42l0.116-0.383z"/>
|
||||
<path d="M154.014,26.885l-0.729-0.422l-0.729-0.462l-0.687-0.421l-0.688-0.422l-0.65-0.383l-0.651-0.422l-0.616-0.385l-0.609-0.42L148,23.165l-0.607-0.384l-0.614-0.422l-0.652-0.382l-0.611-0.386l-0.654-0.342l-0.686-0.386l-0.689-0.382l0.61,0.61l0.613,0.616 l0.613,0.611l0.612,0.576l0.65,0.611l0.651,0.536l0.65,0.539l0.688,0.497l0.651,0.461l0.689,0.383l0.651,0.346l0.688,0.269l0.688,0.229l0.688,0.115l0.691,0.037l0.691-0.035z"/>
|
||||
<path d="M148.317,11.561l-0.536,0.308l-0.5,0.345l-0.495,0.345l-0.461,0.344l-0.46,0.343l-0.419,0.383l-0.424,0.421l-0.423,0.383l-0.384,0.422l-0.384,0.422l-0.382,0.421l-0.345,0.457l-0.383,0.422l-0.346,0.459l-0.344,0.459l-0.346,0.459l0.153-0.496l0.192-0.499 l0.191-0.537l0.229-0.534l0.231-0.536l0.265-0.499l0.31-0.498l0.346-0.495l0.382-0.46l0.461-0.381l0.498-0.385l0.537-0.344l0.612-0.269l0.652-0.229l0.765-0.152l0.805-0.076z"/>
|
||||
<path d="M142.614,6.961l-0.153,0.767l-0.114,0.767l-0.154,0.766l-0.116,0.689L142,10.676l-0.114,0.689l-0.079,0.689l-0.115,0.689l-0.075,0.688l-0.117,0.689l-0.074,0.651l-0.118,0.689l-0.116,0.689l-0.115,0.689l-0.15,0.689l-0.157,0.727l-0.076-0.842 l-0.113-0.805l-0.077-0.843l-0.076-0.841l-0.037-0.807l-0.038-0.805l0.039-0.805l0.039-0.764l0.076-0.767l0.116-0.688l0.194-0.689l0.229-0.651l0.269-0.573l0.384-0.537l0.422-0.46l0.497-0.421z"/>
|
||||
<path d="M146.714,5.703l0.692,0.648l0.416,0.729l0.189,0.766l0.04,0.805l-0.153,0.804l-0.307,0.843l-0.424,0.844l-0.498,0.841l-0.575,0.804l-0.611,0.805l-0.653,0.764l-0.65,0.689l-0.614,0.689l-0.534,0.572l-0.463,0.539l-0.383,0.418l0.077-1.147l0.154-0.995 l0.191-0.844l0.307-0.764l0.306-0.65l0.386-0.574l0.382-0.535l0.424-0.501l0.383-0.496l0.424-0.495l0.382-0.538l0.307-0.613l0.307-0.688l0.23-0.766l0.194-0.919l0.075-1.032z"/>
|
||||
<path d="M141.803,17.951v-0.805l-0.039-0.765l-0.034-0.765l-0.04-0.768l-0.036-0.729l-0.077-0.727l-0.076-0.727l-0.073-0.691l-0.117-0.688l-0.114-0.728l-0.189-0.689l-0.152-0.689l-0.193-0.689l-0.268-0.689l-0.229-0.689l-0.306-0.689l1.111,1.073l0.918,1.034 l0.649,0.959l0.457,0.92l0.309,0.879l0.151,0.805l0.037,0.806l-0.077,0.727l-0.195,0.689l-0.187,0.651l-0.27,0.613l-0.271,0.533l-0.23,0.537l-0.229,0.459l-0.152,0.459l-0.078,0.383z"/>
|
||||
<path d="M153.022,20.603l-0.613,0.114l-0.614,0.116l-0.611,0.075l-0.613,0.075l-0.609,0.038l-0.616,0.037h-0.613h-0.575l-0.612-0.039h-0.574l-0.613-0.077l-0.573-0.038l-0.613-0.04l-0.575-0.075l-0.612-0.079l-0.574-0.075l0.498,0.229l0.498,0.192l0.535,0.231 l0.537,0.19l0.574,0.193l0.576,0.151l0.61,0.156l0.61,0.076l0.612,0.039h0.651l0.651-0.039l0.654-0.15l0.651-0.191l0.651-0.27l0.648-0.381l0.654-0.46z"/>
|
||||
<path d="M149.457,23.702l0.461,0.078l0.419,0.075l0.461,0.115l0.457,0.115l0.463,0.194l0.456,0.151l0.421,0.191l0.46,0.23l0.421,0.23l0.421,0.267l0.383,0.271l0.386,0.268l0.343,0.307l0.308,0.307l0.304,0.307l0.27,0.344l-0.269-0.917l-0.422-0.808l-0.494-0.688 l-0.615-0.651l-0.688-0.536l-0.768-0.5l-0.84-0.421l-0.882-0.347l-0.919-0.306l-0.919-0.307l-0.955-0.231l-0.958-0.23l-0.957-0.193l-0.919-0.189l-0.843-0.154l-0.842-0.192l0.42,0.153l0.574,0.306l0.69,0.463l0.841,0.497l0.843,0.535l0.879,0.499l0.842,0.46 l0.768,0.308z"/>
|
||||
<path d="M151.214,30.559l0.345-0.881l0.117-0.844l-0.116-0.842l-0.307-0.766l-0.457-0.729l-0.612-0.727l-0.728-0.69l-0.804-0.614l-0.843-0.613l-0.879-0.536l-0.919-0.538l-0.884-0.459l-0.801-0.42l-0.767-0.387l-0.651-0.344l-0.496-0.309l0.532,1.113l0.538,0.919 l0.573,0.728l0.536,0.652l0.574,0.498l0.574,0.459l0.574,0.346l0.574,0.346l0.571,0.346l0.577,0.382l0.572,0.384l0.536,0.46l0.537,0.573l0.535,0.691l0.497,0.806l0.498,0.995z"/>
|
||||
<path d="M141.569,21.129l0.422,0.652l0.42,0.652l0.421,0.65l0.38,0.613l0.346,0.613l0.345,0.649l0.346,0.614l0.305,0.613l0.304,0.652l0.268,0.65l0.271,0.613l0.229,0.65l0.19,0.689l0.192,0.65l0.152,0.689l0.152,0.73l0.384-1.455l0.191-1.265l0.041-1.149 l-0.115-0.994l-0.229-0.844l-0.346-0.766l-0.42-0.652l-0.458-0.537l-0.538-0.499l-0.535-0.421l-0.573-0.346l-0.537-0.306l-0.496-0.306l-0.46-0.268l-0.342-0.307l-0.31-0.271z"/>
|
||||
</g>
|
||||
<g id="Layer_x0020_1">
|
||||
<g stroke="black" stroke-width="0.254">
|
||||
<path fill="black" stroke-width="0.5956" d="M0.241,40.672c13.561-1.867,63.613-4.393,85.943-8.051c17.961-2.937,35.502-8.285,52.242-13.9c4.328-1.453,11.991-4.434,16.896-7.07c3.104-2.373,10.571-5.889,12.606-9.222c-32.45,15.407-45.513,19.649-83.582,27.354 c-15.436,3.169-71.617,7.721-84.105,10.889z"/>
|
||||
<path fill="url(#AIgd2)" d="M48.261,46.645l1.454,0.498l1.418,0.118l1.417-0.229l1.417-0.574l1.379-0.766l1.38-0.994l1.305-1.146l1.301-1.226l1.228-1.26l1.149-1.267l1.111-1.224l1.035-1.148l0.958-0.957l0.881-0.763l0.767-0.501l0.689-0.228l-0.576,0.036l-0.611,0.038 l-0.689,0.077l-0.688,0.074l-0.69,0.078l-0.689,0.076l-0.689,0.038l-0.612,0.076l-0.957,0.88l-0.921,0.842l-0.805,0.842l-0.729,0.844l-0.727,0.801l-0.688,0.805l-0.652,0.764l-0.691,0.729l-0.688,0.727l-0.729,0.65l-0.767,0.65l-0.882,0.61l-0.919,0.576 l-1.034,0.535l-1.149,0.496l-1.302,0.421z"/>
|
||||
<path fill="url(#AIgd3)" d="M43.511,46.45l1.688,0.271l1.569,0.038l1.455-0.15l1.377-0.345l1.265-0.534l1.151-0.652l1.148-0.766l1.034-0.879l1.035-0.918l0.957-0.995l0.959-1.072l0.921-1.032l0.956-1.033l0.96-1.033l0.958-0.955l0.995-0.881l-0.381,0.037h-0.423 l-0.384,0.039l-0.419,0.037l-0.424,0.037l-0.421,0.078l-0.42,0.035l-0.42,0.041l-0.421,0.037l-0.461,0.037l-0.422,0.078l-0.459,0.037l-0.459,0.037l-0.46,0.037h-0.46l-0.459,0.039l-0.347,0.535l-0.42,0.651l-0.537,0.765l-0.575,0.805l-0.69,0.881l-0.729,0.879 l-0.766,0.918l-0.805,0.879l-0.844,0.844l-0.84,0.805l-0.885,0.726l-0.842,0.612l-0.844,0.496l-0.843,0.346l-0.804,0.189h-0.768z"/>
|
||||
<path fill="url(#AIgd4)" d="M40.371,46.487l0.958,0.115l0.919,0.076l0.881-0.037l0.881-0.152l0.882-0.19l0.843-0.344l0.841-0.421l0.883-0.574l0.882-0.65l0.882-0.764l0.882-0.921l0.919-0.993l0.958-1.188l0.997-1.3l1.034-1.416l1.074-1.607l-0.651-0.002l-0.613,0.039 l-0.614,0.076l-0.612,0.076l-0.611,0.078l-0.613,0.072h-0.688h-0.727l-0.616,0.612l-0.573,0.65l-0.576,0.614l-0.574,0.688l-0.575,0.65l-0.535,0.689l-0.576,0.648l-0.539,0.691l-0.572,0.65l-0.574,0.65l-0.612,0.65l-0.577,0.613l-0.65,0.572l-0.652,0.574 l-0.65,0.573l-0.729,0.499z"/>
|
||||
<path fill="url(#AIgd3)" d="M37.041,46.329l0.728,0.387l0.802,0.153l0.807-0.116l0.842-0.342l0.844-0.5l0.881-0.689l0.88-0.764l0.884-0.917l0.841-0.958l0.884-0.993l0.804-0.997l0.805-0.957l0.768-0.957l0.729-0.84l0.689-0.729l0.614-0.613l-4.099,0.382l-0.462,0.612 l-0.498,0.61l-0.458,0.616l-0.459,0.608l-0.46,0.614l-0.5,0.612l-0.461,0.612l-0.497,0.612l-0.537,0.573l-0.537,0.611l-0.536,0.578l-0.613,0.57l-0.612,0.574l-0.653,0.576l-0.688,0.536l-0.728,0.532z"/>
|
||||
<path fill="url(#AIgd6)" d="M30.262,45.444l1.188,0.767l1.109,0.5l1.11,0.231h1.074l1.033-0.191l0.995-0.343l0.955-0.538l0.96-0.687l0.919-0.841l0.923-0.881l0.84-1.037l0.884-1.031l0.843-1.109l0.844-1.146l0.805-1.148l0.805-1.111l-0.688,0.115l-0.536,0.037 l-0.384,0.037l-0.345,0.039l-0.343,0.039l-0.346-0.001l-0.499,0.037l-0.651,0.037l-0.729,1.034l-0.727,0.955l-0.729,0.921l-0.805,0.804l-0.767,0.727l-0.767,0.689l-0.804,0.611l-0.768,0.536l-0.766,0.458l-0.768,0.421l-0.727,0.306l-0.689,0.269l-0.689,0.229 l-0.614,0.152l-0.612,0.075l-0.537,0.038z"/>
|
||||
<path fill="url(#AIgd3)" d="M26.7,45.21l1.228,0.153l1.186,0.08l1.149-0.078l1.109-0.151l1.036-0.227l1.033-0.345l0.958-0.422l0.92-0.535l0.92-0.572l0.844-0.651l0.843-0.727l0.803-0.804l0.766-0.842l0.73-0.918l0.729-0.959l0.689-0.994l-0.767,0.039l-0.844,0.074 l-0.802,0.076l-0.806,0.038l-0.69,0.077l-0.574,0.035l-0.421,0.039l-0.191,0.037l-0.076,0.078l-0.191,0.19l-0.308,0.306l-0.382,0.385l-0.422,0.459l-0.536,0.536l-0.577,0.573l-0.648,0.614l-0.731,0.608l-0.764,0.65l-0.768,0.615l-0.843,0.611l-0.88,0.572 l-0.881,0.535l-0.921,0.46L26.7,45.21z"/>
|
||||
<path fill="url(#AIgd8)" d="M21.991,45.476l1.033,0.192l0.998,0.076l1.033-0.113l1.034-0.191l1.034-0.342l0.994-0.423l0.996-0.497l0.998-0.611l0.919-0.648l0.918-0.69l0.881-0.726l0.845-0.766l0.806-0.804l0.766-0.765l0.69-0.768l0.651-0.766h-0.461l-0.574,0.04 l-0.611,0.036H34.29l-0.613,0.073l-0.613,0.041l-0.496,0.039l-0.423,0.075v0.077l-0.154,0.189l-0.381,0.347l-0.537,0.42l-0.652,0.535l-0.764,0.613l-0.845,0.652l-0.882,0.647l-0.92,0.687l-0.918,0.691l-0.881,0.65l-0.846,0.574L23.6,44.559L22.91,44.98 l-0.537,0.305l-0.382,0.191z"/>
|
||||
<path fill="url(#AIgd3)" d="M16.782,45.434l0.612,0.612l0.806,0.267l0.996,0.001l1.11-0.266l1.227-0.46l1.262-0.646l1.341-0.768l1.305-0.841l1.302-0.919l1.227-0.916l1.147-0.879l0.999-0.844l0.881-0.688l0.65-0.574l0.423-0.381l0.192-0.154l-0.498,0.038l-0.538,0.036 l-0.574,0.037l-0.572,0.041l-0.614,0.072l-0.614,0.039l-0.611,0.04l-0.652,0.038l-0.688,0.419l-0.688,0.422l-0.693,0.456l-0.649,0.425l-0.689,0.456l-0.653,0.498l-0.688,0.459l-0.653,0.459l-0.69,0.496l-0.65,0.461l-0.688,0.459l-0.651,0.458l-0.688,0.421 l-0.691,0.422l-0.651,0.419l-0.69,0.384z"/>
|
||||
<path fill="url(#AIgd10)" d="M12.953,45.507l0.652,0.229l0.649,0.115l0.65,0.037l0.653-0.11l0.65-0.194l0.689-0.265l0.727-0.383l0.768-0.46l0.843-0.535l0.881-0.612l0.959-0.688l1.072-0.728l1.187-0.803l1.265-0.881l1.379-0.918l1.534-0.957l-0.653,0.039l-0.727,0.039 l-0.65-0.001l-0.65,0.038l-0.574,0.037l-0.459,0.038l-0.307,0.039l-0.116,0.036l-0.077,0.115l-0.229,0.23l-0.346,0.307l-0.458,0.42L21.69,40.19l-0.653,0.577l-0.689,0.571l-0.805,0.613l-0.805,0.611l-0.843,0.612l-0.843,0.534l-0.882,0.537l-0.842,0.457 l-0.842,0.383l-0.805,0.267l-0.729,0.154z"/>
|
||||
<path fill="url(#AIgd11)" d="M10.158,45.084l0.879,0.344l0.958,0.152l0.998-0.072l1.033-0.268l1.072-0.383l1.033-0.498l1.074-0.608l0.996-0.69l0.958-0.688l0.92-0.728l0.843-0.688l0.728-0.691l0.653-0.572l0.495-0.499l0.383-0.341l0.232-0.232l-0.613,0.038l-0.577,0.04 l-0.571,0.037l-0.575,0.074l-0.535,0.041l-0.577,0.037l-0.61,0.074l-0.613,0.038l-0.459,0.421l-0.501,0.42l-0.458,0.421l-0.499,0.46l-0.498,0.498l-0.497,0.459l-0.536,0.459l-0.538,0.458l-0.536,0.423l-0.534,0.421l-0.577,0.381l-0.534,0.343l-0.614,0.309 l-0.574,0.266l-0.613,0.193l-0.613,0.152z"/>
|
||||
<path fill="url(#AIgd10)" d="M6.791,44.01l0.765,0.535l0.763,0.345l0.767,0.154l0.767,0.039l0.768-0.151l0.766-0.232l0.766-0.343l0.765-0.458l0.729-0.498l0.766-0.611l0.729-0.613l0.729-0.65l0.727-0.648l0.69-0.69l0.689-0.649l0.69-0.615l-0.422,0.041l-0.46,0.076 l-0.497,0.037l-0.535,0.039l-0.575,0.074l-0.612,0.039l-0.652,0.074l-0.612,0.037l-0.192,0.461L13.84,40.26l-0.271,0.422l-0.346,0.422l-0.381,0.383l-0.424,0.383l-0.42,0.381l-0.496,0.306l-0.5,0.308l-0.537,0.268l-0.573,0.268L9.316,43.59l-0.612,0.154 l-0.61,0.15L7.44,43.971L6.791,44.01z"/>
|
||||
<path fill="url(#AIgd11)" d="M3.763,43.434L4.415,43.7l0.69,0.193l0.726,0.115l0.806,0.001l0.767-0.038l0.842-0.115l0.805-0.229l0.803-0.229l0.768-0.344l0.729-0.384l0.65-0.421l0.614-0.495l0.536-0.538l0.46-0.572l0.345-0.651l0.23-0.652l-0.46,0.04l-0.46,0.037 l-0.497,0.076l-0.5,0.038l-0.495,0.038l-0.537,0.037l-0.574,0.039l-0.652,0.036L9.74,40.067l-0.307,0.384l-0.306,0.345l-0.306,0.306l-0.307,0.306l-0.348,0.229l-0.343,0.27l-0.347,0.229l-0.381,0.191l-0.422,0.19l-0.421,0.19L5.796,42.86l-0.462,0.152 l-0.495,0.152L4.302,43.28l-0.539,0.154z"/>
|
||||
<path fill="url(#AIgd10)" d="M2.193,42.896l0.23,0.229l0.347,0.152l0.42,0.078h0.46l0.536-0.038l0.573-0.112l0.613-0.193l0.612-0.189l0.613-0.27l0.614-0.307l0.612-0.342l0.537-0.385l0.537-0.42l0.458-0.459l0.345-0.46l0.307-0.498l-0.343,0.041l-0.308,0.037 l-0.383,0.038L8.63,39.836l-0.344,0.039l-0.307,0.036l-0.268,0.001l-0.269-0.001v0.153L7.1,40.37l-0.576,0.422L5.757,41.29L4.84,41.786l-0.922,0.499l-0.919,0.381l-0.806,0.23z"/>
|
||||
<path fill="url(#AIgd10)" d="M1.084,41.822l0.078,0.536l0.192,0.344l0.305,0.155l0.42,0.076l0.499-0.075l0.574-0.192l0.573-0.229l0.614-0.306l0.613-0.346l0.574-0.381l0.575-0.381l0.461-0.347l0.42-0.307l0.307-0.229l0.191-0.152l0.038-0.076l-2.986,0.341l-0.229,0.152 l-0.386,0.192l-0.458,0.23l-0.5,0.229l-0.535,0.269l-0.497,0.189l-0.461,0.192l-0.384,0.114z"/>
|
||||
<path fill="url(#AIgd16)" d="M4.533,40.253l-0.651,0.039l-0.574,0.039l-0.536,0.036l-0.498,0.037l-0.46,0.04l-0.497,0.036l-0.498,0.077l-0.577,0.114l0.117,0.729l0.343,0.345l0.537,0.001l0.689-0.19l0.689-0.347l0.729-0.382l0.651-0.345l0.536-0.229z"/>
|
||||
<path fill="url(#AIgd10)" d="M4.419,39.874l-0.653,0.112l-0.573,0.076l-0.497,0.114l-0.5,0.075l-0.458,0.114l-0.459,0.115l-0.537,0.116L0.167,40.75l-0.038-0.844l0.345-0.536l0.537-0.192l0.727-0.034l0.766,0.151l0.766,0.193l0.651,0.23l0.499,0.154z"/>
|
||||
<path fill="url(#AIgd18)" d="M44.258,24.317l1.684-0.651l1.611-0.419l1.491-0.113l1.417,0.076l1.379,0.309l1.262,0.459l1.227,0.652l1.187,0.729l1.149,0.845l1.11,0.919l1.106,0.959l1.074,0.996l1.071,0.957l1.07,0.921l1.073,0.882l1.109,0.807l-0.384,0.073 l-0.421,0.038l-0.421,0.039l-0.383,0.076l-0.423,0.039l-0.421,0.038l-0.459,0.036l-0.421,0.039l-0.422,0.035l-0.461,0.041l-0.458,0.076l-0.422,0.037l-0.461,0.04l-0.457,0.074l-0.498,0.037l-0.461,0.077l-0.382-0.534l-0.495-0.653l-0.576-0.766l-0.688-0.768 l-0.727-0.843l-0.805-0.843l-0.879-0.844l-0.881-0.806l-0.959-0.766l-0.953-0.688l-0.957-0.615l-0.997-0.497l-0.957-0.385l-0.958-0.23l-0.956-0.039l-0.88,0.152z"/>
|
||||
<path fill="url(#AIgd19)" d="M41.383,24.964l0.96-0.345l0.92-0.227l0.878-0.152l0.923-0.077l0.878,0.077l0.919,0.192l0.88,0.268l0.919,0.423l0.956,0.537l0.959,0.691l0.995,0.803l1.033,0.96l1.108,1.11l1.11,1.266l1.186,1.418l1.264,1.57l-0.69,0.039l-0.611,0.072 l-0.576,0.039l-0.534,0.076l-0.537,0.076l-0.573,0.076l-0.653,0.113l-0.765,0.117l-0.689-0.574l-0.65-0.613l-0.689-0.653l-0.612-0.653l-0.649-0.649l-0.649-0.65l-0.613-0.653l-0.651-0.651l-0.651-0.612l-0.688-0.574l-0.651-0.576l-0.688-0.574l-0.727-0.498 l-0.767-0.423l-0.766-0.421l-0.805-0.347z"/>
|
||||
<path fill="url(#AIgd18)" d="M38.167,25.805l0.727-0.611l0.808-0.307l0.88-0.074l0.879,0.191l0.958,0.383l0.956,0.538l0.995,0.688l0.996,0.805l0.996,0.881l0.993,0.921l0.956,0.921l0.92,0.958l0.841,0.88l0.84,0.805l0.729,0.691l0.69,0.574l-4.176,0.496l-0.536-0.613 l-0.536-0.615l-0.498-0.613l-0.533-0.611l-0.537-0.613l-0.534-0.651l-0.573-0.614l-0.535-0.576l-0.613-0.574l-0.612-0.573l-0.652-0.538l-0.688-0.498l-0.728-0.497l-0.766-0.423l-0.804-0.383l-0.843-0.346z"/>
|
||||
<path fill="url(#AIgd19)" d="M31.886,28.481l1.148-1.111l1.111-0.802l1.073-0.534l1.072-0.307l1.072-0.037l1.034,0.154l1.033,0.385l0.996,0.498l0.994,0.689l0.955,0.804l0.996,0.921l0.919,0.996l0.957,1.035l0.917,1.111l0.918,1.111l0.919,1.11l-0.729,0.04 l-0.611,0.035l-0.498,0.039l-0.461,0.076l-0.458,0.076l-0.499,0.075l-0.571,0.078l-0.692,0.112l-0.803-1.034l-0.766-0.919l-0.803-0.844l-0.766-0.728l-0.802-0.612l-0.766-0.538l-0.728-0.461l-0.768-0.382l-0.728-0.309l-0.688-0.229l-0.728-0.192l-0.689-0.152 l-0.648-0.08l-0.653-0.074h-0.649l-0.612-0.002z"/>
|
||||
<path fill="url(#AIgd18)" d="M27.402,29.512l1.267-0.461l1.187-0.344l1.187-0.189l1.109-0.077l1.111,0.001l1.071,0.155l1.035,0.231l0.996,0.347l0.995,0.419l0.919,0.537l0.957,0.613l0.878,0.689l0.882,0.768l0.84,0.842l0.806,0.922l0.803,0.996l-0.803,0.115 l-0.919,0.111l-0.921,0.115l-0.921,0.115l-0.842,0.113L38.39,35.61l-0.499,0.037l-0.191-0.002l-0.075-0.075l-0.192-0.153l-0.269-0.268l-0.343-0.346l-0.423-0.42l-0.495-0.424l-0.575-0.496l-0.65-0.538l-0.728-0.499l-0.765-0.536l-0.844-0.5l-0.918-0.495 l-0.92-0.424l-0.993-0.383l-1.034-0.348l-1.073-0.229z"/>
|
||||
<path fill="url(#AIgd19)" d="M21.735,30.196l1.034-0.418l1.035-0.307l1.108-0.115l1.073,0.001l1.111,0.118l1.108,0.229l1.072,0.346l1.111,0.422l1.033,0.498l1.033,0.537l0.995,0.651l0.994,0.651l0.882,0.693l0.881,0.727l0.802,0.728l0.726,0.729l-0.495,0.037 l-0.612,0.076l-0.689,0.075l-0.728,0.077l-0.729,0.075l-0.652,0.076l-0.573,0.037h-0.422l-0.001-0.077l-0.191-0.191l-0.38-0.268l-0.574-0.385l-0.689-0.42l-0.805-0.5l-0.919-0.537l-0.956-0.533l-0.955-0.54l-0.996-0.538l-0.998-0.496l-0.916-0.457l-0.846-0.387 l-0.762-0.307l-0.616-0.193l-0.495-0.115z"/>
|
||||
<path fill="url(#AIgd18)" d="M16.373,31.303l0.537-0.842l0.805-0.498l0.996-0.188h1.147l1.264,0.268l1.379,0.422l1.455,0.576l1.415,0.651l1.455,0.729l1.339,0.766l1.265,0.73l1.149,0.727l0.954,0.615l0.729,0.459l0.496,0.342l0.23,0.117l-0.537,0.116l-0.61,0.077 l-0.653,0.073l-0.689,0.038l-0.727,0.078l-0.729,0.074l-0.688,0.115l-0.689,0.115l-0.729-0.346l-0.688-0.348l-0.729-0.381l-0.688-0.385l-0.69-0.346l-0.688-0.383l-0.728-0.384l-0.688-0.382l-0.689-0.35l-0.688-0.382l-0.729-0.343l-0.688-0.307l-0.689-0.348 l-0.727-0.305l-0.727-0.311l-0.729-0.266z"/>
|
||||
<path fill="url(#AIgd10)" d="M9.518,33.135l0.844-0.611l0.956-0.346l0.996-0.149l1.07,0.001l1.113,0.189l1.148,0.348l1.11,0.421l1.108,0.5l1.035,0.574l1.032,0.575l0.919,0.614l0.804,0.536l0.727,0.499l0.574,0.46l0.42,0.306l0.229,0.193l-0.612,0.074l-0.574,0.077 l-0.495,0.076l-0.501,0.037l-0.536,0.037l-0.496,0.076L19.813,37.7l-0.61,0.074l-0.537-0.342l-0.536-0.348l-0.574-0.42l-0.574-0.383L16.37,35.86l-0.613-0.421l-0.612-0.423l-0.612-0.383l-0.614-0.384l-0.647-0.308l-0.652-0.305l-0.613-0.232l-0.648-0.189 l-0.615-0.117H10.13l-0.612,0.037z"/>
|
||||
<path fill="url(#AIgd11)" d="M12.044,32.029l0.653-0.423l0.688-0.305l0.652-0.154l0.688-0.074l0.689,0.037l0.728,0.152l0.807,0.27l0.838,0.308l0.921,0.423l0.959,0.459l1.07,0.576l1.147,0.614l1.265,0.65l1.378,0.692l1.49,0.765l1.648,0.768l-0.613,0.04L26.363,36.9 l-0.688,0.078l-0.691,0.112l-0.613,0.078l-0.457,0.078l-0.346,0.035l-0.153-0.035l-0.075-0.079l-0.27-0.19l-0.345-0.309l-0.459-0.344l-0.573-0.422l-0.689-0.459l-0.729-0.5l-0.803-0.499l-0.879-0.498l-0.882-0.497l-0.955-0.425l-0.957-0.384l-0.959-0.304 l-0.957-0.196l-0.92-0.111l-0.919-0.001z"/>
|
||||
<path fill="url(#AIgd11)" d="M6.451,35.086l0.691-0.766l0.726-0.574l0.729-0.382l0.766-0.229l0.767-0.037l0.804,0.076l0.844,0.192l0.804,0.271l0.84,0.422l0.805,0.42l0.842,0.536l0.843,0.539l0.843,0.536l0.803,0.574l0.805,0.578l0.803,0.496l-0.459,0.076l-0.498,0.038 l-0.574,0.116l-0.613,0.072l-0.649,0.079l-0.69,0.073l-0.65,0.078l-0.653,0.075l-0.229-0.497l-0.269-0.422l-0.305-0.422l-0.384-0.383l-0.383-0.344l-0.419-0.27l-0.5-0.271l-0.497-0.229l-0.536-0.191l-0.572-0.154L9.706,35.05l-0.612-0.079l-0.65-0.037 l-0.652,0.001l-0.65,0.073l-0.689,0.078z"/>
|
||||
<path fill="url(#AIgd11)" d="M1.738,37.609l0.193-0.306l0.306-0.268l0.422-0.228l0.459-0.154l0.536-0.114l0.612-0.036l0.613,0.001l0.689,0.037l0.65,0.114l0.689,0.155l0.652,0.229l0.61,0.269l0.576,0.308l0.534,0.383l0.422,0.422l0.381,0.461l-0.343,0.076L9.32,39.034 L8.9,39.11l-0.423,0.074l-0.382,0.037l-0.308,0.041H7.56H7.482l-0.153-0.078l-0.381-0.23l-0.652-0.307L5.53,38.304l-0.881-0.309l-0.995-0.269l-0.957-0.154l-0.959,0.036z"/>
|
||||
<path fill="url(#AIgd10)" d="M0.818,39.178l-0.036-0.609l0.152-0.461l0.271-0.307l0.42-0.191l0.497-0.078l0.575,0.041l0.613,0.076l0.688,0.154l0.65,0.229l0.65,0.231l0.613,0.23l0.535,0.23l0.46,0.23l0.383,0.154l0.191,0.152l0.078,0.036l-3.065,0.533l-0.27-0.112 l-0.42-0.117l-0.459-0.153L2.81,39.294l-0.536-0.115l-0.535-0.074L1.24,39.104l-0.422,0.074z"/>
|
||||
<path fill="url(#AIgd10)" d="M3.349,36.616l0.612-0.498l0.651-0.383l0.729-0.342l0.805-0.231l0.806-0.153l0.803-0.11l0.844,0.001l0.841,0.072l0.804,0.156l0.804,0.27l0.729,0.307l0.689,0.383l0.649,0.461l0.536,0.535l0.421,0.613l0.344,0.689l-0.499,0.039l-0.457,0.077 l-0.5,0.036l-0.536,0.076l-0.535,0.078l-0.574,0.037L10.7,38.844l-0.65,0.072l-0.231-0.341l-0.268-0.308L9.244,38l-0.343-0.27L8.519,37.5l-0.421-0.23l-0.423-0.192l-0.459-0.151l-0.459-0.154L6.26,36.657L5.8,36.581l-0.499-0.04l-0.497-0.037l-0.496-0.001 l-0.499,0.038l-0.46,0.075z"/>
|
||||
<path fill="url(#AIgd31)" d="M139.689,18.299l0.077,0.117l0.192,0.307l0.267,0.497l0.344,0.613l0.386,0.727l0.382,0.806l0.346,0.92l0.303,0.918l0.228,0.959l0.079,0.92L142.251,26l-0.192,0.842l-0.422,0.768l-0.651,0.687l-0.919,0.535l-1.189,0.384l0.193-0.578 l0.117-0.611l0.113-0.611l0.076-0.689l0.039-0.689V25.31l-0.037-0.69l-0.037-0.729l-0.076-0.729l-0.074-0.725l-0.116-0.69l-0.152-0.651l-0.113-0.651l-0.154-0.575l-0.188-0.574l-0.155-0.498l0.191-0.075l0.154-0.04l0.19-0.076l0.156-0.036l0.153-0.077l0.15-0.039 l0.191-0.078l0.19-0.076z"/>
|
||||
<path fill="url(#AIgd31)" d="M138.389,18.835l0.534,2.108l0.382,1.914l0.189,1.646l0.037,1.455l-0.077,1.264l-0.23,1.072l-0.307,0.92l-0.347,0.764l-0.46,0.613l-0.497,0.496l-0.498,0.347l-0.495,0.267l-0.54,0.191l-0.459,0.076l-0.42,0.037h-0.384l0.229-0.613 l0.229-0.612l0.192-0.688l0.154-0.689l0.152-0.767l0.118-0.764l0.116-0.767l0.075-0.803l0.041-0.806l0.001-0.843l-0.041-0.804l-0.073-0.843l-0.114-0.804l-0.155-0.843l-0.188-0.766l-0.229-0.805l0.457-0.154l0.463-0.152l0.422-0.152l0.418-0.115l0.348-0.113 l0.381-0.115l0.306-0.076l0.27-0.077z"/>
|
||||
<path fill="url(#AIgd31)" d="M135.285,19.792l0.231,0.765l0.227,0.959l0.155,1.073l0.072,1.186l0.041,1.303l-0.002,1.301l-0.116,1.301l-0.192,1.267l-0.271,1.187l-0.345,1.109l-0.499,0.957l-0.572,0.766l-0.731,0.574l-0.84,0.304l-0.96,0.04l-1.108-0.307l0.422-0.691 l0.421-0.727l0.347-0.766l0.307-0.727l0.229-0.803l0.231-0.768l0.152-0.805l0.154-0.805l0.077-0.804l0.038-0.841v-0.805l-0.073-0.842l-0.076-0.842l-0.152-0.806l-0.152-0.845l-0.229-0.803l0.383-0.152l0.458-0.152l0.461-0.153l0.46-0.153l0.46-0.151l0.382-0.153 l0.346-0.117l0.267-0.074z"/>
|
||||
<path fill="url(#AIgd31)" d="M125.546,35.674l1.036,0.08l0.997-0.154l0.879-0.381l0.805-0.535l0.766-0.73l0.652-0.879l0.536-0.994l0.499-1.109l0.384-1.188l0.309-1.266l0.192-1.3l0.078-1.302l0.001-1.301l-0.114-1.303l-0.229-1.265l-0.343-1.188l-0.422,0.152 l-0.425,0.154l-0.456,0.114l-0.463,0.152l-0.458,0.154l-0.497,0.153l-0.46,0.152l-0.497,0.152v0.804l-0.001,0.879l-0.04,0.999l-0.039,1.033l-0.039,1.033l-0.038,1.072l-0.116,1.11l-0.113,1.032l-0.156,1.035L127.62,32l-0.233,0.919l-0.268,0.806l-0.308,0.687 l-0.384,0.577l-0.421,0.419l-0.461,0.267z"/>
|
||||
<path fill="url(#AIgd35)" d="M128.277,22.083l-0.384,0.153l-0.383,0.114l-0.343,0.115l-0.386,0.077l-0.382,0.114l-0.347,0.113l-0.384,0.116l-0.38,0.153l-0.077,0.766l-0.041,0.84l-0.039,0.92l-0.038,0.958l-0.001,0.958l-0.001,1.031l-0.04,1.037l-0.039,0.994 l-0.076,0.997l-0.115,0.994l-0.193,0.919l-0.191,0.844l-0.305,0.802l-0.346,0.727l-0.422,0.616l-0.536,0.496l1.108-0.268l0.919-0.383l0.767-0.533l0.651-0.614l0.537-0.729l0.423-0.839l0.306-0.919l0.232-0.959l0.156-1.072l0.112-1.11l0.039-1.15l0.042-1.225 l0.037-1.225l0.039-1.264l0.001-1.264l0.078-1.303z"/>
|
||||
<path fill="url(#AIgd36)" d="M118.116,38.426l1.531-0.074l1.304-0.305l1.07-0.497l0.882-0.651l0.689-0.842l0.502-0.958l0.419-1.071l0.27-1.188l0.154-1.226l0.114-1.261l0.041-1.305l0.001-1.262l0.001-1.305l0.001-1.223l0.076-1.15l0.078-1.071l-0.421,0.114 l-0.383,0.113l-0.343,0.117l-0.387,0.113l-0.382,0.113l-0.343,0.115l-0.384,0.077l-0.423,0.114l0.039,0.113l0.075,0.269l0.078,0.423l0.114,0.537l0.074,0.688l0.078,0.768l0.039,0.881l-0.04,0.996l-0.114,1.035l-0.195,1.145l-0.347,1.189l-0.42,1.225l-0.614,1.265 l-0.766,1.339l-0.921,1.3l-1.15,1.339z"/>
|
||||
<path fill="url(#AIgd36)" d="M112.905,40.07l1.035,0.191l1.035-0.073l0.995-0.346l0.996-0.537l0.956-0.725l0.92-0.881l0.844-1.07l0.769-1.188l0.649-1.265l0.576-1.378l0.462-1.456l0.309-1.489l0.192-1.496l0.041-1.531l-0.152-1.454l-0.308-1.456l-3.638,1.146 l0.037,0.613l0.037,0.729l-0.038,0.801l-0.08,0.92l-0.112,0.958l-0.192,1.034l-0.192,1.072l-0.308,1.109l-0.347,1.109l-0.421,1.073l-0.461,1.071l-0.575,1.035l-0.612,0.995l-0.729,0.919l-0.805,0.841l-0.883,0.727z"/>
|
||||
<path fill="url(#AIgd38)" d="M118.662,24.987l-0.573,0.189l-0.729,0.191l-0.807,0.268l-0.84,0.229l-0.806,0.27l-0.804,0.227l-0.689,0.191l-0.537,0.115l-0.076,0.881l-0.042,0.955l-0.075,0.959l-0.038,0.995l-0.117,0.995l-0.077,1.037l-0.115,0.994l-0.153,0.996 l-0.19,0.956l-0.232,0.921l-0.309,0.916l-0.344,0.842l-0.422,0.807l-0.498,0.688l-0.536,0.65l-0.65,0.576l0.766,0.114l0.803-0.038l0.804-0.19l0.805-0.343l0.804-0.5l0.807-0.612l0.768-0.763l0.766-0.958l0.689-1.034l0.611-1.227l0.578-1.339l0.495-1.528 l0.388-1.65l0.307-1.758l0.194-1.955l0.077-2.066z"/>
|
||||
<path fill="url(#AIgd36)" d="M103.98,41.593l1.725,0.081l1.455-0.154l1.265-0.418l0.998-0.653l0.841-0.802l0.691-0.958l0.497-1.072l0.386-1.224l0.308-1.225l0.19-1.343l0.116-1.3l0.117-1.302l0.038-1.303l0.078-1.188l0.075-1.11l0.117-0.995l-0.535,0.114l-0.463,0.115 l-0.419,0.153l-0.418,0.112l-0.463,0.117l-0.422,0.111l-0.496,0.154l-0.576,0.151l-0.116,1.038l-0.112,0.992l-0.116,0.996l-0.156,0.955l-0.116,0.961l-0.153,0.918l-0.189,0.879l-0.194,0.881l-0.269,0.844l-0.308,0.841l-0.382,0.805l-0.422,0.806l-0.536,0.801 l-0.576,0.767l-0.689,0.728l-0.77,0.726z"/>
|
||||
<path fill="url(#AIgd38)" d="M99.349,42.433l1.532,0.078l1.34-0.192l1.188-0.418l1.036-0.65l0.88-0.805l0.766-0.957l0.615-1.107l0.537-1.188l0.458-1.227l0.347-1.3l0.269-1.266l0.194-1.299l0.19-1.226l0.116-1.15l0.116-1.073l0.079-0.919l-0.539,0.117l-0.459,0.112 l-0.42,0.115l-0.423,0.077l-0.38,0.113l-0.425,0.074l-0.495,0.152l-0.576,0.115l-0.192,1.496l-0.229,1.417l-0.27,1.301l-0.269,1.226l-0.31,1.109l-0.345,1.071l-0.383,0.919l-0.384,0.883l-0.383,0.803l-0.425,0.727l-0.459,0.613l-0.422,0.573l-0.459,0.536 l-0.461,0.42l-0.498,0.383l-0.459,0.345z"/>
|
||||
<path fill="url(#AIgd41)" d="M94.98,43.004l1.457,0.078l1.302-0.189l1.151-0.424l1.071-0.611l0.881-0.802l0.805-0.919l0.69-1.072l0.614-1.146l0.535-1.189l0.422-1.263l0.347-1.264l0.308-1.262l0.271-1.188l0.192-1.149l0.152-1.031l0.155-0.922l-0.459,0.076l-0.46,0.116 l-0.462,0.114l-0.459,0.115l-0.462,0.115l-0.458,0.112l-0.46,0.114l-0.497,0.117l-0.038,0.725l-0.116,0.805l-0.153,0.843l-0.269,0.918l-0.27,0.995l-0.382,0.957l-0.385,1.033l-0.422,0.998l-0.499,0.996l-0.537,0.957l-0.534,0.879l-0.577,0.84l-0.574,0.806 l-0.614,0.69l-0.649,0.572l-0.617,0.459z"/>
|
||||
<path fill="url(#AIgd42)" d="M90.197,43.881l1.49,0.193l1.38-0.191l1.264-0.496l1.15-0.766l1.073-0.955l0.921-1.148l0.84-1.301l0.77-1.341l0.613-1.415l0.537-1.381l0.46-1.302l0.384-1.262l0.23-1.074l0.192-0.88l0.114-0.65l0.001-0.381l-0.573,0.111l-0.537,0.115 l-0.535,0.152l-0.536,0.115l-0.536,0.152l-0.5,0.113l-0.497,0.115l-0.499,0.078l-0.191,0.651l-0.19,0.765l-0.229,0.879l-0.271,0.996l-0.308,1.035l-0.343,1.071l-0.384,1.069l-0.424,1.114l-0.461,1.07l-0.497,0.995l-0.537,0.959l-0.574,0.842l-0.653,0.725 l-0.65,0.574l-0.728,0.422l-0.765,0.229z"/>
|
||||
<path fill="url(#AIgd42)" d="M86.712,43.688l1.377,0.307l1.223,0.001l1.113-0.267l1.034-0.535l0.882-0.729l0.805-0.881l0.727-1.068l0.652-1.15l0.539-1.226l0.498-1.261l0.384-1.265l0.385-1.227l0.307-1.147l0.231-1.035l0.23-0.918l0.189-0.727l-0.419,0.076 l-0.423,0.038l-0.38,0.075l-0.347,0.076l-0.384,0.076l-0.346,0.078l-0.305,0.074l-0.345,0.041l-0.118,0.879l-0.189,0.919l-0.232,0.917l-0.228,0.883l-0.309,0.918l-0.347,0.881l-0.382,0.844l-0.461,0.842l-0.46,0.842l-0.537,0.804l-0.615,0.765l-0.61,0.688 l-0.729,0.69l-0.727,0.611l-0.806,0.574l-0.879,0.535z"/>
|
||||
<path fill="url(#AIgd38)" d="M82.345,44.374l1.147,0.002l1.112-0.115l1.07-0.268l1.037-0.384l0.956-0.533l0.959-0.65l0.842-0.763l0.841-0.842l0.73-0.96l0.69-1.032l0.614-1.15l0.573-1.186l0.461-1.264l0.385-1.34l0.347-1.379l0.23-1.414l-0.498,0.113l-0.499,0.076 l-0.536,0.115l-0.496,0.074l-0.497,0.078l-0.459,0.112l-0.5,0.077l-0.459,0.115l-0.231,0.805l-0.191,0.842l-0.231,0.805l-0.194,0.803l-0.23,0.804l-0.228,0.804l-0.307,0.766l-0.346,0.804l-0.42,0.767l-0.463,0.803l-0.576,0.766l-0.688,0.766l-0.768,0.729 l-0.918,0.765l-1.073,0.766l-1.188,0.726z"/>
|
||||
<path fill="url(#AIgd38)" d="M76.14,45.095l1.495,0.118l1.454-0.076l1.34-0.229l1.266-0.382l1.187-0.497l1.112-0.649l1.033-0.768l0.918-0.917l0.844-0.955l0.767-1.073l0.693-1.148l0.573-1.222l0.496-1.304l0.425-1.34l0.307-1.377l0.233-1.381l-0.423,0.076l-0.46,0.117 l-0.456,0.074l-0.461,0.075l-0.459,0.078l-0.5,0.114l-0.497,0.076l-0.5,0.115l-0.152,0.955l-0.23,0.957l-0.31,0.96l-0.383,0.917l-0.457,0.918l-0.502,0.918l-0.574,0.882l-0.648,0.843l-0.691,0.844l-0.767,0.762l-0.808,0.727l-0.879,0.689l-0.921,0.611 l-0.995,0.575l-0.997,0.497l-1.072,0.419z"/>
|
||||
<path fill="url(#AIgd36)" d="M72.732,45.475l1.264-0.075l1.226-0.189l1.228-0.306l1.186-0.458l1.112-0.536l1.109-0.648l1.034-0.729l0.958-0.842l0.881-0.917l0.843-0.993l0.73-1.076l0.65-1.109l0.536-1.184l0.46-1.226l0.348-1.267l0.229-1.299l-0.419,0.074l-0.385,0.037 l-0.346,0.039l-0.343,0.039l-0.346,0.037l-0.382,0.077L83.849,33l-0.539,0.075l-0.537,1.112l-0.459,1.031l-0.46,0.997l-0.422,0.919l-0.46,0.881l-0.424,0.805l-0.461,0.764l-0.498,0.727l-0.537,0.729l-0.613,0.649l-0.688,0.69l-0.765,0.611l-0.884,0.65 l-0.996,0.611l-1.108,0.612l-1.265,0.61z"/>
|
||||
<path fill="url(#AIgd38)" d="M66.604,45.855l1.877,0.077l1.763-0.073l1.57-0.267l1.455-0.422l1.34-0.572l1.187-0.691l1.113-0.801l0.993-0.92l0.921-0.993l0.844-1.072l0.729-1.109l0.688-1.189l0.652-1.184l0.577-1.187l0.538-1.227l0.496-1.187l-0.343,0.036l-0.461,0.078 l-0.573,0.076l-0.575,0.076l-0.613,0.115l-0.537,0.076l-0.456,0.076l-0.347,0.035l-0.46,1.074l-0.499,1.074l-0.577,0.994l-0.573,0.955l-0.652,0.881l-0.688,0.879l-0.729,0.804l-0.804,0.807l-0.804,0.727l-0.885,0.688l-0.917,0.688l-0.96,0.613l-0.995,0.572 l-1.072,0.535l-1.072,0.496l-1.149,0.46z"/>
|
||||
<path fill="url(#AIgd36)" d="M62.966,46.387L64,46.35l1.071-0.152l1.15-0.269l1.186-0.419l1.188-0.495l1.189-0.613l1.188-0.726l1.187-0.803l1.149-0.918l1.111-0.957l1.035-1.07l0.999-1.15l0.879-1.188l0.804-1.262l0.691-1.34l0.576-1.38l-0.575,0.079l-0.575,0.074 l-0.611,0.037l-0.612,0.077l-0.536,0.037l-0.461,0.077l-0.382,0.076l-0.192,0.115l-0.69,0.535l-0.689,0.575l-0.729,0.688l-0.729,0.688l-0.727,0.766l-0.767,0.802l-0.767,0.844l-0.768,0.845l-0.766,0.879l-0.804,0.842l-0.805,0.842l-0.845,0.84l-0.842,0.843 l-0.845,0.763L63.848,45.7l-0.882,0.688z"/>
|
||||
<path fill="url(#AIgd38)" d="M57.375,46.383l0.997,0.654l1.032,0.268l1.034,0.001l1.073-0.268l1.071-0.536l1.073-0.729l1.111-0.916l1.11-1.033l1.112-1.188l1.148-1.225l1.189-1.301l1.188-1.299l1.188-1.264l1.226-1.264l1.228-1.148l1.226-1.031h-0.425l-0.494,0.074 l-0.576,0.038l-0.573,0.116L72.7,34.411l-0.612,0.113l-0.572,0.115l-0.5,0.075l-0.956,0.88l-0.957,0.88l-0.923,0.919l-0.919,0.919l-0.881,0.916l-0.883,0.921l-0.88,0.92l-0.845,0.84l-0.844,0.84l-0.842,0.768l-0.805,0.688l-0.804,0.613l-0.805,0.535l-0.767,0.459 l-0.766,0.343l-0.767,0.229z"/>
|
||||
<path fill="url(#AIgd36)" d="M53.046,46.879l1.572,0.001l1.492-0.151l1.342-0.385l1.304-0.494l1.187-0.614l1.109-0.765l1.075-0.84l0.995-0.92l0.997-0.994l0.956-1.033l0.921-1.035l0.959-1.07l0.959-1.07l0.994-1.034l1.035-0.957l1.072-0.918l-0.382,0.04l-0.458,0.037 l-0.577,0.074l-0.572,0.041l-0.577,0.073l-0.459,0.038l-0.382,0.041l-0.229-0.001l-0.651,0.151L66.076,35.4l-0.649,0.423l-0.692,0.573l-0.689,0.687l-0.729,0.805l-0.766,0.844l-0.769,0.915l-0.88,0.958l-0.883,0.955l-0.997,0.996l-1.032,0.959l-1.111,0.955 l-1.188,0.88l-1.264,0.802l-1.381,0.729z"/>
|
||||
<path fill="url(#AIgd18)" d="M138.274,15.35v-0.153l0.04-0.42l0.038-0.649l0.04-0.807l0.039-0.957l-0.037-1.033l-0.038-1.072l-0.111-1.111l-0.229-1.033l-0.309-0.996l-0.38-0.882l-0.572-0.728l-0.654-0.537l-0.843-0.307l-1.034-0.039l-1.186,0.306l0.385,0.384 l0.343,0.459l0.345,0.574l0.306,0.613l0.305,0.689l0.27,0.689l0.264,0.767l0.271,0.804l0.228,0.767l0.19,0.806l0.194,0.803l0.188,0.766l0.155,0.768l0.152,0.727l0.114,0.65l0.113,0.613l0.19-0.037l0.154-0.037l0.189-0.078l0.155-0.037l0.151-0.079l0.155-0.075 l0.192-0.037l0.226-0.078z"/>
|
||||
<path fill="url(#AIgd52)" d="M136.86,15.925l-0.497-2.489l-0.535-2.108l-0.535-1.801l-0.532-1.492l-0.539-1.188l-0.534-0.958l-0.533-0.689l-0.499-0.497l-0.536-0.347l-0.458-0.153l-0.502-0.039l-0.42,0.078l-0.419,0.152l-0.382,0.191l-0.348,0.229l-0.306,0.23 l0.536,0.497l0.533,0.573l0.462,0.538l0.494,0.611l0.424,0.615l0.422,0.648l0.382,0.652l0.344,0.691l0.344,0.727l0.306,0.766l0.307,0.768l0.268,0.805l0.227,0.842l0.23,0.842l0.227,0.882l0.194,0.919l0.457-0.077l0.345-0.036l0.232-0.077l0.153-0.077l0.151-0.037 l0.156-0.076L136.632,16l0.229-0.075z"/>
|
||||
<path fill="url(#AIgd18)" d="M134.944,16.651l-0.113-0.918l-0.194-1.035l-0.305-1.15l-0.379-1.226l-0.5-1.264l-0.571-1.227l-0.611-1.187l-0.688-1.111l-0.729-0.996l-0.765-0.843l-0.803-0.65l-0.842-0.425l-0.881-0.152l-0.882,0.152l-0.842,0.499l-0.882,0.878 l0.688,0.498l0.65,0.576l0.613,0.574l0.574,0.576l0.574,0.611l0.496,0.689l0.459,0.691l0.42,0.688l0.423,0.769l0.343,0.767l0.345,0.805l0.267,0.842l0.267,0.879l0.193,0.92l0.189,0.959l0.155,0.994l0.416-0.114l0.461-0.152l0.499-0.153l0.498-0.191l0.461-0.189 l0.421-0.154l0.344-0.151l0.23-0.077z"/>
|
||||
<path fill="url(#AIgd52)" d="M120.017,6.607l0.919-0.612l0.92-0.344l0.957-0.115l0.919,0.115l0.958,0.307l0.919,0.5l0.882,0.689l0.843,0.805l0.762,0.919l0.766,1.073l0.65,1.188l0.572,1.226l0.496,1.305l0.384,1.376l0.306,1.38l0.151,1.416l-0.46,0.115l-0.459,0.116 l-0.46,0.15l-0.46,0.154l-0.497,0.191l-0.499,0.113l-0.457,0.154l-0.498,0.075l-0.346-0.88l-0.305-0.959l-0.383-0.957l-0.348-0.957l-0.379-0.996l-0.419-0.998l-0.423-0.956l-0.421-0.918l-0.456-0.884l-0.499-0.805l-0.533-0.766l-0.539-0.651l-0.609-0.575 l-0.615-0.459l-0.648-0.346l-0.69-0.19z"/>
|
||||
<path fill="url(#AIgd18)" d="M115.804,7.75l1.455-0.648l1.302-0.344l1.149-0.038l1.034,0.193l0.919,0.421l0.806,0.65l0.724,0.807l0.65,0.957l0.575,1.072l0.495,1.188l0.5,1.229l0.457,1.225l0.457,1.264l0.421,1.264l0.459,1.188l0.497,1.111l-0.421,0.037l-0.384,0.115 l-0.383,0.113l-0.385,0.152l-0.381,0.118l-0.384,0.151l-0.421,0.114l-0.422,0.074l-0.038-0.151l-0.038-0.383l-0.114-0.498l-0.114-0.689l-0.189-0.803l-0.27-0.92l-0.306-0.996l-0.42-1.034l-0.494-1.034l-0.574-1.035l-0.728-1.035l-0.803-0.958l-0.96-0.918 l-1.07-0.767l-1.228-0.691l-1.375-0.5z"/>
|
||||
<path fill="url(#AIgd52)" d="M110.366,8.552l0.882-0.651l0.997-0.42l1.069-0.153l1.072,0.04l1.149,0.229l1.148,0.461l1.108,0.615l1.111,0.768l1.07,0.956l0.997,1.075l0.878,1.225l0.805,1.342l0.687,1.416l0.537,1.533l0.342,1.57l0.19,1.687l-3.945,1.029l-0.228-0.649 l-0.307-0.77l-0.306-0.803l-0.382-0.881l-0.461-0.92l-0.457-0.956l-0.537-0.961l-0.573-0.956l-0.652-0.957l-0.725-0.92l-0.766-0.842l-0.803-0.808l-0.878-0.728l-0.959-0.613l-0.996-0.537l-1.07-0.421z"/>
|
||||
<path fill="url(#AIgd18)" d="M120.502,21.387l-0.572,0.115l-0.727,0.152l-0.729,0.23l-0.808,0.229l-0.764,0.267l-0.729,0.191l-0.649,0.189l-0.536,0.152l-0.382-0.957l-0.421-0.995l-0.422-0.996l-0.42-1.036l-0.421-1.032l-0.458-0.997l-0.498-0.995l-0.497-0.997 l-0.533-0.918l-0.573-0.845l-0.614-0.804l-0.651-0.727l-0.65-0.652l-0.728-0.537l-0.804-0.423l-0.804-0.306l0.692-0.459l0.764-0.344l0.806-0.23l0.88-0.075l0.918,0.076l0.959,0.231l0.957,0.383l0.992,0.576l0.999,0.728l0.993,0.92l0.995,1.149l0.954,1.304 l0.919,1.532l0.917,1.723l0.843,1.992l0.802,2.184z"/>
|
||||
<path fill="url(#AIgd18)" d="M101.288,11.34l1.571-0.841l1.415-0.498l1.304-0.114l1.187,0.193l1.032,0.458l0.996,0.691l0.841,0.883l0.805,1.073l0.688,1.188l0.649,1.265l0.573,1.341l0.534,1.34l0.536,1.302l0.498,1.265l0.458,1.148l0.456,1.035l-0.534,0.076 l-0.459,0.112l-0.422,0.079l-0.422,0.114l-0.421,0.114l-0.459,0.115l-0.498,0.076l-0.572,0.112l-0.5-1.033l-0.458-1.036l-0.46-0.994l-0.458-0.958l-0.459-0.958l-0.495-0.88l-0.5-0.881l-0.495-0.806l-0.575-0.807l-0.61-0.727l-0.612-0.688l-0.688-0.652 l-0.769-0.615l-0.801-0.536l-0.92-0.498l-0.956-0.46z"/>
|
||||
<path fill="url(#AIgd52)" d="M96.537,12.715l1.419-0.765l1.339-0.383l1.265-0.075l1.225,0.191l1.111,0.461l1.069,0.689l0.996,0.844l0.921,0.998l0.841,1.149l0.802,1.187l0.726,1.227l0.652,1.264l0.611,1.266l0.537,1.148l0.455,1.111l0.423,0.957l-0.574,0.113 l-0.5,0.115l-0.46,0.113l-0.421,0.076l-0.458,0.115l-0.461,0.115l-0.536,0.076l-0.613,0.115l-0.688-1.533l-0.688-1.417l-0.646-1.302l-0.651-1.188l-0.614-1.071l-0.573-0.961l-0.61-0.84l-0.574-0.807l-0.612-0.651l-0.613-0.575l-0.611-0.498l-0.65-0.421 l-0.653-0.308l-0.685-0.269l-0.731-0.155l-0.765-0.113z"/>
|
||||
<path fill="url(#AIgd18)" d="M92.937,13.747l1.378-0.65l1.307-0.308l1.222,0.001l1.19,0.233l1.07,0.458l1.033,0.654l0.956,0.844l0.92,0.957l0.802,1.072l0.766,1.148l0.726,1.188l0.613,1.188l0.609,1.189l0.5,1.15l0.456,1.033l0.421,0.959l-0.459,0.113l-0.42,0.113 l-0.424,0.076l-0.383,0.116l-0.421,0.077l-0.42,0.075l-0.462,0.113l-0.496,0.077l-0.231-0.765l-0.342-0.845l-0.42-0.842l-0.497-0.919l-0.535-0.919l-0.651-0.921l-0.649-0.92l-0.728-0.92l-0.765-0.841l-0.805-0.846l-0.803-0.766l-0.804-0.652l-0.843-0.613 l-0.805-0.498l-0.802-0.383l-0.806-0.23z"/>
|
||||
<path fill="url(#AIgd52)" d="M88.608,14.852l1.417-0.762l1.38-0.345l1.379,0.039l1.301,0.385l1.264,0.612l1.226,0.879l1.149,1.038l1.069,1.147l0.995,1.229l0.881,1.264l0.8,1.227l0.65,1.187l0.536,1.036l0.422,0.879l0.23,0.652l0.113,0.383l-0.574,0.115l-0.498,0.113 l-0.498,0.115l-0.5,0.115l-0.496,0.115l-0.459,0.074l-0.499,0.077l-0.497,0.076l-0.344-0.651l-0.384-0.804l-0.458-0.882l-0.537-0.921l-0.571-1.033l-0.614-1.034l-0.646-0.997l-0.691-1.034l-0.727-0.959l-0.767-0.881l-0.802-0.804l-0.803-0.652l-0.844-0.537 l-0.844-0.345l-0.878-0.152l-0.882,0.035z"/>
|
||||
<path fill="url(#AIgd18)" d="M85.468,16.077l1.266-0.842l1.224-0.459l1.149-0.113l1.149,0.19l1.071,0.461l1.033,0.692l0.958,0.842l0.915,1.035l0.844,1.113l0.805,1.184l0.727,1.229l0.687,1.225l0.574,1.15l0.535,1.073l0.421,0.918l0.383,0.766l-0.46,0.077l-0.382,0.114 l-0.344,0.115l-0.308,0.113l-0.347,0.114l-0.305,0.115l-0.308,0.078l-0.343,0.073l-0.344-0.955l-0.421-0.958l-0.422-0.921l-0.46-0.918l-0.537-0.919l-0.531-0.844l-0.613-0.844l-0.65-0.805l-0.689-0.767l-0.764-0.688l-0.765-0.614l-0.844-0.574l-0.919-0.5 l-0.919-0.421l-0.996-0.308l-1.071-0.229z"/>
|
||||
<path fill="url(#AIgd52)" d="M81.483,16.993l1.113-0.422l1.109-0.266l1.148-0.077l1.074,0.078l1.109,0.231l1.032,0.345l1.034,0.536l1.034,0.652l0.956,0.768l0.918,0.92l0.881,0.996l0.842,1.112l0.802,1.226l0.689,1.34l0.688,1.418l0.571,1.491l-0.498,0.077 l-0.495,0.076l-0.501,0.115l-0.497,0.153l-0.496,0.115l-0.498,0.153l-0.497,0.115l-0.5,0.074l-0.343-0.842l-0.343-0.882l-0.347-0.843l-0.342-0.883l-0.422-0.842l-0.419-0.805l-0.501-0.842l-0.534-0.767l-0.649-0.729l-0.688-0.728l-0.805-0.652l-0.88-0.613 l-0.996-0.537l-1.11-0.498l-1.261-0.424l-1.381-0.344z"/>
|
||||
<path fill="url(#AIgd18)" d="M75.815,18.329l1.455-0.609l1.457-0.385l1.34-0.189l1.34-0.037l1.265,0.191l1.226,0.346l1.147,0.498l1.111,0.652l0.992,0.805l0.994,0.919l0.884,1.036l0.84,1.15l0.764,1.264l0.652,1.34l0.611,1.381l0.535,1.491l-0.459,0.077l-0.46,0.076 l-0.536,0.078l-0.501,0.074l-0.533,0.078l-0.538,0.074l-0.535,0.076l-0.535,0.076l-0.269-1.072l-0.383-0.994l-0.42-0.996l-0.533-0.959l-0.575-0.881L85.5,23.046l-0.688-0.805l-0.766-0.729l-0.842-0.689l-0.916-0.574l-0.959-0.539l-0.995-0.459l-1.071-0.346 l-1.112-0.307l-1.146-0.191l-1.188-0.078z"/>
|
||||
<path fill="url(#AIgd52)" d="M73.021,18.632l1.302-0.19l1.262-0.113l1.263,0.039l1.228,0.154l1.224,0.307l1.15,0.385l1.109,0.498l1.073,0.613l0.995,0.729l0.954,0.844l0.844,0.919l0.803,1.034L86.916,25l0.611,1.226l0.499,1.341l0.38,1.419l-0.46,0.035l-0.383,0.038 l-0.382,0.077l-0.384,0.077l-0.384,0.074l-0.382,0.078l-0.46,0.114l-0.496,0.076l-0.651-1.111l-0.613-1.073l-0.532-0.958l-0.5-0.956l-0.535-0.844l-0.498-0.804l-0.497-0.767l-0.572-0.69l-0.612-0.651l-0.688-0.575l-0.768-0.535l-0.842-0.498l-0.995-0.425 L75.7,19.286l-1.264-0.346l-1.415-0.308z"/>
|
||||
<path fill="url(#AIgd18)" d="M66.933,19.432l1.914-0.457l1.8-0.268l1.646-0.075l1.531,0.154l1.417,0.307l1.302,0.461l1.187,0.573l1.074,0.77l1.03,0.842l0.917,0.96l0.844,1.034l0.802,1.112l0.728,1.147l0.688,1.227l0.612,1.226l0.611,1.265l-0.307,0.037l-0.42,0.037 l-0.459,0.115l-0.501,0.076l-0.496,0.115l-0.462,0.114l-0.419,0.036l-0.346,0.039l-0.571-1.148l-0.613-1.035L79.753,27.1l-0.726-0.918l-0.766-0.883l-0.805-0.806l-0.879-0.726l-0.919-0.69l-0.956-0.616l-0.996-0.573l-1.034-0.498l-1.07-0.498l-1.111-0.423 l-1.147-0.383l-1.189-0.346l-1.222-0.309z"/>
|
||||
<path fill="url(#AIgd18)" d="M63.295,19.811l1.068-0.189l1.113-0.037l1.225,0.038l1.263,0.192l1.267,0.271l1.3,0.384l1.303,0.497l1.302,0.614l1.3,0.729l1.224,0.845l1.186,0.92l1.147,1.035l1.035,1.149l0.956,1.225l0.841,1.342l0.728,1.455l-0.537,0.039l-0.533,0.076 l-0.538,0.115l-0.536,0.113l-0.459,0.113l-0.385,0.117l-0.306,0.036l-0.19-0.037l-0.769-0.46l-0.763-0.537l-0.804-0.613l-0.843-0.689l-0.843-0.729l-0.878-0.768l-0.92-0.768l-0.916-0.802l-0.959-0.806l-0.956-0.807l-0.995-0.803l-0.996-0.729l-1.033-0.729 l-0.995-0.652l-1.071-0.613l-1.031-0.537z"/>
|
||||
<path fill="url(#AIgd18)" d="M58.197,21.262l0.958-0.955l1.034-0.572l1.074-0.23l1.109,0.077l1.148,0.308l1.225,0.575l1.227,0.769l1.3,0.879l1.301,1.074l1.341,1.11l1.34,1.19l1.34,1.188l1.377,1.188l1.377,1.112l1.376,1.035l1.381,0.92l-0.421,0.074l-0.499,0.037 l-0.612,0.041l-0.613,0.037l-0.648,0.037h-0.653h-0.574l-0.497-0.002l-1.034-0.766l-0.993-0.804l-0.996-0.808l-0.918-0.842l-0.919-0.805l-0.883-0.807l-0.878-0.805l-0.88-0.767l-0.919-0.688l-0.879-0.651l-0.92-0.575l-0.956-0.5l-0.996-0.422l-1.034-0.345 l-1.073-0.192l-1.11-0.117z"/>
|
||||
<path fill="url(#AIgd69)" d="M54.368,21.719l1.61-0.381l1.493-0.152l1.415,0.076l1.343,0.271l1.262,0.461l1.226,0.575l1.186,0.729l1.148,0.805l1.11,0.919l1.109,0.922l1.071,0.995l1.111,0.996l1.109,0.958l1.107,0.959l1.188,0.843l1.185,0.807l-0.38,0.037l-0.498,0.075 l-0.576,0.078l-0.576,0.036l-0.572,0.079l-0.5,0.072l-0.38,0.041l-0.231,0.037l-0.688-0.002l-0.69-0.189l-0.727-0.348l-0.766-0.496l-0.766-0.614l-0.843-0.728l-0.879-0.807l-0.919-0.844l-0.959-0.881l-1.031-0.918l-1.109-0.882l-1.148-0.844l-1.262-0.808 l-1.302-0.728l-1.379-0.651l-1.494-0.5z"/>
|
||||
<path fill="url(#AIgd69)" d="M49.543,23.057l1.417-0.805l1.495-0.342h1.455l1.49,0.309l1.495,0.576l1.494,0.804l1.454,0.96l1.415,1.034l1.339,1.149l1.302,1.15l1.263,1.075l1.148,0.993l1.033,0.844l0.956,0.65l0.843,0.385l0.726,0.116l-0.61,0.077l-0.653,0.113 l-0.727,0.113l-0.765,0.117l-0.767,0.074l-0.767,0.115l-0.728,0.038L64.2,32.642l-1.07-0.806l-0.958-0.766l-0.879-0.767l-0.84-0.728l-0.767-0.73L58.96,28.12l-0.767-0.691l-0.726-0.651l-0.729-0.612l-0.804-0.576l-0.841-0.537l-0.919-0.496l-0.996-0.461 l-1.071-0.383l-1.226-0.348l-1.34-0.307z"/>
|
||||
<g fill="url(#AIgd71)">
|
||||
<path d="M142.305,7.35l0.191-0.383l0.153-0.42l0.152-0.423l0.113-0.421l0.117-0.459l0.115-0.496l0.077-0.459l0.042-0.5l0.036-0.459l0.035-0.498l0.001-0.499l-0.035-0.46l-0.036-0.459l-0.08-0.457l-0.112-0.461l-0.114-0.42l0.611,0.804l0.459,0.882 l0.345,0.842l0.189,0.88l0.076,0.919v0.92l-0.116,0.918l-0.194,0.92l-0.228,0.918l-0.31,0.883l-0.343,0.879l-0.343,0.88l-0.385,0.843l-0.347,0.842l-0.346,0.765l-0.343,0.767l0.074-0.152l0.037-0.269l0.042-0.266v-0.345l0.037-0.424V12.06V11.6l0.001-0.496 l0.038-0.499v-0.498l0.039-0.534l0.04-0.498l0.038-0.461l0.078-0.461l0.075-0.42l0.116-0.383z"/>
|
||||
<path d="M153.974,23.252l-0.729-0.422l-0.729-0.462l-0.687-0.421l-0.688-0.422l-0.65-0.383l-0.651-0.422l-0.616-0.385l-0.609-0.42l-0.653-0.384l-0.607-0.384l-0.614-0.422l-0.652-0.382l-0.611-0.386l-0.654-0.342l-0.686-0.386l-0.689-0.382 l0.61,0.61l0.613,0.616l0.613,0.611l0.612,0.576l0.65,0.611l0.651,0.536l0.65,0.539l0.688,0.497l0.651,0.461l0.689,0.383l0.651,0.346l0.688,0.269l0.688,0.229l0.688,0.115l0.691,0.037l0.691-0.035z"/>
|
||||
<path d="M148.277,7.928l-0.536,0.308l-0.5,0.345l-0.495,0.345l-0.461,0.344l-0.46,0.343l-0.419,0.383l-0.424,0.421l-0.423,0.383l-0.384,0.422l-0.384,0.422l-0.382,0.421l-0.345,0.457l-0.383,0.422l-0.346,0.459l-0.344,0.459l-0.346,0.459 l0.153-0.496l0.192-0.499l0.191-0.537l0.229-0.534l0.231-0.536l0.265-0.499l0.31-0.498l0.346-0.495l0.382-0.46l0.461-0.381l0.498-0.385l0.537-0.344l0.612-0.269l0.652-0.229l0.765-0.152l0.805-0.076z"/>
|
||||
<path d="M142.574,3.329l-0.153,0.767l-0.114,0.767l-0.154,0.766l-0.116,0.689l-0.076,0.727l-0.114,0.689l-0.079,0.689l-0.115,0.689L141.576,9.8l-0.117,0.689l-0.074,0.651l-0.118,0.689l-0.116,0.689l-0.115,0.689l-0.15,0.689l-0.157,0.727 l-0.076-0.842l-0.113-0.805l-0.077-0.843l-0.076-0.841l-0.037-0.807l-0.038-0.805l0.039-0.805l0.039-0.764l0.076-0.767l0.116-0.688l0.194-0.689l0.229-0.651l0.269-0.573l0.384-0.537l0.422-0.46l0.497-0.421z"/>
|
||||
<path d="M146.674,2.071l0.692,0.648l0.416,0.729l0.189,0.766l0.04,0.805l-0.153,0.804l-0.307,0.843l-0.424,0.844l-0.498,0.841l-0.575,0.804l-0.611,0.805l-0.653,0.764l-0.65,0.689l-0.614,0.689l-0.534,0.572l-0.463,0.539l-0.383,0.418l0.077-1.147 l0.154-0.995l0.191-0.844l0.307-0.764l0.306-0.65l0.386-0.574l0.382-0.535l0.424-0.501l0.383-0.496l0.424-0.495l0.382-0.538l0.307-0.613l0.307-0.688l0.23-0.766l0.194-0.919l0.075-1.032z"/>
|
||||
<path d="M141.763,14.319v-0.805l-0.039-0.765l-0.034-0.765l-0.04-0.768l-0.036-0.729l-0.077-0.727l-0.076-0.727l-0.073-0.691l-0.117-0.688l-0.114-0.728l-0.189-0.689l-0.152-0.689L140.62,4.86l-0.268-0.689l-0.229-0.689l-0.306-0.689l1.111,1.073 l0.918,1.034l0.649,0.959l0.457,0.92l0.309,0.879l0.151,0.805l0.037,0.806l-0.077,0.727l-0.195,0.689l-0.187,0.651l-0.27,0.613l-0.271,0.533l-0.23,0.537l-0.229,0.459l-0.152,0.459l-0.078,0.383z"/>
|
||||
<path d="M152.982,16.97l-0.613,0.114l-0.614,0.116l-0.611,0.075l-0.613,0.075l-0.609,0.038l-0.616,0.037h-0.613h-0.575l-0.612-0.039h-0.574l-0.613-0.077l-0.573-0.038l-0.613-0.04l-0.575-0.075l-0.612-0.079l-0.574-0.075l0.498,0.229l0.498,0.192 l0.535,0.231l0.537,0.19l0.574,0.193l0.576,0.151l0.61,0.156l0.61,0.076l0.612,0.039h0.651l0.651-0.039l0.654-0.15l0.651-0.191l0.651-0.27l0.648-0.381l0.654-0.46z"/>
|
||||
<path d="M149.417,20.07l0.461,0.078l0.419,0.075l0.461,0.115l0.457,0.115l0.463,0.194l0.456,0.151l0.421,0.191l0.46,0.23l0.421,0.23l0.421,0.267l0.383,0.271l0.386,0.268l0.343,0.307l0.308,0.307l0.304,0.307l0.27,0.344l-0.269-0.917l-0.422-0.808 l-0.494-0.688l-0.615-0.651l-0.688-0.536l-0.768-0.5L151.754,19l-0.882-0.347l-0.919-0.306l-0.919-0.307l-0.955-0.231l-0.958-0.23l-0.957-0.193l-0.919-0.189l-0.843-0.154l-0.842-0.192l0.42,0.153l0.574,0.306l0.69,0.463l0.841,0.497l0.843,0.535l0.879,0.499 l0.842,0.46l0.768,0.308z"/>
|
||||
<path d="M151.174,26.926l0.345-0.881l0.117-0.844l-0.116-0.842l-0.307-0.766l-0.457-0.729l-0.612-0.727l-0.728-0.69l-0.804-0.614l-0.843-0.613l-0.879-0.536l-0.919-0.538l-0.884-0.459l-0.801-0.42l-0.767-0.387l-0.651-0.344l-0.496-0.309 l0.532,1.113l0.538,0.919l0.573,0.728l0.536,0.652l0.574,0.498l0.574,0.459l0.574,0.346l0.574,0.346l0.571,0.346l0.577,0.382l0.572,0.384l0.536,0.46l0.537,0.573l0.535,0.691l0.497,0.806l0.498,0.995z"/>
|
||||
<path d="M141.529,17.497l0.422,0.652l0.42,0.652l0.421,0.65l0.38,0.613l0.346,0.613l0.345,0.649l0.346,0.614l0.305,0.613l0.304,0.652l0.268,0.65l0.271,0.613l0.229,0.65l0.19,0.689l0.192,0.65l0.152,0.689l0.152,0.73l0.384-1.455l0.191-1.265 l0.041-1.149l-0.115-0.994l-0.229-0.844l-0.346-0.766l-0.42-0.652l-0.458-0.537l-0.538-0.499l-0.535-0.421l-0.573-0.346l-0.537-0.306l-0.496-0.306l-0.46-0.268l-0.342-0.307l-0.31-0.271z"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
||||
<!-- Circle, square and triangle -->
|
||||
<circle r="10" cx="188" cy="6" fill="none" stroke="red" stroke-width="1.5"/>
|
||||
<rect x="192" y="2" rx="2" ry="2" width="12" height="12" stroke="green"
|
||||
stroke-width="1.5" fill="none"/>
|
||||
<polygon points="202,12 210,12 202,4" stroke="blue" fill="none"
|
||||
stroke-linejoin="round"/>
|
||||
|
||||
<!-- The text -->
|
||||
<g font-weight="bold">
|
||||
<g letter-spacing="-0.25">
|
||||
<g font-size="11px" transform="translate(10,11)">
|
||||
<text fill="white" opacity="0.5" filter="url(#medGlow)"
|
||||
pointer-events="none">
|
||||
<tref xlink:href="#text1"/>
|
||||
</text>
|
||||
<text id="text1">
|
||||
The Apache
|
||||
</text>
|
||||
</g>
|
||||
<g font-size="16px" transform="translate(32,29)">
|
||||
<text fill="white" opacity="0.5" filter="url(#medGlow)"
|
||||
pointer-events="none">
|
||||
<tref xlink:href="#text2"/>
|
||||
</text>
|
||||
<text id="text2">
|
||||
XML Graphics Project
|
||||
</text>
|
||||
</g>
|
||||
</g>
|
||||
<text font-size="8px" fill="url(#silverGrad)">
|
||||
<tspan x="178" y="39"><?xml version</tspan>
|
||||
<tspan x="178" y="48"><!DOCTYPE</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g font-family="Arial" font-size="10px" transform="translate(2,47)">
|
||||
<text fill="none" stroke="white" stroke-width="2.5" opacity="0.75"
|
||||
pointer-events="none">
|
||||
<tref xlink:href="#text3"/>
|
||||
</text>
|
||||
<text id="text3" fill="#363636">http://xmlgraphics.apache.org/</text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 109 KiB |
Binary file not shown.
After Width: | Height: | Size: 689 B |
|
@ -0,0 +1,173 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<xsl:stylesheet
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
version="1.0">
|
||||
|
||||
<xsl:param name="path"/>
|
||||
<xsl:param name="versionNumber"/>
|
||||
<xsl:include href="dotdots.xsl"/> <!-- FIXME: howto include from forrest core -->
|
||||
|
||||
<!-- Calculate path to site root, eg '../../' -->
|
||||
<xsl:variable name="root">
|
||||
<xsl:call-template name="dotdots">
|
||||
<xsl:with-param name="path" select="$path"/>
|
||||
</xsl:call-template>
|
||||
</xsl:variable>
|
||||
|
||||
<!-- FIXME (JJP): bugzilla is hardwired -->
|
||||
<xsl:variable name="bugzilla" select="'http://issues.apache.org/bugzilla/buglist.cgi?bug_id='"/>
|
||||
|
||||
<xsl:param name="bugtracking-url" select="$bugzilla"/>
|
||||
|
||||
<xsl:template match="/">
|
||||
<xsl:apply-templates select="//changes"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="changes">
|
||||
<document>
|
||||
<header>
|
||||
<title>
|
||||
<xsl:choose>
|
||||
<xsl:when test="@title!=''">
|
||||
<xsl:value-of select="@title"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:text>History of Changes</xsl:text> <xsl:value-of select="$versionNumber"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</title>
|
||||
</header>
|
||||
<body>
|
||||
|
||||
<!--p><link href="changes.rss"><img src="{$root}images/rss.png" alt="RSS"/></link></p-->
|
||||
<xsl:choose>
|
||||
<xsl:when test="$versionNumber">
|
||||
<xsl:apply-templates select="release[@version=$versionNumber]"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:apply-templates/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</body>
|
||||
</document>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:key name="contextes" match="changes/release/action" use="concat(../@version, '_', @context)"/>
|
||||
|
||||
<xsl:template match="release">
|
||||
<section id="version_{@version}">
|
||||
<title>Version <xsl:value-of select="@version"/> (<xsl:value-of select="@date"/>)</title>
|
||||
<xsl:for-each select="action[generate-id()=generate-id(key('contextes',concat(../@version, '_', @context)))]">
|
||||
<xsl:sort select="@context"/>
|
||||
<section>
|
||||
<xsl:variable name="context" select="@context"/>
|
||||
<title>
|
||||
<xsl:choose>
|
||||
<xsl:when test="//contexts/context[@id=$context]">
|
||||
<xsl:value-of select="//contexts/context[@id=$context]/@title"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="@context"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</title>
|
||||
<ul>
|
||||
<xsl:apply-templates select="key('contextes',concat(../@version, '_', @context) )">
|
||||
<xsl:sort select="@type"/>
|
||||
</xsl:apply-templates>
|
||||
</ul>
|
||||
</section>
|
||||
</xsl:for-each>
|
||||
</section>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="action">
|
||||
<li>
|
||||
<icon src="{$root}images/{@type}.jpg" alt="{@type}"/>
|
||||
<xsl:apply-templates/>
|
||||
<xsl:text>(</xsl:text><xsl:value-of select="@dev"/><xsl:text>)</xsl:text>
|
||||
|
||||
<xsl:if test="@due-to and @due-to!=''">
|
||||
<xsl:text> Thanks to </xsl:text>
|
||||
<xsl:choose>
|
||||
<xsl:when test="@due-to-email and @due-to-email!=''">
|
||||
<link href="mailto:{@due-to-email}">
|
||||
<xsl:value-of select="@due-to"/>
|
||||
</link>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="@due-to"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<xsl:text>.</xsl:text>
|
||||
</xsl:if>
|
||||
|
||||
<xsl:if test="@fixes-bug">
|
||||
<xsl:text> Fixes </xsl:text>
|
||||
<xsl:call-template name="print-bugs">
|
||||
<xsl:with-param name="buglist" select="translate(normalize-space(@fixes-bug),' ','')"/>
|
||||
</xsl:call-template>
|
||||
<!--
|
||||
<xsl:choose>
|
||||
<xsl:when test="contains(@fixes-bug, ',')">
|
||||
<!-<link href="{$bugtracking-url}{translate(normalize-space(@fixes-bug),' ','')}">->
|
||||
<link href="{$bugtracking-url}">
|
||||
<xsl:text>bugs </xsl:text><xsl:value-of select="normalize-space(@fixes-bug)"/>
|
||||
</link>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<link href="{$bugtracking-url}{@fixes-bug}">
|
||||
<xsl:text>bug </xsl:text><xsl:value-of select="@fixes-bug"/>
|
||||
</link>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
-->
|
||||
<xsl:text>.</xsl:text>
|
||||
</xsl:if>
|
||||
</li>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Print each bug id in a comma-separated list -->
|
||||
<xsl:template name="print-bugs">
|
||||
<xsl:param name="buglist"/>
|
||||
<xsl:choose>
|
||||
<xsl:when test="contains($buglist, ',')">
|
||||
<xsl:variable name="current" select="substring-before($buglist, ',')"/>
|
||||
<link href="{concat($bugtracking-url, $current)}">
|
||||
<xsl:value-of select="$current"/>
|
||||
</link>
|
||||
<xsl:text>, </xsl:text>
|
||||
<xsl:call-template name="print-bugs">
|
||||
<xsl:with-param name="buglist" select="substring-after($buglist, ',')"/>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<link href="{concat($bugtracking-url, $buglist)}"><xsl:value-of select="$buglist"/></link>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="@*|*|text()|processing-instruction()|comment()">
|
||||
<xsl:copy>
|
||||
<xsl:apply-templates select="@*|*|text()|processing-instruction()|comment()"/>
|
||||
</xsl:copy>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
|
@ -0,0 +1,78 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<!--
|
||||
Contains the 'dotdots' template, which, given a path, will output a set of
|
||||
directory traversals to get back to the source directory. Handles both '/' and
|
||||
'\' directory separators.
|
||||
|
||||
Examples:
|
||||
Input Output
|
||||
index.html ""
|
||||
dir/index.html "../"
|
||||
dir/subdir/index.html "../../"
|
||||
dir//index.html "../"
|
||||
dir/ "../"
|
||||
dir// "../"
|
||||
\some\windows\path "../../"
|
||||
\some\windows\path\ "../../../"
|
||||
\Program Files\mydir "../"
|
||||
|
||||
Cannot handle ..'s in the path, so don't expect 'dir/subdir/../index.html' to
|
||||
work.
|
||||
|
||||
-->
|
||||
|
||||
<xsl:stylesheet
|
||||
version="1.0"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
|
||||
|
||||
<xsl:template name="dotdots">
|
||||
<xsl:param name="path"/>
|
||||
<xsl:variable name="dirs" select="normalize-space(translate(concat($path, 'x'), ' /\', '_ '))"/>
|
||||
<!-- The above does the following:
|
||||
o Adds a trailing character to the path. This prevents us having to deal
|
||||
with the special case of ending with '/'
|
||||
o Translates all directory separators to ' ', and normalize spaces,
|
||||
cunningly eliminating duplicate '//'s. We also translate any real
|
||||
spaces into _ to preserve them.
|
||||
-->
|
||||
<xsl:variable name="remainder" select="substring-after($dirs, ' ')"/>
|
||||
<xsl:if test="$remainder">
|
||||
<xsl:text>../</xsl:text>
|
||||
<xsl:call-template name="dotdots">
|
||||
<xsl:with-param name="path" select="translate($remainder, ' ', '/')"/>
|
||||
<!-- Translate back to /'s because that's what the template expects. -->
|
||||
</xsl:call-template>
|
||||
</xsl:if>
|
||||
</xsl:template>
|
||||
|
||||
<!--
|
||||
Uncomment to test.
|
||||
Usage: saxon dotdots.xsl dotdots.xsl path='/my/test/path'
|
||||
|
||||
<xsl:param name="path"/>
|
||||
<xsl:template match="/">
|
||||
<xsl:message>Path: <xsl:value-of select="$path"/></xsl:message>
|
||||
<xsl:call-template name="dotdots">
|
||||
<xsl:with-param name="path" select="$path"/>
|
||||
</xsl:call-template>
|
||||
</xsl:template>
|
||||
-->
|
||||
|
||||
</xsl:stylesheet>
|
|
@ -0,0 +1,53 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<!-- $Id: news2document.xsl 635326 2008-03-09 19:05:21Z jeremias $ -->
|
||||
<xsl:stylesheet
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:date="http://exslt.org/dates-and-times"
|
||||
extension-element-prefixes="date"
|
||||
version="1.0">
|
||||
|
||||
<date:date-format lang="en" first-day-in-week="monday"/>
|
||||
|
||||
<xsl:template match="news">
|
||||
<document>
|
||||
<header>
|
||||
<title>News</title>
|
||||
</header>
|
||||
<body>
|
||||
<xsl:apply-templates select="item"/>
|
||||
</body>
|
||||
</document>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="item">
|
||||
<section id="news-{@date}">
|
||||
<title>
|
||||
<xsl:value-of select="date:day-in-month(@date)"/>
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:value-of select="date:month-abbreviation(@date)"/>
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:value-of select="date:year(@date)"/>
|
||||
<xsl:text>: </xsl:text>
|
||||
<xsl:value-of select="@title"/>
|
||||
</title>
|
||||
<xsl:copy-of select="."/>
|
||||
</section>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
|
@ -0,0 +1,58 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<!-- $Id: news2rss.xsl 635326 2008-03-09 19:05:21Z jeremias $ -->
|
||||
<xsl:stylesheet
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:date="http://exslt.org/dates-and-times"
|
||||
extension-element-prefixes="date"
|
||||
version="1.0">
|
||||
<xsl:param name="project-name" select="//skinconfig/project-name"/>
|
||||
<xsl:param name="project-url" select="//skinconfig/project-url"/>
|
||||
<xsl:template match="news">
|
||||
<rss version="2.0">
|
||||
<channel>
|
||||
<title><xsl:value-of select="$project-name"/> News</title>
|
||||
<link><xsl:value-of select="$project-url"/></link>
|
||||
<description>
|
||||
Subproject News for <xsl:value-of select="$project-name"/>
|
||||
</description>
|
||||
<language>en</language>
|
||||
<xsl:apply-templates/>
|
||||
</channel>
|
||||
</rss>
|
||||
</xsl:template>
|
||||
<xsl:template match="item">
|
||||
<item>
|
||||
<title>
|
||||
<xsl:value-of select="date:day-in-month(@date)"/>
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:value-of select="date:month-abbreviation(@date)"/>
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:value-of select="date:year(@date)"/>
|
||||
<xsl:text>: </xsl:text>
|
||||
<xsl:value-of select="@title"/>
|
||||
</title>
|
||||
<guid>news-<xsl:value-of select="@date"/></guid>
|
||||
<link><xsl:value-of select="$project-url"/>/index.html#news-<xsl:value-of select="@date"/></link>
|
||||
<pubDate><xsl:value-of select="date:format-date(@date, 'EEE, d MMM yyyy HH:mm:ss Z')"/></pubDate>
|
||||
<description>
|
||||
<xsl:apply-templates/>
|
||||
</description>
|
||||
</item>
|
||||
</xsl:template>
|
||||
</xsl:stylesheet>
|
|
@ -0,0 +1,131 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<xsl:stylesheet
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
version="1.0">
|
||||
|
||||
<xsl:param name="versionNumber"/>
|
||||
<xsl:include href="changes2document.xsl"/>
|
||||
|
||||
<!-- Calculate path to site root, eg '../../' -->
|
||||
<xsl:variable name="root">
|
||||
<xsl:call-template name="dotdots">
|
||||
<xsl:with-param name="path" select="$path"/>
|
||||
</xsl:call-template>
|
||||
</xsl:variable>
|
||||
|
||||
<!-- FIXME (JJP): bugzilla is hardwired -->
|
||||
<xsl:variable name="bugzilla" select="'http://issues.apache.org/bugzilla/buglist.cgi?bug_id='"/>
|
||||
|
||||
<xsl:param name="bugtracking-url" select="$bugzilla"/>
|
||||
|
||||
<xsl:template match="/">
|
||||
<xsl:apply-templates select="//changes"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="changes">
|
||||
<document>
|
||||
<header>
|
||||
<title>
|
||||
<xsl:choose>
|
||||
<xsl:when test="@title!=''">
|
||||
<xsl:value-of select="@title"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:text>Release Notes for Apache Forrest </xsl:text><xsl:value-of select="$versionNumber"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</title>
|
||||
</header>
|
||||
<body>
|
||||
<xsl:if test="contains($versionNumber, 'dev')">
|
||||
<warning>Version <xsl:value-of select="$versionNumber"/> is a development release,
|
||||
these notes are therefore not complete, they are intended to be an indicator
|
||||
of the major features that are so far included in this version.</warning>
|
||||
</xsl:if>
|
||||
|
||||
<xsl:if test="release[@version=$versionNumber]/notes">
|
||||
<xsl:apply-templates select="release[@version=$versionNumber]/notes"/>
|
||||
</xsl:if>
|
||||
|
||||
<xsl:apply-templates select="release[@version=$versionNumber]"/>
|
||||
</body>
|
||||
</document>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="release">
|
||||
<section id="version_{@version}">
|
||||
<title>Major Changes in Version <xsl:value-of select="@version"/></title>
|
||||
<note>This is not a complete list of changes, a
|
||||
full list of changes in this release
|
||||
<a href="changes_{$versionNumber}.html">is available</a>.</note>
|
||||
<xsl:if test="action[@context='code' and @importance='high']">
|
||||
<section>
|
||||
<title>Important Changes Code Base</title>
|
||||
<ul>
|
||||
<xsl:apply-templates select="action[@context='code' and @importance='high']">
|
||||
<xsl:sort select="@type"/>
|
||||
</xsl:apply-templates>
|
||||
</ul>
|
||||
</section>
|
||||
</xsl:if>
|
||||
<xsl:if test="action[@context='docs' and @importance='high']">
|
||||
<section>
|
||||
<title>Important Changes Documentation</title>
|
||||
<ul>
|
||||
<xsl:apply-templates select="action[@context='docs' and @importance='high']">
|
||||
<xsl:sort select="@type"/>
|
||||
</xsl:apply-templates>
|
||||
</ul>
|
||||
</section>
|
||||
</xsl:if>
|
||||
<xsl:if test="action[@context='admin' and @importance='high']">
|
||||
<section>
|
||||
<title>Important Changes Project Administration</title>
|
||||
<ul>
|
||||
<xsl:apply-templates select="action[@context='admin' and @importance='high']">
|
||||
<xsl:sort select="@type"/>
|
||||
</xsl:apply-templates>
|
||||
</ul>
|
||||
</section>
|
||||
</xsl:if>
|
||||
<xsl:if test="action[@context='design' and @importance='high']">
|
||||
<section>
|
||||
<title>Important Changes Design</title>
|
||||
<ul>
|
||||
<xsl:apply-templates select="action[@context='design' and @importance='high']">
|
||||
<xsl:sort select="@type"/>
|
||||
</xsl:apply-templates>
|
||||
</ul>
|
||||
</section>
|
||||
</xsl:if>
|
||||
<xsl:if test="action[@context='build' and @importance='high']">
|
||||
<section>
|
||||
<title>Important Changes Build</title>
|
||||
<ul>
|
||||
<xsl:apply-templates select="action[@context='build' and @importance='high']">
|
||||
<xsl:sort select="@type"/>
|
||||
</xsl:apply-templates>
|
||||
</ul>
|
||||
</section>
|
||||
</xsl:if>
|
||||
</section>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
|
@ -0,0 +1,51 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<!-- $Id: sitemap.xmap 635326 2008-03-09 19:05:21Z jeremias $ -->
|
||||
<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
|
||||
<!--
|
||||
-->
|
||||
<map:components>
|
||||
<map:serializers default="html">
|
||||
<map:serializer name="rss" mime-type="application/rss+xml" src="org.apache.cocoon.serialization.XMLSerializer"/>
|
||||
</map:serializers>
|
||||
</map:components>
|
||||
|
||||
<map:pipelines>
|
||||
|
||||
<!-- This is used by xinclude statements -->
|
||||
<map:pipeline>
|
||||
<map:match type="regexp" pattern="^(.*?)([^/]*)subproject-news-document.xml">
|
||||
<map:generate src="{properties:content.xdocs}{1}news.xml"/>
|
||||
<map:transform src="resources/stylesheets/news2document.xsl" >
|
||||
<map:parameter name="path" value="{1}{2}"/>
|
||||
</map:transform>
|
||||
<map:serialize type="xml"/>
|
||||
</map:match>
|
||||
<map:match type="regexp" pattern="^(.*?)([^/]*)subproject-news-feed.rss">
|
||||
<map:generate src="{properties:content.xdocs}{1}news.xml"/>
|
||||
<map:transform src="resources/stylesheets/news2rss.xsl" >
|
||||
<map:parameter name="path" value="{1}{2}"/>
|
||||
<map:parameter name="project-name" value="{properties:projectInfo.project.fullname}"/>
|
||||
<map:parameter name="project-url" value="{properties:projectInfo.project.url}"/>
|
||||
</map:transform>
|
||||
<map:serialize type="rss"/>
|
||||
</map:match>
|
||||
</map:pipeline>
|
||||
|
||||
</map:pipelines>
|
||||
</map:sitemap>
|
|
@ -0,0 +1,380 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<!--
|
||||
Skin configuration file. This file contains details of your project,
|
||||
which will be used to configure the chosen Forrest skin.
|
||||
-->
|
||||
|
||||
<!DOCTYPE skinconfig PUBLIC "-//APACHE//DTD Skin Configuration V0.6-3//EN" "http://forrest.apache.org/dtd/skinconfig-v06-3.dtd">
|
||||
<skinconfig>
|
||||
<!-- To enable lucene search add provider="lucene" (default is google).
|
||||
Add box-location="alt" to move the search box to an alternate location
|
||||
(if the skin supports it) and box-location="all" to show it in all
|
||||
available locations on the page. Remove the <search> element to show
|
||||
no search box. @domain will enable sitesearch for the specific domain with google.
|
||||
In other words google will search the @domain for the query string.
|
||||
-->
|
||||
<search name="Apache XML Graphics" domain="xmlgraphics.apache.org" provider="google"/>
|
||||
|
||||
<!-- Disable the print link? If enabled, invalid HTML 4.0.1 -->
|
||||
<disable-print-link>true</disable-print-link>
|
||||
<!-- Disable the PDF link? -->
|
||||
<disable-pdf-link>false</disable-pdf-link>
|
||||
<!-- Disable the POD link? -->
|
||||
<disable-pod-link>true</disable-pod-link>
|
||||
<!-- Disable the Text link? FIXME: NOT YET IMPLEMENETED. -->
|
||||
<disable-txt-link>true</disable-txt-link>
|
||||
<!-- Disable the xml source link? -->
|
||||
<!-- The xml source link makes it possible to access the xml rendition
|
||||
of the source from the html page, and to have it generated statically.
|
||||
This can be used to enable other sites and services to reuse the
|
||||
xml format for their uses. Keep this disabled if you don't want other
|
||||
sites to easily reuse your pages.-->
|
||||
<disable-xml-link>true</disable-xml-link>
|
||||
|
||||
<!-- Disable navigation icons on all external links? -->
|
||||
<disable-external-link-image>true</disable-external-link-image>
|
||||
|
||||
<!-- Disable w3c compliance links?
|
||||
Use e.g. align="center" to move the compliance links logos to
|
||||
an alternate location default is left.
|
||||
(if the skin supports it) -->
|
||||
<disable-compliance-links>true</disable-compliance-links>
|
||||
|
||||
<!-- Render mailto: links unrecognisable by spam harvesters? -->
|
||||
<obfuscate-mail-links>false</obfuscate-mail-links>
|
||||
<obfuscate-mail-value>.at.</obfuscate-mail-value>
|
||||
|
||||
<!-- Disable the javascript facility to change the font size -->
|
||||
<disable-font-script>false</disable-font-script>
|
||||
|
||||
<!-- mandatory project logo
|
||||
default skin: renders it at the top -->
|
||||
<project-name>Apache™ XML Graphics Commons</project-name>
|
||||
<project-description>Common components for Apache Batik and Apache FOP</project-description>
|
||||
<project-url>http://xmlgraphics.apache.org/commons/</project-url>
|
||||
<project-logo></project-logo>
|
||||
<!-- Alternative static image:
|
||||
<project-logo>images/project-logo.gif</project-logo> -->
|
||||
|
||||
<!-- optional group logo
|
||||
default skin: renders it at the top-left corner -->
|
||||
<group-name>xmlgraphics.apache.org</group-name>
|
||||
<group-description>Apache XML Graphics is responsible for the creation and maintenance of software for managing the conversion of XML formats to graphical output, and the creation and maintenance of related software components, based on software licensed to the Foundation</group-description>
|
||||
<group-url>http://xmlgraphics.apache.org/</group-url>
|
||||
<!-- Alternative static image: -->
|
||||
<group-logo>images/apache-xml-graphics.gif</group-logo>
|
||||
|
||||
<!-- optional host logo (e.g. sourceforge logo)
|
||||
default skin: renders it at the bottom-left corner -->
|
||||
<host-url></host-url>
|
||||
<host-logo></host-logo>
|
||||
|
||||
<!-- relative url of a favicon file, normally favicon.ico -->
|
||||
<favicon-url>favicon.ico</favicon-url>
|
||||
|
||||
<!-- The following are used to construct a copyright statement -->
|
||||
<year>2006-2012</year>
|
||||
<vendor>The Apache Software Foundation.</vendor>
|
||||
<!-- The optional copyright-link URL will be used as a link in the
|
||||
copyright statement
|
||||
-->
|
||||
<copyright-link>http://www.apache.org/licenses/</copyright-link>
|
||||
<trademark-statement>
|
||||
Apache, Apache XML Graphics Commons, and the Apache feather logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners.
|
||||
</trademark-statement>
|
||||
|
||||
<!-- Some skins use this to form a 'breadcrumb trail' of links.
|
||||
Use location="alt" to move the trail to an alternate location
|
||||
(if the skin supports it).
|
||||
Omit the location attribute to display the trail in the default location.
|
||||
Use location="none" to not display the trail (if the skin supports it).
|
||||
For some skins just set the attributes to blank.
|
||||
-->
|
||||
<trail location="alt">
|
||||
<link1 name="The Apache Software Foundation" href="http://www.apache.org/"/>
|
||||
<link2 name="Apache XML Graphics Project" href="http://xmlgraphics.apache.org/"/>
|
||||
</trail>
|
||||
|
||||
<!-- Configure the TOC, i.e. the Table of Contents.
|
||||
@max-depth
|
||||
how many "section" levels need to be included in the
|
||||
generated Table of Contents (TOC).
|
||||
@min-sections
|
||||
Minimum required to create a TOC.
|
||||
@location ("page","menu","page,menu", "none")
|
||||
Where to show the TOC.
|
||||
-->
|
||||
<toc max-depth="2" min-sections="3" location="page"/>
|
||||
|
||||
<!-- Heading types can be clean|underlined|boxed -->
|
||||
<headings type="underlined"/>
|
||||
|
||||
<!-- The optional feedback element will be used to construct a
|
||||
feedback link in the footer with the page pathname appended:
|
||||
<a href="@href">{@to}</a>
|
||||
<feedback to="webmaster@foo.com"
|
||||
href="mailto:webmaster@foo.com?subject=Feedback " >
|
||||
Send feedback about the website to:
|
||||
</feedback>
|
||||
-->
|
||||
<!--
|
||||
extra-css - here you can define custom css-elements that are
|
||||
a. overriding the fallback elements or
|
||||
b. adding the css definition from new elements that you may have
|
||||
used in your documentation.
|
||||
-->
|
||||
<extra-css>
|
||||
<!--Example of b.
|
||||
To define the css definition of a new element that you may have used
|
||||
in the class attribute of a <p> node.
|
||||
e.g. <p class="quote"/>
|
||||
-->
|
||||
p.quote {
|
||||
margin-left: 2em;
|
||||
padding: .5em;
|
||||
background-color: #f0f0f0;
|
||||
font-family: monospace;
|
||||
}
|
||||
</extra-css>
|
||||
|
||||
<colors>
|
||||
<!-- These values are used for the generated CSS files. -->
|
||||
|
||||
<!-- Krysalis -->
|
||||
|
||||
<color name="header" value="#FFFFFF"/>
|
||||
|
||||
<color name="tab-selected" value="#a5b6c6" link="#000000" vlink="#000000" hlink="#000000"/>
|
||||
<color name="tab-unselected" value="#F7F7F7" link="#000000" vlink="#000000" hlink="#000000"/>
|
||||
<color name="subtab-selected" value="#a5b6c6" link="#000000" vlink="#000000" hlink="#000000"/>
|
||||
<color name="subtab-unselected" value="#a5b6c6" link="#000000" vlink="#000000" hlink="#000000"/>
|
||||
|
||||
<color name="heading" value="#a5b6c6"/>
|
||||
<color name="subheading" value="#CFDCED"/>
|
||||
<color name='searchbox' value="#FFFFFF" font="#000000"/>
|
||||
<color name="navstrip" value="#CFDCED" font="#000000" link="#000000" vlink="#000000" hlink="#000000"/>
|
||||
<color name="toolbox" value="#a5b6c6"/>
|
||||
<color name="border" value="#a5b6c6"/>
|
||||
|
||||
<color name="menu" value="#F7F7F7" link="#000000" vlink="#000000" hlink="#000000"/>
|
||||
<color name="dialog" value="#F7F7F7"/>
|
||||
|
||||
<color name="body" value="#ffffff" link="#0F3660" vlink="#009999" hlink="#000066"/>
|
||||
|
||||
<color name="table" value="#a5b6c6"/>
|
||||
<color name="table-cell" value="#ffffff"/>
|
||||
<color name="highlight" value="#ffff00"/>
|
||||
<color name="fixme" value="#cc6600"/>
|
||||
<color name="note" value="#006699"/>
|
||||
<color name="warning" value="#990000"/>
|
||||
<color name="code" value="#a5b6c6"/>
|
||||
|
||||
<color name="footer" value="#a5b6c6"/>
|
||||
|
||||
|
||||
<!-- Forrest -->
|
||||
<!--
|
||||
<color name="header" value="#294563"/>
|
||||
|
||||
<color name="tab-selected" value="#4a6d8c" link="#0F3660" vlink="#0F3660" hlink="#000066"/>
|
||||
<color name="tab-unselected" value="#b5c7e7" link="#0F3660" vlink="#0F3660" hlink="#000066"/>
|
||||
<color name="subtab-selected" value="#4a6d8c" link="#0F3660" vlink="#0F3660" hlink="#000066"/>
|
||||
<color name="subtab-unselected" value="#4a6d8c" link="#0F3660" vlink="#0F3660" hlink="#000066"/>
|
||||
|
||||
<color name="heading" value="#294563"/>
|
||||
<color name="subheading" value="#4a6d8c"/>
|
||||
|
||||
<color name="navstrip" value="#cedfef" font="#0F3660" link="#0F3660" vlink="#0F3660" hlink="#000066"/>
|
||||
<color name="toolbox" value="#4a6d8c"/>
|
||||
<color name="border" value="#294563"/>
|
||||
|
||||
<color name="menu" value="#4a6d8c" font="#cedfef" link="#ffffff" vlink="#ffffff" hlink="#ffcf00"/>
|
||||
<color name="dialog" value="#4a6d8c"/>
|
||||
|
||||
<color name="body" value="#ffffff" link="#0F3660" vlink="#009999" hlink="#000066"/>
|
||||
|
||||
<color name="table" value="#7099C5"/>
|
||||
<color name="table-cell" value="#f0f0ff"/>
|
||||
<color name="highlight" value="#ffff00"/>
|
||||
<color name="fixme" value="#cc6600"/>
|
||||
<color name="note" value="#006699"/>
|
||||
<color name="warning" value="#990000"/>
|
||||
<color name="code" value="#CFDCED"/>
|
||||
|
||||
<color name="footer" value="#cedfef"/>
|
||||
-->
|
||||
|
||||
<!-- Collabnet -->
|
||||
<!--
|
||||
<color name="header" value="#003366"/>
|
||||
|
||||
<color name="tab-selected" value="#dddddd" link="#555555" vlink="#555555" hlink="#555555"/>
|
||||
<color name="tab-unselected" value="#999999" link="#ffffff" vlink="#ffffff" hlink="#ffffff"/>
|
||||
<color name="subtab-selected" value="#cccccc" link="#000000" vlink="#000000" hlink="#000000"/>
|
||||
<color name="subtab-unselected" value="#cccccc" link="#555555" vlink="#555555" hlink="#555555"/>
|
||||
|
||||
<color name="heading" value="#003366"/>
|
||||
<color name="subheading" value="#888888"/>
|
||||
|
||||
<color name="navstrip" value="#dddddd" font="#555555"/>
|
||||
<color name="toolbox" value="#dddddd" font="#555555"/>
|
||||
<color name="border" value="#999999"/>
|
||||
|
||||
<color name="menu" value="#ffffff"/>
|
||||
<color name="dialog" value="#eeeeee"/>
|
||||
|
||||
<color name="body" value="#ffffff"/>
|
||||
|
||||
<color name="table" value="#ccc"/>
|
||||
<color name="table-cell" value="#ffffff"/>
|
||||
<color name="highlight" value="#ffff00"/>
|
||||
<color name="fixme" value="#cc6600"/>
|
||||
<color name="note" value="#006699"/>
|
||||
<color name="warning" value="#990000"/>
|
||||
<color name="code" value="#003366"/>
|
||||
|
||||
<color name="footer" value="#ffffff"/>
|
||||
-->
|
||||
<!-- Lenya using pelt-->
|
||||
<!--
|
||||
<color name="header" value="#ffffff"/>
|
||||
|
||||
<color name="tab-selected" value="#4C6C8F" link="#ffffff" vlink="#ffffff" hlink="#ffffff"/>
|
||||
<color name="tab-unselected" value="#E5E4D9" link="#000000" vlink="#000000" hlink="#000000"/>
|
||||
<color name="subtab-selected" value="#000000" link="#000000" vlink="#000000" hlink="#000000"/>
|
||||
<color name="subtab-unselected" value="#E5E4D9" link="#000000" vlink="#000000" hlink="#000000"/>
|
||||
|
||||
<color name="heading" value="#E5E4D9"/>
|
||||
<color name="subheading" value="#000000"/>
|
||||
<color name="published" value="#4C6C8F" font="#FFFFFF"/>
|
||||
<color name="feedback" value="#4C6C8F" font="#FFFFFF" align="center"/>
|
||||
<color name="navstrip" value="#E5E4D9" font="#000000"/>
|
||||
|
||||
<color name="toolbox" value="#CFDCED" font="#000000"/>
|
||||
|
||||
<color name="border" value="#999999"/>
|
||||
<color name="menu" value="#4C6C8F" font="#ffffff" link="#ffffff" vlink="#ffffff" hlink="#ffffff" current="#FFCC33" />
|
||||
<color name="menuheading" value="#cfdced" font="#000000" />
|
||||
<color name="searchbox" value="#E5E4D9" font="#000000"/>
|
||||
|
||||
<color name="dialog" value="#CFDCED"/>
|
||||
<color name="body" value="#ffffff" />
|
||||
|
||||
<color name="table" value="#ccc"/>
|
||||
<color name="table-cell" value="#ffffff"/>
|
||||
<color name="highlight" value="#ffff00"/>
|
||||
<color name="fixme" value="#cc6600"/>
|
||||
<color name="note" value="#006699"/>
|
||||
<color name="warning" value="#990000"/>
|
||||
<color name="code" value="#003366"/>
|
||||
|
||||
<color name="footer" value="#E5E4D9"/>
|
||||
-->
|
||||
</colors>
|
||||
|
||||
<!-- Settings specific to PDF output. -->
|
||||
<pdf>
|
||||
<!--
|
||||
Supported page sizes are a0, a1, a2, a3, a4, a5, executive,
|
||||
folio, legal, ledger, letter, quarto, tabloid (default letter).
|
||||
Supported page orientations are portrait, landscape (default
|
||||
portrait).
|
||||
Supported text alignments are left, right, justify (default left).
|
||||
-->
|
||||
<page size="letter" orientation="portrait" text-align="justify"/>
|
||||
<page-numbering-format>1</page-numbering-format>
|
||||
<!--
|
||||
Margins can be specified for top, bottom, inner, and outer
|
||||
edges. If double-sided="false", the inner edge is always left
|
||||
and the outer is always right. If double-sided="true", the
|
||||
inner edge will be left on odd pages, right on even pages,
|
||||
the outer edge vice versa.
|
||||
Specified below are the default settings.
|
||||
-->
|
||||
<margins double-sided="false">
|
||||
<top>0.5in</top>
|
||||
<bottom>0.5in</bottom>
|
||||
<inner>1in</inner>
|
||||
<outer>0.5in</outer>
|
||||
</margins>
|
||||
|
||||
<!--
|
||||
Print the URL text next to all links going outside the file
|
||||
-->
|
||||
<show-external-urls>false</show-external-urls>
|
||||
|
||||
<!--
|
||||
Disable the copyright footer on each page of the PDF.
|
||||
A footer is composed for each page. By default, a "credit" with role=pdf
|
||||
will be used, as explained below. Otherwise a copyright statement
|
||||
will be generated. This latter can be disabled.
|
||||
-->
|
||||
<disable-copyright-footer>false</disable-copyright-footer>
|
||||
</pdf>
|
||||
|
||||
<!--
|
||||
Credits are typically rendered as a set of small clickable
|
||||
images in the page footer.
|
||||
|
||||
Use box-location="alt" to move the credits to an alternate location
|
||||
(if the skin supports it).
|
||||
|
||||
For example, pelt skin:
|
||||
- box-location="alt" will place the logo at the end of the
|
||||
left-hand coloured menu panel.
|
||||
- box-location="alt2" will place them underneath that panel
|
||||
in the left-hand whitespace.
|
||||
- Otherwise they are placed next to the compatibility icons
|
||||
at the bottom of the screen.
|
||||
|
||||
Comment out the whole <credit>-element if you want no credits in the
|
||||
web pages
|
||||
-->
|
||||
<credits>
|
||||
<credit box-location="alt">
|
||||
<name>Built with Apache Forrest</name>
|
||||
<url>http://forrest.apache.org/</url>
|
||||
<image>images/built-with-forrest-button.png</image>
|
||||
<width>88</width>
|
||||
<height>31</height>
|
||||
</credit>
|
||||
<!--
|
||||
<credit box-location="alt2">
|
||||
<name>ApacheCon Europe 2009</name>
|
||||
<url>http://eu.apachecon.com/</url>
|
||||
<image>http://apache.org/ads/ApacheCon/2009-europe-125x125.png</image>
|
||||
<width>125</width>
|
||||
<height>125</height>
|
||||
</credit>
|
||||
-->
|
||||
|
||||
<!-- A credit with @role="pdf" will be used to compose a footer
|
||||
for each page in the PDF, using either "name" or "url" or both.
|
||||
-->
|
||||
<credit role="pdf">
|
||||
<name>PDF created by Apache FOP</name>
|
||||
<url>http://xmlgraphics.apache.org/fop/</url>
|
||||
<image>images/logo.jpg</image>
|
||||
<width>138</width>
|
||||
<height>31</height>
|
||||
</credit>
|
||||
</credits>
|
||||
|
||||
</skinconfig>
|
|
@ -0,0 +1,26 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<!--
|
||||
This catalog is used so displays how the language name
|
||||
is named by their speakers.
|
||||
-->
|
||||
<catalogue >
|
||||
<message key="en">English</message>
|
||||
<message key="es">Espanol</message>
|
||||
<message key="it">Italiano</message>
|
||||
</catalogue>
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<catalogue xml:lang="en">
|
||||
<message key="en">English</message>
|
||||
<message key="es">Spanish</message>
|
||||
<message key="nl">Dutch</message>
|
||||
</catalogue>
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<catalogue xml:lang="es">
|
||||
<message key="en">Ingles</message>
|
||||
<message key="es">Espanol</message>
|
||||
<message key="nl">Holandes</message>
|
||||
</catalogue>
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<catalogue xml:lang="en">
|
||||
<message key="About">About</message>
|
||||
<message key="Index">Index</message>
|
||||
<message key="Changes">Changes</message>
|
||||
<message key="Todo">Todo</message>
|
||||
<message key="Samples">Samples</message>
|
||||
<message key="Apache document">Apache document</message>
|
||||
<message key="Static content">Static content</message>
|
||||
<message key="Linking">Linking</message>
|
||||
<message key="Wiki page">Wiki page</message>
|
||||
<message key="ihtml page">Ihtml page</message>
|
||||
<message key="ehtml page">Ehtml page</message>
|
||||
<message key="FAQ">FAQ</message>
|
||||
<message key="Simplifed Docbook">Simplifed Docbook</message>
|
||||
<message key="XSP page">XSP page</message>
|
||||
</catalogue>
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<catalogue xml:lang="af">
|
||||
<message key="About">Aangaande</message>
|
||||
<message key="Index">Inhoud</message>
|
||||
<message key="Changes">Veranderinge</message>
|
||||
<message key="Todo">Om te doen</message>
|
||||
<message key="Samples">Voorbeelde</message>
|
||||
<message key="Apache document">Apache dokument</message>
|
||||
<message key="Static content">Statise Inhoud</message>
|
||||
<message key="Linking">Linking</message>
|
||||
<message key="Wiki page">Wiki bladsy</message>
|
||||
<message key="ihtml page">Ihtml bladsy</message>
|
||||
<message key="ehtml page">Ehtml bladsy</message>
|
||||
<message key="FAQ">FAQ</message>
|
||||
<message key="Simplifed Docbook">Vereenvoudigde Docbook</message>
|
||||
<message key="XSP page">XSP bladsy</message>
|
||||
</catalogue>
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<catalogue xml:lang="de">
|
||||
<message key="About">Über</message>
|
||||
<message key="Index">Index</message>
|
||||
<message key="Changes">Änderungen </message>
|
||||
<message key="Todo">Todo</message>
|
||||
<message key="Samples">Beispiele</message>
|
||||
<message key="Apache document">Apache Dokumentationsseite</message>
|
||||
<message key="Static content">Statischer Inhalt</message>
|
||||
<message key="Linking">Linking</message>
|
||||
<message key="Wiki page">Wiki Seite</message>
|
||||
<message key="ihtml page">ihtml Seite</message>
|
||||
<message key="ehtml page">ehtml Seite</message>
|
||||
<message key="FAQ">FAQ</message>
|
||||
<message key="Simplifed Docbook">Vereinfachte Docbook</message>
|
||||
<message key="XSP page">XSP Seite</message>
|
||||
</catalogue>
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<catalogue xml:lang="es">
|
||||
<message key="About">Acerca de</message>
|
||||
<message key="Index">Indice</message>
|
||||
<message key="Changes">Cambios</message>
|
||||
<message key="Todo">Tareas pendientes</message>
|
||||
<message key="Samples">Ejemplos</message>
|
||||
<message key="Apache document">Documento Apache</message>
|
||||
<message key="Static content">Contenido Estático</message>
|
||||
<message key="Linking">Linking</message>
|
||||
<message key="Wiki page">Página Wiki</message>
|
||||
<message key="ihtml page">Página ihtml</message>
|
||||
<message key="ehtml page">Página ehtml</message>
|
||||
<message key="FAQ">Preguntas Frecuentes</message>
|
||||
<message key="Simplifed Docbook">Página Simplifed Docbook</message>
|
||||
<message key="XSP page">Página XSP</message>
|
||||
</catalogue>
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<catalogue xml:lang="it">
|
||||
<message key="About">Riguardo a</message>
|
||||
<message key="Index">Indice</message>
|
||||
<message key="Changes">Cambiamenti</message>
|
||||
<message key="Todo">Cose da fare</message>
|
||||
<message key="Samples">Esempi</message>
|
||||
<message key="Apache document">Apache document</message>
|
||||
<message key="Static content">Contenuto Statico</message>
|
||||
<message key="Linking">Linking</message>
|
||||
<message key="Wiki page">Pagina Wiki</message>
|
||||
<message key="ihtml page">Pagina ihtml</message>
|
||||
<message key="ehtml page">Pagina ehtml</message>
|
||||
<message key="FAQ">Domande frequenti</message>
|
||||
<message key="Simplifed Docbook">Simplifed Docbook</message>
|
||||
<message key="XSP page">Pagina XSP</message>
|
||||
</catalogue>
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<catalogue xml:lang="no">
|
||||
<message key="About">Om</message>
|
||||
<message key="Index">Indeks</message>
|
||||
<message key="Changes">Endringer</message>
|
||||
<message key="Todo">Oppgave liste</message>
|
||||
<message key="Samples">Eksempler</message>
|
||||
<message key="Apache document">Apache Dokument</message>
|
||||
<message key="Static content">Statisk innhold</message>
|
||||
<message key="Linking">Linking</message>
|
||||
<message key="Wiki page">Wiki side</message>
|
||||
<message key="ihtml page">ihtml side</message>
|
||||
<message key="ehtml page">ehtml side</message>
|
||||
<message key="FAQ">FAQ</message>
|
||||
<message key="Simplifed Docbook">Simplifed Docbook</message>
|
||||
<message key="XSP page">XSP side</message>
|
||||
</catalogue>
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<catalogue xml:lang="ru">
|
||||
<message key="About">О проекте</message>
|
||||
<message key="Index">Содержание</message>
|
||||
<message key="Changes">Изменения</message>
|
||||
<message key="Todo">План</message>
|
||||
<message key="Samples">Примеры</message>
|
||||
<message key="Apache document">Страница документа Apache</message>
|
||||
<message key="Static content">Статическое содержание</message>
|
||||
<message key="Linking">Linking</message>
|
||||
<message key="Wiki page">Страница Wiki</message>
|
||||
<message key="ihtml page">Страница ihtml</message>
|
||||
<message key="ehtml page">Страница ehtml</message>
|
||||
<message key="FAQ">Вопросы/Ответы</message>
|
||||
<message key="Simplifed Docbook">Docbook страница</message>
|
||||
<message key="XSP page">XSP страница</message>
|
||||
</catalogue>
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<catalogue xml:lang="sk">
|
||||
<message key="About">O programe</message>
|
||||
<message key="Index">Zoznám</message>
|
||||
<message key="Changes">Zmeny</message>
|
||||
<message key="Todo">Úlohy</message>
|
||||
<message key="Samples">Príklady</message>
|
||||
<message key="Apache document">Apache Document</message>
|
||||
<message key="Static content">Statický Obsah</message>
|
||||
<message key="Linking">Linking</message>
|
||||
<message key="Wiki page">Wiki stránka</message>
|
||||
<message key="ihtml page">ihtml stránka</message>
|
||||
<message key="ehtml page">ehtml stránka</message>
|
||||
<message key="FAQ">Casté Otázky</message>
|
||||
<message key="Simplifed Docbook">Simplifed Docbook stránka</message>
|
||||
<message key="XSP page">XSP stránka</message>
|
||||
</catalogue>
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<catalogue xml:lang="en">
|
||||
<message key="Home">Home</message>
|
||||
<message key="Samples">Samples</message>
|
||||
<message key="Apache XML Projects">Apache XML Projects</message>
|
||||
</catalogue>
|
|
@ -0,0 +1,22 @@
|
|||
<?xml version="1.0"?>
|
||||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<catalogue xml:lang="es">
|
||||
<message key="Home">Inicio</message>
|
||||
<message key="Samples">Ejemplos</message>
|
||||
<message key="Apache XML Projects">Projectos XML Apache</message>
|
||||
</catalogue>
|
|
@ -0,0 +1,841 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: Glyphs.java 1804124 2017-08-04 14:13:54Z ssteiner $ */
|
||||
|
||||
package org.apache.xmlgraphics.fonts;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.StringTokenizer;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
/**
|
||||
* This class provides a number of constants for glyph management.
|
||||
*/
|
||||
public final class Glyphs {
|
||||
|
||||
private Glyphs() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Glyph name for the "notdef" glyph
|
||||
*/
|
||||
public static final String NOTDEF = ".notdef";
|
||||
|
||||
/**
|
||||
* Glyph names for Mac encoding
|
||||
* @deprecated That array was supposed to represent the standard Macintosh ordering
|
||||
* of glyphs in a TrueType font (it does NOT correspond to the MacRoman encoding).
|
||||
* In addition some entries are incorrect.
|
||||
*/
|
||||
@Deprecated
|
||||
public static final String[] MAC_GLYPH_NAMES = {
|
||||
/* 0x00 */
|
||||
Glyphs.NOTDEF, ".null", "CR", "space", "exclam", "quotedbl", "numbersign",
|
||||
"dollar", "percent", "ampersand", "quotesingle", "parenleft",
|
||||
"parenright", "asterisk", "plus", "comma", /* 0x10 */
|
||||
"hyphen", "period", "slash", "zero", "one", "two", "three", "four",
|
||||
"five", "six", "seven", "eight", "nine", "colon",
|
||||
"semicolon", "less", /* 0x20 */
|
||||
"equal", "greater", "question", "at", "A", "B", "C", "D", "E", "F",
|
||||
"G", "H", "I", "J", "K", "L", /* 0x30 */
|
||||
"M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z",
|
||||
"bracketleft", "backslash", /* 0x40 */
|
||||
"bracketright", "asciicircum", "underscore", "grave", "a", "b", "c",
|
||||
"d", "e", "f", "g", "h", "i", "j", "k", "l",
|
||||
/* 0x50 */
|
||||
"m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
|
||||
"braceleft", "bar", /* 0x60 */
|
||||
"braceright", "asciitilde", "Adieresis", "Aring", "Ccedilla",
|
||||
"Eacute", "Ntilde", "Odieresis", "Udieresis", "aacute",
|
||||
"agrave", "acircumflex", "adieresis", "atilde",
|
||||
"aring", "ccedilla", /* 0x70 */
|
||||
"eacute", "egrave", "ecircumflex", "edieresis", "iacute", "igrave",
|
||||
"icircumflex", "idieresis", "ntilde", "oacute", "ograve",
|
||||
"ocircumflex", "odieresis", "otilde", "uacute", "ugrave",
|
||||
/* 0x80 */
|
||||
"ucircumflex", "udieresis", "dagger", "degree", "cent", "sterling",
|
||||
"section", "bullet", "paragraph", "germandbls",
|
||||
"registered", "copyright", "trademark", "acute",
|
||||
"dieresis", "notequal", /* 0x90 */
|
||||
"AE", "Oslash", "infinity", "plusminus", "lessequal", "greaterequal",
|
||||
"yen", "mu", "partialdiff", "Sigma", "Pi", "pi", "integral",
|
||||
"ordfeminine", "ordmasculine", "Omega", /* 0xa0 */
|
||||
"ae", "oslash", "questiondown", "exclamdown", "logicalnot",
|
||||
"radical", "florin", "approxequal", "Delta", "guillemotleft",
|
||||
"guillemotright", "ellipsis", "nbspace", "Agrave", "Atilde",
|
||||
"Otilde", /* 0xb0 */
|
||||
"OE", "oe", "endash", "emdash", "quotedblleft", "quotedblright",
|
||||
"quoteleft", "quoteright", "divide", "lozenge", "ydieresis",
|
||||
"Ydieresis", "fraction", "currency", "guilsinglleft",
|
||||
"guilsinglright", /* 0xc0 */
|
||||
"fi", "fl", "daggerdbl", "periodcentered", "quotesinglbase",
|
||||
"quotedblbase", "perthousand", "Acircumflex", "Ecircumflex",
|
||||
"Aacute", "Edieresis", "Egrave", "Iacute", "Icircumflex",
|
||||
"Idieresis", "Igrave", /* 0xd0 */
|
||||
"Oacute", "Ocircumflex", "applelogo", "Ograve", "Uacute",
|
||||
"Ucircumflex", "Ugrave", "dotlessi", "circumflex", "tilde",
|
||||
"macron", "breve", "dotaccent", "ring", "cedilla",
|
||||
"hungarumlaut", /* 0xe0 */
|
||||
"ogonek", "caron", "Lslash", "lslash", "Scaron", "scaron", "Zcaron",
|
||||
"zcaron", "brokenbar", "Eth", "eth", "Yacute", "yacute",
|
||||
"Thorn", "thorn", "minus", /* 0xf0 */
|
||||
"multiply", "onesuperior", "twosuperior", "threesuperior", "onehalf",
|
||||
"onequarter", "threequarters", "franc", "Gbreve",
|
||||
"gbreve", "Idot", "Scedilla", "scedilla", "Cacute",
|
||||
"cacute", "Ccaron", /* 0x100 */
|
||||
"ccaron", "dmacron"
|
||||
};
|
||||
|
||||
/**
|
||||
* Glyph names for tex8r encoding
|
||||
*/
|
||||
public static final String[] TEX8R_GLYPH_NAMES = {
|
||||
// 0x00
|
||||
NOTDEF, "dotaccent", "fi", "fl", "fraction", "hungarumlaut",
|
||||
"Lslash", "lslash", "ogonek", "ring", ".notdef", "breve",
|
||||
"minus", ".notdef", "Zcaron", "zcaron", // 0x10
|
||||
"caron", "dotlessi", "dotlessj", "ff", "ffi", "ffl", ".notdef",
|
||||
".notdef", NOTDEF, NOTDEF, NOTDEF, NOTDEF,
|
||||
NOTDEF, NOTDEF, "grave", "quotesingle", // 0x20
|
||||
"space", "exclam", "quotedbl", "numbersign", "dollar", "percent",
|
||||
"ampersand", "quoteright", "parenleft", "parenright",
|
||||
"asterisk", "plus", "comma", "hyphen", "period", "slash",
|
||||
// 0x30
|
||||
"zero", "one", "two", "three", "four", "five", "six", "seven",
|
||||
"eight", "nine", "colon", "semicolon", "less", "equal",
|
||||
"greater", "question", // 0x40
|
||||
"at", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L",
|
||||
"M", "N", "O", // 0x50
|
||||
"P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "bracketleft",
|
||||
"backslash", "bracketright", "asciicircum", "underscore", // 0x60
|
||||
"quoteleft", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
|
||||
"l", "m", "n", "o", // 0x70
|
||||
"p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "braceleft",
|
||||
"bar", "braceright", "asciitilde", NOTDEF, // 0x80
|
||||
"Euro", NOTDEF, "quotesinglbase", "florin", "quotedblbase",
|
||||
"ellipsis", "dagger", "daggerdbl", "circumflex",
|
||||
"perthousand", "Scaron", "guilsinglleft", "OE", NOTDEF,
|
||||
NOTDEF, NOTDEF, // 0x90
|
||||
NOTDEF, NOTDEF, NOTDEF, "quotedblleft", "quotedblright",
|
||||
"bullet", "endash", "emdash", "tilde", "trademark",
|
||||
"scaron", "guilsinglright", "oe", NOTDEF, NOTDEF,
|
||||
"Ydieresis", // 0xA0
|
||||
NOTDEF, "exclamdown", "cent", "sterling", "currency", "yen",
|
||||
"brokenbar", "section", "dieresis", "copyright",
|
||||
"ordfeminine", "guillemotleft", "logicalnot", "hyphen",
|
||||
"registered", "macron", // 0xB0
|
||||
"degree", "plusminus", "twosuperior", "threesuperior", "acute", "mu",
|
||||
"paragraph", "periodcentered", "cedilla", "onesuperior",
|
||||
"ordmasculine", "guillemotright", "onequarter", "onehalf",
|
||||
"threequarters", "questiondown", // 0xC0
|
||||
"Agrave", "Aacute", "Acircumflex", "Atilde", "Adieresis", "Aring",
|
||||
"AE", "Ccedilla", "Egrave", "Eacute", "Ecircumflex",
|
||||
"Edieresis", "Igrave", "Iacute", "Icircumflex",
|
||||
"Idieresis", // 0xD0
|
||||
"Eth", "Ntilde", "Ograve", "Oacute", "Ocircumflex", "Otilde",
|
||||
"Odieresis", "multiply", "Oslash", "Ugrave", "Uacute",
|
||||
"Ucircumflex", "Udieresis", "Yacute", "Thorn", "germandbls",
|
||||
// 0xE0
|
||||
"agrave", "aacute", "acircumflex", "atilde", "adieresis", "aring",
|
||||
"ae", "ccedilla", "egrave", "eacute", "ecircumflex",
|
||||
"edieresis", "igrave", "iacute", "icircumflex",
|
||||
"idieresis", // 0xF0
|
||||
"eth", "ntilde", "ograve", "oacute", "ocircumflex", "otilde",
|
||||
"odieresis", "divide", "oslash", "ugrave", "uacute",
|
||||
"ucircumflex", "udieresis", "yacute", "thorn", "ydieresis"
|
||||
};
|
||||
|
||||
/**
|
||||
* The characters in WinAnsiEncoding
|
||||
*/
|
||||
public static final char[] WINANSI_ENCODING = {
|
||||
// not used until char 32
|
||||
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, // 0x20
|
||||
' ', '\u0021', '\"', '\u0023', '$', '%', '&', '\'', '(', ')', '*', '+', ',',
|
||||
'\u002d', '\u002e', '/', // 0x30
|
||||
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=',
|
||||
'>', '?', '@', // 0x40
|
||||
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
|
||||
'O', // 0x50
|
||||
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '\u005b', '\\',
|
||||
'\u005d', '^', '_', // 0x60
|
||||
'\u2018', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
|
||||
'n', 'o', // 0x70
|
||||
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '\u007b', '\u007c', '\u007d',
|
||||
'\u007e', '\u2022', // 0x80
|
||||
'\u20ac', '\u2022', '\u201a', '\u0192', '\u201e', '\u2026', '\u2020',
|
||||
'\u2021', '\u02c6', '\u2030', '\u0160', '\u2039', '\u0152', '\u2022',
|
||||
'\u017d', '\u2022', // 0x90
|
||||
'\u2022', '\u2018', // quoteleft
|
||||
'\u2019', // quoteright
|
||||
'\u201c', // quotedblleft
|
||||
'\u201d', // quotedblright
|
||||
'\u2022', // bullet
|
||||
'\u2013', // endash
|
||||
'\u2014', // emdash
|
||||
'~',
|
||||
'\u2122', // trademark
|
||||
'\u0161', '\u203a', '\u0153', '\u2022', '\u017e', '\u0178', // 0xA0
|
||||
' ', '\u00a1', '\u00a2', '\u00a3', '\u00a4', '\u00a5',
|
||||
'\u00a6', '\u00a7', '\u00a8', '\u00a9', '\u00aa', '\u00ab',
|
||||
'\u00ac', '\u00ad', '\u00ae', '\u00af', // 0xb0
|
||||
'\u00b0', '\u00b1', '\u00b2', '\u00b3', '\u00b4',
|
||||
'\u00b5', // This is hand-coded, the rest is assumption
|
||||
'\u00b6', // and *might* not be correct...
|
||||
'\u00b7', '\u00b8', '\u00b9', '\u00ba', '\u00bb', '\u00bc', '\u00bd',
|
||||
'\u00be', '\u00bf', // 0xc0
|
||||
'\u00c0', '\u00c1', '\u00c2', '\u00c3', '\u00c4', '\u00c5', // Aring
|
||||
'\u00c6', // AE
|
||||
'\u00c7', '\u00c8', '\u00c9', '\u00ca', '\u00cb', '\u00cc',
|
||||
'\u00cd', '\u00ce', '\u00cf', // 0xd0
|
||||
'\u00d0', '\u00d1', '\u00d2', '\u00d3', '\u00d4', '\u00d5',
|
||||
'\u00d6', '\u00d7', '\u00d8', // Oslash
|
||||
'\u00d9', '\u00da', '\u00db', '\u00dc', '\u00dd', '\u00de',
|
||||
'\u00df', // 0xe0
|
||||
'\u00e0', '\u00e1', '\u00e2', '\u00e3', '\u00e4', '\u00e5', // aring
|
||||
'\u00e6', // ae
|
||||
'\u00e7', '\u00e8', '\u00e9', '\u00ea', '\u00eb', '\u00ec',
|
||||
'\u00ed', '\u00ee', '\u00ef', // 0xf0
|
||||
'\u00f0', '\u00f1', '\u00f2', '\u00f3', '\u00f4', '\u00f5',
|
||||
'\u00f6', '\u00f7', '\u00f8', '\u00f9', '\u00fa', '\u00fb',
|
||||
'\u00fc', '\u00fd', '\u00fe', '\u00ff'
|
||||
};
|
||||
|
||||
/**
|
||||
* The characters in AdobeStandardCyrillicEncoding
|
||||
*/
|
||||
public static final char[] ADOBECYRILLIC_ENCODING = {
|
||||
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,
|
||||
' ', //space
|
||||
'\u0021', //exclam
|
||||
'\"', //quotedbl
|
||||
'\u0023', //numbersign
|
||||
'$', //dollar
|
||||
'%', //percent
|
||||
'&', //ampersand
|
||||
'\'', //quotesingle
|
||||
'(', //parenleft
|
||||
')', //parenright
|
||||
'*', //asterisk
|
||||
'+', //plus
|
||||
',', //comma
|
||||
'\u002d', //hyphen
|
||||
'\u002e', //period
|
||||
'/', //slash
|
||||
|
||||
'0', //zero
|
||||
'1', //one
|
||||
'2', //two
|
||||
'3', //three
|
||||
'4', //four
|
||||
'5', //five
|
||||
'6', //six
|
||||
'7', //seven
|
||||
'8', //eight
|
||||
'9', //nine
|
||||
':', //colon
|
||||
';', //semicolon
|
||||
'<', //less
|
||||
'=', //equal
|
||||
'>', //greater
|
||||
'?', //question
|
||||
|
||||
'@', //at
|
||||
'A', //A
|
||||
'B', //B
|
||||
'C', //C
|
||||
'D', //D
|
||||
'E', //E
|
||||
'F', //F
|
||||
'G', //G
|
||||
'H', //H
|
||||
'I', //I
|
||||
'J', //J
|
||||
'K', //K
|
||||
'L', //L
|
||||
'M', //M
|
||||
'N', //N
|
||||
'O', //O
|
||||
|
||||
'P', //P
|
||||
'Q', //Q
|
||||
'R', //R
|
||||
'S', //S
|
||||
'T', //T
|
||||
'U', //U
|
||||
'V', //V
|
||||
'W', //W
|
||||
'X', //X
|
||||
'Y', //Y
|
||||
'Z', //Z
|
||||
'\u005b', //bracketleft
|
||||
'\\', //backslash
|
||||
'\u005d', //bracketright
|
||||
'^', //asciicircum
|
||||
'_', //underscore
|
||||
|
||||
'\u0060', //grave
|
||||
'a', //a
|
||||
'b', //b
|
||||
'c', //c
|
||||
'd', //d
|
||||
'e', //e
|
||||
'f', //f
|
||||
'g', //g
|
||||
'h', //h
|
||||
'i', //i
|
||||
'j', //j
|
||||
'k', //k
|
||||
'l', //l
|
||||
'm', //m
|
||||
'n', //n
|
||||
'o', //o
|
||||
|
||||
'p', //p
|
||||
'q', //q
|
||||
'r', //r
|
||||
's', //s
|
||||
't', //t
|
||||
'u', //u
|
||||
'v', //v
|
||||
'w', //w
|
||||
'x', //x
|
||||
'y', //y
|
||||
'z', //z
|
||||
'\u007b', //braceleft
|
||||
'\u007c', //bar
|
||||
'\u007d', //braceright
|
||||
'\u007e', //asciitilde
|
||||
0,
|
||||
|
||||
'\u0402', //afii10051
|
||||
'\u0403', //afii10052
|
||||
'\u201a', //quotesinglebase
|
||||
'\u0453', //afii10100
|
||||
'\u201e', //quotedblbase
|
||||
'\u2026', //ellipsis
|
||||
'\u2020', //dagger
|
||||
'\u2021', //daggerdbl
|
||||
'\u20ac', //euro
|
||||
'\u2030', //perthousand
|
||||
'\u0409', //afii10058
|
||||
'\u2039', //guilsignlleft
|
||||
'\u040a', //afii10059
|
||||
'\u040c', //afii10061
|
||||
'\u040b', //afii10060
|
||||
'\u040f', //afii10045
|
||||
|
||||
'\u0452', //afii10099
|
||||
'\u2018', //quoteleft
|
||||
'\u2019', //quoteright
|
||||
'\u201c', //quotedblleft
|
||||
'\u201d', //quotedblright
|
||||
'\u2022', //bullet
|
||||
'\u2013', //endash
|
||||
'\u2014', //emdash
|
||||
0,
|
||||
'\u2122', //trademark
|
||||
'\u0459', //afii10106
|
||||
'\u203a', //guilsinglright
|
||||
'\u045a', //afii10107
|
||||
'\u045c', //afii10109
|
||||
'\u045b', //afii10108
|
||||
'\u045f', //afii10193
|
||||
|
||||
'\u00a0', //nbspace
|
||||
'\u040e', //afii10062
|
||||
'\u045e', //afii10110
|
||||
'\u0408', //afii10057
|
||||
'\u00a4', //currency
|
||||
'\u0490', //afii10050
|
||||
'\u00a6', //brokenbar
|
||||
'\u00a7', //section
|
||||
'\u0401', //afii10023
|
||||
'\u00a9', //copyright
|
||||
'\u0404', //afii10053
|
||||
'\u00ab', //guillemotleft
|
||||
'\u00ac', //logicalnot
|
||||
'\u00ad', //softhyphen
|
||||
'\u00ae', //registered
|
||||
'\u0407', //afii10056
|
||||
|
||||
'\u00b0', //degree
|
||||
'\u00b1', //plusminus
|
||||
'\u0406', //afii10055
|
||||
'\u0456', //afii10103
|
||||
'\u0491', //afii10098
|
||||
'\u00b5', //mu
|
||||
'\u00b6', //paragraph
|
||||
'\u00b7', //periodcentered
|
||||
'\u0451', //afii10071
|
||||
'\u2116', //afii61352
|
||||
'\u0454', //afii10101
|
||||
'\u00bb', //guillemotright
|
||||
'\u0458', //afii10105
|
||||
'\u0405', //afii10054
|
||||
'\u0455', //afii10102
|
||||
'\u0457', //afii10104
|
||||
|
||||
'\u0410', //afii10017
|
||||
'\u0411', //afii10018
|
||||
'\u0412', //afii10019
|
||||
'\u0413', //afii10020
|
||||
'\u0414', //afii10021
|
||||
'\u0415', //afii10022
|
||||
'\u0416', //afii10024
|
||||
'\u0417', //afii10025
|
||||
'\u0418', //afii10026
|
||||
'\u0419', //afii10027
|
||||
'\u041a', //afii10028
|
||||
'\u041b', //afii10029
|
||||
'\u041c', //afii10030
|
||||
'\u041d', //afii10031
|
||||
'\u041e', //afii10032
|
||||
'\u041f', //afii10033
|
||||
|
||||
'\u0420', //afii10034
|
||||
'\u0421', //afii10035
|
||||
'\u0422', //afii10036
|
||||
'\u0423', //afii10037
|
||||
'\u0424', //afii10038
|
||||
'\u0425', //afii10039
|
||||
'\u0426', //afii10040
|
||||
'\u0427', //afii10041
|
||||
'\u0428', //afii10042
|
||||
'\u0429', //afii10043
|
||||
'\u042a', //afii10044
|
||||
'\u042b', //afii10045
|
||||
'\u042c', //afii10046
|
||||
'\u042d', //afii10047
|
||||
'\u042e', //afii10048
|
||||
'\u042f', //afii10049
|
||||
|
||||
'\u0430', //afii10065
|
||||
'\u0431', //afii10066
|
||||
'\u0432', //afii10067
|
||||
'\u0433', //afii10068
|
||||
'\u0434', //afii10069
|
||||
'\u0435', //afii10070
|
||||
'\u0436', //afii10072
|
||||
'\u0437', //afii10073
|
||||
'\u0438', //afii10074
|
||||
'\u0439', //afii10075
|
||||
'\u043a', //afii10076
|
||||
'\u043b', //afii10077
|
||||
'\u043c', //afii10078
|
||||
'\u043d', //afii10079
|
||||
'\u043e', //afii10080
|
||||
'\u043f', //afii10081
|
||||
|
||||
'\u0440', //afii10082
|
||||
'\u0441', //afii10083
|
||||
'\u0442', //afii10084
|
||||
'\u0443', //afii10085
|
||||
'\u0444', //afii10086
|
||||
'\u0445', //afii10087
|
||||
'\u0446', //afii10088
|
||||
'\u0447', //afii10089
|
||||
'\u0448', //afii10090
|
||||
'\u0449', //afii10091
|
||||
'\u044a', //afii10092
|
||||
'\u044b', //afii10093
|
||||
'\u044c', //afii10094
|
||||
'\u044d', //afii10095
|
||||
'\u044e', //afii10096
|
||||
'\u044f', //afii10097
|
||||
};
|
||||
|
||||
/**
|
||||
* List of unicode glyphs
|
||||
*/
|
||||
private static final String[] UNICODE_GLYPHS;
|
||||
private static final String[] DINGBATS_GLYPHS;
|
||||
|
||||
private static final Map CHARNAME_ALTERNATIVES;
|
||||
|
||||
private static final Map CHARNAMES_TO_UNICODE;
|
||||
|
||||
static {
|
||||
Map map = new java.util.TreeMap();
|
||||
UNICODE_GLYPHS = loadGlyphList("glyphlist.txt", map);
|
||||
DINGBATS_GLYPHS = loadGlyphList("zapfdingbats.txt", map);
|
||||
CHARNAMES_TO_UNICODE = Collections.unmodifiableMap(map);
|
||||
|
||||
map = new java.util.TreeMap();
|
||||
addAlternatives(map, new String[] {"Omega", "Omegagreek"});
|
||||
addAlternatives(map, new String[] {"Delta", "Deltagreek"});
|
||||
//fraction maps to 2044 (FRACTION SLASH) and 2215 (DIVISION SLASH)
|
||||
addAlternatives(map, new String[] {"fraction", "divisionslash"});
|
||||
//hyphen maps to 002D (HYPHEN-MINUS) and 00AD (SOFT HYPHEN)
|
||||
addAlternatives(map, new String[] {"hyphen", "sfthyphen", "softhyphen", "minus"});
|
||||
//macron maps to 00AF (MACRON) and 02C9 (MODIFIER LETTER MACRON)
|
||||
addAlternatives(map, new String[] {"macron", "overscore"});
|
||||
//mu maps to 00B5 (MICRO SIGN) and 03BC (GREEK SMALL LETTER MU)
|
||||
addAlternatives(map, new String[] {"mu", "mu1", "mugreek"});
|
||||
//periodcentered maps to 00B7 (MIDDLE DOT) and 2219 (BULLET OPERATOR)
|
||||
addAlternatives(map, new String[]
|
||||
{"periodcentered", "middot", "bulletoperator", "anoteleia"});
|
||||
//space maps to 0020 (SPACE) and 00A0 (NO-BREAK SPACE)
|
||||
addAlternatives(map, new String[] {"space", "nonbreakingspace", "nbspace"});
|
||||
|
||||
//Scedilla maps to 015E (and F6C1 in private use area)
|
||||
//Tcommaaccent maps to 0162 (LATIN CAPITAL LETTER T WITH CEDILLA)
|
||||
// and 021a (LATIN CAPITAL LETTER T WITH COMMA BELOW)
|
||||
//scedilla maps to 015f (LATIN SMALL LETTER S WITH CEDILLA) (and F6C2 in private use area)
|
||||
//tcommaaccent maps to 0163 and 021b
|
||||
|
||||
//map numbers from and to their respective "oldstyle" variant
|
||||
addAlternatives(map, new String[] {"zero", "zerooldstyle"});
|
||||
addAlternatives(map, new String[] {"one", "oneoldstyle"});
|
||||
addAlternatives(map, new String[] {"two", "twooldstyle"});
|
||||
addAlternatives(map, new String[] {"three", "threeoldstyle"});
|
||||
addAlternatives(map, new String[] {"four", "fouroldstyle"});
|
||||
addAlternatives(map, new String[] {"five", "fiveoldstyle"});
|
||||
addAlternatives(map, new String[] {"six", "sixoldstyle"});
|
||||
addAlternatives(map, new String[] {"seven", "sevenoldstyle"});
|
||||
addAlternatives(map, new String[] {"eight", "eightoldstyle"});
|
||||
addAlternatives(map, new String[] {"nine", "nineoldstyle"});
|
||||
|
||||
//map currency signs from and to their respective "oldstyle" variant
|
||||
addAlternatives(map, new String[] {"cent", "centoldstyle"});
|
||||
addAlternatives(map, new String[] {"dollar", "dollaroldstyle"});
|
||||
|
||||
//Cyrillic names according Adobe Techninal Note #5013 aka Adobe Standard Cyrillic Font Specification
|
||||
addAlternatives(map, new String[] {"Acyrillic", "afii10017"});
|
||||
addAlternatives(map, new String[] {"Becyrillic", "afii10018"});
|
||||
addAlternatives(map, new String[] {"Vecyrillic", "afii10019"});
|
||||
addAlternatives(map, new String[] {"Gecyrillic", "afii10020"});
|
||||
addAlternatives(map, new String[] {"Decyrillic", "afii10021"});
|
||||
addAlternatives(map, new String[] {"Iecyrillic", "afii10022"});
|
||||
addAlternatives(map, new String[] {"Iocyrillic", "afii10023"});
|
||||
addAlternatives(map, new String[] {"Zhecyrillic", "afii10024"});
|
||||
addAlternatives(map, new String[] {"Zecyrillic", "afii10025"});
|
||||
addAlternatives(map, new String[] {"Iicyrillic", "afii10026"});
|
||||
addAlternatives(map, new String[] {"Iishortcyrillic", "afii10027"});
|
||||
addAlternatives(map, new String[] {"Kacyrillic", "afii10028"});
|
||||
addAlternatives(map, new String[] {"Elcyrillic", "afii10029"});
|
||||
addAlternatives(map, new String[] {"Emcyrillic", "afii10030"});
|
||||
addAlternatives(map, new String[] {"Encyrillic", "afii10031"});
|
||||
addAlternatives(map, new String[] {"Ocyrillic", "afii10032"});
|
||||
addAlternatives(map, new String[] {"Pecyrillic", "afii10033"});
|
||||
addAlternatives(map, new String[] {"Ercyrillic", "afii10034"});
|
||||
addAlternatives(map, new String[] {"Escyrillic", "afii10035"});
|
||||
addAlternatives(map, new String[] {"Tecyrillic", "afii10036"});
|
||||
addAlternatives(map, new String[] {"Ucyrillic", "afii10037"});
|
||||
addAlternatives(map, new String[] {"Efcyrillic", "afii10038"});
|
||||
addAlternatives(map, new String[] {"Khacyrillic", "afii10039"});
|
||||
addAlternatives(map, new String[] {"Tsecyrillic", "afii10040"});
|
||||
addAlternatives(map, new String[] {"Checyrillic", "afii10041"});
|
||||
addAlternatives(map, new String[] {"Shacyrillic", "afii10042"});
|
||||
addAlternatives(map, new String[] {"Shchacyrillic", "afii10043"});
|
||||
addAlternatives(map, new String[] {"Hardsigncyrillic", "afii10044"});
|
||||
addAlternatives(map, new String[] {"Yericyrillic", "afii10045"});
|
||||
addAlternatives(map, new String[] {"Softsigncyrillic", "afii10046"});
|
||||
addAlternatives(map, new String[] {"Ereversedcyrillic", "afii10047"});
|
||||
addAlternatives(map, new String[] {"IUcyrillic", "afii10048"});
|
||||
addAlternatives(map, new String[] {"IAcyrillic", "afii10049"});
|
||||
|
||||
addAlternatives(map, new String[] {"acyrillic", "afii10065"});
|
||||
addAlternatives(map, new String[] {"becyrillic", "afii10066"});
|
||||
addAlternatives(map, new String[] {"vecyrillic", "afii10067"});
|
||||
addAlternatives(map, new String[] {"gecyrillic", "afii10068"});
|
||||
addAlternatives(map, new String[] {"decyrillic", "afii10069"});
|
||||
addAlternatives(map, new String[] {"iecyrillic", "afii10070"});
|
||||
addAlternatives(map, new String[] {"iocyrillic", "afii10071"});
|
||||
addAlternatives(map, new String[] {"zhecyrillic", "afii10072"});
|
||||
addAlternatives(map, new String[] {"zecyrillic", "afii10073"});
|
||||
addAlternatives(map, new String[] {"iicyrillic", "afii10074"});
|
||||
addAlternatives(map, new String[] {"iishortcyrillic", "afii10075"});
|
||||
addAlternatives(map, new String[] {"kacyrillic", "afii10076"});
|
||||
addAlternatives(map, new String[] {"elcyrillic", "afii10077"});
|
||||
addAlternatives(map, new String[] {"emcyrillic", "afii10078"});
|
||||
addAlternatives(map, new String[] {"encyrillic", "afii10079"});
|
||||
addAlternatives(map, new String[] {"ocyrillic", "afii10080"});
|
||||
addAlternatives(map, new String[] {"pecyrillic", "afii10081"});
|
||||
addAlternatives(map, new String[] {"ercyrillic", "afii10082"});
|
||||
addAlternatives(map, new String[] {"escyrillic", "afii10083"});
|
||||
addAlternatives(map, new String[] {"tecyrillic", "afii10084"});
|
||||
addAlternatives(map, new String[] {"ucyrillic", "afii10085"});
|
||||
addAlternatives(map, new String[] {"efcyrillic", "afii10086"});
|
||||
addAlternatives(map, new String[] {"khacyrillic", "afii10087"});
|
||||
addAlternatives(map, new String[] {"tsecyrillic", "afii10088"});
|
||||
addAlternatives(map, new String[] {"checyrillic", "afii10089"});
|
||||
addAlternatives(map, new String[] {"shacyrillic", "afii10090"});
|
||||
addAlternatives(map, new String[] {"shchacyrillic", "afii10091"});
|
||||
addAlternatives(map, new String[] {"hardsigncyrillic", "afii10092"});
|
||||
addAlternatives(map, new String[] {"yericyrillic", "afii10093"});
|
||||
addAlternatives(map, new String[] {"softsigncyrillic", "afii10094"});
|
||||
addAlternatives(map, new String[] {"ereversedcyrillic", "afii10095"});
|
||||
addAlternatives(map, new String[] {"iucyrillic", "afii10096"});
|
||||
addAlternatives(map, new String[] {"iacyrillic", "afii10097"});
|
||||
|
||||
addAlternatives(map, new String[] {"Gheupturncyrillic", "afii10050"});
|
||||
addAlternatives(map, new String[] {"Djecyrillic", "afii10051"});
|
||||
addAlternatives(map, new String[] {"Gjecyrillic", "afii10052"});
|
||||
addAlternatives(map, new String[] {"Ecyrillic", "afii10053"});
|
||||
addAlternatives(map, new String[] {"Dzecyrillic", "afii10054"});
|
||||
addAlternatives(map, new String[] {"Icyrillic", "afii10055"});
|
||||
addAlternatives(map, new String[] {"Yicyrillic", "afii10056"});
|
||||
addAlternatives(map, new String[] {"Jecyrillic", "afii10057"});
|
||||
addAlternatives(map, new String[] {"Ljecyrillic", "afii10058"});
|
||||
addAlternatives(map, new String[] {"Njecyrillic", "afii10059"});
|
||||
addAlternatives(map, new String[] {"Tshecyrillic", "afii10060"});
|
||||
addAlternatives(map, new String[] {"Kjecyrillic", "afii10061"});
|
||||
addAlternatives(map, new String[] {"Ushortcyrillic", "afii10062"});
|
||||
|
||||
addAlternatives(map, new String[] {"Dzhecyrillic", "afii10145"});
|
||||
addAlternatives(map, new String[] {"Yatcyrillic", "afii10146"});
|
||||
addAlternatives(map, new String[] {"Fitacyrillic", "afii10147"});
|
||||
addAlternatives(map, new String[] {"Izhitsacyrillic", "afii10148"});
|
||||
|
||||
addAlternatives(map, new String[] {"gheupturncyrillic", "afii10098"});
|
||||
addAlternatives(map, new String[] {"djecyrillic", "afii10099"});
|
||||
addAlternatives(map, new String[] {"gjecyrillic", "afii10100"});
|
||||
addAlternatives(map, new String[] {"ecyrillic", "afii10101"});
|
||||
addAlternatives(map, new String[] {"dzecyrillic", "afii10102"});
|
||||
addAlternatives(map, new String[] {"icyrillic", "afii10103"});
|
||||
addAlternatives(map, new String[] {"yicyrillic", "afii10104"});
|
||||
addAlternatives(map, new String[] {"jecyrillic", "afii10105"});
|
||||
addAlternatives(map, new String[] {"ljecyrillic", "afii10106"});
|
||||
addAlternatives(map, new String[] {"njecyrillic", "afii10107"});
|
||||
addAlternatives(map, new String[] {"tshecyrillic", "afii10108"});
|
||||
addAlternatives(map, new String[] {"kjecyrillic", "afii10109"});
|
||||
addAlternatives(map, new String[] {"ushortcyrillic", "afii10110"});
|
||||
|
||||
addAlternatives(map, new String[] {"dzhecyrillic", "afii10193"});
|
||||
addAlternatives(map, new String[] {"yatcyrillic", "afii10194"});
|
||||
addAlternatives(map, new String[] {"fitacyrillic", "afii10195"});
|
||||
addAlternatives(map, new String[] {"izhitsacyrillic", "afii10196"});
|
||||
|
||||
CHARNAME_ALTERNATIVES = Collections.unmodifiableMap(map);
|
||||
}
|
||||
|
||||
private static void addAlternatives(Map map, String[] alternatives) {
|
||||
for (int i = 0, c = alternatives.length; i < c; i++) {
|
||||
String[] alt = new String[c - 1];
|
||||
int idx = 0;
|
||||
for (int j = 0; j < c; j++) {
|
||||
if (i != j) {
|
||||
alt[idx] = alternatives[j];
|
||||
idx++;
|
||||
}
|
||||
}
|
||||
map.put(alternatives[i], alt);
|
||||
}
|
||||
}
|
||||
|
||||
private static String[] loadGlyphList(String filename, Map charNameToUnicodeMap) {
|
||||
List lines = new java.util.ArrayList();
|
||||
InputStream in = Glyphs.class.getResourceAsStream(filename);
|
||||
if (in == null) {
|
||||
throw new RuntimeException("Cannot load " + filename
|
||||
+ ". The Glyphs class cannot properly be initialized!");
|
||||
}
|
||||
try {
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(in, "US-ASCII"));
|
||||
String line;
|
||||
try {
|
||||
while ((line = reader.readLine()) != null) {
|
||||
if (!line.startsWith("#")) {
|
||||
lines.add(line);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
reader.close();
|
||||
}
|
||||
} catch (UnsupportedEncodingException uee) {
|
||||
throw new RuntimeException("Incompatible JVM! US-ASCII encoding is not supported."
|
||||
+ " The Glyphs class cannot properly be initialized!");
|
||||
} catch (IOException ioe) {
|
||||
throw new RuntimeException("I/O error while loading " + filename
|
||||
+ ". The Glyphs class cannot properly be initialized!");
|
||||
} finally {
|
||||
IOUtils.closeQuietly(in);
|
||||
}
|
||||
String[] arr = new String[lines.size() * 2];
|
||||
int pos = 0;
|
||||
StringBuffer buf = new StringBuffer();
|
||||
for (Object line1 : lines) {
|
||||
String line = (String) line1;
|
||||
int semicolon = line.indexOf(';');
|
||||
if (semicolon <= 0) {
|
||||
continue;
|
||||
}
|
||||
String charName = line.substring(0, semicolon);
|
||||
String rawUnicode = line.substring(semicolon + 1);
|
||||
buf.setLength(0);
|
||||
|
||||
StringTokenizer tokenizer = new StringTokenizer(rawUnicode, " ", false);
|
||||
while (tokenizer.hasMoreTokens()) {
|
||||
String token = tokenizer.nextToken();
|
||||
assert token.length() == 4;
|
||||
buf.append(hexToChar(token));
|
||||
}
|
||||
|
||||
String unicode = buf.toString();
|
||||
arr[pos] = unicode;
|
||||
pos++;
|
||||
arr[pos] = charName;
|
||||
pos++;
|
||||
assert !charNameToUnicodeMap.containsKey(charName);
|
||||
charNameToUnicodeMap.put(charName, unicode);
|
||||
}
|
||||
return arr;
|
||||
}
|
||||
|
||||
private static char hexToChar(String hex) {
|
||||
return (char)Integer.parseInt(hex, 16);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the glyphname from a character,
|
||||
* eg, charToGlyphName('\\') returns "backslash"
|
||||
*
|
||||
* @param ch glyph to evaluate
|
||||
* @return the name of the glyph
|
||||
*/
|
||||
public static String charToGlyphName(char ch) {
|
||||
return stringToGlyph(Character.toString(ch));
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a String containing the Unicode sequence the given glyph name represents.
|
||||
* @param glyphName the glyph name
|
||||
* @return the Unicode sequence of the glyph (or null if the glyph name is unknown)
|
||||
*/
|
||||
public static String getUnicodeSequenceForGlyphName(String glyphName) {
|
||||
//Mapping: see http://www.adobe.com/devnet/opentype/archives/glyph.html
|
||||
//Step 1
|
||||
int period = glyphName.indexOf('.');
|
||||
if (period >= 0) {
|
||||
glyphName = glyphName.substring(0, period);
|
||||
}
|
||||
|
||||
//Step 2
|
||||
StringBuffer sb = new StringBuffer();
|
||||
StringTokenizer tokenizer = new StringTokenizer(glyphName, "_", false);
|
||||
while (tokenizer.hasMoreTokens()) {
|
||||
String token = tokenizer.nextToken();
|
||||
//Step 3
|
||||
String sequence = (String)CHARNAMES_TO_UNICODE.get(token);
|
||||
if (sequence == null) {
|
||||
if (token.startsWith("uni")) {
|
||||
int len = token.length();
|
||||
int pos = 3;
|
||||
while (pos + 4 <= len) {
|
||||
try {
|
||||
sb.append(hexToChar(token.substring(pos, pos + 4)));
|
||||
} catch (NumberFormatException nfe) {
|
||||
return null;
|
||||
}
|
||||
pos += 4;
|
||||
}
|
||||
} else if (token.startsWith("u")) {
|
||||
if (token.length() > 5) {
|
||||
//TODO: Unicode scalar values greater than FFFF are currently not supported
|
||||
return null;
|
||||
}
|
||||
if (token.length() < 5) {
|
||||
/*
|
||||
* This is not in the form of 'u1234' --probably a
|
||||
* non-official glyph name that isn't listed in the
|
||||
* unicode map.
|
||||
*/
|
||||
return null;
|
||||
}
|
||||
try {
|
||||
sb.append(hexToChar(token.substring(1, 5)));
|
||||
} catch (NumberFormatException nfe) {
|
||||
return null;
|
||||
}
|
||||
} else {
|
||||
//ignore (empty string)
|
||||
}
|
||||
} else {
|
||||
sb.append(sequence);
|
||||
}
|
||||
}
|
||||
|
||||
if (sb.length() == 0) {
|
||||
return null;
|
||||
} else {
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the glyphname from a string,
|
||||
* eg, glyphToString("\\") returns "backslash"
|
||||
*
|
||||
* @param name glyph to evaluate
|
||||
* @return the name of the glyph
|
||||
* TODO: javadocs for glyphToString and stringToGlyph are confused
|
||||
* @deprecated User getUnicodeCodePointsForGlyphName instead. This method only returns the
|
||||
* first Unicode code point it finds.
|
||||
*/
|
||||
@Deprecated
|
||||
public static String glyphToString(String name) {
|
||||
for (int i = 0; i < UNICODE_GLYPHS.length; i += 2) {
|
||||
if (UNICODE_GLYPHS[i + 1].equals(name)) {
|
||||
return UNICODE_GLYPHS[i];
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the string representation of a glyphname,
|
||||
* eg stringToGlyph("backslash") returns "\\"
|
||||
*
|
||||
* @param name name of the glyph
|
||||
* @return the string representation (or an empty String if no match was found)
|
||||
*/
|
||||
public static String stringToGlyph(String name) {
|
||||
for (int i = 0; i < UNICODE_GLYPHS.length; i += 2) {
|
||||
if (UNICODE_GLYPHS[i].equals(name)) {
|
||||
return UNICODE_GLYPHS[i + 1];
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < DINGBATS_GLYPHS.length; i += 2) {
|
||||
if (DINGBATS_GLYPHS[i].equals(name)) {
|
||||
return DINGBATS_GLYPHS[i + 1];
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of char names which can serve as alternatives for the given one.
|
||||
* @param charName the character name to search alternatives for
|
||||
* @return an array of char names or null if no alternatives are available
|
||||
*/
|
||||
public static String[] getCharNameAlternativesFor(String charName) {
|
||||
return (String[])CHARNAME_ALTERNATIVES.get(charName);
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<!-- $Id$ -->
|
||||
<HTML>
|
||||
<TITLE>org.apache.xmlgraphics.fonts Package</TITLE>
|
||||
<BODY>
|
||||
<P>Classes for handling fonts, glyphs, font encodings etc.</P>
|
||||
</BODY>
|
||||
</HTML>
|
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: GraphicsConstants.java 750418 2009-03-05 11:03:54Z vhennebert $ */
|
||||
|
||||
package org.apache.xmlgraphics.image;
|
||||
|
||||
public final class GraphicsConstants {
|
||||
|
||||
/**
|
||||
* The default DPI used when they cannot be determined by the graphics
|
||||
* environment or loaded from the image.
|
||||
*/
|
||||
public static final int DEFAULT_DPI = 72;
|
||||
|
||||
/**
|
||||
* Graphics may be sampled at this resolution.
|
||||
*/
|
||||
public static final int DEFAULT_SAMPLE_DPI = 300;
|
||||
|
||||
/**
|
||||
* This class should not be instantiated.
|
||||
*/
|
||||
private GraphicsConstants() {
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,184 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: PNGChunk.java 1732019 2016-02-24 05:01:10Z gadams $ */
|
||||
|
||||
package org.apache.xmlgraphics.image.codec.png;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
public class PNGChunk {
|
||||
int length;
|
||||
int type;
|
||||
byte[] data;
|
||||
int crc;
|
||||
|
||||
String typeString;
|
||||
|
||||
/** logger */
|
||||
protected static final Log log = LogFactory.getLog(PNGChunk.class);
|
||||
|
||||
/**
|
||||
* See http://en.wikipedia.org/wiki/Portable_Network_Graphics for a light explanation;
|
||||
* See http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html for the spec.
|
||||
*/
|
||||
public enum ChunkType {
|
||||
IHDR, // IHDR must be the first chunk
|
||||
PLTE, // PLTE contains the palette
|
||||
IDAT, // IDAT contains the image, which may be split among multiple IDAT chunks
|
||||
IEND, // IEND marks the image end
|
||||
bKGD, // bKGD gives the default background color
|
||||
cHRM, // cHRM gives the chromaticity coordinates
|
||||
gAMA, // gAMA specifies gamma
|
||||
hIST, // hIST can store the histogram
|
||||
iCCP, // iCCP is an ICC color profile
|
||||
iTXt, // iTXt contains UTF-8 text
|
||||
pHYs, // pHYs holds the intended pixel size
|
||||
sBIT, // sBIT (significant bits) indicates the color-accuracy
|
||||
sPLT, // sPLT suggests a palette to use
|
||||
sRGB, // sRGB indicates that the standard sRGB color space is used
|
||||
sTER, // sTER stereo-image indicator chunk for stereoscopic images
|
||||
tEXt, // tEXt can store text that can be represented in ISO/IEC 8859-1
|
||||
tIME, // tIME stores the time that the image was last changed
|
||||
tRNS, // tRNS contains transparency information
|
||||
zTXt; // zTXt contains compressed text with the same limits as tEXt
|
||||
}
|
||||
|
||||
public PNGChunk(int length, int type, byte[] data, int crc) {
|
||||
this.length = length;
|
||||
this.type = type;
|
||||
this.data = data;
|
||||
this.crc = crc;
|
||||
this.typeString = typeIntToString(this.type);
|
||||
}
|
||||
|
||||
public int getLength() {
|
||||
return length;
|
||||
}
|
||||
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public String getTypeString() {
|
||||
return typeString;
|
||||
}
|
||||
|
||||
public byte[] getData() {
|
||||
return data;
|
||||
}
|
||||
|
||||
public byte getByte(int offset) {
|
||||
return data[offset];
|
||||
}
|
||||
|
||||
public int getInt1(int offset) {
|
||||
return data[offset] & 0xff;
|
||||
}
|
||||
|
||||
public int getInt2(int offset) {
|
||||
return ((data[offset] & 0xff) << 8) | (data[offset + 1] & 0xff);
|
||||
}
|
||||
|
||||
public int getInt4(int offset) {
|
||||
return ((data[offset] & 0xff) << 24) | ((data[offset + 1] & 0xff) << 16)
|
||||
| ((data[offset + 2] & 0xff) << 8) | (data[offset + 3] & 0xff);
|
||||
}
|
||||
|
||||
public String getString4(int offset) {
|
||||
return "" + (char) data[offset] + (char) data[offset + 1] + (char) data[offset + 2]
|
||||
+ (char) data[offset + 3];
|
||||
}
|
||||
|
||||
public boolean isType(String typeName) {
|
||||
return typeString.equals(typeName);
|
||||
}
|
||||
|
||||
/**
|
||||
* Reads the next chunk from the input stream.
|
||||
* @param distream the input stream
|
||||
* @return the chunk
|
||||
*/
|
||||
public static PNGChunk readChunk(DataInputStream distream) {
|
||||
try {
|
||||
int length = distream.readInt();
|
||||
int type = distream.readInt();
|
||||
byte[] data = new byte[length];
|
||||
distream.readFully(data);
|
||||
int crc = distream.readInt();
|
||||
|
||||
return new PNGChunk(length, type, data, crc);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the PNG chunk type, a four letter case sensitive ASCII type/name.
|
||||
* @param distream the input stream
|
||||
* @return a four letter case sensitive ASCII type/name
|
||||
*/
|
||||
public static String getChunkType(DataInputStream distream) {
|
||||
try {
|
||||
distream.mark(8);
|
||||
/* int length = */distream.readInt();
|
||||
int type = distream.readInt();
|
||||
distream.reset();
|
||||
|
||||
return typeIntToString(type);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private static String typeIntToString(int type) {
|
||||
String typeString = "";
|
||||
typeString += (char) (type >> 24);
|
||||
typeString += (char) ((type >> 16) & 0xff);
|
||||
typeString += (char) ((type >> 8) & 0xff);
|
||||
typeString += (char) (type & 0xff);
|
||||
return typeString;
|
||||
}
|
||||
|
||||
/**
|
||||
* Skips the next chunk from the input stream.
|
||||
* @param distream the input stream
|
||||
* @return true if skipping successful, false otherwise
|
||||
*/
|
||||
public static boolean skipChunk(DataInputStream distream) {
|
||||
try {
|
||||
int length = distream.readInt();
|
||||
distream.readInt();
|
||||
// is this really faster than reading?
|
||||
int skipped = distream.skipBytes(length);
|
||||
distream.readInt();
|
||||
if (skipped != length) {
|
||||
log.warn("Incorrect number of bytes skipped.");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
log.warn(e.getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,357 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: PNGDecodeParam.java 1732018 2016-02-24 04:51:06Z gadams $ */
|
||||
|
||||
package org.apache.xmlgraphics.image.codec.png;
|
||||
|
||||
import org.apache.xmlgraphics.image.codec.util.ImageDecodeParam;
|
||||
import org.apache.xmlgraphics.image.codec.util.PropertyUtil;
|
||||
|
||||
// CSOFF: WhitespaceAround
|
||||
|
||||
/**
|
||||
* An instance of <code>ImageDecodeParam</code> for decoding images in
|
||||
* the PNG format.
|
||||
*
|
||||
* <code>PNGDecodeParam</code> allows several aspects of the decoding
|
||||
* process for PNG images to be controlled. By default, decoding produces
|
||||
* output images with the following properties:
|
||||
*
|
||||
* <p> Images with a bit depth of 8 or less use a
|
||||
* <code>DataBufferByte</code> to hold the pixel data. 16-bit images
|
||||
* use a <code>DataBufferUShort</code>.
|
||||
*
|
||||
* <p> Palette color images and non-transparent grayscale images with
|
||||
* bit depths of 1, 2, or 4 will have a
|
||||
* <code>MultiPixelPackedSampleModel</code> and an
|
||||
* <code>IndexColorModel</code>. For palette color images, the
|
||||
* <code>ColorModel</code> palette contains the red, green, blue, and
|
||||
* optionally alpha palette information. For grayscale images, the
|
||||
* palette is used to expand the pixel data to cover the range 0-255.
|
||||
* The pixels are stored packed 8, 4, or 2 to the byte.
|
||||
*
|
||||
* <p> All other images are stored using a
|
||||
* <code>PixelInterleavedSampleModel</code> with each sample of a pixel
|
||||
* occupying its own <code>byte</code> or <code>short</code> within
|
||||
* the <code>DataBuffer</code>. A <code>ComponentColorModel</code> is
|
||||
* used which simply extracts the red, green, blue, gray, and/or alpha
|
||||
* information from separate <code>DataBuffer</code> entries.
|
||||
*
|
||||
* <p> Five aspects of this process may be altered by means of methods
|
||||
* in this class.
|
||||
*
|
||||
* <p> <code>setSuppressAlpha()</code> prevents an alpha channel
|
||||
* from appearing in the output.
|
||||
*
|
||||
* <p> <code>setExpandPalette()</code> turns palette-color images into
|
||||
* 3-or 4-channel full-color images.
|
||||
*
|
||||
* <p> <code>setOutput8BitGray()</code> causes 1, 2, or 4 bit
|
||||
* grayscale images to be output in 8-bit form, using a
|
||||
* <code>ComponentSampleModel</code> and
|
||||
* <code>ComponentColorModel</code>.
|
||||
*
|
||||
* <p> <code>setDecodingExponent()</code> causes the output image to be
|
||||
* gamma-corrected using a supplied output gamma value.
|
||||
*
|
||||
* <p> <code>setExpandGrayAlpha()</code> causes 2-channel gray/alpha
|
||||
* (GA) images to be output as full-color (GGGA) images, which may
|
||||
* simplify further processing and display.
|
||||
*
|
||||
* <p><b> This class is not a committed part of the JAI API. It may
|
||||
* be removed or changed in future releases of JAI.</b>
|
||||
*/
|
||||
public class PNGDecodeParam implements ImageDecodeParam {
|
||||
|
||||
private static final long serialVersionUID = 3957265194926624623L;
|
||||
|
||||
/**
|
||||
* Constructs a default instance of <code>PNGDecodeParam</code>.
|
||||
*/
|
||||
public PNGDecodeParam() { }
|
||||
|
||||
private boolean suppressAlpha;
|
||||
|
||||
/**
|
||||
* Returns <code>true</code> if alpha (transparency) will
|
||||
* be prevented from appearing in the output.
|
||||
*/
|
||||
public boolean getSuppressAlpha() {
|
||||
return suppressAlpha;
|
||||
}
|
||||
|
||||
/**
|
||||
* If set, no alpha (transparency) channel will appear in the
|
||||
* output image.
|
||||
*
|
||||
* <p> The default is to allow transparency to appear in the
|
||||
* output image.
|
||||
*/
|
||||
public void setSuppressAlpha(boolean suppressAlpha) {
|
||||
this.suppressAlpha = suppressAlpha;
|
||||
}
|
||||
|
||||
private boolean expandPalette;
|
||||
|
||||
/**
|
||||
* Returns true if palette-color images will be expanded to
|
||||
* produce full-color output.
|
||||
*/
|
||||
public boolean getExpandPalette() {
|
||||
return expandPalette;
|
||||
}
|
||||
|
||||
/**
|
||||
* If set, palette color images (PNG color type 3) will
|
||||
* be decoded into full-color (RGB) output images. The output
|
||||
* image may have 3 or 4 channels, depending on the presence of
|
||||
* transparency information.
|
||||
*
|
||||
* <p> The default is to output palette images using a single
|
||||
* channel. The palette information is used to construct the
|
||||
* output image's <code>ColorModel</code>.
|
||||
*/
|
||||
public void setExpandPalette(boolean expandPalette) {
|
||||
this.expandPalette = expandPalette;
|
||||
}
|
||||
|
||||
private boolean output8BitGray;
|
||||
|
||||
/**
|
||||
* Returns the current value of the 8-bit gray output parameter.
|
||||
*/
|
||||
public boolean getOutput8BitGray() {
|
||||
return output8BitGray;
|
||||
}
|
||||
|
||||
/**
|
||||
* If set, grayscale images with a bit depth less than 8
|
||||
* (1, 2, or 4) will be output in 8 bit form. The output values
|
||||
* will occupy the full 8-bit range. For example, gray values
|
||||
* 0, 1, 2, and 3 of a 2-bit image will be output as
|
||||
* 0, 85, 170, and 255.
|
||||
*
|
||||
* <p> The decoding of non-grayscale images and grayscale images
|
||||
* with a bit depth of 8 or 16 are unaffected by this setting.
|
||||
*
|
||||
* <p> The default is not to perform expansion. Grayscale images
|
||||
* with a depth of 1, 2, or 4 bits will be represented using
|
||||
* a <code>MultiPixelPackedSampleModel</code> and an
|
||||
* <code>IndexColorModel</code>.
|
||||
*/
|
||||
public void setOutput8BitGray(boolean output8BitGray) {
|
||||
this.output8BitGray = output8BitGray;
|
||||
}
|
||||
|
||||
private boolean performGammaCorrection = true;
|
||||
|
||||
/**
|
||||
* Returns <code>true</code> if gamma correction is to be performed
|
||||
* on the image data. The default is <code>true</code>.
|
||||
*
|
||||
* <p> If gamma correction is to be performed, the
|
||||
* <code>getUserExponent()</code> and
|
||||
* <code>getDisplayExponent()</code> methods are used in addition to
|
||||
* the gamma value stored within the file (or the default value of
|
||||
* 1/2.2 used if no value is found) to produce a single exponent
|
||||
* using the formula:
|
||||
* <pre>
|
||||
* decoding_exponent = user_exponent/(gamma_from_file * display_exponent)
|
||||
* </pre>
|
||||
*/
|
||||
public boolean getPerformGammaCorrection() {
|
||||
return performGammaCorrection;
|
||||
}
|
||||
|
||||
/**
|
||||
* Turns gamma corection of the image data on or off.
|
||||
*/
|
||||
public void setPerformGammaCorrection(boolean performGammaCorrection) {
|
||||
this.performGammaCorrection = performGammaCorrection;
|
||||
}
|
||||
|
||||
private float userExponent = 1.0F;
|
||||
|
||||
/**
|
||||
* Returns the current value of the user exponent parameter.
|
||||
* By default, the user exponent is equal to 1.0F.
|
||||
*/
|
||||
public float getUserExponent() {
|
||||
return userExponent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the user exponent to a given value. The exponent
|
||||
* must be positive. If not, an
|
||||
* <code>IllegalArgumentException</code> will be thrown.
|
||||
*
|
||||
* <p> The output image pixels will be placed through a transformation
|
||||
* of the form:
|
||||
*
|
||||
* <pre>
|
||||
* sample = integer_sample / (2^bitdepth - 1.0)
|
||||
* decoding_exponent = user_exponent/(gamma_from_file * display_exponent)
|
||||
* output = sample ^ decoding_exponent
|
||||
* </pre>
|
||||
*
|
||||
* where <code>gamma_from_file</code> is the gamma of the file
|
||||
* data, as determined by the <code>gAMA</code>, <code>sRGB</code>,
|
||||
* and/or <code>iCCP</code> chunks, and <code>display_exponent</code>
|
||||
* is the exponent of the intrinsic transfer curve of the display,
|
||||
* generally 2.2.
|
||||
*
|
||||
* <p> Input files which do not specify any gamma are assumed to
|
||||
* have a gamma of <code>1/2.2</code>; such images may be displayed
|
||||
* on a CRT with an exponent of 2.2 using the default user
|
||||
* exponent of 1.0.
|
||||
*
|
||||
* <p> The user exponent may be used in order to change the
|
||||
* effective gamma of a file. If a file has a stored gamma of
|
||||
* X, but the decoder believes that the true file gamma is Y,
|
||||
* setting a user exponent of Y/X will produce the same result
|
||||
* as changing the file gamma.
|
||||
*
|
||||
* <p> This parameter affects the decoding of all image types.
|
||||
*
|
||||
* @throws IllegalArgumentException if <code>userExponent</code> is
|
||||
* negative.
|
||||
*/
|
||||
public void setUserExponent(float userExponent) {
|
||||
if (userExponent <= 0.0F) {
|
||||
throw new IllegalArgumentException(PropertyUtil.getString("PNGDecodeParam0"));
|
||||
}
|
||||
this.userExponent = userExponent;
|
||||
}
|
||||
|
||||
private float displayExponent = 2.2F;
|
||||
|
||||
/**
|
||||
* Returns the current value of the display exponent parameter.
|
||||
* By default, the display exponent is equal to 2.2F.
|
||||
*/
|
||||
public float getDisplayExponent() {
|
||||
return displayExponent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the display exponent to a given value. The exponent
|
||||
* must be positive. If not, an
|
||||
* <code>IllegalArgumentException</code> will be thrown.
|
||||
*
|
||||
* <p> The output image pixels will be placed through a transformation
|
||||
* of the form:
|
||||
*
|
||||
* <pre>
|
||||
* sample = integer_sample / (2^bitdepth - 1.0)
|
||||
* decoding_exponent = user_exponent/(gamma_from_file * display_exponent)
|
||||
* output = sample ^ decoding_exponent
|
||||
* </pre>
|
||||
*
|
||||
* where <code>gamma_from_file</code> is the gamma of the file
|
||||
* data, as determined by the <code>gAMA</code>, <code>sRGB</code>,
|
||||
* and/or <code>iCCP</code> chunks, and <code>user_exponent</code>
|
||||
* is an additional user-supplied parameter.
|
||||
*
|
||||
* <p> Input files which do not specify any gamma are assumed to
|
||||
* have a gamma of <code>1/2.2</code>; such images should be
|
||||
* decoding using the default display exponent of 2.2.
|
||||
*
|
||||
* <p> If an image is to be processed further before being displayed,
|
||||
* it may be preferable to set the display exponent to 1.0 in order
|
||||
* to produce a linear output image.
|
||||
*
|
||||
* <p> This parameter affects the decoding of all image types.
|
||||
*
|
||||
* @throws IllegalArgumentException if <code>userExponent</code> is
|
||||
* negative.
|
||||
*/
|
||||
public void setDisplayExponent(float displayExponent) {
|
||||
if (displayExponent <= 0.0F) {
|
||||
throw new IllegalArgumentException(PropertyUtil.getString("PNGDecodeParam1"));
|
||||
}
|
||||
this.displayExponent = displayExponent;
|
||||
}
|
||||
|
||||
private boolean expandGrayAlpha;
|
||||
|
||||
/**
|
||||
* Returns the current setting of the gray/alpha expansion.
|
||||
*/
|
||||
public boolean getExpandGrayAlpha() {
|
||||
return expandGrayAlpha;
|
||||
}
|
||||
|
||||
/**
|
||||
* If set, images containing one channel of gray and one channel of
|
||||
* alpha (GA) will be output in a 4-channel format (GGGA). This
|
||||
* produces output that may be simpler to process and display.
|
||||
*
|
||||
* <p> This setting affects both images of color type 4 (explicit
|
||||
* alpha) and images of color type 0 (grayscale) that contain
|
||||
* transparency information.
|
||||
*
|
||||
* <p> By default, no expansion is performed.
|
||||
*/
|
||||
public void setExpandGrayAlpha(boolean expandGrayAlpha) {
|
||||
this.expandGrayAlpha = expandGrayAlpha;
|
||||
}
|
||||
|
||||
private boolean generateEncodeParam;
|
||||
|
||||
private PNGEncodeParam encodeParam;
|
||||
|
||||
/**
|
||||
* Returns <code>true</code> if an instance of
|
||||
* <code>PNGEncodeParam</code> will be available after an image
|
||||
* has been decoded via the <code>getEncodeParam</code> method.
|
||||
*/
|
||||
public boolean getGenerateEncodeParam() {
|
||||
return generateEncodeParam;
|
||||
}
|
||||
|
||||
/**
|
||||
* If set, an instance of <code>PNGEncodeParam</code> will be
|
||||
* available after an image has been decoded via the
|
||||
* <code>getEncodeParam</code> method that encapsulates information
|
||||
* about the contents of the PNG file. If not set, this information
|
||||
* will not be recorded and <code>getEncodeParam()</code> will
|
||||
* return <code>null</code>.
|
||||
*/
|
||||
public void setGenerateEncodeParam(boolean generateEncodeParam) {
|
||||
this.generateEncodeParam = generateEncodeParam;
|
||||
}
|
||||
|
||||
/**
|
||||
* If <code>getGenerateEncodeParam()</code> is <code>true</code>,
|
||||
* this method may be called after decoding has completed, and
|
||||
* will return an instance of <code>PNGEncodeParam</code> containing
|
||||
* information about the contents of the PNG file just decoded.
|
||||
*/
|
||||
public PNGEncodeParam getEncodeParam() {
|
||||
return encodeParam;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the current encoder param instance. This method is
|
||||
* intended to be called by the PNG decoder and will overwrite the
|
||||
* current instance returned by <code>getEncodeParam</code>.
|
||||
*/
|
||||
public void setEncodeParam(PNGEncodeParam encodeParam) {
|
||||
this.encodeParam = encodeParam;
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,53 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: PNGSuggestedPaletteEntry.java 1732018 2016-02-24 04:51:06Z gadams $ */
|
||||
|
||||
package org.apache.xmlgraphics.image.codec.png;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* A class representing the fields of a PNG suggested palette entry.
|
||||
*
|
||||
* <p><b> This class is not a committed part of the JAI API. It may
|
||||
* be removed or changed in future releases of JAI.</b>
|
||||
*/
|
||||
public class PNGSuggestedPaletteEntry implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 8718480055883536195L;
|
||||
/** The name of the entry. */
|
||||
public String name;
|
||||
|
||||
/** The depth of the color samples. */
|
||||
public int sampleDepth;
|
||||
|
||||
/** The red color value of the entry. */
|
||||
public int red;
|
||||
|
||||
/** The green color value of the entry. */
|
||||
public int green;
|
||||
|
||||
/** The blue color value of the entry. */
|
||||
public int blue;
|
||||
|
||||
/** The alpha opacity value of the entry. */
|
||||
public int alpha;
|
||||
|
||||
/** The probable frequency of the color in the image. */
|
||||
public int frequency;
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
<!--
|
||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
contributor license agreements. See the NOTICE file distributed with
|
||||
this work for additional information regarding copyright ownership.
|
||||
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
(the "License"); you may not use this file except in compliance with
|
||||
the License. You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<!-- $Id$ -->
|
||||
<HTML>
|
||||
<TITLE>org.apache.xmlgraphics.image.codec.png Package</TITLE>
|
||||
<BODY>
|
||||
<P>Contains a PNG image codec.</P>
|
||||
</BODY>
|
||||
</HTML>
|
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.xmlgraphics.image.codec.tiff;
|
||||
|
||||
|
||||
/** Enumerates the possible compression values for TIFF images. */
|
||||
public enum CompressionValue {
|
||||
/** No compression. */
|
||||
NONE(1),
|
||||
/**
|
||||
* Modified Huffman Compression (CCITT Group 3 1D facsimile compression).
|
||||
* <p><b>Not currently supported.</b>
|
||||
*/
|
||||
GROUP3_1D(2),
|
||||
/**
|
||||
* CCITT T.4 bilevel compression (CCITT Group 3 2D facsimile compression).
|
||||
* <p><b>Not currently supported.</b>
|
||||
*/
|
||||
GROUP3_2D(3),
|
||||
/**
|
||||
* CCITT T.6 bilevel compression (CCITT Group 4 facsimile compression).
|
||||
* <p><b>Not currently supported.</b>
|
||||
*/
|
||||
GROUP4(4),
|
||||
/** LZW compression. <p><b>Not supported.</b> */
|
||||
LZW(5),
|
||||
/**
|
||||
* Code for original JPEG-in-TIFF compression which has been depricated (for many good reasons)
|
||||
* in favor of Tech Note 2 JPEG compression (compression scheme 7).
|
||||
* <p><b>Not supported.</b>
|
||||
*/
|
||||
JPEG_BROKEN(6),
|
||||
/** <a href="ftp://ftp.sgi.com/graphics/tiff/TTN2.draft.txt"> JPEG-in-TIFF</a> compression. */
|
||||
JPEG_TTN2(7),
|
||||
/** Byte-oriented run-length encoding "PackBits" compression. */
|
||||
PACKBITS(32773),
|
||||
/**
|
||||
* <a href="http://info.internet.isi.edu:80/in-notes/rfc/files/rfc1951.txt">
|
||||
* DEFLATE</a> lossless compression (also known as "Zip-in-TIFF").
|
||||
*/
|
||||
DEFLATE(32946);
|
||||
|
||||
private final int compressionValue;
|
||||
|
||||
private CompressionValue(int compressionValue) {
|
||||
this.compressionValue = compressionValue;
|
||||
}
|
||||
|
||||
int getValue() {
|
||||
return compressionValue;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the compression value given the name of the compression type.
|
||||
* @param name the compression name
|
||||
* @return the compression value
|
||||
*/
|
||||
public static CompressionValue getValue(String name) {
|
||||
if (name == null) {
|
||||
return PACKBITS;
|
||||
}
|
||||
for (CompressionValue cv : CompressionValue.values()) {
|
||||
if (cv.toString().equalsIgnoreCase(name)) {
|
||||
return cv;
|
||||
}
|
||||
}
|
||||
throw new IllegalArgumentException("Unknown compression value: " + name);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.xmlgraphics.image.codec.tiff;
|
||||
|
||||
import java.awt.image.ColorModel;
|
||||
|
||||
enum ExtraSamplesType {
|
||||
UNSPECIFIED(0),
|
||||
ASSOCIATED_ALPHA(1),
|
||||
UNASSOCIATED_ALPHA(2);
|
||||
|
||||
private final int typeValue;
|
||||
|
||||
private ExtraSamplesType(int value) {
|
||||
this.typeValue = value;
|
||||
}
|
||||
|
||||
static ExtraSamplesType getValue(ColorModel colorModel, int numExtraSamples) {
|
||||
if (numExtraSamples == 1 && colorModel.hasAlpha()) {
|
||||
return colorModel.isAlphaPremultiplied() ? ASSOCIATED_ALPHA : UNASSOCIATED_ALPHA;
|
||||
}
|
||||
return UNSPECIFIED;
|
||||
}
|
||||
|
||||
int getValue() {
|
||||
return typeValue;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,213 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.xmlgraphics.image.codec.tiff;
|
||||
|
||||
import java.awt.color.ColorSpace;
|
||||
import java.awt.image.ColorModel;
|
||||
import java.awt.image.IndexColorModel;
|
||||
import java.awt.image.RenderedImage;
|
||||
|
||||
final class ImageInfo {
|
||||
|
||||
// Default values
|
||||
private static final int DEFAULT_ROWS_PER_STRIP = 8;
|
||||
|
||||
private final int numExtraSamples;
|
||||
private final ExtraSamplesType extraSampleType;
|
||||
private final ImageType imageType;
|
||||
private final int colormapSize;
|
||||
private final char[] colormap;
|
||||
private final int tileWidth;
|
||||
private final int tileHeight;
|
||||
private final int numTiles;
|
||||
private final long bytesPerRow;
|
||||
private final long bytesPerTile;
|
||||
|
||||
private ImageInfo(ImageInfoBuilder builder) {
|
||||
this.numExtraSamples = builder.numExtraSamples;
|
||||
this.extraSampleType = builder.extraSampleType;
|
||||
this.imageType = builder.imageType;
|
||||
this.colormapSize = builder.colormapSize;
|
||||
this.colormap = copyColormap(builder.colormap);
|
||||
this.tileWidth = builder.tileWidth;
|
||||
this.tileHeight = builder.tileHeight;
|
||||
this.numTiles = builder.numTiles;
|
||||
this.bytesPerRow = builder.bytesPerRow;
|
||||
this.bytesPerTile = builder.bytesPerTile;
|
||||
}
|
||||
|
||||
private static char[] copyColormap(char[] colorMap) {
|
||||
if (colorMap == null) {
|
||||
return null;
|
||||
}
|
||||
char[] copy = new char[colorMap.length];
|
||||
System.arraycopy(colorMap, 0, copy, 0, colorMap.length);
|
||||
return copy;
|
||||
}
|
||||
|
||||
private static int getNumberOfExtraSamplesForColorSpace(ColorSpace colorSpace,
|
||||
ImageType imageType, int numBands) {
|
||||
if (imageType == ImageType.GENERIC) {
|
||||
return numBands - 1;
|
||||
} else if (numBands > 1) {
|
||||
return numBands - colorSpace.getNumComponents();
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
private static char[] createColormap(final int sizeOfColormap, byte[] r, byte[] g, byte[] b) {
|
||||
int redIndex = 0;
|
||||
int greenIndex = sizeOfColormap;
|
||||
int blueIndex = 2 * sizeOfColormap;
|
||||
char[] colormap = new char[sizeOfColormap * 3];
|
||||
for (int i = 0; i < sizeOfColormap; i++) {
|
||||
// beware of sign extended bytes
|
||||
colormap[redIndex++] = convertColorToColormapChar(0xff & r[i]);
|
||||
colormap[greenIndex++] = convertColorToColormapChar(0xff & g[i]);
|
||||
colormap[blueIndex++] = convertColorToColormapChar(0xff & b[i]);
|
||||
}
|
||||
return colormap;
|
||||
}
|
||||
|
||||
private static char convertColorToColormapChar(int color) {
|
||||
return (char) (color << 8 | color);
|
||||
}
|
||||
|
||||
int getNumberOfExtraSamples() {
|
||||
return numExtraSamples;
|
||||
}
|
||||
|
||||
ExtraSamplesType getExtraSamplesType() {
|
||||
return extraSampleType;
|
||||
}
|
||||
|
||||
ImageType getType() {
|
||||
return imageType;
|
||||
}
|
||||
|
||||
int getColormapSize() {
|
||||
return colormapSize;
|
||||
}
|
||||
|
||||
char[] getColormap() {
|
||||
return copyColormap(colormap);
|
||||
}
|
||||
|
||||
int getTileWidth() {
|
||||
return tileWidth;
|
||||
}
|
||||
|
||||
int getTileHeight() {
|
||||
return tileHeight;
|
||||
}
|
||||
|
||||
int getNumTiles() {
|
||||
return numTiles;
|
||||
}
|
||||
|
||||
long getBytesPerRow() {
|
||||
return bytesPerRow;
|
||||
}
|
||||
|
||||
long getBytesPerTile() {
|
||||
return bytesPerTile;
|
||||
}
|
||||
|
||||
static ImageInfo newInstance(RenderedImage im, int dataTypeSize, int numBands,
|
||||
ColorModel colorModel, TIFFEncodeParam params) {
|
||||
ImageInfoBuilder builder = new ImageInfoBuilder();
|
||||
if (colorModel instanceof IndexColorModel) { // Bilevel or palette
|
||||
IndexColorModel indexColorModel = (IndexColorModel) colorModel;
|
||||
int colormapSize = indexColorModel.getMapSize();
|
||||
byte[] r = new byte[colormapSize];
|
||||
indexColorModel.getReds(r);
|
||||
byte[] g = new byte[colormapSize];
|
||||
indexColorModel.getGreens(g);
|
||||
byte[] b = new byte[colormapSize];
|
||||
indexColorModel.getBlues(b);
|
||||
|
||||
builder.imageType = ImageType.getTypeFromRGB(colormapSize, r, g, b, dataTypeSize,
|
||||
numBands);
|
||||
if (builder.imageType == ImageType.PALETTE) {
|
||||
builder.colormap = createColormap(colormapSize, r, g, b);
|
||||
builder.colormapSize = colormapSize * 3;
|
||||
}
|
||||
} else if (colorModel == null) {
|
||||
if (dataTypeSize == 1 && numBands == 1) { // bilevel
|
||||
builder.imageType = ImageType.BILEVEL_BLACK_IS_ZERO;
|
||||
} else {
|
||||
builder.imageType = ImageType.GENERIC;
|
||||
builder.numExtraSamples = numBands > 1 ? numBands - 1 : 0;
|
||||
}
|
||||
} else {
|
||||
ColorSpace colorSpace = colorModel.getColorSpace();
|
||||
builder.imageType = ImageType.getTypeFromColorSpace(colorSpace, params);
|
||||
builder.numExtraSamples = getNumberOfExtraSamplesForColorSpace(colorSpace,
|
||||
builder.imageType, numBands);
|
||||
builder.extraSampleType = ExtraSamplesType.getValue(colorModel,
|
||||
builder.numExtraSamples);
|
||||
}
|
||||
|
||||
// Initialize tile dimensions.
|
||||
final int width = im.getWidth();
|
||||
final int height = im.getHeight();
|
||||
if (params.getWriteTiled()) {
|
||||
builder.tileWidth = params.getTileWidth() > 0 ? params.getTileWidth() : width;
|
||||
builder.tileHeight = params.getTileHeight() > 0 ? params.getTileHeight() : height;
|
||||
// NB: Parentheses are used in this statement for correct rounding.
|
||||
builder.numTiles = ((width + builder.tileWidth - 1) / builder.tileWidth)
|
||||
* ((height + builder.tileHeight - 1) / builder.tileHeight);
|
||||
} else {
|
||||
builder.tileWidth = width;
|
||||
builder.tileHeight = params.getTileHeight() > 0 ? params.getTileHeight()
|
||||
: DEFAULT_ROWS_PER_STRIP;
|
||||
builder.numTiles = (int) Math.ceil(height / (double) builder.tileHeight);
|
||||
}
|
||||
builder.setBytesPerRow(dataTypeSize, numBands)
|
||||
.setBytesPerTile();
|
||||
return builder.build();
|
||||
}
|
||||
|
||||
private static final class ImageInfoBuilder {
|
||||
private ImageType imageType = ImageType.UNSUPPORTED;
|
||||
private int numExtraSamples;
|
||||
private char[] colormap;
|
||||
private int colormapSize;
|
||||
private ExtraSamplesType extraSampleType = ExtraSamplesType.UNSPECIFIED;
|
||||
private int tileWidth;
|
||||
private int tileHeight;
|
||||
private int numTiles;
|
||||
private long bytesPerRow;
|
||||
private long bytesPerTile;
|
||||
|
||||
private ImageInfoBuilder setBytesPerRow(int dataTypeSize, int numBands) {
|
||||
bytesPerRow = (long) Math.ceil((dataTypeSize / 8.0) * tileWidth * numBands);
|
||||
return this;
|
||||
}
|
||||
|
||||
private ImageInfoBuilder setBytesPerTile() {
|
||||
bytesPerTile = bytesPerRow * tileHeight;
|
||||
return this;
|
||||
}
|
||||
|
||||
private ImageInfo build() {
|
||||
return new ImageInfo(this);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,103 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.apache.xmlgraphics.image.codec.tiff;
|
||||
|
||||
import java.awt.color.ColorSpace;
|
||||
|
||||
import org.apache.xmlgraphics.image.codec.util.PropertyUtil;
|
||||
|
||||
enum ImageType {
|
||||
UNSUPPORTED(-1),
|
||||
BILEVEL_WHITE_IS_ZERO(0),
|
||||
BILEVEL_BLACK_IS_ZERO(1),
|
||||
GRAY(1),
|
||||
PALETTE(3),
|
||||
RGB(2),
|
||||
CMYK(5),
|
||||
YCBCR(6),
|
||||
CIELAB(8),
|
||||
GENERIC(1);
|
||||
|
||||
private final int photometricInterpretation;
|
||||
|
||||
private ImageType(int photometricInterpretation) {
|
||||
this.photometricInterpretation = photometricInterpretation;
|
||||
}
|
||||
|
||||
int getPhotometricInterpretation() {
|
||||
return photometricInterpretation;
|
||||
}
|
||||
|
||||
static ImageType getTypeFromRGB(int mapSize, byte[] r, byte[] g, byte[] b,
|
||||
int dataTypeSize, int numBands) {
|
||||
if (numBands == 1) {
|
||||
if (dataTypeSize == 1) { // Bilevel image
|
||||
if (mapSize != 2) {
|
||||
throw new IllegalArgumentException(PropertyUtil.getString("TIFFImageEncoder7"));
|
||||
}
|
||||
|
||||
if (isBlackZero(r, g, b)) {
|
||||
return BILEVEL_BLACK_IS_ZERO;
|
||||
} else if (isWhiteZero(r, g, b)) {
|
||||
return BILEVEL_WHITE_IS_ZERO;
|
||||
}
|
||||
}
|
||||
return PALETTE;
|
||||
}
|
||||
return UNSUPPORTED;
|
||||
}
|
||||
|
||||
private static boolean rgbIsValueAt(byte[] r, byte[] g, byte[] b, byte value, int i) {
|
||||
return r[i] == value && g[i] == value && b[i] == value;
|
||||
}
|
||||
|
||||
private static boolean bilevelColorValue(byte[] r, byte[] g, byte[] b, int blackValue,
|
||||
int whiteValue) {
|
||||
return rgbIsValueAt(r, g, b, (byte) blackValue, 0)
|
||||
&& rgbIsValueAt(r, g, b, (byte) whiteValue, 1);
|
||||
}
|
||||
|
||||
private static boolean isBlackZero(byte[] r, byte[] g, byte[] b) {
|
||||
return bilevelColorValue(r, g, b, 0, 0xff);
|
||||
}
|
||||
|
||||
private static boolean isWhiteZero(byte[] r, byte[] g, byte[] b) {
|
||||
return bilevelColorValue(r, g, b, 0xff, 0);
|
||||
}
|
||||
|
||||
static ImageType getTypeFromColorSpace(ColorSpace colorSpace, TIFFEncodeParam params) {
|
||||
switch (colorSpace.getType()) {
|
||||
case ColorSpace.TYPE_CMYK:
|
||||
return CMYK;
|
||||
case ColorSpace.TYPE_GRAY:
|
||||
return GRAY;
|
||||
case ColorSpace.TYPE_Lab:
|
||||
return CIELAB;
|
||||
case ColorSpace.TYPE_RGB:
|
||||
if (params.getJPEGCompressRGBToYCbCr()) {
|
||||
return ImageType.YCBCR;
|
||||
} else {
|
||||
return ImageType.RGB;
|
||||
}
|
||||
case ColorSpace.TYPE_YCbCr:
|
||||
return YCBCR;
|
||||
default:
|
||||
return GENERIC;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,160 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: TIFFDecodeParam.java 1732018 2016-02-24 04:51:06Z gadams $ */
|
||||
|
||||
package org.apache.xmlgraphics.image.codec.tiff;
|
||||
|
||||
import org.apache.xmlgraphics.image.codec.util.ImageDecodeParam;
|
||||
|
||||
/**
|
||||
* An instance of <code>ImageDecodeParam</code> for decoding images in
|
||||
* the TIFF format.
|
||||
*
|
||||
* <p> To determine the number of images present in a TIFF file, use
|
||||
* the <code>getNumPages()</code> method on the
|
||||
* <code>ImageDecoder</code> object that will be used to perform the
|
||||
* decoding. The desired page number may be passed as an argument to
|
||||
* the <code>ImageDecoder.decodeAsRaster)()</code> or
|
||||
* <code>decodeAsRenderedImage()</code> methods.
|
||||
*
|
||||
* <p> For TIFF Palette color images, the colorMap always has entries
|
||||
* of short data type, the color Black being represented by 0,0,0 and
|
||||
* White by 65536,65536,65536. In order to display these images, the
|
||||
* default behavior is to dither the short values down to 8 bits.
|
||||
* The dithering is done by calling the <code>decode16BitsTo8Bits</code>
|
||||
* method for each short value that needs to be dithered. The method has
|
||||
* the following implementation:
|
||||
* <code>
|
||||
* byte b;
|
||||
* short s;
|
||||
* s = s & 0xffff;
|
||||
* b = (byte)((s >> 8) & 0xff);
|
||||
* </code>
|
||||
* If a different algorithm is to be used for the dithering, this class
|
||||
* should be subclassed and an appropriate implementation should be
|
||||
* provided for the <code>decode16BitsTo8Bits</code> method in the subclass.
|
||||
*
|
||||
* <p>If the palette contains image data that is signed short, as specified
|
||||
* by the SampleFormat tag, the dithering is done by calling
|
||||
* <code>decodeSigned16BitsTo8Bits</code> instead. The method has the
|
||||
* following implementation:
|
||||
* <code>
|
||||
* byte b;
|
||||
* short s;
|
||||
* b = (byte)((s + Short.MIN_VALUE) >> 8);
|
||||
* </code>
|
||||
* In order to use a different algorithm for the dithering, this class
|
||||
* should be subclassed and the method overridden.
|
||||
*
|
||||
* <p> If it is desired that the Palette be decoded such that the output
|
||||
* image is of short data type and no dithering is performed, the
|
||||
* <code>setDecodePaletteAsShorts</code> method should be used.
|
||||
*
|
||||
* <p><b> This class is not a committed part of the JAI API. It may
|
||||
* be removed or changed in future releases of JAI.</b>
|
||||
*
|
||||
* @see TIFFDirectory
|
||||
*/
|
||||
public class TIFFDecodeParam implements ImageDecodeParam {
|
||||
|
||||
private static final long serialVersionUID = -2371665950056848358L;
|
||||
private boolean decodePaletteAsShorts;
|
||||
private Long ifdOffset;
|
||||
private boolean convertJPEGYCbCrToRGB = true;
|
||||
|
||||
/** Constructs a default instance of <code>TIFFDecodeParam</code>. */
|
||||
public TIFFDecodeParam() {
|
||||
}
|
||||
|
||||
/**
|
||||
* If set, the entries in the palette will be decoded as shorts
|
||||
* and no short to byte lookup will be applied to them.
|
||||
*/
|
||||
public void setDecodePaletteAsShorts(boolean decodePaletteAsShorts) {
|
||||
this.decodePaletteAsShorts = decodePaletteAsShorts;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns <code>true</code> if palette entries will be decoded as
|
||||
* shorts, resulting in an output image with short datatype.
|
||||
*/
|
||||
public boolean getDecodePaletteAsShorts() {
|
||||
return decodePaletteAsShorts;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an unsigned 8 bit value computed by dithering the unsigned
|
||||
* 16 bit value. Note that the TIFF specified short datatype is an
|
||||
* unsigned value, while Java's <code>short</code> datatype is a
|
||||
* signed value. Therefore the Java <code>short</code> datatype cannot
|
||||
* be used to store the TIFF specified short value. A Java
|
||||
* <code>int</code> is used as input instead to this method. The method
|
||||
* deals correctly only with 16 bit unsigned values.
|
||||
*/
|
||||
public byte decode16BitsTo8Bits(int s) {
|
||||
return (byte)((s >> 8) & 0xffff);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an unsigned 8 bit value computed by dithering the signed
|
||||
* 16 bit value. This method deals correctly only with values in the
|
||||
* 16 bit signed range.
|
||||
*/
|
||||
public byte decodeSigned16BitsTo8Bits(short s) {
|
||||
return (byte)((s + Short.MIN_VALUE) >> 8);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the offset in the stream from which to read the image. There
|
||||
* must be an Image File Directory (IFD) at that position or an error
|
||||
* will occur. If <code>setIFDOffset()</code> is never invoked then
|
||||
* the decoder will assume that the TIFF stream is at the beginning of
|
||||
* the 8-byte image header. If the directory offset is set and a page
|
||||
* number is supplied to the TIFF <code>ImageDecoder</code> then the
|
||||
* page will be the zero-relative index of the IFD in linked list of
|
||||
* IFDs beginning at the specified offset with a page of zero indicating
|
||||
* the directory at that offset.
|
||||
*/
|
||||
public void setIFDOffset(long offset) {
|
||||
ifdOffset = offset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value set by <code>setIFDOffset()</code> or
|
||||
* <code>null</code> if no value has been set.
|
||||
*/
|
||||
public Long getIFDOffset() {
|
||||
return ifdOffset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets a flag indicating whether to convert JPEG-compressed YCbCr data
|
||||
* to RGB. The default value is <code>true</code>. This flag is
|
||||
* ignored if the image data are not JPEG-compressed.
|
||||
*/
|
||||
public void setJPEGDecompressYCbCrToRGB(boolean convertJPEGYCbCrToRGB) {
|
||||
this.convertJPEGYCbCrToRGB = convertJPEGYCbCrToRGB;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether JPEG-compressed YCbCr data will be converted to RGB.
|
||||
*/
|
||||
public boolean getJPEGDecompressYCbCrToRGB() {
|
||||
return convertJPEGYCbCrToRGB;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,641 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: TIFFDirectory.java 1732018 2016-02-24 04:51:06Z gadams $ */
|
||||
|
||||
package org.apache.xmlgraphics.image.codec.tiff;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.apache.xmlgraphics.image.codec.util.PropertyUtil;
|
||||
import org.apache.xmlgraphics.image.codec.util.SeekableStream;
|
||||
|
||||
// CSOFF: ConstantName
|
||||
// CSOFF: EmptyStatement
|
||||
// CSOFF: InnerAssignment
|
||||
// CSOFF: LocalVariableName
|
||||
// CSOFF: MemberName
|
||||
// CSOFF: MultipleVariableDeclarations
|
||||
// CSOFF: NeedBraces
|
||||
// CSOFF: ParameterName
|
||||
// CSOFF: WhitespaceAround
|
||||
|
||||
/**
|
||||
* A class representing an Image File Directory (IFD) from a TIFF 6.0
|
||||
* stream. The TIFF file format is described in more detail in the
|
||||
* comments for the TIFFDescriptor class.
|
||||
*
|
||||
* <p> A TIFF IFD consists of a set of TIFFField tags. Methods are
|
||||
* provided to query the set of tags and to obtain the raw field
|
||||
* array. In addition, convenience methods are provided for acquiring
|
||||
* the values of tags that contain a single value that fits into a
|
||||
* byte, int, long, float, or double.
|
||||
*
|
||||
* <p> Every TIFF file is made up of one or more public IFDs that are
|
||||
* joined in a linked list, rooted in the file header. A file may
|
||||
* also contain so-called private IFDs that are referenced from
|
||||
* tag data and do not appear in the main list.
|
||||
*
|
||||
* <p><b> This class is not a committed part of the JAI API. It may
|
||||
* be removed or changed in future releases of JAI.</b>
|
||||
*
|
||||
* @see TIFFField
|
||||
* @version $Id: TIFFDirectory.java 1732018 2016-02-24 04:51:06Z gadams $
|
||||
*/
|
||||
public class TIFFDirectory implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 2007844835460959003L;
|
||||
/** A boolean storing the endianness of the stream. */
|
||||
boolean isBigEndian;
|
||||
|
||||
/** The number of entries in the IFD. */
|
||||
int numEntries;
|
||||
|
||||
/** An array of TIFFFields. */
|
||||
TIFFField[] fields;
|
||||
|
||||
/** A Hashtable indexing the fields by tag number. */
|
||||
Map fieldIndex = new HashMap();
|
||||
|
||||
/** The offset of this IFD. */
|
||||
long ifdOffset = 8;
|
||||
|
||||
/** The offset of the next IFD. */
|
||||
long nextIFDOffset;
|
||||
|
||||
/** The default constructor. */
|
||||
TIFFDirectory() { }
|
||||
|
||||
private static boolean isValidEndianTag(int endian) {
|
||||
return ((endian == 0x4949) || (endian == 0x4d4d));
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a TIFFDirectory from a SeekableStream.
|
||||
* The directory parameter specifies which directory to read from
|
||||
* the linked list present in the stream; directory 0 is normally
|
||||
* read but it is possible to store multiple images in a single
|
||||
* TIFF file by maintaing multiple directories.
|
||||
*
|
||||
* @param stream a SeekableStream to read from.
|
||||
* @param directory the index of the directory to read.
|
||||
*/
|
||||
public TIFFDirectory(SeekableStream stream, int directory)
|
||||
throws IOException {
|
||||
|
||||
long globalSaveOffset = stream.getFilePointer();
|
||||
long ifdOffset;
|
||||
|
||||
// Read the TIFF header
|
||||
stream.seek(0L);
|
||||
int endian = stream.readUnsignedShort();
|
||||
if (!isValidEndianTag(endian)) {
|
||||
throw new IllegalArgumentException(PropertyUtil.getString("TIFFDirectory1"));
|
||||
}
|
||||
isBigEndian = (endian == 0x4d4d);
|
||||
|
||||
int magic = readUnsignedShort(stream);
|
||||
if (magic != 42) {
|
||||
throw new IllegalArgumentException(PropertyUtil.getString("TIFFDirectory2"));
|
||||
}
|
||||
|
||||
// Get the initial ifd offset as an unsigned int (using a long)
|
||||
ifdOffset = readUnsignedInt(stream);
|
||||
|
||||
for (int i = 0; i < directory; i++) {
|
||||
if (ifdOffset == 0L) {
|
||||
throw new IllegalArgumentException(PropertyUtil.getString("TIFFDirectory3"));
|
||||
}
|
||||
|
||||
stream.seek(ifdOffset);
|
||||
long entries = readUnsignedShort(stream);
|
||||
stream.skip(12 * entries);
|
||||
|
||||
ifdOffset = readUnsignedInt(stream);
|
||||
}
|
||||
if (ifdOffset == 0L) {
|
||||
throw new IllegalArgumentException(PropertyUtil.getString("TIFFDirectory3"));
|
||||
}
|
||||
|
||||
stream.seek(ifdOffset);
|
||||
initialize(stream);
|
||||
stream.seek(globalSaveOffset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructs a TIFFDirectory by reading a SeekableStream.
|
||||
* The ifd_offset parameter specifies the stream offset from which
|
||||
* to begin reading; this mechanism is sometimes used to store
|
||||
* private IFDs within a TIFF file that are not part of the normal
|
||||
* sequence of IFDs.
|
||||
*
|
||||
* @param stream a SeekableStream to read from.
|
||||
* @param ifdOffset the long byte offset of the directory.
|
||||
* @param directory the index of the directory to read beyond the
|
||||
* one at the current stream offset; zero indicates the IFD
|
||||
* at the current offset.
|
||||
*/
|
||||
public TIFFDirectory(SeekableStream stream, long ifdOffset, int directory)
|
||||
throws IOException {
|
||||
|
||||
long globalSaveOffset = stream.getFilePointer();
|
||||
stream.seek(0L);
|
||||
int endian = stream.readUnsignedShort();
|
||||
if (!isValidEndianTag(endian)) {
|
||||
throw new IllegalArgumentException(PropertyUtil.getString("TIFFDirectory1"));
|
||||
}
|
||||
isBigEndian = (endian == 0x4d4d);
|
||||
|
||||
// Seek to the first IFD.
|
||||
stream.seek(ifdOffset);
|
||||
|
||||
// Seek to desired IFD if necessary.
|
||||
int dirNum = 0;
|
||||
while (dirNum < directory) {
|
||||
// Get the number of fields in the current IFD.
|
||||
long numEntries = readUnsignedShort(stream);
|
||||
|
||||
// Skip to the next IFD offset value field.
|
||||
stream.seek(ifdOffset + 12 * numEntries);
|
||||
|
||||
// Read the offset to the next IFD beyond this one.
|
||||
ifdOffset = readUnsignedInt(stream);
|
||||
|
||||
// Seek to the next IFD.
|
||||
stream.seek(ifdOffset);
|
||||
|
||||
// Increment the directory.
|
||||
dirNum++;
|
||||
}
|
||||
|
||||
initialize(stream);
|
||||
stream.seek(globalSaveOffset);
|
||||
}
|
||||
|
||||
private static final int[] SIZE_OF_TYPE = {
|
||||
0, // 0 = n/a
|
||||
1, // 1 = byte
|
||||
1, // 2 = ascii
|
||||
2, // 3 = short
|
||||
4, // 4 = long
|
||||
8, // 5 = rational
|
||||
1, // 6 = sbyte
|
||||
1, // 7 = undefined
|
||||
2, // 8 = sshort
|
||||
4, // 9 = slong
|
||||
8, // 10 = srational
|
||||
4, // 11 = float
|
||||
8 // 12 = double
|
||||
};
|
||||
|
||||
private void initialize(SeekableStream stream) throws IOException {
|
||||
long nextTagOffset;
|
||||
int i;
|
||||
int j;
|
||||
|
||||
ifdOffset = stream.getFilePointer();
|
||||
|
||||
numEntries = readUnsignedShort(stream);
|
||||
fields = new TIFFField[numEntries];
|
||||
|
||||
for (i = 0; i < numEntries; i++) {
|
||||
int tag = readUnsignedShort(stream);
|
||||
int type = readUnsignedShort(stream);
|
||||
int count = (int)(readUnsignedInt(stream));
|
||||
int value = 0;
|
||||
|
||||
// The place to return to to read the next tag
|
||||
nextTagOffset = stream.getFilePointer() + 4;
|
||||
|
||||
try {
|
||||
// If the tag data can't fit in 4 bytes, the next 4 bytes
|
||||
// contain the starting offset of the data
|
||||
if (count * SIZE_OF_TYPE[type] > 4) {
|
||||
value = (int)(readUnsignedInt(stream));
|
||||
stream.seek(value);
|
||||
}
|
||||
} catch (ArrayIndexOutOfBoundsException ae) {
|
||||
// System.err.println(tag + " " + "TIFFDirectory4"); TODO - log this message
|
||||
// if the data type is unknown we should skip this TIFF Field
|
||||
stream.seek(nextTagOffset);
|
||||
continue;
|
||||
}
|
||||
|
||||
fieldIndex.put(tag, i);
|
||||
Object obj = null;
|
||||
|
||||
switch (type) {
|
||||
case TIFFField.TIFF_BYTE:
|
||||
case TIFFField.TIFF_SBYTE:
|
||||
case TIFFField.TIFF_UNDEFINED:
|
||||
case TIFFField.TIFF_ASCII:
|
||||
byte[] bvalues = new byte[count];
|
||||
stream.readFully(bvalues, 0, count);
|
||||
|
||||
if (type == TIFFField.TIFF_ASCII) {
|
||||
|
||||
// Can be multiple strings
|
||||
int index = 0;
|
||||
int prevIndex = 0;
|
||||
List v = new ArrayList();
|
||||
|
||||
while (index < count) {
|
||||
|
||||
while ((index < count) && (bvalues[index++] != 0)) {
|
||||
// NOP
|
||||
}
|
||||
|
||||
// When we encountered zero, means one string has ended
|
||||
v.add(new String(bvalues, prevIndex,
|
||||
(index - prevIndex), "UTF-8"));
|
||||
prevIndex = index;
|
||||
}
|
||||
|
||||
count = v.size();
|
||||
String[] strings = new String[count];
|
||||
v.toArray(strings);
|
||||
obj = strings;
|
||||
} else {
|
||||
obj = bvalues;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case TIFFField.TIFF_SHORT:
|
||||
char[] cvalues = new char[count];
|
||||
for (j = 0; j < count; j++) {
|
||||
cvalues[j] = (char)(readUnsignedShort(stream));
|
||||
}
|
||||
obj = cvalues;
|
||||
break;
|
||||
|
||||
case TIFFField.TIFF_LONG:
|
||||
long[] lvalues = new long[count];
|
||||
for (j = 0; j < count; j++) {
|
||||
lvalues[j] = readUnsignedInt(stream);
|
||||
}
|
||||
obj = lvalues;
|
||||
break;
|
||||
|
||||
case TIFFField.TIFF_RATIONAL:
|
||||
long[][] llvalues = new long[count][2];
|
||||
for (j = 0; j < count; j++) {
|
||||
llvalues[j][0] = readUnsignedInt(stream);
|
||||
llvalues[j][1] = readUnsignedInt(stream);
|
||||
}
|
||||
obj = llvalues;
|
||||
break;
|
||||
|
||||
case TIFFField.TIFF_SSHORT:
|
||||
short[] svalues = new short[count];
|
||||
for (j = 0; j < count; j++) {
|
||||
svalues[j] = readShort(stream);
|
||||
}
|
||||
obj = svalues;
|
||||
break;
|
||||
|
||||
case TIFFField.TIFF_SLONG:
|
||||
int[] ivalues = new int[count];
|
||||
for (j = 0; j < count; j++) {
|
||||
ivalues[j] = readInt(stream);
|
||||
}
|
||||
obj = ivalues;
|
||||
break;
|
||||
|
||||
case TIFFField.TIFF_SRATIONAL:
|
||||
int[][] iivalues = new int[count][2];
|
||||
for (j = 0; j < count; j++) {
|
||||
iivalues[j][0] = readInt(stream);
|
||||
iivalues[j][1] = readInt(stream);
|
||||
}
|
||||
obj = iivalues;
|
||||
break;
|
||||
|
||||
case TIFFField.TIFF_FLOAT:
|
||||
float[] fvalues = new float[count];
|
||||
for (j = 0; j < count; j++) {
|
||||
fvalues[j] = readFloat(stream);
|
||||
}
|
||||
obj = fvalues;
|
||||
break;
|
||||
|
||||
case TIFFField.TIFF_DOUBLE:
|
||||
double[] dvalues = new double[count];
|
||||
for (j = 0; j < count; j++) {
|
||||
dvalues[j] = readDouble(stream);
|
||||
}
|
||||
obj = dvalues;
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new RuntimeException(PropertyUtil.getString("TIFFDirectory0"));
|
||||
}
|
||||
|
||||
fields[i] = new TIFFField(tag, type, count, obj);
|
||||
stream.seek(nextTagOffset);
|
||||
}
|
||||
|
||||
// Read the offset of the next IFD.
|
||||
nextIFDOffset = readUnsignedInt(stream);
|
||||
}
|
||||
|
||||
/** Returns the number of directory entries. */
|
||||
public int getNumEntries() {
|
||||
return numEntries;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of a given tag as a TIFFField,
|
||||
* or null if the tag is not present.
|
||||
*/
|
||||
public TIFFField getField(int tag) {
|
||||
Integer i = (Integer)fieldIndex.get(tag);
|
||||
if (i == null) {
|
||||
return null;
|
||||
} else {
|
||||
return fields[i];
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if a tag appears in the directory.
|
||||
*/
|
||||
public boolean isTagPresent(int tag) {
|
||||
return fieldIndex.containsKey(tag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an ordered array of ints indicating the tag
|
||||
* values.
|
||||
*/
|
||||
public int[] getTags() {
|
||||
int[] tags = new int[fieldIndex.size()];
|
||||
Iterator iter = fieldIndex.keySet().iterator();
|
||||
int i = 0;
|
||||
|
||||
while (iter.hasNext()) {
|
||||
tags[i++] = (Integer) iter.next();
|
||||
}
|
||||
|
||||
return tags;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of TIFFFields containing all the fields
|
||||
* in this directory.
|
||||
*/
|
||||
public TIFFField[] getFields() {
|
||||
return fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of a particular index of a given tag as a
|
||||
* byte. The caller is responsible for ensuring that the tag is
|
||||
* present and has type TIFFField.TIFF_SBYTE, TIFF_BYTE, or
|
||||
* TIFF_UNDEFINED.
|
||||
*/
|
||||
public byte getFieldAsByte(int tag, int index) {
|
||||
Integer i = (Integer)fieldIndex.get(tag);
|
||||
byte [] b = (fields[i]).getAsBytes();
|
||||
return b[index];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of index 0 of a given tag as a
|
||||
* byte. The caller is responsible for ensuring that the tag is
|
||||
* present and has type TIFFField.TIFF_SBYTE, TIFF_BYTE, or
|
||||
* TIFF_UNDEFINED.
|
||||
*/
|
||||
public byte getFieldAsByte(int tag) {
|
||||
return getFieldAsByte(tag, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of a particular index of a given tag as a
|
||||
* long. The caller is responsible for ensuring that the tag is
|
||||
* present and has type TIFF_BYTE, TIFF_SBYTE, TIFF_UNDEFINED,
|
||||
* TIFF_SHORT, TIFF_SSHORT, TIFF_SLONG or TIFF_LONG.
|
||||
*/
|
||||
public long getFieldAsLong(int tag, int index) {
|
||||
Integer i = (Integer)fieldIndex.get(tag);
|
||||
return (fields[i]).getAsLong(index);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of index 0 of a given tag as a
|
||||
* long. The caller is responsible for ensuring that the tag is
|
||||
* present and has type TIFF_BYTE, TIFF_SBYTE, TIFF_UNDEFINED,
|
||||
* TIFF_SHORT, TIFF_SSHORT, TIFF_SLONG or TIFF_LONG.
|
||||
*/
|
||||
public long getFieldAsLong(int tag) {
|
||||
return getFieldAsLong(tag, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of a particular index of a given tag as a
|
||||
* float. The caller is responsible for ensuring that the tag is
|
||||
* present and has numeric type (all but TIFF_UNDEFINED and
|
||||
* TIFF_ASCII).
|
||||
*/
|
||||
public float getFieldAsFloat(int tag, int index) {
|
||||
Integer i = (Integer)fieldIndex.get(tag);
|
||||
return fields[i].getAsFloat(index);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of index 0 of a given tag as a float. The
|
||||
* caller is responsible for ensuring that the tag is present and
|
||||
* has numeric type (all but TIFF_UNDEFINED and TIFF_ASCII).
|
||||
*/
|
||||
public float getFieldAsFloat(int tag) {
|
||||
return getFieldAsFloat(tag, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of a particular index of a given tag as a
|
||||
* double. The caller is responsible for ensuring that the tag is
|
||||
* present and has numeric type (all but TIFF_UNDEFINED and
|
||||
* TIFF_ASCII).
|
||||
*/
|
||||
public double getFieldAsDouble(int tag, int index) {
|
||||
Integer i = (Integer)fieldIndex.get(tag);
|
||||
return fields[i].getAsDouble(index);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of index 0 of a given tag as a double. The
|
||||
* caller is responsible for ensuring that the tag is present and
|
||||
* has numeric type (all but TIFF_UNDEFINED and TIFF_ASCII).
|
||||
*/
|
||||
public double getFieldAsDouble(int tag) {
|
||||
return getFieldAsDouble(tag, 0);
|
||||
}
|
||||
|
||||
// Methods to read primitive data types from the stream
|
||||
|
||||
private short readShort(SeekableStream stream)
|
||||
throws IOException {
|
||||
if (isBigEndian) {
|
||||
return stream.readShort();
|
||||
} else {
|
||||
return stream.readShortLE();
|
||||
}
|
||||
}
|
||||
|
||||
private int readUnsignedShort(SeekableStream stream)
|
||||
throws IOException {
|
||||
if (isBigEndian) {
|
||||
return stream.readUnsignedShort();
|
||||
} else {
|
||||
return stream.readUnsignedShortLE();
|
||||
}
|
||||
}
|
||||
|
||||
private int readInt(SeekableStream stream)
|
||||
throws IOException {
|
||||
if (isBigEndian) {
|
||||
return stream.readInt();
|
||||
} else {
|
||||
return stream.readIntLE();
|
||||
}
|
||||
}
|
||||
|
||||
private long readUnsignedInt(SeekableStream stream)
|
||||
throws IOException {
|
||||
if (isBigEndian) {
|
||||
return stream.readUnsignedInt();
|
||||
} else {
|
||||
return stream.readUnsignedIntLE();
|
||||
}
|
||||
}
|
||||
|
||||
// private long readLong(SeekableStream stream)
|
||||
// throws IOException {
|
||||
// if (isBigEndian) {
|
||||
// return stream.readLong();
|
||||
// } else {
|
||||
// return stream.readLongLE();
|
||||
// }
|
||||
// }
|
||||
|
||||
private float readFloat(SeekableStream stream)
|
||||
throws IOException {
|
||||
if (isBigEndian) {
|
||||
return stream.readFloat();
|
||||
} else {
|
||||
return stream.readFloatLE();
|
||||
}
|
||||
}
|
||||
|
||||
private double readDouble(SeekableStream stream)
|
||||
throws IOException {
|
||||
if (isBigEndian) {
|
||||
return stream.readDouble();
|
||||
} else {
|
||||
return stream.readDoubleLE();
|
||||
}
|
||||
}
|
||||
|
||||
private static int readUnsignedShort(SeekableStream stream,
|
||||
boolean isBigEndian)
|
||||
throws IOException {
|
||||
if (isBigEndian) {
|
||||
return stream.readUnsignedShort();
|
||||
} else {
|
||||
return stream.readUnsignedShortLE();
|
||||
}
|
||||
}
|
||||
|
||||
private static long readUnsignedInt(SeekableStream stream,
|
||||
boolean isBigEndian)
|
||||
throws IOException {
|
||||
if (isBigEndian) {
|
||||
return stream.readUnsignedInt();
|
||||
} else {
|
||||
return stream.readUnsignedIntLE();
|
||||
}
|
||||
}
|
||||
|
||||
// Utilities
|
||||
|
||||
/**
|
||||
* Returns the number of image directories (subimages) stored in a
|
||||
* given TIFF file, represented by a <code>SeekableStream</code>.
|
||||
*/
|
||||
public static int getNumDirectories(SeekableStream stream)
|
||||
throws IOException {
|
||||
long pointer = stream.getFilePointer(); // Save stream pointer
|
||||
|
||||
stream.seek(0L);
|
||||
int endian = stream.readUnsignedShort();
|
||||
if (!isValidEndianTag(endian)) {
|
||||
throw new IllegalArgumentException(PropertyUtil.getString("TIFFDirectory1"));
|
||||
}
|
||||
boolean isBigEndian = (endian == 0x4d4d);
|
||||
int magic = readUnsignedShort(stream, isBigEndian);
|
||||
if (magic != 42) {
|
||||
throw new IllegalArgumentException(PropertyUtil.getString("TIFFDirectory2"));
|
||||
}
|
||||
|
||||
stream.seek(4L);
|
||||
long offset = readUnsignedInt(stream, isBigEndian);
|
||||
|
||||
int numDirectories = 0;
|
||||
while (offset != 0L) {
|
||||
++numDirectories;
|
||||
|
||||
stream.seek(offset);
|
||||
long entries = readUnsignedShort(stream, isBigEndian);
|
||||
stream.skip(12 * entries);
|
||||
offset = readUnsignedInt(stream, isBigEndian);
|
||||
}
|
||||
|
||||
stream.seek(pointer); // Reset stream pointer
|
||||
return numDirectories;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a boolean indicating whether the byte order used in the
|
||||
* the TIFF file is big-endian. That is, whether the byte order is from
|
||||
* the most significant to the least significant.
|
||||
*/
|
||||
public boolean isBigEndian() {
|
||||
return isBigEndian;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the offset of the IFD corresponding to this
|
||||
* <code>TIFFDirectory</code>.
|
||||
*/
|
||||
public long getIFDOffset() {
|
||||
return ifdOffset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the offset of the next IFD after the IFD corresponding to this
|
||||
* <code>TIFFDirectory</code>.
|
||||
*/
|
||||
public long getNextIFDOffset() {
|
||||
return nextIFDOffset;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,253 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: TIFFEncodeParam.java 1732018 2016-02-24 04:51:06Z gadams $ */
|
||||
|
||||
package org.apache.xmlgraphics.image.codec.tiff;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.zip.Deflater;
|
||||
|
||||
import org.apache.xmlgraphics.image.codec.util.ImageEncodeParam;
|
||||
import org.apache.xmlgraphics.image.codec.util.PropertyUtil;
|
||||
|
||||
/**
|
||||
* An instance of <code>ImageEncodeParam</code> for encoding images in
|
||||
* the TIFF format.
|
||||
*
|
||||
* <p> This class allows for the specification of encoding parameters. By
|
||||
* default, the image is encoded without any compression, and is written
|
||||
* out consisting of strips, not tiles. The particular compression scheme
|
||||
* to be used can be specified by using the <code>setCompression()</code>
|
||||
* method. The compression scheme specified will be honored only if it is
|
||||
* compatible with the type of image being written out. For example,
|
||||
* Group3 and Group4 compressions can only be used with Bilevel images.
|
||||
* Writing of tiled TIFF images can be enabled by calling the
|
||||
* <code>setWriteTiled()</code> method.
|
||||
*
|
||||
* <p><b> This class is not a committed part of the JAI API. It may
|
||||
* be removed or changed in future releases of JAI.</b>
|
||||
*
|
||||
*/
|
||||
public class TIFFEncodeParam implements ImageEncodeParam {
|
||||
|
||||
private static final long serialVersionUID = 2471949735040024055L;
|
||||
private CompressionValue compression = CompressionValue.NONE;
|
||||
|
||||
private boolean writeTiled;
|
||||
private int tileWidth;
|
||||
private int tileHeight;
|
||||
|
||||
private Iterator extraImages;
|
||||
|
||||
private TIFFField[] extraFields;
|
||||
|
||||
private boolean convertJPEGRGBToYCbCr = true;
|
||||
|
||||
private int deflateLevel = Deflater.DEFAULT_COMPRESSION;
|
||||
|
||||
/**
|
||||
* Constructs a TIFFEncodeParam object with default values for
|
||||
* all parameters.
|
||||
*/
|
||||
public TIFFEncodeParam() {
|
||||
//nop
|
||||
}
|
||||
|
||||
/** Returns the value of the compression parameter. */
|
||||
public CompressionValue getCompression() {
|
||||
return compression;
|
||||
}
|
||||
|
||||
/**
|
||||
* Specifies the type of compression to be used. The compression type
|
||||
* specified will be honored only if it is compatible with the image
|
||||
* being written out. Currently only PackBits, JPEG, and DEFLATE
|
||||
* compression schemes are supported.
|
||||
*
|
||||
* <p> If <code>compression</code> is set to any value but
|
||||
* <code>COMPRESSION_NONE</code> and the <code>OutputStream</code>
|
||||
* supplied to the <code>ImageEncoder</code> is not a
|
||||
* <code>SeekableOutputStream</code>, then the encoder will use either
|
||||
* a temporary file or a memory cache when compressing the data
|
||||
* depending on whether the file system is accessible. Compression
|
||||
* will therefore be more efficient if a <code>SeekableOutputStream</code>
|
||||
* is supplied.
|
||||
*
|
||||
* @param compression The compression type.
|
||||
*/
|
||||
public void setCompression(CompressionValue compression) {
|
||||
|
||||
switch(compression) {
|
||||
case NONE:
|
||||
case PACKBITS:
|
||||
case DEFLATE:
|
||||
// Do nothing.
|
||||
break;
|
||||
default:
|
||||
throw new RuntimeException(PropertyUtil.getString("TIFFEncodeParam0"));
|
||||
}
|
||||
|
||||
this.compression = compression;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value of the writeTiled parameter.
|
||||
*/
|
||||
public boolean getWriteTiled() {
|
||||
return writeTiled;
|
||||
}
|
||||
|
||||
/**
|
||||
* If set, the data will be written out in tiled format, instead of
|
||||
* in strips.
|
||||
*
|
||||
* @param writeTiled Specifies whether the image data should be
|
||||
* wriiten out in tiled format.
|
||||
*/
|
||||
public void setWriteTiled(boolean writeTiled) {
|
||||
this.writeTiled = writeTiled;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the dimensions of the tiles to be written. If either
|
||||
* value is non-positive, the encoder will use a default value.
|
||||
*
|
||||
* <p> If the data are being written as tiles, i.e.,
|
||||
* <code>getWriteTiled()</code> returns <code>true</code>, then the
|
||||
* default tile dimensions used by the encoder are those of the tiles
|
||||
* of the image being encoded.
|
||||
*
|
||||
* <p> If the data are being written as strips, i.e.,
|
||||
* <code>getWriteTiled()</code> returns <code>false</code>, the width
|
||||
* of each strip is always the width of the image and the default
|
||||
* number of rows per strip is 8.
|
||||
*
|
||||
* @param tileWidth The tile width; ignored if strips are used.
|
||||
* @param tileHeight The tile height or number of rows per strip.
|
||||
*/
|
||||
public void setTileSize(int tileWidth, int tileHeight) {
|
||||
this.tileWidth = tileWidth;
|
||||
this.tileHeight = tileHeight;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the tile width set via <code>setTileSize()</code>.
|
||||
*/
|
||||
public int getTileWidth() {
|
||||
return tileWidth;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieves the tile height set via <code>setTileSize()</code>.
|
||||
*/
|
||||
public int getTileHeight() {
|
||||
return tileHeight;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets an <code>Iterator</code> of additional images to be written
|
||||
* after the image passed as an argument to the <code>ImageEncoder</code>.
|
||||
* The methods on the supplied <code>Iterator</code> must only be invoked
|
||||
* by the <code>ImageEncoder</code> which will exhaust the available
|
||||
* values unless an error occurs.
|
||||
*
|
||||
* <p> The value returned by an invocation of <code>next()</code> on the
|
||||
* <code>Iterator</code> must return either a <code>RenderedImage</code>
|
||||
* or an <code>Object[]</code> of length 2 wherein the element at index
|
||||
* zero is a <code>RenderedImage</code> amd the other element is a
|
||||
* <code>TIFFEncodeParam</code>. If no <code>TIFFEncodeParam</code> is
|
||||
* supplied in this manner for an additional image, the parameters used
|
||||
* to create the <code>ImageEncoder</code> will be used. The extra
|
||||
* image <code>Iterator</code> set on any <code>TIFFEncodeParam</code>
|
||||
* of an additional image will in all cases be ignored.
|
||||
*/
|
||||
public synchronized void setExtraImages(Iterator extraImages) {
|
||||
this.extraImages = extraImages;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the additional image <code>Iterator</code> specified via
|
||||
* <code>setExtraImages()</code> or <code>null</code> if none was
|
||||
* supplied or if a <code>null</code> value was supplied.
|
||||
*/
|
||||
public synchronized Iterator getExtraImages() {
|
||||
return extraImages;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the compression level for DEFLATE-compressed data which should
|
||||
* either be <code>java.util.Deflater.DEFAULT_COMPRESSION</code> or a
|
||||
* value in the range [1,9] where larger values indicate more compression.
|
||||
* The default setting is <code>Deflater.DEFAULT_COMPRESSION</code>. This
|
||||
* setting is ignored if the compression type is not DEFLATE.
|
||||
*/
|
||||
public void setDeflateLevel(int deflateLevel) {
|
||||
if (deflateLevel != Deflater.DEFAULT_COMPRESSION) {
|
||||
throw new RuntimeException(PropertyUtil.getString("TIFFEncodeParam1"));
|
||||
}
|
||||
|
||||
this.deflateLevel = deflateLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the compression level for DEFLATE compression.
|
||||
*/
|
||||
public int getDeflateLevel() {
|
||||
return deflateLevel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets flag indicating whether to convert RGB data to YCbCr when the
|
||||
* compression type is JPEG. The default value is <code>true</code>.
|
||||
* This flag is ignored if the compression type is not JPEG.
|
||||
*/
|
||||
public void setJPEGCompressRGBToYCbCr(boolean convertJPEGRGBToYCbCr) {
|
||||
this.convertJPEGRGBToYCbCr = convertJPEGRGBToYCbCr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether RGB data will be converted to YCbCr when using JPEG compression.
|
||||
*/
|
||||
public boolean getJPEGCompressRGBToYCbCr() {
|
||||
return convertJPEGRGBToYCbCr;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets an array of extra fields to be written to the TIFF Image File
|
||||
* Directory (IFD). Fields with tags equal to the tag of any
|
||||
* automatically generated fields are ignored. No error checking is
|
||||
* performed with respect to the validity of the field contents or
|
||||
* the appropriateness of the field for the image being encoded.
|
||||
*
|
||||
* @param extraFields An array of extra fields; the parameter is
|
||||
* copied by reference.
|
||||
*/
|
||||
public void setExtraFields(TIFFField[] extraFields) {
|
||||
this.extraFields = extraFields;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the value set by <code>setExtraFields()</code>.
|
||||
*/
|
||||
public TIFFField[] getExtraFields() {
|
||||
if (extraFields == null) {
|
||||
return new TIFFField[0];
|
||||
}
|
||||
return extraFields;
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,462 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: TIFFField.java 1732018 2016-02-24 04:51:06Z gadams $ */
|
||||
|
||||
package org.apache.xmlgraphics.image.codec.tiff;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
// CSOFF: WhitespaceAround
|
||||
|
||||
/**
|
||||
* A class representing a field in a TIFF 6.0 Image File Directory.
|
||||
*
|
||||
* <p> The TIFF file format is described in more detail in the
|
||||
* comments for the TIFFDescriptor class.
|
||||
*
|
||||
* <p> A field in a TIFF Image File Directory (IFD). A field is defined
|
||||
* as a sequence of values of identical data type. TIFF 6.0 defines
|
||||
* 12 data types, which are mapped internally onto the Java datatypes
|
||||
* byte, int, long, float, and double.
|
||||
*
|
||||
* <p><b> This class is not a committed part of the JAI API. It may
|
||||
* be removed or changed in future releases of JAI.</b>
|
||||
*
|
||||
* @see TIFFDirectory
|
||||
*/
|
||||
public class TIFFField implements Comparable, Serializable {
|
||||
|
||||
/** Flag for 8 bit unsigned integers. */
|
||||
public static final int TIFF_BYTE = 1;
|
||||
|
||||
/** Flag for null-terminated ASCII strings. */
|
||||
public static final int TIFF_ASCII = 2;
|
||||
|
||||
/** Flag for 16 bit unsigned integers. */
|
||||
public static final int TIFF_SHORT = 3;
|
||||
|
||||
/** Flag for 32 bit unsigned integers. */
|
||||
public static final int TIFF_LONG = 4;
|
||||
|
||||
/** Flag for pairs of 32 bit unsigned integers. */
|
||||
public static final int TIFF_RATIONAL = 5;
|
||||
|
||||
/** Flag for 8 bit signed integers. */
|
||||
public static final int TIFF_SBYTE = 6;
|
||||
|
||||
/** Flag for 8 bit uninterpreted bytes. */
|
||||
public static final int TIFF_UNDEFINED = 7;
|
||||
|
||||
/** Flag for 16 bit signed integers. */
|
||||
public static final int TIFF_SSHORT = 8;
|
||||
|
||||
/** Flag for 32 bit signed integers. */
|
||||
public static final int TIFF_SLONG = 9;
|
||||
|
||||
/** Flag for pairs of 32 bit signed integers. */
|
||||
public static final int TIFF_SRATIONAL = 10;
|
||||
|
||||
/** Flag for 32 bit IEEE floats. */
|
||||
public static final int TIFF_FLOAT = 11;
|
||||
|
||||
/** Flag for 64 bit IEEE doubles. */
|
||||
public static final int TIFF_DOUBLE = 12;
|
||||
private static final long serialVersionUID = 207783128222415437L;
|
||||
|
||||
/** The tag number. */
|
||||
int tag;
|
||||
|
||||
/** The tag type. */
|
||||
int type;
|
||||
|
||||
/** The number of data items present in the field. */
|
||||
int count;
|
||||
|
||||
/** The field data. */
|
||||
Object data;
|
||||
|
||||
/** The default constructor. */
|
||||
TIFFField() { }
|
||||
|
||||
/**
|
||||
* Constructs a TIFFField with arbitrary data. The data
|
||||
* parameter must be an array of a Java type appropriate for the
|
||||
* type of the TIFF field. Since there is no available 32-bit
|
||||
* unsigned datatype, long is used. The mapping between types is
|
||||
* as follows:
|
||||
*
|
||||
* <table border=1 summary="TIFF">
|
||||
* <tr>
|
||||
* <th> TIFF type </th> <th> Java type </th>
|
||||
* <tr>
|
||||
* <td><tt>TIFF_BYTE</tt></td> <td><tt>byte</tt></td>
|
||||
* <tr>
|
||||
* <td><tt>TIFF_ASCII</tt></td> <td><tt>String</tt></td>
|
||||
* <tr>
|
||||
* <td><tt>TIFF_SHORT</tt></td> <td><tt>char</tt></td>
|
||||
* <tr>
|
||||
* <td><tt>TIFF_LONG</tt></td> <td><tt>long</tt></td>
|
||||
* <tr>
|
||||
* <td><tt>TIFF_RATIONAL</tt></td> <td><tt>long[2]</tt></td>
|
||||
* <tr>
|
||||
* <td><tt>TIFF_SBYTE</tt></td> <td><tt>byte</tt></td>
|
||||
* <tr>
|
||||
* <td><tt>TIFF_UNDEFINED</tt></td> <td><tt>byte</tt></td>
|
||||
* <tr>
|
||||
* <td><tt>TIFF_SSHORT</tt></td> <td><tt>short</tt></td>
|
||||
* <tr>
|
||||
* <td><tt>TIFF_SLONG</tt></td> <td><tt>int</tt></td>
|
||||
* <tr>
|
||||
* <td><tt>TIFF_SRATIONAL</tt></td> <td><tt>int[2]</tt></td>
|
||||
* <tr>
|
||||
* <td><tt>TIFF_FLOAT</tt></td> <td><tt>float</tt></td>
|
||||
* <tr>
|
||||
* <td><tt>TIFF_DOUBLE</tt></td> <td><tt>double</tt></td>
|
||||
* </table>
|
||||
*/
|
||||
public TIFFField(int tag, int type, int count, Object data) {
|
||||
this.tag = tag;
|
||||
this.type = type;
|
||||
this.count = count;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the tag number, between 0 and 65535.
|
||||
*/
|
||||
public int getTag() {
|
||||
return tag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the type of the data stored in the IFD.
|
||||
* For a TIFF6.0 file, the value will equal one of the
|
||||
* TIFF_ constants defined in this class. For future
|
||||
* revisions of TIFF, higher values are possible.
|
||||
*
|
||||
*/
|
||||
public int getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the number of elements in the IFD.
|
||||
*/
|
||||
public int getCount() {
|
||||
return count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the data as an uninterpreted array of bytes.
|
||||
* The type of the field must be one of TIFF_BYTE, TIFF_SBYTE,
|
||||
* or TIFF_UNDEFINED;
|
||||
*
|
||||
* <p> For data in TIFF_BYTE format, the application must take
|
||||
* care when promoting the data to longer integral types
|
||||
* to avoid sign extension.
|
||||
*
|
||||
* <p> A ClassCastException will be thrown if the field is not
|
||||
* of type TIFF_BYTE, TIFF_SBYTE, or TIFF_UNDEFINED.
|
||||
*/
|
||||
public byte[] getAsBytes() {
|
||||
return (byte[])data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns TIFF_SHORT data as an array of chars (unsigned 16-bit
|
||||
* integers).
|
||||
*
|
||||
* <p> A ClassCastException will be thrown if the field is not
|
||||
* of type TIFF_SHORT.
|
||||
*/
|
||||
public char[] getAsChars() {
|
||||
return (char[])data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns TIFF_SSHORT data as an array of shorts (signed 16-bit
|
||||
* integers).
|
||||
*
|
||||
* <p> A ClassCastException will be thrown if the field is not
|
||||
* of type TIFF_SSHORT.
|
||||
*/
|
||||
public short[] getAsShorts() {
|
||||
return (short[])data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns TIFF_SLONG data as an array of ints (signed 32-bit
|
||||
* integers).
|
||||
*
|
||||
* <p> A ClassCastException will be thrown if the field is not
|
||||
* of type TIFF_SLONG.
|
||||
*/
|
||||
public int[] getAsInts() {
|
||||
return (int[])data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns TIFF_LONG data as an array of longs (signed 64-bit
|
||||
* integers).
|
||||
*
|
||||
* <p> A ClassCastException will be thrown if the field is not
|
||||
* of type TIFF_LONG.
|
||||
*/
|
||||
public long[] getAsLongs() {
|
||||
return (long[])data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns TIFF_FLOAT data as an array of floats.
|
||||
*
|
||||
* <p> A ClassCastException will be thrown if the field is not
|
||||
* of type TIFF_FLOAT.
|
||||
*/
|
||||
public float[] getAsFloats() {
|
||||
return (float[])data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns TIFF_DOUBLE data as an array of doubles.
|
||||
*
|
||||
* <p> A ClassCastException will be thrown if the field is not
|
||||
* of type TIFF_DOUBLE.
|
||||
*/
|
||||
public double[] getAsDoubles() {
|
||||
return (double[])data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns TIFF_SRATIONAL data as an array of 2-element arrays of ints.
|
||||
*
|
||||
* <p> A ClassCastException will be thrown if the field is not
|
||||
* of type TIFF_SRATIONAL.
|
||||
*/
|
||||
public int[][] getAsSRationals() {
|
||||
return (int[][])data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns TIFF_RATIONAL data as an array of 2-element arrays of longs.
|
||||
*
|
||||
* <p> A ClassCastException will be thrown if the field is not
|
||||
* of type TIFF_RATTIONAL.
|
||||
*/
|
||||
public long[][] getAsRationals() {
|
||||
return (long[][])data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns data in TIFF_BYTE, TIFF_SBYTE, TIFF_UNDEFINED, TIFF_SHORT,
|
||||
* TIFF_SSHORT, or TIFF_SLONG format as an int.
|
||||
*
|
||||
* <p> TIFF_BYTE and TIFF_UNDEFINED data are treated as unsigned;
|
||||
* that is, no sign extension will take place and the returned
|
||||
* value will be in the range [0, 255]. TIFF_SBYTE data will
|
||||
* be returned in the range [-128, 127].
|
||||
*
|
||||
* <p> A ClassCastException will be thrown if the field is not of
|
||||
* type TIFF_BYTE, TIFF_SBYTE, TIFF_UNDEFINED, TIFF_SHORT,
|
||||
* TIFF_SSHORT, or TIFF_SLONG.
|
||||
*/
|
||||
public int getAsInt(int index) {
|
||||
switch (type) {
|
||||
case TIFF_BYTE: case TIFF_UNDEFINED:
|
||||
return ((byte[])data)[index] & 0xff;
|
||||
case TIFF_SBYTE:
|
||||
return ((byte[])data)[index];
|
||||
case TIFF_SHORT:
|
||||
return ((char[])data)[index] & 0xffff;
|
||||
case TIFF_SSHORT:
|
||||
return ((short[])data)[index];
|
||||
case TIFF_SLONG:
|
||||
return ((int[])data)[index];
|
||||
default:
|
||||
throw new ClassCastException();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns data in TIFF_BYTE, TIFF_SBYTE, TIFF_UNDEFINED, TIFF_SHORT,
|
||||
* TIFF_SSHORT, TIFF_SLONG, or TIFF_LONG format as a long.
|
||||
*
|
||||
* <p> TIFF_BYTE and TIFF_UNDEFINED data are treated as unsigned;
|
||||
* that is, no sign extension will take place and the returned
|
||||
* value will be in the range [0, 255]. TIFF_SBYTE data will
|
||||
* be returned in the range [-128, 127].
|
||||
*
|
||||
* <p> A ClassCastException will be thrown if the field is not of
|
||||
* type TIFF_BYTE, TIFF_SBYTE, TIFF_UNDEFINED, TIFF_SHORT,
|
||||
* TIFF_SSHORT, TIFF_SLONG, or TIFF_LONG.
|
||||
*/
|
||||
public long getAsLong(int index) {
|
||||
switch (type) {
|
||||
case TIFF_BYTE: case TIFF_UNDEFINED:
|
||||
return ((byte[])data)[index] & 0xff;
|
||||
case TIFF_SBYTE:
|
||||
return ((byte[])data)[index];
|
||||
case TIFF_SHORT:
|
||||
return ((char[])data)[index] & 0xffff;
|
||||
case TIFF_SSHORT:
|
||||
return ((short[])data)[index];
|
||||
case TIFF_SLONG:
|
||||
return ((int[])data)[index];
|
||||
case TIFF_LONG:
|
||||
return ((long[])data)[index];
|
||||
default:
|
||||
throw new ClassCastException();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns data in any numerical format as a float. Data in
|
||||
* TIFF_SRATIONAL or TIFF_RATIONAL format are evaluated by
|
||||
* dividing the numerator into the denominator using
|
||||
* double-precision arithmetic and then truncating to single
|
||||
* precision. Data in TIFF_SLONG, TIFF_LONG, or TIFF_DOUBLE
|
||||
* format may suffer from truncation.
|
||||
*
|
||||
* <p> A ClassCastException will be thrown if the field is
|
||||
* of type TIFF_UNDEFINED or TIFF_ASCII.
|
||||
*/
|
||||
public float getAsFloat(int index) {
|
||||
switch (type) {
|
||||
case TIFF_BYTE:
|
||||
return ((byte[])data)[index] & 0xff;
|
||||
case TIFF_SBYTE:
|
||||
return ((byte[])data)[index];
|
||||
case TIFF_SHORT:
|
||||
return ((char[])data)[index] & 0xffff;
|
||||
case TIFF_SSHORT:
|
||||
return ((short[])data)[index];
|
||||
case TIFF_SLONG:
|
||||
return ((int[])data)[index];
|
||||
case TIFF_LONG:
|
||||
return ((long[])data)[index];
|
||||
case TIFF_FLOAT:
|
||||
return ((float[])data)[index];
|
||||
case TIFF_DOUBLE:
|
||||
return (float)((double[])data)[index];
|
||||
case TIFF_SRATIONAL:
|
||||
int[] ivalue = getAsSRational(index);
|
||||
return (float)((double)ivalue[0] / ivalue[1]);
|
||||
case TIFF_RATIONAL:
|
||||
long[] lvalue = getAsRational(index);
|
||||
return (float)((double)lvalue[0] / lvalue[1]);
|
||||
default:
|
||||
throw new ClassCastException();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns data in any numerical format as a float. Data in
|
||||
* TIFF_SRATIONAL or TIFF_RATIONAL format are evaluated by
|
||||
* dividing the numerator into the denominator using
|
||||
* double-precision arithmetic.
|
||||
*
|
||||
* <p> A ClassCastException will be thrown if the field is of
|
||||
* type TIFF_UNDEFINED or TIFF_ASCII.
|
||||
*/
|
||||
public double getAsDouble(int index) {
|
||||
switch (type) {
|
||||
case TIFF_BYTE:
|
||||
return ((byte[])data)[index] & 0xff;
|
||||
case TIFF_SBYTE:
|
||||
return ((byte[])data)[index];
|
||||
case TIFF_SHORT:
|
||||
return ((char[])data)[index] & 0xffff;
|
||||
case TIFF_SSHORT:
|
||||
return ((short[])data)[index];
|
||||
case TIFF_SLONG:
|
||||
return ((int[])data)[index];
|
||||
case TIFF_LONG:
|
||||
return ((long[])data)[index];
|
||||
case TIFF_FLOAT:
|
||||
return ((float[])data)[index];
|
||||
case TIFF_DOUBLE:
|
||||
return ((double[])data)[index];
|
||||
case TIFF_SRATIONAL:
|
||||
int[] ivalue = getAsSRational(index);
|
||||
return (double)ivalue[0] / ivalue[1];
|
||||
case TIFF_RATIONAL:
|
||||
long[] lvalue = getAsRational(index);
|
||||
return (double)lvalue[0] / lvalue[1];
|
||||
default:
|
||||
throw new ClassCastException();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a TIFF_ASCII data item as a String.
|
||||
*
|
||||
* <p> A ClassCastException will be thrown if the field is not
|
||||
* of type TIFF_ASCII.
|
||||
*/
|
||||
public String getAsString(int index) {
|
||||
return ((String[])data)[index];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a TIFF_SRATIONAL data item as a two-element array
|
||||
* of ints.
|
||||
*
|
||||
* <p> A ClassCastException will be thrown if the field is not
|
||||
* of type TIFF_SRATIONAL.
|
||||
*/
|
||||
public int[] getAsSRational(int index) {
|
||||
return ((int[][])data)[index];
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a TIFF_RATIONAL data item as a two-element array
|
||||
* of ints.
|
||||
*
|
||||
* <p> A ClassCastException will be thrown if the field is not
|
||||
* of type TIFF_RATIONAL.
|
||||
*/
|
||||
public long[] getAsRational(int index) {
|
||||
return ((long[][])data)[index];
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares this <code>TIFFField</code> with another
|
||||
* <code>TIFFField</code> by comparing the tags.
|
||||
*
|
||||
* <p><b>Note: this class has a natural ordering that is inconsistent
|
||||
* with <code>equals()</code>.</b>
|
||||
*
|
||||
* @throws NullPointerException if the parameter is <code>null</code>.
|
||||
* @throws ClassCastException if the parameter is not a
|
||||
* <code>TIFFField</code>.
|
||||
*/
|
||||
public int compareTo(Object o) {
|
||||
if (o == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
|
||||
int oTag = ((TIFFField)o).getTag();
|
||||
|
||||
if (tag < oTag) {
|
||||
return -1;
|
||||
} else if (tag > oTag) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,90 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: TIFFImageDecoder.java 1732018 2016-02-24 04:51:06Z gadams $ */
|
||||
|
||||
package org.apache.xmlgraphics.image.codec.tiff;
|
||||
|
||||
import java.awt.image.RenderedImage;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.xmlgraphics.image.codec.util.ImageDecoderImpl;
|
||||
import org.apache.xmlgraphics.image.codec.util.PropertyUtil;
|
||||
import org.apache.xmlgraphics.image.codec.util.SeekableStream;
|
||||
|
||||
/**
|
||||
* A baseline TIFF reader. The reader has some functionality in addition to
|
||||
* the baseline specifications for Bilevel images, for which the group 3 and
|
||||
* group 4 decompression schemes have been implemented. Support for LZW
|
||||
* decompression has also been added. Support for Horizontal differencing
|
||||
* predictor decoding is also included, when used with LZW compression.
|
||||
* However, this support is limited to data with bitsPerSample value of 8.
|
||||
* When reading in RGB images, support for alpha and extraSamples being
|
||||
* present has been added. Support for reading in images with 16 bit samples
|
||||
* has been added. Support for the SampleFormat tag (signed samples as well
|
||||
* as floating-point samples) has also been added. In all other cases, support
|
||||
* is limited to Baseline specifications.
|
||||
*
|
||||
*
|
||||
*/
|
||||
public class TIFFImageDecoder extends ImageDecoderImpl {
|
||||
|
||||
// All the TIFF tags that we care about
|
||||
public static final int TIFF_IMAGE_WIDTH = 256;
|
||||
public static final int TIFF_IMAGE_LENGTH = 257;
|
||||
public static final int TIFF_BITS_PER_SAMPLE = 258;
|
||||
public static final int TIFF_COMPRESSION = 259;
|
||||
public static final int TIFF_PHOTOMETRIC_INTERPRETATION = 262;
|
||||
public static final int TIFF_FILL_ORDER = 266;
|
||||
public static final int TIFF_STRIP_OFFSETS = 273;
|
||||
public static final int TIFF_SAMPLES_PER_PIXEL = 277;
|
||||
public static final int TIFF_ROWS_PER_STRIP = 278;
|
||||
public static final int TIFF_STRIP_BYTE_COUNTS = 279;
|
||||
public static final int TIFF_X_RESOLUTION = 282;
|
||||
public static final int TIFF_Y_RESOLUTION = 283;
|
||||
public static final int TIFF_PLANAR_CONFIGURATION = 284;
|
||||
public static final int TIFF_T4_OPTIONS = 292;
|
||||
public static final int TIFF_T6_OPTIONS = 293;
|
||||
public static final int TIFF_RESOLUTION_UNIT = 296;
|
||||
public static final int TIFF_PREDICTOR = 317;
|
||||
public static final int TIFF_COLORMAP = 320;
|
||||
public static final int TIFF_TILE_WIDTH = 322;
|
||||
public static final int TIFF_TILE_LENGTH = 323;
|
||||
public static final int TIFF_TILE_OFFSETS = 324;
|
||||
public static final int TIFF_TILE_BYTE_COUNTS = 325;
|
||||
public static final int TIFF_EXTRA_SAMPLES = 338;
|
||||
public static final int TIFF_SAMPLE_FORMAT = 339;
|
||||
public static final int TIFF_S_MIN_SAMPLE_VALUE = 340;
|
||||
public static final int TIFF_S_MAX_SAMPLE_VALUE = 341;
|
||||
|
||||
public static final int TIFF_ICC_PROFILE = 34675;
|
||||
|
||||
public TIFFImageDecoder(SeekableStream input, TIFFDecodeParam param) {
|
||||
super(input, param);
|
||||
}
|
||||
|
||||
public int getNumPages() throws IOException {
|
||||
return TIFFDirectory.getNumDirectories(input);
|
||||
}
|
||||
|
||||
public RenderedImage decodeAsRenderedImage(int page) throws IOException {
|
||||
if ((page < 0) || (page >= getNumPages())) {
|
||||
throw new IOException(PropertyUtil.getString("TIFFImageDecoder0"));
|
||||
}
|
||||
return new TIFFImage(input, (TIFFDecodeParam) param, page);
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,253 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You under the Apache License, Version 2.0
|
||||
* (the "License"); you may not use this file except in compliance with
|
||||
* the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/* $Id: TIFFLZWDecoder.java 1804124 2017-08-04 14:13:54Z ssteiner $ */
|
||||
|
||||
package org.apache.xmlgraphics.image.codec.tiff;
|
||||
|
||||
import org.apache.xmlgraphics.image.codec.util.PropertyUtil;
|
||||
|
||||
// CSOFF: InnerAssignment
|
||||
// CSOFF: MultipleVariableDeclarations
|
||||
// CSOFF: OneStatementPerLine
|
||||
// CSOFF: OperatorWrap
|
||||
// CSOFF: WhitespaceAround
|
||||
|
||||
/**
|
||||
* A class for performing LZW decoding.
|
||||
*/
|
||||
public class TIFFLZWDecoder {
|
||||
|
||||
byte[][] stringTable;
|
||||
byte[] data;
|
||||
byte[] uncompData;
|
||||
int tableIndex;
|
||||
int bitsToGet = 9;
|
||||
int bytePointer;
|
||||
// int bitPointer;
|
||||
int dstIndex;
|
||||
int w;
|
||||
int predictor;
|
||||
int samplesPerPixel;
|
||||
int nextData;
|
||||
int nextBits;
|
||||
|
||||
int[] andTable = {
|
||||
511,
|
||||
1023,
|
||||
2047,
|
||||
4095
|
||||
};
|
||||
|
||||
public TIFFLZWDecoder(int w, int predictor, int samplesPerPixel) {
|
||||
this.w = w;
|
||||
this.predictor = predictor;
|
||||
this.samplesPerPixel = samplesPerPixel;
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to decode LZW compressed data.
|
||||
*
|
||||
* @param data The compressed data.
|
||||
* @param uncompData Array to return the uncompressed data in.
|
||||
* @param h The number of rows the compressed data contains.
|
||||
*/
|
||||
public byte[] decode(byte[] data, byte[] uncompData, int h) {
|
||||
|
||||
if (data[0] == (byte)0x00 && data[1] == (byte)0x01) {
|
||||
throw new UnsupportedOperationException(PropertyUtil.getString("TIFFLZWDecoder0"));
|
||||
}
|
||||
|
||||
initializeStringTable();
|
||||
|
||||
this.data = data;
|
||||
// this.h = h;
|
||||
this.uncompData = uncompData;
|
||||
|
||||
// Initialize pointers
|
||||
bytePointer = 0;
|
||||
// bitPointer = 0;
|
||||
dstIndex = 0;
|
||||
|
||||
|
||||
nextData = 0;
|
||||
nextBits = 0;
|
||||
|
||||
int code;
|
||||
int oldCode = 0;
|
||||
byte[] string;
|
||||
|
||||
while ((code = getNextCode()) != 257
|
||||
&& dstIndex != uncompData.length) {
|
||||
|
||||
if (code == 256) {
|
||||
|
||||
initializeStringTable();
|
||||
code = getNextCode();
|
||||
|
||||
if (code == 257) {
|
||||
break;
|
||||
}
|
||||
|
||||
writeString(stringTable[code]);
|
||||
oldCode = code;
|
||||
|
||||
} else {
|
||||
|
||||
if (code < tableIndex) {
|
||||
|
||||
string = stringTable[code];
|
||||
|
||||
writeString(string);
|
||||
addStringToTable(stringTable[oldCode], string[0]);
|
||||
oldCode = code;
|
||||
|
||||
} else {
|
||||
|
||||
string = stringTable[oldCode];
|
||||
string = composeString(string, string[0]);
|
||||
writeString(string);
|
||||
addStringToTable(string);
|
||||
oldCode = code;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// Horizontal Differencing Predictor
|
||||
if (predictor == 2) {
|
||||
|
||||
int count;
|
||||
for (int j = 0; j < h; j++) {
|
||||
|
||||
count = samplesPerPixel * (j * w + 1);
|
||||
|
||||
for (int i = samplesPerPixel; i < w * samplesPerPixel; i++) {
|
||||
|
||||
uncompData[count] += uncompData[count - samplesPerPixel];
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return uncompData;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Initialize the string table.
|
||||
*/
|
||||
public void initializeStringTable() {
|
||||
|
||||
stringTable = new byte[4096][];
|
||||
|
||||
for (int i = 0; i < 256; i++) {
|
||||
stringTable[i] = new byte[1];
|
||||
stringTable[i][0] = (byte)i;
|
||||
}
|
||||
|
||||
tableIndex = 258;
|
||||
bitsToGet = 9;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write out the string just uncompressed.
|
||||
*/
|
||||
public void writeString(byte[] string) {
|
||||
|
||||
for (byte aString : string) {
|
||||
uncompData[dstIndex++] = aString;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new string to the string table.
|
||||
*/
|
||||
public void addStringToTable(byte[] oldString, byte newString) {
|
||||
int length = oldString.length;
|
||||
byte[] string = new byte[length + 1];
|
||||
System.arraycopy(oldString, 0, string, 0, length);
|
||||
string[length] = newString;
|
||||
|
||||
// Add this new String to the table
|
||||
stringTable[tableIndex++] = string;
|
||||
|
||||
if (tableIndex == 511) {
|
||||
bitsToGet = 10;
|
||||
} else if (tableIndex == 1023) {
|
||||
bitsToGet = 11;
|
||||
} else if (tableIndex == 2047) {
|
||||
bitsToGet = 12;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Add a new string to the string table.
|
||||
*/
|
||||
public void addStringToTable(byte[] string) {
|
||||
|
||||
// Add this new String to the table
|
||||
stringTable[tableIndex++] = string;
|
||||
|
||||
if (tableIndex == 511) {
|
||||
bitsToGet = 10;
|
||||
} else if (tableIndex == 1023) {
|
||||
bitsToGet = 11;
|
||||
} else if (tableIndex == 2047) {
|
||||
bitsToGet = 12;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Append <code>newString</code> to the end of <code>oldString</code>.
|
||||
*/
|
||||
public byte[] composeString(byte[] oldString, byte newString) {
|
||||
int length = oldString.length;
|
||||
byte[] string = new byte[length + 1];
|
||||
System.arraycopy(oldString, 0, string, 0, length);
|
||||
string[length] = newString;
|
||||
|
||||
return string;
|
||||
}
|
||||
|
||||
// Returns the next 9, 10, 11 or 12 bits
|
||||
public int getNextCode() {
|
||||
// Attempt to get the next code. The exception is caught to make
|
||||
// this robust to cases wherein the EndOfInformation code has been
|
||||
// omitted from a strip. Examples of such cases have been observed
|
||||
// in practice.
|
||||
try {
|
||||
nextData = (nextData << 8) | (data[bytePointer++] & 0xff);
|
||||
nextBits += 8;
|
||||
|
||||
if (nextBits < bitsToGet) {
|
||||
nextData = (nextData << 8) | (data[bytePointer++] & 0xff);
|
||||
nextBits += 8;
|
||||
}
|
||||
|
||||
int code =
|
||||
(nextData >> (nextBits - bitsToGet)) & andTable[bitsToGet - 9];
|
||||
nextBits -= bitsToGet;
|
||||
|
||||
return code;
|
||||
} catch (ArrayIndexOutOfBoundsException e) {
|
||||
// Strip not terminated as expected: return EndOfInformation code.
|
||||
return 257;
|
||||
}
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue