Initial commit of Roster
This commit is contained in:
@@ -0,0 +1,202 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
APPENDIX: How to apply the Apache License to your work.
|
||||
|
||||
To apply the Apache License to your work, attach the following
|
||||
boilerplate notice, with the fields enclosed by brackets "[]"
|
||||
replaced with your own identifying information. (Don't include
|
||||
the brackets!) The text should be enclosed in the appropriate
|
||||
comment syntax for the file format. We also recommend that a
|
||||
file or class name and description of purpose be included on the
|
||||
same "printed page" as the copyright notice for easier
|
||||
identification within third-party archives.
|
||||
|
||||
Copyright [yyyy] [name of copyright owner]
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
@@ -0,0 +1,26 @@
|
||||
Copyright (c) <year> <owner>.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification,
|
||||
are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice, this
|
||||
list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation and/or
|
||||
other materials provided with the distribution.
|
||||
|
||||
3. Neither the name of the copyright holder nor the names of its contributors
|
||||
may be used to endorse or promote products derived from this software without
|
||||
specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
|
||||
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
@@ -0,0 +1,317 @@
|
||||
Creative Commons Attribution 4.0 International Public License
|
||||
|
||||
By exercising the Licensed Rights (defined below), You accept and agree
|
||||
to be bound by the terms and conditions of this Creative Commons
|
||||
Attribution 4.0 International Public License ("Public License"). To the
|
||||
extent this Public License may be interpreted as a contract, You are
|
||||
granted the Licensed Rights in consideration of Your acceptance of
|
||||
these terms and conditions, and the Licensor grants You such rights in
|
||||
consideration of benefits the Licensor receives from making the
|
||||
Licensed Material available under these terms and conditions.
|
||||
|
||||
|
||||
Section 1 -- Definitions.
|
||||
|
||||
a. Adapted Material means material subject to Copyright and Similar
|
||||
Rights that is derived from or based upon the Licensed Material
|
||||
and in which the Licensed Material is translated, altered,
|
||||
arranged, transformed, or otherwise modified in a manner requiring
|
||||
permission under the Copyright and Similar Rights held by the
|
||||
Licensor. For purposes of this Public License, where the Licensed
|
||||
Material is a musical work, performance, or sound recording,
|
||||
Adapted Material is always produced where the Licensed Material is
|
||||
synched in timed relation with a moving image.
|
||||
|
||||
b. Adapter's License means the license You apply to Your Copyright
|
||||
and Similar Rights in Your contributions to Adapted Material in
|
||||
accordance with the terms and conditions of this Public License.
|
||||
|
||||
c. Copyright and Similar Rights means copyright and/or similar rights
|
||||
closely related to copyright including, without limitation,
|
||||
performance, broadcast, sound recording, and Sui Generis Database
|
||||
Rights, without regard to how the rights are labeled or
|
||||
categorized. For purposes of this Public License, the rights
|
||||
specified in Section 2(b)(1)-(2) are not Copyright and Similar
|
||||
Rights.
|
||||
|
||||
d. Effective Technological Measures means those measures that, in the
|
||||
absence of proper authority, may not be circumvented under laws
|
||||
fulfilling obligations under Article 11 of the WIPO Copyright
|
||||
Treaty adopted on December 20, 1996, and/or similar international
|
||||
agreements.
|
||||
|
||||
e. Exceptions and Limitations means fair use, fair dealing, and/or
|
||||
any other exception or limitation to Copyright and Similar Rights
|
||||
that applies to Your use of the Licensed Material.
|
||||
|
||||
f. Licensed Material means the artistic or literary work, database,
|
||||
or other material to which the Licensor applied this Public
|
||||
License.
|
||||
|
||||
g. Licensed Rights means the rights granted to You subject to the
|
||||
terms and conditions of this Public License, which are limited to
|
||||
all Copyright and Similar Rights that apply to Your use of the
|
||||
Licensed Material and that the Licensor has authority to license.
|
||||
|
||||
h. Licensor means the individual(s) or entity(ies) granting rights
|
||||
under this Public License.
|
||||
|
||||
i. Share means to provide material to the public by any means or
|
||||
process that requires permission under the Licensed Rights, such
|
||||
as reproduction, public display, public performance, distribution,
|
||||
dissemination, communication, or importation, and to make material
|
||||
available to the public including in ways that members of the
|
||||
public may access the material from a place and at a time
|
||||
individually chosen by them.
|
||||
|
||||
j. Sui Generis Database Rights means rights other than copyright
|
||||
resulting from Directive 96/9/EC of the European Parliament and of
|
||||
the Council of 11 March 1996 on the legal protection of databases,
|
||||
as amended and/or succeeded, as well as other essentially
|
||||
equivalent rights anywhere in the world.
|
||||
|
||||
k. You means the individual or entity exercising the Licensed Rights
|
||||
under this Public License. Your has a corresponding meaning.
|
||||
|
||||
|
||||
Section 2 -- Scope.
|
||||
|
||||
a. License grant.
|
||||
|
||||
1. Subject to the terms and conditions of this Public License,
|
||||
the Licensor hereby grants You a worldwide, royalty-free,
|
||||
non-sublicensable, non-exclusive, irrevocable license to
|
||||
exercise the Licensed Rights in the Licensed Material to:
|
||||
|
||||
a. reproduce and Share the Licensed Material, in whole or
|
||||
in part; and
|
||||
|
||||
b. produce, reproduce, and Share Adapted Material.
|
||||
|
||||
2. Exceptions and Limitations. For the avoidance of doubt, where
|
||||
Exceptions and Limitations apply to Your use, this Public
|
||||
License does not apply, and You do not need to comply with
|
||||
its terms and conditions.
|
||||
|
||||
3. Term. The term of this Public License is specified in Section
|
||||
6(a).
|
||||
|
||||
4. Media and formats; technical modifications allowed. The
|
||||
Licensor authorizes You to exercise the Licensed Rights in
|
||||
all media and formats whether now known or hereafter created,
|
||||
and to make technical modifications necessary to do so. The
|
||||
Licensor waives and/or agrees not to assert any right or
|
||||
authority to forbid You from making technical modifications
|
||||
necessary to exercise the Licensed Rights, including
|
||||
technical modifications necessary to circumvent Effective
|
||||
Technological Measures. For purposes of this Public License,
|
||||
simply making modifications authorized by this Section 2(a)
|
||||
(4) never produces Adapted Material.
|
||||
|
||||
5. Downstream recipients.
|
||||
|
||||
a. Offer from the Licensor -- Licensed Material. Every
|
||||
recipient of the Licensed Material automatically
|
||||
receives an offer from the Licensor to exercise the
|
||||
Licensed Rights under the terms and conditions of this
|
||||
Public License.
|
||||
|
||||
b. No downstream restrictions. You may not offer or impose
|
||||
any additional or different terms or conditions on, or
|
||||
apply any Effective Technological Measures to, the
|
||||
Licensed Material if doing so restricts exercise of the
|
||||
Licensed Rights by any recipient of the Licensed
|
||||
Material.
|
||||
|
||||
6. No endorsement. Nothing in this Public License constitutes or
|
||||
may be construed as permission to assert or imply that You
|
||||
are, or that Your use of the Licensed Material is, connected
|
||||
with, or sponsored, endorsed, or granted official status by,
|
||||
the Licensor or others designated to receive attribution as
|
||||
provided in Section 3(a)(1)(A)(i).
|
||||
|
||||
b. Other rights.
|
||||
|
||||
1. Moral rights, such as the right of integrity, are not
|
||||
licensed under this Public License, nor are publicity,
|
||||
privacy, and/or other similar personality rights; however, to
|
||||
the extent possible, the Licensor waives and/or agrees not to
|
||||
assert any such rights held by the Licensor to the limited
|
||||
extent necessary to allow You to exercise the Licensed
|
||||
Rights, but not otherwise.
|
||||
|
||||
2. Patent and trademark rights are not licensed under this
|
||||
Public License.
|
||||
|
||||
3. To the extent possible, the Licensor waives any right to
|
||||
collect royalties from You for the exercise of the Licensed
|
||||
Rights, whether directly or through a collecting society
|
||||
under any voluntary or waivable statutory or compulsory
|
||||
licensing scheme. In all other cases the Licensor expressly
|
||||
reserves any right to collect such royalties.
|
||||
|
||||
|
||||
Section 3 -- License Conditions.
|
||||
|
||||
Your exercise of the Licensed Rights is expressly made subject to the
|
||||
following conditions.
|
||||
|
||||
a. Attribution.
|
||||
|
||||
1. If You Share the Licensed Material (including in modified
|
||||
form), You must:
|
||||
|
||||
a. retain the following if it is supplied by the Licensor
|
||||
with the Licensed Material:
|
||||
|
||||
i. identification of the creator(s) of the Licensed
|
||||
Material and any others designated to receive
|
||||
attribution, in any reasonable manner requested by
|
||||
the Licensor (including by pseudonym if
|
||||
designated);
|
||||
|
||||
ii. a copyright notice;
|
||||
|
||||
iii. a notice that refers to this Public License;
|
||||
|
||||
iv. a notice that refers to the disclaimer of
|
||||
warranties;
|
||||
|
||||
v. a URI or hyperlink to the Licensed Material to the
|
||||
extent reasonably practicable;
|
||||
|
||||
b. indicate if You modified the Licensed Material and
|
||||
retain an indication of any previous modifications; and
|
||||
|
||||
c. indicate the Licensed Material is licensed under this
|
||||
Public License, and include the text of, or the URI or
|
||||
hyperlink to, this Public License.
|
||||
|
||||
2. You may satisfy the conditions in Section 3(a)(1) in any
|
||||
reasonable manner based on the medium, means, and context in
|
||||
which You Share the Licensed Material. For example, it may be
|
||||
reasonable to satisfy the conditions by providing a URI or
|
||||
hyperlink to a resource that includes the required
|
||||
information.
|
||||
|
||||
3. If requested by the Licensor, You must remove any of the
|
||||
information required by Section 3(a)(1)(A) to the extent
|
||||
reasonably practicable.
|
||||
|
||||
4. If You Share Adapted Material You produce, the Adapter's
|
||||
License You apply must not prevent recipients of the Adapted
|
||||
Material from complying with this Public License.
|
||||
|
||||
|
||||
Section 4 -- Sui Generis Database Rights.
|
||||
|
||||
Where the Licensed Rights include Sui Generis Database Rights that
|
||||
apply to Your use of the Licensed Material:
|
||||
|
||||
a. for the avoidance of doubt, Section 2(a)(1) grants You the right
|
||||
to extract, reuse, reproduce, and Share all or a substantial
|
||||
portion of the contents of the database;
|
||||
|
||||
b. if You include all or a substantial portion of the database
|
||||
contents in a database in which You have Sui Generis Database
|
||||
Rights, then the database in which You have Sui Generis Database
|
||||
Rights (but not its individual contents) is Adapted Material; and
|
||||
|
||||
c. You must comply with the conditions in Section 3(a) if You Share
|
||||
all or a substantial portion of the contents of the database.
|
||||
|
||||
For the avoidance of doubt, this Section 4 supplements and does not
|
||||
replace Your obligations under this Public License where the Licensed
|
||||
Rights include other Copyright and Similar Rights.
|
||||
|
||||
|
||||
Section 5 -- Disclaimer of Warranties and Limitation of Liability.
|
||||
|
||||
a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE
|
||||
EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS
|
||||
AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF
|
||||
ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS,
|
||||
IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION,
|
||||
WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||
PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS,
|
||||
ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT
|
||||
KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT
|
||||
ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU.
|
||||
|
||||
b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE
|
||||
TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION,
|
||||
NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT,
|
||||
INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES,
|
||||
COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR
|
||||
USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN
|
||||
ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR
|
||||
DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR
|
||||
IN PART, THIS LIMITATION MAY NOT APPLY TO YOU.
|
||||
|
||||
c. The disclaimer of warranties and limitation of liability provided
|
||||
above shall be interpreted in a manner that, to the extent
|
||||
possible, most closely approximates an absolute disclaimer and
|
||||
waiver of all liability.
|
||||
|
||||
|
||||
Section 6 -- Term and Termination.
|
||||
|
||||
a. This Public License applies for the term of the Copyright and
|
||||
Similar Rights licensed here. However, if You fail to comply with
|
||||
this Public License, then Your rights under this Public License
|
||||
terminate automatically.
|
||||
|
||||
b. Where Your right to use the Licensed Material has terminated under
|
||||
Section 6(a), it reinstates:
|
||||
|
||||
1. automatically as of the date the violation is cured, provided
|
||||
it is cured within 30 days of Your discovery of the
|
||||
violation; or
|
||||
|
||||
2. upon express reinstatement by the Licensor.
|
||||
|
||||
For the avoidance of doubt, this Section 6(b) does not affect any
|
||||
right the Licensor may have to seek remedies for Your violations
|
||||
of this Public License.
|
||||
|
||||
c. For the avoidance of doubt, the Licensor may also offer the
|
||||
Licensed Material under separate terms or conditions or stop
|
||||
distributing the Licensed Material at any time; however, doing so
|
||||
will not terminate this Public License.
|
||||
|
||||
d. Sections 1, 5, 6, 7, and 8 survive termination of this Public
|
||||
License.
|
||||
|
||||
|
||||
Section 7 -- Other Terms and Conditions.
|
||||
|
||||
a. The Licensor shall not be bound by any additional or different
|
||||
terms or conditions communicated by You unless expressly agreed.
|
||||
|
||||
b. Any arrangements, understandings, or agreements regarding the
|
||||
Licensed Material not stated herein are separate from and
|
||||
independent of the terms and conditions of this Public License.
|
||||
|
||||
|
||||
Section 8 -- Interpretation.
|
||||
|
||||
a. For the avoidance of doubt, this Public License does not, and
|
||||
shall not be interpreted to, reduce, limit, restrict, or impose
|
||||
conditions on any use of the Licensed Material that could lawfully
|
||||
be made without permission under this Public License.
|
||||
|
||||
b. To the extent possible, if any provision of this Public License is
|
||||
deemed unenforceable, it shall be automatically reformed to the
|
||||
minimum extent necessary to make it enforceable. If the provision
|
||||
cannot be reformed, it shall be severed from this Public License
|
||||
without affecting the enforceability of the remaining terms and
|
||||
conditions.
|
||||
|
||||
c. No term or condition of this Public License will be waived and no
|
||||
failure to comply consented to unless expressly agreed to by the
|
||||
Licensor.
|
||||
|
||||
d. Nothing in this Public License constitutes or may be interpreted
|
||||
as a limitation upon, or waiver of, any privileges and immunities
|
||||
that apply to the Licensor or You, including from the legal
|
||||
processes of any jurisdiction or authority.
|
||||
@@ -0,0 +1 @@
|
||||
pip
|
||||
+972
@@ -0,0 +1,972 @@
|
||||
# BEGIN libpng license
|
||||
|
||||
PNG Reference Library License version 2
|
||||
---------------------------------------
|
||||
|
||||
* Copyright (c) 1995-2019 The PNG Reference Library Authors.
|
||||
* Copyright (c) 2018-2019 Cosmin Truta.
|
||||
* Copyright (c) 2000-2002, 2004, 2006-2018 Glenn Randers-Pehrson.
|
||||
* Copyright (c) 1996-1997 Andreas Dilger.
|
||||
* Copyright (c) 1995-1996 Guy Eric Schalnat, Group 42, Inc.
|
||||
|
||||
The software is supplied "as is", without warranty of any kind,
|
||||
express or implied, including, without limitation, the warranties
|
||||
of merchantability, fitness for a particular purpose, title, and
|
||||
non-infringement. In no event shall the Copyright owners, or
|
||||
anyone distributing the software, be liable for any damages or
|
||||
other liability, whether in contract, tort or otherwise, arising
|
||||
from, out of, or in connection with the software, or the use or
|
||||
other dealings in the software, even if advised of the possibility
|
||||
of such damage.
|
||||
|
||||
Permission is hereby granted to use, copy, modify, and distribute
|
||||
this software, or portions hereof, for any purpose, without fee,
|
||||
subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you
|
||||
must not claim that you wrote the original software. If you
|
||||
use this software in a product, an acknowledgment in the product
|
||||
documentation would be appreciated, but is not required.
|
||||
|
||||
2. Altered source versions must be plainly marked as such, and must
|
||||
not be misrepresented as being the original software.
|
||||
|
||||
3. This Copyright notice may not be removed or altered from any
|
||||
source or altered source distribution.
|
||||
|
||||
# END libpng license
|
||||
|
||||
|
||||
# BEGIN LibTIFF License
|
||||
|
||||
Copyright © 1988-1997 Sam Leffler\
|
||||
Copyright © 1991-1997 Silicon Graphics, Inc.
|
||||
|
||||
Permission to use, copy, modify, distribute, and sell this software and
|
||||
its documentation for any purpose is hereby granted without fee, provided
|
||||
that (i) the above copyright notices and this permission notice appear in
|
||||
all copies of the software and related documentation, and (ii) the names of
|
||||
Sam Leffler and Silicon Graphics may not be used in any advertising or
|
||||
publicity relating to the software without the specific, prior written
|
||||
permission of Sam Leffler and Silicon Graphics.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
|
||||
WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
|
||||
ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
|
||||
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
|
||||
LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||
OF THIS SOFTWARE.
|
||||
|
||||
# END LibTIFF License
|
||||
|
||||
|
||||
# BEGIN agg23 (Anti-Grain Geometry 2.3) license note
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// Anti-Grain Geometry - Version 2.3
|
||||
// Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
|
||||
//
|
||||
// Permission to copy, use, modify, sell and distribute this software
|
||||
// is granted provided this copyright notice appears in all copies.
|
||||
// This software is provided "as is" without express or implied
|
||||
// warranty, and with no claim as to its suitability for any purpose.
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
// Contact: [email protected]
|
||||
// [email protected]
|
||||
// http://www.antigrain.com
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
# END agg23 (Anti-Grain Geometry 2.3) license note
|
||||
|
||||
|
||||
# BEGIN FreeType license
|
||||
|
||||
The FreeType Project LICENSE
|
||||
----------------------------
|
||||
|
||||
2006-Jan-27
|
||||
|
||||
Copyright 1996-2002, 2006 by
|
||||
David Turner, Robert Wilhelm, and Werner Lemberg
|
||||
|
||||
|
||||
|
||||
Introduction
|
||||
============
|
||||
|
||||
The FreeType Project is distributed in several archive packages;
|
||||
some of them may contain, in addition to the FreeType font engine,
|
||||
various tools and contributions which rely on, or relate to, the
|
||||
FreeType Project.
|
||||
|
||||
This license applies to all files found in such packages, and
|
||||
which do not fall under their own explicit license. The license
|
||||
affects thus the FreeType font engine, the test programs,
|
||||
documentation and makefiles, at the very least.
|
||||
|
||||
This license was inspired by the BSD, Artistic, and IJG
|
||||
(Independent JPEG Group) licenses, which all encourage inclusion
|
||||
and use of free software in commercial and freeware products
|
||||
alike. As a consequence, its main points are that:
|
||||
|
||||
o We don't promise that this software works. However, we will be
|
||||
interested in any kind of bug reports. (`as is' distribution)
|
||||
|
||||
o You can use this software for whatever you want, in parts or
|
||||
full form, without having to pay us. (`royalty-free' usage)
|
||||
|
||||
o You may not pretend that you wrote this software. If you use
|
||||
it, or only parts of it, in a program, you must acknowledge
|
||||
somewhere in your documentation that you have used the
|
||||
FreeType code. (`credits')
|
||||
|
||||
We specifically permit and encourage the inclusion of this
|
||||
software, with or without modifications, in commercial products.
|
||||
We disclaim all warranties covering The FreeType Project and
|
||||
assume no liability related to The FreeType Project.
|
||||
|
||||
|
||||
Finally, many people asked us for a preferred form for a
|
||||
credit/disclaimer to use in compliance with this license. We thus
|
||||
encourage you to use the following text:
|
||||
|
||||
"""
|
||||
Portions of this software are copyright © <year> The FreeType
|
||||
Project (www.freetype.org). All rights reserved.
|
||||
"""
|
||||
|
||||
Please replace <year> with the value from the FreeType version you
|
||||
actually use.
|
||||
|
||||
|
||||
Legal Terms
|
||||
===========
|
||||
|
||||
0. Definitions
|
||||
--------------
|
||||
|
||||
Throughout this license, the terms `package', `FreeType Project',
|
||||
and `FreeType archive' refer to the set of files originally
|
||||
distributed by the authors (David Turner, Robert Wilhelm, and
|
||||
Werner Lemberg) as the `FreeType Project', be they named as alpha,
|
||||
beta or final release.
|
||||
|
||||
`You' refers to the licensee, or person using the project, where
|
||||
`using' is a generic term including compiling the project's source
|
||||
code as well as linking it to form a `program' or `executable'.
|
||||
This program is referred to as `a program using the FreeType
|
||||
engine'.
|
||||
|
||||
This license applies to all files distributed in the original
|
||||
FreeType Project, including all source code, binaries and
|
||||
documentation, unless otherwise stated in the file in its
|
||||
original, unmodified form as distributed in the original archive.
|
||||
If you are unsure whether or not a particular file is covered by
|
||||
this license, you must contact us to verify this.
|
||||
|
||||
The FreeType Project is copyright (C) 1996-2000 by David Turner,
|
||||
Robert Wilhelm, and Werner Lemberg. All rights reserved except as
|
||||
specified below.
|
||||
|
||||
1. No Warranty
|
||||
--------------
|
||||
|
||||
THE FREETYPE PROJECT IS PROVIDED `AS IS' WITHOUT WARRANTY OF ANY
|
||||
KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
|
||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE. IN NO EVENT WILL ANY OF THE AUTHORS OR COPYRIGHT HOLDERS
|
||||
BE LIABLE FOR ANY DAMAGES CAUSED BY THE USE OR THE INABILITY TO
|
||||
USE, OF THE FREETYPE PROJECT.
|
||||
|
||||
2. Redistribution
|
||||
-----------------
|
||||
|
||||
This license grants a worldwide, royalty-free, perpetual and
|
||||
irrevocable right and license to use, execute, perform, compile,
|
||||
display, copy, create derivative works of, distribute and
|
||||
sublicense the FreeType Project (in both source and object code
|
||||
forms) and derivative works thereof for any purpose; and to
|
||||
authorize others to exercise some or all of the rights granted
|
||||
herein, subject to the following conditions:
|
||||
|
||||
o Redistribution of source code must retain this license file
|
||||
(`FTL.TXT') unaltered; any additions, deletions or changes to
|
||||
the original files must be clearly indicated in accompanying
|
||||
documentation. The copyright notices of the unaltered,
|
||||
original files must be preserved in all copies of source
|
||||
files.
|
||||
|
||||
o Redistribution in binary form must provide a disclaimer that
|
||||
states that the software is based in part of the work of the
|
||||
FreeType Team, in the distribution documentation. We also
|
||||
encourage you to put an URL to the FreeType web page in your
|
||||
documentation, though this isn't mandatory.
|
||||
|
||||
These conditions apply to any software derived from or based on
|
||||
the FreeType Project, not just the unmodified files. If you use
|
||||
our work, you must acknowledge us. However, no fee need be paid
|
||||
to us.
|
||||
|
||||
3. Advertising
|
||||
--------------
|
||||
|
||||
Neither the FreeType authors and contributors nor you shall use
|
||||
the name of the other for commercial, advertising, or promotional
|
||||
purposes without specific prior written permission.
|
||||
|
||||
We suggest, but do not require, that you use one or more of the
|
||||
following phrases to refer to this software in your documentation
|
||||
or advertising materials: `FreeType Project', `FreeType Engine',
|
||||
`FreeType library', or `FreeType Distribution'.
|
||||
|
||||
As you have not signed this license, you are not required to
|
||||
accept it. However, as the FreeType Project is copyrighted
|
||||
material, only this license, or another one contracted with the
|
||||
authors, grants you the right to use, distribute, and modify it.
|
||||
Therefore, by using, distributing, or modifying the FreeType
|
||||
Project, you indicate that you understand and accept all the terms
|
||||
of this license.
|
||||
|
||||
4. Contacts
|
||||
-----------
|
||||
|
||||
There are two mailing lists related to FreeType:
|
||||
|
||||
o [email protected]
|
||||
|
||||
Discusses general use and applications of FreeType, as well as
|
||||
future and wanted additions to the library and distribution.
|
||||
If you are looking for support, start in this list if you
|
||||
haven't found anything to help you in the documentation.
|
||||
|
||||
o [email protected]
|
||||
|
||||
Discusses bugs, as well as engine internals, design issues,
|
||||
specific licenses, porting, etc.
|
||||
|
||||
Our home page can be found at
|
||||
|
||||
https://www.freetype.org
|
||||
|
||||
# END FreeType license
|
||||
|
||||
|
||||
# BEGIN lcms license note
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
//
|
||||
// Little Color Management System
|
||||
// Copyright (c) 1998-2020 Marti Maria Saguer
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining
|
||||
// a copy of this software and associated documentation files (the "Software"),
|
||||
// to deal in the Software without restriction, including without limitation
|
||||
// the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
// and/or sell copies of the Software, and to permit persons to whom the Software
|
||||
// is furnished to do so, subject to the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be included in
|
||||
// all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
|
||||
// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
//
|
||||
//---------------------------------------------------------------------------------
|
||||
//
|
||||
|
||||
# END lcms license note
|
||||
|
||||
|
||||
# BEGIN openjpeg license note
|
||||
|
||||
/*
|
||||
* The copyright in this software is being made available under the 2-clauses
|
||||
* BSD License, included below. This software may be subject to other third
|
||||
* party and contributor rights, including patent rights, and no such rights
|
||||
* are granted under this license.
|
||||
*
|
||||
* Copyright (c) 2002-2014, Universite catholique de Louvain (UCL), Belgium
|
||||
* Copyright (c) 2002-2014, Professor Benoit Macq
|
||||
* Copyright (c) 2001-2003, David Janssens
|
||||
* Copyright (c) 2002-2003, Yannick Verschueren
|
||||
* Copyright (c) 2003-2007, Francois-Olivier Devaux
|
||||
* Copyright (c) 2003-2014, Antonin Descampe
|
||||
* Copyright (c) 2005, Herve Drolon, FreeImage Team
|
||||
* Copyright (c) 2008, 2011-2012, Centre National d'Etudes Spatiales (CNES), FR
|
||||
* Copyright (c) 2012, CS Systemes d'Information, France
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS'
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
# END openjpeg license note
|
||||
|
||||
|
||||
# BEGIN zlib license
|
||||
|
||||
/* zlib.h -- interface of the 'zlib' general purpose compression library
|
||||
version 1.2.11, January 15th, 2017
|
||||
|
||||
Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
|
||||
|
||||
This software is provided 'as-is', without any express or implied
|
||||
warranty. In no event will the authors be held liable for any damages
|
||||
arising from the use of this software.
|
||||
|
||||
Permission is granted to anyone to use this software for any purpose,
|
||||
including commercial applications, and to alter it and redistribute it
|
||||
freely, subject to the following restrictions:
|
||||
|
||||
1. The origin of this software must not be misrepresented; you must not
|
||||
claim that you wrote the original software. If you use this software
|
||||
in a product, an acknowledgment in the product documentation would be
|
||||
appreciated but is not required.
|
||||
2. Altered source versions must be plainly marked as such, and must not be
|
||||
misrepresented as being the original software.
|
||||
3. This notice may not be removed or altered from any source distribution.
|
||||
|
||||
Jean-loup Gailly Mark Adler
|
||||
[email protected] [email protected]
|
||||
|
||||
*/
|
||||
|
||||
# END zlib license
|
||||
|
||||
|
||||
# BEGIN libjpeg-turbo license file
|
||||
|
||||
libjpeg-turbo Licenses
|
||||
======================
|
||||
|
||||
libjpeg-turbo is covered by three compatible BSD-style open source licenses:
|
||||
|
||||
- The IJG (Independent JPEG Group) License, which is listed in
|
||||
[README.ijg](README.ijg)
|
||||
|
||||
This license applies to the libjpeg API library and associated programs
|
||||
(any code inherited from libjpeg, and any modifications to that code.)
|
||||
|
||||
- The Modified (3-clause) BSD License, which is listed below
|
||||
|
||||
This license covers the TurboJPEG API library and associated programs, as
|
||||
well as the build system.
|
||||
|
||||
- The [zlib License](https://opensource.org/licenses/Zlib)
|
||||
|
||||
This license is a subset of the other two, and it covers the libjpeg-turbo
|
||||
SIMD extensions.
|
||||
|
||||
|
||||
Complying with the libjpeg-turbo Licenses
|
||||
=========================================
|
||||
|
||||
This section provides a roll-up of the libjpeg-turbo licensing terms, to the
|
||||
best of our understanding.
|
||||
|
||||
1. If you are distributing a modified version of the libjpeg-turbo source,
|
||||
then:
|
||||
|
||||
1. You cannot alter or remove any existing copyright or license notices
|
||||
from the source.
|
||||
|
||||
**Origin**
|
||||
- Clause 1 of the IJG License
|
||||
- Clause 1 of the Modified BSD License
|
||||
- Clauses 1 and 3 of the zlib License
|
||||
|
||||
2. You must add your own copyright notice to the header of each source
|
||||
file you modified, so others can tell that you modified that file (if
|
||||
there is not an existing copyright header in that file, then you can
|
||||
simply add a notice stating that you modified the file.)
|
||||
|
||||
**Origin**
|
||||
- Clause 1 of the IJG License
|
||||
- Clause 2 of the zlib License
|
||||
|
||||
3. You must include the IJG README file, and you must not alter any of the
|
||||
copyright or license text in that file.
|
||||
|
||||
**Origin**
|
||||
- Clause 1 of the IJG License
|
||||
|
||||
2. If you are distributing only libjpeg-turbo binaries without the source, or
|
||||
if you are distributing an application that statically links with
|
||||
libjpeg-turbo, then:
|
||||
|
||||
1. Your product documentation must include a message stating:
|
||||
|
||||
This software is based in part on the work of the Independent JPEG
|
||||
Group.
|
||||
|
||||
**Origin**
|
||||
- Clause 2 of the IJG license
|
||||
|
||||
2. If your binary distribution includes or uses the TurboJPEG API, then
|
||||
your product documentation must include the text of the Modified BSD
|
||||
License (see below.)
|
||||
|
||||
**Origin**
|
||||
- Clause 2 of the Modified BSD License
|
||||
|
||||
3. You cannot use the name of the IJG or The libjpeg-turbo Project or the
|
||||
contributors thereof in advertising, publicity, etc.
|
||||
|
||||
**Origin**
|
||||
- IJG License
|
||||
- Clause 3 of the Modified BSD License
|
||||
|
||||
4. The IJG and The libjpeg-turbo Project do not warrant libjpeg-turbo to be
|
||||
free of defects, nor do we accept any liability for undesirable
|
||||
consequences resulting from your use of the software.
|
||||
|
||||
**Origin**
|
||||
- IJG License
|
||||
- Modified BSD License
|
||||
- zlib License
|
||||
|
||||
|
||||
The Modified (3-clause) BSD License
|
||||
===================================
|
||||
|
||||
Copyright (C)2009-2021 D. R. Commander. All Rights Reserved.
|
||||
Copyright (C)2015 Viktor Szathmáry. All Rights Reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
- Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
- Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
- Neither the name of the libjpeg-turbo Project nor the names of its
|
||||
contributors may be used to endorse or promote products derived from this
|
||||
software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS",
|
||||
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE
|
||||
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
|
||||
Why Three Licenses?
|
||||
===================
|
||||
|
||||
The zlib License could have been used instead of the Modified (3-clause) BSD
|
||||
License, and since the IJG License effectively subsumes the distribution
|
||||
conditions of the zlib License, this would have effectively placed
|
||||
libjpeg-turbo binary distributions under the IJG License. However, the IJG
|
||||
License specifically refers to the Independent JPEG Group and does not extend
|
||||
attribution and endorsement protections to other entities. Thus, it was
|
||||
desirable to choose a license that granted us the same protections for new code
|
||||
that were granted to the IJG for code derived from their software.
|
||||
|
||||
# END libjpeg-turbo license file
|
||||
|
||||
|
||||
# BEGIN IJG (Independent JPEG Group) legal information
|
||||
|
||||
LEGAL ISSUES
|
||||
============
|
||||
|
||||
In plain English:
|
||||
|
||||
1. We don't promise that this software works. (But if you find any bugs,
|
||||
please let us know!)
|
||||
2. You can use this software for whatever you want. You don't have to pay us.
|
||||
3. You may not pretend that you wrote this software. If you use it in a
|
||||
program, you must acknowledge somewhere in your documentation that
|
||||
you've used the IJG code.
|
||||
|
||||
In legalese:
|
||||
|
||||
The authors make NO WARRANTY or representation, either express or implied,
|
||||
with respect to this software, its quality, accuracy, merchantability, or
|
||||
fitness for a particular purpose. This software is provided "AS IS", and you,
|
||||
its user, assume the entire risk as to its quality and accuracy.
|
||||
|
||||
This software is copyright (C) 1991-2020, Thomas G. Lane, Guido Vollbeding.
|
||||
All Rights Reserved except as specified below.
|
||||
|
||||
Permission is hereby granted to use, copy, modify, and distribute this
|
||||
software (or portions thereof) for any purpose, without fee, subject to these
|
||||
conditions:
|
||||
(1) If any part of the source code for this software is distributed, then this
|
||||
README file must be included, with this copyright and no-warranty notice
|
||||
unaltered; and any additions, deletions, or changes to the original files
|
||||
must be clearly indicated in accompanying documentation.
|
||||
(2) If only executable code is distributed, then the accompanying
|
||||
documentation must state that "this software is based in part on the work of
|
||||
the Independent JPEG Group".
|
||||
(3) Permission for use of this software is granted only if the user accepts
|
||||
full responsibility for any undesirable consequences; the authors accept
|
||||
NO LIABILITY for damages of any kind.
|
||||
|
||||
These conditions apply to any software derived from or based on the IJG code,
|
||||
not just to the unmodified library. If you use our work, you ought to
|
||||
acknowledge us.
|
||||
|
||||
Permission is NOT granted for the use of any IJG author's name or company name
|
||||
in advertising or publicity relating to this software or products derived from
|
||||
it. This software may be referred to only as "the Independent JPEG Group's
|
||||
software".
|
||||
|
||||
We specifically permit and encourage the use of this software as the basis of
|
||||
commercial products, provided that all warranty or liability claims are
|
||||
assumed by the product vendor.
|
||||
|
||||
# END IJG (Independent JPEG Group) legal information
|
||||
|
||||
|
||||
# BEGIN ICU (International Components for Unicode) license file
|
||||
|
||||
COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later)
|
||||
|
||||
Copyright © 1991-2020 Unicode, Inc. All rights reserved.
|
||||
Distributed under the Terms of Use in https://www.unicode.org/copyright.html.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Unicode data files and any associated documentation
|
||||
(the "Data Files") or Unicode software and any associated documentation
|
||||
(the "Software") to deal in the Data Files or Software
|
||||
without restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, and/or sell copies of
|
||||
the Data Files or Software, and to permit persons to whom the Data Files
|
||||
or Software are furnished to do so, provided that either
|
||||
(a) this copyright and permission notice appear with all copies
|
||||
of the Data Files or Software, or
|
||||
(b) this copyright and permission notice appear in associated
|
||||
Documentation.
|
||||
|
||||
THE DATA FILES AND SOFTWARE ARE PROVIDED "AS IS", WITHOUT WARRANTY OF
|
||||
ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
|
||||
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT OF THIRD PARTY RIGHTS.
|
||||
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN THIS
|
||||
NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL
|
||||
DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
|
||||
TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THE DATA FILES OR SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of a copyright holder
|
||||
shall not be used in advertising or otherwise to promote the sale,
|
||||
use or other dealings in these Data Files or Software without prior
|
||||
written authorization of the copyright holder.
|
||||
|
||||
---------------------
|
||||
|
||||
Third-Party Software Licenses
|
||||
|
||||
This section contains third-party software notices and/or additional
|
||||
terms for licensed third-party software components included within ICU
|
||||
libraries.
|
||||
|
||||
1. ICU License - ICU 1.8.1 to ICU 57.1
|
||||
|
||||
COPYRIGHT AND PERMISSION NOTICE
|
||||
|
||||
Copyright (c) 1995-2016 International Business Machines Corporation and others
|
||||
All rights reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, and/or sell copies of the Software, and to permit persons
|
||||
to whom the Software is furnished to do so, provided that the above
|
||||
copyright notice(s) and this permission notice appear in all copies of
|
||||
the Software and that both the above copyright notice(s) and this
|
||||
permission notice appear in supporting documentation.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
|
||||
SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
|
||||
RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
|
||||
CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
||||
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
Except as contained in this notice, the name of a copyright holder
|
||||
shall not be used in advertising or otherwise to promote the sale, use
|
||||
or other dealings in this Software without prior written authorization
|
||||
of the copyright holder.
|
||||
|
||||
All trademarks and registered trademarks mentioned herein are the
|
||||
property of their respective owners.
|
||||
|
||||
2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt)
|
||||
|
||||
# The Google Chrome software developed by Google is licensed under
|
||||
# the BSD license. Other software included in this distribution is
|
||||
# provided under other licenses, as set forth below.
|
||||
#
|
||||
# The BSD License
|
||||
# http://opensource.org/licenses/bsd-license.php
|
||||
# Copyright (C) 2006-2008, Google Inc.
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
# Redistributions in binary form must reproduce the above
|
||||
# copyright notice, this list of conditions and the following
|
||||
# disclaimer in the documentation and/or other materials provided with
|
||||
# the distribution.
|
||||
# Neither the name of Google Inc. nor the names of its
|
||||
# contributors may be used to endorse or promote products derived from
|
||||
# this software without specific prior written permission.
|
||||
#
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||
# BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
#
|
||||
# The word list in cjdict.txt are generated by combining three word lists
|
||||
# listed below with further processing for compound word breaking. The
|
||||
# frequency is generated with an iterative training against Google web
|
||||
# corpora.
|
||||
#
|
||||
# * Libtabe (Chinese)
|
||||
# - https://sourceforge.net/project/?group_id=1519
|
||||
# - Its license terms and conditions are shown below.
|
||||
#
|
||||
# * IPADIC (Japanese)
|
||||
# - http://chasen.aist-nara.ac.jp/chasen/distribution.html
|
||||
# - Its license terms and conditions are shown below.
|
||||
#
|
||||
# ---------COPYING.libtabe ---- BEGIN--------------------
|
||||
#
|
||||
# /*
|
||||
# * Copyright (c) 1999 TaBE Project.
|
||||
# * Copyright (c) 1999 Pai-Hsiang Hsiao.
|
||||
# * All rights reserved.
|
||||
# *
|
||||
# * Redistribution and use in source and binary forms, with or without
|
||||
# * modification, are permitted provided that the following conditions
|
||||
# * are met:
|
||||
# *
|
||||
# * . Redistributions of source code must retain the above copyright
|
||||
# * notice, this list of conditions and the following disclaimer.
|
||||
# * . Redistributions in binary form must reproduce the above copyright
|
||||
# * notice, this list of conditions and the following disclaimer in
|
||||
# * the documentation and/or other materials provided with the
|
||||
# * distribution.
|
||||
# * . Neither the name of the TaBE Project nor the names of its
|
||||
# * contributors may be used to endorse or promote products derived
|
||||
# * from this software without specific prior written permission.
|
||||
# *
|
||||
# * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
# * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
# * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
# * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
# * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
# * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
# * OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# */
|
||||
#
|
||||
# /*
|
||||
# * Copyright (c) 1999 Computer Systems and Communication Lab,
|
||||
# * Institute of Information Science, Academia
|
||||
# * Sinica. All rights reserved.
|
||||
# *
|
||||
# * Redistribution and use in source and binary forms, with or without
|
||||
# * modification, are permitted provided that the following conditions
|
||||
# * are met:
|
||||
# *
|
||||
# * . Redistributions of source code must retain the above copyright
|
||||
# * notice, this list of conditions and the following disclaimer.
|
||||
# * . Redistributions in binary form must reproduce the above copyright
|
||||
# * notice, this list of conditions and the following disclaimer in
|
||||
# * the documentation and/or other materials provided with the
|
||||
# * distribution.
|
||||
# * . Neither the name of the Computer Systems and Communication Lab
|
||||
# * nor the names of its contributors may be used to endorse or
|
||||
# * promote products derived from this software without specific
|
||||
# * prior written permission.
|
||||
# *
|
||||
# * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
# * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
# * REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
# * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
# * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
# * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
# * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
# * OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# */
|
||||
#
|
||||
# Copyright 1996 Chih-Hao Tsai @ Beckman Institute,
|
||||
# University of Illinois
|
||||
# [email protected] http://casper.beckman.uiuc.edu/~c-tsai4
|
||||
#
|
||||
# ---------------COPYING.libtabe-----END--------------------------------
|
||||
#
|
||||
#
|
||||
# ---------------COPYING.ipadic-----BEGIN-------------------------------
|
||||
#
|
||||
# Copyright 2000, 2001, 2002, 2003 Nara Institute of Science
|
||||
# and Technology. All Rights Reserved.
|
||||
#
|
||||
# Use, reproduction, and distribution of this software is permitted.
|
||||
# Any copy of this software, whether in its original form or modified,
|
||||
# must include both the above copyright notice and the following
|
||||
# paragraphs.
|
||||
#
|
||||
# Nara Institute of Science and Technology (NAIST),
|
||||
# the copyright holders, disclaims all warranties with regard to this
|
||||
# software, including all implied warranties of merchantability and
|
||||
# fitness, in no event shall NAIST be liable for
|
||||
# any special, indirect or consequential damages or any damages
|
||||
# whatsoever resulting from loss of use, data or profits, whether in an
|
||||
# action of contract, negligence or other tortuous action, arising out
|
||||
# of or in connection with the use or performance of this software.
|
||||
#
|
||||
# A large portion of the dictionary entries
|
||||
# originate from ICOT Free Software. The following conditions for ICOT
|
||||
# Free Software applies to the current dictionary as well.
|
||||
#
|
||||
# Each User may also freely distribute the Program, whether in its
|
||||
# original form or modified, to any third party or parties, PROVIDED
|
||||
# that the provisions of Section 3 ("NO WARRANTY") will ALWAYS appear
|
||||
# on, or be attached to, the Program, which is distributed substantially
|
||||
# in the same form as set out herein and that such intended
|
||||
# distribution, if actually made, will neither violate or otherwise
|
||||
# contravene any of the laws and regulations of the countries having
|
||||
# jurisdiction over the User or the intended distribution itself.
|
||||
#
|
||||
# NO WARRANTY
|
||||
#
|
||||
# The program was produced on an experimental basis in the course of the
|
||||
# research and development conducted during the project and is provided
|
||||
# to users as so produced on an experimental basis. Accordingly, the
|
||||
# program is provided without any warranty whatsoever, whether express,
|
||||
# implied, statutory or otherwise. The term "warranty" used herein
|
||||
# includes, but is not limited to, any warranty of the quality,
|
||||
# performance, merchantability and fitness for a particular purpose of
|
||||
# the program and the nonexistence of any infringement or violation of
|
||||
# any right of any third party.
|
||||
#
|
||||
# Each user of the program will agree and understand, and be deemed to
|
||||
# have agreed and understood, that there is no warranty whatsoever for
|
||||
# the program and, accordingly, the entire risk arising from or
|
||||
# otherwise connected with the program is assumed by the user.
|
||||
#
|
||||
# Therefore, neither ICOT, the copyright holder, or any other
|
||||
# organization that participated in or was otherwise related to the
|
||||
# development of the program and their respective officials, directors,
|
||||
# officers and other employees shall be held liable for any and all
|
||||
# damages, including, without limitation, general, special, incidental
|
||||
# and consequential damages, arising out of or otherwise in connection
|
||||
# with the use or inability to use the program or any product, material
|
||||
# or result produced or otherwise obtained by using the program,
|
||||
# regardless of whether they have been advised of, or otherwise had
|
||||
# knowledge of, the possibility of such damages at any time during the
|
||||
# project or thereafter. Each user will be deemed to have agreed to the
|
||||
# foregoing by his or her commencement of use of the program. The term
|
||||
# "use" as used herein includes, but is not limited to, the use,
|
||||
# modification, copying and distribution of the program and the
|
||||
# production of secondary products from the program.
|
||||
#
|
||||
# In the case where the program, whether in its original form or
|
||||
# modified, was distributed or delivered to or received by a user from
|
||||
# any person, organization or entity other than ICOT, unless it makes or
|
||||
# grants independently of ICOT any specific warranty to the user in
|
||||
# writing, such person, organization or entity, will also be exempted
|
||||
# from and not be held liable to the user for any such damages as noted
|
||||
# above as far as the program is concerned.
|
||||
#
|
||||
# ---------------COPYING.ipadic-----END----------------------------------
|
||||
|
||||
3. Lao Word Break Dictionary Data (laodict.txt)
|
||||
|
||||
# Copyright (C) 2016 and later: Unicode, Inc. and others.
|
||||
# License & terms of use: http://www.unicode.org/copyright.html
|
||||
# Copyright (c) 2015 International Business Machines Corporation
|
||||
# and others. All Rights Reserved.
|
||||
#
|
||||
# Project: https://github.com/rober42539/lao-dictionary
|
||||
# Dictionary: https://github.com/rober42539/lao-dictionary/laodict.txt
|
||||
# License: https://github.com/rober42539/lao-dictionary/LICENSE.txt
|
||||
# (copied below)
|
||||
#
|
||||
# This file is derived from the above dictionary version of Nov 22, 2020
|
||||
# ----------------------------------------------------------------------
|
||||
# Copyright (C) 2013 Brian Eugene Wilson, Robert Martin Campbell.
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# Redistributions of source code must retain the above copyright notice, this
|
||||
# list of conditions and the following disclaimer. Redistributions in binary
|
||||
# form must reproduce the above copyright notice, this list of conditions and
|
||||
# the following disclaimer in the documentation and/or other materials
|
||||
# provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||
# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
# OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
4. Burmese Word Break Dictionary Data (burmesedict.txt)
|
||||
|
||||
# Copyright (c) 2014 International Business Machines Corporation
|
||||
# and others. All Rights Reserved.
|
||||
#
|
||||
# This list is part of a project hosted at:
|
||||
# github.com/kanyawtech/myanmar-karen-word-lists
|
||||
#
|
||||
# --------------------------------------------------------------------------
|
||||
# Copyright (c) 2013, LeRoy Benjamin Sharon
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met: Redistributions of source code must retain the above
|
||||
# copyright notice, this list of conditions and the following
|
||||
# disclaimer. Redistributions in binary form must reproduce the
|
||||
# above copyright notice, this list of conditions and the following
|
||||
# disclaimer in the documentation and/or other materials provided
|
||||
# with the distribution.
|
||||
#
|
||||
# Neither the name Myanmar Karen Word Lists, nor the names of its
|
||||
# contributors may be used to endorse or promote products derived
|
||||
# from this software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
|
||||
# CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
|
||||
# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
|
||||
# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
# ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
|
||||
# TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
||||
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
# SUCH DAMAGE.
|
||||
# --------------------------------------------------------------------------
|
||||
|
||||
5. Time Zone Database
|
||||
|
||||
ICU uses the public domain data and code derived from Time Zone
|
||||
Database for its time zone support. The ownership of the TZ database
|
||||
is explained in BCP 175: Procedure for Maintaining the Time Zone
|
||||
Database section 7.
|
||||
|
||||
# 7. Database Ownership
|
||||
#
|
||||
# The TZ database itself is not an IETF Contribution or an IETF
|
||||
# document. Rather it is a pre-existing and regularly updated work
|
||||
# that is in the public domain, and is intended to remain in the
|
||||
# public domain. Therefore, BCPs 78 [RFC5378] and 79 [RFC3979] do
|
||||
# not apply to the TZ Database or contributions that individuals make
|
||||
# to it. Should any claims be made and substantiated against the TZ
|
||||
# Database, the organization that is providing the IANA
|
||||
# Considerations defined in this RFC, under the memorandum of
|
||||
# understanding with the IETF, currently ICANN, may act in accordance
|
||||
# with all competent court orders. No ownership claims will be made
|
||||
# by ICANN or the IETF Trust on the database or the code. Any person
|
||||
# making a contribution to the database or code waives all rights to
|
||||
# future claims in that contribution or in the TZ Database.
|
||||
|
||||
6. Google double-conversion
|
||||
|
||||
Copyright 2006-2011, the V8 project authors. All rights reserved.
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials provided
|
||||
with the distribution.
|
||||
* Neither the name of Google Inc. nor the names of its
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
# END ICU (International Components for Unicode) license file
|
||||
@@ -0,0 +1,908 @@
|
||||
Metadata-Version: 2.1
|
||||
Name: pypdfium2
|
||||
Version: 4.30.1
|
||||
Summary: Python bindings to PDFium
|
||||
Home-page: https://github.com/pypdfium2-team/pypdfium2
|
||||
Author: pypdfium2-team
|
||||
Author-email: [email protected]
|
||||
License: BSD-3-Clause, Apache-2.0, PdfiumThirdParty
|
||||
Project-URL: Source, https://github.com/pypdfium2-team/pypdfium2
|
||||
Project-URL: Tracker, https://github.com/pypdfium2-team/pypdfium2/issues
|
||||
Project-URL: Documentation, https://pypdfium2.readthedocs.io
|
||||
Project-URL: Changelog, https://pypdfium2.readthedocs.io/en/stable/changelog.html
|
||||
Keywords: pdf,pdfium
|
||||
Classifier: Development Status :: 4 - Beta
|
||||
Classifier: Intended Audience :: Developers
|
||||
Classifier: Intended Audience :: Information Technology
|
||||
Classifier: Programming Language :: Python :: 3
|
||||
Classifier: Programming Language :: Python :: 3 :: Only
|
||||
Classifier: Programming Language :: Python :: Implementation :: CPython
|
||||
Classifier: Topic :: Multimedia :: Graphics
|
||||
Classifier: Topic :: Software Development :: Libraries
|
||||
Requires-Python: >= 3.6
|
||||
Description-Content-Type: text/markdown
|
||||
License-File: LICENSES/Apache-2.0.txt
|
||||
License-File: LICENSES/BSD-3-Clause.txt
|
||||
License-File: LICENSES/CC-BY-4.0.txt
|
||||
License-File: LICENSES/LicenseRef-PdfiumThirdParty.txt
|
||||
License-File: .reuse/dep5-wheel
|
||||
|
||||
<!-- SPDX-FileCopyrightText: 2024 geisserml <[email protected]> -->
|
||||
<!-- SPDX-License-Identifier: CC-BY-4.0 -->
|
||||
|
||||
# pypdfium2
|
||||
|
||||
[](https://pepy.tech/project/pypdfium2)
|
||||
|
||||
[pypdfium2](https://github.com/pypdfium2-team/pypdfium2) is an [ABI-level](#drawbacks-of-abi-level-bindings) Python 3 binding to [PDFium](https://pdfium.googlesource.com/pdfium/+/refs/heads/main), a powerful and liberal-licensed library for PDF rendering, inspection, manipulation and creation.
|
||||
|
||||
It is built with [ctypesgen](https://github.com/pypdfium2-team/ctypesgen) and external [PDFium binaries](https://github.com/bblanchon/pdfium-binaries/).
|
||||
The custom setup infrastructure provides a seamless packaging and installation process. A wide range of platforms is supported with pre-built packages.
|
||||
|
||||
pypdfium2 includes helpers to simplify common use cases, while the raw PDFium/ctypes API remains accessible as well.
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
<!-- FIXME is there a better/universal way to create linkable sub-sections without them being a heading? Note, the current solution is specific to GH and doesn't work on RTD. -->
|
||||
|
||||
* <a id="user-content-install-pypi" class="anchor" href="#install-pypi">From PyPI 🔗</a> (recommended)
|
||||
```bash
|
||||
python -m pip install -U pypdfium2
|
||||
```
|
||||
This will use a pre-built wheel package, the easiest way of installing pypdfium2.
|
||||
|
||||
|
||||
* <a id="user-content-install-source" class="anchor" href="#install-source">From source 🔗</a>
|
||||
|
||||
* Dependencies:
|
||||
- System: git, C pre-processor (gcc/clang - alternatively, specify the command to envoke via `$CPP`)
|
||||
- Python: ctypesgen (pypdfium2-team fork), wheel, setuptools. Usually installed automatically.
|
||||
|
||||
* Get the code
|
||||
```
|
||||
git clone "https://github.com/pypdfium2-team/pypdfium2.git"
|
||||
cd pypdfium2/
|
||||
```
|
||||
|
||||
* <a id="user-content-install-source-default" class="anchor" href="#install-source-default">With pre-built binary 🔗</a>
|
||||
```bash
|
||||
# In the pypdfium2/ directory
|
||||
python -m pip install -v .
|
||||
```
|
||||
A binary is downloaded implicitly from `pdfium-binaries` and bundled into pypdfium2.
|
||||
|
||||
* <a id="user-content-install-source-selfbuilt" class="anchor" href="#install-source-selfbuilt">With self-built binary 🔗</a>
|
||||
```bash
|
||||
# call build script with --help to list options
|
||||
python setupsrc/pypdfium2_setup/build_pdfium.py
|
||||
PDFIUM_PLATFORM="sourcebuild" python -m pip install -v .
|
||||
```
|
||||
Building PDFium may take a long time, as it comes with its bundled toolchain and deps, rather than taking them from the system.[^pdfium_buildsystem]
|
||||
However, we can at least provide the `--use-syslibs` option to build against system-provided runtime libraries.
|
||||
|
||||
* <a id="user-content-install-source-system" class="anchor" href="#install-source-system">With system-provided binary 🔗</a>
|
||||
```bash
|
||||
# Substitute $PDFIUM_VER with the system pdfium's build version.
|
||||
# For ABI safety reasons, you'll want to make sure `$PDFIUM_VER` is correct and the bindings are rebuilt whenever system pdfium is updated.
|
||||
PDFIUM_PLATFORM="system:$PDFIUM_VER" python -m pip install -v .
|
||||
```
|
||||
Link against external pdfium instead of bundling it.
|
||||
Note, this is basically a high-level convenience entry point to internal bindings generation, and intended for end users. Therefore it is less flexible, supporting only the "simple case" for now.
|
||||
For more sohpisticated use cases that need passing custom parameters to ctypesgen (e.g. runtime libdirs / headers / feature flags), consider [caller-provided data files](#install-source-caller).
|
||||
|
||||
<!-- TODO version.json: reconsider origin - should we add a new field for the packager? -->
|
||||
* <a id="user-content-install-source-caller" class="anchor" href="#install-source-caller">With caller-provided data files 🔗</a> (this is expected to work offline)
|
||||
```bash
|
||||
# Call ctypesgen (see --help or packaging_base.py::run_ctypesgen() for further options)
|
||||
# Reminder: you'll want to use the pypdfium2-team fork of ctypesgen
|
||||
ctypesgen --library pdfium --runtime-libdirs $MY_LIBDIRS --headers $MY_INCLUDE_DIR/fpdf*.h -o src/pypdfium2_raw/bindings.py [-D $MY_FLAGS]
|
||||
|
||||
# Write the version file (fill the placeholders).
|
||||
# Note, this is not a mature interface yet and might change!
|
||||
# major/minor/build/patch: integers forming the pdfium version being packaged
|
||||
# n_commits/hash: git describe like post-tag info (0/null for release commit)
|
||||
# origin: a string to identify the build, consisting of binary source and package provider (e.g. "system/debian", "pdfium-binaries/debian")
|
||||
# flags: a comma-delimited list of pdfium feature flag strings (e.g. "V8", "XFA") - may be empty for default build
|
||||
cat >"src/pypdfium2_raw/version.json" <<END
|
||||
{
|
||||
"major": $PDFIUM_MAJOR,
|
||||
"minor": $PDFIUM_MINOR,
|
||||
"build": $PDFIUM_BUILD,
|
||||
"patch": $PDFIUM_PATCH,
|
||||
"n_commits": $POST_TAG_COMMIT_COUNT,
|
||||
"hash": $POST_TAG_HASH,
|
||||
"origin": "$ORIGIN",
|
||||
"flags": [$MY_FLAGS]
|
||||
}
|
||||
END
|
||||
|
||||
# optional: copy in a binary if bundling
|
||||
cp "$BINARY_PATH" src/pypdfium2_raw/libpdfium.so
|
||||
|
||||
# Finally, install
|
||||
# set $MY_PLATFORM to "system" if building against system pdfium, "auto" or the platform name otherwise
|
||||
PDFIUM_PLATFORM='prepared!$MY_PLATFORM:$PDFIUM_BUILD' python -m pip install --no-build-isolation -v .
|
||||
```
|
||||
|
||||
See [Setup Magic](#setup-magic) for details.
|
||||
|
||||
Support for source installs (esp. with self-built/system pdfium) is limited, as their integrity depends somewhat on a correctly acting caller.
|
||||
|
||||
Installing an `sdist` does not implicitly trigger a sourcebuild if no pre-built binary is available. It is preferred to let callers decide consciously what to do, and run the build script without pip encapsulation.
|
||||
|
||||
Relevant pip options:
|
||||
* `-v`: Verbose logging output. Useful for debugging.
|
||||
* `-e`: Install in editable mode, so the installation points to the source tree. This way, changes directly take effect without needing to re-install. Recommended for development.
|
||||
* `--no-build-isolation`: Do not isolate setup in a virtual env; use the main env instead. This renders `pyproject.toml [build-system]` inactive, setup deps must be prepared by caller. Useful to install custom versions of setup deps, or as speedup when installing repeatedly.
|
||||
|
||||
[^pdfium_buildsystem]: This means pdfium may not compile on arbitrary hosts. The script is limited to build hosts supported by Google's toolchain. Ideally, we'd need an alternative build system that runs with system packages instead.
|
||||
|
||||
|
||||
* <a id="user-content-install-conda" class="anchor" href="#install-conda">From Conda 🔗</a>
|
||||
|
||||
_**Beware:** Any conda packages/recipes of pypdfium2 or pdfium-binaries that might be provided by other distributors, including `anaconda/main` or `conda-forge` default channels, are [unofficial](#install-unofficial)._
|
||||
|
||||
+ To install
|
||||
|
||||
With permanent channel config (encouraged):
|
||||
```bash
|
||||
conda config --add channels bblanchon
|
||||
conda config --add channels pypdfium2-team
|
||||
conda config --set channel_priority strict
|
||||
conda install pypdfium2-team::pypdfium2_helpers
|
||||
```
|
||||
|
||||
Alternatively, with temporary channel config:
|
||||
```bash
|
||||
conda install pypdfium2-team::pypdfium2_helpers --override-channels -c pypdfium2-team -c bblanchon -c defaults
|
||||
```
|
||||
|
||||
Adding the channels permanently and tightening priority is encouraged to include pypdfium2 in `conda update` by default, and to avoid accidentally replacing the install with a different channel. (If desired, you may limit the channel config to the current environment by adding `--env`.)
|
||||
Otherwise, you should be cautious when making changes to the environment.
|
||||
|
||||
+ To depend on pypdfium2 in a `conda-build` recipe
|
||||
```yaml
|
||||
requirements:
|
||||
run:
|
||||
- pypdfium2-team::pypdfium2_helpers
|
||||
```
|
||||
You'll want to have downstream callers handle the custom channels as shown above, otherwise conda will not be able to satisfy requirements.
|
||||
|
||||
+ To set up channels in a GH workflow
|
||||
```yaml
|
||||
- name: ...
|
||||
uses: conda-incubator/setup-miniconda@v3
|
||||
with:
|
||||
# ... your options
|
||||
channels: pypdfium2-team,bblanchon
|
||||
channel-priority: strict
|
||||
```
|
||||
This is just a suggestion, you can also call `conda config` manually, or pass channels on command basis using `-c`, as discussed above.
|
||||
|
||||
+ To verify the sources
|
||||
```bash
|
||||
conda list --show-channel-urls "pypdfium2|pdfium-binaries"
|
||||
conda config --show-sources
|
||||
```
|
||||
The table should show `pypdfium2-team` and `bblanchon` in the channels column.
|
||||
If added permanently, the config should also include these channels, ideally with top priority.
|
||||
Please check this before reporting any issue with a conda install of pypdfium2.
|
||||
|
||||
_**Note:** Conda packages are normally managed using recipe feedstocks driven by third parties, in a Linux repository like fashion. However, with some quirks it is also possible to do conda packaging within the original project and publish to a custom channel, which is what pypdfium2-team does, and the above instructions are referring to._
|
||||
|
||||
|
||||
* <a id="user-content-install-unofficial" class="anchor" href="#install-unofficial">Unofficial packages 🔗</a>
|
||||
|
||||
The authors of this project have no control over and are not responsible for possible third-party builds of pypdfium2, and we do not support them. Please use the official packages where possible.
|
||||
If you have an issue with a third-party build, either contact your distributor, or try to reproduce with an official build.
|
||||
|
||||
Do not expect us to help with the creation of unofficial builds or add/change code for downstream setup tasks. Related issues or PRs may be closed without further notice if we don't see fit for upstream.
|
||||
|
||||
If you are a third-party distributor, please point out clearly and visibly in the description that your package is unofficial, i.e. not affiliated with or endorsed by pypdfium2 team.
|
||||
|
||||
|
||||
### Runtime Dependencies
|
||||
|
||||
As of this writing, pypdfium2 does not need any mandatory runtime dependencies apart from Python itself.
|
||||
|
||||
However, some optional support model features require additional packages:
|
||||
* [`Pillow`](https://pillow.readthedocs.io/en/stable/) (module name `PIL`) is a pouplar imaging library for Python. pypdfium2 provides convenience methods to translate between raw bitmap buffers and PIL images.
|
||||
* [`NumPy`](https://numpy.org/doc/stable/index.html) is a library for scientific computing. Similar to `Pillow`, pypdfium2 provides helpers to get a numpy array view of a raw bitmap.
|
||||
|
||||
|
||||
### Setup Magic
|
||||
|
||||
As pypdfium2 requires a C extension and has custom setup code, there are some special features to consider. Note, the APIs below may change any time and are mostly of internal interest.
|
||||
|
||||
* Binaries are stored in platform-specific sub-directories of `data/`, along with bindings and version information.
|
||||
|
||||
* `$PDFIUM_PLATFORM` defines which binary to include on setup.
|
||||
- Format spec: `[$PLATFORM][-v8][:$VERSION]` (`[]` = segments, `$CAPS` = variables).
|
||||
- Examples: `auto`, `auto:5975` `auto-v8:5975` (`auto` may be substituted by an explicit platform name, e.g. `linux_x64`).
|
||||
- Platform:
|
||||
+ If unset or `auto`, the host platform is detected and a corresponding binary will be selected.
|
||||
+ If an explicit platform identifier (e.g. `linux_x64`, `darwin_arm64`, ...), binaries for the requested platform will be used.[^platform_ids]
|
||||
+ If `system`, bind against system-provided pdfium instead of embedding a binary. Version must be given explicitly so matching bindings can be generated.
|
||||
+ If `sourcebuild`, binaries will be taken from `data/sourcebuild/`, assuming a prior run of `build_pdfium.py`.
|
||||
+ If `sdist`, no platform-dependent files will be included, so as to create a source distribution.
|
||||
`sourcebuild` and `sdist` are standalone, they cannot be followed by additional specifiers.
|
||||
- V8: If given, use the V8 (JavaScript) and XFA enabled pdfium binaries. Otherwise, use the regular (non-V8) binaries.
|
||||
- Version: If given, use the specified pdfium-binaries release. Otherwise, use the latest one.
|
||||
- It is possible to prepend `prepared!` to install with existing platform files instead of generating on the fly; the value will be used for metadata / file inclusion. This can be helpful when installing in an isolated env where ctypesgen is not available, but it is not desirable to use the reference bindings (e.g. conda).
|
||||
|
||||
* `$PYPDFIUM_MODULES=[raw,helpers]` defines the modules to include. Metadata adapts dynamically.
|
||||
- May be used by packagers to decouple raw bindings and helpers, which may be relevant if packaging against system pdfium.
|
||||
- Would also allow to install only the raw module without helpers, or only helpers with a custom raw module.
|
||||
|
||||
* `$PDFIUM_BINDINGS=reference` allows to override ctypesgen and use the reference bindings file `autorelease/bindings.py` instead.
|
||||
- This is a convenience option to get pypdfium2 installed from source even if a working ctypesgen is not available in the install env.
|
||||
- Warning: This may not be ABI-safe. Please make sure binary/bindings build headers match to avoid ABI issues.
|
||||
|
||||
[^platform_ids]: Intended for packaging, so that wheels can be crafted for any platform without access to a native host.
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
### [Support model](https://pypdfium2.readthedocs.io/en/stable/python_api.html)
|
||||
|
||||
<!-- TODO demonstrate more APIs (e. g. XObject placement, transform matrices, image extraction, ...) -->
|
||||
|
||||
Here are some examples of using the support model API.
|
||||
|
||||
* Import the library
|
||||
```python
|
||||
import pypdfium2 as pdfium
|
||||
```
|
||||
|
||||
* Open a PDF using the helper class `PdfDocument` (supports file path strings, bytes, and byte buffers)
|
||||
```python
|
||||
pdf = pdfium.PdfDocument("./path/to/document.pdf")
|
||||
version = pdf.get_version() # get the PDF standard version
|
||||
n_pages = len(pdf) # get the number of pages in the document
|
||||
page = pdf[0] # load a page
|
||||
```
|
||||
|
||||
* Render the page
|
||||
```python
|
||||
bitmap = page.render(
|
||||
scale = 1, # 72dpi resolution
|
||||
rotation = 0, # no additional rotation
|
||||
# ... further rendering options
|
||||
)
|
||||
pil_image = bitmap.to_pil()
|
||||
pil_image.show()
|
||||
```
|
||||
|
||||
* Try some page methods
|
||||
```python
|
||||
# Get page dimensions in PDF canvas units (1pt->1/72in by default)
|
||||
width, height = page.get_size()
|
||||
# Set the absolute page rotation to 90° clockwise
|
||||
page.set_rotation(90)
|
||||
|
||||
# Locate objects on the page
|
||||
for obj in page.get_objects():
|
||||
print(obj.level, obj.type, obj.get_pos())
|
||||
```
|
||||
|
||||
* Extract and search text
|
||||
```python
|
||||
# Load a text page helper
|
||||
textpage = page.get_textpage()
|
||||
|
||||
# Extract text from the whole page
|
||||
text_all = textpage.get_text_range()
|
||||
# Extract text from a specific rectangular area
|
||||
text_part = textpage.get_text_bounded(left=50, bottom=100, right=width-50, top=height-100)
|
||||
|
||||
# Locate text on the page
|
||||
searcher = textpage.search("something", match_case=False, match_whole_word=False)
|
||||
# This returns the next occurrence as (char_index, char_count), or None if not found
|
||||
first_occurrence = searcher.get_next()
|
||||
```
|
||||
|
||||
<!-- TOC API will change with the next major release -->
|
||||
* Read the table of contents
|
||||
```python
|
||||
for item in pdf.get_toc():
|
||||
state = "*" if item.n_kids == 0 else "-" if item.is_closed else "+"
|
||||
target = "?" if item.page_index is None else item.page_index+1
|
||||
print(
|
||||
" " * item.level +
|
||||
"[%s] %s -> %s # %s %s" % (
|
||||
state, item.title, target, item.view_mode, item.view_pos,
|
||||
)
|
||||
)
|
||||
```
|
||||
|
||||
* Create a new PDF with an empty A4 sized page
|
||||
```python
|
||||
pdf = pdfium.PdfDocument.new()
|
||||
width, height = (595, 842)
|
||||
page_a = pdf.new_page(width, height)
|
||||
```
|
||||
|
||||
* Include a JPEG image in a PDF
|
||||
```python
|
||||
pdf = pdfium.PdfDocument.new()
|
||||
|
||||
image = pdfium.PdfImage.new(pdf)
|
||||
image.load_jpeg("./tests/resources/mona_lisa.jpg")
|
||||
width, height = image.get_size()
|
||||
|
||||
matrix = pdfium.PdfMatrix().scale(width, height)
|
||||
image.set_matrix(matrix)
|
||||
|
||||
page = pdf.new_page(width, height)
|
||||
page.insert_obj(image)
|
||||
page.gen_content()
|
||||
```
|
||||
|
||||
* Save the document
|
||||
```python
|
||||
# PDF 1.7 standard
|
||||
pdf.save("output.pdf", version=17)
|
||||
```
|
||||
|
||||
### Raw PDFium API
|
||||
|
||||
While helper classes conveniently wrap the raw PDFium API, it may still be accessed directly and is available in the namespace `pypdfium2.raw`. Lower-level helpers that may aid with using the raw API are provided in `pypdfium2.internal`.
|
||||
|
||||
```python
|
||||
import pypdfium2.raw as pdfium_c
|
||||
import pypdfium2.internal as pdfium_i
|
||||
```
|
||||
|
||||
Since PDFium is a large library, many components are not covered by helpers yet. You may seamlessly interact with the raw API while still using helpers where available. When used as ctypes function parameter, helper objects automatically resolve to the underlying raw object (but you may still access it explicitly if desired):
|
||||
```python
|
||||
permission_flags = pdfium_c.FPDF_GetDocPermission(pdf.raw) # explicit
|
||||
permission_flags = pdfium_c.FPDF_GetDocPermission(pdf) # implicit
|
||||
```
|
||||
|
||||
For PDFium docs, please look at the comments in its [public header files](https://pdfium.googlesource.com/pdfium/+/refs/heads/main/public/).[^pdfium_docs]
|
||||
A large variety of examples on how to interface with the raw API using [`ctypes`](https://docs.python.org/3/library/ctypes.html) is already provided with [support model source code](src/pypdfium2/_helpers).
|
||||
Nonetheless, the following guide may be helpful to get started with the raw API, especially for developers who are not familiar with `ctypes` yet.
|
||||
|
||||
[^pdfium_docs]: Unfortunately, no recent HTML-rendered docs are available for PDFium at the moment.
|
||||
|
||||
<!-- TODO write something about weakref.finalize(); add example on creating a C page array -->
|
||||
|
||||
* In general, PDFium functions can be called just like normal Python functions.
|
||||
However, parameters may only be passed positionally, i. e. it is not possible to use keyword arguments.
|
||||
There are no defaults, so you always need to provide a value for each argument.
|
||||
```python
|
||||
# arguments: filepath (bytes), password (bytes|None)
|
||||
# null-terminate filepath and encode as UTF-8
|
||||
pdf = pdfium_c.FPDF_LoadDocument((filepath+"\x00").encode("utf-8"), None)
|
||||
```
|
||||
This is the underlying bindings declaration,[^bindings_decl] which loads the function from the binary and
|
||||
contains the information required to convert Python types to their C equivalents.
|
||||
```python
|
||||
if _libs["pdfium"].has("FPDF_LoadDocument", "cdecl"):
|
||||
FPDF_LoadDocument = _libs["pdfium"].get("FPDF_LoadDocument", "cdecl")
|
||||
FPDF_LoadDocument.argtypes = [FPDF_STRING, FPDF_BYTESTRING]
|
||||
FPDF_LoadDocument.restype = FPDF_DOCUMENT
|
||||
```
|
||||
Python `bytes` are converted to `FPDF_STRING` by ctypes autoconversion.
|
||||
When passing a string to a C function, it must always be null-terminated, as the function merely receives a pointer to the first item and then continues to read memory until it finds a null terminator.
|
||||
|
||||
[^bindings_decl]: From the auto-generated bindings file. We maintain a reference copy at `autorelease/bindings.py`. Or if you have an editable install, there will also be `src/pypdfium2_raw/bindings.py`.
|
||||
|
||||
* While some functions are quite easy to use, things soon get more complex.
|
||||
First of all, function parameters are not only used for input, but also for output:
|
||||
```python
|
||||
# Initialise an integer object (defaults to 0)
|
||||
c_version = ctypes.c_int()
|
||||
# Let the function assign a value to the c_int object, and capture its return code (True for success, False for failure)
|
||||
ok = pdfium_c.FPDF_GetFileVersion(pdf, c_version)
|
||||
# If successful, get the Python int by accessing the `value` attribute of the c_int object
|
||||
# Otherwise, set the variable to None (in other cases, it may be desired to raise an exception instead)
|
||||
version = c_version.value if ok else None
|
||||
```
|
||||
|
||||
* If an array is required as output parameter, you can initialise one like this (in general terms):
|
||||
```python
|
||||
# long form
|
||||
array_type = (c_type * array_length)
|
||||
array_object = array_type()
|
||||
# short form
|
||||
array_object = (c_type * array_length)()
|
||||
```
|
||||
Example: Getting view mode and target position from a destination object returned by some other function.
|
||||
```python
|
||||
# (Assuming `dest` is an FPDF_DEST)
|
||||
n_params = ctypes.c_ulong()
|
||||
# Create a C array to store up to four coordinates
|
||||
view_pos = (pdfium_c.FS_FLOAT * 4)()
|
||||
view_mode = pdfium_c.FPDFDest_GetView(dest, n_params, view_pos)
|
||||
# Convert the C array to a Python list and cut it down to the actual number of coordinates
|
||||
view_pos = list(view_pos)[:n_params.value]
|
||||
```
|
||||
|
||||
* For string output parameters, callers needs to provide a sufficiently long, pre-allocated buffer.
|
||||
This may work differently depending on what type the function requires, which encoding is used, whether the number of bytes or characters is returned, and whether space for a null terminator is included or not. Carefully review the documentation for the function in question to fulfill its requirements.
|
||||
|
||||
Example A: Getting the title string of a bookmark.
|
||||
```python
|
||||
# (Assuming `bookmark` is an FPDF_BOOKMARK)
|
||||
# First call to get the required number of bytes (not characters!), including space for a null terminator
|
||||
n_bytes = pdfium_c.FPDFBookmark_GetTitle(bookmark, None, 0)
|
||||
# Initialise the output buffer
|
||||
buffer = ctypes.create_string_buffer(n_bytes)
|
||||
# Second call with the actual buffer
|
||||
pdfium_c.FPDFBookmark_GetTitle(bookmark, buffer, n_bytes)
|
||||
# Decode to string, cutting off the null terminator
|
||||
# Encoding: UTF-16LE (2 bytes per character)
|
||||
title = buffer.raw[:n_bytes-2].decode("utf-16-le")
|
||||
```
|
||||
|
||||
Example B: Extracting text in given boundaries.
|
||||
```python
|
||||
# (Assuming `textpage` is an FPDF_TEXTPAGE and the boundary variables are set)
|
||||
# Store common arguments for the two calls
|
||||
args = (textpage, left, top, right, bottom)
|
||||
# First call to get the required number of characters (not bytes!) - a possible null terminator is not included
|
||||
n_chars = pdfium_c.FPDFText_GetBoundedText(*args, None, 0)
|
||||
# If no characters were found, return an empty string
|
||||
if n_chars <= 0:
|
||||
return ""
|
||||
# Calculate the required number of bytes (UTF-16LE encoding again)
|
||||
n_bytes = 2 * n_chars
|
||||
# Initialise the output buffer - this function can work without null terminator, so skip it
|
||||
buffer = ctypes.create_string_buffer(n_bytes)
|
||||
# Re-interpret the type from char to unsigned short as required by the function
|
||||
buffer_ptr = ctypes.cast(buffer, ctypes.POINTER(ctypes.c_ushort))
|
||||
# Second call with the actual buffer
|
||||
pdfium_c.FPDFText_GetBoundedText(*args, buffer_ptr, n_chars)
|
||||
# Decode to string (You may want to pass `errors="ignore"` to skip possible errors in the PDF's encoding)
|
||||
text = buffer.raw.decode("utf-16-le")
|
||||
```
|
||||
|
||||
* Not only are there different ways of string output that need to be handled according to the requirements of the function in question.
|
||||
String input, too, can work differently depending on encoding and type.
|
||||
We have already discussed `FPDF_LoadDocument()`, which takes a UTF-8 encoded string as `char *`.
|
||||
A different examples is `FPDFText_FindStart()`, which needs a UTF-16LE encoded string, given as `unsigned short *`:
|
||||
```python
|
||||
# (Assuming `text` is a str and `textpage` an FPDF_TEXTPAGE)
|
||||
# Add the null terminator and encode as UTF-16LE
|
||||
enc_text = (text + "\x00").encode("utf-16-le")
|
||||
# cast `enc_text` to a c_ushort pointer
|
||||
text_ptr = ctypes.cast(enc_text, ctypes.POINTER(ctypes.c_ushort))
|
||||
search = pdfium_c.FPDFText_FindStart(textpage, text_ptr, 0, 0)
|
||||
```
|
||||
|
||||
* Leaving strings, let's suppose you have a C memory buffer allocated by PDFium and wish to read its data.
|
||||
PDFium will provide you with a pointer to the first item of the byte array.
|
||||
To access the data, you'll want to re-interpret the pointer using `ctypes.cast()` to encompass the whole array:
|
||||
```python
|
||||
# (Assuming `bitmap` is an FPDF_BITMAP and `size` is the expected number of bytes in the buffer)
|
||||
buffer_ptr = pdfium_c.FPDFBitmap_GetBuffer(bitmap)
|
||||
buffer_ptr = ctypes.cast(buffer_ptr, ctypes.POINTER(ctypes.c_ubyte * size))
|
||||
# Buffer as ctypes array (referencing the original buffer, will be unavailable as soon as the bitmap is destroyed)
|
||||
c_array = buffer_ptr.contents
|
||||
# Buffer as Python bytes (independent copy)
|
||||
data = bytes(c_array)
|
||||
```
|
||||
|
||||
* Writing data from Python into a C buffer works in a similar fashion:
|
||||
```python
|
||||
# (Assuming `buffer_ptr` is a pointer to the first item of a C buffer to write into,
|
||||
# `size` the number of bytes it can store, and `py_buffer` a Python byte buffer)
|
||||
buffer_ptr = ctypes.cast(buffer_ptr, ctypes.POINTER(ctypes.c_char * size))
|
||||
# Read from the Python buffer, starting at its current position, directly into the C buffer
|
||||
# (until the target is full or the end of the source is reached)
|
||||
n_bytes = py_buffer.readinto(buffer_ptr.contents) # returns the number of bytes read
|
||||
```
|
||||
|
||||
* If you wish to check whether two objects returned by PDFium are the same, the `is` operator won't help because `ctypes` does not have original object return (OOR), i. e. new, equivalent Python objects are created each time, although they might represent one and the same C object.[^ctypes_no_oor]
|
||||
That's why you'll want to use `ctypes.addressof()` to get the memory addresses of the underlying C object.
|
||||
For instance, this is used to avoid infinite loops on circular bookmark references when iterating through the document outline:
|
||||
```python
|
||||
# (Assuming `pdf` is an FPDF_DOCUMENT)
|
||||
seen = set()
|
||||
bookmark = pdfium_c.FPDFBookmark_GetFirstChild(pdf, None)
|
||||
while bookmark:
|
||||
# bookmark is a pointer, so we need to use its `contents` attribute to get the object the pointer refers to
|
||||
# (otherwise we'd only get the memory address of the pointer itself, which would result in random behaviour)
|
||||
address = ctypes.addressof(bookmark.contents)
|
||||
if address in seen:
|
||||
break # circular reference detected
|
||||
else:
|
||||
seen.add(address)
|
||||
bookmark = pdfium_c.FPDFBookmark_GetNextSibling(pdf, bookmark)
|
||||
```
|
||||
|
||||
[^ctypes_no_oor]: Confer the [ctypes documentation on Pointers](https://docs.python.org/3/library/ctypes.html#pointers).
|
||||
|
||||
* In many situations, callback functions come in handy.[^callback_usecases] Thanks to `ctypes`, it is seamlessly possible to use callbacks across Python/C language boundaries.
|
||||
|
||||
[^callback_usecases]: e. g. incremental read/write, management of progressive tasks, ...
|
||||
|
||||
Example: Loading a document from a Python buffer. This way, file access can be controlled in Python while the whole data does not need to be in memory at once.
|
||||
```python
|
||||
import os
|
||||
|
||||
# Factory class to create callable objects holding a reference to a Python buffer
|
||||
class _reader_class:
|
||||
|
||||
def __init__(self, py_buffer):
|
||||
self.py_buffer = py_buffer
|
||||
|
||||
def __call__(self, _, position, p_buf, size):
|
||||
# Write data from Python buffer into C buffer, as explained before
|
||||
buffer_ptr = ctypes.cast(p_buf, ctypes.POINTER(ctypes.c_char * size))
|
||||
self.py_buffer.seek(position)
|
||||
self.py_buffer.readinto(buffer_ptr.contents)
|
||||
return 1 # non-zero return code for success
|
||||
|
||||
# (Assuming py_buffer is a Python file buffer, e. g. io.BufferedReader)
|
||||
# Get the length of the buffer
|
||||
py_buffer.seek(0, os.SEEK_END)
|
||||
file_len = py_buffer.tell()
|
||||
py_buffer.seek(0)
|
||||
|
||||
# Set up an interface structure for custom file access
|
||||
fileaccess = pdfium_c.FPDF_FILEACCESS()
|
||||
fileaccess.m_FileLen = file_len
|
||||
|
||||
# Assign the callback, wrapped in its CFUNCTYPE
|
||||
fileaccess.m_GetBlock = type(fileaccess.m_GetBlock)( _reader_class(py_buffer) )
|
||||
|
||||
# Finally, load the document
|
||||
pdf = pdfium_c.FPDF_LoadCustomDocument(fileaccess, None)
|
||||
```
|
||||
|
||||
<!-- TODO mention pdfium_i.get_bufreader() as a shortcut to set up an FPDF_FILEACCESS interface -->
|
||||
|
||||
* When using the raw API, special care needs to be taken regarding object lifetime, considering that Python may garbage collect objects as soon as their reference count reaches zero. However, the interpreter has no way of magically knowing how long the underlying resources of a Python object might still be needed on the C side, so measures need to be taken to keep such objects referenced until PDFium does not depend on them anymore.
|
||||
|
||||
If resources need to remain valid after the time of a function call, PDFium docs usually indicate this clearly. Ignoring requirements on object lifetime will lead to memory corruption (commonly resulting in a segfault).
|
||||
|
||||
For instance, the docs on `FPDF_LoadCustomDocument()` state that
|
||||
> The application must keep the file resources |pFileAccess| points to valid until the returned FPDF_DOCUMENT is closed. |pFileAccess| itself does not need to outlive the FPDF_DOCUMENT.
|
||||
|
||||
This means that the callback function and the Python buffer need to be kept alive as long as the `FPDF_DOCUMENT` is used.
|
||||
This can be achieved by referencing these objects in an accompanying class, e. g.
|
||||
|
||||
```python
|
||||
class PdfDataHolder:
|
||||
|
||||
def __init__(self, buffer, function):
|
||||
self.buffer = buffer
|
||||
self.function = function
|
||||
|
||||
def close(self):
|
||||
# Make sure both objects remain available until this function is called
|
||||
# No-op id() call to denote that the object needs to stay in memory up to this point
|
||||
id(self.function)
|
||||
self.buffer.close()
|
||||
|
||||
# ... set up an FPDF_FILEACCESS structure
|
||||
|
||||
# (Assuming `py_buffer` is the buffer and `fileaccess` the FPDF_FILEACCESS interface)
|
||||
data_holder = PdfDataHolder(py_buffer, fileaccess.m_GetBlock)
|
||||
pdf = pdfium_c.FPDF_LoadCustomDocument(fileaccess, None)
|
||||
|
||||
# ... work with the pdf
|
||||
|
||||
# Close the PDF to free resources
|
||||
pdfium_c.FPDF_CloseDocument(pdf)
|
||||
# Close the data holder, to keep the object itself and thereby the objects it
|
||||
# references alive up to this point, as well as to release the buffer
|
||||
data_holder.close()
|
||||
```
|
||||
|
||||
* Finally, let's finish with an example how to render the first page of a document to a `PIL` image in `RGBA` color format.
|
||||
```python
|
||||
import math
|
||||
import ctypes
|
||||
import os.path
|
||||
import PIL.Image
|
||||
import pypdfium2.raw as pdfium_c
|
||||
|
||||
# Load the document
|
||||
filepath = os.path.abspath("tests/resources/render.pdf")
|
||||
pdf = pdfium_c.FPDF_LoadDocument((filepath+"\x00").encode("utf-8"), None)
|
||||
|
||||
# Check page count to make sure it was loaded correctly
|
||||
page_count = pdfium_c.FPDF_GetPageCount(pdf)
|
||||
assert page_count >= 1
|
||||
|
||||
# Load the first page and get its dimensions
|
||||
page = pdfium_c.FPDF_LoadPage(pdf, 0)
|
||||
width = math.ceil(pdfium_c.FPDF_GetPageWidthF(page))
|
||||
height = math.ceil(pdfium_c.FPDF_GetPageHeightF(page))
|
||||
|
||||
# Create a bitmap
|
||||
# (Note, pdfium is faster at rendering transparency if we use BGRA rather than BGRx)
|
||||
use_alpha = pdfium_c.FPDFPage_HasTransparency(page)
|
||||
bitmap = pdfium_c.FPDFBitmap_Create(width, height, int(use_alpha))
|
||||
# Fill the whole bitmap with a white background
|
||||
# The color is given as a 32-bit integer in ARGB format (8 bits per channel)
|
||||
pdfium_c.FPDFBitmap_FillRect(bitmap, 0, 0, width, height, 0xFFFFFFFF)
|
||||
|
||||
# Store common rendering arguments
|
||||
render_args = (
|
||||
bitmap, # the bitmap
|
||||
page, # the page
|
||||
# positions and sizes are to be given in pixels and may exceed the bitmap
|
||||
0, # left start position
|
||||
0, # top start position
|
||||
width, # horizontal size
|
||||
height, # vertical size
|
||||
0, # rotation (as constant, not in degrees!)
|
||||
pdfium_c.FPDF_LCD_TEXT | pdfium_c.FPDF_ANNOT, # rendering flags, combined with binary or
|
||||
)
|
||||
|
||||
# Render the page
|
||||
pdfium_c.FPDF_RenderPageBitmap(*render_args)
|
||||
|
||||
# Get a pointer to the first item of the buffer
|
||||
buffer_ptr = pdfium_c.FPDFBitmap_GetBuffer(bitmap)
|
||||
# Re-interpret the pointer to encompass the whole buffer
|
||||
buffer_ptr = ctypes.cast(buffer_ptr, ctypes.POINTER(ctypes.c_ubyte * (width * height * 4)))
|
||||
|
||||
# Create a PIL image from the buffer contents
|
||||
img = PIL.Image.frombuffer("RGBA", (width, height), buffer_ptr.contents, "raw", "BGRA", 0, 1)
|
||||
# Save it as file
|
||||
img.save("out.png")
|
||||
|
||||
# Free resources
|
||||
pdfium_c.FPDFBitmap_Destroy(bitmap)
|
||||
pdfium_c.FPDF_ClosePage(page)
|
||||
pdfium_c.FPDF_CloseDocument(pdf)
|
||||
```
|
||||
|
||||
### [Command-line Interface](https://pypdfium2.readthedocs.io/en/stable/shell_api.html)
|
||||
|
||||
pypdfium2 also ships with a simple command-line interface, providing access to key features of the support model in a shell environment (e. g. rendering, content extraction, document inspection, page rearranging, ...).
|
||||
|
||||
The primary motivation behind this is to have a nice testing interface, but it may be helpful in a variety of other situations as well.
|
||||
Usage should be largely self-explanatory, assuming a minimum of familiarity with the command-line.
|
||||
|
||||
|
||||
## Licensing
|
||||
|
||||
*Important: This is NOT LEGAL ADVICE, and there is ABSOLUTELY NO WARRANTY for any information provided in this document or elsewhere in the pypdfium2 project, including earlier revisions.*
|
||||
|
||||
pypdfium2 itself is available by the terms and conditions of [`Apache-2.0`](LICENSES/Apache-2.0.txt) / [`BSD-3-Clause`](LICENSES/BSD-3-Clause.txt).
|
||||
Documentation and examples of pypdfium2 are licensed under [`CC-BY-4.0`](LICENSES/CC-BY-4.0.txt).
|
||||
|
||||
PDFium is available under a BSD-style license that can be found in its [`LICENSE`](https://pdfium.googlesource.com/pdfium/+/refs/heads/main/LICENSE) file.
|
||||
Various other open-source licenses apply to dependencies bundled with PDFium. These also have to be shipped alongside binary redistributions. Copies of identified licenses are provided in [`LicenseRef-PdfiumThirdParty.txt`](LICENSES/LicenseRef-PdfiumThirdParty.txt).
|
||||
There is no guarantee of completeness, and pdfium's dependencies might change over time. Please do notify us if you think this misses a relevant license.
|
||||
|
||||
pypdfium2 includes [SPDX](https://spdx.org/licenses/) headers in source files.
|
||||
License information for data files is provided in [`.reuse/dep5`](.reuse/dep5) as per the [`reuse` standard](https://reuse.software/spec/).
|
||||
|
||||
To the author's knowledge, pypdfium2 is one of the rare Python libraries that are capable of PDF rendering while not being covered by copyleft licenses (such as the `GPL`).[^liberal_pdf_renderlibs]
|
||||
|
||||
[^liberal_pdf_renderlibs]: The only other liberal-licensed PDF rendering libraries known to the author are [`pdf.js`](https://github.com/mozilla/pdf.js/) (JavaScript) and [`Apache PDFBox`](https://github.com/apache/pdfbox) (Java), but python bindings packages don't exist yet or are unsatisfactory. However, we wrote some gists that show it'd be possible in principle: [pdfbox](https://gist.github.com/mara004/51c3216a9eabd3dcbc78a86d877a61dc) (+ [setup](https://gist.github.com/mara004/881d0c5a99b8444fd5d1d21a333b70f8)), [pdfjs](https://gist.github.com/mara004/87276da4f8be31c80c38036c6ab667d7).
|
||||
|
||||
|
||||
## Issues
|
||||
|
||||
While using pypdfium2, you might encounter bugs or missing features.
|
||||
In this case, feel free to open an issue or discuss thread. If applicable, include details such as tracebacks, OS and CPU type, as well as the versions of pypdfium2 and used dependencies.
|
||||
__However, please note our [response policy](#contributions).__
|
||||
|
||||
Roadmap:
|
||||
* pypdfium2
|
||||
- [Issues panel](https://github.com/pypdfium2-team/pypdfium2/issues): Initial bug reports and feature requests. May need to be transferred to dependencies.
|
||||
- [Discussions page](https://github.com/pypdfium2-team/pypdfium2/discussions): General questions and suggestions.
|
||||
* PDFium
|
||||
- [Bug tracker](https://bugs.chromium.org/p/pdfium/issues/list): Issues in PDFium.
|
||||
Beware: The bridge between Python and C increases the probability of integration issues or API misuse. The symptoms can often make it look like a PDFium bug while it is not.
|
||||
- [Mailing list](https://groups.google.com/g/pdfium/): Questions regarding PDFium usage.
|
||||
* [pdfium-binaries](https://github.com/bblanchon/pdfium-binaries/issues): Binary builder.
|
||||
* [ctypesgen](https://github.com/ctypesgen/ctypesgen/issues): Bindings generator.
|
||||
|
||||
### Known limitations
|
||||
|
||||
#### Incompatibility with CPython 3.7.6 and 3.8.1
|
||||
|
||||
pypdfium2 built with mainstream ctypesgen cannot be used with releases 3.7.6 and 3.8.1 of the CPython interpreter due to a [regression](https://github.com/python/cpython/pull/16799#issuecomment-612353119) that [broke](https://github.com/ctypesgen/ctypesgen/issues/77) ctypesgen-created string handling code.
|
||||
|
||||
Since version 4, pypdfium2 is built with a patched fork of ctypesgen that removes ctypesgen's problematic string code.
|
||||
|
||||
#### Risk of unknown object lifetime violations
|
||||
|
||||
As outlined in the raw API section, it is essential that Python-managed resources remain available as long as they are needed by PDFium.
|
||||
|
||||
The problem is that the Python interpreter may garbage collect objects with reference count zero at any time, so an unreferenced but still required object may either by chance stay around long enough or disappear too soon, resulting in non-deterministic memory issues that are hard to debug.
|
||||
If the timeframe between reaching reference count zero and removal is sufficiently large and roughly consistent across different runs, it is even possible that mistakes regarding object lifetime remain unnoticed for a long time.
|
||||
|
||||
Although we intend to develop helpers carefully, it cannot be fully excluded that unknown object lifetime violations are still lurking around somewhere, especially if unexpected requirements were not documented by the time the code was written.
|
||||
|
||||
#### Missing raw PDF access
|
||||
|
||||
As of this writing, PDFium's public interface does not provide access to the raw PDF data structure (see [issue 1694](https://crbug.com/pdfium/1694)). It does not expose APIs to read/write PDF dictionaries, streams, name/number trees, etc. Instead, it merely offers a predefined set of abstracted functions. This considerably limits the library's potential, compared to other products such as `pikepdf`.
|
||||
|
||||
#### Limitations of ABI bindings
|
||||
|
||||
PDFium's non-public backend would provide extended capabilities, including [raw access](#missing-raw-pdf-access), but it is not exported into the ABI and written in C++ (not pure C), so we cannot use it with `ctypes`. This means it's out of scope for this project.
|
||||
|
||||
Also, while ABI bindings tend to be more convenient, they have some technical drawbacks compared to API bindings (see e.g. [1](https://cffi.readthedocs.io/en/latest/overview.html#abi-versus-api), [2](https://github.com/ocrmypdf/OCRmyPDF/issues/541#issuecomment-1834684532))
|
||||
|
||||
|
||||
## Development
|
||||
<!-- TODO wheel tags, maintainer access, GitHub peculiarities -->
|
||||
|
||||
### Contributions
|
||||
<!-- Inspired by bluesky's contribution rules: https://github.com/bluesky-social/indigo -->
|
||||
|
||||
> We may accept contributions, but only if our code quality expectations are met.
|
||||
|
||||
__Policy__:
|
||||
* We may not respond to your issue or PR.
|
||||
* We may close an issue or PR without much feedback.
|
||||
* We may lock discussions or contributions if our attention is getting DDOSed.
|
||||
* We may not provide much usage support.
|
||||
|
||||
### Long lines
|
||||
|
||||
The pypdfium2 codebase does not hard wrap long lines.
|
||||
It is recommended to set up automatic word wrap in your text editor, e.g. VS Code:
|
||||
```
|
||||
editor.wordWrap = bounded
|
||||
editor.wordWrapColumn = 100
|
||||
```
|
||||
|
||||
### Docs
|
||||
|
||||
pypdfium2 provides API documentation using [Sphinx](https://github.com/sphinx-doc/sphinx/), which can be rendered to various formats, including HTML:
|
||||
```bash
|
||||
sphinx-build -b html ./docs/source ./docs/build/html/
|
||||
./run build # short alias
|
||||
```
|
||||
|
||||
Built docs are primarily hosted on [`readthedocs.org`](https://readthedocs.org/projects/pypdfium2/).
|
||||
It may be configured using a [`.readthedocs.yaml`](.readthedocs.yaml) file (see [instructions](https://docs.readthedocs.io/en/stable/config-file/v2.html)), and the administration page on the web interface.
|
||||
RTD supports hosting multiple versions, so we currently have one linked to the `main` branch and another to `stable`.
|
||||
New builds are automatically triggered by a webhook whenever you push to a linked branch.
|
||||
|
||||
Additionally, one doc build can also be hosted on [GitHub Pages](https://pypdfium2-team.github.io/pypdfium2/index.html).
|
||||
It is implemented with a CI workflow, which is supposed to be triggered automatically on release.
|
||||
This provides us with full control over the build env and the used commands, whereas RTD may be less liberal in this regard.
|
||||
|
||||
|
||||
### Testing
|
||||
|
||||
pypdfium2 contains a small test suite to verify the library's functionality. It is written with [pytest](https://github.com/pytest-dev/pytest/):
|
||||
```bash
|
||||
./run test
|
||||
```
|
||||
|
||||
Note that ...
|
||||
* you can pass `-sv` to get more detailed output.
|
||||
* `$DEBUG_AUTOCLOSE=1` may be set to get debugging information on automatic object finalization.
|
||||
|
||||
To get code coverage statistics, you may call
|
||||
```bash
|
||||
./run coverage
|
||||
```
|
||||
|
||||
Sometimes, it can also be helpful to test code on many PDFs.[^testing_corpora]
|
||||
In this case, the command-line interface and `find` come in handy:
|
||||
```bash
|
||||
# Example A: Analyse PDF images (in the current working directory)
|
||||
find . -name '*.pdf' -exec bash -c "echo \"{}\" && pypdfium2 pageobjects \"{}\" --filter image" \;
|
||||
# Example B: Parse PDF table of contents
|
||||
find . -name '*.pdf' -exec bash -c "echo \"{}\" && pypdfium2 toc \"{}\"" \;
|
||||
```
|
||||
|
||||
[^testing_corpora]: For instance, one could use the testing corpora of open-source PDF libraries (pdfium, pikepdf/ocrmypdf, mupdf/ghostscript, tika/pdfbox, pdfjs, ...)
|
||||
|
||||
### Release workflow
|
||||
|
||||
The release process is fully automated using Python scripts and scheduled release workflows.
|
||||
You may also trigger the workflow manually using the GitHub Actions panel or the [`gh`](https://cli.github.com/) command-line tool.
|
||||
|
||||
Python release scripts are located in the folder `setupsrc/pypdfium2_setup`, along with custom setup code:
|
||||
* `update_pdfium.py` downloads binaries.
|
||||
* `craft_packages.py pypi` builds platform-specific wheel packages and a source distribution suitable for PyPI upload.
|
||||
* `autorelease.py` takes care of versioning, changelog, release note generation and VCS checkin.
|
||||
|
||||
The autorelease script has some peculiarities maintainers should know about:
|
||||
* The changelog for the next release shall be written into `docs/devel/changelog_staging.md`.
|
||||
On release, it will be moved into the main changelog under `docs/source/changelog.md`, annotated with the PDFium version update.
|
||||
It will also be shown on the GitHub release page.
|
||||
* pypdfium2 versioning uses the pattern `major.minor.patch`, optionally with an appended beta mark (e. g. `2.7.1`, `2.11.0`, `3.0.0b1`, ...).
|
||||
Update types such as major or beta may be controlled via `autorelease/config.json`
|
||||
|
||||
In case of necessity, you may also forego autorelease/CI and do the release manually, which will roughly work like this (though ideally it should never be needed):
|
||||
* Commit changes to the version file
|
||||
```bash
|
||||
git add src/pypdfium2/version.py
|
||||
git commit -m "increment version"
|
||||
git push
|
||||
```
|
||||
* Create a new tag that matches the version file
|
||||
```bash
|
||||
# substitute $VERSION accordingly
|
||||
git tag -a $VERSION
|
||||
git push --tags
|
||||
```
|
||||
* Build the packages
|
||||
```bash
|
||||
python setupsrc/pypdfium2_setup/update_pdfium.py
|
||||
python setupsrc/pypdfium2_setup/craft_packages.py pypi
|
||||
```
|
||||
* Upload to PyPI
|
||||
```bash
|
||||
# make sure the packages are valid
|
||||
twine check dist/*
|
||||
# upload to PyPI (this will interactively ask for your username/password)
|
||||
twine upload dist/*
|
||||
```
|
||||
* Update the `stable` branch to trigger a documentation rebuild
|
||||
```bash
|
||||
git checkout stable
|
||||
git rebase origin/main # alternatively: git reset --hard main
|
||||
git checkout main
|
||||
```
|
||||
|
||||
If something went wrong with commit or tag, you can still revert the changes:
|
||||
```bash
|
||||
# perform an interactive rebase to change history (substitute $N_COMMITS with the number of commits to drop or modify)
|
||||
git rebase -i HEAD~$N_COMMITS
|
||||
git push --force
|
||||
# delete local tag (substitute $TAGNAME accordingly)
|
||||
git tag -d $TAGNAME
|
||||
# delete remote tag
|
||||
git push --delete origin $TAGNAME
|
||||
```
|
||||
Faulty PyPI releases may be yanked using the web interface.
|
||||
|
||||
|
||||
## Prominent Embedders
|
||||
|
||||
pypdfium2 is used by prominent embedders such as
|
||||
[langchain](https://github.com/langchain-ai/langchain),
|
||||
[nougat](https://github.com/facebookresearch/nougat),
|
||||
[pdfplumber](https://github.com/jsvine/pdfplumber),
|
||||
and [doctr](https://github.com/mindee/doctr/).
|
||||
|
||||
This results in pypdfium2 being part of a large dependency tree.
|
||||
|
||||
|
||||
## Thanks to[^thanks_to]
|
||||
|
||||
<!-- order: alphabetical by surname -->
|
||||
|
||||
* [Benoît Blanchon](https://github.com/bblanchon): Author of [PDFium binaries](https://github.com/bblanchon/pdfium-binaries/) and [patches](sourcebuild/patches/).
|
||||
* [Anderson Bravalheri](https://github.com/abravalheri): Help with PEP 517/518 compliance. Hint to use an environment variable rather than separate setup files.
|
||||
* [Bastian Germann](https://github.com/bgermann): Help with inclusion of licenses for third-party components of PDFium.
|
||||
* [Tim Head](https://github.com/betatim): Original idea for Python bindings to PDFium with ctypesgen in `wowpng`.
|
||||
* [Yinlin Hu](https://github.com/YinlinHu): `pypdfium` prototype and `kuafu` PDF viewer.
|
||||
* [Adam Huganir](https://github.com/adam-huganir): Help with maintenance and development decisions since the beginning of the project.
|
||||
* [kobaltcore](https://github.com/kobaltcore): Bug fix for `PdfDocument.save()`.
|
||||
* [Mike Kroutikov](https://github.com/mkroutikov): Examples on how to use PDFium with ctypes in `redstork` and `pdfbrain`.
|
||||
|
||||
... and further [code contributors](https://github.com/pypdfium2-team/pypdfium2/graphs/contributors) (GitHub stats).
|
||||
|
||||
*If you have somehow contributed to this project but we forgot to mention you here, please let us know.*
|
||||
|
||||
[^thanks_to]: People listed in this section may not necessarily have contributed any copyrightable code to the repository. Some have rather helped with ideas, or contributions to dependencies of pypdfium2.
|
||||
|
||||
|
||||
## History
|
||||
|
||||
### PDFium
|
||||
|
||||
The PDFium code base was originally developed as part of the commercial Foxit SDK, before being acquired and open-sourced by Google, who maintain PDFium independently ever since, while Foxit continue to develop their SDK closed-source.
|
||||
|
||||
### pypdfium2
|
||||
|
||||
pypdfium2 is the successor of *pypdfium* and *pypdfium-reboot*.
|
||||
|
||||
Inspired by *wowpng*, the first known proof of concept Python binding to PDFium using ctypesgen, the initial *pypdfium* package was created. It had to be updated manually, which did not happen frequently. There were no platform-specific wheels, but only a single wheel that contained binaries for 64-bit Linux, Windows and macOS.
|
||||
|
||||
*pypdfium-reboot* then added a script to automate binary deployment and bindings generation to simplify regular updates. However, it was still not platform specific.
|
||||
|
||||
pypdfium2 is a full rewrite of *pypdfium-reboot* to build platform-specific wheels and consolidate the setup scripts. Further additions include ...
|
||||
* A CI workflow to automatically release new wheels every Tuesday
|
||||
* Support models that conveniently wrap the raw PDFium/ctypes API
|
||||
* Test code
|
||||
* A script to build PDFium from source
|
||||
@@ -0,0 +1,81 @@
|
||||
../../../bin/pypdfium2,sha256=nRXjvWzoCvcdNObnCpTQ82PjDk5hhR43n3ZtAobODy8,253
|
||||
pypdfium2-4.30.1.dist-info/Apache-2.0.txt,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
||||
pypdfium2-4.30.1.dist-info/BSD-3-Clause.txt,sha256=ptEfBpTAE36bApJLnTOhWfbHLyIPpGVbsuHqNlQ3fTk,1459
|
||||
pypdfium2-4.30.1.dist-info/CC-BY-4.0.txt,sha256=QZiWrqUMFdbkDFtLr0vTRveCI7mjVMc1etACYq_cCOw,14527
|
||||
pypdfium2-4.30.1.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
||||
pypdfium2-4.30.1.dist-info/LicenseRef-PdfiumThirdParty.txt,sha256=wv28GuslDVltHvPZgXyb8x33ErGXWDwIEWd-5dkgbus,43950
|
||||
pypdfium2-4.30.1.dist-info/METADATA,sha256=cGjgG2yD9PG3Fpt4S8hZdusVBo4Csd34fPvYE6bykXk,48220
|
||||
pypdfium2-4.30.1.dist-info/RECORD,,
|
||||
pypdfium2-4.30.1.dist-info/WHEEL,sha256=Ud_QUBeL8RkhKbvH4nVjZi_GSLlrpYRByubxAQny1jY,145
|
||||
pypdfium2-4.30.1.dist-info/dep5-wheel,sha256=f86pC_xWamjgp0AtH6h-YvGj4IB0zbLRqZOpk8mYJEg,1031
|
||||
pypdfium2-4.30.1.dist-info/entry_points.txt,sha256=UVm90veRWrqHw-jWeFoNf0Iln2m0kGGWIBVlvs13VvA,58
|
||||
pypdfium2-4.30.1.dist-info/top_level.txt,sha256=PtAMPAHlKXTIs1QX1uWQoIV6yv_ZWIdvmNoxay_Vtpg,24
|
||||
pypdfium2/__init__.py,sha256=pzO6fZXaUv6JDYgjJF7rNsfaBNRSRjLi78jOa5A2o-s,251
|
||||
pypdfium2/__main__.py,sha256=LmdjwHGflcXQNtk6EMJaOqR0oPypIbA_VatMOqxE0t8,1992
|
||||
pypdfium2/__pycache__/__init__.cpython-311.pyc,,
|
||||
pypdfium2/__pycache__/__main__.cpython-311.pyc,,
|
||||
pypdfium2/__pycache__/_library_scope.cpython-311.pyc,,
|
||||
pypdfium2/__pycache__/raw.cpython-311.pyc,,
|
||||
pypdfium2/__pycache__/version.cpython-311.pyc,,
|
||||
pypdfium2/_cli/__init__.py,sha256=5EXgqW-1N41jX9x1VAaTXfs5pqQ7NbxQJG0MlDYJsCo,117
|
||||
pypdfium2/_cli/__pycache__/__init__.cpython-311.pyc,,
|
||||
pypdfium2/_cli/__pycache__/_parsers.cpython-311.pyc,,
|
||||
pypdfium2/_cli/__pycache__/arrange.cpython-311.pyc,,
|
||||
pypdfium2/_cli/__pycache__/attachments.cpython-311.pyc,,
|
||||
pypdfium2/_cli/__pycache__/extract_images.cpython-311.pyc,,
|
||||
pypdfium2/_cli/__pycache__/extract_text.cpython-311.pyc,,
|
||||
pypdfium2/_cli/__pycache__/imgtopdf.cpython-311.pyc,,
|
||||
pypdfium2/_cli/__pycache__/pageobjects.cpython-311.pyc,,
|
||||
pypdfium2/_cli/__pycache__/pdfinfo.cpython-311.pyc,,
|
||||
pypdfium2/_cli/__pycache__/render.cpython-311.pyc,,
|
||||
pypdfium2/_cli/__pycache__/tile.cpython-311.pyc,,
|
||||
pypdfium2/_cli/__pycache__/toc.cpython-311.pyc,,
|
||||
pypdfium2/_cli/_parsers.py,sha256=4CXMf2ULSvz8H5WbBGDOiM6OIMpYcfAbApwOrnVEpVc,3385
|
||||
pypdfium2/_cli/arrange.py,sha256=RqnGb8XmnY-pQiRp-SWzdszBnIQzZEoBoHl7Pqgj3_4,1547
|
||||
pypdfium2/_cli/attachments.py,sha256=WnFotjZAOCQXtZy5w2oqlN35quBRrIlgMleVwo8XEu0,2324
|
||||
pypdfium2/_cli/extract_images.py,sha256=2CutJv6PxnrmkLrCFDkPFsafjtyg1qq57eP6QKoH6Fc,2546
|
||||
pypdfium2/_cli/extract_text.py,sha256=a94DZYIgH7QrdRab1I2LAK1betS3wi17ienv3vrlhCQ,1073
|
||||
pypdfium2/_cli/imgtopdf.py,sha256=JykBo4xBNxfF73_V8398tT0Bu8PKmmcxv2oVMPeotj0,2252
|
||||
pypdfium2/_cli/pageobjects.py,sha256=ALBVw_0BIoxY4bOFg1b2dF1AjmHrALKUJ89yVXK5j_A,3216
|
||||
pypdfium2/_cli/pdfinfo.py,sha256=5XDTLbw21bivMVxM3hF_fQTri9GO0VAgzsbmM7F1Cpc,1923
|
||||
pypdfium2/_cli/render.py,sha256=Y2XDqKX9uKJ9tLwNxqNshzAsMLruj4Nn1JR8HlYxFpk,12852
|
||||
pypdfium2/_cli/tile.py,sha256=f4hCO8XAtD7fr2HNIbGMzo5xlyQ8szrwOYOgPsZakyk,2283
|
||||
pypdfium2/_cli/toc.py,sha256=k_r6YhkDgOM-zzRweltnPas2F-B7gl0ofI7uZ83-0GU,1120
|
||||
pypdfium2/_helpers/__init__.py,sha256=ORFCr7ybZGsIQt5_8Ss65EMRCUoK09zkdF_jixiRzCY,492
|
||||
pypdfium2/_helpers/__pycache__/__init__.cpython-311.pyc,,
|
||||
pypdfium2/_helpers/__pycache__/attachment.cpython-311.pyc,,
|
||||
pypdfium2/_helpers/__pycache__/bitmap.cpython-311.pyc,,
|
||||
pypdfium2/_helpers/__pycache__/document.cpython-311.pyc,,
|
||||
pypdfium2/_helpers/__pycache__/matrix.cpython-311.pyc,,
|
||||
pypdfium2/_helpers/__pycache__/misc.cpython-311.pyc,,
|
||||
pypdfium2/_helpers/__pycache__/page.cpython-311.pyc,,
|
||||
pypdfium2/_helpers/__pycache__/pageobjects.cpython-311.pyc,,
|
||||
pypdfium2/_helpers/__pycache__/textpage.cpython-311.pyc,,
|
||||
pypdfium2/_helpers/__pycache__/unsupported.cpython-311.pyc,,
|
||||
pypdfium2/_helpers/attachment.py,sha256=hI8rl1JPIFD_RwtGnfASqB-9fMoM3BouXDDKEqk5uLg,5182
|
||||
pypdfium2/_helpers/bitmap.py,sha256=fkAJvqihMA3GdrhnUeCHBKqxIr5guXUfhcCE6p_lgEk,13373
|
||||
pypdfium2/_helpers/document.py,sha256=ITgm2zgqhi-9O4eWifLcFGeTmH1mqFLwwCe26xHxYjw,26506
|
||||
pypdfium2/_helpers/matrix.py,sha256=VGy0TlBTnhvPyjzN7zgd8hpnIhWntW7AmsATrye-gQc,6153
|
||||
pypdfium2/_helpers/misc.py,sha256=fbrVw_FgirZ9-yTOh1wM8XP6Ap4B3aYNlbLNFL52BFk,275
|
||||
pypdfium2/_helpers/page.py,sha256=oqX91nOZjxFvJ2ESqyFY54jYVUw_PuHqIr1jW5dEa2g,20257
|
||||
pypdfium2/_helpers/pageobjects.py,sha256=p9181a1fjdxouLdjflle1LHImKi5b4-ImY__JlY9GSg,16612
|
||||
pypdfium2/_helpers/textpage.py,sha256=QBBIo9jSeZu2QOVd3jlYY_8tmNhQv4cRSLxmsONPz94,12544
|
||||
pypdfium2/_helpers/unsupported.py,sha256=_oHOMgYZlXkHqBFZkrfctOKcbL_1wn565l6Rf8J57ac,1733
|
||||
pypdfium2/_library_scope.py,sha256=Bx77NN3C-2_7vTKA4Ndi6I6EvasHm04BXKC2Ee5NgNc,1629
|
||||
pypdfium2/internal/__init__.py,sha256=53VgIlwuxnFjBhdrJPeeYz3vmu8TKMOEGd92IEy5pcA,236
|
||||
pypdfium2/internal/__pycache__/__init__.cpython-311.pyc,,
|
||||
pypdfium2/internal/__pycache__/bases.cpython-311.pyc,,
|
||||
pypdfium2/internal/__pycache__/consts.cpython-311.pyc,,
|
||||
pypdfium2/internal/__pycache__/utils.cpython-311.pyc,,
|
||||
pypdfium2/internal/bases.py,sha256=geIj02Fs9DndRoVVmtqQfXPHlRepEPEEbyarBQJbs4Y,3433
|
||||
pypdfium2/internal/consts.py,sha256=xO5U6t9p-NfYWEu7HRkALDzHRJlzMFwVc32jx70IDJg,6494
|
||||
pypdfium2/internal/utils.py,sha256=Fb7J7K5DsvA23xotZd0pXi4aRvvMKc3hCkBMQlcbA-Y,2390
|
||||
pypdfium2/raw.py,sha256=j2nd_c7C0ukMmM0qD-M_-kfJXCYT8u1DjMs5-g-2UwU,260
|
||||
pypdfium2/version.json,sha256=W7c110wg-dh_d_r0zj34dyx--nJ9ytdXXsOEQhcwlAk,161
|
||||
pypdfium2/version.py,sha256=YcJU4E1Rf_xUxv-_4xSG4vTkVEDG6aMz5SJPUQ3MMSI,6658
|
||||
pypdfium2_raw/__init__.py,sha256=AYYxhVNsWihaJNqrZN-sjPduZfwMDlwA77GKszYvKq4,323
|
||||
pypdfium2_raw/__pycache__/__init__.cpython-311.pyc,,
|
||||
pypdfium2_raw/__pycache__/bindings.cpython-311.pyc,,
|
||||
pypdfium2_raw/bindings.py,sha256=EsgfgQqs6R_Yf8g6FXz1igD4zbBuy0bT7rWfe9c70do,140869
|
||||
pypdfium2_raw/libpdfium.so,sha256=elyvkTCi_XD9i7Ra4NRNW0KBkQs_g2fV-UEDLTaBGgE,5776048
|
||||
pypdfium2_raw/version.json,sha256=X36OOJX2_ids8YX1aorP3jThKpEDMK44LexYvVZPjz8,143
|
||||
@@ -0,0 +1,6 @@
|
||||
Wheel-Version: 1.0
|
||||
Generator: setuptools (75.6.0)
|
||||
Root-Is-Purelib: false
|
||||
Tag: py3-none-manylinux_2_17_x86_64
|
||||
Tag: py3-none-manylinux2014_x86_64
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
|
||||
Upstream-Name: pypdfium2
|
||||
Upstream-Contact: geisserml <[email protected]>
|
||||
Source: https://github.com/pypdfium2-team/pypdfium2
|
||||
|
||||
# This file contains copyright info for data files included in our binary wheel packages.
|
||||
# See also .reuse/dep5 regarding copyright of data files in the project directory.
|
||||
|
||||
Files:
|
||||
pypdfium2_raw/bindings.py
|
||||
pypdfium2_raw/version.json
|
||||
pypdfium2_helpers/version.json
|
||||
Copyright:
|
||||
2024 geisserml
|
||||
2024 ctypesgen developers
|
||||
License: Apache-2.0 OR BSD-3-Clause
|
||||
Comment:
|
||||
Auto-generated by ctypesgen/pypdfium2.
|
||||
pypdfium2_helpers/... applies only if the helpers module is included.
|
||||
|
||||
Files:
|
||||
pypdfium2_raw/libpdfium.so
|
||||
pypdfium2_raw/libpdfium.dylib
|
||||
pypdfium2_raw/pdfium.dll
|
||||
Copyright:
|
||||
2024 PDFium developers
|
||||
2024 Developers of projects mentioned in PdfiumThirdParty
|
||||
2024 Benoît Blanchon and pdfium-binaries contributors
|
||||
License: (BSD-3-Clause, Apache-2.0) AND LicenseRef-PdfiumThirdParty
|
||||
@@ -0,0 +1,2 @@
|
||||
[console_scripts]
|
||||
pypdfium2 = pypdfium2.__main__:cli_main
|
||||
@@ -0,0 +1,2 @@
|
||||
pypdfium2
|
||||
pypdfium2_raw
|
||||
Reference in New Issue
Block a user