Archived temporary branch.
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/commons/branches/_archive@606582 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/TempNewImagePackage/KEYS b/TempNewImagePackage/KEYS
new file mode 100644
index 0000000..c0aee40
--- /dev/null
+++ b/TempNewImagePackage/KEYS
@@ -0,0 +1,131 @@
+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-sigs <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
+
+-----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-----
diff --git a/TempNewImagePackage/LICENSE b/TempNewImagePackage/LICENSE
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/TempNewImagePackage/LICENSE
@@ -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.
diff --git a/TempNewImagePackage/NOTICE b/TempNewImagePackage/NOTICE
new file mode 100644
index 0000000..76171ea
--- /dev/null
+++ b/TempNewImagePackage/NOTICE
@@ -0,0 +1,5 @@
+Apache XML Graphics Commons
+Copyright 2006-2007 The Apache Software Foundation
+
+This product includes software developed at
+The Apache Software Foundation (http://www.apache.org/).
diff --git a/TempNewImagePackage/README b/TempNewImagePackage/README
new file mode 100644
index 0000000..d5c73b6
--- /dev/null
+++ b/TempNewImagePackage/README
@@ -0,0 +1,86 @@
+$Id$
+
+==============================================================================
+ 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 bugzilla at http://issues.apache.org/bugzilla/
+
+
+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.
+
+License labeling (according to http://www.apache.org/legal/3party.html):
+- Single-License
+- Source Available
+- No Reciprocity Required
+
+==============================================================================
+ RELEASE NOTES
+==============================================================================
+
+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.
+For more detailed info about the changes, please see:
+http://xmlgraphics.apache.org/commons/changes.html
+
+Version 1.0
+--------------
+
+This is the first release of Apache XML Graphics Commons. There are currently
+no known issues with the code.
diff --git a/TempNewImagePackage/build.properties b/TempNewImagePackage/build.properties
new file mode 100644
index 0000000..61033f9
--- /dev/null
+++ b/TempNewImagePackage/build.properties
@@ -0,0 +1,42 @@
+## 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.3
+# javac.target = 1.3
+# javac.fork = on
+
+## JUnit task switches
+# junit.fork = on
+
+## Packages to produce javadoc.
+# javadoc.packages = org.apache.xmlgraphics.*
+
+## ===================================================================
+## 3. Project specific properties
+
+## 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
\ No newline at end of file
diff --git a/TempNewImagePackage/build.xml b/TempNewImagePackage/build.xml
new file mode 100644
index 0000000..6d2535c
--- /dev/null
+++ b/TempNewImagePackage/build.xml
@@ -0,0 +1,710 @@
+<?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 file="${basedir}/build-local.properties"/>
+ <property file="${basedir}/build.properties"/>
+ <property environment="env"/>
+
+ <property name="Name" value="Apache XML Graphics Commons"/>
+ <property name="name" value="xmlgraphics-commons"/>
+ <property name="version" value="1.3svn"/>
+ <property name="year" value="1999-2007"/>
+
+ <property name="javac.debug" value="on"/>
+ <property name="javac.optimize" value="off"/>
+ <property name="javac.deprecation" value="on"/>
+ <property name="javac.source" value="1.3"/>
+ <property name="javac.target" value="1.3"/>
+ <property name="javac.fork" value="no"/>
+
+ <property name="junit.fork" value="on"/>
+
+ <property name="javadoc.packages" value="org.apache.xmlgraphics.*"/>
+
+ <property name="internal-codecs.disabled" value="false"/>
+
+ <property name="src.dir" value="${basedir}/src"/>
+ <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="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}"/>
+
+ <!-- .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>
+ </path>
+
+ <path id="libs-run-classpath">
+ <fileset dir="${lib.dir}">
+ <include name="*.jar"/>
+ </fileset>
+ <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/README*"/>
+ </patternset>
+ </fileset>
+
+ <fileset dir="${basedir}" id="dist.src">
+ <include name="src/**"/>
+ <patternset refid="dist.lib"/>
+ <include name="test/**"/>
+ <include name="examples/**"/>
+ <include name="LICENSE"/>
+ <include name="NOTICE"/>
+ <include name="README"/>
+ <include name="KEYS"/>
+ <include name="status.xml"/>
+ <include name="*.pom"/>
+ <include name="build.*"/>
+ <include name="forrest.*"/>
+ </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, init-filters-jdk14, init-filters-jdk13"/>
+
+ <target name="init-avail">
+ <available property="jdk14.present" classname="java.lang.CharSequence"/>
+
+ <available property="sun.jpeg.present" classname="com.sun.image.codec.jpeg.JPEGCodec"/>
+ <condition property="sun.jpeg.message" value="Sun-private JPEG Support PRESENT">
+ <equals arg1="${sun.jpeg.present}" arg2="true"/>
+ </condition>
+ <condition property="sun.jpeg.message" value="Sun-private JPEG Support NOT Present">
+ <not>
+ <equals arg1="${sun.jpeg.present}" arg2="true"/>
+ </not>
+ </condition>
+ <echo message="${sun.jpeg.message}"/>
+ <condition property="internal-codecs.eff.disabled">
+ <or>
+ <not>
+ <equals arg1="${sun.jpeg.present}" arg2="true"/>
+ </not>
+ <equals arg1="${internal-codecs.disabled}" arg2="true"/>
+ </or>
+ </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>
+
+ <target name="init-filters-jdk13" depends="init-avail" unless="jdk14.present">
+ <echo message="Use GraphicsConfiguration adapter for JDK 1.3 or earlier."/>
+ <path id="graphics-configuration-adapter">
+ <pathelement location="src/java-1.3"/>
+ </path>
+ <property name="src.java.version.dir" value="${basedir}/src/java-1.3"/>
+ </target>
+
+ <target name="init-filters-jdk14" depends="init-avail" if="jdk14.present">
+ <echo message="Use GraphicsConfiguration adapter for JDK 1.4."/>
+ <path id="graphics-configuration-adapter">
+ <pathelement location="src/java-1.4"/>
+ </path>
+ <property name="src.java.version.dir" value="${basedir}/src/java-1.4"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Help on usage -->
+ <!-- =================================================================== -->
+ <target name="usage">
+ <echo message="Use the -projecthelp option instead"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Compiles the source directory -->
+ <!-- =================================================================== -->
+ <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/JPEGImageWriter.java"/>
+ <exclude name="**/image/writer/internal/TIFFImageWriter.java"/>
+ </patternset>
+ </target>
+ <target name="compile-java" depends="init, compile-pattern-with-codecs, compile-pattern-without-codecs" description="Compiles the source code">
+ <!-- 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}">
+ <src path="${src.java.dir}"/>
+ <src refid="graphics-configuration-adapter"/>
+ <patternset refid="compile-pattern"/>
+ <classpath refid="libs-build-classpath"/>
+ </javac>
+ <copy todir="${build.classes.dir}">
+ <fileset dir="${src.res.dir}"/>
+ </copy>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Creates JAR files -->
+ <!-- =================================================================== -->
+
+ <target name="uptodate-jar-main" depends="compile-java">
+ <uptodate property="jar.main.uptodate" targetfile="${build.dir}/${name}.jar">
+ <srcfiles dir= "${build.classes.dir}"/>
+ </uptodate>
+ </target>
+
+ <target name="jar-main" depends="compile-java,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}"/>
+ <srcfiles dir="${src.java.version.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>
+ <fileset dir="${src.java.version.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-compile" depends="package" 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}">
+ <src path="${basedir}/test/java"/>
+ <!--patternset refid="test-sources"/-->
+ <classpath>
+ <path refid="libs-build-classpath"/>
+ <fileset dir="${build.dir}">
+ <include name="${name}-${version}.jar"/>
+ </fileset>
+ </classpath>
+ </javac>
+ <copy todir="${build.dir}/test-classes">
+ <fileset dir="${basedir}/test/resources"/>
+ </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" fork="${junit.fork}" errorproperty="test.junit.error" failureproperty="test.junit.failure">
+ <sysproperty key="basedir" value="${basedir}"/>
+ <sysproperty key="jawa.awt.headless" value="true"/>
+ <formatter type="brief" usefile="false"/>
+ <formatter type="plain" usefile="true"/>
+ <classpath>
+ <pathelement location="${build.dir}/test-classes"/>
+ <path refid="libs-build-classpath"/>
+ <fileset dir="build">
+ <include name="${name}-${version}.jar"/>
+ </fileset>
+ </classpath>
+ <test name="org.apache.xmlgraphics.StandardTestSuite" todir="${build.dir}/test-reports"/>
+ </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}">
+ <header><![CDATA[${name} ${version}]]></header>
+ <footer><![CDATA[${name} ${version}]]></footer>
+ <classpath>
+ <path refid="libs-build-classpath"/>
+ <pathelement path="${java.class.path}"/>
+ </classpath>
+ <sourcepath>
+ <pathelement path="${src.java.dir}"/>
+ <path refid="graphics-configuration-adapter"/>
+ </sourcepath>
+ <tag name="todo" scope="all" description="To do:"/>
+ <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="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.home.dir" value="${optional.lib.dir}"/>
+ <property name="checkstyle.noframes.xslt" value="${checkstyle.home.dir}/contrib/checkstyle-noframes.xsl"/>
+
+ <path id="checkstyle-path">
+ <fileset dir="${checkstyle.home.dir}">
+ <include name="checkstyle-all-*.jar"/>
+ <include name="checkstyle-*.jar"/>
+ <include name="antlr*.jar"/>
+ <include name="commons-beanutils*.jar"/>
+ <include name="commons-collections*.jar"/>
+ <include name="commons-logging*.jar"/>
+ <include name="jakarta-regexp*.jar"/>
+ </fileset>
+ </path>
+
+ <path id="checkstyle-runpath">
+ <path refid="checkstyle-path"/>
+ </path>
+
+ <target name="checkstyle-avail" depends="init">
+ <available property="checkstyle.available" classname="com.puppycrawl.tools.checkstyle.CheckStyleTask" classpathref="checkstyle-path"/>
+ <available property="checkstyle.4.x" classname="com.puppycrawl.tools.checkstyle.checks.coding.ModifiedControlVariableCheck" classpathref="checkstyle-path"/>
+ <available property="checkstyle.noframes.xslt.available" file="${checkstyle.noframes.xslt}"/>
+ <condition property="checkstyle.message" value="Checkstyle 4.x Support PRESENT">
+ <and>
+ <equals arg1="${checkstyle.available}" arg2="true"/>
+ <equals arg1="${checkstyle.4.x}" arg2="true"/>
+ </and>
+ </condition>
+ <condition property="checkstyle.message" value="Checkstyle 3.x Support PRESENT">
+ <equals arg1="${checkstyle.available}" arg2="true"/>
+ </condition>
+ <condition property="checkstyle.message" value="Checkstyle Support NOT Present">
+ <not>
+ <equals arg1="${checkstyle.available}" arg2="true"/>
+ </not>
+ </condition>
+ <echo message="${checkstyle.message}"/>
+ <condition property="checkstyle.config" value="checkstyle-4.0.xml">
+ <equals arg1="${checkstyle.4.x}" arg2="true"/>
+ </condition>
+ <condition property="checkstyle.config" value="checkstyle-3.5-fop-head.xml">
+ <not>
+ <equals arg1="${checkstyle.4.x}" arg2="true"/>
+ </not>
+ </condition>
+ <condition property="checkstyle.noframes.xslt.message" value="Checkstyle HTML style sheet support PRESENT">
+ <equals arg1="${checkstyle.noframes.xslt.available}" arg2="true"/>
+ </condition>
+ <condition property="checkstyle.noframes.xslt.message" value="Checkstyle HTML style sheet support NOT Present">
+ <not>
+ <equals arg1="${checkstyle.noframes.xslt.available}" arg2="true"/>
+ </not>
+ </condition>
+ <echo message="${checkstyle.noframes.xslt.message}"/>
+ </target>
+
+ <target name="checkstyle-check" depends="checkstyle-avail, init" if="checkstyle.available">
+
+ <taskdef name="checkstyle" classname="com.puppycrawl.tools.checkstyle.CheckStyleTask" classpathref="checkstyle-runpath"/>
+ <checkstyle config="${checkstyle.config}" failonviolation="false"
+ classpathref="checkstyle-runpath">
+ <fileset dir="${src.java.dir}" includes="**/*.java"/>
+ <formatter type="plain" toFile="${build.dir}/checkstyle_report.txt"/>
+ <formatter type="xml" toFile="${build.dir}/checkstyle_report.xml"/>
+ </checkstyle>
+ </target>
+
+ <target name="checkstyle-html" depends="checkstyle-avail, checkstyle-check" if="checkstyle.noframes.xslt.available">
+ <style in="${build.dir}/checkstyle_report.xml" out="${build.dir}/checkstyle_report.html" style="${checkstyle.noframes.xslt}"/>
+ </target>
+
+ <target name="checkstyle" depends="checkstyle-avail, checkstyle-check, checkstyle-html" description="Runs Checkstyle for a code quality report"/>
+
+ <!-- =================================================================== -->
+ <!-- Creates the documentation -->
+ <!-- =================================================================== -->
+ <target name="docs" description="Generates documentation">
+ <echo message="Building documentation with Forrest..."/>
+ <!--
+ <echo message="Make sure that you have installed Apache Forrest and"/>
+ <echo message="the FORREST_HOME environment variable is set (see http://forrest.apache.org/)"/>
+ <echo message="FORREST_HOME = ${forrest.home}"/>
+ -->
+ <echo message="Make sure you have a proper Forrest installation (see http://forrest.apache.org/)"/>
+
+ <!--<antcall target="site"/>-->
+
+ <!-- You can provide a JDK 1.4 for a JDK 1.3 build by adding "javahome.jdk14" to build-local.properties -->
+ <condition property="javahome.jdk14.override" value="${javahome.jdk14}">
+ <isset property="javahome.jdk14"/>
+ </condition>
+ <echo message="java home: ${javahome.jdk14.override}"/>
+ <condition property="javahome.jdk14.override" value="${env.JAVA_HOME}">
+ <not>
+ <isset property="javahome.jdk14.override"/>
+ </not>
+ </condition>
+ <echo message="java home: ${javahome.jdk14.override}"/>
+ <condition property="forrest.call" value="forrest.bat" else="forrest">
+ <os family="windows"/>
+ </condition>
+ <exec executable="${forrest.call}">
+ <env key="JAVA_HOME" value="${javahome.jdk14.override}"/>
+ </exec>
+ </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,docs">
+ <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}/docs">
+ <fileset dir="${build.dir}/site"/>
+ </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}"/>
+ <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}"/>
+ <input message="Passphrase for your default private key (attention: passphrase will be echoed in clear text on the display!)" addproperty="pwd"/>
+ <antcall target="md5">
+ <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="md5">
+ <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="md5">
+ <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="md5">
+ <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="md5">
+ <property name="md5.exec" value="md5"/>
+ <property name="md5.options" value="-q"/>
+ <exec executable="${md5.exec}" output="${sign.archive}.md5">
+ <arg line="${md5.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"/>
+ <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}">
+ <include name="${name}-${version}.jar"/>
+ <include name="${name}-${version}-sources.jar"/>
+ <include name="${name}-${version}-javadoc.jar"/>
+ </fileset>
+ <fileset dir="${build.dir}/maven"/>
+ <metainf dir="${basedir}" includes="LICENSE,NOTICE"/>
+ </jar>
+ </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*"/>
+ </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"/>
+
+</project>
diff --git a/TempNewImagePackage/checkstyle.header b/TempNewImagePackage/checkstyle.header
new file mode 100644
index 0000000..d49f166
--- /dev/null
+++ b/TempNewImagePackage/checkstyle.header
@@ -0,0 +1,20 @@
+^\/\*
+^ \* 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.*\$ \*\/
+
+^package .*
\ No newline at end of file
diff --git a/TempNewImagePackage/examples/java/image/loader/ImageViewer.java b/TempNewImagePackage/examples/java/image/loader/ImageViewer.java
new file mode 100644
index 0000000..599ebed
--- /dev/null
+++ b/TempNewImagePackage/examples/java/image/loader/ImageViewer.java
@@ -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$ */
+
+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);
+ }
+ }
+
+}
diff --git a/TempNewImagePackage/examples/java/image/loader/ViewerFrame.java b/TempNewImagePackage/examples/java/image/loader/ViewerFrame.java
new file mode 100644
index 0000000..151ba8d
--- /dev/null
+++ b/TempNewImagePackage/examples/java/image/loader/ViewerFrame.java
@@ -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$ */
+
+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);
+ }
+ }
+
+}
diff --git a/TempNewImagePackage/examples/java/image/writer/ImageWriterExample1.java b/TempNewImagePackage/examples/java/image/writer/ImageWriterExample1.java
new file mode 100644
index 0000000..dd3bf66
--- /dev/null
+++ b/TempNewImagePackage/examples/java/image/writer/ImageWriterExample1.java
@@ -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$ */
+
+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();
+ }
+ }
+
+}
diff --git a/TempNewImagePackage/examples/java/image/writer/ImageWriterExample2.java b/TempNewImagePackage/examples/java/image/writer/ImageWriterExample2.java
new file mode 100644
index 0000000..c768a67
--- /dev/null
+++ b/TempNewImagePackage/examples/java/image/writer/ImageWriterExample2.java
@@ -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$ */
+
+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();
+ }
+ }
+
+}
diff --git a/TempNewImagePackage/examples/java/java2d/ps/EPSExample1.java b/TempNewImagePackage/examples/java/java2d/ps/EPSExample1.java
new file mode 100644
index 0000000..8e15b1e
--- /dev/null
+++ b/TempNewImagePackage/examples/java/java2d/ps/EPSExample1.java
@@ -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$ */
+
+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();
+ }
+ }
+
+}
diff --git a/TempNewImagePackage/examples/java/ps/DSCProcessingExample1.java b/TempNewImagePackage/examples/java/ps/DSCProcessingExample1.java
new file mode 100644
index 0000000..823b76a
--- /dev/null
+++ b/TempNewImagePackage/examples/java/ps/DSCProcessingExample1.java
@@ -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$ */
+
+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);
+ }
+ }
+
+}
diff --git a/TempNewImagePackage/examples/java/xmp/MergeMetadata.java b/TempNewImagePackage/examples/java/xmp/MergeMetadata.java
new file mode 100644
index 0000000..5f5bfa8
--- /dev/null
+++ b/TempNewImagePackage/examples/java/xmp/MergeMetadata.java
@@ -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$ */
+
+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();
+ }
+ }
+
+}
diff --git a/TempNewImagePackage/examples/java/xmp/MetadataFromScratch.java b/TempNewImagePackage/examples/java/xmp/MetadataFromScratch.java
new file mode 100644
index 0000000..4b2a629
--- /dev/null
+++ b/TempNewImagePackage/examples/java/xmp/MetadataFromScratch.java
@@ -0,0 +1,62 @@
+/*
+ * 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$ */
+
+package xmp;
+
+import java.util.Date;
+
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.xmlgraphics.xmp.Metadata;
+import org.apache.xmlgraphics.xmp.XMPSerializer;
+import org.apache.xmlgraphics.xmp.schemas.DublinCoreAdapter;
+import org.xml.sax.SAXException;
+
+/**
+ * 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());
+
+ 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();
+ }
+ }
+
+}
diff --git a/TempNewImagePackage/examples/java/xmp/ParseMetadata.java b/TempNewImagePackage/examples/java/xmp/ParseMetadata.java
new file mode 100644
index 0000000..66d46dd
--- /dev/null
+++ b/TempNewImagePackage/examples/java/xmp/ParseMetadata.java
@@ -0,0 +1,77 @@
+/*
+ * 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$ */
+
+package xmp;
+
+import java.net.URL;
+
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.stream.StreamResult;
+
+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.xml.sax.SAXException;
+
+/**
+ * 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");
+ System.out.println("Title: " + prop.getValue());
+ 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());
+
+ 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();
+ }
+ }
+
+}
diff --git a/TempNewImagePackage/examples/java/xmp/pdf-example.xmp b/TempNewImagePackage/examples/java/xmp/pdf-example.xmp
new file mode 100644
index 0000000..ab621fa
--- /dev/null
+++ b/TempNewImagePackage/examples/java/xmp/pdf-example.xmp
@@ -0,0 +1,22 @@
+<?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:Seq>
+ </dc:creator>
+ <dc:title>Example document</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>
diff --git a/TempNewImagePackage/forrest.properties b/TempNewImagePackage/forrest.properties
new file mode 100644
index 0000000..628caeb
--- /dev/null
+++ b/TempNewImagePackage/forrest.properties
@@ -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.
+
+##############
+# Properties used by forrest.build.xml for building the website
+# These are the defaults, un-comment them if you need to change them.
+##############
+
+# Prints out a summary of Forrest settings for this project
+#forrest.echo=true
+
+# Project name (used to name .war file)
+#project.name=my-project
+
+# Specifies name of Forrest skin to use
+#project.skin=tigris
+#project.skin=crust
+project.skin=pelt
+
+# comma separated list, file:// is supported
+#forrest.skins.descriptors=http://forrest.apache.org/skins/skins.xml,file:///c:/myskins/skins.xml
+
+##############
+# behavioural properties
+#project.menu-scheme=tab_attributes
+#project.menu-scheme=directories
+
+##############
+# layout properties
+
+# Properties that can be set to override the default locations
+#
+# Parent properties must be set. This usually means uncommenting
+# project.content-dir if any other property using it is uncommented
+
+#project.status=status.xml
+#project.content-dir=src/documentation
+#project.raw-content-dir=${project.content-dir}/content
+#project.conf-dir=${project.content-dir}/conf
+#project.sitemap-dir=${project.content-dir}
+#project.xdocs-dir=${project.content-dir}/content/xdocs
+#project.resources-dir=${project.content-dir}/resources
+#project.stylesheets-dir=${project.resources-dir}/stylesheets
+#project.images-dir=${project.resources-dir}/images
+#project.schema-dir=${project.resources-dir}/schema
+#project.skins-dir=${project.content-dir}/skins
+#project.skinconf=${project.content-dir}/skinconf.xml
+#project.lib-dir=${project.content-dir}/lib
+#project.classes-dir=${project.content-dir}/classes
+#project.translations-dir=${project.content-dir}/translations
+
+##############
+# validation properties
+
+# This set of properties determine if validation is performed
+# Values are inherited unless overridden.
+# e.g. if forrest.validate=false then all others are false unless set to true.
+#forrest.validate=true
+#forrest.validate.xdocs=${forrest.validate}
+#forrest.validate.skinconf=${forrest.validate}
+#forrest.validate.sitemap=${forrest.validate}
+#forrest.validate.stylesheets=${forrest.validate}
+#forrest.validate.skins=${forrest.validate}
+#forrest.validate.skins.stylesheets=${forrest.validate.skins}
+
+# *.failonerror=(true|false) - stop when an XML file is invalid
+#forrest.validate.failonerror=true
+
+# *.excludes=(pattern) - comma-separated list of path patterns to not validate
+# e.g.
+#forrest.validate.xdocs.excludes=samples/subdir/**, samples/faq.xml
+#forrest.validate.xdocs.excludes=
+
+
+##############
+# General Forrest properties
+
+# The URL to start crawling from
+#project.start-uri=linkmap.html
+# Set logging level for messages printed to the console
+# (DEBUG, INFO, WARN, ERROR, FATAL_ERROR)
+#project.debuglevel=ERROR
+# Max memory to allocate to Java
+#forrest.maxmemory=64m
+# Any other arguments to pass to the JVM. For example, to run on an X-less
+# server, set to -Djava.awt.headless=true
+#forrest.jvmargs=
+# The bugtracking URL - the issue number will be appended
+#project.bugtracking-url=http://issues.apache.org/bugzilla/show_bug.cgi?id=
+#project.bugtracking-url=http://issues.apache.org/jira/browse/
+# The issues list as rss
+#project.issues-rss-url=
+#I18n Property only works for the "forrest run" target.
+#project.i18n=true
+project.required.plugins=org.apache.forrest.plugin.output.pdf-0.1
diff --git a/TempNewImagePackage/lib/README.txt b/TempNewImagePackage/lib/README.txt
new file mode 100644
index 0000000..6101b33
--- /dev/null
+++ b/TempNewImagePackage/lib/README.txt
@@ -0,0 +1,55 @@
+
+Information on Apache XML Graphics Commons dependencies
+==========================================================
+
+$Id$
+
+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
\ No newline at end of file
diff --git a/TempNewImagePackage/lib/commons-io-1.3.1.jar b/TempNewImagePackage/lib/commons-io-1.3.1.jar
new file mode 100644
index 0000000..7affdef
--- /dev/null
+++ b/TempNewImagePackage/lib/commons-io-1.3.1.jar
Binary files differ
diff --git a/TempNewImagePackage/lib/commons-io.LICENSE.txt b/TempNewImagePackage/lib/commons-io.LICENSE.txt
new file mode 100644
index 0000000..6b0b127
--- /dev/null
+++ b/TempNewImagePackage/lib/commons-io.LICENSE.txt
@@ -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.
+
diff --git a/TempNewImagePackage/lib/commons-io.NOTICE.txt b/TempNewImagePackage/lib/commons-io.NOTICE.txt
new file mode 100644
index 0000000..ce3b94a
--- /dev/null
+++ b/TempNewImagePackage/lib/commons-io.NOTICE.txt
@@ -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/).
+
diff --git a/TempNewImagePackage/lib/commons-logging-1.0.4.jar b/TempNewImagePackage/lib/commons-logging-1.0.4.jar
new file mode 100644
index 0000000..b73a80f
--- /dev/null
+++ b/TempNewImagePackage/lib/commons-logging-1.0.4.jar
Binary files differ
diff --git a/TempNewImagePackage/lib/commons-logging.LICENSE.txt b/TempNewImagePackage/lib/commons-logging.LICENSE.txt
new file mode 100644
index 0000000..d645695
--- /dev/null
+++ b/TempNewImagePackage/lib/commons-logging.LICENSE.txt
@@ -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.
diff --git a/TempNewImagePackage/lib/commons-logging.NOTICE.txt b/TempNewImagePackage/lib/commons-logging.NOTICE.txt
new file mode 100644
index 0000000..439eb83
--- /dev/null
+++ b/TempNewImagePackage/lib/commons-logging.NOTICE.txt
@@ -0,0 +1,3 @@
+This product includes software developed by
+The Apache Software Foundation (http://www.apache.org/).
+
diff --git a/TempNewImagePackage/publish.xml b/TempNewImagePackage/publish.xml
new file mode 100644
index 0000000..1c43fdf
--- /dev/null
+++ b/TempNewImagePackage/publish.xml
@@ -0,0 +1,55 @@
+<?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.
+-->
+<!--
+This is the publishing file for ForrestBot.
+
+Running "ant -f publish.xml" will build the XML Graphics Commons site and upload it to SVN. It has then to be checked out on people.apache.org to be deployed.
+
+$Id$
+-->
+<project name="forrest-docs" default="main">
+
+ <property name="build.work-dir" location="./build/forrest/work"/>
+ <property name="build.log-dir" location="./build/forrest/log"/>
+
+ <property name="getsrc.local.root-dir" location="."/>
+ <!--property name="getsrc.svn.url" value="http://svn.apache.org/repos/asf/xmlgraphics/commons/trunk"/-->
+ <target name="getsrc" depends="getsrc.clean-workdir, getsrc.local"/>
+
+ <target name="build.fixCRLF" depends="build.forrest">
+ <fixcrlf srcdir="./build/forrest-docs" eol="lf">
+ <include name="**/*.htm*"/>
+ <include name="**/*.css"/>
+ <include name="**/*.xsl*"/>
+ <include name="**/*.js"/>
+ <include name="**/*.rdf"/>
+ <include name="**/*.txt"/>
+ <include name="**/*.xml"/>
+ </fixcrlf>
+ </target>
+
+ <target name="build" depends="build.forrest, build.fixCRLF"/>
+
+ <import file="../deploy.svn.settings" optional="true"/>
+
+ <property name="deploy.svn.url" value="https://svn.apache.org/repos/asf/xmlgraphics/site/deploy/commons/"/>
+ <target name="deploy" depends="deploy.svn"/>
+
+ <property environment="env"/>
+ <import file="${env.FORREST_HOME}/tools/forrestbot/core/forrestbot.xml"/>
+</project>
\ No newline at end of file
diff --git a/TempNewImagePackage/src/documentation/README.txt b/TempNewImagePackage/src/documentation/README.txt
new file mode 100644
index 0000000..9bc261b
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/README.txt
@@ -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
diff --git a/TempNewImagePackage/src/documentation/classes/CatalogManager.properties b/TempNewImagePackage/src/documentation/classes/CatalogManager.properties
new file mode 100644
index 0000000..7ca47f0
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/classes/CatalogManager.properties
@@ -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=
+
diff --git a/TempNewImagePackage/src/documentation/content/doap.rdf b/TempNewImagePackage/src/documentation/content/doap.rdf
new file mode 100644
index 0000000..025d016
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/content/doap.rdf
@@ -0,0 +1,81 @@
+<?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>Latest 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>
diff --git a/TempNewImagePackage/src/documentation/content/xdocs/download.xml b/TempNewImagePackage/src/documentation/content/xdocs/download.xml
new file mode 100644
index 0000000..021637c
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/content/xdocs/download.xml
@@ -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>
diff --git a/TempNewImagePackage/src/documentation/content/xdocs/favicon.ico b/TempNewImagePackage/src/documentation/content/xdocs/favicon.ico
new file mode 100644
index 0000000..f0c22ad
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/content/xdocs/favicon.ico
Binary files differ
diff --git a/TempNewImagePackage/src/documentation/content/xdocs/image-loader.xml b/TempNewImagePackage/src/documentation/content/xdocs/image-loader.xml
new file mode 100644
index 0000000..b529dee
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/content/xdocs/image-loader.xml
@@ -0,0 +1,321 @@
+<?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>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>
+ </body>
+</document>
diff --git a/TempNewImagePackage/src/documentation/content/xdocs/index.xml b/TempNewImagePackage/src/documentation/content/xdocs/index.xml
new file mode 100644
index 0000000..caec022
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/content/xdocs/index.xml
@@ -0,0 +1,126 @@
+<?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>
+ Apache XML Graphics Commons has only just begun. It's in the process of being
+ populated with components coming from <a href="ext:batik">Apache Batik</a>
+ and <a href="ext:fop">Apache FOP</a>. Stay tuned for exciting treasures made
+ available.
+ </p>
+ <p>
+ In the Wiki, we have a
+ <a href="http://wiki.apache.org/xmlgraphics/XmlGraphicsCommonComponents">plan for building Apache XML Graphics Commons</a>.
+ The plan provides an idea of what you can expect to find here when we're finished
+ migrating components.
+ </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>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>
+ <section>
+ <title>21 July 2007: Version 1.2 Released</title>
+ <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">Changes</a> page.</p>
+ </section>
+ <section>
+ <title>22 December 2006: Version 1.1 Released</title>
+ <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>
+ </section>
+ <section>
+ <title>17 April 2006: Version 1.0 Released</title>
+ <p>
+ This is the first release of Apache XML Graphics Commons. There are currently no
+ known issues with the code.
+ </p>
+ </section>
+ </section>
+ </body>
+</document>
diff --git a/TempNewImagePackage/src/documentation/content/xdocs/postscript.xml b/TempNewImagePackage/src/documentation/content/xdocs/postscript.xml
new file mode 100644
index 0000000..afab7bd
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/content/xdocs/postscript.xml
@@ -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>
diff --git a/TempNewImagePackage/src/documentation/content/xdocs/site.xml b/TempNewImagePackage/src/documentation/content/xdocs/site.xml
new file mode 100644
index 0000000..8a4b5a6
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/content/xdocs/site.xml
@@ -0,0 +1,61 @@
+<?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.
+-->
+
+<!--
+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="XML Graphics Commons">
+ <index label="Overview" href="index.html" description="Overview"/>
+ <download label="Download" href="download.html" description="Download"/>
+ <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"/>"
+ <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"/>
+ </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>
diff --git a/TempNewImagePackage/src/documentation/content/xdocs/tabs.xml b/TempNewImagePackage/src/documentation/content/xdocs/tabs.xml
new file mode 100644
index 0000000..2475b2d
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/content/xdocs/tabs.xml
@@ -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="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>
diff --git a/TempNewImagePackage/src/documentation/resources/images/apache-xml-graphics.gif b/TempNewImagePackage/src/documentation/resources/images/apache-xml-graphics.gif
new file mode 100644
index 0000000..c5d9139
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/resources/images/apache-xml-graphics.gif
Binary files differ
diff --git a/TempNewImagePackage/src/documentation/resources/images/apache-xml-graphics.jpg b/TempNewImagePackage/src/documentation/resources/images/apache-xml-graphics.jpg
new file mode 100644
index 0000000..71440ad
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/resources/images/apache-xml-graphics.jpg
Binary files differ
diff --git a/TempNewImagePackage/src/documentation/resources/images/apache-xml-graphics.png b/TempNewImagePackage/src/documentation/resources/images/apache-xml-graphics.png
new file mode 100644
index 0000000..70eb879
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/resources/images/apache-xml-graphics.png
Binary files differ
diff --git a/TempNewImagePackage/src/documentation/resources/images/apache-xml-graphics.svg b/TempNewImagePackage/src/documentation/resources/images/apache-xml-graphics.svg
new file mode 100644
index 0000000..982e6f3
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/resources/images/apache-xml-graphics.svg
@@ -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>
diff --git a/TempNewImagePackage/src/documentation/resources/stylesheets/changes2document.xsl b/TempNewImagePackage/src/documentation/resources/stylesheets/changes2document.xsl
new file mode 100644
index 0000000..8ac82a9
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/resources/stylesheets/changes2document.xsl
@@ -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>
diff --git a/TempNewImagePackage/src/documentation/resources/stylesheets/dotdots.xsl b/TempNewImagePackage/src/documentation/resources/stylesheets/dotdots.xsl
new file mode 100644
index 0000000..af854de
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/resources/stylesheets/dotdots.xsl
@@ -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>
diff --git a/TempNewImagePackage/src/documentation/resources/stylesheets/releaseNotes2document.xsl b/TempNewImagePackage/src/documentation/resources/stylesheets/releaseNotes2document.xsl
new file mode 100644
index 0000000..700f5e3
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/resources/stylesheets/releaseNotes2document.xsl
@@ -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>
diff --git a/TempNewImagePackage/src/documentation/sitemap.xmap b/TempNewImagePackage/src/documentation/sitemap.xmap
new file mode 100644
index 0000000..8347c06
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/sitemap.xmap
@@ -0,0 +1,55 @@
+<?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.
+-->
+<map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0">
+ <map:components>
+ </map:components>
+
+ <map:pipelines>
+ <map:pipeline>
+
+ <map:match type="regexp" pattern="^(.*?)([^/]*)changes.xml$">
+ <map:generate type="file" src="{project:status}" />
+ <map:transform src="resources/stylesheets/changes2document.xsl" >
+ <map:parameter name="bugtracking-url" value="{defaults:bugtracking-url}"/>
+ <map:parameter name="path" value="{1}{2}"/>
+ </map:transform>
+ <map:serialize type="xml-document"/>
+ </map:match>
+
+ <map:match type="regexp" pattern="^(.*?)([^/]*)changes_(.*).xml$">
+ <map:generate type="file" src="{project:status}" />
+ <map:transform src="resources/stylesheets/changes2document.xsl" >
+ <map:parameter name="bugtracking-url" value="{defaults:bugtracking-url}"/>
+ <map:parameter name="path" value="{1}{2}"/>
+ <map:parameter name="versionNumber" value="{3}"/>
+ </map:transform>
+ <map:serialize type="xml-document"/>
+ </map:match>
+
+ <map:match type="regexp" pattern="^(.*?)([^/]*)releaseNotes_(.*).xml$">
+ <map:generate type="file" src="{project:status}" />
+ <map:transform src="resources/stylesheets/releaseNotes2document.xsl">
+ <map:parameter name="versionNumber" value="{3}"/>
+ </map:transform>
+ <map:serialize type="xml-document"/>
+ </map:match>
+
+ </map:pipeline>
+
+ </map:pipelines>
+</map:sitemap>
diff --git a/TempNewImagePackage/src/documentation/skinconf.xml b/TempNewImagePackage/src/documentation/skinconf.xml
new file mode 100644
index 0000000..8042751
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/skinconf.xml
@@ -0,0 +1,374 @@
+<?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.
+-->
+
+<!--
+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-2007</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>
+
+ <!-- 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="apache.org" href="http://www.apache.org/"/>
+ <link2 name="XML Federation" href="http://xml.apache.org/"/>
+ <link3 name="xmlgraphics.apache.org" 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="left"/>
+
+ <!--
+ 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>1in</top>
+ <bottom>1in</bottom>
+ <inner>1.25in</inner>
+ <outer>1in</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 2008</name>
+ <url>http://eu.apachecon.com/</url>
+ <image>http://apache.org/ads/ApacheCon/2008-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>Built with Apache Forrest</name>
+ <url>http://forrest.apache.org/</url>
+ </credit>
+ -->
+ </credits>
+
+</skinconfig>
diff --git a/TempNewImagePackage/src/documentation/translations/langcode.xml b/TempNewImagePackage/src/documentation/translations/langcode.xml
new file mode 100644
index 0000000..63041b5
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/translations/langcode.xml
@@ -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>
diff --git a/TempNewImagePackage/src/documentation/translations/languages_en.xml b/TempNewImagePackage/src/documentation/translations/languages_en.xml
new file mode 100644
index 0000000..c8b239a
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/translations/languages_en.xml
@@ -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>
diff --git a/TempNewImagePackage/src/documentation/translations/languages_es.xml b/TempNewImagePackage/src/documentation/translations/languages_es.xml
new file mode 100644
index 0000000..2dce0cd
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/translations/languages_es.xml
@@ -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>
diff --git a/TempNewImagePackage/src/documentation/translations/menu.xml b/TempNewImagePackage/src/documentation/translations/menu.xml
new file mode 100644
index 0000000..7d5e504
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/translations/menu.xml
@@ -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>
diff --git a/TempNewImagePackage/src/documentation/translations/menu_af.xml b/TempNewImagePackage/src/documentation/translations/menu_af.xml
new file mode 100644
index 0000000..5444ee6
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/translations/menu_af.xml
@@ -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>
diff --git a/TempNewImagePackage/src/documentation/translations/menu_de.xml b/TempNewImagePackage/src/documentation/translations/menu_de.xml
new file mode 100644
index 0000000..237c1f6
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/translations/menu_de.xml
@@ -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>
diff --git a/TempNewImagePackage/src/documentation/translations/menu_es.xml b/TempNewImagePackage/src/documentation/translations/menu_es.xml
new file mode 100644
index 0000000..e704b9b
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/translations/menu_es.xml
@@ -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>
diff --git a/TempNewImagePackage/src/documentation/translations/menu_it.xml b/TempNewImagePackage/src/documentation/translations/menu_it.xml
new file mode 100644
index 0000000..d2233aa
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/translations/menu_it.xml
@@ -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>
diff --git a/TempNewImagePackage/src/documentation/translations/menu_no.xml b/TempNewImagePackage/src/documentation/translations/menu_no.xml
new file mode 100644
index 0000000..f9be343
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/translations/menu_no.xml
@@ -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>
diff --git a/TempNewImagePackage/src/documentation/translations/menu_ru.xml b/TempNewImagePackage/src/documentation/translations/menu_ru.xml
new file mode 100644
index 0000000..0e35206
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/translations/menu_ru.xml
@@ -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>
diff --git a/TempNewImagePackage/src/documentation/translations/menu_sk.xml b/TempNewImagePackage/src/documentation/translations/menu_sk.xml
new file mode 100644
index 0000000..2fc3fe9
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/translations/menu_sk.xml
@@ -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>
diff --git a/TempNewImagePackage/src/documentation/translations/tabs.xml b/TempNewImagePackage/src/documentation/translations/tabs.xml
new file mode 100644
index 0000000..a5e1003
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/translations/tabs.xml
@@ -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>
diff --git a/TempNewImagePackage/src/documentation/translations/tabs_es.xml b/TempNewImagePackage/src/documentation/translations/tabs_es.xml
new file mode 100644
index 0000000..d273249
--- /dev/null
+++ b/TempNewImagePackage/src/documentation/translations/tabs_es.xml
@@ -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>
diff --git a/TempNewImagePackage/src/java-1.4/org/apache/xmlgraphics/image/writer/imageio/ImageIOImageWriter.java b/TempNewImagePackage/src/java-1.4/org/apache/xmlgraphics/image/writer/imageio/ImageIOImageWriter.java
new file mode 100644
index 0000000..d876242
--- /dev/null
+++ b/TempNewImagePackage/src/java-1.4/org/apache/xmlgraphics/image/writer/imageio/ImageIOImageWriter.java
@@ -0,0 +1,289 @@
+/*
+ * 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$ */
+
+package org.apache.xmlgraphics.image.writer.imageio;
+
+import java.awt.image.RenderedImage;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.Iterator;
+
+import javax.imageio.IIOImage;
+import javax.imageio.ImageIO;
+import javax.imageio.ImageTypeSpecifier;
+import javax.imageio.ImageWriteParam;
+import javax.imageio.event.IIOWriteWarningListener;
+import javax.imageio.metadata.IIOInvalidTreeException;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.metadata.IIOMetadataNode;
+import javax.imageio.stream.ImageOutputStream;
+
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import org.apache.xmlgraphics.image.writer.ImageWriter;
+import org.apache.xmlgraphics.image.writer.ImageWriterParams;
+import org.apache.xmlgraphics.image.writer.MultiImageWriter;
+
+/**
+ * ImageWriter implementation that uses Image I/O to write images.
+ *
+ * @version $Id$
+ */
+public class ImageIOImageWriter implements ImageWriter, IIOWriteWarningListener {
+
+ private static final String STANDARD_METADATA_FORMAT = "javax_imageio_1.0";
+
+ private String targetMIME;
+
+ /**
+ * Main constructor.
+ * @param mime the MIME type of the image format
+ */
+ public ImageIOImageWriter(String mime) {
+ this.targetMIME = mime;
+ }
+
+ /**
+ * @see ImageWriter#writeImage(java.awt.image.RenderedImage, java.io.OutputStream)
+ */
+ public void writeImage(RenderedImage image, OutputStream out) throws IOException {
+ writeImage(image, out, null);
+ }
+
+ /**
+ * @see ImageWriter#writeImage(java.awt.image.RenderedImage, java.io.OutputStream, ImageWriterParams)
+ */
+ public void writeImage(RenderedImage image, OutputStream out,
+ ImageWriterParams params)
+ throws IOException {
+ javax.imageio.ImageWriter iiowriter = getIIOImageWriter();
+ iiowriter.addIIOWriteWarningListener(this);
+
+ ImageOutputStream imgout = ImageIO.createImageOutputStream(out);
+ try {
+
+ ImageWriteParam iwParam = getDefaultWriteParam(iiowriter, image, params);
+
+ ImageTypeSpecifier type;
+ if (iwParam.getDestinationType() != null) {
+ type = iwParam.getDestinationType();
+ } else {
+ type = ImageTypeSpecifier.createFromRenderedImage(image);
+ }
+
+ //Handle metadata
+ IIOMetadata meta = iiowriter.getDefaultImageMetadata(
+ type, iwParam);
+ //meta might be null for some JAI codecs as they don't support metadata
+ if (params != null && meta != null) {
+ meta = updateMetadata(meta, params);
+ }
+
+ //Write image
+ iiowriter.setOutput(imgout);
+ IIOImage iioimg = new IIOImage(image, null, meta);
+ iiowriter.write(null, iioimg, iwParam);
+
+ } finally {
+ imgout.close();
+ iiowriter.dispose();
+ }
+ }
+
+ private javax.imageio.ImageWriter getIIOImageWriter() {
+ Iterator iter = ImageIO.getImageWritersByMIMEType(getMIMEType());
+ javax.imageio.ImageWriter iiowriter = null;
+ if (iter.hasNext()) {
+ iiowriter = (javax.imageio.ImageWriter)iter.next();
+ }
+ if (iiowriter == null) {
+ throw new UnsupportedOperationException("No ImageIO codec for writing "
+ + getMIMEType() + " is available!");
+ }
+ return iiowriter;
+ }
+
+ /**
+ * Returns the default write parameters for encoding the image.
+ * @param iiowriter The IIO ImageWriter that will be used
+ * @param image the image to be encoded
+ * @param params the parameters for this writer instance
+ * @return the IIO ImageWriteParam instance
+ */
+ protected ImageWriteParam getDefaultWriteParam(
+ javax.imageio.ImageWriter iiowriter, RenderedImage image,
+ ImageWriterParams params) {
+ ImageWriteParam param = iiowriter.getDefaultWriteParam();
+ //System.err.println("Param: " + params);
+ if ((params != null) && (params.getCompressionMethod() != null)) {
+ param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
+ param.setCompressionType(params.getCompressionMethod());
+ }
+ return param;
+ }
+
+ /**
+ * Updates the metadata information based on the parameters to this writer.
+ * @param meta the metadata
+ * @param params the parameters
+ * @return the updated metadata
+ */
+ protected IIOMetadata updateMetadata(IIOMetadata meta, ImageWriterParams params) {
+ if (meta.isStandardMetadataFormatSupported()) {
+ IIOMetadataNode root = (IIOMetadataNode)meta.getAsTree(STANDARD_METADATA_FORMAT);
+ IIOMetadataNode dim = getChildNode(root, "Dimension");
+ IIOMetadataNode child;
+ if (params.getResolution() != null) {
+ child = getChildNode(dim, "HorizontalPixelSize");
+ if (child == null) {
+ child = new IIOMetadataNode("HorizontalPixelSize");
+ dim.appendChild(child);
+ }
+ child.setAttribute("value",
+ Double.toString(params.getResolution().doubleValue() / 25.4));
+ child = getChildNode(dim, "VerticalPixelSize");
+ if (child == null) {
+ child = new IIOMetadataNode("VerticalPixelSize");
+ dim.appendChild(child);
+ }
+ child.setAttribute("value",
+ Double.toString(params.getResolution().doubleValue() / 25.4));
+ }
+ try {
+ meta.mergeTree(STANDARD_METADATA_FORMAT, root);
+ } catch (IIOInvalidTreeException e) {
+ throw new RuntimeException("Cannot update image metadata: "
+ + e.getMessage());
+ }
+ }
+ return meta;
+ }
+
+ /**
+ * Returns a specific metadata child node
+ * @param n the base node
+ * @param name the name of the child
+ * @return the requested child node
+ */
+ protected static IIOMetadataNode getChildNode(Node n, String name) {
+ NodeList nodes = n.getChildNodes();
+ for (int i = 0; i < nodes.getLength(); i++) {
+ Node child = nodes.item(i);
+ if (name.equals(child.getNodeName())) {
+ return (IIOMetadataNode)child;
+ }
+ }
+ return null;
+ }
+
+ /** @see ImageWriter#getMIMEType() */
+ public String getMIMEType() {
+ return this.targetMIME;
+ }
+
+ /** @see org.apache.xmlgraphics.image.writer.ImageWriter#isFunctional() */
+ public boolean isFunctional() {
+ Iterator iter = ImageIO.getImageWritersByMIMEType(getMIMEType());
+ //Only return true if an IIO ImageWriter is available in the current environment
+ return (iter.hasNext());
+ }
+
+ /**
+ * @see javax.imageio.event.IIOWriteWarningListener#warningOccurred(
+ * javax.imageio.ImageWriter, int, java.lang.String)
+ */
+ public void warningOccurred(javax.imageio.ImageWriter source,
+ int imageIndex, String warning) {
+ System.err.println("Problem while writing image using ImageI/O: "
+ + warning);
+ }
+
+ /**
+ * @see org.apache.xmlgraphics.image.writer.ImageWriter#createMultiImageWriter(
+ * java.io.OutputStream)
+ */
+ public MultiImageWriter createMultiImageWriter(OutputStream out) throws IOException {
+ return new IIOMultiImageWriter(out);
+ }
+
+ /** @see org.apache.xmlgraphics.image.writer.ImageWriter#supportsMultiImageWriter() */
+ public boolean supportsMultiImageWriter() {
+ javax.imageio.ImageWriter iiowriter = getIIOImageWriter();
+ try {
+ return iiowriter.canWriteSequence();
+ } finally {
+ iiowriter.dispose();
+ }
+ }
+
+ private class IIOMultiImageWriter implements MultiImageWriter {
+
+ private javax.imageio.ImageWriter iiowriter;
+ private ImageOutputStream imageStream;
+
+ public IIOMultiImageWriter(OutputStream out) throws IOException {
+ this.iiowriter = getIIOImageWriter();
+ if (!iiowriter.canWriteSequence()) {
+ throw new UnsupportedOperationException("This ImageWriter does not support writing"
+ + " multiple images to a single image file.");
+ }
+ iiowriter.addIIOWriteWarningListener(ImageIOImageWriter.this);
+
+ imageStream = ImageIO.createImageOutputStream(out);
+ iiowriter.setOutput(imageStream);
+ iiowriter.prepareWriteSequence(null);
+ }
+
+ public void writeImage(RenderedImage image, ImageWriterParams params) throws IOException {
+ if (iiowriter == null) {
+ throw new IllegalStateException("MultiImageWriter already closed!");
+ }
+ ImageWriteParam iwParam = getDefaultWriteParam(iiowriter, image, params);
+
+ ImageTypeSpecifier type;
+ if (iwParam.getDestinationType() != null) {
+ type = iwParam.getDestinationType();
+ } else {
+ type = ImageTypeSpecifier.createFromRenderedImage(image);
+ }
+
+ //Handle metadata
+ IIOMetadata meta = iiowriter.getDefaultImageMetadata(
+ type, iwParam);
+ //meta might be null for some JAI codecs as they don't support metadata
+ if (params != null && meta != null) {
+ meta = updateMetadata(meta, params);
+ }
+
+ //Write image
+ IIOImage iioimg = new IIOImage(image, null, meta);
+ iiowriter.writeToSequence(iioimg, iwParam);
+ }
+
+ public void close() throws IOException {
+ imageStream.close();
+ imageStream = null;
+ iiowriter.dispose();
+ iiowriter = null;
+ }
+
+ }
+
+}
diff --git a/TempNewImagePackage/src/java-1.4/org/apache/xmlgraphics/image/writer/imageio/ImageIOJPEGImageWriter.java b/TempNewImagePackage/src/java-1.4/org/apache/xmlgraphics/image/writer/imageio/ImageIOJPEGImageWriter.java
new file mode 100644
index 0000000..13e68d8
--- /dev/null
+++ b/TempNewImagePackage/src/java-1.4/org/apache/xmlgraphics/image/writer/imageio/ImageIOJPEGImageWriter.java
@@ -0,0 +1,163 @@
+/*
+ * 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$ */
+
+package org.apache.xmlgraphics.image.writer.imageio;
+
+import java.awt.image.RenderedImage;
+
+import javax.imageio.ImageWriteParam;
+import javax.imageio.ImageWriter;
+import javax.imageio.metadata.IIOInvalidTreeException;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.metadata.IIOMetadataNode;
+import javax.imageio.plugins.jpeg.JPEGImageWriteParam;
+
+import org.apache.xmlgraphics.image.writer.ImageWriterParams;
+
+
+/**
+ * ImageWriter that encodes JPEG images using Image I/O.
+ *
+ * @version $Id$
+ */
+public class ImageIOJPEGImageWriter extends ImageIOImageWriter {
+
+ private static final String JPEG_NATIVE_FORMAT = "javax_imageio_jpeg_image_1.0";
+
+ /**
+ * Main constructor.
+ */
+ public ImageIOJPEGImageWriter() {
+ super("image/jpeg");
+ }
+
+ /**
+ * @see ImageIOImageWriter#updateMetadata(javax.imageio.metadata.IIOMetadata, ImageWriterParams)
+ */
+ protected IIOMetadata updateMetadata(IIOMetadata meta, ImageWriterParams params) {
+ //ImageIODebugUtil.dumpMetadata(meta);
+ if (JPEG_NATIVE_FORMAT.equals(meta.getNativeMetadataFormatName())) {
+ meta = addAdobeTransform(meta);
+
+ IIOMetadataNode root = (IIOMetadataNode)meta.getAsTree(JPEG_NATIVE_FORMAT);
+ //IIOMetadataNode root = new IIOMetadataNode(jpegmeta);
+
+ IIOMetadataNode jv = getChildNode(root, "JPEGvariety");
+ if (jv == null) {
+ jv = new IIOMetadataNode("JPEGvariety");
+ root.appendChild(jv);
+ }
+ IIOMetadataNode child;
+ if (params.getResolution() != null) {
+ child = getChildNode(jv, "app0JFIF");
+ if (child == null) {
+ child = new IIOMetadataNode("app0JFIF");
+ jv.appendChild(child);
+ }
+ //JPEG gets special treatment because there seems to be a bug in
+ //the JPEG codec in ImageIO converting the pixel size incorrectly
+ //(or not at all) when using standard metadata format.
+ child.setAttribute("majorVersion", null);
+ child.setAttribute("minorVersion", null);
+ child.setAttribute("resUnits", "1"); //dots per inch
+ child.setAttribute("Xdensity", params.getResolution().toString());
+ child.setAttribute("Ydensity", params.getResolution().toString());
+ child.setAttribute("thumbWidth", null);
+ child.setAttribute("thumbHeight", null);
+
+ }
+
+ /*
+ IIOMetadataNode ms = getChildNode(root, "markerSequence");
+ if (ms == null) {
+ ms = new IIOMetadataNode("markerSequence");
+ root.appendChild(ms);
+ }*/
+
+ try {
+ meta.setFromTree(JPEG_NATIVE_FORMAT, root);
+ //meta.mergeTree(JPEG_NATIVE_FORMAT, root);
+ } catch (IIOInvalidTreeException e) {
+ throw new RuntimeException("Cannot update image metadata: "
+ + e.getMessage(), e);
+ }
+
+ //ImageIODebugUtil.dumpMetadata(meta);
+
+ //meta = super.updateMetadata(meta, params);
+ //ImageIODebugUtil.dumpMetadata(meta);
+ }
+
+ return meta;
+ }
+
+ private static IIOMetadata addAdobeTransform(IIOMetadata meta) {
+ // add the adobe transformation (transform 1 -> to YCbCr)
+ IIOMetadataNode root = (IIOMetadataNode)meta.getAsTree(JPEG_NATIVE_FORMAT);
+
+ IIOMetadataNode markerSequence = getChildNode(root, "markerSequence");
+ if (markerSequence == null) {
+ throw new RuntimeException("Invalid metadata!");
+ }
+
+ IIOMetadataNode adobeTransform = getChildNode(markerSequence, "app14Adobe");
+ if (adobeTransform == null) {
+ adobeTransform = new IIOMetadataNode("app14Adobe");
+ adobeTransform.setAttribute("transform" , "1"); // convert RGB to YCbCr
+ adobeTransform.setAttribute("version", "101");
+ adobeTransform.setAttribute("flags0", "0");
+ adobeTransform.setAttribute("flags1", "0");
+
+ markerSequence.appendChild(adobeTransform);
+ } else {
+ adobeTransform.setAttribute("transform" , "1");
+ }
+
+ try {
+ meta.setFromTree(JPEG_NATIVE_FORMAT, root);
+ } catch (IIOInvalidTreeException e) {
+ throw new RuntimeException("Cannot update image metadata: "
+ + e.getMessage(), e);
+ }
+ return meta;
+ }
+
+ /**
+ * @see ImageIOImageWriter#getDefaultWriteParam(javax.imageio.ImageWriter, java.awt.image.RenderedImage, ImageWriterParams)
+ */
+ protected ImageWriteParam getDefaultWriteParam(
+ ImageWriter iiowriter, RenderedImage image,
+ ImageWriterParams params) {
+ JPEGImageWriteParam param = new JPEGImageWriteParam(iiowriter.getLocale());
+ //ImageTypeSpecifier type = ImageTypeSpecifier.createFromRenderedImage(image);
+ /*
+ ImageTypeSpecifier type = new ImageTypeSpecifier(
+ image.getColorModel(), image.getSampleModel());
+ */
+ /* didn't work as expected...
+ ImageTypeSpecifier type = ImageTypeSpecifier.createFromBufferedImageType(
+ BufferedImage.TYPE_INT_RGB);
+ param.setDestinationType(type);
+ param.setSourceBands(new int[] {0, 1, 2});
+ */
+ return param;
+ }
+
+
+}
diff --git a/TempNewImagePackage/src/java-1.4/org/apache/xmlgraphics/image/writer/imageio/ImageIOPNGImageWriter.java b/TempNewImagePackage/src/java-1.4/org/apache/xmlgraphics/image/writer/imageio/ImageIOPNGImageWriter.java
new file mode 100644
index 0000000..ea77c51
--- /dev/null
+++ b/TempNewImagePackage/src/java-1.4/org/apache/xmlgraphics/image/writer/imageio/ImageIOPNGImageWriter.java
@@ -0,0 +1,36 @@
+/*
+ * 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$ */
+
+package org.apache.xmlgraphics.image.writer.imageio;
+
+/**
+ * ImageWriter that encodes PNG images using Image I/O.
+ *
+ * @version $Id$
+ */
+public class ImageIOPNGImageWriter extends ImageIOImageWriter {
+
+ /**
+ * Main constructor.
+ */
+ public ImageIOPNGImageWriter() {
+ super("image/png");
+ }
+
+}
diff --git a/TempNewImagePackage/src/java-1.4/org/apache/xmlgraphics/image/writer/imageio/ImageIOTIFFImageWriter.java b/TempNewImagePackage/src/java-1.4/org/apache/xmlgraphics/image/writer/imageio/ImageIOTIFFImageWriter.java
new file mode 100644
index 0000000..7657561
--- /dev/null
+++ b/TempNewImagePackage/src/java-1.4/org/apache/xmlgraphics/image/writer/imageio/ImageIOTIFFImageWriter.java
@@ -0,0 +1,113 @@
+/*
+ * 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$ */
+
+package org.apache.xmlgraphics.image.writer.imageio;
+
+import javax.imageio.metadata.IIOInvalidTreeException;
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.metadata.IIOMetadataNode;
+
+import org.apache.xmlgraphics.image.writer.ImageWriterParams;
+
+/**
+ * ImageWriter that encodes TIFF images using Image I/O.
+ *
+ * @version $Id$
+ */
+public class ImageIOTIFFImageWriter extends ImageIOImageWriter {
+
+ private static final String SUN_TIFF_NATIVE_FORMAT
+ = "com_sun_media_imageio_plugins_tiff_image_1.0";
+
+ /**
+ * Main constructor.
+ */
+ public ImageIOTIFFImageWriter() {
+ super("image/tiff");
+ }
+
+ /**
+ * @see org.apache.xmlgraphics.image.writer.imageio.ImageIOImageWriter#updateMetadata(javax.imageio.metadata.IIOMetadata, org.apache.xmlgraphics.image.writer.ImageWriterParams)
+ */
+ protected IIOMetadata updateMetadata(IIOMetadata meta, ImageWriterParams params) {
+ IIOMetadata ret = super.updateMetadata(meta, params);
+
+ //We set the resolution manually using the native format since it appears that
+ //it doesn't work properly through the standard metadata. Haven't figured out why
+ //that happens.
+ if (params.getResolution() != null) {
+ if (SUN_TIFF_NATIVE_FORMAT.equals(meta.getNativeMetadataFormatName())) {
+
+ //IIOMetadataNode root = (IIOMetadataNode)meta.getAsTree(SUN_TIFF_NATIVE_FORMAT);
+ IIOMetadataNode root = new IIOMetadataNode(SUN_TIFF_NATIVE_FORMAT);
+
+ IIOMetadataNode ifd = getChildNode(root, "TIFFIFD");
+ if (ifd == null) {
+ ifd = new IIOMetadataNode("TIFFIFD");
+ ifd.setAttribute("tagSets",
+ "com.sun.media.imageio.plugins.tiff.BaselineTIFFTagSet");
+ root.appendChild(ifd);
+ }
+ ifd.appendChild(createResolutionField(282, "XResolution", params));
+ ifd.appendChild(createResolutionField(283, "YResolution", params));
+
+ //ResolutionUnit
+ IIOMetadataNode field, arrayNode, valueNode;
+ field = new IIOMetadataNode("TIFFField");
+ field.setAttribute("number", Integer.toString(296));
+ field.setAttribute("name", "ResolutionUnit");
+ arrayNode = new IIOMetadataNode("TIFFShorts");
+ field.appendChild(arrayNode);
+ valueNode = new IIOMetadataNode("TIFFShort");
+ valueNode.setAttribute("value", Integer.toString(3));
+ valueNode.setAttribute("description", "Centimeter");
+ arrayNode.appendChild(valueNode);
+
+ try {
+ meta.mergeTree(SUN_TIFF_NATIVE_FORMAT, root);
+ } catch (IIOInvalidTreeException e) {
+ throw new RuntimeException("Cannot update image metadata: "
+ + e.getMessage(), e);
+ }
+ }
+ }
+
+ return ret;
+ }
+
+ private IIOMetadataNode createResolutionField(int number, String name, ImageWriterParams params) {
+ IIOMetadataNode field, arrayNode, valueNode;
+ field = new IIOMetadataNode("TIFFField");
+ field.setAttribute("number", Integer.toString(number));
+ field.setAttribute("name", name);
+ arrayNode = new IIOMetadataNode("TIFFRationals");
+ field.appendChild(arrayNode);
+ valueNode = new IIOMetadataNode("TIFFRational");
+ arrayNode.appendChild(valueNode);
+
+ // Set target resolution
+ float pixSzMM = 25.4f / params.getResolution().floatValue();
+ // num Pixs in 100 Meters
+ int numPix = (int)(((1000 * 100) / pixSzMM) + 0.5);
+ int denom = 100 * 100; // Centimeters per 100 Meters;
+ valueNode.setAttribute("value", numPix + "/" + denom);
+ return field;
+ }
+
+}
diff --git a/TempNewImagePackage/src/java-1.4/org/apache/xmlgraphics/image/writer/imageio/package.html b/TempNewImagePackage/src/java-1.4/org/apache/xmlgraphics/image/writer/imageio/package.html
new file mode 100644
index 0000000..4036235
--- /dev/null
+++ b/TempNewImagePackage/src/java-1.4/org/apache/xmlgraphics/image/writer/imageio/package.html
@@ -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.writer.imageio Package</TITLE>
+<BODY>
+<P>Implementations of ImageWriter using the ImageIO API.</P>
+</BODY>
+</HTML>
\ No newline at end of file
diff --git a/TempNewImagePackage/src/java-1.4/org/apache/xmlgraphics/util/ImageIODebugUtil.java b/TempNewImagePackage/src/java-1.4/org/apache/xmlgraphics/util/ImageIODebugUtil.java
new file mode 100644
index 0000000..c86fa84
--- /dev/null
+++ b/TempNewImagePackage/src/java-1.4/org/apache/xmlgraphics/util/ImageIODebugUtil.java
@@ -0,0 +1,66 @@
+/*
+ * 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$ */
+
+package org.apache.xmlgraphics.util;
+
+import javax.imageio.metadata.IIOMetadata;
+import javax.imageio.metadata.IIOMetadataFormatImpl;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.w3c.dom.Node;
+
+/**
+ * Helper class for debugging stuff in Image I/O.
+ *
+ * @version $Id$
+ */
+public class ImageIODebugUtil {
+
+ public static void dumpMetadata(IIOMetadata meta, boolean nativeFormat) {
+ String format;
+ if (nativeFormat) {
+ format = meta.getNativeMetadataFormatName();
+ } else {
+ format = IIOMetadataFormatImpl.standardMetadataFormatName;
+ }
+ Node node = meta.getAsTree(format);
+ dumpNode(node);
+ }
+
+ public static void dumpNode(Node node) {
+ try {
+ TransformerFactory tf = TransformerFactory.newInstance();
+ Transformer t = tf.newTransformer();
+ t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
+ Source src = new DOMSource(node);
+ Result res = new StreamResult(System.out);
+ t.transform(src, res);
+ System.out.println();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+}
diff --git a/TempNewImagePackage/src/java/org/apache/xmlgraphics/fonts/Glyphs.java b/TempNewImagePackage/src/java/org/apache/xmlgraphics/fonts/Glyphs.java
new file mode 100644
index 0000000..e18f72a
--- /dev/null
+++ b/TempNewImagePackage/src/java/org/apache/xmlgraphics/fonts/Glyphs.java
@@ -0,0 +1,1314 @@
+/*
+ * 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$ */
+
+package org.apache.xmlgraphics.fonts;
+
+/**
+ * This class provides a number of constants for glyph management.
+ */
+public class Glyphs {
+
+ /**
+ * Glyph name for the "notdef" glyph
+ */
+ public static final String NOTDEF = ".notdef";
+
+ /**
+ * Glyph names for Mac encoding
+ */
+ public static final String MAC_GLYPH_NAMES[] = {
+ /* 0x00 */
+ 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'
+ };
+
+ /**
+ * List of unicode glyphs
+ */
+ public static final String[] UNICODE_GLYPHS = {
+ "\u0041", "A",
+ "\u00C6", "AE",
+ "\u01FC", "AEacute",
+ "\uF7E6", "AEsmall",
+ "\u00C1", "Aacute",
+ "\uF7E1", "Aacutesmall",
+ "\u0102", "Abreve",
+ "\u00C2", "Acircumflex",
+ "\uF7E2", "Acircumflexsmall",
+ "\uF6C9", "Acute",
+ "\uF7B4", "Acutesmall",
+ "\u00C4", "Adieresis",
+ "\uF7E4", "Adieresissmall",
+ "\u00C0", "Agrave",
+ "\uF7E0", "Agravesmall",
+ "\u0391", "Alpha",
+ "\u0386", "Alphatonos",
+ "\u0100", "Amacron",
+ "\u0104", "Aogonek",
+ "\u00C5", "Aring",
+ "\u01FA", "Aringacute",
+ "\uF7E5", "Aringsmall",
+ "\uF761", "Asmall",
+ "\u00C3", "Atilde",
+ "\uF7E3", "Atildesmall",
+ "\u0042", "B",
+ "\u0392", "Beta",
+ "\uF6F4", "Brevesmall",
+ "\uF762", "Bsmall",
+ "\u0043", "C",
+ "\u0106", "Cacute",
+ "\uF6CA", "Caron",
+ "\uF6F5", "Caronsmall",
+ "\u010C", "Ccaron",
+ "\u00C7", "Ccedilla",
+ "\uF7E7", "Ccedillasmall",
+ "\u0108", "Ccircumflex",
+ "\u010A", "Cdotaccent",
+ "\uF7B8", "Cedillasmall",
+ "\u03A7", "Chi",
+ "\uF6F6", "Circumflexsmall",
+ "\uF763", "Csmall",
+ "\u0044", "D",
+ "\u010E", "Dcaron",
+ "\u0110", "Dcroat",
+ "\u2206", "Delta",
+ "\u0394", "Delta",
+ "\uF6CB", "Dieresis",
+ "\uF6CC", "DieresisAcute",
+ "\uF6CD", "DieresisGrave",
+ "\uF7A8", "Dieresissmall",
+ "\uF6F7", "Dotaccentsmall",
+ "\uF764", "Dsmall",
+ "\u0045", "E",
+ "\u00C9", "Eacute",
+ "\uF7E9", "Eacutesmall",
+ "\u0114", "Ebreve",
+ "\u011A", "Ecaron",
+ "\u00CA", "Ecircumflex",
+ "\uF7EA", "Ecircumflexsmall",
+ "\u00CB", "Edieresis",
+ "\uF7EB", "Edieresissmall",
+ "\u0116", "Edotaccent",
+ "\u00C8", "Egrave",
+ "\uF7E8", "Egravesmall",
+ "\u0112", "Emacron",
+ "\u014A", "Eng",
+ "\u0118", "Eogonek",
+ "\u0395", "Epsilon",
+ "\u0388", "Epsilontonos",
+ "\uF765", "Esmall",
+ "\u0397", "Eta",
+ "\u0389", "Etatonos",
+ "\u00D0", "Eth",
+ "\uF7F0", "Ethsmall",
+ "\u20AC", "Euro",
+ "\u0046", "F",
+ "\uF766", "Fsmall",
+ "\u0047", "G",
+ "\u0393", "Gamma",
+ "\u011E", "Gbreve",
+ "\u01E6", "Gcaron",
+ "\u011C", "Gcircumflex",
+ "\u0122", "Gcommaaccent",
+ "\u0120", "Gdotaccent",
+ "\uF6CE", "Grave",
+ "\uF760", "Gravesmall",
+ "\uF767", "Gsmall",
+ "\u0048", "H",
+ "\u25CF", "H18533",
+ "\u25AA", "H18543",
+ "\u25AB", "H18551",
+ "\u25A1", "H22073",
+ "\u0126", "Hbar",
+ "\u0124", "Hcircumflex",
+ "\uF768", "Hsmall",
+ "\uF6CF", "Hungarumlaut",
+ "\uF6F8", "Hungarumlautsmall",
+ "\u0049", "I",
+ "\u0132", "IJ",
+ "\u00CD", "Iacute",
+ "\uF7ED", "Iacutesmall",
+ "\u012C", "Ibreve",
+ "\u00CE", "Icircumflex",
+ "\uF7EE", "Icircumflexsmall",
+ "\u00CF", "Idieresis",
+ "\uF7EF", "Idieresissmall",
+ "\u0130", "Idotaccent",
+ "\u2111", "Ifraktur",
+ "\u00CC", "Igrave",
+ "\uF7EC", "Igravesmall",
+ "\u012A", "Imacron",
+ "\u012E", "Iogonek",
+ "\u0399", "Iota",
+ "\u03AA", "Iotadieresis",
+ "\u038A", "Iotatonos",
+ "\uF769", "Ismall",
+ "\u0128", "Itilde",
+ "\u004A", "J",
+ "\u0134", "Jcircumflex",
+ "\uF76A", "Jsmall",
+ "\u004B", "K",
+ "\u039A", "Kappa",
+ "\u0136", "Kcommaaccent",
+ "\uF76B", "Ksmall",
+ "\u004C", "L",
+ "\uF6BF", "LL",
+ "\u0139", "Lacute",
+ "\u039B", "Lambda",
+ "\u013D", "Lcaron",
+ "\u013B", "Lcommaaccent",
+ "\u013F", "Ldot",
+ "\u0141", "Lslash",
+ "\uF6F9", "Lslashsmall",
+ "\uF76C", "Lsmall",
+ "\u004D", "M",
+ "\uF6D0", "Macron",
+ "\uF7AF", "Macronsmall",
+ "\uF76D", "Msmall",
+ "\u039C", "Mu",
+ "\u004E", "N",
+ "\u0143", "Nacute",
+ "\u0147", "Ncaron",
+ "\u0145", "Ncommaaccent",
+ "\uF76E", "Nsmall",
+ "\u00D1", "Ntilde",
+ "\uF7F1", "Ntildesmall",
+ "\u039D", "Nu",
+ "\u004F", "O",
+ "\u0152", "OE",
+ "\uF6FA", "OEsmall",
+ "\u00D3", "Oacute",
+ "\uF7F3", "Oacutesmall",
+ "\u014E", "Obreve",
+ "\u00D4", "Ocircumflex",
+ "\uF7F4", "Ocircumflexsmall",
+ "\u00D6", "Odieresis",
+ "\uF7F6", "Odieresissmall",
+ "\uF6FB", "Ogoneksmall",
+ "\u00D2", "Ograve",
+ "\uF7F2", "Ogravesmall",
+ "\u01A0", "Ohorn",
+ "\u0150", "Ohungarumlaut",
+ "\u014C", "Omacron",
+ "\u2126", "Omega",
+ "\u03A9", "Omega",
+ "\u038F", "Omegatonos",
+ "\u039F", "Omicron",
+ "\u038C", "Omicrontonos",
+ "\u00D8", "Oslash",
+ "\u01FE", "Oslashacute",
+ "\uF7F8", "Oslashsmall",
+ "\uF76F", "Osmall",
+ "\u00D5", "Otilde",
+ "\uF7F5", "Otildesmall",
+ "\u0050", "P",
+ "\u03A6", "Phi",
+ "\u03A0", "Pi",
+ "\u03A8", "Psi",
+ "\uF770", "Psmall",
+ "\u0051", "Q",
+ "\uF771", "Qsmall",
+ "\u0052", "R",
+ "\u0154", "Racute",
+ "\u0158", "Rcaron",
+ "\u0156", "Rcommaaccent",
+ "\u211C", "Rfraktur",
+ "\u03A1", "Rho",
+ "\uF6FC", "Ringsmall",
+ "\uF772", "Rsmall",
+ "\u0053", "S",
+ "\u250C", "SF010000",
+ "\u2514", "SF020000",
+ "\u2510", "SF030000",
+ "\u2518", "SF040000",
+ "\u253C", "SF050000",
+ "\u252C", "SF060000",
+ "\u2534", "SF070000",
+ "\u251C", "SF080000",
+ "\u2524", "SF090000",
+ "\u2500", "SF100000",
+ "\u2502", "SF110000",
+ "\u2561", "SF190000",
+ "\u2562", "SF200000",
+ "\u2556", "SF210000",
+ "\u2555", "SF220000",
+ "\u2563", "SF230000",
+ "\u2551", "SF240000",
+ "\u2557", "SF250000",
+ "\u255D", "SF260000",
+ "\u255C", "SF270000",
+ "\u255B", "SF280000",
+ "\u255E", "SF360000",
+ "\u255F", "SF370000",
+ "\u255A", "SF380000",
+ "\u2554", "SF390000",
+ "\u2569", "SF400000",
+ "\u2566", "SF410000",
+ "\u2560", "SF420000",
+ "\u2550", "SF430000",
+ "\u256C", "SF440000",
+ "\u2567", "SF450000",
+ "\u2568", "SF460000",
+ "\u2564", "SF470000",
+ "\u2565", "SF480000",
+ "\u2559", "SF490000",
+ "\u2558", "SF500000",
+ "\u2552", "SF510000",
+ "\u2553", "SF520000",
+ "\u256B", "SF530000",
+ "\u256A", "SF540000",
+ "\u015A", "Sacute",
+ "\u0160", "Scaron",
+ "\uF6FD", "Scaronsmall",
+ "\u015E", "Scedilla",
+ "\uF6C1", "Scedilla",
+ "\u015C", "Scircumflex",
+ "\u0218", "Scommaaccent",
+ "\u03A3", "Sigma",
+ "\uF773", "Ssmall",
+ "\u0054", "T",
+ "\u03A4", "Tau",
+ "\u0166", "Tbar",
+ "\u0164", "Tcaron",
+ "\u0162", "Tcommaaccent",
+ "\u021A", "Tcommaaccent",
+ "\u0398", "Theta",
+ "\u00DE", "Thorn",
+ "\uF7FE", "Thornsmall",
+ "\uF6FE", "Tildesmall",
+ "\uF774", "Tsmall",
+ "\u0055", "U",
+ "\u00DA", "Uacute",
+ "\uF7FA", "Uacutesmall",
+ "\u016C", "Ubreve",
+ "\u00DB", "Ucircumflex",
+ "\uF7FB", "Ucircumflexsmall",
+ "\u00DC", "Udieresis",
+ "\uF7FC", "Udieresissmall",
+ "\u00D9", "Ugrave",
+ "\uF7F9", "Ugravesmall",
+ "\u01AF", "Uhorn",
+ "\u0170", "Uhungarumlaut",
+ "\u016A", "Umacron",
+ "\u0172", "Uogonek",
+ "\u03A5", "Upsilon",
+ "\u03D2", "Upsilon1",
+ "\u03AB", "Upsilondieresis",
+ "\u038E", "Upsilontonos",
+ "\u016E", "Uring",
+ "\uF775", "Usmall",
+ "\u0168", "Utilde",
+ "\u0056", "V",
+ "\uF776", "Vsmall",
+ "\u0057", "W",
+ "\u1E82", "Wacute",
+ "\u0174", "Wcircumflex",
+ "\u1E84", "Wdieresis",
+ "\u1E80", "Wgrave",
+ "\uF777", "Wsmall",
+ "\u0058", "X",
+ "\u039E", "Xi",
+ "\uF778", "Xsmall",
+ "\u0059", "Y",
+ "\u00DD", "Yacute",
+ "\uF7FD", "Yacutesmall",
+ "\u0176", "Ycircumflex",
+ "\u0178", "Ydieresis",
+ "\uF7FF", "Ydieresissmall",
+ "\u1EF2", "Ygrave",
+ "\uF779", "Ysmall",
+ "\u005A", "Z",
+ "\u0179", "Zacute",
+ "\u017D", "Zcaron",
+ "\uF6FF", "Zcaronsmall",
+ "\u017B", "Zdotaccent",
+ "\u0396", "Zeta",
+ "\uF77A", "Zsmall",
+ "\u0061", "a",
+ "\u00E1", "aacute",
+ "\u0103", "abreve",
+ "\u00E2", "acircumflex",
+ "\u00B4", "acute",
+ "\u0301", "acutecomb",
+ "\u00E4", "adieresis",
+ "\u00E6", "ae",
+ "\u01FD", "aeacute",
+ "\u2015", "afii00208",
+ "\u0410", "afii10017",
+ "\u0411", "afii10018",
+ "\u0412", "afii10019",
+ "\u0413", "afii10020",
+ "\u0414", "afii10021",
+ "\u0415", "afii10022",
+ "\u0401", "afii10023",
+ "\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",
+ "\u0490", "afii10050",
+ "\u0402", "afii10051",
+ "\u0403", "afii10052",
+ "\u0404", "afii10053",
+ "\u0405", "afii10054",
+ "\u0406", "afii10055",
+ "\u0407", "afii10056",
+ "\u0408", "afii10057",
+ "\u0409", "afii10058",
+ "\u040A", "afii10059",
+ "\u040B", "afii10060",
+ "\u040C", "afii10061",
+ "\u040E", "afii10062",
+ "\uF6C4", "afii10063",
+ "\uF6C5", "afii10064",
+ "\u0430", "afii10065",
+ "\u0431", "afii10066",
+ "\u0432", "afii10067",
+ "\u0433", "afii10068",
+ "\u0434", "afii10069",
+ "\u0435", "afii10070",
+ "\u0451", "afii10071",
+ "\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",
+ "\u0491", "afii10098",
+ "\u0452", "afii10099",
+ "\u0453", "afii10100",
+ "\u0454", "afii10101",
+ "\u0455", "afii10102",
+ "\u0456", "afii10103",
+ "\u0457", "afii10104",
+ "\u0458", "afii10105",
+ "\u0459", "afii10106",
+ "\u045A", "afii10107",
+ "\u045B", "afii10108",
+ "\u045C", "afii10109",
+ "\u045E", "afii10110",
+ "\u040F", "afii10145",
+ "\u0462", "afii10146",
+ "\u0472", "afii10147",
+ "\u0474", "afii10148",
+ "\uF6C6", "afii10192",
+ "\u045F", "afii10193",
+ "\u0463", "afii10194",
+ "\u0473", "afii10195",
+ "\u0475", "afii10196",
+ "\uF6C7", "afii10831",
+ "\uF6C8", "afii10832",
+ "\u04D9", "afii10846",
+ "\u200E", "afii299",
+ "\u200F", "afii300",
+ "\u200D", "afii301",
+ "\u066A", "afii57381",
+ "\u060C", "afii57388",
+ "\u0660", "afii57392",
+ "\u0661", "afii57393",
+ "\u0662", "afii57394",
+ "\u0663", "afii57395",
+ "\u0664", "afii57396",
+ "\u0665", "afii57397",
+ "\u0666", "afii57398",
+ "\u0667", "afii57399",
+ "\u0668", "afii57400",
+ "\u0669", "afii57401",
+ "\u061B", "afii57403",
+ "\u061F", "afii57407",
+ "\u0621", "afii57409",
+ "\u0622", "afii57410",
+ "\u0623", "afii57411",
+ "\u0624", "afii57412",
+ "\u0625", "afii57413",
+ "\u0626", "afii57414",
+ "\u0627", "afii57415",
+ "\u0628", "afii57416",
+ "\u0629", "afii57417",
+ "\u062A", "afii57418",
+ "\u062B", "afii57419",
+ "\u062C", "afii57420",
+ "\u062D", "afii57421",
+ "\u062E", "afii57422",
+ "\u062F", "afii57423",
+ "\u0630", "afii57424",
+ "\u0631", "afii57425",
+ "\u0632", "afii57426",
+ "\u0633", "afii57427",
+ "\u0634", "afii57428",
+ "\u0635", "afii57429",
+ "\u0636", "afii57430",
+ "\u0637", "afii57431",
+ "\u0638", "afii57432",
+ "\u0639", "afii57433",
+ "\u063A", "afii57434",
+ "\u0640", "afii57440",
+ "\u0641", "afii57441",
+ "\u0642", "afii57442",
+ "\u0643", "afii57443",
+ "\u0644", "afii57444",
+ "\u0645", "afii57445",
+ "\u0646", "afii57446",
+ "\u0648", "afii57448",
+ "\u0649", "afii57449",
+ "\u064A", "afii57450",
+ "\u064B", "afii57451",
+ "\u064C", "afii57452",
+ "\u064D", "afii57453",
+ "\u064E", "afii57454",
+ "\u064F", "afii57455",
+ "\u0650", "afii57456",
+ "\u0651", "afii57457",
+ "\u0652", "afii57458",
+ "\u0647", "afii57470",
+ "\u06A4", "afii57505",
+ "\u067E", "afii57506",
+ "\u0686", "afii57507",
+ "\u0698", "afii57508",
+ "\u06AF", "afii57509",
+ "\u0679", "afii57511",
+ "\u0688", "afii57512",
+ "\u0691", "afii57513",
+ "\u06BA", "afii57514",
+ "\u06D2", "afii57519",
+ "\u06D5", "afii57534",
+ "\u20AA", "afii57636",
+ "\u05BE", "afii57645",
+ "\u05C3", "afii57658",
+ "\u05D0", "afii57664",
+ "\u05D1", "afii57665",
+ "\u05D2", "afii57666",
+ "\u05D3", "afii57667",
+ "\u05D4", "afii57668",
+ "\u05D5", "afii57669",
+ "\u05D6", "afii57670",
+ "\u05D7", "afii57671",
+ "\u05D8", "afii57672",
+ "\u05D9", "afii57673",
+ "\u05DA", "afii57674",
+ "\u05DB", "afii57675",
+ "\u05DC", "afii57676",
+ "\u05DD", "afii57677",
+ "\u05DE", "afii57678",
+ "\u05DF", "afii57679",
+ "\u05E0", "afii57680",
+ "\u05E1", "afii57681",
+ "\u05E2", "afii57682",
+ "\u05E3", "afii57683",
+ "\u05E4", "afii57684",
+ "\u05E5", "afii57685",
+ "\u05E6", "afii57686",
+ "\u05E7", "afii57687",
+ "\u05E8", "afii57688",
+ "\u05E9", "afii57689",
+ "\u05EA", "afii57690",
+ "\uFB2A", "afii57694",
+ "\uFB2B", "afii57695",
+ "\uFB4B", "afii57700",
+ "\uFB1F", "afii57705",
+ "\u05F0", "afii57716",
+ "\u05F1", "afii57717",
+ "\u05F2", "afii57718",
+ "\uFB35", "afii57723",
+ "\u05B4", "afii57793",
+ "\u05B5", "afii57794",
+ "\u05B6", "afii57795",
+ "\u05BB", "afii57796",
+ "\u05B8", "afii57797",
+ "\u05B7", "afii57798",
+ "\u05B0", "afii57799",
+ "\u05B2", "afii57800",
+ "\u05B1", "afii57801",
+ "\u05B3", "afii57802",
+ "\u05C2", "afii57803",
+ "\u05C1", "afii57804",
+ "\u05B9", "afii57806",
+ "\u05BC", "afii57807",
+ "\u05BD", "afii57839",
+ "\u05BF", "afii57841",
+ "\u05C0", "afii57842",
+ "\u02BC", "afii57929",
+ "\u2105", "afii61248",
+ "\u2113", "afii61289",
+ "\u2116", "afii61352",
+ "\u202C", "afii61573",
+ "\u202D", "afii61574",
+ "\u202E", "afii61575",
+ "\u200C", "afii61664",
+ "\u066D", "afii63167",
+ "\u02BD", "afii64937",
+ "\u00E0", "agrave",
+ "\u2135", "aleph",
+ "\u03B1", "alpha",
+ "\u03AC", "alphatonos",
+ "\u0101", "amacron",
+ "\u0026", "ampersand",
+ "\uF726", "ampersandsmall",
+ "\u2220", "angle",
+ "\u2329", "angleleft",
+ "\u232A", "angleright",
+ "\u0387", "anoteleia",
+ "\u0105", "aogonek",
+ "\u2248", "approxequal",
+ "\u00E5", "aring",
+ "\u01FB", "aringacute",
+ "\u2194", "arrowboth",
+ "\u21D4", "arrowdblboth",
+ "\u21D3", "arrowdbldown",
+ "\u21D0", "arrowdblleft",
+ "\u21D2", "arrowdblright",
+ "\u21D1", "arrowdblup",
+ "\u2193", "arrowdown",
+ "\uF8E7", "arrowhorizex",
+ "\u2190", "arrowleft",
+ "\u2192", "arrowright",
+ "\u2191", "arrowup",
+ "\u2195", "arrowupdn",
+ "\u21A8", "arrowupdnbse",
+ "\uF8E6", "arrowvertex",
+ "\u005E", "asciicircum",
+ "\u007E", "asciitilde",
+ "\u002A", "asterisk",
+ "\u2217", "asteriskmath",
+ "\uF6E9", "asuperior",
+ "\u0040", "at",
+ "\u00E3", "atilde",
+ "\u0062", "b",
+ //"\u005C", "backslash",
+ "\\", "backslash",
+ "\u007C", "bar",
+ "\u03B2", "beta",
+ "\u2588", "block",
+ "\uF8F4", "braceex",
+ "\u007B", "braceleft",
+ "\uF8F3", "braceleftbt",
+ "\uF8F2", "braceleftmid",
+ "\uF8F1", "bracelefttp",
+ "\u007D", "braceright",
+ "\uF8FE", "bracerightbt",
+ "\uF8FD", "bracerightmid",
+ "\uF8FC", "bracerighttp",
+ "\u005B", "bracketleft",
+ "\uF8F0", "bracketleftbt",
+ "\uF8EF", "bracketleftex",
+ "\uF8EE", "bracketlefttp",
+ "\u005D", "bracketright",
+ "\uF8FB", "bracketrightbt",
+ "\uF8FA", "bracketrightex",
+ "\uF8F9", "bracketrighttp",
+ "\u02D8", "breve",
+ "\u00A6", "brokenbar",
+ "\uF6EA", "bsuperior",
+ "\u2022", "bullet",
+ "\u0063", "c",
+ "\u0107", "cacute",
+ "\u02C7", "caron",
+ "\u21B5", "carriagereturn",
+ "\u010D", "ccaron",
+ "\u00E7", "ccedilla",
+ "\u0109", "ccircumflex",
+ "\u010B", "cdotaccent",
+ "\u00B8", "cedilla",
+ "\u00A2", "cent",
+ "\uF6DF", "centinferior",
+ "\uF7A2", "centoldstyle",
+ "\uF6E0", "centsuperior",
+ "\u03C7", "chi",
+ "\u25CB", "circle",
+ "\u2297", "circlemultiply",
+ "\u2295", "circleplus",
+ "\u02C6", "circumflex",
+ "\u2663", "club",
+ "\u003A", "colon",
+ "\u20A1", "colonmonetary",
+ "\u002C", "comma",
+ "\uF6C3", "commaaccent",
+ "\uF6E1", "commainferior",
+ "\uF6E2", "commasuperior",
+ "\u2245", "congruent",
+ "\u00A9", "copyright",
+ "\uF8E9", "copyrightsans",
+ "\uF6D9", "copyrightserif",
+ "\u00A4", "currency",
+ "\uF6D1", "cyrBreve",
+ "\uF6D2", "cyrFlex",
+ "\uF6D4", "cyrbreve",
+ "\uF6D5", "cyrflex",
+ "\u0064", "d",
+ "\u2020", "dagger",
+ "\u2021", "daggerdbl",
+ "\uF6D3", "dblGrave",
+ "\uF6D6", "dblgrave",
+ "\u010F", "dcaron",
+ "\u0111", "dcroat",
+ "\u00B0", "degree",
+ "\u03B4", "delta",
+ "\u2666", "diamond",
+ "\u00A8", "dieresis",
+ "\uF6D7", "dieresisacute",
+ "\uF6D8", "dieresisgrave",
+ "\u0385", "dieresistonos",
+ "\u00F7", "divide",
+ "\u2593", "dkshade",
+ "\u2584", "dnblock",
+ "\u0024", "dollar",
+ "\uF6E3", "dollarinferior",
+ "\uF724", "dollaroldstyle",
+ "\uF6E4", "dollarsuperior",
+ "\u20AB", "dong",
+ "\u02D9", "dotaccent",
+ "\u0323", "dotbelowcomb",
+ "\u0131", "dotlessi",
+ "\uF6BE", "dotlessj",
+ "\u22C5", "dotmath",
+ "\uF6EB", "dsuperior",
+ "\u0065", "e",
+ "\u00E9", "eacute",
+ "\u0115", "ebreve",
+ "\u011B", "ecaron",
+ "\u00EA", "ecircumflex",
+ "\u00EB", "edieresis",
+ "\u0117", "edotaccent",
+ "\u00E8", "egrave",
+ "\u0038", "eight",
+ "\u2088", "eightinferior",
+ "\uF738", "eightoldstyle",
+ "\u2078", "eightsuperior",
+ "\u2208", "element",
+ "\u2026", "ellipsis",
+ "\u0113", "emacron",
+ "\u2014", "emdash",
+ "\u2205", "emptyset",
+ "\u2013", "endash",
+ "\u014B", "eng",
+ "\u0119", "eogonek",
+ "\u03B5", "epsilon",
+ "\u03AD", "epsilontonos",
+ "\u003D", "equal",
+ "\u2261", "equivalence",
+ "\u212E", "estimated",
+ "\uF6EC", "esuperior",
+ "\u03B7", "eta",
+ "\u03AE", "etatonos",
+ "\u00F0", "eth",
+ "\u0021", "exclam",
+ "\u203C", "exclamdbl",
+ "\u00A1", "exclamdown",
+ "\uF7A1", "exclamdownsmall",
+ "\uF721", "exclamsmall",
+ "\u2203", "existential",
+ "\u0066", "f",
+ "\u2640", "female",
+ "\uFB00", "ff",
+ "\uFB03", "ffi",
+ "\uFB04", "ffl",
+ "\uFB01", "fi",
+ "\u2012", "figuredash",
+ "\u25A0", "filledbox",
+ "\u25AC", "filledrect",
+ "\u0035", "five",
+ "\u215D", "fiveeighths",
+ "\u2085", "fiveinferior",
+ "\uF735", "fiveoldstyle",
+ "\u2075", "fivesuperior",
+ "\uFB02", "fl",
+ "\u0192", "florin",
+ "\u0034", "four",
+ "\u2084", "fourinferior",
+ "\uF734", "fouroldstyle",
+ "\u2074", "foursuperior",
+ "\u2044", "fraction",
+ "\u2215", "fraction",
+ "\u20A3", "franc",
+ "\u0067", "g",
+ "\u03B3", "gamma",
+ "\u011F", "gbreve",
+ "\u01E7", "gcaron",
+ "\u011D", "gcircumflex",
+ "\u0123", "gcommaaccent",
+ "\u0121", "gdotaccent",
+ "\u00DF", "germandbls",
+ "\u2207", "gradient",
+ "\u0060", "grave",
+ "\u0300", "gravecomb",
+ "\u003E", "greater",
+ "\u2265", "greaterequal",
+ "\u00AB", "guillemotleft",
+ "\u00BB", "guillemotright",
+ "\u2039", "guilsinglleft",
+ "\u203A", "guilsinglright",
+ "\u0068", "h",
+ "\u0127", "hbar",
+ "\u0125", "hcircumflex",
+ "\u2665", "heart",
+ "\u0309", "hookabovecomb",
+ "\u2302", "house",
+ "\u02DD", "hungarumlaut",
+ "\u002D", "hyphen",
+ "\u00AD", "hyphen",
+ "\uF6E5", "hypheninferior",
+ "\uF6E6", "hyphensuperior",
+ "\u0069", "i",
+ "\u00ED", "iacute",
+ "\u012D", "ibreve",
+ "\u00EE", "icircumflex",
+ "\u00EF", "idieresis",
+ "\u00EC", "igrave",
+ "\u0133", "ij",
+ "\u012B", "imacron",
+ "\u221E", "infinity",
+ "\u222B", "integral",
+ "\u2321", "integralbt",
+ "\uF8F5", "integralex",
+ "\u2320", "integraltp",
+ "\u2229", "intersection",
+ "\u25D8", "invbullet",
+ "\u25D9", "invcircle",
+ "\u263B", "invsmileface",
+ "\u012F", "iogonek",
+ "\u03B9", "iota",
+ "\u03CA", "iotadieresis",
+ "\u0390", "iotadieresistonos",
+ "\u03AF", "iotatonos",
+ "\uF6ED", "isuperior",
+ "\u0129", "itilde",
+ "\u006A", "j",
+ "\u0135", "jcircumflex",
+ "\u006B", "k",
+ "\u03BA", "kappa",
+ "\u0137", "kcommaaccent",
+ "\u0138", "kgreenlandic",
+ "\u006C", "l",
+ "\u013A", "lacute",
+ "\u03BB", "lambda",
+ "\u013E", "lcaron",
+ "\u013C", "lcommaaccent",
+ "\u0140", "ldot",
+ "\u003C", "less",
+ "\u2264", "lessequal",
+ "\u258C", "lfblock",
+ "\u20A4", "lira",
+ "\uF6C0", "ll",
+ "\u2227", "logicaland",
+ "\u00AC", "logicalnot",
+ "\u2228", "logicalor",
+ "\u017F", "longs",
+ "\u25CA", "lozenge",
+ "\u0142", "lslash",
+ "\uF6EE", "lsuperior",
+ "\u2591", "ltshade",
+ "\u006D", "m",
+ "\u00AF", "macron",
+ "\u02C9", "macron",
+ "\u2642", "male",
+ "\u2212", "minus",
+ "\u2032", "minute",
+ "\uF6EF", "msuperior",
+ "\u00B5", "mu",
+ "\u03BC", "mu",
+ "\u00D7", "multiply",
+ "\u266A", "musicalnote",
+ "\u266B", "musicalnotedbl",
+ "\u006E", "n",
+ "\u0144", "nacute",
+ "\u0149", "napostrophe",
+ "\u0148", "ncaron",
+ "\u0146", "ncommaaccent",
+ "\u0039", "nine",
+ "\u2089", "nineinferior",
+ "\uF739", "nineoldstyle",
+ "\u2079", "ninesuperior",
+ "\u2209", "notelement",
+ "\u2260", "notequal",
+ "\u2284", "notsubset",
+ "\u207F", "nsuperior",
+ "\u00F1", "ntilde",
+ "\u03BD", "nu",
+ "\u0023", "numbersign",
+ "\u006F", "o",
+ "\u00F3", "oacute",
+ "\u014F", "obreve",
+ "\u00F4", "ocircumflex",
+ "\u00F6", "odieresis",
+ "\u0153", "oe",
+ "\u02DB", "ogonek",
+ "\u00F2", "ograve",
+ "\u01A1", "ohorn",
+ "\u0151", "ohungarumlaut",
+ "\u014D", "omacron",
+ "\u03C9", "omega",
+ "\u03D6", "omega1",
+ "\u03CE", "omegatonos",
+ "\u03BF", "omicron",
+ "\u03CC", "omicrontonos",
+ "\u0031", "one",
+ "\u2024", "onedotenleader",
+ "\u215B", "oneeighth",
+ "\uF6DC", "onefitted",
+ "\u00BD", "onehalf",
+ "\u2081", "oneinferior",
+ "\uF731", "oneoldstyle",
+ "\u00BC", "onequarter",
+ "\u00B9", "onesuperior",
+ "\u2153", "onethird",
+ "\u25E6", "openbullet",
+ "\u00AA", "ordfeminine",
+ "\u00BA", "ordmasculine",
+ "\u221F", "orthogonal",
+ "\u00F8", "oslash",
+ "\u01FF", "oslashacute",
+ "\uF6F0", "osuperior",
+ "\u00F5", "otilde",
+ "\u0070", "p",
+ "\u00B6", "paragraph",
+ "\u0028", "parenleft",
+ "\uF8ED", "parenleftbt",
+ "\uF8EC", "parenleftex",
+ "\u208D", "parenleftinferior",
+ "\u207D", "parenleftsuperior",
+ "\uF8EB", "parenlefttp",
+ "\u0029", "parenright",
+ "\uF8F8", "parenrightbt",
+ "\uF8F7", "parenrightex",
+ "\u208E", "parenrightinferior",
+ "\u207E", "parenrightsuperior",
+ "\uF8F6", "parenrighttp",
+ "\u2202", "partialdiff",
+ "\u0025", "percent",
+ "\u002E", "period",
+ "\u00B7", "periodcentered",
+ "\u2219", "periodcentered",
+ "\uF6E7", "periodinferior",
+ "\uF6E8", "periodsuperior",
+ "\u22A5", "perpendicular",
+ "\u2030", "perthousand",
+ "\u20A7", "peseta",
+ "\u03C6", "phi",
+ "\u03D5", "phi1",
+ "\u03C0", "pi",
+ "\u002B", "plus",
+ "\u00B1", "plusminus",
+ "\u211E", "prescription",
+ "\u220F", "product",
+ "\u2282", "propersubset",
+ "\u2283", "propersuperset",
+ "\u221D", "proportional",
+ "\u03C8", "psi",
+ "\u0071", "q",
+ "\u003F", "question",
+ "\u00BF", "questiondown",
+ "\uF7BF", "questiondownsmall",
+ "\uF73F", "questionsmall",
+ "\"", "quotedbl",
+// "\u0022", "quotedbl",
+ "\u201E", "quotedblbase",
+ "\u201C", "quotedblleft",
+ "\u201D", "quotedblright",
+ "\u2018", "quoteleft",
+ "\u201B", "quotereversed",
+ "\u2019", "quoteright",
+ "\u201A", "quotesinglbase",
+ "\u0027", "quotesingle",
+ "\u0072", "r",
+ "\u0155", "racute",
+ "\u221A", "radical",
+ "\uF8E5", "radicalex",
+ "\u0159", "rcaron",
+ "\u0157", "rcommaaccent",
+ "\u2286", "reflexsubset",
+ "\u2287", "reflexsuperset",
+ "\u00AE", "registered",
+ "\uF8E8", "registersans",
+ "\uF6DA", "registerserif",
+ "\u2310", "revlogicalnot",
+ "\u03C1", "rho",
+ "\u02DA", "ring",
+ "\uF6F1", "rsuperior",
+ "\u2590", "rtblock",
+ "\uF6DD", "rupiah",
+ "\u0073", "s",
+ "\u015B", "sacute",
+ "\u0161", "scaron",
+ "\u015F", "scedilla",
+ "\uF6C2", "scedilla",
+ "\u015D", "scircumflex",
+ "\u0219", "scommaaccent",
+ "\u2033", "second",
+ "\u00A7", "section",
+ "\u003B", "semicolon",
+ "\u0037", "seven",
+ "\u215E", "seveneighths",
+ "\u2087", "seveninferior",
+ "\uF737", "sevenoldstyle",
+ "\u2077", "sevensuperior",
+ "\u2592", "shade",
+ "\u03C3", "sigma",
+ "\u03C2", "sigma1",
+ "\u223C", "similar",
+ "\u0036", "six",
+ "\u2086", "sixinferior",
+ "\uF736", "sixoldstyle",
+ "\u2076", "sixsuperior",
+ "\u002F", "slash",
+ "\u263A", "smileface",
+ "\u0020", "space",
+ "\u00A0", "space",
+ "\u2660", "spade",
+ "\uF6F2", "ssuperior",
+ "\u00A3", "sterling",
+ "\u220B", "suchthat",
+ "\u2211", "summation",
+ "\u263C", "sun",
+ "\u0074", "t",
+ "\u03C4", "tau",
+ "\u0167", "tbar",
+ "\u0165", "tcaron",
+ "\u0163", "tcommaaccent",
+ "\u021B", "tcommaaccent",
+ "\u2234", "therefore",
+ "\u03B8", "theta",
+ "\u03D1", "theta1",
+ "\u00FE", "thorn",
+ "\u0033", "three",
+ "\u215C", "threeeighths",
+ "\u2083", "threeinferior",
+ "\uF733", "threeoldstyle",
+ "\u00BE", "threequarters",
+ "\uF6DE", "threequartersemdash",
+ "\u00B3", "threesuperior",
+ "\u02DC", "tilde",
+ "\u0303", "tildecomb",
+ "\u0384", "tonos",
+ "\u2122", "trademark",
+ "\uF8EA", "trademarksans",
+ "\uF6DB", "trademarkserif",
+ "\u25BC", "triagdn",
+ "\u25C4", "triaglf",
+ "\u25BA", "triagrt",
+ "\u25B2", "triagup",
+ "\uF6F3", "tsuperior",
+ "\u0032", "two",
+ "\u2025", "twodotenleader",
+ "\u2082", "twoinferior",
+ "\uF732", "twooldstyle",
+ "\u00B2", "twosuperior",
+ "\u2154", "twothirds",
+ "\u0075", "u",
+ "\u00FA", "uacute",
+ "\u016D", "ubreve",
+ "\u00FB", "ucircumflex",
+ "\u00FC", "udieresis",
+ "\u00F9", "ugrave",
+ "\u01B0", "uhorn",
+ "\u0171", "uhungarumlaut",
+ "\u016B", "umacron",
+ "\u005F", "underscore",
+ "\u2017", "underscoredbl",
+ "\u222A", "union",
+ "\u2200", "universal",
+ "\u0173", "uogonek",
+ "\u2580", "upblock",
+ "\u03C5", "upsilon",
+ "\u03CB", "upsilondieresis",
+ "\u03B0", "upsilondieresistonos",
+ "\u03CD", "upsilontonos",
+ "\u016F", "uring",
+ "\u0169", "utilde",
+ "\u0076", "v",
+ "\u0077", "w",
+ "\u1E83", "wacute",
+ "\u0175", "wcircumflex",
+ "\u1E85", "wdieresis",
+ "\u2118", "weierstrass",
+ "\u1E81", "wgrave",
+ "\u0078", "x",
+ "\u03BE", "xi",
+ "\u0079", "y",
+ "\u00FD", "yacute",
+ "\u0177", "ycircumflex",
+ "\u00FF", "ydieresis",
+ "\u00A5", "yen",
+ "\u1EF3", "ygrave",
+ "\u007A", "z",
+ "\u017A", "zacute",
+ "\u017E", "zcaron",
+ "\u017C", "zdotaccent",
+ "\u0030", "zero",
+ "\u2080", "zeroinferior",
+ "\uF730", "zerooldstyle",
+ "\u2070", "zerosuperior",
+ "\u03B6", "zeta"
+ };
+
+ /**
+ * Return the glyphname from a character,
+ * eg, charToGlyphName('\\') returns "backslash"
+ *
+ * @param ch glyph to evaluate
+ * @return the name of the glyph
+ */
+ public static final String charToGlyphName(char ch) {
+ return stringToGlyph(new Character(ch).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
+ * TODO: Improve method names
+ */
+ public static final 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
+ */
+ 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];
+ }
+ }
+ return "";
+ }
+
+}
+
diff --git a/TempNewImagePackage/src/java/org/apache/xmlgraphics/fonts/package.html b/TempNewImagePackage/src/java/org/apache/xmlgraphics/fonts/package.html
new file mode 100644
index 0000000..9643a2a
--- /dev/null
+++ b/TempNewImagePackage/src/java/org/apache/xmlgraphics/fonts/package.html
@@ -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>
\ No newline at end of file
diff --git a/TempNewImagePackage/src/java/org/apache/xmlgraphics/image/GraphicsUtil.java b/TempNewImagePackage/src/java/org/apache/xmlgraphics/image/GraphicsUtil.java
new file mode 100644
index 0000000..412f421
--- /dev/null
+++ b/TempNewImagePackage/src/java/org/apache/xmlgraphics/image/GraphicsUtil.java
@@ -0,0 +1,1111 @@
+/*
+ * 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$ */
+
+package org.apache.xmlgraphics.image;
+
+import java.awt.Point;
+import java.awt.Rectangle;
+import java.awt.color.ColorSpace;
+import java.awt.geom.AffineTransform;
+import java.awt.image.BufferedImage;
+import java.awt.image.ColorModel;
+import java.awt.image.ComponentSampleModel;
+import java.awt.image.DataBuffer;
+import java.awt.image.DataBufferByte;
+import java.awt.image.DataBufferInt;
+import java.awt.image.DataBufferShort;
+import java.awt.image.DataBufferUShort;
+import java.awt.image.DirectColorModel;
+import java.awt.image.Raster;
+import java.awt.image.RenderedImage;
+import java.awt.image.SampleModel;
+import java.awt.image.SinglePixelPackedSampleModel;
+import java.awt.image.WritableRaster;
+
+import org.apache.xmlgraphics.image.rendered.Any2LsRGBRed;
+import org.apache.xmlgraphics.image.rendered.Any2sRGBRed;
+import org.apache.xmlgraphics.image.rendered.BufferedImageCachableRed;
+import org.apache.xmlgraphics.image.rendered.CachableRed;
+import org.apache.xmlgraphics.image.rendered.RenderedImageCachableRed;
+
+/**
+ * Set of utility methods for Graphics.
+ * These generally bypass broken methods in Java2D or provide tweaked
+ * implementations.
+ *
+ * @author <a href="mailto:Thomas.DeWeeese@Kodak.com">Thomas DeWeese</a>
+ * @version $Id$
+ */
+public class GraphicsUtil {
+
+ public static AffineTransform IDENTITY = new AffineTransform();
+
+ /**
+ * Standard prebuilt Linear_sRGB color model with no alpha */
+ public static final ColorModel Linear_sRGB =
+ new DirectColorModel(ColorSpace.getInstance
+ (ColorSpace.CS_LINEAR_RGB), 24,
+ 0x00FF0000, 0x0000FF00,
+ 0x000000FF, 0x0, false,
+ DataBuffer.TYPE_INT);
+ /**
+ * Standard prebuilt Linear_sRGB color model with premultiplied alpha.
+ */
+ public static final ColorModel Linear_sRGB_Pre =
+ new DirectColorModel(ColorSpace.getInstance
+ (ColorSpace.CS_LINEAR_RGB), 32,
+ 0x00FF0000, 0x0000FF00,
+ 0x000000FF, 0xFF000000, true,
+ DataBuffer.TYPE_INT);
+ /**
+ * Standard prebuilt Linear_sRGB color model with unpremultiplied alpha.
+ */
+ public static final ColorModel Linear_sRGB_Unpre =
+ new DirectColorModel(ColorSpace.getInstance
+ (ColorSpace.CS_LINEAR_RGB), 32,
+ 0x00FF0000, 0x0000FF00,
+ 0x000000FF, 0xFF000000, false,
+ DataBuffer.TYPE_INT);
+
+ /**
+ * Standard prebuilt sRGB color model with no alpha.
+ */
+ public static final ColorModel sRGB =
+ new DirectColorModel(ColorSpace.getInstance
+ (ColorSpace.CS_sRGB), 24,
+ 0x00FF0000, 0x0000FF00,
+ 0x000000FF, 0x0, false,
+ DataBuffer.TYPE_INT);
+ /**
+ * Standard prebuilt sRGB color model with premultiplied alpha.
+ */
+ public static final ColorModel sRGB_Pre =
+ new DirectColorModel(ColorSpace.getInstance
+ (ColorSpace.CS_sRGB), 32,
+ 0x00FF0000, 0x0000FF00,
+ 0x000000FF, 0xFF000000, true,
+ DataBuffer.TYPE_INT);
+ /**
+ * Standard prebuilt sRGB color model with unpremultiplied alpha.
+ */
+ public static final ColorModel sRGB_Unpre =
+ new DirectColorModel(ColorSpace.getInstance
+ (ColorSpace.CS_sRGB), 32,
+ 0x00FF0000, 0x0000FF00,
+ 0x000000FF, 0xFF000000, false,
+ DataBuffer.TYPE_INT);
+
+ /**
+ * Method that returns either Linear_sRGB_Pre or Linear_sRGB_UnPre
+ * based on premult flag.
+ * @param premult True if the ColorModel should have premultiplied alpha.
+ * @return a ColorMdoel with Linear sRGB colorSpace and
+ * the alpha channel set in accordance with
+ * <tt>premult</tt>
+ */
+ public static ColorModel makeLinear_sRGBCM(boolean premult) {
+ return premult ? Linear_sRGB_Pre : Linear_sRGB_Unpre;
+ }
+
+ /**
+ * Constructs a BufferedImage with a linear sRGB colorModel, and alpha.
+ * @param width The desired width of the BufferedImage
+ * @param height The desired height of the BufferedImage
+ * @param premult The desired state of alpha premultiplied
+ * @return The requested BufferedImage.
+ */
+ public static BufferedImage makeLinearBufferedImage(int width,
+ int height,
+ boolean premult) {
+ ColorModel cm = makeLinear_sRGBCM(premult);
+ WritableRaster wr = cm.createCompatibleWritableRaster(width, height);
+ return new BufferedImage(cm, wr, premult, null);
+ }
+
+ /**
+ * This method will return a CacheableRed that has it's data in
+ * the linear sRGB colorspace. If <tt>src</tt> is already in
+ * linear sRGB then this method does nothing and returns <tt>src</tt>.
+ * Otherwise it creates a transform that will convert
+ * <tt>src</tt>'s output to linear sRGB and returns that CacheableRed.
+ *
+ * @param src The image to convert to linear sRGB.
+ * @return An equivilant image to <tt>src</tt> who's data is in
+ * linear sRGB.
+ */
+ public static CachableRed convertToLsRGB(CachableRed src) {
+ ColorModel cm = src.getColorModel();
+ ColorSpace cs = cm.getColorSpace();
+ if (cs == ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB))
+ return src;
+
+ return new Any2LsRGBRed(src);
+ }
+
+ /**
+ * This method will return a CacheableRed that has it's data in
+ * the sRGB colorspace. If <tt>src</tt> is already in
+ * sRGB then this method does nothing and returns <tt>src</tt>.
+ * Otherwise it creates a transform that will convert
+ * <tt>src</tt>'s output to sRGB and returns that CacheableRed.
+ *
+ * @param src The image to convert to sRGB.
+ * @return An equivilant image to <tt>src</tt> who's data is in sRGB.
+ */
+ public static CachableRed convertTosRGB(CachableRed src) {
+ ColorModel cm = src.getColorModel();
+ ColorSpace cs = cm.getColorSpace();
+ if (cs == ColorSpace.getInstance(ColorSpace.CS_sRGB))
+ return src;
+
+ return new Any2sRGBRed(src);
+ }
+
+ /**
+ * Convertes any RenderedImage to a CacheableRed. <p>
+ * If <tt>ri</tt> is already a CacheableRed it casts it down and
+ * returns it.<p>
+ *
+ * In cases where <tt>ri</tt> is not already a CacheableRed it
+ * wraps <tt>ri</tt> with a helper class. The wrapped
+ * CacheableRed "Pretends" that it has no sources since it has no
+ * way of inteligently handling the dependency/dirty region calls
+ * if it exposed the source.
+ * @param ri The RenderedImage to convert.
+ * @return a CacheableRed that contains the same data as ri.
+ */
+ public static CachableRed wrap(RenderedImage ri) {
+ if (ri instanceof CachableRed)
+ return (CachableRed) ri;
+ if (ri instanceof BufferedImage)
+ return new BufferedImageCachableRed((BufferedImage)ri);
+ return new RenderedImageCachableRed(ri);
+ }
+
+ /**
+ * An internal optimized version of copyData designed to work on
+ * Integer packed data with a SinglePixelPackedSampleModel. Only
+ * the region of overlap between src and dst is copied.
+ *
+ * Calls to this should be preflighted with is_INT_PACK_Data
+ * on both src and dest (requireAlpha can be false).
+ *
+ * @param src The source of the data
+ * @param dst The destination for the data.
+ */
+ public static void copyData_INT_PACK(Raster src, WritableRaster dst) {
+ // System.out.println("Fast copyData");
+ int x0 = dst.getMinX();
+ if (x0 < src.getMinX()) x0 = src.getMinX();
+
+ int y0 = dst.getMinY();
+ if (y0 < src.getMinY()) y0 = src.getMinY();
+
+ int x1 = dst.getMinX()+dst.getWidth()-1;
+ if (x1 > src.getMinX()+src.getWidth()-1)
+ x1 = src.getMinX()+src.getWidth()-1;
+
+ int y1 = dst.getMinY()+dst.getHeight()-1;
+ if (y1 > src.getMinY()+src.getHeight()-1)
+ y1 = src.getMinY()+src.getHeight()-1;
+
+ int width = x1-x0+1;
+ int height = y1-y0+1;
+
+ SinglePixelPackedSampleModel srcSPPSM;
+ srcSPPSM = (SinglePixelPackedSampleModel)src.getSampleModel();
+
+ final int srcScanStride = srcSPPSM.getScanlineStride();
+ DataBufferInt srcDB = (DataBufferInt)src.getDataBuffer();
+ final int [] srcPixels = srcDB.getBankData()[0];
+ final int srcBase =
+ (srcDB.getOffset() +
+ srcSPPSM.getOffset(x0-src.getSampleModelTranslateX(),
+ y0-src.getSampleModelTranslateY()));
+
+
+ SinglePixelPackedSampleModel dstSPPSM;
+ dstSPPSM = (SinglePixelPackedSampleModel)dst.getSampleModel();
+
+ final int dstScanStride = dstSPPSM.getScanlineStride();
+ DataBufferInt dstDB = (DataBufferInt)dst.getDataBuffer();
+ final int [] dstPixels = dstDB.getBankData()[0];
+ final int dstBase =
+ (dstDB.getOffset() +
+ dstSPPSM.getOffset(x0-dst.getSampleModelTranslateX(),
+ y0-dst.getSampleModelTranslateY()));
+
+ if ((srcScanStride == dstScanStride) &&
+ (srcScanStride == width)) {
+ // System.out.println("VERY Fast copyData");
+
+ System.arraycopy(srcPixels, srcBase, dstPixels, dstBase,
+ width*height);
+ } else if (width > 128) {
+ int srcSP = srcBase;
+ int dstSP = dstBase;
+ for (int y=0; y<height; y++) {
+ System.arraycopy(srcPixels, srcSP, dstPixels, dstSP, width);
+ srcSP += srcScanStride;
+ dstSP += dstScanStride;
+ }
+ } else {
+ for (int y=0; y<height; y++) {
+ int srcSP = srcBase+y*srcScanStride;
+ int dstSP = dstBase+y*dstScanStride;
+ for (int x=0; x<width; x++)
+ dstPixels[dstSP++] = srcPixels[srcSP++];
+ }
+ }
+ }
+
+ public static void copyData_FALLBACK(Raster src, WritableRaster dst) {
+ // System.out.println("Fallback copyData");
+
+ int x0 = dst.getMinX();
+ if (x0 < src.getMinX()) x0 = src.getMinX();
+
+ int y0 = dst.getMinY();
+ if (y0 < src.getMinY()) y0 = src.getMinY();
+
+ int x1 = dst.getMinX()+dst.getWidth()-1;
+ if (x1 > src.getMinX()+src.getWidth()-1)
+ x1 = src.getMinX()+src.getWidth()-1;
+
+ int y1 = dst.getMinY()+dst.getHeight()-1;
+ if (y1 > src.getMinY()+src.getHeight()-1)
+ y1 = src.getMinY()+src.getHeight()-1;
+
+ int width = x1-x0+1;
+ int [] data = null;
+
+ for (int y = y0; y <= y1 ; y++) {
+ data = src.getPixels(x0,y,width,1,data);
+ dst.setPixels (x0,y,width,1,data);
+ }
+ }
+
+ /**
+ * Copies data from one raster to another. Only the region of
+ * overlap between src and dst is copied. <tt>Src</tt> and
+ * <tt>Dst</tt> must have compatible SampleModels.
+ *
+ * @param src The source of the data
+ * @param dst The destination for the data.
+ */
+ public static void copyData(Raster src, WritableRaster dst) {
+ if (is_INT_PACK_Data(src.getSampleModel(), false) &&
+ is_INT_PACK_Data(dst.getSampleModel(), false)) {
+ copyData_INT_PACK(src, dst);
+ return;
+ }
+
+ copyData_FALLBACK(src, dst);
+ }
+
+ /**
+ * Creates a new raster that has a <b>copy</b> of the data in
+ * <tt>ras</tt>. This is highly optimized for speed. There is
+ * no provision for changing any aspect of the SampleModel.
+ *
+ * This method should be used when you need to change the contents
+ * of a Raster that you do not "own" (ie the result of a
+ * <tt>getData</tt> call).
+ * @param ras The Raster to copy.
+ * @return A writable copy of <tt>ras</tt>
+ */
+ public static WritableRaster copyRaster(Raster ras) {
+ return copyRaster(ras, ras.getMinX(), ras.getMinY());
+ }
+
+
+ /**
+ * Creates a new raster that has a <b>copy</b> of the data in
+ * <tt>ras</tt>. This is highly optimized for speed. There is
+ * no provision for changing any aspect of the SampleModel.
+ * However you can specify a new location for the returned raster.
+ *
+ * This method should be used when you need to change the contents
+ * of a Raster that you do not "own" (ie the result of a
+ * <tt>getData</tt> call).
+ *
+ * @param ras The Raster to copy.
+ *
+ * @param minX The x location for the upper left corner of the
+ * returned WritableRaster.
+ *
+ * @param minY The y location for the upper left corner of the
+ * returned WritableRaster.
+ *
+ * @return A writable copy of <tt>ras</tt>
+ */
+ public static WritableRaster copyRaster(Raster ras, int minX, int minY) {
+ WritableRaster ret = Raster.createWritableRaster
+ (ras.getSampleModel(),
+ new Point(0,0));
+ ret = ret.createWritableChild
+ (ras.getMinX()-ras.getSampleModelTranslateX(),
+ ras.getMinY()-ras.getSampleModelTranslateY(),
+ ras.getWidth(), ras.getHeight(),
+ minX, minY, null);
+
+ // Use System.arraycopy to copy the data between the two...
+ DataBuffer srcDB = ras.getDataBuffer();
+ DataBuffer retDB = ret.getDataBuffer();
+ if (srcDB.getDataType() != retDB.getDataType()) {
+ throw new IllegalArgumentException
+ ("New DataBuffer doesn't match original");
+ }
+ int len = srcDB.getSize();
+ int banks = srcDB.getNumBanks();
+ int [] offsets = srcDB.getOffsets();
+ for (int b=0; b< banks; b++) {
+ switch (srcDB.getDataType()) {
+ case DataBuffer.TYPE_BYTE: {
+ DataBufferByte srcDBT = (DataBufferByte)srcDB;
+ DataBufferByte retDBT = (DataBufferByte)retDB;
+ System.arraycopy(srcDBT.getData(b), offsets[b],
+ retDBT.getData(b), offsets[b], len);
+ break;
+ }
+ case DataBuffer.TYPE_INT: {
+ DataBufferInt srcDBT = (DataBufferInt)srcDB;
+ DataBufferInt retDBT = (DataBufferInt)retDB;
+ System.arraycopy(srcDBT.getData(b), offsets[b],
+ retDBT.getData(b), offsets[b], len);
+ break;
+ }
+ case DataBuffer.TYPE_SHORT: {
+ DataBufferShort srcDBT = (DataBufferShort)srcDB;
+ DataBufferShort retDBT = (DataBufferShort)retDB;
+ System.arraycopy(srcDBT.getData(b), offsets[b],
+ retDBT.getData(b), offsets[b], len);
+ break;
+ }
+ case DataBuffer.TYPE_USHORT: {
+ DataBufferUShort srcDBT = (DataBufferUShort)srcDB;
+ DataBufferUShort retDBT = (DataBufferUShort)retDB;
+ System.arraycopy(srcDBT.getData(b), offsets[b],
+ retDBT.getData(b), offsets[b], len);
+ break;
+ }
+ }
+ }
+
+ return ret;
+ }
+
+ /**
+ * Coerces <tt>ras</tt> to be writable. The returned Raster continues to
+ * reference the DataBuffer from ras, so modifications to the returned
+ * WritableRaster will be seen in ras.<p>
+ *
+ * This method should only be used if you need a WritableRaster due to
+ * an interface (such as to construct a BufferedImage), but have no
+ * intention of modifying the contents of the returned Raster. If
+ * you have any doubt about other users of the data in <tt>ras</tt>,
+ * use copyRaster (above).
+ * @param ras The raster to make writable.
+ * @return A Writable version of ras (shares DataBuffer with
+ * <tt>ras</tt>).
+ */
+ public static WritableRaster makeRasterWritable(Raster ras) {
+ return makeRasterWritable(ras, ras.getMinX(), ras.getMinY());
+ }
+
+ /**
+ * Coerces <tt>ras</tt> to be writable. The returned Raster continues to
+ * reference the DataBuffer from ras, so modifications to the returned
+ * WritableRaster will be seen in ras.<p>
+ *
+ * You can specify a new location for the returned WritableRaster, this
+ * is especially useful for constructing BufferedImages which require
+ * the Raster to be at (0,0).
+ *
+ * This method should only be used if you need a WritableRaster due to
+ * an interface (such as to construct a BufferedImage), but have no
+ * intention of modifying the contents of the returned Raster. If
+ * you have any doubt about other users of the data in <tt>ras</tt>,
+ * use copyRaster (above).
+ *
+ * @param ras The raster to make writable.
+ *
+ * @param minX The x location for the upper left corner of the
+ * returned WritableRaster.
+ *
+ * @param minY The y location for the upper left corner of the
+ * returned WritableRaster.
+ *
+ * @return A Writable version of <tT>ras</tt> with it's upper left
+ * hand coordinate set to minX, minY (shares it's DataBuffer
+ * with <tt>ras</tt>).
+ */
+ public static WritableRaster makeRasterWritable(Raster ras,
+ int minX, int minY) {
+ WritableRaster ret = Raster.createWritableRaster
+ (ras.getSampleModel(),
+ ras.getDataBuffer(),
+ new Point(0,0));
+ ret = ret.createWritableChild
+ (ras.getMinX()-ras.getSampleModelTranslateX(),
+ ras.getMinY()-ras.getSampleModelTranslateY(),
+ ras.getWidth(), ras.getHeight(),
+ minX, minY, null);
+ return ret;
+ }
+
+ /**
+ * Create a new ColorModel with it's alpha premultiplied state matching
+ * newAlphaPreMult.
+ * @param cm The ColorModel to change the alpha premult state of.
+ * @param newAlphaPreMult The new state of alpha premult.
+ * @return A new colorModel that has isAlphaPremultiplied()
+ * equal to newAlphaPreMult.
+ */
+ public static ColorModel
+ coerceColorModel(ColorModel cm, boolean newAlphaPreMult) {
+ if (cm.isAlphaPremultiplied() == newAlphaPreMult)
+ return cm;
+
+ // Easiest way to build proper colormodel for new Alpha state...
+ // Eventually this should switch on known ColorModel types and
+ // only fall back on this hack when the CM type is unknown.
+ WritableRaster wr = cm.createCompatibleWritableRaster(1,1);
+ return cm.coerceData(wr, newAlphaPreMult);
+ }
+
+ /**
+ * Coerces data within a bufferedImage to match newAlphaPreMult,
+ * Note that this can not change the colormodel of bi so you
+ *
+ * @param wr The raster to change the state of.
+ * @param cm The colormodel currently associated with data in wr.
+ * @param newAlphaPreMult The desired state of alpha Premult for raster.
+ * @return A new colormodel that matches newAlphaPreMult.
+ */
+ public static ColorModel
+ coerceData(WritableRaster wr, ColorModel cm, boolean newAlphaPreMult) {
+
+ // System.out.println("CoerceData: " + cm.isAlphaPremultiplied() +
+ // " Out: " + newAlphaPreMult);
+ if (!cm.hasAlpha())
+ // Nothing to do no alpha channel
+ return cm;
+
+ if (cm.isAlphaPremultiplied() == newAlphaPreMult)
+ // nothing to do alpha state matches...
+ return cm;
+
+ // System.out.println("CoerceData: " + wr.getSampleModel());
+
+ if (newAlphaPreMult) {
+ multiplyAlpha(wr);
+ } else {
+ divideAlpha(wr);
+ }
+
+ return coerceColorModel(cm, newAlphaPreMult);
+ }
+
+ public static void multiplyAlpha(WritableRaster wr) {
+ if (is_BYTE_COMP_Data(wr.getSampleModel()))
+ mult_BYTE_COMP_Data(wr);
+ else if (is_INT_PACK_Data(wr.getSampleModel(), true))
+ mult_INT_PACK_Data(wr);
+ else {
+ int [] pixel = null;
+ int bands = wr.getNumBands();
+ float norm = 1f/255f;
+ int x0, x1, y0, y1, a, b;
+ float alpha;
+ x0 = wr.getMinX();
+ x1 = x0+wr.getWidth();
+ y0 = wr.getMinY();
+ y1 = y0+wr.getHeight();
+ for (int y=y0; y<y1; y++)
+ for (int x=x0; x<x1; x++) {
+ pixel = wr.getPixel(x,y,pixel);
+ a = pixel[bands-1];
+ if ((a >= 0) && (a < 255)) {
+ alpha = a*norm;
+ for (b=0; b<bands-1; b++)
+ pixel[b] = (int)(pixel[b]*alpha+0.5f);
+ wr.setPixel(x,y,pixel);
+ }
+ }
+ }
+ }
+
+ public static void divideAlpha(WritableRaster wr) {
+ if (is_BYTE_COMP_Data(wr.getSampleModel()))
+ divide_BYTE_COMP_Data(wr);
+ else if (is_INT_PACK_Data(wr.getSampleModel(), true))
+ divide_INT_PACK_Data(wr);
+ else {
+ int x0, x1, y0, y1, a, b;
+ float ialpha;
+ int bands = wr.getNumBands();
+ int [] pixel = null;
+
+ x0 = wr.getMinX();
+ x1 = x0+wr.getWidth();
+ y0 = wr.getMinY();
+ y1 = y0+wr.getHeight();
+ for (int y=y0; y<y1; y++)
+ for (int x=x0; x<x1; x++) {
+ pixel = wr.getPixel(x,y,pixel);
+ a = pixel[bands-1];
+ if ((a > 0) && (a < 255)) {
+ ialpha = 255/(float)a;
+ for (b=0; b<bands-1; b++)
+ pixel[b] = (int)(pixel[b]*ialpha+0.5f);
+ wr.setPixel(x,y,pixel);
+ }
+ }
+ }
+ }
+
+ /**
+ * Copies data from one bufferedImage to another paying attention
+ * to the state of AlphaPreMultiplied.
+ *
+ * @param src The source
+ * @param dst The destination
+ */
+ public static void
+ copyData(BufferedImage src, BufferedImage dst) {
+ Rectangle srcRect = new Rectangle(0, 0,
+ src.getWidth(), src.getHeight());
+ copyData(src, srcRect, dst, new Point(0,0));
+ }
+
+
+ /**
+ * Copies data from one bufferedImage to another paying attention
+ * to the state of AlphaPreMultiplied.
+ *
+ * @param src The source
+ * @param srcRect The Rectangle of source data to be copied
+ * @param dst The destination
+ * @param destP The Place for the upper left corner of srcRect in dst.
+ */
+ public static void
+ copyData(BufferedImage src, Rectangle srcRect,
+ BufferedImage dst, Point destP) {
+
+ /*
+ if (srcCS != dstCS)
+ throw new IllegalArgumentException
+ ("Images must be in the same ColorSpace in order "+
+ "to copy Data between them");
+ */
+ boolean srcAlpha = src.getColorModel().hasAlpha();
+ boolean dstAlpha = dst.getColorModel().hasAlpha();
+
+ // System.out.println("Src has: " + srcAlpha +
+ // " is: " + src.isAlphaPremultiplied());
+ //
+ // System.out.println("Dst has: " + dstAlpha +
+ // " is: " + dst.isAlphaPremultiplied());
+
+ if (srcAlpha == dstAlpha)
+ if (!srcAlpha ||
+ src.isAlphaPremultiplied() == dst.isAlphaPremultiplied()) {
+ // They match one another so just copy everything...
+ copyData(src.getRaster(), dst.getRaster());
+ return;
+ }
+
+ // System.out.println("Using Slow CopyData");
+
+ int [] pixel = null;
+ Raster srcR = src.getRaster();
+ WritableRaster dstR = dst.getRaster();
+ int bands = dstR.getNumBands();
+
+ int dx = destP.x-srcRect.x;
+ int dy = destP.y-srcRect.y;
+
+ int w = srcRect.width;
+ int x0 = srcRect.x;
+ int y0 = srcRect.y;
+ int y1 = y0+srcRect.height-1;
+
+ if (!srcAlpha) {
+ // Src has no alpha dest does so set alpha to 1.0 everywhere.
+ // System.out.println("Add Alpha");
+ int [] oPix = new int[bands*w];
+ int out = (w*bands)-1; // The 2 skips alpha channel
+ while(out >= 0) {
+ // Fill alpha channel with 255's
+ oPix[out] = 255;
+ out -= bands;
+ }
+
+ int b, in;
+ for (int y=y0; y<=y1; y++) {
+ pixel = srcR.getPixels(x0,y,w,1,pixel);
+ in = w*(bands-1)-1;
+ out = (w*bands)-2; // The 2 skips alpha channel on last pix
+ switch (bands) {
+ case 4:
+ while(in >= 0) {
+ oPix[out--] = pixel[in--];
+ oPix[out--] = pixel[in--];
+ oPix[out--] = pixel[in--];
+ out--;
+ }
+ break;
+ default:
+ while(in >= 0) {
+ for (b=0; b<bands-1; b++)
+ oPix[out--] = pixel[in--];
+ out--;
+ }
+ }
+ dstR.setPixels(x0+dx, y+dy, w, 1, oPix);
+ }
+ } else if (dstAlpha && dst.isAlphaPremultiplied()) {
+ // Src and dest have Alpha but we need to multiply it for dst.
+ // System.out.println("Mult Case");
+ int a, b, alpha, in, fpNorm = (1<<24)/255, pt5 = 1<<23;
+ for (int y=y0; y<=y1; y++) {
+ pixel = srcR.getPixels(x0,y,w,1,pixel);
+ in=bands*w-1;
+ switch (bands) {
+ case 4:
+ while(in >= 0) {
+ a = pixel[in];
+ if (a == 255)
+ in -= 4;
+ else {
+ in--;
+ alpha = fpNorm*a;
+ pixel[in] = (pixel[in]*alpha+pt5)>>>24; in--;
+ pixel[in] = (pixel[in]*alpha+pt5)>>>24; in--;
+ pixel[in] = (pixel[in]*alpha+pt5)>>>24; in--;
+ }
+ }
+ break;
+ default:
+ while(in >= 0) {
+ a = pixel[in];
+ if (a == 255)
+ in -= bands;
+ else {
+ in--;
+ alpha = fpNorm*a;
+ for (b=0; b<bands-1; b++) {
+ pixel[in] = (pixel[in]*alpha+pt5)>>>24;
+ in--;
+ }
+ }
+ }
+ }
+ dstR.setPixels(x0+dx, y+dy, w, 1, pixel);
+ }
+ } else if (dstAlpha && !dst.isAlphaPremultiplied()) {
+ // Src and dest have Alpha but we need to divide it out for dst.
+ // System.out.println("Div Case");
+ int a, b, ialpha, in, fpNorm = 0x00FF0000, pt5 = 1<<15;
+ for (int y=y0; y<=y1; y++) {
+ pixel = srcR.getPixels(x0,y,w,1,pixel);
+ in=(bands*w)-1;
+ switch(bands) {
+ case 4:
+ while(in >= 0) {
+ a = pixel[in];
+ if ((a <= 0) || (a >= 255))
+ in -= 4;
+ else {
+ in--;
+ ialpha = fpNorm/a;
+ pixel[in] = (pixel[in]*ialpha+pt5)>>>16; in--;
+ pixel[in] = (pixel[in]*ialpha+pt5)>>>16; in--;
+ pixel[in] = (pixel[in]*ialpha+pt5)>>>16; in--;
+ }
+ }
+ break;
+ default:
+ while(in >= 0) {
+ a = pixel[in];
+ if ((a <= 0) || (a >= 255))
+ in -= bands;
+ else {
+ in--;
+ ialpha = fpNorm/a;
+ for (b=0; b<bands-1; b++) {
+ pixel[in] = (pixel[in]*ialpha+pt5)>>>16;
+ in--;
+ }
+ }
+ }
+ }
+ dstR.setPixels(x0+dx, y+dy, w, 1, pixel);
+ }
+ } else if (src.isAlphaPremultiplied()) {
+ int [] oPix = new int[bands*w];
+ // Src has alpha dest does not so unpremult and store...
+ // System.out.println("Remove Alpha, Div Case");
+ int a, b, ialpha, in, out, fpNorm = 0x00FF0000, pt5 = 1<<15;
+ for (int y=y0; y<=y1; y++) {
+ pixel = srcR.getPixels(x0,y,w,1,pixel);
+ in = (bands+1)*w -1;
+ out = (bands*w)-1;
+ while(in >= 0) {
+ a = pixel[in]; in--;
+ if (a > 0) {
+ if (a < 255) {
+ ialpha = fpNorm/a;
+ for (b=0; b<bands; b++)
+ oPix[out--] = (pixel[in--]*ialpha+pt5)>>>16;
+ } else
+ for (b=0; b<bands; b++)
+ oPix[out--] = pixel[in--];
+ } else {
+ in -= bands;
+ for (b=0; b<bands; b++)
+ oPix[out--] = 255;
+ }
+ }
+ dstR.setPixels(x0+dx, y+dy, w, 1, oPix);
+ }
+ } else {
+ // Src has unpremult alpha, dest does not have alpha,
+ // just copy the color channels over.
+ Rectangle dstRect = new Rectangle(destP.x, destP.y,
+ srcRect.width, srcRect.height);
+ for (int b=0; b<bands; b++)
+ copyBand(srcR, srcRect, b,
+ dstR, dstRect, b);
+ }
+ }
+
+ public static void copyBand(Raster src, int srcBand,
+ WritableRaster dst, int dstBand) {
+
+ Rectangle sR = src.getBounds();
+ Rectangle dR = dst.getBounds();
+ Rectangle cpR = sR.intersection(dR);
+
+ copyBand(src, cpR, srcBand, dst, cpR, dstBand);
+ }
+
+ public static void copyBand(Raster src, Rectangle sR, int sBand,
+ WritableRaster dst, Rectangle dR, int dBand) {
+ int dy = dR.y -sR.y;
+ int dx = dR.x -sR.x;
+ sR = sR.intersection(src.getBounds());
+ dR = dR.intersection(dst.getBounds());
+ int width, height;
+ if (dR.width < sR.width) width = dR.width;
+ else width = sR.width;
+ if (dR.height < sR.height) height = dR.height;
+ else height = sR.height;
+
+ int x = sR.x+dx;
+ int [] samples = null;
+ for (int y=sR.y; y< sR.y+height; y++) {
+ samples = src.getSamples(sR.x, y, width, 1, sBand, samples);
+ dst.setSamples(x, y+dy, width, 1, dBand, samples);
+ }
+ }
+
+ public static boolean is_INT_PACK_Data(SampleModel sm,
+ boolean requireAlpha) {
+ // Check ColorModel is of type DirectColorModel
+ if(!(sm instanceof SinglePixelPackedSampleModel)) return false;
+
+ // Check transfer type
+ if(sm.getDataType() != DataBuffer.TYPE_INT) return false;
+
+ SinglePixelPackedSampleModel sppsm;
+ sppsm = (SinglePixelPackedSampleModel)sm;
+
+ int [] masks = sppsm.getBitMasks();
+ if (masks.length == 3) {
+ if (requireAlpha) return false;
+ } else if (masks.length != 4)
+ return false;
+
+ if(masks[0] != 0x00ff0000) return false;
+ if(masks[1] != 0x0000ff00) return false;
+ if(masks[2] != 0x000000ff) return false;
+ if ((masks.length == 4) &&
+ (masks[3] != 0xff000000)) return false;
+
+ return true;
+ }
+
+ public static boolean is_BYTE_COMP_Data(SampleModel sm) {
+ // Check ColorModel is of type DirectColorModel
+ if(!(sm instanceof ComponentSampleModel)) return false;
+
+ // Check transfer type
+ if(sm.getDataType() != DataBuffer.TYPE_BYTE) return false;
+
+ return true;
+ }
+
+ protected static void divide_INT_PACK_Data(WritableRaster wr) {
+ // System.out.println("Divide Int");
+
+ SinglePixelPackedSampleModel sppsm;
+ sppsm = (SinglePixelPackedSampleModel)wr.getSampleModel();
+
+ final int width = wr.getWidth();
+
+ final int scanStride = sppsm.getScanlineStride();
+ DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
+ final int base
+ = (db.getOffset() +
+ sppsm.getOffset(wr.getMinX()-wr.getSampleModelTranslateX(),
+ wr.getMinY()-wr.getSampleModelTranslateY()));
+
+ // Access the pixel data array
+ final int[] pixels = db.getBankData()[0];
+ for (int y=0; y<wr.getHeight(); y++) {
+ int sp = base + y*scanStride;
+ final int end = sp + width;
+ while (sp < end) {
+ int pixel = pixels[sp];
+ int a = pixel>>>24;
+ if (a<=0) {
+ pixels[sp] = 0x00FFFFFF;
+ } else if (a<255) {
+ int aFP = (0x00FF0000/a);
+ pixels[sp] =
+ ((a << 24) |
+ (((((pixel&0xFF0000)>>16)*aFP)&0xFF0000) ) |
+ (((((pixel&0x00FF00)>>8) *aFP)&0xFF0000)>>8 ) |
+ (((((pixel&0x0000FF)) *aFP)&0xFF0000)>>16));
+ }
+ sp++;
+ }
+ }
+ }
+
+ protected static void mult_INT_PACK_Data(WritableRaster wr) {
+ // System.out.println("Multiply Int: " + wr);
+
+ SinglePixelPackedSampleModel sppsm;
+ sppsm = (SinglePixelPackedSampleModel)wr.getSampleModel();
+
+ final int width = wr.getWidth();
+
+ final int scanStride = sppsm.getScanlineStride();
+ DataBufferInt db = (DataBufferInt)wr.getDataBuffer();
+ final int base
+ = (db.getOffset() +
+ sppsm.getOffset(wr.getMinX()-wr.getSampleModelTranslateX(),
+ wr.getMinY()-wr.getSampleModelTranslateY()));
+ // Access the pixel data array
+ final int[] pixels = db.getBankData()[0];
+ for (int y=0; y<wr.getHeight(); y++) {
+ int sp = base + y*scanStride;
+ final int end = sp + width;
+ while (sp < end) {
+ int pixel = pixels[sp];
+ int a = pixel>>>24;
+ if ((a>=0) && (a<255)) { // this does NOT include a == 255 (0xff) !
+ pixels[sp] = ((a << 24) |
+ ((((pixel&0xFF0000)*a)>>8)&0xFF0000) |
+ ((((pixel&0x00FF00)*a)>>8)&0x00FF00) |
+ ((((pixel&0x0000FF)*a)>>8)&0x0000FF));
+ }
+ sp++;
+ }
+ }
+ }
+
+
+ protected static void divide_BYTE_COMP_Data(WritableRaster wr) {
+ // System.out.println("Multiply Int: " + wr);
+
+ ComponentSampleModel csm;
+ csm = (ComponentSampleModel)wr.getSampleModel();
+
+ final int width = wr.getWidth();
+
+ final int scanStride = csm.getScanlineStride();
+ final int pixStride = csm.getPixelStride();
+ final int [] bandOff = csm.getBandOffsets();
+
+ DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
+ final int base
+ = (db.getOffset() +
+ csm.getOffset(wr.getMinX()-wr.getSampleModelTranslateX(),
+ wr.getMinY()-wr.getSampleModelTranslateY()));
+
+ int aOff = bandOff[bandOff.length-1];
+ int bands = bandOff.length-1;
+
+ // Access the pixel data array
+ final byte[] pixels = db.getBankData()[0];
+ for (int y=0; y<wr.getHeight(); y++) {
+ int sp = base + y*scanStride;
+ final int end = sp + width*pixStride;
+ while (sp < end) {
+ int a = pixels[sp+aOff]&0xFF;
+ if (a==0) {
+ for (int b = 0; b < bands; b++)
+ pixels[sp+bandOff[b]] = (byte)0xFF;
+ } else if (a<255) { // this does NOT include a == 255 (0xff) !
+ int aFP = (0x00FF0000/a);
+ for (int b = 0; b < bands; b++) {
+ int i = sp+bandOff[b];
+ pixels[i] = (byte)(((pixels[i]&0xFF)*aFP)>>>16);
+ }
+ }
+ sp+=pixStride;
+ }
+ }
+ }
+
+ protected static void mult_BYTE_COMP_Data(WritableRaster wr) {
+ // System.out.println("Multiply Int: " + wr);
+
+ ComponentSampleModel csm;
+ csm = (ComponentSampleModel)wr.getSampleModel();
+
+ final int width = wr.getWidth();
+
+ final int scanStride = csm.getScanlineStride();
+ final int pixStride = csm.getPixelStride();
+ final int [] bandOff = csm.getBandOffsets();
+
+ DataBufferByte db = (DataBufferByte)wr.getDataBuffer();
+ final int base
+ = (db.getOffset() +
+ csm.getOffset(wr.getMinX()-wr.getSampleModelTranslateX(),
+ wr.getMinY()-wr.getSampleModelTranslateY()));
+
+
+ int aOff = bandOff[bandOff.length-1];
+ int bands = bandOff.length-1;
+
+ // Access the pixel data array
+ final byte[] pixels = db.getBankData()[0];
+ for (int y=0; y<wr.getHeight(); y++) {
+ int sp = base + y*scanStride;
+ final int end = sp + width*pixStride;
+ while (sp < end) {
+ int a = pixels[sp+aOff]&0xFF;
+ if (a!=0xFF)
+ for (int b = 0; b < bands; b++) {
+ int i = sp+bandOff[b];
+ pixels[i] = (byte)(((pixels[i]&0xFF)*a)>>8);
+ }
+ sp+=pixStride;
+ }
+ }
+ }
+
+/*
+ This is skanky debugging code that might be useful in the future:
+
+ if (count == 33) {
+ String label = "sub [" + x + ", " + y + "]: ";
+ org.ImageDisplay.showImage
+ (label, subBI);
+ org.ImageDisplay.printImage
+ (label, subBI,
+ new Rectangle(75-iR.x, 90-iR.y, 32, 32));
+
+ }
+
+
+ // if ((count++ % 50) == 10)
+ // org.ImageDisplay.showImage("foo: ", subBI);
+
+
+ Graphics2D realG2D = g2d;
+ while (realG2D instanceof sun.java2d.ProxyGraphics2D) {
+ realG2D = ((sun.java2d.ProxyGraphics2D)realG2D).getDelegate();
+ }
+ if (realG2D instanceof sun.awt.image.BufferedImageGraphics2D) {
+ count++;
+ if (count == 34) {
+ RenderedImage ri;
+ ri = ((sun.awt.image.BufferedImageGraphics2D)realG2D).bufImg;
+ // g2d.setComposite(SVGComposite.OVER);
+ // org.ImageDisplay.showImage("Bar: " + count, cr);
+ org.ImageDisplay.printImage("Bar: " + count, cr,
+ new Rectangle(75, 90, 32, 32));
+
+ org.ImageDisplay.showImage ("Foo: " + count, ri);
+ org.ImageDisplay.printImage("Foo: " + count, ri,
+ new Rectangle(75, 90, 32, 32));
+
+ System.out.println("BI: " + ri);
+ System.out.println("BISM: " + ri.getSampleModel());
+ System.out.println("BICM: " + ri.getColorModel());
+ System.out.println("BICM class: " + ri.getColorModel().getClass());
+ System.out.println("BICS: " + ri.getColorModel().getColorSpace());
+ System.out.println
+ ("sRGB CS: " +
+ ColorSpace.getInstance(ColorSpace.CS_sRGB));
+ System.out.println("G2D info");
+ System.out.println("\tComposite: " + g2d.getComposite());
+ System.out.println("\tTransform" + g2d.getTransform());
+ java.awt.RenderingHints rh = g2d.getRenderingHints();
+ java.util.Set keys = rh.keySet();
+ java.util.Iterator iter = keys.iterator();
+ while (iter.hasNext()) {
+ Object o = iter.next();
+
+ System.out.println("\t" + o.toString() + " -> " +
+ rh.get(o).toString());
+ }
+
+ ri = cr;
+ System.out.println("RI: " + ri);
+ System.out.println("RISM: " + ri.getSampleModel());
+ System.out.println("RICM: " + ri.getColorModel());
+ System.out.println("RICM class: " + ri.getColorModel().getClass());
+ System.out.println("RICS: " + ri.getColorModel().getColorSpace());
+ }
+ }
+*/
+
+ /**
+ * Extracts an alpha raster from a RenderedImage. The method tries to avoid copying data
+ * unnecessarily by checking if the RenderedImage is a BufferedImage which offers suitable
+ * direct methods.
+ * @param image the image
+ * @return the alpha raster
+ */
+ public static Raster getAlphaRaster(RenderedImage image) {
+ ColorModel cm = image.getColorModel();
+ if (!cm.hasAlpha() || cm.getTransparency() != ColorModel.TRANSLUCENT) {
+ throw new IllegalStateException("Image doesn't have an alpha channel");
+ }
+ Raster alpha;
+ if (image instanceof BufferedImage) {
+ //Optimization possible with BufferedImage (No copying)
+ alpha = ((BufferedImage)image).getAlphaRaster();
+ } else {
+ WritableRaster wraster = GraphicsUtil.makeRasterWritable(image.getData());
+ alpha = image.getColorModel().getAlphaRaster(wraster);
+ }
+ return alpha;
+ }
+
+
+}
diff --git a/TempNewImagePackage/src/java/org/apache/xmlgraphics/image/codec/png/PNGDecodeParam.java b/TempNewImagePackage/src/java/org/apache/xmlgraphics/image/codec/png/PNGDecodeParam.java
new file mode 100644
index 0000000..15c1921
--- /dev/null
+++ b/TempNewImagePackage/src/java/org/apache/xmlgraphics/image/codec/png/PNGDecodeParam.java
@@ -0,0 +1,353 @@
+/*
+ * 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$ */
+
+package org.apache.xmlgraphics.image.codec.png;
+
+import org.apache.xmlgraphics.image.codec.util.ImageDecodeParam;
+import org.apache.xmlgraphics.image.codec.util.PropertyUtil;
+
+/**
+ * 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 {
+
+ /**
+ * Constructs a default instance of <code>PNGDecodeParam</code>.
+ */
+ public PNGDecodeParam() {}
+
+ private boolean suppressAlpha = false;
+
+ /**
+ * 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 = false;
+
+ /**
+ * 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 = false;
+
+ /**
+ * 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 = false;
+
+ /**
+ * 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 = false;
+
+ private PNGEncodeParam encodeParam = null;
+
+ /**
+ * 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;
+ }
+}
diff --git a/TempNewImagePackage/src/java/org/apache/xmlgraphics/image/codec/png/PNGEncodeParam.java b/TempNewImagePackage/src/java/org/apache/xmlgraphics/image/codec/png/PNGEncodeParam.java
new file mode 100644
index 0000000..1d922d6
--- /dev/null
+++ b/TempNewImagePackage/src/java/org/apache/xmlgraphics/image/codec/png/PNGEncodeParam.java
@@ -0,0 +1,1504 @@
+/*
+ * 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$ */
+
+package org.apache.xmlgraphics.image.codec.png;
+
+import org.apache.xmlgraphics.image.codec.util.ImageEncodeParam;
+import org.apache.xmlgraphics.image.codec.util.PropertyUtil;
+
+import java.awt.image.ColorModel;
+import java.awt.image.IndexColorModel;
+import java.awt.image.RenderedImage;
+import java.awt.image.SampleModel;
+import java.util.Date;
+import java.util.List;
+import java.util.ArrayList;
+
+/**
+ * An instance of <code>ImageEncodeParam</code> for encoding images in
+ * the PNG format.
+ *
+ * <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 abstract class PNGEncodeParam implements ImageEncodeParam {
+
+ /** Constant for use with the sRGB chunk. */
+ public static final int INTENT_PERCEPTUAL = 0;
+
+ /** Constant for use with the sRGB chunk. */
+ public static final int INTENT_RELATIVE = 1;
+
+ /** Constant for use with the sRGB chunk. */
+ public static final int INTENT_SATURATION = 2;
+
+ /** Constant for use with the sRGB chunk. */
+ public static final int INTENT_ABSOLUTE = 3;
+
+ /** Constant for use in filtering. */
+ public static final int PNG_FILTER_NONE = 0;
+
+ /** Constant for use in filtering. */
+ public static final int PNG_FILTER_SUB = 1;
+
+ /** Constant for use in filtering. */
+ public static final int PNG_FILTER_UP = 2;
+
+ /** Constant for use in filtering. */
+ public static final int PNG_FILTER_AVERAGE = 3;
+
+ /** Constant for use in filtering. */
+ public static final int PNG_FILTER_PAETH = 4;
+
+
+ /**
+ * Returns an instance of <code>PNGEncodeParam.Palette</code>,
+ * <code>PNGEncodeParam.Gray</code>, or
+ * <code>PNGEncodeParam.RGB</code> appropriate for encoding
+ * the given image.
+ *
+ * <p> If the image has an <code>IndexColorModel</code>, an
+ * instance of <code>PNGEncodeParam.Palette</code> is returned.
+ * Otherwise, if the image has 1 or 2 bands an instance of
+ * <code>PNGEncodeParam.Gray</code> is returned. In all other
+ * cases an instance of <code>PNGEncodeParam.RGB</code> is
+ * returned.
+ *
+ * <p> Note that this method does not provide any guarantee that
+ * the given image will be successfully encoded by the PNG
+ * encoder, as it only performs a very superficial analysis of
+ * the image structure.
+ */
+ public static PNGEncodeParam getDefaultEncodeParam(RenderedImage im) {
+ ColorModel colorModel = im.getColorModel();
+ if (colorModel instanceof IndexColorModel) {
+ return new PNGEncodeParam.Palette();
+ }
+
+ SampleModel sampleModel = im.getSampleModel();
+ int numBands = sampleModel.getNumBands();
+
+ if (numBands == 1 || numBands == 2) {
+ return new PNGEncodeParam.Gray();
+ } else {
+ return new PNGEncodeParam.RGB();
+ }
+ }
+
+ public static class Palette extends PNGEncodeParam {
+
+ /** Constructs an instance of <code>PNGEncodeParam.Palette</code>. */
+ public Palette() {}
+
+ // bKGD chunk
+
+ private boolean backgroundSet = false;
+
+ /**
+ * Suppresses the 'bKGD' chunk from being output.
+ */
+ public void unsetBackground() {
+ backgroundSet = false;
+ }
+
+ /**
+ * Returns true if a 'bKGD' chunk will be output.
+ */
+ public boolean isBackgroundSet() {
+ return backgroundSet;
+ }
+
+ /**
+ * Sets the desired bit depth for a palette image. The bit
+ * depth must be one of 1, 2, 4, or 8, or else an
+ * <code>IllegalArgumentException</code> will be thrown.
+ */
+ public void setBitDepth(int bitDepth) {
+ if (bitDepth != 1 && bitDepth != 2 && bitDepth != 4 &&
+ bitDepth != 8) {
+ throw new IllegalArgumentException(PropertyUtil.getString("PNGEncodeParam2"));
+ }
+ this.bitDepth = bitDepth;
+ bitDepthSet = true;
+ }
+
+ // PLTE chunk
+
+ private int[] palette = null;
+ private boolean paletteSet = false;
+
+ /**
+ * Sets the RGB palette of the image to be encoded.
+ * The <code>rgb</code> parameter contains alternating
+ * R, G, B values for each color index used in the image.
+ * The number of elements must be a multiple of 3 between
+ * 3 and 3*256.
+ *
+ * <p> The 'PLTE' chunk will encode this information.
+ *
+ * @param rgb An array of <code>int</code>s.
+ */
+ public void setPalette(int[] rgb) {
+ if (rgb.length < 1*3 || rgb.length > 256*3) {
+ throw new
+ IllegalArgumentException(PropertyUtil.getString("PNGEncodeParam0"));
+ }
+ if ((rgb.length % 3) != 0) {
+ throw new
+ IllegalArgumentException(PropertyUtil.getString("PNGEncodeParam1"));
+ }
+
+ palette = (int[])(rgb.clone());
+ paletteSet = true;
+ }
+
+ /**
+ * Returns the current RGB palette.
+ *
+ * <p> If the palette has not previously been set, or has been
+ * unset, an <code>IllegalStateException</code> will be thrown.
+ *
+ * @throws IllegalStateException if the palette is not set.
+ *
+ * @return An array of <code>int</code>s.
+ */
+ public int[] getPalette() {
+ if (!paletteSet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam3"));
+ }
+ return (int[])(palette.clone());
+ }
+
+ /**
+ * Suppresses the 'PLTE' chunk from being output.
+ */
+ public void unsetPalette() {
+ palette = null;
+ paletteSet = false;
+ }
+
+ /**
+ * Returns true if a 'PLTE' chunk will be output.
+ */
+ public boolean isPaletteSet() {
+ return paletteSet;
+ }
+
+ // bKGD chunk
+
+ private int backgroundPaletteIndex;
+
+ /**
+ * Sets the palette index of the suggested background color.
+ *
+ * <p> The 'bKGD' chunk will encode this information.
+ */
+ public void setBackgroundPaletteIndex(int index) {
+ backgroundPaletteIndex = index;
+ backgroundSet = true;
+ }
+
+ /**
+ * Returns the palette index of the suggested background color.
+ *
+ * <p> If the background palette index has not previously been
+ * set, or has been unset, an
+ * <code>IllegalStateException</code> will be thrown.
+ *
+ * @throws IllegalStateException if the palette index is not set.
+ */
+ public int getBackgroundPaletteIndex() {
+ if (!backgroundSet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam4"));
+ }
+ return backgroundPaletteIndex;
+ }
+
+ // tRNS chunk
+
+ private int[] transparency;
+
+ /**
+ * Sets the alpha values associated with each palette entry.
+ * The <code>alpha</code> parameter should have as many entries
+ * as there are RGB triples in the palette.
+ *
+ * <p> The 'tRNS' chunk will encode this information.
+ */
+ public void setPaletteTransparency(byte[] alpha) {
+ transparency = new int[alpha.length];
+ for (int i = 0; i < alpha.length; i++) {
+ transparency[i] = alpha[i] & 0xff;
+ }
+ transparencySet = true;
+ }
+
+ /**
+ * Returns the alpha values associated with each palette entry.
+ *
+ * <p> If the palette transparency has not previously been
+ * set, or has been unset, an
+ * <code>IllegalStateException</code> will be thrown.
+ *
+ * @throws IllegalStateException if the palette transparency is
+ * not set.
+ */
+ public byte[] getPaletteTransparency() {
+ if (!transparencySet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam5"));
+ }
+ byte[] alpha = new byte[transparency.length];
+ for (int i = 0; i < alpha.length; i++) {
+ alpha[i] = (byte)transparency[i];
+ }
+ return alpha;
+ }
+ }
+
+ public static class Gray extends PNGEncodeParam {
+
+ /** Constructs an instance of <code>PNGEncodeParam.Gray</code>. */
+ public Gray() {}
+
+ // bKGD chunk
+
+ private boolean backgroundSet = false;
+
+ /**
+ * Suppresses the 'bKGD' chunk from being output.
+ */
+ public void unsetBackground() {
+ backgroundSet = false;
+ }
+
+ /**
+ * Returns true if a 'bKGD' chunk will be output.
+ */
+ public boolean isBackgroundSet() {
+ return backgroundSet;
+ }
+
+ /**
+ * Sets the desired bit depth for a grayscale image. The bit
+ * depth must be one of 1, 2, 4, 8, or 16.
+ *
+ * <p> When encoding a source image of a greater bit depth,
+ * pixel values will be clamped to the smaller range after
+ * shifting by the value given by <code>getBitShift()</code>.
+ * When encoding a source image of a smaller bit depth, pixel
+ * values will be shifted and left-filled with zeroes.
+ */
+ public void setBitDepth(int bitDepth) {
+ if (bitDepth != 1 && bitDepth != 2 && bitDepth != 4 &&
+ bitDepth != 8 && bitDepth != 16) {
+ throw new IllegalArgumentException();
+ }
+ this.bitDepth = bitDepth;
+ bitDepthSet = true;
+ }
+
+ // bKGD chunk
+
+ private int backgroundPaletteGray;
+
+ /**
+ * Sets the suggested gray level of the background.
+ *
+ * <p> The 'bKGD' chunk will encode this information.
+ */
+ public void setBackgroundGray(int gray) {
+ backgroundPaletteGray = gray;
+ backgroundSet = true;
+ }
+
+ /**
+ * Returns the suggested gray level of the background.
+ *
+ * <p> If the background gray level has not previously been
+ * set, or has been unset, an
+ * <code>IllegalStateException</code> will be thrown.
+ *
+ * @throws IllegalStateException if the background gray level
+ * is not set.
+ */
+ public int getBackgroundGray() {
+ if (!backgroundSet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam6"));
+ }
+ return backgroundPaletteGray;
+ }
+
+ // tRNS chunk
+
+ private int[] transparency;
+
+ /**
+ * Sets the gray value to be used to denote transparency.
+ *
+ * <p> Setting this attribute will cause the alpha channel
+ * of the input image to be ignored.
+ *
+ * <p> The 'tRNS' chunk will encode this information.
+ */
+ public void setTransparentGray(int transparentGray) {
+ transparency = new int[1];
+ transparency[0] = transparentGray;
+ transparencySet = true;
+ }
+
+ /**
+ * Returns the gray value to be used to denote transparency.
+ *
+ * <p> If the transparent gray value has not previously been
+ * set, or has been unset, an
+ * <code>IllegalStateException</code> will be thrown.
+ *
+ * @throws IllegalStateException if the transparent gray value
+ * is not set.
+ */
+ public int getTransparentGray() {
+ if (!transparencySet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam7"));
+ }
+ int gray = transparency[0];
+ return gray;
+ }
+
+ private int bitShift;
+ private boolean bitShiftSet = false;
+
+ /**
+ * Sets the desired bit shift for a grayscale image.
+ * Pixels in the source image will be shifted right by
+ * the given amount prior to being clamped to the maximum
+ * value given by the encoded image's bit depth.
+ */
+ public void setBitShift(int bitShift) {
+ if (bitShift < 0) {
+ throw new RuntimeException();
+ }
+ this.bitShift = bitShift;
+ bitShiftSet = true;
+ }
+
+ /**
+ * Returns the desired bit shift for a grayscale image.
+ *
+ * <p> If the bit shift has not previously been set, or has been
+ * unset, an <code>IllegalStateException</code> will be thrown.
+ *
+ * @throws IllegalStateException if the bit shift is not set.
+ */
+ public int getBitShift() {
+ if (!bitShiftSet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam8"));
+ }
+ return bitShift;
+ }
+
+ /**
+ * Suppresses the setting of the bit shift of a grayscale image.
+ * Pixels in the source image will not be shifted prior to encoding.
+ */
+ public void unsetBitShift() {
+ bitShiftSet = false;
+ }
+
+ /**
+ * Returns true if the bit shift has been set.
+ */
+ public boolean isBitShiftSet() {
+ return bitShiftSet;
+ }
+
+ /**
+ * Returns true if the bit depth has been set.
+ */
+ public boolean isBitDepthSet() {
+ return bitDepthSet;
+ }
+ }
+
+ public static class RGB extends PNGEncodeParam {
+
+ /** Constructs an instance of <code>PNGEncodeParam.RGB</code>. */
+ public RGB() {}
+
+ // bKGD chunk
+
+ private boolean backgroundSet = false;
+
+ /**
+ * Suppresses the 'bKGD' chunk from being output.
+ */
+ public void unsetBackground() {
+ backgroundSet = false;
+ }
+
+ /**
+ * Returns true if a 'bKGD' chunk will be output.
+ */
+ public boolean isBackgroundSet() {
+ return backgroundSet;
+ }
+
+ /**
+ * Sets the desired bit depth for an RGB image. The bit
+ * depth must be 8 or 16.
+ */
+ public void setBitDepth(int bitDepth) {
+ if (bitDepth != 8 && bitDepth != 16) {
+ throw new RuntimeException();
+ }
+ this.bitDepth = bitDepth;
+ bitDepthSet = true;
+ }
+
+ // bKGD chunk
+
+ private int[] backgroundRGB;
+
+ /**
+ * Sets the RGB value of the suggested background color.
+ * The <code>rgb</code> parameter should have 3 entries.
+ *
+ * <p> The 'bKGD' chunk will encode this information.
+ */
+ public void setBackgroundRGB(int[] rgb) {
+ if (rgb.length != 3) {
+ throw new RuntimeException();
+ }
+ backgroundRGB = rgb;
+ backgroundSet = true;
+ }
+
+ /**
+ * Returns the RGB value of the suggested background color.
+ *
+ * <p> If the background color has not previously been set, or has been
+ * unset, an <code>IllegalStateException</code> will be thrown.
+ *
+ * @throws IllegalStateException if the background color is not set.
+ */
+ public int[] getBackgroundRGB() {
+ if (!backgroundSet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam9"));
+ }
+ return backgroundRGB;
+ }
+
+ // tRNS chunk
+
+ private int[] transparency;
+
+ /**
+ * Sets the RGB value to be used to denote transparency.
+ *
+ * <p> Setting this attribute will cause the alpha channel
+ * of the input image to be ignored.
+ *
+ * <p> The 'tRNS' chunk will encode this information.
+ */
+ public void setTransparentRGB(int[] transparentRGB) {
+ transparency = (int[])(transparentRGB.clone());
+ transparencySet = true;
+ }
+
+ /**
+ * Returns the RGB value to be used to denote transparency.
+ *
+ * <p> If the transparent color has not previously been set,
+ * or has been unset, an <code>IllegalStateException</code>
+ * will be thrown.
+ *
+ * @throws IllegalStateException if the transparent color is not set.
+ */
+ public int[] getTransparentRGB() {
+ if (!transparencySet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam10"));
+ }
+ return (int[])(transparency.clone());
+ }
+ }
+
+ protected int bitDepth;
+ protected boolean bitDepthSet = false;
+
+ /**
+ * Sets the desired bit depth of an image.
+ */
+ public abstract void setBitDepth(int bitDepth);
+
+ /**
+ * Returns the desired bit depth for a grayscale image.
+ *
+ * <p> If the bit depth has not previously been set, or has been
+ * unset, an <code>IllegalStateException</code> will be thrown.
+ *
+ * @throws IllegalStateException if the bit depth is not set.
+ */
+ public int getBitDepth() {
+ if (!bitDepthSet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam11"));
+ }
+ return bitDepth;
+ }
+
+ /**
+ * Suppresses the setting of the bit depth of a grayscale image.
+ * The depth of the encoded image will be inferred from the source
+ * image bit depth, rounded up to the next power of 2 between 1
+ * and 16.
+ */
+ public void unsetBitDepth() {
+ bitDepthSet = false;
+ }
+
+ private boolean useInterlacing = false;
+
+ /**
+ * Turns Adam7 interlacing on or off.
+ */
+ public void setInterlacing(boolean useInterlacing) {
+ this.useInterlacing = useInterlacing;
+ }
+
+ /**
+ * Returns <code>true</code> if Adam7 interlacing will be used.
+ */
+ public boolean getInterlacing() {
+ return useInterlacing;
+ }
+
+ // bKGD chunk - delegate to subclasses
+
+ // In JAI 1.0, 'backgroundSet' was private. The JDK 1.2 compiler
+ // was lenient and incorrectly allowed this variable to be
+ // accessed from the subclasses. The JDK 1.3 compiler correctly
+ // flags this as a use of a non-static variable in a static
+ // context. Changing 'backgroundSet' to protected would have
+ // solved the problem, but would have introduced a visible API
+ // change. Thus we are forced to adopt the solution of placing a
+ // separate private variable in each subclass and providing
+ // separate implementations of 'unsetBackground' and
+ // 'isBackgroundSet' in each concrete subclass.
+
+ /**
+ * Suppresses the 'bKGD' chunk from being output.
+ * For API compatibility with JAI 1.0, the superclass
+ * defines this method to throw a <code>RuntimeException</code>;
+ * accordingly, subclasses must provide their own implementations.
+ */
+ public void unsetBackground() {
+ throw new RuntimeException(PropertyUtil.getString("PNGEncodeParam23"));
+ }
+
+ /**
+ * Returns true if a 'bKGD' chunk will be output.
+ * For API compatibility with JAI 1.0, the superclass
+ * defines this method to throw a <code>RuntimeException</code>;
+ * accordingly, subclasses must provide their own implementations.
+ */
+ public boolean isBackgroundSet() {
+ throw new RuntimeException(PropertyUtil.getString("PNGEncodeParam24"));
+ }
+
+ // cHRM chunk
+
+ private float[] chromaticity = null;
+ private boolean chromaticitySet = false;
+
+ /**
+ * Sets the white point and primary chromaticities in CIE (x, y)
+ * space.
+ *
+ * <p> The <code>chromaticity</code> parameter should be a
+ * <code>float</code> array of length 8 containing the white point
+ * X and Y, red X and Y, green X and Y, and blue X and Y values in
+ * order.
+ *
+ * <p> The 'cHRM' chunk will encode this information.
+ */
+ public void setChromaticity(float[] chromaticity) {
+ if (chromaticity.length != 8) {
+ throw new IllegalArgumentException();
+ }
+ this.chromaticity = (float[])(chromaticity.clone());
+ chromaticitySet = true;
+ }
+
+ /**
+ * A convenience method that calls the array version.
+ */
+ public void setChromaticity(float whitePointX, float whitePointY,
+ float redX, float redY,
+ float greenX, float greenY,
+ float blueX, float blueY) {
+ float[] chroma = new float[8];
+ chroma[0] = whitePointX;
+ chroma[1] = whitePointY;
+ chroma[2] = redX;
+ chroma[3] = redY;
+ chroma[4] = greenX;
+ chroma[5] = greenY;
+ chroma[6] = blueX;
+ chroma[7] = blueY;
+ setChromaticity(chroma);
+ }
+
+ /**
+ * Returns the white point and primary chromaticities in
+ * CIE (x, y) space.
+ *
+ * <p> See the documentation for the <code>setChromaticity</code>
+ * method for the format of the returned data.
+ *
+ * <p> If the chromaticity has not previously been set, or has been
+ * unset, an <code>IllegalStateException</code> will be thrown.
+ *
+ * @throws IllegalStateException if the chromaticity is not set.
+ */
+ public float[] getChromaticity() {
+ if (!chromaticitySet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam12"));
+ }
+ return (float[])(chromaticity.clone());
+ }
+
+ /**
+ * Suppresses the 'cHRM' chunk from being output.
+ */
+ public void unsetChromaticity() {
+ chromaticity = null;
+ chromaticitySet = false;
+ }
+
+ /**
+ * Returns true if a 'cHRM' chunk will be output.
+ */
+ public boolean isChromaticitySet() {
+ return chromaticitySet;
+ }
+
+ // gAMA chunk
+
+ private float gamma;
+ private boolean gammaSet = false;
+
+ /**
+ * Sets the file gamma value for the image.
+ *
+ * <p> The 'gAMA' chunk will encode this information.
+ */
+ public void setGamma(float gamma) {
+ this.gamma = gamma;
+ gammaSet = true;
+ }
+
+ /**
+ * Returns the file gamma value for the image.
+ *
+ * <p> If the file gamma has not previously been set, or has been
+ * unset, an <code>IllegalStateException</code> will be thrown.
+ *
+ * @throws IllegalStateException if the gamma is not set.
+ */
+ public float getGamma() {
+ if (!gammaSet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam13"));
+ }
+ return gamma;
+ }
+
+ /**
+ * Suppresses the 'gAMA' chunk from being output.
+ */
+ public void unsetGamma() {
+ gammaSet = false;
+ }
+
+ /**
+ * Returns true if a 'gAMA' chunk will be output.
+ */
+ public boolean isGammaSet() {
+ return gammaSet;
+ }
+
+ // hIST chunk
+
+ private int[] paletteHistogram = null;
+ private boolean paletteHistogramSet = false;
+
+ /**
+ * Sets the palette histogram to be stored with this image.
+ * The histogram consists of an array of integers, one per
+ * palette entry.
+ *
+ * <p> The 'hIST' chunk will encode this information.
+ */
+ public void setPaletteHistogram(int[] paletteHistogram) {
+ this.paletteHistogram = (int[])(paletteHistogram.clone());
+ paletteHistogramSet = true;
+ }
+
+ /**
+ * Returns the palette histogram to be stored with this image.
+ *
+ * <p> If the histogram has not previously been set, or has been
+ * unset, an <code>IllegalStateException</code> will be thrown.
+ *
+ * @throws IllegalStateException if the histogram is not set.
+ */
+ public int[] getPaletteHistogram() {
+ if (!paletteHistogramSet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam14"));
+ }
+ return paletteHistogram;
+ }
+
+ /**
+ * Suppresses the 'hIST' chunk from being output.
+ */
+ public void unsetPaletteHistogram() {
+ paletteHistogram = null;
+ paletteHistogramSet = false;
+ }
+
+ /**
+ * Returns true if a 'hIST' chunk will be output.
+ */
+ public boolean isPaletteHistogramSet() {
+ return paletteHistogramSet;
+ }
+
+ // iCCP chunk
+
+ private byte[] ICCProfileData = null;
+ private boolean ICCProfileDataSet = false;
+
+ /**
+ * Sets the ICC profile data to be stored with this image.
+ * The profile is represented in raw binary form.
+ *
+ * <p> The 'iCCP' chunk will encode this information.
+ */
+ public void setICCProfileData(byte[] ICCProfileData) {
+ this.ICCProfileData = (byte[])(ICCProfileData.clone());
+ ICCProfileDataSet = true;
+ }
+
+ /**
+ * Returns the ICC profile data to be stored with this image.
+ *
+ * <p> If the ICC profile has not previously been set, or has been
+ * unset, an <code>IllegalStateException</code> will be thrown.
+ *
+ * @throws IllegalStateException if the ICC profile is not set.
+ */
+ public byte[] getICCProfileData() {
+ if (!ICCProfileDataSet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam15"));
+ }
+ return (byte[])(ICCProfileData.clone());
+ }
+
+ /**
+ * Suppresses the 'iCCP' chunk from being output.
+ */
+ public void unsetICCProfileData() {
+ ICCProfileData = null;
+ ICCProfileDataSet = false;
+ }
+
+ /**
+ * Returns true if a 'iCCP' chunk will be output.
+ */
+ public boolean isICCProfileDataSet() {
+ return ICCProfileDataSet;
+ }
+
+ // pHYS chunk
+
+ private int[] physicalDimension = null;
+ private boolean physicalDimensionSet = false;
+
+ /**
+ * Sets the physical dimension information to be stored with this
+ * image. The physicalDimension parameter should be a 3-entry
+ * array containing the number of pixels per unit in the X
+ * direction, the number of pixels per unit in the Y direction,
+ * and the unit specifier (0 = unknown, 1 = meters).
+ *
+ * <p> The 'pHYS' chunk will encode this information.
+ */
+ public void setPhysicalDimension(int[] physicalDimension) {
+ this.physicalDimension = (int[])(physicalDimension.clone());
+ physicalDimensionSet = true;
+ }
+
+ /**
+ * A convenience method that calls the array version.
+ */
+ public void setPhysicalDimension(int xPixelsPerUnit,
+ int yPixelsPerUnit,
+ int unitSpecifier) {
+ int[] pd = new int[3];
+ pd[0] = xPixelsPerUnit;
+ pd[1] = yPixelsPerUnit;
+ pd[2] = unitSpecifier;
+
+ setPhysicalDimension(pd);
+ }
+
+ /**
+ * Returns the physical dimension information to be stored
+ * with this image.
+ *
+ * <p> If the physical dimension information has not previously
+ * been set, or has been unset, an
+ * <code>IllegalStateException</code> will be thrown.
+ *
+ * @throws IllegalStateException if the physical dimension information
+ * is not set.
+ */
+ public int[] getPhysicalDimension() {
+ if (!physicalDimensionSet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam16"));
+ }
+ return (int[])(physicalDimension.clone());
+ }
+
+ /**
+ * Suppresses the 'pHYS' chunk from being output.
+ */
+ public void unsetPhysicalDimension() {
+ physicalDimension = null;
+ physicalDimensionSet = false;
+ }
+
+ /**
+ * Returns true if a 'pHYS' chunk will be output.
+ */
+ public boolean isPhysicalDimensionSet() {
+ return physicalDimensionSet;
+ }
+
+ // sPLT chunk
+
+ private PNGSuggestedPaletteEntry[] suggestedPalette = null;
+ private boolean suggestedPaletteSet = false;
+
+ /**
+ * Sets the suggested palette information to be stored with this
+ * image. The information is passed to this method as an array of
+ * <code>PNGSuggestedPaletteEntry</code> objects.
+ *
+ * <p> The 'sPLT' chunk will encode this information.
+ */
+ public void setSuggestedPalette(PNGSuggestedPaletteEntry[] palette) {
+ suggestedPalette = (PNGSuggestedPaletteEntry[])(palette.clone());
+ suggestedPaletteSet = true;
+ }
+
+ /**
+ * Returns the suggested palette information to be stored with this
+ * image.
+ *
+ * <p> If the suggested palette information has not previously
+ * been set, or has been unset, an
+ * <code>IllegalStateException</code> will be thrown.
+ *
+ * @throws IllegalStateException if the suggested palette
+ * information is not set.
+ */
+ public PNGSuggestedPaletteEntry[] getSuggestedPalette() {
+ if (!suggestedPaletteSet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam17"));
+ }
+ return (PNGSuggestedPaletteEntry[])(suggestedPalette.clone());
+ }
+
+ /**
+ * Suppresses the 'sPLT' chunk from being output.
+ */
+ public void unsetSuggestedPalette() {
+ suggestedPalette = null;
+ suggestedPaletteSet = false;
+ }
+
+ /**
+ * Returns true if a 'sPLT' chunk will be output.
+ */
+ public boolean isSuggestedPaletteSet() {
+ return suggestedPaletteSet;
+ }
+
+ // sBIT chunk
+
+ private int[] significantBits = null;
+ private boolean significantBitsSet = false;
+
+ /**
+ * Sets the number of significant bits for each band of the image.
+ *
+ * <p> The number of entries in the <code>significantBits</code>
+ * array must be equal to the number of output bands in the image:
+ * 1 for a gray image, 2 for gray+alpha, 3 for index or truecolor,
+ * and 4 for truecolor+alpha.
+ *
+ * <p> The 'sBIT' chunk will encode this information.
+ */
+ public void setSignificantBits(int[] significantBits) {
+ this.significantBits = (int[])(significantBits.clone());
+ significantBitsSet = true;
+ }
+
+ /**
+ * Returns the number of significant bits for each band of the image.
+ *
+ * <p> If the significant bits values have not previously been
+ * set, or have been unset, an <code>IllegalStateException</code>
+ * will be thrown.
+ *
+ * @throws IllegalStateException if the significant bits values are
+ * not set.
+ */
+ public int[] getSignificantBits() {
+ if (!significantBitsSet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam18"));
+ }
+ return (int[])significantBits.clone();
+ }
+
+ /**
+ * Suppresses the 'sBIT' chunk from being output.
+ */
+ public void unsetSignificantBits() {
+ significantBits = null;
+ significantBitsSet = false;
+ }
+
+ /**
+ * Returns true if an 'sBIT' chunk will be output.
+ */
+ public boolean isSignificantBitsSet() {
+ return significantBitsSet;
+ }
+
+ // sRGB chunk
+
+ private int SRGBIntent;
+ private boolean SRGBIntentSet = false;
+
+ /**
+ * Sets the sRGB rendering intent to be stored with this image.
+ * The legal values are 0 = Perceptual, 1 = Relative Colorimetric,
+ * 2 = Saturation, and 3 = Absolute Colorimetric. Refer to the
+ * PNG specification for information on these values.
+ *
+ * <p> The 'sRGB' chunk will encode this information.
+ */
+ public void setSRGBIntent(int SRGBIntent) {
+ this.SRGBIntent = SRGBIntent;
+ SRGBIntentSet = true;
+ }
+
+ /**
+ * Returns the sRGB rendering intent to be stored with this image.
+ *
+ * <p> If the sRGB intent has not previously been set, or has been
+ * unset, an <code>IllegalStateException</code> will be thrown.
+ *
+ * @throws IllegalStateException if the sRGB intent is not set.
+ */
+ public int getSRGBIntent() {
+ if (!SRGBIntentSet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam19"));
+ }
+ return SRGBIntent;
+ }
+
+ /**
+ * Suppresses the 'sRGB' chunk from being output.
+ */
+ public void unsetSRGBIntent() {
+ SRGBIntentSet = false;
+ }
+
+ /**
+ * Returns true if an 'sRGB' chunk will be output.
+ */
+ public boolean isSRGBIntentSet() {
+ return SRGBIntentSet;
+ }
+
+ // tEXt chunk
+
+ private String[] text = null;
+ private boolean textSet = false;
+
+ /**
+ * Sets the textual data to be stored in uncompressed form with this
+ * image. The data is passed to this method as an array of
+ * <code>String</code>s.
+ *
+ * <p> The 'tEXt' chunk will encode this information.
+ */
+ public void setText(String[] text) {
+ this.text = text;
+ textSet = true;
+ }
+
+ /**
+ * Returns the text strings to be stored in uncompressed form with this
+ * image as an array of <code>String</code>s.
+ *
+ * <p> If the text strings have not previously been set, or have been
+ * unset, an <code>IllegalStateException</code> will be thrown.
+ *
+ * @throws IllegalStateException if the text strings are not set.
+ */
+ public String[] getText() {
+ if (!textSet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam20"));
+ }
+ return text;
+ }
+
+ /**
+ * Suppresses the 'tEXt' chunk from being output.
+ */
+ public void unsetText() {
+ text = null;
+ textSet = false;
+ }
+
+ /**
+ * Returns true if a 'tEXt' chunk will be output.
+ */
+ public boolean isTextSet() {
+ return textSet;
+ }
+
+ // tIME chunk
+
+ private Date modificationTime;
+ private boolean modificationTimeSet = false;
+
+ /**
+ * Sets the modification time, as a <code>Date</code>, to be
+ * stored with this image. The internal storage format will use
+ * UTC regardless of how the <code>modificationTime</code>
+ * parameter was created.
+ *
+ * <p> The 'tIME' chunk will encode this information.
+ */
+ public void setModificationTime(Date modificationTime) {
+ this.modificationTime = modificationTime;
+ modificationTimeSet = true;
+ }
+
+ /**
+ * Returns the modification time to be stored with this image.
+ *
+ * <p> If the bit depth has not previously been set, or has been
+ * unset, an <code>IllegalStateException</code> will be thrown.
+ *
+ * @throws IllegalStateException if the bit depth is not set.
+ */
+ public Date getModificationTime() {
+ if (!modificationTimeSet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam21"));
+ }
+ return modificationTime;
+ }
+
+ /**
+ * Suppresses the 'tIME' chunk from being output.
+ */
+ public void unsetModificationTime() {
+ modificationTime = null;
+ modificationTimeSet = false;
+ }
+
+ /**
+ * Returns true if a 'tIME' chunk will be output.
+ */
+ public boolean isModificationTimeSet() {
+ return modificationTimeSet;
+ }
+
+ // tRNS chunk
+
+ boolean transparencySet = false;
+
+ /**
+ * Suppresses the 'tRNS' chunk from being output.
+ */
+ public void unsetTransparency() {
+ transparencySet = false;
+ }
+
+ /**
+ * Returns true if a 'tRNS' chunk will be output.
+ */
+ public boolean isTransparencySet() {
+ return transparencySet;
+ }
+
+ // zTXT chunk
+
+ private String[] zText = null;
+ private boolean zTextSet = false;
+
+ /**
+ * Sets the text strings to be stored in compressed form with this
+ * image. The data is passed to this method as an array of
+ * <code>String</code>s.
+ *
+ * <p> The 'zTXt' chunk will encode this information.
+ */
+ public void setCompressedText(String[] text) {
+ this.zText = text;
+ zTextSet = true;
+ }
+
+ /**
+ * Returns the text strings to be stored in compressed form with
+ * this image as an array of <code>String</code>s.
+ *
+ * <p> If the compressed text strings have not previously been
+ * set, or have been unset, an <code>IllegalStateException</code>
+ * will be thrown.
+ *
+ * @throws IllegalStateException if the compressed text strings are
+ * not set.
+ */
+ public String[] getCompressedText() {
+ if (!zTextSet) {
+ throw new IllegalStateException(PropertyUtil.getString("PNGEncodeParam22"));
+ }
+ return zText;
+ }
+
+ /**
+ * Suppresses the 'zTXt' chunk from being output.
+ */
+ public void unsetCompressedText() {
+ zText = null;
+ zTextSet = false;
+ }
+
+ /**
+ * Returns true if a 'zTXT' chunk will be output.
+ */
+ public boolean isCompressedTextSet() {
+ return zTextSet;
+ }
+
+ // Other chunk types
+
+ List chunkType = new ArrayList();
+ List chunkData = new ArrayList();
+
+ /**
+ * Adds a private chunk, in binary form, to the list of chunks to
+ * be stored with this image.
+ *
+ * @param type a 4-character String giving the chunk type name.
+ * @param data an array of <code>byte</code>s containing the
+ * chunk data.
+ */
+ public synchronized void addPrivateChunk(String type, byte[] data) {
+ chunkType.add(type);
+ chunkData.add(data.clone());
+ }
+
+ /**
+ * Returns the number of private chunks to be written to the
+ * output file.
+ */
+ public synchronized int getNumPrivateChunks() {
+ return chunkType.size();
+ }
+
+ /**
+ * Returns the type of the private chunk at a given index, as a
+ * 4-character <code>String</code>. The index must be smaller
+ * than the return value of <code>getNumPrivateChunks</code>.
+ */
+ public synchronized String getPrivateChunkType(int index) {
+ return (String)chunkType.get(index);
+ }
+
+ /**
+ * Returns the data associated of the private chunk at a given
+ * index, as an array of <code>byte</code>s. The index must be
+ * smaller than the return value of
+ * <code>getNumPrivateChunks</code>.
+ */
+ public synchronized byte[] getPrivateChunkData(int index) {
+ return (byte[])chunkData.get(index);
+ }
+
+ /**
+ * Remove all private chunks associated with this parameter instance
+ * whose 'safe-to-copy' bit is not set. This may be advisable when
+ * transcoding PNG images.
+ */
+ public synchronized void removeUnsafeToCopyPrivateChunks() {
+ List newChunkType = new ArrayList();
+ List newChunkData = new ArrayList();
+
+ int len = getNumPrivateChunks();
+ for (int i = 0; i < len; i++) {
+ String type = getPrivateChunkType(i);
+ char lastChar = type.charAt(3);
+ if (lastChar >= 'a' && lastChar <= 'z') {
+ newChunkType.add(type);
+ newChunkData.add(getPrivateChunkData(i));
+ }
+ }
+
+ chunkType = newChunkType;
+ chunkData = newChunkData;
+ }
+
+ /**
+ * Remove all private chunks associated with this parameter instance.
+ */
+ public synchronized void removeAllPrivateChunks() {
+ chunkType = new ArrayList();
+ chunkData = new ArrayList();
+ }
+
+ /**
+ * An abs() function for use by the Paeth predictor.
+ */
+ private static final int abs(int x) {
+ return (x < 0) ? -x : x;
+ }
+
+ /**
+ * The Paeth predictor routine used in PNG encoding. This routine
+ * is included as a convenience to subclasses that override the
+ * <code>filterRow</code> method.
+ */
+ public static final int paethPredictor(int a, int b, int c) {
+ int p = a + b - c;
+ int pa = abs(p - a);
+ int pb = abs(p - b);
+ int pc = abs(p - c);
+
+ if ((pa <= pb) && (pa <= pc)) {
+ return a;
+ } else if (pb <= pc) {
+ return b;
+ } else {
+ return c;
+ }
+ }
+
+ /**
+ * Performs filtering on a row of an image. This method may be
+ * overridden in order to provide a custom algorithm for choosing
+ * the filter type for a given row.
+ *
+ * <p> The method is supplied with the current and previous rows
+ * of the image. For the first row of the image, or of an
+ * interlacing pass, the previous row array will be filled with
+ * zeros as required by the PNG specification.
+ *
+ * <p> The method is also supplied with five scratch arrays.
+ * These arrays may be used within the method for any purpose.
+ * At method exit, the array at the index given by the return
+ * value of the method should contain the filtered data. The
+ * return value will also be used as the filter type.
+ *
+ * <p> The default implementation of the method performs a trial
+ * encoding with each of the filter types, and computes the sum of
+ * absolute values of the differences between the raw bytes of the
+ * current row and the predicted values. The index of the filter
+ * producing the smallest result is returned.
+ *
+ * <p> As an example, to perform only 'sub' filtering, this method
+ * could be implemented (non-optimally) as follows:
+ *
+ * <pre>
+ * for (int i = bytesPerPixel; i < bytesPerRow + bytesPerPixel; i++) {
+ * int curr = currRow[i] & 0xff;
+ * int left = currRow[i - bytesPerPixel] & 0xff;
+ * scratchRow[PNG_FILTER_SUB][i] = (byte)(curr - left);
+ * }
+ * return PNG_FILTER_SUB;
+ * </pre>
+ *
+ * @param currRow The current row as an array of <code>byte</code>s
+ * of length at least <code>bytesPerRow + bytesPerPixel</code>.
+ * The pixel data starts at index <code>bytesPerPixel</code>;
+ * the initial <code>bytesPerPixel</code> bytes are zero.
+ * @param prevRow The current row as an array of <code>byte</code>s
+ * The pixel data starts at index <code>bytesPerPixel</code>;
+ * the initial <code>bytesPerPixel</code> bytes are zero.
+ * @param scratchRows An array of 5 <code>byte</code> arrays of
+ * length at least <code>bytesPerRow +
+ * bytesPerPixel</code>, useable to hold temporary results.
+ * The filtered row will be returned as one of the entries
+ * of this array. The returned filtered data should start
+ * at index <code>bytesPerPixel</code>; The initial
+ * <code>bytesPerPixel</code> bytes are not used.
+ * @param bytesPerRow The number of bytes in the image row.
+ * This value will always be greater than 0.
+ * @param bytesPerPixel The number of bytes representing a single
+ * pixel, rounded up to an integer. This is the 'bpp' parameter
+ * described in the PNG specification.
+ *
+ * @return The filter type to be used. The entry of
+ * <code>scratchRows[]</code> at this index holds the
+ * filtered data. */
+ public int filterRow(byte[] currRow,
+ byte[] prevRow,
+ byte[][] scratchRows,
+ int bytesPerRow,
+ int bytesPerPixel) {
+
+ int [] badness = {0, 0, 0, 0, 0};
+ int curr, left, up, upleft, diff;
+ int pa, pb, pc;
+ for (int i = bytesPerPixel; i < bytesPerRow + bytesPerPixel; i++) {
+ curr = currRow[i] & 0xff;
+ left = currRow[i - bytesPerPixel] & 0xff;
+ up = prevRow[i] & 0xff;
+ upleft = prevRow[i - bytesPerPixel] & 0xff;
+
+ // no filter
+ badness[0] += curr;
+
+ // sub filter
+ diff = curr - left;
+ scratchRows[1][i] = (byte)diff;
+ badness [1] += (diff>0)?diff:-diff;
+
+ // up filter
+ diff = curr - up;
+ scratchRows[2][i] = (byte)diff;
+ badness [2] += (diff>=0)?diff:-diff;
+
+ // average filter
+ diff = curr - ((left+up)>>1);
+ scratchRows[3][i] = (byte)diff;
+ badness [3] += (diff>=0)?diff:-diff;
+
+ // paeth filter
+
+ // Original code much simplier but doesn't take full
+ // advantage of relationship between pa/b/c and
+ // information gleaned in abs operations.
+ /// pa = up -upleft;
+ /// pb = left-upleft;
+ /// pc = pa+pb;
+ /// pa = abs(pa);
+ /// pb = abs(pb);
+ /// pc = abs(pc);
+ /// if ((pa <= pb) && (pa <= pc))
+ /// diff = curr-left;
+ /// else if (pb <= pc)
+ /// diff = curr-up;
+ /// else
+ /// diff = curr-upleft;
+
+ pa = up -upleft;
+ pb = left-upleft;
+ if (pa<0) {
+ if (pb<0) {
+ // both pa & pb neg so pc is always greater than or
+ // equal to pa or pb;
+ if (pa >= pb) // since pa & pb neg check sense is reversed.
+ diff = curr-left;
+ else
+ diff = curr-up;
+ } else {
+ // pa neg pb pos so we must compute pc...
+ pc = pa+pb;
+ pa=-pa;
+ if (pa <= pb) // pc is positive and less than pb
+ if (pa <= pc)
+ diff = curr-left;
+ else
+ diff = curr-upleft;
+ else
+ // pc is negative and less than or equal to pa,
+ // but since pa is greater than pb this isn't an issue...
+ if (pb <= -pc)
+ diff = curr-up;
+ else
+ diff = curr-upleft;
+ }
+ } else {
+ if (pb<0) {
+ pb =-pb; // make it positive...
+ if (pa <= pb) {
+ // pc would be negative and less than or equal to pb
+ pc = pb-pa;
+ if (pa <= pc)
+ diff = curr-left;
+ else if (pb == pc)
+ // if pa is zero then pc==pb otherwise
+ // pc must be less than pb.
+ diff = curr-up;
+ else
+ diff = curr-upleft;
+ } else {
+ // pc would be positive and less than pa.
+ pc = pa-pb;
+ if (pb <= pc)
+ diff = curr-up;
+ else
+ diff = curr-upleft;
+ }
+ } else {
+ // both pos so pa+pb is always greater than pa/pb
+ if (pa <= pb)
+ diff = curr-left;
+ else
+ diff = curr-up;
+ }
+ }
+ scratchRows[4][i] = (byte)diff;
+ badness [4] += (diff>=0)?diff:-diff;
+ }
+ int filterType = 0;
+ int minBadness = badness[0];
+
+ for (int i = 1; i < 5; i++) {
+ if (badness[i] < minBadness) {
+ minBadness = badness[i];
+ filterType = i;
+ }
+ }
+
+ if (filterType == 0) {
+ System.arraycopy(currRow, bytesPerPixel,
+ scratchRows[0], bytesPerPixel,
+ bytesPerRow);
+ }
+
+ return filterType;
+ }
+}
diff --git a/TempNewImagePackage/src/java/org/apache/xmlgraphics/image/codec/png/PNGImageDecoder.java b/TempNewImagePackage/src/java/org/apache/xmlgraphics/image/codec/png/PNGImageDecoder.java
new file mode 100644
index 0000000..d1cc0f8
--- /dev/null
+++ b/TempNewImagePackage/src/java/org/apache/xmlgraphics/image/codec/png/PNGImageDecoder.java
@@ -0,0 +1,1853 @@
+/*
+ * 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$ */
+
+package org.apache.xmlgraphics.image.codec.png;
+
+import java.awt.Color;
+import java.awt.Point;
+import java.awt.Transparency;
+import java.awt.color.ColorSpace;
+import java.awt.image.ColorModel;
+import java.awt.image.ComponentColorModel;
+import java.awt.image.DataBuffer;
+import java.awt.image.DataBufferByte;
+import java.awt.image.DataBufferUShort;
+import java.awt.image.IndexColorModel;
+import java.awt.image.Raster;
+import java.awt.image.RenderedImage;
+import java.awt.image.SampleModel;
+import java.awt.image.WritableRaster;
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.SequenceInputStream;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.zip.Inflater;
+import java.util.zip.InflaterInputStream;
+
+import org.apache.xmlgraphics.image.codec.util.ImageDecoderImpl;
+import org.apache.xmlgraphics.image.codec.util.PropertyUtil;
+import org.apache.xmlgraphics.image.codec.util.SimpleRenderedImage;
+
+/**
+ * @version $Id$
+ */
+public class PNGImageDecoder extends ImageDecoderImpl {
+
+ public PNGImageDecoder(InputStream input,
+ PNGDecodeParam param) {
+ super(input, param);
+ }
+
+ public RenderedImage decodeAsRenderedImage(int page) throws IOException {
+ if (page != 0) {
+ throw new IOException(PropertyUtil.getString("PNGImageDecoder19"));
+ }
+ return new PNGImage(input, (PNGDecodeParam)param);
+ }
+}
+
+class PNGChunk {
+ int length;
+ int type;
+ byte[] data;
+ int crc;
+
+ String typeString;
+
+ public PNGChunk(int length, int type, byte[] data, int crc) {
+ this.length = length;
+ this.type = type;
+ this.data = data;
+ this.crc = crc;
+
+ typeString = "";
+ typeString += (char)(type >> 24);
+ typeString += (char)((type >> 16) & 0xff);
+ typeString += (char)((type >> 8) & 0xff);
+ typeString += (char)(type & 0xff);
+ }
+
+ 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);
+ }
+}
+
+/**
+ * TO DO:
+ *
+ * zTXt chunks
+ *
+ */
+class PNGImage extends SimpleRenderedImage {
+
+ public static final int PNG_COLOR_GRAY = 0;
+ public static final int PNG_COLOR_RGB = 2;
+ public static final int PNG_COLOR_PALETTE = 3;
+ public static final int PNG_COLOR_GRAY_ALPHA = 4;
+ public static final int PNG_COLOR_RGB_ALPHA = 6;
+
+ private static final String[] colorTypeNames = {
+ "Grayscale", "Error", "Truecolor", "Index",
+ "Grayscale with alpha", "Error", "Truecolor with alpha"
+ };
+
+ public static final int PNG_FILTER_NONE = 0;
+ public static final int PNG_FILTER_SUB = 1;
+ public static final int PNG_FILTER_UP = 2;
+ public static final int PNG_FILTER_AVERAGE = 3;
+ public static final int PNG_FILTER_PAETH = 4;
+
+ private int[][] bandOffsets = {
+ null,
+ { 0 }, // G
+ { 0, 1 }, // GA in GA order
+ { 0, 1, 2 }, // RGB in RGB order
+ { 0, 1, 2, 3 } // RGBA in RGBA order
+ };
+
+ private int bitDepth;
+ private int colorType;
+
+ private int compressionMethod;
+ private int filterMethod;
+ private int interlaceMethod;
+
+ private int paletteEntries;
+ private byte[] redPalette;
+ private byte[] greenPalette;
+ private byte[] bluePalette;
+ private byte[] alphaPalette;
+
+ private int bkgdRed;
+ private int bkgdGreen;
+ private int bkgdBlue;
+
+ private int grayTransparentAlpha;
+ private int redTransparentAlpha;
+ private int greenTransparentAlpha;
+ private int blueTransparentAlpha;
+
+ private int maxOpacity;
+
+ private int[] significantBits = null;
+
+ // Parameter information
+
+ // If true, the user wants destination alpha where applicable.
+ private boolean suppressAlpha = false;
+
+ // If true, perform palette lookup internally
+ private boolean expandPalette = false;
+
+ // If true, output < 8 bit gray images in 8 bit components format
+ private boolean output8BitGray = false;
+
+ // Create an alpha channel in the destination color model.
+ private boolean outputHasAlphaPalette = false;
+
+ // Perform gamma correction on the image
+ private boolean performGammaCorrection = false;
+
+ // Expand GA to GGGA for compatbility with Java2D
+ private boolean expandGrayAlpha = false;
+
+ // Produce an instance of PNGEncodeParam
+ private boolean generateEncodeParam = false;
+
+ // PNGDecodeParam controlling decode process
+ private PNGDecodeParam decodeParam = null;
+
+ // PNGEncodeParam to store file details in
+ private PNGEncodeParam encodeParam = null;
+
+ private boolean emitProperties = true;
+
+ private float fileGamma = 45455/100000.0F;
+
+ private float userExponent = 1.0F;
+
+ private float displayExponent = 2.2F;
+
+ private float[] chromaticity = null;
+
+ private int sRGBRenderingIntent = -1;
+
+ // Post-processing step implied by above parameters
+ private int postProcess = POST_NONE;
+
+ // Possible post-processing steps
+
+ // Do nothing
+ private static final int POST_NONE = 0;
+
+ // Gamma correct only
+ private static final int POST_GAMMA = 1;
+
+ // Push gray values through grayLut to expand to 8 bits
+ private static final int POST_GRAY_LUT = 2;
+
+ // Push gray values through grayLut to expand to 8 bits, add alpha
+ private static final int POST_GRAY_LUT_ADD_TRANS = 3;
+
+ // Push palette value through R,G,B lookup tables
+ private static final int POST_PALETTE_TO_RGB = 4;
+
+ // Push palette value through R,G,B,A lookup tables
+ private static final int POST_PALETTE_TO_RGBA = 5;
+
+ // Add transparency to a given gray value (w/ optional gamma)
+ private static final int POST_ADD_GRAY_TRANS = 6;
+
+ // Add transparency to a given RGB value (w/ optional gamma)
+ private static final int POST_ADD_RGB_TRANS = 7;
+
+ // Remove the alpha channel from a gray image (w/ optional gamma)
+ private static final int POST_REMOVE_GRAY_TRANS = 8;
+
+ // Remove the alpha channel from an RGB image (w/optional gamma)
+ private static final int POST_REMOVE_RGB_TRANS = 9;
+
+ // Mask to add expansion of GA -> GGGA
+ private static final int POST_EXP_MASK = 16;
+
+ // Expand gray to G/G/G
+ private static final int POST_GRAY_ALPHA_EXP =
+ POST_NONE | POST_EXP_MASK;
+
+ // Expand gray to G/G/G through a gamma lut
+ private static final int POST_GAMMA_EXP =
+ POST_GAMMA | POST_EXP_MASK;
+
+ // Push gray values through grayLut to expand to 8 bits, expand, add alpha
+ private static final int POST_GRAY_LUT_ADD_TRANS_EXP =
+ POST_GRAY_LUT_ADD_TRANS | POST_EXP_MASK;
+
+ // Add transparency to a given gray value, expand
+ private static final int POST_ADD_GRAY_TRANS_EXP =
+ POST_ADD_GRAY_TRANS | POST_EXP_MASK;
+
+ private List streamVec = new ArrayList();
+ private DataInputStream dataStream;
+
+ private int bytesPerPixel; // number of bytes per input pixel
+ private int inputBands;
+ private int outputBands;
+
+ // Number of private chunks
+ private int chunkIndex = 0;
+
+ private List textKeys = new ArrayList();
+ private List textStrings = new ArrayList();
+
+ private List ztextKeys = new ArrayList();
+ private List ztextStrings = new ArrayList();
+
+ private WritableRaster theTile;
+
+ private int[] gammaLut = null;
+
+ private void initGammaLut(int bits) {
+ double exp = (double)userExponent/(fileGamma*displayExponent);
+ int numSamples = 1 << bits;
+ int maxOutSample = (bits == 16) ? 65535 : 255;
+
+ gammaLut = new int[numSamples];
+ for (int i = 0; i < numSamples; i++) {
+ double gbright = (double)i/(numSamples - 1);
+ double gamma = Math.pow(gbright, exp);
+ int igamma = (int)(gamma*maxOutSample + 0.5);
+ if (igamma > maxOutSample) {
+ igamma = maxOutSample;
+ }
+ gammaLut[i] = igamma;
+ }
+ }
+
+ private final byte[][] expandBits = {
+ null,
+ { (byte)0x00, (byte)0xff },
+ { (byte)0x00, (byte)0x55, (byte)0xaa, (byte)0xff },
+ null,
+ { (byte)0x00, (byte)0x11, (byte)0x22, (byte)0x33,
+ (byte)0x44, (byte)0x55, (byte)0x66, (byte)0x77,
+ (byte)0x88, (byte)0x99, (byte)0xaa, (byte)0xbb,
+ (byte)0xcc, (byte)0xdd, (byte)0xee, (byte)0xff }
+ };
+
+ private int[] grayLut = null;
+
+ private void initGrayLut(int bits) {
+ int len = 1 << bits;
+ grayLut = new int[len];
+
+ if (performGammaCorrection) {
+ System.arraycopy(gammaLut, 0, grayLut, 0, len);
+ } else {
+ for (int i = 0; i < len; i++) {
+ grayLut[i] = expandBits[bits][i];
+ }
+ }
+ }
+
+ public PNGImage(InputStream stream, PNGDecodeParam decodeParam)
+ throws IOException {
+
+ if (!stream.markSupported()) {
+ stream = new BufferedInputStream(stream);
+ }
+ DataInputStream distream = new DataInputStream(stream);
+
+ if (decodeParam == null) {
+ decodeParam = new PNGDecodeParam();
+ }
+ this.decodeParam = decodeParam;
+
+ // Get parameter values
+ this.suppressAlpha = decodeParam.getSuppressAlpha();
+ this.expandPalette = decodeParam.getExpandPalette();
+ this.output8BitGray = decodeParam.getOutput8BitGray();
+ this.expandGrayAlpha = decodeParam.getExpandGrayAlpha();
+ if (decodeParam.getPerformGammaCorrection()) {
+ this.userExponent = decodeParam.getUserExponent();
+ this.displayExponent = decodeParam.getDisplayExponent();
+ performGammaCorrection = true;
+ output8BitGray = true;
+ }
+ this.generateEncodeParam = decodeParam.getGenerateEncodeParam();
+
+ if (emitProperties) {
+ properties.put("file_type", "PNG v. 1.0");
+ }
+
+ try {
+ long magic = distream.readLong();
+ if (magic != 0x89504e470d0a1a0aL) {
+ String msg = PropertyUtil.getString("PNGImageDecoder0");
+ throw new RuntimeException(msg);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ String msg = PropertyUtil.getString("PNGImageDecoder1");
+ throw new RuntimeException(msg);
+ }
+
+ do {
+ try {
+ PNGChunk chunk;
+
+ String chunkType = getChunkType(distream);
+ if (chunkType.equals("IHDR")) {
+ chunk = readChunk(distream);
+ parse_IHDR_chunk(chunk);
+ } else if (chunkType.equals("PLTE")) {
+ chunk = readChunk(distream);
+ parse_PLTE_chunk(chunk);
+ } else if (chunkType.equals("IDAT")) {
+ chunk = readChunk(distream);
+ streamVec.add(new ByteArrayInputStream(chunk.getData()));
+ } else if (chunkType.equals("IEND")) {
+ chunk = readChunk(distream);
+ parse_IEND_chunk(chunk);
+ break; // fall through to the bottom
+ } else if (chunkType.equals("bKGD")) {
+ chunk = readChunk(distream);
+ parse_bKGD_chunk(chunk);
+ } else if (chunkType.equals("cHRM")) {
+ chunk = readChunk(distream);
+ parse_cHRM_chunk(chunk);
+ } else if (chunkType.equals("gAMA")) {
+ chunk = readChunk(distream);
+ parse_gAMA_chunk(chunk);
+ } else if (chunkType.equals("hIST")) {
+ chunk = readChunk(distream);
+ parse_hIST_chunk(chunk);
+ } else if (chunkType.equals("iCCP")) {
+ chunk = readChunk(distream);
+ parse_iCCP_chunk(chunk);
+ } else if (chunkType.equals("pHYs")) {
+ chunk = readChunk(distream);
+ parse_pHYs_chunk(chunk);
+ } else if (chunkType.equals("sBIT")) {
+ chunk = readChunk(distream);
+ parse_sBIT_chunk(chunk);
+ } else if (chunkType.equals("sRGB")) {
+ chunk = readChunk(distream);
+ parse_sRGB_chunk(chunk);
+ } else if (chunkType.equals("tEXt")) {
+ chunk = readChunk(distream);
+ parse_tEXt_chunk(chunk);
+ } else if (chunkType.equals("tIME")) {
+ chunk = readChunk(distream);
+ parse_tIME_chunk(chunk);
+ } else if (chunkType.equals("tRNS")) {
+ chunk = readChunk(distream);
+ parse_tRNS_chunk(chunk);
+ } else if (chunkType.equals("zTXt")) {
+ chunk = readChunk(distream);
+ parse_zTXt_chunk(chunk);
+ } else {
+ chunk = readChunk(distream);
+ // Output the chunk data in raw form
+
+ String type = chunk.getTypeString();
+ byte[] data = chunk.getData();
+ if (encodeParam != null) {
+ encodeParam.addPrivateChunk(type, data);
+ }
+ if (emitProperties) {
+ String key = "chunk_" + chunkIndex++ + ':' + type;
+ properties.put(key.toLowerCase(), data);
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ String msg = PropertyUtil.getString("PNGImageDecoder2");
+ throw new RuntimeException(msg);
+ }
+ } while (true);
+
+ // Final post-processing
+
+ if (significantBits == null) {
+ significantBits = new int[inputBands];
+ for (int i = 0; i < inputBands; i++) {
+ significantBits[i] = bitDepth;
+ }
+
+ if (emitProperties) {
+ properties.put("significant_bits", significantBits);
+ }
+ }
+ }
+
+ private static String getChunkType(DataInputStream distream) {
+ try {
+ distream.mark(8);
+ /* int length = */ distream.readInt();
+ int type = distream.readInt();
+ distream.reset();
+
+ String typeString = ""; // todo simplify this
+ typeString += (char)(type >> 24);
+ typeString += (char)((type >> 16) & 0xff);
+ typeString += (char)((type >> 8) & 0xff);
+ typeString += (char)(type & 0xff);
+ return typeString;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ private 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;
+ }
+ }
+
+ private void parse_IHDR_chunk(PNGChunk chunk) {
+ tileWidth = width = chunk.getInt4(0);
+ tileHeight = height = chunk.getInt4(4);
+
+ bitDepth = chunk.getInt1(8);
+
+ if ((bitDepth != 1) && (bitDepth != 2) && (bitDepth != 4) &&
+ (bitDepth != 8) && (bitDepth != 16)) {
+ // Error -- bad bit depth
+ String msg = PropertyUtil.getString("PNGImageDecoder3");
+ throw new RuntimeException(msg);
+ }
+ maxOpacity = (1 << bitDepth) - 1;
+
+ colorType = chunk.getInt1(9);
+ if ((colorType != PNG_COLOR_GRAY) &&
+ (colorType != PNG_COLOR_RGB) &&
+ (colorType != PNG_COLOR_PALETTE) &&
+ (colorType != PNG_COLOR_GRAY_ALPHA) &&
+ (colorType != PNG_COLOR_RGB_ALPHA)) {
+ System.out.println(PropertyUtil.getString("PNGImageDecoder4"));
+ }
+
+ if ((colorType == PNG_COLOR_RGB) && (bitDepth < 8)) {
+ // Error -- RGB images must have 8 or 16 bits
+ String msg = PropertyUtil.getString("PNGImageDecoder5");
+ throw new RuntimeException(msg);
+ }
+
+ if ((colorType == PNG_COLOR_PALETTE) && (bitDepth == 16)) {
+ // Error -- palette images must have < 16 bits
+ String msg = PropertyUtil.getString("PNGImageDecoder6");
+ throw new RuntimeException(msg);
+ }
+
+ if ((colorType == PNG_COLOR_GRAY_ALPHA) && (bitDepth < 8)) {
+ // Error -- gray/alpha images must have >= 8 bits
+ String msg = PropertyUtil.getString("PNGImageDecoder7");
+ throw new RuntimeException(msg);
+ }
+
+ if ((colorType == PNG_COLOR_RGB_ALPHA) && (bitDepth < 8)) {
+ // Error -- RGB/alpha images must have >= 8 bits
+ String msg = PropertyUtil.getString("PNGImageDecoder8");
+ throw new RuntimeException(msg);
+ }
+
+ if (emitProperties) {
+ properties.put("color_type", colorTypeNames[colorType]);
+ }
+
+ if (generateEncodeParam) {
+ if (colorType == PNG_COLOR_PALETTE) {
+ encodeParam = new PNGEncodeParam.Palette();
+ } else if (colorType == PNG_COLOR_GRAY ||
+ colorType == PNG_COLOR_GRAY_ALPHA) {
+ encodeParam = new PNGEncodeParam.Gray();
+ } else {
+ encodeParam = new PNGEncodeParam.RGB();
+ }
+ decodeParam.setEncodeParam(encodeParam);
+ }
+
+ if (encodeParam != null) {
+ encodeParam.setBitDepth(bitDepth);
+ }
+ if (emitProperties) {
+ properties.put("bit_depth", new Integer(bitDepth));
+ }
+
+ if (performGammaCorrection) {
+ // Assume file gamma is 1/2.2 unless we get a gAMA chunk
+ float gamma = (1.0F/2.2F)*(displayExponent/userExponent);
+ if (encodeParam != null) {
+ encodeParam.setGamma(gamma);
+ }
+ if (emitProperties) {
+ properties.put("gamma", new Float(gamma));
+ }
+ }
+
+ compressionMethod = chunk.getInt1(10);
+ if (compressionMethod != 0) {
+ // Error -- only know about compression method 0
+ String msg = PropertyUtil.getString("PNGImageDecoder9");
+ throw new RuntimeException(msg);
+ }
+
+ filterMethod = chunk.getInt1(11);
+ if (filterMethod != 0) {
+ // Error -- only know about filter method 0
+ String msg = PropertyUtil.getString("PNGImageDecoder10");
+ throw new RuntimeException(msg);
+ }
+
+ interlaceMethod = chunk.getInt1(12);
+ if (interlaceMethod == 0) {
+ if (encodeParam != null) {
+ encodeParam.setInterlacing(false);
+ }
+ if (emitProperties) {
+ properties.put("interlace_method", "None");
+ }
+ } else if (interlaceMethod == 1) {
+ if (encodeParam != null) {
+ encodeParam.setInterlacing(true);
+ }
+ if (emitProperties) {
+ properties.put("interlace_method", "Adam7");
+ }
+ } else {
+ // Error -- only know about Adam7 interlacing
+ String msg = PropertyUtil.getString("PNGImageDecoder11");
+ throw new RuntimeException(msg);
+ }
+
+ bytesPerPixel = (bitDepth == 16) ? 2 : 1;
+
+ switch (colorType) {
+ case PNG_COLOR_GRAY:
+ inputBands = 1;
+ outputBands = 1;
+
+ if (output8BitGray && (bitDepth < 8)) {
+ postProcess = POST_GRAY_LUT;
+ } else if (performGammaCorrection) {
+ postProcess = POST_GAMMA;
+ } else {
+ postProcess = POST_NONE;
+ }
+ break;
+
+ case PNG_COLOR_RGB:
+ inputBands = 3;
+ bytesPerPixel *= 3;
+ outputBands = 3;
+
+ if (performGammaCorrection) {
+ postProcess = POST_GAMMA;
+ } else {
+ postProcess = POST_NONE;
+ }
+ break;
+
+ case PNG_COLOR_PALETTE:
+ inputBands = 1;
+ bytesPerPixel = 1;
+ outputBands = expandPalette ? 3 : 1;
+
+ if (expandPalette) {
+ postProcess = POST_PALETTE_TO_RGB;
+ } else {
+ postProcess = POST_NONE;
+ }
+ break;
+
+ case PNG_COLOR_GRAY_ALPHA:
+ inputBands = 2;
+ bytesPerPixel *= 2;
+
+ if (suppressAlpha) {
+ outputBands = 1;
+ postProcess = POST_REMOVE_GRAY_TRANS;
+ } else {
+ if (performGammaCorrection) {
+ postProcess = POST_GAMMA;
+ } else {
+ postProcess = POST_NONE;
+ }
+ if (expandGrayAlpha) {
+ postProcess |= POST_EXP_MASK;
+ outputBands = 4;
+ } else {
+ outputBands = 2;
+ }
+ }
+ break;
+
+ case PNG_COLOR_RGB_ALPHA:
+ inputBands = 4;
+ bytesPerPixel *= 4;
+ outputBands = (!suppressAlpha) ? 4 : 3;
+
+ if (suppressAlpha) {
+ postProcess = POST_REMOVE_RGB_TRANS;
+ } else if (performGammaCorrection) {
+ postProcess = POST_GAMMA;
+ } else {
+ postProcess = POST_NONE;
+ }
+ break;
+ }
+ }
+
+ private void parse_IEND_chunk(PNGChunk chunk) throws Exception {
+ // Store text strings
+ int textLen = textKeys.size();
+ String[] textArray = new String[2*textLen];
+ for (int i = 0; i < textLen; i++) {
+ String key = (String)textKeys.get(i);
+ String val = (String)textStrings.get(i);
+ textArray[2*i] = key;
+ textArray[2*i + 1] = val;
+ if (emitProperties) {
+ String uniqueKey = "text_" + i + ':' + key;
+ properties.put(uniqueKey.toLowerCase(), val);
+ }
+ }
+ if (encodeParam != null) {
+ encodeParam.setText(textArray);
+ }
+
+ // Store compressed text strings
+ int ztextLen = ztextKeys.size();
+ String[] ztextArray = new String[2*ztextLen];
+ for (int i = 0; i < ztextLen; i++) {
+ String key = (String)ztextKeys.get(i);
+ String val = (String)ztextStrings.get(i);
+ ztextArray[2*i] = key;
+ ztextArray[2*i + 1] = val;
+ if (emitProperties) {
+ String uniqueKey = "ztext_" + i + ':' + key;
+ properties.put(uniqueKey.toLowerCase(), val);
+ }
+ }
+ if (encodeParam != null) {
+ encodeParam.setCompressedText(ztextArray);
+ }
+
+ // Parse prior IDAT chunks
+ InputStream seqStream =
+ new SequenceInputStream(Collections.enumeration(streamVec));
+ InputStream infStream =
+ new InflaterInputStream(seqStream, new Inflater());
+ dataStream = new DataInputStream(infStream);
+
+ // Create an empty WritableRaster
+ int depth = bitDepth;
+ if ((colorType == PNG_COLOR_GRAY) &&
+ (bitDepth < 8) && output8BitGray) {
+ depth = 8;
+ }
+ if ((colorType == PNG_COLOR_PALETTE) && expandPalette) {
+ depth = 8;
+ }
+ int bytesPerRow = (outputBands*width*depth + 7)/8;
+ int scanlineStride =
+ (depth == 16) ? (bytesPerRow/2) : bytesPerRow;
+
+ theTile = createRaster(width, height, outputBands,
+ scanlineStride,
+ depth);
+
+ if (performGammaCorrection && (gammaLut == null)) {
+ initGammaLut(bitDepth);
+ }
+ if ((postProcess == POST_GRAY_LUT) ||
+ (postProcess == POST_GRAY_LUT_ADD_TRANS) ||
+ (postProcess == POST_GRAY_LUT_ADD_TRANS_EXP)) {
+ initGrayLut(bitDepth);
+ }
+
+ decodeImage(interlaceMethod == 1);
+ sampleModel = theTile.getSampleModel();
+
+ if ((colorType == PNG_COLOR_PALETTE) && !expandPalette) {
+ if (outputHasAlphaPalette) {
+ colorModel = new IndexColorModel(bitDepth,
+ paletteEntries,
+ redPalette,
+ greenPalette,
+ bluePalette,
+ alphaPalette);
+ } else {
+ colorModel = new IndexColorModel(bitDepth,
+ paletteEntries,
+ redPalette,
+ greenPalette,
+ bluePalette);
+ }
+ } else if ((colorType == PNG_COLOR_GRAY) &&
+ (bitDepth < 8) && !output8BitGray) {
+ byte[] palette = expandBits[bitDepth];
+ colorModel = new IndexColorModel(bitDepth,
+ palette.length,
+ palette,
+ palette,
+ palette);
+ } else {
+ colorModel =
+ createComponentColorModel(sampleModel);
+ }
+ }
+
+ private static final int[] GrayBits8 = { 8 };
+ private static final ComponentColorModel colorModelGray8 =
+ new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_GRAY),
+ GrayBits8, false, false,
+ Transparency.OPAQUE,
+ DataBuffer.TYPE_BYTE);
+
+ private static final int[] GrayAlphaBits8 = { 8, 8 };
+ private static final ComponentColorModel colorModelGrayAlpha8 =
+ new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_GRAY),
+ GrayAlphaBits8, true, false,
+ Transparency.TRANSLUCENT,
+ DataBuffer.TYPE_BYTE);
+
+ private static final int[] GrayBits16 = { 16 };
+ private static final ComponentColorModel colorModelGray16 =
+ new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_GRAY),
+ GrayBits16, false, false,
+ Transparency.OPAQUE,
+ DataBuffer.TYPE_USHORT);
+
+ private static final int[] GrayAlphaBits16 = { 16, 16 };
+ private static final ComponentColorModel colorModelGrayAlpha16 =
+ new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_GRAY),
+ GrayAlphaBits16, true, false,
+ Transparency.TRANSLUCENT,
+ DataBuffer.TYPE_USHORT);
+
+ private static final int[] GrayBits32 = { 32 };
+ private static final ComponentColorModel colorModelGray32 =
+ new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_GRAY),
+ GrayBits32, false, false,
+ Transparency.OPAQUE,
+ DataBuffer.TYPE_INT);
+
+ private static final int[] GrayAlphaBits32 = { 32, 32 };
+ private static final ComponentColorModel colorModelGrayAlpha32 =
+ new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_GRAY),
+ GrayAlphaBits32, true, false,
+ Transparency.TRANSLUCENT,
+ DataBuffer.TYPE_INT);
+
+ private static final int[] RGBBits8 = { 8, 8, 8 };
+ private static final ComponentColorModel colorModelRGB8 =
+ new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB),
+ RGBBits8, false, false,
+ Transparency.OPAQUE,
+ DataBuffer.TYPE_BYTE);
+
+ private static final int[] RGBABits8 = { 8, 8, 8, 8 };
+ private static final ComponentColorModel colorModelRGBA8 =
+ new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB),
+ RGBABits8, true, false,
+ Transparency.TRANSLUCENT,
+ DataBuffer.TYPE_BYTE);
+
+ private static final int[] RGBBits16 = { 16, 16, 16 };
+ private static final ComponentColorModel colorModelRGB16 =
+ new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB),
+ RGBBits16, false, false,
+ Transparency.OPAQUE,
+ DataBuffer.TYPE_USHORT);
+
+ private static final int[] RGBABits16 = { 16, 16, 16, 16 };
+ private static final ComponentColorModel colorModelRGBA16 =
+ new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB),
+ RGBABits16, true, false,
+ Transparency.TRANSLUCENT,
+ DataBuffer.TYPE_USHORT);
+
+ private static final int[] RGBBits32 = { 32, 32, 32 };
+ private static final ComponentColorModel colorModelRGB32 =
+ new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB),
+ RGBBits32, false, false,
+ Transparency.OPAQUE,
+ DataBuffer.TYPE_INT);
+
+ private static final int[] RGBABits32 = { 32, 32, 32, 32 };
+ private static final ComponentColorModel colorModelRGBA32 =
+ new ComponentColorModel(ColorSpace.getInstance(ColorSpace.CS_sRGB),
+ RGBABits32, true, false,
+ Transparency.TRANSLUCENT,
+ DataBuffer.TYPE_INT);
+ /**
+ * A convenience method to create an instance of
+ * <code>ComponentColorModel</code> suitable for use with the
+ * given <code>SampleModel</code>. The <code>SampleModel</code>
+ * should have a data type of <code>DataBuffer.TYPE_BYTE</code>,
+ * <code>TYPE_USHORT</code>, or <code>TYPE_INT</code> and between
+ * 1 and 4 bands. Depending on the number of bands of the
+ * <code>SampleModel</code>, either a gray, gray+alpha, rgb, or
+ * rgb+alpha <code>ColorModel</code> is returned.
+ */
+ public static ColorModel createComponentColorModel(SampleModel sm) {
+ int type = sm.getDataType();
+ int bands = sm.getNumBands();
+ ComponentColorModel cm = null;
+
+ if (type == DataBuffer.TYPE_BYTE) {
+ switch (bands) {
+ case 1:
+ cm = colorModelGray8;
+ break;
+ case 2:
+ cm = colorModelGrayAlpha8;
+ break;
+ case 3:
+ cm = colorModelRGB8;
+ break;
+ case 4:
+ cm = colorModelRGBA8;
+ break;
+ }
+ } else if (type == DataBuffer.TYPE_USHORT) {
+ switch (bands) {
+ case 1:
+ cm = colorModelGray16;
+ break;
+ case 2:
+ cm = colorModelGrayAlpha16;
+ break;
+ case 3:
+ cm = colorModelRGB16;
+ break;
+ case 4:
+ cm = colorModelRGBA16;
+ break;
+ }
+ } else if (type == DataBuffer.TYPE_INT) {
+ switch (bands) {
+ case 1:
+ cm = colorModelGray32;
+ break;
+ case 2:
+ cm = colorModelGrayAlpha32;
+ break;
+ case 3:
+ cm = colorModelRGB32;
+ break;
+ case 4:
+ cm = colorModelRGBA32;
+ break;
+ }
+ }
+
+ return cm;
+ }
+
+ private void parse_PLTE_chunk(PNGChunk chunk) {
+ paletteEntries = chunk.getLength()/3;
+ redPalette = new byte[paletteEntries];
+ greenPalette = new byte[paletteEntries];
+ bluePalette = new byte[paletteEntries];
+
+ int pltIndex = 0;
+
+ // gAMA chunk must precede PLTE chunk
+ if (performGammaCorrection) {
+ if (gammaLut == null) {
+ initGammaLut(bitDepth == 16 ? 16 : 8);
+ }
+
+ for (int i = 0; i < paletteEntries; i++) {
+ byte r = chunk.getByte(pltIndex++);
+ byte g = chunk.getByte(pltIndex++);
+ byte b = chunk.getByte(pltIndex++);
+
+ redPalette[i] = (byte)gammaLut[r & 0xff];
+ greenPalette[i] = (byte)gammaLut[g & 0xff];
+ bluePalette[i] = (byte)gammaLut[b & 0xff];
+ }
+ } else {
+ for (int i = 0; i < paletteEntries; i++) {
+ redPalette[i] = chunk.getByte(pltIndex++);
+ greenPalette[i] = chunk.getByte(pltIndex++);
+ bluePalette[i] = chunk.getByte(pltIndex++);
+ }
+ }
+ }
+
+ private void parse_bKGD_chunk(PNGChunk chunk) {
+ switch (colorType) {
+ case PNG_COLOR_PALETTE:
+ int bkgdIndex = chunk.getByte(0) & 0xff;
+
+ bkgdRed = redPalette[bkgdIndex] & 0xff;
+ bkgdGreen = greenPalette[bkgdIndex] & 0xff;
+ bkgdBlue = bluePalette[bkgdIndex] & 0xff;
+
+ if (encodeParam != null) {
+ ((PNGEncodeParam.Palette)encodeParam).
+ setBackgroundPaletteIndex(bkgdIndex);
+ }
+ break;
+ case PNG_COLOR_GRAY: case PNG_COLOR_GRAY_ALPHA:
+ int bkgdGray = chunk.getInt2(0);
+ bkgdRed = bkgdGreen = bkgdBlue = bkgdGray;
+
+ if (encodeParam != null) {
+ ((PNGEncodeParam.Gray)encodeParam).
+ setBackgroundGray(bkgdGray);
+ }
+ break;
+ case PNG_COLOR_RGB: case PNG_COLOR_RGB_ALPHA:
+ bkgdRed = chunk.getInt2(0);
+ bkgdGreen = chunk.getInt2(2);
+ bkgdBlue = chunk.getInt2(4);
+
+ int[] bkgdRGB = new int[3];
+ bkgdRGB[0] = bkgdRed;
+ bkgdRGB[1] = bkgdGreen;
+ bkgdRGB[2] = bkgdBlue;
+ if (encodeParam != null) {
+ ((PNGEncodeParam.RGB)encodeParam).
+ setBackgroundRGB(bkgdRGB);
+ }
+ break;
+ }
+
+ int r = 0, g = 0, b = 0;
+ if (bitDepth < 8) {
+ r = expandBits[bitDepth][bkgdRed];
+ g = expandBits[bitDepth][bkgdGreen];
+ b = expandBits[bitDepth][bkgdBlue];
+ } else if (bitDepth == 8) {
+ r = bkgdRed;
+ g = bkgdGreen;
+ b = bkgdBlue;
+ } else if (bitDepth == 16) {
+ r = bkgdRed >> 8;
+ g = bkgdGreen >> 8;
+ b = bkgdBlue >> 8;
+ }
+ if (emitProperties) {
+ properties.put("background_color", new Color(r, g, b));
+ }
+ }
+
+ private void parse_cHRM_chunk(PNGChunk chunk) {
+ // If an sRGB chunk exists, ignore cHRM chunks
+ if (sRGBRenderingIntent != -1) {
+ return;
+ }
+
+ chromaticity = new float[8];
+ chromaticity[0] = chunk.getInt4(0)/100000.0F;
+ chromaticity[1] = chunk.getInt4(4)/100000.0F;
+ chromaticity[2] = chunk.getInt4(8)/100000.0F;
+ chromaticity[3] = chunk.getInt4(12)/100000.0F;
+ chromaticity[4] = chunk.getInt4(16)/100000.0F;
+ chromaticity[5] = chunk.getInt4(20)/100000.0F;
+ chromaticity[6] = chunk.getInt4(24)/100000.0F;
+ chromaticity[7] = chunk.getInt4(28)/100000.0F;
+
+ if (encodeParam != null) {
+ encodeParam.setChromaticity(chromaticity);
+ }
+ if (emitProperties) {
+ properties.put("white_point_x", new Float(chromaticity[0]));
+ properties.put("white_point_y", new Float(chromaticity[1]));
+ properties.put("red_x", new Float(chromaticity[2]));
+ properties.put("red_y", new Float(chromaticity[3]));
+ properties.put("green_x", new Float(chromaticity[4]));
+ properties.put("green_y", new Float(chromaticity[5]));
+ properties.put("blue_x", new Float(chromaticity[6]));
+ properties.put("blue_y", new Float(chromaticity[7]));
+ }
+ }
+
+ private void parse_gAMA_chunk(PNGChunk chunk) {
+ // If an sRGB chunk exists, ignore gAMA chunks
+ if (sRGBRenderingIntent != -1) {
+ return;
+ }
+
+ fileGamma = chunk.getInt4(0)/100000.0F;
+
+